Resolve link comm buffers in gBattleStruct

This commit is contained in:
PikalaxALT
2021-03-12 15:37:28 -05:00
parent 4d1e074514
commit b38a5a85d4
2 changed files with 29 additions and 21 deletions
+15 -7
View File
@@ -357,6 +357,15 @@ struct BattleResults
extern struct BattleResults gBattleResults; extern struct BattleResults gBattleResults;
struct MultiPartnerEnigmaBerry
{
u8 field_0;
u8 field_1;
u8 vsScreenHealthFlagsLo;
u8 vsScreenHealthFlagsHi;
struct BattleEnigmaBerry battleEnigmaBerry;
};
struct BattleStruct struct BattleStruct
{ {
u8 turnEffectsTracker; u8 turnEffectsTracker;
@@ -440,13 +449,12 @@ struct BattleStruct
u8 wishPerishSongState; u8 wishPerishSongState;
u8 wishPerishSongBattlerId; u8 wishPerishSongBattlerId;
u8 field_182; u8 field_182;
u8 field_183; // align 4
u8 field_184; union {
u8 field_185; struct MultiPartnerEnigmaBerry multiPartnerEnigmaBerry;
u8 field_186; struct UnknownPokemonStruct4 multiBattleMons[3];
u8 field_187; } multiBuffer;
struct BattleEnigmaBerry battleEnigmaBerry; u8 padding_1E4[0x1C];
u8 field_1A4[0x5C]; // currently unknown
}; // size == 0x200 bytes }; // size == 0x200 bytes
extern struct BattleStruct *gBattleStruct; extern struct BattleStruct *gBattleStruct;
+14 -14
View File
@@ -731,15 +731,15 @@ static void sub_800FFEC(void)
if (species != SPECIES_EGG && hp == 0) if (species != SPECIES_EGG && hp == 0)
r6 |= 3 << i * 2; r6 |= 3 << i * 2;
} }
gBattleStruct->field_186 = r6; gBattleStruct->multiBuffer.multiPartnerEnigmaBerry.vsScreenHealthFlagsLo = r6;
*(&gBattleStruct->field_187) = r6 >> 8; *(&gBattleStruct->multiBuffer.multiPartnerEnigmaBerry.vsScreenHealthFlagsHi) = r6 >> 8;
} }
static void SetPlayerBerryDataInBattleStruct(void) static void SetPlayerBerryDataInBattleStruct(void)
{ {
s32 i; s32 i;
struct BattleStruct *battleStruct = gBattleStruct; struct BattleStruct *battleStruct = gBattleStruct;
struct BattleEnigmaBerry *battleBerry = &battleStruct->battleEnigmaBerry; struct BattleEnigmaBerry *battleBerry = &battleStruct->multiBuffer.multiPartnerEnigmaBerry.battleEnigmaBerry;
if (IsEnigmaBerryValid() == TRUE) if (IsEnigmaBerryValid() == TRUE)
{ {
@@ -937,11 +937,11 @@ static void CB2_HandleStartBattle(void)
{ {
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
*(&gBattleStruct->field_184) = 1; *(&gBattleStruct->multiBuffer.multiPartnerEnigmaBerry.field_0) = 1;
*(&gBattleStruct->field_185) = 2; *(&gBattleStruct->multiBuffer.multiPartnerEnigmaBerry.field_1) = 2;
sub_800FFEC(); sub_800FFEC();
SetPlayerBerryDataInBattleStruct(); SetPlayerBerryDataInBattleStruct();
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, 32); SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.multiPartnerEnigmaBerry, sizeof(gBattleStruct->multiBuffer.multiPartnerEnigmaBerry));
gBattleCommunication[MULTIUSE_STATE] = 2; gBattleCommunication[MULTIUSE_STATE] = 2;
} }
if (gWirelessCommType != 0) if (gWirelessCommType != 0)
@@ -967,7 +967,7 @@ static void CB2_HandleStartBattle(void)
gTasks[taskId].data[1] = 270; gTasks[taskId].data[1] = 270;
gTasks[taskId].data[2] = 90; gTasks[taskId].data[2] = 90;
gTasks[taskId].data[5] = 0; gTasks[taskId].data[5] = 0;
gTasks[taskId].data[3] = gBattleStruct->field_186 | (gBattleStruct->field_187 << 8); gTasks[taskId].data[3] = gBattleStruct->multiBuffer.multiPartnerEnigmaBerry.vsScreenHealthFlagsLo | (gBattleStruct->multiBuffer.multiPartnerEnigmaBerry.vsScreenHealthFlagsHi << 8);
gTasks[taskId].data[4] = gBlockRecvBuffer[enemyMultiplayerId][1]; gTasks[taskId].data[4] = gBlockRecvBuffer[enemyMultiplayerId][1];
SetDeoxysStats(); SetDeoxysStats();
++gBattleCommunication[MULTIUSE_STATE]; ++gBattleCommunication[MULTIUSE_STATE];
@@ -1056,7 +1056,7 @@ static void CB2_HandleStartBattle(void)
} }
} }
static void sub_80108C4(void) static void PrepareOwnMultiPartnerBuffer(void)
{ {
s32 i, j; s32 i, j;
u8 *nick, *cur; u8 *nick, *cur;
@@ -1083,7 +1083,7 @@ static void sub_80108C4(void)
cur[j] = EOS; cur[j] = EOS;
} }
} }
memcpy(&gBattleStruct->field_184, gMultiPartnerParty, sizeof(gMultiPartnerParty)); memcpy(gBattleStruct->multiBuffer.multiBattleMons, gMultiPartnerParty, sizeof(gMultiPartnerParty));
} }
static void CB2_PreInitMultiBattle(void) static void CB2_PreInitMultiBattle(void)
@@ -1107,8 +1107,8 @@ static void CB2_PreInitMultiBattle(void)
case 0: case 0:
if (gReceivedRemoteLinkPlayers && IsLinkTaskFinished()) if (gReceivedRemoteLinkPlayers && IsLinkTaskFinished())
{ {
sub_80108C4(); PrepareOwnMultiPartnerBuffer();
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, sizeof(gMultiPartnerParty)); SendBlock(bitmask_all_link_players_but_self(), gBattleStruct->multiBuffer.multiBattleMons, sizeof(gBattleStruct->multiBuffer.multiBattleMons));
++gBattleCommunication[MULTIUSE_STATE]; ++gBattleCommunication[MULTIUSE_STATE];
} }
break; break;
@@ -1192,11 +1192,11 @@ static void CB2_HandleStartMultiBattle(void)
{ {
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
*(&gBattleStruct->field_184) = 1; *(&gBattleStruct->multiBuffer.multiPartnerEnigmaBerry.field_0) = 1;
*(&gBattleStruct->field_185) = 2; *(&gBattleStruct->multiBuffer.multiPartnerEnigmaBerry.field_1) = 2;
sub_800FFEC(); sub_800FFEC();
SetPlayerBerryDataInBattleStruct(); SetPlayerBerryDataInBattleStruct();
SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, 32); SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.multiPartnerEnigmaBerry, sizeof(gBattleStruct->multiBuffer.multiPartnerEnigmaBerry));
++gBattleCommunication[MULTIUSE_STATE]; ++gBattleCommunication[MULTIUSE_STATE];
} }
if (gWirelessCommType) if (gWirelessCommType)