From a54cd953a6d12d04522a0b1ae901d15d1c3e5478 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Mon, 30 Jun 2025 05:19:59 +0100 Subject: [PATCH 1/7] [Bug] Fix Shields Down blocking status in Core Form, unnecessarily resetting before battle (#6044) * Fix Minior Form Change issues * Fix bug * Update Power Construct conditionals to be less janky * Fix syntax error * Fix ability.ts --- src/data/abilities/ability.ts | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 5e7e1c2992a..0aaf5b4b124 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -7263,11 +7263,14 @@ export function initAbilities() { new Ability(AbilityId.MERCILESS, 7) .attr(ConditionalCritAbAttr, (_user, target, _move) => target?.status?.effect === StatusEffect.TOXIC || target?.status?.effect === StatusEffect.POISON), new Ability(AbilityId.SHIELDS_DOWN, 7, -1) - .attr(PostBattleInitFormChangeAbAttr, () => 0) + // Change into Meteor Form on switch-in or turn end if HP >= 50%, + // or Core Form if HP <= 50%. + .attr(PostBattleInitFormChangeAbAttr, p => p.formIndex % 7) .attr(PostSummonFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0)) .attr(PostTurnFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0)) - .conditionalAttr(p => p.formIndex !== 7, StatusEffectImmunityAbAttr) - .conditionalAttr(p => p.formIndex !== 7, BattlerTagImmunityAbAttr, BattlerTagType.DROWSY) + // All variants of Meteor Form are immune to status effects & Yawn + .conditionalAttr(p => p.formIndex < 7, StatusEffectImmunityAbAttr) + .conditionalAttr(p => p.formIndex < 7, BattlerTagImmunityAbAttr, BattlerTagType.DROWSY) .attr(NoFusionAbilityAbAttr) .attr(NoTransformAbilityAbAttr) .uncopiable() @@ -7333,12 +7336,11 @@ export function initAbilities() { .unsuppressable() .bypassFaint(), new Ability(AbilityId.POWER_CONSTRUCT, 7) - .conditionalAttr(pokemon => pokemon.formIndex === 2 || pokemon.formIndex === 4, PostBattleInitFormChangeAbAttr, () => 2) - .conditionalAttr(pokemon => pokemon.formIndex === 3 || pokemon.formIndex === 5, PostBattleInitFormChangeAbAttr, () => 3) - .conditionalAttr(pokemon => pokemon.formIndex === 2 || pokemon.formIndex === 4, PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "complete" ? 4 : 2) - .conditionalAttr(pokemon => pokemon.formIndex === 2 || pokemon.formIndex === 4, PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "complete" ? 4 : 2) - .conditionalAttr(pokemon => pokemon.formIndex === 3 || pokemon.formIndex === 5, PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "10-complete" ? 5 : 3) - .conditionalAttr(pokemon => pokemon.formIndex === 3 || pokemon.formIndex === 5, PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "10-complete" ? 5 : 3) + // Change to 10% complete or 50% complete on switchout/turn end if at <50% HP; + // revert to 10% PC or 50% PC before a new battle starts + .conditionalAttr(p => p.formIndex === 4 || p.formIndex === 5, PostBattleInitFormChangeAbAttr, p => p.formIndex - 2) + .conditionalAttr(p => p.getHpRatio() <= 0.5 && (p.formIndex === 2 || p.formIndex === 3), PostSummonFormChangeAbAttr, p => p.formIndex + 2) + .conditionalAttr(p => p.getHpRatio() <= 0.5 && (p.formIndex === 2 || p.formIndex === 3), PostTurnFormChangeAbAttr, p => p.formIndex + 2) .attr(NoFusionAbilityAbAttr) .uncopiable() .unreplaceable() From 12aaa31454896f56342ee26a9b2d163fd6e8a81f Mon Sep 17 00:00:00 2001 From: Jonathan Bankston <122949033+jnotsknab@users.noreply.github.com> Date: Wed, 2 Jul 2025 04:57:08 -0500 Subject: [PATCH 2/7] [Refactor] Minor run phase rework (#6017) * Minor Attempt run phase rework to abstract logic to whole team * Decoupled individual pokemon from run phase logic * Formatting * Completed run phase refactor implementation and updated tests * Updated run phase to extend field phase instead of pokemon phase * Removed unused phase decleration in tests * Removed unecessary arg in turn start phase as refactor no longer needs it * Cleaned up getPlayerField * Made adjustments based on reviewer suggestions * Reintrocuded calculateEscapeChance into AttemptRunPhase and removed run utils * Resolve merge issues * Minor TSDoc improvement to `BattleScene#getPlayerField` * Moved early override check to top of calculateEscapeChance --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 8 ++- src/battle.ts | 6 ++ src/overrides.ts | 8 ++- src/phases/attempt-run-phase.ts | 80 ++++++++++++++----------- src/phases/turn-start-phase.ts | 24 +------- test/abilities/desolate-land.test.ts | 2 + test/abilities/honey_gather.test.ts | 3 + test/abilities/neutralizing_gas.test.ts | 2 + test/abilities/speed_boost.test.ts | 10 +++- test/escape-calculations.test.ts | 23 +++---- 10 files changed, 86 insertions(+), 80 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 59c0e28422b..57ca66e0dc4 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -797,12 +797,14 @@ export default class BattleScene extends SceneBase { // TODO: Add `undefined` to return type /** * Returns an array of PlayerPokemon of length 1 or 2 depending on if in a double battle or not. - * Does not actually check if the pokemon are on the field or not. + * @param active - (Default `false`) Whether to consider only {@linkcode Pokemon.isActive | active} on-field pokemon * @returns array of {@linkcode PlayerPokemon} */ - public getPlayerField(): PlayerPokemon[] { + public getPlayerField(active = false): PlayerPokemon[] { const party = this.getPlayerParty(); - return party.slice(0, Math.min(party.length, this.currentBattle?.double ? 2 : 1)); + return party + .slice(0, Math.min(party.length, this.currentBattle?.double ? 2 : 1)) + .filter(p => !active || p.isActive()); } public getEnemyParty(): EnemyPokemon[] { diff --git a/src/battle.ts b/src/battle.ts index ba4152227dd..878a539cecf 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -95,6 +95,12 @@ export default class Battle { /** If the current battle is a Mystery Encounter, this will always be defined */ public mysteryEncounter?: MysteryEncounter; + /** + * Tracker for whether the last run attempt failed. + * @defaultValue `false` + */ + public failedRunAway = false; + private rngCounter = 0; constructor(gameMode: GameMode, waveIndex: number, battleType: BattleType, trainer?: Trainer, double = false) { diff --git a/src/overrides.ts b/src/overrides.ts index 82462431fb0..ea50e9b088c 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -119,7 +119,13 @@ class DefaultOverrides { * or `false` to force it to never trigger. */ readonly CONFUSION_ACTIVATION_OVERRIDE: boolean | null = null; - + /** + * If non-null, will override random flee attempts to always or never succeed by forcing {@linkcode calculateEscapeChance} to return 100% or 0%. + * Set to `null` to disable. + * + * Is overridden if either player Pokemon has {@linkcode AbilityId.RUN_AWAY | Run Away}. + */ + readonly RUN_SUCCESS_OVERRIDE: boolean | null = null; // ---------------- // PLAYER OVERRIDES // ---------------- diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index ecd64380c31..3709374287a 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -1,34 +1,33 @@ import { applyAbAttrs } from "#app/data/abilities/apply-ab-attrs"; +import { globalScene } from "#app/global-scene"; +import Overrides from "#app/overrides"; +import { FieldPhase } from "#app/phases/field-phase"; +import { NumberHolder } from "#app/utils/common"; import { Stat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; -import type { PlayerPokemon, EnemyPokemon } from "#app/field/pokemon"; -import type Pokemon from "#app/field/pokemon"; import i18next from "i18next"; -import { NumberHolder } from "#app/utils/common"; -import { PokemonPhase } from "./pokemon-phase"; -import { globalScene } from "#app/global-scene"; -export class AttemptRunPhase extends PokemonPhase { +export class AttemptRunPhase extends FieldPhase { public readonly phaseName = "AttemptRunPhase"; - /** For testing purposes: this is to force the pokemon to fail and escape */ - public forceFailEscape = false; - start() { + public start() { super.start(); - const playerField = globalScene.getPlayerField(); + // Increment escape attempts count on entry + const currentAttempts = globalScene.currentBattle.escapeAttempts++; + + const activePlayerField = globalScene.getPlayerField(true); const enemyField = globalScene.getEnemyField(); - const playerPokemon = this.getPokemon(); + const escapeRoll = globalScene.randBattleSeedInt(100); + const escapeChance = new NumberHolder(this.calculateEscapeChance(currentAttempts)); - const escapeChance = new NumberHolder(0); + activePlayerField.forEach(pokemon => { + applyAbAttrs("RunSuccessAbAttr", { pokemon, chance: escapeChance }); + }); - this.attemptRunAway(playerField, enemyField, escapeChance); - - applyAbAttrs("RunSuccessAbAttr", { pokemon: playerPokemon, chance: escapeChance }); - - if (playerPokemon.randBattleSeedInt(100) < escapeChance.value && !this.forceFailEscape) { - enemyField.forEach(enemyPokemon => applyAbAttrs("PreLeaveFieldAbAttr", { pokemon: enemyPokemon })); + if (escapeRoll < escapeChance.value) { + enemyField.forEach(pokemon => applyAbAttrs("PreLeaveFieldAbAttr", { pokemon })); globalScene.playSound("se/flee"); globalScene.phaseManager.queueMessage(i18next.t("battle:runAwaySuccess"), null, true, 500); @@ -57,24 +56,35 @@ export class AttemptRunPhase extends PokemonPhase { globalScene.phaseManager.pushNew("NewBattlePhase"); } else { - playerPokemon.turnData.failedRunAway = true; + activePlayerField.forEach(p => { + p.turnData.failedRunAway = true; + }); + globalScene.phaseManager.queueMessage(i18next.t("battle:runAwayCannotEscape"), null, true, 500); } this.end(); } - attemptRunAway(playerField: PlayerPokemon[], enemyField: EnemyPokemon[], escapeChance: NumberHolder) { - /** Sum of the speed of all enemy pokemon on the field */ - const enemySpeed = enemyField.reduce( - (total: number, enemyPokemon: Pokemon) => total + enemyPokemon.getStat(Stat.SPD), - 0, - ); - /** Sum of the speed of all player pokemon on the field */ - const playerSpeed = playerField.reduce( - (total: number, playerPokemon: Pokemon) => total + playerPokemon.getStat(Stat.SPD), - 0, - ); + /** + * Calculate the chance for the player's team to successfully run away from battle. + * + * @param escapeAttempts - The number of prior failed escape attempts in the current battle + * @returns The final escape chance, as percentage out of 100. + */ + public calculateEscapeChance(escapeAttempts: number): number { + // Check for override, guaranteeing or forbidding random flee attempts as applicable. + if (Overrides.RUN_SUCCESS_OVERRIDE !== null) { + return Overrides.RUN_SUCCESS_OVERRIDE ? 100 : 0; + } + + const enemyField = globalScene.getEnemyField(); + const activePlayerField = globalScene.getPlayerField(true); + + // Cf https://bulbapedia.bulbagarden.net/wiki/Escape#Generation_V_onwards + // From gen 5 onwards, running takes the _base_ speed totals of both party sides. + const enemySpeed = enemyField.reduce((total, enemy) => total + enemy.getStat(Stat.SPD), 0); + const playerSpeed = activePlayerField.reduce((total, player) => total + player.getStat(Stat.SPD), 0); /* The way the escape chance works is by looking at the difference between your speed and the enemy field's average speed as a ratio. The higher this ratio, the higher your chance of success. * However, there is a cap for the ratio of your speed vs enemy speed which beyond that point, you won't gain any advantage. It also looks at how many times you've tried to escape. @@ -92,10 +102,8 @@ export class AttemptRunPhase extends PokemonPhase { * From the above, we can calculate the below values */ - let isBoss = false; - for (let e = 0; e < enemyField.length; e++) { - isBoss = isBoss || enemyField[e].isBoss(); // this line checks if any of the enemy pokemon on the field are bosses; if so, the calculation for escaping is different - } + /** Whether at least 1 pokemon on the enemy field is a boss. */ + const isBoss = enemyField.some(e => e.isBoss()); /** The ratio between the speed of your active pokemon and the speed of the enemy field */ const speedRatio = playerSpeed / enemySpeed; @@ -111,8 +119,8 @@ export class AttemptRunPhase extends PokemonPhase { const escapeSlope = (maxChance - minChance) / speedCap; // This will calculate the escape chance given all of the above and clamp it to the range of [`minChance`, `maxChance`] - escapeChance.value = Phaser.Math.Clamp( - Math.round(escapeSlope * speedRatio + minChance + escapeBonus * globalScene.currentBattle.escapeAttempts++), + return Phaser.Math.Clamp( + Math.round(escapeSlope * speedRatio + minChance + escapeBonus * escapeAttempts), minChance, maxChance, ); diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 2c4f2ead82e..bfae2f06de4 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -1,6 +1,5 @@ import { applyAbAttrs } from "#app/data/abilities/apply-ab-attrs"; import { allMoves } from "#app/data/data-lists"; -import { AbilityId } from "#enums/ability-id"; import { Stat } from "#app/enums/stat"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/data/moves/pokemon-move"; @@ -213,27 +212,8 @@ export class TurnStartPhase extends FieldPhase { break; case Command.RUN: { - let runningPokemon = pokemon; - if (globalScene.currentBattle.double) { - const playerActivePokemon = field.filter(pokemon => { - if (pokemon) { - return pokemon.isPlayer() && pokemon.isActive(); - } - return; - }); - // if only one pokemon is alive, use that one - if (playerActivePokemon.length > 1) { - // find which active pokemon has faster speed - const fasterPokemon = - playerActivePokemon[0].getStat(Stat.SPD) > playerActivePokemon[1].getStat(Stat.SPD) - ? playerActivePokemon[0] - : playerActivePokemon[1]; - // check if either active pokemon has the ability "Run Away" - const hasRunAway = playerActivePokemon.find(p => p.hasAbility(AbilityId.RUN_AWAY)); - runningPokemon = hasRunAway !== undefined ? hasRunAway : fasterPokemon; - } - } - phaseManager.unshiftNew("AttemptRunPhase", runningPokemon.getFieldIndex()); + // Running (like ball throwing) is a team action taking up both Pokemon's turns. + phaseManager.unshiftNew("AttemptRunPhase"); } break; } diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts index 90565d9caf8..eee44b3d818 100644 --- a/test/abilities/desolate-land.test.ts +++ b/test/abilities/desolate-land.test.ts @@ -8,6 +8,7 @@ import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; +import { globalScene } from "#app/global-scene"; describe("Abilities - Desolate Land", () => { let phaserGame: Phaser.Game; @@ -145,6 +146,7 @@ describe("Abilities - Desolate Land", () => { expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); vi.spyOn(game.scene.getPlayerPokemon()!, "randBattleSeedInt").mockReturnValue(0); + vi.spyOn(globalScene, "randBattleSeedInt").mockReturnValue(0); const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); diff --git a/test/abilities/honey_gather.test.ts b/test/abilities/honey_gather.test.ts index f8700f3e6f7..5bc7b3a0776 100644 --- a/test/abilities/honey_gather.test.ts +++ b/test/abilities/honey_gather.test.ts @@ -6,6 +6,7 @@ import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Overrides from "#app/overrides"; describe("Abilities - Honey Gather", () => { let phaserGame: Phaser.Game; @@ -63,6 +64,8 @@ describe("Abilities - Honey Gather", () => { // something weird is going on with the test framework, so this is required to prevent a crash const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "scene", "get").mockReturnValue(game.scene); + // Expects next wave so run must succeed + vi.spyOn(Overrides, "RUN_SUCCESS_OVERRIDE", "get").mockReturnValue(true); const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index f153e71587e..ec1197c30ca 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -10,6 +10,7 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { globalScene } from "#app/global-scene"; describe("Abilities - Neutralizing Gas", () => { let phaserGame: Phaser.Game; @@ -164,6 +165,7 @@ describe("Abilities - Neutralizing Gas", () => { expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); vi.spyOn(game.scene.getPlayerPokemon()!, "randBattleSeedInt").mockReturnValue(0); + vi.spyOn(globalScene, "randBattleSeedInt").mockReturnValue(0); const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); diff --git a/test/abilities/speed_boost.test.ts b/test/abilities/speed_boost.test.ts index a4445d085f3..1e731c7d6b6 100644 --- a/test/abilities/speed_boost.test.ts +++ b/test/abilities/speed_boost.test.ts @@ -4,10 +4,11 @@ import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#enums/command"; import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; +import Overrides from "#app/overrides"; describe("Abilities - Speed Boost", () => { let phaserGame: Phaser.Game; @@ -96,12 +97,15 @@ describe("Abilities - Speed Boost", () => { }); it("should not trigger if pokemon fails to escape", async () => { + //Account for doubles, should not trigger on either pokemon + game.override.battleStyle("double"); await game.classicMode.startBattle([SpeciesId.SHUCKLE]); + vi.spyOn(Overrides, "RUN_SUCCESS_OVERRIDE", "get").mockReturnValue(false); + const commandPhase = game.scene.phaseManager.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); - const runPhase = game.scene.phaseManager.getCurrentPhase() as AttemptRunPhase; - runPhase.forceFailEscape = true; + await game.phaseInterceptor.to(AttemptRunPhase); await game.toNextTurn(); diff --git a/test/escape-calculations.test.ts b/test/escape-calculations.test.ts index 2cc0934f7c1..a4ff52302ed 100644 --- a/test/escape-calculations.test.ts +++ b/test/escape-calculations.test.ts @@ -1,7 +1,6 @@ import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#enums/command"; -import { NumberHolder } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { SpeciesId } from "#enums/species-id"; import GameManager from "#test/testUtils/gameManager"; @@ -45,8 +44,6 @@ describe("Escape chance calculations", () => { await game.phaseInterceptor.to(AttemptRunPhase, false); const phase = game.scene.phaseManager.getCurrentPhase() as AttemptRunPhase; - const escapePercentage = new NumberHolder(0); - // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping const escapeChances: { pokemonSpeedRatio: number; @@ -91,8 +88,8 @@ describe("Escape chance calculations", () => { 20, escapeChances[i].pokemonSpeedRatio * enemySpeed, ]); - phase.attemptRunAway(playerPokemon, enemyField, escapePercentage); - expect(escapePercentage.value).toBe(escapeChances[i].expectedEscapeChance); + const chance = phase.calculateEscapeChance(game.scene.currentBattle.escapeAttempts); + expect(chance).toBe(escapeChances[i].expectedEscapeChance); } }); @@ -118,8 +115,6 @@ describe("Escape chance calculations", () => { await game.phaseInterceptor.to(AttemptRunPhase, false); const phase = game.scene.phaseManager.getCurrentPhase() as AttemptRunPhase; - const escapePercentage = new NumberHolder(0); - // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping const escapeChances: { pokemonSpeedRatio: number; @@ -172,9 +167,9 @@ describe("Escape chance calculations", () => { 20, escapeChances[i].pokemonSpeedRatio * totalEnemySpeed - playerPokemon[0].stats[5], ]); - phase.attemptRunAway(playerPokemon, enemyField, escapePercentage); + const chance = phase.calculateEscapeChance(game.scene.currentBattle.escapeAttempts); // checks to make sure the escape values are the same - expect(escapePercentage.value).toBe(escapeChances[i].expectedEscapeChance); + expect(chance).toBe(escapeChances[i].expectedEscapeChance); // checks to make sure the sum of the player's speed for all pokemon is equal to the appropriate ratio of the total enemy speed expect(playerPokemon[0].stats[5] + playerPokemon[1].stats[5]).toBe( escapeChances[i].pokemonSpeedRatio * totalEnemySpeed, @@ -197,7 +192,6 @@ describe("Escape chance calculations", () => { await game.phaseInterceptor.to(AttemptRunPhase, false); const phase = game.scene.phaseManager.getCurrentPhase() as AttemptRunPhase; - const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping const escapeChances: { @@ -256,8 +250,8 @@ describe("Escape chance calculations", () => { 20, escapeChances[i].pokemonSpeedRatio * enemySpeed, ]); - phase.attemptRunAway(playerPokemon, enemyField, escapePercentage); - expect(escapePercentage.value).toBe(escapeChances[i].expectedEscapeChance); + const chance = phase.calculateEscapeChance(game.scene.currentBattle.escapeAttempts); + expect(chance).toBe(escapeChances[i].expectedEscapeChance); } }); @@ -283,7 +277,6 @@ describe("Escape chance calculations", () => { await game.phaseInterceptor.to(AttemptRunPhase, false); const phase = game.scene.phaseManager.getCurrentPhase() as AttemptRunPhase; - const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping const escapeChances: { @@ -349,9 +342,9 @@ describe("Escape chance calculations", () => { 20, escapeChances[i].pokemonSpeedRatio * totalEnemySpeed - playerPokemon[0].stats[5], ]); - phase.attemptRunAway(playerPokemon, enemyField, escapePercentage); + const chance = phase.calculateEscapeChance(game.scene.currentBattle.escapeAttempts); // checks to make sure the escape values are the same - expect(escapePercentage.value).toBe(escapeChances[i].expectedEscapeChance); + expect(chance).toBe(escapeChances[i].expectedEscapeChance); // checks to make sure the sum of the player's speed for all pokemon is equal to the appropriate ratio of the total enemy speed expect(playerPokemon[0].stats[5] + playerPokemon[1].stats[5]).toBe( escapeChances[i].pokemonSpeedRatio * totalEnemySpeed, From 2fe50cb7610d4ed5d0b07fe490f061243b0eda87 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Wed, 2 Jul 2025 21:46:26 +0200 Subject: [PATCH 3/7] [Test] Made `game.move.select` fail if move not in moveset (#5998) * Made `game.phaseInterceptor` fail if move not in moveset also added a few assorted doc fixes * Fixed fail comment * added `map` statement * Fixed tests * Fixed test * Fixed test and comment * Fixed tests * Fixed test v2 * Fixed various tests * Update error msg to not use fullcaps * Fixed remaining tests * Fixed test 0.5 * Fixed up tetss * Fixed test * Fixed imposter tests * Fixed imposter tests * Fiexd remainig tests * Marked test as TODO wasn't as if it was doing anything beforehand but w/e * Update moveHelper.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update moveHelper.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Apply Biome * Update comment in `spikes.test.ts` * Add faint checks to Spikes test --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- test/abilities/good_as_gold.test.ts | 11 +-- test/abilities/ice_face.test.ts | 8 +-- test/abilities/imposter.test.ts | 16 ++--- test/abilities/intimidate.test.ts | 3 +- test/abilities/lightningrod.test.ts | 37 ++++------ test/abilities/mold_breaker.test.ts | 33 ++++----- test/abilities/moxie.test.ts | 3 +- test/abilities/screen_cleaner.test.ts | 8 +-- test/abilities/storm_drain.test.ts | 20 +++--- test/arena/weather_strong_winds.test.ts | 2 +- test/items/dire_hit.test.ts | 3 +- test/moves/aurora_veil.test.ts | 77 +++++++------------- test/moves/baddy_bad.test.ts | 2 +- test/moves/gastro_acid.test.ts | 6 +- test/moves/instruct.test.ts | 2 +- test/moves/reflect_type.test.ts | 30 ++++---- test/moves/spikes.test.ts | 18 +++-- test/testUtils/gameManager.ts | 28 ++++---- test/testUtils/gameManagerUtils.ts | 11 +-- test/testUtils/helpers/field-helper.ts | 2 +- test/testUtils/helpers/moveHelper.ts | 93 +++++++++++++++++++------ 21 files changed, 197 insertions(+), 216 deletions(-) diff --git a/test/abilities/good_as_gold.test.ts b/test/abilities/good_as_gold.test.ts index 89e354b1f34..2490cd43fea 100644 --- a/test/abilities/good_as_gold.test.ts +++ b/test/abilities/good_as_gold.test.ts @@ -45,7 +45,7 @@ describe("Abilities - Good As Gold", () => { const player = game.scene.getPlayerPokemon()!; - game.move.select(MoveId.SPLASH, 0); + game.move.select(MoveId.SPLASH); await game.phaseInterceptor.to("BerryPhase"); @@ -54,12 +54,13 @@ describe("Abilities - Good As Gold", () => { }); it("should block memento and prevent the user from fainting", async () => { - game.override.enemyMoveset([MoveId.MEMENTO]); + game.override.enemyAbility(AbilityId.GOOD_AS_GOLD); await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(MoveId.MEMENTO); + + game.move.use(MoveId.MEMENTO); await game.phaseInterceptor.to("BerryPhase"); - expect(game.scene.getPlayerPokemon()!.isFainted()).toBe(false); - expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(0); + expect(game.field.getPlayerPokemon().isFainted()).toBe(false); + expect(game.field.getEnemyPokemon().getStatStage(Stat.ATK)).toBe(0); }); it("should not block any status moves that target the field, one side, or all pokemon", async () => { diff --git a/test/abilities/ice_face.test.ts b/test/abilities/ice_face.test.ts index c42713d7e6c..6e261eb00e2 100644 --- a/test/abilities/ice_face.test.ts +++ b/test/abilities/ice_face.test.ts @@ -259,7 +259,7 @@ describe("Abilities - Ice Face", () => { const eiscue = game.scene.getEnemyPokemon()!; - expect(eiscue.getTag(BattlerTagType.ICE_FACE)).not.toBe(undefined); + expect(eiscue.getTag(BattlerTagType.ICE_FACE)).toBeDefined(); expect(eiscue.formIndex).toBe(icefaceForm); expect(eiscue.hasAbility(AbilityId.ICE_FACE)).toBe(true); }); @@ -269,13 +269,9 @@ describe("Abilities - Ice Face", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - game.move.select(MoveId.SIMPLE_BEAM); - - await game.phaseInterceptor.to(TurnInitPhase); - const eiscue = game.scene.getEnemyPokemon()!; - expect(eiscue.getTag(BattlerTagType.ICE_FACE)).not.toBe(undefined); + expect(eiscue.getTag(BattlerTagType.ICE_FACE)).toBeDefined(); expect(eiscue.formIndex).toBe(icefaceForm); expect(game.scene.getPlayerPokemon()!.hasAbility(AbilityId.TRACE)).toBe(true); }); diff --git a/test/abilities/imposter.test.ts b/test/abilities/imposter.test.ts index 30491139877..eac4e8d070b 100644 --- a/test/abilities/imposter.test.ts +++ b/test/abilities/imposter.test.ts @@ -74,9 +74,8 @@ describe("Abilities - Imposter", () => { } }); + // TODO: this doesn't actually test imposter - transforming happens before poewr split it("should copy in-battle overridden stats", async () => { - game.override.enemyMoveset([MoveId.POWER_SPLIT]); - await game.classicMode.startBattle([SpeciesId.DITTO]); const player = game.scene.getPlayerPokemon()!; @@ -85,7 +84,8 @@ describe("Abilities - Imposter", () => { const avgAtk = Math.floor((player.getStat(Stat.ATK, false) + enemy.getStat(Stat.ATK, false)) / 2); const avgSpAtk = Math.floor((player.getStat(Stat.SPATK, false) + enemy.getStat(Stat.SPATK, false)) / 2); - game.move.select(MoveId.TACKLE); + game.move.use(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.POWER_SPLIT); await game.phaseInterceptor.to(TurnEndPhase); expect(player.getStat(Stat.ATK, false)).toBe(avgAtk); @@ -101,9 +101,6 @@ describe("Abilities - Imposter", () => { await game.classicMode.startBattle([SpeciesId.DITTO]); const player = game.scene.getPlayerPokemon()!; - game.move.select(MoveId.TACKLE); - await game.phaseInterceptor.to(TurnEndPhase); - player.getMoveset().forEach(move => { // Should set correct maximum PP without touching `ppUp` if (move) { @@ -122,15 +119,10 @@ describe("Abilities - Imposter", () => { await game.classicMode.startBattle([SpeciesId.DITTO]); - game.move.select(MoveId.TACKLE); - await game.phaseInterceptor.to("MoveEndPhase"); - expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); }); it("should persist transformed attributes across reloads", async () => { - game.override.moveset([MoveId.ABSORB]); - await game.classicMode.startBattle([SpeciesId.DITTO]); const player = game.scene.getPlayerPokemon()!; @@ -162,7 +154,7 @@ describe("Abilities - Imposter", () => { }); it("should stay transformed with the correct form after reload", async () => { - game.override.moveset([MoveId.ABSORB]).enemySpecies(SpeciesId.UNOWN); + game.override.enemySpecies(SpeciesId.UNOWN); await game.classicMode.startBattle([SpeciesId.DITTO]); const enemy = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/intimidate.test.ts b/test/abilities/intimidate.test.ts index 3dcd9bcd129..6790e2b98d3 100644 --- a/test/abilities/intimidate.test.ts +++ b/test/abilities/intimidate.test.ts @@ -3,7 +3,6 @@ import Phaser from "phaser"; import GameManager from "#test/testUtils/gameManager"; import { UiMode } from "#enums/ui-mode"; import { Stat } from "#enums/stat"; -import { getMovePosition } from "#test/testUtils/gameManagerUtils"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; @@ -114,7 +113,7 @@ describe("Abilities - Intimidate", () => { expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1); expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); - game.move.select(getMovePosition(game.scene, 0, MoveId.SPLASH)); + game.move.select(MoveId.SPLASH); await game.toNextTurn(); enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/lightningrod.test.ts b/test/abilities/lightningrod.test.ts index 2dc29500454..678aa2431ac 100644 --- a/test/abilities/lightningrod.test.ts +++ b/test/abilities/lightningrod.test.ts @@ -36,10 +36,8 @@ describe("Abilities - Lightningrod", () => { it("should redirect electric type moves", async () => { await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); - const enemy1 = game.scene.getEnemyField()[0]; - const enemy2 = game.scene.getEnemyField()[1]; - - enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; + const [enemy1, enemy2] = game.scene.getEnemyField(); + game.field.mockAbility(enemy2, AbilityId.LIGHTNING_ROD); game.move.select(MoveId.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); @@ -52,10 +50,8 @@ describe("Abilities - Lightningrod", () => { game.override.moveset([MoveId.SPLASH, MoveId.AERIAL_ACE]); await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); - const enemy1 = game.scene.getEnemyField()[0]; - const enemy2 = game.scene.getEnemyField()[1]; - - enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; + const [enemy1, enemy2] = game.scene.getEnemyField(); + game.field.mockAbility(enemy2, AbilityId.LIGHTNING_ROD); game.move.select(MoveId.AERIAL_ACE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); @@ -68,8 +64,7 @@ describe("Abilities - Lightningrod", () => { await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); const enemy2 = game.scene.getEnemyField()[1]; - - enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; + game.field.mockAbility(enemy2, AbilityId.LIGHTNING_ROD); game.move.select(MoveId.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); @@ -81,31 +76,25 @@ describe("Abilities - Lightningrod", () => { it("should not redirect moves changed from electric type via ability", async () => { game.override.ability(AbilityId.NORMALIZE); - await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemy1 = game.scene.getEnemyField()[0]; - const enemy2 = game.scene.getEnemyField()[1]; - - enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; + const [enemy1, enemy2] = game.scene.getEnemyField(); + game.field.mockAbility(enemy2, AbilityId.LIGHTNING_ROD); game.move.select(MoveId.SHOCK_WAVE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(false); }); it("should redirect moves changed to electric type via ability", async () => { - game.override.ability(AbilityId.GALVANIZE).moveset(MoveId.TACKLE); - await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); + game.override.ability(AbilityId.GALVANIZE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const enemy1 = game.scene.getEnemyField()[0]; - const enemy2 = game.scene.getEnemyField()[1]; + const [enemy1, enemy2] = game.scene.getEnemyField(); + game.field.mockAbility(enemy2, AbilityId.LIGHTNING_ROD); - enemy2.summonData.ability = AbilityId.LIGHTNING_ROD; - - game.move.select(MoveId.TACKLE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + game.move.use(MoveId.TACKLE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(true); diff --git a/test/abilities/mold_breaker.test.ts b/test/abilities/mold_breaker.test.ts index 28a077e8908..3fac3448f4d 100644 --- a/test/abilities/mold_breaker.test.ts +++ b/test/abilities/mold_breaker.test.ts @@ -1,8 +1,6 @@ -import { BattlerIndex } from "#enums/battler-index"; -import { globalScene } from "#app/global-scene"; -import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; import { SpeciesId } from "#enums/species-id"; +import { AbilityId } from "#enums/ability-id"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -24,29 +22,28 @@ describe("Abilities - Mold Breaker", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([MoveId.SPLASH]) .ability(AbilityId.MOLD_BREAKER) .battleStyle("single") .criticalHits(false) .enemySpecies(SpeciesId.MAGIKARP) - .enemyAbility(AbilityId.BALL_FETCH) + .enemyAbility(AbilityId.STURDY) .enemyMoveset(MoveId.SPLASH); }); it("should turn off the ignore abilities arena variable after the user's move", async () => { - game.override - .enemyMoveset(MoveId.SPLASH) - .ability(AbilityId.MOLD_BREAKER) - .moveset([MoveId.ERUPTION]) - .startingLevel(100) - .enemyLevel(2); - await game.classicMode.startBattle([SpeciesId.MAGIKARP]); - const enemy = game.scene.getEnemyPokemon()!; + await game.classicMode.startBattle([SpeciesId.PINSIR]); - expect(enemy.isFainted()).toBe(false); - game.move.select(MoveId.SPLASH); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); - await game.phaseInterceptor.to("MoveEndPhase", true); - expect(globalScene.arena.ignoreAbilities).toBe(false); + const player = game.field.getPlayerPokemon(); + const enemy = game.field.getEnemyPokemon(); + + game.move.use(MoveId.X_SCISSOR); + await game.phaseInterceptor.to("MoveEffectPhase"); + + expect(game.scene.arena.ignoreAbilities).toBe(true); + expect(game.scene.arena.ignoringEffectSource).toBe(player.getBattlerIndex()); + + await game.toEndOfTurn(); + expect(game.scene.arena.ignoreAbilities).toBe(false); + expect(enemy.isFainted()).toBe(true); }); }); diff --git a/test/abilities/moxie.test.ts b/test/abilities/moxie.test.ts index a85ed081448..1c4acf139e4 100644 --- a/test/abilities/moxie.test.ts +++ b/test/abilities/moxie.test.ts @@ -65,8 +65,7 @@ describe("Abilities - Moxie", () => { secondPokemon.hp = 1; - game.move.select(moveToUse); - game.selectTarget(BattlerIndex.PLAYER_2); + game.move.select(moveToUse, BattlerIndex.PLAYER_2); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/test/abilities/screen_cleaner.test.ts b/test/abilities/screen_cleaner.test.ts index e896d2e51f9..790ffcdc462 100644 --- a/test/abilities/screen_cleaner.test.ts +++ b/test/abilities/screen_cleaner.test.ts @@ -28,11 +28,11 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Aurora Veil", async () => { - game.override.moveset([MoveId.HAIL]).enemyMoveset(MoveId.AURORA_VEIL); + game.override.enemyMoveset(MoveId.AURORA_VEIL); await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(MoveId.HAIL); + game.move.use(MoveId.HAIL); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.arena.getTag(ArenaTagType.AURORA_VEIL)).toBeDefined(); @@ -49,7 +49,7 @@ describe("Abilities - Screen Cleaner", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(MoveId.SPLASH); + game.move.use(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.arena.getTag(ArenaTagType.LIGHT_SCREEN)).toBeDefined(); @@ -66,7 +66,7 @@ describe("Abilities - Screen Cleaner", () => { await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]); - game.move.select(MoveId.SPLASH); + game.move.use(MoveId.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); expect(game.scene.arena.getTag(ArenaTagType.REFLECT)).toBeDefined(); diff --git a/test/abilities/storm_drain.test.ts b/test/abilities/storm_drain.test.ts index 8eedf0c7ce8..44a615ba364 100644 --- a/test/abilities/storm_drain.test.ts +++ b/test/abilities/storm_drain.test.ts @@ -7,6 +7,7 @@ import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +// TODO: Condense with lightning rod tests sometime describe("Abilities - Storm Drain", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -39,7 +40,7 @@ describe("Abilities - Storm Drain", () => { const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = AbilityId.STORM_DRAIN; + game.field.mockAbility(enemy2, AbilityId.STORM_DRAIN); game.move.select(MoveId.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); @@ -55,7 +56,7 @@ describe("Abilities - Storm Drain", () => { const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = AbilityId.STORM_DRAIN; + game.field.mockAbility(enemy2, AbilityId.STORM_DRAIN); game.move.select(MoveId.AERIAL_ACE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); @@ -68,8 +69,7 @@ describe("Abilities - Storm Drain", () => { await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); const enemy2 = game.scene.getEnemyField()[1]; - - enemy2.summonData.ability = AbilityId.STORM_DRAIN; + game.field.mockAbility(enemy2, AbilityId.STORM_DRAIN); game.move.select(MoveId.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); @@ -85,8 +85,7 @@ describe("Abilities - Storm Drain", () => { const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; - - enemy2.summonData.ability = AbilityId.STORM_DRAIN; + game.field.mockAbility(enemy2, AbilityId.STORM_DRAIN); game.move.select(MoveId.WATER_GUN, BattlerIndex.PLAYER, BattlerIndex.ENEMY); game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); @@ -96,16 +95,15 @@ describe("Abilities - Storm Drain", () => { }); it("should redirect moves changed to water type via ability", async () => { - game.override.ability(AbilityId.LIQUID_VOICE).moveset(MoveId.PSYCHIC_NOISE); - await game.classicMode.startBattle([SpeciesId.FEEBAS, SpeciesId.MAGIKARP]); + game.override.ability(AbilityId.LIQUID_VOICE); + await game.classicMode.startBattle([SpeciesId.FEEBAS]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; - enemy2.summonData.ability = AbilityId.STORM_DRAIN; + game.field.mockAbility(enemy2, AbilityId.STORM_DRAIN); - game.move.select(MoveId.PSYCHIC_NOISE, BattlerIndex.PLAYER, BattlerIndex.ENEMY); - game.move.select(MoveId.SPLASH, BattlerIndex.PLAYER_2); + game.move.use(MoveId.ROUND, BattlerIndex.PLAYER, BattlerIndex.ENEMY); await game.phaseInterceptor.to("BerryPhase"); expect(enemy1.isFullHp()).toBe(true); diff --git a/test/arena/weather_strong_winds.test.ts b/test/arena/weather_strong_winds.test.ts index d0d256816eb..d98ba96fd85 100644 --- a/test/arena/weather_strong_winds.test.ts +++ b/test/arena/weather_strong_winds.test.ts @@ -86,7 +86,7 @@ describe("Weather - Strong Winds", () => { const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1; - game.move.select(MoveId.SPLASH); + game.move.use(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.weather?.weatherType).toBeUndefined(); diff --git a/test/items/dire_hit.test.ts b/test/items/dire_hit.test.ts index 25fe9c8b876..a484a0ad302 100644 --- a/test/items/dire_hit.test.ts +++ b/test/items/dire_hit.test.ts @@ -58,8 +58,7 @@ describe("Items - Dire Hit", () => { await game.classicMode.startBattle([SpeciesId.PIKACHU]); - game.move.select(MoveId.SPLASH); - + game.move.use(MoveId.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to(BattleEndPhase); diff --git a/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts index b9ae79e4155..8faf3654401 100644 --- a/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -4,7 +4,6 @@ import type Move from "#app/data/moves/move"; import { allMoves } from "#app/data/data-lists"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import type Pokemon from "#app/field/pokemon"; -import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { NumberHolder } from "#app/utils/common"; import { AbilityId } from "#enums/ability-id"; import { MoveId } from "#enums/move-id"; @@ -12,7 +11,7 @@ import { SpeciesId } from "#enums/species-id"; import { WeatherType } from "#enums/weather-type"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; let globalScene: BattleScene; @@ -52,10 +51,10 @@ describe("Moves - Aurora Veil", () => { game.move.select(moveToUse); - await game.phaseInterceptor.to(TurnEndPhase); + await game.toEndOfTurn(); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), allMoves[moveToUse], ); @@ -71,10 +70,10 @@ describe("Moves - Aurora Veil", () => { game.move.select(moveToUse); game.move.select(moveToUse, 1); - await game.phaseInterceptor.to(TurnEndPhase); + await game.toEndOfTurn(); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), allMoves[moveToUse], ); @@ -82,72 +81,48 @@ describe("Moves - Aurora Veil", () => { }); it("reduces damage of special attacks by half in a single battle", async () => { - const moveToUse = MoveId.ABSORB; await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - game.move.select(moveToUse); + game.move.use(MoveId.ABSORB); - await game.phaseInterceptor.to(TurnEndPhase); + await game.toEndOfTurn(); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, - allMoves[moveToUse], + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), + allMoves[MoveId.ABSORB], ); - expect(mockedDmg).toBe(allMoves[moveToUse].power * singleBattleMultiplier); + expect(mockedDmg).toBe(allMoves[MoveId.ABSORB].power * singleBattleMultiplier); }); it("reduces damage of special attacks by a third in a double battle", async () => { game.override.battleStyle("double"); - - const moveToUse = MoveId.DAZZLING_GLEAM; - await game.classicMode.startBattle([SpeciesId.SHUCKLE, SpeciesId.SHUCKLE]); - - game.move.select(moveToUse); - game.move.select(moveToUse, 1); - - await game.phaseInterceptor.to(TurnEndPhase); - const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, - allMoves[moveToUse], - ); - - expect(mockedDmg).toBe(allMoves[moveToUse].power * doubleBattleMultiplier); - }); - - it("does not affect physical critical hits", async () => { - game.override.moveset([MoveId.WICKED_BLOW]); - const moveToUse = MoveId.WICKED_BLOW; await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - game.move.select(moveToUse); - await game.phaseInterceptor.to(TurnEndPhase); - + game.move.use(MoveId.ABSORB); + await game.toEndOfTurn(); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, - allMoves[moveToUse], + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), + allMoves[MoveId.ABSORB], ); - expect(mockedDmg).toBe(allMoves[moveToUse].power); + + expect(mockedDmg).toBe(allMoves[MoveId.ABSORB].power * doubleBattleMultiplier); }); it("does not affect critical hits", async () => { - game.override.moveset([MoveId.FROST_BREATH]); - const moveToUse = MoveId.FROST_BREATH; - vi.spyOn(allMoves[MoveId.FROST_BREATH], "accuracy", "get").mockReturnValue(100); await game.classicMode.startBattle([SpeciesId.SHUCKLE]); - game.move.select(moveToUse); - await game.phaseInterceptor.to(TurnEndPhase); + game.move.use(MoveId.WICKED_BLOW); + await game.toEndOfTurn(); const mockedDmg = getMockedMoveDamage( - game.scene.getEnemyPokemon()!, - game.scene.getPlayerPokemon()!, - allMoves[moveToUse], + game.field.getEnemyPokemon(), + game.field.getPlayerPokemon(), + allMoves[MoveId.WICKED_BLOW], ); - expect(mockedDmg).toBe(allMoves[moveToUse].power); + expect(mockedDmg).toBe(allMoves[MoveId.WICKED_BLOW].power); }); }); diff --git a/test/moves/baddy_bad.test.ts b/test/moves/baddy_bad.test.ts index ffdf9f0309c..8709b6d3eac 100644 --- a/test/moves/baddy_bad.test.ts +++ b/test/moves/baddy_bad.test.ts @@ -33,7 +33,7 @@ describe("Moves - Baddy Bad", () => { game.override.enemyMoveset(MoveId.PROTECT); await game.classicMode.startBattle([SpeciesId.FEEBAS]); - game.move.select(MoveId.BADDY_BAD); + game.move.use(MoveId.BADDY_BAD); await game.phaseInterceptor.to("BerryPhase"); expect(game.scene.arena.tags.length).toBe(0); diff --git a/test/moves/gastro_acid.test.ts b/test/moves/gastro_acid.test.ts index 39167987809..15a63561f94 100644 --- a/test/moves/gastro_acid.test.ts +++ b/test/moves/gastro_acid.test.ts @@ -100,12 +100,12 @@ describe("Moves - Gastro Acid", () => { await game.toNextTurn(); expect(enemyPokemon.summonData.abilitySuppressed).toBe(true); - game.move.select(MoveId.WATER_GUN); + game.move.use(MoveId.WATER_GUN); await game.toNextTurn(); // water gun should've dealt damage due to suppressed Water Absorb - expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); - game.move.select(MoveId.SPORE); + game.move.use(MoveId.SPORE); await game.toEndOfTurn(); // Comatose should block stauts effect diff --git a/test/moves/instruct.test.ts b/test/moves/instruct.test.ts index a7bcb4c86ea..6b06fa04dff 100644 --- a/test/moves/instruct.test.ts +++ b/test/moves/instruct.test.ts @@ -361,7 +361,7 @@ describe("Moves - Instruct", () => { useMode: MoveUseMode.NORMAL, }); - game.move.select(MoveId.SPLASH); + game.move.use(MoveId.SPLASH); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.toEndOfTurn(); expect(game.field.getEnemyPokemon().getLastXMoves()[0].result).toBe(MoveResult.FAIL); diff --git a/test/moves/reflect_type.test.ts b/test/moves/reflect_type.test.ts index 0915069764c..e07c7b43ca4 100644 --- a/test/moves/reflect_type.test.ts +++ b/test/moves/reflect_type.test.ts @@ -30,30 +30,26 @@ describe("Moves - Reflect Type", () => { }); it("will make the user Normal/Grass if targetting a typeless Pokemon affected by Forest's Curse", async () => { - game.override - .moveset([MoveId.FORESTS_CURSE, MoveId.REFLECT_TYPE]) - .startingLevel(60) - .enemySpecies(SpeciesId.CHARMANDER) - .enemyMoveset([MoveId.BURN_UP, MoveId.SPLASH]); + game.override.startingLevel(60).enemySpecies(SpeciesId.CHARMANDER); await game.classicMode.startBattle([SpeciesId.FEEBAS]); - const playerPokemon = game.scene.getPlayerPokemon(); - const enemyPokemon = game.scene.getEnemyPokemon(); + const playerPokemon = game.field.getPlayerPokemon(); + const enemyPokemon = game.field.getEnemyPokemon(); - game.move.select(MoveId.SPLASH); - await game.move.selectEnemyMove(MoveId.BURN_UP); + game.move.use(MoveId.SPLASH); + await game.move.forceEnemyMove(MoveId.BURN_UP); await game.toNextTurn(); - game.move.select(MoveId.FORESTS_CURSE); - await game.move.selectEnemyMove(MoveId.SPLASH); + game.move.use(MoveId.FORESTS_CURSE); + await game.move.forceEnemyMove(MoveId.SPLASH); await game.toNextTurn(); - expect(enemyPokemon?.getTypes().includes(PokemonType.UNKNOWN)).toBe(true); - expect(enemyPokemon?.getTypes().includes(PokemonType.GRASS)).toBe(true); + expect(enemyPokemon.getTypes().includes(PokemonType.UNKNOWN)).toBe(true); + expect(enemyPokemon.getTypes().includes(PokemonType.GRASS)).toBe(true); - game.move.select(MoveId.REFLECT_TYPE); - await game.move.selectEnemyMove(MoveId.SPLASH); + game.move.use(MoveId.REFLECT_TYPE); + await game.move.forceEnemyMove(MoveId.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); - expect(playerPokemon?.getTypes()[0]).toBe(PokemonType.NORMAL); - expect(playerPokemon?.getTypes().includes(PokemonType.GRASS)).toBe(true); + expect(playerPokemon.getTypes()[0]).toBe(PokemonType.NORMAL); + expect(playerPokemon.getTypes().includes(PokemonType.GRASS)).toBe(true); }); }); diff --git a/test/moves/spikes.test.ts b/test/moves/spikes.test.ts index 49492701d18..a82581b6ed5 100644 --- a/test/moves/spikes.test.ts +++ b/test/moves/spikes.test.ts @@ -6,6 +6,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import { ArenaTrapTag } from "#app/data/arena-tag"; import { ArenaTagSide } from "#enums/arena-tag-side"; +import { BattlerIndex } from "#enums/battler-index"; describe("Moves - Spikes", () => { let phaserGame: Phaser.Game; @@ -80,14 +81,19 @@ describe("Moves - Spikes", () => { expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); }); - it("should work when all targets fainted", async () => { - game.override.enemySpecies(SpeciesId.DIGLETT).battleStyle("double").startingLevel(50); - await game.classicMode.startBattle([SpeciesId.RAYQUAZA, SpeciesId.ROWLET]); + // TODO: re-enable after re-fixing hazards moves + it.todo("should work when all targets fainted", async () => { + game.override.enemySpecies(SpeciesId.DIGLETT).battleStyle("double").startingLevel(1000); + await game.classicMode.startBattle([SpeciesId.RAYQUAZA, SpeciesId.SHUCKLE]); - game.move.select(MoveId.EARTHQUAKE); - game.move.select(MoveId.SPIKES, 1); - await game.phaseInterceptor.to("TurnEndPhase"); + const [enemy1, enemy2] = game.scene.getEnemyField(); + game.move.use(MoveId.HYPER_VOICE, BattlerIndex.PLAYER); + game.move.use(MoveId.SPIKES, BattlerIndex.PLAYER_2); + await game.toEndOfTurn(); + + expect(enemy1.isFainted()).toBe(true); + expect(enemy2.isFainted()).toBe(true); expect(game.scene.arena.getTagOnSide(ArenaTrapTag, ArenaTagSide.ENEMY)).toBeDefined(); }); }); diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index b9f499d4e0c..91f9096f3d4 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -12,7 +12,6 @@ import overrides from "#app/overrides"; import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; import { CommandPhase } from "#app/phases/command-phase"; import { EncounterPhase } from "#app/phases/encounter-phase"; -import { FaintPhase } from "#app/phases/faint-phase"; import { LoginPhase } from "#app/phases/login-phase"; import { MovePhase } from "#app/phases/move-phase"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; @@ -201,9 +200,8 @@ export default class GameManager { /** * Helper function to run to the final boss encounter as it's a bit tricky due to extra dialogue * Also handles Major/Minor bosses from endless modes - * @param game - The game manager - * @param species - * @param mode + * @param species - Array of {@linkcode SpeciesId}s to start the final battle with. + * @param mode - The {@linkcode GameModes} to spawn the final boss encounter in. */ async runToFinalBossEncounter(species: SpeciesId[], mode: GameModes) { console.log("===to final boss encounter==="); @@ -230,9 +228,9 @@ export default class GameManager { /** * Runs the game to a mystery encounter phase. - * @param encounterType if specified, will expect encounter to have been spawned - * @param species Optional array of species for party. - * @returns A promise that resolves when the EncounterPhase ends. + * @param encounterType - If specified, will expect encounter to be the given type. + * @param species - Optional array of species for party to start with. + * @returns A Promise that resolves when the EncounterPhase ends. */ async runToMysteryEncounter(encounterType?: MysteryEncounterType, species?: SpeciesId[]) { if (!isNullOrUndefined(encounterType)) { @@ -277,6 +275,7 @@ export default class GameManager { * Will trigger during the next {@linkcode SelectTargetPhase} * @param targetIndex - The {@linkcode BattlerIndex} of the attack target, or `undefined` for multi-target attacks * @param movePosition - The 0-indexed position of the move in the pokemon's moveset array + * @throws Immediately fails tests */ selectTarget(movePosition: number, targetIndex?: BattlerIndex) { this.onNextPrompt( @@ -292,7 +291,7 @@ export default class GameManager { handler.setCursor(targetIndex !== undefined ? targetIndex : BattlerIndex.ENEMY); } if (move.isMultiTarget() && targetIndex !== undefined) { - throw new Error(`targetIndex was passed to selectMove() but move ("${move.name}") is not targetted`); + expect.fail(`targetIndex was passed to selectMove() but move ("${move.name}") is not targetted`); } handler.processInput(Button.ACTION); }, @@ -452,17 +451,14 @@ export default class GameManager { } /** - * Faints a player or enemy pokemon instantly by setting their HP to 0. + * Faint a player or enemy pokemon instantly by setting their HP to 0. * @param pokemon - The player/enemy pokemon being fainted - * @returns A promise that resolves once the fainted pokemon's FaintPhase finishes running. + * @returns A Promise that resolves once the fainted pokemon's FaintPhase finishes running. */ async killPokemon(pokemon: PlayerPokemon | EnemyPokemon) { - return new Promise(async (resolve, reject) => { - pokemon.hp = 0; - this.scene.phaseManager.pushPhase(new FaintPhase(pokemon.getBattlerIndex(), true)); - await this.phaseInterceptor.to(FaintPhase).catch(e => reject(e)); - resolve(); - }); + pokemon.hp = 0; + this.scene.phaseManager.pushNew("FaintPhase", pokemon.getBattlerIndex(), true); + await this.phaseInterceptor.to("FaintPhase"); } /** diff --git a/test/testUtils/gameManagerUtils.ts b/test/testUtils/gameManagerUtils.ts index 57fd9b91d26..2e1714c90ad 100644 --- a/test/testUtils/gameManagerUtils.ts +++ b/test/testUtils/gameManagerUtils.ts @@ -10,7 +10,7 @@ import { getGameMode } from "#app/game-mode"; import { GameModes } from "#enums/game-modes"; import type { StarterMoveset } from "#app/system/game-data"; import type { Starter } from "#app/ui/starter-select-ui-handler"; -import { MoveId } from "#enums/move-id"; +import type { MoveId } from "#enums/move-id"; import type { SpeciesId } from "#enums/species-id"; /** Function to convert Blob to string */ @@ -98,15 +98,6 @@ export function waitUntil(truth): Promise { }); } -/** Get the index of `move` from the moveset of the pokemon on the player's field at location `pokemonIndex`. */ -export function getMovePosition(scene: BattleScene, pokemonIndex: 0 | 1, move: MoveId): number { - const playerPokemon = scene.getPlayerField()[pokemonIndex]; - const moveSet = playerPokemon.getMoveset(); - const index = moveSet.findIndex(m => m.moveId === move && m.ppUsed < m.getMovePp()); - console.log(`Move position for ${MoveId[move]} (=${move}):`, index); - return index; -} - /** * Useful for populating party, wave index, etc. without having to spin up and run through an entire EncounterPhase */ diff --git a/test/testUtils/helpers/field-helper.ts b/test/testUtils/helpers/field-helper.ts index 2866c01209f..25cdde08dbe 100644 --- a/test/testUtils/helpers/field-helper.ts +++ b/test/testUtils/helpers/field-helper.ts @@ -70,7 +70,7 @@ export class FieldHelper extends GameManagerHelper { * @see {@linkcode vi.spyOn} * @see https://vitest.dev/api/mock#mockreturnvalue */ - public mockAbility(pokemon: Pokemon, ability: AbilityId): MockInstance<(baseOnly?: boolean) => Ability> { + public mockAbility(pokemon: Pokemon, ability: AbilityId): MockInstance<(ignoreOverride?: boolean) => Ability> { return vi.spyOn(pokemon, "getAbility").mockReturnValue(allAbilities[ability]); } diff --git a/test/testUtils/helpers/moveHelper.ts b/test/testUtils/helpers/moveHelper.ts index ed1441a6a2f..5ac5877a54a 100644 --- a/test/testUtils/helpers/moveHelper.ts +++ b/test/testUtils/helpers/moveHelper.ts @@ -1,4 +1,4 @@ -import type { BattlerIndex } from "#enums/battler-index"; +import { BattlerIndex } from "#enums/battler-index"; import { getMoveTargets } from "#app/data/moves/move-utils"; import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/data/moves/pokemon-move"; @@ -9,14 +9,13 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Command } from "#enums/command"; import { MoveId } from "#enums/move-id"; import { UiMode } from "#enums/ui-mode"; -import { getMovePosition } from "#test/testUtils/gameManagerUtils"; import { GameManagerHelper } from "#test/testUtils/helpers/gameManagerHelper"; -import { vi } from "vitest"; -import { coerceArray } from "#app/utils/common"; +import { expect, vi } from "vitest"; +import { coerceArray, toReadableString } from "#app/utils/common"; import { MoveUseMode } from "#enums/move-use-mode"; /** - * Helper to handle a Pokemon's move + * Helper to handle using a Pokemon's moves. */ export class MoveHelper extends GameManagerHelper { /** @@ -49,13 +48,31 @@ export class MoveHelper extends GameManagerHelper { } /** - * Select the move to be used by the given Pokemon(-index). Triggers during the next {@linkcode CommandPhase} - * @param move - the move to use - * @param pkmIndex - the pokemon index. Relevant for double-battles only (defaults to 0) - * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required + * Select a move _already in the player's moveset_ to be used during the next {@linkcode CommandPhase}. + * @param move - The {@linkcode MoveId} to use. + * @param pkmIndex - The {@linkcode BattlerIndex} of the player Pokemon using the move. Relevant for double battles only and defaults to {@linkcode BattlerIndex.PLAYER} if not specified. + * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves; should be omitted for multi-target moves. + * If set to `null`, will forgo normal target selection entirely (useful for UI tests). + * @remarks + * Will fail the current test if the move being selected is not in the user's moveset. */ - public select(move: MoveId, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { - const movePosition = getMovePosition(this.game.scene, pkmIndex, move); + public select( + move: MoveId, + pkmIndex: BattlerIndex.PLAYER | BattlerIndex.PLAYER_2 = BattlerIndex.PLAYER, + targetIndex?: BattlerIndex | null, + ) { + const movePosition = this.getMovePosition(pkmIndex, move); + if (movePosition === -1) { + expect.fail( + `MoveHelper.select called with move '${toReadableString(MoveId[move])}' not in moveset!` + + `\nBattler Index: ${toReadableString(BattlerIndex[pkmIndex])}` + + `\nMoveset: [${this.game.scene + .getPlayerParty() + [pkmIndex].getMoveset() + .map(pm => toReadableString(MoveId[pm.moveId])) + .join(", ")}]`, + ); + } this.game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { this.game.scene.ui.setMode( @@ -77,14 +94,30 @@ export class MoveHelper extends GameManagerHelper { } /** - * Select the move to be used by the given Pokemon(-index), **which will also terastallize on this turn**. - * Triggers during the next {@linkcode CommandPhase} - * @param move - the move to use - * @param pkmIndex - the pokemon index. Relevant for double-battles only (defaults to 0) - * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required + * Select a move _already in the player's moveset_ to be used during the next {@linkcode CommandPhase}, **which will also terastallize on this turn**. + * @param move - The {@linkcode MoveId} to use. + * @param pkmIndex - The {@linkcode BattlerIndex} of the player Pokemon using the move. Relevant for double battles only and defaults to {@linkcode BattlerIndex.PLAYER} if not specified. + * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves; should be omitted for multi-target moves. + * If set to `null`, will forgo normal target selection entirely (useful for UI tests) */ - public selectWithTera(move: MoveId, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { - const movePosition = getMovePosition(this.game.scene, pkmIndex, move); + public selectWithTera( + move: MoveId, + pkmIndex: BattlerIndex.PLAYER | BattlerIndex.PLAYER_2 = BattlerIndex.PLAYER, + targetIndex?: BattlerIndex | null, + ) { + const movePosition = this.getMovePosition(pkmIndex, move); + if (movePosition === -1) { + expect.fail( + `MoveHelper.selectWithTera called with move '${toReadableString(MoveId[move])}' not in moveset!` + + `\nBattler Index: ${toReadableString(BattlerIndex[pkmIndex])}` + + `\nMoveset: [${this.game.scene + .getPlayerParty() + [pkmIndex].getMoveset() + .map(pm => toReadableString(MoveId[pm.moveId])) + .join(", ")}]`, + ); + } + this.game.scene.getPlayerParty()[pkmIndex].isTerastallized = false; this.game.onNextPrompt("CommandPhase", UiMode.COMMAND, () => { @@ -107,6 +140,15 @@ export class MoveHelper extends GameManagerHelper { } } + /** Helper function to get the index of the selected move in the selected part member's moveset. */ + private getMovePosition(pokemonIndex: BattlerIndex.PLAYER | BattlerIndex.PLAYER_2, move: MoveId): number { + const playerPokemon = this.game.scene.getPlayerField()[pokemonIndex]; + const moveset = playerPokemon.getMoveset(); + const index = moveset.findIndex(m => m.moveId === move && m.ppUsed < m.getMovePp()); + console.log(`Move position for ${MoveId[move]} (=${move}):`, index); + return index; + } + /** * Modifies a player pokemon's moveset to contain only the selected move and then * selects it to be used during the next {@linkcode CommandPhase}. @@ -116,14 +158,19 @@ export class MoveHelper extends GameManagerHelper { * Note: If you need to check for changes in the player's moveset as part of the test, it may be * best to use {@linkcode changeMoveset} and {@linkcode select} instead. * @param moveId - the move to use - * @param pkmIndex - the pokemon index. Relevant for double-battles only (defaults to 0) - * @param targetIndex - (optional) The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required - * @param useTera - If `true`, the Pokemon also chooses to Terastallize. This does not require a Tera Orb. Default: `false`. + * @param pkmIndex - The {@linkcode BattlerIndex} of the player Pokemon using the move. Relevant for double battles only and defaults to {@linkcode BattlerIndex.PLAYER} if not specified. + * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves; should be omitted for multi-target moves. + * @param useTera - If `true`, the Pokemon will attempt to Terastallize even without a Tera Orb; default `false`. */ - public use(moveId: MoveId, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null, useTera = false): void { + public use( + moveId: MoveId, + pkmIndex: BattlerIndex.PLAYER | BattlerIndex.PLAYER_2 = BattlerIndex.PLAYER, + targetIndex?: BattlerIndex, + useTera = false, + ): void { if ([Overrides.MOVESET_OVERRIDE].flat().length > 0) { vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([]); - console.warn("Warning: `use` overwrites the Pokemon's moveset and disables the player moveset override!"); + console.warn("Warning: `MoveHelper.use` overwriting player pokemon moveset and disabling moveset override!"); } const pokemon = this.game.scene.getPlayerField()[pkmIndex]; From 9926a6e799efa9db2e5789842168a07585776220 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Wed, 2 Jul 2025 23:27:13 +0200 Subject: [PATCH 4/7] [Docs] Add links to `CONTRIBUTING.md` for forking/cloning (#6060) [Docs] Add links to CONTRIBUTING.md for cloning repo --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aeb42114744..e759f795750 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,10 +26,11 @@ If you have the motivation and experience with Typescript/Javascript (or are wil - node: >=22.14.0 - [manage with pnpm](https://pnpm.io/cli/env) | [manage with fnm](https://github.com/Schniz/fnm) | [manage with nvm](https://github.com/nvm-sh/nvm) - pnpm: 10.x - [how to install](https://pnpm.io/installation) (not recommended to install via `npm` on Windows native) | [alternate method - volta.sh](https://volta.sh/) +- The repository [forked](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) and [cloned](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) locally on your device ### Running Locally -1. Clone the repo and in the root directory run `pnpm install` +1. Run `pnpm install` from the repository root - *if you run into any errors, reach out in the **#dev-corner** channel on Discord* 2. Run `pnpm start:dev` to locally run the project at `localhost:8000` From e20313e22c86341335378fa468f597220d5e4cc8 Mon Sep 17 00:00:00 2001 From: damocleas Date: Thu, 3 Jul 2025 20:05:05 -0400 Subject: [PATCH 5/7] [i18n] Update Locales update locales, hasn't been done in a while --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index fade123e20f..aa94b0b6826 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit fade123e20ff951e199d7c0466686fe8c5511643 +Subproject commit aa94b0b68265c26f728d154998582bb629f2b850 From f6a434689c2b02d3a445de87bdf88acdad7b0f70 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Fri, 4 Jul 2025 06:04:59 +0200 Subject: [PATCH 6/7] [Balance] Berry Juice and Old Gateau do not depend on the instance https://github.com/pagefaultgames/pokerogue/pull/6016 * Refactored items and respective MEs * Changed icon names, added bad berry juice, fixed locales * Berry juice uses a number parameter again, allowing to convert from old saves without a migrator * Updated encounter with correct sprite * Update src/data/mystery-encounters/encounters/weird-dream-encounter.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Replaced bad berry juice icon * Repacked atlas * Re-export item atlas --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Madmadness65 --- public/images/items.json | 8755 +++++++++-------- public/images/items.png | Bin 59346 -> 58883 bytes public/images/items/berry_juice_bad.png | Bin 0 -> 327 bytes .../{berry_juice.png => berry_juice_good.png} | Bin .../encounters/the-strong-stuff-encounter.ts | 6 +- .../encounters/weird-dream-encounter.ts | 31 +- .../utils/encounter-pokemon-utils.ts | 4 +- src/modifier/modifier-type.ts | 75 +- src/modifier/modifier.ts | 50 +- 9 files changed, 4437 insertions(+), 4484 deletions(-) create mode 100644 public/images/items/berry_juice_bad.png rename public/images/items/{berry_juice.png => berry_juice_good.png} (100%) diff --git a/public/images/items.json b/public/images/items.json index 4312f2a58c4..bde8d38e26c 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,8 +4,8 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 432, - "h": 432 + "w": 434, + "h": 434 }, "scale": 1, "frames": [ @@ -409,7 +409,7 @@ } }, { - "filename": "choice_specs", + "filename": "chipped_pot", "rotated": false, "trimmed": true, "sourceSize": { @@ -417,16 +417,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 + "x": 3, + "y": 6, + "w": 26, + "h": 20 }, "frame": { "x": 0, "y": 414, - "w": 24, - "h": 18 + "w": 26, + "h": 20 } }, { @@ -598,7 +598,7 @@ } }, { - "filename": "chipped_pot", + "filename": "cracked_pot", "rotated": false, "trimmed": true, "sourceSize": { @@ -618,27 +618,6 @@ "h": 20 } }, - { - "filename": "cracked_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 26, - "h": 20 - }, - "frame": { - "x": 358, - "y": 0, - "w": 26, - "h": 20 - } - }, { "filename": "legend_plate", "rotated": false, @@ -654,14 +633,35 @@ "h": 20 }, "frame": { - "x": 384, + "x": 358, "y": 0, "w": 25, "h": 20 } }, { - "filename": "big_root", + "filename": "mystical_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 25, + "h": 23 + }, + "frame": { + "x": 383, + "y": 0, + "w": 25, + "h": 23 + } + }, + { + "filename": "blank_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -671,13 +671,13 @@ "spriteSourceSize": { "x": 4, "y": 4, - "w": 23, + "w": 24, "h": 24 }, "frame": { - "x": 409, + "x": 408, "y": 0, - "w": 23, + "w": 24, "h": 24 } }, @@ -829,7 +829,7 @@ } }, { - "filename": "blank_plate", + "filename": "big_root", "rotated": false, "trimmed": true, "sourceSize": { @@ -839,13 +839,13 @@ "spriteSourceSize": { "x": 4, "y": 4, - "w": 24, + "w": 23, "h": 24 }, "frame": { "x": 22, "y": 290, - "w": 24, + "w": 23, "h": 24 } }, @@ -934,7 +934,7 @@ } }, { - "filename": "exp_balance", + "filename": "fist_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -943,15 +943,15 @@ }, "spriteSourceSize": { "x": 4, - "y": 5, + "y": 4, "w": 24, - "h": 22 + "h": 24 }, "frame": { - "x": 24, + "x": 26, "y": 410, "w": 24, - "h": 22 + "h": 24 } }, { @@ -997,7 +997,7 @@ } }, { - "filename": "mystical_rock", + "filename": "choice_specs", "rotated": false, "trimmed": true, "sourceSize": { @@ -1006,15 +1006,15 @@ }, "spriteSourceSize": { "x": 4, - "y": 5, - "w": 25, - "h": 23 + "y": 8, + "w": 24, + "h": 18 }, "frame": { "x": 59, "y": 53, - "w": 25, - "h": 23 + "w": 24, + "h": 18 } }, { @@ -1081,7 +1081,7 @@ } }, { - "filename": "fist_plate", + "filename": "flame_plate", "rotated": false, "trimmed": true, "sourceSize": { @@ -1102,7 +1102,7 @@ } }, { - "filename": "flame_plate", + "filename": "focus_band", "rotated": false, "trimmed": true, "sourceSize": { @@ -1123,7 +1123,7 @@ } }, { - "filename": "focus_band", + "filename": "golden_punch", "rotated": false, "trimmed": true, "sourceSize": { @@ -1144,7 +1144,7 @@ } }, { - "filename": "golden_punch", + "filename": "gracidea", "rotated": false, "trimmed": true, "sourceSize": { @@ -1165,7 +1165,7 @@ } }, { - "filename": "gracidea", + "filename": "grip_claw", "rotated": false, "trimmed": true, "sourceSize": { @@ -1185,27 +1185,6 @@ "h": 24 } }, - { - "filename": "grip_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 55, - "y": 76, - "w": 24, - "h": 24 - } - }, { "filename": "icicle_plate", "rotated": false, @@ -1221,8 +1200,8 @@ "h": 24 }, "frame": { - "x": 55, - "y": 100, + "x": 45, + "y": 278, "w": 24, "h": 24 } @@ -1243,7 +1222,7 @@ }, "frame": { "x": 46, - "y": 278, + "y": 302, "w": 24, "h": 24 } @@ -1264,7 +1243,7 @@ }, "frame": { "x": 46, - "y": 302, + "y": 326, "w": 24, "h": 24 } @@ -1285,7 +1264,7 @@ }, "frame": { "x": 46, - "y": 326, + "y": 350, "w": 24, "h": 24 } @@ -1306,13 +1285,13 @@ }, "frame": { "x": 46, - "y": 350, + "y": 374, "w": 24, "h": 24 } }, { - "filename": "lucky_punch_master", + "filename": "silver_powder", "rotated": false, "trimmed": true, "sourceSize": { @@ -1321,14 +1300,119 @@ }, "spriteSourceSize": { "x": 4, - "y": 4, + "y": 11, "w": 24, + "h": 15 + }, + "frame": { + "x": 48, + "y": 71, + "w": 24, + "h": 15 + } + }, + { + "filename": "elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, "h": 24 }, "frame": { - "x": 46, - "y": 374, - "w": 24, + "x": 55, + "y": 86, + "w": 18, + "h": 24 + } + }, + { + "filename": "ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 55, + "y": 110, + "w": 18, + "h": 24 + } + }, + { + "filename": "full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 60, + "y": 134, + "w": 18, + "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": 63, + "y": 158, + "w": 16, + "h": 24 + } + }, + { + "filename": "iron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 63, + "y": 182, + "w": 16, "h": 24 } }, @@ -1347,12 +1431,33 @@ "h": 24 }, "frame": { - "x": 48, - "y": 398, + "x": 68, + "y": 206, "w": 23, "h": 24 } }, + { + "filename": "lucky_punch_master", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 68, + "y": 230, + "w": 24, + "h": 24 + } + }, { "filename": "lucky_punch_ultra", "rotated": false, @@ -1368,8 +1473,8 @@ "h": 24 }, "frame": { - "x": 60, - "y": 124, + "x": 68, + "y": 254, "w": 24, "h": 24 } @@ -1389,8 +1494,8 @@ "h": 24 }, "frame": { - "x": 63, - "y": 148, + "x": 69, + "y": 278, "w": 24, "h": 24 } @@ -1410,33 +1515,12 @@ "h": 24 }, "frame": { - "x": 63, - "y": 172, + "x": 70, + "y": 302, "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": 68, - "y": 196, - "w": 22, - "h": 24 - } - }, { "filename": "mind_plate", "rotated": false, @@ -1452,8 +1536,8 @@ "h": 24 }, "frame": { - "x": 68, - "y": 220, + "x": 70, + "y": 326, "w": 24, "h": 24 } @@ -1473,8 +1557,8 @@ "h": 24 }, "frame": { - "x": 68, - "y": 244, + "x": 70, + "y": 350, "w": 24, "h": 24 } @@ -1495,7 +1579,7 @@ }, "frame": { "x": 70, - "y": 268, + "y": 374, "w": 24, "h": 24 } @@ -1515,665 +1599,14 @@ "h": 24 }, "frame": { - "x": 70, - "y": 292, + "x": 50, + "y": 398, "w": 24, "h": 24 } }, { - "filename": "scanner", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 70, - "y": 316, - "w": 24, - "h": 24 - } - }, - { - "filename": "silk_scarf", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 70, - "y": 340, - "w": 24, - "h": 24 - } - }, - { - "filename": "sky_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 70, - "y": 364, - "w": 24, - "h": 24 - } - }, - { - "filename": "reveal_glass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 71, - "y": 388, - "w": 23, - "h": 24 - } - }, - { - "filename": "icy_reins_of_unity", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 71, - "y": 412, - "w": 24, - "h": 20 - } - }, - { - "filename": "elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 79, - "y": 76, - "w": 18, - "h": 24 - } - }, - { - "filename": "ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 79, - "y": 100, - "w": 18, - "h": 24 - } - }, - { - "filename": "full_restore", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 84, - "y": 124, - "w": 18, - "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": 87, - "y": 148, - "w": 16, - "h": 24 - } - }, - { - "filename": "iron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 87, - "y": 172, - "w": 16, - "h": 24 - } - }, - { - "filename": "lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 90, - "y": 196, - "w": 17, - "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": 92, - "y": 220, - "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": 92, - "y": 244, - "w": 18, - "h": 24 - } - }, - { - "filename": "max_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 94, - "y": 268, - "w": 17, - "h": 24 - } - }, - { - "filename": "max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 94, - "y": 292, - "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": 94, - "y": 316, - "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": 94, - "y": 340, - "w": 21, - "h": 24 - } - }, - { - "filename": "splash_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 94, - "y": 364, - "w": 24, - "h": 24 - } - }, - { - "filename": "spooky_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 94, - "y": 388, - "w": 24, - "h": 24 - } - }, - { - "filename": "metal_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 95, - "y": 412, - "w": 24, - "h": 20 - } - }, - { - "filename": "berry_pouch", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 84, - "y": 53, - "w": 23, - "h": 23 - } - }, - { - "filename": "max_repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 97, - "y": 76, - "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": 97, - "y": 100, - "w": 16, - "h": 24 - } - }, - { - "filename": "pp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 102, - "y": 124, - "w": 16, - "h": 24 - } - }, - { - "filename": "protein", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 103, - "y": 148, - "w": 16, - "h": 24 - } - }, - { - "filename": "red_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 20, - "h": 24 - }, - "frame": { - "x": 103, - "y": 172, - "w": 20, - "h": 24 - } - }, - { - "filename": "repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 107, - "y": 196, - "w": 16, - "h": 24 - } - }, - { - "filename": "stone_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 110, - "y": 220, - "w": 24, - "h": 24 - } - }, - { - "filename": "sun_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 110, - "y": 244, - "w": 24, - "h": 24 - } - }, - { - "filename": "toxic_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 111, - "y": 268, - "w": 24, - "h": 24 - } - }, - { - "filename": "zap_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 112, - "y": 292, - "w": 24, - "h": 24 - } - }, - { - "filename": "black_belt", + "filename": "max_revive", "rotated": false, "trimmed": true, "sourceSize": { @@ -2184,117 +1617,12 @@ "x": 5, "y": 4, "w": 22, - "h": 23 - }, - "frame": { - "x": 115, - "y": 316, - "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": 115, - "y": 339, - "w": 22, - "h": 23 - } - }, - { - "filename": "clefairy_doll", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 118, - "y": 362, - "w": 24, - "h": 23 - } - }, - { - "filename": "coin_case", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 118, - "y": 385, - "w": 24, - "h": 23 - } - }, - { - "filename": "super_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, "h": 24 }, "frame": { - "x": 119, - "y": 408, - "w": 17, - "h": 24 - } - }, - { - "filename": "super_repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 136, - "y": 408, - "w": 16, + "x": 74, + "y": 398, + "w": 22, "h": 24 } }, @@ -2320,7 +1648,7 @@ } }, { - "filename": "black_glasses", + "filename": "lure", "rotated": false, "trimmed": true, "sourceSize": { @@ -2328,20 +1656,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 + "x": 8, + "y": 4, + "w": 17, + "h": 24 }, "frame": { "x": 86, - "y": 36, - "w": 23, - "h": 17 + "y": 27, + "w": 17, + "h": 24 } }, { - "filename": "expert_belt", + "filename": "scanner", "rotated": false, "trimmed": true, "sourceSize": { @@ -2352,15 +1680,78 @@ "x": 4, "y": 4, "w": 24, + "h": 24 + }, + "frame": { + "x": 103, + "y": 26, + "w": 24, + "h": 24 + } + }, + { + "filename": "clefairy_doll", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, "h": 23 }, "frame": { - "x": 109, - "y": 26, + "x": 127, + "y": 36, "w": 24, "h": 23 } }, + { + "filename": "coin_case", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 103, + "y": 50, + "w": 24, + "h": 23 + } + }, + { + "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, @@ -2376,12 +1767,264 @@ "h": 18 }, "frame": { - "x": 133, - "y": 36, + "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": 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": "silk_scarf", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 169, + "y": 21, + "w": 24, + "h": 24 + } + }, + { + "filename": "sky_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 193, + "y": 21, + "w": 24, + "h": 24 + } + }, + { + "filename": "splash_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 217, + "y": 21, + "w": 24, + "h": 24 + } + }, + { + "filename": "spooky_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 241, + "y": 21, + "w": 24, + "h": 24 + } + }, + { + "filename": "stone_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 265, + "y": 21, + "w": 24, + "h": 24 + } + }, + { + "filename": "sun_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 289, + "y": 21, + "w": 24, + "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": 313, + "y": 21, + "w": 21, + "h": 24 + } + }, + { + "filename": "toxic_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 334, + "y": 20, + "w": 24, + "h": 24 + } + }, + { + "filename": "zap_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 358, + "y": 20, + "w": 24, + "h": 24 + } + }, + { + "filename": "exp_balance", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 382, + "y": 23, + "w": 24, + "h": 22 + } + }, { "filename": "exp_share", "rotated": false, @@ -2397,14 +2040,35 @@ "h": 22 }, "frame": { - "x": 109, - "y": 49, + "x": 406, + "y": 24, "w": 24, "h": 22 } }, { - "filename": "golden_net", + "filename": "candy_overlay", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 12, + "w": 16, + "h": 15 + }, + "frame": { + "x": 169, + "y": 45, + "w": 16, + "h": 15 + } + }, + { + "filename": "expert_belt", "rotated": false, "trimmed": true, "sourceSize": { @@ -2413,98 +2077,14 @@ }, "spriteSourceSize": { "x": 4, - "y": 5, - "w": 24, - "h": 21 - }, - "frame": { - "x": 133, - "y": 54, - "w": 24, - "h": 21 - } - }, - { - "filename": "mystic_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 20, - "h": 23 - }, - "frame": { - "x": 113, - "y": 71, - "w": 20, - "h": 23 - } - }, - { - "filename": "dark_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, "y": 4, - "w": 22, + "w": 24, "h": 23 }, "frame": { - "x": 113, - "y": 94, - "w": 22, - "h": 23 - } - }, - { - "filename": "coupon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 133, - "y": 75, - "w": 23, - "h": 19 - } - }, - { - "filename": "dragon_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 135, - "y": 94, - "w": 21, + "x": 185, + "y": 45, + "w": 24, "h": 23 } }, @@ -2523,75 +2103,12 @@ "h": 23 }, "frame": { - "x": 118, - "y": 117, + "x": 209, + "y": 45, "w": 24, "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": 119, - "y": 140, - "w": 23, - "h": 23 - } - }, - { - "filename": "unknown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 142, - "y": 117, - "w": 16, - "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": 142, - "y": 141, - "w": 18, - "h": 22 - } - }, { "filename": "leppa_berry", "rotated": false, @@ -2607,8 +2124,8 @@ "h": 23 }, "frame": { - "x": 123, - "y": 163, + "x": 233, + "y": 45, "w": 24, "h": 23 } @@ -2628,96 +2145,12 @@ "h": 23 }, "frame": { - "x": 123, - "y": 186, + "x": 257, + "y": 45, "w": 24, "h": 23 } }, - { - "filename": "relic_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 15, - "h": 11 - }, - "frame": { - "x": 123, - "y": 209, - "w": 15, - "h": 11 - } - }, - { - "filename": "zinc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 147, - "y": 163, - "w": 16, - "h": 24 - } - }, - { - "filename": "bug_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 147, - "y": 187, - "w": 22, - "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": 138, - "y": 209, - "w": 24, - "h": 22 - } - }, { "filename": "twisted_spoon", "rotated": false, @@ -2733,56 +2166,14 @@ "h": 23 }, "frame": { - "x": 134, - "y": 231, + "x": 281, + "y": 45, "w": 24, "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": 135, - "y": 254, - "w": 23, - "h": 23 - } - }, - { - "filename": "silver_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 11, - "w": 24, - "h": 15 - }, - "frame": { - "x": 135, - "y": 277, - "w": 24, - "h": 15 - } - }, - { - "filename": "leek", + "filename": "berry_pouch", "rotated": false, "trimmed": true, "sourceSize": { @@ -2796,98 +2187,14 @@ "h": 23 }, "frame": { - "x": 136, - "y": 292, + "x": 305, + "y": 45, "w": 23, "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": 137, - "y": 315, - "w": 22, - "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": 137, - "y": 338, - "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": 142, - "y": 361, - "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": 142, - "y": 384, - "w": 22, - "h": 23 - } - }, - { - "filename": "fire_stone", + "filename": "black_belt", "rotated": false, "trimmed": true, "sourceSize": { @@ -2896,19 +2203,19 @@ }, "spriteSourceSize": { "x": 5, - "y": 5, + "y": 4, "w": 22, "h": 23 }, "frame": { - "x": 152, - "y": 407, + "x": 328, + "y": 45, "w": 22, "h": 23 } }, { - "filename": "charcoal", + "filename": "reveal_glass", "rotated": false, "trimmed": true, "sourceSize": { @@ -2916,20 +2223,83 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, + "x": 4, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 350, + "y": 44, + "w": 23, + "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": 373, + "y": 45, + "w": 23, + "h": 23 + } + }, + { + "filename": "peat_block", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, "y": 5, - "w": 22, + "w": 24, "h": 22 }, "frame": { - "x": 162, - "y": 209, - "w": 22, + "x": 396, + "y": 46, + "w": 24, "h": 22 } }, { - "filename": "macho_brace", + "filename": "revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 12, + "h": 17 + }, + "frame": { + "x": 420, + "y": 46, + "w": 12, + "h": 17 + } + }, + { + "filename": "golden_net", "rotated": false, "trimmed": true, "sourceSize": { @@ -2939,287 +2309,14 @@ "spriteSourceSize": { "x": 4, "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 158, - "y": 231, - "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": 158, - "y": 254, - "w": 23, - "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": 159, - "y": 277, - "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": 159, - "y": 300, - "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": 159, - "y": 323, - "w": 22, - "h": 23 - } - }, - { - "filename": "candy_overlay", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 12, - "w": 16, - "h": 15 - }, - "frame": { - "x": 159, - "y": 346, - "w": 16, - "h": 15 - } - }, - { - "filename": "full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 15, - "h": 23 - }, - "frame": { - "x": 164, - "y": 361, - "w": 15, - "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": 164, - "y": 384, - "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": 174, - "y": 407, - "w": 22, - "h": 23 - } - }, - { - "filename": "hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 157, - "y": 36, - "w": 17, - "h": 23 - } - }, - { - "filename": "adamant_crystal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, + "w": 24, "h": 21 }, - "frame": { - "x": 157, - "y": 59, - "w": 23, - "h": 21 - } - }, - { - "filename": "rarer_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 156, - "y": 80, - "w": 23, - "h": 23 - } - }, - { - "filename": "healing_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 22 - }, "frame": { "x": 174, - "y": 21, - "w": 23, - "h": 22 - } - }, - { - "filename": "rusted_sword", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 197, - "y": 21, - "w": 23, - "h": 22 + "y": 68, + "w": 24, + "h": 21 } }, { @@ -3237,8 +2334,8 @@ "h": 21 }, "frame": { - "x": 220, - "y": 21, + "x": 198, + "y": 68, "w": 23, "h": 21 } @@ -3258,14 +2355,35 @@ "h": 21 }, "frame": { - "x": 243, - "y": 21, + "x": 221, + "y": 68, "w": 23, "h": 21 } }, { - "filename": "moon_stone", + "filename": "griseous_core", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 244, + "y": 68, + "w": 23, + "h": 23 + } + }, + { + "filename": "leek", "rotated": false, "trimmed": true, "sourceSize": { @@ -3274,19 +2392,19 @@ }, "spriteSourceSize": { "x": 4, - "y": 6, + "y": 5, "w": 23, - "h": 21 + "h": 23 }, "frame": { - "x": 266, - "y": 21, + "x": 267, + "y": 68, "w": 23, - "h": 21 + "h": 23 } }, { - "filename": "n_lunarizer", + "filename": "macho_brace", "rotated": false, "trimmed": true, "sourceSize": { @@ -3295,19 +2413,103 @@ }, "spriteSourceSize": { "x": 4, - "y": 6, + "y": 5, "w": 23, - "h": 21 + "h": 23 }, "frame": { - "x": 289, - "y": 21, + "x": 290, + "y": 68, "w": 23, - "h": 21 + "h": 23 } }, { - "filename": "berry_juice", + "filename": "rare_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 313, + "y": 68, + "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": 336, + "y": 68, + "w": 23, + "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": 359, + "y": 68, + "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": 381, + "y": 68, + "w": 22, + "h": 23 + } + }, + { + "filename": "dragon_fang", "rotated": false, "trimmed": true, "sourceSize": { @@ -3317,18 +2519,18 @@ "spriteSourceSize": { "x": 5, "y": 5, - "w": 22, - "h": 21 + "w": 21, + "h": 23 }, "frame": { - "x": 312, - "y": 21, - "w": 22, - "h": 21 + "x": 403, + "y": 68, + "w": 21, + "h": 23 } }, { - "filename": "dark_memory", + "filename": "relic_gold", "rotated": false, "trimmed": true, "sourceSize": { @@ -3336,20 +2538,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 + "x": 9, + "y": 11, + "w": 15, + "h": 11 }, "frame": { - "x": 334, - "y": 20, - "w": 22, - "h": 22 + "x": 50, + "y": 422, + "w": 15, + "h": 11 } }, { - "filename": "dire_hit", + "filename": "icy_reins_of_unity", "rotated": false, "trimmed": true, "sourceSize": { @@ -3357,41 +2559,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 + "x": 4, + "y": 7, + "w": 24, + "h": 20 }, "frame": { - "x": 356, - "y": 20, - "w": 22, - "h": 22 + "x": 91, + "y": 73, + "w": 24, + "h": 20 } }, { - "filename": "dna_splicers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 378, - "y": 20, - "w": 22, - "h": 22 - } - }, - { - "filename": "relic_band", + "filename": "max_ether", "rotated": false, "trimmed": true, "sourceSize": { @@ -3400,15 +2581,78 @@ }, "spriteSourceSize": { "x": 7, - "y": 9, - "w": 17, - "h": 16 + "y": 4, + "w": 18, + "h": 24 }, "frame": { - "x": 174, - "y": 43, - "w": 17, - "h": 16 + "x": 73, + "y": 73, + "w": 18, + "h": 24 + } + }, + { + "filename": "max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 73, + "y": 97, + "w": 18, + "h": 24 + } + }, + { + "filename": "dragon_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 91, + "y": 93, + "w": 22, + "h": 23 + } + }, + { + "filename": "metal_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 115, + "y": 77, + "w": 24, + "h": 20 } }, { @@ -3426,12 +2670,33 @@ "h": 20 }, "frame": { - "x": 191, - "y": 43, + "x": 113, + "y": 97, "w": 24, "h": 20 } }, + { + "filename": "berry_juice_bad", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 21 + }, + "frame": { + "x": 91, + "y": 116, + "w": 22, + "h": 21 + } + }, { "filename": "rusted_shield", "rotated": false, @@ -3447,12 +2712,264 @@ "h": 20 }, "frame": { - "x": 400, - "y": 24, + "x": 113, + "y": 117, "w": 24, "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": 78, + "y": 137, + "w": 23, + "h": 21 + } + }, + { + "filename": "electric_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 79, + "y": 158, + "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": 101, + "y": 137, + "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": 79, + "y": 181, + "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": 101, + "y": 160, + "w": 22, + "h": 23 + } + }, + { + "filename": "berry_juice_good", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 21 + }, + "frame": { + "x": 101, + "y": 183, + "w": 22, + "h": 21 + } + }, + { + "filename": "fire_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 91, + "y": 204, + "w": 22, + "h": 23 + } + }, + { + "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": 227, + "w": 21, + "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": 92, + "y": 251, + "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": 93, + "y": 274, + "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": 94, + "y": 297, + "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": 94, + "y": 320, + "w": 22, + "h": 23 + } + }, { "filename": "ice_tera_shard", "rotated": false, @@ -3468,35 +2985,14 @@ "h": 23 }, "frame": { - "x": 158, - "y": 103, + "x": 94, + "y": 343, "w": 22, "h": 23 } }, { - "filename": "eviolite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 158, - "y": 126, - "w": 15, - "h": 15 - } - }, - { - "filename": "dragon_memory", + "filename": "never_melt_ice", "rotated": false, "trimmed": true, "sourceSize": { @@ -3507,15 +3003,120 @@ "x": 5, "y": 5, "w": 22, + "h": 23 + }, + "frame": { + "x": 94, + "y": 366, + "w": 22, + "h": 23 + } + }, + { + "filename": "max_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 123, + "y": 137, + "w": 17, + "h": 24 + } + }, + { + "filename": "red_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 20, + "h": 24 + }, + "frame": { + "x": 123, + "y": 161, + "w": 20, + "h": 24 + } + }, + { + "filename": "binding_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 123, + "y": 185, + "w": 23, + "h": 20 + } + }, + { + "filename": "healing_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 23, "h": 22 }, "frame": { - "x": 160, - "y": 141, - "w": 22, + "x": 113, + "y": 205, + "w": 23, "h": 22 } }, + { + "filename": "normal_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": "lansat_berry", "rotated": false, @@ -3531,8 +3132,8 @@ "h": 23 }, "frame": { - "x": 163, - "y": 163, + "x": 114, + "y": 250, "w": 21, "h": 23 } @@ -3552,77 +3153,14 @@ "h": 23 }, "frame": { - "x": 169, - "y": 186, + "x": 115, + "y": 273, "w": 21, "h": 23 } }, { - "filename": "prism_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 173, - "y": 126, - "w": 15, - "h": 15 - } - }, - { - "filename": "electirizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 182, - "y": 141, - "w": 22, - "h": 22 - } - }, - { - "filename": "never_melt_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 184, - "y": 163, - "w": 22, - "h": 23 - } - }, - { - "filename": "normal_tera_shard", + "filename": "mystic_water", "rotated": false, "trimmed": true, "sourceSize": { @@ -3631,36 +3169,15 @@ }, "spriteSourceSize": { "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 190, - "y": 186, - "w": 22, - "h": 23 - } - }, - { - "filename": "electric_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, "y": 5, - "w": 22, - "h": 22 + "w": 20, + "h": 23 }, "frame": { - "x": 184, - "y": 209, - "w": 22, - "h": 22 + "x": 116, + "y": 296, + "w": 20, + "h": 23 } }, { @@ -3678,8 +3195,8 @@ "h": 23 }, "frame": { - "x": 181, - "y": 231, + "x": 116, + "y": 319, "w": 22, "h": 23 } @@ -3699,8 +3216,8 @@ "h": 23 }, "frame": { - "x": 181, - "y": 254, + "x": 116, + "y": 342, "w": 22, "h": 23 } @@ -3720,8 +3237,8 @@ "h": 23 }, "frame": { - "x": 181, - "y": 277, + "x": 116, + "y": 365, "w": 22, "h": 23 } @@ -3741,12 +3258,33 @@ "h": 23 }, "frame": { - "x": 181, - "y": 300, + "x": 96, + "y": 389, "w": 22, "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": 96, + "y": 412, + "w": 23, + "h": 22 + } + }, { "filename": "rock_tera_shard", "rotated": false, @@ -3762,54 +3300,12 @@ "h": 23 }, "frame": { - "x": 181, - "y": 323, + "x": 118, + "y": 388, "w": 22, "h": 23 } }, - { - "filename": "sacred_ash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 180, - "y": 63, - "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": 179, - "y": 83, - "w": 24, - "h": 20 - } - }, { "filename": "steel_tera_shard", "rotated": false, @@ -3825,14 +3321,14 @@ "h": 23 }, "frame": { - "x": 180, - "y": 103, + "x": 119, + "y": 411, "w": 22, "h": 23 } }, { - "filename": "apicot_berry", + "filename": "berry_pot", "rotated": false, "trimmed": true, "sourceSize": { @@ -3840,37 +3336,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 + "x": 7, + "y": 5, + "w": 18, + "h": 22 }, "frame": { - "x": 204, - "y": 63, - "w": 19, - "h": 20 - } - }, - { - "filename": "big_nugget", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 203, - "y": 83, - "w": 20, - "h": 20 + "x": 136, + "y": 205, + "w": 18, + "h": 22 } }, { @@ -3888,54 +3363,12 @@ "h": 23 }, "frame": { - "x": 202, - "y": 103, + "x": 135, + "y": 227, "w": 21, "h": 23 } }, - { - "filename": "binding_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 215, - "y": 43, - "w": 23, - "h": 20 - } - }, - { - "filename": "n_solarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 238, - "y": 42, - "w": 23, - "h": 21 - } - }, { "filename": "stellar_tera_shard", "rotated": false, @@ -3951,8 +3384,8 @@ "h": 23 }, "frame": { - "x": 223, - "y": 63, + "x": 135, + "y": 250, "w": 22, "h": 23 } @@ -3972,12 +3405,306 @@ "h": 23 }, "frame": { - "x": 223, - "y": 86, + "x": 136, + "y": 273, "w": 22, "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": 136, + "y": 296, + "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": 138, + "y": 319, + "w": 21, + "h": 23 + } + }, + { + "filename": "bug_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 138, + "y": 342, + "w": 22, + "h": 22 + } + }, + { + "filename": "charcoal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 138, + "y": 364, + "w": 22, + "h": 22 + } + }, + { + "filename": "dark_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 140, + "y": 386, + "w": 22, + "h": 22 + } + }, + { + "filename": "dire_hit", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 141, + "y": 408, + "w": 22, + "h": 22 + } + }, + { + "filename": "blue_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 154, + "y": 81, + "w": 20, + "h": 20 + } + }, + { + "filename": "full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, + "frame": { + "x": 139, + "y": 81, + "w": 15, + "h": 23 + } + }, + { + "filename": "super_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 137, + "y": 104, + "w": 17, + "h": 24 + } + }, + { + "filename": "dna_splicers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 154, + "y": 101, + "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": 176, + "y": 89, + "w": 22, + "h": 22 + } + }, + { + "filename": "electirizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 198, + "y": 89, + "w": 22, + "h": 22 + } + }, + { + "filename": "sacred_ash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 220, + "y": 89, + "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": 244, + "y": 91, + "w": 24, + "h": 20 + } + }, { "filename": "soft_sand", "rotated": false, @@ -3993,14 +3720,14 @@ "h": 20 }, "frame": { - "x": 261, - "y": 42, + "x": 268, + "y": 91, "w": 24, "h": 20 } }, { - "filename": "reviver_seed", + "filename": "n_lunarizer", "rotated": false, "trimmed": true, "sourceSize": { @@ -4008,20 +3735,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 8, + "x": 4, + "y": 6, "w": 23, - "h": 20 + "h": 21 }, "frame": { - "x": 285, - "y": 42, + "x": 292, + "y": 91, "w": 23, - "h": 20 + "h": 21 } }, { - "filename": "shell_bell", + "filename": "n_solarizer", "rotated": false, "trimmed": true, "sourceSize": { @@ -4029,16 +3756,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 7, + "x": 4, + "y": 6, "w": 23, - "h": 20 + "h": 21 }, "frame": { - "x": 308, - "y": 42, + "x": 315, + "y": 91, "w": 23, - "h": 20 + "h": 21 } }, { @@ -4056,8 +3783,8 @@ "h": 21 }, "frame": { - "x": 331, - "y": 42, + "x": 338, + "y": 91, "w": 23, "h": 21 } @@ -4077,12 +3804,33 @@ "h": 21 }, "frame": { - "x": 354, - "y": 42, + "x": 361, + "y": 91, "w": 22, "h": 21 } }, + { + "filename": "electric_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 383, + "y": 91, + "w": 22, + "h": 22 + } + }, { "filename": "enigma_berry", "rotated": false, @@ -4098,14 +3846,14 @@ "h": 22 }, "frame": { - "x": 376, - "y": 42, + "x": 405, + "y": 91, "w": 22, "h": 22 } }, { - "filename": "deep_sea_scale", + "filename": "black_glasses", "rotated": false, "trimmed": true, "sourceSize": { @@ -4113,16 +3861,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 + "x": 4, + "y": 8, + "w": 23, + "h": 17 }, "frame": { - "x": 398, - "y": 44, - "w": 22, - "h": 20 + "x": 176, + "y": 111, + "w": 23, + "h": 17 } }, { @@ -4140,35 +3888,14 @@ "h": 19 }, "frame": { - "x": 223, - "y": 109, + "x": 199, + "y": 111, "w": 22, "h": 19 } }, { - "filename": "potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 245, - "y": 63, - "w": 17, - "h": 23 - } - }, - { - "filename": "wide_lens", + "filename": "reviver_seed", "rotated": false, "trimmed": true, "sourceSize": { @@ -4177,439 +3904,19 @@ }, "spriteSourceSize": { "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 262, - "y": 62, - "w": 22, - "h": 23 - } - }, - { - "filename": "fairy_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 284, - "y": 62, - "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": 306, - "y": 62, - "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": 328, - "y": 63, - "w": 22, - "h": 22 - } - }, - { - "filename": "flying_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 350, - "y": 63, - "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": 245, - "y": 86, - "w": 18, - "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": 263, - "y": 85, - "w": 21, - "h": 23 - } - }, - { - "filename": "ganlon_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 284, - "y": 84, - "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": 306, - "y": 84, - "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": 328, - "y": 85, - "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": 350, - "y": 85, - "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": 372, - "y": 64, - "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": 394, - "y": 64, - "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": 372, - "y": 86, - "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": 394, - "y": 86, - "w": 22, - "h": 22 - } - }, - { - "filename": "mystery_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, "y": 8, - "w": 16, - "h": 18 - }, - "frame": { - "x": 416, - "y": 64, - "w": 16, - "h": 18 - } - }, - { - "filename": "abomasite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 416, - "y": 82, - "w": 16, - "h": 16 - } - }, - { - "filename": "absolite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 416, - "y": 98, - "w": 16, - "h": 16 - } - }, - { - "filename": "revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 12, - "h": 17 - }, - "frame": { - "x": 420, - "y": 44, - "w": 12, - "h": 17 - } - }, - { - "filename": "big_mushroom", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 19 - }, - "frame": { - "x": 245, - "y": 109, - "w": 19, - "h": 19 - } - }, - { - "filename": "blue_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, + "w": 23, "h": 20 }, "frame": { - "x": 264, - "y": 108, - "w": 20, + "x": 221, + "y": 109, + "w": 23, "h": 20 } }, { - "filename": "mini_black_hole", + "filename": "coupon", "rotated": false, "trimmed": true, "sourceSize": { @@ -4617,499 +3924,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 + "x": 4, + "y": 7, + "w": 23, + "h": 19 }, "frame": { - "x": 284, - "y": 106, - "w": 22, - "h": 22 - } - }, - { - "filename": "moon_flute", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 306, - "y": 106, - "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": 328, - "y": 107, - "w": 22, - "h": 21 - } - }, - { - "filename": "normal_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 350, - "y": 107, - "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": 372, - "y": 108, - "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": 394, - "y": 108, - "w": 22, - "h": 22 - } - }, - { - "filename": "aerodactylite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 416, - "y": 114, - "w": 16, - "h": 16 - } - }, - { - "filename": "psychic_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 179, - "y": 346, - "w": 22, - "h": 22 - } - }, - { - "filename": "aggronite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 179, - "y": 368, - "w": 16, - "h": 16 - } - }, - { - "filename": "super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 186, - "y": 384, - "w": 17, - "h": 23 - } - }, - { - "filename": "alakazite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 195, - "y": 368, - "w": 16, - "h": 16 - } - }, - { - "filename": "hard_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 201, - "y": 346, - "w": 20, - "h": 22 - } - }, - { - "filename": "leftovers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 15, - "h": 22 - }, - "frame": { - "x": 203, - "y": 384, - "w": 15, - "h": 22 - } - }, - { - "filename": "altarianite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 211, - "y": 368, - "w": 16, - "h": 16 - } - }, - { - "filename": "lock_capsule", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 218, - "y": 384, - "w": 19, - "h": 22 - } - }, - { - "filename": "metal_coat", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 196, - "y": 407, - "w": 19, - "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": 215, - "y": 406, - "w": 22, - "h": 22 - } - }, - { - "filename": "metronome", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 206, - "y": 209, - "w": 17, - "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": 203, - "y": 231, - "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": 203, - "y": 253, - "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": 203, - "y": 275, - "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": 203, - "y": 297, - "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": 203, - "y": 319, - "w": 22, - "h": 22 - } - }, - { - "filename": "quick_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 204, - "y": 126, - "w": 19, - "h": 21 + "x": 244, + "y": 111, + "w": 23, + "h": 19 } }, { @@ -5127,8 +3951,8 @@ "h": 19 }, "frame": { - "x": 223, - "y": 128, + "x": 267, + "y": 111, "w": 23, "h": 19 } @@ -5148,8 +3972,8 @@ "h": 19 }, "frame": { - "x": 246, - "y": 128, + "x": 290, + "y": 112, "w": 23, "h": 19 } @@ -5169,12 +3993,54 @@ "h": 19 }, "frame": { - "x": 269, - "y": 128, + "x": 313, + "y": 112, "w": 23, "h": 19 } }, + { + "filename": "shell_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 23, + "h": 20 + }, + "frame": { + "x": 336, + "y": 112, + "w": 23, + "h": 20 + } + }, + { + "filename": "deep_sea_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 359, + "y": 112, + "w": 22, + "h": 20 + } + }, { "filename": "blunder_policy", "rotated": false, @@ -5190,8 +4056,8 @@ "h": 19 }, "frame": { - "x": 292, - "y": 128, + "x": 381, + "y": 113, "w": 22, "h": 19 } @@ -5211,14 +4077,14 @@ "h": 19 }, "frame": { - "x": 314, - "y": 128, + "x": 403, + "y": 113, "w": 22, "h": 19 } }, { - "filename": "ampharosite", + "filename": "fairy_feather", "rotated": false, "trimmed": true, "sourceSize": { @@ -5226,16 +4092,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 5, + "y": 7, + "w": 22, + "h": 20 }, "frame": { - "x": 204, - "y": 147, - "w": 16, - "h": 16 + "x": 154, + "y": 123, + "w": 22, + "h": 20 } }, { @@ -5253,8 +4119,8 @@ "h": 17 }, "frame": { - "x": 220, - "y": 147, + "x": 176, + "y": 128, "w": 23, "h": 17 } @@ -5274,14 +4140,14 @@ "h": 17 }, "frame": { - "x": 243, - "y": 147, + "x": 199, + "y": 130, "w": 23, "h": 17 } }, { - "filename": "douse_drive", + "filename": "fairy_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -5289,16 +4155,184 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 222, + "y": 129, + "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": 244, + "y": 130, + "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": 266, - "y": 147, - "w": 23, - "h": 17 + "y": 130, + "w": 22, + "h": 22 + } + }, + { + "filename": "flying_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 288, + "y": 131, + "w": 22, + "h": 22 + } + }, + { + "filename": "ganlon_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 310, + "y": 131, + "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": 332, + "y": 132, + "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": 354, + "y": 132, + "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": 376, + "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": 398, + "y": 132, + "w": 22, + "h": 22 } }, { @@ -5316,14 +4350,140 @@ "h": 18 }, "frame": { - "x": 289, - "y": 147, + "x": 140, + "y": 143, "w": 23, "h": 18 } }, { - "filename": "fairy_feather", + "filename": "max_repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 143, + "y": 161, + "w": 16, + "h": 24 + } + }, + { + "filename": "apicot_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 146, + "y": 185, + "w": 19, + "h": 20 + } + }, + { + "filename": "hard_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 154, + "y": 205, + "w": 20, + "h": 22 + } + }, + { + "filename": "sachet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 18, + "h": 23 + }, + "frame": { + "x": 156, + "y": 227, + "w": 18, + "h": 23 + } + }, + { + "filename": "hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 157, + "y": 250, + "w": 17, + "h": 23 + } + }, + { + "filename": "pp_max", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 158, + "y": 273, + "w": 16, + "h": 24 + } + }, + { + "filename": "ice_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -5332,19 +4492,586 @@ }, "spriteSourceSize": { "x": 5, - "y": 7, + "y": 5, "w": 22, + "h": 22 + }, + "frame": { + "x": 158, + "y": 297, + "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": 159, + "y": 319, + "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": 160, + "y": 341, + "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": 160, + "y": 363, + "w": 22, + "h": 22 + } + }, + { + "filename": "moon_flute", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 162, + "y": 385, + "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": 163, + "y": 407, + "w": 22, + "h": 22 + } + }, + { + "filename": "pp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 159, + "y": 161, + "w": 16, + "h": 24 + } + }, + { + "filename": "candy_jar", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, "h": 20 }, "frame": { - "x": 312, + "x": 165, + "y": 185, + "w": 19, + "h": 20 + } + }, + { + "filename": "protein", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 174, + "y": 205, + "w": 16, + "h": 24 + } + }, + { + "filename": "repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 174, + "y": 229, + "w": 16, + "h": 24 + } + }, + { + "filename": "super_repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 174, + "y": 253, + "w": 16, + "h": 24 + } + }, + { + "filename": "gb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 174, + "y": 277, + "w": 20, + "h": 20 + } + }, + { + "filename": "leftovers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 15, + "h": 22 + }, + "frame": { + "x": 180, + "y": 297, + "w": 15, + "h": 22 + } + }, + { + "filename": "lock_capsule", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 181, + "y": 319, + "w": 19, + "h": 22 + } + }, + { + "filename": "metal_coat", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 182, + "y": 341, + "w": 19, + "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": 182, + "y": 363, + "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": 184, + "y": 385, + "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": 185, + "y": 407, + "w": 22, + "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": 163, + "y": 145, + "w": 17, + "h": 16 + } + }, + { + "filename": "unknown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 175, + "y": 161, + "w": 16, + "h": 24 + } + }, + { + "filename": "abomasite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 180, + "y": 145, + "w": 16, + "h": 16 + } + }, + { + "filename": "douse_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 196, "y": 147, + "w": 23, + "h": 17 + } + }, + { + "filename": "liechi_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 191, + "y": 164, + "w": 22, + "h": 21 + } + }, + { + "filename": "malicious_armor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 184, + "y": 185, "w": 22, "h": 20 } }, { - "filename": "sun_flute", + "filename": "zinc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 190, + "y": 205, + "w": 16, + "h": 24 + } + }, + { + "filename": "potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 190, + "y": 229, + "w": 17, + "h": 23 + } + }, + { + "filename": "super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 190, + "y": 252, + "w": 17, + "h": 23 + } + }, + { + "filename": "metronome", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 194, + "y": 275, + "w": 17, + "h": 22 + } + }, + { + "filename": "rock_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -5358,14 +5085,14 @@ "h": 22 }, "frame": { - "x": 206, - "y": 164, + "x": 195, + "y": 297, "w": 22, "h": 22 } }, { - "filename": "thick_club", + "filename": "scroll_of_darkness", "rotated": false, "trimmed": true, "sourceSize": { @@ -5379,14 +5106,14 @@ "h": 22 }, "frame": { - "x": 228, - "y": 164, + "x": 200, + "y": 319, "w": 22, "h": 22 } }, { - "filename": "thunder_stone", + "filename": "scroll_of_waters", "rotated": false, "trimmed": true, "sourceSize": { @@ -5400,14 +5127,14 @@ "h": 22 }, "frame": { - "x": 212, - "y": 186, + "x": 201, + "y": 341, "w": 22, "h": 22 } }, { - "filename": "tm_bug", + "filename": "shed_shell", "rotated": false, "trimmed": true, "sourceSize": { @@ -5421,50 +5148,8 @@ "h": 22 }, "frame": { - "x": 250, - "y": 164, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_dark", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 234, - "y": 186, - "w": 22, - "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": 223, - "y": 208, + "x": 204, + "y": 363, "w": 22, "h": 22 } @@ -5484,14 +5169,14 @@ "h": 22 }, "frame": { - "x": 225, - "y": 230, + "x": 206, + "y": 385, "w": 20, "h": 22 } }, { - "filename": "tm_electric", + "filename": "starf_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -5505,978 +5190,12 @@ "h": 22 }, "frame": { - "x": 225, - "y": 252, + "x": 207, + "y": 407, "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": 225, - "y": 274, - "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": 225, - "y": 296, - "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": 225, - "y": 318, - "w": 22, - "h": 22 - } - }, - { - "filename": "soothe_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 272, - "y": 164, - "w": 17, - "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": 256, - "y": 186, - "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": 245, - "y": 208, - "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": 245, - "y": 230, - "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": 289, - "y": 165, - "w": 22, - "h": 21 - } - }, - { - "filename": "tm_ground", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 278, - "y": 186, - "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": 267, - "y": 208, - "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": 267, - "y": 230, - "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": 247, - "y": 252, - "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": 247, - "y": 274, - "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": 247, - "y": 296, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_steel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 247, - "y": 318, - "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": 269, - "y": 252, - "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": 269, - "y": 274, - "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": 269, - "y": 296, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_accuracy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 269, - "y": 318, - "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": 311, - "y": 167, - "w": 22, - "h": 20 - } - }, - { - "filename": "x_attack", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 289, - "y": 208, - "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": 289, - "y": 230, - "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": 300, - "y": 187, - "w": 22, - "h": 21 - } - }, - { - "filename": "x_sp_atk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 291, - "y": 252, - "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": 291, - "y": 274, - "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": 291, - "y": 296, - "w": 22, - "h": 22 - } - }, - { - "filename": "tart_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 291, - "y": 318, - "w": 22, - "h": 21 - } - }, - { - "filename": "dawn_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 21 - }, - "frame": { - "x": 322, - "y": 187, - "w": 20, - "h": 21 - } - }, - { - "filename": "dusk_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 311, - "y": 208, - "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": 311, - "y": 229, - "w": 21, - "h": 21 - } - }, - { - "filename": "flying_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 20, - "h": 21 - }, - "frame": { - "x": 313, - "y": 250, - "w": 20, - "h": 21 - } - }, - { - "filename": "shiny_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 313, - "y": 271, - "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": 313, - "y": 292, - "w": 21, - "h": 21 - } - }, - { - "filename": "tera_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 313, - "y": 313, - "w": 22, - "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": 332, - "y": 208, - "w": 19, - "h": 21 - } - }, - { - "filename": "candy_jar", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 332, - "y": 229, - "w": 19, - "h": 20 - } - }, - { - "filename": "gb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 333, - "y": 249, - "w": 20, - "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": 334, - "y": 269, - "w": 19, - "h": 20 - } - }, - { - "filename": "magnet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 334, - "y": 289, - "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": 335, - "y": 309, - "w": 20, - "h": 20 - } - }, - { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 333, - "y": 167, - "w": 17, - "h": 20 - } - }, - { - "filename": "lucky_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 334, - "y": 147, - "w": 17, - "h": 20 - } - }, - { - "filename": "masterpiece_teacup", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 21, - "h": 18 - }, - "frame": { - "x": 336, - "y": 129, - "w": 21, - "h": 18 - } - }, - { - "filename": "pb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 342, - "y": 187, - "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": 350, - "y": 167, - "w": 20, - "h": 20 - } - }, - { - "filename": "pb_silver", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 351, - "y": 147, - "w": 20, - "h": 20 - } - }, { "filename": "shock_drive", "rotated": false, @@ -6492,8 +5211,8 @@ "h": 17 }, "frame": { - "x": 357, - "y": 130, + "x": 219, + "y": 151, "w": 23, "h": 17 } @@ -6513,12 +5232,201 @@ "h": 17 }, "frame": { - "x": 380, - "y": 130, + "x": 242, + "y": 152, "w": 23, "h": 17 } }, + { + "filename": "steel_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 265, + "y": 152, + "w": 22, + "h": 22 + } + }, + { + "filename": "sun_flute", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 287, + "y": 153, + "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": 309, + "y": 153, + "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": 331, + "y": 154, + "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": 353, + "y": 154, + "w": 22, + "h": 21 + } + }, + { + "filename": "tart_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 375, + "y": 154, + "w": 22, + "h": 21 + } + }, + { + "filename": "thunder_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 397, + "y": 154, + "w": 22, + "h": 22 + } + }, + { + "filename": "tera_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 213, + "y": 168, + "w": 22, + "h": 20 + } + }, + { + "filename": "tm_bug", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 206, + "y": 188, + "w": 22, + "h": 22 + } + }, { "filename": "upgrade", "rotated": false, @@ -6534,12 +5442,663 @@ "h": 19 }, "frame": { - "x": 371, - "y": 147, + "x": 206, + "y": 210, "w": 22, "h": 19 } }, + { + "filename": "tm_dark", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 207, + "y": 229, + "w": 22, + "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": 207, + "y": 251, + "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": 211, + "y": 273, + "w": 22, + "h": 22 + } + }, + { + "filename": "soothe_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 217, + "y": 295, + "w": 17, + "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": 235, + "y": 169, + "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": 228, + "y": 191, + "w": 22, + "h": 22 + } + }, + { + "filename": "absolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 228, + "y": 213, + "w": 16, + "h": 16 + } + }, + { + "filename": "tm_fire", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 229, + "y": 229, + "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": 229, + "y": 251, + "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": 233, + "y": 273, + "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": 234, + "y": 295, + "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": 222, + "y": 317, + "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": 223, + "y": 339, + "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": 226, + "y": 361, + "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": 226, + "y": 383, + "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": 229, + "y": 405, + "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": 244, + "y": 317, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_steel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 245, + "y": 339, + "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": 248, + "y": 361, + "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": 248, + "y": 383, + "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": 251, + "y": 405, + "w": 22, + "h": 22 + } + }, + { + "filename": "eviolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 419, + "y": 154, + "w": 15, + "h": 15 + } + }, + { + "filename": "prism_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 419, + "y": 169, + "w": 15, + "h": 15 + } + }, + { + "filename": "x_accuracy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 257, + "y": 174, + "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": 279, + "y": 175, + "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": 301, + "y": 175, + "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": 323, + "y": 175, + "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": 345, + "y": 175, + "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": 367, + "y": 175, + "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": 389, + "y": 176, + "w": 21, + "h": 21 + } + }, + { + "filename": "masterpiece_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 21, + "h": 18 + }, + "frame": { + "x": 250, + "y": 196, + "w": 21, + "h": 18 + } + }, { "filename": "metal_alloy", "rotated": false, @@ -6555,14 +6114,98 @@ "h": 19 }, "frame": { - "x": 403, - "y": 130, + "x": 271, + "y": 197, "w": 21, "h": 19 } }, { - "filename": "razor_fang", + "filename": "poison_barb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 292, + "y": 197, + "w": 21, + "h": 21 + } + }, + { + "filename": "shiny_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 313, + "y": 197, + "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": 334, + "y": 197, + "w": 21, + "h": 21 + } + }, + { + "filename": "dawn_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 21 + }, + "frame": { + "x": 355, + "y": 197, + "w": 20, + "h": 21 + } + }, + { + "filename": "flying_tera_shard", "rotated": false, "trimmed": true, "sourceSize": { @@ -6571,19 +6214,40 @@ }, "spriteSourceSize": { "x": 7, - "y": 6, - "w": 18, - "h": 20 + "y": 5, + "w": 20, + "h": 21 }, "frame": { - "x": 351, - "y": 207, - "w": 18, - "h": 20 + "x": 375, + "y": 197, + "w": 20, + "h": 21 } }, { - "filename": "rb", + "filename": "quick_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 21 + }, + "frame": { + "x": 395, + "y": 197, + "w": 19, + "h": 21 + } + }, + { + "filename": "magnet", "rotated": false, "trimmed": true, "sourceSize": { @@ -6597,35 +6261,14 @@ "h": 20 }, "frame": { - "x": 351, - "y": 227, + "x": 414, + "y": 184, "w": 20, "h": 20 } }, { - "filename": "smooth_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 353, - "y": 247, - "w": 20, - "h": 20 - } - }, - { - "filename": "strange_ball", + "filename": "mb", "rotated": false, "trimmed": true, "sourceSize": { @@ -6639,14 +6282,14 @@ "h": 20 }, "frame": { - "x": 353, - "y": 267, + "x": 414, + "y": 204, "w": 20, "h": 20 } }, { - "filename": "ub", + "filename": "pb", "rotated": false, "trimmed": true, "sourceSize": { @@ -6660,8 +6303,50 @@ "h": 20 }, "frame": { - "x": 354, - "y": 287, + "x": 251, + "y": 214, + "w": 20, + "h": 20 + } + }, + { + "filename": "old_gateau", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 21, + "h": 18 + }, + "frame": { + "x": 271, + "y": 216, + "w": 21, + "h": 18 + } + }, + { + "filename": "pb_gold", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 251, + "y": 234, "w": 20, "h": 20 } @@ -6681,14 +6366,98 @@ "h": 19 }, "frame": { - "x": 355, - "y": 307, + "x": 251, + "y": 254, "w": 20, "h": 19 } }, { - "filename": "old_gateau", + "filename": "pb_silver", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 271, + "y": 234, + "w": 20, + "h": 20 + } + }, + { + "filename": "power_herb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 271, + "y": 254, + "w": 20, + "h": 19 + } + }, + { + "filename": "rb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 255, + "y": 273, + "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": 256, + "y": 293, + "w": 19, + "h": 21 + } + }, + { + "filename": "sharp_meteorite", "rotated": false, "trimmed": true, "sourceSize": { @@ -6702,14 +6471,14 @@ "h": 18 }, "frame": { - "x": 393, - "y": 149, + "x": 292, + "y": 218, "w": 21, "h": 18 } }, { - "filename": "oval_stone", + "filename": "smooth_meteorite", "rotated": false, "trimmed": true, "sourceSize": { @@ -6718,14 +6487,182 @@ }, "spriteSourceSize": { "x": 7, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 291, + "y": 236, + "w": 20, + "h": 20 + } + }, + { + "filename": "unremarkable_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, "y": 7, - "w": 18, + "w": 21, + "h": 18 + }, + "frame": { + "x": 313, + "y": 218, + "w": 21, + "h": 18 + } + }, + { + "filename": "strange_ball", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 311, + "y": 236, + "w": 20, + "h": 20 + } + }, + { + "filename": "razor_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, "h": 19 }, "frame": { - "x": 414, - "y": 149, - "w": 18, + "x": 334, + "y": 218, + "w": 20, + "h": 19 + } + }, + { + "filename": "ub", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 354, + "y": 218, + "w": 20, + "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": 374, + "y": 218, + "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": 393, + "y": 218, + "w": 20, + "h": 19 + } + }, + { + "filename": "everstone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 17 + }, + "frame": { + "x": 291, + "y": 256, + "w": 20, + "h": 17 + } + }, + { + "filename": "big_mushroom", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 19 + }, + "frame": { + "x": 275, + "y": 273, + "w": 19, "h": 19 } }, @@ -6744,14 +6681,14 @@ "h": 19 }, "frame": { - "x": 362, - "y": 187, + "x": 275, + "y": 292, "w": 19, "h": 19 } }, { - "filename": "power_herb", + "filename": "golden_egg", "rotated": false, "trimmed": true, "sourceSize": { @@ -6759,20 +6696,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 + "x": 7, + "y": 6, + "w": 17, + "h": 20 }, "frame": { - "x": 369, - "y": 206, - "w": 20, - "h": 19 + "x": 294, + "y": 273, + "w": 17, + "h": 20 } }, { - "filename": "razor_claw", + "filename": "razor_fang", "rotated": false, "trimmed": true, "sourceSize": { @@ -6780,20 +6717,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 + "x": 7, + "y": 6, + "w": 18, + "h": 20 }, "frame": { - "x": 371, - "y": 225, - "w": 20, - "h": 19 + "x": 311, + "y": 256, + "w": 18, + "h": 20 } }, { - "filename": "white_herb", + "filename": "baton", "rotated": false, "trimmed": true, "sourceSize": { @@ -6801,57 +6738,15 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 7, "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 373, - "y": 244, - "w": 20, - "h": 19 - } - }, - { - "filename": "sharp_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 21, + "w": 18, "h": 18 }, "frame": { - "x": 373, - "y": 263, - "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": 374, - "y": 281, - "w": 21, + "x": 294, + "y": 293, + "w": 18, "h": 18 } }, @@ -6870,33 +6765,12 @@ "h": 18 }, "frame": { - "x": 375, - "y": 299, + "x": 331, + "y": 237, "w": 20, "h": 18 } }, - { - "filename": "everstone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 17 - }, - "frame": { - "x": 375, - "y": 317, - "w": 20, - "h": 17 - } - }, { "filename": "wl_antidote", "rotated": false, @@ -6912,8 +6786,8 @@ "h": 18 }, "frame": { - "x": 355, - "y": 326, + "x": 351, + "y": 238, "w": 20, "h": 18 } @@ -6933,12 +6807,54 @@ "h": 18 }, "frame": { - "x": 335, - "y": 329, + "x": 371, + "y": 238, "w": 20, "h": 18 } }, + { + "filename": "aerodactylite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 311, + "y": 276, + "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": 312, + "y": 292, + "w": 17, + "h": 20 + } + }, { "filename": "wl_burn_heal", "rotated": false, @@ -6954,8 +6870,8 @@ "h": 18 }, "frame": { - "x": 375, - "y": 334, + "x": 413, + "y": 224, "w": 20, "h": 18 } @@ -6975,8 +6891,8 @@ "h": 18 }, "frame": { - "x": 355, - "y": 344, + "x": 393, + "y": 237, "w": 20, "h": 18 } @@ -6996,12 +6912,33 @@ "h": 18 }, "frame": { - "x": 375, - "y": 352, + "x": 413, + "y": 242, "w": 20, "h": 18 } }, + { + "filename": "oval_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 19 + }, + "frame": { + "x": 266, + "y": 314, + "w": 18, + "h": 19 + } + }, { "filename": "wl_elixir", "rotated": false, @@ -7017,12 +6954,33 @@ "h": 18 }, "frame": { - "x": 313, - "y": 333, + "x": 284, + "y": 311, "w": 20, "h": 18 } }, + { + "filename": "candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 11, + "w": 18, + "h": 18 + }, + "frame": { + "x": 267, + "y": 333, + "w": 18, + "h": 18 + } + }, { "filename": "wl_ether", "rotated": false, @@ -7038,12 +6996,96 @@ "h": 18 }, "frame": { - "x": 333, - "y": 347, + "x": 285, + "y": 329, "w": 20, "h": 18 } }, + { + "filename": "aggronite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 304, + "y": 312, + "w": 16, + "h": 16 + } + }, + { + "filename": "dark_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 305, + "y": 328, + "w": 18, + "h": 18 + } + }, + { + "filename": "alakazite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 320, + "y": 312, + "w": 16, + "h": 16 + } + }, + { + "filename": "flame_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 323, + "y": 328, + "w": 18, + "h": 18 + } + }, { "filename": "wl_full_heal", "rotated": false, @@ -7059,8 +7101,8 @@ "h": 18 }, "frame": { - "x": 371, - "y": 166, + "x": 285, + "y": 347, "w": 20, "h": 18 } @@ -7080,12 +7122,33 @@ "h": 18 }, "frame": { - "x": 391, - "y": 167, + "x": 305, + "y": 346, "w": 20, "h": 18 } }, + { + "filename": "light_ball", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 325, + "y": 346, + "w": 18, + "h": 18 + } + }, { "filename": "wl_guard_spec", "rotated": false, @@ -7101,8 +7164,8 @@ "h": 18 }, "frame": { - "x": 411, - "y": 168, + "x": 270, + "y": 365, "w": 20, "h": 18 } @@ -7122,14 +7185,14 @@ "h": 18 }, "frame": { - "x": 381, - "y": 185, + "x": 270, + "y": 383, "w": 20, "h": 18 } }, { - "filename": "baton", + "filename": "light_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -7143,71 +7206,8 @@ "h": 18 }, "frame": { - "x": 389, - "y": 203, - "w": 18, - "h": 18 - } - }, - { - "filename": "candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 11, - "w": 18, - "h": 18 - }, - "frame": { - "x": 391, - "y": 221, - "w": 18, - "h": 18 - } - }, - { - "filename": "dark_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 393, - "y": 239, - "w": 18, - "h": 18 - } - }, - { - "filename": "flame_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 394, - "y": 257, + "x": 290, + "y": 365, "w": 18, "h": 18 } @@ -7227,12 +7227,33 @@ "h": 18 }, "frame": { - "x": 412, - "y": 186, + "x": 308, + "y": 364, "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": 290, + "y": 383, + "w": 18, + "h": 18 + } + }, { "filename": "wl_item_drop", "rotated": false, @@ -7248,8 +7269,8 @@ "h": 18 }, "frame": { - "x": 412, - "y": 204, + "x": 308, + "y": 382, "w": 20, "h": 18 } @@ -7269,12 +7290,33 @@ "h": 18 }, "frame": { - "x": 412, - "y": 222, + "x": 273, + "y": 401, "w": 20, "h": 18 } }, + { + "filename": "mystery_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 18 + }, + "frame": { + "x": 328, + "y": 364, + "w": 16, + "h": 18 + } + }, { "filename": "wl_max_elixir", "rotated": false, @@ -7290,8 +7332,8 @@ "h": 18 }, "frame": { - "x": 412, - "y": 240, + "x": 328, + "y": 382, "w": 20, "h": 18 } @@ -7311,8 +7353,92 @@ "h": 18 }, "frame": { - "x": 412, - "y": 258, + "x": 293, + "y": 401, + "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": 313, + "y": 400, + "w": 20, + "h": 18 + } + }, + { + "filename": "altarianite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 313, + "y": 418, + "w": 16, + "h": 16 + } + }, + { + "filename": "ampharosite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 329, + "y": 418, + "w": 16, + "h": 16 + } + }, + { + "filename": "wl_max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 333, + "y": 400, "w": 20, "h": 18 } @@ -7332,117 +7458,12 @@ "h": 16 }, "frame": { - "x": 395, - "y": 275, + "x": 345, + "y": 418, "w": 16, "h": 16 } }, - { - "filename": "light_ball", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 395, - "y": 291, - "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": 395, - "y": 309, - "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": 395, - "y": 327, - "w": 18, - "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": 395, - "y": 345, - "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": 395, - "y": 363, - "w": 20, - "h": 18 - } - }, { "filename": "wl_paralyze_heal", "rotated": false, @@ -7458,8 +7479,8 @@ "h": 18 }, "frame": { - "x": 225, - "y": 340, + "x": 331, + "y": 255, "w": 20, "h": 18 } @@ -7479,8 +7500,8 @@ "h": 18 }, "frame": { - "x": 245, - "y": 340, + "x": 351, + "y": 256, "w": 20, "h": 18 } @@ -7500,8 +7521,8 @@ "h": 18 }, "frame": { - "x": 265, - "y": 340, + "x": 371, + "y": 256, "w": 20, "h": 18 } @@ -7521,8 +7542,8 @@ "h": 18 }, "frame": { - "x": 227, - "y": 358, + "x": 391, + "y": 255, "w": 20, "h": 18 } @@ -7542,8 +7563,8 @@ "h": 18 }, "frame": { - "x": 247, - "y": 358, + "x": 411, + "y": 260, "w": 20, "h": 18 } @@ -7563,8 +7584,8 @@ "h": 16 }, "frame": { - "x": 267, - "y": 358, + "x": 327, + "y": 276, "w": 16, "h": 16 } @@ -7584,8 +7605,8 @@ "h": 16 }, "frame": { - "x": 237, - "y": 376, + "x": 329, + "y": 292, "w": 16, "h": 16 } @@ -7605,8 +7626,8 @@ "h": 16 }, "frame": { - "x": 237, - "y": 392, + "x": 343, + "y": 274, "w": 16, "h": 16 } @@ -7626,8 +7647,8 @@ "h": 16 }, "frame": { - "x": 237, - "y": 408, + "x": 359, + "y": 274, "w": 16, "h": 16 } @@ -7647,8 +7668,8 @@ "h": 16 }, "frame": { - "x": 253, - "y": 376, + "x": 375, + "y": 274, "w": 16, "h": 16 } @@ -7668,8 +7689,8 @@ "h": 16 }, "frame": { - "x": 253, - "y": 392, + "x": 391, + "y": 273, "w": 16, "h": 16 } @@ -7689,8 +7710,8 @@ "h": 16 }, "frame": { - "x": 253, - "y": 408, + "x": 345, + "y": 290, "w": 16, "h": 16 } @@ -7710,8 +7731,8 @@ "h": 16 }, "frame": { - "x": 269, - "y": 374, + "x": 361, + "y": 290, "w": 16, "h": 16 } @@ -7731,8 +7752,8 @@ "h": 16 }, "frame": { - "x": 269, - "y": 390, + "x": 377, + "y": 290, "w": 16, "h": 16 } @@ -7752,8 +7773,8 @@ "h": 16 }, "frame": { - "x": 269, - "y": 406, + "x": 393, + "y": 289, "w": 16, "h": 16 } @@ -7773,8 +7794,8 @@ "h": 16 }, "frame": { - "x": 285, - "y": 340, + "x": 336, + "y": 308, "w": 16, "h": 16 } @@ -7794,8 +7815,8 @@ "h": 16 }, "frame": { - "x": 283, - "y": 358, + "x": 352, + "y": 306, "w": 16, "h": 16 } @@ -7815,8 +7836,8 @@ "h": 16 }, "frame": { - "x": 285, - "y": 374, + "x": 368, + "y": 306, "w": 16, "h": 16 } @@ -7836,8 +7857,8 @@ "h": 16 }, "frame": { - "x": 285, - "y": 390, + "x": 384, + "y": 306, "w": 16, "h": 16 } @@ -7857,8 +7878,8 @@ "h": 16 }, "frame": { - "x": 285, - "y": 406, + "x": 400, + "y": 305, "w": 16, "h": 16 } @@ -7878,8 +7899,8 @@ "h": 16 }, "frame": { - "x": 353, - "y": 362, + "x": 341, + "y": 324, "w": 16, "h": 16 } @@ -7899,8 +7920,8 @@ "h": 16 }, "frame": { - "x": 369, - "y": 370, + "x": 357, + "y": 322, "w": 16, "h": 16 } @@ -7920,8 +7941,8 @@ "h": 16 }, "frame": { - "x": 413, - "y": 276, + "x": 373, + "y": 322, "w": 16, "h": 16 } @@ -7941,8 +7962,8 @@ "h": 16 }, "frame": { - "x": 413, - "y": 292, + "x": 389, + "y": 322, "w": 16, "h": 16 } @@ -7962,8 +7983,8 @@ "h": 16 }, "frame": { - "x": 413, - "y": 308, + "x": 405, + "y": 321, "w": 16, "h": 16 } @@ -7983,8 +8004,8 @@ "h": 16 }, "frame": { - "x": 413, - "y": 324, + "x": 343, + "y": 340, "w": 16, "h": 16 } @@ -8004,8 +8025,8 @@ "h": 16 }, "frame": { - "x": 415, - "y": 340, + "x": 359, + "y": 338, "w": 16, "h": 16 } @@ -8025,8 +8046,8 @@ "h": 16 }, "frame": { - "x": 415, - "y": 356, + "x": 375, + "y": 338, "w": 16, "h": 16 } @@ -8046,8 +8067,8 @@ "h": 16 }, "frame": { - "x": 415, - "y": 372, + "x": 391, + "y": 338, "w": 16, "h": 16 } @@ -8067,8 +8088,8 @@ "h": 16 }, "frame": { - "x": 299, - "y": 356, + "x": 407, + "y": 337, "w": 16, "h": 16 } @@ -8088,8 +8109,8 @@ "h": 16 }, "frame": { - "x": 301, - "y": 372, + "x": 344, + "y": 356, "w": 16, "h": 16 } @@ -8109,8 +8130,8 @@ "h": 16 }, "frame": { - "x": 301, - "y": 388, + "x": 360, + "y": 354, "w": 16, "h": 16 } @@ -8130,8 +8151,8 @@ "h": 16 }, "frame": { - "x": 301, - "y": 404, + "x": 376, + "y": 354, "w": 16, "h": 16 } @@ -8151,8 +8172,8 @@ "h": 16 }, "frame": { - "x": 317, - "y": 351, + "x": 392, + "y": 354, "w": 16, "h": 16 } @@ -8172,8 +8193,8 @@ "h": 16 }, "frame": { - "x": 317, - "y": 367, + "x": 408, + "y": 353, "w": 16, "h": 16 } @@ -8193,8 +8214,8 @@ "h": 16 }, "frame": { - "x": 333, - "y": 365, + "x": 409, + "y": 278, "w": 16, "h": 16 } @@ -8214,8 +8235,8 @@ "h": 16 }, "frame": { - "x": 317, - "y": 383, + "x": 348, + "y": 372, "w": 16, "h": 16 } @@ -8235,8 +8256,8 @@ "h": 16 }, "frame": { - "x": 333, - "y": 381, + "x": 364, + "y": 370, "w": 16, "h": 16 } @@ -8256,8 +8277,8 @@ "h": 16 }, "frame": { - "x": 317, - "y": 399, + "x": 380, + "y": 370, "w": 16, "h": 16 } @@ -8277,8 +8298,8 @@ "h": 16 }, "frame": { - "x": 333, - "y": 397, + "x": 396, + "y": 370, "w": 16, "h": 16 } @@ -8298,8 +8319,8 @@ "h": 16 }, "frame": { - "x": 349, - "y": 378, + "x": 412, + "y": 369, "w": 16, "h": 16 } @@ -8319,8 +8340,8 @@ "h": 16 }, "frame": { - "x": 349, - "y": 394, + "x": 364, + "y": 386, "w": 16, "h": 16 } @@ -8340,7 +8361,7 @@ "h": 16 }, "frame": { - "x": 365, + "x": 380, "y": 386, "w": 16, "h": 16 @@ -8361,8 +8382,8 @@ "h": 16 }, "frame": { - "x": 365, - "y": 402, + "x": 396, + "y": 386, "w": 16, "h": 16 } @@ -8382,8 +8403,8 @@ "h": 16 }, "frame": { - "x": 349, - "y": 410, + "x": 412, + "y": 385, "w": 16, "h": 16 } @@ -8403,8 +8424,8 @@ "h": 16 }, "frame": { - "x": 333, - "y": 413, + "x": 353, + "y": 402, "w": 16, "h": 16 } @@ -8424,8 +8445,8 @@ "h": 16 }, "frame": { - "x": 317, - "y": 415, + "x": 361, + "y": 418, "w": 16, "h": 16 } @@ -8445,8 +8466,8 @@ "h": 16 }, "frame": { - "x": 381, - "y": 386, + "x": 369, + "y": 402, "w": 16, "h": 16 } @@ -8457,6 +8478,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c228145ca625236e53edc95aac265d56:86524cdf0e3043482141d77259bc4d47:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:0fa4b2b134eacc1b8e5cf03054124001:8eebc761c452a8a36eae96a30cd3d32b:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index eb9878a5bfcd0778d70fb422928e729b08f40815..b8ac859102a653a66969aa2ff3b3bb5d89d310f2 100644 GIT binary patch literal 58883 zcmYg%1yCDbv^P#E4#g=AQd|?HxI?kFNP*xIg1Z%W2%Z!vF2&s`Ep8z|C=@GBDOQRV zcX<52Z{Ez?nS1u^xp#JUXU{$7cVuJVy-_88O8*oC1A|!YwUQ1724>@b;|cboq_w7j z9|Hp$suRkwzo2}GE6Lj?rx@buWsga)ZS_9F8*F$I=Oi``+R%R-8wuOl@NPVSGPF#^R=wX z&FJg3Iq>cI?|=_JHdZ#jVBV8lFYi{?GD;iQ22O`8ptVycqYJ;U3{7&G8Q^_apEC`w zyUeD#v(i#4uKL#6BE{DGp|_i%W!24VXMfIo!&`Z{hf$kXGsDNnWpd^Yt$((U(+j$S zE-yH^&d~S^la#;N6yHA}*J4HoAFvadK;>Z%6WcWJ4p$gx#gIH;hzmk^ZcKi5FT5Ke3`lj{6ZO?$Fxw8Hz<^HdrkE{1h*1vYv z`|2A;-g($X|4YwUNG=Ypo3AX?|v2>H-ss0N% zRh)`mnyL(HZMN$&PO~Vuz2*#ktJ>dx?+qyq{EVt_OgXP(26+rO1Sz4y{26&4!kr{2c|6nvgfxtuWK)b_6Y+_2~3L%Kd5(b5oc)suIT zG#L!BjQd<2)U-5Q>y@`-pxvx*;}Kj^T&Shn+LZOhT|KyOqv+1L=s7CAYs6}`r^j{% ztsw*m&p%D+`<=Pn9jVefnXU7>n&7Aq@_qbijFh{Eni3m*-ybU&O$v#pm$P|?OL7UKU_3nk?rUCm0rc2iz0GO70 z@&+eni|)BJajte6?1BAip;72ekBrDJKD(2y!uCfVK$4~#XavILrsNQ~PQ1-~RQ;!3 zI&XCU+W^@C5BF4JnNY9nM=62ZYp^E<2FbvG12c_>gaHEsfT5-&ulHeLuah9~+52x7 z`G31EAT9>_3ZfKNC{boO83ll%bs&@iP)-IBi6f^ia>7FNFo=@BgrPhTCUg*TTb%iq zWIqzjs5@bOufji*6cAjyW4d3ys{8&g>0#UNdqt&ZWo1gi_uFmRhl`yzWxBau-*y+f zx36+b-r(Zgu3kR4{kawiAr*7vfqQ7yZ&Dc#1uvYBn>(Ybi=UA?hE_EFvf zrzE=$?sF1T{PTP%9I?qil2+@S9JzE2YbJv(ckZsiY%S*v4s*W0S{y&gcJ2k@`h&ry zKGqmjqx_QdSPg|$YZ6|Z01XHb*cMwLFcw7{d9{e?G(1tc6*c>6Bbxc%=Wb>h-}mNj z?ky+Rzl%9iPnWFq!v;qNr0c(%9P^9Ig*!!=oryx5q~upDgld{jl#}e_E|h!_f0M~J zsXCGnjDa{dNJH=bnw64M{W>Vb`OtC|sF@)OQRXWY~V9)Wjm7$zP*$o1Uos^hw~03?Xdwyzsq=*ekM0h<7!jU zH}J(R3O;UeEUTLs(zu9l`tz6IHCk@#W{V+FH=gWIU{*Y~nlQYqm}N2e`b%cQ zd%7s%P|QkZ({DM99*T!6l_MCm1q(sjx#oK^AO5CR0W(1#e^j;@cvWoMZRco{@-f3X{X$(hc5| z0iVV{pQzM>XW!;ZJPDiYnhUJl>PR$HQzNiF*D)#n=p6DP_*{z&wm&M;q{A^YDO7`^lnCWrq?)aGOs-@nZVBhPmw*BC1+4I3HnifP>Ydq*A+ReflrwOi? zq>_BBFLQUA&gbr~#yWoJhzG7F&J5lnYD*ZN_qG$Q&AInFOygm1Xm$)>V0LhH44Y3I zHh5zj;Ny(y!A09TK2U+?JVvpbZx3ijuS16zJy_)_Tga9}d5Ybo=$=s6C zz2vDgO%XB2#cTO`KVH{7$AC#uU!YSjblSnZlJ7lJz ztF;}aQu-t#;S|x+D*_?rL40A_+WS_4uCfnToUaov2A0llw|{Z^|HW&Bi%L-6wS<5P$%1~-M*vL%bYgcjTVx?&@|IP8!NitZmA>nei6l>cl~d+FzZq{ zXnOeUob`R?Gxt<{5yak#NbfD|n?itf5n#3+^$H9rduw}79h=LJ-~%^CYRh+a6OzR< z0U_h?lmJm}d63WaOhJ>aFKhF1_xv5hlho`Z!>L-elvk|_YAr1lGq^{%0(8k?JE3j% z!Z4@rw^yFqpO+GbYD=V#FYzMrV%;}KcnsdTAg%Y#YU%~p@kcN+T>J-e_m%;9QWZxI&#GlfImfs#2YslrY#R!h#R(sa7(RwWyVdp4+C zim8w`mnD*13+~4OrmLpyeaXzk*!N;53lK}D#D*qbknTKxz8vuSG<=1_wGET+^(THj z(B0m=%r|D%8ePLtuEsEdm`^xl!l+JEd#paHezt@_=UX8$|* z^8>HRF&W+Fi)U8H*Bza;SbytY^tqwiS=ua^u`WL~WU>g~2yS2|6h+M>^7|$uBQo*} zvlY`fg33&_1P)~2NW8O7qB`~2cfPc@(%${LhUnJY?M_-}?+YDhl?_qQ+E;MXUqR`l zmg5zX3EC%n#dye~3j1Cx_`>jMtc_?|0|8}Q?~A{LU*L~Mm=)G5Mn%VQ&IxQYC+UKt24!Uz;#a1&ANVl#@FGi%lXInS2Cq&+Zhyz0*!t#6z$S`^%=~wL zhvOc#w8XEor*;Svq_RunDM-p*)CzPoiBGXA1ppOq~iSdAOR(NT1PRh>SepQZ%x<|40A$-C)u=rugwFQK+KqR zJjY?a`gCUR(j5iI7*k3o%S*#RSz*wo4rlm%u2K;$qEw8;720PZYu`*iF^11Sf0*|< z55va)?pkr$TAI3(&KRaI_S{_9iT-=z@YT?AL-BO@8!*Io!J+XHOp;k2kvQFzrShxW9MYZBW-Y<>ua^U z7ysh5t;0B#e^Af+MVx~Mi^<}TYRA@+|4nH)=#Og$)SeE#7@D0|SCPsMJiUCrY5T>iLuX~K zsgnW~`OZl|j7dbZSOdQ?TbByik^yC5(k5Nh)zqlLd3Xc570xUKlX7Dscq-IZV2)E0 z6dR{Ye9t-Y^O@fK_kaW|{XyCdWmLk48u~1;A4x<)h5J3<(({75Khk}592okZr|k3w zayh3#mhub&BXGt)B>d`FRx4aSd5=-PqR@FhGux`_&ZhV2F_onVYZ@NaS`7BUV)KVSCDpx>#Ijbv6dKSx=YGfBBQ755D@pRWiRcTZy+PmxOJS1QsQ|tVFSt4`CNtMmIBCBL>iF3A)(OOcJX|^r{6N z%ZZp_Db2IX=YH~#d%RJy`4)@^)GcYxe2Wv2!ven88o7nf1`5&MnkyT^gm0muOh;@l zQmj)dCc3d%qXL!SB=NZq$E|W?C~0Wib6WW%TXi|b6CfK^{bBQI6J`INGph=B5qmR- zLK_*bx(TCT`%oIKGzoOT8>cjr{C7y+P%SIQual^#@ocuiDFj91=w^4aja?X7zr@bIa3M&Xs!VHo1%3GZDcXd> zZ|ztzXV^%n?99AaeuoaqaQLE&0KrDS*uLz zF>2+Urr6ttdct8cO3#ffY~`%1YfbzxZdBx~42rLKmd3wffy|18&aEnmo~6IKxDZOc&1j#z->sN*_Z!??I2AA=WZKUEFX^j<#6&nx>7bV1F(-Rck%(~k z+Us_ytK&4spT)&6T`&L(8#{Z{Qg4U_l0pi!t_D+&L6wn8-EwVL8VfnO4zvL~dlj`F zIlxx@8P2h3dh46QGmT9{SI}1k!o{pYcIotsS$%8wgSDHGRY=JCaM?CVR6O~VXG^}+ zOA?*+@P*P+T)%JD(Nq*2c;X0L6I};>LN>E%kyr(F?BK9{GV;_0zou?mn_g{g?Oz3b zN7+9xJ3UVs+h`j+n;Sm8S@xsmSIPM{HD@*@{e)j-+Dojp?$GCvt3E6p{%wVbAIXpu zf+c5g0pmYK5-CBCJXmhD)7l&4r`!}Y6|JkDQ{0GaVMX|C6iETESA1W{IYt}4vcoV6v)y(slm||uvJE8|41qu%N$#T4e6maEr@Q=TL3Az z>|rO3T&`3v(cg(&?v0&?hLSv&Xtvv9WFTcaU2pe!P5!JoztpH#xa@CC4|=p zv8992F=keS06y1`n#GtUE!lLx`qTm|b2->>Knf`INe2pO`UJ$z>`bLY?UkVA z&cSpP@oZK$Z;D6{xA(tj^?#5qNnn@l%U2Y|DY**2-nu~}$_M41Hd@X+A~&Eq)z2ux z2U}S97-2$N+wX(q=r&pYgy0S#e)J1qQ3nA6xAhYwn!cR~&ClAT4&BAHfeHQEe z7cyR9ViJm0jN<+K!eE4qjx3_X5bw?EnzaAvpI)5CT|OJkYCNUrSaN3=sTS<0nV=rC zk(tw3sK5lx*m1reaA}#mZ3)A~=5<(Ub2rgbBFb=2Tz)N*={6! zGvo%rqA`QK(Prh<+})VI-@|jK`MO%{fkT% z5TKN$y-Nq#6HxpSrDS?SkXeYrqK;wXMT&LNa%ZuC?$-FRpUm}>#=FwsNmY+-I+@Hl zPL&g6^lXkwCuUFyEy1O?%2J72)ag#5Ld|h5!caY7uvt32#(#tF*?`(Vsd<1? zh`D~)Q$KgetR^imVcl$f$fHA)|BXxT{ClLP6>877pkbAY`^E62CC*BTa>W~J`&9CCkNPwFl_P~P|<#1|AYErP=7y7YwXhHzy6!g(oBARbbxqPXkD21 zX=TC&Bi>-m^lj{2l5i<4a;=}Pr?Q$6%CYs=(o~0yhVH?G$Hr4-+?~(H_E2iqXe9g_ z{@3(I#bpw32@wlLCEcJcCC3{RJ&rWcEL|*>xY9YTX|)dfkwRLm4ic*{7!xF#h($lu zHEo|TX@%vaa)F7d)ikJX<+PN_^tS=X>fj`|eJb-5SZ-b?Zvoatj76HfYKoX^AUdQ= zHsMwpzijW*&{X#M*Aq4pK_T>cvcY=jy^jK~4o;I;sdOHv7-Fn2{{0A>S$Sj2c?Yc$ zO;xH|$2%L9sss&Zaum^YbjtX~Pm~TEj1YfXOp>n%-CqQhX0~)Z0d{y!gL0(J((!gX~ z;!1=0r3(z{=(h!a9a{1U4YO5(G$IYX&-4NMW?c^NMWU}3iw-h_ewrQ~A#jH^$>}iT zKN{Jz3Tl82M9?~=Z+3`8HRg3h92_@?$1J4kSFKreWgK2uMrbOO2c6=-lmV)PSDe)| zf`wiPm9Pl8&p7~8@i=J=qAXVNak7wI@70BF4nAxL1p(e!T?UzNudh~UIh07Ve4FOch&s`dX|#SJ)Msw2=^={L@2mtvw6)m*zCDDsQyc1^ljMyrOLQfA}13*9H(Pjg5s3iFN_w(BN^9)m3 z*GGh%l81{wzg|SG`=@kP2}zFr0i$)`X+WJ%p<+|fdy_BuK?+;Rv;dyfr}hXqrf}>W zCxAM6AaWP7l_O(QIVg(*W|JV%XHWhXiZ&_byvl6&F{w#H35L5Rkfg@bNS1m3t-FZ+ zux#U#Cngd94)a^JU7eK-k#pga`g_PHvz~ri0e1+I$7h}f4E-c}9`iwjP#NkYA>nY? zr6bh*(Ck_};C*xY^zx-|1{?Br?8#G|*w|p@yXcipS2t4>hs3lTbtQ}9o7=I}1-PjZ zNrzdR*X6%s4J+mxlG(8pCl|=A8ey^lRQcxH9|016195_ub#?e$r2$#6&QG zPnOdRISYY@uQL(ZB*1u&_AKU_eiJAgxzg4r+I4dsC=Q3{VmagiYan=54TvexiaIZG z?UWC>i;j8GwdQ^24==RbC`ItX688R;q|tsN>F%+Cp_cHn*dWjOG8@|e^}JVr&H`cP zayS`H)9UcF$ z9DVXgcH810D$fA}Xu0$p&8I02bQG*msN{--pfh`9N3q36QrF`pgb<#-50Z$GE?%A9 z&~z?*lD6YHlpGscWngTT0nrBoLIK7-u{CC$7H701i4}E7 zC8W#OC@OX~Mq-(`PFno{!{pdlHMRIywdGC2)99CzMh3ACzoSXf__N1Exfk9mzPBIF zWx{wRnmZV2Tc6UUgHZ9$gPojhj9)@J{90Rz`ljUZ=pC9CCn3# zC;>dYQuIU=#_42%UJc@r;R8M;n7|i*G{ca83J8J?MN-1lP-I5hU5x5NAX&HPQR0cjVkJf-rvz+N{LXs z6v~xfP=oQ3!pMO=xUZf;IE9o|m5AUokiu=Qz&~<{3FwIG)bSEL)JGav2d7?i9kg_` z3e&1LhgOhKG($wB`ftYH_*g$5Elo{&L6Cv5g2hy6)W4Ss3KSY;M{0@usH{FNF06+2 z+zX|{#WG3uq4|T`4_3N2umZ@4ehoJVw8Ok@U7ua5h}M5?AE<;^tT}`Nv94-7M_tNs zAx^A(e9T&7;6EBJ)cqkFlDs$y5Lh+)(?%;jJ*$*!*4xAMJKH9BGu5dvw}vDt_~@5T%HpXP{>Hr?WOQAv;cbzJtx-_iJ}$c zN$@|P#}?7n{2uQEF&xo<%fuC`WmY3{;=m~YWfr^z0*h88ZGP68_V79zjMTCUmCZ64 z1`yfwZ9SLfE)N@!YdN8(&yYLs#pgeX%6@0A^|R=ux}cgG|5RaLpOhtr^9ITtEg-}S z@_2{y_S!4Er}&^UMAf3(tx{Y|k8FhvdmBLv97R%nh(@&{8XlojV_KULNg@zVfN7n7@%sl=a+DfF#Ljab2H?IT1t38@-u%@Dd zC3K$6O34%zJPRAk7IQZ17f#y4_J#1-ad~_!@)lFUu;w3-VyXqD(J}8PSeBAFYQ7f1 z?b|SBP{t*EbS6zyt76tFH0h*?G5BzD;i$PeE?s1!22X=p>qn_40uI{aOq>Z;jNs{} zAJo8f#Lp4K+}%sII0~j5!u4kGNF9X3Pz8g3y8)<WX1pux@Z-pp^h!O@_ z&GO=P2^I;)>mm2?N9Ak}!q}e zC&TVP5xR~bct+ITAE{>y6xpIRy>co&jFRY0JGR@hmkHQB1giKk6K<3oqHY#!o;!Hf zY9=;nBoJT&iEO81_O%q66n?cf+t?(cJsb_mrhd`H!me^d9t0+$wALa9@StD8({Kl1 z6y&2QH~Dm_QrowJ7fT^_3s_@L9NcwyuE|d`$%QHAwMP>Cl?VCtz)yb~4lJ=6{0QnW zGm>y!*?mm{KVnov-D0fcf0-)~BBR0ArwHaeCX?^iVw|5du|jI{ktlKWsbB%kMg>75 z=q#%FGqI7(X^lZBut=yT>}*0fdF#kRND(TdIjdBS4)&rQ9pQ#lvlGH`>tpJ<#$w4E ziER1$yOQO8*#O$Dj8xcLK!S=CATs@Wi&mm%)K2IWEW3d{42SB^`%6_2T1N*yI=9;AKFh0Hg=)-$Cd;tA1(_Or}aK-oqFJr&<9MgnM-nAF>5NF|?^*S>uFQ{dtPHLw4bzN;S@HZZI-6ZWMM5Pf}kwAX!htWb6 zkpbdatkFR)C>n=rQRpN~_M zrj;gLJPu^8?oYInhXnxT$maUV6w@keeTMd~kEm?9SC^e}utMiFVsnDWr$sy-we?-P zG=BM?1g;yl6{k?Q+K}WMMpcznUI?bs-8HKH&@A~ejc2UE>fIb$#p}B#m(YOiL6Eg} zW1Cpa?vw!#jh_#jZ)Cv;@DgQag^r)#YuVWE-?C_|2N1Md+NyWH;H($-l=3Vn&768Q zw~XRN`%Uv!#m2=|R#?)BehfvY(b`5&f9T(fi_&a1{x_2$eFdnFEb1+2{8jY9V8=7d z=jnduLRdS-dc z?&GvYooZq(8{p(sKvg7eCZkc^KI4-C;5X??8RMx1T~B$dq0|<=3^~!7 zuip+fy%R_jKa2Nzh{O+YD?j@Aa-Z0tkM-*jVI$?GU{vV*YZ4;mXq2AC-yCc>Epxk? zd})hg44MQ(T+RpM&(|+F11I88Q-q~n_E+Ej?DoYPRg5A192d?JR__%_j_w-KF#EAC zdUcrUr{^U&_5oQhD3YE_dc60YtN&Rh!Xd{Dem%Bp_X$&&MAIc&o0a~UwOlh( z{4H8VeZb9#H<<(v*aWTio0enmQxbJD+^Vvdt6i=)=tYT$afE(7(EHMa)v!z7W;^zs z$K7;uWW2#Wcq{t0pgr$p-OF7f7R5vx)raFxKjzon?(bgJji%7{&h6cL*4C~ z;B&9B={Pk7`+Y5Vo#eqkaOpBgLerypEJ;UkEM&b0%R(ytA+<3_?`^!iyjtyYTUxu# zHip7Pv0srCYA0+cC%GGXX>>bQD~vL2qN+2T4bOxvd;q#+qqp5Cz4+vv2|3a4q>WqG z&5Tq*kG`z9p3PDNJz&RJVppQf&^RBBG7F;0kSAXsFcV23OI*72dx?!l^l!l2MRV)a5 z{t5$0=m0jNCkNdQ`L3Sr%}=en$B2fO&o6WiYY11oHF!BY_2SL>FQ4JJ#Pq^;D=}kl zyZ?S$+&@C@1TdIRe2`kvcOiyv|K>u~ORJpsyU^7%Ebiv+FF0MKe0?RR%C3fF1e2>G-?MEXuOC+4-&V zTq&Q%Z|cRNdxq`0{G?*ks_Y^X{vOh}5qoZKj#}D|2ut(&{*Cy1OT6<7*efGx)_x)I zp6%T6RD?;A771-7exeTB!i_({MGO-bNRiD^6^7U}= zlc`A0p0$IlIa;UUfC-LH#~Y+;_c8af5!H_EwVt`8qHmIO%xbn&>TKU(!dm4@*3X{J zJfotTY4d+F&VLr$2`Bn$Lj($tb2)`h>FK6>7uUnbU-u8Ut4iXA_)P{-99x|BIv4lHC(|{ZS%TT_@Z>RN3Y(54uK40vk|t}}t`sTH zB3=dyW3bi?O!1%cEtOg^UW_hfOx+(fYi zkk>q)+UE1QTn~SBibAvS7QV^)s{sRX46Mx}e=VmEO2^dl^D`|p(Pq}PvSM2;9zCno z8=s3&BHFg;ts>IP6p~;GxH!=D49h5KM6#LmSRSqvI{?@#(7Ty;DAqhI{00fFlj%#= z^vPdJc<2tXxD8l@fC2=QmzA(^?Ow?OOsDfHuz*95jXZ-(wf)!5X{h09pr4WBYLzUz zb@;lR`e_se2%bpJy?d3LJNK)XAvQCCmrjFD!cx&@IIvhL8@D5x`eKh@UH-u^OS?&Ae|BX|S^hp?2=Jjx$^m=CG-k`Zxmn?;)My}v-YBo--RTW$B zOf}v;vhL@Y)*ph==oE@Hw#DEzh7n1tQp**EO7_KK)aykUD!s0>SvUW%hAUNc_^&I7 z4|?4jAsa_~O`6l@xI{0lzp^Ccb;bX)2x#r@K9B%`LRIwW!i~ZyN#62j=4f(bgRl~j zFBN03fc&6E^<@qKS6=JN98tM7=;`2bGOs?pEaoF9uI+KEP34q>ympch#J*r==DFN8 z4>QE%)S?EDrSr*Elz$%xh+O!r=&0=)p79QhY>grmu%+e3wqQtSZBVLh zgb~Zd5?Be)4h*FF-udt+L;Y)z3%P|_@u4O{jxaj@&xTK zPNPm5cjlpIj3b3%1Yl_mT@b7B(}C8i=WfDQiKEp(QP;e{Jz9EF79UMzJY)oniU;+y zKuz?CPLUQQkA4YXq!IOpjfX3PN0(w5PA=FrjnU1a!)-9X`JY1iVnDm60m_)^{=FpUZwXaIBzoX549og&WGY%UjM>sDO zgL4fAoH(;o*zn9LK&{P?oymPsbLC+&FVX&4(mo$bpc@l+V`n5$j%veiYJ6#+-Gn)z z6t@s*-fXZ&qACks+a-cBFZG!$%X)=2py)-3k&j>hpC1fKTrEUK+zbl8!YM%Qs>oyx zt4OC;Hpr?VP`7jJ+!^pB*cLz->MuG2d{NMlsA8sPJjEe&&~1KAv+$1F#;XmXFGUz@ z4{T68Uwea~luf;nfA^$4d2BgxR*@xozoBz*Cg6wvUQ6sALbZpRLasGyS|jFRrZ4Uyz28KKbx9upq+r)OWfO_{gZSIMBWM8gEA`k4b_dq8lQ`5@<^RIKak+y z9*4*2JN=wvRt-ooCaHLV6P!V4v#0m->(IaH{B&cd>S$oPaObxV0!j_sjomU>J$MzZ zWcw@_@$lBh_fw^q&C#i;U-U(U_pEBAQHEU!{fPSd%n%X*0al*%Iia?Oy5~TYW~|j{ z^r`|GP$sN%slE9V@P9V$5SzgaS|R-?pN&Ypo;TwH{GP_8h zYGK3CMbD;eA{!`GIA-tkR! zFFPsvy#FF2b^L)TOjdbs^UXju|@+U#`mPysHI$y>JlSa`zz94o{L>LJYO_^K0MZ0!9>d^wZMT4s60*PC#^OlK_*^kYzhz!!O2WIZ+K}ETjy|4jK=kQj`f)7# z?PKrVpCWSSn8@OD^*cc6a12n?m*11_CAQtUC2)Li{`&#v z>v(VeN6#)4eqeYUkHcJf5fQ*pJ61r+BqKhu?6^ce`M`)j8}0tHK7 zhwdfX=K0}KTGeR;>nS)6LYHLfKhTjO`W}2=jY6iTPV_dJr?+7iQ9QDvUF*xbT731K;nr;`3$e z95ENX^Df3R{f)#n`|kjrAu)Mh1b^blYjGZFg%(JPLXf6D-`~xPTXSJroLAit@|!(F z4@?lceu{mg@|+Jp%Hy`BwVo0O5WuQ;4`*$>#{awf;sa@>JH$dtg}G^U4)OKc@WD0p zjxbk&hE@x%P^?m+kcm=i#sYTB?UNJ+LcYbA(WIpLH6m`;}I_!o-@S}sT&oC zIX#>3_j*R5ix5hW-OYzC(8n`~0cD34-ulRvADBPM%*5jL!ULulsz%IlXsRa!Z8p$c zc;V0!;->KhZY91cnRIY*TBlXQ+vjmmx8`FFllDLVE}#eb;B%pALc5Ui*b?2tX|ezx zPLa;rfZP;5rs(Md(t`h;NRH`cZ_!kEzL;<|^&msle^Qr6Qb9ZaE`Cp3qmdwzrvQKF z$cJMKAvVR{5+QzUX4*DS>RfHkxGr5{1S)rlWxy?Qv3HL+1A~sD5)x*npFp(xiJNpi z&LB@~^s@irf~KN71UIub9kaIAd_a7KygGPW?(jMRP6b1AYIfb&zO8J|Y9+&h&94k2 zudlCr8SuM@5V-XMU6FqiBeag^!&RkOjL)*w4fJ4C1)MpTElQ z*h==ZO*LjVZjldeVlC3sowN8Poy#iJ7RSo|%er>iO+f{8A=3u2C8n*83@! zjyWD_a|6q)Y-F+i5iExn))6P(*nW7QhM>W1fc}hb(yI27#lf@-L-Imw5p?$Z=K{RR zX8a&NHZ7wXp&gP{YCnrEqer@EpaK7DXdq6p8-D z!)U&J_rVLm3~~U2u-P$qtCprFpFt#n--#;cT)(Ri{6mxVRPWYXn#N$($2~Pdv$4OA zrlunx_J}u>Ki>EYnJ{dO+H;8MBe|bs3BZH%>17C|Cqs@;7U#Bt+MUnGuJEi6#6l?6 zblZz`_}R@;Q+j@J>AnI2sA)J}rlh*8two|gSs1^V_TADn%WKO!;(889mT@RPk?+Lg zQz)d0A$?lrdqkjw>H8x8neaGzmus9`Kw$jXi~|TcXNYThDr7O+!eH%8o*}0)b%!gA z17+#=K6?7Gio@XT8+NO}HJVOE%fbhRb0our6PpzloeK`ILP&_4@nTHojnhGX*A&mRBprqepHVtCC)&rK;5Ss(9l_#Biq|teU6PcNU`q0>Med2EiL(Ptb8Qc@EQa z5P9BT4mKsL>c|xg9ar9th@Zw`31O*LRxaJk$OKm=N&S`TF?k)&7-B`}>Kp_~f=43D zsl={w(x4ciK7M(bcZ9JwQK)wUTmI*=44a$8$xj4hlZ0?4GpS43%wGdn$(WO?Sl6^;%jrAf;S+KM3rKK`QQ#s2(29K%3yuo95O8?rMQ z7=9iaNd!|K7|?rrF891hh*lnLuv7O@2$_igCjmx>Vsc1%;d!&rA_{Hx+xzMX1SO8l zF)Bd?vmLtz$HMw!@Xa)fDP9|~T15nqlop5O=1?^L!(o{n+g6HBKO(Ys3NIGI5%m{V zu*RA6rChLG9yunSRpUIg&q9Hrb&0SG_BgC{Y)uQcr3Q1>eCG1)veL z<$LTeFDkqoom3JWNz&M0_q9IBl@HOr6?BsS3TYue0h*eb z=mb~1G_`DzR9dp^6Jp!*#3&*WQ7J(;PZlj?0~}K*khDibMWv?)bRD?-O&ng>!FkLE zDeB(d&bSV4mOH14irxFIjG!AcLSCx7^dt-qw2tKxs{N2@n6%l#e{8E`$lfis@JcVX z)J6lS*+?i%>6@N;Q|oH=R3;A4QuczN9xX5R#jH9)@UpF2T3ib*J}9zBzl{u!Ey2@xJ8EXW))x3+0lM-< zc`Ll(i3vUid=RC2`)8YHd@*KpoB`!v9O5YCNVhR8ph$ZVv8`$b>D zGhZiq4%oMG^073G;fuZfJ<#(@F>(+jbn0nm;9!hRw>40*OaV9i;?l~Dw|X;`fcRv8 zsDUDJgWx{_w`ti}{fYWA>XD&YEtvwriz14}Y;|@p^2)zjW1rLs{F~ z;zBrkHx&6&;LdCiUKY_;qOVw9iLfikOzO$5o_9!?9DstMEtLP3{OdX!{t*u;5l}q4 z?$;~(UOWavV|N5*ZOO62o=bgj|5y*OoM7Lj%kLwyl2b-dBh1 zm{Bxoh!&30?8HQqZPKNz646a%xTcj?PUyb`#*DB8elIhz5;v+=+!TT6(ecGtEm&a9 zIUV({7`m3eg$>X{wmh^yQ07Bo|5mtX4lA>w)f1-^YR_{H3XP*vB0|=7J3ZjuwP39H z6blRCCQ88uGQoe-MOGWAx{QY|=Wq5>{$4^z>)VSC1(p{G>c_fndlJrzT+)LE1(Z@Area&p#^9CQ@RX#E=Nt zzF;jU(!P@5;qL!=dv`J0FbOTIpY!h9$nJgz@?;ke{01E5$EsiDfohKqV1xHSvamOL z&jcBIP2eIM8Pb`~5x^L~&*i>9L=_TbiWYEY(HY41fEnuY_bfn=G8XV#$9Yz_B~|1U zyU5l#?N+OwQ^F42kANpuThkP8H1Sk`>!8E+^@!=_xv`B+;AQv~nRCoxP#*JL!m$K& zdoFlyk)~j*x>v)u9~h2m+;VBsa_c$6%?mmQFQOk6DK!Q@EMe_TKu6|?0?JBH{Pn^B z6}*?7$O_Z^4=+kxkI>TF0=ByAWlqV2$8&}m#FAUy1YtPue4XRtJv;cO+GwSR7@o zBI6P=TAUXrWa35YazoP%D0C7!4@}Iv25qF~6>B3jTF2&cS`**b%l+QG&1fNh8h+@XMt#H_UA{s!fz;@fj|+etr$Ji0_oNN;^unh1lr4kU>TGeSyprY1(Erwwgp*syk=kTxHRiQsgap+ggOEO zSK22U6(V+Q$UfWB?zCZfDaG`dr8-WQPMZudTiPirhJjNutJ-Z>WZGJOQB+;iXKj8W zycws)Myg(`#F(>&!NO+Dp4QV&0J20=qQCW8`%#?*l_2G9&sm+ai?gwVqrS>!iMfqo zHKmEA|Muo9QWRMBA*GHsCFWzeS;Sy`zY#2s#YPGt*fNHwWA@A=Ol*MV6b+fJhvn%*jiANHU zCJ&ER1+NXbak>qVVtylqwTT1U%K9aTy>zPMBI_f37cw}1e?#OqxTyHH!Z7!qn)R53 zqRha^PlF7<{_1zXS1@qy>bGd>)PMVykNZLjm<;WQ=Q}siSBA#yfpzuZgb7C_hcS!_ zx77LaYFXcdFwbe(0Dp=@ZUrZl-l4)AxCp{r2LD=nZKgM_kEre zd+KFR2tPqb=f<>RZ_t#hQ)c{3J)6)tjul$)Z?9YtEGbAQsL4-fc`4TmqsA+_8aGmd zVrW;&6?`25&|Jovx}mX#kLf1sWI*r`XXke%U%&o)Xj?OA)Crt))7{X|GwILt=>9FJ>pt zJRx{sv^P+D48uU&GO9Pf>2%Zf`FW#KRnuvbRSZ%a!k(q*+u$JsrCLbSC4!RcV${Xp z;nz>j|Hm4%XS173lHIzWH)KReF}k8*_bC)QGXo*pe`)=-KA^Vj(z{E+=eJyIZ18bl zsV79XHd^@o&|;IhpMRD@q87Jkm?^bsjt7z0Pb0s27EM>KU~c7O%9_?zKP|RrhU0_)rXWp=`Dj&sk!FBbXJQ`Ycel|FzTMZ zNxY(mFE;FiSe1@By-$e$!yaj`YU0#}%GrH&Y{iyVrSO+GQndIUnL6{a3nZP9k)aG+ zsx3-b3W`A{d}&wLu(b(VHhWJa9i4-OmH2Bzw&DPgL0!!VM8Stw1Xb_5*2X{Ja@0$F zVh+q!DLNqSMlS1LZtmA~kB9Pca(+!mq9Tz=2+dzUuHBug%7ZH3?0jvW&if+i6%Tr! zM9?}giUxVdZ|9#24i_5BUgoI;PA@Wx4K~^y^2|ENnuUdH*IoDUN0wvOX0JRK$>=gQ zy%Rj+6+kxv?pN7UD>k6^^Kn^QwBf-(gKG*Hqg)3wCeiR@DdGZq-8+TsrRmB`uTEzF zF+G=$$SSj}kdHfCwxmJ#c@--Cx;!02mBC z%Rx(PD%2dvn{;`G)M&zczVrqlzH3z_Q*VcSt^d%=>KbigV8N2mq%C8L46+)0h$RFl zyy?`Fdp^m99e>j!f2(F7_zlI$4PROO?@jnlM{qt;zHWvFXh}YhtnCR4JMblrQe;`6rYKVoYU*rgg6;r z44_*cA0(zlNShLjomx^_Dz5akv}6!*Epa%7eLrrCV+ZURN!fo4oSxTyGXfp|6#qwf zfr`B3a+~=_P+9NP^d|@Qw{O2hR}$5{w{-3zi=Hjj$;BBAGN8&|fT!~zUAurqG}(vs zrf$LOgvphdac!svMMystWsEHRB``ft?|E zdNJbL+Xq&R3c6jqx{V>BM&Z9=R17~w?Z2iu zodtDK?{6CNi1JB^9MtMLEd)Z3@s(9-{^F=3-MhM4W9~kY!jYP`&!~sw)Q=3vvsrDz z_;=R7zI323CZCVb(`~|t&;HFOATA)l1^qpp_Lyq!Paps0lb`eM*Rzn!jK^=0kQ_!~ zA9V($DNt{(LaX>c0DQ>g^TJ>PTV~>*v`k5PZ~PZW7B0) zJfeV)fMVY|3A9}>C@1awTR2RP<2D)B-R<{q+F1O-ANJk~+aY2Bz|0f##t*z<`T{bl zgtIqy{~5QXQjNVBqzu#ui8rfuTiHAA$LGZkx9(wnX?uEl8j0UeBCvg!HROPG?sO`S z(9b>J9mvBMdU3rLud7fc`P=`OoC{eD>5)h8FjURJ`@Ro%bEeL=t=3 z^zRSWG5+c@*QdG-I|#7?()6Y!WGFEio6m-e3fqc&H&;Tss4XF-?jc{U;58qUPg%A+9L`SKs3BWp^I=tzKP&jX)KRsUuG51Q`+(&wJ9UUiFJ-lyXj3%qC%_g{E2 z^{&(Z(r44Z6`9V24ACY;V(JwZTvMlgc?EFK!+{Xz_)&*dGKHJN;|Q(H>~bZBcPYY@ zP&e1MO*c3$fMjR$ve$fHb(gc%gnm`(hH)wR3p!$rttN%O9%wIJIr($ASW#T1tI)Y% zC$W3+Ewhf*!{p_v@xE0_18sdcUVXU2qcfUWFW-|E4($7>t4!lWXiPDQ1(`i|1l3qR z@X9ba^mcl4Uh(N*N$lAYeM`eKJ&ST?7RDoFs?|Q41{pmk+%&POl3y_QaUFXJ3zjF%E_SG9ICcK}Jmv>^W^q$?b zWimsh(vV%syr97xbMru*yH^SS`2Epo$i(+ggvsES;!v7=79Gc_|8k+28@zYdwxaUj zy^w`&n-v*OD9g#jh&JTmw(}k=iq;G$qQhgTAkb}jriByV!^PZRD8AHLT7p3d(GpkR zb^ohT)71cba^}aWedd7uo?ORXbgThK20g`}U7Fr|5Sjuh$1wlv$|wE-eCPG zX&&5aT&i6d4>Riyd02f`^ftHBtSMoN0KkzGs->#|VL&=fm$$6qnYg==eqW_;X2;0VKR#?Sm-{U_1(_q1G zoAm*HZDdT%J_L+y#Z|AwB`SA(FgC~_K!i5i9e38svq#*h(2k@=k03vr<4xjCcv5mW z45Ep_hzJ$wP*!MR(7Kr&DZB(*jF?`d*=wh~W#`~)qeFR8jOJ}O7RunD%y@bdoDNS< zGM}zl{Stz4aMWHXmMWhqCjTPj!#$4KTUBQgM_p8mihyauAfi3s{Psdx+LTAqb-@{= z^2Q6&KWFTiCGQGKjL0|y**evSYnvBG$1%SEAdWic6zWw~x0b5P0f7p5WX)r05Z2HR ze#M-$L4RWMERoPdsv(1|=eeWb3(ef2uLb0DgwTxjpd>ey<-rlRUl1CQM8H0M00<~_}eOt%v}v~Dz{7R zgH(d1&=C~KH;&ol*e0xk5>LPas&JE0pF_haV>j~2W;=GCyL!NbiY+lYnYO3=6K1_M z#u%15lHN!2S8P6JHFwLIZACUH1{9tNbH4Rzq(Q?5v`;V9IO>8zADplkw1hCLGWj89 z&;t?3EaBd^494Y<0$w(fCDfjrpmGjGCDY*p@%0M2A8S?DQj3;yPi5}%yT1lz1_sD& z46zo7Jbp+GkoT}KJmlX%YTLwS=|ICOc-h#B-g`vU-&0mYeJsg#^?`5KH^LYG+kUNm zwc#KICZ?}WsZSF=MC3@=qhC$_dR%2uD5w8mEi@h~}jY%|^8W0`?$sXF9|J#sf+ zrMwH^RZ72lSt2^e{G>($93QlF-7q1WiU0_jjPTjh^?$n72#3YVzxeCH_^*h3Sdu$8 zXB#=cHQG}-=Rdn&s{rZvbhs_L?z@zbE$Nz2IN+8U3=`@AospwUaiq@$GEOWKGvB=v zz_W>*wln>(JXfrdatC9}FFIvW-Y#u`0-o_CailFm7KfsocgFLv=(p4+=ZV~}QJ}%A zKSpt)57!ZXk{(iVdwZM$a};*`kTG7h2YM zB3<@gUS4IoLl;aqB3(4xy(^Iwe?+N~H5zi$85~Oy;L%~FxvaEvu^Y0V-k}9Cn1++A zg`_s6$b-pm`!8NQ$cQ(s^E~;55e9_!(X(rLA0tsP1xj%#h zJ;P?EZ#DD0_O>Ica|hvltK&7RXSL9siY6|&)3(6`gy{_6c#O9}{CiRy#nCr)Q)Twn z5B%eMM6;{7A)%7Z^8z*dak#mdB6}V6#J^=TJBloE@YD!V9RhTT|eKr~*EIY09CImGmCbm)jrLhuW;42b>Z}UfR|! zAcii_AFWiO)s%g=7yCnjbe5z)?p&!hy-sc9V+qgLg*BbgDpL6?xEH-OzsSI6ng`0p zQ6Ao#9{@lgVz$Wg>#NJg9$A7fbhm1_G8l=88r^YFil6MO364{f^M8PIezhO>d#w*_ zF}8vKE}2e$kSST1br*1}t3dhl-qY(Qf+Sx;u4rg5>+TdCx9_982K>)x(u@d1->}I* z1#7}NonsSQTu-Et{~2>TrjyU6)GSZdSWd3|^b|VX{y;j*E?g;3*`G}IX@Ou@dY<-G zVtRTMEcC^Hw&)3t0ggv{d+XAKI4h|K2><#y%j9h$DP90Vn(^R9H(<}CxK(Z&M zPAWiLr@X`Dk{hF2Jqx-TSYA^@hcuF+4-{r4j4*2DtS8n4)Y2Gpb!Uk|>DA4yXmlZC zQ#4>~VD++5$-7}E$@&R}&>elg&*9N{4*N3Chf*3oXX4gp+QF67V^44bD*lqW&IxLA z#iTedD9==Sj?zx??x!HiH#m^x5C;V~z0bRslbG3U>RQok;ACex`hmdkg^9?6ftG+Q zZm-H3e8|Pc)59tjP^;WT{i{^HyBeh6?)EZznkU|QRsSDs;O$j>NDRR?U*%cdcQ|hd zcSMaa^_zD_M&-Skb)+C!T--iUZTX4HyX(?@Ubb42*b$3n0h~$Nq7uZ?$wyRe;2Yzy zSYnbxbbnhge|8%=S0(z3U1UQ`>SFI1`nCz^pba)8>45k#jBN84D3g%{fqdiPPYX-x zHeb)(B6^zLG$5PkawI!%{nfj2iIpxjA`VD??q4q_0bRV$ck=t8?8TVpZF)4oYQezgWy%!uhOHsb5I)7$q5MXO zwEe%UFZDiF9bQQp{a3#e5zyNHSRu)79wol!Mwj-3-L+8kwbo3=FM{!vr=ByXNZ^%!bGk? zZ(9D%3p3}iqt-&>c#HE~=OL5E8&=bmYl0+fQ{7leP6Dq&3<2iTz%U8I1%T3W}BS9$q zLxV`c-oVBU?UWc|?H8ZH{7}| zV%Z3n7rX79HK7XRq=9}h=8$RO98VN2%CNWcy*pGSKB`jllr4E%@|sBwT04r)@{1jQ z`lVazsR31Jpp2CNx1Brg_?%!2Cq~22<4&a9u+`n4hib&sCI_&s5IZ9;}Y@WGnh`lB?c@_>I4@2Jy{nb?3Vj zI#{?xAx<|MJ6`FJJ>$+!q)rr|kY2xGbLmn4(md>+OokMHR zS!K@~L>ZhAf;oTH`wl8mvWn@z8af`2>)@n8RXSz#3(?yy)rPSt?te00hkn9IN}iET zP`bbX5fxBkLedsDbgJOHlahUy^Fy_HyPkB;U<@Yqw%rEMkCDNL*yuJ4Q^rN7<@40> z`^(jmxi@-x5nUero{>Ou)4Fw19W~n9?c5?#2&TeY;H6*Ae^xOs%QeVeqA+19#evYK zxVYMUXPnQ$1$H!fH&M?2{!U@h#~-xq;H5C1GnJ^RxG*qdjF?g3w(qOi(9+;CXi=w$ zG=3BKt8GeDVlA(mq!WxW5*Bc-_{N>v)ZO7rp||vE zT`LlWIuFiS`~;>AY$MK&MhwOv&`jP#vhI|FlKtXs2~9f=m^sb|2+to&1$zJUo+mK% z@!2=D^yyuF1~LDkiHbu9r@6B8sl`_rIeX(i9TlqJ>`Ig`A3Kh>GI`FD)3 zA8!u}cx<*e>6_Em?G^S@3QWb%&WQa#jbtH*!V%?(*tQWuPivz)GzFGdAI249WQcS3 zQh?-3P2O`KEKsle#*ay~>l>u={-t3y(ny$?;-6F{+1c5d!>Y{JV%4LKhGAQynQs2> z*h$@=s*RAg(Qn2T?LfkSRt`siRM0isa@OuQzf6Z#`l)te>2TnNT6wXolt`Ij$A;Ni z=ma*ISR>m<$|jKsiqf6h(s-|K%6jqEMXem$IyzO_Gj^RR3=1ysq_OLKX&E|kBZFP& z!wF~K?uuO)Mc4sn0?bW&hrO7I5K)@MXgI5O@0uxSw=pO##*2^u)on#-W80+2$IM0Z zp{D)GULH(9=%3lJhWPJND%-}Ob5|+BDs~c(f@=$O8K!euI*~QVeLa$Fjb=e6Ajf6& z))>@6BfzPXtBEW?FH%>%oSjcYkKoiFIYd8q}9{wZM&W?IVx~BcHNR2;6T3ah4 zDZw4@WDZ%YApIuKc@HBiJtSrjnomKMFmJwql0d=eADoAvGlBPz{x+_ zAL~em4GiL3MTu%uf`@I37P35nt&Zdood(idkfOk6Z{W$k|Al>&wn;lm2QmO^Aat*j zIa0FVemz}?;m-IBg2JAth^v;T6iG4gUzLh^3a(o#1XlVic(QA7O%N0fSj;L$e7e(f zT!@+Hfs!}S7RFq9yUxG0&UMBeQwO9HX28YRHX$UDgpK)h0zsH3rMF z*bil-;K$4JV5zDD$E~20#3v5}GDf>Xl=b~g3)X&+PHC|35{%^DGZ&n`r|MBxmYGj4 zTv4M?hgNr!y*47w{jetBoBGRwf1F9oz~Abak+%VEZJ`erH)RuVWD^XAt;(i88~kFa z+Cbp=hSK;bOQa1~cL4%LPctU(3DtM;>TBYt`}$<!`g`CPp4cVYYO}bh3v=jXP#u23n6EtfP|~=8f%H$Co0}MQ zR9s+AJmY?w!9{MwAlDk*91ujMgw)oj6dnBGlNg(#(h=%VjlZ!-8>nRSh6O{zx2}`F zUZkzf$2zz4l?7|T&)0y%Sf()8!H}VyWol~|Z@;W%dP&-Y!+eNlPXr&rw~m%UkDMf4*Spp^v^DhPw-pvleXbapF{$8n?|1H$3)!s2HoH z*TXzT{eQ{)`s%bj1|hAK)%-oW&p9B?J`739F$jz$RZ#&f5kU9>0$-b)Y9dE4s}2W( zhuQWfFM9vM^kz$9I{`K@WQZ`-&l??+pF5PvULY7edt95J2Spo&HGd;brP*`^FWS%7 zw08BO_3aa{4dZ}1j#ig6Ex^y>ltAaI)evOD;nKdNF|(4hGz0m;(@7w8S^LO|?e(8n z?f2EJt=Br`~X1r?X#`$km*J@z=Z`Xp)EdO`DBMI)qzmIE0>|ND#+1}|gK+@}~t zJjD2x0epm)_eZ*S12Z~_zWIm9L`2kx4VBBeXXCO=*d;YYeTwXhz(8f|ia68>JO3>uQy$T8mek zf$ybn&#!bpclouEvC7(J0s-Dxk@cErC1}w5?|3eI5#RnQfrP3p_sD?;4F}FIa&UUe zKN4mG!^sHYNhB9xcCslSe#4;~&ukbo?o3-dq#^v?(a*pwdR!SC`-@Gg>UiRS%JnFl z-Opbs-=agm6tzM7E3%!sMniSBvN4C4-v}X8TwlLt?R@pr>G@~csA`}yHnX<y2 z3D2o1<{TSMc^0lmV(StX*9fdMRrFoJgR!&ZJiit46-Uk$@X2z!&FrgXb&o1q=goUE z)-5#5(Z@R8DX9xFSH`B(+d-z((M|ia$aOvZB7$AwO@7wfkNv5=I%Z5A>MwL?3J6tW z+6p1t_}Lt%yj(b``H4c91}pG+oH|58i%Q%O)yK=10Pw!mE^2}uROOIbv5GAg`U`*A zK;r#_!ITJQ54BCha~x4sbWH^P@g;nCh&?Ld|Dn~$W5;AXoXq@;3+$kFCG*BPH|t!9 zw8r-2!s7MoPM+q;wWwFBm%PaxSB3++{nB%cEU)QRa43$`&YyH*oi{z>k?J2N%t zZyKb(o*aG?3?87c8y24m4~|G|OyqF+q^2lSWz?IKn|7_Ml8V+G3yOBz8~pHo2~^gP z9Z5*2$E{z&qY$wgoOAs5;WO}%-s>jpU}*4)2j#U%)K1XE&+k0(KiAU8c+b{fAQ+0A z^mB*8X}Dn&B?oTIXc4*ayFnbVBL$p>d{2x}fq2nu;)9w(aD{ArG%=kgRJ-|htkC%7 zep*!&dA4o7x@IDG-nm?@v4H^;qv4jW?#&?81`D4ER{cC75m=@$4W^y*ijc%Xm5T`Y zRqb|JpIsO&GI)%!S8l2s{r-Pi0RIewc2PP^WBeBSy)&LV3W@@s%Z=d`rAPDTTT`l& zwZ59}#}7r!#)(^!KT;UDz&`ovSMkzel?5E5sd2cq^1HihGN4-mn`uEO);j~<=C5tT zes8kRrWGreq$_Rpk*&y%!*5|qlVht!fypQnoT%CIBi66{DU|3ZJ&x;gJ)+9Yaj;Kg z*E@U1WV+NdOFdT=o?LZ}=}5;WX=YL8-zO5{f3ja=$p&!>A%$G}FsuYJ8WFZ4>YrlU z{KBih|G0c=xB}XW;EmEWEfR(9Y3?7!p{Mt7+lYQYYMN-l#!FKBEtP)6x-8Rnh?{l zg>JU{H~^@wu~DD_3raz5abl!`C-i5wO0lxBF|q>u#vlV9?GEo;+Ii34N?%xkPj+jj zBjeH6O4L)neG$xOQ0YEp{%?>G%@K&K_POhep_{{6@$Sn0sTq@=;#Xo=$32+nh@|TC*zBDQ zsIDqZJ9Nhn`FDj;(B95R7$-aMQO<0obE$(NHxu75h1ttIU!Jj=Mb5!O=X-Tb1@~)Y zg`#sb=n^H$h0dPh+Lo_Gh=@zBmQQb48A*#?m$`S8Y}=uRPCulcKI3yw_)C*N^Ic$# zT0v!}6*p{*D6Ufb4UQ^#8oRBj)^WSrkUjbBs^97?^OcXg;-%nj7~%sq_;BxLlo>uB zpjc`?mb-`<-^=*6TSm48n=+RK*;p~7A`3!C@( z$QDi0;8wT;WXb!m2EMOIhFy&FKL7S@-*M^Lvrea1n=|L_LY5&d)<0YWbbTdSJ<7|KiaYEjqU z2{bQ9TRJOMxx`{nuUd|H1XfZJmWUrRR`Q_3C)(HhY@BL$X2B_Ooyd(tm~;FAGk`17oW<<635S1hk^fUQ5qK zdZIcMtpTa=75`VM_f(yYDE_DbPO(+hr|SVg#tenL+dj<9{7d)Qn?~f2=Y3+hQ~r*M zu3SY8SY6%z)o%6&Y=ItZY3BYF;8*wR`n9!4HL-*KEJ~j0B!ydc2)%qX_o+eng&^zcj03O&YKu~-ydqaYxH@G>b@eA=qGc80( z9;p-}Xm#?Z0s3>-7h0Vmo*SA?;PeEN@bmi#Gw!C5Z;=6w7`ch^3ahW1i4k9HD&1~VSsa@JcW|a*TpE{ks4g3h~ zpY=l1hX!-`e1WNP*7?ouR?vZgrlf2?sx-E`vLikp$uQd?=xd=j)?5_%*l#oY}ignakj>s^hiI4o7=`*J0YBs-wj@2#NCn_p5 z`Mvf;HhoavFe4C)TP&&;yq&CY%(~4YZungMd;2YH_&elUf9yP^a7RjNJGugwn!0Wo zBP!G%Ru|Aw!o17N?;P>Bxbz#jV_hj1tyqf3X{(2#vj~q4C0az`K-u5^>)r*U$Mfn~ zVHE>u@yQKApu`^`&8`vQ2VG`;)s zujQa*NxC6!DZpBZa>3PKWsImWx>XDUW6p17Nh|R^%A1d2H#8M_={c0l?7Tlak+&cN zgJ@RbK@7?`+F^*_xY^==k)`Y+-ii3$kT%T&VPvJUh6HtdFd?{oMs-^@5o%N#6i*CP z997IN>czJ0-TN*oV4DwWt+AGhvNpuD8ce;}77=WwTMZOyReuI{;w2B&pWy^cc%b`D6#wrr)SP)e^YV+Oq6^(9 zM`K#b3hU0mIcdAZ>tk=^T)KmE>^&Se^G+M};Qbwb8I z7ggi$axzkH$SbhT0LAL?Tq4EAR0NpE>Yt@8r;QYAu_;>vC;*0e_xnrWF>}kj@AA53 z=@E_r65#eOQ6q>#*UR?W0aRH1Qxgw4F3BWy$&UM_a_{o{ca^Yx^5qkY{4l^)G!p6& zl8}X7zRlK1((2qVo@qjl*s5bp^EYUp+icFRwW>A!CFx*l(WKyLAsQ0ULm&?gh6H4g z9f{ZCiDfgGV6IrPXuy^l?Jf*rWtdxYL}3fWxf1h@XX%aRjX4{&jS>MU4+PSPOs$_% zxSAvm2@}GcL1Zt;fmj?6AxbbObm^VtO7P$RUWwTc7L#$J{bB0jkBMFKsaXRpkDbCHF*%VZ$qP)`M+Ezh)25Yag{VD*fVm=t}XG5R-0C;S# zvsPJXW(E6=shhdH+c5rUlvM-@0vfNGO!oUL#=bsJL67;e|Gu_*s9_vfxYURmC2DZ} z8<sR`^Px{ylq3sYo8_K%lHi0k4b&nS7kOSryV7k|K7aap1hK=HdQGEk`S}k>L>(G`cRH#6MUKOz zUwYss5+|Uhe1de6RRqEfs+U zc1b!7(x=v-eU^&mPHC(w4nVBv=zR-zJV_2Fh=^c1u5*@p;4DqBsT>|fw$8@(G>y?e zw}Hk~QuzPM2Ek^Gl^SpL^n4k#7ICe#dSUMAnLg*r#A10D(=Nz~3H$2L_Otx*Nf`Pu z<%@-ey#1>=`gofT!nU}hM3?O7_|}U1FJ-G@tpixyOnlw6DbAp178aXp+3wr#R$R2X z#xpKg#ikuk6*b?pvXjB1*&o9jll#b86o+x%J<9-4m}? zElVg8(Xos6VzyLl+w<|K?5%2<{|o7FT_lPPN(iCd86f$5L+)ilTKlQE-8nLweH-DY z39x?n8M`pj(28YI=|;gO++J2B+PrDbu{%u$#JMs50pQ;UpM3rxP9%X@rQ^Nv&+l|o z1W)(sWO$4n+PlY2DblIW+|>4y)b|AWd;Wv9Cjajk%~Vk;cCW>=BGd+SD`Z z)SxfC9|!32WD`zIZ+4j) z<7X7_rrqxjUE#4Zi7?C6%F;4*z(p6{r4v;gPWO|{Fv|qU5LZ{PJ`ox7vq#2rXq2kg zDY+{ss%&%NP3^u08CV_jYkI&Jx*r7WXYpMLfXNVLsQzyqHsY`7&=rZ7!Mg0~J&n%3 z79TSl@!f*S_;B-I$DBnR)!jmjURBpL zgx^43FUC!T+oLfEdr|tpjSrNg`L$IBhtNx4CKkcBy5KbWgoD4YLCs#%Jj%ZMAT7=R zz@w&pYU*m&?glZ4kZ*8t9EOC%UU3=rQ94AU-)2pyj!)qe=GCg`FNF`3XOYOB=HlXZ z*p=O7NVvjC*u(7@x;Ak;#*XbRQvD&lJGLS{adecJxXCQMzAJbXroZ;C0%QKmh7O-W ze9Ik6K#xm`<}HfOHw-uQt)ojo-vtAIT%zotIk9xTFrN+^qp+3Ycm+{*?ED)>CR-&U zv?^Kyw|@0iI%dNQZPn`tV4ODNDAs`Ez(5)UmLsMPL{mGIZdCyOaC_9gf?AZ)pP!nq z^E@!JgdY2mL>yf2OGchXYh1Dj=wme`MjwYihXPC^Fhs*jyT-n&G4>=&R+%(?ab(lr zddHReGM(9~=xs&N;u%JRx!k=`>wm8J#zwtZshG7(TdySp->2r%#{sT7aqF-I!NY*m zi{65c`<(B-H~9TRee`%mHudWKg;c*nPLI=(i(#mE+dK_TXZ~!~`YYo5RNRAOMX1_I zIEu4g8LL#}E%KHZQb8*&F3zmbRqhxWqn)M9b%4=6IL+I|(~y|E=+$H~rsN=j*>3*& zw$KF99;ehA*QYi?fQUl!Aj{w$gax_OC{D2TD@fW;2CRWW&L3sD^gjlUODv;eS92|< zwivOerl#U}F~}elHeB&HXkMGF>$o8XN_KZ7dk0nGhlz7kC(;?#(4uI)Ac~c4K#I3u zC*^=DEXYu9j)4b6ID_!5ZMHD2=dJ{j-r3kjW#O9`99#67Nin8p8iNRVBoY4{LcT?Z zBrgmBRO$brO;-TxKu8?Z%nqeLd#zP!+1*Y!cOuZ)GA^t2_izbVg zn9B?$tzQ}zg9s-xDw&GJ2?j)cxsa|L2jNu&w7M^{K$H!E)miZ@S%L)1P_rB zVQZFn*;NpI%S?&w%o^vWj2NMNvh6#2`cck7gZAp_ zuM05LY0skGI=mkwzWT(|@m?_!#F|<(sTV{{y7rkXgqtN`Ey!eS*oxusx7Y5jaj`Pw z=VKICs?Q8c32*&-Z+RJ)U5BznhKJ3?1xCs)a+bY5q8b;WO=YqMz1#l6?w+(dJcu~P ztXEdVLlGFCtFcSeO)1T4zLd}e^ret6(z+PoyfU5H9P2&b+@z>QX@AB=TpH+?M;l-6 zg#?DynvhoYa1Q-#v2UYl83CP~=x7Q4rvFh!Yx95%wDj0zSaf!+IyS94uYR)%M=@5VBI$Co(O#alLlte4mum@%K@gX>js6mMHzOgRs}mT0nulXT@3%d!~Ra zyB>$6Ym~b;8o)TyVPO(6p@1r5=_Ii<|6keuZlbU&qP17c4sP0<7FIIg`xrsU2BvYW zIRp5KQe!)W2c%M_kn1tN6g~+sI4eiA}m32 zIN`2CaldaP4xlcIp$-l3I+2@b_ZdaOV9RX{Sp3X!@BW+RCP%M$SfE(+MiHUBJx`bK zCGP@k*l}FrmqV(5`h-pM+#jl=BRht=#l5zxNk#3uwm|!RE9?|nei^+i{Qf7wEFl=r z>5;!aF-eS!?giFJK-@wzBm@4L)r#`v zs%)d!gYam>_AA}<`yW%a2Djo--W6o>n?YKT%kx6}G#78ET^#>jqRLp>fHD`@lScqg-a-ARR?>cYJ!G>Cm$)E>{zr`t!NdOk| zdNsZto+CJdfTG6vFKEL@g{D4XV<=O|vLFPwoYBdip(LiLvK*ynH+gZJcDaKN{olz3=-2mPCs*(IX zlJ$w!D5NVA)-4*AQ?;+nW=f#+4KuC#NdwUeEGvXu@*10)jS%v;xlH`+J?0;(ab&ZX96 zwoZxOJM#aTwoA&%1qm%n&)L|<8$}sEj}KGBsx#tdwBi8%60Q8<8%=?3<48~|ex#%E zt461B$%27B8CzU3o6Y*h{h#=3F_@5(<6uglc5!ebr6!c_!f$1jv#$G8XM+ny$EJ^C z<=GGLIsv2)wCXoI{wht-3_rL&OW@EDwt^M5Qly`h!9*Ho>2-$ZRG>hg^7i}fg<^K*dDzLkwsk-w(Vm$)Pb`&;pY zBj`{=H1IIVFr7Icykznf_6Z!*1Oz#-b--HbtV*gOk#5Xt%}qvRypoV+c2kPkkhI`V z`T|c!cL&KEmc?V=Ubyd^_?n*pOedlY4fbM_dp$2n=l>!zG$P}*HrV!0zsntAJPZvY zj-OVoRCI%K^g1{|U*EZW%#H{+^l|XVdnZ^h*4H{}(CpAq3t|4L4J`~#QB%E1o7u(6 zu9V#M$d2JfGSo_!$jv)V3!%y`NZT6eJ%8>oP-I=n6Yh~+G~SHf{O2+Y;o#Pz1LH`< zwpk5|?BFR`CZZxVneB^KkDyJmO)wJr9g%*RjWKp?I{D9l@XqzE@Onk@Givd7zTInc=e#~()SHWTTNfk;GfenL%qov+ zPAWroNku*avGsJ_hX{}ijH%hGw7-%VpPE<_)Z&W_gGPWOLBERJpVQOK`c&3^EQD*J z9U`s~$NtobZ$;}O?q0aaU{qeUd)8drj=eRL_J5QPz&MO+m$5Tms4z8~+x&@jx~@g+ zJfzX*8?+6Bl-Ii9R1^D`{-$&!2*`Lf`GxX;|M~NmR6z7JEV`lyO)#q?ZE(OIBfs=4 zrYL~@Uw%W>c{eb3YJY}bCK%~|Ql+KYnn1Cs%V5WgFwM@VXjEQ!=fm&ps)Phu;qjRt znbsveh3^KHpxI5{v?kL=!}Q}~M4#3=43iHmOf`OPwGvD%M`pAqreB;U&`rC#J&-=8Lh z^Bbtl5~r4M_dQrgS9V4M)MhQTZ&Hl_+=Hpc)O;EHuBmLog5VCn(w`S^qKGEdW{4p; zBTBSU#<`Zcgzlo@O-;SLi3JA>FJe~rhpeH30`$l{Mb}yWN!nX=&%|{C3;^VHM23S7 zCRpnjmnEYFO|El$xVcDmJjYnDP@H}7MzE3)LW2cNf^b0EF4w_2h5Y^-sQMMj(RLOm*sOvHAAQCCeCX;vi@P+$?%5qRV3W#Z~;Qo`tx zslD|2(EjV|94%r7@b)Xo>ljiHyCk1~1T8W#_7b*EPV0+^_j8UUp$fuEqZ0=L7Bs!B64nnPLe9u+69+o$8XhzS`S`MDrZY05&Dbv z;sq4-mm+d8YbroImL9DMD-1_RUPkG&SkT6fq81UcR+gXy=|R$e*}epal~dK{m~dmf zAbOOM_rJ|kQn0^Y4Ud3%(N%(^sgI{s7%CjQhZh~3A5`5B2)oFAi3GnTfx74tWk>U| z8X$25K4$+-@-q@Jx~Uu#Ri15YV5hx=`;}p&c5=jba-^OXRTkJIW-59Ccnr+hc{HND zQ+h^NtkX}2XkJH~{7!tLk$9W&|M7I*@ofFk|F>1eo-t}uTVmASn^Ie-(TGr^YE;## zQ9DNLn625`Vzd;cf*`0;HCi=l6s2Y<>UaD3e!ste?tMJ+Pj2pg-@MOxo#%O-eT^*p zc~ZJrj5@AtD4o*h6@QPE?~|(5BTTMkCB&|Fd@!Ui%4XM%77{H{5?;XDX*w3wJ z)7Q36+AQ_j^G}e6mJ_4I5HR2&9PpYl3!_wDYFNeR`H{>sczj_}+0DKCH`? zGPCT7eEgNiu|&yjI#nXGNd>mH40|~elN@}BsIO?;(+T_J{KcBAzR?eiF0fa8{lYtV z33YXKwqrb|d81SWxs+tpJbQF#YTo?FT)v^c+m*BG=HjOi(BCIRpdaQJJyR3elHyQ)B@K9A#%*}r>Ov+K7xIC)%tB?RFPlH(Kb}c6Tt|__n88M7}`RSRD-p zdrFSv!_Ix35OjdSYWr~dY}XU9i>7%;Sq}%X6Z_9s&G-M01^C&zh3jb`0%g#U!#nXc zwc@ql)s@-`OAFndGt7i+?wlV|L$29d-6vlS^n7h2-R2!7QHxSbYg9U0*WgawHreF| z9Y`jOpu>T6O~_HLWdf?qjziP~!mnN|Ms56^5qx;^XH(}z%Q8>Cagc%QNt2T~v=&yI^= z&m}Mo3@x#=vf}MsU8=!zGxf>f^Ssud^D!bbyX9?9SUJkC+Ok{&`;LUH$?J|^6BoZQ zG@{zHjP(bZ(-F7RsJ&8V%))P?20di{WwBXc#Q~!%WlKzEqs@vC>K?rq@{~TMN}HFq z*^+w0JvUJ!JVVR%P2+%8{QDZ5@>pGgK>sQN6!%FwXUQKCgqNTnvtg|lFtHVzLi@wL z;oOLwVYGk{mdSEu!My17Xv)0L=@ku2_+)w94_@Kh2iXs_Twi~S4Aa&o(LU$vq|v2R z#74D?k7>fyd^!EXa+yc=a9r?TzrudsJeRkevW{QoCmNM`tO*v0{}jxH&S?mtxYbw! zv)D=p-FhiT1*5*Y?Rhbh>XFI*J4GgBtO!#uEC}I)Y7P!THG@SUq-dd(W>7|@5z-L& zH+J{VfTailp|y3C)^;0NIQ&BSOt`$+DC?#8!ikX?m_ELj|3T-E4==7g z8*CWH)ab?#{WS6(N3)dSl%w&+$}GT zpl*9v(7<(Fir3;2NfLZ7UK;Y%w*HKW+EI!cB*V7eMX@P0dpXyVYvYDru}cTQwGq!i zaTJ8zu9hBWKAjhRw;ksDVvkfDMicXaB2{rfh7qQjsq}#cpHEm=8tT8jlx;{^grUyp z!Z|?oNtiC~_UYaoU0v;k48D55cbEM<%+L}3UPMfkLax@%y~o%v5*fSfiKHKAsVgbG zomcbz$#N;yx@jwU#pLx$8lxiFMb|ETRY*0RhB>+GlMDC4I_khP!J> zQK+thlKfP>y??+vDN976#2*ecUyJ0vu)QFqdiozvwLM&N)F6?Q}A>TK{<)b0Aib(cLu@vfUk4rSLWU7Vpe~K_AM^cPxcbw0^(U4ZCZ|zXkp$ur z(Bma)AQSNzkuM{bmwkuMjh$E-tmcCPHHj&UZXkJae-98+6_2?PbDW%<(e@|$X`uXl z2gx_KHb1QY8m zw9ETYsbt9a?K-`InR_o=KU-I2=!pkr+_tRB$jK%MMWd(9s*=c+Tn8T0e>W1!n&aU@ zw8ELj=*0C#*Er+7Q|uZ^q<^Iqhpv2-Q2|E7e0zJqDPo%c@MMRKwTfqp=ym@3l&gFW zQ_5hL_dMdI9*H-4nUYY+l>AUw63r)Z7sQBvFAi9AbvK&4xl3QNbC-rtXy@Yc!GHD| zkpldNDjy>C{6r{E#Ezs%3ov_6Bsk~*ar-rmYjYo72pGUO1GhdPdApP_7CO@>B7%@t z(2U$FY#R4IhoOlTEC3q|O8oi^(D~wf-{5~Oj-mwI-iubDC=uMj#Mu3nR=MA=guaNf zuB^yVyYU@xYTfe?F@1Ph#7kpaj@eT$8hFuWKi-9Uy_M|-YexuM#}82Q{=wG=wNWMM zcw$}+e$u?`3Ju}g?u(iYx$%9^`wQj1YC|xC#%}+~ z7TEsayousBh&F|UEoud8GpfAc6UR_1s{}E5f)c3^Ee;iKKA1IqKux{i4;k2>^jjXz zdtEj}{S7~T{Tc;NT~kFyTjn>#zCtznias&ww(#8|*`Y*+&+0`_z|eB^j?$w)6OE@) z-)ur$X3~G!YxZtgU01}Oevi1nHcaN@5{}iSp!Elf4913^m@KtTHe4{jmFewwvCK4} zjG4JnQa-P~hF2cMJ%k5MpoND1J6~lyV~kPwEl6zgw%8x-YrUR}`N4KJoaZ?Kx$f}- zBH@|fE%|PLP`Z~-79wr+tYo!!R$iEazQy_uyChRJD2v+mO#wFD+1v~y?Cy=1yq-$M zb~$==F`X8%Wz`CdUvW9G>yEf(EU2cnyKmKFIb-3HvS;XxT*x~19)|BflNA>=GReYS zn=8%k0P29UNcnaYh@T}88f z!9O`FkbeM=+L^A-F;^pg)7x%>_({d_8&!&R_1^EGCjRpu8a2shyt+U788prPKTQA|MFizv7PDghAp_lE_*KlH2?D??m(i(rf zgA%!Y`!7AvSdDrp3k+xvx=@*aec- zyZisyxJ7ZL8k`�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�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 literal 59346 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 Mp00i_>zopr083w$YybcN literal 0 HcmV?d00001 diff --git a/public/images/items/berry_juice.png b/public/images/items/berry_juice_good.png similarity index 100% rename from public/images/items/berry_juice.png rename to public/images/items/berry_juice_good.png diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index b853539acf5..f85206bcbc6 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -54,7 +54,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder .withFleeAllowed(false) .withIntroSpriteConfigs([ { - spriteKey: "berry_juice", + spriteKey: "berry_juice_good", fileRoot: "items", hasShadow: true, isItem: true, @@ -171,11 +171,11 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder sortedParty.forEach((pokemon, index) => { if (index < 2) { // -15 to the two highest BST mons - modifyPlayerPokemonBST(pokemon, -HIGH_BST_REDUCTION_VALUE); + modifyPlayerPokemonBST(pokemon, false); encounter.setDialogueToken("highBstPokemon" + (index + 1), pokemon.getNameToRender()); } else { // +10 for the rest - modifyPlayerPokemonBST(pokemon, BST_INCREASE_VALUE); + modifyPlayerPokemonBST(pokemon, true); } }); diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 1ba756c7f5d..9739f71cb0f 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -33,7 +33,6 @@ import { TransformationScreenPosition, } from "#app/data/mystery-encounters/utils/encounter-transformation-sequence"; import { getLevelTotalExp } from "#app/data/exp"; -import { Stat } from "#enums/stat"; import { Challenges } from "#enums/challenges"; import { ModifierTier } from "#enums/modifier-tier"; import { PlayerGender } from "#enums/player-gender"; @@ -104,8 +103,6 @@ const EXCLUDED_TRANSFORMATION_SPECIES = [ const SUPER_LEGENDARY_BST_THRESHOLD = 600; const NON_LEGENDARY_BST_THRESHOLD = 570; -const OLD_GATEAU_STATS_UP = 20; - /** 0-100 */ const PERCENT_LEVEL_LOSS_ON_REFUSE = 10; @@ -275,12 +272,8 @@ export const WeirdDreamEncounter: MysteryEncounter = MysteryEncounterBuilder.wit } // Any pokemon that is below 570 BST gets +20 permanent BST to 3 stats if (shouldGetOldGateau(newPokemon)) { - const stats = getOldGateauBoostedStats(newPokemon); newPokemonHeldItemConfigs.push({ - modifier: generateModifierType(modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU, [ - OLD_GATEAU_STATS_UP, - stats, - ]) as PokemonHeldItemModifierType, + modifier: generateModifierType(modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU) as PokemonHeldItemModifierType, stackCount: 1, isTransferable: false, }); @@ -461,11 +454,7 @@ async function doNewTeamPostProcess(transformations: PokemonTransformation[]) { } // Any pokemon that is below 570 BST gets +20 permanent BST to 3 stats if (shouldGetOldGateau(newPokemon)) { - const stats = getOldGateauBoostedStats(newPokemon); - const modType = modifierTypes - .MYSTERY_ENCOUNTER_OLD_GATEAU() - .generateType(globalScene.getPlayerParty(), [OLD_GATEAU_STATS_UP, stats]) - ?.withIdFromFunc(modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU); + const modType = modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU(); const modifier = modType?.newModifier(newPokemon); if (modifier) { globalScene.addModifier(modifier, false, false, false, true); @@ -616,22 +605,6 @@ function shouldGetOldGateau(pokemon: Pokemon): boolean { return pokemon.getSpeciesForm().getBaseStatTotal() < NON_LEGENDARY_BST_THRESHOLD; } -/** - * Get the lowest of HP/Spd, lowest of Atk/SpAtk, and lowest of Def/SpDef - * @returns Array of 3 {@linkcode Stat}s to boost - */ -function getOldGateauBoostedStats(pokemon: Pokemon): Stat[] { - const stats: Stat[] = []; - const baseStats = pokemon.getSpeciesForm().baseStats.slice(0); - // HP or Speed - stats.push(baseStats[Stat.HP] < baseStats[Stat.SPD] ? Stat.HP : Stat.SPD); - // Attack or SpAtk - stats.push(baseStats[Stat.ATK] < baseStats[Stat.SPATK] ? Stat.ATK : Stat.SPATK); - // Def or SpDef - stats.push(baseStats[Stat.DEF] < baseStats[Stat.SPDEF] ? Stat.DEF : Stat.SPDEF); - return stats; -} - function getTransformedSpecies( originalBst: number, bstSearchRange: [number, number], diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index f3655217b5a..53088043777 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -375,10 +375,10 @@ export function applyHealToPokemon(pokemon: PlayerPokemon, heal: number) { * @param pokemon * @param value */ -export async function modifyPlayerPokemonBST(pokemon: PlayerPokemon, value: number) { +export async function modifyPlayerPokemonBST(pokemon: PlayerPokemon, good: boolean) { const modType = modifierTypes .MYSTERY_ENCOUNTER_SHUCKLE_JUICE() - .generateType(globalScene.getPlayerParty(), [value]) + .generateType(globalScene.getPlayerParty(), [good ? 10 : -15]) ?.withIdFromFunc(modifierTypes.MYSTERY_ENCOUNTER_SHUCKLE_JUICE); const modifier = modType?.newModifier(pokemon); if (modifier) { diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index fcbe6b66a4e..5c60c146154 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -967,31 +967,23 @@ export class PokemonBaseStatTotalModifierType extends PokemonHeldItemModifierType implements GeneratedPersistentModifierType { - private readonly statModifier: number; + private readonly statModifier: 10 | -15; - constructor(statModifier: number) { + constructor(statModifier: 10 | -15) { super( - "modifierType:ModifierType.MYSTERY_ENCOUNTER_SHUCKLE_JUICE", - "berry_juice", - (_type, args) => new PokemonBaseStatTotalModifier(this, (args[0] as Pokemon).id, this.statModifier), + statModifier > 0 + ? "modifierType:ModifierType.MYSTERY_ENCOUNTER_SHUCKLE_JUICE_GOOD" + : "modifierType:ModifierType.MYSTERY_ENCOUNTER_SHUCKLE_JUICE_BAD", + statModifier > 0 ? "berry_juice_good" : "berry_juice_bad", + (_type, args) => new PokemonBaseStatTotalModifier(this, (args[0] as Pokemon).id, statModifier), ); this.statModifier = statModifier; } override getDescription(): string { - return i18next.t("modifierType:ModifierType.PokemonBaseStatTotalModifierType.description", { - increaseDecrease: i18next.t( - this.statModifier >= 0 - ? "modifierType:ModifierType.PokemonBaseStatTotalModifierType.extra.increase" - : "modifierType:ModifierType.PokemonBaseStatTotalModifierType.extra.decrease", - ), - blessCurse: i18next.t( - this.statModifier >= 0 - ? "modifierType:ModifierType.PokemonBaseStatTotalModifierType.extra.blessed" - : "modifierType:ModifierType.PokemonBaseStatTotalModifierType.extra.cursed", - ), - statValue: this.statModifier, - }); + return this.statModifier > 0 + ? i18next.t("modifierType:ModifierType.MYSTERY_ENCOUNTER_SHUCKLE_JUICE_GOOD.description") + : i18next.t("modifierType:ModifierType.MYSTERY_ENCOUNTER_SHUCKLE_JUICE_BAD.description"); } public getPregenArgs(): any[] { @@ -999,38 +991,6 @@ export class PokemonBaseStatTotalModifierType } } -/** - * Old Gateau item - */ -export class PokemonBaseStatFlatModifierType - extends PokemonHeldItemModifierType - implements GeneratedPersistentModifierType -{ - private readonly statModifier: number; - private readonly stats: Stat[]; - - constructor(statModifier: number, stats: Stat[]) { - super( - "modifierType:ModifierType.MYSTERY_ENCOUNTER_OLD_GATEAU", - "old_gateau", - (_type, args) => new PokemonBaseStatFlatModifier(this, (args[0] as Pokemon).id, this.statModifier, this.stats), - ); - this.statModifier = statModifier; - this.stats = stats; - } - - override getDescription(): string { - return i18next.t("modifierType:ModifierType.PokemonBaseStatFlatModifierType.description", { - stats: this.stats.map(stat => i18next.t(getStatKey(stat))).join("/"), - statValue: this.statModifier, - }); - } - - public getPregenArgs(): any[] { - return [this.statModifier, this.stats]; - } -} - class AllPokemonFullHpRestoreModifierType extends ModifierType { private descriptionKey: string; @@ -2331,17 +2291,16 @@ const modifierTypeInitObj = Object.freeze({ MYSTERY_ENCOUNTER_SHUCKLE_JUICE: () => new ModifierTypeGenerator((_party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs) { - return new PokemonBaseStatTotalModifierType(pregenArgs[0] as number); + return new PokemonBaseStatTotalModifierType(pregenArgs[0] as 10 | -15); } - return new PokemonBaseStatTotalModifierType(randSeedInt(20, 1)); + return new PokemonBaseStatTotalModifierType(10); }), MYSTERY_ENCOUNTER_OLD_GATEAU: () => - new ModifierTypeGenerator((_party: Pokemon[], pregenArgs?: any[]) => { - if (pregenArgs) { - return new PokemonBaseStatFlatModifierType(pregenArgs[0] as number, pregenArgs[1] as Stat[]); - } - return new PokemonBaseStatFlatModifierType(randSeedInt(20, 1), [Stat.HP, Stat.ATK, Stat.DEF]); - }), + new PokemonHeldItemModifierType( + "modifierType:ModifierType.MYSTERY_ENCOUNTER_OLD_GATEAU", + "old_gateau", + (type, args) => new PokemonBaseStatFlatModifier(type, (args[0] as Pokemon).id), + ), MYSTERY_ENCOUNTER_BLACK_SLUDGE: () => new ModifierTypeGenerator((_party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs) { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 247b64ca2c0..93fb5f5b6f4 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -952,10 +952,9 @@ export class EvoTrackerModifier extends PokemonHeldItemModifier { export class PokemonBaseStatTotalModifier extends PokemonHeldItemModifier { public override type: PokemonBaseStatTotalModifierType; public isTransferable = false; + public statModifier: 10 | -15; - private statModifier: number; - - constructor(type: PokemonBaseStatTotalModifierType, pokemonId: number, statModifier: number, stackCount?: number) { + constructor(type: PokemonBaseStatTotalModifierType, pokemonId: number, statModifier: 10 | -15, stackCount?: number) { super(type, pokemonId, stackCount); this.statModifier = statModifier; } @@ -1012,31 +1011,14 @@ export class PokemonBaseStatTotalModifier extends PokemonHeldItemModifier { * Currently used by Old Gateau item */ export class PokemonBaseStatFlatModifier extends PokemonHeldItemModifier { - private statModifier: number; - private stats: Stat[]; public isTransferable = false; - constructor(type: ModifierType, pokemonId: number, statModifier: number, stats: Stat[], stackCount?: number) { - super(type, pokemonId, stackCount); - - this.statModifier = statModifier; - this.stats = stats; - } - override matchType(modifier: Modifier): boolean { - return ( - modifier instanceof PokemonBaseStatFlatModifier && - modifier.statModifier === this.statModifier && - this.stats.every(s => modifier.stats.some(stat => s === stat)) - ); + return modifier instanceof PokemonBaseStatFlatModifier; } override clone(): PersistentModifier { - return new PokemonBaseStatFlatModifier(this.type, this.pokemonId, this.statModifier, this.stats, this.stackCount); - } - - override getArgs(): any[] { - return [...super.getArgs(), this.statModifier, this.stats]; + return new PokemonBaseStatFlatModifier(this.type, this.pokemonId, this.stackCount); } /** @@ -1055,11 +1037,13 @@ export class PokemonBaseStatFlatModifier extends PokemonHeldItemModifier { * @param baseStats The base stats of the {@linkcode Pokemon} * @returns always `true` */ - override apply(_pokemon: Pokemon, baseStats: number[]): boolean { + override apply(pokemon: Pokemon, baseStats: number[]): boolean { // Modifies the passed in baseStats[] array by a flat value, only if the stat is specified in this.stats + const stats = this.getStats(pokemon); + const statModifier = 20; baseStats.forEach((v, i) => { - if (this.stats.includes(i)) { - const newVal = Math.floor(v + this.statModifier); + if (stats.includes(i)) { + const newVal = Math.floor(v + statModifier); baseStats[i] = Math.min(Math.max(newVal, 1), 999999); } }); @@ -1067,6 +1051,22 @@ export class PokemonBaseStatFlatModifier extends PokemonHeldItemModifier { return true; } + /** + * Get the lowest of HP/Spd, lowest of Atk/SpAtk, and lowest of Def/SpDef + * @returns Array of 3 {@linkcode Stat}s to boost + */ + getStats(pokemon: Pokemon): Stat[] { + const stats: Stat[] = []; + const baseStats = pokemon.getSpeciesForm().baseStats.slice(0); + // HP or Speed + stats.push(baseStats[Stat.HP] < baseStats[Stat.SPD] ? Stat.HP : Stat.SPD); + // Attack or SpAtk + stats.push(baseStats[Stat.ATK] < baseStats[Stat.SPATK] ? Stat.ATK : Stat.SPATK); + // Def or SpDef + stats.push(baseStats[Stat.DEF] < baseStats[Stat.SPDEF] ? Stat.DEF : Stat.SPDEF); + return stats; + } + override getScoreMultiplier(): number { return 1.1; } From 8f0c864547b7acb28fc5188865a75733c6a17ffb Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Thu, 3 Jul 2025 22:08:53 -0600 Subject: [PATCH 7/7] [Dev] Remove warnings from `pnpm` interactions (#6061) * Add pnpm-workspace.yaml to configure dependencies that are allowed to build * Remove dependency-graph.json * Go back to && which is cross-platform * Remove obsolete `depcruise:graph` command * Set `shellEmulator` config key to `true` This makes `package.json` scripts work more reliably cross-platform --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- dependency-graph.js | 13 ------------- package.json | 4 +--- pnpm-lock.yaml | 11 ----------- pnpm-workspace.yaml | 6 ++++++ 4 files changed, 7 insertions(+), 27 deletions(-) delete mode 100644 dependency-graph.js create mode 100644 pnpm-workspace.yaml diff --git a/dependency-graph.js b/dependency-graph.js deleted file mode 100644 index dff960d8781..00000000000 --- a/dependency-graph.js +++ /dev/null @@ -1,13 +0,0 @@ -import { Graphviz } from "@hpcc-js/wasm/graphviz"; - -const graphviz = await Graphviz.load(); - -const inputFile = []; -for await (const chunk of process.stdin) { - inputFile.push(chunk); -} - -const file = Buffer.concat(inputFile).toString("utf-8"); - -const svg = graphviz.dot(file, "svg"); -process.stdout.write(svg); diff --git a/package.json b/package.json index 43736c10db6..d1adeaa3419 100644 --- a/package.json +++ b/package.json @@ -21,15 +21,13 @@ "biome-ci": "biome ci --diagnostic-level=error --reporter=github --no-errors-on-unmatched", "docs": "typedoc", "depcruise": "depcruise src test", - "depcruise:graph": "depcruise src --output-type dot | node dependency-graph.js > dependency-graph.svg", - "postinstall": "lefthook install && lefthook run post-merge", + "postinstall": "lefthook install; git submodule update --init --recursive", "update-version:patch": "pnpm version patch --force --no-git-tag-version", "update-version:minor": "pnpm version minor --force --no-git-tag-version", "update-locales:remote": "git submodule update --progress --init --recursive --force --remote" }, "devDependencies": { "@biomejs/biome": "2.0.0", - "@hpcc-js/wasm": "^2.22.4", "@types/jsdom": "^21.1.7", "@types/node": "^22.13.14", "@vitest/coverage-istanbul": "^3.0.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7d218bc00eb..dc90a04ed93 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,9 +45,6 @@ importers: '@biomejs/biome': specifier: 2.0.0 version: 2.0.0 - '@hpcc-js/wasm': - specifier: ^2.22.4 - version: 2.22.4 '@types/jsdom': specifier: ^21.1.7 version: 21.1.7 @@ -436,10 +433,6 @@ packages: '@gerrit0/mini-shiki@3.2.2': resolution: {integrity: sha512-vaZNGhGLKMY14HbF53xxHNgFO9Wz+t5lTlGNpl2N9xFiKQ0I5oIe0vKjU9dh7Nb3Dw6lZ7wqUE0ri+zcdpnK+Q==} - '@hpcc-js/wasm@2.22.4': - resolution: {integrity: sha512-58JkRkxZffiBAbZhc7z+9iaaAOmn1cyxLL3rRwsUvco/I0Wwb7uVAlHM9HiU6XASe2k11jrIjCFff1t9QKjlqg==} - hasBin: true - '@inquirer/checkbox@4.1.4': resolution: {integrity: sha512-d30576EZdApjAMceijXA5jDzRQHT/MygbC+J8I7EqA6f/FRpYxlRtRJbHF8gHeWYeSdOuTEJqonn7QLB1ELezA==} engines: {node: '>=18'} @@ -2332,10 +2325,6 @@ snapshots: '@shikijs/types': 3.2.1 '@shikijs/vscode-textmate': 10.0.2 - '@hpcc-js/wasm@2.22.4': - dependencies: - yargs: 17.7.2 - '@inquirer/checkbox@4.1.4(@types/node@22.13.14)': dependencies: '@inquirer/core': 10.1.9(@types/node@22.13.14) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 00000000000..ec73d96e0db --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,6 @@ +onlyBuiltDependencies: + - esbuild + - msw + - lefthook + +shellEmulator: true