diff options
-rw-r--r-- | asm/contest_link_80C2020.s | 327 | ||||
-rw-r--r-- | src/battle/contest_link_80C2020.c | 139 |
2 files changed, 137 insertions, 329 deletions
diff --git a/asm/contest_link_80C2020.s b/asm/contest_link_80C2020.s index e0d1937d3..736ccd5e3 100644 --- a/asm/contest_link_80C2020.s +++ b/asm/contest_link_80C2020.s @@ -5,333 +5,6 @@ .text - thumb_func_start sub_80C255C -sub_80C255C: @ 80C255C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080C2594 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - beq _080C258C - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x4 - bne _080C258C - ldr r0, _080C2598 @ =sub_80C25A4 - movs r1, 0 - bl CreateTask - ldr r1, _080C259C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080C25A0 @ =TaskDummy - str r1, [r0] -_080C258C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C2594: .4byte gReceivedRemoteLinkPlayers -_080C2598: .4byte sub_80C25A4 -_080C259C: .4byte gTasks -_080C25A0: .4byte TaskDummy - thumb_func_end sub_80C255C - - thumb_func_start sub_80C25A4 -sub_80C25A4: @ 80C25A4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080C25B8 @ =sub_80C89DC - ldr r2, _080C25BC @ =sub_80C25C0 - bl SetTaskFuncWithFollowupFunc - pop {r0} - bx r0 - .align 2, 0 -_080C25B8: .4byte sub_80C89DC -_080C25BC: .4byte sub_80C25C0 - thumb_func_end sub_80C25A4 - - thumb_func_start sub_80C25C0 -sub_80C25C0: @ 80C25C0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_8007ECC - lsls r0, 24 - cmp r0, 0 - beq _080C25EC - adds r0, r4, 0 - bl DestroyTask - ldr r2, _080C25F4 @ =gTasks - ldr r0, _080C25F8 @ =gSharedMem + 0x18000 - ldrb r1, [r0, 0x2] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldr r1, _080C25FC @ =sub_80C2600 - str r1, [r0] - bl sub_80C3764 -_080C25EC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C25F4: .4byte gTasks -_080C25F8: .4byte gSharedMem + 0x18000 -_080C25FC: .4byte sub_80C2600 - thumb_func_end sub_80C25C0 - - thumb_func_start sub_80C2600 -sub_80C2600: @ 80C2600 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C2644 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r5, r1, r2 - ldrh r1, [r5, 0x8] - movs r2, 0x8 - ldrsh r0, [r5, r2] - cmp r0, 0 - bne _080C2654 - ldr r0, _080C2648 @ =sub_80C2F64 - movs r1, 0x14 - bl CreateTask - ldr r4, _080C264C @ =gContestText_AnnounceResults - ldr r0, _080C2650 @ =gSharedMem + 0x18000 - ldrb r1, [r0] - adds r0, r4, 0 - bl sub_80C3158 - adds r0, r4, 0 - bl sub_80C34AC - lsls r0, 16 - asrs r0, 16 - movs r3, 0x88 - lsls r3, 3 - movs r1, 0x90 - movs r2, 0x78 - b _080C26A6 - .align 2, 0 -_080C2644: .4byte gTasks -_080C2648: .4byte sub_80C2F64 -_080C264C: .4byte gContestText_AnnounceResults -_080C2650: .4byte gSharedMem + 0x18000 -_080C2654: - cmp r0, 0x1 - bne _080C2668 - ldr r0, _080C2664 @ =gSharedMem + 0x18000 - ldrb r0, [r0, 0x4] - cmp r0, 0 - bne _080C26D4 - b _080C267C - .align 2, 0 -_080C2664: .4byte gSharedMem + 0x18000 -_080C2668: - cmp r0, 0x2 - bne _080C2684 - ldrh r0, [r5, 0xA] - adds r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x15 - bne _080C26D4 - movs r0, 0 -_080C267C: - strh r0, [r5, 0xA] - adds r0, r1, 0x1 - strh r0, [r5, 0x8] - b _080C26D4 -_080C2684: - cmp r0, 0x3 - bne _080C26C0 - ldr r4, _080C26B4 @ =gContestText_PreliminaryResults - ldr r0, _080C26B8 @ =gSharedMem + 0x18000 - ldrb r1, [r0] - adds r0, r4, 0 - bl sub_80C3158 - adds r0, r4, 0 - bl sub_80C34AC - lsls r0, 16 - asrs r0, 16 - ldr r2, _080C26BC @ =0x0000ffff - movs r3, 0x88 - lsls r3, 3 - movs r1, 0x90 -_080C26A6: - bl sub_80C34CC - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - b _080C26D4 - .align 2, 0 -_080C26B4: .4byte gContestText_PreliminaryResults -_080C26B8: .4byte gSharedMem + 0x18000 -_080C26BC: .4byte 0x0000ffff -_080C26C0: - cmp r0, 0x4 - bne _080C26D4 - ldr r0, _080C26DC @ =gSharedMem + 0x18000 - ldrb r0, [r0, 0x4] - cmp r0, 0x2 - bne _080C26D4 - movs r0, 0 - strh r0, [r5, 0x8] - ldr r0, _080C26E0 @ =sub_80C26E4 - str r0, [r5] -_080C26D4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C26DC: .4byte gSharedMem + 0x18000 -_080C26E0: .4byte sub_80C26E4 - thumb_func_end sub_80C2600 - - thumb_func_start sub_80C26E4 -sub_80C26E4: @ 80C26E4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080C2708 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080C2744 - cmp r0, 0x1 - bgt _080C270C - cmp r0, 0 - beq _080C2712 - b _080C2766 - .align 2, 0 -_080C2708: .4byte gTasks -_080C270C: - cmp r0, 0x2 - beq _080C2754 - b _080C2766 -_080C2712: - ldr r5, _080C2738 @ =gSharedMem + 0x18000 - ldrb r0, [r5, 0xA] - cmp r0, 0 - bne _080C2766 - ldrh r1, [r4, 0xC] - adds r0, r1, 0x1 - strh r0, [r4, 0xC] - lsls r1, 24 - lsrs r1, 24 - movs r0, 0 - bl sub_80C40D4 - ldrb r0, [r5, 0x14] - cmp r0, 0 - bne _080C273C - movs r0, 0x2 - strh r0, [r4, 0x8] - b _080C2766 - .align 2, 0 -_080C2738: .4byte gSharedMem + 0x18000 -_080C273C: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080C2766 -_080C2744: - ldr r0, _080C2750 @ =gSharedMem + 0x18000 - ldrb r0, [r0, 0x14] - cmp r0, 0 - bne _080C2766 - strh r0, [r4, 0x8] - b _080C2766 - .align 2, 0 -_080C2750: .4byte gSharedMem + 0x18000 -_080C2754: - movs r0, 0x88 - lsls r0, 3 - bl sub_80C3520 - movs r0, 0 - strh r0, [r4, 0x8] - strh r0, [r4, 0xC] - ldr r0, _080C276C @ =sub_80C2770 - str r0, [r4] -_080C2766: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C276C: .4byte sub_80C2770 - thumb_func_end sub_80C26E4 - - thumb_func_start sub_80C2770 -sub_80C2770: @ 80C2770 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - adds r4, r2, 0 - ldr r5, _080C27BC @ =gSharedMem + 0x18000 - ldrb r3, [r5, 0x4] - cmp r3, 0 - bne _080C27CC - ldr r1, _080C27C0 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0, r1 - ldrh r0, [r1, 0xA] - adds r0, 0x1 - strh r0, [r1, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x15 - bne _080C27DE - strh r3, [r1, 0xA] - ldr r4, _080C27C4 @ =gContestText_Round2Results - ldrb r1, [r5] - adds r0, r4, 0 - bl sub_80C3158 - adds r0, r4, 0 - bl sub_80C34AC - lsls r0, 16 - asrs r0, 16 - ldr r2, _080C27C8 @ =0x0000ffff - movs r3, 0x88 - lsls r3, 3 - movs r1, 0x90 - bl sub_80C34CC - b _080C27DE - .align 2, 0 -_080C27BC: .4byte gSharedMem + 0x18000 -_080C27C0: .4byte gTasks -_080C27C4: .4byte gContestText_Round2Results -_080C27C8: .4byte 0x0000ffff -_080C27CC: - cmp r3, 0x2 - bne _080C27DE - ldr r0, _080C27E4 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080C27E8 @ =sub_80C27EC - str r0, [r1] -_080C27DE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080C27E4: .4byte gTasks -_080C27E8: .4byte sub_80C27EC - thumb_func_end sub_80C2770 - thumb_func_start sub_80C27EC sub_80C27EC: @ 80C27EC push {r4,r5,lr} diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index 1fe6e8cb6..dd09e2465 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -14,13 +14,21 @@ #include "battle.h" #include "contest.h" #include "link.h" +#include "contest_link_80C857C.h" +#include "contest_link_80C2020.h" #define ABS(x) ((x) < 0 ? -(x) : (x)) struct UnkEwramStruct18000 { - u8 filler_00[2]; + u8 unk_00; + u8 filler_01[1]; u8 unk_02; - u8 filler_03[0x15]; + u8 filler_03[1]; + u8 unk_04; + u8 filler_05[5]; + u8 unk_0a; + u8 filler_0b[9]; + u8 unk_14; }; struct UnkEwramStruct18018 { @@ -34,8 +42,19 @@ void sub_80C2430(void); void sub_80C2448(void); void sub_80C24F4(u8 taskId); void sub_80C255C(u8 taskId); +void sub_80C25A4(u8 taskId); +void sub_80C25C0(u8 taskId); void sub_80C2600(u8 taskId); +void sub_80C26E4(u8 taskId); +void sub_80C2770(u8 taskId); +void sub_80C27EC(u8 taskId); void sub_80C2F28(u8 taskId); +void sub_80C2F64(u8 taskId); +void sub_80C3158(const u8 *string, u8 spriteId); +u16 sub_80C34AC(const u8 *string); +void sub_80C34CC(s16 data4, s16 pos0y, u16 data5, s16 data6); +void sub_80C3520(u16 a0); +void sub_80C3764(void); void sub_80C37E4(void); void sub_80C310C(void); void sub_80C30D4(u8 a0, u8 a1); @@ -44,6 +63,7 @@ void sub_80C3698(const u8 *string); void sub_80C3F00(void); u8 sub_80C3990(u8 a0, u8 a1); s8 sub_80C39E4(u8 a0, u8 a1); +void sub_80C40D4(u8 a0, u8 a1); extern const u8 gUnknown_083D17DC[]; extern const u8 gUnknown_083D17E0[]; @@ -235,3 +255,118 @@ void sub_80C24F4(u8 taskId) } } } + +void sub_80C255C(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers && GetLinkPlayerCount() == MAX_LINK_PLAYERS) + { + CreateTask(sub_80C25A4, 0); + gTasks[taskId].func = TaskDummy; + } +} + +void sub_80C25A4(u8 taskId) +{ + SetTaskFuncWithFollowupFunc(taskId, sub_80C89DC, sub_80C25C0); +} + +void sub_80C25C0(u8 taskId) +{ + if (sub_8007ECC()) + { + DestroyTask(taskId); + gTasks[eContestLink80C2020Struct2018000.unk_02].func = sub_80C2600; + sub_80C3764(); + } +} + +void sub_80C2600(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + CreateTask(sub_80C2F64, 20); + sub_80C3158(gContestText_AnnounceResults, eContestLink80C2020Struct2018000.unk_00); + sub_80C34CC(sub_80C34AC(gContestText_AnnounceResults), 0x90, 0x78, 0x440); + gTasks[taskId].data[0]++; + } + else if (gTasks[taskId].data[0] == 1) + { + if (eContestLink80C2020Struct2018000.unk_04 == 0) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[0]++; + } + } + else if (gTasks[taskId].data[0] == 2) + { + if (++gTasks[taskId].data[1] == 0x15) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[0]++; + } + } + else if (gTasks[taskId].data[0] == 3) + { + sub_80C3158(gContestText_PreliminaryResults, eContestLink80C2020Struct2018000.unk_00); + sub_80C34CC(sub_80C34AC(gContestText_PreliminaryResults), 0x90, 0xffff, 0x440); + gTasks[taskId].data[0]++; + } + else if (gTasks[taskId].data[0] == 4) + { + if (eContestLink80C2020Struct2018000.unk_04 == 2) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80C26E4; + } + } +} + +void sub_80C26E4(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (eContestLink80C2020Struct2018000.unk_0a == 0) + { + sub_80C40D4(0, gTasks[taskId].data[2]++); + if (eContestLink80C2020Struct2018000.unk_14 == 0) + { + gTasks[taskId].data[0] = 2; + } + else + { + gTasks[taskId].data[0]++; + } + } + break; + case 1: + if (eContestLink80C2020Struct2018000.unk_14 == 0) + { + gTasks[taskId].data[0] = 0; + } + break; + case 2: + sub_80C3520(0x440); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = sub_80C2770; + break; + } +} + +void sub_80C2770(u8 taskId) +{ + if (eContestLink80C2020Struct2018000.unk_04 == 0) + { + if (++gTasks[taskId].data[1] == 21) + { + gTasks[taskId].data[1] = 0; + sub_80C3158(gContestText_Round2Results, eContestLink80C2020Struct2018000.unk_00); + sub_80C34CC(sub_80C34AC(gContestText_Round2Results), 0x90, 0xffff, 0x440); + } + } + else if (eContestLink80C2020Struct2018000.unk_04 == 2) + { + gTasks[taskId].func = sub_80C27EC; + } +} |