From 0154d8a2212efdb03fdff20b473cc270aad1c8f9 Mon Sep 17 00:00:00 2001 From: lhearachel Date: Thu, 28 Sep 2023 21:01:04 -0700 Subject: [PATCH] Document BattleSystem_PartyCount --- include/overlay016/ov16_0223DF00.h | 19 ++++++++++++++++++- src/overlay014/ov14_0221FC20.c | 24 ++++++++++++------------ src/overlay016/ov16_0223B140.c | 2 +- src/overlay016/ov16_0223DF00.c | 19 +++++++++++-------- src/overlay016/ov16_022405FC.c | 16 ++++++++-------- src/overlay016/ov16_0225177C.c | 4 ++-- src/overlay016/ov16_0225BFFC.c | 2 +- src/overlay016/ov16_0225CBB8.c | 4 ++-- 8 files changed, 55 insertions(+), 35 deletions(-) diff --git a/include/overlay016/ov16_0223DF00.h b/include/overlay016/ov16_0223DF00.h index 5334087815..2b0c46dfa0 100644 --- a/include/overlay016/ov16_0223DF00.h +++ b/include/overlay016/ov16_0223DF00.h @@ -43,7 +43,24 @@ BattleContext * BattleSystem_Context(BattleSystem * param0); BattlerData * BattleSystem_BattlerData(BattleSystem * param0, int param1); int BattleSystem_MaxBattlers(BattleSystem * param0); Party * BattleSystem_Party(BattleSystem * param0, int param1); -int ov16_0223DF60(BattleSystem * param0, int param1); + +/** + * @brief Get the party count for a particular battler. + * + * - If the battle taking place is a 2vs2 battle (player-with-partner vs. two + * opponent trainers), then the battler input is not modified. + * - If the battle taking place is against two opponents (but the player does + * not have a partner) and the requested count is for an enemy party, then the + * battler input is not modified. + * - If the battle taking place is otherwise a double-battle, then the battler + * input will be normalized to 0 or 1. + * - Otherwise, the battler input is used to retrieve the particular party. + * + * @param battleSys + * @param battler The battler party to count. + * @return Number of Pokemon in the requested battler's party. + */ +int BattleSystem_PartyCount(BattleSystem *battleSys, int battler); Pokemon * ov16_0223DFAC(BattleSystem * param0, int param1, int param2); UnkStruct_02007768 * ov16_0223E000(BattleSystem * param0); UnkStruct_ov12_0221FCDC * ov16_0223E008(BattleSystem * param0); diff --git a/src/overlay014/ov14_0221FC20.c b/src/overlay014/ov14_0221FC20.c index 1235b31486..4aa8037eb9 100644 --- a/src/overlay014/ov14_0221FC20.c +++ b/src/overlay014/ov14_0221FC20.c @@ -1335,7 +1335,7 @@ static void ov14_02220D8C (BattleSystem * param0, BattleContext * param1) v4 = v5 = param1->selectedPartySlot[v3]; } - for (v2 = 0; v2 < ov16_0223DF60(param0, v3); v2++) { + for (v2 = 0; v2 < BattleSystem_PartyCount(param0, v3); v2++) { v1 = Party_GetPokemonBySlotIndex(v0, v2); if ((v2 != v4) && (v2 != v5) && (Pokemon_GetValue(v1, MON_DATA_CURRENT_HP, NULL) != 0) && (Pokemon_GetValue(v1, MON_DATA_SPECIES_EGG, NULL) != 0) && (Pokemon_GetValue(v1, MON_DATA_SPECIES_EGG, NULL) != 494)) { @@ -1553,7 +1553,7 @@ static void ov14_022211AC (BattleSystem * param0, BattleContext * param1) v0 = BattleSystem_Party(param0, v3); - for (v2 = 0; v2 < ov16_0223DF60(param0, v3); v2++) { + for (v2 = 0; v2 < BattleSystem_PartyCount(param0, v3); v2++) { v1 = Party_GetPokemonBySlotIndex(v0, v2); if ((v2 != v4) && (v2 != v5) && (Pokemon_GetValue(v1, MON_DATA_CURRENT_HP, NULL) != 0) && (Pokemon_GetValue(v1, MON_DATA_SPECIES_EGG, NULL) != 0) && (Pokemon_GetValue(v1, MON_DATA_SPECIES_EGG, NULL) != 494) && (Pokemon_GetValue(v1, MON_DATA_160, NULL) & v7)) { @@ -1590,7 +1590,7 @@ static void ov14_022212A0 (BattleSystem * param0, BattleContext * param1) v0 = BattleSystem_Party(param0, v3); - for (v2 = 0; v2 < ov16_0223DF60(param0, v3); v2++) { + for (v2 = 0; v2 < BattleSystem_PartyCount(param0, v3); v2++) { v1 = Party_GetPokemonBySlotIndex(v0, v2); if ((v2 != v4) && (v2 != v5) && (Pokemon_GetValue(v1, MON_DATA_CURRENT_HP, NULL) != 0) && (Pokemon_GetValue(v1, MON_DATA_SPECIES_EGG, NULL) != 0) && (Pokemon_GetValue(v1, MON_DATA_SPECIES_EGG, NULL) != 494) && ((Pokemon_GetValue(v1, MON_DATA_160, NULL) & v7) == 0)) { @@ -2232,7 +2232,7 @@ static void ov14_02221D88 (BattleSystem * param0, BattleContext * param1) v2 = ov14_02222CF0(param1); v0 = ov14_02222D34(param1, v1); - for (v3 = 0; v3 < ov16_0223DF60(param0, v0); v3++) { + for (v3 = 0; v3 < BattleSystem_PartyCount(param0, v0); v3++) { v4 = ov16_0223DFAC(param0, v0, v3); if (v3 != param1->selectedPartySlot[v0]) { @@ -2258,7 +2258,7 @@ static void ov14_02221E18 (BattleSystem * param0, BattleContext * param1) v2 = ov14_02222CF0(param1); v0 = ov14_02222D34(param1, v1); - for (v3 = 0; v3 < ov16_0223DF60(param0, v0); v3++) { + for (v3 = 0; v3 < BattleSystem_PartyCount(param0, v0); v3++) { v5 = ov16_0223DFAC(param0, v0, v3); if (v3 != param1->selectedPartySlot[v0]) { @@ -2403,7 +2403,7 @@ static void ov14_022220CC (BattleSystem * param0, BattleContext * param1) v5 = ov14_02222D7C(param0, param1, param1->aiContext.attacker, ¶m1->battleMons[v4].moves[0], &v7[0], param1->battleMons[v4].heldItem, &v9[0], Battler_Ability(param1, v4), param1->battleMons[v4].moveEffectsData.embargoTurns, v2); - for (v0 = 0; v0 < ov16_0223DF60(param0, v4); v0++) { + for (v0 = 0; v0 < BattleSystem_PartyCount(param0, v4); v0++) { if (v0 != param1->selectedPartySlot[v4]) { v10 = ov16_0223DFAC(param0, v4, v0); @@ -3421,7 +3421,7 @@ static BOOL ov14_0222342C (BattleSystem * param0, BattleContext * param1, int pa } } - for (v0 = 0; v0 < ov16_0223DF60(param0, param2); v0++) { + for (v0 = 0; v0 < BattleSystem_PartyCount(param0, param2); v0++) { v5 = ov16_0223DFAC(param0, param2, v0); if ((Pokemon_GetValue(v5, MON_DATA_CURRENT_HP, NULL) != 0) && (Pokemon_GetValue(v5, MON_DATA_SPECIES_EGG, NULL) != 0) && (Pokemon_GetValue(v5, MON_DATA_SPECIES_EGG, NULL) != 494) && (v0 != param1->selectedPartySlot[param2])) { @@ -3511,7 +3511,7 @@ static BOOL ov14_022235F0 (BattleSystem * param0, BattleContext * param1, int pa } v9 = 0; - v10 = ov16_0223DF60(param0, param2); + v10 = BattleSystem_PartyCount(param0, param2); for (v0 = v9; v0 < v10; v0++) { v12 = ov16_0223DFAC(param0, param2, v0); @@ -3706,7 +3706,7 @@ static BOOL ov14_02223C8C (BattleSystem * param0, BattleContext * param1, int pa } v6 = 0; - v7 = ov16_0223DF60(param0, param2); + v7 = BattleSystem_PartyCount(param0, param2); for (v0 = v6; v0 < v7; v0++) { v8 = ov16_0223DFAC(param0, param2, v0); @@ -3751,7 +3751,7 @@ static BOOL ov14_02223E10 (BattleSystem * param0, BattleContext * param1, int pa } v7 = 0; - v8 = ov16_0223DF60(param0, param2); + v8 = BattleSystem_PartyCount(param0, param2); for (v0 = v7; v0 < v8; v0++) { v9 = ov16_0223DFAC(param0, param2, v0); @@ -3860,7 +3860,7 @@ static BOOL ov14_022241A4 (BattleSystem * param0, BattleContext * param1, int pa } v5 = 0; - v6 = ov16_0223DF60(param0, param2); + v6 = BattleSystem_PartyCount(param0, param2); for (v0 = v5; v0 < v6; v0++) { v7 = ov16_0223DFAC(param0, param2, v0); @@ -3936,7 +3936,7 @@ int ov14_022243BC (BattleSystem * param0, int param1) } v4 = 0; - v5 = ov16_0223DF60(param0, param1); + v5 = BattleSystem_PartyCount(param0, param1); for (v0 = v4; v0 < v5; v0++) { v6 = ov16_0223DFAC(param0, param1, v0); diff --git a/src/overlay016/ov16_0223B140.c b/src/overlay016/ov16_0223B140.c index b5b1aa69e7..45725e447b 100644 --- a/src/overlay016/ov16_0223B140.c +++ b/src/overlay016/ov16_0223B140.c @@ -1278,7 +1278,7 @@ static void ov16_0223C2C0 (BattleSystem * param0, BattleParams * param1) } for (v0 = 0; v0 < param0->maxBattlers; v0++) { - for (v1 = 0; v1 < ov16_0223DF60(param0, v0); v1++) { + for (v1 = 0; v1 < BattleSystem_PartyCount(param0, v0); v1++) { v3 = ov16_0223DFAC(param0, v0, v1); if (v0 == 2) { diff --git a/src/overlay016/ov16_0223DF00.c b/src/overlay016/ov16_0223DF00.c index 2eb072825a..bafd90da61 100644 --- a/src/overlay016/ov16_0223DF00.c +++ b/src/overlay016/ov16_0223DF00.c @@ -3,6 +3,7 @@ #include #include +#include "battle/common.h" #include "constants/battle.h" #include "struct_decls/struct_02002F38_decl.h" @@ -83,7 +84,7 @@ BattleContext * BattleSystem_Context(BattleSystem * param0); BattlerData * BattleSystem_BattlerData(BattleSystem * param0, int param1); int BattleSystem_MaxBattlers(BattleSystem * param0); Party * BattleSystem_Party(BattleSystem * param0, int param1); -int ov16_0223DF60(BattleSystem * param0, int param1); +int BattleSystem_PartyCount(BattleSystem *battleSys, int battler); Pokemon * ov16_0223DFAC(BattleSystem * param0, int param1, int param2); UnkStruct_02007768 * ov16_0223E000(BattleSystem * param0); UnkStruct_ov12_0221FCDC * ov16_0223E008(BattleSystem * param0); @@ -271,14 +272,16 @@ Party * BattleSystem_Party (BattleSystem * param0, int param1) } } -int ov16_0223DF60 (BattleSystem * param0, int param1) +int BattleSystem_PartyCount(BattleSystem *battleSys, int battler) { - if ((param0->battleType & 0x8) || ((param0->battleType & 0x10) && (BattleSystem_BattlerSlot(param0, param1) & 0x1))) { - return Party_GetCurrentCount(param0->parties[param1]); - } else if (param0->battleType & 0x2) { - return Party_GetCurrentCount(param0->parties[param1 & 1]); + if ((battleSys->battleType & BATTLE_TYPE_2vs2) + || ((battleSys->battleType & BATTLE_TYPE_TAG) + && (BattleSystem_BattlerSlot(battleSys, battler) & BATTLER_THEM))) { + return Party_GetCurrentCount(battleSys->parties[battler]); + } else if (battleSys->battleType & BATTLE_TYPE_DOUBLES) { + return Party_GetCurrentCount(battleSys->parties[battler & 1]); } else { - return Party_GetCurrentCount(param0->parties[param1]); + return Party_GetCurrentCount(battleSys->parties[battler]); } } @@ -1086,7 +1089,7 @@ void ov16_0223EE70 (BattleSystem * param0) return; } - for (v0 = 0; v0 < ov16_0223DF60(param0, 0); v0++) { + for (v0 = 0; v0 < BattleSystem_PartyCount(param0, 0); v0++) { v2 = ov16_0223DFAC(param0, 0, v0); v3 = Pokemon_GetValue(v2, MON_DATA_SPECIES_EGG, NULL); diff --git a/src/overlay016/ov16_022405FC.c b/src/overlay016/ov16_022405FC.c index 4f7dbae1d1..2204bac8eb 100644 --- a/src/overlay016/ov16_022405FC.c +++ b/src/overlay016/ov16_022405FC.c @@ -4307,7 +4307,7 @@ static BOOL ov16_02244BC4 (BattleSystem * param0, BattleContext * param1) int v11, v12; v2 = BattleSystem_Party(param0, param1->defender); - v4 = ov16_0223DF60(param0, param1->defender); + v4 = BattleSystem_PartyCount(param0, param1->defender); if ((v1 & 0x8) || ((v1 & 0x10) && (Battler_Side(param0, param1->defender)))) { v8 = 0; @@ -4968,7 +4968,7 @@ static BOOL ov16_02245D68 (BattleSystem * param0, BattleContext * param1) ov16_02248AF0(param1, 1); - v1 = ov16_0223DF60(param0, param1->attacker); + v1 = BattleSystem_PartyCount(param0, param1->attacker); if (param1->multiHitNumHits == 0) { param1->multiHitNumHits = 2; @@ -5138,7 +5138,7 @@ static BOOL ov16_022461F4 (BattleSystem * param0, BattleContext * param1) v0 = ov16_02248AD0(param1); v6 = 0; - v5 = ov16_0223DF60(param0, param1->attacker); + v5 = BattleSystem_PartyCount(param0, param1->attacker); for (v3 = 0; v3 < v5; v3++) { if (v3 != param1->selectedPartySlot[param1->attacker]) { @@ -6199,7 +6199,7 @@ static BOOL ov16_022476F8 (BattleSystem * param0, BattleContext * param1) ov16_02248AF0(param1, 1); - for (v1 = 0; v1 < ov16_0223DF60(param0, 0); v1++) { + for (v1 = 0; v1 < BattleSystem_PartyCount(param0, 0); v1++) { v8 = ov16_0223DFAC(param0, 0, v1); v4 = Pokemon_GetValue(v8, MON_DATA_SPECIES_EGG, NULL); v5 = Pokemon_GetValue(v8, MON_DATA_HELD_ITEM, NULL); @@ -7375,7 +7375,7 @@ static BOOL ov16_02248944 (BattleSystem * param0, BattleContext * param1) v0 = ov16_02248AD0(param1); - if (((ov16_0223DF60(param0, 0) != 6) || (sub_020799A0(param0->unk_64) != 18)) && (param0->unk_2410)) { + if (((BattleSystem_PartyCount(param0, 0) != 6) || (sub_020799A0(param0->unk_64) != 18)) && (param0->unk_2410)) { ov16_02248AF0(param1, v0); } @@ -7660,7 +7660,7 @@ static void ov16_02248E74 (UnkStruct_0201CD38 * param0, void * param1) v5 = (v2->unk_04->faintedMon) >> 1 & 1; v6 = 0; - for (v1 = v2->unk_30[6]; v1 < ov16_0223DF60(v2->unk_00, v6); v1++) { + for (v1 = v2->unk_30[6]; v1 < BattleSystem_PartyCount(v2->unk_00, v6); v1++) { v3 = ov16_0223DFAC(v2->unk_00, v6, v1); v9 = Pokemon_GetValue(v3, MON_DATA_HELD_ITEM, NULL); v10 = Item_LoadParam(v9, 1, 5); @@ -7670,7 +7670,7 @@ static void ov16_02248E74 (UnkStruct_0201CD38 * param0, void * param1) } } - if (v1 == ov16_0223DF60(v2->unk_00, v6)) { + if (v1 == BattleSystem_PartyCount(v2->unk_00, v6)) { v2->unk_28 = 38; } else if ((v8 & 0x2) && ((v8 & 0x40) == 0)) { if (v2->unk_04->selectedPartySlot[2] == v1) { @@ -8543,7 +8543,7 @@ static void ov16_02249B80 (UnkStruct_0201CD38 * param0, void * param1) v16 = sub_0208712C(5, 1, Pokemon_GetValue(v3, MON_DATA_SPECIES, NULL), 10, ov16_0223EDA4(v2->unk_00)); v2->unk_50[1] = v16; - if (ov16_0223DF60(v2->unk_00, 0) < 6) { + if (BattleSystem_PartyCount(v2->unk_00, 0) < 6) { v16->unk_44 = 0; } else { v16->unk_44 = 1174 + ov16_0223F240(v2->unk_00); diff --git a/src/overlay016/ov16_0225177C.c b/src/overlay016/ov16_0225177C.c index 4bed27e078..73a34915b7 100644 --- a/src/overlay016/ov16_0225177C.c +++ b/src/overlay016/ov16_0225177C.c @@ -3133,7 +3133,7 @@ BOOL BattleSystem_CheckAnySwitches (BattleSystem * param0, BattleContext * param v0 = 0; v12 = BattleSystem_BattleType(param0); v1 = BattleSystem_Party(param0, param2); - v3 = ov16_0223DF60(param0, param2); + v3 = BattleSystem_PartyCount(param0, param2); if ((v12 & 0x8) || ((v12 & 0x10) && (BattleSystem_BattlerSlot(param0, param2) & 0x1))) { v7 = 0; @@ -7795,7 +7795,7 @@ int ov16_0225BA88 (BattleSystem * param0, int param1) v2 = BattleSystem_RandomOpponent(param0, v20, param1); v17 = 0; - v18 = ov16_0223DF60(param0, param1); + v18 = BattleSystem_PartyCount(param0, param1); v10 = 0; while (v10 != 0x3f) { diff --git a/src/overlay016/ov16_0225BFFC.c b/src/overlay016/ov16_0225BFFC.c index 8b42d250a9..d00f6db482 100644 --- a/src/overlay016/ov16_0225BFFC.c +++ b/src/overlay016/ov16_0225BFFC.c @@ -673,7 +673,7 @@ static void ov16_0225C5E0 (BattleSystem * param0, BattlerData * param1) u32 v5; v5 = 0; - v3 = ov16_0223DF60(param0, param1->unk_190); + v3 = BattleSystem_PartyCount(param0, param1->unk_190); for (v2 = 0; v2 < v3; v2++) { v1 = ov16_0223DFAC(param0, param1->unk_190, v2); diff --git a/src/overlay016/ov16_0225CBB8.c b/src/overlay016/ov16_0225CBB8.c index 0fbded3b30..d8dc4860e4 100644 --- a/src/overlay016/ov16_0225CBB8.c +++ b/src/overlay016/ov16_0225CBB8.c @@ -4299,14 +4299,14 @@ static void ov16_02261E8C (UnkStruct_0201CD38 * param0, void * param1) Heap_FreeToHeap(v9); - for (v3 = 0; v3 < ov16_0223DF60(v0->unk_00, v6); v3++) { + for (v3 = 0; v3 < BattleSystem_PartyCount(v0->unk_00, v6); v3++) { v9 = ov16_0223DFAC(v0->unk_00, v6, v0->unk_1C[v6][v3]); v10 = Party_GetPokemonBySlotIndex(v0->unk_04->unk_00, v3 * 2); Pokemon_Copy(v9, v10); v0->unk_04->unk_2C[v3 * 2] = v0->unk_1C[v6][v3]; } - for (v3 = 0; v3 < ov16_0223DF60(v0->unk_00, v7); v3++) { + for (v3 = 0; v3 < BattleSystem_PartyCount(v0->unk_00, v7); v3++) { v9 = ov16_0223DFAC(v0->unk_00, v7, v0->unk_1C[v7][v3]); v10 = Party_GetPokemonBySlotIndex(v0->unk_04->unk_00, v3 * 2 + 1); Pokemon_Copy(v9, v10);