diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/contest.c | 97 | ||||
-rw-r--r-- | src/item.c | 2 |
2 files changed, 94 insertions, 5 deletions
diff --git a/src/contest.c b/src/contest.c index 2e61b4629..2c56eb14c 100644 --- a/src/contest.c +++ b/src/contest.c @@ -30,18 +30,25 @@ #include "tv.h" #include "scanline_effect.h" #include "util.h" +#include "contest_link_80F57C4.h" #define DESTROY_POINTER(ptr) \ free(ptr); \ ptr = NULL; -void sub_80DD590(void); void sub_80D782C(void); +void sub_80D7C7C(u8 taskId); +void sub_80D7CB4(u8 taskId); +void sub_80D7DAC(u8 taskId); +void sub_80D7DC8(u8 taskId); +void sub_80D7DE8(u8 taskId); +void sub_80D80C8(u8 taskId); +void sub_80D823C(void); +void sub_80DBF68(void); void sub_80DCE58(u8); +void sub_80DD590(void); bool8 sub_80D7E44(u8 *); void sub_80DE224(void); -void sub_80D7C7C(u8 taskId); -void sub_80D823C(void); void vblank_cb_battle(void); EWRAM_DATA struct ContestPokemon gContestMons[4] = {0}; @@ -53,7 +60,9 @@ EWRAM_DATA u8 gContestFinalStandings[4] = {0}; EWRAM_DATA u8 gUnknown_02039F24 = 0; EWRAM_DATA u8 gContestPlayerMonIndex = 0; EWRAM_DATA u8 gUnknown_02039F26[4] = {0}; -EWRAM_DATA bool8 gIsLinkContest = FALSE; +EWRAM_DATA u8 gIsLinkContest = 0; +// Bit 0: Is a link contest +// Bit 1: Link contest uses wireless adapter EWRAM_DATA u8 gUnknown_02039F2B = 0; EWRAM_DATA u16 gSpecialVar_ContestCategory = 0; EWRAM_DATA u16 gSpecialVar_ContestRank = 0; @@ -61,6 +70,9 @@ EWRAM_DATA u8 gUnknown_02039F30 = 0; EWRAM_DATA u8 gUnknown_02039F31 = 0; EWRAM_DATA struct ContestResources * gContestResources = NULL; EWRAM_DATA u8 gUnknown_02039F38 = 0; +EWRAM_DATA struct ContestWinner gUnknown_02039F3C = {0}; + +u32 gContestRngValue; extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; @@ -89,7 +101,7 @@ void TaskDummy1(u8 taskId) void ResetLinkContestBoolean(void) { - gIsLinkContest = FALSE; + gIsLinkContest = 0; } void sub_80D7678(void) @@ -309,3 +321,78 @@ void sub_80D7B24(void) } } +void sub_80D7C7C(u8 taskId) +{ + if (!gPaletteFade.active) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80D7CB4; + } +} + +void sub_80D7CB4(u8 taskId) +{ + if (gIsLinkContest & 1) + { + if (gIsLinkContest & 2) + { + switch (gTasks[taskId].data[0]) + { + case 0: + sub_80DBF68(); + gTasks[taskId].data[0]++; + // fallthrough + case 1: + if (sub_800A520()) + { + sub_800ADF8(); + gTasks[taskId].data[0]++; + } + return; + case 2: + if (sub_800A520() != TRUE) + return; + gTasks[taskId].data[0]++; + break; + } + } + + if (!gPaletteFade.active) + { + gPaletteFade.bufferTransferDisabled = FALSE; + if (!(gIsLinkContest & 2)) + sub_80DBF68(); + CreateTask(sub_80D7DAC, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = TaskDummy1; + } + } + else + { + gTasks[taskId].func = sub_80D80C8; + } +} + +void sub_80D7DAC(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80D7DC8); +} + +void sub_80D7DC8(u8 taskId) +{ + gTasks[taskId].data[0] = 1; + gTasks[taskId].func = sub_80D7DE8; +} + +void sub_80D7DE8(u8 taskId) +{ + gTasks[taskId].data[0]--; + if (gTasks[taskId].data[0] <= 0) + { + GetMultiplayerId(); // unused return value + DestroyTask(taskId); + gTasks[gContestResources->field_0->mainTaskId].func = sub_80D80C8; + gRngValue = gContestRngValue; + } +} + diff --git a/src/item.c b/src/item.c index a17599db9..0c60c417d 100644 --- a/src/item.c +++ b/src/item.c @@ -25,6 +25,8 @@ enum KEYITEMS_POCKET }; +EWRAM_DATA struct BagPocket gBagPockets[5] = {}; + u16 GetBagItemQuantity(u16* quantity) { return gSaveBlock2Ptr->encryptionKey ^ *quantity; |