From e39dc493fc8767621796d41e569917053bd0812c Mon Sep 17 00:00:00 2001 From: LOuroboros Date: Mon, 30 Aug 2021 20:33:21 -0300 Subject: [PATCH] A couple of improvements, courtesy of Syreldar -Optimized the checks for `WEATHER_RAIN_PRIMAL` and `WEATHER_SUN_PRIMAL` in `Cmd_attackcanceler`. -Moved the dmg calculation effect of `WEATHER_STRONG_WINDS` to the `CalcFinalDmg` function. --- src/battle_script_commands.c | 13 +++++-------- src/battle_util.c | 18 ++++++------------ 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 85cd16066..2df8edc91 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1324,23 +1324,21 @@ static void Cmd_attackcanceler(void) s32 i, moveType; GET_MOVE_TYPE(gCurrentMove, moveType); + if (moveType == TYPE_FIRE && (gBattleWeather & WEATHER_RAIN_PRIMAL) - && !IsAbilityOnField(ABILITY_AIR_LOCK) - && !IsAbilityOnField(ABILITY_CLOUD_NINE) - && gBattleMoves[gCurrentMove].power >= 1) + && WEATHER_HAS_EFFECT + && gBattleMoves[gCurrentMove].power) { BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_PrimordialSeaFizzlesOutFireTypeMoves; return; } - GET_MOVE_TYPE(gCurrentMove, moveType); if (moveType == TYPE_WATER && (gBattleWeather & WEATHER_SUN_PRIMAL) - && !IsAbilityOnField(ABILITY_AIR_LOCK) - && !IsAbilityOnField(ABILITY_CLOUD_NINE) - && gBattleMoves[gCurrentMove].power >= 1) + && WEATHER_HAS_EFFECT + && gBattleMoves[gCurrentMove].power) { BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_DesolateLandEvaporatesWaterTypeMoves; @@ -1366,7 +1364,6 @@ static void Cmd_attackcanceler(void) return; // Check Protean activation. - GET_MOVE_TYPE(gCurrentMove, moveType); if ((GetBattlerAbility(gBattlerAttacker) == ABILITY_PROTEAN || GetBattlerAbility(gBattlerAttacker) == ABILITY_LIBERO) && (gBattleMons[gBattlerAttacker].type1 != moveType || gBattleMons[gBattlerAttacker].type2 != moveType || (gBattleMons[gBattlerAttacker].type3 != moveType && gBattleMons[gBattlerAttacker].type3 != TYPE_MYSTERY)) diff --git a/src/battle_util.c b/src/battle_util.c index e258daac5..96cbfbc87 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -7898,6 +7898,12 @@ static u32 CalcFinalDmg(u32 dmg, u16 move, u8 battlerAtk, u8 battlerDef, u8 move else if (moveType == TYPE_WATER) dmg = ApplyModifier(UQ_4_12(0.5), dmg); } + else if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_STRONG_WINDS) + { + if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_FLYING) + && typeEffectivenessModifier >= UQ_4_12(2.0)) + dmg = ApplyModifier(UQ_4_12(0.5), dmg); + } // check stab if (IS_BATTLER_OF_TYPE(battlerAtk, moveType) && move != MOVE_STRUGGLE) @@ -8139,18 +8145,6 @@ static u16 CalcTypeEffectivenessMultiplierInternal(u16 move, u8 moveType, u8 bat modifier = UQ_4_12(1.0); } - // WEATHER_STRONG_WINDS weakens super effective moves against flying type mons - if (gBattleWeather & WEATHER_STRONG_WINDS - && modifier == UQ_4_12(2.0) - && (IS_BATTLER_OF_TYPE(battlerDef, TYPE_FLYING)) - && !IsAbilityOnField(ABILITY_AIR_LOCK) - && !IsAbilityOnField(ABILITY_CLOUD_NINE)) - { - modifier = UQ_4_12(1.0); - PrepareStringBattle(STRINGID_ATTACKWEAKENEDBSTRONGWINDS, battlerDef); - gBattlescriptCurrInstr++; - } - if (GetBattlerAbility(battlerDef) == ABILITY_WONDER_GUARD && modifier <= UQ_4_12(1.0) && gBattleMoves[move].power) { modifier = UQ_4_12(0.0);