From 7af13b2c35d7cd030577a969fb55abf50366cdf7 Mon Sep 17 00:00:00 2001 From: ZainWD Date: Thu, 9 Jan 2025 22:01:08 -0500 Subject: [PATCH] Made requested changes and added unit test --- src/data/move.ts | 57 +---------------------------- src/test/moves/defog.test.ts | 71 ++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 56 deletions(-) create mode 100644 src/test/moves/defog.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index 86f1661cac0..71723b976fa 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -5814,60 +5814,6 @@ export class RemoveArenaTrapAttr extends MoveEffectAttr { } -export class RemoveSafeguard extends MoveEffectAttr { - - private targetBothSides: boolean; - - constructor(targetBothSides: boolean = false) { - super(true, { trigger: MoveEffectTrigger.PRE_APPLY }); - this.targetBothSides = targetBothSides; - } - - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - - if (!super.apply(user, target, move, args)) { - return false; - } - - if (this.targetBothSides) { - user.scene.arena.removeTagOnSide(ArenaTagType.SAFEGUARD, ArenaTagSide.PLAYER); - user.scene.arena.removeTagOnSide(ArenaTagType.SAFEGUARD, ArenaTagSide.ENEMY); - - } else { - user.scene.arena.removeTagOnSide(ArenaTagType.SAFEGUARD, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); - } - - return true; - } -} - -export class RemoveMist extends MoveEffectAttr { - - private targetBothSides: boolean; - - constructor(targetBothSides: boolean = false) { - super(true, { trigger: MoveEffectTrigger.PRE_APPLY }); - this.targetBothSides = targetBothSides; - } - - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - - if (!super.apply(user, target, move, args)) { - return false; - } - - if (this.targetBothSides) { - user.scene.arena.removeTagOnSide(ArenaTagType.MIST, ArenaTagSide.PLAYER); - user.scene.arena.removeTagOnSide(ArenaTagType.MIST, ArenaTagSide.ENEMY); - - } else { - user.scene.arena.removeTagOnSide(ArenaTagType.MIST, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); - } - - return true; - } -} - export class RemoveScreensAttr extends MoveEffectAttr { private targetBothSides: boolean; @@ -9276,8 +9222,7 @@ export function initMoves() { .attr(ClearTerrainAttr) .attr(RemoveScreensAttr, false) .attr(RemoveArenaTrapAttr, true) - .attr(RemoveSafeguard, false) - .attr(RemoveMist, false), + .attr(RemoveArenaTagsAttr, [ ArenaTagType.MIST, ArenaTagType.SAFEGUARD ], false), new StatusMove(Moves.TRICK_ROOM, Type.PSYCHIC, -1, 5, -1, -7, 4) .attr(AddArenaTagAttr, ArenaTagType.TRICK_ROOM, 5) .ignoresProtect() diff --git a/src/test/moves/defog.test.ts b/src/test/moves/defog.test.ts new file mode 100644 index 00000000000..c83cdc192bf --- /dev/null +++ b/src/test/moves/defog.test.ts @@ -0,0 +1,71 @@ +import { Stat } from "#enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Defog", () => { + 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 + .moveset([ Moves.MIST, Moves.SAFEGUARD, Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset([ Moves.DEFOG, Moves.GROWL ]); + }); + + it("should not allow Safeguard to be active", async () => { + await game.classicMode.startBattle([ Species.REGIELEKI ]); + + const playerPokemon = game.scene.getPlayerField(); + const enemyPokemon = game.scene.getEnemyField(); + + game.move.select(Moves.SAFEGUARD); + await game.forceEnemyMove(Moves.DEFOG); + await game.phaseInterceptor.to("BerryPhase"); + + expect(playerPokemon[0].isSafeguarded(enemyPokemon[0])).toBe(false); + + + expect(true).toBe(true); + }); + + + it("should not allow Mist to be active", async () => { + await game.classicMode.startBattle([ Species.REGIELEKI ]); + + const playerPokemon = game.scene.getPlayerField(); + + game.move.select(Moves.MIST); + await game.forceEnemyMove(Moves.DEFOG); + + await game.toNextTurn(); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.GROWL); + + await game.phaseInterceptor.to("BerryPhase"); + + expect(playerPokemon[0].getStatStage(Stat.ATK)).toBe(-1); + + expect(true).toBe(true); + }); +});