From 87b78e6b706924d435f57924c991d9705b93972b Mon Sep 17 00:00:00 2001 From: damocleas Date: Sat, 22 Mar 2025 15:47:41 -0400 Subject: [PATCH 01/17] [Balance] [Move] Made more moves callable with Metronome, Assist, Sleep Talk, and Copycat (#5549) Update invalid-moves.ts --- src/data/moves/invalid-moves.ts | 104 -------------------------------- 1 file changed, 104 deletions(-) diff --git a/src/data/moves/invalid-moves.ts b/src/data/moves/invalid-moves.ts index 50f815b9e58..64052902d9d 100644 --- a/src/data/moves/invalid-moves.ts +++ b/src/data/moves/invalid-moves.ts @@ -3,144 +3,47 @@ import { Moves } from "#enums/moves"; /** Set of moves that cannot be called by {@linkcode Moves.METRONOME Metronome} */ export const invalidMetronomeMoves: ReadonlySet = new Set([ Moves.AFTER_YOU, - Moves.APPLE_ACID, - Moves.ARMOR_CANNON, Moves.ASSIST, - Moves.ASTRAL_BARRAGE, - Moves.AURA_WHEEL, Moves.BANEFUL_BUNKER, Moves.BEAK_BLAST, - Moves.BEHEMOTH_BASH, - Moves.BEHEMOTH_BLADE, Moves.BELCH, Moves.BESTOW, - Moves.BLAZING_TORQUE, - Moves.BODY_PRESS, - Moves.BRANCH_POKE, - Moves.BREAKING_SWIPE, - Moves.CELEBRATE, - Moves.CHATTER, - Moves.CHILLING_WATER, - Moves.CHILLY_RECEPTION, - Moves.CLANGOROUS_SOUL, - Moves.COLLISION_COURSE, - Moves.COMBAT_TORQUE, Moves.COMEUPPANCE, Moves.COPYCAT, Moves.COUNTER, - Moves.COVET, Moves.CRAFTY_SHIELD, - Moves.DECORATE, Moves.DESTINY_BOND, Moves.DETECT, - Moves.DIAMOND_STORM, - Moves.DOODLE, - Moves.DOUBLE_IRON_BASH, - Moves.DOUBLE_SHOCK, - Moves.DRAGON_ASCENT, - Moves.DRAGON_ENERGY, - Moves.DRUM_BEATING, - Moves.DYNAMAX_CANNON, - Moves.ELECTRO_DRIFT, Moves.ENDURE, - Moves.ETERNABEAM, - Moves.FALSE_SURRENDER, Moves.FEINT, - Moves.FIERY_WRATH, - Moves.FILLET_AWAY, Moves.FLEUR_CANNON, Moves.FOCUS_PUNCH, Moves.FOLLOW_ME, - Moves.FREEZE_SHOCK, - Moves.FREEZING_GLARE, - Moves.GLACIAL_LANCE, - Moves.GRAV_APPLE, Moves.HELPING_HAND, - Moves.HOLD_HANDS, - Moves.HYPER_DRILL, - Moves.HYPERSPACE_FURY, - Moves.HYPERSPACE_HOLE, - Moves.ICE_BURN, Moves.INSTRUCT, - Moves.JET_PUNCH, - Moves.JUNGLE_HEALING, Moves.KINGS_SHIELD, - Moves.LIFE_DEW, - Moves.LIGHT_OF_RUIN, - Moves.MAKE_IT_RAIN, - Moves.MAGICAL_TORQUE, Moves.MAT_BLOCK, Moves.ME_FIRST, - Moves.METEOR_ASSAULT, Moves.METRONOME, Moves.MIMIC, - Moves.MIND_BLOWN, Moves.MIRROR_COAT, Moves.MIRROR_MOVE, - Moves.MOONGEIST_BEAM, - Moves.NATURE_POWER, - Moves.NATURES_MADNESS, - Moves.NOXIOUS_TORQUE, Moves.OBSTRUCT, - Moves.ORDER_UP, - Moves.ORIGIN_PULSE, - Moves.OVERDRIVE, - Moves.PHOTON_GEYSER, - Moves.PLASMA_FISTS, - Moves.POPULATION_BOMB, - Moves.POUNCE, - Moves.POWER_SHIFT, - Moves.PRECIPICE_BLADES, Moves.PROTECT, - Moves.PYRO_BALL, Moves.QUASH, Moves.QUICK_GUARD, - Moves.RAGE_FIST, Moves.RAGE_POWDER, - Moves.RAGING_BULL, - Moves.RAGING_FURY, - Moves.RELIC_SONG, Moves.REVIVAL_BLESSING, - Moves.RUINATION, - Moves.SALT_CURE, - Moves.SECRET_SWORD, - Moves.SHED_TAIL, Moves.SHELL_TRAP, Moves.SILK_TRAP, Moves.SKETCH, Moves.SLEEP_TALK, - Moves.SNAP_TRAP, - Moves.SNARL, Moves.SNATCH, Moves.SNORE, - Moves.SNOWSCAPE, - Moves.SPECTRAL_THIEF, - Moves.SPICY_EXTRACT, Moves.SPIKY_SHIELD, - Moves.SPIRIT_BREAK, Moves.SPOTLIGHT, - Moves.STEAM_ERUPTION, - Moves.STEEL_BEAM, - Moves.STRANGE_STEAM, Moves.STRUGGLE, - Moves.SUNSTEEL_STRIKE, - Moves.SURGING_STRIKES, - Moves.SWITCHEROO, - Moves.TECHNO_BLAST, - Moves.TERA_STARSTORM, - Moves.THIEF, - Moves.THOUSAND_ARROWS, - Moves.THOUSAND_WAVES, - Moves.THUNDER_CAGE, - Moves.THUNDEROUS_KICK, - Moves.TIDY_UP, - Moves.TRAILBLAZE, Moves.TRANSFORM, - Moves.TRICK, - Moves.TWIN_BEAM, - Moves.V_CREATE, - Moves.WICKED_BLOW, - Moves.WICKED_TORQUE, Moves.WIDE_GUARD, ]); @@ -157,7 +60,6 @@ export const invalidAssistMoves: ReadonlySet = new Set([ Moves.CIRCLE_THROW, Moves.COPYCAT, Moves.COUNTER, - Moves.COVET, Moves.DESTINY_BOND, Moves.DETECT, Moves.DIG, @@ -192,7 +94,6 @@ export const invalidAssistMoves: ReadonlySet = new Set([ Moves.SPOTLIGHT, Moves.STRUGGLE, Moves.SWITCHEROO, - Moves.THIEF, Moves.TRANSFORM, Moves.TRICK, Moves.WHIRLWIND, @@ -208,7 +109,6 @@ export const invalidSleepTalkMoves: ReadonlySet = new Set([ Moves.COPYCAT, Moves.DIG, Moves.DIVE, - Moves.DYNAMAX_CANNON, Moves.FREEZE_SHOCK, Moves.FLY, Moves.FOCUS_PUNCH, @@ -238,15 +138,12 @@ export const invalidCopycatMoves: ReadonlySet = new Set([ Moves.ASSIST, Moves.BANEFUL_BUNKER, Moves.BEAK_BLAST, - Moves.BEHEMOTH_BASH, - Moves.BEHEMOTH_BLADE, Moves.BESTOW, Moves.CELEBRATE, Moves.CHATTER, Moves.CIRCLE_THROW, Moves.COPYCAT, Moves.COUNTER, - Moves.COVET, Moves.DESTINY_BOND, Moves.DETECT, Moves.DRAGON_TAIL, @@ -274,7 +171,6 @@ export const invalidCopycatMoves: ReadonlySet = new Set([ Moves.SPOTLIGHT, Moves.STRUGGLE, Moves.SWITCHEROO, - Moves.THIEF, Moves.TRANSFORM, Moves.TRICK, Moves.WHIRLWIND, From d0a9672e91de1c7fcf87d1f81eede4faa7dc6a86 Mon Sep 17 00:00:00 2001 From: damocleas Date: Sat, 22 Mar 2025 16:18:08 -0400 Subject: [PATCH 02/17] [Balance] [Move] Add Fleur Cannon as a Metronome callableove (#5551) * Update invalid-moves.ts * forgot fleur cannon --- src/data/moves/invalid-moves.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/data/moves/invalid-moves.ts b/src/data/moves/invalid-moves.ts index 64052902d9d..7284831528a 100644 --- a/src/data/moves/invalid-moves.ts +++ b/src/data/moves/invalid-moves.ts @@ -16,7 +16,6 @@ export const invalidMetronomeMoves: ReadonlySet = new Set([ Moves.DETECT, Moves.ENDURE, Moves.FEINT, - Moves.FLEUR_CANNON, Moves.FOCUS_PUNCH, Moves.FOLLOW_ME, Moves.HELPING_HAND, From 4b8f1df8cd4bc98b985f05931befa11183e0443d Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 22 Mar 2025 14:46:58 -0700 Subject: [PATCH 03/17] [Bug] Add list of uncallable moves for Mirror Move (#5552) * Add list of uncallable moves for Mirror Move * Mirror Move now respects the uncallable moves list --------- Co-authored-by: damocleas --- src/data/moves/invalid-moves.ts | 66 +++++++++++++++++++++++++++++++++ src/data/moves/move.ts | 7 ++-- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/data/moves/invalid-moves.ts b/src/data/moves/invalid-moves.ts index 7284831528a..5cd45de7939 100644 --- a/src/data/moves/invalid-moves.ts +++ b/src/data/moves/invalid-moves.ts @@ -174,3 +174,69 @@ export const invalidCopycatMoves: ReadonlySet = new Set([ Moves.TRICK, Moves.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, +]); diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 3d80b6b3f4c..c7b5b4aec6b 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -125,7 +125,7 @@ import { MoveTarget } from "#enums/MoveTarget"; import { MoveFlags } from "#enums/MoveFlags"; import { MoveEffectTrigger } from "#enums/MoveEffectTrigger"; import { MultiHitType } from "#enums/MultiHitType"; -import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidSleepTalkMoves } from "./invalid-moves"; +import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidMirrorMoveMoves, invalidSleepTalkMoves } from "./invalid-moves"; type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean; type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean; @@ -6966,7 +6966,8 @@ export class CopyMoveAttr extends CallMoveAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { if (this.mirrorMove) { - return target.getMoveHistory().length !== 0; + 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); @@ -8562,7 +8563,7 @@ export function initMoves() { new SelfStatusMove(Moves.METRONOME, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(RandomMoveAttr, invalidMetronomeMoves), new StatusMove(Moves.MIRROR_MOVE, PokemonType.FLYING, -1, 20, -1, 0, 1) - .attr(CopyMoveAttr, true), + .attr(CopyMoveAttr, true, invalidMirrorMoveMoves), new AttackMove(Moves.SELF_DESTRUCT, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 100, 5, -1, 0, 1) .attr(SacrificialAttr) .makesContact(false) From 1e876ec595195d4094d3cccc076c8bd7d98a5099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Serrado=20Marques?= Date: Sun, 23 Mar 2025 19:07:14 +0000 Subject: [PATCH 04/17] [BUG] fixes #5472 - transform on reload (#5508) * [BUG] fixes #5472 - transform on reload * Fix the bug where transformed pokemon failed to load sprite on reload if it was not the base form * Now properly loads the transformed sprite assets during summon phase --- src/field/pokemon.ts | 2 +- src/phases/summon-phase.ts | 4 ++ src/system/pokemon-data.ts | 29 +++++++++++++- test/abilities/imposter.test.ts | 59 +++++++++++++++++++++++++++ test/moves/transform.test.ts | 70 ++++++++++++++++++++++++++++++++- 5 files changed, 160 insertions(+), 4 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 890c6bab0d6..42fe1dc1010 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -5575,7 +5575,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } this.resetBattleSummonData(); if (this.summonDataPrimer) { - for (const k of Object.keys(this.summonData)) { + for (const k of Object.keys(this.summonDataPrimer)) { if (this.summonDataPrimer[k]) { this.summonData[k] = this.summonDataPrimer[k]; } diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 31cd2645e68..42463e7edb0 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -195,6 +195,10 @@ export class SummonPhase extends PartyMemberPokemonPhase { 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) { + pokemon.loadAssets(false); + } globalScene.time.delayedCall(1000, () => this.end()); }, }); diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 4e694bc1189..76f5526e407 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -3,7 +3,7 @@ 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 { getPokemonSpecies } from "../data/pokemon-species"; +import { getPokemonSpecies, getPokemonSpeciesForm } from "../data/pokemon-species"; import { Status } from "../data/status-effect"; import Pokemon, { EnemyPokemon, PokemonMove, PokemonSummonData } from "../field/pokemon"; import { TrainerSlot } from "../data/trainer-config"; @@ -14,6 +14,7 @@ import { 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"; +import { getSpeciesFormChangeMessage } from "#app/data/pokemon-forms"; export default class PokemonData { public id: number; @@ -63,6 +64,7 @@ export default class PokemonData { public bossSegments?: number; public summonData: PokemonSummonData; + public summonDataSpeciesFormIndex: number; /** Data that can customize a Pokemon in non-standard ways from its Species */ public customPokemonData: CustomPokemonData; @@ -145,8 +147,9 @@ export default class PokemonData { this.moveset = sourcePokemon.moveset; if (!forHistory) { this.status = sourcePokemon.status; - if (this.player) { + if (this.player && sourcePokemon.summonData) { this.summonData = sourcePokemon.summonData; + this.summonDataSpeciesFormIndex = this.getSummonDataSpeciesFormIndex(); } } } else { @@ -170,6 +173,8 @@ export default class PokemonData { 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; if (source.summonData.tags) { this.summonData.tags = source.summonData.tags?.map(t => loadBattlerTag(t)); @@ -213,8 +218,28 @@ export default class PokemonData { 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); } 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/test/abilities/imposter.test.ts b/test/abilities/imposter.test.ts index b4469cd9042..2c7302d04b7 100644 --- a/test/abilities/imposter.test.ts +++ b/test/abilities/imposter.test.ts @@ -127,4 +127,63 @@ describe("Abilities - Imposter", () => { expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); }); + + it("should persist transformed attributes across reloads", async () => { + game.override.moveset([Moves.ABSORB]); + + await game.classicMode.startBattle([Species.DITTO]); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.SPLASH); + await game.doKillOpponents(); + await game.toNextWave(); + + expect(game.scene.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); + expect(game.scene.currentBattle.waveIndex).toBe(2); + + await game.reload.reloadSession(); + + const playerReloaded = game.scene.getPlayerPokemon()!; + const playerMoveset = player.getMoveset(); + + expect(playerReloaded.getSpeciesForm().speciesId).toBe(enemy.getSpeciesForm().speciesId); + expect(playerReloaded.getAbility()).toBe(enemy.getAbility()); + expect(playerReloaded.getGender()).toBe(enemy.getGender()); + + expect(playerReloaded.getStat(Stat.HP, false)).not.toBe(enemy.getStat(Stat.HP)); + for (const s of EFFECTIVE_STATS) { + expect(playerReloaded.getStat(s, false)).toBe(enemy.getStat(s, false)); + } + + expect(playerMoveset.length).toEqual(1); + expect(playerMoveset[0]?.moveId).toEqual(Moves.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]); + + const enemy = game.scene.getEnemyPokemon()!; + + // change form + enemy.species.forms[5]; + enemy.species.formIndex = 5; + + game.move.select(Moves.SPLASH); + await game.doKillOpponents(); + await game.toNextWave(); + + expect(game.scene.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); + expect(game.scene.currentBattle.waveIndex).toBe(2); + + await game.reload.reloadSession(); + + const playerReloaded = game.scene.getPlayerPokemon()!; + + expect(playerReloaded.getSpeciesForm().speciesId).toBe(enemy.getSpeciesForm().speciesId); + expect(playerReloaded.getSpeciesForm().formIndex).toBe(enemy.getSpeciesForm().formIndex); + }); }); diff --git a/test/moves/transform.test.ts b/test/moves/transform.test.ts index 5140202a383..d37decf28f4 100644 --- a/test/moves/transform.test.ts +++ b/test/moves/transform.test.ts @@ -6,6 +6,7 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Stat, BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat"; import { Abilities } from "#enums/abilities"; +import { BattlerIndex } from "#app/battle"; // TODO: Add more tests once Transform is fully implemented describe("Moves - Transform", () => { @@ -58,7 +59,7 @@ describe("Moves - Transform", () => { } const playerMoveset = player.getMoveset(); - const enemyMoveset = player.getMoveset(); + const enemyMoveset = enemy.getMoveset(); expect(playerMoveset.length).toBe(enemyMoveset.length); for (let i = 0; i < playerMoveset.length && i < enemyMoveset.length; i++) { @@ -127,4 +128,71 @@ describe("Moves - Transform", () => { expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); }); + + it("should persist transformed attributes across reloads", async () => { + game.override.enemyMoveset([]).moveset([]); + + await game.classicMode.startBattle([Species.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.select(Moves.TRANSFORM); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.toNextWave(); + + expect(game.scene.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); + expect(game.scene.currentBattle.waveIndex).toBe(2); + + await game.reload.reloadSession(); + + const playerReloaded = game.scene.getPlayerPokemon()!; + const playerMoveset = player.getMoveset(); + + expect(playerReloaded.getSpeciesForm().speciesId).toBe(enemy.getSpeciesForm().speciesId); + expect(playerReloaded.getAbility()).toBe(enemy.getAbility()); + expect(playerReloaded.getGender()).toBe(enemy.getGender()); + + expect(playerReloaded.getStat(Stat.HP, false)).not.toBe(enemy.getStat(Stat.HP)); + for (const s of EFFECTIVE_STATS) { + expect(playerReloaded.getStat(s, false)).toBe(enemy.getStat(s, false)); + } + + expect(playerMoveset.length).toEqual(1); + expect(playerMoveset[0]?.moveId).toEqual(Moves.MEMENTO); + }); + + it("should stay transformed with the correct form after reload", async () => { + game.override.enemyMoveset([]).moveset([]); + game.override.enemySpecies(Species.DARMANITAN); + + await game.classicMode.startBattle([Species.DITTO]); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + // change form + enemy.species.forms[1]; + enemy.species.formIndex = 1; + + game.move.changeMoveset(player, Moves.TRANSFORM); + game.move.changeMoveset(enemy, Moves.MEMENTO); + + game.move.select(Moves.TRANSFORM); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.toNextWave(); + + expect(game.scene.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); + expect(game.scene.currentBattle.waveIndex).toBe(2); + + await game.reload.reloadSession(); + + const playerReloaded = game.scene.getPlayerPokemon()!; + + expect(playerReloaded.getSpeciesForm().speciesId).toBe(enemy.getSpeciesForm().speciesId); + expect(playerReloaded.getSpeciesForm().formIndex).toBe(enemy.getSpeciesForm().formIndex); + }); }); From 817095d8950d75c062c7c41ecf24c2f3c1bfe2d3 Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Sun, 23 Mar 2025 13:47:51 -0700 Subject: [PATCH 05/17] [Bug] Fix #2769 Revival Blessing Softlock in doubles (#5141) * Properly handle cases where enemy switches in due to revival * Fix user ally using move when revived * Move revival blessing function to move.ts * Properly filter for the right switch phase to remove * Re-add bug fix * Add test --- src/data/moves/move.ts | 14 +++++++++++--- test/moves/revival_blessing.test.ts | 21 +++++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index c7b5b4aec6b..9d470b86186 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -16,6 +16,7 @@ import type { AttackMoveResult, TurnMove } from "../../field/pokemon"; import type Pokemon from "../../field/pokemon"; import { EnemyPokemon, + FieldPosition, HitResult, MoveResult, PlayerPokemon, @@ -6158,9 +6159,16 @@ export class RevivalBlessingAttr extends MoveEffectAttr { if (globalScene.currentBattle.double && globalScene.getEnemyParty().length > 1) { const allyPokemon = user.getAlly(); - if (slotIndex <= 1) { - globalScene.unshiftPhase(new SwitchSummonPhase(SwitchType.SWITCH, pokemon.getFieldIndex(), slotIndex, false, false)); - } else if (allyPokemon.isFainted()) { + // 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); + // 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(); + if (user.fieldPosition === FieldPosition.CENTER) { + user.setFieldPosition(FieldPosition.LEFT); + } globalScene.unshiftPhase(new SwitchSummonPhase(SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, false)); } } diff --git a/test/moves/revival_blessing.test.ts b/test/moves/revival_blessing.test.ts index 187b5e62e76..1ceb850edea 100644 --- a/test/moves/revival_blessing.test.ts +++ b/test/moves/revival_blessing.test.ts @@ -114,4 +114,25 @@ describe("Moves - Revival Blessing", () => { expect(feebas.hp).toBe(toDmgValue(0.5 * feebas.getMaxHp())); expect(game.scene.getPlayerField()[0]).toBe(feebas); }); + + 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 + await game.classicMode.startBattle([ Species.ARCEUS, Species.GIRATINA ]); + + const enemyFainting = game.scene.getEnemyField()[0]; + + game.move.select(Moves.SPLASH, 0); + game.move.select(Moves.SPLASH, 1); + await game.killPokemon(enemyFainting); + + await game.phaseInterceptor.to("BerryPhase"); + await game.toNextTurn(); + // If there are incorrectly two switch phases into this slot, the fainted pokemon will end up in slot 3 + // Make sure it's still in slot 1 + expect(game.scene.getEnemyParty()[0]).toBe(enemyFainting); + }); }); From 40e1e7fd4eb3a852c92433683fbe7e11279a6055 Mon Sep 17 00:00:00 2001 From: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> Date: Sun, 23 Mar 2025 18:59:19 -0400 Subject: [PATCH 06/17] [Bug] Fix Reviver Seed and endure triggering on indirect damage (#5182) * Create new turnData field for tracking damageResults, check for HitResult in Reviver Seed modifier * Optional chaining for cases like stealth rock * Adds HitResult.SELF for confusion to distinguish from indirect damage * Adds HitResult.SELF to damage sound effect switch * Cover edge case of salt cure, insert HitResult for ALL damage regardless of optional variable * Change Liquid Ooze HitResult to OTHER from HEAL * Adjust OHKO moves to not bypass endure or RSeed * Add tests for reviver seed * Fixes endure to no longer block indirect damage, updates weather damage to be HitResult.OTHER, adds/fixes unit test * Change destiny bond to HitResult.OTHER so it doesn't trigger rseed * Adds destiny bond unit test * Creates additional unit tests for endure * Rename SELF hitresult to CONFUSION * Update CONFUSION enum * Refactors implementation per Wlowscha's suggestions: removes damageSources array and preventEndure variable * Rename HitResult.OTHER to INDIRECT, create INDIRECT_KO for PSong/DBond, add functionality for INDIRECT_KO to damageanim/number handler * Fixes hit result for stealth rock * Removes unnecessary check, makes DamageResult default to EFFECTIVE, updates remaining damageAndUpdate calls to use INDIRECT * Refactors damageAndUpdate to replace optional parameters with object parameter * Fixes based on Kev's suggestions * Updates tsdocs for damageAndUpdate * Fix merge conflict --------- Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> --- public/locales | 2 +- src/data/ability.ts | 12 +-- src/data/arena-tag.ts | 6 +- src/data/battler-tags.ts | 22 ++-- src/data/moves/move.ts | 19 ++-- src/field/damage-number-handler.ts | 1 + src/field/pokemon.ts | 79 +++++++------- src/modifier/modifier.ts | 3 +- src/phases/damage-anim-phase.ts | 6 +- src/phases/faint-phase.ts | 2 +- src/phases/pokemon-heal-phase.ts | 3 +- src/phases/weather-effect-phase.ts | 2 +- test/items/reviver_seed.test.ts | 159 +++++++++++++++++++++++++++++ test/moves/endure.test.ts | 39 +++++-- 14 files changed, 272 insertions(+), 83 deletions(-) create mode 100644 test/items/reviver_seed.test.ts diff --git a/public/locales b/public/locales index 6b3f37cb351..0e5c6096ba2 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 6b3f37cb351552721232f4dabefa17bddb5b9004 +Subproject commit 0e5c6096ba26f6b87aed1aab3fe9b0b23f6cbb7b diff --git a/src/data/ability.ts b/src/data/ability.ts index d9e29c5506c..3a14ad1456d 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1064,7 +1064,7 @@ 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)), HitResult.OTHER); + attacker.damageAndUpdate(Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); attacker.turnData.damageTaken += Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)); } @@ -3792,7 +3792,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)), HitResult.OTHER); + pokemon.damageAndUpdate(Utils.toDmgValue(pokemon.getMaxHp() / (16 / this.damageFactor)), { result: HitResult.INDIRECT }); } } } @@ -4084,7 +4084,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), HitResult.OTHER); + opp.damageAndUpdate(Utils.toDmgValue(opp.getMaxHp() / 8), { result: HitResult.INDIRECT }); globalScene.queueMessage(i18next.t("abilityTriggers:badDreams", { pokemonName: getPokemonNameWithAffix(opp) })); } } @@ -4567,7 +4567,7 @@ 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)), HitResult.OTHER); + attacker!.damageAndUpdate(Utils.toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); attacker!.turnData.damageTaken += Utils.toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)); } } @@ -4588,7 +4588,7 @@ export class PostFaintHPDamageAbAttr extends PostFaintAbAttr { 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 const damage = pokemon.turnData.attacksReceived[0].damage; - attacker.damageAndUpdate((damage), HitResult.OTHER); + attacker.damageAndUpdate((damage), { result: HitResult.INDIRECT }); attacker.turnData.damageTaken += damage; } } @@ -4989,7 +4989,7 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { (args[0] as Utils.NumberHolder).value = this.multiplier; pokemon.removeTag(this.tagType); if (this.recoilDamageFunc) { - pokemon.damageAndUpdate(this.recoilDamageFunc(pokemon), HitResult.OTHER, false, false, true, true); + pokemon.damageAndUpdate(this.recoilDamageFunc(pokemon), { result: HitResult.INDIRECT, ignoreSegments: true, ignoreFaintPhase: true }); } } } diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 6e8339dd54c..8f1d6b09a73 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -788,7 +788,7 @@ class SpikesTag extends ArenaTrapTag { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - pokemon.damageAndUpdate(damage, HitResult.OTHER); + pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT }); if (pokemon.turnData) { pokemon.turnData.damageTaken += damage; } @@ -982,7 +982,7 @@ class StealthRockTag extends ArenaTrapTag { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); - pokemon.damageAndUpdate(damage, HitResult.OTHER); + pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT }); if (pokemon.turnData) { pokemon.turnData.damageTaken += damage; } @@ -1327,7 +1327,7 @@ class FireGrassPledgeTag extends ArenaTag { globalScene.unshiftPhase( new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.MAGMA_STORM), ); - pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8)); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); }); return super.lapse(arena); diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 7ff74d893b6..4952488b48e 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -757,7 +757,7 @@ export class ConfusedTag extends BattlerTag { ((((2 * pokemon.level) / 5 + 2) * 40 * atk) / def / 50 + 2) * (pokemon.randSeedIntRange(85, 100) / 100), ); globalScene.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); - pokemon.damageAndUpdate(damage); + pokemon.damageAndUpdate(damage, { result: HitResult.CONFUSION }); pokemon.battleData.hitCount++; (globalScene.getCurrentPhase() as MovePhase).cancel(); } @@ -818,7 +818,7 @@ export class DestinyBondTag extends BattlerTag { pokemonNameWithAffix2: getPokemonNameWithAffix(pokemon), }), ); - pokemon.damageAndUpdate(pokemon.hp, HitResult.ONE_HIT_KO, false, false, true); + pokemon.damageAndUpdate(pokemon.hp, { result: HitResult.INDIRECT_KO, ignoreSegments: true }); return false; } } @@ -952,7 +952,7 @@ export class SeedTag extends BattlerTag { new CommonAnimPhase(source.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.LEECH_SEED), ); - const damage = pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8)); + const damage = pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); const reverseDrain = pokemon.hasAbilityWithAttr(ReverseDrainAbAttr, false); globalScene.unshiftPhase( new PokemonHealPhase( @@ -1029,7 +1029,7 @@ export class PowderTag extends BattlerTag { const cancelDamage = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelDamage); if (!cancelDamage.value) { - pokemon.damageAndUpdate(Math.floor(pokemon.getMaxHp() / 4), HitResult.OTHER); + pokemon.damageAndUpdate(Math.floor(pokemon.getMaxHp() / 4), { result: HitResult.INDIRECT }); } // "When the flame touched the powder\non the Pokémon, it exploded!" @@ -1082,7 +1082,7 @@ export class NightmareTag extends BattlerTag { applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4)); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4), { result: HitResult.INDIRECT }); } } @@ -1440,7 +1440,7 @@ export abstract class DamagingTrapTag extends TrappedTag { applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8)); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); } } @@ -1644,7 +1644,7 @@ export class ContactDamageProtectedTag extends ProtectedTag { 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)), HitResult.OTHER); + attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); } } } @@ -1810,7 +1810,7 @@ export class PerishSongTag extends BattlerTag { }), ); } else { - pokemon.damageAndUpdate(pokemon.hp, HitResult.ONE_HIT_KO, false, true, true); + pokemon.damageAndUpdate(pokemon.hp, { result: HitResult.INDIRECT_KO, ignoreSegments: true }); } return ret; @@ -2240,7 +2240,7 @@ export class SaltCuredTag extends BattlerTag { if (!cancelled.value) { const pokemonSteelOrWater = pokemon.isOfType(PokemonType.STEEL) || pokemon.isOfType(PokemonType.WATER); - pokemon.damageAndUpdate(toDmgValue(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8)); + pokemon.damageAndUpdate(toDmgValue(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); globalScene.queueMessage( i18next.t("battlerTags:saltCuredLapse", { @@ -2288,7 +2288,7 @@ export class CursedTag extends BattlerTag { applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4)); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4), { result: HitResult.INDIRECT }); globalScene.queueMessage( i18next.t("battlerTags:cursedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), @@ -2611,7 +2611,7 @@ export class GulpMissileTag extends BattlerTag { applyAbAttrs(BlockNonDirectDamageAbAttr, attacker, cancelled); if (!cancelled.value) { - attacker.damageAndUpdate(Math.max(1, Math.floor(attacker.getMaxHp() / 4)), HitResult.OTHER); + attacker.damageAndUpdate(Math.max(1, Math.floor(attacker.getMaxHp() / 4)), { result: HitResult.INDIRECT }); } if (this.tagType === BattlerTagType.GULP_MISSILE_ARROKUDA) { diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 9d470b86186..1555967789c 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -1647,7 +1647,7 @@ export class RecoilAttr extends MoveEffectAttr { return false; } - user.damageAndUpdate(recoilDamage, HitResult.OTHER, false, true, true); + user.damageAndUpdate(recoilDamage, { result: HitResult.INDIRECT, ignoreSegments: true }); globalScene.queueMessage(i18next.t("moveTriggers:hitWithRecoil", { pokemonName: getPokemonNameWithAffix(user) })); user.turnData.damageTaken += recoilDamage; @@ -1679,7 +1679,7 @@ export class SacrificialAttr extends MoveEffectAttr { * @returns true if the function succeeds **/ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - user.damageAndUpdate(user.hp, HitResult.OTHER, false, true, true); + user.damageAndUpdate(user.hp, { result: HitResult.INDIRECT, ignoreSegments: true }); user.turnData.damageTaken += user.hp; return true; @@ -1717,7 +1717,7 @@ export class SacrificialAttrOnHit extends MoveEffectAttr { return false; } - user.damageAndUpdate(user.hp, HitResult.OTHER, false, true, true); + user.damageAndUpdate(user.hp, { result: HitResult.INDIRECT, ignoreSegments: true }); user.turnData.damageTaken += user.hp; return true; @@ -1759,7 +1759,7 @@ export class HalfSacrificialAttr extends MoveEffectAttr { // 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), HitResult.OTHER, false, true, true); + user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT, ignoreSegments: true }); globalScene.queueMessage(i18next.t("moveTriggers:cutHpPowerUpMove", { pokemonName: getPokemonNameWithAffix(user) })); // Queue recoil message } return true; @@ -1806,7 +1806,7 @@ export class AddSubstituteAttr extends MoveEffectAttr { } const damageTaken = this.roundUp ? Math.ceil(user.getMaxHp() * this.hpCost) : Math.floor(user.getMaxHp() * this.hpCost); - user.damageAndUpdate(damageTaken, HitResult.OTHER, false, true, true); + user.damageAndUpdate(damageTaken, { result: HitResult.INDIRECT, ignoreSegments: true, ignoreFaintPhase: true }); user.addTag(BattlerTagType.SUBSTITUTE, 0, move.id, user.id); return true; } @@ -1956,7 +1956,7 @@ export class FlameBurstAttr extends MoveEffectAttr { return false; } - targetAlly.damageAndUpdate(Math.max(1, Math.floor(1 / 16 * targetAlly.getMaxHp())), HitResult.OTHER); + targetAlly.damageAndUpdate(Math.max(1, Math.floor(1 / 16 * targetAlly.getMaxHp())), { result: HitResult.INDIRECT }); return true; } @@ -3435,9 +3435,8 @@ export class CutHpStatStageBoostAttr extends StatStageChangeAttr { this.cutRatio = cutRatio; this.messageCallback = messageCallback; } - override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / this.cutRatio), HitResult.OTHER, false, true); + user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / this.cutRatio), { result: HitResult.INDIRECT }); user.updateInfo(); const ret = super.apply(user, target, move, args); if (this.messageCallback) { @@ -5329,7 +5328,7 @@ const crashDamageFunc = (user: Pokemon, move: Move) => { return false; } - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), HitResult.OTHER, false, true); + user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT }); globalScene.queueMessage(i18next.t("moveTriggers:keptGoingAndCrashed", { pokemonName: getPokemonNameWithAffix(user) })); user.turnData.damageTaken += Utils.toDmgValue(user.getMaxHp() / 2); @@ -5650,7 +5649,7 @@ export class CurseAttr extends MoveEffectAttr { return false; } const curseRecoilDamage = Math.max(1, Math.floor(user.getMaxHp() / 2)); - user.damageAndUpdate(curseRecoilDamage, HitResult.OTHER, false, true, true); + user.damageAndUpdate(curseRecoilDamage, { result: HitResult.INDIRECT, ignoreSegments: true }); globalScene.queueMessage( i18next.t("battlerTags:cursedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(user), diff --git a/src/field/damage-number-handler.ts b/src/field/damage-number-handler.ts index 63da641a114..9e0010a0c10 100644 --- a/src/field/damage-number-handler.ts +++ b/src/field/damage-number-handler.ts @@ -46,6 +46,7 @@ export default class DamageNumberHandler { case HitResult.NOT_VERY_EFFECTIVE: [textColor, shadowColor] = ["#f08030", "#c03028"]; break; + case HitResult.INDIRECT_KO: case HitResult.ONE_HIT_KO: [textColor, shadowColor] = ["#a040a0", "#483850"]; break; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 42fe1dc1010..43bab0f049d 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4465,11 +4465,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { 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); - - const isOneHitKo = result === HitResult.ONE_HIT_KO; + // 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); @@ -4484,19 +4482,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { 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 as DamageResult, - isCritical, - isOneHitKo, - isOneHitKo, - true, - source, - ); + /** + * 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()) { @@ -4557,7 +4553,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { globalScene.unshiftPhase( new FaintPhase( this.getBattlerIndex(), - isOneHitKo, + false, destinyTag, grudgeTag, source, @@ -4635,28 +4631,37 @@ 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. + * 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. - * @param critical boolean if move is a critical hit + * @param isCritical boolean if move is a critical hit * @param ignoreSegments boolean, passed to damage() and not used currently * @param preventEndure boolean, ignore endure properties of pokemon, passed to damage() * @param ignoreFaintPhase boolean to ignore adding a FaintPhase, passsed to damage() * @returns integer of damage done */ - damageAndUpdate( - damage: number, - result?: DamageResult, - critical = false, - ignoreSegments = false, - preventEndure = false, - ignoreFaintPhase = false, - source?: Pokemon, + damageAndUpdate(damage: number, + { + result = HitResult.EFFECTIVE, + isCritical = false, + ignoreSegments = false, + ignoreFaintPhase = false, + source = undefined, + }: + { + 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, - critical, + this.getBattlerIndex(), + damage, + result as DamageResult, + isCritical ); globalScene.unshiftPhase(damagePhase); if (this.switchOutStatus && source) { @@ -4665,7 +4670,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { damage = this.damage( damage, ignoreSegments, - preventEndure, + isIndirectDamage, ignoreFaintPhase, ); // Damage amount may have changed, but needed to be queued before calling damage function @@ -7711,8 +7716,10 @@ export enum HitResult { HEAL, FAIL, MISS, - OTHER, + INDIRECT, IMMUNE, + CONFUSION, + INDIRECT_KO, } export type DamageResult = @@ -7720,7 +7727,9 @@ export type DamageResult = | HitResult.SUPER_EFFECTIVE | HitResult.NOT_VERY_EFFECTIVE | HitResult.ONE_HIT_KO - | HitResult.OTHER; + | HitResult.CONFUSION + | HitResult.INDIRECT_KO + | HitResult.INDIRECT; /** Interface containing the results of a damage calculation for a given move */ export interface DamageCalculationResult { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index a084474ddac..4c59bfe1ef1 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -5,8 +5,7 @@ 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"; -import type { PlayerPokemon } from "#app/field/pokemon"; -import Pokemon from "#app/field/pokemon"; +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"; diff --git a/src/phases/damage-anim-phase.ts b/src/phases/damage-anim-phase.ts index e31fe8c9475..703cd3d160e 100644 --- a/src/phases/damage-anim-phase.ts +++ b/src/phases/damage-anim-phase.ts @@ -21,7 +21,7 @@ export class DamageAnimPhase extends PokemonPhase { start() { super.start(); - if (this.damageResult === HitResult.ONE_HIT_KO) { + if (this.damageResult === HitResult.ONE_HIT_KO || this.damageResult === HitResult.INDIRECT_KO) { if (globalScene.moveAnimations) { globalScene.toggleInvert(true); } @@ -42,9 +42,11 @@ export class DamageAnimPhase extends PokemonPhase { applyDamage() { switch (this.damageResult) { case HitResult.EFFECTIVE: + case HitResult.CONFUSION: globalScene.playSound("se/hit"); break; case HitResult.SUPER_EFFECTIVE: + case HitResult.INDIRECT_KO: case HitResult.ONE_HIT_KO: globalScene.playSound("se/hit_strong"); break; @@ -57,7 +59,7 @@ export class DamageAnimPhase extends PokemonPhase { globalScene.damageNumberHandler.add(this.getPokemon(), this.amount, this.damageResult, this.critical); } - if (this.damageResult !== HitResult.OTHER && this.amount > 0) { + if (this.damageResult !== HitResult.INDIRECT && this.amount > 0) { const flashTimer = globalScene.time.addEvent({ delay: 100, repeat: 5, diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 7fc7a517853..dfc0e0653a5 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -258,7 +258,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.OTHER)); + globalScene.unshiftPhase(new DamageAnimPhase(enemy.getBattlerIndex(), 0, HitResult.INDIRECT)); this.end(); } return true; diff --git a/src/phases/pokemon-heal-phase.ts b/src/phases/pokemon-heal-phase.ts index ab49def5a3d..ecfe99389eb 100644 --- a/src/phases/pokemon-heal-phase.ts +++ b/src/phases/pokemon-heal-phase.ts @@ -3,7 +3,6 @@ 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 type { DamageResult } from "#app/field/pokemon"; import { HitResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { HealingBoosterModifier } from "#app/modifier/modifier"; @@ -79,7 +78,7 @@ export class PokemonHealPhase extends CommonAnimPhase { } const healAmount = new Utils.NumberHolder(Math.floor(this.hpHealed * hpRestoreMultiplier.value)); if (healAmount.value < 0) { - pokemon.damageAndUpdate(healAmount.value * -1, HitResult.HEAL as DamageResult); + pokemon.damageAndUpdate(healAmount.value * -1, { result: HitResult.INDIRECT }); healAmount.value = 0; } // Prevent healing to full if specified (in case of healing tokens so Sturdy doesn't cause a softlock) diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index 9199b7996bc..d7a1f193029 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -66,7 +66,7 @@ export class WeatherEffectPhase extends CommonAnimPhase { const damage = Utils.toDmgValue(pokemon.getMaxHp() / 16); globalScene.queueMessage(getWeatherDamageMessage(this.weather?.weatherType!, pokemon)!); // TODO: are those bangs correct? - pokemon.damageAndUpdate(damage, HitResult.EFFECTIVE, false, false, true); + pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT, ignoreSegments: true }); }; this.executeForAll((pokemon: Pokemon) => { diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts new file mode 100644 index 00000000000..ab249d48a23 --- /dev/null +++ b/test/items/reviver_seed.test.ts @@ -0,0 +1,159 @@ +import { BattlerIndex } from "#app/battle"; +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"; +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("Items - Reviver Seed", () => { + 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, Moves.TACKLE, Moves.ENDURE ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.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); + }); + + 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 } + ])("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 ]); + 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); + 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 ]); + const player = game.scene.getPlayerPokemon()!; + player.damageAndUpdate(player.hp - 1); + player.addTag(BattlerTagType.CONFUSED, 3); + + const reviverSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; + vi.spyOn(reviverSeed, "apply"); + + vi.spyOn(player, "randSeedInt").mockReturnValue(0); // Force confusion self-hit + game.move.select(Moves.TACKLE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(player.isFainted()).toBeFalsy(); + }); + + // 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 }, + ])("should not activate the holder's reviver seed from $moveType", async ({ move }) => { + game.override + .enemyLevel(1) + .startingLevel(100) + .enemySpecies(Species.MAGIKARP) + .moveset(move) + .enemyMoveset(Moves.ENDURE); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon()!; + enemy.damageAndUpdate(enemy.hp - 1); + + game.move.select(move); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(enemy.isFainted()).toBeTruthy(); + }); + + // 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 }, + ])("should not activate the holder's reviver seed from $moveType", async ({ move }) => { + game.override + .enemyLevel(100) + .startingLevel(1) + .enemySpecies(Species.MAGIKARP) + .moveset(move) + .enemyAbility(Abilities.LIQUID_OOZE) + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([ Species.GASTLY, Species.FEEBAS ]); + const player = game.scene.getPlayerPokemon()!; + player.damageAndUpdate(player.hp - 1); + + const playerSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; + vi.spyOn(playerSeed, "apply"); + + game.move.select(move); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(player.isFainted()).toBeTruthy(); + }); + + it("should not activate the holder's reviver seed from Destiny Bond fainting", async () => { + game.override + .enemyLevel(100) + .startingLevel(1) + .enemySpecies(Species.MAGIKARP) + .moveset(Moves.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 ]); + const player = game.scene.getPlayerPokemon()!; + player.damageAndUpdate(player.hp - 1); + const enemy = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.DESTINY_BOND); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(enemy.isFainted()).toBeTruthy(); + }); +}); diff --git a/test/moves/endure.test.ts b/test/moves/endure.test.ts index 8151128479d..d706d5d9581 100644 --- a/test/moves/endure.test.ts +++ b/test/moves/endure.test.ts @@ -22,7 +22,7 @@ describe("Moves - Endure", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.THUNDER, Moves.BULLET_SEED, Moves.TOXIC]) + .moveset([ Moves.THUNDER, Moves.BULLET_SEED, Moves.TOXIC, Moves.SHEER_COLD ]) .ability(Abilities.SKILL_LINK) .startingLevel(100) .battleType("single") @@ -50,16 +50,37 @@ describe("Moves - Endure", () => { expect(game.scene.getEnemyPokemon()!.hp).toBe(1); }); - it("shouldn't prevent fainting from indirect damage", async () => { - game.override.enemyLevel(100); - await game.classicMode.startBattle([Species.ARCEUS]); - + it("should let the pokemon survive against OHKO moves", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); const enemy = game.scene.getEnemyPokemon()!; - enemy.hp = 2; - game.move.select(Moves.TOXIC); - await game.phaseInterceptor.to("VictoryPhase"); + game.move.select(Moves.SHEER_COLD); + await game.phaseInterceptor.to("TurnEndPhase"); - expect(enemy.isFainted()).toBe(true); + expect(enemy.isFainted()).toBeFalsy(); + }); + + // 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 }, + ])("should not prevent fainting from $moveType", async ({ move }) => { + game.override + .enemyLevel(1) + .startingLevel(100) + .enemySpecies(Species.MAGIKARP) + .moveset(move) + .enemyMoveset(Moves.ENDURE); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon()!; + enemy.damageAndUpdate(enemy.hp - 1); + + game.move.select(move); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(enemy.isFainted()).toBeTruthy(); }); }); From dbc8ac26af131ae09caec5a2872d820eb38dc43d Mon Sep 17 00:00:00 2001 From: Dean <69436131+emdeann@users.noreply.github.com> Date: Sun, 23 Mar 2025 16:27:20 -0700 Subject: [PATCH 07/17] [Bug] Fix #5422 Neut. Gas and Primal Weather Persist After Flee (#5496) * Add applyPreLeaveFieldAbAttrs call to AttemptRunPhase * Update tests --- src/phases/attempt-run-phase.ts | 4 +++- test/abilities/desolate-land.test.ts | 18 ++++++++++++++++++ test/abilities/neutralizing_gas.test.ts | 18 ++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index c9c0e23dabb..dab5b8789da 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -1,4 +1,4 @@ -import { applyAbAttrs, RunSuccessAbAttr } from "#app/data/ability"; +import { applyAbAttrs, applyPreLeaveFieldAbAttrs, PreLeaveFieldAbAttr, RunSuccessAbAttr } from "#app/data/ability"; import { Stat } from "#app/enums/stat"; import { StatusEffect } from "#app/enums/status-effect"; import type { PlayerPokemon, EnemyPokemon } from "#app/field/pokemon"; @@ -29,6 +29,8 @@ export class AttemptRunPhase extends PokemonPhase { applyAbAttrs(RunSuccessAbAttr, playerPokemon, null, false, escapeChance); if (playerPokemon.randSeedInt(100) < escapeChance.value && !this.forceFailEscape) { + enemyField.forEach(enemyPokemon => applyPreLeaveFieldAbAttrs(PreLeaveFieldAbAttr, enemyPokemon)); + globalScene.playSound("se/flee"); globalScene.queueMessage(i18next.t("battle:runAwaySuccess"), null, true, 500); diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts index 67d9ac1cdf5..405aab873aa 100644 --- a/test/abilities/desolate-land.test.ts +++ b/test/abilities/desolate-land.test.ts @@ -1,5 +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 { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; @@ -131,4 +133,20 @@ describe("Abilities - Desolate Land", () => { expect(game.scene.arena.weather?.weatherType).not.toBe(WeatherType.HARSH_SUN); }); + + 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 ]); + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); + + vi.spyOn(game.scene.getPlayerPokemon()!, "randSeedInt").mockReturnValue(0); + + const commandPhase = game.scene.getCurrentPhase() as CommandPhase; + commandPhase.handleCommand(Command.RUN, 0); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.arena.weather?.weatherType).not.toBe(WeatherType.HARSH_SUN); + }); }); diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index 08ab884d806..0003ee56598 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -1,4 +1,6 @@ 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 { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; @@ -157,6 +159,22 @@ describe("Abilities - Neutralizing Gas", () => { expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeUndefined(); }); + 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 ]); + expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); + + vi.spyOn(game.scene.getPlayerPokemon()!, "randSeedInt").mockReturnValue(0); + + const commandPhase = game.scene.getCurrentPhase() as CommandPhase; + commandPhase.handleCommand(Command.RUN, 0); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeUndefined(); + }); + it("should not activate abilities of pokemon no longer on the field", async () => { game.override .battleType("single") From 37e51e965740dd986310ae436c8940db8db82781 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Mon, 24 Mar 2025 03:40:17 +0100 Subject: [PATCH 08/17] [Bug][Challenge][UI/UX] Exclude invalid starters when combining challenges (#5509) * Filtering correctly when combining gen and monotype challenges * Clean-up * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Always check requested form first * Fixing Basculin * Only check forms which are starter selectable * Exclude form changes that are not triggered by an item --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/challenge.ts | 153 +++++++++++++++++----------- src/ui/pokedex-page-ui-handler.ts | 19 ---- src/ui/starter-select-ui-handler.ts | 85 +++++----------- 3 files changed, 115 insertions(+), 142 deletions(-) diff --git a/src/data/challenge.ts b/src/data/challenge.ts index b9d817836c3..a54f72aa7cc 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -18,9 +18,10 @@ import { TrainerType } from "#enums/trainer-type"; import { Nature } from "#enums/nature"; import type { Moves } from "#enums/moves"; import { TypeColor, TypeShadow } from "#enums/color"; -import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; -import { pokemonFormChanges } from "#app/data/pokemon-forms"; import { ModifierTier } from "#app/modifier/modifier-tier"; +import { globalScene } from "#app/global-scene"; +import { pokemonFormChanges } from "./pokemon-forms"; +import { pokemonEvolutions } from "./balance/pokemon-evolutions"; /** A constant for the default max cost of the starting party before a run */ const DEFAULT_PARTY_MAX_COST = 10; @@ -285,15 +286,9 @@ export abstract class Challenge { * @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 _dexAttr {@link DexAttrProps} The dex attributes of the pokemon. - * @param _soft {@link boolean} If true, allow it if it could become a valid pokemon. * @returns {@link boolean} Whether this function did anything. */ - applyStarterChoice( - _pokemon: PokemonSpecies, - _valid: Utils.BooleanHolder, - _dexAttr: DexAttrProps, - _soft = false, - ): boolean { + applyStarterChoice(_pokemon: PokemonSpecies, _valid: Utils.BooleanHolder, _dexAttr: DexAttrProps): boolean { return false; } @@ -445,27 +440,8 @@ export class SingleGenerationChallenge extends Challenge { super(Challenges.SINGLE_GENERATION, 9); } - applyStarterChoice( - pokemon: PokemonSpecies, - valid: Utils.BooleanHolder, - _dexAttr: DexAttrProps, - soft = false, - ): boolean { - const generations = [pokemon.generation]; - if (soft) { - const speciesToCheck = [pokemon.speciesId]; - while (speciesToCheck.length) { - const checking = speciesToCheck.pop(); - if (checking && pokemonEvolutions.hasOwnProperty(checking)) { - pokemonEvolutions[checking].forEach(e => { - speciesToCheck.push(e.speciesId); - generations.push(getPokemonSpecies(e.speciesId).generation); - }); - } - } - } - - if (!generations.includes(this.value)) { + applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder): boolean { + if (pokemon.generation !== this.value) { valid.value = false; return true; } @@ -739,41 +715,14 @@ export class SingleTypeChallenge extends Challenge { { species: Species.CASTFORM, type: PokemonType.NORMAL, fusion: false }, ]; // TODO: Find a solution for all Pokemon with this ssui issue, including Basculin and Burmy - private static SPECIES_OVERRIDES: Species[] = [Species.MELOETTA]; constructor() { super(Challenges.SINGLE_TYPE, 18); } - override applyStarterChoice( - pokemon: PokemonSpecies, - valid: Utils.BooleanHolder, - dexAttr: DexAttrProps, - soft = false, - ): boolean { + override applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps): boolean { const speciesForm = getPokemonSpeciesForm(pokemon.speciesId, dexAttr.formIndex); const types = [speciesForm.type1, speciesForm.type2]; - if (soft && !SingleTypeChallenge.SPECIES_OVERRIDES.includes(pokemon.speciesId)) { - const speciesToCheck = [pokemon.speciesId]; - while (speciesToCheck.length) { - const checking = speciesToCheck.pop(); - if (checking && pokemonEvolutions.hasOwnProperty(checking)) { - pokemonEvolutions[checking].forEach(e => { - speciesToCheck.push(e.speciesId); - types.push(getPokemonSpecies(e.speciesId).type1, getPokemonSpecies(e.speciesId).type2); - }); - } - if (checking && pokemonFormChanges.hasOwnProperty(checking)) { - pokemonFormChanges[checking].forEach(f1 => { - getPokemonSpecies(checking).forms.forEach(f2 => { - if (f1.formKey === f2.formKey) { - types.push(f2.type1, f2.type2); - } - }); - }); - } - } - } if (!types.includes(this.value - 1)) { valid.value = false; return true; @@ -1030,7 +979,6 @@ export class LowerStarterPointsChallenge extends Challenge { * @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 dexAttr {@link DexAttrProps} The dex attributes of the pokemon. - * @param soft {@link boolean} If true, allow it if it could become a valid pokemon. * @returns True if any challenge was successfully applied. */ export function applyChallenges( @@ -1039,7 +987,6 @@ export function applyChallenges( pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, - soft: boolean, ): boolean; /** * Apply all challenges that modify available total starter points. @@ -1222,7 +1169,7 @@ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType if (c.value !== 0) { switch (challengeType) { case ChallengeType.STARTER_CHOICE: - ret ||= c.applyStarterChoice(args[0], args[1], args[2], args[3]); + ret ||= c.applyStarterChoice(args[0], args[1], args[2]); break; case ChallengeType.STARTER_POINTS: ret ||= c.applyStarterPoints(args[0]); @@ -1305,3 +1252,87 @@ export function initChallenges() { new FlipStatChallenge(), ); } + +/** + * Apply all challenges to the given starter (and form) to check its validity. + * Differs from {@linkcode checkSpeciesValidForChallenge} which only checks form changes. + * @param species - The {@linkcode PokemonSpecies} to check the validity of. + * @param dexAttr - The {@linkcode DexAttrProps | dex attributes} of the species, including its form index. + * @param soft - If `true`, allow it if it could become valid through evolution or form change. + * @returns `true` if the species is considered valid. + */ +export function checkStarterValidForChallenge(species: PokemonSpecies, props: DexAttrProps, soft: boolean) { + if (!soft) { + const isValidForChallenge = new Utils.BooleanHolder(true); + applyChallenges(globalScene.gameMode, ChallengeType.STARTER_CHOICE, species, isValidForChallenge, props); + return isValidForChallenge.value; + } + // We check the validity of every evolution and form change, and require that at least one is valid + const speciesToCheck = [species.speciesId]; + while (speciesToCheck.length) { + const checking = speciesToCheck.pop(); + // Linter complains if we don't handle this + if (!checking) { + return false; + } + const checkingSpecies = getPokemonSpecies(checking); + if (checkSpeciesValidForChallenge(checkingSpecies, props, true)) { + return true; + } + if (checking && pokemonEvolutions.hasOwnProperty(checking)) { + pokemonEvolutions[checking].forEach(e => { + // Form check to deal with cases such as Basculin -> Basculegion + // TODO: does this miss anything if checking forms of a stage 2 Pokémon? + if (!e?.preFormKey || e.preFormKey === species.forms[props.formIndex].formKey) { + speciesToCheck.push(e.speciesId); + } + }); + } + } + return false; +} + +/** + * Apply all challenges to the given species (and form) to check its validity. + * Differs from {@linkcode checkStarterValidForChallenge} which also checks evolutions. + * @param species - The {@linkcode PokemonSpecies} to check the validity of. + * @param dexAttr - The {@linkcode DexAttrProps | dex attributes} of the species, including its form index. + * @param soft - If `true`, allow it if it could become valid through a form change. + * @returns `true` if the species is considered valid. + */ +function checkSpeciesValidForChallenge(species: PokemonSpecies, props: DexAttrProps, soft: boolean) { + const isValidForChallenge = new Utils.BooleanHolder(true); + applyChallenges(globalScene.gameMode, ChallengeType.STARTER_CHOICE, species, isValidForChallenge, props); + if (!soft || !pokemonFormChanges.hasOwnProperty(species.speciesId)) { + return isValidForChallenge.value; + } + // If the form in props is valid, return true before checking other form changes + if (soft && isValidForChallenge.value) { + return true; + } + pokemonFormChanges[species.speciesId].forEach(f1 => { + // Exclude form changes that require the mon to be on the field to begin with, + // such as Castform + if (!("item" in f1)) { + return; + } + species.forms.forEach((f2, formIndex) => { + if (f1.formKey === f2.formKey) { + const formProps = { ...props }; + formProps.formIndex = formIndex; + const isFormValidForChallenge = new Utils.BooleanHolder(true); + applyChallenges( + globalScene.gameMode, + ChallengeType.STARTER_CHOICE, + species, + isFormValidForChallenge, + formProps, + ); + if (isFormValidForChallenge.value) { + return true; + } + } + }); + }); + return false; +} diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 74921f13683..fc6e96d427f 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -20,7 +20,6 @@ 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 { GameModes } from "#app/game-mode"; import type { DexEntry, StarterAttributes } from "#app/system/game-data"; import { AbilityAttr, DexAttr } from "#app/system/game-data"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; @@ -33,7 +32,6 @@ 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 MoveInfoOverlay from "#app/ui/move-info-overlay"; import PokedexInfoOverlay from "#app/ui/pokedex-info-overlay"; import { getEggTierForSpecies } from "#app/data/egg"; @@ -51,7 +49,6 @@ import { BooleanHolder, getLocalizedSpriteKey, isNullOrUndefined, - NumberHolder, padInt, rgbHexToRgba, toReadableString, @@ -2128,22 +2125,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } } - getValueLimit(): number { - const valueLimit = new NumberHolder(0); - switch (globalScene.gameMode.modeId) { - case GameModes.ENDLESS: - case GameModes.SPLICED_ENDLESS: - valueLimit.value = 15; - break; - default: - valueLimit.value = 10; - } - - Challenge.applyChallenges(globalScene.gameMode, Challenge.ChallengeType.STARTER_POINTS, valueLimit); - - return valueLimit.value; - } - setCursor(cursor: number): boolean { const ret = super.setCursor(cursor); diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index ccc56f38368..ab8ea0adf7c 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1,6 +1,6 @@ import type { CandyUpgradeNotificationChangedEvent } from "#app/events/battle-scene"; import { BattleSceneEventType } from "#app/events/battle-scene"; -import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; +import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type { Variant } from "#app/data/variant"; import { getVariantTint, getVariantIcon } from "#app/data/variant"; import { argbFromRgba } from "@material/material-color-utilities"; @@ -19,7 +19,7 @@ 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 { allSpecies, getPokemonSpecies, 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"; @@ -80,6 +80,7 @@ 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"; export type StarterSelectCallback = (starters: Starter[]) => void; @@ -1760,21 +1761,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const species = starter.species; const [isDupe] = this.isInParty(species); const starterCost = globalScene.gameData.getSpeciesStarterValue(species.speciesId); - const isValidForChallenge = new BooleanHolder(true); - Challenge.applyChallenges( - globalScene.gameMode, - Challenge.ChallengeType.STARTER_CHOICE, + const isValidForChallenge = checkStarterValidForChallenge( species, - isValidForChallenge, globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)), this.isPartyValid(), ); const isCaught = globalScene.gameData.dexData[species.speciesId].caughtAttr; return ( - !isDupe && - isValidForChallenge.value && - currentPartyValue + starterCost <= this.getValueLimit() && - isCaught + !isDupe && isValidForChallenge && currentPartyValue + starterCost <= this.getValueLimit() && isCaught ); }); if (validStarters.length === 0) { @@ -1861,16 +1855,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const ui = this.getUi(); let options: any[] = []; // TODO: add proper type - const [isDupe, removeIndex]: [boolean, number] = this.isInParty(this.lastSpecies); // checks to see if the pokemon is a duplicate; if it is, returns the index that will be removed + const [isDupe, removeIndex]: [boolean, number] = this.isInParty(this.lastSpecies); const isPartyValid = this.isPartyValid(); - const isValidForChallenge = new BooleanHolder(true); - - Challenge.applyChallenges( - globalScene.gameMode, - Challenge.ChallengeType.STARTER_CHOICE, + const isValidForChallenge = checkStarterValidForChallenge( this.lastSpecies, - isValidForChallenge, globalScene.gameData.getSpeciesDexAttrProps( this.lastSpecies, this.getCurrentDexProps(this.lastSpecies.speciesId), @@ -1888,11 +1877,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const newCost = globalScene.gameData.getSpeciesStarterValue(this.lastSpecies.speciesId); if ( !isDupe && - isValidForChallenge.value && + isValidForChallenge && currentPartyValue + newCost <= this.getValueLimit() && this.starterSpecies.length < PLAYER_PARTY_MAX_SIZE ) { - // this checks to make sure the pokemon doesn't exist in your party, it's valid for the challenge and that it won't go over the cost limit; if it meets all these criteria it will add it to your party options = [ { label: i18next.t("starterSelectUiHandler:addToParty"), @@ -1902,7 +1890,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { globalScene.gameData.getSpeciesStarterValue(this.lastSpecies.speciesId), true, ); - if (!isDupe && isValidForChallenge.value && isOverValueLimit) { + if (!isDupe && isValidForChallenge && isOverValueLimit) { const cursorObj = this.starterCursorObjs[this.starterSpecies.length]; cursorObj.setVisible(true); cursorObj.setPosition(this.cursorObj.x, this.cursorObj.y); @@ -2993,32 +2981,27 @@ export default class StarterSelectUiHandler extends MessageUiHandler { /* Here we are making a fake form index dex props for challenges * Since some pokemon rely on forms to be valid (i.e. blaze tauros for fire challenges), we make a fake form and dex props to use in the challenge */ + if (!species.forms[i].isStarterSelectable) { + continue; + } const tempFormProps = BigInt(Math.pow(2, i)) * DexAttr.DEFAULT_FORM; - const isValidForChallenge = new BooleanHolder(true); - Challenge.applyChallenges( - globalScene.gameMode, - Challenge.ChallengeType.STARTER_CHOICE, + const isValidForChallenge = checkStarterValidForChallenge( container.species, - isValidForChallenge, globalScene.gameData.getSpeciesDexAttrProps(species, tempFormProps), true, ); - allFormsValid = allFormsValid || isValidForChallenge.value; + allFormsValid = allFormsValid || isValidForChallenge; } } else { - const isValidForChallenge = new BooleanHolder(true); - Challenge.applyChallenges( - globalScene.gameMode, - Challenge.ChallengeType.STARTER_CHOICE, + const isValidForChallenge = checkStarterValidForChallenge( container.species, - isValidForChallenge, globalScene.gameData.getSpeciesDexAttrProps( species, globalScene.gameData.getSpeciesDefaultDexAttr(container.species, false, true), ), true, ); - allFormsValid = isValidForChallenge.value; + allFormsValid = isValidForChallenge; } if (allFormsValid) { this.validStarterContainers.push(container); @@ -3851,15 +3834,6 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonSprite.setVisible(!this.statsMode); } - const isValidForChallenge = new BooleanHolder(true); - Challenge.applyChallenges( - globalScene.gameMode, - Challenge.ChallengeType.STARTER_CHOICE, - species, - isValidForChallenge, - globalScene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor), - !!this.starterSpecies.length, - ); const currentFilteredContainer = this.filteredStarterContainers.find( p => p.species.speciesId === species.speciesId, ); @@ -4233,20 +4207,15 @@ export default class StarterSelectUiHandler extends MessageUiHandler { globalScene.time.delayedCall(fixedInt(500), () => this.tryUpdateValue()); return false; } - let isPartyValid: boolean = this.isPartyValid(); // this checks to see if the party is valid + let isPartyValid: boolean = this.isPartyValid(); if (addingToParty) { - // this does a check to see if the pokemon being added is valid; if so, it will update the isPartyValid boolean - const isNewPokemonValid = new BooleanHolder(true); const species = this.filteredStarterContainers[this.cursor].species; - Challenge.applyChallenges( - globalScene.gameMode, - Challenge.ChallengeType.STARTER_CHOICE, + const isNewPokemonValid = checkStarterValidForChallenge( species, - isNewPokemonValid, globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)), false, ); - isPartyValid = isPartyValid || isNewPokemonValid.value; + isPartyValid = isPartyValid || isNewPokemonValid; } /** @@ -4270,12 +4239,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { * If speciesStarterDexEntry?.caughtAttr is true, this species registered in stater. * we change to can AddParty value to true since the user has enough cost to choose this pokemon and this pokemon registered too. */ - const isValidForChallenge = new BooleanHolder(true); - Challenge.applyChallenges( - globalScene.gameMode, - Challenge.ChallengeType.STARTER_CHOICE, + const isValidForChallenge = checkStarterValidForChallenge( this.allSpecies[s], - isValidForChallenge, globalScene.gameData.getSpeciesDexAttrProps( this.allSpecies[s], this.getCurrentDexProps(this.allSpecies[s].speciesId), @@ -4283,7 +4248,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { isPartyValid, ); - const canBeChosen = remainValue >= speciesStarterValue && isValidForChallenge.value; + const canBeChosen = remainValue >= speciesStarterValue && isValidForChallenge; const isPokemonInParty = this.isInParty(this.allSpecies[s])[0]; // this will get the valud of isDupe from isInParty. This will let us see if the pokemon in question is in our party already so we don't grey out the sprites if they're invalid @@ -4417,17 +4382,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { isPartyValid(): boolean { let canStart = false; for (let s = 0; s < this.starterSpecies.length; s++) { - const isValidForChallenge = new BooleanHolder(true); const species = this.starterSpecies[s]; - Challenge.applyChallenges( - globalScene.gameMode, - Challenge.ChallengeType.STARTER_CHOICE, + const isValidForChallenge = checkStarterValidForChallenge( species, - isValidForChallenge, globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)), false, ); - canStart = canStart || isValidForChallenge.value; + canStart = canStart || isValidForChallenge; } return canStart; } From 7f72794d2343825a0b8148cfa970663389e18a6b Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Mon, 24 Mar 2025 06:03:11 +0100 Subject: [PATCH 09/17] =?UTF-8?q?[UI/UX]=20Cancel=20button=20on=20Pok?= =?UTF-8?q?=C3=A9dex=20page=20to=20previously=20selected=20Pok=C3=A9mon=20?= =?UTF-8?q?(#5528)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Removed redundant form index argument in show() of pokedex page * Storing previous pokémon for cancel button --- src/ui/party-ui-handler.ts | 4 +-- src/ui/pokedex-page-ui-handler.ts | 48 +++++++++++++++++++++++------ src/ui/pokedex-ui-handler.ts | 4 +-- src/ui/starter-select-ui-handler.ts | 2 +- 4 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 21e5f9077f4..6a9b565989d 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -574,9 +574,7 @@ export default class PartyUiHandler extends MessageUiHandler { form: pokemon.formIndex, female: pokemon.gender === Gender.FEMALE, }; - ui.setOverlayMode(Mode.POKEDEX_PAGE, pokemon.species, pokemon.formIndex, attributes).then(() => - this.clearOptions(), - ); + ui.setOverlayMode(Mode.POKEDEX_PAGE, pokemon.species, attributes).then(() => this.clearOptions()); return true; } else if (option === PartyOption.UNPAUSE_EVOLUTION) { this.clearOptions(); diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index fc6e96d427f..86460a24fdc 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -239,6 +239,9 @@ export default class PokedexPageUiHandler extends MessageUiHandler { private starterAttributes: StarterAttributes; private savedStarterAttributes: StarterAttributes; + private previousSpecies: PokemonSpecies[]; + private previousStarterAttributes: StarterAttributes[]; + protected blockInput = false; protected blockInputOverlay = false; @@ -653,6 +656,9 @@ export default class PokedexPageUiHandler extends MessageUiHandler { // Filter bar sits above everything, except the message box this.starterSelectContainer.bringToTop(this.starterSelectMessageBoxContainer); + + this.previousSpecies = []; + this.previousStarterAttributes = []; } show(args: any[]): boolean { @@ -665,14 +671,14 @@ export default class PokedexPageUiHandler extends MessageUiHandler { return false; } this.species = args[0]; - this.formIndex = args[1] ?? 0; - this.savedStarterAttributes = args[2] ?? { + this.savedStarterAttributes = args[1] ?? { shiny: false, female: true, variant: 0, form: 0, }; - this.filteredIndices = args[3] ?? null; + this.formIndex = this.savedStarterAttributes.form ?? 0; + this.filteredIndices = args[2] ?? null; this.starterSetup(); this.moveInfoOverlay.clear(); // clear this when removing a menu; the cancel button doesn't seem to trigger this automatically on controllers @@ -1088,8 +1094,19 @@ export default class PokedexPageUiHandler extends MessageUiHandler { if (this.statsMode) { this.toggleStatsMode(false); success = true; + } else if (this.previousSpecies.length > 0) { + this.blockInput = true; + ui.setModeWithoutClear(Mode.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); + success = true; + }); + this.blockInput = false; } else { - this.getUi().revertMode(); + ui.revertMode(); success = true; } } else { @@ -1504,6 +1521,8 @@ export default class PokedexPageUiHandler extends MessageUiHandler { ? (preSpecies ?? this.species).getFormNameToDisplay(preFormIndex, true) : (preSpecies ?? this.species).getExpandedSpeciesName(), handler: () => { + this.previousSpecies.push(this.species); + this.previousStarterAttributes.push({ ...this.savedStarterAttributes }); const newSpecies = allSpecies.find( species => species.speciesId === pokemonPrevolutions[pre.speciesId], ); @@ -1519,7 +1538,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.savedStarterAttributes.form = newFormIndex; this.moveInfoOverlay.clear(); this.clearText(); - ui.setMode(Mode.POKEDEX_PAGE, newSpecies, newFormIndex, this.savedStarterAttributes); + ui.setMode(Mode.POKEDEX_PAGE, newSpecies, this.savedStarterAttributes); return true; }, onHover: () => this.showText(conditionText), @@ -1555,11 +1574,13 @@ export default class PokedexPageUiHandler extends MessageUiHandler { : (evoSpecies ?? this.species).getExpandedSpeciesName(), style: isCaughtEvo && isFormCaughtEvo ? TextStyle.WINDOW : TextStyle.SHADOW_TEXT, handler: () => { + this.previousSpecies.push(this.species); + this.previousStarterAttributes.push({ ...this.savedStarterAttributes }); this.starterAttributes.form = newFormIndex; this.savedStarterAttributes.form = newFormIndex; this.moveInfoOverlay.clear(); this.clearText(); - ui.setMode(Mode.POKEDEX_PAGE, evoSpecies, newFormIndex, this.savedStarterAttributes); + ui.setMode(Mode.POKEDEX_PAGE, evoSpecies, this.savedStarterAttributes); return true; }, onHover: () => this.showText(conditionText), @@ -1595,6 +1616,8 @@ export default class PokedexPageUiHandler extends MessageUiHandler { label: label, style: isFormCaught ? TextStyle.WINDOW : TextStyle.SHADOW_TEXT, handler: () => { + this.previousSpecies.push(this.species); + this.previousStarterAttributes.push({ ...this.savedStarterAttributes }); const newSpecies = this.species; const newFormIndex = this.species.forms.find(f => f.formKey === bf.formKey)?.formIndex; this.starterAttributes.form = newFormIndex; @@ -1604,7 +1627,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { ui.setMode( Mode.POKEDEX_PAGE, newSpecies, - newFormIndex, this.savedStarterAttributes, this.filteredIndices, ); @@ -1955,6 +1977,11 @@ export default class PokedexPageUiHandler extends MessageUiHandler { case Button.LEFT: this.blockInput = true; ui.setModeWithoutClear(Mode.OPTION_SELECT).then(() => { + // Always go back to first selection after scrolling around + if (this.previousSpecies.length === 0) { + this.previousSpecies.push(this.species); + this.previousStarterAttributes.push({ ...this.savedStarterAttributes }); + } let newSpecies: PokemonSpecies; if (this.filteredIndices) { const index = this.filteredIndices.findIndex(id => id === this.species.speciesId); @@ -1976,7 +2003,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { ui.setModeForceTransition( Mode.POKEDEX_PAGE, newSpecies, - newFormIndex, this.savedStarterAttributes, this.filteredIndices, ); @@ -1985,6 +2011,11 @@ export default class PokedexPageUiHandler extends MessageUiHandler { break; case Button.RIGHT: ui.setModeWithoutClear(Mode.OPTION_SELECT).then(() => { + // Always go back to first selection after scrolling around + if (this.previousSpecies.length === 0) { + this.previousSpecies.push(this.species); + this.previousStarterAttributes.push({ ...this.savedStarterAttributes }); + } let newSpecies: PokemonSpecies; if (this.filteredIndices) { const index = this.filteredIndices.findIndex(id => id === this.species.speciesId); @@ -2006,7 +2037,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { ui.setModeForceTransition( Mode.POKEDEX_PAGE, newSpecies, - newFormIndex, this.savedStarterAttributes, this.filteredIndices, ); diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index f3625f64476..1f79d7006b0 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -1125,7 +1125,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, formIndex, { form: formIndex }, this.filteredIndices); + ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, { form: formIndex }, this.filteredIndices); success = true; } else { const numberOfForms = this.trayContainers.length; @@ -1174,7 +1174,7 @@ export default class PokedexUiHandler extends MessageUiHandler { } } else { if (button === Button.ACTION) { - ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, 0, null, this.filteredIndices); + ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, null, this.filteredIndices); success = true; } else { switch (button) { diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index ab8ea0adf7c..8265ad827bc 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -2324,7 +2324,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { form: starterAttributes.form, female: starterAttributes.female, }; - ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, starterAttributes.form, attributes); + ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, attributes); }); return true; }, From f3141280c91174cd7e7fef0cf4e1979cec58057d Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Tue, 25 Mar 2025 00:51:59 -0500 Subject: [PATCH 10/17] [Balance] Implement more trainer types & add to biomes (#5520) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add more trainer types to biomes This makes the Hooligans, Musician, Pilot, Poké Fan, Rich, and Rich Kid trainer types able to be battled. * Adjusted Rich and Rich Kid $$$ multipliers * Add basic dialogue for trainer types Also added the Clerk's dialogue entries, as that trainer type has localized text, but no entry in the code. * Fix Musician to Pokefan encounter music * Add dialogue entries for new dialogue --------- Co-authored-by: damocleas --- src/data/balance/biomes.ts | 94 ++++++++++++++++++++------------ src/data/dialogue.ts | 107 +++++++++++++++++++++++++++++++++++++ src/data/trainer-config.ts | 48 ++++++++++++++--- 3 files changed, 208 insertions(+), 41 deletions(-) diff --git a/src/data/balance/biomes.ts b/src/data/balance/biomes.ts index a4e051d80c9..3dff1722af6 100644 --- a/src/data/balance/biomes.ts +++ b/src/data/balance/biomes.ts @@ -1659,7 +1659,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { }, [Biome.GRASS]: { [BiomePoolTier.COMMON]: [ TrainerType.BREEDER, TrainerType.SCHOOL_KID ], - [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], + [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.POKEFAN ], [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], @@ -1680,9 +1680,9 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.METROPOLIS]: { - [BiomePoolTier.COMMON]: [ TrainerType.CLERK, TrainerType.CYCLIST, TrainerType.OFFICER, TrainerType.WAITER, TrainerType.BEAUTY ], + [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 ], + [BiomePoolTier.RARE]: [ TrainerType.ARTIST, TrainerType.RICH_KID ], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], [BiomePoolTier.BOSS]: [ TrainerType.WHITNEY, TrainerType.NORMAN, TrainerType.IONO, TrainerType.LARRY ], @@ -1702,7 +1702,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.SEA]: { - [BiomePoolTier.COMMON]: [ TrainerType.SWIMMER, TrainerType.SAILOR ], + [BiomePoolTier.COMMON]: [ TrainerType.SAILOR, TrainerType.SWIMMER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], @@ -1758,7 +1758,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { }, [Biome.MOUNTAIN]: { [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.BLACK_BELT, TrainerType.HIKER ], - [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], + [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.PILOT ], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], @@ -1790,7 +1790,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.DESERT]: { - [BiomePoolTier.COMMON]: [ TrainerType.SCIENTIST, TrainerType.BACKPACKER ], + [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.SCIENTIST ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], @@ -1812,8 +1812,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.MEADOW]: { - [BiomePoolTier.COMMON]: [ TrainerType.PARASOL_LADY, TrainerType.BEAUTY ], - [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BREEDER, TrainerType.BAKER ], + [BiomePoolTier.COMMON]: [ TrainerType.BEAUTY, TrainerType.MUSICIAN, TrainerType.PARASOL_LADY ], + [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BAKER, TrainerType.BREEDER, TrainerType.POKEFAN ], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], @@ -1967,7 +1967,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { }, [Biome.SLUM]: { [BiomePoolTier.COMMON]: [ TrainerType.BIKER, TrainerType.OFFICER, TrainerType.ROUGHNECK ], - [BiomePoolTier.UNCOMMON]: [ TrainerType.BAKER ], + [BiomePoolTier.UNCOMMON]: [ TrainerType.BAKER, TrainerType.HOOLIGANS ], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], @@ -1988,8 +1988,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.ISLAND]: { - [BiomePoolTier.COMMON]: [], - [BiomePoolTier.UNCOMMON]: [], + [BiomePoolTier.COMMON]: [ TrainerType.RICH_KID ], + [BiomePoolTier.UNCOMMON]: [ TrainerType.RICH ], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], @@ -7178,7 +7178,8 @@ export function initBiomes() { [ Biome.METROPOLIS, BiomePoolTier.COMMON ], [ Biome.MEADOW, BiomePoolTier.COMMON ], [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] - ]], + ] + ], [ TrainerType.BIKER, [ [ Biome.SLUM, BiomePoolTier.COMMON ] ] @@ -7208,7 +7209,8 @@ export function initBiomes() { ], [ TrainerType.CLERK, [ [ Biome.METROPOLIS, BiomePoolTier.COMMON ] - ]], + ] + ], [ TrainerType.CYCLIST, [ [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], [ Biome.METROPOLIS, BiomePoolTier.COMMON ] @@ -7217,18 +7219,23 @@ export function initBiomes() { [ TrainerType.DANCER, []], [ TrainerType.DEPOT_AGENT, [ [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ] - ]], + ] + ], [ TrainerType.DOCTOR, []], + [ TrainerType.FIREBREATHER, [ + [ Biome.VOLCANO, BiomePoolTier.COMMON ] + ] + ], [ TrainerType.FISHERMAN, [ [ Biome.LAKE, BiomePoolTier.COMMON ], [ Biome.BEACH, BiomePoolTier.COMMON ] ] ], - [ TrainerType.RICH, []], [ TrainerType.GUITARIST, [ [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ], [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] - ]], + ] + ], [ TrainerType.HARLEQUIN, []], [ TrainerType.HIKER, [ [ Biome.MOUNTAIN, BiomePoolTier.COMMON ], @@ -7236,13 +7243,24 @@ export function initBiomes() { [ Biome.BADLANDS, BiomePoolTier.COMMON ] ] ], - [ TrainerType.HOOLIGANS, []], + [ TrainerType.HOOLIGANS, [ + [ Biome.SLUM, BiomePoolTier.UNCOMMON ] + ] + ], [ TrainerType.HOOPSTER, []], [ TrainerType.INFIELDER, []], [ TrainerType.JANITOR, []], [ TrainerType.LINEBACKER, []], [ TrainerType.MAID, []], - [ TrainerType.MUSICIAN, []], + [ TrainerType.MUSICIAN, [ + [ Biome.MEADOW, BiomePoolTier.COMMON ] + ] + ], + [ TrainerType.HEX_MANIAC, [ + [ Biome.RUINS, BiomePoolTier.UNCOMMON ], + [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ] + ] + ], [ TrainerType.NURSERY_AIDE, []], [ TrainerType.OFFICER, [ [ Biome.METROPOLIS, BiomePoolTier.COMMON ], @@ -7256,8 +7274,15 @@ export function initBiomes() { [ Biome.MEADOW, BiomePoolTier.COMMON ] ] ], - [ TrainerType.PILOT, []], - [ TrainerType.POKEFAN, []], + [ TrainerType.PILOT, [ + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ] + ] + ], + [ TrainerType.POKEFAN, [ + [ Biome.GRASS, BiomePoolTier.UNCOMMON ], + [ Biome.MEADOW, BiomePoolTier.UNCOMMON ] + ] + ], [ TrainerType.PRESCHOOLER, []], [ TrainerType.PSYCHIC, [ [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], @@ -7270,11 +7295,24 @@ export function initBiomes() { [ Biome.JUNGLE, BiomePoolTier.COMMON ] ] ], - [ TrainerType.RICH_KID, []], + [ TrainerType.RICH, [ + [ Biome.ISLAND, BiomePoolTier.UNCOMMON ] + ] + ], + [ TrainerType.RICH_KID, [ + [ Biome.METROPOLIS, BiomePoolTier.RARE ], + [ Biome.ISLAND, BiomePoolTier.COMMON ] + ] + ], [ TrainerType.ROUGHNECK, [ [ Biome.SLUM, BiomePoolTier.COMMON ] ] ], + [ TrainerType.SAILOR, [ + [ Biome.SEA, BiomePoolTier.COMMON ], + [ Biome.BEACH, BiomePoolTier.COMMON ] + ] + ], [ TrainerType.SCIENTIST, [ [ Biome.DESERT, BiomePoolTier.COMMON ], [ Biome.RUINS, BiomePoolTier.COMMON ] @@ -7317,20 +7355,6 @@ export function initBiomes() { [ Biome.TOWN, BiomePoolTier.COMMON ] ] ], - [ TrainerType.HEX_MANIAC, [ - [ Biome.RUINS, BiomePoolTier.UNCOMMON ], - [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ] - ] - ], - [ TrainerType.FIREBREATHER, [ - [ Biome.VOLCANO, BiomePoolTier.COMMON ] - ] - ], - [ TrainerType.SAILOR, [ - [ Biome.SEA, BiomePoolTier.COMMON ], - [ Biome.BEACH, BiomePoolTier.COMMON ] - ] - ], [ TrainerType.BROCK, [ [ Biome.CAVE, BiomePoolTier.BOSS ] ] diff --git a/src/data/dialogue.ts b/src/data/dialogue.ts index 208e269bd9c..0e755d54e15 100644 --- a/src/data/dialogue.ts +++ b/src/data/dialogue.ts @@ -312,6 +312,113 @@ export const trainerTypeDialogue: TrainerTypeDialogue = { victory: ["dialogue:sailor.victory.1", "dialogue:sailor.victory.2", "dialogue:sailor.victory.3"], }, ], + [TrainerType.CLERK]: [ + { + encounter: ["dialogue:clerk.encounter.1", "dialogue:clerk.encounter.2", "dialogue:clerk.encounter.3"], + victory: ["dialogue:clerk.victory.1", "dialogue:clerk.victory.2", "dialogue:clerk.victory.3"], + }, + { + encounter: [ + "dialogue:clerk_female.encounter.1", + "dialogue:clerk_female.encounter.2", + "dialogue:clerk_female.encounter.3", + ], + victory: [ + "dialogue:clerk_female.victory.1", + "dialogue:clerk_female.victory.2", + "dialogue:clerk_female.victory.3", + ], + }, + ], + [TrainerType.HOOLIGANS]: [ + { + encounter: ["dialogue:hooligans.encounter.1", "dialogue:hooligans.encounter.2"], + victory: ["dialogue:hooligans.victory.1", "dialogue:hooligans.victory.2"], + }, + ], + [TrainerType.MUSICIAN]: [ + { + encounter: [ + "dialogue:musician.encounter.1", + "dialogue:musician.encounter.2", + "dialogue:musician.encounter.3", + "dialogue:musician.encounter.4", + ], + victory: ["dialogue:musician.victory.1", "dialogue:musician.victory.2", "dialogue:musician.victory.3"], + }, + ], + [TrainerType.PILOT]: [ + { + encounter: [ + "dialogue:pilot.encounter.1", + "dialogue:pilot.encounter.2", + "dialogue:pilot.encounter.3", + "dialogue:pilot.encounter.4", + ], + victory: [ + "dialogue:pilot.victory.1", + "dialogue:pilot.victory.2", + "dialogue:pilot.victory.3", + "dialogue:pilot.victory.4", + ], + }, + ], + [TrainerType.POKEFAN]: [ + { + encounter: ["dialogue:pokefan.encounter.1", "dialogue:pokefan.encounter.2", "dialogue:pokefan.encounter.3"], + victory: ["dialogue:pokefan.victory.1", "dialogue:pokefan.victory.2", "dialogue:pokefan.victory.3"], + }, + { + encounter: [ + "dialogue:pokefan_female.encounter.1", + "dialogue:pokefan_female.encounter.2", + "dialogue:pokefan_female.encounter.3", + ], + victory: [ + "dialogue:pokefan_female.victory.1", + "dialogue:pokefan_female.victory.2", + "dialogue:pokefan_female.victory.3", + ], + }, + ], + [TrainerType.RICH]: [ + { + encounter: ["dialogue:rich.encounter.1", "dialogue:rich.encounter.2", "dialogue:rich.encounter.3"], + victory: ["dialogue:rich.victory.1", "dialogue:rich.victory.2", "dialogue:rich.victory.3"], + }, + { + encounter: [ + "dialogue:rich_female.encounter.1", + "dialogue:rich_female.encounter.2", + "dialogue:rich_female.encounter.3", + ], + victory: ["dialogue:rich_female.victory.1", "dialogue:rich_female.victory.2", "dialogue:rich_female.victory.3"], + }, + ], + [TrainerType.RICH_KID]: [ + { + encounter: ["dialogue:rich_kid.encounter.1", "dialogue:rich_kid.encounter.2", "dialogue:rich_kid.encounter.3"], + victory: [ + "dialogue:rich_kid.victory.1", + "dialogue:rich_kid.victory.2", + "dialogue:rich_kid.victory.3", + "dialogue:rich_kid.victory.4", + ], + }, + { + encounter: [ + "dialogue:rich_kid_female.encounter.1", + "dialogue:rich_kid_female.encounter.2", + "dialogue:rich_kid_female.encounter.3", + ], + victory: [ + "dialogue:rich_kid_female.victory.1", + "dialogue:rich_kid_female.victory.2", + "dialogue:rich_kid_female.victory.3", + "dialogue:rich_kid_female.victory.4", + ], + }, + ], [TrainerType.ROCKET_GRUNT]: [ { encounter: [ diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index ffe5cdfe04c..0417e7abc32 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -2141,7 +2141,15 @@ export const trainerConfigs: TrainerConfigs = { }), [TrainerType.HOOLIGANS]: new TrainerConfig(++t) .setDoubleOnly() + .setMoneyMultiplier(1.5) .setEncounterBgm(TrainerType.ROUGHNECK) + .setPartyTemplateFunc(() => + getWavePartyTemplate( + trainerPartyTemplates.TWO_WEAK, + trainerPartyTemplates.TWO_AVG, + trainerPartyTemplates.ONE_AVG_ONE_STRONG, + ), + ) .setSpeciesFilter(s => s.isOfType(PokemonType.POISON) || s.isOfType(PokemonType.DARK)), [TrainerType.HOOPSTER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.INFIELDER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), @@ -2149,7 +2157,14 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.LINEBACKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.MAID]: new TrainerConfig(++t).setMoneyMultiplier(1.6).setEncounterBgm(TrainerType.RICH), [TrainerType.MUSICIAN]: new TrainerConfig(++t) - .setEncounterBgm(TrainerType.ROUGHNECK) + .setMoneyMultiplier(1.1) + .setEncounterBgm(TrainerType.POKEFAN) + .setPartyTemplates( + trainerPartyTemplates.FOUR_WEAKER, + trainerPartyTemplates.THREE_WEAK, + trainerPartyTemplates.TWO_WEAK_ONE_AVG, + trainerPartyTemplates.TWO_AVG, + ) .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SING)), [TrainerType.HEX_MANIAC]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) @@ -2214,7 +2229,14 @@ export const trainerConfigs: TrainerConfigs = { ) || s.getLevelMoves().some(plm => plm[1] === Moves.RAIN_DANCE), ), // Mons with rain abilities or who learn Rain Dance by level [TrainerType.PILOT]: new TrainerConfig(++t) + .setMoneyMultiplier(1.75) .setEncounterBgm(TrainerType.CLERK) + .setPartyTemplates( + trainerPartyTemplates.THREE_WEAK, + trainerPartyTemplates.TWO_WEAK_ONE_AVG, + trainerPartyTemplates.TWO_AVG, + trainerPartyTemplates.THREE_AVG, + ) .setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1), [TrainerType.POKEFAN]: new TrainerConfig(++t) .setMoneyMultiplier(1.4) @@ -2230,7 +2252,8 @@ export const trainerConfigs: TrainerConfigs = { trainerPartyTemplates.FOUR_WEAK_SAME, trainerPartyTemplates.FIVE_WEAK, trainerPartyTemplates.SIX_WEAKER_SAME, - ), + ) + .setSpeciesFilter(s => tmSpecies[Moves.HELPING_HAND].indexOf(s.speciesId) > -1), [TrainerType.PRESCHOOLER]: new TrainerConfig(++t) .setMoneyMultiplier(0.2) .setEncounterBgm(TrainerType.YOUNGSTER) @@ -2352,16 +2375,29 @@ export const trainerConfigs: TrainerConfigs = { [TrainerPoolTier.SUPER_RARE]: [Species.LARVESTA], }), [TrainerType.RICH]: new TrainerConfig(++t) - .setMoneyMultiplier(5) + .setMoneyMultiplier(3.25) .setName("Gentleman") .setHasGenders("Madame") - .setHasDouble("Rich Couple"), + .setHasDouble("Rich Couple") + .setPartyTemplates( + trainerPartyTemplates.THREE_WEAK, + trainerPartyTemplates.FOUR_WEAK, + trainerPartyTemplates.TWO_WEAK_ONE_AVG, + trainerPartyTemplates.THREE_AVG, + ) + .setSpeciesFilter(s => s.isOfType(PokemonType.NORMAL) || s.isOfType(PokemonType.ELECTRIC)), [TrainerType.RICH_KID]: new TrainerConfig(++t) - .setMoneyMultiplier(3.75) + .setMoneyMultiplier(2.5) .setName("Rich Boy") .setHasGenders("Lady") .setHasDouble("Rich Kids") - .setEncounterBgm(TrainerType.RICH), + .setEncounterBgm(TrainerType.RICH) + .setPartyTemplates( + trainerPartyTemplates.FOUR_WEAKER, + trainerPartyTemplates.THREE_WEAK_SAME, + trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, + ) + .setSpeciesFilter(s => s.baseTotal <= 460), [TrainerType.ROUGHNECK]: new TrainerConfig(++t) .setMoneyMultiplier(1.4) .setEncounterBgm(TrainerType.ROUGHNECK) From 443264a3ea377da4ef4f25554aa156395dc1cf6f Mon Sep 17 00:00:00 2001 From: damocleas Date: Tue, 25 Mar 2025 01:55:26 -0400 Subject: [PATCH 11/17] [i18n] Update locales submodule --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index 0e5c6096ba2..cd4057af258 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 0e5c6096ba26f6b87aed1aab3fe9b0b23f6cbb7b +Subproject commit cd4057af258b659ba2c1ed2778bb2793fa1f6141 From f78015d75730d205d4bf08a4fd09547d8b8a8b37 Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Tue, 25 Mar 2025 21:06:24 +0100 Subject: [PATCH 12/17] [Localization] Catalan reactivation (#5555) * Add files via upload * Update settings.ts * Add files via upload * Add files via upload * Update starter-select-ui-handler.ts * Update utils.ts with Catalan * Update loading-scene.ts --- public/images/statuses_ca-ES.png | Bin 441 -> 2244 bytes public/images/types_ca-ES.json | 440 ++++++++++++++++++++++++++++ public/images/types_ca-ES.png | Bin 0 -> 6383 bytes src/loading-scene.ts | 2 +- src/system/settings/settings.ts | 8 +- src/ui/starter-select-ui-handler.ts | 2 +- src/utils.ts | 1 + 7 files changed, 447 insertions(+), 6 deletions(-) create mode 100644 public/images/types_ca-ES.json create mode 100644 public/images/types_ca-ES.png diff --git a/public/images/statuses_ca-ES.png b/public/images/statuses_ca-ES.png index d372b989be966007e5fccac5f54fe341457e598b..fe05e243f7a5cd6de4d3b9a340707ebf06cc7e58 100644 GIT binary patch literal 2244 zcmbVO4Nw$i7+$d-vQWaTbkep33$wlbxgYKpP6dtx^U%{%FlENQ-92vOZg<;VjypzY z(EJ~Nl7dMAr=gU>$)rY7F^g=lI#J0&MXpR#RL~-uL4>UD__?&HoZOjjzi)S+?|I+n zec$h$T{}B-den$6eD^xG%Gqdjn5+iGz2A0^+`07$EmP`%jE?#@^js12+Xr)Buj6_tx_uI z;?oOdZf;?wohi&?Oe`{W3Y_Gl0D*^7Y1rp+3ku~kBmKM-SchI?2;2`*^UO$c$RM0; zoeigoG6(B529zOmB%EN<5C+^t>Ry0JoJhd%1dPz4I6>hCN^61#F9cYVStm8e^5UQ^ z@MK0@swzgb^A%B&i?BGGUyQFT4AVvkb<$IS(hO3cwO!tmG0^ zQE`d?LLL5mhXD{;t2J!nAARw7!X^|o%?o4<2IL>nirp`9*c?s~^JRuh^8z^qS6AxWmwDzP^{s3mNIfQj?)Py)L=A{sE*WWQJQejsE%Ru9Em#| zq|-38-y$;kp}Y?5XaDE^SuzjK745!f9#H>(DI8)+28tArIA!p3q|mv8D>pwSBs1hD zVbl|x!>C2I2~GypYjrGYB5@8Sw6vZv7zl%b!IQAiQ2?9Zfz<#J_TLu!3zSOdLmv1C z?at+14SN9h*Ca(Vp|fU2m{5^%EHe0-zvqk$&=$BjK>8o$Hvm&ar&>VETyieR-d&0t z8Q^=96tpQn{Kd^O4+Ej9JMnfKZb*Rz?s+P@tAL=};;g`cZ)t!s$x zG9R1Ov!dfebIQW`?2(F`v)(0RHa8xBuq<+|A{5tH)7PDv9~*e0f$wZ=&Ju5xKNnp^ zM0_3;4m2whkxSm;MYpnBTWWL8UrH&CThm=tbZz*gtxrvcrq%s8u3K~T>=s{K+CFVg zuQ3)nA$wOgZjLq0f8&Vh*`=K^o9iz|Bx+0dc)Aygt72@$ar+Ie{)|b!#fyFZ6^XTH zZY4mi`vY9b?r%sa@?6`~(4oMI%IfMp^e4fY#&aHT@Ipihm#}``8g|E`*@+we_}Du$ z&sJw!l~lB$Ej#Xjj@fwH-#5?ld|-XcjnYQ{&YaR=Pd0P}TTtWoLAW))V?{|s(c7ou zq0|jgO+jUOP;nSDj(W|nw5}Po-Q^c-+ZJA3-1e?_5F|51mtWbF1&%BJZN4 zH@7tBuiKxw=ekp=kPL~?*_XS^gyPo&7hB6KvQ9ZK?L{u4k zRzAISi@v^*#u_SN-kY_VUJE9fk2@I(~mO zK5b{UWnRhXaScoTlHtM_nOSM0{KZO-TQ>G}+I zIn7o0!+Dp;xZJZk++_QIf*BQ_vO9cL>_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?z zvW;$NS#fE(5J*QH>;TO#qj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~a zG}z~@!Q2dSmt873PQXLUg+O|T!QM`p^A|K=@Suc&?b@)04>kGLv3=K17yh?|Mhx#G)+hhQwMYUUT0RT>1-XbQdPI;dWdHyG07*qoM6N<$g7t5` A=>Px# diff --git a/public/images/types_ca-ES.json b/public/images/types_ca-ES.json new file mode 100644 index 00000000000..fa3abaaf259 --- /dev/null +++ b/public/images/types_ca-ES.json @@ -0,0 +1,440 @@ +{ + "textures": [ + { + "image": "types_ca-ES.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_ca-ES.png b/public/images/types_ca-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..e85c84ed9c987049fd9965771a4a64a12dcc6b0b GIT binary patch literal 6383 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 literal 0 HcmV?d00001 diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 295dc318db4..7f05634db48 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -250,7 +250,7 @@ export class LoadingScene extends SceneBase { this.loadAtlas("statuses", ""); this.loadAtlas("types", ""); } - const availableLangs = ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"]; + const availableLangs = ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN", "zh-TW", "ca-ES"]; if (lang && availableLangs.includes(lang)) { this.loadImage(`pkmnday2025event-${lang}`, "events"); } else { diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 1a7279d371c..b2b1d3eb298 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -948,10 +948,10 @@ export function setSetting(setting: string, value: number): boolean { label: "日本語", handler: () => changeLocaleHandler("ja"), }, - // { - // label: "Català", - // handler: () => changeLocaleHandler("ca-ES") - // }, + { + label: "Català", + handler: () => changeLocaleHandler("ca-ES") + }, { label: i18next.t("settings:back"), handler: () => cancelHandler(), diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 8265ad827bc..91940d3af76 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -150,7 +150,7 @@ const languageSettings: { [key: string]: LanguageSetting } = { instructionTextSize: "38px", }, "ca-ES": { - starterInfoTextSize: "56px", + starterInfoTextSize: "52px", instructionTextSize: "38px", }, }; diff --git a/src/utils.ts b/src/utils.ts index 7d3dea0247e..fbca8410feb 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -464,6 +464,7 @@ export function hasAllLocalizedSprites(lang?: string): boolean { case "pt-BR": case "ko": case "ja": + case "ca-ES": return true; default: return false; From bba7c1610de9b1b5e0c685f9375214a58cca89fd Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Tue, 25 Mar 2025 21:36:12 +0100 Subject: [PATCH 13/17] =?UTF-8?q?[UI/UX]=20Option=20to=20see=20Pokedex=20e?= =?UTF-8?q?ntry=20after=20catching=20wild=20Pok=C3=A9mon=20(#5538)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * pokedex option after catching * Also changing catching for mystery encounters --- .../utils/encounter-pokemon-utils.ts | 20 ++++++++++++++++ src/phases/attempt-capture-phase.ts | 21 ++++++++++++++++ src/ui/confirm-ui-handler.ts | 24 ++++++++++++------- src/ui/pokedex-page-ui-handler.ts | 15 +++++++++++- src/ui/pokemon-info-container.ts | 2 +- 5 files changed, 72 insertions(+), 10 deletions(-) diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index 275078dbace..a4787e819b8 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -741,6 +741,26 @@ export async function catchPokemon( false, ); }, + () => { + const attributes = { + shiny: pokemon.shiny, + variant: pokemon.variant, + form: pokemon.formIndex, + female: pokemon.gender === Gender.FEMALE, + }; + globalScene.ui.setOverlayMode( + Mode.POKEDEX_PAGE, + pokemon.species, + pokemon.formIndex, + attributes, + null, + () => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { + promptRelease(); + }); + }, + ); + }, () => { globalScene.ui.setMode( Mode.PARTY, diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts index 6b905c2a07f..6e2a2d29af4 100644 --- a/src/phases/attempt-capture-phase.ts +++ b/src/phases/attempt-capture-phase.ts @@ -24,6 +24,7 @@ import type { PokeballType } from "#enums/pokeball"; import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; +import { Gender } from "#app/data/gender"; export class AttemptCapturePhase extends PokemonPhase { private pokeballType: PokeballType; @@ -321,6 +322,26 @@ export class AttemptCapturePhase extends PokemonPhase { false, ); }, + () => { + const attributes = { + shiny: pokemon.shiny, + variant: pokemon.variant, + form: pokemon.formIndex, + female: pokemon.gender === Gender.FEMALE, + }; + globalScene.ui.setOverlayMode( + Mode.POKEDEX_PAGE, + pokemon.species, + pokemon.formIndex, + attributes, + null, + () => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { + promptRelease(); + }); + }, + ); + }, () => { globalScene.ui.setMode( Mode.PARTY, diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index a8710b0ab01..eb7018051b7 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -21,11 +21,12 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { show(args: any[]): boolean { if ( - args.length === 4 && + args.length === 5 && args[0] instanceof Function && args[1] instanceof Function && args[2] instanceof Function && - args[3] === "fullParty" + args[3] instanceof Function && + args[4] === "fullParty" ) { const config: OptionSelectConfig = { options: [ @@ -37,29 +38,36 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { }, }, { - label: i18next.t("menu:yes"), + label: i18next.t("partyUiHandler:POKEDEX"), handler: () => { args[1](); return true; }, }, { - label: i18next.t("menu:no"), + label: i18next.t("menu:yes"), handler: () => { args[2](); return true; }, }, + { + label: i18next.t("menu:no"), + handler: () => { + args[3](); + return true; + }, + }, ], - delay: args.length >= 8 && args[7] !== null ? (args[7] as number) : 0, + delay: args.length >= 9 && args[8] !== null ? (args[8] as number) : 0, }; super.show([config]); - this.switchCheck = args.length >= 5 && args[4] !== null && (args[4] as boolean); + this.switchCheck = args.length >= 6 && args[5] !== null && (args[5] as boolean); - const xOffset = args.length >= 6 && args[5] !== null ? (args[5] as number) : 0; - const yOffset = args.length >= 7 && args[6] !== null ? (args[6] as number) : 0; + const xOffset = args.length >= 7 && args[6] !== null ? (args[6] as number) : 0; + const yOffset = args.length >= 8 && args[7] !== null ? (args[7] as number) : 0; this.optionSelectContainer.setPosition(globalScene.game.canvas.width / 6 - 1 + xOffset, -48 + yOffset); diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 86460a24fdc..8f96f1e44c2 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -261,6 +261,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { private unlockedVariants: boolean[]; private canUseCandies: boolean; + private exitCallback; constructor() { super(Mode.POKEDEX_PAGE); @@ -681,6 +682,10 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.filteredIndices = args[2] ?? null; this.starterSetup(); + if (args[4] instanceof Function) { + this.exitCallback = args[4]; + } + this.moveInfoOverlay.clear(); // clear this when removing a menu; the cancel button doesn't seem to trigger this automatically on controllers this.infoOverlay.clear(); @@ -1106,7 +1111,15 @@ export default class PokedexPageUiHandler extends MessageUiHandler { }); this.blockInput = false; } else { - ui.revertMode(); + ui.revertMode() + .then(() => { + console.log("exitCallback", this.exitCallback); + if (this.exitCallback instanceof Function) { + const exitCallback = this.exitCallback; + this.exitCallback = null; + exitCallback(); + } + }); success = true; } } else { diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 64c743ec88d..56201f38748 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -458,7 +458,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { makeRoomForConfirmUi(speedMultiplier = 1, fromCatch = false): Promise { const xPosition = fromCatch - ? this.initialX - this.infoWindowWidth - 65 + ? this.initialX - this.infoWindowWidth - 67 : this.initialX - this.infoWindowWidth - ConfirmUiHandler.windowWidth; return new Promise(resolve => { globalScene.tweens.add({ From ead1bc6cce6a4ea1d9884f153b227c35988af93a Mon Sep 17 00:00:00 2001 From: damocleas Date: Tue, 25 Mar 2025 21:06:28 -0400 Subject: [PATCH 14/17] [UI/UX] Autofill login text color changed to gray (#5523) Update index.css --- index.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/index.css b/index.css index 49e570bdccc..62ad6266d30 100644 --- a/index.css +++ b/index.css @@ -68,6 +68,10 @@ input:-internal-autofill-selected { background-clip: text; } +input:-webkit-autofill { + -webkit-text-fill-color: #a1a1a1; +} + /* Need adjust input font-size */ input { font-size: 3.2rem; From f911ffc2663bae17196de9f33a3f6524119a2669 Mon Sep 17 00:00:00 2001 From: damocleas Date: Wed, 26 Mar 2025 16:01:54 -0400 Subject: [PATCH 15/17] [Balance] Split Passives and related (#5531) * Initial Split Passives * Lock Battle Bond Froakie/Frogadier Ability, Gallade back to Inner Focus --- src/data/balance/passives.ts | 843 ++++++++++++++++++++++++++++------- src/data/pokemon-species.ts | 8 +- 2 files changed, 680 insertions(+), 171 deletions(-) diff --git a/src/data/balance/passives.ts b/src/data/balance/passives.ts index c613be0137b..f7929650e67 100644 --- a/src/data/balance/passives.ts +++ b/src/data/balance/passives.ts @@ -11,418 +11,824 @@ 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.BEAST_BOOST }, + [Species.CHARMELEON]: { 0: Abilities.BEAST_BOOST }, + [Species.CHARIZARD]: { 0: Abilities.BEAST_BOOST, 1: Abilities.LEVITATE, 2: Abilities.INTIMIDATE, 3: Abilities.UNNERVE }, [Species.SQUIRTLE]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.CATERPIE]: { 0: Abilities.MAGICIAN }, - [Species.WEEDLE]: { 0: Abilities.TINTED_LENS }, + [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.VENONAT]: { 0: Abilities.SIMPLE }, + [Species.PARASECT]: { 0: Abilities.TRIAGE }, + [Species.VENONAT]: { 0: Abilities.FLUFFY }, + [Species.VENOMOTH]: { 0: Abilities.SIMPLE }, [Species.DIGLETT]: { 0: Abilities.STURDY }, - [Species.MEOWTH]: { 0: Abilities.TOUGH_CLAWS }, + [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.ABRA]: { 0: Abilities.MAGICIAN }, + [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.SHELLDER]: { 0: Abilities.ICE_SCALES }, + [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.KOFFING]: { 0: Abilities.PARENTAL_BOND }, - [Species.RHYHORN]: { 0: Abilities.FILTER }, + [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.KANGASKHAN]: { 0: Abilities.TECHNICIAN }, + [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.PINSIR]: { 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.LAPRAS]: { 0: Abilities.LIGHTNING_ROD }, + [Species.GYARADOS]: { 0: Abilities.MULTISCALE, 1: Abilities.MULTISCALE }, + [Species.LAPRAS]: { 0: Abilities.LIGHTNING_ROD, 1: Abilities.FILTER }, [Species.DITTO]: { 0: Abilities.ADAPTABILITY }, - [Species.EEVEE]: { 0: Abilities.PICKUP }, - [Species.PORYGON]: { 0: Abilities.PROTEAN }, + [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.LEVITATE }, + [Species.PORYGON2]: { 0: Abilities.LEVITATE }, + [Species.PORYGON_Z]: { 0: Abilities.PROTEAN }, [Species.OMANYTE]: { 0: Abilities.STURDY }, + [Species.OMASTAR]: { 0: Abilities.STURDY }, [Species.KABUTO]: { 0: Abilities.TOUGH_CLAWS }, - [Species.AERODACTYL]: { 0: Abilities.ORICHALCUM_PULSE }, + [Species.KABUTOPS]: { 0: Abilities.TOUGH_CLAWS }, + [Species.AERODACTYL]: { 0: Abilities.INTIMIDATE, 1: Abilities.DELTA_STREAM }, [Species.ARTICUNO]: { 0: Abilities.SNOW_WARNING }, [Species.ZAPDOS]: { 0: Abilities.DRIZZLE }, [Species.MOLTRES]: { 0: Abilities.DROUGHT }, - [Species.DRATINI]: { 0: Abilities.AERILATE }, - [Species.MEWTWO]: { 0: Abilities.NEUROFORCE }, + [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 }, [Species.CHIKORITA]: { 0: Abilities.THICK_FAT }, + [Species.BAYLEEF]: { 0: Abilities.THICK_FAT }, + [Species.MEGANIUM]: { 0: Abilities.THICK_FAT }, [Species.CYNDAQUIL]: { 0: Abilities.DROUGHT }, + [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.PICHU]: { 0: Abilities.ELECTRIC_SURGE }, - [Species.CLEFFA]: { 0: Abilities.ANALYTIC }, + [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.NATU]: { 0: Abilities.SHEER_FORCE }, + [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.HOPPIP]: { 0: Abilities.FLUFFY }, + [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.YANMA]: { 0: Abilities.SHEER_FORCE }, - [Species.WOOPER]: { 0: Abilities.COMATOSE }, + [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.UNOWN]: { 0: Abilities.PICKUP }, + [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.PINECO]: { 0: Abilities.IRON_BARBS }, + [Species.FARIGIRAF]: { 0: Abilities.PARENTAL_BOND }, + [Species.PINECO]: { 0: Abilities.ROUGH_SKIN }, + [Species.FORRETRESS]: { 0: Abilities.IRON_BARBS }, [Species.DUNSPARCE]: { 0: Abilities.UNAWARE }, - [Species.GLIGAR]: { 0: Abilities.TOXIC_BOOST }, + [Species.DUDUNSPARCE]: { 0: 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 }, + [Species.HERACROSS]: { 0: Abilities.TECHNICIAN, 1: Abilities.TECHNICIAN }, [Species.SNEASEL]: { 0: Abilities.TOUGH_CLAWS }, - [Species.TEDDIURSA]: { 0: Abilities.THICK_FAT }, - [Species.SLUGMA]: { 0: Abilities.DESOLATE_LAND }, - [Species.SWINUB]: { 0: Abilities.SLUSH_RUSH }, + [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.LIGHTNING_ROD }, - [Species.PHANPY]: { 0: Abilities.SPEED_BOOST }, + [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.MOXIE }, + [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.LARVITAR]: { 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 }, [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.MUDKIP]: { 0: Abilities.DRIZZLE }, + [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.WURMPLE]: { 0: Abilities.SIMPLE }, + [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.SEEDOT]: { 0: Abilities.SHARPNESS }, + [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.WINGULL]: { 0: Abilities.SWIFT_SWIM }, - [Species.RALTS]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.SWELLOW]: { 0: Abilities.AERILATE }, + [Species.WINGULL]: { 0: Abilities.DRIZZLE }, + [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.NINCADA]: { 0: Abilities.MAGIC_GUARD }, + [Species.VIGOROTH]: { 0: Abilities.GUTS }, + [Species.SLAKING]: { 0: Abilities.GUTS }, + [Species.NINCADA]: { 0: Abilities.PICKUP }, + [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.NOSEPASS]: { 0: Abilities.LEVITATE }, + [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.SABLEYE]: { 0: Abilities.UNNERVE }, - [Species.MAWILE]: { 0: Abilities.UNNERVE }, + [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.ELECTRIKE]: { 0: Abilities.FLASH_FIRE }, + [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.NUMEL]: { 0: Abilities.FUR_COAT }, + [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.FEEBAS]: { 0: Abilities.MAGIC_GUARD }, - [Species.CASTFORM]: { 0: Abilities.ADAPTABILITY }, + [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 }, + [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.CLAMPERL]: { 0: Abilities.ARENA_TRAP }, + [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.MOLD_BREAKER }, + [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.PRISM_ARMOR }, - [Species.LATIOS]: { 0: Abilities.TINTED_LENS }, - [Species.KYOGRE]: { 0: Abilities.MOLD_BREAKER }, - [Species.GROUDON]: { 0: Abilities.TURBOBLAZE }, - [Species.RAYQUAZA]: { 0: Abilities.UNNERVE }, + [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 }, + [Species.DEOXYS]: { 0: Abilities.PROTEAN, 1: Abilities.ADAPTABILITY, 2: Abilities.REGENERATOR, 3: Abilities.SHADOW_SHIELD }, - [Species.TURTWIG]: { 0: Abilities.THICK_FAT }, - [Species.CHIMCHAR]: { 0: Abilities.BEAST_BOOST }, - [Species.PIPLUP]: { 0: Abilities.DRIZZLE }, + [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.UNNERVE }, + [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.ROCK_HEAD }, + [Species.STARAVIA]: { 0: Abilities.ROCK_HEAD }, + [Species.STARAPTOR]: { 0: Abilities.ROCK_HEAD }, [Species.BIDOOF]: { 0: Abilities.SAP_SIPPER }, - [Species.KRICKETOT]: { 0: Abilities.SHARPNESS }, + [Species.BIBAREL]: { 0: Abilities.SAP_SIPPER }, + [Species.KRICKETOT]: { 0: Abilities.HONEY_GATHER }, + [Species.KRICKETUNE]: { 0: Abilities.SHARPNESS }, [Species.SHINX]: { 0: Abilities.SPEED_BOOST }, - [Species.BUDEW]: { 0: Abilities.GRASSY_SURGE }, + [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.BURMY]: { 0: Abilities.STURDY }, - [Species.COMBEE]: { 0: Abilities.INTIMIDATE }, + [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.CHERUBI]: { 0: Abilities.ORICHALCUM_PULSE }, - [Species.SHELLOS]: { 0: Abilities.REGENERATOR }, + [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.HAPPINY]: { 0: Abilities.FUR_COAT }, + [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.SAND_STREAM }, - [Species.MUNCHLAX]: { 0: Abilities.RIPEN }, + [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.SNOVER]: { 0: Abilities.GRASSY_SURGE }, - [Species.ROTOM]: { 0: Abilities.HADRON_ENGINE }, + [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.UNNERVE }, [Species.MESPRIT]: { 0: Abilities.MOODY }, [Species.AZELF]: { 0: Abilities.NEUROFORCE }, - [Species.DIALGA]: { 0: Abilities.BERSERK }, - [Species.PALKIA]: { 0: Abilities.BERSERK }, + [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 }, + [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.WIND_RIDER }, - [Species.ARCEUS]: { 0: Abilities.ADAPTABILITY }, + [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 }, [Species.VICTINI]: { 0: Abilities.SHEER_FORCE }, [Species.SNIVY]: { 0: Abilities.MULTISCALE }, - [Species.TEPIG]: { 0: Abilities.ROCK_HEAD }, - [Species.OSHAWOTT]: { 0: Abilities.INTREPID_SWORD }, + [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.LONG_REACH }, + [Species.DEWOTT]: { 0: Abilities.LONG_REACH }, + [Species.SAMUROTT]: { 0: Abilities.LIGHTNING_ROD }, + [Species.HISUI_SAMUROTT]: { 0: Abilities.MOLD_BREAKER }, [Species.PATRAT]: { 0: Abilities.NO_GUARD }, - [Species.LILLIPUP]: { 0: Abilities.FUR_COAT }, + [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.AUDINO]: { 0: Abilities.FRIEND_GUARD }, + [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.SHARPNESS }, + [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.BASCULIN]: { 0: Abilities.SUPREME_OVERLORD }, + [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.DARK_AURA }, + [Species.ZOROARK]: { 0: Abilities.DARK_AURA }, [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.SLUSH_RUSH }, - [Species.DEERLING]: { 0: Abilities.FUR_COAT }, + [Species.VANILLISH]: { 0: Abilities.SLUSH_RUSH }, + [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.FOONGUS]: { 0: Abilities.THICK_FAT }, + [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.PROTEAN }, + [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.PARENTAL_BOND }, - [Species.LARVESTA]: { 0: Abilities.DROUGHT }, + [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 }, - [Species.THUNDURUS]: { 0: Abilities.DRIZZLE }, + [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 }, - [Species.KYUREM]: { 0: Abilities.SNOW_WARNING }, - [Species.KELDEO]: { 0: Abilities.GRIM_NEIGH }, - [Species.MELOETTA]: { 0: Abilities.MINDS_EYE }, - [Species.GENESECT]: { 0: Abilities.PROTEAN }, + [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 }, - [Species.CHESPIN]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.FENNEKIN]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.FROAKIE]: { 0: Abilities.STAKEOUT }, - [Species.BUNNELBY]: { 0: Abilities.THICK_FAT }, - [Species.FLETCHLING]: { 0: Abilities.MAGIC_GUARD }, - [Species.SCATTERBUG]: { 0: Abilities.PRANKSTER }, + [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 }, + [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.SHIELD_DUST }, + [Species.SPEWPA]: { 0: Abilities.SHIELD_DUST }, + [Species.VIVILLON]: { 0: Abilities.PRANKSTER }, [Species.LITLEO]: { 0: Abilities.BEAST_BOOST }, + [Species.PYROAR]: { 0: Abilities.BEAST_BOOST }, [Species.FLABEBE]: { 0: Abilities.GRASSY_SURGE }, + [Species.FLOETTE]: { 0: Abilities.GRASSY_SURGE }, + [Species.FLORGES]: { 0: Abilities.GRASSY_SURGE }, [Species.SKIDDO]: { 0: Abilities.SEED_SOWER }, - [Species.PANCHAM]: { 0: Abilities.FUR_COAT }, + [Species.GOGOAT]: { 0: Abilities.SEED_SOWER }, + [Species.PANCHAM]: { 0: Abilities.TECHNICIAN }, + [Species.PANGORO]: { 0: Abilities.FUR_COAT }, [Species.FURFROU]: { 0: Abilities.FLUFFY }, - [Species.ESPURR]: { 0: Abilities.FUR_COAT }, + [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 }, [Species.SPRITZEE]: { 0: Abilities.FUR_COAT }, + [Species.AROMATISSE]: { 0: Abilities.FUR_COAT }, [Species.SWIRLIX]: { 0: Abilities.RIPEN }, - [Species.INKAY]: { 0: Abilities.UNNERVE }, + [Species.SLURPUFF]: { 0: Abilities.RIPEN }, + [Species.INKAY]: { 0: Abilities.SHADOW_SHIELD }, + [Species.MALAMAR]: { 0: Abilities.SHADOW_SHIELD }, [Species.BINACLE]: { 0: Abilities.SAP_SIPPER }, - [Species.SKRELP]: { 0: Abilities.DRAGONS_MAW }, + [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.RECKLESS }, + [Species.TYRANTRUM]: { 0: Abilities.RECKLESS }, [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.PUMPKABOO]: { 0: Abilities.WELL_BAKED_BODY }, + [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.BERGMITE]: { 0: Abilities.ICE_SCALES }, - [Species.NOIBAT]: { 0: Abilities.PUNK_ROCK }, + [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 }, [Species.YVELTAL]: { 0: Abilities.SOUL_HEART }, - [Species.ZYGARDE]: { 0: Abilities.ADAPTABILITY }, - [Species.DIANCIE]: { 0: Abilities.PRISM_ARMOR }, - [Species.HOOPA]: { 0: Abilities.OPPORTUNIST }, + [Species.ZYGARDE]: { 0: Abilities.UNNERVE, 1: Abilities.MOXIE, 2: Abilities.UNNERVE, 3: Abilities.MOXIE, 4: 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 }, [Species.ROWLET]: { 0: Abilities.SNIPER }, + [Species.DARTRIX]: { 0: Abilities.SNIPER }, + [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.GRUBBIN]: { 0: Abilities.SPEED_BOOST }, + [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.ORICORIO]: { 0: Abilities.ADAPTABILITY }, - [Species.CUTIEFLY]: { 0: Abilities.TINTED_LENS }, - [Species.ROCKRUFF]: { 0: Abilities.ROCKY_PAYLOAD }, - [Species.WISHIWASHI]: { 0: Abilities.REGENERATOR }, + [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.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.DRAGONS_MAW }, + [Species.SALAZZLE]: { 0: Abilities.DRAGONS_MAW }, [Species.STUFFUL]: { 0: Abilities.SCRAPPY }, - [Species.BOUNSWEET]: { 0: Abilities.MOXIE }, + [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.ADAPTABILITY }, - [Species.MINIOR]: { 0: Abilities.STURDY }, + [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 }, + [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.BEAST_BOOST }, + [Species.COSMOG]: { 0: Abilities.FRIEND_GUARD }, + [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 }, @@ -430,125 +836,223 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.CELESTEELA]: { 0: Abilities.HEATPROOF }, [Species.KARTANA]: { 0: Abilities.LONG_REACH }, [Species.GUZZLORD]: { 0: Abilities.POISON_HEAL }, - [Species.NECROZMA]: { 0: Abilities.BEAST_BOOST }, - [Species.MAGEARNA]: { 0: Abilities.STEELY_SPIRIT }, + [Species.NECROZMA]: { 0: Abilities.BEAST_BOOST, 1: Abilities.FULL_METAL_BODY, 2: Abilities.SHADOW_SHIELD, 3: Abilities.PRISM_ARMOR }, + [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_VULPIX]: { 0: Abilities.SHEER_FORCE }, + [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 }, [Species.GROOKEY]: { 0: Abilities.GRASS_PELT }, + [Species.THWACKEY]: { 0: Abilities.GRASS_PELT }, + [Species.RILLABOOM]: { 0: Abilities.GRASS_PELT, 1: Abilities.GRASS_PELT }, [Species.SCORBUNNY]: { 0: Abilities.NO_GUARD }, + [Species.RABOOT]: { 0: Abilities.NO_GUARD }, + [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.ROOKIDEE]: { 0: Abilities.IRON_BARBS }, - [Species.BLIPBUG]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.GREEDENT]: { 0: Abilities.HARVEST }, + [Species.ROOKIDEE]: { 0: Abilities.DEFIANT }, + [Species.CORVISQUIRE]: { 0: Abilities.DEFIANT }, + [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.GOSSIFLEUR]: { 0: Abilities.GRASSY_SURGE }, + [Species.THIEVUL]: { 0: Abilities.MAGICIAN }, + [Species.GOSSIFLEUR]: { 0: Abilities.SEED_SOWER }, + [Species.ELDEGOSS]: { 0: Abilities.GRASSY_SURGE }, [Species.WOOLOO]: { 0: Abilities.SCRAPPY }, - [Species.CHEWTLE]: { 0: Abilities.ROCKY_PAYLOAD }, - [Species.YAMPER]: { 0: Abilities.SHEER_FORCE }, + [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.APPLIN]: { 0: Abilities.DRAGONS_MAW }, + [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.FILTER }, + [Species.HYDRAPPLE]: { 0: Abilities.PARENTAL_BOND }, [Species.SILICOBRA]: { 0: Abilities.SAND_RUSH }, - [Species.CRAMORANT]: { 0: Abilities.LIGHTNING_ROD }, - [Species.ARROKUDA]: { 0: Abilities.INTIMIDATE }, + [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.SIZZLIPEDE]: { 0: Abilities.SPEED_BOOST }, + [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.SINISTEA]: { 0: Abilities.SHADOW_SHIELD }, + [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.FALINKS]: { 0: Abilities.PARENTAL_BOND }, + [Species.ALCREMIE]: { 0: 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 }, - [Species.INDEEDEE]: { 0: Abilities.FRIEND_GUARD }, - [Species.MORPEKO]: { 0: Abilities.MOODY }, + [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.SWIFT_SWIM }, [Species.ARCTOVISH]: { 0: Abilities.STRONG_JAW }, - [Species.DURALUDON]: { 0: Abilities.STEELWORKER }, - [Species.DREEPY]: { 0: Abilities.PARENTAL_BOND }, - [Species.ZACIAN]: { 0: Abilities.UNNERVE }, - [Species.ZAMAZENTA]: { 0: Abilities.UNNERVE }, - [Species.ETERNATUS]: { 0: Abilities.NEUTRALIZING_GAS }, + [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.ZARUDE]: { 0: Abilities.TOUGH_CLAWS }, + [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.SHADOW_SHIELD }, - [Species.CALYREX]: { 0: Abilities.HARVEST }, - [Species.ENAMORUS]: { 0: Abilities.FAIRY_AURA }, + [Species.SPECTRIER]: { 0: Abilities.MOLD_BREAKER }, + [Species.CALYREX]: { 0: Abilities.HARVEST, 1: Abilities.FILTER, 2: Abilities.MOLD_BREAKER }, + [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_SLOWPOKE]: { 0: Abilities.UNAWARE }, - [Species.GALAR_FARFETCHD]: { 0: Abilities.INTREPID_SWORD }, + [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.ADAPTABILITY }, + [Species.HISUI_ZOROARK]: { 0: Abilities.ADAPTABILITY }, - [Species.SPRIGATITO]: { 0: Abilities.MAGICIAN }, - [Species.FUECOCO]: { 0: Abilities.PUNK_ROCK }, - [Species.QUAXLY]: { 0: Abilities.OPPORTUNIST }, + [Species.SPRIGATITO]: { 0: Abilities.PICKUP }, + [Species.FLORAGATO]: { 0: Abilities.MAGICIAN }, + [Species.MEOWSCARADA]: { 0: Abilities.MAGICIAN }, + [Species.FUECOCO]: { 0: Abilities.GLUTTONY }, + [Species.CROCALOR]: { 0: Abilities.GLUTTONY }, + [Species.SKELEDIRGE]: { 0: Abilities.GLUTTONY }, + [Species.QUAXLY]: { 0: Abilities.DANCER }, + [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.NYMBLE]: { 0: Abilities.GUTS }, + [Species.SPIDOPS]: { 0: Abilities.HONEY_GATHER }, + [Species.NYMBLE]: { 0: Abilities.HUSTLE }, + [Species.LOKIX]: { 0: Abilities.GUTS }, [Species.PAWMI]: { 0: Abilities.TRANSISTOR }, - [Species.TANDEMAUS]: { 0: Abilities.SCRAPPY }, + [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.SQUAWKABILLY]: { 0: Abilities.MOXIE }, + [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.CHARCADET]: { 0: Abilities.PRISM_ARMOR }, - [Species.TADBULB]: { 0: Abilities.STAMINA }, + [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.BRAMBLIN]: { 0: Abilities.SHADOW_SHIELD }, - [Species.TOEDSCOOL]: { 0: Abilities.PRANKSTER }, + [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.PARENTAL_BOND }, + [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.IRON_FIST }, + [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.LEVITATE, 2: Abilities.LEVITATE, 3: Abilities.LEVITATE, 4: Abilities.LEVITATE, 5: Abilities.LEVITATE }, [Species.CYCLIZAR]: { 0: Abilities.PROTEAN }, [Species.ORTHWORM]: { 0: Abilities.REGENERATOR }, - [Species.GLIMMET]: { 0: Abilities.TERA_SHELL }, + [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 }, + [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 }, @@ -562,29 +1066,34 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.IRON_MOTH]: { 0: Abilities.LEVITATE }, [Species.IRON_THORNS]: { 0: Abilities.SAND_STREAM }, [Species.FRIGIBAX]: { 0: Abilities.INTIMIDATE }, - [Species.GIMMIGHOUL]: { 0: Abilities.HONEY_GATHER }, + [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.OPPORTUNIST }, - [Species.MIRAIDON]: { 0: Abilities.OPPORTUNIST }, + [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 }, + [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 }, + [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 }, + [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.ADAPTABILITY }, - [Species.PALDEA_WOOPER]: { 0: Abilities.THICK_FAT }, + [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 } }; diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index d172173e9df..2f182494fb1 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -2086,7 +2086,7 @@ export function initSpecies() { 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.SHARPNESS, Abilities.SHARPNESS, Abilities.SHARPNESS, 618, 68, 165, 95, 65, 115, 110, 45, 35, 259), + 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), @@ -2357,16 +2357,16 @@ export function initSpecies() { 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.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, "", true), + new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.NONE, 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.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, "", 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.BATTLE_BOND, 640, 72, 145, 67, 153, 71, 132, 45, 70, 265), + 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), From 938f1b8756c1fe54ab2d29777ce8f135a877e389 Mon Sep 17 00:00:00 2001 From: damocleas Date: Wed, 26 Mar 2025 18:57:30 -0400 Subject: [PATCH 16/17] [Balance] G-Max Form Re-Evaluation (#5545) * Update pokemon-species.ts * Orbeetle and Drednaw adjustment * Cinderace, Corviknight, Drednaw, and Coalossal adjustments * Fix Urshifus * Butterfree, Orbettle, and Drednaw adjustments --- src/data/pokemon-species.ts | 46 ++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 2f182494fb1..15c60d28969 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1383,7 +1383,7 @@ export function initSpecies() { 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, 82, 98, 130, 115, 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), @@ -1391,20 +1391,20 @@ export function initSpecies() { 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, 84, 93, 139, 100, 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, 83, 135, 115, 110, 68, 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, 85, 35, 80, 120, 90, 85, 45, 50, 198, 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), @@ -1485,7 +1485,7 @@ export function initSpecies() { 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, 115, 170, 95, 65, 95, 65, 45, 50, 253), + 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), @@ -1526,7 +1526,7 @@ export function initSpecies() { 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, 90, 155, 140, 50, 70, 70, 60, 50, 166), + 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), @@ -1570,13 +1570,13 @@ export function initSpecies() { ), 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, 85, 85, 105, 130, 60, 45, 50, 187), + 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, 90, 70, 95, 85, 85, 45, 50, 65), //+100 BST from Partner Form + 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), @@ -1592,7 +1592,7 @@ export function initSpecies() { ), 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, 200, 135, 80, 80, 125, 20, 25, 50, 189), + 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), @@ -2232,7 +2232,7 @@ export function initSpecies() { 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, 135, 125, 102, 57, 102, 53, 60, 50, 166), + 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), @@ -2707,25 +2707,25 @@ export function initSpecies() { 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, 175, 165, 155, 85, 75, 45, 3, 0, 300), + 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, 150, 105, 85, 85, 80, 45, 50, 265), + 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, 146, 80, 90, 80, 134, 45, 50, 265), + 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, 97, 77, 147, 77, 137, 45, 50, 265), + 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), @@ -2733,13 +2733,13 @@ export function initSpecies() { 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, 128, 102, 140, 53, 95, 77, 45, 50, 248), + 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, 90, 45, 130, 110, 140, 90, 45, 50, 253), + 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), @@ -2750,7 +2750,7 @@ export function initSpecies() { 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, 145, 115, 43, 83, 84, 75, 50, 170), + 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), @@ -2758,7 +2758,7 @@ export function initSpecies() { 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, 95, 130, 95, 110, 40, 45, 50, 255), + 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, @@ -2772,7 +2772,7 @@ export function initSpecies() { 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, 117, 137, 140, 55, 80, 81, 120, 50, 179), + 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), @@ -2790,7 +2790,7 @@ export function initSpecies() { 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, 140, 145, 75, 90, 100, 75, 75, 50, 184), + 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), @@ -2853,7 +2853,7 @@ export function initSpecies() { 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, 167, 155, 89, 80, 89, 20, 90, 50, 175), + 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), @@ -2882,8 +2882,8 @@ export function initSpecies() { 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, 150, 115, 73, 70, 117, 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, 150, 115, 73, 70, 117, 3, 50, 275), + 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), From ff5e67aa30b82c3dc47a629e1c258703440f0748 Mon Sep 17 00:00:00 2001 From: Unicornpowerstar Date: Thu, 27 Mar 2025 01:44:28 +0100 Subject: [PATCH 17/17] pika --- public/images/pokemon/890-eternamax.json | 773 +---------------- public/images/pokemon/890-eternamax.png | Bin 40595 -> 5107 bytes .../images/pokemon/shiny/890-eternamax.json | 773 +---------------- public/images/pokemon/shiny/890-eternamax.png | Bin 40592 -> 5107 bytes .../pokemon/variant/890-eternamax_2.json | 775 +----------------- .../pokemon/variant/890-eternamax_2.png | Bin 44756 -> 5130 bytes .../pokemon/variant/890-eternamax_3.json | 775 +----------------- .../pokemon/variant/890-eternamax_3.png | Bin 44757 -> 5218 bytes .../images/pokemon/variant/_masterlist.json | 2 +- 9 files changed, 79 insertions(+), 3019 deletions(-) diff --git a/public/images/pokemon/890-eternamax.json b/public/images/pokemon/890-eternamax.json index 98cb6f20446..70a327ef22c 100644 --- a/public/images/pokemon/890-eternamax.json +++ b/public/images/pokemon/890-eternamax.json @@ -1,755 +1,20 @@ -{ - "textures": [ - { - "image": "890-eternamax.png", - "format": "RGBA8888", - "size": { - "w": 579, - "h": 579 - }, - "scale": 1, - "frames": [ - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 100, - "h": 98 - }, - "frame": { - "x": 0, - "y": 0, - "w": 100, - "h": 98 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 95, - "h": 100 - }, - "frame": { - "x": 100, - "y": 0, - "w": 95, - "h": 100 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 91, - "h": 100 - }, - "frame": { - "x": 0, - "y": 98, - "w": 91, - "h": 100 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 96, - "h": 98 - }, - "frame": { - "x": 91, - "y": 100, - "w": 96, - "h": 98 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 95, - "h": 99 - }, - "frame": { - "x": 187, - "y": 100, - "w": 95, - "h": 99 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 91, - "h": 98 - }, - "frame": { - "x": 0, - "y": 198, - "w": 91, - "h": 98 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 10, - "w": 88, - "h": 98 - }, - "frame": { - "x": 91, - "y": 198, - "w": 88, - "h": 98 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 95, - "h": 97 - }, - "frame": { - "x": 195, - "y": 0, - "w": 95, - "h": 97 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 95, - "h": 97 - }, - "frame": { - "x": 179, - "y": 199, - "w": 95, - "h": 97 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 95, - "h": 97 - }, - "frame": { - "x": 274, - "y": 199, - "w": 95, - "h": 97 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 95, - "h": 97 - }, - "frame": { - "x": 290, - "y": 0, - "w": 95, - "h": 97 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 94, - "h": 96 - }, - "frame": { - "x": 282, - "y": 97, - "w": 94, - "h": 96 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 11, - "w": 90, - "h": 97 - }, - "frame": { - "x": 369, - "y": 193, - "w": 90, - "h": 97 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 93, - "h": 95 - }, - "frame": { - "x": 385, - "y": 0, - "w": 93, - "h": 95 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 9, - "w": 91, - "h": 96 - }, - "frame": { - "x": 385, - "y": 95, - "w": 91, - "h": 96 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 87, - "h": 97 - }, - "frame": { - "x": 369, - "y": 290, - "w": 87, - "h": 97 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 90, - "h": 96 - }, - "frame": { - "x": 456, - "y": 290, - "w": 90, - "h": 96 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 90, - "h": 96 - }, - "frame": { - "x": 459, - "y": 191, - "w": 90, - "h": 96 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 90, - "h": 95 - }, - "frame": { - "x": 476, - "y": 95, - "w": 90, - "h": 95 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 89, - "h": 95 - }, - "frame": { - "x": 478, - "y": 0, - "w": 89, - "h": 95 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 89, - "h": 96 - }, - "frame": { - "x": 456, - "y": 386, - "w": 89, - "h": 96 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 11, - "w": 89, - "h": 95 - }, - "frame": { - "x": 0, - "y": 296, - "w": 89, - "h": 95 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 9, - "y": 14, - "w": 89, - "h": 94 - }, - "frame": { - "x": 89, - "y": 296, - "w": 89, - "h": 94 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 88, - "h": 95 - }, - "frame": { - "x": 178, - "y": 296, - "w": 88, - "h": 95 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 87, - "h": 95 - }, - "frame": { - "x": 89, - "y": 390, - "w": 87, - "h": 95 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 89, - "h": 94 - }, - "frame": { - "x": 0, - "y": 391, - "w": 89, - "h": 94 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 14, - "w": 89, - "h": 93 - }, - "frame": { - "x": 266, - "y": 387, - "w": 89, - "h": 93 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 16, - "y": 13, - "w": 85, - "h": 91 - }, - "frame": { - "x": 266, - "y": 296, - "w": 85, - "h": 91 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 13, - "w": 88, - "h": 94 - }, - "frame": { - "x": 176, - "y": 391, - "w": 88, - "h": 94 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 13, - "w": 87, - "h": 94 - }, - "frame": { - "x": 355, - "y": 387, - "w": 87, - "h": 94 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 16, - "y": 11, - "w": 87, - "h": 94 - }, - "frame": { - "x": 264, - "y": 480, - "w": 87, - "h": 94 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 14, - "w": 89, - "h": 93 - }, - "frame": { - "x": 351, - "y": 481, - "w": 89, - "h": 93 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 87, - "h": 93 - }, - "frame": { - "x": 440, - "y": 482, - "w": 87, - "h": 93 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 10, - "w": 86, - "h": 94 - }, - "frame": { - "x": 0, - "y": 485, - "w": 86, - "h": 94 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 14, - "w": 85, - "h": 91 - }, - "frame": { - "x": 86, - "y": 485, - "w": 85, - "h": 91 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8fd9e1830200ec8e4aac8571cc2d27a6:c966e3efce03c7bae43d7bca6d6dfa62:cedd2711a12bbacba5623505fe88bd92$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 96, "h": 98 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 96, "h": 98 }, + "sourceSize": { "w": 96, "h": 98 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "890-eternamax.png", + "format": "RGBA8888", + "size": { "w": 96, "h": 98 }, + "scale": "1" + } } diff --git a/public/images/pokemon/890-eternamax.png b/public/images/pokemon/890-eternamax.png index 33c8f5f96318b1cf75ab8b8add7e86c833c4b8da..a1cf684c026eece85e4fdb32d1b8ac75178c9b16 100644 GIT binary patch literal 5107 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 O1N5{F;nkWBQU3?QvA=}? literal 40595 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 D0Q9kL diff --git a/public/images/pokemon/shiny/890-eternamax.json b/public/images/pokemon/shiny/890-eternamax.json index 26813186ba8..39c1d175c8c 100644 --- a/public/images/pokemon/shiny/890-eternamax.json +++ b/public/images/pokemon/shiny/890-eternamax.json @@ -1,755 +1,20 @@ -{ - "textures": [ - { - "image": "890-eternamax.png", - "format": "RGBA8888", - "size": { - "w": 579, - "h": 579 - }, - "scale": 1, - "frames": [ - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 100, - "h": 98 - }, - "frame": { - "x": 0, - "y": 0, - "w": 100, - "h": 98 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 95, - "h": 100 - }, - "frame": { - "x": 100, - "y": 0, - "w": 95, - "h": 100 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 91, - "h": 100 - }, - "frame": { - "x": 0, - "y": 98, - "w": 91, - "h": 100 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 96, - "h": 98 - }, - "frame": { - "x": 91, - "y": 100, - "w": 96, - "h": 98 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 95, - "h": 99 - }, - "frame": { - "x": 187, - "y": 100, - "w": 95, - "h": 99 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 91, - "h": 98 - }, - "frame": { - "x": 0, - "y": 198, - "w": 91, - "h": 98 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 10, - "w": 88, - "h": 98 - }, - "frame": { - "x": 91, - "y": 198, - "w": 88, - "h": 98 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 95, - "h": 97 - }, - "frame": { - "x": 195, - "y": 0, - "w": 95, - "h": 97 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 95, - "h": 97 - }, - "frame": { - "x": 179, - "y": 199, - "w": 95, - "h": 97 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 95, - "h": 97 - }, - "frame": { - "x": 274, - "y": 199, - "w": 95, - "h": 97 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 95, - "h": 97 - }, - "frame": { - "x": 290, - "y": 0, - "w": 95, - "h": 97 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 94, - "h": 96 - }, - "frame": { - "x": 282, - "y": 97, - "w": 94, - "h": 96 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 11, - "w": 90, - "h": 97 - }, - "frame": { - "x": 369, - "y": 193, - "w": 90, - "h": 97 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 93, - "h": 95 - }, - "frame": { - "x": 385, - "y": 0, - "w": 93, - "h": 95 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 9, - "w": 91, - "h": 96 - }, - "frame": { - "x": 385, - "y": 95, - "w": 91, - "h": 96 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 87, - "h": 97 - }, - "frame": { - "x": 369, - "y": 290, - "w": 87, - "h": 97 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 90, - "h": 96 - }, - "frame": { - "x": 456, - "y": 290, - "w": 90, - "h": 96 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 90, - "h": 96 - }, - "frame": { - "x": 459, - "y": 191, - "w": 90, - "h": 96 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 90, - "h": 95 - }, - "frame": { - "x": 476, - "y": 95, - "w": 90, - "h": 95 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 89, - "h": 95 - }, - "frame": { - "x": 478, - "y": 0, - "w": 89, - "h": 95 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 89, - "h": 96 - }, - "frame": { - "x": 456, - "y": 386, - "w": 89, - "h": 96 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 11, - "w": 89, - "h": 95 - }, - "frame": { - "x": 0, - "y": 296, - "w": 89, - "h": 95 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 9, - "y": 14, - "w": 89, - "h": 94 - }, - "frame": { - "x": 89, - "y": 296, - "w": 89, - "h": 94 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 88, - "h": 95 - }, - "frame": { - "x": 178, - "y": 296, - "w": 88, - "h": 95 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 87, - "h": 95 - }, - "frame": { - "x": 89, - "y": 390, - "w": 87, - "h": 95 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 89, - "h": 94 - }, - "frame": { - "x": 0, - "y": 391, - "w": 89, - "h": 94 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 14, - "w": 89, - "h": 93 - }, - "frame": { - "x": 266, - "y": 387, - "w": 89, - "h": 93 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 16, - "y": 13, - "w": 85, - "h": 91 - }, - "frame": { - "x": 266, - "y": 296, - "w": 85, - "h": 91 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 13, - "w": 88, - "h": 94 - }, - "frame": { - "x": 176, - "y": 391, - "w": 88, - "h": 94 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 13, - "w": 87, - "h": 94 - }, - "frame": { - "x": 355, - "y": 387, - "w": 87, - "h": 94 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 16, - "y": 11, - "w": 87, - "h": 94 - }, - "frame": { - "x": 264, - "y": 480, - "w": 87, - "h": 94 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 14, - "w": 89, - "h": 93 - }, - "frame": { - "x": 351, - "y": 481, - "w": 89, - "h": 93 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 87, - "h": 93 - }, - "frame": { - "x": 440, - "y": 482, - "w": 87, - "h": 93 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 10, - "w": 86, - "h": 94 - }, - "frame": { - "x": 0, - "y": 485, - "w": 86, - "h": 94 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 14, - "w": 85, - "h": 91 - }, - "frame": { - "x": 86, - "y": 485, - "w": 85, - "h": 91 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1eb3f67ba4e434995b4589c97560f1be:539129d777c30d08fa799dcebaeb523e:cf277fd83435e8c90cd46073c543568b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 1, "w": 92, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 92, "h": 94 }, + "sourceSize": { "w": 96, "h": 98 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "890-eternamax.png", + "format": "RGBA8888", + "size": { "w": 94, "h": 96 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/890-eternamax.png b/public/images/pokemon/shiny/890-eternamax.png index 3e7b5c1721f508790067ab31aef1ccd1b7d4ae91..8e493b12f3e9d7caba4fc733abef7736247c5b3c 100644 GIT binary patch literal 5107 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

%ERCn)Z2?M1y3c9EG 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 A#sB~S diff --git a/public/images/pokemon/variant/890-eternamax_2.json b/public/images/pokemon/variant/890-eternamax_2.json index 895a2f27841..de0107b9854 100644 --- a/public/images/pokemon/variant/890-eternamax_2.json +++ b/public/images/pokemon/variant/890-eternamax_2.json @@ -1,755 +1,20 @@ -{ - "textures": [ - { - "image": "890-eternamax_2.png", - "format": "RGBA8888", - "size": { - "w": 579, - "h": 579 - }, - "scale": 1, - "frames": [ - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 100, - "h": 98 - }, - "frame": { - "x": 0, - "y": 0, - "w": 100, - "h": 98 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 95, - "h": 100 - }, - "frame": { - "x": 100, - "y": 0, - "w": 95, - "h": 100 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 91, - "h": 100 - }, - "frame": { - "x": 0, - "y": 98, - "w": 91, - "h": 100 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 96, - "h": 98 - }, - "frame": { - "x": 91, - "y": 100, - "w": 96, - "h": 98 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 95, - "h": 99 - }, - "frame": { - "x": 187, - "y": 100, - "w": 95, - "h": 99 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 91, - "h": 98 - }, - "frame": { - "x": 0, - "y": 198, - "w": 91, - "h": 98 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 10, - "w": 88, - "h": 98 - }, - "frame": { - "x": 91, - "y": 198, - "w": 88, - "h": 98 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 95, - "h": 97 - }, - "frame": { - "x": 195, - "y": 0, - "w": 95, - "h": 97 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 95, - "h": 97 - }, - "frame": { - "x": 179, - "y": 199, - "w": 95, - "h": 97 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 95, - "h": 97 - }, - "frame": { - "x": 274, - "y": 199, - "w": 95, - "h": 97 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 95, - "h": 97 - }, - "frame": { - "x": 290, - "y": 0, - "w": 95, - "h": 97 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 94, - "h": 96 - }, - "frame": { - "x": 282, - "y": 97, - "w": 94, - "h": 96 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 11, - "w": 90, - "h": 97 - }, - "frame": { - "x": 369, - "y": 193, - "w": 90, - "h": 97 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 93, - "h": 95 - }, - "frame": { - "x": 385, - "y": 0, - "w": 93, - "h": 95 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 9, - "w": 91, - "h": 96 - }, - "frame": { - "x": 385, - "y": 95, - "w": 91, - "h": 96 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 87, - "h": 97 - }, - "frame": { - "x": 369, - "y": 290, - "w": 87, - "h": 97 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 90, - "h": 96 - }, - "frame": { - "x": 456, - "y": 290, - "w": 90, - "h": 96 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 90, - "h": 96 - }, - "frame": { - "x": 459, - "y": 191, - "w": 90, - "h": 96 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 90, - "h": 95 - }, - "frame": { - "x": 476, - "y": 95, - "w": 90, - "h": 95 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 89, - "h": 95 - }, - "frame": { - "x": 478, - "y": 0, - "w": 89, - "h": 95 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 89, - "h": 96 - }, - "frame": { - "x": 456, - "y": 386, - "w": 89, - "h": 96 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 11, - "w": 89, - "h": 95 - }, - "frame": { - "x": 0, - "y": 296, - "w": 89, - "h": 95 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 9, - "y": 14, - "w": 89, - "h": 94 - }, - "frame": { - "x": 89, - "y": 296, - "w": 89, - "h": 94 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 88, - "h": 95 - }, - "frame": { - "x": 178, - "y": 296, - "w": 88, - "h": 95 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 87, - "h": 95 - }, - "frame": { - "x": 89, - "y": 390, - "w": 87, - "h": 95 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 89, - "h": 94 - }, - "frame": { - "x": 0, - "y": 391, - "w": 89, - "h": 94 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 14, - "w": 89, - "h": 93 - }, - "frame": { - "x": 266, - "y": 387, - "w": 89, - "h": 93 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 16, - "y": 13, - "w": 85, - "h": 91 - }, - "frame": { - "x": 266, - "y": 296, - "w": 85, - "h": 91 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 13, - "w": 88, - "h": 94 - }, - "frame": { - "x": 176, - "y": 391, - "w": 88, - "h": 94 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 13, - "w": 87, - "h": 94 - }, - "frame": { - "x": 355, - "y": 387, - "w": 87, - "h": 94 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 16, - "y": 11, - "w": 87, - "h": 94 - }, - "frame": { - "x": 264, - "y": 480, - "w": 87, - "h": 94 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 14, - "w": 89, - "h": 93 - }, - "frame": { - "x": 351, - "y": 481, - "w": 89, - "h": 93 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 87, - "h": 93 - }, - "frame": { - "x": 440, - "y": 482, - "w": 87, - "h": 93 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 10, - "w": 86, - "h": 94 - }, - "frame": { - "x": 0, - "y": 485, - "w": 86, - "h": 94 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 14, - "w": 85, - "h": 91 - }, - "frame": { - "x": 86, - "y": 485, - "w": 85, - "h": 91 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8fd9e1830200ec8e4aac8571cc2d27a6:c966e3efce03c7bae43d7bca6d6dfa62:cedd2711a12bbacba5623505fe88bd92$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 1, "w": 92, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 92, "h": 94 }, + "sourceSize": { "w": 96, "h": 98 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "890-eternamax_2.png", + "format": "RGBA8888", + "size": { "w": 94, "h": 96 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/variant/890-eternamax_2.png b/public/images/pokemon/variant/890-eternamax_2.png index 2327900b9717bcd56e0b50afb42b9a4d06f160de..adafb2f1d351941683d08771f56b69c11e4614c3 100644 GIT binary patch literal 5130 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 cf6Xi@@54ZTQ_E-Enz5K6$1 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 Ef`}TVegFUf diff --git a/public/images/pokemon/variant/890-eternamax_3.json b/public/images/pokemon/variant/890-eternamax_3.json index ecc084c689f..9d3f6070a27 100644 --- a/public/images/pokemon/variant/890-eternamax_3.json +++ b/public/images/pokemon/variant/890-eternamax_3.json @@ -1,755 +1,20 @@ -{ - "textures": [ - { - "image": "890-eternamax_3.png", - "format": "RGBA8888", - "size": { - "w": 579, - "h": 579 - }, - "scale": 1, - "frames": [ - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 100, - "h": 98 - }, - "frame": { - "x": 0, - "y": 0, - "w": 100, - "h": 98 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 95, - "h": 100 - }, - "frame": { - "x": 100, - "y": 0, - "w": 95, - "h": 100 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 91, - "h": 100 - }, - "frame": { - "x": 0, - "y": 98, - "w": 91, - "h": 100 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 96, - "h": 98 - }, - "frame": { - "x": 91, - "y": 100, - "w": 96, - "h": 98 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 9, - "w": 95, - "h": 99 - }, - "frame": { - "x": 187, - "y": 100, - "w": 95, - "h": 99 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 91, - "h": 98 - }, - "frame": { - "x": 0, - "y": 198, - "w": 91, - "h": 98 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 10, - "w": 88, - "h": 98 - }, - "frame": { - "x": 91, - "y": 198, - "w": 88, - "h": 98 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 95, - "h": 97 - }, - "frame": { - "x": 195, - "y": 0, - "w": 95, - "h": 97 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 95, - "h": 97 - }, - "frame": { - "x": 179, - "y": 199, - "w": 95, - "h": 97 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 95, - "h": 97 - }, - "frame": { - "x": 274, - "y": 199, - "w": 95, - "h": 97 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 95, - "h": 97 - }, - "frame": { - "x": 290, - "y": 0, - "w": 95, - "h": 97 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 94, - "h": 96 - }, - "frame": { - "x": 282, - "y": 97, - "w": 94, - "h": 96 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 11, - "w": 90, - "h": 97 - }, - "frame": { - "x": 369, - "y": 193, - "w": 90, - "h": 97 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 8, - "y": 13, - "w": 93, - "h": 95 - }, - "frame": { - "x": 385, - "y": 0, - "w": 93, - "h": 95 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 9, - "w": 91, - "h": 96 - }, - "frame": { - "x": 385, - "y": 95, - "w": 91, - "h": 96 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 87, - "h": 97 - }, - "frame": { - "x": 369, - "y": 290, - "w": 87, - "h": 97 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 90, - "h": 96 - }, - "frame": { - "x": 456, - "y": 290, - "w": 90, - "h": 96 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 8, - "w": 90, - "h": 96 - }, - "frame": { - "x": 459, - "y": 191, - "w": 90, - "h": 96 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 90, - "h": 95 - }, - "frame": { - "x": 476, - "y": 95, - "w": 90, - "h": 95 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 89, - "h": 95 - }, - "frame": { - "x": 478, - "y": 0, - "w": 89, - "h": 95 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 89, - "h": 96 - }, - "frame": { - "x": 456, - "y": 386, - "w": 89, - "h": 96 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 11, - "w": 89, - "h": 95 - }, - "frame": { - "x": 0, - "y": 296, - "w": 89, - "h": 95 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 9, - "y": 14, - "w": 89, - "h": 94 - }, - "frame": { - "x": 89, - "y": 296, - "w": 89, - "h": 94 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 88, - "h": 95 - }, - "frame": { - "x": 178, - "y": 296, - "w": 88, - "h": 95 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 87, - "h": 95 - }, - "frame": { - "x": 89, - "y": 390, - "w": 87, - "h": 95 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 12, - "w": 89, - "h": 94 - }, - "frame": { - "x": 0, - "y": 391, - "w": 89, - "h": 94 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 14, - "w": 89, - "h": 93 - }, - "frame": { - "x": 266, - "y": 387, - "w": 89, - "h": 93 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 16, - "y": 13, - "w": 85, - "h": 91 - }, - "frame": { - "x": 266, - "y": 296, - "w": 85, - "h": 91 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 13, - "w": 88, - "h": 94 - }, - "frame": { - "x": 176, - "y": 391, - "w": 88, - "h": 94 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 13, - "w": 87, - "h": 94 - }, - "frame": { - "x": 355, - "y": 387, - "w": 87, - "h": 94 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 16, - "y": 11, - "w": 87, - "h": 94 - }, - "frame": { - "x": 264, - "y": 480, - "w": 87, - "h": 94 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 11, - "y": 14, - "w": 89, - "h": 93 - }, - "frame": { - "x": 351, - "y": 481, - "w": 89, - "h": 93 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 12, - "y": 11, - "w": 87, - "h": 93 - }, - "frame": { - "x": 440, - "y": 482, - "w": 87, - "h": 93 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 10, - "w": 86, - "h": 94 - }, - "frame": { - "x": 0, - "y": 485, - "w": 86, - "h": 94 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 112, - "h": 112 - }, - "spriteSourceSize": { - "x": 13, - "y": 14, - "w": 85, - "h": 91 - }, - "frame": { - "x": 86, - "y": 485, - "w": 85, - "h": 91 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8fd9e1830200ec8e4aac8571cc2d27a6:c966e3efce03c7bae43d7bca6d6dfa62:cedd2711a12bbacba5623505fe88bd92$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 1, "w": 96, "h": 98 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 96, "h": 98 }, + "sourceSize": { "w": 96, "h": 98 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "890-eternamax_3.png", + "format": "RGBA8888", + "size": { "w": 98, "h": 100 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/variant/890-eternamax_3.png b/public/images/pokemon/variant/890-eternamax_3.png index 140837cfbd0c26f3ed82c85d057040fa4af8b71a..21a3e5be381675f5da9e0fea9978fbe10c85e7ac 100644 GIT binary patch literal 5218 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 OhB$CVO&D6f6Xi@@54ZTQ_E-Enz5K6$1 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