From 0383c80539d36e724a5c2a69e211305e8658237b Mon Sep 17 00:00:00 2001 From: Oliver Bell Date: Tue, 23 Dec 2025 19:28:20 +0000 Subject: [PATCH] chao_garden: more code, split input(?) code --- chao_garden/asm/code.s | 1279 ++--------------- chao_garden/asm/game.s | 102 ++ .../asm/non_matching/InitGameState.inc | 39 + chao_garden/include/gba/io_reg.h | 4 + chao_garden/include/global.h | 2 +- chao_garden/include/save.h | 5 +- chao_garden/ldscript.txt | 7 +- chao_garden/src/game.c | 359 +++++ chao_garden/src/save.c | 89 +- tools/entity_positions/.gitignore | 1 + tools/entity_positions/entity_positions | Bin 31832 -> 0 bytes 11 files changed, 693 insertions(+), 1194 deletions(-) create mode 100644 chao_garden/asm/game.s create mode 100644 chao_garden/asm/non_matching/InitGameState.inc create mode 100644 chao_garden/src/game.c delete mode 100644 tools/entity_positions/entity_positions diff --git a/chao_garden/asm/code.s b/chao_garden/asm/code.s index 4ec4bb904..32192b208 100644 --- a/chao_garden/asm/code.s +++ b/chao_garden/asm/code.s @@ -4,1023 +4,6 @@ .syntax unified .arm - thumb_func_start InitGameState -InitGameState: @ 0x0200043c - push {lr} - ldr r2, _02000474 @ =gUnknown_03003B88 - movs r0, #0 - movs r1, #0x50 - cmp r0, r1 - bhs _02000454 - movs r3, #0 -_0200044A: - strb r3, [r2] - adds r2, #1 - adds r0, #1 - cmp r0, r1 - blo _0200044A -_02000454: - ldr r1, _02000478 @ =gUnknown_03003BD8 - movs r2, #0xff - adds r0, r1, #0 - adds r0, #0x11 -_0200045C: - strb r2, [r0] - subs r0, #1 - cmp r0, r1 - bge _0200045C - bl sub_02008810 - ldr r1, _0200047C @ =gUnknown_03003B80 - str r0, [r1, #0x10] - movs r0, #0xff - strb r0, [r1, #0x1c] - pop {r0} - bx r0 - .align 2, 0 -_02000474: .4byte gUnknown_03003B88 -_02000478: .4byte gUnknown_03003BD8 -_0200047C: .4byte gUnknown_03003B80 - - thumb_func_start sub_02000480 -sub_02000480: @ 0x02000480 - push {r4, r5, r6, lr} - mov r6, sb - mov r5, r8 - push {r5, r6} - ldr r0, _0200052C @ =0x04000208 - mov sb, r0 - movs r5, #0 - strh r5, [r0] - ldr r6, _02000530 @ =0x04000200 - ldrh r1, [r6] - ldr r0, _02000534 @ =0x0000FF7F - ands r0, r1 - strh r0, [r6] - ldr r1, _02000538 @ =0x04000134 - movs r2, #0xc0 - lsls r2, r2, #8 - adds r0, r2, #0 - strh r0, [r1] - ldr r0, _0200053C @ =0x04000158 - strh r5, [r0] - subs r0, #8 - ldr r0, [r0] - ldr r0, _02000540 @ =0x04000154 - movs r1, #0 - mov r8, r1 - str r1, [r0] - ldr r1, _02000544 @ =0x04000140 - movs r0, #0x47 - strh r0, [r1] - ldr r0, _02000548 @ =sub_020006b8 - ldr r4, _0200054C @ =gUnknown_03000088 - ldr r2, _02000550 @ =0x04000148 - adds r1, r4, #0 - bl CpuSet - ldr r0, _02000554 @ =gIntrTable - adds r4, #1 - str r4, [r0] - ldr r0, _02000558 @ =gUnknown_030043DC - strb r5, [r0] - ldr r0, _0200055C @ =gUnknown_030043EC - strb r5, [r0] - ldr r1, _02000560 @ =gUnknown_030005B1 - movs r0, #0xa - strb r0, [r1] - ldr r0, _02000564 @ =gUnknown_030043E8 - strb r5, [r0] - ldr r1, _02000568 @ =gUnknown_030043D8 - ldr r0, _0200056C @ =gUnknown_030043E4 - strb r5, [r0] - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _02000570 @ =gUnknown_030005B0 - strb r5, [r0] - ldr r0, _02000574 @ =gUnknown_030005BC - mov r2, r8 - str r2, [r0] - ldr r3, _02000578 @ =gUnknown_030005A8 - ldr r2, _0200057C @ =0x080000AF - ldrb r0, [r2] - lsls r0, r0, #0x18 - ldr r1, _02000580 @ =0x004F5341 - orrs r0, r1 - str r0, [r3] - ldr r3, _02000584 @ =gUnknown_030005AC - ldrb r0, [r2] - lsls r0, r0, #0x18 - ldr r1, _02000588 @ =0x00425347 - orrs r0, r1 - str r0, [r3] - ldr r0, _0200058C @ =0x04000202 - movs r1, #0x80 - strh r1, [r0] - ldrh r0, [r6] - orrs r0, r1 - strh r0, [r6] - movs r0, #1 - mov r1, sb - strh r0, [r1] - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6} - pop {r0} - bx r0 - .align 2, 0 -_0200052C: .4byte 0x04000208 -_02000530: .4byte 0x04000200 -_02000534: .4byte 0x0000FF7F -_02000538: .4byte 0x04000134 -_0200053C: .4byte 0x04000158 -_02000540: .4byte 0x04000154 -_02000544: .4byte 0x04000140 -_02000548: .4byte sub_020006b8 -_0200054C: .4byte gUnknown_03000088 -_02000550: .4byte 0x04000148 -_02000554: .4byte gIntrTable -_02000558: .4byte gUnknown_030043DC -_0200055C: .4byte gUnknown_030043EC -_02000560: .4byte gUnknown_030005B1 -_02000564: .4byte gUnknown_030043E8 -_02000568: .4byte gUnknown_030043D8 -_0200056C: .4byte gUnknown_030043E4 -_02000570: .4byte gUnknown_030005B0 -_02000574: .4byte gUnknown_030005BC -_02000578: .4byte gUnknown_030005A8 -_0200057C: .4byte 0x080000AF -_02000580: .4byte 0x004F5341 -_02000584: .4byte gUnknown_030005AC -_02000588: .4byte 0x00425347 -_0200058C: .4byte 0x04000202 - - thumb_func_start sub_02000590 -sub_02000590: @ 0x02000590 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - ldr r6, _020005AC @ =0x04000208 - movs r4, #0 - strh r4, [r6] - ldr r7, _020005B0 @ =gUnknown_030005B1 - ldrb r0, [r7] - cmp r0, #9 - bhi _020005B4 - ldrb r0, [r7] - adds r0, #1 - strb r0, [r7] - b _0200068A - .align 2, 0 -_020005AC: .4byte 0x04000208 -_020005B0: .4byte gUnknown_030005B1 -_020005B4: - ldr r0, _0200060C @ =gUnknown_030043EC - mov ip, r0 - ldrb r0, [r0] - adds r3, r0, #0 - cmp r3, #0 - beq _0200062C - ldrh r2, [r6] - strh r4, [r6] - ldr r1, _02000610 @ =0x04000134 - movs r3, #0x80 - lsls r3, r3, #8 - adds r0, r3, #0 - strh r0, [r1] - movs r3, #0xc0 - lsls r3, r3, #8 - adds r0, r3, #0 - strh r0, [r1] - ldr r0, _02000614 @ =0x04000158 - strh r4, [r0] - subs r0, #8 - ldr r0, [r0] - ldr r0, _02000618 @ =0x04000154 - movs r3, #0 - str r3, [r0] - adds r1, #0xc - movs r0, #0x47 - strh r0, [r1] - ldr r0, _0200061C @ =gUnknown_030043DC - strb r4, [r0] - mov r0, ip - strb r4, [r0] - movs r0, #0xa - strb r0, [r7] - ldr r0, _02000620 @ =gUnknown_030043E8 - strb r4, [r0] - ldr r0, _02000624 @ =gUnknown_030005B0 - strb r4, [r0] - ldr r0, _02000628 @ =gUnknown_030005BC - str r3, [r0] - adds r1, #0xc2 - movs r0, #0x80 - strh r0, [r1] - strh r2, [r6] - b _0200068A - .align 2, 0 -_0200060C: .4byte gUnknown_030043EC -_02000610: .4byte 0x04000134 -_02000614: .4byte 0x04000158 -_02000618: .4byte 0x04000154 -_0200061C: .4byte gUnknown_030043DC -_02000620: .4byte gUnknown_030043E8 -_02000624: .4byte gUnknown_030005B0 -_02000628: .4byte gUnknown_030005BC -_0200062C: - ldr r5, _0200063C @ =gUnknown_030005B0 - ldrb r0, [r5] - cmp r0, #0xa - bhi _02000640 - ldrb r0, [r5] - adds r0, #1 - strb r0, [r5] - b _0200068A - .align 2, 0 -_0200063C: .4byte gUnknown_030005B0 -_02000640: - ldrh r2, [r6] - mov r8, r2 - strh r3, [r6] - ldr r1, _0200069C @ =0x04000134 - movs r2, #0x80 - lsls r2, r2, #8 - adds r0, r2, #0 - strh r0, [r1] - movs r2, #0xc0 - lsls r2, r2, #8 - adds r0, r2, #0 - strh r0, [r1] - ldr r0, _020006A0 @ =0x04000158 - strh r3, [r0] - subs r0, #8 - ldr r0, [r0] - ldr r0, _020006A4 @ =0x04000154 - str r3, [r0] - adds r1, #0xc - movs r0, #0x47 - strh r0, [r1] - ldr r0, _020006A8 @ =gUnknown_030043DC - strb r4, [r0] - mov r0, ip - strb r4, [r0] - movs r0, #0xa - strb r0, [r7] - ldr r0, _020006AC @ =gUnknown_030043E8 - strb r4, [r0] - strb r4, [r5] - ldr r0, _020006B0 @ =gUnknown_030005BC - str r3, [r0] - adds r1, #0xc2 - movs r0, #0x80 - strh r0, [r1] - mov r1, r8 - strh r1, [r6] -_0200068A: - ldr r1, _020006B4 @ =0x04000208 - movs r0, #1 - strh r0, [r1] - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_0200069C: .4byte 0x04000134 -_020006A0: .4byte 0x04000158 -_020006A4: .4byte 0x04000154 -_020006A8: .4byte gUnknown_030043DC -_020006AC: .4byte gUnknown_030043E8 -_020006B0: .4byte gUnknown_030005BC -_020006B4: .4byte 0x04000208 - - thumb_func_start sub_020006b8 -sub_020006b8: @ 0x020006b8 - push {r4, r5, lr} - ldr r0, _020006D4 @ =0x04000140 - ldrh r0, [r0] - adds r5, r0, #0 - ldr r1, _020006D8 @ =gUnknown_030043DC - ldrb r0, [r1] - adds r3, r1, #0 - cmp r0, #9 - bhi _02000708 - lsls r0, r0, #2 - ldr r1, _020006DC @ =_020006E0 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_020006D4: .4byte 0x04000140 -_020006D8: .4byte gUnknown_030043DC -_020006DC: .4byte _020006E0 -_020006E0: @ jump table - .4byte _02000708 @ case 0 - .4byte _02000724 @ case 1 - .4byte _0200073A @ case 2 - .4byte _02000784 @ case 3 - .4byte _0200078A @ case 4 - .4byte _020007CC @ case 5 - .4byte _0200087C @ case 6 - .4byte _020008C8 @ case 7 - .4byte _020008E8 @ case 8 - .4byte _0200092C @ case 9 -_02000708: - movs r0, #1 - ands r0, r5 - cmp r0, #0 - bne _02000712 - b _02000962 -_02000712: - bl sub_02000bb0 - ldr r1, _02000720 @ =gUnknown_030043DC - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - b _02000962 - .align 2, 0 -_02000720: .4byte gUnknown_030043DC -_02000724: - movs r0, #4 - ands r0, r5 - cmp r0, #0 - bne _02000784 - movs r0, #1 - ands r0, r5 - cmp r0, #0 - beq _02000766 - bl sub_02000bb0 - b _02000962 -_0200073A: - movs r0, #2 - ands r0, r5 - cmp r0, #0 - beq _0200076A - ldr r0, _02000758 @ =0x04000150 - ldr r1, _0200075C @ =gUnknown_030005AC - ldr r2, [r0] - ldr r0, [r1] - cmp r2, r0 - bne _02000764 - ldr r1, _02000760 @ =0x04000158 - movs r0, #0x30 - strh r0, [r1] - b _02000784 - .align 2, 0 -_02000758: .4byte 0x04000150 -_0200075C: .4byte gUnknown_030005AC -_02000760: .4byte 0x04000158 -_02000764: - movs r0, #0 -_02000766: - strb r0, [r3] - b _02000962 -_0200076A: - movs r0, #1 - ands r0, r5 - cmp r0, #0 - beq _02000766 - bl sub_02000bb0 - ldr r1, _02000780 @ =gUnknown_030043DC - movs r0, #1 - strb r0, [r1] - b _02000962 - .align 2, 0 -_02000780: .4byte gUnknown_030043DC -_02000784: - ldrb r0, [r3] - adds r0, #1 - b _02000766 -_0200078A: - movs r0, #4 - ands r0, r5 - lsls r0, r0, #0x10 - lsrs r1, r0, #0x10 - cmp r1, #0 - beq _02000798 - b _02000934 -_02000798: - movs r0, #2 - ands r0, r5 - cmp r0, #0 - bne _020007A2 - b _02000962 -_020007A2: - ldr r0, _020007B8 @ =0x04000150 - ldr r4, [r0] - ldr r0, _020007BC @ =0x6F616843 - cmp r4, r0 - bne _020007C8 - ldr r0, _020007C0 @ =gUnknown_030005B1 - strb r1, [r0] - ldr r1, _020007C4 @ =gUnknown_030043EC - movs r0, #1 - strb r0, [r1] - b _0200095A - .align 2, 0 -_020007B8: .4byte 0x04000150 -_020007BC: .4byte 0x6F616843 -_020007C0: .4byte gUnknown_030005B1 -_020007C4: .4byte gUnknown_030043EC -_020007C8: - movs r4, #0 - b _0200095A -_020007CC: - movs r0, #4 - ands r0, r5 - lsls r0, r0, #0x10 - lsrs r1, r0, #0x10 - cmp r1, #0 - beq _020007DA - b _02000934 -_020007DA: - movs r0, #2 - ands r0, r5 - cmp r0, #0 - bne _020007E4 - b _02000962 -_020007E4: - ldr r0, _020007F8 @ =0x04000150 - ldr r4, [r0] - ldr r0, _020007FC @ =0x6F616843 - cmp r4, r0 - bne _02000808 - ldr r0, _02000800 @ =gUnknown_030005B1 - strb r1, [r0] - ldr r0, _02000804 @ =gUnknown_030043E8 - strb r1, [r0] - b _02000818 - .align 2, 0 -_020007F8: .4byte 0x04000150 -_020007FC: .4byte 0x6F616843 -_02000800: .4byte gUnknown_030005B1 -_02000804: .4byte gUnknown_030043E8 -_02000808: - ldr r0, _02000830 @ =0x4F414843 - cmp r4, r0 - bne _02000844 - ldr r0, _02000834 @ =gUnknown_030005B1 - strb r1, [r0] - ldr r1, _02000838 @ =gUnknown_030043E8 - movs r0, #1 - strb r0, [r1] -_02000818: - ldr r0, _0200083C @ =gUnknown_030043F0 - ldrh r1, [r0] - movs r0, #0xff - lsls r0, r0, #8 - ands r0, r1 - lsls r4, r0, #8 - lsls r1, r1, #0x18 - ldr r0, _02000840 @ =0x00004B43 - orrs r1, r0 - orrs r4, r1 - b _0200095A - .align 2, 0 -_02000830: .4byte 0x4F414843 -_02000834: .4byte gUnknown_030005B1 -_02000838: .4byte gUnknown_030043E8 -_0200083C: .4byte gUnknown_030043F0 -_02000840: .4byte 0x00004B43 -_02000844: - movs r0, #0xff - ands r0, r4 - cmp r0, #0x2a - bne _02000860 - adds r0, r4, #0 - bl sub_02000b0c - ldr r1, _0200085C @ =gUnknown_030043DC - movs r0, #6 - strb r0, [r1] - b _0200095A - .align 2, 0 -_0200085C: .4byte gUnknown_030043DC -_02000860: - cmp r0, #0x22 - bne _02000878 - adds r0, r4, #0 - bl sub_02000b64 - ldr r1, _02000874 @ =gUnknown_030043DC - movs r0, #8 - strb r0, [r1] - b _0200095A - .align 2, 0 -_02000874: .4byte gUnknown_030043DC -_02000878: - movs r4, #0 - b _0200095A -_0200087C: - movs r0, #4 - ands r0, r5 - cmp r0, #0 - bne _02000934 - movs r0, #2 - ands r0, r5 - cmp r0, #0 - beq _02000962 - ldr r0, _020008A8 @ =0x04000150 - ldr r4, [r0] - ldr r0, _020008AC @ =0x0000FFFF - ands r0, r4 - cmp r0, #0 - bne _020008B4 - adds r0, r4, #0 - bl sub_02000988 - adds r4, r0, #0 - ldr r1, _020008B0 @ =gUnknown_030043DC - movs r0, #7 - strb r0, [r1] - b _0200095A - .align 2, 0 -_020008A8: .4byte 0x04000150 -_020008AC: .4byte 0x0000FFFF -_020008B0: .4byte gUnknown_030043DC -_020008B4: - movs r0, #0xff - ands r0, r4 - cmp r0, #0x2a - bne _020008C4 - adds r0, r4, #0 - bl sub_02000b0c - b _0200095A -_020008C4: - movs r4, #0 - b _0200095A -_020008C8: - movs r0, #4 - ands r0, r5 - cmp r0, #0 - bne _02000934 - movs r0, #2 - ands r0, r5 - cmp r0, #0 - beq _02000962 - ldr r0, _020008E4 @ =0x04000150 - ldr r0, [r0] - bl sub_02000988 - b _02000958 - .align 2, 0 -_020008E4: .4byte 0x04000150 -_020008E8: - movs r0, #4 - ands r0, r5 - cmp r0, #0 - bne _02000934 - movs r0, #2 - ands r0, r5 - cmp r0, #0 - beq _02000962 - ldr r0, _0200090C @ =0x04000150 - ldr r4, [r0] - movs r0, #0xff - ands r0, r4 - cmp r0, #0x22 - bne _02000910 - adds r0, r4, #0 - bl sub_02000b64 - b _0200095A - .align 2, 0 -_0200090C: .4byte 0x04000150 -_02000910: - cmp r0, #0x26 - bne _02000928 - adds r0, r4, #0 - bl sub_02000a40 - adds r4, r0, #0 - ldr r1, _02000924 @ =gUnknown_030043DC - movs r0, #9 - strb r0, [r1] - b _0200095A - .align 2, 0 -_02000924: .4byte gUnknown_030043DC -_02000928: - movs r4, #0 - b _0200095A -_0200092C: - movs r0, #4 - ands r0, r5 - cmp r0, #0 - beq _02000948 -_02000934: - ldr r0, _02000940 @ =0x04000154 - ldr r1, _02000944 @ =gUnknown_030005BC - ldr r1, [r1] - str r1, [r0] - b _02000962 - .align 2, 0 -_02000940: .4byte 0x04000154 -_02000944: .4byte gUnknown_030005BC -_02000948: - movs r0, #2 - ands r0, r5 - cmp r0, #0 - beq _02000962 - ldr r0, _02000974 @ =0x04000150 - ldr r0, [r0] - bl sub_02000a40 -_02000958: - adds r4, r0, #0 -_0200095A: - ldr r0, _02000978 @ =0x04000154 - str r4, [r0] - ldr r0, _0200097C @ =gUnknown_030005BC - str r4, [r0] -_02000962: - ldr r0, _02000980 @ =gUnknown_030005B0 - movs r1, #0 - strb r1, [r0] - ldr r0, _02000984 @ =0x04000140 - strh r5, [r0] - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_02000974: .4byte 0x04000150 -_02000978: .4byte 0x04000154 -_0200097C: .4byte gUnknown_030005BC -_02000980: .4byte gUnknown_030005B0 -_02000984: .4byte 0x04000140 - - thumb_func_start sub_02000988 -sub_02000988: @ 0x02000988 - push {r4, r5, lr} - adds r3, r0, #0 - ldr r0, _020009CC @ =gUnknown_030005B8 - ldrh r2, [r0] - ldr r1, _020009D0 @ =gUnknown_030005BA - ldrh r0, [r1] - adds r0, #1 - adds r5, r1, #0 - cmp r2, r0 - bne _020009EC - ldr r0, _020009D4 @ =0x6F616843 - cmp r3, r0 - bne _020009EC - ldr r1, _020009D8 @ =gUnknown_030005B1 - movs r0, #0 - strb r0, [r1] - ldr r0, _020009DC @ =gUnknown_030043F0 - ldrh r1, [r0] - movs r0, #0xff - lsls r0, r0, #8 - ands r0, r1 - lsls r3, r0, #8 - lsls r1, r1, #0x18 - ldr r0, _020009E0 @ =0x00004B43 - orrs r1, r0 - orrs r3, r1 - ldr r1, _020009E4 @ =gUnknown_030043DC - movs r0, #5 - strb r0, [r1] - ldr r1, _020009E8 @ =gUnknown_030043D8 - movs r0, #2 - strb r0, [r1] - b _02000A36 - .align 2, 0 -_020009CC: .4byte gUnknown_030005B8 -_020009D0: .4byte gUnknown_030005BA -_020009D4: .4byte 0x6F616843 -_020009D8: .4byte gUnknown_030005B1 -_020009DC: .4byte gUnknown_030043F0 -_020009E0: .4byte 0x00004B43 -_020009E4: .4byte gUnknown_030043DC -_020009E8: .4byte gUnknown_030043D8 -_020009EC: - movs r1, #0xff - adds r0, r3, #0 - ands r0, r1 - lsls r2, r0, #8 - lsrs r0, r3, #8 - ands r0, r1 - orrs r2, r0 - adds r4, r2, #0 - adds r1, r5, #0 - ldrh r0, [r1] - subs r0, r2, r0 - cmp r0, #1 - bne _02000A10 - strh r2, [r1] - ldr r1, _02000A2C @ =gUnknown_030005B4 - ldr r0, [r1] - adds r0, #2 - str r0, [r1] -_02000A10: - ldrh r5, [r5] - cmp r4, r5 - bne _02000A34 - ldr r1, _02000A30 @ =gUnknown_030005B1 - movs r0, #0 - strb r0, [r1] - ldr r2, _02000A2C @ =gUnknown_030005B4 - ldr r1, [r2] - lsrs r0, r3, #0x10 - strb r0, [r1] - ldr r1, [r2] - lsrs r0, r3, #0x18 - strb r0, [r1, #1] - b _02000A36 - .align 2, 0 -_02000A2C: .4byte gUnknown_030005B4 -_02000A30: .4byte gUnknown_030005B1 -_02000A34: - movs r3, #0 -_02000A36: - adds r0, r3, #0 - pop {r4, r5} - pop {r1} - bx r1 - .align 2, 0 - - thumb_func_start sub_02000a40 -sub_02000a40: @ 0x02000a40 - push {r4, lr} - adds r3, r0, #0 - ldr r0, _02000A84 @ =gUnknown_030005B8 - ldrh r2, [r0] - ldr r1, _02000A88 @ =gUnknown_030005BA - ldrh r0, [r1] - adds r0, #1 - adds r4, r1, #0 - cmp r2, r0 - bne _02000AA4 - ldr r0, _02000A8C @ =gUnknown_030005BC - ldr r0, [r0] - cmp r0, r3 - bne _02000AC0 - ldr r1, _02000A90 @ =gUnknown_030005B1 - movs r0, #0 - strb r0, [r1] - ldr r0, _02000A94 @ =gUnknown_030043F0 - ldrh r1, [r0] - movs r0, #0xff - lsls r0, r0, #8 - ands r0, r1 - lsls r3, r0, #8 - lsls r1, r1, #0x18 - ldr r0, _02000A98 @ =0x00004B43 - orrs r1, r0 - orrs r3, r1 - ldr r1, _02000A9C @ =gUnknown_030043DC - movs r0, #5 - strb r0, [r1] - ldr r1, _02000AA0 @ =gUnknown_030043E4 - movs r0, #2 - strb r0, [r1] - b _02000ADC - .align 2, 0 -_02000A84: .4byte gUnknown_030005B8 -_02000A88: .4byte gUnknown_030005BA -_02000A8C: .4byte gUnknown_030005BC -_02000A90: .4byte gUnknown_030005B1 -_02000A94: .4byte gUnknown_030043F0 -_02000A98: .4byte 0x00004B43 -_02000A9C: .4byte gUnknown_030043DC -_02000AA0: .4byte gUnknown_030043E4 -_02000AA4: - ldr r0, _02000AE4 @ =gUnknown_030005BC - ldr r0, [r0] - cmp r0, r3 - bne _02000AC0 - ldr r1, _02000AE8 @ =gUnknown_030005B1 - movs r0, #0 - strb r0, [r1] - ldrh r0, [r4] - adds r0, #1 - strh r0, [r4] - ldr r1, _02000AEC @ =gUnknown_030005B4 - ldr r0, [r1] - adds r0, #2 - str r0, [r1] -_02000AC0: - ldr r0, _02000AEC @ =gUnknown_030005B4 - ldr r1, [r0] - ldrb r0, [r1] - lsls r3, r0, #0x10 - ldrb r0, [r1, #1] - lsls r0, r0, #0x18 - orrs r3, r0 - ldrh r1, [r4] - lsrs r0, r1, #8 - orrs r3, r0 - movs r0, #0xff - ands r0, r1 - lsls r0, r0, #8 - orrs r3, r0 -_02000ADC: - adds r0, r3, #0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_02000AE4: .4byte gUnknown_030005BC -_02000AE8: .4byte gUnknown_030005B1 -_02000AEC: .4byte gUnknown_030005B4 - - thumb_func_start sub_02000af0 -sub_02000af0: @ 0x02000af0 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - ldr r2, _02000B04 @ =0x04000208 - movs r1, #0 - strh r1, [r2] - ldr r1, _02000B08 @ =gUnknown_030043DC - strb r0, [r1] - movs r0, #1 - strh r0, [r2] - bx lr - .align 2, 0 -_02000B04: .4byte 0x04000208 -_02000B08: .4byte gUnknown_030043DC - - thumb_func_start sub_02000b0c -sub_02000b0c: @ 0x02000b0c - push {r4, lr} - ldr r2, _02000B48 @ =gUnknown_030005B1 - movs r1, #0 - strb r1, [r2] - ldr r2, _02000B4C @ =gUnknown_030005B4 - ldr r1, _02000B50 @ =gUnknown_03003350 - str r1, [r2] - ldr r3, _02000B54 @ =gUnknown_030005B8 - lsrs r1, r0, #8 - movs r4, #0xff - lsls r4, r4, #8 - adds r2, r4, #0 - ands r1, r2 - lsrs r0, r0, #0x18 - orrs r1, r0 - strh r1, [r3] - ldr r1, _02000B58 @ =gUnknown_030005BA - movs r0, #0 - strh r0, [r1] - ldr r1, _02000B5C @ =gUnknown_030043E0 - ldrh r0, [r3] - lsls r0, r0, #1 - str r0, [r1] - ldr r1, _02000B60 @ =gUnknown_030043D8 - movs r0, #1 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_02000B48: .4byte gUnknown_030005B1 -_02000B4C: .4byte gUnknown_030005B4 -_02000B50: .4byte gUnknown_03003350 -_02000B54: .4byte gUnknown_030005B8 -_02000B58: .4byte gUnknown_030005BA -_02000B5C: .4byte gUnknown_030043E0 -_02000B60: .4byte gUnknown_030043D8 - - thumb_func_start sub_02000b64 -sub_02000b64: @ 0x02000b64 - push {r4, lr} - ldr r2, _02000B98 @ =gUnknown_030005B1 - movs r1, #0 - strb r1, [r2] - ldr r2, _02000B9C @ =gUnknown_030005B4 - ldr r1, _02000BA0 @ =gUnknown_03003BD8 - str r1, [r2] - ldr r3, _02000BA4 @ =gUnknown_030005B8 - lsrs r1, r0, #8 - movs r4, #0xff - lsls r4, r4, #8 - adds r2, r4, #0 - ands r1, r2 - lsrs r0, r0, #0x18 - orrs r1, r0 - strh r1, [r3] - ldr r1, _02000BA8 @ =gUnknown_030005BA - movs r0, #0 - strh r0, [r1] - ldr r1, _02000BAC @ =gUnknown_030043E4 - movs r0, #1 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_02000B98: .4byte gUnknown_030005B1 -_02000B9C: .4byte gUnknown_030005B4 -_02000BA0: .4byte gUnknown_03003BD8 -_02000BA4: .4byte gUnknown_030005B8 -_02000BA8: .4byte gUnknown_030005BA -_02000BAC: .4byte gUnknown_030043E4 - - thumb_func_start sub_02000bb0 -sub_02000bb0: @ 0x02000bb0 - ldr r0, _02000BC4 @ =0x04000150 - ldr r0, [r0] - ldr r1, _02000BC8 @ =0x04000154 - ldr r0, _02000BCC @ =gUnknown_030005A8 - ldr r0, [r0] - str r0, [r1] - adds r1, #4 - movs r0, #0x20 - strh r0, [r1] - bx lr - .align 2, 0 -_02000BC4: .4byte 0x04000150 -_02000BC8: .4byte 0x04000154 -_02000BCC: .4byte gUnknown_030005A8 - - thumb_func_start sub_02000bd0 -sub_02000bd0: @ 0x02000bd0 - push {r4, r5, r6, lr} - ldr r1, _02000C40 @ =gUnknown_030043F0 - ldrh r5, [r1] - ldrh r6, [r1, #2] - ldr r0, _02000C44 @ =0x04000130 - ldrh r2, [r0] - movs r3, #0xfc - lsls r3, r3, #8 - adds r0, r3, #0 - orrs r0, r2 - strh r0, [r1, #2] - mvns r2, r0 - strh r2, [r1] - ldr r0, _02000C48 @ =gUnknown_03003330 - ldrb r1, [r0, #0xf] - movs r0, #0x40 - ands r0, r1 - lsls r0, r0, #0x18 - lsrs r4, r0, #0x18 - cmp r4, #0 - bne _02000C20 - movs r0, #0xf - ands r2, r0 - cmp r2, #0xf - bne _02000C20 - bl m4aMPlayAllStop - bl m4aSoundMain - bl VBlankIntrWait - bl m4aSoundVSyncOff - ldr r0, _02000C4C @ =0x04000208 - strh r4, [r0] - subs r0, #8 - strh r4, [r0] - movs r0, #0x20 - bl SoftResetRom -_02000C20: - ldr r1, _02000C40 @ =gUnknown_030043F0 - ldrh r2, [r1] - ands r6, r2 - movs r3, #0 - strh r6, [r1, #4] - lsls r0, r2, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0 - beq _02000C5C - cmp r0, r5 - bls _02000C50 - eors r5, r2 - strh r5, [r1, #6] - ldrb r0, [r1, #9] - b _02000C64 - .align 2, 0 -_02000C40: .4byte gUnknown_030043F0 -_02000C44: .4byte 0x04000130 -_02000C48: .4byte gUnknown_03003330 -_02000C4C: .4byte 0x04000208 -_02000C50: - ldrb r0, [r1, #8] - subs r0, #1 - strb r0, [r1, #8] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _02000C60 -_02000C5C: - strh r3, [r1, #6] - b _02000C66 -_02000C60: - strh r2, [r1, #6] - ldrb r0, [r1, #0xa] -_02000C64: - strb r0, [r1, #8] -_02000C66: - pop {r4, r5, r6} - pop {r0} - bx r0 - - thumb_func_start sub_02000c6c -sub_02000c6c: @ 0x02000c6c - ldr r1, _02000C88 @ =gUnknown_030043F0 - movs r0, #0 - strh r0, [r1, #6] - strh r0, [r1, #4] - strh r0, [r1] - ldr r0, _02000C8C @ =0x0000FFFF - strh r0, [r1, #2] - movs r0, #0xf - strb r0, [r1, #9] - strb r0, [r1, #8] - movs r0, #7 - strb r0, [r1, #0xa] - bx lr - .align 2, 0 -_02000C88: .4byte gUnknown_030043F0 -_02000C8C: .4byte 0x0000FFFF - thumb_func_start sub_02000c90 sub_02000c90: @ 0x02000c90 push {r4, lr} @@ -2735,7 +1718,7 @@ _02001934: ldr r1, _02001AE8 @ =gUnknown_0300159B strb r4, [r1] movs r5, #0 - ldr r0, _02001AEC @ =gUnknown_03003B80 + ldr r0, _02001AEC @ =gGameState adds r4, r0, #0 adds r4, #0x37 adds r6, r1, #0 @@ -2758,7 +1741,7 @@ _02001988: cmp r5, #0xf ble _0200196E ldr r1, _02001AF4 @ =gUnknown_0300152F - ldr r0, _02001AEC @ =gUnknown_03003B80 + ldr r0, _02001AEC @ =gGameState mov r8, r0 adds r0, #0x58 ldrb r0, [r0] @@ -2838,7 +1821,7 @@ _02001A2A: ldr r1, _02001B20 @ =gUnknown_03001530 movs r0, #0xff strb r0, [r1] - ldr r0, _02001AEC @ =gUnknown_03003B80 + ldr r0, _02001AEC @ =gGameState adds r4, r0, #0 adds r4, #0x59 ldrb r0, [r4] @@ -2915,7 +1898,7 @@ _02001ADC: .4byte gUnknown_030015A8 _02001AE0: .4byte sub_02003424 _02001AE4: .4byte gUnknown_03004424 _02001AE8: .4byte gUnknown_0300159B -_02001AEC: .4byte gUnknown_03003B80 +_02001AEC: .4byte gGameState _02001AF0: .4byte sub_020035CC _02001AF4: .4byte gUnknown_0300152F _02001AF8: .4byte sub_020074c0 @@ -3404,7 +2387,7 @@ _02001F6C: adds r6, #1 cmp r6, #3 ble _02001F3E - ldr r0, _02001F84 @ =gUnknown_03003B80 + ldr r0, _02001F84 @ =gGameState mov r1, sp ldrb r1, [r1] adds r0, #0x84 @@ -3412,7 +2395,7 @@ _02001F6C: b _02001FF8 .align 2, 0 _02001F80: .4byte gUnknown_03003C00 -_02001F84: .4byte gUnknown_03003B80 +_02001F84: .4byte gGameState _02001F88: movs r6, #0 adds r4, r7, #0 @@ -3519,7 +2502,7 @@ _02002024: ldr r5, _0200217C @ =gUnknown_03003330 ldr r0, [r5, #8] adds r4, r4, r0 - ldr r7, _02002180 @ =gUnknown_03003B80 + ldr r7, _02002180 @ =gGameState lsrs r1, r4, #0x18 adds r0, r7, #0 adds r0, #0xe8 @@ -3664,7 +2647,7 @@ _02002170: .4byte gUnknown_0202071C _02002174: .4byte gUnknown_03003C58 _02002178: .4byte gUnknown_03003C08 _0200217C: .4byte gUnknown_03003330 -_02002180: .4byte gUnknown_03003B80 +_02002180: .4byte gGameState _02002184: .4byte 0x00000529 _02002188: .4byte 0x000004EC @@ -4726,7 +3709,7 @@ _0200296A: subs r5, r3, r0 cmp r5, #0 beq _02002A56 - ldr r2, _020029CC @ =gUnknown_03003B80 + ldr r2, _020029CC @ =gGameState lsls r1, r3, #0x18 movs r0, #0xff lsls r0, r0, #8 @@ -4768,7 +3751,7 @@ _020029BC: .4byte gUnknown_0202000E _020029C0: .4byte 0x0600F482 _020029C4: .4byte 0x0000712A _020029C8: .4byte gUnknown_03005274 -_020029CC: .4byte gUnknown_03003B80 +_020029CC: .4byte gGameState _020029D0: .4byte gUnknown_02020EE8 _020029D4: rsbs r5, r5, #0 @@ -5127,7 +4110,7 @@ _02002C84: movs r2, #7 movs r3, #1 bl sub_020017b0 - ldr r0, _02002D38 @ =gUnknown_03003B80 + ldr r0, _02002D38 @ =gGameState adds r0, #0x71 ldrb r5, [r0] cmp r5, #0x12 @@ -5200,7 +4183,7 @@ _02002D28: .4byte gUnknown_03001538 _02002D2C: .4byte gUnknown_03003BEA _02002D30: .4byte 0x000002AF _02002D34: .4byte 0x0600F042 -_02002D38: .4byte gUnknown_03003B80 +_02002D38: .4byte gGameState _02002D3C: .4byte gUnknown_03003330 _02002D40: .4byte gUnknown_02020342 _02002D44: .4byte gUnknown_03001548 @@ -5620,7 +4603,7 @@ _020030A8: cmp r0, #2 bne _02003126 add r1, sp, #4 - ldr r4, _020031A8 @ =gUnknown_03003B80 + ldr r4, _020031A8 @ =gGameState adds r6, r4, #0 adds r6, #0x58 ldrb r0, [r6] @@ -5740,7 +4723,7 @@ _02003198: .4byte gUnknown_0300152A _0200319C: .4byte 0x04000208 _020031A0: .4byte gUnknown_030043E4 _020031A4: .4byte gUnknown_030043D8 -_020031A8: .4byte gUnknown_03003B80 +_020031A8: .4byte gGameState _020031AC: .4byte gUnknown_03003350 _020031B0: .4byte gUnknown_030043E0 _020031B4: .4byte gUnknown_03005274 @@ -6058,7 +5041,7 @@ sub_02003424: @ 0x02003424 ldrb r0, [r0] cmp r0, #0xf bhi _02003514 - ldr r4, _020034A4 @ =gUnknown_03003B80 + ldr r4, _020034A4 @ =gGameState ldr r0, [r4, #0x10] subs r0, #1 str r0, [r4, #0x10] @@ -6103,11 +5086,11 @@ _02003462: .align 2, 0 _0200349C: .4byte gUnknown_03003330 _020034A0: .4byte gUnknown_0300159B -_020034A4: .4byte gUnknown_03003B80 +_020034A4: .4byte gGameState _020034A8: .4byte gUnknown_02021BC4 _020034AC: movs r6, #0 - ldr r0, _02003520 @ =gUnknown_03003B80 + ldr r0, _02003520 @ =gGameState adds r1, r0, #0 adds r1, #0x37 ldrb r0, [r1] @@ -6128,7 +5111,7 @@ _020034CA: movs r2, #0 bl sub_02000d04 adds r4, r0, #0 - ldr r1, _02003520 @ =gUnknown_03003B80 + ldr r1, _02003520 @ =gGameState lsls r2, r6, #1 adds r0, r1, #0 adds r0, #0x37 @@ -6165,7 +5148,7 @@ _02003514: pop {r0} bx r0 .align 2, 0 -_02003520: .4byte gUnknown_03003B80 +_02003520: .4byte gGameState _02003524: .4byte sub_02003534 _02003528: .4byte gUnknown_020205E4 _0200352C: .4byte 0x00000109 @@ -6249,7 +5232,7 @@ _020035C8: .4byte gUnknown_03004E76 thumb_func_start sub_020035CC sub_020035CC: @ 0x020035CC - ldr r3, _02003604 @ =gUnknown_03003B80 + ldr r3, _02003604 @ =gGameState ldrb r1, [r0, #0x1a] lsls r1, r1, #1 adds r2, r3, #0 @@ -6277,7 +5260,7 @@ sub_020035CC: @ 0x020035CC str r1, [r0] bx lr .align 2, 0 -_02003604: .4byte gUnknown_03003B80 +_02003604: .4byte gGameState _02003608: .4byte gUnknown_020205E4 _0200360C: .4byte 0x00000109 _02003610: .4byte sub_02003614 @@ -6357,7 +5340,7 @@ _020036AA: ldrb r0, [r4, #7] cmp r0, #0 beq _020036DC - ldr r1, _020036D4 @ =gUnknown_03003B80 + ldr r1, _020036D4 @ =gGameState ldrb r0, [r4, #0x1a] lsls r0, r0, #1 adds r1, #0x37 @@ -6373,7 +5356,7 @@ _020036AA: b _020036E4 .align 2, 0 _020036D0: .4byte gUnknown_03004400 -_020036D4: .4byte gUnknown_03003B80 +_020036D4: .4byte gGameState _020036D8: .4byte gUnknown_0300159B _020036DC: ldrb r0, [r4, #4] @@ -6952,7 +5935,7 @@ _02003B14: ldrb r0, [r0] cmp r0, #0 beq _02003B2C - ldr r0, _02003B5C @ =gUnknown_03003B80 + ldr r0, _02003B5C @ =gGameState adds r0, #0x58 ldrb r0, [r0] cmp r0, #0 @@ -6982,7 +5965,7 @@ _02003B50: b _02003C14 .align 2, 0 _02003B58: .4byte gUnknown_0300152F -_02003B5C: .4byte gUnknown_03003B80 +_02003B5C: .4byte gGameState _02003B60: .4byte sub_02008cd4 _02003B64: .4byte gUnknown_0300152C _02003B68: .4byte gUnknown_030043F0 @@ -7322,7 +6305,7 @@ _02003E00: .4byte sub_02003748 sub_02003e04: @ 0x02003e04 push {r4, r5, r6, r7, lr} adds r3, r0, #0 - ldr r0, _02003EA0 @ =gUnknown_03003B80 + ldr r0, _02003EA0 @ =gGameState ldrb r1, [r0, #0x1f] strh r1, [r3, #0xa] adds r2, r0, #0 @@ -7402,7 +6385,7 @@ _02003E78: pop {r0} bx r0 .align 2, 0 -_02003EA0: .4byte gUnknown_03003B80 +_02003EA0: .4byte gGameState _02003EA4: .4byte gUnknown_020205E4 _02003EA8: .4byte gUnknown_02021F34 _02003EAC: .4byte gUnknown_030015A8 @@ -7418,7 +6401,7 @@ sub_02003eb4: @ 0x02003eb4 ands r0, r1 cmp r0, #0 bne _02003F62 - ldr r0, _02003EE0 @ =gUnknown_03003B80 + ldr r0, _02003EE0 @ =gGameState adds r1, r0, #0 adds r1, #0x59 ldrb r1, [r1] @@ -7430,7 +6413,7 @@ sub_02003eb4: @ 0x02003eb4 b _02003F62 .align 2, 0 _02003EDC: .4byte gUnknown_03003330 -_02003EE0: .4byte gUnknown_03003B80 +_02003EE0: .4byte gGameState _02003EE4: ldrb r0, [r4, #0x19] cmp r0, #2 @@ -7656,7 +6639,7 @@ _02004034: strh r0, [r5, #0x20] movs r2, #0xca lsls r2, r2, #1 - ldr r3, _020040D0 @ =gUnknown_03003B80 + ldr r3, _020040D0 @ =gGameState adds r0, r3, #0 adds r0, #0x59 ldrb r0, [r0] @@ -7678,7 +6661,7 @@ _020040AE: b _02004120 .align 2, 0 _020040CC: .4byte sub_02004130 -_020040D0: .4byte gUnknown_03003B80 +_020040D0: .4byte gGameState _020040D4: movs r5, #0x80 lsls r5, r5, #5 @@ -7822,7 +6805,7 @@ sub_020041E0: @ 0x020041E0 push {r6, r7} sub sp, #4 adds r7, r0, #0 - ldr r0, _02004200 @ =gUnknown_03003B80 + ldr r0, _02004200 @ =gGameState mov sb, r0 adds r0, #0x58 ldrb r0, [r0] @@ -7833,7 +6816,7 @@ sub_020041E0: @ 0x020041E0 strb r0, [r1] b _020043E2 .align 2, 0 -_02004200: .4byte gUnknown_03003B80 +_02004200: .4byte gGameState _02004204: .4byte gUnknown_0300152E _02004208: ldr r1, _020042CC @ =gUnknown_0300152E @@ -7963,7 +6946,7 @@ _02004312: strb r2, [r1, #1] movs r0, #1 strb r0, [r1] - ldr r0, _020043F4 @ =gUnknown_03003B80 + ldr r0, _020043F4 @ =gGameState ldrb r1, [r0, #0x1d] adds r3, r0, #0 cmp r1, #0 @@ -8073,7 +7056,7 @@ _020043E2: bx r0 .align 2, 0 _020043F0: .4byte gUnknown_030015A8 -_020043F4: .4byte gUnknown_03003B80 +_020043F4: .4byte gGameState _020043F8: .4byte gUnknown_02021F34 _020043FC: .4byte gUnknown_0300152D _02004400: .4byte gUnknown_03001518 @@ -8112,7 +7095,7 @@ _02004440: strh r0, [r1] lsls r0, r0, #0x10 adds r4, r1, #0 - ldr r5, _0200450C @ =gUnknown_03003B80 + ldr r5, _0200450C @ =gGameState cmp r0, #0 bne _02004464 movs r0, #0xb4 @@ -8179,7 +7162,7 @@ _020044A0: adds r0, #1 strb r0, [r1] _020044CA: - ldr r5, _0200450C @ =gUnknown_03003B80 + ldr r5, _0200450C @ =gGameState adds r1, r5, #0 adds r1, #0x74 ldrb r0, [r1] @@ -8210,7 +7193,7 @@ _020044CA: .align 2, 0 _02004504: .4byte gUnknown_03003330 _02004508: .4byte gUnknown_03001518 -_0200450C: .4byte gUnknown_03003B80 +_0200450C: .4byte gGameState _02004510: .4byte gUnknown_0300159B _02004514: ldrh r0, [r4, #8] @@ -8255,7 +7238,7 @@ _02004540: subs r0, r0, r1 lsls r0, r0, #2 strh r0, [r2, #0xa] - ldr r0, _020045A0 @ =gUnknown_03003B80 + ldr r0, _020045A0 @ =gGameState adds r1, r0, #0 adds r1, #0x73 ldrb r0, [r1] @@ -8271,7 +7254,7 @@ _02004578: subs r0, #1 strh r0, [r1] _02004584: - ldr r1, _020045A0 @ =gUnknown_03003B80 + ldr r1, _020045A0 @ =gGameState adds r0, r1, #0 adds r0, #0x73 ldrb r0, [r0] @@ -8283,7 +7266,7 @@ _02004584: .align 2, 0 _02004598: .4byte gUnknown_0300159B _0200459C: .4byte gUnknown_03001518 -_020045A0: .4byte gUnknown_03003B80 +_020045A0: .4byte gGameState _020045A4: .4byte gUnknown_03001526 _020045A8: .4byte 0x00034BC0 _020045AC: @@ -8400,7 +7383,7 @@ _020046FC: .align 2, 0 _02004700: .4byte gUnknown_03003330 _02004704: - ldr r0, _0200473C @ =gUnknown_03003B80 + ldr r0, _0200473C @ =gGameState adds r0, #0x58 ldrb r0, [r0] cmp r0, #0xff @@ -8428,7 +7411,7 @@ _02004712: movs r0, #3 b _0200474C .align 2, 0 -_0200473C: .4byte gUnknown_03003B80 +_0200473C: .4byte gGameState _02004740: adds r0, r1, #0 subs r0, #0x2e @@ -8903,7 +7886,7 @@ _02004ADE: beq _02004AF0 bl _02005E10 _02004AF0: - ldr r2, _02004B10 @ =gUnknown_03003B80 + ldr r2, _02004B10 @ =gGameState adds r1, r2, #0 adds r1, #0x76 movs r0, #0 @@ -8917,7 +7900,7 @@ _02004AF0: b _02004B32 .align 2, 0 _02004B0C: .4byte gUnknown_03003330 -_02004B10: .4byte gUnknown_03003B80 +_02004B10: .4byte gGameState _02004B14: .4byte gUnknown_03001526 _02004B18: adds r1, r2, #0 @@ -8983,7 +7966,7 @@ _02004B88: .align 2, 0 _02004B8C: .4byte gUnknown_03003330 _02004B90: - ldr r0, _02004BAC @ =gUnknown_03003B80 + ldr r0, _02004BAC @ =gGameState adds r2, r0, #0 adds r2, #0x62 ldrb r0, [r2] @@ -8999,7 +7982,7 @@ _02004BA0: strh r0, [r6, #0x14] b _02004BB8 .align 2, 0 -_02004BAC: .4byte gUnknown_03003B80 +_02004BAC: .4byte gGameState _02004BB0: movs r0, #0x50 strh r0, [r6, #0x14] @@ -9270,7 +8253,7 @@ _02004DB4: lsls r0, r0, #0x18 cmp r0, #0 bne _02004E1C - ldr r4, _02004DF0 @ =gUnknown_03003B80 + ldr r4, _02004DF0 @ =gGameState adds r0, r4, #0 adds r0, #0x75 ldrb r0, [r0] @@ -9291,7 +8274,7 @@ _02004DB4: strb r0, [r6, #7] b _02004E1C .align 2, 0 -_02004DF0: .4byte gUnknown_03003B80 +_02004DF0: .4byte gGameState _02004DF4: adds r0, r6, #0 bl sub_02005efc @@ -9302,7 +8285,7 @@ _02004DFC: ands r0, r1 cmp r0, #0 bne _02004E1C - ldr r1, _02004E38 @ =gUnknown_03003B80 + ldr r1, _02004E38 @ =gGameState adds r1, #0x75 ldrb r0, [r1] subs r0, #1 @@ -9327,7 +8310,7 @@ _02004E2E: ldr r0, _02004E3C @ =sub_020069F8 bl sub_020059ae .align 2, 0 -_02004E38: .4byte gUnknown_03003B80 +_02004E38: .4byte gGameState _02004E3C: .4byte sub_020069F8 _02004E40: ldr r0, _02004E64 @ =gUnknown_03003330 @@ -9421,7 +8404,7 @@ _02004EE4: beq _02004EF4 bl _02005B18 _02004EF4: - ldr r0, _02004F74 @ =gUnknown_03003B80 + ldr r0, _02004F74 @ =gGameState adds r2, r0, #0 adds r2, #0xcc ldrb r0, [r2] @@ -9437,7 +8420,7 @@ _02004F06: cmp r7, #0 bge _02004F06 _02004F10: - ldr r4, _02004F74 @ =gUnknown_03003B80 + ldr r4, _02004F74 @ =gGameState adds r2, r4, #0 adds r2, #0xc3 ldrb r1, [r2] @@ -9487,7 +8470,7 @@ _02004F36: b _02004FBA .align 2, 0 _02004F70: .4byte gUnknown_03003330 -_02004F74: .4byte gUnknown_03003B80 +_02004F74: .4byte gGameState _02004F78: adds r0, r2, #1 lsls r0, r0, #0x18 @@ -9544,15 +8527,15 @@ _02004FBA: _02004FDC: cmp r7, #0 beq _02004FF0 - ldr r0, _02004FEC @ =gUnknown_03003B80 + ldr r0, _02004FEC @ =gGameState adds r0, #0xcc movs r1, #0x5e strb r1, [r0] bl _02005B36 .align 2, 0 -_02004FEC: .4byte gUnknown_03003B80 +_02004FEC: .4byte gGameState _02004FF0: - ldr r3, _02005050 @ =gUnknown_03003B80 + ldr r3, _02005050 @ =gGameState add r0, sp, #4 ldrb r1, [r0] lsls r1, r1, #0x18 @@ -9599,7 +8582,7 @@ _0200503A: subs r7, r1, r0 b _02005058 .align 2, 0 -_02005050: .4byte gUnknown_03003B80 +_02005050: .4byte gGameState _02005054: asrs r0, r1, #0x13 adds r7, r0, #1 @@ -9862,7 +8845,7 @@ _02005270: blt _02005288 bl _02005E10 _02005288: - ldr r1, _020052CC @ =gUnknown_03003B80 + ldr r1, _020052CC @ =gGameState ldr r0, _020052D0 @ =gUnknown_0300152F movs r2, #0xff strb r2, [r0] @@ -9892,7 +8875,7 @@ _02005288: bl _02005E10 .align 2, 0 _020052C8: .4byte 0xFFFFEC00 -_020052CC: .4byte gUnknown_03003B80 +_020052CC: .4byte gGameState _020052D0: .4byte gUnknown_0300152F _020052D4: .4byte sub_020041E0 _020052D8: .4byte gUnknown_03003330 @@ -9934,7 +8917,7 @@ _02005312: movs r0, #0xfb ands r0, r1 strb r0, [r2, #0xf] - ldr r0, _02005348 @ =gUnknown_03003B80 + ldr r0, _02005348 @ =gGameState adds r0, #0xd0 ldr r1, _0200534C @ =0x00034BC0 str r1, [r0] @@ -9945,7 +8928,7 @@ _02005338: .4byte gUnknown_0300152C _0200533C: .4byte gUnknown_030043F0 _02005340: .4byte 0x0600E800 _02005344: .4byte gUnknown_03003330 -_02005348: .4byte gUnknown_03003B80 +_02005348: .4byte gGameState _0200534C: .4byte 0x00034BC0 _02005350: ldr r0, _020053B0 @ =gUnknown_03003330 @@ -10048,7 +9031,7 @@ _020053FA: adds r0, r0, r3 ldrb r0, [r0, #0x1a] strb r0, [r6, #0x1b] - ldr r2, _02005450 @ =gUnknown_03003B80 + ldr r2, _02005450 @ =gGameState add r0, sp, #4 ldrb r1, [r0] lsls r0, r1, #3 @@ -10076,7 +9059,7 @@ _020053FA: .align 2, 0 _02005448: .4byte gUnknown_03001508 _0200544C: .4byte gUnknown_03004400 -_02005450: .4byte gUnknown_03003B80 +_02005450: .4byte gGameState _02005454: .4byte gUnknown_0300159A _02005458: .4byte sub_02000ed4 _0200545C: @@ -10236,7 +9219,7 @@ _0200557E: strb r4, [r6, #0x19] movs r0, #0x17 strb r0, [r6, #0x17] - ldr r0, _020055B4 @ =gUnknown_03003B80 + ldr r0, _020055B4 @ =gGameState adds r1, r0, #0 adds r1, #0x75 ldrb r0, [r1] @@ -10249,7 +9232,7 @@ _020055A6: bl _02005E10 .align 2, 0 _020055B0: .4byte 0xFFFFF334 -_020055B4: .4byte gUnknown_03003B80 +_020055B4: .4byte gGameState _020055B8: ldr r1, _020055C4 @ =0xFFFFF334 adds r7, r7, r1 @@ -10762,7 +9745,7 @@ _0200597E: ble _0200598C b _02005E10 _0200598C: - ldr r0, _020059D4 @ =gUnknown_03003B80 + ldr r0, _020059D4 @ =gGameState adds r0, #0x90 ldrh r1, [r0] ldrb r0, [r0] @@ -10793,7 +9776,7 @@ _020059C4: .4byte gUnknown_03001502 _020059C8: .4byte gUnknown_03001504 _020059CC: .4byte gUnknown_03001506 _020059D0: .4byte sub_02008a2c -_020059D4: .4byte gUnknown_03003B80 +_020059D4: .4byte gGameState _020059D8: .4byte sub_02006798 _020059DC: strb r5, [r6, #0x1a] @@ -11354,7 +10337,7 @@ _02005E10: subs r0, r1, r0 strb r0, [r6, #0x18] strb r1, [r6, #0x1d] - ldr r2, _02005E4C @ =gUnknown_03003B80 + ldr r2, _02005E4C @ =gGameState ldrh r0, [r6, #0xa] strb r0, [r2, #0x1d] strb r1, [r2, #0x1e] @@ -11380,7 +10363,7 @@ sub_02005e36: bx r0 .align 2, 0 _02005E48: .4byte sub_02008a2c -_02005E4C: .4byte gUnknown_03003B80 +_02005E4C: .4byte gGameState _02005E50: .4byte gUnknown_03001514 _02005E54: .4byte gUnknown_03001940 @@ -11492,7 +10475,7 @@ sub_02005efc: @ 0x02005efc adds r7, r0, #0 movs r0, #0 strb r0, [r7, #7] - ldr r0, _02005F20 @ =gUnknown_03003B80 + ldr r0, _02005F20 @ =gGameState str r0, [sp, #0x10] adds r0, #0xd0 ldr r0, [r0] @@ -11501,7 +10484,7 @@ sub_02005efc: @ 0x02005efc movs r0, #0x20 b _0200655C .align 2, 0 -_02005F20: .4byte gUnknown_03003B80 +_02005F20: .4byte gGameState _02005F24: movs r0, #3 bl sub_02001554 @@ -11708,7 +10691,7 @@ _020060B2: cmp r5, #7 ble _02006020 _020060BC: - ldr r1, _0200623C @ =gUnknown_03003B80 + ldr r1, _0200623C @ =gGameState ldr r6, _02006240 @ =gUnknown_03003BB5 ldrb r0, [r6] cmp r0, #0 @@ -11894,7 +10877,7 @@ _0200617E: .align 2, 0 _02006234: .4byte gUnknown_03001940 _02006238: .4byte gUnknown_03003BA1 -_0200623C: .4byte gUnknown_03003B80 +_0200623C: .4byte gGameState _02006240: .4byte gUnknown_03003BB5 _02006244: .4byte 0x0000FFF8 _02006248: @@ -11953,7 +10936,7 @@ _020062A0: movs r0, #0x1c b _0200655C _020062B0: - ldr r0, _020062C8 @ =gUnknown_03003B80 + ldr r0, _020062C8 @ =gGameState adds r0, #0x92 ldrh r1, [r0] ldrb r0, [r0] @@ -11966,7 +10949,7 @@ _020062B0: movs r5, #0xc8 b _020062D0 .align 2, 0 -_020062C8: .4byte gUnknown_03003B80 +_020062C8: .4byte gGameState _020062CC: movs r5, #0 movs r6, #0xfa @@ -11988,7 +10971,7 @@ _020062D0: lsrs r4, r0, #0x10 cmp r0, #0 bge _02006318 - ldr r0, _02006304 @ =gUnknown_03003B80 + ldr r0, _02006304 @ =gGameState adds r0, #0x74 ldrb r0, [r0] cmp r0, #0 @@ -11996,7 +10979,7 @@ _020062D0: movs r0, #0x2b b _020063F0 .align 2, 0 -_02006304: .4byte gUnknown_03003B80 +_02006304: .4byte gGameState _02006308: cmp r0, #0x42 bls _0200630E @@ -12015,7 +10998,7 @@ _02006318: lsrs r4, r0, #0x10 cmp r0, #0 bge _0200633C - ldr r0, _02006338 @ =gUnknown_03003B80 + ldr r0, _02006338 @ =gGameState adds r0, #0x75 ldrb r0, [r0] cmp r0, #0x95 @@ -12026,7 +11009,7 @@ _02006332: movs r1, #0x2e b _02006390 .align 2, 0 -_02006338: .4byte gUnknown_03003B80 +_02006338: .4byte gGameState _0200633C: lsls r0, r4, #0x10 asrs r0, r0, #0x10 @@ -12035,7 +11018,7 @@ _0200633C: lsrs r4, r0, #0x10 cmp r0, #0 bge _020063A0 - ldr r0, _02006360 @ =gUnknown_03003B80 + ldr r0, _02006360 @ =gGameState adds r0, #0x73 ldrb r1, [r0] cmp r1, #0xbd @@ -12046,7 +11029,7 @@ _0200633C: movs r1, #0x1e b _02006394 .align 2, 0 -_02006360: .4byte gUnknown_03003B80 +_02006360: .4byte gGameState _02006364: cmp r1, #0xa5 bls _0200636C @@ -12110,7 +11093,7 @@ _020063BC: lsls r1, r1, #0x10 cmp r1, #0 bge _020063F8 - ldr r0, _020063E4 @ =gUnknown_03003B80 + ldr r0, _020063E4 @ =gGameState adds r0, #0x76 ldrb r0, [r0] cmp r0, #0x84 @@ -12118,7 +11101,7 @@ _020063BC: movs r0, #0x2c b _020063F0 .align 2, 0 -_020063E4: .4byte gUnknown_03003B80 +_020063E4: .4byte gGameState _020063E8: cmp r0, #0x63 bhi _020063EE @@ -12141,7 +11124,7 @@ _020063F8: lsrs r4, r0, #0x10 cmp r0, #0 bge _02006440 - ldr r0, _02006420 @ =gUnknown_03003B80 + ldr r0, _02006420 @ =gGameState adds r0, #0xcd ldrb r0, [r0] cmp r0, #0 @@ -12150,7 +11133,7 @@ _020063F8: b _0200643A .align 2, 0 _0200641C: .4byte 0xFFFFECCD -_02006420: .4byte gUnknown_03003B80 +_02006420: .4byte gGameState _02006424: bl sub_02001534 lsls r0, r0, #0x10 @@ -12174,7 +11157,7 @@ _02006440: lsrs r4, r0, #0x10 cmp r0, #0 bge _0200646C - ldr r0, _02006460 @ =gUnknown_03003B80 + ldr r0, _02006460 @ =gGameState adds r0, #0xce ldrb r0, [r0] cmp r0, #0 @@ -12183,7 +11166,7 @@ _02006440: b _02006466 .align 2, 0 _0200645C: .4byte 0xF3340000 -_02006460: .4byte gUnknown_03003B80 +_02006460: .4byte gGameState _02006464: movs r0, #0x67 _02006466: @@ -12219,7 +11202,7 @@ _02006498: adds r0, r0, r4 cmp r0, #0 bge _020064E0 - ldr r0, _020064B4 @ =gUnknown_03003B80 + ldr r0, _020064B4 @ =gGameState adds r0, #0x74 ldrb r0, [r0] cmp r0, #0 @@ -12228,7 +11211,7 @@ _02006498: b _020064DA .align 2, 0 _020064B0: .4byte 0xC0010000 -_020064B4: .4byte gUnknown_03003B80 +_020064B4: .4byte gGameState _020064B8: cmp r0, #0x10 bhi _020064C0 @@ -12255,7 +11238,7 @@ _020064DA: movs r0, #0x29 b _0200655C _020064E0: - ldr r0, _020064F4 @ =gUnknown_03003B80 + ldr r0, _020064F4 @ =gGameState adds r0, #0xcf ldrb r0, [r0] cmp r0, #0 @@ -12265,7 +11248,7 @@ _020064E0: movs r0, #0x27 b _0200655C .align 2, 0 -_020064F4: .4byte gUnknown_03003B80 +_020064F4: .4byte gGameState _020064F8: movs r0, #0x24 strb r0, [r7, #0x17] @@ -14610,7 +13593,7 @@ sub_02007688: @ 0x02007688 beq _0200769C b _02007962 _0200769C: - ldr r4, _020076D0 @ =gUnknown_03003B80 + ldr r4, _020076D0 @ =gGameState ldr r0, [r4, #0x14] cmp r0, #0 beq _020076A8 @@ -14638,7 +13621,7 @@ _020076B4: b _02007944 .align 2, 0 _020076CC: .4byte gUnknown_03003330 -_020076D0: .4byte gUnknown_03003B80 +_020076D0: .4byte gGameState _020076D4: ldr r0, _020076FC @ =gUnknown_030043F0 ldrh r1, [r0, #4] @@ -14729,7 +13712,7 @@ _0200775A: adds r4, #1 cmp r4, #6 ble _0200775A - ldr r5, _020077B4 @ =gUnknown_03003B80 + ldr r5, _020077B4 @ =gGameState adds r0, r5, #0 adds r0, #0x59 ldrb r0, [r0] @@ -14755,7 +13738,7 @@ _020077A4: .4byte gUnknown_030043F0 _020077A8: .4byte gUnknown_0300150C _020077AC: .4byte sub_02008b3c _020077B0: .4byte gUnknown_02012541 -_020077B4: .4byte gUnknown_03003B80 +_020077B4: .4byte gGameState _020077B8: .4byte gUnknown_03001501 _020077BC: ldr r1, _020077C8 @ =gUnknown_03001530 @@ -14898,7 +13881,7 @@ _020078BA: ldrb r0, [r6, #4] strb r0, [r1, #0x1b] _020078CC: - ldr r1, _020078F0 @ =gUnknown_03003B80 + ldr r1, _020078F0 @ =gGameState adds r0, r1, #0 adds r0, #0x31 ldrb r4, [r0] @@ -14914,7 +13897,7 @@ _020078CC: .align 2, 0 _020078E8: .4byte gUnknown_03001530 _020078EC: .4byte sub_02008b7c -_020078F0: .4byte gUnknown_03003B80 +_020078F0: .4byte gGameState _020078F4: .4byte sub_02008bc4 _020078F8: adds r0, r1, #0 @@ -14952,7 +13935,7 @@ _02007938: ldrb r0, [r6, #4] strb r0, [r1, #0x1b] _0200793C: - ldr r0, _02007970 @ =gUnknown_03003B80 + ldr r0, _02007970 @ =gGameState adds r0, #0xce movs r1, #1 strb r1, [r0] @@ -14978,7 +13961,7 @@ _02007962: bx r0 .align 2, 0 _0200796C: .4byte sub_02008bc4 -_02007970: .4byte gUnknown_03003B80 +_02007970: .4byte gGameState _02007974: .4byte gUnknown_03001528 thumb_func_start sub_02007978 @@ -15104,7 +14087,7 @@ _02007A50: movs r0, #0x19 bl m4aSongNumStart movs r2, #0 - ldr r0, _02007AC8 @ =gUnknown_03003B80 + ldr r0, _02007AC8 @ =gGameState adds r1, r0, #0 adds r1, #0x5a ldrb r0, [r1] @@ -15119,7 +14102,7 @@ _02007A7A: cmp r0, #0xff bne _02007A7A _02007A88: - ldr r0, _02007AC8 @ =gUnknown_03003B80 + ldr r0, _02007AC8 @ =gGameState adds r0, #0x5a adds r0, r2, r0 ldrb r1, [r4, #0x1a] @@ -15149,7 +14132,7 @@ _02007A88: b _02007AFA .align 2, 0 _02007AC4: .4byte gUnknown_030043F0 -_02007AC8: .4byte gUnknown_03003B80 +_02007AC8: .4byte gGameState _02007ACC: .4byte gUnknown_0300159A _02007AD0: .4byte gUnknown_03005274 _02007AD4: .4byte gUnknown_02012548 @@ -15286,7 +14269,7 @@ _02007BCC: bne _02007C20 movs r0, #0x19 bl m4aSongNumStart - ldr r0, _02007C18 @ =gUnknown_03003B80 + ldr r0, _02007C18 @ =gGameState ldrb r1, [r4, #0x1a] adds r0, #0x59 strb r1, [r0] @@ -15307,7 +14290,7 @@ _02007BCC: b _02007C3E .align 2, 0 _02007C14: .4byte gUnknown_030043F0 -_02007C18: .4byte gUnknown_03003B80 +_02007C18: .4byte gGameState _02007C1C: .4byte gUnknown_0300152C _02007C20: mov r2, ip @@ -15449,7 +14432,7 @@ _02007D18: ldrb r0, [r4, #0x1a] cmp r0, #1 bne _02007D42 - ldr r1, _02007D68 @ =gUnknown_03003B80 + ldr r1, _02007D68 @ =gGameState ldr r0, _02007D6C @ =0x00034BC0 str r0, [r1, #0x14] _02007D42: @@ -15470,7 +14453,7 @@ _02007D42: b _02007D92 .align 2, 0 _02007D64: .4byte gUnknown_030043F0 -_02007D68: .4byte gUnknown_03003B80 +_02007D68: .4byte gGameState _02007D6C: .4byte 0x00034BC0 _02007D70: .4byte gUnknown_0300152C _02007D74: @@ -15519,7 +14502,7 @@ _02007DB4: beq _02007DC2 b _02007FFA _02007DC2: - ldr r3, _02007EEC @ =gUnknown_03003B80 + ldr r3, _02007EEC @ =gGameState ldrb r1, [r5, #0x19] lsls r1, r1, #1 adds r0, r3, #0 @@ -15675,7 +14658,7 @@ _02007E80: .align 2, 0 _02007EE4: .4byte gUnknown_03001509 _02007EE8: .4byte gUnknown_03003330 -_02007EEC: .4byte gUnknown_03003B80 +_02007EEC: .4byte gGameState _02007EF0: .4byte gUnknown_0300150C _02007EF4: .4byte gUnknown_030043F0 _02007EF8: .4byte gUnknown_03001528 @@ -15697,7 +14680,7 @@ _02007F18: _02007F1C: lsls r0, r0, #0x10 lsrs r3, r0, #0x10 - ldr r2, _02007F44 @ =gUnknown_03003B80 + ldr r2, _02007F44 @ =gGameState ldrb r0, [r5, #0x19] lsls r0, r0, #1 adds r1, r2, #0 @@ -15715,7 +14698,7 @@ _02007F1C: strb r0, [r1] b _02007FE2 .align 2, 0 -_02007F44: .4byte gUnknown_03003B80 +_02007F44: .4byte gGameState _02007F48: .4byte gUnknown_03001510 _02007F4C: ldr r1, [r6] @@ -15830,7 +14813,7 @@ sub_02008010: @ 0x02008010 ands r0, r1 cmp r0, #0 bne _020080D2 - ldr r1, _020080B8 @ =gUnknown_03003B80 + ldr r1, _020080B8 @ =gGameState ldr r6, _020080BC @ =gUnknown_0300150C ldr r2, [r6] ldrh r0, [r2, #0xa] @@ -15903,7 +14886,7 @@ sub_0200808e: @ 0x0200808e .align 2, 0 _020080B0: .4byte gUnknown_03001509 _020080B4: .4byte gUnknown_03003330 -_020080B8: .4byte gUnknown_03003B80 +_020080B8: .4byte gGameState _020080BC: .4byte gUnknown_0300150C _020080C0: .4byte gUnknown_030043F0 _020080C4: .4byte gUnknown_03001528 @@ -15929,7 +14912,7 @@ sub_020080e0: @ 0x020080e0 ldrb r0, [r5, #0x1a] cmp r0, #1 bne _020080F6 - ldr r0, _020081F0 @ =gUnknown_03003B80 + ldr r0, _020081F0 @ =gGameState adds r0, #0xcf movs r1, #0 strb r1, [r0] @@ -15948,7 +14931,7 @@ _02008100: beq _0200810E b _02008312 _0200810E: - ldr r3, _020081F0 @ =gUnknown_03003B80 + ldr r3, _020081F0 @ =gGameState ldrb r1, [r5, #0x1a] lsls r1, r1, #1 adds r0, r3, #0 @@ -16069,7 +15052,7 @@ _020081AA: ble _0200821A b _02008226 .align 2, 0 -_020081F0: .4byte gUnknown_03003B80 +_020081F0: .4byte gGameState _020081F4: .4byte gUnknown_03001509 _020081F8: .4byte gUnknown_03003330 _020081FC: .4byte gUnknown_0300150C @@ -16097,7 +15080,7 @@ _02008226: lsrs r2, r0, #0x10 movs r4, #0 _02008230: - ldr r3, _02008294 @ =gUnknown_03003B80 + ldr r3, _02008294 @ =gGameState ldrb r0, [r5, #0x1a] lsls r0, r0, #1 adds r1, r3, #0 @@ -16147,7 +15130,7 @@ _02008230: bl _call_via_r1 b _0200831A .align 2, 0 -_02008294: .4byte gUnknown_03003B80 +_02008294: .4byte gGameState _02008298: .4byte gUnknown_03001510 _0200829C: .4byte gUnknown_02020F03 _020082A0: .4byte sub_02008dec @@ -16222,7 +15205,7 @@ _0200831A: sub_02008324: @ 0x02008324 push {r4, r5, r6, lr} adds r3, r0, #0 - ldr r2, _020083D0 @ =gUnknown_03003B80 + ldr r2, _020083D0 @ =gGameState ldrb r0, [r3, #0x19] lsls r0, r0, #1 adds r1, r2, #0 @@ -16309,7 +15292,7 @@ _020083B4: pop {r0} bx r0 .align 2, 0 -_020083D0: .4byte gUnknown_03003B80 +_020083D0: .4byte gGameState _020083D4: .4byte gUnknown_020205E4 _020083D8: .4byte gUnknown_02020EFC _020083DC: .4byte gUnknown_02021F34 @@ -16324,7 +15307,7 @@ sub_020083e4: @ 0x020083e4 ldr r0, _02008490 @ =gUnknown_020125A0 ldm r0!, {r2, r3, r5} stm r1!, {r2, r3, r5} - ldr r2, _02008494 @ =gUnknown_03003B80 + ldr r2, _02008494 @ =gGameState ldrb r0, [r4, #0x1a] lsls r0, r0, #1 adds r1, r2, #0 @@ -16406,7 +15389,7 @@ _02008486: b _020084D4 .align 2, 0 _02008490: .4byte gUnknown_020125A0 -_02008494: .4byte gUnknown_03003B80 +_02008494: .4byte gGameState _02008498: .4byte gUnknown_02020F03 _0200849C: .4byte gUnknown_02021F34 _020084A0: .4byte sub_020084ec @@ -16509,7 +15492,7 @@ _0200855A: adds r0, r3, #1 _0200855C: strh r0, [r4, #0x22] - ldr r0, _02008584 @ =gUnknown_03003B80 + ldr r0, _02008584 @ =gGameState ldrh r1, [r4, #0x22] adds r0, #0x33 strb r1, [r0] @@ -16529,12 +15512,12 @@ _02008566: subs r0, r2, #1 b _0200858A .align 2, 0 -_02008584: .4byte gUnknown_03003B80 +_02008584: .4byte gGameState _02008588: adds r0, r2, #1 _0200858A: strb r0, [r4, #0x1d] - ldr r0, _020085DC @ =gUnknown_03003B80 + ldr r0, _020085DC @ =gGameState ldrb r1, [r4, #0x1d] adds r0, #0x34 strb r1, [r0] @@ -16559,7 +15542,7 @@ _02008594: ldrb r1, [r4, #0x1d] adds r1, r1, r0 strh r1, [r4, #0xe] - ldr r0, _020085DC @ =gUnknown_03003B80 + ldr r0, _020085DC @ =gGameState adds r0, #0xcf movs r1, #1 strb r1, [r0] @@ -16572,7 +15555,7 @@ _020085D4: pop {r0} bx r0 .align 2, 0 -_020085DC: .4byte gUnknown_03003B80 +_020085DC: .4byte gGameState thumb_func_start sub_020085e0 sub_020085e0: @ 0x020085e0 @@ -17534,7 +16517,7 @@ sub_02008d3c: @ 0x02008d3c ands r0, r1 cmp r0, #0 bne _02008D88 - ldr r0, _02008D70 @ =gUnknown_03003B80 + ldr r0, _02008D70 @ =gGameState ldrb r1, [r2, #0x19] adds r0, #0x5a adds r0, r1, r0 @@ -17550,7 +16533,7 @@ sub_02008d3c: @ 0x02008d3c b _02008D88 .align 2, 0 _02008D6C: .4byte gUnknown_03003330 -_02008D70: .4byte gUnknown_03003B80 +_02008D70: .4byte gGameState _02008D74: .4byte gUnknown_0300159A _02008D78: ldr r0, _02008D8C @ =gUnknown_03001940 @@ -18561,7 +17544,7 @@ _02009554: movs r0, #2 orrs r0, r1 strb r0, [r2, #0xf] - ldr r0, _02009594 @ =gUnknown_03003B80 + ldr r0, _02009594 @ =gGameState adds r0, #0xcd movs r1, #1 strb r1, [r0] @@ -18572,7 +17555,7 @@ _02009554: _02009588: .4byte gUnknown_03001968 _0200958C: .4byte gUnknown_03003BEA _02009590: .4byte gUnknown_03003330 -_02009594: .4byte gUnknown_03003B80 +_02009594: .4byte gGameState thumb_func_start sub_02009598 sub_02009598: @ 0x02009598 diff --git a/chao_garden/asm/game.s b/chao_garden/asm/game.s new file mode 100644 index 000000000..770cffd97 --- /dev/null +++ b/chao_garden/asm/game.s @@ -0,0 +1,102 @@ +.include "../asm/macros/function.inc" +.include "../constants/gba_constants.inc" + +.syntax unified +.arm + + thumb_func_start sub_02000bd0 +sub_02000bd0: @ 0x02000bd0 + push {r4, r5, r6, lr} + ldr r1, _02000C40 @ =gUnknown_030043F0 + ldrh r5, [r1] + ldrh r6, [r1, #2] + ldr r0, _02000C44 @ =0x04000130 + ldrh r2, [r0] + movs r3, #0xfc + lsls r3, r3, #8 + adds r0, r3, #0 + orrs r0, r2 + strh r0, [r1, #2] + mvns r2, r0 + strh r2, [r1] + ldr r0, _02000C48 @ =gUnknown_03003330 + ldrb r1, [r0, #0xf] + movs r0, #0x40 + ands r0, r1 + lsls r0, r0, #0x18 + lsrs r4, r0, #0x18 + cmp r4, #0 + bne _02000C20 + movs r0, #0xf + ands r2, r0 + cmp r2, #0xf + bne _02000C20 + bl m4aMPlayAllStop + bl m4aSoundMain + bl VBlankIntrWait + bl m4aSoundVSyncOff + ldr r0, _02000C4C @ =0x04000208 + strh r4, [r0] + subs r0, #8 + strh r4, [r0] + movs r0, #0x20 + bl SoftResetRom +_02000C20: + ldr r1, _02000C40 @ =gUnknown_030043F0 + ldrh r2, [r1] + ands r6, r2 + movs r3, #0 + strh r6, [r1, #4] + lsls r0, r2, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0 + beq _02000C5C + cmp r0, r5 + bls _02000C50 + eors r5, r2 + strh r5, [r1, #6] + ldrb r0, [r1, #9] + b _02000C64 + .align 2, 0 +_02000C40: .4byte gUnknown_030043F0 +_02000C44: .4byte 0x04000130 +_02000C48: .4byte gUnknown_03003330 +_02000C4C: .4byte 0x04000208 +_02000C50: + ldrb r0, [r1, #8] + subs r0, #1 + strb r0, [r1, #8] + lsls r0, r0, #0x18 + cmp r0, #0 + beq _02000C60 +_02000C5C: + strh r3, [r1, #6] + b _02000C66 +_02000C60: + strh r2, [r1, #6] + ldrb r0, [r1, #0xa] +_02000C64: + strb r0, [r1, #8] +_02000C66: + pop {r4, r5, r6} + pop {r0} + bx r0 + + thumb_func_start sub_02000c6c +sub_02000c6c: @ 0x02000c6c + ldr r1, _02000C88 @ =gUnknown_030043F0 + movs r0, #0 + strh r0, [r1, #6] + strh r0, [r1, #4] + strh r0, [r1] + ldr r0, _02000C8C @ =0x0000FFFF + strh r0, [r1, #2] + movs r0, #0xf + strb r0, [r1, #9] + strb r0, [r1, #8] + movs r0, #7 + strb r0, [r1, #0xa] + bx lr + .align 2, 0 +_02000C88: .4byte gUnknown_030043F0 +_02000C8C: .4byte 0x0000FFFF diff --git a/chao_garden/asm/non_matching/InitGameState.inc b/chao_garden/asm/non_matching/InitGameState.inc new file mode 100644 index 000000000..3c816bfa8 --- /dev/null +++ b/chao_garden/asm/non_matching/InitGameState.inc @@ -0,0 +1,39 @@ +.syntax unified +.text + push {lr} + ldr r2, _02000474 @ =gUnknown_03003B88 + movs r0, #0 + movs r1, #0x50 + cmp r0, r1 + bhs _02000454 + movs r3, #0 +_0200044A: + strb r3, [r2] + adds r2, #1 + adds r0, #1 + cmp r0, r1 + blo _0200044A +_02000454: + ldr r1, _02000478 @ =gUnknown_03003BD8 + movs r2, #0xff + adds r0, r1, #0 + adds r0, #0x11 +_0200045C: + strb r2, [r0] + subs r0, #1 + cmp r0, r1 + bge _0200045C + bl sub_02008810 + ldr r1, _0200047C @ =gGameState + str r0, [r1, #0x10] + movs r0, #0xff + strb r0, [r1, #0x1c] + pop {r0} + bx r0 + .align 2, 0 +_02000474: .4byte gUnknown_03003B88 +_02000478: .4byte gUnknown_03003BD8 +_0200047C: .4byte gGameState + + +.syntax divided diff --git a/chao_garden/include/gba/io_reg.h b/chao_garden/include/gba/io_reg.h index b8a3a5c43..b068e2feb 100644 --- a/chao_garden/include/gba/io_reg.h +++ b/chao_garden/include/gba/io_reg.h @@ -489,6 +489,10 @@ #define REG_KEYCNT (*(vu16 *)REG_ADDR_KEYCNT) #define REG_RCNT (*(vu16 *)REG_ADDR_RCNT) +#define REG_JOYCNT (*(vu16 *)REG_ADDR_JOYCNT) +#define REG_JOYSTAT (*(vu16 *)REG_ADDR_JOYSTAT) +#define REG_JOY_RECV (*(vu32 *)REG_ADDR_JOY_RECV) +#define REG_JOY_TRANS (*(vu32 *)REG_ADDR_JOY_TRANS) #define REG_IME (*(vu16 *)REG_ADDR_IME) #define REG_IE (*(vu16 *)REG_ADDR_IE) diff --git a/chao_garden/include/global.h b/chao_garden/include/global.h index fcb9f8016..3bda6c0a9 100644 --- a/chao_garden/include/global.h +++ b/chao_garden/include/global.h @@ -106,6 +106,7 @@ struct GameConfig { extern struct GameConfig gUnknown_02000008; struct UNK_03003330 { + // Main void (*unk0)(void); u32 filler4; u32 unk8; @@ -120,7 +121,6 @@ extern struct UNK_03003330 gUnknown_03003330; extern u8 gSaveSectorNum; extern u32 gSaveVersion; -extern u8 gUnknown_03003BD8[2]; extern u32 gUnknown_03005274; // These should be moved once we know diff --git a/chao_garden/include/save.h b/chao_garden/include/save.h index fa7000a8b..c74132a6b 100644 --- a/chao_garden/include/save.h +++ b/chao_garden/include/save.h @@ -22,7 +22,8 @@ struct TCG_SaveSectorData { u8 unk1E; u8 unk1F; u8 unk20; - u8 filler21[0x38]; + u8 filler21[0x37]; + u8 unk58; u8 unk59; u8 filler[0xA]; u32 unk64; @@ -31,7 +32,7 @@ struct TCG_SaveSectorData { u8 pad[0x7EE]; }; /* size:0x858 according to LoadGameState */ -extern struct TCG_SaveSectorData gUnknown_03003B80; +extern struct TCG_SaveSectorData gGameState; void LoadGameState(void); diff --git a/chao_garden/ldscript.txt b/chao_garden/ldscript.txt index 0b6624639..2db9f1ffc 100644 --- a/chao_garden/ldscript.txt +++ b/chao_garden/ldscript.txt @@ -182,7 +182,9 @@ SECTIONS { . = 0x00003B60; gIntrTable = .; . = 0x00003B70; gUnknown_03003B70 = .; - . = 0x00003B80; gUnknown_03003B80 = .; + + /* japan this is all game state */ + . = 0x00003B80; gGameState = .; . = 0x00003B88; gUnknown_03003B88 = .; . = 0x00003BA1; gUnknown_03003BA1 = .; . = 0x00003BB5; gUnknown_03003BB5 = .; @@ -196,6 +198,7 @@ SECTIONS { . = 0x00003C08; gUnknown_03003C08 = .; . = 0x00003C10; gUnknown_03003C10 = .; . = 0x00003C58; gUnknown_03003C58 = .; + . = 0x000043D8; gUnknown_030043D8 = .; . = 0x000043DC; gUnknown_030043DC = .; . = 0x000043E0; gUnknown_030043E0 = .; @@ -238,6 +241,8 @@ SECTIONS { build/mb_chao_garden/asm/crt0.o(.text); build/mb_chao_garden/src/main.o(.text); build/mb_chao_garden/src/save.o(.text); + build/mb_chao_garden/src/game.o(.text); + build/mb_chao_garden/asm/game.o(.text); build/mb_chao_garden/asm/code.o(.text); build/mb_chao_garden/asm/m4a0.o(.text); build/mb_chao_garden/src/m4a.o(.text); diff --git a/chao_garden/src/game.c b/chao_garden/src/game.c new file mode 100644 index 000000000..e436461d0 --- /dev/null +++ b/chao_garden/src/game.c @@ -0,0 +1,359 @@ +#include "global.h" +#include "m4a.h" +#include "save.h" + +extern s32 gUnknown_030005A8; +extern s32 gUnknown_030005AC; +extern vu8 gUnknown_030005B0; +extern vu8 gUnknown_030005B1; +extern s32 gUnknown_030005BC; +extern vu8 gUnknown_030043D8; +extern vu8 gUnknown_030043DC; +extern vu8 gUnknown_030043E4; +extern vu8 gUnknown_030043E8; +extern vu8 gUnknown_030043EC; +extern u16 gUnknown_030043F0; +extern IntrFunc gUnknown_03000088; +extern u8 *gUnknown_030005B4; +extern u16 gUnknown_030005B8; +extern u16 gUnknown_030005BA; + +// This could be gUnknown_03003330->unk20? +extern s8 gUnknown_03003350; + +extern s32 gUnknown_030043E0; + +s32 sub_02000988(s32); +s32 sub_02000a40(s32); +void sub_02000b0c(u32); +void sub_02000b64(u32); +void sub_02000bb0(void); + +void sub_020006b8(void); + +void sub_02000480(void) +{ + REG_IME = 0; + REG_IE &= ~0x80; + REG_RCNT = 0xC000; + REG_JOYSTAT = 0; + // oops? + REG_JOY_RECV; + REG_JOY_TRANS = 0; + REG_JOYCNT = 0x47; +#if !PORTABLE + CpuCopy32(&sub_020006b8, &gUnknown_03000088, 0x520); + gIntrTable[0] = (void *)&gUnknown_03000088 + 1; +#else + gIntrTable[0] = sub_020006b8; +#endif + gUnknown_030043DC = 0; + gUnknown_030043EC = 0; + gUnknown_030005B1 = 0xA; + gUnknown_030043E8 = 0; + gUnknown_030043D8 = gUnknown_030043E4 = 0; + gUnknown_030005B0 = 0; + gUnknown_030005BC = 0; + gUnknown_030005A8 = (*(u8 *)0x080000AF << 0x18) | 0x4F5341; + gUnknown_030005AC = (*(u8 *)0x080000AF << 0x18) | 0x425347; + REG_IF = 0x80; + REG_IE |= 0x80; + REG_IME = 1; +} + +void sub_02000590(void) +{ + REG_IME = 0; + if (gUnknown_030005B1 < 10) { + gUnknown_030005B1++; + } else if (gUnknown_030043EC != 0) { + u32 before = REG_IME; + REG_IME = 0; + REG_RCNT = 0x8000; + REG_RCNT = 0xC000; + REG_JOYSTAT = 0; + REG_JOY_RECV; + REG_JOY_TRANS = 0; + REG_JOYCNT = 0x47; + gUnknown_030043DC = 0; + gUnknown_030043EC = 0; + gUnknown_030005B1 = 10; + gUnknown_030043E8 = 0; + gUnknown_030005B0 = 0; + gUnknown_030005BC = 0; + REG_IF = 0x80; + REG_IME = before; + } else if (gUnknown_030005B0 < 11) { + gUnknown_030005B0++; + } else { + u32 before = REG_IME; + REG_IME = 0; + REG_RCNT = 0x8000; + REG_RCNT = 0xC000; + REG_JOYSTAT = 0; + REG_JOY_RECV; + REG_JOY_TRANS = 0; + REG_JOYCNT = 0x47; + gUnknown_030043DC = 0; + gUnknown_030043EC = 0; + gUnknown_030005B1 = 10; + gUnknown_030043E8 = 0; + gUnknown_030005B0 = 0; + gUnknown_030005BC = 0; + REG_IF = 0x80; + REG_IME = before; + } + REG_IME = 1; +} + +void sub_020006b8(void) +{ + s32 r4; + u16 joyCnt; + + joyCnt = REG_JOYCNT; + + switch (gUnknown_030043DC) { + case 0: + default: + if ((joyCnt & 1)) { + sub_02000bb0(); + gUnknown_030043DC += 1; + } + break; + case 1: + if (!(joyCnt & 4)) { + if ((joyCnt & 1)) { + sub_02000bb0(); + } else { + gUnknown_030043DC = 0; + } + } else { + gUnknown_030043DC++; + } + break; + case 2: + if (joyCnt & 2) { + if (REG_JOY_RECV == gUnknown_030005AC) { + REG_JOYSTAT = 0x30; + gUnknown_030043DC++; + break; + } + gUnknown_030043DC = 0; + break; + } + if ((joyCnt & 1)) { + sub_02000bb0(); + gUnknown_030043DC = 1; + } else { + gUnknown_030043DC = 0; + } + break; + case 3: + gUnknown_030043DC++; + break; + case 4: + if ((joyCnt & 4)) { + REG_JOY_TRANS = gUnknown_030005BC; + } else if ((2 & joyCnt)) { + r4 = REG_JOY_RECV; + if (r4 == 0x6F616843) { + gUnknown_030005B1 = 0; + gUnknown_030043EC = 1; + } else { + r4 = 0; + } + REG_JOY_TRANS = r4; + gUnknown_030005BC = r4; + } + break; + case 5:; + if ((joyCnt & 4) != 0) { + REG_JOY_TRANS = gUnknown_030005BC; + break; + } + if ((2 & joyCnt)) { + r4 = REG_JOY_RECV; + if (r4 == 0x6F616843) { + u16 a; + gUnknown_030005B1 = 0; + gUnknown_030043E8 = 0; + a = gUnknown_030043F0; + r4 = ((0xFF00 & a) << 8) | 0x4B43 | ((a << 0x18)); + } else if (r4 == 0x4F414843) { + u16 a; + gUnknown_030005B1 = 0; + gUnknown_030043E8 = 1; + a = gUnknown_030043F0; + r4 = ((0xFF00 & a) << 8) | 0x4B43 | ((a << 0x18)); + } else { + if ((r4 & 0xFF) == 0x2A) { + sub_02000b0c(r4); + gUnknown_030043DC = 6; + } else if ((r4 & 0xFF) == 0x22) { + sub_02000b64(r4); + gUnknown_030043DC = 8; + } else { + r4 = 0; + } + } + REG_JOY_TRANS = r4; + gUnknown_030005BC = r4; + } + break; + case 6: + if (!(joyCnt & 4)) { + if ((joyCnt & 2)) { + r4 = REG_JOY_RECV; + if (!(r4 & 0xFFFF)) { + r4 = sub_02000988(r4); + gUnknown_030043DC = 7; + } else if ((r4 & 0xFF) == 0x2A) { + sub_02000b0c(r4); + } else { + r4 = 0; + } + REG_JOY_TRANS = r4; + gUnknown_030005BC = r4; + } + } else { + REG_JOY_TRANS = gUnknown_030005BC; + break; + } + break; + case 7: + if (!(joyCnt & 4)) { + if (joyCnt & 2) { + r4 = sub_02000988(REG_JOY_RECV); + REG_JOY_TRANS = r4; + gUnknown_030005BC = r4; + } + } else { + REG_JOY_TRANS = gUnknown_030005BC; + break; + } + break; + case 8: + if (!(joyCnt & 4)) { + if (joyCnt & 2) { + r4 = REG_JOY_RECV; + if ((r4 & 0xFF) == 0x22) { + sub_02000b64(r4); + } else if ((r4 & 0xFF) == 0x26) { + r4 = sub_02000a40(r4); + gUnknown_030043DC = 9; + } else { + r4 = 0; + } + REG_JOY_TRANS = r4; + gUnknown_030005BC = r4; + } + } else { + REG_JOY_TRANS = gUnknown_030005BC; + break; + } + break; + case 9: + if ((joyCnt & 4)) { + REG_JOY_TRANS = gUnknown_030005BC; + break; + } + + if (joyCnt & 2) { + r4 = sub_02000a40(REG_JOY_RECV); + REG_JOY_TRANS = r4; + gUnknown_030005BC = r4; + break; + } + break; + } + gUnknown_030005B0 = 0; + REG_JOYCNT = joyCnt; +} + +s32 sub_02000988(s32 in) +{ + u32 ret = in; + if ((gUnknown_030005B8 == (gUnknown_030005BA + 1)) && (ret == 0x6F616843)) { + gUnknown_030005B1 = 0; + ret = ({ + u16 a = gUnknown_030043F0; + ((0xFF00 & a) << 8) | 0x4B43 | (a << 0x18); + }); + gUnknown_030043DC = 5; + gUnknown_030043D8 = 2; + } else { + u16 r2 = ((ret & 0xff) << 8) | ((ret >> 8) & 0xff); + if ((r2 - gUnknown_030005BA) == 1) { + gUnknown_030005BA = r2; + gUnknown_030005B4 += 2; + } + if (r2 == gUnknown_030005BA) { + gUnknown_030005B1 = 0; + gUnknown_030005B4[0] = ret >> 0x10; + gUnknown_030005B4[1] = ret >> 0x18; + } else { + ret = 0; + } + } + return ret; +} + +s32 sub_02000a40(s32 in) +{ + s32 ret = in; + + if (gUnknown_030005B8 == (gUnknown_030005BA + 1) && gUnknown_030005BC == ret) { + gUnknown_030005B1 = 0; + ret = ({ + u16 a = gUnknown_030043F0; + ((0xFF00 & a) << 8) | 0x4B43 | (a << 0x18); + }); + gUnknown_030043DC = 5; + gUnknown_030043E4 = 2; + } else { + if (gUnknown_030005BC == ret) { + gUnknown_030005B1 = 0; + gUnknown_030005BA += 1; + gUnknown_030005B4 += 2; + } + ret = (gUnknown_030005B4[0] << 0x10) | (gUnknown_030005B4[1] << 0x18) | ((u16)gUnknown_030005BA >> 8) + | ((0xFF & gUnknown_030005BA) << 8); + } + + return ret; +} + +void sub_02000af0(u8 p) +{ + REG_IME = 0; + gUnknown_030043DC = p; + REG_IME = 1; +} + +void sub_02000b0c(u32 arg0) +{ + gUnknown_030005B1 = 0; + // This could be gUnknown_03003330->unk20? + gUnknown_030005B4 = &gUnknown_03003350; + gUnknown_030005B8 = ((arg0 >> 8) & 0xFF00) | (arg0 >> 0x18); + gUnknown_030005BA = 0; + gUnknown_030043E0 = gUnknown_030005B8 * 2; + gUnknown_030043D8 = 1; +} + +void sub_02000b64(u32 p1) +{ + gUnknown_030005B1 = 0; + gUnknown_030005B4 = &gGameState.unk58; + gUnknown_030005B8 = ((p1 >> 8) & 0xFF00) | (p1 >> 0x18); + gUnknown_030005BA = 0; + gUnknown_030043E4 = 1; +} + +void sub_02000bb0(void) +{ + REG_JOY_RECV; + REG_JOY_TRANS = gUnknown_030005A8; + REG_JOYSTAT = 0x20; +} diff --git a/chao_garden/src/save.c b/chao_garden/src/save.c index 12385bf77..3bc70f0b8 100644 --- a/chao_garden/src/save.c +++ b/chao_garden/src/save.c @@ -27,16 +27,16 @@ void LoadGameState(void) sector = -1; for (i = 0; i < 6; i++) { - ReadFlash(i + 10, 0, &gUnknown_03003B80, sizeof(struct TCG_SaveSectorData)); - if (gUnknown_03003B80.header.unk2 == 0x1965) { - u16 checksum = sub_0200185c((void *)&gUnknown_03003B80.header.unk2, sizeof(struct TCG_SaveSectorData) - sizeof(u16)); - if (checksum == gUnknown_03003B80.header.checksum) { + ReadFlash(i + 10, 0, &gGameState, sizeof(struct TCG_SaveSectorData)); + if (gGameState.header.unk2 == 0x1965) { + u16 checksum = sub_0200185c((void *)&gGameState.header.unk2, sizeof(struct TCG_SaveSectorData) - sizeof(u16)); + if (checksum == gGameState.header.checksum) { if (sector < 0) { sector = i; - p = gUnknown_03003B80.header.unk4; - } else if (gUnknown_03003B80.header.unk4 > p) { + p = gGameState.header.unk4; + } else if (gGameState.header.unk4 > p) { sector = i; - p = gUnknown_03003B80.header.unk4; + p = gGameState.header.unk4; } } } @@ -46,40 +46,39 @@ void LoadGameState(void) gSaveSectorNum = TCG_SAVE_SECTOR_COUNT; gSaveVersion = 0; InitGameState(); - gUnknown_03003B80.unk59 = 0; - gUnknown_03003B80.unk1F = 0x58; - gUnknown_03003B80.unk20 = 0x68; + gGameState.unk59 = 0; + gGameState.unk1F = 0x58; + gGameState.unk20 = 0x68; } else { gSaveSectorNum = sector; gSaveVersion = p; - ReadFlash(gSaveSectorNum + TCG_FIRST_SAVE_SECTOR, 0, &gUnknown_03003B80, sizeof(struct TCG_SaveSectorData)); - sub_02001528(gUnknown_03003B80.unk18); + ReadFlash(gSaveSectorNum + TCG_FIRST_SAVE_SECTOR, 0, &gGameState, sizeof(struct TCG_SaveSectorData)); + sub_02001528(gGameState.unk18); } - if (gUnknown_03003B80.unk8 >= gUnknown_02000008.unk0) { - gUnknown_03005274 = gUnknown_03003B80.unkC; + if (gGameState.unk8 >= gUnknown_02000008.unk0) { + gUnknown_03005274 = gGameState.unkC; } else { - p = gUnknown_03003B80.unkC + (gUnknown_02000008.unk0 - gUnknown_03003B80.unk8); + p = gGameState.unkC + (gUnknown_02000008.unk0 - gGameState.unk8); if (p > 0x1869F) { p = 0x1869F; } gUnknown_03005274 = p; - gUnknown_03003B80.unk8 = gUnknown_02000008.unk0; + gGameState.unk8 = gUnknown_02000008.unk0; } - gUnknown_03003B80.unk64 = (gUnknown_03005274 & 0xFF) << 24 | ((gUnknown_03005274 & 0xFF00) << 8) | (gUnknown_03005274 & 0xFF0000) >> 8 + gGameState.unk64 = (gUnknown_03005274 & 0xFF) << 24 | ((gUnknown_03005274 & 0xFF00) << 8) | (gUnknown_03005274 & 0xFF0000) >> 8 | gUnknown_03005274 >> 24; - gUnknown_03003B80.unk68 = 0; + gGameState.unk68 = 0; } void SaveGameState(void) { s32 i; - gUnknown_03003B80.header.unk2 = 0x1965; + gGameState.header.unk2 = 0x1965; gSaveVersion++; - gUnknown_03003B80.header.unk4 = gSaveVersion; - gUnknown_03003B80.unkC = gUnknown_03005274; - gUnknown_03003B80.unk18 = sub_0200151c(); - gUnknown_03003B80.header.checksum - = sub_0200185c((void *)&gUnknown_03003B80.header.unk2, sizeof(struct TCG_SaveSectorData) - sizeof(u16)); + gGameState.header.unk4 = gSaveVersion; + gGameState.unkC = gUnknown_03005274; + gGameState.unk18 = sub_0200151c(); + gGameState.header.checksum = sub_0200185c((void *)&gGameState.header.unk2, sizeof(struct TCG_SaveSectorData) - sizeof(u16)); m4aMPlayAllStop(); m4aSoundMain(); VBlankIntrWait(); @@ -92,8 +91,7 @@ void SaveGameState(void) gSaveSectorNum = 0; } - failure = ProgramFlashSectorAndVerifyNBytes(gSaveSectorNum + TCG_FIRST_SAVE_SECTOR, &gUnknown_03003B80, - sizeof(struct TCG_SaveSectorData)); + failure = ProgramFlashSectorAndVerifyNBytes(gSaveSectorNum + TCG_FIRST_SAVE_SECTOR, &gGameState, sizeof(struct TCG_SaveSectorData)); if (!failure) { break; @@ -103,20 +101,27 @@ void SaveGameState(void) VBlankIntrWait(); } -// void InitGameState(void) -// { -// u32 i = 0; -// u8 *p = (u8*)&gUnknown_03003B80.unk8; -// u8 *p2; -// for (i = 0; i < 0x50; i++) { -// *p = 0; -// p++; -// } +NONMATCH("asm/non_matching/InitGameState.inc", void InitGameState(void)) +{ + u8 *p, *p2; + u32 r1, i; + p = (u8 *)(&gGameState.unk8); -// p2 = &gUnknown_03003B80.unk68; -// while ((u32)p2 < (u32)&gUnknown_03003B80 + sizeof(gUnknown_03003B80)) { -// p2 = 0; -// } -// gUnknown_03003B80.unk10 = sub_02008810(); -// gUnknown_03003B80.unk1C = -1; -// } + i = 0; + r1 = 0x50; + for (i = 0; i < r1; i++) { + *p = 0; + p++; + } + + p = (u8 *)&gGameState.unk58; + r1 = 0xFF; + p2 = p + 0x11; + do { + *p2-- = r1; + } while ((s32)p2 >= (s32)p); + + gGameState.unk10 = sub_02008810(); + gGameState.unk1C = 0xFF; +} +END_NONMATCH diff --git a/tools/entity_positions/.gitignore b/tools/entity_positions/.gitignore index 0fa9f6fa1..398b7b605 100644 --- a/tools/entity_positions/.gitignore +++ b/tools/entity_positions/.gitignore @@ -1,2 +1,3 @@ epos *.csv +entity_positions diff --git a/tools/entity_positions/entity_positions b/tools/entity_positions/entity_positions deleted file mode 100644 index c9a048d201c7f78c4823e7a1b1918c2f4e62cebd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31832 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

r 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