diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-02 21:36:30 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-02 21:36:30 -0500 |
commit | 8594e7f72d070ce10fcc41a8c2dfe32420e7c560 (patch) | |
tree | d88950f47992d61de0f560abb1e2ecede2830655 | |
parent | f77b0feba6f1152216eba3b2c1edf63ba76c5a80 (diff) |
Port berry_crush_2 from emerald
-rw-r--r-- | asm/berry_crush_2.s | 3494 | ||||
-rw-r--r-- | data/berry_crush.s | 74 | ||||
-rw-r--r-- | include/berry.h | 2 | ||||
-rw-r--r-- | include/berry_crush.h | 12 | ||||
-rw-r--r-- | include/item.h | 1 | ||||
-rw-r--r-- | include/link_rfu.h | 1 | ||||
-rw-r--r-- | include/math_util.h | 1 | ||||
-rw-r--r-- | include/strings.h | 11 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/berry_crush.c | 1 | ||||
-rw-r--r-- | src/berry_crush_2.c | 1481 |
11 files changed, 1510 insertions, 3571 deletions
diff --git a/asm/berry_crush_2.s b/asm/berry_crush_2.s deleted file mode 100644 index e5079a5a9..000000000 --- a/asm/berry_crush_2.s +++ /dev/null @@ -1,3494 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_814BB4C -sub_814BB4C: @ 814BB4C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r2, 0 - lsls r0, 16 - lsrs r5, r0, 16 - lsls r1, 24 - lsrs r4, r1, 24 - mov r8, r4 - bl sub_814B6F0 - adds r6, r0, 0 - cmp r5, 0x19 - bls _0814BB6A - movs r5, 0 -_0814BB6A: - cmp r4, 0 - beq _0814BB74 - cmp r4, 0x1 - beq _0814BBA0 - b _0814BBAA -_0814BB74: - cmp r5, 0 - beq _0814BB88 - ldr r0, _0814BB9C @ =gUnknown_846E34C - lsls r1, r5, 2 - adds r1, r0 - ldr r2, [r1] - adds r0, r6, 0 - adds r1, r7, 0 - bl _call_via_r2 -_0814BB88: - ldrb r0, [r6, 0xE] - cmp r0, 0x19 - bls _0814BB92 - mov r0, r8 - strb r0, [r6, 0xE] -_0814BB92: - ldr r0, _0814BB9C @ =gUnknown_846E34C - ldrb r1, [r6, 0xE] - lsls r1, 2 - b _0814BBA4 - .align 2, 0 -_0814BB9C: .4byte gUnknown_846E34C -_0814BBA0: - ldr r0, _0814BBB4 @ =gUnknown_846E34C - lsls r1, r5, 2 -_0814BBA4: - adds r1, r0 - ldr r0, [r1] - str r0, [r6, 0x4] -_0814BBAA: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0814BBB4: .4byte gUnknown_846E34C - thumb_func_end sub_814BB4C - - thumb_func_start sub_814BBB8 -sub_814BBB8: @ 814BBB8 - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - ldrb r2, [r1] - ldrb r3, [r1, 0x1] - lsls r3, 8 - orrs r2, r3 - ldrb r3, [r1, 0x2] - lsls r3, 16 - orrs r2, r3 - ldrb r3, [r1, 0x3] - lsls r3, 24 - adds r0, r2, 0 - orrs r0, r3 - ldrb r2, [r1, 0x9] - strb r2, [r1] - ldrb r4, [r1, 0x8] - lsls r4, 8 - ldrb r2, [r1, 0x7] - orrs r4, r2 - ldr r5, _0814BC0C @ =gPaletteFade - ldrb r3, [r5, 0x8] - movs r2, 0x7F - ands r2, r3 - strb r2, [r5, 0x8] - movs r5, 0x4 - ldrsb r5, [r1, r5] - ldrb r2, [r1, 0x5] - ldrb r3, [r1, 0x6] - str r4, [sp] - adds r1, r5, 0 - bl BeginNormalPaletteFade - bl UpdatePaletteFade - movs r0, 0x2 - strb r0, [r6, 0xE] - movs r0, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0814BC0C: .4byte gPaletteFade - thumb_func_end sub_814BBB8 - - thumb_func_start sub_814BC10 -sub_814BC10: @ 814BC10 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4, 0xC] - cmp r0, 0x1 - beq _0814BC44 - cmp r0, 0x1 - bgt _0814BC26 - cmp r0, 0 - beq _0814BC30 - b _0814BC66 -_0814BC26: - cmp r0, 0x2 - beq _0814BC4A - cmp r0, 0x3 - beq _0814BC56 - b _0814BC66 -_0814BC30: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _0814BC6C - ldrb r0, [r5] - cmp r0, 0 - bne _0814BC66 - movs r0, 0x3 - b _0814BC6A -_0814BC44: - bl LinkRfu_SetRfuFuncToSend6600 - b _0814BC66 -_0814BC4A: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _0814BC66 - b _0814BC6C -_0814BC56: - ldrb r0, [r4, 0xF] - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - movs r0, 0 - strb r0, [r4, 0xC] - b _0814BC6E -_0814BC66: - ldrb r0, [r4, 0xC] - adds r0, 0x1 -_0814BC6A: - strb r0, [r4, 0xC] -_0814BC6C: - movs r0, 0 -_0814BC6E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_814BC10 - - thumb_func_start sub_814BC74 -sub_814BC74: @ 814BC74 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r7, r0, 0 - adds r5, r1, 0 - ldrb r4, [r5, 0x3] - lsls r4, 8 - ldrb r0, [r5, 0x2] - orrs r4, r0 - ldrb r6, [r7, 0xC] - cmp r6, 0x1 - beq _0814BD20 - cmp r6, 0x1 - bgt _0814BC98 - cmp r6, 0 - beq _0814BCA2 - b _0814BD68 -_0814BC98: - cmp r6, 0x2 - beq _0814BD38 - cmp r6, 0x3 - beq _0814BD48 - b _0814BD68 -_0814BCA2: - movs r0, 0 - movs r1, 0 - bl DrawDialogueFrame - ldrb r1, [r5, 0x1] - movs r0, 0x2 - mov r8, r0 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _0814BCF0 - ldr r4, _0814BCE8 @ =gStringVar4 - ldr r1, _0814BCEC @ =gUnknown_846E328 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - adds r0, r4, 0 - bl StringExpandPlaceholders - ldrb r3, [r7, 0xB] - str r6, [sp] - mov r0, r8 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x2 - adds r2, r4, 0 - bl AddTextPrinterParameterized2 - b _0814BD12 - .align 2, 0 -_0814BCE8: .4byte gStringVar4 -_0814BCEC: .4byte gUnknown_846E328 -_0814BCF0: - ldr r1, _0814BD1C @ =gUnknown_846E328 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - ldrb r3, [r7, 0xB] - str r4, [sp] - mov r0, r8 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x2 - bl AddTextPrinterParameterized2 -_0814BD12: - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - b _0814BD68 - .align 2, 0 -_0814BD1C: .4byte gUnknown_846E328 -_0814BD20: - movs r0, 0 - bl IsTextPrinterActive - lsls r0, 16 - cmp r0, 0 - bne _0814BD6E - cmp r4, 0 - bne _0814BD68 - ldrb r0, [r7, 0xC] - adds r0, 0x1 - strb r0, [r7, 0xC] - b _0814BD68 -_0814BD38: - ldr r0, _0814BD44 @ =gMain - ldrh r0, [r0, 0x2E] - ands r4, r0 - cmp r4, 0 - bne _0814BD68 - b _0814BD6E - .align 2, 0 -_0814BD44: .4byte gMain -_0814BD48: - ldrb r1, [r5, 0x1] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0814BD5A - movs r0, 0 - movs r1, 0x1 - bl ClearDialogWindowAndFrame -_0814BD5A: - ldrb r0, [r7, 0xE] - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - ldrb r0, [r5, 0x4] - b _0814BD6C -_0814BD68: - ldrb r0, [r7, 0xC] - adds r0, 0x1 -_0814BD6C: - strb r0, [r7, 0xC] -_0814BD6E: - movs r0, 0 - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_814BC74 - - thumb_func_start sub_814BD7C -sub_814BD7C: @ 814BD7C - push {r4,lr} - adds r4, r0, 0 - bl sub_814D5C8 - cmp r0, 0 - beq _0814BD94 - ldrb r0, [r4, 0xE] - adds r2, r4, 0 - adds r2, 0x36 - movs r1, 0 - bl sub_814BB4C -_0814BD94: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_814BD7C - - thumb_func_start sub_814BD9C -sub_814BD9C: @ 814BD9C - push {r4,lr} - adds r4, r0, 0 - bl sub_814D888 - cmp r0, 0 - beq _0814BDB4 - ldrb r0, [r4, 0xE] - adds r2, r4, 0 - adds r2, 0x36 - movs r1, 0 - bl sub_814BB4C -_0814BDB4: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_814BD9C - - thumb_func_start sub_814BDBC -sub_814BDBC: @ 814BDBC - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0xC] - cmp r0, 0 - beq _0814BDCC - cmp r0, 0x1 - beq _0814BDD2 - b _0814BDFC -_0814BDCC: - bl LinkRfu_SetRfuFuncToSend6600 - b _0814BDFC -_0814BDD2: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814BE02 - ldr r0, _0814BDF8 @ =0x00000111 - bl PlayNewMapMusic - movs r0, 0x7 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - movs r1, 0 - movs r0, 0x3 - strh r0, [r4, 0x12] - strb r1, [r4, 0xC] - b _0814BE02 - .align 2, 0 -_0814BDF8: .4byte 0x00000111 -_0814BDFC: - ldrb r0, [r4, 0xC] - adds r0, 0x1 - strb r0, [r4, 0xC] -_0814BE02: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_814BDBC - - thumb_func_start sub_814BE0C -sub_814BE0C: @ 814BE0C - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4, 0xC] - cmp r0, 0 - beq _0814BE22 - cmp r0, 0x1 - beq _0814BE48 - adds r0, 0x1 - b _0814BE58 -_0814BE22: - adds r0, r4, 0 - bl sub_814D4D8 - movs r0, 0x1 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0 - movs r2, 0x1 - movs r3, 0 - bl sub_814D5A4 - movs r0, 0x7 - strb r0, [r4, 0xE] - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - b _0814BE5A -_0814BE48: - movs r0, 0x8 - strb r0, [r4, 0xE] - movs r0, 0x5 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - movs r0, 0x2 -_0814BE58: - strb r0, [r4, 0xC] -_0814BE5A: - movs r0, 0 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_814BE0C - - thumb_func_start sub_814BE64 -sub_814BE64: @ 814BE64 - push {lr} - movs r1, 0 - str r1, [r0, 0x4] - ldr r0, _0814BE78 @ =sub_814B8F0 - bl SetMainCallback2 - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0814BE78: .4byte sub_814B8F0 - thumb_func_end sub_814BE64 - - thumb_func_start sub_814BE7C -sub_814BE7C: @ 814BE7C - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r2, r1, 0 - ldrb r0, [r5, 0xC] - cmp r0, 0x5 - bls _0814BE8C - b _0814BFC0 -_0814BE8C: - lsls r0, 2 - ldr r1, _0814BE98 @ =_0814BE9C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0814BE98: .4byte _0814BE9C - .align 2, 0 -_0814BE9C: - .4byte _0814BEB4 - .4byte _0814BED4 - .4byte _0814BEDA - .4byte _0814BF0A - .4byte _0814BF1A - .4byte _0814BFA4 -_0814BEB4: - movs r0, 0x1 - str r0, [sp] - adds r0, r2, 0 - movs r1, 0x1 - movs r2, 0 - movs r3, 0 - bl sub_814D5A4 - movs r0, 0x9 - strb r0, [r5, 0xE] - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - b _0814BFC6 -_0814BED4: - bl LinkRfu_SetRfuFuncToSend6600 - b _0814BFC0 -_0814BEDA: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814BFC6 - adds r4, r5, 0 - adds r4, 0x42 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0xC - bl memset - ldrb r0, [r5, 0x8] - lsls r0, 5 - adds r0, r5, r0 - adds r0, 0xA4 - ldrh r0, [r0] - strh r0, [r4] - movs r0, 0 - adds r1, r4, 0 - movs r2, 0x2 - bl SendBlock - b _0814BFC0 -_0814BF0A: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814BFC6 - movs r0, 0 - strh r0, [r5, 0x10] - b _0814BFC0 -_0814BF1A: - bl GetBlockReceivedStatus - ldr r2, _0814BF98 @ =gUnknown_846E3C8 - ldrb r4, [r5, 0x9] - subs r1, r4, 0x2 - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bne _0814BFC6 - movs r3, 0 - cmp r3, r4 - bcs _0814BF7E - ldr r7, _0814BF9C @ =gBlockRecvBuffer - movs r6, 0 - ldr r4, _0814BFA0 @ =gUnknown_83DFC9C -_0814BF3C: - lsls r0, r3, 5 - adds r0, r5, r0 - lsls r1, r3, 8 - adds r1, r7 - ldrh r1, [r1] - adds r2, r0, 0 - adds r2, 0xA4 - strh r1, [r2] - lsls r1, 16 - lsrs r1, 16 - cmp r1, 0xB0 - bls _0814BF56 - strh r6, [r2] -_0814BF56: - ldrh r1, [r2] - lsls r1, 2 - adds r1, r4 - ldrh r0, [r5, 0x18] - ldrb r1, [r1] - adds r0, r1 - strh r0, [r5, 0x18] - ldrh r0, [r2] - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x2] - ldr r0, [r5, 0x1C] - adds r0, r1 - str r0, [r5, 0x1C] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - ldrb r0, [r5, 0x9] - cmp r3, r0 - bcc _0814BF3C -_0814BF7E: - movs r0, 0 - strh r0, [r5, 0x10] - bl ResetBlockReceivedFlags - movs r1, 0x18 - ldrsh r0, [r5, r1] - lsls r0, 8 - movs r1, 0x80 - lsls r1, 6 - bl sub_80D8B68 - str r0, [r5, 0x20] - b _0814BFC0 - .align 2, 0 -_0814BF98: .4byte gUnknown_846E3C8 -_0814BF9C: .4byte gBlockRecvBuffer -_0814BFA0: .4byte gUnknown_83DFC9C -_0814BFA4: - movs r0, 0 - movs r1, 0x1 - bl ClearDialogWindowAndFrame - movs r0, 0xA - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - movs r1, 0 - movs r0, 0x4 - strh r0, [r5, 0x12] - strb r1, [r5, 0xC] - b _0814BFC6 -_0814BFC0: - ldrb r0, [r5, 0xC] - adds r0, 0x1 - strb r0, [r5, 0xC] -_0814BFC6: - movs r0, 0 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_814BE7C - - thumb_func_start sub_814BFD0 -sub_814BFD0: @ 814BFD0 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0xC] - cmp r0, 0x6 - bls _0814BFDC - b _0814C108 -_0814BFDC: - lsls r0, 2 - ldr r1, _0814BFE8 @ =_0814BFEC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0814BFE8: .4byte _0814BFEC - .align 2, 0 -_0814BFEC: - .4byte _0814C008 - .4byte _0814C01A - .4byte _0814C048 - .4byte _0814C080 - .4byte _0814C0B0 - .4byte _0814C0D2 - .4byte _0814C0E4 -_0814C008: - movs r0, 0x9C - lsls r0, 1 - adds r1, r4, r0 - adds r0, r4, 0 - bl sub_814DA24 - bl LinkRfu_SetRfuFuncToSend6600 - b _0814C108 -_0814C01A: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814C10E - movs r2, 0x9C - lsls r2, 1 - adds r1, r4, r2 - movs r0, 0 - strb r0, [r1] - ldr r3, _0814C044 @ =0x00000139 - adds r1, r4, r3 - strb r0, [r1] - adds r2, 0x2 - adds r1, r4, r2 - strb r0, [r1] - adds r3, 0x2 - adds r1, r4, r3 - strb r0, [r1] - b _0814C108 - .align 2, 0 -_0814C044: .4byte 0x00000139 -_0814C048: - movs r0, 0x9C - lsls r0, 1 - adds r3, r4, r0 - ldrb r0, [r3] - lsls r0, 2 - movs r2, 0xB8 - lsls r2, 1 - adds r1, r4, r2 - adds r0, r1, r0 - ldr r2, [r0] - ldr r0, _0814C07C @ =sub_814DB84 - str r0, [r2, 0x1C] - ldrb r0, [r3] - lsls r0, 2 - adds r1, r0 - ldr r1, [r1] - adds r1, 0x2C - ldrb r2, [r1] - movs r0, 0x7F - ands r0, r2 - strb r0, [r1] - movs r0, 0x36 - bl PlaySE - b _0814C108 - .align 2, 0 -_0814C07C: .4byte sub_814DB84 -_0814C080: - movs r3, 0x9C - lsls r3, 1 - adds r2, r4, r3 - ldrb r0, [r2] - lsls r0, 2 - adds r3, 0x38 - adds r1, r4, r3 - adds r3, r1, r0 - ldr r0, [r3] - ldr r1, [r0, 0x1C] - ldr r0, _0814C0AC @ =sub_814DB84 - cmp r1, r0 - beq _0814C10E - movs r0, 0 - str r0, [r3] - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - bl LinkRfu_SetRfuFuncToSend6600 - b _0814C108 - .align 2, 0 -_0814C0AC: .4byte sub_814DB84 -_0814C0B0: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814C10E - movs r0, 0x9C - lsls r0, 1 - adds r1, r4, r0 - ldrb r0, [r1] - ldrb r2, [r4, 0x9] - cmp r0, r2 - bcs _0814C0CC - movs r0, 0x2 - b _0814C10C -_0814C0CC: - movs r0, 0 - strb r0, [r1] - b _0814C108 -_0814C0D2: - movs r3, 0x9C - lsls r3, 1 - adds r1, r4, r3 - adds r0, r4, 0 - bl sub_814DC24 - bl LinkRfu_SetRfuFuncToSend6600 - b _0814C108 -_0814C0E4: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814C10E - movs r0, 0x25 - bl PlaySE - movs r0, 0xB - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - movs r1, 0 - movs r0, 0x5 - strh r0, [r4, 0x12] - strb r1, [r4, 0xC] - b _0814C10E -_0814C108: - ldrb r0, [r4, 0xC] - adds r0, 0x1 -_0814C10C: - strb r0, [r4, 0xC] -_0814C10E: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_814BFD0 - - thumb_func_start sub_814C118 -sub_814C118: @ 814C118 - push {r4-r7,lr} - adds r4, r0, 0 - ldrb r1, [r4, 0xC] - cmp r1, 0x1 - beq _0814C17C - cmp r1, 0x1 - bgt _0814C12C - cmp r1, 0 - beq _0814C136 - b _0814C23C -_0814C12C: - cmp r1, 0x2 - beq _0814C1FC - cmp r1, 0x3 - beq _0814C21E - b _0814C23C -_0814C136: - ldrh r0, [r4, 0x2A] - adds r0, 0x4 - strh r0, [r4, 0x2A] - lsls r0, 16 - cmp r0, 0 - bge _0814C144 - b _0814C242 -_0814C144: - strh r1, [r4, 0x2A] - ldr r0, _0814C174 @ =0x00000139 - adds r3, r4, r0 - movs r0, 0x4 - strb r0, [r3] - movs r2, 0x9C - lsls r2, 1 - adds r1, r4, r2 - movs r0, 0 - strb r0, [r1] - ldr r2, _0814C178 @ =gUnknown_846E2F0 - ldrb r1, [r3] - lsls r0, r1, 3 - subs r0, r1 - adds r0, r2 - ldrb r0, [r0] - movs r2, 0x9D - lsls r2, 1 - adds r1, r4, r2 - strb r0, [r1] - movs r0, 0xCF - bl PlaySE - b _0814C23C - .align 2, 0 -_0814C174: .4byte 0x00000139 -_0814C178: .4byte gUnknown_846E2F0 -_0814C17C: - ldr r7, _0814C1F4 @ =gUnknown_846E2F0 - movs r0, 0x9C - lsls r0, 1 - adds r6, r4, r0 - ldr r1, _0814C1F8 @ =0x00000139 - adds r5, r4, r1 - ldrb r1, [r5] - lsls r0, r1, 3 - subs r0, r1 - ldrb r2, [r6] - adds r0, r2 - adds r0, r7 - movs r1, 0 - ldrsb r1, [r0, r1] - strh r1, [r4, 0x2C] - negs r1, r1 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x12 - bl SetGpuReg - ldrh r1, [r4, 0x2C] - negs r1, r1 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x1A - bl SetGpuReg - ldrh r1, [r4, 0x2C] - negs r1, r1 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x1E - bl SetGpuReg - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - movs r1, 0x9D - lsls r1, 1 - adds r2, r4, r1 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r2] - cmp r0, r1 - bcc _0814C242 - ldrb r0, [r5] - cmp r0, 0 - beq _0814C23C - subs r0, 0x1 - strb r0, [r5] - ldrb r1, [r5] - lsls r0, r1, 3 - subs r0, r1 - adds r0, r7 - ldrb r0, [r0] - strb r0, [r2] - movs r0, 0 - strb r0, [r6] - b _0814C242 - .align 2, 0 -_0814C1F4: .4byte gUnknown_846E2F0 -_0814C1F8: .4byte 0x00000139 -_0814C1FC: - movs r0, 0 - strh r0, [r4, 0x2C] - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1A - movs r1, 0 - bl SetGpuReg - movs r0, 0x1E - movs r1, 0 - bl SetGpuReg - bl LinkRfu_SetRfuFuncToSend6600 - b _0814C23C -_0814C21E: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814C242 - movs r0, 0xC - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - movs r1, 0 - movs r0, 0x6 - strh r0, [r4, 0x12] - strb r1, [r4, 0xC] - b _0814C242 -_0814C23C: - ldrb r0, [r4, 0xC] - adds r0, 0x1 - strb r0, [r4, 0xC] -_0814C242: - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_814C118 - - thumb_func_start sub_814C24C -sub_814C24C: @ 814C24C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - ldrb r0, [r4, 0xC] - cmp r0, 0x1 - beq _0814C26C - cmp r0, 0x1 - bgt _0814C262 - cmp r0, 0 - beq _0814C292 - b _0814C2EC -_0814C262: - cmp r0, 0x2 - beq _0814C28A - cmp r0, 0x3 - beq _0814C298 - b _0814C2EC -_0814C26C: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814C2F2 - movs r1, 0x80 - lsls r1, 5 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0x78 - movs r3, 0x50 - bl StartMinigameCountdown - b _0814C2EC -_0814C28A: - bl IsMinigameCountdownRunning - cmp r0, 0 - bne _0814C2F2 -_0814C292: - bl LinkRfu_SetRfuFuncToSend6600 - b _0814C2EC -_0814C298: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814C2F2 - movs r0, 0x9C - lsls r0, 1 - adds r1, r4, r0 - movs r0, 0 - strb r0, [r1] - ldr r2, _0814C2D4 @ =0x00000139 - adds r1, r4, r2 - strb r0, [r1] - adds r2, 0x1 - adds r1, r4, r2 - strb r0, [r1] - adds r2, 0x1 - adds r1, r4, r2 - strb r0, [r1] - strh r0, [r4, 0x10] - ldrb r0, [r4, 0x8] - cmp r0, 0 - bne _0814C2D8 - movs r0, 0xD - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - b _0814C2E2 - .align 2, 0 -_0814C2D4: .4byte 0x00000139 -_0814C2D8: - movs r0, 0xE - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C -_0814C2E2: - movs r1, 0 - movs r0, 0x7 - strh r0, [r4, 0x12] - strb r1, [r4, 0xC] - b _0814C2F2 -_0814C2EC: - ldrb r0, [r4, 0xC] - adds r0, 0x1 - strb r0, [r4, 0xC] -_0814C2F2: - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_814C24C - - thumb_func_start sub_814C2FC -sub_814C2FC: @ 814C2FC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r4, r0, 0 - movs r0, 0 - mov r8, r0 - movs r2, 0 - adds r7, r2, 0 - ldrb r1, [r4, 0x9] - cmp r7, r1 - bcs _0814C40A - movs r2, 0x5E - adds r2, r4 - mov r9, r2 - ldr r3, _0814C3C0 @ =gUnknown_846E2E0 - mov r10, r3 -_0814C320: - lsls r0, r7, 4 - ldr r1, _0814C3C4 @ =gRecvCmds - adds r2, r0, r1 - ldrh r1, [r2] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - movs r3, 0xBC - lsls r3, 6 - cmp r0, r3 - bne _0814C3FE - ldrh r0, [r2, 0x2] - cmp r0, 0x2 - bne _0814C3FE - ldrb r1, [r2, 0x4] - movs r0, 0x4 - ands r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _0814C3F6 - mov r0, r9 - ldrb r2, [r0] - lsrs r1, r2, 3 - mov r3, r10 - adds r0, r7, r3 - ldrb r0, [r0] - orrs r1, r0 - lsls r1, 3 - movs r0, 0x7 - ands r0, r2 - orrs r0, r1 - mov r1, r9 - strb r0, [r1] - lsls r2, r7, 5 - adds r3, r4, r2 - mov r12, r3 - mov r1, r12 - adds r1, 0xB5 - movs r0, 0x1 - strb r0, [r1] - subs r1, 0x7 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - subs r1, 0x8 - ldrh r0, [r4, 0x28] - ldrh r1, [r1] - subs r0, r1 - lsls r0, 16 - lsrs r3, r0, 16 - mov r5, r12 - adds r5, 0xAA - ldrh r1, [r5] - subs r0, r1, 0x1 - adds r6, r2, 0 - cmp r3, r0 - blt _0814C3C8 - adds r0, r1, 0x1 - cmp r3, r0 - bgt _0814C3C8 - mov r1, r12 - adds r1, 0xA8 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - strh r3, [r5] - mov r0, r12 - adds r0, 0xAC - ldrh r1, [r1] - ldrh r2, [r0] - cmp r1, r2 - bls _0814C3D6 - strh r1, [r0] - b _0814C3D6 - .align 2, 0 -_0814C3C0: .4byte gUnknown_846E2E0 -_0814C3C4: .4byte gRecvCmds -_0814C3C8: - adds r0, r4, r6 - adds r2, r0, 0 - adds r2, 0xA8 - movs r1, 0 - strh r1, [r2] - adds r0, 0xAA - strh r3, [r0] -_0814C3D6: - adds r1, r4, r6 - ldrh r0, [r4, 0x28] - adds r3, r1, 0 - adds r3, 0xA6 - movs r2, 0 - strh r0, [r3] - adds r1, 0xB4 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bls _0814C3FE - strb r2, [r1] - b _0814C3FE -_0814C3F6: - lsls r0, r7, 5 - adds r0, r4, r0 - adds r0, 0xB5 - strb r1, [r0] -_0814C3FE: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - ldrb r3, [r4, 0x9] - cmp r7, r3 - bcc _0814C320 -_0814C40A: - mov r0, r8 - cmp r0, 0x1 - bls _0814C440 - movs r7, 0 - ldrb r1, [r4, 0x9] - cmp r7, r1 - bcs _0814C440 - movs r3, 0x2 -_0814C41A: - lsls r0, r7, 5 - adds r1, r4, r0 - adds r2, r1, 0 - adds r2, 0xB5 - ldrb r0, [r2] - cmp r0, 0 - beq _0814C434 - orrs r0, r3 - strb r0, [r2] - adds r1, 0xB0 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_0814C434: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - ldrb r2, [r4, 0x9] - cmp r7, r2 - bcc _0814C41A -_0814C440: - mov r3, r8 - cmp r3, 0 - beq _0814C4A8 - ldrh r0, [r4, 0x2E] - add r0, r8 - strh r0, [r4, 0x2E] - ldr r1, _0814C490 @ =gUnknown_846E2E8 - mov r0, r8 - subs r0, 0x1 - adds r0, r1 - ldrb r0, [r0] - add r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldrh r0, [r4, 0x34] - add r0, r8 - strh r0, [r4, 0x34] - ldrh r0, [r4, 0x1A] - add r0, r8 - strh r0, [r4, 0x1A] - movs r1, 0x18 - ldrsh r0, [r4, r1] - movs r3, 0x1A - ldrsh r2, [r4, r3] - subs r0, r2 - cmp r0, 0 - ble _0814C494 - lsls r2, 8 - ldr r1, [r4, 0x20] - adds r0, r2, 0 - bl sub_80D8B68 - adds r2, r0, 0 - asrs r2, 8 - adds r0, r4, 0 - adds r0, 0x24 - strb r2, [r0] - b _0814C4A8 - .align 2, 0 -_0814C490: .4byte gUnknown_846E2E8 -_0814C494: - adds r1, r4, 0 - adds r1, 0x24 - movs r0, 0x20 - strb r0, [r1] - adds r2, r4, 0 - adds r2, 0x5E - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] -_0814C4A8: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_814C2FC - - thumb_func_start sub_814C4B8 -sub_814C4B8: @ 814C4B8 - push {r4-r6,lr} - adds r3, r0, 0 - movs r6, 0 - movs r1, 0 - adds r4, r1, 0 - ldrb r0, [r3, 0x9] - cmp r4, r0 - bcs _0814C510 - adds r5, r3, 0 - adds r5, 0x64 -_0814C4CC: - lsls r0, r4, 5 - adds r1, r3, r0 - adds r0, r1, 0 - adds r0, 0xB5 - ldrb r2, [r0] - cmp r2, 0 - beq _0814C504 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r1, 0 - adds r0, 0xB4 - ldrb r0, [r0] - adds r1, r0, 0x1 - movs r0, 0x2 - ands r0, r2 - cmp r0, 0 - beq _0814C4F4 - movs r0, 0x4 - orrs r1, r0 -_0814C4F4: - lsls r0, r4, 1 - adds r0, r4 - lsls r1, r0 - lsls r0, r1, 16 - lsrs r1, r0, 16 - ldrh r0, [r5] - orrs r1, r0 - strh r1, [r5] -_0814C504: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r1, [r3, 0x9] - cmp r4, r1 - bcc _0814C4CC -_0814C510: - adds r0, r3, 0 - adds r0, 0x24 - ldrb r1, [r0] - adds r0, 0x3C - strh r1, [r0] - cmp r6, 0 - bne _0814C534 - ldr r2, _0814C530 @ =0x0000013b - adds r0, r3, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _0814C600 - movs r4, 0x9C - lsls r4, 1 - adds r1, r3, r4 - b _0814C572 - .align 2, 0 -_0814C530: .4byte 0x0000013b -_0814C534: - ldr r5, _0814C560 @ =0x0000013b - adds r2, r3, r5 - ldrb r0, [r2] - cmp r0, 0 - beq _0814C57A - ldr r0, _0814C564 @ =0x00000139 - adds r1, r3, r0 - ldrb r2, [r1] - cmp r6, r2 - beq _0814C56C - subs r0, r6, 0x1 - strb r0, [r1] - ldr r1, _0814C568 @ =gUnknown_846E314 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0] - movs r4, 0x9D - lsls r4, 1 - adds r1, r3, r4 - strb r0, [r1] - b _0814C5A0 - .align 2, 0 -_0814C560: .4byte 0x0000013b -_0814C564: .4byte 0x00000139 -_0814C568: .4byte gUnknown_846E314 -_0814C56C: - movs r5, 0x9C - lsls r5, 1 - adds r1, r3, r5 -_0814C572: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0814C5A0 -_0814C57A: - movs r0, 0x9C - lsls r0, 1 - adds r1, r3, r0 - movs r0, 0 - strb r0, [r1] - subs r0, r6, 0x1 - ldr r4, _0814C5D0 @ =0x00000139 - adds r1, r3, r4 - strb r0, [r1] - ldr r1, _0814C5D4 @ =gUnknown_846E314 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0] - movs r5, 0x9D - lsls r5, 1 - adds r1, r3, r5 - strb r0, [r1] - movs r0, 0x1 - strb r0, [r2] -_0814C5A0: - ldr r0, _0814C5D8 @ =0x0000013b - adds r4, r3, r0 - ldrb r0, [r4] - cmp r0, 0 - beq _0814C600 - movs r2, 0x9C - lsls r2, 1 - adds r1, r3, r2 - movs r5, 0x9D - lsls r5, 1 - adds r2, r3, r5 - ldrb r0, [r1] - ldrb r5, [r2] - cmp r0, r5 - bcc _0814C5DC - movs r0, 0 - strb r0, [r1] - ldr r5, _0814C5D0 @ =0x00000139 - adds r1, r3, r5 - strb r0, [r1] - strb r0, [r2] - strb r0, [r4] - movs r1, 0 - b _0814C5F0 - .align 2, 0 -_0814C5D0: .4byte 0x00000139 -_0814C5D4: .4byte gUnknown_846E314 -_0814C5D8: .4byte 0x0000013b -_0814C5DC: - ldr r2, _0814C5F8 @ =gUnknown_846E314 - ldrb r1, [r1] - ldr r4, _0814C5FC @ =0x00000139 - adds r0, r3, r4 - ldrb r0, [r0] - lsls r0, 2 - adds r0, 0x1 - adds r1, r0 - adds r1, r2 - ldrb r1, [r1] -_0814C5F0: - adds r0, r3, 0 - adds r0, 0x5F - strb r1, [r0] - b _0814C608 - .align 2, 0 -_0814C5F8: .4byte gUnknown_846E314 -_0814C5FC: .4byte 0x00000139 -_0814C600: - adds r1, r3, 0 - adds r1, 0x5F - movs r0, 0 - strb r0, [r1] -_0814C608: - ldrh r1, [r3, 0x26] - adds r0, r3, 0 - adds r0, 0x62 - strh r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_814C4B8 - - thumb_func_start sub_814C618 -sub_814C618: @ 814C618 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - ldr r3, _0814C6AC @ =gMain - ldrh r1, [r3, 0x2E] - movs r4, 0x1 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _0814C63A - adds r2, r5, 0 - adds r2, 0x5E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] -_0814C63A: - ldrh r1, [r3, 0x2C] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _0814C65A - ldrb r0, [r5, 0x8] - lsls r0, 5 - adds r0, r5, r0 - adds r1, r0, 0 - adds r1, 0xB2 - ldrh r0, [r1] - ldrh r2, [r5, 0x28] - cmp r0, r2 - bcs _0814C65A - adds r0, 0x1 - strh r0, [r1] -_0814C65A: - ldrb r0, [r5, 0x8] - adds r7, r5, 0 - adds r7, 0x5E - cmp r0, 0 - beq _0814C670 - ldrb r1, [r7] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _0814C670 - b _0814C7AC -_0814C670: - adds r4, r5, 0 - adds r4, 0x5C - movs r0, 0x2 - strh r0, [r4] - ldrh r0, [r5, 0x28] - movs r1, 0x1E - bl __umodsi3 - lsls r0, 16 - mov r8, r4 - adds r6, r5, 0 - adds r6, 0x25 - cmp r0, 0 - bne _0814C6C8 - movs r0, 0x2E - ldrsh r2, [r5, r0] - ldr r1, _0814C6B0 @ =gUnknown_846E3C4 - ldrb r0, [r5, 0x9] - subs r0, 0x2 - adds r0, r1 - ldrb r0, [r0] - cmp r2, r0 - ble _0814C6B4 - ldrh r0, [r5, 0x30] - adds r0, 0x1 - strh r0, [r5, 0x30] - ldrb r0, [r6] - movs r1, 0x10 - orrs r0, r1 - b _0814C6BC - .align 2, 0 -_0814C6AC: .4byte gMain -_0814C6B0: .4byte gUnknown_846E3C4 -_0814C6B4: - ldrb r1, [r6] - movs r0, 0x11 - negs r0, r0 - ands r0, r1 -_0814C6BC: - strb r0, [r6] - movs r0, 0 - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x32] - adds r0, 0x1 - strh r0, [r5, 0x32] -_0814C6C8: - ldrh r0, [r5, 0x28] - movs r1, 0xF - bl __umodsi3 - lsls r0, 16 - cmp r0, 0 - bne _0814C73E - movs r0, 0x34 - ldrsh r2, [r5, r0] - ldr r3, _0814C6F4 @ =gUnknown_846E3B4 - ldrb r0, [r5, 0x9] - subs r0, 0x2 - lsls r1, r0, 2 - adds r0, r1, r3 - ldrb r0, [r0] - cmp r2, r0 - bge _0814C6F8 - ldrb r1, [r6] - movs r0, 0x1F - ands r0, r1 - strb r0, [r6] - b _0814C738 - .align 2, 0 -_0814C6F4: .4byte gUnknown_846E3B4 -_0814C6F8: - adds r0, r3, 0x1 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r2, r0 - bge _0814C70C - ldrb r0, [r6] - movs r1, 0x1F - ands r1, r0 - movs r0, 0x20 - b _0814C734 -_0814C70C: - adds r0, r3, 0x2 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r2, r0 - bge _0814C71C - movs r0, 0x2 - strh r0, [r5, 0x34] - b _0814C738 -_0814C71C: - adds r0, r3, 0x3 - adds r0, r1, r0 - ldrb r0, [r0] - cmp r2, r0 - bge _0814C72C - movs r0, 0x3 - strh r0, [r5, 0x34] - b _0814C738 -_0814C72C: - ldrb r0, [r6] - movs r1, 0x1F - ands r1, r0 - movs r0, 0x80 -_0814C734: - orrs r1, r0 - strb r1, [r6] -_0814C738: - movs r0, 0 - strh r0, [r5, 0x34] - b _0814C76A -_0814C73E: - ldrh r0, [r5, 0x10] - adds r0, 0x1 - strh r0, [r5, 0x10] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x3C - bls _0814C76A - cmp r0, 0x46 - bls _0814C75A - bl sub_80FBA44 - movs r0, 0 - strh r0, [r5, 0x10] - b _0814C76A -_0814C75A: - ldrb r0, [r7] - movs r4, 0xF8 - ands r4, r0 - cmp r4, 0 - bne _0814C76A - bl sub_80FBA44 - strh r4, [r5, 0x10] -_0814C76A: - ldrh r1, [r5, 0x28] - ldr r0, _0814C7B8 @ =0x00008c9f - cmp r1, r0 - bls _0814C77A - ldrb r0, [r7] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r7] -_0814C77A: - ldrb r1, [r6] - lsls r1, 27 - lsrs r1, 31 - lsls r1, 1 - ldrb r2, [r7] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r7] - ldrb r0, [r6] - lsrs r0, 5 - adds r2, r5, 0 - adds r2, 0x66 - strh r0, [r2] - adds r4, r5, 0 - adds r4, 0x42 - adds r0, r4, 0 - mov r1, r8 - movs r2, 0xC - bl memcpy - adds r0, r4, 0 - bl RfuPrepareSend0x2f00 -_0814C7AC: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0814C7B8: .4byte 0x00008c9f - thumb_func_end sub_814C618 - - thumb_func_start sub_814C7BC -sub_814C7BC: @ 814C7BC - push {r4,r5,lr} - adds r5, r0, 0 - movs r4, 0 - ldr r3, _0814C808 @ =gRecvCmds - ldrb r0, [r5, 0x9] - cmp r4, r0 - bcs _0814C7E0 - movs r1, 0 -_0814C7CC: - lsls r0, r4, 5 - adds r0, r5, r0 - adds r0, 0xB5 - strb r1, [r0] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r0, [r5, 0x9] - cmp r4, r0 - bcc _0814C7CC -_0814C7E0: - adds r2, r3, 0 - ldrh r0, [r2] - movs r1, 0xFF - lsls r1, 8 - ands r1, r0 - movs r0, 0xBC - lsls r0, 6 - cmp r1, r0 - bne _0814C7F8 - ldrh r0, [r2, 0x2] - cmp r0, 0x2 - beq _0814C80C -_0814C7F8: - adds r2, r5, 0 - adds r2, 0x25 - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - b _0814C84A - .align 2, 0 -_0814C808: .4byte gRecvCmds -_0814C80C: - adds r4, r5, 0 - adds r4, 0x4E - adds r0, r4, 0 - adds r1, r3, 0 - movs r2, 0xE - bl memcpy - ldrh r0, [r4, 0x6] - strh r0, [r5, 0x2A] - movs r0, 0x5 - ldrsb r0, [r4, r0] - strh r0, [r5, 0x2C] - ldrh r0, [r4, 0x8] - strh r0, [r5, 0x28] - movs r0, 0x9C - lsls r0, 1 - adds r1, r5, r0 - adds r0, r5, 0 - bl sub_814DC5C - ldrb r1, [r4, 0x4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0814C84A - adds r0, r5, 0 - adds r0, 0x25 - ldrb r1, [r0] - movs r2, 0x8 - orrs r1, r2 - strb r1, [r0] -_0814C84A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_814C7BC - - thumb_func_start sub_814C850 -sub_814C850: @ 814C850 - push {r4,lr} - adds r4, r0, 0 - adds r0, 0x5C - movs r1, 0 - movs r2, 0xC - bl memset - adds r0, r4, 0 - adds r0, 0x4E - movs r1, 0 - movs r2, 0xE - bl memset - adds r0, r4, 0 - bl sub_814C7BC - ldrh r1, [r4, 0x2C] - negs r1, r1 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x12 - bl SetGpuReg - ldrh r1, [r4, 0x2C] - negs r1, r1 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x1A - bl SetGpuReg - ldrh r1, [r4, 0x2C] - negs r1, r1 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x1E - bl SetGpuReg - adds r0, r4, 0 - adds r0, 0x25 - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0814C8D8 - ldrh r1, [r4, 0x28] - ldr r0, _0814C8C0 @ =0x00008c9f - cmp r1, r0 - bls _0814C8C4 - adds r0, 0x1 - strh r0, [r4, 0x28] - movs r0, 0x10 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - b _0814C8CE - .align 2, 0 -_0814C8C0: .4byte 0x00008c9f -_0814C8C4: - movs r0, 0xF - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C -_0814C8CE: - movs r1, 0 - movs r0, 0 - strh r0, [r4, 0x10] - strb r1, [r4, 0xC] - b _0814C8F2 -_0814C8D8: - ldrh r0, [r4, 0x26] - adds r0, 0x1 - strh r0, [r4, 0x26] - adds r0, r4, 0 - bl sub_814C2FC - adds r0, r4, 0 - bl sub_814C4B8 - adds r0, r4, 0 - bl sub_814C618 - movs r0, 0 -_0814C8F2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_814C850 - - thumb_func_start sub_814C8F8 -sub_814C8F8: @ 814C8F8 - push {r4,lr} - adds r4, r0, 0 - adds r0, 0x5C - movs r1, 0 - movs r2, 0xC - bl memset - adds r0, r4, 0 - adds r0, 0x4E - movs r1, 0 - movs r2, 0xE - bl memset - adds r0, r4, 0 - bl sub_814C7BC - ldrh r1, [r4, 0x2C] - negs r1, r1 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x12 - bl SetGpuReg - ldrh r1, [r4, 0x2C] - negs r1, r1 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x1A - bl SetGpuReg - ldrh r1, [r4, 0x2C] - negs r1, r1 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x1E - bl SetGpuReg - adds r0, r4, 0 - adds r0, 0x25 - ldrb r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0814C980 - ldrh r1, [r4, 0x28] - ldr r0, _0814C968 @ =0x00008c9f - cmp r1, r0 - bls _0814C96C - adds r0, 0x1 - strh r0, [r4, 0x28] - movs r0, 0x10 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - b _0814C976 - .align 2, 0 -_0814C968: .4byte 0x00008c9f -_0814C96C: - movs r0, 0xF - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C -_0814C976: - movs r1, 0 - movs r0, 0 - strh r0, [r4, 0x10] - strb r1, [r4, 0xC] - b _0814C988 -_0814C980: - adds r0, r4, 0 - bl sub_814C618 - movs r0, 0 -_0814C988: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_814C8F8 - - thumb_func_start sub_814C990 -sub_814C990: @ 814C990 - push {r4-r7,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0xC] - cmp r0, 0x5 - bls _0814C99C - b _0814CB12 -_0814C99C: - lsls r0, 2 - ldr r1, _0814C9A8 @ =_0814C9AC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0814C9A8: .4byte _0814C9AC - .align 2, 0 -_0814C9AC: - .4byte _0814C9C4 - .4byte _0814C9EC - .4byte _0814CA3C - .4byte _0814CABC - .4byte _0814CADA - .4byte _0814CAF4 -_0814C9C4: - movs r0, 0x8 - strh r0, [r4, 0x12] - movs r0, 0xCF - bl PlaySE - movs r0, 0x1 - negs r0, r0 - ldr r2, _0814C9E8 @ =0x000003ff - movs r1, 0x8 - bl BlendPalettes - movs r0, 0x9C - lsls r0, 1 - adds r1, r4, r0 - movs r0, 0x2 - strb r0, [r1] - b _0814CB12 - .align 2, 0 -_0814C9E8: .4byte 0x000003ff -_0814C9EC: - movs r1, 0x9C - lsls r1, 1 - adds r5, r4, r1 - ldrb r0, [r5] - subs r0, 0x1 - strb r0, [r5] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _0814CA02 - b _0814CB18 -_0814CA02: - movs r0, 0x1 - negs r0, r0 - ldr r2, _0814CA30 @ =0x000003ff - movs r1, 0 - bl BlendPalettes - ldr r2, _0814CA34 @ =0x00000139 - adds r1, r4, r2 - movs r0, 0x4 - strb r0, [r1] - movs r0, 0 - strb r0, [r5] - ldr r2, _0814CA38 @ =gUnknown_846E2F0 - ldrb r1, [r1] - lsls r0, r1, 3 - subs r0, r1 - adds r0, r2 - ldrb r0, [r0] - movs r2, 0x9D - lsls r2, 1 - adds r1, r4, r2 - strb r0, [r1] - b _0814CB12 - .align 2, 0 -_0814CA30: .4byte 0x000003ff -_0814CA34: .4byte 0x00000139 -_0814CA38: .4byte gUnknown_846E2F0 -_0814CA3C: - ldr r7, _0814CAB4 @ =gUnknown_846E2F0 - movs r0, 0x9C - lsls r0, 1 - adds r6, r4, r0 - ldr r1, _0814CAB8 @ =0x00000139 - adds r5, r4, r1 - ldrb r1, [r5] - lsls r0, r1, 3 - subs r0, r1 - ldrb r2, [r6] - adds r0, r2 - adds r0, r7 - movs r1, 0 - ldrsb r1, [r0, r1] - strh r1, [r4, 0x2C] - negs r1, r1 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x12 - bl SetGpuReg - ldrh r1, [r4, 0x2C] - negs r1, r1 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x1A - bl SetGpuReg - ldrh r1, [r4, 0x2C] - negs r1, r1 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x1E - bl SetGpuReg - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - movs r1, 0x9D - lsls r1, 1 - adds r2, r4, r1 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r2] - cmp r0, r1 - bcc _0814CB18 - ldrb r0, [r5] - cmp r0, 0 - beq _0814CB12 - subs r0, 0x1 - strb r0, [r5] - ldrb r1, [r5] - lsls r0, r1, 3 - subs r0, r1 - adds r0, r7 - ldrb r0, [r0] - strb r0, [r2] - movs r0, 0 - strb r0, [r6] - b _0814CB18 - .align 2, 0 -_0814CAB4: .4byte gUnknown_846E2F0 -_0814CAB8: .4byte 0x00000139 -_0814CABC: - movs r0, 0 - strh r0, [r4, 0x2C] - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1A - movs r1, 0 - bl SetGpuReg - movs r0, 0x1E - movs r1, 0 - bl SetGpuReg - b _0814CB12 -_0814CADA: - movs r2, 0x9C - lsls r2, 1 - adds r1, r4, r2 - adds r0, r4, 0 - bl sub_814DE50 - cmp r0, 0 - beq _0814CB18 - bl LinkRfu_SetRfuFuncToSend6600 - movs r0, 0 - strh r0, [r4, 0x10] - b _0814CB12 -_0814CAF4: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814CB18 - movs r0, 0x11 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - movs r1, 0 - movs r0, 0 - strh r0, [r4, 0x10] - strb r1, [r4, 0xC] - b _0814CB1A -_0814CB12: - ldrb r0, [r4, 0xC] - adds r0, 0x1 - strb r0, [r4, 0xC] -_0814CB18: - movs r0, 0 -_0814CB1A: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_814C990 - - thumb_func_start sub_814CB20 -sub_814CB20: @ 814CB20 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - ldrb r0, [r5, 0xC] - cmp r0, 0x1 - beq _0814CB64 - cmp r0, 0x1 - bgt _0814CB38 - cmp r0, 0 - beq _0814CB42 - b _0814CBFC -_0814CB38: - cmp r0, 0x2 - beq _0814CB8A - cmp r0, 0x3 - beq _0814CBBC - b _0814CBFC -_0814CB42: - movs r0, 0x9 - strh r0, [r5, 0x12] - movs r0, 0x1A - bl PlaySE - movs r0, 0x1 - negs r0, r0 - movs r1, 0x8 - movs r2, 0x1F - bl BlendPalettes - movs r0, 0x9C - lsls r0, 1 - adds r1, r5, r0 - movs r0, 0x4 - strb r0, [r1] - b _0814CBFC -_0814CB64: - movs r0, 0x9C - lsls r0, 1 - adds r4, r5, r0 - ldrb r0, [r4] - subs r0, 0x1 - strb r0, [r4] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _0814CC02 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - movs r2, 0x1F - bl BlendPalettes - movs r0, 0 - strb r0, [r4] - b _0814CBFC -_0814CB8A: - movs r0, 0x9C - lsls r0, 1 - adds r1, r5, r0 - adds r0, r5, 0 - bl sub_814DE50 - cmp r0, 0 - beq _0814CC02 - bl LinkRfu_SetRfuFuncToSend6600 - movs r0, 0 - strh r0, [r5, 0x10] - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1A - movs r1, 0 - bl SetGpuReg - movs r0, 0x1E - movs r1, 0 - bl SetGpuReg - b _0814CBFC -_0814CBBC: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814CC02 - ldr r0, _0814CBF8 @ =gStringVar1 - ldr r1, [r5, 0x1C] - movs r2, 0 - movs r3, 0x6 - bl ConvertIntToDecimalStringN - movs r4, 0 - str r4, [sp] - adds r0, r6, 0 - movs r1, 0x7 - movs r2, 0x1 - movs r3, 0 - bl sub_814D5A4 - movs r0, 0x13 - strb r0, [r5, 0xE] - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - movs r0, 0 - strh r4, [r5, 0x10] - b _0814CC00 - .align 2, 0 -_0814CBF8: .4byte gStringVar1 -_0814CBFC: - ldrb r0, [r5, 0xC] - adds r0, 0x1 -_0814CC00: - strb r0, [r5, 0xC] -_0814CC02: - movs r0, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_814CB20 - - thumb_func_start sub_814CC0C -sub_814CC0C: @ 814CC0C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - adds r7, r0, 0 - ldrb r0, [r7, 0xC] - cmp r0, 0x7 - bls _0814CC22 - b _0814CF8E -_0814CC22: - lsls r0, 2 - ldr r1, _0814CC2C @ =_0814CC30 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0814CC2C: .4byte _0814CC30 - .align 2, 0 -_0814CC30: - .4byte _0814CC50 - .4byte _0814CC8A - .4byte _0814CC98 - .4byte _0814CD00 - .4byte _0814CE80 - .4byte _0814CF30 - .4byte _0814CF3C - .4byte _0814CF70 -_0814CC50: - adds r4, r7, 0 - adds r4, 0x42 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x4 - bl memset - ldrb r0, [r7, 0x8] - lsls r0, 5 - adds r0, r7, r0 - adds r2, r0, 0 - adds r2, 0xB2 - ldrh r1, [r7, 0x28] - ldrh r0, [r2] - cmp r0, r1 - bls _0814CC72 - strh r1, [r2] -_0814CC72: - ldrb r0, [r7, 0x8] - lsls r0, 5 - adds r0, r7, r0 - adds r0, 0xB2 - ldrh r0, [r0] - strh r0, [r4] - movs r0, 0 - adds r1, r4, 0 - movs r2, 0x2 - bl SendBlock - b _0814CF8E -_0814CC8A: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - bne _0814CC96 - b _0814CF94 -_0814CC96: - b _0814CF64 -_0814CC98: - bl GetBlockReceivedStatus - ldr r2, _0814CCF4 @ =gUnknown_846E3C8 - ldrb r3, [r7, 0x9] - subs r1, r3, 0x2 - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - beq _0814CCB0 - b _0814CF94 -_0814CCB0: - movs r0, 0 - mov r8, r0 - adds r4, r7, 0 - adds r4, 0x42 - cmp r8, r3 - bcs _0814CCDE - ldr r2, _0814CCF8 @ =gBlockRecvBuffer -_0814CCBE: - mov r3, r8 - lsls r1, r3, 5 - adds r1, r7, r1 - lsls r0, r3, 8 - adds r0, r2 - ldrh r0, [r0] - adds r1, 0xB2 - strh r0, [r1] - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldrb r6, [r7, 0x9] - cmp r8, r6 - bcc _0814CCBE -_0814CCDE: - movs r0, 0 - strh r0, [r7, 0x10] - strh r0, [r4] - bl ResetBlockReceivedFlags - ldrb r0, [r7, 0x8] - cmp r0, 0 - bne _0814CCFC - movs r0, 0x3 - b _0814CF92 - .align 2, 0 -_0814CCF4: .4byte gUnknown_846E3C8 -_0814CCF8: .4byte gBlockRecvBuffer -_0814CCFC: - movs r0, 0x6 - b _0814CF92 -_0814CD00: - adds r0, r7, 0 - adds r0, 0x68 - movs r1, 0 - movs r2, 0x30 - bl memset - ldrh r1, [r7, 0x28] - adds r0, r7, 0 - adds r0, 0x6C - strh r1, [r0] - movs r0, 0x18 - ldrsh r4, [r7, r0] - ldrh r0, [r7, 0x28] - movs r1, 0x3C - bl __udivsi3 - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl __divsi3 - adds r1, r7, 0 - adds r1, 0x6E - strh r0, [r1] - movs r1, 0x30 - ldrsh r0, [r7, r1] - lsls r0, 8 - movs r4, 0xC8 - lsls r4, 6 - adds r1, r4, 0 - bl sub_80D8AE0 - adds r2, r0, 0 - movs r3, 0x32 - ldrsh r1, [r7, r3] - lsls r1, 8 - bl sub_80D8B68 - adds r2, r0, r4 - asrs r2, 8 - movs r1, 0x7F - adds r0, r2, 0 - ands r0, r1 - adds r1, r7, 0 - adds r1, 0x70 - strh r0, [r1] - lsls r2, 8 - movs r1, 0xC8 - lsls r1, 7 - adds r0, r2, 0 - bl sub_80D8B68 - adds r2, r0, 0 - ldrb r1, [r7, 0x9] - ldr r0, [r7, 0x1C] - muls r0, r1 - lsls r4, r0, 8 - adds r0, r4, 0 - adds r1, r2, 0 - bl sub_80D8AE0 - adds r4, r0, 0 - asrs r0, r4, 8 - str r0, [r7, 0x68] - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl __umodsi3 - adds r1, r7, 0 - adds r1, 0x8F - strb r0, [r1] - movs r6, 0 - mov r8, r6 - mov r9, r1 - ldrb r0, [r7, 0x9] - cmp r8, r0 - bcc _0814CDA4 - b _0814CF8E -_0814CDA4: - adds r0, r7, 0 - adds r0, 0x88 - add r0, r8 - mov r1, r8 - strb r1, [r0] - adds r0, r7, 0 - adds r0, 0x90 - add r0, r8 - strb r1, [r0] - mov r3, r8 - lsls r2, r3, 1 - adds r1, r7, 0 - adds r1, 0x74 - adds r1, r2 - lsls r0, r3, 5 - adds r3, r7, r0 - adds r5, r3, 0 - adds r5, 0xAE - ldrh r0, [r5] - strh r0, [r1] - adds r1, r7, 0 - adds r1, 0x72 - ldrh r6, [r1] - adds r0, r6 - strh r0, [r1] - mov r1, r9 - ldrb r0, [r1] - adds r6, r2, 0 - cmp r0, 0x1 - beq _0814CE0E - cmp r0, 0x1 - bgt _0814CDEA - cmp r0, 0 - beq _0814CDF0 - b _0814CE64 -_0814CDEA: - cmp r0, 0x2 - beq _0814CE2C - b _0814CE64 -_0814CDF0: - ldrh r0, [r5] - cmp r0, 0 - beq _0814CE32 - adds r0, r3, 0 - adds r0, 0xAC - ldrh r2, [r0] - lsls r2, 8 - adds r0, r2, 0 - movs r1, 0xC8 - lsls r1, 7 - bl sub_80D8AE0 - adds r2, r0, 0 - ldrh r4, [r5] - b _0814CE5A -_0814CE0E: - ldrh r0, [r5] - cmp r0, 0 - beq _0814CE32 - adds r0, r3, 0 - adds r0, 0xB0 - ldrh r2, [r0] - lsls r2, 8 - adds r0, r2, 0 - movs r1, 0xC8 - lsls r1, 7 - bl sub_80D8AE0 - adds r2, r0, 0 - ldrh r4, [r5] - b _0814CE5A -_0814CE2C: - ldrh r0, [r5] - cmp r0, 0 - bne _0814CE36 -_0814CE32: - movs r4, 0 - b _0814CE64 -_0814CE36: - adds r1, r3, 0 - adds r1, 0xB2 - ldrh r0, [r1] - ldrh r2, [r7, 0x28] - cmp r0, r2 - bcc _0814CE48 - movs r4, 0xC8 - lsls r4, 7 - b _0814CE64 -_0814CE48: - ldrh r2, [r1] - lsls r2, 8 - adds r0, r2, 0 - movs r1, 0xC8 - lsls r1, 7 - bl sub_80D8AE0 - adds r2, r0, 0 - ldrh r4, [r7, 0x28] -_0814CE5A: - lsls r4, 8 - adds r1, r4, 0 - bl sub_80D8B68 - adds r4, r0, 0 -_0814CE64: - asrs r4, 4 - adds r0, r7, 0 - adds r0, 0x7E - adds r0, r6 - strh r4, [r0] - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldrb r3, [r7, 0x9] - cmp r8, r3 - bcc _0814CDA4 - b _0814CF8E -_0814CE80: - movs r6, 0 - mov r8, r6 - ldrb r0, [r7, 0x9] - subs r0, 0x1 - adds r1, r7, 0 - adds r1, 0x68 - str r1, [sp, 0xC] - cmp r8, r0 - bge _0814CF24 -_0814CE92: - ldrb r0, [r7, 0x9] - subs r0, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - mov r2, r8 - adds r2, 0x1 - str r2, [sp, 0x8] - cmp r4, r8 - bls _0814CF14 - adds r3, r7, 0 - adds r3, 0x74 - str r3, [sp] - adds r6, r7, 0 - adds r6, 0x88 - str r6, [sp, 0x4] - movs r0, 0x90 - adds r0, r7 - mov r10, r0 - movs r1, 0x7E - adds r1, r7 - mov r9, r1 -_0814CEBC: - subs r2, r4, 0x1 - mov r12, r2 - lsls r6, r2, 1 - ldr r0, [sp] - adds r3, r0, r6 - lsls r5, r4, 1 - adds r1, r0, r5 - ldrh r2, [r3] - ldrh r0, [r1] - cmp r2, r0 - bcs _0814CEE6 - ldrh r0, [r1] - strh r2, [r1] - strh r0, [r3] - ldr r1, [sp, 0x4] - adds r2, r1, r4 - ldrb r3, [r2] - add r1, r12 - ldrb r0, [r1] - strb r0, [r2] - strb r3, [r1] -_0814CEE6: - mov r2, r9 - adds r3, r2, r6 - adds r1, r2, r5 - ldrh r2, [r3] - ldrh r6, [r1] - cmp r2, r6 - bcs _0814CF0A - ldrh r0, [r1] - strh r2, [r1] - strh r0, [r3] - mov r0, r10 - adds r2, r0, r4 - ldrb r3, [r2] - mov r1, r10 - add r1, r12 - ldrb r0, [r1] - strb r0, [r2] - strb r3, [r1] -_0814CF0A: - mov r1, r12 - lsls r0, r1, 24 - lsrs r4, r0, 24 - cmp r4, r8 - bhi _0814CEBC -_0814CF14: - ldr r2, [sp, 0x8] - lsls r0, r2, 24 - lsrs r0, 24 - mov r8, r0 - ldrb r0, [r7, 0x9] - subs r0, 0x1 - cmp r8, r0 - blt _0814CE92 -_0814CF24: - movs r0, 0 - ldr r1, [sp, 0xC] - movs r2, 0x30 - bl SendBlock - b _0814CF8E -_0814CF30: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814CF94 - b _0814CF64 -_0814CF3C: - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0814CF94 - adds r4, r7, 0 - adds r4, 0x68 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x30 - bl memset - ldr r1, _0814CF6C @ =gBlockRecvBuffer - adds r0, r4, 0 - movs r2, 0x30 - bl memcpy - bl ResetBlockReceivedFlags -_0814CF64: - movs r0, 0 - strh r0, [r7, 0x10] - b _0814CF8E - .align 2, 0 -_0814CF6C: .4byte gBlockRecvBuffer -_0814CF70: - bl sub_814B930 - movs r0, 0x12 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - movs r0, 0 - movs r1, 0xB - strh r1, [r7, 0x12] - strb r0, [r7, 0xC] - adds r1, r7, 0 - adds r1, 0x24 - strb r0, [r1] - b _0814CF94 -_0814CF8E: - ldrb r0, [r7, 0xC] - adds r0, 0x1 -_0814CF92: - strb r0, [r7, 0xC] -_0814CF94: - movs r0, 0 - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_814CC0C - - thumb_func_start sub_814CFA8 -sub_814CFA8: @ 814CFA8 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - ldrb r0, [r5, 0xC] - cmp r0, 0x4 - bhi _0814D084 - lsls r0, 2 - ldr r1, _0814CFC0 @ =_0814CFC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0814CFC0: .4byte _0814CFC4 - .align 2, 0 -_0814CFC4: - .4byte _0814CFD8 - .4byte _0814CFEA - .4byte _0814CFFC - .4byte _0814D02C - .4byte _0814D03C -_0814CFD8: - movs r0, 0x9C - lsls r0, 1 - adds r1, r5, r0 - adds r0, r5, 0 - bl sub_814E644 - cmp r0, 0 - bne _0814D084 - b _0814D08A -_0814CFEA: - movs r0, 0 - bl CopyBgTilemapBufferToVram - movs r0, 0x9C - lsls r0, 1 - adds r1, r5, r0 - movs r0, 0x1E - strb r0, [r1] - b _0814D084 -_0814CFFC: - movs r0, 0x9C - lsls r0, 1 - adds r1, r5, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _0814D00E - subs r0, 0x1 - strb r0, [r1] - b _0814D08A -_0814D00E: - ldr r0, _0814D028 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0814D08A - movs r0, 0x5 - bl PlaySE - adds r0, r5, 0 - bl sub_814E80C - b _0814D084 - .align 2, 0 -_0814D028: .4byte gMain -_0814D02C: - ldrh r0, [r5, 0x12] - cmp r0, 0xC - bhi _0814D084 - adds r0, 0x1 - movs r1, 0 - strh r0, [r5, 0x12] - strb r1, [r5, 0xC] - b _0814D08A -_0814D03C: - ldr r0, _0814D07C @ =gStringVar1 - ldr r1, [r5, 0x1C] - movs r2, 0 - movs r3, 0x6 - bl ConvertIntToDecimalStringN - ldr r4, _0814D080 @ =gStringVar2 - bl GetBerryPowder - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0 - movs r3, 0x6 - bl ConvertIntToDecimalStringN - movs r4, 0 - str r4, [sp] - adds r0, r6, 0 - movs r1, 0x2 - movs r2, 0x3 - movs r3, 0 - bl sub_814D5A4 - movs r0, 0x13 - strb r0, [r5, 0xE] - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - strb r4, [r5, 0xC] - b _0814D08A - .align 2, 0 -_0814D07C: .4byte gStringVar1 -_0814D080: .4byte gStringVar2 -_0814D084: - ldrb r0, [r5, 0xC] - adds r0, 0x1 - strb r0, [r5, 0xC] -_0814D08A: - movs r0, 0 - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_814CFA8 - - thumb_func_start sub_814D094 -sub_814D094: @ 814D094 - push {r4,r5,lr} - sub sp, 0x10 - adds r5, r0, 0 - adds r4, r1, 0 - ldrb r0, [r5, 0xC] - cmp r0, 0x4 - bhi _0814D178 - lsls r0, 2 - ldr r1, _0814D0AC @ =_0814D0B0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0814D0AC: .4byte _0814D0B0 - .align 2, 0 -_0814D0B0: - .4byte _0814D0C4 - .4byte _0814D100 - .4byte _0814D106 - .4byte _0814D150 - .4byte _0814D164 -_0814D0C4: - ldrh r1, [r5, 0x28] - ldr r0, _0814D0FC @ =0x00008c9f - cmp r1, r0 - bls _0814D0D6 - movs r1, 0x9C - lsls r1, 1 - adds r0, r5, r1 - bl sub_814EB04 -_0814D0D6: - movs r0, 0x1 - str r0, [sp] - adds r0, r4, 0 - movs r1, 0x8 - movs r2, 0 - movs r3, 0 - bl sub_814D5A4 - movs r4, 0 - movs r0, 0x13 - strb r0, [r5, 0xE] - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - strb r4, [r5, 0xC] - b _0814D17E - .align 2, 0 -_0814D0FC: .4byte 0x00008c9f -_0814D100: - bl LinkRfu_SetRfuFuncToSend6600 - b _0814D178 -_0814D106: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814D17E - movs r0, 0 - movs r1, 0 - bl DrawDialogueFrame - ldr r2, _0814D148 @ =gText_SavingDontTurnOffThePower2 - movs r0, 0 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x2 - movs r3, 0 - bl AddTextPrinterParameterized2 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldr r0, _0814D14C @ =sub_80DA634 - movs r1, 0 - bl CreateTask - b _0814D178 - .align 2, 0 -_0814D148: .4byte gText_SavingDontTurnOffThePower2 -_0814D14C: .4byte sub_80DA634 -_0814D150: - ldr r0, _0814D160 @ =sub_80DA634 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - beq _0814D178 - b _0814D17E - .align 2, 0 -_0814D160: .4byte sub_80DA634 -_0814D164: - movs r0, 0x14 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - movs r1, 0 - movs r0, 0xF - strh r0, [r5, 0x12] - strb r1, [r5, 0xC] - b _0814D17E -_0814D178: - ldrb r0, [r5, 0xC] - adds r0, 0x1 - strb r0, [r5, 0xC] -_0814D17E: - movs r0, 0 - add sp, 0x10 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_814D094 - - thumb_func_start sub_814D188 -sub_814D188: @ 814D188 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - ldrb r0, [r5, 0xC] - cmp r0, 0x1 - beq _0814D1CA - cmp r0, 0x1 - bgt _0814D1A0 - cmp r0, 0 - beq _0814D1A6 - b _0814D230 -_0814D1A0: - cmp r0, 0x2 - beq _0814D1D0 - b _0814D230 -_0814D1A6: - movs r0, 0x1 - str r0, [sp] - adds r0, r6, 0 - movs r1, 0x4 - movs r2, 0 - movs r3, 0 - bl sub_814D5A4 - movs r0, 0x14 - strb r0, [r5, 0xE] - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - movs r0, 0 - strb r0, [r5, 0xC] - b _0814D238 -_0814D1CA: - bl DisplayYesNoMenuDefaultYes - b _0814D230 -_0814D1D0: - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r4, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _0814D236 - adds r0, r5, 0 - adds r0, 0x42 - movs r1, 0 - movs r2, 0xC - bl memset - cmp r4, 0 - bne _0814D202 - bl CheckHasAtLeastOneBerry - lsls r0, 24 - cmp r0, 0 - beq _0814D1FE - strh r4, [r5, 0x14] - b _0814D206 -_0814D1FE: - movs r0, 0x3 - b _0814D204 -_0814D202: - movs r0, 0x1 -_0814D204: - strh r0, [r5, 0x14] -_0814D206: - movs r0, 0 - movs r1, 0x1 - bl ClearDialogWindowAndFrame - movs r4, 0 - str r4, [sp] - adds r0, r6, 0 - movs r1, 0x8 - movs r2, 0 - movs r3, 0 - bl sub_814D5A4 - movs r0, 0x15 - strb r0, [r5, 0xE] - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - strb r4, [r5, 0xC] - b _0814D236 -_0814D230: - ldrb r0, [r5, 0xC] - adds r0, 0x1 - strb r0, [r5, 0xC] -_0814D236: - movs r0, 0 -_0814D238: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_814D188 - - thumb_func_start sub_814D240 -sub_814D240: @ 814D240 - push {r4-r7,lr} - adds r4, r0, 0 - movs r5, 0 - ldrb r0, [r4, 0xC] - cmp r0, 0x1 - beq _0814D266 - cmp r0, 0x1 - bgt _0814D256 - cmp r0, 0 - beq _0814D260 - b _0814D30C -_0814D256: - cmp r0, 0x2 - beq _0814D288 - cmp r0, 0x3 - beq _0814D296 - b _0814D30C -_0814D260: - bl LinkRfu_SetRfuFuncToSend6600 - b _0814D30C -_0814D266: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814D312 - ldrh r0, [r4, 0x14] - adds r1, r4, 0 - adds r1, 0x42 - strh r0, [r1] - adds r0, r4, 0 - adds r0, 0x4E - strh r5, [r0] - movs r0, 0 - movs r2, 0x2 - bl SendBlock - b _0814D30C -_0814D288: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814D312 - strh r5, [r4, 0x10] - b _0814D30C -_0814D296: - bl GetBlockReceivedStatus - ldr r2, _0814D2E8 @ =gUnknown_846E3C8 - ldrb r3, [r4, 0x9] - subs r1, r3, 0x2 - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r1] - cmp r0, r1 - bne _0814D312 - adds r7, r4, 0 - adds r7, 0x42 - adds r6, r4, 0 - adds r6, 0x4E - cmp r5, r3 - bcs _0814D2D4 - adds r1, r6, 0 - ldr r2, _0814D2EC @ =gBlockRecvBuffer -_0814D2BC: - lsls r0, r5, 8 - adds r0, r2 - ldrh r0, [r0] - ldrh r3, [r1] - adds r0, r3 - strh r0, [r1] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - ldrb r0, [r4, 0x9] - cmp r5, r0 - bcc _0814D2BC -_0814D2D4: - ldrh r0, [r6] - cmp r0, 0 - beq _0814D2F0 - movs r0, 0x17 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - b _0814D2FA - .align 2, 0 -_0814D2E8: .4byte gUnknown_846E3C8 -_0814D2EC: .4byte gBlockRecvBuffer -_0814D2F0: - movs r0, 0x16 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C -_0814D2FA: - bl ResetBlockReceivedFlags - movs r1, 0 - movs r0, 0 - strh r0, [r7] - strh r0, [r6] - strh r0, [r4, 0x10] - strb r1, [r4, 0xC] - b _0814D314 -_0814D30C: - ldrb r0, [r4, 0xC] - adds r0, 0x1 - strb r0, [r4, 0xC] -_0814D312: - movs r0, 0 -_0814D314: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_814D240 - - thumb_func_start sub_814D31C -sub_814D31C: @ 814D31C - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - ldrb r4, [r5, 0xC] - cmp r4, 0x1 - beq _0814D34A - cmp r4, 0x1 - bgt _0814D332 - cmp r4, 0 - beq _0814D33C - b _0814D394 -_0814D332: - cmp r4, 0x2 - beq _0814D356 - cmp r4, 0x3 - beq _0814D37A - b _0814D394 -_0814D33C: - movs r0, 0x1 - negs r0, r0 - str r4, [sp] - movs r1, 0x1 - movs r2, 0 - movs r3, 0x10 - b _0814D370 -_0814D34A: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - beq _0814D394 - b _0814D39A -_0814D356: - movs r0, 0 - movs r1, 0x1 - bl ClearDialogWindowAndFrame - adds r0, r5, 0 - bl sub_814DA04 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 -_0814D370: - bl BeginNormalPaletteFade - bl UpdatePaletteFade - b _0814D394 -_0814D37A: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _0814D39A - movs r0, 0x7 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - movs r0, 0 - strh r4, [r5, 0x12] - b _0814D398 -_0814D394: - ldrb r0, [r5, 0xC] - adds r0, 0x1 -_0814D398: - strb r0, [r5, 0xC] -_0814D39A: - movs r0, 0 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_814D31C - - thumb_func_start sub_814D3A4 -sub_814D3A4: @ 814D3A4 - push {r4,r5,lr} - sub sp, 0x10 - adds r5, r0, 0 - ldrb r4, [r5, 0xC] - cmp r4, 0x1 - beq _0814D41C - cmp r4, 0x1 - bgt _0814D3BA - cmp r4, 0 - beq _0814D3C0 - b _0814D456 -_0814D3BA: - cmp r4, 0x2 - beq _0814D434 - b _0814D456 -_0814D3C0: - movs r0, 0 - movs r1, 0 - bl DrawDialogueFrame - ldrh r1, [r5, 0x14] - cmp r1, 0x3 - bne _0814D3F0 - ldr r0, _0814D3EC @ =gUnknown_846E328 - ldr r2, [r0, 0x14] - ldrb r3, [r5, 0xB] - str r4, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - str r1, [sp, 0xC] - movs r0, 0 - movs r1, 0x2 - bl AddTextPrinterParameterized2 - b _0814D40C - .align 2, 0 -_0814D3EC: .4byte gUnknown_846E328 -_0814D3F0: - ldr r0, _0814D418 @ =gUnknown_846E328 - ldr r2, [r0, 0x18] - ldrb r3, [r5, 0xB] - str r4, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x2 - bl AddTextPrinterParameterized2 -_0814D40C: - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - b _0814D456 - .align 2, 0 -_0814D418: .4byte gUnknown_846E328 -_0814D41C: - movs r0, 0 - bl IsTextPrinterActive - lsls r0, 16 - cmp r0, 0 - bne _0814D45C - movs r0, 0x9C - lsls r0, 1 - adds r1, r5, r0 - movs r0, 0x78 - strb r0, [r1] - b _0814D456 -_0814D434: - movs r0, 0x9C - lsls r0, 1 - adds r1, r5, r0 - ldrb r0, [r1] - adds r4, r0, 0 - cmp r4, 0 - beq _0814D448 - subs r0, 0x1 - strb r0, [r1] - b _0814D45C -_0814D448: - movs r0, 0x18 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - strb r4, [r5, 0xC] - b _0814D45C -_0814D456: - ldrb r0, [r5, 0xC] - adds r0, 0x1 - strb r0, [r5, 0xC] -_0814D45C: - movs r0, 0 - add sp, 0x10 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_814D3A4 - - thumb_func_start sub_814D468 -sub_814D468: @ 814D468 - push {r4,r5,lr} - adds r5, r0, 0 - ldrb r4, [r5, 0xC] - cmp r4, 0x1 - beq _0814D488 - cmp r4, 0x1 - bgt _0814D47C - cmp r4, 0 - beq _0814D482 - b _0814D4B8 -_0814D47C: - cmp r4, 0x2 - beq _0814D498 - b _0814D4B8 -_0814D482: - bl LinkRfu_SetRfuFuncToSend6600 - b _0814D4B8 -_0814D488: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0814D4BE - bl Link_TryStartSend5FFF - b _0814D4B8 -_0814D498: - ldr r0, _0814D4B4 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _0814D4BE - movs r0, 0x19 - strb r0, [r5, 0xE] - movs r0, 0x5 - movs r1, 0x1 - movs r2, 0 - bl sub_814BB4C - strb r4, [r5, 0xC] - b _0814D4BE - .align 2, 0 -_0814D4B4: .4byte gReceivedRemoteLinkPlayers -_0814D4B8: - ldrb r0, [r5, 0xC] - adds r0, 0x1 - strb r0, [r5, 0xC] -_0814D4BE: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_814D468 - - thumb_func_start sub_814D4C8 -sub_814D4C8: @ 814D4C8 - push {lr} - movs r0, 0 - bl sub_814B6FC - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_814D4C8 - - thumb_func_start sub_814D4D8 -sub_814D4D8: @ 814D4D8 - push {r4-r6,lr} - adds r4, r0, 0 - movs r5, 0 - movs r0, 0x33 - bl IncrementGameStat - strb r5, [r4, 0xD] - movs r1, 0 - strh r5, [r4, 0x10] - movs r0, 0x2 - strh r0, [r4, 0x12] - strh r5, [r4, 0x14] - str r5, [r4, 0x1C] - strh r5, [r4, 0x18] - strh r5, [r4, 0x1A] - str r5, [r4, 0x20] - adds r0, r4, 0 - adds r0, 0x24 - strb r1, [r0] - adds r1, r4, 0 - adds r1, 0x25 - movs r0, 0 - strb r0, [r1] - strh r5, [r4, 0x26] - strh r5, [r4, 0x28] - strh r5, [r4, 0x2E] - ldr r0, _0814D560 @ =0x0000ffff - strh r0, [r4, 0x32] - strh r5, [r4, 0x30] - strh r5, [r4, 0x34] - movs r6, 0 - movs r3, 0 -_0814D518: - lsls r0, r5, 5 - adds r2, r4, r0 - adds r1, r2, 0 - adds r1, 0xA4 - ldr r0, _0814D560 @ =0x0000ffff - strh r0, [r1] - adds r0, r2, 0 - adds r0, 0xA6 - strh r3, [r0] - adds r0, 0x2 - strh r3, [r0] - adds r1, 0x6 - movs r0, 0x1 - strh r0, [r1] - adds r0, r2, 0 - adds r0, 0xAC - strh r3, [r0] - adds r0, 0x2 - strh r3, [r0] - adds r0, 0x2 - strh r3, [r0] - adds r0, 0x2 - strh r3, [r0] - adds r0, 0x2 - strb r6, [r0] - adds r0, 0x1 - strb r6, [r0] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x4 - bls _0814D518 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0814D560: .4byte 0x0000ffff - thumb_func_end sub_814D4D8 - - thumb_func_start sub_814D564 -sub_814D564: @ 814D564 - push {r4-r6,lr} - sub sp, 0x8 - str r2, [sp, 0x4] - ldr r5, [sp, 0x18] - ldr r6, [sp, 0x1C] - ldr r4, [sp, 0x20] - mov r2, sp - strh r4, [r2] - add r4, sp, 0x4 - ldrb r2, [r4] - strb r2, [r0] - ldrb r2, [r4, 0x1] - strb r2, [r0, 0x1] - ldrb r2, [r4, 0x2] - strb r2, [r0, 0x2] - ldrb r2, [r4, 0x3] - strb r2, [r0, 0x3] - strb r3, [r0, 0x4] - strb r5, [r0, 0x5] - strb r6, [r0, 0x6] - mov r2, sp - ldrb r2, [r2] - strb r2, [r0, 0x7] - mov r2, sp - ldrb r2, [r2, 0x1] - strb r2, [r0, 0x8] - strb r1, [r0, 0x9] - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_814D564 - - thumb_func_start sub_814D5A4 -sub_814D5A4: @ 814D5A4 - push {r4,r5,lr} - sub sp, 0x4 - ldr r5, [sp, 0x10] - mov r4, sp - strh r3, [r4] - strb r1, [r0] - strb r2, [r0, 0x1] - mov r1, sp - ldrb r1, [r1] - strb r1, [r0, 0x2] - mov r1, sp - ldrb r1, [r1, 0x1] - strb r1, [r0, 0x3] - strb r5, [r0, 0x4] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_814D5A4 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/berry_crush.s b/data/berry_crush.s index 417347801..1d2a3182d 100644 --- a/data/berry_crush.s +++ b/data/berry_crush.s @@ -3,80 +3,6 @@ .section .rodata .align 2 -gUnknown_846E2E0:: @ 846E2E0 - .byte 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 - -gUnknown_846E2E8:: @ 846E2E8 - .byte 0x00, 0x01, 0x02, 0x03, 0x05, 0x00, 0x00, 0x00 - -gUnknown_846E2F0:: @ 846E2F0 - .byte 0x04, 0x01, 0x00, 0xff - .byte 0x00, 0x00, 0x00, 0x04 - .byte 0x02, 0x00, 0xff, 0x00 - .byte 0x00, 0x00, 0x04, 0x02 - .byte 0x00, 0xfe, 0x00, 0x00 - .byte 0x00, 0x06, 0x03, 0x01 - .byte 0xff, 0xfd, 0xff, 0x00 - .byte 0x06, 0x04, 0x01, 0xfe - .byte 0xfc, 0xfe, 0x00, 0x00 - -gUnknown_846E314:: @ 846E314 - .byte 0x03, 0x02, 0x01, 0x00 - .byte 0x03, 0x03, 0x01, 0x00 - .byte 0x03, 0x03, 0x02, 0x00 - .byte 0x03, 0x04, 0x02, 0x00 - .byte 0x03, 0x05, 0x03, 0x00 - -gUnknown_846E328:: @ 846E328 - .4byte gUnknown_841CE3C - .4byte gUnknown_841CE78 - .4byte gUnknown_841CEA8 - .4byte gUnknown_841CF14 - .4byte gUnknown_841CF50 - .4byte gUnknown_841CF70 - .4byte gUnknown_841CFA0 - .4byte gUnknown_841CFD4 - .4byte gUnknown_841D008 - -gUnknown_846E34C:: @ 846E34C - .4byte NULL - .4byte sub_814BBB8 - .4byte sub_814BC10 - .4byte sub_814BC74 - .4byte sub_814BD7C - .4byte sub_814BD9C - .4byte sub_814BDBC - .4byte sub_814BE0C - .4byte sub_814BE64 - .4byte sub_814BE7C - .4byte sub_814BFD0 - .4byte sub_814C118 - .4byte sub_814C24C - .4byte sub_814C850 - .4byte sub_814C8F8 - .4byte sub_814C990 - .4byte sub_814CB20 - .4byte sub_814CC0C - .4byte sub_814CFA8 - .4byte sub_814D094 - .4byte sub_814D188 - .4byte sub_814D240 - .4byte sub_814D31C - .4byte sub_814D3A4 - .4byte sub_814D468 - .4byte sub_814D4C8 - -gUnknown_846E3B4:: @ 846E3B4 - .byte 0x02, 0x04, 0x06, 0x07 - .byte 0x03, 0x05, 0x08, 0x0b - .byte 0x03, 0x07, 0x0b, 0x0f - .byte 0x04, 0x08, 0x0c, 0x11 - -gUnknown_846E3C4:: @ 846E3C4 - .byte 0x05, 0x07, 0x09, 0x0c - -gUnknown_846E3C8:: @ 846E3C8 - .byte 0x03, 0x07, 0x0f, 0x1f gUnknown_846E3CC:: @ 846E3CC .4byte 0x000000f8 diff --git a/include/berry.h b/include/berry.h index 5bf272d42..905ce291b 100644 --- a/include/berry.h +++ b/include/berry.h @@ -72,6 +72,6 @@ struct UnkStruct_0858AB24 { u16 unk1; }; -extern const struct UnkStruct_0858AB24 gUnknown_0858AB24[]; +extern const struct UnkStruct_0858AB24 gUnknown_83DFC9C[]; #endif // GUARD_BERRY_H diff --git a/include/berry_crush.h b/include/berry_crush.h index 864d9b9d3..97e530f5e 100644 --- a/include/berry_crush.h +++ b/include/berry_crush.h @@ -151,6 +151,7 @@ struct BerryCrushGame u8 unk31C0[0x1000]; }; +struct BerryCrushGame *sub_814B6F0(void); void StartBerryCrush(MainCallback callback); u32 sub_814B6FC(MainCallback callback); void sub_814B8F0(void); @@ -161,5 +162,16 @@ void sub_814BABC(struct BerryCrushGame *arg0); void sub_814BB4C(u16, u8, u8 *); void sub_814D564(u8 *, u32, s32, u32, u32, u32, u32); void sub_814D9CC(struct BerryCrushGame *arg0); +bool32 sub_814D5C8(void); +bool32 sub_814D888(void); +void sub_814DA24(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1); +void sub_814DC24(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1); +void sub_814DC5C(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1); +bool32 sub_814DE50(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1); +bool32 sub_814E644(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1); +void sub_814E80C(struct BerryCrushGame *arg0); +void sub_814DA04(struct BerryCrushGame *arg0); +void sub_814EB04(struct BerryCrushGame_138 *arg0); +void sub_814DB84(struct Sprite * sprite); #endif //GUARD_BERRY_CRUSH_H diff --git a/include/item.h b/include/item.h index 1d63c1a22..2c5852617 100644 --- a/include/item.h +++ b/include/item.h @@ -79,5 +79,6 @@ void RemovePCItem(u16 itemId, u16 quantity); void SortAndCompactBagPocket(struct BagPocket * pocket); u8 CountItemsInPC(void); void ApplyNewEncryptionKeyToBagItems_(u32 newKey); +bool8 CheckHasAtLeastOneBerry(void); #endif // GUARD_ITEM_H diff --git a/include/link_rfu.h b/include/link_rfu.h index 5ef954dd5..ba2eb0120 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -275,6 +275,7 @@ bool32 GetRfuUnkCE8(void); void sub_80FA4A8(void); void sub_80FB9D0(void); void sub_80FB030(u32 a0); +void sub_80FBA44(void); #include "mevent_server.h" extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; diff --git a/include/math_util.h b/include/math_util.h index 7a81ee7e3..946ecd949 100644 --- a/include/math_util.h +++ b/include/math_util.h @@ -4,5 +4,6 @@ s16 sub_80D8B90(s16 y); s16 sub_80D8AA0(s16 x, s16 y); s32 sub_80D8B68(s32 x, s32 y); +s32 sub_80D8AE0(s32 x, s32 y); #endif //GUARD_MATH_UTIL_H diff --git a/include/strings.h b/include/strings.h index ec5965b75..38252f6e6 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1148,4 +1148,15 @@ extern const u8 gUnknown_841DF92[]; extern const u8 gUnknown_841DF99[]; extern const u8 gUnknown_841DFA0[]; +// berry_cursh +extern const u8 gUnknown_841CE3C[]; +extern const u8 gUnknown_841CE78[]; +extern const u8 gUnknown_841CEA8[]; +extern const u8 gUnknown_841CF14[]; +extern const u8 gUnknown_841CF50[]; +extern const u8 gUnknown_841CF70[]; +extern const u8 gUnknown_841CFA0[]; +extern const u8 gUnknown_841CFD4[]; +extern const u8 gUnknown_841D008[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 1f819d6c7..8eac99b18 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -280,7 +280,7 @@ SECTIONS { src/pokemon_jump_5.o(.text); src/pokemon_jump_6.o(.text); src/berry_crush.o(.text); - asm/berry_crush_2.o(.text); + src/berry_crush_2.o(.text); asm/berry_crush_3.o(.text); src/wireless_communication_status_screen.o(.text); src/braille_text.o(.text); @@ -572,6 +572,7 @@ SECTIONS { src/pokemon_jump_4.o(.rodata); src/pokemon_jump_5.o(.rodata); src/pokemon_jump_6.o(.rodata); + src/berry_crush_2.o(.rodata); data/berry_crush.o(.rodata); src/wireless_communication_status_screen.o(.rodata); src/braille_text.o(.rodata); diff --git a/src/berry_crush.c b/src/berry_crush.c index b1a484a24..7943dc778 100644 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -15,7 +15,6 @@ static EWRAM_DATA struct BerryCrushGame *gUnknown_203F3DC = NULL; -struct BerryCrushGame *sub_814B6F0(void); static void sub_814B860(void); static void sub_814BA6C(void); static void sub_814BA80(void); diff --git a/src/berry_crush_2.c b/src/berry_crush_2.c new file mode 100644 index 000000000..9d994f64f --- /dev/null +++ b/src/berry_crush_2.c @@ -0,0 +1,1481 @@ +#include "global.h" +#include "gflib.h" +#include "berry.h" +#include "berry_crush.h" +#include "berry_powder.h" +#include "item.h" +#include "link.h" +#include "link_rfu.h" +#include "math_util.h" +#include "menu.h" +#include "minigame_countdown.h" +#include "new_menu_helpers.h" +#include "overworld.h" +#include "random.h" +#include "save.h" +#include "strings.h" +#include "constants/songs.h" + +static u32 sub_814BBB8(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814BC10(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814BC74(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814BD7C(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814BD9C(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814BDBC(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814BE0C(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814BE64(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814BE7C(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814BFD0(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814C118(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814C24C(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814C850(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814C8F8(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814C990(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814CB20(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814CC0C(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814CFA8(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814D094(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814D188(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814D240(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814D31C(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814D3A4(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814D468(struct BerryCrushGame * berryCrushGame, u8 *params); +static u32 sub_814D4C8(struct BerryCrushGame * berryCrushGame, u8 *params); +void sub_814D4D8(struct BerryCrushGame * r4); +void sub_814D5A4(u8 *r0, u32 r1, u32 r2, u32 r3, u32 r5); + +const u8 gUnknown_846E2E0[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; +const u8 gUnknown_846E2E8[] = {0x00, 0x01, 0x02, 0x03, 0x05, 0x00, 0x00, 0x00}; + +const s8 gUnknown_846E2F0[][7] = { + {0x04, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00}, + {0x04, 0x02, 0x00, 0xff, 0x00, 0x00, 0x00}, + {0x04, 0x02, 0x00, 0xfe, 0x00, 0x00, 0x00}, + {0x06, 0x03, 0x01, 0xff, 0xfd, 0xff, 0x00}, + {0x06, 0x04, 0x01, 0xfe, 0xfc, 0xfe, 0x00}, +}; + +ALIGNED(4) const u8 gUnknown_846E314[][4] = { + {0x03, 0x02, 0x01, 0x00}, + {0x03, 0x03, 0x01, 0x00}, + {0x03, 0x03, 0x02, 0x00}, + {0x03, 0x04, 0x02, 0x00}, + {0x03, 0x05, 0x03, 0x00} +}; + +const u8 *const gUnknown_846E328[] = { + gUnknown_841CE3C, + gUnknown_841CE78, + gUnknown_841CEA8, + gUnknown_841CF14, + gUnknown_841CF50, + gUnknown_841CF70, + gUnknown_841CFA0, + gUnknown_841CFD4, + gUnknown_841D008 +}; + +static u32 (*const gUnknown_846E34C[])(struct BerryCrushGame * berryCrushGame, u8 *params) = { + NULL, + sub_814BBB8, + sub_814BC10, + sub_814BC74, + sub_814BD7C, + sub_814BD9C, + sub_814BDBC, + sub_814BE0C, + sub_814BE64, + sub_814BE7C, + sub_814BFD0, + sub_814C118, + sub_814C24C, + sub_814C850, + sub_814C8F8, + sub_814C990, + sub_814CB20, + sub_814CC0C, + sub_814CFA8, + sub_814D094, + sub_814D188, + sub_814D240, + sub_814D31C, + sub_814D3A4, + sub_814D468, + sub_814D4C8 +}; + +const u8 gUnknown_846E3B4[][4] = { + {0x02, 0x04, 0x06, 0x07}, + {0x03, 0x05, 0x08, 0x0b}, + {0x03, 0x07, 0x0b, 0x0f}, + {0x04, 0x08, 0x0c, 0x11} +}; + +const u8 gUnknown_846E3C4[] = {0x05, 0x07, 0x09, 0x0c}; + +const u8 gUnknown_846E3C8[] = {0x03, 0x07, 0x0F, 0x1F}; + +void sub_814BB4C(u16 r5, u8 r4, u8 *r7) +{ + struct BerryCrushGame * r6 = sub_814B6F0(); + + if (r5 > 25) + r5 = 0; + switch (r4) + { + case 0: + if (r5 != 0) + gUnknown_846E34C[r5](r6, r7); + if (r6->unkE > 25) + r6->unkE = r4; + r6->unk4 = gUnknown_846E34C[r6->unkE]; + break; + case 1: + r6->unk4 = gUnknown_846E34C[r5]; + break; + } +} + +static u32 sub_814BBB8(struct BerryCrushGame * r6, u8 *r1) +{ + u16 r4; + u32 r0; +#ifndef NONMATCHING // fake match, nobody can write such code + register u32 r2 asm("r2"); + register u32 r3 asm("r3"); + + r2 = r1[0]; + r3 = r1[1]; + r3 <<= 8; + r2 |= r3; + r3 = r1[2]; + r3 <<= 16; + r2 |= r3; + r3 = r1[3]; + r3 <<= 24; + r0 = r2; + r0 |= r3; +#else + u32 r2; + + r0 = T1_READ_32(r1); +#endif + r2 = r1[9]; + r1[0] = r2; + r4 = r1[8] << 8; + r2 = r1[7]; + r4 |= r2; + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(r0, r1[4], r1[5], r1[6], r4); + UpdatePaletteFade(); + r6->unkE = 2; + return 0; +} + +static u32 sub_814BC10(struct BerryCrushGame * r4, u8 *r5) +{ + switch (r4->unkC) + { + case 0: + if (UpdatePaletteFade()) + return 0; + if(r5[0] != 0) + ++r4->unkC; + else + r4->unkC = 3; + return 0; + case 1: + LinkRfu_SetRfuFuncToSend6600(); + ++r4->unkC; + return 0; + case 2: + if (IsLinkTaskFinished()) + { + ++r4->unkC; + return 0; + } + return 0; + case 3: + sub_814BB4C(r4->unkF, 1, NULL); + r4->unkC = 0; + return 0; + default: + ++r4->unkC; + return 0; + } +} + +static u32 sub_814BC74(struct BerryCrushGame * r7, u8 *r5) +{ + u16 r4 = r5[3]; + + r4 <<= 8; + r4 |= r5[2]; + switch (r7->unkC) + { + case 0: + DrawDialogueFrame(0, 0); + if (r5[1] & 2) + { + StringExpandPlaceholders(gStringVar4, gUnknown_846E328[r5[0]]); + AddTextPrinterParameterized2(0, 2, gStringVar4, r7->unkB, 0, 2, 1, 3); + } + else + { + AddTextPrinterParameterized2(0, 2, gUnknown_846E328[r5[0]], r7->unkB, 0, 2, 1, 3); + } + CopyWindowToVram(0, 3); + break; + case 1: + if (!IsTextPrinterActive(0)) + { + if (r4 == 0) + ++r7->unkC; + break; + } + return 0; + case 2: + if (!(r4 & gMain.newKeys)) + return 0; + break; + case 3: + if (r5[1] & 1) + ClearDialogWindowAndFrame(0, TRUE); + sub_814BB4C(r7->unkE, 1, NULL); + r7->unkC = r5[4]; + return 0; + } + ++r7->unkC; + return 0; +} + +static u32 sub_814BD7C(struct BerryCrushGame * r4, UNUSED u8 *r1) +{ + if (sub_814D5C8() != 0) + sub_814BB4C(r4->unkE, 0, r4->unk36); + return 0; +} + +static u32 sub_814BD9C(struct BerryCrushGame * r4, UNUSED u8 *r1) +{ + if (sub_814D888() != 0) + sub_814BB4C(r4->unkE, 0, r4->unk36); + return 0; +} + +static u32 sub_814BDBC(struct BerryCrushGame * r4, UNUSED u8 *r1) +{ + switch (r4->unkC) + { + case 0: + LinkRfu_SetRfuFuncToSend6600(); + break; + case 1: + if (IsLinkTaskFinished()) + { + PlayNewMapMusic(MUS_SLOT); + sub_814BB4C(7, 1, NULL); + r4->unk12 = 3; + r4->unkC = 0; + } + return 0; + } + ++r4->unkC; + return 0; +} + +static u32 sub_814BE0C(struct BerryCrushGame * r4, u8 *r5) +{ + switch (r4->unkC) + { + default: + ++r4->unkC; + break; + case 0: + sub_814D4D8(r4); + sub_814D5A4(r5, 0, 1, 0, 1); + r4->unkE = 7; + sub_814BB4C(3, 1, NULL); + break; + case 1: + r4->unkE = 8; + sub_814BB4C(5, 1, NULL); + r4->unkC = 2; + break; + } + return 0; +} + +static u32 sub_814BE64(struct BerryCrushGame * r0, UNUSED u8 *r1) +{ + r0->unk4 = NULL; + SetMainCallback2(sub_814B8F0); + return 0; +} + +static u32 sub_814BE7C(struct BerryCrushGame * r5, u8 *r2) +{ + u8 r3; + + switch (r5->unkC) + { + case 0: + sub_814D5A4(r2, 1, 0, 0, 1); + r5->unkE = 9; + sub_814BB4C(3, 1, NULL); + return 0; + case 1: + LinkRfu_SetRfuFuncToSend6600(); + break; + case 2: + if (!IsLinkTaskFinished()) + return 0; + memset(r5->unk40.unk2, 0, sizeof(r5->unk40.unk2)); + r5->unk40.unk2[0] = r5->unk68.as_four_players.others[r5->unk8].unk0; + SendBlock(0, r5->unk40.unk2, 2); + break; + case 3: + if (!IsLinkTaskFinished()) + return 0; + r5->unk10 = 0; + break; + case 4: + if (GetBlockReceivedStatus() != gUnknown_846E3C8[r5->unk9 - 2]) + return 0; + for (r3 = 0; r3 < r5->unk9; ++r3) + { + r5->unk68.as_four_players.others[r3].unk0 = gBlockRecvBuffer[r3][0]; + if (r5->unk68.as_four_players.others[r3].unk0 > 0xB0) + r5->unk68.as_four_players.others[r3].unk0 = 0; + r5->unk18 += gUnknown_83DFC9C[r5->unk68.as_four_players.others[r3].unk0].unk0; + r5->unk1C += gUnknown_83DFC9C[r5->unk68.as_four_players.others[r3].unk0].unk1; + } + r5->unk10 = 0; + ResetBlockReceivedFlags(); + r5->unk20 = sub_80D8B68(r5->unk18 << 8, 0x2000); + break; + case 5: + ClearDialogWindowAndFrame(0, 1); + sub_814BB4C(10, 1, NULL); + r5->unk12 = 4; + r5->unkC = 0; + return 0; + } + ++r5->unkC; + return 0; +} + +static u32 sub_814BFD0(struct BerryCrushGame * r4, UNUSED u8 *r1) +{ + switch (r4->unkC) + { + case 0: + sub_814DA24(r4, &r4->unk138); + LinkRfu_SetRfuFuncToSend6600(); + break; + case 1: + if (!IsLinkTaskFinished()) + return 0; + r4->unk138.unk0 = 0; + r4->unk138.unk1 = 0; + r4->unk138.unk2 = 0; + r4->unk138.unk3 = 0; + break; + case 2: + r4->unk138.unk38[r4->unk138.unk0]->callback = sub_814DB84; + r4->unk138.unk38[r4->unk138.unk0]->affineAnimPaused = FALSE; + PlaySE(SE_NAGERU); + break; + case 3: + if (r4->unk138.unk38[r4->unk138.unk0]->callback == sub_814DB84) + return 0; + r4->unk138.unk38[r4->unk138.unk0] = NULL; + ++r4->unk138.unk0; + LinkRfu_SetRfuFuncToSend6600(); + break; + case 4: + if (!IsLinkTaskFinished()) + return 0; + if (r4->unk138.unk0 < r4->unk9) + { + r4->unkC = 2; + return 0; + } + r4->unk138.unk0 = 0; + break; + case 5: + sub_814DC24(r4, &r4->unk138); + LinkRfu_SetRfuFuncToSend6600(); + break; + case 6: + if (!IsLinkTaskFinished()) + return 0; + PlaySE(SE_RU_HYUU); + sub_814BB4C(11, 1, NULL); + r4->unk12 = 5; + r4->unkC = 0; + return 0; + } + ++r4->unkC; + return 0; +} + +static u32 sub_814C118(struct BerryCrushGame * r4, UNUSED u8 *r1) +{ + switch (r4->unkC) + { + case 0: + r4->unk2A += 4; + if (r4->unk2A < 0) + return 0; + r4->unk2A = 0; + r4->unk138.unk1 = 4; + r4->unk138.unk0 = 0; + r4->unk138.unk2 = gUnknown_846E2F0[r4->unk138.unk1][0]; + PlaySE(SE_W070); + break; + case 1: + r4->unk2C = gUnknown_846E2F0[r4->unk138.unk1][r4->unk138.unk0]; + SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); + SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); + SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C); + ++r4->unk138.unk0; + if (r4->unk138.unk0 < r4->unk138.unk2) + return 0; + if (r4->unk138.unk1 == 0) + break; + --r4->unk138.unk1; + r4->unk138.unk2 = gUnknown_846E2F0[r4->unk138.unk1][0]; + r4->unk138.unk0 = 0; + return 0; + case 2: + r4->unk2C = 0; + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG2VOFS, 0); + SetGpuReg(REG_OFFSET_BG3VOFS, 0); + LinkRfu_SetRfuFuncToSend6600(); + break; + case 3: + if (!IsLinkTaskFinished()) + return 0; + sub_814BB4C(12, 1, NULL); + r4->unk12 = 6; + r4->unkC = 0; + return 0; + } + ++r4->unkC; + return 0; +} + +static u32 sub_814C24C(struct BerryCrushGame * r4, UNUSED u8 *r1) +{ + switch (r4-> unkC) + { + case 1: + if (!IsLinkTaskFinished()) + return 0; + StartMinigameCountdown(0x1000, 0x1000, 120, 80, 0); + break; + case 2: + if (IsMinigameCountdownRunning()) + return 0; + // fallthrough + case 0: + LinkRfu_SetRfuFuncToSend6600(); + break; + case 3: + if (!IsLinkTaskFinished()) + return 0; + r4->unk138.unk0 = 0; + r4->unk138.unk1 = 0; + r4->unk138.unk2 = 0; + r4->unk138.unk3 = 0; + r4->unk10 = 0; + if (r4->unk8 == 0) + sub_814BB4C(13, 1, NULL); + else + sub_814BB4C(14, 1, NULL); + r4->unk12 = 7; + r4->unkC = 0; + return 0; + } + ++r4->unkC; + return 0; +} + +void sub_814C2FC(struct BerryCrushGame * r4) +{ + u8 r8 = 0; + u16 r3; + u16 *r2; + u8 r7 = 0; + s32 r2_ = 0; + s32 r0; + + for (r7 = 0; r7 < r4->unk9; ++r7) + { + r2 = gRecvCmds[r7]; + if ((r2[0] & 0xFF00) == 0x2F00 + && r2[1] == 2) + { + if ((u8)r2[2] & 4) + { + r4->unk5C.unk02_3 |= gUnknown_846E2E0[r7]; + r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] = 1; + ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[3]; + ++r8; + r3 = r4->unk28 - r4->unk68.as_four_players.others[r7].unk2; + if (r3 >= r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] - 1 + && r3 <= r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] + 1) + { + ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[0]; + r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] = r3; + if (r4->unk68.as_four_players.others[r7].unk4.as_hwords[0] > r4->unk68.as_four_players.others[r7].unk4.as_hwords[2]) + r4->unk68.as_four_players.others[r7].unk4.as_hwords[2] = r4->unk68.as_four_players.others[r7].unk4.as_hwords[0]; + } + else + { + r4->unk68.as_four_players.others[r7].unk4.as_hwords[0] = 0; + r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] = r3; + } + r4->unk68.as_four_players.others[r7].unk2 = r4->unk28; + if (++r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][4] > 2) + r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][4] = 0; + } + else + { + r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] = 0; + } + } + } + if (r8 > 1) + { + for (r7 = 0; r7 < r4->unk9; ++r7) + { + if (r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] != 0) + { + r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] |= 2; + ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[4]; + } + } + } + if (r8 != 0) + { + r4->unk2E += r8; + r8 += gUnknown_846E2E8[r8 - 1]; + r4->unk34 += r8; + r4->unk1A += r8; + r0 = r4->unk18; + r2_ = r4->unk1A; + if (r0 - r2_ > 0) + { + r2_ <<= 8; + r2_ = sub_80D8B68(r2_, r4->unk20); + r2_ >>= 8; + r4->unk24 = r2_; + } + else + { + r4->unk24 = 32; + r4->unk5C.unk02_0 = 1; + } + } +} + +void sub_814C4B8(struct BerryCrushGame * r3) +{ + u8 r6 = 0; + u16 r1 = 0; + u8 r4 = 0; + + for (r4 = 0; r4 < r3->unk9; ++r4) + { + if (r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] != 0) + { + ++r6; + r1 = r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][4] + 1; + if (r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] & 2) + r1 |= 4; + r1 <<= 3 * r4; + r3->unk5C.unk08 |= r1; + } + } + r3->unk5C.unk04 = r3->unk24; + if (r6 == 0) + { + if (r3->unk138.unk3 != 0) + ++r3->unk138.unk0; + else + goto SET_UNK5F_0; + } + else + { + if (r3->unk138.unk3 != 0) + { + if (r6 != r3->unk138.unk1) + { + r3->unk138.unk1 = r6 - 1; + r3->unk138.unk2 = gUnknown_846E314[r6 - 1][0]; + } + else + { + ++r3->unk138.unk0; + } + } + else + { + r3->unk138.unk0 = 0; + r3->unk138.unk1 = r6 - 1; + r3->unk138.unk2 = gUnknown_846E314[r6 - 1][0]; + r3->unk138.unk3 = 1; + } + } + if (r3->unk138.unk3 != 0) + { + if (r3->unk138.unk0 >= r3->unk138.unk2) + { + r3->unk138.unk0 = 0; + r3->unk138.unk1 = 0; + r3->unk138.unk2 = 0; + r3->unk138.unk3 = 0; + r1 = 0; + } + else + { + r1 = gUnknown_846E314[r3->unk138.unk1][r3->unk138.unk0 + 1]; + } + r3->unk5C.unk03 = r1; + } + else + { + SET_UNK5F_0: + r3->unk5C.unk03 = 0; + } + r3->unk5C.unk06 = r3->unk26; +} + +void sub_814C618(struct BerryCrushGame * r5) +{ + if (gMain.newKeys & A_BUTTON) + r5->unk5C.unk02_2 = 1; + if (gMain.heldKeys & A_BUTTON) + { + if (r5->unk68.as_four_players.others[r5->unk8].unk4.as_hwords[5] < r5->unk28) + ++r5->unk68.as_four_players.others[r5->unk8].unk4.as_hwords[5]; + } + if (r5->unk8 != 0 && r5->unk5C.unk02_2 == 0) + return; + r5->unk5C.unk00 = 2; + if (r5->unk28 % 30 == 0) + { + if (r5->unk2E > gUnknown_846E3C4[r5->unk9 - 2]) + { + ++r5->unk30; + r5->unk25_4 = 1; + } + else + { + r5->unk25_4 = 0; + } + r5->unk2E = 0; + ++r5->unk32; + } + if (r5->unk28 % 15 == 0) + { + if (r5->unk34 < gUnknown_846E3B4[r5->unk9 - 2][0]) + r5->unk25_5 = 0; + else if (r5->unk34 < gUnknown_846E3B4[r5->unk9 - 2][1]) + r5->unk25_5 = 1; + else if (r5->unk34 < gUnknown_846E3B4[r5->unk9 - 2][2]) + r5->unk34 = 2; // typo since r5->unk34 will be reset? + else if (r5->unk34 < gUnknown_846E3B4[r5->unk9 - 2][3]) + r5->unk34 = 3; // typo since r5->unk34 will be reset? + else + r5->unk25_5 = 4; + r5->unk34 = 0; + } + else + { + ++r5->unk10; + if (r5->unk10 > 60) + { + if (r5->unk10 > 70) + { + sub_80FBA44(); + r5->unk10 = 0; + } + else if (r5->unk5C.unk02_3 == 0) + { + sub_80FBA44(); + r5->unk10 = 0; + } + } + + } + if (r5->unk28 >= 36000) + r5->unk5C.unk02_0 = 1; + r5->unk5C.unk02_1 = r5->unk25_4; + r5->unk5C.unk0A = r5->unk25_5; + memcpy(r5->unk40.unk2, &r5->unk5C, sizeof(r5->unk40.unk2)); + RfuPrepareSend0x2f00(r5->unk40.unk2); +} + +void sub_814C7BC(struct BerryCrushGame * r5) +{ + struct BerryCrushGame_4E * r4_; +#ifndef NONMATCHING + register u32 r4 asm("r4"); + register u32 r0 asm("r0"); + + for (r4 = 0; r4 < r5->unk9; r4 = (u8)r0) + { + r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0; + r0 = r4 + 1; + } +#else + u8 r4; + + for (r4 = 0; r4 < r5->unk9; ++r4) + r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0; +#endif + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00 + || gRecvCmds[0][1] != 2) + { + r5->unk25_2 = 0; + } + else + { + r4_ = &r5->unk40.unkE; + memcpy(r4_, gRecvCmds, sizeof(struct BerryCrushGame_4E)); + r5->unk2A = r4_->unk6; + r5->unk2C = r4_->unk5; + r5->unk28 = r4_->unk8; + sub_814DC5C(r5, &r5->unk138); + if (r4_->unk4_0) + r5->unk25_3 = 1; + } +} + +static u32 sub_814C850(struct BerryCrushGame * r4, UNUSED u8 *r1) +{ + memset(&r4->unk5C, 0, sizeof(r4->unk5C)); + memset(&r4->unk40.unkE, 0, sizeof(r4->unk40.unkE)); + sub_814C7BC(r4); + SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); + SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); + SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C); + if (r4->unk25_3) + { + if (r4->unk28 >= 36000) + { + r4->unk28 = 36000; + sub_814BB4C(16, 1, NULL); + } + else + { + sub_814BB4C(15, 1, NULL); + } + r4->unk10 = 0; + r4->unkC = 0; + return 0; + } + else + { + ++r4->unk26; + sub_814C2FC(r4); + sub_814C4B8(r4); + sub_814C618(r4); + return 0; + } +} + +static u32 sub_814C8F8(struct BerryCrushGame * r4, UNUSED u8 *r1) +{ + memset(&r4->unk5C, 0, sizeof(r4->unk5C)); + memset(&r4->unk40.unkE, 0, sizeof(r4->unk40.unkE)); + sub_814C7BC(r4); + SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); + SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); + SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C); + if (r4->unk25_3) + { + if (r4->unk28 >= 36000) + { + r4->unk28 = 36000; + sub_814BB4C(16, 1, NULL); + } + else + { + sub_814BB4C(15, 1, NULL); + } + r4->unk10 = 0; + r4->unkC = 0; + return 0; + } + else + { + sub_814C618(r4); + return 0; + } +} + +static u32 sub_814C990(struct BerryCrushGame * r4, UNUSED u8 *r1) +{ + switch (r4->unkC) + { + case 0: + r4->unk12 = 8; + PlaySE(SE_W070); + BlendPalettes(0xFFFFFFFF, 8, RGB(31, 31, 0)); + r4->unk138.unk0 = 2; + break; + case 1: + if (--r4->unk138.unk0 != 255) + return 0; + BlendPalettes(0xFFFFFFFF, 0, RGB(31, 31, 0)); + r4->unk138.unk1 = 4; + r4->unk138.unk0 = 0; + r4->unk138.unk2 = gUnknown_846E2F0[r4->unk138.unk1][0]; + break; + case 2: + r4->unk2C = gUnknown_846E2F0[r4->unk138.unk1][r4->unk138.unk0]; + SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C); + SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C); + SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C); + if (++r4->unk138.unk0 < r4->unk138.unk2) + return 0; + if (r4->unk138.unk1 != 0) + { + --r4->unk138.unk1; + r4->unk138.unk2 = gUnknown_846E2F0[r4->unk138.unk1][0]; + r4->unk138.unk0 = 0; + return 0; + } + break; + case 3: + r4->unk2C = 0; + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG2VOFS, 0); + SetGpuReg(REG_OFFSET_BG3VOFS, 0); + break; + case 4: + if (!sub_814DE50(r4, &r4->unk138)) + return 0; + LinkRfu_SetRfuFuncToSend6600(); + r4->unk10 = 0; + break; + case 5: + if (!IsLinkTaskFinished()) + return 0; + sub_814BB4C(17, 1, NULL); + r4->unk10 = 0; + r4->unkC = 0; + return 0; + } + ++r4->unkC; + return 0; +} + +static u32 sub_814CB20(struct BerryCrushGame * r5, u8 *r6) +{ + switch (r5->unkC) + { + case 0: + r5->unk12 = 9; + PlaySE(SE_HAZURE); + BlendPalettes(0xFFFFFFFF, 8, RGB(31, 0, 0)); + r5->unk138.unk0 = 4; + break; + case 1: + if (--r5->unk138.unk0 != 255) + return 0; + BlendPalettes(0xFFFFFFFF, 0, RGB(31, 0, 0)); + r5->unk138.unk0 = 0; + break; + case 2: + if (!sub_814DE50(r5, &r5->unk138)) + return 0; + LinkRfu_SetRfuFuncToSend6600(); + r5->unk10 = 0; + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG2VOFS, 0); + SetGpuReg(REG_OFFSET_BG3VOFS, 0); + break; + case 3: + if (!IsLinkTaskFinished()) + return 0; + ConvertIntToDecimalStringN(gStringVar1, r5->unk1C, STR_CONV_MODE_LEFT_ALIGN, 6); + sub_814D5A4(r6, 7, 1, 0, 0); + r5->unkE = 19; + sub_814BB4C(3, 1, NULL); + r5->unk10 = 0; + r5->unkC = 0; + return 0; + } + ++r5->unkC; + return 0; +} + +static u32 sub_814CC0C(struct BerryCrushGame * r7, UNUSED u8 *r1) +{ + u8 r8, r4_; + s32 r2; + s32 r4; + u8 r6; // ??? + + switch (r7->unkC) + { + case 0: + memset(r7->unk40.unk2, 0, 2 * sizeof(u16)); + if (r7->unk68.as_four_players.others[r7->unk8].unk4.as_hwords[5] > r7->unk28) + r7->unk68.as_four_players.others[r7->unk8].unk4.as_hwords[5] = r7->unk28; + r7->unk40.unk2[0] = r7->unk68.as_four_players.others[r7->unk8].unk4.as_hwords[5]; + SendBlock(0, r7->unk40.unk2, 2); + break; + case 1: + if (!IsLinkTaskFinished()) + return 0; + r7->unk10 = 0; + break; + case 2: + if (GetBlockReceivedStatus() != gUnknown_846E3C8[r7->unk9 - 2]) + return 0; + for (r8 = 0; r8 < r7->unk9; ++r8) + r7->unk68.as_four_players.others[r8].unk4.as_hwords[5] = gBlockRecvBuffer[r8][0]; + r7->unk10 = 0; + r7->unk40.unk2[0] = 0; + ResetBlockReceivedFlags(); + if (r7->unk8 == 0) + r7->unkC = 3; + else + r7->unkC = 6; + return 0; + case 3: + memset( + &r7->unk68, + 0, + sizeof(struct BerryCrushGame_68_x_SubStruct) + ); + r7->unk68.as_four_players.unk00.unk04 = r7->unk28; + r7->unk68.as_four_players.unk00.unk06 = r7->unk18 / (r7->unk28 / 60); + r2 = sub_80D8AE0(r7->unk30 << 8, 0x3200); + r2 = sub_80D8B68(r2, r7->unk32 << 8) + 0x3200; + r2 >>= 8; + r7->unk68.as_four_players.unk00.unk08 = r2 & 0x7F; + r2 <<= 8; + r2 = sub_80D8B68(r2, 0x6400); + r4 = (r7->unk1C * r7->unk9) << 8; + r4 = sub_80D8AE0(r4, r2); + r7->unk68.as_four_players.unk00.unk00 = r4 >> 8; + r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7] = Random() % 3; + for (r6 = 0, r8 = 0; r8 < r7->unk9; ++r8) + { + r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][r8] = r8; + r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[1][r8] = r8; + r7->unk68.as_four_players.unk00.unk0C[0][r8] = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3]; + r7->unk68.as_four_players.unk00.unk0A += r7->unk68.as_four_players.unk00.unk0C[0][r8]; + switch (r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7]) + { + case 0: + if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0) + { + r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[2]; + r2 <<= 8; + r2 = sub_80D8AE0(r2, 0x6400); + r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3]; + r4 <<= 8; + r4 = sub_80D8B68(r2, r4); + } + else + { + r4 = 0; + } + break; + case 1: + if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0) + { + r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[4]; + r2 <<= 8; + r2 = sub_80D8AE0(r2, 0x6400); + r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3]; + r4 <<= 8; + r4 = sub_80D8B68(r2, r4); + } + else + { + r4 = 0; + } + break; + case 2: + if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] == 0) + { + r4 = 0; + } + else if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[5] >= r7->unk28) + { + r4 = 0x6400; + } + else + { + r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[5]; + r2 <<= 8; + r2 = sub_80D8AE0(r2, 0x6400); + r4 = r7->unk28; + r4 <<= 8; + r4 = sub_80D8B68(r2, r4); + } + break; + } + r4 >>= 4; + r7->unk68.as_four_players.unk00.unk0C[1][r8] = r4; + } + break; + case 4: + for (r6 = 0, r8 = 0; r8 < r7->unk9 - 1; ++r8) + { + for (r4_ = r7->unk9 - 1; r4_ > r8; --r4_) + { + u16 r0; + u8 r3; + u16 *sp00 = r7->unk68.as_four_players.unk00.unk0C[0]; + u8 *sp04 = r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0]; + u8 *r10 = r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[1]; + u16 *r9 = r7->unk68.as_four_players.unk00.unk0C[1]; + s32 r12 = r4_ - 1; + u16 *p1 = sp00 + r12; // these have to be here + u16 *p2 = sp00 + r4_; // to swap operands. macro? + + if (*p1 < *p2) + { + r0 = sp00[r4_]; + sp00[r4_] = sp00[r12]; + sp00[r12] = r0; + r3 = sp04[r4_]; + sp04[r4_] = sp04[r12]; + sp04[r12] = r3; + } + p1 = r9 + r12; + p2 = r9 + r4_; + if (*p1 < *p2) + { + r0 = r9[r4_]; + r9[r4_] = r9[r12]; + r9[r12] = r0; + r3 = r10[r4_]; + r10[r4_] = r10[r12]; + r10[r12] = r3; + } + } + } + SendBlock( + 0, + &r7->unk68, + sizeof(struct BerryCrushGame_68_x_SubStruct) + ); + break; + case 5: + if (!IsLinkTaskFinished()) + return 0; + r7->unk10 = 0; + break; + case 6: + if (GetBlockReceivedStatus() != 1) + return 0; + memset( + &r7->unk68, + 0, + sizeof(struct BerryCrushGame_68_x_SubStruct) + ); + memcpy( + &r7->unk68, + gBlockRecvBuffer, + sizeof(struct BerryCrushGame_68_x_SubStruct) + ); + ResetBlockReceivedFlags(); + r7->unk10 = 0; + break; + case 7: + sub_814B930(); + sub_814BB4C(18, 1, NULL); + r7->unk12 = 11; + r7->unkC = 0; + r7->unk24 = 0; + return 0; + } + ++r7->unkC; + return 0; +} + +static u32 sub_814CFA8(struct BerryCrushGame * r5, u8 *r6) +{ + switch (r5->unkC) + { + case 0: + if (!sub_814E644(r5, &r5->unk138)) + return 0; + break; + case 1: + CopyBgTilemapBufferToVram(0); + r5->unk138.unk0 = 30; + break; + case 2: + if (r5->unk138.unk0 != 0) + { + --r5->unk138.unk0; + return 0; + } + if (!(gMain.newKeys & A_BUTTON)) + return 0; + PlaySE(SE_SELECT); + sub_814E80C(r5); + break; + case 3: + if (r5->unk12 <= 12) + { + ++r5->unk12; + r5->unkC = 0; + return 0; + } + break; + case 4: + ConvertIntToDecimalStringN(gStringVar1, r5->unk1C, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(gStringVar2, GetBerryPowder(), STR_CONV_MODE_LEFT_ALIGN, 6); + sub_814D5A4(r6, 2, 3, 0, 0); + r5->unkE = 19; + sub_814BB4C(3, 1, NULL); + r5->unkC = 0; + return 0; + } + ++r5->unkC; + return 0; +} + +static u32 sub_814D094(struct BerryCrushGame * r5, u8 *r4) +{ + switch (r5->unkC) + { + case 0: + if (r5->unk28 >= 36000) + sub_814EB04(&r5->unk138); + sub_814D5A4(r4, 8, 0, 0, 1); + r5->unkE = 19; + sub_814BB4C(3, 1, NULL); + r5->unkC = 0; + return 0; + case 1: + LinkRfu_SetRfuFuncToSend6600(); + break; + case 2: + if (!IsLinkTaskFinished()) + return 0; + DrawDialogueFrame(0, 0); + AddTextPrinterParameterized2(0, 2, gText_SavingDontTurnOffThePower2, 0, 0, 2, 1, 3); + CopyWindowToVram(0, 3); + CreateTask(sub_80DA634, 0); + break; + case 3: + if (FuncIsActiveTask(sub_80DA634)) + return 0; + break; + case 4: + sub_814BB4C(20, 1, NULL); + r5->unk12 = 15; + r5->unkC = 0; + return 0; + } + ++r5->unkC; + return 0; +} + +static u32 sub_814D188(struct BerryCrushGame * r5, u8 *r6) +{ + s32 r4; +#ifndef NONMATCHING + register s32 r0 asm("r0"); +#else + s32 r0; +#endif + + switch (r5->unkC) + { + case 0: + sub_814D5A4(r6, 4, 0, 0, 1); + r5->unkE = 20; + sub_814BB4C(3, 1, NULL); + r0 = 0; + r5->unkC = r0; // dunno what it's doing because it's already in case 0 + return 0; + case 1: + DisplayYesNoMenuDefaultYes(); + break; + case 2: + if ((r4 = Menu_ProcessInputNoWrapClearOnChoose()) != -2) + { + memset(r5->unk40.unk2, 0, sizeof(r5->unk40.unk2)); + if (r4 == 0) + { + if (CheckHasAtLeastOneBerry()) + r5->unk14 = 0; + else + r5->unk14 = 3; + } + else + { + r5->unk14 = 1; + } + ClearDialogWindowAndFrame(0, 1); + sub_814D5A4(r6, 8, 0, 0, 0); + r5->unkE = 21; + sub_814BB4C(3, 1, NULL); + r5->unkC = 0; + } + return 0; + } + ++r5->unkC; + return 0; +} + +static u32 sub_814D240(struct BerryCrushGame * r4, UNUSED u8 *r1) +{ + u8 r5 = 0; + + switch (r4->unkC) + { + case 0: + LinkRfu_SetRfuFuncToSend6600(); + break; + case 1: + if (!IsLinkTaskFinished()) + return 0; + r4->unk40.unk2[0] = r4->unk14; + r4->unk40.unkE.unk0 = 0; + SendBlock(0, r4->unk40.unk2, sizeof(u16)); + break; + case 2: + if (!IsLinkTaskFinished()) + return 0; + r4->unk10 = 0; + break; + case 3: + if (GetBlockReceivedStatus() != gUnknown_846E3C8[r4->unk9 - 2]) + return 0; + for (; r5 < r4->unk9; ++r5) + r4->unk40.unkE.unk0 += gBlockRecvBuffer[r5][0]; + if (r4->unk40.unkE.unk0 != 0) + sub_814BB4C(23, 1, NULL); + else + sub_814BB4C(22, 1, NULL); + ResetBlockReceivedFlags(); + r4->unk40.unk2[0] = 0; + r4->unk40.unkE.unk0 = 0; + r4->unk10 = 0; + r4->unkC = 0; + return 0; + } + ++r4->unkC; + return 0; +} + +static u32 sub_814D31C(struct BerryCrushGame * r5, UNUSED u8 *r1) +{ + switch (r5->unkC) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 1, 0, 0x10, RGB_BLACK); + UpdatePaletteFade(); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + break; + case 2: + ClearDialogWindowAndFrame(0, 1); + sub_814DA04(r5); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + UpdatePaletteFade(); + break; + case 3: + if (UpdatePaletteFade()) + return 0; + sub_814BB4C(7, 1, NULL); + r5->unk12 = 3; + r5->unkC = 0; + return 0; + } + ++r5->unkC; + return 0; +} + +static u32 sub_814D3A4(struct BerryCrushGame * r5, UNUSED u8 *r1) +{ + switch (r5->unkC) + { + case 0: + DrawDialogueFrame(0, 0); + if (r5->unk14 == 3) + AddTextPrinterParameterized2(0, 2, gUnknown_846E328[5], r5->unkB, 0, 2, 1, 3); + else + AddTextPrinterParameterized2(0, 2, gUnknown_846E328[6], r5->unkB, 0, 2, 1, 3); + CopyWindowToVram(0, 3); + break; + case 1: + if (IsTextPrinterActive(0)) + return 0; + r5->unk138.unk0 = 120; + break; + case 2: + if (r5->unk138.unk0 != 0) + --r5->unk138.unk0; + else + { + sub_814BB4C(24, 1, NULL); + r5->unkC = 0; + } + return 0; + } + ++r5->unkC; + return 0; +} + +static u32 sub_814D468(struct BerryCrushGame * r5, UNUSED u8 *r1) +{ + switch (r5->unkC) + { + case 0: + LinkRfu_SetRfuFuncToSend6600(); + break; + case 1: + if (!IsLinkTaskFinished()) + return 0; + Link_TryStartSend5FFF(); + break; + case 2: + if (gReceivedRemoteLinkPlayers != 0) + return 0; + r5->unkE = 25; + sub_814BB4C(5, 1, NULL); + r5->unkC = 2; // ??? + return 0; + } + ++r5->unkC; + return 0; +} + +static u32 sub_814D4C8(UNUSED struct BerryCrushGame * r0, UNUSED u8 *r1) +{ + sub_814B6FC(NULL); + return 0; +} + +void sub_814D4D8(struct BerryCrushGame * r4) +{ + u8 r5 = 0; + + IncrementGameStat(GAME_STAT_BERRY_CRUSH_POINTS); + r4->unkD = 0; + r4->unk10 = 0; + r4->unk12 = 2; + r4->unk14 = 0; + r4->unk1C = 0; + r4->unk18 = 0; + r4->unk1A = 0; + r4->unk20 = 0; + r4->unk24 = 0; + r4->unk25_0 = 0; + r4->unk25_1 = 0; + r4->unk25_2 = 0; + r4->unk25_3 = 0; + r4->unk25_4 = 0; + r4->unk25_5 = 0; + r4->unk26 = 0; + r4->unk28 = 0; + r4->unk2E = 0; + r4->unk32 = -1; + r4->unk30 = 0; + r4->unk34 = 0; + for (; r5 < 5; ++r5) // why is it 5 instead of 4? fillerBC isn't sufficient for one player + { + r4->unk68.as_four_players.others[r5].unk0 = -1; + r4->unk68.as_four_players.others[r5].unk2 = 0; + r4->unk68.as_four_players.others[r5].unk4.as_hwords[0] = 0; + r4->unk68.as_four_players.others[r5].unk4.as_hwords[1] = 1; + r4->unk68.as_four_players.others[r5].unk4.as_hwords[2] = 0; + r4->unk68.as_four_players.others[r5].unk4.as_hwords[3] = 0; + r4->unk68.as_four_players.others[r5].unk4.as_hwords[4] = 0; + r4->unk68.as_four_players.others[r5].unk4.as_hwords[5] = 0; + r4->unk68.as_four_players.others[r5].unk4.as_2d_bytes[1][4] = 0; + r4->unk68.as_four_players.others[r5].unk4.as_2d_bytes[1][5] = 0; + } +} + +#ifdef NONMATCHING +void sub_814D564(u8 *r0, u32 r1, s32 r2, u32 r3, u32 r5, u32 r6, u32 r4) +{ + u8 sp[8]; + u8 *p; + + 1[(u32 *)sp] = r2; + 0[(u16 *)sp] = r4; + p = &sp[4]; + r0[0] = p[0]; + r0[1] = p[1]; + r0[2] = p[2]; + r0[3] = p[3]; + r0[4] = r3; + r0[5] = r5; + r0[6] = r6; + r0[7] = sp[0]; + r0[8] = sp[1]; + r0[9] = r1; +} +#else +NAKED +void sub_814D564(u8 *r0, u32 r1, s32 r2, u32 r3, u32 r5, u32 r6, u32 r4) +{ + asm_unified("\n\ + push {r4-r6,lr}\n\ + sub sp, 0x8\n\ + str r2, [sp, 0x4]\n\ + ldr r5, [sp, 0x18]\n\ + ldr r6, [sp, 0x1C]\n\ + ldr r4, [sp, 0x20]\n\ + mov r2, sp\n\ + strh r4, [r2]\n\ + add r4, sp, 0x4\n\ + ldrb r2, [r4]\n\ + strb r2, [r0]\n\ + ldrb r2, [r4, 0x1]\n\ + strb r2, [r0, 0x1]\n\ + ldrb r2, [r4, 0x2]\n\ + strb r2, [r0, 0x2]\n\ + ldrb r2, [r4, 0x3]\n\ + strb r2, [r0, 0x3]\n\ + strb r3, [r0, 0x4]\n\ + strb r5, [r0, 0x5]\n\ + strb r6, [r0, 0x6]\n\ + mov r2, sp\n\ + ldrb r2, [r2]\n\ + strb r2, [r0, 0x7]\n\ + mov r2, sp\n\ + ldrb r2, [r2, 0x1]\n\ + strb r2, [r0, 0x8]\n\ + strb r1, [r0, 0x9]\n\ + add sp, 0x8\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0"); +} +#endif + +void sub_814D5A4(u8 *r0, u32 r1, u32 r2, u32 r3, u32 r5) +{ + u8 sp[4]; + + 0[(u16 *)sp] = r3; + r0[0] = r1; + r0[1] = r2; + r0[2] = sp[0]; + r0[3] = sp[1]; + r0[4] = r5; +} + |