From 7859fea26b77cc9e93ffbc879da3439928c4367c Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Sun, 1 Jun 2025 21:37:47 +0200 Subject: [PATCH 01/10] [i18n] Translatable Game Speed values (#5916) --- public/locales | 2 +- src/system/settings/settings.ts | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/public/locales b/public/locales index 88c60b6f8d5..4dab23d6a78 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 88c60b6f8d5babfb0c157b31ceff22486712295c +Subproject commit 4dab23d6a78b6cf32db43c9953e3c2000f448007 diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 8a0e4f8cdc0..69abc669870 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -193,35 +193,35 @@ export const Setting: Array = [ options: [ { value: "1", - label: "1x", + label: i18next.t("settings:gameSpeed1x"), }, { value: "1.25", - label: "1.25x", + label: i18next.t("settings:gameSpeed1_25x"), }, { value: "1.5", - label: "1.5x", + label: i18next.t("settings:gameSpeed1_5x"), }, { value: "2", - label: "2x", + label: i18next.t("settings:gameSpeed2x"), }, { value: "2.5", - label: "2.5x", + label: i18next.t("settings:gameSpeed2_5x"), }, { value: "3", - label: "3x", + label: i18next.t("settings:gameSpeed3x"), }, { value: "4", - label: "4x", + label: i18next.t("settings:gameSpeed4x"), }, { value: "5", - label: "5x", + label: i18next.t("settings:gameSpeed5x"), }, ], default: 3, From 369b3307cdc46317a65a4ad1707399090a29ed2c Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Mon, 2 Jun 2025 00:40:57 +0200 Subject: [PATCH 02/10] [UI/UX] Moves menu position adjustments (#5917) --- src/ui/fight-ui-handler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 6dbbcd47300..208e627023b 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -292,7 +292,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { this.accuracyText.setVisible(hasMove); this.moveCategoryIcon.setVisible(hasMove); - this.cursorObj.setPosition(13 + (cursor % 2 === 1 ? 100 : 0), -31 + (cursor >= 2 ? 15 : 0)); + this.cursorObj.setPosition(13 + (cursor % 2 === 1 ? 114 : 0), -31 + (cursor >= 2 ? 15 : 0)); return changed; } @@ -322,7 +322,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { const moveset = pokemon.getMoveset(); for (let moveIndex = 0; moveIndex < 4; moveIndex++) { - const moveText = addTextObject(moveIndex % 2 === 0 ? 0 : 100, moveIndex < 2 ? 0 : 16, "-", TextStyle.WINDOW); + const moveText = addTextObject(moveIndex % 2 === 0 ? 0 : 114, moveIndex < 2 ? 0 : 16, "-", TextStyle.WINDOW); moveText.setName("text-empty-move"); if (moveIndex < moveset.length) { From cdda539ac5609c1f0fa5da0114ee51d5bff82bf5 Mon Sep 17 00:00:00 2001 From: Bertie690 <136088738+Bertie690@users.noreply.github.com> Date: Sun, 1 Jun 2025 18:45:30 -0400 Subject: [PATCH 03/10] [Test] Remove redundant entries and `Array.fill()` in moveset overrides (#5907) * Removed unneeded duplicate entries from movesets * Removed `array.fill` in moveset overrides * Reverted accidental changes --- test/abilities/aura_break.test.ts | 11 ++++++----- test/abilities/contrary.test.ts | 5 +---- test/abilities/ice_face.test.ts | 11 ++++------- test/abilities/libero.test.ts | 14 +++++++------- test/abilities/mycelium_might.test.ts | 18 ++++++++++-------- test/abilities/power_construct.test.ts | 9 +++++---- test/abilities/protean.test.ts | 14 +++++++------- test/abilities/sand_veil.test.ts | 16 +++++++++------- test/abilities/schooling.test.ts | 5 +---- test/abilities/screen_cleaner.test.ts | 7 +++---- test/abilities/stall.test.ts | 13 +++++++------ test/abilities/sweet_veil.test.ts | 13 +++++++------ test/abilities/synchronize.test.ts | 5 +---- test/abilities/unseen_fist.test.ts | 16 ++++++++-------- test/battle/inverse_battle.test.ts | 4 +--- test/battle/special_battle.test.ts | 13 +++++++------ test/items/leek.test.ts | 2 +- test/items/leftovers.test.ts | 17 +++++++++-------- test/moves/astonish.test.ts | 15 ++++++++------- test/moves/aurora_veil.test.ts | 17 +++++++++-------- test/moves/chilly_reception.test.ts | 9 +++------ test/moves/double_team.test.ts | 15 ++++++++------- test/moves/dynamax_cannon.test.ts | 10 ++++++++-- test/moves/flower_shield.test.ts | 4 +--- test/moves/freezy_frost.test.ts | 4 ++-- test/moves/fusion_bolt.test.ts | 19 +++++++++---------- test/moves/fusion_flare.test.ts | 17 ++++++++--------- test/moves/fusion_flare_bolt.test.ts | 23 +++++++++++------------ test/moves/light_screen.test.ts | 15 ++++++++------- test/moves/magnet_rise.test.ts | 15 ++++++++------- test/moves/powder.test.ts | 6 +++--- test/moves/reflect.test.ts | 15 ++++++++------- test/moves/retaliate.test.ts | 2 +- test/moves/swallow.test.ts | 17 ++++++++--------- test/moves/tackle.test.ts | 15 ++++++++------- test/moves/throat_chop.test.ts | 4 ++-- test/moves/tidy_up.test.ts | 15 +++++---------- 37 files changed, 212 insertions(+), 218 deletions(-) diff --git a/test/abilities/aura_break.test.ts b/test/abilities/aura_break.test.ts index f88d7d875bf..5b2211d7b3c 100644 --- a/test/abilities/aura_break.test.ts +++ b/test/abilities/aura_break.test.ts @@ -24,11 +24,12 @@ describe("Abilities - Aura Break", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.moveset([Moves.MOONBLAST, Moves.DARK_PULSE, Moves.MOONBLAST, Moves.DARK_PULSE]); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemyAbility(Abilities.AURA_BREAK); - game.override.enemySpecies(Species.SHUCKLE); + game.override + .battleStyle("single") + .moveset([Moves.MOONBLAST, Moves.DARK_PULSE]) + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.AURA_BREAK) + .enemySpecies(Species.SHUCKLE); }); it("reverses the effect of Fairy Aura", async () => { diff --git a/test/abilities/contrary.test.ts b/test/abilities/contrary.test.ts index 929d620c232..99c5208f561 100644 --- a/test/abilities/contrary.test.ts +++ b/test/abilities/contrary.test.ts @@ -54,10 +54,7 @@ describe("Abilities - Contrary", () => { }); it("should block negative effects", async () => { - game.override - .enemyPassiveAbility(Abilities.CLEAR_BODY) - .enemyMoveset([Moves.HOWL, Moves.HOWL, Moves.HOWL, Moves.HOWL]) - .moveset([Moves.SPLASH]); + game.override.enemyPassiveAbility(Abilities.CLEAR_BODY).enemyMoveset(Moves.HOWL).moveset([Moves.SPLASH]); await game.classicMode.startBattle([Species.SLOWBRO]); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/test/abilities/ice_face.test.ts b/test/abilities/ice_face.test.ts index 38269c29af1..cb9530fe355 100644 --- a/test/abilities/ice_face.test.ts +++ b/test/abilities/ice_face.test.ts @@ -106,8 +106,7 @@ describe("Abilities - Ice Face", () => { }); it("transforms to Ice Face when Hail or Snow starts", async () => { - game.override.moveset([Moves.QUICK_ATTACK]); - game.override.enemyMoveset([Moves.HAIL, Moves.HAIL, Moves.HAIL, Moves.HAIL]); + game.override.moveset([Moves.QUICK_ATTACK]).enemyMoveset(Moves.HAIL); await game.classicMode.startBattle([Species.MAGIKARP]); @@ -128,8 +127,7 @@ describe("Abilities - Ice Face", () => { }); it("transforms to Ice Face when summoned on arena with active Snow or Hail", async () => { - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - game.override.moveset([Moves.SNOWSCAPE]); + game.override.enemyMoveset(Moves.TACKLE).moveset([Moves.SNOWSCAPE]); await game.classicMode.startBattle([Species.EISCUE, Species.NINJASK]); @@ -155,8 +153,7 @@ describe("Abilities - Ice Face", () => { }); it("will not revert to its Ice Face if there is already Hail when it changes into Noice", async () => { - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemySpecies(Species.SHUCKLE).enemyMoveset(Moves.TACKLE); await game.classicMode.startBattle([Species.EISCUE]); @@ -175,7 +172,7 @@ describe("Abilities - Ice Face", () => { }); it("persists form change when switched out", async () => { - game.override.enemyMoveset([Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK]); + game.override.enemyMoveset(Moves.QUICK_ATTACK); await game.classicMode.startBattle([Species.EISCUE, Species.MAGIKARP]); diff --git a/test/abilities/libero.test.ts b/test/abilities/libero.test.ts index ea4e288bdb0..a099e6ff047 100644 --- a/test/abilities/libero.test.ts +++ b/test/abilities/libero.test.ts @@ -29,11 +29,12 @@ describe("Abilities - Libero", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.ability(Abilities.LIBERO); - game.override.startingLevel(100); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset([Moves.ENDURE, Moves.ENDURE, Moves.ENDURE, Moves.ENDURE]); + game.override + .battleStyle("single") + .ability(Abilities.LIBERO) + .startingLevel(100) + .enemySpecies(Species.RATTATA) + .enemyMoveset(Moves.ENDURE); }); test("ability applies and changes a pokemon's type", async () => { @@ -173,8 +174,7 @@ describe("Abilities - Libero", () => { }); test("ability applies correctly even if the pokemon's move is protected against", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]); + game.override.moveset([Moves.TACKLE]).enemyMoveset(Moves.PROTECT); await game.classicMode.startBattle([Species.MAGIKARP]); diff --git a/test/abilities/mycelium_might.test.ts b/test/abilities/mycelium_might.test.ts index 18465f9b64e..9c898063201 100644 --- a/test/abilities/mycelium_might.test.ts +++ b/test/abilities/mycelium_might.test.ts @@ -24,13 +24,15 @@ describe("Abilities - Mycelium Might", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.disableCrits(); - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyAbility(Abilities.CLEAR_BODY); - game.override.enemyMoveset([Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK]); - game.override.ability(Abilities.MYCELIUM_MIGHT); - game.override.moveset([Moves.QUICK_ATTACK, Moves.BABY_DOLL_EYES]); + game.override + .battleStyle("single") + .disableCrits() + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.CLEAR_BODY) + + .enemyMoveset(Moves.QUICK_ATTACK) + .ability(Abilities.MYCELIUM_MIGHT) + .moveset([Moves.QUICK_ATTACK, Moves.BABY_DOLL_EYES]); }); /** @@ -64,7 +66,7 @@ describe("Abilities - Mycelium Might", () => { }, 20000); it("will still go first if a status move that is in a higher priority bracket than the opponent's move is used", async () => { - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset(Moves.TACKLE); await game.classicMode.startBattle([Species.REGIELEKI]); const enemyPokemon = game.scene.getEnemyPokemon(); diff --git a/test/abilities/power_construct.test.ts b/test/abilities/power_construct.test.ts index 0ff90a2c0df..67005f5c87e 100644 --- a/test/abilities/power_construct.test.ts +++ b/test/abilities/power_construct.test.ts @@ -25,10 +25,11 @@ describe("Abilities - POWER CONSTRUCT", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = Moves.SPLASH; - game.override.battleStyle("single"); - game.override.ability(Abilities.POWER_CONSTRUCT); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override + .battleStyle("single") + .ability(Abilities.POWER_CONSTRUCT) + .moveset([moveToUse]) + .enemyMoveset(Moves.TACKLE); }); test("check if fainted 50% Power Construct Pokemon switches to base form on arena reset", async () => { diff --git a/test/abilities/protean.test.ts b/test/abilities/protean.test.ts index bfe6dd32282..e868be8e231 100644 --- a/test/abilities/protean.test.ts +++ b/test/abilities/protean.test.ts @@ -29,11 +29,12 @@ describe("Abilities - Protean", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.ability(Abilities.PROTEAN); - game.override.startingLevel(100); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset([Moves.ENDURE, Moves.ENDURE, Moves.ENDURE, Moves.ENDURE]); + game.override + .battleStyle("single") + .ability(Abilities.PROTEAN) + .startingLevel(100) + .enemySpecies(Species.RATTATA) + .enemyMoveset(Moves.ENDURE); }); test("ability applies and changes a pokemon's type", async () => { @@ -173,8 +174,7 @@ describe("Abilities - Protean", () => { }); test("ability applies correctly even if the pokemon's move is protected against", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]); + game.override.moveset([Moves.TACKLE]).enemyMoveset(Moves.PROTECT); await game.classicMode.startBattle([Species.MAGIKARP]); diff --git a/test/abilities/sand_veil.test.ts b/test/abilities/sand_veil.test.ts index 116850e1e5a..a74538fef16 100644 --- a/test/abilities/sand_veil.test.ts +++ b/test/abilities/sand_veil.test.ts @@ -28,13 +28,15 @@ describe("Abilities - Sand Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([Moves.SPLASH]); - game.override.enemySpecies(Species.MEOWSCARADA); - game.override.enemyAbility(Abilities.INSOMNIA); - game.override.enemyMoveset([Moves.TWISTER, Moves.TWISTER, Moves.TWISTER, Moves.TWISTER]); - game.override.startingLevel(100); - game.override.enemyLevel(100); - game.override.weather(WeatherType.SANDSTORM).battleStyle("double"); + game.override + .moveset([Moves.SPLASH]) + .enemySpecies(Species.MEOWSCARADA) + .enemyAbility(Abilities.INSOMNIA) + .enemyMoveset(Moves.TWISTER) + .startingLevel(100) + .enemyLevel(100) + .weather(WeatherType.SANDSTORM) + .battleStyle("double"); }); test("ability should increase the evasiveness of the source", async () => { diff --git a/test/abilities/schooling.test.ts b/test/abilities/schooling.test.ts index ac4e3c837c5..a94b76e38ff 100644 --- a/test/abilities/schooling.test.ts +++ b/test/abilities/schooling.test.ts @@ -25,10 +25,7 @@ describe("Abilities - SCHOOLING", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = Moves.SPLASH; - game.override.battleStyle("single"); - game.override.ability(Abilities.SCHOOLING); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.battleStyle("single").ability(Abilities.SCHOOLING).moveset([moveToUse]).enemyMoveset(Moves.TACKLE); }); test("check if fainted pokemon switches to base form on arena reset", async () => { diff --git a/test/abilities/screen_cleaner.test.ts b/test/abilities/screen_cleaner.test.ts index ea99ba00f87..f96f7bf99e2 100644 --- a/test/abilities/screen_cleaner.test.ts +++ b/test/abilities/screen_cleaner.test.ts @@ -30,8 +30,7 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Aurora Veil", async () => { - game.override.moveset([Moves.HAIL]); - game.override.enemyMoveset([Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL]); + game.override.moveset([Moves.HAIL]).enemyMoveset(Moves.AURORA_VEIL); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); @@ -48,7 +47,7 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Light Screen", async () => { - game.override.enemyMoveset([Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN]); + game.override.enemyMoveset(Moves.LIGHT_SCREEN); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); @@ -65,7 +64,7 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Reflect", async () => { - game.override.enemyMoveset([Moves.REFLECT, Moves.REFLECT, Moves.REFLECT, Moves.REFLECT]); + game.override.enemyMoveset(Moves.REFLECT); await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); diff --git a/test/abilities/stall.test.ts b/test/abilities/stall.test.ts index 5c17f71c48d..6e6fe04a183 100644 --- a/test/abilities/stall.test.ts +++ b/test/abilities/stall.test.ts @@ -22,12 +22,13 @@ describe("Abilities - Stall", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.disableCrits(); - game.override.enemySpecies(Species.REGIELEKI); - game.override.enemyAbility(Abilities.STALL); - game.override.enemyMoveset([Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK]); - game.override.moveset([Moves.QUICK_ATTACK, Moves.TACKLE]); + game.override + .battleStyle("single") + .disableCrits() + .enemySpecies(Species.REGIELEKI) + .enemyAbility(Abilities.STALL) + .enemyMoveset(Moves.QUICK_ATTACK) + .moveset([Moves.QUICK_ATTACK, Moves.TACKLE]); }); /** diff --git a/test/abilities/sweet_veil.test.ts b/test/abilities/sweet_veil.test.ts index 80d7165619f..e294938acd4 100644 --- a/test/abilities/sweet_veil.test.ts +++ b/test/abilities/sweet_veil.test.ts @@ -25,11 +25,12 @@ describe("Abilities - Sweet Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("double"); - game.override.moveset([Moves.SPLASH, Moves.REST, Moves.YAWN]); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset([Moves.POWDER, Moves.POWDER, Moves.POWDER, Moves.POWDER]); + game.override + .battleStyle("double") + .moveset([Moves.SPLASH, Moves.REST, Moves.YAWN]) + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.POWDER); }); it("prevents the user and its allies from falling asleep", async () => { @@ -56,7 +57,7 @@ describe("Abilities - Sweet Veil", () => { }); it("causes Yawn to fail if used on the user or its allies", async () => { - game.override.enemyMoveset([Moves.YAWN, Moves.YAWN, Moves.YAWN, Moves.YAWN]); + game.override.enemyMoveset(Moves.YAWN); await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]); game.move.select(Moves.SPLASH); diff --git a/test/abilities/synchronize.test.ts b/test/abilities/synchronize.test.ts index 783201d7a5b..e781d55fe10 100644 --- a/test/abilities/synchronize.test.ts +++ b/test/abilities/synchronize.test.ts @@ -66,10 +66,7 @@ describe("Abilities - Synchronize", () => { }); it("does not trigger when Pokemon is statused by Toxic Spikes", async () => { - game.override - .ability(Abilities.SYNCHRONIZE) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Array(4).fill(Moves.TOXIC_SPIKES)); + game.override.ability(Abilities.SYNCHRONIZE).enemyAbility(Abilities.BALL_FETCH).enemyMoveset(Moves.TOXIC_SPIKES); await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); diff --git a/test/abilities/unseen_fist.test.ts b/test/abilities/unseen_fist.test.ts index 6c14e82fc39..d78ce8c5bbf 100644 --- a/test/abilities/unseen_fist.test.ts +++ b/test/abilities/unseen_fist.test.ts @@ -24,12 +24,13 @@ describe("Abilities - Unseen Fist", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.starterSpecies(Species.URSHIFU); - game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]); - game.override.startingLevel(100); - game.override.enemyLevel(100); + game.override + .battleStyle("single") + .starterSpecies(Species.URSHIFU) + .enemySpecies(Species.SNORLAX) + .enemyMoveset(Moves.PROTECT) + .startingLevel(100) + .enemyLevel(100); }); it("should cause a contact move to ignore Protect", async () => @@ -73,8 +74,7 @@ async function testUnseenFistHitResult( protectMove: Moves, shouldSucceed = true, ): Promise { - game.override.moveset([attackMove]); - game.override.enemyMoveset([protectMove, protectMove, protectMove, protectMove]); + game.override.moveset([attackMove]).enemyMoveset(protectMove); await game.classicMode.startBattle(); diff --git a/test/battle/inverse_battle.test.ts b/test/battle/inverse_battle.test.ts index 799442bb603..168df0b9505 100644 --- a/test/battle/inverse_battle.test.ts +++ b/test/battle/inverse_battle.test.ts @@ -188,9 +188,7 @@ describe("Inverse Battle", () => { }); it("Conversion 2 should change the type to the resistive type - Conversion 2 against Dragonite", async () => { - game.override - .moveset([Moves.CONVERSION_2]) - .enemyMoveset([Moves.DRAGON_CLAW, Moves.DRAGON_CLAW, Moves.DRAGON_CLAW, Moves.DRAGON_CLAW]); + game.override.moveset([Moves.CONVERSION_2]).enemyMoveset(Moves.DRAGON_CLAW); await game.challengeMode.startBattle(); diff --git a/test/battle/special_battle.test.ts b/test/battle/special_battle.test.ts index 6f4034cd8cd..8d75e530ca6 100644 --- a/test/battle/special_battle.test.ts +++ b/test/battle/special_battle.test.ts @@ -23,12 +23,13 @@ describe("Test Battle Phase", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.enemySpecies(Species.RATTATA); - game.override.startingLevel(2000); - game.override.moveset([Moves.TACKLE]); - game.override.enemyAbility(Abilities.HYDRATION); - game.override.ability(Abilities.HYDRATION); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override + .enemySpecies(Species.RATTATA) + .startingLevel(2000) + .moveset([Moves.TACKLE]) + .enemyAbility(Abilities.HYDRATION) + .ability(Abilities.HYDRATION) + .enemyMoveset(Moves.TACKLE); }); it("startBattle 2vs1 boss", async () => { diff --git a/test/items/leek.test.ts b/test/items/leek.test.ts index 7a6975f6dae..be2aa73299c 100644 --- a/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -25,7 +25,7 @@ describe("Items - Leek", () => { game.override .enemySpecies(Species.MAGIKARP) - .enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]) + .enemyMoveset(Moves.SPLASH) .startingHeldItems([{ name: "LEEK" }]) .moveset([Moves.TACKLE]) .battleStyle("single"); diff --git a/test/items/leftovers.test.ts b/test/items/leftovers.test.ts index f4825c2b721..a31b711eb63 100644 --- a/test/items/leftovers.test.ts +++ b/test/items/leftovers.test.ts @@ -23,14 +23,15 @@ describe("Items - Leftovers", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.startingLevel(2000); - game.override.ability(Abilities.UNNERVE); - game.override.moveset([Moves.SPLASH]); - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyAbility(Abilities.UNNERVE); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - game.override.startingHeldItems([{ name: "LEFTOVERS", count: 1 }]); + game.override + .battleStyle("single") + .startingLevel(2000) + .ability(Abilities.UNNERVE) + .moveset([Moves.SPLASH]) + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.UNNERVE) + .enemyMoveset(Moves.TACKLE) + .startingHeldItems([{ name: "LEFTOVERS", count: 1 }]); }); it("leftovers works", async () => { diff --git a/test/moves/astonish.test.ts b/test/moves/astonish.test.ts index daa9b0bb878..c07b0d7d2c5 100644 --- a/test/moves/astonish.test.ts +++ b/test/moves/astonish.test.ts @@ -27,13 +27,14 @@ describe("Moves - Astonish", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.moveset([Moves.ASTONISH, Moves.SPLASH]); - game.override.enemySpecies(Species.BLASTOISE); - game.override.enemyAbility(Abilities.INSOMNIA); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - game.override.startingLevel(100); - game.override.enemyLevel(100); + game.override + .battleStyle("single") + .moveset([Moves.ASTONISH, Moves.SPLASH]) + .enemySpecies(Species.BLASTOISE) + .enemyAbility(Abilities.INSOMNIA) + .enemyMoveset(Moves.TACKLE) + .startingLevel(100) + .enemyLevel(100); vi.spyOn(allMoves[Moves.ASTONISH], "chance", "get").mockReturnValue(100); }); diff --git a/test/moves/aurora_veil.test.ts b/test/moves/aurora_veil.test.ts index 96e74ec5a9e..76569ac4a0e 100644 --- a/test/moves/aurora_veil.test.ts +++ b/test/moves/aurora_veil.test.ts @@ -36,14 +36,15 @@ describe("Moves - Aurora Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); globalScene = game.scene; - game.override.battleStyle("single"); - game.override.ability(Abilities.NONE); - game.override.moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]); - game.override.enemyLevel(100); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL]); - game.override.disableCrits(); - game.override.weather(WeatherType.HAIL); + game.override + .battleStyle("single") + .ability(Abilities.BALL_FETCH) + .moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]) + .enemyLevel(100) + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.AURORA_VEIL) + .disableCrits() + .weather(WeatherType.HAIL); }); it("reduces damage of physical attacks by half in a single battle", async () => { diff --git a/test/moves/chilly_reception.test.ts b/test/moves/chilly_reception.test.ts index 1c6c5ce127e..2c04e0e7313 100644 --- a/test/moves/chilly_reception.test.ts +++ b/test/moves/chilly_reception.test.ts @@ -26,7 +26,7 @@ describe("Moves - Chilly Reception", () => { game.override .battleStyle("single") .moveset([Moves.CHILLY_RECEPTION, Moves.SNOWSCAPE]) - .enemyMoveset(Array(4).fill(Moves.SPLASH)) + .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.BALL_FETCH) .ability(Abilities.BALL_FETCH); }); @@ -69,10 +69,7 @@ describe("Moves - Chilly Reception", () => { // enemy uses another move and weather doesn't change it("check case - enemy not selecting chilly reception doesn't change weather ", async () => { - game.override - .battleStyle("single") - .enemyMoveset([Moves.CHILLY_RECEPTION, Moves.TACKLE]) - .moveset(Array(4).fill(Moves.SPLASH)); + game.override.battleStyle("single").enemyMoveset([Moves.CHILLY_RECEPTION, Moves.TACKLE]).moveset(Moves.SPLASH); await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); @@ -87,7 +84,7 @@ describe("Moves - Chilly Reception", () => { game.override .battleStyle("single") .startingWave(8) - .enemyMoveset(Array(4).fill(Moves.CHILLY_RECEPTION)) + .enemyMoveset(Moves.CHILLY_RECEPTION) .enemySpecies(Species.MAGIKARP) .moveset([Moves.SPLASH, Moves.THUNDERBOLT]); diff --git a/test/moves/double_team.test.ts b/test/moves/double_team.test.ts index b97fb1a338e..aa07ee5f688 100644 --- a/test/moves/double_team.test.ts +++ b/test/moves/double_team.test.ts @@ -23,13 +23,14 @@ describe("Moves - Double Team", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.moveset([Moves.DOUBLE_TEAM]); - game.override.disableCrits(); - game.override.ability(Abilities.BALL_FETCH); - game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override + .battleStyle("single") + .moveset([Moves.DOUBLE_TEAM]) + .disableCrits() + .ability(Abilities.BALL_FETCH) + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.TACKLE); }); it("raises the user's EVA stat stage by 1", async () => { diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index 62004e62778..19a15225653 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -29,8 +29,14 @@ describe("Moves - Dynamax Cannon", () => { dynamaxCannon = allMoves[Moves.DYNAMAX_CANNON]; game = new GameManager(phaserGame); - game.override.moveset([dynamaxCannon.id]); - game.override.startingLevel(200); + game.override + .moveset(Moves.DYNAMAX_CANNON) + .startingLevel(200) + .levelCap(10) + .battleStyle("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.SPLASH); // Note that, for Waves 1-10, the level cap is 10 game.override.startingWave(1); diff --git a/test/moves/flower_shield.test.ts b/test/moves/flower_shield.test.ts index d95ef6299b7..30a367f873d 100644 --- a/test/moves/flower_shield.test.ts +++ b/test/moves/flower_shield.test.ts @@ -74,9 +74,7 @@ describe("Moves - Flower Shield", () => { * See semi-vulnerable state tags. {@linkcode SemiInvulnerableTag} */ it("does not raise DEF stat stage for a Pokemon in semi-vulnerable state", async () => { - game.override.enemySpecies(Species.PARAS); - game.override.enemyMoveset([Moves.DIG, Moves.DIG, Moves.DIG, Moves.DIG]); - game.override.enemyLevel(50); + game.override.enemySpecies(Species.PARAS).enemyMoveset(Moves.DIG).enemyLevel(50); await game.classicMode.startBattle([Species.CHERRIM]); const paras = game.scene.getEnemyPokemon()!; diff --git a/test/moves/freezy_frost.test.ts b/test/moves/freezy_frost.test.ts index 7cee9bfb372..2b2e06bfe74 100644 --- a/test/moves/freezy_frost.test.ts +++ b/test/moves/freezy_frost.test.ts @@ -27,7 +27,7 @@ describe("Moves - Freezy Frost", () => { .battleStyle("single") .enemySpecies(Species.RATTATA) .enemyLevel(100) - .enemyMoveset([Moves.HOWL, Moves.HOWL, Moves.HOWL, Moves.HOWL]) + .enemyMoveset(Moves.HOWL) .enemyAbility(Abilities.BALL_FETCH) .startingLevel(100) .moveset([Moves.FREEZY_FROST, Moves.HOWL, Moves.SPLASH]) @@ -55,7 +55,7 @@ describe("Moves - Freezy Frost", () => { }); it("should clear all stat changes even when enemy uses the move", async () => { - game.override.enemyMoveset([Moves.FREEZY_FROST, Moves.FREEZY_FROST, Moves.FREEZY_FROST, Moves.FREEZY_FROST]); + game.override.enemyMoveset(Moves.FREEZY_FROST); await game.classicMode.startBattle([Species.SHUCKLE]); // Shuckle for slower Howl on first turn so Freezy Frost doesn't affect it. const user = game.scene.getPlayerPokemon()!; diff --git a/test/moves/fusion_bolt.test.ts b/test/moves/fusion_bolt.test.ts index 5e515a3bc47..3fc8dae1b85 100644 --- a/test/moves/fusion_bolt.test.ts +++ b/test/moves/fusion_bolt.test.ts @@ -23,16 +23,15 @@ describe("Moves - Fusion Bolt", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([fusionBolt]); - game.override.startingLevel(1); - - game.override.enemySpecies(Species.RESHIRAM); - game.override.enemyAbility(Abilities.ROUGH_SKIN); - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); - - game.override.battleStyle("single"); - game.override.startingWave(97); - game.override.disableCrits(); + game.override + .moveset([fusionBolt]) + .startingLevel(1) + .enemySpecies(Species.RESHIRAM) + .enemyAbility(Abilities.ROUGH_SKIN) + .enemyMoveset(Moves.SPLASH) + .battleStyle("single") + .startingWave(97) + .disableCrits(); }); it("should not make contact", async () => { diff --git a/test/moves/fusion_flare.test.ts b/test/moves/fusion_flare.test.ts index b947b9e7f7e..9f16b94da5c 100644 --- a/test/moves/fusion_flare.test.ts +++ b/test/moves/fusion_flare.test.ts @@ -24,15 +24,14 @@ describe("Moves - Fusion Flare", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([fusionFlare]); - game.override.startingLevel(1); - - game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset([Moves.REST, Moves.REST, Moves.REST, Moves.REST]); - - game.override.battleStyle("single"); - game.override.startingWave(97); - game.override.disableCrits(); + game.override + .moveset([fusionFlare]) + .startingLevel(1) + .enemySpecies(Species.RATTATA) + .enemyMoveset(Moves.REST) + .battleStyle("single") + .startingWave(97) + .disableCrits(); }); it("should thaw freeze status condition", async () => { diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index 1d248e09510..2b66a1a6d2f 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -33,15 +33,14 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { fusionFlare = allMoves[Moves.FUSION_FLARE]; fusionBolt = allMoves[Moves.FUSION_BOLT]; game = new GameManager(phaserGame); - game.override.moveset([fusionFlare.id, fusionBolt.id]); - game.override.startingLevel(1); - - game.override.enemySpecies(Species.RESHIRAM); - game.override.enemyMoveset([Moves.REST, Moves.REST, Moves.REST, Moves.REST]); - - game.override.battleStyle("double"); - game.override.startingWave(97); - game.override.disableCrits(); + game.override + .moveset([fusionFlare.id, fusionBolt.id]) + .startingLevel(1) + .enemySpecies(Species.RESHIRAM) + .enemyMoveset(Moves.REST) + .battleStyle("double") + .startingWave(97) + .disableCrits(); vi.spyOn(fusionFlare, "calculateBattlePower"); vi.spyOn(fusionBolt, "calculateBattlePower"); @@ -113,7 +112,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE should not double power of subsequent FUSION_BOLT if a move succeeded in between", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + game.override.enemyMoveset(Moves.SPLASH); await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); game.move.select(fusionFlare.id, 0, BattlerIndex.ENEMY); @@ -158,7 +157,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves", async () => { - game.override.enemyMoveset([fusionFlare.id, fusionFlare.id, fusionFlare.id, fusionFlare.id]); + game.override.enemyMoveset(fusionFlare.id); await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); const party = game.scene.getPlayerParty(); @@ -212,7 +211,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves if moves are aimed at allies", async () => { - game.override.enemyMoveset([fusionFlare.id, fusionFlare.id, fusionFlare.id, fusionFlare.id]); + game.override.enemyMoveset(fusionFlare.id); await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); const party = game.scene.getPlayerParty(); diff --git a/test/moves/light_screen.test.ts b/test/moves/light_screen.test.ts index 93d51ad7372..6ce51da68cd 100644 --- a/test/moves/light_screen.test.ts +++ b/test/moves/light_screen.test.ts @@ -35,13 +35,14 @@ describe("Moves - Light Screen", () => { beforeEach(() => { game = new GameManager(phaserGame); globalScene = game.scene; - game.override.battleStyle("single"); - game.override.ability(Abilities.NONE); - game.override.moveset([Moves.ABSORB, Moves.DAZZLING_GLEAM, Moves.TACKLE]); - game.override.enemyLevel(100); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN]); - game.override.disableCrits(); + game.override + .battleStyle("single") + .ability(Abilities.BALL_FETCH) + .moveset([Moves.ABSORB, Moves.DAZZLING_GLEAM, Moves.TACKLE]) + .enemyLevel(100) + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.LIGHT_SCREEN) + .disableCrits(); }); it("reduces damage of special attacks by half in a single battle", async () => { diff --git a/test/moves/magnet_rise.test.ts b/test/moves/magnet_rise.test.ts index 3f15a109f11..5d5ae91c4fe 100644 --- a/test/moves/magnet_rise.test.ts +++ b/test/moves/magnet_rise.test.ts @@ -23,13 +23,14 @@ describe("Moves - Magnet Rise", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - game.override.starterSpecies(Species.MAGNEZONE); - game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset([Moves.DRILL_RUN, Moves.DRILL_RUN, Moves.DRILL_RUN, Moves.DRILL_RUN]); - game.override.disableCrits(); - game.override.enemyLevel(1); - game.override.moveset([moveToUse, Moves.SPLASH, Moves.GRAVITY, Moves.BATON_PASS]); + game.override + .battleStyle("single") + .starterSpecies(Species.MAGNEZONE) + .enemySpecies(Species.RATTATA) + .enemyMoveset(Moves.DRILL_RUN) + .disableCrits() + .enemyLevel(1) + .moveset([moveToUse, Moves.SPLASH, Moves.GRAVITY, Moves.BATON_PASS]); }); it("MAGNET RISE", async () => { diff --git a/test/moves/powder.test.ts b/test/moves/powder.test.ts index b65525109ad..f076923d746 100644 --- a/test/moves/powder.test.ts +++ b/test/moves/powder.test.ts @@ -120,7 +120,7 @@ describe("Moves - Powder", () => { }); it("should not prevent the target from thawing out with Flame Wheel", async () => { - game.override.enemyMoveset(Array(4).fill(Moves.FLAME_WHEEL)).enemyStatusEffect(StatusEffect.FREEZE); + game.override.enemyMoveset(Moves.FLAME_WHEEL).enemyStatusEffect(StatusEffect.FREEZE); await game.classicMode.startBattle([Species.CHARIZARD]); @@ -198,7 +198,7 @@ describe("Moves - Powder", () => { }); it("should cancel Revelation Dance if it becomes a Fire-type move", async () => { - game.override.enemySpecies(Species.CHARIZARD).enemyMoveset(Array(4).fill(Moves.REVELATION_DANCE)); + game.override.enemySpecies(Species.CHARIZARD).enemyMoveset(Moves.REVELATION_DANCE); await game.classicMode.startBattle([Species.CHARIZARD]); @@ -212,7 +212,7 @@ describe("Moves - Powder", () => { }); it("should cancel Shell Trap and damage the target, even if the move would fail", async () => { - game.override.enemyMoveset(Array(4).fill(Moves.SHELL_TRAP)); + game.override.enemyMoveset(Moves.SHELL_TRAP); await game.classicMode.startBattle([Species.CHARIZARD]); diff --git a/test/moves/reflect.test.ts b/test/moves/reflect.test.ts index 268d9ebb71b..191a1a45a09 100644 --- a/test/moves/reflect.test.ts +++ b/test/moves/reflect.test.ts @@ -35,13 +35,14 @@ describe("Moves - Reflect", () => { beforeEach(() => { game = new GameManager(phaserGame); globalScene = game.scene; - game.override.battleStyle("single"); - game.override.ability(Abilities.NONE); - game.override.moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]); - game.override.enemyLevel(100); - game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.REFLECT, Moves.REFLECT, Moves.REFLECT, Moves.REFLECT]); - game.override.disableCrits(); + game.override + .battleStyle("single") + .ability(Abilities.NONE) + .moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]) + .enemyLevel(100) + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.REFLECT) + .disableCrits(); }); it("reduces damage of physical attacks by half in a single battle", async () => { diff --git a/test/moves/retaliate.test.ts b/test/moves/retaliate.test.ts index 40f31635d9b..24d0cd542cb 100644 --- a/test/moves/retaliate.test.ts +++ b/test/moves/retaliate.test.ts @@ -28,7 +28,7 @@ describe("Moves - Retaliate", () => { game.override .battleStyle("single") .enemySpecies(Species.SNORLAX) - .enemyMoveset([Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE]) + .enemyMoveset(Moves.RETALIATE) .enemyLevel(100) .moveset([Moves.RETALIATE, Moves.SPLASH]) .startingLevel(80) diff --git a/test/moves/swallow.test.ts b/test/moves/swallow.test.ts index cff9daaf97a..6a2fa8840ea 100644 --- a/test/moves/swallow.test.ts +++ b/test/moves/swallow.test.ts @@ -27,15 +27,14 @@ describe("Moves - Swallow", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleStyle("single"); - - game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset(Moves.SPLASH); - game.override.enemyAbility(Abilities.NONE); - game.override.enemyLevel(2000); - - game.override.moveset([Moves.SWALLOW, Moves.SWALLOW, Moves.SWALLOW, Moves.SWALLOW]); - game.override.ability(Abilities.NONE); + game.override + .battleStyle("single") + .enemySpecies(Species.RATTATA) + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.NONE) + .enemyLevel(2000) + .moveset(Moves.SWALLOW) + .ability(Abilities.NONE); }); describe("consumes all stockpile stacks to heal (scaling with stacks)", () => { diff --git a/test/moves/tackle.test.ts b/test/moves/tackle.test.ts index 5fd8ba589fc..ecd8750d17f 100644 --- a/test/moves/tackle.test.ts +++ b/test/moves/tackle.test.ts @@ -24,13 +24,14 @@ describe("Moves - Tackle", () => { beforeEach(() => { game = new GameManager(phaserGame); const moveToUse = Moves.TACKLE; - game.override.battleStyle("single"); - game.override.enemySpecies(Species.MAGIKARP); - game.override.startingLevel(1); - game.override.startingWave(97); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.GROWTH, Moves.GROWTH, Moves.GROWTH, Moves.GROWTH]); - game.override.disableCrits(); + game.override + .battleStyle("single") + .enemySpecies(Species.MAGIKARP) + .startingLevel(1) + .startingWave(97) + .moveset([moveToUse]) + .enemyMoveset(Moves.GROWTH) + .disableCrits(); }); it("TACKLE against ghost", async () => { diff --git a/test/moves/throat_chop.test.ts b/test/moves/throat_chop.test.ts index aaae9c0f5bb..8e504633707 100644 --- a/test/moves/throat_chop.test.ts +++ b/test/moves/throat_chop.test.ts @@ -23,11 +23,11 @@ describe("Moves - Throat Chop", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset(Array(4).fill(Moves.GROWL)) + .moveset(Moves.GROWL) .battleStyle("single") .ability(Abilities.BALL_FETCH) .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Array(4).fill(Moves.THROAT_CHOP)) + .enemyMoveset(Moves.THROAT_CHOP) .enemySpecies(Species.MAGIKARP); }); diff --git a/test/moves/tidy_up.test.ts b/test/moves/tidy_up.test.ts index ba7a1e07959..103b2d0a1c5 100644 --- a/test/moves/tidy_up.test.ts +++ b/test/moves/tidy_up.test.ts @@ -37,8 +37,7 @@ describe("Moves - Tidy Up", () => { }); it("spikes are cleared", async () => { - game.override.moveset([Moves.SPIKES, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.SPIKES, Moves.SPIKES, Moves.SPIKES, Moves.SPIKES]); + game.override.moveset([Moves.SPIKES, Moves.TIDY_UP]).enemyMoveset(Moves.SPIKES); await game.classicMode.startBattle(); game.move.select(Moves.SPIKES); @@ -49,8 +48,7 @@ describe("Moves - Tidy Up", () => { }, 20000); it("stealth rocks are cleared", async () => { - game.override.moveset([Moves.STEALTH_ROCK, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.STEALTH_ROCK, Moves.STEALTH_ROCK, Moves.STEALTH_ROCK, Moves.STEALTH_ROCK]); + game.override.moveset([Moves.STEALTH_ROCK, Moves.TIDY_UP]).enemyMoveset(Moves.STEALTH_ROCK); await game.classicMode.startBattle(); game.move.select(Moves.STEALTH_ROCK); @@ -61,8 +59,7 @@ describe("Moves - Tidy Up", () => { }, 20000); it("toxic spikes are cleared", async () => { - game.override.moveset([Moves.TOXIC_SPIKES, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES]); + game.override.moveset([Moves.TOXIC_SPIKES, Moves.TIDY_UP]).enemyMoveset(Moves.TOXIC_SPIKES); await game.classicMode.startBattle(); game.move.select(Moves.TOXIC_SPIKES); @@ -73,8 +70,7 @@ describe("Moves - Tidy Up", () => { }, 20000); it("sticky webs are cleared", async () => { - game.override.moveset([Moves.STICKY_WEB, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.STICKY_WEB, Moves.STICKY_WEB, Moves.STICKY_WEB, Moves.STICKY_WEB]); + game.override.moveset([Moves.STICKY_WEB, Moves.TIDY_UP]).enemyMoveset(Moves.STICKY_WEB); await game.classicMode.startBattle(); @@ -86,8 +82,7 @@ describe("Moves - Tidy Up", () => { }, 20000); it("substitutes are cleared", async () => { - game.override.moveset([Moves.SUBSTITUTE, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE]); + game.override.moveset([Moves.SUBSTITUTE, Moves.TIDY_UP]).enemyMoveset(Moves.SUBSTITUTE); await game.classicMode.startBattle(); From 88b8e05ee82c286bc5cdd55ed6d06cbb71a461a9 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sun, 1 Jun 2025 16:18:15 -0700 Subject: [PATCH 04/10] [Test] Add extra logging to flaky Last Respects test --- test/moves/last_respects.test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index 89c4896ae56..b9b958869fb 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -167,7 +167,10 @@ describe("Moves - Last Respects", () => { game.move.select(Moves.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEndPhase"); - expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower); + expect( + move.calculateBattlePower, + `Enemy: ${game.field.getEnemyPokemon()}\nPlayer: ${game.field.getPlayerPokemon()}`, + ).toHaveLastReturnedWith(basePower); }); it("should reset playerFaints count if we enter new trainer battle", async () => { From 9f892b906ca6020d3e9c21cfdbe3e6242732a994 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 2 Jun 2025 07:59:10 -0500 Subject: [PATCH 05/10] [Beta][Bug][UI/UX] Fix name position and types not being updated in battle info (#5913) Fix name position and types not being updated in battle info --- src/ui/battle-info/battle-info.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ui/battle-info/battle-info.ts b/src/ui/battle-info/battle-info.ts index 7e6cc12bd3d..e67000bb243 100644 --- a/src/ui/battle-info/battle-info.ts +++ b/src/ui/battle-info/battle-info.ts @@ -447,12 +447,14 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container { } /** Update the pokemon name inside the container */ - protected updateName(name: string): boolean { + protected updateName(pokemon: Pokemon): boolean { + const name = pokemon.getNameToRender(); if (this.lastName === name) { return false; } - this.nameText.setText(name).setPositionRelative(this.box, -this.nameText.displayWidth, 0); - this.lastName = name; + + this.updateNameText(pokemon); + this.genderText.setPositionRelative(this.nameText, this.nameText.displayWidth, 0); return true; } @@ -572,7 +574,7 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container { this.genderText.setText(getGenderSymbol(gender)).setColor(getGenderColor(gender)); - const nameUpdated = this.updateName(pokemon.getNameToRender()); + const nameUpdated = this.updateName(pokemon); const teraTypeUpdated = this.updateTeraType(pokemon.isTerastallized ? pokemon.getTeraType() : PokemonType.UNKNOWN); @@ -584,6 +586,8 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container { this.updateStatusIcon(pokemon); + this.setTypes(pokemon.getTypes(true, false, undefined, true)); + if (this.lastHp !== pokemon.hp || this.lastMaxHp !== pokemon.getMaxHp()) { return this.updatePokemonHp(pokemon, resolve, instant); } From ea64024e0992198400b6f30d7753cc77184ffec3 Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Mon, 2 Jun 2025 09:32:34 -0500 Subject: [PATCH 06/10] [P3 Bug] Remove Expert Breeder trainer type from ME egg source (#5893) Remove Expert Breeder trainer type from ME eggs It effectively duplicated the text in the egg source text box, and overflowed the visual text box as a result. --- .../encounters/the-expert-pokemon-breeder-encounter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 15063bc2763..74cda6fd205 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -581,7 +581,7 @@ function calculateEggRewardsForPokemon(pokemon: PlayerPokemon): [number, number] } function getEggOptions(commonEggs: number, rareEggs: number) { - const eggDescription = i18next.t(`${namespace}:title`) + ":\n" + i18next.t(trainerNameKey); + const eggDescription = i18next.t(`${namespace}:title`); const eggOptions: IEggOptions[] = []; if (commonEggs > 0) { From 7cd89cd4f7f7d70b4fc665ad954b9719a6278ceb Mon Sep 17 00:00:00 2001 From: damocleas Date: Mon, 2 Jun 2025 14:33:39 -0400 Subject: [PATCH 07/10] Update Discord Invite Link --- src/ui/menu-ui-handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 7f0cd4d6a78..cc684111617 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -33,7 +33,7 @@ enum MenuOptions { } let wikiUrl = "https://wiki.pokerogue.net/start"; -const discordUrl = "https://discord.gg/uWpTfdKG49"; +const discordUrl = "https://discord.gg/pokerogue"; const githubUrl = "https://github.com/pagefaultgames/pokerogue"; const redditUrl = "https://www.reddit.com/r/pokerogue"; const donateUrl = "https://github.com/sponsors/pagefaultgames"; From 1b038c5a11180adc2b868132e2c47be72c2fc272 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 2 Jun 2025 14:16:06 -0700 Subject: [PATCH 08/10] [Test] Fix flaky test logging --- test/moves/last_respects.test.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index b9b958869fb..4fe9864546e 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -167,10 +167,12 @@ describe("Moves - Last Respects", () => { game.move.select(Moves.LAST_RESPECTS); await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("MoveEndPhase"); - expect( - move.calculateBattlePower, - `Enemy: ${game.field.getEnemyPokemon()}\nPlayer: ${game.field.getPlayerPokemon()}`, - ).toHaveLastReturnedWith(basePower); + + const enemy = game.field.getEnemyPokemon(); + const player = game.field.getPlayerPokemon(); + const items = `Player items: ${player.getHeldItems()} | Enemy Items: ${enemy.getHeldItems()} |`; + + expect(move.calculateBattlePower, items).toHaveLastReturnedWith(1); }); it("should reset playerFaints count if we enter new trainer battle", async () => { From 6586790768e507c14995f564d6f1e9b7aef67417 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 2 Jun 2025 16:12:45 -0700 Subject: [PATCH 09/10] [Test] Fix Last Respects test --- test/moves/last_respects.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index 4fe9864546e..e271a5dec62 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -172,7 +172,7 @@ describe("Moves - Last Respects", () => { const player = game.field.getPlayerPokemon(); const items = `Player items: ${player.getHeldItems()} | Enemy Items: ${enemy.getHeldItems()} |`; - expect(move.calculateBattlePower, items).toHaveLastReturnedWith(1); + expect(move.calculateBattlePower, items).toHaveLastReturnedWith(50); }); it("should reset playerFaints count if we enter new trainer battle", async () => { From a26a93098059597e779e932e636061f75a680206 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 2 Jun 2025 17:00:23 -0700 Subject: [PATCH 10/10] Fix Version Number 1.9.4 -> 1.9.5 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 66400b14459..3e82c45af62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.9.4", + "version": "1.9.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.9.4", + "version": "1.9.5", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 7d1ba35154a..ce41dfc2a05 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.9.4", + "version": "1.9.5", "type": "module", "scripts": { "start": "vite",