Misc battle documentation

This commit is contained in:
GriffinR
2021-01-22 23:22:37 -05:00
parent 4228509e95
commit a392cca928
24 changed files with 456 additions and 494 deletions

View File

@@ -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)
{
u16 r6 = 0;
u16 species = 0;
u16 hp = 0;
u32 status = 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;
#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; \
}
gBattleStruct->field_182 = r6;
*(&gBattleStruct->field_183) = r6 >> 8;
gBattleStruct->field_183 |= FlagGet(FLAG_SYS_FRONTIER_PASS) << 7;
// For Vs Screen at link battle start
static void BufferPartyVsScreenHealth_AtStart(void)
{
u16 flags = 0;
s32 i;
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;
}