summaryrefslogtreecommitdiff
path: root/src/contest_link.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/contest_link.c')
-rw-r--r--src/contest_link.c231
1 files changed, 119 insertions, 112 deletions
diff --git a/src/contest_link.c b/src/contest_link.c
index eb688f55e..9241102e7 100644
--- a/src/contest_link.c
+++ b/src/contest_link.c
@@ -12,7 +12,11 @@
static void sub_80FC5C0(u8);
static void sub_80FC5DC(u8);
-bool32 sub_80FC4F4(void *src, u16 size)
+#define tState data[0]
+#define tCategory data[9]
+#define tTimer data[11]
+
+bool32 LinkContest_SendBlock(void *src, u16 size)
{
memcpy(gDecompressionBuffer, src, size);
if (SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, size))
@@ -21,21 +25,21 @@ bool32 sub_80FC4F4(void *src, u16 size)
return FALSE;
}
-bool8 sub_80FC530(u8 arg0)
+bool8 LinkContest_GetBlockReceived(u8 flag)
{
- u8 mask = (1 << arg0);
+ u8 mask = (1 << flag);
if (!(GetBlockReceivedStatus() & mask))
{
return FALSE;
}
else
{
- ResetBlockReceivedFlag(arg0);
+ ResetBlockReceivedFlag(flag);
return TRUE;
}
}
-bool8 sub_80FC55C(void)
+bool8 LinkContest_GetBlockReceivedFromAllPlayers(void)
{
if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
{
@@ -52,10 +56,10 @@ void sub_80FC580(u8 taskId)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
gBlockRecvBuffer[i][0] = 0xFF;
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
gTasks[taskId].func = sub_80FC5C0;
}
@@ -77,6 +81,7 @@ static void sub_80FC5DC(u8 taskId)
if (gWirelessCommType == 1)
gLinkContestFlags = LINK_CONTEST_FLAG_IS_LINK | LINK_CONTEST_FLAG_IS_WIRELESS;
+ // Get number of players using Emerald/FRLG
for (i = 0; i < gNumLinkContestPlayers && (u32)(gLinkPlayers[i].version & 0xFF) - 1 > VERSION_RUBY - 1; i++)
;
@@ -86,22 +91,22 @@ static void sub_80FC5DC(u8 taskId)
SwitchTaskToFollowupFunc(taskId);
}
-bool32 sub_80FC670(s16 *arg0)
+bool32 sub_80FC670(s16 *state)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
return TRUE;
- switch (*arg0)
+ switch (*state)
{
case 0:
if (IsLinkTaskFinished())
{
sub_800ADF8();
- (*arg0)++;
+ (*state)++;
}
return FALSE;
case 1:
- (*arg0)++;
+ (*state)++;
return FALSE;
default:
if (IsLinkTaskFinished() != TRUE)
@@ -118,7 +123,7 @@ void sub_80FC6BC(u8 taskId)
if (!sub_80FC670(&gTasks[taskId].data[12]))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (GetMultiplayerId() == 0)
@@ -126,37 +131,37 @@ void sub_80FC6BC(u8 taskId)
if (IsLinkTaskFinished())
{
memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
- gTasks[taskId].data[0] = 10;
+ gTasks[taskId].tState = 10;
}
}
else
{
memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tState = 1;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
{
memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
- sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language);
+ StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language);
}
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (++gTasks[taskId].data[11] > 300)
+ if (++gTasks[taskId].tTimer > 300)
{
sub_800A4D8(2);
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tState = 1;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[11] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTimer = 0;
gTasks[taskId].data[12] = 0;
SwitchTaskToFollowupFunc(taskId);
break;
@@ -165,29 +170,29 @@ void sub_80FC6BC(u8 taskId)
void sub_80FC804(u8 taskId)
{
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (GetMultiplayerId() == 0)
{
- if (IsLinkTaskFinished() && sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == TRUE)
- gTasks[taskId].data[0]++;
+ if (IsLinkTaskFinished() && LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == TRUE)
+ gTasks[taskId].tState++;
}
else
{
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC530(0))
+ if (LinkContest_GetBlockReceived(0))
{
memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
@@ -200,91 +205,93 @@ void sub_80FC894(u8 taskId)
if (!sub_80FC670(&gTasks[taskId].data[12]))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
- gBlockSendBuffer[0] = gTasks[taskId].data[9];
+ gBlockSendBuffer[0] = gTasks[taskId].tCategory;
if (GetMultiplayerId() == 0)
{
if (IsLinkTaskFinished())
- gTasks[taskId].data[0] = 10;
+ gTasks[taskId].tState = 10;
}
else
{
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
for (i = 0; i < gNumLinkContestPlayers; i++)
gTasks[taskId].data[i + 1] = gBlockRecvBuffer[i][0];
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (++gTasks[taskId].data[11] > 10)
+ if (++gTasks[taskId].tTimer > 10)
{
sub_800A4D8(2);
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tState = 1;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[11] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTimer = 0;
gTasks[taskId].data[12] = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FC998(u8 taskId)
+void Task_LinkContest_CommunicateMonIdxs(u8 taskId)
{
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
- gTasks[taskId].data[0]++;
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
+ gTasks[taskId].tState++;
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
}
-void sub_80FC9F8(u8 taskId)
+void Task_LinkContest_CommunicateMoveSelections(u8 taskId)
{
int i;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE)
- gTasks[taskId].data[0]++;
+ // Send player's move selection
+ if (LinkContest_SendBlock(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
+ // Receive partners' move selections
for (i = 0; i < gNumLinkContestPlayers; i++)
eContestantStatus[i].currMove = gBlockRecvBuffer[i][0];
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
@@ -292,20 +299,20 @@ void sub_80FC9F8(u8 taskId)
void sub_80FCACC(u8 taskId)
{
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonTotalPoints));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 2:
@@ -315,53 +322,53 @@ void sub_80FCACC(u8 taskId)
if (gTasks[taskId].data[1]++ > 10)
{
gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 3:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gUnknown_02039F10, sizeof(gUnknown_02039F10)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gUnknown_02039F10, sizeof(gUnknown_02039F10)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 4:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
memcpy(gUnknown_02039F10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F10));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 6:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 7:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
memcpy(gContestMonRound2Points, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonRound2Points));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 9:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestFinalStandings));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
@@ -369,20 +376,20 @@ void sub_80FCACC(u8 taskId)
void sub_80FCC88(u8 taskId)
{
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(eContestantStatus, 4 * sizeof(struct ContestantStatus)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(eContestantStatus, 4 * sizeof(struct ContestantStatus)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], 4 * sizeof(struct ContestantStatus));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 2:
@@ -392,53 +399,53 @@ void sub_80FCC88(u8 taskId)
if (gTasks[taskId].data[1]++ > 10)
{
gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 3:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestResources->field_8, sizeof(struct UnknownContestStruct7)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestResources->field_8, sizeof(struct UnknownContestStruct7)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 4:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
memcpy(gContestResources->field_8, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct7));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 6:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestResources->field_10, sizeof(struct UnknownContestStruct5)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestResources->field_10, sizeof(struct UnknownContestStruct5)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 7:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
memcpy(gContestResources->field_10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct5));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 9:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
SwitchTaskToFollowupFunc(taskId);
break;
}
@@ -451,39 +458,39 @@ void sub_80FCE48(u8 taskId)
if (!sub_80FC670(&gTasks[taskId].data[12]))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
gBlockSendBuffer[0] = 0x6E;
if (GetMultiplayerId() == 0)
{
if (IsLinkTaskFinished())
- gTasks[taskId].data[0] = 10;
+ gTasks[taskId].tState = 10;
}
else
{
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
gTasks[taskId].data[i + 5] = gBlockRecvBuffer[i][0];
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
case 10:
- if (++gTasks[taskId].data[11] > 10)
+ if (++gTasks[taskId].tTimer > 10)
{
sub_800A4D8(2);
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tState = 1;
}
break;
default:
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[11] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTimer = 0;
gTasks[taskId].data[12] = 0;
SwitchTaskToFollowupFunc(taskId);
break;
@@ -495,24 +502,24 @@ void sub_80FCF40(u8 taskId)
if (!sub_80FC670(&gTasks[taskId].data[12]))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestMonConditions, sizeof(gContestMonConditions)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestMonConditions, sizeof(gContestMonConditions)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonConditions));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
gTasks[taskId].data[12] = 0;
SwitchTaskToFollowupFunc(taskId);
break;
@@ -524,24 +531,24 @@ void sub_80FCFD0(u8 taskId)
if (!sub_80FC670(&gTasks[taskId].data[12]))
return;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
if (IsLinkTaskFinished())
{
- if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
- gTasks[taskId].data[0]++;
+ if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
+ gTasks[taskId].tState++;
}
break;
case 1:
- if (sub_80FC55C())
+ if (LinkContest_GetBlockReceivedFromAllPlayers())
{
memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
break;
default:
- gTasks[taskId].data[0] = 0;
+ gTasks[taskId].tState = 0;
gTasks[taskId].data[12] = 0;
SwitchTaskToFollowupFunc(taskId);
break;