diff options
-rw-r--r-- | asm/contest_link_80C2020.s | 232 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/battle/contest_link_80C2020.c | 83 |
3 files changed, 83 insertions, 233 deletions
diff --git a/asm/contest_link_80C2020.s b/asm/contest_link_80C2020.s deleted file mode 100644 index 22f916120..000000000 --- a/asm/contest_link_80C2020.s +++ /dev/null @@ -1,232 +0,0 @@ - .include "constants/gba_constants.inc" - .include "include/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80C4A44 -sub_80C4A44: @ 80C4A44 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r5, r0, 24 - movs r3, 0 - ldr r0, _080C4AA0 @ =gSpecialVar_0x8004 - mov r8, r0 - add r1, sp, 0x4 - mov r12, r1 - lsls r1, r5, 2 - adds r0, r1, r5 - lsls r4, r0, 3 - ldr r6, _080C4AA4 @ =gTasks + 0x8 - adds r7, r1, 0 -_080C4A64: - mov r0, sp - adds r2, r0, r3 - adds r1, r3, 0x1 - lsls r0, r1, 1 - adds r0, r4 - adds r0, r6 - ldrh r0, [r0] - strb r0, [r2] - lsls r1, 24 - lsrs r3, r1, 24 - cmp r3, 0x3 - bls _080C4A64 - movs r3, 0 - mov r2, sp -_080C4A80: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bhi _080C4A96 - mov r0, sp - adds r1, r0, r3 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - beq _080C4A80 -_080C4A96: - cmp r3, 0x4 - bne _080C4AA8 - movs r0, 0 - b _080C4AAA - .align 2, 0 -_080C4AA0: .4byte gSpecialVar_0x8004 -_080C4AA4: .4byte gTasks + 0x8 -_080C4AA8: - movs r0, 0x1 -_080C4AAA: - mov r1, r8 - strh r0, [r1] - movs r3, 0 - mov r4, r12 - adds r0, r7, r5 - lsls r2, r0, 3 - ldr r6, _080C4AF8 @ =gTasks + 0x8 -_080C4AB8: - adds r1, r4, r3 - adds r0, r3, 0x5 - lsls r0, 1 - adds r0, r2 - adds r0, r6 - ldrh r0, [r0] - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3 - bls _080C4AB8 - mov r0, r12 - bl sub_80C4B34 - ldr r1, _080C4AFC @ =gUnknown_0203869B - strb r0, [r1] - ldr r0, _080C4B00 @ =gSpecialVar_ContestCategory - ldrb r0, [r0] - bl sub_80AE82C - ldr r1, _080C4B04 @ =sub_80C8EBC - ldr r2, _080C4B08 @ =sub_80C4B0C - adds r0, r5, 0 - bl SetTaskFuncWithFollowupFunc - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C4AF8: .4byte gTasks + 0x8 -_080C4AFC: .4byte gUnknown_0203869B -_080C4B00: .4byte gSpecialVar_ContestCategory -_080C4B04: .4byte sub_80C8EBC -_080C4B08: .4byte sub_80C4B0C - thumb_func_end sub_80C4A44 - - thumb_func_start sub_80C4B0C -sub_80C4B0C: @ 80C4B0C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - bl sub_80B0F28 - ldr r1, _080C4B2C @ =sub_80C8F34 - ldr r2, _080C4B30 @ =sub_80C4B5C - adds r0, r4, 0 - bl SetTaskFuncWithFollowupFunc - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C4B2C: .4byte sub_80C8F34 -_080C4B30: .4byte sub_80C4B5C - thumb_func_end sub_80C4B0C - - thumb_func_start sub_80C4B34 -sub_80C4B34: @ 80C4B34 - push {r4,lr} - adds r3, r0, 0 - movs r4, 0 - movs r2, 0x1 -_080C4B3C: - adds r0, r3, r4 - adds r1, r3, r2 - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - bcs _080C4B4C - lsls r0, r2, 24 - lsrs r4, r0, 24 -_080C4B4C: - adds r2, 0x1 - cmp r2, 0x3 - ble _080C4B3C - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80C4B34 - - thumb_func_start sub_80C4B5C -sub_80C4B5C: @ 80C4B5C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080C4B84 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x1 - bne _080C4B90 - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _080C4B9E - ldr r0, _080C4B88 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080C4B8C @ =sub_80C4BA4 - str r0, [r1] - b _080C4B9E - .align 2, 0 -_080C4B84: .4byte gSpecialVar_0x8004 -_080C4B88: .4byte gTasks -_080C4B8C: .4byte sub_80C4BA4 -_080C4B90: - adds r0, r4, 0 - bl DestroyTask - bl ScriptContext2_Disable - bl EnableBothScriptContexts -_080C4B9E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80C4B5C - - thumb_func_start sub_80C4BA4 -sub_80C4BA4: @ 80C4BA4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_800832C - ldr r1, _080C4BC4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080C4BC8 @ =sub_80C4BCC - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080C4BC4: .4byte gTasks -_080C4BC8: .4byte sub_80C4BCC - thumb_func_end sub_80C4BA4 - - thumb_func_start sub_80C4BCC -sub_80C4BCC: @ 80C4BCC - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - ldr r0, _080C4BEC @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _080C4BE8 - adds r0, r1, 0 - bl DestroyTask - bl ScriptContext2_Disable - bl EnableBothScriptContexts -_080C4BE8: - pop {r0} - bx r0 - .align 2, 0 -_080C4BEC: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_80C4BCC - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index eba7eb57f..cc9b22ffe 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -159,7 +159,6 @@ SECTIONS { src/secret_base.o(.text); src/tv.o(.text); src/battle/contest_link_80C2020.o(.text); - asm/contest_link_80C2020.o(.text); src/script_pokemon_util_80C4BF0.o(.text); src/field_poison.o(.text); src/pokemon_size_record.o(.text); diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index 14424a4bf..38c1d30d2 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -122,6 +122,10 @@ void sub_80C49F0(u8 taskId); void sub_80C4A0C(u8 taskId); void sub_80C4A28(u8 taskId); void sub_80C4A44(u8 taskId); +void sub_80C4B0C(u8 taskId); +void sub_80C4B5C(u8 taskId); +void sub_80C4BA4(u8 taskId); +void sub_80C4BCC(u8 taskId); const u16 gUnknown_083D1624[] = INCBIN_U16("graphics/unknown/unknown_3D1624/0.4bpp"); const u16 gUnknown_083D1644[] = INCBIN_U16("graphics/unknown/unknown_3D1624/1.4bpp"); @@ -2821,3 +2825,82 @@ void sub_80C4A28(u8 taskId) { SetTaskFuncWithFollowupFunc(taskId, sub_80C8938, sub_80C4A44); } + +void sub_80C4A44(u8 taskId) +{ + u8 i; + u8 sp0[4]; + u8 sp4[4]; + + for (i = 0; i < 4; i++) + sp0[i] = gTasks[taskId].data[i + 1]; + + for (i = 0; i < 4; i++) + { + if (sp0[0] != sp0[i]) + break; + } + + if (i == 4) + gSpecialVar_0x8004 = 0; + else + gSpecialVar_0x8004 = 1; + + for (i = 0; i < 4; i++) + sp4[i] = gTasks[taskId].data[i + 5]; + + gUnknown_0203869B = sub_80C4B34(sp4); + sub_80AE82C(gSpecialVar_ContestCategory); + SetTaskFuncWithFollowupFunc(taskId, sub_80C8EBC, sub_80C4B0C); +} + +void sub_80C4B0C(u8 taskId) +{ + sub_80B0F28(0); + SetTaskFuncWithFollowupFunc(taskId, sub_80C8F34, sub_80C4B5C); +} + +u8 sub_80C4B34(u8 * a0) +{ + s32 i; + u8 result = 0; + + for (i = 1; i < 4; i++) + { + if (a0[result] < a0[i]) + result = i; + } + + return result; +} + +void sub_80C4B5C(u8 taskId) +{ + if (gSpecialVar_0x8004 == 1) + { + if (IsLinkTaskFinished()) + gTasks[taskId].func = sub_80C4BA4; + } + else + { + DestroyTask(taskId); + ScriptContext2_Disable(); + EnableBothScriptContexts(); + } +} + +void sub_80C4BA4(u8 taskId) +{ + sub_800832C(); + gTasks[taskId].func = sub_80C4BCC; +} + +void sub_80C4BCC(u8 taskId) +{ + if (!gReceivedRemoteLinkPlayers) + { + DestroyTask(taskId); + ScriptContext2_Disable(); + EnableBothScriptContexts(); + } +} |