GetSideParty/GetBattlerParty (#2910)

This commit is contained in:
ghoulslash 2023-04-26 11:38:52 -04:00 committed by GitHub
commit 5afe3f5e20
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 42 additions and 90 deletions

View File

@ -727,6 +727,17 @@ struct BattleStruct
#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + ((stage) << 3) + (goesDown << 7)) #define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + ((stage) << 3) + (goesDown << 7))
#define SET_STATCHANGER2(dst, statId, stage, goesDown)(dst = (statId) + ((stage) << 3) + (goesDown << 7)) #define SET_STATCHANGER2(dst, statId, stage, goesDown)(dst = (statId) + ((stage) << 3) + (goesDown << 7))
static inline struct Pokemon *GetSideParty(u32 side)
{
return side == B_SIDE_PLAYER ? gPlayerParty : gEnemyParty;
}
static inline struct Pokemon *GetBattlerParty(u32 battlerId)
{
extern u8 GetBattlerSide(u8 battler);
return GetSideParty(GetBattlerSide(battlerId));
}
// NOTE: The members of this struct have hard-coded offsets // NOTE: The members of this struct have hard-coded offsets
// in include/constants/battle_script_commands.h // in include/constants/battle_script_commands.h
struct BattleScripting struct BattleScripting

View File

@ -188,7 +188,6 @@ bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId);
bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId); bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId);
u8 GetBattleMoveSplit(u32 moveId); u8 GetBattleMoveSplit(u32 moveId);
bool32 TestMoveFlags(u16 move, u32 flag); bool32 TestMoveFlags(u16 move, u32 flag);
struct Pokemon *GetBattlerPartyData(u8 battlerId);
bool32 CanFling(u8 battlerId); bool32 CanFling(u8 battlerId);
bool32 IsTelekinesisBannedSpecies(u16 species); bool32 IsTelekinesisBannedSpecies(u16 species);
bool32 IsHealBlockPreventingMove(u32 battler, u32 move); bool32 IsHealBlockPreventingMove(u32 battler, u32 move);

View File

@ -3420,7 +3420,7 @@ bool32 IsPartyFullyHealedExceptBattler(u8 battlerId)
bool32 PartyHasMoveSplit(u8 battlerId, u8 split) bool32 PartyHasMoveSplit(u8 battlerId, u8 split)
{ {
u8 firstId, lastId; u8 firstId, lastId;
struct Pokemon* party = GetBattlerPartyData(battlerId); struct Pokemon *party = GetBattlerParty(battlerId);
u32 i, j; u32 i, j;
for (i = 0; i < PARTY_SIZE; i++) for (i = 0; i < PARTY_SIZE; i++)

View File

@ -7897,9 +7897,6 @@ void AnimTask_TerrainPulse(u8 taskId)
void AnimTask_AffectionHangedOn(u8 taskId) void AnimTask_AffectionHangedOn(u8 taskId)
{ {
int side = GetBattlerSide(gBattleAnimTarget);
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
gBattleAnimArgs[0] = GetBattlerFriendshipScore(gBattleAnimTarget); gBattleAnimArgs[0] = GetBattlerFriendshipScore(gBattleAnimTarget);
DestroyAnimVisualTask(taskId); DestroyAnimVisualTask(taskId);
} }

View File

@ -3800,7 +3800,9 @@ static void TryDoEventsBeforeFirstTurn(void)
{ {
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
if (gBattleMons[i].hp == 0 || gBattleMons[i].species == SPECIES_NONE || GetMonData(GetBattlerPartyData(i), MON_DATA_IS_EGG)) struct Pokemon *party = GetBattlerParty(i);
struct Pokemon *mon = &party[gBattlerPartyIndexes[i]];
if (gBattleMons[i].hp == 0 || gBattleMons[i].species == SPECIES_NONE || GetMonData(mon, MON_DATA_IS_EGG))
gAbsentBattlerFlags |= gBitTable[i]; gAbsentBattlerFlags |= gBitTable[i];
} }
} }
@ -5047,7 +5049,8 @@ static void CheckMegaEvolutionBeforeTurn(void)
if (gBattleStruct->mega.toEvolve & gBitTable[gActiveBattler] if (gBattleStruct->mega.toEvolve & gBitTable[gActiveBattler]
&& !(gProtectStructs[gActiveBattler].noValidMoves)) && !(gProtectStructs[gActiveBattler].noValidMoves))
{ {
struct Pokemon *mon = GetBattlerPartyData(gActiveBattler); struct Pokemon *party = GetBattlerParty(gActiveBattler);
struct Pokemon *mon = &party[gBattlerPartyIndexes[gActiveBattler]];
gBattleStruct->mega.toEvolve &= ~(gBitTable[gActiveBattler]); gBattleStruct->mega.toEvolve &= ~(gBitTable[gActiveBattler]);
gLastUsedItem = gBattleMons[gActiveBattler].item; gLastUsedItem = gBattleMons[gActiveBattler].item;

View File

@ -6515,10 +6515,7 @@ bool32 CanBattlerSwitch(u32 battlerId)
} }
else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{ {
if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) party = GetBattlerParty(battlerId);
party = gEnemyParty;
else
party = gPlayerParty;
lastMonId = 0; lastMonId = 0;
if (battlerId & 2) if (battlerId & 2)
@ -6559,10 +6556,7 @@ bool32 CanBattlerSwitch(u32 battlerId)
} }
else else
{ {
if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) party = GetBattlerParty(battlerId);
party = gEnemyParty;
else
party = gPlayerParty;
lastMonId = 0; lastMonId = 0;
if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(battlerId)) == TRUE) if (GetLinkTrainerFlankId(GetBattlerMultiplayerId(battlerId)) == TRUE)
@ -7716,10 +7710,7 @@ static void Cmd_drawpartystatussummary(void)
gActiveBattler = GetBattlerForBattleScript(cmd->battler); gActiveBattler = GetBattlerForBattleScript(cmd->battler);
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) party = GetBattlerParty(gActiveBattler);
party = gPlayerParty;
else
party = gEnemyParty;
for (i = 0; i < PARTY_SIZE; i++) for (i = 0; i < PARTY_SIZE; i++)
{ {
@ -8793,7 +8784,8 @@ static bool32 CourtChangeSwapSideStatuses(void)
static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega) static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega)
{ {
struct Pokemon *mon = GetBattlerPartyData(battlerId); struct Pokemon *party = GetBattlerParty(battlerId);
struct Pokemon *mon = &party[gBattlerPartyIndexes[battlerId]];
u32 position = GetBattlerPosition(battlerId); u32 position = GetBattlerPosition(battlerId);
u32 side = GET_BATTLER_SIDE(battlerId); u32 side = GET_BATTLER_SIDE(battlerId);
@ -8861,8 +8853,7 @@ static void HandleScriptMegaPrimal(u32 caseId, u32 battlerId, bool32 isMega)
static bool32 CanTeleport(u8 battlerId) static bool32 CanTeleport(u8 battlerId)
{ {
u8 side = GetBattlerSide(battlerId); struct Pokemon *party = GetBattlerParty(battlerId);
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
u32 species, count, i; u32 species, count, i;
for (i = 0; i < PARTY_SIZE; i++) for (i = 0; i < PARTY_SIZE; i++)
@ -11289,7 +11280,7 @@ static void Cmd_various(void)
// Battler selected! Revive and go to next instruction. // Battler selected! Revive and go to next instruction.
if (gSelectedMonPartyId != PARTY_SIZE) if (gSelectedMonPartyId != PARTY_SIZE)
{ {
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; struct Pokemon *party = GetSideParty(side);
u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2; u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2;
BtlController_EmitSetMonData(BUFFER_A, REQUEST_HP_BATTLE, gBitTable[gSelectedMonPartyId], sizeof(hp), &hp); BtlController_EmitSetMonData(BUFFER_A, REQUEST_HP_BATTLE, gBitTable[gSelectedMonPartyId], sizeof(hp), &hp);
@ -12397,10 +12388,7 @@ static void Cmd_forcerandomswitch(void)
|| redCardForcedSwitch || redCardForcedSwitch
) )
{ {
if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER) party = GetBattlerParty(gBattlerTarget);
party = gPlayerParty;
else
party = gEnemyParty;
if (BATTLE_TWO_VS_ONE_OPPONENT && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT) if (BATTLE_TWO_VS_ONE_OPPONENT && GetBattlerSide(gBattlerTarget) == B_SIDE_OPPONENT)
{ {
@ -13599,16 +13587,11 @@ static void Cmd_healpartystatus(void)
if (gCurrentMove == MOVE_HEAL_BELL) if (gCurrentMove == MOVE_HEAL_BELL)
{ {
struct Pokemon *party; struct Pokemon *party = GetBattlerParty(gBattlerAttacker);
s32 i; s32 i;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL;
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF) if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF)
{ {
gBattleMons[gBattlerAttacker].status1 = 0; gBattleMons[gBattlerAttacker].status1 = 0;
@ -14236,12 +14219,7 @@ static void Cmd_trydobeatup(void)
gBattleStruct->beatUpSlot++; gBattleStruct->beatUpSlot++;
gBattlescriptCurrInstr = cmd->nextInstr; gBattlescriptCurrInstr = cmd->nextInstr;
#else #else
struct Pokemon *party; struct Pokemon *party = GetBattlerParty(gBattlerAttacker);
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
if (gBattleMons[gBattlerTarget].hp == 0) if (gBattleMons[gBattlerTarget].hp == 0)
{ {
@ -14935,10 +14913,7 @@ static void Cmd_assistattackselect(void)
if (validMoves != NULL) if (validMoves != NULL)
{ {
if (GET_BATTLER_SIDE(gBattlerAttacker) != B_SIDE_PLAYER) party = GetBattlerParty(gBattlerAttacker);
party = gEnemyParty;
else
party = gPlayerParty;
for (monId = 0; monId < PARTY_SIZE; monId++) for (monId = 0; monId < PARTY_SIZE; monId++)
{ {
@ -16467,7 +16442,7 @@ u8 GetFirstFaintedPartyIndex(u8 battlerId)
u32 i; u32 i;
u32 start = 0; u32 start = 0;
u32 end = PARTY_SIZE; u32 end = PARTY_SIZE;
struct Pokemon *party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; struct Pokemon *party = GetBattlerParty(battlerId);
// Check whether partner is separate trainer. // Check whether partner is separate trainer.
if ((GetBattlerSide(battlerId) == B_SIDE_PLAYER && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) if ((GetBattlerSide(battlerId) == B_SIDE_PLAYER && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
@ -16506,7 +16481,7 @@ void BS_ItemRestoreHP(void) {
u32 battlerId = MAX_BATTLERS_COUNT; u32 battlerId = MAX_BATTLERS_COUNT;
u32 healParam = GetItemEffect(gLastUsedItem)[6]; u32 healParam = GetItemEffect(gLastUsedItem)[6];
u32 side = GetBattlerSide(gBattlerAttacker); u32 side = GetBattlerSide(gBattlerAttacker);
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; struct Pokemon *party = GetSideParty(side);
u16 hp = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP); u16 hp = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP);
u16 maxHP = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_MAX_HP); u16 maxHP = GetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_MAX_HP);
gBattleCommunication[MULTIUSE_STATE] = 0; gBattleCommunication[MULTIUSE_STATE] = 0;
@ -16564,7 +16539,7 @@ void BS_ItemRestoreHP(void) {
void BS_ItemCureStatus(void) { void BS_ItemCureStatus(void) {
NATIVE_ARGS(); NATIVE_ARGS();
struct Pokemon *party = (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; struct Pokemon *party = GetBattlerParty(gBattlerAttacker);
// Heal Status1 conditions. // Heal Status1 conditions.
HealStatusConditions(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], gBattleStruct->itemPartyIndex[gBattlerAttacker], GetItemStatus1Mask(gLastUsedItem), gBattlerAttacker); HealStatusConditions(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], gBattleStruct->itemPartyIndex[gBattlerAttacker], GetItemStatus1Mask(gLastUsedItem), gBattlerAttacker);

View File

@ -226,14 +226,9 @@ static const u16 sEntrainmentTargetSimpleBeamBannedAbilities[] =
static u8 CalcBeatUpPower(void) static u8 CalcBeatUpPower(void)
{ {
struct Pokemon *party;
u8 basePower; u8 basePower;
u16 species; u16 species;
struct Pokemon *party = GetBattlerParty(gBattlerAttacker);
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
// Party slot is incremented by the battle script for Beat Up after this damage calculation // Party slot is incremented by the battle script for Beat Up after this damage calculation
species = GetMonData(&party[gBattleStruct->beatUpSlot], MON_DATA_SPECIES); species = GetMonData(&party[gBattleStruct->beatUpSlot], MON_DATA_SPECIES);
@ -1995,7 +1990,7 @@ u8 GetImprisonedMovesCount(u8 battlerId, u16 move)
u32 GetBattlerFriendshipScore(u8 battlerId) u32 GetBattlerFriendshipScore(u8 battlerId)
{ {
u8 side = GetBattlerSide(battlerId); u8 side = GetBattlerSide(battlerId);
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; struct Pokemon *party = GetSideParty(side);
u16 species = GetMonData(&party[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); u16 species = GetMonData(&party[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
if (side != B_SIDE_PLAYER) if (side != B_SIDE_PLAYER)
@ -3755,14 +3750,9 @@ u8 AtkCanceller_UnableToUseMove(void)
#if B_BEAT_UP >= GEN_5 #if B_BEAT_UP >= GEN_5
else if (gBattleMoves[gCurrentMove].effect == EFFECT_BEAT_UP) else if (gBattleMoves[gCurrentMove].effect == EFFECT_BEAT_UP)
{ {
struct Pokemon* party; struct Pokemon* party = GetBattlerParty(gBattlerAttacker);
int i; int i;
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
for (i = 0; i < PARTY_SIZE; i++) for (i = 0; i < PARTY_SIZE; i++)
{ {
if (GetMonData(&party[i], MON_DATA_HP) if (GetMonData(&party[i], MON_DATA_HP)
@ -3859,10 +3849,7 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2)
} }
else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{ {
if (GetBattlerSide(battler) == B_SIDE_PLAYER) party = GetBattlerParty(battler);
party = gPlayerParty;
else
party = gEnemyParty;
playerId = ((battler & BIT_FLANK) / 2); playerId = ((battler & BIT_FLANK) / 2);
for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++) for (i = playerId * MULTI_PARTY_SIZE; i < playerId * MULTI_PARTY_SIZE + MULTI_PARTY_SIZE; i++)
@ -3896,12 +3883,7 @@ bool8 HasNoMonsToSwitch(u8 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2)
else else
{ {
flankId = GetBattlerMultiplayerId(battler); flankId = GetBattlerMultiplayerId(battler);
party = GetBattlerParty(battler);
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
playerId = GetLinkTrainerFlankId(flankId); playerId = GetLinkTrainerFlankId(flankId);
} }
@ -4070,7 +4052,7 @@ static void ShouldChangeFormInWeather(u8 battler)
{ {
int i; int i;
int side = GetBattlerSide(battler); int side = GetBattlerSide(battler);
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; struct Pokemon *party = GetSideParty(side);
for (i = 0; i < PARTY_SIZE; i++) for (i = 0; i < PARTY_SIZE; i++)
{ {
@ -4261,8 +4243,7 @@ bool8 ChangeTypeBasedOnTerrain(u8 battlerId)
static u16 GetSupremeOverlordModifier(u8 battlerId) static u16 GetSupremeOverlordModifier(u8 battlerId)
{ {
u32 i; u32 i;
u8 side = GetBattlerSide(battlerId); struct Pokemon *party = GetBattlerParty(battlerId);
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
u16 modifier = UQ_4_12(1.0); u16 modifier = UQ_4_12(1.0);
bool8 appliedFirstBoost = FALSE; bool8 appliedFirstBoost = FALSE;
@ -7291,11 +7272,11 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
case HOLD_EFFECT_RESTORE_PP: case HOLD_EFFECT_RESTORE_PP:
if (!moveTurn) if (!moveTurn)
{ {
struct Pokemon *mon; struct Pokemon *party = GetBattlerParty(battlerId);
struct Pokemon *mon = &party[gBattlerPartyIndexes[battlerId]];
u8 ppBonuses; u8 ppBonuses;
u16 move; u16 move;
mon = GetBattlerPartyData(battlerId);
for (i = 0; i < MAX_MON_MOVES; i++) for (i = 0; i < MAX_MON_MOVES; i++)
{ {
move = GetMonData(mon, MON_DATA_MOVE1 + i); move = GetMonData(mon, MON_DATA_MOVE1 + i);
@ -10169,7 +10150,7 @@ void UndoMegaEvolution(u32 monId)
void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut) void UndoFormChange(u32 monId, u32 side, bool32 isSwitchingOut)
{ {
u32 i, currSpecies, targetSpecies; u32 i, currSpecies, targetSpecies;
struct Pokemon *party = (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; struct Pokemon *party = GetSideParty(side);
static const u16 species[][3] = static const u16 species[][3] =
{ {
// Changed Form ID Default Form ID Should change on switch // Changed Form ID Default Form ID Should change on switch
@ -10304,10 +10285,7 @@ bool32 SetIllusionMon(struct Pokemon *mon, u32 battlerId)
if (GetMonAbility(mon) != ABILITY_ILLUSION) if (GetMonAbility(mon) != ABILITY_ILLUSION)
return FALSE; return FALSE;
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) party = GetBattlerParty(battlerId);
party = gPlayerParty;
else
party = gEnemyParty;
if (IsBattlerAlive(BATTLE_PARTNER(battlerId))) if (IsBattlerAlive(BATTLE_PARTNER(battlerId)))
partnerMon = &party[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]]; partnerMon = &party[gBattlerPartyIndexes[BATTLE_PARTNER(battlerId)]];
@ -10432,17 +10410,6 @@ bool32 TestMoveFlags(u16 move, u32 flag)
return FALSE; return FALSE;
} }
struct Pokemon *GetBattlerPartyData(u8 battlerId)
{
struct Pokemon *mon;
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
else
mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
return mon;
}
static u8 GetFlingPowerFromItemId(u16 itemId) static u8 GetFlingPowerFromItemId(u16 itemId)
{ {
if (itemId >= ITEM_TM01 && itemId <= ITEM_HM08) if (itemId >= ITEM_TM01 && itemId <= ITEM_HM08)