diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 2000ef4e84..f0f47b5fb5 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -230,7 +230,7 @@ BattleScript_MoveSwitchPursuitRet: jumpifcantswitch SWITCH_IGNORE_ESCAPE_PREVENTION | BS_ATTACKER, BattleScript_MoveSwitchEnd printstring STRINGID_PKMNWENTBACK waitmessage B_WAIT_TIME_SHORT - jumpifnopursuitswitchdmg BattleScript_MoveSwitchOpenPartyScreen + jumpifnopursuitswitchdmg BattleScript_MoveSwitchOpenPartyScreenRet return BattleScript_MoveSwitch:: @@ -239,13 +239,17 @@ BattleScript_MoveSwitch:: printstring STRINGID_PKMNWENTBACK waitmessage B_WAIT_TIME_SHORT BattleScript_MoveSwitchOpenPartyScreen:: + call BattleScript_MoveSwitchOpenPartyScreenRet +BattleScript_MoveSwitchEnd: + end + +BattleScript_MoveSwitchOpenPartyScreenRet: call BattleScript_MoveSwitchOpenPartyScreenReturnWithNoAnim switchinanim BS_ATTACKER, FALSE, FALSE waitstate switchineffects BS_ATTACKER switchinevents -BattleScript_MoveSwitchEnd: - end + return BattleScript_MoveSwitchOpenPartyScreenReturnWithNoAnim: openpartyscreen BS_ATTACKER, BattleScript_MoveSwitchEnd diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0fd5f4103d..11f9141ced 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2364,7 +2364,7 @@ static void SetNonVolatileStatus(enum BattlerId effectBattler, enum MoveEffect e static inline bool32 IgnoreTargetingForMoveEffect(enum MoveEffect moveEffect) // Currently only used to determine move effects which happen even if the move's defined effectbattler is fainted { - switch (moveEffect) + switch (moveEffect) { case MOVE_EFFECT_PAYDAY: case MOVE_EFFECT_BUG_BITE: @@ -2376,7 +2376,7 @@ static inline bool32 IgnoreTargetingForMoveEffect(enum MoveEffect moveEffect) // case MOVE_EFFECT_SANDSTORM: case MOVE_EFFECT_HAIL: case MOVE_EFFECT_MISTY_TERRAIN: - case MOVE_EFFECT_GRASSY_TERRAIN: + case MOVE_EFFECT_GRASSY_TERRAIN: case MOVE_EFFECT_ELECTRIC_TERRAIN: case MOVE_EFFECT_PSYCHIC_TERRAIN: case MOVE_EFFECT_DEFOG: @@ -2443,7 +2443,7 @@ void SetMoveEffect(enum BattlerId battlerAtk, enum BattlerId effectBattler, enum gBattlescriptCurrInstr = battleScript; return; } - + gBattleScripting.battler = battlerAtk; gEffectBattler = effectBattler; diff --git a/src/battle_util.c b/src/battle_util.c index 8f964c8d90..cf94c40a88 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5028,7 +5028,7 @@ u32 IsAbilityPreventingEscape(enum BattlerId battler) { if (battler == battlerDef || IsBattlerAlly(battler, battlerDef)) continue; - + if (!IsBattlerAlive(battlerDef)) continue; diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index 916369cdb2..15b5fc9547 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -958,3 +958,33 @@ DOUBLE_BATTLE_TEST("Wide Guard is still activate even if user is switched out du } } } + +DOUBLE_BATTLE_TEST("Protect is not ignored after a new mon switched in because of U-Turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { + MOVE(playerRight, MOVE_PROTECT); + MOVE(opponentLeft, MOVE_POUND, target: playerRight); + MOVE(opponentRight, MOVE_U_TURN, target: playerLeft); + SEND_OUT(opponentRight, 2); + } + TURN { + MOVE(playerLeft, MOVE_DETECT); + MOVE(opponentLeft, MOVE_POUND, target: playerRight); + MOVE(opponentRight, MOVE_POUND, target: playerLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DETECT, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponentLeft); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_POUND, opponentRight); + } +} +