Fixes Sparkling Aria Shield Dust / Covert Cloak interaction (#5911)

This commit is contained in:
Alex 2024-12-31 12:52:16 +01:00 committed by GitHub
parent 3db351359a
commit 51cfb96fd5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 22 additions and 13 deletions

View File

@ -335,5 +335,6 @@ bool32 IsSleepClauseActiveForSide(u32 battlerSide);
bool32 IsSleepClauseEnabled();
void ClearDamageCalcResults(void);
u32 DoesDestinyBondFail(u32 battler);
bool32 IsMoveEffectBlockedByTarget(u32 ability);
#endif // GUARD_BATTLE_UTIL_H

View File

@ -3177,15 +3177,9 @@ void SetMoveEffect(bool32 primary, bool32 certain)
gBattleScripting.moveEffect &= ~MOVE_EFFECT_CERTAIN;
if (!primary && affectsUser != MOVE_EFFECT_AFFECTS_USER
&& !(gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT)
&& (battlerAbility == ABILITY_SHIELD_DUST || GetBattlerHoldEffect(gEffectBattler, TRUE) == HOLD_EFFECT_COVERT_CLOAK))
{
if (battlerAbility == ABILITY_SHIELD_DUST)
RecordAbilityBattle(gEffectBattler, battlerAbility);
else
RecordItemEffectBattle(gEffectBattler, HOLD_EFFECT_COVERT_CLOAK);
&& !(gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT)
&& IsMoveEffectBlockedByTarget(battlerAbility))
INCREMENT_RESET_RETURN
}
if (gSideStatuses[GetBattlerSide(gEffectBattler)] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_STATUS_ABILITY_EFFECT)
&& !primary && gBattleScripting.moveEffect <= MOVE_EFFECT_CONFUSION)
@ -6258,7 +6252,8 @@ static void Cmd_moveend(void)
case MOVE_EFFECT_REMOVE_STATUS: // Smelling salts, Wake-Up Slap, Sparkling Aria
if ((gBattleMons[gBattlerTarget].status1 & gMovesInfo[gCurrentMove].argument.status)
&& IsBattlerAlive(gBattlerTarget)
&& !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove))
&& !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)
&& (gBattleStruct->numSpreadTargets > 1 || !IsMoveEffectBlockedByTarget(GetBattlerAbility(gBattlerTarget))))
{
gBattleMons[gBattlerTarget].status1 &= ~(gMovesInfo[gCurrentMove].argument.status);

View File

@ -12161,3 +12161,20 @@ bool32 DoesDestinyBondFail(u32 battler)
return TRUE;
return FALSE;
}
// This check has always to be the last in a condtion statement because of the recording of AI data.
bool32 IsMoveEffectBlockedByTarget(u32 ability)
{
if (ability == ABILITY_SHIELD_DUST)
{
RecordAbilityBattle(gBattlerTarget, ability);
return TRUE;
}
else if (GetBattlerHoldEffect(gBattlerTarget, TRUE) == HOLD_EFFECT_COVERT_CLOAK)
{
RecordItemEffectBattle(gBattlerTarget, HOLD_EFFECT_COVERT_CLOAK);
return TRUE;
}
return FALSE;
}

View File

@ -124,7 +124,6 @@ SINGLE_BATTLE_TEST("Shield Dust does not block self-targeting effects, primary o
DOUBLE_BATTLE_TEST("Shield Dust does or does not block Sparkling Aria depending on number of targets hit")
{
u32 moveToUse;
KNOWN_FAILING;
PARAMETRIZE { moveToUse = MOVE_FINAL_GAMBIT; }
PARAMETRIZE { moveToUse = MOVE_TACKLE; }
GIVEN {
@ -150,7 +149,6 @@ DOUBLE_BATTLE_TEST("Shield Dust does or does not block Sparkling Aria depending
SINGLE_BATTLE_TEST("Shield Dust blocks Sparkling Aria in singles")
{
KNOWN_FAILING;
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_VIVILLON) { Ability(ABILITY_SHIELD_DUST); Status1(STATUS1_BURN); }

View File

@ -127,7 +127,6 @@ SINGLE_BATTLE_TEST("Covert Cloak does not block self-targeting effects, primary
DOUBLE_BATTLE_TEST("Covert Cloak does or does not block Sparkling Aria depending on number of targets hit")
{
u32 moveToUse;
KNOWN_FAILING;
PARAMETRIZE { moveToUse = MOVE_FINAL_GAMBIT; }
PARAMETRIZE { moveToUse = MOVE_TACKLE; }
GIVEN {
@ -153,7 +152,6 @@ DOUBLE_BATTLE_TEST("Covert Cloak does or does not block Sparkling Aria depending
SINGLE_BATTLE_TEST("Covert Cloak blocks Sparkling Aria in singles")
{
KNOWN_FAILING;
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_COVERT_CLOAK); Status1(STATUS1_BURN); }