Adds move effect type checking (#6618)
This commit is contained in:
parent
512368fd03
commit
cca969b04d
@ -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);
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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];
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user