summaryrefslogtreecommitdiff
path: root/src/battle_main.c
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2021-01-22 23:22:37 -0500
committerGriffinR <griffin.g.richards@gmail.com>2021-01-23 00:40:31 -0500
commita392cca92811c27524f1d10cd69d2fc96ea69b74 (patch)
tree0d4a48a869156a2f9f76795e34edfbbe1824a206 /src/battle_main.c
parent4228509e957b7f90bce7f7b470e18a0dfd32c2fc (diff)
Misc battle documentation
Diffstat (limited to 'src/battle_main.c')
-rw-r--r--src/battle_main.c162
1 files changed, 71 insertions, 91 deletions
diff --git a/src/battle_main.c b/src/battle_main.c
index b8ef2ba4c..a415d894f 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -93,7 +93,7 @@ static void sub_80398D0(struct Sprite *sprite);
static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite);
static void SpriteCb_BlinkVisible(struct Sprite *sprite);
static void SpriteCallbackDummy_3(struct Sprite *sprite);
-static void oac_poke_ally_(struct Sprite *sprite);
+static void SpriteCB_BattleSpriteSlideLeft(struct Sprite *sprite);
static void TurnValuesCleanUp(bool8 var0);
static void SpriteCB_BounceEffect(struct Sprite *sprite);
static void BattleStartClearSetData(void);
@@ -275,7 +275,7 @@ const struct SpriteTemplate gUnknown_0831AC88 =
static const u8 sText_ShedinjaJpnName[] = _("ヌケニン"); // Nukenin
-const struct OamData gOamData_831ACA8 =
+const struct OamData gOamData_BattleSpriteOpponentSide =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -290,7 +290,7 @@ const struct OamData gOamData_831ACA8 =
.affineParam = 0,
};
-const struct OamData gOamData_831ACB0 =
+const struct OamData gOamData_BattleSpritePlayerSide =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -306,10 +306,10 @@ const struct OamData gOamData_831ACB0 =
};
// Unknown and unused data. Feel free to remove.
-static const u16 gUnknown_0831ACB8[] = {0, 5, 0xfffe, 0};
-static const u16 *const gUnknown_0831ACC0 = gUnknown_0831ACB8;
-static const u16 gUnknown_0831ACC4[] = {0xfff0, 0, 0x0400, 0, 0, 0, 0x3c00, 0, 0x7ffe, 1, 0, 0};
-static const u16 *const gUnknown_0831ACDC = gUnknown_0831ACC4;
+static const u16 sUnused1[] = {0, 5, 0xfffe, 0};
+static const u16 *const sUnused1Ptr = sUnused1;
+static const u16 sUnused2[] = {0xfff0, 0, 0x0400, 0, 0, 0, 0x3c00, 0, 0x7ffe, 1, 0, 0};
+static const u16 *const sUnused2Ptr = sUnused2;
static const s8 gUnknown_0831ACE0[] ={-32, -16, -16, -32, -32, 0, 0, 0};
@@ -700,39 +700,45 @@ static void CB2_InitBattleInternal(void)
gBattleCommunication[MULTIUSE_STATE] = 0;
}
-static void sub_8036A5C(void)
+#define BUFFER_PARTY_VS_SCREEN_STATUS(party, flags, i) \
+ for ((i) = 0; (i) < PARTY_SIZE; (i)++) \
+ { \
+ u16 species = GetMonData(&(party)[(i)], MON_DATA_SPECIES2); \
+ u16 hp = GetMonData(&(party)[(i)], MON_DATA_HP); \
+ u32 status = GetMonData(&(party)[(i)], MON_DATA_STATUS); \
+ \
+ if (species == SPECIES_NONE) \
+ continue; \
+ \
+ /* Is healthy mon? */ \
+ if (species != SPECIES_EGG && hp != 0 && status == 0) \
+ (flags) |= 1 << (i) * 2; \
+ \
+ if (species == SPECIES_NONE) /* Redundant */ \
+ continue; \
+ \
+ /* Is Egg or statused? */ \
+ if (hp != 0 && (species == SPECIES_EGG || status != 0)) \
+ (flags) |= 2 << (i) * 2; \
+ \
+ if (species == SPECIES_NONE) /* Redundant */ \
+ continue; \
+ \
+ /* Is fainted? */ \
+ if (species != SPECIES_EGG && hp == 0) \
+ (flags) |= 3 << (i) * 2; \
+ }
+
+// For Vs Screen at link battle start
+static void BufferPartyVsScreenHealth_AtStart(void)
{
- u16 r6 = 0;
- u16 species = 0;
- u16 hp = 0;
- u32 status = 0;
+ u16 flags = 0;
s32 i;
- for (i = 0; i < PARTY_SIZE; i++)
- {
- species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
- hp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
- status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS);
-
- if (species == SPECIES_NONE)
- continue;
- if (species != SPECIES_EGG && hp != 0 && status == 0)
- r6 |= 1 << i * 2;
-
- if (species == SPECIES_NONE)
- continue;
- if (hp != 0 && (species == SPECIES_EGG || status != 0))
- r6 |= 2 << i * 2;
-
- if (species == SPECIES_NONE)
- continue;
- if (species != SPECIES_EGG && hp == 0)
- r6 |= 3 << i * 2;
- }
-
- gBattleStruct->field_182 = r6;
- *(&gBattleStruct->field_183) = r6 >> 8;
- gBattleStruct->field_183 |= FlagGet(FLAG_SYS_FRONTIER_PASS) << 7;
+ BUFFER_PARTY_VS_SCREEN_STATUS(gPlayerParty, flags, i);
+ gBattleStruct->vsScreenHealthFlagsLo = flags;
+ *(&gBattleStruct->vsScreenHealthFlagsHi) = flags >> 8;
+ gBattleStruct->vsScreenHealthFlagsHi |= FlagGet(FLAG_SYS_FRONTIER_PASS) << 7;
}
static void SetPlayerBerryDataInBattleStruct(void)
@@ -969,7 +975,7 @@ static void CB2_HandleStartBattle(void)
{
*(&gBattleStruct->field_180) = 0;
*(&gBattleStruct->field_181) = 3;
- sub_8036A5C();
+ BufferPartyVsScreenHealth_AtStart();
SetPlayerBerryDataInBattleStruct();
if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
@@ -1005,7 +1011,7 @@ static void CB2_HandleStartBattle(void)
gTasks[taskId].data[1] = 0x10E;
gTasks[taskId].data[2] = 0x5A;
gTasks[taskId].data[5] = 0;
- gTasks[taskId].data[3] = gBattleStruct->field_182 | (gBattleStruct->field_183 << 8);
+ gTasks[taskId].data[3] = gBattleStruct->vsScreenHealthFlagsLo | (gBattleStruct->vsScreenHealthFlagsHi << 8);
gTasks[taskId].data[4] = gBlockRecvBuffer[enemyMultiplayerId][1];
sub_8185F90(gBlockRecvBuffer[playerMultiplayerId][1]);
sub_8185F90(gBlockRecvBuffer[enemyMultiplayerId][1]);
@@ -1177,7 +1183,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
{
*(&gBattleStruct->field_180) = 0;
*(&gBattleStruct->field_181) = 3;
- sub_8036A5C();
+ BufferPartyVsScreenHealth_AtStart();
SetPlayerBerryDataInBattleStruct();
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_180, 32);
gBattleCommunication[MULTIUSE_STATE] = 2;
@@ -1564,7 +1570,7 @@ static void CB2_HandleStartMultiBattle(void)
{
*(&gBattleStruct->field_180) = 0;
*(&gBattleStruct->field_181) = 3;
- sub_8036A5C();
+ BufferPartyVsScreenHealth_AtStart();
SetPlayerBerryDataInBattleStruct();
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_180, 32);
@@ -2064,12 +2070,12 @@ void VBlankCB_Battle(void)
ScanlineEffect_InitHBlankDmaTransfer();
}
-void nullsub_17(struct Sprite *sprite)
+void SpriteCB_VsLetterDummy(struct Sprite *sprite)
{
}
-static void sub_8038B04(struct Sprite *sprite)
+static void SpriteCB_VsLetter(struct Sprite *sprite)
{
if (sprite->data[0] != 0)
sprite->pos1.x = sprite->data[1] + ((sprite->data[2] & 0xFF00) >> 8);
@@ -2087,48 +2093,19 @@ static void sub_8038B04(struct Sprite *sprite)
}
}
-void sub_8038B74(struct Sprite *sprite)
+void SpriteCB_VsLetterInit(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, 1);
- sprite->callback = sub_8038B04;
+ sprite->callback = SpriteCB_VsLetter;
PlaySE(SE_MUGSHOT);
}
-#define BUFFER_PARTY_VS_SCREEN_STATUS(party, flags, i) \
- for ((i) = 0; (i) < PARTY_SIZE; (i)++) \
- { \
- u16 species = GetMonData(&(party)[(i)], MON_DATA_SPECIES2); \
- u16 hp = GetMonData(&(party)[(i)], MON_DATA_HP); \
- u32 status = GetMonData(&(party)[(i)], MON_DATA_STATUS); \
- \
- if (species == SPECIES_NONE) \
- continue; \
- \
- /* Is healthy mon? */ \
- if (species != SPECIES_EGG && hp != 0 && status == 0) \
- (flags) |= 1 << (i) * 2; \
- \
- if (species == SPECIES_NONE) /* Redundant */ \
- continue; \
- \
- /* Is Egg or statused? */ \
- if (hp != 0 && (species == SPECIES_EGG || status != 0)) \
- (flags) |= 2 << (i) * 2; \
- \
- if (species == SPECIES_NONE) /* Redundant */ \
- continue; \
- \
- /* Is fainted? */ \
- if (species != SPECIES_EGG && hp == 0) \
- (flags) |= 3 << (i) * 2; \
- }
-
-static void LoadPartyDataForLinkVsScreen(u8 taskId)
+static void BufferPartyVsScreenHealth_AtEnd(u8 taskId)
{
struct Pokemon *party1 = NULL;
struct Pokemon *party2 = NULL;
u8 multiplayerId = gBattleScripting.multiplayerId;
- u32 statusFlags;
+ u32 flags;
s32 i;
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
@@ -2153,13 +2130,13 @@ static void LoadPartyDataForLinkVsScreen(u8 taskId)
party2 = gEnemyParty;
}
- statusFlags = 0;
- BUFFER_PARTY_VS_SCREEN_STATUS(party1, statusFlags, i);
- gTasks[taskId].data[3] = statusFlags;
+ flags = 0;
+ BUFFER_PARTY_VS_SCREEN_STATUS(party1, flags, i);
+ gTasks[taskId].data[3] = flags;
- statusFlags = 0;
- BUFFER_PARTY_VS_SCREEN_STATUS(party2, statusFlags, i);
- gTasks[taskId].data[4] = statusFlags;
+ flags = 0;
+ BUFFER_PARTY_VS_SCREEN_STATUS(party2, flags, i);
+ gTasks[taskId].data[4] = flags;
}
void CB2_InitEndLinkBattle(void)
@@ -2232,7 +2209,7 @@ void CB2_InitEndLinkBattle(void)
gTasks[taskId].data[1] = 0x10E;
gTasks[taskId].data[2] = 0x5A;
gTasks[taskId].data[5] = 1;
- LoadPartyDataForLinkVsScreen(taskId);
+ BufferPartyVsScreenHealth_AtEnd(taskId);
SetMainCallback2(CB2_EndLinkBattle);
gBattleCommunication[MULTIUSE_STATE] = 0;
@@ -2366,7 +2343,7 @@ static void EndLinkBattleInSteps(void)
}
}
-u32 sub_80391E0(u8 arrayId, u8 caseId)
+u32 GetBattleBgTemplateData(u8 arrayId, u8 caseId)
{
u32 ret = 0;
@@ -2387,7 +2364,7 @@ u32 sub_80391E0(u8 arrayId, u8 caseId)
case 4:
ret = gBattleBgTemplates[arrayId].paletteMode;
break;
- case 5:
+ case 5: // Only this case is used
ret = gBattleBgTemplates[arrayId].priority;
break;
case 6:
@@ -2618,7 +2595,7 @@ static void TryCorrectShedinjaLanguage(struct Pokemon *mon)
}
}
-u32 sub_80397C4(u32 setId, u32 tableId)
+u32 GetBattleWindowTemplatePixelWidth(u32 setId, u32 tableId)
{
return gBattleWindowTemplates[setId][tableId].width * 8;
}
@@ -2670,7 +2647,8 @@ void SpriteCallbackDummy_2(struct Sprite *sprite)
}
-static void sub_80398BC(struct Sprite *sprite) // unused?
+// Unused
+static void sub_80398BC(struct Sprite *sprite)
{
sprite->data[3] = 6;
sprite->data[4] = 1;
@@ -2803,12 +2781,13 @@ void SpriteCb_OpponentMonFromBall(struct Sprite *sprite)
}
}
-void sub_8039BB4(struct Sprite *sprite)
+// This callback is frequently overwritten by SpriteCB_TrainerSlideIn
+void SpriteCB_BattleSpriteStartSlideLeft(struct Sprite *sprite)
{
- sprite->callback = oac_poke_ally_;
+ sprite->callback = SpriteCB_BattleSpriteSlideLeft;
}
-static void oac_poke_ally_(struct Sprite *sprite)
+static void SpriteCB_BattleSpriteSlideLeft(struct Sprite *sprite)
{
if (!(gIntroSlideFlags & 1))
{
@@ -2821,7 +2800,8 @@ static void oac_poke_ally_(struct Sprite *sprite)
}
}
-void sub_80105DC(struct Sprite *sprite)
+// Unused
+static void sub_80105DC(struct Sprite *sprite)
{
sprite->callback = SpriteCallbackDummy_3;
}