optimize battle util and item functions by setting u32 variables

This commit is contained in:
DizzyEggg 2023-09-13 00:02:26 +02:00
parent 44bd830d2a
commit 9778587935
5 changed files with 211 additions and 204 deletions

View File

@ -65,7 +65,6 @@ s8 GetMovePriority(u32 battlerId, u16 move);
u8 GetWhoStrikesFirst(u8 battlerId1, u8 battlerId2, bool8 ignoreChosenMoves); u8 GetWhoStrikesFirst(u8 battlerId1, u8 battlerId2, bool8 ignoreChosenMoves);
void RunBattleScriptCommands_PopCallbacksStack(void); void RunBattleScriptCommands_PopCallbacksStack(void);
void RunBattleScriptCommands(void); void RunBattleScriptCommands(void);
bool8 TryRunFromBattle(u8 battlerId);
void SpecialStatusesClear(void); void SpecialStatusesClear(void);
void SetTypeBeforeUsingMove(u16 move, u32 battlerAtk); void SetTypeBeforeUsingMove(u16 move, u32 battlerAtk);
bool32 IsWildMonSmart(void); bool32 IsWildMonSmart(void);

View File

@ -101,6 +101,7 @@ bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move);
void HandleAction_UseMove(void); void HandleAction_UseMove(void);
void HandleAction_Switch(void); void HandleAction_Switch(void);
void HandleAction_UseItem(void); void HandleAction_UseItem(void);
bool32 TryRunFromBattle(u32 battler);
void HandleAction_Run(void); void HandleAction_Run(void);
void HandleAction_WatchesCarefully(void); void HandleAction_WatchesCarefully(void);
void HandleAction_SafariZoneBallThrow(void); void HandleAction_SafariZoneBallThrow(void);
@ -115,59 +116,59 @@ u8 GetBattlerForBattleScript(u8 caseId);
void PressurePPLose(u8 target, u8 attacker, u16 move); void PressurePPLose(u8 target, u8 attacker, u16 move);
void PressurePPLoseOnUsingPerishSong(u8 attacker); void PressurePPLoseOnUsingPerishSong(u8 attacker);
void PressurePPLoseOnUsingImprison(u8 attacker); void PressurePPLoseOnUsingImprison(u8 attacker);
bool32 IsBattlerMarkedForControllerExec(u8 battler); bool32 IsBattlerMarkedForControllerExec(u32 battler);
void MarkBattlerForControllerExec(u8 battler); void MarkBattlerForControllerExec(u32 battler);
void MarkBattlerReceivedLinkData(u8 battler); void MarkBattlerReceivedLinkData(u32 battler);
void CancelMultiTurnMoves(u8 battler); void CancelMultiTurnMoves(u32 battler);
bool8 WasUnableToUseMove(u8 battler); bool32 WasUnableToUseMove(u32 battler);
void PrepareStringBattle(u16 stringId, u8 battler); void PrepareStringBattle(u16 stringId, u32 battler);
void ResetSentPokesToOpponentValue(void); void ResetSentPokesToOpponentValue(void);
void OpponentSwitchInResetSentPokesToOpponentValue(u8 battler); void OpponentSwitchInResetSentPokesToOpponentValue(u32 battler);
void UpdateSentPokesToOpponentValue(u8 battler); void UpdateSentPokesToOpponentValue(u32 battler);
void BattleScriptPush(const u8 *bsPtr); void BattleScriptPush(const u8 *bsPtr);
void BattleScriptPushCursor(void); void BattleScriptPushCursor(void);
void BattleScriptPop(void); void BattleScriptPop(void);
u32 TrySetCantSelectMoveBattleScript(u32 battler); u32 TrySetCantSelectMoveBattleScript(u32 battler);
u8 CheckMoveLimitations(u8 battler, u8 unusableMoves, u16 check); u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check);
bool32 AreAllMovesUnusable(u32 battler); bool32 AreAllMovesUnusable(u32 battler);
u8 GetImprisonedMovesCount(u8 battler, u16 move); u8 GetImprisonedMovesCount(u32 battler, u16 move);
u8 DoFieldEndTurnEffects(void); u8 DoFieldEndTurnEffects(void);
s32 GetDrainedBigRootHp(u32 battler, s32 hp); s32 GetDrainedBigRootHp(u32 battler, s32 hp);
u8 DoBattlerEndTurnEffects(void); u8 DoBattlerEndTurnEffects(void);
bool8 HandleWishPerishSongOnTurnEnd(void); bool32 HandleWishPerishSongOnTurnEnd(void);
bool8 HandleFaintedMonActions(void); bool32 HandleFaintedMonActions(void);
void TryClearRageAndFuryCutter(void); void TryClearRageAndFuryCutter(void);
u8 AtkCanceller_UnableToUseMove(u32 moveType); u8 AtkCanceller_UnableToUseMove(u32 moveType);
void SetAtkCancellerForCalledMove(void); void SetAtkCancellerForCalledMove(void);
u8 AtkCanceller_UnableToUseMove2(void); u8 AtkCanceller_UnableToUseMove2(void);
bool8 HasNoMonsToSwitch(u8 battler, u8 r1, u8 r2); bool32 HasNoMonsToSwitch(u32 battler, u8 r1, u8 r2);
bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility); bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility);
u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 moveArg); u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg);
bool32 TryPrimalReversion(u8 battler); bool32 TryPrimalReversion(u32 battler);
bool32 IsNeutralizingGasOnField(void); bool32 IsNeutralizingGasOnField(void);
u32 GetBattlerAbility(u8 battler); u32 GetBattlerAbility(u32 battler);
u32 IsAbilityOnSide(u32 battler, u32 ability); u32 IsAbilityOnSide(u32 battler, u32 ability);
u32 IsAbilityOnOpposingSide(u32 battler, u32 ability); u32 IsAbilityOnOpposingSide(u32 battler, u32 ability);
u32 IsAbilityOnField(u32 ability); u32 IsAbilityOnField(u32 ability);
u32 IsAbilityOnFieldExcept(u32 battler, u32 ability); u32 IsAbilityOnFieldExcept(u32 battler, u32 ability);
u32 IsAbilityPreventingEscape(u32 battler); u32 IsAbilityPreventingEscape(u32 battler);
bool32 IsBattlerProtected(u8 battler, u16 move); bool32 IsBattlerProtected(u32 battler, u32 move);
bool32 CanBattlerEscape(u32 battler); // no ability check bool32 CanBattlerEscape(u32 battler); // no ability check
void BattleScriptExecute(const u8 *BS_ptr); void BattleScriptExecute(const u8 *BS_ptr);
void BattleScriptPushCursorAndCallback(const u8 *BS_ptr); void BattleScriptPushCursorAndCallback(const u8 *BS_ptr);
u8 ItemBattleEffects(u8 caseID, u8 battler, bool8 moveTurn); u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn);
void ClearFuryCutterDestinyBondGrudge(u8 battler); void ClearFuryCutterDestinyBondGrudge(u32 battler);
void HandleAction_RunBattleScript(void); void HandleAction_RunBattleScript(void);
u32 SetRandomTarget(u32 battler); u32 SetRandomTarget(u32 battler);
u32 GetMoveTarget(u16 move, u8 setTarget); u32 GetMoveTarget(u16 move, u8 setTarget);
u8 IsMonDisobedient(void); u8 IsMonDisobedient(void);
u32 GetBattlerHoldEffect(u32 battler, bool32 checkNegating); u32 GetBattlerHoldEffect(u32 battler, bool32 checkNegating);
u32 GetBattlerHoldEffectParam(u8 battler); u32 GetBattlerHoldEffectParam(u32 battler);
bool32 IsMoveMakingContact(u16 move, u32 battlerAtk); bool32 IsMoveMakingContact(u32 move, u32 battlerAtk);
bool32 IsBattlerGrounded(u8 battler); bool32 IsBattlerGrounded(u32 battler);
bool32 IsBattlerAlive(u8 battler); bool32 IsBattlerAlive(u32 battler);
u8 GetBattleMonMoveSlot(struct BattlePokemon *battleMon, u16 move); u32 GetBattleMonMoveSlot(struct BattlePokemon *battleMon, u32 move);
u32 GetBattlerWeight(u8 battler); u32 GetBattlerWeight(u32 battler);
u32 CalcRolloutBasePower(u32 battlerAtk, u32 basePower, u32 rolloutTimer); u32 CalcRolloutBasePower(u32 battlerAtk, u32 basePower, u32 rolloutTimer);
u32 CalcFuryCutterBasePower(u32 basePower, u32 furyCutterCounter); u32 CalcFuryCutterBasePower(u32 basePower, u32 furyCutterCounter);
s32 CalculateMoveDamage(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor, bool32 updateFlags); s32 CalculateMoveDamage(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, s32 fixedBasePower, bool32 isCrit, bool32 randomFactor, bool32 updateFlags);
@ -175,46 +176,46 @@ s32 CalculateMoveDamageAndEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef
uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, bool32 recordAbilities); uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, bool32 recordAbilities);
uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef); uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef);
uq4_12_t GetTypeModifier(u32 atkType, u32 defType); uq4_12_t GetTypeModifier(u32 atkType, u32 defType);
s32 GetStealthHazardDamage(u8 hazardType, u8 battler); s32 GetStealthHazardDamage(u8 hazardType, u32 battler);
s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp); s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp);
bool32 CanMegaEvolve(u8 battler); bool32 CanMegaEvolve(u32 battler);
bool32 CanUltraBurst(u8 battler); bool32 CanUltraBurst(u32 battler);
bool32 IsBattlerMegaEvolved(u8 battler); bool32 IsBattlerMegaEvolved(u32 battler);
bool32 IsBattlerPrimalReverted(u8 battler); bool32 IsBattlerPrimalReverted(u32 battler);
bool32 IsBattlerUltraBursted(u8 battler); bool32 IsBattlerUltraBursted(u32 battler);
u16 GetBattleFormChangeTargetSpecies(u8 battler, u16 method); u16 GetBattleFormChangeTargetSpecies(u32 battler, u16 method);
bool32 TryBattleFormChange(u8 battler, u16 method); bool32 TryBattleFormChange(u32 battler, u16 method);
bool32 DoBattlersShareType(u32 battler1, u32 battler2); bool32 DoBattlersShareType(u32 battler1, u32 battler2);
bool32 CanBattlerGetOrLoseItem(u8 battler, u16 itemId); bool32 CanBattlerGetOrLoseItem(u32 battler, u16 itemId);
u32 GetIllusionMonSpecies(u32 battler); u32 GetIllusionMonSpecies(u32 battler);
struct Pokemon *GetIllusionMonPtr(u32 battler); struct Pokemon *GetIllusionMonPtr(u32 battler);
void ClearIllusionMon(u32 battler); void ClearIllusionMon(u32 battler);
bool32 SetIllusionMon(struct Pokemon *mon, u32 battler); bool32 SetIllusionMon(struct Pokemon *mon, u32 battler);
bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battler); bool32 ShouldGetStatBadgeBoost(u16 flagId, u32 battler);
u8 GetBattleMoveSplit(u32 moveId); u8 GetBattleMoveSplit(u32 moveId);
bool32 CanFling(u32 battler); bool32 CanFling(u32 battler);
bool32 IsTelekinesisBannedSpecies(u16 species); bool32 IsTelekinesisBannedSpecies(u16 species);
bool32 IsHealBlockPreventingMove(u32 battler, u32 move); bool32 IsHealBlockPreventingMove(u32 battler, u32 move);
bool32 HasEnoughHpToEatBerry(u32 battler, u32 hpFraction, u32 itemId); bool32 HasEnoughHpToEatBerry(u32 battler, u32 hpFraction, u32 itemId);
bool32 IsPartnerMonFromSameTrainer(u8 battler); bool32 IsPartnerMonFromSameTrainer(u32 battler);
u8 GetSplitBasedOnStats(u8 battler); u8 GetSplitBasedOnStats(u32 battler);
bool32 TestSheerForceFlag(u8 battler, u16 move); bool32 TestSheerForceFlag(u32 battler, u16 move);
void TryRestoreHeldItems(void); void TryRestoreHeldItems(void);
bool32 CanStealItem(u8 battlerStealing, u8 battlerItem, u16 item); bool32 CanStealItem(u32 battlerStealing, u32 battlerItem, u16 item);
void TrySaveExchangedItem(u8 battler, u16 stolenItem); void TrySaveExchangedItem(u32 battler, u16 stolenItem);
bool32 IsPartnerMonFromSameTrainer(u8 battler); bool32 IsPartnerMonFromSameTrainer(u32 battler);
u8 TryHandleSeed(u8 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 execute); u8 TryHandleSeed(u32 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 execute);
bool32 IsBattlerAffectedByHazards(u8 battler, bool32 toxicSpikes); bool32 IsBattlerAffectedByHazards(u32 battler, bool32 toxicSpikes);
void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast); void SortBattlersBySpeed(u8 *battlers, bool32 slowToFast);
bool32 CompareStat(u8 battler, u8 statId, u8 cmpTo, u8 cmpKind); bool32 CompareStat(u32 battler, u8 statId, u8 cmpTo, u8 cmpKind);
bool32 TryRoomService(u8 battler); bool32 TryRoomService(u32 battler);
void BufferStatChange(u8 battler, u8 statId, u8 stringId); void BufferStatChange(u32 battler, u8 statId, u8 stringId);
bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u32 battlerDef, bool32 checkTarget); bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 checkTarget);
u16 GetUsedHeldItem(u8 battler); u16 GetUsedHeldItem(u32 battler);
bool32 IsBattlerWeatherAffected(u8 battler, u32 weatherFlags); bool32 IsBattlerWeatherAffected(u32 battler, u32 weatherFlags);
u32 GetBattlerMoveTargetType(u8 battler, u16 move); u32 GetBattlerMoveTargetType(u32 battler, u32 move);
bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move); bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move);
bool8 IsMoveAffectedByParentalBond(u16 move, u8 battler); bool32 IsMoveAffectedByParentalBond(u16 move, u32 battler);
void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon); void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon);
void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon); void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon);
void RecalcBattlerStats(u32 battler, struct Pokemon *mon); void RecalcBattlerStats(u32 battler, struct Pokemon *mon);
@ -230,21 +231,21 @@ bool32 IsGastroAcidBannedAbility(u16 ability);
bool32 IsEntrainmentBannedAbilityAttacker(u16 ability); bool32 IsEntrainmentBannedAbilityAttacker(u16 ability);
bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability); bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability);
bool32 CanSleep(u8 battler); bool32 CanSleep(u32 battler);
bool32 CanBePoisoned(u8 battlerAttacker, u8 battlerTarget); bool32 CanBePoisoned(u32 battlerAttacker, u32 battlerTarget);
bool32 CanBeBurned(u8 battler); bool32 CanBeBurned(u32 battler);
bool32 CanBeParalyzed(u8 battler); bool32 CanBeParalyzed(u32 battler);
bool32 CanBeFrozen(u8 battler); bool32 CanBeFrozen(u32 battler);
bool32 CanGetFrostbite(u8 battler); bool32 CanGetFrostbite(u32 battler);
bool32 CanBeConfused(u8 battler); bool32 CanBeConfused(u32 battler);
bool32 IsBattlerTerrainAffected(u8 battler, u32 terrainFlag); bool32 IsBattlerTerrainAffected(u32 battler, u32 terrainFlag);
u32 GetBattlerFriendshipScore(u8 battler); u32 GetBattlerFriendshipScore(u32 battler);
u32 CountBattlerStatIncreases(u8 battler, bool32 countEvasionAcc); u32 CountBattlerStatIncreases(u32 battler, bool32 countEvasionAcc);
bool32 IsMyceliumMightOnField(void); bool32 IsMyceliumMightOnField(void);
bool8 ChangeTypeBasedOnTerrain(u8 battler); bool32 ChangeTypeBasedOnTerrain(u32 battler);
void RemoveConfusionStatus(u8 battler); void RemoveConfusionStatus(u32 battler);
u8 GetBattlerGender(u8 battler); u8 GetBattlerGender(u32 battler);
bool8 AreBattlersOfOppositeGender(u8 battler1, u8 battler2); bool32 AreBattlersOfOppositeGender(u32 battler1, u32 battler2);
u32 CalcSecondaryEffectChance(u8 battler, u8 secondaryEffectChance); u32 CalcSecondaryEffectChance(u32 battler, u8 secondaryEffectChance);
#endif // GUARD_BATTLE_UTIL_H #endif // GUARD_BATTLE_UTIL_H

View File

@ -63,8 +63,8 @@ bool8 AddPyramidBagItem(u16 itemId, u16 count);
bool8 RemovePyramidBagItem(u16 itemId, u16 count); bool8 RemovePyramidBagItem(u16 itemId, u16 count);
const u8 *ItemId_GetName(u16 itemId); const u8 *ItemId_GetName(u16 itemId);
u16 ItemId_GetPrice(u16 itemId); u16 ItemId_GetPrice(u16 itemId);
u8 ItemId_GetHoldEffect(u16 itemId); u32 ItemId_GetHoldEffect(u32 itemId);
u8 ItemId_GetHoldEffectParam(u16 itemId); u32 ItemId_GetHoldEffectParam(u32 itemId);
const u8 *ItemId_GetDescription(u16 itemId); const u8 *ItemId_GetDescription(u16 itemId);
u8 ItemId_GetImportance(u16 itemId); u8 ItemId_GetImportance(u16 itemId);
u8 ItemId_GetPocket(u16 itemId); u8 ItemId_GetPocket(u16 itemId);
@ -72,7 +72,7 @@ u8 ItemId_GetType(u16 itemId);
ItemUseFunc ItemId_GetFieldFunc(u16 itemId); ItemUseFunc ItemId_GetFieldFunc(u16 itemId);
u8 ItemId_GetBattleUsage(u16 itemId); u8 ItemId_GetBattleUsage(u16 itemId);
u8 ItemId_GetSecondaryId(u16 itemId); u8 ItemId_GetSecondaryId(u16 itemId);
u8 ItemId_GetFlingPower(u16 itemId); u32 ItemId_GetFlingPower(u32 itemId);
u32 GetItemStatus1Mask(u16 itemId); u32 GetItemStatus1Mask(u16 itemId);
u32 GetItemStatus2Mask(u16 itemId); u32 GetItemStatus2Mask(u16 itemId);

View File

@ -57,14 +57,14 @@ match the ROM; this is also why sSoundMovesTable's declaration is in the middle
functions instead of at the top of the file with the other declarations. functions instead of at the top of the file with the other declarations.
*/ */
static bool32 TryRemoveScreens(u8 battler); static bool32 TryRemoveScreens(u32 battler);
static bool32 IsUnnerveAbilityOnOpposingSide(u8 battler); static bool32 IsUnnerveAbilityOnOpposingSide(u32 battler);
static u8 GetFlingPowerFromItemId(u16 itemId); static u32 GetFlingPowerFromItemId(u32 itemId);
static void SetRandomMultiHitCounter(); static void SetRandomMultiHitCounter();
static u32 GetBattlerItemHoldEffectParam(u8 battler, u16 item); static u32 GetBattlerItemHoldEffectParam(u32 battler, u32 item);
static uq4_12_t GetInverseTypeMultiplier(uq4_12_t multiplier); static uq4_12_t GetInverseTypeMultiplier(uq4_12_t multiplier);
static uq4_12_t GetSupremeOverlordModifier(u8 battler); static uq4_12_t GetSupremeOverlordModifier(u32 battler);
static bool8 CanBeInfinitelyConfused(u8 battler); static bool32 CanBeInfinitelyConfused(u32 battler);
extern const u8 *const gBattleScriptsForMoveEffects[]; extern const u8 *const gBattleScriptsForMoveEffects[];
extern const u8 *const gBattlescriptsForRunningByItem[]; extern const u8 *const gBattlescriptsForRunningByItem[];
@ -557,9 +557,9 @@ void HandleAction_UseItem(void)
gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT;
} }
bool8 TryRunFromBattle(u8 battler) bool32 TryRunFromBattle(u32 battler)
{ {
bool8 effect = FALSE; bool32 effect = FALSE;
u8 holdEffect; u8 holdEffect;
u8 pyramidMultiplier; u8 pyramidMultiplier;
u8 speedVar; u8 speedVar;
@ -864,8 +864,8 @@ void HandleAction_ActionFinished(void)
{ {
for (j = i + 1; j < gBattlersCount; j++) for (j = i + 1; j < gBattlersCount; j++)
{ {
u8 battler1 = gBattlerByTurnOrder[i]; u32 battler1 = gBattlerByTurnOrder[i];
u8 battler2 = gBattlerByTurnOrder[j]; u32 battler2 = gBattlerByTurnOrder[j];
if (gProtectStructs[battler1].quash || gProtectStructs[battler2].quash if (gProtectStructs[battler1].quash || gProtectStructs[battler2].quash
|| gProtectStructs[battler1].shellTrap || gProtectStructs[battler2].shellTrap) || gProtectStructs[battler1].shellTrap || gProtectStructs[battler2].shellTrap)
@ -1315,7 +1315,7 @@ static void MarkAllBattlersForControllerExec(void)
} }
} }
bool32 IsBattlerMarkedForControllerExec(u8 battler) bool32 IsBattlerMarkedForControllerExec(u32 battler)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_LINK) if (gBattleTypeFlags & BATTLE_TYPE_LINK)
return (gBattleControllerExecFlags & (gBitTable[battler] << 0x1C)) != 0; return (gBattleControllerExecFlags & (gBitTable[battler] << 0x1C)) != 0;
@ -1323,7 +1323,7 @@ bool32 IsBattlerMarkedForControllerExec(u8 battler)
return (gBattleControllerExecFlags & (gBitTable[battler])) != 0; return (gBattleControllerExecFlags & (gBitTable[battler])) != 0;
} }
void MarkBattlerForControllerExec(u8 battler) void MarkBattlerForControllerExec(u32 battler)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_LINK) if (gBattleTypeFlags & BATTLE_TYPE_LINK)
gBattleControllerExecFlags |= gBitTable[battler] << (32 - MAX_BATTLERS_COUNT); gBattleControllerExecFlags |= gBitTable[battler] << (32 - MAX_BATTLERS_COUNT);
@ -1331,7 +1331,7 @@ void MarkBattlerForControllerExec(u8 battler)
gBattleControllerExecFlags |= gBitTable[battler]; gBattleControllerExecFlags |= gBitTable[battler];
} }
void MarkBattlerReceivedLinkData(u8 battler) void MarkBattlerReceivedLinkData(u32 battler)
{ {
s32 i; s32 i;
@ -1341,7 +1341,7 @@ void MarkBattlerReceivedLinkData(u8 battler)
gBattleControllerExecFlags &= ~((1 << 28) << battler); gBattleControllerExecFlags &= ~((1 << 28) << battler);
} }
void CancelMultiTurnMoves(u8 battler) void CancelMultiTurnMoves(u32 battler)
{ {
u8 i; u8 i;
gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS); gBattleMons[battler].status2 &= ~(STATUS2_MULTIPLETURNS);
@ -1422,7 +1422,7 @@ void CancelMultiTurnMoves(u8 battler)
gDisableStructs[battler].furyCutterCounter = 0; gDisableStructs[battler].furyCutterCounter = 0;
} }
bool8 WasUnableToUseMove(u8 battler) bool32 WasUnableToUseMove(u32 battler)
{ {
if (gProtectStructs[battler].prlzImmobility if (gProtectStructs[battler].prlzImmobility
|| gProtectStructs[battler].usedImprisonedMove || gProtectStructs[battler].usedImprisonedMove
@ -1441,7 +1441,7 @@ bool8 WasUnableToUseMove(u8 battler)
return FALSE; return FALSE;
} }
void PrepareStringBattle(u16 stringId, u8 battler) void PrepareStringBattle(u16 stringId, u32 battler)
{ {
u32 targetSide = GetBattlerSide(gBattlerTarget); u32 targetSide = GetBattlerSide(gBattlerTarget);
u16 battlerAbility = GetBattlerAbility(battler); u16 battlerAbility = GetBattlerAbility(battler);
@ -1512,7 +1512,7 @@ void ResetSentPokesToOpponentValue(void)
gSentPokesToOpponent[(i & BIT_FLANK) >> 1] = bits; gSentPokesToOpponent[(i & BIT_FLANK) >> 1] = bits;
} }
void OpponentSwitchInResetSentPokesToOpponentValue(u8 battler) void OpponentSwitchInResetSentPokesToOpponentValue(u32 battler)
{ {
s32 i = 0; s32 i = 0;
u32 bits = 0; u32 bits = 0;
@ -1531,7 +1531,7 @@ void OpponentSwitchInResetSentPokesToOpponentValue(u8 battler)
} }
} }
void UpdateSentPokesToOpponentValue(u8 battler) void UpdateSentPokesToOpponentValue(u32 battler)
{ {
if (GetBattlerSide(battler) == B_SIDE_OPPONENT) if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
{ {
@ -1827,7 +1827,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler)
return limitations; return limitations;
} }
u8 CheckMoveLimitations(u8 battler, u8 unusableMoves, u16 check) u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check)
{ {
u8 holdEffect = GetBattlerHoldEffect(battler, TRUE); u8 holdEffect = GetBattlerHoldEffect(battler, TRUE);
u16 *choicedMove = &gBattleStruct->choicedMove[battler]; u16 *choicedMove = &gBattleStruct->choicedMove[battler];
@ -1907,11 +1907,11 @@ bool32 AreAllMovesUnusable(u32 battler)
return (unusable == ALL_MOVES_MASK); return (unusable == ALL_MOVES_MASK);
} }
u8 GetImprisonedMovesCount(u8 battler, u16 move) u8 GetImprisonedMovesCount(u32 battler, u16 move)
{ {
s32 i; s32 i;
u8 imprisonedMoves = 0; u8 imprisonedMoves = 0;
u8 battlerSide = GetBattlerSide(battler); u32 battlerSide = GetBattlerSide(battler);
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
@ -1931,7 +1931,7 @@ u8 GetImprisonedMovesCount(u8 battler, u16 move)
return imprisonedMoves; return imprisonedMoves;
} }
u32 GetBattlerFriendshipScore(u8 battler) u32 GetBattlerFriendshipScore(u32 battler)
{ {
u8 side = GetBattlerSide(battler); u8 side = GetBattlerSide(battler);
struct Pokemon *party = GetSideParty(side); struct Pokemon *party = GetSideParty(side);
@ -3100,7 +3100,7 @@ u8 DoBattlerEndTurnEffects(void)
return 0; return 0;
} }
bool8 HandleWishPerishSongOnTurnEnd(void) bool32 HandleWishPerishSongOnTurnEnd(void)
{ {
u32 battler; u32 battler;
@ -3203,7 +3203,7 @@ bool8 HandleWishPerishSongOnTurnEnd(void)
#define FAINTED_ACTIONS_MAX_CASE 8 #define FAINTED_ACTIONS_MAX_CASE 8
bool8 HandleFaintedMonActions(void) bool32 HandleFaintedMonActions(void)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
return FALSE; return FALSE;
@ -3811,7 +3811,7 @@ u8 AtkCanceller_UnableToUseMove2(void)
return effect; return effect;
} }
bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2) bool32 HasNoMonsToSwitch(u32 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2)
{ {
u32 i, side, playerId, flankId; u32 i, side, playerId, flankId;
struct Pokemon *party; struct Pokemon *party;
@ -3966,7 +3966,7 @@ static const u16 sWeatherFlagsInfo[][3] =
[ENUM_WEATHER_SNOW] = {B_WEATHER_SNOW_TEMPORARY, B_WEATHER_SNOW_PERMANENT, HOLD_EFFECT_ICY_ROCK}, [ENUM_WEATHER_SNOW] = {B_WEATHER_SNOW_TEMPORARY, B_WEATHER_SNOW_PERMANENT, HOLD_EFFECT_ICY_ROCK},
}; };
static void ShouldChangeFormInWeather(u8 battler) static void ShouldChangeFormInWeather(u32 battler)
{ {
int i; int i;
int side = GetBattlerSide(battler); int side = GetBattlerSide(battler);
@ -3981,7 +3981,7 @@ static void ShouldChangeFormInWeather(u8 battler)
} }
} }
bool32 TryChangeBattleWeather(u8 battler, u32 weatherEnumId, bool32 viaAbility) bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility)
{ {
u16 battlerAbility = GetBattlerAbility(battler); u16 battlerAbility = GetBattlerAbility(battler);
if (gBattleWeather & B_WEATHER_PRIMAL_ANY if (gBattleWeather & B_WEATHER_PRIMAL_ANY
@ -4031,10 +4031,10 @@ static bool32 TryChangeBattleTerrain(u32 battler, u32 statusFlag, u8 *timer)
return FALSE; return FALSE;
} }
static u8 ForewarnChooseMove(u32 battler) static void ForewarnChooseMove(u32 battler)
{ {
struct Forewarn { struct Forewarn {
u8 battler; u32 battler;
u8 power; u8 power;
u16 moveId; u16 moveId;
}; };
@ -4089,9 +4089,9 @@ static u8 ForewarnChooseMove(u32 battler)
Free(data); Free(data);
} }
bool8 ChangeTypeBasedOnTerrain(u8 battler) bool32 ChangeTypeBasedOnTerrain(u32 battler)
{ {
u8 battlerType; u32 battlerType;
if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
battlerType = TYPE_ELECTRIC; battlerType = TYPE_ELECTRIC;
@ -4111,12 +4111,12 @@ bool8 ChangeTypeBasedOnTerrain(u8 battler)
// Supreme Overlord adds a damage boost for each fainted ally. // Supreme Overlord adds a damage boost for each fainted ally.
// The first ally adds a x1.2 boost, and subsequent allies add an extra x0.1 boost each. // The first ally adds a x1.2 boost, and subsequent allies add an extra x0.1 boost each.
static uq4_12_t GetSupremeOverlordModifier(u8 battler) static uq4_12_t GetSupremeOverlordModifier(u32 battler)
{ {
u32 i; u32 i;
struct Pokemon *party = GetBattlerParty(battler); struct Pokemon *party = GetBattlerParty(battler);
uq4_12_t modifier = UQ_4_12(1.0); uq4_12_t modifier = UQ_4_12(1.0);
bool8 appliedFirstBoost = FALSE; bool32 appliedFirstBoost = FALSE;
for (i = 0; i < PARTY_SIZE; i++) for (i = 0; i < PARTY_SIZE; i++)
{ {
@ -4130,9 +4130,9 @@ static uq4_12_t GetSupremeOverlordModifier(u8 battler)
return modifier; return modifier;
} }
u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 moveArg) u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg)
{ {
u8 effect = 0; u32 effect = 0;
u32 speciesAtk, speciesDef; u32 speciesAtk, speciesDef;
u32 moveType, move; u32 moveType, move;
u32 i, j; u32 i, j;
@ -5376,7 +5376,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
&& IsBattlerAlive(gBattlerAttacker) && IsBattlerAlive(gBattlerAttacker)
&& IsMoveMakingContact(move, gBattlerAttacker)) && IsMoveMakingContact(move, gBattlerAttacker))
{ {
u8 battler; u32 battler;
if ((battler = IsAbilityOnField(ABILITY_DAMP))) if ((battler = IsAbilityOnField(ABILITY_DAMP)))
{ {
gBattleScripting.battler = battler - 1; gBattleScripting.battler = battler - 1;
@ -6065,7 +6065,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u16 ability, u8 special, u16 move
return effect; return effect;
} }
bool32 TryPrimalReversion(u8 battler) bool32 TryPrimalReversion(u32 battler)
{ {
if (GetBattlerHoldEffect(battler, FALSE) == HOLD_EFFECT_PRIMAL_ORB if (GetBattlerHoldEffect(battler, FALSE) == HOLD_EFFECT_PRIMAL_ORB
&& GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_PRIMAL_REVERSION) != SPECIES_NONE) && GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_PRIMAL_REVERSION) != SPECIES_NONE)
@ -6135,7 +6135,7 @@ bool32 IsMyceliumMightOnField(void)
return FALSE; return FALSE;
} }
u32 GetBattlerAbility(u8 battler) u32 GetBattlerAbility(u32 battler)
{ {
if (gStatuses3[battler] & STATUS3_GASTRO_ACID) if (gStatuses3[battler] & STATUS3_GASTRO_ACID)
return ABILITY_NONE; return ABILITY_NONE;
@ -6268,7 +6268,7 @@ enum
ITEM_STATS_CHANGE, ITEM_STATS_CHANGE,
}; };
bool32 IsBattlerTerrainAffected(u8 battler, u32 terrainFlag) bool32 IsBattlerTerrainAffected(u32 battler, u32 terrainFlag)
{ {
if (!(gFieldStatuses & terrainFlag)) if (!(gFieldStatuses & terrainFlag))
return FALSE; return FALSE;
@ -6278,7 +6278,7 @@ bool32 IsBattlerTerrainAffected(u8 battler, u32 terrainFlag)
return IsBattlerGrounded(battler); return IsBattlerGrounded(battler);
} }
bool32 CanSleep(u8 battler) bool32 CanSleep(u32 battler)
{ {
u16 ability = GetBattlerAbility(battler); u16 ability = GetBattlerAbility(battler);
if (ability == ABILITY_INSOMNIA if (ability == ABILITY_INSOMNIA
@ -6293,7 +6293,7 @@ bool32 CanSleep(u8 battler)
return TRUE; return TRUE;
} }
bool32 CanBePoisoned(u8 battlerAttacker, u8 battlerTarget) bool32 CanBePoisoned(u32 battlerAttacker, u32 battlerTarget)
{ {
u16 ability = GetBattlerAbility(battlerTarget); u16 ability = GetBattlerAbility(battlerTarget);
@ -6309,7 +6309,7 @@ bool32 CanBePoisoned(u8 battlerAttacker, u8 battlerTarget)
return TRUE; return TRUE;
} }
bool32 CanBeBurned(u8 battler) bool32 CanBeBurned(u32 battler)
{ {
u16 ability = GetBattlerAbility(battler); u16 ability = GetBattlerAbility(battler);
if (IS_BATTLER_OF_TYPE(battler, TYPE_FIRE) if (IS_BATTLER_OF_TYPE(battler, TYPE_FIRE)
@ -6325,7 +6325,7 @@ bool32 CanBeBurned(u8 battler)
return TRUE; return TRUE;
} }
bool32 CanBeParalyzed(u8 battler) bool32 CanBeParalyzed(u32 battler)
{ {
u16 ability = GetBattlerAbility(battler); u16 ability = GetBattlerAbility(battler);
if ( if (
@ -6342,7 +6342,7 @@ bool32 CanBeParalyzed(u8 battler)
return TRUE; return TRUE;
} }
bool32 CanBeFrozen(u8 battler) bool32 CanBeFrozen(u32 battler)
{ {
u16 ability = GetBattlerAbility(battler); u16 ability = GetBattlerAbility(battler);
if (IS_BATTLER_OF_TYPE(battler, TYPE_ICE) if (IS_BATTLER_OF_TYPE(battler, TYPE_ICE)
@ -6357,7 +6357,7 @@ bool32 CanBeFrozen(u8 battler)
return TRUE; return TRUE;
} }
bool32 CanGetFrostbite(u8 battler) bool32 CanGetFrostbite(u32 battler)
{ {
u16 ability = GetBattlerAbility(battler); u16 ability = GetBattlerAbility(battler);
if (IS_BATTLER_OF_TYPE(battler, TYPE_ICE) if (IS_BATTLER_OF_TYPE(battler, TYPE_ICE)
@ -6371,7 +6371,7 @@ bool32 CanGetFrostbite(u8 battler)
return TRUE; return TRUE;
} }
bool32 CanBeConfused(u8 battler) bool32 CanBeConfused(u32 battler)
{ {
if (GetBattlerAbility(battler) == ABILITY_OWN_TEMPO if (GetBattlerAbility(battler) == ABILITY_OWN_TEMPO
|| gBattleMons[battler].status2 & STATUS2_CONFUSION || gBattleMons[battler].status2 & STATUS2_CONFUSION
@ -6411,7 +6411,7 @@ bool32 HasEnoughHpToEatBerry(u32 battler, u32 hpFraction, u32 itemId)
#define CONFUSE_BERRY_HP_FRACTION 2 #define CONFUSE_BERRY_HP_FRACTION 2
#endif #endif
static u8 HealConfuseBerry(u32 battler, u32 itemId, u8 flavorId, bool32 end2) static u8 HealConfuseBerry(u32 battler, u32 itemId, u32 flavorId, bool32 end2)
{ {
if (HasEnoughHpToEatBerry(battler, CONFUSE_BERRY_HP_FRACTION, itemId) if (HasEnoughHpToEatBerry(battler, CONFUSE_BERRY_HP_FRACTION, itemId)
#if B_HEAL_BLOCKING >= GEN_5 #if B_HEAL_BLOCKING >= GEN_5
@ -6554,7 +6554,7 @@ static u8 TrySetMicleBerry(u32 battler, u32 itemId, bool32 end2)
return 0; return 0;
} }
static u8 DamagedStatBoostBerryEffect(u8 battler, u8 statId, u8 split) static u8 DamagedStatBoostBerryEffect(u32 battler, u8 statId, u8 split)
{ {
if (IsBattlerAlive(battler) if (IsBattlerAlive(battler)
&& TARGET_TURN_DAMAGED && TARGET_TURN_DAMAGED
@ -6580,7 +6580,7 @@ static u8 DamagedStatBoostBerryEffect(u8 battler, u8 statId, u8 split)
return 0; return 0;
} }
u8 TryHandleSeed(u8 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 execute) u8 TryHandleSeed(u32 battler, u32 terrainFlag, u8 statId, u16 itemId, bool32 execute)
{ {
if (gFieldStatuses & terrainFlag && CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN)) if (gFieldStatuses & terrainFlag && CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN))
{ {
@ -6643,7 +6643,7 @@ static bool32 UnnerveOn(u32 battler, u32 itemId)
return FALSE; return FALSE;
} }
static bool32 GetMentalHerbEffect(u8 battler) static bool32 GetMentalHerbEffect(u32 battler)
{ {
bool32 ret = FALSE; bool32 ret = FALSE;
@ -6698,7 +6698,7 @@ static bool32 GetMentalHerbEffect(u8 battler)
return ret; return ret;
} }
static u8 TryConsumeMirrorHerb(u8 battler, bool32 execute) static u8 TryConsumeMirrorHerb(u32 battler, bool32 execute)
{ {
u8 effect = 0; u8 effect = 0;
@ -6935,12 +6935,12 @@ static u8 ItemEffectMoveEnd(u32 battler, u16 holdEffect)
return effect; return effect;
} }
u8 ItemBattleEffects(u8 caseID, u8 battler, bool8 moveTurn) u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn)
{ {
int i = 0, moveType; int i = 0, moveType;
u8 effect = ITEM_NO_EFFECT; u8 effect = ITEM_NO_EFFECT;
u8 changedPP = 0; u8 changedPP = 0;
u8 battlerHoldEffect, atkHoldEffect; u32 battlerHoldEffect, atkHoldEffect;
u8 atkHoldEffectParam; u8 atkHoldEffectParam;
u16 atkItem; u16 atkItem;
@ -7849,7 +7849,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battler, bool8 moveTurn)
return effect; return effect;
} }
void ClearFuryCutterDestinyBondGrudge(u8 battler) void ClearFuryCutterDestinyBondGrudge(u32 battler)
{ {
gDisableStructs[battler].furyCutterCounter = 0; gDisableStructs[battler].furyCutterCounter = 0;
gBattleMons[battler].status2 &= ~STATUS2_DESTINY_BOND; gBattleMons[battler].status2 &= ~STATUS2_DESTINY_BOND;
@ -7963,7 +7963,7 @@ u32 GetMoveTarget(u16 move, u8 setTarget)
return targetBattler; return targetBattler;
} }
static bool32 IsBattlerModernFatefulEncounter(u8 battler) static bool32 IsBattlerModernFatefulEncounter(u32 battler)
{ {
if (GetBattlerSide(battler) == B_SIDE_OPPONENT) if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
return TRUE; return TRUE;
@ -8120,7 +8120,7 @@ u32 GetBattlerHoldEffect(u32 battler, bool32 checkNegating)
return ItemId_GetHoldEffect(gBattleMons[battler].item); return ItemId_GetHoldEffect(gBattleMons[battler].item);
} }
static u32 GetBattlerItemHoldEffectParam(u8 battler, u16 item) static u32 GetBattlerItemHoldEffectParam(u32 battler, u32 item)
{ {
if (item == ITEM_ENIGMA_BERRY_E_READER) if (item == ITEM_ENIGMA_BERRY_E_READER)
return gEnigmaBerries[battler].holdEffectParam; return gEnigmaBerries[battler].holdEffectParam;
@ -8128,7 +8128,7 @@ static u32 GetBattlerItemHoldEffectParam(u8 battler, u16 item)
return ItemId_GetHoldEffectParam(item); return ItemId_GetHoldEffectParam(item);
} }
u32 GetBattlerHoldEffectParam(u8 battler) u32 GetBattlerHoldEffectParam(u32 battler)
{ {
if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY_E_READER) if (gBattleMons[battler].item == ITEM_ENIGMA_BERRY_E_READER)
return gEnigmaBerries[battler].holdEffectParam; return gEnigmaBerries[battler].holdEffectParam;
@ -8136,9 +8136,9 @@ u32 GetBattlerHoldEffectParam(u8 battler)
return ItemId_GetHoldEffectParam(gBattleMons[battler].item); return ItemId_GetHoldEffectParam(gBattleMons[battler].item);
} }
bool32 IsMoveMakingContact(u16 move, u32 battlerAtk) bool32 IsMoveMakingContact(u32 move, u32 battlerAtk)
{ {
u16 atkHoldEffect = GetBattlerHoldEffect(battlerAtk, TRUE); u32 atkHoldEffect = GetBattlerHoldEffect(battlerAtk, TRUE);
if (!gBattleMoves[move].makesContact) if (!gBattleMoves[move].makesContact)
{ {
@ -8159,7 +8159,7 @@ bool32 IsMoveMakingContact(u16 move, u32 battlerAtk)
} }
} }
bool32 IsBattlerProtected(u8 battler, u16 move) bool32 IsBattlerProtected(u32 battler, u32 move)
{ {
// Decorate bypasses protect and detect, but not crafty shield // Decorate bypasses protect and detect, but not crafty shield
if (move == MOVE_DECORATE) if (move == MOVE_DECORATE)
@ -8217,7 +8217,7 @@ bool32 IsBattlerProtected(u8 battler, u16 move)
} }
// Only called directly when calculating damage type effectiveness // Only called directly when calculating damage type effectiveness
static bool32 IsBattlerGrounded2(u8 battler, bool32 considerInverse) static bool32 IsBattlerGrounded2(u32 battler, bool32 considerInverse)
{ {
if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_IRON_BALL) if (GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_IRON_BALL)
return TRUE; return TRUE;
@ -8242,12 +8242,12 @@ static bool32 IsBattlerGrounded2(u8 battler, bool32 considerInverse)
return TRUE; return TRUE;
} }
bool32 IsBattlerGrounded(u8 battler) bool32 IsBattlerGrounded(u32 battler)
{ {
IsBattlerGrounded2(battler, FALSE); IsBattlerGrounded2(battler, FALSE);
} }
bool32 IsBattlerAlive(u8 battler) bool32 IsBattlerAlive(u32 battler)
{ {
if (gBattleMons[battler].hp == 0) if (gBattleMons[battler].hp == 0)
return FALSE; return FALSE;
@ -8259,9 +8259,9 @@ bool32 IsBattlerAlive(u8 battler)
return TRUE; return TRUE;
} }
u8 GetBattleMonMoveSlot(struct BattlePokemon *battleMon, u16 move) u32 GetBattleMonMoveSlot(struct BattlePokemon *battleMon, u32 move)
{ {
u8 i; u32 i;
for (i = 0; i < MAX_MON_MOVES; i++) for (i = 0; i < MAX_MON_MOVES; i++)
{ {
@ -8271,7 +8271,7 @@ u8 GetBattleMonMoveSlot(struct BattlePokemon *battleMon, u16 move)
return i; return i;
} }
u32 GetBattlerWeight(u8 battler) u32 GetBattlerWeight(u32 battler)
{ {
u32 i; u32 i;
u32 weight = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[battler].species), 1); u32 weight = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[battler].species), 1);
@ -8305,7 +8305,7 @@ u32 GetBattlerWeight(u8 battler)
return weight; return weight;
} }
u32 CountBattlerStatIncreases(u8 battler, bool32 countEvasionAcc) u32 CountBattlerStatIncreases(u32 battler, bool32 countEvasionAcc)
{ {
u32 i; u32 i;
u32 count = 0; u32 count = 0;
@ -8321,7 +8321,7 @@ u32 CountBattlerStatIncreases(u8 battler, bool32 countEvasionAcc)
return count; return count;
} }
u32 GetMoveTargetCount(u16 move, u32 battlerAtk, u32 battlerDef) u32 GetMoveTargetCount(u32 move, u32 battlerAtk, u32 battlerDef)
{ {
switch (GetBattlerMoveTargetType(gBattlerAttacker, move)) switch (GetBattlerMoveTargetType(gBattlerAttacker, move))
{ {
@ -8460,10 +8460,10 @@ u32 CalcFuryCutterBasePower(u32 basePower, u32 furyCutterCounter)
return basePower; return basePower;
} }
static inline u16 CalcMoveBasePower(u16 move, u32 battlerAtk, u32 battlerDef, u32 abilityDef) static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u32 abilityDef, u32 weather)
{ {
u32 i; u32 i;
u16 basePower = gBattleMoves[move].power; u32 basePower = gBattleMoves[move].power;
u32 weight, hpFraction, speed; u32 weight, hpFraction, speed;
if (gBattleStruct->zmove.active) if (gBattleStruct->zmove.active)
@ -8524,7 +8524,7 @@ static inline u16 CalcMoveBasePower(u16 move, u32 battlerAtk, u32 battlerDef, u3
basePower *= 2; basePower *= 2;
break; break;
case EFFECT_WEATHER_BALL: case EFFECT_WEATHER_BALL:
if (gBattleWeather & B_WEATHER_ANY && WEATHER_HAS_EFFECT) if (weather & B_WEATHER_ANY)
basePower *= 2; basePower *= 2;
break; break;
case EFFECT_PURSUIT: case EFFECT_PURSUIT:
@ -8716,11 +8716,11 @@ static inline u16 CalcMoveBasePower(u16 move, u32 battlerAtk, u32 battlerDef, u3
return basePower; return basePower;
} }
static inline u32 CalcMoveBasePowerAfterModifiers(u16 move, u32 battlerAtk, u32 battlerDef, u8 moveType, bool32 updateFlags, u32 atkAbility, u32 defAbility, u32 holdEffectAtk) static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, bool32 updateFlags, u32 atkAbility, u32 defAbility, u32 holdEffectAtk, u32 weather)
{ {
u32 i; u32 i;
u32 holdEffectParamAtk; u32 holdEffectParamAtk;
u16 basePower = CalcMoveBasePower(move, battlerAtk, battlerDef, defAbility); u32 basePower = CalcMoveBasePower(move, battlerAtk, battlerDef, defAbility, weather);
uq4_12_t holdEffectModifier; uq4_12_t holdEffectModifier;
uq4_12_t modifier = UQ_4_12(1.0); uq4_12_t modifier = UQ_4_12(1.0);
u32 atkSide = GET_BATTLER_SIDE(battlerAtk); u32 atkSide = GET_BATTLER_SIDE(battlerAtk);
@ -8833,7 +8833,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u16 move, u32 battlerAtk, u32
break; break;
case ABILITY_SAND_FORCE: case ABILITY_SAND_FORCE:
if ((moveType == TYPE_STEEL || moveType == TYPE_ROCK || moveType == TYPE_GROUND) if ((moveType == TYPE_STEEL || moveType == TYPE_ROCK || moveType == TYPE_GROUND)
&& gBattleWeather & B_WEATHER_SANDSTORM && WEATHER_HAS_EFFECT) && weather & B_WEATHER_SANDSTORM)
modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); modifier = uq4_12_multiply(modifier, UQ_4_12(1.3));
break; break;
case ABILITY_RIVALRY: case ABILITY_RIVALRY:
@ -8913,7 +8913,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u16 move, u32 battlerAtk, u32
case ABILITY_PROTOSYNTHESIS: case ABILITY_PROTOSYNTHESIS:
{ {
u8 atkHighestStat = GetHighestStatId(battlerAtk); u8 atkHighestStat = GetHighestStatId(battlerAtk);
if (gBattleWeather & B_WEATHER_SUN && WEATHER_HAS_EFFECT if (weather & B_WEATHER_SUN
&& ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK))) && ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK)))
modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); modifier = uq4_12_multiply(modifier, UQ_4_12(1.3));
} }
@ -8927,7 +8927,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u16 move, u32 battlerAtk, u32
} }
break; break;
case ABILITY_ORICHALCUM_PULSE: case ABILITY_ORICHALCUM_PULSE:
if (gBattleWeather & B_WEATHER_SUN && WEATHER_HAS_EFFECT) if (weather & B_WEATHER_SUN)
modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); modifier = uq4_12_multiply(modifier, UQ_4_12(1.3));
break; break;
case ABILITY_HADRON_ENGINE: case ABILITY_HADRON_ENGINE:
@ -9003,7 +9003,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u16 move, u32 battlerAtk, u32
case ABILITY_PROTOSYNTHESIS: case ABILITY_PROTOSYNTHESIS:
{ {
u8 defHighestStat = GetHighestStatId(battlerDef); u8 defHighestStat = GetHighestStatId(battlerDef);
if (gBattleWeather & B_WEATHER_SUN && WEATHER_HAS_EFFECT if (weather & B_WEATHER_SUN
&& ((IS_MOVE_PHYSICAL(move) && defHighestStat == STAT_DEF) || (IS_MOVE_SPECIAL(move) && defHighestStat == STAT_SPDEF))) && ((IS_MOVE_PHYSICAL(move) && defHighestStat == STAT_DEF) || (IS_MOVE_SPECIAL(move) && defHighestStat == STAT_SPDEF)))
modifier = uq4_12_multiply(modifier, UQ_4_12(0.7)); modifier = uq4_12_multiply(modifier, UQ_4_12(0.7));
} }
@ -9096,7 +9096,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u16 move, u32 battlerAtk, u32
} }
#undef TERRAIN_TYPE_BOOST #undef TERRAIN_TYPE_BOOST
static inline u32 CalcAttackStat(u16 move, u32 battlerAtk, u32 battlerDef, u8 moveType, bool32 isCrit, bool32 updateFlags, u32 atkAbility, u32 defAbility, u32 holdEffectAtk) static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, bool32 isCrit, bool32 updateFlags, u32 atkAbility, u32 defAbility, u32 holdEffectAtk)
{ {
u8 atkStage; u8 atkStage;
u32 atkStat; u32 atkStat;
@ -9300,7 +9300,7 @@ static bool32 CanEvolve(u32 species)
return FALSE; return FALSE;
} }
static inline u32 CalcDefenseStat(u16 move, u32 battlerAtk, u32 battlerDef, u8 moveType, bool32 isCrit, bool32 updateFlags, u32 atkAbility, u32 defAbility, u32 holdEffectDef) static inline u32 CalcDefenseStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveType, bool32 isCrit, bool32 updateFlags, u32 atkAbility, u32 defAbility, u32 holdEffectDef, u32 weather)
{ {
bool32 usesDefStat; bool32 usesDefStat;
u8 defStage; u8 defStage;
@ -9432,10 +9432,10 @@ static inline u32 CalcDefenseStat(u16 move, u32 battlerAtk, u32 battlerDef, u8 m
} }
// sandstorm sp.def boost for rock types // sandstorm sp.def boost for rock types
if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && gBattleWeather & B_WEATHER_SANDSTORM && WEATHER_HAS_EFFECT && !usesDefStat) if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ROCK) && weather & B_WEATHER_SANDSTORM && !usesDefStat)
modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5));
// snow def boost for ice types // snow def boost for ice types
if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && gBattleWeather & B_WEATHER_SNOW && WEATHER_HAS_EFFECT && usesDefStat) if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE) && weather & B_WEATHER_SNOW && usesDefStat)
modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5));
// The defensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 5th badge and 7th badges. // The defensive stats of a Player's Pokémon are boosted by x1.1 (+10%) if they have the 5th badge and 7th badges.
@ -9500,22 +9500,22 @@ static inline uq4_12_t GetSameTypeAttackBonusModifier(u32 battlerAtk, u32 moveTy
} }
// Utility Umbrella holders take normal damage from what would be rain- and sun-weakened attacks. // Utility Umbrella holders take normal damage from what would be rain- and sun-weakened attacks.
static uq4_12_t GetWeatherDamageModifier(u32 battlerAtk, u32 move, u32 moveType, u32 holdEffectAtk, u32 holdEffectDef) static uq4_12_t GetWeatherDamageModifier(u32 battlerAtk, u32 move, u32 moveType, u32 holdEffectAtk, u32 holdEffectDef, u32 weather)
{ {
if (!WEATHER_HAS_EFFECT) if (weather == B_WEATHER_NONE)
return UQ_4_12(1.0); return UQ_4_12(1.0);
if (gBattleMoves[move].effect == EFFECT_HYDRO_STEAM && (gBattleWeather & B_WEATHER_SUN) && holdEffectAtk != HOLD_EFFECT_UTILITY_UMBRELLA) if (gBattleMoves[move].effect == EFFECT_HYDRO_STEAM && (weather & B_WEATHER_SUN) && holdEffectAtk != HOLD_EFFECT_UTILITY_UMBRELLA)
return UQ_4_12(1.5); return UQ_4_12(1.5);
if (holdEffectDef == HOLD_EFFECT_UTILITY_UMBRELLA) if (holdEffectDef == HOLD_EFFECT_UTILITY_UMBRELLA)
return UQ_4_12(1.0); return UQ_4_12(1.0);
if (gBattleWeather & B_WEATHER_RAIN) if (weather & B_WEATHER_RAIN)
{ {
if (moveType != TYPE_FIRE && moveType != TYPE_WATER) if (moveType != TYPE_FIRE && moveType != TYPE_WATER)
return UQ_4_12(1.0); return UQ_4_12(1.0);
return (moveType == TYPE_FIRE) ? UQ_4_12(0.5) : UQ_4_12(1.5); return (moveType == TYPE_FIRE) ? UQ_4_12(0.5) : UQ_4_12(1.5);
} }
if (gBattleWeather & B_WEATHER_SUN) if (weather & B_WEATHER_SUN)
{ {
if (moveType != TYPE_FIRE && moveType != TYPE_WATER) if (moveType != TYPE_FIRE && moveType != TYPE_WATER)
return UQ_4_12(1.0); return UQ_4_12(1.0);
@ -9762,6 +9762,7 @@ static inline s32 DoMoveDamageCalc(u32 move, u32 battlerAtk, u32 battlerDef, u32
bool32 isCrit, bool32 randomFactor, bool32 updateFlags, uq4_12_t typeEffectivenessModifier) bool32 isCrit, bool32 randomFactor, bool32 updateFlags, uq4_12_t typeEffectivenessModifier)
{ {
s32 dmg; s32 dmg;
u32 weather;
u32 userFinalAttack; u32 userFinalAttack;
u32 targetFinalDefense; u32 targetFinalDefense;
u32 holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE); u32 holdEffectAtk = GetBattlerHoldEffect(battlerAtk, TRUE);
@ -9772,18 +9773,24 @@ static inline s32 DoMoveDamageCalc(u32 move, u32 battlerAtk, u32 battlerDef, u32
if (typeEffectivenessModifier == UQ_4_12(0.0)) if (typeEffectivenessModifier == UQ_4_12(0.0))
return 0; return 0;
// Store weather in a local variable, so there's no need to call WEATHER_HAS_EFFECT every time weather is checked.
if (gBattleWeather == B_WEATHER_NONE || !WEATHER_HAS_EFFECT)
weather = B_WEATHER_NONE;
else
weather = gBattleWeather;
if (fixedBasePower) if (fixedBasePower)
gBattleMovePower = fixedBasePower; gBattleMovePower = fixedBasePower;
else else
gBattleMovePower = CalcMoveBasePowerAfterModifiers(move, battlerAtk, battlerDef, moveType, updateFlags, abilityAtk, abilityDef, holdEffectAtk); gBattleMovePower = CalcMoveBasePowerAfterModifiers(move, battlerAtk, battlerDef, moveType, updateFlags, abilityAtk, abilityDef, holdEffectAtk, weather);
userFinalAttack = CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags, abilityAtk, abilityDef, holdEffectAtk); userFinalAttack = CalcAttackStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags, abilityAtk, abilityDef, holdEffectAtk);
targetFinalDefense = CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags, abilityAtk, abilityDef, holdEffectDef); targetFinalDefense = CalcDefenseStat(move, battlerAtk, battlerDef, moveType, isCrit, updateFlags, abilityAtk, abilityDef, holdEffectDef, weather);
dmg = CalculateBaseDamage(gBattleMovePower, userFinalAttack, gBattleMons[battlerAtk].level, targetFinalDefense); dmg = CalculateBaseDamage(gBattleMovePower, userFinalAttack, gBattleMons[battlerAtk].level, targetFinalDefense);
DAMAGE_APPLY_MODIFIER(GetTargetDamageModifier(move, battlerAtk, battlerDef)); DAMAGE_APPLY_MODIFIER(GetTargetDamageModifier(move, battlerAtk, battlerDef));
DAMAGE_APPLY_MODIFIER(GetParentalBondModifier(battlerAtk)); DAMAGE_APPLY_MODIFIER(GetParentalBondModifier(battlerAtk));
DAMAGE_APPLY_MODIFIER(GetWeatherDamageModifier(battlerAtk, move, moveType, holdEffectAtk, holdEffectDef)); DAMAGE_APPLY_MODIFIER(GetWeatherDamageModifier(battlerAtk, move, moveType, holdEffectAtk, holdEffectDef, weather));
DAMAGE_APPLY_MODIFIER(GetCriticalModifier(isCrit)); DAMAGE_APPLY_MODIFIER(GetCriticalModifier(isCrit));
// TODO: Glaive Rush (Gen IX effect) // TODO: Glaive Rush (Gen IX effect)
if (randomFactor) if (randomFactor)
@ -10071,7 +10078,7 @@ s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 ma
return dmg; return dmg;
} }
s32 GetStealthHazardDamage(u8 hazardType, u8 battler) s32 GetStealthHazardDamage(u8 hazardType, u32 battler)
{ {
u8 type1 = gBattleMons[battler].type1; u8 type1 = gBattleMons[battler].type1;
u8 type2 = gBattleMons[battler].type2; u8 type2 = gBattleMons[battler].type2;
@ -10080,7 +10087,7 @@ s32 GetStealthHazardDamage(u8 hazardType, u8 battler)
return GetStealthHazardDamageByTypesAndHP(hazardType, type1, type2, maxHp); return GetStealthHazardDamageByTypesAndHP(hazardType, type1, type2, maxHp);
} }
bool32 IsPartnerMonFromSameTrainer(u8 battler) bool32 IsPartnerMonFromSameTrainer(u32 battler)
{ {
if (GetBattlerSide(battler) == B_SIDE_OPPONENT && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) if (GetBattlerSide(battler) == B_SIDE_OPPONENT && gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
return FALSE; return FALSE;
@ -10116,11 +10123,11 @@ bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId)
return FALSE; return FALSE;
} }
bool32 CanMegaEvolve(u8 battler) bool32 CanMegaEvolve(u32 battler)
{ {
u32 itemId, holdEffect, species; u32 itemId, holdEffect, species;
struct Pokemon *mon; struct Pokemon *mon;
u8 battlerPosition = GetBattlerPosition(battler); u32 battlerPosition = GetBattlerPosition(battler);
u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battler)); u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battler));
struct MegaEvolutionData *mega = &(((struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]))->mega); struct MegaEvolutionData *mega = &(((struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]))->mega);
@ -10180,11 +10187,11 @@ bool32 CanMegaEvolve(u8 battler)
return FALSE; return FALSE;
} }
bool32 CanUltraBurst(u8 battler) bool32 CanUltraBurst(u32 battler)
{ {
u32 itemId, holdEffect, species; u32 itemId, holdEffect, species;
struct Pokemon *mon; struct Pokemon *mon;
u8 battlerPosition = GetBattlerPosition(battler); u32 battlerPosition = GetBattlerPosition(battler);
u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battler)); u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battler));
// Check if Player has a Z Ring // Check if Player has a Z Ring
@ -10235,7 +10242,7 @@ bool32 CanUltraBurst(u8 battler)
return FALSE; return FALSE;
} }
bool32 IsBattlerMegaEvolved(u8 battler) bool32 IsBattlerMegaEvolved(u32 battler)
{ {
// While Transform does copy stats and visuals, it shouldn't be counted as true Mega Evolution. // While Transform does copy stats and visuals, it shouldn't be counted as true Mega Evolution.
if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED) if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED)
@ -10243,7 +10250,7 @@ bool32 IsBattlerMegaEvolved(u8 battler)
return (gSpeciesInfo[gBattleMons[battler].species].flags & SPECIES_FLAG_MEGA_EVOLUTION); return (gSpeciesInfo[gBattleMons[battler].species].flags & SPECIES_FLAG_MEGA_EVOLUTION);
} }
bool32 IsBattlerPrimalReverted(u8 battler) bool32 IsBattlerPrimalReverted(u32 battler)
{ {
// While Transform does copy stats and visuals, it shouldn't be counted as true Primal Revesion. // While Transform does copy stats and visuals, it shouldn't be counted as true Primal Revesion.
if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED) if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED)
@ -10251,7 +10258,7 @@ bool32 IsBattlerPrimalReverted(u8 battler)
return (gSpeciesInfo[gBattleMons[battler].species].flags & SPECIES_FLAG_PRIMAL_REVERSION); return (gSpeciesInfo[gBattleMons[battler].species].flags & SPECIES_FLAG_PRIMAL_REVERSION);
} }
bool32 IsBattlerUltraBursted(u8 battler) bool32 IsBattlerUltraBursted(u32 battler)
{ {
// While Transform does copy stats and visuals, it shouldn't be counted as true Ultra Burst. // While Transform does copy stats and visuals, it shouldn't be counted as true Ultra Burst.
if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED) if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED)
@ -10260,7 +10267,7 @@ bool32 IsBattlerUltraBursted(u8 battler)
} }
// Returns SPECIES_NONE if no form change is possible // Returns SPECIES_NONE if no form change is possible
u16 GetBattleFormChangeTargetSpecies(u8 battler, u16 method) u16 GetBattleFormChangeTargetSpecies(u32 battler, u16 method)
{ {
u32 i, j; u32 i, j;
u16 targetSpecies = SPECIES_NONE; u16 targetSpecies = SPECIES_NONE;
@ -10347,7 +10354,7 @@ u16 GetBattleFormChangeTargetSpecies(u8 battler, u16 method)
return targetSpecies; return targetSpecies;
} }
bool32 CanBattlerFormChange(u8 battler, u16 method) bool32 CanBattlerFormChange(u32 battler, u16 method)
{ {
// Can't change form if transformed. // Can't change form if transformed.
if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED
@ -10361,7 +10368,7 @@ bool32 CanBattlerFormChange(u8 battler, u16 method)
return DoesSpeciesHaveFormChangeMethod(gBattleMons[battler].species, method); return DoesSpeciesHaveFormChangeMethod(gBattleMons[battler].species, method);
} }
bool32 TryBattleFormChange(u8 battler, u16 method) bool32 TryBattleFormChange(u32 battler, u16 method)
{ {
u8 monId = gBattlerPartyIndexes[battler]; u8 monId = gBattlerPartyIndexes[battler];
u8 side = GET_BATTLER_SIDE(battler); u8 side = GET_BATTLER_SIDE(battler);
@ -10388,7 +10395,7 @@ bool32 TryBattleFormChange(u8 battler, u16 method)
} }
else if (gBattleStruct->changedSpecies[side][monId] != SPECIES_NONE) else if (gBattleStruct->changedSpecies[side][monId] != SPECIES_NONE)
{ {
bool8 restoreSpecies = FALSE; bool32 restoreSpecies = FALSE;
// Mega Evolved and Ultra Bursted Pokémon should always revert to normal upon fainting or ending the battle, so no need to add it to the form change tables. // Mega Evolved and Ultra Bursted Pokémon should always revert to normal upon fainting or ending the battle, so no need to add it to the form change tables.
if ((IsBattlerMegaEvolved(battler) || IsBattlerUltraBursted(battler)) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE)) if ((IsBattlerMegaEvolved(battler) || IsBattlerUltraBursted(battler)) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE))
@ -10431,7 +10438,7 @@ bool32 DoBattlersShareType(u32 battler1, u32 battler2)
return FALSE; return FALSE;
} }
bool32 CanBattlerGetOrLoseItem(u8 battler, u16 itemId) bool32 CanBattlerGetOrLoseItem(u32 battler, u16 itemId)
{ {
u16 species = gBattleMons[battler].species; u16 species = gBattleMons[battler].species;
u16 holdEffect = ItemId_GetHoldEffect(itemId); u16 holdEffect = ItemId_GetHoldEffect(itemId);
@ -10521,7 +10528,7 @@ bool32 SetIllusionMon(struct Pokemon *mon, u32 battler)
return FALSE; return FALSE;
} }
bool8 ShouldGetStatBadgeBoost(u16 badgeFlag, u8 battler) bool32 ShouldGetStatBadgeBoost(u16 badgeFlag, u32 battler)
{ {
#if B_BADGE_BOOST == GEN_3 #if B_BADGE_BOOST == GEN_3
if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER)) if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_FRONTIER))
@ -10555,10 +10562,10 @@ u8 GetBattleMoveSplit(u32 moveId)
#endif #endif
} }
static bool32 TryRemoveScreens(u8 battler) static bool32 TryRemoveScreens(u32 battler)
{ {
bool32 removed = FALSE; bool32 removed = FALSE;
u8 battlerSide = GetBattlerSide(battler); u32 battlerSide = GetBattlerSide(battler);
u8 enemySide = GetBattlerSide(BATTLE_OPPOSITE(battler)); u8 enemySide = GetBattlerSide(BATTLE_OPPOSITE(battler));
// try to remove from battler's side // try to remove from battler's side
@ -10584,7 +10591,7 @@ static bool32 TryRemoveScreens(u8 battler)
return removed; return removed;
} }
static bool32 IsUnnerveAbilityOnOpposingSide(u8 battler) static bool32 IsUnnerveAbilityOnOpposingSide(u32 battler)
{ {
if (IsAbilityOnOpposingSide(battler, ABILITY_UNNERVE) if (IsAbilityOnOpposingSide(battler, ABILITY_UNNERVE)
|| IsAbilityOnOpposingSide(battler, ABILITY_AS_ONE_ICE_RIDER) || IsAbilityOnOpposingSide(battler, ABILITY_AS_ONE_ICE_RIDER)
@ -10594,7 +10601,7 @@ static bool32 IsUnnerveAbilityOnOpposingSide(u8 battler)
} }
// Photon geyser & light that burns the sky // Photon geyser & light that burns the sky
u8 GetSplitBasedOnStats(u8 battler) u8 GetSplitBasedOnStats(u32 battler)
{ {
u32 attack = gBattleMons[battler].attack; u32 attack = gBattleMons[battler].attack;
u32 spAttack = gBattleMons[battler].spAttack; u32 spAttack = gBattleMons[battler].spAttack;
@ -10611,11 +10618,11 @@ u8 GetSplitBasedOnStats(u8 battler)
return SPLIT_PHYSICAL; return SPLIT_PHYSICAL;
} }
static u8 GetFlingPowerFromItemId(u16 itemId) static u32 GetFlingPowerFromItemId(u32 itemId)
{ {
if (itemId >= ITEM_TM01 && itemId <= ITEM_HM08) if (itemId >= ITEM_TM01 && itemId <= ITEM_HM08)
{ {
u8 power = gBattleMoves[ItemIdToBattleMoveId(itemId)].power; u32 power = gBattleMoves[ItemIdToBattleMoveId(itemId)].power;
if (power > 1) if (power > 1)
return power; return power;
return 10; // Status moves and moves with variable power always return 10 power. return 10; // Status moves and moves with variable power always return 10 power.
@ -10721,7 +10728,7 @@ bool32 IsEntrainmentTargetOrSimpleBeamBannedAbility(u16 ability)
// Sort an array of battlers by speed // Sort an array of battlers by speed
// Useful for effects like pickpocket, eject button, red card, dancer // Useful for effects like pickpocket, eject button, red card, dancer
void SortBattlersBySpeed(u8 *battlers, bool8 slowToFast) void SortBattlersBySpeed(u8 *battlers, bool32 slowToFast)
{ {
int i, j, currSpeed, currBattler; int i, j, currSpeed, currBattler;
u16 speeds[MAX_BATTLERS_COUNT] = {0}; u16 speeds[MAX_BATTLERS_COUNT] = {0};
@ -10777,7 +10784,7 @@ void TryRestoreHeldItems(void)
} }
} }
bool32 CanStealItem(u8 battlerStealing, u8 battlerItem, u16 item) bool32 CanStealItem(u32 battlerStealing, u32 battlerItem, u16 item)
{ {
u8 stealerSide = GetBattlerSide(battlerStealing); u8 stealerSide = GetBattlerSide(battlerStealing);
@ -10817,7 +10824,7 @@ bool32 CanStealItem(u8 battlerStealing, u8 battlerItem, u16 item)
return TRUE; return TRUE;
} }
void TrySaveExchangedItem(u8 battler, u16 stolenItem) void TrySaveExchangedItem(u32 battler, u16 stolenItem)
{ {
// Because BtlController_EmitSetMonData does SetMonData, we need to save the stolen item only if it matches the battler's original // Because BtlController_EmitSetMonData does SetMonData, we need to save the stolen item only if it matches the battler's original
// So, if the player steals an item during battle and has it stolen from it, it will not end the battle with it (naturally) // So, if the player steals an item during battle and has it stolen from it, it will not end the battle with it (naturally)
@ -10831,7 +10838,7 @@ void TrySaveExchangedItem(u8 battler, u16 stolenItem)
#endif #endif
} }
bool32 IsBattlerAffectedByHazards(u8 battler, bool32 toxicSpikes) bool32 IsBattlerAffectedByHazards(u32 battler, bool32 toxicSpikes)
{ {
bool32 ret = TRUE; bool32 ret = TRUE;
u32 holdEffect = GetBattlerHoldEffect(battler, TRUE); u32 holdEffect = GetBattlerHoldEffect(battler, TRUE);
@ -10848,7 +10855,7 @@ bool32 IsBattlerAffectedByHazards(u8 battler, bool32 toxicSpikes)
return ret; return ret;
} }
bool32 TestSheerForceFlag(u8 battler, u16 move) bool32 TestSheerForceFlag(u32 battler, u16 move)
{ {
if (GetBattlerAbility(battler) == ABILITY_SHEER_FORCE && gBattleMoves[move].sheerForceBoost) if (GetBattlerAbility(battler) == ABILITY_SHEER_FORCE && gBattleMoves[move].sheerForceBoost)
return TRUE; return TRUE;
@ -10857,9 +10864,9 @@ bool32 TestSheerForceFlag(u8 battler, u16 move)
} }
// This function is the body of "jumpifstat", but can be used dynamically in a function // This function is the body of "jumpifstat", but can be used dynamically in a function
bool32 CompareStat(u8 battler, u8 statId, u8 cmpTo, u8 cmpKind) bool32 CompareStat(u32 battler, u8 statId, u8 cmpTo, u8 cmpKind)
{ {
bool8 ret = FALSE; bool32 ret = FALSE;
u8 statValue = gBattleMons[battler].statStages[statId]; u8 statValue = gBattleMons[battler].statStages[statId];
// Because this command is used as a way of checking if a stat can be lowered/raised, // Because this command is used as a way of checking if a stat can be lowered/raised,
@ -10908,9 +10915,9 @@ bool32 CompareStat(u8 battler, u8 statId, u8 cmpTo, u8 cmpKind)
return ret; return ret;
} }
void BufferStatChange(u8 battler, u8 statId, u8 stringId) void BufferStatChange(u32 battler, u8 statId, u8 stringId)
{ {
bool8 hasContrary = (GetBattlerAbility(battler) == ABILITY_CONTRARY); bool32 hasContrary = (GetBattlerAbility(battler) == ABILITY_CONTRARY);
PREPARE_STAT_BUFFER(gBattleTextBuff1, statId); PREPARE_STAT_BUFFER(gBattleTextBuff1, statId);
if (stringId == STRINGID_STATFELL) if (stringId == STRINGID_STATFELL)
@ -10933,7 +10940,7 @@ void BufferStatChange(u8 battler, u8 statId, u8 stringId)
} }
} }
bool32 TryRoomService(u8 battler) bool32 TryRoomService(u32 battler)
{ {
if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && CompareStat(battler, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN)) if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM && CompareStat(battler, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN))
{ {
@ -10951,7 +10958,7 @@ bool32 TryRoomService(u8 battler)
} }
} }
bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u32 battlerDef, bool32 checkTarget) bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 checkTarget)
{ {
#if B_PRANKSTER_DARK_TYPES >= GEN_7 #if B_PRANKSTER_DARK_TYPES >= GEN_7
if (!gProtectStructs[battlerPrankster].pranksterElevated) if (!gProtectStructs[battlerPrankster].pranksterElevated)
@ -10970,12 +10977,12 @@ bool32 BlocksPrankster(u16 move, u8 battlerPrankster, u32 battlerDef, bool32 che
return FALSE; return FALSE;
} }
u16 GetUsedHeldItem(u8 battler) u16 GetUsedHeldItem(u32 battler)
{ {
return gBattleStruct->usedHeldItems[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)]; return gBattleStruct->usedHeldItems[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)];
} }
bool32 IsBattlerWeatherAffected(u8 battler, u32 weatherFlags) bool32 IsBattlerWeatherAffected(u32 battler, u32 weatherFlags)
{ {
if (gBattleWeather & weatherFlags && WEATHER_HAS_EFFECT) if (gBattleWeather & weatherFlags && WEATHER_HAS_EFFECT)
{ {
@ -10990,7 +10997,7 @@ bool32 IsBattlerWeatherAffected(u8 battler, u32 weatherFlags)
// Gets move target before redirection effects etc. are applied // Gets move target before redirection effects etc. are applied
// Possible return values are defined in battle.h following MOVE_TARGET_SELECTED // Possible return values are defined in battle.h following MOVE_TARGET_SELECTED
u32 GetBattlerMoveTargetType(u8 battler, u16 move) u32 GetBattlerMoveTargetType(u32 battler, u32 move)
{ {
u32 target; u32 target;
@ -11055,13 +11062,13 @@ void RecalcBattlerStats(u32 battler, struct Pokemon *mon)
CopyMonAbilityAndTypesToBattleMon(battler, mon); CopyMonAbilityAndTypesToBattleMon(battler, mon);
} }
void RemoveConfusionStatus(u8 battler) void RemoveConfusionStatus(u32 battler)
{ {
gBattleMons[battler].status2 &= ~STATUS2_CONFUSION; gBattleMons[battler].status2 &= ~STATUS2_CONFUSION;
gStatuses4[battler] &= ~STATUS4_INFINITE_CONFUSION; gStatuses4[battler] &= ~STATUS4_INFINITE_CONFUSION;
} }
static bool8 CanBeInfinitelyConfused(u8 battler) static bool32 CanBeInfinitelyConfused(u32 battler)
{ {
if (gBattleMons[battler].ability == ABILITY_OWN_TEMPO if (gBattleMons[battler].ability == ABILITY_OWN_TEMPO
|| IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN) || IsBattlerTerrainAffected(battler, STATUS_FIELD_MISTY_TERRAIN)
@ -11072,13 +11079,13 @@ static bool8 CanBeInfinitelyConfused(u8 battler)
return TRUE; return TRUE;
} }
u8 GetBattlerGender(u8 battler) u8 GetBattlerGender(u32 battler)
{ {
return GetGenderFromSpeciesAndPersonality(gBattleMons[battler].species, return GetGenderFromSpeciesAndPersonality(gBattleMons[battler].species,
gBattleMons[battler].personality); gBattleMons[battler].personality);
} }
bool8 AreBattlersOfOppositeGender(u8 battler1, u8 battler2) bool32 AreBattlersOfOppositeGender(u32 battler1, u32 battler2)
{ {
u8 gender1 = GetBattlerGender(battler1); u8 gender1 = GetBattlerGender(battler1);
u8 gender2 = GetBattlerGender(battler2); u8 gender2 = GetBattlerGender(battler2);
@ -11086,7 +11093,7 @@ bool8 AreBattlersOfOppositeGender(u8 battler1, u8 battler2)
return (gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS && gender1 != gender2); return (gender1 != MON_GENDERLESS && gender2 != MON_GENDERLESS && gender1 != gender2);
} }
u32 CalcSecondaryEffectChance(u8 battler, u8 secondaryEffectChance) u32 CalcSecondaryEffectChance(u32 battler, u8 secondaryEffectChance)
{ {
if (GetBattlerAbility(battler) == ABILITY_SERENE_GRACE) if (GetBattlerAbility(battler) == ABILITY_SERENE_GRACE)
secondaryEffectChance *= 2; secondaryEffectChance *= 2;

View File

@ -884,12 +884,12 @@ u16 ItemId_GetPrice(u16 itemId)
return gItems[SanitizeItemId(itemId)].price; return gItems[SanitizeItemId(itemId)].price;
} }
u8 ItemId_GetHoldEffect(u16 itemId) u32 ItemId_GetHoldEffect(u32 itemId)
{ {
return gItems[SanitizeItemId(itemId)].holdEffect; return gItems[SanitizeItemId(itemId)].holdEffect;
} }
u8 ItemId_GetHoldEffectParam(u16 itemId) u32 ItemId_GetHoldEffectParam(u32 itemId)
{ {
return gItems[SanitizeItemId(itemId)].holdEffectParam; return gItems[SanitizeItemId(itemId)].holdEffectParam;
} }
@ -956,7 +956,7 @@ u8 ItemId_GetSecondaryId(u16 itemId)
return gItems[SanitizeItemId(itemId)].secondaryId; return gItems[SanitizeItemId(itemId)].secondaryId;
} }
u8 ItemId_GetFlingPower(u16 itemId) u32 ItemId_GetFlingPower(u32 itemId)
{ {
return gItems[SanitizeItemId(itemId)].flingPower; return gItems[SanitizeItemId(itemId)].flingPower;
} }