diff --git a/sim/battle.ts b/sim/battle.ts index 9cf4c157c6dc..80c628023912 100644 --- a/sim/battle.ts +++ b/sim/battle.ts @@ -2185,16 +2185,13 @@ export class Battle extends Dex.ModdedDex { } else { target = pokemon.side.active[-targetLoc - 1]; } - if (target) { - if (!target.fainted) { - // target exists and is not fainted - return target; - } else if (target.side === pokemon.side) { - // fainted allied targets don't retarget - return null; - } + if (target && !(target.fainted && target.side !== pokemon.side)) { + // We aren't targetting a fainted foe. + return target; } - // chosen target not valid, retarget randomly with resolveTarget + + // Chosen target not valid, + // retarget randomly with resolveTarget } return this.resolveTarget(pokemon, move); } diff --git a/sim/pokemon.ts b/sim/pokemon.ts index 11eaa1491079..f1db2ac60f67 100644 --- a/sim/pokemon.ts +++ b/sim/pokemon.ts @@ -601,6 +601,9 @@ export class Pokemon { target = this.battle.priorityEvent('RedirectTarget', this, this, this.battle.getActiveMove(move), target); } } + if (target.fainted) { + return []; + } if (selectedTarget !== target) { this.battle.retargetLastMove(target); } diff --git a/test/simulator/misc/target-resolution.js b/test/simulator/misc/target-resolution.js index b4819d3503eb..e7fbd8b1b756 100644 --- a/test/simulator/misc/target-resolution.js +++ b/test/simulator/misc/target-resolution.js @@ -39,7 +39,7 @@ describe('Target Resolution', function () { const newHps = activePokemonList.map(pokemon => pokemon.hp); assert.deepStrictEqual(prevHps, newHps); - assert(battle.log.includes('|move|p1a: Wailord|Water Pulse|null|[notarget]')); + assert(battle.log.includes('|move|p1a: Wailord|Water Pulse|p1: Latias|[notarget]')); assert(battle.log.includes('|-fail|p1a: Wailord')); }); @@ -136,9 +136,9 @@ describe('Target Resolution', function () { const newHps = attackers.map(pokemon => pokemon.hp); assert.deepStrictEqual(prevHps, newHps); - assert(battle.log.includes('|move|p1a: Wailord|Water Pulse|null|[notarget]')); + assert(battle.log.includes('|move|p1a: Wailord|Water Pulse|p1: Shedinja|[notarget]')); assert(battle.log.includes('|-fail|p1a: Wailord')); - assert(battle.log.includes('|move|p2a: Wailord|Water Pulse|null|[notarget]')); + assert(battle.log.includes('|move|p2a: Wailord|Water Pulse|p2: Shedinja|[notarget]')); assert(battle.log.includes('|-fail|p2a: Wailord')); });