diff --git a/src/data/move.ts b/src/data/move.ts index 87626719664..96e2a882c0f 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -5457,7 +5457,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { private selfSwitch: boolean = false, private switchType: SwitchType = SwitchType.SWITCH ) { - super(selfSwitch, MoveEffectTrigger.POST_APPLY, false, true); + super(false, MoveEffectTrigger.POST_APPLY, false, true); } isBatonPass() { @@ -5465,10 +5465,6 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!super.apply(user, target, move, args)) { - return false; - } - // Check if the move category is not STATUS or if the switch out condition is not met if (!this.getSwitchOutCondition()(user, target, move)) { return false; @@ -5480,37 +5476,38 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { */ const switchOutTarget = this.selfSwitch ? user : target; if (switchOutTarget instanceof PlayerPokemon) { + // Switch out logic for the player's Pokemon if (switchOutTarget.scene.getParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) { return false; } - switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); if (switchOutTarget.hp > 0) { + switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); user.scene.prependToPhase(new SwitchPhase(user.scene, this.switchType, switchOutTarget.getFieldIndex(), true, true), MoveEndPhase); return true; } return false; } else if (user.scene.currentBattle.battleType !== BattleType.WILD) { + // Switch out logic for trainer battles if (switchOutTarget.scene.getEnemyParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) { return false; } - // Switch out logic for trainer battles - switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); if (switchOutTarget.hp > 0) { // for opponent switching out + switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); user.scene.prependToPhase(new SwitchSummonPhase(user.scene, this.switchType, switchOutTarget.getFieldIndex(), (user.scene.currentBattle.trainer ? user.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0), false, false), MoveEndPhase); } } else { + // Switch out logic for everything else (eg: WILD battles) if (user.scene.currentBattle.waveIndex % 10 === 0) { return false; } - // Switch out logic for everything else (eg: WILD battles) - switchOutTarget.leaveField(false); - if (switchOutTarget.hp) { + if (switchOutTarget.hp > 0) { + switchOutTarget.leaveField(false); user.scene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); // in double battles redirect potential moves off fled pokemon diff --git a/src/test/moves/dragon_tail.test.ts b/src/test/moves/dragon_tail.test.ts index 0c7d249db70..f648d01caf2 100644 --- a/src/test/moves/dragon_tail.test.ts +++ b/src/test/moves/dragon_tail.test.ts @@ -147,7 +147,7 @@ describe("Moves - Dragon Tail", () => { game.move.select(Moves.DRAGON_TAIL); - await game.toNextWave(); + await game.toNextTurn(); // Make sure the enemy switched to a healthy Pokemon const enemy = game.scene.getEnemyPokemon()!; @@ -167,7 +167,7 @@ describe("Moves - Dragon Tail", () => { game.move.select(Moves.DRAGON_TAIL); - await game.toNextWave(); + await game.toNextTurn(); // Make sure the enemy field is not empty and has a revived Pokemon const enemy = game.scene.getEnemyPokemon()!; @@ -183,7 +183,7 @@ describe("Moves - Dragon Tail", () => { game.move.select(Moves.SPLASH); - await game.toNextWave(); + await game.toNextTurn(); // Make sure the player's field is not empty and has a revived Pokemon const dratini = game.scene.getPlayerPokemon()!;