diff options
author | GriffinR <griffin.g.richards@gmail.com> | 2020-06-18 18:01:32 -0400 |
---|---|---|
committer | GriffinR <griffin.g.richards@gmail.com> | 2020-06-18 18:01:32 -0400 |
commit | d2a760afdbb4555e0b831598491e5fe1f410251d (patch) | |
tree | e527b0fa70a20e2f9aadd12cc77892985c8b0537 /src/contest_link_util.c | |
parent | 24569583e49e66fefd0aeaeac68d2ba9bf206145 (diff) |
Rename contest_link_80FC4F4, 80F57C4, and 81D9DE4
Diffstat (limited to 'src/contest_link_util.c')
-rw-r--r-- | src/contest_link_util.c | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/src/contest_link_util.c b/src/contest_link_util.c new file mode 100644 index 000000000..8060b6cdc --- /dev/null +++ b/src/contest_link_util.c @@ -0,0 +1,331 @@ +#include "global.h" +#include "contest.h" +#include "event_data.h" +#include "link.h" +#include "random.h" +#include "task.h" + +static void sub_81D9F14(u8); +static void sub_81D9F30(u8); +static void sub_81D9F4C(u8); +static void sub_81D9F68(u8); +static void sub_81DA10C(u8); +static void sub_81DA138(u8); +static void sub_81DA160(u8); +static void sub_81DA244(u8); +static void sub_81DA2E8(u8); +static void sub_81DA3B8(u8); +static void sub_81DA488(u8); + +void sub_81D9DE4(u8 taskId) +{ + int gameCleared; + + switch (gTasks[taskId].data[9]) + { + case 0: + gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON); + break; + case 1: + gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON); + break; + case 2: + gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON); + break; + case 3: + gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON); + break; + case 4: + default: + gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON); + break; + } + + gContestMons[gContestPlayerMonIndex].unk2C[0] = gHighestRibbonRank; + gameCleared = FlagGet(FLAG_SYS_GAME_CLEAR) > 0; + gContestMons[gContestPlayerMonIndex].unk2C[1] = gameCleared; + SetTaskFuncWithFollowupFunc(taskId, sub_81DA160, sub_81D9F14); +} + +static void sub_81D9F14(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_81DA244, sub_81D9F30); +} + +static void sub_81D9F30(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_81DA2E8, sub_81D9F4C); +} + +static void sub_81D9F4C(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_81DA3B8, sub_81D9F68); +} + +static void sub_81D9F68(u8 taskId) +{ + u8 i; + u8 rank; + int gameCleared; + u8 data1[4]; + u8 data2[4]; + + memset(data1, 0, sizeof(data1)); + memset(data2, 0, sizeof(data2)); + + for (i = 0; i < gNumLinkContestPlayers; i++) + data1[i] = gTasks[taskId].data[i + 1]; + + i = 0; + if (i < gNumLinkContestPlayers) + { + while (++i < gNumLinkContestPlayers) + { + if (data1[0] != data1[i]) + break; + } + } + + if (i == gNumLinkContestPlayers) + gSpecialVar_0x8004 = 0; + else + gSpecialVar_0x8004 = 1; + + for (i = 0; i < gNumLinkContestPlayers; i++) + data2[i] = gTasks[taskId].data[i + 5]; + + if (gNumLinkContestPlayers != 4 && GetMultiplayerId() == 0) + { + rank = gContestMons[0].unk2C[0]; + for (i = 1; i < gNumLinkContestPlayers; i++) + { + if (rank < gContestMons[i].unk2C[0]) + rank = gContestMons[i].unk2C[0]; + } + + if (rank) + rank--; + + gameCleared = 1; + for (i = 0; i < gNumLinkContestPlayers; i++) + { + if (!gContestMons[i].unk2C[1]) + { + gameCleared = 0; + break; + } + } + + sub_80DACBC(data1[0], rank, gameCleared); + } + + gUnknown_02039F2B = sub_80F86E0(data2); + if (gNumLinkContestPlayers < 4) + SetTaskFuncWithFollowupFunc(taskId, sub_81DA488, sub_81DA10C); + else + gTasks[taskId].func = sub_81DA10C; +} + +static void sub_81DA10C(u8 taskId) +{ + sub_80DB09C(gSpecialVar_ContestCategory); + SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_81DA138); +} + +static void sub_81DA138(u8 taskId) +{ + SortContestants(FALSE); + SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714); +} + +static void sub_81DA160(u8 taskId) +{ + int i; + + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (IsLinkTaskFinished()) + { + if (sub_80FC4F4(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + for (i = 0; i < gNumLinkContestPlayers; i++) + { + memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon)); + sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language); + } + + gTasks[taskId].data[0]++; + } + break; + } +} + +static void sub_81DA244(u8 taskId) +{ + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (GetMultiplayerId() == 0) + { + if (!IsLinkTaskFinished()) + return; + + if (sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == 1) + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC530(0)) + { + memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue)); + memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue)); + gTasks[taskId].data[0]++; + } + break; + } +} + +static void sub_81DA2E8(u8 taskId) +{ + int i; + u16 data[4]; + u16 var0; + + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (IsLinkTaskFinished()) + { + var0 = 0x6E; + if (sub_80FC4F4(&var0, sizeof(var0)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + for (i = 0; i < gNumLinkContestPlayers; i++) + { + data[i] = gBlockRecvBuffer[i][0]; + gTasks[taskId].data[i + 5] = data[i]; + } + + gTasks[taskId].data[0]++; + } + break; + } +} + +static void sub_81DA3B8(u8 taskId) +{ + int i; + u16 data[4]; + u16 var0; + + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (IsLinkTaskFinished()) + { + var0 = gTasks[taskId].data[9]; + if (sub_80FC4F4(&var0, sizeof(var0)) == 1) + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC55C()) + { + for (i = 0; i < gNumLinkContestPlayers; i++) + { + data[i] = gBlockRecvBuffer[i][0]; + gTasks[taskId].data[i + 1] = data[i]; + } + + gTasks[taskId].data[0]++; + } + break; + } +} + +static void sub_81DA488(u8 taskId) +{ + int i; + + if (!sub_80FC670(&gTasks[taskId].data[12])) + return; + + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[12] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (GetMultiplayerId() == 0) + { + if (!IsLinkTaskFinished()) + return; + + if (sub_80FC4F4(&gContestMons[gNumLinkContestPlayers], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1) + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80FC530(0)) + { + memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)); + for (i = gNumLinkContestPlayers; i < 4; i++) + sub_80DFA08(&gContestMons[i], gLinkPlayers[0].language); + + gTasks[taskId].data[0]++; + } + break; + } +} |