diff options
Diffstat (limited to 'src/contest_link.c')
-rw-r--r-- | src/contest_link.c | 231 |
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; |