From 8f884a7ef04411098f081185703c91746d256d4e Mon Sep 17 00:00:00 2001 From: Asuka Kuwahara <42548220+asukakuwahara@users.noreply.github.com> Date: Sun, 29 Dec 2024 21:09:11 -0500 Subject: [PATCH 1/7] [BUG] fix #5038 update shedinja's gender to genderless on evolution (#5039) * update shedinja's gender to genderless * update unit test --- src/field/pokemon.ts | 1 + src/test/evolution.test.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index fcfc2ff7536..30856ab416a 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4484,6 +4484,7 @@ export class PlayerPokemon extends Pokemon { newPokemon.moveset = this.moveset.slice(); newPokemon.moveset = this.copyMoveset(); newPokemon.luck = this.luck; + newPokemon.gender = Gender.GENDERLESS; newPokemon.metLevel = this.metLevel; newPokemon.metBiome = this.metBiome; newPokemon.metSpecies = this.metSpecies; diff --git a/src/test/evolution.test.ts b/src/test/evolution.test.ts index 3046d103cbc..10748899d59 100644 --- a/src/test/evolution.test.ts +++ b/src/test/evolution.test.ts @@ -78,12 +78,15 @@ describe("Evolution", () => { const nincada = game.scene.getPlayerPokemon()!; nincada.abilityIndex = 2; nincada.metBiome = -1; + nincada.gender = 1; nincada.evolve(pokemonEvolutions[Species.NINCADA][0], nincada.getSpeciesForm()); const ninjask = game.scene.getPlayerParty()[0]; const shedinja = game.scene.getPlayerParty()[1]; expect(ninjask.abilityIndex).toBe(2); expect(shedinja.abilityIndex).toBe(1); + expect(ninjask.gender).toBe(1); + expect(shedinja.gender).toBe(-1); // Regression test for https://github.com/pagefaultgames/pokerogue/issues/3842 expect(shedinja.metBiome).toBe(-1); }); From 6946abadb8e25f7a4e73c7bd07e0afa22741360c Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Mon, 30 Dec 2024 16:35:45 +0100 Subject: [PATCH 2/7] [UI/UX] Add cursor memory option (#5028) * Adding a new key determining whether the command cursor resets at the beginning of each new battle. * Allowing user to toggle commandCursorReset on and off. * Changing option name to commandCursorMemory * Fixed caps in settings.ts * Moved Command_Cursor_Memory from Display settings to General settings --- src/battle-scene.ts | 1 + src/phases/command-phase.ts | 8 +++++++- src/system/settings/settings.ts | 11 +++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index c430a12ae3e..11950f0a47f 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -147,6 +147,7 @@ export default class BattleScene extends SceneBase { public damageNumbersMode: integer = 0; public reroll: boolean = false; public shopCursorTarget: number = ShopCursorTarget.REWARDS; + public commandCursorMemory: boolean = false; public showMovesetFlyout: boolean = true; public showArenaFlyout: boolean = true; public showTimeOfDayWidget: boolean = true; diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index eab76282908..fa85f2427e5 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -35,8 +35,14 @@ export class CommandPhase extends FieldPhase { this.scene.updateGameInfo(); const commandUiHandler = this.scene.ui.handlers[Mode.COMMAND]; + + // If one of these conditions is true, we always reset the cursor to Command.FIGHT + const cursorResetEvent = this.scene.currentBattle.battleType === BattleType.MYSTERY_ENCOUNTER || + this.scene.currentBattle.battleType === BattleType.TRAINER || + this.scene.arena.biomeType === Biome.END; + if (commandUiHandler) { - if (this.scene.currentBattle.turn === 1 || commandUiHandler.getCursor() === Command.POKEMON) { + if ((this.scene.currentBattle.turn === 1 && (!this.scene.commandCursorMemory || cursorResetEvent)) || commandUiHandler.getCursor() === Command.POKEMON) { commandUiHandler.setCursor(Command.FIGHT); } else { commandUiHandler.setCursor(commandUiHandler.getCursor()); diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 64ddfdae5cf..ebdcad1c4f9 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -157,6 +157,7 @@ export const SettingKeys = { Move_Animations: "MOVE_ANIMATIONS", Show_Stats_on_Level_Up: "SHOW_LEVEL_UP_STATS", Shop_Cursor_Target: "SHOP_CURSOR_TARGET", + Command_Cursor_Memory: "COMMAND_CURSOR_MEMORY", Candy_Upgrade_Notification: "CANDY_UPGRADE_NOTIFICATION", Candy_Upgrade_Display: "CANDY_UPGRADE_DISPLAY", Move_Info: "MOVE_INFO", @@ -339,6 +340,13 @@ export const Setting: Array = [ default: 0, type: SettingType.GENERAL }, + { + key: SettingKeys.Command_Cursor_Memory, + label: i18next.t("settings:commandCursorMemory"), + options: OFF_ON, + default: 0, + type: SettingType.GENERAL + }, { key: SettingKeys.Enable_Retries, label: i18next.t("settings:enableRetries"), @@ -827,6 +835,9 @@ export function setSetting(scene: BattleScene, setting: string, value: integer): const selectedValue = shopCursorTargetIndexMap[value]; scene.shopCursorTarget = selectedValue; break; + case SettingKeys.Command_Cursor_Memory: + scene.commandCursorMemory = Setting[index].options[value].value === "On"; + break; case SettingKeys.EXP_Gains_Speed: scene.expGainsSpeed = value; break; From 1b6374f4697c2cdb77c30eca694acf4a43ece8e9 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 30 Dec 2024 18:55:28 -0800 Subject: [PATCH 3/7] [UI/UX] Change label for music settings (#5053) Changes from "Consistent/Mixed" to "Gen V + PMD"/"All Gens" Update `MusicPreferences` enum * Update locales submodule --- public/locales | 2 +- src/battle-scene.ts | 2 +- src/battle.ts | 6 +++--- .../encounters/global-trade-system-encounter.ts | 2 +- src/system/settings/settings.ts | 14 +++++++------- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/public/locales b/public/locales index 6c6f0af398a..b28ba1255c8 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 6c6f0af398ae11f8d96c6ac064f171d927812c85 +Subproject commit b28ba1255c8db12cb07947f88635cb6be0143a15 diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 11950f0a47f..327ab1cc926 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -174,7 +174,7 @@ export default class BattleScene extends SceneBase { public uiTheme: UiTheme = UiTheme.DEFAULT; public windowType: integer = 0; public experimentalSprites: boolean = false; - public musicPreference: number = MusicPreference.MIXED; + public musicPreference: number = MusicPreference.ALLGENS; public moveAnimations: boolean = true; public expGainsSpeed: ExpGainsSpeed = ExpGainsSpeed.DEFAULT; public skipSeenDialogues: boolean = false; diff --git a/src/battle.ts b/src/battle.ts index 75f0dff2534..38ee7b5eae0 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -222,7 +222,7 @@ export default class Battle { if (!this.started && this.trainer?.config.encounterBgm && this.trainer?.getEncounterMessages()?.length) { return `encounter_${this.trainer?.getEncounterBgm()}`; } - if (scene.musicPreference === MusicPreference.CONSISTENT) { + if (scene.musicPreference === MusicPreference.GENFIVE) { return this.trainer?.getBattleBgm() ?? null; } else { return this.trainer?.getMixedBattleBgm() ?? null; @@ -239,7 +239,7 @@ export default class Battle { return "battle_final_encounter"; } if (pokemon.species.legendary || pokemon.species.subLegendary || pokemon.species.mythical) { - if (scene.musicPreference === MusicPreference.CONSISTENT) { + if (scene.musicPreference === MusicPreference.GENFIVE) { switch (pokemon.species.speciesId) { case Species.REGIROCK: case Species.REGICE: @@ -256,7 +256,7 @@ export default class Battle { } return "battle_legendary_unova"; } - } else if (scene.musicPreference === MusicPreference.MIXED) { + } else if (scene.musicPreference === MusicPreference.ALLGENS) { switch (pokemon.species.speciesId) { case Species.ARTICUNO: case Species.ZAPDOS: diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index fa445d75d4f..b7376c2bfd2 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -107,7 +107,7 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = // Load bgm let bgmKey: string; - if (scene.musicPreference === MusicPreference.CONSISTENT) { + if (scene.musicPreference === MusicPreference.GENFIVE) { bgmKey = "mystery_encounter_gen_5_gts"; scene.loadBgm(bgmKey, `${bgmKey}.mp3`); } else { diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index ebdcad1c4f9..0a11648c171 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -181,8 +181,8 @@ export const SettingKeys = { }; export enum MusicPreference { - CONSISTENT, - MIXED + GENFIVE, + ALLGENS } /** @@ -670,15 +670,15 @@ export const Setting: Array = [ label: i18next.t("settings:musicPreference"), options: [ { - value: "Consistent", - label: i18next.t("settings:consistent") + value: "Gen V + PMD", + label: i18next.t("settings:musicGenFive") }, { - value: "Mixed", - label: i18next.t("settings:mixed") + value: "All Gens", + label: i18next.t("settings:musicAllGens") } ], - default: MusicPreference.MIXED, + default: MusicPreference.ALLGENS, type: SettingType.AUDIO, requireReload: true }, From 14902cdb60908eb98d01c3cd52134387f8061c7e Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 30 Dec 2024 20:20:23 -0800 Subject: [PATCH 4/7] [Hotfix] Prevent Keldeo from changing forms in Daily Run (#5060) * [Hotfix] Prevent Keldeo from changing forms in Daily Run * Update patch version --- package-lock.json | 4 ++-- package.json | 2 +- src/data/pokemon-forms.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0ef89a8831f..c3c08a9ec00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.4.1", + "version": "1.4.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.4.1", + "version": "1.4.2", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 980bcd2034e..d484927e5fc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.4.1", + "version": "1.4.2", "type": "module", "scripts": { "start": "vite", diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index a1b2d7896d7..d3cccbefdba 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -770,8 +770,8 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.KYUREM, "", "white", new SpeciesFormChangeItemTrigger(FormChangeItem.LIGHT_STONE), false, getSpeciesDependentFormChangeCondition(Species.RESHIRAM)) ], [Species.KELDEO]: [ - new SpeciesFormChange(Species.KELDEO, "ordinary", "resolute", new SpeciesFormChangeMoveLearnedTrigger(Moves.SECRET_SWORD)), - new SpeciesFormChange(Species.KELDEO, "resolute", "ordinary", new SpeciesFormChangeMoveLearnedTrigger(Moves.SECRET_SWORD, false)) + new SpeciesFormChange(Species.KELDEO, "ordinary", "resolute", new SpeciesFormChangeMoveLearnedTrigger(Moves.SECRET_SWORD), false, new SpeciesFormChangeCondition((p) => p.scene.gameMode.isDaily !== true)), + new SpeciesFormChange(Species.KELDEO, "resolute", "ordinary", new SpeciesFormChangeMoveLearnedTrigger(Moves.SECRET_SWORD, false), false, new SpeciesFormChangeCondition((p) => p.scene.gameMode.isDaily !== true)) ], [Species.MELOETTA]: [ new SpeciesFormChange(Species.MELOETTA, "aria", "pirouette", new MeloettaFormChangePostMoveTrigger(Moves.RELIC_SONG), true), From ec5dadb4f4095edb999905119286ea172c0270be Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Fri, 3 Jan 2025 18:42:06 -0500 Subject: [PATCH 5/7] [Misc] Undo winter holiday event changes (#5068) --- src/data/balance/starters.ts | 2 +- .../mystery-encounters/encounters/delibirdy-encounter.ts | 5 ++--- src/data/mystery-encounters/mystery-encounters.ts | 8 ++++---- src/phases/trainer-victory-phase.ts | 2 +- .../encounters/delibirdy-encounter.test.ts | 2 +- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/data/balance/starters.ts b/src/data/balance/starters.ts index abbe3897908..ec66401675b 100644 --- a/src/data/balance/starters.ts +++ b/src/data/balance/starters.ts @@ -4,7 +4,7 @@ export const POKERUS_STARTER_COUNT = 5; // #region Friendship constants export const CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER = 3; -export const FRIENDSHIP_GAIN_FROM_BATTLE = 4; +export const FRIENDSHIP_GAIN_FROM_BATTLE = 3; export const FRIENDSHIP_GAIN_FROM_RARE_CANDY = 6; export const FRIENDSHIP_LOSS_FROM_FAINT = 5; diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index 1df87a3d17f..99668c76143 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -34,7 +34,7 @@ const OPTION_3_DISALLOWED_MODIFIERS = [ "PokemonBaseStatTotalModifier" ]; -const DELIBIRDY_MONEY_PRICE_MULTIPLIER = 1.5; +const DELIBIRDY_MONEY_PRICE_MULTIPLIER = 2; const doEventReward = (scene: BattleScene) => { const event_buff = scene.eventManager.activeEvent()?.delibirdyBuff ?? []; @@ -60,8 +60,7 @@ const doEventReward = (scene: BattleScene) => { */ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.DELIBIRDY) - .withMaxAllowedEncounters(4) - .withEncounterTier(MysteryEncounterTier.COMMON) //Change back after event! + .withEncounterTier(MysteryEncounterTier.GREAT) .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) .withSceneRequirement(new MoneyRequirement(0, DELIBIRDY_MONEY_PRICE_MULTIPLIER)) // Must have enough money for it to spawn at the very least .withPrimaryPokemonRequirement( diff --git a/src/data/mystery-encounters/mystery-encounters.ts b/src/data/mystery-encounters/mystery-encounters.ts index 8a747cd4cd4..44feabeeaea 100644 --- a/src/data/mystery-encounters/mystery-encounters.ts +++ b/src/data/mystery-encounters/mystery-encounters.ts @@ -177,7 +177,7 @@ export const allMysteryEncounters: { [encounterType: number]: MysteryEncounter } const extremeBiomeEncounters: MysteryEncounterType[] = []; const nonExtremeBiomeEncounters: MysteryEncounterType[] = [ - // MysteryEncounterType.FIELD_TRIP, Disabled for holiday event + // MysteryEncounterType.FIELD_TRIP, Disabled MysteryEncounterType.DANCING_LESSONS, // Is also in BADLANDS, DESERT, VOLCANO, WASTELAND, ABYSS ]; @@ -185,14 +185,14 @@ const humanTransitableBiomeEncounters: MysteryEncounterType[] = [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS, MysteryEncounterType.SHADY_VITAMIN_DEALER, MysteryEncounterType.THE_POKEMON_SALESMAN, - // MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, Disabled for holiday event + // MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, Disabled MysteryEncounterType.THE_WINSTRATE_CHALLENGE, MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER ]; const civilizationBiomeEncounters: MysteryEncounterType[] = [ - // MysteryEncounterType.DEPARTMENT_STORE_SALE, Disabled for holiday event - // MysteryEncounterType.PART_TIMER, Disabled for holiday event + MysteryEncounterType.DEPARTMENT_STORE_SALE, + MysteryEncounterType.PART_TIMER, MysteryEncounterType.FUN_AND_GAMES, MysteryEncounterType.GLOBAL_TRADE_SYSTEM ]; diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index 456d548a9ba..d797e4360ac 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -39,7 +39,7 @@ export class TrainerVictoryPhase extends BattlePhase { // Validate Voucher for boss trainers if (vouchers.hasOwnProperty(TrainerType[trainerType])) { if (!this.scene.validateVoucher(vouchers[TrainerType[trainerType]]) && this.scene.currentBattle.trainer?.config.isBoss) { - this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [ modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType])); + this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [ modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType])); } } // Breeders in Space achievement diff --git a/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts b/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts index 71fb695111a..c226d60a9b4 100644 --- a/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts @@ -56,7 +56,7 @@ describe("Delibird-y - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.DELIBIRDY, defaultParty); expect(DelibirdyEncounter.encounterType).toBe(MysteryEncounterType.DELIBIRDY); - expect(DelibirdyEncounter.encounterTier).toBe(MysteryEncounterTier.COMMON); + expect(DelibirdyEncounter.encounterTier).toBe(MysteryEncounterTier.GREAT); expect(DelibirdyEncounter.dialogue).toBeDefined(); expect(DelibirdyEncounter.dialogue.intro).toStrictEqual([{ text: `${namespace}:intro` }]); expect(DelibirdyEncounter.dialogue.outro).toStrictEqual([{ text: `${namespace}:outro` }]); From 355e70328c7e079e7deaf598059108885b91c8e5 Mon Sep 17 00:00:00 2001 From: "Amani H." <109637146+xsn34kzx@users.noreply.github.com> Date: Fri, 3 Jan 2025 19:27:26 -0500 Subject: [PATCH 6/7] [Misc] `1.4.3` Version Bump + Locales Update (#5077) --- package-lock.json | 4 ++-- package.json | 2 +- public/locales | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index c3c08a9ec00..52cc628872a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.4.2", + "version": "1.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.4.2", + "version": "1.4.3", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index d484927e5fc..e52c5928da7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.4.2", + "version": "1.4.3", "type": "module", "scripts": { "start": "vite", diff --git a/public/locales b/public/locales index b28ba1255c8..2e03bc8f273 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit b28ba1255c8db12cb07947f88635cb6be0143a15 +Subproject commit 2e03bc8f2736269bfa365faad587c3ec54a37621 From 1be95e8a1a36ec8ac9ac8b112d45b0abc61af496 Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Sat, 4 Jan 2025 23:43:40 +0100 Subject: [PATCH 7/7] [Localization] [UI/UX] Updates for pokemon-emerald-pro & pkmnems (#4968) * Add files via upload * Add files via upload --- public/fonts/pkmnems.ttf | Bin 26132 -> 26504 bytes public/fonts/pokemon-emerald-pro.ttf | Bin 93528 -> 93816 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/public/fonts/pkmnems.ttf b/public/fonts/pkmnems.ttf index b0b50d0f10ff8a64753acb663781be30d9b0213d..2cc7bfeee62569b1190a20ad91dcfada349b0d32 100644 GIT binary patch delta 1094 zcmY*YZ){Ul6hG(ny|!)*ZIL33+P?R0``SlzZflDKQBjwM5dH`(laRskwv`pLjfRzF z`hgN-3?a)TmJlOu*@p$^mkBgXd>_!@6ojc{A7-+U*p!42N%&?&*6}>|ZA5*^x#!>g zoqK-woqJ{mPyUJpKmhQ-32?xcbh>3nf93rgKz9#CgS+;=)Z~4X8V10vm z2g(3W4}fr`+vv|(79pX#i}LR7p7#!ojNX_8sHp<9B(oW#>#vU%3Y426*^s3`?E!Zq z)f35&WP9_4!3U9=7bq|WAimpkq|<15aJWLXrs;rQu zy#c`SPVPv5Ucde^ZSgp409kF716XOX&Gm#_ zHweWQsJrSo4%d}l!w($AG09V$7FQJ~Bv0v%_!br>i6FnEAc*jZt$h^nz;Uq9fnjXK zz1S(D=oWX2`{cFSn{*}AD~zFlA#A`scu)k#lXp`p!CUowWu4s=rik zR==-)TjnT!&cC0Jo55wDJ2&B$?ajc?xR!R;mCifAK<^FsX?YVVTvKdwzmC^SpS#at z;m7Bzp^c$jXejhq=xXR*SPkzC_k>S}uY}9thjNX)UfwSE$)Cy-@{D{>2`c-PL1jXj zQy!{LRaVpLesxeCSEtl@=445>on_exHp;HDN<@exBZnfxkxP*~Q6aiA+7NAx4n?m; zE1FN+thH!IwIS_NlQykYVk=^DtT~p8jmD;8v#~$o?zk4;7SF~{#m#tGU#U0i`}G0+ zj6R{yudgeWYhHXMBM}o*xKF>y0WPQoFRUYKsYF0wsf0hJ1SEybgkSL|{ESv6)SHX5 zriu9{LtMCJnxtLLrmgK2^9$ob{o*VQFt1-cm1ae0ldtJNU^1WXH%;mGQ>S`xsp8@+ z$D3xUHvOegu+l=kblYyx3!ns8>gB|949TFT81LX4q$cc|REgJH7#G`Ubomqt_odZj zJp+Ly?6ZUmFb8oA5FtMi|2=hpZTSJ5nr@Cg2f$M73m zfQzsI)#6;o=_KyJowy6%hOcoq?s3s0&1D;t&Nn)aW(G1&!&a_ieTN$wH#9BlL@D3d XE-<=rnq`3x6$$)4cZ;6x|6kKTDlJBg delta 714 zcmXX^Ur19?82`?8S!**j(V1@Cf4hICq~@}enFUe{1kEx`25MKG4sp5K9@dK!>A^sv zxY9#OL=1!wS>7l}DY3E;so{%06j(|4;DZlprWe*X>A>Nf-}n2@kMsS$Z}=-2T_iCe z0B{5b!3d3B@74Nn%*_J$cQNX?c>aPH)`=bQ3S#yhjO#QYlmde-e3fPv7nC_YKx+0Lv=Cm9>Ch>H6c;%8>hp`*a}Sk15txa|sIO zVn7H4Bhl~8mg9&M0F$(|Qajiw^0UVTBI*Wc;WtNX|i^@l0{Fol;q+&1lvX`E!u!zZNvFOsW< z%;(5QEn$94VoS7zmgow)g&w45=yfKWsbaiL2Q$RPnR#ZD1y*3svJp1HCOP0rIWO17 zMY$*36qn?5K9hIzZTtuy=V$p9e#dEZdYnGzi1V%Uw_p(}1fS3=3=5OOnph}$#DF*| zPKXQQnq-k2l1J*6qQ%mf^jX@GGv#8rR=zF|$j{_i`KK$#Rpsh+jk%^=UtAkSP~0k#{ZAuYYF|%*F~`334+*=!J^%m! diff --git a/public/fonts/pokemon-emerald-pro.ttf b/public/fonts/pokemon-emerald-pro.ttf index 84e49ebbc40def70813370e460324d84e021cc69..e4ee49dbff37948936b7770f697ab143b9f434d5 100644 GIT binary patch delta 4252 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 delta 3617 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 Ku>OPyfd2zVR<#!Z