From a03257d557b089bedbb800305457b648b6c176fc Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 25 Apr 2025 22:56:19 -0500 Subject: [PATCH] Made testing for the updated substitute logic --- test/moves/double_edge.test.ts | 77 ------------------------------ test/moves/recoil-moves.test.ts | 83 +++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 77 deletions(-) delete mode 100644 test/moves/double_edge.test.ts create mode 100644 test/moves/recoil-moves.test.ts diff --git a/test/moves/double_edge.test.ts b/test/moves/double_edge.test.ts deleted file mode 100644 index 87443ba50f3..00000000000 --- a/test/moves/double_edge.test.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { Stat } from "#enums/stat"; -import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; -import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import GameManager from "#test/testUtils/gameManager"; -import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - -describe("Moves - DOUBLE_EDGE", () => { - let phaserGame: Phaser.Game; - let game: GameManager; - - beforeAll(() => { - phaserGame = new Phaser.Game({ - type: Phaser.HEADLESS, - }); - }); - - afterEach(() => { - game.phaseInterceptor.restoreOg(); - }); - - beforeEach(() => { - game = new GameManager(phaserGame); - const moveToUse = Moves.DOUBLE_EDGE; - 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(); - }); - - it("DOUBLE_EDGE against ghost", async () => { - const moveToUse = Moves.DOUBLE_EDGE; - game.override.enemySpecies(Species.GENGAR); - await game.classicMode.startBattle([Species.MIGHTYENA]); - const hpOpponent = game.scene.currentBattle.enemyParty[0].hp; - game.move.select(moveToUse); - await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnEndPhase); - const hpLost = hpOpponent - game.scene.currentBattle.enemyParty[0].hp; - expect(hpLost).toBe(0); - }, 20000); - - it("DOUBLE_EDGE against not resistant", async () => { - const moveToUse = Moves.DOUBLE_EDGE; - await game.classicMode.startBattle([Species.MIGHTYENA]); - game.scene.currentBattle.enemyParty[0].stats[Stat.DEF] = 50; - game.scene.getPlayerParty()[0].stats[Stat.ATK] = 50; - - const hpOpponent = game.scene.currentBattle.enemyParty[0].hp; - - game.move.select(moveToUse); - await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnEndPhase); - const hpLost = hpOpponent - game.scene.currentBattle.enemyParty[0].hp; - expect(hpLost).toBeGreaterThan(0); - expect(hpLost).toBeLessThan(8); - }, 20000); - - it("DOUBLE_EDGE against SUBSTITUTE does recoil", async () => { - const moveToUse = Moves.DOUBLE_EDGE; - game.override.enemySpecies(Species.PIDOVE); - game.override.enemyMoveset([Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE]); - await game.classicMode.startBattle([Species.TOGEPI]); - game.scene.currentBattle.enemyParty[0].stats[Stat.DEF] = 50; - game.scene.getPlayerParty()[0].stats[Stat.ATK] = 50; - - const hpTotal = game.scene.getPlayerParty()[0].stats[Stat.HP]; - - game.move.select(moveToUse); - await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnEndPhase); - const hpLost = hpTotal - game.scene.getPlayerParty()[0].stats[Stat.HP]; - expect(hpLost).toBeGreaterThan(0); - }, 20000); -}); diff --git a/test/moves/recoil-moves.test.ts b/test/moves/recoil-moves.test.ts new file mode 100644 index 00000000000..fae6bd4d40c --- /dev/null +++ b/test/moves/recoil-moves.test.ts @@ -0,0 +1,83 @@ +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { Abilities } from "#enums/abilities"; + +describe("Moves - Recoil Moves", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override.battleStyle("single"); + game.override.enemySpecies(Species.PIDOVE); + game.override.startingLevel(1); + game.override.enemyLevel(100); + game.override.enemyMoveset([Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE]); + game.override.disableCrits(); + }); + + describe.each([ + { moveName: "Double Edge", moveId: Moves.DOUBLE_EDGE }, + { moveName: "Brave Bird", moveId: Moves.BRAVE_BIRD }, + { moveName: "Flare Blitz", moveId: Moves.FLARE_BLITZ }, + { moveName: "Head Charge", moveId: Moves.HEAD_CHARGE }, + { moveName: "Head Smash", moveId: Moves.HEAD_SMASH }, + { moveName: "Light of Ruin", moveId: Moves.LIGHT_OF_RUIN }, + { moveName: "Struggle", moveId: Moves.STRUGGLE }, + { moveName: "Submission", moveId: Moves.SUBMISSION }, + { moveName: "Take Down", moveId: Moves.TAKE_DOWN }, + { moveName: "Volt Tackle", moveId: Moves.VOLT_TACKLE }, + { moveName: "Wave Crash", moveId: Moves.WAVE_CRASH }, + { moveName: "Wild Charge", moveId: Moves.WILD_CHARGE }, + { moveName: "Wood Hammer", moveId: Moves.WOOD_HAMMER }, + ])("Moves - $moveName", ({ moveId }) => { + it("against SUBSTITUTE does recoil", async () => { + game.override.ability(Abilities.NO_GUARD); + await game.classicMode.startBattle([Species.TOGEPI]); + + game.override.moveset([moveId]); + game.move.select(moveId); + await game.toNextTurn(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); + }); + }); + + it("against SUBSTITUTE recoils properly in double battles", async () => { + game.override.battleStyle("double"); + game.override.enemySpecies(Species.PIDOVE); + game.override.startingLevel(1); + game.override.enemyLevel(100); + game.override.enemyMoveset([Moves.SUBSTITUTE]); + game.override.disableCrits(); + game.override.ability(Abilities.NO_GUARD); + await game.classicMode.startBattle([Species.TOGEPI, Species.TOGEPI]); + game.override.moveset([Moves.DOUBLE_EDGE]); + game.move.select(Moves.DOUBLE_EDGE, 0); + game.move.select(Moves.DOUBLE_EDGE, 1); + await game.forceEnemyMove(Moves.SUBSTITUTE, 0); + await game.forceEnemyMove(Moves.SUBSTITUTE, 1); + await game.phaseInterceptor.to("TurnEndPhase", false); + await await game.toNextTurn(); + + console.log(game.scene.getPlayerParty()[0].hp); + console.log(game.scene.getPlayerParty()[1].hp); + + const playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); + }); +});