From 9f8e9de9676ae965af8e5d5275375cb03a58f3ff Mon Sep 17 00:00:00 2001 From: DanStevensonx <114961842+DanStevensonx@users.noreply.github.com> Date: Sun, 15 Sep 2024 01:12:05 +0200 Subject: [PATCH 01/23] Update menu.json (#4258) Added a line-break to the server connection error in Spanish --- src/locales/es/menu.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/es/menu.json b/src/locales/es/menu.json index ef1ae93dd82..a35025819fa 100644 --- a/src/locales/es/menu.json +++ b/src/locales/es/menu.json @@ -51,7 +51,7 @@ "renamePokemon": "Renombrar Pokémon.", "rename": "Renombrar", "nickname": "Apodo", - "errorServerDown": "¡Ups! Ha habido un problema al contactar con el servidor.\n\nPuedes mantener esta ventana abierta, el juego se reconectará automáticamente.", + "errorServerDown": "¡Ups! Ha habido un problema al contactar con el servidor.\n\nPuedes mantener esta ventana abierta,\nel juego se reconectará automáticamente.", "noSaves": "No tienes ninguna partida guardada registrada!", "tooManySaves": "¡Tienes demasiadas partidas guardadas registradas!" } From aecdcd34f55520c7d7226ded792901fec312fe76 Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Sun, 15 Sep 2024 01:12:55 +0200 Subject: [PATCH 02/23] [BUG] Fix a couple of bugs regarding MEs and their localization (#4261) * Fixed SURF and FLY not beeing localized in "lost at sea" Fixed Mysterious Challenger Title not beeing correct Fixed Winstrate Names not beeing localized * Revert the winstrate fix. It breaks other trainer battles for some reason... * A new way of giving the winstrates localized names (and for the future all named trainers that dont use a "initFor" method) * Updated test (with ok from ImperialSympathizer) * Made the expected value simpler * FLY and SURF can be localized much simpler --- .../encounters/lost-at-sea-encounter.ts | 5 ++-- .../mysterious-challengers-encounter.ts | 1 + src/data/trainer-config.ts | 27 +++++++++++++++---- .../encounters/lost-at-sea-encounter.test.ts | 6 ++--- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index 0f0538d7542..16568d8cb7d 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -10,6 +10,7 @@ import { applyDamageToPokemon } from "#app/data/mystery-encounters/utils/encount import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import {PokemonMove} from "#app/field/pokemon"; const OPTION_1_REQUIRED_MOVE = Moves.SURF; const OPTION_2_REQUIRED_MOVE = Moves.FLY; @@ -44,8 +45,8 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with const encounter = scene.currentBattle.mysteryEncounter!; encounter.setDialogueToken("damagePercentage", String(DAMAGE_PERCENTAGE)); - encounter.setDialogueToken("option1RequiredMove", Moves[OPTION_1_REQUIRED_MOVE]); - encounter.setDialogueToken("option2RequiredMove", Moves[OPTION_2_REQUIRED_MOVE]); + encounter.setDialogueToken("option1RequiredMove", new PokemonMove(OPTION_1_REQUIRED_MOVE).getName()); + encounter.setDialogueToken("option2RequiredMove", new PokemonMove(OPTION_2_REQUIRED_MOVE).getName()); return true; }) diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index 230f5242a36..71a44bd6852 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -87,6 +87,7 @@ export const MysteriousChallengersEncounter: MysteryEncounter = ); const e4Template = trainerPartyTemplates.ELITE_FOUR; const brutalConfig = trainerConfigs[brutalTrainerType].clone(); + brutalConfig.title = trainerConfigs[brutalTrainerType].title; brutalConfig.setPartyTemplates(e4Template); // @ts-ignore brutalConfig.partyTemplateFunc = null; // Overrides gym leader party template func diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 0323c6d43c4..8b96e3cefb8 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -255,7 +255,9 @@ export class TrainerConfig { name = i18next.t("trainerNames:rival"); } } + this.name = name; + return this; } @@ -899,6 +901,20 @@ export class TrainerConfig { return this; } + /** + * Sets a localized name for the trainer. This should only be used for trainers that dont use a "initFor" function and are considered "named" trainers + * @param name - The name of the trainer. + * @returns {TrainerConfig} The updated TrainerConfig instance. + */ + setLocalizedName(name: string): TrainerConfig { + // Check if the internationalization (i18n) system is initialized. + if (!getIsInitialized()) { + initI18n(); + } + this.name = i18next.t(`trainerNames:${name.toLowerCase()}`); + return this; + } + /** * Retrieves the title for the trainer based on the provided trainer slot and variant. * @param {TrainerSlot} trainerSlot - The slot to determine which title to use. Defaults to TrainerSlot.NONE. @@ -2270,21 +2286,22 @@ export const trainerConfigs: TrainerConfigs = { } p.pokeball = PokeballType.MASTER_BALL; })), - [TrainerType.VICTOR]: new TrainerConfig(++t).setName("Victor").setTitle("The Winstrates") + [TrainerType.VICTOR]: new TrainerConfig(++t).setTitle("The Winstrates").setLocalizedName("Victor") .setMoneyMultiplier(1) // The Winstrate trainers have total money multiplier of 6 .setPartyTemplates(trainerPartyTemplates.ONE_AVG_ONE_STRONG), - [TrainerType.VICTORIA]: new TrainerConfig(++t).setName("Victoria").setTitle("The Winstrates") + [TrainerType.VICTORIA]: new TrainerConfig(++t).setTitle("The Winstrates").setLocalizedName("Victoria") .setMoneyMultiplier(1) .setPartyTemplates(trainerPartyTemplates.ONE_AVG_ONE_STRONG), - [TrainerType.VIVI]: new TrainerConfig(++t).setName("Vivi").setTitle("The Winstrates") + [TrainerType.VIVI]: new TrainerConfig(++t).setTitle("The Winstrates").setLocalizedName("Vivi") .setMoneyMultiplier(1) .setPartyTemplates(trainerPartyTemplates.TWO_AVG_ONE_STRONG), - [TrainerType.VICKY]: new TrainerConfig(++t).setName("Vicky").setTitle("The Winstrates") + [TrainerType.VICKY]: new TrainerConfig(++t).setTitle("The Winstrates").setLocalizedName("Vicky") .setMoneyMultiplier(1) .setPartyTemplates(trainerPartyTemplates.ONE_AVG), - [TrainerType.VITO]: new TrainerConfig(++t).setName("Vito").setTitle("The Winstrates") + [TrainerType.VITO]: new TrainerConfig(++t).setTitle("The Winstrates").setLocalizedName("Vito") .setMoneyMultiplier(2) .setPartyTemplates(new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG))), [TrainerType.BUG_TYPE_SUPERFAN]: new TrainerConfig(++t).setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER) .setPartyTemplates(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE)) }; + diff --git a/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts b/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts index 5d43172f6c0..82670e32daa 100644 --- a/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts @@ -3,7 +3,6 @@ import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encount import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Biome } from "#app/enums/biome"; -import { Moves } from "#app/enums/moves"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; import GameManager from "#app/test/utils/gameManager"; @@ -16,6 +15,7 @@ import BattleScene from "#app/battle-scene"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { PartyExpPhase } from "#app/phases/party-exp-phase"; + const namespace = "mysteryEncounter:lostAtSea"; /** Blastoise for surf. Pidgeot for fly. Abra for none. */ const defaultParty = [Species.BLASTOISE, Species.PIDGEOT, Species.ABRA]; @@ -102,8 +102,8 @@ describe("Lost at Sea - Mystery Encounter", () => { const onInitResult = onInit!(scene); expect(LostAtSeaEncounter.dialogueTokens?.damagePercentage).toBe("25"); - expect(LostAtSeaEncounter.dialogueTokens?.option1RequiredMove).toBe(Moves[Moves.SURF]); - expect(LostAtSeaEncounter.dialogueTokens?.option2RequiredMove).toBe(Moves[Moves.FLY]); + expect(LostAtSeaEncounter.dialogueTokens?.option1RequiredMove).toBe("Surf"); + expect(LostAtSeaEncounter.dialogueTokens?.option2RequiredMove).toBe("Fly"); expect(onInitResult).toBe(true); }); From d8dbc471af17fe1643c7d857579b4ebd9e7e1e11 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Sat, 14 Sep 2024 16:13:32 -0700 Subject: [PATCH 03/23] [Bug][Beta] Fix Pokemon info flyout being offset on switchout after double battle (#4260) --- src/field/pokemon.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index faae3b06ba0..088d11abf90 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -592,8 +592,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Resetting properties should not be shown on the field this.setVisible(false); - // Reset field position - this.setFieldPosition(FieldPosition.CENTER); + // Remove the offset from having a Substitute active if (this.isOffsetBySubstitute()) { this.x -= this.getSubstituteOffset()[0]; this.y -= this.getSubstituteOffset()[1]; From 79fa80cfd8a20a45308311c478a2be7b48c71246 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Sat, 14 Sep 2024 16:14:37 -0700 Subject: [PATCH 04/23] [Bug][Beta] Fix error in message sequencing on critical hits (#4259) --- src/field/pokemon.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 088d11abf90..453bce71503 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2620,10 +2620,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return result; } - if (isCritical) { - this.scene.queueMessage(i18next.t("battle:hitResultCriticalHit")); - } - // In case of fatal damage, this tag would have gotten cleared before we could lapse it. const destinyTag = this.getTag(BattlerTagType.DESTINY_BOND); @@ -2666,6 +2662,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } + if (isCritical) { + this.scene.queueMessage(i18next.t("battle:hitResultCriticalHit")); + } + // want to include is.Fainted() in case multi hit move ends early, still want to render message if (source.turnData.hitsLeft === 1 || this.isFainted()) { switch (result) { From 3a683c0663237269dcfd0ecbb6ab8b7580a7821a Mon Sep 17 00:00:00 2001 From: PrabbyDD <147005742+PrabbyDD@users.noreply.github.com> Date: Sat, 14 Sep 2024 17:11:54 -0700 Subject: [PATCH 05/23] [Bug] Fix for "Moves Can Miss Against Protect, Baneful Bunker, King's Shield" (#4262) * added various tests for protect based moves, reset protect test file bc no easy way to test specifically with protect, and changes in move-effect to fix the issue * adding another non contact move test for baneful bunker * Update src/test/moves/obstruct.test.ts Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> * Update src/test/moves/baneful_bunker.test.ts Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> * Update src/test/moves/baneful_bunker.test.ts Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> * Update src/test/moves/baneful_bunker.test.ts Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> * better descriptions for baneful bunker test --------- Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> --- src/phases/move-effect-phase.ts | 31 ++++----- src/test/moves/baneful_bunker.test.ts | 93 +++++++++++++++++++++++++++ src/test/moves/obstruct.test.ts | 17 +++++ 3 files changed, 126 insertions(+), 15 deletions(-) create mode 100644 src/test/moves/baneful_bunker.test.ts diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index ffd9d45b4bd..c3199166e84 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -102,7 +102,7 @@ export class MoveEffectPhase extends PokemonPhase { * (and not random target) and failed the hit check against its target (MISS), log the move * as FAILed or MISSed (depending on the conditions above) and end this phase. */ - if (!hasActiveTargets || (!move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]])) { + if (!hasActiveTargets || (!move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]] && !targets[0].getTag(ProtectedTag))) { this.stopMultiHit(); if (hasActiveTargets) { this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: this.getTarget()? getPokemonNameWithAffix(this.getTarget()!) : "" })); @@ -125,20 +125,6 @@ export class MoveEffectPhase extends PokemonPhase { /** Has the move successfully hit a target (for damage) yet? */ let hasHit: boolean = false; for (const target of targets) { - /** - * If the move missed a target, stop all future hits against that target - * and move on to the next target (if there is one). - */ - if (!targetHitChecks[target.getBattlerIndex()]) { - this.stopMultiHit(target); - this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); - if (moveHistoryEntry.result === MoveResult.PENDING) { - moveHistoryEntry.result = MoveResult.MISS; - } - user.pushMoveHistory(moveHistoryEntry); - applyMoveAttrs(MissEffectAttr, user, null, move); - continue; - } /** The {@linkcode ArenaTagSide} to which the target belongs */ const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; @@ -156,6 +142,21 @@ export class MoveEffectPhase extends PokemonPhase { && (hasConditionalProtectApplied.value || (!target.findTags(t => t instanceof DamageProtectedTag).length && target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) || (this.move.getMove().category !== MoveCategory.STATUS && target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))); + /** + * If the move missed a target, stop all future hits against that target + * and move on to the next target (if there is one). + */ + if (!isProtected && !targetHitChecks[target.getBattlerIndex()]) { + this.stopMultiHit(target); + this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); + if (moveHistoryEntry.result === MoveResult.PENDING) { + moveHistoryEntry.result = MoveResult.MISS; + } + user.pushMoveHistory(moveHistoryEntry); + applyMoveAttrs(MissEffectAttr, user, null, move); + continue; + } + /** Does this phase represent the invoked move's first strike? */ const firstHit = (user.turnData.hitsLeft === user.turnData.hitCount); diff --git a/src/test/moves/baneful_bunker.test.ts b/src/test/moves/baneful_bunker.test.ts new file mode 100644 index 00000000000..c4a3036565c --- /dev/null +++ b/src/test/moves/baneful_bunker.test.ts @@ -0,0 +1,93 @@ +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; +import GameManager from "../utils/gameManager"; +import { Species } from "#enums/species"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { BattlerIndex } from "#app/battle"; +import { StatusEffect } from "#app/enums/status-effect"; + +const TIMEOUT = 20 * 1000; + +describe("Moves - Baneful Bunker", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override.battleType("single"); + + game.override.moveset(Moves.SLASH); + + game.override.enemySpecies(Species.SNORLAX); + game.override.enemyAbility(Abilities.INSOMNIA); + game.override.enemyMoveset(Moves.BANEFUL_BUNKER); + + game.override.startingLevel(100); + game.override.enemyLevel(100); + }); + test( + "should protect the user and poison attackers that make contact", + async () => { + await game.classicMode.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.SLASH); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to("BerryPhase", false); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + expect(leadPokemon.status?.effect === StatusEffect.POISON).toBeTruthy(); + }, TIMEOUT + ); + test( + "should protect the user and poison attackers that make contact, regardless of accuracy checks", + async () => { + await game.classicMode.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.SLASH); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to("MoveEffectPhase"); + + await game.move.forceMiss(); + await game.phaseInterceptor.to("BerryPhase", false); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + expect(leadPokemon.status?.effect === StatusEffect.POISON).toBeTruthy(); + }, TIMEOUT + ); + + test( + "should not poison attackers that don't make contact", + async () => { + game.override.moveset(Moves.FLASH_CANNON); + await game.classicMode.startBattle([Species.CHARIZARD]); + + const leadPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.FLASH_CANNON); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to("MoveEffectPhase"); + + await game.move.forceMiss(); + await game.phaseInterceptor.to("BerryPhase", false); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + expect(leadPokemon.status?.effect === StatusEffect.POISON).toBeFalsy(); + }, TIMEOUT + ); +}); diff --git a/src/test/moves/obstruct.test.ts b/src/test/moves/obstruct.test.ts index 539b11090de..eb12daa785d 100644 --- a/src/test/moves/obstruct.test.ts +++ b/src/test/moves/obstruct.test.ts @@ -43,6 +43,23 @@ describe("Moves - Obstruct", () => { expect(enemy.getStatStage(Stat.DEF)).toBe(-2); }, TIMEOUT); + it("bypasses accuracy checks when applying protection and defense reduction", async () => { + game.override.enemyMoveset(Array(4).fill(Moves.ICE_PUNCH)); + await game.classicMode.startBattle(); + + game.move.select(Moves.OBSTRUCT); + await game.phaseInterceptor.to("MoveEffectPhase"); + await game.move.forceMiss(); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(player.isFullHp()).toBe(true); + expect(enemy.getStatStage(Stat.DEF)).toBe(-2); + }, TIMEOUT + ); + it("protects from non-contact damaging moves and doesn't lower the opponent's defense by 2 stages", async () => { game.override.enemyMoveset(Array(4).fill(Moves.WATER_GUN)); await game.classicMode.startBattle(); From 540a1c3e21be8af146b2a636f1410e5572d5e0a7 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Sat, 14 Sep 2024 21:32:43 -0400 Subject: [PATCH 06/23] [Balance] Rework some evolutions (#2732) * Changes some evolutions * more work * Give Onix Iron Defense at 30 * Sirfetch'd and Gholdengo, pause any evolutions * Fix pause evolution text * adjust wild evolution delay * Add localization keys, clean up evo pausing * Clean up evo delays * Adjust friendship evos, Leader's Crest sprite by chaosgrimmon * Fix Nugget crash * Fixed Gimmighoul fr * Move Charcadet armors to common * Locale migration, Lilligant shiny stone * Cleanup * Fix language migration error * Change Cosmog line evo method * Undo Ursaluna being night only * Evo items roll during evo pause on Eevee * Make all time based evos use dusk and dawn times * Fix paused and unpaused evolution texts being reversed * Fixed evolution delays * Moved up Mimic in Mime Jr's moveset * Remove Cosmoem time conditions, add Gimmighoul tracker * Remove tracker after Gimmighoul evo * Change Scyther Steel Wing back to 30, mark custom --- public/images/items/leaders_crest.png | Bin 0 -> 694 bytes public/images/items/moon_flute.png | Bin 0 -> 555 bytes public/images/items/sun_flute.png | Bin 0 -> 582 bytes src/data/pokemon-evolutions.ts | 148 ++++++++++++++------------ src/data/pokemon-level-moves.ts | 8 +- src/field/pokemon.ts | 10 +- src/locales/en/modifier-type.json | 17 +++ src/locales/en/party-ui-handler.json | 2 + src/modifier/modifier-type.ts | 6 +- src/modifier/modifier.ts | 46 +++++++- src/system/pokemon-data.ts | 3 + src/ui/party-ui-handler.ts | 8 +- 12 files changed, 172 insertions(+), 76 deletions(-) create mode 100644 public/images/items/leaders_crest.png create mode 100644 public/images/items/moon_flute.png create mode 100644 public/images/items/sun_flute.png diff --git a/public/images/items/leaders_crest.png b/public/images/items/leaders_crest.png new file mode 100644 index 0000000000000000000000000000000000000000..45cf16563747dba7846f52f46a51df81af69b261 GIT binary patch literal 694 zcmV;n0!jUeP)Px#1ZP1_K>z@;j|==^1poj7MoC0LR9HvtmN95kQ51%cfgplp5fs|NAnl+grAXr< z5tl%5YX%8qFccIF4y6@Du!|1jP%K0uC`cBebm-Pnh)ya9aVTx*B1i@mS}2rKa44w! zC+~l~$;(S#US2_HK6t#Fo0oj&oO|y{q|dSEgmv$kXf*oQ8cMBJ)9*Fs2;U=t1OQRt z_IVwD{{CAQK5pyy%Zs>F*7kJ#x^i0X+Gz&0v?ngxNoR_Rtom@4nTwcf)r8%pN=`{Lt(nfBfpb&Uq!U3UD8s+%4;U zr&7}Fx%R_D7aipXz5?i!J>*{Lx(`qu9>~hK7oVA`3x%1|aW)E6zKH{qa zkQ0{PloRayPIOfPWdH5coQ}=x%`*>>J$Js_+7r(efV^5=w_epTJuN<@tAb#nxj?HXYY7m5&G<*T%#h3L~ zOVCgVju!|*OdJ6;w_8dpFAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-u}MThRCwCdmLX5WP!xr~M=JOU%uzX9=Ll}{$$}!d;riU_7UbOOTE`rjTjd;e z%iQL8^5NE>P*=p(hC*2vRs=U`(&W9IlXLGqrxkgg^OtqTAD30U^m;vj&vL{m!0Yw8 zN&w`quS>K}F($%z&5B;M(I>NInw?6Z<6z z(2A0;TT~%wLrLA5wyNYOAGD^#I&daT?B@X!GMxc%-d!;am&FPnGqg?t2*Y_}%ML0ifW}dTlrHzuLF<%p6fyEV zg2c2Fc9)JU!HXJ45kTYMk0QA0oLAIrb;8K=$n>IdyAHN!W40_7F#vCl8#F+t+ebf*ZA3qXG9 z$OPFK#~C>GuRoch<|)sV tx-G#?>{lFa(N2kdTljIv|MsuqV*px@<{k~r6czvg002ovPDHLkV1hC*`4j*E literal 0 HcmV?d00001 diff --git a/public/images/items/sun_flute.png b/public/images/items/sun_flute.png new file mode 100644 index 0000000000000000000000000000000000000000..b7cbcdf5569e04fed086f61bb561ea7c6ea104e6 GIT binary patch literal 582 zcmV-M0=fN(P)pFAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-%t=H+RCwCdmLYW7P!xv0*E5kg<`UP)$oJfs0@*omJyV>zNpKm8#kFz{D(i|{ zTvJuz@?>P@z^#tBR0KE#80ly#cGWxQo^${F_ul`%5qX~To^i%I$A|SpDFv`iN4%wQ z9LIYM@}~!nc;qndunSgCi_F;_%jPAMz+f!1T0lww_m2&d!I0};eN@M-g~>L6@I%cc zY1GPOcZ)=nWwkOnw5DYyj#V%@5#(<=*f25E1=nLqpl!Ui{AZA3LKA+dxqoahxYG2; zJ(6^>%_Ofw$-)mc?WPO!5ZAE?v`xo(J)0_k{OQ4?+X6Gqxab+UjzxcTzRTuxFEVEV zvDU;|7a-mR!EFXW`YhknqQW|~MoEd1l6V@yJS0gM%;$gTww^0loK=1Oq3Dm!vF(p6 z9SbFod)HBbAGZrgv;BnK=6lcLX85~OCt`hYR(8GDrg*e!4WK%oR-VPCO+P)GW%Ckq zc1NsJuBJuZLw0>ImW~0AQ7RtJ5~k^#jTpDQYj=Gsb@2IX#3V3?wdR|j&}~7KW$S|^ z{7?fh_;OR|<%E+dqAWv6NxSKyhI%irhUupG3Q)Xu2BmpaoYGQ$Jp=LI|5dyU0HuxT UXL3}E?f?J)07*qoM6N<$f true /* King's Rock */), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.SLOWKING, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.MAGNEMITE]: [ new SpeciesEvolution(Species.MAGNETON, 30, null, null) @@ -249,8 +265,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.ELECTRODE, 30, null, null) ], [Species.CUBONE]: [ - new SpeciesEvolution(Species.ALOLA_MAROWAK, 28, null, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.ISLAND || p.scene.arena.biomeType === Biome.BEACH), SpeciesWildEvolutionDelay.MEDIUM), - new SpeciesEvolution(Species.MAROWAK, 28, null, null) + new SpeciesEvolution(Species.ALOLA_MAROWAK, 28, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), + new SpeciesEvolution(Species.MAROWAK, 28, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) ], [Species.TYROGUE]: [ new SpeciesEvolution(Species.HITMONLEE, 20, null, new SpeciesEvolutionCondition(p => p.stats[Stat.ATK] > p.stats[Stat.DEF])), @@ -258,8 +274,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.HITMONTOP, 20, null, new SpeciesEvolutionCondition(p => p.stats[Stat.ATK] === p.stats[Stat.DEF])) ], [Species.KOFFING]: [ - new SpeciesEvolution(Species.GALAR_WEEZING, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.METROPOLIS || p.scene.arena.biomeType === Biome.SLUM), SpeciesWildEvolutionDelay.MEDIUM), - new SpeciesEvolution(Species.WEEZING, 35, null, null) + new SpeciesEvolution(Species.GALAR_WEEZING, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), + new SpeciesEvolution(Species.WEEZING, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) ], [Species.RHYHORN]: [ new SpeciesEvolution(Species.RHYDON, 42, null, null) @@ -304,7 +320,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.QUILAVA, 14, null, null) ], [Species.QUILAVA]: [ - new SpeciesEvolution(Species.HISUI_TYPHLOSION, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(Species.HISUI_TYPHLOSION, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), new SpeciesEvolution(Species.TYPHLOSION, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) ], [Species.TOTODILE]: [ @@ -652,7 +668,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.DEWOTT, 17, null, null) ], [Species.DEWOTT]: [ - new SpeciesEvolution(Species.HISUI_SAMUROTT, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(Species.HISUI_SAMUROTT, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), new SpeciesEvolution(Species.SAMUROTT, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) ], [Species.PATRAT]: [ @@ -800,10 +816,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.BISHARP, 52, null, null) ], [Species.BISHARP]: [ - new SpeciesEvolution(Species.KINGAMBIT, 64, null, null) + new SpeciesEvolution(Species.KINGAMBIT, 1, EvolutionItem.LEADERS_CREST, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.RUFFLET]: [ - new SpeciesEvolution(Species.HISUI_BRAVIARY, 54, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(Species.HISUI_BRAVIARY, 54, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), new SpeciesEvolution(Species.BRAVIARY, 54, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) ], [Species.VULLABY]: [ @@ -883,20 +899,20 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.CLAWITZER, 37, null, null) ], [Species.TYRUNT]: [ - new SpeciesEvolution(Species.TYRANTRUM, 39, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.TYRANTRUM, 39, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) ], [Species.AMAURA]: [ - new SpeciesEvolution(Species.AURORUS, 39, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) + new SpeciesEvolution(Species.AURORUS, 39, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) ], [Species.GOOMY]: [ - new SpeciesEvolution(Species.HISUI_SLIGGOO, 40, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(Species.HISUI_SLIGGOO, 40, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), new SpeciesEvolution(Species.SLIGGOO, 40, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) ], [Species.SLIGGOO]: [ new SpeciesEvolution(Species.GOODRA, 50, null, new SpeciesEvolutionCondition(p => [ WeatherType.RAIN, WeatherType.FOG, WeatherType.HEAVY_RAIN ].indexOf(p.scene.arena.weather?.weatherType || WeatherType.NONE) > -1), SpeciesWildEvolutionDelay.LONG) ], [Species.BERGMITE]: [ - new SpeciesEvolution(Species.HISUI_AVALUGG, 37, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(Species.HISUI_AVALUGG, 37, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), new SpeciesEvolution(Species.AVALUGG, 37, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) ], [Species.NOIBAT]: [ @@ -906,7 +922,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.DARTRIX, 17, null, null) ], [Species.DARTRIX]: [ - new SpeciesEvolution(Species.HISUI_DECIDUEYE, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(Species.HISUI_DECIDUEYE, 36, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), new SpeciesEvolution(Species.DECIDUEYE, 34, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) ], [Species.LITTEN]: [ @@ -928,7 +944,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.TOUCANNON, 28, null, null) ], [Species.YUNGOOS]: [ - new SpeciesEvolution(Species.GUMSHOOS, 20, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.GUMSHOOS, 20, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) ], [Species.GRUBBIN]: [ new SpeciesEvolution(Species.CHARJABUG, 20, null, null) @@ -946,7 +962,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.ARAQUANID, 22, null, null) ], [Species.FOMANTIS]: [ - new SpeciesEvolution(Species.LURANTIS, 34, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) + new SpeciesEvolution(Species.LURANTIS, 34, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) ], [Species.MORELULL]: [ new SpeciesEvolution(Species.SHIINOTIC, 24, null, null) @@ -973,17 +989,17 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.KOMMO_O, 45, null, null) ], [Species.COSMOG]: [ - new SpeciesEvolution(Species.COSMOEM, 43, null, null) + new SpeciesEvolution(Species.COSMOEM, 23, null, null) ], [Species.COSMOEM]: [ - new SpeciesEvolution(Species.SOLGALEO, 53, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)), - new SpeciesEvolution(Species.LUNALA, 53, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) + new SpeciesEvolution(Species.SOLGALEO, 53, EvolutionItem.SUN_FLUTE, null, SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesEvolution(Species.LUNALA, 53, EvolutionItem.MOON_FLUTE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.MELTAN]: [ new SpeciesEvolution(Species.MELMETAL, 48, null, null) ], [Species.ALOLA_RATTATA]: [ - new SpeciesEvolution(Species.ALOLA_RATICATE, 20, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) + new SpeciesEvolution(Species.ALOLA_RATICATE, 20, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) ], [Species.ALOLA_DIGLETT]: [ new SpeciesEvolution(Species.ALOLA_DUGTRIO, 26, null, null) @@ -1090,7 +1106,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.GALAR_RAPIDASH, 40, null, null) ], [Species.GALAR_FARFETCHD]: [ - new SpeciesEvolution(Species.SIRFETCHD, 30, null, null) + new SpeciesEvolution(Species.SIRFETCHD, 30, null, null, SpeciesWildEvolutionDelay.LONG) ], [Species.GALAR_SLOWPOKE]: [ new SpeciesEvolution(Species.GALAR_SLOWBRO, 1, EvolutionItem.GALARICA_CUFF, null, SpeciesWildEvolutionDelay.VERY_LONG), @@ -1106,7 +1122,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.GALAR_LINOONE, 20, null, null) ], [Species.GALAR_LINOONE]: [ - new SpeciesEvolution(Species.OBSTAGOON, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) + new SpeciesEvolution(Species.OBSTAGOON, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) ], [Species.GALAR_YAMASK]: [ new SpeciesEvolution(Species.RUNERIGUS, 34, null, null) @@ -1214,7 +1230,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.GLIMMORA, 35, null, null) ], [Species.GREAVARD]: [ - new SpeciesEvolution(Species.HOUNDSTONE, 30, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) + new SpeciesEvolution(Species.HOUNDSTONE, 30, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)) ], [Species.FRIGIBAX]: [ new SpeciesEvolution(Species.ARCTIBAX, 35, null, null) @@ -1226,8 +1242,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.CLODSIRE, 20, null, null) ], [Species.PIKACHU]: [ - new SpeciesFormEvolution(Species.ALOLA_RAICHU, "", "", 1, EvolutionItem.THUNDER_STONE, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.ISLAND || p.scene.arena.biomeType === Biome.BEACH), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ALOLA_RAICHU, "partner", "", 1, EvolutionItem.THUNDER_STONE, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.ISLAND || p.scene.arena.biomeType === Biome.BEACH), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALOLA_RAICHU, "", "", 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ALOLA_RAICHU, "partner", "", 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(Species.RAICHU, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(Species.RAICHU, "partner", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], @@ -1255,7 +1271,7 @@ export const pokemonEvolutions: PokemonEvolutions = { ], [Species.POLIWHIRL]: [ new SpeciesEvolution(Species.POLIWRATH, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), - new SpeciesEvolution(Species.POLITOED, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* King's Rock */), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.POLITOED, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.WEEPINBELL]: [ new SpeciesEvolution(Species.VICTREEBEL, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1267,7 +1283,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.CLOYSTER, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.EXEGGCUTE]: [ - new SpeciesEvolution(Species.ALOLA_EXEGGUTOR, 1, EvolutionItem.LEAF_STONE, new SpeciesEvolutionCondition(p => p.scene.arena.biomeType === Biome.ISLAND || p.scene.arena.biomeType === Biome.BEACH), SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(Species.ALOLA_EXEGGUTOR, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG), new SpeciesEvolution(Species.EXEGGUTOR, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.TANGELA]: [ @@ -1280,12 +1296,12 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.STARMIE, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.EEVEE]: [ - new SpeciesFormEvolution(Species.SYLVEON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(70, p => !!p.getMoveset().find(m => m?.getMove().type === Type.FAIRY)), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.SYLVEON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(70, p => !!p.getMoveset().find(m => m?.getMove().type === Type.FAIRY)), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ESPEON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(70, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.ESPEON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(70, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.UMBREON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(70, p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.UMBREON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(70, p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.SYLVEON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => !!p.getMoveset().find(m => m?.getMove().type === Type.FAIRY)), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.SYLVEON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => !!p.getMoveset().find(m => m?.getMove().type === Type.FAIRY)), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ESPEON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.ESPEON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.UMBREON, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG), + new SpeciesFormEvolution(Species.UMBREON, "partner", "", 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(Species.VAPOREON, "", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(Species.VAPOREON, "partner", "", 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG), new SpeciesFormEvolution(Species.JOLTEON, "", "", 1, EvolutionItem.THUNDER_STONE, null, SpeciesWildEvolutionDelay.LONG), @@ -1329,10 +1345,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.DUDUNSPARCE, 32, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.HYPER_DRILL).length > 0), SpeciesWildEvolutionDelay.LONG) ], [Species.GLIGAR]: [ - new SpeciesEvolution(Species.GLISCOR, 1, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT /* Razor fang at night*/), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.GLISCOR, 1, EvolutionItem.RAZOR_FANG, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT /* Razor fang at night*/), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.SNEASEL]: [ - new SpeciesEvolution(Species.WEAVILE, 1, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT /* Razor claw at night*/), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.WEAVILE, 1, EvolutionItem.RAZOR_CLAW, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT /* Razor claw at night*/), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.URSARING]: [ new SpeciesEvolution(Species.URSALUNA, 1, EvolutionItem.PEAT_BLOCK, null, SpeciesWildEvolutionDelay.VERY_LONG) //Ursaring does not evolve into Bloodmoon Ursaluna @@ -1362,8 +1378,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.SUDOWOODO, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.MIME_JR]: [ - new SpeciesEvolution(Species.GALAR_MR_MIME, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0 && (p.scene.arena.biomeType === Biome.ICE_CAVE || p.scene.arena.biomeType === Biome.SNOWY_FOREST)), SpeciesWildEvolutionDelay.MEDIUM), - new SpeciesEvolution(Species.MR_MIME, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.GALAR_MR_MIME, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0 && (p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), SpeciesWildEvolutionDelay.MEDIUM), + new SpeciesEvolution(Species.MR_MIME, 1, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.MIMIC).length > 0 && (p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.PANSAGE]: [ new SpeciesEvolution(Species.SIMISAGE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1381,8 +1397,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.WHIMSICOTT, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.PETILIL]: [ - new SpeciesEvolution(Species.HISUI_LILLIGANT, 1, EvolutionItem.SUN_STONE, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesEvolution(Species.LILLIGANT, 1, EvolutionItem.SUN_STONE, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.HISUI_LILLIGANT, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.LONG), + new SpeciesEvolution(Species.LILLIGANT, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.BASCULIN]: [ new SpeciesFormEvolution(Species.BASCULEGION, "white-striped", "female", 40, null, new SpeciesEvolutionCondition(p => p.gender === Gender.FEMALE, p => p.gender = Gender.FEMALE), SpeciesWildEvolutionDelay.VERY_LONG), @@ -1435,7 +1451,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.APPLETUN, 1, EvolutionItem.SWEET_APPLE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.CLOBBOPUS]: [ - new SpeciesEvolution(Species.GRAPPLOCT, 35, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.TAUNT).length > 0), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.GRAPPLOCT, 35, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.TAUNT).length > 0)/*Once Taunt is implemented, change evo level to 1 and delay to LONG*/) ], [Species.SINISTEA]: [ new SpeciesFormEvolution(Species.POLTEAGEIST, "phony", "phony", 1, EvolutionItem.CRACKED_POT, null, SpeciesWildEvolutionDelay.LONG), @@ -1472,7 +1488,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.OVERQWIL, 28, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.BARB_BARRAGE).length > 0), SpeciesWildEvolutionDelay.LONG) ], [Species.HISUI_SNEASEL]: [ - new SpeciesEvolution(Species.SNEASLER, 1, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAY /* Razor claw at day*/), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.SNEASLER, 1, EvolutionItem.RAZOR_CLAW, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY /* Razor claw at day*/), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.CHARCADET]: [ new SpeciesEvolution(Species.ARMAROUGE, 1, EvolutionItem.AUSPICIOUS_ARMOR, null, SpeciesWildEvolutionDelay.LONG), @@ -1512,10 +1528,10 @@ export const pokemonEvolutions: PokemonEvolutions = { SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.RHYDON]: [ - new SpeciesEvolution(Species.RHYPERIOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Protector */), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.RHYPERIOR, 1, EvolutionItem.PROTECTOR, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.SEADRA]: [ - new SpeciesEvolution(Species.KINGDRA, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Dragon scale*/), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.KINGDRA, 1, EvolutionItem.DRAGON_SCALE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.SCYTHER]: [ new SpeciesEvolution(Species.SCIZOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition( @@ -1524,22 +1540,22 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.KLEAVOR, 1, EvolutionItem.BLACK_AUGURITE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.ELECTABUZZ]: [ - new SpeciesEvolution(Species.ELECTIVIRE, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Electirizer*/), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.ELECTIVIRE, 1, EvolutionItem.ELECTIRIZER, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.MAGMAR]: [ - new SpeciesEvolution(Species.MAGMORTAR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Magmarizer*/), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.MAGMORTAR, 1, EvolutionItem.MAGMARIZER, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.PORYGON]: [ - new SpeciesEvolution(Species.PORYGON2, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /*Upgrade*/), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.PORYGON2, 1, EvolutionItem.UPGRADE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.PORYGON2]: [ - new SpeciesEvolution(Species.PORYGON_Z, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Dubious disc*/), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.PORYGON_Z, 1, EvolutionItem.DUBIOUS_DISC, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.FEEBAS]: [ - new SpeciesEvolution(Species.MILOTIC, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Prism scale*/), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.MILOTIC, 1, EvolutionItem.PRISM_SCALE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.DUSCLOPS]: [ - new SpeciesEvolution(Species.DUSKNOIR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /* Reaper cloth*/), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.DUSKNOIR, 1, EvolutionItem.REAPER_CLOTH, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.CLAMPERL]: [ new SpeciesEvolution(Species.HUNTAIL, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => p.gender === Gender.MALE, p => p.gender = Gender.MALE /* Deep Sea Tooth */), SpeciesWildEvolutionDelay.VERY_LONG), @@ -1558,10 +1574,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.ACCELGOR, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => !!p.scene.gameData.dexData[Species.KARRABLAST].caughtAttr), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.SPRITZEE]: [ - new SpeciesEvolution(Species.AROMATISSE, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /*Sachet*/), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.AROMATISSE, 1, EvolutionItem.SACHET, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.SWIRLIX]: [ - new SpeciesEvolution(Species.SLURPUFF, 1, EvolutionItem.LINKING_CORD, new SpeciesEvolutionCondition(p => true /*Whipped Dream*/), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.SLURPUFF, 1, EvolutionItem.WHIPPED_DREAM, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.PHANTUMP]: [ new SpeciesEvolution(Species.TREVENANT, 1, EvolutionItem.LINKING_CORD, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1576,7 +1592,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.ANNIHILAPE, 35, null, new SpeciesEvolutionCondition(p => p.moveset.filter(m => m?.moveId === Moves.RAGE_FIST).length > 0), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.GOLBAT]: [ - new SpeciesEvolution(Species.CROBAT, 1, null, new SpeciesFriendshipEvolutionCondition(110), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.CROBAT, 1, null, new SpeciesFriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.CHANSEY]: [ new SpeciesEvolution(Species.BLISSEY, 1, null, new SpeciesFriendshipEvolutionCondition(200), SpeciesWildEvolutionDelay.LONG) @@ -1610,29 +1626,29 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.CHANSEY, 1, null, new SpeciesFriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT) ], [Species.MUNCHLAX]: [ - new SpeciesEvolution(Species.SNORLAX, 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.SNORLAX, 1, null, new SpeciesFriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) ], [Species.RIOLU]: [ - new SpeciesEvolution(Species.LUCARIO, 1, null, new SpeciesFriendshipEvolutionCondition(90, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.LUCARIO, 1, null, new SpeciesFriendshipEvolutionCondition(120, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY), SpeciesWildEvolutionDelay.LONG) ], [Species.WOOBAT]: [ - new SpeciesEvolution(Species.SWOOBAT, 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.SWOOBAT, 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.SWADLOON]: [ - new SpeciesEvolution(Species.LEAVANNY, 1, null, new SpeciesFriendshipEvolutionCondition(110), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.LEAVANNY, 1, null, new SpeciesFriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) ], [Species.TYPE_NULL]: [ - new SpeciesEvolution(Species.SILVALLY, 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.SILVALLY, 1, null, new SpeciesFriendshipEvolutionCondition(100), SpeciesWildEvolutionDelay.LONG) ], [Species.ALOLA_MEOWTH]: [ - new SpeciesEvolution(Species.ALOLA_PERSIAN, 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.ALOLA_PERSIAN, 1, null, new SpeciesFriendshipEvolutionCondition(120), SpeciesWildEvolutionDelay.LONG) ], [Species.SNOM]: [ new SpeciesEvolution(Species.FROSMOTH, 1, null, new SpeciesFriendshipEvolutionCondition(90, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.GIMMIGHOUL]: [ - new SpeciesFormEvolution(Species.GHOLDENGO, "chest", "", 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.VERY_LONG), - new SpeciesFormEvolution(Species.GHOLDENGO, "roaming", "", 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesFormEvolution(Species.GHOLDENGO, "chest", "", 1, null, new SpeciesEvolutionCondition( p => p.evoCounter > 9 ), SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesFormEvolution(Species.GHOLDENGO, "roaming", "", 1, null, new SpeciesEvolutionCondition( p => p.evoCounter > 9 ), SpeciesWildEvolutionDelay.VERY_LONG) ] }; diff --git a/src/data/pokemon-level-moves.ts b/src/data/pokemon-level-moves.ts index 93bd57ae32c..b56bab724be 100644 --- a/src/data/pokemon-level-moves.ts +++ b/src/data/pokemon-level-moves.ts @@ -1609,6 +1609,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 12, Moves.DRAGON_BREATH ], [ 16, Moves.CURSE ], [ 20, Moves.ROCK_SLIDE ], + [ 22, Moves.GYRO_BALL ], //Custom, from USUM [ 24, Moves.SCREECH ], [ 28, Moves.SAND_TOMB ], [ 32, Moves.STEALTH_ROCK ], @@ -2121,7 +2122,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.DOUBLE_HIT ], [ 24, Moves.SLASH ], [ 28, Moves.FOCUS_ENERGY ], - [ 30, Moves.STEEL_WING ], + [ 30, Moves.STEEL_WING ], //Custom [ 32, Moves.AGILITY ], [ 36, Moves.AIR_SLASH ], [ 40, Moves.X_SCISSOR ], @@ -7549,14 +7550,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.POUND ], [ 1, Moves.COPYCAT ], [ 1, Moves.BARRIER ], + [ 1, Moves.TICKLE ], //USUM [ 4, Moves.BATON_PASS ], [ 8, Moves.ENCORE ], [ 12, Moves.CONFUSION ], - [ 16, Moves.ROLE_PLAY ], + [ 16, Moves.MIMIC ], //Custom, swapped with Role Play to be closer to USUM [ 20, Moves.PROTECT ], [ 24, Moves.RECYCLE ], [ 28, Moves.PSYBEAM ], - [ 32, Moves.MIMIC ], + [ 32, Moves.ROLE_PLAY ], //Custom, swapped with Mimic [ 36, Moves.LIGHT_SCREEN ], [ 36, Moves.REFLECT ], [ 36, Moves.SAFEGUARD ], diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 453bce71503..9c8c1e6ce46 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -10,7 +10,7 @@ import * as Utils from "../utils"; import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from "../data/type"; import { getLevelTotalExp } from "../data/exp"; import { Stat, type PermanentStat, type BattleStat, type EffectiveStat, PERMANENT_STATS, BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat"; -import { DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, BaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempStatStageBoosterModifier, TempCritBoosterModifier, StatBoosterModifier, CritBoosterModifier, TerastallizeModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonIncrementingStatModifier } from "../modifier/modifier"; +import { DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, BaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempStatStageBoosterModifier, TempCritBoosterModifier, StatBoosterModifier, CritBoosterModifier, TerastallizeModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonIncrementingStatModifier, EvoTrackerModifier } from "../modifier/modifier"; import { PokeballType } from "../data/pokeball"; import { Gender } from "../data/gender"; import { initMoveAnim, loadMoveAnimAssets } from "../data/battle-anims"; @@ -99,6 +99,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public pauseEvolutions: boolean; public pokerus: boolean; public wildFlee: boolean; + public evoCounter: integer; public fusionSpecies: PokemonSpecies | null; public fusionFormIndex: integer; @@ -195,6 +196,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.metSpecies = dataSource.metSpecies ?? (this.metBiome !== -1 ? this.species.speciesId : this.species.getRootSpeciesId(true)); this.pauseEvolutions = dataSource.pauseEvolutions; this.pokerus = !!dataSource.pokerus; + this.evoCounter = dataSource.evoCounter ?? 0; this.fusionSpecies = dataSource.fusionSpecies instanceof PokemonSpecies ? dataSource.fusionSpecies : dataSource.fusionSpecies ? getPokemonSpecies(dataSource.fusionSpecies) : null; this.fusionFormIndex = dataSource.fusionFormIndex; this.fusionAbilityIndex = dataSource.fusionAbilityIndex; @@ -4046,6 +4048,12 @@ export class PlayerPokemon extends Pokemon { this.updateInfo(true).then(() => resolve()); }); }; + if (preEvolution.speciesId === Species.GIMMIGHOUL) { + const evotracker = this.getHeldItems().filter(m => m instanceof EvoTrackerModifier)[0] ?? null; + if (evotracker) { + this.scene.removeModifier(evotracker); + } + } if (!this.scene.gameMode.isDaily || this.metBiome > -1) { this.scene.gameData.updateSpeciesDexIvs(this.species.speciesId, this.ivs); this.scene.gameData.setPokemonSeen(this, false); diff --git a/src/locales/en/modifier-type.json b/src/locales/en/modifier-type.json index b57073325dc..c362b3f30d4 100644 --- a/src/locales/en/modifier-type.json +++ b/src/locales/en/modifier-type.json @@ -240,6 +240,8 @@ "TOXIC_ORB": { "name": "Toxic Orb", "description": "It's a bizarre orb that exudes toxins when touched and will badly poison the holder during battle." }, "FLAME_ORB": { "name": "Flame Orb", "description": "It's a bizarre orb that gives off heat when touched and will affect the holder with a burn during battle." }, + "EVOLUTION_TRACKER_GIMMIGHOUL": { "name": "Treasures", "description": "This Pokémon loves treasure! Keep collecting treasure and something might happen!"}, + "BATON": { "name": "Baton", "description": "Allows passing along effects when switching Pokémon, which also bypasses traps." }, "SHINY_CHARM": { "name": "Shiny Charm", "description": "Dramatically increases the chance of a wild Pokémon being Shiny." }, @@ -330,6 +332,21 @@ "TART_APPLE": "Tart Apple", "STRAWBERRY_SWEET": "Strawberry Sweet", "UNREMARKABLE_TEACUP": "Unremarkable Teacup", + "UPGRADE": "Upgrade", + "DUBIOUS_DISC": "Dubious Disc", + "DRAGON_SCALE": "Dragon Scale", + "PRISM_SCALE": "Prism Scale", + "RAZOR_CLAW": "Razor Claw", + "RAZOR_FANG": "Razor Fang", + "REAPER_CLOTH": "Reaper Cloth", + "ELECTIRIZER": "Electirizer", + "MAGMARIZER": "Magmarizer", + "PROTECTOR": "Protector", + "SACHET": "Sachet", + "WHIPPED_DREAM": "Whipped Dream", + "LEADERS_CREST": "Leader's Crest", + "SUN_FLUTE": "Sun Flute", + "MOON_FLUTE": "Moon Flute", "CHIPPED_POT": "Chipped Pot", "BLACK_AUGURITE": "Black Augurite", diff --git a/src/locales/en/party-ui-handler.json b/src/locales/en/party-ui-handler.json index 338bdfaec80..8e6e8046c7e 100644 --- a/src/locales/en/party-ui-handler.json +++ b/src/locales/en/party-ui-handler.json @@ -13,6 +13,7 @@ "ALL": "All", "PASS_BATON": "Pass Baton", "UNPAUSE_EVOLUTION": "Unpause Evolution", + "PAUSE_EVOLUTION": "Pause Evolution", "REVIVE": "Revive", "RENAME": "Rename", "SELECT": "Select", @@ -24,6 +25,7 @@ "tooManyItems": "{{pokemonName}} has too many\nof this item!", "anyEffect": "It won't have any effect.", "unpausedEvolutions": "Evolutions have been unpaused for {{pokemonName}}.", + "pausedEvolutions": "Evolutions have been paused for {{pokemonName}}.", "unspliceConfirmation": "Do you really want to unsplice {{fusionName}}\nfrom {{pokemonName}}? {{fusionName}} will be lost.", "wasReverted": "{{fusionName}} was reverted to {{pokemonName}}.", "releaseConfirmation": "Do you really want to release {{pokemonName}}?", diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 3703605d74e..a23a9c5ece2 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1109,11 +1109,11 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator { } const evolutionItemPool = [ - party.filter(p => pokemonEvolutions.hasOwnProperty(p.species.speciesId)).map(p => { + party.filter(p => pokemonEvolutions.hasOwnProperty(p.species.speciesId) && (!p.pauseEvolutions || p.species.speciesId === Species.SLOWPOKE || p.species.speciesId === Species.EEVEE)).map(p => { const evolutions = pokemonEvolutions[p.species.speciesId]; return evolutions.filter(e => e.item !== EvolutionItem.NONE && (e.evoFormKey === null || (e.preFormKey || "") === p.getFormKey()) && (!e.condition || e.condition.predicate(p))); }).flat(), - party.filter(p => p.isFusion() && p.fusionSpecies && pokemonEvolutions.hasOwnProperty(p.fusionSpecies.speciesId)).map(p => { + party.filter(p => p.isFusion() && p.fusionSpecies && pokemonEvolutions.hasOwnProperty(p.fusionSpecies.speciesId) && (!p.pauseEvolutions || p.fusionSpecies.speciesId === Species.SLOWPOKE || p.fusionSpecies.speciesId === Species.EEVEE)).map(p => { const evolutions = pokemonEvolutions[p.fusionSpecies!.speciesId]; return evolutions.filter(e => e.item !== EvolutionItem.NONE && (e.evoFormKey === null || (e.preFormKey || "") === p.getFusionFormKey()) && (!e.condition || e.condition.predicate(p))); }).flat() @@ -1372,6 +1372,8 @@ export const modifierTypes = { FORM_CHANGE_ITEM: () => new FormChangeItemModifierTypeGenerator(false), RARE_FORM_CHANGE_ITEM: () => new FormChangeItemModifierTypeGenerator(true), + EVOLUTION_TRACKER_GIMMIGHOUL: () => new PokemonHeldItemModifierType("modifierType:ModifierType.EVOLUTION_TRACKER_GIMMIGHOUL", "relic_gold", (type, _args) => new Modifiers.EvoTrackerModifier(type, (_args[0] as Pokemon).id, Species.GIMMIGHOUL, 10)), + MEGA_BRACELET: () => new ModifierType("modifierType:ModifierType.MEGA_BRACELET", "mega_bracelet", (type, _args) => new Modifiers.MegaEvolutionAccessModifier(type)), DYNAMAX_BAND: () => new ModifierType("modifierType:ModifierType.DYNAMAX_BAND", "dynamax_band", (type, _args) => new Modifiers.GigantamaxAccessModifier(type)), TERA_ORB: () => new ModifierType("modifierType:ModifierType.TERA_ORB", "tera_orb", (type, _args) => new Modifiers.TerastallizeAccessModifier(type)), diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 6614ef38253..0c4d2a63802 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -840,6 +840,41 @@ export class BaseStatModifier extends PokemonHeldItemModifier { } } +export class EvoTrackerModifier extends PokemonHeldItemModifier { + protected species: Species; + protected required: integer; + readonly isTransferrable: boolean = false; + + constructor(type: ModifierType, pokemonId: integer, species: Species, required: integer, stackCount?: integer) { + super(type, pokemonId, stackCount); + this.species = species; + this.required = required; + } + + matchType(modifier: Modifier): boolean { + if (modifier instanceof EvoTrackerModifier) { + return (modifier as EvoTrackerModifier).species === this.species; + } + return false; + } + + clone(): PersistentModifier { + return new EvoTrackerModifier(this.type, this.pokemonId, this.species, this.stackCount); + } + + getArgs(): any[] { + return super.getArgs().concat(this.species); + } + + apply(args: any[]): boolean { + return true; + } + + getMaxHeldItemCount(_pokemon: Pokemon): integer { + return this.required; + } +} + /** * Currently used by Shuckle Juice item */ @@ -1272,7 +1307,7 @@ export class SpeciesCritBoosterModifier extends CritBoosterModifier { * Applies Specific Type item boosts (e.g., Magnet) */ export class AttackTypeBoosterModifier extends PokemonHeldItemModifier { - private moveType: Type; + public moveType: Type; private boostMultiplier: number; constructor(type: ModifierType, pokemonId: integer, moveType: Type, boostPercent: number, stackCount?: integer) { @@ -2372,6 +2407,15 @@ export class MoneyRewardModifier extends ConsumableModifier { scene.addMoney(moneyAmount.value); + scene.getParty().map(p => { + if (p.species?.speciesId === Species.GIMMIGHOUL || p.fusionSpecies?.speciesId === Species.GIMMIGHOUL) { + p.evoCounter++; + const modifierType: ModifierType = modifierTypes.EVOLUTION_TRACKER_GIMMIGHOUL(); + const modifier = modifierType!.newModifier(p); + scene.addModifier(modifier); + } + }); + return true; } } diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 92bfc627ddb..5e6c0d93c8c 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -44,6 +44,7 @@ export default class PokemonData { public pauseEvolutions: boolean; public pokerus: boolean; public usedTMs: Moves[]; + public evoCounter: integer; public fusionSpecies: Species; public fusionFormIndex: integer; @@ -95,6 +96,8 @@ export default class PokemonData { } this.pokerus = !!source.pokerus; + this.evoCounter = source.evoCounter ?? 0; + this.fusionSpecies = sourcePokemon ? sourcePokemon.fusionSpecies?.speciesId : source.fusionSpecies; this.fusionFormIndex = source.fusionFormIndex; this.fusionAbilityIndex = source.fusionAbilityIndex; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index aafcdc9bb34..a793dad6a73 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -467,8 +467,8 @@ export default class PartyUiHandler extends MessageUiHandler { } else if (option === PartyOption.UNPAUSE_EVOLUTION) { this.clearOptions(); ui.playSelect(); - pokemon.pauseEvolutions = false; - this.showText(i18next.t("partyUiHandler:unpausedEvolutions", { pokemonName: getPokemonNameWithAffix(pokemon) }), undefined, () => this.showText("", 0), null, true); + pokemon.pauseEvolutions = !pokemon.pauseEvolutions; + this.showText(i18next.t(pokemon.pauseEvolutions? "partyUiHandler:pausedEvolutions" : "partyUiHandler:unpausedEvolutions", { pokemonName: getPokemonNameWithAffix(pokemon) }), undefined, () => this.showText("", 0), null, true); } else if (option === PartyOption.UNSPLICE) { this.clearOptions(); ui.playSelect(); @@ -889,7 +889,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.options.push(PartyOption.SUMMARY); this.options.push(PartyOption.RENAME); - if (pokemon.pauseEvolutions && (pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) || (pokemon.isFusion() && pokemon.fusionSpecies && pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId)))) { + if ((pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) || (pokemon.isFusion() && pokemon.fusionSpecies && pokemonEvolutions.hasOwnProperty(pokemon.fusionSpecies.speciesId)))) { this.options.push(PartyOption.UNPAUSE_EVOLUTION); } @@ -976,6 +976,8 @@ export default class PartyUiHandler extends MessageUiHandler { if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) { const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM]; optionName = `${modifier.active ? i18next.t("partyUiHandler:DEACTIVATE") : i18next.t("partyUiHandler:ACTIVATE")} ${modifier.type.name}`; + } else if (option === PartyOption.UNPAUSE_EVOLUTION) { + optionName = `${pokemon.pauseEvolutions ? i18next.t("partyUiHandler:UNPAUSE_EVOLUTION") : i18next.t("partyUiHandler:PAUSE_EVOLUTION")}`; } else { if (this.localizedOptions.includes(option)) { optionName = i18next.t(`partyUiHandler:${PartyOption[option]}`); From cc5b46d5c1558938d1563253fb8d5888ecaa0586 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Sat, 14 Sep 2024 20:46:20 -0500 Subject: [PATCH 07/23] Compile item atlas Adds the new item sprites from #2732 --- public/images/items.json | 8837 +++++++++++++++++++------------------- public/images/items.png | Bin 58177 -> 58664 bytes 2 files changed, 4450 insertions(+), 4387 deletions(-) diff --git a/public/images/items.json b/public/images/items.json index dd0cf6837be..509b4458a9f 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,8 +4,8 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 428, - "h": 428 + "w": 431, + "h": 431 }, "scale": 1, "frames": [ @@ -93,6 +93,27 @@ "h": 28 } }, + { + "filename": "leaders_crest", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 29, + "h": 27 + }, + "frame": { + "x": 61, + "y": 0, + "w": 29, + "h": 27 + } + }, { "filename": "ribbon_gen2", "rotated": false, @@ -171,8 +192,8 @@ "h": 26 }, "frame": { - "x": 61, - "y": 0, + "x": 59, + "y": 27, "w": 27, "h": 26 } @@ -339,7 +360,7 @@ "h": 26 }, "frame": { - "x": 88, + "x": 90, "y": 0, "w": 24, "h": 26 @@ -388,7 +409,7 @@ } }, { - "filename": "ability_capsule", + "filename": "black_glasses", "rotated": false, "trimmed": true, "sourceSize": { @@ -397,15 +418,15 @@ }, "spriteSourceSize": { "x": 4, - "y": 9, - "w": 24, - "h": 14 + "y": 8, + "w": 23, + "h": 17 }, "frame": { "x": 0, "y": 414, - "w": 24, - "h": 14 + "w": 23, + "h": 17 } }, { @@ -423,7 +444,7 @@ "h": 26 }, "frame": { - "x": 112, + "x": 114, "y": 0, "w": 23, "h": 26 @@ -444,7 +465,7 @@ "h": 22 }, "frame": { - "x": 135, + "x": 137, "y": 0, "w": 27, "h": 22 @@ -465,7 +486,7 @@ "h": 21 }, "frame": { - "x": 162, + "x": 164, "y": 0, "w": 28, "h": 21 @@ -486,7 +507,7 @@ "h": 21 }, "frame": { - "x": 190, + "x": 192, "y": 0, "w": 28, "h": 21 @@ -507,7 +528,7 @@ "h": 21 }, "frame": { - "x": 218, + "x": 220, "y": 0, "w": 28, "h": 21 @@ -528,7 +549,7 @@ "h": 21 }, "frame": { - "x": 246, + "x": 248, "y": 0, "w": 28, "h": 21 @@ -549,7 +570,7 @@ "h": 21 }, "frame": { - "x": 274, + "x": 276, "y": 0, "w": 28, "h": 21 @@ -570,7 +591,7 @@ "h": 21 }, "frame": { - "x": 302, + "x": 304, "y": 0, "w": 28, "h": 21 @@ -591,7 +612,7 @@ "h": 20 }, "frame": { - "x": 330, + "x": 332, "y": 0, "w": 26, "h": 20 @@ -612,7 +633,7 @@ "h": 20 }, "frame": { - "x": 356, + "x": 358, "y": 0, "w": 26, "h": 20 @@ -633,14 +654,14 @@ "h": 20 }, "frame": { - "x": 382, + "x": 384, "y": 0, "w": 25, "h": 20 } }, { - "filename": "catching_charm", + "filename": "ribbon_gen6", "rotated": false, "trimmed": true, "sourceSize": { @@ -649,15 +670,15 @@ }, "spriteSourceSize": { "x": 5, - "y": 4, - "w": 21, - "h": 24 + "y": 2, + "w": 22, + "h": 28 }, "frame": { - "x": 407, + "x": 409, "y": 0, - "w": 21, - "h": 24 + "w": 22, + "h": 28 } }, { @@ -745,7 +766,7 @@ } }, { - "filename": "ribbon_gen6", + "filename": "ribbon_gen8", "rotated": false, "trimmed": true, "sourceSize": { @@ -765,27 +786,6 @@ "h": 28 } }, - { - "filename": "ribbon_gen8", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 22, - "y": 237, - "w": 22, - "h": 28 - } - }, { "filename": "black_augurite", "rotated": false, @@ -802,7 +802,7 @@ }, "frame": { "x": 22, - "y": 265, + "y": 237, "w": 22, "h": 25 } @@ -823,7 +823,7 @@ }, "frame": { "x": 22, - "y": 290, + "y": 262, "w": 23, "h": 24 } @@ -844,7 +844,7 @@ }, "frame": { "x": 22, - "y": 314, + "y": 286, "w": 24, "h": 24 } @@ -865,7 +865,7 @@ }, "frame": { "x": 22, - "y": 338, + "y": 310, "w": 24, "h": 24 } @@ -886,7 +886,7 @@ }, "frame": { "x": 22, - "y": 362, + "y": 334, "w": 24, "h": 24 } @@ -907,13 +907,13 @@ }, "frame": { "x": 22, - "y": 386, + "y": 358, "w": 24, "h": 24 } }, { - "filename": "choice_specs", + "filename": "earth_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -922,15 +922,36 @@ }, "spriteSourceSize": { "x": 4, - "y": 8, + "y": 4, "w": 24, - "h": 18 + "h": 24 }, "frame": { - "x": 24, - "y": 410, + "x": 22, + "y": 382, "w": 24, - "h": 18 + "h": 24 + } + }, + { + "filename": "fist_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 23, + "y": 406, + "w": 24, + "h": 24 } }, { @@ -975,6 +996,27 @@ "h": 16 } }, + { + "filename": "choice_specs", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 59, + "y": 53, + "w": 24, + "h": 18 + } + }, { "filename": "calcium", "rotated": false, @@ -1018,7 +1060,7 @@ } }, { - "filename": "earth_plate", + "filename": "catching_charm", "rotated": false, "trimmed": true, "sourceSize": { @@ -1026,20 +1068,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, + "x": 5, "y": 4, - "w": 24, + "w": 21, "h": 24 }, "frame": { "x": 39, "y": 134, - "w": 24, + "w": 21, "h": 24 } }, { - "filename": "fist_plate", + "filename": "flame_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -1060,7 +1102,7 @@ } }, { - "filename": "flame_plate", + "filename": "focus_band", "rotated": false, "trimmed": true, "sourceSize": { @@ -1081,7 +1123,7 @@ } }, { - "filename": "focus_band", + "filename": "golden_punch", "rotated": false, "trimmed": true, "sourceSize": { @@ -1102,7 +1144,7 @@ } }, { - "filename": "golden_punch", + "filename": "gracidea", "rotated": false, "trimmed": true, "sourceSize": { @@ -1122,27 +1164,6 @@ "h": 24 } }, - { - "filename": "gracidea", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 44, - "y": 254, - "w": 24, - "h": 24 - } - }, { "filename": "grip_claw", "rotated": false, @@ -1159,7 +1180,7 @@ }, "frame": { "x": 45, - "y": 278, + "y": 254, "w": 24, "h": 24 } @@ -1180,7 +1201,7 @@ }, "frame": { "x": 46, - "y": 302, + "y": 278, "w": 24, "h": 24 } @@ -1201,7 +1222,7 @@ }, "frame": { "x": 46, - "y": 326, + "y": 302, "w": 24, "h": 24 } @@ -1222,7 +1243,7 @@ }, "frame": { "x": 46, - "y": 350, + "y": 326, "w": 24, "h": 24 } @@ -1243,13 +1264,13 @@ }, "frame": { "x": 46, - "y": 374, + "y": 350, "w": 24, "h": 24 } }, { - "filename": "abomasite", + "filename": "lucky_punch_great", "rotated": false, "trimmed": true, "sourceSize": { @@ -1257,16 +1278,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 4, + "y": 4, + "w": 24, + "h": 24 }, "frame": { - "x": 48, - "y": 70, - "w": 16, - "h": 16 + "x": 46, + "y": 374, + "w": 24, + "h": 24 } }, { @@ -1284,12 +1305,33 @@ "h": 24 }, "frame": { - "x": 48, + "x": 47, "y": 398, "w": 23, "h": 24 } }, + { + "filename": "silver_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 11, + "w": 24, + "h": 15 + }, + "frame": { + "x": 48, + "y": 71, + "w": 24, + "h": 15 + } + }, { "filename": "elixir", "rotated": false, @@ -1347,14 +1389,14 @@ "h": 24 }, "frame": { - "x": 63, + "x": 60, "y": 134, "w": 18, "h": 24 } }, { - "filename": "lucky_punch_great", + "filename": "hp_up", "rotated": false, "trimmed": true, "sourceSize": { @@ -1362,20 +1404,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, + "x": 8, "y": 4, - "w": 24, + "w": 16, "h": 24 }, "frame": { "x": 63, "y": 158, - "w": 24, + "w": 16, "h": 24 } }, { - "filename": "lucky_punch_master", + "filename": "iron", "rotated": false, "trimmed": true, "sourceSize": { @@ -1383,20 +1425,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, + "x": 8, "y": 4, - "w": 24, + "w": 16, "h": 24 }, "frame": { "x": 63, "y": 182, - "w": 24, + "w": 16, "h": 24 } }, { - "filename": "lucky_punch_ultra", + "filename": "lucky_punch_master", "rotated": false, "trimmed": true, "sourceSize": { @@ -1417,7 +1459,7 @@ } }, { - "filename": "lustrous_globe", + "filename": "lucky_punch_ultra", "rotated": false, "trimmed": true, "sourceSize": { @@ -1437,6 +1479,27 @@ "h": 24 } }, + { + "filename": "lustrous_globe", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 69, + "y": 254, + "w": 24, + "h": 24 + } + }, { "filename": "meadow_plate", "rotated": false, @@ -1452,8 +1515,8 @@ "h": 24 }, "frame": { - "x": 68, - "y": 254, + "x": 70, + "y": 278, "w": 24, "h": 24 } @@ -1473,8 +1536,8 @@ "h": 24 }, "frame": { - "x": 69, - "y": 278, + "x": 70, + "y": 302, "w": 24, "h": 24 } @@ -1495,7 +1558,7 @@ }, "frame": { "x": 70, - "y": 302, + "y": 326, "w": 24, "h": 24 } @@ -1516,7 +1579,7 @@ }, "frame": { "x": 70, - "y": 326, + "y": 350, "w": 24, "h": 24 } @@ -1537,7 +1600,7 @@ }, "frame": { "x": 70, - "y": 350, + "y": 374, "w": 24, "h": 24 } @@ -1558,13 +1621,55 @@ }, "frame": { "x": 70, - "y": 374, + "y": 398, "w": 24, "h": 24 } }, { - "filename": "reveal_glass", + "filename": "ability_capsule", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 9, + "w": 24, + "h": 14 + }, + "frame": { + "x": 137, + "y": 22, + "w": 24, + "h": 14 + } + }, + { + "filename": "lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 86, + "y": 27, + "w": 17, + "h": 24 + } + }, + { + "filename": "silk_scarf", "rotated": false, "trimmed": true, "sourceSize": { @@ -1574,13 +1679,13 @@ "spriteSourceSize": { "x": 4, "y": 4, - "w": 23, + "w": 24, "h": 24 }, "frame": { - "x": 71, - "y": 398, - "w": 23, + "x": 103, + "y": 26, + "w": 24, "h": 24 } }, @@ -1599,14 +1704,14 @@ "h": 23 }, "frame": { - "x": 135, - "y": 22, + "x": 127, + "y": 36, "w": 24, "h": 23 } }, { - "filename": "berry_pouch", + "filename": "coin_case", "rotated": false, "trimmed": true, "sourceSize": { @@ -1616,18 +1721,39 @@ "spriteSourceSize": { "x": 4, "y": 5, - "w": 23, + "w": 24, "h": 23 }, "frame": { - "x": 159, - "y": 22, - "w": 23, + "x": 103, + "y": 50, + "w": 24, "h": 23 } }, { - "filename": "silk_scarf", + "filename": "big_nugget", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 83, + "y": 53, + "w": 20, + "h": 20 + } + }, + { + "filename": "dragon_scale", "rotated": false, "trimmed": true, "sourceSize": { @@ -1636,17 +1762,59 @@ }, "spriteSourceSize": { "x": 4, - "y": 4, + "y": 8, "w": 24, + "h": 18 + }, + "frame": { + "x": 127, + "y": 59, + "w": 24, + "h": 18 + } + }, + { + "filename": "max_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, "h": 24 }, "frame": { - "x": 182, - "y": 21, - "w": 24, + "x": 151, + "y": 36, + "w": 18, "h": 24 } }, + { + "filename": "adamant_crystal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 151, + "y": 60, + "w": 23, + "h": 21 + } + }, { "filename": "sky_plate", "rotated": false, @@ -1662,7 +1830,7 @@ "h": 24 }, "frame": { - "x": 206, + "x": 169, "y": 21, "w": 24, "h": 24 @@ -1683,7 +1851,7 @@ "h": 24 }, "frame": { - "x": 230, + "x": 193, "y": 21, "w": 24, "h": 24 @@ -1704,7 +1872,7 @@ "h": 24 }, "frame": { - "x": 254, + "x": 217, "y": 21, "w": 24, "h": 24 @@ -1725,7 +1893,7 @@ "h": 24 }, "frame": { - "x": 278, + "x": 241, "y": 21, "w": 24, "h": 24 @@ -1746,33 +1914,12 @@ "h": 24 }, "frame": { - "x": 302, + "x": 265, "y": 21, "w": 24, "h": 24 } }, - { - "filename": "hp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 326, - "y": 21, - "w": 16, - "h": 24 - } - }, { "filename": "toxic_plate", "rotated": false, @@ -1788,12 +1935,33 @@ "h": 24 }, "frame": { - "x": 342, - "y": 20, + "x": 289, + "y": 21, "w": 24, "h": 24 } }, + { + "filename": "max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 313, + "y": 21, + "w": 22, + "h": 24 + } + }, { "filename": "zap_plate", "rotated": false, @@ -1809,117 +1977,12 @@ "h": 24 }, "frame": { - "x": 366, + "x": 335, "y": 20, "w": 24, "h": 24 } }, - { - "filename": "lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 390, - "y": 20, - "w": 17, - "h": 24 - } - }, - { - "filename": "oval_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 407, - "y": 24, - "w": 21, - "h": 24 - } - }, - { - "filename": "berry_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 18, - "h": 22 - }, - "frame": { - "x": 59, - "y": 48, - "w": 18, - "h": 22 - } - }, - { - "filename": "adamant_crystal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 59, - "y": 27, - "w": 23, - "h": 21 - } - }, - { - "filename": "coin_case", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 82, - "y": 26, - "w": 24, - "h": 23 - } - }, { "filename": "expert_belt", "rotated": false, @@ -1935,222 +1998,12 @@ "h": 23 }, "frame": { - "x": 106, - "y": 26, + "x": 359, + "y": 20, "w": 24, "h": 23 } }, - { - "filename": "exp_balance", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 77, - "y": 49, - "w": 24, - "h": 22 - } - }, - { - "filename": "exp_share", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 101, - "y": 49, - "w": 24, - "h": 22 - } - }, - { - "filename": "silver_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 11, - "w": 24, - "h": 15 - }, - "frame": { - "x": 64, - "y": 71, - "w": 24, - "h": 15 - } - }, - { - "filename": "dragon_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 88, - "y": 71, - "w": 24, - "h": 18 - } - }, - { - "filename": "full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 15, - "h": 23 - }, - "frame": { - "x": 73, - "y": 86, - "w": 15, - "h": 23 - } - }, - { - "filename": "golden_net", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 21 - }, - "frame": { - "x": 88, - "y": 89, - "w": 24, - "h": 21 - } - }, - { - "filename": "max_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 24 - }, - "frame": { - "x": 73, - "y": 110, - "w": 22, - "h": 24 - } - }, - { - "filename": "iron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 81, - "y": 134, - "w": 16, - "h": 24 - } - }, - { - "filename": "max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 95, - "y": 110, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 97, - "y": 134, - "w": 18, - "h": 24 - } - }, { "filename": "hearthflame_mask", "rotated": false, @@ -2166,8 +2019,8 @@ "h": 23 }, "frame": { - "x": 87, - "y": 158, + "x": 383, + "y": 20, "w": 24, "h": 23 } @@ -2187,201 +2040,12 @@ "h": 23 }, "frame": { - "x": 87, - "y": 181, + "x": 407, + "y": 28, "w": 24, "h": 23 } }, - { - "filename": "red_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 20, - "h": 24 - }, - "frame": { - "x": 92, - "y": 204, - "w": 20, - "h": 24 - } - }, - { - "filename": "shiny_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 92, - "y": 228, - "w": 21, - "h": 24 - } - }, - { - "filename": "black_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 92, - "y": 252, - "w": 22, - "h": 23 - } - }, - { - "filename": "bug_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 93, - "y": 275, - "w": 22, - "h": 23 - } - }, - { - "filename": "dark_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 94, - "y": 298, - "w": 22, - "h": 23 - } - }, - { - "filename": "dragon_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 94, - "y": 321, - "w": 22, - "h": 23 - } - }, - { - "filename": "dynamax_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 23 - }, - "frame": { - "x": 94, - "y": 344, - "w": 23, - "h": 23 - } - }, - { - "filename": "griseous_core", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 94, - "y": 367, - "w": 23, - "h": 23 - } - }, - { - "filename": "leek", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 94, - "y": 390, - "w": 23, - "h": 23 - } - }, { "filename": "candy_overlay", "rotated": false, @@ -2397,14 +2061,14 @@ "h": 15 }, "frame": { - "x": 94, - "y": 413, + "x": 169, + "y": 45, "w": 16, "h": 15 } }, { - "filename": "eviolite", + "filename": "exp_balance", "rotated": false, "trimmed": true, "sourceSize": { @@ -2412,57 +2076,57 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 110, - "y": 413, - "w": 15, - "h": 15 - } - }, - { - "filename": "max_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 112, - "y": 71, - "w": 17, - "h": 24 - } - }, - { - "filename": "bug_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, + "x": 4, "y": 5, - "w": 22, + "w": 24, "h": 22 }, "frame": { - "x": 125, - "y": 49, - "w": 22, + "x": 185, + "y": 45, + "w": 24, + "h": 22 + } + }, + { + "filename": "exp_share", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 209, + "y": 45, + "w": 24, + "h": 22 + } + }, + { + "filename": "peat_block", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 233, + "y": 45, + "w": 24, "h": 22 } }, @@ -2481,7 +2145,7 @@ "h": 23 }, "frame": { - "x": 147, + "x": 257, "y": 45, "w": 24, "h": 23 @@ -2502,14 +2166,14 @@ "h": 23 }, "frame": { - "x": 171, + "x": 281, "y": 45, "w": 24, "h": 23 } }, { - "filename": "macho_brace", + "filename": "berry_pouch", "rotated": false, "trimmed": true, "sourceSize": { @@ -2523,35 +2187,14 @@ "h": 23 }, "frame": { - "x": 195, + "x": 305, "y": 45, "w": 23, "h": 23 } }, { - "filename": "peat_block", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 218, - "y": 45, - "w": 24, - "h": 22 - } - }, - { - "filename": "healing_charm", + "filename": "black_belt", "rotated": false, "trimmed": true, "sourceSize": { @@ -2560,82 +2203,19 @@ }, "spriteSourceSize": { "x": 5, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 242, - "y": 45, - "w": 23, - "h": 22 - } - }, - { - "filename": "rare_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 265, - "y": 45, - "w": 23, - "h": 23 - } - }, - { - "filename": "rarer_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 288, - "y": 45, - "w": 23, - "h": 23 - } - }, - { - "filename": "electric_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, "y": 4, "w": 22, "h": 23 }, "frame": { - "x": 311, + "x": 328, "y": 45, "w": 22, "h": 23 } }, { - "filename": "max_potion", + "filename": "max_ether", "rotated": false, "trimmed": true, "sourceSize": { @@ -2649,140 +2229,14 @@ "h": 24 }, "frame": { - "x": 129, - "y": 71, + "x": 350, + "y": 44, "w": 18, "h": 24 } }, { - "filename": "fairy_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 147, - "y": 68, - "w": 22, - "h": 23 - } - }, - { - "filename": "fighting_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 169, - "y": 68, - "w": 22, - "h": 23 - } - }, - { - "filename": "fire_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 191, - "y": 68, - "w": 22, - "h": 23 - } - }, - { - "filename": "dragon_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 333, - "y": 45, - "w": 21, - "h": 23 - } - }, - { - "filename": "fire_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 354, - "y": 44, - "w": 22, - "h": 23 - } - }, - { - "filename": "flying_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 376, - "y": 44, - "w": 22, - "h": 23 - } - }, - { - "filename": "icy_reins_of_unity", + "filename": "reveal_glass", "rotated": false, "trimmed": true, "sourceSize": { @@ -2791,36 +2245,15 @@ }, "spriteSourceSize": { "x": 4, - "y": 7, - "w": 24, - "h": 20 + "y": 4, + "w": 23, + "h": 24 }, "frame": { - "x": 398, - "y": 48, - "w": 24, - "h": 20 - } - }, - { - "filename": "prism_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 112, - "y": 95, - "w": 15, - "h": 15 + "x": 368, + "y": 43, + "w": 23, + "h": 24 } }, { @@ -2838,266 +2271,14 @@ "h": 24 }, "frame": { - "x": 113, - "y": 110, + "x": 391, + "y": 43, "w": 16, "h": 24 } }, { - "filename": "pp_max", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 115, - "y": 134, - "w": 16, - "h": 24 - } - }, - { - "filename": "focus_sash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 111, - "y": 158, - "w": 22, - "h": 23 - } - }, - { - "filename": "ghost_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 111, - "y": 181, - "w": 22, - "h": 23 - } - }, - { - "filename": "grass_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 112, - "y": 204, - "w": 22, - "h": 23 - } - }, - { - "filename": "ground_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 113, - "y": 227, - "w": 22, - "h": 23 - } - }, - { - "filename": "ice_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 114, - "y": 250, - "w": 22, - "h": 23 - } - }, - { - "filename": "lansat_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 115, - "y": 273, - "w": 21, - "h": 23 - } - }, - { - "filename": "leaf_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 116, - "y": 296, - "w": 21, - "h": 23 - } - }, - { - "filename": "never_melt_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 116, - "y": 319, - "w": 22, - "h": 23 - } - }, - { - "filename": "normal_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 117, - "y": 342, - "w": 22, - "h": 23 - } - }, - { - "filename": "petaya_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 117, - "y": 365, - "w": 22, - "h": 23 - } - }, - { - "filename": "poison_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 117, - "y": 388, - "w": 22, - "h": 23 - } - }, - { - "filename": "black_glasses", + "filename": "golden_net", "rotated": false, "trimmed": true, "sourceSize": { @@ -3106,40 +2287,19 @@ }, "spriteSourceSize": { "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 125, - "y": 411, - "w": 23, - "h": 17 - } - }, - { - "filename": "hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, "y": 5, - "w": 17, - "h": 23 + "w": 24, + "h": 21 }, "frame": { - "x": 213, - "y": 68, - "w": 17, - "h": 23 + "x": 407, + "y": 51, + "w": 24, + "h": 21 } }, { - "filename": "psychic_tera_shard", + "filename": "icy_reins_of_unity", "rotated": false, "trimmed": true, "sourceSize": { @@ -3147,20 +2307,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 + "x": 4, + "y": 7, + "w": 24, + "h": 20 }, "frame": { - "x": 230, + "x": 174, "y": 67, - "w": 22, - "h": 23 + "w": 24, + "h": 20 } }, { - "filename": "rusted_sword", + "filename": "metal_powder", "rotated": false, "trimmed": true, "sourceSize": { @@ -3169,15 +2329,120 @@ }, "spriteSourceSize": { "x": 4, - "y": 5, - "w": 23, - "h": 22 + "y": 6, + "w": 24, + "h": 20 }, "frame": { - "x": 252, + "x": 198, + "y": 67, + "w": 24, + "h": 20 + } + }, + { + "filename": "quick_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 222, + "y": 67, + "w": 24, + "h": 20 + } + }, + { + "filename": "rusted_shield", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 246, "y": 68, - "w": 23, - "h": 22 + "w": 24, + "h": 20 + } + }, + { + "filename": "sacred_ash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 270, + "y": 68, + "w": 24, + "h": 20 + } + }, + { + "filename": "shadow_reins_of_unity", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 294, + "y": 68, + "w": 24, + "h": 20 + } + }, + { + "filename": "soft_sand", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 318, + "y": 68, + "w": 24, + "h": 20 } }, { @@ -3195,7 +2460,7 @@ "h": 21 }, "frame": { - "x": 275, + "x": 342, "y": 68, "w": 23, "h": 21 @@ -3216,77 +2481,14 @@ "h": 21 }, "frame": { - "x": 298, - "y": 68, - "w": 23, - "h": 21 - } - }, - { - "filename": "metal_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 321, - "y": 68, - "w": 24, - "h": 20 - } - }, - { - "filename": "apicot_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 345, - "y": 68, - "w": 19, - "h": 20 - } - }, - { - "filename": "moon_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 364, + "x": 368, "y": 67, "w": 23, "h": 21 } }, { - "filename": "quick_powder", + "filename": "pp_max", "rotated": false, "trimmed": true, "sourceSize": { @@ -3294,20 +2496,41 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 391, + "y": 67, + "w": 16, + "h": 24 + } + }, + { + "filename": "binding_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, "y": 6, - "w": 24, + "w": 23, "h": 20 }, "frame": { - "x": 387, - "y": 68, - "w": 24, + "x": 407, + "y": 72, + "w": 23, "h": 20 } }, { - "filename": "super_lure", + "filename": "max_lure", "rotated": false, "trimmed": true, "sourceSize": { @@ -3321,77 +2544,14 @@ "h": 24 }, "frame": { - "x": 411, - "y": 68, + "x": 73, + "y": 87, "w": 17, "h": 24 } }, { - "filename": "rusted_shield", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 147, - "y": 91, - "w": 24, - "h": 20 - } - }, - { - "filename": "sacred_ash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 171, - "y": 91, - "w": 24, - "h": 20 - } - }, - { - "filename": "shadow_reins_of_unity", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 195, - "y": 91, - "w": 24, - "h": 20 - } - }, - { - "filename": "sachet", + "filename": "bug_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -3401,18 +2561,18 @@ "spriteSourceSize": { "x": 6, "y": 4, - "w": 18, + "w": 22, "h": 23 }, "frame": { - "x": 129, - "y": 95, - "w": 18, + "x": 73, + "y": 111, + "w": 22, "h": 23 } }, { - "filename": "relic_band", + "filename": "max_potion", "rotated": false, "trimmed": true, "sourceSize": { @@ -3421,15 +2581,141 @@ }, "spriteSourceSize": { "x": 7, - "y": 9, - "w": 17, - "h": 16 + "y": 4, + "w": 18, + "h": 24 }, "frame": { - "x": 129, - "y": 118, - "w": 17, - "h": 16 + "x": 78, + "y": 134, + "w": 18, + "h": 24 + } + }, + { + "filename": "oval_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 79, + "y": 158, + "w": 21, + "h": 24 + } + }, + { + "filename": "shiny_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 79, + "y": 182, + "w": 21, + "h": 24 + } + }, + { + "filename": "dynamax_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 23 + }, + "frame": { + "x": 90, + "y": 73, + "w": 23, + "h": 23 + } + }, + { + "filename": "eviolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 90, + "y": 96, + "w": 15, + "h": 15 + } + }, + { + "filename": "dark_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 95, + "y": 111, + "w": 22, + "h": 23 + } + }, + { + "filename": "red_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 20, + "h": 24 + }, + "frame": { + "x": 96, + "y": 134, + "w": 20, + "h": 24 } }, { @@ -3447,8 +2733,8 @@ "h": 24 }, "frame": { - "x": 131, - "y": 134, + "x": 100, + "y": 158, "w": 16, "h": 24 } @@ -3468,14 +2754,14 @@ "h": 24 }, "frame": { - "x": 133, - "y": 158, + "x": 100, + "y": 182, "w": 16, "h": 24 } }, { - "filename": "charcoal", + "filename": "griseous_core", "rotated": false, "trimmed": true, "sourceSize": { @@ -3485,18 +2771,18 @@ "spriteSourceSize": { "x": 5, "y": 5, - "w": 22, - "h": 22 + "w": 23, + "h": 23 }, "frame": { - "x": 133, - "y": 182, - "w": 22, - "h": 22 + "x": 92, + "y": 206, + "w": 23, + "h": 23 } }, { - "filename": "reaper_cloth", + "filename": "leek", "rotated": false, "trimmed": true, "sourceSize": { @@ -3504,20 +2790,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, + "x": 4, "y": 5, - "w": 22, + "w": 23, "h": 23 }, "frame": { - "x": 134, - "y": 204, - "w": 22, + "x": 92, + "y": 229, + "w": 23, "h": 23 } }, { - "filename": "rock_tera_shard", + "filename": "dragon_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -3531,14 +2817,14 @@ "h": 23 }, "frame": { - "x": 135, - "y": 227, + "x": 93, + "y": 252, "w": 22, "h": 23 } }, { - "filename": "sharp_beak", + "filename": "dragon_fang", "rotated": false, "trimmed": true, "sourceSize": { @@ -3551,15 +2837,204 @@ "w": 21, "h": 23 }, + "frame": { + "x": 94, + "y": 275, + "w": 21, + "h": 23 + } + }, + { + "filename": "electric_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 94, + "y": 298, + "w": 22, + "h": 23 + } + }, + { + "filename": "fairy_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 94, + "y": 321, + "w": 22, + "h": 23 + } + }, + { + "filename": "fighting_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 94, + "y": 344, + "w": 22, + "h": 23 + } + }, + { + "filename": "fire_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 94, + "y": 367, + "w": 22, + "h": 23 + } + }, + { + "filename": "fire_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 94, + "y": 390, + "w": 22, + "h": 23 + } + }, + { + "filename": "relic_crown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 18 + }, + "frame": { + "x": 94, + "y": 413, + "w": 23, + "h": 18 + } + }, + { + "filename": "prism_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 105, + "y": 96, + "w": 15, + "h": 15 + } + }, + { + "filename": "coupon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 113, + "y": 77, + "w": 23, + "h": 19 + } + }, + { + "filename": "full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, "frame": { "x": 136, - "y": 250, - "w": 21, + "y": 77, + "w": 15, "h": 23 } }, { - "filename": "steel_tera_shard", + "filename": "golden_mystic_ticket", "rotated": false, "trimmed": true, "sourceSize": { @@ -3567,121 +3042,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 + "x": 4, + "y": 7, + "w": 23, + "h": 19 }, "frame": { - "x": 136, - "y": 273, - "w": 22, - "h": 23 - } - }, - { - "filename": "stellar_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 137, - "y": 296, - "w": 22, - "h": 23 - } - }, - { - "filename": "water_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 138, - "y": 319, - "w": 22, - "h": 23 - } - }, - { - "filename": "whipped_dream", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 139, - "y": 342, - "w": 21, - "h": 23 - } - }, - { - "filename": "wide_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 139, - "y": 365, - "w": 22, - "h": 23 - } - }, - { - "filename": "mystic_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 20, - "h": 23 - }, - "frame": { - "x": 139, - "y": 388, - "w": 20, - "h": 23 + "x": 151, + "y": 81, + "w": 23, + "h": 19 } }, { @@ -3699,33 +3069,12 @@ "h": 17 }, "frame": { - "x": 148, - "y": 411, + "x": 174, + "y": 87, "w": 23, "h": 17 } }, - { - "filename": "potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 159, - "y": 388, - "w": 17, - "h": 23 - } - }, { "filename": "chill_drive", "rotated": false, @@ -3741,12 +3090,264 @@ "h": 17 }, "frame": { - "x": 171, - "y": 411, + "x": 197, + "y": 87, "w": 23, "h": 17 } }, + { + "filename": "douse_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 220, + "y": 87, + "w": 23, + "h": 17 + } + }, + { + "filename": "healing_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 243, + "y": 88, + "w": 23, + "h": 22 + } + }, + { + "filename": "macho_brace", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 266, + "y": 88, + "w": 23, + "h": 23 + } + }, + { + "filename": "rare_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 289, + "y": 88, + "w": 23, + "h": 23 + } + }, + { + "filename": "rarer_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 312, + "y": 88, + "w": 23, + "h": 23 + } + }, + { + "filename": "rusted_sword", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 335, + "y": 89, + "w": 23, + "h": 22 + } + }, + { + "filename": "abomasite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 120, + "y": 96, + "w": 16, + "h": 16 + } + }, + { + "filename": "bug_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 117, + "y": 112, + "w": 22, + "h": 22 + } + }, + { + "filename": "flying_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 116, + "y": 134, + "w": 22, + "h": 23 + } + }, + { + "filename": "focus_sash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 116, + "y": 157, + "w": 22, + "h": 23 + } + }, + { + "filename": "ghost_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 116, + "y": 180, + "w": 22, + "h": 23 + } + }, + { + "filename": "grass_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 139, + "y": 100, + "w": 22, + "h": 23 + } + }, { "filename": "berry_juice", "rotated": false, @@ -3762,14 +3363,14 @@ "h": 21 }, "frame": { - "x": 219, - "y": 91, + "x": 139, + "y": 123, "w": 22, "h": 21 } }, { - "filename": "dark_memory", + "filename": "ground_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -3777,20 +3378,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 5, + "x": 6, + "y": 4, "w": 22, - "h": 22 + "h": 23 }, "frame": { - "x": 241, - "y": 90, + "x": 138, + "y": 144, "w": 22, - "h": 22 + "h": 23 } }, { - "filename": "dire_hit", + "filename": "ice_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -3798,41 +3399,41 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 5, + "x": 6, + "y": 4, "w": 22, - "h": 22 + "h": 23 }, "frame": { - "x": 263, - "y": 90, + "x": 138, + "y": 167, "w": 22, - "h": 22 + "h": 23 } }, { - "filename": "dna_splicers", + "filename": "black_sludge", "rotated": false, "trimmed": true, "sourceSize": { - "w": 32, - "h": 32 + "w": 24, + "h": 24 }, "spriteSourceSize": { - "x": 5, - "y": 5, + "x": 1, + "y": 2, "w": 22, - "h": 22 + "h": 19 }, "frame": { - "x": 285, - "y": 89, + "x": 138, + "y": 190, "w": 22, - "h": 22 + "h": 19 } }, { - "filename": "dragon_memory", + "filename": "never_melt_ice", "rotated": false, "trimmed": true, "sourceSize": { @@ -3843,17 +3444,17 @@ "x": 5, "y": 5, "w": 22, - "h": 22 + "h": 23 }, "frame": { - "x": 307, - "y": 89, + "x": 161, + "y": 104, "w": 22, - "h": 22 + "h": 23 } }, { - "filename": "electirizer", + "filename": "normal_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -3861,20 +3462,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 5, + "x": 6, + "y": 4, "w": 22, - "h": 22 + "h": 23 }, "frame": { - "x": 329, - "y": 88, + "x": 183, + "y": 104, "w": 22, - "h": 22 + "h": 23 } }, { - "filename": "electric_memory", + "filename": "petaya_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -3885,34 +3486,13 @@ "x": 5, "y": 5, "w": 22, - "h": 22 + "h": 23 }, "frame": { - "x": 351, - "y": 88, + "x": 205, + "y": 104, "w": 22, - "h": 22 - } - }, - { - "filename": "enigma_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 373, - "y": 88, - "w": 22, - "h": 22 + "h": 23 } }, { @@ -3930,35 +3510,14 @@ "h": 24 }, "frame": { - "x": 395, - "y": 88, + "x": 227, + "y": 104, "w": 16, "h": 24 } }, { - "filename": "super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 411, - "y": 92, - "w": 17, - "h": 23 - } - }, - { - "filename": "soft_sand", + "filename": "moon_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -3967,36 +3526,15 @@ }, "spriteSourceSize": { "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 147, - "y": 111, - "w": 24, - "h": 20 - } - }, - { - "filename": "binding_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, "y": 6, "w": 23, - "h": 20 + "h": 21 }, "frame": { - "x": 171, - "y": 111, + "x": 243, + "y": 110, "w": 23, - "h": 20 + "h": 21 } }, { @@ -4014,54 +3552,12 @@ "h": 21 }, "frame": { - "x": 194, + "x": 266, "y": 111, "w": 23, "h": 21 } }, - { - "filename": "fairy_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 147, - "y": 131, - "w": 22, - "h": 22 - } - }, - { - "filename": "fighting_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 169, - "y": 131, - "w": 22, - "h": 22 - } - }, { "filename": "n_solarizer", "rotated": false, @@ -4077,8 +3573,8 @@ "h": 21 }, "frame": { - "x": 217, - "y": 112, + "x": 289, + "y": 111, "w": 23, "h": 21 } @@ -4098,35 +3594,14 @@ "h": 21 }, "frame": { - "x": 240, - "y": 112, + "x": 312, + "y": 111, "w": 23, "h": 21 } }, { - "filename": "deep_sea_tooth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 263, - "y": 112, - "w": 22, - "h": 21 - } - }, - { - "filename": "fire_memory", + "filename": "charcoal", "rotated": false, "trimmed": true, "sourceSize": { @@ -4140,14 +3615,14 @@ "h": 22 }, "frame": { - "x": 285, + "x": 335, "y": 111, "w": 22, "h": 22 } }, { - "filename": "flying_memory", + "filename": "mystic_ticket", "rotated": false, "trimmed": true, "sourceSize": { @@ -4155,20 +3630,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 + "x": 4, + "y": 7, + "w": 23, + "h": 19 }, "frame": { - "x": 307, - "y": 111, - "w": 22, - "h": 22 + "x": 161, + "y": 127, + "w": 23, + "h": 19 } }, { - "filename": "ganlon_berry", + "filename": "poison_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -4176,545 +3651,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 329, - "y": 110, - "w": 22, - "h": 22 - } - }, - { - "filename": "ghost_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 351, - "y": 110, - "w": 22, - "h": 22 - } - }, - { - "filename": "grass_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 373, - "y": 110, - "w": 22, - "h": 22 - } - }, - { - "filename": "ground_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 191, - "y": 132, - "w": 22, - "h": 22 - } - }, - { - "filename": "guard_spec", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 149, - "y": 153, - "w": 22, - "h": 22 - } - }, - { - "filename": "hard_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 171, - "y": 153, - "w": 20, - "h": 22 - } - }, - { - "filename": "ice_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 191, - "y": 154, - "w": 22, - "h": 22 - } - }, - { - "filename": "ice_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 213, - "y": 133, - "w": 22, - "h": 22 - } - }, - { - "filename": "magmarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 235, - "y": 133, - "w": 22, - "h": 22 - } - }, - { - "filename": "mini_black_hole", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 257, - "y": 133, - "w": 22, - "h": 22 - } - }, - { - "filename": "normal_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 279, - "y": 133, - "w": 22, - "h": 22 - } - }, - { - "filename": "poison_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 301, - "y": 133, - "w": 22, - "h": 22 - } - }, - { - "filename": "liechi_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 213, - "y": 155, - "w": 22, - "h": 21 - } - }, - { - "filename": "protector", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 235, - "y": 155, - "w": 22, - "h": 22 - } - }, - { - "filename": "psychic_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 257, - "y": 155, - "w": 22, - "h": 22 - } - }, - { - "filename": "rock_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 279, - "y": 155, - "w": 22, - "h": 22 - } - }, - { - "filename": "scroll_of_darkness", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 301, - "y": 155, - "w": 22, - "h": 22 - } - }, - { - "filename": "super_repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, + "x": 6, "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 395, - "y": 112, - "w": 16, - "h": 24 - } - }, - { - "filename": "metronome", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 411, - "y": 115, - "w": 17, - "h": 22 - } - }, - { - "filename": "scroll_of_waters", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, "w": 22, - "h": 22 - }, - "frame": { - "x": 155, - "y": 175, - "w": 22, - "h": 22 - } - }, - { - "filename": "shed_shell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 156, - "y": 197, - "w": 22, - "h": 22 - } - }, - { - "filename": "starf_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 157, - "y": 219, - "w": 22, - "h": 22 - } - }, - { - "filename": "steel_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 157, - "y": 241, - "w": 22, - "h": 22 - } - }, - { - "filename": "thick_club", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 158, - "y": 263, - "w": 22, - "h": 22 - } - }, - { - "filename": "thunder_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 159, - "y": 285, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_bug", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 + "h": 23 }, "frame": { "x": 160, - "y": 307, + "y": 146, "w": 22, - "h": 22 + "h": 23 } }, { - "filename": "tm_dark", + "filename": "psychic_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -4722,20 +3672,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 5, + "x": 6, + "y": 4, "w": 22, - "h": 22 + "h": 23 }, "frame": { "x": 160, - "y": 329, + "y": 169, "w": 22, - "h": 22 + "h": 23 } }, { - "filename": "sweet_apple", + "filename": "pair_of_tickets", "rotated": false, "trimmed": true, "sourceSize": { @@ -4743,20 +3693,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 + "x": 4, + "y": 7, + "w": 23, + "h": 19 }, "frame": { - "x": 177, - "y": 176, - "w": 22, - "h": 21 + "x": 184, + "y": 127, + "w": 23, + "h": 19 } }, { - "filename": "tm_dragon", + "filename": "reaper_cloth", "rotated": false, "trimmed": true, "sourceSize": { @@ -4767,227 +3717,17 @@ "x": 5, "y": 5, "w": 22, - "h": 22 - }, - "frame": { - "x": 178, - "y": 197, - "w": 22, - "h": 22 - } - }, - { - "filename": "syrupy_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 199, - "y": 176, - "w": 22, - "h": 21 - } - }, - { - "filename": "tm_electric", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 179, - "y": 219, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_fairy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 179, - "y": 241, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_fighting", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 200, - "y": 197, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_fire", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 180, - "y": 263, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_flying", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 181, - "y": 285, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ghost", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 201, - "y": 219, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_grass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 201, - "y": 241, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ground", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 202, - "y": 263, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 + "h": 23 }, "frame": { "x": 182, - "y": 307, + "y": 146, "w": 22, - "h": 22 + "h": 23 } }, { - "filename": "tm_normal", + "filename": "rock_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -4995,20 +3735,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 5, + "x": 6, + "y": 4, "w": 22, - "h": 22 + "h": 23 }, "frame": { "x": 182, - "y": 329, + "y": 169, "w": 22, - "h": 22 + "h": 23 } }, { - "filename": "tm_poison", + "filename": "blue_orb", "rotated": false, "trimmed": true, "sourceSize": { @@ -5016,20 +3756,41 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 + "x": 6, + "y": 6, + "w": 20, + "h": 20 }, "frame": { - "x": 203, - "y": 285, - "w": 22, - "h": 22 + "x": 207, + "y": 127, + "w": 20, + "h": 20 } }, { - "filename": "tm_psychic", + "filename": "steel_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 204, + "y": 147, + "w": 22, + "h": 23 + } + }, + { + "filename": "dark_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -5044,28 +3805,7 @@ }, "frame": { "x": 204, - "y": 307, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 204, - "y": 329, + "y": 170, "w": 22, "h": 22 } @@ -5085,96 +3825,12 @@ "h": 20 }, "frame": { - "x": 221, - "y": 177, + "x": 160, + "y": 192, "w": 23, "h": 20 } }, - { - "filename": "tm_steel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 222, - "y": 197, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 244, - "y": 177, - "w": 22, - "h": 22 - } - }, - { - "filename": "water_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 266, - "y": 177, - "w": 22, - "h": 22 - } - }, - { - "filename": "water_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 288, - "y": 177, - "w": 22, - "h": 22 - } - }, { "filename": "shell_bell", "rotated": false, @@ -5190,140 +3846,14 @@ "h": 20 }, "frame": { - "x": 244, - "y": 199, + "x": 183, + "y": 192, "w": 23, "h": 20 } }, { - "filename": "x_accuracy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 223, - "y": 219, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_attack", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 223, - "y": 241, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_defense", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 245, - "y": 219, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_sp_atk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 267, - "y": 199, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_sp_def", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 224, - "y": 263, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_speed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 245, - "y": 241, - "w": 22, - "h": 22 - } - }, - { - "filename": "sitrus_berry", + "filename": "dawn_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -5332,13 +3862,1126 @@ }, "spriteSourceSize": { "x": 6, + "y": 6, + "w": 20, + "h": 21 + }, + "frame": { + "x": 206, + "y": 192, + "w": 20, + "h": 21 + } + }, + { + "filename": "super_repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 227, + "y": 128, + "w": 16, + "h": 24 + } + }, + { + "filename": "deep_sea_tooth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 243, + "y": 131, + "w": 22, + "h": 21 + } + }, + { + "filename": "stellar_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 226, + "y": 152, + "w": 22, + "h": 23 + } + }, + { + "filename": "water_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 226, + "y": 175, + "w": 22, + "h": 23 + } + }, + { + "filename": "deep_sea_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 265, + "y": 132, + "w": 22, + "h": 20 + } + }, + { + "filename": "wide_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 248, + "y": 152, + "w": 22, + "h": 23 + } + }, + { + "filename": "dire_hit", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 248, + "y": 175, + "w": 22, + "h": 22 + } + }, + { + "filename": "dna_splicers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 287, + "y": 132, + "w": 22, + "h": 22 + } + }, + { + "filename": "dragon_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 309, + "y": 132, + "w": 22, + "h": 22 + } + }, + { + "filename": "super_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 270, + "y": 152, + "w": 17, + "h": 24 + } + }, + { + "filename": "electirizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 287, + "y": 154, + "w": 22, + "h": 22 + } + }, + { + "filename": "electric_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 309, + "y": 154, + "w": 22, + "h": 22 + } + }, + { + "filename": "enigma_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 270, + "y": 176, + "w": 22, + "h": 22 + } + }, + { + "filename": "fairy_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 292, + "y": 176, + "w": 22, + "h": 22 + } + }, + { + "filename": "fighting_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 331, + "y": 133, + "w": 22, + "h": 22 + } + }, + { + "filename": "fire_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 331, + "y": 155, + "w": 22, + "h": 22 + } + }, + { + "filename": "hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 314, + "y": 176, + "w": 17, + "h": 23 + } + }, + { + "filename": "flying_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 331, + "y": 177, + "w": 22, + "h": 22 + } + }, + { + "filename": "blunder_policy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 19 + }, + "frame": { + "x": 226, + "y": 198, + "w": 22, + "h": 19 + } + }, + { + "filename": "fairy_feather", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 20 + }, + "frame": { + "x": 248, + "y": 197, + "w": 22, + "h": 20 + } + }, + { + "filename": "dubious_disc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 270, + "y": 198, + "w": 22, + "h": 19 + } + }, + { + "filename": "ganlon_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 292, + "y": 198, + "w": 22, + "h": 22 + } + }, + { + "filename": "ghost_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 314, + "y": 199, + "w": 22, + "h": 22 + } + }, + { + "filename": "berry_pot", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 18, + "h": 22 + }, + "frame": { + "x": 336, + "y": 199, + "w": 18, + "h": 22 + } + }, + { + "filename": "grass_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 116, + "y": 203, + "w": 22, + "h": 22 + } + }, + { + "filename": "ground_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 115, + "y": 225, + "w": 22, + "h": 22 + } + }, + { + "filename": "guard_spec", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 115, + "y": 247, + "w": 22, + "h": 22 + } + }, + { + "filename": "ice_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 115, + "y": 269, + "w": 22, + "h": 22 + } + }, + { + "filename": "ice_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 138, + "y": 209, + "w": 22, + "h": 22 + } + }, + { + "filename": "lansat_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 137, + "y": 231, + "w": 21, + "h": 23 + } + }, + { + "filename": "leaf_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 137, + "y": 254, + "w": 21, + "h": 23 + } + }, + { + "filename": "liechi_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 160, + "y": 212, + "w": 22, + "h": 21 + } + }, + { + "filename": "magmarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 182, + "y": 212, + "w": 22, + "h": 22 + } + }, + { + "filename": "mini_black_hole", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 204, + "y": 213, + "w": 22, + "h": 22 + } + }, + { + "filename": "moon_flute", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 24, + "h": 24 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 22, + "h": 22 + }, + "frame": { + "x": 158, + "y": 233, + "w": 22, + "h": 22 + } + }, + { + "filename": "normal_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 158, + "y": 255, + "w": 22, + "h": 22 + } + }, + { + "filename": "poison_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 180, + "y": 234, + "w": 22, + "h": 22 + } + }, + { + "filename": "protector", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 180, + "y": 256, + "w": 22, + "h": 22 + } + }, + { + "filename": "psychic_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 202, + "y": 235, + "w": 22, + "h": 22 + } + }, + { + "filename": "rock_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 202, + "y": 257, + "w": 22, + "h": 22 + } + }, + { + "filename": "malicious_armor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 226, + "y": 217, + "w": 22, + "h": 20 + } + }, + { + "filename": "scroll_of_darkness", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 248, + "y": 217, + "w": 22, + "h": 22 + } + }, + { + "filename": "scroll_of_waters", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 270, + "y": 217, + "w": 22, + "h": 22 + } + }, + { + "filename": "sharp_beak", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 224, + "y": 237, + "w": 21, + "h": 23 + } + }, + { + "filename": "shed_shell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 292, + "y": 220, + "w": 22, + "h": 22 + } + }, + { + "filename": "starf_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 314, + "y": 221, + "w": 22, + "h": 22 + } + }, + { + "filename": "dusk_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 224, + "y": 260, + "w": 21, + "h": 21 + } + }, + { + "filename": "steel_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 245, + "y": 239, + "w": 22, + "h": 22 + } + }, + { + "filename": "sun_flute", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 24, + "h": 24 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 22, + "h": 22 + }, + "frame": { + "x": 267, + "y": 239, + "w": 22, + "h": 22 + } + }, + { + "filename": "sweet_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 245, + "y": 261, + "w": 22, + "h": 21 + } + }, + { + "filename": "syrupy_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 267, + "y": 261, + "w": 22, + "h": 21 + } + }, + { + "filename": "thick_club", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 289, + "y": 242, + "w": 22, + "h": 22 + } + }, + { + "filename": "hard_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, "y": 5, "w": 20, "h": 22 }, "frame": { - "x": 225, - "y": 285, + "x": 336, + "y": 221, "w": 20, "h": 22 } @@ -5357,99 +5000,15 @@ "w": 22, "h": 21 }, - "frame": { - "x": 267, - "y": 221, - "w": 22, - "h": 21 - } - }, - { - "filename": "deep_sea_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 267, - "y": 242, - "w": 22, - "h": 20 - } - }, - { - "filename": "dusk_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 21, - "h": 21 - }, "frame": { "x": 289, - "y": 199, - "w": 21, - "h": 21 - } - }, - { - "filename": "poison_barb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 246, - "y": 263, - "w": 21, - "h": 21 - } - }, - { - "filename": "fairy_feather", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, + "y": 264, "w": 22, - "h": 20 - }, - "frame": { - "x": 267, - "y": 262, - "w": 22, - "h": 20 + "h": 21 } }, { - "filename": "shiny_stone", + "filename": "thunder_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -5458,61 +5017,19 @@ }, "spriteSourceSize": { "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 289, - "y": 220, - "w": 21, - "h": 21 - } - }, - { - "filename": "zoom_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 289, - "y": 241, - "w": 21, - "h": 21 - } - }, - { - "filename": "lock_capsule", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, "y": 5, - "w": 19, + "w": 22, "h": 22 }, "frame": { - "x": 226, - "y": 307, - "w": 19, + "x": 311, + "y": 243, + "w": 22, "h": 22 } }, { - "filename": "malicious_armor", + "filename": "tm_bug", "rotated": false, "trimmed": true, "sourceSize": { @@ -5521,246 +5038,15 @@ }, "spriteSourceSize": { "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 289, - "y": 262, - "w": 22, - "h": 20 - } - }, - { - "filename": "metal_coat", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 226, - "y": 329, - "w": 19, - "h": 22 - } - }, - { - "filename": "unknown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 310, - "y": 177, - "w": 16, - "h": 24 - } - }, - { - "filename": "zinc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 310, - "y": 201, - "w": 16, - "h": 24 - } - }, - { - "filename": "soothe_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 310, - "y": 225, - "w": 17, - "h": 22 - } - }, - { - "filename": "coupon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 161, - "y": 351, - "w": 23, - "h": 19 - } - }, - { - "filename": "relic_crown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 18 - }, - "frame": { - "x": 161, - "y": 370, - "w": 23, - "h": 18 - } - }, - { - "filename": "golden_mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 184, - "y": 351, - "w": 23, - "h": 19 - } - }, - { - "filename": "mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 207, - "y": 351, - "w": 23, - "h": 19 - } - }, - { - "filename": "pair_of_tickets", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 184, - "y": 370, - "w": 23, - "h": 19 - } - }, - { - "filename": "leftovers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 15, - "h": 22 - }, - "frame": { - "x": 176, - "y": 389, - "w": 15, - "h": 22 - } - }, - { - "filename": "black_sludge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 24, - "h": 24 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, "w": 22, - "h": 19 + "h": 22 }, "frame": { - "x": 207, - "y": 370, + "x": 333, + "y": 243, "w": 22, - "h": 19 + "h": 22 } }, { @@ -5778,14 +5064,14 @@ "h": 20 }, "frame": { - "x": 191, - "y": 389, + "x": 311, + "y": 265, "w": 22, "h": 20 } }, { - "filename": "blunder_policy", + "filename": "tm_dark", "rotated": false, "trimmed": true, "sourceSize": { @@ -5794,225 +5080,15 @@ }, "spriteSourceSize": { "x": 5, - "y": 6, + "y": 5, "w": 22, - "h": 19 + "h": 22 }, "frame": { - "x": 194, - "y": 409, + "x": 333, + "y": 265, "w": 22, - "h": 19 - } - }, - { - "filename": "big_nugget", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 213, - "y": 389, - "w": 20, - "h": 20 - } - }, - { - "filename": "dubious_disc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 216, - "y": 409, - "w": 22, - "h": 19 - } - }, - { - "filename": "big_mushroom", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 19 - }, - "frame": { - "x": 230, - "y": 351, - "w": 19, - "h": 19 - } - }, - { - "filename": "lum_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 229, - "y": 370, - "w": 20, - "h": 19 - } - }, - { - "filename": "blue_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 233, - "y": 389, - "w": 20, - "h": 20 - } - }, - { - "filename": "upgrade", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 238, - "y": 409, - "w": 22, - "h": 19 - } - }, - { - "filename": "dawn_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 21 - }, - "frame": { - "x": 323, - "y": 133, - "w": 20, - "h": 21 - } - }, - { - "filename": "gb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 323, - "y": 154, - "w": 20, - "h": 20 - } - }, - { - "filename": "douse_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 343, - "y": 132, - "w": 23, - "h": 17 - } - }, - { - "filename": "magnet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 343, - "y": 149, - "w": 20, - "h": 20 + "h": 22 } }, { @@ -6030,14 +5106,140 @@ "h": 17 }, "frame": { - "x": 366, - "y": 132, + "x": 137, + "y": 277, "w": 23, "h": 17 } }, { - "filename": "mb", + "filename": "whipped_dream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 116, + "y": 291, + "w": 21, + "h": 23 + } + }, + { + "filename": "mystic_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 23 + }, + "frame": { + "x": 116, + "y": 314, + "w": 20, + "h": 23 + } + }, + { + "filename": "sitrus_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 116, + "y": 337, + "w": 20, + "h": 22 + } + }, + { + "filename": "tm_dragon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 137, + "y": 294, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_electric", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 136, + "y": 316, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_fairy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 136, + "y": 338, + "w": 22, + "h": 22 + } + }, + { + "filename": "gb", "rotated": false, "trimmed": true, "sourceSize": { @@ -6051,14 +5253,14 @@ "h": 20 }, "frame": { - "x": 363, - "y": 149, + "x": 116, + "y": 359, "w": 20, "h": 20 } }, { - "filename": "quick_claw", + "filename": "tm_fighting", "rotated": false, "trimmed": true, "sourceSize": { @@ -6066,20 +5268,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 21 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 326, - "y": 174, - "w": 19, - "h": 21 + "x": 116, + "y": 379, + "w": 22, + "h": 22 } }, { - "filename": "spell_tag", + "filename": "upgrade", "rotated": false, "trimmed": true, "sourceSize": { @@ -6087,41 +5289,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 326, - "y": 195, - "w": 19, - "h": 21 - } - }, - { - "filename": "metal_alloy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, + "x": 5, "y": 7, - "w": 21, + "w": 22, "h": 19 }, "frame": { - "x": 345, - "y": 169, - "w": 21, + "x": 136, + "y": 360, + "w": 22, "h": 19 } }, { - "filename": "pb", + "filename": "tm_fire", "rotated": false, "trimmed": true, "sourceSize": { @@ -6129,58 +5310,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 345, - "y": 188, - "w": 20, - "h": 20 - } - }, - { - "filename": "candy_jar", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 366, - "y": 169, - "w": 19, - "h": 20 - } - }, - { - "filename": "pb_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 365, - "y": 189, - "w": 20, - "h": 20 + "x": 138, + "y": 379, + "w": 22, + "h": 22 } }, { @@ -6198,12 +5337,348 @@ "h": 17 }, "frame": { - "x": 345, - "y": 208, + "x": 160, + "y": 277, "w": 20, "h": 17 } }, + { + "filename": "tm_flying", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 159, + "y": 294, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_ghost", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 158, + "y": 316, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_grass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 158, + "y": 338, + "w": 22, + "h": 22 + } + }, + { + "filename": "metal_alloy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 21, + "h": 19 + }, + "frame": { + "x": 158, + "y": 360, + "w": 21, + "h": 19 + } + }, + { + "filename": "lock_capsule", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 160, + "y": 379, + "w": 19, + "h": 22 + } + }, + { + "filename": "relic_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 9, + "w": 17, + "h": 16 + }, + "frame": { + "x": 180, + "y": 278, + "w": 17, + "h": 16 + } + }, + { + "filename": "metal_coat", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 181, + "y": 294, + "w": 19, + "h": 22 + } + }, + { + "filename": "tm_ground", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 180, + "y": 316, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 180, + "y": 338, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_normal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 179, + "y": 360, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_poison", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 179, + "y": 382, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_psychic", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 117, + "y": 401, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 139, + "y": 401, + "w": 22, + "h": 22 + } + }, + { + "filename": "sachet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 18, + "h": 23 + }, + "frame": { + "x": 161, + "y": 401, + "w": 18, + "h": 23 + } + }, + { + "filename": "tm_steel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 179, + "y": 404, + "w": 22, + "h": 22 + } + }, + { + "filename": "leftovers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 15, + "h": 22 + }, + "frame": { + "x": 358, + "y": 89, + "w": 15, + "h": 22 + } + }, { "filename": "razor_fang", "rotated": false, @@ -6219,14 +5694,35 @@ "h": 20 }, "frame": { - "x": 327, - "y": 216, + "x": 373, + "y": 88, "w": 18, "h": 20 } }, { - "filename": "masterpiece_teacup", + "filename": "metronome", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 357, + "y": 111, + "w": 17, + "h": 22 + } + }, + { + "filename": "tm_water", "rotated": false, "trimmed": true, "sourceSize": { @@ -6235,19 +5731,19 @@ }, "spriteSourceSize": { "x": 5, - "y": 7, - "w": 21, - "h": 18 + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 365, - "y": 209, - "w": 21, - "h": 18 + "x": 353, + "y": 133, + "w": 22, + "h": 22 } }, { - "filename": "power_herb", + "filename": "water_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -6255,20 +5751,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 345, - "y": 225, - "w": 20, - "h": 19 + "x": 353, + "y": 155, + "w": 22, + "h": 22 } }, { - "filename": "old_gateau", + "filename": "water_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -6276,20 +5772,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 21, - "h": 18 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 365, - "y": 227, - "w": 21, - "h": 18 + "x": 353, + "y": 177, + "w": 22, + "h": 22 } }, { - "filename": "baton", + "filename": "x_accuracy", "rotated": false, "trimmed": true, "sourceSize": { @@ -6297,20 +5793,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 327, - "y": 236, - "w": 18, - "h": 18 + "x": 354, + "y": 199, + "w": 22, + "h": 22 } }, { - "filename": "razor_claw", + "filename": "x_attack", "rotated": false, "trimmed": true, "sourceSize": { @@ -6318,20 +5814,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 345, - "y": 244, - "w": 20, - "h": 19 + "x": 356, + "y": 221, + "w": 22, + "h": 22 } }, { - "filename": "sharp_meteorite", + "filename": "x_defense", "rotated": false, "trimmed": true, "sourceSize": { @@ -6339,20 +5835,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 21, - "h": 18 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 365, - "y": 245, - "w": 21, - "h": 18 + "x": 355, + "y": 243, + "w": 22, + "h": 22 } }, { - "filename": "golden_egg", + "filename": "x_sp_atk", "rotated": false, "trimmed": true, "sourceSize": { @@ -6360,20 +5856,41 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 6, + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 355, + "y": 265, + "w": 22, + "h": 22 + } + }, + { + "filename": "potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, "w": 17, - "h": 20 + "h": 23 }, "frame": { - "x": 383, - "y": 149, + "x": 374, + "y": 108, "w": 17, - "h": 20 + "h": 23 } }, { - "filename": "hard_stone", + "filename": "unknown", "rotated": false, "trimmed": true, "sourceSize": { @@ -6381,20 +5898,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 + "x": 8, + "y": 4, + "w": 16, + "h": 24 }, "frame": { - "x": 385, - "y": 169, - "w": 19, - "h": 20 + "x": 391, + "y": 91, + "w": 16, + "h": 24 } }, { - "filename": "rb", + "filename": "x_sp_def", "rotated": false, "trimmed": true, "sourceSize": { @@ -6402,20 +5919,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 385, - "y": 189, - "w": 20, - "h": 20 + "x": 407, + "y": 92, + "w": 22, + "h": 22 } }, { - "filename": "smooth_meteorite", + "filename": "zinc", "rotated": false, "trimmed": true, "sourceSize": { @@ -6423,20 +5940,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 20, - "h": 20 + "x": 8, + "y": 4, + "w": 16, + "h": 24 }, "frame": { - "x": 386, - "y": 209, - "w": 20, - "h": 20 + "x": 375, + "y": 131, + "w": 16, + "h": 24 } }, { - "filename": "strange_ball", + "filename": "super_potion", "rotated": false, "trimmed": true, "sourceSize": { @@ -6444,37 +5961,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 + "x": 8, + "y": 5, + "w": 17, + "h": 23 }, "frame": { - "x": 386, - "y": 229, - "w": 20, - "h": 20 - } - }, - { - "filename": "ub", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 386, - "y": 249, - "w": 20, - "h": 20 + "x": 391, + "y": 115, + "w": 17, + "h": 23 } }, { @@ -6492,14 +5988,98 @@ "h": 17 }, "frame": { - "x": 405, - "y": 137, + "x": 408, + "y": 114, "w": 23, "h": 17 } }, { - "filename": "mystery_egg", + "filename": "soothe_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 375, + "y": 155, + "w": 17, + "h": 22 + } + }, + { + "filename": "x_speed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 375, + "y": 177, + "w": 22, + "h": 22 + } + }, + { + "filename": "poison_barb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 376, + "y": 199, + "w": 21, + "h": 21 + } + }, + { + "filename": "quick_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 21 + }, + "frame": { + "x": 378, + "y": 220, + "w": 19, + "h": 21 + } + }, + { + "filename": "absolite", "rotated": false, "trimmed": true, "sourceSize": { @@ -6510,12 +6090,75 @@ "x": 8, "y": 8, "w": 16, + "h": 16 + }, + "frame": { + "x": 391, + "y": 138, + "w": 16, + "h": 16 + } + }, + { + "filename": "shiny_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 392, + "y": 154, + "w": 21, + "h": 21 + } + }, + { + "filename": "oval_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 19 + }, + "frame": { + "x": 413, + "y": 131, + "w": 18, + "h": 19 + } + }, + { + "filename": "baton", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, "h": 18 }, "frame": { - "x": 311, - "y": 247, - "w": 16, + "x": 413, + "y": 150, + "w": 18, "h": 18 } }, @@ -6534,14 +6177,14 @@ "h": 18 }, "frame": { - "x": 327, - "y": 254, + "x": 413, + "y": 168, "w": 18, "h": 18 } }, { - "filename": "absolite", + "filename": "mystery_egg", "rotated": false, "trimmed": true, "sourceSize": { @@ -6552,55 +6195,13 @@ "x": 8, "y": 8, "w": 16, - "h": 16 + "h": 18 }, "frame": { - "x": 311, - "y": 265, + "x": 397, + "y": 175, "w": 16, - "h": 16 - } - }, - { - "filename": "unremarkable_teacup", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 21, "h": 18 - }, - "frame": { - "x": 345, - "y": 263, - "w": 21, - "h": 18 - } - }, - { - "filename": "white_herb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 366, - "y": 263, - "w": 20, - "h": 19 } }, { @@ -6618,96 +6219,12 @@ "h": 18 }, "frame": { - "x": 327, - "y": 272, + "x": 413, + "y": 186, "w": 18, "h": 18 } }, - { - "filename": "wl_ability_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 386, - "y": 269, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_antidote", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 345, - "y": 281, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_awakening", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 365, - "y": 282, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_burn_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 385, - "y": 287, - "w": 20, - "h": 18 - } - }, { "filename": "aerodactylite", "rotated": false, @@ -6723,8 +6240,8 @@ "h": 16 }, "frame": { - "x": 311, - "y": 281, + "x": 397, + "y": 193, "w": 16, "h": 16 } @@ -6744,96 +6261,12 @@ "h": 18 }, "frame": { - "x": 327, - "y": 290, + "x": 413, + "y": 204, "w": 18, "h": 18 } }, - { - "filename": "wl_custom_spliced", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 345, - "y": 299, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_custom_thief", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 365, - "y": 300, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 385, - "y": 305, - "w": 20, - "h": 18 - } - }, - { - "filename": "miracle_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 19, - "h": 19 - }, - "frame": { - "x": 404, - "y": 154, - "w": 19, - "h": 19 - } - }, { "filename": "aggronite", "rotated": false, @@ -6849,54 +6282,12 @@ "h": 16 }, "frame": { - "x": 404, - "y": 173, + "x": 397, + "y": 209, "w": 16, "h": 16 } }, - { - "filename": "lucky_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 405, - "y": 189, - "w": 17, - "h": 20 - } - }, - { - "filename": "oval_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 19 - }, - "frame": { - "x": 406, - "y": 209, - "w": 18, - "h": 19 - } - }, { "filename": "light_ball", "rotated": false, @@ -6912,180 +6303,12 @@ "h": 18 }, "frame": { - "x": 406, - "y": 228, + "x": 413, + "y": 222, "w": 18, "h": 18 } }, - { - "filename": "light_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 406, - "y": 246, - "w": 18, - "h": 18 - } - }, - { - "filename": "toxic_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 406, - "y": 264, - "w": 18, - "h": 18 - } - }, - { - "filename": "wl_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 406, - "y": 282, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 405, - "y": 300, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_full_restore", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 405, - "y": 318, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_guard_spec", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 267, - "y": 282, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 287, - "y": 282, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_ice_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 307, - "y": 297, - "w": 20, - "h": 18 - } - }, { "filename": "alakazite", "rotated": false, @@ -7101,14 +6324,98 @@ "h": 16 }, "frame": { - "x": 327, - "y": 308, + "x": 397, + "y": 225, "w": 16, "h": 16 } }, { - "filename": "wl_item_drop", + "filename": "light_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 413, + "y": 240, + "w": 18, + "h": 18 + } + }, + { + "filename": "zoom_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 200, + "y": 279, + "w": 21, + "h": 21 + } + }, + { + "filename": "lum_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 221, + "y": 281, + "w": 20, + "h": 19 + } + }, + { + "filename": "masterpiece_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 21, + "h": 18 + }, + "frame": { + "x": 241, + "y": 282, + "w": 21, + "h": 18 + } + }, + { + "filename": "old_gateau", "rotated": false, "trimmed": true, "sourceSize": { @@ -7118,268 +6425,16 @@ "spriteSourceSize": { "x": 6, "y": 8, - "w": 20, + "w": 21, "h": 18 }, "frame": { - "x": 343, - "y": 317, - "w": 20, + "x": 262, + "y": 282, + "w": 21, "h": 18 } }, - { - "filename": "wl_item_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 363, - "y": 318, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 383, - "y": 323, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 403, - "y": 336, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 246, - "y": 284, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 245, - "y": 302, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_paralyze_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 245, - "y": 320, - "w": 20, - "h": 18 - } - }, - { - "filename": "relic_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 15, - "h": 11 - }, - "frame": { - "x": 245, - "y": 338, - "w": 15, - "h": 11 - } - }, - { - "filename": "wl_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 249, - "y": 349, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_reset_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 249, - "y": 367, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 253, - "y": 385, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 260, - "y": 403, - "w": 20, - "h": 18 - } - }, - { - "filename": "revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 12, - "h": 17 - }, - "frame": { - "x": 265, - "y": 302, - "w": 12, - "h": 17 - } - }, { "filename": "altarianite", "rotated": false, @@ -7395,12 +6450,558 @@ "h": 16 }, "frame": { - "x": 277, + "x": 200, "y": 300, "w": 16, "h": 16 } }, + { + "filename": "sharp_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 21, + "h": 18 + }, + "frame": { + "x": 216, + "y": 300, + "w": 21, + "h": 18 + } + }, + { + "filename": "unremarkable_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 21, + "h": 18 + }, + "frame": { + "x": 237, + "y": 300, + "w": 21, + "h": 18 + } + }, + { + "filename": "magnet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 258, + "y": 300, + "w": 20, + "h": 20 + } + }, + { + "filename": "mb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 283, + "y": 285, + "w": 20, + "h": 20 + } + }, + { + "filename": "pb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 303, + "y": 285, + "w": 20, + "h": 20 + } + }, + { + "filename": "pb_gold", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 278, + "y": 305, + "w": 20, + "h": 20 + } + }, + { + "filename": "rb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 298, + "y": 305, + "w": 20, + "h": 20 + } + }, + { + "filename": "revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 12, + "h": 17 + }, + "frame": { + "x": 202, + "y": 316, + "w": 12, + "h": 17 + } + }, + { + "filename": "power_herb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 214, + "y": 318, + "w": 20, + "h": 19 + } + }, + { + "filename": "razor_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 234, + "y": 318, + "w": 20, + "h": 19 + } + }, + { + "filename": "smooth_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 254, + "y": 320, + "w": 20, + "h": 20 + } + }, + { + "filename": "strange_ball", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 274, + "y": 325, + "w": 20, + "h": 20 + } + }, + { + "filename": "ub", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 294, + "y": 325, + "w": 20, + "h": 20 + } + }, + { + "filename": "spell_tag", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 19, + "h": 21 + }, + "frame": { + "x": 202, + "y": 337, + "w": 19, + "h": 21 + } + }, + { + "filename": "apicot_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 221, + "y": 337, + "w": 19, + "h": 20 + } + }, + { + "filename": "white_herb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 323, + "y": 287, + "w": 20, + "h": 19 + } + }, + { + "filename": "big_mushroom", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 19 + }, + "frame": { + "x": 343, + "y": 287, + "w": 19, + "h": 19 + } + }, + { + "filename": "candy_jar", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 362, + "y": 287, + "w": 19, + "h": 20 + } + }, + { + "filename": "hard_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 318, + "y": 306, + "w": 19, + "h": 20 + } + }, + { + "filename": "miracle_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 19, + "h": 19 + }, + "frame": { + "x": 337, + "y": 306, + "w": 19, + "h": 19 + } + }, + { + "filename": "wl_ability_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 314, + "y": 326, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_antidote", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 356, + "y": 307, + "w": 20, + "h": 18 + } + }, + { + "filename": "golden_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 376, + "y": 307, + "w": 17, + "h": 20 + } + }, + { + "filename": "wl_awakening", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 393, + "y": 241, + "w": 20, + "h": 18 + } + }, + { + "filename": "toxic_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 413, + "y": 258, + "w": 18, + "h": 18 + } + }, + { + "filename": "wl_burn_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 393, + "y": 259, + "w": 20, + "h": 18 + } + }, { "filename": "ampharosite", "rotated": false, @@ -7416,8 +7017,8 @@ "h": 16 }, "frame": { - "x": 265, - "y": 319, + "x": 377, + "y": 243, "w": 16, "h": 16 } @@ -7437,12 +7038,138 @@ "h": 16 }, "frame": { - "x": 281, - "y": 316, + "x": 377, + "y": 259, "w": 16, "h": 16 } }, + { + "filename": "relic_gold", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 11, + "w": 15, + "h": 11 + }, + "frame": { + "x": 377, + "y": 275, + "w": 15, + "h": 11 + } + }, + { + "filename": "lucky_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 381, + "y": 286, + "w": 17, + "h": 20 + } + }, + { + "filename": "wl_custom_spliced", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 398, + "y": 277, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_custom_thief", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 398, + "y": 295, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 393, + "y": 313, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 240, + "y": 340, + "w": 20, + "h": 18 + } + }, { "filename": "banettite", "rotated": false, @@ -7458,12 +7185,96 @@ "h": 16 }, "frame": { - "x": 297, - "y": 315, + "x": 413, + "y": 313, "w": 16, "h": 16 } }, + { + "filename": "wl_full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 202, + "y": 358, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 201, + "y": 376, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_guard_spec", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 201, + "y": 394, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 201, + "y": 412, + "w": 20, + "h": 18 + } + }, { "filename": "beedrillite", "rotated": false, @@ -7479,12 +7290,33 @@ "h": 16 }, "frame": { - "x": 281, - "y": 332, + "x": 222, + "y": 357, "w": 16, "h": 16 } }, + { + "filename": "wl_ice_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 238, + "y": 358, + "w": 20, + "h": 18 + } + }, { "filename": "blastoisinite", "rotated": false, @@ -7500,12 +7332,243 @@ "h": 16 }, "frame": { - "x": 297, - "y": 331, + "x": 222, + "y": 373, "w": 16, "h": 16 } }, + { + "filename": "wl_item_drop", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 221, + "y": 389, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_item_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 221, + "y": 407, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 241, + "y": 376, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 241, + "y": 394, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 241, + "y": 412, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 258, + "y": 358, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_paralyze_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 261, + "y": 376, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 261, + "y": 394, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_reset_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 261, + "y": 412, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 278, + "y": 345, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 298, + "y": 345, + "w": 20, + "h": 18 + } + }, { "filename": "blazikenite", "rotated": false, @@ -7521,8 +7584,8 @@ "h": 16 }, "frame": { - "x": 269, - "y": 348, + "x": 318, + "y": 344, "w": 16, "h": 16 } @@ -7542,8 +7605,8 @@ "h": 16 }, "frame": { - "x": 269, - "y": 364, + "x": 334, + "y": 326, "w": 16, "h": 16 } @@ -7563,8 +7626,8 @@ "h": 16 }, "frame": { - "x": 285, - "y": 348, + "x": 334, + "y": 342, "w": 16, "h": 16 } @@ -7584,8 +7647,8 @@ "h": 16 }, "frame": { - "x": 285, - "y": 364, + "x": 350, + "y": 325, "w": 16, "h": 16 } @@ -7605,8 +7668,8 @@ "h": 16 }, "frame": { - "x": 273, - "y": 380, + "x": 350, + "y": 341, "w": 16, "h": 16 } @@ -7626,8 +7689,8 @@ "h": 16 }, "frame": { - "x": 289, - "y": 380, + "x": 366, + "y": 327, "w": 16, "h": 16 } @@ -7647,8 +7710,8 @@ "h": 16 }, "frame": { - "x": 301, - "y": 347, + "x": 366, + "y": 343, "w": 16, "h": 16 } @@ -7668,8 +7731,8 @@ "h": 16 }, "frame": { - "x": 301, - "y": 363, + "x": 382, + "y": 331, "w": 16, "h": 16 } @@ -7689,8 +7752,8 @@ "h": 16 }, "frame": { - "x": 305, - "y": 379, + "x": 398, + "y": 331, "w": 16, "h": 16 } @@ -7710,8 +7773,8 @@ "h": 16 }, "frame": { - "x": 280, - "y": 396, + "x": 414, + "y": 329, "w": 16, "h": 16 } @@ -7731,8 +7794,8 @@ "h": 16 }, "frame": { - "x": 280, - "y": 412, + "x": 382, + "y": 347, "w": 16, "h": 16 } @@ -7752,8 +7815,8 @@ "h": 16 }, "frame": { - "x": 296, - "y": 396, + "x": 398, + "y": 347, "w": 16, "h": 16 } @@ -7773,8 +7836,8 @@ "h": 16 }, "frame": { - "x": 296, - "y": 412, + "x": 414, + "y": 345, "w": 16, "h": 16 } @@ -7794,8 +7857,8 @@ "h": 16 }, "frame": { - "x": 312, - "y": 395, + "x": 281, + "y": 363, "w": 16, "h": 16 } @@ -7815,8 +7878,8 @@ "h": 16 }, "frame": { - "x": 312, - "y": 411, + "x": 281, + "y": 379, "w": 16, "h": 16 } @@ -7836,8 +7899,8 @@ "h": 16 }, "frame": { - "x": 313, - "y": 324, + "x": 297, + "y": 363, "w": 16, "h": 16 } @@ -7857,8 +7920,8 @@ "h": 16 }, "frame": { - "x": 317, - "y": 340, + "x": 281, + "y": 395, "w": 16, "h": 16 } @@ -7878,8 +7941,8 @@ "h": 16 }, "frame": { - "x": 317, - "y": 356, + "x": 297, + "y": 379, "w": 16, "h": 16 } @@ -7899,8 +7962,8 @@ "h": 16 }, "frame": { - "x": 321, - "y": 372, + "x": 281, + "y": 411, "w": 16, "h": 16 } @@ -7920,8 +7983,8 @@ "h": 16 }, "frame": { - "x": 328, - "y": 388, + "x": 297, + "y": 395, "w": 16, "h": 16 } @@ -7941,8 +8004,8 @@ "h": 16 }, "frame": { - "x": 328, - "y": 404, + "x": 297, + "y": 411, "w": 16, "h": 16 } @@ -7962,8 +8025,8 @@ "h": 16 }, "frame": { - "x": 333, - "y": 335, + "x": 313, + "y": 363, "w": 16, "h": 16 } @@ -7983,8 +8046,8 @@ "h": 16 }, "frame": { - "x": 333, - "y": 351, + "x": 313, + "y": 379, "w": 16, "h": 16 } @@ -8004,8 +8067,8 @@ "h": 16 }, "frame": { - "x": 337, - "y": 367, + "x": 313, + "y": 395, "w": 16, "h": 16 } @@ -8025,8 +8088,8 @@ "h": 16 }, "frame": { - "x": 344, - "y": 383, + "x": 313, + "y": 411, "w": 16, "h": 16 } @@ -8046,8 +8109,8 @@ "h": 16 }, "frame": { - "x": 344, - "y": 399, + "x": 350, + "y": 357, "w": 16, "h": 16 } @@ -8067,8 +8130,8 @@ "h": 16 }, "frame": { - "x": 349, - "y": 336, + "x": 366, + "y": 359, "w": 16, "h": 16 } @@ -8088,8 +8151,8 @@ "h": 16 }, "frame": { - "x": 365, - "y": 336, + "x": 334, + "y": 358, "w": 16, "h": 16 } @@ -8109,8 +8172,8 @@ "h": 16 }, "frame": { - "x": 381, - "y": 341, + "x": 382, + "y": 363, "w": 16, "h": 16 } @@ -8130,8 +8193,8 @@ "h": 16 }, "frame": { - "x": 353, - "y": 352, + "x": 398, + "y": 363, "w": 16, "h": 16 } @@ -8151,8 +8214,8 @@ "h": 16 }, "frame": { - "x": 369, - "y": 357, + "x": 414, + "y": 361, "w": 16, "h": 16 } @@ -8172,8 +8235,8 @@ "h": 16 }, "frame": { - "x": 385, - "y": 357, + "x": 329, + "y": 374, "w": 16, "h": 16 } @@ -8193,8 +8256,8 @@ "h": 16 }, "frame": { - "x": 401, - "y": 354, + "x": 329, + "y": 390, "w": 16, "h": 16 } @@ -8214,8 +8277,8 @@ "h": 16 }, "frame": { - "x": 401, - "y": 370, + "x": 329, + "y": 406, "w": 16, "h": 16 } @@ -8235,8 +8298,8 @@ "h": 16 }, "frame": { - "x": 360, - "y": 386, + "x": 345, + "y": 374, "w": 16, "h": 16 } @@ -8256,8 +8319,8 @@ "h": 16 }, "frame": { - "x": 360, - "y": 402, + "x": 345, + "y": 390, "w": 16, "h": 16 } @@ -8277,8 +8340,8 @@ "h": 16 }, "frame": { - "x": 376, - "y": 373, + "x": 345, + "y": 406, "w": 16, "h": 16 } @@ -8298,8 +8361,8 @@ "h": 16 }, "frame": { - "x": 376, - "y": 389, + "x": 361, + "y": 375, "w": 16, "h": 16 } @@ -8319,8 +8382,8 @@ "h": 16 }, "frame": { - "x": 376, - "y": 405, + "x": 361, + "y": 391, "w": 16, "h": 16 } @@ -8340,8 +8403,8 @@ "h": 16 }, "frame": { - "x": 392, - "y": 386, + "x": 361, + "y": 407, "w": 16, "h": 16 } @@ -8352,6 +8415,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2fe5215a80083d35f525901078cb1f59:c17ac8d050238e3fca0ec935f6e8d37f:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:d7c7ecb91ab6604d8ab2ddb533b23145:a897bbf637b19b6d2a3b966b9c84e765:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 4724f7b7b0ea480a301c741ba1cd67529fa9bf27..5f032b30cfb048c2d0cf71ec1e6ad3f051d832c9 100644 GIT binary patch literal 58664 zcmV*IKxe;+P)eEYJmOHfSv^xDv^OF=z7#$;!jQa|^)+x^qh z(?mh?`uBf(eqUf?_A4yn#q{8Yb-RK(_nD51kB$BN#I@t;o~yUGi*ks@@cH5J`n_Im zZE@4Una}n8yvqCJ!e+S4*KU@t<@){jSy=tT^Ppdp^wh5A&rWWR_Vwtazm+20;Po$_2u#ke!$(TBD2{$GJ|ic_wpqCBXi z2FdS$vh1K9c)RJ|Kv#uschagP*0Y zoWMI;Y32IToN^V0UugZv5pUc4eq_?1kXp^R3|BpEFlNMaoNVQ!MQmvdpo|<-Nye$A zT*ZeXMD;(~Cwj*OK^xwLo+5`&X7H_NSce}QEP=I#S z)wc1~7a}+xXBJnc<9G4$2C%3z}F!<~Kqn&?QZH1X8h4sf9ld~)>77d+IGz=p4fYlcj79vL=C{E~G`dX9GvQ7mB?p`%%0000AbW%=J0RR90 zd;kCbC7a7)pnCuS010qNS#tmY4#WTe4#WYKD-Ig~03ZNKL_t(|+U&gvd=*u;@1JvW zccpKI%+m=R2!sq^7$On~7@LqV6U@+`Kp;xO7%(8iRU(Rf@&W>y76L;01~q^X1Ohl9 zjev~^3W%Tx7g~sd3Q?clwiT83{psPq)*h<%uBwy7sqcOF^VZ35QkCJPzV%yc?X_3! z^7H$D_J6DC`VC*Zn)rJwMhKxF@RKmF*BdCFIR1qE&HPui@;bk7Vc)fu{=XmhbL7U4 z_?^E0nByKdHRFlf+-iMh{+_SDPP?Hy{(+`Vx?fX6OaCwX$5K*;6S5;E#Xr(}-@?ijGxP=JyYicdos9CvVVFmiIklQ1hUzneF|e(P)dpV#yA50y0ekwYc< zO|9VCF&y4@>;PUxMCJt_BI$de11>P*yZy+0gDYB=*!NF#c*56lzgAUP<@1EkUY70i z=T`Mz!$9ma5}$z>_J|!At5obF(L3V#N?Hi7Z!%J@&?#> z`Q6<5wZuz2(@XM84sB{GDLHhgsYPI92fzYcJN%Q93<80mDuxO^1lo8Nsldoi;C0VE z*PW2*I{usAF9lvUU~J#DdBCg6d7s`9cxC(exf8%^mGizEJ%QJ1AHVZy;N<{JKYaMZ zHETXRd{}Se9yce2784sQ=_@a6z<^++=ESS1d28d>;Qbi9>+E+nZ8~)M5ZL8I&CNGk ziUA}dg32p9+mx3VQAGywcWOvs|8*V<%_H;#n6B47G3SXV=IEBA zR|Tf)d#bXks}c9?bFDllE2y{gZuReh}cR)gt!+3NGFSD&};+Y6@a z?;);uJCwzxhcmzqmoC=*boq$++T#XDu~b*v!6sSv>oXaT1u?zp4wi4Jq-sQLn0z^N)LYfn{SR+g$SpcMu$DJ%?m zg{k@iTEJ=5lqs`U_3qP0)fdnLPOBf@UbcGC`SYs2fEIAt`}W(wD_(Vo1dj|ETUuIL z4ezB3;sW8LuI?$d>;WvHu}oTAW3dJ=kX4t7U|quUth{vn&>{4BbLQk9BIN6@x0V?% zno|RPyhRpU9W~C~@Tn`IdwhTZ4s+#-5di{S&(E6}XZ!lyw zdqJP^%FmJQ=NEw?v$93!BX26d^X+&vWcFTs{E9gF$9kT=Q`gt589R3S-5*zGWGpxl zxZCAgtjl{csF`~ZODv-m!-2&nnY<`20A}T-*VaN>v9sh5W*0ZFzqR$I@gi>|-`INN zMpIKwO$`8Re(>hkC39+PbszGQq8FDJrW|O9OXbC~c|v4)-E;l?b&wd?_4JCt_uYrU z^d3FtVAw)rb+>eB;_*Y^%EGXP$o6FY^;=~hlDhwXV1~SEJj%Wg$M(Ung~(?2`A+@0 zhaWzVVGEI!oiDqo?0frd$_kOa7ysutWnWB2#+_dOPd-@#|8B_GPu6_02K*k%$lSAF zK}N<{uepcuij83w0#8GQynt68@QPgF$ZJM^e#wyL%lSa8r1^4l+6|#QP*&X#fK^vl z$B=C-$*(PGa+cQ)CtgfpUdT5TUZg+R0x~j8me=*`>E{vGbt

?z@lBAUfj?z?JaC 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 literal 58177 zcmV*0KzYB3P)l+Do9{Q3I*=U&+1;+UJ6Pg7Fp=;y}9 z#;~!m{rc1E`1_5GjsEkfl~pjPBO!i(f%~to%CAHBTv*2L{QS#Cl)(7>_rdzn$Ca6? z)4!WyVte7l^l^{1p{B0jg>#~rR@eCao$3Cs)AMw5cgSF4smI5=mmTE7W~KFt`|RXo zXJxkN=YnY&y@C1I-}cl=NBh3x_a`a&zh8c<%{DlwjjXdo#QIH+J|JvR;HZ|M1Li)V-QlX{c_UC`#TAO2> z>*S=IcoyGxA|`W^$MJ@_kZR5*7U$AZOlxV#(&^pr^ip*7L7wsM@Mx>B#y>q{gVXkC zkNLAw=j-2yw}drNs89X$bj~g{{rutl-2j=Epuu+dBEfpmnxx=hxf((R;(f{!(zN zs>Z9?+hAQ-Rbp9S`k{)neahElPW_TLb~iZU(1fN>ic>2aV98R!^~}lR#P-|!(NTu< zn^PFM(|e$#i*ZH#`X-1e8H7tshCp|F>!=(yf8W5sWtVa2Gt~b5k=s=*{Fa+BmAE!{ K zzNDsWlOK$z^@O%RjZ)OdgGRQu3c@gHhuGZ4lE%Hg-tD1trfo)DvGXdAeZg>ZteUvY z&U|G(VEgU+ZApC5oKn!#8MJ?kk~2t)*o$e6laht07Q?IRm!NmMw)}dmAEqIr?7(Q> z`aTR7`(LsQhUr_^%D=p*AXpeSE)MxnAKQ|$AoAh3shgwSjUsTr|NmTb#|~rBhAuzV zv{F^VWGa<}`ZmdLwP(E3o`<#-p2aT47c(Lk6cyoenqL1>nfqL00000AbW%=J0RR90 z|NsB~C6YIvP7weA010qNS#tmY4`BcR4`BhQKc{H`03ZNKL_t(|+U&gxd=y32_n(=m z?tDJEL+$}X0s%E40Rl0=DpwN-L~gl zRfUB7Kl>kPfxx+7r_PB_m-+qvMxPVT8^M2&p*ap*_Emn`$hn=3{dbL=yA=E!yYvH| zGx#6#JmVv?9{3!;5pe%f;OyB2=K|gk7X(7i&Gq;@{^re_H%7}J9SyJ$6g)Cq*Wn$w zdq?5J3bVUihF0Kj?pz4lUsqn^f|26)v&+GPyJ-3} zJXnE6S)jw@_jT%QhTF(BAQ-#I>Qe9*W0tfE=L&Rtq}-MXOXR(D<<^f^C%_+#%k zcgft@d0r9gx9IuW{01 z%a<>2?AjWjC(a4(3>T~@ofex0u%=J{(u)`O1)nYiST0)p+|Dq7HQxJNAP!*7@;-Oz z48U3!v$-v(G7v;tXK9}OS=QC3!jRy+^z8e4B`0>v<&&>i01Zrm$CC*B8o?8bN2#i@bdEL6n&U355 z0)fiar&q5&?L7A}SRnBJ$7LUXT;?Y7$Eqx{sy_xov}hCTj1LISAx#Y)43C=4(PGx6 zOP78}o>2cwH2|xw?)dS!=kOI(R*JLd*nZ#ycCg^mrLzt6rjozN{BAeMQbZW@U$|g! zUeN-Y-|)yWq9iO<0kB^E5@Egi<>_q33S|HTQ~+tfRaeyvXmQ_ty0QQjKpH<~%2(sl zo_kJL7NAN5Sc!=UD^XV#paMwidiNf)?z+j7b!7o6fVBGbLzSyLpFXWC3s3>1k2h|7 z|Knejm1)XicwN}hs;a)T`}VD>x~`uA_W|t;H{}elik-tnCDb)XhedA>aE8ANXh-(% zM_0FYZTWtHa`yG@*4azv&gB<0G@L^#XgJ8&#bk+#F()h#o1bU_tCtKOt)zLtf?rUD zHT~5uQCOg_)7fc-@``b!WO*q7Ob<65>vT7mmOO%SS(SIxEW*Mum!EUbb9WYUdEs zs#O3CVbxY^=Qg*WjG+p7jhXjn{r5U|K8>LYc~zdSyri8g12sXYLSFBey&h`c}0I+SZgnqmnU~> zNGbk}Je0>$L>ONq=`vYp;ucyEzFA<~_V1R3U&+$FMP-602 z;EyFG99Zqt+S&ybv(jg+lII|;0K2X?2y5LKFqD{eF0T)Ws`Eo2tkv7MH#DHcELZaO zuQq;+xITXIvz1^dG3)OIVzWB>hkyP#zyctj6Ovm4>X~h4h7W%_CdEF3`2`Tdlsz^! z7IhWt^GYLiSjpve1Mb5`rCpy1qz;^N|=_)${>xbneamd};6ma8pW z2x7~{cg9N>j0Yb?O>tov08eMtzJ2@DR3>1tX%w+eXJ-ShFSCKw;c1)|&MBVKg4PuL_-gl*-DzoZ76tkuluPUB7bJeU_=_MtS z2oGBDvHK6Zue%N(_U^;y|x__4BV<--qSlCg24 zC9c@`jw#ijpZUXv4WENyYzo+C&cwtdB;fJtGuI83XM7?JY!*viu$j{dUPA4@`KBYW ztHYFU)TsUF3?DmgojeD+Isu>zNG%Klft@%9tfaEg5Bis<_ysYBk3`yT04!6mf-gEO z&WdQ+ZLDmBl$QPKbhrmt71LTWJ6oPHV@6F)hnkuiK-B_q1?+PWuy*g>@zqzm0aY5} zQqHYfb+WiPy|%VGaaPf)l3D4A$~h3%?%kWmjM)vSu0vePxjulZ;i1aPOMt2~;!@7N z_~M$CE6>0G{>sljF8c-IvXF#l#Z;g9oZAL~HQPQD3b0}b7SI|h&iG{39xIqRx-TxB z0X+^6=&%BH`+-(vLqlZ}uzJjjNr8qsV%0!-w^1A@Err(8JKTqtkU6@C~2{l2n$i6A4Dg3xS}G7X|AAVK!^JV)XbPMfN))< zM%=*e@jDKU{|a3q;+mqJD^5&LUsZeZQ8yF+c zhz9ZCIU>o>BUWJB2cLf)7YDSoqtlX-it8vtZ$NCvMQ;UsS6)|BTx_{z5KKeE_J;jy zkM9rgkmV;o2$cMQO^ILt>m^DDA2iJe4V@Lh0#!vOK8V`lu(G=qroH+lqI&g9l$Hw? z{PC+OA)G;p{C#@kI4}jHRnM;|k$+Ba90w9hph;Z23KMw{*DCegrQwtiu9H4d`@QLu z5cZ)&{4^^}CbncnO+S2=-FoOqBwcrpzTO~y$>bXDs0b5&RsDZpr?{^BEK8>xd%1fjzz27OY zaU-_2-VczrlzyiGOGxR63IdOkpkHDeqiXMy zX%LHs4mAw$8J8}tEU(+2EZp2V5ZRxSAYPr2!S~?VhFuN$<;fh@az=_0*itlM`3=kk zL0>PS%Jj4ymGvMhYw`vevrR61;?QQ zHZ}mc~R zh6bi~FENo2Qj(!5iyFgbw8%3w9EpiQYl9~%IuGfF=Qv3tqqhG#=YEP|`wu?&V9c1| zmjcu*R);SGwZ$h+)K8lR*eb9~sd$>**@U73V%V=y+3@;V2v`LL4QI7@ikU@f~POL1>W7BG_ z9tubY>&ge!H542~PC%^TtQv(YtLm#-mAoAbgAL2yZNvjykL-842oCLYU&Qs3hv^(-JjQ`vIj4t znxnA4hu-oc9hx#8Zqg1- zk;f;t34@!oiEZTZl8jAolU9;psDff~Tg#Pyg!SnxtPitE`Xa_+w+|6vssj{~c+vh(LF(3r*wXw}xb1SVL;g0kQNlftq|DX>6THYo)b z2+Jm=zye{}q*PdOm>eaQmnU6RtLXYjWm&McZ0V}OdQCiURn-j|tZ9ZKtk8i2na7*h zgO(A}2&;d#aad)K11zLaD{XBVkR^VfB=-+UT(IB&-Y_R;^T45`x;gb!*(#i%CiFfYXw&ScoUAEkR&a zNmzht8=x9k$Xu+zUJF9Y^Qh0OvR98yd3kwGFU7R@!_)-IC2n@U>~U~{1PgGf+1ox1G-c<8NCMG6Ef(4~zq(($Ur0RW2b@vGCC%Sr5 z>`vPhF#Tnfp{~l#b69GA0kFmu3omFZi*ZPTl?4kzmJX{ohXo-^hc$)6f{>-dYQtec z$kJhD*suT-xZMJ{61sVYet^A1@8mMdh95{fPC1-k0B%^k8{do8%MJoMy?%+1Xm z1eTlV(==wO$;k46bx)nJen^X@_+>{gc6+2Ocff+|V#woP5Qp zNCuIY85-yU z^Aan@KUF_y7^5>0);P45nVD`@rpn4AWJy@gkR@R`LzaZ)3|SIZc{#F*BUa@ieP_!$ zRaGG^_*}+*K*)law+-{bUfWiCNeI-%9H1V5{GI_CFdxw2f=ayS*I@S~M$)&riQFF= zSy@PHDKGBW*JiLyVEl&vsYltE(14CAAW=ny}dVh040W6aOR{YNwvJe)q zDn}<+E+Q0ra>SEWD6US+o+MaT9J0*Qr!i!0JAK;pqNT6`Kx@{Nm6;}9rR%S^dHE6t zaUl^apv85SD`FSGN=?n~kq6AOQhO|2y3_@$1DaqZ_=uWoy-ps|iy@Ykl?{>7LRM3! zP92vi%&=KO&Mt%ntt|8B3Rx`aB6vaM1X)J8rK~4M6pi2}U|m_rLRO2YWP6bpE%1YO z-T#mQ127LGBV0o)T9I5x04sV9!Gdpdtvtg>1zdSlu9*#}++I+Fg|t$ro1T~MYQj2C z(xOfbqGiFFI(68vVIZtbOfg#VWKblTBrIYT|1*UwOxytySJg#$Bw`l8Dk@4#E3#o- zQOE*Vi%u^x%|&qUga!ZS(W5r2va7BqRApu2%j4IV1=O%LD024HsdJ*IPMsY&2&0(K z&ews~(rm#hJD9NgF;~x&V@`vBC6$F)JpG(uv_w|JMpMkf=CPwuY{t`F{Ld4zAiGEc zPADnN+VP%x2niN;IC{dmGf2o9X1B6TE-aFk28*#@{Nfi(frYHf2ol_JSaww&C4++i z7TWAViE3-h=+OgcL9pVidZ^t&9>Q`Ctf&VbS77nx*5gAM!5TMu>QqSCd4^#a#fAzC zBt@(|L)L^KA!~e)kQEjrWNorS7Td}pU4-T^w6IWGunJ@HL!2|M+>zF#uL5kdm+(taMNci+_5B ztO>m*c!sR;Q^tFStgtp=o*`>f#wI&tfyF`8A}fbf9a_c`R?&0M6-iiI6jG?H*PLE( z7~NzmiHiwsEZo#w;C`R3aoE5f?&!1-;79@KQcyX3An&;l|DoTO7CV2wjA-$m+#!!MD<8}Z4FyTHXBWXQ_N(=11Ztjt=? zGBs9P%Xz=jRs~k4swXLN=RFw4ov-O8VGWz6+bGKwEvh78RW8!5R|jNuUN2b;ne7uFq{?Q39=_X-~KcJh06_%r$gtaMCHwUbXj9uKiRaF+yqDJu#g$1;*Y;TdK zD>f5pop<*%eSZW51s_MgchCJ#j*>lsQ7SCb7ScjhAuA3mMOZ%xiz#BV@uZ}rXsu#_ zh_Er&XmhQF%CKrVxM}4VKMSll$|=gXYS-23#${gh8%B`24#PD@p?vciHn2R09s_|_ zz6X27V?5Z`J&GU!w5aZ?vU(67`b1gTus~IU77nZ4aR*b%3~h&)!o12a8mYtZ%rzUW zC^CNH|u;3+2Qe;8N1nQV9zv z(LMb!r4Sl&cHTV*5=&YBzq>TBaaiCwyLR{mYmC?=0i=9=~-T1!;N73RCtQXS~-U@JfravKFrdt^k&e%>JUd zDE^)81g*Xczu$jZR88_ItnsRnVD)WH@K?dA9?mtLfXDEz&u5yxkft2<4pjrp4v#{I|Bz_xvrj(xq~G2kKh7Qo(;MdC zNg~QvW3Pp!?eIE$u4>o0kfsq(UY^}?XFj~x`J;IB_9bSME^6SOdeUO-;W=}3T&(Oy zu!xW0*>5b1h`8}akHOg;S@~3zP4i;$*KmuEFDxWjr%!{bSY_ok;n##~Ps2DWyqhD%C1Kr2 zsNA&hmF!5%dM-`(gt*8~r>eMCRk|niC8lG~MTv*D*kBEo&#VDyCBseqS)bVxq_qKV z%F&&rjm3>V?VXM1>YJ5fV4v$H-arsocw=LZia3VVbNG5=dD{t2%*xd<}v+ za-_0S&?-}5F-Bc{J)hf=_MGAg&z)<9R?(_cRV&pK`pjJ*trEDoX|XOUET4H-O^x}m zi`Dv`Jx?MYVJl7Lg*~&WC3MZKE+SRH8SSiZ#nJ@3!WsV5Os>=d< zs<*kerUqOfm~sJq=7F9)!3C;E18HeH8xLHuMwW`7w)v1%p zDu355aDh4j@l0Qs<{n#FzK7SY1y&D(x>RA^e&7JGx*gPIv+9<1nWE?bCk3pM15KWR z0IbqdiIpua_C}b0PC|3ILOD51ks2KDw=ALgGI?A|3|I+Rz)Eyu0<2L;YZN3H6DNYQ zCYBazu$);$ABb0dwuMItTH)fUhko&e;03Z;xNzan1^7;9#44if&MBw=&k+YK5EimZ z16nzNGgx2&K0ID5G>(Ta~pR$*an>AfEb zfDje~THE4#^jJDEo~d5YwIC&fc*U*>B?rj(mk_pR&(H+2YD6`3Xu{A1=m*)y0P9A8 z1+)m(nj@MQ+>u4FwB!QQia3I$B^Tx{WCg(TeJ)gczzeFvG9OM(21n=+mU;Vz4d4iE zVeQP$ZaiWsU4)H@$|L0iSXYxNu>8ORd|!^=pAZ)MhJ6|O!Ex|?IsN*n$JxtB>;6TH z?nhL;dWA7!6(3*9IIL|w(5#pRNaEeFLKyM^Nkw51K|c{EUwNf^C`bz^C6KCya#%p? z$enk7T=wyuQ|=&GM^splS`aHe6U5YlSas51jW9=)lz<~tg@y0K!ClZZb{VV)E4d~) zdF{id&dS`-bHj!Mx0?#9((G?`hWuD#EUv`Wh!Lm=mlY`B#e(m{Y2jgSylqv*&~fm6 za3%Y}aal?DGFa#PArEYes01t)-(%^vc*bGH_xQC9i(PX~VWAf+a($q!K6YOQhxNr! z6d1BfNLV0XmEAbyPKZ`hP7^FeSkM?ISbD$$Si1-o$b0s3=b2vQmTFY*@F6++a=)E{DMq zFwyX1Iw5{`Sq>J?u!Me8KqHS6to!j-8Oln)8ihGv=_p(vsMoeqQWj4z*fp51d%+SO zaIeyr!4h7nt{yt{6=VjmxJTqqQ&u@;%8hGI>%yY;)sCJ!9LWW?uXc5+*oDc(E{Cvo z?SeG0L}ium1(=DcMHfw2Yik}hlauu{1XID=%?%rrqh72UU$SK7ee4lU{+5q7N@LHognMk6L4ic#|V`ztcnW271!z< z4%we`2y4WyeC=AZ1%n5pe!&9*GNp}m*TZ+!xO#BS^|!C@sUHn|6R)ue>@0P&^7(M` z0nHc5)&6=BdcPvH*w`Mr_c7YX8bXKbI1iDzd%@!V~AE2;AsxIAmkSa3vvwE z+PdYITkeOvok><K^*yxLU}$5VDkr{K#YUUsDHEMdVHg9m?+umD`(0;Tif;fL4Wn+?Uu1MgZE!?lzYXE0_3u5&UAydgjcTMfgdpK+Q$V5Qpe$G&D$5e2E}% zb_va!Q+|Q#?Iq;+xf>M6F~0zVZ zLlUz9KBCq5q`n@!Vi2c*3gginn!o-WYTATCoYIc>u#D4t1G0*o=GcD$h6&*tyuSjD_k-ih=y*T-c;`j3qbaPHB`l>poQ879sPButZe4#Y_SjDHX`KZbG5So7e}R)7D!rRQ9G8Cqt{=6f@lJQ$8jFC z!tNKa?r*EGYUKJhp>*TNjDRfT=w{7s-2oxXy;K78{}z& z79%-5&-K?|@BERVtFu|B4Wmg;8BY`@435cTO?U>akYf-{>Q3%Xu&8D1`uy&)Tz*3w@U+J2n-k z`b`B|`)21e8&zp(N9JnYl&)XDzSL_gouM&#${YQ9?TcX5GQXy!sC_q#aXKv{JUSvG zJUm+2ij>_AcE=t0&OKw7jflxBEW~|e2D3(=fenn02U_!((tqnp-9@s4-9VzNr?6Kq zo7?c=pB!SWX^E7Vqhn1glJ%LbyR~lJx|_4mZgJV-#f!_7#vn*)_U!!Gfb1C#OP~T+ z4qCor>+$dlDr>o9JJK2&(9>XzmN72BW?Vj4%W>msG?B?GtzT<)=um0tp}QY>B>!dg zou064*|HIQK3JiuEcY|8dGRK}658^C>*MKQq}7X&>r1AhP8L7>QX(9q^y-nspC*FE{FGdg zn37|JhK7f?$#Kx~nMXicrEt@SSCc_nqv0lw0xR4vFf%g~Sj{F_?B<(qUK8K3qZ5|T z{QkS|fTGF@V-@(nyg*Gc;EJ*KM`XA>3Ob6Kci({v)Qgc25nQ^M>Y9Kx(8s3j>c7iD%P>GsUw3ag4&KT6 z=mo*-#gD6-g-2J1gDS!;SX@{FmXub^G8#s}m<1Vz0?XqWa9z8B+W^(PLK_y)^5qIw zh(jboSRt%e6ym~Yf~cZs$l}nU-z{7AJN$=jX)$CK+I%q3($v;|vIPrGz~aJsaM&=W zvueZIOjP?n&mTF`t<+U$H$OQUT%diF(H5ME64vag_#!`B1F%XRtU`RHD^>ujQc#yZ zibT0Zj1sP<_3!^6(NbZJ!;pn3vsBi&0=b;70sbo-d{=ZhUFmR~rgk+&EP!?O-3MQO z^`Kmli((abf*>(#GPK7tAgp-<^+gC#TFHQmx3&OPvJe(#6;XhT3?5Lffv~_nAzHHY zC`Yo2Zl0rrruG8XbvmqJNlC;?z_M7iVXCxz-Oir}R^32ds<6uD&j(gz$+BXc@%>VP z6~cNZlVD-FSx11iW{oba?~oM$Tj6tM?c@oqSDu(iv`AW(A4Fv#BJhLx@Tg#%RF=`M z9eS|ph-y?tG{4da3sDiQR|PD#4AON-FA@YR3CqaNc0U6Vcp7x|w7m!+Nh{fx%!l>i zffN=lfrqquJ^na-DHO`uENLC$JxLFpHbV!)EqXBAn&&(uI{@2Tu!IR%fT|9c_z}w< zg@?A`tN>LTWpwojvI1b|^?-$}0N8wAh$5`Vh}Av|7EKR-`svR$sjbRuaKWmL3agvht+W&zp+i_^+33;W z2(76Y2urAH-#%a^VL|Tx^coG8&wSy#7hYIVYPy_YUS3WNWP*7)GGZn6PfUEUe}4xo z>|OvtL8$r~G==MnN?{#4HFD%gbY9i)&&Vl-7At^tP{3M7kSJ*{M1|R~mcq|Do&kP- z!ZyqYpWZfsDXq+8&Wh7YmR-tRS(R@_Y|*IW`boz#m}zOW2%%k;iEfY_p@2o-Dlw~a^_y?5 z-XWDm(n4(w9{h>bNPZI3)EsUoE87V=U`^gEf1cJSt?ML*g>!N!Z>J9n7Q`w@151zS zg?13DAPpR?vdZMJ;BMbOXai+(SRGCCX@K<^;9__$6aShtnU#sn5<5)W|fORTDTNciOwe)Tdi}B2&5EH>X@PRg~dD&q2lj<`dtJJg! z6DGjDq{U%%m$16qu!vS+uN|{z@90%1SW&$fBpJgkRst8g!zWMMU2`0kViv14b(jx! zs#_!7AmGZGh_^N}9mG@+P?b6h?dB%~s?lok*VIfNui*3D%*_0J@fxv(MX)~mOwa;h zm43IvfhrJ)k*v@iieK&z@rrxFv9e27RaQaE?%mZc!ebHbBHA5mH}cf6>JS&LrB^Rq zYQahnDSHC6u+$}+=S5^kWY5dKdg(m%830x)PNzzRds|vQ3{!Ga4+b#nKZ2yaS5&VZ zJK#=Pc?56`AMEV!deU-$3M@rd7Ay0^4>4rbefS}tW7-Dy|Cq?#pp+H}tJ{(Du0p#q z2v+m;;;*UskMaCs^t)g}SRt%!NA!Z9ZA4m3w1-Q-cV`whE9`a(v0$OFrdhBoaT(aU z8i)D2)gDG&MS!x7jXc$^IwVA2hGgkdNsD{I1kOsy*@dnmKw0yyUYe~w1HqawflEuB z@fvJWkN096%yUTG(Z*6>Au5H{kPp|aSp)Zi);6RC8OFA4+XO6V4|n_Uh`Z3PZ&_c* zBu{D*qpHXkLQNb!TB4e5iT~z}h-u?S z{K9y`vSNjcRbb^kF)=kYPFNKPYZq-0I#z>a6hIc(5_okt@|B&Nj)4Iy@19X&WtB5v z4!F#{EDrWk04vAuniJB1RO*BS2ht||lVKqwGJSN#$=zL3$M0_3i6X{8a=Q;ONl+3QT=ZAT5emLRenKNP(3#E?K$%_v`Hu zW3k~tK-aa0rW z+Fn_qUC_nIe#%A4uBhy!X#=p{{>$mSQn3##s{#v=50J){HfDV$BQ=YvM%eZIY<|Mc?C1d^<4q%rl;;a;v^G zXC}6C{q)QS9>~a0=S$-XiY5#8Rs=e;6cdh635gagVL@QAX9OzAs;1_yyY4bg7cMrW zj)YY=M7mnU_4A`@Op&f*VYF_FqYxz-g%k$Q=vb>M+2jx2KI25l3;z2QvqRb;3_w)Z>I8^)6%l3_B-2}p({~2 zaIsdAksQ`cjTW%VNJ&9jDb_PY;plc$(6_CCg?oH!u(+y}RbVe3<~JJIP=uAaawX;% z3}RKm>z1&5gD%$5;^%c2-L$+aXq2#@mqTy@ft(b+YGsEG?+5fJz{Y8T{y**XHx8>} znYs|@M;{HOOC8n2!6o{E=xB3DG;_jQu%K_>OglVJoG4($r*c{vDis&&->Mad1+0{G zjAhKsh>ay!{uI%pnGzM1f}b6O>=-kbVLG(gl5v;^a3s(NS@8(l7 z=({1Q28S~T)g;|ecV+%55EHXJ1$hPf#n9Id_3y7#L9j;(O!JXP5SNnJ`5T|*UJ-A^ zTOBzcebl2P!HSR4X#uO;TsR)B(qeCfz41m^-@XfMRv8jjd}?Yo?JUnyDk|bsSaQZ8 zG_aA@%$YL*RhV7TFJNVWzC?{Vuu8$0mD16o#b|I8e8>E zPw$%!s5Wh~TwY3SMh3BZAVusSk%F|qz!M6o5vsm@bD0h+;_%@J7c50tj@`W2iMPNA zmW)}?j7C`C2A`p~ln*)GK*X97!b6niCep%vw^D{0Lk%M)rv4s{RRO|+_FX|iMTMXh z=(nw(w-c3bD%Y3s{vY9YI$ZwNfgXELp&P z6>@X!cGmIZhYyR7<9@9ZqkVf8WH&Fi60C&h7b0dMtatnOe}*@TeS?Iu?y7M$^}swk zUHp7k_kf_4m($M((Vg_P`&k5z4#Xgj7e}SQ z0#^6~KuU#0s30Ho`!g~)tm&kxjwvaX99B|d5uwVR#uR0NOA~hrEOr}?NZn>_5T)(r z#WFKVRd&qEf99D2_>6nKzi@+t=vH%sS>t3id2*`V&{J5!t1+zVFe-~MAZ`IRjaA|! z1r?8gt{$;q?VL2pGh$UNTZAw2B(OTUOwuA&!#fVAOO5`4!(w%HKx;@98!||T#bP)t zZWgRGOt{$sAZ5Xdec*vu!c}0w;=-b!!vIvura#K5xEvMfD&qml-Wl$haQZaun?TDA zJo@OP^@+K;3M{xl$5C2n@IcYkcR4XbV^-eNAz&B1nTd~76jT&ELab=HuATl#J3U!t zE;@<-7O*;e_~fEY+Y2HqcvKIh1T3K|q?J2p8eEc&- z1#@2s6LE<>hk(_e{v=^pv`%KqnAQJv(3J%X8d{vzAe|PQ{45yK(#CXF ztWa4Eg=n3Ju_h-kCnms;__RZ+txm0EDDKRSaR-tW1E#=a7MkJ{QO?@Z~dFz~GeyZ3V2D2T)rv6@-ez zii9>+-}ISGvI?_ulm~cb0kGhMp4SPhLp{LitFZ!DC@HeT3amE)7226M1*|`jS+K~# zpdXYm%K?iD5oxlQN{h2XTDG(R%C{?4d~1&qa4!hWEyD;5&5J3P$sjgZW8hkt5U=2Z zJQAE0w$CbNuUd2%oycLjU$ly(g{k02J)(F<3--5qPN0s}5v|;+L3N6*2o|vd6Qw|W z(Y|;lS#jC~D+Z-iQBYyQf|!$-j=3Nvg5U(LY{p`RxHeg^_U|7%R=@(~*XIJP`g#o( zKJNE728+ycgBB~Ro#lj8BVmO=+^Vx-9Xoc6)3RW#I5l#`ijk*Q7+Uro6X>@* z1#3+Dt*o(NVJeUAui_DF=2Kwjq@B(+bnt*N`{1fY@wwdM<5%&mw^)xJJvw%bf=ew} z@%K6?tE#FFbp>9qN@Zp8@Y&XyoQbfqX{AL>1i=Y%+A$cj6j;v)Sc&N~&AyS5lnTm- zh20kxEA9k2tg#4dtbj!W8`GwBxK^R%e=$KKPIys)wUonJO0bqWlqCj8csq+=#W`R} zX<>R{Yl}U5?6c24JEp@Lx#H9c_^=0Cd4>U*1x^+iY7aWGm}uJHrQ(qaJN*yrY`arm zL&s0w8?!TKuUdu4U_7Floq5m@wKM~xFc-u`5S$>t)aV4It_Dq0yH-oX2$s@Yimc*s ztwl-&UlFuZtf0kFi39_DAayh)hHX-XmBCp7s7;$>#$7pmEQd8#!h+m=TD<}be&fZc zD9$P>>P5S6aA{i(tL;+8ck>d;TE_dEO2`lvZz~3c#S3vHE%q#yu^=oZ!!V4Ir%sJj z$Mgb24cg)u=L!^Cuvj$K7-BP79p#3^T}dzk&_13-KX1&g%_LrE2QxDdN>~G<;?0gd zdQd9(H*u+v)sU)OB$YczXGN=DtNAFgqK>Apxl&ks&pn=+K<5-g<_%WqUw8Gb__7hL)N`ztYbv3hY?bX0g$cyxG9Of*wR zaRS@gPV&n&baqNsAqE1f%{(|e^W^N4Cubi#SRr6V@s6f}VQ)!caadK51m*%Q4HmF^ z!`ZK!%2)45O%1bI30x^wHYfsISYOeFn`kc{!DeQF7t}~`SkNloKNj1>99C{o(KLY7 z0dO%JRs@F?p~4Dbcb~Z%K19v4zMGc~%kF~#NdYXSzuAW!xpK(R$Kw{kaJEnDia z;KCPUyBnIr0Yz6)psZ+urHtZ0>fRP`A*r1^C&gGk(KuKEvOkzPd-h4JiLDT+dq;k$ zqoTqrRtT#KSxp0J)!DFE7-a13j`=X5tki6M^$w1UvO!xfZNnlH&BRD`MFI#|84vhf zV_^`pQm_XjMJ5>7!Xj85I&fNCSqRDhmZmKH(`U}ub5r%*ysXsSQ4FF_EmwzkEm{8J1u$xR_uZ2w;RCzHWq{|as6B|ZW*>xBnSd46 zBZ|WssJzz)QQH%eh`7J5HSEc`EWe;8zp+FAc{#hZJ{3VP?SL4ILiJIh$%qE(~S9x)ng z%E|HCRtk~|GHu`sXjN1koP7{opkzgtx<^!0R1fU}GO@2;o#q7F1|6gizIsQH`O@sN z1J6WDw6nN7d-U3*Bw+REwM~J=idy^(qqoM2Zy|Gs-2K}XhO3~Z$#oT;Yv>pTK&s%V zjK(iDr{&mXgI)1B^N$?7=G)&&=k@5di0RsE@e8v;)?2&|?JY;pVlD3b=fi>q@weY1 zEV%#nCol5y+y^j(u^+Ul*3VpPz#f&fIy4H4e&@{Hjk!VZMO}i|A2fY+TvOlwKPfRf z2GU&{B?8hR9U=&08#THlm6q-h0Vyew5ZDHeloS{#pmZuB(kU$<@Z0E z?!9OCoY%9C{b z_2T;R+=nS-R0P$GIVE_Lb6+qeXyy+yueP4$a_UP)ZrS6}N`>It3x?Uiz7ps6R#6)w z_VDF{!hnV9fZJ0+qudSp_Ya$*bVyQ%hJHHwRKPbA^@ZE3YW@y{eO8-0?Bx&MiM1D3 ze<5!T>%c>_xYVL4wd1LcjNX81W&V!42d1Pa$#pQYpHlr!%QfjKx@nnz4||3hK;O+b zN3}}z!~G<`ow63>$V-EGc-)IO9?&qJg^G={ea-gYU+TWQEEGlBUwt+zDi-KUFoHh4 zUBFL%+x(V)ic9n+Crl7mY1LK~5x@tmQ_N@c5ZhvKFbLqn&dy6T2&`XO;RK^xd^rmrsuFr|7!}T)YZZrIL)ARA|p{J>o{^_uE=QMbMfIIX{ za8><}3ayp#gh>DNUB0!L>v}1tNjt00=uOO05VBA+`Q}GwD37g@?Kl0GGnDs&>Rn?G zI1X!;zXsjQi8d=H(PaV$P`>H*DSXfl#joD9YG7`>AVRAcC6vqf);ldoTetaFZ(arW zlDqzjUKF!LJ2)k_me3Wqen>+2>3(*t-P=27gJ?jqi;3%61L&Bma1#Z6{eKD+q?LkG zEgfc6J0)Y|A z+YK^;8)QQHZ>&cm6Esb0Yehu;eX5xrJK(q&`L5n~_%*}0>qg+*kH^a_Lbmvz`LAEI z!7Ud{BP02P^h*sIU3LNf{P4r}XtYBgN!^v~%jlzGlpwnFptYMbv!t$U*<(X?>4yVg zcU$+ZLn^l|V=nOsKU&+fP4s(xoZy^|qTkNc32$N+33v&6*YQs(LWEyHt784DL~mz} z?83p)ov=Z4-@Q>qxxZz;)f-eTAwU1W7GP8mZq@n{-*iUPLpjYwQ*}hoFe`-K*wg3G zkfFgdk7$(+lLl$4C~~`CC~m#lkszL-=R(pNt%!l0a|0H+gaVhmH_juej4HkSe<4|8 zk`r*>vLmBmMCNzbcZ`h3BI=osab@14)9B|-Ry|T}wc7#}5#v>xv{}H$y|{=W5g8c) zCoEB6w(MgS=f-Q5kPCnPWKpFcUyK;I%q*+OI*Y1uDa7kTL~O%?vt#2ZfhlKbulO0# ztjjfvGP#Tx9RX>pnW7oc?SEC4QGX@t-oy6l9`*a4ro%;4&vD){@1yy*$%TH=yxJUZ zY4tJKV^S)>O-*s1^3_&l3bdCT@hwAIaVACNOW1pvpuD3gf(A{r7ThYcbF=@?_(POQ zCG7b~jLO}-TC$X78$`(s{aCB5&F?Y1gMGqoH15j@ng%G&p$$1fZA@y09xCAja3k`Z za9fBFo8fEQZ@NZFkML~T zCT>{DJpX96M-l1wf)^lJh(x8tzu^jOclV?C?PvCI#MZZhMBYgPV2usTg#ihIVngs> zt(=T@db_Qi@R~t7%}2xx5yFx>?&<~xEqck!H64M*<&ICA;qe&0>P1M!uZ*#PB{C(s zT=hi+0K)i@@i}*ziESgNP7aF>8I-x!GuVF`shdmn#EuQPo1_IJCVXmZuA<*3Z3(sO zDUfpRjg#|u{(iE5;k)mlH#-)E>VsbJ+{M@mc|S5EG+uc1W&w~)TAOEEfP zx^<}l;>8Nw*(n?wl{>t5!%uaJ_!nU|4l3_o`Kle7AKU+29f}C-aMR-`la< zcZyQ^=3$jyA`Bfx!)TDz|9Rt8jA?luY>iSYzwf}jMb`FiK~@@LqSicBp@UQ@+R z?7?>{ZFZfp1wXW zk2hi=&QS(GTN=o}$i+Bfko&Z(Yt^X_{EH002X>#d@YEa0lXf31%48q|oy!1bJZg_y zr@v!$vGqnu;d<4l$oxKiL}&wqQ<5W{Qv*`iBbFae#d*j5%( zPi`yw)BCZRSum3T>?m1pSkpmM;%gFT7N*ilk<67FZ24+Kc!XHkP63m)1e=UwwXQeuCs@bWA$h;8>em6 zoczpx{8F1e>oMZAh-u|d8-Ri=gP(;BCMFW^RcTuq$|W?Q0%^yrae!>Z*{+6gMao!T%6MlS4->W#!sgdoZ8NIdz$P1zTrUy zo+KJ68_SLyMKm(m3Qw$J`rpdg3eR(OmGnIkfMVqR8N!}6)#oCJF`3GO#xTOLu_Tx< z8zjj)x_0J@^F=Q~cCQ=c=iWlPTeYS=Hlsnv*b6uuCH3$TxSlnhn9@NLTHELbf@|U-ET`QSSiybN)E8$0`0VuzNH1&1M5ms1sr?Wq8gn? zv9WZ(jVOW{Z>JuDr?j*h`sNUavWFsqp>e-OxD^2`u-og?)y;#`wf+qOUw{H;nlsvj4xmJsU(7dn>I{nt7| zlaEiM86i9b-*}qM%=K#@U7>mKUDt3LaReCsf%6y*R4NJ231pLL?G?zqu-oiSA|gbL zzn;+_8}NPiJd>n+8qDvcPT`*Np_Vn)F|UmnYz9rxV_!mSzoP$fdWyN&lNS&O_O7qP zzJ&0J84wE^)&<||abP+KE^m&D{k1~s2N3b&^3Y@Qg#tXFX_O*rfUVws0ltJc(9W4e zS|&k&prv25BIk$c0gVRsc}X1v(j7rPz%z*cBaSYuu2 zoh$2kFTK-0diXc`?j(^$+x^A-P^%^pQ4=7a{_2y+_1&1ftu??Ansv`*e$wE+pu@Aq z1pY-t;^KDdJXaIHgA5cJXz}o_xf(O(@{;JRj`tAEKeIcV_6xpCG`7&es^FXT-Tr{c zDmpIE7~eeSrW2@M(w$!+CZE+4>-_6eNIWj~1G<|O=2 zkL#cE^yNVZrnZ(eIFjujx)$8G2VTf2I@LaR?}kfrrtrY}OdeEXc9vBh(D_^{?%vbf zIS`ASLcprp;6453KA3x)m;S;Fal$H>nD+XlkK1`SYSZ*8TbfND3^`0p^!U+1*g7*P zSuK{10h)fp`}Iouss`;jb`sjha&7dQ3l()^nX_$EKKJqU^mm@k*kl?yWYEc!GKC6K zLEC^Ixf|2eAY~Yk{&k_xscSViI1 z497;C?H6GwF00OVnzt9KlZ92>J0PREych4B)*kieaXmKr*vWk@`DAQ2SJLS?@~fwq zR@mM6P4r6Ldkw#6f9ig!kfBkkHZM%LAQkFa`1^Xq#Cnt1v!{Xcga@2k3uaxxxRqcs zko93g4}php1KzaNwTlzwiZ25fyHZ|WR{1P=DX?_6zvTGja#ks5&u?Qak5tz8v2Q-`%mV;K~E z`0&$xFUS%=bUEa(W45)d{!&9Bgm#M5b|!N0okRMu(&_#;hvf(PX0tU!0Cxj4&)abz z8fUN+Z+b6!EY3DFa{4k0sKDYyP+gjD6PzeqIoL2vUHMlU-%=jw^v#7&ZLuq%mYPX? z!(+Yr{F?ZYRhNLw%EVJcj>k?fepOy=zO{1I)5P#RLX$E=61*5zc2tIZqxzRUmGEU< z!`r4Y^1=t5;mB1kaU%yCS4o`+rxtH@ zwRa+%5NYAXs2%^B7v3y0@g;O;LFe;{t|_b%oM-W=#KgM_%>eJx!;(`r>XprX;sa|g zKJOvfmB|$tzluQI=c@YpR?q8bIzo(!yo+V!)T$(6q{GAR2DC;61%()Aw)6(g@rIob zPJ}U@)3(#BA}GU=jO-Z4S~wAUHQlUyzeNWI8KHB+J+%Hai-IibC`Jxq69Qn*O;rD) z^b?D`cxVR^#-!GT7U3ZP4I&e%0g7h4WsQw($cwC0$2ZHDvD-!|q|eyVFd{?x$dwOB zGsP^siv94RIF~Vb^#xJtPDBK8<=BQwzwv7-0(}PWpjh-#JC#Q}ugm4R5;MchGAXc4 z#gpEdxU!cVU$?RT^7V!OJht^?UB;otob%M9*4I0{I26t6^7WmTIoQ%=6a9+IHhtL^ z&+S+BtCxugTrX{Ky~IaPq5u9xmsZgzdU+tE01Dj>5!>y~NMg0L z&k7=(Gc{Iie(t+s26e02AckVs41*MWfRksM5>e8lL0hzYU_N0)*r4C||T7g%} z-FYhEUsTtH(d)zS%xh>JhTeEF$ka{M00IVipchU~CQDB^M^M;5)A2Z#Dgm~aW$x8N z?ApBv8u=|-$wR8rFce>H@mb9C^?&H}=b_T@%VC>?R=}(ljvm5rebUi{Moly0Dyo}x zah>F+)z67$5SYrRUk((ZFW_8&3I9PcoyCVA_L#-NKQK>l>W#!)P0L4MVn&q_TVn0l z$I;H&yX+5#MWNQu!n`$XcAbtXU|aX_%{Mv%e`stMw_!1K;G#_?hWfc8u@Fx+pN^}c zB6GzsLWR6yrS`C4VD&LR%un)jjg@{?u_AfpdAYrqj{eCjZW_-g#E_#j3p`Y*I6M0Z z-E!}no?tMy7yk!03WzB~+5QKCw`eR{cErx~GotTJ#>rz#P91TfmXu!@HYH{)<#@(d z`YDv!IZ}=%WEy=e?~Z?4o-8Ri#9|Crhz~n*+SD?#+pvG~+;wnF)50Ww2|$)i|C(~9 zv2f4D1jGsd?D;LfB)P}4V_NuAaFsp>4#d%B{V59%7&@$O#{vkiZDyVSs8rdN+9WTC|-6x600;RB9V^25py8Br`45M4#w~`Ve z#^+*7M1#oWmcZQ^i5hU&sk#Kjd|}tKTfRP0=-moc&UIgSuqLKm9jK_ix&H%y=6qkg z6Wt{ba586xV>ECHB!5RmFfv~Etb6#;5>;q__{iF#I@juxs58O=Hi;fQ=oXdL_Vs$e zO=chB-i=RZ1I54xON@H=9VqUB#Tkdx-0`^)5DaQ}VJ8!e08GgAfgbwVmf z(HSOIvSfoz%(<|i`e#CPDXhy)%AXsWziO=9oI#hu>L|lp)|Ti4adL6V?bCbq`5QT+ z8X$n?lxp~v{Wz@U=i*fBo|p=JP~K;kjJA%;?=a<@e{MKmrZ1?*z@^s24*2dPSOPGU zWvaZgprfj1!%Bu=*Ysm=+;oFCS61~I*RHU)fWeBHJ>;`fqM7AYtS(k7y4SIQ94pJ7 z7ZKpWwCnqVU?PS$?~hg^H^o$%aDSX{Y_b*Z5 zE8B3ChE|i?wi&wq=V1UgX_@A5K!9E8&(iw9SbW`s2M&YS13-jk<$+@ni2m63X^h|N z41~}Sc6o)YzmD%b`c)iikXL#aH*jIv9TBBRA`oU)$WX2q4At1kay_Y@|tm!Z7 z+IjT$??0^>{1f>DY4ja0!2c1-aTpBWbHd-1m0f;5xr$bWM~mH+Eny09*AjH|Lwz2S zq|J#PLSe_$`3E?zPv?2_U?pu|k63dqHu~-eA(T9jW&|jV|KhfgA508%zwer-;coiO z)@MZoTqB~;O-hjbyVV@^$s59)G-WlvHHWhS7j=GUCwN1dp`MidM)YAycKZE73JaF7f`tm4FEVw&(EgXk#6M(oXGPG$D{W_};%hTz>n23M zo%AF51-1`+t99Po#qv!RxBIbIpst(qI+KoDoyjEs@Z8C_FP=L|^jCPyc?~W{^*yo; z4RBUy_JJ>_H$aCW=@ZnczSjK;gG+v0QOj=RPRa0 zN;b{u%P0{*R91tF^kc{);i%977_MPCM5Aw)x@l%*$8H?sQ8x*#7?gXjGk^MYJ7VQi zcoqi85xwR#T4aCbC5-uNpg}cU(wDTsgDm4~o~%)moAU_}n{Dl*$$K$f9=kL4LZ72p z%R9&N4d53_=GC;agY*iDtRqApDwWVZ>)2^UhRLO{BHe9N5QToi2j%t4BOOtYf-EZB zG#?RbD1YRmX2bjWh4UK`=N!Ry%Vuv=W|_P%RU{t+QnetH_`nLYHyLnJ%=y%;cqYar zNjyHb$DHTM$BI$I_X@JE`wL|hS-@J~Uv{GK22WAMd;`?;z?5ou?>Hhq`&01N)98=* z6wH6jye8Kg;J9?PXhi6ZbeA3XTPk*Voa?=)mhC6Q)`ay4A9p#u$UZ)#!jfN0H{eyl zNz_Mh6Z?<0AN!c;U*mm9C6T&-FN;0+8(HmRi?)t^lQwq?FRXZGJ`lr5cDqhH{SOp7 zd}Ca(OvPFQ$@nuCArTD3qEyL-A1~*a>+!NI^8}TYT=y+aW`4HZ*PNlsecl;i_T`x9 z84L$|4=p6q&4v|;WSw;p8U#dii7Y$QpzjkpZDDd_G|^P-NwgTd2%zFxrFENdTn}9X z9El+UC7A2zTi9-3iQP3eqDnwqjRE36VfTNP&iXfJL!R@8oWhsD0;aC?0?n?M7PbNQ zsGcPZa~rh*>8~3gb}6Tg#FU_#ws1aS8<)Lc{!o^toZpta+SEJZ2zD-_Q(RTXQ=C;) zlrAaDt802#_j};tg{7`;gF|~CxvQ;I=pYTs&J`*)&SRxS^U)~pWIehj?vjF|E@ITY z!vg{Yce~L!$NnJh>os^N*iR#j@69mgCJcqm7ng(RvZ(-*-GDL_Wl{~zw90K{b1p-+ z;ZRf`DMKD0+lLv!4T=R`H=={%!qbKSS6ASq4QI34EB7i+&N5YvLzWg!X4G}0mTERV zX=GFLekwP1d?BYJ1tq@JoD|y>c-@5Xu^iK@tX+6X0KvtkwNV%&8REICGsLX)S`{Pw zo<xJ;?YtU#o7TFll=&qx(23s^E$Am$Y(yD#JVmdfv~rNr{r{O9GPZmG%td>d_?f zXfqBh0hANkC`XPC#}jGjxTC?ibVG<|lnAm%q6-@EAfRy68cyfjNX~U*Zf@nrNRNqu zVRXz@Q@FwTjC{;q9e#V&_K!}Qtg!@;D-j)L3|A*!5H~u7?+M_?ix_~#OKD%a>A zxIDq^Sqpy)Br%@~q%tK4i^Y&-Oq&lPosAs#D{z^t1mMdW7w3<~b);r(iT?)fky(n_ zR*S&bfk3}?la>Kuj~q@}w7VZvH?Dt(Z1@oc2F_2d3O}!Vm(s%n;Rd2<1Z;K12SpNR zY}9N_%=?&Y#)t_-6QB$Yy#zep&C+NfCc(5%hg2c;E^#zlI~sJW>IO{>xrp^j6AdVT z%S#3wVGQN~6b=nT+Zv`Gx>`jQMeLx8^d9m-{e=kN!ovH50z=;b=|K1}gavITB+7)M zxeGYYe1FIQos>gwFJU-52+%!UNr>)egpa5|4>HIgGT`jfFp@C+xGk-f-jYLIMn5?tg@+BD?JMCz#eqHWa>X$vp$HT#FnQtm*AWtkg_%hsveHIlkO8Xki__U(-g zSBsrysn(Av)$`ezs^aIjGHAK}iIs>o+ZvmD)mSjd>qEL!-4&Ihja=?*+o3Xou>BvY zkCm1Z0bLCFXDi^skW!#(`nz3`WJBmrJ@Mltc_jrV-yW>#XQF>*Me~7m2!7eOQtrwvz;!UbNa;#?XcT66hv*qdW~a>#1V%|EK587TL0OWBU}v*7%T~hbs(m$ z#>8@y(@;iGKUCshJ1j?mAqPWh3D80ELPR;`Fb{F%S|Cep$-UY-aylIlp@eOFNkpGi zz<9{7IO#I|7_z|z5lsijJpN}D$hOg=Fu?m!Z-bv_I&5KV)d61*gnUPN)DGhlWA79W zs5?Ryadn|?a*sNM?EICUfv7=*W-}WaBln7N0|-g;gHT14HCL|1$)3{fNHWDdq zgikGsA?Ec@B2Eb4xfJTVfiHh!xDYtq1-Dxk&z0)Zc-evSz;!OgET8+EUbWq_wx7Kq zbDJMHr6v<&OUMRGbRW;m59~2HjHhP>O=mD^t?=E8jUz&gMu(Dl1)-_Lw4+F7?I0EY z#mb>4pbZ~pXnrkFt4(8O_DK;2MMjj1e(Tv#$0K4&5JivI>7u*z>JX6)fAtJ--fgp_ z0>*9==;bSGv?4u;F8TXDNqh@2J$D=DP!=!D0feLO_WSPG?ExwL`As&L_0t&eKW^~4 zQ`%=K`pm52J<8mI=LreYTrj?aQvmK;_`bTTaVC2jiuRgiNvcj{BNO-}JVr9v%>7J!ie4Ne!cl0poETa*lBAcPvGsZLD{&cmQ|<&s2gduG>uN$@a|Yqg`*{X>l5 zK4mZ|yJ^L%It%_lY)L1@*Vz4NQ=C2^jX#_r@Ew)M{WQxiRP1cB8o>3EAKVCWs20*H zU3b|8^|@GkRok5k_vKW3uEvkw=rUEV&?P`8^yWo8S+&+3YvcvGrX7*NQ#sE({^ord zi|N+&A+%%x|-9&9Qo#XXif%aBEgZvAf_GG1C;W zh;!n?2fAJ{kkd8+hX@&o&L))rY?Guk-8r+sTw@}l|d|*oWiQ5yP}+BR9dn?BTu6yTMO>?z2A817EOZkZJ!OBo*#U07+V~{v+TS*`?OzxsU1@LDpJ0% znbV+5IrW-7lf13~`aF_%p0dYA}aeLg?YY1ljavRSL zedjdOpTGG{KV_`}`sB$Ahdx`;S)3CwoC8hsI?JqSJcg%jB`X?;A_gFdQC$@{gR9EJ z%V5lv5upsScGiZoxYS*^|QK)pkH@dE>Fj0MWgNHKzT=V)fT5K-Q#$u1yRva`iQu%|6dCrtdgpi z)4y}?OpN-RurTxwxe_{1=j(+T07~kxclJ0wDrrTnaD}e;kN`jI;k+iuOFD01&tUlb zhWl8V)q&7~Rc#sT=b~i^QT)%#`7$8*#LvK&~ za504FXWPhfnrZ=q%U=;Q=*t|TXXpQ0$T2|7t=<=m*y_T&c96TjTvXZ4O8kaJn=o_v zUT`Q5GtiD?e46w|5TX>I1O2;XlCK|?g|n&z5>nXWBTK0bFwAFaK5Y8v zET^+Q=(l+I{rhCS8d3N$-o)PDlMu1~yZ)3D1kevpptK)o!x+FyG??4)oh9N{CO8QzsdxQ=bSz>zz4PP2fw7NuM3`=AL*BF#YO*M#FRpO~c+#j93g{1azPGA)^ zc%4>_#dX{y$jlgDTKNyj#kt;YN8bRZ$)5sOF3Qc?e`>r?7F65o=)6WLdN0 zX@UoDytlRZEtSC7o|B>`g2>rB#YrYR2Xm!p7^yQDFWc@t0Vx$CJ`5zc)P7LYu0(V! zO+-aH>HsE0GPb$$Q!S6xl<&9K3%{^2GxOLY(w9SZ42n>IWpIS5(^hK$iFH$4l8aTi zf_(Rn_d!~W)bwZzFEg|byt2BXfoeb6?WMITk_PQ zv(NY;&R@S5D(L?NJ=V-hmKUG+7_G!eO#qB=rGc+vwpL$LNl@*cWpn!j>fG)hU)>M% zFQS@QJ!if2l9;IqQO;6&@EZx4?ypb&)VZW@zzB9m>S2)rkdZ9%fJ4u=(S&b%ge!Vmzn%DP_X(vCNj`N+BwSR1>CQ^yhHzjC7Cr9gVY3WS@RrSrBXcP-4uj;UP3yTv&*0A zp19gFi9%^b8S7JdMgAJyJWT$?ERSg=g?3&V62ZINPBs{=A^yTTy9_^H!jsI>pB<&m z*j5=IsR{=Nx4w*i%a1lnq_xA6Q2Roi;~Ko-T}eCT_m!o1RoAW_La+Yo2>`_DLJN}q zJ^}gIjClpqO!(#TO)lPIj0bXbq@mwEq$Bo#*{VK_`((PJv0du0ON^elXrum5 z^dJcY=qDzU(SUd*eQsR3icd$ehzI0ney{vjm~3Z~shn?&o}{XT{fvy= z)+=GUTvz}FmXa8il}#NK~H@TJG#hm zS%%-;XoI`ICnt#{i^zfV?0svKlIA7n5!0F!Ns%)ZuYPfy_QjsbyOLY}dMD+~W$CeG zsqs~TeIYjz#`#E17`%_Po)$ptpE;K!%&xCg`#A*dYea?c1Dw(4{sUZ&uQ`<9uf|FG zAnvGan?QA7{26OMtWb_{PO*sDcAUzt5J&{ZB^e!@VF)+}9is3%GjbTm=?HD&8TIsw zS8;g0b@&ZCpWnua!eM(rT;VT5(cX;luW^cLlXP?@=C6@5V(5-E8&%(L(l@+<&s|wZKRJ#;E+4 zjZcg-CMA(dI_#!H>N{vR)zmwWU{KYcn{Ul>dh{F=%502}Uiw&Li5r&H@bwSGm3u)E z?p+a{-w&-t_KTMSW5M4`tEu=<p^i`KW2h1H4SmAVUKIGAl)2k2`(D;#6*G>)lBf(EQ z&evIXEL&%hV&dzgLrwhEImDt4jz26dGJqgF8@Q)<(@n3mxQWgXl;Yzmj&${WZ zr-Vgm9kS4Mb#+p4pe#}?>w!0kM-~j{ojXjeA^mpRSc=2Q7Y8V`X*qCzx1yvIKaX{- zfk3SWy~5bFWB+75^<~q)6w{%+x9^TL`srUhkg9IrcAYN?bJjbkv<= z6E;tXB8r;s@b6+n)DH2eI@Mj}%;+_IE>7I6hS#!o8?^>;<<39^we6 zyXmJBrGWm|U?%;`ZUPP7LQxgo^_R~a*9%7ERG-f=471kVL#6T8KUr~{lBsRuWI$V= z8<2m@Da&bfde?QKW@mh<(!WEVecB_Qbk*(K`YR?rc9j5bKky`vVXPkT9VrS8`Avos z)iY^7fK6^Va0$5U^-B!X*WIh2&gRzd7z)qxi{3lPDQ~gO%KVvskmsQ-IH+n3Z+9DL z^W$e^xJ&X>3&YTvo$&a-{<_0L1)Af4%A+1pqXVfx)>w6MofplJeu*SlD(2o~b@#J6 zhZ)K`PVVZqn;2q3yB|`ssUTie^x&q|m+OPJ#XhQk;@*o@&%#2eYV4mwE1wAk&0Qo9 zivtDt^en-&F8l%lzNX?f(H46IeT0?yBZ}SRn~L+v0w^ZjUkC#V19FYW z>PE`ZJ@FmV`c8{nhYGzaPe0NdeD09rpoV8zTS-0{GGqIm?=^PZR=C_z9leWZcI;A= zMSW751zb%18QG|xUkS#R@5l3*yi##k`4ENQ9Yvt1=?U%<5pZ0bg~Ro(`?t5&aLuk- zV#cm*?P!%Ut{9im+60!A?p4+*CB={@9yt@JcZ)vSefoR`z9kE zGAe#0TnDDQbGLAJp{zb#o=m1MGnGOLFu52Rk-PuyMch|ghyvoBU-Xyvy{gT1fIFQR zpLsMtF5Pj^WgDyg3h`#g&|&0b)l0SW9m8+lX7m~vNSOGSM>|tC*Nef@bp**ah??{Kou3D zrFB8!Y`pZS`G8mgr(@ucSO3bbj6d{=0GXM&_VMGw?fA{J5kj&EGfy#0@U=&a?g}3% zIjm4Y7C%Kr?Fi4dZ=o|qzx|+fm+rTz_I=!QQPl@l?g+Y6ovgi_R6C6kHyKLa33&#TPs?e%_03 z1E*#xp~U~`gEbpI4t|>95qTM{D{Odkt$=|Z{Gb=y0QT5)vp==ZVC<3)=#Swy=#E17 zKIu9y^zi{>|BBHF4SayKv}j<5MN$r!*|IA7C%uN>ybRrEw~Z0!aPWT|OD&4l{LyNL z+nwc4HMPpCUC~?5<4*xzs*uH2ADqvl6tZ3t6~)m;T@#YQF*&{Ol4*v~Jk6~Um=|WQ z+vA%uH+dPp-3IfK977fky1k%;Mr>KWJbfoc1x|or89;-g5fF8COH0;krXMYTnZqhq zo^5fciP%K8yl-LiKp#@T`(7(I&@krxrdZl}N80ez5)48A;}+dhk8SApr^h@sXor+& z2QbV7YNB_;266HA(+tV#F&?x@&)KYSxrLx+{Z>$Hx#n)GI^1hBigm=p&IG#o=W%tn z-7LfCFWHti55%ZUG9Hy`@7)3VTV-CIolY9D4$H+L6{RL017Ok*|BjJQ(W8>}EcU9Q zPm<4w-ZmU8aUot?$@`TD)vhE?=d!S~wjVu6)>OGNNwfc*94Fvv| z#831sB2x^BOfBIH;_VF2F3OV_vDmW!jhRp_YHslUO6xQ(?-<9Cmp(3hK1ir7&eCK> z3P7>C?ZcVvBhe+?Qd61IK6a8g*nFi|AgkHvQNVYH^=%s>s+i2!@P-_!vSU3Y5*Ziz zC-NudRhoSZHSAs$E+^SsfcfSDqJc4>I^bx$ZC#LtOCx9F)np0QO1+HIGjDOzpul_|JXNPkTy*ANRnW&+qG=e%SEGG)xpyeJ zzkP7D^@=UaqM<9?=kQtb3nj{ox#LeH87GJAMBuAwICa_0jl@eUe)|%o?a{T0=AgdE zsSUqyEqz^`gA-U(7mIBZ!N40)gFBCpqrbm>sz*xJ?xx4<&YzY&Iu21CZedwnW>tqH zYk2rs`iS4JJ?t+jL^3&;DI9t5o%z?a>S4bBX%Brj`Fuzbl%BKMzg;Es8;N9zlNA&F zJ``E*;sg1_=Zf(T!<6-E0%&g@3SU(qPP-zdxuh9o%RYXj@=i6=G%jdZ{4vI13h#z)M0=6n4Er7ne)m!NK^P^ae>R$>1L|4 zaXCSd8p})a33Go4>DRaeQTY8RMLrS4SW%+Xr57ltyzzj(d+JRc*h2&;1n2I(~z& zxJBVkc9Pj&W?j?5YprmL;li-${gDoQbmD(ldM&>G+=ERET42#1;Fn=?CSX8x4+A>h zx7wmmxGnw>*qy(Yt|8D>pVK%7AJc$g#K+lW;pD(wa^Y)pipPxSPyajPg-A@WD9mi1 zktY(90(K>J;TKi#hGZr&>-P3(e`sIWU)7re>F542clROhIVhzk()BUM z7x(Bd?3obwDTfvx#P;AE|BU3xO=S_t2*}$8{Twhoa3Z*Gf-u|t(zpvtT@RQMipav~ zL~EkGUuoLJHpJZWg90BxqWyR^z%h)k+8d`MiEGIxx{{d+B!RZL)Ckd;jfvZ7@$Kts z?=@eLe*uDl{rWWs)^C#Sb;py#1pZ22i9{;X3?=a}1#VC9A8BIpFb|5}@<4?|{i~Cp z0expaAa|lKe`xQaS1PZaN3Am@Le6ifz#OH2hwUicfYDhm1a;5_t7>tr$eMfbK-n_0 zE-WrD$7;%b9Pu)?BxxO^{LdzjaHV0v_(AkdvgMGS!LVL)okU|L_EV2CO-KhRZmSPCIPXa_nK1-YlMb-EFG} zr9unDoIMr8)>(5y3vlcvTlU>?X#}H+t4TXxCc?DDFZ}7p19UsSPdaYzNP>adXBv_1 zi_cTy8d|+&=a4_SQsO^n+jvixsI{gd)uD-;0{#8Cxp~3*c}t!8M^MXx4EO?;*yZNv zslq-Zk=`7>LYh43)@s&Ghs7o2K#iX>V2DKjM9$`6aJtwDzN5`BrEX@4oiGeOAp^RG zl5(~i%DmsY`$a^^Ta*}2ydLL`>^M{&1a-AO;s#;-cGrCaL|HIu=A^xL+>!<{=&sKu zhn2KV4~E^{pGhs^1)R%=G|hg;P3ue>Zuxa5MOn?hj^Sw$y6(&yk(p#+#qxaILI?N6 z7k9b{E762=PqFa& zhC`ao2g%5-3hPt)v}dtl3_`oOz$^kq2>}xA*DTU_&XNSiRA~NQ@-Ga5h|7oUL~tT~ zdoyc}k6pqtbV9EVc(vaQ77Br-nAb3F((t{j%>W#5^!e-oZg)(_VZ~jhF1HKMlbz0i zJxrHJ8$9q=ZS8QCe?@uGCF6*MgX4v)>m_g++LF_}j+{?6xAv*$aZN{FZCw((?pE-j zu7&TLqFae{%&WSP$)+!xs6b*=vB-f2&2$-pmPz zo-opZ(;%BomPp4${HO&Jd3>D~C>fk+7d~qzsh9LTg9^kz1Ki;$C&ujfJfjQ?YU;Xs zEuBw=Wew$}iicS=x)>W9+Zuf*dJ+)9uEc|=rR7ZkQar~ua}&t{wp|35_??4mO(qB? z==12)7*n1XX7Kl)ALywSOc6* zbkrA8TfbiM2wt1?CI_?nn;nj}#*kC5T#IrzXcHq#|AevgLwnsc+L_(DSd&=%7M}hyUp&nRKkLdHMH!=OZ*c z(Bi|DHU)GKeQXQ!5@nreoLU{qYVRAlKK@{4WAHk@mIKCkr!GKxF#KNMZ;Xk!?D zcpG|DX-qu?l-}N^PGxD#bg5k*BtPaslp~IG3rHS9Zzp(6ts=})*9{eG=6>T9>K+l1 z755p@VMx;n^()SlzEk|Y(3GmFJAGgmTiFHR!NpzpicB<;xnH#o{eR(UM0+@mhR9UrWsOYBnZ zxDTU=_Pz>gzYfku)CRNuL<9{V)3QO7y5V=KR4-~XiZCitezD4!k`lWQoFFpLpM60G zDlzw-wnGj=ch`Bu_WywsRwFmIe9$?#2=fTrdU=-18M5CCec;F+j4(X;z!+G?!Q^MT zK)xqWOtc&F2er3Vbb6|Uf>dMC>`-<_Gotk>ST5k6R2HU$Ss>zv1QU_q7Ac^xcxpQ4 zbq1rnS{16}IHf<={EhM@_|pda*;+m6u31bhY{j=5SpWcJX65GAD~~IvEWe)_bZ8$^ zgQZiyRL}0#>muiSb<966NQVCv$^T`2?wjoLzXQp_8OClq|1{2sy$_CO1O^@cw^y?Y zsNW%%Y-+t9TM)#1x5aLtesLiLCSoC)p@y8~^rZI>?q{FNyU!z5%-1YE8>1b2~4gD)(g(R|jrC^#H zE({&6$dL=ppqm}w=kGf^S~am9Hc=j<&HkFyL(Vqmo8EJE++y@M-?jsA7$gZFt_2QL zz}^P3FYqxoaJ}5Z^gac`jvo6hV!*1g`Cdd~%LglyFQNDfo)dg+Uwd|{#jLnCceqdc z&-XamDxU8ZDa9lK06dI;Rr6f*h|}Ms@$1j>g7VrU&^N(BSuw=AD-Vhtu?x6g&*Jsd zvg=`EE)7hPCRE$zMn97f;CtaK=;NFinsJ4PRQ7R|0Z7Tib4yYij>(7jb}V{Xoii61f(R+wQAF z%DJkeslb1tN9Fx9+qs&%wK;;;=C#LUXH||9SRA-T3mD$$>yzhemsBn95$NTL;k807`+35UaFJ-5$5*4E4+ZfRx=O#Nxtll0m`XH%uSA!j@Jcc}Q z>=*T?Ki8VHl~%e2W84V*wz0^=MONr^bgM&DtsA3)@0w6Wxs#9ma36yw(s+=s!aKmN zBcaxxV3}Jdr*H}o2Wv|=6aLY5QLNl=*6?SbLnM%px0zs&qbdN(f5b>Z1F_7#FOUSa zdDmKE9_@sY|FfPgO46)!@pC|sfCwP;|CoB~u%`Y$Y@8b1umJ)BN;6VWLRwV1#~3xb zrIGHE66pqM*uarelF|qQf=D;gg3|Sz&-eK~*Y*2n7k`ZFoNed4&;7dJcQm$Nzlmdn zHS^1w!n=hq=nKU7MstYKEYvz-X9h=e2xe!47*v!dK2QPuGDiZmxgsYk)O@A<__B0U9kQh!XrHp04RP4oN! zQpiCHKYfezT`1H(Jj_!Q8eTBOFs`FH)p4A5OSu#t`V^5Xz!u*HtW1;iOG%-`;OMe- zL6@qD&-cGhQ+D?Xoa@wK-tPsZ{r=T_ZnLwrfY@u4n5bS+C59f$IFB*z%KtwtfEwW3 z@GQLuKwQc3+C4_Sz;;|r6irD7^khksy~a%oXJ_a8I7Qh*GlTPE6Fk)B z;#zvnBGJnY`!+cThprEFJr-YyUm}WM@*q|~{%+cv%V~nhK1cp5m)%(^yTy&0ChY%G zO=lR{0!LS1fi~dC59=+wOBSssPqG}IA&1_s&u7awHUcUa z*$eum-b!6XvE?-*Vg`RVw{||S_gH-ND;OMk=QD-6u;}7;jFw@*czqa1;7>;9{)K8o zPG$-*PL-br1GTQa+;lJb&Hbv@6J%Nxnx2N}rP_T%o2O>;cbAKzZg-iMdxFugXOZF-Kw1D<+j*W>MSyYpBXz~6quca*d6A&%46Nxf)A>KUO?g+-xOAVtH+?v!yRFJ04n*ag zj3$)MznO3PcIv#DtpBXKJ@&ln`_g%)m()!4HF-2We!i5Ju1D*$k}#H$oiZU+_7mHJ zD5`(UCYZ2*5zVgC2`tl>WHe=mR+l&A)TCTq1H{Dm>rizCA=b0HI&-=Gk>Ss$)NOZu z*p7@h&%I8&LgT1s(&K7&%W|1Icgr+oglllB7~kN+k4N86=S%wodbNR&22#X~pc zAY2$2|H#oGXj%`>onEd~76lLEU8WZlwt=xqAU1)lAbw=u;>ws=I0kyDQ?A|{xt`<6 zMZZm^wt}~OLS}GRoncq{0jb>r(naH;HP#1Qep$eteYxb+8X9ubf0n>VU?6+>LVv=k z?Es$w8a=(zE%m7LuK=QeY-nxb z4JjGhTtfHITH|Y$dU{lbdi1gt{_=l9i^I;>1(L7Bi*0ka~n~#l<8d`NI6~=QUiHU_P+t)tx7%MPq?)cs` zUJ&fD>T9?tdYB>~-hazG-n2?yF~LP_QWydLwEJx0ng`b6->USyM9OBMmHE*KE9}-s zySfOJtpK}z-mn1EOHED6%@t}LBpz1**7t6ar<^Y;D1O-Sz}Tx%^Wp|skAsK z!!xur6YTSeG(sUWd)K)=w!ufEqF$$=fB&&zcgAd><)c+z6_rPD<>HiTAv7!|sn4G5 zbzhHWFzoP34)xP8(b4wwmnq`YI*Q3(vN~fjBsC(k9Q7f0_AkOd9tnDX@s<03bAkJk zab`+=lEE`K6Siv2{!m7ySL$|6i-kxcOT3YMvAC%@Y%^Nu*(NL`ZTA(4xpw>RHZPo| z-o*@PMY%rv#zgbfh({%iGDR&q+}})lwhBV8Se7!fq$W2%{fwOw_BPvp;sgrMzL@-b8_YwLJ z3LVbnR(!a>=U;VUKujllJDTm4&VEP(}B} z3C+}>zTn%w$=Qpn`A$-2MpdmTXJ%}$0lGE+mOPAukjf>yE=2$MA@~JTWM}aqQsHAz z%@vkit2NL^s(5VGd}B(o@M_C4CyG+{G-KSV8_$hx6~p>&MG(O#*d{ zU#sd%gxq(~2Wj2olC<{Js@O(8pB&*+<43 z@PAx3tM($hxqW{TJAXtYE?r<2G2F`RYGSQaVf2E)nNM30eWKVZeOck zFy7V391VE^O-N&$vA1gM&BS|mkER8KFuWa)pavh;Em&?J{OY z^*>kM{tj*4YQeSye-QX@=W!-UZ0YkL@PAl8hh$SKK|^cDA-8=ubb8eM*wb~KTu4c^ z2k=5$RMDAxX+&HH;iEyVY>`u1dX#uya0DEPWNgG|lLbfR>+ zMe|Ybb&yCeeYgXHRRPj9_X=~S3a4y5(`17W6-x*N!PAKxLA4GPQ0?C)tB1MS(Gna)|X6o1Bq}?n`%S4aYCE{?)XQ8R4OKob=8^bM)R=hR5$Xt){0! zy&fiaF#%Bh0iH7JjdoAihyeWC=pSMyp@|~W@Wp$MD72s#Tv+&`pVyeRa_n`?DUlb9 zsDCsoBqq8#>q#jFR-N6w$l8@H0R07tLB zY^3@WbPP)Aaeu80e;ua`)8>Q{0{UO&b>l|6ue>o8fGNKGR7bNoQJEW+p}iOp_ZUwV z^~R5eZ<0>HcyKAe;=&^PgoT@sNo`att zoryO5AV(ShtB>DDq?@^$?CvF~+M}57lRVC&DMzKHR$0oraxY}Snk9@L8il4L7rC|Pz9Zp1K zzk&OzoP+&02LA|Yf`3goLPDZ2y&8!wYIPJ7@jsn5==|PZNaXmQV@7vM$W)jZ8HI5G z+7}o%26jJ2w+5OyXN&V|dePJpdxY7~&Wz5Pu|ji~4WAfv#lBaqOA$x2b2$ljzVIRS zl@nvtSm@+^DlANeJRpES@hxymg@E`oFvyB+3ovA6HMRx}IA6p9K)48VBpDFaXGr@| zkOL}ZzaZ`!QHEhht-aau+?j^%m}z@Wf#X##1e`d~R`XlKvF|mN-@P-=wT6DEps^|2 zU+$FEe)t*dmlqB%UpG96wn_v(5uzW>;kej+?`7h1(fG4f;6(_+ul5&c?@apeww9C6 z-LR}3J=e&`fO}!il7VHdfC0ecVq!`7iGR((R%m+UtxNqR$>i4@ z8^hH&XN!;zqxiZI4ig4w0gX*hpd&r(ZrND-_5nSXKbi5zC$lF}XzBE)Om_@hke72Z z75G{S^|*&r5KIs3;;!dJk3E28Q@vw}ck80yE`o>c%MNT`jqmA9odq3Sd$q}apro*5 zP(fLFl5FzX_EmI`a5>eG!E1%GBT=a?pS zuOLiZF?fKpPIwY=_XtvljE+QlARdX&9^dRYSAcs~GQS9~+w2d||Zf z6M$3ZL!R{!OQ{=aw-o(sxEz<%jT^M8{j=@S6aR@(5A$eJN2~?RjjCZq_nPoQM6!?( z6oyHk$|V?nj9aM|E-JS+8+ZQ_z@M#G(JADhGkx&rBqhVAzpIvC*ca=oQssmo0NR4lsz zdZ?@%?(Gk^{zh@~*sw>UJB@Eo5J*(f3%E`mWs_xtM;emz|0yZ(fHxW%zHJ@Oi6Z+e z9S{buRQ#T3`INw(pPi)~ zBmXXj>@IB|eL1HH#xi~YCFfm3^k<3#{CFttKEfF&u+|o~=L;B|L{?TB8`B@x#ABYq zv7rm&oJ?$hFeW4ot`&-Us{(}XmG(hhu2yi7VosTi=|j9*u4m@*RjpUzw{TjR3w_78 z1u_ZSbdeZxO&gO@4S`H{C0I|ubPkE z1+O2E`o&fd{Q~PIeaOBLdD8`L6t-hMRb6h2arE@z;*t($47|M-H0E;MadVXxC#Vc} z8lo=Jhrq!NJ%tu`Al~WB~d(|}>Qwj#Zal7rk6NyPk?#_Ilp}nD7i3~I` zDJkmFd=LRVofVQc*t(T~BK+mxT)?%Bb1Fx)fp`L+&EhR;44$N9{0R@10W+N&pz(@i&C6~~Rn_WyZ_Ghe6-AUmmUTWSiv9u=NDd5=ld5rKlaqnoKpk6ceFYD$njY< zR$|k7MBN~{2OT_gswKc=nQF$Sb*C6AvpUwWAx&wsC;v4A8x4EJvx7GgR2Na(!zRlR z)?f7E=%>`S{6qNlW&3!y&v%RWGQ zmju~c3hb^iArVU1S&|+d*n{ogS4gUxxkqpW6h4ObyDB~%&*6X$@|HAYK!!Ee;<^N?uiQz7^-&reOu7Gi->zoDpIaM787ghxulkfL5ee zhF->L_75jPdJed!6cnpcrh>cj;Ml>i&-hoTQ(O=1!nDSXtLvnr(y~0%4T2+5Sx_8+ zT!!sm=5Ws8i}k!TneqW92$q6QA#W504^=-J4TyF~bFtD}vc_<pkfU2F%8Au{-C?mdMmu zL+?=C8C^vS{CG=UvBGzXnjBUBo0|3}w`S>5f*I3=5_)L;p1RsxpXE8P7Z9L;=C)y$ zt?5bg!`6F(%{Jmo#IV@*sV@$TPjRgM45g-qhUzr4A|>+51nsFDKYT=Sd$0ZT;EIr@ zbMErXr&hp)u>vYwRxxphRNcvk7su~$GZ9)d_5gKDBCUF5Kptmeb-=IXQI8`*#&D8S zUT@;-l) z0DD_gy%ek88H9&2(=ICg?_`+GKh~(hxHN3Jao?!L8IHG^gZ@N7=VD8-T>xQf;3w{&83$Vn&ls^5*V>?J3Jg-^4c_^9ySZLMr@@#S7 zT&dlPHa7Hc%zeqti0vx+ZZCAOyhLD23DDBfaqX&9U#X_n=EzeTg6EP5 z##oYhB0(4gqRzp25Z6eCVyO}!#wGR06m_b=GSOZ+8PjgdJMM9U8)LMJP-PNVes~UB zF6E?@fU3aNHY4(G^p`CYE|M%Pow_~`u&D-zWj0M}ebii`7D^qQk83Pf?! zujg-cs(<74fXNj3^=9oML8Y_je>epA^}qp_!ui`(qQWu7a~*-hsV|Cyb-jPOtZ?$T zq4IlXJ>(Hat1nIPwAJ@upPDc3uH{Dh9Ii*RK8lyieM9&S5kMd!*fl*+OW(j_&oLn zn<7F0{)-%#pazLUn3Fn0qmk9Fy&g9AuANP`iKmWc9gm+el7) zB)w!^&S)i-yk5X!p&4RM?iYQCkaX`+7SOWiUZNyFLX~c%1Q_L&GOtdq|BPj^@d`lO zf9AgTzR;|Hclnver4$E>6>Nd!2%WwCR76cD1} z=CYX=}0h9I!&Dr z7*EgWTY|Ji7^D`#Me+j@4Y_{B2V^v98M)(RZf>7%V%Gki{1EIND+mtlP6IPya?{hY4VIf@Ou*X$<*oE;*e>BtgyaWYx62?;;t&4vTk>B zGhVX3fmbDwSyDYX6fxx>N+?9aDirfz`=RSkk4KLsM{tio)pFbofo?uPa9$u81eFY6 z=Unv!ixGBU+VE@qtDN`DWglMH=v)67O>M1!fO05BD=|CJ4=U?I4wlQgxPLX0WaI){ zsu7W;cKlQrIgRYPlaq^RJnrLCj<0?9!oVA0+$Fth+m|;2OSo}a>$FjiEwK4wdy4{u zoCd>=UDw~W9GdhJ+DB`FX(owhg;*22b_uMHI`8kYrDkH*$C6PokoL9bOlq)q>tpFu z{J94`q+6iNp}^SQY_4Fc2ynStc~6s!{<&<_rz=d{JgDV^L&`TS7cQ40|-WdN&(U*&z-rGYM?x z^xU;acbrHWlqt>;9ZcIrBtSmpsER>^qn8YT*y`o>_6}c$fFC_Tw8%6ouSMh4^UkXu z&+(L=p78_`ZItk!BEEJ{>P!k4Q?}y3awO36QDp1r-=^I-_8*(Z@=|*0pprDr^59cX zHDzkA0yj4v<_uT3FAq;Hc+mrH?NQ2@YgC4e)X3ie{wcbT!t5%Kli!c-*(mlrW|g^_ z2SHm`#?%w~n0POVZswWB;D6s;Q?Jvh?G=xNImIC@`a5<_%X*?nzBzI{a-*sviJ;%( z-mElH%BabY!7@@19fa+~urA>GaH8nGpBMgw9mPNm+1N8`GG^_SA)BR(kanBLXxY&l z>Q7_l^Ie}i60KbIej!IiMHvlZ(cMRlwf{~*Wi-juZJ&6C_>Kz;p!tU*8fL$LA99}8 zNEUlmKuTsUVBS&!s_0tE>dgt3Z17o=iL6)Iz{Dq=s{eGc8pPr9d880*VQHy6`vgV> zR^qd2d>O730XKV&!?7%p^G1x?LNNE$xILtds0;twwT{$8+7LWzW0H&E5viX*6`si~?4g8~4brQypBBdef^zd6x z+A}!WpP9vz4a%>jC8Z2;#JEYJxuVwZ`u+F&=rmOjTxL!L&=@_B*zJ^dtU0F6q3~Cw zbWl-sK(sgg_7)#*?Kn(}I_F`q;x6m(ji?q>kJk33iQS2G>NyLO%t>@Jq^c^<_fwg? zivM)>?a{Sb5T$_~=cm&d=sx$1Lo+D#l>Peyk*^<1T_sZ3ABGS*)>w&sR`XI0(0)>O z$-N~V8L1?(dV&ryg2I_qe+f%F}0n|`Pt|p&$Zv4l>G#oC#_oi5h(#eZ4`5Q zkV7}l&Ubjks#0y5XEMl+f`jX}62LWDm)+wsIRf_T_xn$5U8}V0!(AeIZ{l&gT0zn) zDVpS2<;Y77*;Z@|+uT&zvDm{j0^N#CltK@UIK6nMMEtj9ECEXRx2*NgX+o<>vxvKI zIc1F$5X;lkIJzTqs#r&QpgKdGwd`X|uEk!?hv*j8{|tqQA3)NCJD_YI`{h|uRlD2y zv(Nuumd*Zf#_NT?9l|~3jnj>GHqEE-g92F_YomW9mZ}VKt;u~t40T%=i+K17sbMV( z6v<)WF-I^WCSr3MmvQ(Dx4E6*ZQ{5NMjUl6+}9;RO2qeAaOtI0;9pd-wI-L9zMbO3 z=BvoRBR_t5{?(h4fkcYI0^Pw?d_e7?8ovD{xo8N%3%AgQxsXj?0hdX)(oa$SFxHw& ztm;horTQB)<<-JA2$^;oGs2@{iEL!-K|xxYn9NF7(Xr5^&J^7Wu6+>^zTu^QUD7-F z>IUeKWT#r%=z@f%Dn1y^ce&vgIpwKHVZiPF8VH?<;58BBW^CwR`;4wmU{_q^GG+giIJXy<*d%!0qNZgW40o{zOKdd&QHS}XP%_b)IHx+ z7mpeAo*oTpiUD_7I0w3K?yGn#cif-3Eav270i`8r5|ce_!U?f`h4cW8R!+g39pC(Q z$VTqn`7Z@yK;98LDJ=4JlgE{~Y}cfWfhg{{eKErNbbPPGDBrXcfwjeDJdb0~(WTCc z#q}ESr>HhofH8t*&6v}opch=H@a<2RD^bMAl^y<}S^}eVX+_Jvyp;zR#Ba2s8&6NHkzzsjK~mqNjyl3nGQG?` zjKqTtngY|G#%9d1`B~tsTB>8i8iw1UWjPuV3zos>lwan^D@lKDdI*b zL44~2B-q!*3UwzAYe-HMV89+i2;WIS$vu6CM zZt1b%JCK!Ei%-CDXM+_!9K63>Fn0?Ig9wUo!qF`fJdYm}A#ZcuH&DXDt)>f+Eg7$| zAjBl?tgnGA8guC~wUl&d{A9!?)Yz{yO%j<(9#l;oAU-x{LNxYnk zNOF+u?TT-744o#`qO)zJuRjx`#GJXBS7!cSZ@_U+1(Z_T=`Px`yf_gatrlO$qa3H~^Z2M$|vGB1*(HD9bA1@U!VA4pvmMl^Q6^K%eX!NXp8{PNzV}It7lgwLN+c$b%Cb*r7=&W$1y2kKqulwH)=8 zP!5QIm-R$XDNI}(>)e*?`&eNd_3)Z5-2;9)^m778Z^ymUv@RO!;SR=T_6aq07ZpN; z&X~A?yAAH~Tk8wCV}Sim<+0qTEs+zFYu;4md!DA8UF~0y1%o!&ymw=+F_K3~Nr?w4 zz@zb;8Y5n9`IZr5;{jLxW^9BtvK?~d>OpQJL-06_`1{Ov&+qysX<=R(b&_02!x%sX zcf^nF7-1#W6QYE+8+dOhKDb4~RWS~e8x%1oljMIDf`UndE|t1~gQTK_hvZ-Y(! zd&#Cbg;$hXLQ4P}NW7L(vF=txxEDwpbt~9^Xu7(~aXCDc+U}Z7I)B-*J$gwdquI>6 zO96Wc-jE}wx%Lg)>0h&nWtriX-FfWFvi#kVdE&aloPdW)c^NmpV-y6MNYjzX%zW&d;r&{#pVgcAYWRJ`cFRoN!*tAPX zuN$|7!`vKbM5Y$ScRHTzBeIUG1=A#c21c>lW!?Mh0+|ViLZIF-UC@>sP?`7p`Hp5a zu46*mNb7lgetbo9B9sO+ zGH}Fa#z48hgf6#Q?W%jtEXnP7uh=*+80KK4oEbd$2qxZ9^hp7s0)K*Tv;mqC*3ey` z-Ja~L+2Cu8q)3uo_XVRNk$tUULs_ISie{!DCYC|Fk)DOcEao61qJdftwu0U5^6pFo z#7so@K!%qR^9Q+-W35EHqCzYS+T$6a#e}3k<`)V4bz;;HRUQG_ME;vFEFVYf2dGU- z!uBJT1U%%7Fg+2_*S~z@*ItpJdB5v)cR#^5Iz)&P>iVY(^w~B3Ft^qW+!yY&v`S>H z?%y0?qypb40KE4w7QyU0hY3=6WaO{N=~P5q1&7YFLJloj&mZxo{Of3XNB>7Z-!J~C zRDJp0G>oBTi!dvqG=ImajA0xU`u#R}`W6S`HK^BbJVh4}oG!e+Aw@vXX;mAgcj}jK zag`}9WZ6I0y|h7Y7+OY|ZgIMNe_*tksQML`k&R;Cli)`3?SdP@IywZxYT<2G4pGO1 zJr^>KH@qa^j^v9&64`_IGb+yL2;ulue9X<*P|SG@tmJaQ1uP)^fduow!(E)OHRCc{ z!Ma8nc~7!XU_E95*JqnT6SASq0abr6nPxSjlCG_Or;5{&9v5I-oX_E8z9aOpAMfjk)IjD?CW5feL^ zYEFNRUg*!=cQVbt`CG6py46$*iDGQ98-L#+%{NTkr{ArP;2y(8bw04hM(bajL*tu* zJ8?;JS5{n4LuxXp%bKHJ0YY<8coAW57Q&V!PjYx7R7e15K8Q>gjv* zZ_MMTCi@{v?Q-Y08fhiLQ0vh`ltMkec7zHx@_wi%((EBO`LG5HRW2o(TnDSX}ZShlOu= z3RS;DiigZ7d_xcJIfr&1TZ~X>(J0w3kYr=131M7Q8miWdJ=$WTl<2cYW*5ygY{uC^ zn(mkXxj$#)xE_C^*$NAksLrQ`d9eYZn!i)cIIK%ooN#-1Ee_(9(XHPBx``U{{p4*# zh~p4t^mM|`PIYxPf=1piXmnr^i$8K?65+2wYx9F&H;pTL^M}75GEyAvR!+vq#fATi zS4Y1Wz)jx%S4BY0_)rwoRbqmgLv?Vt30wc+1hv5j{q}^xx-?8gosXrRiD8gfU>4bD z(F*gL5KzNc-?lVu?KCXM7xb?Po1-drIFZwH*&3WVggt$4gO5oDCDcRw)()OCXsxBR z#f(JsJ>w*OxZf3)WZe_{7=AmDwKcltj`$5ar^9&v*ocT$YP8ekK!=WOzL;VL4BjGC zd=Dsfz1eCMy4Gmarz-$r_^T*<_uIc3+WN}B+n+i%W&6b6=^MO-Lib}f1prwNsHwoN zw#h4N$QvEDAk{SxJi}wG7UT*_GLP z`W))N>qCgOUfOUG>M`;mUAHdPTnf{0!fEy1350#It}PT-TMR!S7LxMnb+qS^RVDcQ(eQ2+_B`DY-5>*C$6EhWvdG+p<2< zYUW8=+}%*YPZTCCyuD6UFHEtaMh~g)@s#(nn#xNs?+VMHpgp?bm5&vRuT#Y;H0anu z#I&;x2^tfK!l(Q3?vuR07>%dlwmAq}g1Im-Ml&^iZXJv|T6LA&Wx_@4&C}DSpD}F5 zy~iSnS4k~tcx|-J_u?txq=NIoaTjHUYMA;=p8--abE8ZU%_b{R>yYa9q8`^x(#XvKrxGBjctG$0V<#&h z;Ezjefljgx5*q5e=_3Yl%q2=h;W-ay&q9JY>&YE=`xCkxcq>#f!?u@Ac@!9jlc)#X zd_qePgLi4g72acNhQS&i%8=HjC4Zj99A3Kh=qekLk$pTv1C`veT`VD|EO(P@>Ub?I zPS%oLW=T)l4gKUBhphA03CuP%;*Qt?rfs*RSGdr;t@dmqMPeLeGujii0rO3ar0|j4 zCOd);V66EH9GFZG4#M~BdjJ`179rX%Q$rkC71cWRZiBpOk?mKY7nV0aLt%|ZR#;KT zp1_4B)OInqlrH7?oa~xGF8M=cZES@GE9hy0-K9z#IxU_7tA%Cbe_UuCz=j)iCN*^U zG^)b|rWDeLb`$#zIM9qe-PsPB)hOIoK3XFJC!zW>p${CkH^~x=?%6y zGIC#VWj+#Mp8lHF@Rz{V4Mq(PYKe;!Ma;5iHBhD@bAK^wpKQ?9NpU_&RgMfo@bCzxN zZto8nOrIOq1m^`_tbY0c>5?3o(=TVkcG$$l;@c~J4}g)k=?}rYKUIWX*UU=V(N$Jc z|9};{HN4locG6rP9VUu7EKDKV+WaL)2nW;y9OenpNd0Y79Nhm}&8v3DY59Q8V*=X; z_90>V@Md?8=+fe~wii9lNRQ56<*~2CM|PdGgM!?S*OcNiQz7<_*`1g<13OFRkt=S& zqsMh-cPGVYOK0c@EG}e3;0%t#V`V&eei8?;j?N5Or>lUl(-N_eZrcQyD2wb5vU*J6 z-WE4RE;hn%7Q{=YD|NXXm__vd;l{=(A_im0k7x$+$XF32d_t*^CtAPUzi-rse!K0+ zN9f5|e2vnzFb1K!Si~E&fEB`iYRt4xLvc^^i2R>w-IVkA^N>O-zHzxs>^I_qglwuk z?$JPT3@;uk!G`An=79>i5Q{un^#@G<`%hA<{59P~>+i3l6>jBWc6Giq-&Jt5y;fFV z<*O5P_I>T?c^AodX+dec_o=up`t#dTdibxVm#VIgJPBHmGNwa-dzxf;_$hK8Zbpli&-ppo9=GX5i=aW&MMn!AzEU zQD+0e;u@#8Jttl^(aGE(9pGbU68aWO`>#1^*A87#0Lm!!ERpsvM%ArHN41zC2KrRPS zeHwWW>g^`zbEjB=`Z&z$i?~Q#DpmL*n?OylN#0*(*}M7j;3*W9fqG@GMGXy~UgEt< zs$%(zzdz{r6Qp=!WGE@VtBCRDK3^(YWK;F&4k5#}SiY4Kf5Zv9TpQ|TT2Ss;Qy-6- zw8RP7o*m#gu7%#}c&1@hZ|H{*L%dgiB85ALdW0}toC%bwkFZc0lL*?Uqtn$<^i>lU zD8GLf|E2~Es*{Pn4`ki)@o5I%xPA4qP<2^x%sS?cA+RIE(ku2cuv|CEyX!|APL*p? zalJP-2Uze6^$i`-ZDtY=SFTulZb^x!iM>U!9JIO>xH7RM65n#T+X{Efu_WaRhAJ=b=8x zu*>w?>}RcSgDtN-+jGViFo_Wi*3y4M)D}9Ubwsty?(aTo0Cg@Fp{!}CKe}y__0bg} z`Op#q^!H8{57>J`#&}H<6;b=Wd0(T;rD19ve;m$nHZ^R9i$TMe5$}lHr#t z=75YAfT<|7?!rM(Avvbg7qpaK}H2D$IP4O1wy{d)V9^ z>UCObmvpBe`Jbwy|2URo^j;DvK&bKEehF`9d063p3Jcq*W4!Q_xV9+W(PZ?aDapRZ z#sa{3{jn*Eg2lOn!cf)4gqL6#iv&$DQB-uVuj>B~PK=S^un*0Fr)9Me|IA^w_Z`3V zc=pGOrBDgna_9p>+k8Yjl#OSLSrhY)P|Z-aO0exc<>76ZerTGs;t=BgN|*gtL%O zdzQQEPkr%U?wFz}7cy0H$s{%WoTX~$kUITPuZa)4Hs7ab(me9wh3>RgA;(^3@&_0+ckkF9sMVPS^6q}brcA9Bj<WLILvA@)TL(u>Cep`UonYguB8MsZie>0vE#ejjUS$KNJ2fK}` zkxmln6$c8;qVHvyEW!}eNU|&XLE@4nk`V6T~^{cRh=c5U@^)4>+Q|HO> zp3l>=$NWEFDzU#?+hQH}TndKq!l$xJBKiRC6BjnL^$mbdMl}}a8QP{#6h8)%L*os) zs{CK}Gfvq~k7k33X6Px<>WNiw?X}X929}En;&{_{CWstSXTuqqYE61=lr8jW3CnJ! zC5|yunj6>^Jmy`Xe$L!)cwp=n#Jq1`#399@m`ue5RCZ|@1z#Ig!$sB`IMu0pcsn<5 zE{$AuGdTHCnnPQgBhOOEn3`Kk-siWy-Jy;RW{_SPz4$Jp92dH`e#~1exIv$*e<7iG zZk?cSVPWB{ZDG-=DlF53Af0pw%kdC6c9Xmtbd4}DTKrl@nsIiU|B3+9@u8v4sz*zQ zI%6&175@t2%CbAQpDEKyjavU97Kzj2iOCW#bBX1o5u;JY9zO}0yUh%@5HSy%fE%^i zKX)(Rs^OK77Ht%5B|Iw&9$2O}H0hZ-ExNw#Vs6Iqo?h$o{@7i0N)%+Qk2($H-`RWo zhsOZF_pLh03-AYv=zp%S3yNsKO8?dq5bS*LK4GU!%Wj(e@@Qn_p4*-QBjA+Y@YL+P zImmPivqIJV2+>8nrccI6x5(CValp9P`2<~Fkf?!!3=A%S>p8~qA(}elsg?1S(S;~*l0?;H@s3`zqz^dngqGy zaXth3re=QGP0jMvFq7yJA2Y0Znx0V}vzz%F zNOH3O3%0CVc9c$RPGoTj96yud&-oR^Vm>lF+HfPVz3rbq#HC4omwU7$r)LcJ8TW+C zjR1rE?*b@X=rYHJbN#ilgo2NfCgU5A^{{ME&;WDPM^N*d%GueDzAZuwed)ns_rDvQ zh|Q!)^V*Sw(L9;~(I2L*o+?k`R_XK7w5)h;y&~^AQpc7DE>ZU_)8EQS~rv7 zM8UsAm2~;>Bs8)@6z=4HmACU}ds~*`E_m76pM_BwGpj1Nc;1D3zWR?JxI+rB z{+Wya)RLbFP2>aMILx`d&({=F(ZcS(ke}zuKqh3*u`6(F158{5dm{ zidUMhVQo!^6n;yK7E74rI4pmgvB)nqG$3jfUbjNQ%zSx0E@RXV?+*J~sN8C(bp>NvqDglNMMnOGaiSl+ zGE4~BE%!l(?%UAUdmjIuXxt$3=RCvLBZicPg;XgUDagZ{@@{n;9r=>|hC(7M$eDhx zM}aEBvKBd8fE??s;P~h3T^1?98kk9{8LJ&oaJ5?Z)yqk0%!~>G&v7mcR1Mq~>T!4^ zcESm1&aa9#!(ALcpS&>;Ww#1+i|=~|-?J}Og%d+EV1|a4mc<@+_M>YP886@C8~9Xi zAIa{8quJ34gfQv&X#qY)tY1$FBF}%Nf2`6PM@tWGE_+tP3|a@g!t;RFY04kkegAHD8U$$%7I5j^-KS=_C%t?_3} zN`f!!G}G#oK00#pk#jZ6V;a($>c*-6%R2BIim2-!lS_YA%r63zKoClP{pHNurA9}| zuB&Q%p`NasRY)RX0}l4KEEprF>)DZd*{}r6A=TZ*Zd$N}3^8~_oZT(CSEEmNcc211 zQo8DSBLn101`od>wFV0uOZ-`$5b>rZg!VXVg1~IMNcQ)9UaUb&n2upy9sWTW_;ANzVloR57}_Yu`oDkwhz#Fe5*YvL2$8;3=(c z_8)PXF5la<$79C+K_)F;^De%FyIOCI9RSu=uK8B4>#+}NYRYoSwQmB`r=}^Bo19pDxcdc8m-rrn~Ti(@4S2xRTACJ+T(arYPChiW%*r3q=O{6AGYC+r00w795RyPc?Jj$Ig6v|@ z2SMSh3NzUw8Sh{Ww}y&e^2MBQAEumz6X^5O*CgWi@4rwj=u?14|MW8ZOuo2+txp>r zu?B`--liIT<%6dWFARYmp&AS#8pxUF1niw__^(Kq894Yj$Hx2es;)I2=K09Y!*hYf+n2TU) zDm-kOuNcff&@unxVHb|ntA>q-g0DrMI{YvCJo^C~T5K=qU$Ga~-Z(q|Q#-8;1Jj)_ zMX6-S9;+QNImlq-wA!ydtCo7EUN~W4vAk1$A+PuN=N0cZ=8XibB&jct^@hg?dqvB3 zD_LjXw%~Mu?(gE35k+{#jQkrakv)~xcd1`;y3@-KGRbxqy*PD)n}>4sQ`~)tr@@D~ zZb<&*hA5#%yt;|pHx|rT23H1RMX!mGq0&mguZB^7q53962_bzG0j{}jNb^`Ua7{_~ z$RmK+a#@L)nm!)8>=hPPgw>b{bJ{Gw&0`{f@3FFY8aR19VJ-}_mXy2uKP6pvIGf+! zCWP9fc5R|9Vy~J-?b&{bASI~Pn6=g3d$o2^HEIMATa8$)t+rCTwo=rn)%WS|%^%Od zxvuBA&N=tz9_OZ0?uz58ERE6IoHrZ0JZ@jds@^4|U>2hTfUM!%gjmJKg|@ylJ{qB= zgY(w`s6$ydGX;OoUy&QLfh-ZH=|S6kU1BP*t+%86FRXgg?)TOppPGmrv2L6UwcK)e z_#BFxl@b_bQV>7LSAO5^FP4~I<8s^jyQ{=MOw?~629lI~2sxlKN zMs8%gLOcXR!#yDS8!R(C=PV~h*IzhVW#u?zR*096Rn>yNdSsUvN9A$x@`Z85;+^nfVL4F8Cf$n;miSn@;4q6+qw+*dU_UAiziUp3~d zB?ch=aV&9ti+bmbst4qdOV)n^MOqTI+l_Zwu5oXmUD;acZz}NVy;yMFYA!ZOQB+_NHTd8$v3FOjs&4 z<9S5}St1ud5|g_jl>u%0xduk|TwJe9#W1Vos=-n({uiE%TA8u=Pv}A!xF!0h zp7i4Hga#Z|Fe}Y@tCciJ3yqR zh0VRiu6gAM5K3Z1OAQT{&Mz&qzHCk^?>e9x3IH7<2Ggv1S)Hoc?|5K!;X%U$+V6#iPOA-fa=Zu|N7quT@aZSy~kf4a1xYfJ0VU<;K@A z?5Xv~JsorizF1v>-9a(K^Y8EHp0OqX-BeA}u3x1a=@@&Y>3Psv;87)H3lkbg?Bf43 zxg}TX)G#UKA&gQmAhS0}?Mz^kc(`GngKe?Sa%c=T8We4ASC6fl zG<4wc5Wppn2XGkL$0wctj{0IK{BeAs$@x3^#sH@*!lL+XI`-b2b4{*2Ik@|uTM*Lt zF@{f%p8;bL{-O=Jfv1epQ^E}kwkmVa}ifL1eFsQN3%LY@FELg>WIYauJY*?P>H(w|S`)&o>8 z(lZTy|D6pL`tYC3bejgL>2eo3?6|fM47M2}OM$u9Cb+kJQ;=%+*7H8#8y1!-ClBAD z87kEu$BVupMY=n5S_{Dwrl**6(qhMNWP|SjcN~h$zwo+B<f(@}{T9V}r zQ?!z=W*uBmy{%H_H~epGyCAZ!+JS&&U~4I(<7)+)uNm`8j5?MJj|I7iNC# z0hAyZ{Yy&$ZvYJbU_<~MWI(lyH4oPiG2-uuiFhShyxh=W5~3MtHYqDlBN+T;7>mtj zyDj4c5X;CEQdu`4!j`U}k;?S<5mM}U^^EhA(q>kx-PT5)`=>?wnJNM}!i+Kyot;lv zJi&zs?aud8_X&Rzp8yZVP%}Ju$?`n}6;i^QQG*9_cjj|^l*S#c-nNuLlL9NI)Ul`M z7)#c$DgV5z343Pht4)=bunzX`%fUa6NTXjKx}CMMvnz2Vf(Gi5AtPBHYK)-U-M7{T zv4hz&2(d!H*=jokS8XaRLXeuh5JqZZl_zv>Xf5Sgbrhs5g8ALEGE9lpg(T6*1TX5H#9bSTW@UiU?R?Q)W^S_M^%4I zvvGESObf#j7Kx3Eet%jWA_;xw5RX+Ua-BH>Nmj8ll?CwpU ze=&P&XzYe~5gLP2kO2?0%6a(6_A?yDA*0py?M<^Mv*8D=zpB&h}fF0HI7r1UX zqfh_HyNNkbyO6VFUqziS*|ecUE`FD$1D$R;M1v}hwX~G+hBt*OSzOR)arW+MO?BAk z{(zdvy#!u(e++_CR8^xa^JPRK1ONU#h9H&^)920gzDJPnwJyN-_PTI$uu4y7)BOgX z;II5`j=ae%wxt>}i&&*rRsb_(9q zDoYH+McC#OSVJ`9Lr;q0di&$_b3h-X61Tx58A4STn)coWv-gyg2oQyn**`~;c;Wm4 z>K^u2pwT_9W`t89^pXcQdA%w>xBX8GoK$$p=DKNOT^X za*8(Z6w0%kIun{f=!->a=Q#@Kc34;0sf{GX)_y0s!4FB{$itaC@HQi!^YGQKXaAj& zF}i4*F}{_o>M6A6{V)i#Xltg0vqcE@>=J94N2~ZL-$mC@<_xRDr7&jwWNY^dJc9ID z?7^mBZjhGpk3mUn*Fo_7eTR|B=w220Of*_vO=Q&x`jq`SqmX#Vu5{=Jonw+ zlvO$nT1;FJVM^o-RJio=S|tYCHsZk-nuvu|^OTe{2%$jVBhQ_bS8_+1hN~%+Os@A2YSHc?V0EY6<=wjP0C5U6%89$iSY<} z_Cg9=b-@y5)T3t^mx4h%WZdlRD3xn{p4AdaeCD%XKW1Y1>rK${56~0!tf4aYA%*_xz-;h`2=5ulPW@->YwQ+dT}77(kZ(KwN)AdEqt ztLrjHL(PU)o;=mrK5MCt1c{doi(#@3M+rOS;`JH&V`7?NbE_0xOX z=d&g?jHV{=-Z4qBlUYkt`cn15yG*b;1!{hl$!KvwhV#!U28aL1TwAl~9@YJ4$?(o{ zh}3@IP)h9MMO>sdU-6Fl^v>%JP}A`@Kb1idnMz(gaY=D|DEYB+#58Sl6J&PP?eBhc zM0jc<;*&R2#C*?U?LrYdf(&ZD>(s%oBSUP|Xk*I(^3Y5*Td98I= z8&0nFf?{2rA80K;*v7%X+&09e5*HTx#v-*DrZ37|SIX{uUIk z^vhdnvA9aZ-nJ@k(?lq-ua8+A{(!3AWZfzJY5&#SAqjm$O<3+T0Faaz2u}`e6gD29 z>ArFPZ(qiYUFKlxd?d78==T~?u4 z&|S21MvkynTqBb&j>J@SK{cW9jIo~ObH;c8nZX=b9}t22KYw88C>`o0%Cg(mIv5(vJ+k46Ph%RnT&XXMNNW7YneP)XnlmdE1ZN z*Pa+eq^Ad|z6ZhmD+xuI-Z4|(F?M{2xZu&{3b(gGB?!Cfl6R>fNCmsJySqO|@UDL> z@&96Vp{^gigK9|57@Kv?yCQ()oK@(@A0=M+dM14596EG;C~rImYKy4P60mg-xCV_M zCFaThfuZ)y@%EMoC$MsA)}b4uA(D}(p%BSXsu#iajwUCE_x*9zd-KQUkk9hs5-RB) zx&gSkO=qt4k)>_XU7WVu8gr};#UaaVMll#|9q|#{OFJar29ipX`xd10zq-Suw^9* zt|4-ivgL}@$d1g^Lk)(FLu1UbUb;Z&x$a>V zk10(RiJg1M^!akr%@J_}#bSH6N|lCHWDMREogWEiZg=64_^Tu~Ilc;6Dd{oUB)*c3 z&PdE-V+)v>nZ?1ZhiI2}WMumf38e9J1wJcC{-d6S)A7@yt#^0GoQTKQ#xzZMG3m&xB{psYOS1W2 z)sR_7>LpEfg{7<0u(}!EUTdB-7>*;=>uwcxbO#8qDVXbF12q@fx&F|9yhN2+5$IpY zKyCCCufD(&7~X!I+3`Gx%%0VrRj$#$v$&5zij9MV!*%V=Db14k_Vu7nsBsHNgz-V# zieH_ApeA%81y&f5{#yNmtWA~6Fg)mN-br$74)$j`Jt`wkY;SkZr{BMv6Bx&m#yM}g zzLn}lX#f7)qbLY)8nNrDvv{-SmJ!x{Urg8NVpA#gS+TA6A1(4vlDUO$@}X!H%&5-R z_Mb-fT~0qy-8}f>au2ie@JvEdGB!G{IjPKTG+gL74K`-!?lZW{yKG$-uX;+=`VZo5pjQ(1LSHvoUaycRCv z2%yIV%goLB}9AiV15=?n3pwl%8JD3;Dz{;P(#ZivynBlZ1>HhH@ z6R-7E(^9Ljq^6ogCE)p1cN@{%fC(*)px%dRl8qQMCl#2_%KJEH`Hoat$>zqkqjub& z7;nJ)W)T+3;x&t()24WHMTXr0#tPLIg#A}DE|Huz9v@d?|x_@AfO3;E!Zw& zTJOC}r==4K1{xWFjA?NRz~!%iTnhyvgewFy`W;L7(JLLbwW2EE9>MpLPmgm7f*sEf zbbO-}EhUtGZT|30Y~%(6$_R&Vne6h%qj^h9)jS$u9RGn3(%rcqHX}o3QmEd7L&>cg zz8XC42f_O`*Dam8K#kBxj|8{`9{sT?Wys)!9hx`cP9I}ht*f7R>*qbQI!f6XP!?|X zSDK*hyMMm#IL{N#KpuA!gapqY`>&RUG<+U$U)8iv%sQ=BH!H3QX1`aNPbertHBO7c z@t-zwtEmyB!BU;yDjp}5nmR-(%`|4~CdTua#LUuwW?bqXa>cs~!;Ob4DyD=d!kibd zfYm+!M+7=q3C7vPu}5=7d-n)fgPFNVu=F^+DILKek+QGDq-XB z+*=Tro|7!S8!+{fFoq|U-7n=}GvM{>>&3K;5HIx!Zn&tLn#@g7k_aE2;QNyM)Xce) zQc6qK22b=52n2<!8wdu-%4d_vaG zEH4X-B}kt>Ot^`0{2SE94Ik0d!|5zcqNAa@gghe1^1ChNr7Rf}t9I|ZPIS}7dp>Yan=sP?2_eYbZwjqsP=-nN7oZi~{~yFG)da5ZDK zCpvNQ5%g@%sW1`P`2jd%J`92B{A*P2)k5v~w3n6(wR(Zx+}t!>-=+Dh@jO5RPE)EM zG*S%k7=i4yXvuTu37G8$B9NGcmsv49T>!Fy3%z0apO!%aEbZ0CS)m#VV#eCF zh^YnTF-jkk4X-UPMw3*IeY-`!KEEeAvdT$16V`{Fu08y4V~MDdcBe2B;g0HLKBc}t zrAG$ApCf~2T7H=B5EVS1D9?0?<}E5Qu$;*uYi?WM-(qR8)J<^hW%^MH;DGoNj@5Y( zd}mu-T&!aeyI~%Z&R5)b)?k6?xOTnjesDxf2s7LhiYkzgGhLL4#ow*i&9I<;O-C!V zLySLjb+{lzZ6G1a@)DX~Tj28_5vjoQCP*t_`hv21eV6b#XdHZBLJa;Vh^Wo8WONT+ zFzhSEFw`W?R5)5q0L>`^Li`7tBt#-%A=4CG2^P|R%ArGV1S{giuTuOnqiEyD=`-cw;@X-Wu^^eVadUik=Iuri}5Gzfx^VWM9P{;2XQ>HLuL1Zm| z#+QmRcQ??`vD1>En;$ky#%3VM4;G8hP||jJO5mLfZaOe7A$|4iZF>Igof>AVP%j!N zA3Hs=Y6Xq!vwwk50bD2kR)-5F^Ydn;n2hN4JK-~4j3_Y%cm#(wmq=i&k@{)Nya)d#rR207 zRX_(8TM(cm8aQARQ@lZn&8Mem?pPc#)w7a5|B2E7(1#tooo1gjyzYrquB&g|^*TQ} z+*mCjhtAX;P7VSjvWo4zn{cV4k=kEjKR`c&)8jSB{V3@8nvpnwP!xdp`+Ya1yB+vvJL2hF;eGy|E zNHGCo59xv2B*#v_A+4;lpOsUwGXc??%yflMFq0Y~OzG*nnQ76p3lTdQ78XJ%CK^Xt z4?drnbzRI!!PrxkeNteChc@1sL4~Kyte|RQZ3l)@;_d-bhplT`24Jr&29{UBDUq$M zSNuOL=IqSWZOu_q;=C&5si3rczd-f~NBRMhM`u&SJ&P7hN{= z6`?UqRaN!If02Dg2Y&j~=rW8jgc- zwQ;uZC#=}O2%?Ij3aqCc2xfCLn%7+77L%pGx{1k|H#dKJNf2iG8so$%Eo}kMW?X6glCKQJzyHcHub6gwdcW6M}?<6v=et&#li^g^Uq8 zbWF%MJ#re5^cPRO*nX7Bpo@G+zCKTQu92LBB>D8lcPlAmdTtJGc^^sf6V1V1>VzpT zFIP~;u{bz))?{W=ULZC%HrK2nvfX|XGz(w9ay|P=P6H%1+LMLQzpNC#K2;D#Hh946 z+>gUTu@Afz_@S|=U7%?LWTnP}(ba2ZB_@HHm}EZgt5enhceTDguYSB?_}}@gr3S+1 zw>!*cy(b!I(7>dvqf1MFyr8UPgGb6lXAL!YRm1q05ata-YX1v{oSxmj><+shcpLf{ zf_!8flh@tO^ldgG7C^(cr8(s2#&Bp^y#Glh8@Y|sBe z>;dvC5K)rNo~6NypX#$RwG&~bXUz}`cRziZYhBu+>=xD2(=(&R;}&(UTEuMz&>WZF zCFg!{)z-E%abJl?o|6Y1Cc6`#jac15a%aBe&eY{0{?^~0e~WK~d($#wxu_Cj@qnL}n*Nh&6=c}|0np9O AuK)l5 From e32d1612d9d71e72a05ed3ae7c2b7c44f11ca1f9 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Sat, 14 Sep 2024 21:08:38 -0500 Subject: [PATCH 08/23] Resize Sun & Moon Flute item sprites They will no longer appear weirdly offset on the reward selection screen. --- public/images/items.json | 18 +++++++++--------- public/images/items/moon_flute.png | Bin 555 -> 336 bytes public/images/items/sun_flute.png | Bin 582 -> 347 bytes 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/public/images/items.json b/public/images/items.json index 509b4458a9f..779823d1293 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4592,12 +4592,12 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 24, - "h": 24 + "w": 32, + "h": 32 }, "spriteSourceSize": { - "x": 1, - "y": 1, + "x": 5, + "y": 5, "w": 22, "h": 22 }, @@ -4886,12 +4886,12 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 24, - "h": 24 + "w": 32, + "h": 32 }, "spriteSourceSize": { - "x": 1, - "y": 1, + "x": 5, + "y": 5, "w": 22, "h": 22 }, @@ -8415,6 +8415,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d7c7ecb91ab6604d8ab2ddb533b23145:a897bbf637b19b6d2a3b966b9c84e765:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:934ea4080bad980d4fea720cc771f133:ed564bc47b79b15a763de57045178e88:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items/moon_flute.png b/public/images/items/moon_flute.png index 4237a9b29adbe7adf206fa1cab2104f4a55d99f5..893cb6a75796b92a2a6aa9429e199a4afbda4736 100644 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijS1AIbU4Gj(7z590b=)EOJzkPdF9TYStsClnfRPmH0N3**30#(h(xePLz zyCldj_&*#lc=c1AO)L!_0&+KEA{BJm|4Ju)kI-GsapjrHhxd;fneIO0 z+RxAaX7XXBki&L15?8Kv^_hp{3|Lh%M&)oD4-R~-ybh2zy9;_5^FtqcZrW_V$ SIHLsUSO!m5KbLh*2~7Y2S%;ti literal 555 zcmV+`0@VG9P)pFAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-u}MThRCwCdmLX5WP!xr~M=JOU%uzX9=Ll}{$$}!d;riU_7UbOOTE`rjTjd;e z%iQL8^5NE>P*=p(hC*2vRs=U`(&W9IlXLGqrxkgg^OtqTAD30U^m;vj&vL{m!0Yw8 zN&w`quS>K}F($%z&5B;M(I>NInw?6Z<6z z(2A0;TT~%wLrLA5wyNYOAGD^#I&daT?B@X!GMxc%-d!;am&FPnGqg?t2*Y_}%ML0ifW}dTlrHzuLF<%p6fyEV zg2c2Fc9)JU!HXJ45kTYMk0QA0oLAIrb;8K=$n>IdyAHN!W40_7F#vCl8#F+t+ebf*ZA3qXG9 z$OPFK#~C>GuRoch<|)sV tx-G#?>{lFa(N2kdTljIv|MsuqV*px@<{k~r6czvg002ovPDHLkV1hC*`4j*E diff --git a/public/images/items/sun_flute.png b/public/images/items/sun_flute.png index b7cbcdf5569e04fed086f61bb561ea7c6ea104e6..7010c9fefbd98c22b1d7b641db3e292afc03717f 100644 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijS1AIbU4Gj&yy<78tOVHV7!z@e7vq_q3ij%%w&1w$v`oAR!s7hpw&N?8) zT@vIM{2vY&y!;tI0fjjWJR*x382Ao>Fr%o3R|8ORji-xah=u>vN!~(76gXTQC-#50 z|1crM$07NwRnC!bp^Iak{s+%zVlaE5$~^6tAI}1Xt>H-wcg*CRnQv9xxpeMv;2q}- z)h31*mrAuqax(&6i+J2(hi8b{VQ@IN&6*l}L{Kz&@Cc*0tK chQ0q8{w`9UqhxT19q4WbPgg&ebxsLQ0Oj_A_W%F@ literal 582 zcmV-M0=fN(P)pFAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ-%t=H+RCwCdmLYW7P!xv0*E5kg<`UP)$oJfs0@*omJyV>zNpKm8#kFz{D(i|{ zTvJuz@?>P@z^#tBR0KE#80ly#cGWxQo^${F_ul`%5qX~To^i%I$A|SpDFv`iN4%wQ z9LIYM@}~!nc;qndunSgCi_F;_%jPAMz+f!1T0lww_m2&d!I0};eN@M-g~>L6@I%cc zY1GPOcZ)=nWwkOnw5DYyj#V%@5#(<=*f25E1=nLqpl!Ui{AZA3LKA+dxqoahxYG2; zJ(6^>%_Ofw$-)mc?WPO!5ZAE?v`xo(J)0_k{OQ4?+X6Gqxab+UjzxcTzRTuxFEVEV zvDU;|7a-mR!EFXW`YhknqQW|~MoEd1l6V@yJS0gM%;$gTww^0loK=1Oq3Dm!vF(p6 z9SbFod)HBbAGZrgv;BnK=6lcLX85~OCt`hYR(8GDrg*e!4WK%oR-VPCO+P)GW%Ckq zc1NsJuBJuZLw0>ImW~0AQ7RtJ5~k^#jTpDQYj=Gsb@2IX#3V3?wdR|j&}~7KW$S|^ z{7?fh_;OR|<%E+dqAWv6NxSKyhI%irhUupG3Q)Xu2BmpaoYGQ$Jp=LI|5dyU0HuxT UXL3}E?f?J)07*qoM6N<$f Date: Sun, 15 Sep 2024 03:55:17 -0400 Subject: [PATCH 09/23] [Balance] Pokerus Starter Count 3 -> 5, made pokerus count a constant as to only require one line change (#4268) * Update pokemon-species.ts Pokerus starters 3 -> 5 * Update starter-select-ui-handler.ts * Updated pokemon-species.ts, changes from frutescens to make Pokerus # a constant that imports into starter select ui * Update starter-select-ui-handler.ts to continue the other changes * Update src/data/pokemon-species.ts --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/pokemon-species.ts | 4 ++-- src/ui/starter-select-ui-handler.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 633150c62f2..4eb526eeb2b 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -3348,6 +3348,7 @@ export function getStarterValueFriendshipCap(value: integer): integer { } } +export const POKERUS_STARTER_COUNT = 5; //adjust here! /** * Method to get the daily list of starters with Pokerus. * @param scene {@linkcode BattleScene} used as part of RNG @@ -3356,10 +3357,9 @@ export function getStarterValueFriendshipCap(value: integer): integer { export function getPokerusStarters(scene: BattleScene): PokemonSpecies[] { const pokerusStarters: PokemonSpecies[] = []; const date = new Date(); - const starterCount = 3; //for easy future adjustment! date.setUTCHours(0, 0, 0, 0); scene.executeWithSeedOffset(() => { - while (pokerusStarters.length < starterCount) { + while (pokerusStarters.length < POKERUS_STARTER_COUNT) { const randomSpeciesId = parseInt(Utils.randSeedItem(Object.keys(speciesStarters)), 10); const species = getPokemonSpecies(randomSpeciesId); if (!pokerusStarters.includes(species)) { diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index ac6af5cbb04..ee56a3631dd 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -13,7 +13,7 @@ import { allMoves } from "../data/move"; import { Nature, getNatureName } from "../data/nature"; import { pokemonFormChanges } from "../data/pokemon-forms"; import { LevelMoves, pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "../data/pokemon-level-moves"; -import PokemonSpecies, { allSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities, getPokerusStarters } from "../data/pokemon-species"; +import PokemonSpecies, { allSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities, POKERUS_STARTER_COUNT, getPokerusStarters } from "../data/pokemon-species"; import { Type } from "../data/type"; import { GameModes } from "../game-mode"; import { AbilityAttr, DexAttr, DexAttrProps, DexEntry, StarterMoveset, StarterAttributes, StarterPreferences, StarterPrefs } from "../system/game-data"; @@ -631,7 +631,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { starterBoxContainer.add(this.starterSelectScrollBar); - this.pokerusCursorObjs = new Array(3).fill(null).map(() => { + this.pokerusCursorObjs = new Array(POKERUS_STARTER_COUNT).fill(null).map(() => { const cursorObj = this.scene.add.image(0, 0, "select_cursor_pokerus"); cursorObj.setVisible(false); cursorObj.setOrigin(0, 0); From 8046b99b753df7f68fef9f3527ad6ba141efdc30 Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Sun, 15 Sep 2024 13:06:22 -0400 Subject: [PATCH 10/23] [Refactor] Refactor code for Grassy Terrain halving the power of Earthquake, Magnitude, and Bulldoze (#4263) * EQ, magnitude, and bulldoze do half damage in grassy terrain * Fix more styling issues in grassy glide * lol unit tests * Add test :pikastare: --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/move.ts | 9 ++--- src/test/arena/grassy_terrain.test.ts | 56 +++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 src/test/arena/grassy_terrain.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index 732a1feea0c..10c98e0a7f7 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -813,10 +813,6 @@ export default class Move implements Localizable { power.value *= typeBoost.boostValue; } - if (source.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() && this.type === Type.GROUND && this.moveTarget === MoveTarget.ALL_NEAR_OTHERS) { - power.value /= 2; - } - applyMoveAttrs(VariablePowerAttr, source, target, this, power); source.scene.applyModifiers(PokemonMultiHitModifier, source.isPlayer(), source, new Utils.IntegerHolder(0), power); @@ -6956,6 +6952,7 @@ export function initMoves() { .makesContact(false), new AttackMove(Moves.EARTHQUAKE, Type.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1) .attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true) + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.FISSURE, Type.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) @@ -7349,6 +7346,7 @@ export function initMoves() { new AttackMove(Moves.MAGNITUDE, Type.GROUND, MoveCategory.PHYSICAL, -1, 100, 30, -1, 0, 2) .attr(PreMoveMessageAttr, magnitudeMessageFunc) .attr(MagnitudePowerAttr) + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY ? 0.5 : 1) .attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), @@ -8223,6 +8221,7 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.BULLDOZE, Type.GROUND, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.FROST_BREATH, Type.ICE, MoveCategory.SPECIAL, 60, 90, 10, 100, 0, 5) @@ -9112,7 +9111,7 @@ export function initMoves() { .condition(failIfDampCondition) .makesContact(false), new AttackMove(Moves.GRASSY_GLIDE, Type.GRASS, MoveCategory.PHYSICAL, 55, 100, 20, -1, 0, 8) - .attr(IncrementMovePriorityAttr, (user, target, move) =>user.scene.arena.getTerrainType()===TerrainType.GRASSY&&user.isGrounded()), + .attr(IncrementMovePriorityAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && user.isGrounded()), new AttackMove(Moves.RISING_VOLTAGE, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.ELECTRIC && target.isGrounded() ? 2 : 1), new AttackMove(Moves.TERRAIN_PULSE, Type.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 8) diff --git a/src/test/arena/grassy_terrain.test.ts b/src/test/arena/grassy_terrain.test.ts new file mode 100644 index 00000000000..e8064676741 --- /dev/null +++ b/src/test/arena/grassy_terrain.test.ts @@ -0,0 +1,56 @@ +import { allMoves } from "#app/data/move"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Arena - Grassy Terrain", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + const TIMEOUT = 20 * 1000; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .disableCrits() + .enemyLevel(30) + .enemySpecies(Species.SNORLAX) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH) + .moveset([Moves.GRASSY_TERRAIN, Moves.EARTHQUAKE]) + .ability(Abilities.BALL_FETCH); + }); + + it("halves the damage of Earthquake", async () => { + await game.classicMode.startBattle([Species.FEEBAS]); + + const eq = allMoves[Moves.EARTHQUAKE]; + vi.spyOn(eq, "calculateBattlePower"); + + game.move.select(Moves.EARTHQUAKE); + await game.toNextTurn(); + + expect(eq.calculateBattlePower).toHaveReturnedWith(100); + + game.move.select(Moves.GRASSY_TERRAIN); + await game.toNextTurn(); + + game.move.select(Moves.EARTHQUAKE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(eq.calculateBattlePower).toHaveReturnedWith(50); + }, TIMEOUT); +}); From 880a46b65942d7e537b52ab4c63441642110d486 Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Sun, 15 Sep 2024 22:00:47 -0400 Subject: [PATCH 11/23] [Sprite] Fix Lycanroc Midday (#4274) * [Sprite] Midday Lycanroc back * [Sprite] Midday Lycanroc shiny front * [Sprite] Midday Lycanroc shiny back --- public/images/pokemon/exp/back/745.png | Bin 2859 -> 2997 bytes public/images/pokemon/exp/back/shiny/745.json | 670 ++++++----------- public/images/pokemon/exp/back/shiny/745.png | Bin 5983 -> 2997 bytes public/images/pokemon/exp/shiny/745.json | 691 +++++++++++++----- public/images/pokemon/exp/shiny/745.png | Bin 3117 -> 4748 bytes 5 files changed, 754 insertions(+), 607 deletions(-) diff --git a/public/images/pokemon/exp/back/745.png b/public/images/pokemon/exp/back/745.png index 46a354be8a4b0759b22735a04315106a04bd4a99..f49491351649a2493638dc51f159dcc6f570918f 100644 GIT binary patch delta 2991 zcmV;g3sCf{7PS|UB!2;OQb$4nuFf3k0000dP)t-s0001CP(pxjUhL@C$Frv=92bOd zQDI0n0001tT1v=~eB-;PbvQS+zWs6l000eiQchC<|NsC0|NsC0|NsC0Ed)WW000Xk zNkl(>AIsh3`DVkTtV*pKksgO)P1^~vt{>yGe_HI+=C;a%It^~C`Gd9- za$7fJv;Q=?f!chVpwr@}s%_j>HHl4X8~FKr_MPvibha5f4Q|RpSU0KuLmt}gbMBv( zD#0Y3me|Ten}4qQU*bF#IQRYY(;9k$PLG@UlW|i8`eC_AGm_bN=}Y0BA4F zObF>Vbg!&>NFhKr=v-T?m+t4 z&+|y#)GS4~GX+ARPs^X3r^Ah0b2Ix%&|moj=Qpj9h>x~t{!4=nJ9N$Ms*K-P)bW32 zcBxD_e*wD|V(BnLr!~sm_BH*4a#Ma`bCJ+~{&E$d4m_3)H#NiUdNnqS%7leho0w~8 zQx+}6(0}Ofy;NOe=!}HU-1h7Iy4hpNx_!S;lhNfAaG0U8 z)pdqKCvLDyb0DqPsrKsZ-B?;iol#Fesyd^oBexUcE5FsfciGXQ_4O!UXSmd{oAQ%( zF4hgy-gw&yLPnq3HonYgYQ*l;I|_)?T-3vl_J1=U073=q*v^wJ!w!x3QFd+!^$B%a zfh&NWdv?kYZuB0L?n|rYckx>X^|+qZ{+qhtqo+-o3uU|er#ruQagz4 z0Dlu%l)$mY8WU%0iw|W^0k@8oIiTlyiI+ODvzJk%U92Ml8U3XPk&J}aFYwGwGVRPslC(?CAtf1o zFpZ{W7pZKAP5#%3n4|kvxl~7DV?`qE3V&|MBJ2ugk&fQj+;hVHo;=`Cw{&;vO%D8k z2WjYnoi(fLxVdll+&2*B2cGNG_D-fhcUGj5oiW3$LLFh}?lQuyytg(Wt5fwt%MF1gGS-EOJidXv7Z)u>2S zJ71!#v3_4mWn}bdIh|_j4f?%hlYgBpQQlZ;^3m+)4XQ{5J2la)v2gtepueK@mj3Nx zvHMeBp_}aT#)A2|c1L*wj{(r-Eo!{O6 z6T5$Y%)?9H1XYLeQsHhT-UL;L@lxUL?Op*@Z__cn6dVfi0;n3mwS#!6WhZASF;W}2 zb_!k!+iRezg==TvrPF{{w%0a-m!in$!=P#_URsARp9NK;(0Fv8uICiJPTB?DR@ z(mKr8XlRnIr2$i*Qhy`F=P;*=Gr=TXOLMC6!9l}}CiH`xYSP*=r^*ILCvmD|>ZG-0 zP8DM(F$A;9VD_XgbE>NPEu1P%d=AHMV1kPA-6U4A6Qtf`ZdEyq1sxGBrYc8ZJTj0G(aP%22u9OVrR~YoF-tWa85t{3KmFvA3@hpA&ogCW84g z%{y(pO!H0~lY0B^qNKA%z-pUBo`Kz*)_x)zc_E68c4L#??>1cXBJo;F!`GsOjrMZ@F{!#HMdGy< zTT0eqqjE*D(eCv<$tsDUNW9h}h_2NUW-|;M?SEX~vr;8jBvxw)Fi`(mL}H_z3w##* z^cTimq-twPPBrF6Bigfbflup)wN@*;BC%Ra00(Gun#T*i&g2iJAVSZtF@d3cNxpFPEBq6I$FzPg1?4k9Ojr8 zv`QsAsTg?C8{) z3c`(E1ZEK%WyenZj0Z$TQuhS4B4vAs0~p7%rEcLy8)7%4 zzKc|dEn2wI-q=xd*+t6jVnm*trL5(jxi+f!VT{Y)@;F0k9VzTf|jtERso$QJ9YvTSj2;onvjVOEKN> zouRW_!4a#IDH7MtV7dhGYECLo{9V9koq#yYVG0J*rQaPnIg_eHoy-nD#VD?OE%buq lM%AhBe|dUk{H3w5@gGpy8{|JxG(rFX002ovPDHLkV1lYX;41(C delta 2852 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 literal 5983 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 L(pIdIw+j0|ARuq$ diff --git a/public/images/pokemon/exp/shiny/745.json b/public/images/pokemon/exp/shiny/745.json index 6cabccff28d..d0989a1ccd3 100644 --- a/public/images/pokemon/exp/shiny/745.json +++ b/public/images/pokemon/exp/shiny/745.json @@ -1,167 +1,524 @@ -{ - "textures": [ - { - "image": "745.png", - "format": "RGBA8888", - "size": { - "w": 189, - "h": 189 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 65, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 65, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 66, - "h": 57 - }, - "frame": { - "x": 65, - "y": 0, - "w": 66, - "h": 57 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 64, - "h": 58 - }, - "frame": { - "x": 65, - "y": 57, - "w": 64, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 64, - "h": 57 - }, - "frame": { - "x": 0, - "y": 58, - "w": 64, - "h": 57 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 65, - "h": 56 - }, - "frame": { - "x": 0, - "y": 115, - "w": 65, - "h": 56 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 62, - "h": 58 - }, - "frame": { - "x": 65, - "y": 115, - "w": 62, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 66, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 62, - "h": 58 - }, - "frame": { - "x": 127, - "y": 115, - "w": 62, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:1b95a218abc87c12576165b943d3cb77:4d796dc75302ca2e18ce15e67dcf3f0f:f9304907e03a5223c5bc78c934419106$" - } -} +{ + "textures": [ + { + "image": "745.png", + "format": "RGBA8888", + "size": { + "w": 286, + "h": 286 + }, + "scale": 1, + "frames": [ + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 60, + "h": 55 + }, + "frame": { + "x": 0, + "y": 0, + "w": 60, + "h": 55 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 60, + "h": 55 + }, + "frame": { + "x": 60, + "y": 0, + "w": 60, + "h": 55 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 60, + "h": 55 + }, + "frame": { + "x": 120, + "y": 0, + "w": 60, + "h": 55 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 60, + "h": 55 + }, + "frame": { + "x": 180, + "y": 0, + "w": 60, + "h": 55 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 0, + "y": 55, + "w": 60, + "h": 57 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 60, + "y": 55, + "w": 60, + "h": 57 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 120, + "y": 55, + "w": 60, + "h": 57 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 180, + "y": 55, + "w": 60, + "h": 57 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 180, + "y": 55, + "w": 60, + "h": 57 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 0, + "y": 112, + "w": 60, + "h": 57 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 60, + "y": 112, + "w": 60, + "h": 57 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 60, + "h": 57 + }, + "frame": { + "x": 120, + "y": 112, + "w": 60, + "h": 57 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 180, + "y": 112, + "w": 60, + "h": 58 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 180, + "y": 112, + "w": 60, + "h": 58 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 0, + "y": 169, + "w": 60, + "h": 58 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 0, + "y": 169, + "w": 60, + "h": 58 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 60, + "y": 169, + "w": 60, + "h": 58 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 120, + "y": 169, + "w": 60, + "h": 58 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 180, + "y": 170, + "w": 60, + "h": 58 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 0, + "y": 227, + "w": 60, + "h": 58 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 0, + "y": 227, + "w": 60, + "h": 58 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 60, + "y": 227, + "w": 60, + "h": 58 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 120, + "y": 227, + "w": 60, + "h": 58 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 60, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 60, + "h": 58 + }, + "frame": { + "x": 180, + "y": 228, + "w": 60, + "h": 58 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:d67741bfb78b7ff0c920c5395dd91fc2:e78172ef76e3b6327173461a595a8a6b:f9304907e03a5223c5bc78c934419106$" + } +} diff --git a/public/images/pokemon/exp/shiny/745.png b/public/images/pokemon/exp/shiny/745.png index 7679c44ba13881947a41cf96c92624f0db570955..c3256cf3f64d028bbac48cdb82b7bee68dd19794 100644 GIT binary patch literal 4748 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 D7VmOK literal 3117 zcmV+|4AS$7P)b}8(I>~Vr|jt0`k#;f{{Bp$73%;100DGTPE!Ct z=GbNc01L56L_t(|+U=YPlH)cEMFml$6>xI@>qgx7MFwTpq|BO{^mLl|A0V~*HMZ@4 zHTEyhCyDN_{VVfn=AG!9>eTsE_g2+^p@#t4{40Wl54b;!=p}x5bulkpov$N&!ad`s zR^5-2GheoO>FRvt{WI?WaIMNt{^w+_Y?t(YjqGQ|;kkO|ZLfKZL&&3IMojdfDeHfrhwQcQ?Ng006+d&kL~bPX7}3cZG;>81eY#SIU!h zD%T1C(e1M=Hs3P$K^>6+yk3X1Z|~uy?7NQxU=kpNVDN-_CvLSF;{dOh+B!-UO6_9P zrU8&M8^HLs5$v5ZBCdVDjl=~aD$PrNXXesVXqW0y0MPDD0B$1a5S*jC8o=6z^Zfw# z@C??yl6TrXXg4l2SpaSS1n}<7e-`hU=-h9`(Unf`SAEuTmw$A%>jsG2>j>u38%22L zm8J;V;Ix%*d&!&-k0XFvKkzpOCcs1Xg)cqA#*Fsnu9!+(-=L4&`{TmAE78|v>)AeH zJ?7p$fr5Q%($`aeVTDoYgns~6KgG<=vWeh$Dn!^Y@Ze#KAP{-3y@l-#L-#rY2ekL#x%&t0n>PrB_8s?N ze;5k){x!;T)z7riyPww<@ehc1A`th!8yt}X(Y?90=HL5-d;1S@OPe0yi|*44n*M1~ z`QC%uzN0<7+LjS^%)j-Fdm+*{q+WZ@{k{vCy<}Apj(rc`5f9xf%xIevcSC%CT|X=Uv(+IAc6`DbkK zy!Qp#b|>!g18$$t)-k@|eU&zR$@_cS`}P-(uL7CW(tR1oB$loYWQq@&rB|cz(qI6q_g`EOA6Z0!CWHY5pVOY#*(jm}^mMUCs zpUA?_0i6K~T)YA2VP97tXjENYdUP$teSy;vzB=0=X8S$KA5y(4W zVFMD#uu{4yAT!usPxAIlSJ(EX8vvcWVSmjD{~illDcu0*0h*a zQVyNcr97s+eX4O}y-x?VTI|Z^@o)fD)=M;@fvmY0)6d%E)=65Q2 zLZf;bbB;zOx(DvmYvNNxAO}oo%o{u>%{>^Hw4{h<#kG5Ax_{EXIWS?fzXSP>xQKqc z;XN9ay7M=J_=rY*lEy61%iH2rcJo{A-+@WLNx~LFw?NjflCTw_d6<+;qmu428!#zO zf~@l-?0Wki;d>Wk{Wb}k!=$Ek2~64+pP^BYhe+5-m~?N$q-6km5PX1y-4=kXi)qvq zN5Q)wE15_-xYhQUX=l|D(3#KI zOSdTZu{dvcR&4;CDbHCk;6Ba1lY4M4=0M!kehq2NfKJ<1ZP43PqqIQIeMpmb`oj7v zmIFFRJZF@>^rw4D?y-2IF)Ac&U8{XjZLm8$XY`rC`?<&B-NvZZ&Z1dI-5v_d^Q{ND z{Cl}K)U(d2GrdVWJg1-EHZX$$_w4sNtDa{C$gI1cL}8()emnP~F)BNaI*U51c7e$xpU6O>=i`U2lN2p)V?$d(eA8rfy8i>#a@4eN}0>J9%v%-f6rPfnJhi1Pm8Ybk zu+^5bHx`}SMnZ^Nkd^5x0HPY$fTjL zx-WyY)TR42NV`!{*uM>={f*!FjoJHA4Z`>jF*=1|oVFRP00000NkvXX Hu0mjfyiFp< From 6c43e970010948bb229a465fa61c70c4d7c73974 Mon Sep 17 00:00:00 2001 From: sodam <66295123+sodaMelon@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:01:07 +0900 Subject: [PATCH 12/23] [Bug] fixed ME event ```trash to treasure``` wrong descriptions of the choices (#4273) * modified script (by ImperialSympathizer) * removed wrong word(healing) * removed wrong word --- .../en/mystery-encounters/trash-to-treasure-dialogue.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/en/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/en/mystery-encounters/trash-to-treasure-dialogue.json index ae6e63ed800..fe2cb54f5b1 100644 --- a/src/locales/en/mystery-encounters/trash-to-treasure-dialogue.json +++ b/src/locales/en/mystery-encounters/trash-to-treasure-dialogue.json @@ -6,8 +6,8 @@ "option": { "1": { "label": "Dig for Valuables", - "tooltip": "(-) Lose Healing Items in Shops\n(+) Gain Amazing Items", - "selected": "You wade through the garbage pile, becoming mired in filth.$There's no way any respectable shopkeepers\nwill sell you anything in your grimy state!$You'll just have to make do without shop healing items.$However, you found some incredible items in the garbage!" + "tooltip": "(-) Items in Shops Cost 3x\n(+) Gain Amazing Items", + "selected": "You wade through the garbage pile, becoming mired in filth.$There's no way any respectable shopkeeper would\nsell you items at the normal rate in your grimy state!$You'll have to pay extra for items now.$However, you found some incredible items in the garbage!" }, "2": { "label": "Investigate Further", From 6c2880dc30e712ff3d756a10193d4973f3a4a218 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Mon, 16 Sep 2024 04:01:44 +0200 Subject: [PATCH 13/23] [Localization] Missing French entries (#4270) * Update battle.json * Update move-trigger.json * Update party-ui-handler.json * Update tutorial.json * Update tutorial.json * Update trainer-names.json * Update menu.json --- src/locales/fr/battle.json | 3 +++ src/locales/fr/menu.json | 2 +- src/locales/fr/move-trigger.json | 3 +++ src/locales/fr/party-ui-handler.json | 4 +++- src/locales/fr/trainer-names.json | 2 +- src/locales/fr/tutorial.json | 2 +- 6 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/locales/fr/battle.json b/src/locales/fr/battle.json index 7b78c963187..5f5e81350e1 100644 --- a/src/locales/fr/battle.json +++ b/src/locales/fr/battle.json @@ -44,7 +44,10 @@ "moveNotImplemented": "{{moveName}} n’est pas encore implémenté et ne peut pas être sélectionné.", "moveNoPP": "Il n’y a plus de PP pour\ncette capacité !", "moveDisabled": "{{moveName}} est sous entrave !", + "canOnlyUseMove": "{{pokemonName}} ne peut utiliser\nque la capacité {{moveName}} !", + "moveCannotBeSelected": "La capacité {{moveName}}\nne peut pas être choisie !", "disableInterruptedMove": "Il y a une entrave sur la capacité {{moveName}}\nde{{pokemonNameWithAffix}} !", + "throatChopInterruptedMove": "Exécu-Son empêche {{pokemonName}}\nd’utiliser la capacité !", "noPokeballForce": "Une force mystérieuse\nempêche l’utilisation des Poké Balls.", "noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !", "noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon !", diff --git a/src/locales/fr/menu.json b/src/locales/fr/menu.json index 277b0f5fd04..35cd06606a7 100644 --- a/src/locales/fr/menu.json +++ b/src/locales/fr/menu.json @@ -46,7 +46,7 @@ "yes": "Oui", "no": "Non", "disclaimer": "AVERTISSEMENT", - "disclaimerDescription": "Ce jeu n’est pas un produit fini et peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait ou non encore être mis à jour ou terminé.", + "disclaimerDescription": "Ce jeu n’est pas un produit fini.\nIl peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait à tout moment cesser d’être mis à jour.", "choosePokemon": "Sélectionnez un Pokémon.", "renamePokemon": "Renommer le Pokémon", "rename": "Renommer", diff --git a/src/locales/fr/move-trigger.json b/src/locales/fr/move-trigger.json index 3704bc90718..6f9d9d4dd63 100644 --- a/src/locales/fr/move-trigger.json +++ b/src/locales/fr/move-trigger.json @@ -7,6 +7,7 @@ "switchedStat": "{{pokemonName}} et sa cible échangent leur {{stat}} !", "sharedGuard": "{{pokemonName}} additionne sa garde à celle de sa cible et redistribue le tout équitablement !", "sharedPower": "{{pokemonName}} additionne sa force à celle de sa cible et redistribue le tout équitablement !", + "shiftedStats": "{{pokemonName}} échange {{statToSwitch}} et {{statToSwitchWith}} !", "goingAllOutForAttack": "{{pokemonName}} a pris\ncette capacité au sérieux !", "regainedHealth": "{{pokemonName}}\nrécupère des PV !", "keptGoingAndCrashed": "{{pokemonName}}\ns’écrase au sol !", @@ -67,5 +68,7 @@ "swapArenaTags": "Les effets affectant chaque côté du terrain\nont été échangés par {{pokemonName}} !", "exposedMove": "{{targetPokemonName}} est identifié\npar {{pokemonName}} !", "safeguard": "{{targetName}} est protégé\npar la capacité Rune Protect !", + "substituteOnOverlap": "{{pokemonName}} a déjà\nun clone !", + "substituteNotEnoughHp": "Mais il est trop faible\npour créer un clone !", "afterYou": "{{pokemonName}} accepte\navec joie !" } diff --git a/src/locales/fr/party-ui-handler.json b/src/locales/fr/party-ui-handler.json index 6adba2c8309..a11640c80b3 100644 --- a/src/locales/fr/party-ui-handler.json +++ b/src/locales/fr/party-ui-handler.json @@ -13,6 +13,7 @@ "ALL": "Tout", "PASS_BATON": "Relais", "UNPAUSE_EVOLUTION": "Réactiver Évolution", + "PAUSE_EVOLUTION": "Interrompre Évolution", "REVIVE": "Ranimer", "RENAME": "Renommer", "choosePokemon": "Sélectionnez un Pokémon.", @@ -23,6 +24,7 @@ "tooManyItems": "{{pokemonName}} porte trop\nd’exemplaires de cet objet !", "anyEffect": "Cela n’aura aucun effet.", "unpausedEvolutions": "{{pokemonName}} peut de nouveau évoluer.", + "pausedEvolutions": "{{pokemonName}} ne peut plus évoluer.", "unspliceConfirmation": "Voulez-vous vraiment séparer {{fusionName}}\nde {{pokemonName}} ? {{fusionName}} sera perdu.", "wasReverted": "{{fusionName}} est redevenu {{pokemonName}}.", "releaseConfirmation": "Voulez-vous relâcher {{pokemonName}} ?", @@ -44,4 +46,4 @@ "untilWeMeetAgain": "À la prochaine, {{pokemonName}} !", "sayonara": "Sayonara, {{pokemonName}} !", "smellYaLater": "À la revoyure, {{pokemonName}} !" -} \ No newline at end of file +} diff --git a/src/locales/fr/trainer-names.json b/src/locales/fr/trainer-names.json index 5864976cc34..beec7e0c313 100644 --- a/src/locales/fr/trainer-names.json +++ b/src/locales/fr/trainer-names.json @@ -94,7 +94,7 @@ "caitlin": "Percila", "malva": "Malva", "siebold": "Narcisse", - "wikstrom": "Tileo", + "wikstrom": "Thyméo", "drasna": "Dracéna", "hala": "Pectorius", "molayne": "Molène", diff --git a/src/locales/fr/tutorial.json b/src/locales/fr/tutorial.json index 7936987457f..3236bdafea2 100644 --- a/src/locales/fr/tutorial.json +++ b/src/locales/fr/tutorial.json @@ -6,5 +6,5 @@ "pokerus": "Chaque jour, 3 starters tirés aléatoirement ont un contour violet.\n$Si un starter que vous possédez l’a, essayez de l’ajouter à votre équipe. Vérifiez bien son résumé !", "statChange": "Les changements de stats persistent à travers\nles combats tant que le Pokémon n’est pas rappelé.\n$Vos Pokémon sont rappelés avant un combat de\nDresseur et avant d’entrer dans un nouveau biome.\n$Vous pouvez voir en combat les changements de stats\nd’un Pokémon en maintenant C ou Maj.\n$Vous pouvez également voir les capacités de l’adversaire\nen maintenant V.\n$Seules les capacités que le Pokémon a utilisées dans\nce combat sont consultables.", "selectItem": "Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un.\n$Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents.\n$La plupart des effets des objets non-consommables se cumuleront de diverses manières.\n$Certains objets n’apparaitront que s’ils ont une utilité immédiate, comme les objets d’évolution.\n$Vous pouvez aussi transférer des objets tenus entre\nPokémon en utilisant l’option de transfert.\n$L’option de transfert apparait en bas à droite dès\nqu’un Pokémon de l’équipe porte un objet.\n$Vous pouvez acheter des consommables avec de\nl’argent. Plus vous progressez, plus le choix sera large.\n$Choisir un des objets gratuits déclenchera le prochain\ncombat, donc faites bien tous vos achats avant.", - "eggGacha": "Depuis cet écran, vous pouvez utiliser vos coupons\npour recevoir Œufs de Pokémon au hasard.\n$Les Œufs éclosent après avoir remporté un certain nombre de combats. Plus ils sont rares, plus ils mettent de temps.\n$Les Pokémon éclos ne rejoindront pas votre équipe, mais seront ajoutés à vos starters.\n$Les Pokémon issus d’Œufs ont généralement de meilleurs IV que les Pokémon sauvages.\n$Certains Pokémon ne peuvent être obtenus que dans des Œufs.\n$Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !" + "eggGacha": "Depuis cet écran, vous pouvez utiliser vos coupons\npour recevoir Œufs de Pokémon au hasard.\n$Les Œufs éclosent après avoir remporté un certain nombre de combats.\n$Plus ils sont rares, plus ils mettent de temps.\n$Les Pokémon éclos ne rejoindront pas votre équipe, mais seront ajoutés à vos starters.\n$Les Pokémon issus d’Œufs ont généralement de meilleurs IV que les Pokémon sauvages.\n$Certains Pokémon ne peuvent être obtenus que dans des Œufs.\n$Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !" } From 72439ffff7b003538ede14d306a927c2574b2b5a Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Mon, 16 Sep 2024 10:58:28 -0400 Subject: [PATCH 14/23] [Move][Beta] Add back grounded condition to ground shaky moves and grassy terrain (#4276) --- src/data/move.ts | 6 +++--- src/test/arena/grassy_terrain.test.ts | 27 +++++++++++++++++++++------ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 10c98e0a7f7..0c2f587d885 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -6952,7 +6952,7 @@ export function initMoves() { .makesContact(false), new AttackMove(Moves.EARTHQUAKE, Type.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1) .attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY ? 0.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.FISSURE, Type.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) @@ -7346,7 +7346,7 @@ export function initMoves() { new AttackMove(Moves.MAGNITUDE, Type.GROUND, MoveCategory.PHYSICAL, -1, 100, 30, -1, 0, 2) .attr(PreMoveMessageAttr, magnitudeMessageFunc) .attr(MagnitudePowerAttr) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY ? 0.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), @@ -8221,7 +8221,7 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.BULLDOZE, Type.GROUND, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) - .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY ? 0.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1) .makesContact(false) .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.FROST_BREATH, Type.ICE, MoveCategory.SPECIAL, 60, 90, 10, 100, 0, 5) diff --git a/src/test/arena/grassy_terrain.test.ts b/src/test/arena/grassy_terrain.test.ts index e8064676741..efb2539885d 100644 --- a/src/test/arena/grassy_terrain.test.ts +++ b/src/test/arena/grassy_terrain.test.ts @@ -26,16 +26,16 @@ describe("Arena - Grassy Terrain", () => { game.override .battleType("single") .disableCrits() - .enemyLevel(30) - .enemySpecies(Species.SNORLAX) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH) + .enemyLevel(1) + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.STURDY) + .enemyMoveset(Moves.FLY) .moveset([Moves.GRASSY_TERRAIN, Moves.EARTHQUAKE]) - .ability(Abilities.BALL_FETCH); + .ability(Abilities.NO_GUARD); }); it("halves the damage of Earthquake", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([Species.TAUROS]); const eq = allMoves[Moves.EARTHQUAKE]; vi.spyOn(eq, "calculateBattlePower"); @@ -53,4 +53,19 @@ describe("Arena - Grassy Terrain", () => { expect(eq.calculateBattlePower).toHaveReturnedWith(50); }, TIMEOUT); + + it("Does not halve the damage of Earthquake if opponent is not grounded", async () => { + await game.classicMode.startBattle([Species.NINJASK]); + + const eq = allMoves[Moves.EARTHQUAKE]; + vi.spyOn(eq, "calculateBattlePower"); + + game.move.select(Moves.GRASSY_TERRAIN); + await game.toNextTurn(); + + game.move.select(Moves.EARTHQUAKE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(eq.calculateBattlePower).toHaveReturnedWith(100); + }, TIMEOUT); }); From 2221afca817005496cfed52eac3dffac623a1ac3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Marques?= <44369723+tomasrggm@users.noreply.github.com> Date: Mon, 16 Sep 2024 19:44:11 +0100 Subject: [PATCH 15/23] [QoL] Slight Resize and Reallocate to IV graph in new game screen (#1928) * Resize and Reallocate to IV graph in new game * decrease moveset container size * fix to font shadow * fix to shadows * Remove unused variable * Revert IV text back to original size * fix eslint error check post merge * Update src/ui/stats-container.ts Reformat statLabel line. Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: tomasrggm Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/ui/starter-select-ui-handler.ts | 2 +- src/ui/stats-container.ts | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index ee56a3631dd..308614887e9 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -760,7 +760,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonCaughtHatchedContainer.add(this.pokemonHatchedCountText); this.pokemonMovesContainer = this.scene.add.container(102, 16); - this.pokemonMovesContainer.setScale(0.5); + this.pokemonMovesContainer.setScale(0.375); for (let m = 0; m < 4; m++) { const moveContainer = this.scene.add.container(0, 14 * m); diff --git a/src/ui/stats-container.ts b/src/ui/stats-container.ts index c6e0ea3a71c..06dd6e7c035 100644 --- a/src/ui/stats-container.ts +++ b/src/ui/stats-container.ts @@ -4,12 +4,15 @@ import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./t import { PERMANENT_STATS, getStatKey } from "#app/enums/stat"; import i18next from "i18next"; + const ivChartSize = 24; const ivChartStatCoordMultipliers = [[0, -1], [0.825, -0.5], [0.825, 0.5], [-0.825, -0.5], [-0.825, 0.5], [0, 1]]; const speedLabelOffset = -3; const sideLabelOffset = 1; const ivLabelOffset = [0, sideLabelOffset, -sideLabelOffset, sideLabelOffset, -sideLabelOffset, speedLabelOffset]; +const ivChartLabelyOffset= [0, 5, 0, 5, 0, 0]; // doing this so attack does not overlap with (+N) const ivChartStatIndexes = [0, 1, 2, 5, 4, 3]; // swap special attack and speed + const defaultIvChartData = new Array(12).fill(null).map(() => 0); export class StatsContainer extends Phaser.GameObjects.Container { @@ -29,7 +32,6 @@ export class StatsContainer extends Phaser.GameObjects.Container { setup() { this.setName("stats"); const ivChartBgData = new Array(6).fill(null).map((_, i: integer) => [ ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat(); - const ivChartBg = this.scene.add.polygon(48, 44, ivChartBgData, 0xd8e0f0, 0.625); ivChartBg.setOrigin(0, 0); @@ -55,12 +57,19 @@ export class StatsContainer extends Phaser.GameObjects.Container { this.ivStatValueTexts = []; for (const s of PERMANENT_STATS) { - const statLabel = addTextObject(this.scene, ivChartBg.x + (ivChartSize) * ivChartStatCoordMultipliers[s][0] * 1.325, ivChartBg.y + (ivChartSize) * ivChartStatCoordMultipliers[s][1] * 1.325 - 4 + ivLabelOffset[s], i18next.t(getStatKey(s)), TextStyle.TOOLTIP_CONTENT); + const statLabel = addTextObject( + this.scene, + ivChartBg.x + (ivChartSize) * ivChartStatCoordMultipliers[s][0] * 1.325 + (this.showDiff ? 0 : ivLabelOffset[s]), + ivChartBg.y + (ivChartSize) * ivChartStatCoordMultipliers[s][1] * 1.325 - 4 + (this.showDiff ? 0 : ivChartLabelyOffset[s]), + i18next.t(getStatKey(s)), + TextStyle.TOOLTIP_CONTENT + ); statLabel.setOrigin(0.5); - this.ivStatValueTexts[s] = addBBCodeTextObject(this.scene, statLabel.x, statLabel.y + 8, "0", TextStyle.TOOLTIP_CONTENT); + this.ivStatValueTexts[s] = addBBCodeTextObject(this.scene, statLabel.x - (this.showDiff ? 0 : ivLabelOffset[s]), statLabel.y + 8, "0", TextStyle.TOOLTIP_CONTENT); this.ivStatValueTexts[s].setOrigin(0.5); + this.add(statLabel); this.add(this.ivStatValueTexts[s]); } From d5cce666d3483f14310374bf47a4b4a147d3e726 Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:03:13 -0500 Subject: [PATCH 16/23] Remove Dragon Ascent Requirement (#4284) --- src/data/pokemon-forms.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 4fc833939e4..a904f497b0f 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -684,7 +684,7 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.GROUDON, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.RED_ORB)) ], [Species.RAYQUAZA]: [ - new SpeciesFormChange(Species.RAYQUAZA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeCompoundTrigger(new SpeciesFormChangeItemTrigger(FormChangeItem.RAYQUAZITE), new SpeciesFormChangeMoveLearnedTrigger(Moves.DRAGON_ASCENT))) + new SpeciesFormChange(Species.RAYQUAZA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.RAYQUAZITE)) ], [Species.DEOXYS]: [ new SpeciesFormChange(Species.DEOXYS, "normal", "attack", new SpeciesFormChangeItemTrigger(FormChangeItem.SHARP_METEORITE)), From 0dabf87815fee2454f1c7b980aad8df7aeea9482 Mon Sep 17 00:00:00 2001 From: podar <1999688+podarsmarty@users.noreply.github.com> Date: Mon, 16 Sep 2024 14:08:50 -0500 Subject: [PATCH 17/23] Being explicit in vite configuration for relative paths (#4264) --- vite.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/vite.config.ts b/vite.config.ts index 1fd85e2572f..946315c4b7b 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -31,6 +31,7 @@ export default defineConfig(({mode}) => { return ({ ...defaultConfig, + base: '', esbuild: { pure: mode === 'production' ? ['console.log'] : [], keepNames: true, From 4605ed4c4fbafd99b9131f3ada47df10a4289dfc Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:18:57 +0200 Subject: [PATCH 18/23] [Localization] Localized status condition icon (#4286) * Status Condition Icons now can be localized. Already added german * More --- public/images/statuses_ca_ES.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_ca_ES.png | Bin 0 -> 441 bytes public/images/statuses_de.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_de.png | Bin 0 -> 2857 bytes public/images/statuses_es.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_es.png | Bin 0 -> 441 bytes public/images/statuses_fr.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_fr.png | Bin 0 -> 2714 bytes public/images/statuses_it.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_it.png | Bin 0 -> 441 bytes public/images/statuses_ja.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_ja.png | Bin 0 -> 2936 bytes public/images/statuses_ko.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_ko.png | Bin 0 -> 441 bytes public/images/statuses_pt_BR.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_pt_BR.png | Bin 0 -> 519 bytes public/images/statuses_zh_CN.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_zh_CN.png | Bin 0 -> 441 bytes public/images/statuses_zh_TW.json | 188 ++++++++++++++++++++++++++++++ public/images/statuses_zh_TW.png | Bin 0 -> 441 bytes src/loading-scene.ts | 3 + src/ui/battle-info.ts | 2 +- src/ui/party-ui-handler.ts | 2 +- src/ui/summary-ui-handler.ts | 2 +- 24 files changed, 1886 insertions(+), 3 deletions(-) create mode 100644 public/images/statuses_ca_ES.json create mode 100644 public/images/statuses_ca_ES.png create mode 100644 public/images/statuses_de.json create mode 100644 public/images/statuses_de.png create mode 100644 public/images/statuses_es.json create mode 100644 public/images/statuses_es.png create mode 100644 public/images/statuses_fr.json create mode 100644 public/images/statuses_fr.png create mode 100644 public/images/statuses_it.json create mode 100644 public/images/statuses_it.png create mode 100644 public/images/statuses_ja.json create mode 100644 public/images/statuses_ja.png create mode 100644 public/images/statuses_ko.json create mode 100644 public/images/statuses_ko.png create mode 100644 public/images/statuses_pt_BR.json create mode 100644 public/images/statuses_pt_BR.png create mode 100644 public/images/statuses_zh_CN.json create mode 100644 public/images/statuses_zh_CN.png create mode 100644 public/images/statuses_zh_TW.json create mode 100644 public/images/statuses_zh_TW.png diff --git a/public/images/statuses_ca_ES.json b/public/images/statuses_ca_ES.json new file mode 100644 index 00000000000..be1b78e0e41 --- /dev/null +++ b/public/images/statuses_ca_ES.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_ca_ES.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_ca_ES.png b/public/images/statuses_ca_ES.png new file mode 100644 index 0000000000000000000000000000000000000000..d372b989be966007e5fccac5f54fe341457e598b GIT binary patch literal 441 zcmV;q0Y?6bP)_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/public/images/statuses_de.json b/public/images/statuses_de.json new file mode 100644 index 00000000000..90840b8eeb1 --- /dev/null +++ b/public/images/statuses_de.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_de.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_de.png b/public/images/statuses_de.png new file mode 100644 index 0000000000000000000000000000000000000000..ab85384d5914456bab1ba11f57f19743c522ca93 GIT binary patch literal 2857 zcmbVO3s4m29bYwY=oLw#MQRwmoK}Ibw~u?VTTTz|c$||1go~c2G<&;yk8pQ;+%9k+ zp~eYe4AF?FV}z*bq&8TjQ$cY!h#0lnqSR0y@mVWl&{i>MeMI84-yLuz#u&$)+5Nu# zzW?L*`#<*E)j3%ik&~uRf*>f;kg3lFV>Gz65#iuDgRcG(3==(>OLzzpPYK-Ppe+qC z5G1N_n9PFN_&P~*E*Zse7FOnSd4MzoCC~SHD7ugpBo@}@aBHNu{QIR62cwZLRvJ;G zN5|S7ndM$KuRO~{mlx6mBb`4_lI$aa0T(M!5}(WI=1HGM8njD-d0-ilN`fLnp+=e# za40bwb0j*>%Sx0o6-;9aT%smqmTM#IUyOjq`;e(v68v^ z^bud+O(V4nf`>$q($Z2{sa(c+Z3spX1cKrSj>A9#=F8jy<%8Y)tWgVkmZ!ZAkKo|k zl7L0Z!W9b|DL^_*!Q}~=b@L-(0s%vOln23NXn;~skfB3zo?@>v=$xSu*2%h9x4;8g zEF|l(a{|ZPxgRkd+Wwvc5L%-#V(>fKdX*R33N4ij>Wh8YWCp)eH3)fUUBzMi9t10^u3&j5V_OTyH0 z6$4upDhwu21p|X68pe|>v<0)GEXB~H`q^FwXhF*P+;%{#{67?8&BY?kb#BUy36ha^g7C%YRfu`0-=|DBJjC5q#@q~On3)E5lQacNb zKBdZsz4M$^D5bn?iVfucC%XvwG4MQ9@^t7pgR2-d1qujPD_~rqAYhA%#$mZqg(X>V zLaszZ)Sm<$SCF`RwCkP+`bb!5JLR^q;DkV=&rjyr`f3>E56C?J33(8JABV&%S$C%A_U++r?ySlox2iGkSMT*6d)54?E6EMQ@$wyK9T0VNz z^6{r{+e=HnzT?A-8Vr#3=BX3gR#a5$WjQx$X8-fV6?2T}jd&!kB&%fi>Sb?UweCy^ zdm~hweqO7tA_^tnYy)klTspjTm^rAb)9(P#WhPm-+1&evp4VV z*Zs-kYQ?j)9T$DO`WNW&o8i!-Po}pwFP$2bw~2kxPp1yOt83BGvHs=1XdUeA@4nnv zA1~@9nZCj)-R1)S!gTkEJ-565bfdZRE9cB#ixrm>yAyRK_Al<%RCpF8(vQskHOkYP zL*LFr-)-G%*gvGX_F)vX(wWb1?_RT{?(Ng}{_{f7gLHqwE2`2*&y+vdbtPxQyuIZo^8X>)^zy0n zf-adblw1k_`+m>4x_{m8*d6mdj zU#~p-m*_inyHgk5*uVA2xt>-R-|BL&QrEZG#NUpCZ1BU4pQjbf^tT;%@s)L#*Y%lP zji%;Bxr??AE-E_xpz;{mHzTh2P}p}n!z(Tw4x5otFleh7%3gM@ybaKvJhwZ21v$59 z{^S5~a|#x7=J)R$8A_Vok(2UGdD}gA*>&PnQpDEodqUFjhfSZ&nW{Z|!SsHHwsY-o z&aeOD;kG@mpqpletsF>6`ENT{@apfh_io*eQr(txn!uo{g}0+>exeqq7Yn^zYY3~5>V=F~S={SPbh|J48h literal 0 HcmV?d00001 diff --git a/public/images/statuses_es.json b/public/images/statuses_es.json new file mode 100644 index 00000000000..4b44aa117e4 --- /dev/null +++ b/public/images/statuses_es.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_es.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_es.png b/public/images/statuses_es.png new file mode 100644 index 0000000000000000000000000000000000000000..d372b989be966007e5fccac5f54fe341457e598b GIT binary patch literal 441 zcmV;q0Y?6bP)_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/public/images/statuses_fr.json b/public/images/statuses_fr.json new file mode 100644 index 00000000000..78f78a0856c --- /dev/null +++ b/public/images/statuses_fr.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_fr.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_fr.png b/public/images/statuses_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..95989cd5d97ee13dbb7cdca89204ec7bff3f4263 GIT binary patch literal 2714 zcmb_e4Nw&48D2Fak_bvV!uZF!F{6NY`*T0sZU6-i<-`LEXTWG0_jbSg(c9Z&Zx1+> z`qNf~NdkssL~DqI8WD*x;1Gx*Hm%VXqlTXuN|cdGBSRd)!C1A`*zfqcnwA)w>CWta z@9sX|`#$gcJ@0;7ye4hsjG#F|2!hNor06r?I2)eJ0|Vf70aw%phv}}Ab#4TC`dQyO z3E6)j96_dq*iG4TwsAGXiGq^lMKe(53oeL8kl1DUE|%L2WYi3-c4r(mbn+C2+W9yv zOJgLAt|VZyrxZvavmnjH6>R2c9$OZV#^y87fdFI{%@-U_Hp+I z7A8Z#Vk{QCi^FWP>|$^{FE3A-r&5ZN6(?z$#t90iCe>ysHkXY5X30dDDrlT_faUVAhjlvW(b-gzYm3i;aQpeQ83Rj7Euydn66!5tpIm9 ztr+SrB9kOKL{KHxj7G-bbjz%h0|tE@1~XRL?L5P(HBc>DvqD9wGzwa+CKP4> zbPApWK&_&*8f}b!zFy=!zI7d+&%^l?rPFA&7E-~*sCfkm)G-R$OwtMh0FEFDngtqe zJbt=lhkeC5ezG5^|9@vV?j-?cM@YvX6`vfcUWECBCn`Z;i>0{(K3UiAV zIggb>$C#+(Z;c#p30MT#ec8Cgnj-0N@YZzquRp%Q+6Zo9{H+|YZz`7 zKGVNP!5jZB2b{1<65PXD(d%0gWJ;JppJ2-VP0QYeWk-pbyS9bv`9-1Kv?nxYa?ZQM zi-s4~*Vn_#@Sj^-pItn2aanqg3EQ(rSGiI9@*6X411;Nj?c*En)psi+ry~dBI}5wy z{9o&_vIXsE@0Z_JY%2P==6yqEAHVpwDNiM;+CQ%OdD!j1t8>#!kAUm@gR7#Wq-*7e zPd~V;#P(LFD+51kK40>esno(_Jrx5_Cu5(q{bTt2SucXk3fw**^)*+f&NA$si^vhl zR~m1;Tbx*fZ}>fb+qq_^a%Zo$_UgS>UtVA$CYoey7Xo@KSR!a&zgbB{>_W&HlV5qVslD)~4;2b=A{qquPY}a-lW7b+Wx6{L|>b*7--H z+R7X1K6EITA-#3U58Lnjsg`qJx~%Q*pL%j$Ve=u=zMw-(m-e+>t^4agE7qQwvt;d4 z%a7c>oT%=OB0?wi9z0p)y;xmz?nLufFLzYMcXkbxG;gWAzQFni!vW3uvzd3AXfIx- zY`S=DYDeR}#MI@pE3VwyAocX!4G*(=hrA!{9?a`3MGh7ot9rw;G4kvSAs74Wv%U#B ze{25m))$^vUFaKn2Y=w&r_I{(_t;;0 z3qC*BakTR0gIfT)9eD3n#gtbnf6;&W@MkB4V6yt{dM`9S{W7#{YUK;1(`|!0&oq5^ v&U-(kxZ#yk>%(sBhQElxAlqOu8j&by2m1aQ;nAL1?i&orY5HS{8+ZN-$q?K2 literal 0 HcmV?d00001 diff --git a/public/images/statuses_it.json b/public/images/statuses_it.json new file mode 100644 index 00000000000..76fc9ae8b4b --- /dev/null +++ b/public/images/statuses_it.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_it.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_it.png b/public/images/statuses_it.png new file mode 100644 index 0000000000000000000000000000000000000000..d372b989be966007e5fccac5f54fe341457e598b GIT binary patch literal 441 zcmV;q0Y?6bP)_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/public/images/statuses_ja.json b/public/images/statuses_ja.json new file mode 100644 index 00000000000..8de633e8e43 --- /dev/null +++ b/public/images/statuses_ja.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_ja.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_ja.png b/public/images/statuses_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..305fbe9168c3845084f5537924ca404ae9deb412 GIT binary patch literal 2936 zcmb_e3se(V8XoY0#EPvH7PU$UVi$EXk347A@GyXaL^+5H!upuZOdu69F*6|%L=o|| zqD95}*lJxx%R!`|MeAd=>Q+>2ReWvbQ7a3yilVlfD(td1JW{*I+IG+8oXOmo`R@09 z|9}5~?yQcRHhG9>gb0G5A<Uusm%sngt_g z5<3|wJ!cg(65zBagbcHb*2MRw2_y`$Q)UE{qRx=Ifeh`!nXQ)eZgGZ2*mO37H3>Yx zVlJ#XjT1ONjr$pD*W;fEfYj=AE{&IZ$;fa?@IquJ2%|S4FGceS3(YJN&+?qrLbH*X zz-FK`8Z)W2u#~`A5;!isZ=vG)EQ_^T@$VCjCWf=|!7sqs2uffz5*)?lFsguYGy%m) zg@TmfAMoz&LhU;OaQm%jr zS}unb28^I(GD^)dMBn@fjrqAW|J7)nsAf_B#O zkIH>4;UGR9EF<6BE0d_y-ch6@dWA^Aw}g!NOkM8SDa= z195kSk`(RiJdK2QmK@7SdT$$Fwm!cm6TS0oX)GXpMKSiM^PEAjQ5H5l6|ChilsfWr z)_E%P)y6T5!6}&%ht+yi4-<0d65@m&mZ@b110$nQwI1&a{H4YTQm*c6jo)s(Hzjl$ zWlCkiD;$yh@1gv<9_jJ;Vkj@|^8Z&T-R0R+TgZQxUH7vW-tm1k3^oqu(6wWM3)h~< znn0E;U`K#etv)D_jD zGvzhzXO!l7^S;h?bL)qv@6oIk4e7UEOA&?7>MyO^_;l~Kw<8~2YHe*r5K}$lH}LqP zCBw6>E-Rcl{MPI>j#|zYl+&j3xCoKY}_$(>#?k>P0bxOg~Niae?Rx$b7*Hn zRih~TYT#OH{H*2+^HcIJ_!MB}4_49Rj_pbr({wpG`_Z?P+9C`6;`dpsV||mMEz(VQ z>jVCpQWE=4)eR^rbqsc_!TmsrJCsv7^5}!-i_Y#W$~(6&|8DU5(p@1Ql?PPnVY~l4 zqO|0Sb<}gcO0Az36OJ8tIJ)0ls|cEXVnD;UB2W8k9~9lumX*vaaLXJJvFXw{k>}>y zizbxTf7!fk>E?>~m;j;w+k5a2(xo$Fw$Cjbda!N_U8mhrw<@4GQPd0MI2eslb=KGB~)j_4i-JMzq9e4B6q>NqjNf23R1*3 z=dZeR>Y3Utx3qFu)l;QDxU%ltcZ*|-J3==dn-n*)eQ?c<kU8sXA6I_oUQ=zt zx7@N%@R)18<|8lk_M?5HwG;l`$?s~4w(lF1D4%-#P5H{8C*y;I%Bs8vG}EfTqJlQ=%(BKH}bRm`@8RsI?z@K zg~b%V8GEz-_L0?4F29F*eKtSdZ^l0lSKpaM^b$RHa#+Sb?Es7&8ckr z`xpIW_e3E9i8cOn+@XMH*`G!)Rrx!v4|HE(P1FvCJQ8(v+IvqgKRlX(`aVoQG^$yYeD9k_1-$Oi=VcdmR;?RdJ*8PuO*wL6Czp2dhf?w!r!1?B{A;9C z(8qq>m%Lg6-k6*yd~-RnD`2NA@L@|+%ZcIUz9y@L8c@P zCdZZVYhQGnIZ&lpSG^&}-=la|=I?_3VRDq*vt(MJ#?tNM?;h=s9$n@gmu)|pe}3>V zuh)DYdv3n=hdW0)VJbQ&W;!n|DWB>`S2R4By@Rliv_-i?^~2kj7rEPP*n44R$oi5BYaJclft|@n|>vsPlRLS4%qR+QXmthn@`iy5_@6 z_Qg4;=YAPdibst&eZM;N)-Y%+)4qI0XY_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/public/images/statuses_pt_BR.json b/public/images/statuses_pt_BR.json new file mode 100644 index 00000000000..b607991af8f --- /dev/null +++ b/public/images/statuses_pt_BR.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_pt_BR.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_pt_BR.png b/public/images/statuses_pt_BR.png new file mode 100644 index 0000000000000000000000000000000000000000..3073540e8a2a8a03f82d55fea92d339ec62d21ca GIT binary patch literal 519 zcmeAS@N?(olHy`uVBq!ia0vp^VnFP`!3-od_m)2fQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`bpw1tTu(HdIFNAQ2M}~*JSYhGQIYT>z+%RM4;>pGoH)_2V~50s4HFhD z=x8yk0qPKN(X9ni{3Stt!T(VJ!<9QT76PR>3p^r=85p>QL70(Y)*K0-BlJ97978Pp zdnb2qI%L4%a(TtpYp4F#zq=dzX~oH<%9B**ENhtSxoL|J8^^5TuxAsUb}4jeS1I){ z|I?1!AXXRGbIHKvUEtBLD?|l#nYqH4x7@DXFngxzr8yg4WW2JOD8>|6^qf7hmI2OGZKVy_l#eiWJ_a=%fXscL%d{$o#T6GUGwSABjt$1-6X z58IsgsY-0A=KB@vd=I>y`e^FP3eAY?ImaSW#3O!hTpA2ivE{qrjoA_+rV|2d*g-b* zJq}-^B))uq^r@Rh5(Yo47s%iE>FVdQ&MBb@08Px=4*&oF literal 0 HcmV?d00001 diff --git a/public/images/statuses_zh_CN.json b/public/images/statuses_zh_CN.json new file mode 100644 index 00000000000..28760650ecd --- /dev/null +++ b/public/images/statuses_zh_CN.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_zh_CN.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_zh_CN.png b/public/images/statuses_zh_CN.png new file mode 100644 index 0000000000000000000000000000000000000000..d372b989be966007e5fccac5f54fe341457e598b GIT binary patch literal 441 zcmV;q0Y?6bP)_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/public/images/statuses_zh_TW.json b/public/images/statuses_zh_TW.json new file mode 100644 index 00000000000..bf05b2ab0d5 --- /dev/null +++ b/public/images/statuses_zh_TW.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_zh_TW.png b/public/images/statuses_zh_TW.png new file mode 100644 index 0000000000000000000000000000000000000000..d372b989be966007e5fccac5f54fe341457e598b GIT binary patch literal 441 zcmV;q0Y?6bP)_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?zvW;$NS#fE(5J*QH>;TO# zqj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~aG}z~@!Q2dSmt873PQXLU zg+O|T!QM`p^A|K=@Suc&?b@)04> jC;!H^NCF;OJ`4N>xriuwM360I00000NkvXXu0mjf67avU literal 0 HcmV?d00001 diff --git a/src/loading-scene.ts b/src/loading-scene.ts index d0818aa1e19..c3cb494d497 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -241,12 +241,15 @@ export class LoadingScene extends SceneBase { const lang = i18next.resolvedLanguage; if (lang !== "en") { if (Utils.verifyLang(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 availableLangs = ["en", "de", "it", "fr", "ja", "ko", "es", "pt-BR", "zh-CN"]; diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 8e7e5bc4060..4fac75932ae 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -162,7 +162,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.splicedIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); this.add(this.splicedIcon); - this.statusIndicator = this.scene.add.sprite(0, 0, "statuses"); + this.statusIndicator = this.scene.add.sprite(0, 0, `statuses_${i18next.resolvedLanguage}`); this.statusIndicator.setName("icon_status"); this.statusIndicator.setVisible(false); this.statusIndicator.setOrigin(0, 0); diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index a793dad6a73..b5c9e76bf8c 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1272,7 +1272,7 @@ class PartySlot extends Phaser.GameObjects.Container { } if (this.pokemon.status) { - const statusIndicator = this.scene.add.sprite(0, 0, "statuses"); + const statusIndicator = this.scene.add.sprite(0, 0, `statuses_${i18next.resolvedLanguage}`); statusIndicator.setFrame(StatusEffect[this.pokemon.status?.effect].toLowerCase()); statusIndicator.setOrigin(0, 0); statusIndicator.setPositionRelative(slotLevelLabel, this.slotIndex >= battlerCount ? 43 : 55, 0); diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 8ae72f08edd..d3796a096b9 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -214,7 +214,7 @@ export default class SummaryUiHandler extends UiHandler { this.statusContainer.add(statusLabel); - this.status = this.scene.add.sprite(91, 4, "statuses"); + this.status = this.scene.add.sprite(91, 4, `statuses_${i18next.resolvedLanguage}`); this.status.setOrigin(0.5, 0); this.statusContainer.add(this.status); From 128df1b6d2902e72aabc35f12c81ddf33f36d096 Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:19:34 +0200 Subject: [PATCH 19/23] [QoL] [ui] Make tutorials darken background (#4283) * [ui] add prompt icon to the message boxes that don't have it * [ui] add background overlay during tutorials * add missing doc * Improve documentation based on suggestions Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/overrides.ts | 2 + src/tutorial.ts | 105 ++++++++++++++++++++++------ src/ui/awaitable-ui-handler.ts | 18 +++++ src/ui/battle-message-ui-handler.ts | 7 +- src/ui/egg-gacha-ui-handler.ts | 4 +- src/ui/evolution-scene-handler.ts | 7 +- src/ui/menu-ui-handler.ts | 6 ++ src/ui/message-ui-handler.ts | 19 ++++- src/ui/starter-select-ui-handler.ts | 7 ++ 9 files changed, 140 insertions(+), 35 deletions(-) diff --git a/src/overrides.ts b/src/overrides.ts index 6b550d152c2..ec0577ceb3d 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -70,6 +70,8 @@ class DefaultOverrides { [PokeballType.MASTER_BALL]: 0, }, }; + /** Set to `true` to show all tutorials */ + readonly BYPASS_TUTORIAL_SKIP: boolean = false; // ---------------- // PLAYER OVERRIDES diff --git a/src/tutorial.ts b/src/tutorial.ts index c4482839779..18d8291d227 100644 --- a/src/tutorial.ts +++ b/src/tutorial.ts @@ -1,7 +1,9 @@ import BattleScene from "./battle-scene"; import AwaitableUiHandler from "./ui/awaitable-ui-handler"; +import UiHandler from "./ui/ui-handler"; import { Mode } from "./ui/ui"; import i18next from "i18next"; +import Overrides from "#app/overrides"; export enum Tutorial { Intro = "INTRO", @@ -39,7 +41,7 @@ const tutorialHandlers = { scene.ui.showText(i18next.t("tutorial:starterSelect"), null, () => scene.ui.showText("", null, () => resolve()), null, true); }); }, - [Tutorial.Pokerus]: (scene: BattleScene) => { + [Tutorial.Pokerus]: (scene: BattleScene) => { return new Promise(resolve => { scene.ui.showText(i18next.t("tutorial:pokerus"), null, () => scene.ui.showText("", null, () => resolve()), null, true); }); @@ -63,26 +65,87 @@ const tutorialHandlers = { }, }; -export function handleTutorial(scene: BattleScene, tutorial: Tutorial): Promise { - return new Promise(resolve => { - if (!scene.enableTutorials) { - return resolve(false); - } +/** + * Run through the specified tutorial if it hasn't been seen before and mark it as seen once done + * This will show a tutorial overlay if defined in the current {@linkcode AwaitableUiHandler} + * The main menu will also get disabled while the tutorial is running + * @param scene the current {@linkcode BattleScene} + * @param tutorial the {@linkcode Tutorial} to play + * @returns a promise with result `true` if the tutorial was run and finished, `false` otherwise + */ +export async function handleTutorial(scene: BattleScene, tutorial: Tutorial): Promise { + if (!scene.enableTutorials && !Overrides.BYPASS_TUTORIAL_SKIP) { + return false; + } - if (scene.gameData.getTutorialFlags()[tutorial]) { - return resolve(false); - } + if (scene.gameData.getTutorialFlags()[tutorial] && !Overrides.BYPASS_TUTORIAL_SKIP) { + return false; + } - const handler = scene.ui.getHandler(); - if (handler instanceof AwaitableUiHandler) { - handler.tutorialActive = true; - } - tutorialHandlers[tutorial](scene).then(() => { - scene.gameData.saveTutorialFlag(tutorial, true); - if (handler instanceof AwaitableUiHandler) { - handler.tutorialActive = false; - } - resolve(true); - }); - }); + const handler = scene.ui.getHandler(); + const isMenuDisabled = scene.disableMenu; + + // starting tutorial, disable menu + scene.disableMenu = true; + if (handler instanceof AwaitableUiHandler) { + handler.tutorialActive = true; + } + + await showTutorialOverlay(scene, handler); + await tutorialHandlers[tutorial](scene); + await hideTutorialOverlay(scene, handler); + + // tutorial finished and overlay gone, re-enable menu, save tutorial as seen + scene.disableMenu = isMenuDisabled; + scene.gameData.saveTutorialFlag(tutorial, true); + if (handler instanceof AwaitableUiHandler) { + handler.tutorialActive = false; + } + + return true; } + +/** + * Show the tutorial overlay if there is one + * @param scene the current BattleScene + * @param handler the current UiHandler + * @returns `true` once the overlay has finished appearing, or if there is no overlay + */ +async function showTutorialOverlay(scene: BattleScene, handler: UiHandler) { + if (handler instanceof AwaitableUiHandler && handler.tutorialOverlay) { + scene.tweens.add({ + targets: handler.tutorialOverlay, + alpha: 0.5, + duration: 750, + ease: "Sine.easeOut", + onComplete: () => { + return true; + } + }); + } else { + return true; + } +} + +/** + * Hide the tutorial overlay if there is one + * @param scene the current BattleScene + * @param handler the current UiHandler + * @returns `true` once the overlay has finished disappearing, or if there is no overlay + */ +async function hideTutorialOverlay(scene: BattleScene, handler: UiHandler) { + if (handler instanceof AwaitableUiHandler && handler.tutorialOverlay) { + scene.tweens.add({ + targets: handler.tutorialOverlay, + alpha: 0, + duration: 500, + ease: "Sine.easeOut", + onComplete: () => { + return true; + } + }); + } else { + return true; + } +} + diff --git a/src/ui/awaitable-ui-handler.ts b/src/ui/awaitable-ui-handler.ts index 2052c6e2ade..c6dc717aa3a 100644 --- a/src/ui/awaitable-ui-handler.ts +++ b/src/ui/awaitable-ui-handler.ts @@ -7,6 +7,7 @@ export default abstract class AwaitableUiHandler extends UiHandler { protected awaitingActionInput: boolean; protected onActionInput: Function | null; public tutorialActive: boolean = false; + public tutorialOverlay: Phaser.GameObjects.Rectangle; constructor(scene: BattleScene, mode: Mode | null = null) { super(scene, mode); @@ -24,4 +25,21 @@ export default abstract class AwaitableUiHandler extends UiHandler { return false; } + + /** + * Create a semi transparent overlay that will get shown during tutorials + * @param container the container to add the overlay to + */ + initTutorialOverlay(container: Phaser.GameObjects.Container) { + if (!this.tutorialOverlay) { + this.tutorialOverlay = new Phaser.GameObjects.Rectangle(this.scene, -1, -1, this.scene.scaledCanvas.width, this.scene.scaledCanvas.height, 0x070707); + this.tutorialOverlay.setName("tutorial-overlay"); + this.tutorialOverlay.setOrigin(0, 0); + this.tutorialOverlay.setAlpha(0); + } + + if (container) { + container.add(this.tutorialOverlay); + } + } } diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 9a694d50b29..c27c6974192 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -83,12 +83,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler { this.nameBoxContainer.add(this.nameText); messageContainer.add(this.nameBoxContainer); - const prompt = this.scene.add.sprite(0, 0, "prompt"); - prompt.setVisible(false); - prompt.setOrigin(0, 0); - messageContainer.add(prompt); - - this.prompt = prompt; + this.initPromptSprite(messageContainer); const levelUpStatsContainer = this.scene.add.container(0, 0); levelUpStatsContainer.setVisible(false); diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 9497dfe58c6..b109eda5370 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -287,7 +287,6 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.eggGachaContainer.add(this.eggGachaSummaryContainer); const gachaMessageBoxContainer = this.scene.add.container(0, 148); - this.eggGachaContainer.add(gachaMessageBoxContainer); const gachaMessageBox = addWindow(this.scene, 0, 0, 320, 32); gachaMessageBox.setOrigin(0, 0); @@ -301,8 +300,11 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.message = gachaMessageText; + this.initTutorialOverlay(this.eggGachaContainer); this.eggGachaContainer.add(gachaMessageBoxContainer); + this.initPromptSprite(gachaMessageBoxContainer); + this.setCursor(0); } diff --git a/src/ui/evolution-scene-handler.ts b/src/ui/evolution-scene-handler.ts index ffbd06afde3..76d148d083e 100644 --- a/src/ui/evolution-scene-handler.ts +++ b/src/ui/evolution-scene-handler.ts @@ -45,12 +45,7 @@ export default class EvolutionSceneHandler extends MessageUiHandler { this.message = message; - const prompt = this.scene.add.sprite(0, 0, "prompt"); - prompt.setVisible(false); - prompt.setOrigin(0, 0); - this.messageContainer.add(prompt); - - this.prompt = prompt; + this.initPromptSprite(this.messageContainer); } show(_args: any[]): boolean { diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index b8c3cfd1364..0af527e518f 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -157,6 +157,9 @@ export default class MenuUiHandler extends MessageUiHandler { menuMessageText.setOrigin(0, 0); this.menuMessageBoxContainer.add(menuMessageText); + this.initTutorialOverlay(this.menuContainer); + this.initPromptSprite(this.menuMessageBoxContainer); + this.message = menuMessageText; // By default we use the general purpose message window @@ -433,6 +436,9 @@ export default class MenuUiHandler extends MessageUiHandler { this.scene.playSound("ui/menu_open"); + // Make sure the tutorial overlay sits above everything, but below the message box + this.menuContainer.bringToTop(this.tutorialOverlay); + this.menuContainer.bringToTop(this.menuMessageBoxContainer); handleTutorial(this.scene, Tutorial.Menu); this.bgmBar.toggleBgmBar(true); diff --git a/src/ui/message-ui-handler.ts b/src/ui/message-ui-handler.ts index 93e00cb6b70..54965a590fc 100644 --- a/src/ui/message-ui-handler.ts +++ b/src/ui/message-ui-handler.ts @@ -17,6 +17,23 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { this.pendingPrompt = false; } + /** + * Add the sprite to be displayed at the end of messages with prompts + * @param container the container to add the sprite to + */ + initPromptSprite(container: Phaser.GameObjects.Container) { + if (!this.prompt) { + const promptSprite = this.scene.add.sprite(0, 0, "prompt"); + promptSprite.setVisible(false); + promptSprite.setOrigin(0, 0); + this.prompt = promptSprite; + } + + if (container) { + container.add(this.prompt); + } + } + showText(text: string, delay?: integer | null, callback?: Function | null, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null) { this.showTextInternal(text, delay, callback, callbackDelay, prompt, promptDelay); } @@ -180,7 +197,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { const lastLineWidth = lastLineTest.displayWidth; lastLineTest.destroy(); if (this.prompt) { - this.prompt.setPosition(lastLineWidth + 2, (textLinesCount - 1) * 18 + 2); + this.prompt.setPosition(this.message.x + lastLineWidth + 2, this.message.y + (textLinesCount - 1) * 18 + 2); this.prompt.play("prompt"); } this.pendingPrompt = false; diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 308614887e9..0e101d30ce7 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -894,6 +894,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.message.setOrigin(0, 0); this.starterSelectMessageBoxContainer.add(this.message); + // arrow icon for the message box + this.initPromptSprite(this.starterSelectMessageBoxContainer); + this.statsContainer = new StatsContainer(this.scene, 6, 16); this.scene.add.existing(this.statsContainer); @@ -911,7 +914,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { y: this.scene.game.canvas.height / 6 - MoveInfoOverlay.getHeight(overlayScale) - 29, }); this.starterSelectContainer.add(this.moveInfoOverlay); + + // Filter bar sits above everything, except the tutorial overlay and message box this.starterSelectContainer.bringToTop(this.filterBarContainer); + this.initTutorialOverlay(this.starterSelectContainer); + this.starterSelectContainer.bringToTop(this.starterSelectMessageBoxContainer); this.scene.eventTarget.addEventListener(BattleSceneEventType.CANDY_UPGRADE_NOTIFICATION_CHANGED, (e) => this.onCandyUpgradeDisplayChanged(e)); From 009fd3fc5c3e180841017c60bcbe51f4ea456617 Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:30:42 -0400 Subject: [PATCH 20/23] [Bug] Fix reloads erasing weather on first wave of biome (#4078) * [Bug] Fix reloads erasing weather on first wave of biome * Minor revisions * Minor revisions 2 * Update test --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/phases/encounter-phase.ts | 22 +++++++++++----- src/phases/new-biome-encounter-phase.ts | 9 +++++-- src/phases/next-encounter-phase.ts | 6 +++++ src/test/battle/battle.test.ts | 28 ++++++++++++-------- src/test/reload.test.ts | 35 ++++++++++++++++++++++--- src/test/utils/gameManager.ts | 11 +++----- src/test/utils/helpers/reloadHelper.ts | 19 ++++++++++++-- 7 files changed, 98 insertions(+), 32 deletions(-) diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 1d9567ee9b3..012738df9ab 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -216,8 +216,8 @@ export class EncounterPhase extends BattlePhase { this.scene.ui.setMode(Mode.MESSAGE).then(() => { if (!this.loaded) { - //@ts-ignore - this.scene.gameData.saveAll(this.scene, true, battle.waveIndex % 10 === 1 || this.scene.lastSavePlayTime >= 300).then(success => { // TODO: get rid of ts-ignore + this.trySetWeatherIfNewBiome(); // Set weather before session gets saved + this.scene.gameData.saveAll(this.scene, true, battle.waveIndex % 10 === 1 || (this.scene.lastSavePlayTime ?? 0) >= 300).then(success => { this.scene.disableMenu = false; if (!success) { return this.scene.reset(true); @@ -250,10 +250,6 @@ export class EncounterPhase extends BattlePhase { } } - if (!this.loaded) { - this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false); - } - const enemyField = this.scene.getEnemyField(); this.scene.tweens.add({ targets: [this.scene.arenaEnemy, this.scene.currentBattle.trainer, enemyField, this.scene.arenaPlayer, this.scene.trainer].flat(), @@ -519,4 +515,18 @@ export class EncounterPhase extends BattlePhase { } return false; } + + /** + * Set biome weather if and only if this encounter is the start of a new biome. + * + * By using function overrides, this should happen if and only if this phase + * is exactly a NewBiomeEncounterPhase or an EncounterPhase (to account for + * Wave 1 of a Daily Run), but NOT NextEncounterPhase (which starts the next + * wave in the same biome). + */ + trySetWeatherIfNewBiome(): void { + if (!this.loaded) { + this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false); + } + } } diff --git a/src/phases/new-biome-encounter-phase.ts b/src/phases/new-biome-encounter-phase.ts index 48d928402de..2a526a22ee2 100644 --- a/src/phases/new-biome-encounter-phase.ts +++ b/src/phases/new-biome-encounter-phase.ts @@ -17,8 +17,6 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase { } } - this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false); - for (const pokemon of this.scene.getParty().filter(p => p.isOnField())) { applyAbAttrs(PostBiomeChangeAbAttr, pokemon, null); } @@ -41,4 +39,11 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase { } }); } + + /** + * Set biome weather. + */ + trySetWeatherIfNewBiome(): void { + this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false); + } } diff --git a/src/phases/next-encounter-phase.ts b/src/phases/next-encounter-phase.ts index 7de2472dd35..d63823e4167 100644 --- a/src/phases/next-encounter-phase.ts +++ b/src/phases/next-encounter-phase.ts @@ -67,4 +67,10 @@ export class NextEncounterPhase extends EncounterPhase { } }); } + + /** + * Do nothing (since this is simply the next wave in the same biome). + */ + trySetWeatherIfNewBiome(): void { + } } diff --git a/src/test/battle/battle.test.ts b/src/test/battle/battle.test.ts index 6e15bbd99d9..554692374d2 100644 --- a/src/test/battle/battle.test.ts +++ b/src/test/battle/battle.test.ts @@ -24,7 +24,8 @@ import { Moves } from "#enums/moves"; import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { Biome } from "#app/enums/biome"; describe("Test Battle Phase", () => { let phaserGame: Phaser.Game; @@ -290,22 +291,27 @@ describe("Test Battle Phase", () => { expect(game.scene.currentBattle.turn).toBeGreaterThan(turn); }, 20000); - it("to next wave with pokemon killed, single", async () => { + it("does not set new weather if staying in same biome", async () => { const moveToUse = Moves.SPLASH; - game.override.battleType("single"); - game.override.starterSpecies(Species.MEWTWO); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.ability(Abilities.ZEN_MODE); - game.override.startingLevel(2000); - game.override.startingWave(3); - game.override.moveset([moveToUse]); + game.override + .battleType("single") + .starterSpecies(Species.MEWTWO) + .enemySpecies(Species.RATTATA) + .enemyAbility(Abilities.HYDRATION) + .ability(Abilities.ZEN_MODE) + .startingLevel(2000) + .startingWave(3) + .startingBiome(Biome.LAKE) + .moveset([moveToUse]); game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - await game.startBattle(); + await game.classicMode.startBattle(); const waveIndex = game.scene.currentBattle.waveIndex; game.move.select(moveToUse); + + vi.spyOn(game.scene.arena, "trySetWeather"); await game.doKillOpponents(); await game.toNextWave(); + expect(game.scene.arena.trySetWeather).not.toHaveBeenCalled(); expect(game.scene.currentBattle.waveIndex).toBeGreaterThan(waveIndex); }, 20000); diff --git a/src/test/reload.test.ts b/src/test/reload.test.ts index a96a525ca2d..7c4523dd9ef 100644 --- a/src/test/reload.test.ts +++ b/src/test/reload.test.ts @@ -38,16 +38,15 @@ describe("Reload", () => { it("should not have RNG inconsistencies after a biome switch", async () => { game.override .startingWave(10) - .startingBiome(Biome.CAVE) // Will lead to biomes with randomly generated weather .battleType("single") - .startingLevel(100) - .enemyLevel(1000) + .startingLevel(100) // Avoid levelling up + .enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents() .disableTrainerWaves() .moveset([Moves.KOWTOW_CLEAVE]) .enemyMoveset(Moves.SPLASH); await game.dailyMode.startBattle(); - // Transition from Daily Run Wave 10 to Wave 11 in order to trigger biome switch + // Transition from Wave 10 to Wave 11 in order to trigger biome switch game.move.select(Moves.KOWTOW_CLEAVE); await game.phaseInterceptor.to("DamagePhase"); await game.doKillOpponents(); @@ -63,6 +62,34 @@ describe("Reload", () => { expect(preReloadRngState).toBe(postReloadRngState); }, 20000); + it("should not have weather inconsistencies after a biome switch", async () => { + game.override + .startingWave(10) + .startingBiome(Biome.ICE_CAVE) // Will lead to Snowy Forest with randomly generated weather + .battleType("single") + .startingLevel(100) // Avoid levelling up + .enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents() + .disableTrainerWaves() + .moveset([Moves.KOWTOW_CLEAVE]) + .enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle(); // Apparently daily mode would override the biome + + // Transition from Wave 10 to Wave 11 in order to trigger biome switch + game.move.select(Moves.KOWTOW_CLEAVE); + await game.phaseInterceptor.to("DamagePhase"); + await game.doKillOpponents(); + await game.toNextWave(); + expect(game.phaseInterceptor.log).toContain("NewBiomeEncounterPhase"); + + const preReloadWeather = game.scene.arena.weather; + + await game.reload.reloadSession(); + + const postReloadWeather = game.scene.arena.weather; + + expect(postReloadWeather).toStrictEqual(preReloadWeather); + }, 20000); + it("should not have RNG inconsistencies at a Daily run wild Pokemon fight", async () => { await game.dailyMode.startBattle(); diff --git a/src/test/utils/gameManager.ts b/src/test/utils/gameManager.ts index 452956ab466..36423c5e18f 100644 --- a/src/test/utils/gameManager.ts +++ b/src/test/utils/gameManager.ts @@ -31,7 +31,6 @@ import TargetSelectUiHandler from "#app/ui/target-select-ui-handler"; import { Mode } from "#app/ui/ui"; import { Button } from "#enums/buttons"; import { ExpNotification } from "#enums/exp-notification"; -import { GameDataType } from "#enums/game-data-type"; import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; import { generateStarter, waitUntil } from "#test/utils/gameManagerUtils"; @@ -371,13 +370,11 @@ export default class GameManager { * @returns A promise that resolves with the exported save data. */ exportSaveToTest(): Promise { + const saveKey = "x0i2O7WRiANTqPmZ"; return new Promise(async (resolve) => { - await this.scene.gameData.saveAll(this.scene, true, true, true, true); - this.scene.reset(true); - await waitUntil(() => this.scene.ui?.getMode() === Mode.TITLE); - await this.scene.gameData.tryExportData(GameDataType.SESSION, 0); - await waitUntil(() => localStorage.hasOwnProperty("toExport")); - return resolve(localStorage.getItem("toExport")!); // TODO: is this bang correct?; + const sessionSaveData = this.scene.gameData.getSessionSaveData(this.scene); + const encryptedSaveData = AES.encrypt(JSON.stringify(sessionSaveData), saveKey).toString(); + resolve(encryptedSaveData); }); } diff --git a/src/test/utils/helpers/reloadHelper.ts b/src/test/utils/helpers/reloadHelper.ts index c15347b08c9..e0e538120cc 100644 --- a/src/test/utils/helpers/reloadHelper.ts +++ b/src/test/utils/helpers/reloadHelper.ts @@ -5,11 +5,27 @@ import { vi } from "vitest"; import { BattleStyle } from "#app/enums/battle-style"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; +import { SessionSaveData } from "#app/system/game-data"; +import GameManager from "../gameManager"; /** * Helper to allow reloading sessions in unit tests. */ export class ReloadHelper extends GameManagerHelper { + sessionData: SessionSaveData; + + constructor(game: GameManager) { + super(game); + + // Whenever the game saves the session, save it to the reloadHelper instead + vi.spyOn(game.scene.gameData, "saveAll").mockImplementation((scene) => { + return new Promise((resolve, reject) => { + this.sessionData = scene.gameData.getSessionSaveData(scene); + resolve(true); + }); + }); + } + /** * Simulate reloading the session from the title screen, until reaching the * beginning of the first turn (equivalent to running `startBattle()`) for @@ -17,7 +33,6 @@ export class ReloadHelper extends GameManagerHelper { */ async reloadSession() : Promise { const scene = this.game.scene; - const sessionData = scene.gameData.getSessionSaveData(scene); const titlePhase = new TitlePhase(scene); scene.clearPhaseQueue(); @@ -25,7 +40,7 @@ export class ReloadHelper extends GameManagerHelper { // Set the last saved session to the desired session data vi.spyOn(scene.gameData, "getSession").mockReturnValue( new Promise((resolve, reject) => { - resolve(sessionData); + resolve(this.sessionData); }) ); scene.unshiftPhase(titlePhase); From 3ed2c74f38e808c271f9c64d35e323ae0fb52232 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Mon, 16 Sep 2024 18:44:03 -0400 Subject: [PATCH 21/23] [Enhancement] Add Met Wave to Pokemon Data (#4271) Co-authored-by: Lugiad Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: Chapybara-jp --- src/field/pokemon.ts | 6 ++++++ src/locales/de/pokemon-summary.json | 2 +- src/locales/en/pokemon-summary.json | 2 +- src/locales/es/pokemon-summary.json | 4 ++-- src/locales/fr/pokemon-summary.json | 2 +- src/locales/it/pokemon-summary.json | 4 ++-- src/locales/ja/pokemon-summary.json | 2 +- src/locales/ko/pokemon-summary.json | 2 +- src/locales/pt_BR/pokemon-summary.json | 2 +- src/locales/zh_TW/pokemon-summary.json | 2 +- src/system/pokemon-data.ts | 7 ++++--- src/ui/summary-ui-handler.ts | 1 + 12 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 9c8c1e6ce46..ed36bcfe4b3 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -95,6 +95,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public metLevel: integer; public metBiome: Biome | -1; public metSpecies: Species; + public metWave: number; public luck: integer; public pauseEvolutions: boolean; public pokerus: boolean; @@ -194,6 +195,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.luck = dataSource.luck; this.metBiome = dataSource.metBiome; this.metSpecies = dataSource.metSpecies ?? (this.metBiome !== -1 ? this.species.speciesId : this.species.getRootSpeciesId(true)); + this.metWave = dataSource.metWave ?? (this.metBiome === -1 ? -1 : 0); this.pauseEvolutions = dataSource.pauseEvolutions; this.pokerus = !!dataSource.pokerus; this.evoCounter = dataSource.evoCounter ?? 0; @@ -240,6 +242,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.metLevel = level; this.metBiome = scene.currentBattle ? scene.arena.biomeType : -1; this.metSpecies = species.speciesId; + this.metWave = scene.currentBattle ? scene.currentBattle.waveIndex : -1; this.pokerus = false; if (level > 1) { @@ -4081,6 +4084,7 @@ export class PlayerPokemon extends Pokemon { newPokemon.metLevel = this.metLevel; newPokemon.metBiome = this.metBiome; newPokemon.metSpecies = this.metSpecies; + newPokemon.metWave = this.metWave; newPokemon.fusionSpecies = this.fusionSpecies; newPokemon.fusionFormIndex = this.fusionFormIndex; newPokemon.fusionAbilityIndex = this.fusionAbilityIndex; @@ -4088,6 +4092,7 @@ export class PlayerPokemon extends Pokemon { newPokemon.fusionVariant = this.fusionVariant; newPokemon.fusionGender = this.fusionGender; newPokemon.fusionLuck = this.fusionLuck; + newPokemon.usedTMs = this.usedTMs; this.scene.getParty().push(newPokemon); newPokemon.evolve((!isFusion ? newEvolution : new FusionSpeciesFormEvolution(this.id, newEvolution)), evoSpecies); @@ -4779,6 +4784,7 @@ export class EnemyPokemon extends Pokemon { this.pokeball = pokeballType; this.metLevel = this.level; this.metBiome = this.scene.arena.biomeType; + this.metWave = this.scene.currentBattle.waveIndex; this.metSpecies = this.species.speciesId; const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this); diff --git a/src/locales/de/pokemon-summary.json b/src/locales/de/pokemon-summary.json index 1790c6878b9..3104fc10151 100644 --- a/src/locales/de/pokemon-summary.json +++ b/src/locales/de/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "Abbrechen", "memoString": "Wesen: {{natureFragment}}\n{{metFragment}}", "metFragment": { - "normal": "Herkunft: {{biome}}\nMit Lv. {{level}} erhalten.", + "normal": "Herkunft: {{biome}} - Welle {{wave}}\nMit Lv. {{level}} erhalten.", "apparently": "Herkunft: {{biome}}\nOffenbar mit Lv. {{level}} erhalten." }, "natureFragment": { diff --git a/src/locales/en/pokemon-summary.json b/src/locales/en/pokemon-summary.json index 80e0cdab010..458fad0efe0 100644 --- a/src/locales/en/pokemon-summary.json +++ b/src/locales/en/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "Cancel", "memoString": "{{natureFragment}} nature,\n{{metFragment}}", "metFragment": { - "normal": "met at Lv{{level}},\n{{biome}}.", + "normal": "met at Lv{{level}},\n{{biome}}, Wave {{wave}}.", "apparently": "apparently met at Lv{{level}},\n{{biome}}." }, "natureFragment": { diff --git a/src/locales/es/pokemon-summary.json b/src/locales/es/pokemon-summary.json index e47335c8394..fe33c9418cc 100644 --- a/src/locales/es/pokemon-summary.json +++ b/src/locales/es/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "Salir", "memoString": "Naturaleza {{natureFragment}},\n{{metFragment}}", "metFragment": { - "normal": "encontrado al Nv. {{level}},\n{{biome}}.", + "normal": "encontrado al Nv. {{level}},\n{{biome}}, Oleada {{wave}}.", "apparently": "aparentemente encontrado al Nv. {{level}},\n{{biome}}." } -} \ No newline at end of file +} diff --git a/src/locales/fr/pokemon-summary.json b/src/locales/fr/pokemon-summary.json index 01e712c8468..a038b3a51f9 100644 --- a/src/locales/fr/pokemon-summary.json +++ b/src/locales/fr/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "Annuler", "memoString": "{{natureFragment}} de nature,\n{{metFragment}}", "metFragment": { - "normal": "rencontré au N.{{level}},\n{{biome}}.", + "normal": "rencontré au N.{{level}},\n{{biome}}, Vague {{wave}}.", "apparently": "apparemment rencontré au N.{{level}},\n{{biome}}." }, "natureFragment": { diff --git a/src/locales/it/pokemon-summary.json b/src/locales/it/pokemon-summary.json index f6c9290f783..81cd9a278b8 100644 --- a/src/locales/it/pokemon-summary.json +++ b/src/locales/it/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "Annulla", "memoString": "Natura {{natureFragment}},\n{{metFragment}}", "metFragment": { - "normal": "incontrato al Lv.{{level}},\n{{biome}}.", + "normal": "incontrato al Lv.{{level}},\n{{biome}}, Onda {{wave}}.", "apparently": "apparentemente incontrato al Lv.{{level}},\n{{biome}}." } -} \ No newline at end of file +} diff --git a/src/locales/ja/pokemon-summary.json b/src/locales/ja/pokemon-summary.json index cf35befe6fd..9465bcd346d 100644 --- a/src/locales/ja/pokemon-summary.json +++ b/src/locales/ja/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "キャンセル", "memoString": "{{natureFragment}}な性格。\n{{metFragment}}", "metFragment": { - "normal": "{{biome}}で\nLv.{{level}}の時に出会った。", + "normal": "ラウンド{{wave}}に{{biome}}で\nLv.{{level}}の時に出会った。", "apparently": "{{biome}}で\nLv.{{level}}の時に出会ったようだ。" }, "natureFragment": { diff --git a/src/locales/ko/pokemon-summary.json b/src/locales/ko/pokemon-summary.json index d9119623662..ca4b7a22b65 100644 --- a/src/locales/ko/pokemon-summary.json +++ b/src/locales/ko/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "그만둔다", "memoString": "{{natureFragment}}.\n{{metFragment}}", "metFragment": { - "normal": "{{biome}}에서\n레벨 {{level}}일 때 만났다.", + "normal": "{{biome}}에서 웨이브{{wave}},\n레벨 {{level}}일 때 만났다.", "apparently": "{{biome}}에서\n레벨 {{level}}일 때 만난 것 같다." }, "natureFragment": { diff --git a/src/locales/pt_BR/pokemon-summary.json b/src/locales/pt_BR/pokemon-summary.json index 4c427dbac4f..14b736a0cf2 100644 --- a/src/locales/pt_BR/pokemon-summary.json +++ b/src/locales/pt_BR/pokemon-summary.json @@ -11,7 +11,7 @@ "cancel": "Cancelar", "memoString": "Natureza {{natureFragment}},\n{{metFragment}}", "metFragment": { - "normal": "encontrado no Nv.{{level}},\n{{biome}}.", + "normal": "encontrado no Nv.{{level}},\n{{biome}}, Onda {{wave}}.", "apparently": "aparentemente encontrado no Nv.{{level}},\n{{biome}}." }, "natureFragment": { diff --git a/src/locales/zh_TW/pokemon-summary.json b/src/locales/zh_TW/pokemon-summary.json index ddbbea63a3a..331330f5bdd 100644 --- a/src/locales/zh_TW/pokemon-summary.json +++ b/src/locales/zh_TW/pokemon-summary.json @@ -12,7 +12,7 @@ "memoString": "{{natureFragment}} 性格,\n{{metFragment}}", "metFragment": { - "normal": "met at Lv{{level}},\n{{biome}}.", + "normal": "met at Lv{{level}},\n{{biome}}, Wave {{wave}}.", "apparently": "命中注定般地相遇于Lv.{{level}},\n{{biome}}。" }, "natureFragment": { diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 5e6c0d93c8c..0fd90e448a1 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -38,8 +38,9 @@ export default class PokemonData { public status: Status | null; public friendship: integer; public metLevel: integer; - public metBiome: Biome | -1; + public metBiome: Biome | -1; // -1 for starters public metSpecies: Species; + public metWave: number; // 0 for unknown (previous saves), -1 for starters public luck: integer; public pauseEvolutions: boolean; public pokerus: boolean; @@ -90,14 +91,14 @@ export default class PokemonData { this.metLevel = source.metLevel || 5; this.metBiome = source.metBiome !== undefined ? source.metBiome : -1; this.metSpecies = source.metSpecies; + this.metWave = source.metWave ?? (this.metBiome === -1 ? -1 : 0); this.luck = source.luck !== undefined ? source.luck : (source.shiny ? (source.variant + 1) : 0); if (!forHistory) { this.pauseEvolutions = !!source.pauseEvolutions; + this.evoCounter = source.evoCounter ?? 0; } this.pokerus = !!source.pokerus; - this.evoCounter = source.evoCounter ?? 0; - this.fusionSpecies = sourcePokemon ? sourcePokemon.fusionSpecies?.speciesId : source.fusionSpecies; this.fusionFormIndex = source.fusionFormIndex; this.fusionAbilityIndex = source.fusionAbilityIndex; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index d3796a096b9..0892bf8ab1b 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -824,6 +824,7 @@ export default class SummaryUiHandler extends UiHandler { metFragment: i18next.t(`pokemonSummary:metFragment.${this.pokemon?.metBiome === -1? "apparently": "normal"}`, { biome: `${getBBCodeFrag(getBiomeName(this.pokemon?.metBiome!), TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct? level: `${getBBCodeFrag(this.pokemon?.metLevel.toString()!, TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct? + wave: `${getBBCodeFrag((this.pokemon?.metWave ? this.pokemon.metWave.toString()! : i18next.t("pokemonSummary:unknownTrainer")), TextStyle.SUMMARY_RED)}${closeFragment}`, }), natureFragment: i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature }) }); From 18dc9d216ce0945fa3886094037b282f1a17f981 Mon Sep 17 00:00:00 2001 From: cam Date: Tue, 17 Sep 2024 10:58:49 -0400 Subject: [PATCH 22/23] [Bug][Move] Clanging Scales animation on incorrect sprite (#4290) Set focus to 1 on move's target sprite for every frame. --- public/battle-anims/clanging-scales.json | 52 ++++++++++++------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/public/battle-anims/clanging-scales.json b/public/battle-anims/clanging-scales.json index de1a3d5248f..e2135a1a9b4 100644 --- a/public/battle-anims/clanging-scales.json +++ b/public/battle-anims/clanging-scales.json @@ -27,7 +27,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 0, @@ -115,7 +115,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 0, @@ -215,7 +215,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 0, @@ -315,7 +315,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 0, @@ -414,7 +414,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 0, @@ -538,7 +538,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 23, @@ -685,7 +685,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": -19, @@ -784,7 +784,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 26, @@ -883,7 +883,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 23.5, @@ -994,7 +994,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 9, @@ -1069,7 +1069,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": -18.5, @@ -1157,7 +1157,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 37.5, @@ -1221,7 +1221,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 0, @@ -1284,7 +1284,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 0, @@ -1348,7 +1348,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 0, @@ -1448,7 +1448,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 0, @@ -1548,7 +1548,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 0, @@ -1647,7 +1647,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 0, @@ -1759,7 +1759,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": -25.5, @@ -1870,7 +1870,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 12, @@ -1957,7 +1957,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": -27, @@ -2044,7 +2044,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": -16, @@ -2143,7 +2143,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": -26.5, @@ -2230,7 +2230,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 23, @@ -2306,7 +2306,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": 24, @@ -2346,7 +2346,7 @@ "opacity": 255, "locked": true, "priority": 1, - "focus": 2 + "focus": 1 }, { "x": -27, From 1fb5389765b7f2b6cb4742201439c9e44d95f508 Mon Sep 17 00:00:00 2001 From: Dakurei Date: Tue, 17 Sep 2024 18:55:50 +0200 Subject: [PATCH 23/23] Auto center the window vertically (#2686) + When the game is played in landscape format or in portrait format when it's not a touchscreen --- index.css | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/index.css b/index.css index 1274f2fcead..2ec106516d2 100644 --- a/index.css +++ b/index.css @@ -26,10 +26,36 @@ body { #app { display: flex; justify-content: center; + align-items: center; } #app > div:first-child { - transform-origin: top !important; + transform-origin: center !important; +} + +/* + Supports automatic vertical centering as suggested in PR#1114, but only via CSS + + Condition factorized to deduce CSS rules: + true if (isLandscape && !isMobile() && !hasTouchscreen() || (hasTouchscreen() && !isTouchControlsEnabled)) +*/ + +/* isLandscape && !isMobile() && !hasTouchscreen() */ +@media (orientation: landscape) and (pointer: fine) { + #app { + align-items: center; + } +} + +@media (pointer: coarse) { + /* hasTouchscreen() && !isTouchControlsEnabled */ + body:has(> #touchControls[class=visible]) #app { + align-items: start; + } + + body:has(> #touchControls[class=visible]) #app > div:first-child { + transform-origin: top !important; + } } #layout:fullscreen #dpad, #layout:fullscreen {