From 42c4ca27e6cf171c3ebc7900e58aca5062132e14 Mon Sep 17 00:00:00 2001 From: geeilhan <107366005+geeilhan@users.noreply.github.com> Date: Tue, 11 Feb 2025 07:53:37 +0100 Subject: [PATCH 01/23] [Ability][Move] Last Respects Refactor and Full Implementation (#5200) * full implementation of supreme overlord + test * removed unused import * changed documentation since Battle.playerFaints is not used in supreme overlord * Update faint-phase.ts * changed supreme overlords power calculation function and adjusted tests * added changes to Last Respects too * added playerFaints to SessionSaveData to make the counter saveable * Apply Kev's suggestions Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Reset enemy faint counter per battle * Re-mark supreme overlord as partial * added automated test case * moved playerFaints reset to resetArenaEffects * removed resetEnemyFaintCount() function since it is unused --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 4 +- src/battle.ts | 12 +- src/data/ability.ts | 4 +- src/data/move.ts | 3 +- src/field/arena.ts | 13 +- src/phases/faint-phase.ts | 5 +- src/phases/game-over-phase.ts | 3 +- src/system/game-data.ts | 9 +- src/test/abilities/supreme_overlord.test.ts | 178 ++++++++++++++++ src/test/moves/last_respects.test.ts | 219 ++++++++++++++++++++ 10 files changed, 432 insertions(+), 18 deletions(-) create mode 100644 src/test/abilities/supreme_overlord.test.ts create mode 100644 src/test/moves/last_respects.test.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 9bfa153ef60..7aa0369877b 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1401,8 +1401,8 @@ export default class BattleScene extends SceneBase { return this.currentBattle; } - newArena(biome: Biome): Arena { - this.arena = new Arena(biome, Biome[biome].toLowerCase()); + newArena(biome: Biome, playerFaints?: number): Arena { + this.arena = new Arena(biome, Biome[biome].toLowerCase(), playerFaints); this.eventTarget.dispatchEvent(new NewArenaEvent()); this.arenaBg.pipelineData = { terrainColorRatio: this.arena.getBgTerrainColorRatioForBiome() }; diff --git a/src/battle.ts b/src/battle.ts index 3f36865c74b..7ede7b2982e 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -105,9 +105,11 @@ export default class Battle { public lastEnemyInvolved: number; public lastPlayerInvolved: number; public lastUsedPokeball: PokeballType | null = null; - /** The number of times a Pokemon on the player's side has fainted this battle */ - public playerFaints: number = 0; - /** The number of times a Pokemon on the enemy's side has fainted this battle */ + /** + * Saves the number of times a Pokemon on the enemy's side has fainted during this battle. + * This is saved here since we encounter a new enemy every wave. + * {@linkcode globalScene.arena.playerFaints} is the corresponding faint counter for the player and needs to be save across waves (reset every arena encounter). + */ public enemyFaints: number = 0; public playerFaintsHistory: FaintLogEntry[] = []; public enemyFaintsHistory: FaintLogEntry[] = []; @@ -118,7 +120,7 @@ export default class Battle { private rngCounter: number = 0; - constructor(gameMode: GameMode, waveIndex: number, battleType: BattleType, trainer?: Trainer, double?: boolean) { + constructor(gameMode: GameMode, waveIndex: number, battleType: BattleType, trainer?: Trainer, double: boolean = false) { this.gameMode = gameMode; this.waveIndex = waveIndex; this.battleType = battleType; @@ -127,7 +129,7 @@ export default class Battle { this.enemyLevels = battleType !== BattleType.TRAINER ? new Array(double ? 2 : 1).fill(null).map(() => this.getLevelForWave()) : trainer?.getPartyLevels(this.waveIndex); - this.double = double ?? false; + this.double = double; } private initBattleSpec(): void { diff --git a/src/data/ability.ts b/src/data/ability.ts index 21ec5667426..cd31c62f7f6 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -6313,8 +6313,8 @@ export function initAbilities() { new Ability(Abilities.SHARPNESS, 9) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.SLICING_MOVE), 1.5), new Ability(Abilities.SUPREME_OVERLORD, 9) - .attr(VariableMovePowerBoostAbAttr, (user, target, move) => 1 + 0.1 * Math.min(user.isPlayer() ? globalScene.currentBattle.playerFaints : globalScene.currentBattle.enemyFaints, 5)) - .partial(), // Counter resets every wave instead of on arena reset + .attr(VariableMovePowerBoostAbAttr, (user, target, move) => 1 + 0.1 * Math.min(user.isPlayer() ? globalScene.arena.playerFaints : globalScene.currentBattle.enemyFaints, 5)) + .partial(), // Should only boost once, on summon new Ability(Abilities.COSTAR, 9) .attr(PostSummonCopyAllyStatsAbAttr), new Ability(Abilities.TOXIC_DEBRIS, 9) diff --git a/src/data/move.ts b/src/data/move.ts index 967d2ee0cc2..6c41f0b764d 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -10916,8 +10916,7 @@ export function initMoves() { .attr(ConfuseAttr) .recklessMove(), new AttackMove(Moves.LAST_RESPECTS, Type.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) - .partial() // Counter resets every wave instead of on arena reset - .attr(MovePowerMultiplierAttr, (user, target, move) => 1 + Math.min(user.isPlayer() ? globalScene.currentBattle.playerFaints : globalScene.currentBattle.enemyFaints, 100)) + .attr(MovePowerMultiplierAttr, (user, target, move) => 1 + Math.min(user.isPlayer() ? globalScene.arena.playerFaints : globalScene.currentBattle.enemyFaints, 100)) .makesContact(false), new AttackMove(Moves.LUMINA_CRASH, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), diff --git a/src/field/arena.ts b/src/field/arena.ts index 67b83e9518f..5ee065d71dc 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -44,6 +44,11 @@ export class Arena { public bgm: string; public ignoreAbilities: boolean; public ignoringEffectSource: BattlerIndex | null; + /** + * Saves the number of times a party pokemon faints during a arena encounter. + * {@linkcode globalScene.currentBattle.enemyFaints} is the corresponding faint counter for the enemy (this resets every wave). + */ + public playerFaints: number; private lastTimeOfDay: TimeOfDay; @@ -52,12 +57,13 @@ export class Arena { public readonly eventTarget: EventTarget = new EventTarget(); - constructor(biome: Biome, bgm: string) { + constructor(biome: Biome, bgm: string, playerFaints: number = 0) { this.biomeType = biome; this.tags = []; this.bgm = bgm; this.trainerPool = biomeTrainerPools[biome]; this.updatePoolsForTimeOfDay(); + this.playerFaints = playerFaints; } init() { @@ -688,6 +694,7 @@ export class Arena { this.trySetWeather(WeatherType.NONE, false); } this.trySetTerrain(TerrainType.NONE, false, true); + this.resetPlayerFaintCount(); this.removeAllTags(); } @@ -773,6 +780,10 @@ export class Arena { return 0; } } + + resetPlayerFaintCount(): void { + this.playerFaints = 0; + } } export function getBiomeKey(biome: Biome): string { diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 414aa84ce6c..340c5362087 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -96,10 +96,9 @@ export class FaintPhase extends PokemonPhase { doFaint(): void { const pokemon = this.getPokemon(); - - // Track total times pokemon have been KO'd for supreme overlord/last respects + // Track total times pokemon have been KO'd for Last Respects/Supreme Overlord if (pokemon.isPlayer()) { - globalScene.currentBattle.playerFaints += 1; + globalScene.arena.playerFaints += 1; globalScene.currentBattle.playerFaintsHistory.push({ pokemon: pokemon, turn: globalScene.currentBattle.turn }); } else { globalScene.currentBattle.enemyFaints += 1; diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index 5e4e8e1cdf7..d4b529fe00e 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -249,7 +249,8 @@ export class GameOverPhase extends BattlePhase { timestamp: new Date().getTime(), challenges: globalScene.gameMode.challenges.map(c => new ChallengeData(c)), mysteryEncounterType: globalScene.currentBattle.mysteryEncounter?.encounterType ?? -1, - mysteryEncounterSaveData: globalScene.mysteryEncounterSaveData + mysteryEncounterSaveData: globalScene.mysteryEncounterSaveData, + playerFaints: globalScene.arena.playerFaints } as SessionSaveData; } } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 7282d2730a4..c16fab9db04 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -141,6 +141,10 @@ export interface SessionSaveData { challenges: ChallengeData[]; mysteryEncounterType: MysteryEncounterType | -1; // Only defined when current wave is ME, mysteryEncounterSaveData: MysteryEncounterSaveData; + /** + * Counts the amount of pokemon fainted in your party during the current arena encounter. + */ + playerFaints: number; } interface Unlocks { @@ -964,7 +968,8 @@ export class GameData { timestamp: new Date().getTime(), challenges: globalScene.gameMode.challenges.map(c => new ChallengeData(c)), mysteryEncounterType: globalScene.currentBattle.mysteryEncounter?.encounterType ?? -1, - mysteryEncounterSaveData: globalScene.mysteryEncounterSaveData + mysteryEncounterSaveData: globalScene.mysteryEncounterSaveData, + playerFaints: globalScene.arena.playerFaints } as SessionSaveData; } @@ -1056,7 +1061,7 @@ export class GameData { globalScene.mysteryEncounterSaveData = new MysteryEncounterSaveData(sessionData.mysteryEncounterSaveData); - globalScene.newArena(sessionData.arena.biome); + globalScene.newArena(sessionData.arena.biome, sessionData.playerFaints); const battleType = sessionData.battleType || 0; const trainerConfig = sessionData.trainer ? trainerConfigs[sessionData.trainer.trainerType] : null; diff --git a/src/test/abilities/supreme_overlord.test.ts b/src/test/abilities/supreme_overlord.test.ts new file mode 100644 index 00000000000..ecd595cb6bb --- /dev/null +++ b/src/test/abilities/supreme_overlord.test.ts @@ -0,0 +1,178 @@ +import { Moves } from "#app/enums/moves"; +import { Abilities } from "#enums/abilities"; +import { Species } from "#enums/species"; +import { BattlerIndex } from "#app/battle"; +import { MoveEffectPhase } from "#app/phases/move-effect-phase"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { allMoves } from "#app/data/move"; + +describe("Abilities - Supreme Overlord", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + const move = allMoves[Moves.TACKLE]; + const basePower = move.power; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .enemySpecies(Species.MAGIKARP) + .enemyLevel(100) + .startingLevel(1) + .enemyAbility(Abilities.BALL_FETCH) + .ability(Abilities.SUPREME_OVERLORD) + .enemyMoveset([ Moves.SPLASH ]) + .moveset([ Moves.TACKLE, Moves.EXPLOSION, Moves.LUNAR_DANCE ]); + + vi.spyOn(move, "calculateBattlePower"); + }); + + it("should increase Power by 20% if 2 Pokemon are fainted in the party", async() => { + await game.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(2); + await game.toNextTurn(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(move.calculateBattlePower).toHaveReturnedWith(basePower * 1.2); + }); + + it("should increase Power by 30% if an ally fainted twice and another one once", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + /** + * Bulbasur faints once + */ + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Charmander faints once + */ + game.doRevivePokemon(1); + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Bulbasur faints twice + */ + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(2); + await game.toNextTurn(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(move.calculateBattlePower).toHaveReturnedWith(basePower * 1.3); + }); + + it("should maintain its power during next battle if it is within the same arena encounter", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(1) + .enemyLevel(1) + .startingLevel(100); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + /** + * The first Pokemon faints and another Pokemon in the party is selected. + */ + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Enemy Pokemon faints and new wave is entered. + */ + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower * 1.1); + }); + + it("should reset playerFaints count if we enter new trainer battle", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(4) + .enemyLevel(1) + .startingLevel(100); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower); + }); + + it("should reset playerFaints count if we enter new biome", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(10) + .enemyLevel(1) + .startingLevel(100); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + + game.move.select(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower); + }); +}); diff --git a/src/test/moves/last_respects.test.ts b/src/test/moves/last_respects.test.ts new file mode 100644 index 00000000000..71a76e3fa1a --- /dev/null +++ b/src/test/moves/last_respects.test.ts @@ -0,0 +1,219 @@ +import { Moves } from "#enums/moves"; +import { BattlerIndex } from "#app/battle"; +import { Species } from "#enums/species"; +import { Abilities } from "#enums/abilities"; +import GameManager from "#test/utils/gameManager"; +import { allMoves } from "#app/data/move"; +import { MoveEffectPhase } from "#app/phases/move-effect-phase"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Last Respects", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + const move = allMoves[Moves.LAST_RESPECTS]; + const basePower = move.power; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .disableCrits() + .moveset([ Moves.LAST_RESPECTS, Moves.EXPLOSION, Moves.LUNAR_DANCE ]) + .ability(Abilities.BALL_FETCH) + .enemyAbility(Abilities.BALL_FETCH) + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.SPLASH) + .startingLevel(1) + .enemyLevel(100); + + vi.spyOn(move, "calculateBattlePower"); + }); + + it("should have 150 power if 2 allies faint before using move", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + /** + * Bulbasur faints once + */ + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Charmander faints once + */ + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(2); + await game.toNextTurn(); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(move.calculateBattlePower).toHaveReturnedWith(basePower + (2 * 50)); + }); + + it("should have 200 power if an ally fainted twice and another one once", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + /** + * Bulbasur faints once + */ + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Charmander faints once + */ + game.doRevivePokemon(1); + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Bulbasur faints twice + */ + game.move.select(Moves.EXPLOSION); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + game.doSelectPartyPokemon(2); + await game.toNextTurn(); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(move.calculateBattlePower).toHaveReturnedWith(basePower + (3 * 50)); + }); + + it("should maintain its power for the player during the next battle if it is within the same arena encounter", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(1) + .enemyLevel(1) + .startingLevel(100) + .enemyMoveset(Moves.SPLASH); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + /** + * The first Pokemon faints and another Pokemon in the party is selected. + */ + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Enemy Pokemon faints and new wave is entered. + */ + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + expect(game.scene.arena.playerFaints).toBe(1); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("MoveEndPhase"); + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower + (1 * 50)); + }); + + it("should reset enemyFaints count on progressing to the next wave.", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(1) + .enemyLevel(1) + .startingLevel(100) + .enemyMoveset(Moves.LAST_RESPECTS) + .moveset([ Moves.LUNAR_DANCE, Moves.LAST_RESPECTS, Moves.SPLASH ]); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + /** + * The first Pokemon faints and another Pokemon in the party is selected. + */ + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + /** + * Enemy Pokemon faints and new wave is entered. + */ + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + expect(game.scene.currentBattle.enemyFaints).toBe(0); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("MoveEndPhase"); + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower); + }); + + it("should reset playerFaints count if we enter new trainer battle", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(4) + .enemyLevel(1) + .startingLevel(100); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower); + }); + + it("should reset playerFaints count if we enter new biome", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .startingWave(10) + .enemyLevel(1) + .startingLevel(100); + + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE ]); + + game.move.select(Moves.LUNAR_DANCE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextWave(); + + game.move.select(Moves.LAST_RESPECTS); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower); + }); +}); From f5ef4a5da91ab5139c0036b6731d34613ab373fd Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 10 Feb 2025 23:14:54 -0800 Subject: [PATCH 02/23] [Test] Fix Tera Blast test (#5297) --- src/test/moves/tera_blast.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/moves/tera_blast.test.ts b/src/test/moves/tera_blast.test.ts index 21cbf4c1463..34d171b47bb 100644 --- a/src/test/moves/tera_blast.test.ts +++ b/src/test/moves/tera_blast.test.ts @@ -38,8 +38,8 @@ describe("Moves - Tera Blast", () => { .startingHeldItems([{ name: "TERA_SHARD", type: Type.FIRE }]) .enemySpecies(Species.MAGIKARP) .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH) - .enemyLevel(20); + .enemyAbility(Abilities.STURDY) + .enemyLevel(50); vi.spyOn(moveToCheck, "calculateBattlePower"); }); From 60b27f4f62789a056eca644ecb6ee9d61e7b6eb1 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Tue, 11 Feb 2025 08:32:32 +0100 Subject: [PATCH 03/23] [UI/UX] Pokedex updates batch (#5282) * Introducing tray to display form icons in the pokedex; displaying correct information for uncaught and seen forms in pokedex page; dexForDevs now unlocks everything in the main page * Filtering correctly passive abilities and form abilities. Passive candy symbol is now colored * Pikachu does not break the dex due to having no passive * Fixed position of pokemonFormText * Added button instructions to show forms * Allowing candy upgrades for evolutions; too expensive options shown in shadow text * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Fixed game crashing after save and quit * Updating import of BBCodeText * Restoring name on dex page * getStarterSpecies now looks at speciesStarterCosts to determine what is a starter instead of looking at game data (exception for Pikachu) * Selecting pokedex option in starter select menu does not play error sound * Mons having no TM moves don't freeze the game in the dex * Menu in pokedex page is not pushed to the left when localized options are long * Removed spurious globalScene.clearPhaseQueue() call * Showing error message when clicking tm option if no tm moves are available * Egg move icon and passive icon are darkened when filtering if the respective move or passive has not been unlocked * Hiding form button when switching to filters * Hiding "Show forms" button while forms are being shown --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/ui/abstact-option-select-ui-handler.ts | 2 +- src/ui/pokedex-mon-container.ts | 48 +- src/ui/pokedex-page-ui-handler.ts | 525 +++++++++++---------- src/ui/pokedex-ui-handler.ts | 343 ++++++++++++-- src/ui/starter-select-ui-handler.ts | 2 +- 5 files changed, 626 insertions(+), 294 deletions(-) diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index 1840792e667..10dbedd7b2f 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -6,7 +6,7 @@ import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; import { argbFromRgba } from "@material/material-color-utilities"; import { Button } from "#enums/buttons"; -import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; export interface OptionSelectConfig { xOffset?: number; diff --git a/src/ui/pokedex-mon-container.ts b/src/ui/pokedex-mon-container.ts index f3932aa90c8..31a98c30d1c 100644 --- a/src/ui/pokedex-mon-container.ts +++ b/src/ui/pokedex-mon-container.ts @@ -1,7 +1,17 @@ +import type { Variant } from "#app/data/variant"; import { globalScene } from "#app/global-scene"; +import { isNullOrUndefined } from "#app/utils"; import type PokemonSpecies from "../data/pokemon-species"; import { addTextObject, TextStyle } from "./text"; + +interface SpeciesDetails { + shiny?: boolean, + formIndex?: number + female?: boolean, + variant?: Variant +} + export class PokedexMonContainer extends Phaser.GameObjects.Container { public species: PokemonSpecies; public icon: Phaser.GameObjects.Sprite; @@ -19,16 +29,34 @@ export class PokedexMonContainer extends Phaser.GameObjects.Container { public tmMove2Icon: Phaser.GameObjects.Image; public passive1Icon: Phaser.GameObjects.Image; public passive2Icon: Phaser.GameObjects.Image; + public passive1OverlayIcon: Phaser.GameObjects.Image; + public passive2OverlayIcon: Phaser.GameObjects.Image; public cost: number = 0; - constructor(species: PokemonSpecies) { + constructor(species: PokemonSpecies, options: SpeciesDetails = {}) { super(globalScene, 0, 0); this.species = species; + const { shiny, formIndex, female, variant } = options; + const defaultDexAttr = globalScene.gameData.getSpeciesDefaultDexAttr(species, false, true); const defaultProps = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + if (!isNullOrUndefined(formIndex)) { + defaultProps.formIndex = formIndex; + } + if (!isNullOrUndefined(shiny)) { + defaultProps.shiny = shiny; + } + if (!isNullOrUndefined(variant)) { + defaultProps.variant = variant; + } + if (!isNullOrUndefined(female)) { + defaultProps.female = female; + } + + // starter passive bg const starterPassiveBg = globalScene.add.image(2, 5, "passive_bg"); starterPassiveBg.setOrigin(0, 0); @@ -137,7 +165,7 @@ export class PokedexMonContainer extends Phaser.GameObjects.Container { this.tmMove2Icon = tmMove2Icon; - // move icons + // passive icons const passive1Icon = globalScene.add.image(3, 3, "candy"); passive1Icon.setOrigin(0, 0); passive1Icon.setScale(0.25); @@ -145,13 +173,27 @@ export class PokedexMonContainer extends Phaser.GameObjects.Container { this.add(passive1Icon); this.passive1Icon = passive1Icon; - // move icons + const passive1OverlayIcon = globalScene.add.image(12, 12, "candy_overlay"); + passive1OverlayIcon.setOrigin(0, 0); + passive1OverlayIcon.setScale(0.25); + passive1OverlayIcon.setVisible(false); + this.add(passive1OverlayIcon); + this.passive1OverlayIcon = passive1OverlayIcon; + + // passive icons const passive2Icon = globalScene.add.image(12, 3, "candy"); passive2Icon.setOrigin(0, 0); passive2Icon.setScale(0.25); passive2Icon.setVisible(false); this.add(passive2Icon); this.passive2Icon = passive2Icon; + + const passive2OverlayIcon = globalScene.add.image(12, 12, "candy_overlay"); + passive2OverlayIcon.setOrigin(0, 0); + passive2OverlayIcon.setScale(0.25); + passive2OverlayIcon.setVisible(false); + this.add(passive2OverlayIcon); + this.passive2OverlayIcon = passive2OverlayIcon; } checkIconId(female, formIndex, shiny, variant) { diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 7ab054ea71b..2047095d067 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -43,7 +43,6 @@ import type { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Button } from "#enums/buttons"; import { EggSourceType } from "#enums/egg-source-types"; -import { StarterContainer } from "#app/ui/starter-container"; import { getPassiveCandyCount, getValueReductionCandyCounts, getSameSpeciesEggCandyCounts } from "#app/data/balance/starters"; import { BooleanHolder, capitalizeString, getLocalizedSpriteKey, isNullOrUndefined, NumberHolder, padInt, rgbHexToRgba, toReadableString } from "#app/utils"; import type { Nature } from "#enums/nature"; @@ -128,7 +127,6 @@ interface SpeciesDetails { formIndex?: number female?: boolean, variant?: number, - forSeen?: boolean, // default = false } enum MenuOptions { @@ -147,8 +145,6 @@ enum MenuOptions { export default class PokedexPageUiHandler extends MessageUiHandler { private starterSelectContainer: Phaser.GameObjects.Container; private shinyOverlay: Phaser.GameObjects.Image; - private starterContainers: StarterContainer[] = []; - private filteredStarterContainers: StarterContainer[] = []; private pokemonNumberText: Phaser.GameObjects.Text; private pokemonSprite: Phaser.GameObjects.Sprite; private pokemonNameText: Phaser.GameObjects.Text; @@ -199,6 +195,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { private allSpecies: PokemonSpecies[] = []; private species: PokemonSpecies; + private starterId: number; private formIndex: number; private speciesLoaded: Map = new Map(); private levelMoves: LevelMoves; @@ -312,10 +309,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.speciesLoaded.set(species.speciesId, false); this.allSpecies.push(species); - - const starterContainer = new StarterContainer(species).setVisible(false); - this.starterContainers.push(starterContainer); - starterBoxContainer.add(starterContainer); } this.starterSelectContainer.add(starterBoxContainer); @@ -513,7 +506,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; this.menuBg = addWindow( - (globalScene.game.canvas.width / 6) - (this.optionSelectText.displayWidth + 25), + (globalScene.game.canvas.width / 6 - 83), 0, this.optionSelectText.displayWidth + 19 + 24 * this.scale, (globalScene.game.canvas.height / 6) - 2 @@ -555,8 +548,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { // Filter bar sits above everything, except the message box this.starterSelectContainer.bringToTop(this.starterSelectMessageBoxContainer); - - this.updateInstructions(); } show(args: any[]): boolean { @@ -603,6 +594,8 @@ export default class PokedexPageUiHandler extends MessageUiHandler { const species = this.species; const formIndex = this.formIndex ?? 0; + this.starterId = this.getStarterSpeciesId(this.species.speciesId); + const allEvolutions = pokemonEvolutions.hasOwnProperty(species.speciesId) ? pokemonEvolutions[species.speciesId] : []; if (species.forms.length > 0) { @@ -629,17 +622,19 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.baseTotal = species.baseTotal; } - this.eggMoves = speciesEggMoves[this.getStarterSpeciesId(species.speciesId)] ?? []; - this.hasEggMoves = Array.from({ length: 4 }, (_, em) => (globalScene.gameData.starterData[this.getStarterSpeciesId(species.speciesId)].eggMoves & (1 << em)) !== 0); + this.eggMoves = speciesEggMoves[this.starterId] ?? []; + this.hasEggMoves = Array.from({ length: 4 }, (_, em) => (globalScene.gameData.starterData[this.starterId].eggMoves & (1 << em)) !== 0); const formKey = this.species?.forms.length > 0 ? this.species.forms[this.formIndex].formKey : ""; this.tmMoves = speciesTmMoves[species.speciesId]?.filter(m => Array.isArray(m) ? (m[0] === formKey ? true : false ) : true) .map(m => Array.isArray(m) ? m[1] : m).sort((a, b) => allMoves[a].name > allMoves[b].name ? 1 : -1) ?? []; - const passives = starterPassiveAbilities[this.getStarterSpeciesId(species.speciesId)]; + const passiveId = starterPassiveAbilities.hasOwnProperty(species.speciesId) ? species.speciesId : + starterPassiveAbilities.hasOwnProperty(this.starterId) ? this.starterId : pokemonPrevolutions[this.starterId]; + const passives = starterPassiveAbilities[passiveId]; this.passive = (this.formIndex in passives) ? passives[formIndex] : passives[0]; - const starterData = globalScene.gameData.starterData[this.getStarterSpeciesId(species.speciesId)]; + const starterData = globalScene.gameData.starterData[this.starterId]; const abilityAttr = starterData.abilityAttr; this.hasPassive = starterData.passiveAttr > 0; @@ -655,9 +650,9 @@ export default class PokedexPageUiHandler extends MessageUiHandler { const allBiomes = catchableSpecies[species.speciesId] ?? []; this.preBiomes = this.sanitizeBiomes( - (catchableSpecies[this.getStarterSpeciesId(species.speciesId)] ?? []) + (catchableSpecies[this.starterId] ?? []) .filter(b => !allBiomes.some(bm => (b.biome === bm.biome && b.tier === bm.tier)) && !(b.biome === Biome.TOWN)), - this.getStarterSpeciesId(species.speciesId)); + this.starterId); this.biomes = this.sanitizeBiomes(allBiomes, species.speciesId); const allFormChanges = pokemonFormChanges.hasOwnProperty(species.speciesId) ? pokemonFormChanges[species.speciesId] : []; @@ -799,39 +794,43 @@ export default class PokedexPageUiHandler extends MessageUiHandler { const hasShiny = caughtAttr & DexAttr.SHINY; const hasNonShiny = caughtAttr & DexAttr.NON_SHINY; - if (starterAttributes.shiny && !hasShiny) { + if (!hasShiny || (starterAttributes.shiny === undefined && hasNonShiny)) { // shiny form wasn't unlocked, purging shiny and variant setting starterAttributes.shiny = false; starterAttributes.variant = 0; - } else if (starterAttributes.shiny === false && !hasNonShiny) { - // non shiny form wasn't unlocked, purging shiny setting - starterAttributes.shiny = false; + } else if (!hasNonShiny || (starterAttributes.shiny === undefined && hasShiny)) { + starterAttributes.shiny = true; + starterAttributes.variant = 0; } - if (starterAttributes.variant !== undefined) { - const unlockedVariants = [ - hasShiny && caughtAttr & DexAttr.DEFAULT_VARIANT, - hasShiny && caughtAttr & DexAttr.VARIANT_2, - hasShiny && caughtAttr & DexAttr.VARIANT_3 - ]; - if (isNaN(starterAttributes.variant) || starterAttributes.variant < 0) { - starterAttributes.variant = 0; - } else if (!unlockedVariants[starterAttributes.variant]) { - let highestValidIndex = -1; - for (let i = 0; i <= starterAttributes.variant && i < unlockedVariants.length; i++) { - if (unlockedVariants[i] !== 0n) { - highestValidIndex = i; - } + const unlockedVariants = [ + hasShiny && caughtAttr & DexAttr.DEFAULT_VARIANT, + hasShiny && caughtAttr & DexAttr.VARIANT_2, + hasShiny && caughtAttr & DexAttr.VARIANT_3 + ]; + if (starterAttributes.variant === undefined || isNaN(starterAttributes.variant) || starterAttributes.variant < 0) { + starterAttributes.variant = 0; + } else if (!unlockedVariants[starterAttributes.variant]) { + let highestValidIndex = -1; + for (let i = 0; i <= starterAttributes.variant && i < unlockedVariants.length; i++) { + if (unlockedVariants[i] !== 0n) { + highestValidIndex = i; } - // Set to the highest valid index found or default to 0 - starterAttributes.variant = highestValidIndex !== -1 ? highestValidIndex : 0; } + // Set to the highest valid index found or default to 0 + starterAttributes.variant = highestValidIndex !== -1 ? highestValidIndex : 0; } if (starterAttributes.female !== undefined) { if ((starterAttributes.female && !(caughtAttr & DexAttr.FEMALE)) || (!starterAttributes.female && !(caughtAttr & DexAttr.MALE))) { starterAttributes.female = !starterAttributes.female; } + } else { + if (caughtAttr & DexAttr.FEMALE) { + starterAttributes.female = true; + } else if (caughtAttr & DexAttr.MALE) { + starterAttributes.female = false; + } } return starterAttributes; @@ -878,7 +877,14 @@ export default class PokedexPageUiHandler extends MessageUiHandler { * @returns the id of the corresponding starter */ getStarterSpeciesId(speciesId): number { - if (globalScene.gameData.starterData.hasOwnProperty(speciesId)) { + if (speciesId === Species.PIKACHU) { + if ([ 0, 1, 8 ].includes(this.formIndex)) { + return Species.PICHU; + } else { + return Species.PIKACHU; + } + } + if (speciesStarterCosts.hasOwnProperty(speciesId)) { return speciesId; } else { return pokemonStarters[speciesId]; @@ -886,7 +892,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } getStarterSpecies(species): PokemonSpecies { - if (globalScene.gameData.starterData.hasOwnProperty(species.speciesId)) { + if (speciesStarterCosts.hasOwnProperty(species.speciesId)) { return species; } else { return allSpecies.find(sp => sp.speciesId === pokemonStarters[species.speciesId]) ?? species; @@ -970,7 +976,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } } else { - const starterData = globalScene.gameData.starterData[this.getStarterSpeciesId(this.species.speciesId)]; + const starterData = globalScene.gameData.starterData[this.starterId]; // prepare persistent starter data to store changes const starterAttributes = this.starterAttributes; @@ -1126,6 +1132,9 @@ export default class PokedexPageUiHandler extends MessageUiHandler { if (!isCaught || !isFormCaught) { error = true; + } else if (this.tmMoves.length < 1) { + ui.showText(i18next.t("pokedexUiHandler:noTmMoves")); + error = true; } else { this.blockInput = true; @@ -1633,90 +1642,55 @@ export default class PokedexPageUiHandler extends MessageUiHandler { error = true; } else { const ui = this.getUi(); + ui.showText(""); const options: any[] = []; // TODO: add proper type const passiveAttr = starterData.passiveAttr; const candyCount = starterData.candyCount; - if (!pokemonPrevolutions.hasOwnProperty(this.species.speciesId)) { - if (!(passiveAttr & PassiveAttr.UNLOCKED)) { - const passiveCost = getPassiveCandyCount(speciesStarterCosts[this.getStarterSpeciesId(this.species.speciesId)]); - options.push({ - label: `x${passiveCost} ${i18next.t("pokedexUiHandler:unlockPassive")} (${allAbilities[this.passive].name})`, - handler: () => { - if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= passiveCost) { - starterData.passiveAttr |= PassiveAttr.UNLOCKED | PassiveAttr.ENABLED; - if (!Overrides.FREE_CANDY_UPGRADE_OVERRIDE) { - starterData.candyCount -= passiveCost; - } - this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); - globalScene.gameData.saveSystem().then(success => { - if (!success) { - return globalScene.reset(true); - } - }); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); - this.setSpeciesDetails(this.species); - globalScene.playSound("se/buy"); - - return true; - } - return false; - }, - item: "candy", - itemArgs: starterColors[this.getStarterSpeciesId(this.species.speciesId)] - }); - } - - // Reduce cost option - const valueReduction = starterData.valueReduction; - if (valueReduction < valueReductionMax) { - const reductionCost = getValueReductionCandyCounts(speciesStarterCosts[this.getStarterSpeciesId(this.species.speciesId)])[valueReduction]; - options.push({ - label: `x${reductionCost} ${i18next.t("pokedexUiHandler:reduceCost")}`, - handler: () => { - if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= reductionCost) { - starterData.valueReduction++; - if (!Overrides.FREE_CANDY_UPGRADE_OVERRIDE) { - starterData.candyCount -= reductionCost; - } - this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); - globalScene.gameData.saveSystem().then(success => { - if (!success) { - return globalScene.reset(true); - } - }); - ui.setMode(Mode.POKEDEX_PAGE, "refresh"); - globalScene.playSound("se/buy"); - - return true; - } - return false; - }, - item: "candy", - itemArgs: starterColors[this.getStarterSpeciesId(this.species.speciesId)] - }); - } - - // Same species egg menu option. - const sameSpeciesEggCost = getSameSpeciesEggCandyCounts(speciesStarterCosts[this.getStarterSpeciesId(this.species.speciesId)]); + if (!(passiveAttr & PassiveAttr.UNLOCKED)) { + const passiveCost = getPassiveCandyCount(speciesStarterCosts[this.starterId]); options.push({ - label: `x${sameSpeciesEggCost} ${i18next.t("pokedexUiHandler:sameSpeciesEgg")}`, + label: `x${passiveCost} ${i18next.t("pokedexUiHandler:unlockPassive")} (${allAbilities[this.passive].name})`, handler: () => { - if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= sameSpeciesEggCost) { - if (globalScene.gameData.eggs.length >= 99 && !Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { - // Egg list full, show error message at the top of the screen and abort - this.showText(i18next.t("egg:tooManyEggs"), undefined, () => this.showText("", 0, () => this.tutorialActive = false), 2000, false, undefined, true); - return false; - } + if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= passiveCost) { + starterData.passiveAttr |= PassiveAttr.UNLOCKED | PassiveAttr.ENABLED; if (!Overrides.FREE_CANDY_UPGRADE_OVERRIDE) { - starterData.candyCount -= sameSpeciesEggCost; + starterData.candyCount -= passiveCost; } this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); + globalScene.gameData.saveSystem().then(success => { + if (!success) { + return globalScene.reset(true); + } + }); + this.setSpeciesDetails(this.species); + globalScene.playSound("se/buy"); + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); - const egg = new Egg({ scene: globalScene, species: this.species.speciesId, sourceType: EggSourceType.SAME_SPECIES_EGG }); - egg.addEggToGameData(); + return true; + } + return false; + }, + style: this.isPassiveAvailable() ? TextStyle.WINDOW : TextStyle.SHADOW_TEXT, + item: "candy", + itemArgs: this.isPassiveAvailable() ? starterColors[this.starterId] : [ "808080", "808080" ] + }); + } + // Reduce cost option + const valueReduction = starterData.valueReduction; + if (valueReduction < valueReductionMax) { + const reductionCost = getValueReductionCandyCounts(speciesStarterCosts[this.starterId])[valueReduction]; + options.push({ + label: `x${reductionCost} ${i18next.t("pokedexUiHandler:reduceCost")}`, + handler: () => { + if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= reductionCost) { + starterData.valueReduction++; + if (!Overrides.FREE_CANDY_UPGRADE_OVERRIDE) { + starterData.candyCount -= reductionCost; + } + this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); globalScene.gameData.saveSystem().then(success => { if (!success) { return globalScene.reset(true); @@ -1729,24 +1703,59 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } return false; }, + style: this.isValueReductionAvailable() ? TextStyle.WINDOW : TextStyle.SHADOW_TEXT, item: "candy", - itemArgs: starterColors[this.getStarterSpeciesId(this.species.speciesId)] + itemArgs: this.isValueReductionAvailable() ? starterColors[this.starterId] : [ "808080", "808080" ] }); - options.push({ - label: i18next.t("menu:cancel"), - handler: () => { + } + + // Same species egg menu option. + const sameSpeciesEggCost = getSameSpeciesEggCandyCounts(speciesStarterCosts[this.starterId]); + options.push({ + label: `x${sameSpeciesEggCost} ${i18next.t("pokedexUiHandler:sameSpeciesEgg")}`, + handler: () => { + if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= sameSpeciesEggCost) { + if (globalScene.gameData.eggs.length >= 99 && !Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { + // Egg list full, show error message at the top of the screen and abort + this.showText(i18next.t("egg:tooManyEggs"), undefined, () => this.showText("", 0, () => this.tutorialActive = false), 2000, false, undefined, true); + return false; + } + if (!Overrides.FREE_CANDY_UPGRADE_OVERRIDE) { + starterData.candyCount -= sameSpeciesEggCost; + } + this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); + + const egg = new Egg({ scene: globalScene, species: this.species.speciesId, sourceType: EggSourceType.SAME_SPECIES_EGG }); + egg.addEggToGameData(); + + globalScene.gameData.saveSystem().then(success => { + if (!success) { + return globalScene.reset(true); + } + }); ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + globalScene.playSound("se/buy"); + return true; } - }); - ui.setModeWithoutClear(Mode.OPTION_SELECT, { - options: options, - yOffset: 47 - }); - success = true; - } else { - error = true; - } + return false; + }, + style: this.isSameSpeciesEggAvailable() ? TextStyle.WINDOW : TextStyle.SHADOW_TEXT, + item: "candy", + itemArgs: this.isSameSpeciesEggAvailable() ? starterColors[this.starterId] : [ "808080", "808080" ] + }); + options.push({ + label: i18next.t("menu:cancel"), + handler: () => { + ui.setMode(Mode.POKEDEX_PAGE, "refresh"); + return true; + } + }); + ui.setModeWithoutClear(Mode.OPTION_SELECT, { + options: options, + yOffset: 47 + }); + success = true; } break; case Button.CYCLE_ABILITY: @@ -1877,9 +1886,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { if (this.isCaught()) { if (isFormCaught) { - if (!pokemonPrevolutions.hasOwnProperty(this.species.speciesId)) { - this.updateButtonIcon(SettingKeyboard.Button_Stats, gamepadType, this.candyUpgradeIconElement, this.candyUpgradeLabel); - } + this.updateButtonIcon(SettingKeyboard.Button_Stats, gamepadType, this.candyUpgradeIconElement, this.candyUpgradeLabel); if (this.canCycleShiny) { this.updateButtonIcon(SettingKeyboard.Button_Cycle_Shiny, gamepadType, this.shinyIconElement, this.shinyLabel); } @@ -1936,16 +1943,51 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } getFriendship(speciesId: number) { - let currentFriendship = globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].friendship; + let currentFriendship = globalScene.gameData.starterData[this.starterId].friendship; if (!currentFriendship || currentFriendship === undefined) { currentFriendship = 0; } - const friendshipCap = getStarterValueFriendshipCap(speciesStarterCosts[this.getStarterSpeciesId(speciesId)]); + const friendshipCap = getStarterValueFriendshipCap(speciesStarterCosts[this.starterId]); return { currentFriendship, friendshipCap }; } + /** + * Determines if a passive upgrade is available for the current species + * @returns true if the user has enough candies and a passive has not been unlocked already + */ + isPassiveAvailable(): boolean { + // Get this species ID's starter data + const starterData = globalScene.gameData.starterData[this.starterId]; + + return starterData.candyCount >= getPassiveCandyCount(speciesStarterCosts[this.starterId]) + && !(starterData.passiveAttr & PassiveAttr.UNLOCKED); + } + + /** + * Determines if a value reduction upgrade is available for the current species + * @returns true if the user has enough candies and all value reductions have not been unlocked already + */ + isValueReductionAvailable(): boolean { + // Get this species ID's starter data + const starterData = globalScene.gameData.starterData[this.starterId]; + + return starterData.candyCount >= getValueReductionCandyCounts(speciesStarterCosts[this.starterId])[starterData.valueReduction] + && starterData.valueReduction < valueReductionMax; + } + + /** + * Determines if an same species egg can be bought for the current species + * @returns true if the user has enough candies + */ + isSameSpeciesEggAvailable(): boolean { + // Get this species ID's starter data + const starterData = globalScene.gameData.starterData[this.starterId]; + + return starterData.candyCount >= getSameSpeciesEggCandyCounts(speciesStarterCosts[this.starterId]); + } + setSpecies() { const species = this.species; const starterAttributes : StarterAttributes | null = species ? { ...this.starterAttributes } : null; @@ -1967,88 +2009,10 @@ export default class PokedexPageUiHandler extends MessageUiHandler { if (species && (this.speciesStarterDexEntry?.seenAttr || this.isCaught())) { this.pokemonNumberText.setText(padInt(species.speciesId, 4)); - if (starterAttributes?.nickname) { - const name = decodeURIComponent(escape(atob(starterAttributes.nickname))); - this.pokemonNameText.setText(name); - } else { - this.pokemonNameText.setText(species.name); - } if (this.isCaught()) { - const colorScheme = starterColors[species.speciesId]; - - const luck = globalScene.gameData.getDexAttrLuck(this.isCaught()); - this.pokemonLuckText.setVisible(!!luck); - this.pokemonLuckText.setText(luck.toString()); - this.pokemonLuckText.setTint(getVariantTint(Math.min(luck - 1, 2) as Variant)); - this.pokemonLuckLabelText.setVisible(this.pokemonLuckText.visible); - - //Growth translate - let growthReadable = toReadableString(GrowthRate[species.growthRate]); - const growthAux = growthReadable.replace(" ", "_"); - if (i18next.exists("growth:" + growthAux)) { - growthReadable = i18next.t("growth:" + growthAux as any); - } - this.pokemonGrowthRateText.setText(growthReadable); - - this.pokemonGrowthRateText.setColor(getGrowthRateColor(species.growthRate)); - this.pokemonGrowthRateText.setShadowColor(getGrowthRateColor(species.growthRate, true)); - this.pokemonGrowthRateLabelText.setVisible(true); - this.pokemonUncaughtText.setVisible(false); - this.pokemonCaughtCountText.setText(`${this.speciesStarterDexEntry?.caughtCount}`); - if (species.speciesId === Species.MANAPHY || species.speciesId === Species.PHIONE) { - this.pokemonHatchedIcon.setFrame("manaphy"); - } else { - this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species)); - } - this.pokemonHatchedCountText.setText(`${this.speciesStarterDexEntry?.hatchedCount}`); const defaultDexAttr = this.getCurrentDexProps(species.speciesId); - const defaultProps = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); - const variant = defaultProps.variant; - const tint = getVariantTint(variant); - this.pokemonShinyIcon.setFrame(getVariantIcon(variant)); - this.pokemonShinyIcon.setTint(tint); - this.pokemonShinyIcon.setVisible(defaultProps.shiny); - this.pokemonCaughtHatchedContainer.setVisible(true); - this.pokemonFormText.setVisible(true); - - if (pokemonPrevolutions.hasOwnProperty(species.speciesId)) { - this.pokemonCaughtHatchedContainer.setY(16); - this.pokemonShinyIcon.setY(135); - this.pokemonShinyIcon.setFrame(getVariantIcon(variant)); - [ - this.pokemonCandyContainer, - this.pokemonHatchedIcon, - this.pokemonHatchedCountText - ].map(c => c.setVisible(false)); - this.pokemonFormText.setY(25); - } else { - this.pokemonCaughtHatchedContainer.setY(25); - this.pokemonShinyIcon.setY(117); - this.pokemonCandyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0]))); - this.pokemonCandyOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); - this.pokemonCandyCountText.setText(`x${globalScene.gameData.starterData[this.getStarterSpeciesId(species.speciesId)].candyCount}`); - this.pokemonCandyContainer.setVisible(true); - this.pokemonFormText.setY(42); - this.pokemonHatchedIcon.setVisible(true); - this.pokemonHatchedCountText.setVisible(true); - - const { currentFriendship, friendshipCap } = this.getFriendship(this.species.speciesId); - const candyCropY = 16 - (16 * (currentFriendship / friendshipCap)); - this.pokemonCandyDarknessOverlay.setCrop(0, 0, 16, candyCropY); - - this.pokemonCandyContainer.on("pointerover", () => { - globalScene.ui.showTooltip("", `${currentFriendship}/${friendshipCap}`, true); - this.activeTooltip = "CANDY"; - }); - this.pokemonCandyContainer.on("pointerout", () => { - globalScene.ui.hideTooltip(); - this.activeTooltip = undefined; - }); - - } - // Set default attributes if for some reason starterAttributes does not exist or attributes missing const props: StarterAttributes = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); if (starterAttributes?.variant && !isNaN(starterAttributes.variant)) { @@ -2065,12 +2029,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { female: props.female, variant: props.variant ?? 0, }); - - if (this.isFormCaught(this.species, props.form)) { - const speciesForm = getPokemonSpeciesForm(species.speciesId, props.form ?? 0); - this.setTypeIcons(speciesForm.type1, speciesForm.type2); - this.pokemonSprite.clearTint(); - } } else { this.pokemonGrowthRateText.setText(""); this.pokemonGrowthRateLabelText.setVisible(false); @@ -2092,7 +2050,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { formIndex: props.formIndex, female: props.female, variant: props.variant, - forSeen: true }); this.pokemonSprite.setTint(0x808080); } @@ -2123,7 +2080,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { setSpeciesDetails(species: PokemonSpecies, options: SpeciesDetails = {}, forceUpdate?: boolean): void { let { shiny, formIndex, female, variant } = options; - const forSeen: boolean = options.forSeen ?? false; const oldProps = species ? this.starterAttributes : null; // We will only update the sprite if there is a change to form, shiny/variant @@ -2194,12 +2150,12 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } const isFormCaught = this.isFormCaught(); + const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false; this.shinyOverlay.setVisible(shiny ?? false); // TODO: is false the correct default? this.pokemonNumberText.setColor(this.getTextColor(shiny ? TextStyle.SUMMARY_GOLD : TextStyle.SUMMARY, false)); this.pokemonNumberText.setShadowColor(this.getTextColor(shiny ? TextStyle.SUMMARY_GOLD : TextStyle.SUMMARY, true)); - const assetLoadCancelled = new BooleanHolder(false); this.assetLoadCancelled = assetLoadCancelled; @@ -2221,13 +2177,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.pokemonSprite.setVisible(!this.statsMode); } - const currentFilteredContainer = this.filteredStarterContainers.find(p => p.species.speciesId === species.speciesId); - if (currentFilteredContainer) { - const starterSprite = currentFilteredContainer.icon as Phaser.GameObjects.Sprite; - starterSprite.setTexture(species.getIconAtlasKey(formIndex, shiny, variant), species.getIconId(female!, formIndex, shiny, variant)); - currentFilteredContainer.checkIconId(female, formIndex, shiny, variant); - } - const isNonShinyCaught = !!(caughtAttr & DexAttr.NON_SHINY); const isShinyCaught = !!(caughtAttr & DexAttr.SHINY); @@ -2250,27 +2199,129 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.pokemonGenderText.setText(""); } - if (caughtAttr) { - if (isFormCaught) { - this.species.loadAssets(female!, formIndex, shiny, variant as Variant, true).then(() => { - const crier = (this.species.forms && this.species.forms.length > 0) ? this.species.forms[formIndex ?? this.formIndex] : this.species; - crier.cry(); - }); - - this.pokemonSprite.clearTint(); - } else { - this.pokemonSprite.setTint(0x000000); - } + // Setting the name + if (isFormCaught || isFormSeen) { + this.pokemonNameText.setText(species.name); + } else { + this.pokemonNameText.setText(species ? "???" : ""); } - if (caughtAttr || forSeen) { + // Setting tint of the sprite + if (isFormCaught) { + this.species.loadAssets(female!, formIndex, shiny, variant as Variant, true).then(() => { + const crier = (this.species.forms && this.species.forms.length > 0) ? this.species.forms[formIndex ?? this.formIndex] : this.species; + crier.cry(); + }); + this.pokemonSprite.clearTint(); + } else if (isFormSeen) { + this.pokemonSprite.setTint(0x808080); + } else { + this.pokemonSprite.setTint(0); + } + + // Setting luck text and sparks + if (isFormCaught) { + const luck = globalScene.gameData.getDexAttrLuck(this.isCaught()); + this.pokemonLuckText.setVisible(!!luck); + this.pokemonLuckText.setText(luck.toString()); + this.pokemonLuckText.setTint(getVariantTint(Math.min(luck - 1, 2) as Variant)); + this.pokemonLuckLabelText.setVisible(this.pokemonLuckText.visible); + } else { + this.pokemonLuckText.setVisible(false); + this.pokemonLuckLabelText.setVisible(false); + } + + // Setting growth rate text + if (isFormCaught) { + let growthReadable = toReadableString(GrowthRate[species.growthRate]); + const growthAux = growthReadable.replace(" ", "_"); + if (i18next.exists("growth:" + growthAux)) { + growthReadable = i18next.t("growth:" + growthAux as any); + } + this.pokemonGrowthRateText.setText(growthReadable); + + this.pokemonGrowthRateText.setColor(getGrowthRateColor(species.growthRate)); + this.pokemonGrowthRateText.setShadowColor(getGrowthRateColor(species.growthRate, true)); + this.pokemonGrowthRateLabelText.setVisible(true); + } else { + this.pokemonGrowthRateText.setText(""); + this.pokemonGrowthRateLabelText.setVisible(false); + } + + // Caught and hatched + if (isFormCaught) { + const colorScheme = starterColors[this.starterId]; + + this.pokemonUncaughtText.setVisible(false); + this.pokemonCaughtCountText.setText(`${this.speciesStarterDexEntry?.caughtCount}`); + if (species.speciesId === Species.MANAPHY || species.speciesId === Species.PHIONE) { + this.pokemonHatchedIcon.setFrame("manaphy"); + } else { + this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species)); + } + this.pokemonHatchedCountText.setText(`${this.speciesStarterDexEntry?.hatchedCount}`); + + const defaultDexAttr = this.getCurrentDexProps(species.speciesId); + const defaultProps = globalScene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + const variant = defaultProps.variant; + const tint = getVariantTint(variant); + this.pokemonShinyIcon.setFrame(getVariantIcon(variant)); + this.pokemonShinyIcon.setTint(tint); + this.pokemonShinyIcon.setVisible(defaultProps.shiny); + this.pokemonCaughtHatchedContainer.setVisible(true); + + this.pokemonCaughtHatchedContainer.setY(25); + this.pokemonCandyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0]))); + this.pokemonCandyOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); + this.pokemonCandyCountText.setText(`x${globalScene.gameData.starterData[this.starterId].candyCount}`); + this.pokemonCandyContainer.setVisible(true); + + if (pokemonPrevolutions.hasOwnProperty(species.speciesId)) { + this.pokemonShinyIcon.setY(135); + this.pokemonShinyIcon.setFrame(getVariantIcon(variant)); + this.pokemonHatchedIcon.setVisible(false); + this.pokemonHatchedCountText.setVisible(false); + this.pokemonFormText.setY(36); + } else { + this.pokemonShinyIcon.setY(117); + this.pokemonHatchedIcon.setVisible(true); + this.pokemonHatchedCountText.setVisible(true); + this.pokemonFormText.setY(42); + + const { currentFriendship, friendshipCap } = this.getFriendship(this.species.speciesId); + const candyCropY = 16 - (16 * (currentFriendship / friendshipCap)); + this.pokemonCandyDarknessOverlay.setCrop(0, 0, 16, candyCropY); + + this.pokemonCandyContainer.on("pointerover", () => { + globalScene.ui.showTooltip("", `${currentFriendship}/${friendshipCap}`, true); + this.activeTooltip = "CANDY"; + }); + this.pokemonCandyContainer.on("pointerout", () => { + globalScene.ui.hideTooltip(); + this.activeTooltip = undefined; + }); + + } + } else { + this.pokemonUncaughtText.setVisible(true); + this.pokemonCaughtHatchedContainer.setVisible(false); + this.pokemonCandyContainer.setVisible(false); + this.pokemonShinyIcon.setVisible(false); + } + + // Setting type icons and form text + if (isFormCaught || isFormSeen) { const speciesForm = getPokemonSpeciesForm(species.speciesId, formIndex!); // TODO: is the bang correct? this.setTypeIcons(speciesForm.type1, speciesForm.type2); this.pokemonFormText.setText(this.getFormString((speciesForm as PokemonForm).formKey, species)); - + this.pokemonFormText.setVisible(true); + if (!isFormCaught) { + this.pokemonFormText.setY(18); + } } else { this.setTypeIcons(null, null); this.pokemonFormText.setText(""); + this.pokemonFormText.setVisible(false); } } else { this.shinyOverlay.setVisible(false); diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 410bb53906a..4c920a094c6 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -11,7 +11,7 @@ import { allSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { catchableSpecies } from "#app/data/balance/biomes"; import { Type } from "#enums/type"; -import type { DexAttrProps, DexEntry, StarterMoveset, StarterAttributes, StarterPreferences } from "#app/system/game-data"; +import type { DexAttrProps, DexEntry, StarterAttributes, StarterPreferences } from "#app/system/game-data"; import { AbilityAttr, DexAttr, StarterPrefs } from "#app/system/game-data"; import MessageUiHandler from "#app/ui/message-ui-handler"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; @@ -19,7 +19,6 @@ import { TextStyle, addTextObject } from "#app/ui/text"; import { Mode } from "#app/ui/ui"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { Passive as PassiveAttr } from "#enums/passive"; -import type { Moves } from "#enums/moves"; import type { Species } from "#enums/species"; import { Button } from "#enums/buttons"; import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#app/ui/dropdown"; @@ -42,7 +41,6 @@ import { pokemonStarters } from "#app/data/balance/pokemon-evolutions"; import { Biome } from "#enums/biome"; import { globalScene } from "#app/global-scene"; - interface LanguageSetting { starterInfoTextSize: string, instructionTextSize: string, @@ -139,7 +137,6 @@ interface SpeciesDetails { variant?: Variant, abilityIndex?: number, natureIndex?: number, - forSeen?: boolean, // default = false } export default class PokedexUiHandler extends MessageUiHandler { @@ -161,7 +158,6 @@ export default class PokedexUiHandler extends MessageUiHandler { private filterMode: boolean; private filterBarCursor: number = 0; - private starterMoveset: StarterMoveset | null; private scrollCursor: number; private allSpecies: PokemonSpecies[] = []; @@ -169,7 +165,6 @@ export default class PokedexUiHandler extends MessageUiHandler { private speciesLoaded: Map = new Map(); private pokerusSpecies: PokemonSpecies[] = []; private speciesStarterDexEntry: DexEntry | null; - private speciesStarterMoves: Moves[]; private assetLoadCancelled: BooleanHolder | null; public cursorObj: Phaser.GameObjects.Image; @@ -206,6 +201,20 @@ export default class PokedexUiHandler extends MessageUiHandler { private toggleDecorationsIconElement: Phaser.GameObjects.Sprite; private toggleDecorationsLabel: Phaser.GameObjects.Text; + private formTrayContainer: Phaser.GameObjects.Container; + private trayBg: Phaser.GameObjects.NineSlice; + private trayForms: PokemonForm[]; + private trayContainers: PokedexMonContainer[] = []; + private trayNumIcons: number; + private trayRows: number; + private trayColumns: number; + private trayCursorObj: Phaser.GameObjects.Image; + private trayCursor: number = 0; + private showingTray: boolean = false; + private showFormTrayIconElement: Phaser.GameObjects.Sprite; + private showFormTrayLabel: Phaser.GameObjects.Text; + private canShowFormTray: boolean; + constructor() { super(Mode.POKEDEX); } @@ -425,7 +434,6 @@ export default class PokedexUiHandler extends MessageUiHandler { this.cursorObj = globalScene.add.image(0, 0, "select_cursor"); this.cursorObj.setOrigin(0, 0); - starterBoxContainer.add(this.cursorObj); for (const species of allSpecies) { @@ -438,6 +446,20 @@ export default class PokedexUiHandler extends MessageUiHandler { starterBoxContainer.add(pokemonContainer); } + // Tray to display forms + this.formTrayContainer = globalScene.add.container(0, 0); + + this.trayBg = addWindow(0, 0, 0, 0); + this.trayBg.setOrigin(0, 0); + this.formTrayContainer.add(this.trayBg); + + this.trayCursorObj = globalScene.add.image(0, 0, "select_cursor"); + this.trayCursorObj.setOrigin(0, 0); + this.formTrayContainer.add(this.trayCursorObj); + starterBoxContainer.add(this.formTrayContainer); + starterBoxContainer.bringToTop(this.formTrayContainer); + this.formTrayContainer.setVisible(false); + this.starterSelectContainer.add(starterBoxContainer); this.pokemonSprite = globalScene.add.sprite(96, 143, "pkmn__sub"); @@ -449,7 +471,7 @@ export default class PokedexUiHandler extends MessageUiHandler { this.type1Icon.setOrigin(0, 0); this.starterSelectContainer.add(this.type1Icon); - this.type2Icon = globalScene.add.sprite(10, 166, getLocalizedSpriteKey("types")); + this.type2Icon = globalScene.add.sprite(28, 158, getLocalizedSpriteKey("types")); this.type2Icon.setScale(0.5); this.type2Icon.setOrigin(0, 0); this.starterSelectContainer.add(this.type2Icon); @@ -488,6 +510,17 @@ export default class PokedexUiHandler extends MessageUiHandler { this.starterSelectContainer.add(this.toggleDecorationsIconElement); this.starterSelectContainer.add(this.toggleDecorationsLabel); + this.showFormTrayIconElement = new Phaser.GameObjects.Sprite(globalScene, 6, 168, "keyboard", "F.png"); + this.showFormTrayIconElement.setName("sprite-showFormTray-icon-element"); + this.showFormTrayIconElement.setScale(0.675); + this.showFormTrayIconElement.setOrigin(0.0, 0.0); + this.showFormTrayLabel = addTextObject(16, 168, i18next.t("pokedexUiHandler:showForms"), TextStyle.PARTY, { fontSize: instructionTextSize }); + this.showFormTrayLabel.setName("text-showFormTray-label"); + this.showFormTrayIconElement.setVisible(false); + this.showFormTrayLabel.setVisible(false); + this.starterSelectContainer.add(this.showFormTrayIconElement); + this.starterSelectContainer.add(this.showFormTrayLabel); + this.message = addTextObject(8, 8, "", TextStyle.WINDOW, { maxLines: 2 }); this.message.setOrigin(0, 0); this.starterSelectMessageBoxContainer.add(this.message); @@ -527,7 +560,7 @@ export default class PokedexUiHandler extends MessageUiHandler { this.starterPreferences[species.speciesId] = this.initStarterPrefs(species); - if (dexEntry.caughtAttr) { + if (dexEntry.caughtAttr || globalScene.dexForDevs) { icon.clearTint(); } else if (dexEntry.seenAttr) { icon.setTint(0x808080); @@ -860,32 +893,42 @@ export default class PokedexUiHandler extends MessageUiHandler { } else if (this.filterTextMode && !(this.filterText.getValue(this.filterTextCursor) === this.filterText.defaultText)) { this.filterText.resetSelection(this.filterTextCursor); success = true; + } else if (this.showingTray) { + success = this.closeFormTray(); } else { this.tryExit(); success = true; } } else if (button === Button.STATS) { - if (!this.filterMode) { + if (!this.filterMode && !this.showingTray) { this.cursorObj.setVisible(false); this.setSpecies(null); this.filterText.cursorObj.setVisible(false); this.filterTextMode = false; this.filterBarCursor = 0; this.setFilterMode(true); + } else { + error = true; } } else if (button === Button.V) { - if (!this.filterTextMode) { + if (!this.filterTextMode && !this.showingTray) { this.cursorObj.setVisible(false); this.setSpecies(null); this.filterBar.cursorObj.setVisible(false); this.filterMode = false; this.filterTextCursor = 0; this.setFilterTextMode(true); + } else { + error = true; } } else if (button === Button.CYCLE_SHINY) { - this.showDecorations = !this.showDecorations; - this.updateScroll(); - success = true; + if (!this.showingTray) { + this.showDecorations = !this.showDecorations; + this.updateScroll(); + success = true; + } else { + error = true; + } } else if (this.filterMode) { switch (button) { case Button.LEFT: @@ -982,8 +1025,55 @@ export default class PokedexUiHandler extends MessageUiHandler { success = true; break; } + } 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 }); + success = true; + } else { + const numberOfForms = this.trayContainers.length; + const numOfRows = Math.ceil(numberOfForms / maxColumns); + const currentRow = Math.floor(this.trayCursor / maxColumns); + switch (button) { + case Button.UP: + if (currentRow > 0) { + success = this.setTrayCursor(this.trayCursor - 9); + } else { + const targetCol = this.trayCursor; + if (numberOfForms % 9 > targetCol) { + success = this.setTrayCursor(numberOfForms - (numberOfForms) % 9 + targetCol); + } else { + success = this.setTrayCursor(Math.max(numberOfForms - (numberOfForms) % 9 + targetCol - 9, 0)); + } + } + break; + case Button.DOWN: + if (currentRow < numOfRows - 1) { + success = this.setTrayCursor(this.trayCursor + 9); + } else { + success = this.setTrayCursor(this.trayCursor % 9); + } + break; + case Button.LEFT: + if (this.trayCursor % 9 !== 0) { + success = this.setTrayCursor(this.trayCursor - 1); + } else { + success = this.setTrayCursor(currentRow < numOfRows - 1 ? (currentRow + 1) * maxColumns - 1 : numberOfForms - 1); + } + break; + case Button.RIGHT: + if (this.trayCursor % 9 < (currentRow < numOfRows - 1 ? 8 : (numberOfForms - 1) % 9)) { + success = this.setTrayCursor(this.trayCursor + 1); + } else { + success = this.setTrayCursor(currentRow * 9); + } + break; + case Button.CYCLE_FORM: + success = this.closeFormTray(); + break; + } + } } else { - if (button === Button.ACTION) { ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, 0); success = true; @@ -1042,6 +1132,12 @@ export default class PokedexUiHandler extends MessageUiHandler { success = true; } break; + case Button.CYCLE_FORM: + const species = this.filteredPokemonContainers[this.cursor].species; + if (this.canShowFormTray) { + success = this.openFormTray(species); + } + break; } } } @@ -1068,6 +1164,9 @@ export default class PokedexUiHandler extends MessageUiHandler { case SettingKeyboard.Button_Cycle_Variant: iconPath = "V.png"; break; + case SettingKeyboard.Button_Cycle_Form: + iconPath = "F.png"; + break; case SettingKeyboard.Button_Stats: iconPath = "C.png"; break; @@ -1145,13 +1244,15 @@ export default class PokedexUiHandler extends MessageUiHandler { this.validPokemonContainers.forEach(container => { container.setVisible(false); - container.cost = globalScene.gameData.getSpeciesStarterValue(this.getStarterSpeciesId(container.species.speciesId)); + const starterId = this.getStarterSpeciesId(container.species.speciesId); + + container.cost = globalScene.gameData.getSpeciesStarterValue(starterId); // First, ensure you have the caught attributes for the species else default to bigint 0 // TODO: This might be removed depending on how accessible we want the pokedex function to be const caughtAttr = globalScene.gameData.dexData[container.species.speciesId]?.caughtAttr || BigInt(0); - const starterData = globalScene.gameData.starterData[this.getStarterSpeciesId(container.species.speciesId)]; - const isStarterProgressable = speciesEggMoves.hasOwnProperty(this.getStarterSpeciesId(container.species.speciesId)); + const starterData = globalScene.gameData.starterData[starterId]; + const isStarterProgressable = speciesEggMoves.hasOwnProperty(starterId); // Name filter const selectedName = this.filterText.getValue(FilterTextRow.NAME); @@ -1162,8 +1263,8 @@ export default class PokedexUiHandler extends MessageUiHandler { // On the other hand, in some cases it is possible to switch between different forms and combine (Deoxys) const levelMoves = pokemonSpeciesLevelMoves[container.species.speciesId].map(m => allMoves[m[1]].name); // This always gets egg moves from the starter - const eggMoves = speciesEggMoves[this.getStarterSpeciesId(container.species.speciesId)]?.map(m => allMoves[m].name) ?? []; - const tmMoves = speciesTmMoves[this.getStarterSpeciesId(container.species.speciesId)]?.map(m => allMoves[Array.isArray(m) ? m[1] : m].name) ?? []; + const eggMoves = speciesEggMoves[starterId]?.map(m => allMoves[m].name) ?? []; + const tmMoves = speciesTmMoves[starterId]?.map(m => allMoves[Array.isArray(m) ? m[1] : m].name) ?? []; const selectedMove1 = this.filterText.getValue(FilterTextRow.MOVE_1); const selectedMove2 = this.filterText.getValue(FilterTextRow.MOVE_2); @@ -1185,27 +1286,40 @@ export default class PokedexUiHandler extends MessageUiHandler { container.tmMove2Icon.setVisible(false); if (fitsEggMove1 && !fitsLevelMove1) { container.eggMove1Icon.setVisible(true); + const em1 = eggMoves.findIndex(name => name === selectedMove1); + if ((starterData[starterId].eggMoves & (1 << em1)) === 0) { + container.eggMove1Icon.setTint(0x808080); + } else { + container.eggMove1Icon.clearTint(); + } } else if (fitsTmMove1 && !fitsLevelMove1) { container.tmMove1Icon.setVisible(true); } if (fitsEggMove2 && !fitsLevelMove2) { container.eggMove2Icon.setVisible(true); + const em2 = eggMoves.findIndex(name => name === selectedMove2); + if ((starterData[starterId].eggMoves & (1 << em2)) === 0) { + container.eggMove2Icon.setTint(0x808080); + } else { + container.eggMove2Icon.clearTint(); + } } else if (fitsTmMove2 && !fitsLevelMove2) { container.tmMove2Icon.setVisible(true); } // Ability filter const abilities = [ container.species.ability1, container.species.ability2, container.species.abilityHidden ].map(a => allAbilities[a].name); - const passives = starterPassiveAbilities[this.getStarterSpeciesId(container.species.speciesId)] ?? {} as PassiveAbilities; + const passives = starterPassiveAbilities[starterId] ?? {} as PassiveAbilities; const selectedAbility1 = this.filterText.getValue(FilterTextRow.ABILITY_1); - const fitsFormAbility = container.species.forms.some(form => allAbilities[form.ability1].name === selectedAbility1); - const fitsAbility1 = abilities.includes(selectedAbility1) || fitsFormAbility || selectedAbility1 === this.filterText.defaultText; - const fitsPassive1 = Object.values(passives).some(p => p.name === selectedAbility1); + const fitsFormAbility1 = container.species.forms.some(form => [ form.ability1, form.ability2, form.abilityHidden ].map(a => allAbilities[a].name).includes(selectedAbility1)); + const fitsAbility1 = abilities.includes(selectedAbility1) || fitsFormAbility1 || selectedAbility1 === this.filterText.defaultText; + const fitsPassive1 = Object.values(passives).some(p => allAbilities[p].name === selectedAbility1); const selectedAbility2 = this.filterText.getValue(FilterTextRow.ABILITY_2); - const fitsAbility2 = abilities.includes(selectedAbility2) || fitsFormAbility || selectedAbility2 === this.filterText.defaultText; - const fitsPassive2 = Object.values(passives).some(p => p.name === selectedAbility2); + const fitsFormAbility2 = container.species.forms.some(form => [ form.ability1, form.ability2, form.abilityHidden ].map(a => allAbilities[a].name).includes(selectedAbility2)); + const fitsAbility2 = abilities.includes(selectedAbility2) || fitsFormAbility2 || selectedAbility2 === this.filterText.defaultText; + const fitsPassive2 = Object.values(passives).some(p => allAbilities[p].name === selectedAbility2); // If both fields have been set to the same ability, show both ability and passive const fitsAbilities = (fitsAbility1 && (fitsPassive2 || selectedAbility2 === this.filterText.defaultText)) || @@ -1213,11 +1327,26 @@ export default class PokedexUiHandler extends MessageUiHandler { container.passive1Icon.setVisible(false); container.passive2Icon.setVisible(false); - if (fitsPassive1) { - container.passive1Icon.setVisible(true); - } - if (fitsPassive2) { - container.passive2Icon.setVisible(true); + if (fitsPassive1 || fitsPassive2) { + if (fitsPassive1) { + if (starterData.passiveAttr > 0) { + container.passive1Icon.clearTint(); + container.passive1OverlayIcon.clearTint(); + } else { + container.passive1Icon.setTint(0x808080); + container.passive1OverlayIcon.setTint(0x808080); + } + container.passive1Icon.setVisible(true); + } else { + if (starterData.passiveAttr > 0) { + container.passive2Icon.clearTint(); + container.passive2OverlayIcon.clearTint(); + } else { + container.passive2Icon.setTint(0x808080); + container.passive2OverlayIcon.setTint(0x808080); + } + container.passive2Icon.setVisible(true); + } } // Gen filter @@ -1236,7 +1365,7 @@ export default class PokedexUiHandler extends MessageUiHandler { // We get biomes for both the mon and its starters to ensure that evolutions get the correct filters. // TODO: We might also need to do it the other way around. - const biomes = catchableSpecies[container.species.speciesId].concat(catchableSpecies[this.getStarterSpeciesId(container.species.speciesId)]).map(b => Biome[b.biome]); + const biomes = catchableSpecies[container.species.speciesId].concat(catchableSpecies[starterId]).map(b => Biome[b.biome]); if (biomes.length === 0) { biomes.push("Uncatchable"); } @@ -1530,6 +1659,8 @@ export default class PokedexUiHandler extends MessageUiHandler { this.cursorObj.setVisible(!filterMode); this.filterBar.cursorObj.setVisible(filterMode); this.pokemonSprite.setVisible(false); + this.showFormTrayIconElement.setVisible(false); + this.showFormTrayLabel.setVisible(false); if (filterMode !== this.filterMode) { this.filterMode = filterMode; @@ -1546,6 +1677,8 @@ export default class PokedexUiHandler extends MessageUiHandler { this.cursorObj.setVisible(!filterTextMode); this.filterText.cursorObj.setVisible(filterTextMode); this.pokemonSprite.setVisible(false); + this.showFormTrayIconElement.setVisible(false); + this.showFormTrayLabel.setVisible(false); if (filterTextMode !== this.filterTextMode) { this.filterTextMode = filterTextMode; @@ -1558,6 +1691,101 @@ export default class PokedexUiHandler extends MessageUiHandler { return false; } + openFormTray(species: PokemonSpecies): boolean { + + this.trayForms = species.forms; + + this.trayNumIcons = this.trayForms.length; + this.trayRows = Math.floor(this.trayNumIcons / 9) + (this.trayNumIcons % 9 === 0 ? 0 : 1); + this.trayColumns = Math.min(this.trayNumIcons, 9); + + const maxColumns = 9; + const onScreenFirstIndex = this.scrollCursor * maxColumns; + const boxCursor = this.cursor - onScreenFirstIndex; + const boxCursorY = Math.floor(boxCursor / maxColumns); + const boxCursorX = boxCursor - boxCursorY * 9; + const spaceBelow = 9 - 1 - boxCursorY; + const spaceRight = 9 - boxCursorX; + const boxPos = calcStarterPosition(this.cursor, this.scrollCursor); + const goUp = this.trayRows <= spaceBelow - 1 ? 0 : 1; + const goLeft = this.trayColumns <= spaceRight ? 0 : 1; + + this.trayBg.setSize(13 + this.trayColumns * 17, 8 + this.trayRows * 18); + this.formTrayContainer.setX( + (goLeft ? boxPos.x - 18 * (this.trayColumns - spaceRight) : boxPos.x) - 3 + ); + this.formTrayContainer.setY( + goUp ? boxPos.y - this.trayBg.height : boxPos.y + 17 + ); + + const dexEntry = globalScene.gameData.dexData[species.speciesId]; + const dexAttr = this.getCurrentDexProps(species.speciesId); + const props = this.getSanitizedProps(globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, dexAttr)); + + this.trayContainers = []; + this.trayForms.map((f, index) => { + const isFormCaught = dexEntry ? (dexEntry.caughtAttr & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n : false; + const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n : false; + const formContainer = new PokedexMonContainer(species, { formIndex: f.formIndex, female: props.female, shiny: props.shiny, variant: props.variant }); + this.iconAnimHandler.addOrUpdate(formContainer.icon, PokemonIconAnimMode.NONE); + // Setting tint, for all saves some caught forms may only show up as seen + if (isFormCaught || globalScene.dexForDevs) { + formContainer.icon.clearTint(); + } else if (isFormSeen) { + formContainer.icon.setTint(0x808080); + } + formContainer.setPosition(5 + (index % 9) * 18, 4 + Math.floor(index / 9) * 17); + this.formTrayContainer.add(formContainer); + this.trayContainers.push(formContainer); + }); + + this.showingTray = true; + + this.setTrayCursor(0); + + this.formTrayContainer.setVisible(true); + + this.showFormTrayIconElement.setVisible(false); + this.showFormTrayLabel.setVisible(false); + + return true; + } + + closeFormTray(): boolean { + + this.trayContainers.forEach(obj => { + this.formTrayContainer.remove(obj, true); // Removes from container and destroys it + }); + + this.trayContainers = []; + this.formTrayContainer.setVisible(false); + this.showingTray = false; + + this.setSpeciesDetails(this.lastSpecies); + return true; + } + + setTrayCursor(cursor: number): boolean { + if (!this.showingTray) { + return false; + } + + cursor = Phaser.Math.Clamp(this.trayContainers.length - 1, cursor, 0); + const changed = this.trayCursor !== cursor; + if (changed) { + this.trayCursor = cursor; + } + + this.trayCursorObj.setPosition(5 + (cursor % 9) * 18, 4 + Math.floor(cursor / 9) * 17); + + const species = this.lastSpecies; + const formIndex = this.trayForms[cursor].formIndex; + + this.setSpeciesDetails(species, { formIndex: formIndex }); + + return changed; + } + getFriendship(speciesId: number) { let currentFriendship = globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].friendship; if (!currentFriendship || currentFriendship === undefined) { @@ -1592,13 +1820,13 @@ export default class PokedexUiHandler extends MessageUiHandler { this.lastSpecies = species!; // TODO: is this bang correct? - if (species && (this.speciesStarterDexEntry?.seenAttr || this.speciesStarterDexEntry?.caughtAttr)) { + if (species && (this.speciesStarterDexEntry?.seenAttr || this.speciesStarterDexEntry?.caughtAttr || globalScene.dexForDevs)) { this.pokemonNumberText.setText(i18next.t("pokedexUiHandler:pokemonNumber") + padInt(species.speciesId, 4)); this.pokemonNameText.setText(species.name); - if (this.speciesStarterDexEntry?.caughtAttr) { + if (this.speciesStarterDexEntry?.caughtAttr || globalScene.dexForDevs) { // Pause the animation when the species is selected const speciesIndex = this.allSpecies.indexOf(species); @@ -1627,9 +1855,7 @@ export default class PokedexUiHandler extends MessageUiHandler { this.type1Icon.setVisible(true); this.type2Icon.setVisible(true); - this.setSpeciesDetails(species, { - forSeen: true - }); + this.setSpeciesDetails(species); this.pokemonSprite.setTint(0x808080); } } else { @@ -1646,7 +1872,6 @@ export default class PokedexUiHandler extends MessageUiHandler { setSpeciesDetails(species: PokemonSpecies, options: SpeciesDetails = {}): void { let { shiny, formIndex, female, variant } = options; - const forSeen: boolean = options.forSeen ?? false; // We will only update the sprite if there is a change to form, shiny/variant // or gender for species with gender sprite differences @@ -1667,34 +1892,33 @@ export default class PokedexUiHandler extends MessageUiHandler { this.assetLoadCancelled = null; } - this.starterMoveset = null; - this.speciesStarterMoves = []; - if (species) { const dexEntry = globalScene.gameData.dexData[species.speciesId]; if (!dexEntry.caughtAttr) { const props = this.getSanitizedProps(globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId))); - if (shiny === undefined || shiny !== props.shiny) { + if (shiny === undefined) { shiny = props.shiny; } - if (formIndex === undefined || formIndex !== props.formIndex) { + if (formIndex === undefined) { formIndex = props.formIndex; } - if (female === undefined || female !== props.female) { + if (female === undefined) { female = props.female; } - if (variant === undefined || variant !== props.variant) { + if (variant === undefined) { variant = props.variant; } } + const isFormCaught = dexEntry ? (dexEntry.caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false; + const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false; + const assetLoadCancelled = new BooleanHolder(false); this.assetLoadCancelled = assetLoadCancelled; if (shouldUpdateSprite) { - species.loadAssets(female!, formIndex, shiny, variant, true).then(() => { // TODO: is this bang correct? if (assetLoadCancelled.value) { return; @@ -1711,21 +1935,37 @@ export default class PokedexUiHandler extends MessageUiHandler { this.pokemonSprite.setVisible(!(this.filterMode || this.filterTextMode)); } - if (dexEntry.caughtAttr || forSeen) { + if (isFormCaught || globalScene.dexForDevs) { + this.pokemonSprite.clearTint(); + } else if (isFormSeen) { + this.pokemonSprite.setTint(0x808080); + } else { + this.pokemonSprite.setTint(0); + } + if (isFormCaught || isFormSeen || globalScene.dexForDevs) { const speciesForm = getPokemonSpeciesForm(species.speciesId, 0); // TODO: always selecting the first form - this.setTypeIcons(speciesForm.type1, speciesForm.type2); } else { this.setTypeIcons(null, null); } + + if (species?.forms?.length > 1) { + if (!this.showingTray) { + this.showFormTrayIconElement.setVisible(true); + this.showFormTrayLabel.setVisible(true); + } + this.canShowFormTray = true; + } else { + this.showFormTrayIconElement.setVisible(false); + this.showFormTrayLabel.setVisible(false); + this.canShowFormTray = false; + } + } else { this.setTypeIcons(null, null); } - if (!this.starterMoveset) { - this.starterMoveset = this.speciesStarterMoves.slice(0, 4) as StarterMoveset; - } } setTypeIcons(type1: Type | null, type2: Type | null): void { @@ -1784,7 +2024,6 @@ export default class PokedexUiHandler extends MessageUiHandler { ui.showText(i18next.t("pokedexUiHandler:confirmExit"), null, () => { ui.setModeWithoutClear(Mode.CONFIRM, () => { ui.setMode(Mode.POKEDEX, "refresh"); - globalScene.clearPhaseQueue(); this.clearText(); this.clear(); ui.revertMode(); diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 20ca2cc88da..5476f38cc6a 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1981,8 +1981,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { female: starterAttributes.female }; ui.setOverlayMode(Mode.POKEDEX_PAGE, this.lastSpecies, starterAttributes.form, attributes); - return true; }); + return true; } }); options.push({ From 702a6ba482b5b996c601afb2829d86823f79a986 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 11 Feb 2025 03:24:48 -0800 Subject: [PATCH 04/23] [i18n] Update locales submodule (#5298) --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index 5f6fa82c17d..bfcd7f91c39 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 5f6fa82c17d5981eaec15f105880ac2b4c99cc8d +Subproject commit bfcd7f91c39630f155839872c8f66fd0a89e12ac From 5296966f70002f65b550fbe355a456fadd04006b Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Tue, 11 Feb 2025 05:25:36 -0600 Subject: [PATCH 05/23] [Ability] [Move] Implement Magic Bounce and Magic Coat (#5225) * Add unit tests for magic bounce * Add reflectable tag and apply to moves * Add BattlerTagType for Magic Coat * Add more magic bounce tests * Add magic bounce test for sticky web source * Mostly working magic bounce and magic coat * Fix missing negation on mayBounce check * Move onto the next target after bouncing * Fix magic bounce accuracy check test * Finish magic bounce impl * Make spikes use leftmost magic bounce target * Add magic coat tests * Add MagicCoatTag to battler-tags.ts * Add final set of tests for Magic Coat / Bounce * Fix semi invulnerbale check in hitCheck * Fix magic bounce semi-invulnerable interaction This was based on smogon's incorrect handling of this situation * Magic bounce should not bounce anything during semi-invulnerable state * Activate mirror armor interaction test Also update i18 locales key to `magicCoatActivated` --- src/battle-scene.ts | 32 ++- src/data/ability.ts | 12 +- src/data/battler-tags.ts | 20 ++ src/data/move.ts | 279 +++++++++++++------ src/enums/battler-tag-type.ts | 1 + src/phases/move-effect-phase.ts | 141 ++++++++-- src/phases/move-phase.ts | 14 +- src/test/abilities/magic_bounce.test.ts | 351 ++++++++++++++++++++++++ src/test/moves/magic_coat.test.ts | 286 +++++++++++++++++++ 9 files changed, 1005 insertions(+), 131 deletions(-) create mode 100644 src/test/abilities/magic_bounce.test.ts create mode 100644 src/test/moves/magic_coat.test.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 7aa0369877b..3f285c274af 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -2353,14 +2353,14 @@ export default class BattleScene extends SceneBase { } /** - * Adds Phase to the end of phaseQueuePrepend, or at phaseQueuePrependSpliceIndex - * @param phase {@linkcode Phase} the phase to add + * Adds Phase(s) to the end of phaseQueuePrepend, or at phaseQueuePrependSpliceIndex + * @param phases {@linkcode Phase} the phase(s) to add */ - unshiftPhase(phase: Phase): void { + unshiftPhase(...phases: Phase[]): void { if (this.phaseQueuePrependSpliceIndex === -1) { - this.phaseQueuePrepend.push(phase); + this.phaseQueuePrepend.push(...phases); } else { - this.phaseQueuePrepend.splice(this.phaseQueuePrependSpliceIndex, 0, phase); + this.phaseQueuePrepend.splice(this.phaseQueuePrependSpliceIndex, 0, ...phases); } } @@ -2498,32 +2498,38 @@ export default class BattleScene extends SceneBase { * @param targetPhase {@linkcode Phase} the type of phase to search for in phaseQueue * @returns boolean if a targetPhase was found and added */ - prependToPhase(phase: Phase, targetPhase: Constructor): boolean { + prependToPhase(phase: Phase | Phase [], targetPhase: Constructor): boolean { + if (!Array.isArray(phase)) { + phase = [ phase ]; + } const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof targetPhase); if (targetIndex !== -1) { - this.phaseQueue.splice(targetIndex, 0, phase); + this.phaseQueue.splice(targetIndex, 0, ...phase); return true; } else { - this.unshiftPhase(phase); + this.unshiftPhase(...phase); return false; } } /** - * Tries to add the input phase to index after target phase in the {@linkcode phaseQueue}, else simply calls {@linkcode unshiftPhase()} - * @param phase {@linkcode Phase} the phase to be added + * Tries to add the input phase(s) to index after target phase in the {@linkcode phaseQueue}, else simply calls {@linkcode unshiftPhase()} + * @param phase {@linkcode Phase} the phase(s) to be added * @param targetPhase {@linkcode Phase} the type of phase to search for in {@linkcode phaseQueue} * @returns `true` if a `targetPhase` was found to append to */ - appendToPhase(phase: Phase, targetPhase: Constructor): boolean { + appendToPhase(phase: Phase | Phase[], targetPhase: Constructor): boolean { + if (!Array.isArray(phase)) { + phase = [ phase ]; + } const targetIndex = this.phaseQueue.findIndex(ph => ph instanceof targetPhase); if (targetIndex !== -1 && this.phaseQueue.length > targetIndex) { - this.phaseQueue.splice(targetIndex + 1, 0, phase); + this.phaseQueue.splice(targetIndex + 1, 0, ...phase); return true; } else { - this.unshiftPhase(phase); + this.unshiftPhase(...phase); return false; } } diff --git a/src/data/ability.ts b/src/data/ability.ts index cd31c62f7f6..a6d00b29fbc 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -4484,6 +4484,13 @@ export class InfiltratorAbAttr extends AbAttr { } } +/** + * Attribute implementing the effects of {@link https://bulbapedia.bulbagarden.net/wiki/Magic_Bounce_(ability) | Magic Bounce}. + * Allows the source to bounce back {@linkcode MoveFlags.REFLECTABLE | Reflectable} + * moves as if the user had used {@linkcode Moves.MAGIC_COAT | Magic Coat}. + */ +export class ReflectStatusMoveAbAttr extends AbAttr { } + export class UncopiableAbilityAbAttr extends AbAttr { constructor() { super(false); @@ -5805,8 +5812,11 @@ export function initAbilities() { }, Stat.SPD, 1) .attr(PostIntimidateStatStageChangeAbAttr, [ Stat.SPD ], 1), new Ability(Abilities.MAGIC_BOUNCE, 5) + .attr(ReflectStatusMoveAbAttr) .ignorable() - .unimplemented(), + // Interactions with stomping tantrum, instruct, encore, and probably other moves that + // rely on move history + .edgeCase(), new Ability(Abilities.SAP_SIPPER, 5) .attr(TypeImmunityStatStageChangeAbAttr, Type.GRASS, Stat.ATK, 1) .ignorable(), diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 43168ea5c0c..91ab10aecfa 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -2975,6 +2975,24 @@ export class PsychoShiftTag extends BattlerTag { } } +/** + * Tag associated with the move Magic Coat. + */ +export class MagicCoatTag extends BattlerTag { + constructor() { + super(BattlerTagType.MAGIC_COAT, BattlerTagLapseType.TURN_END, 1, Moves.MAGIC_COAT); + } + + /** + * Queues the "[PokemonName] shrouded itself with Magic Coat" message when the tag is added. + * @param pokemon - The target {@linkcode Pokemon} + */ + override onAdd(pokemon: Pokemon) { + // "{pokemonNameWithAffix} shrouded itself with Magic Coat!" + globalScene.queueMessage(i18next.t("battlerTags:magicCoatOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + } +} + /** * Retrieves a {@linkcode BattlerTag} based on the provided tag type, turn count, source move, and source ID. * @param sourceId - The ID of the pokemon adding the tag @@ -3164,6 +3182,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source return new GrudgeTag(); case BattlerTagType.PSYCHO_SHIFT: return new PsychoShiftTag(); + case BattlerTagType.MAGIC_COAT: + return new MagicCoatTag(); case BattlerTagType.NONE: default: return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); diff --git a/src/data/move.ts b/src/data/move.ts index 6c41f0b764d..75908f86a14 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -125,7 +125,9 @@ export enum MoveFlags { /** Indicates a move is able to bypass its target's Substitute (if the target has one) */ IGNORE_SUBSTITUTE = 1 << 17, /** Indicates a move is able to be redirected to allies in a double battle if the attacker faints */ - REDIRECT_COUNTER = 1 << 18, + REDIRECT_COUNTER = 1 << 18, + /** Indicates a move is able to be reflected by {@linkcode Abilities.MAGIC_BOUNCE} and {@linkcode Moves.MAGIC_COAT} */ + REFLECTABLE = 1 << 19, } type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean; @@ -610,6 +612,16 @@ export default class Move implements Localizable { return this; } + /** + * Sets the {@linkcode MoveFlags.REFLECTABLE} flag for the calling Move + * @see {@linkcode Moves.ATTRACT} + * @returns The {@linkcode Move} that called this function + */ + reflectable(): this { + this.setFlag(MoveFlags.REFLECTABLE, true); + return this; + } + /** * Checks if the move flag applies to the pokemon(s) using/receiving the move * @param flag {@linkcode MoveFlags} MoveFlag to check on user and/or target @@ -5332,6 +5344,7 @@ export class AddBattlerTagAttr extends MoveEffectAttr { case BattlerTagType.INGRAIN: case BattlerTagType.IGNORE_ACCURACY: case BattlerTagType.AQUA_RING: + case BattlerTagType.MAGIC_COAT: return 3; case BattlerTagType.PROTECTED: case BattlerTagType.FLYING: @@ -8334,7 +8347,8 @@ export function initMoves() { .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) .ignoresSubstitute() .hidesTarget() - .windMove(), + .windMove() + .reflectable(), new ChargingAttackMove(Moves.FLY, Type.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, 0, 1) .chargeText(i18next.t("moveTriggers:flewUpHigh", { pokemonName: "{USER}" })) .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) @@ -8358,7 +8372,8 @@ export function initMoves() { new AttackMove(Moves.ROLLING_KICK, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 85, 15, 30, 0, 1) .attr(FlinchAttr), new StatusMove(Moves.SAND_ATTACK, Type.GROUND, 100, 15, -1, 0, 1) - .attr(StatStageChangeAttr, [ Stat.ACC ], -1), + .attr(StatStageChangeAttr, [ Stat.ACC ], -1) + .reflectable(), new AttackMove(Moves.HEADBUTT, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 15, 30, 0, 1) .attr(FlinchAttr), new AttackMove(Moves.HORN_ATTACK, Type.NORMAL, MoveCategory.PHYSICAL, 65, 100, 25, -1, 0, 1), @@ -8387,7 +8402,8 @@ export function initMoves() { .recklessMove(), new StatusMove(Moves.TAIL_WHIP, Type.NORMAL, 100, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.POISON_STING, Type.POISON, MoveCategory.PHYSICAL, 15, 100, 35, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON) .makesContact(false), @@ -8400,30 +8416,36 @@ export function initMoves() { .makesContact(false), new StatusMove(Moves.LEER, Type.NORMAL, 100, 30, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], -1) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.BITE, Type.DARK, MoveCategory.PHYSICAL, 60, 100, 25, 30, 0, 1) .attr(FlinchAttr) .bitingMove(), new StatusMove(Moves.GROWL, Type.NORMAL, 100, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .soundBased() - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new StatusMove(Moves.ROAR, Type.NORMAL, -1, 20, -1, -6, 1) .attr(ForceSwitchOutAttr, false, SwitchType.FORCE_SWITCH) .soundBased() - .hidesTarget(), + .hidesTarget() + .reflectable(), new StatusMove(Moves.SING, Type.NORMAL, 55, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) - .soundBased(), + .soundBased() + .reflectable(), new StatusMove(Moves.SUPERSONIC, Type.NORMAL, 55, 20, -1, 0, 1) .attr(ConfuseAttr) - .soundBased(), + .soundBased() + .reflectable(), new AttackMove(Moves.SONIC_BOOM, Type.NORMAL, MoveCategory.SPECIAL, -1, 90, 20, -1, 0, 1) .attr(FixedDamageAttr, 20), new StatusMove(Moves.DISABLE, Type.NORMAL, 100, 20, -1, 0, 1) .attr(AddBattlerTagAttr, BattlerTagType.DISABLED, false, true) .condition((user, target, move) => target.getMoveHistory().reverse().find(m => m.move !== Moves.NONE && m.move !== Moves.STRUGGLE && !m.virtual) !== undefined) - .ignoresSubstitute(), + .ignoresSubstitute() + .reflectable(), new AttackMove(Moves.ACID, Type.POISON, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .target(MoveTarget.ALL_NEAR_ENEMIES), @@ -8476,7 +8498,8 @@ export function initMoves() { .triageMove(), new StatusMove(Moves.LEECH_SEED, Type.GRASS, 90, 10, -1, 0, 1) .attr(LeechSeedAttr) - .condition((user, target, move) => !target.getTag(BattlerTagType.SEEDED) && !target.isOfType(Type.GRASS)), + .condition((user, target, move) => !target.getTag(BattlerTagType.SEEDED) && !target.isOfType(Type.GRASS)) + .reflectable(), new SelfStatusMove(Moves.GROWTH, Type.NORMAL, -1, 20, -1, 0, 1) .attr(GrowthStatStageChangeAttr), new AttackMove(Moves.RAZOR_LEAF, Type.GRASS, MoveCategory.PHYSICAL, 55, 95, 25, -1, 0, 1) @@ -8490,13 +8513,16 @@ export function initMoves() { .attr(AntiSunlightPowerDecreaseAttr), new StatusMove(Moves.POISON_POWDER, Type.POISON, 75, 35, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON) - .powderMove(), + .powderMove() + .reflectable(), new StatusMove(Moves.STUN_SPORE, Type.GRASS, 75, 30, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) - .powderMove(), + .powderMove() + .reflectable(), new StatusMove(Moves.SLEEP_POWDER, Type.GRASS, 75, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) - .powderMove(), + .powderMove() + .reflectable(), new AttackMove(Moves.PETAL_DANCE, Type.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) .attr(FrenzyAttr) .attr(MissEffectAttr, frenzyMissFunc) @@ -8506,7 +8532,8 @@ export function initMoves() { .target(MoveTarget.RANDOM_NEAR_ENEMY), new StatusMove(Moves.STRING_SHOT, Type.BUG, 95, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], -2) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.DRAGON_RAGE, Type.DRAGON, MoveCategory.SPECIAL, -1, 100, 10, -1, 0, 1) .attr(FixedDamageAttr, 40), new AttackMove(Moves.FIRE_SPIN, Type.FIRE, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 1) @@ -8517,7 +8544,8 @@ export function initMoves() { .attr(StatusEffectAttr, StatusEffect.PARALYSIS), new StatusMove(Moves.THUNDER_WAVE, Type.ELECTRIC, 90, 20, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) - .attr(RespectAttackTypeImmunityAttr), + .attr(RespectAttackTypeImmunityAttr) + .reflectable(), new AttackMove(Moves.THUNDER, Type.ELECTRIC, MoveCategory.SPECIAL, 110, 70, 10, 30, 0, 1) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .attr(ThunderAccuracyAttr) @@ -8539,13 +8567,15 @@ export function initMoves() { .chargeAttr(SemiInvulnerableAttr, BattlerTagType.UNDERGROUND), new StatusMove(Moves.TOXIC, Type.POISON, 90, 10, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.TOXIC) - .attr(ToxicAccuracyAttr), + .attr(ToxicAccuracyAttr) + .reflectable(), new AttackMove(Moves.CONFUSION, Type.PSYCHIC, MoveCategory.SPECIAL, 50, 100, 25, 10, 0, 1) .attr(ConfuseAttr), new AttackMove(Moves.PSYCHIC, Type.PSYCHIC, MoveCategory.SPECIAL, 90, 100, 10, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1), new StatusMove(Moves.HYPNOSIS, Type.PSYCHIC, 60, 20, -1, 0, 1) - .attr(StatusEffectAttr, StatusEffect.SLEEP), + .attr(StatusEffectAttr, StatusEffect.SLEEP) + .reflectable(), new SelfStatusMove(Moves.MEDITATE, Type.PSYCHIC, -1, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true), new SelfStatusMove(Moves.AGILITY, Type.PSYCHIC, -1, 30, -1, 0, 1) @@ -8563,7 +8593,8 @@ export function initMoves() { .ignoresSubstitute(), new StatusMove(Moves.SCREECH, Type.NORMAL, 85, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], -2) - .soundBased(), + .soundBased() + .reflectable(), new SelfStatusMove(Moves.DOUBLE_TEAM, Type.NORMAL, -1, 15, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.EVA ], 1, true), new SelfStatusMove(Moves.RECOVER, Type.NORMAL, -1, 5, -1, 0, 1) @@ -8575,9 +8606,11 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.MINIMIZED, true, false) .attr(StatStageChangeAttr, [ Stat.EVA ], 2, true), new StatusMove(Moves.SMOKESCREEN, Type.NORMAL, 100, 20, -1, 0, 1) - .attr(StatStageChangeAttr, [ Stat.ACC ], -1), + .attr(StatStageChangeAttr, [ Stat.ACC ], -1) + .reflectable(), new StatusMove(Moves.CONFUSE_RAY, Type.GHOST, 100, 10, -1, 0, 1) - .attr(ConfuseAttr), + .attr(ConfuseAttr) + .reflectable(), new SelfStatusMove(Moves.WITHDRAW, Type.WATER, -1, 40, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), new SelfStatusMove(Moves.DEFENSE_CURL, Type.NORMAL, -1, 40, -1, 0, 1) @@ -8638,7 +8671,8 @@ export function initMoves() { new SelfStatusMove(Moves.AMNESIA, Type.PSYCHIC, -1, 20, -1, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPDEF ], 2, true), new StatusMove(Moves.KINESIS, Type.PSYCHIC, 80, 15, -1, 0, 1) - .attr(StatStageChangeAttr, [ Stat.ACC ], -1), + .attr(StatStageChangeAttr, [ Stat.ACC ], -1) + .reflectable(), new SelfStatusMove(Moves.SOFT_BOILED, Type.NORMAL, -1, 5, -1, 0, 1) .attr(HealAttr, 0.5) .triageMove(), @@ -8648,14 +8682,16 @@ export function initMoves() { .condition(failOnGravityCondition) .recklessMove(), new StatusMove(Moves.GLARE, Type.NORMAL, 100, 30, -1, 0, 1) - .attr(StatusEffectAttr, StatusEffect.PARALYSIS), + .attr(StatusEffectAttr, StatusEffect.PARALYSIS) + .reflectable(), new AttackMove(Moves.DREAM_EATER, Type.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 15, -1, 0, 1) .attr(HitHealAttr) .condition(targetSleptOrComatoseCondition) .triageMove(), new StatusMove(Moves.POISON_GAS, Type.POISON, 90, 40, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.POISON) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.BARRAGE, Type.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) .attr(MultiHitAttr) .makesContact(false) @@ -8664,7 +8700,8 @@ export function initMoves() { .attr(HitHealAttr) .triageMove(), new StatusMove(Moves.LOVELY_KISS, Type.NORMAL, 75, 10, -1, 0, 1) - .attr(StatusEffectAttr, StatusEffect.SLEEP), + .attr(StatusEffectAttr, StatusEffect.SLEEP) + .reflectable(), new ChargingAttackMove(Moves.SKY_ATTACK, Type.FLYING, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 1) .chargeText(i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) .attr(HighCritAttr) @@ -8683,9 +8720,11 @@ export function initMoves() { .punchingMove(), new StatusMove(Moves.SPORE, Type.GRASS, 100, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) - .powderMove(), + .powderMove() + .reflectable(), new StatusMove(Moves.FLASH, Type.NORMAL, 100, 20, -1, 0, 1) - .attr(StatStageChangeAttr, [ Stat.ACC ], -1), + .attr(StatStageChangeAttr, [ Stat.ACC ], -1) + .reflectable(), new AttackMove(Moves.PSYWAVE, Type.PSYCHIC, MoveCategory.SPECIAL, -1, 100, 15, -1, 0, 1) .attr(RandomLevelDamageAttr), new SelfStatusMove(Moves.SPLASH, Type.NORMAL, -1, 40, -1, 0, 1) @@ -8744,7 +8783,8 @@ export function initMoves() { .attr(StealHeldItemChanceAttr, 0.3), new StatusMove(Moves.SPIDER_WEB, Type.BUG, -1, 10, -1, 0, 2) .condition(failIfGhostTypeCondition) - .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1), + .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) + .reflectable(), new StatusMove(Moves.MIND_READER, Type.NORMAL, -1, 5, -1, 0, 2) .attr(IgnoreAccuracyAttr), new StatusMove(Moves.NIGHTMARE, Type.GHOST, 100, 15, -1, 0, 2) @@ -8775,12 +8815,14 @@ export function initMoves() { new StatusMove(Moves.COTTON_SPORE, Type.GRASS, 100, 40, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPD ], -2) .powderMove() - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.REVERSAL, Type.FIGHTING, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 2) .attr(LowHpPowerAttr), new StatusMove(Moves.SPITE, Type.GHOST, 100, 10, -1, 0, 2) .ignoresSubstitute() - .attr(ReducePpMoveAttr, 4), + .attr(ReducePpMoveAttr, 4) + .reflectable(), new AttackMove(Moves.POWDER_SNOW, Type.ICE, MoveCategory.SPECIAL, 40, 100, 25, 10, 0, 2) .attr(StatusEffectAttr, StatusEffect.FREEZE) .target(MoveTarget.ALL_NEAR_ENEMIES), @@ -8790,10 +8832,12 @@ export function initMoves() { new AttackMove(Moves.MACH_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 2) .punchingMove(), new StatusMove(Moves.SCARY_FACE, Type.NORMAL, 100, 10, -1, 0, 2) - .attr(StatStageChangeAttr, [ Stat.SPD ], -2), + .attr(StatStageChangeAttr, [ Stat.SPD ], -2) + .reflectable(), new AttackMove(Moves.FEINT_ATTACK, Type.DARK, MoveCategory.PHYSICAL, 60, -1, 20, -1, 0, 2), new StatusMove(Moves.SWEET_KISS, Type.FAIRY, 75, 10, -1, 0, 2) - .attr(ConfuseAttr), + .attr(ConfuseAttr) + .reflectable(), new SelfStatusMove(Moves.BELLY_DRUM, Type.NORMAL, -1, 10, -1, 0, 2) .attr(CutHpStatStageBoostAttr, [ Stat.ATK ], 12, 2, (user) => { globalScene.queueMessage(i18next.t("moveTriggers:cutOwnHpAndMaximizedStat", { pokemonName: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.ATK)) })); @@ -8808,13 +8852,15 @@ export function initMoves() { .ballBombMove(), new StatusMove(Moves.SPIKES, Type.GROUND, -1, 20, -1, 0, 2) .attr(AddArenaTrapTagAttr, ArenaTagType.SPIKES) - .target(MoveTarget.ENEMY_SIDE), + .target(MoveTarget.ENEMY_SIDE) + .reflectable(), new AttackMove(Moves.ZAP_CANNON, Type.ELECTRIC, MoveCategory.SPECIAL, 120, 50, 5, 100, 0, 2) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .ballBombMove(), new StatusMove(Moves.FORESIGHT, Type.NORMAL, -1, 40, -1, 0, 2) .attr(ExposedMoveAttr, BattlerTagType.IGNORE_GHOST) - .ignoresSubstitute(), + .ignoresSubstitute() + .reflectable(), new SelfStatusMove(Moves.DESTINY_BOND, Type.GHOST, -1, 5, -1, 0, 2) .ignoresProtect() .attr(DestinyBondAttr) @@ -8860,7 +8906,8 @@ export function initMoves() { .attr(ProtectAttr, BattlerTagType.ENDURING) .condition(failIfLastCondition), new StatusMove(Moves.CHARM, Type.FAIRY, 100, 20, -1, 0, 2) - .attr(StatStageChangeAttr, [ Stat.ATK ], -2), + .attr(StatStageChangeAttr, [ Stat.ATK ], -2) + .reflectable(), new AttackMove(Moves.ROLLOUT, Type.ROCK, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 2) .partial() // Does not lock the user, also does not increase damage properly .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, Moves.DEFENSE_CURL), @@ -8868,7 +8915,8 @@ export function initMoves() { .attr(SurviveDamageAttr), new StatusMove(Moves.SWAGGER, Type.NORMAL, 85, 15, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK ], 2) - .attr(ConfuseAttr), + .attr(ConfuseAttr) + .reflectable(), new SelfStatusMove(Moves.MILK_DRINK, Type.NORMAL, -1, 5, -1, 0, 2) .attr(HealAttr, 0.5) .triageMove(), @@ -8881,11 +8929,13 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), new StatusMove(Moves.MEAN_LOOK, Type.NORMAL, -1, 5, -1, 0, 2) .condition(failIfGhostTypeCondition) - .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1), + .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) + .reflectable(), new StatusMove(Moves.ATTRACT, Type.NORMAL, 100, 15, -1, 0, 2) .attr(AddBattlerTagAttr, BattlerTagType.INFATUATED) .ignoresSubstitute() - .condition((user, target, move) => user.isOppositeGender(target)), + .condition((user, target, move) => user.isOppositeGender(target)) + .reflectable(), new SelfStatusMove(Moves.SLEEP_TALK, Type.NORMAL, -1, 10, -1, 0, 2) .attr(BypassSleepAttr) .attr(RandomMovesetMoveAttr, invalidSleepTalkMoves, false) @@ -8932,7 +8982,8 @@ export function initMoves() { new StatusMove(Moves.ENCORE, Type.NORMAL, 100, 5, -1, 0, 2) .attr(AddBattlerTagAttr, BattlerTagType.ENCORE, false, true) .ignoresSubstitute() - .condition((user, target, move) => new EncoreTag(user.id).canAdd(target)), + .condition((user, target, move) => new EncoreTag(user.id).canAdd(target)) + .reflectable(), new AttackMove(Moves.PURSUIT, Type.DARK, MoveCategory.PHYSICAL, 40, 100, 20, -1, 0, 2) .partial(), // No effect implemented new AttackMove(Moves.RAPID_SPIN, Type.NORMAL, MoveCategory.PHYSICAL, 50, 100, 40, 100, 0, 2) @@ -8953,7 +9004,8 @@ export function initMoves() { .attr(RemoveArenaTrapAttr), new StatusMove(Moves.SWEET_SCENT, Type.NORMAL, 100, 20, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.EVA ], -2) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.IRON_TAIL, Type.STEEL, MoveCategory.PHYSICAL, 100, 75, 15, 30, 0, 2) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), new AttackMove(Moves.METAL_CLAW, Type.STEEL, MoveCategory.PHYSICAL, 50, 95, 35, 10, 0, 2) @@ -9041,12 +9093,15 @@ export function initMoves() { new StatusMove(Moves.TORMENT, Type.DARK, 100, 15, -1, 0, 3) .ignoresSubstitute() .edgeCase() // Incomplete implementation because of Uproar's partial implementation - .attr(AddBattlerTagAttr, BattlerTagType.TORMENT, false, true, 1), + .attr(AddBattlerTagAttr, BattlerTagType.TORMENT, false, true, 1) + .reflectable(), new StatusMove(Moves.FLATTER, Type.DARK, 100, 15, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1) - .attr(ConfuseAttr), + .attr(ConfuseAttr) + .reflectable(), new StatusMove(Moves.WILL_O_WISP, Type.FIRE, 85, 15, -1, 0, 3) - .attr(StatusEffectAttr, StatusEffect.BURN), + .attr(StatusEffectAttr, StatusEffect.BURN) + .reflectable(), new StatusMove(Moves.MEMENTO, Type.DARK, 100, 10, -1, 0, 3) .attr(SacrificialAttrOnHit) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -2), @@ -9070,7 +9125,8 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.CHARGED, true, false), new StatusMove(Moves.TAUNT, Type.DARK, 100, 20, -1, 0, 3) .ignoresSubstitute() - .attr(AddBattlerTagAttr, BattlerTagType.TAUNT, false, true, 4), + .attr(AddBattlerTagAttr, BattlerTagType.TAUNT, false, true, 4) + .reflectable(), new StatusMove(Moves.HELPING_HAND, Type.NORMAL, -1, 20, -1, 5, 3) .attr(AddBattlerTagAttr, BattlerTagType.HELPING_HAND) .ignoresSubstitute() @@ -9093,7 +9149,12 @@ export function initMoves() { new AttackMove(Moves.SUPERPOWER, Type.FIGHTING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], -1, true), new SelfStatusMove(Moves.MAGIC_COAT, Type.PSYCHIC, -1, 15, -1, 4, 3) - .unimplemented(), + .attr(AddBattlerTagAttr, BattlerTagType.MAGIC_COAT, true, true, 0) + .condition(failIfLastCondition) + // Interactions with stomping tantrum, instruct, and other moves that + // rely on move history + // Also will not reflect roar / whirlwind if the target has ForceSwitchOutImmunityAbAttr + .edgeCase(), new SelfStatusMove(Moves.RECYCLE, Type.NORMAL, -1, 10, -1, 0, 3) .unimplemented(), new AttackMove(Moves.REVENGE, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, -4, 3) @@ -9102,7 +9163,8 @@ export function initMoves() { .attr(RemoveScreensAttr), new StatusMove(Moves.YAWN, Type.NORMAL, -1, 10, -1, 0, 3) .attr(AddBattlerTagAttr, BattlerTagType.DROWSY, false, true) - .condition((user, target, move) => !target.status && !target.isSafeguarded(user)), + .condition((user, target, move) => !target.status && !target.isSafeguarded(user)) + .reflectable(), new AttackMove(Moves.KNOCK_OFF, Type.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getHeldItems().filter(i => i.isTransferable).length > 0 ? 1.5 : 1) .attr(RemoveHeldItemAttr, false), @@ -9146,7 +9208,8 @@ export function initMoves() { .ballBombMove(), new StatusMove(Moves.FEATHER_DANCE, Type.FLYING, 100, 15, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK ], -2) - .danceMove(), + .danceMove() + .reflectable(), new StatusMove(Moves.TEETER_DANCE, Type.NORMAL, 100, 20, -1, 0, 3) .attr(ConfuseAttr) .danceMove() @@ -9192,7 +9255,8 @@ export function initMoves() { .attr(PartyStatusCureAttr, i18next.t("moveTriggers:soothingAromaWaftedThroughArea"), Abilities.SAP_SIPPER) .target(MoveTarget.PARTY), new StatusMove(Moves.FAKE_TEARS, Type.DARK, 100, 20, -1, 0, 3) - .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), + .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2) + .reflectable(), new AttackMove(Moves.AIR_CUTTER, Type.FLYING, MoveCategory.SPECIAL, 60, 95, 25, -1, 0, 3) .attr(HighCritAttr) .slicingMove() @@ -9203,7 +9267,8 @@ export function initMoves() { .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE), new StatusMove(Moves.ODOR_SLEUTH, Type.NORMAL, -1, 40, -1, 0, 3) .attr(ExposedMoveAttr, BattlerTagType.IGNORE_GHOST) - .ignoresSubstitute(), + .ignoresSubstitute() + .reflectable(), new AttackMove(Moves.ROCK_TOMB, Type.ROCK, MoveCategory.PHYSICAL, 60, 95, 15, 100, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) .makesContact(false), @@ -9212,12 +9277,15 @@ export function initMoves() { .windMove(), new StatusMove(Moves.METAL_SOUND, Type.STEEL, 85, 40, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2) - .soundBased(), + .soundBased() + .reflectable(), new StatusMove(Moves.GRASS_WHISTLE, Type.GRASS, 55, 15, -1, 0, 3) .attr(StatusEffectAttr, StatusEffect.SLEEP) - .soundBased(), + .soundBased() + .reflectable(), new StatusMove(Moves.TICKLE, Type.NORMAL, 100, 20, -1, 0, 3) - .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], -1), + .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], -1) + .reflectable(), new SelfStatusMove(Moves.COSMIC_POWER, Type.PSYCHIC, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, true), new AttackMove(Moves.WATER_SPOUT, Type.WATER, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 3) @@ -9255,7 +9323,8 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true), new StatusMove(Moves.BLOCK, Type.NORMAL, -1, 5, -1, 0, 3) .condition(failIfGhostTypeCondition) - .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1), + .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) + .reflectable(), new StatusMove(Moves.HOWL, Type.NORMAL, -1, 40, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK ], 1) .soundBased() @@ -9318,7 +9387,8 @@ export function initMoves() { .target(MoveTarget.BOTH_SIDES), new StatusMove(Moves.MIRACLE_EYE, Type.PSYCHIC, -1, 40, -1, 0, 4) .attr(ExposedMoveAttr, BattlerTagType.IGNORE_DARK) - .ignoresSubstitute(), + .ignoresSubstitute() + .reflectable(), new AttackMove(Moves.WAKE_UP_SLAP, Type.FIGHTING, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => targetSleptOrComatoseCondition(user, target, move) ? 2 : 1) .attr(HealStatusEffectAttr, false, StatusEffect.SLEEP), @@ -9364,6 +9434,7 @@ export function initMoves() { new AttackMove(Moves.ASSURANCE, Type.DARK, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => target.turnData.damageTaken > 0 ? 2 : 1), new StatusMove(Moves.EMBARGO, Type.DARK, 100, 15, -1, 0, 4) + .reflectable() .unimplemented(), new AttackMove(Moves.FLING, Type.DARK, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 4) .makesContact(false) @@ -9383,14 +9454,16 @@ export function initMoves() { .attr(LessPPMorePowerAttr), new StatusMove(Moves.HEAL_BLOCK, Type.PSYCHIC, 100, 15, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.HEAL_BLOCK, false, true, 5) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.WRING_OUT, Type.NORMAL, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 4) .attr(OpponentHighHpPowerAttr, 120) .makesContact(), new SelfStatusMove(Moves.POWER_TRICK, Type.PSYCHIC, -1, 10, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.POWER_TRICK, true), new StatusMove(Moves.GASTRO_ACID, Type.POISON, 100, 10, -1, 0, 4) - .attr(SuppressAbilitiesAttr), + .attr(SuppressAbilitiesAttr) + .reflectable(), new StatusMove(Moves.LUCKY_CHANT, Type.NORMAL, -1, 30, -1, 0, 4) .attr(AddArenaTagAttr, ArenaTagType.NO_CRIT, 5, true, true) .target(MoveTarget.USER_SIDE), @@ -9412,12 +9485,14 @@ export function initMoves() { new AttackMove(Moves.LAST_RESORT, Type.NORMAL, MoveCategory.PHYSICAL, 140, 100, 5, -1, 0, 4) .attr(LastResortAttr), new StatusMove(Moves.WORRY_SEED, Type.GRASS, 100, 10, -1, 0, 4) - .attr(AbilityChangeAttr, Abilities.INSOMNIA), + .attr(AbilityChangeAttr, Abilities.INSOMNIA) + .reflectable(), new AttackMove(Moves.SUCKER_PUNCH, Type.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4) .condition((user, target, move) => globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.FIGHT && !target.turnData.acted && allMoves[globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.move?.move!].category !== MoveCategory.STATUS), // TODO: is this bang correct? new StatusMove(Moves.TOXIC_SPIKES, Type.POISON, -1, 20, -1, 0, 4) .attr(AddArenaTrapTagAttr, ArenaTagType.TOXIC_SPIKES) - .target(MoveTarget.ENEMY_SIDE), + .target(MoveTarget.ENEMY_SIDE) + .reflectable(), new StatusMove(Moves.HEART_SWAP, Type.PSYCHIC, -1, 10, -1, 0, 4) .attr(SwapStatStagesAttr, BATTLE_STATS) .ignoresSubstitute(), @@ -9529,7 +9604,8 @@ export function initMoves() { .attr(ClearTerrainAttr) .attr(RemoveScreensAttr, false) .attr(RemoveArenaTrapAttr, true) - .attr(RemoveArenaTagsAttr, [ ArenaTagType.MIST, ArenaTagType.SAFEGUARD ], false), + .attr(RemoveArenaTagsAttr, [ ArenaTagType.MIST, ArenaTagType.SAFEGUARD ], false) + .reflectable(), new StatusMove(Moves.TRICK_ROOM, Type.PSYCHIC, -1, 5, -1, -7, 4) .attr(AddArenaTagAttr, ArenaTagType.TRICK_ROOM, 5) .ignoresProtect() @@ -9567,10 +9643,12 @@ export function initMoves() { new StatusMove(Moves.CAPTIVATE, Type.NORMAL, 100, 20, -1, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2) .condition((user, target, move) => target.isOppositeGender(user)) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new StatusMove(Moves.STEALTH_ROCK, Type.ROCK, -1, 20, -1, 0, 4) .attr(AddArenaTrapTagAttr, ArenaTagType.STEALTH_ROCK) - .target(MoveTarget.ENEMY_SIDE), + .target(MoveTarget.ENEMY_SIDE) + .reflectable(), new AttackMove(Moves.GRASS_KNOT, Type.GRASS, MoveCategory.SPECIAL, -1, 100, 20, -1, 0, 4) .attr(WeightPowerAttr) .makesContact(), @@ -9614,7 +9692,8 @@ export function initMoves() { .attr(TrapAttr, BattlerTagType.MAGMA_STORM), new StatusMove(Moves.DARK_VOID, Type.DARK, 80, 10, -1, 0, 4) //Accuracy from Generations 4-6 .attr(StatusEffectAttr, StatusEffect.SLEEP) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new AttackMove(Moves.SEED_FLARE, Type.GRASS, MoveCategory.SPECIAL, 120, 85, 5, 40, 0, 4) .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), new AttackMove(Moves.OMINOUS_WIND, Type.GHOST, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 4) @@ -9654,7 +9733,8 @@ export function initMoves() { .condition((_user, target, _move) => !(target.species.speciesId === Species.GENGAR && target.getFormKey() === "mega")) .condition((_user, target, _move) => Utils.isNullOrUndefined(target.getTag(BattlerTagType.INGRAIN)) && Utils.isNullOrUndefined(target.getTag(BattlerTagType.IGNORE_FLYING))) .attr(AddBattlerTagAttr, BattlerTagType.TELEKINESIS, false, true, 3) - .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, false, true, 3), + .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, false, true, 3) + .reflectable(), new StatusMove(Moves.MAGIC_ROOM, Type.PSYCHIC, -1, 10, -1, 0, 5) .ignoresProtect() .target(MoveTarget.BOTH_SIDES) @@ -9687,7 +9767,8 @@ export function initMoves() { .attr(ElectroBallPowerAttr) .ballBombMove(), new StatusMove(Moves.SOAK, Type.WATER, 100, 20, -1, 0, 5) - .attr(ChangeTypeAttr, Type.WATER), + .attr(ChangeTypeAttr, Type.WATER) + .reflectable(), new AttackMove(Moves.FLAME_CHARGE, Type.FIRE, MoveCategory.PHYSICAL, 50, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true), new SelfStatusMove(Moves.COIL, Type.POISON, -1, 20, -1, 0, 5) @@ -9700,9 +9781,11 @@ export function initMoves() { new AttackMove(Moves.FOUL_PLAY, Type.DARK, MoveCategory.PHYSICAL, 95, 100, 15, -1, 0, 5) .attr(TargetAtkUserAtkAttr), new StatusMove(Moves.SIMPLE_BEAM, Type.NORMAL, 100, 15, -1, 0, 5) - .attr(AbilityChangeAttr, Abilities.SIMPLE), + .attr(AbilityChangeAttr, Abilities.SIMPLE) + .reflectable(), new StatusMove(Moves.ENTRAINMENT, Type.NORMAL, 100, 15, -1, 0, 5) - .attr(AbilityGiveAttr), + .attr(AbilityGiveAttr) + .reflectable(), new StatusMove(Moves.AFTER_YOU, Type.NORMAL, -1, 15, -1, 0, 5) .ignoresProtect() .ignoresSubstitute() @@ -9740,7 +9823,8 @@ export function initMoves() { new StatusMove(Moves.HEAL_PULSE, Type.PSYCHIC, -1, 10, -1, 0, 5) .attr(HealAttr, 0.5, false, false) .pulseMove() - .triageMove(), + .triageMove() + .reflectable(), new AttackMove(Moves.HEX, Type.GHOST, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 5) .attr( MovePowerMultiplierAttr, @@ -9943,7 +10027,8 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, { condition: (user, target, move) => target.isOfType(Type.GRASS) && target.isGrounded() }), new StatusMove(Moves.STICKY_WEB, Type.BUG, -1, 20, -1, 0, 6) .attr(AddArenaTrapTagAttr, ArenaTagType.STICKY_WEB) - .target(MoveTarget.ENEMY_SIDE), + .target(MoveTarget.ENEMY_SIDE) + .reflectable(), new AttackMove(Moves.FELL_STINGER, Type.BUG, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 6) .attr(PostVictoryStatStageChangeAttr, [ Stat.ATK ], 3, true ), new ChargingAttackMove(Moves.PHANTOM_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) @@ -9951,10 +10036,12 @@ export function initMoves() { .chargeAttr(SemiInvulnerableAttr, BattlerTagType.HIDDEN) .ignoresProtect(), new StatusMove(Moves.TRICK_OR_TREAT, Type.GHOST, 100, 20, -1, 0, 6) - .attr(AddTypeAttr, Type.GHOST), + .attr(AddTypeAttr, Type.GHOST) + .reflectable(), new StatusMove(Moves.NOBLE_ROAR, Type.NORMAL, 100, 30, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1) - .soundBased(), + .soundBased() + .reflectable(), new StatusMove(Moves.ION_DELUGE, Type.ELECTRIC, -1, 25, -1, 1, 6) .attr(AddArenaTagAttr, ArenaTagType.ION_DELUGE) .target(MoveTarget.BOTH_SIDES), @@ -9963,7 +10050,8 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_OTHERS) .triageMove(), new StatusMove(Moves.FORESTS_CURSE, Type.GRASS, 100, 20, -1, 0, 6) - .attr(AddTypeAttr, Type.GRASS), + .attr(AddTypeAttr, Type.GRASS) + .reflectable(), new AttackMove(Moves.PETAL_BLIZZARD, Type.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 6) .windMove() .makesContact(false) @@ -9977,9 +10065,11 @@ export function initMoves() { new StatusMove(Moves.PARTING_SHOT, Type.DARK, 100, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, false, { trigger: MoveEffectTrigger.PRE_APPLY }) .attr(ForceSwitchOutAttr, true) - .soundBased(), + .soundBased() + .reflectable(), new StatusMove(Moves.TOPSY_TURVY, Type.DARK, -1, 20, -1, 0, 6) - .attr(InvertStatsAttr), + .attr(InvertStatsAttr) + .reflectable(), new AttackMove(Moves.DRAINING_KISS, Type.FAIRY, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 6) .attr(HitHealAttr, 0.75) .makesContact() @@ -10018,10 +10108,12 @@ export function initMoves() { .condition(failIfLastCondition), new StatusMove(Moves.PLAY_NICE, Type.NORMAL, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) - .ignoresSubstitute(), + .ignoresSubstitute() + .reflectable(), new StatusMove(Moves.CONFIDE, Type.NORMAL, -1, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.SPATK ], -1) - .soundBased(), + .soundBased() + .reflectable(), new AttackMove(Moves.DIAMOND_STORM, Type.ROCK, MoveCategory.PHYSICAL, 100, 95, 5, 50, 0, 6) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true, { firstTargetOnly: true }) .makesContact(false) @@ -10048,14 +10140,17 @@ export function initMoves() { .condition(failIfSingleBattle) .target(MoveTarget.NEAR_ALLY), new StatusMove(Moves.EERIE_IMPULSE, Type.ELECTRIC, 100, 15, -1, 0, 6) - .attr(StatStageChangeAttr, [ Stat.SPATK ], -2), + .attr(StatStageChangeAttr, [ Stat.SPATK ], -2) + .reflectable(), new StatusMove(Moves.VENOM_DRENCH, Type.POISON, 100, 20, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK, Stat.SPD ], -1, false, { condition: (user, target, move) => target.status?.effect === StatusEffect.POISON || target.status?.effect === StatusEffect.TOXIC }) - .target(MoveTarget.ALL_NEAR_ENEMIES), + .target(MoveTarget.ALL_NEAR_ENEMIES) + .reflectable(), new StatusMove(Moves.POWDER, Type.BUG, 100, 20, -1, 1, 6) .attr(AddBattlerTagAttr, BattlerTagType.POWDER, false, true) .ignoresSubstitute() - .powderMove(), + .powderMove() + .reflectable(), new ChargingSelfStatusMove(Moves.GEOMANCY, Type.FAIRY, -1, 10, -1, 0, 6) .chargeText(i18next.t("moveTriggers:isChargingPower", { pokemonName: "{USER}" })) .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2, true), @@ -10077,7 +10172,8 @@ export function initMoves() { .ignoresSubstitute() .target(MoveTarget.NEAR_ALLY), new StatusMove(Moves.BABY_DOLL_EYES, Type.FAIRY, 100, 30, -1, 1, 6) - .attr(StatStageChangeAttr, [ Stat.ATK ], -1), + .attr(StatStageChangeAttr, [ Stat.ATK ], -1) + .reflectable(), new AttackMove(Moves.NUZZLE, Type.ELECTRIC, MoveCategory.PHYSICAL, 20, 100, 20, 100, 0, 6) .attr(StatusEffectAttr, StatusEffect.PARALYSIS), new AttackMove(Moves.HOLD_BACK, Type.NORMAL, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 6) @@ -10221,13 +10317,15 @@ export function initMoves() { .punchingMove(), new StatusMove(Moves.FLORAL_HEALING, Type.FAIRY, -1, 10, -1, 0, 7) .attr(BoostHealAttr, 0.5, 2 / 3, true, false, (user, target, move) => globalScene.arena.terrain?.terrainType === TerrainType.GRASSY) - .triageMove(), + .triageMove() + .reflectable(), new AttackMove(Moves.HIGH_HORSEPOWER, Type.GROUND, MoveCategory.PHYSICAL, 95, 95, 10, -1, 0, 7), new StatusMove(Moves.STRENGTH_SAP, Type.GRASS, 100, 10, -1, 0, 7) .attr(HitHealAttr, null, Stat.ATK) .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .condition((user, target, move) => target.getStatStage(Stat.ATK) > -6) - .triageMove(), + .triageMove() + .reflectable(), new ChargingAttackMove(Moves.SOLAR_BLADE, Type.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7) .chargeText(i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]) @@ -10237,10 +10335,12 @@ export function initMoves() { .makesContact(false), new StatusMove(Moves.SPOTLIGHT, Type.NORMAL, -1, 15, -1, 3, 7) .attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, false) - .condition(failIfSingleBattle), + .condition(failIfSingleBattle) + .reflectable(), new StatusMove(Moves.TOXIC_THREAD, Type.POISON, 100, 20, -1, 0, 7) .attr(StatusEffectAttr, StatusEffect.POISON) - .attr(StatStageChangeAttr, [ Stat.SPD ], -1), + .attr(StatStageChangeAttr, [ Stat.SPD ], -1) + .reflectable(), new SelfStatusMove(Moves.LASER_FOCUS, Type.NORMAL, -1, 30, -1, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.ALWAYS_CRIT, true, false), new StatusMove(Moves.GEAR_UP, Type.STEEL, -1, 20, -1, 0, 7) @@ -10284,7 +10384,8 @@ export function initMoves() { (user: Pokemon, target: Pokemon, move: Move) => isNonVolatileStatusEffect(target.status?.effect!)) // TODO: is this bang correct? .attr(HealAttr, 0.5) .attr(HealStatusEffectAttr, false, getNonVolatileStatusEffects()) - .triageMove(), + .triageMove() + .reflectable(), new AttackMove(Moves.REVELATION_DANCE, Type.NORMAL, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) .danceMove() .attr(MatchUserTypeAttr), @@ -10373,7 +10474,8 @@ export function initMoves() { new AttackMove(Moves.MOONGEIST_BEAM, Type.GHOST, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) .ignoresAbilities(), new StatusMove(Moves.TEARFUL_LOOK, Type.NORMAL, -1, 20, -1, 0, 7) - .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1), + .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1) + .reflectable(), new AttackMove(Moves.ZING_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 7) .attr(FlinchAttr), new AttackMove(Moves.NATURES_MADNESS, Type.FAIRY, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 7) @@ -10492,10 +10594,12 @@ export function initMoves() { .condition((user, target, move) => user.getTag(TrappedTag)?.sourceMove !== Moves.NO_RETREAT), // fails if the user is currently trapped by No Retreat new StatusMove(Moves.TAR_SHOT, Type.ROCK, 100, 15, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) - .attr(AddBattlerTagAttr, BattlerTagType.TAR_SHOT, false), + .attr(AddBattlerTagAttr, BattlerTagType.TAR_SHOT, false) + .reflectable(), new StatusMove(Moves.MAGIC_POWDER, Type.PSYCHIC, 100, 20, -1, 0, 8) .attr(ChangeTypeAttr, Type.PSYCHIC) - .powderMove(), + .powderMove() + .reflectable(), new AttackMove(Moves.DRAGON_DARTS, Type.DRAGON, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 8) .attr(MultiHitAttr, MultiHitType._2) .makesContact(false) @@ -10672,6 +10776,7 @@ export function initMoves() { .makesContact(false), new StatusMove(Moves.CORROSIVE_GAS, Type.POISON, 100, 40, -1, 0, 8) .target(MoveTarget.ALL_NEAR_OTHERS) + .reflectable() .unimplemented(), new StatusMove(Moves.COACHING, Type.FIGHTING, -1, 10, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], 1) diff --git a/src/enums/battler-tag-type.ts b/src/enums/battler-tag-type.ts index f28ac37ae27..719b08c5b81 100644 --- a/src/enums/battler-tag-type.ts +++ b/src/enums/battler-tag-type.ts @@ -94,4 +94,5 @@ export enum BattlerTagType { PSYCHO_SHIFT = "PSYCHO_SHIFT", ENDURE_TOKEN = "ENDURE_TOKEN", POWDER = "POWDER", + MAGIC_COAT = "MAGIC_COAT", } diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index be9a36940ea..35fe446fc43 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -12,6 +12,7 @@ import { PostAttackAbAttr, PostDamageAbAttr, PostDefendAbAttr, + ReflectStatusMoveAbAttr, TypeImmunityAbAttr, } from "#app/data/ability"; import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag"; @@ -31,6 +32,7 @@ import { AttackMove, DelayedAttackAttr, FlinchAttr, + getMoveTargets, HitsTagAttr, MissEffectAttr, MoveCategory, @@ -47,7 +49,7 @@ import { } from "#app/data/move"; import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { Type } from "#enums/type"; -import type { PokemonMove } from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { HitResult, MoveResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -60,17 +62,27 @@ import { } from "#app/modifier/modifier"; import { PokemonPhase } from "#app/phases/pokemon-phase"; import { BooleanHolder, executeIf, isNullOrUndefined, NumberHolder } from "#app/utils"; +import { type nil } from "#app/utils"; import { BattlerTagType } from "#enums/battler-tag-type"; import type { Moves } from "#enums/moves"; import i18next from "i18next"; +import type { Phase } from "#app/phase"; +import { ShowAbilityPhase } from "./show-ability-phase"; +import { MovePhase } from "./move-phase"; +import { MoveEndPhase } from "./move-end-phase"; export class MoveEffectPhase extends PokemonPhase { public move: PokemonMove; protected targets: BattlerIndex[]; + protected reflected: boolean = false; - constructor(battlerIndex: BattlerIndex, targets: BattlerIndex[], move: PokemonMove) { + /** + * @param reflected Indicates that the move was reflected by the user due to magic coat or magic bounce + */ + constructor(battlerIndex: BattlerIndex, targets: BattlerIndex[], move: PokemonMove, reflected: boolean = false) { super(battlerIndex); this.move = move; + this.reflected = reflected; /** * In double battles, if the right Pokemon selects a spread move and the left Pokemon dies * with no party members available to switch in, then the right Pokemon takes the index @@ -184,12 +196,14 @@ export class MoveEffectPhase extends PokemonPhase { && (targets[0]?.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move)) && !targets[0]?.getTag(SemiInvulnerableTag); + const mayBounce = move.hasFlag(MoveFlags.REFLECTABLE) && !this.reflected && targets.some(t => t.hasAbilityWithAttr(ReflectStatusMoveAbAttr) || !!t.getTag(BattlerTagType.MAGIC_COAT)); + /** - * If no targets are left for the move to hit (FAIL), or the invoked move is single-target + * If no targets are left for the move to hit (FAIL), or the invoked move is non-reflectable, single-target * (and not random target) and failed the hit check against its target (MISS), log the move * as FAILed or MISSed (depending on the conditions above) and end this phase. */ - if (!hasActiveTargets || (!move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]] && !targets[0].getTag(ProtectedTag) && !isImmune)) { + if (!hasActiveTargets || (!mayBounce && !move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]] && !targets[0].getTag(ProtectedTag) && !isImmune)) { this.stopMultiHit(); if (hasActiveTargets) { globalScene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: this.getFirstTarget() ? getPokemonNameWithAffix(this.getFirstTarget()!) : "" })); @@ -211,12 +225,21 @@ export class MoveEffectPhase extends PokemonPhase { new MoveAnim(move.id as Moves, user, this.getFirstTarget()!.getBattlerIndex(), playOnEmptyField).play(move.hitsSubstitute(user, this.getFirstTarget()!), () => { /** Has the move successfully hit a target (for damage) yet? */ let hasHit: boolean = false; - for (const target of targets) { - // Prevent ENEMY_SIDE targeted moves from occurring twice in double battles - if (move.moveTarget === MoveTarget.ENEMY_SIDE && target !== targets[targets.length - 1]) { - continue; - } + // Prevent ENEMY_SIDE targeted moves from occurring twice in double battles + // and check which target will magic bounce. + const trueTargets: Pokemon[] = move.moveTarget !== MoveTarget.ENEMY_SIDE ? targets : (() => { + const magicCoatTargets = targets.filter(t => t.getTag(BattlerTagType.MAGIC_COAT) || t.hasAbilityWithAttr(ReflectStatusMoveAbAttr)); + + // only magic coat effect cares about order + if (!mayBounce || magicCoatTargets.length === 0) { + return [ targets[0] ]; + } + return [ magicCoatTargets[0] ]; + })(); + + const queuedPhases: Phase[] = []; + for (const target of trueTargets) { /** The {@linkcode ArenaTagSide} to which the target belongs */ const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; /** Has the invoked move been cancelled by conditional protection (e.g Quick Guard)? */ @@ -229,7 +252,7 @@ export class MoveEffectPhase extends PokemonPhase { } /** Is the target protected by Protect, etc. or a relevant conditional protection effect? */ - const isProtected = ( + const isProtected = !([ MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES ].includes(this.move.getMove().moveTarget)) && ( bypassIgnoreProtect.value || !this.move.getMove().checkFlag(MoveFlags.IGNORE_PROTECT, user, target)) && (hasConditionalProtectApplied.value @@ -238,13 +261,39 @@ export class MoveEffectPhase extends PokemonPhase { || (this.move.getMove().category !== MoveCategory.STATUS && target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))); + /** Is the target hidden by the effects of its Commander ability? */ + const isCommanding = globalScene.currentBattle.double && target.getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon() === target; + + /** Is the target reflecting status moves from the magic coat move? */ + const isReflecting = !!target.getTag(BattlerTagType.MAGIC_COAT); + + /** Is the target's magic bounce ability not ignored and able to reflect this move? */ + const canMagicBounce = !isReflecting && !move.checkFlag(MoveFlags.IGNORE_ABILITIES, user, target) && target.hasAbilityWithAttr(ReflectStatusMoveAbAttr); + + const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); + + /** Is the target reflecting the effect, not protected, and not in an semi-invulnerable state?*/ + const willBounce = (!isProtected && !this.reflected && !isCommanding + && move.hasFlag(MoveFlags.REFLECTABLE) + && (isReflecting || canMagicBounce) + && !semiInvulnerableTag); + + // If the move will bounce, then queue the bounce and move on to the next target + if (!target.switchOutStatus && willBounce) { + const newTargets = move.isMultiTarget() ? getMoveTargets(target, move.id).targets : [ user.getBattlerIndex() ]; + if (!isReflecting) { + queuedPhases.push(new ShowAbilityPhase(target.getBattlerIndex(), target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr))); + } + + queuedPhases.push(new MovePhase(target, newTargets, new PokemonMove(move.id, 0, 0, true), true, true, true)); + continue; + } + /** Is the pokemon immune due to an ablility, and also not in a semi invulnerable state? */ const isImmune = target.hasAbilityWithAttr(TypeImmunityAbAttr) && (target.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move)) - && !target.getTag(SemiInvulnerableTag); + && !semiInvulnerableTag; - /** Is the target hidden by the effects of its Commander ability? */ - const isCommanding = globalScene.currentBattle.double && target.getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon() === target; /** * If the move missed a target, stop all future hits against that target @@ -371,6 +420,10 @@ export class MoveEffectPhase extends PokemonPhase { applyAttrs.push(k); } + // Apply queued phases + if (queuedPhases.length) { + globalScene.appendToPhase(queuedPhases, MoveEndPhase); + } // Apply the move's POST_TARGET effects on the move's last hit, after all targeted effects have resolved const postTarget = (user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive()) ? applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_TARGET, user, null, move) : @@ -586,12 +639,7 @@ export class MoveEffectPhase extends PokemonPhase { } } - if (user.hasAbilityWithAttr(AlwaysHitAbAttr) || target.hasAbilityWithAttr(AlwaysHitAbAttr)) { - return true; - } - - // If the user should ignore accuracy on a target, check who the user targeted last turn and see if they match - if (user.getTag(BattlerTagType.IGNORE_ACCURACY) && (user.getLastXMoves().find(() => true)?.targets || []).indexOf(target.getBattlerIndex()) !== -1) { + if (this.checkBypassAccAndInvuln(target)) { return true; } @@ -599,15 +647,12 @@ export class MoveEffectPhase extends PokemonPhase { return true; } - if (target.getTag(BattlerTagType.TELEKINESIS) && !target.getTag(SemiInvulnerableTag) && !this.move.getMove().hasAttr(OneHitKOAttr)) { + const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); + if (target.getTag(BattlerTagType.TELEKINESIS) && !semiInvulnerableTag && !this.move.getMove().hasAttr(OneHitKOAttr)) { return true; } - const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); - if (semiInvulnerableTag - && !this.move.getMove().getAttrs(HitsTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType) - && !(this.move.getMove().hasAttr(ToxicAccuracyAttr) && user.isOfType(Type.POISON)) - ) { + if (semiInvulnerableTag && !this.checkBypassSemiInvuln(semiInvulnerableTag)) { return false; } @@ -623,6 +668,52 @@ export class MoveEffectPhase extends PokemonPhase { return rand < (moveAccuracy * accuracyMultiplier); } + /** + * Check whether the move should bypass *both* the accuracy *and* semi-invulnerable states. + * @param target - The {@linkcode Pokemon} targeted by the invoked move + * @returns `true` if the move should bypass accuracy and semi-invulnerability + * + * Accuracy and semi-invulnerability can be bypassed by: + * - An ability like {@linkcode Abilities.NO_GUARD | No Guard} + * - A poison type using {@linkcode Moves.TOXIC | Toxic} + * - A move like {@linkcode Moves.LOCK_ON | Lock-On} or {@linkcode Moves.MIND_READER | Mind Reader}. + * + * Does *not* check against effects {@linkcode Moves.GLAIVE_RUSH | Glaive Rush} status (which + * should not bypass semi-invulnerability), or interactions like Earthquake hitting against Dig, + * (which should not bypass the accuracy check). + * + * @see {@linkcode hitCheck} + */ + public checkBypassAccAndInvuln(target: Pokemon) { + const user = this.getUserPokemon(); + if (!user) { + return false; + } + if (user.hasAbilityWithAttr(AlwaysHitAbAttr) || target.hasAbilityWithAttr(AlwaysHitAbAttr)) { + return true; + } + if ((this.move.getMove().hasAttr(ToxicAccuracyAttr) && user.isOfType(Type.POISON))) { + return true; + } + // TODO: Fix lock on / mind reader check. + if (user.getTag(BattlerTagType.IGNORE_ACCURACY) && (user.getLastXMoves().find(() => true)?.targets || []).indexOf(target.getBattlerIndex()) !== -1) { + return true; + } + } + + /** + * Check whether the move is able to ignore the given `semiInvulnerableTag` + * @param semiInvulnerableTag - The semiInvulnerbale tag to check against + * @returns `true` if the move can ignore the semi-invulnerable state + */ + public checkBypassSemiInvuln(semiInvulnerableTag: SemiInvulnerableTag | nil): boolean { + if (!semiInvulnerableTag) { + return false; + } + const move = this.move.getMove(); + return move.getAttrs(HitsTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType); + } + /** @returns The {@linkcode Pokemon} using this phase's invoked move */ public getUserPokemon(): Pokemon | null { if (this.battlerIndex > BattlerIndex.ENEMY_2) { diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 5330540c8b2..9d32189edb5 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -58,6 +58,7 @@ export class MovePhase extends BattlePhase { protected ignorePp: boolean; protected failed: boolean = false; protected cancelled: boolean = false; + protected reflected: boolean = false; public get pokemon(): Pokemon { return this._pokemon; @@ -84,10 +85,12 @@ export class MovePhase extends BattlePhase { } /** - * @param followUp Indicates that the move being uses is a "follow-up" - for example, a move being used by Metronome or Dancer. + * @param followUp Indicates that the move being used is a "follow-up" - for example, a move being used by Metronome or Dancer. * Follow-ups bypass a few failure conditions, including flinches, sleep/paralysis/freeze and volatile status checks, etc. + * @param reflected Indicates that the move was reflected by Magic Coat or Magic Bounce. + * Reflected moves cannot be reflected again and will not trigger Dancer. */ - constructor(pokemon: Pokemon, targets: BattlerIndex[], move: PokemonMove, followUp: boolean = false, ignorePp: boolean = false) { + constructor(pokemon: Pokemon, targets: BattlerIndex[], move: PokemonMove, followUp: boolean = false, ignorePp: boolean = false, reflected: boolean = false) { super(); this.pokemon = pokemon; @@ -95,6 +98,7 @@ export class MovePhase extends BattlePhase { this.move = move; this.followUp = followUp; this.ignorePp = ignorePp; + this.reflected = reflected; } /** @@ -140,7 +144,7 @@ export class MovePhase extends BattlePhase { } // Check move to see if arena.ignoreAbilities should be true. - if (!this.followUp) { + if (!this.followUp || this.reflected) { if (this.move.getMove().checkFlag(MoveFlags.IGNORE_ABILITIES, this.pokemon, null)) { globalScene.arena.setIgnoreAbilities(true, this.pokemon.getBattlerIndex()); } @@ -335,7 +339,7 @@ export class MovePhase extends BattlePhase { */ if (success) { applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); - globalScene.unshiftPhase(new MoveEffectPhase(this.pokemon.getBattlerIndex(), this.targets, this.move)); + globalScene.unshiftPhase(new MoveEffectPhase(this.pokemon.getBattlerIndex(), this.targets, this.move, this.reflected)); } else { if ([ Moves.ROAR, Moves.WHIRLWIND, Moves.TRICK_OR_TREAT, Moves.FORESTS_CURSE ].includes(this.move.moveId)) { @@ -543,7 +547,7 @@ export class MovePhase extends BattlePhase { return; } - globalScene.queueMessage(i18next.t("battle:useMove", { + globalScene.queueMessage(i18next.t(this.reflected ? "battle:magicCoatActivated" : "battle:useMove", { pokemonNameWithAffix: getPokemonNameWithAffix(this.pokemon), moveName: this.move.getName() }), 500); diff --git a/src/test/abilities/magic_bounce.test.ts b/src/test/abilities/magic_bounce.test.ts new file mode 100644 index 00000000000..2fc460662ca --- /dev/null +++ b/src/test/abilities/magic_bounce.test.ts @@ -0,0 +1,351 @@ +import { BattlerIndex } from "#app/battle"; +import { allAbilities } from "#app/data/ability"; +import { ArenaTagSide } from "#app/data/arena-tag"; +import { allMoves } from "#app/data/move"; +import { ArenaTagType } from "#app/enums/arena-tag-type"; +import { BattlerTagType } from "#app/enums/battler-tag-type"; +import { Stat } from "#app/enums/stat"; +import { StatusEffect } from "#app/enums/status-effect"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Abilities - Magic Bounce", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .ability(Abilities.BALL_FETCH) + .battleType("single") + .moveset( [ Moves.GROWL, Moves.SPLASH ]) + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.MAGIC_BOUNCE) + .enemyMoveset(Moves.SPLASH); + }); + + it("should reflect basic status moves", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should not bounce moves while the target is in the semi-invulnerable state", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.moveset([ Moves.GROWL ]); + game.override.enemyMoveset( [ Moves.FLY ]); + + game.move.select(Moves.GROWL); + await game.forceEnemyMove(Moves.FLY); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should individually bounce back multi-target moves", async () => { + game.override.battleType("double"); + game.override.moveset([ Moves.GROWL, Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); + + game.move.select(Moves.GROWL, 0); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("BerryPhase"); + + const user = game.scene.getPlayerField()[0]; + expect(user.getStatStage(Stat.ATK)).toBe(-2); + }); + + it("should still bounce back a move that would otherwise fail", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.scene.getEnemyPokemon()?.setStatStage(Stat.ATK, -6); + game.override.moveset([ Moves.GROWL ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should not bounce back a move that was just bounced", async () => { + game.override.ability(Abilities.MAGIC_BOUNCE); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should receive the stat change after reflecting a move back to a mirror armor user", async () => { + game.override.ability(Abilities.MIRROR_ARMOR); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should not bounce back a move from a mold breaker user", async () => { + game.override.ability(Abilities.MOLD_BREAKER); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should bounce back a spread status move against both pokemon", async () => { + game.override.battleType("double"); + game.override.moveset([ Moves.GROWL, Moves.SPLASH ]); + game.override.enemyMoveset([ Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); + + game.move.select(Moves.GROWL, 0); + game.move.select(Moves.SPLASH, 1); + + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerField().every(p => p.getStatStage(Stat.ATK) === -2)).toBeTruthy(); + }); + + it("should only bounce spikes back once in doubles when both targets have magic bounce", async () => { + game.override.battleType("double"); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.moveset([ Moves.SPIKES ]); + + game.move.select(Moves.SPIKES); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY)).toBeUndefined(); + }); + + it("should bounce spikes even when the target is protected", async () => { + game.override.moveset([ Moves.SPIKES ]); + game.override.enemyMoveset([ Moves.PROTECT ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.SPIKES); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); + }); + + it("should not bounce spikes when the target is in the semi-invulnerable state", async () => { + game.override.moveset([ Moves.SPIKES ]); + game.override.enemyMoveset([ Moves.FLY ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.SPIKES); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY)!["layers"]).toBe(1); + }); + + it("should not bounce back curse", async() => { + game.override.starterSpecies(Species.GASTLY); + await game.classicMode.startBattle([ Species.GASTLY ]); + game.override.moveset([ Moves.CURSE ]); + + game.move.select(Moves.CURSE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getTag(BattlerTagType.CURSED)).toBeDefined(); + }); + + it("should not cause encore to be interrupted after bouncing", async () => { + game.override.moveset([ Moves.SPLASH, Moves.GROWL, Moves.ENCORE ]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.GROWL ]); + // game.override.ability(Abilities.MOLD_BREAKER); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + // Give the player MOLD_BREAKER for this turn to bypass Magic Bounce. + vi.spyOn(playerPokemon, "getAbility").mockReturnValue(allAbilities[Abilities.MOLD_BREAKER]); + + // turn 1 + game.move.select(Moves.ENCORE); + await game.forceEnemyMove(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); + + // turn 2 + vi.spyOn(playerPokemon, "getAbility").mockRestore(); + game.move.select(Moves.GROWL); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); + expect(enemyPokemon.getLastXMoves()[0].move).toBe(Moves.TACKLE); + + }); + + // TODO: encore is failing if the last move was virtual. + it.todo("should not cause the bounced move to count for encore", async () => { + game.override.moveset([ Moves.SPLASH, Moves.GROWL, Moves.ENCORE ]); + game.override.enemyMoveset([ Moves.GROWL, Moves.TACKLE ]); + game.override.enemyAbility(Abilities.MAGIC_BOUNCE); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + // turn 1 + game.move.select(Moves.GROWL); + await game.forceEnemyMove(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + // Give the player MOLD_BREAKER for this turn to bypass Magic Bounce. + vi.spyOn(playerPokemon, "getAbility").mockReturnValue(allAbilities[Abilities.MOLD_BREAKER]); + + // turn 2 + game.move.select(Moves.ENCORE); + await game.forceEnemyMove(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); + expect(enemyPokemon.getLastXMoves()[0].move).toBe(Moves.TACKLE); + }); + + // TODO: stomping tantrum should consider moves that were bounced. + it.todo("should cause stomping tantrum to double in power when the last move was bounced", async () => { + game.override.battleType("single"); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.moveset([ Moves.STOMPING_TANTRUM, Moves.CHARM ]); + + const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + vi.spyOn(stomping_tantrum, "calculateBattlePower"); + + game.move.select(Moves.CHARM); + await game.toNextTurn(); + + game.move.select(Moves.STOMPING_TANTRUM); + await game.phaseInterceptor.to("BerryPhase"); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(150); + }); + + // TODO: stomping tantrum should consider moves that were bounced. + it.todo("should properly cause the enemy's stomping tantrum to be doubled in power after bouncing and failing", async () => { + game.override.enemyMoveset([ Moves.STOMPING_TANTRUM, Moves.SPLASH, Moves.CHARM ]); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + const enemy = game.scene.getEnemyPokemon()!; + vi.spyOn(stomping_tantrum, "calculateBattlePower"); + + game.move.select(Moves.SPORE); + await game.forceEnemyMove(Moves.CHARM); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemy.getLastXMoves(1)[0].result).toBe("success"); + + await game.phaseInterceptor.to("BerryPhase"); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); + + await game.toNextTurn(); + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); + }); + + it("should respect immunities when bouncing a move", async () => { + vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + game.override.moveset([ Moves.THUNDER_WAVE, Moves.GROWL ]); + game.override.ability(Abilities.SOUNDPROOF); + await game.classicMode.startBattle([ Species.PHANPY ]); + + // Turn 1 - thunder wave immunity test + game.move.select(Moves.THUNDER_WAVE); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + + // Turn 2 - soundproof immunity test + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should bounce back a move before the accuracy check", async () => { + game.override.moveset([ Moves.SPORE ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const attacker = game.scene.getPlayerPokemon()!; + + vi.spyOn(attacker, "getAccuracyMultiplier").mockReturnValue(0.0); + game.move.select(Moves.SPORE); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); + }); + + it("should take the accuracy of the magic bounce user into account", async () => { + game.override.moveset([ Moves.SPORE ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + const opponent = game.scene.getEnemyPokemon()!; + + vi.spyOn(opponent, "getAccuracyMultiplier").mockReturnValue(0); + game.move.select(Moves.SPORE); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + }); + + it("should always apply the leftmost available target's magic bounce when bouncing moves like sticky webs in doubles", async () => { + game.override.battleType("double"); + game.override.moveset([ Moves.STICKY_WEB, Moves.SPLASH, Moves.TRICK_ROOM ]); + + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); + const [ enemy_1, enemy_2 ] = game.scene.getEnemyField(); + // set speed just incase logic erroneously checks for speed order + enemy_1.setStat(Stat.SPD, enemy_2.getStat(Stat.SPD) + 1); + + // turn 1 + game.move.select(Moves.STICKY_WEB, 0); + game.move.select(Moves.TRICK_ROOM, 1); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.arena.getTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER)?.getSourcePokemon()?.getBattlerIndex()).toBe(BattlerIndex.ENEMY); + game.scene.arena.removeTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER, true); + + // turn 2 + game.move.select(Moves.STICKY_WEB, 0); + game.move.select(Moves.TRICK_ROOM, 1); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.arena.getTagOnSide(ArenaTagType.STICKY_WEB, ArenaTagSide.PLAYER)?.getSourcePokemon()?.getBattlerIndex()).toBe(BattlerIndex.ENEMY); + }); + + it("should not bounce back status moves that hit through semi-invulnerable states", async () => { + game.override.moveset([ Moves.TOXIC, Moves.CHARM ]); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + game.move.select(Moves.TOXIC); + await game.forceEnemyMove(Moves.FLY); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); + expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + + game.override.ability(Abilities.NO_GUARD); + game.move.select(Moves.CHARM); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-2); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); + }); +}); + diff --git a/src/test/moves/magic_coat.test.ts b/src/test/moves/magic_coat.test.ts new file mode 100644 index 00000000000..7371c89d4ac --- /dev/null +++ b/src/test/moves/magic_coat.test.ts @@ -0,0 +1,286 @@ +import { BattlerIndex } from "#app/battle"; +import { ArenaTagSide } from "#app/data/arena-tag"; +import { allMoves } from "#app/data/move"; +import { ArenaTagType } from "#app/enums/arena-tag-type"; +import { BattlerTagType } from "#app/enums/battler-tag-type"; +import { Stat } from "#app/enums/stat"; +import { StatusEffect } from "#app/enums/status-effect"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Magic Coat", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.MAGIC_COAT); + }); + + it("should fail if the user goes last in the turn", async () => { + game.override.moveset([ Moves.PROTECT ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.PROTECT); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getEnemyPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should fail if called again in the same turn due to moves like instruct", async () => { + game.override.moveset([ Moves.INSTRUCT ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.INSTRUCT); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getEnemyPokemon()!.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + }); + + it("should not reflect moves used on the next turn", async () => { + game.override.moveset([ Moves.GROWL, Moves.SPLASH ]); + game.override.enemyMoveset([ Moves.MAGIC_COAT, Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + // turn 1 + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.MAGIC_COAT); + await game.toNextTurn(); + + // turn 2 + game.move.select(Moves.GROWL); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should reflect basic status moves", async () => { + game.override.moveset([ Moves.GROWL ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should individually bounce back multi-target moves when used by both targets in doubles", async () => { + game.override.battleType("double"); + game.override.moveset([ Moves.GROWL, Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); + + game.move.select(Moves.GROWL, 0); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("BerryPhase"); + + const user = game.scene.getPlayerField()[0]; + expect(user.getStatStage(Stat.ATK)).toBe(-2); + }); + + it("should bounce back a spread status move against both pokemon", async () => { + game.override.battleType("double"); + game.override.moveset([ Moves.GROWL, Moves.SPLASH ]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.MAGIC_COAT ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); + + game.move.select(Moves.GROWL, 0); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.SPLASH); + await game.forceEnemyMove(Moves.MAGIC_COAT); + + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerField().every(p => p.getStatStage(Stat.ATK) === -1)).toBeTruthy(); + }); + + it("should still bounce back a move that would otherwise fail", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.scene.getEnemyPokemon()?.setStatStage(Stat.ATK, -6); + game.override.moveset([ Moves.GROWL ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should not bounce back a move that was just bounced", async () => { + game.override.battleType("double"); + game.override.ability(Abilities.MAGIC_BOUNCE); + game.override.moveset([ Moves.GROWL, Moves.MAGIC_COAT ]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.MAGIC_COAT ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); + + game.move.select(Moves.MAGIC_COAT, 0); + game.move.select(Moves.GROWL, 1); + await game.forceEnemyMove(Moves.MAGIC_COAT); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyField()[0].getStatStage(Stat.ATK)).toBe(0); + }); + + // todo while Mirror Armor is not implemented + it.todo("should receive the stat change after reflecting a move back to a mirror armor user", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should still bounce back a move from a mold breaker user", async () => { + game.override.ability(Abilities.MOLD_BREAKER); + game.override.moveset([ Moves.GROWL ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.ATK)).toBe(0); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(-1); + }); + + it("should only bounce spikes back once when both targets use magic coat in doubles", async () => { + game.override.battleType("double"); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.moveset([ Moves.SPIKES ]); + + game.move.select(Moves.SPIKES); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.PLAYER)!["layers"]).toBe(1); + expect(game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY)).toBeUndefined(); + }); + + it("should not bounce back curse", async() => { + game.override.starterSpecies(Species.GASTLY); + await game.classicMode.startBattle([ Species.GASTLY ]); + game.override.moveset([ Moves.CURSE ]); + + game.move.select(Moves.CURSE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getTag(BattlerTagType.CURSED)).toBeDefined(); + }); + + // TODO: encore is failing if the last move was virtual. + it.todo("should not cause the bounced move to count for encore", async () => { + game.override.moveset([ Moves.GROWL, Moves.ENCORE ]); + game.override.enemyMoveset([ Moves.MAGIC_COAT, Moves.TACKLE ]); + game.override.enemyAbility(Abilities.MAGIC_BOUNCE); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + const enemyPokemon = game.scene.getEnemyPokemon()!; + + // turn 1 + game.move.select(Moves.GROWL); + await game.forceEnemyMove(Moves.MAGIC_COAT); + await game.toNextTurn(); + + // turn 2 + game.move.select(Moves.ENCORE); + await game.forceEnemyMove(Moves.TACKLE); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("BerryPhase"); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)!["moveId"]).toBe(Moves.TACKLE); + expect(enemyPokemon.getLastXMoves()[0].move).toBe(Moves.TACKLE); + }); + + // TODO: stomping tantrum should consider moves that were bounced. + it.todo("should cause stomping tantrum to double in power when the last move was bounced", async () => { + game.override.battleType("single"); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.moveset([ Moves.STOMPING_TANTRUM, Moves.CHARM ]); + + const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + vi.spyOn(stomping_tantrum, "calculateBattlePower"); + + game.move.select(Moves.CHARM); + await game.toNextTurn(); + + game.move.select(Moves.STOMPING_TANTRUM); + await game.phaseInterceptor.to("BerryPhase"); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(150); + }); + + // TODO: stomping tantrum should consider moves that were bounced. + it.todo("should properly cause the enemy's stomping tantrum to be doubled in power after bouncing and failing", async () => { + game.override.enemyMoveset([ Moves.STOMPING_TANTRUM, Moves.SPLASH, Moves.CHARM ]); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + + const stomping_tantrum = allMoves[Moves.STOMPING_TANTRUM]; + const enemy = game.scene.getEnemyPokemon()!; + vi.spyOn(stomping_tantrum, "calculateBattlePower"); + + game.move.select(Moves.SPORE); + await game.forceEnemyMove(Moves.CHARM); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemy.getLastXMoves(1)[0].result).toBe("success"); + + await game.phaseInterceptor.to("BerryPhase"); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); + + await game.toNextTurn(); + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + expect(stomping_tantrum.calculateBattlePower).toHaveReturnedWith(75); + }); + + it("should respect immunities when bouncing a move", async () => { + vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + game.override.moveset([ Moves.THUNDER_WAVE, Moves.GROWL ]); + game.override.ability(Abilities.SOUNDPROOF); + await game.classicMode.startBattle([ Species.PHANPY ]); + + // Turn 1 - thunder wave immunity test + game.move.select(Moves.THUNDER_WAVE); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + + // Turn 2 - soundproof immunity test + game.move.select(Moves.GROWL); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should bounce back a move before the accuracy check", async () => { + game.override.moveset([ Moves.SPORE ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const attacker = game.scene.getPlayerPokemon()!; + + vi.spyOn(attacker, "getAccuracyMultiplier").mockReturnValue(0.0); + game.move.select(Moves.SPORE); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.status?.effect).toBe(StatusEffect.SLEEP); + }); + + it("should take the accuracy of the magic bounce user into account", async () => { + game.override.moveset([ Moves.SPORE ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + const opponent = game.scene.getEnemyPokemon()!; + + vi.spyOn(opponent, "getAccuracyMultiplier").mockReturnValue(0); + game.move.select(Moves.SPORE); + await game.phaseInterceptor.to("BerryPhase"); + expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + }); +}); From b31d5fd23e2f8b5263d797ad560eb8506c57dd4a Mon Sep 17 00:00:00 2001 From: geeilhan <107366005+geeilhan@users.noreply.github.com> Date: Tue, 11 Feb 2025 12:26:01 +0100 Subject: [PATCH 06/23] [Move] Spectral Thief Full Implementation (#4891) * fully implemented spectral thief * Update to structure of implementation * line commented target.scene.queueMessage since message does not exist yet * changed documentation * added move-trigger.json key * removed line comment since key was added to english locales * removed console.log messages used for debugging * refactored move-trigger key to race with @muscode13 * added more automated tests * github tests failed * removed line comment since key was added to english locales * refactored move-trigger key to race with @muscode13 * added more automated tests * github tests failed * solved conflicts * Update src/data/move.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * removed .partial() * corrected spectral thief name * changed target.scene to globalScene * changed comments --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --- src/data/move.ts | 67 +++++++- src/field/pokemon.ts | 41 ++++- src/test/moves/spectral_thief.test.ts | 224 ++++++++++++++++++++++++++ 3 files changed, 329 insertions(+), 3 deletions(-) create mode 100644 src/test/moves/spectral_thief.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index 75908f86a14..1c768f20bb0 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -4380,6 +4380,69 @@ export class CueNextRoundAttr extends MoveEffectAttr { } } +/** + * Attribute that changes stat stages before the damage is calculated + */ +export class StatChangeBeforeDmgCalcAttr extends MoveAttr { + /** + * Applies Stat Changes before damage is calculated + * + * @param user {@linkcode Pokemon} that called {@linkcode move} + * @param target {@linkcode Pokemon} that is the target of {@linkcode move} + * @param move {@linkcode Move} called by {@linkcode user} + * @param args N/A + * + * @returns true if stat stages where correctly applied + */ + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + return false; + } +} + +/** + * Steals the postitive Stat stages of the target before damage calculation so stat changes + * apply to damage calculation (e.g. {@linkcode Moves.SPECTRAL_THIEF}) + * {@link https://bulbapedia.bulbagarden.net/wiki/Spectral_Thief_(move) | Spectral Thief} + */ +export class SpectralThiefAttr extends StatChangeBeforeDmgCalcAttr { + /** + * steals max amount of positive stats of the target while not exceeding the limit of max 6 stat stages + * + * @param user {@linkcode Pokemon} that called {@linkcode move} + * @param target {@linkcode Pokemon} that is the target of {@linkcode move} + * @param move {@linkcode Move} called by {@linkcode user} + * @param args N/A + * + * @returns true if stat stages where correctly stolen + */ + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + /** + * Copy all positive stat stages to user and reduce copied stat stages on target. + */ + for (const s of BATTLE_STATS) { + const statStageValueTarget = target.getStatStage(s); + const statStageValueUser = user.getStatStage(s); + + if (statStageValueTarget > 0) { + /** + * Only value of up to 6 can be stolen (stat stages don't exceed 6) + */ + const availableToSteal = Math.min(statStageValueTarget, 6 - statStageValueUser); + + globalScene.unshiftPhase(new StatStageChangePhase(user.getBattlerIndex(), this.selfTarget, [ s ], availableToSteal)); + target.setStatStage(s, statStageValueTarget - availableToSteal); + } + } + + target.updateInfo(); + user.updateInfo(); + globalScene.queueMessage(i18next.t("moveTriggers:stealPositiveStats", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); + + return true; + } + +} + export class VariableAtkAttr extends MoveAttr { constructor() { super(); @@ -10467,8 +10530,8 @@ export function initMoves() { new AttackMove(Moves.PRISMATIC_LASER, Type.PSYCHIC, MoveCategory.SPECIAL, 160, 100, 10, -1, 0, 7) .attr(RechargeAttr), new AttackMove(Moves.SPECTRAL_THIEF, Type.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 7) - .ignoresSubstitute() - .partial(), // Does not steal stats + .attr(SpectralThiefAttr) + .ignoresSubstitute(), new AttackMove(Moves.SUNSTEEL_STRIKE, Type.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 7) .ignoresAbilities(), new AttackMove(Moves.MOONGEIST_BEAM, Type.GHOST, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 79d7192b4db..82674fb8b46 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -7,7 +7,40 @@ import { variantColorCache } from "#app/data/variant"; import { variantData } from "#app/data/variant"; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "#app/ui/battle-info"; import type Move from "#app/data/move"; -import { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget, CombinedPledgeStabBoostAttr, VariableMoveTypeChartAttr, HpSplitAttr } from "#app/data/move"; +import { + HighCritAttr, + StatChangeBeforeDmgCalcAttr, + HitsTagAttr, + applyMoveAttrs, + FixedDamageAttr, + VariableAtkAttr, + allMoves, + MoveCategory, + TypelessAttr, + CritOnlyAttr, + getMoveTargets, + OneHitKOAttr, + VariableMoveTypeAttr, + VariableDefAttr, + AttackMove, + ModifiedDamageAttr, + VariableMoveTypeMultiplierAttr, + IgnoreOpponentStatStagesAttr, + SacrificialAttr, + VariableMoveCategoryAttr, + CounterDamageAttr, + StatStageChangeAttr, + RechargeAttr, + IgnoreWeatherTypeDebuffAttr, + BypassBurnDamageReductionAttr, + SacrificialAttrOnHit, + OneHitKOAccuracyAttr, + RespectAttackTypeImmunityAttr, + MoveTarget, + CombinedPledgeStabBoostAttr, + VariableMoveTypeChartAttr, + HpSplitAttr +} from "#app/data/move"; import type { PokemonSpeciesForm } from "#app/data/pokemon-species"; import { default as PokemonSpecies, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; @@ -2903,6 +2936,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { isCritical = false; } + /** + * Applies stat changes from {@linkcode move} and gives it to {@linkcode source} + * before damage calculation + */ + applyMoveAttrs(StatChangeBeforeDmgCalcAttr, source, this, move); + const { cancelled, result, damage: dmg } = this.getAttackDamage(source, move, false, false, isCritical, false); const typeBoost = source.findTag(t => t instanceof TypeBoostTag && t.boostedType === source.getMoveType(move)) as TypeBoostTag; diff --git a/src/test/moves/spectral_thief.test.ts b/src/test/moves/spectral_thief.test.ts new file mode 100644 index 00000000000..8913b7f3683 --- /dev/null +++ b/src/test/moves/spectral_thief.test.ts @@ -0,0 +1,224 @@ +import { Abilities } from "#enums/abilities"; +import { BattlerIndex } from "#app/battle"; +import { Stat } from "#enums/stat"; +import { allMoves } from "#app/data/move"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Spectral Thief", () => { + 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 + .enemySpecies(Species.SHUCKLE) + .enemyLevel(100) + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.BALL_FETCH) + .moveset([ Moves.SPECTRAL_THIEF, Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .disableCrits; + }); + + it("should steal max possible positive stat changes and ignore negative ones.", async () => { + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 6); + enemy.setStatStage(Stat.DEF, -6); + enemy.setStatStage(Stat.SPATK, 6); + enemy.setStatStage(Stat.SPDEF, -6); + enemy.setStatStage(Stat.SPD, 3); + + player.setStatStage(Stat.ATK, 4); + player.setStatStage(Stat.DEF, 1); + player.setStatStage(Stat.SPATK, 0); + player.setStatStage(Stat.SPDEF, 0); + player.setStatStage(Stat.SPD, -2); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + /** + * enemy has +6 ATK and player +4 => player only steals +2 + * enemy has -6 DEF and player 1 => player should not steal + * enemy has +6 SPATK and player 0 => player only steals +6 + * enemy has -6 SPDEF and player 0 => player should not steal + * enemy has +3 SPD and player -2 => player only steals +3 + */ + expect(player.getStatStages()).toEqual([ 6, 1, 6, 0, 1, 0, 0 ]); + expect(enemy.getStatStages()).toEqual([ 4, -6, 0, -6, 0, 0, 0 ]); + }); + + it("should steal stat stages before dmg calculation", async () => { + game.override + .enemySpecies(Species.MAGIKARP) + .enemyLevel(50); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + const moveToCheck = allMoves[Moves.SPECTRAL_THIEF]; + const dmgBefore = enemy.getAttackDamage(player, moveToCheck, false, false, false, false).damage; + + enemy.setStatStage(Stat.ATK, 6); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(dmgBefore).toBeLessThan(enemy.getAttackDamage(player, moveToCheck, false, false, false, false).damage); + }); + + it("should steal stat stages as a negative value with Contrary.", async () => { + game.override + .ability(Abilities.CONTRARY); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 6); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(-6); + expect(enemy.getStatStage(Stat.ATK)).toEqual(0); + }); + + it("should steal double the stat stages with Simple.", async () => { + game.override + .ability(Abilities.SIMPLE); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 3); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(6); + expect(enemy.getStatStage(Stat.ATK)).toEqual(0); + }); + + it("should steal the stat stages through Clear Body.", async () => { + game.override + .enemyAbility(Abilities.CLEAR_BODY); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 3); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(3); + expect(enemy.getStatStage(Stat.ATK)).toEqual(0); + }); + + it("should steal the stat stages through White Smoke.", async () => { + game.override + .enemyAbility(Abilities.WHITE_SMOKE); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 3); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(3); + expect(enemy.getStatStage(Stat.ATK)).toEqual(0); + }); + + it("should steal the stat stages through Hyper Cutter.", async () => { + game.override + .enemyAbility(Abilities.HYPER_CUTTER); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 3); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(3); + expect(enemy.getStatStage(Stat.ATK)).toEqual(0); + }); + + it("should bypass Substitute.", async () => { + game.override + .enemyMoveset(Moves.SUBSTITUTE); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 3); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(3); + expect(enemy.getStatStage(Stat.ATK)).toEqual(0); + expect(enemy.hp).toBeLessThan(enemy.getMaxHp() - 1); + }); + + it("should get blocked by protect.", async () => { + game.override + .enemyMoveset(Moves.PROTECT); + await game.classicMode.startBattle(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.setStatStage(Stat.ATK, 3); + + player.setStatStage(Stat.ATK, 0); + + game.move.select(Moves.SPECTRAL_THIEF); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStatStage(Stat.ATK)).toEqual(0); + expect(enemy.getStatStage(Stat.ATK)).toEqual(3); + expect(enemy.hp).toBe(enemy.getMaxHp()); + }); +}); From 7fea8603f3f34ad639debfda6a45191af42d33bf Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 11 Feb 2025 16:41:22 -0500 Subject: [PATCH 07/23] [Refactor] Add support for showing separate species form names (#5294) * Support for localization of regional form names * Show names of regional and other forms where appropriate * Add form name to evolution screen * Remove formKey parameter * Update docstrings * More SpeciesFormKey Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> * Clean up * Fix inconsistent key name --------- Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> --- src/data/pokemon-species.ts | 50 +++++++++++++++++++++++++ src/phases/egg-hatch-phase.ts | 3 +- src/phases/evolution-phase.ts | 2 +- src/ui/pokedex-page-ui-handler.ts | 57 +++++------------------------ src/ui/pokemon-info-container.ts | 19 +--------- src/ui/starter-select-ui-handler.ts | 13 ++----- 6 files changed, 66 insertions(+), 78 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 55da6a7e76c..041632b183d 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -690,6 +690,56 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali return this.name; } + /** + * Find the name of species with proper attachments for regionals and separate starter forms (Floette, Ursaluna) + * @returns a string with the region name or other form name attached + */ + getExpandedSpeciesName(): string { + if (this.speciesId < 2000) { + return this.name; // Other special cases could be put here too + } else { // Everything beyond this point essentially follows the pattern of FORMNAME_SPECIES + return i18next.t(`pokemonForm:appendForm.${Species[this.speciesId].split("_")[0]}`, { pokemonName: this.name }); + } + } + + /** + * Find the form name for species with just one form (regional variants, Floette, Ursaluna) + * @param formIndex The form index to check (defaults to 0) + * @param append Whether to append the species name to the end (defaults to false) + * @returns the pokemon-form locale key for the single form name ("Alolan Form", "Eternal Flower" etc) + */ + getFormNameToDisplay(formIndex: number = 0, append: boolean = false): string { + const formKey = this.forms?.[formIndex!]?.formKey; + const formText = Utils.capitalizeString(formKey, "-", false, false) || ""; + const speciesName = Utils.capitalizeString(Species[this.speciesId], "_", true, false); + let ret: string = ""; + + const region = this.getRegion(); + if (this.speciesId === Species.ARCEUS) { + ret = i18next.t(`pokemonInfo:Type.${formText?.toUpperCase()}`); + } else if ([ SpeciesFormKey.MEGA, SpeciesFormKey.MEGA_X, SpeciesFormKey.MEGA_Y, SpeciesFormKey.PRIMAL, SpeciesFormKey.GIGANTAMAX, SpeciesFormKey.GIGANTAMAX_RAPID, SpeciesFormKey.GIGANTAMAX_SINGLE, SpeciesFormKey.ETERNAMAX ].includes(formKey as SpeciesFormKey)) { + return i18next.t(`battlePokemonForm:${formKey}`, { pokemonName: (append ? this.name : "") }); + } else if (region === Region.NORMAL || (this.speciesId === Species.GALAR_DARMANITAN && formIndex > 0) || this.speciesId === Species.PALDEA_TAUROS) { // More special cases can be added here + const i18key = `pokemonForm:${speciesName}${formText}`; + if (i18next.exists(i18key)) { + ret = i18next.t(i18key); + } else { + const rootSpeciesName = Utils.capitalizeString(Species[this.getRootSpeciesId()], "_", true, false); + const i18RootKey = `pokemonForm:${rootSpeciesName}${formText}`; + ret = i18next.exists(i18RootKey) ? i18next.t(i18RootKey) : formText; + } + } else if (append) { // Everything beyond this has an expanded name + return this.getExpandedSpeciesName(); + } else if (this.speciesId === Species.ETERNAL_FLOETTE) { // Not a real form, so the key is made up + return i18next.t("pokemonForm:floetteEternalFlower"); + } else if (this.speciesId === Species.BLOODMOON_URSALUNA) { // Not a real form, so the key is made up + return i18next.t("pokemonForm:ursalunaBloodmoon"); + } else { // Only regional forms should be left at this point + return i18next.t(`pokemonForm:regionalForm.${Region[region]}`); + } + return append ? i18next.t("pokemonForm:appendForm.GENERIC", { pokemonName: this.name, formName: ret }) : ret; + } + localize(): void { this.name = i18next.t(`pokemon:${Species[this.speciesId].toLowerCase()}`); } diff --git a/src/phases/egg-hatch-phase.ts b/src/phases/egg-hatch-phase.ts index 2d0aa24dd1f..b2844591e33 100644 --- a/src/phases/egg-hatch-phase.ts +++ b/src/phases/egg-hatch-phase.ts @@ -3,7 +3,6 @@ import { globalScene } from "#app/global-scene"; import type { Egg } from "#app/data/egg"; import { EggCountChangedEvent } from "#app/events/egg"; import type { PlayerPokemon } from "#app/field/pokemon"; -import { getPokemonNameWithAffix } from "#app/messages"; import { Phase } from "#app/phase"; import { achvs } from "#app/system/achv"; import EggCounterContainer from "#app/ui/egg-counter-container"; @@ -356,7 +355,7 @@ export class EggHatchPhase extends Phase { globalScene.playSoundWithoutBgm("evolution_fanfare"); - globalScene.ui.showText(i18next.t("egg:hatchFromTheEgg", { pokemonName: getPokemonNameWithAffix(this.pokemon) }), null, () => { + globalScene.ui.showText(i18next.t("egg:hatchFromTheEgg", { pokemonName: this.pokemon.species.getExpandedSpeciesName() }), null, () => { globalScene.gameData.updateSpeciesDexIvs(this.pokemon.species.speciesId, this.pokemon.ivs); globalScene.gameData.setPokemonCaught(this.pokemon, true, true).then(() => { globalScene.gameData.setEggMoveUnlocked(this.pokemon.species, this.eggMoveIndex).then((value) => { diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index 533edd320e3..12d2923ec36 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -270,7 +270,7 @@ export class EvolutionPhase extends Phase { globalScene.playSoundWithoutBgm("evolution_fanfare"); evolvedPokemon.destroy(); - globalScene.ui.showText(i18next.t("menu:evolutionDone", { pokemonName: this.preEvolvedPokemonName, evolvedPokemonName: this.pokemon.name }), null, () => this.end(), null, true, Utils.fixedInt(4000)); + globalScene.ui.showText(i18next.t("menu:evolutionDone", { pokemonName: this.preEvolvedPokemonName, evolvedPokemonName: this.pokemon.species.getExpandedSpeciesName() }), null, () => this.end(), null, true, Utils.fixedInt(4000)); globalScene.time.delayedCall(Utils.fixedInt(4250), () => globalScene.playBgm()); }); }); diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 2047095d067..683045d7814 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -15,7 +15,6 @@ import type { SpeciesFormChange } from "#app/data/pokemon-forms"; 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 { PokemonForm } from "#app/data/pokemon-species"; import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; @@ -44,7 +43,7 @@ import { Species } from "#enums/species"; import { Button } from "#enums/buttons"; import { EggSourceType } from "#enums/egg-source-types"; import { getPassiveCandyCount, getValueReductionCandyCounts, getSameSpeciesEggCandyCounts } from "#app/data/balance/starters"; -import { BooleanHolder, capitalizeString, getLocalizedSpriteKey, isNullOrUndefined, NumberHolder, padInt, rgbHexToRgba, toReadableString } from "#app/utils"; +import { BooleanHolder, getLocalizedSpriteKey, isNullOrUndefined, NumberHolder, padInt, rgbHexToRgba, toReadableString } from "#app/utils"; import type { Nature } from "#enums/nature"; import BgmBar from "./bgm-bar"; import * as Utils from "../utils"; @@ -899,43 +898,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } } - /** - * Assign a form string to a given species and form - * @param formKey the form to format - * @param species the species to format - * @param speciesId whether the name of the species should be shown at the end - * @returns the formatted string - */ - getFormString(formKey: string, species: PokemonSpecies, append: boolean = false): string { - let label: string; - const formText = capitalizeString(formKey, "-", false, false) ?? ""; - const speciesName = capitalizeString(this.getStarterSpecies(species).name, "_", true, false) ?? ""; - if (species.speciesId === Species.ARCEUS) { - label = i18next.t(`pokemonInfo:Type.${formText?.toUpperCase()}`); - return label; - } - label = formText ? i18next.t(`pokemonForm:${speciesName}${formText}`) : ""; - if (label === `${speciesName}${formText}`) { - label = i18next.t(`battlePokemonForm:${formKey}`, { pokemonName:species.name }); - } else { - // If the label is only the form, we can append the name of the pokemon - label += append ? ` ${species.name}` : ""; - } - return label; - } - - /** - * Find the name of the region for regional species - * @param species the species to check - * @returns a string with the region name - */ - getRegionName(species: PokemonSpecies): string { - const name = species.name; - const label = Species[species.speciesId]; - const suffix = label.includes("_") ? " (" + label.split("_")[0].toLowerCase() + ")" : ""; - return name + suffix; - } - processInput(button: Button): boolean { if (this.blockInput) { return false; @@ -1375,13 +1337,14 @@ export default class PokedexPageUiHandler extends MessageUiHandler { }); this.prevolutions.map(pre => { const preSpecies = allSpecies.find(species => species.speciesId === pokemonPrevolutions[this.species.speciesId]); + const preFormIndex: number = preSpecies?.forms.find(f => f.formKey === pre.preFormKey)?.formIndex ?? 0; const conditionText: string = pre.description; options.push({ label: pre.preFormKey ? - this.getFormString(pre.preFormKey, preSpecies ?? this.species, true) : - this.getRegionName(preSpecies ?? this.species), + (preSpecies ?? this.species).getFormNameToDisplay(preFormIndex, true) : + (preSpecies ?? this.species).getExpandedSpeciesName(), handler: () => { const newSpecies = allSpecies.find(species => species.speciesId === pokemonPrevolutions[pre.speciesId]); // Attempts to find the formIndex of the prevolved species @@ -1421,8 +1384,8 @@ export default class PokedexPageUiHandler extends MessageUiHandler { options.push({ label: evo.evoFormKey ? - this.getFormString(evo.evoFormKey, evoSpecies ?? this.species, true) : - this.getRegionName(evoSpecies ?? this.species), + (evoSpecies ?? this.species).getFormNameToDisplay(newFormIndex, true) : + (evoSpecies ?? this.species).getExpandedSpeciesName(), style: isCaughtEvo && isFormCaughtEvo ? TextStyle.WINDOW : TextStyle.SHADOW_TEXT, handler: () => { this.starterAttributes.form = newFormIndex; @@ -1445,6 +1408,8 @@ export default class PokedexPageUiHandler extends MessageUiHandler { handler: () => false }); this.battleForms.map(bf => { + const matchingForm = this.species?.forms.find(form => form.formKey === bf.formKey); + const newFormIndex = matchingForm ? matchingForm.formIndex : 0; let conditionText:string = ""; if (bf.trigger) { @@ -1452,12 +1417,10 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } else { conditionText = ""; } - let label: string = this.getFormString(bf.formKey, this.species); + let label: string = this.species.getFormNameToDisplay(newFormIndex); if (label === "") { label = this.species.name; } - const matchingForm = this.species?.forms.find(form => form.formKey === bf.formKey); - const newFormIndex = matchingForm ? matchingForm.formIndex : 0; const isFormCaught = this.isFormCaught(this.species, newFormIndex); if (conditionText) { @@ -2313,7 +2276,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { if (isFormCaught || isFormSeen) { const speciesForm = getPokemonSpeciesForm(species.speciesId, formIndex!); // TODO: is the bang correct? this.setTypeIcons(speciesForm.type1, speciesForm.type2); - this.pokemonFormText.setText(this.getFormString((speciesForm as PokemonForm).formKey, species)); + this.pokemonFormText.setText(species.getFormNameToDisplay(formIndex)); this.pokemonFormText.setVisible(true); if (!isFormCaught) { this.pokemonFormText.setY(18); diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 554cea39731..eda5ac3f580 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -13,7 +13,6 @@ import ConfirmUiHandler from "./confirm-ui-handler"; import { StatsContainer } from "./stats-container"; import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text"; import { addWindow } from "./ui-theme"; -import { Species } from "#enums/species"; interface LanguageSetting { infoContainerTextSize: string; @@ -218,23 +217,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { this.pokemonGenderText.setVisible(false); } - const formKey = (pokemon.species?.forms?.[pokemon.formIndex!]?.formKey); - const formText = Utils.capitalizeString(formKey, "-", false, false) || ""; - const speciesName = Utils.capitalizeString(Species[pokemon.species.speciesId], "_", true, false); - - let formName = ""; - if (pokemon.species.speciesId === Species.ARCEUS) { - formName = i18next.t(`pokemonInfo:Type.${formText?.toUpperCase()}`); - } else { - const i18key = `pokemonForm:${speciesName}${formText}`; - if (i18next.exists(i18key)) { - formName = i18next.t(i18key); - } else { - const rootSpeciesName = Utils.capitalizeString(Species[pokemon.species.getRootSpeciesId()], "_", true, false); - const i18RootKey = `pokemonForm:${rootSpeciesName}${formText}`; - formName = i18next.exists(i18RootKey) ? i18next.t(i18RootKey) : formText; - } - } + const formName = pokemon.species.getFormNameToDisplay(pokemon.formIndex); if (formName) { this.pokemonFormLabelText.setVisible(true); diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 5476f38cc6a..65c159c62a8 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -53,7 +53,7 @@ import { EncounterPhase } from "#app/phases/encounter-phase"; import { TitlePhase } from "#app/phases/title-phase"; import { Abilities } from "#enums/abilities"; import { getPassiveCandyCount, getValueReductionCandyCounts, getSameSpeciesEggCandyCounts } from "#app/data/balance/starters"; -import { BooleanHolder, capitalizeString, fixedInt, getLocalizedSpriteKey, isNullOrUndefined, NumberHolder, padInt, randIntRange, rgbHexToRgba, toReadableString } from "#app/utils"; +import { BooleanHolder, fixedInt, getLocalizedSpriteKey, isNullOrUndefined, NumberHolder, padInt, randIntRange, rgbHexToRgba, toReadableString } from "#app/utils"; import type { Nature } from "#enums/nature"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; @@ -3408,15 +3408,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { }) as StarterMoveset; const speciesForm = getPokemonSpeciesForm(species.speciesId, formIndex!); // TODO: is the bang correct? - const formText = capitalizeString(species?.forms[formIndex!]?.formKey, "-", false, false); // TODO: is the bang correct? - - const speciesName = capitalizeString(Species[species.speciesId], "_", true, false); - - if (species.speciesId === Species.ARCEUS) { - this.pokemonFormText.setText(i18next.t(`pokemonInfo:Type.${formText?.toUpperCase()}`)); - } else { - this.pokemonFormText.setText(formText ? i18next.t(`pokemonForm:${speciesName}${formText}`) : ""); - } + const formText = species.getFormNameToDisplay(formIndex); + this.pokemonFormText.setText(formText); this.setTypeIcons(speciesForm.type1, speciesForm.type2); } else { From 5045b637ff14a3c0d6fe97db7c80faca1ed5dfa1 Mon Sep 17 00:00:00 2001 From: damocleas Date: Tue, 11 Feb 2025 17:10:25 -0500 Subject: [PATCH 08/23] [Balance] Item Table Removals and increased Wide Lens Frequency (#5296) * Update modifier-type.ts * Up weight of event DNA Splicers * fix attempt 1 * Removed 100 pokemon minimum requirement for Catching Charm commit fontbane suggestion Co-authored-by: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> * Removed unused items from item table * removed selfStatLowerMoves --------- Co-authored-by: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> --- src/modifier/modifier-type.ts | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index b1e8b69df36..da2ab49e9fc 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { tmPoolTiers, tmSpecies } from "#app/data/balance/tms"; import { getBerryEffectDescription, getBerryName } from "#app/data/berry"; -import { allMoves, AttackMove, selfStatLowerMoves } from "#app/data/move"; +import { allMoves, AttackMove } from "#app/data/move"; import { getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeCondition, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; @@ -1725,7 +1725,7 @@ const modifierPool: ModifierPool = { if (globalScene.gameMode.isSplicedOnly) { return 4; } else if (globalScene.gameMode.isClassic && globalScene.eventManager.areFusionsBoosted()) { - return 1; + return 2; } } return 0; @@ -1833,14 +1833,6 @@ const modifierPool: ModifierPool = { return false; }) ? 10 : 0; }, 10), - new WeightedModifierType(modifierTypes.WHITE_HERB, (party: Pokemon[]) => { - const checkedAbilities = [ Abilities.WEAK_ARMOR, Abilities.CONTRARY, Abilities.MOODY, Abilities.ANGER_SHELL, Abilities.COMPETITIVE, Abilities.DEFIANT ]; - const weightMultiplier = party.filter( - p => !p.getHeldItems().some(i => i instanceof ResetNegativeStatStageModifier && i.stackCount >= i.getMaxHeldItemCount(p)) && - (checkedAbilities.some(a => p.hasAbility(a, false, true)) || p.getMoveset(true).some(m => m && selfStatLowerMoves.includes(m.moveId)))).length; - // If a party member has one of the above moves or abilities and doesn't have max herbs, the herb will appear more frequently - return 0 * (weightMultiplier ? 2 : 1) + (weightMultiplier ? weightMultiplier * 0 : 0); - }, 10), new WeightedModifierType(modifierTypes.REVIVER_SEED, 4), new WeightedModifierType(modifierTypes.CANDY_JAR, skipInLastClassicWaveOrDefault(5)), new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 9), @@ -1850,10 +1842,9 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.IV_SCANNER, skipInLastClassicWaveOrDefault(4)), new WeightedModifierType(modifierTypes.EXP_CHARM, skipInLastClassicWaveOrDefault(8)), new WeightedModifierType(modifierTypes.EXP_SHARE, skipInLastClassicWaveOrDefault(10)), - new WeightedModifierType(modifierTypes.EXP_BALANCE, skipInLastClassicWaveOrDefault(3)), new WeightedModifierType(modifierTypes.TERA_ORB, () => Math.min(Math.max(Math.floor(globalScene.currentBattle.waveIndex / 50) * 2, 1), 4), 4), new WeightedModifierType(modifierTypes.QUICK_CLAW, 3), - new WeightedModifierType(modifierTypes.WIDE_LENS, 4), + new WeightedModifierType(modifierTypes.WIDE_LENS, 7), ].map(m => { m.setTier(ModifierTier.ULTRA); return m; }), @@ -1867,8 +1858,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.SCOPE_LENS, 4), new WeightedModifierType(modifierTypes.BATON, 2), new WeightedModifierType(modifierTypes.SOUL_DEW, 7), - //new WeightedModifierType(modifierTypes.OVAL_CHARM, 6), - new WeightedModifierType(modifierTypes.CATCHING_CHARM, () => globalScene.gameMode.isDaily || (!globalScene.gameMode.isFreshStartChallenge() && globalScene.gameData.getSpeciesCount(d => !!d.caughtAttr) > 100) ? 4 : 0, 4), + new WeightedModifierType(modifierTypes.CATCHING_CHARM, () => !globalScene.gameMode.isClassic ? 4 : 0, 4), new WeightedModifierType(modifierTypes.ABILITY_CHARM, skipInClassicAfterWave(189, 6)), new WeightedModifierType(modifierTypes.FOCUS_BAND, 5), new WeightedModifierType(modifierTypes.KINGS_ROCK, 3), From 195a3936b32a5be9964c203c8d8d40ab032f317e Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 11 Feb 2025 17:34:40 -0500 Subject: [PATCH 09/23] [Sprite] Update Litleo/Pyroar exp sprites, enable female exp sprites (#5260) * Enable female experimental sprites * Update Litleo/Pyroar exp sprites Co-authored-by: Unicornpowerstar * Update sprite test to check exp female variants * Fix shading on shiny Pyroar, remove unused 668-female files --------- Co-authored-by: Unicornpowerstar --- public/exp-sprites.json | 24 +- public/images/pokemon/back/668-female.json | 41 - public/images/pokemon/back/668-female.png | Bin 791 -> 0 bytes .../images/pokemon/back/shiny/668-female.json | 41 - .../images/pokemon/back/shiny/668-female.png | Bin 792 -> 0 bytes public/images/pokemon/exp/667.json | 929 +++++-- public/images/pokemon/exp/667.png | Bin 1284 -> 2189 bytes public/images/pokemon/exp/668.json | 1091 ++++++-- public/images/pokemon/exp/668.png | Bin 2068 -> 29671 bytes public/images/pokemon/exp/back/667.json | 784 +++++- public/images/pokemon/exp/back/667.png | Bin 914 -> 1872 bytes public/images/pokemon/exp/back/668.json | 967 ++++++-- public/images/pokemon/exp/back/668.png | Bin 1340 -> 22449 bytes .../images/pokemon/exp/back/female/6215.json | 1028 ++++++++ .../images/pokemon/exp/back/female/6215.png | Bin 0 -> 2470 bytes .../images/pokemon/exp/back/female/668.json | 821 +++++++ public/images/pokemon/exp/back/female/668.png | Bin 0 -> 24896 bytes public/images/pokemon/exp/back/shiny/667.json | 2189 +++++------------ public/images/pokemon/exp/back/shiny/667.png | Bin 1780 -> 1872 bytes public/images/pokemon/exp/back/shiny/668.json | 967 ++++++-- public/images/pokemon/exp/back/shiny/668.png | Bin 1340 -> 22449 bytes .../pokemon/exp/back/shiny/female/6215.json | 1028 ++++++++ .../pokemon/exp/back/shiny/female/6215.png | Bin 0 -> 2470 bytes .../pokemon/exp/back/shiny/female/668.json | 820 ++++++ .../pokemon/exp/back/shiny/female/668.png | Bin 0 -> 24896 bytes public/images/pokemon/exp/female/6215.json | 2078 ++++++++++++++++ public/images/pokemon/exp/female/6215.png | Bin 0 -> 5197 bytes public/images/pokemon/exp/female/668.json | 820 ++++++ public/images/pokemon/exp/female/668.png | Bin 0 -> 23683 bytes public/images/pokemon/exp/shiny/667.json | 929 +++++-- public/images/pokemon/exp/shiny/667.png | Bin 1285 -> 2189 bytes public/images/pokemon/exp/shiny/668.json | 1091 ++++++-- public/images/pokemon/exp/shiny/668.png | Bin 2068 -> 29671 bytes .../images/pokemon/exp/shiny/female/6215.json | 2078 ++++++++++++++++ .../images/pokemon/exp/shiny/female/6215.png | Bin 0 -> 5197 bytes .../images/pokemon/exp/shiny/female/668.json | 820 ++++++ .../images/pokemon/exp/shiny/female/668.png | Bin 0 -> 23683 bytes public/images/pokemon/shiny/668-female.json | 41 - public/images/pokemon/shiny/668-female.png | Bin 899 -> 0 bytes public/images/pokemon/shiny/668.png | Bin 1043 -> 1076 bytes public/images/pokemon/shiny/female/668.png | Bin 899 -> 940 bytes .../images/pokemon/variant/_masterlist.json | 9 +- .../pokemon/variant/exp/back/female/6215.json | 32 + .../pokemon/variant/exp/female/6215.json | 38 + src/test/sprites/pokemonSprite.test.ts | 28 +- 45 files changed, 15527 insertions(+), 3167 deletions(-) delete mode 100644 public/images/pokemon/back/668-female.json delete mode 100644 public/images/pokemon/back/668-female.png delete mode 100644 public/images/pokemon/back/shiny/668-female.json delete mode 100644 public/images/pokemon/back/shiny/668-female.png create mode 100644 public/images/pokemon/exp/back/female/6215.json create mode 100644 public/images/pokemon/exp/back/female/6215.png create mode 100644 public/images/pokemon/exp/back/female/668.json create mode 100644 public/images/pokemon/exp/back/female/668.png create mode 100644 public/images/pokemon/exp/back/shiny/female/6215.json create mode 100644 public/images/pokemon/exp/back/shiny/female/6215.png create mode 100644 public/images/pokemon/exp/back/shiny/female/668.json create mode 100644 public/images/pokemon/exp/back/shiny/female/668.png create mode 100644 public/images/pokemon/exp/female/6215.json create mode 100644 public/images/pokemon/exp/female/6215.png create mode 100644 public/images/pokemon/exp/female/668.json create mode 100644 public/images/pokemon/exp/female/668.png create mode 100644 public/images/pokemon/exp/shiny/female/6215.json create mode 100644 public/images/pokemon/exp/shiny/female/6215.png create mode 100644 public/images/pokemon/exp/shiny/female/668.json create mode 100644 public/images/pokemon/exp/shiny/female/668.png delete mode 100644 public/images/pokemon/shiny/668-female.json delete mode 100644 public/images/pokemon/shiny/668-female.png create mode 100644 public/images/pokemon/variant/exp/back/female/6215.json create mode 100644 public/images/pokemon/variant/exp/female/6215.json diff --git a/public/exp-sprites.json b/public/exp-sprites.json index 947bffd399d..6ee812d67be 100644 --- a/public/exp-sprites.json +++ b/public/exp-sprites.json @@ -201,6 +201,8 @@ "6211", "6215", "6215", + "6215f", + "6215f", "65-mega", "65-mega", "650", @@ -291,8 +293,8 @@ "666-tundra", "667", "667", - "668-female", - "668-female", + "668f", + "668f", "668", "668", "669-blue", @@ -1333,6 +1335,8 @@ "6211b", "6215b", "6215b", + "6215bf", + "6215bf", "65b-mega", "65b-mega", "650b", @@ -1423,8 +1427,8 @@ "666b-tundra", "667b", "667b", - "668b-female", - "668b-female", + "668bf", + "668bf", "668b", "668b", "669b-blue", @@ -2467,6 +2471,8 @@ "6211sb", "6215sb", "6215sb", + "6215sbf", + "6215sbf", "65sb-mega", "65sb-mega", "650sb", @@ -2559,6 +2565,8 @@ "667sb", "668sb", "668sb", + "668sbf", + "668sbf", "669sb-blue", "669sb-blue", "669sb-orange", @@ -3604,6 +3612,8 @@ "6211s", "6215s", "6215s", + "6215sf", + "6215sf", "65s-mega", "65s-mega", "650s", @@ -3694,8 +3704,8 @@ "666s-tundra", "667s", "667s", - "668s-female", - "668s-female", + "668sf", + "668sf", "668s", "668s", "669s-blue", @@ -4587,6 +4597,7 @@ "475-mega_3", "475-mega_3", "6215", + "6215f", "653", "654", "6549", @@ -4856,6 +4867,7 @@ "475b-mega_3", "475b-mega_3", "6215b", + "6215bf", "653b", "654b", "6549b", diff --git a/public/images/pokemon/back/668-female.json b/public/images/pokemon/back/668-female.json deleted file mode 100644 index dc3fc99ba58..00000000000 --- a/public/images/pokemon/back/668-female.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "668-female.png", - "format": "RGBA8888", - "size": { - "w": 74, - "h": 74 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 74, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 74, - "h": 72 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3b22b1fc8fabd22888048f909287acba:10bec1e42fb1d39868a624d00345818d:d99ed0e84a0695b54e479aa98271aba1$" - } -} diff --git a/public/images/pokemon/back/668-female.png b/public/images/pokemon/back/668-female.png deleted file mode 100644 index 6f28278630a2b13f8a44ff4c3dcd8e0efbf25647..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 791 zcmV+y1L*vTP)yFhk5xp2mlbRG=a91Vp|9nw9EAdo3g0vV;{KwFlewL=Hf zDVHH|drQFoT;F?VU90GH&C+i$67R=%&l0vsrfC}Subel>;}KaJ-5e=bX@!XLGrf~X z>9TVIhr=OVc0-7QDp~dG?w;9Is_GRH<;S8rCxl_Pc;xl*^^p|TrPMGmV)lLMz+nhg zL8YolC960y^&wO-3T2S}t=5;J%8P+I58s@fsK?9Ch??twh#fXlB_Hp;UVdrDrUw9G z_Z!zu6ph2;x0z7u0pQlX6k>8DgMfr;L2Gbks^l<1LK=^UsbY87%OjMm&S%b7^Le}**p~R{NTa~NYXCGA#=X+OSPf7unpt7U-7&{X96la6F zh$zXE(pk41RWVn*v!19fQnd$-*|;hwJ5zbB+T1Iv~$iDTvZBE;0pz-Liq+n&UJ;5SjDQ4gy{N@lJo$L=^)1{A=F6~g4IhQSt;Yw z=`v&05$$QFTGXuM1O?@S608W|8UTo*O0Wko#*?6=SJJ4HqWR>nbgCw=dZzkO*`(sB z!UgrB5-OAB@EN@xNyYTO_mF?Zm%wzB?X|$kOQgNV!ZaM3kTD zojgjHof9}54(YOMLKIZVs$aKv%q~+^uZSo=7S%Z+470@}ua2*eq_8ffhJg{Y?@I>` zL#PTWRYfXU#hIxOp^8x`gY0j$z6e!b4Agn}=Ilg0UVKEfy9$WdVKY_o@%Hn@r`_1} z06^?+P-U`o)jg>a;=}BOR`deXpq&*X|X|@R^Rt?y?Ts1!XsB$>pyBd2^3a|u~9o3iEk-(=o z8`OP7NuHF>y6vcnx#FGmM0Js>J!s6v)j`>r${W?@UfE@}+E;{N1u5`_f>oh>L*+1CAtY9@DkLGg{-Y#4Kw~<{u}TPaQiWjkQb<*?yxu66q0=NbMqNoz=0gUk^DCw0n>ZE8s`752O$*Z2JepEK8 zc&czgy{Lo=s&_?H8I8)YlFFDRWeQY&2*{Gk`da`IR~;(eClP)LiW`#&jUlPV|C8TK W^^Bzs9{pqh0000q zifQ|WVyw-bVVqpTvWdCRw%?rB@9*<{y`Ja&{d}L#^L(Gz^VgH(>*H}qK}|tQO6m~U z)74MHYRS02Uq&*|ii`6kkVg4=I7_`@Xe>xXgs*pin}jG$O;j+5Wo4zLq_onKMJ_`HT1Nhk{k4(=L+vh`<9s6pd&8}zrAsEys&KX z<}#PAPQ39vjNs!>Ni)3lbza?2o16XE4>L!ID~%KGv2UF07aY*j?w@9zczpKrdm&+o z&|??P_GnudeAh%Kb$0N7Lf);Kp|Hi_ZC4=lXX`<{zT!#Y)UZ>0{={*3aDPK%8q zMQYo>yTLG1MRi4vCzcBPXSu zZB02+N%TBZWCdK`h2fxzZ1j8wB4YT^P(3*R=|Qzldw??!s6Mlg@qK9gTI?78Xs7&h zT0nHTo~IW9my3xD1#pE&G9X+;~WD*B{go4m#{c^kvsjmU}`J@I_z zKzj2G0<&s>=e$1|CFmp8RR!|MPe^Me_UE+JtdW>mRa*Q1Ux57M2NI&a_5gWWEJX!6lYFIPi zGN8w0ApH?=2Z8%&Wnypw1^=r`J*-ylz}Rcxah@pn=9>b0=40Hd?p#aBglpjZRaP8@Uq!S9zxqdWi1U}-ZpwlX7A?T zx6mWher==q!)etRCbi9AdB|H*X*2jb6o4M5X8xmF|Icx1<*we4UtfZQD=d4ltwP%~ zN+ZP!4j)CDr@(Iwo8yeWO%~z)JLI|{zp=FG7>}s1y~gRqx6f%cvzabVOe#U&MrpYz zJ8h%?N8*kknc8EPY_eup9U%I}os1S@@b$sUGX=(JoKbeniRdwraJ7qzhcUFCXrC@- zKL&q7GO38Fs!!*k-I>0XWG`Yvs5p&-hL;;wcfCq|g)u7(5!nw*8V54=18vzq`4jTz z9S^;kA77xT$Co}=5trq2aSTzSk7|ewH&4i%Kui3>8y_Mak~8@{Y!_rq1R1&4A5Oxp z(9}!d)bH!z5vG4=sn?XWe5PgOlf;((=_s8d@{XGV8!|whCLDo3NSoa$YEnMhAePNh z)JHZvtr5aJ<8|^M-DnLe)#=5#zFAI9(*ej%)d9vu7Be2mjCI0RiIkO+!{&r$y?9_w zwjB4P8lH_7q>uAE&Gh&?D7GZoZk;J~!9aGk#`^q>tx9#+nbf74_4i{E5^{3^i>7>$@QTn{G4kTrf?2`zcidiRdr^j=C(vBxIp$atsm z$uod1CzSXw(pf_t^_D2S%pg&M%BrUln@U`;b>|*L>n=!=Q?mqGi5@nl1Qvserb`^! zYxv~$lmtn-J~M7-PwZ~jSVR~TyJsXo`=Eg~bMWvB$)SexbE(|w77leDA(kd+SiWde Sbd}rv2!P#uT;DiHWc&}=-ERZ{ literal 1284 zcmeAS@N?(olHy`uVBq!ia0vp^3qY8K8Aw(>tdav#>H$6>u0R?H^fXnSZOmenW#hbb z_qHvzGuqnc_SQ-B^O@!!KYm1Sew_(a$5;~N7tG-B>_!>`153B3i(^Pd+}oKO zv!A%hw7Ro>4VtDsZTF)`%-@p^9h#^e6!X+elO?jGckjsw7NNhkcuqX06V0)_#3^9= z1k;>lyB^JYV6SD|cVff$FE#uu)6?Qp?e@)2y;IwBak}{?jg5Q0@_q~miFmzt{n^(X zv!ra)il+VEaQF4?jz8U4-BPYP`dg@jqul?0zIblod|BL@CeZQlul>Bb@ z=YKT`){hpRxH)(8^S}DrKeE4Dcp~E6`#0&eH-g{a`F_QD;>I)U>ezspoA`{sPcS;`Ncxci2dEM)4PoI8fXWRZ!T7j)Y zr!#f?wsWz4)tgW79lcz{cAWiD=hnuZ&l?}E)jjijk#+Bf39=pO*Yucn^YG-i=c^dL z3r-01$w`e(D(GIc+al$|L?hW(v$QbYf=#|H7cM%$dr$vl7OsN{FP zqvF@X!>lVAt0NinGf*8K11tjyiv1tKx*s6<2<} zmFV6DWU0@7edl-56y52aj45k$y8k>&n=>_)frHb#n{UGt29|Gy)6GTv^g~)MbBjK_ z;^b5=v$UOq(>Y#EpL-x9To@LPCv(fFdY@)!-q~2%y)OeJFS6@_R`e%YGXDI~1EF z&>z)%>~U@GrgQ(Ve)qks#x_y&+KQ9cVg)0_XYhLi4PFyy{JY=uo;usd71vhGG;Evb zx!{a}jo_*tcQvQEi784)oOCS?pKv*$EiCD#<`g&cgn^NuS8G@1xBu5y#I2A?6F=u@ z!=(JtBTHnFfJCQz)MA1D13)Fqu63{RiFJ>hC^2pMz4{Xsy-BZM^6YO~yWIE>SFh9D zhv6H(mbAssH2A?)GS|+Q>+8$F6@L9rr9~pEE-wz4E7SVwiAIRJ`$8*AuB#`3Qhi{l z;Kc!Qw#WWWZa?1kWxjhD3aoqrJm zCk=oCmVd=x1+L)lhp72B->&BK6R;XXuCG8%&t}=wd|vW#1<(}3>mX+wi2=IeC4VbW lCs6m#kL7m?kIRCHzsyacg-ZL^3b2C;Gf!7Pmvv4FO#poCc%uLS diff --git a/public/images/pokemon/exp/668.json b/public/images/pokemon/exp/668.json index 083fdcfb598..63671a548a2 100644 --- a/public/images/pokemon/exp/668.json +++ b/public/images/pokemon/exp/668.json @@ -1,272 +1,821 @@ -{ - "textures": [ - { - "image": "668.png", - "format": "RGBA8888", - "size": { - "w": 205, - "h": 205 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 70, - "h": 68 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 68 - }, - "frame": { - "x": 0, - "y": 0, - "w": 70, - "h": 68 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 70, - "h": 69 - }, - "frame": { - "x": 70, - "y": 0, - "w": 70, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 70, - "h": 69 - }, - "frame": { - "x": 70, - "y": 0, - "w": 70, - "h": 69 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 70, - "h": 69 - }, - "frame": { - "x": 70, - "y": 0, - "w": 70, - "h": 69 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 70, - "h": 69 - }, - "frame": { - "x": 70, - "y": 0, - "w": 70, - "h": 69 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 70 - }, - "frame": { - "x": 0, - "y": 68, - "w": 67, - "h": 70 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 70 - }, - "frame": { - "x": 0, - "y": 68, - "w": 67, - "h": 70 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 69, - "h": 70 - }, - "frame": { - "x": 67, - "y": 69, - "w": 69, - "h": 70 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 69, - "h": 70 - }, - "frame": { - "x": 67, - "y": 69, - "w": 69, - "h": 70 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 69, - "h": 70 - }, - "frame": { - "x": 67, - "y": 69, - "w": 69, - "h": 70 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 70, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 69, - "h": 70 - }, - "frame": { - "x": 136, - "y": 69, - "w": 69, - "h": 70 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a0374d38386b4719d8b0a8fcc11d003d:7a4ba7ff9050ba3dee8c8340200f12c2:947bf84d1af493c62e2cef45bb6c19ad$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 67, "y": 222, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 295, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 414, "y": 297, "w": 67, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 67, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 196, "y": 367, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 65, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 414, "y": 369, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 62, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 320, "y": 372, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 60, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 380, "y": 441, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 196, "y": 438, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 61, "y": 370, "w": 60, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 60, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 350, "y": 296, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 64, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 151, "w": 67, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 67, "h": 77 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 283, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 434, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 214, "y": 149, "w": 69, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 69, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 282, "y": 225, "w": 68, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 67, "y": 222, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 295, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 414, "y": 297, "w": 67, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 67, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 196, "y": 367, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 65, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 414, "y": 369, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 62, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 320, "y": 372, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 60, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 380, "y": 441, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 196, "y": 438, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 61, "y": 370, "w": 60, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 60, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 350, "y": 296, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 64, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 151, "w": 67, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 67, "h": 77 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 283, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 434, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 214, "y": 149, "w": 69, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 69, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 282, "y": 225, "w": 68, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 67, "y": 222, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 295, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 414, "y": 297, "w": 67, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 67, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 196, "y": 367, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 65, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 414, "y": 369, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 62, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 320, "y": 372, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 60, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 380, "y": 441, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 196, "y": 438, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 61, "y": 370, "w": 60, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 60, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 350, "y": 296, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 64, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 151, "w": 67, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 67, "h": 77 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 283, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 434, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 214, "y": 149, "w": 69, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 69, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 282, "y": 225, "w": 68, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 67, "y": 222, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 295, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 414, "y": 297, "w": 67, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 67, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 196, "y": 367, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 65, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 414, "y": 369, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 62, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 320, "y": 372, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 60, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 380, "y": 441, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 196, "y": 438, "w": 58, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 58, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 61, "y": 370, "w": 60, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 60, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 350, "y": 296, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 64, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 151, "w": 67, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 67, "h": 77 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 283, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 434, "y": 149, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 68, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 214, "y": 149, "w": 69, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 69, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 282, "y": 225, "w": 68, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 68, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 351, "y": 151, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 142, "y": 221, "w": 70, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 70, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 351, "y": 224, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 70, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 421, "y": 225, "w": 69, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 69, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 205, "y": 296, "w": 69, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 69, "h": 71 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 212, "y": 224, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 70, "h": 72 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 137, "y": 294, "w": 68, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 68, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 274, "y": 299, "w": 64, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 64, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 368, "w": 61, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 61, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 442, "w": 55, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 55, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 438, "y": 441, "w": 55, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 55, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 261, "y": 372, "w": 59, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 59, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 134, "y": 367, "w": 62, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 62, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 68, "y": 295, "w": 66, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 66, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 365, "y": 75, "w": 69, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 69, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 75, "w": 71, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 71, "h": 76 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 442, "y": 74, "w": 72, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 72, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 221, "y": 74, "w": 72, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 72, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 369, "y": 0, "w": 73, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 73, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 296, "y": 0, "w": 73, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 73, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 74, "y": 0, "w": 74, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 0, "w": 74, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 75 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 148, "y": 0, "w": 74, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 74, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 148, "y": 74, "w": 73, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 3, "w": 73, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 222, "y": 0, "w": 74, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 74, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 442, "y": 0, "w": 73, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 73, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 293, "y": 75, "w": 72, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 72, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 71, "y": 75, "w": 72, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 72, "h": 74 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 71, "y": 149, "w": 71, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 71, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 143, "y": 148, "w": 71, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 71, "h": 73 }, + "sourceSize": { "w": 79, "h": 77 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "668.png", + "format": "I8", + "size": { "w": 515, "h": 516 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/668.png b/public/images/pokemon/exp/668.png index 36acb70a20f098f8c6c6ca556dceced199f43a4e..85be1a5503227c9a68c8b2acb976b6a35ead19b7 100644 GIT binary patch literal 29671 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

Xigi?e{^!pwWrxoL2lPkz z<~ka1+UOQ9E~K4w#m61MK4mgEH-N{QRlvfF96T{0}KBL~8j6%2FwEd$ESasXbP z0hv<{ydFP4cwr-Z2}(&2YFML$K`j9mMGjr`w+AB!ZaU31D3C@1EtS7UrF8uDL~tc9 z<-W^N?gfnB<$zm}1KM8ZuI?sbtAr`MCrPo3r=KEAI0bVnsGWyeYR$@SB5PWjmKAJhPPS^rJny%Oe~ zrVK8~&z#*zQXs+O=ib=5?i2K;$d z{w&-S;r=VtlrDh-fdW4}km+3svu&_*+K3kDg3Cntk8^-*>2jLkbBIT+Hzn-KA=5yo z@s#vmsitHh1>hU=EbqJ7r9Y{`n-a!y$om#ZQBe*q%71_Z#ywymwxoZpV4(F+D)6R+ zsS1A{IIT^`-!vgEKMC+qVK5|@_J2H(yS$>^AC$1cPWz8`RBoBW;5J<eh+Aj+m*2@w$ z)@c`-dt*gvMSr-Xic7iMWuW?hh6683m?2IRj=kwL&%ys*N0l#32)|BPx89Vnm_x#N z^fylX?{-wu`VSHIO$i(9wEt>H^?zYKE@7jc_TTKN{x7WuC2Y9U{)-*e|E=|)gmI^h uDuDl~j_Us}T*ICAU+Sp-|8nbz)BYbHe=h=D>YN+^00009 zTyi8-6Gn$AIz~8aWYpxA+q#}J=lT8f`|tO8p3mp?dfw0L{rbG0&-?v6pA2UwdmSx9 zEhQx-9f||#r~-u>TSHZG?(qkCDZt#B=4z)v#oAskI=Iuw0kgxyfq2HykQ;@*lY*)G zWjFu2o1g^$wmo5GSuS7yOuK-QDb&j6k2)PwB2142DJgB@QbX1+`g8^V7vk~Him{;r9wjv9ITmy|yhb9ut7 z8*@GQbU?Oxfe=)0)Un3&4gfxI*75083k;y5Z(BjE9;s+`S8aiy3lpGik(x7asSU-B zmHv3pD+Ub;fU%|Ava}sP?!@aB_zR(V>5MEIf{H_SC-g#3<-%>qBgWrvkYvmdw#SX= zBc1S|f&fRR9QLBN_K3-Oyd|+D@6pmW-RM7<_p#6K4)s61)>+}J()zsoaLF2W&~k-U zQFxLPh*r}ZUme_@jSquP`(506-eM>*yT}fW)RPRo1x#PsboVUNIt=|B&pnDcmbhqr zE?nmAh$?+ZaP6D89}24^Nw57Jm97Z&c;U7u9R`X3te19P2}n1}!TTyoZrOfgw=l;i zya6$P36shAbf8$XQTO0mNXoVM5) zox;;t9Jl`D$mF(;rA^;W9#P+OJ6hm^L*?#bZtA^t4_yE}C3>APT{lxx;TM7TzWQzI z;;8y0+bnO!-HwaLpzADZ;iT)G=?nB-_?lZKY7q1*%ltX7ETje&w{6@%nNb=(J^T!x z35|l_a4y3G!HkGgKEx3VuVU#U(H3}6Ny`H_3JD@llRUv9zOcjfLkD`qQWa_tpoQ;` zIVeyY4LU!3B@a&99@E~mWNe$gWMv;(?CV_`T?uJV6dI+~;0uGkRDmba;R%q5M^{?6 z;f-V-ThqZ0oSM(A6Ptq3tSZKES5AMv%`7_vH^o`0oLkN9K$bnet+=W5!0Y*pk?UO% z`cK~6lJc7+Vo9O3y;b*F?6?j%aa>J=x>Tso4#Vzwv#i63B>ss-C5#&S!(P{74>W|C ze@_CJU!z39Za-IpHYqnZX3}Hg-OoCGg0Gov5~v*$FxrP_Q#?{2E~j(>D(}{jTTNd( z<80~dl{7P^ueVb8hgh=Jl_BZu{B zce?sP0C1&F>`LjPsJe{a3NG)5GhY$2V5zJgHPJM2f-Cg5zOZi9^pws6mkY-|JU7op z^>M?M(0t3^ggCERX4obFNFF_f+A1=AtUo`L093<^Ga25jXF?ZkzvBEN$!OTyIJ zQ35Sw(sl%x$NAPwQzQ84^2|>et$4K{?N66M#Es0IPvEb zFmvaUATqe2t?IYIz7S%*{_pmq2Id;%*CfcI#-5@HK++7 zPyxxRvmTxotrbEkcx0V>5OtJ13whO2-}W^JK??*#*ixjAn5W<*z)ks8?%suV2Lfsp zaMRq-*qbI7y5c;M1ZtXO3t0u5lkKD6sS>We3I>|(WB0$DEh*uY50UsGTa?W;*|FGM zvYs+8ni4;Rh&y2#ip#-l7%4;m$oEq=#- zu&!i)jffjaP0_@9J*JrRqQ&aT5@T95tY-0-V}Xqb4WmD&fPt&)66AeKl7w6K>-`s+ zyj6FE`Du5bmLyRfY9}DFGf-x4nvl!nkHO?jGj(Q$glJ`>!5eC5(^pk4(lDqINNY^r zdRo~i^Nu6>6_)Am?gckGb{c@%4@X`s07S@0b)upZCv|wyPB)1V>;G(&S+Y480{W?I z={VLi_`lL$0TF&f>I^@*g%|C(A%%1g_lNw88!3PLDLhjOZ(=N~cSgG#W+Y@-^ zm~W%m*gn%ZNS@Z@$5ClSyqzks2$B9UQ(B{{WsIVTf1o2{8r%Fsbo`l}FIPEZ;q$7O zVP;VNOJ#Kx3%q1TOxqD|m}I->?wfx@`$DBN2!io*Q2R?_l5L;s*k`6h&Q`cfPK6i?p K6X}7iFZ&-#ti{0q diff --git a/public/images/pokemon/exp/back/667.json b/public/images/pokemon/exp/back/667.json index cfe6b109d70..db9918ea230 100644 --- a/public/images/pokemon/exp/back/667.json +++ b/public/images/pokemon/exp/back/667.json @@ -1,125 +1,659 @@ -{ - "textures": [ - { - "image": "667.png", - "format": "RGBA8888", - "size": { - "w": 115, - "h": 115 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 39, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 42 - }, - "frame": { - "x": 0, - "y": 0, - "w": 39, - "h": 42 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 39, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 39, - "h": 42 - }, - "frame": { - "x": 0, - "y": 42, - "w": 39, - "h": 42 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 39, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 39, - "h": 41 - }, - "frame": { - "x": 39, - "y": 0, - "w": 39, - "h": 41 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 39, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 39, - "y": 41, - "w": 38, - "h": 42 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 39, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 38, - "h": 42 - }, - "frame": { - "x": 77, - "y": 41, - "w": 38, - "h": 42 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0515d906bdf1ec3ad533ac13c4e701ec:195a93073ecc7446c747c2e79ae07d54:02171d511e760c8a3e1b623ad6bf93f5$" - } -} \ No newline at end of file +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 127, "y": 47, "w": 39, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 39, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 85, "y": 48, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 40, "y": 94, "w": 38, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 38, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 79, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 118, "y": 94, "w": 38, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 38, "h": 43 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 40, "y": 49, "w": 39, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 39, "h": 44 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 49, "w": 39, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 39, "h": 45 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 85, "y": 0, "w": 41, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 41, "h": 47 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0066.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0068.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 42, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0070.png", + "frame": { "x": 43, "y": 0, "w": 41, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 41, "h": 48 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0071.png", + "frame": { "x": 85, "y": 0, "w": 41, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 41, "h": 47 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + }, + { + "filename": "0072.png", + "frame": { "x": 127, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 48 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "667.png", + "format": "I8", + "size": { "w": 167, "h": 138 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/667.png b/public/images/pokemon/exp/back/667.png index ef7ea9647375d90b44d89720335046032a8b0728..f1209cf8e20925381d59be9ed0e088af8740d281 100644 GIT binary patch literal 1872 zcmV-W2e0^vP)z0{{R3`1-0g00001b5ch_0Itp) z=>Px#Fi=cXMF0Q*5D*YEE-ObsJ9Ak-aAjS;lxgz3h1oVXa~&N30093YA^-pYg%%e7 zDG{F`6T)5$w*UYD5Oh*bQvm<}|NsC0|NsC0|NsC0|G-d-LjV87vB8~*5l;& z@Qn@nHGJuV&hs39pr79#wfzeD{(ft7X7Kg(Qs@ zp&l|!*(4blrff$hbbL_keoT~3#(gqQ*&-Pjr))+Z=(ry7pK$}HjM9Dbt&$9U>5)51 z8?oYHOOI};y(@`FMs_2ogUo9ZmeiTVBQrXk(T|b&{RWTR*b{lM721g;_8h?@SGGa} zyOaFQRwavfWsT%>TIJ=S6*>{^WD%;7bb85YlC(UFwJYVbIp+$4a~`BU=T5G3K9~7I zq=+sl(^z~aXKO_VxeZD-xXo#;{dk0Iq06j=E(<$K1Z19`CwgR&DX>S*Y4L6H460=D ze8$UbbYZ9-x-{C2%uD4p%TCLN0%Xh_uuP&60qe{&%hs@6CqN{@ok=dL)^m#D|8&|_v-BkLS#UBePl&4+`j(v*f%vY z9vhC94qm&vh3qMVQIPM#O;opY2? zn3Vb@GQWJ8-OV*&?QODrvyPwB#KSozc5HB-Ob=Q0AGgV;osJKi)Zlm~8JT|4?x$n# z{)0W|y2o6Tm$dt-#KJW@u?zWYYjTo6|91VGxcy@YNna|t*5n|;ep>Rr@Mzy}tiDZj zt;t71{X1BsZ2y_%Ik7c4R*&}c$PCt3^S(8?NxOf)?clWyUz20?j(#QOYNodx>-TPW z<|o?o25ap{l}LEA+HtK7M>;sT9oO1uq-Wu9JFd0SNPOX*_AFfut&K)He7>hW zsvTezt>-}(Y*z!)#p^T zy)d@ISAoftb5Irf4AgyomD+BP##Wm%X>AM4LZ5+JH3Da&U%Z-0Bv-pCcnJLktcGCO zt_q~AcH5CC=WDn9yLUl&wWt03v9%&urDH(^RogHx1hw`F)D~1cQ?$c*hL!fPv$$hP zHbE^?TTuOLV31S~`!G|EdioQnRqOEi>j`S;cfs31o_-jzQP(*Q7QO~+==UnI1=b6n z#u4%P8Z4j_sNZ1_4)noUp>*=}aG(!{^*ahWe7*;U^*ahWe7>t)T9BZ%Q4kLF!T;+y zCH;>&>G z`8QC*_QkHu8O(;MVf$hi$6QPe+ZVerr=el{Vt3}$HEdt(#+-(R?TcNX)6%egvCDIs z8rH;SPnv5(HSCOFhggK9u4}83r*krK4z#+6)V(&RscX{&ZH)O(&mUywF<9!l=Y$L}fts56PfO}L2gNijX%lcqKS9`)K`{+W$^=vdAlRijTgm00 zRb$w;YySz5y52#hWI@-07%X+&b0P*9$0k_ndgp|a3B!^S0Hm&O1CtN8p<}YJ>vcSV zWEgWuUFV!oGKRTisdG#yxi9u_&e@W>_vfsWuVK2>y)!4MYa5s(Rr|~dCS#aO>bl1S zl0{5j4d1Lx6F3a%|=AuA_Cmb&Kzl9Slv z=eo9#E?MfE6HErhrc0Lk1_hHr3+exJRd`TeGI(%4CoBI#gZ>8}!=nsxK18el0000< KMNUMnLSTZZtDuws literal 914 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 USkdf*G}9+Y4-BDp?vLXC1)RuZzW@LL diff --git a/public/images/pokemon/exp/back/female/6215.json b/public/images/pokemon/exp/back/female/6215.json new file mode 100644 index 00000000000..4f58734d55e --- /dev/null +++ b/public/images/pokemon/exp/back/female/6215.json @@ -0,0 +1,1028 @@ +{ + "textures": [ + { + "image": "6215.png", + "format": "RGBA8888", + "size": { + "w": 155, + "h": 155 + }, + "scale": 1, + "frames": [ + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:29aeff74e785c73ae2261d8bb0459111:5709d3d72351f1424de632ebf8347c01:736cd88647e79ba7896fc74f9406c2fe$" + } +} diff --git a/public/images/pokemon/exp/back/female/6215.png b/public/images/pokemon/exp/back/female/6215.png new file mode 100644 index 0000000000000000000000000000000000000000..7dbdab7eb85e4ce4052dcb553ad83d541c4fd493 GIT binary patch literal 2470 zcmV;X30d}uP)~7oS0jyZ5 zzj)|42DR6}HfB<6q&GjbCZbjo8&+Ai?)$vpbPR9XxXqmjF^!ca9rk@+CkB_|(~Txx zrBl&uI>#_(VsM~%&BfrJO_J!8=`*{pP66;PT_#=zURpHXNw zVWN`i>uXAEIG-JK{MTc`LxKx13nZ!Bt#@ z=pqAVJ$Q}Qy9qXpE>a|)+S4LCS45{zDnZeO+^C6;v3z~~IwZ@&BfH3k3di2+SiFmS zdYp^7^{7#{FwRuV5t|(kvi{)CxBA7!8|`7(OAJgEYqD_7gRFaDehwR4?qZiB=h!y0 z+n=%E$Zr-%D4t}!u?3Sg&wdF@rR}<-P#_9>Enx9MnMYZ7;ev@_F7PX%)vkgK-%+F` z-{!UpgkP>~J5*8j>1xE9DCxr1k9OlCD}cBz_cO~?b=l~iAzVJf#T%W!LH>jwuOxq= zm1XqFy&z2rE{gQ&0=`ZP#kNu+Q&8oy{uP`w@t1NQ8!2cpWl?CQc28rjv02&Zje0Th z!J+WW^7hOtD=PKTYb-NCEw-XEUJy<;@pW1^dKAFkd;{rDnjDcG=tgl>dZl^xx;#DsN_n8a)#rbw@11^X+4)*o+ zvh}%e)qBAWxVW1%>R*ek-^DM}u&Q?pXCEC_}H?pw`gmX)T&7t2c zObzc^0n=K6bcX3S-$!h}zrSZ5m(Qp`conm7XCM8JR{(E>^#?03>lNEAn@5aBhsUSa zlbDH=aM4N}^3D+*V1a}D?_<2^`8?%D}_x2XmkpS}qxALr+4Bk<{q zkkXwjQZ=?x4Fo=Y4^q0>soE4vAn|EQH3d@o*`eB;7E2)Usaq4g04cNCx!ROUkm1up z;iiO^&(4(u7JPDis`Ae_FbVDEb<4jJDU~3@rZj+{rdqi&+2oM&Gk|)To~unLLAFY=~MI<7^Qi@u7g)y@QB=O$F%}!b|9lGiqxn4luyrH30wuT zj|n^yPK?q#V%P4K(#E%fW!`8jpf7lrq-LFbT9>9rlwd6^k9Z9j+Vm*UyupmZ^oSZ1 zZ1@8rqRq%C@fyzx^F!X{$tIx9#3)~aZDD>0X{WljqyvvMUyCiy55`D=}`Lt%^&_}IPu|h$arWu?%jm@W-0$aRL>r|{z&|%G) zPX`9(Sf;g$a#*9w{kK&PjPw>Q+za(C${|hpGN^)J7_9@9Y3!oBm2eHi5l*A2BO6CP z0+lJ;b$F1}HAKXZ)lZGh=Qf)XGO8Fs_7t^9qUMNx_g|nvNbV~j7j}m%zBwv@Hr7B$ zR3SL0v2BXyQ_R8=OP>sU5^iRA0N?>gghtQ}G| zQ3@ML%#5L+x*$#dNtgeW$Vtw+ISp%Z6@_+Wic^BrsmSqU)($B<6#+x!R6G@X9XJFC z00sbowDyvHRZg?;Du@bP`XN)NqHLn%?T~rPA+S4D%Ba+rL^}1toof!K;mxYP0&A*s z-VYhh?h8$nDwaTWDjrr|MWG+I6dNTd1EPHg@qS2q$FV{iEo>k<6-%v}f*7fSs;-eE za?sdxiR-DeAalG^vD&Js@>azR0@~Ofg7ff)b%d5GAY3@ki(QmuAD{%8oRfKs&5Ke# zk1k4dD#k9##|cWJl+fd`8O*AU9Cd&I=FcYza@JxQTlnyntYNkd-)%pM?`3&`uj`Twcth>H8 zJE?3P7_>j1AxMqhPDPb>UN&il`bbAQ6}vkxxuh|h3qNj<6*@1UG@0a3n8%AW^5ev4 zt!!=4@OvuC{CI#l|C5;d kXZ(zx@iTtL&-h2i|79A#Nl`5(RsaA107*qoM6N<$f-fbdzyJUM literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/back/female/668.json b/public/images/pokemon/exp/back/female/668.json new file mode 100644 index 00000000000..4c493f84959 --- /dev/null +++ b/public/images/pokemon/exp/back/female/668.json @@ -0,0 +1,821 @@ +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 144, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 78, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 233, "y": 213, "w": 78, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 78, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 156, "y": 144, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 79, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 319, "y": 144, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 80, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 242, "y": 73, "w": 80, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 80, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 310, "y": 282, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 534, "y": 350, "w": 71, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 4, "w": 71, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 301, "y": 351, "w": 67, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 3, "w": 67, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 353, "w": 63, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 3, "w": 63, "h": 75 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 204, "y": 417, "w": 63, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 2, "w": 63, "h": 75 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 139, "y": 352, "w": 65, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 3, "w": 65, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 73, "y": 352, "w": 66, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 3, "w": 66, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 368, "y": 351, "w": 69, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 69, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 284, "w": 73, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 4, "w": 73, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 475, "y": 214, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 319, "y": 212, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 82, "y": 73, "w": 80, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 80, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 519, "y": 72, "w": 83, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 83, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 434, "y": 0, "w": 85, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 85, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 261, "y": 0, "w": 86, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 86, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 174, "y": 0, "w": 87, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 87, "y": 0, "w": 87, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 87, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 0, "w": 87, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 87, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 347, "y": 0, "w": 87, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 87, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 519, "y": 0, "w": 85, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 85, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 347, "y": 72, "w": 84, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 84, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 73, "w": 82, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 82, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 162, "y": 73, "w": 80, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 78, "y": 144, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 78, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "image": "668-female.png", + "format": "I8", + "size": { "w": 605, "h": 492 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/female/668.png b/public/images/pokemon/exp/back/female/668.png new file mode 100644 index 0000000000000000000000000000000000000000..e5b5ed2494e0f2f35b6841902a729f6cf233aa37 GIT binary patch literal 24896 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 KMNUMnLSTXrNTd<~ literal 1780 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 a{K@QHG<(CBr9U2n3PDd-KbLh*2~7a`r)muV diff --git a/public/images/pokemon/exp/back/shiny/female/6215.json b/public/images/pokemon/exp/back/shiny/female/6215.json new file mode 100644 index 00000000000..07510ceaa55 --- /dev/null +++ b/public/images/pokemon/exp/back/shiny/female/6215.json @@ -0,0 +1,1028 @@ +{ + "textures": [ + { + "image": "6215.png", + "format": "RGBA8888", + "size": { + "w": 155, + "h": 155 + }, + "scale": 1, + "frames": [ + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 49 + }, + "frame": { + "x": 0, + "y": 0, + "w": 54, + "h": 49 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 54, + "h": 47 + }, + "frame": { + "x": 54, + "y": 0, + "w": 54, + "h": 47 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 54, + "h": 46 + }, + "frame": { + "x": 54, + "y": 47, + "w": 54, + "h": 46 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 0, + "y": 6, + "w": 54, + "h": 44 + }, + "frame": { + "x": 0, + "y": 49, + "w": 54, + "h": 44 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 0, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 52, + "h": 50 + }, + "frame": { + "x": 52, + "y": 93, + "w": 52, + "h": 50 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 54, + "h": 50 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 51, + "h": 50 + }, + "frame": { + "x": 104, + "y": 93, + "w": 51, + "h": 50 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:7decf4c336c92bdacc5d43bc8590718f:30606c7130f3577df61a85f98b567a88:736cd88647e79ba7896fc74f9406c2fe$" + } +} diff --git a/public/images/pokemon/exp/back/shiny/female/6215.png b/public/images/pokemon/exp/back/shiny/female/6215.png new file mode 100644 index 0000000000000000000000000000000000000000..3af5e81148c08c0977651464061a4c247c4b3d49 GIT binary patch literal 2470 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/back/shiny/female/668.json b/public/images/pokemon/exp/back/shiny/female/668.json new file mode 100644 index 00000000000..8e55af5a4de --- /dev/null +++ b/public/images/pokemon/exp/back/shiny/female/668.json @@ -0,0 +1,820 @@ +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 76, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 152, "y": 283, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 73, "y": 284, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 74, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 460, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 227, "y": 350, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 6, "w": 74, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 385, "y": 284, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 75, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 472, "y": 283, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 77, "h": 67 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 233, "y": 282, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 77, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 396, "y": 215, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 214, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 3, "w": 76, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 399, "y": 144, "w": 76, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 76, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 431, "y": 73, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 242, "y": 142, "w": 77, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 77, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 156, "y": 213, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 475, "y": 144, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 144, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 78, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 233, "y": 213, "w": 78, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 78, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 156, "y": 144, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 79, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 319, "y": 144, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 80, "h": 68 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 242, "y": 73, "w": 80, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 80, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 310, "y": 282, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 4, "w": 75, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 534, "y": 350, "w": 71, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 4, "w": 71, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 301, "y": 351, "w": 67, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 3, "w": 67, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 353, "w": 63, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 3, "w": 63, "h": 75 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 204, "y": 417, "w": 63, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 2, "w": 63, "h": 75 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 139, "y": 352, "w": 65, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 23, "y": 3, "w": 65, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 73, "y": 352, "w": 66, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 3, "w": 66, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 368, "y": 351, "w": 69, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 69, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 284, "w": 73, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 4, "w": 73, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 475, "y": 214, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 76, "h": 69 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 319, "y": 212, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 77, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 82, "y": 73, "w": 80, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 80, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 519, "y": 72, "w": 83, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 83, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 434, "y": 0, "w": 85, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 85, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 261, "y": 0, "w": 86, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 86, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 174, "y": 0, "w": 87, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 87, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 87, "y": 0, "w": 87, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 87, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 0, "w": 87, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 87, "h": 73 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 347, "y": 0, "w": 87, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 87, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 519, "y": 0, "w": 85, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 85, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 347, "y": 72, "w": 84, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 84, "h": 72 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 73, "w": 82, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 82, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 162, "y": 73, "w": 80, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 80, "h": 71 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 78, "y": 144, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 3, "w": 78, "h": 70 }, + "sourceSize": { "w": 89, "h": 78 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "format": "I8", + "size": { "w": 605, "h": 492 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/back/shiny/female/668.png b/public/images/pokemon/exp/back/shiny/female/668.png new file mode 100644 index 0000000000000000000000000000000000000000..cec15d8fcb7e14f57c60c30649a75d1f0dddf623 GIT binary patch literal 24896 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 Hu0mjf`6~na literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/female/668.json b/public/images/pokemon/exp/female/668.json new file mode 100644 index 00000000000..443f13c0b54 --- /dev/null +++ b/public/images/pokemon/exp/female/668.json @@ -0,0 +1,820 @@ +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 147, "w": 64, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 64, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 127, "y": 152, "w": 64, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 64, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 465, "y": 146, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 65, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 399, "y": 146, "w": 66, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 66, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 334, "y": 74, "w": 66, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 66, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 191, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 126, "y": 223, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 62, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 462, "y": 217, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 188, "y": 291, "w": 61, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 61, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 249, "y": 291, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 60, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 62, "y": 292, "w": 60, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 60, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 122, "y": 295, "w": 60, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 60, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 182, "y": 363, "w": 59, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 59, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 60, "y": 364, "w": 59, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 59, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 362, "w": 60, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 60, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 327, "y": 217, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 268, "y": 74, "w": 66, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 66, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 74, "w": 69, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 69, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 376, "y": 0, "w": 73, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 73, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 227, "y": 0, "w": 75, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 76, "y": 0, "w": 76, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 76, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 76, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 76, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 152, "y": 0, "w": 75, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 302, "y": 0, "w": 74, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 74, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 449, "y": 0, "w": 72, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 72, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 449, "y": 73, "w": 71, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 71, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 69, "y": 74, "w": 69, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 69, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 201, "y": 74, "w": 67, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 67, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 334, "y": 145, "w": 65, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 65, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "format": "I8", + "size": { "w": 530, "h": 436 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/female/668.png b/public/images/pokemon/exp/female/668.png new file mode 100644 index 0000000000000000000000000000000000000000..fa0582a61f10a151f5755264a4a32ef3c7ebc2a2 GIT binary patch literal 23683 zcmV)zK#{+RP)Px#El^BUMF0Q*5D*Y{Ar?n6En_J?WJ^D)FCXMNBYAMeNGu?iKjKA&Z*!0U7KT1MJP>+Qg9b!}i3EL@D`8w7Bb69#;J zKA+bTW`ug#abs-(^Ko2*`p&!-!7!^OQVD4dD#y=RT+v zECjVAdMMM^XBsNR?*)vTri6&S;Fz_u6qg5k&S907F378fngyd+Es^?Or&K$ANAmg< zVVqN1zt~6K}@h8q4yshEDt6VMU&T{ zyezK|M{7v-T~=@DXIKwF>Q(WPYvR#2?j430vV|CNKcYBl&dP%1NAM9(A4@7PErJpX zwe2lW$wGAlfLIYQQcXY{ts9(Vv@D=QeDR3#IBIPmJ09#FT}^Z?mD4f?n#f^^geqY5 ziXnJ4{eSx^vC<{00ZAa7>uPWc#JY|*z+V=z6~|unxWQfki=mgWdc=0|64UDXOMCyn z+WyZmxOKrJwMj`UnGN6#^zk@n%Q`v&hadWs+s?;l L&cNuhLvbCDwVN%X=*M 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 Ti?XZ2_D2BX=HpuH9G>w%1I2Qg literal 1285 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

Xigi?e{^!pwWrxoL2lPkz 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 Hu0mjf$1(uh literal 0 HcmV?d00001 diff --git a/public/images/pokemon/exp/shiny/female/668.json b/public/images/pokemon/exp/shiny/female/668.json new file mode 100644 index 00000000000..443f13c0b54 --- /dev/null +++ b/public/images/pokemon/exp/shiny/female/668.json @@ -0,0 +1,820 @@ +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 291, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 453, "y": 289, "w": 62, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 62, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 441, "y": 360, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 309, "y": 359, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 380, "y": 358, "w": 61, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 61, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 317, "y": 289, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 390, "y": 288, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 254, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 63, "y": 220, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 399, "y": 216, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 64, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 138, "y": 74, "w": 63, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 63, "h": 78 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 201, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 264, "y": 147, "w": 63, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 63, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 219, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 147, "w": 64, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 64, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 127, "y": 152, "w": 64, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 64, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 465, "y": 146, "w": 65, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 65, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 399, "y": 146, "w": 66, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 66, "h": 70 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 334, "y": 74, "w": 66, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 66, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 191, "y": 220, "w": 63, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 63, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 126, "y": 223, "w": 62, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 62, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 462, "y": 217, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 188, "y": 291, "w": 61, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 61, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 249, "y": 291, "w": 60, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 60, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 62, "y": 292, "w": 60, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 60, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 122, "y": 295, "w": 60, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 60, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 182, "y": 363, "w": 59, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 59, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 60, "y": 364, "w": 59, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 59, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 362, "w": 60, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 60, "h": 71 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 327, "y": 217, "w": 63, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 6, "w": 63, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 268, "y": 74, "w": 66, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 66, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 74, "w": 69, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 5, "w": 69, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 376, "y": 0, "w": 73, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 73, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 227, "y": 0, "w": 75, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 76, "y": 0, "w": 76, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 76, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 76, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 76, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 152, "y": 0, "w": 75, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 75, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 302, "y": 0, "w": 74, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 74, "h": 74 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 449, "y": 0, "w": 72, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 72, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 449, "y": 73, "w": 71, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 71, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 69, "y": 74, "w": 69, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 69, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 201, "y": 74, "w": 67, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 67, "h": 73 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 334, "y": 145, "w": 65, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 65, "h": 72 }, + "sourceSize": { "w": 80, "h": 78 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.11-x64", + "format": "I8", + "size": { "w": 530, "h": 436 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/exp/shiny/female/668.png b/public/images/pokemon/exp/shiny/female/668.png new file mode 100644 index 0000000000000000000000000000000000000000..ad84dc5046025738033bc509fb10e19a905e47d9 GIT binary patch literal 23683 zcmV)zK#{+RP)Px#El^BUMF0Q*5D*Y*A}euWI%6q4rjAmXFg?sWOrU@;(WXKF&{(sgZs!;j{pX(e z`1o9N0V@Ci01tFhPE!E?|NsC0|NsC0|NsC0|K*LIrT_pS07*naRCt{2eG7Z+sIH|c z;(CO5|NozR&07Kq#3Q@+%y*c%r@ND|yd*6o;c}Vdfa7h)@jiA83-$fkhqVPLnE2TQ zw~f^<3xjnVkRsr>AMeNGu?iKjKA&Z*!0U7KT1MJP>+Qg9b!}i3EL@D`8w7Bb69#;J zKA+bTW`ug#abs-(^Ko2*`p&!-!7!^OQVD4dD#y=RT+v zECjVAdMMM^XBsNR?*)vTri6&S;Fz_u6qg5k&S907F378fngyd+Es^?Or&K$ANAmg< zVVqN1zt~6K}@h8q4yshEDt6VMU&T{ zyezK|M{7v-T~=@DXIKwF>Q(WPYvR#2?j430vV|CNKcYBl&dP%1NAM9(A4@7PErJpX zwe2lW$wGAlfLIYQQcXY{ts9(Vv@D=QeDR3#IBIPmJ09#FT}^Z?mD4f?n#f^^geqY5 ziXnJ4{eSx^vC<{00ZAa7>uPWc#JY|*z+V=z6~|unxWQfki=mgWdc=0|64UDXOMCyn z+WyZmxOKrJwMj`UnGN6#^zk@n%Q`v&hadWs+s?;l L&cNuhLvbCDwVN%X=*M zuaBqdc%Qb^u^{BtR&F8{2gUopCROS56*@TS+IikUXRyvALA-|o0cZ|S z?NuOJ(DE-GzQFec7BOVmq3dsJGAxm3WchY$@BYD&M2%sKHki5jK zI^%92o{^L}O@gXZMZ1FBIJT9wI5&`4p_Cy_Vz!E?y_J`YUHh)iAg`8G2WUMM+Yx%C zD~fB?|F?ZFh7_TR&xgCzP04s1qxUGn3EvUh0C}7Flw&nlw&!KG@EW4kOB1h6tnNmH zC6)V%M{Ek&E$Q9SJUyX}lDM9M*$vq)90IJ!PK4Diw%d3O(dr2Gimc8>R{HFb0!>M) zPmMT#*5el;e~fXtYXjtsbtSA$Un1jm?cjxIb)i&S61!LhQfd_`#83Tfm4r3XLf(ja zF-x5Lu!75OtaA}7(>f)zT3yLL|9etDmei7c4(GaYPTTIT`MjiN5f>rtPJI(rveaTN znwn{uMOqvEukAg{yP~aTZ@iqM{KGIif?@h1KIFw^XS} z%Qz@a(UJ#pkN+!Dvrr`voMg0vu|Gmq_aH3}M9khH5q05IOz+ELnGIOArP);4(k3m- zi=d?kX>IhsC#98?R13)Rb@zDB8z>{);P-#J-Hg5>QY(Idn&W01w=;jvK_U7-;Py=F zkHh*h085ovM}ftxh2S#B%UOE1EY13V%Sz8nlQArRTTqBM(mS(Ulj8p8%WbKW-TpVSzjyA0^|DR!y z0dTAP1`?4Ji8Zo6eK8|BpM>Lmg(=1kP z=~-hPo>vGYNy}nLXdOKhU6z)!3hJT_v=B-}>V|3{c_3do(pmz#3V7MJ*L^;;N^7V8g{1OqZu#gd3=9y5-RoXxqs#eRif9}n z#$X}muvnM%Efw)fNE>Jk`=8THi^C^Q8Kc?*LuymaB-;3SwXR{|y$ijOJ+V^nZ<{%_jRA)@iRS3su}9ZAt=C zDbP6n|;d)uogH5h8@tJmNvd zaS5ws?;!=~e&Nzi(CH8;12ewYCOwJ6D8wyY= zRm!J{0x{hMFA>==!fmr!#kzp=3oOP`NgUOoR%n4cAG7{&{rRmh|%{K5?jJDV^|R^JAaWEx`PFf(tYR=sAS@_|Bt#d@}#mNC?xDB z(&>Q^q(o?|!l4jVrlv5WD2#|)fKp>vG#KEe`&hM9Rm{T`Eh#I?TTl``|EJsqfWnsv znxu%uUDaz#DLjN89pzCpK$0*jsTqt|=$;hQS^d^xnGP27{gbQ-1;EBFrQ)dk4SR^B zBQ4XUMPW^`D)Wthd-k6putp0y*8Na2v}| z-vguSenl-JUf%O2y57{=GYo4$7&W%jW8J@wVPvtK`(1tkST!#Vd37@mFi}%TU0P={ zu@>rp|LI8TgESA2Y5-v*1(5DW+1}f5Ji>>qlq618b?zat97YomO$RaJo-T+9_{LHg zOG~jF8f=0|UOh{JwV>h}_m~`}<(MC;Ln{i^01Kh$rL0au6M>Yr&+c1EoFY;LkX2De z@(+iap4V#}OwA-j0}=aS{A*ZJOTD=#{M68Dyv903{V@%RxbK?vxxr>VewG^A**eq zb~>F!RPa}e4*M6d{z)hvX$r_}aXN(vH8vZ@e-7)PgxZG01C4iZ6(W^(X2bX|Vf~X( z+mH~D-Y$t+tn*>qinT9}Yqa*U+D6LXob^dUFFL)0IB_%KAI177p|&AGAg8hgr|(Dn zN3s4%sBK6XD0i3P;ixiPTGZxjh%@9C{_if_CZav z+C~ZifydqT6`?Qoygh-&ny+moay9@Nud5o5WkH0k7E6k zP!Z``MRMOa%3m-U-&_1D;y;S@PeN@&(l#^AZ!LZq@n6N-2epyaHYE2dNSAKR9!YFP z{713=NvN%)bZBk&NMbMIKZ^BFLS>}U29SiB*joH0#D5g)pM=^8j1vive{PyE5Kf}I_7ZC+V#5Z9)#_zhLy%ao& z6+7JG_+AO>-|<6rK_9^ndyMfEo`swRgtQ(TXz>@~vEP}*>}mndn9~*D@VkBhmkgJS z=gqHPHCgZpr&7)VMw9^Z`ZZs?*<&*ihtE_z@bdVc(8OQ!LwU(02q%gSfDrLH0r&=v zSZ39X1TTq-!>}RmPjp6DAH%BJ>W7g_B1NnvidqpfW>B=IvZhVDpSNA%%7F9vam;NH>b{1s1-5l+K^=m zH!Orla!u0p_m~EJ6Mh_yCYig&UE#^J5bmA#>q%#cbq@6M7?Q*uKa316fb$iL101u0 zr8UN-QbdJde@#n*cg>g;HN>!{_C-g`nzDQHsy@?Ectg>A?_fnL0_Ur@EgOxxL2?+n zKDpeaR(lg8r# z02A1#CU7_)%(M2zz0zqAK1t;9+O`wum3)$NuI`!#~s$J^i@Ii9k?3JZ9G^2N)y5BB5ySNq;$Rej3A zOh!w*1D?p?xh}#F+dmntSd+`)<8S=ESnn}_*Qt#v!GyG4z!TS{2v)D4 zRCd3>w@FA4oFd#3=Q;FOOUoBRP57J}5iUb4+0T2=Qz;B-dwfUjwB%F4lR6pz+V}q! zcsS)tX;G|#R6Q>a2=<5Lis*4btA&6G5boF7zUcfK)dV78sPIG%pIxdbFL}nVTn>2; zA?o0TXY>MwbF!YKMN74nxcf#7UCy47@5f$U+;; zIzAsvDMR?xvAbki6Q1@PZT_Xd2LkfxRzm9omRBI zT}x?!Zhce`FyA2#id-$MFZ}!~z2*UHLXs~53Gim1N*2z_E%&Z&A%A=X={J-F2gomV zXV_SVsX>pq zHQwORmzVxA{wv|g7g!U$5^8g<`#N7uA}RcF#QeEq=+mEDUPo{i@W;WapBfNlJ74@b zk3?E`0iC5qY#9at(i)%T!1*G%!Dh?%`)U-?d*ULA8P@AA7LGsY^gF zi-(H!qe-h=UxP%dZha77nFH{JLB3F6Vc4?3?;-VhtvX_g^~FYTd?^1NRb$*c;3+`g zAX;VcJ&LF0lsZc*ck55rt($8UAg%FP*SMo{jNf@-UzF+6rwf{dNsb`hxqY}ppPCUI z#Pg!Q|L-*RxUvRdtM++XVSP=~irxCtcI)SOpM=)<42PyKstqZ~^@ho9c1UiyVM2v?6?gRY50AK*G5bVrUOytBKab z?AT#npc+`)OLB=`Je0k^=3jW>-9Q0KP_&NgixF0zmQ522yD0_M_!I|aztHb}Vc#f5 zK-`tHvoB6d);7q6KaD;0%-_G#SJuR$JOFDKLCvU84rt$b;o1qp4Prn?3#_j>6ni5z zC}N^DbK+Jx7!w=>zUT=XX5A7)hr_77BpjeS@Xww+J76fq8VMPyP&>2jB`@(cl=}K| zI35q2zh~2seffd6VVV|1Y17j2&{^B9vqz-!hPYGV$u%zI5PYGdFTkOy5#j9k0%TnW z0uD6vf;cS;_l^;Z>VI&LFBS^|Me<@u7{Ztbt+ zSv56bfuJ8fU=y!SbSfxSwP{@u=B%Zq(=8HiKin?m>Ml56f5Mro3C0BSy$ihwlB@NpyK}2x%3{g0}_e{?I9+*^lI4$T$#&$b6v#0@nxVK!ODE$*{O-v3T>l zL;E7~QtOHdj=?iU>GOERuKfxhevvS`qNQ~qiQ={ZY!Bo9ElYwf<$9Du;Tf?n!1AbF zkzQ{~frJ-lt81eqI<$42m)cj%cqE|lemt-R1YldK-E`@dfSUE-Y_xyVaZB%hRH|Zv z10xBkFDO^A5z3G4nz%R=ea0*3YojDIZ+8}9QK}l3)W$R{@OV|}8P;I{RoFG^PcT?QKd#+Ew4@6e>BO{hk+)kTZ2d`^v1 zp}kj^4KT5CYi~rx)8#`>l^-_IYHt}rf5 zQ2AGdB9>0$P}~Kr2rrH{cY|0R$PKaPm71nF+w9`@p?Wy3nDus?ZA4j5~X|M%EuP%|Nlr zg&c~TBNM);B%z>uB8-iW{lCJLvX=ntD549($$KMCjgLSLw^ zFY48%A`1(bB;mh;rcM1I;Yn$AWMtk+g6=~n`wx0098?GaUVH$j*feD)K)ef zKob6X#+z+aaH%1lT=Z8ZHF3Kk9BP~Cd$OsgFZ-$olasKHI^%OL6xi<{zo4%qW$K%2g}C|^)n-#y{wdALW$FCd9XWUnNg z<`ZxGaBfS3;HrEJV?S}XaIT-%36GT+u{e}Lv`nPM;{;bEUld!0)bh9bL)_dAb07n% z%z!UqzAR~k$DG`@*+2dlr>YX>Je#qR4P`R#3))R+5Zca5!nl%e{PBd9#5hUdcns4j zmIvBk=T==c?(&qq-6#jDpbq*X7=hgxp00{*)TzPLN)pE&Ntn#r9PJAN;_P*Ovh=|? zAsz!4lwBT_jcIjps#KG=Z=mImH(k!UniIan98`w`m9v2_E`cxT#TH6?gwb%OB57=p zM7rP^eBYKtJ54Bnr)oTE8UZ*;tJ108GT4%hwm+xa(i08h7zfH027z=1?F+`S*rPp3 zn6-OVM`5>wccji;cR~`!>3UC9qAa-+^oJ((hq}|N^OERu=t`pR3p(w4kH*8J(HGb# z7{z&6JopecmNioY7`z_b;hWMr9wW5Mh@@UU_lK?ij&22pIMe|h_JzA;LRO9_i8@JC zFr_Pp2i71GVIzk8_Ze$VOC;fbzedaH6x}RxcT?SG)BfX(R)0s`52?;>hC}h;+Xi1~V1)v&M+mo9eoYclgFu91A>56(17>K;Ky2ujIc)Jo zC5fbn)a7g*Ra#mUA&Ykn;ccNs^oP78>SlkL!wz3SMO>h(w_l9Cs13^Uz#0T1yyiq$ z;i)OSJ+#L9!}15q97+H+;fwfrZ1wl9Z`Qvqi47vuG~6iO9$I+&){{ip>o0Ry_l194 z9o_HBbT#TVw++o`Fo|&Rl0Cec`Z-T)v_GtS!xawez6feg-(x5xyzkYx`I6ygKS6s+ zgrUaL253-5{t_*=z3XpVmN^7~C11G5KJud<`x{B(ia~_r6~{#w@n{RgaNB6r&49Q+ zT;{OH7nXDCJpPU(_KI*5-Zokb{oyi)O-5MSPFLoyD8kYPBHVDrJ$Tz_E%b-$95xwY zAK(40tp$C(y&~L%w+UvcKV0Up&$qv|wcswdS%evHsTbZrYq>vM=CH{ZzqGYzUT?1m zH{q?q?C4RKP1)iLfB55$)4Swjw+J`kt-+~KEP{TQ|pHeE+X9g zmybEz(W5#~zUM<>5$5Om`QK@LK2xWlN_At)( zhqmyIg7KL;$ zD7-TXZ^$Jfv!V;|nVrvZkh_90A&$@c6;F-k7k(#M4B7m3 z2yXflj~)V2)o_FCV9ISzF~TioM{URtRl>YcIDt1LLHLtuo_H$;B(Vg*u5u|v6^U?? zCK5zz`#|iuhIjHLk(Z-k{}KNC^ZIy2(EAP64+WifV>9i%i9O*Dn|%^SQRQb$Qyha8 zfOe{rK;XsoB*(BKW;B5f!32;@7)7)s0qC&3h#mUzNgObNXQhcZS$-hN;~nXK`1>mwNJ48($TGRl?t3U@ zJyJNR=>n&~c-E^zoM;GLlbRqtnS-935JaOF8NT6`ebEvG7f#NV$rrg7;UuAru@UtF zwV&}*ns^`SR!xmkXi8Vp`)=SxDb)nx&_SS5UBi>D0Oa{)YdM`J7;Tq>gMG9V6)1gL zy@-1r?Dg>+w0#%Rr6?Gy2Y00!rqmP$$dclR*Ayd4572R=#t?+8VG*Tt{b)%-a94V@ zyUnJs+7=P&PJd-1xv~KzVP6PaNy4M>_j0uZ@ZO*_6%@tG0&0o?0HS(_Q6YGUsO!rR znn(!lW2*{)Pjs?RDR4J5t%J?N$%7RoSDJssz0)%HqsD*7!0M*l!N3itAgW0tWYJ$-A z2n%95wZ8B1XyWS2*bj7`7k-a!P$d9lbmb)xG-a@+YF)h8HI7wDipt(8X=ExF4vTP7 z2+tTW;y_I7%5(Us7nrZ923e{JLfb<$3OmAdkY_?5JE*soZUX)*gw!_`0}ijNJJmid z3qn&wSMaKVoTw^QGWw=7m1YoR09jJEBb+4KF01F;Eb&T(hmc~t9nk*hoLn74MCzr1 zhO89c9(ekLG3>ifsh47RU_fxwbpQY$07*naRP1A?AsVHoh?r1N+5r%%tScASC0{10 z5+PK&;uN(KiDK7wU!KxLYKA(kwj)yJY%!I4brLCm6y?XCoNoSTMiM;$ZGxsu4UkgS zqw$QQ{a6NPiG@=ShenHA5fv(kd)$ zQZv+UEnKJD%-L-!mtmL2h(Wgv=12Y5H({zNNn}x(DN$`uWk#4%rR|3kjC!1xTLAthU{0A4@6!u!QZow(jF9Q%d6YuKj|FTQwIOkXuxm5ta5QTe+i@ zZ%JrRIvi{S0L-NUfGR2Y9kzxP3N{KO4C@*sIyO(Wy3^GLJ6~o^+v_Rc|A{|c+5}0Q z+4vOE6i^c23TY;ZDj}rvuC;PshCAHZ*#5MVQv(3asZxdW^8f{Zz9FJhQ^>yqy4IYo zTZt}6su}3z1{*MmL|WSBVqrbGv@{})`ucK#G}fGO#!Q$V1DYjKr+xQIBlq1$ACHXS z=X(ez37tHv!MW?oy#+9<@;n=wI@0O9fP_tT{$&nXmB|x~t_w+Vi7rU$Y$utux`T)W zaZhR6dU9oHB%C|jef?44ozKDDDlE_NUp}B@+CThD`+}y-2@o=XJ2CaV^a(-*G~xOC zGa|F50D_Jbl#VCkqWiTj)nNn`?`qe&uJTMH%jle^vZBg$u~>KDpOs~t(>Ay`js#j7 z!zmxSb78q_(SV2$f=ZW&&qM>v~|M>yS)TqhPM)C2$knt~MU0h?A+X%5UY7$Kdy zN9$VWJdNSdN3pw<(ez)K;Jx;{ak0j{hQT`j42hF@G4VSZV6 zs{UBj{V_MZCZ@GbtxhK8gXts_?QXJM@zC^Q=&OuJsfpvLB!PxctjJl#3A!BsLujhv zAkwuW^9-HnQ0;S`bRjCH%j!uKXoo~~=eXEyI38+A+u0A|>Ev!IDS`}$CgM@yXbwR~ zMO?*GLPbQIs+4JJT-T&48BG~pQi8gZ`mw6+5JRGE-V=IoI;ja>5;>sKc+?2toqz5n zj6A}!rg((tiB6vBS5H<_g1VE_eTW->t7B2y>nZ<;?`foPKtN?{yhN}qark+83P}+U z0R^F^CUq@vB`c|J-AVm1wGA)hv83${DIZEAuaWe>@e2BC1QbOyGI5(#Ac?DmKuAIl zX-X!lhOR}fY)YzCcibMeyEr>UMB3hv^8K4Tqt|r+O7VOg?Rk`z0eK6e~nUe&5 z*c7W0Q8*0^PzD4cjO$wB%C@9hb?1_7nJOX^+SaQ}!#fj5A~r>JJez5sg-|MU#MebX zfQBShRul?N6-^a^Q0cm11ac*m6e?YU`CNb8-!cVXCQn`y+TM`zZwv+F8NJb7;!R0p z1i$sA1A4(%euMd9O`$X+)HNRxnCFT-1xgoQT)XpiKm|y{IUD+6VtN`%5YKj!P^2X6 zXF$q*h+iY1^HQ~$(iFUTh9x1=H8KKKPX+T7EM10|R7(=Vd`%c4%GoGMET?=oRQ}7j zt9G%p+vwWf^+w zcNKMqO)?@$3~IYvTjNV33>BY|#^JPgRp=#NEYTyY%5Ka}lvQY;LMvWNBKZ_+N+(^q z)EqdFno2)WM5;T3uCpe1U30E<>Hxoj)3Ky7|EfP82*skdHRXrybW#!~-WT`bG+q%# z`R9Dfa1ci#E7#5h3==WpO*vg_(i7k(q$}Nr z@;+BmAw@pm>y9MdLq|d)vYd^BF_ZEMBFcojpdlKUviZ)%AcPY?Qg~LtSyi`l%xNq} z3S-2mBmqBU2w{gLv@YhC0PvexHGmT~(seB=%9UACK~rSuI^hqb-7R!FcV8lFTbQ$P zr|uW$==7RJd}P9h^R9V11(Aqny+nbkJcj-Lb)H5XeO{`{eRh;1>PQS}3Nmn#a8GNU z9e_ep7c6~VQfKaviTU9Nt-8afd-`j@S=*olH?&=rP(jLXEscb8Bl%M#jQi#kkOUjg zvy_Ai&u+La_yr|F9G6-pnk37hsjICiQW7fXI{WZjp2bN5r{%4k#M z>_kMM?ZK2!Wc=(9lhWTAwh3H3DM_U3MGS~QNx~FI+C)vIUa%<%BHt;j>#MD6GR;H_ zf~2bXg(S*m2-Tf4CYf|1U^`9b5w&eU8o1mmP%3R!l7LL~NXoCK1B*a7l}Hj53dZP2 z!WQ82Ti%#M8{j0`A_Q;?yJbYMq3DsVFG)$2nj$1Y)g5+mHdg1dwue$ay}Yx@LP;ti%4SH?AI}o$NMd|C_9hHRYl)MZ zz>=sCm=&=AaA*0JrUbg4mqa~1Z`&sO<5?n1x|^SlP)txn1wv*0@@E=A5CI*Mgwp-O zV}H&92y|VWKuC(Op7p!$QVn;7r=BjB#E`bDMtyWT#{%RD^g7`u5MqUn1~fwCFTuE@mRl==;h=#cgcO!_%}Q!W5^R6mt6Ksh zGHnk}XOjes=V(B&BH(YNM=e7NJ2W+}>w5l}q@W~3{V};Z6O(x&>nXo*1}5zT+CkC& z8}(r010Xb7Z*2+$2PM_ivaUHv9l|_?=1=v<9U?+)uc!QU6P}QSETAD*YE4N(bky<& zP4z|9wc@uVwIqpgBFia12b7AZETHcG4EHRxV60PE*Y$dyTJMhu9At+`+p8)6NCBOW z=VAMWaMx}UVV%OVsMaOLZldM=@dhFr>~Qe_0i98V|J27VB<{XPXRK;!SyVgn)N;Pw zKxBg*{tp)e>M*pp4g3uXtGeEirs6U>}*BglJ zNcmx?wSWc;VOrwmuTfYN)taO>rDIK0^OExUS}*j+n~1DWkCFWTUJ^xwiO2MD zns~n%mf_Uy@3-jK_!f~hbx%ubXTDw{vN}C0!UklTz`HtPxy}^6u+YaCB^s|zlIhV1 z%34sx{LBq4x)<~U`3>3r8;x1G5QrBVMP&V<g6L1&{IltgP${x}G z%+V)9`58GjJ;Hn%ipT-t&N5;I^%%<(A>m<|k@>YSCl=~_A47Oy$o%h`{vH-Hj$q4% zND#;I0i~y4YrvZRHl;z>4PB{Pbhaq z+=;1N8{Uyb0rO#SSQMEtd`P@wACL{9%f+(u?kRGf{)i~_un5LkoH_6Mrh4tuXZ#1Y{BpZChc~P@p-%X;Ylme zrf~8roLmrYCSe8Fp(9Bc`*LMSV5B3_Fxy;L5mdq5-4soom03XaN$|2P4Z61uuR2N4 zKE5Jgzacfrzl{9P!XUA61s8$aUHkw91+}p zNLobNW#<+D&HfJ^QjHW{EekYifb2p?pHqcD;hFySr^mT&H+n_5*S7&07P=pZ0D~oQ zj!HroiZb>P=|i4l2oCzJeHvG(3t0sV>JCx+dV(0t+f+zRJ5#m+iX3T(+G|IDmETvk z{IBqSO1L&h(?rNN&v3%BbY_^H!ufRBYVuk6h!JE7%>h<9nzbTKFC>BnIfUfd%-pml z%4Kn1zo!3i+i-hprbskpjwBX@G~1rnGrVd!d`}H&VxXD0o}Z9zhQ9TP44R%FK~NEN z7`0cK@DfSJkK|2pgZ#3GL(`Y_A+`U%tQ|z6RW4EH>jMf8^=wEY(;rZDLi!0W?)+mr zP4`|kqzU;4ytgLqV3?F|#1nx*zJQHS&lIdIUCzrGM5>@F0NV~pYnMi?fT1;!{#vP` z$Bdb>kTiRJ3sB52a%7r3RDUgyb)fpmk^l=UwdfM0E9RSwBp=!->dx3xib@m=txCLJ znw|E?*S>S29eO-k&25#oAH^Op?fycd?D^n<^9;(7W~%f?9_Nklqke8xnlm0QJEIA0 zK)&J6LuIF5mlMQg?~V*BDp3fkBrv+G<)*z*yQsXMg(zC2w+meD6)%fIQumsybL99? zHcOb$5vp|FFw%rf6#6IS8z3(6xF;UeLYu7Ur5|%I){90 z&-7YY7PeYVSMEI2rTiBTuG7BOJqIFd!roZ91hUX3=Nlj{@zCz*BP*%7`3F+vjH+Cs z^158;h87y+nC0dqeb3=@qOZ` zPbVoipZeQQ23B2Fw#ThXGoNKbEni67Da%bsdX0S^_KX4dwWL}ShsO7GhK#x03k z7G4tJ+#!#W0%_yW)tCErtmC9gad{kjWVf=PX?gbXxWxo;*>!<5m9MG&*{Rmbh(J-W z$&OK_NK{I*Sw`Yh&>)`^txVefWl58nmNUSwDL^00z9%2S`aHK>lo`qXBAkVlPFhtU zjt5HuW4>|fQbAbpxXtVSe=fdCg#+@^e4A!K4GZ%~U zt1dUlMwNL#!O+f&1pM_onHHtmM4&3&)a)2a2Y#Y8S@3jGu%~^+;K4X*?ZcpxWSCWE zDa3bo5m4@g<@16S;n3jVRH!K+Pt3(hLU9r&5I9lQwJQ}KS?x=ZX}+u#;Cq=+e7l)8 zxxfcCX~LkbLRt}UcAOm6ijIeWmm|GK2gMHtGQs#$R7qt8EFTXN$R0Cr7BvV_0-6Fk zs1bsvG>Auy&=FOxT{))Sr$s~#Mfp^F1{&tMq7|rnnN}+hA?}o2tqPcFi&P84;iaHp zl0=h1o(6pyrHP~nMiMa$Dcdv3^1t)>hKBN2Dm9^M0CQ2(J%GzI$s8hM$wU>qXlRUI zramGapQcF}pl$_VD?_vb#BeX&Z)VzH0Km>3?4{Y9r}+T*pIuE&n5%-}j>+yN9DgUN z$w&YIG-cyaQ|PG@TZ1%V>WFAv%r9zRvLF?6)FAs`vAs;?LDkQ+MXCh`C}OrQW;gS6 z_>pN#;wr*Gqr`Bupu)acUA!bj0J@p>#za*xpnO`+=X{#>T&O`-xR(i)$5-)_&T`F6 z8^Xb_&{mqI(saGRwE>bSSm*%a!q7x1!$BDoeyPorBy<8mnyT#?6jd#&;8QXp(FWS5 zOoL3c0&YW#yTjT7j(|1b;ta4Kh?qGDA!;Zt`KlBkyn{?v7gyl6nPGt_SA;lEy8$GT?)X(vkR=HeQ6MiD-AootIbndc!IEI~+0J?* zQ5im@%eAjkRFVVJ3gG!j(o`8Y4d{kVDLP@V3X%xydtEcY9$HSZDXIFj8BW& z2P7fuW$^WxOxrL3UcZ>mb*U`0_h>y^ioF$yMi75C%!Fa4IJOCKMj8}xSF2)-3 zLH33D7x*+)MKZdyhy1QZou`!MMOC^~3w?^FG+hdeJ9q4UT%Ir8t_o=FtXEbeZrZ@jzby6 zE{@SYBu-x@o~DapT1et7B#}~9{ z0(GZeWlC2Am{nErw^`C$r2Q(M6M5nYFrQet4`tn++2U6#yOsp^$ydD1AHWRA5)rLz zZV-^t;h7#Q3CD(%RIxe{0j;tqbDm-pUg=wThtfWciM*HGZCyBH6qx%>rrKvpMhk`C%_EdKT zG}XvcL_d=wBCmaLl_o{t!h;%Q*dde6UHC9HrfpNYAWNc(Y0i@3Jk9on;GAy_=BY{& zjb0*MRV6TpRf4(Oag-!7o0BAS)}3hq05sK9IO)@c+UFBD%-p9cdl|gOYx}dPL)zw- z6|v0S;V|`V(*9N?{~Jj-P1HD05{f2s^@3431EPl6{)Rp#4xW%2>QP;U{(4Qe8>-yZzk5T}Togg%h^;KVf{@ zt$kJ!T!UO_B2=Be1&w7z#I#(LO-UGXQKr94aqMJ?rnX8b%~}(G#7F{?sQ_HX;TRN} zYMUeQ=~(Sk=7{}mrxj>y-S|~eN}{g4LwQ;mX7322&@UWZ!mps>ezqYA>bnhy3=Kdw zAvA@978NvQ#iz9^idKMWklPKBU{!=sFY_V#G#Bg`RUy6RKZ3eXMmk?ICn{_whLUf-0ii1gvARQPxJ&s&lpRyK8G!u^~>LQu}G z7N0(u${k)3?B&znC4slQnGnEg`hZU>E{#?IO5$V{!LJHJlBFgQeQLHK1V`m~x~66iO`b~IWtWI@k>;y*P^a*D{)Gm-#t zyrgl&gzA8%gSfj;EElAy*4HbC1+ECEuGBtRE8t32KWq0hZA%hUdHSg17<)c_N#lr- zA{2Oemph2N-4)VYfI6jIWTKMJpYW-$6=0im?1MoAHst98`vAU!O&rI9Ps9ShP|}0A zkwr6_S{Bv1Plc@j*Cgvo5+j**!v=lF@dCGY!0>UDzq!#tXc9_v5O@6ic0p5Jf%inU!KczzfR@Bsrd`j| zDUKH(#~wt6(pg&r)u!Syuc-~9+FbjZg@<~ZH!`3Qb=QCmd3r+}5mdNoH;J^)Wm#0) zY9G-GNIbJ9y;nT%dV8wt<>w7tl7)*;x7CC>B z%W9(9;L~p5X{VW`RpHIo3u`KJO>va>4NWjv$?9;K)YO`&)@$E#FSBI8zV*Er#}aI$ zCne^uaaj}9vZNM!nPc66wKWBi*5Y{dkF)-3T-F4>kN+-8VGJpU<*E7EauJ?(<^IvS%FA? zzb7JDz{K-%M@8{QJf>;XaC1TrdYV?}O5sV|Zzs+yt;O}7FFzMa%mW^+EI6UGp6?(g zvkXLo`Wi=rdYV_~WZ`)OSAIUPLGEwBea?yQs8bNiSxvlwuF@DlB6!Tuh-gUX!$z&? zDUYeb6N~4R8*v;yQ(1-x<$SIx6fpqx-oyjZ`5?5>*-4%geqCr|DnU3;i2Yd3evWhh zRK6ROB|{}Kl1(RhOlyKr#DGyDVa=-(r0!|%lYU&x)d%Cd8BM%tMMwqCC~CH?d6QNN z(ddLHr-Iv<(L}+mtw)k&%0P7%BE&o_XfBdtonZtb6d@$U@R&>!tXoBsIeAJIl@#&v zeexFSiNfP;Pv~^xUA4aKY>GT1*2dxpo5D{aV#8i*r&4}VXW zK{m%o`-ykHI`6{9+-fP1gS(}wjlq#rXj*VUe_w5%D0_XpA=;jDRseN05vJ3M8d+fh z4(qcPMS)f}-dRxPDv6?c$CCW1+M`C*5gNf<9fh+$`NhojgGn-ni$yb%ujGNY6-W~H zy`7vS;_2mB6KzF}rU@u8ZQu2QQzb)e*7prrX9x zCdFD{6~RkN6iIJ(TN422=>ZiS>f_$kn9lcs zawN5nB<+FD2gDx8;`&1m|-#-dX`03AQ zoQ}2WHTgbdpDkv6dV$p$D`fnabzhN1al*5bXo#V-tnAH(H9^Q3da)f(Vsc@*;3B3|%i?cXR|9FR+GHDVvvdHTX3w6Z_g~ zss!3mw`i@N=tcHKr6C!?%Gq%5^JL5hYW8d42$o9(1z}<&bb6<9(qu5*|4UO7_vEK3 zaR#ip%+t|;ic)0{5E}V=eRsaPmjs5;>cCQWYpf-;pxW6XPi^&Pb%$9$!-p%dXmOR7 z&y!QGmSZ@W>lq?Rgff}_=xIWq;jQq0C>#k5L(ou_D%}6{_M}N*2B$1yy%R)lLEYCe zm7oO4yY9`Z%mjS+eiNUO-k$i>dX^1MrN`l+f5KaRZ75I8f>>WRCE;<@&mVoZaQNxg z3{@+NSlfcHVg`W``nxt9YNx>m)AYr{8$>5qQKe~R>UZiu?)z#1SLf2L8brQtoQ`F4mQ~5q;a&-g=v2c>6LYYIL8j^5FRG83^>EaY>57T0( z{dB`A%EwS@Vm6A^XKQvA)NsPP<5?A*DpAC{Ty(k%DQ@oaYvtPy<-dAjvz#tMSx55G z(uDEfVYyEGetHCCw3Cds-=R<7Zd9{fvem;$rWjFR4YbzmpLs#u7p|9S-4QuKFcmN< za^~`(eEXz7ycj&&tB523iIKGL5RHGXa3mp+Jxt9y<8)tQ2W+%I$H@NU3UhTj#wO3! zes(1&AWibh6d7Kg=}%hs0Otk8EmLYI%YN?U6lth@+rK_c`ooLCQ{^LRL+KBlOOcGB zBtoO?Z4v+FN8^D~(f2U+bW96mr|NiGNj!R8*_Rhw3=N|l#Qmd7rU@Xh3JvBy1}r4b zmY~?tEIP8gM()L{`SN3e_HWMdNq>}k#7?mYkvyqL22HrL!u(;E1j+F7Ie+$&4yV-E z-<)CCBTMf;akwfNkZz~MSJ!1hB`af+IkGelCRZ^=RRYrij-GCKL8ZT8F5T&3q9`7X zB&AHsapQsp`Oy?fKXYI&od}STR5_CFeBw(h9b&9=B+-=u3EOF(`B=+@<0N5$PH@aC z(1br7FVj%55XZ^NebDV@X(m?{M%5V$2n;F=O|J4C_+_tCj!T>^I{htEPTb>ymgdLy z@XNc3B2l=?;XS0&V6~Z@;pGYVnq=JW{Qjj1$JbC zpZ#Y`7$JcigzoyOkM9qCH-E}0Vu|#qve`{R=DOJw46&h zxpyq~G+~WkBYFCLO}}z@pfCue_(s@^0}{}{rZm#T5no9z78uloQmPOX8Ish9d#)koI-M z{=AhW7#2FwkSVig6D=^5bJ~JBui#d_fy|K`ixtqKa|Se;1O-G_WMZNn%1^KoZ&PTmhq3le-NalEI=wY^4!ag3GmUv6}~}$g$Y^6 zlx9D6E`JjjX%Ms7DGc$`k)@Qp(2^0 zS4Of3WQmkcJGGCI#M3bmQXvUNO!l{VoG`U7HI<&?Y)%uvrdnV@UwC5;J*CVQHJBr! z@JfSmoPo_zg+J|XC{Sf9jVNcpki?rXtfB%7hI$K1Kkb+v1vFi?3oCM5}- zg=ye9-;5+0-5I6hRG0uQa%-=BmnF<$wiu1X(w@$l8D!j1dJ*LtrBq@4CTFF zaku}#+`}(v|GC$}tAR*17N>hWD(>BnLxahxh(iHn)f8Bqwur>f1E~~~3K&DgN?Nl+=Kb5J1?m>Ck7bGW16f59|JMSL(?mU6mSWllRcOu3N9G(ADqvMgb97>>ho@=O#aw04xxhML z?gS_2WJOo2%Vp$)M4k(X2Z8zlpglu9Dsm0*DA>5+vG zBAa4b^$ViykOZC`4GFoWFo`QVwIuM)w?m(m1T`N{CG+D&q(uT^K9YH8m~N0f>zi#jtFVShuFxtYalzOiU62Nhn1LT2*;Xz&%Q$G1m_+NeClZ z;6xzstyp)kZtEr&n7=`p6xy)BKu8F$+Fd0dly1=x+-%bwK{vX5%$<~zND=dqWPspr zL1s_02xU&bVPD|CW26e>|k9ai3Md6 zXyXDC*ju#*%zc=C!WOOlL`8YdNN0bnL&2B{3-I)dIX2Nd#m+ z{tH(f1qzjSU6}!HRbWdwM%LK2D8S2;wY)`twE(Y05)S`ai)GT^_EI$VC^Mif3T!RM zu!;MEiJNal)&#v?fR`d!Lg}G~6b!G-xvd3>wxNjW$sAK9Zj}^)%;P(e1wk)zPZybv zWQ{dZ_5+D+%3Kv#3<)i$evYXUcl^0LaZd|+l{@&;*+>#lgJmC)*rv??u!yZE?gc?_ zEWq=TbVG2Sj)=rIWiAP9CC6+@+zWzUFTj$+kpvLm-@8Pyq|5?qT43`b*_5~!1ie&% z??}1>k(YuQ4qpGB271d5?V1_?K@r=QxaS2uFDDqw&bf~*ly5lRqeuS&64kjzYs2a6 zdtPm`A=$TcS`+jHcMyxIU}BVX^41W{`@N(mDfF}`rb4p3bMmJh&ddZPCb$=|91SLe zVqxSsDQx~Mw>b(O=!Fb48H#Rt`+_ts5>Rz2x#ArO6^C%cm31VcqK@+r8#gd4D3EckLTBVBl zjuj%i_);t}41pptgypd81P)nP&z6eL!k`MOC#qO;@Ofi2WE^EncZQxjHe5k3IfHn@sqg>Z0 z4CL@aa$0kO#?}pcmr?3phzq+$e*fCq7#PdpU?voM>iWl{oR^6(0jD=T>j}s*%w5=s z23k<5W6ot#%r-!T8iq677 zx$ST3v5e(e#Im=(YnZ3DFK-)>L_?N~nqZU~o!gy^N-B!WEF&rHyhOB5oBxR04UckBp`s}H_U37jmESk-le@haEkEL7_ zcWQn5FAv(&b5H*rNesi|I1WBZ#_!x>P0W6>a8r4{0xu0E;b6OIVz%fkj-0v6tm%~e z7b-^;%L8fRBYI9i$2UFy(Fvx;VSw(*p=zctLlwGwy{8_^)Mq$aD}Kugsk9@BE96gK zbWW7Me>W^;<_1Fk8=BB36-yjUfhzQmLs36}^l8p?sGL#|#sV=Mp5aSw90xnwe%LT3 zi<=cTPN5v!nQWdRcNtuCUb~*;V6W^l_bV-tB4_@(Bzm!I1~bFhmpYms^>f zarLk`G>2N2?#UAv20s{x1}kq|07j7gG+{2P==^@=h?%=eZfmWT^zw8pOB$U>`1ev= z_AS%)rN96Ni-K$_vMf(1OPnd}?9u&)J0A!emmqs>QYt!^f9tUtC_0NHWbVrlO7_Iz zUvGchN^!9i1vCG#@lPRNr#*84pAfHL7^r2=$`X^X0MDTZ)&eVRoKm!FOHx(Q`FoPc znVaa?wHBC}XMXSgMCo?qi2W zQ>E;eqWzsVQ^Kflf{{C6Tiua;9L0gkO<4vAb#%{br&$H#6a-dzxxHiJEpwnEiVl~% zHxI2razl+-Chptqo5-$jNT#9eH{39NV0X`CyCS^T zM6t9#(&_A(3dZ4R?ce*UCsEzNfiZPOw$ZoxqI}C1ov4X$-^~60t)+<5=yx!=wDw)ZTM z6slOBWh^z0Wqmky__>EU$zhx%@ZXmRMZ{-C58-+AUwJ$IXY&7SeIWq8Xk zI+h`r0!gHoYmhMho)|u`7M_b4Byo|lBss`l;c^9?5>mU1qI-{6Zc?%+>{7)==gdVX zisCLhztG~@qNQ*hb#BY8mD{QQYMNM!Wer2&#P{=F42(V4#*A=~rHPJhu_}fh1&YEo zI84#GMe*=`i2jX=PW5GMa{HB$L&?R`G-64?)Htzjum>tPLnr3YAVo{U7o;=fX0)5K zeO{yJ_%`IX;-ar2Y2xJOmF)gdyeA*K{7Nio7!B>n$F5hWuB&=-K|v=Drq7|`)Rwz@ z#Xag#P~WQjC*yf)U3By>#YLLjqK9{0`7E1H!&)H7LuA`vB({o#r zU^s{*VOU%@JX@wm(W7zM7np(M=6B|s1({=Mgs~)(1dM7hC488X);WIlC(soPT`kLm zIw}cm5N;tg4{UoB3>$HQL4P|ggUOA$d$=<4YxryfSHv>Qg^p!50>Y&GOc5qqm}j2g zKeC?k&L_x{;UG*B88>-1{BO=a#W5ujxR+smF)qW&P1tLTFHgiWN+SOXc+EbENWdVR z=y&ZtF#}lwqGU~ASqeCa6k!UrUr-V`bum54cwF=*O-Pd)-hXYmv>QbzQ!Eu1OSim< zRziX5kgBWuPz1oBB$58JkY&~rnu`KQ$+D!R4n?UwBp;BRse*(vjI`)%S*v7niyj5Z z?HXJn(#vDN6|vMzEbAAv=_BJL7zc8b)!7V)l3=qmT=#6SazkFpds#uyBOU=cSl!UqB zJvR??xeqPfL&o9knS4B|KRG?0eFj2@WT_|))LHSgWhOk@niE$jiMmraWJO2Qlh;OZ zX<2gHEeZd4csrKyk3%dO7@c6u-ICYGt{WtYd|axEUk<{uw5v{OnuA0W*|J>AywboP zhe{HMu;`E(W_e5`w_lKiG?uNyknJ(j;VdirfZ7#dAPysmLuFN(q)L5~a_S!2jwofz zQvS0y$*6L4!0i-BT=Jr`CoVC$WksmEv%+;_vm`(~a4dZaB_u&#-ye^w!t3SjhY~;% z#p&MV3A#y^j)GHVC&kE~n7FqDSZSdo9&v+I2rF-=Y+Q`bPJGe%o$O5}x6oM`QW0D4 zOE?OOj%D;sB?;z{o}h{7?ekz^>JxNhig8b0xmyLSEc=Ia1K2P-DeVkj)$z~0qU3Yn zCS|zj==y21$x$Y^vy4}Yp7YYk^A>=~i+pS#MXwNGz*R&cP5k3eGjEmZf0V!?L23R^*9YuUPu61&AH&VAqRdf4A=d3Hq;!t3PG?Lrjkwhn!jqecX3b7bmkvsvO7B(WCD224T`oR+yq zmK?6B6EKl{>f0r<4D)M}NOiPTIDX^XfLtsOQ7kb^gaI!Jai?XL_bdAxrew(gYoZ?2 zHztm=E>HuK*c+KFiN>X?+rXQ~S}YkD@Czk5Et5?#*W!V^Z1y1};cucM>M}|ELS%F^ zxyAo7LmTp;i_gb0f@ptVtwuQx!D*SBWXT~@+2Aq{KE6dr!QD&dWgUvpwoXp21|LNG>GcoUeavR!?i!bdiI~~geqy3|T zBusa9curn#`eqcdN0u}+oqS^U5tK7g(P`b( zUFO|PZu|EeOR)sQe?nw!7|)@bWJv(~>_bY;XP>4+hl3tR=VgF&|3;XsYgSlO-P3to$LxFz$aAmzdo6*6J7ERTZzZ*uw#! z$-2KymS`+BIK86tYwr+?t<`LD+ccJXxJ?W;$r6E1XP?!gvoLUS`_-=DUmw3A%ba}% zkr#{3()gv;>VG4Q+3fRQ#^rZftN)EOCbQ3f8JFqg_P_C~<3Ekdue4VG8_Prett}sY m@&CHx|KFg-|Kjrh%lJQ?a257LIJa5=0000nJ_(|fH1S7Znm3R%sWicra|Wz6!gnu`1tt!=bkgmBkTYG00DGTPE!Ct z=GbNc00Rd}L_t(|UWL>#Yui8+2k;ZZWW7V6&>>K|WsA5XLE(l%hGr;q(GW5T!MQ^Z zY6RA#p{)mHEVN+LsZ*DJfCPUE<8qnacj>*86`dtp{^LRBe)_+MWK4ER(+}iCCh2

)UqX^Biu2*AfVvWh-<#BXtM%6Z7N2g&C=4jRA7Z#nUnsi0D)hHUDcZ<`y zc_V08mG;mBZgYKo{m!YHeBVQt>m?eSuIhGgJ8ltw-Ke%IT~f#R@^W3*-(b61{b(kp z_^Vicaf@PkZ}t|2deN%;G`)MQ-wsjCD}!3KTGk6XK#Mr37(=z&et|{qPWKP>dtGLP zpjtKi-%zp_akE^2mIe{lj$AR)Lmw9ka*K#(+3IKCkocbhUC0?CWG0mKlW5SNIHHlf zQIP#jrqL*hEB*V=JR3)W(t0X`aTJ1vr#$bFH{9FX@C$f~bKV?X5$~M(0|X3UBX`Kp zy`Z4tYA`MrkQp>%h*(laMDRgXnDbChld?35m1R*-L_X(kUnrTB(x8GFV^jd*%E#}H z@|fSCGAc0%2N5MR#>;{@L1a5hn>kd;j1t02>L4K{Y|G~es3Lou%v=QEBBi0(#&?hp zn4~oYXx%jVB|VIaQUK_S<}~S04A9Lh3T3X0p>7lM25pK&Qcp@brFI(5?NAiUT+inl)0mOas1|8wo|lEW zu2h3O2h9<+N@f8lmHCKB*rBIAB=NC-_U*AZis%4sh?DRTBGmvXi!$P%`9T!#qcb%` z8^1wegX|S`P;3#$Qx|z*583~gW^Y70bpXYPxP2SL_;QCba}5e$1TjVp+JZWWVkt#? zyO)DFG>$9i5D9SVAie_N@Qgg1Iz&0-V3Cs{l0xGf9}Sa2fI>8?VzI@hQwrb6NyXT4 Z@E<(Z|IU(I&1wJu002ovPDHLkV1jZln!5l1 diff --git a/public/images/pokemon/shiny/668.png b/public/images/pokemon/shiny/668.png index c8ec7c9caf9e3d04568419a02f7f425267a9323a..73c11b9a7c7dfe79ba2541da5fb4633c1085e47c 100644 GIT binary patch delta 1067 zcmV+`1l0SJ2($>07=H)@0000+t^4i(0004VQb$4nuFf3k0000gP)t-s0000G5D;o2 zD{)~unJ_(|fH1S7Zl;b>%sWicra|Wz6!gnu`1tt!=bry|MBD%X01k9gPE!E?|NsC0 z|NsC0|NsC0S4!Iy000A?Nkltd@Q3;dLne zAmFz3W{lbNNA>wZGe_F@`eEPWaeObu6!+q!^gYBur9>1uKSWf5A}T|_OX+v0N*Ve; z5Tm{$pdO#1OzJbQr0(D&A<2{}%Ji?hoD*D08WNHY2_=6crNhSzo+l^>@h&N- z1~o|bbR;1(Nbd(%B$aZOFepdidJE}+G||{?95YI=z|( z2>Jt4a$;W$!RrtIa}w%p{E+sLBR-7<)9usIGR*%oonS_`1WP?G(`O{RLnFlj|Q>TdU6O;iJ^nj$14_` zkdC$nfPV~-dAdru2Y7ES&z^!Rl?_;ckYdY@5brtwTuBxv0SgjE6rv{vaCo$9T$@2(P2pToJgHQ=9a?z1e>X_B+=OJ!onTN zrzPeIx8{PBlT;4$cn6&r(p1V+O!?5Pm8n`zN`F`?rV`hXlU z`jDm@skAC#r9AUlINN#juCm9ds3 zN8PE&Q~MB9;cTP8m}ZwiDzzeQASB33iJ{yZ9!f|VJS$-nQay#&r4p3kQ}-%u@KnmT z8LHmldkMSNV-4{2hOV5V?*oabP$n8nB!9jKhOZ@W>yoi}B|C#0+(Rh{iT3^otxN68 zmMYTsl5JnMdFzX=d{3KKsJYaje4qVLSKdqgri_;hw$`K!*$#=n;k4q>vNk$fYLEy? z{uxUYu8}3EzPdw6?l=;zGYb$(HotB_ah9`tBYFOXGE3h=6g?*bUlr{6V4B`o03>ae lev(vhtE>5wwKz?!{R1s3L=bPpXaoQN002ovPDHLkV1kK%E001gbOjJbx000mW5NaYTd1yYFFg>7vFteg= zwwqeaJ5150LFX70^vh%T`1t+jo-@lM>;M1&0d!JMQvg8b*k%9#1D8oeK~#8NjnqMl z+eQ=z@R3dK5^`ih5Nyl>4!uN7u%KYTMZktqNB{#%PDUV8sDB{BV4W6l5M@kGDGqqh zsi$6gX=%XXeF~EzpXR&t&5T?vT3N{-gfaf{e@{YVqS71b&(Vl5Lr++jRmHJMqty+r(Bhq_*R@7e$QNF9x{)&uI9Z+S#Xq+ERjZ#EnsZ|dS z??>!|TuUVft@>$VS&k4V#d>NKDrL4gRLV~f8!j?65P-{uLLmUHuu542hrZJa_F8EK zd!-VhqRO-?GTbH`v%FS*rJP#9uQ}|0I_fH5N+H!FYkxKU5q6?d#fIEhdas^RKmQYp z@M)_m&9j>P8;f$K)nRsDxnhAxkMv7X{zA3dRgbHxI%@tL)%USj{OLbY0|TY{TDcV> zy&Q_kUHSVT>p_laHzP`|6m})jWqfDHWx0$7jPsqWsu#2BV|E=lq74FpTOl%%UI0i~FSvE9{RYPHc6Hdh|GsVF;@ z>X?>7bSjHTg{)0YqUZ&go*SI$m$r#C7Li#iV-hY}=Ed?n(E3HTEVD(0B93fPD@>b; zCZSv6@}w(PG_l;Nh`SXoB5zD}b;oc*yw9&QENstzno&Y(V2u1+00000NkvXXt^-0~ Eg6J38@c;k- diff --git a/public/images/pokemon/shiny/female/668.png b/public/images/pokemon/shiny/female/668.png index 1f56d13bc4c59af30283ad820e0ddc66a0bc175a..ec0d2338fac39bba3c75bce13c621f0b57f50d8d 100644 GIT binary patch delta 930 zcmV;T16}-s2doE>7=H)@0001DGedO%0004VQb$4nuFf3k0000gP)t-s0000G5D;o2 zD{)~unJ_(|fH1S7Zl;b>%sWicra|Wz6!gnu`1tt!=bry|MBD%X01k9gPE!E?|NsC0 z|NsC0|NsC0S4!Iy0009PNklP!cwW!>#*?%4!F^}028*B-*8lp9uJE4mqP_dte62=r=$o77{0k98kPFJ$sA?2#v;e(XM z5V~UfmXH358PXH8eF^;t9i9d!LN+ts+mwcy9L1vG`fIc9&+g%q7s7g zQGW%|G*l+kLMBZ>;xr>WEH*TM*#Zj)+k}qYWY?WSJ~AWggxYSS_of=!=Q@?7(f9YA z3QCS&3FEmvg^G7;d3$hb5~`f?0ocVdJ2Xt?s{?6iD`x&GomBaI<$0O?Ct^uA+kU$} zdHqKl)^E$x3onlT{_+S?3e)mDgq)gQo*OG_dU+1GY2y8r+H delta 888 zcmV-;1Bd*q2ZINY7=Hu<0001|!>)7y001gbOjJbx000mW5NaYTd1yYFFg>7vFteg= zwwqeaJ5150LFX70^vh%T`1t+jo-@lM>;M1&0d!JMQvg8b*k%9#0|!Y&K~#8Nh14-? z+dvct@Dsvhy+feTAyB$yi?|{|;f6wnW+-&g5HbnDxkC?X1b^0~p{)mHEVN+LsZ*DJ zfCPUE<8qnacj>*86`dtp{^LRBe)_+MWK4ER(+}iCCh2)UqX^Biu2*Af zVvWh-<#BXtM%6Z7N2g&C=4jRA7Z#nUnsi0D)hHUDcZ<`yc_V08mG;mBZgYKo{m!YH zeBVQt>m?eSu7B!wZ#!-gf8D6IDqT{?`0{dH*WX~fTK#AyrueH^esPOpd2jX>g?iDd z`!v0Ktlth%%qxRhwOZB-IzWp!sTf1G+kSyX?oRg)^?O}rgrHhA``=Kq7jd&(fR+Xk z){a~;(nB8?3UZ5xXW8m!-;ns90$s=%B4j3%^pj}NpMN-_k-Slm{Y|FPD2gln`_DWZ zM}g9MDuZzpf`+F&?~pg#+uQI9c#3o099VmFQBXua=WbspnUvC?f*E5}0OHEW?~d}A-=H!oF$o6|B{Rm$ zf;d5BJAX=>IaJAv62eRBAR#4e%jXEFB72<7Tm;}ErJ>ozcaRU5q%{R--8A_nJ&cM{ z0O*V6H0e+b(9J6fWvq_7G<1>UeBJ>=(zwAdoz3HIt^2p>1+{9Isf)<0p>7lM25pK&Qcp@brFI(5?NAiUT+inl)0mOas1|8wo|lEWu2h3O2h9<+N@f8l zmHCKB*rBIAB=NC-_U*AZis%4sh?DRTBGmvXi!$P%`9T!#qcb%`8^1wegX|S`P;3#$ zQ*jr0VGr5=mS%56J9PlXh`4L9)X;P8w*oH|4~ { expect(errors).toEqual([]); }); - it("check exp back variant files", () => { + it("check exp back female variant files", () => { + const dirPath = `${rootDir}exp${path.sep}back${path.sep}female${path.sep}`; + const errors = getMissingFiles(expVariant.back.female, dirPath); + if (errors.length) { + console.log("errors", errors); + } + expect(errors.length).toBe(0); + }); + + it("check exp back male variant files", () => { const dirPath = `${rootDir}exp${path.sep}back${path.sep}`; - const errors = getMissingFiles(expVariant.back, dirPath); + const backMaleVariant = deepCopy(expVariant.back); + delete backMaleVariant.female; + const errors = getMissingFiles(backMaleVariant, dirPath); if (errors.length) { console.log("errors", errors); } @@ -239,8 +250,8 @@ describe("check if every variant's sprite are correctly set", () => { expect(errors).toEqual([]); }); - it("look over every file in variant exp back and check if present in masterlist", () => { - const dirPath = `${rootDir}exp${path.sep}back${path.sep}`; + it("look over every file in variant exp back female and check if present in masterlist", () => { + const dirPath = `${rootDir}exp${path.sep}back${path.sep}female${path.sep}`; const errors = getMissingMasterlist(expVariant.back, dirPath); if (errors.length) { console.log("errors for ", dirPath, errors); @@ -248,6 +259,15 @@ describe("check if every variant's sprite are correctly set", () => { expect(errors).toEqual([]); }); + it("look over every file in variant exp back male and check if present in masterlist", () => { + const dirPath = `${rootDir}exp${path.sep}back${path.sep}`; + const errors = getMissingMasterlist(expVariant.back, dirPath, [ "female" ]); + if (errors.length) { + console.log("errors for ", dirPath, errors); + } + expect(errors.length).toBe(0); + }); + it("look over every file in variant exp female and check if present in masterlist", () => { const dirPath = `${rootDir}exp${path.sep}female${path.sep}`; const errors = getMissingMasterlist(expVariant.female, dirPath); From 03011c4601c5fb84c5aa6048fc18079469411c03 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 11 Feb 2025 17:35:24 -0500 Subject: [PATCH 10/23] [Balance] Change IV Scanner to single stack (#5299) * Make IV Scanner max stack 1 * Apply suggestions from code review Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: damocleas --- .../encounters/safari-zone-encounter.ts | 2 +- src/modifier/modifier.ts | 12 +++++------ src/phases/encounter-phase.ts | 2 +- src/phases/mystery-encounter-phases.ts | 2 +- src/phases/scan-ivs-phase.ts | 19 ++++------------- src/ui/battle-message-ui-handler.ts | 21 ++----------------- 6 files changed, 15 insertions(+), 43 deletions(-) diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index fd078e1ffaa..aa497e3c8fc 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -315,7 +315,7 @@ async function summonSafariPokemon() { const ivScannerModifier = globalScene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { - globalScene.pushPhase(new ScanIvsPhase(pokemon.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6))); + globalScene.pushPhase(new ScanIvsPhase(pokemon.getBattlerIndex())); } } diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 37f88deea7f..d955385ecee 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -165,9 +165,9 @@ export abstract class PersistentModifier extends Modifier { public stackCount: number; public virtualStackCount: number; - constructor(type: ModifierType, stackCount?: number) { + constructor(type: ModifierType, stackCount: number = 1) { super(type); - this.stackCount = stackCount === undefined ? 1 : stackCount; + this.stackCount = stackCount; this.virtualStackCount = 0; } @@ -3295,7 +3295,7 @@ export class ContactHeldItemTransferChanceModifier extends HeldItemTransferModif export class IvScannerModifier extends PersistentModifier { constructor(type: ModifierType, stackCount?: number) { - super(type, stackCount); + super(type); } match(modifier: Modifier): boolean { @@ -3303,7 +3303,7 @@ export class IvScannerModifier extends PersistentModifier { } clone(): IvScannerModifier { - return new IvScannerModifier(this.type, this.stackCount); + return new IvScannerModifier(this.type); } /** @@ -3311,11 +3311,11 @@ export class IvScannerModifier extends PersistentModifier { * @returns always `true` */ override apply(): boolean { - return true; + return true; //Dude are you kidding me } getMaxStackCount(): number { - return 3; + return 1; } } diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 7e62ca17f7c..1dd275ab130 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -478,7 +478,7 @@ export class EncounterPhase extends BattlePhase { })); const ivScannerModifier = globalScene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { - enemyField.map(p => globalScene.pushPhase(new ScanIvsPhase(p.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6)))); + enemyField.map(p => globalScene.pushPhase(new ScanIvsPhase(p.getBattlerIndex()))); } } diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index be07dbfc196..da78f59535f 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -396,7 +396,7 @@ export class MysteryEncounterBattlePhase extends Phase { if (encounterMode !== MysteryEncounterMode.TRAINER_BATTLE) { const ivScannerModifier = globalScene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { - enemyField.map(p => globalScene.pushPhase(new ScanIvsPhase(p.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6)))); + enemyField.map(p => globalScene.pushPhase(new ScanIvsPhase(p.getBattlerIndex()))); } } diff --git a/src/phases/scan-ivs-phase.ts b/src/phases/scan-ivs-phase.ts index 519d7913b79..9230844ff9b 100644 --- a/src/phases/scan-ivs-phase.ts +++ b/src/phases/scan-ivs-phase.ts @@ -1,7 +1,6 @@ import { globalScene } from "#app/global-scene"; import type { BattlerIndex } from "#app/battle"; -import { CommonBattleAnim, CommonAnim } from "#app/data/battle-anims"; -import { Stat } from "#app/enums/stat"; +import { PERMANENT_STATS, Stat } from "#app/enums/stat"; import { getPokemonNameWithAffix } from "#app/messages"; import { getTextColor, TextStyle } from "#app/ui/text"; import { Mode } from "#app/ui/ui"; @@ -9,21 +8,14 @@ import i18next from "i18next"; import { PokemonPhase } from "./pokemon-phase"; export class ScanIvsPhase extends PokemonPhase { - private shownIvs: number; - constructor(battlerIndex: BattlerIndex, shownIvs: number) { + constructor(battlerIndex: BattlerIndex) { super(battlerIndex); - - this.shownIvs = shownIvs; } start() { super.start(); - if (!this.shownIvs) { - return this.end(); - } - const pokemon = this.getPokemon(); let enemyIvs: number[] = []; @@ -34,12 +26,11 @@ export class ScanIvsPhase extends PokemonPhase { for (let e = 0; e < enemyField.length; e++) { enemyIvs = enemyField[e].ivs; const currentIvs = globalScene.gameData.dexData[enemyField[e].species.getRootSpeciesId()].ivs; // we are using getRootSpeciesId() here because we want to check against the baby form, not the mid form if it exists - const ivsToShow = globalScene.ui.getMessageHandler().getTopIvs(enemyIvs, this.shownIvs); statsContainer = enemyField[e].getBattleInfo().getStatsValueContainer().list as Phaser.GameObjects.Sprite[]; statsContainerLabels = statsContainer.filter(m => m.name.indexOf("icon_stat_label") >= 0); for (let s = 0; s < statsContainerLabels.length; s++) { const ivStat = Stat[statsContainerLabels[s].frame.name]; - if (enemyIvs[ivStat] > currentIvs[ivStat] && ivsToShow.indexOf(Number(ivStat)) >= 0) { + if (enemyIvs[ivStat] > currentIvs[ivStat] && PERMANENT_STATS.indexOf(Number(ivStat)) >= 0) { const hexColour = enemyIvs[ivStat] === 31 ? getTextColor(TextStyle.PERFECT_IV, false, uiTheme) : getTextColor(TextStyle.SUMMARY_GREEN, false, uiTheme); const hexTextColour = Phaser.Display.Color.HexStringToColor(hexColour).color; statsContainerLabels[s].setTint(hexTextColour); @@ -53,9 +44,7 @@ export class ScanIvsPhase extends PokemonPhase { globalScene.ui.setMode(Mode.CONFIRM, () => { globalScene.ui.setMode(Mode.MESSAGE); globalScene.ui.clearText(); - new CommonBattleAnim(CommonAnim.LOCK_ON, pokemon, pokemon).play(false, () => { - globalScene.ui.getMessageHandler().promptIvs(pokemon.id, pokemon.ivs, this.shownIvs).then(() => this.end()); - }); + globalScene.ui.getMessageHandler().promptIvs(pokemon.id, pokemon.ivs).then(() => this.end()); }, () => { globalScene.ui.setMode(Mode.MESSAGE); globalScene.ui.clearText(); diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 93de69240c3..c87ac18c65d 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -6,7 +6,6 @@ import { addWindow } from "./ui-theme"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { Button } from "#enums/buttons"; import i18next from "i18next"; -import type { Stat } from "#app/enums/stat"; import { PERMANENT_STATS, getStatKey } from "#app/enums/stat"; export default class BattleMessageUiHandler extends MessageUiHandler { @@ -191,13 +190,12 @@ export default class BattleMessageUiHandler extends MessageUiHandler { }); } - promptIvs(pokemonId: number, ivs: number[], shownIvsCount: number): Promise { + promptIvs(pokemonId: number, ivs: number[]): Promise { return new Promise(resolve => { globalScene.executeWithSeedOffset(() => { let levelUpStatsValuesText = ""; - const shownStats = this.getTopIvs(ivs, shownIvsCount); for (const s of PERMANENT_STATS) { - levelUpStatsValuesText += `${shownStats.includes(s) ? this.getIvDescriptor(ivs[s], s, pokemonId) : "???"}\n`; + levelUpStatsValuesText += `${this.getIvDescriptor(ivs[s], s, pokemonId)}\n`; } this.levelUpStatsValuesContent.text = levelUpStatsValuesText; this.levelUpStatsIncrContent.setVisible(false); @@ -211,21 +209,6 @@ export default class BattleMessageUiHandler extends MessageUiHandler { }); } - getTopIvs(ivs: number[], shownIvsCount: number): Stat[] { - let shownStats: Stat[] = []; - if (shownIvsCount < 6) { - const statsPool = PERMANENT_STATS.slice(); - // Sort the stats from highest to lowest iv - statsPool.sort((s1, s2) => ivs[s2] - ivs[s1]); - for (let i = 0; i < shownIvsCount; i++) { - shownStats.push(statsPool[i]); - } - } else { - shownStats = PERMANENT_STATS.slice(); - } - return shownStats; - } - getIvDescriptor(value: number, typeIv: number, pokemonId: number): string { const starterSpecies = globalScene.getPokemonById(pokemonId)!.species.getRootSpeciesId(); // we are using getRootSpeciesId() here because we want to check against the baby form, not the mid form if it exists const starterIvs: number[] = globalScene.gameData.dexData[starterSpecies].ivs; From ce8b5752c47d6141449db8ee66e85fa52811d500 Mon Sep 17 00:00:00 2001 From: Esca Date: Tue, 11 Feb 2025 23:36:49 +0100 Subject: [PATCH 11/23] Fix Lunar Dance and Healing Wish not failing when no valid teammates are present (#5195) Co-authored-by: damocleas --- src/data/move.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 1c768f20bb0..cc22f582790 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -9463,7 +9463,8 @@ export function initMoves() { .ballBombMove(), new SelfStatusMove(Moves.HEALING_WISH, Type.PSYCHIC, -1, 10, -1, 0, 4) .attr(SacrificialFullRestoreAttr, false, "moveTriggers:sacrificialFullRestore") - .triageMove(), + .triageMove() + .condition(failIfLastInPartyCondition), new AttackMove(Moves.BRINE, Type.WATER, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 4) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getHpRatio() < 0.5 ? 2 : 1), new AttackMove(Moves.NATURAL_GIFT, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 4) @@ -9748,7 +9749,8 @@ export function initMoves() { new SelfStatusMove(Moves.LUNAR_DANCE, Type.PSYCHIC, -1, 10, -1, 0, 4) .attr(SacrificialFullRestoreAttr, true, "moveTriggers:lunarDanceRestore") .danceMove() - .triageMove(), + .triageMove() + .condition(failIfLastInPartyCondition), new AttackMove(Moves.CRUSH_GRIP, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) .attr(OpponentHighHpPowerAttr, 120), new AttackMove(Moves.MAGMA_STORM, Type.FIRE, MoveCategory.SPECIAL, 100, 75, 5, -1, 0, 4) From b483aa04651f1eaec52f7d11f95caa3a230ce210 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 11 Feb 2025 17:39:04 -0500 Subject: [PATCH 12/23] [Sprite] Fix Stunfisk variant backs to use shader (#5293) --- .../images/pokemon/variant/_masterlist.json | 2 +- public/images/pokemon/variant/back/618.json | 40 + public/images/pokemon/variant/back/618_2.json | 2750 ----------------- public/images/pokemon/variant/back/618_2.png | Bin 3582 -> 0 bytes public/images/pokemon/variant/back/618_3.json | 2750 ----------------- public/images/pokemon/variant/back/618_3.png | Bin 3593 -> 0 bytes 6 files changed, 41 insertions(+), 5501 deletions(-) create mode 100644 public/images/pokemon/variant/back/618.json delete mode 100644 public/images/pokemon/variant/back/618_2.json delete mode 100644 public/images/pokemon/variant/back/618_2.png delete mode 100644 public/images/pokemon/variant/back/618_3.json delete mode 100644 public/images/pokemon/variant/back/618_3.png diff --git a/public/images/pokemon/variant/_masterlist.json b/public/images/pokemon/variant/_masterlist.json index f52b61d1289..14b3198c22d 100644 --- a/public/images/pokemon/variant/_masterlist.json +++ b/public/images/pokemon/variant/_masterlist.json @@ -1397,7 +1397,7 @@ "612": [0, 1, 1], "616": [0, 1, 1], "617": [0, 1, 1], - "618": [0, 2, 2], + "618": [0, 1, 1], "619": [0, 1, 1], "620": [0, 1, 1], "621": [0, 1, 1], diff --git a/public/images/pokemon/variant/back/618.json b/public/images/pokemon/variant/back/618.json new file mode 100644 index 00000000000..d4db4967946 --- /dev/null +++ b/public/images/pokemon/variant/back/618.json @@ -0,0 +1,40 @@ +{ + "1": { + "cebd00": "bdac99", + "ffff00": "f3e6dd", + "6b6319": "987b6d", + "081019": "081019", + "52423a": "312118", + "6b524a": "4a342a", + "bd846b": "8c3841", + "846b63": "6b3838", + "d69c84": "ad4c4c", + "efce42": "eac2bd", + "d6cec5": "d6cec5", + "ffffff": "ffffff", + "081018": "081018", + "735a52": "564038", + "735a53": "564038", + "9c8473": "a08773", + "bda59c": "e6dbd6" + }, + "2": { + "cebd00": "58536b", + "ffff00": "707488", + "6b6319": "39314a", + "081019": "081019", + "52423a": "5a2e2e", + "6b524a": "804e48", + "bd846b": "cec9b1", + "846b63": "9c7765", + "d69c84": "f0ead6", + "efce42": "9fadb9", + "d6cec5": "4c8c4c", + "ffffff": "79a962", + "081018": "204a29", + "735a52": "885011", + "735a53": "735555", + "9c8473": "c18a2c", + "bda59c": "efc44b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/618_2.json b/public/images/pokemon/variant/back/618_2.json deleted file mode 100644 index d82c52e26e2..00000000000 --- a/public/images/pokemon/variant/back/618_2.json +++ /dev/null @@ -1,2750 +0,0 @@ -{ - "textures": [ - { - "image": "618_2.png", - "format": "RGBA8888", - "size": { - "w": 221, - "h": 221 - }, - "scale": 1, - "frames": [ - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7ed241f9d4e0679b62ab26da17057d65:739de537da7171a9caf5769b4458f68f:22e585907b89e90c4fc3ab2512d175fd$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/618_2.png b/public/images/pokemon/variant/back/618_2.png deleted file mode 100644 index a0077a1f0232355d371b605e244154aa9177503c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3582 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 Ef<4{sCIA2c diff --git a/public/images/pokemon/variant/back/618_3.json b/public/images/pokemon/variant/back/618_3.json deleted file mode 100644 index 17c49c5e59b..00000000000 --- a/public/images/pokemon/variant/back/618_3.json +++ /dev/null @@ -1,2750 +0,0 @@ -{ - "textures": [ - { - "image": "618_3.png", - "format": "RGBA8888", - "size": { - "w": 221, - "h": 221 - }, - "scale": 1, - "frames": [ - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 77, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 30 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 77, - "h": 26 - }, - "frame": { - "x": 77, - "y": 0, - "w": 77, - "h": 26 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 76, - "h": 32 - }, - "frame": { - "x": 77, - "y": 26, - "w": 76, - "h": 32 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 76, - "h": 31 - }, - "frame": { - "x": 0, - "y": 30, - "w": 76, - "h": 31 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 76, - "h": 29 - }, - "frame": { - "x": 76, - "y": 58, - "w": 76, - "h": 29 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 76, - "h": 27 - }, - "frame": { - "x": 0, - "y": 61, - "w": 76, - "h": 27 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 76, - "h": 26 - }, - "frame": { - "x": 76, - "y": 87, - "w": 76, - "h": 26 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 88, - "w": 75, - "h": 32 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 32 - }, - "frame": { - "x": 0, - "y": 120, - "w": 75, - "h": 32 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 73, - "h": 32 - }, - "frame": { - "x": 0, - "y": 152, - "w": 73, - "h": 32 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 73, - "h": 31 - }, - "frame": { - "x": 0, - "y": 184, - "w": 73, - "h": 31 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 73, - "h": 30 - }, - "frame": { - "x": 73, - "y": 152, - "w": 73, - "h": 30 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 75, - "h": 27 - }, - "frame": { - "x": 146, - "y": 113, - "w": 75, - "h": 27 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 74, - "h": 28 - }, - "frame": { - "x": 146, - "y": 140, - "w": 74, - "h": 28 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 29 - }, - "frame": { - "x": 146, - "y": 168, - "w": 73, - "h": 29 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 77, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 73, - "h": 28 - }, - "frame": { - "x": 73, - "y": 182, - "w": 73, - "h": 28 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7ed241f9d4e0679b62ab26da17057d65:739de537da7171a9caf5769b4458f68f:22e585907b89e90c4fc3ab2512d175fd$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/618_3.png b/public/images/pokemon/variant/back/618_3.png deleted file mode 100644 index aaba24cfc58ffa65672345b8618cda273267f236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3593 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 Date: Tue, 11 Feb 2025 23:40:20 +0100 Subject: [PATCH 13/23] Adding for text on main dex page (#5300) --- src/ui/pokedex-ui-handler.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 4c920a094c6..791b80d8da2 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -150,6 +150,7 @@ export default class PokedexUiHandler extends MessageUiHandler { private pokemonNumberText: Phaser.GameObjects.Text; private pokemonSprite: Phaser.GameObjects.Sprite; private pokemonNameText: Phaser.GameObjects.Text; + private pokemonFormText: Phaser.GameObjects.Text; private type1Icon: Phaser.GameObjects.Sprite; private type2Icon: Phaser.GameObjects.Sprite; @@ -418,6 +419,10 @@ export default class PokedexUiHandler extends MessageUiHandler { this.pokemonNameText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonNameText); + this.pokemonFormText = addTextObject(6, 122, "", TextStyle.PARTY, { fontSize: textSettings.instructionTextSize }); + this.pokemonFormText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonFormText); + const starterBoxContainer = globalScene.add.container(speciesContainerX + 6, 9); //115 this.starterSelectScrollBar = new ScrollBar(161, 12, 5, pokemonContainerWindow.height - 6, 9); @@ -1943,6 +1948,12 @@ export default class PokedexUiHandler extends MessageUiHandler { this.pokemonSprite.setTint(0); } + if (isFormCaught || isFormSeen || globalScene.dexForDevs) { + this.pokemonFormText.setText("Form Text"); + } else { + this.pokemonFormText.setText(""); + } + if (isFormCaught || isFormSeen || globalScene.dexForDevs) { const speciesForm = getPokemonSpeciesForm(species.speciesId, 0); // TODO: always selecting the first form this.setTypeIcons(speciesForm.type1, speciesForm.type2); From 5743751e5ca93c455f5b9a0da26c1dd9f21b4fcc Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Wed, 12 Feb 2025 00:01:54 +0100 Subject: [PATCH 14/23] [Bug][Test] Adding bypass faint to abilities that need it + fixing Perish Body (#5226) * Added tests for snad spit, seed sower and perish body; for all three, the test checking if the ability triggers after the user faints is failing. * Adding .bypassFaint() to the three abilities, tests passing * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Removed incorrect test for perish song * Added tests for perish body when one mon already has the perish song tag, both ways * Changed ability behavior to pass tests * Removing superfluous conditional --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/ability.ts | 11 ++- src/test/abilities/perish_body.test.ts | 116 +++++++++++++++++++++++++ src/test/abilities/sand_spit.test.ts | 17 +++- src/test/abilities/seed_sower.test.ts | 69 +++++++++++++++ 4 files changed, 207 insertions(+), 6 deletions(-) create mode 100644 src/test/abilities/perish_body.test.ts create mode 100644 src/test/abilities/seed_sower.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index a6d00b29fbc..347054d2447 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1003,7 +1003,7 @@ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr { override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !move.hitsSubstitute(attacker, pokemon)) { - if (pokemon.getTag(BattlerTagType.PERISH_SONG) || attacker.getTag(BattlerTagType.PERISH_SONG)) { + if (attacker.getTag(BattlerTagType.PERISH_SONG)) { return false; } else { if (!simulated) { @@ -6141,7 +6141,8 @@ export function initAbilities() { .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.hasFlag(MoveFlags.SOUND_BASED), 0.5) .ignorable(), new Ability(Abilities.SAND_SPIT, 8) - .attr(PostDefendWeatherChangeAbAttr, WeatherType.SANDSTORM, (target, user, move) => move.category !== MoveCategory.STATUS), + .attr(PostDefendWeatherChangeAbAttr, WeatherType.SANDSTORM, (target, user, move) => move.category !== MoveCategory.STATUS) + .bypassFaint(), new Ability(Abilities.ICE_SCALES, 8) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.category === MoveCategory.SPECIAL, 0.5) .ignorable(), @@ -6174,7 +6175,8 @@ export function initAbilities() { new Ability(Abilities.STEELY_SPIRIT, 8) .attr(UserFieldMoveTypePowerBoostAbAttr, Type.STEEL), new Ability(Abilities.PERISH_BODY, 8) - .attr(PostDefendPerishSongAbAttr, 4), + .attr(PostDefendPerishSongAbAttr, 4) + .bypassFaint(), new Ability(Abilities.WANDERING_SPIRIT, 8) .attr(PostDefendAbilitySwapAbAttr) .bypassFaint() @@ -6232,7 +6234,8 @@ export function initAbilities() { .attr(PostDefendAbilityGiveAbAttr, Abilities.LINGERING_AROMA) .bypassFaint(), new Ability(Abilities.SEED_SOWER, 9) - .attr(PostDefendTerrainChangeAbAttr, TerrainType.GRASSY), + .attr(PostDefendTerrainChangeAbAttr, TerrainType.GRASSY) + .bypassFaint(), new Ability(Abilities.THERMAL_EXCHANGE, 9) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => user.getMoveType(move) === Type.FIRE && move.category !== MoveCategory.STATUS, Stat.ATK, 1) .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) diff --git a/src/test/abilities/perish_body.test.ts b/src/test/abilities/perish_body.test.ts new file mode 100644 index 00000000000..70ba6d8d684 --- /dev/null +++ b/src/test/abilities/perish_body.test.ts @@ -0,0 +1,116 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + + +describe("Abilities - Perish Song", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override.battleType("single"); + game.override.disableCrits(); + + game.override.enemySpecies(Species.MAGIKARP); + game.override.enemyAbility(Abilities.BALL_FETCH); + + game.override.starterSpecies(Species.CURSOLA); + game.override.ability(Abilities.PERISH_BODY); + game.override.moveset([ Moves.SPLASH ]); + }); + + it("should trigger when hit with damaging move", async () => { + game.override.enemyMoveset([ Moves.AQUA_JET ]); + await game.classicMode.startBattle(); + const cursola = game.scene.getPlayerPokemon(); + const magikarp = game.scene.getEnemyPokemon(); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(cursola?.summonData.tags[0].turnCount).toBe(3); + expect(magikarp?.summonData.tags[0].turnCount).toBe(3); + }); + + it("should trigger even when fainting", async () => { + game.override.enemyMoveset([ Moves.AQUA_JET ]) + .enemyLevel(100) + .startingLevel(1); + await game.classicMode.startBattle([ Species.CURSOLA, Species.FEEBAS ]); + const magikarp = game.scene.getEnemyPokemon(); + + game.move.select(Moves.SPLASH); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + expect(magikarp?.summonData.tags[0].turnCount).toBe(3); + }); + + it("should not activate if attacker already has perish song", async () => { + game.override.enemyMoveset([ Moves.PERISH_SONG, Moves.AQUA_JET, Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.FEEBAS, Species.CURSOLA ]); + const feebas = game.scene.getPlayerPokemon(); + const magikarp = game.scene.getEnemyPokemon(); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.PERISH_SONG); + await game.toNextTurn(); + + expect(feebas?.summonData.tags[0].turnCount).toBe(3); + expect(magikarp?.summonData.tags[0].turnCount).toBe(3); + + game.doSwitchPokemon(1); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + const cursola = game.scene.getPlayerPokemon(); + expect(cursola?.summonData.tags.length).toBe(0); + expect(magikarp?.summonData.tags[0].turnCount).toBe(2); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.AQUA_JET); + await game.toNextTurn(); + + expect(cursola?.summonData.tags.length).toBe(0); + expect(magikarp?.summonData.tags[0].turnCount).toBe(1); + + }); + + it("should activate if cursola already has perish song, but not reset its counter", async () => { + game.override.enemyMoveset([ Moves.PERISH_SONG, Moves.AQUA_JET, Moves.SPLASH ]); + game.override.moveset([ Moves.WHIRLWIND, Moves.SPLASH ]); + game.override.startingWave(5); + await game.classicMode.startBattle([ Species.CURSOLA ]); + const cursola = game.scene.getPlayerPokemon(); + + game.move.select(Moves.WHIRLWIND); + await game.forceEnemyMove(Moves.PERISH_SONG); + await game.toNextTurn(); + + const magikarp = game.scene.getEnemyPokemon(); + expect(cursola?.summonData.tags[0].turnCount).toBe(3); + expect(magikarp?.summonData.tags.length).toBe(0); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.AQUA_JET); + await game.toNextTurn(); + + expect(cursola?.summonData.tags[0].turnCount).toBe(2); + expect(magikarp?.summonData.tags.length).toBe(1); + expect(magikarp?.summonData.tags[0].turnCount).toBe(3); + }); +}); diff --git a/src/test/abilities/sand_spit.test.ts b/src/test/abilities/sand_spit.test.ts index 1c21cff3c14..092c3e66105 100644 --- a/src/test/abilities/sand_spit.test.ts +++ b/src/test/abilities/sand_spit.test.ts @@ -36,7 +36,7 @@ describe("Abilities - Sand Spit", () => { it("should trigger when hit with damaging move", async () => { game.override.enemyMoveset([ Moves.TACKLE ]); - await game.startBattle(); + await game.classicMode.startBattle(); game.move.select(Moves.SPLASH); await game.toNextTurn(); @@ -44,9 +44,22 @@ describe("Abilities - Sand Spit", () => { expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SANDSTORM); }, 20000); + it("should trigger even when fainting", async () => { + game.override.enemyMoveset([ Moves.TACKLE ]) + .enemyLevel(100) + .startingLevel(1); + await game.classicMode.startBattle([ Species.SILICOBRA, Species.MAGIKARP ]); + + game.move.select(Moves.SPLASH); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SANDSTORM); + }); + it("should not trigger when targetted with status moves", async () => { game.override.enemyMoveset([ Moves.GROWL ]); - await game.startBattle(); + await game.classicMode.startBattle(); game.move.select(Moves.COIL); await game.toNextTurn(); diff --git a/src/test/abilities/seed_sower.test.ts b/src/test/abilities/seed_sower.test.ts new file mode 100644 index 00000000000..71b76e24d2e --- /dev/null +++ b/src/test/abilities/seed_sower.test.ts @@ -0,0 +1,69 @@ +import { TerrainType } from "#app/data/terrain"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + + +describe("Abilities - Seed Sower", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override.battleType("single"); + game.override.disableCrits(); + + game.override.enemySpecies(Species.MAGIKARP); + game.override.enemyAbility(Abilities.BALL_FETCH); + + game.override.starterSpecies(Species.ARBOLIVA); + game.override.ability(Abilities.SEED_SOWER); + game.override.moveset([ Moves.SPLASH ]); + }); + + it("should trigger when hit with damaging move", async () => { + game.override.enemyMoveset([ Moves.TACKLE ]); + await game.classicMode.startBattle(); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(game.scene.arena.terrain?.terrainType).toBe(TerrainType.GRASSY); + }); + + it("should trigger even when fainting", async () => { + game.override.enemyMoveset([ Moves.TACKLE ]) + .enemyLevel(100) + .startingLevel(1); + await game.classicMode.startBattle([ Species.ARBOLIVA, Species.MAGIKARP ]); + + game.move.select(Moves.SPLASH); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + expect(game.scene.arena.terrain?.terrainType).toBe(TerrainType.GRASSY); + }); + + it("should not trigger when targetted with status moves", async () => { + game.override.enemyMoveset([ Moves.GROWL ]); + await game.classicMode.startBattle(); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(game.scene.arena.terrain?.terrainType).not.toBe(TerrainType.GRASSY); + }); +}); From 7199aee9adc98bbc3cc927516aba985c4a1180a0 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Wed, 12 Feb 2025 19:09:25 +0100 Subject: [PATCH 15/23] [UI/UX] Fix showing form names and types (#5302) * Correctly displaying form names * Fixed bug which displayed wrong form types * Handling unobtainable forms * F button does not show up if there is only one obtainable form --- src/data/pokemon-species.ts | 13 ++++++++----- src/ui/pokedex-page-ui-handler.ts | 2 +- src/ui/pokedex-ui-handler.ts | 8 ++++---- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 041632b183d..43b719878bb 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1003,19 +1003,22 @@ export class PokemonForm extends PokemonSpeciesForm { public formName: string; public formKey: string; public formSpriteKey: string | null; + public isUnobtainable: boolean; // This is a collection of form keys that have in-run form changes, but should still be separately selectable from the start screen private starterSelectableKeys: string[] = [ "10", "50", "10-pc", "50-pc", "red", "orange", "yellow", "green", "blue", "indigo", "violet" ]; constructor(formName: string, formKey: string, type1: Type, type2: Type | null, height: number, weight: number, ability1: Abilities, ability2: Abilities, abilityHidden: Abilities, baseTotal: number, baseHp: number, baseAtk: number, baseDef: number, baseSpatk: number, baseSpdef: number, baseSpd: number, - catchRate: number, baseFriendship: number, baseExp: number, genderDiffs: boolean = false, formSpriteKey: string | null = null, isStarterSelectable: boolean = false + catchRate: number, baseFriendship: number, baseExp: number, genderDiffs: boolean = false, formSpriteKey: string | null = null, isStarterSelectable: boolean = false, + isUnobtainable: boolean = false ) { super(type1, type2, height, weight, ability1, ability2, abilityHidden, baseTotal, baseHp, baseAtk, baseDef, baseSpatk, baseSpdef, baseSpd, catchRate, baseFriendship, baseExp, genderDiffs, (isStarterSelectable || !formKey)); this.formName = formName; this.formKey = formKey; this.formSpriteKey = formSpriteKey; + this.isUnobtainable = isUnobtainable; } getFormSpriteKey(_formIndex?: number) { @@ -1812,7 +1815,7 @@ export function initSpecies() { new PokemonForm("Dragon", "dragon", Type.DRAGON, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), new PokemonForm("Dark", "dark", Type.DARK, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), new PokemonForm("Fairy", "fairy", Type.FAIRY, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), - new PokemonForm("???", "unknown", Type.UNKNOWN, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360), + new PokemonForm("???", "unknown", Type.UNKNOWN, null, 3.2, 320, Abilities.MULTITYPE, Abilities.NONE, Abilities.NONE, 720, 120, 120, 120, 120, 120, 120, 3, 0, 360, false, null, false, true), ), new PokemonSpecies(Species.VICTINI, 5, false, false, true, "Victory Pokémon", Type.PSYCHIC, Type.FIRE, 0.4, 4, Abilities.VICTORY_STAR, Abilities.NONE, Abilities.NONE, 600, 100, 100, 100, 100, 100, 100, 3, 100, 300, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.SNIVY, 5, false, false, false, "Grass Snake Pokémon", Type.GRASS, null, 0.6, 8.1, Abilities.OVERGROW, Abilities.NONE, Abilities.CONTRARY, 308, 45, 45, 55, 45, 55, 63, 45, 70, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), @@ -2366,7 +2369,7 @@ export function initSpecies() { ), new PokemonSpecies(Species.MARSHADOW, 7, false, false, true, "Gloomdweller Pokémon", Type.FIGHTING, Type.GHOST, 0.7, 22.2, Abilities.TECHNICIAN, Abilities.NONE, Abilities.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, GrowthRate.SLOW, null, false, true, new PokemonForm("Normal", "", Type.FIGHTING, Type.GHOST, 0.7, 22.2, Abilities.TECHNICIAN, Abilities.NONE, Abilities.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, false, null, true), - new PokemonForm("Zenith", "zenith", Type.FIGHTING, Type.GHOST, 0.7, 22.2, Abilities.TECHNICIAN, Abilities.NONE, Abilities.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300) + new PokemonForm("Zenith", "zenith", Type.FIGHTING, Type.GHOST, 0.7, 22.2, Abilities.TECHNICIAN, Abilities.NONE, Abilities.NONE, 600, 90, 125, 80, 90, 90, 125, 3, 0, 300, false, null, false, true) ), new PokemonSpecies(Species.POIPOLE, 7, true, false, false, "Poison Pin Pokémon", Type.POISON, null, 0.6, 1.8, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 420, 67, 73, 67, 73, 67, 73, 45, 0, 210, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.NAGANADEL, 7, true, false, false, "Poison Pin Pokémon", Type.POISON, Type.DRAGON, 3.6, 150, Abilities.BEAST_BOOST, Abilities.NONE, Abilities.NONE, 540, 73, 73, 73, 127, 73, 121, 45, 0, 270, GrowthRate.SLOW, null, false), @@ -2465,11 +2468,11 @@ export function initSpecies() { new PokemonSpecies(Species.GRAPPLOCT, 8, false, false, false, "Jujitsu Pokémon", Type.FIGHTING, null, 1.6, 39, Abilities.LIMBER, Abilities.NONE, Abilities.TECHNICIAN, 480, 80, 118, 90, 70, 80, 42, 45, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.SINISTEA, 8, false, false, false, "Black Tea Pokémon", Type.GHOST, null, 0.1, 0.2, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.MEDIUM_FAST, null, false, false, new PokemonForm("Phony Form", "phony", Type.GHOST, null, 0.1, 0.2, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true), - new PokemonForm("Antique Form", "antique", Type.GHOST, null, 0.1, 0.2, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true), + new PokemonForm("Antique Form", "antique", Type.GHOST, null, 0.1, 0.2, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, "", true, true), ), new PokemonSpecies(Species.POLTEAGEIST, 8, false, false, false, "Black Tea Pokémon", Type.GHOST, null, 0.2, 0.4, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, GrowthRate.MEDIUM_FAST, null, false, false, new PokemonForm("Phony Form", "phony", Type.GHOST, null, 0.2, 0.4, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true), - new PokemonForm("Antique Form", "antique", Type.GHOST, null, 0.2, 0.4, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true), + new PokemonForm("Antique Form", "antique", Type.GHOST, null, 0.2, 0.4, Abilities.WEAK_ARMOR, Abilities.NONE, Abilities.CURSED_BODY, 508, 60, 65, 65, 134, 114, 70, 60, 50, 178, false, "", true, true), ), new PokemonSpecies(Species.HATENNA, 8, false, false, false, "Calm Pokémon", Type.PSYCHIC, null, 0.4, 3.4, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 265, 42, 30, 45, 56, 53, 39, 235, 50, 53, GrowthRate.SLOW, 0, false), new PokemonSpecies(Species.HATTREM, 8, false, false, false, "Serene Pokémon", Type.PSYCHIC, null, 0.6, 4.8, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 370, 57, 40, 65, 86, 73, 49, 120, 50, 130, GrowthRate.SLOW, 0, false), diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 683045d7814..e3386033030 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -1583,7 +1583,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { if (this.species.forms[newFormIndex].isStarterSelectable || globalScene.dexForDevs) { // TODO: are those bangs correct? break; } - } while (newFormIndex !== props.formIndex); + } while (newFormIndex !== props.formIndex || this.species.forms[newFormIndex].isUnobtainable); starterAttributes.form = newFormIndex; // store the selected form this.savedStarterAttributes.form = starterAttributes.form; this.formIndex = newFormIndex; diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 791b80d8da2..153c132d45a 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -1698,7 +1698,7 @@ export default class PokedexUiHandler extends MessageUiHandler { openFormTray(species: PokemonSpecies): boolean { - this.trayForms = species.forms; + this.trayForms = species.forms.filter(f => !f.isUnobtainable); this.trayNumIcons = this.trayForms.length; this.trayRows = Math.floor(this.trayNumIcons / 9) + (this.trayNumIcons % 9 === 0 ? 0 : 1); @@ -1949,19 +1949,19 @@ export default class PokedexUiHandler extends MessageUiHandler { } if (isFormCaught || isFormSeen || globalScene.dexForDevs) { - this.pokemonFormText.setText("Form Text"); + this.pokemonFormText.setText(species.getFormNameToDisplay(formIndex, false)); } else { this.pokemonFormText.setText(""); } if (isFormCaught || isFormSeen || globalScene.dexForDevs) { - const speciesForm = getPokemonSpeciesForm(species.speciesId, 0); // TODO: always selecting the first form + const speciesForm = getPokemonSpeciesForm(species.speciesId, formIndex ?? 0); // TODO: always selecting the first form this.setTypeIcons(speciesForm.type1, speciesForm.type2); } else { this.setTypeIcons(null, null); } - if (species?.forms?.length > 1) { + if (species?.forms?.filter(f => !f.isUnobtainable).length > 1) { if (!this.showingTray) { this.showFormTrayIconElement.setVisible(true); this.showFormTrayLabel.setVisible(true); From 595413edd702ff2b64ddf2b02d6f8ed21320a011 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Wed, 12 Feb 2025 18:14:22 -0500 Subject: [PATCH 16/23] [i18n] Update locale submodules (Feb 12 21:30 UTC) (#5308) --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index bfcd7f91c39..f46dcdb423c 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit bfcd7f91c39630f155839872c8f66fd0a89e12ac +Subproject commit f46dcdb423c24137a25d9f6078cc6be68502801a From be0f3b2ab3d57fdbe8fede812a2e8cb66e5e5b28 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Thu, 13 Feb 2025 04:14:22 +0100 Subject: [PATCH 17/23] [Bug][UI/UX] Dex bug fixes 12 feb (#5307) * Fixed bug when setting tint of eggs for egg move filter * Form text is properly hidden when going to filters * Displaying level up moves of alternate forms * Offsetting form cycle button when uncaught text is shown * Pokedex buttons now appear on mobile touchpad * Hotfix to prevent "Normal" form to showing the text * Preventing filter texts from showing gibberish * Moving cursor to input text when pressing on filter * Introducing method to get full obtainable unlocks for a given species * Filtering obtainable unlocks in dex * Buying eggs in dex does not crash the game * Shiny icon does not overlap with luck text for evolutions * Shiny is maintained correctly when cycling through different pages * Displacing text elements to avoid overlap for localized form names * Checking starter caughtAttr in addition to pokemon caughtAttr --- index.css | 12 +++---- src/data/pokemon-species.ts | 60 ++++++++++++++++++++++++++++++- src/ui/filter-text.ts | 2 +- src/ui/pokedex-page-ui-handler.ts | 48 ++++++++++++++----------- src/ui/pokedex-scan-ui-handler.ts | 7 +++- src/ui/pokedex-ui-handler.ts | 45 ++++++++++++++--------- 6 files changed, 127 insertions(+), 47 deletions(-) diff --git a/index.css b/index.css index 2ec106516d2..d32d9da9bb1 100644 --- a/index.css +++ b/index.css @@ -164,13 +164,13 @@ input:-internal-autofill-selected { } /* Show cycle buttons only on STARTER_SELECT and on touch configuration panel */ -#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadOpenFilters, -#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='RUN_INFO']) #apadCycleForm, -#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='RUN_INFO']) #apadCycleShiny, +#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='POKEDEX'], [data-ui-mode='POKEDEX_PAGE']) #apadOpenFilters, +#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='POKEDEX'], [data-ui-mode='POKEDEX_PAGE'], [data-ui-mode='RUN_INFO']) #apadCycleForm, +#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='POKEDEX'], [data-ui-mode='POKEDEX_PAGE'], [data-ui-mode='RUN_INFO']) #apadCycleShiny, #touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleNature, -#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='RUN_INFO']) #apadCycleAbility, -#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleGender, -#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleVariant { +#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='POKEDEX_PAGE'], [data-ui-mode='RUN_INFO']) #apadCycleAbility, +#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='POKEDEX_PAGE']) #apadCycleGender, +#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT'], [data-ui-mode='POKEDEX']) #apadCycleVariant { display: none; } diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 43b719878bb..5883bac3fc8 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -7,7 +7,7 @@ import i18next from "i18next"; import type { AnySound } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import type { GameMode } from "#app/game-mode"; -import type { StarterMoveset } from "#app/system/game-data"; +import { DexAttr, type StarterMoveset } from "#app/system/game-data"; import * as Utils from "#app/utils"; import { uncatchableSpecies } from "#app/data/balance/biomes"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; @@ -32,6 +32,37 @@ export enum Region { PALDEA } +// TODO: this is horrible and will need to be removed once a refactor/cleanup of forms is executed. +export const normalForm: Species[] = [ + Species.PIKACHU, + Species.RAICHU, + Species.EEVEE, + Species.JOLTEON, + Species.FLAREON, + Species.VAPOREON, + Species.ESPEON, + Species.UMBREON, + Species.LEAFEON, + Species.GLACEON, + Species.SYLVEON, + Species.PICHU, + Species.ROTOM, + Species.DIALGA, + Species.PALKIA, + Species.KYUREM, + Species.GENESECT, + Species.FROAKIE, + Species.FROGADIER, + Species.GRENINJA, + Species.ROCKRUFF, + Species.NECROZMA, + Species.MAGEARNA, + Species.MARSHADOW, + Species.CRAMORANT, + Species.ZARUDE, + Species.CALYREX +]; + /** * Gets the {@linkcode PokemonSpecies} object associated with the {@linkcode Species} enum given * @param species The species to fetch @@ -997,6 +1028,33 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali ? this.forms[formIndex || 0].getFormSpriteKey() : ""; } + + /** + * Generates a {@linkcode bigint} corresponding to the maximum unlocks possible for this species, + * taking into account if the species has a male/female gender, and which variants are implemented. + * @returns {@linkcode bigint} Maximum unlocks, can be compared with {@linkcode DexEntry.caughtAttr}. + */ + getFullUnlocksData(): bigint { + let caughtAttr: bigint = 0n; + caughtAttr += DexAttr.NON_SHINY; + caughtAttr += DexAttr.SHINY; + if (this.malePercent !== null) { + if (this.malePercent > 0) { + caughtAttr += DexAttr.MALE; + } + if (this.malePercent < 100) { + caughtAttr += DexAttr.FEMALE; + } + } + caughtAttr += DexAttr.DEFAULT_VARIANT; + if (this.hasVariants()) { + caughtAttr += DexAttr.VARIANT_2; + caughtAttr += DexAttr.VARIANT_3; + } + caughtAttr += DexAttr.DEFAULT_FORM; + + return caughtAttr; + } } export class PokemonForm extends PokemonSpeciesForm { diff --git a/src/ui/filter-text.ts b/src/ui/filter-text.ts index f961fc9b385..f69cf113f05 100644 --- a/src/ui/filter-text.ts +++ b/src/ui/filter-text.ts @@ -133,7 +133,7 @@ export class FilterText extends Phaser.GameObjects.Container { const handler = ui.getHandler() as AwaitableUiHandler; handler.tutorialActive = true; // Switch to the dialog test window - this.selections[index].setText(String(i18next.t(dialogueName))); + this.selections[index].setText( dialogueName === "" ? this.defaultText : String(i18next.t(dialogueName))); ui.revertMode(); this.onChange(); }, diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index e3386033030..8b5a5bd12f1 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -16,7 +16,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 } from "#app/data/pokemon-species"; +import { allSpecies, getPokemonSpeciesForm, normalForm } from "#app/data/pokemon-species"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { starterPassiveAbilities } from "#app/data/balance/passives"; import { Type } from "#enums/type"; @@ -383,7 +383,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.pokemonHatchedIcon.setScale(0.8); this.pokemonCaughtHatchedContainer.add(this.pokemonHatchedIcon); - this.pokemonShinyIcon = globalScene.add.sprite(14, 76, "shiny_icons"); + this.pokemonShinyIcon = globalScene.add.sprite(14, 117, "shiny_icons"); this.pokemonShinyIcon.setOrigin(0.15, 0.2); this.pokemonShinyIcon.setScale(1); this.pokemonCaughtHatchedContainer.add(this.pokemonShinyIcon); @@ -601,7 +601,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { const form = species.forms[formIndex]; // If this form has a specific set of moves, we get them. - this.levelMoves = (formIndex > 0 && pokemonFormLevelMoves.hasOwnProperty(formIndex)) ? pokemonFormLevelMoves[species.speciesId][formIndex] : pokemonSpeciesLevelMoves[species.speciesId]; + this.levelMoves = (formIndex > 0 && pokemonFormLevelMoves.hasOwnProperty(species.speciesId) && pokemonFormLevelMoves[species.speciesId].hasOwnProperty(formIndex)) ? pokemonFormLevelMoves[species.speciesId][formIndex] : pokemonSpeciesLevelMoves[species.speciesId]; this.ability1 = form.ability1; this.ability2 = (form.ability2 === form.ability1) ? undefined : form.ability2; this.abilityHidden = (form.abilityHidden === form.ability1) ? undefined : form.abilityHidden; @@ -741,14 +741,16 @@ export default class PokedexPageUiHandler extends MessageUiHandler { return biomes; } - isCaught(otherSpeciesDexEntry?: DexEntry): bigint { + isCaught(otherSpecies?: PokemonSpecies): bigint { if (globalScene.dexForDevs) { return 255n; } - const dexEntry = otherSpeciesDexEntry ? otherSpeciesDexEntry : this.speciesStarterDexEntry; + const species = otherSpecies ? otherSpecies : this.species; + const dexEntry = globalScene.gameData.dexData[species.speciesId]; + const starterDexEntry = globalScene.gameData.dexData[this.getStarterSpeciesId(species.speciesId)]; - return dexEntry?.caughtAttr ?? 0n; + return (dexEntry?.caughtAttr ?? 0n) & (starterDexEntry?.caughtAttr ?? 0n) & species.getFullUnlocksData(); } /** * Check whether a given form is caught for a given species. @@ -765,11 +767,9 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } const species = otherSpecies ? otherSpecies : this.species; const formIndex = otherFormIndex !== undefined ? otherFormIndex : this.formIndex; - const dexEntry = globalScene.gameData.dexData[species.speciesId]; + const caughtAttr = this.isCaught(species); - const isFormCaught = dexEntry ? - (dexEntry.caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n - : false; + const isFormCaught = (caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n; return isFormCaught; } @@ -783,8 +783,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { */ initStarterPrefs(): StarterAttributes { const starterAttributes : StarterAttributes | null = this.species ? { ...this.savedStarterAttributes } : null; - const dexEntry = globalScene.gameData.dexData[this.species.speciesId]; - const caughtAttr = this.isCaught(dexEntry); + const caughtAttr = this.isCaught(); // no preferences or Pokemon wasn't caught, return empty attribute if (!starterAttributes || !caughtAttr) { @@ -1235,7 +1234,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { case MenuOptions.BIOMES: - if (!(this.isCaught() || this.speciesStarterDexEntry?.seenAttr)) { + if (!(isCaught || this.speciesStarterDexEntry?.seenAttr)) { error = true; } else { this.blockInput = true; @@ -1372,8 +1371,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { }); this.evolutions.map(evo => { const evoSpecies = allSpecies.find(species => species.speciesId === evo.speciesId); - const evoSpeciesStarterDexEntry = evoSpecies ? globalScene.gameData.dexData[evoSpecies.speciesId] : undefined; - const isCaughtEvo = this.isCaught(evoSpeciesStarterDexEntry) ? true : false; + const isCaughtEvo = this.isCaught(evoSpecies) ? true : false; // Attempts to find the formIndex of the evolved species const newFormKey = evo.evoFormKey ? evo.evoFormKey : (this.species.forms.length > 0 ? this.species.forms[this.formIndex].formKey : ""); const matchingForm = evoSpecies?.forms.find(form => form.formKey === newFormKey); @@ -1535,6 +1533,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.pokemonShinyIcon.setVisible(true); starterAttributes.shiny = true; + this.savedStarterAttributes.shiny = starterAttributes.shiny; } else { let newVariant = props.variant; do { @@ -1688,7 +1687,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); - const egg = new Egg({ scene: globalScene, species: this.species.speciesId, sourceType: EggSourceType.SAME_SPECIES_EGG }); + const egg = new Egg({ scene: globalScene, species: this.starterId, sourceType: EggSourceType.SAME_SPECIES_EGG }); egg.addEggToGameData(); globalScene.gameData.saveSystem().then(success => { @@ -1856,6 +1855,9 @@ export default class PokedexPageUiHandler extends MessageUiHandler { if (this.canCycleGender) { this.updateButtonIcon(SettingKeyboard.Button_Cycle_Gender, gamepadType, this.genderIconElement, this.genderLabel); } + } else { + // Making space for "Uncaught" text + this.instructionRowY += 8; } if (this.canCycleForm) { this.updateButtonIcon(SettingKeyboard.Button_Cycle_Form, gamepadType, this.formIconElement, this.formLabel); @@ -2093,7 +2095,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { if (species) { const dexEntry = globalScene.gameData.dexData[species.speciesId]; - const caughtAttr = this.isCaught(dexEntry); + const caughtAttr = this.isCaught(species); if (!caughtAttr) { const props = this.starterAttributes; @@ -2240,13 +2242,11 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.pokemonCandyContainer.setVisible(true); if (pokemonPrevolutions.hasOwnProperty(species.speciesId)) { - this.pokemonShinyIcon.setY(135); this.pokemonShinyIcon.setFrame(getVariantIcon(variant)); this.pokemonHatchedIcon.setVisible(false); this.pokemonHatchedCountText.setVisible(false); this.pokemonFormText.setY(36); } else { - this.pokemonShinyIcon.setY(117); this.pokemonHatchedIcon.setVisible(true); this.pokemonHatchedCountText.setVisible(true); this.pokemonFormText.setY(42); @@ -2276,7 +2276,12 @@ export default class PokedexPageUiHandler extends MessageUiHandler { if (isFormCaught || isFormSeen) { const speciesForm = getPokemonSpeciesForm(species.speciesId, formIndex!); // TODO: is the bang correct? this.setTypeIcons(speciesForm.type1, speciesForm.type2); - this.pokemonFormText.setText(species.getFormNameToDisplay(formIndex)); + // TODO: change this once forms are refactored + if (normalForm.includes(species.speciesId) && !formIndex) { + this.pokemonFormText.setText(""); + } else { + this.pokemonFormText.setText(species.getFormNameToDisplay(formIndex)); + } this.pokemonFormText.setVisible(true); if (!isFormCaught) { this.pokemonFormText.setY(18); @@ -2321,7 +2326,8 @@ export default class PokedexPageUiHandler extends MessageUiHandler { */ getCurrentDexProps(speciesId: number): bigint { let props = 0n; - const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr; + const species = allSpecies.find(sp => sp.speciesId === speciesId); + const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr & globalScene.gameData.dexData[this.getStarterSpeciesId(speciesId)].caughtAttr & (species?.getFullUnlocksData() ?? 0n); /* this checks the gender of the pokemon; this works by checking a) that the starter preferences for the species exist, and if so, is it female. If so, it'll add DexAttr.FEMALE to our temp props * It then checks b) if the caughtAttr for the pokemon is female and NOT male - this means that the ONLY gender we've gotten is female, and we need to add DexAttr.FEMALE to our temp props diff --git a/src/ui/pokedex-scan-ui-handler.ts b/src/ui/pokedex-scan-ui-handler.ts index 0fc7171842a..3920c866486 100644 --- a/src/ui/pokedex-scan-ui-handler.ts +++ b/src/ui/pokedex-scan-ui-handler.ts @@ -115,6 +115,10 @@ export default class PokedexScanUiHandler extends FormModalUiHandler { this.reduceKeys(); + setTimeout(() => { + input.setFocus(); // Focus after a short delay to avoid unwanted input + }, 50); + input.on("keydown", (inputObject, evt: KeyboardEvent) => { if ([ "escape", "space" ].some((v) => v === evt.key.toLowerCase() || v === evt.code.toLowerCase()) && ui.getMode() === Mode.AUTO_COMPLETE) { // Delete autocomplete list and recovery focus. @@ -169,7 +173,8 @@ export default class PokedexScanUiHandler extends FormModalUiHandler { this.submitAction = (_) => { if (ui.getMode() === Mode.POKEDEX_SCAN) { this.sanitizeInputs(); - const sanitizedName = btoa(unescape(encodeURIComponent(this.inputs[0].text))); + const outputName = this.reducedKeys.includes(this.inputs[0].text) ? this.inputs[0].text : ""; + const sanitizedName = btoa(unescape(encodeURIComponent(outputName))); config.buttonActions[0](sanitizedName); return true; } diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 153c132d45a..940223528fb 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -7,7 +7,7 @@ import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; import type { PokemonForm } from "#app/data/pokemon-species"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { allSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data/pokemon-species"; +import { allSpecies, getPokemonSpeciesForm, getPokerusStarters, normalForm } from "#app/data/pokemon-species"; import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { catchableSpecies } from "#app/data/balance/biomes"; import { Type } from "#enums/type"; @@ -411,15 +411,15 @@ export default class PokedexUiHandler extends MessageUiHandler { this.iconAnimHandler = new PokemonIconAnimHandler(); this.iconAnimHandler.setup(); - this.pokemonNumberText = addTextObject(6, 140, "", TextStyle.SUMMARY); + this.pokemonNumberText = addTextObject(6, 141, "", TextStyle.SUMMARY); this.pokemonNumberText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonNumberText); - this.pokemonNameText = addTextObject(6, 127, "", TextStyle.SUMMARY); + this.pokemonNameText = addTextObject(6, 128, "", TextStyle.SUMMARY); this.pokemonNameText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonNameText); - this.pokemonFormText = addTextObject(6, 122, "", TextStyle.PARTY, { fontSize: textSettings.instructionTextSize }); + this.pokemonFormText = addTextObject(6, 121, "", TextStyle.PARTY, { fontSize: textSettings.instructionTextSize }); this.pokemonFormText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonFormText); @@ -565,7 +565,7 @@ export default class PokedexUiHandler extends MessageUiHandler { this.starterPreferences[species.speciesId] = this.initStarterPrefs(species); - if (dexEntry.caughtAttr || globalScene.dexForDevs) { + if ((dexEntry.caughtAttr & species.getFullUnlocksData()) || globalScene.dexForDevs) { icon.clearTint(); } else if (dexEntry.seenAttr) { icon.setTint(0x808080); @@ -606,7 +606,7 @@ export default class PokedexUiHandler extends MessageUiHandler { return {}; } - const caughtAttr = dexEntry.caughtAttr; + const caughtAttr = dexEntry.caughtAttr & species.getFullUnlocksData(); const hasShiny = caughtAttr & DexAttr.SHINY; const hasNonShiny = caughtAttr & DexAttr.NON_SHINY; @@ -1255,7 +1255,9 @@ export default class PokedexUiHandler extends MessageUiHandler { // First, ensure you have the caught attributes for the species else default to bigint 0 // TODO: This might be removed depending on how accessible we want the pokedex function to be - const caughtAttr = globalScene.gameData.dexData[container.species.speciesId]?.caughtAttr || BigInt(0); + const caughtAttr = (globalScene.gameData.dexData[container.species.speciesId]?.caughtAttr || BigInt(0)) & + (globalScene.gameData.dexData[this.getStarterSpeciesId(container.species.speciesId)]?.caughtAttr || BigInt(0)) & + container.species.getFullUnlocksData(); const starterData = globalScene.gameData.starterData[starterId]; const isStarterProgressable = speciesEggMoves.hasOwnProperty(starterId); @@ -1292,7 +1294,7 @@ export default class PokedexUiHandler extends MessageUiHandler { if (fitsEggMove1 && !fitsLevelMove1) { container.eggMove1Icon.setVisible(true); const em1 = eggMoves.findIndex(name => name === selectedMove1); - if ((starterData[starterId].eggMoves & (1 << em1)) === 0) { + if ((starterData.eggMoves & (1 << em1)) === 0) { container.eggMove1Icon.setTint(0x808080); } else { container.eggMove1Icon.clearTint(); @@ -1303,7 +1305,7 @@ export default class PokedexUiHandler extends MessageUiHandler { if (fitsEggMove2 && !fitsLevelMove2) { container.eggMove2Icon.setVisible(true); const em2 = eggMoves.findIndex(name => name === selectedMove2); - if ((starterData[starterId].eggMoves & (1 << em2)) === 0) { + if ((starterData.eggMoves & (1 << em2)) === 0) { container.eggMove2Icon.setTint(0x808080); } else { container.eggMove2Icon.clearTint(); @@ -1580,11 +1582,12 @@ export default class PokedexUiHandler extends MessageUiHandler { } const speciesId = container.species.speciesId; + const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr & globalScene.gameData.dexData[this.getStarterSpeciesId(speciesId)].caughtAttr & container.species.getFullUnlocksData(); this.updateStarterValueLabel(container); container.label.setVisible(true); - const speciesVariants = speciesId && globalScene.gameData.dexData[speciesId].caughtAttr & DexAttr.SHINY - ? [ DexAttr.DEFAULT_VARIANT, DexAttr.VARIANT_2, DexAttr.VARIANT_3 ].filter(v => !!(globalScene.gameData.dexData[speciesId].caughtAttr & v)) + const speciesVariants = speciesId && caughtAttr & DexAttr.SHINY + ? [ DexAttr.DEFAULT_VARIANT, DexAttr.VARIANT_2, DexAttr.VARIANT_3 ].filter(v => !!(caughtAttr & v)) : []; for (let v = 0; v < 3; v++) { const hasVariant = speciesVariants.length > v; @@ -1595,7 +1598,7 @@ export default class PokedexUiHandler extends MessageUiHandler { } container.starterPassiveBgs.setVisible(!!globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].passiveAttr); - container.hiddenAbilityIcon.setVisible(!!globalScene.gameData.dexData[speciesId].caughtAttr && !!(globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].abilityAttr & 4)); + container.hiddenAbilityIcon.setVisible(!!caughtAttr && !!(globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].abilityAttr & 4)); container.classicWinIcon.setVisible(globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].classicWinCount > 0); container.favoriteIcon.setVisible(this.starterPreferences[speciesId]?.favorite ?? false); @@ -1729,7 +1732,7 @@ export default class PokedexUiHandler extends MessageUiHandler { this.trayContainers = []; this.trayForms.map((f, index) => { - const isFormCaught = dexEntry ? (dexEntry.caughtAttr & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n : false; + const isFormCaught = dexEntry ? (dexEntry.caughtAttr & species.getFullUnlocksData() & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n : false; const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n : false; const formContainer = new PokedexMonContainer(species, { formIndex: f.formIndex, female: props.female, shiny: props.shiny, variant: props.variant }); this.iconAnimHandler.addOrUpdate(formContainer.icon, PokemonIconAnimMode.NONE); @@ -1866,6 +1869,7 @@ export default class PokedexUiHandler extends MessageUiHandler { } else { this.pokemonNumberText.setText(species ? i18next.t("pokedexUiHandler:pokemonNumber") + padInt(species.speciesId, 4) : ""); this.pokemonNameText.setText(species ? "???" : ""); + this.pokemonFormText.setText(""); this.type1Icon.setVisible(false); this.type2Icon.setVisible(false); if (species) { @@ -1899,8 +1903,9 @@ export default class PokedexUiHandler extends MessageUiHandler { if (species) { const dexEntry = globalScene.gameData.dexData[species.speciesId]; + const caughtAttr = dexEntry.caughtAttr & globalScene.gameData.dexData[this.getStarterSpeciesId(species.speciesId)].caughtAttr & species.getFullUnlocksData(); - if (!dexEntry.caughtAttr) { + if (!caughtAttr) { const props = this.getSanitizedProps(globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId))); if (shiny === undefined) { @@ -1917,7 +1922,7 @@ export default class PokedexUiHandler extends MessageUiHandler { } } - const isFormCaught = dexEntry ? (dexEntry.caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false; + const isFormCaught = dexEntry ? (caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false; const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false; const assetLoadCancelled = new BooleanHolder(false); @@ -1949,7 +1954,12 @@ export default class PokedexUiHandler extends MessageUiHandler { } if (isFormCaught || isFormSeen || globalScene.dexForDevs) { - this.pokemonFormText.setText(species.getFormNameToDisplay(formIndex, false)); + // TODO: change this once forms are refactored + if (normalForm.includes(species.speciesId) && !formIndex) { + this.pokemonFormText.setText(""); + } else { + this.pokemonFormText.setText(species.getFormNameToDisplay(formIndex, false)); + } } else { this.pokemonFormText.setText(""); } @@ -2054,7 +2064,8 @@ export default class PokedexUiHandler extends MessageUiHandler { */ getCurrentDexProps(speciesId: number): bigint { let props = 0n; - const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr; + const species = allSpecies.find(sp => sp.speciesId === speciesId); + const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr & globalScene.gameData.dexData[this.getStarterSpeciesId(speciesId)].caughtAttr & (species?.getFullUnlocksData() ?? 0n); /* this checks the gender of the pokemon; this works by checking a) that the starter preferences for the species exist, and if so, is it female. If so, it'll add DexAttr.FEMALE to our temp props * It then checks b) if the caughtAttr for the pokemon is female and NOT male - this means that the ONLY gender we've gotten is female, and we need to add DexAttr.FEMALE to our temp props From f1283ad1c8c8e4681a1c7db09b6eca54957bad14 Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Thu, 13 Feb 2025 22:11:40 +0100 Subject: [PATCH 18/23] [UI/UX] Valentine 2025 Event Banners (#5310) * Valentine 2025 Event Banners --- .../images/events/valentines2025event-de.png | Bin 3267 -> 20550 bytes .../images/events/valentines2025event-en.png | Bin 3267 -> 20537 bytes .../events/valentines2025event-es-ES.png | Bin 3267 -> 20570 bytes .../images/events/valentines2025event-fr.png | Bin 3267 -> 22433 bytes .../images/events/valentines2025event-it.png | Bin 3267 -> 20372 bytes .../images/events/valentines2025event-ja.png | Bin 3267 -> 27437 bytes .../images/events/valentines2025event-ko.png | Bin 3267 -> 25791 bytes .../events/valentines2025event-pt-BR.png | Bin 3267 -> 21243 bytes .../events/valentines2025event-zh-CN.png | Bin 3267 -> 24584 bytes 9 files changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/events/valentines2025event-de.png b/public/images/events/valentines2025event-de.png index 0ec3bfe704ba2a2e3882ae80fbcbaa71d14b1069..8dd41924a774f7175e47d526d174b5e99d50f329 100644 GIT binary patch literal 20550 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 Z@>j3vnmn{tQ39Rx=jrO_vd$@?2>=XxLvjEB literal 3267 zcmeHKdrVVj6#q(jE1;-xjv{Wmp>aCR630_1A`9M-whI~`j95*`tY}LC6_iI2+?aC$ zxy>Z8Jj$FBhdibgAp(W@U=0!K5Rfc2x9{GuKz7lpa~*$* z*eRr0gVUw}{FW+tVU9sX#A>>vI{|i^J?>RpbxGgH!4Ld^kdIV|BtPctyZB*If;{>R zq49R5H`3lTlNO}U^1;U@*jA7Ui=Pbx09LNrh9W(3^7>?c3ePq&T$UL`&-X!TaS`jL zuP;vYDR(SvKtUAan&+$2FP6+>>V^9gIfs+A>GbKGbPir}Z5%b8BBG`9)00ftOW7U+ zT_D$7gB!tN9-u6Zs9cSb4=Y5H-#+_x^ij_XAN4d=%w^FVDb3LuQ(n4>2u&y73erjW zsb?USv&*-Pg|eI5{-;=)s}ZmhVX$O=+U`AK0Sm2>v9biDA6yeeVZf2HsEct%8#=S-_-E=gCH347AOg@5BjXU-Mlz*tk}b zBLYeT{(A&UJ{&8O{QYgic^;&uV$HJiK5_I$%7O~#XKrwmc!+>w1&N|WW5FK4%B_)D zG)5ESE7Fc6e5{GQ!kUEwfEKOAu*^7exUL2#UR|G5JD?!QxN8ZB+Fr-TTf7cQZF>S8 z=+n8n2N)6^x9BQl*y6psSTCe;Q3dS=LcQ$#HI#ffRwVi5*PFKb_WRt$FOw@|h~7wK z>UN!Wk5ni-U!P_Lsis6@+6B?~O@kJVQM8M@Th!W6#hq>bV^9Flq7~@Z8q|$v6J%Hy zw@2nS1S1tg#yxqA>ZG%LBA-)ha;!>pg&-@HC;_v&6;b^HHa?fQbsz|7+-gKYl?=^G zwo^DtJ{&7E`P>|VxK<>VZRWdoKR5@&MvN#8N&T%QCXKgKs?iDp*W`!?fR)?dKxs^A zpRz#KdLj7uv3Lz^qd2r^6I*9xnfe#r_$_%A+v@?0v==gN-i=eUg_yrI$++@_jzvG< z**wPBz(>`!DjxAlcc?xUX5@>P_nD^*&gLDK9XQu;HQ< z>ZfXp_{L(cyTM=$q1NOdz5rIPJe|^*_lLbe$6JnA1T*gtN6G#Xrh*eDxnV7h s@Q95x4tEN)SPeBoX?cqO|3sM;RJp8EG?=c$nBP(GFL|NmA%`>m0)^P=#{d8T diff --git a/public/images/events/valentines2025event-en.png b/public/images/events/valentines2025event-en.png index 0ec3bfe704ba2a2e3882ae80fbcbaa71d14b1069..dc36dad33943be6145ee187cc3205ff1c739897f 100644 GIT binary patch literal 20537 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 F1OPEhqUrzu literal 3267 zcmeHKdrVVj6#q(jE1;-xjv{Wmp>aCR630_1A`9M-whI~`j95*`tY}LC6_iI2+?aC$ zxy>Z8Jj$FBhdibgAp(W@U=0!K5Rfc2x9{GuKz7lpa~*$* z*eRr0gVUw}{FW+tVU9sX#A>>vI{|i^J?>RpbxGgH!4Ld^kdIV|BtPctyZB*If;{>R zq49R5H`3lTlNO}U^1;U@*jA7Ui=Pbx09LNrh9W(3^7>?c3ePq&T$UL`&-X!TaS`jL zuP;vYDR(SvKtUAan&+$2FP6+>>V^9gIfs+A>GbKGbPir}Z5%b8BBG`9)00ftOW7U+ zT_D$7gB!tN9-u6Zs9cSb4=Y5H-#+_x^ij_XAN4d=%w^FVDb3LuQ(n4>2u&y73erjW zsb?USv&*-Pg|eI5{-;=)s}ZmhVX$O=+U`AK0Sm2>v9biDA6yeeVZf2HsEct%8#=S-_-E=gCH347AOg@5BjXU-Mlz*tk}b zBLYeT{(A&UJ{&8O{QYgic^;&uV$HJiK5_I$%7O~#XKrwmc!+>w1&N|WW5FK4%B_)D zG)5ESE7Fc6e5{GQ!kUEwfEKOAu*^7exUL2#UR|G5JD?!QxN8ZB+Fr-TTf7cQZF>S8 z=+n8n2N)6^x9BQl*y6psSTCe;Q3dS=LcQ$#HI#ffRwVi5*PFKb_WRt$FOw@|h~7wK z>UN!Wk5ni-U!P_Lsis6@+6B?~O@kJVQM8M@Th!W6#hq>bV^9Flq7~@Z8q|$v6J%Hy zw@2nS1S1tg#yxqA>ZG%LBA-)ha;!>pg&-@HC;_v&6;b^HHa?fQbsz|7+-gKYl?=^G zwo^DtJ{&7E`P>|VxK<>VZRWdoKR5@&MvN#8N&T%QCXKgKs?iDp*W`!?fR)?dKxs^A zpRz#KdLj7uv3Lz^qd2r^6I*9xnfe#r_$_%A+v@?0v==gN-i=eUg_yrI$++@_jzvG< z**wPBz(>`!DjxAlcc?xUX5@>P_nD^*&gLDK9XQu;HQ< z>ZfXp_{L(cyTM=$q1NOdz5rIPJe|^*_lLbe$6JnA1T*gtN6G#Xrh*eDxnV7h s@Q95x4tEN)SPeBoX?cqO|3sM;RJp8EG?=c$nBP(GFL|NmA%`>m0)^P=#{d8T diff --git a/public/images/events/valentines2025event-es-ES.png b/public/images/events/valentines2025event-es-ES.png index 0ec3bfe704ba2a2e3882ae80fbcbaa71d14b1069..0915299b7bdce6c51f3981035b27580fcb2c43b8 100644 GIT binary patch literal 20570 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 b#|ixBUtw$Dz{GV3d~~3vtDnm{r-UW|3Lu^j literal 3267 zcmeHKdrVVj6#q(jE1;-xjv{Wmp>aCR630_1A`9M-whI~`j95*`tY}LC6_iI2+?aC$ zxy>Z8Jj$FBhdibgAp(W@U=0!K5Rfc2x9{GuKz7lpa~*$* z*eRr0gVUw}{FW+tVU9sX#A>>vI{|i^J?>RpbxGgH!4Ld^kdIV|BtPctyZB*If;{>R zq49R5H`3lTlNO}U^1;U@*jA7Ui=Pbx09LNrh9W(3^7>?c3ePq&T$UL`&-X!TaS`jL zuP;vYDR(SvKtUAan&+$2FP6+>>V^9gIfs+A>GbKGbPir}Z5%b8BBG`9)00ftOW7U+ zT_D$7gB!tN9-u6Zs9cSb4=Y5H-#+_x^ij_XAN4d=%w^FVDb3LuQ(n4>2u&y73erjW zsb?USv&*-Pg|eI5{-;=)s}ZmhVX$O=+U`AK0Sm2>v9biDA6yeeVZf2HsEct%8#=S-_-E=gCH347AOg@5BjXU-Mlz*tk}b zBLYeT{(A&UJ{&8O{QYgic^;&uV$HJiK5_I$%7O~#XKrwmc!+>w1&N|WW5FK4%B_)D zG)5ESE7Fc6e5{GQ!kUEwfEKOAu*^7exUL2#UR|G5JD?!QxN8ZB+Fr-TTf7cQZF>S8 z=+n8n2N)6^x9BQl*y6psSTCe;Q3dS=LcQ$#HI#ffRwVi5*PFKb_WRt$FOw@|h~7wK z>UN!Wk5ni-U!P_Lsis6@+6B?~O@kJVQM8M@Th!W6#hq>bV^9Flq7~@Z8q|$v6J%Hy zw@2nS1S1tg#yxqA>ZG%LBA-)ha;!>pg&-@HC;_v&6;b^HHa?fQbsz|7+-gKYl?=^G zwo^DtJ{&7E`P>|VxK<>VZRWdoKR5@&MvN#8N&T%QCXKgKs?iDp*W`!?fR)?dKxs^A zpRz#KdLj7uv3Lz^qd2r^6I*9xnfe#r_$_%A+v@?0v==gN-i=eUg_yrI$++@_jzvG< z**wPBz(>`!DjxAlcc?xUX5@>P_nD^*&gLDK9XQu;HQ< z>ZfXp_{L(cyTM=$q1NOdz5rIPJe|^*_lLbe$6JnA1T*gtN6G#Xrh*eDxnV7h s@Q95x4tEN)SPeBoX?cqO|3sM;RJp8EG?=c$nBP(GFL|NmA%`>m0)^P=#{d8T diff --git a/public/images/events/valentines2025event-fr.png b/public/images/events/valentines2025event-fr.png index 0ec3bfe704ba2a2e3882ae80fbcbaa71d14b1069..dbaf23101ed15bb449f5e1bbc24bcd017269280e 100644 GIT binary patch literal 22433 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%0DB$D!)baVBcO z*KZ~E>{%>FiDZYKd5rzk<}wHE)}P*-v8}nwg5$>s%XhoZ`O&XcMLKlzo^e)wwpjV* z>mvt%=L4nsPL!ZcN`{qFr}~(y>K(-F)J2Qf^QgdXTX<7JL4 k;Lp&Os}(PQBRLnVpj3Ss`8DPV5)<7cE+?IaCR630_1A`9M-whI~`j95*`tY}LC6_iI2+?aC$ zxy>Z8Jj$FBhdibgAp(W@U=0!K5Rfc2x9{GuKz7lpa~*$* z*eRr0gVUw}{FW+tVU9sX#A>>vI{|i^J?>RpbxGgH!4Ld^kdIV|BtPctyZB*If;{>R zq49R5H`3lTlNO}U^1;U@*jA7Ui=Pbx09LNrh9W(3^7>?c3ePq&T$UL`&-X!TaS`jL zuP;vYDR(SvKtUAan&+$2FP6+>>V^9gIfs+A>GbKGbPir}Z5%b8BBG`9)00ftOW7U+ zT_D$7gB!tN9-u6Zs9cSb4=Y5H-#+_x^ij_XAN4d=%w^FVDb3LuQ(n4>2u&y73erjW zsb?USv&*-Pg|eI5{-;=)s}ZmhVX$O=+U`AK0Sm2>v9biDA6yeeVZf2HsEct%8#=S-_-E=gCH347AOg@5BjXU-Mlz*tk}b zBLYeT{(A&UJ{&8O{QYgic^;&uV$HJiK5_I$%7O~#XKrwmc!+>w1&N|WW5FK4%B_)D zG)5ESE7Fc6e5{GQ!kUEwfEKOAu*^7exUL2#UR|G5JD?!QxN8ZB+Fr-TTf7cQZF>S8 z=+n8n2N)6^x9BQl*y6psSTCe;Q3dS=LcQ$#HI#ffRwVi5*PFKb_WRt$FOw@|h~7wK z>UN!Wk5ni-U!P_Lsis6@+6B?~O@kJVQM8M@Th!W6#hq>bV^9Flq7~@Z8q|$v6J%Hy zw@2nS1S1tg#yxqA>ZG%LBA-)ha;!>pg&-@HC;_v&6;b^HHa?fQbsz|7+-gKYl?=^G zwo^DtJ{&7E`P>|VxK<>VZRWdoKR5@&MvN#8N&T%QCXKgKs?iDp*W`!?fR)?dKxs^A zpRz#KdLj7uv3Lz^qd2r^6I*9xnfe#r_$_%A+v@?0v==gN-i=eUg_yrI$++@_jzvG< z**wPBz(>`!DjxAlcc?xUX5@>P_nD^*&gLDK9XQu;HQ< z>ZfXp_{L(cyTM=$q1NOdz5rIPJe|^*_lLbe$6JnA1T*gtN6G#Xrh*eDxnV7h s@Q95x4tEN)SPeBoX?cqO|3sM;RJp8EG?=c$nBP(GFL|NmA%`>m0)^P=#{d8T diff --git a/public/images/events/valentines2025event-it.png b/public/images/events/valentines2025event-it.png index 0ec3bfe704ba2a2e3882ae80fbcbaa71d14b1069..b10eb8083beaf5fa321eabad9e64d77cbcd830f7 100644 GIT binary patch literal 20372 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 BH`M?D literal 3267 zcmeHKdrVVj6#q(jE1;-xjv{Wmp>aCR630_1A`9M-whI~`j95*`tY}LC6_iI2+?aC$ zxy>Z8Jj$FBhdibgAp(W@U=0!K5Rfc2x9{GuKz7lpa~*$* z*eRr0gVUw}{FW+tVU9sX#A>>vI{|i^J?>RpbxGgH!4Ld^kdIV|BtPctyZB*If;{>R zq49R5H`3lTlNO}U^1;U@*jA7Ui=Pbx09LNrh9W(3^7>?c3ePq&T$UL`&-X!TaS`jL zuP;vYDR(SvKtUAan&+$2FP6+>>V^9gIfs+A>GbKGbPir}Z5%b8BBG`9)00ftOW7U+ zT_D$7gB!tN9-u6Zs9cSb4=Y5H-#+_x^ij_XAN4d=%w^FVDb3LuQ(n4>2u&y73erjW zsb?USv&*-Pg|eI5{-;=)s}ZmhVX$O=+U`AK0Sm2>v9biDA6yeeVZf2HsEct%8#=S-_-E=gCH347AOg@5BjXU-Mlz*tk}b zBLYeT{(A&UJ{&8O{QYgic^;&uV$HJiK5_I$%7O~#XKrwmc!+>w1&N|WW5FK4%B_)D zG)5ESE7Fc6e5{GQ!kUEwfEKOAu*^7exUL2#UR|G5JD?!QxN8ZB+Fr-TTf7cQZF>S8 z=+n8n2N)6^x9BQl*y6psSTCe;Q3dS=LcQ$#HI#ffRwVi5*PFKb_WRt$FOw@|h~7wK z>UN!Wk5ni-U!P_Lsis6@+6B?~O@kJVQM8M@Th!W6#hq>bV^9Flq7~@Z8q|$v6J%Hy zw@2nS1S1tg#yxqA>ZG%LBA-)ha;!>pg&-@HC;_v&6;b^HHa?fQbsz|7+-gKYl?=^G zwo^DtJ{&7E`P>|VxK<>VZRWdoKR5@&MvN#8N&T%QCXKgKs?iDp*W`!?fR)?dKxs^A zpRz#KdLj7uv3Lz^qd2r^6I*9xnfe#r_$_%A+v@?0v==gN-i=eUg_yrI$++@_jzvG< z**wPBz(>`!DjxAlcc?xUX5@>P_nD^*&gLDK9XQu;HQ< z>ZfXp_{L(cyTM=$q1NOdz5rIPJe|^*_lLbe$6JnA1T*gtN6G#Xrh*eDxnV7h s@Q95x4tEN)SPeBoX?cqO|3sM;RJp8EG?=c$nBP(GFL|NmA%`>m0)^P=#{d8T diff --git a/public/images/events/valentines2025event-ja.png b/public/images/events/valentines2025event-ja.png index 0ec3bfe704ba2a2e3882ae80fbcbaa71d14b1069..7e9fe5ad3d4b32541215d9cf8ba766299e2ed11f 100644 GIT binary patch literal 27437 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

v!V-wL<9tE9CA@ASTs_1#fvp3 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 HtKk0uK!Vgt literal 3267 zcmeHKdrVVj6#q(jE1;-xjv{Wmp>aCR630_1A`9M-whI~`j95*`tY}LC6_iI2+?aC$ zxy>Z8Jj$FBhdibgAp(W@U=0!K5Rfc2x9{GuKz7lpa~*$* z*eRr0gVUw}{FW+tVU9sX#A>>vI{|i^J?>RpbxGgH!4Ld^kdIV|BtPctyZB*If;{>R zq49R5H`3lTlNO}U^1;U@*jA7Ui=Pbx09LNrh9W(3^7>?c3ePq&T$UL`&-X!TaS`jL zuP;vYDR(SvKtUAan&+$2FP6+>>V^9gIfs+A>GbKGbPir}Z5%b8BBG`9)00ftOW7U+ zT_D$7gB!tN9-u6Zs9cSb4=Y5H-#+_x^ij_XAN4d=%w^FVDb3LuQ(n4>2u&y73erjW zsb?USv&*-Pg|eI5{-;=)s}ZmhVX$O=+U`AK0Sm2>v9biDA6yeeVZf2HsEct%8#=S-_-E=gCH347AOg@5BjXU-Mlz*tk}b zBLYeT{(A&UJ{&8O{QYgic^;&uV$HJiK5_I$%7O~#XKrwmc!+>w1&N|WW5FK4%B_)D zG)5ESE7Fc6e5{GQ!kUEwfEKOAu*^7exUL2#UR|G5JD?!QxN8ZB+Fr-TTf7cQZF>S8 z=+n8n2N)6^x9BQl*y6psSTCe;Q3dS=LcQ$#HI#ffRwVi5*PFKb_WRt$FOw@|h~7wK z>UN!Wk5ni-U!P_Lsis6@+6B?~O@kJVQM8M@Th!W6#hq>bV^9Flq7~@Z8q|$v6J%Hy zw@2nS1S1tg#yxqA>ZG%LBA-)ha;!>pg&-@HC;_v&6;b^HHa?fQbsz|7+-gKYl?=^G zwo^DtJ{&7E`P>|VxK<>VZRWdoKR5@&MvN#8N&T%QCXKgKs?iDp*W`!?fR)?dKxs^A zpRz#KdLj7uv3Lz^qd2r^6I*9xnfe#r_$_%A+v@?0v==gN-i=eUg_yrI$++@_jzvG< z**wPBz(>`!DjxAlcc?xUX5@>P_nD^*&gLDK9XQu;HQ< z>ZfXp_{L(cyTM=$q1NOdz5rIPJe|^*_lLbe$6JnA1T*gtN6G#Xrh*eDxnV7h s@Q95x4tEN)SPeBoX?cqO|3sM;RJp8EG?=c$nBP(GFL|NmA%`>m0)^P=#{d8T diff --git a/public/images/events/valentines2025event-ko.png b/public/images/events/valentines2025event-ko.png index 0ec3bfe704ba2a2e3882ae80fbcbaa71d14b1069..558a402fc7764d11b01d5a13b4c836df2e2c8ae0 100644 GIT binary patch literal 25791 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 literal 3267 zcmeHKdrVVj6#q(jE1;-xjv{Wmp>aCR630_1A`9M-whI~`j95*`tY}LC6_iI2+?aC$ zxy>Z8Jj$FBhdibgAp(W@U=0!K5Rfc2x9{GuKz7lpa~*$* z*eRr0gVUw}{FW+tVU9sX#A>>vI{|i^J?>RpbxGgH!4Ld^kdIV|BtPctyZB*If;{>R zq49R5H`3lTlNO}U^1;U@*jA7Ui=Pbx09LNrh9W(3^7>?c3ePq&T$UL`&-X!TaS`jL zuP;vYDR(SvKtUAan&+$2FP6+>>V^9gIfs+A>GbKGbPir}Z5%b8BBG`9)00ftOW7U+ zT_D$7gB!tN9-u6Zs9cSb4=Y5H-#+_x^ij_XAN4d=%w^FVDb3LuQ(n4>2u&y73erjW zsb?USv&*-Pg|eI5{-;=)s}ZmhVX$O=+U`AK0Sm2>v9biDA6yeeVZf2HsEct%8#=S-_-E=gCH347AOg@5BjXU-Mlz*tk}b zBLYeT{(A&UJ{&8O{QYgic^;&uV$HJiK5_I$%7O~#XKrwmc!+>w1&N|WW5FK4%B_)D zG)5ESE7Fc6e5{GQ!kUEwfEKOAu*^7exUL2#UR|G5JD?!QxN8ZB+Fr-TTf7cQZF>S8 z=+n8n2N)6^x9BQl*y6psSTCe;Q3dS=LcQ$#HI#ffRwVi5*PFKb_WRt$FOw@|h~7wK z>UN!Wk5ni-U!P_Lsis6@+6B?~O@kJVQM8M@Th!W6#hq>bV^9Flq7~@Z8q|$v6J%Hy zw@2nS1S1tg#yxqA>ZG%LBA-)ha;!>pg&-@HC;_v&6;b^HHa?fQbsz|7+-gKYl?=^G zwo^DtJ{&7E`P>|VxK<>VZRWdoKR5@&MvN#8N&T%QCXKgKs?iDp*W`!?fR)?dKxs^A zpRz#KdLj7uv3Lz^qd2r^6I*9xnfe#r_$_%A+v@?0v==gN-i=eUg_yrI$++@_jzvG< z**wPBz(>`!DjxAlcc?xUX5@>P_nD^*&gLDK9XQu;HQ< z>ZfXp_{L(cyTM=$q1NOdz5rIPJe|^*_lLbe$6JnA1T*gtN6G#Xrh*eDxnV7h s@Q95x4tEN)SPeBoX?cqO|3sM;RJp8EG?=c$nBP(GFL|NmA%`>m0)^P=#{d8T diff --git a/public/images/events/valentines2025event-pt-BR.png b/public/images/events/valentines2025event-pt-BR.png index 0ec3bfe704ba2a2e3882ae80fbcbaa71d14b1069..45fa40f30fc9476a65f8d2ff134e4264c8dedb44 100644 GIT binary patch literal 21243 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 diff --git a/public/images/events/valentines2025event-zh-CN.png b/public/images/events/valentines2025event-zh-CN.png index 0ec3bfe704ba2a2e3882ae80fbcbaa71d14b1069..13256da720cfbb0e57ed3c3fb3d60eaa075126c8 100644 GIT binary patch literal 24584 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 KGb=H5js8Dn0t&VO literal 3267 zcmeHKdrVVj6#q(jE1;-xjv{Wmp>aCR630_1A`9M-whI~`j95*`tY}LC6_iI2+?aC$ zxy>Z8Jj$FBhdibgAp(W@U=0!K5Rfc2x9{GuKz7lpa~*$* z*eRr0gVUw}{FW+tVU9sX#A>>vI{|i^J?>RpbxGgH!4Ld^kdIV|BtPctyZB*If;{>R zq49R5H`3lTlNO}U^1;U@*jA7Ui=Pbx09LNrh9W(3^7>?c3ePq&T$UL`&-X!TaS`jL zuP;vYDR(SvKtUAan&+$2FP6+>>V^9gIfs+A>GbKGbPir}Z5%b8BBG`9)00ftOW7U+ zT_D$7gB!tN9-u6Zs9cSb4=Y5H-#+_x^ij_XAN4d=%w^FVDb3LuQ(n4>2u&y73erjW zsb?USv&*-Pg|eI5{-;=)s}ZmhVX$O=+U`AK0Sm2>v9biDA6yeeVZf2HsEct%8#=S-_-E=gCH347AOg@5BjXU-Mlz*tk}b zBLYeT{(A&UJ{&8O{QYgic^;&uV$HJiK5_I$%7O~#XKrwmc!+>w1&N|WW5FK4%B_)D zG)5ESE7Fc6e5{GQ!kUEwfEKOAu*^7exUL2#UR|G5JD?!QxN8ZB+Fr-TTf7cQZF>S8 z=+n8n2N)6^x9BQl*y6psSTCe;Q3dS=LcQ$#HI#ffRwVi5*PFKb_WRt$FOw@|h~7wK z>UN!Wk5ni-U!P_Lsis6@+6B?~O@kJVQM8M@Th!W6#hq>bV^9Flq7~@Z8q|$v6J%Hy zw@2nS1S1tg#yxqA>ZG%LBA-)ha;!>pg&-@HC;_v&6;b^HHa?fQbsz|7+-gKYl?=^G zwo^DtJ{&7E`P>|VxK<>VZRWdoKR5@&MvN#8N&T%QCXKgKs?iDp*W`!?fR)?dKxs^A zpRz#KdLj7uv3Lz^qd2r^6I*9xnfe#r_$_%A+v@?0v==gN-i=eUg_yrI$++@_jzvG< z**wPBz(>`!DjxAlcc?xUX5@>P_nD^*&gLDK9XQu;HQ< z>ZfXp_{L(cyTM=$q1NOdz5rIPJe|^*_lLbe$6JnA1T*gtN6G#Xrh*eDxnV7h s@Q95x4tEN)SPeBoX?cqO|3sM;RJp8EG?=c$nBP(GFL|NmA%`>m0)^P=#{d8T From d629bf12ab584162113db9c3e0ca2ded061de889 Mon Sep 17 00:00:00 2001 From: damocleas Date: Thu, 13 Feb 2025 16:20:13 -0500 Subject: [PATCH 19/23] [Misc][Balance] Organizing Evil Teams (#5303) * Organized all evil teams * Improved Giovanni and other Evil Team Leaders * Experienced endless pain --- src/data/trainer-config.ts | 259 +++++++++++++++++++++++-------------- 1 file changed, 162 insertions(+), 97 deletions(-) diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 016a2c9bca6..564518845dc 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -581,107 +581,107 @@ export class TrainerConfig { switch (team) { case "rocket": { return { - [TrainerPoolTier.COMMON]: [ Species.RATTATA, Species.KOFFING, Species.EKANS, Species.ZUBAT, Species.MAGIKARP, Species.HOUNDOUR, Species.ONIX, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB, Species.DROWZEE, Species.VILEPLUME ], - [TrainerPoolTier.UNCOMMON]: [ Species.PORYGON, Species.MANKEY, Species.MAGNEMITE, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE, Species.PALDEA_TAUROS, Species.OMANYTE, Species.KABUTO, Species.MAGBY, Species.ELEKID ], - [TrainerPoolTier.RARE]: [ Species.DRATINI, Species.LARVITAR ] + [TrainerPoolTier.COMMON]: [ Species.RATICATE, Species.ARBOK, Species.VILEPLUME, Species.ARCANINE, Species.GENGAR, Species.HYPNO, Species.ELECTRODE, Species.EXEGGUTOR, Species.CUBONE, Species.KOFFING, Species.GYARADOS, Species.CROBAT, Species.STEELIX, Species.HOUNDOOM, Species.HONCHKROW ], + [TrainerPoolTier.UNCOMMON]: [ Species.OMASTAR, Species.KABUTOPS, Species.MAGNEZONE, Species.ELECTIVIRE, Species.MAGMORTAR, Species.PORYGON_Z, Species.ANNIHILAPE, Species.ALOLA_SANDSLASH, Species.ALOLA_PERSIAN, Species.ALOLA_GOLEM, Species.ALOLA_MUK, Species.PALDEA_TAUROS ], + [TrainerPoolTier.RARE]: [ Species.DRAGONITE, Species.TYRANITAR ] }; } case "magma": { return { - [TrainerPoolTier.COMMON]: [ Species.GROWLITHE, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.BALTOY, Species.ROLYCOLY, Species.GLIGAR, Species.TORKOAL, Species.HOUNDOUR, Species.MAGBY ], - [TrainerPoolTier.UNCOMMON]: [ Species.TRAPINCH, Species.SILICOBRA, Species.RHYHORN, Species.ANORITH, Species.LILEEP, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON, Species.TOEDSCOOL ], - [TrainerPoolTier.RARE]: [ Species.CAPSAKID, Species.CHARCADET ] + [TrainerPoolTier.COMMON]: [ Species.ARCANINE, Species.MAGCARGO, Species.HOUNDOOM, Species.TORKOAL, Species.SOLROCK, Species.CLAYDOL, Species.HIPPOWDON, Species.MAGMORTAR, Species.GLISCOR, Species.COALOSSAL ], + [TrainerPoolTier.UNCOMMON]: [ Species.AGGRON, Species.FLYGON, Species.CRADILY, Species.ARMALDO, Species.RHYPERIOR, Species.TURTONATOR, Species.SANDACONDA, Species.TOEDSCRUEL, Species.HISUI_ARCANINE ], + [TrainerPoolTier.RARE]: [ Species.CHARCADET, Species.SCOVILLAIN ] }; } case "aqua": { return { - [TrainerPoolTier.COMMON]: [ Species.CORPHISH, Species.SPHEAL, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.LOTAD, Species.WAILMER, Species.REMORAID, Species.BARBOACH ], - [TrainerPoolTier.UNCOMMON]: [ Species.MANTYKE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.DHELMISE, Species.CLOBBOPUS, Species.FEEBAS, Species.PALDEA_WOOPER, Species.HORSEA, Species.SKRELP ], - [TrainerPoolTier.RARE]: [ Species.DONDOZO, Species.BASCULEGION ] + [TrainerPoolTier.COMMON]: [ Species.TENTACRUEL, Species.LANTURN, Species.AZUMARILL, Species.QUAGSIRE, Species.OCTILLERY, Species.LUDICOLO, Species.PELIPPER, Species.WAILORD, Species.WHISCASH, Species.CRAWDAUNT, Species.WALREIN, Species.CLAMPERL ], + [TrainerPoolTier.UNCOMMON]: [ Species.QUAGSIRE, Species.MANTINE, Species.KINGDRA, Species.MILOTIC, Species.DRAGALGE, Species.DHELMISE, Species.BARRASKEWDA, Species.GRAPPLOCT, Species.OVERQWIL ], + [TrainerPoolTier.RARE]: [ Species.BASCULEGION, Species.DONDOZO ] }; } case "galactic": { return { - [TrainerPoolTier.COMMON]: [ Species.BRONZOR, Species.SWINUB, Species.YANMA, Species.LICKITUNG, Species.TANGELA, Species.MAGBY, Species.ELEKID, Species.SKORUPI, Species.ZUBAT, Species.MURKROW, Species.MAGIKARP, Species.VOLTORB ], - [TrainerPoolTier.UNCOMMON]: [ Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.SNEASEL, Species.DUSKULL, Species.ROTOM, Species.HISUI_VOLTORB, Species.GLIGAR, Species.ABRA ], - [TrainerPoolTier.RARE]: [ Species.URSALUNA, Species.HISUI_LILLIGANT, Species.SPIRITOMB, Species.HISUI_SNEASEL ] + [TrainerPoolTier.COMMON]: [ Species.ELECTRODE, Species.GYARADOS, Species.CROBAT, Species.HONCHKROW, Species.BRONZONG, Species.DRAPION, Species.LICKILICKY, Species.TANGROWTH, Species.ELECTIVIRE, Species.MAGMORTAR, Species.YANMEGA, Species.MAMOSWINE ], + [TrainerPoolTier.UNCOMMON]: [ Species.ALAKAZAM, Species.WEAVILE, Species.GLISCOR, Species.DUSKNOIR, Species.ROTOM, Species.OVERQWIL, Species.HISUI_ARCANINE, Species.HISUI_ELECTRODE ], + [TrainerPoolTier.RARE]: [ Species.SPIRITOMB, Species.URSALUNA, Species.SNEASLER, Species.HISUI_LILLIGANT ] }; } case "plasma": { return { - [TrainerPoolTier.COMMON]: [ Species.YAMASK, Species.ROGGENROLA, Species.JOLTIK, Species.TYMPOLE, Species.FRILLISH, Species.FERROSEED, Species.SANDILE, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.CUBCHOO, Species.VANILLITE ], - [TrainerPoolTier.UNCOMMON]: [ Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK, Species.TYNAMO, Species.GALAR_DARUMAKA, Species.GOLETT, Species.MIENFOO, Species.DURANT, Species.SIGILYPH ], - [TrainerPoolTier.RARE]: [ Species.HISUI_ZORUA, Species.AXEW, Species.DEINO, Species.HISUI_BRAVIARY ] + [TrainerPoolTier.COMMON]: [ Species.GIGALITH, Species.CONKELDURR, Species.SEISMITOAD, Species.KROOKODILE, Species.DARMANITAN, Species.COFAGRIGUS, Species.VANILLUXE, Species.AMOONGUSS, Species.JELLICENT, Species.GALVANTULA, Species.FERROTHORN, Species.BEARTIC ], + [TrainerPoolTier.UNCOMMON]: [ Species.EXCADRILL, Species.SIGILYPH, Species.ZOROARK, Species.KLINKLANG, Species.EELEKTROSS, Species.MIENSHAO, Species.GOLURK, Species.BISHARP, Species.MANDIBUZZ, Species.DURANT, Species.GALAR_DARMANITAN ], + [TrainerPoolTier.RARE]: [ Species.HAXORUS, Species.HYDREIGON, Species.HISUI_ZOROARK, Species.HISUI_BRAVIARY ] }; } case "plasma_2": { return { - [TrainerPoolTier.COMMON]: [ Species.MAGNEMITE, Species.GRIMER, Species.VOLTORB, Species.PORYGON, Species.BRONZOR, Species.MUNNA, Species.SOLOSIS, Species.JOLTIK, Species.FERROSEED, Species.TYNAMO, Species.ELGYEM ], - [TrainerPoolTier.UNCOMMON]: [ Species.BELDUM, Species.ROTOM, Species.TIRTOUGA, Species.ARCHEN, Species.GOLETT, Species.DURANT, Species.GRUBBIN, Species.BLIPBUG, Species.VAROOM, Species.ALOLA_GRIMER, Species.HISUI_VOLTORB ], - [TrainerPoolTier.RARE]: [ Species.ELEKID, Species.MAGBY, Species.PAWNIARD, Species.DURALUDON ] + [TrainerPoolTier.COMMON]: [ Species.MUK, Species.ELECTRODE, Species.BRONZONG, Species.MAGNEZONE, Species.PORYGON_Z, Species.MUSHARNA, Species.REUNICLUS, Species.GALVANTULA, Species.FERROTHORN, Species.EELEKTROSS, Species.BEHEEYEM ], + [TrainerPoolTier.UNCOMMON]: [ Species.METAGROSS, Species.ROTOM, Species.CARRACOSTA, Species.ARCHEOPS, Species.GOLURK, Species.DURANT, Species.VIKAVOLT, Species.ORBEETLE, Species.REVAVROOM, Species.ALOLA_MUK, Species.HISUI_ELECTRODE ], + [TrainerPoolTier.RARE]: [ Species.ELECTIVIRE, Species.MAGMORTAR, Species.BISHARP, Species.ARCHALUDON ] }; } case "flare": { return { - [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.FOONGUS, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKORUPI, Species.PURRLOIN, Species.CLAWITZER, Species.PANCHAM, Species.ESPURR, Species.BUNNELBY ], - [TrainerPoolTier.UNCOMMON]: [ Species.LITWICK, Species.SNEASEL, Species.PUMPKABOO, Species.PHANTUMP, Species.HONEDGE, Species.BINACLE, Species.HOUNDOUR, Species.SKRELP, Species.SLIGGOO ], - [TrainerPoolTier.RARE]: [ Species.NOIBAT, Species.HISUI_AVALUGG, Species.HISUI_SLIGGOO ] + [TrainerPoolTier.COMMON]: [ Species.MANECTRIC, Species.DRAPION, Species.LIEPARD, Species.AMOONGUSS, Species.DIGGERSBY, Species.TALONFLAME, Species.PYROAR, Species.PANGORO, Species.MEOWSTIC, Species.MALAMAR, Species.CLAWITZER, Species.HELIOLISK ], + [TrainerPoolTier.UNCOMMON]: [ Species.HOUNDOOM, Species.WEAVILE, Species.CHANDELURE, Species.AEGISLASH, Species.BARBARACLE, Species.DRAGALGE, Species.GOODRA, Species.TREVENANT, Species.GOURGEIST ], + [TrainerPoolTier.RARE]: [ Species.NOIVERN, Species.HISUI_GOODRA, Species.HISUI_AVALUGG ] }; } case "aether": { return { - [TrainerPoolTier.COMMON]: [ Species.BRUXISH, Species.SLOWPOKE, Species.BALTOY, Species.EXEGGCUTE, Species.ABRA, Species.ALOLA_RAICHU, Species.ELGYEM, Species.NATU, Species.BLIPBUG, Species.GIRAFARIG, Species.ORANGURU ], - [TrainerPoolTier.UNCOMMON]: [ Species.GALAR_SLOWPOKE, Species.MEDITITE, Species.BELDUM, Species.HATENNA, Species.INKAY, Species.RALTS, Species.GALAR_MR_MIME ], - [TrainerPoolTier.RARE]: [ Species.ARMAROUGE, Species.HISUI_BRAVIARY, Species.PORYGON ] + [TrainerPoolTier.COMMON]: [ Species.ALAKAZAM, Species.SLOWBRO, Species.EXEGGUTOR, Species.XATU, Species.CLAYDOL, Species.BEHEEYEM, Species.ORANGURU, Species.BRUXISH, Species.ORBEETLE, Species.FARIGIRAF, Species.ALOLA_RAICHU ], + [TrainerPoolTier.UNCOMMON]: [ Species.KIRLIA, Species.MEDICHAM, Species.METAGROSS, Species.MALAMAR, Species.HATTERENE, Species.MR_RIME, Species.GALAR_SLOWKING ], + [TrainerPoolTier.RARE]: [ Species.PORYGON_Z, Species.ARMAROUGE, Species.HISUI_BRAVIARY ] }; } case "skull": { return { - [TrainerPoolTier.COMMON]: [ Species.MAREANIE, Species.ALOLA_GRIMER, Species.GASTLY, Species.ZUBAT, Species.FOMANTIS, Species.VENIPEDE, Species.BUDEW, Species.KOFFING, Species.STUNKY, Species.CROAGUNK, Species.NIDORAN_F ], - [TrainerPoolTier.UNCOMMON]: [ Species.GALAR_SLOWPOKE, Species.SKORUPI, Species.PALDEA_WOOPER, Species.VULLABY, Species.HISUI_QWILFISH, Species.GLIMMET ], - [TrainerPoolTier.RARE]: [ Species.SKRELP, Species.HISUI_SNEASEL ] + [TrainerPoolTier.COMMON]: [ Species.NIDOQUEEN, Species.GENGAR, Species.KOFFING, Species.CROBAT, Species.ROSERADE, Species.SKUNTANK, Species.TOXICROAK, Species.SCOLIPEDE, Species.TOXAPEX, Species.LURANTIS, Species.ALOLA_MUK ], + [TrainerPoolTier.UNCOMMON]: [ Species.DRAPION, Species.MANDIBUZZ, Species.OVERQWIL, Species.GLIMMORA, Species.CLODSIRE, Species.GALAR_SLOWBRO ], + [TrainerPoolTier.RARE]: [ Species.DRAGALGE, Species.SNEASLER ] }; } case "macro": { return { - [TrainerPoolTier.COMMON]: [ Species.HATENNA, Species.FEEBAS, Species.BOUNSWEET, Species.SALANDIT, Species.GALAR_PONYTA, Species.GOTHITA, Species.FROSLASS, Species.VULPIX, Species.FRILLISH, Species.ODDISH, Species.SINISTEA ], - [TrainerPoolTier.UNCOMMON]: [ Species.VULLABY, Species.MAREANIE, Species.ALOLA_VULPIX, Species.TOGEPI, Species.GALAR_CORSOLA, Species.APPLIN ], - [TrainerPoolTier.RARE]: [ Species.TINKATINK, Species.HISUI_LILLIGANT ] + [TrainerPoolTier.COMMON]: [ Species.NINETALES, Species.BELLOSSOM, Species.MILOTIC, Species.FROSLASS, Species.GOTHITELLE, Species.JELLICENT, Species.SALAZZLE, Species.TSAREENA, Species.POLTEAGEIST, Species.HATTERENE, Species.GALAR_RAPIDASH ], + [TrainerPoolTier.UNCOMMON]: [ Species.TOGEKISS, Species.MANDIBUZZ, Species.TOXAPEX, Species.APPLETUN, Species.CURSOLA, Species.ALOLA_NINETALES ], + [TrainerPoolTier.RARE]: [ Species.TINKATON, Species.HISUI_LILLIGANT ] }; } case "star_1": { return { - [TrainerPoolTier.COMMON]: [ Species.MURKROW, Species.SEEDOT, Species.CACNEA, Species.STUNKY, Species.SANDILE, Species.NYMBLE, Species.MASCHIFF, Species.GALAR_ZIGZAGOON ], - [TrainerPoolTier.UNCOMMON]: [ Species.UMBREON, Species.SNEASEL, Species.CORPHISH, Species.ZORUA, Species.INKAY, Species.BOMBIRDIER ], - [TrainerPoolTier.RARE]: [ Species.DEINO, Species.SPRIGATITO ] + [TrainerPoolTier.COMMON]: [ Species.SHIFTRY, Species.CACTURNE, Species.HONCHKROW, Species.SKUNTANK, Species.KROOKODILE, Species.OBSTAGOON, Species.LOKIX, Species.MABOSSTIFF ], + [TrainerPoolTier.UNCOMMON]: [ Species.UMBREON, Species.CRAWDAUNT, Species.WEAVILE, Species.ZOROARK, Species.MALAMAR, Species.BOMBIRDIER ], + [TrainerPoolTier.RARE]: [ Species.HYDREIGON, Species.MEOWSCARADA ] }; } case "star_2": { return { - [TrainerPoolTier.COMMON]: [ Species.GROWLITHE, Species.HOUNDOUR, Species.NUMEL, Species.LITWICK, Species.FLETCHLING, Species.LITLEO, Species.ROLYCOLY, Species.CAPSAKID ], - [TrainerPoolTier.UNCOMMON]: [ Species.PONYTA, Species.FLAREON, Species.MAGBY, Species.TORKOAL, Species.SALANDIT, Species.TURTONATOR ], - [TrainerPoolTier.RARE]: [ Species.LARVESTA, Species.FUECOCO ] + [TrainerPoolTier.COMMON]: [ Species.ARCANINE, Species.HOUNDOOM, Species.CAMERUPT, Species.CHANDELURE, Species.TALONFLAME, Species.PYROAR, Species.COALOSSAL, Species.SCOVILLAIN ], + [TrainerPoolTier.UNCOMMON]: [ Species.RAPIDASH, Species.FLAREON, Species.TORKOAL, Species.MAGMORTAR, Species.SALAZZLE, Species.TURTONATOR ], + [TrainerPoolTier.RARE]: [ Species.VOLCARONA, Species.SKELEDIRGE ] }; } case "star_3": { return { - [TrainerPoolTier.COMMON]: [ Species.ZUBAT, Species.GRIMER, Species.STUNKY, Species.FOONGUS, Species.MAREANIE, Species.TOXEL, Species.SHROODLE, Species.PALDEA_WOOPER ], - [TrainerPoolTier.UNCOMMON]: [ Species.GASTLY, Species.SEVIPER, Species.SKRELP, Species.ALOLA_GRIMER, Species.GALAR_SLOWPOKE, Species.HISUI_QWILFISH ], - [TrainerPoolTier.RARE]: [ Species.GLIMMET, Species.BULBASAUR ] + [TrainerPoolTier.COMMON]: [ Species.MUK, Species.CROBAT, Species.SKUNTANK, Species.AMOONGUSS, Species.TOXAPEX, Species.TOXTRICITY, Species.GRAFAIAI, Species.CLODSIRE ], + [TrainerPoolTier.UNCOMMON]: [ Species.GENGAR, Species.SEVIPER, Species.DRAGALGE, Species.OVERQWIL, Species.ALOLA_MUK, Species.GALAR_SLOWBRO ], + [TrainerPoolTier.RARE]: [ Species.GLIMMORA, Species.VENUSAUR ] }; } case "star_4": { return { - [TrainerPoolTier.COMMON]: [ Species.CLEFFA, Species.IGGLYBUFF, Species.AZURILL, Species.COTTONEE, Species.FLABEBE, Species.HATENNA, Species.IMPIDIMP, Species.TINKATINK ], - [TrainerPoolTier.UNCOMMON]: [ Species.TOGEPI, Species.GARDEVOIR, Species.SYLVEON, Species.KLEFKI, Species.MIMIKYU, Species.ALOLA_VULPIX ], - [TrainerPoolTier.RARE]: [ Species.GALAR_PONYTA, Species.POPPLIO ] + [TrainerPoolTier.COMMON]: [ Species.CLEFABLE, Species.WIGGLYTUFF, Species.AZUMARILL, Species.WHIMSICOTT, Species.FLORGES, Species.HATTERENE, Species.GRIMMSNARL, Species.TINKATON ], + [TrainerPoolTier.UNCOMMON]: [ Species.TOGEKISS, Species.GARDEVOIR, Species.SYLVEON, Species.KLEFKI, Species.MIMIKYU, Species.ALOLA_NINETALES ], + [TrainerPoolTier.RARE]: [ Species.GALAR_RAPIDASH, Species.PRIMARINA ] }; } case "star_5": { return { - [TrainerPoolTier.COMMON]: [ Species.SHROOMISH, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.SCRAGGY, Species.MIENFOO, Species.PAWMI, Species.PALDEA_TAUROS ], - [TrainerPoolTier.UNCOMMON]: [ Species.RIOLU, Species.TIMBURR, Species.HAWLUCHA, Species.PASSIMIAN, Species.FALINKS, Species.FLAMIGO ], - [TrainerPoolTier.RARE]: [ Species.JANGMO_O, Species.QUAXLY ] + [TrainerPoolTier.COMMON]: [ Species.BRELOOM, Species.HARIYAMA, Species.MEDICHAM, Species.TOXICROAK, Species.SCRAFTY, Species.MIENSHAO, Species.PAWMOT, Species.PALDEA_TAUROS ], + [TrainerPoolTier.UNCOMMON]: [ Species.LUCARIO, Species.CONKELDURR, Species.HAWLUCHA, Species.PASSIMIAN, Species.FALINKS, Species.FLAMIGO ], + [TrainerPoolTier.RARE]: [ Species.KOMMO_O, Species.QUAQUAVAL ] }; } } @@ -1500,9 +1500,9 @@ export const trainerConfigs: TrainerConfigs = { ), [TrainerType.ROCKET_GRUNT]: new TrainerConfig(++t).setHasGenders("Rocket Grunt Female").setHasDouble("Rocket Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.WEEDLE, Species.RATTATA, Species.EKANS, Species.SANDSHREW, Species.ZUBAT, Species.GEODUDE, Species.KOFFING, Species.GRIMER, Species.ODDISH, Species.SLOWPOKE ], - [TrainerPoolTier.UNCOMMON]: [ Species.GYARADOS, Species.LICKITUNG, Species.TAUROS, Species.MANKEY, Species.SCYTHER, Species.ELEKID, Species.MAGBY, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB, Species.MAGNEMITE ], - [TrainerPoolTier.RARE]: [ Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE, Species.PALDEA_TAUROS, Species.OMANYTE, Species.KABUTO ], + [TrainerPoolTier.COMMON]: [ Species.WEEDLE, Species.RATTATA, Species.EKANS, Species.SANDSHREW, Species.ZUBAT, Species.ODDISH, Species.GEODUDE, Species.SLOWPOKE, Species.GRIMER, Species.KOFFING ], + [TrainerPoolTier.UNCOMMON]: [ Species.MANKEY, Species.GROWLITHE, Species.MAGNEMITE, Species.GASTLY, Species.VOLTORB, Species.EXEGGCUTE, Species.CUBONE, Species.LICKITUNG, Species.SCYTHER, Species.TAUROS, Species.GYARADOS, Species.MURKROW, Species.ELEKID, Species.MAGBY ], + [TrainerPoolTier.RARE]: [ Species.PORYGON, Species.OMANYTE, Species.KABUTO, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GEODUDE, Species.ALOLA_GRIMER, Species.PALDEA_TAUROS ], [TrainerPoolTier.SUPER_RARE]: [ Species.DRATINI, Species.LARVITAR ] }), [TrainerType.ARCHER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [ Species.HOUNDOOM ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), @@ -1511,71 +1511,71 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.PETREL]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [ Species.WEEZING ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.GROWLITHE, Species.BALTOY ], - [TrainerPoolTier.UNCOMMON]: [ Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR, Species.RHYHORN, Species.HEATMOR ], - [TrainerPoolTier.RARE]: [ Species.TRAPINCH, Species.LILEEP, Species.ANORITH, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON, Species.TOEDSCOOL ], - [TrainerPoolTier.SUPER_RARE]: [ Species.CAPSAKID, Species.CHARCADET ] + [TrainerPoolTier.COMMON]: [ Species.DIGLETT, Species.GROWLITHE, Species.SLUGMA, Species.MAGBY, Species.POOCHYENA, Species.ZIGZAGOON, Species.NUMEL, Species.TORKOAL, Species.BALTOY ], + [TrainerPoolTier.UNCOMMON]: [ Species.RHYHORN, Species.GLIGAR, Species.PHANPY, Species.SOLROCK, Species.HIPPOPOTAS, Species.HEATMOR, Species.ROLYCOLY, Species.SILICOBRA ], + [TrainerPoolTier.RARE]: [ Species.ARON, Species.TRAPINCH, Species.LILEEP, Species.ANORITH, Species.TURTONATOR, Species.TOEDSCOOL, Species.HISUI_GROWLITHE ], + [TrainerPoolTier.SUPER_RARE]: [ Species.CHARCADET, Species.CAPSAKID ] }), [TrainerType.TABITHA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin", "magma", [ Species.CAMERUPT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.COURTNEY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin_female", "magma", [ Species.CAMERUPT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL, Species.REMORAID, Species.QWILFISH, Species.BARBOACH ], - [TrainerPoolTier.UNCOMMON]: [ Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.CLOBBOPUS, Species.HORSEA ], - [TrainerPoolTier.RARE]: [ Species.MANTYKE, Species.DHELMISE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.PALDEA_WOOPER, Species.SKRELP ], - [TrainerPoolTier.SUPER_RARE]: [ Species.DONDOZO, Species.BASCULEGION ] + [TrainerPoolTier.COMMON]: [ Species.QWILFISH, Species.REMORAID, Species.ZIGZAGOON, Species.LOTAD, Species.CARVANHA, Species.WAILMER, Species.BARBOACH, Species.CORPHISH, Species.SPHEAL ], + [TrainerPoolTier.UNCOMMON]: [ Species.TENTACOOL, Species.HORSEA, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.AZURILL, Species.CLAMPERL, Species.CLOBBOPUS ], + [TrainerPoolTier.RARE]: [ Species.MANTYKE, Species.SKRELP, Species.DHELMISE, Species.ARROKUDA, Species.HISUI_QWILFISH, Species.PALDEA_WOOPER ], + [TrainerPoolTier.SUPER_RARE]: [ Species.BASCULEGION, Species.DONDOZO ] }), [TrainerType.MATT]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin", "aqua", [ Species.SHARPEDO ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.SHELLY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin_female", "aqua", [ Species.SHARPEDO ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE, Species.BRONZOR, Species.DRIFLOON, Species.BURMY, Species.CARNIVINE ], - [TrainerPoolTier.UNCOMMON]: [ Species.LICKITUNG, Species.RHYHORN, Species.TANGELA, Species.ZUBAT, Species.YANMA, Species.SKORUPI, Species.GLIGAR, Species.SWINUB ], - [TrainerPoolTier.RARE]: [ Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.SNEASEL, Species.ELEKID, Species.MAGBY, Species.DUSKULL ], - [TrainerPoolTier.SUPER_RARE]: [ Species.ROTOM, Species.SPIRITOMB, Species.HISUI_SNEASEL ] + [TrainerPoolTier.COMMON]: [ Species.WURMPLE, Species.SHINX, Species.BURMY, Species.DRIFLOON, Species.GLAMEOW, Species.STUNKY, Species.BRONZOR, Species.CROAGUNK, Species.CARNIVINE ], + [TrainerPoolTier.UNCOMMON]: [ Species.ZUBAT, Species.LICKITUNG, Species.RHYHORN, Species.TANGELA, Species.YANMA, Species.GLIGAR, Species.SWINUB, Species.SKORUPI ], + [TrainerPoolTier.RARE]: [ Species.SNEASEL, Species.ELEKID, Species.MAGBY, Species.DUSKULL, Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH ], + [TrainerPoolTier.SUPER_RARE]: [ Species.SPIRITOMB, Species.ROTOM, Species.HISUI_SNEASEL ] }), [TrainerType.JUPITER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [ Species.SKUNTANK ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.MARS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [ Species.PURUGLY ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.SATURN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander", "galactic", [ Species.TOXICROAK ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH, Species.TYMPOLE ], - [TrainerPoolTier.UNCOMMON]: [ Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.JOLTIK, Species.CUBCHOO, Species.KLINK ], - [TrainerPoolTier.RARE]: [ Species.PAWNIARD, Species.RUFFLET, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.MIENFOO, Species.DURANT, Species.BOUFFALANT ], - [TrainerPoolTier.SUPER_RARE]: [ Species.DRUDDIGON, Species.HISUI_ZORUA, Species.AXEW, Species.DEINO ] + [TrainerPoolTier.COMMON]: [ Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.WOOBAT, Species.TYMPOLE, Species.SANDILE, Species.SCRAGGY, Species.TRUBBISH, Species.VANILLITE ], + [TrainerPoolTier.UNCOMMON]: [ Species.TIMBURR, Species.VENIPEDE, Species.DARUMAKA, Species.FOONGUS, Species.FRILLISH, Species.JOLTIK, Species.KLINK, Species.CUBCHOO, Species.GOLETT ], + [TrainerPoolTier.RARE]: [ Species.DRILBUR, Species.ZORUA, Species.MIENFOO, Species.PAWNIARD, Species.BOUFFALANT, Species.RUFFLET, Species.VULLABY, Species.DURANT ], + [TrainerPoolTier.SUPER_RARE]: [ Species.AXEW, Species.DRUDDIGON, Species.DEINO, Species.HISUI_ZORUA ] }), [TrainerType.ZINZOLIN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [ Species.CRYOGONAL ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.COLRESS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_boss", "plasma_2", [ Species.KLINKLANG ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_colress").setMixedBattleBgm("battle_colress").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK, Species.SCATTERBUG, Species.ESPURR ], - [TrainerPoolTier.UNCOMMON]: [ Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.PANCHAM, Species.PURRLOIN, Species.POOCHYENA, Species.BINACLE, Species.CLAUNCHER, Species.PUMPKABOO, Species.PHANTUMP, Species.FOONGUS ], - [TrainerPoolTier.RARE]: [ Species.LITWICK, Species.SNEASEL, Species.PAWNIARD, Species.SLIGGOO ], + [TrainerPoolTier.COMMON]: [ Species.PONYTA, Species.HOUNDOUR, Species.SKORUPI, Species.CROAGUNK, Species.SCRAGGY, Species.FLETCHLING, Species.SCATTERBUG, Species.LITLEO, Species.ESPURR, Species.INKAY ], + [TrainerPoolTier.UNCOMMON]: [ Species.POOCHYENA, Species.ELECTRIKE, Species.PURRLOIN, Species.FOONGUS, Species.PANCHAM, Species.BINACLE, Species.SKRELP, Species.CLAUNCHER, Species.HELIOPTILE, Species.PHANTUMP, Species.PUMPKABOO ], + [TrainerPoolTier.RARE]: [ Species.SNEASEL, Species.LITWICK, Species.PAWNIARD, Species.SLIGGOO ], [TrainerPoolTier.SUPER_RARE]: [ Species.NOIBAT, Species.HISUI_SLIGGOO, Species.HISUI_AVALUGG ] }), [TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [ Species.LIEPARD ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.XEROSIC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin", "flare", [ Species.MALAMAR ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.AETHER_GRUNT]: new TrainerConfig(++t).setHasGenders("Aether Grunt Female").setHasDouble("Aether Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.PIKIPEK, Species.ROCKRUFF, Species.ALOLA_DIGLETT, Species.ALOLA_EXEGGUTOR, Species.YUNGOOS, Species.CORSOLA, Species.ALOLA_GEODUDE, Species.ALOLA_RAICHU, Species.BOUNSWEET, Species.LILLIPUP, Species.KOMALA, Species.MORELULL, Species.COMFEY, Species.TOGEDEMARU ], - [TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.STUFFUL, Species.ORANGURU, Species.PASSIMIAN, Species.BRUXISH, Species.MINIOR, Species.WISHIWASHI, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.CRABRAWLER, Species.CUTIEFLY, Species.ORICORIO, Species.MUDBRAY, Species.PYUKUMUKU, Species.ALOLA_MAROWAK ], - [TrainerPoolTier.RARE]: [ Species.GALAR_CORSOLA, Species.TURTONATOR, Species.MIMIKYU, Species.MAGNEMITE, Species.DRAMPA ], - [TrainerPoolTier.SUPER_RARE]: [ Species.JANGMO_O, Species.PORYGON ] + [TrainerPoolTier.COMMON]: [ Species.CORSOLA, Species.LILLIPUP, Species.PIKIPEK, Species.YUNGOOS, Species.ROCKRUFF, Species.MORELULL, Species.BOUNSWEET, Species.COMFEY, Species.KOMALA, Species.TOGEDEMARU, Species.ALOLA_RAICHU, Species.ALOLA_DIGLETT, Species.ALOLA_GEODUDE, Species.ALOLA_EXEGGUTOR ], + [TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.CRABRAWLER, Species.ORICORIO, Species.CUTIEFLY, Species.WISHIWASHI, Species.MUDBRAY, Species.STUFFUL, Species.ORANGURU, Species.PASSIMIAN, Species.PYUKUMUKU, Species.MINIOR, Species.BRUXISH, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.ALOLA_MAROWAK ], + [TrainerPoolTier.RARE]: [ Species.MAGNEMITE, Species.TURTONATOR, Species.MIMIKYU, Species.DRAMPA, Species.GALAR_CORSOLA ], + [TrainerPoolTier.SUPER_RARE]: [ Species.PORYGON, Species.JANGMO_O ] }), [TrainerType.FABA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aether_admin", "aether", [ Species.HYPNO ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.SKULL_GRUNT]: new TrainerConfig(++t).setHasGenders("Skull Grunt Female").setHasDouble("Skull Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.SALANDIT, Species.ALOLA_RATTATA, Species.EKANS, Species.ALOLA_MEOWTH, Species.SCRAGGY, Species.KOFFING, Species.ALOLA_GRIMER, Species.MAREANIE, Species.SPINARAK, Species.TRUBBISH, Species.DROWZEE ], - [TrainerPoolTier.UNCOMMON]: [ Species.FOMANTIS, Species.SABLEYE, Species.SANDILE, Species.HOUNDOUR, Species.ALOLA_MAROWAK, Species.GASTLY, Species.PANCHAM, Species.ZUBAT, Species.VENIPEDE, Species.VULLABY ], - [TrainerPoolTier.RARE]: [ Species.SANDYGAST, Species.PAWNIARD, Species.MIMIKYU, Species.DHELMISE, Species.WISHIWASHI, Species.NYMBLE ], + [TrainerPoolTier.COMMON]: [ Species.EKANS, Species.DROWZEE, Species.KOFFING, Species.SPINARAK, Species.SCRAGGY, Species.TRUBBISH, Species.MAREANIE, Species.SALANDIT, Species.ALOLA_RATTATA, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER ], + [TrainerPoolTier.UNCOMMON]: [ Species.ZUBAT, Species.GASTLY, Species.HOUNDOUR, Species.SABLEYE, Species.VENIPEDE, Species.SANDILE, Species.VULLABY, Species.PANCHAM, Species.FOMANTIS, Species.ALOLA_MAROWAK ], + [TrainerPoolTier.RARE]: [ Species.PAWNIARD, Species.WISHIWASHI, Species.SANDYGAST, Species.MIMIKYU, Species.DHELMISE, Species.NYMBLE ], [TrainerPoolTier.SUPER_RARE]: [ Species.GRUBBIN, Species.DEWPIDER ] }), [TrainerType.PLUMERIA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("skull_admin", "skull", [ Species.SALAZZLE ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.MACRO_GRUNT]: new TrainerConfig(++t).setHasGenders("Macro Grunt Female").setHasDouble("Macro Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_macro_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.CUFANT, Species.GALAR_MEOWTH, Species.KLINK, Species.ROOKIDEE, Species.CRAMORANT, Species.GALAR_ZIGZAGOON, Species.SKWOVET, Species.STEELIX, Species.MAWILE, Species.FERROSEED ], - [TrainerPoolTier.UNCOMMON]: [ Species.DRILBUR, Species.MAGNEMITE, Species.HATENNA, Species.ARROKUDA, Species.APPLIN, Species.GALAR_PONYTA, Species.GALAR_YAMASK, Species.SINISTEA, Species.RIOLU ], - [TrainerPoolTier.RARE]: [ Species.FALINKS, Species.BELDUM, Species.GALAR_FARFETCHD, Species.GALAR_MR_MIME, Species.HONEDGE, Species.SCIZOR, Species.GALAR_DARUMAKA ], + [TrainerPoolTier.COMMON]: [ Species.STEELIX, Species.MAWILE, Species.FERROSEED, Species.KLINK, Species.SKWOVET, Species.ROOKIDEE, Species.CRAMORANT, Species.CUFANT, Species.GALAR_MEOWTH, Species.GALAR_ZIGZAGOON ], + [TrainerPoolTier.UNCOMMON]: [ Species.MAGNEMITE, Species.RIOLU, Species.DRILBUR, Species.APPLIN, Species.ARROKUDA, Species.SINISTEA, Species.HATENNA, Species.GALAR_PONYTA, Species.GALAR_YAMASK ], + [TrainerPoolTier.RARE]: [ Species.SCIZOR, Species.BELDUM, Species.HONEDGE, Species.FALINKS, Species.GALAR_FARFETCHD, Species.GALAR_MR_MIME, Species.GALAR_DARUMAKA ], [TrainerPoolTier.SUPER_RARE]: [ Species.DURALUDON, Species.DREEPY ] }), [TrainerType.OLEANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("macro_admin", "macro", [ Species.GARBODOR ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_oleana").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), @@ -2225,7 +2225,11 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.DUGTRIO, Species.ALOLA_DUGTRIO ])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HONCHKROW ])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.NIDOQUEEN, Species.NIDOKING ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.RHYPERIOR ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.RHYPERIOR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.abilityIndex = 1; // Solid Rock + })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.KANGASKHAN ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2234,20 +2238,32 @@ export const trainerConfigs: TrainerConfigs = { p.generateName(); })), [TrainerType.ROCKET_BOSS_GIOVANNI_2]: new TrainerConfig(++t).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", [], true).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.TYRANITAR, Species.IRON_THORNS ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.TYRANITAR ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HIPPOWDON ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.GARCHOMP, Species.EXCADRILL ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GASTRODON, Species.SEISMITOAD ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.GASTRODON, Species.SEISMITOAD ], TrainerSlot.TRAINER, true, p => { if (p.species.speciesId === Species.GASTRODON) { p.abilityIndex = 0; // Storm Drain } else if (p.species.speciesId === Species.SEISMITOAD) { p.abilityIndex = 2; // Water Absorb } })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.GARCHOMP, Species.EXCADRILL ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + if (p.species.speciesId === Species.GARCHOMP) { + p.abilityIndex = 2; // Rough Skin + } else if (p.species.speciesId === Species.EXCADRILL) { + p.abilityIndex = 0; // Sand Rush + } + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.RHYPERIOR ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.abilityIndex = 1; // Solid Rock + })) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.KANGASKHAN ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2295,7 +2311,10 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.abilityIndex = 0; // Chlorophyll })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GREAT_TUSK ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GREAT_TUSK ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + })) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.CAMERUPT ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2384,7 +2403,10 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MAGNEZONE ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.UXIE, Species.MESPRIT, Species.AZELF ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.UXIE, Species.MESPRIT, Species.AZELF ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + })) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -2425,7 +2447,10 @@ export const trainerConfigs: TrainerConfigs = { p.formIndex = 0; })) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.KINGAMBIT ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.VOLCARONA, Species.IRON_MOTH ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.VOLCARONA, Species.IRON_MOTH ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + })) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HYDREIGON, Species.IRON_JUGULIS ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2448,7 +2473,14 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.DRAGALGE, Species.CLAWITZER ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.DRAGALGE, Species.CLAWITZER ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + if (p.species.speciesId === Species.DRAGALGE) { + p.abilityIndex = 2; // Adaptability + } else if (p.species.speciesId === Species.CLAWITZER) { + p.abilityIndex = 0; // Mega Launcher + } + })) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GALLADE ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 1; // Sharpness @@ -2467,7 +2499,14 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.gender = Gender.MALE; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.DRAGALGE, Species.CLAWITZER ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.DRAGALGE, Species.CLAWITZER ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + if (p.species.speciesId === Species.DRAGALGE) { + p.abilityIndex = 2; // Adaptability + } else if (p.species.speciesId === Species.CLAWITZER) { + p.abilityIndex = 0; // Mega Launcher + } + })) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.AEGISLASH, Species.HISUI_GOODRA ])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.IRON_VALIANT ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); @@ -2477,7 +2516,7 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = 1; // Mega Gyardos + p.formIndex = 1; // Mega Gyarados p.generateName(); p.gender = Gender.MALE; })) @@ -2597,11 +2636,26 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; })), [TrainerType.ROSE]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", []).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ESCAVALIER, Species.FERROTHORN ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SIRFETCHD, Species.MR_RIME ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CORVIKNIGHT ])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.KLINKLANG, Species.PERRSERKER ])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ESCAVALIER, Species.FERROTHORN ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SIRFETCHD, Species.MR_RIME ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CORVIKNIGHT ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.KLINKLANG, Species.PERRSERKER ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.COPPERAJAH ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2614,13 +2668,21 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.AEGISLASH, Species.GHOLDENGO ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.AEGISLASH, Species.GHOLDENGO ])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DRACOZOLT, Species.DRACOVISH ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.abilityIndex = 1; //Strong Jaw Dracovish, Hustle Dracozolt + p.pokeball = PokeballType.ULTRA_BALL; + p.abilityIndex = 1; // Strong Jaw Dracovish, Hustle Dracozolt + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MELMETAL ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MELMETAL ])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GALAR_ARTICUNO, Species.GALAR_ZAPDOS, Species.GALAR_MOLTRES ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2666,7 +2728,10 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.formIndex = Utils.randSeedInt(5, 1); // Heat, Wash, Frost, Fan, or Mow })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.RAIKOU, Species.ENTEI, Species.SUICUNE ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.RAIKOU, Species.ENTEI, Species.SUICUNE ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { p.formIndex = Utils.randSeedInt(5, 1); // Random Starmobile form p.generateAndPopulateMoveset(); From 6acd15970e10e31fa03b5e35400fe498c765d487 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 13 Feb 2025 15:20:54 -0600 Subject: [PATCH 20/23] [Ability][Bug] Remove partial designation from Quark Drive and Protosynthesis #5315 --- src/data/ability.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 347054d2447..e5b674d4fb4 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -6285,15 +6285,13 @@ export function initAbilities() { .attr(PostWeatherChangeAddBattlerTagAttr, BattlerTagType.PROTOSYNTHESIS, 0, WeatherType.SUNNY, WeatherType.HARSH_SUN) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) - .attr(NoTransformAbilityAbAttr) - .partial(), // While setting the tag, the getbattlestat should ignore all modifiers to stats except stat stages + .attr(NoTransformAbilityAbAttr), new Ability(Abilities.QUARK_DRIVE, 9) .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), PostSummonAddBattlerTagAbAttr, BattlerTagType.QUARK_DRIVE, 0, true) .attr(PostTerrainChangeAddBattlerTagAttr, BattlerTagType.QUARK_DRIVE, 0, TerrainType.ELECTRIC) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) - .attr(NoTransformAbilityAbAttr) - .partial(), // While setting the tag, the getbattlestat should ignore all modifiers to stats except stat stages + .attr(NoTransformAbilityAbAttr), new Ability(Abilities.GOOD_AS_GOLD, 9) .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.category === MoveCategory.STATUS && ![ MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES, MoveTarget.USER_SIDE ].includes(move.moveTarget)) .ignorable(), From dcd1636338ae025f9a593bbec6cc8ec8bde38c69 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 13 Feb 2025 17:28:59 -0600 Subject: [PATCH 21/23] [i18n] Update locales submodule (#5318) --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index f46dcdb423c..f917baa1bb2 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit f46dcdb423c24137a25d9f6078cc6be68502801a +Subproject commit f917baa1bb2fc5071587b7894ce7b4898cc64f36 From 3fd5414f5cc2182b6b5521d80e357c5da2b525ff Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 13 Feb 2025 17:37:54 -0600 Subject: [PATCH 22/23] [Misc] Increment version number (#5317) --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4398037822a..270b72afda8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "pokemon-rogue-battle", - "version": "1.5.4", + "version": "1.6.0", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/package.json b/package.json index 94d580a3ec9..3861d5fb4ca 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.5.4", + "version": "1.6.0", "type": "module", "scripts": { "start": "vite", From 8555ef7cb78ae7b0ef2dcc19dcbca694070fecc0 Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Sat, 15 Feb 2025 05:51:28 +0100 Subject: [PATCH 23/23] [QOL] Make the name and formName readable for bigger sprites in pokedex (#5328) * Make the name, formName and type readable (bring it infront of larger sprites that would block it) * Dont to type Icons otherwise they will overlay on the "want to go back" text * Update src/ui/pokedex-ui-handler.ts --- src/ui/pokedex-ui-handler.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 940223528fb..9b54266b3ca 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -537,6 +537,8 @@ export default class PokedexUiHandler extends MessageUiHandler { this.starterSelectContainer.bringToTop(this.filterBarContainer); this.initTutorialOverlay(this.starterSelectContainer); this.starterSelectContainer.bringToTop(this.starterSelectMessageBoxContainer); + this.starterSelectContainer.bringToTop(this.pokemonNameText); + this.starterSelectContainer.bringToTop(this.pokemonFormText); } show(args: any[]): boolean {