From cca969b04de175b906a9859782c7e436d1cdad4b Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Wed, 16 Apr 2025 00:08:57 +0200 Subject: [PATCH] Adds move effect type checking (#6618) --- include/battle_ai_util.h | 32 +++++------ include/constants/battle_move_effects.h | 3 +- include/move.h | 2 +- src/battle_ai_main.c | 41 +++++++++++--- src/battle_ai_switch_items.c | 6 +- src/battle_ai_util.c | 73 ++++++++++++++++--------- src/battle_arena.c | 2 +- src/battle_controller_player.c | 2 +- src/battle_dome.c | 8 +-- src/battle_dynamax.c | 4 ++ src/battle_gfx_sfx_util.c | 2 +- src/battle_main.c | 10 +++- src/battle_script_commands.c | 32 ++++++----- src/battle_util.c | 27 +++++---- test/battle/ability/sheer_force.c | 8 +++ 15 files changed, 161 insertions(+), 91 deletions(-) diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index aa54d022ca..e7672c7ae3 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -87,7 +87,7 @@ bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 mo u32 GetBattlerSideSpeedAverage(u32 battler); bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage); bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent, enum DamageCalcContext calcContext); -bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, u32 moveEffect); +bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects moveEffect); enum AIPivot ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32 moveIndex); bool32 IsRecycleEncouragedItem(u32 item); bool32 ShouldRestoreHpBerry(u32 battlerAtk, u32 item); @@ -127,21 +127,21 @@ u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex, enum D u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef, enum DamageCalcContext calcContext); uq4_12_t AI_GetMoveEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef); u16 *GetMovesArray(u32 battler); -bool32 IsConfusionMoveEffect(u32 moveEffect); +bool32 IsConfusionMoveEffect(enum BattleMoveEffects moveEffect); bool32 HasMove(u32 battlerId, u32 move); bool32 HasOnlyMovesWithCategory(u32 battlerId, u32 category, bool32 onlyOffensive); bool32 HasMoveWithCategory(u32 battler, u32 category); bool32 HasMoveWithType(u32 battler, u32 type); -bool32 HasMoveEffect(u32 battlerId, u32 moveEffect); -bool32 IsPowerBasedOnStatus(u32 battlerId, u32 effect, u32 argument); +bool32 HasMoveEffect(u32 battlerId, enum BattleMoveEffects moveEffect); +bool32 IsPowerBasedOnStatus(u32 battlerId, enum BattleMoveEffects effect, u32 argument); bool32 HasMoveWithAdditionalEffect(u32 battlerId, u32 moveEffect); bool32 HasMoveWithCriticalHitChance(u32 battlerId); -bool32 HasMoveWithMoveEffectExcept(u32 battlerId, u32 moveEffect, u32 exception); +bool32 HasMoveWithMoveEffectExcept(u32 battlerId, u32 moveEffect, enum BattleMoveEffects exception); bool32 HasMoveThatLowersOwnStats(u32 battlerId); bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect); bool32 HasAnyKnownMove(u32 battlerId); -bool32 IsAromaVeilProtectedEffect(u32 moveEffect); -bool32 IsNonVolatileStatusMoveEffect(u32 moveEffect); +bool32 IsAromaVeilProtectedEffect(enum BattleMoveEffects moveEffect); +bool32 IsNonVolatileStatusMoveEffect(enum BattleMoveEffects moveEffect); bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, u32 atkAbility); bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move); bool32 IsHazardMove(u32 move); @@ -159,20 +159,20 @@ bool32 IsTrappingMove(u32 move); bool32 HasTrappingMoveEffect(u32 battler); bool32 ShouldFakeOut(u32 battlerAtk, u32 battlerDef, u32 move); bool32 HasThawingMove(u32 battler); -bool32 IsStatRaisingEffect(u32 effect); -bool32 IsStatLoweringEffect(u32 effect); -bool32 IsSelfStatLoweringEffect(u32 effect); -bool32 IsSwitchOutEffect(u32 effect); -bool32 IsChaseEffect(u32 effect); -bool32 IsAttackBoostMoveEffect(u32 effect); -bool32 IsUngroundingEffect(u32 effect); +bool32 IsStatRaisingEffect(enum BattleMoveEffects effect); +bool32 IsStatLoweringEffect(enum BattleMoveEffects effect); +bool32 IsSelfStatLoweringEffect(enum BattleMoveEffects effect); +bool32 IsSwitchOutEffect(enum BattleMoveEffects effect); +bool32 IsChaseEffect(enum BattleMoveEffects effect); +bool32 IsAttackBoostMoveEffect(enum BattleMoveEffects effect); +bool32 IsUngroundingEffect(enum BattleMoveEffects effect); bool32 IsSemiInvulnerable(u32 battlerDef, u32 move); bool32 HasSubstituteIgnoringMove(u32 battler); bool32 HasHighCritRatioMove(u32 battler); bool32 HasMagicCoatAffectedMove(u32 battler); bool32 HasSnatchAffectedMove(u32 battler); bool32 IsHazardClearingMove(u32 move); -bool32 IsSubstituteEffect(u32 effect); +bool32 IsSubstituteEffect(enum BattleMoveEffects effect); // status checks bool32 AI_CanGetFrostbite(u32 battler, u32 ability); @@ -204,7 +204,7 @@ bool32 PartnerHasSameMoveEffectWithoutTarget(u32 battlerAtkPartner, u32 move, u3 bool32 PartnerMoveEffectIsStatusSameTarget(u32 battlerAtkPartner, u32 battlerDef, u32 partnerMove); bool32 IsMoveEffectWeather(u32 move); bool32 PartnerMoveEffectIsTerrain(u32 battlerAtkPartner, u32 partnerMove); -bool32 PartnerMoveEffectIs(u32 battlerAtkPartner, u32 partnerMove, u32 effectCheck); +bool32 PartnerMoveEffectIs(u32 battlerAtkPartner, u32 partnerMove, enum BattleMoveEffects effectCheck); bool32 PartnerMoveIs(u32 battlerAtkPartner, u32 partnerMove, u32 moveCheck); bool32 PartnerMoveIsSameAsAttacker(u32 battlerAtkPartner, u32 battlerDef, u32 move, u32 partnerMove); bool32 PartnerMoveIsSameNoTarget(u32 battlerAtkPartner, u32 move, u32 partnerMove); diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 1e0a6f35fe..1bd9975e56 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -1,7 +1,8 @@ #ifndef GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H #define GUARD_CONSTANTS_BATTLE_MOVE_EFFECTS_H -enum { +enum BattleMoveEffects +{ EFFECT_PLACEHOLDER, EFFECT_HIT, EFFECT_SLEEP, diff --git a/include/move.h b/include/move.h index ce1c40f5cc..ecf972da6e 100644 --- a/include/move.h +++ b/include/move.h @@ -183,7 +183,7 @@ static inline const u8 *GetMoveDescription(u32 moveId) return gMovesInfo[moveId].description; } -static inline u32 GetMoveEffect(u32 moveId) +static inline enum BattleMoveEffects GetMoveEffect(u32 moveId) { return gMovesInfo[SanitizeMoveId(moveId)].effect; } diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index ebeaaac94d..6a1448dcb8 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -830,7 +830,7 @@ void BattleAI_DoAIProcessing_PredictedSwitchin(struct AI_ThinkingStruct *aiThink static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { // move data - u32 moveEffect = GetMoveEffect(move); + enum BattleMoveEffects moveEffect = GetMoveEffect(move); s32 moveType; u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); struct AiLogicData *aiData = AI_DATA; @@ -929,6 +929,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IS_BATTLER_OF_TYPE(battlerAtk, TYPE_GHOST)) // Don't use Curse if you're a ghost type vs a Magic Guard user, they'll take no damage. ADJUST_SCORE(-5); break; + default: + break; } break; case ABILITY_WONDER_GUARD: @@ -1058,6 +1060,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_SNOWSCAPE: case EFFECT_SANDSTORM: RETURN_SCORE_MINUS(30); + break; + default: + break; } if (!IsBattleMoveStatus(move)) @@ -2755,14 +2760,14 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { // move data u32 moveType = GetMoveType(move); - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); // ally data u32 battlerAtkPartner = BATTLE_PARTNER(battlerAtk); struct AiLogicData *aiData = AI_DATA; u32 atkPartnerAbility = aiData->abilities[BATTLE_PARTNER(battlerAtk)]; u32 atkPartnerHoldEffect = aiData->holdEffects[BATTLE_PARTNER(battlerAtk)]; - u32 partnerEffect = GetMoveEffect(aiData->partnerMove); + enum BattleMoveEffects partnerEffect = GetMoveEffect(aiData->partnerMove); bool32 partnerProtecting = (partnerEffect == EFFECT_PROTECT); bool32 attackerHasBadAbility = (gAbilitiesInfo[aiData->abilities[battlerAtk]].aiRating < 0); bool32 partnerHasBadAbility = (gAbilitiesInfo[atkPartnerAbility].aiRating < 0); @@ -2797,6 +2802,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IsMoveEffectWeather(move)) ADJUST_SCORE(-10); break; + default: + break; } } // check partner move effect @@ -2842,6 +2849,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) || HasMoveWithCriticalHitChance(battlerAtkPartner)) ADJUST_SCORE(GOOD_EFFECT); break; + default: + break; } // our effect relative to partner // consider global move effects @@ -2880,6 +2889,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) RETURN_SCORE_PLUS(DECENT_EFFECT); // our partner benefits from snow } break; + default: + break; } // global move effect check // check specific target @@ -3121,6 +3132,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) && gBattleMons[battlerAtkPartner].hp < gBattleMons[battlerAtkPartner].maxHP / 2) RETURN_SCORE_PLUS(WEAK_EFFECT); break; + default: + break; } // attacker move effects } // check partner protecting @@ -3137,6 +3150,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) else if (IsAbilityOfRating(aiData->abilities[battlerAtk], 0) || IsAbilityOfRating(aiData->abilities[battlerDef], 10)) ADJUST_SCORE(DECENT_EFFECT); // we want to transfer our bad ability or take their awesome ability break; + default: + break; } // lightning rod, flash fire against enemy handled in AI_CheckBadMove @@ -3321,7 +3336,7 @@ static u32 AI_CalcHoldEffectMoveScore(u32 battlerAtk, u32 battlerDef, u32 move) static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) { // move data - u32 moveEffect = GetMoveEffect(move); + enum BattleMoveEffects moveEffect = GetMoveEffect(move); struct AiLogicData *aiData = AI_DATA; u32 movesetIndex = AI_THINKING_STRUCT->movesetIndex; uq4_12_t effectiveness = aiData->effectiveness[battlerAtk][battlerDef][movesetIndex]; @@ -3948,7 +3963,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_SEMI_INVULNERABLE: if (predictedMove != MOVE_NONE && !isDoubleBattle) { - u32 predictedEffect = GetMoveEffect(predictedMove); + enum BattleMoveEffects predictedEffect = GetMoveEffect(predictedMove); if ((AI_IsFaster(battlerAtk, battlerDef, move)) && (predictedEffect == EFFECT_EXPLOSION || predictedEffect == EFFECT_PROTECT)) ADJUST_SCORE(GOOD_EFFECT); @@ -4589,6 +4604,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_SPECTRAL_THIEF: ADJUST_SCORE(AI_ShouldCopyStatChanges(battlerAtk, battlerDef)); break; + default: + break; } // move effect checks u32 additionalEffectCount = GetMoveAdditionalEffectCount(move); @@ -5095,7 +5112,7 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor || (!AI_CanBattlerEscape(battlerAtk) && IsBattlerTrapped(battlerDef, battlerAtk))) return score; - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); if (IsStatRaisingEffect(effect)) { @@ -5140,7 +5157,7 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); u32 moveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); @@ -5332,7 +5349,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) static s32 AI_PowerfulStatus(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { - u32 moveEffect = GetMoveEffect(move); + enum BattleMoveEffects moveEffect = GetMoveEffect(move); if (GetMoveCategory(move) != DAMAGE_CATEGORY_STATUS || GetMoveEffect(AI_DATA->partnerMove) == moveEffect) return score; @@ -5415,6 +5432,9 @@ static s32 AI_PowerfulStatus(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_SNOWSCAPE: if (!(AI_GetWeather() & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY))) ADJUST_SCORE(POWERFUL_STATUS_MOVE); + break; + default: + break; } return score; @@ -5427,7 +5447,7 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 ability = gBattleMons[battlerAtk].ability; u32 opposingHazardFlags = gSideStatuses[GetBattlerSide(battlerDef)] & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_TOXIC_SPIKES); u32 aiHazardFlags = gSideStatuses[GetBattlerSide(battlerAtk)] & (SIDE_STATUS_HAZARDS_ANY); - u32 moveEffect = GetMoveEffect(move); + enum BattleMoveEffects moveEffect = GetMoveEffect(move); struct AiLogicData *aiData = AI_DATA; uq4_12_t effectiveness = aiData->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; @@ -5544,6 +5564,9 @@ static s32 AI_PredictSwitch(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_MEAN_LOOK: ADJUST_SCORE(-GOOD_EFFECT); break; + + default: + break; } // Additional effects diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index 8344f41d8a..79027dffd4 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -183,7 +183,8 @@ static bool32 ShouldSwitchIfHasBadOdds(u32 battler) s32 i, damageDealt = 0, maxDamageDealt = 0, damageTaken = 0, maxDamageTaken = 0; u32 aiMove, playerMove, aiBestMove = MOVE_NONE, aiAbility = AI_DATA->abilities[battler], opposingBattler, weather = AI_GetWeather(); bool32 getsOneShot = FALSE, hasStatusMove = FALSE, hasSuperEffectiveMove = FALSE; - u16 typeEffectiveness = UQ_4_12(1.0), aiMoveEffect; //baseline typing damage + u16 typeEffectiveness = UQ_4_12(1.0); //baseline typing damage + enum BattleMoveEffects aiMoveEffect; uq4_12_t effectiveness; // Only use this if AI_FLAG_SMART_SWITCHING is set for the trainer @@ -1061,7 +1062,8 @@ static bool32 ShouldSwitchIfAttackingStatsLowered(u32 battler) static bool32 HasGoodSubstituteMove(u32 battler) { int i; - u32 aiMove, aiMoveEffect, opposingBattler = GetOppositeBattler(battler); + u32 aiMove, opposingBattler = GetOppositeBattler(battler); + enum BattleMoveEffects aiMoveEffect; for (i = 0; i < MAX_MON_MOVES; i++) { aiMove = gBattleMons[battler].moves[i]; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 2839096a59..3d030707bf 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -391,7 +391,7 @@ bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler) for (i = 0; i < MAX_MON_MOVES; i++) { u32 move = gBattleResources->battleHistory->usedMoves[opposingBattler][i]; - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); if (effect == EFFECT_PROTECT && move != MOVE_ENDURE) return TRUE; if (effect == EFFECT_SEMI_INVULNERABLE && AI_IsSlower(battlerAI, opposingBattler, GetAIChosenMove(battlerAI))) @@ -520,6 +520,8 @@ bool32 IsDamageMoveUnusable(u32 battlerAtk, u32 battlerDef, u32 move, u32 moveTy if (!gDisableStructs[battlerAtk].isFirstTurn) return TRUE; break; + default: + break; } return FALSE; @@ -571,7 +573,7 @@ static inline void AI_RestoreBattlerTypes(u32 battlerAtk, u32 *types) static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCalcData, u16 *medianDamage, u16 *minimumDamage, u16 *maximumDamage, enum ItemHoldEffect holdEffectAtk, u32 abilityAtk) { u32 move = damageCalcData->move; - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); u16 median = *medianDamage; u16 minimum = *minimumDamage; u16 maximum = *maximumDamage; @@ -626,6 +628,8 @@ static inline void CalcDynamicMoveDamage(struct DamageCalculationData *damageCal gBattleStruct->beatUpSlot = 0; } break; + default: + break; } // Handle other multi-strike moves @@ -687,7 +691,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u { struct SimulatedDamage simDamage; s32 moveType; - u32 moveEffect = GetMoveEffect(move); + enum BattleMoveEffects moveEffect = GetMoveEffect(move); uq4_12_t effectivenessMultiplier; bool32 isDamageMoveUnusable = FALSE; bool32 toggledGimmick = FALSE; @@ -846,6 +850,8 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 if(noOfHitsToKo == 1) return TRUE; break; + default: + break; } // check ADDITIONAL_EFFECTS @@ -1176,7 +1182,7 @@ s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler, u32 moveConsidered) static bool32 CanEndureHit(u32 battler, u32 battlerTarget, u32 move) { - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); if (!AI_BattlerAtMaxHp(battlerTarget) || effect == EFFECT_MULTI_HIT) return FALSE; if (GetMoveStrikeCount(move) > 1 && !(effect == EFFECT_DRAGON_DARTS && IsValidDoubleBattle(battlerTarget))) @@ -1475,7 +1481,7 @@ u32 AI_GetWeather(void) return gBattleWeather; } -bool32 IsAromaVeilProtectedEffect(u32 moveEffect) +bool32 IsAromaVeilProtectedEffect(enum BattleMoveEffects moveEffect) { switch (moveEffect) { @@ -1491,7 +1497,7 @@ bool32 IsAromaVeilProtectedEffect(u32 moveEffect) } } -bool32 IsNonVolatileStatusMoveEffect(u32 moveEffect) +bool32 IsNonVolatileStatusMoveEffect(enum BattleMoveEffects moveEffect) { switch (moveEffect) { @@ -1507,7 +1513,7 @@ bool32 IsNonVolatileStatusMoveEffect(u32 moveEffect) } } -bool32 IsConfusionMoveEffect(u32 moveEffect) +bool32 IsConfusionMoveEffect(enum BattleMoveEffects moveEffect) { switch (moveEffect) { @@ -1580,7 +1586,7 @@ bool32 IsMoveRedirectionPrevented(u32 battlerAtk, u32 move, u32 atkAbility) if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_NEGATE_UNAWARE) return FALSE; - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); if (effect == EFFECT_SKY_DROP || effect == EFFECT_SNIPE_SHOT || atkAbility == ABILITY_PROPELLER_TAIL @@ -1620,7 +1626,7 @@ bool32 IsMoveEncouragedToHit(u32 battlerAtk, u32 battlerDef, u32 move) if (AI_DATA->abilities[battlerDef] == ABILITY_NO_GUARD || AI_DATA->abilities[battlerAtk] == ABILITY_NO_GUARD) return TRUE; - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); if (B_TOXIC_NEVER_MISS >= GEN_6 && effect == EFFECT_TOXIC && IS_BATTLER_OF_TYPE(battlerAtk, TYPE_POISON)) return TRUE; @@ -2129,7 +2135,7 @@ bool32 HasMoveWithType(u32 battler, u32 type) return FALSE; } -bool32 HasMoveEffect(u32 battlerId, u32 effect) +bool32 HasMoveEffect(u32 battlerId, enum BattleMoveEffects effect) { s32 i; u16 *moves = GetMovesArray(battlerId); @@ -2144,7 +2150,7 @@ bool32 HasMoveEffect(u32 battlerId, u32 effect) return FALSE; } -bool32 IsPowerBasedOnStatus(u32 battlerId, u32 effect, u32 argument) +bool32 IsPowerBasedOnStatus(u32 battlerId, enum BattleMoveEffects effect, u32 argument) { s32 i; u16 *moves = GetMovesArray(battlerId); @@ -2190,7 +2196,7 @@ bool32 HasMoveWithCriticalHitChance(u32 battlerId) return FALSE; } -bool32 HasMoveWithMoveEffectExcept(u32 battlerId, u32 moveEffect, u32 exception) +bool32 HasMoveWithMoveEffectExcept(u32 battlerId, u32 moveEffect, enum BattleMoveEffects exception) { s32 i; u16 *moves = GetMovesArray(battlerId); @@ -2351,7 +2357,7 @@ bool32 HasThawingMove(u32 battler) return FALSE; } -bool32 IsUngroundingEffect(u32 effect) +bool32 IsUngroundingEffect(enum BattleMoveEffects effect) { switch (effect) { @@ -2363,7 +2369,7 @@ bool32 IsUngroundingEffect(u32 effect) } // for anger point -bool32 IsAttackBoostMoveEffect(u32 effect) +bool32 IsAttackBoostMoveEffect(enum BattleMoveEffects effect) { switch (effect) { @@ -2383,7 +2389,7 @@ bool32 IsAttackBoostMoveEffect(u32 effect) } } -bool32 IsStatRaisingEffect(u32 effect) +bool32 IsStatRaisingEffect(enum BattleMoveEffects effect) { switch (effect) { @@ -2428,7 +2434,7 @@ bool32 IsStatRaisingEffect(u32 effect) } } -bool32 IsStatLoweringEffect(u32 effect) +bool32 IsStatLoweringEffect(enum BattleMoveEffects effect) { // ignore other potentially-beneficial effects like defog, gravity switch (effect) @@ -2457,7 +2463,7 @@ bool32 IsStatLoweringEffect(u32 effect) } } -bool32 IsSelfStatLoweringEffect(u32 effect) +bool32 IsSelfStatLoweringEffect(enum BattleMoveEffects effect) { // Self stat lowering moves like Overheart, Superpower etc. switch (effect) @@ -2485,7 +2491,7 @@ bool32 IsSelfStatLoweringEffect(u32 effect) } } -bool32 IsSwitchOutEffect(u32 effect) +bool32 IsSwitchOutEffect(enum BattleMoveEffects effect) { // Switch out effects like U-Turn, Volt Switch, etc. switch (effect) @@ -2504,7 +2510,7 @@ bool32 IsSwitchOutEffect(u32 effect) } } -bool32 IsSubstituteEffect(u32 effect) +bool32 IsSubstituteEffect(enum BattleMoveEffects effect) { // Substitute effects like Substitute, Shed Tail, etc. switch (effect) @@ -2517,7 +2523,7 @@ bool32 IsSubstituteEffect(u32 effect) } } -bool32 IsChaseEffect(u32 effect) +bool32 IsChaseEffect(enum BattleMoveEffects effect) { // Effects that hit switching out mons like Pursuit switch (effect) @@ -2531,7 +2537,8 @@ bool32 IsChaseEffect(u32 effect) static inline bool32 IsMoveSleepClauseTrigger(u32 move) { - u32 i, effect = GetMoveEffect(move); + u32 i; + enum BattleMoveEffects effect = GetMoveEffect(move); // Sleeping effects like Sleep Powder, Yawn, Dark Void, etc. switch (effect) @@ -2540,6 +2547,8 @@ static inline bool32 IsMoveSleepClauseTrigger(u32 move) case EFFECT_YAWN: case EFFECT_DARK_VOID: return TRUE; + default: + break; } // Sleeping effects like G-Max Befuddle, G-Max Snooze, etc. @@ -3511,7 +3520,7 @@ bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent, return FALSE; } -bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, u32 moveEffect) +bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects moveEffect) { u32 atkSide = GetBattlerSide(battlerAtk); @@ -3540,6 +3549,8 @@ bool32 ShouldSetScreen(u32 battlerAtk, u32 battlerDef, u32 moveEffect) && !(gSideStatuses[atkSide] & SIDE_STATUS_LIGHTSCREEN)) return TRUE; break; + default: + break; } return FALSE; @@ -3599,7 +3610,7 @@ bool32 PartnerMoveEffectIsStatusSameTarget(u32 battlerAtkPartner, u32 battlerDef if (!IsDoubleBattle()) return FALSE; - u32 partnerEffect = GetMoveEffect(partnerMove); + enum BattleMoveEffects partnerEffect = GetMoveEffect(partnerMove); if (partnerMove != MOVE_NONE && gBattleStruct->moveTarget[battlerAtkPartner] == battlerDef && (partnerEffect == EFFECT_SLEEP @@ -3614,7 +3625,7 @@ bool32 PartnerMoveEffectIsStatusSameTarget(u32 battlerAtkPartner, u32 battlerDef bool32 IsMoveEffectWeather(u32 move) { - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); if (move != MOVE_NONE && (effect == EFFECT_SUNNY_DAY || effect == EFFECT_RAIN_DANCE @@ -3632,7 +3643,7 @@ bool32 PartnerMoveEffectIsTerrain(u32 battlerAtkPartner, u32 partnerMove) if (!IsDoubleBattle()) return FALSE; - u32 partnerEffect = GetMoveEffect(partnerMove); + enum BattleMoveEffects partnerEffect = GetMoveEffect(partnerMove); if (partnerMove != MOVE_NONE && (partnerEffect == EFFECT_GRASSY_TERRAIN || partnerEffect == EFFECT_MISTY_TERRAIN @@ -3644,7 +3655,7 @@ bool32 PartnerMoveEffectIsTerrain(u32 battlerAtkPartner, u32 partnerMove) } //PARTNER_MOVE_EFFECT_IS -bool32 PartnerMoveEffectIs(u32 battlerAtkPartner, u32 partnerMove, u32 effectCheck) +bool32 PartnerMoveEffectIs(u32 battlerAtkPartner, u32 partnerMove, enum BattleMoveEffects effectCheck) { if (!IsDoubleBattle()) return FALSE; @@ -3735,6 +3746,9 @@ bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_HEAL_BELL: if (hasStatus) return TRUE; + break; + default: + break; } } else @@ -3746,6 +3760,9 @@ bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move) case EFFECT_HEAL_BELL: if (hasStatus) return TRUE; + break; + default: + break; } } @@ -4420,6 +4437,8 @@ bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, st case EFFECT_STOCKPILE: if (!preventsStatLoss) return FALSE; + default: + break; } return (preventsStatLoss @@ -4429,7 +4448,7 @@ bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, st u32 IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move) { - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); u32 scoreIncrease = 0; if (effect == EFFECT_SUBSTITUTE) // Substitute specific { diff --git a/src/battle_arena.c b/src/battle_arena.c index a4d13bdb10..236a364f49 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -362,7 +362,7 @@ void BattleArena_AddMindPoints(u8 battler) // - Fake Out subtracts 1 point // All status moves give 0 points, with the following exceptions: // - Protect, Detect, and Endure subtract 1 point - u32 effect = GetMoveEffect(gCurrentMove); + enum BattleMoveEffects effect = GetMoveEffect(gCurrentMove); if (effect == EFFECT_FIRST_TURN_ONLY || effect == EFFECT_PROTECT diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index cd69f2ab1a..2a24e69f5f 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1740,7 +1740,7 @@ static void MoveSelectionDisplayMoveType(u32 battler) txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); u32 move = moveInfo->moves[gMoveSelectionCursor[battler]]; u32 type = GetMoveType(move); - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); if (effect == EFFECT_TERA_BLAST) { diff --git a/src/battle_dome.c b/src/battle_dome.c index d374843573..38a37b9cf1 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -3901,7 +3901,7 @@ static bool32 IsDomeHealingMove(u32 move) } } -static bool32 IsDomeDefensiveMoveEffect(u32 effect) +static bool32 IsDomeDefensiveMoveEffect(enum BattleMoveEffects effect) { switch(effect) { @@ -3933,7 +3933,7 @@ static bool32 IsDomeDefensiveMoveEffect(u32 effect) } } -static bool32 IsDomeRiskyMoveEffect(u32 effect) +static bool32 IsDomeRiskyMoveEffect(enum BattleMoveEffects effect) { switch(effect) { @@ -4044,7 +4044,7 @@ static bool32 IsDomeRareMove(u32 move) return TRUE; } -static bool32 IsDomeComboMoveEffect(u32 effect) +static bool32 IsDomeComboMoveEffect(enum BattleMoveEffects effect) { switch(effect) { @@ -4301,7 +4301,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) move = gSaveBlock2Ptr->frontier.domePlayerPartyData[i].moves[j]; else move = gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].moves[j]; - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); u32 accuracy = GetMoveAccuracy(move); switch (k) diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index 07efc111a5..8328a70dc1 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -243,6 +243,8 @@ bool32 IsMoveBlockedByDynamax(u32 move) case EFFECT_HEAT_CRASH: case EFFECT_LOW_KICK: return TRUE; + default: + break; } return FALSE; } @@ -426,6 +428,8 @@ static u32 GetMaxPowerTier(u32 move) default: case 21 ... 25: return MAX_POWER_TIER_5; } + default: + break; } switch (GetMovePower(move)) diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index d70390e926..acf940a4ff 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -1059,7 +1059,7 @@ void LoadBattleMonGfxAndAnimate(u8 battler, bool8 loadMonSprite, u8 spriteId) void TrySetBehindSubstituteSpriteBit(u8 battler, u16 move) { - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); if (effect == EFFECT_SUBSTITUTE || effect == EFFECT_SHED_TAIL) gBattleSpritesDataPtr->battlerData[battler].behindSubstitute = 1; } diff --git a/src/battle_main.c b/src/battle_main.c index 21d74e3a34..2d3abd2470 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3097,7 +3097,7 @@ static void BattleStartClearSetData(void) void SwitchInClearSetData(u32 battler) { s32 i; - u32 effect = GetMoveEffect(gCurrentMove); + enum BattleMoveEffects effect = GetMoveEffect(gCurrentMove); struct DisableStruct disableStructCopy = gDisableStructs[battler]; ClearIllusionMon(battler); @@ -5221,6 +5221,8 @@ static bool32 TryDoMoveEffectsBeforeMoves(void) case EFFECT_SHELL_TRAP: BattleScriptExecute(BattleScript_ShellTrapSetUp); return TRUE; + default: + break; } } } @@ -5798,6 +5800,8 @@ bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility) case EFFECT_REVELATION_DANCE: case EFFECT_TERRAIN_PULSE: return FALSE; + default: + break; } ateType = TYPE_NONE; @@ -5834,7 +5838,7 @@ bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility) u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) { u32 moveType = GetMoveType(move); - u32 moveEffect = GetMoveEffect(move); + enum BattleMoveEffects moveEffect = GetMoveEffect(move); u32 species, heldItem, ability, type1, type2, type3; bool32 monInBattle = gMain.inBattle && gPartyMenu.menuType != PARTY_MENU_TYPE_IN_BATTLE; enum ItemHoldEffect holdEffect; @@ -6027,6 +6031,8 @@ u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) if (species == SPECIES_TERAPAGOS_STELLAR) return TYPE_STELLAR; break; + default: + break; } if (IsSoundMove(move) && ability == ABILITY_LIQUID_VOICE) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9b489b4dc9..b958e4e6bc 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -332,7 +332,7 @@ static void DrawLevelUpBannerText(void); static void SpriteCB_MonIconOnLvlUpBanner(struct Sprite *sprite); static bool32 CriticalCapture(u32 odds); static void BestowItem(u32 battlerAtk, u32 battlerDef); -static bool8 IsFinalStrikeEffect(u32 moveEffect); +static bool8 IsFinalStrikeEffect(enum BattleMoveEffects moveEffect); static void TryUpdateRoundTurnOrder(void); static bool32 ChangeOrderTargetAfterAttacker(void); static bool32 SetTargetToNextPursuiter(u32 battlerDef); @@ -1248,7 +1248,7 @@ static void Cmd_attackcanceler(void) return; } - u32 effect = GetMoveEffect(gCurrentMove); + enum BattleMoveEffects effect = GetMoveEffect(gCurrentMove); if (!IsBattlerAlive(gBattlerAttacker) && effect != EFFECT_EXPLOSION && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) { @@ -1491,9 +1491,9 @@ static bool32 JumpIfMoveAffectedByProtect(u32 move, u32 battler, u32 shouldJump) static bool32 AccuracyCalcHelper(u32 move, u32 battler) { - u32 effect = FALSE; + bool32 effect = FALSE; u32 ability = ABILITY_NONE; - u32 moveEffect = GetMoveEffect(move); + enum BattleMoveEffects moveEffect = GetMoveEffect(move); if ((gStatuses3[battler] & STATUS3_ALWAYS_HITS && gDisableStructs[battler].battlerWithSureHit == gBattlerAttacker) || (B_TOXIC_NEVER_MISS >= GEN_6 && moveEffect == EFFECT_TOXIC && IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_POISON)) @@ -1697,7 +1697,7 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u if (move == ACC_CURR_MOVE) move = gCurrentMove; - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); enum ItemHoldEffect holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); @@ -2169,7 +2169,7 @@ static void Cmd_adjustdamage(void) u32 rand = Random() % 100; u32 affectionScore = GetBattlerAffectionHearts(gBattlerTarget); u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); - u32 moveEffect = GetMoveEffect(gCurrentMove); + enum BattleMoveEffects moveEffect = GetMoveEffect(gCurrentMove); bool32 calcSpreadMoveDamage = IsSpreadMove(moveTarget) && !IsBattleMoveStatus(gCurrentMove); bool32 enduredHit = FALSE; @@ -2704,7 +2704,7 @@ static void Cmd_datahpupdate(void) gBattleMons[battler].hp = 0; } - u32 effect = GetMoveEffect(gCurrentMove); + enum BattleMoveEffects effect = GetMoveEffect(gCurrentMove); // Note: While physicalDmg/specialDmg below are only distinguished between for Counter/Mirror Coat, they are // used in combination as general damage trackers for other purposes. specialDmg is additionally used @@ -6281,7 +6281,7 @@ static inline bool32 IsProtectEffectAffected(u32 battler, u32 move) return FALSE; } -static inline bool32 CanEjectButtonTrigger(u32 battlerAtk, u32 battlerDef, u32 moveEffect) +static inline bool32 CanEjectButtonTrigger(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects moveEffect) { if (GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_EJECT_BUTTON && battlerAtk != battlerDef @@ -6294,7 +6294,7 @@ static inline bool32 CanEjectButtonTrigger(u32 battlerAtk, u32 battlerDef, u32 m return FALSE; } -static inline bool32 CanEjectPackTrigger(u32 battlerAtk, u32 battlerDef, u32 moveEffect) +static inline bool32 CanEjectPackTrigger(u32 battlerAtk, u32 battlerDef, enum BattleMoveEffects moveEffect) { if (gProtectStructs[battlerDef].statFell && GetBattlerHoldEffect(battlerDef, TRUE) == HOLD_EFFECT_EJECT_PACK @@ -6310,7 +6310,7 @@ static inline bool32 CanEjectPackTrigger(u32 battlerAtk, u32 battlerDef, u32 mov static bool32 HandleMoveEndAbilityBlock(u32 battlerAtk, u32 battlerDef, u32 move) { - u32 effect = FALSE; + bool32 effect = FALSE; u32 abilityAtk = GetBattlerAbility(battlerAtk); switch (abilityAtk) @@ -6457,7 +6457,7 @@ static void Cmd_moveend(void) holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); moveType = GetBattleMoveType(gCurrentMove); - u32 moveEffect = GetMoveEffect(gCurrentMove); + enum BattleMoveEffects moveEffect = GetMoveEffect(gCurrentMove); do { @@ -7052,7 +7052,7 @@ static void Cmd_moveend(void) gBattleStruct->dynamax.lastUsedBaseMove = gBattleStruct->dynamax.baseMoves[gBattlerAttacker]; } } - u32 originalEffect = GetMoveEffect(originallyUsedMove); + enum BattleMoveEffects originalEffect = GetMoveEffect(originallyUsedMove); if (!(gAbsentBattlerFlags & (1u << gBattlerAttacker)) && !gBattleStruct->battlerState[gBattlerAttacker].absent && originalEffect != EFFECT_BATON_PASS && originalEffect != EFFECT_HEALING_WISH) @@ -11864,7 +11864,7 @@ static void Cmd_various(void) static void TryResetProtectUseCounter(u32 battler) { u32 lastMove = gLastResultingMoves[battler]; - u32 lastEffect = GetMoveEffect(lastMove); + enum BattleMoveEffects lastEffect = GetMoveEffect(lastMove); if (lastMove == MOVE_UNAVAILABLE || (!gBattleMoveEffects[lastEffect].usesProtectCounter && ((B_ALLY_SWITCH_FAIL_CHANCE >= GEN_9 && lastEffect != EFFECT_ALLY_SWITCH) @@ -13325,7 +13325,7 @@ static void Cmd_setfocusenergy(void) { CMD_ARGS(u8 battler); u8 battler = GetBattlerForBattleScript(cmd->battler); - u32 effect = GetMoveEffect(gCurrentMove); + enum BattleMoveEffects effect = GetMoveEffect(gCurrentMove); if ((effect == EFFECT_DRAGON_CHEER && (!(IsDoubleBattle()) || (gAbsentBattlerFlags & (1u << battler)))) || gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY) @@ -16956,7 +16956,7 @@ bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler) return FALSE; } -static bool8 IsFinalStrikeEffect(u32 moveEffect) +static bool8 IsFinalStrikeEffect(enum BattleMoveEffects moveEffect) { u32 i; @@ -17488,6 +17488,8 @@ void BS_SetRemoveTerrain(void) break; } break; + default: + break; } if (gFieldStatuses & statusFlag || statusFlag == 0) diff --git a/src/battle_util.c b/src/battle_util.c index c6235497f5..fd4be3c118 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -273,7 +273,7 @@ static bool32 ShouldTeraShellDistortTypeMatchups(u32 move, u32 battlerDef, u32 a bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move) { u32 ability = GetBattlerAbility(battlerAtk); - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); if (gSideTimers[defSide].followmeTimer == 0 || !IsBattlerAlive(gSideTimers[defSide].followmeTarget) @@ -295,7 +295,7 @@ bool32 HandleMoveTargetRedirection(void) u32 redirectorOrderNum = MAX_BATTLERS_COUNT; u16 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove); u32 moveType = GetBattleMoveType(gCurrentMove); - u32 moveEffect = GetMoveEffect(gCurrentMove); + enum BattleMoveEffects moveEffect = GetMoveEffect(gCurrentMove); u32 side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); u32 ability = GetBattlerAbility(gBattleStruct->moveTarget[gBattlerAttacker]); @@ -1283,7 +1283,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) u32 move = gBattleMons[battler].moves[moveId]; enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, TRUE); u16 *choicedMove = &gBattleStruct->choicedMove[battler]; - u32 moveEffect = GetMoveEffect(move); + enum BattleMoveEffects moveEffect = GetMoveEffect(move); if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(battler) != GIMMICK_Z_MOVE && gDisableStructs[battler].disabledMove == move && move != MOVE_NONE) { @@ -1523,7 +1523,8 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler) u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check) { - u32 move, moveEffect; + u32 move; + enum BattleMoveEffects moveEffect; enum ItemHoldEffect holdEffect = GetBattlerHoldEffect(battler, TRUE); u16 *choicedMove = &gBattleStruct->choicedMove[battler]; s32 i; @@ -1908,7 +1909,7 @@ static void CancellerAsleep(u32 *effect) gBattleMons[gBattlerAttacker].status1 -= toSub; if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) { - u32 moveEffect = GetMoveEffect(gChosenMove); + enum BattleMoveEffects moveEffect = GetMoveEffect(gChosenMove); if (moveEffect != EFFECT_SNORE && moveEffect != EFFECT_SLEEP_TALK) { gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep; @@ -7391,7 +7392,7 @@ u8 GetAttackerObedienceForAction() // is not obedient if (gCurrentMove == MOVE_RAGE) gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_RAGE; - u32 moveEffect = GetMoveEffect(gCurrentMove); + enum BattleMoveEffects moveEffect = GetMoveEffect(gCurrentMove); if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (moveEffect == EFFECT_SNORE || moveEffect == EFFECT_SLEEP_TALK)) return DISOBEYS_WHILE_ASLEEP; @@ -8068,6 +8069,8 @@ static inline u32 CalcMoveBasePower(struct DamageCalculationData *damageCalcData case EFFECT_LAST_RESPECTS: basePower += (basePower * min(100, GetBattlerSideFaintCounter(battlerAtk))); break; + default: + break; } // Move-specific base power changes @@ -8093,7 +8096,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(struct DamageCalculationData * u32 battlerDef = damageCalcData->battlerDef; u32 move = damageCalcData->move; u32 moveType = damageCalcData->moveType; - u32 moveEffect = GetMoveEffect(move); + enum BattleMoveEffects moveEffect = GetMoveEffect(move); uq4_12_t holdEffectModifier; uq4_12_t modifier = UQ_4_12(1.0); @@ -8133,6 +8136,8 @@ static inline u32 CalcMoveBasePowerAfterModifiers(struct DamageCalculationData * && CanBattlerGetOrLoseItem(battlerDef, gBattleMons[battlerDef].item)) modifier = uq4_12_multiply(modifier, UQ_4_12(1.5)); break; + default: + break; } // various effects @@ -8431,7 +8436,7 @@ static inline u32 CalcAttackStat(struct DamageCalculationData *damageCalcData, u u32 battlerDef = damageCalcData->battlerDef; u32 move = damageCalcData->move; u32 moveType = damageCalcData->moveType; - u32 moveEffect = GetMoveEffect(move); + enum BattleMoveEffects moveEffect = GetMoveEffect(move); atkBaseSpeciesId = GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species); @@ -8714,7 +8719,7 @@ static inline u32 CalcDefenseStat(struct DamageCalculationData *damageCalcData, u32 battlerDef = damageCalcData->battlerDef; u32 move = damageCalcData->move; u32 moveType = damageCalcData->moveType; - u32 moveEffect = GetMoveEffect(move); + enum BattleMoveEffects moveEffect = GetMoveEffect(move); if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM) // the defense stats are swapped { @@ -8930,7 +8935,7 @@ static inline uq4_12_t GetBurnOrFrostBiteModifier(struct DamageCalculationData * { u32 battlerAtk = damageCalcData->battlerAtk; u32 move = damageCalcData->move; - u32 moveEffect = GetMoveEffect(move); + enum BattleMoveEffects moveEffect = GetMoveEffect(move); if (gBattleMons[battlerAtk].status1 & STATUS1_BURN && IsBattleMovePhysical(move) @@ -10619,7 +10624,7 @@ u32 GetBattlerMoveTargetType(u32 battler, u32 move) { if (move == MOVE_CURSE && !IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return MOVE_TARGET_USER; - u32 effect = GetMoveEffect(move); + enum BattleMoveEffects effect = GetMoveEffect(move); if (effect == EFFECT_EXPANDING_FORCE && IsBattlerTerrainAffected(battler, STATUS_FIELD_PSYCHIC_TERRAIN)) return MOVE_TARGET_BOTH; if (effect == EFFECT_TERA_STARSTORM && gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR) diff --git a/test/battle/ability/sheer_force.c b/test/battle/ability/sheer_force.c index 7624dee9cb..411b590ceb 100644 --- a/test/battle/ability/sheer_force.c +++ b/test/battle/ability/sheer_force.c @@ -670,6 +670,8 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } break; + default: + break; } } SCENE { if (GetMoveEffect(move) != EFFECT_FUTURE_SIGHT) @@ -748,6 +750,8 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } break; + default: + break; } } SCENE { if (GetMoveEffect(move) != EFFECT_FUTURE_SIGHT) @@ -826,6 +830,8 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } break; + default: + break; } } SCENE { if (GetMoveEffect(move) != EFFECT_FUTURE_SIGHT) @@ -906,6 +912,8 @@ DOUBLE_BATTLE_TEST("Sheer Force only boosts the damage of moves it's supposed to TURN { MOVE(opponentRight, MOVE_WATER_GUN, target: playerLeft); MOVE(playerRight, MOVE_WATER_GUN, target: opponentLeft); SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } TURN { SKIP_TURN(playerLeft); SKIP_TURN(opponentLeft); } break; + default: + break; } } SCENE { if (GetMoveEffect(move) != EFFECT_FUTURE_SIGHT)