From 756aeb28972dd6e05239b2d965a611af198c47e0 Mon Sep 17 00:00:00 2001 From: innerthunder Date: Wed, 6 Nov 2024 15:31:56 -0800 Subject: [PATCH 1/2] Add encore tests --- src/test/moves/encore.test.ts | 56 ++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/src/test/moves/encore.test.ts b/src/test/moves/encore.test.ts index 928848b4367..ac353468dcb 100644 --- a/src/test/moves/encore.test.ts +++ b/src/test/moves/encore.test.ts @@ -1,5 +1,6 @@ -import { BattlerTagType } from "#app/enums/battler-tag-type"; +import { BattlerTagType } from "#enums/battler-tag-type"; import { BattlerIndex } from "#app/battle"; +import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; @@ -32,6 +33,59 @@ describe("Moves - Encore", () => { .enemyMoveset(Moves.SPLASH); }); + it("should prevent the target from using any move except the last used move", async () => { + await game.classicMode.startBattle([ Species.SNORLAX ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.ENCORE); + await game.forceEnemyMove(Moves.SPLASH); + + await game.toNextTurn(); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)).toBeDefined(); + + game.move.select(Moves.SPLASH); + // The enemy AI would normally be inclined to use Tackle, but should be + // forced into using Splash. + await game.phaseInterceptor.to("BerryPhase", false); + + expect(enemyPokemon.getLastXMoves().every(turnMove => turnMove.move === Moves.SPLASH)).toBeTruthy(); + }); + + describe("should fail against the following moves:", () => { + it.each([ + { moveId: Moves.TRANSFORM, name: "Transform", delay: false }, + { moveId: Moves.MIMIC, name: "Mimic", delay: true }, + { moveId: Moves.SKETCH, name: "Sketch", delay: true }, + { moveId: Moves.ENCORE, name: "Encore", delay: false }, + { moveId: Moves.STRUGGLE, name: "Struggle", delay: false } + ])("$name", async ({ moveId, delay }) => { + game.override.enemyMoveset(moveId); + + await game.classicMode.startBattle([ Species.SNORLAX ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + if (delay) { + game.move.select(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.toNextTurn(); + } + + game.move.select(Moves.ENCORE); + + const turnOrder = delay + ? [ BattlerIndex.PLAYER, BattlerIndex.ENEMY ] + : [ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]; + await game.setTurnOrder(turnOrder); + + await game.phaseInterceptor.to("BerryPhase", false); + expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); + expect(enemyPokemon.getTag(BattlerTagType.ENCORE)).toBeUndefined(); + }); + }); + it("Pokemon under both Encore and Torment should alternate between Struggle and restricted move", async () => { const turnOrder = [ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]; game.override.moveset([ Moves.ENCORE, Moves.TORMENT, Moves.SPLASH ]); From 3d94c02d97335fb950e561a4b34e8b8930659e5a Mon Sep 17 00:00:00 2001 From: innerthunder Date: Wed, 6 Nov 2024 15:50:18 -0800 Subject: [PATCH 2/2] fix overrides --- src/test/moves/encore.test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/test/moves/encore.test.ts b/src/test/moves/encore.test.ts index ac353468dcb..7d8dc9658bf 100644 --- a/src/test/moves/encore.test.ts +++ b/src/test/moves/encore.test.ts @@ -25,12 +25,15 @@ describe("Moves - Encore", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override + .moveset([ Moves.SPLASH, Moves.ENCORE ]) .ability(Abilities.BALL_FETCH) .battleType("single") .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset([ Moves.SPLASH, Moves.TACKLE ]) + .startingLevel(100) + .enemyLevel(100); }); it("should prevent the target from using any move except the last used move", async () => {