Fixes U-turn not reseting targetsDone flag (#9411)

This commit is contained in:
Alex 2026-03-04 13:16:56 +01:00 committed by GitHub
parent 87078e355d
commit c8ce8a2b28
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 41 additions and 7 deletions

View File

@ -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

View File

@ -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;

View File

@ -5028,7 +5028,7 @@ u32 IsAbilityPreventingEscape(enum BattlerId battler)
{
if (battler == battlerDef || IsBattlerAlly(battler, battlerDef))
continue;
if (!IsBattlerAlive(battlerDef))
continue;

View File

@ -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);
}
}