diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index cc61f7e7b0..e9c1c74912 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -61,11 +61,12 @@ extern const u8 *const gBattleScriptsForMoveEffects[]; #define TAG_LVLUP_BANNER_MON_ICON 55130 -#define ATTACKS_THIS_TURN(battler, move) (AttacksThisTurn(battler, move) == 2) +#define TIMING_CHARGING 1 +#define TIMING_ATTACKING 2 static bool8 IsTwoTurnsMove(u16 move); static void TrySetDestinyBondToHappen(void); -static u8 AttacksThisTurn(u8 battler, u16 move); // Note: returns 1 if it's a charging turn, otherwise 2. +static u8 GetAttackTiming(u8 battler, u16 move); static void CheckWonderGuardAndLevitate(void); static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8, const u8 *BS_ptr); static bool32 IsMonGettingExpSentOut(void); @@ -1408,7 +1409,8 @@ static void Cmd_typecalc(void) } } - if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD && ATTACKS_THIS_TURN(gBattlerAttacker, gCurrentMove) + if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD + && GetAttackTiming(gBattlerAttacker, gCurrentMove) == TIMING_ATTACKING && (!(gMoveResultFlags & MOVE_RESULT_SUPER_EFFECTIVE) || ((gMoveResultFlags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE))) && gBattleMoves[gCurrentMove].power) { @@ -1489,7 +1491,8 @@ static void CheckWonderGuardAndLevitate(void) i += 3; } - if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD && ATTACKS_THIS_TURN(gBattlerAttacker, gCurrentMove)) + if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD + && GetAttackTiming(gBattlerAttacker, gCurrentMove) == TIMING_ATTACKING) { if (((flags & 2) || !(flags & 1)) && gBattleMoves[gCurrentMove].power) { @@ -1584,7 +1587,7 @@ u8 TypeCalc(u16 move, u8 attacker, u8 defender) } if (gBattleMons[defender].ability == ABILITY_WONDER_GUARD && !(flags & MOVE_RESULT_MISSED) - && ATTACKS_THIS_TURN(attacker, move) + && GetAttackTiming(attacker, move) == TIMING_ATTACKING && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE))) && gBattleMoves[move].power) { @@ -4578,7 +4581,7 @@ static void Cmd_typecalc2(void) if (gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD && !(flags & MOVE_RESULT_NO_EFFECT) - && ATTACKS_THIS_TURN(gBattlerAttacker, gCurrentMove) + && GetAttackTiming(gBattlerAttacker, gCurrentMove) == TIMING_ATTACKING && (!(flags & MOVE_RESULT_SUPER_EFFECTIVE) || ((flags & (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE)) == (MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE))) && gBattleMoves[gCurrentMove].power) { @@ -8220,12 +8223,12 @@ static bool8 IsInvalidForSleepTalkOrAssist(u16 move) return FALSE; } -static u8 AttacksThisTurn(u8 battler, u16 move) // Note: returns 1 if it's a charging turn, otherwise 2 +static u8 GetAttackTiming(u8 battler, u16 move) { // first argument is unused if (gBattleMoves[move].effect == EFFECT_SOLAR_BEAM && (gBattleWeather & B_WEATHER_SUN)) - return 2; + return TIMING_ATTACKING; if (gBattleMoves[move].effect == EFFECT_SKULL_BASH || gBattleMoves[move].effect == EFFECT_RAZOR_WIND @@ -8235,9 +8238,9 @@ static u8 AttacksThisTurn(u8 battler, u16 move) // Note: returns 1 if it's a cha || gBattleMoves[move].effect == EFFECT_BIDE) { if ((gHitMarker & HITMARKER_CHARGING)) - return 1; + return TIMING_CHARGING; } - return 2; + return TIMING_ATTACKING; } static void Cmd_trychoosesleeptalkmove(void)