Adds move effect type checking (#6618)

This commit is contained in:
Bassoonian 2025-04-16 00:08:57 +02:00 committed by GitHub
parent 512368fd03
commit cca969b04d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 161 additions and 91 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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