diff --git a/src/phases/return-phase.ts b/src/phases/return-phase.ts index 19c73816b36..d126f4f5d6b 100644 --- a/src/phases/return-phase.ts +++ b/src/phases/return-phase.ts @@ -1,4 +1,5 @@ import BattleScene from "#app/battle-scene"; +import { applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr } from "#app/data/ability"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { SwitchSummonPhase } from "./switch-summon-phase"; @@ -8,6 +9,8 @@ export class ReturnPhase extends SwitchSummonPhase { } switchAndSummon(): void { + this.lastPokemon = this.getPokemon(); + applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, this.lastPokemon); this.end(); } diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 525f74e896f..5b3d2f560d8 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -18,7 +18,7 @@ export class SwitchSummonPhase extends SummonPhase { private doReturn: boolean; private batonPass: boolean; - private lastPokemon: Pokemon; + protected lastPokemon: Pokemon; /** * Constructor for creating a new SwitchSummonPhase diff --git a/src/test/abilities/delta_stream.test.ts b/src/test/abilities/delta_stream.test.ts new file mode 100644 index 00000000000..0482d7f7b37 --- /dev/null +++ b/src/test/abilities/delta_stream.test.ts @@ -0,0 +1,50 @@ +import { Moves } from "#app/enums/moves"; +import { Species } from "#app/enums/species"; +import { WeatherType } from "#app/enums/weather-type"; +import { Abilities } from "#enums/abilities"; +import GameManager from "#test/utils/gameManager"; +import { SPLASH_ONLY } from "#test/utils/testUtils"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Delta Stream", () => { + 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 + .battleType("double") + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(SPLASH_ONLY) + .enemySpecies(Species.MAGIKARP) + .moveset([Moves.SPLASH]) + .starterForms({ + [Species.RAYQUAZA]: 1 + }); + }); + + it("no longer applies after transition from double to single battle", async () => { + await game.startBattle([Species.FEEBAS, Species.RAYQUAZA]); + + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.STRONG_WINDS); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.doKillOpponents(); + game.override.battleType("single"); + await game.toNextWave(); + + expect(game.scene.arena.weather?.weatherType).toBeUndefined(); + }); +});