From e06980519ddfd8e72429dd64c07d8de7be29c14d Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Tue, 26 Aug 2025 16:19:15 -0500 Subject: [PATCH 01/39] [Misc] Bump version to 1.10.5 on main (#6436) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index db07b9be8db..6f63459baed 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.10.4", + "version": "1.10.5", "type": "module", "scripts": { "start": "vite", From 7447602146d5698193e77b7acea54e364e5bef1a Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 26 Aug 2025 15:42:18 -0700 Subject: [PATCH 02/39] Update version to 1.10.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6f63459baed..574beb80466 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.10.5", + "version": "1.10.6", "type": "module", "scripts": { "start": "vite", From 1f2788a4384a2b7620ba4bc9c050ecaf231234b0 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Tue, 26 Aug 2025 20:47:12 -0700 Subject: [PATCH 03/39] [Bug] Fix Soak message key not being in camel (#6439) --- src/data/moves/move.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 4a744d6e9c3..b40842b5d01 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -6856,12 +6856,15 @@ export class CopyBiomeTypeAttr extends MoveEffectAttr { } } +/** + * Attribute to override the target's current types to the given type. + * Used by {@linkcode MoveId.SOAK} and {@linkcode MoveId.MAGIC_POWDER}. + */ export class ChangeTypeAttr extends MoveEffectAttr { private type: PokemonType; constructor(type: PokemonType) { super(false); - this.type = type; } @@ -6869,7 +6872,7 @@ export class ChangeTypeAttr extends MoveEffectAttr { target.summonData.types = [ this.type ]; target.updateInfo(); - globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(target), typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.type]}`) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(target), typeName: i18next.t(`pokemonInfo:Type.${toCamelCase(PokemonType[this.type])}`) })); return true; } From 58ba29a1bedc0b894563b745cba4e2ea5bd84d39 Mon Sep 17 00:00:00 2001 From: Fabi <192151969+fabske0@users.noreply.github.com> Date: Wed, 27 Aug 2025 10:23:37 +0200 Subject: [PATCH 04/39] [Bug] Fix soak message i18n key (#6443) --- src/data/moves/move.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index b40842b5d01..5a22b352e73 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -6872,7 +6872,7 @@ export class ChangeTypeAttr extends MoveEffectAttr { target.summonData.types = [ this.type ]; target.updateInfo(); - globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(target), typeName: i18next.t(`pokemonInfo:Type.${toCamelCase(PokemonType[this.type])}`) })); + globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(target), typeName: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[this.type])}`) })); return true; } From 98e65b9b8b6e6e025afb98c58bb79baa5cc1fafc Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 27 Aug 2025 02:10:48 -0700 Subject: [PATCH 05/39] [i18n] Update locales submodule --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index 102cbdcd924..e0657485ae7 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 102cbdcd924e2a7cdc7eab64d1ce79f6ec7604ff +Subproject commit e0657485ae75ff0361a6e3f0fb4c7ed649a1fb39 From dadc7b95988bc845529719adc783c3f77db11cb4 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Thu, 28 Aug 2025 22:36:43 -0700 Subject: [PATCH 06/39] [Bug] Breaking a boss bar will no longer crash at max stat stages (#6440) Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> --- src/field/pokemon.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index dab96e4090a..db973ef2d78 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -6916,7 +6916,7 @@ export class EnemyPokemon extends Pokemon { const leftoverStats = EFFECTIVE_STATS.filter((s: EffectiveStat) => this.getStatStage(s) < 6); const statWeights = leftoverStats.map((s: EffectiveStat) => this.getStat(s, false)); - let boostedStat: EffectiveStat; + let boostedStat: EffectiveStat | undefined; const statThresholds: number[] = []; let totalWeight = 0; @@ -6934,6 +6934,11 @@ export class EnemyPokemon extends Pokemon { } } + if (boostedStat === undefined) { + this.bossSegmentIndex--; + return; + } + let stages = 1; // increase the boost if the boss has at least 3 segments and we passed last shield @@ -6949,7 +6954,7 @@ export class EnemyPokemon extends Pokemon { "StatStageChangePhase", this.getBattlerIndex(), true, - [boostedStat!], + [boostedStat], stages, true, true, From 4dc067daa29a647a279c9bfb97f7ae789b34ca7e Mon Sep 17 00:00:00 2001 From: Fabi <192151969+fabske0@users.noreply.github.com> Date: Sat, 30 Aug 2025 01:52:39 +0200 Subject: [PATCH 07/39] [Bug] [UI/UX] Fix options during item transfer (#6425) --- src/ui/party-ui-handler.ts | 14 ++ test/ui/transfer-item-options.test.ts | 235 ++++++++++++++++++++++++++ 2 files changed, 249 insertions(+) create mode 100644 test/ui/transfer-item-options.test.ts diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 73fc1bfc010..a7c7a134488 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -613,6 +613,20 @@ export class PartyUiHandler extends MessageUiHandler { ui.playSelect(); return true; } + + if (option === PartyOption.SUMMARY) { + return this.processSummaryOption(pokemon); + } + if (option === PartyOption.POKEDEX) { + return this.processPokedexOption(pokemon); + } + if (option === PartyOption.UNPAUSE_EVOLUTION) { + return this.processUnpauseEvolutionOption(pokemon); + } + if (option === PartyOption.RENAME) { + return this.processRenameOption(pokemon); + } + return false; } diff --git a/test/ui/transfer-item-options.test.ts b/test/ui/transfer-item-options.test.ts new file mode 100644 index 00000000000..901aa261f50 --- /dev/null +++ b/test/ui/transfer-item-options.test.ts @@ -0,0 +1,235 @@ +import { BerryType } from "#enums/berry-type"; +import { Button } from "#enums/buttons"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { UiMode } from "#enums/ui-mode"; +import { GameManager } from "#test/test-utils/game-manager"; +import { type PartyUiHandler, PartyUiMode } from "#ui/party-ui-handler"; +import type { RenameFormUiHandler } from "#ui/rename-form-ui-handler"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +// todo: Some tests fail when running all tests at once, but pass when running individually. Seams like it's always the 2nd and 4th (non todo) tests that fail. +describe("UI - Transfer Item Options", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(async () => { + game = new GameManager(phaserGame); + game.override + .battleStyle("single") + .startingLevel(100) + .startingHeldItems([ + { name: "BERRY", count: 1, type: BerryType.SITRUS }, + { name: "BERRY", count: 2, type: BerryType.APICOT }, + { name: "BERRY", count: 2, type: BerryType.LUM }, + ]) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH); + + await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.SQUIRTLE, SpeciesId.CHARMANDER]); + + game.move.use(MoveId.DRAGON_CLAW); + + await game.phaseInterceptor.to("SelectModifierPhase"); + await game.scene.ui.setModeWithoutClear(UiMode.PARTY, PartyUiMode.MODIFIER_TRANSFER); + }); + + it.todo("should open the summary screen while transfering an item", async () => { + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + + // Select first party member + handler.setCursor(0); + handler.processInput(Button.ACTION); + + resolve(); + }); + }); + + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + // select item to transfer + handler.processInput(Button.ACTION); + resolve(); + }); + }); + + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + + // move to second pokemon + handler.setCursor(1); + handler.processInput(Button.ACTION); + + // select summary + handler.processInput(Button.DOWN); + handler.processInput(Button.ACTION); + + await new Promise(r => setTimeout(r, 100)); + expect(game.scene.ui.getMode()).toBe(UiMode.SUMMARY); + }); + + it.todo("should open the pokèdex screen while transfering an item", async () => { + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + + // Select first party member + handler.setCursor(0); + handler.processInput(Button.ACTION); + + resolve(); + }); + }); + + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + // select item to transfer + handler.processInput(Button.ACTION); + resolve(); + }); + }); + + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + // move to second pokemon + handler.setCursor(1); + handler.processInput(Button.ACTION); + + // select pokèdex + handler.processInput(Button.DOWN); + handler.processInput(Button.DOWN); + handler.processInput(Button.ACTION); + + await new Promise(r => setTimeout(r, 100)); + expect(game.scene.ui.getMode()).toBe(UiMode.POKEDEX_PAGE); + }); + + it.todo("should open the rename screen and rename the pokemon while transfering an item", async () => { + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + + // Select first party member + handler.setCursor(0); + handler.processInput(Button.ACTION); + + resolve(); + }); + }); + + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + // select item to transfer + handler.processInput(Button.ACTION); + resolve(); + }); + }); + + await new Promise(r => setTimeout(r, 100)); + let handler: PartyUiHandler | RenameFormUiHandler | undefined; + handler = game.scene.ui.getHandler() as PartyUiHandler; + + // move to second pokemon + handler.setCursor(1); + handler.processInput(Button.ACTION); + + // select rename + handler.processInput(Button.DOWN); + handler.processInput(Button.DOWN); + handler.processInput(Button.DOWN); + handler.processInput(Button.ACTION); + + const pokemon = game.scene.getPlayerParty()[1]; + if (!pokemon) { + expect.fail("Pokemon is undefined"); + } + const nickname = pokemon.nickname; + + expect(nickname).toBe(undefined); + + await new Promise(r => setTimeout(r, 100)); + expect(game.scene.ui.getMode()).toBe(UiMode.RENAME_POKEMON); + await new Promise(r => setTimeout(r, 100)); + handler = game.scene.ui.getHandler() as RenameFormUiHandler; + handler["inputs"][0].setText("New nickname"); + handler.processInput(Button.SUBMIT); + await new Promise(r => setTimeout(r, 100)); + // get the sanitized name + const sanitizedName = btoa(unescape(encodeURIComponent("New nickname"))); + expect(pokemon.nickname).toBe(sanitizedName); + }); + + it.todo("should pause the evolution while transfering an item", async () => { + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + + // Select first party member + handler.setCursor(0); + handler.processInput(Button.ACTION); + + resolve(); + }); + }); + + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + // select item to transfer + handler.processInput(Button.ACTION); + resolve(); + }); + }); + + await new Promise(r => setTimeout(r, 100)); + const handler = game.scene.ui.getHandler() as PartyUiHandler; + + // move to second pokemon + handler.setCursor(1); + handler.processInput(Button.ACTION); + + const pokemon = game.scene.getPlayerParty()[1]; + + if (!pokemon) { + expect.fail("Pokemon is undefined"); + } + if (pokemon.pauseEvolutions !== undefined) { + expect(pokemon.pauseEvolutions).toBe(false); + } + + // select pause evolution + handler.processInput(Button.DOWN); + handler.processInput(Button.DOWN); + handler.processInput(Button.DOWN); + handler.processInput(Button.DOWN); + handler.processInput(Button.ACTION); + + await new Promise(r => setTimeout(r, 100)); + expect(game.scene.ui.getMode()).toBe(UiMode.PARTY); + expect(pokemon.pauseEvolutions).toBe(true); + }); +}); From 264dd6b2d04d962b040c99e2f0d5dfba6a7900aa Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Sat, 30 Aug 2025 19:41:58 -0500 Subject: [PATCH 08/39] [Bug][Sprite] Ensure evo silhouette disappears in evo phase (#6450) Ensure evo silhouette disappears in evo phase --- src/phases/evolution-phase.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index ad3db97d520..542a2100452 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -31,6 +31,7 @@ export class EvolutionPhase extends Phase { private evolutionBgm: AnySound; private evolutionHandler: EvolutionSceneHandler; + /** Container for all assets used by the scene. When the scene is cleared, the children within this are destroyed. */ protected evolutionContainer: Phaser.GameObjects.Container; protected evolutionBaseBg: Phaser.GameObjects.Image; protected evolutionBg: Phaser.GameObjects.Video; @@ -522,6 +523,7 @@ export class EvolutionPhase extends Phase { return; } if (i === lastCycle) { + this.pokemonTintSprite.setVisible(false).setActive(false); this.pokemonEvoTintSprite.setScale(1); } }, From 5c22d9ccacf67e9330c86f10b7c6adee0a0dfed2 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Sun, 31 Aug 2025 02:54:35 +0200 Subject: [PATCH 09/39] [Bug] Pokemon not on the field can't be caught (#6454) --- src/phases/command-phase.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index 6ca0679af4d..37e07c6c282 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -456,7 +456,7 @@ export class CommandPhase extends FieldPhase { const numBallTypes = 5; if (cursor < numBallTypes) { - const targetPokemon = globalScene.getEnemyPokemon(); + const targetPokemon = globalScene.getEnemyPokemon(false); if ( targetPokemon?.isBoss() && targetPokemon?.bossSegmentIndex >= 1 && From 929f721ee0967333dc0e5a427d748479cd177b2b Mon Sep 17 00:00:00 2001 From: Fabi <192151969+fabske0@users.noreply.github.com> Date: Sun, 31 Aug 2025 03:07:50 +0200 Subject: [PATCH 10/39] [Bug][UI] Fix ribbon and status effect overlap (#6453) --- src/ui/battle-info/enemy-battle-info.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ui/battle-info/enemy-battle-info.ts b/src/ui/battle-info/enemy-battle-info.ts index 4b37adc74aa..96215c21117 100644 --- a/src/ui/battle-info/enemy-battle-info.ts +++ b/src/ui/battle-info/enemy-battle-info.ts @@ -115,6 +115,9 @@ export class EnemyBattleInfo extends BattleInfo { globalScene.gameData.starterData[pokemon.species.getRootSpeciesId()].classicWinCount > 0 && globalScene.gameData.starterData[pokemon.species.getRootSpeciesId(true)].classicWinCount > 0 ) { + // move the ribbon to the left if there is no owned icon + const championRibbonX = this.ownedIcon.visible ? 8 : 0; + this.championRibbon.setPositionRelative(this.nameText, championRibbonX, 11.75); this.championRibbon.setVisible(true); } From a9f6801ecb9719361b028c9c1a044cb04696f1bb Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sun, 31 Aug 2025 02:53:05 -0700 Subject: [PATCH 11/39] [i18n] Update locales submodule --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index e0657485ae7..2686cd3edc0 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit e0657485ae75ff0361a6e3f0fb4c7ed649a1fb39 +Subproject commit 2686cd3edc0bd2c7a7f12cc54c00c109e51a48d7 From 2c89295e3da6694eeb6ac7679a046525d456f3fc Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sun, 31 Aug 2025 14:23:55 +0200 Subject: [PATCH 12/39] [Sprite] Round of optimized PNGs (#6458) Round of optimized PNGs --- public/images/arenas/beach_b_2.png | Bin 197 -> 195 bytes public/images/arenas/cave_b_2.png | Bin 279 -> 276 bytes public/images/arenas/factory_b_3.png | Bin 290 -> 289 bytes public/images/arenas/forest_b.png | Bin 1102 -> 1100 bytes public/images/arenas/ice_cave_b_2.png | Bin 218 -> 215 bytes public/images/arenas/island_bg.png | Bin 341 -> 283 bytes public/images/arenas/jungle_bg.png | Bin 349 -> 261 bytes public/images/arenas/laboratory_b_2.png | Bin 336 -> 331 bytes public/images/arenas/laboratory_bg.png | Bin 364 -> 289 bytes public/images/arenas/lake_b_1.png | Bin 280 -> 278 bytes public/images/arenas/lake_b_2.png | Bin 206 -> 205 bytes public/images/arenas/metropolis_bg.png | Bin 347 -> 283 bytes public/images/arenas/plains_b_2.png | Bin 235 -> 230 bytes public/images/arenas/plains_bg.png | Bin 645 -> 610 bytes public/images/arenas/snowy_forest_b_3.png | Bin 419 -> 417 bytes public/images/arenas/snowy_forest_bg.png | Bin 363 -> 296 bytes public/images/arenas/wasteland_b_1.png | Bin 208 -> 206 bytes public/images/arenas/wasteland_b_3.png | Bin 338 -> 335 bytes .../PRAS- Pulverizing Pancake BG2.png | Bin 3746 -> 3700 bytes .../PRAS- Pulverizing Pancake.png | Bin 14454 -> 14326 bytes .../battle_anims/PRAS- Spectral thief BG.png | Bin 1949 -> 1938 bytes public/images/egg/egg_crack.png | Bin 290 -> 276 bytes public/images/items.png | Bin 59635 -> 54370 bytes public/images/items/common_egg.png | Bin 471 -> 247 bytes public/images/items/great_ribbon.png | Bin 296 -> 295 bytes .../fun_and_games_wobbuffet.png | Bin 691 -> 689 bytes .../mysterious_chest_blue.png | Bin 2273 -> 2269 bytes public/images/ui/champion_ribbon_bronze.png | Bin 183 -> 152 bytes public/images/ui/champion_ribbon_diamond.png | Bin 201 -> 154 bytes public/images/ui/champion_ribbon_silver.png | Bin 201 -> 162 bytes .../ui/legacy/champion_ribbon_bronze.png | Bin 183 -> 152 bytes .../ui/legacy/champion_ribbon_diamond.png | Bin 201 -> 154 bytes .../ui/legacy/champion_ribbon_silver.png | Bin 201 -> 162 bytes 33 files changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/arenas/beach_b_2.png b/public/images/arenas/beach_b_2.png index 50c9be97b0d964c37e379543bf8945185c8d48b8..6c3e89c1b25dc8f1230874db88d9559dfc611ff8 100644 GIT binary patch delta 126 zcmX@gc$jg5PkEB3i(`m{6jaxp`|_=cY-WNF RLJxpMJYD@<);T3K0RZm5ERp~K delta 128 zcmX@ic$9I1Pi2ayi(^Pd+}n%Xye$p_E(afqY&gmJAiaT=Ipz3%wHzOhsZG=0{jg#{ zfP~&#+m@Hzo0i;p=-WZ-NL;Jn-2_mXjZFy=zf}XB^F6*2UngDm&P?i7y delta 202 zcmbQjG@WTeX#HAG7srr_xVP5~vknIcv>iMuap%^)gVC-pbtlG2IRE1KYS+}&uugtr zjN;KrXGH4%ZoGO-o{<3tWb|5ZpZopg^FG(F+e_#7o4NWfU+4QfrP?j<{rvA`_db1< zO#SL?oqJmomm9OZs|ogpQxZtbU{irL4DL!76cu84iM&^7e$oLtFusm%R% yC*;1#FJ*o|Q@=kaIOOXOL)XOPn*S6b7B=XoPY_Wpx+kjv;(NOKxvXdQ+U7S z{ehXAPpkd7XUu>CKG^5Z)7g--neVh%=n?^6`duCtAO z@BebcgtScgU-OrrN>uFi)}3p*RcCc;$v)3_K6-DPTd&-CGAX7yUD0&0erW2)t(#|@ wi~jXF{1zMcD$l<=*4Dn#Sr@!Z0@>Pz{CwRl%EB?iOp`#up00i_>zopr0O{mdUH||9 delta 212 zcmZ3;w1{a!Sp9ZS7srr_xVIM!`I;OA+#WjWGaO+)A?1|4Y1UqbhYS*rc+;votgnkF zXQrAT{XJ=J(rSDEf6NRhpzotrpR4Dtx7SxMKDx+q*6j|@{buVK->bHt_WgV~^H9pJ zcg*VBIVZomWxCvR^X10B5k+QpO;6rv%y?%tWdPaX>$xRpt0%%qV62``>X8!+QGa5#;U~$EjJz3s9fNCiF z@T!q)VCP3bId&0i&PMMXF(v{EA5ajmfrVbcI*~UAB#D@YS4yY_o9cvwRqqnuv)T_T>-Lr*f3J^ zE2U@^PY5YLUauGCcDs#ZaMU)bD?o>$*&)A6HpH)*v2h(nCA`%XL@S{(&m~7c;Prp_ zfo~Q`_T6*ArxL=*sNq%l#-M!nlF8d{fOzfyD9Q%oBOuY3o#1~{jDZ;~A;iK*zyu4o z!q*ivzxoc(mizsopk0_}Ep=glvu5HcMZeb-bV3-Px8(DagnPl~{aR<;1Y?}sZ=Qyf z`Z;Q2>%m`RFCRnbMXBZ$3NInqI27CyK6s)7_{ky!*_1#5xeiXFpu%^!1K)w{RE(;80 z9gv@;QEN9;S9ubtv#TiA%x43uUkTf zf-C9@Nm75b)jF%20O*~M$v78uJ~yJ&=G$6>51Ez^nE-toQV{z!NMviY)O^akgC3JJ z_KIjR!P;>|Uau+586Z>d%@i51b|=1VDIeSYD6)2sp8nYF9WyBTTma;w+)rTnhnwba zJ8(<@004k6$o{FVu>+O_000000000000000a1#>_&E1xcsjvV5002ovPDHLkV1fpR Bw+{dS delta 929 zcmV;S177^h2+jzQc>%zYdPaX}D^eH;0_ciMV3+|@^#A|scDfTPARcvnB4a&3XpZx6 zPeBma`4Lc#U4-Xs^vn@5v49RpLBIwUdI3I>CkG^nms0EwqgoNayAL#v5fEt=f zCS~DrFJ%>4+DV7E9Ss^#H#70NI)a0y3wBd=oOLFa4kQL*?3!O86*IIxnFz&nZVg;QAka z;FCp?efKE%dAe?7)bOr+W2bye%H)6$*TX88esW=a1SA@>6a0S?W5+mS*M-DKzyTKS zCD#=+zw!*vmSy=+&<@O3Ekkg?Su=5$qThuDoe<8qSl-@9xEK7oU+t`0NC=brDPTVg z?QF#c2aQ&6T5{er^O?#w{MJZ5+d{f&nlqrnp%K3**fxt!0V%l5;Rm5#`j8n%bqifT zS`FavlDrf-KDZBfkP@d|mq8DTLm_4{G{d7*NW;yS)O|f>VCc{|wM} z-~>3&{(}Wh)&bj$2PQ8YXC)3epkR(*c=39Nq>h(H0F5OhEh%q5fhi4=dZl_8w3^AKfdf~JT37#ruy zORs*Y0nM)wK{3H}oO1dek^#vF0@{E#A%TKrRJ>o)<6NFyH0MV_JNBM3s{?sg$g)f@ zl(nGxYx;?-Xv>d;9wanC2uKlO=k{S+3HZ)G%c0_Hl@MGXku=+ks||Y(D5wbetK@5x zkfETXIwXHdQCI7%ZUUfnJ|>)h${9@Z{fl^xd? j#}RTYkzjAixE=mAU(tZrRp9<=Xaguig3YFPZOoQ@cd8&tmVd6E^!+zS_J-`SRv> o2Z|&6=eTq27F){>(R+YDUztO;XYW}TAfJ=L)78&qol`;+02Eq0>i_@% diff --git a/public/images/arenas/island_bg.png b/public/images/arenas/island_bg.png index e05c3afa7756b15d5c5d6edf1679f2acf504c894..8a8d703af5dc314c422d86b6c903bad80de113d0 100644 GIT binary patch delta 213 zcmcc0G@EIHU;PeG7srr_TW_x!iZ&PsxEzc)z$CVzfmJ7gkvrmmE}zDZCe@ki6S{8i z*`mFNjROQCnAbgg%H02f;WxY9L&j;1(G@=(%)v51!osY8i+=-;iI6fQi;V1!_UZgK zhnZQx;E%+M-A{M3W~jJ5Vzb`w=%BqVNtw|PC{@F94rpMl*eVC}7i@PQ+|L&f5V+v{ ob|D)?AC#04*YKRA0z+{n%!;zH5w24m{TYD3)78&qol`;+0GUff0{{R3 delta 272 zcmbQubd_m>U;QUf7srr_xTG1DCl0P))?{AHCsX=h1+%-X#VZH4>5hDC`rm1F^GC{Cka|&Vk>Y_x$)w-F}w) zGqQldnULk2YU($91TKhGA6X~qo#e^D2m!VHRY&S(>2#_xvTQl3mH`$2TQ+OKd0p?M zrfEkcOU~Y5<4HHzeRMr16A)Bgm9=%Ww`{)kkEbkMKtLcsFUy;W0~u&|PEvuPec6n6 W?710NDRV7j00K`}KbLh*2~7ZFLO$;R delta 287 zcmZo=y2~`dy`GW5)5S5QBJRxB-Mj2y zAUmHyf`H7EgbUUMCcFr16xbJs$}Vka3^L$iVVCFuDr87l&ez4jkRZ@jIkSG^X2zIR z3hU!4zB&Mbbed^GMEyNa7sn6@$+rg$vsxS^8ZMr{$$dtIdz#XrZH$~b(#jFh6%8Vu^A&t@ zH&?tla8Kbb|Id5QlTR3l%5C>CS*cuV zA}R6g*Dj&67nUx3oEh=$x~QIVTxoy&y^!<`f()paz(>)k~z|+;wWt~$(695AscliJS delta 256 zcmX@jbb)C?MEzq=7srr_xVKjgvzQG9S|6(aWSVto!&4=e+iWcdbIrI{#r|N>oMe~i z_|@##alWQG3RfNe@r$mnIdj0{zaRq=Xh`r}H+Nq9`?if%c{5a}hRK^-hEAIDJM6vZ zy(5)-Ca6qZ8~>+w!5caW&3tDnm{r-UW|4y)#vR zOYc53bpU|_QXjbV<#)8RTi6xw@o(TMQR!n5fPxK7a}F`bP0l+XkK_jF3Y delta 293 zcmZ3;^oD6dKs_Uyr;B4qMO;#Z>4}3Ym^E1z^U0JxSi$TrYw_y9%w`#$I(DWT%af%T z7$n*fW7zWkDDt?>&ngo5adO&sc@B%GjLT-KoK$Im0d=;6j(l#i9-0XTa!(R2SQngF zelU=|&#K@`BSYEi8Egy^Y)ui7?M{j8Zh0RRKYXgc^uMC^!4YPbJ-h-yaN%yzc81;~ z9*_23&5#1RgMpcCx+5RkUS{{pFgFFV^A#~9Z13x2XmC{EIF|A!+L47d{Eg;~N9_;) zR#YxXPn^wr>p`g*2M5QCfa9AT9UL4E6u_L<&~TYgMwo$tL4jveeU|l`HaS)x2Lui< XzWEb5<(|-LHxSR$)z4*}Q$iB}E{Sp^ diff --git a/public/images/arenas/lake_b_1.png b/public/images/arenas/lake_b_1.png index 5426dd1e8d936701f55a0ff5e3509ac47f98e493..8786fb6c728707382006ba4698095f944f505bb7 100644 GIT binary patch delta 201 zcmbQiG>vIOX#E;b7sn6@$+rg#xehsqxL%wtxW)HCg0$OZ?sW+XF%C`Z`=_ooJNNDG zG4XeT3@G4-c4bh;&Am$AaUvn7A}_shbu29l+f?mpdMmgnFkD delta 203 zcmbQnG=phEX#F}*7srr_xVKjvy$%Nm9DnH9vdc7~Pj?OS(e+w5n* zCPn)^{O$Ll{h|5C00tOnNY&e?AHQgm;r`Qp(bGC2Uh~NqO_$jGp|yYJ=NY=Eq>RqL z_J8Wqchf#f#O%wx``@Bg?K|{*<@V~H?7IQma(BO3>*JDY|M0hFUcBYivp;N(ul4_a yNOHTypWNvyUVYyhJKt{cy2EmwxyvgeU^f2WRVx;e`_^_UNWjz8&t;ucLK6Th6<}xp diff --git a/public/images/arenas/lake_b_2.png b/public/images/arenas/lake_b_2.png index b08ccd7b8e4524df19899a2da2af8a474046e551..454c9e89d29a3898efbe0f8857d73cac454dc49e 100644 GIT binary patch delta 130 zcmX@dc$RTOP<5K8i(`m{d7B&r7!Ewmc+kNsz_IV*+lGL~i9&DovwDAcX_uzP z00Ry3w~X8~zn|BBm38`am3(!GY2Nc$Gi_H%8OaB4u{<@a>c|e+>JYO#o7iDG7(V#N X*SoN;*mi68dXSi>tDnm{r-UW|L(VbE delta 131 zcmX@hc#d&GP))k0i(^Pd+}lfzyv+;(E*DvO91I*3-p(wO6%d&a=JYo@BjCV9+db+J z&mUoBfPn>bmutNJY3=pAy59b_RA^~`?a4ECtFnyZowv05TYO1BmfL%3*2ibPj4%xi Y_Vq5TE1o-~90rMay85}Sb4q9e0Q=)HfB*mh diff --git a/public/images/arenas/metropolis_bg.png b/public/images/arenas/metropolis_bg.png index 374744f245edbb186c3117b20801d8190dc19801..b790221b32332e4ffe5d18ba56480b4350c042d0 100644 GIT binary patch delta 216 zcmcc3G@EIHcl~Zp7srr_TW_y9@*YqSU~!nxz^Ze_NjHI!JHnxi_lvW>uZQ*Wgh_W* zpUnKWkB0*UB$($lI3}>OmgTe~DWM4frtmkT delta 281 zcmbQubem~{cl~cq7srr_xTF^nPZF*)iZlhX_gNKOXxHVYo)=&(3U9SmM7x2 z@Q-3o+xp3ZFDA~ZsC{rGnxEy)|D*%b`uu-tnj2ui|5&q3kJW@AgG_OI5$82#T;MHz%cvi-9sKdEan;pr@GeO@L=H* z(fDvOw5r>mdKI;Vst0HYXc-T(jq diff --git a/public/images/arenas/plains_b_2.png b/public/images/arenas/plains_b_2.png index a35dbec9917021179dfde1e8ea3708a0e463484d..4d8d679d12f4f91c15cc92c6ce338dcdb155e7b7 100644 GIT binary patch delta 168 zcmaFO_>6IaTYa~ui(`m{+}E#IF-llx^=*7W~T zn6+LzW#gUB6&i7qmfPk;qFn7Kfsqn@x8a0*=(KkcBw O00f?{elF{r5}E+SyG6eM delta 173 zcmaFH_?mHoTm1x27srr_xVM)!@*WD{X?b`!Xjb@Pz79 Se*EPZi0A3*=d#Wzp$PzFEKFtq diff --git a/public/images/arenas/plains_bg.png b/public/images/arenas/plains_bg.png index f2cbec9197ce584c64be9d7323c7569ae4b0ed64..9c0cff9b7dc96f3c0b7c370fbbf59e768828a377 100644 GIT binary patch delta 549 zcmZo=eZ(@sqn_2%#WAGf*4wMTRm}<_t%+7I_VCU`=C%C^mU77wtqk(~uiG|~X-Gk*HPOx8UX0SZ!ZhsUgro&*L@|?k;N9JzuhrKH`&7Y?`FWetT2)a5($KT>S$PNy1)pKKD9_n}1CWUeu>rw(-a>mXgT%U29gpkj{Ht@zeJ` zuiWEhb(h>!Z@q6XSa;WWRsECMA=CMPGjl4o2smxJct}~^<6n)`!-@PVUla~3X1?F* zZZ|=Wg+oBW;i1F7S3g!SW`F5eH9_uA{QjTEdS~^9?clsnU$&{ysmAj` zLhJO3h~16+w|^)E^sg(ZOm)6nUBj8nlyQ7xUT*K-OS^Q|uh#0X@AZARK>XHK+l<`0 z?p^C{+^=K&H}kSlNYbRQ?G+kp&R$=pox8AJZCZe?e_{KDXN}HhcdutT#l;V?4sI_J eLk{W`4Ws+Ud=3*9u-`qw00f?{elF{r5}E)cF#F5^ delta 584 zcmaFF(#kr)qh7<)#WAEJE=fcFNy3#zk)}ZQKC6N&jf?qYN)v7=us7dpT$~ByGxIXM zxnj+A*nx*7U}u56sMU?K~HQ)TIAAEW6 zou}ZM&*u^rui^!I2P7xWeDpc+pMlDszAe&1JCy6$*&G>L>enAtUBz8-?M%K?cI|67 zo6uU$p80CRP5CEZSu0%0+5N}5d+)+a-xa*g-f}MV(sSrL9Ihm4=k!j;U=w$S8+%vx z;v-x6oz8mi-6nK%p2iGo*%eFqcLtOka*v)i|KuU%tiMM-B~9=1WoSs0;K*uS^Wbm0 zkGMEz9*v&B9Cj&#m%+LIPivIIU*pPzdtYN zSLI3j_WZy$;Ugb2a=)JwUst}lM7 zHP5-$l^lLKIdZ~!E=z`;#uG&rX-;46{&m60jY&J^KVd2^KG_j%uY_sjbubJh1Yz&SJ3=$lUXYc1qeb;CbQ`Z2387d$W8>lembC_Ty SJntL>5O})!xvX_05FykoMtX^l?7`Bb8A#g#junjNM4sEB|aUZVCZ}{D2 zb@x@#Ii?%V2D$;q*IkZ#&2{u&<6Z zetN$@_>;U*`kfk0RquBvqU4N@=X&Sn2A5af?mEa_e|qbzOJB~^-Rpm@RsF1X>Yc*b zua%d^J^Nw%HMZya=5@{!96$d$#XakmolE4DUwR%=ueC1gy-u(-@YdYti4u9H_KC|?v+_Jx$-*g%7sMbH66mV%j d8_b&!x{fJ-m2qf%f9_!r-_zC4Wt~$(699~4q#XbN diff --git a/public/images/arenas/snowy_forest_bg.png b/public/images/arenas/snowy_forest_bg.png index b0dcc3ddfc56a0c4c9c26a4d4b9427577beaa9ae..62ff03f5b1c68ca259b58d9e99ff78f8d7ce70f2 100644 GIT binary patch delta 224 zcmaFOw1R0uKt01DPZ!6Kid%1QIPx|a2(UP4F>*&7U=rKVz^aqL$i3nSgZ?+hmuEF+ zq5c3ThPDHO0#LBQq=4a#Y=&ovfWQW;0(PE8 zZLkgng$2dl?2Njd9i;*S7sR?HK*~QvN>(to9bgV%cU{xm00eSbvMeY-hwIB%Mh<-7 aM^fJEy8-QIY+lwd0D-5gpUXO@geCx_!9HUE delta 292 zcmZ3%^qOfxKs_U?r;B4qMO@Mh%M%AzFl(|b=94LXu!7lL*5Z}JV@E!={mhryEG7N{ zMHgIBU|-C)M8seRPm#e3*%JyDARX?q9>E5$4g|9ISruGqgzA=TvzB00wwv6OHYw16 z%Z;(&uGKO|h6YE46`P{6d45O_bWocn@D&yu;)ENjw^ zhUKU<072sNzD@=P2MM-Y?%Y}v9ozbwc#d&`TYa&oi(`m{bS}(^fC(oXl}U zQpIx;2)&G#5m2!T+hbjsborQ)fAeadPjjY3o)m6Azv9VD8?(74hNpdXE}6X2sh#v} v$;Ue?TH@ao0%Z+PUiJ9q1TjE;pXN*fi&M^RHyIchI2k-${an^LB{Ts5h=o0F delta 146 zcmX@dc!6<(TYaggi(^Pd+}n#Ac@G&#us$sQn9eNlDa0gT$D$siR`){5RIh0jLag6; z3(kJjSMi(#LN8fG-_HFi^W=)_e059NZ)PWdUbyDw=X=jsQs#~xo8i`5j&o0{-p)!^ xonG=z+%fn043^x@Vv%zaIE7sn6@$+rhC7B(9QxL#z>Ygo#pa@aoEk=e;a;Ksk`PEXO*Z~de*Y)3=Gj&6&0UB76%&--kYY z;`vwQYjpOz+)$If|1;(-(R==V?^VZ(I`=kR_ndq4ktuIiTHf0|w^e4Ijq`ojv$o=F z^OC$A&yNw`tY^x_hB@4=2n$ZBUES<-+7rpqf5P`OODXN{{veeG67_WTb6Mwb@!7srr_xVM)Nu5EVUVF+}V>R8!O`amvqVPkKmLge@Rr`VTr)@R;3 zxUWwqGKi4@89WG^Uo^3J`Ih6~#jD;;+1Bw~|I1vH4;|+h@6)Nebl~O2qfdWpO`5ds z;@=XNOX`x>-sv0Pexz%ud#`KNtaRQvYhE1fdQxw);@b_j* zd(QJ2n|n5&*s;^SV&4HnyG>`5nr|-7*S$Y|%|o%=X^y46VV_v_-noB|bSdpzHtF0G z(^;|Y(rWsX`lG%qDw6aOl3KQSWr|tVZttwHC;OQYPJY18ETyzN^8ex8ATdu@KNpsD HP6!Kt diff --git a/public/images/battle_anims/PRAS- Pulverizing Pancake BG2.png b/public/images/battle_anims/PRAS- Pulverizing Pancake BG2.png index 44b50a6d38558ac9927ca779aa0d43f142d23acd..4c55dd5f1c897cacc9ca0c89a2c39e18619ef943 100644 GIT binary patch delta 3651 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 V*_}1*Q2GD>002ovPDHLkV1j+o=+FQF delta 3697 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 P00000NkvXXu0mjfvJnBX diff --git a/public/images/battle_anims/PRAS- Pulverizing Pancake.png b/public/images/battle_anims/PRAS- Pulverizing Pancake.png index 519a52c63c63128f604ba896cc78391c6c34b577..b284493c6da5bc1570defbff3179732b55955bed 100644 GIT binary patch delta 13592 zcmcKAML-m6+%50{hVE{pJBIF%ZlxQB?nW901_T5I=}rmh0i%0Du>#%_mvXk0U%k8p#h>~H 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 YO6x9waH20g^?w|#p`xqYs0fDsAJ1wNx&QzG delta 13721 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 z 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 diff --git a/public/images/battle_anims/PRAS- Spectral thief BG.png b/public/images/battle_anims/PRAS- Spectral thief BG.png index 35fc434fdca83731a69fc1815665df27f0093872..92c356c5ec5794689743b3ef160480ebc5789ed2 100644 GIT binary patch delta 1706 zcmV;b237f;50Vd%X#o_GYHNRCj@)({h+!a_+ip^LBLDxf_!f>*)J3HdVj?>`_IPTg zbHj%mketxB5S;DB!()QGgeyyYg)9F<161+M&RG(!(V&5!Gp zy@jl=aL&}(rEV;G&Qceg{Zw?ngsCCu*3bY;(pTSn@Iudo)$qgLhjB%*dbK;y=NsH1;khj?Y?mWz*j+PB7Q z1dwk?PHXZG_{isosSwJ(AnhR=c~)zz`~<^_H-H{n!7ih7Y;2D@zc=lDGi7I#w`Ppd zYqWGn=Ggak1gv-ha7A>2vuwH)kA=s-8c`*jT8pulhvjoUAp@r(qy916%@a9YdrU5r+ z8ZZqQ3Gh=umGqN$6(s5fSDuZl8KQqzQ|lU3i>zbQteY*o1_6IkX?;4IUCX@LG6Vh424;fnzbP%h!xmH<*llh*4E z5aqPz@1^r9KU_QkBWB`5`RH7>idCmG(tzncuy5AaY^?EM*Nl=?g@GVC3phPw|Eqn4 zrkDywpLjz+!|Cb}zN|C@8b&%}9X|8a`>20wJFMNHat;XYM}eqX0_tv#;ox_8ZiF0E zDj>%0021Og%4T&mZ-SnQ+bFTsdsik10P}vpJUAJ5-a}FT=&p8{p9HTKY zG`aiqpc8>RauEVSn+z=0ds5<7+4PJc`_)qbz@|ssXFp{McZ3Cf0$G`u*|Zh!jlzE= zAH~5+HvJvH58eY-^4Xbfad0y&0yyUR3EA>RpjWUMk+G($?_UE7y}{}yMf(cq1lb?0 zzobb39(MPsX9WbHk20{S2|o4xcEp{Vao$gX!l+pVggQeOEA&3r_8Hh8N)sS<3cw5d zfv`yKHAl(+HvrG;S?L@=zQh#PgFt^bp?9&)p;9}K?fR>N(T{>N(T)=@9B>J8%<`%1sF#7?6?2} z&&UR&0WcZ>qX96o!Ds-C2EYiP9T#92;j`lc0Cee@Fzex|zW@LL07*qoM6N<$f;oaV AqyPW_ delta 1718 zcmV;n21)sn51kK?X#pRRYHNQXjEa&h20<7Cb-(5Qhg}dJ8Qs~wIG}-qI@S&>UjVJE zo9}X!ilc5+?v?W*=Swa}i3_$c7w2Ps^a$0OO$1(}OSKa12nP*(^>r z0_G%P`)s)<2ha;&@7;0W_N9FX`rz>1{V~2wTJ{2B;fBO3yx?da+Hrq7<#gKCkI=Q= zBNwKlk4WyoTu^w6e_sCdW>jX*b23u#r79A;B%HApM{GdH%&4n+K-){WZGC_FRJqnh zX^X*ARc71>D%{fnrK2aKj*P`jdO?t1aBH4m&;J_PAx8!L0*0b1?>c-7|KJ2}QJTs$ zpE*6AfFIPi$O#P|h30<%&SCWERDgeHbwsX;b|hv`#aDB0Js8yZc(^=NXFf=BxaQBJ zS*cz!`elX;R2T?h7%G4!y8r**(VQg|HrPBEd(wDElTrkLfe`>hK#yXeMwCelvX4;D zN`Fn@!qjyVF_@xC5=sDN zb1ZwRpD;C8A8~))1fNA%o_QUfo7V1(W<-@=cGz5NgT(+G1;lP5 z(|{m|GZ5MGfQamUM$kE}$vfa9pChJ1DEor6hiv3ot+DbG3@hFMdTa%|jLxyKJ?i}4 zwD--Fol)MJF-EV^(jA#&-`f$e;t9YN(E)G*O|&D}pwxf%(Zrb3xURE}pDP}P{byV? zc(r+L@eOBhR{R2O0V$ZjANgfRFcsUXz=c-Yap$mz#;bS2YyoUye)m-!I=9r@Na8LQ zfVc@!n-6AeMvVzNg#*FcY#biDRH>ysJ)ZAD$Z$klA_NkeKpt9yS1X5@_NgqmBu>wFHqEZlI?s0I6#i$Or;_0gV~6ao?JNjvNfQ=jFb7 zcpkGaqLPHy`2#HfRVjq6N8fU&ZRWB!VoW{%Zoovt4S}^0=!|dOFME;AMGv6ISwVcZ z>x%t4zeF7Il;5`xAG}=z=BKH;L)?V^*fqlygn@q;2KV=p_kUj5lwb*WTbaYt-B${i zn>dUWvdvWlal9ban-sQ+jXiHPi{%#5X+OYv`PGMDuQuex7zAq|EA`J3Ak%~vsx$8n zI3~fHGYyyq+?;8^G+-paPXSfZPu^9Ks25y$Hm+uf{#{M2Yfvq+j!m~d8+#t?H=DZN zR}p`>IRVEeTWHU&4D-sAcK4o^e8YeR|HHCX<)%zvnLmNEOarC?`ge#O&_RbU1~5Rm zglk&@NEuC9uQx!H)1JSV&a3=z@dS*Ri4WzYbJ;3Zoz6%Dru)FYSzoiU#)DlmN>&vH zg6J&Z^pO3p_7$39Dj0p@4FL_Ot3&v*(hPrS80n04_{>x9qpt0+c7w_}Ah;g|qG}1K zyE%q~-{H9ta!{#&7`p>Vh}S5a)zQ2OdM0k8#8&TJnIHhn`vLRdWZZcVMfsz<+F^bw zbkhs~PK~Dbn@!W??$d)#1n$U12n201uvqU&iCbmUGlJ|_PXPd%9&w-jlquX17W97! zWMyJz(^kAU3YUBo2P@h1clPjFYE`xBDvQbCI8<5JguJ5>r?Y0^Nk(#ZI$ID$?Q^Wx2-+fvq?+{o#SdsfLO+iDAAb%Py>oYmW(1hN}U7~+8I_T1jP*Ko{gbHp$I9asPEt8 z*eJEyFY{ELs=;(P5oxTrk_9nqiHVF3fieXmfiP6(ZLpIs2O^U|2N9D%2LwXCr#t>{ zG?^V2U>M=E;{pskBO8ncz-R!B2EfP$qX94)03&>MT!3MO&yEWK0Cee@Fqy8p>i_@% M07*qoM6N<$f-IpjkN^Mx diff --git a/public/images/egg/egg_crack.png b/public/images/egg/egg_crack.png index 9d553ebf3788faf71d62b79176113690038c0f88..f5b5ee7b7e15cb2d3ec6458c98d951af25a9080f 100644 GIT binary patch delta 214 zcmV;{04e{X0+a%fMt`|UL_t&-83n+xO~f!10MPd>2l=Rslw9rRB*yqKL5d`zOvxB2 zS%98~hA9!OK%BrMfhB?Evs}pK_=CRe3H5tFVS3xY;3@XjlC9RRdiE9Wc@1&Oq5n#80L`92bcF1hH@6wjW?# zJ}x+y^%Y@Cr~*_Kyci%2V4}mFfwGZ^O>~s^tT%+-T!h*TT9yHQvpF delta 228 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 O0000<~T3T98PR{4&=gGN+PR!-V8` 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 LO;5E^**@}rHSD{! diff --git a/public/images/items/common_egg.png b/public/images/items/common_egg.png index 5eccff2f690d2313014ebf6d8b8c89cd902fd03b..c449611d5328bd3c97b3f0fbfce21813ccecfc84 100644 GIT binary patch delta 231 zcmVoeg6#r4x5c18q4r8c`D2U z#K8bi|Nf}!1ymeeI2d4MjnZeA!3Jd0b!km}q=Ti%Dnsf*6-^a@ovwo|nFYXcfdX)% zhd_b=un77Alw;oU_BXs#1^YB`#n}J|0WCTG{wkCig+kyoAAb+a0o;I(5dgV59~HDw z7=B6~B_aR{LZg=m{lA{bHIkS;#yKxeBpP}KYD12GHT9qc|2 m1T8kR`zRc}%*f#=$G|X8#w(yWhmV^92s~Z=T-G@yGywpNHZErX diff --git a/public/images/mystery-encounters/fun_and_games_wobbuffet.png b/public/images/mystery-encounters/fun_and_games_wobbuffet.png index 71997be5692bb37cdcfe82f575e9b8f117af446b..5d61512ea78cc1742887eea60be46f9b6c76826a 100644 GIT binary patch delta 579 zcmV-J0=)gR1+fK?Vh?jfo}~}~|5h=teDNDVqLFbMe<8Kd%>V!Z0d!JMQvg8b*k%9# z0sKisK~#8NmC)Iet1t{jQI2fpnat_o-v9r~mMn;hK%DMfW0G`S63Otr z8oRH${`Zde(!Hwcs;=Mi{_``>^D3{npr>hy;C#l)yVLDujgnRBc;W%>~@2RTl)an;~?9FO`5 z_O#aIa1btQE!OmcP0KHR=vG>Ey04vThToicdQ2l(Ya3^(e4eJ2 zhHB2Vq*|zA` ze-YW<;=gDB?{U*KXJz_h_$bSPL@P(+BIST#2%KZ< z5WV&=@HnSxqiOvjrQ)&ypg5w@G^J|c07Z2I^^FFih*l4QL?qKutwAp>!xYCF6g+E4 zuk_|$lIO6m;k|pxOSHqmIBJ2*Xmg&X+llqwfwKbq$(8@Mcy z;d?U=Uv2wmkB`#5Y1*c3clr4FS(ar}Hr%S0Wl7*NVCBQ0bou)`MHwygD(gw`<`*ZdGW?o3l}YmEB@}qibh5+ z8dt_=#@;g)e(8JFUbJ%4*LD2JLtYH?i(bw;f7fy67^`N^vF4QNL&O~9IMv2ggXeL% z=p)$Et0sq|aM8q^nWoy4;Z-~KN5&G{NI$S?`Q%UCOAnoIYp0swHz%H+)5u=6jWbmq zrs+jPHD_8Y`8XaM`T>pF7AlNw!J*Q&j91R$ZoHgLb@DCVq8e@q{BJ&|bTNE}j6m?q^i z?;Mh6PZN)GLB*OFSzWET?f@uGXmnkzS~x&Sok4x4fheKXLm&~!bW&^3qh*-VSc8IC zLwcuy_z=%wTf=)7Oqd1kup zH2DIJ<0)|}`Ky_y=Bu9|VJ6DxDgg{74&5vQMH(`9vV>a+Q-7syDKb&Mi;6n^vOsYl zucBV2d>cItwUjZhewmU$fpKUtQ-y5`EE@B}pulRyo`pW+6FX+=n8hG!&)8J#F>W%b znuVB@XR*U@jbM@xe_Z4BN<N>9|v3P;DontYn&uh<%omn5b`xrfyI^6x0N&Vk|OP zd)&{jDl`V=$3fK>!B8zns=UJ`j)WxrO~I$XDKy?14lmC;E~TXdgOzRANgP*4juVmLq|T?(2)=J{*g~$96vkqfrgHJ4u9y8 zALxT4Uy6jQ5A7o#XFjQ_87uQgJ`Qg?@{0n~asJ2$V`ivooImoh^#)ZO2n^#IM?QuL z#4scTe|BTR;Gm&4^Jlk&jX^orJcM-^x|9!x_J1Mlm>cI0;b1Co0Bep5f&3vX>X^~d zA)G=3rzRZHCx@^{|LT@MTmEeMv*pj0e+oq7Egyw_q~)8U4_dyk4_ZEkjkJ8Ip_cE| zZ22y;<^P)(jJaUU1!FE4U}FmgeY9W%`e?xb`wjn3p)llfxv%S5Ef`D6D$zga#GaX2 z)_?tik(EG;^?cW;gh|SR0VT*YQ~@{*L1o7+rr{LQaGe-qgR!_y!l}WuinO!!NKr@k zacsfJDf^5{;l|p#Q?0%S?&F}%K8Nn(Y-;pAj;TNKKF-|m=7!h0ljDIl3nSR@fNm+w z+*8`FVpW{!=~o{<3?=2^($qRjnd(KD=xri?{n#pPi{ z8xug3A%WSsV(g*J1QljAUwQ=*7@EM2nK5RLIfzonP|C!yu(L5T#-cbmQDCCLI5Txb z#!xzh@s^5dNQ}fBrI=$TBq^}?wSQ;w1$`0n<0Y9^Sz&S^NE>Fbh0=D_MCmX#2? z+)KnUT`osVosea@T%-`(*AimpyZlRL_O7tYQnIeOItY^=BNrUJWX_jYkR|s3*6{*E z2+k#S*-*jTAL?B1FtuV7BBnT$9M_J7<{2=HFmoLSp}>sFduCo?4mwUwn}3PwWT%0 zt-zu8WmLZ2R94{X-X}lC5H80lE(K1Fj{2pklztOf=SDe@2253E*59DO>Y9nhYA7we zEfs~qab|4jocmkFpx_u~QGbNytoT4N7Z#OeB~ELHxYJLT6k29bR}DiE6BcV_j(0cZ zxBdnORhULSm{c%h^#ahm46r@*KEt?FbpA; z4Fu%u2K1}cz;|L(cyeoY?now*zJnGESl_hMPC-hb-H4&EZ+W+t_U{V6~P9& zB7fKw!G1$m{G%%7teCT6{-;akESa-p&XPGx<}8`~=a)?SKbFkPE<}B{Byt}qnalFE zB(n~dOv_-&yj&6*E1COI(7lp*Q6daMRqEZ4G^!XwQ8IfBD1ZIcyCG=|e|!6eBu1h3 ziS68w^z6+Wl1>>E-MJx|zSH0SJpBdMtETfl=Dd&TGfO5iOXlDG0BZ=n2Uso4uA6oq zU`6X2|A>-?$3LP3H}VlBxS@|Ifnk_`fc3ccVVHY>)icySFz!6SiYDN@>G1=s45mIa zQLi6h<+_NW(tmayV67QGqIB>8tGdJ5cl-cr3cCVVnCqsV`L@X1et`8Avs9m|aV^uA z%#hvwQ#DR`#&r{R%3Wh&a2j&TJ-`ZPK@)Z?J1`3GhU+5S&*s<_T9-yy#4td1%sD7P zNGLeR+H$02LIS`Yv!zG?I4I9F3fnnm=8gj3*?2o$7Jt`H#l69nfp!X}8EB_a@>}^JU^UH z)}Nt~cS@d6duisSx%3kx%tRSoC4iyCp{GTlNJHixmhdcLs(;ioMJCF3QBjXy7AOwn zRn*IrZ=;u?mNMqmFH;gIFb*wds<2IgMPqj-g;v(RV!V8=`yvlv9}8Jmhd#!UuQ zvk;T=EOr>K5lj-|w`;s!iD+XH!z#v6g8O*AeSUu4Zt9F_x=hsdD$-n^MYfO#&Gqwk zWlh{O4i!VLpMT!B8znPzd3EoC-<$I|ZNqPNC`E*(nIaP9f!;ox+1?WT)_W{Jc}3 zp(USbXn)CP8d~z1hL(J$p(USbXvqf)@zjzJHn8M_`6a)@-e2+wjN{mnFJNTJ=kSLv z`GE$Od?^yHKD3v7tofv>W~|IF`B=R5Ms5mB$N426jG3XTaem3it~aRSKwucxSn@GU zAci3!__Z4w3=SG3>w;C1RC04fc=JlQz#6%-@n#%tu`1-$|}(>^kC0S zEr08NgOQa$i}ifhsDw$%1_MfvXQ%>j8iLA>TTH_#q~SU-#s*_?orFh&X%%T_>ye_4 z&T(vmkyG|FDuo+s@11J(apD{YZT5BQ9A{H!&v8usiRUO@B#4 zf$gWoNP0^&H_y0c7h})FKJz#zFpL9>8`FVpW{!=~o{<3?=2^($qRf3~(K8Aqri?{n z#pPi{8xug3A%WStV$5!d2`bELzVr$rFf@T3Gh@sga}cGDp_GYZVK-xBj74#BqQFFf zac1g>jG=T0<1H1_kQj+MN-@VwNPkjb@v>*~g5HFD`Sik!nhB=MEe)p|UG6Dl4y;aM zSqY*0SBW^L`~8Ti6S6G#yA*=2wS<`YOa79Xy({d#l&ov64#MQe$OQ*4ne*ipWXU~% zb-ch3f^$jTH&pQUMV;#%rdEtX#1w~;nl|S@8AUHM3j(cCl&h)+|v-L#pL;mNzZ}z^~`)2P88s<|^4xrZwM1$MI zR#z-2Yy}RzFQf8$Q(1wld!PImL%1BLxD+@wI_j6EQu<9`or7{94VbFTtiM5l)io21 z)lk~>wp0`b$C(;@mMpQfQe$T{R3vOjxXy zIo=)0Z~YAnsxXauFsWby6}1`a3Rq-5=x;G*<(WD3H?34)7H%?2K1W7bL4eRQV~Gk; zM6ttYI|npJni}~_+?XXG#|+n)AQR$$La=aBVCwj_#s362Fu*#xM1NMAi%JZTYqn)` z7>1C_27+_L+(-f5wG>7|Ax?S8oSAn(P3IXqo-r46#im-9HbYlzsGx|cO}9QRHfd5q)}iTPk*ZGF(89W??BQR{&@R9 z5~EQ2#C8rOJ$v&&(kX+YI|q{KJN@zJW1LZ^n$B~~d5$?yGH1!0C3E}%))0CRuv(a1 zH|;#Yiq?1jBT5=R{}Cm)GapfcJM|GIFbwk#upZYw408{#dWPBu#+?UP(FA-qJ$`_d z!PI9a>gNYoxqmKVsI;92SZjulC>=b&s_wA%9Y4UD!mhv-=DMk8zAZAhA7JgU7^_d! zxR&WlX2@>;sT!v|WY${|FSy81Tu*WexO?KrsyJbUR(loqt@mR%U)v z&73uJ*34NmXU&`?bC%3mGH1!0C3BWc=fHf%O6FyxWWpWg@=qUuihGBRl+4T7BT%6A zRLKN7S2Qw#&X!EgP{|Z9R5I7GlDYoJ5L_G^L0|Nt3nf3%AB^Tfm;`;ype;{*5fkQn5gC7IKhXob4dXr`ZNPO8c z<;RH)A13T_07^5J1o;IsFqBO`YXRh`d%8G=RKz6<_ymh22+S5#IiPTnOQpx@s;orM lRc{%I7T#DEi2z211%|9XYhQkt1=Pae>FVdQ&MASh2>|#dEL;Ep delta 167 zcmV;Y09gN+0k;8=7=H)`0002~ST>^o0004VQb$4nuFf3k0001RNklO4TfzSUNA6%BtfDe1t38X07<~@gehobU|{rvDj?p(zyPrm7a(5}0H~!i Vr1pptfB*mh07*qoM6N<$f&kBWKz9HD diff --git a/public/images/ui/champion_ribbon_diamond.png b/public/images/ui/champion_ribbon_diamond.png index fd0e1f7748011c9ad08a0b3dc49d5037a64b03fa..207ade56c19f79f3f80939437f9c83fdc6a17920 100644 GIT binary patch delta 138 zcmX@fIE!(DL_G^L0|Nt3nf3%AB^}@s;tHfSDpvS0FeGevP;vNOJp)6>g&#}q{5bI9 zhuWkDeV{aBNswPKgTu2MX+Vyyr;B4qMO<=1fnh>ILZ*LOLV`ZC(80_$E}n&LPFy@| m9KCpW7IJxU2{dtXFiyY7`r$O!+Yq2e22WQ%mvzie2~7YEN-R_W delta 185 zcmV;q07n0s0m%W77=H)`0002~ST>^o0004VQb$4nuFf3k0001kNklVKNf~10!4~NCG6_2Q>+- n6ImCABuE8FHAn(xDvS>RWx_l@|ER*L00000NkvXXu0mjfED1q0 diff --git a/public/images/ui/champion_ribbon_silver.png b/public/images/ui/champion_ribbon_silver.png index 92b6f4cf8c7f1ed1f0cfb8efcf1cda43e24e800a..52cde02840632c6b74bd413689669ed78a8d903c 100644 GIT binary patch delta 146 zcmX@fxQKCrL_G^L0|Nt3nf3%AB^Tfm;tHhy|NrmDz);V?P%&e{gdIEDR)&j^g^mK6ysfbHX@F-45NSG~n=)i%CTq-_JcSR+7 w?skhv%;=pWAu&VLfrVL^xp~2Y1q=++ud_xKs(bk}a09h_y85}Sb4q9e0BPkh#Q*>R delta 185 zcmV;q07n0!0m%W77=H)`0002~ST>^o0004VQb$4nuFf3k0001jNkl;8k7pWc3A=*UQ51hK&cNWw~2i{ZtG4-ov|1y})Ca>a=gU|k>yFb$KeXJGjMbH)M& z2?Ytb#DxnN7}#b^U|J5L_G^L0|Nt3nf3%AB^Tfm;`;ype;{*5fkQn5gC7IKhXob4dXr`ZNPO8c z<;RH)A13T_07^5J1o;IsFqBO`YXRh`d%8G=RKz6<_ymh22+S5#IiPTnOQpx@s;orM lRc{%I7T#DEi2z211%|9XYhQkt1=Pae>FVdQ&MASh2>|#dEL;Ep delta 167 zcmV;Y09gN+0k;8=7=H)`0002~ST>^o0004VQb$4nuFf3k0001RNklO4TfzSUNA6%BtfDe1t38X07<~@gehobU|{rvDj?p(zyPrm7a(5}0H~!i Vr1pptfB*mh07*qoM6N<$f&kBWKz9HD diff --git a/public/images/ui/legacy/champion_ribbon_diamond.png b/public/images/ui/legacy/champion_ribbon_diamond.png index fd0e1f7748011c9ad08a0b3dc49d5037a64b03fa..207ade56c19f79f3f80939437f9c83fdc6a17920 100644 GIT binary patch delta 138 zcmX@fIE!(DL_G^L0|Nt3nf3%AB^}@s;tHfSDpvS0FeGevP;vNOJp)6>g&#}q{5bI9 zhuWkDeV{aBNswPKgTu2MX+Vyyr;B4qMO<=1fnh>ILZ*LOLV`ZC(80_$E}n&LPFy@| m9KCpW7IJxU2{dtXFiyY7`r$O!+Yq2e22WQ%mvzie2~7YEN-R_W delta 185 zcmV;q07n0s0m%W77=H)`0002~ST>^o0004VQb$4nuFf3k0001kNklVKNf~10!4~NCG6_2Q>+- n6ImCABuE8FHAn(xDvS>RWx_l@|ER*L00000NkvXXu0mjfED1q0 diff --git a/public/images/ui/legacy/champion_ribbon_silver.png b/public/images/ui/legacy/champion_ribbon_silver.png index 92b6f4cf8c7f1ed1f0cfb8efcf1cda43e24e800a..52cde02840632c6b74bd413689669ed78a8d903c 100644 GIT binary patch delta 146 zcmX@fxQKCrL_G^L0|Nt3nf3%AB^Tfm;tHhy|NrmDz);V?P%&e{gdIEDR)&j^g^mK6ysfbHX@F-45NSG~n=)i%CTq-_JcSR+7 w?skhv%;=pWAu&VLfrVL^xp~2Y1q=++ud_xKs(bk}a09h_y85}Sb4q9e0BPkh#Q*>R delta 185 zcmV;q07n0!0m%W77=H)`0002~ST>^o0004VQb$4nuFf3k0001jNkl;8k7pWc3A=*UQ51hK&cNWw~2i{ZtG4-ov|1y})Ca>a=gU|k>yFb$KeXJGjMbH)M& z2?Ytb#DxnN7}#b^U| Date: Sun, 31 Aug 2025 15:25:27 +0200 Subject: [PATCH 13/39] fix position --- src/ui/battle-info/enemy-battle-info.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ui/battle-info/enemy-battle-info.ts b/src/ui/battle-info/enemy-battle-info.ts index 4b37adc74aa..0f980d6f02a 100644 --- a/src/ui/battle-info/enemy-battle-info.ts +++ b/src/ui/battle-info/enemy-battle-info.ts @@ -180,7 +180,6 @@ export class EnemyBattleInfo extends BattleInfo { this.ownedIcon, this.championRibbon, this.statusIndicator, - this.levelContainer, this.statValuesContainer, ].map(e => (e.x += 48 * (boss ? -1 : 1))); this.hpBar.x += 38 * (boss ? -1 : 1); From e0a752aa70be149e51a94b5ed6a48412417bb081 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Sun, 31 Aug 2025 15:55:50 +0200 Subject: [PATCH 14/39] [UI/UX] [Localization] Korean and Chinese Visual Fixes (#6452) --- src/ui/text.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/ui/text.ts b/src/ui/text.ts index 8aa50983874..bac53f81ba6 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -349,6 +349,15 @@ export function getTextStyleOptions( styleOptions.fontSize = defaultFontSize - 42; styleOptions.padding = { top: 4 }; break; + case "ko": + styleOptions.fontSize = defaultFontSize - 38; + styleOptions.padding = { top: 4, left: 6 }; + break; + case "zh-CN": + case "zh-TW": + styleOptions.fontSize = defaultFontSize - 42; + styleOptions.padding = { top: 5, left: 14 }; + break; default: styleOptions.fontSize = defaultFontSize - 30; styleOptions.padding = { left: 12 }; From 2a5e66d85f33edac99ab54e171280eeecd2a7f63 Mon Sep 17 00:00:00 2001 From: fabske0 <192151969+fabske0@users.noreply.github.com> Date: Sun, 31 Aug 2025 17:17:25 +0200 Subject: [PATCH 15/39] update pos --- src/ui/battle-info/enemy-battle-info.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/battle-info/enemy-battle-info.ts b/src/ui/battle-info/enemy-battle-info.ts index 0f980d6f02a..e1063be95af 100644 --- a/src/ui/battle-info/enemy-battle-info.ts +++ b/src/ui/battle-info/enemy-battle-info.ts @@ -185,6 +185,7 @@ export class EnemyBattleInfo extends BattleInfo { this.hpBar.x += 38 * (boss ? -1 : 1); this.hpBar.y += 2 * (this.boss ? -1 : 1); this.hpBar.setTexture(`overlay_hp${boss ? "_boss" : ""}`); + this.levelContainer.x += 2 * (boss ? -1 : 1); this.box.setTexture(this.getTextureName()); this.statsBox.setTexture(`${this.getTextureName()}_stats`); } From 231cfd040cfb2e34e10305c418281b068c5cafd4 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Sun, 31 Aug 2025 13:47:53 -0400 Subject: [PATCH 16/39] [Balance] TM tier changes 1.10.6 (#6461) * TM tier changes 1.10.6 --- src/data/balance/tms.ts | 64 ++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index bd7cf401ad1..f7c330e3d95 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -68875,27 +68875,27 @@ interface TmPoolTiers { export const tmPoolTiers: TmPoolTiers = { [MoveId.MEGA_PUNCH]: ModifierTier.GREAT, - [MoveId.PAY_DAY]: ModifierTier.ULTRA, + [MoveId.PAY_DAY]: ModifierTier.COMMON, [MoveId.FIRE_PUNCH]: ModifierTier.GREAT, [MoveId.ICE_PUNCH]: ModifierTier.GREAT, [MoveId.THUNDER_PUNCH]: ModifierTier.GREAT, - [MoveId.SWORDS_DANCE]: ModifierTier.COMMON, + [MoveId.SWORDS_DANCE]: ModifierTier.GREAT, [MoveId.CUT]: ModifierTier.COMMON, - [MoveId.FLY]: ModifierTier.COMMON, + [MoveId.FLY]: ModifierTier.GREAT, [MoveId.MEGA_KICK]: ModifierTier.GREAT, [MoveId.BODY_SLAM]: ModifierTier.GREAT, [MoveId.TAKE_DOWN]: ModifierTier.GREAT, [MoveId.DOUBLE_EDGE]: ModifierTier.ULTRA, - [MoveId.PIN_MISSILE]: ModifierTier.COMMON, + [MoveId.PIN_MISSILE]: ModifierTier.GREAT, [MoveId.ROAR]: ModifierTier.COMMON, [MoveId.FLAMETHROWER]: ModifierTier.ULTRA, [MoveId.HYDRO_PUMP]: ModifierTier.ULTRA, [MoveId.SURF]: ModifierTier.ULTRA, [MoveId.ICE_BEAM]: ModifierTier.ULTRA, [MoveId.BLIZZARD]: ModifierTier.ULTRA, - [MoveId.PSYBEAM]: ModifierTier.GREAT, + [MoveId.PSYBEAM]: ModifierTier.COMMON, [MoveId.HYPER_BEAM]: ModifierTier.ULTRA, - [MoveId.LOW_KICK]: ModifierTier.COMMON, + [MoveId.LOW_KICK]: ModifierTier.GREAT, [MoveId.COUNTER]: ModifierTier.COMMON, [MoveId.STRENGTH]: ModifierTier.GREAT, [MoveId.SOLAR_BEAM]: ModifierTier.ULTRA, @@ -68907,9 +68907,9 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.DIG]: ModifierTier.GREAT, [MoveId.TOXIC]: ModifierTier.GREAT, [MoveId.PSYCHIC]: ModifierTier.ULTRA, - [MoveId.AGILITY]: ModifierTier.COMMON, + [MoveId.AGILITY]: ModifierTier.GREAT, [MoveId.NIGHT_SHADE]: ModifierTier.COMMON, - [MoveId.SCREECH]: ModifierTier.COMMON, + [MoveId.SCREECH]: ModifierTier.GREAT, [MoveId.DOUBLE_TEAM]: ModifierTier.COMMON, [MoveId.CONFUSE_RAY]: ModifierTier.COMMON, [MoveId.LIGHT_SCREEN]: ModifierTier.COMMON, @@ -68921,7 +68921,7 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.FIRE_BLAST]: ModifierTier.ULTRA, [MoveId.WATERFALL]: ModifierTier.GREAT, [MoveId.SWIFT]: ModifierTier.COMMON, - [MoveId.AMNESIA]: ModifierTier.COMMON, + [MoveId.AMNESIA]: ModifierTier.GREAT, [MoveId.DREAM_EATER]: ModifierTier.GREAT, [MoveId.LEECH_LIFE]: ModifierTier.ULTRA, [MoveId.FLASH]: ModifierTier.COMMON, @@ -68933,11 +68933,11 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.SUBSTITUTE]: ModifierTier.COMMON, [MoveId.THIEF]: ModifierTier.GREAT, [MoveId.SNORE]: ModifierTier.COMMON, - [MoveId.CURSE]: ModifierTier.COMMON, + [MoveId.CURSE]: ModifierTier.GREAT, [MoveId.REVERSAL]: ModifierTier.COMMON, [MoveId.SPITE]: ModifierTier.COMMON, [MoveId.PROTECT]: ModifierTier.COMMON, - [MoveId.SCARY_FACE]: ModifierTier.COMMON, + [MoveId.SCARY_FACE]: ModifierTier.GREAT, [MoveId.SLUDGE_BOMB]: ModifierTier.GREAT, [MoveId.MUD_SLAP]: ModifierTier.COMMON, [MoveId.SPIKES]: ModifierTier.COMMON, @@ -68979,8 +68979,8 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.TORMENT]: ModifierTier.COMMON, [MoveId.WILL_O_WISP]: ModifierTier.COMMON, [MoveId.FACADE]: ModifierTier.GREAT, - [MoveId.FOCUS_PUNCH]: ModifierTier.COMMON, - [MoveId.NATURE_POWER]: ModifierTier.COMMON, + [MoveId.FOCUS_PUNCH]: ModifierTier.GREAT, + [MoveId.NATURE_POWER]: ModifierTier.GREAT, [MoveId.CHARGE]: ModifierTier.COMMON, [MoveId.TAUNT]: ModifierTier.COMMON, [MoveId.HELPING_HAND]: ModifierTier.COMMON, @@ -68993,7 +68993,7 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.ENDEAVOR]: ModifierTier.COMMON, [MoveId.SKILL_SWAP]: ModifierTier.COMMON, [MoveId.IMPRISON]: ModifierTier.COMMON, - [MoveId.SECRET_POWER]: ModifierTier.COMMON, + [MoveId.SECRET_POWER]: ModifierTier.GREAT, [MoveId.DIVE]: ModifierTier.GREAT, [MoveId.FEATHER_DANCE]: ModifierTier.COMMON, [MoveId.BLAZE_KICK]: ModifierTier.GREAT, @@ -69001,12 +69001,12 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.BLAST_BURN]: ModifierTier.ULTRA, [MoveId.HYDRO_CANNON]: ModifierTier.ULTRA, [MoveId.WEATHER_BALL]: ModifierTier.COMMON, - [MoveId.FAKE_TEARS]: ModifierTier.COMMON, + [MoveId.FAKE_TEARS]: ModifierTier.GREAT, [MoveId.AIR_CUTTER]: ModifierTier.GREAT, [MoveId.OVERHEAT]: ModifierTier.ULTRA, [MoveId.ROCK_TOMB]: ModifierTier.GREAT, - [MoveId.METAL_SOUND]: ModifierTier.COMMON, - [MoveId.COSMIC_POWER]: ModifierTier.COMMON, + [MoveId.METAL_SOUND]: ModifierTier.GREAT, + [MoveId.COSMIC_POWER]: ModifierTier.GREAT, [MoveId.SIGNAL_BEAM]: ModifierTier.GREAT, [MoveId.SAND_TOMB]: ModifierTier.COMMON, [MoveId.MUDDY_WATER]: ModifierTier.GREAT, @@ -69016,10 +69016,10 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.IRON_DEFENSE]: ModifierTier.GREAT, [MoveId.DRAGON_CLAW]: ModifierTier.ULTRA, [MoveId.FRENZY_PLANT]: ModifierTier.ULTRA, - [MoveId.BULK_UP]: ModifierTier.COMMON, + [MoveId.BULK_UP]: ModifierTier.GREAT, [MoveId.BOUNCE]: ModifierTier.GREAT, [MoveId.MUD_SHOT]: ModifierTier.GREAT, - [MoveId.POISON_TAIL]: ModifierTier.GREAT, + [MoveId.POISON_TAIL]: ModifierTier.COMMON, [MoveId.COVET]: ModifierTier.GREAT, [MoveId.MAGICAL_LEAF]: ModifierTier.GREAT, [MoveId.CALM_MIND]: ModifierTier.GREAT, @@ -69047,7 +69047,7 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.TOXIC_SPIKES]: ModifierTier.GREAT, [MoveId.FLARE_BLITZ]: ModifierTier.ULTRA, [MoveId.AURA_SPHERE]: ModifierTier.GREAT, - [MoveId.ROCK_POLISH]: ModifierTier.COMMON, + [MoveId.ROCK_POLISH]: ModifierTier.GREAT, [MoveId.POISON_JAB]: ModifierTier.GREAT, [MoveId.DARK_PULSE]: ModifierTier.GREAT, [MoveId.AQUA_TAIL]: ModifierTier.GREAT, @@ -69063,8 +69063,8 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.ENERGY_BALL]: ModifierTier.GREAT, [MoveId.BRAVE_BIRD]: ModifierTier.ULTRA, [MoveId.EARTH_POWER]: ModifierTier.ULTRA, - [MoveId.GIGA_IMPACT]: ModifierTier.GREAT, - [MoveId.NASTY_PLOT]: ModifierTier.COMMON, + [MoveId.GIGA_IMPACT]: ModifierTier.ULTRA, + [MoveId.NASTY_PLOT]: ModifierTier.GREAT, [MoveId.AVALANCHE]: ModifierTier.GREAT, [MoveId.SHADOW_CLAW]: ModifierTier.GREAT, [MoveId.THUNDER_FANG]: ModifierTier.GREAT, @@ -69084,7 +69084,7 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.IRON_HEAD]: ModifierTier.GREAT, [MoveId.STONE_EDGE]: ModifierTier.ULTRA, [MoveId.STEALTH_ROCK]: ModifierTier.COMMON, - [MoveId.GRASS_KNOT]: ModifierTier.ULTRA, + [MoveId.GRASS_KNOT]: ModifierTier.GREAT, [MoveId.BUG_BITE]: ModifierTier.GREAT, [MoveId.CHARGE_BEAM]: ModifierTier.GREAT, [MoveId.HONE_CLAWS]: ModifierTier.COMMON, @@ -69102,7 +69102,7 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.FOUL_PLAY]: ModifierTier.ULTRA, [MoveId.ROUND]: ModifierTier.COMMON, [MoveId.ECHOED_VOICE]: ModifierTier.COMMON, - [MoveId.STORED_POWER]: ModifierTier.COMMON, + [MoveId.STORED_POWER]: ModifierTier.GREAT, [MoveId.ALLY_SWITCH]: ModifierTier.COMMON, [MoveId.SCALD]: ModifierTier.GREAT, [MoveId.HEX]: ModifierTier.GREAT, @@ -69130,7 +69130,7 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.SNARL]: ModifierTier.COMMON, [MoveId.PHANTOM_FORCE]: ModifierTier.ULTRA, [MoveId.PETAL_BLIZZARD]: ModifierTier.GREAT, - [MoveId.DISARMING_VOICE]: ModifierTier.GREAT, + [MoveId.DISARMING_VOICE]: ModifierTier.COMMON, [MoveId.DRAINING_KISS]: ModifierTier.GREAT, [MoveId.GRASSY_TERRAIN]: ModifierTier.COMMON, [MoveId.MISTY_TERRAIN]: ModifierTier.COMMON, @@ -69161,12 +69161,12 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.BREAKING_SWIPE]: ModifierTier.GREAT, [MoveId.STEEL_BEAM]: ModifierTier.ULTRA, [MoveId.EXPANDING_FORCE]: ModifierTier.GREAT, - [MoveId.STEEL_ROLLER]: ModifierTier.COMMON, + [MoveId.STEEL_ROLLER]: ModifierTier.GREAT, [MoveId.SCALE_SHOT]: ModifierTier.ULTRA, [MoveId.METEOR_BEAM]: ModifierTier.GREAT, - [MoveId.MISTY_EXPLOSION]: ModifierTier.COMMON, + [MoveId.MISTY_EXPLOSION]: ModifierTier.GREAT, [MoveId.GRASSY_GLIDE]: ModifierTier.COMMON, - [MoveId.RISING_VOLTAGE]: ModifierTier.COMMON, + [MoveId.RISING_VOLTAGE]: ModifierTier.GREAT, [MoveId.TERRAIN_PULSE]: ModifierTier.COMMON, [MoveId.SKITTER_SMACK]: ModifierTier.GREAT, [MoveId.BURNING_JEALOUSY]: ModifierTier.GREAT, @@ -69175,20 +69175,20 @@ export const tmPoolTiers: TmPoolTiers = { [MoveId.CORROSIVE_GAS]: ModifierTier.COMMON, [MoveId.COACHING]: ModifierTier.COMMON, [MoveId.FLIP_TURN]: ModifierTier.COMMON, - [MoveId.TRIPLE_AXEL]: ModifierTier.COMMON, - [MoveId.DUAL_WINGBEAT]: ModifierTier.COMMON, + [MoveId.TRIPLE_AXEL]: ModifierTier.ULTRA, + [MoveId.DUAL_WINGBEAT]: ModifierTier.GREAT, [MoveId.SCORCHING_SANDS]: ModifierTier.GREAT, [MoveId.TERA_BLAST]: ModifierTier.GREAT, [MoveId.ICE_SPINNER]: ModifierTier.GREAT, [MoveId.SNOWSCAPE]: ModifierTier.COMMON, [MoveId.POUNCE]: ModifierTier.COMMON, - [MoveId.TRAILBLAZE]: ModifierTier.COMMON, + [MoveId.TRAILBLAZE]: ModifierTier.GREAT, [MoveId.CHILLING_WATER]: ModifierTier.COMMON, [MoveId.HARD_PRESS]: ModifierTier.GREAT, [MoveId.DRAGON_CHEER]: ModifierTier.COMMON, [MoveId.ALLURING_VOICE]: ModifierTier.GREAT, [MoveId.TEMPER_FLARE]: ModifierTier.GREAT, - [MoveId.SUPERCELL_SLAM]: ModifierTier.GREAT, + [MoveId.SUPERCELL_SLAM]: ModifierTier.ULTRA, [MoveId.PSYCHIC_NOISE]: ModifierTier.GREAT, [MoveId.UPPER_HAND]: ModifierTier.COMMON, }; From 17c28c40248cd9ffa0611459d6d2f27b36da7dc1 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Mon, 1 Sep 2025 08:57:46 -0400 Subject: [PATCH 17/39] [Bug] Fix monotype challenge using unlocalized type names (#6438) --- src/data/challenge.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 01e6fa78ffc..cea8661e78c 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -27,7 +27,7 @@ import type { DexEntry } from "#types/dex-data"; import { type BooleanHolder, isBetween, type NumberHolder, randSeedItem } from "#utils/common"; import { deepCopy } from "#utils/data"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#utils/pokemon-utils"; -import { toCamelCase, toSnakeCase } from "#utils/strings"; +import { toCamelCase } from "#utils/strings"; import i18next from "i18next"; /** A constant for the default max cost of the starting party before a run */ @@ -764,7 +764,7 @@ export class SingleTypeChallenge extends Challenge { } getValue(overrideValue: number = this.value): string { - return toSnakeCase(PokemonType[overrideValue - 1]); + return i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[overrideValue - 1])}`); } getDescription(overrideValue: number = this.value): string { From 446908ae1300ddb101d492c44b889a40715a78dc Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 1 Sep 2025 07:02:40 -0700 Subject: [PATCH 18/39] [Misc] Add " (Beta)" to site title and version display on beta (#6418) --- src/main.ts | 4 ++++ src/ui/title-ui-handler.ts | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 7e4943bdca5..80f2ca3ed8b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,6 +10,10 @@ import InputTextPlugin from "phaser3-rex-plugins/plugins/inputtext-plugin"; import TransitionImagePackPlugin from "phaser3-rex-plugins/templates/transitionimagepack/transitionimagepack-plugin"; import UIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin"; +if (import.meta.env.DEV) { + document.title += " (Beta)"; +} + // Catch global errors and display them in an alert so users can report the issue. window.onerror = (_message, _source, _lineno, _colno, error) => { console.error(error); diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index 5ae195231e5..ef814167631 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -141,7 +141,8 @@ export class TitleUiHandler extends OptionSelectUiHandler { }), ); - this.appVersionText.setText("v" + version); + const betaText = import.meta.env.DEV ? " (Beta)" : ""; + this.appVersionText.setText("v" + version + betaText); const ui = this.getUi(); From bd7de61a5620afdf9a0b6c13e77400dd51c7a411 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Tue, 2 Sep 2025 06:13:15 +1000 Subject: [PATCH 19/39] Improve error handling when playing unloaded sounds --- src/battle-scene.ts | 15 ++++++---- src/data/battle-anims.ts | 12 ++++++-- src/data/pokemon-species.ts | 4 +-- src/field/pokemon.ts | 54 ++++++++++++++++++++-------------- src/phases/egg-hatch-phase.ts | 2 +- src/phases/evolution-phase.ts | 10 +++++-- src/phases/party-heal-phase.ts | 16 +++++----- 7 files changed, 70 insertions(+), 43 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index be02962867c..9ac6e385220 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -2318,7 +2318,7 @@ export class BattleScene extends SceneBase { }); } - playSound(sound: string | AnySound, config?: object): AnySound { + playSound(sound: string | AnySound, config?: object): AnySound | null { const key = typeof sound === "string" ? sound : sound.key; config = config ?? {}; try { @@ -2354,16 +2354,19 @@ export class BattleScene extends SceneBase { this.sound.play(key, config); return this.sound.get(key) as AnySound; } catch { - console.log(`${key} not found`); - return sound as AnySound; + console.warn(`${key} not found`); + return null; } } - playSoundWithoutBgm(soundName: string, pauseDuration?: number): AnySound { + playSoundWithoutBgm(soundName: string, pauseDuration?: number): AnySound | null { this.bgmCache.add(soundName); const resumeBgm = this.pauseBgm(); this.playSound(soundName); - const sound = this.sound.get(soundName) as AnySound; + const sound = this.sound.get(soundName); + if (!sound) { + return sound; + } if (this.bgmResumeTimer) { this.bgmResumeTimer.destroy(); } @@ -2373,7 +2376,7 @@ export class BattleScene extends SceneBase { this.bgmResumeTimer = null; }); } - return sound; + return sound as AnySound; } /** The loop point of any given battle, mystery encounter, or title track, read as seconds and milliseconds. */ diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index aa4951f3263..5ff4472d148 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -291,9 +291,17 @@ class AnimTimedSoundEvent extends AnimTimedEvent { } catch (err) { console.error(err); } - return Math.ceil((globalScene.sound.get(`battle_anims/${this.resourceName}`).totalDuration * 1000) / 33.33); + const sound = globalScene.sound.get(`battle_anims/${this.resourceName}`); + if (!sound) { + return 0; + } + return Math.ceil((sound.totalDuration * 1000) / 33.33); } - return Math.ceil((battleAnim.user!.cry(soundConfig).totalDuration * 1000) / 33.33); // TODO: is the bang behind user correct? + const cry = battleAnim.user!.cry(soundConfig); // TODO: is the bang behind user correct? + if (!cry) { + return 0; + } + return Math.ceil((cry.totalDuration * 1000) / 33.33); } getEventType(): string { diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index fd8551f2289..d5049569e61 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -593,14 +593,14 @@ export abstract class PokemonSpeciesForm { }); } - cry(soundConfig?: Phaser.Types.Sound.SoundConfig, ignorePlay?: boolean): AnySound { + cry(soundConfig?: Phaser.Types.Sound.SoundConfig, ignorePlay?: boolean): AnySound | null { const cryKey = this.getCryKey(this.formIndex); let cry: AnySound | null = globalScene.sound.get(cryKey) as AnySound; if (cry?.pendingRemove) { cry = null; } cry = globalScene.playSound(cry ?? cryKey, soundConfig); - if (ignorePlay) { + if (cry && ignorePlay) { cry.stop(); } return cry; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index db973ef2d78..207ec0feecd 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4547,28 +4547,36 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { }); } - cry(soundConfig?: Phaser.Types.Sound.SoundConfig, sceneOverride?: BattleScene): AnySound { + cry(soundConfig?: Phaser.Types.Sound.SoundConfig, sceneOverride?: BattleScene): AnySound | null { const scene = sceneOverride ?? globalScene; // TODO: is `sceneOverride` needed? const cry = this.getSpeciesForm(undefined, true).cry(soundConfig); + if (!cry) { + return cry; + } let duration = cry.totalDuration * 1000; if (this.fusionSpecies && this.getSpeciesForm(undefined, true) !== this.getFusionSpeciesForm(undefined, true)) { let fusionCry = this.getFusionSpeciesForm(undefined, true).cry(soundConfig, true); + if (!fusionCry) { + return cry; + } duration = Math.min(duration, fusionCry.totalDuration * 1000); fusionCry.destroy(); scene.time.delayedCall(fixedInt(Math.ceil(duration * 0.4)), () => { try { SoundFade.fadeOut(scene, cry, fixedInt(Math.ceil(duration * 0.2))); fusionCry = this.getFusionSpeciesForm(undefined, true).cry({ - seek: Math.max(fusionCry.totalDuration * 0.4, 0), + seek: Math.max(fusionCry!.totalDuration * 0.4, 0), ...soundConfig, }); - SoundFade.fadeIn( - scene, - fusionCry, - fixedInt(Math.ceil(duration * 0.2)), - scene.masterVolume * scene.fieldVolume, - 0, - ); + if (fusionCry) { + SoundFade.fadeIn( + scene, + fusionCry, + fixedInt(Math.ceil(duration * 0.2)), + scene.masterVolume * scene.fieldVolume, + 0, + ); + } } catch (err) { console.error(err); } @@ -4596,14 +4604,14 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { crySoundConfig.rate = 0.7; } } - const cry = globalScene.playSound(key, crySoundConfig) as AnySound; + const cry = globalScene.playSound(key, crySoundConfig); if (!cry || globalScene.fieldVolume === 0) { callback(); return; } const sprite = this.getSprite(); const tintSprite = this.getTintSprite(); - const delay = Math.max(globalScene.sound.get(key).totalDuration * 50, 25); + const delay = Math.max(cry.totalDuration * 50, 25); let frameProgress = 0; let frameThreshold: number; @@ -4656,20 +4664,20 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { const key = this.species.getCryKey(this.formIndex); let i = 0; let rate = 0.85; - const cry = globalScene.playSound(key, { rate: rate }) as AnySound; + const cry = globalScene.playSound(key, { rate: rate }); const sprite = this.getSprite(); const tintSprite = this.getTintSprite(); - let duration = cry.totalDuration * 1000; const fusionCryKey = this.fusionSpecies!.getCryKey(this.fusionFormIndex); let fusionCry = globalScene.playSound(fusionCryKey, { rate: rate, - }) as AnySound; + }); if (!cry || !fusionCry || globalScene.fieldVolume === 0) { callback(); return; } fusionCry.stop(); + let duration = cry.totalDuration * 1000; duration = Math.min(duration, fusionCry.totalDuration * 1000); fusionCry.destroy(); const delay = Math.max(duration * 0.05, 25); @@ -4712,16 +4720,18 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { if (i === transitionIndex && fusionCryKey) { SoundFade.fadeOut(globalScene, cry, fixedInt(Math.ceil((duration / rate) * 0.2))); fusionCry = globalScene.playSound(fusionCryKey, { - seek: Math.max(fusionCry.totalDuration * 0.4, 0), + seek: Math.max(fusionCry!.totalDuration * 0.4, 0), rate: rate, }); - SoundFade.fadeIn( - globalScene, - fusionCry, - fixedInt(Math.ceil((duration / rate) * 0.2)), - globalScene.masterVolume * globalScene.fieldVolume, - 0, - ); + if (fusionCry) { + SoundFade.fadeIn( + globalScene, + fusionCry, + fixedInt(Math.ceil((duration / rate) * 0.2)), + globalScene.masterVolume * globalScene.fieldVolume, + 0, + ); + } } rate *= 0.99; if (cry && !cry.pendingRemove) { diff --git a/src/phases/egg-hatch-phase.ts b/src/phases/egg-hatch-phase.ts index e9d28e0fe2a..547ca778c6b 100644 --- a/src/phases/egg-hatch-phase.ts +++ b/src/phases/egg-hatch-phase.ts @@ -64,7 +64,7 @@ export class EggHatchPhase extends Phase { private canSkip: boolean; private skipped: boolean; /** The sound effect being played when the egg is hatched */ - private evolutionBgm: AnySound; + private evolutionBgm: AnySound | null; private eggLapsePhase: EggLapsePhase; constructor(hatchScene: EggLapsePhase, egg: Egg, eggsToHatchCount: number) { diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index 542a2100452..6095dfafa21 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -28,7 +28,7 @@ export class EvolutionPhase extends Phase { private evolution: SpeciesFormEvolution | null; private fusionSpeciesEvolved: boolean; // Whether the evolution is of the fused species - private evolutionBgm: AnySound; + private evolutionBgm: AnySound | null; private evolutionHandler: EvolutionSceneHandler; /** Container for all assets used by the scene. When the scene is cleared, the children within this are destroyed. */ @@ -298,7 +298,9 @@ export class EvolutionPhase extends Phase { this.evolutionBg.setVisible(false); }, }); - SoundFade.fadeOut(globalScene, this.evolutionBgm, 100); + if (this.evolutionBgm) { + SoundFade.fadeOut(globalScene, this.evolutionBgm, 100); + } } /** @@ -378,7 +380,9 @@ export class EvolutionPhase extends Phase { * Fadeout evolution music, play the cry, show the evolution completed text, and end the phase */ private onEvolutionComplete(evolvedPokemon: Pokemon) { - SoundFade.fadeOut(globalScene, this.evolutionBgm, 100); + if (this.evolutionBgm) { + SoundFade.fadeOut(globalScene, this.evolutionBgm, 100); + } globalScene.time.delayedCall(250, () => { this.pokemon.cry(); globalScene.time.delayedCall(1250, () => { diff --git a/src/phases/party-heal-phase.ts b/src/phases/party-heal-phase.ts index 1030d5eb9d9..154e95bc970 100644 --- a/src/phases/party-heal-phase.ts +++ b/src/phases/party-heal-phase.ts @@ -38,13 +38,15 @@ export class PartyHealPhase extends BattlePhase { pokemon.updateInfo(true); } const healSong = globalScene.playSoundWithoutBgm("heal"); - globalScene.time.delayedCall(fixedInt(healSong.totalDuration * 1000), () => { - healSong.destroy(); - if (this.resumeBgm && bgmPlaying) { - globalScene.playBgm(); - } - globalScene.ui.fadeIn(500).then(() => this.end()); - }); + if (healSong) { + globalScene.time.delayedCall(fixedInt(healSong.totalDuration * 1000), () => { + healSong.destroy(); + if (this.resumeBgm && bgmPlaying) { + globalScene.playBgm(); + } + globalScene.ui.fadeIn(500).then(() => this.end()); + }); + } }); globalScene.arena.playerTerasUsed = 0; } From eb8c0c0243490827dd6a339bfad7294d4b7164ef Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Tue, 2 Sep 2025 06:15:35 +1000 Subject: [PATCH 20/39] Add comment explaining bang --- src/field/pokemon.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 207ec0feecd..3f5dbc2e320 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4565,6 +4565,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { try { SoundFade.fadeOut(scene, cry, fixedInt(Math.ceil(duration * 0.2))); fusionCry = this.getFusionSpeciesForm(undefined, true).cry({ + // Typescript's type checker doesn't handle using and assigning to the same variable in one line correctly. seek: Math.max(fusionCry!.totalDuration * 0.4, 0), ...soundConfig, }); From bc0e2662fa95d2e9457979207ffdaa17062241af Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Tue, 2 Sep 2025 06:37:25 +1000 Subject: [PATCH 21/39] Clean up bangs --- src/field/pokemon.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 3f5dbc2e320..aac2ed55a72 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4555,7 +4555,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { } let duration = cry.totalDuration * 1000; if (this.fusionSpecies && this.getSpeciesForm(undefined, true) !== this.getFusionSpeciesForm(undefined, true)) { - let fusionCry = this.getFusionSpeciesForm(undefined, true).cry(soundConfig, true); + const fusionCry = this.getFusionSpeciesForm(undefined, true).cry(soundConfig, true); if (!fusionCry) { return cry; } @@ -4564,15 +4564,14 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { scene.time.delayedCall(fixedInt(Math.ceil(duration * 0.4)), () => { try { SoundFade.fadeOut(scene, cry, fixedInt(Math.ceil(duration * 0.2))); - fusionCry = this.getFusionSpeciesForm(undefined, true).cry({ - // Typescript's type checker doesn't handle using and assigning to the same variable in one line correctly. - seek: Math.max(fusionCry!.totalDuration * 0.4, 0), + const fusionCryInner = this.getFusionSpeciesForm(undefined, true).cry({ + seek: Math.max(fusionCry.totalDuration * 0.4, 0), ...soundConfig, }); - if (fusionCry) { + if (fusionCryInner) { SoundFade.fadeIn( scene, - fusionCry, + fusionCryInner, fixedInt(Math.ceil(duration * 0.2)), scene.masterVolume * scene.fieldVolume, 0, @@ -4721,6 +4720,8 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { if (i === transitionIndex && fusionCryKey) { SoundFade.fadeOut(globalScene, cry, fixedInt(Math.ceil((duration / rate) * 0.2))); fusionCry = globalScene.playSound(fusionCryKey, { + // TODO: This bang is correct as this callback can only be called once, but + // this whole block with conditionally reassigning fusionCry needs a second lock. seek: Math.max(fusionCry!.totalDuration * 0.4, 0), rate: rate, }); From 34430b4057e0e86cf140c5f2e950324da6ceaca3 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Tue, 2 Sep 2025 05:25:41 +0200 Subject: [PATCH 22/39] [UI/UX] [Localization] Summary UI translation (#6433) * Summary UI Transaltion * Summary UI Translation * Summary UI Translation * Summary UI Translation * Summary UI Translation * Summary UI Translation * Summary UI Translation * Summary UI Translation * Summary UI Translation * Summary UI Translation * Summary UI Translation * Remove unnecessary loading of en images when lang is not en Consolidate duplicate code --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Co-authored-by: damocleas --- .../images/ui/legacy/pokedex_summary_bg.png | Bin 344 -> 351 bytes public/images/ui/legacy/starter_select_bg.png | Bin 350 -> 337 bytes public/images/ui/legacy/summary_bg.png | Bin 476 -> 444 bytes public/images/ui/legacy/summary_moves.png | Bin 549 -> 377 bytes .../images/ui/legacy/summary_moves_effect.png | Bin 289 -> 217 bytes public/images/ui/legacy/summary_profile.png | Bin 528 -> 284 bytes .../ui/legacy/summary_profile_ability.png | Bin 172 -> 0 bytes .../ui/legacy/summary_profile_passive.png | Bin 190 -> 0 bytes public/images/ui/legacy/summary_stats.png | Bin 636 -> 430 bytes .../ca/summary/summary_dexnb_label_ca.png | Bin 0 -> 1618 bytes .../summary_dexnb_label_overlay_shiny_ca.png | Bin 0 -> 1753 bytes .../summary_moves_descriptions_title_ca.png | Bin 0 -> 243 bytes .../summary/summary_moves_effect_title_ca.png | Bin 0 -> 191 bytes .../summary/summary_moves_moves_title_ca.png | Bin 0 -> 221 bytes .../summary/summary_moves_overlay_pp_ca.png} | Bin .../ca/summary/summary_profile_ability_ca.png | Bin 0 -> 198 bytes .../summary/summary_profile_memo_title_ca.png | Bin 0 -> 235 bytes .../ca/summary/summary_profile_passive_ca.png | Bin 0 -> 194 bytes .../summary_profile_profile_title_ca.png | Bin 0 -> 180 bytes .../ca/summary/summary_stats_exp_title_ca.png | Bin 0 -> 255 bytes .../summary/summary_stats_expbar_title_ca.png | Bin 0 -> 1600 bytes .../summary/summary_stats_item_title_ca.png | Bin 0 -> 214 bytes .../summary/summary_stats_stats_title_ca.png | Bin 0 -> 277 bytes .../ca/summary/summary_tabs_1_ca.png} | Bin .../ca/summary/summary_tabs_2_ca.png} | Bin .../ca/summary/summary_tabs_3_ca.png} | Bin .../da/summary/summary_dexnb_label_da.png | Bin 0 -> 135 bytes .../summary_dexnb_label_overlay_shiny_da.png | Bin 0 -> 206 bytes .../summary_moves_descriptions_title_da.png | Bin 0 -> 247 bytes .../summary/summary_moves_effect_title_da.png | Bin 0 -> 216 bytes .../summary/summary_moves_moves_title_da.png | Bin 0 -> 268 bytes .../summary/summary_moves_overlay_pp_da.png | Bin 0 -> 132 bytes .../da/summary/summary_profile_ability_da.png | Bin 0 -> 160 bytes .../summary/summary_profile_memo_title_da.png | Bin 0 -> 229 bytes .../da/summary/summary_profile_passive_da.png | Bin 0 -> 185 bytes .../summary_profile_profile_title_da.png | Bin 0 -> 188 bytes .../da/summary/summary_stats_exp_title_da.png | Bin 0 -> 218 bytes .../summary/summary_stats_expbar_title_da.png | Bin 0 -> 137 bytes .../summary/summary_stats_item_title_da.png | Bin 0 -> 232 bytes .../summary/summary_stats_stats_title_da.png | Bin 0 -> 221 bytes .../da/summary/summary_tabs_1_da.png | Bin 0 -> 200 bytes .../da/summary/summary_tabs_2_da.png | Bin 0 -> 204 bytes .../da/summary/summary_tabs_3_da.png | Bin 0 -> 168 bytes .../de/summary/summary_dexnb_label_de.png | Bin 0 -> 135 bytes .../summary_dexnb_label_overlay_shiny_de.png | Bin 0 -> 206 bytes .../summary_moves_descriptions_title_de.png | Bin 0 -> 255 bytes .../summary/summary_moves_effect_title_de.png | Bin 0 -> 207 bytes .../summary/summary_moves_moves_title_de.png | Bin 0 -> 210 bytes .../summary/summary_moves_overlay_pp_de.png | Bin 0 -> 130 bytes .../de/summary/summary_profile_ability_de.png | Bin 0 -> 237 bytes .../summary/summary_profile_memo_title_de.png | Bin 0 -> 234 bytes .../de/summary/summary_profile_passive_de.png | Bin 0 -> 185 bytes .../summary_profile_profile_title_de.png | Bin 0 -> 188 bytes .../de/summary/summary_stats_exp_title_de.png | Bin 0 -> 219 bytes .../summary/summary_stats_expbar_title_de.png | Bin 0 -> 137 bytes .../summary/summary_stats_item_title_de.png | Bin 0 -> 183 bytes .../summary/summary_stats_stats_title_de.png | Bin 0 -> 184 bytes .../de/summary/summary_tabs_1_de.png | Bin 0 -> 200 bytes .../de/summary/summary_tabs_2_de.png | Bin 0 -> 204 bytes .../de/summary/summary_tabs_3_de.png | Bin 0 -> 168 bytes .../en/summary/summary_dexnb_label.png | Bin 0 -> 1612 bytes .../summary_dexnb_label_overlay_shiny.png} | Bin .../summary_moves_descriptions_title.png | Bin 0 -> 2173 bytes .../en/summary/summary_moves_effect_title.png | Bin 0 -> 1870 bytes .../en/summary/summary_moves_moves_title.png | Bin 0 -> 2035 bytes .../en/summary/summary_moves_overlay_pp.png | Bin 0 -> 128 bytes .../en/summary/summary_profile_ability.png | Bin 0 -> 1675 bytes .../en/summary/summary_profile_memo_title.png | Bin 0 -> 1965 bytes .../en/summary/summary_profile_passive.png | Bin 0 -> 1503 bytes .../summary/summary_profile_profile_title.png | Bin 0 -> 2050 bytes .../en/summary/summary_stats_exp_title.png | Bin 0 -> 224 bytes .../en/summary/summary_stats_expbar_title.png | Bin 0 -> 1600 bytes .../en/summary/summary_stats_item_title.png | Bin 0 -> 1892 bytes .../en/summary/summary_stats_stats_title.png | Bin 0 -> 1869 bytes .../text_images/en/summary/summary_tabs_1.png | Bin 0 -> 200 bytes .../text_images/en/summary/summary_tabs_2.png | Bin 0 -> 204 bytes .../text_images/en/summary/summary_tabs_3.png | Bin 0 -> 168 bytes .../summary/summary_dexnb_label_es-ES.png | Bin 0 -> 1618 bytes ...ummary_dexnb_label_overlay_shiny_es-ES.png | Bin 0 -> 1753 bytes ...summary_moves_descriptions_title_es-ES.png | Bin 0 -> 2193 bytes .../summary_moves_effect_title_es-ES.png | Bin 0 -> 2033 bytes .../summary_moves_moves_title_es-ES.png | Bin 0 -> 2231 bytes .../summary_moves_overlay_pp_es-ES.png | Bin 0 -> 128 bytes .../summary/summary_profile_ability_es-ES.png | Bin 0 -> 2059 bytes .../summary_profile_memo_title_es-ES.png | Bin 0 -> 1976 bytes .../summary/summary_profile_passive_es-ES.png | Bin 0 -> 1834 bytes .../summary_profile_profile_title_es-ES.png | Bin 0 -> 2030 bytes .../summary/summary_stats_exp_title_es-ES.png | Bin 0 -> 241 bytes .../summary_stats_expbar_title_es-ES.png | Bin 0 -> 1600 bytes .../summary_stats_item_title_es-ES.png | Bin 0 -> 2172 bytes .../summary_stats_stats_title_es-ES.png | Bin 0 -> 2532 bytes .../es-ES/summary/summary_tabs_1_es-ES.png | Bin 0 -> 200 bytes .../es-ES/summary/summary_tabs_2_es-ES.png | Bin 0 -> 204 bytes .../es-ES/summary/summary_tabs_3_es-ES.png | Bin 0 -> 168 bytes .../summary/summary_dexnb_label_es-MX.png | Bin 0 -> 1618 bytes ...ummary_dexnb_label_overlay_shiny_es-MX.png | Bin 0 -> 1753 bytes ...summary_moves_descriptions_title_es-MX.png | Bin 0 -> 2193 bytes .../summary_moves_effect_title_es-MX.png | Bin 0 -> 2033 bytes .../summary_moves_moves_title_es-MX.png | Bin 0 -> 2231 bytes .../summary_moves_overlay_pp_es-MX.png | Bin 0 -> 128 bytes .../summary/summary_profile_ability_es-MX.png | Bin 0 -> 2059 bytes .../summary_profile_memo_title_es-MX.png | Bin 0 -> 1976 bytes .../summary/summary_profile_passive_es-MX.png | Bin 0 -> 1834 bytes .../summary_profile_profile_title_es-MX.png | Bin 0 -> 2030 bytes .../summary/summary_stats_exp_title_es-MX.png | Bin 0 -> 241 bytes .../summary_stats_expbar_title_es-MX.png | Bin 0 -> 1600 bytes .../summary_stats_item_title_es-MX.png | Bin 0 -> 2172 bytes .../summary_stats_stats_title_es-MX.png | Bin 0 -> 2532 bytes .../es-MX/summary/summary_tabs_1_es-MX.png | Bin 0 -> 200 bytes .../es-MX/summary/summary_tabs_2_es-MX.png | Bin 0 -> 204 bytes .../es-MX/summary/summary_tabs_3_es-MX.png | Bin 0 -> 168 bytes .../fr/summary/summary_dexnb_label_fr.png | Bin 0 -> 131 bytes .../summary_dexnb_label_overlay_shiny_fr.png | Bin 0 -> 202 bytes .../summary_moves_descriptions_title_fr.png | Bin 0 -> 235 bytes .../summary/summary_moves_effect_title_fr.png | Bin 0 -> 177 bytes .../summary/summary_moves_moves_title_fr.png | Bin 0 -> 208 bytes .../summary/summary_moves_overlay_pp_fr.png | Bin 0 -> 128 bytes .../fr/summary/summary_profile_ability_fr.png | Bin 0 -> 178 bytes .../summary/summary_profile_memo_title_fr.png | Bin 0 -> 279 bytes .../fr/summary/summary_profile_passive_fr.png | Bin 0 -> 184 bytes .../summary_profile_profile_title_fr.png | Bin 0 -> 194 bytes .../fr/summary/summary_stats_exp_title_fr.png | Bin 0 -> 256 bytes .../summary/summary_stats_expbar_title_fr.png | Bin 0 -> 119 bytes .../summary/summary_stats_item_title_fr.png | Bin 0 -> 180 bytes .../summary/summary_stats_stats_title_fr.png | Bin 0 -> 166 bytes .../fr/summary/summary_tabs_1_fr.png | Bin 0 -> 200 bytes .../fr/summary/summary_tabs_2_fr.png | Bin 0 -> 204 bytes .../fr/summary/summary_tabs_3_fr.png | Bin 0 -> 168 bytes .../it/summary/summary_dexnb_label_it.png | Bin 0 -> 131 bytes .../summary_dexnb_label_overlay_shiny_it.png | Bin 0 -> 202 bytes .../summary_moves_descriptions_title_it.png | Bin 0 -> 239 bytes .../summary/summary_moves_effect_title_it.png | Bin 0 -> 197 bytes .../summary/summary_moves_moves_title_it.png | Bin 0 -> 179 bytes .../summary/summary_moves_overlay_pp_it.png | Bin 0 -> 128 bytes .../it/summary/summary_profile_ability_it.png | Bin 0 -> 197 bytes .../summary/summary_profile_memo_title_it.png | Bin 0 -> 227 bytes .../it/summary/summary_profile_passive_it.png | Bin 0 -> 194 bytes .../summary_profile_profile_title_it.png | Bin 0 -> 198 bytes .../it/summary/summary_stats_exp_title_it.png | Bin 0 -> 227 bytes .../summary/summary_stats_expbar_title_it.png | Bin 0 -> 137 bytes .../summary/summary_stats_item_title_it.png | Bin 0 -> 225 bytes .../summary/summary_stats_stats_title_it.png | Bin 0 -> 244 bytes .../it/summary/summary_tabs_1_it.png | Bin 0 -> 200 bytes .../it/summary/summary_tabs_2_it.png | Bin 0 -> 204 bytes .../it/summary/summary_tabs_3_it.png | Bin 0 -> 168 bytes .../ja/summary/summary_dexnb_label_ja.png | Bin 0 -> 124 bytes .../summary_dexnb_label_overlay_shiny_ja.png | Bin 0 -> 169 bytes .../summary_moves_descriptions_title_ja.png | Bin 0 -> 175 bytes .../summary/summary_moves_effect_title_ja.png | Bin 0 -> 163 bytes .../summary/summary_moves_moves_title_ja.png | Bin 0 -> 235 bytes .../summary/summary_moves_overlay_pp_ja.png | Bin 0 -> 128 bytes .../ja/summary/summary_profile_ability_ja.png | Bin 0 -> 167 bytes .../summary/summary_profile_memo_title_ja.png | Bin 0 -> 195 bytes .../ja/summary/summary_profile_passive_ja.png | Bin 0 -> 197 bytes .../summary_profile_profile_title_ja.png | Bin 0 -> 179 bytes .../ja/summary/summary_stats_exp_title_ja.png | Bin 0 -> 186 bytes .../summary/summary_stats_expbar_title_ja.png | Bin 0 -> 1600 bytes .../summary/summary_stats_item_title_ja.png | Bin 0 -> 167 bytes .../summary/summary_stats_stats_title_ja.png | Bin 0 -> 176 bytes .../ja/summary/summary_tabs_1_ja.png | Bin 0 -> 200 bytes .../ja/summary/summary_tabs_2_ja.png | Bin 0 -> 204 bytes .../ja/summary/summary_tabs_3_ja.png | Bin 0 -> 168 bytes .../ko/summary/summary_dexnb_label_ko.png | Bin 0 -> 124 bytes .../summary_dexnb_label_overlay_shiny_ko.png | Bin 0 -> 169 bytes .../summary_moves_descriptions_title_ko.png | Bin 0 -> 179 bytes .../summary/summary_moves_effect_title_ko.png | Bin 0 -> 179 bytes .../summary/summary_moves_moves_title_ko.png | Bin 0 -> 177 bytes .../summary/summary_moves_overlay_pp_ko.png | Bin 0 -> 128 bytes .../ko/summary/summary_profile_ability_ko.png | Bin 0 -> 177 bytes .../summary/summary_profile_memo_title_ko.png | Bin 0 -> 274 bytes .../ko/summary/summary_profile_passive_ko.png | Bin 0 -> 188 bytes .../summary_profile_profile_title_ko.png | Bin 0 -> 186 bytes .../ko/summary/summary_stats_exp_title_ko.png | Bin 0 -> 209 bytes .../summary/summary_stats_expbar_title_ko.png | Bin 0 -> 1600 bytes .../summary/summary_stats_item_title_ko.png | Bin 0 -> 233 bytes .../summary/summary_stats_stats_title_ko.png | Bin 0 -> 174 bytes .../ko/summary/summary_tabs_1_ko.png | Bin 0 -> 200 bytes .../ko/summary/summary_tabs_2_ko.png | Bin 0 -> 204 bytes .../ko/summary/summary_tabs_3_ko.png | Bin 0 -> 168 bytes ...ummary_dexnb_label_overlay_shiny_pt-BR.png | Bin 0 -> 1753 bytes .../summary/summary_dexnb_label_pt-BR.png | Bin 0 -> 131 bytes ...summary_moves_descriptions_title_pt-BR.png | Bin 0 -> 248 bytes .../summary_moves_effect_title_pt-BR.png | Bin 0 -> 188 bytes .../summary_moves_moves_title_pt-BR.png | Bin 0 -> 235 bytes .../summary_moves_overlay_pp_pt-BR.png | Bin 0 -> 128 bytes .../summary/summary_profile_ability_pt-BR.png | Bin 0 -> 207 bytes .../summary_profile_memo_title_pt-BR.png | Bin 0 -> 235 bytes .../summary/summary_profile_passive_pt-BR.png | Bin 0 -> 199 bytes .../summary_profile_profile_title_pt-BR.png | Bin 0 -> 180 bytes .../summary/summary_stats_exp_title_pt-BR.png | Bin 0 -> 256 bytes .../summary_stats_expbar_title_pt-BR.png | Bin 0 -> 1600 bytes .../summary_stats_item_title_pt-BR.png | Bin 0 -> 183 bytes .../summary_stats_stats_title_pt-BR.png | Bin 0 -> 218 bytes .../pt-BR/summary/summary_tabs_1_pt-BR.png | Bin 0 -> 200 bytes .../pt-BR/summary/summary_tabs_2_pt-BR.png | Bin 0 -> 204 bytes .../pt-BR/summary/summary_tabs_3_pt-BR.png | Bin 0 -> 168 bytes .../summary_dexnb_label_overlay_shiny_ro.png | Bin 0 -> 169 bytes .../ro/summary/summary_dexnb_label_ro.png | Bin 0 -> 124 bytes .../summary_moves_descriptions_title_ro.png | Bin 0 -> 235 bytes .../summary/summary_moves_effect_title_ro.png | Bin 0 -> 187 bytes .../summary/summary_moves_moves_title_ro.png | Bin 0 -> 180 bytes .../summary/summary_moves_overlay_pp_ro.png | Bin 0 -> 128 bytes .../ro/summary/summary_profile_ability_ro.png | Bin 0 -> 181 bytes .../summary/summary_profile_memo_title_ro.png | Bin 0 -> 242 bytes .../ro/summary/summary_profile_passive_ro.png | Bin 0 -> 198 bytes .../summary_profile_profile_title_ro.png | Bin 0 -> 196 bytes .../ro/summary/summary_stats_exp_title_ro.png | Bin 0 -> 224 bytes .../summary/summary_stats_expbar_title_ro.png | Bin 0 -> 1600 bytes .../summary/summary_stats_item_title_ro.png | Bin 0 -> 183 bytes .../summary/summary_stats_stats_title_ro.png | Bin 0 -> 169 bytes .../ro/summary/summary_tabs_1_ro.png | Bin 0 -> 200 bytes .../ro/summary/summary_tabs_2_ro.png | Bin 0 -> 204 bytes .../ro/summary/summary_tabs_3_ro.png | Bin 0 -> 168 bytes .../summary_dexnb_label_overlay_shiny_ru.png | Bin 0 -> 205 bytes .../ru/summary/summary_dexnb_label_ru.png | Bin 0 -> 135 bytes .../summary_moves_descriptions_title_ru.png | Bin 0 -> 206 bytes .../summary/summary_moves_effect_title_ru.png | Bin 0 -> 193 bytes .../summary/summary_moves_moves_title_ru.png | Bin 0 -> 201 bytes .../summary/summary_moves_overlay_pp_ru.png | Bin 0 -> 149 bytes .../ru/summary/summary_profile_ability_ru.png | Bin 0 -> 178 bytes .../summary/summary_profile_memo_title_ru.png | Bin 0 -> 279 bytes .../ru/summary/summary_profile_passive_ru.png | Bin 0 -> 182 bytes .../summary_profile_profile_title_ru.png | Bin 0 -> 195 bytes .../ru/summary/summary_stats_exp_title_ru.png | Bin 0 -> 160 bytes .../summary/summary_stats_expbar_title_ru.png | Bin 0 -> 134 bytes .../summary/summary_stats_item_title_ru.png | Bin 0 -> 224 bytes .../summary/summary_stats_stats_title_ru.png | Bin 0 -> 230 bytes .../ru/summary/summary_tabs_1_ru.png | Bin 0 -> 200 bytes .../ru/summary/summary_tabs_2_ru.png | Bin 0 -> 204 bytes .../ru/summary/summary_tabs_3_ru.png | Bin 0 -> 168 bytes .../summary_dexnb_label_overlay_shiny_tl.png | Bin 0 -> 169 bytes .../tl/summary/summary_dexnb_label_tl.png | Bin 0 -> 124 bytes .../summary_moves_descriptions_title_tl.png | Bin 0 -> 235 bytes .../summary/summary_moves_effect_title_tl.png | Bin 0 -> 187 bytes .../summary/summary_moves_moves_title_tl.png | Bin 0 -> 180 bytes .../summary/summary_moves_overlay_pp_tl.png | Bin 0 -> 128 bytes .../tl/summary/summary_profile_ability_tl.png | Bin 0 -> 181 bytes .../summary/summary_profile_memo_title_tl.png | Bin 0 -> 242 bytes .../tl/summary/summary_profile_passive_tl.png | Bin 0 -> 198 bytes .../summary_profile_profile_title_tl.png | Bin 0 -> 196 bytes .../tl/summary/summary_stats_exp_title_tl.png | Bin 0 -> 224 bytes .../tl/summary/summary_stats_expbar_title.png | Bin 0 -> 1600 bytes .../summary/summary_stats_item_title_tl.png | Bin 0 -> 183 bytes .../summary/summary_stats_stats_title_tl.png | Bin 0 -> 169 bytes .../tl/summary/summary_tabs_1_tl.png | Bin 0 -> 200 bytes .../tl/summary/summary_tabs_2_tl.png | Bin 0 -> 204 bytes .../tl/summary/summary_tabs_3_tl.png | Bin 0 -> 168 bytes .../summary_dexnb_label_overlay_shiny_tr.png | Bin 0 -> 169 bytes .../tr/summary/summary_dexnb_label_tr.png | Bin 0 -> 124 bytes .../summary_moves_descriptions_title_tr.png | Bin 0 -> 235 bytes .../summary/summary_moves_effect_title_tr.png | Bin 0 -> 187 bytes .../summary/summary_moves_moves_title_tr.png | Bin 0 -> 180 bytes .../summary/summary_moves_overlay_pp_tr.png | Bin 0 -> 128 bytes .../tr/summary/summary_profile_ability_tr.png | Bin 0 -> 181 bytes .../summary/summary_profile_memo_title_tr.png | Bin 0 -> 242 bytes .../tr/summary/summary_profile_passive_tr.png | Bin 0 -> 198 bytes .../summary_profile_profile_title_tr.png | Bin 0 -> 196 bytes .../tr/summary/summary_stats_exp_title_tr.png | Bin 0 -> 224 bytes .../summary/summary_stats_expbar_title_tr.png | Bin 0 -> 1600 bytes .../summary/summary_stats_item_title_tr.png | Bin 0 -> 183 bytes .../summary/summary_stats_stats_title_tr.png | Bin 0 -> 169 bytes .../tr/summary/summary_tabs_1_tr.png | Bin 0 -> 200 bytes .../tr/summary/summary_tabs_2_tr.png | Bin 0 -> 204 bytes .../tr/summary/summary_tabs_3_tr.png | Bin 0 -> 168 bytes ...ummary_dexnb_label_overlay_shiny_zh-CN.png | Bin 0 -> 169 bytes .../summary/summary_dexnb_label_zh-CN.png | Bin 0 -> 1612 bytes ...summary_moves_descriptions_title_zh-CN.png | Bin 0 -> 2173 bytes .../summary_moves_effect_title_zh-CN.png | Bin 0 -> 1870 bytes .../summary_moves_moves_title_zh-CN.png | Bin 0 -> 2035 bytes .../summary_moves_overlay_pp_zh-CN.png | Bin 0 -> 128 bytes .../summary/summary_profile_ability_zh-CN.png | Bin 0 -> 1675 bytes .../summary_profile_memo_title_zh-CN.png | Bin 0 -> 1965 bytes .../summary/summary_profile_passive_zh-CN.png | Bin 0 -> 1503 bytes .../summary_profile_profile_title_zh-CN.png | Bin 0 -> 2050 bytes .../summary/summary_stats_exp_title_zh-CN.png | Bin 0 -> 224 bytes .../summary_stats_expbar_title_zh-CN.png | Bin 0 -> 1600 bytes .../summary_stats_item_title_zh-CN.png | Bin 0 -> 1892 bytes .../summary_stats_stats_title_zh-CN.png | Bin 0 -> 1869 bytes .../zh-CN/summary/summary_tabs_1_zh-CN.png | Bin 0 -> 200 bytes .../zh-CN/summary/summary_tabs_2_zh-CN.png | Bin 0 -> 204 bytes .../zh-CN/summary/summary_tabs_3_zh-CN.png | Bin 0 -> 168 bytes ...ummary_dexnb_label_overlay_shiny_zh-TW.png | Bin 0 -> 169 bytes .../summary/summary_dexnb_label_zh-TW.png | Bin 0 -> 1612 bytes ...summary_moves_descriptions_title_zh-TW.png | Bin 0 -> 2173 bytes .../summary_moves_effect_title_zh-TW.png | Bin 0 -> 1870 bytes .../summary_moves_moves_title_zh-TW.png | Bin 0 -> 2035 bytes .../summary_moves_overlay_pp_zh-TW.png | Bin 0 -> 128 bytes .../summary/summary_profile_ability_zh-TW.png | Bin 0 -> 1675 bytes .../summary_profile_memo_title_zh-TW.png | Bin 0 -> 1965 bytes .../summary/summary_profile_passive_zh-TW.png | Bin 0 -> 1503 bytes .../summary_profile_profile_title_zh-TW.png | Bin 0 -> 2050 bytes .../summary/summary_stats_exp_title_zh-TW.png | Bin 0 -> 224 bytes .../summary_stats_expbar_title_zh-TW.png | Bin 0 -> 1600 bytes .../summary_stats_item_title_zh-TW.png | Bin 0 -> 1892 bytes .../summary_stats_stats_title_zh-TW.png | Bin 0 -> 1869 bytes .../zh-TW/summary/summary_tabs_1_zh-TW.png | Bin 0 -> 200 bytes .../zh-TW/summary/summary_tabs_2_zh-TW.png | Bin 0 -> 204 bytes .../zh-TW/summary/summary_tabs_3_zh-TW.png | Bin 0 -> 168 bytes public/images/ui/pokedex_summary_bg.png | Bin 891 -> 846 bytes public/images/ui/starter_select_bg.png | Bin 917 -> 874 bytes public/images/ui/summary_bg.png | Bin 893 -> 854 bytes public/images/ui/summary_moves.png | Bin 514 -> 290 bytes public/images/ui/summary_moves_effect.png | Bin 292 -> 215 bytes public/images/ui/summary_overlay_shiny.png | Bin 144 -> 0 bytes public/images/ui/summary_profile.png | Bin 539 -> 298 bytes public/images/ui/summary_profile_ability.png | Bin 172 -> 0 bytes public/images/ui/summary_profile_passive.png | Bin 190 -> 0 bytes public/images/ui/summary_stats.png | Bin 871 -> 599 bytes public/images/ui/summary_tabs_2.png | Bin 190 -> 0 bytes public/images/ui/summary_tabs_3.png | Bin 196 -> 0 bytes .../ca/summary/summary_dexnb_label_ca.png | Bin 0 -> 131 bytes .../summary_dexnb_label_overlay_shiny_ca.png | Bin 0 -> 142 bytes .../summary_moves_descriptions_title_ca.png | Bin 0 -> 243 bytes .../summary/summary_moves_effect_title_ca.png | Bin 0 -> 191 bytes .../summary/summary_moves_moves_title_ca.png | Bin 0 -> 221 bytes .../summary/summary_moves_overlay_pp_ca.png} | Bin .../ca/summary/summary_profile_ability_ca.png | Bin 0 -> 198 bytes .../summary/summary_profile_memo_title_ca.png | Bin 0 -> 235 bytes .../ca/summary/summary_profile_passive_ca.png | Bin 0 -> 194 bytes .../summary_profile_profile_title_ca.png | Bin 0 -> 180 bytes .../ca/summary/summary_stats_exp_title_ca.png | Bin 0 -> 255 bytes .../summary/summary_stats_expbar_title_ca.png | Bin 0 -> 110 bytes .../summary/summary_stats_item_title_ca.png | Bin 0 -> 214 bytes .../summary/summary_stats_stats_title_ca.png | Bin 0 -> 277 bytes .../ca/summary/summary_tabs_1_ca.png | Bin 0 -> 187 bytes .../ca/summary/summary_tabs_2_ca.png | Bin 0 -> 275 bytes .../ca/summary/summary_tabs_3_ca.png | Bin 0 -> 234 bytes .../da/summary/summary_dexnb_label_da.png | Bin 0 -> 135 bytes .../summary_dexnb_label_overlay_shiny_da.png | Bin 0 -> 150 bytes .../summary_moves_descriptions_title_da.png | Bin 0 -> 247 bytes .../summary/summary_moves_effect_title_da.png | Bin 0 -> 216 bytes .../summary/summary_moves_moves_title_da.png | Bin 0 -> 268 bytes .../summary/summary_moves_overlay_pp_da.png | Bin 0 -> 147 bytes .../da/summary/summary_profile_ability_da.png | Bin 0 -> 160 bytes .../summary/summary_profile_memo_title_da.png | Bin 0 -> 229 bytes .../da/summary/summary_profile_passive_da.png | Bin 0 -> 185 bytes .../summary_profile_profile_title_da.png | Bin 0 -> 188 bytes .../da/summary/summary_stats_exp_title_da.png | Bin 0 -> 218 bytes .../summary/summary_stats_expbar_title_da.png | Bin 0 -> 119 bytes .../summary/summary_stats_item_title_da.png | Bin 0 -> 232 bytes .../summary/summary_stats_stats_title_da.png | Bin 0 -> 221 bytes .../da/summary/summary_tabs_1_da.png} | Bin .../da/summary/summary_tabs_2_da.png | Bin 0 -> 229 bytes .../da/summary/summary_tabs_3_da.png | Bin 0 -> 273 bytes .../de/summary/summary_dexnb_label_de.png | Bin 0 -> 135 bytes .../summary_dexnb_label_overlay_shiny_de.png | Bin 0 -> 150 bytes .../summary_moves_descriptions_title_de.png | Bin 0 -> 255 bytes .../summary/summary_moves_effect_title_de.png | Bin 0 -> 207 bytes .../summary/summary_moves_moves_title_de.png | Bin 0 -> 210 bytes .../summary/summary_moves_overlay_pp_de.png | Bin 0 -> 130 bytes .../de/summary/summary_profile_ability_de.png | Bin 0 -> 237 bytes .../summary/summary_profile_memo_title_de.png | Bin 0 -> 234 bytes .../de/summary/summary_profile_passive_de.png | Bin 0 -> 185 bytes .../summary_profile_profile_title_de.png | Bin 0 -> 188 bytes .../de/summary/summary_stats_exp_title_de.png | Bin 0 -> 219 bytes .../summary/summary_stats_expbar_title_de.png | Bin 0 -> 119 bytes .../summary/summary_stats_item_title_de.png | Bin 0 -> 183 bytes .../summary/summary_stats_stats_title_de.png | Bin 0 -> 184 bytes .../de/summary/summary_tabs_1_de.png | Bin 0 -> 242 bytes .../de/summary/summary_tabs_2_de.png | Bin 0 -> 196 bytes .../de/summary/summary_tabs_3_de.png | Bin 0 -> 221 bytes .../en/summary/summary_dexnb_label.png | Bin 0 -> 124 bytes .../summary_dexnb_label_overlay_shiny.png | Bin 0 -> 137 bytes .../summary_moves_descriptions_title.png | Bin 0 -> 235 bytes .../en/summary/summary_moves_effect_title.png | Bin 0 -> 187 bytes .../en/summary/summary_moves_moves_title.png | Bin 0 -> 180 bytes .../en/summary/summary_moves_overlay_pp.png | Bin 0 -> 128 bytes .../en/summary/summary_profile_ability.png | Bin 0 -> 181 bytes .../en/summary/summary_profile_memo_title.png | Bin 0 -> 242 bytes .../en/summary/summary_profile_passive.png | Bin 0 -> 198 bytes .../summary/summary_profile_profile_title.png | Bin 0 -> 196 bytes .../en/summary/summary_stats_exp_title.png | Bin 0 -> 224 bytes .../en/summary/summary_stats_expbar_title.png | Bin 0 -> 110 bytes .../en/summary/summary_stats_item_title.png | Bin 0 -> 183 bytes .../en/summary/summary_stats_stats_title.png | Bin 0 -> 169 bytes .../text_images/en/summary/summary_tabs_1.png | Bin 0 -> 196 bytes .../text_images/en/summary/summary_tabs_2.png | Bin 0 -> 190 bytes .../text_images/en/summary/summary_tabs_3.png | Bin 0 -> 195 bytes .../summary/summary_dexnb_label_es-ES.png | Bin 0 -> 131 bytes ...ummary_dexnb_label_overlay_shiny_es-ES.png | Bin 0 -> 142 bytes ...summary_moves_descriptions_title_es-ES.png | Bin 0 -> 249 bytes .../summary_moves_effect_title_es-ES.png | Bin 0 -> 190 bytes .../summary_moves_moves_title_es-ES.png | Bin 0 -> 244 bytes .../summary_moves_overlay_pp_es-ES.png | Bin 0 -> 128 bytes .../summary/summary_profile_ability_es-ES.png | Bin 0 -> 195 bytes .../summary_profile_memo_title_es-ES.png | Bin 0 -> 235 bytes .../summary/summary_profile_passive_es-ES.png | Bin 0 -> 193 bytes .../summary_profile_profile_title_es-ES.png | Bin 0 -> 180 bytes .../summary/summary_stats_exp_title_es-ES.png | Bin 0 -> 241 bytes .../summary_stats_expbar_title_es-ES.png | Bin 0 -> 110 bytes .../summary_stats_item_title_es-ES.png | Bin 0 -> 197 bytes .../summary_stats_stats_title_es-ES.png | Bin 0 -> 307 bytes .../es-ES/summary/summary_tabs_1_es-ES.png | Bin 0 -> 202 bytes .../es-ES/summary/summary_tabs_2_es-ES.png | Bin 0 -> 259 bytes .../es-ES/summary/summary_tabs_3_es-ES.png | Bin 0 -> 236 bytes .../summary/summary_dexnb_label_es-MX.png | Bin 0 -> 131 bytes ...ummary_dexnb_label_overlay_shiny_es-MX.png | Bin 0 -> 142 bytes ...summary_moves_descriptions_title_es-MX.png | Bin 0 -> 249 bytes .../summary_moves_effect_title_es-MX.png | Bin 0 -> 190 bytes .../summary_moves_moves_title_es-MX.png | Bin 0 -> 244 bytes .../summary_moves_overlay_pp_es-MX.png | Bin 0 -> 128 bytes .../summary/summary_profile_ability_es-MX.png | Bin 0 -> 195 bytes .../summary_profile_memo_title_es-MX.png | Bin 0 -> 235 bytes .../summary/summary_profile_passive_es-MX.png | Bin 0 -> 193 bytes .../summary_profile_profile_title_es-MX.png | Bin 0 -> 180 bytes .../summary/summary_stats_exp_title_es-MX.png | Bin 0 -> 241 bytes .../summary_stats_expbar_title_es-MX.png | Bin 0 -> 110 bytes .../summary_stats_item_title_es-MX.png | Bin 0 -> 197 bytes .../summary_stats_stats_title_es-MX.png | Bin 0 -> 307 bytes .../es-MX/summary/summary_tabs_1_es-MX.png | Bin 0 -> 202 bytes .../es-MX/summary/summary_tabs_2_es-MX.png | Bin 0 -> 259 bytes .../es-MX/summary/summary_tabs_3_es-MX.png | Bin 0 -> 236 bytes .../fr/summary/summary_dexnb_label_fr.png | Bin 0 -> 131 bytes .../summary_dexnb_label_overlay_shiny_fr.png | Bin 0 -> 142 bytes .../summary_moves_descriptions_title_fr.png | Bin 0 -> 235 bytes .../summary/summary_moves_effect_title_fr.png | Bin 0 -> 177 bytes .../summary/summary_moves_moves_title_fr.png | Bin 0 -> 208 bytes .../summary/summary_moves_overlay_pp_fr.png | Bin 0 -> 128 bytes .../fr/summary/summary_profile_ability_fr.png | Bin 0 -> 178 bytes .../summary/summary_profile_memo_title_fr.png | Bin 0 -> 279 bytes .../fr/summary/summary_profile_passive_fr.png | Bin 0 -> 184 bytes .../summary_profile_profile_title_fr.png | Bin 0 -> 194 bytes .../fr/summary/summary_stats_exp_title_fr.png | Bin 0 -> 256 bytes .../summary/summary_stats_expbar_title_fr.png | Bin 0 -> 110 bytes .../summary/summary_stats_item_title_fr.png | Bin 0 -> 180 bytes .../summary/summary_stats_stats_title_fr.png | Bin 0 -> 166 bytes .../fr/summary/summary_tabs_1_fr.png | Bin 0 -> 212 bytes .../fr/summary/summary_tabs_2_fr.png | Bin 0 -> 193 bytes .../fr/summary/summary_tabs_3_fr.png | Bin 0 -> 223 bytes .../it/summary/summary_dexnb_label_it.png | Bin 0 -> 131 bytes .../summary_dexnb_label_overlay_shiny_it.png | Bin 0 -> 142 bytes .../summary_moves_descriptions_title_it.png | Bin 0 -> 239 bytes .../summary/summary_moves_effect_title_it.png | Bin 0 -> 197 bytes .../summary/summary_moves_moves_title_it.png | Bin 0 -> 179 bytes .../summary/summary_moves_overlay_pp_it.png | Bin 0 -> 128 bytes .../it/summary/summary_profile_ability_it.png | Bin 0 -> 197 bytes .../summary/summary_profile_memo_title_it.png | Bin 0 -> 227 bytes .../it/summary/summary_profile_passive_it.png | Bin 0 -> 194 bytes .../summary_profile_profile_title_it.png | Bin 0 -> 198 bytes .../it/summary/summary_stats_exp_title_it.png | Bin 0 -> 227 bytes .../summary/summary_stats_expbar_title_it.png | Bin 0 -> 114 bytes .../summary/summary_stats_item_title_it.png | Bin 0 -> 225 bytes .../summary/summary_stats_stats_title_it.png | Bin 0 -> 244 bytes .../it/summary/summary_tabs_1_it.png | Bin 0 -> 212 bytes .../it/summary/summary_tabs_2_it.png | Bin 0 -> 235 bytes .../it/summary/summary_tabs_3_it.png | Bin 0 -> 193 bytes .../ja/summary/summary_dexnb_label_ja.png | Bin 0 -> 124 bytes .../summary_dexnb_label_overlay_shiny_ja.png | Bin 0 -> 137 bytes .../summary_moves_descriptions_title_ja.png | Bin 0 -> 175 bytes .../summary/summary_moves_effect_title_ja.png | Bin 0 -> 163 bytes .../summary/summary_moves_moves_title_ja.png | Bin 0 -> 235 bytes .../summary/summary_moves_overlay_pp_ja.png | Bin 0 -> 128 bytes .../ja/summary/summary_profile_ability_ja.png | Bin 0 -> 167 bytes .../summary/summary_profile_memo_title_ja.png | Bin 0 -> 195 bytes .../ja/summary/summary_profile_passive_ja.png | Bin 0 -> 197 bytes .../summary_profile_profile_title_ja.png | Bin 0 -> 179 bytes .../ja/summary/summary_stats_exp_title_ja.png | Bin 0 -> 186 bytes .../summary/summary_stats_expbar_title_ja.png | Bin 0 -> 110 bytes .../summary/summary_stats_item_title_ja.png | Bin 0 -> 167 bytes .../summary/summary_stats_stats_title_ja.png | Bin 0 -> 176 bytes .../ja/summary/summary_tabs_1_ja.png | Bin 0 -> 195 bytes .../ja/summary/summary_tabs_2_ja.png | Bin 0 -> 195 bytes .../ja/summary/summary_tabs_3_ja.png | Bin 0 -> 219 bytes .../ko/summary/summary_dexnb_label_ko.png | Bin 0 -> 124 bytes .../summary_dexnb_label_overlay_shiny_ko.png | Bin 0 -> 137 bytes .../summary_moves_descriptions_title_ko.png | Bin 0 -> 179 bytes .../summary/summary_moves_effect_title_ko.png | Bin 0 -> 179 bytes .../summary/summary_moves_moves_title_ko.png | Bin 0 -> 177 bytes .../summary/summary_moves_overlay_pp_ko.png | Bin 0 -> 128 bytes .../ko/summary/summary_profile_ability_ko.png | Bin 0 -> 177 bytes .../summary/summary_profile_memo_title_ko.png | Bin 0 -> 274 bytes .../ko/summary/summary_profile_passive_ko.png | Bin 0 -> 188 bytes .../summary_profile_profile_title_ko.png | Bin 0 -> 186 bytes .../ko/summary/summary_stats_exp_title_ko.png | Bin 0 -> 209 bytes .../summary/summary_stats_expbar_title_ko.png | Bin 0 -> 110 bytes .../summary/summary_stats_item_title_ko.png | Bin 0 -> 233 bytes .../summary/summary_stats_stats_title_ko.png | Bin 0 -> 174 bytes .../ko/summary/summary_tabs_1_ko.png | Bin 0 -> 180 bytes .../ko/summary/summary_tabs_2_ko.png | Bin 0 -> 188 bytes .../ko/summary/summary_tabs_3_ko.png | Bin 0 -> 232 bytes ...ummary_dexnb_label_overlay_shiny_pt-BR.png | Bin 0 -> 142 bytes .../summary/summary_dexnb_label_pt-BR.png | Bin 0 -> 131 bytes ...summary_moves_descriptions_title_pt-BR.png | Bin 0 -> 248 bytes .../summary_moves_effect_title_pt-BR.png | Bin 0 -> 188 bytes .../summary_moves_moves_title_pt-BR.png | Bin 0 -> 235 bytes .../summary_moves_overlay_pp_pt-BR.png | Bin 0 -> 128 bytes .../summary/summary_profile_ability_pt-BR.png | Bin 0 -> 207 bytes .../summary_profile_memo_title_pt-BR.png | Bin 0 -> 235 bytes .../summary/summary_profile_passive_pt-BR.png | Bin 0 -> 199 bytes .../summary_profile_profile_title_pt-BR.png | Bin 0 -> 180 bytes .../summary/summary_stats_exp_title_pt-BR.png | Bin 0 -> 256 bytes .../summary_stats_expbar_title_pt-BR.png | Bin 0 -> 110 bytes .../summary_stats_item_title_pt-BR.png | Bin 0 -> 183 bytes .../summary_stats_stats_title_pt-BR.png | Bin 0 -> 218 bytes .../pt-BR/summary/summary_tabs_1_pt-BR.png | Bin 0 -> 200 bytes .../pt-BR/summary/summary_tabs_2_pt-BR.png | Bin 0 -> 235 bytes .../pt-BR/summary/summary_tabs_3_pt-BR.png | Bin 0 -> 238 bytes .../summary_dexnb_label_overlay_shiny_ro.png | Bin 0 -> 137 bytes .../ro/summary/summary_dexnb_label_ro.png | Bin 0 -> 124 bytes .../summary_moves_descriptions_title_ro.png | Bin 0 -> 235 bytes .../summary/summary_moves_effect_title_ro.png | Bin 0 -> 187 bytes .../summary/summary_moves_moves_title_ro.png | Bin 0 -> 180 bytes .../summary/summary_moves_overlay_pp_ro.png | Bin 0 -> 128 bytes .../ro/summary/summary_profile_ability_ro.png | Bin 0 -> 181 bytes .../summary/summary_profile_memo_title_ro.png | Bin 0 -> 242 bytes .../ro/summary/summary_profile_passive_ro.png | Bin 0 -> 198 bytes .../summary_profile_profile_title_ro.png | Bin 0 -> 196 bytes .../ro/summary/summary_stats_exp_title_ro.png | Bin 0 -> 224 bytes .../summary/summary_stats_expbar_title_ro.png | Bin 0 -> 110 bytes .../summary/summary_stats_item_title_ro.png | Bin 0 -> 183 bytes .../summary/summary_stats_stats_title_ro.png | Bin 0 -> 169 bytes .../ro/summary/summary_tabs_1_ro.png | Bin 0 -> 196 bytes .../ro/summary/summary_tabs_2_ro.png | Bin 0 -> 190 bytes .../ro/summary/summary_tabs_3_ro.png | Bin 0 -> 195 bytes .../summary_dexnb_label_overlay_shiny_ru.png | Bin 0 -> 152 bytes .../ru/summary/summary_dexnb_label_ru.png | Bin 0 -> 135 bytes .../summary_moves_descriptions_title_ru.png | Bin 0 -> 206 bytes .../summary/summary_moves_effect_title_ru.png | Bin 0 -> 193 bytes .../summary/summary_moves_moves_title_ru.png | Bin 0 -> 201 bytes .../summary/summary_moves_overlay_pp_ru.png | Bin 0 -> 152 bytes .../ru/summary/summary_profile_ability_ru.png | Bin 0 -> 178 bytes .../summary/summary_profile_memo_title_ru.png | Bin 0 -> 279 bytes .../ru/summary/summary_profile_passive_ru.png | Bin 0 -> 182 bytes .../summary_profile_profile_title_ru.png | Bin 0 -> 195 bytes .../ru/summary/summary_stats_exp_title_ru.png | Bin 0 -> 160 bytes .../summary/summary_stats_expbar_title_ru.png | Bin 0 -> 119 bytes .../summary/summary_stats_item_title_ru.png | Bin 0 -> 224 bytes .../summary/summary_stats_stats_title_ru.png | Bin 0 -> 230 bytes .../ru/summary/summary_tabs_1_ru.png | Bin 0 -> 201 bytes .../ru/summary/summary_tabs_2_ru.png | Bin 0 -> 251 bytes .../ru/summary/summary_tabs_3_ru.png | Bin 0 -> 220 bytes .../summary_dexnb_label_overlay_shiny_tl.png | Bin 0 -> 137 bytes .../tl/summary/summary_dexnb_label_tl.png | Bin 0 -> 124 bytes .../summary_moves_descriptions_title_tl.png | Bin 0 -> 235 bytes .../summary/summary_moves_effect_title_tl.png | Bin 0 -> 187 bytes .../summary/summary_moves_moves_title_tl.png | Bin 0 -> 180 bytes .../summary/summary_moves_overlay_pp_tl.png | Bin 0 -> 128 bytes .../tl/summary/summary_profile_ability_tl.png | Bin 0 -> 181 bytes .../summary/summary_profile_memo_title_tl.png | Bin 0 -> 242 bytes .../tl/summary/summary_profile_passive_tl.png | Bin 0 -> 198 bytes .../summary_profile_profile_title_tl.png | Bin 0 -> 196 bytes .../tl/summary/summary_stats_exp_title_tl.png | Bin 0 -> 224 bytes .../summary/summary_stats_expbar_title_tl.png | Bin 0 -> 110 bytes .../summary/summary_stats_item_title_tl.png | Bin 0 -> 183 bytes .../summary/summary_stats_stats_title_tl.png | Bin 0 -> 169 bytes .../tl/summary/summary_tabs_1_tl.png | Bin 0 -> 196 bytes .../tl/summary/summary_tabs_2_tl.png | Bin 0 -> 190 bytes .../tl/summary/summary_tabs_3_tl.png | Bin 0 -> 195 bytes .../summary_dexnb_label_overlay_shiny_tr.png | Bin 0 -> 137 bytes .../tr/summary/summary_dexnb_label_tr.png | Bin 0 -> 124 bytes .../summary_moves_descriptions_title_tr.png | Bin 0 -> 235 bytes .../summary/summary_moves_effect_title_tr.png | Bin 0 -> 187 bytes .../summary/summary_moves_moves_title_tr.png | Bin 0 -> 180 bytes .../summary/summary_moves_overlay_pp_tr.png | Bin 0 -> 128 bytes .../tr/summary/summary_profile_ability_tr.png | Bin 0 -> 181 bytes .../summary/summary_profile_memo_title_tr.png | Bin 0 -> 242 bytes .../tr/summary/summary_profile_passive_tr.png | Bin 0 -> 198 bytes .../summary_profile_profile_title_tr.png | Bin 0 -> 196 bytes .../tr/summary/summary_stats_exp_title_tr.png | Bin 0 -> 224 bytes .../summary/summary_stats_expbar_title_tr.png | Bin 0 -> 110 bytes .../summary/summary_stats_item_title_tr.png | Bin 0 -> 183 bytes .../summary/summary_stats_stats_title_tr.png | Bin 0 -> 169 bytes .../tr/summary/summary_tabs_1_tr.png | Bin 0 -> 196 bytes .../tr/summary/summary_tabs_2_tr.png | Bin 0 -> 190 bytes .../tr/summary/summary_tabs_3_tr.png | Bin 0 -> 195 bytes ...ummary_dexnb_label_overlay_shiny_zh-CN.png | Bin 0 -> 137 bytes .../summary/summary_dexnb_label_zh-CN.png | Bin 0 -> 124 bytes ...summary_moves_descriptions_title_zh-CN.png | Bin 0 -> 235 bytes .../summary_moves_effect_title_zh-CN.png | Bin 0 -> 187 bytes .../summary_moves_moves_title_zh-CN.png | Bin 0 -> 180 bytes .../summary_moves_overlay_pp_zh-CN.png | Bin 0 -> 128 bytes .../summary/summary_profile_ability_zh-CN.png | Bin 0 -> 181 bytes .../summary_profile_memo_title_zh-CN.png | Bin 0 -> 242 bytes .../summary/summary_profile_passive_zh-CN.png | Bin 0 -> 198 bytes .../summary_profile_profile_title_zh-CN.png | Bin 0 -> 196 bytes .../summary/summary_stats_exp_title_zh-CN.png | Bin 0 -> 224 bytes .../summary_stats_expbar_title_zh-CN.png | Bin 0 -> 110 bytes .../summary_stats_item_title_zh-CN.png | Bin 0 -> 183 bytes .../summary_stats_stats_title_zh-CN.png | Bin 0 -> 169 bytes .../zh-CN/summary/summary_tabs_1_zh-CN.png | Bin 0 -> 196 bytes .../zh-CN/summary/summary_tabs_2_zh-CN.png | Bin 0 -> 190 bytes .../zh-CN/summary/summary_tabs_3_zh-CN.png | Bin 0 -> 195 bytes ...ummary_dexnb_label_overlay_shiny_zh-TW.png | Bin 0 -> 137 bytes .../summary/summary_dexnb_label_zh-TW.png | Bin 0 -> 124 bytes ...summary_moves_descriptions_title_zh-TW.png | Bin 0 -> 235 bytes .../summary_moves_effect_title_zh-TW.png | Bin 0 -> 187 bytes .../summary_moves_moves_title_zh-TW.png | Bin 0 -> 180 bytes .../summary_moves_overlay_pp_zh-TW.png | Bin 0 -> 128 bytes .../summary/summary_profile_ability_zh-TW.png | Bin 0 -> 181 bytes .../summary_profile_memo_title_zh-TW.png | Bin 0 -> 242 bytes .../summary/summary_profile_passive_zh-TW.png | Bin 0 -> 198 bytes .../summary_profile_profile_title_zh-TW.png | Bin 0 -> 196 bytes .../summary/summary_stats_exp_title_zh-TW.png | Bin 0 -> 224 bytes .../summary_stats_expbar_title_zh-TW.png | Bin 0 -> 110 bytes .../summary_stats_item_title_zh-TW.png | Bin 0 -> 183 bytes .../summary_stats_stats_title_zh-TW.png | Bin 0 -> 169 bytes .../zh-TW/summary/summary_tabs_1_zh-TW.png | Bin 0 -> 196 bytes .../zh-TW/summary/summary_tabs_2_zh-TW.png | Bin 0 -> 190 bytes .../zh-TW/summary/summary_tabs_3_zh-TW.png | Bin 0 -> 195 bytes src/loading-scene.ts | 103 ++++++++++++++---- src/ui/pokedex-page-ui-handler.ts | 9 +- src/ui/starter-select-ui-handler.ts | 10 +- src/ui/summary-ui-handler.ts | 96 ++++++++++++++-- 603 files changed, 182 insertions(+), 36 deletions(-) delete mode 100644 public/images/ui/legacy/summary_profile_ability.png delete mode 100644 public/images/ui/legacy/summary_profile_passive.png create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_dexnb_label_ca.png create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_dexnb_label_overlay_shiny_ca.png create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_moves_descriptions_title_ca.png create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_moves_effect_title_ca.png create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_moves_moves_title_ca.png rename public/images/ui/legacy/{summary_moves_overlay_pp.png => text_images/ca/summary/summary_moves_overlay_pp_ca.png} (100%) create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_profile_ability_ca.png create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_profile_memo_title_ca.png create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_profile_passive_ca.png create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_profile_profile_title_ca.png create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_stats_exp_title_ca.png create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_stats_expbar_title_ca.png create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_stats_item_title_ca.png create mode 100644 public/images/ui/legacy/text_images/ca/summary/summary_stats_stats_title_ca.png rename public/images/ui/legacy/{summary_tabs_1.png => text_images/ca/summary/summary_tabs_1_ca.png} (100%) rename public/images/ui/legacy/{summary_tabs_2.png => text_images/ca/summary/summary_tabs_2_ca.png} (100%) rename public/images/ui/legacy/{summary_tabs_3.png => text_images/ca/summary/summary_tabs_3_ca.png} (100%) create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_dexnb_label_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_dexnb_label_overlay_shiny_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_moves_descriptions_title_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_moves_effect_title_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_moves_moves_title_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_moves_overlay_pp_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_profile_ability_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_profile_memo_title_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_profile_passive_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_profile_profile_title_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_stats_exp_title_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_stats_expbar_title_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_stats_item_title_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_stats_stats_title_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_tabs_1_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_tabs_2_da.png create mode 100644 public/images/ui/legacy/text_images/da/summary/summary_tabs_3_da.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_dexnb_label_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_dexnb_label_overlay_shiny_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_moves_descriptions_title_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_moves_effect_title_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_moves_moves_title_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_moves_overlay_pp_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_profile_ability_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_profile_memo_title_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_profile_passive_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_profile_profile_title_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_stats_exp_title_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_stats_expbar_title_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_stats_item_title_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_stats_stats_title_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_tabs_1_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_tabs_2_de.png create mode 100644 public/images/ui/legacy/text_images/de/summary/summary_tabs_3_de.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_dexnb_label.png rename public/images/ui/legacy/{summary_overlay_shiny.png => text_images/en/summary/summary_dexnb_label_overlay_shiny.png} (100%) create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_moves_descriptions_title.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_moves_effect_title.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_moves_moves_title.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_moves_overlay_pp.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_profile_ability.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_profile_memo_title.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_profile_passive.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_profile_profile_title.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_stats_exp_title.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_stats_expbar_title.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_stats_item_title.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_stats_stats_title.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_tabs_1.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_tabs_2.png create mode 100644 public/images/ui/legacy/text_images/en/summary/summary_tabs_3.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_dexnb_label_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_dexnb_label_overlay_shiny_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_moves_descriptions_title_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_moves_effect_title_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_moves_moves_title_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_moves_overlay_pp_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_profile_ability_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_profile_memo_title_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_profile_passive_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_profile_profile_title_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_stats_exp_title_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_stats_expbar_title_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_stats_item_title_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_stats_stats_title_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_tabs_1_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_tabs_2_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-ES/summary/summary_tabs_3_es-ES.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_dexnb_label_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_dexnb_label_overlay_shiny_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_moves_descriptions_title_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_moves_effect_title_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_moves_moves_title_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_moves_overlay_pp_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_profile_ability_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_profile_memo_title_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_profile_passive_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_profile_profile_title_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_stats_exp_title_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_stats_expbar_title_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_stats_item_title_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_stats_stats_title_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_tabs_1_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_tabs_2_es-MX.png create mode 100644 public/images/ui/legacy/text_images/es-MX/summary/summary_tabs_3_es-MX.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_dexnb_label_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_dexnb_label_overlay_shiny_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_moves_descriptions_title_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_moves_effect_title_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_moves_moves_title_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_moves_overlay_pp_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_profile_ability_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_profile_memo_title_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_profile_passive_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_profile_profile_title_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_stats_exp_title_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_stats_expbar_title_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_stats_item_title_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_stats_stats_title_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_tabs_1_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_tabs_2_fr.png create mode 100644 public/images/ui/legacy/text_images/fr/summary/summary_tabs_3_fr.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_dexnb_label_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_dexnb_label_overlay_shiny_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_moves_descriptions_title_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_moves_effect_title_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_moves_moves_title_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_moves_overlay_pp_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_profile_ability_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_profile_memo_title_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_profile_passive_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_profile_profile_title_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_stats_exp_title_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_stats_expbar_title_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_stats_item_title_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_stats_stats_title_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_tabs_1_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_tabs_2_it.png create mode 100644 public/images/ui/legacy/text_images/it/summary/summary_tabs_3_it.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_dexnb_label_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_dexnb_label_overlay_shiny_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_moves_descriptions_title_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_moves_effect_title_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_moves_moves_title_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_moves_overlay_pp_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_profile_ability_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_profile_memo_title_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_profile_passive_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_profile_profile_title_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_stats_exp_title_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_stats_expbar_title_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_stats_item_title_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_stats_stats_title_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_tabs_1_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_tabs_2_ja.png create mode 100644 public/images/ui/legacy/text_images/ja/summary/summary_tabs_3_ja.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_dexnb_label_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_dexnb_label_overlay_shiny_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_moves_descriptions_title_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_moves_effect_title_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_moves_moves_title_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_moves_overlay_pp_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_profile_ability_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_profile_memo_title_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_profile_passive_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_profile_profile_title_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_stats_exp_title_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_stats_expbar_title_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_stats_item_title_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_stats_stats_title_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_tabs_1_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_tabs_2_ko.png create mode 100644 public/images/ui/legacy/text_images/ko/summary/summary_tabs_3_ko.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_dexnb_label_overlay_shiny_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_dexnb_label_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_moves_descriptions_title_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_moves_effect_title_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_moves_moves_title_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_moves_overlay_pp_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_profile_ability_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_profile_memo_title_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_profile_passive_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_profile_profile_title_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_stats_exp_title_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_stats_expbar_title_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_stats_item_title_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_stats_stats_title_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_tabs_1_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_tabs_2_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/pt-BR/summary/summary_tabs_3_pt-BR.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_dexnb_label_overlay_shiny_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_dexnb_label_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_moves_descriptions_title_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_moves_effect_title_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_moves_moves_title_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_moves_overlay_pp_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_profile_ability_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_profile_memo_title_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_profile_passive_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_profile_profile_title_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_stats_exp_title_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_stats_expbar_title_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_stats_item_title_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_stats_stats_title_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_tabs_1_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_tabs_2_ro.png create mode 100644 public/images/ui/legacy/text_images/ro/summary/summary_tabs_3_ro.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_dexnb_label_overlay_shiny_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_dexnb_label_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_moves_descriptions_title_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_moves_effect_title_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_moves_moves_title_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_moves_overlay_pp_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_profile_ability_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_profile_memo_title_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_profile_passive_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_profile_profile_title_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_stats_exp_title_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_stats_expbar_title_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_stats_item_title_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_stats_stats_title_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_tabs_1_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_tabs_2_ru.png create mode 100644 public/images/ui/legacy/text_images/ru/summary/summary_tabs_3_ru.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_dexnb_label_overlay_shiny_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_dexnb_label_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_moves_descriptions_title_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_moves_effect_title_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_moves_moves_title_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_moves_overlay_pp_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_profile_ability_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_profile_memo_title_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_profile_passive_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_profile_profile_title_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_stats_exp_title_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_stats_expbar_title.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_stats_item_title_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_stats_stats_title_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_tabs_1_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_tabs_2_tl.png create mode 100644 public/images/ui/legacy/text_images/tl/summary/summary_tabs_3_tl.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_dexnb_label_overlay_shiny_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_dexnb_label_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_moves_descriptions_title_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_moves_effect_title_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_moves_moves_title_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_moves_overlay_pp_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_profile_ability_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_profile_memo_title_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_profile_passive_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_profile_profile_title_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_stats_exp_title_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_stats_expbar_title_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_stats_item_title_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_stats_stats_title_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_tabs_1_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_tabs_2_tr.png create mode 100644 public/images/ui/legacy/text_images/tr/summary/summary_tabs_3_tr.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_dexnb_label_overlay_shiny_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_dexnb_label_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_moves_descriptions_title_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_moves_effect_title_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_moves_moves_title_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_moves_overlay_pp_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_profile_ability_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_profile_memo_title_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_profile_passive_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_profile_profile_title_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_stats_exp_title_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_stats_expbar_title_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_stats_item_title_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_stats_stats_title_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_tabs_1_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_tabs_2_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-CN/summary/summary_tabs_3_zh-CN.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_dexnb_label_overlay_shiny_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_dexnb_label_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_moves_descriptions_title_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_moves_effect_title_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_moves_moves_title_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_moves_overlay_pp_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_profile_ability_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_profile_memo_title_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_profile_passive_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_profile_profile_title_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_stats_exp_title_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_stats_expbar_title_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_stats_item_title_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_stats_stats_title_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_tabs_1_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_tabs_2_zh-TW.png create mode 100644 public/images/ui/legacy/text_images/zh-TW/summary/summary_tabs_3_zh-TW.png delete mode 100644 public/images/ui/summary_overlay_shiny.png delete mode 100644 public/images/ui/summary_profile_ability.png delete mode 100644 public/images/ui/summary_profile_passive.png delete mode 100644 public/images/ui/summary_tabs_2.png delete mode 100644 public/images/ui/summary_tabs_3.png create mode 100644 public/images/ui/text_images/ca/summary/summary_dexnb_label_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_dexnb_label_overlay_shiny_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_moves_descriptions_title_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_moves_effect_title_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_moves_moves_title_ca.png rename public/images/ui/{summary_moves_overlay_pp.png => text_images/ca/summary/summary_moves_overlay_pp_ca.png} (100%) create mode 100644 public/images/ui/text_images/ca/summary/summary_profile_ability_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_profile_memo_title_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_profile_passive_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_profile_profile_title_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_stats_exp_title_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_stats_expbar_title_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_stats_item_title_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_stats_stats_title_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_tabs_1_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_tabs_2_ca.png create mode 100644 public/images/ui/text_images/ca/summary/summary_tabs_3_ca.png create mode 100644 public/images/ui/text_images/da/summary/summary_dexnb_label_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_dexnb_label_overlay_shiny_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_moves_descriptions_title_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_moves_effect_title_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_moves_moves_title_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_moves_overlay_pp_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_profile_ability_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_profile_memo_title_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_profile_passive_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_profile_profile_title_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_stats_exp_title_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_stats_expbar_title_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_stats_item_title_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_stats_stats_title_da.png rename public/images/ui/{summary_tabs_1.png => text_images/da/summary/summary_tabs_1_da.png} (100%) create mode 100644 public/images/ui/text_images/da/summary/summary_tabs_2_da.png create mode 100644 public/images/ui/text_images/da/summary/summary_tabs_3_da.png create mode 100644 public/images/ui/text_images/de/summary/summary_dexnb_label_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_dexnb_label_overlay_shiny_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_moves_descriptions_title_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_moves_effect_title_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_moves_moves_title_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_moves_overlay_pp_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_profile_ability_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_profile_memo_title_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_profile_passive_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_profile_profile_title_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_stats_exp_title_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_stats_expbar_title_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_stats_item_title_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_stats_stats_title_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_tabs_1_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_tabs_2_de.png create mode 100644 public/images/ui/text_images/de/summary/summary_tabs_3_de.png create mode 100644 public/images/ui/text_images/en/summary/summary_dexnb_label.png create mode 100644 public/images/ui/text_images/en/summary/summary_dexnb_label_overlay_shiny.png create mode 100644 public/images/ui/text_images/en/summary/summary_moves_descriptions_title.png create mode 100644 public/images/ui/text_images/en/summary/summary_moves_effect_title.png create mode 100644 public/images/ui/text_images/en/summary/summary_moves_moves_title.png create mode 100644 public/images/ui/text_images/en/summary/summary_moves_overlay_pp.png create mode 100644 public/images/ui/text_images/en/summary/summary_profile_ability.png create mode 100644 public/images/ui/text_images/en/summary/summary_profile_memo_title.png create mode 100644 public/images/ui/text_images/en/summary/summary_profile_passive.png create mode 100644 public/images/ui/text_images/en/summary/summary_profile_profile_title.png create mode 100644 public/images/ui/text_images/en/summary/summary_stats_exp_title.png create mode 100644 public/images/ui/text_images/en/summary/summary_stats_expbar_title.png create mode 100644 public/images/ui/text_images/en/summary/summary_stats_item_title.png create mode 100644 public/images/ui/text_images/en/summary/summary_stats_stats_title.png create mode 100644 public/images/ui/text_images/en/summary/summary_tabs_1.png create mode 100644 public/images/ui/text_images/en/summary/summary_tabs_2.png create mode 100644 public/images/ui/text_images/en/summary/summary_tabs_3.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_dexnb_label_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_dexnb_label_overlay_shiny_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_moves_descriptions_title_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_moves_effect_title_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_moves_moves_title_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_moves_overlay_pp_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_profile_ability_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_profile_memo_title_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_profile_passive_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_profile_profile_title_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_stats_exp_title_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_stats_expbar_title_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_stats_item_title_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_stats_stats_title_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_tabs_1_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_tabs_2_es-ES.png create mode 100644 public/images/ui/text_images/es-ES/summary/summary_tabs_3_es-ES.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_dexnb_label_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_dexnb_label_overlay_shiny_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_moves_descriptions_title_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_moves_effect_title_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_moves_moves_title_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_moves_overlay_pp_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_profile_ability_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_profile_memo_title_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_profile_passive_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_profile_profile_title_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_stats_exp_title_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_stats_expbar_title_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_stats_item_title_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_stats_stats_title_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_tabs_1_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_tabs_2_es-MX.png create mode 100644 public/images/ui/text_images/es-MX/summary/summary_tabs_3_es-MX.png create mode 100644 public/images/ui/text_images/fr/summary/summary_dexnb_label_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_dexnb_label_overlay_shiny_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_moves_descriptions_title_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_moves_effect_title_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_moves_moves_title_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_moves_overlay_pp_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_profile_ability_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_profile_memo_title_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_profile_passive_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_profile_profile_title_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_stats_exp_title_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_stats_expbar_title_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_stats_item_title_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_stats_stats_title_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_tabs_1_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_tabs_2_fr.png create mode 100644 public/images/ui/text_images/fr/summary/summary_tabs_3_fr.png create mode 100644 public/images/ui/text_images/it/summary/summary_dexnb_label_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_dexnb_label_overlay_shiny_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_moves_descriptions_title_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_moves_effect_title_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_moves_moves_title_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_moves_overlay_pp_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_profile_ability_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_profile_memo_title_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_profile_passive_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_profile_profile_title_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_stats_exp_title_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_stats_expbar_title_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_stats_item_title_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_stats_stats_title_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_tabs_1_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_tabs_2_it.png create mode 100644 public/images/ui/text_images/it/summary/summary_tabs_3_it.png create mode 100644 public/images/ui/text_images/ja/summary/summary_dexnb_label_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_dexnb_label_overlay_shiny_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_moves_descriptions_title_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_moves_effect_title_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_moves_moves_title_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_moves_overlay_pp_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_profile_ability_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_profile_memo_title_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_profile_passive_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_profile_profile_title_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_stats_exp_title_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_stats_expbar_title_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_stats_item_title_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_stats_stats_title_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_tabs_1_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_tabs_2_ja.png create mode 100644 public/images/ui/text_images/ja/summary/summary_tabs_3_ja.png create mode 100644 public/images/ui/text_images/ko/summary/summary_dexnb_label_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_dexnb_label_overlay_shiny_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_moves_descriptions_title_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_moves_effect_title_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_moves_moves_title_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_moves_overlay_pp_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_profile_ability_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_profile_memo_title_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_profile_passive_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_profile_profile_title_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_stats_exp_title_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_stats_expbar_title_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_stats_item_title_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_stats_stats_title_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_tabs_1_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_tabs_2_ko.png create mode 100644 public/images/ui/text_images/ko/summary/summary_tabs_3_ko.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_dexnb_label_overlay_shiny_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_dexnb_label_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_moves_descriptions_title_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_moves_effect_title_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_moves_moves_title_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_moves_overlay_pp_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_profile_ability_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_profile_memo_title_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_profile_passive_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_profile_profile_title_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_stats_exp_title_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_stats_expbar_title_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_stats_item_title_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_stats_stats_title_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_tabs_1_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_tabs_2_pt-BR.png create mode 100644 public/images/ui/text_images/pt-BR/summary/summary_tabs_3_pt-BR.png create mode 100644 public/images/ui/text_images/ro/summary/summary_dexnb_label_overlay_shiny_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_dexnb_label_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_moves_descriptions_title_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_moves_effect_title_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_moves_moves_title_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_moves_overlay_pp_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_profile_ability_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_profile_memo_title_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_profile_passive_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_profile_profile_title_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_stats_exp_title_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_stats_expbar_title_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_stats_item_title_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_stats_stats_title_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_tabs_1_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_tabs_2_ro.png create mode 100644 public/images/ui/text_images/ro/summary/summary_tabs_3_ro.png create mode 100644 public/images/ui/text_images/ru/summary/summary_dexnb_label_overlay_shiny_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_dexnb_label_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_moves_descriptions_title_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_moves_effect_title_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_moves_moves_title_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_moves_overlay_pp_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_profile_ability_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_profile_memo_title_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_profile_passive_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_profile_profile_title_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_stats_exp_title_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_stats_expbar_title_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_stats_item_title_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_stats_stats_title_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_tabs_1_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_tabs_2_ru.png create mode 100644 public/images/ui/text_images/ru/summary/summary_tabs_3_ru.png create mode 100644 public/images/ui/text_images/tl/summary/summary_dexnb_label_overlay_shiny_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_dexnb_label_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_moves_descriptions_title_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_moves_effect_title_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_moves_moves_title_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_moves_overlay_pp_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_profile_ability_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_profile_memo_title_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_profile_passive_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_profile_profile_title_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_stats_exp_title_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_stats_expbar_title_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_stats_item_title_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_stats_stats_title_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_tabs_1_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_tabs_2_tl.png create mode 100644 public/images/ui/text_images/tl/summary/summary_tabs_3_tl.png create mode 100644 public/images/ui/text_images/tr/summary/summary_dexnb_label_overlay_shiny_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_dexnb_label_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_moves_descriptions_title_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_moves_effect_title_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_moves_moves_title_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_moves_overlay_pp_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_profile_ability_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_profile_memo_title_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_profile_passive_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_profile_profile_title_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_stats_exp_title_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_stats_expbar_title_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_stats_item_title_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_stats_stats_title_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_tabs_1_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_tabs_2_tr.png create mode 100644 public/images/ui/text_images/tr/summary/summary_tabs_3_tr.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_dexnb_label_overlay_shiny_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_dexnb_label_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_moves_descriptions_title_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_moves_effect_title_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_moves_moves_title_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_moves_overlay_pp_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_profile_ability_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_profile_memo_title_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_profile_passive_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_profile_profile_title_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_stats_exp_title_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_stats_expbar_title_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_stats_item_title_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_stats_stats_title_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_tabs_1_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_tabs_2_zh-CN.png create mode 100644 public/images/ui/text_images/zh-CN/summary/summary_tabs_3_zh-CN.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_dexnb_label_overlay_shiny_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_dexnb_label_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_moves_descriptions_title_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_moves_effect_title_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_moves_moves_title_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_moves_overlay_pp_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_profile_ability_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_profile_memo_title_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_profile_passive_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_profile_profile_title_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_stats_exp_title_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_stats_expbar_title_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_stats_item_title_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_stats_stats_title_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_tabs_1_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_tabs_2_zh-TW.png create mode 100644 public/images/ui/text_images/zh-TW/summary/summary_tabs_3_zh-TW.png diff --git a/public/images/ui/legacy/pokedex_summary_bg.png b/public/images/ui/legacy/pokedex_summary_bg.png index 0f8fed843c9311eb0095d3d07a717b154f3e9851..62369eaa24858582bdc2d31376944af7a1a0d03c 100644 GIT binary patch delta 272 zcmcb?bf0O0O1(sYPlzi61H=FS{}VQJ7<3c>$r(2mT)42~#)A*rE+@+Y<(Nx?{DK)6 zboZ~Eu^Pzz?CIhdQW5v&b|7bifkf*?Nk@YYH-R+ft&O)1T;1OIp}U9ix!Mnl_vT-F z^?5D#ZOpbY2S^tUc|U}E544!ptwr71m^W0m>21Q9US0Z8v2m`fn&rWpl297UHx3vIVCg!094~@ AssI20 delta 262 zcmV+h0r~#l0@wnOB!3%FOjJbx003aHh%kt7U|?Wiu!xx0pwQ5`*x>N^`1meAj`#oo z00MMUPE!CaGfa_90002$Nkl;uQH11~jPSHdj=Z)XEP1}?VRat~aO`3J5o^%1w$ zat}OZANa^V@S6M^EVY#4NBz$O?@Oqu`@lI^_kl|=kt-2eap M07*qoM6N<$f~_WX%m4rY diff --git a/public/images/ui/legacy/starter_select_bg.png b/public/images/ui/legacy/starter_select_bg.png index 501e892969e82a6e144aca7ff330768c7908bc5a..09d21d4a630bb8d10bf0786edbef31322ac80928 100644 GIT binary patch literal 337 zcmeAS@N?(olHy`uVBq!ia0y~yU~~Yox3Dk+N%2!Jlz^0IfKP}kkpBPwzd=Vq!iJ6+ zHx^vDu;a#q4?=wtegY+!N`m}?85qhYpS1w;UV6GXhE&8Q3CKKYaJ(_2WWfQ86S5gT z;q0?^OyKDeW#7p>m)Bj^;?;pb_CBkED~%y6i}_?q7ic%gTB$KGv?MYt<74MxKeM03 zWJ+?llA`R*$IYTr@^2(3Jh(-Zii=Ft9O3u>GEH zdc>0B42$*xEeB>M9N=E~)9>X!ZKYF88yfyIvLJv?$;H;Fbv`${fSzXXboFyt=akR{ E0Ob8^6951J literal 350 zcmeAS@N?(olHy`uVBq!ia0y~yU~~Yox3Dk+N%2!Jlz@~(fKP}kkT&QjNC1Kj9W!n$ zxNu>|jRzlo{P=O|-)c9Y9Ain4UoeBivm0qZ&KFM?$B>F!Z|`p8J!Bx_8tAQafJaP7 zH)sY!PlUn-M#%%d*Oo8)qq&BEj`_i>o>R{GY2MsE`_b)m{yA-I^P(%9Ik&UK`7_xw zRlnZJeBJrqfvwByj_mz@r}6lk#_w+$r$2e0kh?WZ{#88R9^Hj!4>QXjef`+d^Pb7ULDGy)blG%~SriC{7!_B{;y`Q`hk^#7Y1XM({^ b`S-kgTe~DWM4fhtq+c diff --git a/public/images/ui/legacy/summary_bg.png b/public/images/ui/legacy/summary_bg.png index 668a7438bf0bdb5a06198578f300e65f1fc8685b..b08bd406a819c290267f86afedb85434abe56815 100644 GIT binary patch delta 385 zcmcb^yoY&$3ZHI(Plzi+MuI^{fro>|L{pXe1&eJSFfcHBdAc};RKz8DD2tXXXxzPp zb&0hB^V!C|&1V}kWit{kSZ-iC+gQy$nYs9!!=oKXmo8q+?Dd^bjeTGBcOBimix)e4 zdV++?`IXq8?Wz8*rn`3WVpmVkrHh%}f?u@-viB`>lzRT?Vv&F>(D;kHDkf}Ci}7H| z%cy_ntG`?~!9Yz`!r+3i1b>;h)a&^9ZvX>bc8Vm%kgy?>K&nl?G^Ca%zQtLgo4Qwn}K#t9sdyMDVrl@#MVw-sU VZd$8P$Q1@4@O1TaS?83{1OQmQj$i-) delta 418 zcmdnPe2000il9M&Plzi+MuI^{fro=dLPEksBbEAS;cMXx42)-U9Z)6hB{e3sK<@6?-myEv`9}r}1+t2p6zWeZf_Wy?_tNht)@qPVF z&qwRn_kM1Fyl%zi^1vrCvU@k|%L+2@mAi3;sh&NreEx;Tw~>Dilu7>*Dd(20khA@u zSM|X6L-vNORjY~?%N0L(tCsotO{0G2X}KMqGLB6woI)xd6BHcl;Ve=Z2M;sHUuL-f zY5%_2Y&*U&ZEqKbLh*2~7Yr)2?6u diff --git a/public/images/ui/legacy/summary_moves.png b/public/images/ui/legacy/summary_moves.png index ab90958816069b895489fdb85ae72b19ca92ff59..abb499fdbb01c630b411859c7d314a4620af1fd5 100644 GIT binary patch delta 350 zcmZ3=@{?(TO1(;ePlzi61A~WyMF7K(42BOG9xoa=K6FfYuz=&miW@g}2)wu<@#4de z55KY=u>jREmIV0)GdMiEkp^Tld%8G=RKz6-hy)q&>CWHTm0_^i=1N2-&jO7T3M*XH zcTZvKj$K^Vduu6E!udX5hL(j49eT=-WF(Isa$Litr}F1%ea|$-*eBud#VVL%-dd@x zUVJJ&_F|}dci{JI-HA!Anb&5eyghqs(wfiu-A9u)M(Bv4Qre%Fr_?Pv@_*{juX1H? z7qBrfusO}x{!@JG6PFKKY*`JFfiN9mzs_xpsJpmm_Sd&}40#V22(TP%aTMVQZ<}>( zg44OD$~#u4ar)F({r&g&?B0xhJH^kMe_u4$PON)s2a>&Kb(iiG6y3i5+p_QLN^kfS3j3^P6((xYRR zbV2*du-ioq*9%y)c6rQcxOY{9-NDOR^w;}OUA&9|cN)I0uTRUl8Q4{G>ekhF8OysT zO|=g`c{)Vz`J6wx!84!V{(W3L=!)H{6&!CD7wPKvf8TC@$S(4tipLZNM`vBnB>SCu zxhW4bT(6i_@K|4wYT4Bz=j?T5U+BbqnY^tB7D+7>lgMg}2;gLjFnCcJ`*z>chtqG) zJ$*N3nUTHxzSQrhWzIdVFVzd)X|*JxeYern*D9~$XP)w%^fl%5G~MWJIX5?@qBE=_ zXJ#|b%$Av%ZN4%)C~_l0LH62uiLKjZz6bt({{8hv=ADJ=0s>dgU%r?hxV6;3U&*yY z-hIEPboAb*KmL7=U%Tz=f2UZ5iGmC2`>rqEnq%LVKSg7!SKtcyYs=odu~ePj$ht+t zNlEjY{`Rd6x1#&FwKy0Q{I9wTIPdCn-gK!{X42Gkk7vwzZ`F75Cy-%-=~CWJM$dzc uo_82M-)Hpvi_v#mk2~iT3+H$J@6UTFf95CaAz&mjc)I$rx~y|bXaWEalmZC= diff --git a/public/images/ui/legacy/summary_moves_effect.png b/public/images/ui/legacy/summary_moves_effect.png index 61567c9749bbc77e85df7f319413f716f2d2dc2d..f12e7e523b81df7b7af3ae72f09758f5405dde07 100644 GIT binary patch delta 189 zcmV;u07Czv0@(qOB!47OOjJbx002lpI8p%rYXJ9aO7DaS_l%V1r3mk>-rl_s@7@^i z_y70Rfd!%f0004WQchC*6eJZe2$G>iNQp$iAgH8d99lke z6&^6NJk*%(T1K^~q!9oer~s%Xqk{n0jS3h9RXRx4qBg1pA2t}(GOA@%%cz!7Eu&gS rwa~snLPoQPjK&pNO>2??8QlZ`(7`E7bS92I00000NkvXXu0mjfN(V{| delta 261 zcmV+g0s8*g0ignrB!4PUOjJbx002lpI8p%rYXJ9aO7C-PV}uCzjFji42=A@l-n|g- z-Wc!q|M&m@{{lL-9RL6T0d!JMQvg8b*k%9#0HsMpK~#8N?boplLLm?aU>pHQAS4d( zX1R*kvVw5~R$ztKTM;*~z4CVPq`*-4fJ^M|=ZDaI3FTon!Pta}UE0sh2Ck3;_fM#6@U88;Su`0;}wjb$4H z1H(>F7srr_TW@b})T6@e&byLK1&54EEmif%9yk?dn8>u7Kee~DD zt-I5U5;sQZTsyr=G5cQUI>A@l-b|hO)tmo7(#wt#mog=ws!RDBB0#E>fa<1IcL5<+ y_t$vsAJZlqYgttPoeGnKD0#i*%jf%LRs1^dW3R0{WqSwc3kFYDKbLh*2~7ZJK6iEi delta 502 zcmbQkG=XJ;O1*l3Pl&6)gaU;L9R?i*784eDI9Pa0*pV>fM#6@Uf(#(N;KL6P`2YWZ zmd5#51_s6@o-U3d6}R5rI_P!8K!EMRzC-(*1dn{)*ZAc{X}ls!(PyQ72Mi3%^*8Nn zv^(gq&ThucC6VHLI%e}N`fuWMInM4@+V0tJeBO75-|_9PkM}wK_Kk4((OJ(kx7)W& zFrGS1Cp$AM-RqZ7``^4@f@Nu%+4*Nu)6*-owKMX+9tgT|>(tCysdIDJ%-L!3xMJ&? z%~wAwiGJGE?zp%sHY&rpaChN}YZgY4%a0elKBzqFYsHt2=UK9~ht_1Pzm^lziP(@Z zcg<|``4vs9+(4dsc755VSMPs{i@(}>wzFm#-}B*Cv>7 zZ;lX?+Mc#9TQdFb%5B1)OC(H}_v&nvj?fi5nN_(V)H~m8wP@(fQ;D^4XQsKwPoGe< zzxyEH>aEWXhQ+u)n66_EE%#M_jO9df n6v%f6o4#7>t~npSYuR_kIqs)4=dB9xI&8 z^zEKBYyH_19SXlT6nZ)R$f~#}bm+BTss{(Ro0n6>gP&JwPK#}+`xc+gEx*}OMlJ1h RMF-Gu22WQ%mvv4FO#uD>I(+~D diff --git a/public/images/ui/legacy/summary_profile_passive.png b/public/images/ui/legacy/summary_profile_passive.png deleted file mode 100644 index 1ff9ad8e09a7045f310b1b0327d39fec0d8cc2b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq&Ne7LR^7#LPElaA3r|3u*?T? z7)yfuf*Bm1-ADs+l097P4ToIbEGHTh#U1r8O^) ziy?uqkjPW9ns-j0l5e>GER~!4b<%M@KZce@h5D|r~H>W>ulSzvsS%aX+B*_@9L{frTJAq8<)Hj;2&;VDuve7pE;>(}Q z19fzM?TI`8ao)F|;=9@>j&)*)AxFt zdOE`n7u((Mq=XpC-QP<2d|dj(iGe{^LMOBC%DTYaEiW>}|1vNu-(4fbz_2RTzF^5V RwK@hM@O1TaS?83{1OVq+oCN>? delta 545 zcmV++0^a?u1N;P#W`6Hxn~AwvYV}?ZDXIV~#(!X9x$_)$$0Z>RE7%;W zJ*lr1qcwAArj|$XJr6}x>M;!~aeBWd3q)p(b+_3OJ%6S~^zNhbD7u?Nah}7V(rtcy)co^Y@4rCjed)WF`+nv({&w~L5+A?y zq3NR*5UcH@Kvn^?ZfVh?MT-_KTC`}6u!5(<=M* z^OEQCwwZVA=T{cqck^ENI)+a^2k@H1(Dd_ynZtD+On<_Mv%}?nQ4>odz-sRl6;*Mx zCiBDcjca_-cP$_K+Mj*q_;o)&to3z2Kd@B*ty@~OXwjlYixw?fv|gnE|BsDaJ3!Y& zsQlW}s;acQhJVRM!R+h^WV=c>+4D)_8G^BNq0C@{_HeWrB)yw00000NkvXXu0mjfwB{1f diff --git a/public/images/ui/legacy/text_images/ca/summary/summary_dexnb_label_ca.png b/public/images/ui/legacy/text_images/ca/summary/summary_dexnb_label_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..a457468d8d0630acdec6da6a17d0174454a9f198 GIT binary patch literal 1618 zcmbVM&5IOA6mNqDKXWnQst8ScF^N6Z-P1EWUD)b4y~z%w*JT}a1qG|CYG#_9?rOVh zcV_n(4-!F;KtN2q1U8TaJmnAwA-N=%`~f-T5hjuH9vadPoEx>Q3p{k&hWt1hH)|2`D>)9Lx@~*wR)aVUG(SGhDfj@0a@J zl1MwqbQ}j67P2fI5PG&6OES>o?C2zd$1|FSi3~-o<`GFCmZhr!(@_agQiP4OahsrF zXh0HVmW;flA&}7mmn^5fVRA+h@9~JoG6SqxV3V$pBI}ARLKmMmB!JfXevxBSE>TpZ z$mGlllre6|rs%A-nsBthGqIdfKC=QekLJ}RxRG)qMcNXgHyPCYgtFRbsK+jZF%$jl zlb7J!Ba*wCWmpy6sOgs7GEHoo*s6VISlBQ|P+zdHy}B8+0u#13Kw)7Rk>rhFMsZuD z5rJ~Uh;%qg;*O>kO~eh+6DcGHcI6=p-^a~3lO(3R>A4zITna;mExT4_HY`f5Vz>2x z*fl)}NLjZ7+qT;dEe8Re_2y20$KP6)SjR%6wm;sjY<@LnhZgg7{->`h|PJG-_+9h#^gGeGR zF9qdtG8zbabymY~FGqXt17rY|XWt~;~4bI3L(yRlj5#wFR3RK@1(nX|iNcIHfH zW^X|uu0AMu0R>Y;O8a1?FX~HMq1a-fQXeD_)+YF3r4RK*qAiHNh-daPwh~(`4$RCs zv)}o?|NGB>{(U1qvwtZ1Sd?Lyq3m>KmcAG1{o;dz^qJmXc!9olIMatbhS~X0a7UOA zJ{)0~ftFcV@E39i03wzE4N}BH({d=9VaCRr4n#}XXN$OO+9_`H+y#y`jTASp<)oaG z#uamV*~N3qGX=D~gmi-&-^Y$M0VS}o580+wwLQ>GaUEVj$H8ZjV>=LkDaB0$g6u*r z&!&lsSxt!ZNLCd#p$l?c(iL?tt4MM}loFyG<0TnLaS+ql-o;Th*C>J6%+ozBI!kdC z-*mGRKBV1Zh$wE)}NH#X3>sav*DaKC}_eW>Oq=ESRPN za8XW{Ak=uQV~vlgD&~twQg~e}Ce^sEp;#RE*JlW-1^e1xZ~Vvg&$uQ%SFn2DJhcA* zcGzc`ppHDcabE9qOu}++R5kYnHiIw?T~#Cvm3U2;3?9m=#wQacorgsQ%7%gCs8k#i zgQGwfvE5OZNW8mZr$E898AQ

CWLJVFYZaCILjjSxa#!C^Bqtz0c--??{)nQNfh- zF6GySd8Fhwpo=HUbocI2++yE;*M;~`gPkPZ)<61i+LVG}*bV6CK)6}pIdov$Nt3P@cgx}2DP_NeVMUudd*`GaKHZc z-Pub=XQLMme0%-YrR3WutWEis#_HHl@biyG(B=7-@M`(`z~!?i&B-4cUnh4xyP~z= z#?{kRZ8Lgt{ruX@&d;8I?c#}Zw;s7t`{I=+ULM@2@7id;pI&=-?^@){qw9aZex$vg zua6#o>FAA*hwFudr&o{74PRS*XWN^Rft77fMUFFhW|SFbqRjs={rzy{kCSawIQaPC Y#qBq4*3RttH2Cw$PR(RKnOtoD1sggu#{d8T literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ca/summary/summary_moves_descriptions_title_ca.png b/public/images/ui/legacy/text_images/ca/summary/summary_moves_descriptions_title_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..a37aad953cc0781d1b609d57d55ff3568286f909 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^Za~b#!VDyJ4`160r1%4TLR=FP5`O&n@&EsSAOlFQ z$~dC~lwvLk@(Tvizsio>15y(_T^vIy;(B{8avnAiaMpjz#QT(0$Y!eGdA6u=n)zmeut1lk-r~R?X`o>F- zdrwSm&wc(bqWx(J$NuJ+JfTAq4|xA9&8l3VvZd0V@%-X!Dafg$Tw+CJ_ey z8!v3wP{L67@236#@Ph$~{~6Yt$@;mftAT4Zt3c|TU|nr39p(ee-X{Ft|IfA6_QaMA jq1rdXN_8(>h+<^0`mP_KvUSIKpj`}}u6{1-oD!M`>N3cf&b zrjj7PUG+WDefm$*bQ_{{5e?XWoAXt|RZOzxw6f{Z+gE+V{25 z+xeC}y4ze{R8#YQ-lx5fA9FKsuBrav=hv5i_kZQ@Cp#RY9{rHpcTe>A@$Xsl=FO3a z=)QCLxb>qyPv-slc=F`2M%HioRh%1L`+kcDD0F$RPCU3OG{)h`(Jf32Q+;e-dGBje Q1iFO5)78&qol`;+0Ni3={Qv*} literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/summary_moves_overlay_pp.png b/public/images/ui/legacy/text_images/ca/summary/summary_moves_overlay_pp_ca.png similarity index 100% rename from public/images/ui/legacy/summary_moves_overlay_pp.png rename to public/images/ui/legacy/text_images/ca/summary/summary_moves_overlay_pp_ca.png diff --git a/public/images/ui/legacy/text_images/ca/summary/summary_profile_ability_ca.png b/public/images/ui/legacy/text_images/ca/summary/summary_profile_ability_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..2d9e8ac317d97a38569a3148d5098eab4b7008c8 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^W$E6n}tEh%1mzNJ#kq|38G>$owG; zD8yV6oPWN_Xbw7OOHIv8Ti}T`pberbimYv~oOJecMrw1fmEZq(M?z~d= nHF%A>MUbD~%q8ne_kCh$Ytm-?$ocIM&^iWBS3j3^P6u^~?&kqV}9kYBipZuP?de_-glUOYG*sTui+Np9Y^zOA)&F8XAN=^wczo5~z;nxmdKI;Vst0DtFV$N&HU literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ca/summary/summary_profile_passive_ca.png b/public/images/ui/legacy/text_images/ca/summary/summary_profile_passive_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..a072b663d25480604ae4295c11b872248eed64c1 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf!VDy9I}1XA6n}tEh%1mzNJ#kq|38G>$owG; zD8yV6!FpF<#OknL|-SI?fLe78FnYNZj^LY#c zzrN|#;@qX}d?ksm)_J;A%g&N*M>j2&GtP}Ke|hKNv9g|hipy4rFMDhE>3xz|#;Prv jyS*D895hk+yO;mqEk)@^lP3xRtzz(W^>bP0l+XkKNrOj& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ca/summary/summary_profile_profile_title_ca.png b/public/images/ui/legacy/text_images/ca/summary/summary_profile_profile_title_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..a5ed0e3e169c949060a541c9c23dc8ec4a704b32 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^dO*yuN`2_>%Uu8$`0jWSw7srr_xY%_s$NrC_X literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ca/summary/summary_stats_exp_title_ca.png b/public/images/ui/legacy/text_images/ca/summary/summary_stats_exp_title_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..e7ac7268b54b4d78d893f8cb3fe573397fc7dfd8 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^K0wUF#0(_2F5G+t#0l^TaZN}_`2YVuggpI3!51jb zR1)MD%)n4K`K$$yx4_fIF{C0cx7U{Ikb{8Rb+ek5f}DxV{Caxd?;6#~XCIsMb5%k2LY^G|cnulcsKb0^TP44$rjF6*2UngA!+Xlwug literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ca/summary/summary_stats_expbar_title_ca.png b/public/images/ui/legacy/text_images/ca/summary/summary_stats_expbar_title_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..e9dfb10e5d62cbd9e2c24bef5d40012719e0a292 GIT binary patch literal 1600 zcmbVMJ#W)M7&fZ-DlmZ%LPE040s`mGcH+b*OjVLXBjHk&0A+&n`I1< zkdPP{KnO7~FfcG6CKwo4;2*HUA7E$Vbv`T#<nL%kbKr%wNr5e}8^&Qyx7&1b|mzYgsOP=Lr*0i3Y;wr9qSc zT2W5T3=+y#xKw@K31e6L^5(6khJmYHsd(5+>bx7yZ>0R<#zKp2tS~3gW=^Z81_THq zE~z?*dT~Yut~TT)u+F!UrVb%;#nonWhw8GosMbZw)k?|MnNc>?s#7v-?3m?~s)>y% z!c}BgIyMNliRGx{O9O9d&?ZZbvtwWIy4QPUl63#;!0s~gylGU^~ zbRICodpzQ?%m8Z?*rY3@$hzVe)Wz>j4j{FjSNPacOB59@GC8*fVT=>9B|2-ZCmb#D zOsuAi&#i&Xqj@w5si&Muk+y{BO$xO*k*wD1>airP|01*#AZduHQlsY zhD|CJV%1JylVCi8dLjth>pwutEyE&Km6)5M&@cg&^pD_xk+w)93gLzk?QoRD9ZfBg zNa~^|Qg96Ftf30eBh5IIG-kZna5ady6ovsYOoLXcc2%d)h`K?`w(bO&=@r9oQ>TXg zT9r=h8-lIob)DD;U{BkeGMkq5nqxS+<>&U;ujqko2ORshNoj3je<2OwT+!Zt^W>*3 zZwN9UW>Bj2@p-t&Z;V&HP#yLFp)BuhS7Uimd7zEA!!0uKcM*(e`&|yCzbW?!mWj6P z)0EG4AX|TECiE-m8D0Cm@V_hFmcoB-zJC`!PATisxWi#cA}tRE<>O>j5cFfMhX1}B zJrg+0vwT?$QuruFF^_>dg+cp#U=YEPbi-Fpe9zoInf78)5+SkUI=008Js=Z@JSf(ihgL#Zo=eLQvyMRt$@O1Ta JS?83{1OW5_U#$QD literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ca/summary/summary_stats_stats_title_ca.png b/public/images/ui/legacy/text_images/ca/summary/summary_stats_stats_title_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..426848af866727b303ff3acd2e512232b96c0c4c GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^{y@yb#0(_krg2;caRPioToV!!{{R0EAx}S1@CAx9 zl?3?(Gcc4*K5GHwZS!<-45^4q=5S@>KiDH6a_~cIz`c`x@_pjdF)%D6buEGfqv@{odd+_1gx2p~ZFP-B0c=B^un7`@T zgcbk4uHU=2^8f4quj9jR{QtFA?nK4G30spygM%-xa$UVkEF)uW#8uWLgO;Qwfi+DG YrX3Y#zqT000DZvV>FVdQ&MBb@03eTsGynhq literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/summary_tabs_1.png b/public/images/ui/legacy/text_images/ca/summary/summary_tabs_1_ca.png similarity index 100% rename from public/images/ui/legacy/summary_tabs_1.png rename to public/images/ui/legacy/text_images/ca/summary/summary_tabs_1_ca.png diff --git a/public/images/ui/legacy/summary_tabs_2.png b/public/images/ui/legacy/text_images/ca/summary/summary_tabs_2_ca.png similarity index 100% rename from public/images/ui/legacy/summary_tabs_2.png rename to public/images/ui/legacy/text_images/ca/summary/summary_tabs_2_ca.png diff --git a/public/images/ui/legacy/summary_tabs_3.png b/public/images/ui/legacy/text_images/ca/summary/summary_tabs_3_ca.png similarity index 100% rename from public/images/ui/legacy/summary_tabs_3.png rename to public/images/ui/legacy/text_images/ca/summary/summary_tabs_3_ca.png diff --git a/public/images/ui/legacy/text_images/da/summary/summary_dexnb_label_da.png b/public/images/ui/legacy/text_images/da/summary/summary_dexnb_label_da.png new file mode 100644 index 0000000000000000000000000000000000000000..ef081f493f3fec8a6b9f06500e85053c5109f6be GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`@dWsUxc>kDKLHGW{P@w>b~ykj z&QucQ7tFv=HumdKI;Vst0EOKxivR!s literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_dexnb_label_overlay_shiny_da.png b/public/images/ui/legacy/text_images/da/summary/summary_dexnb_label_overlay_shiny_da.png new file mode 100644 index 0000000000000000000000000000000000000000..92c2412f4266089cbd210e247bb3f97bccd0fbf4 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^2|%35!VDzMcUm6?QbGYfA+A7r!GeVU|NjHY7cW+P z_;5pab(Strl({6xFBnMwDm!uyNM(4sIEGZjy*+=Lx50piCGhiZVJ(N13@KJOL=LF_ z-R=|>(fN4I`Nit($0D<*Ka29$p1`L(;mRd0xtH6TLbbv+%&<>MdB!ov_b6W(`-^Lb k;?2L$Z$JkdDi8c-?BixValmdKI;Vst0Q0&~C;$Ke literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_moves_descriptions_title_da.png b/public/images/ui/legacy/text_images/da/summary/summary_moves_descriptions_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..79b16227bfe298a787406530b12d21c088bcb1b0 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^K0wUD!VDxA7O*4%DgFST5Z8o+gdabC{Qv(S$N-Y7 zGS27#rI<^C{DOh>ud*ZefYcOE7srr_IN!cT-a`gFEQ_bGYDp|Gl0EQfGsB2+4but-I-Lc5= q(!^(6XO}W^CKyYnNtdp<@Q3NWnnjUIa-25MeGHzielF{r5}E)Wn_^!8 literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_moves_effect_title_da.png b/public/images/ui/legacy/text_images/da/summary/summary_moves_effect_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..f2ac04e62c4b9c0861c03041e2c80c04131b2628 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^)~It5e%NL KelF{r5}E))yj)EH literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_moves_moves_title_da.png b/public/images/ui/legacy/text_images/da/summary/summary_moves_moves_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..f1732e3e2c0827b8f2ba16b129249c982203b69d GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^VL;5m#0(_m_B?nDq<8{+LR=FP68``H45Zt(n&1YTAAAl3ww<6PZfe zRaDrdcy9imv-pzkDvr>Otm{U}4+Iwn`sk=-tP=dGy3~E0zhbePu>4N3?aMAH-)2uN zI;2utd`r4@w!M+(_uQrPQ)bNmeP?6+ru7G-xVK9&go$quX#C44{yVo>QR@yT(BTZ8 Lu6{1-oD!MeyXA3~mfqTmY@ zXDSKu3ua&_n|#&+$aC~`aSY**P5$%$-U9=9`^T%5S-0ssYWV%)xqhgTe~DWM4f D=Hfi9 literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_profile_memo_title_da.png b/public/images/ui/legacy/text_images/da/summary/summary_profile_memo_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..48886d25e3944ae0c3893668616182ea74ddbd53 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0YJ>b!VDzmJW6E&Qv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15!<%E{-7;aiRTtb(WA zZbh9oF76c*6+Zj=?z!Om@N`IC{)U8`T`ON6Te;zC!UH!4Yc_`6>IU2VCiv(~xSab_ zGVFx8hghdqjDxRfE89utBVHnpjy2pldr;vOi#^l4`0u6NsRcO&Q=b0ao)^CKT(tei X!&Vjt>h=l&UBlq%>gTe~DWM4fakX9f literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_profile_passive_da.png b/public/images/ui/legacy/text_images/da/summary/summary_profile_passive_da.png new file mode 100644 index 0000000000000000000000000000000000000000..681ae3f1b5e0ed33043de0119dc848d319405e5c GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ^!VDyn9UPtkDgFST5LY0bkdW~I|9=R%k@-Uy zP>8uC$S)X3|0+9j4@iZ1x;TbZ#JQe+$a%nkqa|=*q=S*8vE!4N1$W-s2m5Ad?6a>c zP&-@ZvE(v`-0L!_m^-H){9S%UCw`K`#^jY#IF*|oJWgFYEztSCvq-1-;Rk%~?jj6d Z_s{N-{&Db><58du44$rjF6*2UngBilL-POt literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_profile_profile_title_da.png b/public/images/ui/legacy/text_images/da/summary/summary_profile_profile_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..83b8a1d5e99c698d40925b475801eb0acec196a3 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^dO*yuN`2_>%Uu8$`0jWq&7srr_xYTovoDBv%E*BfLEgX8dS>C#0K zb_;D3t}I%vb@krtu0kL69ZVg^CExhmZvOXuRZX?%lsP{vChiH+lYIBO@8gru3Fq~F h+a-CVH_0dGX`EEtu>Q!xH$Y1mJYD@<);T3K0RTdlN-h8Z literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_stats_exp_title_da.png b/public/images/ui/legacy/text_images/da/summary/summary_stats_exp_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..feae0c9cb90d2e9a3e13b3bcce149aaf7a8a2eea GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?b#0(^_rnATbDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJdDWgSjv*Cs$sD}B|G)45A7A^w|Nr|ZucRCP>%k5!Sva{P)&M($*<$uMmf5$JE7Z%n0ma}Sj68|Vf6vgSVmZ4>y}d{Ml~t^(CB)V|irU)cy_%81McZ}HwW#oDpfeae MUHx3vIVCg!09u$^?f?J) literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_stats_expbar_title_da.png b/public/images/ui/legacy/text_images/da/summary/summary_stats_expbar_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..78bfe5d97358f33dcb0bbc330188a1975d4a0fd5 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^+(69A!VDx6JGfJU6n}tEi0l9V|6kmYxUj*{m8+jQNIF20H70AhL)Al#r=vjvS5|OCYif=e` b-ucLdO<~oq?%iMl)WP8C>gTe~DWM4fKV>SA literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_stats_item_title_da.png b/public/images/ui/legacy/text_images/da/summary/summary_stats_item_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..2cbce6c3dcfc15dc6256dfcd2fda418474df0d03 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMo#0(@&cm#cb6i`>N3cf&b zrjj7PUFR(X)ztha3dl9=;M?eW9AcrQeBTq2q)C1{U`P34*t^ zuS_see!+Vy_`&j|GadW4IhNe0{bam;#j49m9HpDD8AfbY+flQnf7YzUO-2?UCp1YW zyfMzv;d?xp^{|P)DCPJMp&Nt!XlQ aU+_16_0MJ4%FhmT6oaR$pUXO@geCwde_7}N literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_stats_stats_title_da.png b/public/images/ui/legacy/text_images/da/summary/summary_stats_stats_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..ff97416c7ed4d40694e981613f0693ca9f82e93b GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^=0MEB#0(@AX7;ZIQak}ZA+8At3IG59hmfbADEI=! znM#8Ef*BafCZDwc^6ETY978JNk~`}E)cbU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_tabs_2_da.png b/public/images/ui/legacy/text_images/da/summary/summary_tabs_2_da.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/da/summary/summary_tabs_3_da.png b/public/images/ui/legacy/text_images/da/summary/summary_tabs_3_da.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_dexnb_label_de.png b/public/images/ui/legacy/text_images/de/summary/summary_dexnb_label_de.png new file mode 100644 index 0000000000000000000000000000000000000000..ef081f493f3fec8a6b9f06500e85053c5109f6be GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`@dWsUxc>kDKLHGW{P@w>b~ykj z&QucQ7tFv=HumdKI;Vst0EOKxivR!s literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_dexnb_label_overlay_shiny_de.png b/public/images/ui/legacy/text_images/de/summary/summary_dexnb_label_overlay_shiny_de.png new file mode 100644 index 0000000000000000000000000000000000000000..92c2412f4266089cbd210e247bb3f97bccd0fbf4 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^2|%35!VDzMcUm6?QbGYfA+A7r!GeVU|NjHY7cW+P z_;5pab(Strl({6xFBnMwDm!uyNM(4sIEGZjy*+=Lx50piCGhiZVJ(N13@KJOL=LF_ z-R=|>(fN4I`Nit($0D<*Ka29$p1`L(;mRd0xtH6TLbbv+%&<>MdB!ov_b6W(`-^Lb k;?2L$Z$JkdDi8c-?BixValmdKI;Vst0Q0&~C;$Ke literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_moves_descriptions_title_de.png b/public/images/ui/legacy/text_images/de/summary/summary_moves_descriptions_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..ea4827c081d53e533ccf57438b73f22a19b8a43a GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^Ak4wS3?yfWZ?yzc`~f~8t_cYVKYsl9|NlRb0VG#t zoY4VFF_#4S1q10{Wk>D-sX3l5jv*CszI}{bhYfg`_kLrRzRlcqn|+3cyu_#f_f0G_ z6Wk=cJ7Ugc8!1no&(kTrT$amfYK-J&&j|-^O!epPJ2G?aq}?yQ`1bX*?ee{r@~qjk z%{8B?bmJM8rQ+p_?|xbL@1uMF_HU0pSFlAc_q8hj6jh@A>$|JhuIdw3{8sPz=fsq7 y+!79Yy8DH*_QiR=3Jh;JIN36N=VWX;RUfz1-m+uSDt(|k89ZJ6T-G@yGywo(m1Vd9 literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_moves_effect_title_de.png b/public/images/ui/legacy/text_images/de/summary/summary_moves_effect_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..951e92818397e4ae618c7e34224f5487d65649ca GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^ra;WW#0(@=a^fcdDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJc?F&>jv*Cs$sD}A`S<_-p6^=vyYEyzPr|!bS67$s%e$YxcNgQ4 zT(+jW-M7o%=P?!EzCC;S`|P~?Uw4bHsrdfoS^e(Wx69wmd82rR+Rz5YHdjM!RgQu&X%Q~loCIGXZ BS`z>O literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_moves_moves_title_de.png b/public/images/ui/legacy/text_images/de/summary/summary_moves_moves_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e28d3dfe7ebb8640dfa880dc37e098d2fe9606 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?b#0(^_rnATbDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJdBvVCjv*Csx@Q!*8Vp1l9!lzPZ=PX0`Jkf2v%ns+^B)XO9y<3$ z#O20=$o53574i@(K%Wv);J+!@E-X zkUsOND%0M+UaYHWZu;Zv#TV<|{x6?n+)&B5mQk+rj(hRM%u9QK)-!mz`njxgN@xNA D-lzopr0E2}k!~g&Q literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_profile_ability_de.png b/public/images/ui/legacy/text_images/de/summary/summary_profile_ability_de.png new file mode 100644 index 0000000000000000000000000000000000000000..2b6bd055555aecc26a01a42da1798235717833c2 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^WAmuG8AZicv18zn=L~V^MjAsTzTuA1SF0WwLUu0 zaq;zzQzF|MdopxaIUA-Ne!uU@)5iO~|H9eps^`G6qjqKbLh*2~7aawO`}_ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_profile_memo_title_de.png b/public/images/ui/legacy/text_images/de/summary/summary_profile_memo_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..089668218faa27e9ff599ccc5c85959ed1b783ca GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^0YJ>b!VDzmJW6E&Qv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15)jtE{-7;ak>2$IS(5MIP0HdTgWW3oms{*U*WBNu&VSV zhOK8GbKdJ;{Ck4J=c7{=B%Xa6p;b3iTjz(Lh<|6UwZ)pr5sAm8Wvj$IOho;7jsLYW zr<~%L@WJYD@<);T3K0RWL-T`~Xw literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_profile_passive_de.png b/public/images/ui/legacy/text_images/de/summary/summary_profile_passive_de.png new file mode 100644 index 0000000000000000000000000000000000000000..681ae3f1b5e0ed33043de0119dc848d319405e5c GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ^!VDyn9UPtkDgFST5LY0bkdW~I|9=R%k@-Uy zP>8uC$S)X3|0+9j4@iZ1x;TbZ#JQe+$a%nkqa|=*q=S*8vE!4N1$W-s2m5Ad?6a>c zP&-@ZvE(v`-0L!_m^-H){9S%UCw`K`#^jY#IF*|oJWgFYEztSCvq-1-;Rk%~?jj6d Z_s{N-{&Db><58du44$rjF6*2UngBilL-POt literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_profile_profile_title_de.png b/public/images/ui/legacy/text_images/de/summary/summary_profile_profile_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..83b8a1d5e99c698d40925b475801eb0acec196a3 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^dO*yuN`2_>%Uu8$`0jWq&7srr_xYTovoDBv%E*BfLEgX8dS>C#0K zb_;D3t}I%vb@krtu0kL69ZVg^CExhmZvOXuRZX?%lsP{vChiH+lYIBO@8gru3Fq~F h+a-CVH_0dGX`EEtu>Q!xH$Y1mJYD@<);T3K0RTdlN-h8Z literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_stats_exp_title_de.png b/public/images/ui/legacy/text_images/de/summary/summary_stats_exp_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..fa702b4c223ac628a44ad8a6d1a37e42dbdfc281 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMo#0(@&cm#cb6i`>N3cf&b zrjj7PUFR*C%#|K^2n9dtYVR<;lE1d++VjqkDAjdl@d}b@6b0_sFQ($CyQ;YUw)bOl_CK zcbyrQQkzmWE6NH(-ak( Lu6{1-oD!M*{m8+jQNIF20H70AhL)Al#r=vjvS5|OCYif=e` b-ucLdO<~oq?%iMl)WP8C>gTe~DWM4fKV>SA literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_stats_item_title_de.png b/public/images/ui/legacy/text_images/de/summary/summary_stats_item_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..42e08b3e52ab951e4b91a20c99ab0efafe20c7f4 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^8bHj!#0(_A*@T_|Qak}ZA+8At3IG59hmfbADEI=! znM#8Ef*BafCZDwc@*+H4978JNk~w&L|9}7gcYpi&dWM;S>#wbi{`&i_m4fjDM)~*y zyUQ6J(jG8d{+z!)u34nTu48ia&j&ZH1U`4pi8*n2dtrj`lPCXeYyNVl9MaNT7s@TR amVrS%M3*IDWu_6(4hBzGKbLh*2~7Z~$wgBD literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_stats_stats_title_de.png b/public/images/ui/legacy/text_images/de/summary/summary_stats_stats_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..87438a5bd4ffc7d3d9430b0f6440a4ec9e3ca6ce GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^szA)a#0(^v58bN(Qak}ZA+8At3IG59hmfbADEI=! znM#8Ef*BafCZDwc@*+K5978JNk~`}E)cPU>-vEQTOF7=c8IM> aVqnNHQEyxGH8BBb34^DrpUXO@geCwqV?dz* literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_tabs_1_de.png b/public/images/ui/legacy/text_images/de/summary/summary_tabs_1_de.png new file mode 100644 index 0000000000000000000000000000000000000000..379768ea3103c68c25f7ca606aa3ca4999676fff GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^WbU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_tabs_2_de.png b/public/images/ui/legacy/text_images/de/summary/summary_tabs_2_de.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/de/summary/summary_tabs_3_de.png b/public/images/ui/legacy/text_images/de/summary/summary_tabs_3_de.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/en/summary/summary_dexnb_label.png b/public/images/ui/legacy/text_images/en/summary/summary_dexnb_label.png new file mode 100644 index 0000000000000000000000000000000000000000..eab90a91c7fc8dd67b9cf24a7e8c37dffd62b2d8 GIT binary patch literal 1612 zcmbVMJB-{!7&Zl`a8XbYLOM~690`G7c4q8-oJaA6WA|WJ!N+k~DTkoQcxJq7-P&X9 zx!b)HH0T;iB4`i=Qc4h_KnRI~K!cEIXsJMHsEFtgO&IUP%Hu8xSh79#eEDonv;6e3Wm#u>-Ojdom+Mofmdx||Kk3)z^;p(@qp+;gPnP#1*2kZ$Sk|Lo#r++< z6TC{fN@`4~P}U|%X3&;({=y_j)PLb!#93o)U%NnH=jFWW@RMMSqdFVAC{FW(+&ol%6w<8f{5)>J+~ z#Pd9a9ppIBAYgHjYBqssac<$EBMY9#nT}NoN{=j5d)l`R(^(2hR=G`!d6`VX(1c}( z)Nq;76exIw%l7ioG`QeMj$|TJT^KB>u-Q;)RSeY$uB+`k0+`YUK^5azE=f{_DD=j@ zNn>7+W6?$bAd_fY7HTi&a%11nJXdCu(RMDGR(W5k(V|gX3(BC~2G3rOQ=!JibGN}| zhiU2C4t5$4uR^EZCxq4sbylCp4#ju|4U~wZgL|P4bqFQS9Z)kcf@$_Zu;4UOdBRM( zal!@?W$C~MRS{`hjZ|&|8+PuLMG(+lT41}Nj@Z2LAZn<@>1+3)z63Orl}GyCyS z8mISZ_Y793NRL@A*9WFr4;UtN67_=Z-=FxyweBS1cMacvCq6GJAF^~HjYuN9Oa+y4 zGHVFByI0e_+oWd!H+ohsDl@!a=xXz8x{`&5RZyAwZ>vh)qDe)!{^m8FZ|;?>X3KJ)mEYu(?j{l5G`@cn0JBl!CAFHe2?%@Yy)d5qWSlJ(`A WfBw`TT)k52eQ#s4^TkV7-uoA*z5f^h literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/summary_overlay_shiny.png b/public/images/ui/legacy/text_images/en/summary/summary_dexnb_label_overlay_shiny.png similarity index 100% rename from public/images/ui/legacy/summary_overlay_shiny.png rename to public/images/ui/legacy/text_images/en/summary/summary_dexnb_label_overlay_shiny.png diff --git a/public/images/ui/legacy/text_images/en/summary/summary_moves_descriptions_title.png b/public/images/ui/legacy/text_images/en/summary/summary_moves_descriptions_title.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2b4d083760bfed09c6fae182fb0a997420f282 GIT binary patch literal 2173 zcmb_eU2NM_6iy{zTeraj0(DeqmisWK;n==$?AU5r+N510HC@*Rtz%o)>+9>pYGS*# z)1-YWAW=YTi%_5FC=!)GeE?|%A*O-WZ5k6oJOE+{_JV{E51UqvfrJ=;*ZCuZt{W4P z9A965=bZ2S-QySf`}S^ce55fD2y9RE#0SW|mt31S-$(ujhj;8Jw=H(hK{pWC`k;R` z1YSAb6bNie8mS>~DA}tZD;I>CrQ%>QXA^WF(Ar+KAsWRVrQ)<@pWfyXGO|9ux!bAeb7NO1ZLC$xn1k_LsXXl-4$+(7CoW(h8dM?58HLRVnJj=~k zw@_VseUkwa+GMh3V_hz}T+M{*b&V4@Dgjv+?WQJd%no4J$~y>mjT4$JzBjfKb1?KQ zCuLdLYNGn9l&M&ZdhCE&RYCN0g- zC+eXQ1_&u$Qo=wHA~!)v!D!Hfw*_lR(JdzjiMvJ)rZH=qX_~49QHfbu%OQpdyHJTm zGN~j?*Mla)iFlMI9tRCWQxH%EK@}s6$V(Cv!2)Jf4G0WUMJa+rBuY@O%Ev8~_w!nn z*N8k3gAgKt(IKxhnk0l6Rg@uvHIWN*9H%3WugdRp4ANIHd)InM{r~M@RZ9o)$R&w$ zE8Wov)0I`$X!G6lX#xWcBDg$|lK^O>70%DzXNl%#uyD{HVc`H4J&wrv~cMy-&7*M5(Rv_{_ zHA*ADM6pI!wvBc2d1v`3t1VrZCZo96?GSmZ%iCZ5iX*V z$^)7j_G1hfHADifM?hEr2=F)ztB%(bFSkNN=Q)#nrTdqe3rg@SMIE* z{+)w$Plf->l~PfbYm5D7*_Gba%>nQNi5_3N{KQ91FVBDV#ZwDEo?wrz9eKC- z$?&JAn|FShSepwzw0iZPeGTugXy3Km*!|(Jk3RkTPOd9`YGhj9^k#2!;p)SC=9bZ7 z=LZYZm*2VAGG)x`uXX3=8v~=q#v9JH77ugR?FTM2b*~J4KeI^P*!Jy_)s<@tQy-5# zcd+GT;IqaPR}N>@`QaI7YV3OC=il0YnwgzFHuv=#=g)SZy)@H&@6xNPmij>)`DW(X p>G98Z%|>6m_Qz5}Ji5HNb?=qecdQ;dzsvtXNObkZ-|ifF<}ZAE%%=bV literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/en/summary/summary_moves_effect_title.png b/public/images/ui/legacy/text_images/en/summary/summary_moves_effect_title.png new file mode 100644 index 0000000000000000000000000000000000000000..55fb0efd832da789da351d76a5e3c7eea57b224e GIT binary patch literal 1870 zcmb_dU5MON6pjyFcU!8UAf+ON)CWZ~H@W$nTsE%jWON72y6z5i`{tdSJ2PP?xoMKw z$?l?}PgQGC=#vQc$p^*0iLDA+@j(%!4W&Q^Io}QlK&)~@05`WFa3kOm`*mZYt-zL2A<{m+q zdOm2bW~<(lh_JANeb%CtJd8P75N7A{7?U-ci7na*B1gLL(I=7^_>Q#S@Dwku(QdG? znb4KZ#U|NYBepNiJtEHLh#LrLhQ&PWMJdW1X=oSmaWM@faR|xQ9BICAD6V=-VvQwK zG%BV{R2_--Xu{=6Ut((CO)t~ zhSIpZ>knDAkx*#puAvw zoZ%aSeS+F72{D%>$XN9CakI3?izr9!t1m&Q2S$@I2Ir(hNt0He5&IiYr0jBjOWE z+nhcnRFMr|*X62ZSh8iPW=l7HwPhQV^)4g*BCnJ6K3|VDLNIJ$8JdPB`<7mnahqV7 z=o+>yXz0}zoUDH;3HZLky<4_Z?6#sH&_a;%RBep+!wNk(9`yooSOW-?qP8806iKDN zG@cH&iNMV%7?~Y(DK~nZbdO*uYi9$T(D@FJ)(wgYT#I^&*RM}pgSbjyOP4iGC9-Df zP_FV^$ZcEqb<;4Y-m)jcuO@CFMMIh~DZc+sd>m5J#ZiayLlQ{0F6HK`aN8VQy^sDc zDWEtRN3{j6EW6>qOHNUq#NiY_nu}rC6Zl8jRcOScl<=PM*4gh)@qW{9xbw~GSMMKv z`i@V<>DtyeKmK#q?`t!)J;%DA-G1l&ubPj#rw{$|+R^zVhtKc*@LZ#E@RiQr$MauL zd@*VAxx1)=2^v32@d6!;b-nJ);%G$21~PVuE6 zqP&*N10t)C*NvQq4a|kS2WIJfO{A4EoKLJ(OuoA~#Ijz~@ts*a{Ysg20%zC3s=x z){i@BVhIzQI27faluBv=ZIa=_g{a;NZWEE#sYm@JW>`7HhP5CG;##nU>+JJ20a$8H zGmEh)7thN=#L37alhH}Yrs%k`6jE`T#=$~F=*S|Yxj$7CqEbY05=50CsCNrB)uqgr zO8kKt*SCX4{ODD1TE+=22vC9=kOlx$E3$+X1!>yj5=4^JhMIxxI!phC>PUk~QLllr zhOu#iZwR&ta)QXiOs?zUDiuS&D)3nnQ7Nbg5ev-NDJ>SJiN^gn!9Jnm<$}Nz=UmrD zwxT%DQV38Tf`Nfm1z6CrK;FT`G6rlNYEIX_9FT>yu3dYZ*+Z!43bAbf9YY61O6_%- z0?DA%&}GA+7j49NhiglPD64Oy&MtpnKb|h{evDKhx%uN|Ab>beO&t(kwR!<^K z(pf7AByBQk3!T^QCKb84jJDl2YLq$Mrv2KmIB=2%j%cyUs&|9t7Pq1v)WpN?W(_ew};tQkuI}6ialhz9Q9e2BDRNlqp#%I{`b;&xmX!^ z`K>cMdY{gT7xrKhbyQ*s-5hR{z{{>6@m@8{0m^Y9z7w0im7ed)G5 NJ~CN;@6hq*{|0a5ki7r^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/en/summary/summary_moves_overlay_pp.png b/public/images/ui/legacy/text_images/en/summary/summary_moves_overlay_pp.png new file mode 100644 index 0000000000000000000000000000000000000000..9babffc0429cdb23586f721d548ae334fd6df7b1 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB_Vp5048MPMmk$VFu(d zmIV0)GdMiEkp|?bdb&74Gf;HelF{r5}E+Z$t4N^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/en/summary/summary_profile_ability.png b/public/images/ui/legacy/text_images/en/summary/summary_profile_ability.png new file mode 100644 index 0000000000000000000000000000000000000000..6600db26802ed202ae0536dd122605998b551fdf GIT binary patch literal 1675 zcmbVNU5MON6iyX&tyH1)rwZydb=&%r|Ln}>vT<2wcHJpvyX=nL?Thx#&CN{MNp4KC zJF`pM2a6BBs1G8t_*j${>{FFiS@b~!6?_mB3Pn`#MPWtggNjm5<|lMz`lBJ4+$7&Q z=ljk%_slD^GtcbU{=jxY5O!3i%X4sl9Im0ETjBS$cLNV@w@1^56G6CRS9Wa^*5BSO z2)CT|tBdKP^DL%3kcrD{Ol}7epao%Uyd4p`#8Omabw9MlUqAX-M80c_3nPx|L?zbn zr`KXOzcy2)YfIE}#qp=mSQ~?bfTaYrgJziEwk>x2VpwOd6%lnH>5?r@WC78lGmA<* zW@tn%NK`X*RJ3HRpjx{5B+^x_sHjCnGbB~RY5^M->K!6Pi(L=Tm8W{K;K>#nX&PZg zX|-B%%aD0oS2WAA6jfJrT>^xZtcEFROJTC7@1e{R8v9Y|^AKeoNsTY3wg^nS5`rjq z8z#LpLBf!-5ac0}baDk`^b#@SoJ3m1~zs&z}dEZ60`_VUEJz+d@V6w6QCgISc_ksTH56ACYId|%J`L6HY zKQ?~ur`zsdIKKCbAD?^ZfO+?kmrp&s>)r?1Z^K`$f3tJ=>lcRCKi}Lueb_&_F?H$n zv74Jym*0GT=ilPSpYN59PF;HI#P`X@>!W*B z?75kBu~_S4R(3cX&TK-uYsazS=19D3dlVguB|FO=*2hW6^nHnS>4F3qMU4vyph9T_1A(CMK;Z?E0|EjGB&tmPVyQRZFwvlPZ`~LD zO0k77^bpUNN~L&7jJtlG7gSZ{0pua%D1r+rPKe8#6RdAo&`6;BmKR#C!$cNw&YcWX zEM>YR!SE`eA9MI5aGEE;Var=;+omgX$$)G+b z2(hD+J}t#k#c|6rkRS+z2ugyJbHw08Q|jP4L~L*%Az(vM1Vsc=W4-3;lTlt9>kYbI zRIq7Cipb?Uu*jJ?DZ#0xkmIm`36!CP6_{wO-|Sm-U*X~v+lh8tR1m1w3TUb-_5HAg zOw>n3i>cKB!g^HODOQh?N({C>ZLJW2%Tusqwp1Y0=ta`K1Pfdmk(( z*vS)mNb>BJOS!x%{C5sk+(-YH6h1l`muiduXW7;MEjvYN5^GcRXpV->o-7EQ z*^SyO{n}}@9X$HDUi|SyenOr-x|oA!f3F^VZS9VI+b7$9KKT5eoqTeprK(l$8-8Ns z?V+1?e)iDetB*hV=ZRAX_CCDrr#YJ)OFme+9n5t~o)V`j6?NImDZGQuSe~S_T literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/en/summary/summary_profile_passive.png b/public/images/ui/legacy/text_images/en/summary/summary_profile_passive.png new file mode 100644 index 0000000000000000000000000000000000000000..66f56ff435e5148fc3c48b19c28e38351538635b GIT binary patch literal 1503 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 Jn~xlO?qB$|S|0!a literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/en/summary/summary_stats_stats_title.png b/public/images/ui/legacy/text_images/en/summary/summary_stats_stats_title.png new file mode 100644 index 0000000000000000000000000000000000000000..5531819ef665bd054b5eb15d84500a1a4fe9dff9 GIT binary patch literal 1869 zcmb_dO^Dq@9M3AO>&o^}L8TXCsIZrf^eAYlllKwYy4%)bAjxF%o8SNc z`+v;5yt=Y9H@j z!j5jPcw}>(I8-@!K;Az(|j^n7BuIf4v2#{_>86JQr-92Hbv6Li1oCQ3Rb4J|c-K?SrPe&5MxS);F zahOEF)B%oFSkiJyLm(vuF776sp>ax7)?p!wvQ%JUfsNZd<7u03LtXs7!hi^^>lQY) z^d$@n6KS^C6EemD*%F<48!=NGEalyVu*IHmb9b&LM%9Gjj3*xFok^lrCoap?s=W7D z5K-Pw_gw~OHJq`EqHDSZw0WQ#9<-5VB4|IP=}6N?P?yud-?$2Dda#Tvh%Dy{s3;hU zGkjezCCKMVh=trB#4V=AQA?4FAfhVo@I)9E-WfwLTo=`&G{X^L^;$&{ic3L2k=-o& zI(9H%^A-Vi)AWI3YYgZ%(V*?y#4*TZeT|cDp4Z8GD%KOKW4&x?z@fwdCNUvs+FBX- z79%F6Hq>=ES$`x6L|@^~P4nd4mKOwC4pNb-jd4F5WzUR9oj@Me0Kz1%?TSM3q%x|E zr-LmbaAOKawEZ>{q}NFI2$pg`>*Itiv_!P7Q%vf1uBW(nZO0k4Ox=cMP@Xp&VA-Y# znoY|B%=Ue1*u-a06yP?F>l%V4GKxC=?~ad|NgGEkCN@b`xp^r!R)t$i`F9`vUsBY3 zXB^d*dUe?i|6R6=iX;xF#MYb-i!(ud6sHP{M3fS7X1sgqj3Le&(MJp3-fzw~>N}+S zW`2JA;-x+4ZnLwq`yl!B`Ooi~J=FO2*IOTzN`89$yCcoHSARNwV(EY<{qR-quPbU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/en/summary/summary_tabs_2.png b/public/images/ui/legacy/text_images/en/summary/summary_tabs_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/en/summary/summary_tabs_3.png b/public/images/ui/legacy/text_images/en/summary/summary_tabs_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-ES/summary/summary_dexnb_label_es-ES.png b/public/images/ui/legacy/text_images/es-ES/summary/summary_dexnb_label_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..a457468d8d0630acdec6da6a17d0174454a9f198 GIT binary patch literal 1618 zcmbVM&5IOA6mNqDKXWnQst8ScF^N6Z-P1EWUD)b4y~z%w*JT}a1qG|CYG#_9?rOVh zcV_n(4-!F;KtN2q1U8TaJmnAwA-N=%`~f-T5hjuH9vadPoEx>Q3p{k&hWt1hH)|2`D>)9Lx@~*wR)aVUG(SGhDfj@0a@J zl1MwqbQ}j67P2fI5PG&6OES>o?C2zd$1|FSi3~-o<`GFCmZhr!(@_agQiP4OahsrF zXh0HVmW;flA&}7mmn^5fVRA+h@9~JoG6SqxV3V$pBI}ARLKmMmB!JfXevxBSE>TpZ z$mGlllre6|rs%A-nsBthGqIdfKC=QekLJ}RxRG)qMcNXgHyPCYgtFRbsK+jZF%$jl zlb7J!Ba*wCWmpy6sOgs7GEHoo*s6VISlBQ|P+zdHy}B8+0u#13Kw)7Rk>rhFMsZuD z5rJ~Uh;%qg;*O>kO~eh+6DcGHcI6=p-^a~3lO(3R>A4zITna;mExT4_HY`f5Vz>2x z*fl)}NLjZ7+qT;dEe8Re_2y20$KP6)SjR%6wm;sjY<@LnhZgg7{->`h|PJG-_+9h#^gGeGR zF9qdtG8zbabymY~FGqXt17rY|XWt~;~4bI3L(yRlj5#wFR3RK@1(nX|iNcIHfH zW^X|uu0AMu0R>Y;O8a1?FX~HMq1a-fQXeD_)+YF3r4RK*qAiHNh-daPwh~(`4$RCs zv)}o?|NGB>{(U1qvwtZ1Sd?Lyq3m>KmcAG1{o;dz^qJmXc!9olIMatbhS~X0a7UOA zJ{)0~ftFcV@E39i03wzE4N}BH({d=9VaCRr4n#}XXN$OO+9_`H+y#y`jTASp<)oaG z#uamV*~N3qGX=D~gmi-&-^Y$M0VS}o580+wwLQ>GaUEVj$H8ZjV>=LkDaB0$g6u*r z&!&lsSxt!ZNLCd#p$l?c(iL?tt4MM}loFyG<0TnLaS+ql-o;Th*C>J6%+ozBI!kdC z-*mGRKBV1Zh$wE)}NH#X3>sav*DaKC}_eW>Oq=ESRPN za8XW{Ak=uQV~vlgD&~twQg~e}Ce^sEp;#RE*JlW-1^e1xZ~Vvg&$uQ%SFn2DJhcA* zcGzc`ppHDcabE9qOu}++R5kYnHiIw?T~#Cvm3U2;3?9m=#wQacorgsQ%7%gCs8k#i zgQGwfvE5OZNW8mZr$E898AQ

CWLJVFYZaCILjjSxa#!C^Bqtz0c--??{)nQNfh- zF6GySd8Fhwpo=HUbocI2++yE;*M;~`gPkPZ)<61i+LVG}*bV6CK)6}pIdov$Nt3P@cgx}2DP_NeVMUudd*`GaKHZc z-Pub=XQLMme0%-YrR3WutWEis#_HHl@biyG(B=7-@M`(`z~!?i&B-4cUnh4xyP~z= z#?{kRZ8Lgt{ruX@&d;8I?c#}Zw;s7t`{I=+ULM@2@7id;pI&=-?^@){qw9aZex$vg zua6#o>FAA*hwFudr&o{74PRS*XWN^Rft77fMUFFhW|SFbqRjs={rzy{kCSawIQaPC Y#qBq4*3RttH2Cw$PR(RKnOtoD1sggu#{d8T literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-ES/summary/summary_moves_descriptions_title_es-ES.png b/public/images/ui/legacy/text_images/es-ES/summary/summary_moves_descriptions_title_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..ffcae31894d0e1ed67909908144200a707e7b342 GIT binary patch literal 2193 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 literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-ES/summary/summary_profile_ability_es-ES.png b/public/images/ui/legacy/text_images/es-ES/summary/summary_profile_ability_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..b1b1a84ddcfaf1fc230884efb39eab064667c9d4 GIT binary patch literal 2059 zcmb_dPmI)57%wrdfV&Wc5Tiz#5|xd1Ui;c}Rp3P2eHl8(}(XsF5kmZ{s*Kvac&W!Ep1PITOm^De=@rvB#99i19*NsQQz+w>y6Q{=jKb-GR-1CH%N;<+MMN*uDY z#uQujL&D~B3Xeq@vZ|I76+wgY6D$-&6$mO2C0-D9LD40RO@AEq7FxDGU3oI~MemAS zBaQ-kRLK0FJXyFVOw8CcBxrG5~5|?;!M6qIq4H|yzM-BfLrnA>8 z9MIGnM&@H67uU^PMDh4M4I@p+Ky*}F2nd)ak>3h28K0*#cP7yUdO0L0_QRU*H~WQ} z>QiRRWp>v=$Fux)G^J?8I;QNTE(^oZt6mf%50h%8 z$kB*%j$`SfVnP*(7H{Q6nU_pi<4sg3@TQGSEI?b+u-e~W@o_7uYk$8*_bZZFK$5EP zf}~nJlx3Mm*i?8^lw}nYRkno8|NhXSeTABLY=`Rqp9uR_N;IN~7A{J=V=td<#ifs(0To$W zMtf%44ML5sBEKFi^6j{dLQ<;J>fJ`%;8xTlG`~7=l$W3_*t8Qc#Jmh;%xhE&yiAZO z5hU8l7c&ifCGn&gl%yF%vEK~;op@>)H;`8+^rH>9I}c@TT`{Nz1N!>^3Z*O0p0>ch zW!HUo(^tK(VLB?3Wj3SeO*Z9-N3#^t8TQekch1uJcdA+`)e2uTb0q-MY4mt%{MmGk12U-JKa` zrrm9MFcOSP;!90UG^nWwF$B@5F-3W>5mOSdMqe5dAsT{FFj}KTq6YEK{-tR7kvPfB z+`03ebH4AKbMJjV)$?HE@;jC@4Aa=vndqhOG`$-dmeOZ-?eQdiEps~`^%>@-Tf_SX z=9N9SG0f7Ztn@%IknBdfQ;1;0$&g5?;8HZhY}{0Gu|7lsHbb(O9pmN?eax|z5###h zBuKh(lCwI;JkmGTlh((Ebj{#4-N$Y$A?lz&0?d{QdD};&7+3a-=s27fIJOK4hGJZM z7?2%Err5aS5mt^Uye>+RRkety01Zm(SqMZ`0IDEHc_1R7ps2=HFOEj@3={Px9;n8m zUokEh1TGSUVzC%0Mk9`w6+}(b1ONpHd5YluQ9HmT-u7E+9umaYJLL7~V}#16CS*~xpB{CI&`W%0*wabJ2&LH)s&P@=BRFup zwBzJ!g-X>Zv++24PrqdwPSL-20h}aoKw=yOQ09TkLoqFCNEQ*4TLDA>RG>-6u*}hg z&^8`QX;DR@fydauASxBdJ<9G$vYkmOxZ=tERspo zW%~iPb<&lHaa3`{vJ36b^8fdTi6h&)ADJlMyuXhnG>H*WFrbX+{PLBa6G+b zx3`1&Z2t9=Uu^j8)c22xz}(e*Mq9xwnV!{WF06j`mfQar_c!N;X1+W)urIZD>&4e5&y2j)bad+RCwg9fa&CP6 zT=(avyh#4Qw+CLBoti(sY-*qW;v<8nj~qMt$=Y}SdUN}Y-?cIqmcZT3=f^+l?hnt_ Nu8y9>+xKtV`8P7%k4pdm literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-ES/summary/summary_profile_passive_es-ES.png b/public/images/ui/legacy/text_images/es-ES/summary/summary_profile_passive_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..885453e3e9874c1a04fb25952324292a7f03692e GIT binary patch literal 1834 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 T=C}LV|AX>q)ml3E%<;bgudBG? literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-ES/summary/summary_stats_stats_title_es-ES.png b/public/images/ui/legacy/text_images/es-ES/summary/summary_stats_stats_title_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..2233461522c4dfcf2279b5cae51cfff1dcbfc942 GIT binary patch literal 2532 zcmb_eTWl0n7+#{0i=e?00~*3)DnX)WXXea((uI_6u?=h?u(35>!kKf1teO=f52 z%=dr){Xgf8m2J<=nD*GTSS&W9wI#WV-JfUI^eGQSD_ z$aSPva!sC3IW?{UEGdxF&A6nACRCp0peX5rs0)$|M9C60OE$Uck7wF^;#jMaORKur zTY}GoVZjoFVzC%6%5l%{6eQC$1rZ7m0)_xVZ$3mNkPqrd7?L!=zFP=gFV97c$o9I! z1kWt3xR5KE=DeufdtoZg>FAvR!*=$vouHZVZg9b4O_@~p%-Ml zaj0vbZ&AQPn@ZJmjA=_QS5py$%{|PGYCy(B2kG7d6;{!}>-I5i?qO!uN8S{yCZD3v z^V6P}9ZA&65tF&5Chp00H&47`uy7QdCQ(QeJQSe{L<2xMEoqjjSd#XX2rW^pKvN!Z zo!;A^N?Ot_Xjo9X1wguax*d$YAS>d!GP)#1PW0^U^_$yvSS#EgH4-gVuKL10u!oq*(hm6(TSny z1SmSPfhaO*q^b&#Wlh0YL_{*l_|hs;O-P6V3>9lYa}*O8rpXM@Riv9D#t53@OKU`h zng%siT#5lyQz0zCstl+?WfRJhEE8>fX(UJVHUcaFG9WsmKn_L#D>5>5s49jH$Ct)7 zRAq(8KvNV9Y*W#JAsHB$22(D|l7pc%f%ILJ#wh7>^ef2|CeCtsC|E6Sl=a?fwpP=% zwY+iVIbb0i&9?-PqsFF$uP(b|biv(KafP;+p^S8bmao79&k2jjr;VMgW9~3egz-!d zP|w7MQ=%$RlXRdPvI$g{Ct%yE3aI8dMAooFB{qb{F&v7Pq*!uoR{eLwtIRlq@|~1z zlmdV6uH4-u8q<}3&(i7i?8@Ip?W8P;iAs+?s4mcMJ@*pM0o~oBl)p#lK#)hj~YD|9O_sw{z;lCr<4@{@R<{k2wSB z)9LOn4-CD0^@_8ry(9bRLH?uj?%)~Yh`g-b`Dw?{CgHMv;ny2yd%a)M7q%`cZZ=xK ze|y`^;ZH8EJ=P$}bI$E$`#-(<`Eu^O{0eUlzI9?+=J?0&9k_4PyzQw!>Ibw_-@Utc!8aTGUl*RJyS#7b zjP>V#Cp+fMuba8z^sdd9*8iF5ebU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-ES/summary/summary_tabs_2_es-ES.png b/public/images/ui/legacy/text_images/es-ES/summary/summary_tabs_2_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-ES/summary/summary_tabs_3_es-ES.png b/public/images/ui/legacy/text_images/es-ES/summary/summary_tabs_3_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-MX/summary/summary_dexnb_label_es-MX.png b/public/images/ui/legacy/text_images/es-MX/summary/summary_dexnb_label_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..a457468d8d0630acdec6da6a17d0174454a9f198 GIT binary patch literal 1618 zcmbVM&5IOA6mNqDKXWnQst8ScF^N6Z-P1EWUD)b4y~z%w*JT}a1qG|CYG#_9?rOVh zcV_n(4-!F;KtN2q1U8TaJmnAwA-N=%`~f-T5hjuH9vadPoEx>Q3p{k&hWt1hH)|2`D>)9Lx@~*wR)aVUG(SGhDfj@0a@J zl1MwqbQ}j67P2fI5PG&6OES>o?C2zd$1|FSi3~-o<`GFCmZhr!(@_agQiP4OahsrF zXh0HVmW;flA&}7mmn^5fVRA+h@9~JoG6SqxV3V$pBI}ARLKmMmB!JfXevxBSE>TpZ z$mGlllre6|rs%A-nsBthGqIdfKC=QekLJ}RxRG)qMcNXgHyPCYgtFRbsK+jZF%$jl zlb7J!Ba*wCWmpy6sOgs7GEHoo*s6VISlBQ|P+zdHy}B8+0u#13Kw)7Rk>rhFMsZuD z5rJ~Uh;%qg;*O>kO~eh+6DcGHcI6=p-^a~3lO(3R>A4zITna;mExT4_HY`f5Vz>2x z*fl)}NLjZ7+qT;dEe8Re_2y20$KP6)SjR%6wm;sjY<@LnhZgg7{->`h|PJG-_+9h#^gGeGR zF9qdtG8zbabymY~FGqXt17rY|XWt~;~4bI3L(yRlj5#wFR3RK@1(nX|iNcIHfH zW^X|uu0AMu0R>Y;O8a1?FX~HMq1a-fQXeD_)+YF3r4RK*qAiHNh-daPwh~(`4$RCs zv)}o?|NGB>{(U1qvwtZ1Sd?Lyq3m>KmcAG1{o;dz^qJmXc!9olIMatbhS~X0a7UOA zJ{)0~ftFcV@E39i03wzE4N}BH({d=9VaCRr4n#}XXN$OO+9_`H+y#y`jTASp<)oaG z#uamV*~N3qGX=D~gmi-&-^Y$M0VS}o580+wwLQ>GaUEVj$H8ZjV>=LkDaB0$g6u*r z&!&lsSxt!ZNLCd#p$l?c(iL?tt4MM}loFyG<0TnLaS+ql-o;Th*C>J6%+ozBI!kdC z-*mGRKBV1Zh$wE)}NH#X3>sav*DaKC}_eW>Oq=ESRPN za8XW{Ak=uQV~vlgD&~twQg~e}Ce^sEp;#RE*JlW-1^e1xZ~Vvg&$uQ%SFn2DJhcA* zcGzc`ppHDcabE9qOu}++R5kYnHiIw?T~#Cvm3U2;3?9m=#wQacorgsQ%7%gCs8k#i zgQGwfvE5OZNW8mZr$E898AQ

CWLJVFYZaCILjjSxa#!C^Bqtz0c--??{)nQNfh- zF6GySd8Fhwpo=HUbocI2++yE;*M;~`gPkPZ)<61i+LVG}*bV6CK)6}pIdov$Nt3P@cgx}2DP_NeVMUudd*`GaKHZc z-Pub=XQLMme0%-YrR3WutWEis#_HHl@biyG(B=7-@M`(`z~!?i&B-4cUnh4xyP~z= z#?{kRZ8Lgt{ruX@&d;8I?c#}Zw;s7t`{I=+ULM@2@7id;pI&=-?^@){qw9aZex$vg zua6#o>FAA*hwFudr&o{74PRS*XWN^Rft77fMUFFhW|SFbqRjs={rzy{kCSawIQaPC Y#qBq4*3RttH2Cw$PR(RKnOtoD1sggu#{d8T literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-MX/summary/summary_moves_descriptions_title_es-MX.png b/public/images/ui/legacy/text_images/es-MX/summary/summary_moves_descriptions_title_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..ffcae31894d0e1ed67909908144200a707e7b342 GIT binary patch literal 2193 zcmb_eeQ4Zd7(bcJ+Bt>kbc|KAbOW`^<;{D!h7%akDAP?T-; z12Th&UM6Nagb4>F4hte=WF;s_K!M^m1_D9mfy@gb4hSlc)R4kdek_gVXu8@Lf2XwGgh?HbP}o60$7XO%`p!_Yv0`b}(rhp)?zPHMSaa2=Xi^ zX<6B7p?a&7nOKZ@c)&0$t4G;wK0~O}6`HpUb1mJ=BZsu6Y3*+?8vOOByJ%!(;zW*sND7J^ z)KXzT$B;{fXrlE942uv$frL?2_)_BKQ7WyJ09L2&zZ0*d6lai`CUnW?*;|)#b2Iht z8Z5gi{9jT^OK`PCe4yVcfes=l7lQ z)?~+L3s3I4d!DKL=B+RPy#0@NclXQQ^qW_Vsm{jUoiDd`o$h|1#U9FivhT!}-=~K6 zy>o8sy7#{Q;pEi)*7+m9<}c2w>)#(ccch`Po?W;!`E}#fx#6D`X3s%DCPrRs*x0aX zgY@GUtC}WHOc(1H%?FR3`S795-BaQfajq*_w;vzt+JCz7gEh%Rzm4PiRozb%XWRS6 zRxbw8`Ck&JE*(F0^wpUcGcOH}Y?FkYXD^S>A1}^~o|VUDXJ-}}=VcS-XQf>$;uNwGZOW&7GOBGr2Lz zZf3XsArviW1)sF|AP6me>5C|pLRUfXp#>@UQbDC4J``&eL`#vyo0&=M&vv^O14(X@ z@0|0UbH0;%cxrOb`oYHrIgVRj881(>yTs0cfpzTa9XTej+XKP)^AX2AxG6pF;f{Xz zD97FZuveRjXQ~qr({=&5)FFjVJ78#z8`|9o5S}G5?~sP)7lkXQmjvE(i^6`rDp!LN zX?o*}A=$e)S;LF7*mi~8!~9SOG6!uEBfisa`4Q|Cg|1)7*6C|W;Jc7`wkV9G0r{Eg z6knnt;q`(cVnqYIX%`ejwt=>b2eM*HvMDL5C@WAlplb8|LtxQDw+^SvPxoW7r=rk| z;{Zxhk|c#hEzqzbDYk7(GLQfe8A6N}{1|maKiZagD3b_>UJ!fK=Tnc!p>uIjU`%@{ zw1eEOAN9+`3MO?>ASneoO{oiXagGb-!d5r9izU(`ZQ{of!zwv8XwsNQO?n&G`R5w~ zu+mnmd5jggwA*=zC?1<5n+k8XvhLHc50VJwF)bK6eAy#O1UVo zj0>LULRmwqW2-=vP1g`@RWn4#HeC^6$Fxb^L;$#%eVO99w6B@H%j}VgF#-+}fuXCS zYigE=>KKVwQ;}@~U9%jJ**_b4Y_3r2uKh6m|C?dvWrSrEvBpLH=@><1chXz!Mb+`aZ9(O9-;ZwiK_rv7&w}!stOiWLj$74v?11Q&D9KD zCz@ktiQh_Ghq4M)JsXDqPP|`I+(dqZu%EUh+LIeEaKnm)~3-Jay{J6U&#rPd2~sGP(Btk5`W; zzkHHxSw8#u`4b->dG*f=a~rmP#a%l0_{A^wefHa#*LE2{TuDB%6zh>CW9aa`hxRNh voAhqOLJ^O6Bzju4ny-lG|XnQgdA0XF0ax^sDM$UsrcON2`Mkn!@7Yc3N85~|R2kxrMd_{} zAT^vyQ!(4cloXCIh!c5AR>E8aD7@H4@qm+AAhVpn08RxFRZytvhbGZn-B1VOk5prk zyC|LWeMe>4VzC%53SryLvYetQEZ|w5X9$AvrYs+p7|Uy^d5B{Vxu)ZrwnYUVp=M9` zQJOHVNGLdUx0Y8;6G<3bf)2}tK_ICN)KMMhOt|@Sa2>HYj|J8!!rFkvT@S)@{G((-(0 zA)JgyX`(o6n!1X3NdpE#jG|zPQQAeaf|AAn17MDmL?k1vW*@iFM6j#kV&C={(gH|9$l`dOlEy&Q&MVUxzhXP}0VuVo)PGcYkF)#5Vl=;Z|))7vI5F(K= zAZIYT9Hc0sKnCj(AOS$K54csbve^&lRv^QX%Fph6V%d6Y&$ zfn%MnJ~r2=hRy9}#ceT%iPH^AzXJ1Y!!JS?cV$WC+@P`8^{9Jra%19H6XgitAtMNi z!f3ikYMB!iMiG&OMIK5B@-^XW5tjs26l;z6--%aKigM7(VlpsT`sSrsS`WE0De$e0S2_4!C{>Jt`QBug%tpCco^f05aHJ{j-IBtD-X z+S(L*VB0T;=2u$PA6`k1o&QGN`^6J44x_%I%+Pa3zJL5+=Z{ym%m(YJ@WJiOR=waY`bOW(!=6=PtN}I z#$w}Q^OeiTUuaYI?P$C6{kD>O*S9>HyE1d~(GP##lUr(Q_R@R7Cl5V8`1ah)h{Prr z_spTw)7r%|-M_uG5HI6LTAUyEc4Gf;HelF{r5}E+Z$t4N^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-MX/summary/summary_profile_ability_es-MX.png b/public/images/ui/legacy/text_images/es-MX/summary/summary_profile_ability_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..b1b1a84ddcfaf1fc230884efb39eab064667c9d4 GIT binary patch literal 2059 zcmb_dPmI)57%wrdfV&Wc5Tiz#5|xd1Ui;c}Rp3P2eHl8(}(XsF5kmZ{s*Kvac&W!Ep1PITOm^De=@rvB#99i19*NsQQz+w>y6Q{=jKb-GR-1CH%N;<+MMN*uDY z#uQujL&D~B3Xeq@vZ|I76+wgY6D$-&6$mO2C0-D9LD40RO@AEq7FxDGU3oI~MemAS zBaQ-kRLK0FJXyFVOw8CcBxrG5~5|?;!M6qIq4H|yzM-BfLrnA>8 z9MIGnM&@H67uU^PMDh4M4I@p+Ky*}F2nd)ak>3h28K0*#cP7yUdO0L0_QRU*H~WQ} z>QiRRWp>v=$Fux)G^J?8I;QNTE(^oZt6mf%50h%8 z$kB*%j$`SfVnP*(7H{Q6nU_pi<4sg3@TQGSEI?b+u-e~W@o_7uYk$8*_bZZFK$5EP zf}~nJlx3Mm*i?8^lw}nYRkno8|NhXSeTABLY=`Rqp9uR_N;IN~7A{J=V=td<#ifs(0To$W zMtf%44ML5sBEKFi^6j{dLQ<;J>fJ`%;8xTlG`~7=l$W3_*t8Qc#Jmh;%xhE&yiAZO z5hU8l7c&ifCGn&gl%yF%vEK~;op@>)H;`8+^rH>9I}c@TT`{Nz1N!>^3Z*O0p0>ch zW!HUo(^tK(VLB?3Wj3SeO*Z9-N3#^t8TQekch1uJcdA+`)e2uTb0q-MY4mt%{MmGk12U-JKa` zrrm9MFcOSP;!90UG^nWwF$B@5F-3W>5mOSdMqe5dAsT{FFj}KTq6YEK{-tR7kvPfB z+`03ebH4AKbMJjV)$?HE@;jC@4Aa=vndqhOG`$-dmeOZ-?eQdiEps~`^%>@-Tf_SX z=9N9SG0f7Ztn@%IknBdfQ;1;0$&g5?;8HZhY}{0Gu|7lsHbb(O9pmN?eax|z5###h zBuKh(lCwI;JkmGTlh((Ebj{#4-N$Y$A?lz&0?d{QdD};&7+3a-=s27fIJOK4hGJZM z7?2%Err5aS5mt^Uye>+RRkety01Zm(SqMZ`0IDEHc_1R7ps2=HFOEj@3={Px9;n8m zUokEh1TGSUVzC%0Mk9`w6+}(b1ONpHd5YluQ9HmT-u7E+9umaYJLL7~V}#16CS*~xpB{CI&`W%0*wabJ2&LH)s&P@=BRFup zwBzJ!g-X>Zv++24PrqdwPSL-20h}aoKw=yOQ09TkLoqFCNEQ*4TLDA>RG>-6u*}hg z&^8`QX;DR@fydauASxBdJ<9G$vYkmOxZ=tERspo zW%~iPb<&lHaa3`{vJ36b^8fdTi6h&)ADJlMyuXhnG>H*WFrbX+{PLBa6G+b zx3`1&Z2t9=Uu^j8)c22xz}(e*Mq9xwnV!{WF06j`mfQar_c!N;X1+W)urIZD>&4e5&y2j)bad+RCwg9fa&CP6 zT=(avyh#4Qw+CLBoti(sY-*qW;v<8nj~qMt$=Y}SdUN}Y-?cIqmcZT3=f^+l?hnt_ Nu8y9>+xKtV`8P7%k4pdm literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-MX/summary/summary_profile_passive_es-MX.png b/public/images/ui/legacy/text_images/es-MX/summary/summary_profile_passive_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..885453e3e9874c1a04fb25952324292a7f03692e GIT binary patch literal 1834 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 T=C}LV|AX>q)ml3E%<;bgudBG? literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-MX/summary/summary_stats_stats_title_es-MX.png b/public/images/ui/legacy/text_images/es-MX/summary/summary_stats_stats_title_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..2233461522c4dfcf2279b5cae51cfff1dcbfc942 GIT binary patch literal 2532 zcmb_eTWl0n7+#{0i=e?00~*3)DnX)WXXea((uI_6u?=h?u(35>!kKf1teO=f52 z%=dr){Xgf8m2J<=nD*GTSS&W9wI#WV-JfUI^eGQSD_ z$aSPva!sC3IW?{UEGdxF&A6nACRCp0peX5rs0)$|M9C60OE$Uck7wF^;#jMaORKur zTY}GoVZjoFVzC%6%5l%{6eQC$1rZ7m0)_xVZ$3mNkPqrd7?L!=zFP=gFV97c$o9I! z1kWt3xR5KE=DeufdtoZg>FAvR!*=$vouHZVZg9b4O_@~p%-Ml zaj0vbZ&AQPn@ZJmjA=_QS5py$%{|PGYCy(B2kG7d6;{!}>-I5i?qO!uN8S{yCZD3v z^V6P}9ZA&65tF&5Chp00H&47`uy7QdCQ(QeJQSe{L<2xMEoqjjSd#XX2rW^pKvN!Z zo!;A^N?Ot_Xjo9X1wguax*d$YAS>d!GP)#1PW0^U^_$yvSS#EgH4-gVuKL10u!oq*(hm6(TSny z1SmSPfhaO*q^b&#Wlh0YL_{*l_|hs;O-P6V3>9lYa}*O8rpXM@Riv9D#t53@OKU`h zng%siT#5lyQz0zCstl+?WfRJhEE8>fX(UJVHUcaFG9WsmKn_L#D>5>5s49jH$Ct)7 zRAq(8KvNV9Y*W#JAsHB$22(D|l7pc%f%ILJ#wh7>^ef2|CeCtsC|E6Sl=a?fwpP=% zwY+iVIbb0i&9?-PqsFF$uP(b|biv(KafP;+p^S8bmao79&k2jjr;VMgW9~3egz-!d zP|w7MQ=%$RlXRdPvI$g{Ct%yE3aI8dMAooFB{qb{F&v7Pq*!uoR{eLwtIRlq@|~1z zlmdV6uH4-u8q<}3&(i7i?8@Ip?W8P;iAs+?s4mcMJ@*pM0o~oBl)p#lK#)hj~YD|9O_sw{z;lCr<4@{@R<{k2wSB z)9LOn4-CD0^@_8ry(9bRLH?uj?%)~Yh`g-b`Dw?{CgHMv;ny2yd%a)M7q%`cZZ=xK ze|y`^;ZH8EJ=P$}bI$E$`#-(<`Eu^O{0eUlzI9?+=J?0&9k_4PyzQw!>Ibw_-@Utc!8aTGUl*RJyS#7b zjP>V#Cp+fMuba8z^sdd9*8iF5ebU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-MX/summary/summary_tabs_2_es-MX.png b/public/images/ui/legacy/text_images/es-MX/summary/summary_tabs_2_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/es-MX/summary/summary_tabs_3_es-MX.png b/public/images/ui/legacy/text_images/es-MX/summary/summary_tabs_3_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/fr/summary/summary_dexnb_label_fr.png b/public/images/ui/legacy/text_images/fr/summary/summary_dexnb_label_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..5477e3385a8c5fe552c6e601a21330829e7e4f13 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^AT}oxGmtDh5!wLa1o(uw{{R0!AtB+%j~@)FqPu{C zj3q&S!3+-1ZlnP@8lEnWAr*0=hc|LEC!19zF>?UP4j literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/fr/summary/summary_dexnb_label_overlay_shiny_fr.png b/public/images/ui/legacy/text_images/fr/summary/summary_dexnb_label_overlay_shiny_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..1640e46caa0df7c7a07d9fcf57efadc1a5e1b7bd GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^2|%31!VDxg>U!n^DgFST5LY1m|Ns953ld(uSn=V* z4HgY?XP^*MNswPK14G&5vlc*JhNp{TNJZS1a|byY6a<(LE)ZS9Y-xSt^?q~RgA964 zECp`n{h24=vLKxAkavJ+WAEf6J_k7*R~i+37oYR(*$g%YfdFVdQ&MBb@05r`ud*ZefK-R4i(^PdTxfqI=V1dLmaA!vZDkEtVjaG0cG!8pe%YxG zwGg{`+bsN^xa?D!0ejBkv+L{SsCZdn!9^)hvtWz z+-clzmbZP<+i@pnYFK5~>HCZ4i+0(1J4Bw-(LOGobMsBuL2hZcDc4RrPY$}YNJnIr eu;AvE=J7L{E$8#R;=K)Y6N9I#pUXO@geCyjmdKI;Vst06>yRlK=n! literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/fr/summary/summary_moves_moves_title_fr.png b/public/images/ui/legacy/text_images/fr/summary/summary_moves_moves_title_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd7d72c3071b472398528df32a2998f7062a603 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMq#0(_Y&kc?OQk(%kA+G=b|4&Fr0Fqbu8KQxL zj3q&S!3+-1ZlnP@rJgR1Ar*10rwzFd2XGuul=fH=ep2%mpRCp1hWv`{lbRTfUkCW# zd^K%lJ>gYlDT|$8Ap(XPNIhA;D>^z3CjsnFvLZC;iJsk30-i z`0f=j#l>)PwpsUPruTAZHvZ<4Gf;HelF{r5}E+Z$t4N^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/fr/summary/summary_profile_ability_fr.png b/public/images/ui/legacy/text_images/fr/summary/summary_profile_ability_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..3354b40adfe7f980b3cab343b122f815dee8ca47 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ^!VDyn9UPtkDgFST5ZC|z|0g6Q0C^BbM!Nky zAcwgm$S)X3|0+8I;`)2KIEGZjxprUVZBP(l?iNmX#A4-?&v0@3f1giEE!*t(K1nJ5 z={TGBkej2Js8Y@Ii5eP#d@hkE^7aVd+<(JDO=(%g^p3gGFM9TtFM0NpA(uhSls_GYzzeZ@B6RXP8Ud$tu(iFfxj@62p3Yi=zy zj;Of%e_v_B!@uYMy|n)q&M5k<`s#6Zp?}-6U%py*cXb0##|LJ+4Iiwyzde(^#_Pbw z93k;y(qHe_@#XLTf6f2<`ah7>9O7QMHtOiotFyMQ$i3PX8q*zCs++~kmCVd%(ZYCf XR^3C#t)4PKKQMT@`njxgN@xNAH1UC+ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/fr/summary/summary_profile_passive_fr.png b/public/images/ui/legacy/text_images/fr/summary/summary_profile_passive_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d2c98a21c10d38cd64160d9354cba460ec6b5d GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ^!VDyn9UPtkDgFST5LY0bkdW~I|9=R%k@-Uy zP>8uC$S)X3|0+9j4@iZ2x;TbZ#F?JC$lIVG(EPBvpz#r#AHz!S8N2_ce`0T~<9{;A zY}K!gp{h!AZ;QKYO+Rqd|CfJxX+c7}?qz%1&K;XgBPvYRnsi0EF4lT}a?;bw%+FTt YtvV$gJ9o|&L!bo=p00i_>zopr04g~|PXGV_ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/fr/summary/summary_profile_profile_title_fr.png b/public/images/ui/legacy/text_images/fr/summary/summary_profile_profile_title_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..bccba2d87df0c5513bfc60bfeb0944bba564fd77 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^dO*y<#0(^VE2;JaDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJdC8tGjv*Cs$sD}B|3B{kd;I_R|8fQlmW8k5_C|ltx~k35{{Eo# zzU4gp3UhWWfB)p4xn0czhD)Dc|F_y1zLsCU$)Zp@?)y<&f!a?ZXA*0^{JPHkv;Mz4 mgJmEOx7gZ<16#AMGBLE>GY@3^_P-Qp9fPNtO^Sm_S)@RUgIF};hpUDV73Xzbe%JCk>qmc_afDKQCqVPE)recV7924LC1-qY+Y`2V3gl;pko<4UHx3vIVCg!09Z$H AjQ{`u literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/fr/summary/summary_stats_expbar_title_fr.png b/public/images/ui/legacy/text_images/fr/summary/summary_stats_expbar_title_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..da999975932c33cd88790ae41711c3d9f5d39f5d GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^+(69A#0(_go%nYYNO1=Egt-3y|Nq4ei3>X{6n|cF z0SYpf1o;IsI6S+N2IR+N?c6r_1=8n?Zqz7wk@fRftiOX-dz@)4H=J Z@$Wt=lX5;Y;5X0`22WQ%mvv4FO#qwbJb3^B literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/fr/summary/summary_stats_stats_title_fr.png b/public/images/ui/legacy/text_images/fr/summary/summary_stats_stats_title_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..63fe6a694af0f1f52e4c127f54c4002be2026842 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bN#0(^BgwJ#WDV_kI5ZC|z|0g6QK*;?5BR7HK zOeH~n!3+##lh0ZJdG4Mrjv*CsvWGTuHaPIKUEIIzBv<%p_Ur8KMNIBO-3hhA7TyP> z4?cLDx%2$;wqL)!6;J6^2J}r(ecifL>dO*Ec@gR literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/fr/summary/summary_tabs_1_fr.png b/public/images/ui/legacy/text_images/fr/summary/summary_tabs_1_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..379768ea3103c68c25f7ca606aa3ca4999676fff GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^WbU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/fr/summary/summary_tabs_2_fr.png b/public/images/ui/legacy/text_images/fr/summary/summary_tabs_2_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/fr/summary/summary_tabs_3_fr.png b/public/images/ui/legacy/text_images/fr/summary/summary_tabs_3_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/it/summary/summary_dexnb_label_it.png b/public/images/ui/legacy/text_images/it/summary/summary_dexnb_label_it.png new file mode 100644 index 0000000000000000000000000000000000000000..5477e3385a8c5fe552c6e601a21330829e7e4f13 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^AT}oxGmtDh5!wLa1o(uw{{R0!AtB+%j~@)FqPu{C zj3q&S!3+-1ZlnP@8lEnWAr*0=hc|LEC!19zF>?UP4j literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/it/summary/summary_dexnb_label_overlay_shiny_it.png b/public/images/ui/legacy/text_images/it/summary/summary_dexnb_label_overlay_shiny_it.png new file mode 100644 index 0000000000000000000000000000000000000000..1640e46caa0df7c7a07d9fcf57efadc1a5e1b7bd GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^2|%31!VDxg>U!n^DgFST5LY1m|Ns953ld(uSn=V* z4HgY?XP^*MNswPK14G&5vlc*JhNp{TNJZS1a|byY6a<(LE)ZS9Y-xSt^?q~RgA964 zECp`n{h24=vLKxAkavJ+WAEf6J_k7*R~i+37oYR(*$g%YfdFVdQ&MBb@05r`ud*ZefK-pCi(^PdoNs?4=V1dLma9vcO|~#E$zv1PBd+oN_xTX+ z=9MK9^Xvus!jhMtJ#ATV@JZ38L}ODHp(G_0!|R-vu4G*B>r-%9YW$8Xi!n;)?74R; zOheAfE~vgCb!+Jisp`=G?)%w!s?7Y1UgZje`ktNUyPd6OgL=rH-z%p~ hDtqd%&{X>$!zM1vyo}p|d_Z?Gc)I$ztaD0e0ssfqT6zEg literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/it/summary/summary_moves_effect_title_it.png b/public/images/ui/legacy/text_images/it/summary/summary_moves_effect_title_it.png new file mode 100644 index 0000000000000000000000000000000000000000..99f9dfeb2c3524d7d4065580057020a32b9577aa GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^ra;WW#0(@=a^fcdDV_kI5ZC|z|0g6QK*;?5BR7HK zOeH~n!3+##lh0ZJd1;<5jv*Cs$v{<6U$bN-)<(W%c=WIS|NH;d3LoF!XB7CJm3QOn zoeOt1WM4mU=W68auTQDgl6}yyZrU4 pg5Kx<`wxb{{eR6W{_lGRhMS))U7j*dxCFG3!PC{xWt~$(697PhRFVJy literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/it/summary/summary_moves_moves_title_it.png b/public/images/ui/legacy/text_images/it/summary/summary_moves_moves_title_it.png new file mode 100644 index 0000000000000000000000000000000000000000..e56e3f4b336035860bb145fa9ff756ab27a3a8db GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^8bHj!#0(_A*@T_|Qak}ZA+8At3IG59hmfbADEI=! znM#8Ef*BafCZDwc@6zJK`I|M#!GgU`P9^Vd@MMl)Xf_9geu)pEszXaBD5|F)ierohpqSGPE=&K6~O YrlWH-WX0jVK=Tz>% literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/it/summary/summary_moves_overlay_pp_it.png b/public/images/ui/legacy/text_images/it/summary/summary_moves_overlay_pp_it.png new file mode 100644 index 0000000000000000000000000000000000000000..9babffc0429cdb23586f721d548ae334fd6df7b1 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB_Vp5048MPMmk$VFu(d zmIV0)GdMiEkp|?bdb&74Gf;HelF{r5}E+Z$t4N^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/it/summary/summary_profile_ability_it.png b/public/images/ui/legacy/text_images/it/summary/summary_profile_ability_it.png new file mode 100644 index 0000000000000000000000000000000000000000..bb915da37eef4529c0ab57bd1b7d7a9ef6eec1a4 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRh!VDyzNf8uC$S)X3|0+9j4@f0>x;TbZ#O3xJ7~baC2m&iam%aERgmM2;r&v( lsfu&b)cgmYE_aHy*T3-5o&O>A-&de*44$rjF6*2UngEDYM`>N3cf&b zrjj7PUFR-CjdJCPfh!OGftxK4N*v2jyI)lb44psHthQrvH+- z$TDf6s~IEX+@!AQC#B7Ni&rgAN#6KAL_f7Y!$XRHv(tKmeXUlH_+)M{%!y)~#CPa; ze|y2S8293JZUXOE0`o(TXK|)yZrnQI;g3H%Z)iXHC-F&n+QVChrLj}4{SS-RR!shT TfID6u=pF`7S3j3^P6$owG; zD8yV6!FpF<#OknL|-SI?fLe78FnYNZj^LY#c zzrN|#;@qX}d?ksm)_J;A%g&N*M>j2&GtP}Ke|hKNv9g|hipy4rFMDhE>3xz|#;Prv jyS*D895hk+yO;mqEk)@^lP3xRtzz(W^>bP0l+XkKNrOj& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/it/summary/summary_profile_profile_title_it.png b/public/images/ui/legacy/text_images/it/summary/summary_profile_profile_title_it.png new file mode 100644 index 0000000000000000000000000000000000000000..169b0a7b8e7887c05d286899c7f49e8687751b33 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)=!VDx`-W}uvQv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15(MJE{-7;ak1wvayA$UFkf&EFKDQ;I^ej=ao2wzwXFK8 z7Ud5QZh4%SSSoWbWX5ybSISMs42qY2X})YJ^EL}!vt+Y15yp1E{-7;alZYHyoVKdSk`Xv@RB_6%GmMz@ADznoGU(9 z$)32>{549j=fjE(9PHo!+BUcBP@1>)14~Exvgo5bZd!UDXfp_#e!jpeaLH$_nVO|B zvH!#by*!`!aP=y7--vy_z1gPq<;~Ef50)3-CADo(ZawyY|F>!t)17C6N)kOkvM2PJ ViLBW3o)73222WQ%mvv4FO#uIbUWEVv literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/it/summary/summary_stats_expbar_title_it.png b/public/images/ui/legacy/text_images/it/summary/summary_stats_expbar_title_it.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8eee71613a0472be9573cab8b6bd3c872da55e GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^+(69A!VDx6JGfJU6n}tEi0l9V|6kmYxUj-T1W(H;^W(fuf1|lW~44)gOFgGul+|AtF-P}Ey bnVBJ$owfDE%BK^6Iv6}%{an^LB{Ts5?`kOH literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/it/summary/summary_stats_item_title_it.png b/public/images/ui/legacy/text_images/it/summary/summary_stats_item_title_it.png new file mode 100644 index 0000000000000000000000000000000000000000..a93695a48c86a2fdede63fc69dbc7f8add34d60e GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMo#0(@&cm#cb6i`>N3cf&b zrjj7PUFR(X)nJOpZLP7q;F=>#AtJ5&b66rRA#AnMR#wGDfaB zYp<=AD44Bj^wyv?S%^tquI8V?`RTX3MUUpi*RdTb3!3()XU?X>f($ODtgR1|3)Xh1 zoU+y1QD|ZOc9zByi;FJ`l#fi;SjWELSssH!*|L^*LoB#8sYhy!84?Fbhg|sw=#HQzhcFj6$$yjj^7JNJou;nKXcm(S<$cdT8E^= z{qxss;E3Cs&FGxz>Uy=W>%+;1m!q|HSI;hIGkCIp#fl9pHvIpZU-kR{*Y&d-%PMs* oFfgqZT|Hw~SgCGS^j0PYg<`J~t)wnbU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/it/summary/summary_tabs_2_it.png b/public/images/ui/legacy/text_images/it/summary/summary_tabs_2_it.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/it/summary/summary_tabs_3_it.png b/public/images/ui/legacy/text_images/it/summary/summary_tabs_3_it.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ja/summary/summary_dexnb_label_ja.png b/public/images/ui/legacy/text_images/ja/summary/summary_dexnb_label_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..bf568c486aac5e8af4e95a237819caf922a9e50c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xc>kD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09(%&eSxxzt=vj`UP<&>z1f)kgPFm|u#L0z*@9m{ PV;MYM{an^LB{Ts5e||dm literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ja/summary/summary_moves_descriptions_title_ja.png b/public/images/ui/legacy/text_images/ja/summary/summary_moves_descriptions_title_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..d844e8442442e08a97d26f0584fa28bf46b4b892 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq&Ne7LR|m<|6h=i@Z-l1DrEQwnt-IEiU zCY%)$J77@!%*SB%$;*w2XgTe~DWM4f+|xhm literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ja/summary/summary_moves_effect_title_ja.png b/public/images/ui/legacy/text_images/ja/summary/summary_moves_effect_title_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..a75452f1299e379c9a75e6688c54975a29bd8c32 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^%0SG)#0(_)?yR#1Qk(%kA+G=b|1Zc$`0?Y1@!^;U zKtaZmAirP+hi5m^fE*7`7srr_IN8%1IU5`VST80XjA=Q`%d@5X>4paHb@Ss7vtCn( zUb;hnR*FU^OT?qMcNyCzJ%6yB@9gYDcbE(|+*{-qTNqYZE@t#j#0(^r^%`4&6lZ`>i0l9V{|hn_e*E}hd^qL- zP>``C$S;_|;n|HeAZLQ7i(^PdoahNdu0sYQY!B=kIZobdiWZc8qdBknT(02+i`TZV zc;_vgdhF!Vgd(ro`F}RNSpI9CPudBVW9yg_f^_zZnybG|v{N%=FwJ}YvAx;tL{^;@ zlfq^_>3+xLO@9T9#HxBs&nEOPpMr#3@+7r hQ!+#Zxw8DH{nHQBT4Gf;HelF{r5}E+Z$t4N^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ja/summary/summary_profile_ability_ja.png b/public/images/ui/legacy/text_images/ja/summary/summary_profile_ability_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..6c82a863a692f86cbbc5894536a18763894df116 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-k#0(^#z819sQk(%kA+G=b|1Zc$`0?Y1@!^;U zKtaZmAirP+hi5m^fE*uB7srr_xa0>32{RTfH~<7Y8%{d9E_G~l)NYxac=Z(L9G+mw z5Q(7R#vV={As(&Z13YGIQyEml*w#+%;f?XOkdbh4mXwKbmXKt4Ka+Q}WlGB%pt%g5 Lu6{1-oD!M<<4ZN% literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ja/summary/summary_profile_memo_title_ja.png b/public/images/ui/legacy/text_images/ja/summary/summary_profile_memo_title_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..3f5a4536817ffa8149e8c7dc0cbe262149d2124c GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^_CUVlt+ZHchu=vNU4Xv%r0dqJXTQISH z6PfYAH?!yLYdI-q8^bBQo(pO+7R|qq*ZA(JrIbhUl1q>S^WMzj~hR t3i99bdB24EG3oc!wGWp3?p$*!-szvP)s@l2q+>eW-P87JzynLmP=@JWz ngzX+f)-;O+r*us+oG-GUydvx%blcn>Xd8p4tDnm{r-UW|dALXc literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ja/summary/summary_profile_profile_title_ja.png b/public/images/ui/legacy/text_images/ja/summary/summary_profile_profile_title_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..a05cba4924798c678dbdd6cc4f42657395cf88ec GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^MnKHL#0(^lZE$%Bq&Ne7LR|m<|6h=i@Z-l1IefwnEn2}|%pJ!Wp6I5|Iy6(1;mJlLhLZxv7{UVC Z89G`7*75BvHUQee;OXk;vd$@?2>@YnI0FCx literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ja/summary/summary_stats_exp_title_ja.png b/public/images/ui/legacy/text_images/ja/summary/summary_stats_exp_title_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc237a7e6b327d2f4a74947266238ec7c94d3be GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^MnKHL#0(^lZE$%Bq&Ne7LR|m<|6h=i@Z-l1Vd3a&g!6OSz6Pd1Su`Bck>r6^q z7IA=OTYy3T$;pXolP@zZ3+3U6V+qb+p7DH%(8(t+PrhI< zkdPP{KnO7~FfcG6CKwo4;2*HUA7E$Vbv`T#<nL%kbKr%wNr5e}8^&Qyx7&1b|mzYgsOP=Lr*0i3Y;wr9qSc zT2W5T3=+y#xKw@K31e6L^5(6khJmYHsd(5+>bx7yZ>0R<#zKp2tS~3gW=^Z81_THq zE~z?*dT~Yut~TT)u+F!UrVb%;#nonWhw8GosMbZw)k?|MnNc>?s#7v-?3m?~s)>y% z!c}BgIyMNliRGx{O9O9d&?ZZbvtwWIy4QPUl63#;!0s~gylGU^~ zbRICodpzQ?%m8Z?*rY3@$hzVe)Wz>j4j{FjSNPacOB59@GC8*fVT=>9B|2-ZCmb#D zOsuAi&#i&Xqj@w5si&Muk+y{BO$xO*k*wD1>airP|01*#AZduHQlsY zhD|CJV%1JylVCi8dLjth>pwutEyE&Km6)5M&@cg&^pD_xk+w)93gLzk?QoRD9ZfBg zNa~^|Qg96Ftf30eBh5IIG-kZna5ady6ovsYOoLXcc2%d)h`K?`w(bO&=@r9oQ>TXg zT9r=h8-lIob)DD;U{BkeGMkq5nqxS+<>&U;ujqko2ORshNoj3je<2OwT+!Zt^W>*3 zZwN9UW>Bj2@p-t&Z;V&HP#yLFp)BuhS7Uimd7zEA!!0uKcM*(e`&|yCzbW?!mWj6P z)0EG4AX|TECiE-m8D0Cm@V_hFmcoB-zJC`!PATisxWi#cA}tRE<>O>j5cFfMhX1}B zJrg+0vwT?$QuruFF^_>dg+cp#U=YEPbi-Fpe9zoInf78)OjoF#0(_a&G}q`6lZ`>i0l9V{|hn_e*E}hd^qL- zP>``C$S;_|;n|HeAScw*#WAEJPWISF-UbB$)(iD2GybfWar&m9_C-YOmL-?6Kyj-o zYjf4cY7S?0&IIQB6&BJ~+uYlW+urCbzs!-Iw&dH>bSJN1sV}#5XGrCFOw=+BTO)rw WO2E(msoO)K1q`09elF{r5}E+fS~_U} literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ja/summary/summary_tabs_1_ja.png b/public/images/ui/legacy/text_images/ja/summary/summary_tabs_1_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..379768ea3103c68c25f7ca606aa3ca4999676fff GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^WbU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ja/summary/summary_tabs_2_ja.png b/public/images/ui/legacy/text_images/ja/summary/summary_tabs_2_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ja/summary/summary_tabs_3_ja.png b/public/images/ui/legacy/text_images/ja/summary/summary_tabs_3_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ko/summary/summary_dexnb_label_ko.png b/public/images/ui/legacy/text_images/ko/summary/summary_dexnb_label_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..bf568c486aac5e8af4e95a237819caf922a9e50c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xc>kD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09(%&eSxxzt=vj`UP<&>z1f)kgPFm|u#L0z*@9m{ PV;MYM{an^LB{Ts5e||dm literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ko/summary/summary_moves_descriptions_title_ko.png b/public/images/ui/legacy/text_images/ko/summary/summary_moves_descriptions_title_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..350bd607aedfaf5ac40611c9e9f5cec670b5b65d GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bP#0(^#H}%a2aRPioToV!!{{R0EAx}S1@CAx9 zl?3?(Gcc4*K5GHwg?PF+hE&8QbF?-Hh#Wh-e2{&uwYH2wvhei} ztu>BHfiXc}_d6&Z{Qp07?F9y-rm+8?|MQ3a$)9?Em8`ih7JNnMtnk9Q>3MWqtAH%FO W`h{O-@w@_>&*16m=d#Wzp$P!yFhvUh literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ko/summary/summary_moves_moves_title_ko.png b/public/images/ui/legacy/text_images/ko/summary/summary_moves_moves_title_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..d020d8a77cb2f48681cd86d51010fa0fc0a84f7b GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bP#0(^#H}%a2aRPioToV!!{{R0EAx}S1@CAx9 zl?3?(Gcc4*K5GHw1$nwShE&8QbF?-Hq`3Y0U%pUO!R^Yb@`dkR8hRLxm493{U`})(jwlbZ0@%cahB(AluKi}d{YT5s&yM8Of36AIk;{4ON5*~bt+RDK2W4re8 U2Wj_b0!?S|boFyt=akR{0R7KJzyJUM literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ko/summary/summary_moves_overlay_pp_ko.png b/public/images/ui/legacy/text_images/ko/summary/summary_moves_overlay_pp_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..9babffc0429cdb23586f721d548ae334fd6df7b1 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB_Vp5048MPMmk$VFu(d zmIV0)GdMiEkp|?bdb&74Gf;HelF{r5}E+Z$t4N^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ko/summary/summary_profile_ability_ko.png b/public/images/ui/legacy/text_images/ko/summary/summary_profile_ability_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..cdeafaf486e2cb3fb7d2bdbbf880f2999f8086b4 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{U#0(@qERYKWaRPioT>t<7pOBCMA@lo>+ysg< zl?3?(Gcc4*K5GHw1$nwShE&8QJFrHr)_Y+jn{Xkj)-n7wL-W7?4R=c&?yd6vzfLw` z!~go9A09IEtPab)67}}LhyVZE|NiGQNLjmU1LKN?|Lz|RU(IjO(iXq=|9b|8qc2oN UPYHFVdQ&MBb@09K7hT>t<8 literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ko/summary/summary_profile_memo_title_ko.png b/public/images/ui/legacy/text_images/ko/summary/summary_profile_memo_title_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..7af960fe1df5c10d2117ec2c8d1b23d44c2bae20 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^en8B_#0(@ih9tiPaRPioToV!!{{R0EAx}S1@CAx9 zl?3?(Gcc4*K5GHwZT56=45^4KJ!i;u$UvmwVS+h3JO85a6Pzv=q6#)t`vp9npl9h+ zwvf+s=K=0GHPwVJbpe+7o!2~T9v}Z-(f?%s=0EMM_gdRGac>HEl*oFGv-Gr0fyW8` zX|sO?2l4;adH643b&dvW(`=T`Ed6~N#d!yGn@rwslDM{-XIJcm)g6Zy_U0)w@f&%c z$m6`;!omO9Zh^mkpu5tvA1S;&{o!{t(sUMe@3=avFUrd=Wyy;#YrcMDt$AJTEb#f* RZJ_fRJYD@<);T3K0RU&dZkYf8 literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ko/summary/summary_profile_passive_ko.png b/public/images/ui/legacy/text_images/ko/summary/summary_profile_passive_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..34a13ffe8360d0f19709a9418d45dc273a90235d GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-m#0(_ss=~EEoB*E?*Mx+G|Ns9($kR_0e1YOj zB|(0{3=CzH&sqR^v7RoDAr*1S9IZ?&kN@vpUij#8w6;Xq`evgwzvrDW^#A{#`N)dA z`TMfiolE}*DiGguS#eT`%FzyI|-JTcx9 eGt$;Zu`;yxn)>-`iEaa0#Ng@b=d#Wzp$P!p;zZK` literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ko/summary/summary_profile_profile_title_ko.png b/public/images/ui/legacy/text_images/ko/summary/summary_profile_profile_title_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..deb57b967152b45dbcbfc73c670e06d7ed084851 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRh#0(@eBaS}?aRPioT>t<7pOBCMA@lo>+ysg< zl?3?(Gcc4*K5GHwMSHq9hE&8QAK={)w)R=n*3_%Fcpc3C|NHyr|Morixsx{M-Q^Ow zev>P;`2T;Vz{49-xyv(7{NFGCplWMaPLQghMR$}|6TpRrXz|YiT%Uc z%k_Uh|F<`|{VM+II@#6XjW<5(UwgTK!-HyuBzN83M^TFy6WRa#SN#9q{VJb;b;VVy zouSroFB)$o{;xmz|NqVg?jwAWTbr`4a< zkdPP{KnO7~FfcG6CKwo4;2*HUA7E$Vbv`T#<nL%kbKr%wNr5e}8^&Qyx7&1b|mzYgsOP=Lr*0i3Y;wr9qSc zT2W5T3=+y#xKw@K31e6L^5(6khJmYHsd(5+>bx7yZ>0R<#zKp2tS~3gW=^Z81_THq zE~z?*dT~Yut~TT)u+F!UrVb%;#nonWhw8GosMbZw)k?|MnNc>?s#7v-?3m?~s)>y% z!c}BgIyMNliRGx{O9O9d&?ZZbvtwWIy4QPUl63#;!0s~gylGU^~ zbRICodpzQ?%m8Z?*rY3@$hzVe)Wz>j4j{FjSNPacOB59@GC8*fVT=>9B|2-ZCmb#D zOsuAi&#i&Xqj@w5si&Muk+y{BO$xO*k*wD1>airP|01*#AZduHQlsY zhD|CJV%1JylVCi8dLjth>pwutEyE&Km6)5M&@cg&^pD_xk+w)93gLzk?QoRD9ZfBg zNa~^|Qg96Ftf30eBh5IIG-kZna5ady6ovsYOoLXcc2%d)h`K?`w(bO&=@r9oQ>TXg zT9r=h8-lIob)DD;U{BkeGMkq5nqxS+<>&U;ujqko2ORshNoj3je<2OwT+!Zt^W>*3 zZwN9UW>Bj2@p-t&Z;V&HP#yLFp)BuhS7Uimd7zEA!!0uKcM*(e`&|yCzbW?!mWj6P z)0EG4AX|TECiE-m8D0Cm@V_hFmcoB-zJC`!PATisxWi#cA}tRE<>O>j5cFfMhX1}B zJrg+0vwT?$QuruFF^_>dg+cp#U=YEPbi-Fpe9zoInf78)g)khTg9Gq16{@7>FVdQ&MBb@0DmoKt^fc4 literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ko/summary/summary_stats_stats_title_ko.png b/public/images/ui/legacy/text_images/ko/summary/summary_stats_stats_title_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..371c2be49768ef6fad56934702c3fa95c914717b GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^VnEEp#0(^*r!Nf!aRPioT>t<7pOBCMA@lo>+ysg< zl?3?(Gcc4*K5GHw`FpxJhE&8QJFwp2<5|5ehavEPd2YgksI942|MBwt`M>|o|E-OV z*;l0m&j0&A|9`x_fx+5c6SihCH-Guh`}M!M!HKoM6r^@FI{x|3dhr53!;D;|-+O~* RTLO({@O1TaS?83{1OOSFM0EfF literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ko/summary/summary_tabs_1_ko.png b/public/images/ui/legacy/text_images/ko/summary/summary_tabs_1_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..379768ea3103c68c25f7ca606aa3ca4999676fff GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^WbU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ko/summary/summary_tabs_2_ko.png b/public/images/ui/legacy/text_images/ko/summary/summary_tabs_2_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ko/summary/summary_tabs_3_ko.png b/public/images/ui/legacy/text_images/ko/summary/summary_tabs_3_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_dexnb_label_overlay_shiny_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_dexnb_label_overlay_shiny_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..3277a28a59b25e1055d6445dab354ad7f7324e65 GIT binary patch literal 1753 zcmb_dTWB0r7@loSuv^j>qXt17rY|XWt~;~4bI3L(yRlj5#wFR3RK@1(nX|iNcIHfH zW^X|uu0AMu0R>Y;O8a1?FX~HMq1a-fQXeD_)+YF3r4RK*qAiHNh-daPwh~(`4$RCs zv)}o?|NGB>{(U1qvwtZ1Sd?Lyq3m>KmcAG1{o;dz^qJmXc!9olIMatbhS~X0a7UOA zJ{)0~ftFcV@E39i03wzE4N}BH({d=9VaCRr4n#}XXN$OO+9_`H+y#y`jTASp<)oaG z#uamV*~N3qGX=D~gmi-&-^Y$M0VS}o580+wwLQ>GaUEVj$H8ZjV>=LkDaB0$g6u*r z&!&lsSxt!ZNLCd#p$l?c(iL?tt4MM}loFyG<0TnLaS+ql-o;Th*C>J6%+ozBI!kdC z-*mGRKBV1Zh$wE)}NH#X3>sav*DaKC}_eW>Oq=ESRPN za8XW{Ak=uQV~vlgD&~twQg~e}Ce^sEp;#RE*JlW-1^e1xZ~Vvg&$uQ%SFn2DJhcA* zcGzc`ppHDcabE9qOu}++R5kYnHiIw?T~#Cvm3U2;3?9m=#wQacorgsQ%7%gCs8k#i zgQGwfvE5OZNW8mZr$E898AQ

CWLJVFYZaCILjjSxa#!C^Bqtz0c--??{)nQNfh- zF6GySd8Fhwpo=HUbocI2++yE;*M;~`gPkPZ)<61i+LVG}*bV6CK)6}pIdov$Nt3P@cgx}2DP_NeVMUudd*`GaKHZc z-Pub=XQLMme0%-YrR3WutWEis#_HHl@biyG(B=7-@M`(`z~!?i&B-4cUnh4xyP~z= z#?{kRZ8Lgt{ruX@&d;8I?c#}Zw;s7t`{I=+ULM@2@7id;pI&=-?^@){qw9aZex$vg zua6#o>FAA*hwFudr&o{74PRS*XWN^Rft77fMUFFhW|SFbqRjs={rzy{kCSawIQaPC Y#qBq4*3RttH2Cw$PR(RKnOtoD1sggu#{d8T literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_dexnb_label_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_dexnb_label_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..5477e3385a8c5fe552c6e601a21330829e7e4f13 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^AT}oxGmtDh5!wLa1o(uw{{R0!AtB+%j~@)FqPu{C zj3q&S!3+-1ZlnP@8lEnWAr*0=hc|LEC!19zF>?UP4j literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_moves_descriptions_title_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_moves_descriptions_title_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..8d888143663b43c5b2859bd358be604c67070dc2 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMq!VDx8?k@WUr1%4TLR=FP5`O&n@&EsSAOlFQ z$~dC~lwvLk@(Tvizsio>15#5xT^vIy;%X-Z@*PqTU=9DmU{=L&=NrRp8@+^kyZ_H@ z$-Df5{ZI?f$qn)|{I9!-t*>V?o6{&FG{4L5*RqVR*-Fe!EF5Y(Co30R(iUIb_&BUx z!a99Ht=idd52haaWXkxFp>n6UgyYIf`47JCoiJDI+%9{?zZ@zaIZo}`mop!qVc=j0 rcVTaPD06AO*>ATgQzADU6RcryedieDd@lbl(18q|u6{1-oD!MFVdQ&MBb@0AH9-VE_OC literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_moves_moves_title_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_moves_moves_title_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..0a2d1657750988e8b1127408057eb281774b5cb8 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^Za~bz#0(@Yg%Y`e6i`>N3cf&b zrjj7PUFR)w70NhYTcGA3TzHDEm-$L9_eIYeyB|#VxXQ><{Rg zT;dU4=;8P9o|0qFhx3nuCX3zs@=-9M&cwNqou;_l?^wY|Z4CskNf z92i=ZCeLkciM4XSG}~u}eL3%ucMhNS@JY@yk2MTY_?oO-Uzy*3=YP%o7c0Cj^EZ11 c?#|Bqr@p|=-$Jk30O&3TPgg&ebxsLQ01xO}*#H0l literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_moves_overlay_pp_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_moves_overlay_pp_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..9babffc0429cdb23586f721d548ae334fd6df7b1 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB_Vp5048MPMmk$VFu(d zmIV0)GdMiEkp|?bdb&74Gf;HelF{r5}E+Z$t4N^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_profile_ability_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_profile_ability_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..28fbb5a8be9a5b72d300f71e818fff5b46ee42b2 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^HbBh5!VDzCEgOFUDgFST5LY0bkdW~I|9=R%k@-Uy zP>8uC$S)X3|0+9j4@l*Bx;TbZ#D(@Yaxxq8Fz;=0X8+N~H(`O`lE3Mz-hB8nTgK>z z10UbMEg=&=7kT|&ytZj6XYl=BXQa2xJ60H3KI!I}o_9;O%-bbVs>;D{H9tzrH)8qm x`kxlkpSRgPolwF2?54p42Zo3rdwbuo?E4yFbb&j%%?M~OgQu&X%Q~loCIF{)P~HFl literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_profile_memo_title_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_profile_memo_title_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ef7c91fc5b6b2c59d6cf5510c02ec3cec0940c GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^AwbN*!VDy*avrS%Qv3lvA+8At3IG592a+Ft`~Wht z|8IQ`lwv9g@(X5QD4TrN0?6z1ba4!+h^w7&k(1ew$9d}P2Q_aQI#00Ob*T71Q!9DL z>u^~?&kqV}9kYBipZuP?de_-glUOYG*sTui+Np9Y^zOA)&F8XAN=^wczo5~z;nxmdKI;Vst0DtFV$N&HU literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_profile_passive_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_profile_passive_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..11616a7428738a462771e24b71d0e1cf3aac9c59 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf!VDy9I}1XA6n}tEh%1mzNJ#kq|38G>$owG; zD8yV6B7W5QUff)lUBS_L2X< z!~RvD1D`KH6yh1I=X~Ytxi>~zwlp?g(0^yHeP+t#%W+ZPmwj|e^RITkQf}(KKKuN`2_>%Uu8$`0jWSw7srr_xY%_s$NrC_X literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_stats_exp_title_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_stats_exp_title_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..d66fa829be12519a0f6ffa7e25051f2f07fbd049 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^K0wUF#0(_2F5G+t#0l^TaZN}_`2YVuggpI3!51jb zR1)MD%)n4K`K$$yx6sqYF{C0cx7U{Ikb{6*^6aGCHP@w|Xehe6Y>?o8BwNJ78&=r0 zmO1X2s8a%S^6tEiuX~zUz8HSs?f-ew%=nG^v%K5&ckOPq`v+a@v+JEF`{1fXy2KY1 z#dTUzrW(tXPFbd0*XDi6QT2C@#$~RQbZcvyR`_+{%eGDJoAwDhWZtWn x)fE!`RL<4;44$rjF6*2UngA99Wu5>4 literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_stats_expbar_title_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_stats_expbar_title_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..e9dfb10e5d62cbd9e2c24bef5d40012719e0a292 GIT binary patch literal 1600 zcmbVMJ#W)M7&fZ-DlmZ%LPE040s`mGcH+b*OjVLXBjHk&0A+&n`I1< zkdPP{KnO7~FfcG6CKwo4;2*HUA7E$Vbv`T#<nL%kbKr%wNr5e}8^&Qyx7&1b|mzYgsOP=Lr*0i3Y;wr9qSc zT2W5T3=+y#xKw@K31e6L^5(6khJmYHsd(5+>bx7yZ>0R<#zKp2tS~3gW=^Z81_THq zE~z?*dT~Yut~TT)u+F!UrVb%;#nonWhw8GosMbZw)k?|MnNc>?s#7v-?3m?~s)>y% z!c}BgIyMNliRGx{O9O9d&?ZZbvtwWIy4QPUl63#;!0s~gylGU^~ zbRICodpzQ?%m8Z?*rY3@$hzVe)Wz>j4j{FjSNPacOB59@GC8*fVT=>9B|2-ZCmb#D zOsuAi&#i&Xqj@w5si&Muk+y{BO$xO*k*wD1>airP|01*#AZduHQlsY zhD|CJV%1JylVCi8dLjth>pwutEyE&Km6)5M&@cg&^pD_xk+w)93gLzk?QoRD9ZfBg zNa~^|Qg96Ftf30eBh5IIG-kZna5ady6ovsYOoLXcc2%d)h`K?`w(bO&=@r9oQ>TXg zT9r=h8-lIob)DD;U{BkeGMkq5nqxS+<>&U;ujqko2ORshNoj3je<2OwT+!Zt^W>*3 zZwN9UW>Bj2@p-t&Z;V&HP#yLFp)BuhS7Uimd7zEA!!0uKcM*(e`&|yCzbW?!mWj6P z)0EG4AX|TECiE-m8D0Cm@V_hFmcoB-zJC`!PATisxWi#cA}tRE<>O>j5cFfMhX1}B zJrg+0vwT?$QuruFF^_>dg+cp#U=YEPbi-Fpe9zoInf78)#wbi{`&Z?m4fjDM)~*y zyUQ6J(jG8d{+z!)zFDNju48ia&lfkX1U`4pi8;}{y)Z%e$&>%KHGjEN4r%GF3*{DD b%fO)aSeJRi^ykq)I~Y7&{an^LB{Ts5t(itv literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_stats_stats_title_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_stats_stats_title_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..bc9dffc28879008ff0d62a565b7a9a2a508dc942 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^=0MEB#0(@AX7;ZIQak}ZA+8At3IG59hmfbADEI=! znM#8Ef*BafCZDwc@~S;u978JNk~`}E)Z24xegFTb|360Ot9k}EY%9OMy1Ki}AS9xp z@#~Xk&z{ZYX7okqNuw1^DlOuulCxn;zJ_d&a>IOcW*Yk^VM@*tJbU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_tabs_2_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_tabs_2_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/pt-BR/summary/summary_tabs_3_pt-BR.png b/public/images/ui/legacy/text_images/pt-BR/summary/summary_tabs_3_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ro/summary/summary_dexnb_label_overlay_shiny_ro.png b/public/images/ui/legacy/text_images/ro/summary/summary_dexnb_label_overlay_shiny_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..bb2436738a831b466e701f3ff745c80f0af483c7 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^2|%35#0(^N{5+Qoq<8{+LR^9Lf&~dLUaa`=;l}1w zpPGSu#*!evU(%&eSxxzt=vj`UP<&>z1f)kgPFm|u#L0z*@9m{ PV;MYM{an^LB{Ts5e||dm literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ro/summary/summary_dexnb_label_ro.png b/public/images/ui/legacy/text_images/ro/summary/summary_dexnb_label_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..bf568c486aac5e8af4e95a237819caf922a9e50c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xc>kD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09ud*ZefK-R4i(^PdTxfqI=V1dLmaA!vZDkEtVjaG0cG!8pe%YxG zwGg{`+bsN^xa?D!0ejBkv+L{SsCZdn!9^)hvtWz z+-clzmbZP<+i@pnYFK5~>HCZ4i+0(1J4Bw-(LOGobMsBuL2hZcDc4RrPY$}YNJnIr eu;AvE=J7L{E$8#R;=K)Y6N9I#pUXO@geCyjhqq&-wpf;{OYGFo%higqpv&rD%|T_4b0*QLn?BEzkV_&lbP+ e|L^-hxfr=PvSzrSj|GyL_nMwk1x73$xo z=rbIN`Tk+wdYoq81+uA*kSLVyi*jaz^^#Aqsj57mcqIkK(bfXy= YdK+{ESKps$477m3)78&qol`;+09KqvxBvhE literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ro/summary/summary_moves_overlay_pp_ro.png b/public/images/ui/legacy/text_images/ro/summary/summary_moves_overlay_pp_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..9babffc0429cdb23586f721d548ae334fd6df7b1 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB_Vp5048MPMmk$VFu(d zmIV0)GdMiEkp|?bdb&74Gf;HelF{r5}E+Z$t4N^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ro/summary/summary_profile_ability_ro.png b/public/images/ui/legacy/text_images/ro/summary/summary_profile_ability_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..a05c22b7d47b527d91b0406ae0ffcbfcb21882aa GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq<8{+LR^9L|Ns9J5)y!9QtLfl zAfKru$S;_Ip=|P53m`Ad)5S5QA})Eu`~M&R$Da8A{lA<|LdDm-ySqviUx)2w+BAP( zclT%R&f?ll)r^NPf45i2*~`}U|NS+`8#O!*UkeS)0?z6$Q2al?=>~V$+6Yz_Zm|MG a28PuMrujjZy~02n7(8A5T-G@yGywpd6GZ0# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ro/summary/summary_profile_memo_title_ro.png b/public/images/ui/legacy/text_images/ro/summary/summary_profile_memo_title_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..3d69c20e57f33f369e6424f04f23a7fe15e85c42 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^{y@yZ!VDz6-1jE}DgFST5Z8o+gbzP{{Qv(S$N-XS zQg&SeN->uN`2_>%Uu8$`0jYjZ7srr_xZM6m&chBo%=SO!6`4iMnP*HlpYUz|%5TfJ zv|KZDYC3%5>?#$nx)Z8J&qcQ%K0o1*zxZv|rmNlyJQv+53t)7~{J|$owG; zD8yV6t_v!dB&(%eLb{|DqxEK#&HSTB?Vw2r~k)z4*}Q$iB}RkKQi literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ro/summary/summary_profile_profile_title_ro.png b/public/images/ui/legacy/text_images/ro/summary/summary_profile_profile_title_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..4170dccf682a71bf64c7b3129738865842cd72c2 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)=!VDx`-W}uvQv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15$~eE{-7;ak1wvavm_?UbgBSY;&{G15&k~E{-7;akl3hIaw5WTrMu?t=PoMv9WpnzwBN8<#`hx zGBP(C?u}&aU8S1m^w{!W>4`hmo-Hd~bf^3%Pb(2?G*EYDaOv8;wdt74jLH28&MiBl zvoEa*no-6gdrP1^+on2FAm_L9oXjJ4n_4oO&i!5=`}3dn-VaCR?>U}V-M1{>< zkdPP{KnO7~FfcG6CKwo4;2*HUA7E$Vbv`T#<nL%kbKr%wNr5e}8^&Qyx7&1b|mzYgsOP=Lr*0i3Y;wr9qSc zT2W5T3=+y#xKw@K31e6L^5(6khJmYHsd(5+>bx7yZ>0R<#zKp2tS~3gW=^Z81_THq zE~z?*dT~Yut~TT)u+F!UrVb%;#nonWhw8GosMbZw)k?|MnNc>?s#7v-?3m?~s)>y% z!c}BgIyMNliRGx{O9O9d&?ZZbvtwWIy4QPUl63#;!0s~gylGU^~ zbRICodpzQ?%m8Z?*rY3@$hzVe)Wz>j4j{FjSNPacOB59@GC8*fVT=>9B|2-ZCmb#D zOsuAi&#i&Xqj@w5si&Muk+y{BO$xO*k*wD1>airP|01*#AZduHQlsY zhD|CJV%1JylVCi8dLjth>pwutEyE&Km6)5M&@cg&^pD_xk+w)93gLzk?QoRD9ZfBg zNa~^|Qg96Ftf30eBh5IIG-kZna5ady6ovsYOoLXcc2%d)h`K?`w(bO&=@r9oQ>TXg zT9r=h8-lIob)DD;U{BkeGMkq5nqxS+<>&U;ujqko2ORshNoj3je<2OwT+!Zt^W>*3 zZwN9UW>Bj2@p-t&Z;V&HP#yLFp)BuhS7Uimd7zEA!!0uKcM*(e`&|yCzbW?!mWj6P z)0EG4AX|TECiE-m8D0Cm@V_hFmcoB-zJC`!PATisxWi#cA}tRE<>O>j5cFfMhX1}B zJrg+0vwT?$QuruFF^_>dg+cp#U=YEPbi-Fpe9zoInf78)#wbi{`&i_m4fjDM)~*y zyUQ6J(jG8d{+z!)u34nTu48ia&j&ZH1U`4pi8*n2dtrj`lPCXeYyNVl9MaNT7s@TR amVrS%M3*IDWu_6(4hBzGKbLh*2~7Z~$wgBD literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ro/summary/summary_stats_stats_title_ro.png b/public/images/ui/legacy/text_images/ro/summary/summary_stats_stats_title_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..f602a43c39d509720f1cfb19ab25d4aeaf676ed3 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bN#0(^BgwJ#WDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJd0w6_jv*Cs$sP57>g@z<6IR?}WwVyhlGSNAaH&!8zoToaYwJJe zwiU9XU+uLPl^IM43ki9hiTc36#K49Bn+|3-vI!LEGBBw5D7@-bU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ro/summary/summary_tabs_2_ro.png b/public/images/ui/legacy/text_images/ro/summary/summary_tabs_2_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ro/summary/summary_tabs_3_ro.png b/public/images/ui/legacy/text_images/ro/summary/summary_tabs_3_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ru/summary/summary_dexnb_label_overlay_shiny_ru.png b/public/images/ui/legacy/text_images/ru/summary/summary_dexnb_label_overlay_shiny_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..1f8f6a1246e06e1beafe100f1b0858c7832221f0 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^2|%31!VDxg>U!n^DWL$L5LY0*U_rwF|NnvHix(?C ze7K>zI!hNQ%3KoU7Yw9-l^wYUq|!ZI977^n-=1^iZE)amxv19A;OZngL4-Y+G3G-) zE31li^}phG=d)ANw4aM}o#guUiTShY%2Ql62K334w^{MIS<*N#D*$>Y% jhjFl=ftLNUavy5y=D5nZ)u(*~TFKz)>gTe~DWM4fd80*5 literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ru/summary/summary_dexnb_label_ru.png b/public/images/ui/legacy/text_images/ru/summary/summary_dexnb_label_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..2a2e66426cb105d302c91851c1026495a2e18cce GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^AT}oxGmtDh5!wKxcmjMvT>t<7p8y6we*9=`yBq)% zXDSKu3kIs1eAWWU)9`e045^4qPIyp%;KPHv%x&@tfBrEZ-W|>@5y$-UxWliDml@hv by_p#bUW=5~`kwRy>S6G7^>bP0l+XkKef=!@ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ru/summary/summary_moves_descriptions_title_ru.png b/public/images/ui/legacy/text_images/ru/summary/summary_moves_descriptions_title_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..a435d6d845edfd4eb9e6f662789991c9d608ea1c GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?b!VDy%)IaV8Qv3lvA+8At2|s@P`2YVukO3rD zWt`CgN->uN`2_>%Uu8$`0jX?H7srr_IM=>LPG?6B=eMPeVpa|l?HeZScf3=-Os(Rn z(}Z^ZBOcFRy;2jmk4Sc z-rnl(e9vOf@H+UNs8>k;|5^Nzg5QfQh4ky6WE1=#0(@8HmA=7aRPioToV!!{{R0EAx}S1@CAx9 zl?3?(Gcc4*K5GHwWqGQwsm}l3_xr#5Z@rV9zhTaf()IVQ z?v2|2UUA0Z?+@sVuAR)=}6jbM0kz>$HAogw<0TlD<(@1_B5W$<+Mb6Mw<&;$TeHd6Tj literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ru/summary/summary_moves_overlay_pp_ru.png b/public/images/ui/legacy/text_images/ru/summary/summary_moves_overlay_pp_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..4af1f833036041f55757a272bb14a93db2173af7 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2ZGmxy8xzq=w_yc@GT>t<7f8oLjAkV|Y1ISRF zwt@x7VJ->s3kK4^%8uLvQbwLGjv*Cs$qfu?!mP={Y{Kd6!U`*S)LIpnZ04R(Vv<;3 oR>-zWuu!nfFfkz^p|FIJ;W-ya)J3jc+Cbe5p00i_>zopr07I=QYybcN literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ru/summary/summary_profile_ability_ru.png b/public/images/ui/legacy/text_images/ru/summary/summary_profile_ability_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..ddfcc6102dca117fa33b4bb0f4b6c65e75f14c72 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ^!VDyn9UPtkDgFST5ZC|z|0g6Q0C^BbM!Nky zAcwgm$S)X3|0+8I;`)2KIEGZj`F1yQ9ySnQ4&CFh*~zLYk5T-seXvf4=Z@zS`BY}l z|9|+#g1S~CCeEyhKNOC!n6CMyQGF}=W@yT!wI}4{)+@>utu{WsX#0uN`2_>%Uu8$`0jVvXE{-7;akl-9xkn6mn5Vihi~N^eaH5()@eA9ff5ua% zM7tkr^eYfZ-ac=YjA-SglV=`?9xuPTro`yjo0_m&MnWfpgRkr;*rRSCJfZPiPkq}` zzphz4kA8f5aOU~(fonkhKJ^F?3#G${0+D3+n=;=opAlJ>*6A& zdv~X--nNkSiG#GU&}oK0JFm9qluAb_xJgf6m)o*Zi1%X6e|DbVYXskPX}@6-kni~W aNL)D8;n!FFHJ(8CGkCiCxvX8uC$S)X3|0+9j4@d=jx;TbZ#JQes15yc|E{-7;alU67IS)8+I0x=rcY%|SeZn&7KX2@V1sBHf zDA;(s>FbT%o-M3%X~Q>xq*;2Ct~eennN)hA$+pGS?#9>2YZX^pO1)z4*}Q$iB} Dk-t5r literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ru/summary/summary_stats_expbar_title_ru.png b/public/images/ui/legacy/text_images/ru/summary/summary_stats_expbar_title_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..b885633d336a18ee9f5e805ee3ca189dc9bdcb6a GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^+(69A!VDx6JGfJU6n}tEi0l9V|6kmYxUj-T1W(1Cq2^>pg=E%rKN=U>wOkrRM X7i78NDDs#GsGPym)z4*}Q$iB}0)r!? literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ru/summary/summary_stats_item_title_ru.png b/public/images/ui/legacy/text_images/ru/summary/summary_stats_item_title_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..95b01d062abd16b9f72cb899955c2f2057108de1 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?d#0(_;zPWLOH~~H(t_cYV|NsAokf)z0_yWb5 zN`m}?85qhYpS1w;8a-VcLn`8O&nfa9au9G!EMdLVU>v$(S<;SUY=?Oru5Mq%x#os) z!L(RIPRWn!bvtAgCU>dXeBZgfaP=*FyRg02j6J;1zRd1wD$wHROuDDGMK0m^Gu!FY z-LK3`-+b)1u!`+ro$1a@8>8oxg*u-4^KWN%n_5Rn;;g*GpC*6)l`nHvJ}EVMja!S! RB%os$JYD@<);T3K0RX?bS5g1~ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ru/summary/summary_stats_stats_title_ru.png b/public/images/ui/legacy/text_images/ru/summary/summary_stats_stats_title_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1c5dc944588bfb58f171dd9fd7f260f1c30055 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^wm{6m#0(_Ocgv>$DV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJdF`Gqjv*Cs$sP57>i<3dZ>{zJ=KnnQNjyBEyB!jazrVUV{QUio zRi(_%t!=CV5%2S|^6u@eE;J5kSh#4@qC+Yf(Qxt9qbP|K7tDnm{r-UW|m`+^l literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ru/summary/summary_tabs_1_ru.png b/public/images/ui/legacy/text_images/ru/summary/summary_tabs_1_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..379768ea3103c68c25f7ca606aa3ca4999676fff GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^WbU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ru/summary/summary_tabs_2_ru.png b/public/images/ui/legacy/text_images/ru/summary/summary_tabs_2_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/ru/summary/summary_tabs_3_ru.png b/public/images/ui/legacy/text_images/ru/summary/summary_tabs_3_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tl/summary/summary_dexnb_label_overlay_shiny_tl.png b/public/images/ui/legacy/text_images/tl/summary/summary_dexnb_label_overlay_shiny_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..bb2436738a831b466e701f3ff745c80f0af483c7 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^2|%35#0(^N{5+Qoq<8{+LR^9Lf&~dLUaa`=;l}1w zpPGSu#*!evU(%&eSxxzt=vj`UP<&>z1f)kgPFm|u#L0z*@9m{ PV;MYM{an^LB{Ts5e||dm literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tl/summary/summary_dexnb_label_tl.png b/public/images/ui/legacy/text_images/tl/summary/summary_dexnb_label_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..bf568c486aac5e8af4e95a237819caf922a9e50c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xc>kD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09ud*ZefK-R4i(^PdTxfqI=V1dLmaA!vZDkEtVjaG0cG!8pe%YxG zwGg{`+bsN^xa?D!0ejBkv+L{SsCZdn!9^)hvtWz z+-clzmbZP<+i@pnYFK5~>HCZ4i+0(1J4Bw-(LOGobMsBuL2hZcDc4RrPY$}YNJnIr eu;AvE=J7L{E$8#R;=K)Y6N9I#pUXO@geCyjhqq&-wpf;{OYGFo%higqpv&rD%|T_4b0*QLn?BEzkV_&lbP+ e|L^-hxfr=PvSzrSj|GyL_nMwk1x73$xo z=rbIN`Tk+wdYoq81+uA*kSLVyi*jaz^^#Aqsj57mcqIkK(bfXy= YdK+{ESKps$477m3)78&qol`;+09KqvxBvhE literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tl/summary/summary_moves_overlay_pp_tl.png b/public/images/ui/legacy/text_images/tl/summary/summary_moves_overlay_pp_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..9babffc0429cdb23586f721d548ae334fd6df7b1 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB_Vp5048MPMmk$VFu(d zmIV0)GdMiEkp|?bdb&74Gf;HelF{r5}E+Z$t4N^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tl/summary/summary_profile_ability_tl.png b/public/images/ui/legacy/text_images/tl/summary/summary_profile_ability_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..a05c22b7d47b527d91b0406ae0ffcbfcb21882aa GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq<8{+LR^9L|Ns9J5)y!9QtLfl zAfKru$S;_Ip=|P53m`Ad)5S5QA})Eu`~M&R$Da8A{lA<|LdDm-ySqviUx)2w+BAP( zclT%R&f?ll)r^NPf45i2*~`}U|NS+`8#O!*UkeS)0?z6$Q2al?=>~V$+6Yz_Zm|MG a28PuMrujjZy~02n7(8A5T-G@yGywpd6GZ0# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tl/summary/summary_profile_memo_title_tl.png b/public/images/ui/legacy/text_images/tl/summary/summary_profile_memo_title_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..3d69c20e57f33f369e6424f04f23a7fe15e85c42 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^{y@yZ!VDz6-1jE}DgFST5Z8o+gbzP{{Qv(S$N-XS zQg&SeN->uN`2_>%Uu8$`0jYjZ7srr_xZM6m&chBo%=SO!6`4iMnP*HlpYUz|%5TfJ zv|KZDYC3%5>?#$nx)Z8J&qcQ%K0o1*zxZv|rmNlyJQv+53t)7~{J|$owG; zD8yV6t_v!dB&(%eLb{|DqxEK#&HSTB?Vw2r~k)z4*}Q$iB}RkKQi literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tl/summary/summary_profile_profile_title_tl.png b/public/images/ui/legacy/text_images/tl/summary/summary_profile_profile_title_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..4170dccf682a71bf64c7b3129738865842cd72c2 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)=!VDx`-W}uvQv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15$~eE{-7;ak1wvavm_?UbgBSY;&{G15&k~E{-7;akl3hIaw5WTrMu?t=PoMv9WpnzwBN8<#`hx zGBP(C?u}&aU8S1m^w{!W>4`hmo-Hd~bf^3%Pb(2?G*EYDaOv8;wdt74jLH28&MiBl zvoEa*no-6gdrP1^+on2FAm_L9oXjJ4n_4oO&i!5=`}3dn-VaCR?>U}V-M1{>< zkdPP{KnO7~FfcG6CKwo4;2*HUA7E$Vbv`T#<nL%kbKr%wNr5e}8^&Qyx7&1b|mzYgsOP=Lr*0i3Y;wr9qSc zT2W5T3=+y#xKw@K31e6L^5(6khJmYHsd(5+>bx7yZ>0R<#zKp2tS~3gW=^Z81_THq zE~z?*dT~Yut~TT)u+F!UrVb%;#nonWhw8GosMbZw)k?|MnNc>?s#7v-?3m?~s)>y% z!c}BgIyMNliRGx{O9O9d&?ZZbvtwWIy4QPUl63#;!0s~gylGU^~ zbRICodpzQ?%m8Z?*rY3@$hzVe)Wz>j4j{FjSNPacOB59@GC8*fVT=>9B|2-ZCmb#D zOsuAi&#i&Xqj@w5si&Muk+y{BO$xO*k*wD1>airP|01*#AZduHQlsY zhD|CJV%1JylVCi8dLjth>pwutEyE&Km6)5M&@cg&^pD_xk+w)93gLzk?QoRD9ZfBg zNa~^|Qg96Ftf30eBh5IIG-kZna5ady6ovsYOoLXcc2%d)h`K?`w(bO&=@r9oQ>TXg zT9r=h8-lIob)DD;U{BkeGMkq5nqxS+<>&U;ujqko2ORshNoj3je<2OwT+!Zt^W>*3 zZwN9UW>Bj2@p-t&Z;V&HP#yLFp)BuhS7Uimd7zEA!!0uKcM*(e`&|yCzbW?!mWj6P z)0EG4AX|TECiE-m8D0Cm@V_hFmcoB-zJC`!PATisxWi#cA}tRE<>O>j5cFfMhX1}B zJrg+0vwT?$QuruFF^_>dg+cp#U=YEPbi-Fpe9zoInf78)#wbi{`&i_m4fjDM)~*y zyUQ6J(jG8d{+z!)u34nTu48ia&j&ZH1U`4pi8*n2dtrj`lPCXeYyNVl9MaNT7s@TR amVrS%M3*IDWu_6(4hBzGKbLh*2~7Z~$wgBD literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tl/summary/summary_stats_stats_title_tl.png b/public/images/ui/legacy/text_images/tl/summary/summary_stats_stats_title_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..f602a43c39d509720f1cfb19ab25d4aeaf676ed3 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bN#0(^BgwJ#WDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJd0w6_jv*Cs$sP57>g@z<6IR?}WwVyhlGSNAaH&!8zoToaYwJJe zwiU9XU+uLPl^IM43ki9hiTc36#K49Bn+|3-vI!LEGBBw5D7@-bU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tl/summary/summary_tabs_2_tl.png b/public/images/ui/legacy/text_images/tl/summary/summary_tabs_2_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tl/summary/summary_tabs_3_tl.png b/public/images/ui/legacy/text_images/tl/summary/summary_tabs_3_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tr/summary/summary_dexnb_label_overlay_shiny_tr.png b/public/images/ui/legacy/text_images/tr/summary/summary_dexnb_label_overlay_shiny_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..bb2436738a831b466e701f3ff745c80f0af483c7 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^2|%35#0(^N{5+Qoq<8{+LR^9Lf&~dLUaa`=;l}1w zpPGSu#*!evU(%&eSxxzt=vj`UP<&>z1f)kgPFm|u#L0z*@9m{ PV;MYM{an^LB{Ts5e||dm literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tr/summary/summary_dexnb_label_tr.png b/public/images/ui/legacy/text_images/tr/summary/summary_dexnb_label_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..bf568c486aac5e8af4e95a237819caf922a9e50c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xc>kD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09ud*ZefK-R4i(^PdTxfqI=V1dLmaA!vZDkEtVjaG0cG!8pe%YxG zwGg{`+bsN^xa?D!0ejBkv+L{SsCZdn!9^)hvtWz z+-clzmbZP<+i@pnYFK5~>HCZ4i+0(1J4Bw-(LOGobMsBuL2hZcDc4RrPY$}YNJnIr eu;AvE=J7L{E$8#R;=K)Y6N9I#pUXO@geCyjhqq&-wpf;{OYGFo%higqpv&rD%|T_4b0*QLn?BEzkV_&lbP+ e|L^-hxfr=PvSzrSj|GyL_nMwk1x73$xo z=rbIN`Tk+wdYoq81+uA*kSLVyi*jaz^^#Aqsj57mcqIkK(bfXy= YdK+{ESKps$477m3)78&qol`;+09KqvxBvhE literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tr/summary/summary_moves_overlay_pp_tr.png b/public/images/ui/legacy/text_images/tr/summary/summary_moves_overlay_pp_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..9babffc0429cdb23586f721d548ae334fd6df7b1 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB_Vp5048MPMmk$VFu(d zmIV0)GdMiEkp|?bdb&74Gf;HelF{r5}E+Z$t4N^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tr/summary/summary_profile_ability_tr.png b/public/images/ui/legacy/text_images/tr/summary/summary_profile_ability_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..a05c22b7d47b527d91b0406ae0ffcbfcb21882aa GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq<8{+LR^9L|Ns9J5)y!9QtLfl zAfKru$S;_Ip=|P53m`Ad)5S5QA})Eu`~M&R$Da8A{lA<|LdDm-ySqviUx)2w+BAP( zclT%R&f?ll)r^NPf45i2*~`}U|NS+`8#O!*UkeS)0?z6$Q2al?=>~V$+6Yz_Zm|MG a28PuMrujjZy~02n7(8A5T-G@yGywpd6GZ0# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tr/summary/summary_profile_memo_title_tr.png b/public/images/ui/legacy/text_images/tr/summary/summary_profile_memo_title_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..3d69c20e57f33f369e6424f04f23a7fe15e85c42 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^{y@yZ!VDz6-1jE}DgFST5Z8o+gbzP{{Qv(S$N-XS zQg&SeN->uN`2_>%Uu8$`0jYjZ7srr_xZM6m&chBo%=SO!6`4iMnP*HlpYUz|%5TfJ zv|KZDYC3%5>?#$nx)Z8J&qcQ%K0o1*zxZv|rmNlyJQv+53t)7~{J|$owG; zD8yV6t_v!dB&(%eLb{|DqxEK#&HSTB?Vw2r~k)z4*}Q$iB}RkKQi literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tr/summary/summary_profile_profile_title_tr.png b/public/images/ui/legacy/text_images/tr/summary/summary_profile_profile_title_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..4170dccf682a71bf64c7b3129738865842cd72c2 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)=!VDx`-W}uvQv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15$~eE{-7;ak1wvavm_?UbgBSY;&{G15&k~E{-7;akl3hIaw5WTrMu?t=PoMv9WpnzwBN8<#`hx zGBP(C?u}&aU8S1m^w{!W>4`hmo-Hd~bf^3%Pb(2?G*EYDaOv8;wdt74jLH28&MiBl zvoEa*no-6gdrP1^+on2FAm_L9oXjJ4n_4oO&i!5=`}3dn-VaCR?>U}V-M1{>< zkdPP{KnO7~FfcG6CKwo4;2*HUA7E$Vbv`T#<nL%kbKr%wNr5e}8^&Qyx7&1b|mzYgsOP=Lr*0i3Y;wr9qSc zT2W5T3=+y#xKw@K31e6L^5(6khJmYHsd(5+>bx7yZ>0R<#zKp2tS~3gW=^Z81_THq zE~z?*dT~Yut~TT)u+F!UrVb%;#nonWhw8GosMbZw)k?|MnNc>?s#7v-?3m?~s)>y% z!c}BgIyMNliRGx{O9O9d&?ZZbvtwWIy4QPUl63#;!0s~gylGU^~ zbRICodpzQ?%m8Z?*rY3@$hzVe)Wz>j4j{FjSNPacOB59@GC8*fVT=>9B|2-ZCmb#D zOsuAi&#i&Xqj@w5si&Muk+y{BO$xO*k*wD1>airP|01*#AZduHQlsY zhD|CJV%1JylVCi8dLjth>pwutEyE&Km6)5M&@cg&^pD_xk+w)93gLzk?QoRD9ZfBg zNa~^|Qg96Ftf30eBh5IIG-kZna5ady6ovsYOoLXcc2%d)h`K?`w(bO&=@r9oQ>TXg zT9r=h8-lIob)DD;U{BkeGMkq5nqxS+<>&U;ujqko2ORshNoj3je<2OwT+!Zt^W>*3 zZwN9UW>Bj2@p-t&Z;V&HP#yLFp)BuhS7Uimd7zEA!!0uKcM*(e`&|yCzbW?!mWj6P z)0EG4AX|TECiE-m8D0Cm@V_hFmcoB-zJC`!PATisxWi#cA}tRE<>O>j5cFfMhX1}B zJrg+0vwT?$QuruFF^_>dg+cp#U=YEPbi-Fpe9zoInf78)#wbi{`&i_m4fjDM)~*y zyUQ6J(jG8d{+z!)u34nTu48ia&j&ZH1U`4pi8*n2dtrj`lPCXeYyNVl9MaNT7s@TR amVrS%M3*IDWu_6(4hBzGKbLh*2~7Z~$wgBD literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tr/summary/summary_stats_stats_title_tr.png b/public/images/ui/legacy/text_images/tr/summary/summary_stats_stats_title_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..f602a43c39d509720f1cfb19ab25d4aeaf676ed3 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bN#0(^BgwJ#WDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJd0w6_jv*Cs$sP57>g@z<6IR?}WwVyhlGSNAaH&!8zoToaYwJJe zwiU9XU+uLPl^IM43ki9hiTc36#K49Bn+|3-vI!LEGBBw5D7@-bU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tr/summary/summary_tabs_2_tr.png b/public/images/ui/legacy/text_images/tr/summary/summary_tabs_2_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/tr/summary/summary_tabs_3_tr.png b/public/images/ui/legacy/text_images/tr/summary/summary_tabs_3_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-CN/summary/summary_dexnb_label_overlay_shiny_zh-CN.png b/public/images/ui/legacy/text_images/zh-CN/summary/summary_dexnb_label_overlay_shiny_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..bb2436738a831b466e701f3ff745c80f0af483c7 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^2|%35#0(^N{5+Qoq<8{+LR^9Lf&~dLUaa`=;l}1w zpPGSu#*!evU(%&eSxxzt=vj`UP<&>z1f)kgPFm|u#L0z*@9m{ PV;MYM{an^LB{Ts5e||dm literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-CN/summary/summary_dexnb_label_zh-CN.png b/public/images/ui/legacy/text_images/zh-CN/summary/summary_dexnb_label_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..eab90a91c7fc8dd67b9cf24a7e8c37dffd62b2d8 GIT binary patch literal 1612 zcmbVMJB-{!7&Zl`a8XbYLOM~690`G7c4q8-oJaA6WA|WJ!N+k~DTkoQcxJq7-P&X9 zx!b)HH0T;iB4`i=Qc4h_KnRI~K!cEIXsJMHsEFtgO&IUP%Hu8xSh79#eEDonv;6e3Wm#u>-Ojdom+Mofmdx||Kk3)z^;p(@qp+;gPnP#1*2kZ$Sk|Lo#r++< z6TC{fN@`4~P}U|%X3&;({=y_j)PLb!#93o)U%NnH=jFWW@RMMSqdFVAC{FW(+&ol%6w<8f{5)>J+~ z#Pd9a9ppIBAYgHjYBqssac<$EBMY9#nT}NoN{=j5d)l`R(^(2hR=G`!d6`VX(1c}( z)Nq;76exIw%l7ioG`QeMj$|TJT^KB>u-Q;)RSeY$uB+`k0+`YUK^5azE=f{_DD=j@ zNn>7+W6?$bAd_fY7HTi&a%11nJXdCu(RMDGR(W5k(V|gX3(BC~2G3rOQ=!JibGN}| zhiU2C4t5$4uR^EZCxq4sbylCp4#ju|4U~wZgL|P4bqFQS9Z)kcf@$_Zu;4UOdBRM( zal!@?W$C~MRS{`hjZ|&|8+PuLMG(+lT41}Nj@Z2LAZn<@>1+3)z63Orl}GyCyS z8mISZ_Y793NRL@A*9WFr4;UtN67_=Z-=FxyweBS1cMacvCq6GJAF^~HjYuN9Oa+y4 zGHVFByI0e_+oWd!H+ohsDl@!a=xXz8x{`&5RZyAwZ>vh)qDe)!{^m8FZ|;?>X3KJ)mEYu(?j{l5G`@cn0JBl!CAFHe2?%@Yy)d5qWSlJ(`A WfBw`TT)k52eQ#s4^TkV7-uoA*z5f^h literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-CN/summary/summary_moves_descriptions_title_zh-CN.png b/public/images/ui/legacy/text_images/zh-CN/summary/summary_moves_descriptions_title_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2b4d083760bfed09c6fae182fb0a997420f282 GIT binary patch literal 2173 zcmb_eU2NM_6iy{zTeraj0(DeqmisWK;n==$?AU5r+N510HC@*Rtz%o)>+9>pYGS*# z)1-YWAW=YTi%_5FC=!)GeE?|%A*O-WZ5k6oJOE+{_JV{E51UqvfrJ=;*ZCuZt{W4P z9A965=bZ2S-QySf`}S^ce55fD2y9RE#0SW|mt31S-$(ujhj;8Jw=H(hK{pWC`k;R` z1YSAb6bNie8mS>~DA}tZD;I>CrQ%>QXA^WF(Ar+KAsWRVrQ)<@pWfyXGO|9ux!bAeb7NO1ZLC$xn1k_LsXXl-4$+(7CoW(h8dM?58HLRVnJj=~k zw@_VseUkwa+GMh3V_hz}T+M{*b&V4@Dgjv+?WQJd%no4J$~y>mjT4$JzBjfKb1?KQ zCuLdLYNGn9l&M&ZdhCE&RYCN0g- zC+eXQ1_&u$Qo=wHA~!)v!D!Hfw*_lR(JdzjiMvJ)rZH=qX_~49QHfbu%OQpdyHJTm zGN~j?*Mla)iFlMI9tRCWQxH%EK@}s6$V(Cv!2)Jf4G0WUMJa+rBuY@O%Ev8~_w!nn z*N8k3gAgKt(IKxhnk0l6Rg@uvHIWN*9H%3WugdRp4ANIHd)InM{r~M@RZ9o)$R&w$ zE8Wov)0I`$X!G6lX#xWcBDg$|lK^O>70%DzXNl%#uyD{HVc`H4J&wrv~cMy-&7*M5(Rv_{_ zHA*ADM6pI!wvBc2d1v`3t1VrZCZo96?GSmZ%iCZ5iX*V z$^)7j_G1hfHADifM?hEr2=F)ztB%(bFSkNN=Q)#nrTdqe3rg@SMIE* z{+)w$Plf->l~PfbYm5D7*_Gba%>nQNi5_3N{KQ91FVBDV#ZwDEo?wrz9eKC- z$?&JAn|FShSepwzw0iZPeGTugXy3Km*!|(Jk3RkTPOd9`YGhj9^k#2!;p)SC=9bZ7 z=LZYZm*2VAGG)x`uXX3=8v~=q#v9JH77ugR?FTM2b*~J4KeI^P*!Jy_)s<@tQy-5# zcd+GT;IqaPR}N>@`QaI7YV3OC=il0YnwgzFHuv=#=g)SZy)@H&@6xNPmij>)`DW(X p>G98Z%|>6m_Qz5}Ji5HNb?=qecdQ;dzsvtXNObkZ-|ifF<}ZAE%%=bV literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-CN/summary/summary_moves_effect_title_zh-CN.png b/public/images/ui/legacy/text_images/zh-CN/summary/summary_moves_effect_title_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..55fb0efd832da789da351d76a5e3c7eea57b224e GIT binary patch literal 1870 zcmb_dU5MON6pjyFcU!8UAf+ON)CWZ~H@W$nTsE%jWON72y6z5i`{tdSJ2PP?xoMKw z$?l?}PgQGC=#vQc$p^*0iLDA+@j(%!4W&Q^Io}QlK&)~@05`WFa3kOm`*mZYt-zL2A<{m+q zdOm2bW~<(lh_JANeb%CtJd8P75N7A{7?U-ci7na*B1gLL(I=7^_>Q#S@Dwku(QdG? znb4KZ#U|NYBepNiJtEHLh#LrLhQ&PWMJdW1X=oSmaWM@faR|xQ9BICAD6V=-VvQwK zG%BV{R2_--Xu{=6Ut((CO)t~ zhSIpZ>knDAkx*#puAvw zoZ%aSeS+F72{D%>$XN9CakI3?izr9!t1m&Q2S$@I2Ir(hNt0He5&IiYr0jBjOWE z+nhcnRFMr|*X62ZSh8iPW=l7HwPhQV^)4g*BCnJ6K3|VDLNIJ$8JdPB`<7mnahqV7 z=o+>yXz0}zoUDH;3HZLky<4_Z?6#sH&_a;%RBep+!wNk(9`yooSOW-?qP8806iKDN zG@cH&iNMV%7?~Y(DK~nZbdO*uYi9$T(D@FJ)(wgYT#I^&*RM}pgSbjyOP4iGC9-Df zP_FV^$ZcEqb<;4Y-m)jcuO@CFMMIh~DZc+sd>m5J#ZiayLlQ{0F6HK`aN8VQy^sDc zDWEtRN3{j6EW6>qOHNUq#NiY_nu}rC6Zl8jRcOScl<=PM*4gh)@qW{9xbw~GSMMKv z`i@V<>DtyeKmK#q?`t!)J;%DA-G1l&ubPj#rw{$|+R^zVhtKc*@LZ#E@RiQr$MauL zd@*VAxx1)=2^v32@d6!;b-nJ);%G$21~PVuE6 zqP&*N10t)C*NvQq4a|kS2WIJfO{A4EoKLJ(OuoA~#Ijz~@ts*a{Ysg20%zC3s=x z){i@BVhIzQI27faluBv=ZIa=_g{a;NZWEE#sYm@JW>`7HhP5CG;##nU>+JJ20a$8H zGmEh)7thN=#L37alhH}Yrs%k`6jE`T#=$~F=*S|Yxj$7CqEbY05=50CsCNrB)uqgr zO8kKt*SCX4{ODD1TE+=22vC9=kOlx$E3$+X1!>yj5=4^JhMIxxI!phC>PUk~QLllr zhOu#iZwR&ta)QXiOs?zUDiuS&D)3nnQ7Nbg5ev-NDJ>SJiN^gn!9Jnm<$}Nz=UmrD zwxT%DQV38Tf`Nfm1z6CrK;FT`G6rlNYEIX_9FT>yu3dYZ*+Z!43bAbf9YY61O6_%- z0?DA%&}GA+7j49NhiglPD64Oy&MtpnKb|h{evDKhx%uN|Ab>beO&t(kwR!<^K z(pf7AByBQk3!T^QCKb84jJDl2YLq$Mrv2KmIB=2%j%cyUs&|9t7Pq1v)WpN?W(_ew};tQkuI}6ialhz9Q9e2BDRNlqp#%I{`b;&xmX!^ z`K>cMdY{gT7xrKhbyQ*s-5hR{z{{>6@m@8{0m^Y9z7w0im7ed)G5 NJ~CN;@6hq*{|0a5ki7r^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-CN/summary/summary_moves_overlay_pp_zh-CN.png b/public/images/ui/legacy/text_images/zh-CN/summary/summary_moves_overlay_pp_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..9babffc0429cdb23586f721d548ae334fd6df7b1 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB_Vp5048MPMmk$VFu(d zmIV0)GdMiEkp|?bdb&74Gf;HelF{r5}E+Z$t4N^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-CN/summary/summary_profile_ability_zh-CN.png b/public/images/ui/legacy/text_images/zh-CN/summary/summary_profile_ability_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..6600db26802ed202ae0536dd122605998b551fdf GIT binary patch literal 1675 zcmbVNU5MON6iyX&tyH1)rwZydb=&%r|Ln}>vT<2wcHJpvyX=nL?Thx#&CN{MNp4KC zJF`pM2a6BBs1G8t_*j${>{FFiS@b~!6?_mB3Pn`#MPWtggNjm5<|lMz`lBJ4+$7&Q z=ljk%_slD^GtcbU{=jxY5O!3i%X4sl9Im0ETjBS$cLNV@w@1^56G6CRS9Wa^*5BSO z2)CT|tBdKP^DL%3kcrD{Ol}7epao%Uyd4p`#8Omabw9MlUqAX-M80c_3nPx|L?zbn zr`KXOzcy2)YfIE}#qp=mSQ~?bfTaYrgJziEwk>x2VpwOd6%lnH>5?r@WC78lGmA<* zW@tn%NK`X*RJ3HRpjx{5B+^x_sHjCnGbB~RY5^M->K!6Pi(L=Tm8W{K;K>#nX&PZg zX|-B%%aD0oS2WAA6jfJrT>^xZtcEFROJTC7@1e{R8v9Y|^AKeoNsTY3wg^nS5`rjq z8z#LpLBf!-5ac0}baDk`^b#@SoJ3m1~zs&z}dEZ60`_VUEJz+d@V6w6QCgISc_ksTH56ACYId|%J`L6HY zKQ?~ur`zsdIKKCbAD?^ZfO+?kmrp&s>)r?1Z^K`$f3tJ=>lcRCKi}Lueb_&_F?H$n zv74Jym*0GT=ilPSpYN59PF;HI#P`X@>!W*B z?75kBu~_S4R(3cX&TK-uYsazS=19D3dlVguB|FO=*2hW6^nHnS>4F3qMU4vyph9T_1A(CMK;Z?E0|EjGB&tmPVyQRZFwvlPZ`~LD zO0k77^bpUNN~L&7jJtlG7gSZ{0pua%D1r+rPKe8#6RdAo&`6;BmKR#C!$cNw&YcWX zEM>YR!SE`eA9MI5aGEE;Var=;+omgX$$)G+b z2(hD+J}t#k#c|6rkRS+z2ugyJbHw08Q|jP4L~L*%Az(vM1Vsc=W4-3;lTlt9>kYbI zRIq7Cipb?Uu*jJ?DZ#0xkmIm`36!CP6_{wO-|Sm-U*X~v+lh8tR1m1w3TUb-_5HAg zOw>n3i>cKB!g^HODOQh?N({C>ZLJW2%Tusqwp1Y0=ta`K1Pfdmk(( z*vS)mNb>BJOS!x%{C5sk+(-YH6h1l`muiduXW7;MEjvYN5^GcRXpV->o-7EQ z*^SyO{n}}@9X$HDUi|SyenOr-x|oA!f3F^VZS9VI+b7$9KKT5eoqTeprK(l$8-8Ns z?V+1?e)iDetB*hV=ZRAX_CCDrr#YJ)OFme+9n5t~o)V`j6?NImDZGQuSe~S_T literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-CN/summary/summary_profile_passive_zh-CN.png b/public/images/ui/legacy/text_images/zh-CN/summary/summary_profile_passive_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..66f56ff435e5148fc3c48b19c28e38351538635b GIT binary patch literal 1503 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 Jn~xlO?qB$|S|0!a literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-CN/summary/summary_stats_stats_title_zh-CN.png b/public/images/ui/legacy/text_images/zh-CN/summary/summary_stats_stats_title_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..5531819ef665bd054b5eb15d84500a1a4fe9dff9 GIT binary patch literal 1869 zcmb_dO^Dq@9M3AO>&o^}L8TXCsIZrf^eAYlllKwYy4%)bAjxF%o8SNc z`+v;5yt=Y9H@j z!j5jPcw}>(I8-@!K;Az(|j^n7BuIf4v2#{_>86JQr-92Hbv6Li1oCQ3Rb4J|c-K?SrPe&5MxS);F zahOEF)B%oFSkiJyLm(vuF776sp>ax7)?p!wvQ%JUfsNZd<7u03LtXs7!hi^^>lQY) z^d$@n6KS^C6EemD*%F<48!=NGEalyVu*IHmb9b&LM%9Gjj3*xFok^lrCoap?s=W7D z5K-Pw_gw~OHJq`EqHDSZw0WQ#9<-5VB4|IP=}6N?P?yud-?$2Dda#Tvh%Dy{s3;hU zGkjezCCKMVh=trB#4V=AQA?4FAfhVo@I)9E-WfwLTo=`&G{X^L^;$&{ic3L2k=-o& zI(9H%^A-Vi)AWI3YYgZ%(V*?y#4*TZeT|cDp4Z8GD%KOKW4&x?z@fwdCNUvs+FBX- z79%F6Hq>=ES$`x6L|@^~P4nd4mKOwC4pNb-jd4F5WzUR9oj@Me0Kz1%?TSM3q%x|E zr-LmbaAOKawEZ>{q}NFI2$pg`>*Itiv_!P7Q%vf1uBW(nZO0k4Ox=cMP@Xp&VA-Y# znoY|B%=Ue1*u-a06yP?F>l%V4GKxC=?~ad|NgGEkCN@b`xp^r!R)t$i`F9`vUsBY3 zXB^d*dUe?i|6R6=iX;xF#MYb-i!(ud6sHP{M3fS7X1sgqj3Le&(MJp3-fzw~>N}+S zW`2JA;-x+4ZnLwq`yl!B`Ooi~J=FO2*IOTzN`89$yCcoHSARNwV(EY<{qR-quPbU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-CN/summary/summary_tabs_2_zh-CN.png b/public/images/ui/legacy/text_images/zh-CN/summary/summary_tabs_2_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-CN/summary/summary_tabs_3_zh-CN.png b/public/images/ui/legacy/text_images/zh-CN/summary/summary_tabs_3_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-TW/summary/summary_dexnb_label_overlay_shiny_zh-TW.png b/public/images/ui/legacy/text_images/zh-TW/summary/summary_dexnb_label_overlay_shiny_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..bb2436738a831b466e701f3ff745c80f0af483c7 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^2|%35#0(^N{5+Qoq<8{+LR^9Lf&~dLUaa`=;l}1w zpPGSu#*!evU(%&eSxxzt=vj`UP<&>z1f)kgPFm|u#L0z*@9m{ PV;MYM{an^LB{Ts5e||dm literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-TW/summary/summary_dexnb_label_zh-TW.png b/public/images/ui/legacy/text_images/zh-TW/summary/summary_dexnb_label_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..eab90a91c7fc8dd67b9cf24a7e8c37dffd62b2d8 GIT binary patch literal 1612 zcmbVMJB-{!7&Zl`a8XbYLOM~690`G7c4q8-oJaA6WA|WJ!N+k~DTkoQcxJq7-P&X9 zx!b)HH0T;iB4`i=Qc4h_KnRI~K!cEIXsJMHsEFtgO&IUP%Hu8xSh79#eEDonv;6e3Wm#u>-Ojdom+Mofmdx||Kk3)z^;p(@qp+;gPnP#1*2kZ$Sk|Lo#r++< z6TC{fN@`4~P}U|%X3&;({=y_j)PLb!#93o)U%NnH=jFWW@RMMSqdFVAC{FW(+&ol%6w<8f{5)>J+~ z#Pd9a9ppIBAYgHjYBqssac<$EBMY9#nT}NoN{=j5d)l`R(^(2hR=G`!d6`VX(1c}( z)Nq;76exIw%l7ioG`QeMj$|TJT^KB>u-Q;)RSeY$uB+`k0+`YUK^5azE=f{_DD=j@ zNn>7+W6?$bAd_fY7HTi&a%11nJXdCu(RMDGR(W5k(V|gX3(BC~2G3rOQ=!JibGN}| zhiU2C4t5$4uR^EZCxq4sbylCp4#ju|4U~wZgL|P4bqFQS9Z)kcf@$_Zu;4UOdBRM( zal!@?W$C~MRS{`hjZ|&|8+PuLMG(+lT41}Nj@Z2LAZn<@>1+3)z63Orl}GyCyS z8mISZ_Y793NRL@A*9WFr4;UtN67_=Z-=FxyweBS1cMacvCq6GJAF^~HjYuN9Oa+y4 zGHVFByI0e_+oWd!H+ohsDl@!a=xXz8x{`&5RZyAwZ>vh)qDe)!{^m8FZ|;?>X3KJ)mEYu(?j{l5G`@cn0JBl!CAFHe2?%@Yy)d5qWSlJ(`A WfBw`TT)k52eQ#s4^TkV7-uoA*z5f^h literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-TW/summary/summary_moves_descriptions_title_zh-TW.png b/public/images/ui/legacy/text_images/zh-TW/summary/summary_moves_descriptions_title_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2b4d083760bfed09c6fae182fb0a997420f282 GIT binary patch literal 2173 zcmb_eU2NM_6iy{zTeraj0(DeqmisWK;n==$?AU5r+N510HC@*Rtz%o)>+9>pYGS*# z)1-YWAW=YTi%_5FC=!)GeE?|%A*O-WZ5k6oJOE+{_JV{E51UqvfrJ=;*ZCuZt{W4P z9A965=bZ2S-QySf`}S^ce55fD2y9RE#0SW|mt31S-$(ujhj;8Jw=H(hK{pWC`k;R` z1YSAb6bNie8mS>~DA}tZD;I>CrQ%>QXA^WF(Ar+KAsWRVrQ)<@pWfyXGO|9ux!bAeb7NO1ZLC$xn1k_LsXXl-4$+(7CoW(h8dM?58HLRVnJj=~k zw@_VseUkwa+GMh3V_hz}T+M{*b&V4@Dgjv+?WQJd%no4J$~y>mjT4$JzBjfKb1?KQ zCuLdLYNGn9l&M&ZdhCE&RYCN0g- zC+eXQ1_&u$Qo=wHA~!)v!D!Hfw*_lR(JdzjiMvJ)rZH=qX_~49QHfbu%OQpdyHJTm zGN~j?*Mla)iFlMI9tRCWQxH%EK@}s6$V(Cv!2)Jf4G0WUMJa+rBuY@O%Ev8~_w!nn z*N8k3gAgKt(IKxhnk0l6Rg@uvHIWN*9H%3WugdRp4ANIHd)InM{r~M@RZ9o)$R&w$ zE8Wov)0I`$X!G6lX#xWcBDg$|lK^O>70%DzXNl%#uyD{HVc`H4J&wrv~cMy-&7*M5(Rv_{_ zHA*ADM6pI!wvBc2d1v`3t1VrZCZo96?GSmZ%iCZ5iX*V z$^)7j_G1hfHADifM?hEr2=F)ztB%(bFSkNN=Q)#nrTdqe3rg@SMIE* z{+)w$Plf->l~PfbYm5D7*_Gba%>nQNi5_3N{KQ91FVBDV#ZwDEo?wrz9eKC- z$?&JAn|FShSepwzw0iZPeGTugXy3Km*!|(Jk3RkTPOd9`YGhj9^k#2!;p)SC=9bZ7 z=LZYZm*2VAGG)x`uXX3=8v~=q#v9JH77ugR?FTM2b*~J4KeI^P*!Jy_)s<@tQy-5# zcd+GT;IqaPR}N>@`QaI7YV3OC=il0YnwgzFHuv=#=g)SZy)@H&@6xNPmij>)`DW(X p>G98Z%|>6m_Qz5}Ji5HNb?=qecdQ;dzsvtXNObkZ-|ifF<}ZAE%%=bV literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-TW/summary/summary_moves_effect_title_zh-TW.png b/public/images/ui/legacy/text_images/zh-TW/summary/summary_moves_effect_title_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..55fb0efd832da789da351d76a5e3c7eea57b224e GIT binary patch literal 1870 zcmb_dU5MON6pjyFcU!8UAf+ON)CWZ~H@W$nTsE%jWON72y6z5i`{tdSJ2PP?xoMKw z$?l?}PgQGC=#vQc$p^*0iLDA+@j(%!4W&Q^Io}QlK&)~@05`WFa3kOm`*mZYt-zL2A<{m+q zdOm2bW~<(lh_JANeb%CtJd8P75N7A{7?U-ci7na*B1gLL(I=7^_>Q#S@Dwku(QdG? znb4KZ#U|NYBepNiJtEHLh#LrLhQ&PWMJdW1X=oSmaWM@faR|xQ9BICAD6V=-VvQwK zG%BV{R2_--Xu{=6Ut((CO)t~ zhSIpZ>knDAkx*#puAvw zoZ%aSeS+F72{D%>$XN9CakI3?izr9!t1m&Q2S$@I2Ir(hNt0He5&IiYr0jBjOWE z+nhcnRFMr|*X62ZSh8iPW=l7HwPhQV^)4g*BCnJ6K3|VDLNIJ$8JdPB`<7mnahqV7 z=o+>yXz0}zoUDH;3HZLky<4_Z?6#sH&_a;%RBep+!wNk(9`yooSOW-?qP8806iKDN zG@cH&iNMV%7?~Y(DK~nZbdO*uYi9$T(D@FJ)(wgYT#I^&*RM}pgSbjyOP4iGC9-Df zP_FV^$ZcEqb<;4Y-m)jcuO@CFMMIh~DZc+sd>m5J#ZiayLlQ{0F6HK`aN8VQy^sDc zDWEtRN3{j6EW6>qOHNUq#NiY_nu}rC6Zl8jRcOScl<=PM*4gh)@qW{9xbw~GSMMKv z`i@V<>DtyeKmK#q?`t!)J;%DA-G1l&ubPj#rw{$|+R^zVhtKc*@LZ#E@RiQr$MauL zd@*VAxx1)=2^v32@d6!;b-nJ);%G$21~PVuE6 zqP&*N10t)C*NvQq4a|kS2WIJfO{A4EoKLJ(OuoA~#Ijz~@ts*a{Ysg20%zC3s=x z){i@BVhIzQI27faluBv=ZIa=_g{a;NZWEE#sYm@JW>`7HhP5CG;##nU>+JJ20a$8H zGmEh)7thN=#L37alhH}Yrs%k`6jE`T#=$~F=*S|Yxj$7CqEbY05=50CsCNrB)uqgr zO8kKt*SCX4{ODD1TE+=22vC9=kOlx$E3$+X1!>yj5=4^JhMIxxI!phC>PUk~QLllr zhOu#iZwR&ta)QXiOs?zUDiuS&D)3nnQ7Nbg5ev-NDJ>SJiN^gn!9Jnm<$}Nz=UmrD zwxT%DQV38Tf`Nfm1z6CrK;FT`G6rlNYEIX_9FT>yu3dYZ*+Z!43bAbf9YY61O6_%- z0?DA%&}GA+7j49NhiglPD64Oy&MtpnKb|h{evDKhx%uN|Ab>beO&t(kwR!<^K z(pf7AByBQk3!T^QCKb84jJDl2YLq$Mrv2KmIB=2%j%cyUs&|9t7Pq1v)WpN?W(_ew};tQkuI}6ialhz9Q9e2BDRNlqp#%I{`b;&xmX!^ z`K>cMdY{gT7xrKhbyQ*s-5hR{z{{>6@m@8{0m^Y9z7w0im7ed)G5 NJ~CN;@6hq*{|0a5ki7r^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-TW/summary/summary_moves_overlay_pp_zh-TW.png b/public/images/ui/legacy/text_images/zh-TW/summary/summary_moves_overlay_pp_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..9babffc0429cdb23586f721d548ae334fd6df7b1 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB_Vp5048MPMmk$VFu(d zmIV0)GdMiEkp|?bdb&74Gf;HelF{r5}E+Z$t4N^ literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-TW/summary/summary_profile_ability_zh-TW.png b/public/images/ui/legacy/text_images/zh-TW/summary/summary_profile_ability_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..6600db26802ed202ae0536dd122605998b551fdf GIT binary patch literal 1675 zcmbVNU5MON6iyX&tyH1)rwZydb=&%r|Ln}>vT<2wcHJpvyX=nL?Thx#&CN{MNp4KC zJF`pM2a6BBs1G8t_*j${>{FFiS@b~!6?_mB3Pn`#MPWtggNjm5<|lMz`lBJ4+$7&Q z=ljk%_slD^GtcbU{=jxY5O!3i%X4sl9Im0ETjBS$cLNV@w@1^56G6CRS9Wa^*5BSO z2)CT|tBdKP^DL%3kcrD{Ol}7epao%Uyd4p`#8Omabw9MlUqAX-M80c_3nPx|L?zbn zr`KXOzcy2)YfIE}#qp=mSQ~?bfTaYrgJziEwk>x2VpwOd6%lnH>5?r@WC78lGmA<* zW@tn%NK`X*RJ3HRpjx{5B+^x_sHjCnGbB~RY5^M->K!6Pi(L=Tm8W{K;K>#nX&PZg zX|-B%%aD0oS2WAA6jfJrT>^xZtcEFROJTC7@1e{R8v9Y|^AKeoNsTY3wg^nS5`rjq z8z#LpLBf!-5ac0}baDk`^b#@SoJ3m1~zs&z}dEZ60`_VUEJz+d@V6w6QCgISc_ksTH56ACYId|%J`L6HY zKQ?~ur`zsdIKKCbAD?^ZfO+?kmrp&s>)r?1Z^K`$f3tJ=>lcRCKi}Lueb_&_F?H$n zv74Jym*0GT=ilPSpYN59PF;HI#P`X@>!W*B z?75kBu~_S4R(3cX&TK-uYsazS=19D3dlVguB|FO=*2hW6^nHnS>4F3qMU4vyph9T_1A(CMK;Z?E0|EjGB&tmPVyQRZFwvlPZ`~LD zO0k77^bpUNN~L&7jJtlG7gSZ{0pua%D1r+rPKe8#6RdAo&`6;BmKR#C!$cNw&YcWX zEM>YR!SE`eA9MI5aGEE;Var=;+omgX$$)G+b z2(hD+J}t#k#c|6rkRS+z2ugyJbHw08Q|jP4L~L*%Az(vM1Vsc=W4-3;lTlt9>kYbI zRIq7Cipb?Uu*jJ?DZ#0xkmIm`36!CP6_{wO-|Sm-U*X~v+lh8tR1m1w3TUb-_5HAg zOw>n3i>cKB!g^HODOQh?N({C>ZLJW2%Tusqwp1Y0=ta`K1Pfdmk(( z*vS)mNb>BJOS!x%{C5sk+(-YH6h1l`muiduXW7;MEjvYN5^GcRXpV->o-7EQ z*^SyO{n}}@9X$HDUi|SyenOr-x|oA!f3F^VZS9VI+b7$9KKT5eoqTeprK(l$8-8Ns z?V+1?e)iDetB*hV=ZRAX_CCDrr#YJ)OFme+9n5t~o)V`j6?NImDZGQuSe~S_T literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-TW/summary/summary_profile_passive_zh-TW.png b/public/images/ui/legacy/text_images/zh-TW/summary/summary_profile_passive_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..66f56ff435e5148fc3c48b19c28e38351538635b GIT binary patch literal 1503 zcmbVMU5MO798a-muX+V(5v?F&`rv6VnI!v>%XqPzo88_*bDnn#JrzG@lgVy+n@pO_ z-tHbEa`dGqQbnpDMNpK!w8aO%K(Q4pKKLM(`k+`UJ{0YX;FB+>PWB^QrCMxYGGD*> z{lEW5=jZm1Z{NLL5QOpSthK=BhxpjG?NFg0S^h zzqZ7d>;uT5fs9>RCvrE4I9d><_jM!eEE5Lmq~V9A_}iyvMc})pc(7nAc2puwe|9w{ zi>q@rXLZ>zTyftcV7iMqK|mM=-JlgFsB4OSUc}ewF%&@`!j?^OCKU*l?0Hb4F#!d+ zC^>3g1G*urMa9talR#5c9V$9hbCRMWrHFC{7=9v`7P}r=uqs1Yd}oSH#v%k^r_+%; zIhn={s2YX=6%A^d#1T@`3mNW8VX|k$V3EX${fPNA1Sun~(>60juIa#pAj)XNWauXD zFxbTrRAnVKsSk9W3>UTIR$sX5K++-s30cCiYKD!Pl+mO~|AjiczD59dt!-yAuB%HB zWFit)Ug2g89dccCQtL$oE|7$_V~3PixSD%XYa&#N31&2|QQ8^>YJQ|LD3!p(K|ge9 zCwXuaoLHCwCS;&?!mF*VH0XrchqL2Fer0 z#SGsN>^jJ!ae%qGet;VUMqxt)nG;cowrI=+bM10{Eo>WA!-V0`Ayvy1xy7>YyC|nR zxg7Ca$uo#2>BW3qs@IFURKR&daf=?&mBQ$~MV)pU*U@|Tf4+Y#_IX|5)=l%I)s`j% zn)MSNs@||37Rlk^s^x=z4j}BLxowJ08dTzn!(;!ZJusl{GzlmDk8lrQ3H4Y9$7H6# zy>)|Rf?Rc&*5JSj_)i1-cbn>U1m{g4U1r^fZ?gVHLf*7u-kr)H9nyJcJ5jY}YExgI zu8r+D2kyAKxbfEmKa!p9Pwd+xlciG=m)^NB@!rLzbKA4$Ke_UIPm}>PzgRnSPJZF% z4YI2}w#&NZ-dCOvU;NnbK6Ck=q=GLk((fj|dhO1K|2+2i_fHuHJd(fq zL#6!9tM`AtsvmII->4j>)2G(oI=|)Q%g2A&|Jla++fV^hKmp#RqK>g%q?{j3_>c0rf$Rh`xvq1)&x_vwyaAo7UpM%-osz z&N<(Ae&#+sGkwpFq1%Qyj@vOcnV*Hb2It`5b#Og?^4kpDuJG7tI$pVY`6010FM)>W6HGy|%MmVS!q=KJg zRcCS~UE$j=vM z_?#CoUQZf`$eO~NR#G-3OVP%7MUqWXGDTTMl59(cty+BN5FlDW%l2&k?oKRt$_Ujc z@@-LUG#bfdcKoz{)+WU-cp{ta_Jl-TQn& z07z}2(2LQROTFF;5k?bBAfuCzzUZ*H>@#teh2CO7*u)ah+#9R$?OeccT<5I5?-gzFJ<#EI^f+8t8l2S-fi;8ONnk`$Sl446z8(Q$FQ(nFZsug9^ z))iZkFMvYBP#odQf+?}fUQov%*Qw(Q6MeTL@VzA3Ij`mg5E$60Ef$4>J>`ZGb_tux zX9Q53bR24{hGi02DI?8-3sW=$l`JYFlcrLpDQS{XB3=8uM;7C{cI_$HYZ@R8lOoN; zB_x3X!n&>@RW&q1Bur%(lQ_Q+|Ng*%xx%%p_5=O@kHW5(EGP=0aA9XU_Tx%tRde>m zGGm$s)fK}~3@DM7Lb|0jDW#OI@V>-#=*I3a{CDD=l#(iTD-3?x zqHy(6u52p$*5KcB{eMYmwP(Ax#EaXm_3gaBdbfvRtB9AqJqjLryBu>NO9AX*FFb*6 zg#GWOseHDWT0d3H?mWp4{&@7y~Ztf9pG8!7JA&)*z+_uMZdpKc$JzYte< zzqPS@`1jM_-{3r1+4(^2u8-5-sGCovZ~D@)M&B7re01XBWTLon__OzaJ@(b9_015&k~E{-7;akl3hIaw5WTrMu?t=PoMv9WpnzwBN8<#`hx zGBP(C?u}&aU8S1m^w{!W>4`hmo-Hd~bf^3%Pb(2?G*EYDaOv8;wdt74jLH28&MiBl zvoEa*no-6gdrP1^+on2FAm_L9oXjJ4n_4oO&i!5=`}3dn-VaCR?>U}V-M1{>< zkdPP{KnO7~FfcG6CKwo4;2*HUA7E$Vbv`T#<nL%kbKr%wNr5e}8^&Qyx7&1b|mzYgsOP=Lr*0i3Y;wr9qSc zT2W5T3=+y#xKw@K31e6L^5(6khJmYHsd(5+>bx7yZ>0R<#zKp2tS~3gW=^Z81_THq zE~z?*dT~Yut~TT)u+F!UrVb%;#nonWhw8GosMbZw)k?|MnNc>?s#7v-?3m?~s)>y% z!c}BgIyMNliRGx{O9O9d&?ZZbvtwWIy4QPUl63#;!0s~gylGU^~ zbRICodpzQ?%m8Z?*rY3@$hzVe)Wz>j4j{FjSNPacOB59@GC8*fVT=>9B|2-ZCmb#D zOsuAi&#i&Xqj@w5si&Muk+y{BO$xO*k*wD1>airP|01*#AZduHQlsY zhD|CJV%1JylVCi8dLjth>pwutEyE&Km6)5M&@cg&^pD_xk+w)93gLzk?QoRD9ZfBg zNa~^|Qg96Ftf30eBh5IIG-kZna5ady6ovsYOoLXcc2%d)h`K?`w(bO&=@r9oQ>TXg zT9r=h8-lIob)DD;U{BkeGMkq5nqxS+<>&U;ujqko2ORshNoj3je<2OwT+!Zt^W>*3 zZwN9UW>Bj2@p-t&Z;V&HP#yLFp)BuhS7Uimd7zEA!!0uKcM*(e`&|yCzbW?!mWj6P z)0EG4AX|TECiE-m8D0Cm@V_hFmcoB-zJC`!PATisxWi#cA}tRE<>O>j5cFfMhX1}B zJrg+0vwT?$QuruFF^_>dg+cp#U=YEPbi-Fpe9zoInf78)Epm6y6GGLQxP<5QttZ=Riv{>;JVqWLv^IZ5H7qBr7$Lf;u}h-nDk^acw8N zNrfut0jeCi1uh72Ktdcql@JI465_y*5G?{E)C&g?0x1Y_K|;WIf2{tbKU7$C{ZjEN1ND779c4zmF!sg5O z6$(2~`n9EW$$boB78DU-bz1BO5l0salLxyI!Y!H#b=vU5vbgo$2cqDUvUtRBWjCtO zra!YD)5Z1K8eVTgD~-cNnI34N>R=v^?(HDxM(GA_nZ?f(KZcem?j*n$%wZ7q$tF+>Xb#Uxaj)? znx<(HPceX9(g{FB_W)8Y9hizvWMr2-OU>6i46kH)9j+&QJ+7;UrV|a6bRC1bt((A7 zEDUT*r<$xO9#)m1|GC)b`wF#h*iN?FvVwp!e!^3=HrNk~^!Q-Z_Jv*zK!mf}E{ixz zDkb7z+TSJu*QcOww$r5C=vC6)hb7EQJ1C}84IZs)6q9r%>IquCI&nfurloiu(6FZg z?CA!m*O3RXZP_ZtNH&l$6n;5z6RIYZjbWYscjAMP;wB0klpm6kc;iy8uL`%#!R7nt z|B@nQCu6_1q)W@L_wRyJlqaz_#gFD}nD+$!k#`ju@+if;XDm;Se8v0CM%9_BS)aYO z`0Ut+!ssur|NYO+FP+wwcF+m`^Ub&JdGL-qkJe8-+4}wYt)DjjJpa+DGfyS0+h2Y7 zUg_9@v&VNo{>&%Bp>N-QXzWK{mAhL<|JZj5-ldN0hvQE>FBYfY*b?1OjpoODX5YPA z+4IVG(K~;^Tjn14=H&eOAHIKKZuwVd;%89$%{_bK%ddmYk#k?P&pmq6;da&stJAa2 Jn~xlO?qB$|S|0!a literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-TW/summary/summary_stats_stats_title_zh-TW.png b/public/images/ui/legacy/text_images/zh-TW/summary/summary_stats_stats_title_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..5531819ef665bd054b5eb15d84500a1a4fe9dff9 GIT binary patch literal 1869 zcmb_dO^Dq@9M3AO>&o^}L8TXCsIZrf^eAYlllKwYy4%)bAjxF%o8SNc z`+v;5yt=Y9H@j z!j5jPcw}>(I8-@!K;Az(|j^n7BuIf4v2#{_>86JQr-92Hbv6Li1oCQ3Rb4J|c-K?SrPe&5MxS);F zahOEF)B%oFSkiJyLm(vuF776sp>ax7)?p!wvQ%JUfsNZd<7u03LtXs7!hi^^>lQY) z^d$@n6KS^C6EemD*%F<48!=NGEalyVu*IHmb9b&LM%9Gjj3*xFok^lrCoap?s=W7D z5K-Pw_gw~OHJq`EqHDSZw0WQ#9<-5VB4|IP=}6N?P?yud-?$2Dda#Tvh%Dy{s3;hU zGkjezCCKMVh=trB#4V=AQA?4FAfhVo@I)9E-WfwLTo=`&G{X^L^;$&{ic3L2k=-o& zI(9H%^A-Vi)AWI3YYgZ%(V*?y#4*TZeT|cDp4Z8GD%KOKW4&x?z@fwdCNUvs+FBX- z79%F6Hq>=ES$`x6L|@^~P4nd4mKOwC4pNb-jd4F5WzUR9oj@Me0Kz1%?TSM3q%x|E zr-LmbaAOKawEZ>{q}NFI2$pg`>*Itiv_!P7Q%vf1uBW(nZO0k4Ox=cMP@Xp&VA-Y# znoY|B%=Ue1*u-a06yP?F>l%V4GKxC=?~ad|NgGEkCN@b`xp^r!R)t$i`F9`vUsBY3 zXB^d*dUe?i|6R6=iX;xF#MYb-i!(ud6sHP{M3fS7X1sgqj3Le&(MJp3-fzw~>N}+S zW`2JA;-x+4ZnLwq`yl!B`Ooi~J=FO2*IOTzN`89$yCcoHSARNwV(EY<{qR-quPbU#Uwjv^v#(E0HFbdmGc$JtpUZBiCs(YjZaIiq85tNfZEegv_2k3N w_Um(h{Bc)^`OvC9twNxMNl`UqK~4@2gRDwqU!!#2d7zyPp00i_>zopr02&}mKL7v# literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-TW/summary/summary_tabs_2_zh-TW.png b/public/images/ui/legacy/text_images/zh-TW/summary/summary_tabs_2_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..2a04879b32b86878531ec315a9cd5557d7a9b65d GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^WlI3WoBmO z07loMA8!u7_N)1)Y!vgMRXxatV-cg`45{Q~22m@Y@GI59H-Yvtc)I$ztaD0e0suEA BOZET& literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/text_images/zh-TW/summary/summary_tabs_3_zh-TW.png b/public/images/ui/legacy/text_images/zh-TW/summary/summary_tabs_3_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..ef65774f7443f913fe2544c3f63b7e015f476925 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^We zjgqLSMGFj=LoAt@jdUkXo5mF4F;T|u_lI4=^Z##PG&(FS!M}rH@+2XKTd4{Ma;zqO Q1e(m?>FVdQ&MBb@0K4@(AOHXW literal 0 HcmV?d00001 diff --git a/public/images/ui/pokedex_summary_bg.png b/public/images/ui/pokedex_summary_bg.png index bb55127edf238bcad7fae39a8fa236e5baaa63d7..423bc7528fdd66c5c2061d52b27f486728166bc9 100644 GIT binary patch delta 725 zcmey(c8+a=O1*S|Pl&68goGv#R2N%XdU+k&J7vn0IdkS*xUl2KgAb)Cw~jL~Fun71 zaSW-5J9Bj-Z-W7k%f%jtv;;;aX66k|PdRl`{|io7VbSc-{@y&#e|_P^_t$pD`I^2I zlPu9uHNW}WnEg=7!L##T&fTz-uSWb0Q%g;gnuCYN3m{%m?{Px?1}n!;7T*aI{4Y$L z;2*%OI5$CDWr^^X9}{1)*a}?Y%u>iPX?k2IW^;36vv3Qe0@tFWOPU%Y8eC`c9ogi& z=Zxj_9~15h$uZY_+c$U5^Q+Y#YCpy8d9akX?*RuKos*lx_TR7IDyw+xhmDV#wzG=A ziSOY0rXS+KTJ98GpuU9lxA>|i_Jz6?AsXCnE4b>kOTH(>XNPUzI?JZ)!itVUz#>an zZ@12ye26iveg#*UqL#!$t%%kaay_C{U?MFyvf zQ{NrZIL7I7r=G?8R(wW-V4OyVfa0I#|BqTZ*4uBXY@73Z_lI2zIHOtb9*SV!E|KU{ zz$G+|Yu1L)3oV)lT{(m6o0x^6e942lJ~IU89BPSo`(P5yuFk_8$m5c2py|k~;v%}^ z|01THFR~Ja&W3%EVEL`jy!Q8j`};n#vPb1S_`CbVbBFFI1ML=OT`dF7hYsCbK28=F z7BNj0;M=m|fC^aH-bf}RurX3mCgUz^(ECIC8FjM`t`Xp?hbzF)_vb{x0$0|w)`A7B z?BB{CR!^7^39@1>-wMY=TorsmVGjC2W(STdB{JKnaY{c>No2mGqSG+Dg|%Svhe!r< zPVNU8tsu76hu>?=zvoy(XN`YzVV~OsoIleNg{%Sq`%UM?*l#(%lA= zI=Lfu>{ETKZ*qV`U&N$C;NQXek4`PucB*&BASs8f=S9XG~eZCbWp_PJLiwOvzS* z&NS_cdY-1g(;KhVKFGiSvx!;P?8Cp1f zBtZx)EHBBoWyOIt0(@KEF|90rc)vkxYeE>3JchQq6pIUsm^M3ETxeqcz59c$#|a&f z4Poq|R}>OiZP+=r7l?C8KS-Xqfl+R93va=s4UBn0Vh4N=G41gDq0=zCg|%P{h+QH2 pqxPC~wYc2omZNOu+I!gkFo^!vTkvtw6a@w#@O1TaS?83{1OQBENQVFb diff --git a/public/images/ui/starter_select_bg.png b/public/images/ui/starter_select_bg.png index b11cd12a5e4f7d4aae7d001323c2c89439c82154..14e90dd0f85857bcea9532a00b21be18587a05cc 100644 GIT binary patch delta 753 zcmbQr{)%maO1)fwPl&68goGv#R2N%XdU+k&J7vn0IdkS*xUl2KgAX5m{AkGAY|FsF z%SUy?LJh`of9tukDQU zHGL^2S)!wAe)G36`=OMBXXm|~yJ0C`jrbd;mYOCt2M>)G4)q=yD?Co9-(cnV$>KX< zg8zky6Z`|173U_1t1J=T@?+vl7F&T!oLLGvCQXm)#B6SEY!+@|RNz{4bV*Y~M1$*0 zz9XA__nfhu{$s*jAvxxnZ~Nx%d49F}L+z)yJr9=h_C4T$qjPd|*#7$!TxAuH{jl*- z({@(zH}M@@&foMySj(NF3)Gje{uW==#J*6sB1D7RZ3S1IcFFgI`0TI^TxZ#oU0Bgk z2v}qZ>+RNglMgYb)vw?RQ`C}Js1?!rLarx3bdA%NgB+m;IRdehWk9tL^;zxD+&;*8 z*g(MLV$w3k*>kxrH5Ib9l}vHib+&L_wovtctsgdQ0!*Rp1+stQYqoIw|L45Bep|_% z0{uN68+2ABgjsAmnEsXHILr5}dZA6Mrx$Ux6?lDkA>_xIm+Q1GAu{Bkz&Q@P)xH+W zJHlrdByvyt%6{;OBvI`wO#p_B@WOs9fMGdWP#^qnN2d%Lj*UDG8^F z1+Kh2iZ&M(v9$@vWgKLFz3~9EZdO7V2mh88jgg99>?E9k)`NM9E$mTO4%7=A0x95l zUp4!uSv0#T!x04$7gG~$MrPFo4F4CIMY8_2eN!W{heu|`?H2O`_UV^oZY1)px%un> zUvYx(EN1I7jlbd}9GqS^nP&36xzNCYlE&@*1&N%kqQ>DBY&DFYEH@r`oZDx`00f?{elF{r5}E)u Cmp2Ch delta 796 zcmaFGHkEyXO1(;ePl&68goGv#R2N%XdU+k&n~;z&Wy+K}bLL#Qu;a#q4oy(XN`YzVW2OsoIleNg{%S-~L#9+to@GcpgP zEpOVARKU!3DUfNU(ea(@Jm36X_29FF14oGLq0$faA1^BX`OW|K-_1*fhxdL^I=E>? zQ{=-NZ1b-w%Lw0D?Ri2>r&~+nkmkX~-WIAmwsPKVN)2Rnwov}D#_VCwgSgy7t-2A{ zobj}nS5^y z*k9ErGIFlvzP7}2gEKSRga9T!AU2yAz-Z^<#JXcb3zvZB3Wk|2OcOjcfK)Vt5htrc uNh^?B!S!d^;++47T2)2D&cr;F{J?r<`JTF|A^)c{0D-5gpUXO@geCx_I$&!6 diff --git a/public/images/ui/summary_bg.png b/public/images/ui/summary_bg.png index ebfe87b78b22e83e62f3d082e9a109b25fdfdeb7..4bdb6d0db2235091116f476a06b86702d712be8f 100644 GIT binary patch delta 464 zcmey%c8zUv0JkI73=v$?~ue4XeNzJi6I3h@ZTWb!G+1%pN#KhUjBKzJ+&hhB(2_6>= z6#Ew>06F}6M!gHz#Amu+FnG8?a7x1lKZE&ao8-5b796Tq5O57NIeMdGK}vq`Ek}>- zg<<7y(=47$FWB+n{_m=a=Q#)8AO5{3?Or_BE8bsCtMzugXgc1-{f=AjhMo)S?bcNf zd^5Q3wQNb)9Uv;xvhBf&0I{A4qB5epstdXUMAtZNKFAS>fkMF|nFq@js`E-L)QV_b zk|xEp_|IhyhYSRo10$Rhg_M@CcQ#%QShXO) gT{`6HEFZmuQ5NL{`P?B z^|=lfJL*18dZi@zi$yVJ;Zp}OpB+xK7i>ysad;u5BY%*i@q%iEnJ9=>UJ-BLr0|6! zYdVWEi__!>f!uCtCY*6!**+g>5j!}+iQ|Ki&_Y)M>zM@w97!Mf7y575+s?ZG&b5ua z%?=DKj^fVB9t!oA%dB1;D4P0gaj$2bay;i^-gmXOcPyhn{4SV({mkE`3+^q@-|?!c zTd!ixjtBc5H2rl7*$}^i>t4&Y2fiNM-?&2$I%aV9ait#Qh&&j$@HhK*j?jZzCel3u zqUb09EHXjtjd)d);Hsw34lcJ9TwzR#za~FqR2GYea22&A7HUPbzL4(;5MAT6WwHX3 z$YebxHlfgibx^4l2`#GJXhu4Po_Z-w$82L7A8o>4*Rg6JFZbK-wY^VwB+m<=Ub vO-0lcovJ2CSm?G&X#}`SU%4|mlP8%>V?Ru6{1-oD!M&jO0JU!!W(Dve8 zrSHGwO^e<;>uKD4W~W!(&{>_dc}?^GMg6z<*Gg?H*=~NEg@M6l6)0VEEEAUN|o@ylq*&l-CD&)6r!Gc5yri(mZdyo4{T7*dtP@Ok zP1DMrnVoz1VdR4Jl`HmmXW3tBd%XEUmF3&^b&D5t>+O26s9Ud^b zA%gSb|6i$h6^|{s=qi3*AFK{aSV^C#Ja^OnbB}28n~xXIt}VX%_)=T->g;ITJE`+`*p+bMfqY2l+yR7Bp!5PP1}FG+WC0b)3!dBp8>S1haPh2A=vDAAa$`CYxu}JwW3vmVWSfC{LU9*V4|_LCrk3GkQYZwzuLb*-NjLEpSh1l ixdBBLd0s4LWtg4+{B>mQv=cyE89ZJ6T-G@yGywp8yG8{7 delta 265 zcmV+k0rvja0i*(uB!3}LOjJbx00960|2a8IN=i~vQe$IdV{>a`l$4a5oSg9Z`2YX^ zKvn7;00002bW%=J004HA%{Tx60I*3!K~#8NypJ&sgg^*IEp5GlnaX;-6B^4cVh!{=$qgqC_jOG`LwTx;R)j}B1M+*S0Vk_w`z!oi>`kx=np=z!DwCC?vxm~z5ut<&bqzk>d3)%cke zn4EL*#-fd`$=x%~NGTrTk-qco%?-8$g%-vKX7&uOY7UW_^{@X2FZJUJKhC5srShgK zY4WBB9kK4CNgF}b)!P5{=YO9*vwu$2`Tng*l7UOFNojAr7ICoW#U#PK%F0F0BN2+h sdZyXA&R^tzarukjJ8^JhAf{zAPsvRzopr06PtHFaQ7m delta 505 zcmZ3*G@E6DPQ9h2mzP&iLPA1va`KcZQ|8Q>^Wn#jNp>@;85kHCOM?7@862M7NCUDr zdb&7)T_@4vmHmCU|8kIs@o8-4jUjMB$^J&2nn*)aDCxsfFPN)u3j@cY3kR~;5D1# zdXHKw-4jg21cv@6uiQ7^e#>;*?~8pWddjw3*;CoIGR!n`SIXAAyNu2(s`>#G$jX#a z=@oW&*>bVpEPvjjD5>^=az_Rs(T diff --git a/public/images/ui/summary_profile_ability.png b/public/images/ui/summary_profile_ability.png deleted file mode 100644 index f839a6249f8989ccb05acde563d1d217dd68cac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq&Ne7LR^7#LPElaA3r|3u*?T? z7)yfuf*Bm1-ADs+0zF+ELpWr44=!YEFc4rlXxgFOD7J#Bw@cxX^n!WDg7Umg>xI&8 z^zEKBYyH_19SXlT6nZ)R$f~#}bm+BTss{(Ro0n6>gP&JwPK#}+`xc+gEx*}OMlJ1h RMF-Gu22WQ%mvv4FO#uD>I(+~D diff --git a/public/images/ui/summary_profile_passive.png b/public/images/ui/summary_profile_passive.png deleted file mode 100644 index 1ff9ad8e09a7045f310b1b0327d39fec0d8cc2b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq&Ne7LR^7#LPElaA3r|3u*?T? z7)yfuf*Bm1-ADs+l097Wl%V`F1u zetv$Gl$4g1mYR~9oSdAgsj0fUy72h;^YinWA8x4t0007XQchC<0CtnjH~;_v)Ja4^ zRCr$O*fDCuFc`&g@11f54P83+2Bur@k);QC7)5(;U<}bEx_@Z!0Ybo@g+cEwm0f~E zHaUFXQvdP(<6*RXRqmzV+Rx!omG!+j^HI`svrJLX%_>WAmQkE#6lWR5S*EJZ)?SZ= zRrOJ;Z1rmW2Wz)>3sA8_X21ju%Ml>cU{$O%YFUAE!*GF`m4lVGdbe0(%G2bnG%^jO zh82d9`Q!C$<$tY{pJ%16?Zqv?PiM00thg221)b-$g~nTsSdzB_i8ul9(Mns6bdgKa zR`85;T#CXL^sE5V-7H#Jt057oVqvjvyIMsnN?KvIxLQ`!0_QX=0G?};u;qA{um#=) zVXINH!UNW>mJkL%GmR(XpY^WRdt-OU}W(x=IM+6ZoAn;ER^48aIS!n^+SieDVuG?%jHT9(pj zxIK7f9sjpjEEbCuOWCSfOQ)%!zx<2EVzF5IYix_fVzF3*?(_C}`@DU=o^SzQSh+Dh zEEbE!VnfBJNjjy!#bU8otaG7s14G8HxOXttdIErQyY>xJyLNA-XWAHnc8%IKYS*Y; Y0K6IYK&Lq2ng9R*07*qoM6N<$f-piHLI3~& delta 860 zcmcc4@|KCQtVy$0u3Wim*RBsg zetiD?IUyn8|NsA%mR@t_%<=LHnlfcda&oeK=Q}^3HpY@5zhDN3XE)Lq7?>V;x;TbZ z#GSc#kn6C5Kuh9zCz`=F#2YQwZ{8Oo`Pi}tLV*N1pmyoyNDd~n4 zzgD_V*fpK?o96qaVaiU+#R_fr9sB3M*6qmal-5Ogwg1mCt+@I=Ol^!vO-Z zXQuzx`o3RJf2{%vB=(R21X3OHrPpQkiF0{Rf-{9&`~<9=uXen zb&)9!&S7j*(s|FV$z05=owRD6X(F%EqX5e#2_^}GzXCf0=d&tAS8X&2JsSCdL1nKy zYst?(%d3s1p~sY*%|g;2_S7t2wfVxTQyOO%sd87W7MrGd_R{x+FZGFqNwKkuR8OZy zGR*3j>Y8|M;mbox&ig!)EsR{J-7xAh0Me*6D~m-)8G?)_2bFADdqHQBA?B@@{k_W5SMZ(TCIYzCDZ;H4i*- zbba1>EmvVprrnKu!akfkyNpGlK5*UhJl6MjoTOg*Gwz8#Xgy!5@$LlE_HvdohkN|* z!%7<-COzj1lW1vFXmIj(Jr#i)cvM@x9YDe zzx7Vdkc>Pa*va#G7V8Rbu{FFeZ(f~IUVA=>QJ#-;O+y7I}zE ed(DPJQI7NUk1o?+@e7y%7(8A5T-G@yGywpSo|M%9 diff --git a/public/images/ui/summary_tabs_2.png b/public/images/ui/summary_tabs_2.png deleted file mode 100644 index 250c3ce796009dfb129205805f0abc3993e171e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^WLq!Ry=O zboWL{MO*P6@ts>GdWhF|F4q%3?z`euTmNNcez|-i#K2reM>>k@*)qS@m#o@-K6lxl jx!KQc%hb=zb7N%)c#?6{Q2a_g&@Ki~S3j3^P6e6DA1%j)*a zMOWEw`SQv{z`XR8HHW!Lsn!H*-7jh#zfJ42QnY4Nf33>7RJ;OXk;vd$@?2>_FNLA3w? diff --git a/public/images/ui/text_images/ca/summary/summary_dexnb_label_ca.png b/public/images/ui/text_images/ca/summary/summary_dexnb_label_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..5477e3385a8c5fe552c6e601a21330829e7e4f13 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^AT}oxGmtDh5!wLa1o(uw{{R0!AtB+%j~@)FqPu{C zj3q&S!3+-1ZlnP@8lEnWAr*0=hc|LEC!19zF>?UP4j literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ca/summary/summary_dexnb_label_overlay_shiny_ca.png b/public/images/ui/text_images/ca/summary/summary_dexnb_label_overlay_shiny_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..54f0c3799a042384cf5c22a30b165e87491aaa9c GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^Aa)iLGm!kTLZbvo@dWsUxB}__|Nk#oknrNgisHF< z!+?CIk|4ie28Oc9XDxs{eNPw1kczluj^6qMA0FIgZj)E|^N;cH?r?62ID6iN3Z5hV m4HXA3F|=K{z<6x21jGIFMb8#x7KH<~GI+ZBxvX15y(_T^vIy;(B{8avnAiaMpjz#QT(0$Y!eGdA6u=n)zmeut1lk-r~R?X`o>F- zdrwSm&wc(bqWx(J$NuJ+JfTAq4|xA9&8l3VvZd0V@%-X!Dafg$Tw+CJ_ey z8!v3wP{L67@236#@Ph$~{~6Yt$@;mftAT4Zt3c|TU|nr39p(ee-X{Ft|IfA6_QaMA jq1rdXN_8(>h+<^0`mP_KvUSIKpj`}}u6{1-oD!M`>N3cf&b zrjj7PUG+WDefm$*bQ_{{5e?XWoAXt|RZOzxw6f{Z+gE+V{25 z+xeC}y4ze{R8#YQ-lx5fA9FKsuBrav=hv5i_kZQ@Cp#RY9{rHpcTe>A@$Xsl=FO3a z=)QCLxb>qyPv-slc=F`2M%HioRh%1L`+kcDD0F$RPCU3OG{)h`(Jf32Q+;e-dGBje Q1iFO5)78&qol`;+0Ni3={Qv*} literal 0 HcmV?d00001 diff --git a/public/images/ui/summary_moves_overlay_pp.png b/public/images/ui/text_images/ca/summary/summary_moves_overlay_pp_ca.png similarity index 100% rename from public/images/ui/summary_moves_overlay_pp.png rename to public/images/ui/text_images/ca/summary/summary_moves_overlay_pp_ca.png diff --git a/public/images/ui/text_images/ca/summary/summary_profile_ability_ca.png b/public/images/ui/text_images/ca/summary/summary_profile_ability_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..2d9e8ac317d97a38569a3148d5098eab4b7008c8 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^W$E6n}tEh%1mzNJ#kq|38G>$owG; zD8yV6oPWN_Xbw7OOHIv8Ti}T`pberbimYv~oOJecMrw1fmEZq(M?z~d= nHF%A>MUbD~%q8ne_kCh$Ytm-?$ocIM&^iWBS3j3^P6u^~?&kqV}9kYBipZuP?de_-glUOYG*sTui+Np9Y^zOA)&F8XAN=^wczo5~z;nxmdKI;Vst0DtFV$N&HU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ca/summary/summary_profile_passive_ca.png b/public/images/ui/text_images/ca/summary/summary_profile_passive_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..a072b663d25480604ae4295c11b872248eed64c1 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf!VDy9I}1XA6n}tEh%1mzNJ#kq|38G>$owG; zD8yV6!FpF<#OknL|-SI?fLe78FnYNZj^LY#c zzrN|#;@qX}d?ksm)_J;A%g&N*M>j2&GtP}Ke|hKNv9g|hipy4rFMDhE>3xz|#;Prv jyS*D895hk+yO;mqEk)@^lP3xRtzz(W^>bP0l+XkKNrOj& literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ca/summary/summary_profile_profile_title_ca.png b/public/images/ui/text_images/ca/summary/summary_profile_profile_title_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..a5ed0e3e169c949060a541c9c23dc8ec4a704b32 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^dO*yuN`2_>%Uu8$`0jWSw7srr_xY%_s$NrC_X literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ca/summary/summary_stats_exp_title_ca.png b/public/images/ui/text_images/ca/summary/summary_stats_exp_title_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..e7ac7268b54b4d78d893f8cb3fe573397fc7dfd8 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^K0wUF#0(_2F5G+t#0l^TaZN}_`2YVuggpI3!51jb zR1)MD%)n4K`K$$yx4_fIF{C0cx7U{Ikb{8Rb+ek5f}DxV{Caxd?;6#~XCIsMb5%k2LY^G|cnulcsKb0^TP44$rjF6*2UngA!+Xlwug literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ca/summary/summary_stats_expbar_title_ca.png b/public/images/ui/text_images/ca/summary/summary_stats_expbar_title_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..4889b64eca8c7eabfb33cb19dd3e5e538547e7bf GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^+(69A$P6S`X0(U`DYgKg5ZC|z|9|-Lqn~x7DNuy5 zB*-tA!Qt7BG$2RJ)5S5QA}+b&Ys129#>2u2HxGPR#mHc>o?SQO=$8VZ3I5+SkUI=008Js=Z@JSf(ihgL#Zo=eLQvyMRt$@O1Ta JS?83{1OW5_U#$QD literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ca/summary/summary_stats_stats_title_ca.png b/public/images/ui/text_images/ca/summary/summary_stats_stats_title_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..426848af866727b303ff3acd2e512232b96c0c4c GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^{y@yb#0(_krg2;caRPioToV!!{{R0EAx}S1@CAx9 zl?3?(Gcc4*K5GHwZS!<-45^4q=5S@>KiDH6a_~cIz`c`x@_pjdF)%D6buEGfqv@{odd+_1gx2p~ZFP-B0c=B^un7`@T zgcbk4uHU=2^8f4quj9jR{QtFA?nK4G30spygM%-xa$UVkEF)uW#8uWLgO;Qwfi+DG YrX3Y#zqT000DZvV>FVdQ&MBb@03eTsGynhq literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ca/summary/summary_tabs_1_ca.png b/public/images/ui/text_images/ca/summary/summary_tabs_1_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..1e1ad63672e878ef869c2cf92bff8cd2486d3906 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^`amqe#0(^Vr=D{MQak}ZA+G=b|Cf-E&?wB*IJ|1E zkm+2YIAckWUoeBivm0qZPOPVkV@O3@GKXt}K-+(g5A3dNb3fa^N&kDj_G5kHoD)}8 zKiv3m;dSTr%lr~O=2n^7h@9#4Nt_|}%lu7x#f$$JRwoKNoVyw@!AO98jgHtd9V5{U jsWS{d-kiI6B^elwMn}K#cx_tDnm{r-UW|ND@Pa literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ca/summary/summary_tabs_2_ca.png b/public/images/ui/text_images/ca/summary/summary_tabs_2_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..bf794e82d2097bf5dd73acd727f5e70b06accd01 GIT binary patch literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^DL^d1!VDyZ>W^;#Q2{<7uK)l4mynRqD9qG2yh^h; zTl3gjwqEZ%pe$oakY6x^!?PP{K+bwk7srr_xTBK-xeht-xP0e2zl2?5oL@U&it$$m3r@Nf4Ey+y0qnSIiqel{89ZJ6T-G@yGywpAlWDd9 literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ca/summary/summary_tabs_3_ca.png b/public/images/ui/text_images/ca/summary/summary_tabs_3_ca.png new file mode 100644 index 0000000000000000000000000000000000000000..6a0109997b213a6f66d5e34d112e6e3dbb7a6473 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^-ayRH!VDziR_ZSXaRPioT>t<7FCihJQJAT5Xr;#C zRa0W+)&r#&OM?7@862M7NCR>@JzX3_D&p2&Jjlsx$m0??eM7ttElT282RoRRo!U>@+qs5_*M^?u8N5342lq#kcL zWl(F(uzmGTMkCp6#cYDzZ$l*@({^I`fVC%KN2kDKLHGW{P@w>b~ykj z&QucQ7tFv=HumdKI;Vst0EOKxivR!s literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/da/summary/summary_dexnb_label_overlay_shiny_da.png b/public/images/ui/text_images/da/summary/summary_dexnb_label_overlay_shiny_da.png new file mode 100644 index 0000000000000000000000000000000000000000..2c66a714e0c0b9e44dc85c1aaecf3a4364da8c71 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^Aa*7TGm!jPv%U&Q@dx;Xxc>kDAIMy=AOVP8yjY>H z^il)JXD$iy3kK4^%8uLvQpTPxjv*CsZ;u!XGAIZzAB;HBz$D{PQ1Cupn3pf(W>V|M q(9e8KT1kh6WZNU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/da/summary/summary_moves_descriptions_title_da.png b/public/images/ui/text_images/da/summary/summary_moves_descriptions_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..79b16227bfe298a787406530b12d21c088bcb1b0 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^K0wUD!VDxA7O*4%DgFST5Z8o+gdabC{Qv(S$N-Y7 zGS27#rI<^C{DOh>ud*ZefYcOE7srr_IN!cT-a`gFEQ_bGYDp|Gl0EQfGsB2+4but-I-Lc5= q(!^(6XO}W^CKyYnNtdp<@Q3NWnnjUIa-25MeGHzielF{r5}E)Wn_^!8 literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/da/summary/summary_moves_effect_title_da.png b/public/images/ui/text_images/da/summary/summary_moves_effect_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..f2ac04e62c4b9c0861c03041e2c80c04131b2628 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^)~It5e%NL KelF{r5}E))yj)EH literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/da/summary/summary_moves_moves_title_da.png b/public/images/ui/text_images/da/summary/summary_moves_moves_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..f1732e3e2c0827b8f2ba16b129249c982203b69d GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^VL;5m#0(_m_B?nDq<8{+LR=FP68``H45Zt(n&1YTAAAl3ww<6PZfe zRaDrdcy9imv-pzkDvr>Otm{U}4+Iwn`sk=-tP=dGy3~E0zhbePu>4N3?aMAH-)2uN zI;2utd`r4@w!M+(_uQrPQ)bNmeP?6+ru7G-xVK9&go$quX#C44{yVo>QR@yT(BTZ8 Lu6{1-oD!M05SsK@UsGi zm`j5Ef`Rm}vLp9^l!2#JsE_&kaaKAkSFy{`J2!iNQZ kr7Tkgzj<7l_4zU5aTfObE|tqgfqEG{UHx3vIVCg!0FSUPegFUf literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/da/summary/summary_profile_ability_da.png b/public/images/ui/text_images/da/summary/summary_profile_ability_da.png new file mode 100644 index 0000000000000000000000000000000000000000..206b65c6cdddaccd56fed2f0320d692645cae1a5 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^5eyXA3~mfqTmY@ zXDSKu3ua&_n|#&+$aC~`aSY**P5$%$-U9=9`^T%5S-0ssYWV%)xqhgTe~DWM4f D=Hfi9 literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/da/summary/summary_profile_memo_title_da.png b/public/images/ui/text_images/da/summary/summary_profile_memo_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..48886d25e3944ae0c3893668616182ea74ddbd53 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0YJ>b!VDzmJW6E&Qv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15!<%E{-7;aiRTtb(WA zZbh9oF76c*6+Zj=?z!Om@N`IC{)U8`T`ON6Te;zC!UH!4Yc_`6>IU2VCiv(~xSab_ zGVFx8hghdqjDxRfE89utBVHnpjy2pldr;vOi#^l4`0u6NsRcO&Q=b0ao)^CKT(tei X!&Vjt>h=l&UBlq%>gTe~DWM4fakX9f literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/da/summary/summary_profile_passive_da.png b/public/images/ui/text_images/da/summary/summary_profile_passive_da.png new file mode 100644 index 0000000000000000000000000000000000000000..681ae3f1b5e0ed33043de0119dc848d319405e5c GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ^!VDyn9UPtkDgFST5LY0bkdW~I|9=R%k@-Uy zP>8uC$S)X3|0+9j4@iZ1x;TbZ#JQe+$a%nkqa|=*q=S*8vE!4N1$W-s2m5Ad?6a>c zP&-@ZvE(v`-0L!_m^-H){9S%UCw`K`#^jY#IF*|oJWgFYEztSCvq-1-;Rk%~?jj6d Z_s{N-{&Db><58du44$rjF6*2UngBilL-POt literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/da/summary/summary_profile_profile_title_da.png b/public/images/ui/text_images/da/summary/summary_profile_profile_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..83b8a1d5e99c698d40925b475801eb0acec196a3 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^dO*yuN`2_>%Uu8$`0jWq&7srr_xYTovoDBv%E*BfLEgX8dS>C#0K zb_;D3t}I%vb@krtu0kL69ZVg^CExhmZvOXuRZX?%lsP{vChiH+lYIBO@8gru3Fq~F h+a-CVH_0dGX`EEtu>Q!xH$Y1mJYD@<);T3K0RTdlN-h8Z literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/da/summary/summary_stats_exp_title_da.png b/public/images/ui/text_images/da/summary/summary_stats_exp_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..feae0c9cb90d2e9a3e13b3bcce149aaf7a8a2eea GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?b#0(^_rnATbDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJdDWgSjv*Cs$sD}B|G)45A7A^w|Nr|ZucRCP>%k5!Sva{P)&M($*<$uMmf5$JE7Z%n0ma}Sj68|Vf6vgSVmZ4>y}d{Ml~t^(CB)V|irU)cy_%81McZ}HwW#oDpfeae MUHx3vIVCg!09u$^?f?J) literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/da/summary/summary_stats_expbar_title_da.png b/public/images/ui/text_images/da/summary/summary_stats_expbar_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..566dd844aa621d404ac3affbc2aef1c755c63709 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^+(69A#0(_go%nYYNO1=Egt-3y|Np~}A3)SK>HBS< zAX7<@UoZnh+2pepK%TUxi(^PdTyn(5Bv$9cJ#1~FvfL6<(->aPlx2u)<2V=mqpl06 OjKR~@&t;ucLK6UMJ|=De literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/da/summary/summary_stats_item_title_da.png b/public/images/ui/text_images/da/summary/summary_stats_item_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..2cbce6c3dcfc15dc6256dfcd2fda418474df0d03 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMo#0(@&cm#cb6i`>N3cf&b zrjj7PUFR(X)ztha3dl9=;M?eW9AcrQeBTq2q)C1{U`P34*t^ zuS_see!+Vy_`&j|GadW4IhNe0{bam;#j49m9HpDD8AfbY+flQnf7YzUO-2?UCp1YW zyfMzv;d?xp^{|P)DCPJMp&Nt!XlQ aU+_16_0MJ4%FhmT6oaR$pUXO@geCwde_7}N literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/da/summary/summary_stats_stats_title_da.png b/public/images/ui/text_images/da/summary/summary_stats_stats_title_da.png new file mode 100644 index 0000000000000000000000000000000000000000..ff97416c7ed4d40694e981613f0693ca9f82e93b GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^=0MEB#0(@AX7;ZIQak}ZA+8At3IG59hmfbADEI=! znM#8Ef*BafCZDwc^6ETY978JNk~`}E)cvx`?m<+bm$bU>fkzQ9<+6WEQfB3zu~0C6-|Fs%tK9rq{2GI4P#EB<^iO{a0VUws^v2oN-KXS>U&vIOWK%O`C+j{5z8E zq$tw2oynzeoBY|or!M-hi2m@U_wft>IQUZv+Od;F&M%GJI9ug{O{R?m1G VUF|pLzYoyi44$rjF6*2UngIIDa1a0h literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_dexnb_label_de.png b/public/images/ui/text_images/de/summary/summary_dexnb_label_de.png new file mode 100644 index 0000000000000000000000000000000000000000..ef081f493f3fec8a6b9f06500e85053c5109f6be GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`@dWsUxc>kDKLHGW{P@w>b~ykj z&QucQ7tFv=HumdKI;Vst0EOKxivR!s literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_dexnb_label_overlay_shiny_de.png b/public/images/ui/text_images/de/summary/summary_dexnb_label_overlay_shiny_de.png new file mode 100644 index 0000000000000000000000000000000000000000..2c66a714e0c0b9e44dc85c1aaecf3a4364da8c71 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^Aa*7TGm!jPv%U&Q@dx;Xxc>kDAIMy=AOVP8yjY>H z^il)JXD$iy3kK4^%8uLvQpTPxjv*CsZ;u!XGAIZzAB;HBz$D{PQ1Cupn3pf(W>V|M q(9e8KT1kh6WZNU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_moves_descriptions_title_de.png b/public/images/ui/text_images/de/summary/summary_moves_descriptions_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..ea4827c081d53e533ccf57438b73f22a19b8a43a GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^Ak4wS3?yfWZ?yzc`~f~8t_cYVKYsl9|NlRb0VG#t zoY4VFF_#4S1q10{Wk>D-sX3l5jv*CszI}{bhYfg`_kLrRzRlcqn|+3cyu_#f_f0G_ z6Wk=cJ7Ugc8!1no&(kTrT$amfYK-J&&j|-^O!epPJ2G?aq}?yQ`1bX*?ee{r@~qjk z%{8B?bmJM8rQ+p_?|xbL@1uMF_HU0pSFlAc_q8hj6jh@A>$|JhuIdw3{8sPz=fsq7 y+!79Yy8DH*_QiR=3Jh;JIN36N=VWX;RUfz1-m+uSDt(|k89ZJ6T-G@yGywo(m1Vd9 literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_moves_effect_title_de.png b/public/images/ui/text_images/de/summary/summary_moves_effect_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..951e92818397e4ae618c7e34224f5487d65649ca GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^ra;WW#0(@=a^fcdDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJc?F&>jv*Cs$sD}A`S<_-p6^=vyYEyzPr|!bS67$s%e$YxcNgQ4 zT(+jW-M7o%=P?!EzCC;S`|P~?Uw4bHsrdfoS^e(Wx69wmd82rR+Rz5YHdjM!RgQu&X%Q~loCIGXZ BS`z>O literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_moves_moves_title_de.png b/public/images/ui/text_images/de/summary/summary_moves_moves_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e28d3dfe7ebb8640dfa880dc37e098d2fe9606 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?b#0(^_rnATbDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJdBvVCjv*Csx@Q!*8Vp1l9!lzPZ=PX0`Jkf2v%ns+^B)XO9y<3$ z#O20=$o53574i@(K%Wv);J+!@E-X zkUsOND%0M+UaYHWZu;Zv#TV<|{x6?n+)&B5mQk+rj(hRM%u9QK)-!mz`njxgN@xNA D-lAmuG8AZicv18zn=L~V^MjAsTzTuA1SF0WwLUu0 zaq;zzQzF|MdopxaIUA-Ne!uU@)5iO~|H9eps^`G6qjqKbLh*2~7aawO`}_ literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_profile_memo_title_de.png b/public/images/ui/text_images/de/summary/summary_profile_memo_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..089668218faa27e9ff599ccc5c85959ed1b783ca GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^0YJ>b!VDzmJW6E&Qv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15)jtE{-7;ak>2$IS(5MIP0HdTgWW3oms{*U*WBNu&VSV zhOK8GbKdJ;{Ck4J=c7{=B%Xa6p;b3iTjz(Lh<|6UwZ)pr5sAm8Wvj$IOho;7jsLYW zr<~%L@WJYD@<);T3K0RWL-T`~Xw literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_profile_passive_de.png b/public/images/ui/text_images/de/summary/summary_profile_passive_de.png new file mode 100644 index 0000000000000000000000000000000000000000..681ae3f1b5e0ed33043de0119dc848d319405e5c GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ^!VDyn9UPtkDgFST5LY0bkdW~I|9=R%k@-Uy zP>8uC$S)X3|0+9j4@iZ1x;TbZ#JQe+$a%nkqa|=*q=S*8vE!4N1$W-s2m5Ad?6a>c zP&-@ZvE(v`-0L!_m^-H){9S%UCw`K`#^jY#IF*|oJWgFYEztSCvq-1-;Rk%~?jj6d Z_s{N-{&Db><58du44$rjF6*2UngBilL-POt literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_profile_profile_title_de.png b/public/images/ui/text_images/de/summary/summary_profile_profile_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..83b8a1d5e99c698d40925b475801eb0acec196a3 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^dO*yuN`2_>%Uu8$`0jWq&7srr_xYTovoDBv%E*BfLEgX8dS>C#0K zb_;D3t}I%vb@krtu0kL69ZVg^CExhmZvOXuRZX?%lsP{vChiH+lYIBO@8gru3Fq~F h+a-CVH_0dGX`EEtu>Q!xH$Y1mJYD@<);T3K0RTdlN-h8Z literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_stats_exp_title_de.png b/public/images/ui/text_images/de/summary/summary_stats_exp_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..fa702b4c223ac628a44ad8a6d1a37e42dbdfc281 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMo#0(@&cm#cb6i`>N3cf&b zrjj7PUFR*C%#|K^2n9dtYVR<;lE1d++VjqkDAjdl@d}b@6b0_sFQ($CyQ;YUw)bOl_CK zcbyrQQkzmWE6NH(-ak( Lu6{1-oD!MHBS< zAX7<@UoZnh+2pepK%TUxi(^PdTyn(5Bv$9cJ#1~FvfL6<(->aPlx2u)<2V=mqpl06 OjKR~@&t;ucLK6UMJ|=De literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_stats_item_title_de.png b/public/images/ui/text_images/de/summary/summary_stats_item_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..42e08b3e52ab951e4b91a20c99ab0efafe20c7f4 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^8bHj!#0(_A*@T_|Qak}ZA+8At3IG59hmfbADEI=! znM#8Ef*BafCZDwc@*+H4978JNk~w&L|9}7gcYpi&dWM;S>#wbi{`&i_m4fjDM)~*y zyUQ6J(jG8d{+z!)u34nTu48ia&j&ZH1U`4pi8*n2dtrj`lPCXeYyNVl9MaNT7s@TR amVrS%M3*IDWu_6(4hBzGKbLh*2~7Z~$wgBD literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_stats_stats_title_de.png b/public/images/ui/text_images/de/summary/summary_stats_stats_title_de.png new file mode 100644 index 0000000000000000000000000000000000000000..87438a5bd4ffc7d3d9430b0f6440a4ec9e3ca6ce GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^szA)a#0(^v58bN(Qak}ZA+8At3IG59hmfbADEI=! znM#8Ef*BafCZDwc@*+K5978JNk~`}E)cPU>-vEQTOF7=c8IM> aVqnNHQEyxGH8BBb34^DrpUXO@geCwqV?dz* literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_tabs_1_de.png b/public/images/ui/text_images/de/summary/summary_tabs_1_de.png new file mode 100644 index 0000000000000000000000000000000000000000..9c3e6c795b4b767f55dcea3c4d937c58f9283678 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^aX>7<#0(@Ky;FDyq<8{+LR|m<|1TjSp;4Hrad_2S zA=9})amJD$zhDN3XE)M-oGG3zjv*CsYcJ^XF&PT5K9DOsd-`e1 pAMcF!bEv-bqM>;@(JiZ22WQ%mvv4FO#lUjT;Koz literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_tabs_2_de.png b/public/images/ui/text_images/de/summary/summary_tabs_2_de.png new file mode 100644 index 0000000000000000000000000000000000000000..750c407b075ff46befde77f6d52c2f01b7a3499a GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^W%(fC;D89nN qs8oK2^k0+uS0*LZp2fym3=AHOS^q5@zxV)cWbkzLb6Mw<&;$VLbU|nU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/de/summary/summary_tabs_3_de.png b/public/images/ui/text_images/de/summary/summary_tabs_3_de.png new file mode 100644 index 0000000000000000000000000000000000000000..297df98c111899d2ff2322110cb901836fe563ba GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^Za^%+#0(^_O@H_oNbv;tgt-3y|6f8vLZdKK9wSoI>_y6esrSUh;-?;N* z{nDil3r}2my)gW+^ZNGV$MSl4*Xqs{J21gYR7*sv+|+E#Dw9&C!&@%=S6KM};lhu> zkJnF|?xx1jny@Nq{;{@cxvX3VO^+Q512XGavsxtiw-}10JT}RBr*yx61_Q%(*Y@R+ Twv+vUPGRtL^>bP0l+XkKZkD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09(NOkoW*cbB>Cy2Brd4td6(++n&2 g9K5^|5jI_nKXw(~uGa0H2-L;k>FVdQ&MBb@0CP7iJpcdz literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/en/summary/summary_moves_descriptions_title.png b/public/images/ui/text_images/en/summary/summary_moves_descriptions_title.png new file mode 100644 index 0000000000000000000000000000000000000000..e83e8cafbfcc09a3761b9d915f3c0f0205109579 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^K0wUD!VDxA7O*4%DgFST5Z8o+gdabC{Qv(S$N-Y7 zGS27#rI<^C{DOh>ud*ZefK-R4i(^PdTxfqI=V1dLmaA!vZDkEtVjaG0cG!8pe%YxG zwGg{`+bsN^xa?D!0ejBkv+L{SsCZdn!9^)hvtWz z+-clzmbZP<+i@pnYFK5~>HCZ4i+0(1J4Bw-(LOGobMsBuL2hZcDc4RrPY$}YNJnIr eu;AvE=J7L{E$8#R;=K)Y6N9I#pUXO@geCyjhqq&-wpf;{OYGFo%higqpv&rD%|T_4b0*QLn?BEzkV_&lbP+ e|L^-hxfr=PvSzrSj|GyL_nMwk1x73$xo z=rbIN`Tk+wdYoq81+uA*kSLVyi*jaz^^#Aqsj57mcqIkK(bfXy= YdK+{ESKps$477m3)78&qol`;+09KqvxBvhE literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/en/summary/summary_moves_overlay_pp.png b/public/images/ui/text_images/en/summary/summary_moves_overlay_pp.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bcd0bd0211023f9c248f46510197e33987db7e GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB}_ysN(lFzsfbICSo!pTfo>_&;U!Zzd9*h(Ni17sW#AK#$ncm!kd0x! WDTkk~0aqqa1B0ilpUXO@geCz0;3B&K literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/en/summary/summary_profile_ability.png b/public/images/ui/text_images/en/summary/summary_profile_ability.png new file mode 100644 index 0000000000000000000000000000000000000000..a05c22b7d47b527d91b0406ae0ffcbfcb21882aa GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq<8{+LR^9L|Ns9J5)y!9QtLfl zAfKru$S;_Ip=|P53m`Ad)5S5QA})Eu`~M&R$Da8A{lA<|LdDm-ySqviUx)2w+BAP( zclT%R&f?ll)r^NPf45i2*~`}U|NS+`8#O!*UkeS)0?z6$Q2al?=>~V$+6Yz_Zm|MG a28PuMrujjZy~02n7(8A5T-G@yGywpd6GZ0# literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/en/summary/summary_profile_memo_title.png b/public/images/ui/text_images/en/summary/summary_profile_memo_title.png new file mode 100644 index 0000000000000000000000000000000000000000..3d69c20e57f33f369e6424f04f23a7fe15e85c42 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^{y@yZ!VDz6-1jE}DgFST5Z8o+gbzP{{Qv(S$N-XS zQg&SeN->uN`2_>%Uu8$`0jYjZ7srr_xZM6m&chBo%=SO!6`4iMnP*HlpYUz|%5TfJ zv|KZDYC3%5>?#$nx)Z8J&qcQ%K0o1*zxZv|rmNlyJQv+53t)7~{J|$owG; zD8yV6t_v!dB&(%eLb{|DqxEK#&HSTB?Vw2r~k)z4*}Q$iB}RkKQi literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/en/summary/summary_profile_profile_title.png b/public/images/ui/text_images/en/summary/summary_profile_profile_title.png new file mode 100644 index 0000000000000000000000000000000000000000..4170dccf682a71bf64c7b3129738865842cd72c2 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)=!VDx`-W}uvQv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15$~eE{-7;ak1wvavm_?UbgBSY;&{G15&k~E{-7;akl3hIaw5WTrMu?t=PoMv9WpnzwBN8<#`hx zGBP(C?u}&aU8S1m^w{!W>4`hmo-Hd~bf^3%Pb(2?G*EYDaOv8;wdt74jLH28&MiBl zvoEa*no-6gdrP1^+on2FAm_L9oXjJ4n_4oO&i!5=`}3dn-VaCR?>U}V-M1{>2u2HxGPR#mHc>o?SQO=$8VZ3I#wbi{`&i_m4fjDM)~*y zyUQ6J(jG8d{+z!)u34nTu48ia&j&ZH1U`4pi8*n2dtrj`lPCXeYyNVl9MaNT7s@TR amVrS%M3*IDWu_6(4hBzGKbLh*2~7Z~$wgBD literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/en/summary/summary_stats_stats_title.png b/public/images/ui/text_images/en/summary/summary_stats_stats_title.png new file mode 100644 index 0000000000000000000000000000000000000000..f602a43c39d509720f1cfb19ab25d4aeaf676ed3 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bN#0(^BgwJ#WDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJd0w6_jv*Cs$sP57>g@z<6IR?}WwVyhlGSNAaH&!8zoToaYwJJe zwiU9XU+uLPl^IM43ki9hiTc36#K49Bn+|3-vI!LEGBBw5D7@-%(fC;D89nN qs8oK2^k0+uS0*LZp2fym3=AHOS^q5@zxV)cWbkzLb6Mw<&;$VLbU|nU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/en/summary/summary_tabs_2.png b/public/images/ui/text_images/en/summary/summary_tabs_2.png new file mode 100644 index 0000000000000000000000000000000000000000..50c1db1f34cda08cfc95c1f7c6237645a2d6151c GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@pli=y%7*Y|J%;DO=(Dt9>1EVY3+|By`^8bDLf6>2j&WS6p z7lwPUpLT4TA9sSs+$zySoW64p80eP7zqtBq_0o&}%EAqE3O4v;Xik`HCAy4#g^p3F m{0!m0B~q(wkL===WMH^9DMtO^3ddleT@0SCelF{r5}E)~6GM{# literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/en/summary/summary_tabs_3.png b/public/images/ui/text_images/en/summary/summary_tabs_3.png new file mode 100644 index 0000000000000000000000000000000000000000..24676712fb95cf266145d57d1b0229aa117ec315 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@plj`Z>7*Y|J%;DO=(Dt9>1EVY3+~Tjd&R=?6|9Lr+<;0cu z*B_r2$FIBBO1D9=^p!P-x=AV1;VlkN^Mx literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-ES/summary/summary_dexnb_label_es-ES.png b/public/images/ui/text_images/es-ES/summary/summary_dexnb_label_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..5477e3385a8c5fe552c6e601a21330829e7e4f13 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^AT}oxGmtDh5!wLa1o(uw{{R0!AtB+%j~@)FqPu{C zj3q&S!3+-1ZlnP@8lEnWAr*0=hc|LEC!19zF>?UP4j literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-ES/summary/summary_dexnb_label_overlay_shiny_es-ES.png b/public/images/ui/text_images/es-ES/summary/summary_dexnb_label_overlay_shiny_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..54f0c3799a042384cf5c22a30b165e87491aaa9c GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^Aa)iLGm!kTLZbvo@dWsUxB}__|Nk#oknrNgisHF< z!+?CIk|4ie28Oc9XDxs{eNPw1kczluj^6qMA0FIgZj)E|^N;cH?r?62ID6iN3Z5hV m4HXA3F|=K{z<6x21jGIFMb8#x7KH<~GI+ZBxvX9=eqPDgFST5Z8o+gdabC{Qv(S$N-Y7 zGS27#rI<^C{DOh>ud*ZefYdZk7srr_xZeJYoQDkrob}H#@xEo~yv^8mid!V}|4gkS zlV$NMb&ojP81$8u&3kEe-NHmu_1;v!!qVP78%&y5?o53w_TuYRsheSX2OD-4t}T;L zX;(`PH%b!Uc8O=s2|E*|e1+w!S+d_PJZs;-PyEu$%*KLzHvQw`Djsi|4zr)lNnCr( rnOW#SPlPP4rCTolSy{`#aNUp3WKFdx(1i@1u6{1-oD!M7F&@YjO~1P0a54$X3k2=d7`0qeOqx#*LqOq_sDx zC1>kA&@!H7TG;9At>d7uE&ks8?OI%iKD8`-A7oGXNR|Ogi?{3$+bxyZ&TRD@$3OUCwTenEeGe0$9Q!fjreAF7t{r~qn&N^Mb nDRlFzsfbICSo!pTfo>_&;U!Zzd9*h(Ni17sW#AK#$ncm!kd0x! WDTkk~0aqqa1B0ilpUXO@geCz0;3B&K literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-ES/summary/summary_profile_ability_es-ES.png b/public/images/ui/text_images/es-ES/summary/summary_profile_ability_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..71bffe95cfe435a20c5e9a7bf68b33d52dac7664 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^W$E6n}tEh%1mzNJ#kq|38G>$owG; zD8yV6{qTSD+f-A(MMwCP ij<|+;NLAfWIbv=rs5>X=QOXXWT@0SCelF{r5}E)ZuSSso literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-ES/summary/summary_profile_memo_title_es-ES.png b/public/images/ui/text_images/es-ES/summary/summary_profile_memo_title_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ef7c91fc5b6b2c59d6cf5510c02ec3cec0940c GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^AwbN*!VDy*avrS%Qv3lvA+8At3IG592a+Ft`~Wht z|8IQ`lwv9g@(X5QD4TrN0?6z1ba4!+h^w7&k(1ew$9d}P2Q_aQI#00Ob*T71Q!9DL z>u^~?&kqV}9kYBipZuP?de_-glUOYG*sTui+Np9Y^zOA)&F8XAN=^wczo5~z;nxmdKI;Vst0DtFV$N&HU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-ES/summary/summary_profile_passive_es-ES.png b/public/images/ui/text_images/es-ES/summary/summary_profile_passive_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..a50e3cacf580d1ed549af7117013779fdb86ae85 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ^!VDyn9UPtkDgFST5LY0bkdW~I|9=R%k@-Uy zP>8uC$S)X3|0+9j4@kv%x;TbZ#F_S76l8Mbar&Id{N`rEa@H6XQI5aYpQ!aQ%jYL3 zym|fX_0ug&m+~rR*+lU!3{G}uN`2_>%Uu8$`0jWSw7srr_xY%_s$NrC_X literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-ES/summary/summary_stats_exp_title_es-ES.png b/public/images/ui/text_images/es-ES/summary/summary_stats_exp_title_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..7c8a80f06273c360a64bcf298e1cb706deee6502 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^K0wUD#0(_$3_czLQak}ZA+8At3IG59hmfbADEI=! znM#8Ef*BafCZDwc@+Nt@IEGZj$@UuZ9Wvl?J$y@1=gd3aswu0ScN@%TE@+oy)LQmH z(O78uLXXg;Ax5iDP7wH<`ZC)8{=YN{zs!Fg*E~OKRZcxLVctFVc$Y(2r*@@n>DGNU zV|7xMwwOV@z^nJi*mSbaCCVN)Wx8{}=0I)GwfXMbxA5ou7FXW(@4j@!^qm*)>84$) kcb|1aAk@X=ZcJp|`~{(bi|uDh0A0u6>FVdQ&MBb@0Md2u2HxGPR#mHc>o?SQO=$8VZ3I7Lri*KT&%iU~BbPJq4zws|g#j#5;C3FLc^n*DpIOEKiJDl2{dY9AP{y->stDxz`!!KL$@%KbLh*2~7aR C+K%)9 literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-ES/summary/summary_tabs_1_es-ES.png b/public/images/ui/text_images/es-ES/summary/summary_tabs_1_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..99f187c396ff13a95bcf5c2fb24905efa82f2ef4 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^Wgvm%B=@VF_r}R1v5B2yO9RuWO}+dhE&9Dy%5NC$UvawVa!AM?@Y{bDXH)3)s}7) zn|N&bId3L;>l`DC^Cv39itBY93svvPhy1Zx7HJ~l>v+BFwX~RXh17jD8y%0uGn!J& z*PNC5Q6g7X@-1KeTJ`zN-}A10s-6Dlxsv~}c)g$V3|lV)EoJa@^>bP0l+XkK|H(_m literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-ES/summary/summary_tabs_2_es-ES.png b/public/images/ui/text_images/es-ES/summary/summary_tabs_2_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..c841de2c12c602084c7404c1ad1a19b4bacf889e GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^X+SK%!VDzEy2N{dlu&?Ai0l9V|0RGxQc|NZQ{&J| zjl-+g>U@vItzw>Xk zhqFd#)ugxx8d{p|8-jQ&-v+Xe_IC%C|M|y8q?C;u#LV zzkkV_|D8ojgCm@ylX)pi) literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-ES/summary/summary_tabs_3_es-ES.png b/public/images/ui/text_images/es-ES/summary/summary_tabs_3_es-ES.png new file mode 100644 index 0000000000000000000000000000000000000000..805fec323ddb2670eaba25f14b04be2617f68d00 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^VL;5!!VDyPeyaWkaRPioT>t<7FCihJQJAT5Xr;#C zRa0W+)&r#&OM?7@862M7NCR@ZJzX3_D&n?YI>>uOfrrH*D&oFbf{XH;JN3TXB~moM zd&wC}KRIrrGg<8W>W6i<+pkE*`zU>RI+s^jC&u!cZ&}*|uFdgsQ~ou~;1bJbn=ZR} z&9CI@$f+@tr<+b&`czh-|E}>4+3uFT&7}^~x1Bt*KWv&K-o2voJI|-B?4S4Bo|tE= i^X*#no^SRxE9Bc`U5;(}ps*e2ECx?kKbLh*2~7Zvqg+7% literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-MX/summary/summary_dexnb_label_es-MX.png b/public/images/ui/text_images/es-MX/summary/summary_dexnb_label_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..5477e3385a8c5fe552c6e601a21330829e7e4f13 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^AT}oxGmtDh5!wLa1o(uw{{R0!AtB+%j~@)FqPu{C zj3q&S!3+-1ZlnP@8lEnWAr*0=hc|LEC!19zF>?UP4j literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-MX/summary/summary_dexnb_label_overlay_shiny_es-MX.png b/public/images/ui/text_images/es-MX/summary/summary_dexnb_label_overlay_shiny_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..54f0c3799a042384cf5c22a30b165e87491aaa9c GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^Aa)iLGm!kTLZbvo@dWsUxB}__|Nk#oknrNgisHF< z!+?CIk|4ie28Oc9XDxs{eNPw1kczluj^6qMA0FIgZj)E|^N;cH?r?62ID6iN3Z5hV m4HXA3F|=K{z<6x21jGIFMb8#x7KH<~GI+ZBxvX9=eqPDgFST5Z8o+gdabC{Qv(S$N-Y7 zGS27#rI<^C{DOh>ud*ZefYdZk7srr_xZeJYoQDkrob}H#@xEo~yv^8mid!V}|4gkS zlV$NMb&ojP81$8u&3kEe-NHmu_1;v!!qVP78%&y5?o53w_TuYRsheSX2OD-4t}T;L zX;(`PH%b!Uc8O=s2|E*|e1+w!S+d_PJZs;-PyEu$%*KLzHvQw`Djsi|4zr)lNnCr( rnOW#SPlPP4rCTolSy{`#aNUp3WKFdx(1i@1u6{1-oD!M7F&@YjO~1P0a54$X3k2=d7`0qeOqx#*LqOq_sDx zC1>kA&@!H7TG;9At>d7uE&ks8?OI%iKD8`-A7oGXNR|Ogi?{3$+bxyZ&TRD@$3OUCwTenEeGe0$9Q!fjreAF7t{r~qn&N^Mb nDRlFzsfbICSo!pTfo>_&;U!Zzd9*h(Ni17sW#AK#$ncm!kd0x! WDTkk~0aqqa1B0ilpUXO@geCz0;3B&K literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-MX/summary/summary_profile_ability_es-MX.png b/public/images/ui/text_images/es-MX/summary/summary_profile_ability_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..71bffe95cfe435a20c5e9a7bf68b33d52dac7664 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^W$E6n}tEh%1mzNJ#kq|38G>$owG; zD8yV6{qTSD+f-A(MMwCP ij<|+;NLAfWIbv=rs5>X=QOXXWT@0SCelF{r5}E)ZuSSso literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-MX/summary/summary_profile_memo_title_es-MX.png b/public/images/ui/text_images/es-MX/summary/summary_profile_memo_title_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ef7c91fc5b6b2c59d6cf5510c02ec3cec0940c GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^AwbN*!VDy*avrS%Qv3lvA+8At3IG592a+Ft`~Wht z|8IQ`lwv9g@(X5QD4TrN0?6z1ba4!+h^w7&k(1ew$9d}P2Q_aQI#00Ob*T71Q!9DL z>u^~?&kqV}9kYBipZuP?de_-glUOYG*sTui+Np9Y^zOA)&F8XAN=^wczo5~z;nxmdKI;Vst0DtFV$N&HU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-MX/summary/summary_profile_passive_es-MX.png b/public/images/ui/text_images/es-MX/summary/summary_profile_passive_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..a50e3cacf580d1ed549af7117013779fdb86ae85 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ^!VDyn9UPtkDgFST5LY0bkdW~I|9=R%k@-Uy zP>8uC$S)X3|0+9j4@kv%x;TbZ#F_S76l8Mbar&Id{N`rEa@H6XQI5aYpQ!aQ%jYL3 zym|fX_0ug&m+~rR*+lU!3{G}uN`2_>%Uu8$`0jWSw7srr_xY%_s$NrC_X literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-MX/summary/summary_stats_exp_title_es-MX.png b/public/images/ui/text_images/es-MX/summary/summary_stats_exp_title_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..7c8a80f06273c360a64bcf298e1cb706deee6502 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^K0wUD#0(_$3_czLQak}ZA+8At3IG59hmfbADEI=! znM#8Ef*BafCZDwc@+Nt@IEGZj$@UuZ9Wvl?J$y@1=gd3aswu0ScN@%TE@+oy)LQmH z(O78uLXXg;Ax5iDP7wH<`ZC)8{=YN{zs!Fg*E~OKRZcxLVctFVc$Y(2r*@@n>DGNU zV|7xMwwOV@z^nJi*mSbaCCVN)Wx8{}=0I)GwfXMbxA5ou7FXW(@4j@!^qm*)>84$) kcb|1aAk@X=ZcJp|`~{(bi|uDh0A0u6>FVdQ&MBb@0Md2u2HxGPR#mHc>o?SQO=$8VZ3I7Lri*KT&%iU~BbPJq4zws|g#j#5;C3FLc^n*DpIOEKiJDl2{dY9AP{y->stDxz`!!KL$@%KbLh*2~7aR C+K%)9 literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-MX/summary/summary_tabs_1_es-MX.png b/public/images/ui/text_images/es-MX/summary/summary_tabs_1_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..99f187c396ff13a95bcf5c2fb24905efa82f2ef4 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^Wgvm%B=@VF_r}R1v5B2yO9RuWO}+dhE&9Dy%5NC$UvawVa!AM?@Y{bDXH)3)s}7) zn|N&bId3L;>l`DC^Cv39itBY93svvPhy1Zx7HJ~l>v+BFwX~RXh17jD8y%0uGn!J& z*PNC5Q6g7X@-1KeTJ`zN-}A10s-6Dlxsv~}c)g$V3|lV)EoJa@^>bP0l+XkK|H(_m literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-MX/summary/summary_tabs_2_es-MX.png b/public/images/ui/text_images/es-MX/summary/summary_tabs_2_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..c841de2c12c602084c7404c1ad1a19b4bacf889e GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^X+SK%!VDzEy2N{dlu&?Ai0l9V|0RGxQc|NZQ{&J| zjl-+g>U@vItzw>Xk zhqFd#)ugxx8d{p|8-jQ&-v+Xe_IC%C|M|y8q?C;u#LV zzkkV_|D8ojgCm@ylX)pi) literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/es-MX/summary/summary_tabs_3_es-MX.png b/public/images/ui/text_images/es-MX/summary/summary_tabs_3_es-MX.png new file mode 100644 index 0000000000000000000000000000000000000000..805fec323ddb2670eaba25f14b04be2617f68d00 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^VL;5!!VDyPeyaWkaRPioT>t<7FCihJQJAT5Xr;#C zRa0W+)&r#&OM?7@862M7NCR@ZJzX3_D&n?YI>>uOfrrH*D&oFbf{XH;JN3TXB~moM zd&wC}KRIrrGg<8W>W6i<+pkE*`zU>RI+s^jC&u!cZ&}*|uFdgsQ~ou~;1bJbn=ZR} z&9CI@$f+@tr<+b&`czh-|E}>4+3uFT&7}^~x1Bt*KWv&K-o2voJI|-B?4S4Bo|tE= i^X*#no^SRxE9Bc`U5;(}ps*e2ECx?kKbLh*2~7Zvqg+7% literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/fr/summary/summary_dexnb_label_fr.png b/public/images/ui/text_images/fr/summary/summary_dexnb_label_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..5477e3385a8c5fe552c6e601a21330829e7e4f13 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^AT}oxGmtDh5!wLa1o(uw{{R0!AtB+%j~@)FqPu{C zj3q&S!3+-1ZlnP@8lEnWAr*0=hc|LEC!19zF>?UP4j literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/fr/summary/summary_dexnb_label_overlay_shiny_fr.png b/public/images/ui/text_images/fr/summary/summary_dexnb_label_overlay_shiny_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..54f0c3799a042384cf5c22a30b165e87491aaa9c GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^Aa)iLGm!kTLZbvo@dWsUxB}__|Nk#oknrNgisHF< z!+?CIk|4ie28Oc9XDxs{eNPw1kczluj^6qMA0FIgZj)E|^N;cH?r?62ID6iN3Z5hV m4HXA3F|=K{z<6x21jGIFMb8#x7KH<~GI+ZBxvXud*ZefK-R4i(^PdTxfqI=V1dLmaA!vZDkEtVjaG0cG!8pe%YxG zwGg{`+bsN^xa?D!0ejBkv+L{SsCZdn!9^)hvtWz z+-clzmbZP<+i@pnYFK5~>HCZ4i+0(1J4Bw-(LOGobMsBuL2hZcDc4RrPY$}YNJnIr eu;AvE=J7L{E$8#R;=K)Y6N9I#pUXO@geCyjmdKI;Vst06>yRlK=n! literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/fr/summary/summary_moves_moves_title_fr.png b/public/images/ui/text_images/fr/summary/summary_moves_moves_title_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd7d72c3071b472398528df32a2998f7062a603 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMq#0(_Y&kc?OQk(%kA+G=b|4&Fr0Fqbu8KQxL zj3q&S!3+-1ZlnP@rJgR1Ar*10rwzFd2XGuul=fH=ep2%mpRCp1hWv`{lbRTfUkCW# zd^K%lJ>gYlDT|$8Ap(XPNIhA;D>^z3CjsnFvLZC;iJsk30-i z`0f=j#l>)PwpsUPruTAZHvZ<hSls_GYzzeZ@B6RXP8Ud$tu(iFfxj@62p3Yi=zy zj;Of%e_v_B!@uYMy|n)q&M5k<`s#6Zp?}-6U%py*cXb0##|LJ+4Iiwyzde(^#_Pbw z93k;y(qHe_@#XLTf6f2<`ah7>9O7QMHtOiotFyMQ$i3PX8q*zCs++~kmCVd%(ZYCf XR^3C#t)4PKKQMT@`njxgN@xNAH1UC+ literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/fr/summary/summary_profile_passive_fr.png b/public/images/ui/text_images/fr/summary/summary_profile_passive_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d2c98a21c10d38cd64160d9354cba460ec6b5d GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ^!VDyn9UPtkDgFST5LY0bkdW~I|9=R%k@-Uy zP>8uC$S)X3|0+9j4@iZ2x;TbZ#F?JC$lIVG(EPBvpz#r#AHz!S8N2_ce`0T~<9{;A zY}K!gp{h!AZ;QKYO+Rqd|CfJxX+c7}?qz%1&K;XgBPvYRnsi0EF4lT}a?;bw%+FTt YtvV$gJ9o|&L!bo=p00i_>zopr04g~|PXGV_ literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/fr/summary/summary_profile_profile_title_fr.png b/public/images/ui/text_images/fr/summary/summary_profile_profile_title_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..bccba2d87df0c5513bfc60bfeb0944bba564fd77 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^dO*y<#0(^VE2;JaDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJdC8tGjv*Cs$sD}B|3B{kd;I_R|8fQlmW8k5_C|ltx~k35{{Eo# zzU4gp3UhWWfB)p4xn0czhD)Dc|F_y1zLsCU$)Zp@?)y<&f!a?ZXA*0^{JPHkv;Mz4 mgJmEOx7gZ<16#AMGBLE>GY@3^_P-Qp9fPNtO^Sm_S)@RUgIF};hpUDV73Xzbe%JCk>qmc_afDKQCqVPE)recV7924LC1-qY+Y`2V3gl;pko<4UHx3vIVCg!09Z$H AjQ{`u literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/fr/summary/summary_stats_expbar_title_fr.png b/public/images/ui/text_images/fr/summary/summary_stats_expbar_title_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..4889b64eca8c7eabfb33cb19dd3e5e538547e7bf GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^+(69A$P6S`X0(U`DYgKg5ZC|z|9|-Lqn~x7DNuy5 zB*-tA!Qt7BG$2RJ)5S5QA}+b&Ys129#>2u2HxGPR#mHc>o?SQO=$8VZ3I+N?c6r_1=8n?Zqz7wk@fRftiOX-dz@)4H=J Z@$Wt=lX5;Y;5X0`22WQ%mvv4FO#qwbJb3^B literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/fr/summary/summary_stats_stats_title_fr.png b/public/images/ui/text_images/fr/summary/summary_stats_stats_title_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..63fe6a694af0f1f52e4c127f54c4002be2026842 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bN#0(^BgwJ#WDV_kI5ZC|z|0g6QK*;?5BR7HK zOeH~n!3+##lh0ZJdG4Mrjv*CsvWGTuHaPIKUEIIzBv<%p_Ur8KMNIBO-3hhA7TyP> z4?cLDx%2$;wqL)!6;J6^2J}r(ecifL>dO*Ec@gR literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/fr/summary/summary_tabs_1_fr.png b/public/images/ui/text_images/fr/summary/summary_tabs_1_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..dd918e773e9fff7cf110a6ab98314266a820ef9c GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^mOw1P#0(@aUbTM#q<8{+LR|m<|1TjSp;?@*d2DS; zSQ!&goUtUxFPOpM*^M+Hr_9sEF{C1H>N#Jo1_c4ug#Kr$ZWA+JZi?a6eJxZqPtTCU z@id=cf|(S{&ew14p0%q#5Z3&po^8EePEKRhzL2UnUA?{Uw;2UR$X~rF>v7XsehJ5f zlKae;{5;AM^Q}J4vE6)nAKQV>UV&5ltL!($8f<#|d3XI}>08Rh1;;_!@plkDl@7*Y|J%;DO=(Dt9>1EVY3+|Bx5vNAF>X9&-%l07w3 z?7#%8uUS8?|5;hTc>XfKgc)o>VO3jA%uI|JPjIpqFPhI}xiYx1>eTvaZPS>hx-NUi peRo#5srj#$CLz@wrP4+W42Nz<`B=-=d;?m?;OXk;vd$@?2>?SOLqq@o literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/fr/summary/summary_tabs_3_fr.png b/public/images/ui/text_images/fr/summary/summary_tabs_3_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..d4c353084a363dd75957625271cb6abbf95db09a GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^9zZO>#0(@)#9j0QQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@p)9C5q7*Y{8_q-xslOYf5gV;^kQkNEF&5R0Y34XJmbKCZc zo1Ar>E(;bIFey5JJaT0E^<~~Bs&|+D$*2uJrclo)d}{KMU%S6BY)s+(xhvAU_?h>f z$V*NMSEDY@3}B41YgwRdb0X?_^R>Sjg2xxkc>cNU?!lRU8@+SxEd9Ll*KzshcNkeU W+K-qq641=eupUXO@geCyVky^I^ literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/it/summary/summary_dexnb_label_it.png b/public/images/ui/text_images/it/summary/summary_dexnb_label_it.png new file mode 100644 index 0000000000000000000000000000000000000000..5477e3385a8c5fe552c6e601a21330829e7e4f13 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^AT}oxGmtDh5!wLa1o(uw{{R0!AtB+%j~@)FqPu{C zj3q&S!3+-1ZlnP@8lEnWAr*0=hc|LEC!19zF>?UP4j literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/it/summary/summary_dexnb_label_overlay_shiny_it.png b/public/images/ui/text_images/it/summary/summary_dexnb_label_overlay_shiny_it.png new file mode 100644 index 0000000000000000000000000000000000000000..54f0c3799a042384cf5c22a30b165e87491aaa9c GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^Aa)iLGm!kTLZbvo@dWsUxB}__|Nk#oknrNgisHF< z!+?CIk|4ie28Oc9XDxs{eNPw1kczluj^6qMA0FIgZj)E|^N;cH?r?62ID6iN3Z5hV m4HXA3F|=K{z<6x21jGIFMb8#x7KH<~GI+ZBxvXud*ZefK-pCi(^PdoNs?4=V1dLma9vcO|~#E$zv1PBd+oN_xTX+ z=9MK9^Xvus!jhMtJ#ATV@JZ38L}ODHp(G_0!|R-vu4G*B>r-%9YW$8Xi!n;)?74R; zOheAfE~vgCb!+Jisp`=G?)%w!s?7Y1UgZje`ktNUyPd6OgL=rH-z%p~ hDtqd%&{X>$!zM1vyo}p|d_Z?Gc)I$ztaD0e0ssfqT6zEg literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/it/summary/summary_moves_effect_title_it.png b/public/images/ui/text_images/it/summary/summary_moves_effect_title_it.png new file mode 100644 index 0000000000000000000000000000000000000000..99f9dfeb2c3524d7d4065580057020a32b9577aa GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^ra;WW#0(@=a^fcdDV_kI5ZC|z|0g6QK*;?5BR7HK zOeH~n!3+##lh0ZJd1;<5jv*Cs$v{<6U$bN-)<(W%c=WIS|NH;d3LoF!XB7CJm3QOn zoeOt1WM4mU=W68auTQDgl6}yyZrU4 pg5Kx<`wxb{{eR6W{_lGRhMS))U7j*dxCFG3!PC{xWt~$(697PhRFVJy literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/it/summary/summary_moves_moves_title_it.png b/public/images/ui/text_images/it/summary/summary_moves_moves_title_it.png new file mode 100644 index 0000000000000000000000000000000000000000..e56e3f4b336035860bb145fa9ff756ab27a3a8db GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^8bHj!#0(_A*@T_|Qak}ZA+8At3IG59hmfbADEI=! znM#8Ef*BafCZDwc@6zJK`I|M#!GgU`P9^Vd@MMl)Xf_9geu)pEszXaBD5|F)ierohpqSGPE=&K6~O YrlWH-WX0jVK=Tz>% literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/it/summary/summary_moves_overlay_pp_it.png b/public/images/ui/text_images/it/summary/summary_moves_overlay_pp_it.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bcd0bd0211023f9c248f46510197e33987db7e GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB}_ysN(lFzsfbICSo!pTfo>_&;U!Zzd9*h(Ni17sW#AK#$ncm!kd0x! WDTkk~0aqqa1B0ilpUXO@geCz0;3B&K literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/it/summary/summary_profile_ability_it.png b/public/images/ui/text_images/it/summary/summary_profile_ability_it.png new file mode 100644 index 0000000000000000000000000000000000000000..bb915da37eef4529c0ab57bd1b7d7a9ef6eec1a4 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRh!VDyzNf8uC$S)X3|0+9j4@f0>x;TbZ#O3xJ7~baC2m&iam%aERgmM2;r&v( lsfu&b)cgmYE_aHy*T3-5o&O>A-&de*44$rjF6*2UngEDYM`>N3cf&b zrjj7PUFR-CjdJCPfh!OGftxK4N*v2jyI)lb44psHthQrvH+- z$TDf6s~IEX+@!AQC#B7Ni&rgAN#6KAL_f7Y!$XRHv(tKmeXUlH_+)M{%!y)~#CPa; ze|y2S8293JZUXOE0`o(TXK|)yZrnQI;g3H%Z)iXHC-F&n+QVChrLj}4{SS-RR!shT TfID6u=pF`7S3j3^P6$owG; zD8yV6!FpF<#OknL|-SI?fLe78FnYNZj^LY#c zzrN|#;@qX}d?ksm)_J;A%g&N*M>j2&GtP}Ke|hKNv9g|hipy4rFMDhE>3xz|#;Prv jyS*D895hk+yO;mqEk)@^lP3xRtzz(W^>bP0l+XkKNrOj& literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/it/summary/summary_profile_profile_title_it.png b/public/images/ui/text_images/it/summary/summary_profile_profile_title_it.png new file mode 100644 index 0000000000000000000000000000000000000000..169b0a7b8e7887c05d286899c7f49e8687751b33 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)=!VDx`-W}uvQv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15(MJE{-7;ak1wvayA$UFkf&EFKDQ;I^ej=ao2wzwXFK8 z7Ud5QZh4%SSSoWbWX5ybSISMs42qY2X})YJ^EL}!vt+Y15yp1E{-7;alZYHyoVKdSk`Xv@RB_6%GmMz@ADznoGU(9 z$)32>{549j=fjE(9PHo!+BUcBP@1>)14~Exvgo5bZd!UDXfp_#e!jpeaLH$_nVO|B zvH!#by*!`!aP=y7--vy_z1gPq<;~Ef50)3-CADo(ZawyY|F>!t)17C6N)kOkvM2PJ ViLBW3o)73222WQ%mvv4FO#uIbUWEVv literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/it/summary/summary_stats_expbar_title_it.png b/public/images/ui/text_images/it/summary/summary_stats_expbar_title_it.png new file mode 100644 index 0000000000000000000000000000000000000000..d6cd930c1c2f3d68b12ca7d3b9087a6f95c890ba GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^+(69A#0(_go%nYYNO1=Egt-3y|Np~}A3)SK>HBS< zAX7<@UoZnh+2pepK%SVVi(^PdTyn(5B39?aSNJ$&Z!#>AW{BL!u`ABS@HtQggQu&X J%Q~loCIGnOB`>N3cf&b zrjj7PUFR(X)nJOpZLP7q;F=>#AtJ5&b66rRA#AnMR#wGDfaB zYp<=AD44Bj^wyv?S%^tquI8V?`RTX3MUUpi*RdTb3!3()XU?X>f($ODtgR1|3)Xh1 zoU+y1QD|ZOc9zByi;FJ`l#fi;SjWELSssH!*|L^*LoB#8sYhy!84?Fbhg|sw=#HQzhcFj6$$yjj^7JNJou;nKXcm(S<$cdT8E^= z{qxss;E3Cs&FGxz>Uy=W>%+;1m!q|HSI;hIGkCIp#fl9pHvIpZU-kR{*Y&d-%PMs* oFfgqZT|Hw~SgCGS^j0PYg<`J~t)wn>Hbo z9_4(KtJBNW*|}nB_`W->{R@nOWKyq%KjvPun}KsmT7d5y#yGCG5(^LC(_vGvb zG>b}OSarVOj)MP$1Y^NRE}5^LS{KgLXxe{2@zUo{=i}#DGOlQ^)=gdOcpB&e22WQ% Jmvv4FO#s=UO+5er literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/it/summary/summary_tabs_2_it.png b/public/images/ui/text_images/it/summary/summary_tabs_2_it.png new file mode 100644 index 0000000000000000000000000000000000000000..07c73fbdb906538e7e8a8aea73fffef063089be9 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^VL&Xv#0(@qS|*4BDV_kI5ZC|z|4T?nXcT5@99}h7 z$aF4HoUtUxFPOpM*^M+Hr`OZPF{C1H=>sh=k15p4?cHB5xOYe-m@m%R|>ry-xTw@yc>aI>md}g~_6rmr=J0j_9me44>gTe~DWM4f%tBy= literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/it/summary/summary_tabs_3_it.png b/public/images/ui/text_images/it/summary/summary_tabs_3_it.png new file mode 100644 index 0000000000000000000000000000000000000000..57e8b176be127291595a8897ac568a50fb18d836 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^W~%!gX|`eK6yDhLgq%M`^1jT7CSJ( z%Jg0Cm&<=v{ytRKw#+YKhM1JK`L-=4U$QE4GE$g2q@|;|rttpfezeT5x3`zov#q^J p#C_SZV~4)@Id7kCV!oJ(;Xy{yFCG2sOhD@xJYD@<);T3K0RYk>LQwz! literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ja/summary/summary_dexnb_label_ja.png b/public/images/ui/text_images/ja/summary/summary_dexnb_label_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..bf568c486aac5e8af4e95a237819caf922a9e50c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xc>kD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09(NOkoW*cbB>Cy2Brd4td6(++n&2 g9K5^|5jI_nKXw(~uGa0H2-L;k>FVdQ&MBb@0CP7iJpcdz literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ja/summary/summary_moves_descriptions_title_ja.png b/public/images/ui/text_images/ja/summary/summary_moves_descriptions_title_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..d844e8442442e08a97d26f0584fa28bf46b4b892 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq&Ne7LR|m<|6h=i@Z-l1DrEQwnt-IEiU zCY%)$J77@!%*SB%$;*w2XgTe~DWM4f+|xhm literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ja/summary/summary_moves_effect_title_ja.png b/public/images/ui/text_images/ja/summary/summary_moves_effect_title_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..a75452f1299e379c9a75e6688c54975a29bd8c32 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^%0SG)#0(_)?yR#1Qk(%kA+G=b|1Zc$`0?Y1@!^;U zKtaZmAirP+hi5m^fE*7`7srr_IN8%1IU5`VST80XjA=Q`%d@5X>4paHb@Ss7vtCn( zUb;hnR*FU^OT?qMcNyCzJ%6yB@9gYDcbE(|+*{-qTNqYZE@t#j#0(^r^%`4&6lZ`>i0l9V{|hn_e*E}hd^qL- zP>``C$S;_|;n|HeAZLQ7i(^PdoahNdu0sYQY!B=kIZobdiWZc8qdBknT(02+i`TZV zc;_vgdhF!Vgd(ro`F}RNSpI9CPudBVW9yg_f^_zZnybG|v{N%=FwJ}YvAx;tL{^;@ zlfq^_>3+xLO@9T9#HxBs&nEOPpMr#3@+7r hQ!+#Zxw8DH{nHQBTlFzsfbICSo!pTfo>_&;U!Zzd9*h(Ni17sW#AK#$ncm!kd0x! WDTkk~0aqqa1B0ilpUXO@geCz0;3B&K literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ja/summary/summary_profile_ability_ja.png b/public/images/ui/text_images/ja/summary/summary_profile_ability_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..6c82a863a692f86cbbc5894536a18763894df116 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-k#0(^#z819sQk(%kA+G=b|1Zc$`0?Y1@!^;U zKtaZmAirP+hi5m^fE*uB7srr_xa0>32{RTfH~<7Y8%{d9E_G~l)NYxac=Z(L9G+mw z5Q(7R#vV={As(&Z13YGIQyEml*w#+%;f?XOkdbh4mXwKbmXKt4Ka+Q}WlGB%pt%g5 Lu6{1-oD!M<<4ZN% literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ja/summary/summary_profile_memo_title_ja.png b/public/images/ui/text_images/ja/summary/summary_profile_memo_title_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..3f5a4536817ffa8149e8c7dc0cbe262149d2124c GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^_CUVlt+ZHchu=vNU4Xv%r0dqJXTQISH z6PfYAH?!yLYdI-q8^bBQo(pO+7R|qq*ZA(JrIbhUl1q>S^WMzj~hR t3i99bdB24EG3oc!wGWp3?p$*!-szvP)s@l2q+>eW-P87JzynLmP=@JWz ngzX+f)-;O+r*us+oG-GUydvx%blcn>Xd8p4tDnm{r-UW|dALXc literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ja/summary/summary_profile_profile_title_ja.png b/public/images/ui/text_images/ja/summary/summary_profile_profile_title_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..a05cba4924798c678dbdd6cc4f42657395cf88ec GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^MnKHL#0(^lZE$%Bq&Ne7LR|m<|6h=i@Z-l1IefwnEn2}|%pJ!Wp6I5|Iy6(1;mJlLhLZxv7{UVC Z89G`7*75BvHUQee;OXk;vd$@?2>@YnI0FCx literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ja/summary/summary_stats_exp_title_ja.png b/public/images/ui/text_images/ja/summary/summary_stats_exp_title_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc237a7e6b327d2f4a74947266238ec7c94d3be GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^MnKHL#0(^lZE$%Bq&Ne7LR|m<|6h=i@Z-l1Vd3a&g!6OSz6Pd1Su`Bck>r6^q z7IA=OTYy3T$;pXolP@zZ3+3U6V+qb+p7DH%(8(t+PrhI2u2HxGPR#mHc>o?SQO=$8VZ3IOjoF#0(_a&G}q`6lZ`>i0l9V{|hn_e*E}hd^qL- zP>``C$S;_|;n|HeAScw*#WAEJPWISF-UbB$)(iD2GybfWar&m9_C-YOmL-?6Kyj-o zYjf4cY7S?0&IIQB6&BJ~+uYlW+urCbzs!-Iw&dH>bSJN1sV}#5XGrCFOw=+BTO)rw WO2E(msoO)K1q`09elF{r5}E+fS~_U} literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ja/summary/summary_tabs_1_ja.png b/public/images/ui/text_images/ja/summary/summary_tabs_1_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..90f454dae75f44508b18bc256934a992f3a403b6 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^hCnR9#0(@4G1bceDV_kI5ZC|z|4T?nXcT5@99}h7 z$aF4HoUtUxFPOpM*^M+HC)Lx%F{C0cnZuQdkLUly1B@Y-d-j~T@_*rfXXnTJ|M7R1 zBzVk~lH+38x%A<}%Q6znTHRXz@Bg=bkBOGaR>l+EtcNaaSieyr?$wnd0sSwTmL91o rudc4P2Wnm(w^yt)jhXYE3nRm_`7tFg<0qX2TFBt(>gTe~DWM4fuH8rq literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ja/summary/summary_tabs_2_ja.png b/public/images/ui/text_images/ja/summary/summary_tabs_2_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..006c33f23b1c1b0129b7bacb30b490d79da5159b GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&?wB*IJ|1E zkm+2YIAckWUoeBivm0qZPO7JiV@O3@GKXseL)(9j4~(vC{OU%g|FdcUHx3vIVCg!015m_yZ`_I literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ja/summary/summary_tabs_3_ja.png b/public/images/ui/text_images/ja/summary/summary_tabs_3_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..3306d0aba62f08afea256bb718982bfb8100cf1a GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^c0eq^#0(^jIaMYCDV_kI5ZC|z|4T?nXcT5@99}h7 z$aF4HoUtUxFPOpM*^M+Hr`FTOF{C0cnZuQpk>`KlL3SQd7M6WXtV+S&&fd<+-jCNa zom_vJNg`SS1(*zy)b(JG&^3_tWKZ3|GxgZ{%NIy^ZaY=euqogE$bZF8D51|H~y-h R_XFq<22WQ%mvv4FO#ptlQj`Dy literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ko/summary/summary_dexnb_label_ko.png b/public/images/ui/text_images/ko/summary/summary_dexnb_label_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..bf568c486aac5e8af4e95a237819caf922a9e50c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xc>kD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09(NOkoW*cbB>Cy2Brd4td6(++n&2 g9K5^|5jI_nKXw(~uGa0H2-L;k>FVdQ&MBb@0CP7iJpcdz literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ko/summary/summary_moves_descriptions_title_ko.png b/public/images/ui/text_images/ko/summary/summary_moves_descriptions_title_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..350bd607aedfaf5ac40611c9e9f5cec670b5b65d GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bP#0(^#H}%a2aRPioToV!!{{R0EAx}S1@CAx9 zl?3?(Gcc4*K5GHwg?PF+hE&8QbF?-Hh#Wh-e2{&uwYH2wvhei} ztu>BHfiXc}_d6&Z{Qp07?F9y-rm+8?|MQ3a$)9?Em8`ih7JNnMtnk9Q>3MWqtAH%FO W`h{O-@w@_>&*16m=d#Wzp$P!yFhvUh literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ko/summary/summary_moves_moves_title_ko.png b/public/images/ui/text_images/ko/summary/summary_moves_moves_title_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..d020d8a77cb2f48681cd86d51010fa0fc0a84f7b GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bP#0(^#H}%a2aRPioToV!!{{R0EAx}S1@CAx9 zl?3?(Gcc4*K5GHw1$nwShE&8QbF?-Hq`3Y0U%pUO!R^Yb@`dkR8hRLxm493{U`})(jwlbZ0@%cahB(AluKi}d{YT5s&yM8Of36AIk;{4ON5*~bt+RDK2W4re8 U2Wj_b0!?S|boFyt=akR{0R7KJzyJUM literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ko/summary/summary_moves_overlay_pp_ko.png b/public/images/ui/text_images/ko/summary/summary_moves_overlay_pp_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bcd0bd0211023f9c248f46510197e33987db7e GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB}_ysN(lFzsfbICSo!pTfo>_&;U!Zzd9*h(Ni17sW#AK#$ncm!kd0x! WDTkk~0aqqa1B0ilpUXO@geCz0;3B&K literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ko/summary/summary_profile_ability_ko.png b/public/images/ui/text_images/ko/summary/summary_profile_ability_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..cdeafaf486e2cb3fb7d2bdbbf880f2999f8086b4 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{U#0(@qERYKWaRPioT>t<7pOBCMA@lo>+ysg< zl?3?(Gcc4*K5GHw1$nwShE&8QJFrHr)_Y+jn{Xkj)-n7wL-W7?4R=c&?yd6vzfLw` z!~go9A09IEtPab)67}}LhyVZE|NiGQNLjmU1LKN?|Lz|RU(IjO(iXq=|9b|8qc2oN UPYHFVdQ&MBb@09K7hT>t<8 literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ko/summary/summary_profile_memo_title_ko.png b/public/images/ui/text_images/ko/summary/summary_profile_memo_title_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..7af960fe1df5c10d2117ec2c8d1b23d44c2bae20 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^en8B_#0(@ih9tiPaRPioToV!!{{R0EAx}S1@CAx9 zl?3?(Gcc4*K5GHwZT56=45^4KJ!i;u$UvmwVS+h3JO85a6Pzv=q6#)t`vp9npl9h+ zwvf+s=K=0GHPwVJbpe+7o!2~T9v}Z-(f?%s=0EMM_gdRGac>HEl*oFGv-Gr0fyW8` zX|sO?2l4;adH643b&dvW(`=T`Ed6~N#d!yGn@rwslDM{-XIJcm)g6Zy_U0)w@f&%c z$m6`;!omO9Zh^mkpu5tvA1S;&{o!{t(sUMe@3=avFUrd=Wyy;#YrcMDt$AJTEb#f* RZJ_fRJYD@<);T3K0RU&dZkYf8 literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ko/summary/summary_profile_passive_ko.png b/public/images/ui/text_images/ko/summary/summary_profile_passive_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..34a13ffe8360d0f19709a9418d45dc273a90235d GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-m#0(_ss=~EEoB*E?*Mx+G|Ns9($kR_0e1YOj zB|(0{3=CzH&sqR^v7RoDAr*1S9IZ?&kN@vpUij#8w6;Xq`evgwzvrDW^#A{#`N)dA z`TMfiolE}*DiGguS#eT`%FzyI|-JTcx9 eGt$;Zu`;yxn)>-`iEaa0#Ng@b=d#Wzp$P!p;zZK` literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ko/summary/summary_profile_profile_title_ko.png b/public/images/ui/text_images/ko/summary/summary_profile_profile_title_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..deb57b967152b45dbcbfc73c670e06d7ed084851 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRh#0(@eBaS}?aRPioT>t<7pOBCMA@lo>+ysg< zl?3?(Gcc4*K5GHwMSHq9hE&8QAK={)w)R=n*3_%Fcpc3C|NHyr|Morixsx{M-Q^Ow zev>P;`2T;Vz{49-xyv(7{NFGCplWMaPLQghMR$}|6TpRrXz|YiT%Uc z%k_Uh|F<`|{VM+II@#6XjW<5(UwgTK!-HyuBzN83M^TFy6WRa#SN#9q{VJb;b;VVy zouSroFB)$o{;xmz|NqVg?jwAWTbr`4a2u2HxGPR#mHc>o?SQO=$8VZ3Ig)khTg9Gq16{@7>FVdQ&MBb@0DmoKt^fc4 literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ko/summary/summary_stats_stats_title_ko.png b/public/images/ui/text_images/ko/summary/summary_stats_stats_title_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..371c2be49768ef6fad56934702c3fa95c914717b GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^VnEEp#0(^*r!Nf!aRPioT>t<7pOBCMA@lo>+ysg< zl?3?(Gcc4*K5GHw`FpxJhE&8QJFwp2<5|5ehavEPd2YgksI942|MBwt`M>|o|E-OV z*;l0m&j0&A|9`x_fx+5c6SihCH-Guh`}M!M!HKoM6r^@FI{x|3dhr53!;D;|-+O~* RTLO({@O1TaS?83{1OOSFM0EfF literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ko/summary/summary_tabs_1_ko.png b/public/images/ui/text_images/ko/summary/summary_tabs_1_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..487d4a628cab424d9e92297d1d9177fbea706897 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT�(_a3!e4@DV_kI5ZC|z|4T?nXcT5@99}h7 z$aF4HoUtUxFPOpM*^M+HC(P5uF{C0cnWMFlq3yrH2gXPf6B8R7lP`L6c8Z_r@#)=N z_x07?3z>{OD}%jHJOBU3>pS;=0q+u44XK$7DQ^Fp4H~(U9B(;rDFrt!T9}Z_q0OAU*NYn$UPund0Zx3S>-UDr7@O1TaS?83{1OPazNd*7^ literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ko/summary/summary_tabs_3_ko.png b/public/images/ui/text_images/ko/summary/summary_tabs_3_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..832acf4d5ba5c19aa07fe41a3d107beb5bb0e006 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^c0eq^#0(^jIaMYCDV_kI5ZC|z|4T?nXcT5@99}h7 z$aF4HoUtUxFPOpM*^M+Hr_0mDF{C1HZoeWQlc9iX^%2v2_0|bTdz}0Oq}MgPyw{+- zKw!?Il}<_qEWyr9t$9rm1vWoF{h!~H?DhE6l-v1C2W|-o?CQ6eDPZ3DcPH2S{EJh4 zCVfiCnA7&{R`Qlk))&`!PaJ$A`ON9&!|9=GdPCo|My_*Wo)Hu9&@OCGU%K)k!|Q>| fO#c7*be21-y+UQ(6y*e!19zF>?UP4j literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/pt-BR/summary/summary_moves_descriptions_title_pt-BR.png b/public/images/ui/text_images/pt-BR/summary/summary_moves_descriptions_title_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..8d888143663b43c5b2859bd358be604c67070dc2 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMq!VDx8?k@WUr1%4TLR=FP5`O&n@&EsSAOlFQ z$~dC~lwvLk@(Tvizsio>15#5xT^vIy;%X-Z@*PqTU=9DmU{=L&=NrRp8@+^kyZ_H@ z$-Df5{ZI?f$qn)|{I9!-t*>V?o6{&FG{4L5*RqVR*-Fe!EF5Y(Co30R(iUIb_&BUx z!a99Ht=idd52haaWXkxFp>n6UgyYIf`47JCoiJDI+%9{?zZ@zaIZo}`mop!qVc=j0 rcVTaPD06AO*>ATgQzADU6RcryedieDd@lbl(18q|u6{1-oD!MFVdQ&MBb@0AH9-VE_OC literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/pt-BR/summary/summary_moves_moves_title_pt-BR.png b/public/images/ui/text_images/pt-BR/summary/summary_moves_moves_title_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..0a2d1657750988e8b1127408057eb281774b5cb8 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^Za~bz#0(@Yg%Y`e6i`>N3cf&b zrjj7PUFR)w70NhYTcGA3TzHDEm-$L9_eIYeyB|#VxXQ><{Rg zT;dU4=;8P9o|0qFhx3nuCX3zs@=-9M&cwNqou;_l?^wY|Z4CskNf z92i=ZCeLkciM4XSG}~u}eL3%ucMhNS@JY@yk2MTY_?oO-Uzy*3=YP%o7c0Cj^EZ11 c?#|Bqr@p|=-$Jk30O&3TPgg&ebxsLQ01xO}*#H0l literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/pt-BR/summary/summary_moves_overlay_pp_pt-BR.png b/public/images/ui/text_images/pt-BR/summary/summary_moves_overlay_pp_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bcd0bd0211023f9c248f46510197e33987db7e GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB}_ysN(lFzsfbICSo!pTfo>_&;U!Zzd9*h(Ni17sW#AK#$ncm!kd0x! WDTkk~0aqqa1B0ilpUXO@geCz0;3B&K literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/pt-BR/summary/summary_profile_ability_pt-BR.png b/public/images/ui/text_images/pt-BR/summary/summary_profile_ability_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..28fbb5a8be9a5b72d300f71e818fff5b46ee42b2 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^HbBh5!VDzCEgOFUDgFST5LY0bkdW~I|9=R%k@-Uy zP>8uC$S)X3|0+9j4@l*Bx;TbZ#D(@Yaxxq8Fz;=0X8+N~H(`O`lE3Mz-hB8nTgK>z z10UbMEg=&=7kT|&ytZj6XYl=BXQa2xJ60H3KI!I}o_9;O%-bbVs>;D{H9tzrH)8qm x`kxlkpSRgPolwF2?54p42Zo3rdwbuo?E4yFbb&j%%?M~OgQu&X%Q~loCIF{)P~HFl literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/pt-BR/summary/summary_profile_memo_title_pt-BR.png b/public/images/ui/text_images/pt-BR/summary/summary_profile_memo_title_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ef7c91fc5b6b2c59d6cf5510c02ec3cec0940c GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^AwbN*!VDy*avrS%Qv3lvA+8At3IG592a+Ft`~Wht z|8IQ`lwv9g@(X5QD4TrN0?6z1ba4!+h^w7&k(1ew$9d}P2Q_aQI#00Ob*T71Q!9DL z>u^~?&kqV}9kYBipZuP?de_-glUOYG*sTui+Np9Y^zOA)&F8XAN=^wczo5~z;nxmdKI;Vst0DtFV$N&HU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/pt-BR/summary/summary_profile_passive_pt-BR.png b/public/images/ui/text_images/pt-BR/summary/summary_profile_passive_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..11616a7428738a462771e24b71d0e1cf3aac9c59 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf!VDy9I}1XA6n}tEh%1mzNJ#kq|38G>$owG; zD8yV6B7W5QUff)lUBS_L2X< z!~RvD1D`KH6yh1I=X~Ytxi>~zwlp?g(0^yHeP+t#%W+ZPmwj|e^RITkQf}(KKKuN`2_>%Uu8$`0jWSw7srr_xY%_s$NrC_X literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/pt-BR/summary/summary_stats_exp_title_pt-BR.png b/public/images/ui/text_images/pt-BR/summary/summary_stats_exp_title_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..d66fa829be12519a0f6ffa7e25051f2f07fbd049 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^K0wUF#0(_2F5G+t#0l^TaZN}_`2YVuggpI3!51jb zR1)MD%)n4K`K$$yx6sqYF{C0cx7U{Ikb{6*^6aGCHP@w|Xehe6Y>?o8BwNJ78&=r0 zmO1X2s8a%S^6tEiuX~zUz8HSs?f-ew%=nG^v%K5&ckOPq`v+a@v+JEF`{1fXy2KY1 z#dTUzrW(tXPFbd0*XDi6QT2C@#$~RQbZcvyR`_+{%eGDJoAwDhWZtWn x)fE!`RL<4;44$rjF6*2UngA99Wu5>4 literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/pt-BR/summary/summary_stats_expbar_title_pt-BR.png b/public/images/ui/text_images/pt-BR/summary/summary_stats_expbar_title_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..4889b64eca8c7eabfb33cb19dd3e5e538547e7bf GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^+(69A$P6S`X0(U`DYgKg5ZC|z|9|-Lqn~x7DNuy5 zB*-tA!Qt7BG$2RJ)5S5QA}+b&Ys129#>2u2HxGPR#mHc>o?SQO=$8VZ3I#wbi{`&Z?m4fjDM)~*y zyUQ6J(jG8d{+z!)zFDNju48ia&lfkX1U`4pi8;}{y)Z%e$&>%KHGjEN4r%GF3*{DD b%fO)aSeJRi^ykq)I~Y7&{an^LB{Ts5t(itv literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/pt-BR/summary/summary_stats_stats_title_pt-BR.png b/public/images/ui/text_images/pt-BR/summary/summary_stats_stats_title_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..bc9dffc28879008ff0d62a565b7a9a2a508dc942 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^=0MEB#0(@AX7;ZIQak}ZA+8At3IG59hmfbADEI=! znM#8Ef*BafCZDwc@~S;u978JNk~`}E)Z24xegFTb|360Ot9k}EY%9OMy1Ki}AS9xp z@#~Xk&z{ZYX7okqNuw1^DlOuulCxn;zJ_d&a>IOcW*Yk^VM@*tJgvm%B=@VF_r}R1v5B2yO9Ruq3}HYEMm``^aYM=POt5%6bRf;k@m4Jm+_k81vZ+2EN8;n7f7Idi>R5#8Lu$oQn+B yY)WXzSHE`Ka=+i2@bk@U=Uw}|um1mMCI4gbdOthoM7{@F$>8bg=d#Wzp$P!Z_D<&j literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/pt-BR/summary/summary_tabs_2_pt-BR.png b/public/images/ui/text_images/pt-BR/summary/summary_tabs_2_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..29cad435f2d8e12b544a46988341d65124236ff8 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^&Oj`{!VDz$|GO^T&*_y}Jnszi;0u?Zp1o;IsI6S+N2IRDOx;TbZ#O4LYXJUMl3(q?Tl49>T_oO>`;bmNyZC+7A{tb4NXa;p1k0duy- ztOZIf0x?@}8|*RPx}M{~wb{}=A`Q0|G;swA99ub|$g+ON2GLL29v!!Tmu4?I{Mj!+ iSaRPdz5l-#?~K#tv0HarR%##6Jq(_%elF{r5}E)FS6vkV literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/pt-BR/summary/summary_tabs_3_pt-BR.png b/public/images/ui/text_images/pt-BR/summary/summary_tabs_3_pt-BR.png new file mode 100644 index 0000000000000000000000000000000000000000..f4eebe1eb11834459c6f9471f39b0c1f31f9f89a GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^fk4d9!VDzyRPCBToB*E?*Z=?jOGrp)6lQ81TB&h( z)s$Gd^*|}ck|4ie28U-i(tw;^PZ!6Kiny&85Aq&S;Bg7`IZvH+g!}H*_ko}%_zpr^a(NOkoW*cbB>Cy2Brd4td6(++n&2 g9K5^|5jI_nKXw(~uGa0H2-L;k>FVdQ&MBb@0CP7iJpcdz literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ro/summary/summary_dexnb_label_ro.png b/public/images/ui/text_images/ro/summary/summary_dexnb_label_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..bf568c486aac5e8af4e95a237819caf922a9e50c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xc>kD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09ud*ZefK-R4i(^PdTxfqI=V1dLmaA!vZDkEtVjaG0cG!8pe%YxG zwGg{`+bsN^xa?D!0ejBkv+L{SsCZdn!9^)hvtWz z+-clzmbZP<+i@pnYFK5~>HCZ4i+0(1J4Bw-(LOGobMsBuL2hZcDc4RrPY$}YNJnIr eu;AvE=J7L{E$8#R;=K)Y6N9I#pUXO@geCyjhqq&-wpf;{OYGFo%higqpv&rD%|T_4b0*QLn?BEzkV_&lbP+ e|L^-hxfr=PvSzrSj|GyL_nMwk1x73$xo z=rbIN`Tk+wdYoq81+uA*kSLVyi*jaz^^#Aqsj57mcqIkK(bfXy= YdK+{ESKps$477m3)78&qol`;+09KqvxBvhE literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ro/summary/summary_moves_overlay_pp_ro.png b/public/images/ui/text_images/ro/summary/summary_moves_overlay_pp_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bcd0bd0211023f9c248f46510197e33987db7e GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB}_ysN(lFzsfbICSo!pTfo>_&;U!Zzd9*h(Ni17sW#AK#$ncm!kd0x! WDTkk~0aqqa1B0ilpUXO@geCz0;3B&K literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ro/summary/summary_profile_ability_ro.png b/public/images/ui/text_images/ro/summary/summary_profile_ability_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..a05c22b7d47b527d91b0406ae0ffcbfcb21882aa GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq<8{+LR^9L|Ns9J5)y!9QtLfl zAfKru$S;_Ip=|P53m`Ad)5S5QA})Eu`~M&R$Da8A{lA<|LdDm-ySqviUx)2w+BAP( zclT%R&f?ll)r^NPf45i2*~`}U|NS+`8#O!*UkeS)0?z6$Q2al?=>~V$+6Yz_Zm|MG a28PuMrujjZy~02n7(8A5T-G@yGywpd6GZ0# literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ro/summary/summary_profile_memo_title_ro.png b/public/images/ui/text_images/ro/summary/summary_profile_memo_title_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..3d69c20e57f33f369e6424f04f23a7fe15e85c42 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^{y@yZ!VDz6-1jE}DgFST5Z8o+gbzP{{Qv(S$N-XS zQg&SeN->uN`2_>%Uu8$`0jYjZ7srr_xZM6m&chBo%=SO!6`4iMnP*HlpYUz|%5TfJ zv|KZDYC3%5>?#$nx)Z8J&qcQ%K0o1*zxZv|rmNlyJQv+53t)7~{J|$owG; zD8yV6t_v!dB&(%eLb{|DqxEK#&HSTB?Vw2r~k)z4*}Q$iB}RkKQi literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ro/summary/summary_profile_profile_title_ro.png b/public/images/ui/text_images/ro/summary/summary_profile_profile_title_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..4170dccf682a71bf64c7b3129738865842cd72c2 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)=!VDx`-W}uvQv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15$~eE{-7;ak1wvavm_?UbgBSY;&{G15&k~E{-7;akl3hIaw5WTrMu?t=PoMv9WpnzwBN8<#`hx zGBP(C?u}&aU8S1m^w{!W>4`hmo-Hd~bf^3%Pb(2?G*EYDaOv8;wdt74jLH28&MiBl zvoEa*no-6gdrP1^+on2FAm_L9oXjJ4n_4oO&i!5=`}3dn-VaCR?>U}V-M1{>2u2HxGPR#mHc>o?SQO=$8VZ3I#wbi{`&i_m4fjDM)~*y zyUQ6J(jG8d{+z!)u34nTu48ia&j&ZH1U`4pi8*n2dtrj`lPCXeYyNVl9MaNT7s@TR amVrS%M3*IDWu_6(4hBzGKbLh*2~7Z~$wgBD literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ro/summary/summary_stats_stats_title_ro.png b/public/images/ui/text_images/ro/summary/summary_stats_stats_title_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..f602a43c39d509720f1cfb19ab25d4aeaf676ed3 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bN#0(^BgwJ#WDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJd0w6_jv*Cs$sP57>g@z<6IR?}WwVyhlGSNAaH&!8zoToaYwJJe zwiU9XU+uLPl^IM43ki9hiTc36#K49Bn+|3-vI!LEGBBw5D7@-%(fC;D89nN qs8oK2^k0+uS0*LZp2fym3=AHOS^q5@zxV)cWbkzLb6Mw<&;$VLbU|nU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ro/summary/summary_tabs_2_ro.png b/public/images/ui/text_images/ro/summary/summary_tabs_2_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..50c1db1f34cda08cfc95c1f7c6237645a2d6151c GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@pli=y%7*Y|J%;DO=(Dt9>1EVY3+|By`^8bDLf6>2j&WS6p z7lwPUpLT4TA9sSs+$zySoW64p80eP7zqtBq_0o&}%EAqE3O4v;Xik`HCAy4#g^p3F m{0!m0B~q(wkL===WMH^9DMtO^3ddleT@0SCelF{r5}E)~6GM{# literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ro/summary/summary_tabs_3_ro.png b/public/images/ui/text_images/ro/summary/summary_tabs_3_ro.png new file mode 100644 index 0000000000000000000000000000000000000000..24676712fb95cf266145d57d1b0229aa117ec315 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@plj`Z>7*Y|J%;DO=(Dt9>1EVY3+~Tjd&R=?6|9Lr+<;0cu z*B_r2$FIBBO1D9=^p!P-x=AV1;VlkN^Mx literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ru/summary/summary_dexnb_label_overlay_shiny_ru.png b/public/images/ui/text_images/ru/summary/summary_dexnb_label_overlay_shiny_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba0191881d17edefa37ef1f1b02889ead734306 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^Aa)iDGmtEQarX+4;t%i%aRt%~79{-t{~t)cc(Ec- zj6D}9#9R{O7Yw9-l^wYUq)a_s978JNk^_Q*iVD*hoYK?T#F;f-GCh-)Hny1Ea8oD2 sZ1d&?3eASih7&@V7`;ve7ENJcID6c)=xOIFFQ5Sop00i_>zopr0M1Y^ivR!s literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ru/summary/summary_dexnb_label_ru.png b/public/images/ui/text_images/ru/summary/summary_dexnb_label_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..2a2e66426cb105d302c91851c1026495a2e18cce GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^AT}oxGmtDh5!wKxcmjMvT>t<7p8y6we*9=`yBq)% zXDSKu3kIs1eAWWU)9`e045^4qPIyp%;KPHv%x&@tfBrEZ-W|>@5y$-UxWliDml@hv by_p#bUW=5~`kwRy>S6G7^>bP0l+XkKef=!@ literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ru/summary/summary_moves_descriptions_title_ru.png b/public/images/ui/text_images/ru/summary/summary_moves_descriptions_title_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..a435d6d845edfd4eb9e6f662789991c9d608ea1c GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?b!VDy%)IaV8Qv3lvA+8At2|s@P`2YVukO3rD zWt`CgN->uN`2_>%Uu8$`0jX?H7srr_IM=>LPG?6B=eMPeVpa|l?HeZScf3=-Os(Rn z(}Z^ZBOcFRy;2jmk4Sc z-rnl(e9vOf@H+UNs8>k;|5^Nzg5QfQh4ky6WE1=#0(@8HmA=7aRPioToV!!{{R0EAx}S1@CAx9 zl?3?(Gcc4*K5GHwWqGQwsm}l3_xr#5Z@rV9zhTaf()IVQ z?v2|2UUA0Z?+@sVuAR)=}6jbM0kz>$HAogw<0TlD<(@1_B5W$<+Mb6Mw<&;$TeHd6Tj literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ru/summary/summary_moves_overlay_pp_ru.png b/public/images/ui/text_images/ru/summary/summary_moves_overlay_pp_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..dbdc227512952bfd9dd56155534014a3243f20f1 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2ZGmxy8xzq=w_yc@GT>t<7pB+^U^6`2_>%Uu8$`0Vz{Y7srr_IMri}oD2#AEC-o$7cjCY?_i93_d8vvv@!9kc28?T q!;JIabk6j$O7%bk7(8A5T-G@yGywoCzcHWy literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ru/summary/summary_profile_ability_ru.png b/public/images/ui/text_images/ru/summary/summary_profile_ability_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..ddfcc6102dca117fa33b4bb0f4b6c65e75f14c72 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^DnQJ^!VDyn9UPtkDgFST5ZC|z|0g6Q0C^BbM!Nky zAcwgm$S)X3|0+8I;`)2KIEGZj`F1yQ9ySnQ4&CFh*~zLYk5T-seXvf4=Z@zS`BY}l z|9|+#g1S~CCeEyhKNOC!n6CMyQGF}=W@yT!wI}4{)+@>utu{WsX#0uN`2_>%Uu8$`0jVvXE{-7;akl-9xkn6mn5Vihi~N^eaH5()@eA9ff5ua% zM7tkr^eYfZ-ac=YjA-SglV=`?9xuPTro`yjo0_m&MnWfpgRkr;*rRSCJfZPiPkq}` zzphz4kA8f5aOU~(fonkhKJ^F?3#G${0+D3+n=;=opAlJ>*6A& zdv~X--nNkSiG#GU&}oK0JFm9qluAb_xJgf6m)o*Zi1%X6e|DbVYXskPX}@6-kni~W aNL)D8;n!FFHJ(8CGkCiCxvX8uC$S)X3|0+9j4@d=jx;TbZ#JQes15yc|E{-7;alU67IS)8+I0x=rcY%|SeZn&7KX2@V1sBHf zDA;(s>FbT%o-M3%X~Q>xq*;2Ct~eennN)hA$+pGS?#9>2YZX^pO1)z4*}Q$iB} Dk-t5r literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ru/summary/summary_stats_expbar_title_ru.png b/public/images/ui/text_images/ru/summary/summary_stats_expbar_title_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..424a5378f7ec973031710493245519774238c6b6 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^+(69A#0(_go%nYYNO1=Egt-3y|Np~}A3)SK>HBS< zAX7<@UoZnh+2pepK%TUxi(^PdTyn(5Bv$9=JgjZ!{1oP`JhY)`85e`E5xWH2nQ3Z3 OWelFKelF{r5}E*p*(Rs} literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ru/summary/summary_stats_item_title_ru.png b/public/images/ui/text_images/ru/summary/summary_stats_item_title_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..95b01d062abd16b9f72cb899955c2f2057108de1 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?d#0(_;zPWLOH~~H(t_cYV|NsAokf)z0_yWb5 zN`m}?85qhYpS1w;8a-VcLn`8O&nfa9au9G!EMdLVU>v$(S<;SUY=?Oru5Mq%x#os) z!L(RIPRWn!bvtAgCU>dXeBZgfaP=*FyRg02j6J;1zRd1wD$wHROuDDGMK0m^Gu!FY z-LK3`-+b)1u!`+ro$1a@8>8oxg*u-4^KWN%n_5Rn;;g*GpC*6)l`nHvJ}EVMja!S! RB%os$JYD@<);T3K0RX?bS5g1~ literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ru/summary/summary_stats_stats_title_ru.png b/public/images/ui/text_images/ru/summary/summary_stats_stats_title_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1c5dc944588bfb58f171dd9fd7f260f1c30055 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^wm{6m#0(_Ocgv>$DV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJdF`Gqjv*Cs$sP57>i<3dZ>{zJ=KnnQNjyBEyB!jazrVUV{QUio zRi(_%t!=CV5%2S|^6u@eE;J5kSh#4@qC+Yf(Qxt9qbP|K7tDnm{r-UW|m`+^l literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ru/summary/summary_tabs_1_ru.png b/public/images/ui/text_images/ru/summary/summary_tabs_1_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..1fef6034ad7d3b8dd5100e3e8459ac44ff7e8eec GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^WlMrXDkWw3ubV5b|VeQ$@X+{45^4q=5S?Wyq8xmU09ot_v*@P zfp?cLt#&v%apms=cYdt=8N7VqZSPsL0~s0C&dxp~n>$?}Xf1=MtDnm{r-UW|iH1|ocv=&~e*8{oFcG$x+2G9H z5%PY&m##-(mGW|_!peUwIh{vJROhdgUVm@tdh>Vg-=gjqzTs&R(7yO$OIjZj`_fpS zGPWdl{_NfW&EV#kmzS#qa$L20*}M<#zhb@BQFY5jsVg;0-)_=vwrkxI@WLdxKK-ub x=2-%_B@`-jY8JN5ZTuyfZ5aFiKlA6WjBgr37zC%ktpz%f!PC{xWt~$(699QTVF~~M literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/ru/summary/summary_tabs_3_ru.png b/public/images/ui/text_images/ru/summary/summary_tabs_3_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..1395ac840afcbcf152dc16f573f58fd8c8abf688 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^W(cH9OPsQ9 z%*+0VwH)Z;+HL;)*TlpVk1SUA7ngm{J+%Ltuf1ncghYQ}W2(NOkoW*cbB>Cy2Brd4td6(++n&2 g9K5^|5jI_nKXw(~uGa0H2-L;k>FVdQ&MBb@0CP7iJpcdz literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tl/summary/summary_dexnb_label_tl.png b/public/images/ui/text_images/tl/summary/summary_dexnb_label_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..bf568c486aac5e8af4e95a237819caf922a9e50c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xc>kD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09ud*ZefK-R4i(^PdTxfqI=V1dLmaA!vZDkEtVjaG0cG!8pe%YxG zwGg{`+bsN^xa?D!0ejBkv+L{SsCZdn!9^)hvtWz z+-clzmbZP<+i@pnYFK5~>HCZ4i+0(1J4Bw-(LOGobMsBuL2hZcDc4RrPY$}YNJnIr eu;AvE=J7L{E$8#R;=K)Y6N9I#pUXO@geCyjhqq&-wpf;{OYGFo%higqpv&rD%|T_4b0*QLn?BEzkV_&lbP+ e|L^-hxfr=PvSzrSj|GyL_nMwk1x73$xo z=rbIN`Tk+wdYoq81+uA*kSLVyi*jaz^^#Aqsj57mcqIkK(bfXy= YdK+{ESKps$477m3)78&qol`;+09KqvxBvhE literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tl/summary/summary_moves_overlay_pp_tl.png b/public/images/ui/text_images/tl/summary/summary_moves_overlay_pp_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bcd0bd0211023f9c248f46510197e33987db7e GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB}_ysN(lFzsfbICSo!pTfo>_&;U!Zzd9*h(Ni17sW#AK#$ncm!kd0x! WDTkk~0aqqa1B0ilpUXO@geCz0;3B&K literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tl/summary/summary_profile_ability_tl.png b/public/images/ui/text_images/tl/summary/summary_profile_ability_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..a05c22b7d47b527d91b0406ae0ffcbfcb21882aa GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq<8{+LR^9L|Ns9J5)y!9QtLfl zAfKru$S;_Ip=|P53m`Ad)5S5QA})Eu`~M&R$Da8A{lA<|LdDm-ySqviUx)2w+BAP( zclT%R&f?ll)r^NPf45i2*~`}U|NS+`8#O!*UkeS)0?z6$Q2al?=>~V$+6Yz_Zm|MG a28PuMrujjZy~02n7(8A5T-G@yGywpd6GZ0# literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tl/summary/summary_profile_memo_title_tl.png b/public/images/ui/text_images/tl/summary/summary_profile_memo_title_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..3d69c20e57f33f369e6424f04f23a7fe15e85c42 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^{y@yZ!VDz6-1jE}DgFST5Z8o+gbzP{{Qv(S$N-XS zQg&SeN->uN`2_>%Uu8$`0jYjZ7srr_xZM6m&chBo%=SO!6`4iMnP*HlpYUz|%5TfJ zv|KZDYC3%5>?#$nx)Z8J&qcQ%K0o1*zxZv|rmNlyJQv+53t)7~{J|$owG; zD8yV6t_v!dB&(%eLb{|DqxEK#&HSTB?Vw2r~k)z4*}Q$iB}RkKQi literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tl/summary/summary_profile_profile_title_tl.png b/public/images/ui/text_images/tl/summary/summary_profile_profile_title_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..4170dccf682a71bf64c7b3129738865842cd72c2 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)=!VDx`-W}uvQv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15$~eE{-7;ak1wvavm_?UbgBSY;&{G15&k~E{-7;akl3hIaw5WTrMu?t=PoMv9WpnzwBN8<#`hx zGBP(C?u}&aU8S1m^w{!W>4`hmo-Hd~bf^3%Pb(2?G*EYDaOv8;wdt74jLH28&MiBl zvoEa*no-6gdrP1^+on2FAm_L9oXjJ4n_4oO&i!5=`}3dn-VaCR?>U}V-M1{>2u2HxGPR#mHc>o?SQO=$8VZ3I#wbi{`&i_m4fjDM)~*y zyUQ6J(jG8d{+z!)u34nTu48ia&j&ZH1U`4pi8*n2dtrj`lPCXeYyNVl9MaNT7s@TR amVrS%M3*IDWu_6(4hBzGKbLh*2~7Z~$wgBD literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tl/summary/summary_stats_stats_title_tl.png b/public/images/ui/text_images/tl/summary/summary_stats_stats_title_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..f602a43c39d509720f1cfb19ab25d4aeaf676ed3 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bN#0(^BgwJ#WDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJd0w6_jv*Cs$sP57>g@z<6IR?}WwVyhlGSNAaH&!8zoToaYwJJe zwiU9XU+uLPl^IM43ki9hiTc36#K49Bn+|3-vI!LEGBBw5D7@-%(fC;D89nN qs8oK2^k0+uS0*LZp2fym3=AHOS^q5@zxV)cWbkzLb6Mw<&;$VLbU|nU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tl/summary/summary_tabs_2_tl.png b/public/images/ui/text_images/tl/summary/summary_tabs_2_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..50c1db1f34cda08cfc95c1f7c6237645a2d6151c GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@pli=y%7*Y|J%;DO=(Dt9>1EVY3+|By`^8bDLf6>2j&WS6p z7lwPUpLT4TA9sSs+$zySoW64p80eP7zqtBq_0o&}%EAqE3O4v;Xik`HCAy4#g^p3F m{0!m0B~q(wkL===WMH^9DMtO^3ddleT@0SCelF{r5}E)~6GM{# literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tl/summary/summary_tabs_3_tl.png b/public/images/ui/text_images/tl/summary/summary_tabs_3_tl.png new file mode 100644 index 0000000000000000000000000000000000000000..24676712fb95cf266145d57d1b0229aa117ec315 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@plj`Z>7*Y|J%;DO=(Dt9>1EVY3+~Tjd&R=?6|9Lr+<;0cu z*B_r2$FIBBO1D9=^p!P-x=AV1;VlkN^Mx literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tr/summary/summary_dexnb_label_overlay_shiny_tr.png b/public/images/ui/text_images/tr/summary/summary_dexnb_label_overlay_shiny_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..f35e327c29a80c9b5c3a912ff12a298331fd1f25 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^Aa*7bGmxyaiMj=(cmjMvT!Hle|Nj>(NOkoW*cbB>Cy2Brd4td6(++n&2 g9K5^|5jI_nKXw(~uGa0H2-L;k>FVdQ&MBb@0CP7iJpcdz literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tr/summary/summary_dexnb_label_tr.png b/public/images/ui/text_images/tr/summary/summary_dexnb_label_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..bf568c486aac5e8af4e95a237819caf922a9e50c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xc>kD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09ud*ZefK-R4i(^PdTxfqI=V1dLmaA!vZDkEtVjaG0cG!8pe%YxG zwGg{`+bsN^xa?D!0ejBkv+L{SsCZdn!9^)hvtWz z+-clzmbZP<+i@pnYFK5~>HCZ4i+0(1J4Bw-(LOGobMsBuL2hZcDc4RrPY$}YNJnIr eu;AvE=J7L{E$8#R;=K)Y6N9I#pUXO@geCyjhqq&-wpf;{OYGFo%higqpv&rD%|T_4b0*QLn?BEzkV_&lbP+ e|L^-hxfr=PvSzrSj|GyL_nMwk1x73$xo z=rbIN`Tk+wdYoq81+uA*kSLVyi*jaz^^#Aqsj57mcqIkK(bfXy= YdK+{ESKps$477m3)78&qol`;+09KqvxBvhE literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tr/summary/summary_moves_overlay_pp_tr.png b/public/images/ui/text_images/tr/summary/summary_moves_overlay_pp_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bcd0bd0211023f9c248f46510197e33987db7e GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB}_ysN(lFzsfbICSo!pTfo>_&;U!Zzd9*h(Ni17sW#AK#$ncm!kd0x! WDTkk~0aqqa1B0ilpUXO@geCz0;3B&K literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tr/summary/summary_profile_ability_tr.png b/public/images/ui/text_images/tr/summary/summary_profile_ability_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..a05c22b7d47b527d91b0406ae0ffcbfcb21882aa GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq<8{+LR^9L|Ns9J5)y!9QtLfl zAfKru$S;_Ip=|P53m`Ad)5S5QA})Eu`~M&R$Da8A{lA<|LdDm-ySqviUx)2w+BAP( zclT%R&f?ll)r^NPf45i2*~`}U|NS+`8#O!*UkeS)0?z6$Q2al?=>~V$+6Yz_Zm|MG a28PuMrujjZy~02n7(8A5T-G@yGywpd6GZ0# literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tr/summary/summary_profile_memo_title_tr.png b/public/images/ui/text_images/tr/summary/summary_profile_memo_title_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..3d69c20e57f33f369e6424f04f23a7fe15e85c42 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^{y@yZ!VDz6-1jE}DgFST5Z8o+gbzP{{Qv(S$N-XS zQg&SeN->uN`2_>%Uu8$`0jYjZ7srr_xZM6m&chBo%=SO!6`4iMnP*HlpYUz|%5TfJ zv|KZDYC3%5>?#$nx)Z8J&qcQ%K0o1*zxZv|rmNlyJQv+53t)7~{J|$owG; zD8yV6t_v!dB&(%eLb{|DqxEK#&HSTB?Vw2r~k)z4*}Q$iB}RkKQi literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tr/summary/summary_profile_profile_title_tr.png b/public/images/ui/text_images/tr/summary/summary_profile_profile_title_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..4170dccf682a71bf64c7b3129738865842cd72c2 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)=!VDx`-W}uvQv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15$~eE{-7;ak1wvavm_?UbgBSY;&{G15&k~E{-7;akl3hIaw5WTrMu?t=PoMv9WpnzwBN8<#`hx zGBP(C?u}&aU8S1m^w{!W>4`hmo-Hd~bf^3%Pb(2?G*EYDaOv8;wdt74jLH28&MiBl zvoEa*no-6gdrP1^+on2FAm_L9oXjJ4n_4oO&i!5=`}3dn-VaCR?>U}V-M1{>2u2HxGPR#mHc>o?SQO=$8VZ3I#wbi{`&i_m4fjDM)~*y zyUQ6J(jG8d{+z!)u34nTu48ia&j&ZH1U`4pi8*n2dtrj`lPCXeYyNVl9MaNT7s@TR amVrS%M3*IDWu_6(4hBzGKbLh*2~7Z~$wgBD literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tr/summary/summary_stats_stats_title_tr.png b/public/images/ui/text_images/tr/summary/summary_stats_stats_title_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..f602a43c39d509720f1cfb19ab25d4aeaf676ed3 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bN#0(^BgwJ#WDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJd0w6_jv*Cs$sP57>g@z<6IR?}WwVyhlGSNAaH&!8zoToaYwJJe zwiU9XU+uLPl^IM43ki9hiTc36#K49Bn+|3-vI!LEGBBw5D7@-%(fC;D89nN qs8oK2^k0+uS0*LZp2fym3=AHOS^q5@zxV)cWbkzLb6Mw<&;$VLbU|nU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tr/summary/summary_tabs_2_tr.png b/public/images/ui/text_images/tr/summary/summary_tabs_2_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..50c1db1f34cda08cfc95c1f7c6237645a2d6151c GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@pli=y%7*Y|J%;DO=(Dt9>1EVY3+|By`^8bDLf6>2j&WS6p z7lwPUpLT4TA9sSs+$zySoW64p80eP7zqtBq_0o&}%EAqE3O4v;Xik`HCAy4#g^p3F m{0!m0B~q(wkL===WMH^9DMtO^3ddleT@0SCelF{r5}E)~6GM{# literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/tr/summary/summary_tabs_3_tr.png b/public/images/ui/text_images/tr/summary/summary_tabs_3_tr.png new file mode 100644 index 0000000000000000000000000000000000000000..24676712fb95cf266145d57d1b0229aa117ec315 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@plj`Z>7*Y|J%;DO=(Dt9>1EVY3+~Tjd&R=?6|9Lr+<;0cu z*B_r2$FIBBO1D9=^p!P-x=AV1;VlkN^Mx literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-CN/summary/summary_dexnb_label_overlay_shiny_zh-CN.png b/public/images/ui/text_images/zh-CN/summary/summary_dexnb_label_overlay_shiny_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..f35e327c29a80c9b5c3a912ff12a298331fd1f25 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^Aa*7bGmxyaiMj=(cmjMvT!Hle|Nj>(NOkoW*cbB>Cy2Brd4td6(++n&2 g9K5^|5jI_nKXw(~uGa0H2-L;k>FVdQ&MBb@0CP7iJpcdz literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-CN/summary/summary_dexnb_label_zh-CN.png b/public/images/ui/text_images/zh-CN/summary/summary_dexnb_label_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..bf568c486aac5e8af4e95a237819caf922a9e50c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xc>kD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09ud*ZefK-R4i(^PdTxfqI=V1dLmaA!vZDkEtVjaG0cG!8pe%YxG zwGg{`+bsN^xa?D!0ejBkv+L{SsCZdn!9^)hvtWz z+-clzmbZP<+i@pnYFK5~>HCZ4i+0(1J4Bw-(LOGobMsBuL2hZcDc4RrPY$}YNJnIr eu;AvE=J7L{E$8#R;=K)Y6N9I#pUXO@geCyjhqq&-wpf;{OYGFo%higqpv&rD%|T_4b0*QLn?BEzkV_&lbP+ e|L^-hxfr=PvSzrSj|GyL_nMwk1x73$xo z=rbIN`Tk+wdYoq81+uA*kSLVyi*jaz^^#Aqsj57mcqIkK(bfXy= YdK+{ESKps$477m3)78&qol`;+09KqvxBvhE literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-CN/summary/summary_moves_overlay_pp_zh-CN.png b/public/images/ui/text_images/zh-CN/summary/summary_moves_overlay_pp_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bcd0bd0211023f9c248f46510197e33987db7e GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB}_ysN(lFzsfbICSo!pTfo>_&;U!Zzd9*h(Ni17sW#AK#$ncm!kd0x! WDTkk~0aqqa1B0ilpUXO@geCz0;3B&K literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-CN/summary/summary_profile_ability_zh-CN.png b/public/images/ui/text_images/zh-CN/summary/summary_profile_ability_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..a05c22b7d47b527d91b0406ae0ffcbfcb21882aa GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq<8{+LR^9L|Ns9J5)y!9QtLfl zAfKru$S;_Ip=|P53m`Ad)5S5QA})Eu`~M&R$Da8A{lA<|LdDm-ySqviUx)2w+BAP( zclT%R&f?ll)r^NPf45i2*~`}U|NS+`8#O!*UkeS)0?z6$Q2al?=>~V$+6Yz_Zm|MG a28PuMrujjZy~02n7(8A5T-G@yGywpd6GZ0# literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-CN/summary/summary_profile_memo_title_zh-CN.png b/public/images/ui/text_images/zh-CN/summary/summary_profile_memo_title_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..3d69c20e57f33f369e6424f04f23a7fe15e85c42 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^{y@yZ!VDz6-1jE}DgFST5Z8o+gbzP{{Qv(S$N-XS zQg&SeN->uN`2_>%Uu8$`0jYjZ7srr_xZM6m&chBo%=SO!6`4iMnP*HlpYUz|%5TfJ zv|KZDYC3%5>?#$nx)Z8J&qcQ%K0o1*zxZv|rmNlyJQv+53t)7~{J|$owG; zD8yV6t_v!dB&(%eLb{|DqxEK#&HSTB?Vw2r~k)z4*}Q$iB}RkKQi literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-CN/summary/summary_profile_profile_title_zh-CN.png b/public/images/ui/text_images/zh-CN/summary/summary_profile_profile_title_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..4170dccf682a71bf64c7b3129738865842cd72c2 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)=!VDx`-W}uvQv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15$~eE{-7;ak1wvavm_?UbgBSY;&{G15&k~E{-7;akl3hIaw5WTrMu?t=PoMv9WpnzwBN8<#`hx zGBP(C?u}&aU8S1m^w{!W>4`hmo-Hd~bf^3%Pb(2?G*EYDaOv8;wdt74jLH28&MiBl zvoEa*no-6gdrP1^+on2FAm_L9oXjJ4n_4oO&i!5=`}3dn-VaCR?>U}V-M1{>2u2HxGPR#mHc>o?SQO=$8VZ3I#wbi{`&i_m4fjDM)~*y zyUQ6J(jG8d{+z!)u34nTu48ia&j&ZH1U`4pi8*n2dtrj`lPCXeYyNVl9MaNT7s@TR amVrS%M3*IDWu_6(4hBzGKbLh*2~7Z~$wgBD literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-CN/summary/summary_stats_stats_title_zh-CN.png b/public/images/ui/text_images/zh-CN/summary/summary_stats_stats_title_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..f602a43c39d509720f1cfb19ab25d4aeaf676ed3 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bN#0(^BgwJ#WDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJd0w6_jv*Cs$sP57>g@z<6IR?}WwVyhlGSNAaH&!8zoToaYwJJe zwiU9XU+uLPl^IM43ki9hiTc36#K49Bn+|3-vI!LEGBBw5D7@-%(fC;D89nN qs8oK2^k0+uS0*LZp2fym3=AHOS^q5@zxV)cWbkzLb6Mw<&;$VLbU|nU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-CN/summary/summary_tabs_2_zh-CN.png b/public/images/ui/text_images/zh-CN/summary/summary_tabs_2_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..50c1db1f34cda08cfc95c1f7c6237645a2d6151c GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@pli=y%7*Y|J%;DO=(Dt9>1EVY3+|By`^8bDLf6>2j&WS6p z7lwPUpLT4TA9sSs+$zySoW64p80eP7zqtBq_0o&}%EAqE3O4v;Xik`HCAy4#g^p3F m{0!m0B~q(wkL===WMH^9DMtO^3ddleT@0SCelF{r5}E)~6GM{# literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-CN/summary/summary_tabs_3_zh-CN.png b/public/images/ui/text_images/zh-CN/summary/summary_tabs_3_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..24676712fb95cf266145d57d1b0229aa117ec315 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@plj`Z>7*Y|J%;DO=(Dt9>1EVY3+~Tjd&R=?6|9Lr+<;0cu z*B_r2$FIBBO1D9=^p!P-x=AV1;VlkN^Mx literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-TW/summary/summary_dexnb_label_overlay_shiny_zh-TW.png b/public/images/ui/text_images/zh-TW/summary/summary_dexnb_label_overlay_shiny_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..f35e327c29a80c9b5c3a912ff12a298331fd1f25 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^Aa*7bGmxyaiMj=(cmjMvT!Hle|Nj>(NOkoW*cbB>Cy2Brd4td6(++n&2 g9K5^|5jI_nKXw(~uGa0H2-L;k>FVdQ&MBb@0CP7iJpcdz literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-TW/summary/summary_dexnb_label_zh-TW.png b/public/images/ui/text_images/zh-TW/summary/summary_dexnb_label_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..bf568c486aac5e8af4e95a237819caf922a9e50c GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xc>kD|HqFX2?+^z=3P?) z3Nn@i`2{mLJiCzw>gqT( UH}5KG0xD+kboFyt=akR{09ud*ZefK-R4i(^PdTxfqI=V1dLmaA!vZDkEtVjaG0cG!8pe%YxG zwGg{`+bsN^xa?D!0ejBkv+L{SsCZdn!9^)hvtWz z+-clzmbZP<+i@pnYFK5~>HCZ4i+0(1J4Bw-(LOGobMsBuL2hZcDc4RrPY$}YNJnIr eu;AvE=J7L{E$8#R;=K)Y6N9I#pUXO@geCyjhqq&-wpf;{OYGFo%higqpv&rD%|T_4b0*QLn?BEzkV_&lbP+ e|L^-hxfr=PvSzrSj|GyL_nMwk1x73$xo z=rbIN`Tk+wdYoq81+uA*kSLVyi*jaz^^#Aqsj57mcqIkK(bfXy= YdK+{ESKps$477m3)78&qol`;+09KqvxBvhE literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-TW/summary/summary_moves_overlay_pp_zh-TW.png b/public/images/ui/text_images/zh-TW/summary/summary_moves_overlay_pp_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bcd0bd0211023f9c248f46510197e33987db7e GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^AT|dRGmzXnrA-w`aR&H=xB}_ysN(lFzsfbICSo!pTfo>_&;U!Zzd9*h(Ni17sW#AK#$ncm!kd0x! WDTkk~0aqqa1B0ilpUXO@geCz0;3B&K literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-TW/summary/summary_profile_ability_zh-TW.png b/public/images/ui/text_images/zh-TW/summary/summary_profile_ability_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..a05c22b7d47b527d91b0406ae0ffcbfcb21882aa GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^T0qRf#0(@qooxLIq<8{+LR^9L|Ns9J5)y!9QtLfl zAfKru$S;_Ip=|P53m`Ad)5S5QA})Eu`~M&R$Da8A{lA<|LdDm-ySqviUx)2w+BAP( zclT%R&f?ll)r^NPf45i2*~`}U|NS+`8#O!*UkeS)0?z6$Q2al?=>~V$+6Yz_Zm|MG a28PuMrujjZy~02n7(8A5T-G@yGywpd6GZ0# literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-TW/summary/summary_profile_memo_title_zh-TW.png b/public/images/ui/text_images/zh-TW/summary/summary_profile_memo_title_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..3d69c20e57f33f369e6424f04f23a7fe15e85c42 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^{y@yZ!VDz6-1jE}DgFST5Z8o+gbzP{{Qv(S$N-XS zQg&SeN->uN`2_>%Uu8$`0jYjZ7srr_xZM6m&chBo%=SO!6`4iMnP*HlpYUz|%5TfJ zv|KZDYC3%5>?#$nx)Z8J&qcQ%K0o1*zxZv|rmNlyJQv+53t)7~{J|$owG; zD8yV6t_v!dB&(%eLb{|DqxEK#&HSTB?Vw2r~k)z4*}Q$iB}RkKQi literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-TW/summary/summary_profile_profile_title_zh-TW.png b/public/images/ui/text_images/zh-TW/summary/summary_profile_profile_title_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..4170dccf682a71bf64c7b3129738865842cd72c2 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^CP2)=!VDx`-W}uvQv3lvA+8At2_Js^`2YVukO3su zr0lu`lwvLk@(Tvizsio>15$~eE{-7;ak1wvavm_?UbgBSY;&{G15&k~E{-7;akl3hIaw5WTrMu?t=PoMv9WpnzwBN8<#`hx zGBP(C?u}&aU8S1m^w{!W>4`hmo-Hd~bf^3%Pb(2?G*EYDaOv8;wdt74jLH28&MiBl zvoEa*no-6gdrP1^+on2FAm_L9oXjJ4n_4oO&i!5=`}3dn-VaCR?>U}V-M1{>2u2HxGPR#mHc>o?SQO=$8VZ3I#wbi{`&i_m4fjDM)~*y zyUQ6J(jG8d{+z!)u34nTu48ia&j&ZH1U`4pi8*n2dtrj`lPCXeYyNVl9MaNT7s@TR amVrS%M3*IDWu_6(4hBzGKbLh*2~7Z~$wgBD literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-TW/summary/summary_stats_stats_title_zh-TW.png b/public/images/ui/text_images/zh-TW/summary/summary_stats_stats_title_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..f602a43c39d509720f1cfb19ab25d4aeaf676ed3 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^@<7bN#0(^BgwJ#WDV_kI5Z8o+g#Z8lL&(!l6nuf= zOeH~n!3+##lh0ZJd0w6_jv*Cs$sP57>g@z<6IR?}WwVyhlGSNAaH&!8zoToaYwJJe zwiU9XU+uLPl^IM43ki9hiTc36#K49Bn+|3-vI!LEGBBw5D7@-%(fC;D89nN qs8oK2^k0+uS0*LZp2fym3=AHOS^q5@zxV)cWbkzLb6Mw<&;$VLbU|nU literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-TW/summary/summary_tabs_2_zh-TW.png b/public/images/ui/text_images/zh-TW/summary/summary_tabs_2_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..50c1db1f34cda08cfc95c1f7c6237645a2d6151c GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@pli=y%7*Y|J%;DO=(Dt9>1EVY3+|By`^8bDLf6>2j&WS6p z7lwPUpLT4TA9sSs+$zySoW64p80eP7zqtBq_0o&}%EAqE3O4v;Xik`HCAy4#g^p3F m{0!m0B~q(wkL===WMH^9DMtO^3ddleT@0SCelF{r5}E)~6GM{# literal 0 HcmV?d00001 diff --git a/public/images/ui/text_images/zh-TW/summary/summary_tabs_3_zh-TW.png b/public/images/ui/text_images/zh-TW/summary/summary_tabs_3_zh-TW.png new file mode 100644 index 0000000000000000000000000000000000000000..24676712fb95cf266145d57d1b0229aa117ec315 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^dO$3|#0(@wmM^UYQak}ZA+G=b|Cf-E&@9f@JhnC^ ztc(dL&R7!U7tG-B>_!@plj`Z>7*Y|J%;DO=(Dt9>1EVY3+~Tjd&R=?6|9Lr+<;0cu z*B_r2$FIBBO1D9=^p!P-x=AV1;VlkN^Mx literal 0 HcmV?d00001 diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 0a42fc3fa7d..e1b658f578a 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -138,19 +138,13 @@ export class LoadingScene extends SceneBase { this.loadImage("summary_profile", "ui"); this.loadImage("summary_profile_prompt_z", "ui"); // The pixel Z button prompt this.loadImage("summary_profile_prompt_a", "ui"); // The pixel A button prompt - this.loadImage("summary_profile_ability", "ui"); // Pixel text 'ABILITY' - this.loadImage("summary_profile_passive", "ui"); // Pixel text 'PASSIVE' this.loadImage("summary_status", "ui"); this.loadImage("summary_stats", "ui"); this.loadImage("summary_stats_overlay_exp", "ui"); this.loadImage("summary_moves", "ui"); this.loadImage("summary_moves_effect", "ui"); this.loadImage("summary_moves_overlay_row", "ui"); - this.loadImage("summary_moves_overlay_pp", "ui"); this.loadAtlas("summary_moves_cursor", "ui"); - for (let t = 1; t <= 3; t++) { - this.loadImage(`summary_tabs_${t}`, "ui"); - } this.loadImage("scroll_bar", "ui"); this.loadImage("scroll_bar_handle", "ui"); @@ -230,23 +224,91 @@ export class LoadingScene extends SceneBase { this.loadAtlas("pb", ""); this.loadAtlas("items", ""); - this.loadAtlas("types", ""); // Get current lang and load the types atlas for it. English will only load types while all other languages will load types and types_ - const lang = i18next.resolvedLanguage; - if (lang !== "en") { - if (hasAllLocalizedSprites(lang)) { - this.loadAtlas(`statuses_${lang}`, ""); - this.loadAtlas(`types_${lang}`, ""); - } else { - // Fallback to English - this.loadAtlas("statuses", ""); - this.loadAtlas("types", ""); - } - } else { - this.loadAtlas("statuses", ""); - this.loadAtlas("types", ""); + const lang = i18next.resolvedLanguage ?? "en"; + const keySuffix = lang !== "en" && hasAllLocalizedSprites(lang) ? `_${lang}` : ""; + + this.loadAtlas(`statuses${keySuffix}`, ""); + this.loadAtlas(`types${keySuffix}`, ""); + for (let t = 1; t <= 3; t++) { + this.loadImage( + `summary_tabs_${t}${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_tabs_${t}${keySuffix}.png`, + ); } + this.loadImage( + `summary_dexnb_label${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_dexnb_label${keySuffix}.png`, + ); // Pixel text 'No' + this.loadImage( + `summary_dexnb_label_overlay_shiny${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_dexnb_label_overlay_shiny${keySuffix}.png`, + ); // Pixel text 'No' shiny + this.loadImage( + `summary_profile_profile_title${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_profile_profile_title${keySuffix}.png`, + ); // Pixel text 'PROFILE' + this.loadImage( + `summary_profile_ability${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_profile_ability${keySuffix}.png`, + ); // Pixel text 'ABILITY' + this.loadImage( + `summary_profile_passive${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_profile_passive${keySuffix}.png`, + ); // Pixel text 'PASSIVE' + this.loadImage( + `summary_profile_memo_title${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_profile_memo_title${keySuffix}.png`, + ); // Pixel text 'TRAINER MEMO' + this.loadImage( + `summary_stats_item_title${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_stats_item_title${keySuffix}.png`, + ); // Pixel text 'ITEM' + this.loadImage( + `summary_stats_stats_title${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_stats_stats_title${keySuffix}.png`, + ); // Pixel text 'STATS' + this.loadImage( + `summary_stats_exp_title${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_stats_exp_title${keySuffix}.png`, + ); // Pixel text 'EXP.' + this.loadImage( + `summary_stats_expbar_title${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_stats_expbar_title${keySuffix}.png`, + ); // Pixel mini text 'EXP' + this.loadImage( + `summary_moves_moves_title${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_moves_moves_title${keySuffix}.png`, + ); // Pixel text 'MOVES' + this.loadImage( + `summary_moves_descriptions_title${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_moves_descriptions_title${keySuffix}.png`, + ); // Pixel text 'DESCRIPTIONS' + this.loadImage( + `summary_moves_overlay_pp${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_moves_overlay_pp${keySuffix}.png`, + ); // Pixel text 'PP' + this.loadImage( + `summary_moves_effect_title${keySuffix}`, + "ui", + `text_images/${lang}/summary/summary_moves_effect_title${keySuffix}.png`, + ); // Pixel text 'EFFECT' + if (timedEventManager.activeEventHasBanner()) { const availableLangs = timedEventManager.getEventBannerLangs(); if (lang && availableLangs.includes(lang)) { @@ -256,7 +318,6 @@ export class LoadingScene extends SceneBase { } } - this.loadAtlas("statuses", ""); this.loadAtlas("categories", ""); this.loadAtlas("egg", "egg"); diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 706f139b8bb..50d86209165 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -175,6 +175,7 @@ enum MenuOptions { export class PokedexPageUiHandler extends MessageUiHandler { private starterSelectContainer: Phaser.GameObjects.Container; private shinyOverlay: Phaser.GameObjects.Image; + private starterDexNoLabel: Phaser.GameObjects.Image; private pokemonNumberText: Phaser.GameObjects.Text; private pokemonSprite: Phaser.GameObjects.Sprite; private pokemonNameText: Phaser.GameObjects.Text; @@ -324,8 +325,12 @@ export class PokedexPageUiHandler extends MessageUiHandler { }); this.starterSelectContainer.add(this.pokemonSprite); - this.shinyOverlay = globalScene.add.image(6, 6, "summary_overlay_shiny"); - this.shinyOverlay.setOrigin(0, 0); + this.starterDexNoLabel = globalScene.add.image(6, 14, getLocalizedSpriteKey("summary_dexnb_label")); // Pixel text 'No' + this.starterDexNoLabel.setOrigin(0, 1); + this.starterSelectContainer.add(this.starterDexNoLabel); + + this.shinyOverlay = globalScene.add.image(6, 111, getLocalizedSpriteKey("summary_dexnb_label_overlay_shiny")); // Pixel text 'No' shiny + this.shinyOverlay.setOrigin(0, 1); this.shinyOverlay.setVisible(false); this.starterSelectContainer.add(this.shinyOverlay); diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index c3214fa5420..8fce287c897 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -432,8 +432,15 @@ export class StarterSelectUiHandler extends MessageUiHandler { const bgColor = globalScene.add.rectangle(0, 0, sWidth, sHeight, 0x006860).setOrigin(0); + const starterDexNoLabel = globalScene.add + .image(6, 14, getLocalizedSpriteKey("summary_dexnb_label")) + .setOrigin(0, 1); // Pixel text 'No' + const starterSelectBg = globalScene.add.image(0, 0, "starter_select_bg").setOrigin(0); - this.shinyOverlay = globalScene.add.image(6, 6, "summary_overlay_shiny").setOrigin(0).setVisible(false); + this.shinyOverlay = globalScene.add + .image(6, 111, getLocalizedSpriteKey("summary_dexnb_label_overlay_shiny")) + .setOrigin(0, 1) + .setVisible(false); // Pixel text 'No' shiny const starterContainerWindow = addWindow(speciesContainerX, filterBarHeight + 1, 175, 161); const starterContainerBg = globalScene.add @@ -1070,6 +1077,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { this.starterSelectContainer.add([ bgColor, starterSelectBg, + starterDexNoLabel, this.shinyOverlay, starterContainerBg, addWindow( diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index dfa70d1dc76..63111ee540a 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -68,6 +68,7 @@ export class SummaryUiHandler extends UiHandler { private summaryUiMode: SummaryUiMode; private summaryContainer: Phaser.GameObjects.Container; + private summaryContainerDexNoLabel: Phaser.GameObjects.Image; private tabSprite: Phaser.GameObjects.Sprite; private shinyOverlay: Phaser.GameObjects.Image; private numberText: Phaser.GameObjects.Text; @@ -94,12 +95,15 @@ export class SummaryUiHandler extends UiHandler { private passiveContainer: abilityContainer; private summaryPageContainer: Phaser.GameObjects.Container; private movesContainer: Phaser.GameObjects.Container; + private movesContainerMovesTitle: Phaser.GameObjects.Image; + private movesContainerDescriptionsTitle: Phaser.GameObjects.Image; private moveDescriptionText: Phaser.GameObjects.Text; private moveCursorObj: Phaser.GameObjects.Sprite | null; private selectedMoveCursorObj: Phaser.GameObjects.Sprite | null; private moveRowsContainer: Phaser.GameObjects.Container; private extraMoveRowContainer: Phaser.GameObjects.Container; private moveEffectContainer: Phaser.GameObjects.Container; + private moveEffectContainerTitle: Phaser.GameObjects.Image; private movePowerText: Phaser.GameObjects.Text; private moveAccuracyText: Phaser.GameObjects.Text; private moveCategoryIcon: Phaser.GameObjects.Sprite; @@ -111,6 +115,10 @@ export class SummaryUiHandler extends UiHandler { private permStatsContainer: Phaser.GameObjects.Container; private ivContainer: Phaser.GameObjects.Container; private statsContainer: Phaser.GameObjects.Container; + private statsContainerItemTitle: Phaser.GameObjects.Image; + private statsContainerStatsTitle: Phaser.GameObjects.Image; + private statsContainerExpTitle: Phaser.GameObjects.Image; + private statsContainerExpBarTitle: Phaser.GameObjects.Image; private descriptionScrollTween: Phaser.Tweens.Tween | null; private moveCursorBlinkTimer: Phaser.Time.TimerEvent | null; @@ -144,15 +152,19 @@ export class SummaryUiHandler extends UiHandler { summaryBg.setOrigin(0, 1); this.summaryContainer.add(summaryBg); - this.tabSprite = globalScene.add.sprite(134, -summaryBg.displayHeight + 16, "summary_tabs_1"); - this.tabSprite.setOrigin(1, 1); + this.tabSprite = globalScene.add.sprite(81, -summaryBg.displayHeight + 16, getLocalizedSpriteKey("summary_tabs_1")); // Pixel text 'STATUS' tab + this.tabSprite.setOrigin(0, 1); this.summaryContainer.add(this.tabSprite); const summaryLabel = addTextObject(4, -165, i18next.t("pokemonSummary:pokemonInfo"), TextStyle.SUMMARY_HEADER); summaryLabel.setOrigin(0, 1); this.summaryContainer.add(summaryLabel); - this.shinyOverlay = globalScene.add.image(6, -54, "summary_overlay_shiny"); + this.summaryContainerDexNoLabel = globalScene.add.image(6, -151, getLocalizedSpriteKey("summary_dexnb_label")); // Pixel text 'No' + this.summaryContainerDexNoLabel.setOrigin(0, 1); + this.summaryContainer.add(this.summaryContainerDexNoLabel); + + this.shinyOverlay = globalScene.add.image(6, -54, getLocalizedSpriteKey("summary_dexnb_label_overlay_shiny")); // Pixel text 'No' shiny this.shinyOverlay.setOrigin(0, 1); this.shinyOverlay.setVisible(false); this.summaryContainer.add(this.shinyOverlay); @@ -281,6 +293,10 @@ export class SummaryUiHandler extends UiHandler { moveEffectBg.setOrigin(0, 0); this.moveEffectContainer.add(moveEffectBg); + this.moveEffectContainerTitle = globalScene.add.image(7, 7, getLocalizedSpriteKey("summary_moves_effect_title")); // Pixel text 'EFFECT' + this.moveEffectContainerTitle.setOrigin(0, 0.5); + this.moveEffectContainer.add(this.moveEffectContainerTitle); + const moveEffectLabels = addTextObject(8, 12, i18next.t("pokemonSummary:powerAccuracyCategory"), TextStyle.SUMMARY); moveEffectLabels.setLineSpacing(9); moveEffectLabels.setOrigin(0, 0); @@ -738,7 +754,7 @@ export class SummaryUiHandler extends UiHandler { const forward = this.cursor < cursor; this.cursor = cursor; - this.tabSprite.setTexture(`summary_tabs_${this.cursor + 1}`); + this.tabSprite.setTexture(getLocalizedSpriteKey(`summary_tabs_${this.cursor + 1}`)); // Pixel text 'STATUS' and "MOVES" tabs this.getUi().hideTooltip(); @@ -812,6 +828,14 @@ export class SummaryUiHandler extends UiHandler { ? i18next.t("trainerNames:playerF") : i18next.t("trainerNames:playerM"); + const profileContainerProfilTitle = globalScene.add.image( + 7, + 4, + getLocalizedSpriteKey("summary_profile_profile_title"), // Pixel text 'PROFIL' + ); + profileContainerProfilTitle.setOrigin(0, 0.5); + profileContainer.add(profileContainerProfilTitle); + // TODO: should add field for original trainer name to Pokemon object, to support gift/traded Pokemon from MEs const trainerText = addBBCodeTextObject( 7, @@ -886,7 +910,7 @@ export class SummaryUiHandler extends UiHandler { } this.abilityContainer = { - labelImage: globalScene.add.image(0, 0, "summary_profile_ability"), + labelImage: globalScene.add.image(0, 0, getLocalizedSpriteKey("summary_profile_ability")), // Pixel text 'ABILITY' ability: this.pokemon?.getAbility(true)!, // TODO: is this bang correct? nameText: null, descriptionText: null, @@ -896,7 +920,7 @@ export class SummaryUiHandler extends UiHandler { // Only add to the array and set up displaying a passive if it's unlocked if (this.pokemon?.hasPassive()) { this.passiveContainer = { - labelImage: globalScene.add.image(0, 0, "summary_profile_passive"), + labelImage: globalScene.add.image(0, 0, getLocalizedSpriteKey("summary_profile_passive")), // Pixel text 'PASSIVE' ability: this.pokemon.getPassiveAbility(), nameText: null, descriptionText: null, @@ -916,9 +940,9 @@ export class SummaryUiHandler extends UiHandler { } allAbilityInfo.forEach(abilityInfo => { - abilityInfo.labelImage.setPosition(17, 43); + abilityInfo.labelImage.setPosition(17, 47); abilityInfo.labelImage.setVisible(true); - abilityInfo.labelImage.setOrigin(0, 0); + abilityInfo.labelImage.setOrigin(0, 0.5); profileContainer.add(abilityInfo.labelImage); abilityInfo.nameText = addTextObject(7, 68, abilityInfo.ability?.name!, TextStyle.SUMMARY_ALT); // TODO: is this bang correct? @@ -966,6 +990,14 @@ export class SummaryUiHandler extends UiHandler { const rawNature = toCamelCase(Nature[this.pokemon?.getNature()!]); // TODO: is this bang correct? const nature = `${getBBCodeFrag(toTitleCase(getNatureName(this.pokemon?.getNature()!)), TextStyle.SUMMARY_RED)}${closeFragment}`; // TODO: is this bang correct? + const profileContainerMemoTitle = globalScene.add.image( + 7, + 107, + getLocalizedSpriteKey("summary_profile_memo_title"), // Pixel text 'TRAINER MEMO' + ); + profileContainerMemoTitle.setOrigin(0, 0.5); + profileContainer.add(profileContainerMemoTitle); + const memoString = i18next.t("pokemonSummary:memoString", { metFragment: i18next.t( `pokemonSummary:metFragment.${this.pokemon?.metBiome === -1 ? "apparently" : "normal"}`, @@ -992,6 +1024,30 @@ export class SummaryUiHandler extends UiHandler { this.statsContainer.add(this.ivContainer); this.statsContainer.setVisible(true); + this.statsContainerItemTitle = globalScene.add.image(7, 4, getLocalizedSpriteKey("summary_stats_item_title")); // Pixel text 'ITEM' + this.statsContainerItemTitle.setOrigin(0, 0.5); + this.statsContainer.add(this.statsContainerItemTitle); + + this.statsContainerStatsTitle = globalScene.add.image( + 16, + 51, + getLocalizedSpriteKey("summary_stats_stats_title"), // Pixel text 'STATS' + ); + this.statsContainerStatsTitle.setOrigin(0, 0.5); + this.statsContainer.add(this.statsContainerStatsTitle); + + this.statsContainerExpTitle = globalScene.add.image(7, 107, getLocalizedSpriteKey("summary_stats_exp_title")); // Pixel text 'EXP.' + this.statsContainerExpTitle.setOrigin(0, 0.5); + this.statsContainer.add(this.statsContainerExpTitle); + + this.statsContainerExpBarTitle = globalScene.add.image( + 126, + 144, + getLocalizedSpriteKey("summary_stats_expbar_title"), // Pixel mini text 'EXP' + ); + this.statsContainerExpBarTitle.setOrigin(0, 0); + this.statsContainer.add(this.statsContainerExpBarTitle); + PERMANENT_STATS.forEach((stat, s) => { const statName = i18next.t(getStatKey(stat)); const rowIndex = s % 3; @@ -1107,6 +1163,22 @@ export class SummaryUiHandler extends UiHandler { this.movesContainer = globalScene.add.container(5, -pageBg.height + 26); pageContainer.add(this.movesContainer); + this.movesContainerMovesTitle = globalScene.add.image( + 2, + -22, + getLocalizedSpriteKey("summary_moves_moves_title"), + ); // Pixel text 'MOVES' + this.movesContainerMovesTitle.setOrigin(0, 0.5); + this.movesContainer.add(this.movesContainerMovesTitle); + + this.movesContainerDescriptionsTitle = globalScene.add.image( + 2, + 78, + getLocalizedSpriteKey("summary_moves_descriptions_title"), + ); // Pixel text 'DESCRIPTIONS' + this.movesContainerDescriptionsTitle.setOrigin(0, 0.5); + this.movesContainer.add(this.movesContainerDescriptionsTitle); + this.extraMoveRowContainer = globalScene.add.container(0, 64); this.extraMoveRowContainer.setVisible(false); this.movesContainer.add(this.extraMoveRowContainer); @@ -1136,8 +1208,8 @@ export class SummaryUiHandler extends UiHandler { newMoveTypeIcon.setOrigin(0, 1); this.extraMoveRowContainer.add(newMoveTypeIcon); } - const ppOverlay = globalScene.add.image(163, -1, "summary_moves_overlay_pp"); - ppOverlay.setOrigin(0, 1); + const ppOverlay = globalScene.add.image(172, -5, getLocalizedSpriteKey("summary_moves_overlay_pp")); // Pixel text 'PP' + ppOverlay.setOrigin(1, 0.5); this.extraMoveRowContainer.add(ppOverlay); const pp = padInt(this.newMove?.pp!, 2, " "); // TODO: is this bang correct? @@ -1167,8 +1239,8 @@ export class SummaryUiHandler extends UiHandler { moveText.setOrigin(0, 1); moveRowContainer.add(moveText); - const ppOverlay = globalScene.add.image(163, -1, "summary_moves_overlay_pp"); - ppOverlay.setOrigin(0, 1); + const ppOverlay = globalScene.add.image(172, -5, getLocalizedSpriteKey("summary_moves_overlay_pp")); // Pixel text 'PP' + ppOverlay.setOrigin(1, 0.5); moveRowContainer.add(ppOverlay); const ppText = addTextObject(173, 1, "--/--", TextStyle.WINDOW); From 317e45ec7554e6f5e4a1313845d8368980a91fcd Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 2 Sep 2025 19:49:45 -0700 Subject: [PATCH 23/39] [Dev] Simplify `isLocal` and add `start:prod`/`start:beta` (#6470) - The constant `isLocal` now checks to see if `import.meta.env.MODE` is `"development"` (which it is when running via `pnpm start:dev`) instead of checking what URL is being used to access the client (e.g. `"localhost"` or an IP address) - Remove `start` from `package.json` and replace it with `start:prod` (which runs `vite --mode production`) and `start:beta` (which runs `vite --mode beta`) `start:prod` -> `isBeta` and `isLocal` are both `false` `start:beta` -> `isBeta` is `true` and `isLocal` is `false` `start:dev` -> `isBeta` is `false` and `isLocal` is `true` - Remove obsolete/unused `localServerUrl` and `apiUrl` constants --- package.json | 3 ++- src/utils/common.ts | 22 ++++------------------ src/utils/utility-vars.ts | 5 ++++- 3 files changed, 10 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 574beb80466..38386c3d964 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "version": "1.10.6", "type": "module", "scripts": { - "start": "vite", + "start:prod": "vite --mode production", + "start:beta": "vite --mode beta", "start:dev": "vite --mode development", "build": "vite build", "build:beta": "vite build --mode beta", diff --git a/src/utils/common.ts b/src/utils/common.ts index aac1ef359e6..c8e28545046 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -276,25 +276,11 @@ export function executeIf(condition: boolean, promiseFunc: () => Promise): } export const sessionIdKey = "pokerogue_sessionId"; -// Check if the current hostname is 'localhost' or an IP address, and ensure a port is specified -export const isLocal = - ((window.location.hostname === "localhost" || /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/.test(window.location.hostname)) && - window.location.port !== "") || - window.location.hostname === ""; -/** - * @deprecated Refer to [pokerogue-api.ts](./plugins/api/pokerogue-api.ts) instead - */ -export const localServerUrl = - import.meta.env.VITE_SERVER_URL ?? `http://${window.location.hostname}:${window.location.port + 1}`; +/** `true` when run via `pnpm start:dev` (which runs `vite --mode development`) */ +export const isLocal = import.meta.env.MODE === "development"; -/** - * Set the server URL based on whether it's local or not - * - * @deprecated Refer to [pokerogue-api.ts](./plugins/api/pokerogue-api.ts) instead - */ -export const apiUrl = localServerUrl ?? "https://api.pokerogue.net"; -// used to disable api calls when isLocal is true and a server is not found +/** Used to disable api calls when isLocal is true and a server is not found */ export let isLocalServerConnected = true; /** @@ -302,7 +288,7 @@ export let isLocalServerConnected = true; * with a GET request to verify if a server is running, * sets isLocalServerConnected based on results */ -export async function localPing() { +export async function localPing(): Promise { if (isLocal) { const titleStats = await pokerogueApi.getGameTitleStats(); isLocalServerConnected = !!titleStats; diff --git a/src/utils/utility-vars.ts b/src/utils/utility-vars.ts index 081f70164c8..1f8eca00650 100644 --- a/src/utils/utility-vars.ts +++ b/src/utils/utility-vars.ts @@ -1 +1,4 @@ -export const isBeta = import.meta.env.MODE === "beta"; // this checks to see if the env mode is development. Technically this gives the same value for beta AND for dev envs +// TODO: move this (and other global constants) to `src/constants/*-constants.ts` + +/** `true` if running on `beta.pokerogue.net` or via `pnpm start:beta` (which runs `vite --mode beta`) */ +export const isBeta = import.meta.env.MODE === "beta"; From 1a06010820f57ccb88f4ded8d0939b5582788a98 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:17:19 +0200 Subject: [PATCH 24/39] [UI/UX][Refactor] Remove redundant references to globalScene.uiTheme (#6472) Removed most references to globalScene.uiTheme --- .../encounters/training-session-encounter.ts | 2 +- .../utils/encounter-dialogue-utils.ts | 5 +- src/data/nature.ts | 4 +- src/phases/scan-ivs-phase.ts | 5 +- src/ui/abstract-option-select-ui-handler.ts | 10 ++-- src/ui/admin-ui-handler.ts | 9 ++-- src/ui/ball-ui-handler.ts | 2 +- src/ui/battle-info/battle-info.ts | 3 +- src/ui/battle-info/enemy-battle-info.ts | 7 +-- src/ui/battle-message-ui-handler.ts | 5 +- src/ui/egg-gacha-ui-handler.ts | 2 +- src/ui/fight-ui-handler.ts | 4 +- src/ui/filter-bar.ts | 4 +- src/ui/filter-text.ts | 4 +- src/ui/form-modal-ui-handler.ts | 6 +-- src/ui/menu-ui-handler.ts | 2 +- src/ui/modifier-select-ui-handler.ts | 14 +++--- src/ui/pokedex-page-ui-handler.ts | 24 ++++------ src/ui/pokedex-ui-handler.ts | 9 ++-- src/ui/pokemon-info-container.ts | 42 ++++++++--------- src/ui/run-info-ui-handler.ts | 2 +- .../settings/abstract-binding-ui-handler.ts | 18 +++---- .../abstract-control-settings-ui-handler.ts | 10 ++-- .../settings/abstract-settings-ui-handler.ts | 10 ++-- src/ui/starter-select-ui-handler.ts | 37 +++++++-------- src/ui/stats-container.ts | 4 +- src/ui/summary-ui-handler.ts | 6 +-- src/ui/text.ts | 47 +++++-------------- src/ui/ui-handler.ts | 6 --- src/ui/ui-theme.ts | 20 ++++++-- 30 files changed, 148 insertions(+), 175 deletions(-) diff --git a/src/data/mystery-encounters/encounters/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index b8173aa5fed..02e7a5c5575 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -188,7 +188,7 @@ export const TrainingSessionEncounter: MysteryEncounter = MysteryEncounterBuilde // Return the options for nature selection return getEnumValues(Nature).map((nature: Nature) => { const option: OptionSelectItem = { - label: getNatureName(nature, true, true, true, globalScene.uiTheme), + label: getNatureName(nature, true, true, true), handler: () => { // Pokemon and second option selected encounter.setDialogueToken("nature", getNatureName(nature)); diff --git a/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts b/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts index 54179ee2604..1a9b008f9e9 100644 --- a/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-dialogue-utils.ts @@ -1,6 +1,5 @@ import { globalScene } from "#app/global-scene"; import type { TextStyle } from "#enums/text-style"; -import { UiTheme } from "#enums/ui-theme"; import { getTextWithColors } from "#ui/text"; import { isNullOrUndefined } from "#utils/common"; import i18next from "i18next"; @@ -16,14 +15,12 @@ export function getEncounterText(keyOrString?: string, primaryStyle?: TextStyle) return null; } - const uiTheme = globalScene.uiTheme ?? UiTheme.DEFAULT; - let textString: string | null = getTextWithDialogueTokens(keyOrString); // Can only color the text if a Primary Style is defined // primaryStyle is applied to all text that does not have its own specified style if (primaryStyle && textString) { - textString = getTextWithColors(textString, primaryStyle, uiTheme, true); + textString = getTextWithColors(textString, primaryStyle, true); } return textString; diff --git a/src/data/nature.ts b/src/data/nature.ts index 65e401cd288..116732d60b3 100644 --- a/src/data/nature.ts +++ b/src/data/nature.ts @@ -1,7 +1,6 @@ import { Nature } from "#enums/nature"; import { EFFECTIVE_STATS, getShortenedStatKey, Stat } from "#enums/stat"; import { TextStyle } from "#enums/text-style"; -import { UiTheme } from "#enums/ui-theme"; import { getBBCodeFrag } from "#ui/text"; import { toCamelCase } from "#utils/strings"; import i18next from "i18next"; @@ -11,7 +10,6 @@ export function getNatureName( includeStatEffects = false, forStarterSelect = false, ignoreBBCode = false, - uiTheme: UiTheme = UiTheme.DEFAULT, ): string { let ret = toCamelCase(Nature[nature]); //Translating nature @@ -31,7 +29,7 @@ export function getNatureName( } const textStyle = forStarterSelect ? TextStyle.SUMMARY_ALT : TextStyle.WINDOW; const getTextFrag = !ignoreBBCode - ? (text: string, style: TextStyle) => getBBCodeFrag(text, style, uiTheme) + ? (text: string, style: TextStyle) => getBBCodeFrag(text, style) : (text: string, _style: TextStyle) => text; if (increasedStat && decreasedStat) { ret = `${getTextFrag(`${ret}${!forStarterSelect ? "\n" : " "}(`, textStyle)}${getTextFrag(`+${i18next.t(getShortenedStatKey(increasedStat))}`, TextStyle.SUMMARY_PINK)}${getTextFrag("/", textStyle)}${getTextFrag(`-${i18next.t(getShortenedStatKey(decreasedStat))}`, TextStyle.SUMMARY_BLUE)}${getTextFrag(")", textStyle)}`; diff --git a/src/phases/scan-ivs-phase.ts b/src/phases/scan-ivs-phase.ts index eebee28bfbb..38b39b310e1 100644 --- a/src/phases/scan-ivs-phase.ts +++ b/src/phases/scan-ivs-phase.ts @@ -24,7 +24,6 @@ export class ScanIvsPhase extends PokemonPhase { let statsContainer: Phaser.GameObjects.Sprite[] = []; let statsContainerLabels: Phaser.GameObjects.Sprite[] = []; const enemyField = globalScene.getEnemyField(); - const uiTheme = globalScene.uiTheme; // Assuming uiTheme is accessible for (let e = 0; e < enemyField.length; e++) { enemyIvs = enemyField[e].ivs; // we are using getRootSpeciesId() here because we want to check against the baby form, not the mid form if it exists @@ -36,8 +35,8 @@ export class ScanIvsPhase extends PokemonPhase { 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); + ? getTextColor(TextStyle.PERFECT_IV, false) + : getTextColor(TextStyle.SUMMARY_GREEN, false); const hexTextColour = Phaser.Display.Color.HexStringToColor(hexColour).color; statsContainerLabels[s].setTint(hexTextColour); } diff --git a/src/ui/abstract-option-select-ui-handler.ts b/src/ui/abstract-option-select-ui-handler.ts index b7279bc2d30..914dfca6ef3 100644 --- a/src/ui/abstract-option-select-ui-handler.ts +++ b/src/ui/abstract-option-select-ui-handler.ts @@ -81,7 +81,7 @@ export abstract class AbstractOptionSelectUiHandler extends UiHandler { this.optionSelectIcons = []; - this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; + this.scale = getTextStyleOptions(TextStyle.WINDOW).scale; this.setCursor(0); } @@ -124,8 +124,8 @@ export abstract class AbstractOptionSelectUiHandler extends UiHandler { optionsForWidth .map(o => o.item - ? `[shadow=${getTextColor(o.style ?? this.defaultTextStyle, true, globalScene.uiTheme)}][color=${getTextColor(o.style ?? TextStyle.WINDOW, false, globalScene.uiTheme)}] ${o.label}[/color][/shadow]` - : `[shadow=${getTextColor(o.style ?? this.defaultTextStyle, true, globalScene.uiTheme)}][color=${getTextColor(o.style ?? TextStyle.WINDOW, false, globalScene.uiTheme)}]${o.label}[/color][/shadow]`, + ? `[shadow=${getTextColor(o.style ?? this.defaultTextStyle, true)}][color=${getTextColor(o.style ?? TextStyle.WINDOW, false)}] ${o.label}[/color][/shadow]` + : `[shadow=${getTextColor(o.style ?? this.defaultTextStyle, true)}][color=${getTextColor(o.style ?? TextStyle.WINDOW, false)}]${o.label}[/color][/shadow]`, ) .join("\n"), TextStyle.WINDOW, @@ -149,8 +149,8 @@ export abstract class AbstractOptionSelectUiHandler extends UiHandler { this.textContent = optionsWithScroll .map(o => o.item - ? `[shadow=${getTextColor(o.style ?? this.defaultTextStyle, true, globalScene.uiTheme)}][color=${getTextColor(o.style ?? TextStyle.WINDOW, false, globalScene.uiTheme)}] ${o.label}[/color][/shadow]` - : `[shadow=${getTextColor(o.style ?? this.defaultTextStyle, true, globalScene.uiTheme)}][color=${getTextColor(o.style ?? TextStyle.WINDOW, false, globalScene.uiTheme)}]${o.label}[/color][/shadow]`, + ? `[shadow=${getTextColor(o.style ?? this.defaultTextStyle, true)}][color=${getTextColor(o.style ?? TextStyle.WINDOW, false)}] ${o.label}[/color][/shadow]` + : `[shadow=${getTextColor(o.style ?? this.defaultTextStyle, true)}][color=${getTextColor(o.style ?? TextStyle.WINDOW, false)}]${o.label}[/color][/shadow]`, ) .join("\n"); this.optionSelectText.setText(this.textContent); diff --git a/src/ui/admin-ui-handler.ts b/src/ui/admin-ui-handler.ts index e577368363d..3af34f14e2d 100644 --- a/src/ui/admin-ui-handler.ts +++ b/src/ui/admin-ui-handler.ts @@ -7,6 +7,7 @@ import type { InputFieldConfig } from "#ui/form-modal-ui-handler"; import { FormModalUiHandler } from "#ui/form-modal-ui-handler"; import type { ModalConfig } from "#ui/modal-ui-handler"; import { toTitleCase } from "#utils/strings"; +import { getTextColor } from "./text"; type AdminUiHandlerService = "discord" | "google"; type AdminUiHandlerServiceMode = "Link" | "Unlink"; @@ -129,11 +130,11 @@ export class AdminUiHandler extends FormModalUiHandler { this.errorMessage.setPosition(10, (hasTitle ? 31 : 5) + 20 * (fields.length - 1) + 16 + this.getButtonTopMargin()); // sets the position of the message dynamically if (isMessageError) { - this.errorMessage.setColor(this.getTextColor(TextStyle.SUMMARY_PINK)); - this.errorMessage.setShadowColor(this.getTextColor(TextStyle.SUMMARY_PINK, true)); + this.errorMessage.setColor(getTextColor(TextStyle.SUMMARY_PINK)); + this.errorMessage.setShadowColor(getTextColor(TextStyle.SUMMARY_PINK, true)); } else { - this.errorMessage.setColor(this.getTextColor(TextStyle.SUMMARY_GREEN)); - this.errorMessage.setShadowColor(this.getTextColor(TextStyle.SUMMARY_GREEN, true)); + this.errorMessage.setColor(getTextColor(TextStyle.SUMMARY_GREEN)); + this.errorMessage.setShadowColor(getTextColor(TextStyle.SUMMARY_GREEN, true)); } if (super.show(args)) { diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index 99dabd893df..3d8efca96b8 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -26,7 +26,7 @@ export class BallUiHandler extends UiHandler { setup() { const ui = this.getUi(); - this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; + this.scale = getTextStyleOptions(TextStyle.WINDOW).scale; let optionsTextContent = ""; diff --git a/src/ui/battle-info/battle-info.ts b/src/ui/battle-info/battle-info.ts index 1641585a603..4d2cf597ed2 100644 --- a/src/ui/battle-info/battle-info.ts +++ b/src/ui/battle-info/battle-info.ts @@ -5,6 +5,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { TextStyle } from "#enums/text-style"; +import { UiTheme } from "#enums/ui-theme"; import type { Pokemon } from "#field/pokemon"; import { getVariantTint } from "#sprites/variant"; import { addTextObject } from "#ui/text"; @@ -265,7 +266,7 @@ export abstract class BattleInfo extends Phaser.GameObjects.Container { this.add(this.hpBar); this.levelNumbersContainer = globalScene.add - .container(9.5, globalScene.uiTheme ? 0 : -0.5) + .container(9.5, globalScene.uiTheme === UiTheme.LEGACY ? 0 : -0.5) .setName("container_level"); this.levelContainer.add(this.levelNumbersContainer); diff --git a/src/ui/battle-info/enemy-battle-info.ts b/src/ui/battle-info/enemy-battle-info.ts index 7a2af017219..0feb314a2e7 100644 --- a/src/ui/battle-info/enemy-battle-info.ts +++ b/src/ui/battle-info/enemy-battle-info.ts @@ -1,6 +1,7 @@ import { globalScene } from "#app/global-scene"; import { Stat } from "#enums/stat"; import { TextStyle } from "#enums/text-style"; +import { UiTheme } from "#enums/ui-theme"; import type { EnemyPokemon } from "#field/pokemon"; import { BattleFlyout } from "#ui/battle-flyout"; import type { BattleInfoParamList } from "#ui/battle-info"; @@ -203,7 +204,7 @@ export class EnemyBattleInfo extends BattleInfo { } if (this.boss && this.bossSegments > 1) { - const uiTheme = globalScene.uiTheme; + const isLegacyUiTheme = globalScene.uiTheme === UiTheme.LEGACY; const maxHp = pokemon.getMaxHp(); for (let s = 1; s < this.bossSegments; s++) { const dividerX = (Math.round((maxHp / this.bossSegments) * s) / maxHp) * this.hpBar.width; @@ -211,14 +212,14 @@ export class EnemyBattleInfo extends BattleInfo { 0, 0, 1, - this.hpBar.height - (uiTheme ? 0 : 1), + this.hpBar.height - (isLegacyUiTheme ? 0 : 1), pokemon.bossSegmentIndex >= s ? 0xffffff : 0x404040, ); divider.setOrigin(0.5, 0).setName("hpBar_divider_" + s.toString()); this.add(divider); this.moveBelow(divider as Phaser.GameObjects.GameObject, this.statsContainer); - divider.setPositionRelative(this.hpBar, dividerX, uiTheme ? 0 : 1); + divider.setPositionRelative(this.hpBar, dividerX, isLegacyUiTheme ? 0 : 1); this.hpBarSegmentDividers.push(divider); } } diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 2ecca06172b..bf4360b37bf 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -245,7 +245,6 @@ export class BattleMessageUiHandler extends MessageUiHandler { 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; - const uiTheme = globalScene.uiTheme; // Assuming uiTheme is accessible // Function to wrap text in color based on comparison const coloredText = (text: string, isBetter: boolean, ivValue) => { @@ -259,8 +258,8 @@ export class BattleMessageUiHandler extends MessageUiHandler { } else { textStyle = TextStyle.WINDOW; } - const color = getTextColor(textStyle, false, uiTheme); - return `[color=${color}][shadow=${getTextColor(textStyle, true, uiTheme)}]${text}[/shadow][/color]`; + const color = getTextColor(textStyle, false); + return `[color=${color}][shadow=${getTextColor(textStyle, true)}]${text}[/shadow][/color]`; }; if (value > 30) { diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index e54ee445aee..d94ddcd6ee5 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -170,7 +170,7 @@ export class EggGachaUiHandler extends MessageUiHandler { setup() { this.gachaCursor = 0; - this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; + this.scale = getTextStyleOptions(TextStyle.WINDOW).scale; const ui = this.getUi(); diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 1d856079939..d1b85a29b14 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -13,7 +13,7 @@ import type { EnemyPokemon, Pokemon } from "#field/pokemon"; import type { PokemonMove } from "#moves/pokemon-move"; import type { CommandPhase } from "#phases/command-phase"; import { MoveInfoOverlay } from "#ui/move-info-overlay"; -import { addTextObject } from "#ui/text"; +import { addTextObject, getTextColor } from "#ui/text"; import { UiHandler } from "#ui/ui-handler"; import { fixedInt, getLocalizedSpriteKey, padInt } from "#utils/common"; import i18next from "i18next"; @@ -284,7 +284,7 @@ export class FightUiHandler extends UiHandler implements InfoToggle { const ppColorStyle = FightUiHandler.ppRatioToColor(pp / maxPP); // Changes the text color and shadow according to the determined TextStyle - this.ppText.setColor(this.getTextColor(ppColorStyle, false)).setShadowColor(this.getTextColor(ppColorStyle, true)); + this.ppText.setColor(getTextColor(ppColorStyle, false)).setShadowColor(getTextColor(ppColorStyle, true)); this.moveInfoOverlay.show(pokemonMove.getMove()); pokemon.getOpponents().forEach(opponent => { diff --git a/src/ui/filter-bar.ts b/src/ui/filter-bar.ts index ea227655a97..f33c2902295 100644 --- a/src/ui/filter-bar.ts +++ b/src/ui/filter-bar.ts @@ -97,9 +97,9 @@ export class FilterBar extends Phaser.GameObjects.Container { updateFilterLabels(): void { for (let i = 0; i < this.numFilters; i++) { if (this.dropDowns[i].hasDefaultValues()) { - this.labels[i].setColor(getTextColor(TextStyle.TOOLTIP_CONTENT, false, globalScene.uiTheme)); + this.labels[i].setColor(getTextColor(TextStyle.TOOLTIP_CONTENT, false)); } else { - this.labels[i].setColor(getTextColor(TextStyle.STATS_LABEL, false, globalScene.uiTheme)); + this.labels[i].setColor(getTextColor(TextStyle.STATS_LABEL, false)); } } } diff --git a/src/ui/filter-text.ts b/src/ui/filter-text.ts index d5809292c25..c9849469d5d 100644 --- a/src/ui/filter-text.ts +++ b/src/ui/filter-text.ts @@ -167,9 +167,9 @@ export class FilterText extends Phaser.GameObjects.Container { updateFilterLabels(): void { for (let i = 0; i < this.numFilters; i++) { if (this.selections[i].text === this.defaultText) { - this.labels[i].setColor(getTextColor(TextStyle.TOOLTIP_CONTENT, false, globalScene.uiTheme)); + this.labels[i].setColor(getTextColor(TextStyle.TOOLTIP_CONTENT, false)); } else { - this.labels[i].setColor(getTextColor(TextStyle.STATS_LABEL, false, globalScene.uiTheme)); + this.labels[i].setColor(getTextColor(TextStyle.STATS_LABEL, false)); } } } diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index 5c547465de9..092a0c85bb2 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -4,7 +4,7 @@ import { TextStyle } from "#enums/text-style"; import type { UiMode } from "#enums/ui-mode"; import type { ModalConfig } from "#ui/modal-ui-handler"; import { ModalUiHandler } from "#ui/modal-ui-handler"; -import { addTextInputObject, addTextObject } from "#ui/text"; +import { addTextInputObject, addTextObject, getTextColor } from "#ui/text"; import { addWindow, WindowVariant } from "#ui/ui-theme"; import { fixedInt } from "#utils/common"; import type InputText from "phaser3-rex-plugins/plugins/inputtext"; @@ -78,8 +78,8 @@ export abstract class FormModalUiHandler extends ModalUiHandler { wordWrap: { width: 850 }, }, ); - this.errorMessage.setColor(this.getTextColor(TextStyle.SUMMARY_PINK)); - this.errorMessage.setShadowColor(this.getTextColor(TextStyle.SUMMARY_PINK, true)); + this.errorMessage.setColor(getTextColor(TextStyle.SUMMARY_PINK)); + this.errorMessage.setShadowColor(getTextColor(TextStyle.SUMMARY_PINK, true)); this.errorMessage.setVisible(false); this.modalContainer.add(this.errorMessage); } diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 4f6d6ede488..bed7e573161 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -145,7 +145,7 @@ export class MenuUiHandler extends MessageUiHandler { ); this.optionSelectText.setLineSpacing(12); - this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; + this.scale = getTextStyleOptions(TextStyle.WINDOW).scale; this.menuBg = addWindow( globalScene.scaledCanvas.width - (this.optionSelectText.displayWidth + 25), 0, diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index a070b522050..9ddc892add6 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -65,7 +65,7 @@ export class ModifierSelectUiHandler extends AwaitableUiHandler { const canvas = document.createElement("canvas"); const context = canvas.getContext("2d"); - const styleOptions = getTextStyleOptions(TextStyle.PARTY, globalScene.uiTheme).styleOptions; + const styleOptions = getTextStyleOptions(TextStyle.PARTY).styleOptions; if (context) { context.font = styleOptions.fontSize + "px " + styleOptions.fontFamily; @@ -686,14 +686,14 @@ export class ModifierSelectUiHandler extends AwaitableUiHandler { const formattedMoney = formatMoney(globalScene.moneyFormat, this.rerollCost); this.rerollCostText.setText(i18next.t("modifierSelectUiHandler:rerollCost", { formattedMoney })); - this.rerollCostText.setColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED)); - this.rerollCostText.setShadowColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED, true)); + this.rerollCostText.setColor(getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED)); + this.rerollCostText.setShadowColor(getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED, true)); } updateLockRaritiesText(): void { const textStyle = globalScene.lockModifierTiers ? TextStyle.SUMMARY_BLUE : TextStyle.PARTY; - this.lockRarityButtonText.setColor(this.getTextColor(textStyle)); - this.lockRarityButtonText.setShadowColor(this.getTextColor(textStyle, true)); + this.lockRarityButtonText.setColor(getTextColor(textStyle)); + this.lockRarityButtonText.setShadowColor(getTextColor(textStyle, true)); } clear() { @@ -1042,7 +1042,7 @@ class ModifierOption extends Phaser.GameObjects.Container { const formattedMoney = formatMoney(globalScene.moneyFormat, cost); this.itemCostText.setText(i18next.t("modifierSelectUiHandler:itemCost", { formattedMoney })); - this.itemCostText.setColor(getTextColor(textStyle, false, globalScene.uiTheme)); - this.itemCostText.setShadowColor(getTextColor(textStyle, true, globalScene.uiTheme)); + this.itemCostText.setColor(getTextColor(textStyle, false)); + this.itemCostText.setShadowColor(getTextColor(textStyle, true)); } } diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 50d86209165..64b0e9c456e 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -662,7 +662,7 @@ export class PokedexPageUiHandler extends MessageUiHandler { i18next.t("pokedexUiHandler:showEvolutions"), ]; - this.scale = getTextStyleOptions(TextStyle.WINDOW, globalScene.uiTheme).scale; + this.scale = getTextStyleOptions(TextStyle.WINDOW).scale; this.menuBg = addWindow( globalScene.scaledCanvas.width - 83, 0, @@ -767,16 +767,8 @@ export class PokedexPageUiHandler extends MessageUiHandler { !isSeen || (!isStarterCaught && (o === MenuOptions.TOGGLE_IVS || o === MenuOptions.NATURES)) || (this.tmMoves.length < 1 && o === MenuOptions.TM_MOVES); - const color = getTextColor( - isDark ? TextStyle.SHADOW_TEXT : TextStyle.SETTINGS_VALUE, - false, - globalScene.uiTheme, - ); - const shadow = getTextColor( - isDark ? TextStyle.SHADOW_TEXT : TextStyle.SETTINGS_VALUE, - true, - globalScene.uiTheme, - ); + const color = getTextColor(isDark ? TextStyle.SHADOW_TEXT : TextStyle.SETTINGS_VALUE, false); + const shadow = getTextColor(isDark ? TextStyle.SHADOW_TEXT : TextStyle.SETTINGS_VALUE, true); return `[shadow=${shadow}][color=${color}]${label}[/color][/shadow]`; }) .join("\n"); @@ -1789,7 +1781,7 @@ export class PokedexPageUiHandler extends MessageUiHandler { options: natures .map((n: Nature, _i: number) => { const option: OptionSelectItem = { - label: getNatureName(n, true, true, true, globalScene.uiTheme), + label: getNatureName(n, true, true, true), handler: () => { return false; }, @@ -2517,10 +2509,10 @@ export class PokedexPageUiHandler extends MessageUiHandler { this.shinyOverlay.setVisible(shiny ?? false); // TODO: is false the correct default? this.pokemonNumberText.setColor( - this.getTextColor(shiny ? TextStyle.SUMMARY_DEX_NUM_GOLD : TextStyle.SUMMARY_DEX_NUM, false), + getTextColor(shiny ? TextStyle.SUMMARY_DEX_NUM_GOLD : TextStyle.SUMMARY_DEX_NUM, false), ); this.pokemonNumberText.setShadowColor( - this.getTextColor(shiny ? TextStyle.SUMMARY_DEX_NUM_GOLD : TextStyle.SUMMARY_DEX_NUM, true), + getTextColor(shiny ? TextStyle.SUMMARY_DEX_NUM_GOLD : TextStyle.SUMMARY_DEX_NUM, true), ); const assetLoadCancelled = new BooleanHolder(false); @@ -2728,8 +2720,8 @@ export class PokedexPageUiHandler extends MessageUiHandler { } } else { this.shinyOverlay.setVisible(false); - this.pokemonNumberText.setColor(this.getTextColor(TextStyle.SUMMARY)); - this.pokemonNumberText.setShadowColor(this.getTextColor(TextStyle.SUMMARY, true)); + this.pokemonNumberText.setColor(getTextColor(TextStyle.SUMMARY)); + this.pokemonNumberText.setShadowColor(getTextColor(TextStyle.SUMMARY, true)); this.pokemonGenderText.setText(""); this.setTypeIcons(null, null); } diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 01046bfef9c..046ca564709 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -28,6 +28,7 @@ import { PokemonType } from "#enums/pokemon-type"; import type { SpeciesId } from "#enums/species-id"; import { TextStyle } from "#enums/text-style"; import { UiMode } from "#enums/ui-mode"; +import { UiTheme } from "#enums/ui-theme"; import type { Variant } from "#sprites/variant"; import { getVariantIcon, getVariantTint } from "#sprites/variant"; import type { DexAttrProps, StarterAttributes } from "#system/game-data"; @@ -41,7 +42,7 @@ import { MessageUiHandler } from "#ui/message-ui-handler"; import { PokedexMonContainer } from "#ui/pokedex-mon-container"; import { PokemonIconAnimHandler, PokemonIconAnimMode } from "#ui/pokemon-icon-anim-handler"; import { ScrollBar } from "#ui/scroll-bar"; -import { addTextObject } from "#ui/text"; +import { addTextObject, getTextColor } from "#ui/text"; import { addWindow } from "#ui/ui-theme"; import { BooleanHolder, fixedInt, getLocalizedSpriteKey, padInt, randIntRange, rgbHexToRgba } from "#utils/common"; import type { StarterPreferences } from "#utils/data"; @@ -470,7 +471,7 @@ export class PokedexUiHandler extends MessageUiHandler { // Offset the generation filter dropdown to avoid covering the filtered pokemon this.filterBar.offsetHybridFilters(); - if (!globalScene.uiTheme) { + if (globalScene.uiTheme === UiTheme.DEFAULT) { pokemonContainerWindow.setVisible(false); } @@ -2314,8 +2315,8 @@ export class PokedexUiHandler extends MessageUiHandler { break; } if (baseStarterValue - starterValue > 0) { - starter.label.setColor(this.getTextColor(textStyle)); - starter.label.setShadowColor(this.getTextColor(textStyle, true)); + starter.label.setColor(getTextColor(textStyle)); + starter.label.setShadowColor(getTextColor(textStyle, true)); } } diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 3b2349348a8..d232100ffaa 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -274,8 +274,8 @@ export class PokemonInfoContainer extends Phaser.GameObjects.Container { const newGender = BigInt(1 << pokemon.gender) * DexAttr.MALE; this.pokemonGenderNewText.setText("(+)"); - this.pokemonGenderNewText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)); - this.pokemonGenderNewText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)); + this.pokemonGenderNewText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false)); + this.pokemonGenderNewText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true)); this.pokemonGenderNewText.setVisible((newGender & caughtAttr) === BigInt(0)); } else { this.pokemonGenderNewText.setVisible(false); @@ -290,11 +290,11 @@ export class PokemonInfoContainer extends Phaser.GameObjects.Container { const newForm = BigInt(1 << pokemon.formIndex) * DexAttr.DEFAULT_FORM; if ((newForm & caughtAttr) === BigInt(0)) { - this.pokemonFormLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)); - this.pokemonFormLabelText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)); + this.pokemonFormLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false)); + this.pokemonFormLabelText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true)); } else { - this.pokemonFormLabelText.setColor(getTextColor(TextStyle.WINDOW, false, globalScene.uiTheme)); - this.pokemonFormLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true, globalScene.uiTheme)); + this.pokemonFormLabelText.setColor(getTextColor(TextStyle.WINDOW, false)); + this.pokemonFormLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true)); } this.pokemonFormText.setText( @@ -320,31 +320,31 @@ export class PokemonInfoContainer extends Phaser.GameObjects.Container { const abilityTextStyle = pokemon.abilityIndex === 2 ? TextStyle.MONEY : TextStyle.WINDOW; this.pokemonAbilityText.setText(pokemon.getAbility(true).name); - this.pokemonAbilityText.setColor(getTextColor(abilityTextStyle, false, globalScene.uiTheme)); - this.pokemonAbilityText.setShadowColor(getTextColor(abilityTextStyle, true, globalScene.uiTheme)); + this.pokemonAbilityText.setColor(getTextColor(abilityTextStyle, false)); + this.pokemonAbilityText.setShadowColor(getTextColor(abilityTextStyle, true)); // Check if the player owns ability for the root form const playerOwnsThisAbility = pokemon.checkIfPlayerHasAbilityOfStarter(starterEntry.abilityAttr); if (!playerOwnsThisAbility) { - this.pokemonAbilityLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)); - this.pokemonAbilityLabelText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)); + this.pokemonAbilityLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false)); + this.pokemonAbilityLabelText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true)); } else { - this.pokemonAbilityLabelText.setColor(getTextColor(TextStyle.WINDOW, false, globalScene.uiTheme)); - this.pokemonAbilityLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true, globalScene.uiTheme)); + this.pokemonAbilityLabelText.setColor(getTextColor(TextStyle.WINDOW, false)); + this.pokemonAbilityLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true)); } - this.pokemonNatureText.setText(getNatureName(pokemon.getNature(), true, false, false, globalScene.uiTheme)); + this.pokemonNatureText.setText(getNatureName(pokemon.getNature(), true, false, false)); const dexNatures = dexEntry.natureAttr; const newNature = 1 << (pokemon.nature + 1); if (!(dexNatures & newNature)) { - this.pokemonNatureLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)); - this.pokemonNatureLabelText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)); + this.pokemonNatureLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false)); + this.pokemonNatureLabelText.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true)); } else { - this.pokemonNatureLabelText.setColor(getTextColor(TextStyle.WINDOW, false, globalScene.uiTheme)); - this.pokemonNatureLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true, globalScene.uiTheme)); + this.pokemonNatureLabelText.setColor(getTextColor(TextStyle.WINDOW, false)); + this.pokemonNatureLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true)); } const isFusion = pokemon.isFusion(); @@ -373,16 +373,16 @@ export class PokemonInfoContainer extends Phaser.GameObjects.Container { const newVariant = BigInt(1 << (pokemon.variant + 4)); this.pokemonShinyNewIcon.setText("(+)"); - this.pokemonShinyNewIcon.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)); - this.pokemonShinyNewIcon.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)); + this.pokemonShinyNewIcon.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false)); + this.pokemonShinyNewIcon.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true)); const newShinyOrVariant = (newShiny & caughtAttr) === BigInt(0) || (newVariant & caughtAttr) === BigInt(0); this.pokemonShinyNewIcon.setVisible(!!newShinyOrVariant); } else if ((caughtAttr & DexAttr.NON_SHINY) === BigInt(0) && (caughtAttr & DexAttr.SHINY) === DexAttr.SHINY) { //If the player has *only* caught any shiny variant of this species, not a non-shiny this.pokemonShinyNewIcon.setVisible(true); this.pokemonShinyNewIcon.setText("(+)"); - this.pokemonShinyNewIcon.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)); - this.pokemonShinyNewIcon.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)); + this.pokemonShinyNewIcon.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false)); + this.pokemonShinyNewIcon.setShadowColor(getTextColor(TextStyle.SUMMARY_BLUE, true)); } else { this.pokemonShinyNewIcon.setVisible(false); } diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 5fc0f37c72d..8b2190c3b4a 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -618,7 +618,7 @@ export class RunInfoUiHandler extends UiHandler { const runTime = getPlayTimeString(this.runInfo.playTime); runInfoText.appendText(`${i18next.t("runHistory:runLength")}: ${runTime}`, false); const runMoney = formatMoney(globalScene.moneyFormat, this.runInfo.money); - const moneyTextColor = getTextColor(TextStyle.MONEY_WINDOW, false, globalScene.uiTheme); + const moneyTextColor = getTextColor(TextStyle.MONEY_WINDOW, false); runInfoText.appendText( `[color=${moneyTextColor}]${i18next.t("battleScene:moneyOwned", { formattedMoney: runMoney })}[/color]`, ); diff --git a/src/ui/settings/abstract-binding-ui-handler.ts b/src/ui/settings/abstract-binding-ui-handler.ts index 2c8d0eb63ba..6b747a10d2b 100644 --- a/src/ui/settings/abstract-binding-ui-handler.ts +++ b/src/ui/settings/abstract-binding-ui-handler.ts @@ -3,7 +3,7 @@ import { Button } from "#enums/buttons"; import { TextStyle } from "#enums/text-style"; import type { UiMode } from "#enums/ui-mode"; import { NavigationManager } from "#ui/navigation-menu"; -import { addTextObject } from "#ui/text"; +import { addTextObject, getTextColor } from "#ui/text"; import { UiHandler } from "#ui/ui-handler"; import { addWindow } from "#ui/ui-theme"; import i18next from "i18next"; @@ -222,16 +222,16 @@ export abstract class AbstractBindingUiHandler extends UiHandler { setCursor(cursor: number): boolean { this.cursor = cursor; if (cursor === 1) { - this.actionLabel.setColor(this.getTextColor(TextStyle.SETTINGS_SELECTED)); - this.actionLabel.setShadowColor(this.getTextColor(TextStyle.SETTINGS_SELECTED, true)); - this.cancelLabel.setColor(this.getTextColor(TextStyle.WINDOW)); - this.cancelLabel.setShadowColor(this.getTextColor(TextStyle.WINDOW, true)); + this.actionLabel.setColor(getTextColor(TextStyle.SETTINGS_SELECTED)); + this.actionLabel.setShadowColor(getTextColor(TextStyle.SETTINGS_SELECTED, true)); + this.cancelLabel.setColor(getTextColor(TextStyle.WINDOW)); + this.cancelLabel.setShadowColor(getTextColor(TextStyle.WINDOW, true)); return true; } - this.actionLabel.setColor(this.getTextColor(TextStyle.WINDOW)); - this.actionLabel.setShadowColor(this.getTextColor(TextStyle.WINDOW, true)); - this.cancelLabel.setColor(this.getTextColor(TextStyle.SETTINGS_SELECTED)); - this.cancelLabel.setShadowColor(this.getTextColor(TextStyle.SETTINGS_SELECTED, true)); + this.actionLabel.setColor(getTextColor(TextStyle.WINDOW)); + this.actionLabel.setShadowColor(getTextColor(TextStyle.WINDOW, true)); + this.cancelLabel.setColor(getTextColor(TextStyle.SETTINGS_SELECTED)); + this.cancelLabel.setShadowColor(getTextColor(TextStyle.SETTINGS_SELECTED, true)); return true; } diff --git a/src/ui/settings/abstract-control-settings-ui-handler.ts b/src/ui/settings/abstract-control-settings-ui-handler.ts index b40676fc97c..c08f1570b75 100644 --- a/src/ui/settings/abstract-control-settings-ui-handler.ts +++ b/src/ui/settings/abstract-control-settings-ui-handler.ts @@ -7,7 +7,7 @@ import type { UiMode } from "#enums/ui-mode"; import { getIconWithSettingName } from "#inputs/config-handler"; import { NavigationManager, NavigationMenu } from "#ui/navigation-menu"; import { ScrollBar } from "#ui/scroll-bar"; -import { addTextObject } from "#ui/text"; +import { addTextObject, getTextColor } from "#ui/text"; import { UiHandler } from "#ui/ui-handler"; import { addWindow } from "#ui/ui-theme"; import { toCamelCase } from "#utils/strings"; @@ -653,16 +653,16 @@ export abstract class AbstractControlSettingsUiHandler extends UiHandler { if (!this.bindingSettings.includes(setting) && !setting.includes("BUTTON_")) { // Get the label of the last selected option and revert its color to the default. const lastValueLabel = this.optionValueLabels[settingIndex][lastCursor]; - lastValueLabel.setColor(this.getTextColor(TextStyle.WINDOW)); - lastValueLabel.setShadowColor(this.getTextColor(TextStyle.WINDOW, true)); + lastValueLabel.setColor(getTextColor(TextStyle.WINDOW)); + lastValueLabel.setShadowColor(getTextColor(TextStyle.WINDOW, true)); // Update the cursor for the setting to the new position. this.optionCursors[settingIndex] = cursor; // Change the color of the new selected option to indicate it's selected. const newValueLabel = this.optionValueLabels[settingIndex][cursor]; - newValueLabel.setColor(this.getTextColor(TextStyle.SETTINGS_SELECTED)); - newValueLabel.setShadowColor(this.getTextColor(TextStyle.SETTINGS_SELECTED, true)); + newValueLabel.setColor(getTextColor(TextStyle.SETTINGS_SELECTED)); + newValueLabel.setShadowColor(getTextColor(TextStyle.SETTINGS_SELECTED, true)); } // If the save flag is set, save the setting to local storage diff --git a/src/ui/settings/abstract-settings-ui-handler.ts b/src/ui/settings/abstract-settings-ui-handler.ts index 91d5aec984a..ae1bb40dbeb 100644 --- a/src/ui/settings/abstract-settings-ui-handler.ts +++ b/src/ui/settings/abstract-settings-ui-handler.ts @@ -8,7 +8,7 @@ import type { InputsIcons } from "#ui/abstract-control-settings-ui-handler"; import { MessageUiHandler } from "#ui/message-ui-handler"; import { NavigationManager, NavigationMenu } from "#ui/navigation-menu"; import { ScrollBar } from "#ui/scroll-bar"; -import { addTextObject } from "#ui/text"; +import { addTextObject, getTextColor } from "#ui/text"; import { addWindow } from "#ui/ui-theme"; import i18next from "i18next"; @@ -403,14 +403,14 @@ export class AbstractSettingsUiHandler extends MessageUiHandler { const lastCursor = this.optionCursors[settingIndex]; const lastValueLabel = this.optionValueLabels[settingIndex][lastCursor]; - lastValueLabel.setColor(this.getTextColor(TextStyle.SETTINGS_VALUE)); - lastValueLabel.setShadowColor(this.getTextColor(TextStyle.SETTINGS_VALUE, true)); + lastValueLabel.setColor(getTextColor(TextStyle.SETTINGS_VALUE)); + lastValueLabel.setShadowColor(getTextColor(TextStyle.SETTINGS_VALUE, true)); this.optionCursors[settingIndex] = cursor; const newValueLabel = this.optionValueLabels[settingIndex][cursor]; - newValueLabel.setColor(this.getTextColor(TextStyle.SETTINGS_SELECTED)); - newValueLabel.setShadowColor(this.getTextColor(TextStyle.SETTINGS_SELECTED, true)); + newValueLabel.setColor(getTextColor(TextStyle.SETTINGS_SELECTED)); + newValueLabel.setShadowColor(getTextColor(TextStyle.SETTINGS_SELECTED, true)); if (save) { const saveSetting = () => { diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 8fce287c897..b27cc0af709 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -40,6 +40,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { SpeciesId } from "#enums/species-id"; import { TextStyle } from "#enums/text-style"; import { UiMode } from "#enums/ui-mode"; +import { UiTheme } from "#enums/ui-theme"; import type { CandyUpgradeNotificationChangedEvent } from "#events/battle-scene"; import { BattleSceneEventType } from "#events/battle-scene"; import type { Variant } from "#sprites/variant"; @@ -58,7 +59,7 @@ import { PokemonIconAnimHandler, PokemonIconAnimMode } from "#ui/pokemon-icon-an import { ScrollBar } from "#ui/scroll-bar"; import { StarterContainer } from "#ui/starter-container"; import { StatsContainer } from "#ui/stats-container"; -import { addBBCodeTextObject, addTextObject } from "#ui/text"; +import { addBBCodeTextObject, addTextObject, getTextColor } from "#ui/text"; import { addWindow } from "#ui/ui-theme"; import { applyChallenges, checkStarterValidForChallenge } from "#utils/challenge-utils"; import { @@ -599,7 +600,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { // Offset the generation filter dropdown to avoid covering the filtered pokemon this.filterBar.offsetHybridFilters(); - if (!globalScene.uiTheme) { + if (globalScene.uiTheme === UiTheme.DEFAULT) { starterContainerWindow.setVisible(false); } @@ -2065,7 +2066,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { options: natures .map((n: Nature, _i: number) => { const option: OptionSelectItem = { - label: getNatureName(n, true, true, true, globalScene.uiTheme), + label: getNatureName(n, true, true, true), handler: () => { starterAttributes.nature = n; originalStarterAttributes.nature = starterAttributes.nature; @@ -3909,10 +3910,10 @@ export class StarterSelectUiHandler extends MessageUiHandler { this.shinyOverlay.setVisible(shiny ?? false); // TODO: is false the correct default? this.pokemonNumberText.setColor( - this.getTextColor(shiny ? TextStyle.SUMMARY_DEX_NUM_GOLD : TextStyle.SUMMARY_DEX_NUM, false), + getTextColor(shiny ? TextStyle.SUMMARY_DEX_NUM_GOLD : TextStyle.SUMMARY_DEX_NUM, false), ); this.pokemonNumberText.setShadowColor( - this.getTextColor(shiny ? TextStyle.SUMMARY_DEX_NUM_GOLD : TextStyle.SUMMARY_DEX_NUM, true), + getTextColor(shiny ? TextStyle.SUMMARY_DEX_NUM_GOLD : TextStyle.SUMMARY_DEX_NUM, true), ); if (forSeen ? this.speciesStarterDexEntry?.seenAttr : this.speciesStarterDexEntry?.caughtAttr) { @@ -4021,8 +4022,8 @@ export class StarterSelectUiHandler extends MessageUiHandler { const isHidden = abilityIndex === (this.lastSpecies.ability2 ? 2 : 1); this.pokemonAbilityText .setText(ability.name) - .setColor(this.getTextColor(!isHidden ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GOLD)) - .setShadowColor(this.getTextColor(!isHidden ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GOLD, true)); + .setColor(getTextColor(!isHidden ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GOLD)) + .setShadowColor(getTextColor(!isHidden ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GOLD, true)); const passiveAttr = starterDataEntry.passiveAttr; const passiveAbility = allAbilities[this.lastSpecies.getPassiveAbility(formIndex)]; @@ -4051,14 +4052,14 @@ export class StarterSelectUiHandler extends MessageUiHandler { this.pokemonPassiveLabelText .setVisible(!isFreshStartChallenge) - .setColor(this.getTextColor(TextStyle.SUMMARY_ALT)) - .setShadowColor(this.getTextColor(TextStyle.SUMMARY_ALT, true)); + .setColor(getTextColor(TextStyle.SUMMARY_ALT)) + .setShadowColor(getTextColor(TextStyle.SUMMARY_ALT, true)); this.pokemonPassiveText .setVisible(!isFreshStartChallenge) .setText(passiveAbility.name) - .setColor(this.getTextColor(textStyle)) + .setColor(getTextColor(textStyle)) .setAlpha(textAlpha) - .setShadowColor(this.getTextColor(textStyle, true)); + .setShadowColor(getTextColor(textStyle, true)); if (this.activeTooltip === "PASSIVE") { globalScene.ui.editTooltip(`${passiveAbility.name}`, `${passiveAbility.description}`); @@ -4090,9 +4091,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { globalScene.ui.hideTooltip(); } - this.pokemonNatureText.setText( - getNatureName(natureIndex as unknown as Nature, true, true, false, globalScene.uiTheme), - ); + this.pokemonNatureText.setText(getNatureName(natureIndex as unknown as Nature, true, true, false)); let levelMoves: LevelMoves; if ( @@ -4159,8 +4158,8 @@ export class StarterSelectUiHandler extends MessageUiHandler { } else { this.shinyOverlay.setVisible(false); this.pokemonNumberText - .setColor(this.getTextColor(TextStyle.SUMMARY)) - .setShadowColor(this.getTextColor(TextStyle.SUMMARY, true)); + .setColor(getTextColor(TextStyle.SUMMARY)) + .setShadowColor(getTextColor(TextStyle.SUMMARY, true)); this.pokemonGenderText.setText(""); this.pokemonAbilityText.setText(""); this.pokemonPassiveText.setText(""); @@ -4302,7 +4301,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { textStyle = TextStyle.SUMMARY_GOLD; break; } - starter.label.setColor(this.getTextColor(textStyle)).setShadowColor(this.getTextColor(textStyle, true)); + starter.label.setColor(getTextColor(textStyle)).setShadowColor(getTextColor(textStyle, true)); } tryUpdateValue(add?: number, addingToParty?: boolean): boolean { @@ -4322,8 +4321,8 @@ export class StarterSelectUiHandler extends MessageUiHandler { } this.valueLimitLabel .setText(`${newValueStr}/${valueLimit}`) - .setColor(this.getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_PINK)) - .setShadowColor(this.getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_PINK, true)); + .setColor(getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_PINK)) + .setShadowColor(getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_PINK, true)); if (overLimit) { globalScene.time.delayedCall(fixedInt(500), () => this.tryUpdateValue()); return false; diff --git a/src/ui/stats-container.ts b/src/ui/stats-container.ts index e9af5eed3e3..f5221d38991 100644 --- a/src/ui/stats-container.ts +++ b/src/ui/stats-container.ts @@ -113,7 +113,7 @@ export class StatsContainer extends Phaser.GameObjects.Container { (ivs[ivChartStatIndexes[i]] / 31) * ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1], ]); const lastIvChartData = this.statsIvsCache || defaultIvChartData; - const perfectIVColor: string = getTextColor(TextStyle.SUMMARY_GOLD, false, globalScene.uiTheme); + const perfectIVColor: string = getTextColor(TextStyle.SUMMARY_GOLD, false); this.statsIvsCache = ivChartData.slice(0); this.ivStatValueTexts.map((t: BBCodeText, i: number) => { @@ -127,7 +127,7 @@ export class StatsContainer extends Phaser.GameObjects.Container { } if (this.showDiff && originalIvs) { if (originalIvs[i] < ivs[i]) { - label += ` ([color=${getTextColor(TextStyle.SUMMARY_BLUE, false, globalScene.uiTheme)}][shadow=${getTextColor(TextStyle.SUMMARY_BLUE, true, globalScene.uiTheme)}]+${ivs[i] - originalIvs[i]}[/shadow][/color])`; + label += ` ([color=${getTextColor(TextStyle.SUMMARY_BLUE, false)}][shadow=${getTextColor(TextStyle.SUMMARY_BLUE, true)}]+${ivs[i] - originalIvs[i]}[/shadow][/color])`; } else { label += " (-)"; } diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 63111ee540a..f737411896e 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -25,7 +25,7 @@ import type { PokemonMove } from "#moves/pokemon-move"; import type { Variant } from "#sprites/variant"; import { getVariantTint } from "#sprites/variant"; import { achvs } from "#system/achv"; -import { addBBCodeTextObject, addTextObject, getBBCodeFrag } from "#ui/text"; +import { addBBCodeTextObject, addTextObject, getBBCodeFrag, getTextColor } from "#ui/text"; import { UiHandler } from "#ui/ui-handler"; import { fixedInt, @@ -361,9 +361,9 @@ export class SummaryUiHandler extends UiHandler { this.candyOverlay.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); this.numberText.setText(padInt(this.pokemon.species.speciesId, 4)); - this.numberText.setColor(this.getTextColor(!this.pokemon.isShiny() ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD)); + this.numberText.setColor(getTextColor(!this.pokemon.isShiny() ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD)); this.numberText.setShadowColor( - this.getTextColor(!this.pokemon.isShiny() ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD, true), + getTextColor(!this.pokemon.isShiny() ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD, true), ); const spriteKey = this.pokemon.getSpriteKey(true); try { diff --git a/src/ui/text.ts b/src/ui/text.ts index bac53f81ba6..927f9f08bb2 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -16,11 +16,7 @@ export function addTextObject( style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle, ): Phaser.GameObjects.Text { - const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions( - style, - globalScene.uiTheme, - extraStyleOptions, - ); + const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions(style, extraStyleOptions); const ret = globalScene.add .text(x, y, content, styleOptions) @@ -38,11 +34,7 @@ export function setTextStyle( style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle, ) { - const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions( - style, - globalScene.uiTheme, - extraStyleOptions, - ); + const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions(style, extraStyleOptions); obj.setScale(scale).setShadow(shadowXpos, shadowYpos, shadowColor); if (!(styleOptions as Phaser.Types.GameObjects.Text.TextStyle).lineSpacing) { obj.setLineSpacing(scale * 30); @@ -60,11 +52,7 @@ export function addBBCodeTextObject( style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle, ): BBCodeText { - const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions( - style, - globalScene.uiTheme, - extraStyleOptions, - ); + const { scale, styleOptions, shadowColor, shadowXpos, shadowYpos } = getTextStyleOptions(style, extraStyleOptions); const ret = new BBCodeText(globalScene, x, y, content, styleOptions as BBCodeText.TextStyle); globalScene.add.existing(ret); @@ -84,7 +72,7 @@ export function addTextInputObject( style: TextStyle, extraStyleOptions?: InputText.IConfig, ): InputText { - const { scale, styleOptions } = getTextStyleOptions(style, globalScene.uiTheme, extraStyleOptions); + const { scale, styleOptions } = getTextStyleOptions(style, extraStyleOptions); const ret = globalScene.add.rexInputText(x, y, width, height, styleOptions as InputText.IConfig); ret.setScale(scale); @@ -94,7 +82,6 @@ export function addTextInputObject( export function getTextStyleOptions( style: TextStyle, - uiTheme: UiTheme, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle, ): TextStyleOptions { const lang = i18next.resolvedLanguage; @@ -106,7 +93,7 @@ export function getTextStyleOptions( let styleOptions: Phaser.Types.GameObjects.Text.TextStyle = { fontFamily: "emerald", fontSize: 96, - color: getTextColor(style, false, uiTheme), + color: getTextColor(style, false), padding: { bottom: 6, }, @@ -465,7 +452,7 @@ export function getTextStyleOptions( break; } - const shadowColor = getTextColor(style, true, uiTheme); + const shadowColor = getTextColor(style, true); if (extraStyleOptions) { if (extraStyleOptions.fontSize) { @@ -480,8 +467,8 @@ export function getTextStyleOptions( return { scale, styleOptions, shadowColor, shadowXpos, shadowYpos }; } -export function getBBCodeFrag(content: string, textStyle: TextStyle, uiTheme: UiTheme = UiTheme.DEFAULT): string { - return `[color=${getTextColor(textStyle, false, uiTheme)}][shadow=${getTextColor(textStyle, true, uiTheme)}]${content}`; +export function getBBCodeFrag(content: string, textStyle: TextStyle): string { + return `[color=${getTextColor(textStyle, false)}][shadow=${getTextColor(textStyle, true)}]${content}`; } /** @@ -500,14 +487,9 @@ export function getBBCodeFrag(content: string, textStyle: TextStyle, uiTheme: Ui * @param forWindow set to `true` if the text is to be displayed in a window ({@linkcode BattleScene.addWindow}) * it will replace all instances of the default MONEY TextStyle by {@linkcode TextStyle.MONEY_WINDOW} */ -export function getTextWithColors( - content: string, - primaryStyle: TextStyle, - uiTheme: UiTheme, - forWindow?: boolean, -): string { +export function getTextWithColors(content: string, primaryStyle: TextStyle, forWindow?: boolean): string { // Apply primary styling before anything else - let text = getBBCodeFrag(content, primaryStyle, uiTheme) + "[/color][/shadow]"; + let text = getBBCodeFrag(content, primaryStyle) + "[/color][/shadow]"; const primaryStyleString = [...text.match(new RegExp(/\[color=[^[]*\]\[shadow=[^[]*\]/i))!][0]; /* For money text displayed in game windows, we can't use the default {@linkcode TextStyle.MONEY} @@ -520,10 +502,7 @@ export function getTextWithColors( // Set custom colors text = text.replace(/@\[([^{]*)\]{([^}]*)}/gi, (_substring, textStyle: string, textToColor: string) => { return ( - "[/color][/shadow]" + - getBBCodeFrag(textToColor, TextStyle[textStyle], uiTheme) + - "[/color][/shadow]" + - primaryStyleString + "[/color][/shadow]" + getBBCodeFrag(textToColor, TextStyle[textStyle]) + "[/color][/shadow]" + primaryStyleString ); }); @@ -532,8 +511,8 @@ export function getTextWithColors( } // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: This is a giant switch which is the best option. -export function getTextColor(textStyle: TextStyle, shadow?: boolean, uiTheme: UiTheme = UiTheme.DEFAULT): string { - const isLegacyTheme = uiTheme === UiTheme.LEGACY; +export function getTextColor(textStyle: TextStyle, shadow?: boolean): string { + const isLegacyTheme = globalScene.uiTheme === UiTheme.LEGACY; switch (textStyle) { case TextStyle.MESSAGE: return !shadow ? "#f8f8f8" : "#6b5a73"; diff --git a/src/ui/ui-handler.ts b/src/ui/ui-handler.ts index 7dde6b22dcd..558cb08f252 100644 --- a/src/ui/ui-handler.ts +++ b/src/ui/ui-handler.ts @@ -1,8 +1,6 @@ import { globalScene } from "#app/global-scene"; import type { Button } from "#enums/buttons"; -import type { TextStyle } from "#enums/text-style"; import type { UiMode } from "#enums/ui-mode"; -import { getTextColor } from "#ui/text"; /** * A basic abstract class to act as a holder and processor for UI elements. @@ -33,10 +31,6 @@ export abstract class UiHandler { return globalScene.ui; } - getTextColor(style: TextStyle, shadow = false): string { - return getTextColor(style, shadow, globalScene.uiTheme); - } - getCursor(): number { return this.cursor; } diff --git a/src/ui/ui-theme.ts b/src/ui/ui-theme.ts index f2d434c024a..9e130417b43 100644 --- a/src/ui/ui-theme.ts +++ b/src/ui/ui-theme.ts @@ -51,7 +51,7 @@ export function addWindow( windowVariant = WindowVariant.NORMAL; } - const borderSize = globalScene.uiTheme ? 6 : 8; + const borderSize = globalScene.uiTheme === UiTheme.LEGACY ? 6 : 8; const window = globalScene.add.nineslice( x, @@ -153,7 +153,11 @@ export function addUiThemeOverrides(): void { frame?: string | number, ): Phaser.GameObjects.Image { let legacy = false; - if (typeof texture === "string" && globalScene.uiTheme && legacyCompatibleImages.includes(texture)) { + if ( + typeof texture === "string" && + globalScene.uiTheme === UiTheme.LEGACY && + legacyCompatibleImages.includes(texture) + ) { legacy = true; texture += "_legacy"; } @@ -176,7 +180,11 @@ export function addUiThemeOverrides(): void { frame?: string | number, ): Phaser.GameObjects.Sprite { let legacy = false; - if (typeof texture === "string" && globalScene.uiTheme && legacyCompatibleImages.includes(texture)) { + if ( + typeof texture === "string" && + globalScene.uiTheme === UiTheme.LEGACY && + legacyCompatibleImages.includes(texture) + ) { legacy = true; texture += "_legacy"; } @@ -205,7 +213,11 @@ export function addUiThemeOverrides(): void { bottomHeight?: number, ): Phaser.GameObjects.NineSlice { let legacy = false; - if (typeof texture === "string" && globalScene.uiTheme && legacyCompatibleImages.includes(texture)) { + if ( + typeof texture === "string" && + globalScene.uiTheme === UiTheme.LEGACY && + legacyCompatibleImages.includes(texture) + ) { legacy = true; texture += "_legacy"; } From 669ed76daf07214b0254a5a1dc69780871143df7 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Thu, 4 Sep 2025 05:01:24 -0400 Subject: [PATCH 25/39] [Misc] Cleaned up implementation of `ChargeMove` mixin (#6466) Co-authored-by: Wlowscha <54003515+Wlowscha@users.noreply.github.com> --- src/data/moves/move.ts | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 5a22b352e73..36cef4d5e4e 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -93,6 +93,7 @@ import { getEnumValues } from "#utils/enums"; import { toCamelCase, toTitleCase } from "#utils/strings"; import i18next from "i18next"; import { applyChallenges } from "#utils/challenge-utils"; +import type { AbstractConstructor } from "#types/type-helpers"; /** * A function used to conditionally determine execution of a given {@linkcode MoveAttr}. @@ -1055,16 +1056,11 @@ export class SelfStatusMove extends Move { } } -// TODO: Figure out how to improve the signature of this so that -// the `ChargeMove` function knows that the argument `Base` is a specific subclass of move that cannot -// be abstract. -// Right now, I only know how to do this by using the type conjunction (the & operators) -type SubMove = new (...args: any[]) => Move & { - is(moveKind: K): this is MoveClassMap[K]; -}; +type SubMove = AbstractConstructor function ChargeMove(Base: TBase, nameAppend: string) { - return class extends Base { + // NB: This cannot be made into a oneline return + abstract class Charging extends Base { /** The animation to play during the move's charging phase */ public readonly chargeAnim: ChargeAnim = ChargeAnim[`${MoveId[this.id]}_CHARGING`]; /** The message to show during the move's charging phase */ @@ -1141,6 +1137,7 @@ function ChargeMove(Base: TBase, nameAppend: string) { return this; } }; + return Charging; } export class ChargingAttackMove extends ChargeMove(AttackMove, "ChargingAttackMove") {} From e477c505bc0f26b0d2e340220b879ed9b5efa849 Mon Sep 17 00:00:00 2001 From: Fabi <192151969+fabske0@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:03:55 +0200 Subject: [PATCH 26/39] [UI/UX] Show correct able text when transferring all items (#6444) * Check if items are able to transfer for `ALL` option * show amount of transferable items in `ALL` option * Show number of transferable items in the 'ALL' option * Apply suggestions --- src/ui/party-ui-handler.ts | 60 ++++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index a7c7a134488..eb9dddf600c 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -562,6 +562,9 @@ export class PartyUiHandler extends MessageUiHandler { private processModifierTransferModeInput(pokemon: PlayerPokemon) { const ui = this.getUi(); const option = this.options[this.optionsCursor]; + const allItems = this.getTransferrableItemsFromPokemon(pokemon); + // get the index of the "All" option. + const allCursorIndex = allItems.length; if (this.transferMode && option === PartyOption.TRANSFER) { return this.processTransferOption(); @@ -573,31 +576,56 @@ export class PartyUiHandler extends MessageUiHandler { let ableToTransferText: string; for (let p = 0; p < globalScene.getPlayerParty().length; p++) { - // this for look goes through each of the party pokemon + // this for loop goes through each of the party pokemon const newPokemon = globalScene.getPlayerParty()[p]; // this next bit checks to see if the the selected item from the original transfer pokemon exists on the new pokemon `p` // this returns `undefined` if the new pokemon doesn't have the item at all, otherwise it returns the `pokemonHeldItemModifier` for that item - const matchingModifier = globalScene.findModifier( - m => - m.is("PokemonHeldItemModifier") && - m.pokemonId === newPokemon.id && - m.matchType(this.getTransferrableItemsFromPokemon(pokemon)[this.transferOptionCursor]), - ) as PokemonHeldItemModifier; + const matchingModifiers: (PokemonHeldItemModifier | undefined)[] = []; + if (this.transferOptionCursor === allCursorIndex) { + // if "All" is selected, check all items + for (const item of allItems) { + matchingModifiers.push( + globalScene.findModifier( + m => m.is("PokemonHeldItemModifier") && m.pokemonId === newPokemon.id && m.matchType(item), + ) as PokemonHeldItemModifier | undefined, + ); + } + } else { + // otherwise only check the selected item + matchingModifiers.push( + globalScene.findModifier( + m => + m.is("PokemonHeldItemModifier") && + m.pokemonId === newPokemon.id && + m.matchType(allItems[this.transferOptionCursor]), + ) as PokemonHeldItemModifier | undefined, + ); + } + const hasMatchingModifier = matchingModifiers.some(m => m !== undefined); // checks if any items match const partySlot = this.partySlots.filter(m => m.getPokemon() === newPokemon)[0]; // this gets pokemon [p] for us if (p !== this.transferCursor) { // this skips adding the able/not able labels on the pokemon doing the transfer - if (matchingModifier) { + if (hasMatchingModifier) { // if matchingModifier exists then the item exists on the new pokemon - if (matchingModifier.getMaxStackCount() === matchingModifier.stackCount) { - // checks to see if the stack of items is at max stack; if so, set the description label to "Not able" - ableToTransferText = i18next.t("partyUiHandler:notAble"); - } else { - // if the pokemon isn't at max stack, make the label "Able" - ableToTransferText = i18next.t("partyUiHandler:able"); + ableToTransferText = i18next.t("partyUiHandler:notAble"); // start with not able + /** + * The amount of items that can be transferred in the `All` option + */ + let ableAmount = 0; + for (const modifier of matchingModifiers) { + if (!modifier || modifier.getCountUnderMax() > 0) { + // if the modifier doesn't exist, or the stack count isn't at max, then we can transfer at least 1 stack + ableToTransferText = i18next.t("partyUiHandler:able"); + ableAmount++; + } } + // only show the amount if an item can be transferred and there are multiple items + ableToTransferText += ableAmount && matchingModifiers.length > 1 ? ` (${ableAmount})` : ""; } else { - // if matchingModifier doesn't exist, that means the pokemon doesn't have any of the item, and we need to show "Able" + // if no item matches, that means the pokemon doesn't have any of the item, and we need to show "Able" ableToTransferText = i18next.t("partyUiHandler:able"); + // only show the amount if there are multiple items + ableToTransferText += matchingModifiers.length > 1 ? ` (${matchingModifiers.length})` : ""; } } else { // this else relates to the transfer pokemon. We set the text to be blank so there's no "Able"/"Not able" text @@ -1645,6 +1673,8 @@ export class PartyUiHandler extends MessageUiHandler { .find(plm => plm[1] === move); } else if (option === PartyOption.ALL) { optionName = i18next.t("partyUiHandler:all"); + // add the number of items to the `all` option + optionName += ` (${this.getTransferrableItemsFromPokemon(pokemon).length})`; } else { const itemModifiers = this.getItemModifiers(pokemon); const itemModifier = itemModifiers[option]; From fce317a87a9eb48185437a4e086d47227dd5f342 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Fri, 5 Sep 2025 18:21:28 +0200 Subject: [PATCH 27/39] [Documentation][Move] Add edge case to helping hand (#6340) --- src/data/moves/move.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 36cef4d5e4e..1bb9a3f6e92 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -9430,7 +9430,9 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.HELPING_HAND) .ignoresSubstitute() .target(MoveTarget.NEAR_ALLY) - .condition(failIfSingleBattle), + .condition(failIfSingleBattle) + // should stack multiplicatively if used multiple times in 1 turn + .edgeCase(), new StatusMove(MoveId.TRICK, PokemonType.PSYCHIC, 100, 10, -1, 0, 3) .unimplemented(), new StatusMove(MoveId.ROLE_PLAY, PokemonType.PSYCHIC, -1, 10, -1, 0, 3) From d5e6670456acf3af98fac5bf7a20dc6cb3854c98 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 5 Sep 2025 12:28:35 -0400 Subject: [PATCH 28/39] [Refactor] Remove `null` from `PhaseManager.currentPhase` signature https://github.com/pagefaultgames/pokerogue/pull/6243 * Added `toBeAtPhase` + removed `null` from phase manager current phase signature * Removed bangs from various calls to phase manager * Update phase-manager.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * ran biome * Fix missing bang * Simplify TSDoc --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 6 +-- src/data/arena-tag.ts | 2 +- src/data/battler-tags.ts | 29 ++++++------ src/field/pokemon.ts | 4 +- src/phase-manager.ts | 27 +++++++---- src/ui/challenges-select-ui-handler.ts | 4 +- src/ui/egg-hatch-scene-handler.ts | 2 +- src/ui/egg-summary-ui-handler.ts | 2 +- src/ui/menu-ui-handler.ts | 2 +- src/ui/party-ui-handler.ts | 4 +- src/ui/pokedex-page-ui-handler.ts | 2 +- src/ui/starter-select-ui-handler.ts | 4 +- test/@types/vitest.d.ts | 10 ++++- test/abilities/disguise.test.ts | 2 +- test/battle/special-battle.test.ts | 18 ++++---- test/matchers.setup.ts | 2 + test/moves/transform-imposter.test.ts | 4 +- .../a-trainers-test-encounter.test.ts | 7 ++- .../absolute-avarice-encounter.test.ts | 5 +-- .../berries-abound-encounter.test.ts | 12 ++--- .../bug-type-superfan-encounter.test.ts | 36 +++++++-------- .../clowning-around-encounter.test.ts | 10 +---- .../dancing-lessons-encounter.test.ts | 8 ++-- .../encounters/delibirdy-encounter.test.ts | 6 +-- .../department-store-sale-encounter.test.ts | 9 ++-- .../fiery-fallout-encounter.test.ts | 9 ++-- .../fight-or-flight-encounter.test.ts | 11 +++-- .../fun-and-games-encounter.test.ts | 25 +++++------ .../global-trade-system-encounter.test.ts | 3 +- .../encounters/lost-at-sea-encounter.test.ts | 4 +- .../mysterious-challengers-encounter.test.ts | 15 +++---- .../encounters/part-timer-encounter.test.ts | 2 +- .../encounters/safari-zone.test.ts | 2 +- .../teleporting-hijinks-encounter.test.ts | 12 +++-- .../the-expert-breeder-encounter.test.ts | 20 ++++----- .../the-pokemon-salesman-encounter.test.ts | 2 +- .../the-strong-stuff-encounter.test.ts | 6 +-- .../the-winstrate-challenge-encounter.test.ts | 8 ++-- .../trash-to-treasure-encounter.test.ts | 10 ++--- .../uncommon-breed-encounter.test.ts | 9 ++-- .../encounters/weird-dream-encounter.test.ts | 12 +++-- .../mystery-encounter.test.ts | 2 +- test/phases/mystery-encounter-phase.test.ts | 4 +- test/test-utils/game-manager.ts | 8 ++-- test/test-utils/matchers/to-be-at-phase.ts | 45 +++++++++++++++++++ test/test-utils/phase-interceptor.ts | 2 +- 46 files changed, 229 insertions(+), 199 deletions(-) create mode 100644 test/test-utils/matchers/to-be-at-phase.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 8bf9ec88fed..9bb76b6fd23 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1561,9 +1561,9 @@ export class BattleScene extends SceneBase { return 0; } - const isEggPhase: boolean = ["EggLapsePhase", "EggHatchPhase"].includes( - this.phaseManager.getCurrentPhase()?.phaseName ?? "", - ); + const isEggPhase = + this.phaseManager.getCurrentPhase().is("EggLapsePhase") || + this.phaseManager.getCurrentPhase().is("EggHatchPhase"); if ( // Give trainers with specialty types an appropriately-typed form for Wormadam, Rotom, Arceus, Oricorio, Silvally, or Paldean Tauros. diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index cd02455af0f..1952db7867b 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -471,7 +471,7 @@ const QuickGuardConditionFunc: ProtectConditionFunc = (_arena, moveId) => { const move = allMoves[moveId]; const effectPhase = globalScene.phaseManager.getCurrentPhase(); - if (effectPhase?.is("MoveEffectPhase")) { + if (effectPhase.is("MoveEffectPhase")) { const attacker = effectPhase.getUserPokemon(); if (attacker) { return move.getPriority(attacker) > 0; diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 3dbbf747c5c..24e1e6f12cd 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -228,26 +228,27 @@ interface GenericSerializableBattlerTag extends Serial * Descendants can override {@linkcode isMoveRestricted} to restrict moves that * match a condition. A restricted move gets cancelled before it is used. * Players and enemies should not be allowed to select restricted moves. + * @todo Require descendant subclasses to inherit a `PRE_MOVE` lapse type */ export abstract class MoveRestrictionBattlerTag extends SerializableBattlerTag { public declare readonly tagType: MoveRestrictionBattlerTagType; override lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - if (lapseType === BattlerTagLapseType.PRE_MOVE) { - // Cancel the affected pokemon's selected move - const phase = globalScene.phaseManager.getCurrentPhase() as MovePhase; - const move = phase.move; - - if (this.isMoveRestricted(move.moveId, pokemon)) { - if (this.interruptedText(pokemon, move.moveId)) { - globalScene.phaseManager.queueMessage(this.interruptedText(pokemon, move.moveId)); - } - phase.cancel(); - } - - return true; + if (lapseType !== BattlerTagLapseType.PRE_MOVE) { + return super.lapse(pokemon, lapseType); } - return super.lapse(pokemon, lapseType); + // Cancel the affected pokemon's selected move + const phase = globalScene.phaseManager.getCurrentPhase() as MovePhase; + const move = phase.move; + + if (this.isMoveRestricted(move.moveId, pokemon)) { + if (this.interruptedText(pokemon, move.moveId)) { + globalScene.phaseManager.queueMessage(this.interruptedText(pokemon, move.moveId)); + } + phase.cancel(); + } + + return true; } /** diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 6d441ef991c..7cd0b9fecf8 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1252,7 +1252,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { } // During the Pokemon's MoveEffect phase, the offset is removed to put the Pokemon "in focus" const currentPhase = globalScene.phaseManager.getCurrentPhase(); - return !(currentPhase?.is("MoveEffectPhase") && currentPhase.getPokemon() === this); + return !(currentPhase.is("MoveEffectPhase") && currentPhase.getPokemon() === this); } /** If this Pokemon has a Substitute on the field, removes its sprite from the field. */ @@ -4969,7 +4969,7 @@ export abstract class Pokemon extends Phaser.GameObjects.Container { */ if (effect === StatusEffect.SLEEP || effect === StatusEffect.FREEZE) { const currentPhase = globalScene.phaseManager.getCurrentPhase(); - if (currentPhase?.is("MoveEffectPhase") && currentPhase.getUserPokemon() === this) { + if (currentPhase.is("MoveEffectPhase") && currentPhase.getUserPokemon() === this) { this.turnData.hitCount = 1; this.turnData.hitsLeft = 1; } diff --git a/src/phase-manager.ts b/src/phase-manager.ts index 8a31689f7b2..281ac8bd671 100644 --- a/src/phase-manager.ts +++ b/src/phase-manager.ts @@ -236,7 +236,7 @@ export class PhaseManager { /** Parallel array to {@linkcode dynamicPhaseQueues} - matches phase types to their queues */ private dynamicPhaseTypes: Constructor[]; - private currentPhase: Phase | null = null; + private currentPhase: Phase; private standbyPhase: Phase | null = null; constructor() { @@ -260,7 +260,9 @@ export class PhaseManager { } /* Phase Functions */ - getCurrentPhase(): Phase | null { + + /** @returns The currently running {@linkcode Phase}. */ + getCurrentPhase(): Phase { return this.currentPhase; } @@ -370,20 +372,28 @@ export class PhaseManager { unactivatedConditionalPhases.push([condition, phase]); } } + this.conditionalQueue = unactivatedConditionalPhases; + // If no phases are left, unshift phases to start a new turn. if (!this.phaseQueue.length) { this.populatePhaseQueue(); // Clear the conditionalQueue if there are no phases left in the phaseQueue this.conditionalQueue = []; } - this.currentPhase = this.phaseQueue.shift() ?? null; + // Bang is justified as `populatePhaseQueue` ensures we always have _something_ in the queue at all times + this.currentPhase = this.phaseQueue.shift()!; - if (this.currentPhase) { - console.log(`%cStart Phase ${this.currentPhase.constructor.name}`, "color:green;"); - this.currentPhase.start(); - } + this.startCurrentPhase(); + } + + /** + * Helper method to start and log the current phase. + */ + private startCurrentPhase(): void { + console.log(`%cStart Phase ${this.currentPhase.phaseName}`, "color:green;"); + this.currentPhase.start(); } overridePhase(phase: Phase): boolean { @@ -393,8 +403,7 @@ export class PhaseManager { this.standbyPhase = this.currentPhase; this.currentPhase = phase; - console.log(`%cStart Phase ${phase.constructor.name}`, "color:green;"); - phase.start(); + this.startCurrentPhase(); return true; } diff --git a/src/ui/challenges-select-ui-handler.ts b/src/ui/challenges-select-ui-handler.ts index b37ddcc6a5f..68559b92439 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -383,14 +383,14 @@ export class GameChallengesUiHandler extends UiHandler { this.updateChallengeArrows(this.startCursor.visible); } else { globalScene.phaseManager.toTitleScreen(); - globalScene.phaseManager.getCurrentPhase()?.end(); + globalScene.phaseManager.getCurrentPhase().end(); } success = true; } else if (button === Button.SUBMIT || button === Button.ACTION) { if (this.hasSelectedChallenge) { if (this.startCursor.visible) { globalScene.phaseManager.unshiftNew("SelectStarterPhase"); - globalScene.phaseManager.getCurrentPhase()?.end(); + globalScene.phaseManager.getCurrentPhase().end(); } else { this.startCursor.setVisible(true); this.cursorObj?.setVisible(false); diff --git a/src/ui/egg-hatch-scene-handler.ts b/src/ui/egg-hatch-scene-handler.ts index 6536ef2af80..1733b64144b 100644 --- a/src/ui/egg-hatch-scene-handler.ts +++ b/src/ui/egg-hatch-scene-handler.ts @@ -45,7 +45,7 @@ export class EggHatchSceneHandler extends UiHandler { processInput(button: Button): boolean { if (button === Button.ACTION || button === Button.CANCEL) { const phase = globalScene.phaseManager.getCurrentPhase(); - if (phase?.is("EggHatchPhase") && phase.trySkip()) { + if (phase.is("EggHatchPhase") && phase.trySkip()) { return true; } } diff --git a/src/ui/egg-summary-ui-handler.ts b/src/ui/egg-summary-ui-handler.ts index c66075dd910..db357b849c3 100644 --- a/src/ui/egg-summary-ui-handler.ts +++ b/src/ui/egg-summary-ui-handler.ts @@ -222,7 +222,7 @@ export class EggSummaryUiHandler extends MessageUiHandler { if (button === Button.CANCEL) { if (!this.blockExit) { const phase = globalScene.phaseManager.getCurrentPhase(); - if (phase?.is("EggSummaryPhase")) { + if (phase.is("EggSummaryPhase")) { phase.end(); } success = true; diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index bed7e573161..66465f76445 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -126,7 +126,7 @@ export class MenuUiHandler extends MessageUiHandler { const ui = this.getUi(); this.excludedMenus = () => [ { - condition: !!globalScene.phaseManager.getCurrentPhase()?.is("SelectModifierPhase"), + condition: globalScene.phaseManager.getCurrentPhase().is("SelectModifierPhase"), options: [MenuOptions.EGG_GACHA], }, { condition: bypassLogin, options: [MenuOptions.LOG_OUT] }, diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index eb9dddf600c..b77710d8140 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -862,7 +862,7 @@ export class PartyUiHandler extends MessageUiHandler { // TODO: This risks hitting the other options (.MOVE_i and ALL) so does it? Do we need an extra check? if ( option >= PartyOption.FORM_CHANGE_ITEM && - globalScene.phaseManager.getCurrentPhase()?.is("SelectModifierPhase") && + globalScene.phaseManager.getCurrentPhase().is("SelectModifierPhase") && this.partyUiMode === PartyUiMode.CHECK ) { const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); @@ -1556,7 +1556,7 @@ export class PartyUiHandler extends MessageUiHandler { break; case PartyUiMode.CHECK: this.addCommonOptions(pokemon); - if (globalScene.phaseManager.getCurrentPhase()?.is("SelectModifierPhase")) { + if (globalScene.phaseManager.getCurrentPhase().is("SelectModifierPhase")) { const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); for (let i = 0; i < formChangeItemModifiers.length; i++) { this.options.push(PartyOption.FORM_CHANGE_ITEM + i); diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 64b0e9c456e..672968bd953 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -710,7 +710,7 @@ export class PokedexPageUiHandler extends MessageUiHandler { show(args: any[]): boolean { // Allow the use of candies if we are in one of the whitelisted phases this.canUseCandies = ["TitlePhase", "SelectStarterPhase", "CommandPhase"].includes( - globalScene.phaseManager.getCurrentPhase()?.phaseName ?? "", + globalScene.phaseManager.getCurrentPhase().phaseName, ); if (args.length >= 1 && args[0] === "refresh") { diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index b27cc0af709..049f33af5d7 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -340,7 +340,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { private teraLabel: Phaser.GameObjects.Text; private goFilterLabel: Phaser.GameObjects.Text; /** Group holding the UI elements appearing in the instructionsContainer */ - /* TODO: Uncomment this once our testing infra supports mocks of `Phaser.GameObject.Group` + /* TODO: Uncomment this once our testing infra supports mocks of `Phaser.GameObject.Group` private instructionElemGroup: Phaser.GameObjects.Group; */ @@ -4419,7 +4419,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { globalScene.phaseManager.pushNew("EncounterPhase"); } this.clearText(); - globalScene.phaseManager.getCurrentPhase()?.end(); + globalScene.phaseManager.getCurrentPhase().end(); }, cancel, null, diff --git a/test/@types/vitest.d.ts b/test/@types/vitest.d.ts index 2ed0512538a..aa7666c0880 100644 --- a/test/@types/vitest.d.ts +++ b/test/@types/vitest.d.ts @@ -1,8 +1,9 @@ import "vitest"; -import type { TerrainType } from "#app/data/terrain"; +import type { Phase } from "#app/phase"; import type Overrides from "#app/overrides"; import type { ArenaTag } from "#data/arena-tag"; +import type { TerrainType } from "#data/terrain"; import type { PositionalTag } from "#data/positional-tags/positional-tag"; import type { AbilityId } from "#enums/ability-id"; import type { ArenaTagSide } from "#enums/arena-tag-side"; @@ -22,6 +23,7 @@ import type { toHaveEffectiveStatOptions } from "#test/test-utils/matchers/to-ha import type { toHavePositionalTagOptions } from "#test/test-utils/matchers/to-have-positional-tag"; import type { expectedStatusType } from "#test/test-utils/matchers/to-have-status-effect"; import type { toHaveTypesOptions } from "#test/test-utils/matchers/to-have-types"; +import type { PhaseString } from "#types/phase-types"; import type { TurnMove } from "#types/turn-move"; import type { AtLeastOne } from "#types/type-helpers"; import type { toDmgValue } from "utils/common"; @@ -40,6 +42,12 @@ declare module "vitest" { */ toEqualArrayUnsorted(expected: T[]): void; + /** + * Check if the currently-running {@linkcode Phase} is of the given type. + * @param expectedPhase - The expected {@linkcode PhaseString} + */ + toBeAtPhase(expectedPhase: PhaseString): void; + // #region Arena Matchers /** diff --git a/test/abilities/disguise.test.ts b/test/abilities/disguise.test.ts index f36501cb647..8a7e9a05ddb 100644 --- a/test/abilities/disguise.test.ts +++ b/test/abilities/disguise.test.ts @@ -196,7 +196,7 @@ describe("Abilities - Disguise", () => { game.move.select(MoveId.SHADOW_SNEAK); await game.toNextWave(); - expect(game.scene.phaseManager.getCurrentPhase()?.constructor.name).toBe("CommandPhase"); + expect(game).toBeAtPhase("CommandPhase"); expect(game.scene.currentBattle.waveIndex).toBe(2); }); diff --git a/test/battle/special-battle.test.ts b/test/battle/special-battle.test.ts index d22931bfea5..4fb859a2a40 100644 --- a/test/battle/special-battle.test.ts +++ b/test/battle/special-battle.test.ts @@ -36,62 +36,62 @@ describe("Test Battle Phase", () => { game.override.battleStyle("single").startingWave(10); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + expect(game).toBeAtPhase("CommandPhase"); }); it("startBattle 2vs2 boss", async () => { game.override.battleStyle("double").startingWave(10); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + expect(game).toBeAtPhase("CommandPhase"); }); it("startBattle 2vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + expect(game).toBeAtPhase("CommandPhase"); }); it("startBattle 2vs1 trainer", async () => { game.override.battleStyle("single").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + expect(game).toBeAtPhase("CommandPhase"); }); it("startBattle 2vs1 rival", async () => { game.override.battleStyle("single").startingWave(8); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + expect(game).toBeAtPhase("CommandPhase"); }); it("startBattle 2vs2 rival", async () => { game.override.battleStyle("double").startingWave(8); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + expect(game).toBeAtPhase("CommandPhase"); }); it("startBattle 1vs1 trainer", async () => { game.override.battleStyle("single").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + expect(game).toBeAtPhase("CommandPhase"); }); it("startBattle 2vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + expect(game).toBeAtPhase("CommandPhase"); }); it("startBattle 4vs2 trainer", async () => { game.override.battleStyle("double").startingWave(5); await game.classicMode.startBattle([SpeciesId.BLASTOISE, SpeciesId.CHARIZARD, SpeciesId.DARKRAI, SpeciesId.GABITE]); expect(game.scene.ui?.getMode()).toBe(UiMode.COMMAND); - expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + expect(game).toBeAtPhase("CommandPhase"); }); }); diff --git a/test/matchers.setup.ts b/test/matchers.setup.ts index f76a9423ab3..fe2135f4db4 100644 --- a/test/matchers.setup.ts +++ b/test/matchers.setup.ts @@ -1,3 +1,4 @@ +import { toBeAtPhase } from "#test/test-utils/matchers/to-be-at-phase"; import { toEqualArrayUnsorted } from "#test/test-utils/matchers/to-equal-array-unsorted"; import { toHaveAbilityApplied } from "#test/test-utils/matchers/to-have-ability-applied"; import { toHaveArenaTag } from "#test/test-utils/matchers/to-have-arena-tag"; @@ -24,6 +25,7 @@ import { expect } from "vitest"; expect.extend({ toEqualArrayUnsorted, + toBeAtPhase, toHaveWeather, toHaveTerrain, toHaveArenaTag, diff --git a/test/moves/transform-imposter.test.ts b/test/moves/transform-imposter.test.ts index b1631130154..1b38a4bce9c 100644 --- a/test/moves/transform-imposter.test.ts +++ b/test/moves/transform-imposter.test.ts @@ -212,7 +212,7 @@ describe("Transforming Effects", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextWave(); - expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + expect(game).toBeAtPhase("CommandPhase"); expect(game.scene.currentBattle.waveIndex).toBe(2); await game.reload.reloadSession(); @@ -242,7 +242,7 @@ describe("Transforming Effects", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextWave(); - expect(game.scene.phaseManager.getCurrentPhase()?.phaseName).toBe("CommandPhase"); + expect(game).toBeAtPhase("CommandPhase"); expect(game.scene.currentBattle.waveIndex).toBe(2); expect(player.getSpeciesForm().speciesId).toBe(enemy.getSpeciesForm().speciesId); diff --git a/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts index 93cf4537c53..b4bd74d44d6 100644 --- a/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts +++ b/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts @@ -9,7 +9,6 @@ import { ATrainersTestEncounter } from "#mystery-encounters/a-trainers-test-enco import * as EncounterPhaseUtils from "#mystery-encounters/encounter-phase-utils"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; import { HUMAN_TRANSITABLE_BIOMES } from "#mystery-encounters/mystery-encounters"; -import { CommandPhase } from "#phases/command-phase"; import { PartyHealPhase } from "#phases/party-heal-phase"; import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { @@ -106,7 +105,7 @@ describe("A Trainer's Test - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(1); expect(scene.currentBattle.trainer).toBeDefined(); expect( @@ -131,7 +130,7 @@ describe("A Trainer's Test - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); const eggsAfter = scene.gameData.eggs; expect(eggsAfter).toBeDefined(); @@ -179,7 +178,7 @@ describe("A Trainer's Test - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); const eggsAfter = scene.gameData.eggs; expect(eggsAfter).toBeDefined(); diff --git a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts index 562482dd520..d269e40db0f 100644 --- a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts +++ b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts @@ -10,7 +10,6 @@ import { BerryModifier, PokemonHeldItemModifier } from "#modifiers/modifier"; import { AbsoluteAvariceEncounter } from "#mystery-encounters/absolute-avarice-encounter"; import * as EncounterPhaseUtils from "#mystery-encounters/encounter-phase-utils"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; -import { CommandPhase } from "#phases/command-phase"; import { MovePhase } from "#phases/move-phase"; import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { @@ -132,7 +131,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(SpeciesId.GREEDENT); const moveset = enemyField[0].moveset.map(m => m.moveId); @@ -148,7 +147,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); for (const partyPokemon of scene.getPlayerParty()) { const pokemonId = partyPokemon.id; diff --git a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts index 12c5a6515bc..5e9dffa1332 100644 --- a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts +++ b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts @@ -11,8 +11,6 @@ import { BerriesAboundEncounter } from "#mystery-encounters/berries-abound-encou import * as EncounterDialogueUtils from "#mystery-encounters/encounter-dialogue-utils"; import * as EncounterPhaseUtils from "#mystery-encounters/encounter-phase-utils"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; -import { CommandPhase } from "#phases/command-phase"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase, @@ -114,7 +112,7 @@ describe("Berries Abound - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); }); @@ -135,7 +133,7 @@ describe("Berries Abound - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); const berriesAfter = scene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[]; const berriesAfterCount = berriesAfter.reduce((a, b) => a + b.stackCount, 0); @@ -186,7 +184,7 @@ describe("Berries Abound - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); @@ -210,7 +208,7 @@ describe("Berries Abound - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); @@ -230,8 +228,6 @@ describe("Berries Abound - Mystery Encounter", () => { }); await runMysteryEncounterToEnd(game, 2); - await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index 13d3c030c63..723516174fb 100644 --- a/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -12,9 +12,7 @@ import { PokemonMove } from "#moves/pokemon-move"; import { BugTypeSuperfanEncounter } from "#mystery-encounters/bug-type-superfan-encounter"; import * as encounterPhaseUtils from "#mystery-encounters/encounter-phase-utils"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; -import { CommandPhase } from "#phases/command-phase"; -import { MysteryEncounterPhase, MysteryEncounterRewardsPhase } from "#phases/mystery-encounter-phases"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; +import { MysteryEncounterPhase } from "#phases/mystery-encounter-phases"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, @@ -231,7 +229,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyParty.length).toBe(2); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -244,7 +242,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyParty.length).toBe(3); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -258,7 +256,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyParty.length).toBe(4); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -273,7 +271,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -289,7 +287,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -307,7 +305,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -325,7 +323,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -343,7 +341,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyParty = scene.getEnemyParty(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyParty.length).toBe(5); expect(scene.currentBattle.trainer?.config.trainerType).toBe(TrainerType.BUG_TYPE_SUPERFAN); expect(enemyParty[0].species.speciesId).toBe(SpeciesId.BEEDRILL); @@ -365,7 +363,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game, false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterRewardsPhase.name); + expect(game).toBeAtPhase("MysteryEncounterRewardsPhase"); game.phaseInterceptor["prompts"] = []; // Clear out prompt handlers game.onNextPrompt("MysteryEncounterRewardsPhase", UiMode.OPTION_SELECT, () => { game.endPhase(); @@ -406,7 +404,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 2); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -416,7 +414,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty); await runMysteryEncounterToEnd(game, 2); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -435,7 +433,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { ]); await runMysteryEncounterToEnd(game, 2); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -457,7 +455,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { ]); await runMysteryEncounterToEnd(game, 2); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -481,7 +479,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { ]); await runMysteryEncounterToEnd(game, 2); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -542,7 +540,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 3); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -557,7 +555,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index f02a5c623af..e7ec6e43392 100644 --- a/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -22,10 +22,7 @@ import { ClowningAroundEncounter } from "#mystery-encounters/clowning-around-enc import * as EncounterPhaseUtils from "#mystery-encounters/encounter-phase-utils"; import { generateModifierType } from "#mystery-encounters/encounter-phase-utils"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; -import { CommandPhase } from "#phases/command-phase"; import { MovePhase } from "#phases/move-phase"; -import { PostMysteryEncounterPhase } from "#phases/mystery-encounter-phases"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase, @@ -171,7 +168,7 @@ describe("Clowning Around - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(2); expect(enemyField[0].species.speciesId).toBe(SpeciesId.MR_MIME); expect(enemyField[0].moveset).toEqual([ @@ -199,9 +196,6 @@ describe("Clowning Around - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.CLOWNING_AROUND, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); - await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); - await game.phaseInterceptor.to("SelectModifierPhase"); const abilityToTrain = scene.currentBattle.mysteryEncounter?.misc.ability; game.onNextPrompt("PostMysteryEncounterPhase", UiMode.MESSAGE, () => { @@ -215,7 +209,7 @@ describe("Clowning Around - Mystery Encounter", () => { vi.spyOn(partyUiHandler, "show"); game.endPhase(); await game.phaseInterceptor.to("PostMysteryEncounterPhase"); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(PostMysteryEncounterPhase.name); + expect(game).toBeAtPhase("PostMysteryEncounterPhase"); // Wait for Yes/No confirmation to appear await vi.waitFor(() => expect(optionSelectUiHandler.show).toHaveBeenCalled()); diff --git a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index de47b074089..81a2fc7463c 100644 --- a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -9,11 +9,9 @@ import { UiMode } from "#enums/ui-mode"; import { DancingLessonsEncounter } from "#mystery-encounters/dancing-lessons-encounter"; import * as EncounterPhaseUtils from "#mystery-encounters/encounter-phase-utils"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; -import { CommandPhase } from "#phases/command-phase"; import { LearnMovePhase } from "#phases/learn-move-phase"; import { MovePhase } from "#phases/move-phase"; import { MysteryEncounterPhase } from "#phases/mystery-encounter-phases"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, @@ -105,7 +103,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(SpeciesId.ORICORIO); expect(enemyField[0].summonData.statStages).toEqual([1, 1, 1, 1, 0, 0, 0]); @@ -126,7 +124,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -226,7 +224,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 3); const partyCountAfter = scene.getPlayerParty().length; - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts index 7398b639f1c..fe17f091d0e 100644 --- a/test/mystery-encounter/encounters/delibirdy-encounter.test.ts +++ b/test/mystery-encounter/encounters/delibirdy-encounter.test.ts @@ -161,7 +161,7 @@ describe("Delibird-y - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 1); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -316,7 +316,7 @@ describe("Delibird-y - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 2); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -449,7 +449,7 @@ describe("Delibird-y - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 3); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts index 3c19d458049..812d6d661ef 100644 --- a/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts +++ b/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts @@ -9,7 +9,6 @@ import { DepartmentStoreSaleEncounter } from "#mystery-encounters/department-sto import * as EncounterPhaseUtils from "#mystery-encounters/encounter-phase-utils"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; import { CIVILIZATION_ENCOUNTER_BIOMES } from "#mystery-encounters/mystery-encounters"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; import { GameManager } from "#test/test-utils/game-manager"; import { ModifierSelectUiHandler } from "#ui/modifier-select-ui-handler"; @@ -93,7 +92,7 @@ describe("Department Store Sale - Mystery Encounter", () => { it("should have shop with only TMs", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DEPARTMENT_STORE_SALE, defaultParty); await runMysteryEncounterToEnd(game, 1); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -130,7 +129,7 @@ describe("Department Store Sale - Mystery Encounter", () => { it("should have shop with only Vitamins", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DEPARTMENT_STORE_SALE, defaultParty); await runMysteryEncounterToEnd(game, 2); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -170,7 +169,7 @@ describe("Department Store Sale - Mystery Encounter", () => { it("should have shop with only X Items", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DEPARTMENT_STORE_SALE, defaultParty); await runMysteryEncounterToEnd(game, 3); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -210,7 +209,7 @@ describe("Department Store Sale - Mystery Encounter", () => { it("should have shop with only Pokeballs", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DEPARTMENT_STORE_SALE, defaultParty); await runMysteryEncounterToEnd(game, 4); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts index 54f790ca207..91a32c025d5 100644 --- a/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts +++ b/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts @@ -16,7 +16,6 @@ import { AttackTypeBoosterModifier, PokemonHeldItemModifier } from "#modifiers/m import * as EncounterPhaseUtils from "#mystery-encounters/encounter-phase-utils"; import { FieryFalloutEncounter } from "#mystery-encounters/fiery-fallout-encounter"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; -import { CommandPhase } from "#phases/command-phase"; import { MovePhase } from "#phases/move-phase"; import { MysteryEncounterPhase } from "#phases/mystery-encounter-phases"; import { SelectModifierPhase } from "#phases/select-modifier-phase"; @@ -161,7 +160,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(2); expect(enemyField[0].species.speciesId).toBe(SpeciesId.VOLCARONA); expect(enemyField[1].species.speciesId).toBe(SpeciesId.VOLCARONA); @@ -177,7 +176,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); const leadPokemonId = scene.getPlayerParty()?.[0].id; const leadPokemonItems = scene.findModifiers( @@ -266,7 +265,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, defaultParty); await runMysteryEncounterToEnd(game, 3); await game.phaseInterceptor.to(SelectModifierPhase, false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); const leadPokemonItems = scene.getPlayerParty()[0].getHeldItems() as PokemonHeldItemModifier[]; const item = leadPokemonItems.find(i => i instanceof AttackTypeBoosterModifier); @@ -292,7 +291,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 3); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(continueEncounterSpy).not.toHaveBeenCalled(); }); }); diff --git a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts index 8650b42ce4d..81dbad16e01 100644 --- a/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts +++ b/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts @@ -9,9 +9,7 @@ import { UiMode } from "#enums/ui-mode"; import * as EncounterPhaseUtils from "#mystery-encounters/encounter-phase-utils"; import { FightOrFlightEncounter } from "#mystery-encounters/fight-or-flight-encounter"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; -import { CommandPhase } from "#phases/command-phase"; import { MysteryEncounterPhase } from "#phases/mystery-encounter-phases"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, @@ -109,7 +107,7 @@ describe("Fight or Flight - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); }); @@ -122,8 +120,9 @@ describe("Fight or Flight - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); + expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find( @@ -165,7 +164,7 @@ describe("Fight or Flight - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 2); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -182,7 +181,7 @@ describe("Fight or Flight - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2); await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts index 7bfaaac1141..bc1a2893627 100644 --- a/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts +++ b/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts @@ -14,9 +14,8 @@ import { FunAndGamesEncounter } from "#mystery-encounters/fun-and-games-encounte import { MysteryEncounter } from "#mystery-encounters/mystery-encounter"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; import { HUMAN_TRANSITABLE_BIOMES } from "#mystery-encounters/mystery-encounters"; -import { CommandPhase } from "#phases/command-phase"; +import type { CommandPhase } from "#phases/command-phase"; import { MysteryEncounterPhase } from "#phases/mystery-encounter-phases"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, @@ -131,7 +130,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 1); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -143,7 +142,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(game.field.getEnemyPokemon().species.speciesId).toBe(SpeciesId.WOBBUFFET); expect(game.field.getEnemyPokemon().ivs).toEqual([0, 0, 0, 0, 0, 0]); expect(game.field.getEnemyPokemon().nature).toBe(Nature.MILD); @@ -165,7 +164,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.phaseInterceptor.to("SelectModifierPhase", false); // Rewards - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); }); it("should have no items in rewards if Wubboffet doesn't take enough damage", async () => { @@ -173,7 +172,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); @@ -184,7 +183,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.phaseInterceptor.to("SelectModifierPhase", false); // Rewards - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -200,7 +199,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); @@ -213,7 +212,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.phaseInterceptor.to("SelectModifierPhase", false); // Rewards - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -230,7 +229,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); @@ -243,7 +242,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.phaseInterceptor.to("SelectModifierPhase", false); // Rewards - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -260,7 +259,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); game.onNextPrompt("MessagePhase", UiMode.MESSAGE, () => { game.endPhase(); }); @@ -273,7 +272,7 @@ describe("Fun And Games! - Mystery Encounter", () => { await game.phaseInterceptor.to("SelectModifierPhase", false); // Rewards - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts index bb56505ac48..c8e934168bc 100644 --- a/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts +++ b/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts @@ -13,7 +13,6 @@ import { generateModifierType } from "#mystery-encounters/encounter-phase-utils" import { GlobalTradeSystemEncounter } from "#mystery-encounters/global-trade-system-encounter"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; import { CIVILIZATION_ENCOUNTER_BIOMES } from "#mystery-encounters/mystery-encounters"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; import { GameManager } from "#test/test-utils/game-manager"; import { ModifierSelectUiHandler } from "#ui/modifier-select-ui-handler"; @@ -226,7 +225,7 @@ describe("Global Trade System - Mystery Encounter", () => { await scene.updateModifiers(true); await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts index 73134381553..ed0ca02720c 100644 --- a/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts +++ b/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts @@ -147,7 +147,7 @@ describe("Lost at Sea - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 1); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -212,7 +212,7 @@ describe("Lost at Sea - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 2); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts index 0c4e3044bbd..b937fdcfcf5 100644 --- a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts +++ b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts @@ -12,8 +12,6 @@ import { MysteriousChallengersEncounter } from "#mystery-encounters/mysterious-c import { MysteryEncounter } from "#mystery-encounters/mystery-encounter"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; import { HUMAN_TRANSITABLE_BIOMES } from "#mystery-encounters/mystery-encounters"; -import { CommandPhase } from "#phases/command-phase"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase, @@ -152,7 +150,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); }); @@ -162,7 +160,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -196,7 +194,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, defaultParty); await runMysteryEncounterToEnd(game, 2, undefined, true); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); }); @@ -206,7 +204,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -253,7 +251,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, defaultParty); await runMysteryEncounterToEnd(game, 3, undefined, true); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); }); @@ -262,8 +260,7 @@ describe("Mysterious Challengers - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, defaultParty); await runMysteryEncounterToEnd(game, 3, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); - await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/part-timer-encounter.test.ts b/test/mystery-encounter/encounters/part-timer-encounter.test.ts index 36a92b2b6bf..1826c75381a 100644 --- a/test/mystery-encounter/encounters/part-timer-encounter.test.ts +++ b/test/mystery-encounter/encounters/part-timer-encounter.test.ts @@ -246,7 +246,7 @@ describe("Part-Timer - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 3); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/safari-zone.test.ts b/test/mystery-encounter/encounters/safari-zone.test.ts index ec43dcfb69b..dd41d08df38 100644 --- a/test/mystery-encounter/encounters/safari-zone.test.ts +++ b/test/mystery-encounter/encounters/safari-zone.test.ts @@ -119,7 +119,7 @@ describe("Safari Zone - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 1); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts index 4d006abc636..c88d77a8cf5 100644 --- a/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts +++ b/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts @@ -8,9 +8,7 @@ import { SpeciesId } from "#enums/species-id"; import { UiMode } from "#enums/ui-mode"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; import { TeleportingHijinksEncounter } from "#mystery-encounters/teleporting-hijinks-encounter"; -import { CommandPhase } from "#phases/command-phase"; import { MysteryEncounterPhase } from "#phases/mystery-encounter-phases"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, @@ -157,7 +155,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 1); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -167,7 +165,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); }); it("should transport to a new area", async () => { @@ -229,7 +227,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 2); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -239,7 +237,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [SpeciesId.METAGROSS]); await runMysteryEncounterToEnd(game, 2, undefined, true); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); }); it("should transport to a new area", async () => { @@ -300,7 +298,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 3, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts b/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts index ade98bfa99f..ae4eb0647ce 100644 --- a/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts @@ -12,8 +12,6 @@ import { MysteryEncounter } from "#mystery-encounters/mystery-encounter"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; import { HUMAN_TRANSITABLE_BIOMES } from "#mystery-encounters/mystery-encounters"; import { TheExpertPokemonBreederEncounter } from "#mystery-encounters/the-expert-pokemon-breeder-encounter"; -import { CommandPhase } from "#phases/command-phase"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase, @@ -157,7 +155,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { expect(successfullyLoaded).toBe(true); // Check usual battle stuff - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); expect(scene.getPlayerParty().length).toBe(1); @@ -175,8 +173,8 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); - await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); + await game.phaseInterceptor.to("SelectModifierPhase"); const eggsAfter = scene.gameData.eggs; const commonEggs = scene.currentBattle.mysteryEncounter!.misc.pokemon1CommonEggs; @@ -242,7 +240,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { expect(successfullyLoaded).toBe(true); // Check usual battle stuff - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); expect(scene.getPlayerParty().length).toBe(1); @@ -260,8 +258,8 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); - await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); + await game.phaseInterceptor.to("SelectModifierPhase"); const eggsAfter = scene.gameData.eggs; const commonEggs = scene.currentBattle.mysteryEncounter!.misc.pokemon2CommonEggs; @@ -324,7 +322,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { expect(successfullyLoaded).toBe(true); // Check usual battle stuff - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); expect(scene.getPlayerParty().length).toBe(1); @@ -342,8 +340,8 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 3, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); - await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); + await game.phaseInterceptor.to("SelectModifierPhase"); const eggsAfter = scene.gameData.eggs; const commonEggs = scene.currentBattle.mysteryEncounter!.misc.pokemon3CommonEggs; diff --git a/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts index 3880c07c312..4011a850a08 100644 --- a/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts @@ -182,7 +182,7 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 1); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index 3592e2dc774..06c4c3c1cee 100644 --- a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -17,9 +17,7 @@ import { PokemonMove } from "#moves/pokemon-move"; import * as EncounterPhaseUtils from "#mystery-encounters/encounter-phase-utils"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; import { TheStrongStuffEncounter } from "#mystery-encounters/the-strong-stuff-encounter"; -import { CommandPhase } from "#phases/command-phase"; import { MovePhase } from "#phases/move-phase"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase, @@ -192,7 +190,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(SpeciesId.SHUCKLE); expect(enemyField[0].summonData.statStages).toEqual([0, 1, 0, 1, 0, 0, 0]); @@ -230,7 +228,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts index cf0ff7a94bd..814e2ee07fb 100644 --- a/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts @@ -15,9 +15,7 @@ import { MysteryEncounter } from "#mystery-encounters/mystery-encounter"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; import { HUMAN_TRANSITABLE_BIOMES } from "#mystery-encounters/mystery-encounters"; import { TheWinstrateChallengeEncounter } from "#mystery-encounters/the-winstrate-challenge-encounter"; -import { CommandPhase } from "#phases/command-phase"; import { PartyHealPhase } from "#phases/party-heal-phase"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { VictoryPhase } from "#phases/victory-phase"; import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; import { GameManager } from "#test/test-utils/game-manager"; @@ -262,7 +260,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.THE_WINSTRATE_CHALLENGE, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.trainer!.config.trainerType).toBe(TrainerType.VICTOR); expect(scene.currentBattle.mysteryEncounter?.enemyPartyConfigs.length).toBe(4); @@ -295,7 +293,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { // Should have Macho Brace in the rewards await skipBattleToNextBattle(game, true); await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -337,7 +335,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { it("should have a Rarer Candy in the rewards", async () => { await game.runToMysteryEncounter(MysteryEncounterType.THE_WINSTRATE_CHALLENGE, defaultParty); await runMysteryEncounterToEnd(game, 2); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 7cc9a69b32d..fe0139be3a7 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -20,9 +20,7 @@ import { } from "#mystery-encounters/encounter-phase-utils"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; import { TrashToTreasureEncounter } from "#mystery-encounters/trash-to-treasure-encounter"; -import { CommandPhase } from "#phases/command-phase"; import { MovePhase } from "#phases/move-phase"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase, @@ -172,8 +170,8 @@ describe("Trash to Treasure - Mystery Encounter", () => { it("should give 1 Leftovers, 1 Shell Bell, and Black Sludge", async () => { await game.runToMysteryEncounter(MysteryEncounterType.TRASH_TO_TREASURE, defaultParty); await runMysteryEncounterToEnd(game, 1); - await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); + await game.phaseInterceptor.to("SelectModifierPhase"); const leftovers = scene.findModifier(m => m instanceof TurnHealModifier) as TurnHealModifier; expect(leftovers).toBeDefined(); @@ -221,7 +219,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(SpeciesId.GARBODOR); expect(enemyField[0].moveset).toEqual([ @@ -243,7 +241,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts index 5aadaf5c29a..e5b086ceba9 100644 --- a/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts +++ b/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts @@ -15,7 +15,6 @@ import * as EncounterPhaseUtils from "#mystery-encounters/encounter-phase-utils" import { generateModifierType } from "#mystery-encounters/encounter-phase-utils"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; import { UncommonBreedEncounter } from "#mystery-encounters/uncommon-breed-encounter"; -import { CommandPhase } from "#phases/command-phase"; import { MovePhase } from "#phases/move-phase"; import { MysteryEncounterPhase } from "#phases/mystery-encounter-phases"; import { StatStageChangePhase } from "#phases/stat-stage-change-phase"; @@ -120,7 +119,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); @@ -147,7 +146,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); @@ -199,7 +198,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 2); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); @@ -259,7 +258,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { await runSelectMysteryEncounterOption(game, 3); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); expect(scene.ui.playError).not.toHaveBeenCalled(); // No error sfx, option is disabled expect(mysteryEncounterPhase.handleOptionSelect).not.toHaveBeenCalled(); expect(mysteryEncounterPhase.continueEncounter).not.toHaveBeenCalled(); diff --git a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index e2ec7ae514a..9f03b113d27 100644 --- a/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -10,8 +10,6 @@ import * as EncounterPhaseUtils from "#mystery-encounters/encounter-phase-utils" import * as EncounterTransformationSequence from "#mystery-encounters/encounter-transformation-sequence"; import * as MysteryEncounters from "#mystery-encounters/mystery-encounters"; import { WeirdDreamEncounter } from "#mystery-encounters/weird-dream-encounter"; -import { CommandPhase } from "#phases/command-phase"; -import { SelectModifierPhase } from "#phases/select-modifier-phase"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase, @@ -116,8 +114,8 @@ describe("Weird Dream - Mystery Encounter", () => { const bstsPrior = pokemonPrior.map(species => species.getSpeciesForm().getBaseStatTotal()); await runMysteryEncounterToEnd(game, 1); - await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); + await game.phaseInterceptor.to("SelectModifierPhase"); const pokemonAfter = scene.getPlayerParty(); const bstsAfter = pokemonAfter.map(pokemon => pokemon.getSpeciesForm().getBaseStatTotal()); @@ -140,7 +138,7 @@ describe("Weird Dream - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.WEIRD_DREAM, defaultParty); await runMysteryEncounterToEnd(game, 1); await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); @@ -187,7 +185,7 @@ describe("Weird Dream - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(game).toBeAtPhase("CommandPhase"); expect(enemyField.length).toBe(1); expect(scene.getEnemyParty().length).toBe(scene.getPlayerParty().length); }); @@ -197,7 +195,7 @@ describe("Weird Dream - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); await game.phaseInterceptor.to("SelectModifierPhase", false); - expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + expect(game).toBeAtPhase("SelectModifierPhase"); await game.phaseInterceptor.to("SelectModifierPhase"); expect(scene.ui.getMode()).to.equal(UiMode.MODIFIER_SELECT); diff --git a/test/mystery-encounter/mystery-encounter.test.ts b/test/mystery-encounter/mystery-encounter.test.ts index ec27f7c6a48..d44e3dd2905 100644 --- a/test/mystery-encounter/mystery-encounter.test.ts +++ b/test/mystery-encounter/mystery-encounter.test.ts @@ -34,7 +34,7 @@ describe("Mystery Encounters", () => { ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); - expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); }); it("Encounters should not run on X1 waves", async () => { diff --git a/test/phases/mystery-encounter-phase.test.ts b/test/phases/mystery-encounter-phase.test.ts index a3dc779b02c..30ab977dbc6 100644 --- a/test/phases/mystery-encounter-phase.test.ts +++ b/test/phases/mystery-encounter-phase.test.ts @@ -3,7 +3,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; import { UiMode } from "#enums/ui-mode"; -import { MysteryEncounterOptionSelectedPhase, MysteryEncounterPhase } from "#phases/mystery-encounter-phases"; +import { MysteryEncounterOptionSelectedPhase } from "#phases/mystery-encounter-phases"; import { GameManager } from "#test/test-utils/game-manager"; import type { MessageUiHandler } from "#ui/message-ui-handler"; import type { MysteryEncounterUiHandler } from "#ui/mystery-encounter-ui-handler"; @@ -38,7 +38,7 @@ describe("Mystery Encounter Phases", () => { ]); await game.phaseInterceptor.to("MysteryEncounterPhase", false); - expect(game.scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); + expect(game).toBeAtPhase("MysteryEncounterPhase"); }); it("Runs MysteryEncounterPhase", async () => { diff --git a/test/test-utils/game-manager.ts b/test/test-utils/game-manager.ts index 57badd866b1..5f56832a6d2 100644 --- a/test/test-utils/game-manager.ts +++ b/test/test-utils/game-manager.ts @@ -44,6 +44,7 @@ import type { InputsHandler } from "#test/test-utils/inputs-handler"; import { MockFetch } from "#test/test-utils/mocks/mock-fetch"; import { PhaseInterceptor } from "#test/test-utils/phase-interceptor"; import { TextInterceptor } from "#test/test-utils/text-interceptor"; +import type { PhaseClass, PhaseString } from "#types/phase-types"; import type { BallUiHandler } from "#ui/ball-ui-handler"; import type { BattleMessageUiHandler } from "#ui/battle-message-ui-handler"; import type { CommandUiHandler } from "#ui/command-ui-handler"; @@ -160,7 +161,7 @@ export class GameManager { * End the currently running phase immediately. */ endPhase() { - this.scene.phaseManager.getCurrentPhase()?.end(); + this.scene.phaseManager.getCurrentPhase().end(); } /** @@ -412,10 +413,11 @@ export class GameManager { * Checks if the current phase matches the target phase. * @param phaseTarget - The target phase. * @returns Whether the current phase matches the target phase + * @todo Remove `phaseClass` from signature */ - isCurrentPhase(phaseTarget) { + isCurrentPhase(phaseTarget: PhaseClass | PhaseString) { const targetName = typeof phaseTarget === "string" ? phaseTarget : phaseTarget.name; - return this.scene.phaseManager.getCurrentPhase()?.constructor.name === targetName; + return this.scene.phaseManager.getCurrentPhase().phaseName === targetName; } /** diff --git a/test/test-utils/matchers/to-be-at-phase.ts b/test/test-utils/matchers/to-be-at-phase.ts new file mode 100644 index 00000000000..7ff76fa0365 --- /dev/null +++ b/test/test-utils/matchers/to-be-at-phase.ts @@ -0,0 +1,45 @@ +/** biome-ignore-start lint/correctness/noUnusedImports: TSDoc imports */ +import type { Phase } from "#app/phase"; +import type { GameManager } from "#test/test-utils/game-manager"; +// biome-ignore-end lint/correctness/noUnusedImports: TSDoc + +import { isGameManagerInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { PhaseString } from "#types/phase-types"; +import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; + +/** + * Matcher that checks if the current {@linkcode Phase} is of the given type. + * @param received - The object to check. Should be the current {@linkcode GameManager} + * @param expectedPhase - The expected {@linkcode PhaseString} + * @returns The result of the matching + */ +export function toBeAtPhase(this: MatcherState, received: unknown, expectedPhase: PhaseString): SyncExpectationResult { + if (!isGameManagerInstance(received)) { + return { + pass: this.isNot, + message: () => `Expected to receive a GameManager, but got ${receivedStr(received)}!`, + }; + } + + if (!received.scene?.phaseManager) { + return { + pass: this.isNot, + message: () => `Expected GameManager.${received.scene ? "scene.phaseManager" : "scene"} to be defined!`, + }; + } + + const currPhase = received.scene.phaseManager.getCurrentPhase(); + const pass = currPhase.is(expectedPhase); + + const actual = currPhase.phaseName; + + return { + pass, + message: () => + pass + ? `Expected the current phase to NOT be ${expectedPhase}, but it was!` + : `Expected the current phase to be ${expectedPhase}, but got ${actual} instead!`, + expected: expectedPhase, + actual, + }; +} diff --git a/test/test-utils/phase-interceptor.ts b/test/test-utils/phase-interceptor.ts index 996f00806c6..cc8d9b8e32a 100644 --- a/test/test-utils/phase-interceptor.ts +++ b/test/test-utils/phase-interceptor.ts @@ -384,7 +384,7 @@ export class PhaseInterceptor { const actionForNextPrompt = this.prompts[0]; const expireFn = actionForNextPrompt.expireFn?.(); const currentMode = this.scene.ui.getMode(); - const currentPhase = this.scene.phaseManager.getCurrentPhase()?.constructor.name; + const currentPhase = this.scene.phaseManager.getCurrentPhase().phaseName; const currentHandler = this.scene.ui.getHandler(); if (expireFn) { this.prompts.shift(); From 850fa6f6ded9662a5fcc4abd59f7199c171bd3d2 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 5 Sep 2025 14:34:22 -0400 Subject: [PATCH 29/39] [Dev] Added Typedoc plugins + README badges (#6400) * Add copyright in footer * Customized typedoc configuration + added coverage SVG * Finally figured out how to slap the SVG onto the docs' readme per branch * Fixed up config, made final tweaks to SVG length and renamed script * Added missing closing bracket to type config declaration * Fixed title + added GitHub navigation link * Fixed name typo * Update README.md * Moved badges on same line --- .github/workflows/github-pages.yml | 24 ++++----- README.md | 7 ++- global.d.ts | 11 ++++ package.json | 5 +- pnpm-lock.yaml | 38 +++++++++++++ typedoc-plugins/typedoc-plugin-rename-svg.js | 34 ++++++++++++ typedoc.config.js | 56 ++++++++++++++++++++ typedoc.json | 7 --- 8 files changed, 161 insertions(+), 21 deletions(-) create mode 100644 typedoc-plugins/typedoc-plugin-rename-svg.js create mode 100644 typedoc.config.js delete mode 100644 typedoc.json diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index 46957c02e56..07a20594996 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -23,7 +23,9 @@ jobs: timeout-minutes: 10 runs-on: ubuntu-latest env: - api-dir: ./ + docs-dir: ./pokerogue_docs + # Only push docs when running on pushes to main/beta + DRY_RUN: ${{github.event_name == 'push' && (github.ref_name == 'beta' || github.ref_name == 'main')}} strategy: fail-fast: false @@ -58,19 +60,18 @@ jobs: ref: gh-pages - name: Install Node.js dependencies - working-directory: ${{env.api-dir}} - run: | - cd pokerogue_docs - pnpm i + working-directory: ${{env.docs-dir}} + run: pnpm i - name: Generate Typedoc docs - working-directory: ${{env.api-dir}} - run: | - cd pokerogue_docs - pnpm exec typedoc --out /tmp/docs --githubPages false --entryPoints ./src/ + working-directory: ${{env.docs-dir}} + env: + REF_NAME: ${{github.ref_name}} + DRY_RUN: ${{env.DRY_RUN}} + run: pnpm typedoc - name: Commit & Push docs - if: github.event_name == 'push' && (github.ref_name == 'beta' || github.ref_name == 'main') + if: ${{!env.DRY_RUN}} run: | cd pokerogue_gh git config user.email "github-actions[bot]@users.noreply.github.com" @@ -78,6 +79,5 @@ jobs: mkdir -p $GITHUB_REF_NAME rm -rf $GITHUB_REF_NAME/* cp -r /tmp/docs/. $GITHUB_REF_NAME - git add $GITHUB_REF_NAME - git commit --allow-empty -m "[skip ci] Deploy docs" + git commit --allow-empty -am "[skip ci] Deploy docs" git push \ No newline at end of file diff --git a/README.md b/README.md index 1bb8c7772f3..cf70b5d9335 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ PokéRogue +![Discord Static Badge](https://img.shields.io/badge/Community_Discord-blurple?style=flat&logo=discord&logoSize=auto&labelColor=white&color=5865F2&link=https://discord.gg/pokerogue) +[![Docs Coverage Static Badge](https://pagefaultgames.github.io/pokerogue/beta/coverage.svg)](https://pagefaultgames.github.io/pokerogue/beta) +[![Testing Badge](https://github.com/pagefaultgames/pokerogue/actions/workflows/tests.yml/badge.svg)](https://github.com/pagefaultgames/pokerogue/actions/workflows/tests.yml) +[![License: GNU AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) + PokéRogue is a browser based Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, fighting trainers, bosses, and more! # Contributing @@ -7,7 +12,7 @@ PokéRogue is a browser based Pokémon fangame heavily inspired by the roguelite See [CONTRIBUTING.md](./CONTRIBUTING.md), this includes instructions on how to set up the game locally. # 📝 Credits -> + > If this project contains assets you have produced and you do not see your name, **please** reach out, either [here on GitHub](https://github.com/pagefaultgames/pokerogue/issues/new) or via [Discord](https://discord.gg/pokerogue). Thank you to all the wonderful people that have contributed to the PokéRogue project! You can find the credits [here](./CREDITS.md). diff --git a/global.d.ts b/global.d.ts index 8b79d966e3c..92a883f40c9 100644 --- a/global.d.ts +++ b/global.d.ts @@ -18,3 +18,14 @@ declare global { call(this: T, thisArg: ThisParameterType, ...argArray: Parameters): ReturnType; } } + +// Global augments for `typedoc` to prevent TS from erroring when editing the config JS file +declare module "typedoc" { + export interface TypeDocOptionMap { + coverageLabel: string; + coverageColor: string; + coverageOutputPath: string; + coverageOutputType: "svg" | "json" | "all"; + coverageSvgWidth: number; + } +} diff --git a/package.json b/package.json index 38386c3d964..0620cf6a88c 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "typecheck": "tsc --noEmit", "biome": "biome check --write --changed --no-errors-on-unmatched --diagnostic-level=error", "biome-ci": "biome ci --diagnostic-level=error --reporter=github --no-errors-on-unmatched", - "docs": "typedoc", + "typedoc": "typedoc", "depcruise": "depcruise src test", "postinstall": "lefthook install; git submodule update --init --recursive", "update-version:patch": "pnpm version patch --force --no-git-tag-version", @@ -42,6 +42,9 @@ "msw": "^2.10.4", "phaser3spectorjs": "^0.0.8", "typedoc": "^0.28.8", + "typedoc-github-theme": "^0.3.1", + "typedoc-plugin-coverage": "^4.0.1", + "typedoc-plugin-mdn-links": "^5.0.9", "typescript": "^5.8.3", "vite": "^7.0.6", "vite-tsconfig-paths": "^5.1.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c3b58a60f48..089689818ac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -87,6 +87,15 @@ importers: typedoc: specifier: ^0.28.8 version: 0.28.8(typescript@5.8.3) + typedoc-github-theme: + specifier: ^0.3.1 + version: 0.3.1(typedoc@0.28.8(typescript@5.8.3)) + typedoc-plugin-coverage: + specifier: ^4.0.1 + version: 4.0.1(typedoc@0.28.8(typescript@5.8.3)) + typedoc-plugin-mdn-links: + specifier: ^5.0.9 + version: 5.0.9(typedoc@0.28.8(typescript@5.8.3)) typescript: specifier: ^5.8.3 version: 5.8.3 @@ -1789,6 +1798,23 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + typedoc-github-theme@0.3.1: + resolution: {integrity: sha512-j6PmkAGmf/MGCzYjQcUH6jS9djPsNl/IoTXooxC+MoeMkBhbmPyKJlpR6Lw12BLoe2OYpYA2J1KMktUJXp/8Sw==} + engines: {node: '>=18.0.0'} + peerDependencies: + typedoc: ~0.28.0 + + typedoc-plugin-coverage@4.0.1: + resolution: {integrity: sha512-P1QBR5GJSfW3fDrpz4Vkd8z8lzWaBYjaHebRLk0u2Uga0oSFlPaqrCyiHzItBXxZX28aMlNlZwrUnsLgUgqA7g==} + engines: {node: '>= 18'} + peerDependencies: + typedoc: 0.28.x + + typedoc-plugin-mdn-links@5.0.9: + resolution: {integrity: sha512-kXssRKBhUd0JeHzFmxWVsGWVFR9WXafe70Y8Ed+MYH2Nu2647cqfGQN1OBKgvXpmAT8MTpACmUIQ7GnQnh1/iw==} + peerDependencies: + typedoc: 0.27.x || 0.28.x + typedoc@0.28.8: resolution: {integrity: sha512-16GfLopc8icHfdvqZDqdGBoS2AieIRP2rpf9mU+MgN+gGLyEQvAO0QgOa6NJ5QNmQi0LFrDY9in4F2fUNKgJKA==} engines: {node: '>= 18', pnpm: '>= 10'} @@ -3634,6 +3660,18 @@ snapshots: type-fest@4.41.0: {} + typedoc-github-theme@0.3.1(typedoc@0.28.8(typescript@5.8.3)): + dependencies: + typedoc: 0.28.8(typescript@5.8.3) + + typedoc-plugin-coverage@4.0.1(typedoc@0.28.8(typescript@5.8.3)): + dependencies: + typedoc: 0.28.8(typescript@5.8.3) + + typedoc-plugin-mdn-links@5.0.9(typedoc@0.28.8(typescript@5.8.3)): + dependencies: + typedoc: 0.28.8(typescript@5.8.3) + typedoc@0.28.8(typescript@5.8.3): dependencies: '@gerrit0/mini-shiki': 3.8.1 diff --git a/typedoc-plugins/typedoc-plugin-rename-svg.js b/typedoc-plugins/typedoc-plugin-rename-svg.js new file mode 100644 index 00000000000..5fda4ee3c6d --- /dev/null +++ b/typedoc-plugins/typedoc-plugin-rename-svg.js @@ -0,0 +1,34 @@ +// @ts-check + +import { PageKind, Renderer } from "typedoc"; + +/** + * @module + * Typedoc plugin to run post-processing on the `index.html` file and replace the coverage SVG + * for Beta with the newly generated file for the current branch. + */ + +/** + * @param {import('typedoc').Application} app + */ +export function load(app) { + // Don't do anything if no REF_NAME was specified (likely indicating a local docs run) + if (!process.env.REF_NAME) { + return; + } + app.renderer.on(Renderer.EVENT_END_PAGE, page => { + if (page.pageKind === PageKind.Index && page.contents) { + page.contents = page.contents + // Replace links to the beta documentation site with the current ref name + .replace( + /href="(.*pagefaultgames.github.io\/pokerogue\/).*?"/, // formatting + `href="$1/${process.env.REF_NAME}"`, + ) + // Replace the link to Beta's coverage SVG with the SVG file for the branch in question. + .replace( + /img src=".*?coverage.svg/, // formatting + `img src="coverage.svg"`, + ); + } + }); +} diff --git a/typedoc.config.js b/typedoc.config.js new file mode 100644 index 00000000000..72c58ee8350 --- /dev/null +++ b/typedoc.config.js @@ -0,0 +1,56 @@ +import { globSync } from "node:fs"; + +/** + * @type {Partial} + */ +const config = { + entryPoints: ["./src", "./test/test-utils"], + entryPointStrategy: "expand", + exclude: ["**/*+.test.ts", "src/polyfills.ts", "src/vite.env.d.ts"], + excludeReferences: true, // prevent documenting re-exports + requiredToBeDocumented: [ + "Enum", + "EnumMember", + "Variable", + "Function", + "Class", + "Interface", + "Property", + "Method", + "Accessor", + "TypeAlias", + ], + highlightLanguages: ["javascript", "json", "jsonc", "json5", "tsx", "typescript", "markdown"], + plugin: [ + "typedoc-github-theme", + "typedoc-plugin-coverage", + "typedoc-plugin-mdn-links", + ...globSync("./typedoc-plugins/**/*.js").map(plugin => "./" + plugin), + ], + // Avoid emitting docs for branches other than main/beta + emit: process.env.DRY_RUN ? "none" : "docs", + out: process.env.CI ? "/tmp/docs" : "./typedoc", + name: "PokéRogue", + readme: "./README.md", + coverageLabel: "Documented", + coverageSvgWidth: 120, // Increased from 104 baseline due to adding 2 extra letters + favicon: "./public/images/logo.png", + theme: "typedoc-github-theme", + customFooterHtml: "

Copyright Pagefault Games 2025

", + customFooterHtmlDisableWrapper: true, + navigationLinks: { + GitHub: "https://github.com/pagefaultgames/pokerogue", + }, +}; + +// If generating docs for main/beta, check the ref name and add an appropriate navigation header +if (!process.env.DRY_RUN && process.env.REF_NAME) { + const otherRefName = process.env.REF_NAME === "main" ? "beta" : "main"; + config.navigationLinks = { + ...config.navigationLinks, + // This will be "Switch to Beta" when on main, and vice versa + [`Switch to ${otherRefName.charAt(0).toUpperCase() + otherRefName.slice(1).toLowerCase()}`]: `https://pagefaultgames.github.io/pokerogue/${otherRefName}`, + }; +} + +export default config; diff --git a/typedoc.json b/typedoc.json deleted file mode 100644 index c34e6190c1a..00000000000 --- a/typedoc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "entryPoints": ["./src"], - "entryPointStrategy": "expand", - "exclude": ["**/*+.test.ts"], - "out": "typedoc", - "highlightLanguages": ["javascript", "json", "jsonc", "json5", "tsx", "typescript", "markdown"] -} From db8458fdb72d73538fd217b2229cc85f43a4dfc8 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Fri, 5 Sep 2025 19:23:32 -0700 Subject: [PATCH 30/39] [GitHub] Fix Typedoc workflow (#6490) * [GitHub] Fix Typedoc workflow * Remove `--allow-empty` --- .github/workflows/github-pages.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index 07a20594996..95b73782f8e 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -25,7 +25,7 @@ jobs: env: docs-dir: ./pokerogue_docs # Only push docs when running on pushes to main/beta - DRY_RUN: ${{github.event_name == 'push' && (github.ref_name == 'beta' || github.ref_name == 'main')}} + DRY_RUN: ${{github.event_name != 'push' || (github.ref_name != 'beta' && github.ref_name != 'main')}} strategy: fail-fast: false @@ -47,7 +47,7 @@ jobs: with: version: 10 - - name: Setup Node 22.14.1 + - name: Setup Node uses: actions/setup-node@v4 with: node-version-file: "pokerogue_docs/.nvmrc" @@ -79,5 +79,6 @@ jobs: mkdir -p $GITHUB_REF_NAME rm -rf $GITHUB_REF_NAME/* cp -r /tmp/docs/. $GITHUB_REF_NAME - git commit --allow-empty -am "[skip ci] Deploy docs" - git push \ No newline at end of file + git add $GITHUB_REF_NAME + git commit -m "[skip ci] Deploy docs" + git push From 02bfaf9ad3629d91298725efe9c4b7d66ec0fe7e Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 5 Sep 2025 22:42:44 -0400 Subject: [PATCH 31/39] [Test] Added/cleaned up tests for Pastel/Sweet Veil (#6374) * [Test] Added/cleaned up tests for Pastel/Sweet Veil * Fixed extra import + tests * Fixed type import * Update move.ts * reverted abstract constructor stuff --- test/abilities/pastel-veil.test.ts | 50 +++++-------- test/abilities/sweet-veil.test.ts | 109 +++++++++++++++++++++-------- 2 files changed, 96 insertions(+), 63 deletions(-) diff --git a/test/abilities/pastel-veil.test.ts b/test/abilities/pastel-veil.test.ts index c4b368c94d0..cc414fa6f87 100644 --- a/test/abilities/pastel-veil.test.ts +++ b/test/abilities/pastel-veil.test.ts @@ -3,7 +3,6 @@ import { BattlerIndex } from "#enums/battler-index"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import { StatusEffect } from "#enums/status-effect"; -import { TurnEndPhase } from "#phases/turn-end-phase"; import { GameManager } from "#test/test-utils/game-manager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,48 +23,35 @@ describe("Abilities - Pastel Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override - .battleStyle("double") - .moveset([MoveId.TOXIC_THREAD, MoveId.SPLASH]) - .enemyAbility(AbilityId.BALL_FETCH) - .enemySpecies(SpeciesId.SUNKERN) - .enemyMoveset(MoveId.SPLASH); + game.override.battleStyle("double").enemyAbility(AbilityId.BALL_FETCH).enemySpecies(SpeciesId.TOXAPEX); }); - it("prevents the user and its allies from being afflicted by poison", async () => { + it("should prevent the user and its allies from being poisoned", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.GALAR_PONYTA]); - const ponyta = game.scene.getPlayerField()[1]; - const magikarp = game.scene.getPlayerField()[0]; - ponyta.abilityIndex = 1; + const [magikarp, ponyta] = game.scene.getPlayerField(); + game.field.mockAbility(ponyta, AbilityId.PASTEL_VEIL); - expect(ponyta.hasAbility(AbilityId.PASTEL_VEIL)).toBe(true); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.forceEnemyMove(MoveId.TOXIC, BattlerIndex.PLAYER); + await game.move.forceEnemyMove(MoveId.TOXIC, BattlerIndex.PLAYER_2); + await game.toEndOfTurn(); - game.move.select(MoveId.SPLASH); - game.move.select(MoveId.TOXIC_THREAD, 1, BattlerIndex.PLAYER); - - await game.phaseInterceptor.to(TurnEndPhase); - - expect(magikarp.status?.effect).toBeUndefined(); + expect(magikarp).toHaveStatusEffect(StatusEffect.NONE); + expect(ponyta).toHaveStatusEffect(StatusEffect.NONE); }); - it("it heals the poisoned status condition of allies if user is sent out into battle", async () => { + it("should cure allies' poison if user is sent out into battle", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS, SpeciesId.GALAR_PONYTA]); - const ponyta = game.scene.getPlayerParty()[2]; - const magikarp = game.scene.getPlayerField()[0]; - ponyta.abilityIndex = 1; + const [magikarp, , ponyta] = game.scene.getPlayerParty(); + game.field.mockAbility(ponyta, AbilityId.PASTEL_VEIL); - expect(ponyta.hasAbility(AbilityId.PASTEL_VEIL)).toBe(true); + magikarp.doSetStatus(StatusEffect.POISON); - game.move.select(MoveId.SPLASH); - game.move.select(MoveId.TOXIC_THREAD, 1, BattlerIndex.PLAYER); - - await game.phaseInterceptor.to(TurnEndPhase); - expect(magikarp.status?.effect).toBe(StatusEffect.POISON); - - game.move.select(MoveId.SPLASH); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER); game.doSwitchPokemon(2); - await game.phaseInterceptor.to(TurnEndPhase); + await game.toEndOfTurn(); - expect(magikarp.status?.effect).toBeUndefined(); + expect(magikarp).toHaveStatusEffect(StatusEffect.NONE); }); }); diff --git a/test/abilities/sweet-veil.test.ts b/test/abilities/sweet-veil.test.ts index 12eeae9f9c5..d08c3eb04f8 100644 --- a/test/abilities/sweet-veil.test.ts +++ b/test/abilities/sweet-veil.test.ts @@ -2,8 +2,9 @@ import { AbilityId } from "#enums/ability-id"; import { BattlerIndex } from "#enums/battler-index"; import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; +import { MoveResult } from "#enums/move-result"; import { SpeciesId } from "#enums/species-id"; -import { TurnEndPhase } from "#phases/turn-end-phase"; +import { StatusEffect } from "#enums/status-effect"; import { GameManager } from "#test/test-utils/game-manager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -26,62 +27,108 @@ describe("Abilities - Sweet Veil", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") - .moveset([MoveId.SPLASH, MoveId.REST, MoveId.YAWN]) + .ability(AbilityId.BALL_FETCH) .enemySpecies(SpeciesId.MAGIKARP) .enemyAbility(AbilityId.BALL_FETCH) - .enemyMoveset(MoveId.POWDER); + .enemyMoveset(MoveId.SPLASH); }); - it("prevents the user and its allies from falling asleep", async () => { + function expectNoStatus() { + game.scene.getPlayerField().forEach(p => { + expect.soft(p).toHaveStatusEffect(StatusEffect.NONE); + }); + } + + it("should prevent the user and its allies from falling asleep", async () => { await game.classicMode.startBattle([SpeciesId.SWIRLIX, SpeciesId.MAGIKARP]); - game.move.select(MoveId.SPLASH); - game.move.select(MoveId.SPLASH, 1); + game.field.mockAbility(game.field.getPlayerPokemon(), AbilityId.SWEET_VEIL); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.forceEnemyMove(MoveId.SPORE, BattlerIndex.PLAYER); + await game.move.forceEnemyMove(MoveId.SPORE, BattlerIndex.PLAYER_2); + await game.toEndOfTurn(); - await game.phaseInterceptor.to(TurnEndPhase); - - expect(game.scene.getPlayerField().every(p => p.status?.effect)).toBe(false); + expectNoStatus(); }); - it("causes Rest to fail when used by the user or its allies", async () => { - game.override.enemyMoveset(MoveId.SPLASH); + it("should cause Rest to fail when used by the user or its allies", async () => { await game.classicMode.startBattle([SpeciesId.SWIRLIX, SpeciesId.MAGIKARP]); - game.move.select(MoveId.SPLASH); - game.move.select(MoveId.REST, 1); + const [swirlix, magikarp] = game.scene.getPlayerField(); + game.field.mockAbility(swirlix, AbilityId.SWEET_VEIL); + swirlix.hp = 1; + magikarp.hp = 1; - await game.phaseInterceptor.to(TurnEndPhase); + game.move.use(MoveId.REST, BattlerIndex.PLAYER); + game.move.use(MoveId.REST, BattlerIndex.PLAYER_2); + await game.toEndOfTurn(); - expect(game.scene.getPlayerField().every(p => p.status?.effect)).toBe(false); + expectNoStatus(); + expect(swirlix).toHaveUsedMove({ move: MoveId.REST, result: MoveResult.FAIL }); + expect(magikarp).toHaveUsedMove({ move: MoveId.REST, result: MoveResult.FAIL }); }); - it("causes Yawn to fail if used on the user or its allies", async () => { - game.override.enemyMoveset(MoveId.YAWN); + it("should cause Yawn to fail if used on the user or its allies", async () => { await game.classicMode.startBattle([SpeciesId.SWIRLIX, SpeciesId.MAGIKARP]); - game.move.select(MoveId.SPLASH); - game.move.select(MoveId.SPLASH, 1); + const [shuckle, swirlix] = game.scene.getPlayerField(); + game.field.mockAbility(swirlix, AbilityId.SWEET_VEIL); - await game.phaseInterceptor.to(TurnEndPhase); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.move.forceEnemyMove(MoveId.YAWN, BattlerIndex.PLAYER); + await game.move.forceEnemyMove(MoveId.YAWN, BattlerIndex.PLAYER_2); + await game.toEndOfTurn(); - expect(game.scene.getPlayerField().every(p => !!p.getTag(BattlerTagType.DROWSY))).toBe(false); + expect(shuckle).not.toHaveBattlerTag(BattlerTagType.DROWSY); + expect(swirlix).not.toHaveBattlerTag(BattlerTagType.DROWSY); + // TODO: This dooesn't work ATM + /* + const [karp1, karp2] = game.scene.getEnemyField(); + expect(karp1).toHaveUsedMove({move: MoveId.YAWN, result: MoveResult.FAIL}); + expect(karp2).toHaveUsedMove({move: MoveId.YAWN, result: MoveResult.FAIL}); + */ }); - it("prevents the user and its allies already drowsy due to Yawn from falling asleep.", async () => { - game.override.enemySpecies(SpeciesId.PIKACHU).enemyLevel(5).startingLevel(5).enemyMoveset(MoveId.SPLASH); + it("should NOT cure allies' sleep status if user is sent out into battle", async () => { + await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS, SpeciesId.SWIRLIX]); - await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SHUCKLE, SpeciesId.SWIRLIX]); + const [magikarp, , swirlix] = game.scene.getPlayerParty(); + game.field.mockAbility(swirlix, AbilityId.PASTEL_VEIL); - game.move.select(MoveId.SPLASH); - game.move.select(MoveId.YAWN, 1, BattlerIndex.PLAYER); + game.move.use(MoveId.SPLASH); + game.move.use(MoveId.SPORE, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); + await game.toNextTurn(); - await game.phaseInterceptor.to("BerryPhase"); + expect(magikarp).toHaveStatusEffect(StatusEffect.SLEEP); - expect(game.scene.getPlayerField().some(p => !!p.getTag(BattlerTagType.DROWSY))).toBe(true); - - game.move.select(MoveId.SPLASH); + game.move.use(MoveId.SPLASH); game.doSwitchPokemon(2); + await game.toEndOfTurn(); - expect(game.scene.getPlayerField().every(p => p.status?.effect)).toBe(false); + expect(magikarp).toHaveStatusEffect(StatusEffect.SLEEP); + }); + + it("should prevent an already-drowsy user or ally from falling asleep", async () => { + await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SWIRLIX]); + + // Add yawn before granting ability + const [shuckle, swirlix] = game.scene.getPlayerField(); + shuckle.addTag(BattlerTagType.DROWSY, 1); + swirlix.addTag(BattlerTagType.DROWSY, 1); + + game.field.mockAbility(shuckle, AbilityId.SWEET_VEIL); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.toNextTurn(); + + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.toNextTurn(); + + expect(shuckle).not.toHaveBattlerTag(BattlerTagType.DROWSY); + expect(swirlix).not.toHaveBattlerTag(BattlerTagType.DROWSY); + expectNoStatus(); }); }); From d630c106e0440d9eaa406a0989fe5b3a1577c7dc Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 5 Sep 2025 22:50:37 -0400 Subject: [PATCH 32/39] [Test] Improved typing on `BattlerTagData` and `ArenaTagData`; improved test matchers (#6338) * Improved typing on `BattlerTagData` and `ArenaTagData` * Added dragon cheer/focus energy tests * Cleaned up descs --- src/@types/arena-tags.ts | 27 +++-- src/@types/battler-tags.ts | 42 +++++--- src/@types/helpers/type-helpers.ts | 13 ++- src/data/arena-tag.ts | 4 +- src/data/battler-tags.ts | 4 +- src/data/moves/move.ts | 6 +- src/system/arena-data.ts | 6 +- test/@types/vitest.d.ts | 13 ++- test/moves/dragon-cheer.test.ts | 99 ++++++++++--------- test/moves/focus-energy.test.ts | 69 +++++++++++++ test/test-utils/matchers/to-have-arena-tag.ts | 20 +++- .../matchers/to-have-battler-tag.ts | 68 ++++++++++--- test/test-utils/string-utils.ts | 2 +- 13 files changed, 270 insertions(+), 103 deletions(-) create mode 100644 test/moves/focus-energy.test.ts diff --git a/src/@types/arena-tags.ts b/src/@types/arena-tags.ts index 4ac7abf6f3d..390d95a7daa 100644 --- a/src/@types/arena-tags.ts +++ b/src/@types/arena-tags.ts @@ -2,6 +2,7 @@ import type { ArenaTagTypeMap } from "#data/arena-tag"; import type { ArenaTagType } from "#enums/arena-tag-type"; // biome-ignore lint/correctness/noUnusedImports: TSDocs import type { SessionSaveData } from "#system/game-data"; +import type { ObjectValues } from "#types/type-helpers"; /** Subset of {@linkcode ArenaTagType}s that apply some negative effect to pokemon that switch in ({@link https://bulbapedia.bulbagarden.net/wiki/List_of_moves_that_cause_entry_hazards#List_of_traps | entry hazards} and Imprison. */ export type EntryHazardTagType = @@ -24,22 +25,32 @@ export type TurnProtectArenaTagType = /** Subset of {@linkcode ArenaTagType}s that create Trick Room-like effects which are removed upon overlap. */ export type RoomArenaTagType = ArenaTagType.TRICK_ROOM; -/** Subset of {@linkcode ArenaTagType}s that cannot persist across turns, and thus should not be serialized in {@linkcode SessionSaveData}. */ +/** Subset of {@linkcode ArenaTagType}s that are **not** able to persist across turns, and should therefore not be serialized in {@linkcode SessionSaveData}. */ export type NonSerializableArenaTagType = ArenaTagType.NONE | TurnProtectArenaTagType | ArenaTagType.ION_DELUGE; /** Subset of {@linkcode ArenaTagType}s that may persist across turns, and thus must be serialized in {@linkcode SessionSaveData}. */ export type SerializableArenaTagType = Exclude; /** - * Type-safe representation of an arbitrary, serialized Arena Tag + * Utility type containing all entries of {@linkcode ArenaTagTypeMap} corresponding to serializable tags. */ -export type ArenaTagTypeData = Parameters< - ArenaTagTypeMap[keyof { - [K in keyof ArenaTagTypeMap as K extends SerializableArenaTagType ? K : never]: ArenaTagTypeMap[K]; - }]["loadTag"] ->[0]; +type SerializableArenaTagTypeMap = Pick; -/** Dummy, typescript-only declaration to ensure that +/** + * Type mapping all `ArenaTag`s to type-safe representations of their serialized forms. + * @interface + */ +export type ArenaTagDataMap = { + [k in keyof SerializableArenaTagTypeMap]: Parameters[0]; +}; + +/** + * Type-safe representation of an arbitrary, serialized `ArenaTag`. + */ +export type ArenaTagData = ObjectValues; + +/** + * Dummy, typescript-only declaration to ensure that * {@linkcode ArenaTagTypeMap} has a map for all ArenaTagTypes. * * If an arena tag is missing from the map, typescript will throw an error on this statement. diff --git a/src/@types/battler-tags.ts b/src/@types/battler-tags.ts index 211eb25113d..8e34108958e 100644 --- a/src/@types/battler-tags.ts +++ b/src/@types/battler-tags.ts @@ -1,8 +1,11 @@ // biome-ignore-start lint/correctness/noUnusedImports: Used in a TSDoc comment import type { AbilityBattlerTag, BattlerTagTypeMap, SerializableBattlerTag, TypeBoostTag } from "#data/battler-tags"; import type { AbilityId } from "#enums/ability-id"; -// biome-ignore-end lint/correctness/noUnusedImports: end +import type { SessionSaveData } from "#system/game-data"; +// biome-ignore-end lint/correctness/noUnusedImports: Used in a TSDoc comment + import type { BattlerTagType } from "#enums/battler-tag-type"; +import type { InferKeys, ObjectValues } from "#types/type-helpers"; /** * Subset of {@linkcode BattlerTagType}s that restrict the use of moves. @@ -103,28 +106,35 @@ export type RemovedTypeTagType = BattlerTagType.DOUBLE_SHOCKED | BattlerTagType. export type HighestStatBoostTagType = | BattlerTagType.QUARK_DRIVE // formatting | BattlerTagType.PROTOSYNTHESIS; -/** - * Subset of {@linkcode BattlerTagType}s that are able to persist between turns and should therefore be serialized - */ -export type SerializableBattlerTagType = keyof { - [K in keyof BattlerTagTypeMap as BattlerTagTypeMap[K] extends SerializableBattlerTag - ? K - : never]: BattlerTagTypeMap[K]; -}; /** - * Subset of {@linkcode BattlerTagType}s that are not able to persist across waves and should therefore not be serialized + * Subset of {@linkcode BattlerTagType}s that are able to persist between turns, and should therefore be serialized. + */ +export type SerializableBattlerTagType = InferKeys; + +/** + * Subset of {@linkcode BattlerTagType}s that are **not** able to persist between turns, + * and should therefore not be serialized in {@linkcode SessionSaveData}. */ export type NonSerializableBattlerTagType = Exclude; /** - * Type-safe representation of an arbitrary, serialized Battler Tag + * Utility type containing all entries of {@linkcode BattlerTagTypeMap} corresponding to serializable tags. */ -export type BattlerTagTypeData = Parameters< - BattlerTagTypeMap[keyof { - [K in keyof BattlerTagTypeMap as K extends SerializableBattlerTagType ? K : never]: BattlerTagTypeMap[K]; - }]["loadTag"] ->[0]; +type SerializableBattlerTagTypeMap = Pick; + +/** + * Type mapping all `BattlerTag`s to type-safe representations of their serialized forms. + * @interface + */ +export type BattlerTagDataMap = { + [k in keyof SerializableBattlerTagTypeMap]: Parameters[0]; +}; + +/** + * Type-safe representation of an arbitrary, serialized `BattlerTag`. + */ +export type BattlerTagData = ObjectValues; /** * Dummy, typescript-only declaration to ensure that diff --git a/src/@types/helpers/type-helpers.ts b/src/@types/helpers/type-helpers.ts index 0be391aa3c4..048a86ab489 100644 --- a/src/@types/helpers/type-helpers.ts +++ b/src/@types/helpers/type-helpers.ts @@ -36,15 +36,18 @@ export type Mutable = { /** * Type helper to obtain the keys associated with a given value inside an object. + * Acts similar to {@linkcode Pick}, except checking the object's values instead of its keys. * @typeParam O - The type of the object - * @typeParam V - The type of one of O's values + * @typeParam V - The type of one of O's values. */ -export type InferKeys> = { - [K in keyof O]: O[K] extends V ? K : never; -}[keyof O]; +export type InferKeys = V extends ObjectValues + ? { + [K in keyof O]: O[K] extends V ? K : never; + }[keyof O] + : never; /** - * Utility type to obtain the values of a given object. \ + * Utility type to obtain a union of the values of a given object. \ * Functions similar to `keyof E`, except producing the values instead of the keys. * @remarks * This can be used to convert an `enum` interface produced by `typeof Enum` into the union type representing its members. diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 1952db7867b..70e8697179e 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -23,7 +23,7 @@ import type { Arena } from "#field/arena"; import type { Pokemon } from "#field/pokemon"; import type { ArenaScreenTagType, - ArenaTagTypeData, + ArenaTagData, EntryHazardTagType, RoomArenaTagType, SerializableArenaTagType, @@ -1663,7 +1663,7 @@ export function getArenaTag( * @param source - An arena tag * @returns The valid arena tag */ -export function loadArenaTag(source: ArenaTag | ArenaTagTypeData | { tagType: ArenaTagType.NONE }): ArenaTag { +export function loadArenaTag(source: ArenaTag | ArenaTagData | { tagType: ArenaTagType.NONE }): ArenaTag { if (source.tagType === ArenaTagType.NONE) { return new NoneTag(); } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 24e1e6f12cd..5484eba7271 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -34,7 +34,7 @@ import type { StatStageChangeCallback } from "#phases/stat-stage-change-phase"; import i18next from "#plugins/i18n"; import type { AbilityBattlerTagType, - BattlerTagTypeData, + BattlerTagData, ContactSetStatusProtectedTagType, ContactStatStageChangeProtectedTagType, CritStageBoostTagType, @@ -3843,7 +3843,7 @@ export function getBattlerTag( * @param source - An object containing the data necessary to reconstruct the BattlerTag. * @returns The valid battler tag */ -export function loadBattlerTag(source: BattlerTag | BattlerTagTypeData): BattlerTag { +export function loadBattlerTag(source: BattlerTag | BattlerTagData): BattlerTag { // TODO: Remove this bang by fixing the signature of `getBattlerTag` // to allow undefined sourceIds and sourceMoves (with appropriate fallback for tags that require it) const tag = getBattlerTag(source.tagType, source.turnCount, source.sourceMove!, source.sourceId!); diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 1bb9a3f6e92..266362a468b 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -8903,7 +8903,9 @@ export function initMoves() { .attr(AddArenaTagAttr, ArenaTagType.REFLECT, 5, true) .target(MoveTarget.USER_SIDE), new SelfStatusMove(MoveId.FOCUS_ENERGY, PokemonType.NORMAL, -1, 30, -1, 0, 1) - .attr(AddBattlerTagAttr, BattlerTagType.CRIT_BOOST, true, true), + .attr(AddBattlerTagAttr, BattlerTagType.CRIT_BOOST, true, true) + // TODO: Remove once dragon cheer & focus energy are merged into 1 tag + .condition((_user, target) => !target.getTag(BattlerTagType.DRAGON_CHEER)), new AttackMove(MoveId.BIDE, PokemonType.NORMAL, MoveCategory.PHYSICAL, -1, -1, 10, -1, 1, 1) .target(MoveTarget.USER) .unimplemented(), @@ -11601,6 +11603,8 @@ export function initMoves() { .attr(OpponentHighHpPowerAttr, 100), new StatusMove(MoveId.DRAGON_CHEER, PokemonType.DRAGON, -1, 15, -1, 0, 9) .attr(AddBattlerTagAttr, BattlerTagType.DRAGON_CHEER, false, true) + // TODO: Remove once dragon cheer & focus energy are merged into 1 tag + .condition((_user, target) => !target.getTag(BattlerTagType.CRIT_BOOST)) .target(MoveTarget.NEAR_ALLY), new AttackMove(MoveId.ALLURING_VOICE, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) .attr(AddBattlerTagIfBoostedAttr, BattlerTagType.CONFUSED) diff --git a/src/system/arena-data.ts b/src/system/arena-data.ts index b2a04f96a55..18620e15223 100644 --- a/src/system/arena-data.ts +++ b/src/system/arena-data.ts @@ -5,14 +5,14 @@ import { Terrain } from "#data/terrain"; import { Weather } from "#data/weather"; import type { BiomeId } from "#enums/biome-id"; import { Arena } from "#field/arena"; -import type { ArenaTagTypeData } from "#types/arena-tags"; +import type { ArenaTagData } from "#types/arena-tags"; import type { NonFunctionProperties } from "#types/type-helpers"; export interface SerializedArenaData { biome: BiomeId; weather: NonFunctionProperties | null; terrain: NonFunctionProperties | null; - tags?: ArenaTagTypeData[]; + tags?: ArenaTagData[]; positionalTags: SerializedPositionalTag[]; playerTerasUsed?: number; } @@ -31,7 +31,7 @@ export class ArenaData { // is not yet an instance of `ArenaTag` this.tags = source.tags - ?.map((t: ArenaTag | ArenaTagTypeData) => loadArenaTag(t)) + ?.map((t: ArenaTag | ArenaTagData) => loadArenaTag(t)) ?.filter((tag): tag is SerializableArenaTag => tag instanceof SerializableArenaTag) ?? []; this.playerTerasUsed = source.playerTerasUsed ?? 0; diff --git a/test/@types/vitest.d.ts b/test/@types/vitest.d.ts index aa7666c0880..f0bbdf37932 100644 --- a/test/@types/vitest.d.ts +++ b/test/@types/vitest.d.ts @@ -4,6 +4,7 @@ import type { Phase } from "#app/phase"; import type Overrides from "#app/overrides"; import type { ArenaTag } from "#data/arena-tag"; import type { TerrainType } from "#data/terrain"; +import type { BattlerTag } from "#data/battler-tags"; import type { PositionalTag } from "#data/positional-tags/positional-tag"; import type { AbilityId } from "#enums/ability-id"; import type { ArenaTagSide } from "#enums/arena-tag-side"; @@ -28,6 +29,7 @@ import type { TurnMove } from "#types/turn-move"; import type { AtLeastOne } from "#types/type-helpers"; import type { toDmgValue } from "utils/common"; import type { expect } from "vitest"; +import { toHaveBattlerTagOptions } from "#test/test-utils/matchers/to-have-battler-tag"; declare module "vitest" { interface Assertion { @@ -133,10 +135,15 @@ declare module "vitest" { toHaveStatStage(stat: BattleStat, expectedStage: number): void; /** - * Check whether a {@linkcode Pokemon} has a specific {@linkcode BattlerTagType}. - * @param expectedBattlerTagType - The expected {@linkcode BattlerTagType} + * Check whether a {@linkcode Pokemon} has the given {@linkcode BattlerTag}. + * @param expectedTag - A partially-filled {@linkcode BattlerTag} containing the desired properties */ - toHaveBattlerTag(expectedBattlerTagType: BattlerTagType): void; + toHaveBattlerTag(expectedTag: toHaveBattlerTagOptions): void; + /** + * Check whether a {@linkcode Pokemon} has the given {@linkcode BattlerTag}. + * @param expectedType - The expected {@linkcode BattlerTagType} + */ + toHaveBattlerTag(expectedType: BattlerTagType): void; /** * Check whether a {@linkcode Pokemon} has applied a specific {@linkcode AbilityId}. diff --git a/test/moves/dragon-cheer.test.ts b/test/moves/dragon-cheer.test.ts index 614dd9ab6ab..50880e067d9 100644 --- a/test/moves/dragon-cheer.test.ts +++ b/test/moves/dragon-cheer.test.ts @@ -1,15 +1,18 @@ import { AbilityId } from "#enums/ability-id"; import { BattlerIndex } from "#enums/battler-index"; +import { BattlerTagType } from "#enums/battler-tag-type"; import { MoveId } from "#enums/move-id"; +import { MoveResult } from "#enums/move-result"; import { PokemonType } from "#enums/pokemon-type"; import { SpeciesId } from "#enums/species-id"; import { GameManager } from "#test/test-utils/game-manager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -describe("Moves - Dragon Cheer", () => { +describe("Move - Dragon Cheer", () => { let phaserGame: Phaser.Game; let game: GameManager; + beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -24,75 +27,81 @@ describe("Moves - Dragon Cheer", () => { game = new GameManager(phaserGame); game.override .battleStyle("double") + .ability(AbilityId.BALL_FETCH) .enemyAbility(AbilityId.BALL_FETCH) .enemyMoveset(MoveId.SPLASH) - .enemyLevel(20) - .moveset([MoveId.DRAGON_CHEER, MoveId.TACKLE, MoveId.SPLASH]); + .enemyLevel(20); }); - it("increases the user's allies' critical hit ratio by one stage", async () => { + it("should increase non-Dragon type allies' crit ratios by 1 stage", async () => { await game.classicMode.startBattle([SpeciesId.DRAGONAIR, SpeciesId.MAGIKARP]); - const enemy = game.scene.getEnemyField()[0]; - + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getCritStage"); - game.move.select(MoveId.DRAGON_CHEER, 0); - game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); - + game.move.use(MoveId.DRAGON_CHEER, BattlerIndex.PLAYER); + game.move.use(MoveId.TACKLE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.toEndOfTurn(); - // After Tackle - await game.phaseInterceptor.to("TurnEndPhase"); + const [dragonair, magikarp] = game.scene.getPlayerField(); + expect(dragonair).not.toHaveBattlerTag(BattlerTagType.DRAGON_CHEER); + expect(magikarp).toHaveBattlerTag({ tagType: BattlerTagType.DRAGON_CHEER, critStages: 1 }); expect(enemy.getCritStage).toHaveReturnedWith(1); // getCritStage is called on defender }); - it("increases the user's Dragon-type allies' critical hit ratio by two stages", async () => { + it("should increase Dragon-type allies' crit ratios by 2 stages", async () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.DRAGONAIR]); - const enemy = game.scene.getEnemyField()[0]; - + const enemy = game.field.getEnemyPokemon(); vi.spyOn(enemy, "getCritStage"); - game.move.select(MoveId.DRAGON_CHEER, 0); - game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); - + game.move.use(MoveId.DRAGON_CHEER, BattlerIndex.PLAYER); + game.move.use(MoveId.TACKLE, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.toEndOfTurn(); - // After Tackle - await game.phaseInterceptor.to("TurnEndPhase"); + const [magikarp, dragonair] = game.scene.getPlayerField(); + expect(magikarp).not.toHaveBattlerTag(BattlerTagType.DRAGON_CHEER); + expect(dragonair).toHaveBattlerTag({ tagType: BattlerTagType.DRAGON_CHEER, critStages: 2 }); expect(enemy.getCritStage).toHaveReturnedWith(2); // getCritStage is called on defender }); - it("applies the effect based on the allies' type upon use of the move, and do not change if the allies' type changes later in battle", async () => { + it("should maintain crit boost amount even if user's type is changed", async () => { await game.classicMode.startBattle([SpeciesId.DRAGONAIR, SpeciesId.MAGIKARP]); - const magikarp = game.scene.getPlayerField()[1]; - const enemy = game.scene.getEnemyField()[0]; - - vi.spyOn(enemy, "getCritStage"); - - game.move.select(MoveId.DRAGON_CHEER, 0); - game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); - + // Use Reflect Type to become Dragon-type mid-turn + game.move.use(MoveId.DRAGON_CHEER, BattlerIndex.PLAYER); + game.move.use(MoveId.REFLECT_TYPE, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); - - // After Tackle - await game.phaseInterceptor.to("TurnEndPhase"); - expect(enemy.getCritStage).toHaveReturnedWith(1); // getCritStage is called on defender - - await game.toNextTurn(); - - // Change Magikarp's type to Dragon - vi.spyOn(magikarp, "getTypes").mockReturnValue([PokemonType.DRAGON]); - expect(magikarp.getTypes()).toEqual([PokemonType.DRAGON]); - - game.move.select(MoveId.SPLASH, 0); - game.move.select(MoveId.TACKLE, 1, BattlerIndex.ENEMY); - - await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); - await game.phaseInterceptor.to("MoveEndPhase"); - expect(enemy.getCritStage).toHaveReturnedWith(1); // getCritStage is called on defender + + // Dragon cheer added +1 stages + const magikarp = game.scene.getPlayerField()[1]; + expect(magikarp).toHaveBattlerTag({ tagType: BattlerTagType.DRAGON_CHEER, critStages: 1 }); + expect(magikarp).toHaveTypes([PokemonType.WATER]); + + await game.toEndOfTurn(); + + // Should be dragon type, but still with a +1 stage boost + expect(magikarp).toHaveTypes([PokemonType.DRAGON]); + expect(magikarp).toHaveBattlerTag({ tagType: BattlerTagType.DRAGON_CHEER, critStages: 1 }); + }); + + it.each([ + { name: "Focus Energy", tagType: BattlerTagType.CRIT_BOOST }, + { name: "Dragon Cheer", tagType: BattlerTagType.DRAGON_CHEER }, + ])("should fail if $name is already present", async ({ tagType }) => { + await game.classicMode.startBattle([SpeciesId.DRAGONAIR, SpeciesId.MAGIKARP]); + + const [dragonair, magikarp] = game.scene.getPlayerField(); + magikarp.addTag(tagType); + + game.move.use(MoveId.DRAGON_CHEER, BattlerIndex.PLAYER); + game.move.use(MoveId.SPLASH, BattlerIndex.PLAYER_2); + await game.toEndOfTurn(); + + expect(dragonair).toHaveUsedMove({ move: MoveId.DRAGON_CHEER, result: MoveResult.FAIL }); + expect(magikarp).toHaveBattlerTag(tagType); }); }); diff --git a/test/moves/focus-energy.test.ts b/test/moves/focus-energy.test.ts new file mode 100644 index 00000000000..3c2882f5bf3 --- /dev/null +++ b/test/moves/focus-energy.test.ts @@ -0,0 +1,69 @@ +import { AbilityId } from "#enums/ability-id"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { MoveId } from "#enums/move-id"; +import { MoveResult } from "#enums/move-result"; +import { SpeciesId } from "#enums/species-id"; +import { GameManager } from "#test/test-utils/game-manager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Move - Focus Energy", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .ability(AbilityId.BALL_FETCH) + .battleStyle("single") + .criticalHits(false) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyAbility(AbilityId.BALL_FETCH) + .enemyMoveset(MoveId.SPLASH) + .startingLevel(100) + .enemyLevel(100); + }); + + it("should increase the user's crit ratio by 2 stages", async () => { + await game.classicMode.startBattle([SpeciesId.FEEBAS]); + + game.move.use(MoveId.FOCUS_ENERGY); + await game.toNextTurn(); + + const feebas = game.field.getPlayerPokemon(); + expect(feebas).toHaveBattlerTag({ tagType: BattlerTagType.CRIT_BOOST, critStages: 2 }); + + const enemy = game.field.getEnemyPokemon(); + vi.spyOn(enemy, "getCritStage"); + + game.move.use(MoveId.TACKLE); + await game.toEndOfTurn(); + + expect(enemy.getCritStage).toHaveReturnedWith(2); + }); + + it.each([ + { name: "Focus Energy", tagType: BattlerTagType.CRIT_BOOST }, + { name: "Dragon Cheer", tagType: BattlerTagType.DRAGON_CHEER }, + ])("should fail if $name is already present", async ({ tagType }) => { + await game.classicMode.startBattle([SpeciesId.FEEBAS]); + + const feebas = game.field.getPlayerPokemon(); + feebas.addTag(tagType); + + game.move.use(MoveId.FOCUS_ENERGY); + await game.toEndOfTurn(); + + expect(feebas).toHaveUsedMove({ move: MoveId.FOCUS_ENERGY, result: MoveResult.FAIL }); + }); +}); diff --git a/test/test-utils/matchers/to-have-arena-tag.ts b/test/test-utils/matchers/to-have-arena-tag.ts index e2a4a71ffd5..a9d619686d1 100644 --- a/test/test-utils/matchers/to-have-arena-tag.ts +++ b/test/test-utils/matchers/to-have-arena-tag.ts @@ -6,11 +6,21 @@ import type { OneOther } from "#test/@types/test-helpers"; import type { GameManager } from "#test/test-utils/game-manager"; import { getOnelineDiffStr } from "#test/test-utils/string-utils"; import { isGameManagerInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { ArenaTagDataMap, SerializableArenaTagType } from "#types/arena-tags"; import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; -// intersection required to preserve T for inferences -export type toHaveArenaTagOptions = OneOther & { - tagType: T; +/** + * Options type for {@linkcode toHaveArenaTag}. + * @typeParam A - The {@linkcode ArenaTagType} being checked + * @remarks + * If A corresponds to a serializable `ArenaTag`, only properties allowed to be serialized + * (i.e. can change across instances) will be present and able to be checked. + */ +export type toHaveArenaTagOptions = OneOther< + A extends SerializableArenaTagType ? ArenaTagDataMap[A] : ArenaTagTypeMap[A], + "tagType" | "side" +> & { + tagType: A; }; /** @@ -22,10 +32,10 @@ export type toHaveArenaTagOptions = OneOther( +export function toHaveArenaTag( this: MatcherState, received: unknown, - expectedTag: T | toHaveArenaTagOptions, + expectedTag: A | toHaveArenaTagOptions, side: ArenaTagSide = ArenaTagSide.BOTH, ): SyncExpectationResult { if (!isGameManagerInstance(received)) { diff --git a/test/test-utils/matchers/to-have-battler-tag.ts b/test/test-utils/matchers/to-have-battler-tag.ts index af405d7da39..ba6679b2af4 100644 --- a/test/test-utils/matchers/to-have-battler-tag.ts +++ b/test/test-utils/matchers/to-have-battler-tag.ts @@ -3,21 +3,39 @@ import type { Pokemon } from "#field/pokemon"; /* biome-ignore-end lint/correctness/noUnusedImports: tsdoc imports */ import { getPokemonNameWithAffix } from "#app/messages"; +import type { BattlerTagTypeMap } from "#data/battler-tags"; import { BattlerTagType } from "#enums/battler-tag-type"; -import { getEnumStr } from "#test/test-utils/string-utils"; +import type { OneOther } from "#test/@types/test-helpers"; +import { getEnumStr, getOnelineDiffStr } from "#test/test-utils/string-utils"; import { isPokemonInstance, receivedStr } from "#test/test-utils/test-utils"; +import type { BattlerTagDataMap, SerializableBattlerTagType } from "#types/battler-tags"; import type { MatcherState, SyncExpectationResult } from "@vitest/expect"; +// intersection required to preserve T for inferences /** - * Matcher that checks if a {@linkcode Pokemon} has a specific {@linkcode BattlerTagType}. + * Options type for {@linkcode toHaveBattlerTag}. + * @typeParam B - The {@linkcode BattlerTagType} being checked + * @remarks + * If B corresponds to a serializable `BattlerTag`, only properties allowed to be serialized + * (i.e. can change across instances) will be present and able to be checked. + */ +export type toHaveBattlerTagOptions = (B extends SerializableBattlerTagType + ? OneOther + : OneOther) & { + tagType: B; +}; + +/** + * Matcher that checks if a {@linkcode Pokemon} has a specific {@linkcode BattlerTag}. * @param received - The object to check. Should be a {@linkcode Pokemon} - * @param expectedBattlerTagType - The {@linkcode BattlerTagType} to check for + * @param expectedTag - The `BattlerTagType` of the desired tag, or a partially-filled object + * containing the desired properties * @returns Whether the matcher passed */ -export function toHaveBattlerTag( +export function toHaveBattlerTag( this: MatcherState, received: unknown, - expectedBattlerTagType: BattlerTagType, + expectedTag: B | toHaveBattlerTagOptions, ): SyncExpectationResult { if (!isPokemonInstance(received)) { return { @@ -26,18 +44,44 @@ export function toHaveBattlerTag( }; } - const pass = !!received.getTag(expectedBattlerTagType); const pkmName = getPokemonNameWithAffix(received); - // "BattlerTagType.SEEDED (=1)" - const expectedTagStr = getEnumStr(BattlerTagType, expectedBattlerTagType, { prefix: "BattlerTagType." }); + // Coerce lone `tagType`s into objects + const etag = typeof expectedTag === "object" ? expectedTag : { tagType: expectedTag }; + const gotTag = received.getTag(etag.tagType); + + // If checking exclusively tag type OR no tags were found, break out early. + if (typeof expectedTag !== "object" || !gotTag) { + const pass = !!gotTag; + // "BattlerTagType.SEEDED (=1)" + const expectedTagStr = getEnumStr(BattlerTagType, etag.tagType, { prefix: "BattlerTagType." }); + + return { + pass, + message: () => + pass + ? `Expected ${pkmName} to NOT have a tag of type ${expectedTagStr}, but it did!` + : `Expected ${pkmName} to have a tag of type ${expectedTagStr}, but it didn't!`, + expected: expectedTag, + actual: received.summonData.tags.map(t => t.tagType), + }; + } + + // Check for equality with the provided tag + const pass = this.equals(gotTag, etag, [ + ...this.customTesters, + this.utils.subsetEquality, + this.utils.iterableEquality, + ]); + + const expectedStr = getOnelineDiffStr.call(this, expectedTag); return { pass, message: () => pass - ? `Expected ${pkmName} to NOT have ${expectedTagStr}, but it did!` - : `Expected ${pkmName} to have ${expectedTagStr}, but it didn't!`, - expected: expectedBattlerTagType, - actual: received.summonData.tags.map(t => t.tagType), + ? `Expected ${pkmName} to NOT have a tag matching ${expectedStr}, but it did!` + : `Expected ${pkmName} to have a tag matching ${expectedStr}, but it didn't!`, + expected: expectedTag, + actual: gotTag, }; } diff --git a/test/test-utils/string-utils.ts b/test/test-utils/string-utils.ts index 6c29c04c107..e19224f4571 100644 --- a/test/test-utils/string-utils.ts +++ b/test/test-utils/string-utils.ts @@ -183,5 +183,5 @@ export function getOnelineDiffStr(this: MatcherState, obj: unknown): string { return this.utils .stringify(obj, undefined, { maxLength: 35, indent: 0, printBasicPrototype: false }) .replace(/\n/g, " ") // Replace newlines with spaces - .replace(/,(\s*)}$/g, "$1}"); // Trim trailing commas + .replace(/,(\s*)\}$/g, "$1}"); // Trim trailing commas } From 9ddd6fe0268f145efe89dca9d861098bd690464f Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 5 Sep 2025 22:54:48 -0400 Subject: [PATCH 33/39] [Dev] Fix GH pages workflow to push docs correctly (#6493) --- .github/workflows/github-pages.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index 95b73782f8e..51a6b71bbe3 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -71,7 +71,8 @@ jobs: run: pnpm typedoc - name: Commit & Push docs - if: ${{!env.DRY_RUN}} + # env vars are stored as strings instead of booleans (hence why an explicit check is required) + if: ${{ env.DRY_RUN == 'false'}} run: | cd pokerogue_gh git config user.email "github-actions[bot]@users.noreply.github.com" From e94417940f19d25afa2d71f73c109c902b03879a Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 5 Sep 2025 23:14:38 -0400 Subject: [PATCH 34/39] [Dev] Fix extra dot in github-pages.yml (#6494) --- .github/workflows/github-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index 51a6b71bbe3..b7b1aad5ae7 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -79,7 +79,7 @@ jobs: git config user.name "github-actions[bot]" mkdir -p $GITHUB_REF_NAME rm -rf $GITHUB_REF_NAME/* - cp -r /tmp/docs/. $GITHUB_REF_NAME + cp -r /tmp/docs $GITHUB_REF_NAME git add $GITHUB_REF_NAME git commit -m "[skip ci] Deploy docs" git push From 2d037fca96ecf2d4f2e1d12f871d157def461ae5 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Fri, 5 Sep 2025 23:27:21 -0400 Subject: [PATCH 35/39] [Dev] Fix typedoc.config.js (#6495) --- typedoc.config.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/typedoc.config.js b/typedoc.config.js index 72c58ee8350..5c49a643a91 100644 --- a/typedoc.config.js +++ b/typedoc.config.js @@ -1,5 +1,7 @@ import { globSync } from "node:fs"; +const dryRun = !!process.env.DRY_RUN.match(/true/gi); + /** * @type {Partial} */ @@ -28,7 +30,7 @@ const config = { ...globSync("./typedoc-plugins/**/*.js").map(plugin => "./" + plugin), ], // Avoid emitting docs for branches other than main/beta - emit: process.env.DRY_RUN ? "none" : "docs", + emit: dryRun ? "none" : "docs", out: process.env.CI ? "/tmp/docs" : "./typedoc", name: "PokéRogue", readme: "./README.md", @@ -44,7 +46,7 @@ const config = { }; // If generating docs for main/beta, check the ref name and add an appropriate navigation header -if (!process.env.DRY_RUN && process.env.REF_NAME) { +if (!dryRun && process.env.REF_NAME) { const otherRefName = process.env.REF_NAME === "main" ? "beta" : "main"; config.navigationLinks = { ...config.navigationLinks, From 4b86dffcf97b69391f7eff3b65e2d92952a10ede Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Fri, 5 Sep 2025 22:38:16 -0500 Subject: [PATCH 36/39] [GitHub] [Bug] Add nullish operator to dryRun check (#6496) --- typedoc.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/typedoc.config.js b/typedoc.config.js index 5c49a643a91..1f944cd544e 100644 --- a/typedoc.config.js +++ b/typedoc.config.js @@ -1,6 +1,6 @@ import { globSync } from "node:fs"; -const dryRun = !!process.env.DRY_RUN.match(/true/gi); +const dryRun = !!process.env.DRY_RUN?.match(/true/gi); /** * @type {Partial} From 3765f843db5e10b2ad6d08d9d993c29012196963 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Sat, 6 Sep 2025 16:12:32 +1000 Subject: [PATCH 37/39] [Refactor] Remove randSeedWeightedItem utils function. (#6492) Remove randSeedWeightedItem utils function. --- src/field/trainer.ts | 6 ++---- src/utils/common.ts | 4 ---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/field/trainer.ts b/src/field/trainer.ts index acbc8031dbc..6d427585a87 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -17,7 +17,7 @@ import { getIsInitialized, initI18n } from "#plugins/i18n"; import type { TrainerConfig } from "#trainers/trainer-config"; import { trainerConfigs } from "#trainers/trainer-config"; import { TrainerPartyCompoundTemplate, type TrainerPartyTemplate } from "#trainers/trainer-party-template"; -import { randSeedInt, randSeedItem, randSeedWeightedItem } from "#utils/common"; +import { randSeedInt, randSeedItem } from "#utils/common"; import { getRandomLocaleEntry } from "#utils/i18n"; import { getPokemonSpecies } from "#utils/pokemon-utils"; import { toCamelCase } from "#utils/strings"; @@ -61,9 +61,7 @@ export class Trainer extends Phaser.GameObjects.Container { this.variant = variant; this.partyTemplateIndex = Math.min( - partyTemplateIndex !== undefined - ? partyTemplateIndex - : randSeedWeightedItem(this.config.partyTemplates.map((_, i) => i)), + partyTemplateIndex !== undefined ? partyTemplateIndex : randSeedItem(this.config.partyTemplates.map((_, i) => i)), this.config.partyTemplates.length - 1, ); // TODO: Rework this and add actual error handling for missing names diff --git a/src/utils/common.ts b/src/utils/common.ts index c8e28545046..97e61b902d8 100644 --- a/src/utils/common.ts +++ b/src/utils/common.ts @@ -133,10 +133,6 @@ export function randSeedItem(items: T[]): T { return items.length === 1 ? items[0] : Phaser.Math.RND.pick(items); } -export function randSeedWeightedItem(items: T[]): T { - return items.length === 1 ? items[0] : Phaser.Math.RND.weightedPick(items); -} - /** * Shuffle a list using the seeded rng. Utilises the Fisher-Yates algorithm. * @param {Array} items An array of items. From ddc04a7a87baca23bdaaeb4466412cd7af132141 Mon Sep 17 00:00:00 2001 From: HeeMyung Kim Date: Sat, 6 Sep 2025 15:40:38 +0900 Subject: [PATCH 38/39] [Bug] [UI/UX] Fix random button activation bug (#6464) --- src/ui/starter-select-ui-handler.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 049f33af5d7..3b4b2716369 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1619,6 +1619,7 @@ export class StarterSelectUiHandler extends MessageUiHandler { if (!this.filterMode) { this.startCursorObj.setVisible(false); this.starterIconsCursorObj.setVisible(false); + this.randomCursorObj.setVisible(false); this.setSpecies(null); this.filterBarCursor = 0; this.setFilterMode(true); From ad61a28e88f045ebfb555df2b526e6bc0ae7ada8 Mon Sep 17 00:00:00 2001 From: Anthony <53468745+PistaCream@users.noreply.github.com> Date: Fri, 5 Sep 2025 23:46:13 -0700 Subject: [PATCH 39/39] [Bug] Moody Can't Lower Stats at +6 (#6481) --- src/data/abilities/ability.ts | 2 +- test/abilities/moody.test.ts | 36 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 66d00d950d2..adcf93f7adf 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -4813,7 +4813,7 @@ export class MoodyAbAttr extends PostTurnAbAttr { if (!simulated) { if (canRaise.length > 0) { const raisedStat = canRaise[pokemon.randBattleSeedInt(canRaise.length)]; - canLower = canRaise.filter(s => s !== raisedStat); + canLower = canLower.filter(s => s !== raisedStat); globalScene.phaseManager.unshiftNew("StatStageChangePhase", pokemon.getBattlerIndex(), true, [raisedStat], 2); } if (canLower.length > 0) { diff --git a/test/abilities/moody.test.ts b/test/abilities/moody.test.ts index d1f8aa2e351..b7882c15ced 100644 --- a/test/abilities/moody.test.ts +++ b/test/abilities/moody.test.ts @@ -84,4 +84,40 @@ describe("Abilities - Moody", () => { expect(decreasedStat).toBeTruthy(); expect(decreasedStat.length).toBe(1); }); + + it("should only try to increase a stat stage by 1 if the stat stage is not at 6", async () => { + await game.classicMode.startBattle(); + + const playerPokemon = game.field.getPlayerPokemon(); + + // Set all stat stages to 6 + vi.spyOn(playerPokemon.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(6)); + + // Set one of the stat stages to -6 + const raisedStat = EFFECTIVE_STATS[playerPokemon.randBattleSeedInt(EFFECTIVE_STATS.length)]; + playerPokemon.setStatStage(raisedStat, -6); + + game.move.select(MoveId.SPLASH); + await game.toNextTurn(); + + expect(playerPokemon.getStatStage(raisedStat), "should increase only the stat that is not at stage 6").toBe(-4); + }); + + it("should only try to decrease a stat stage by 1 if the stat stage is not at -6", async () => { + await game.classicMode.startBattle(); + + const playerPokemon = game.field.getPlayerPokemon(); + + // Set all stat stages to -6 + vi.spyOn(playerPokemon.summonData, "statStages", "get").mockReturnValue(new Array(BATTLE_STATS.length).fill(-6)); + + // Set one of the stat stages to 6 + const raisedStat = EFFECTIVE_STATS[playerPokemon.randBattleSeedInt(EFFECTIVE_STATS.length)]; + playerPokemon.setStatStage(raisedStat, 6); + + game.move.select(MoveId.SPLASH); + await game.toNextTurn(); + + expect(playerPokemon.getStatStage(raisedStat), "should decrease only the stat that is not at stage -6").toBe(5); + }); });