Misc battle documentation
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user