diff options
| author | theo3 <arisstephenson2@gmail.com> | 2022-03-16 19:15:58 -0700 |
|---|---|---|
| committer | theo3 <arisstephenson2@gmail.com> | 2022-03-16 19:15:58 -0700 |
| commit | 2fe33a05b84b2bb474f099d7ef3a928f0ee62199 (patch) | |
| tree | f631af021863fc527cdd32f393a09a060033eb0e /asm/src | |
| parent | f431f7def45250ac3ae6182b0d3caee7fdbc13e1 (diff) | |
move handwritten asm to src
Diffstat (limited to 'asm/src')
| -rw-r--r-- | asm/src/code_08000E44.s | 91 | ||||
| -rw-r--r-- | asm/src/code_08000F10.s | 51 | ||||
| -rw-r--r-- | asm/src/code_08001A7C.s | 1254 | ||||
| -rw-r--r-- | asm/src/code_08003FC4.s | 677 | ||||
| -rw-r--r-- | asm/src/code_080043E8.s | 408 | ||||
| -rw-r--r-- | asm/src/code_08007CAC.s | 52 | ||||
| -rw-r--r-- | asm/src/crt0.s | 49 | ||||
| -rw-r--r-- | asm/src/enemy.s | 250 | ||||
| -rw-r--r-- | asm/src/intr.s | 1947 | ||||
| -rw-r--r-- | asm/src/player.s | 786 | ||||
| -rw-r--r-- | asm/src/projectileUpdate.s | 44 | ||||
| -rw-r--r-- | asm/src/script.s | 144 | ||||
| -rw-r--r-- | asm/src/veneer.s | 475 |
13 files changed, 6228 insertions, 0 deletions
diff --git a/asm/src/code_08000E44.s b/asm/src/code_08000E44.s new file mode 100644 index 00000000..cfaf1f47 --- /dev/null +++ b/asm/src/code_08000E44.s @@ -0,0 +1,91 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start sub_08000E44 +sub_08000E44: @ 0x08000E44 + cmp r0, #0 + beq _08000E4E + asrs r0, r0, #0x1f + bmi _08000E4E + movs r0, #1 +_08000E4E: + bx lr + + thumb_func_start Random +Random: @ 0x08000E50 + ldr r2, _08000EBC @ =gRand + ldr r0, [r2] + lsls r1, r0, #1 + adds r0, r0, r1 + movs r1, #0xd + rors r0, r1 + str r0, [r2] + lsrs r0, r0, #1 + bx lr + + non_word_aligned_thumb_func_start sub_08000E62 +sub_08000E62: @ 0x08000E62 + lsrs r1, r0, #1 + ldr r2, _08000EC0 @ =0x55555555 + ands r0, r2 + ands r1, r2 + adds r0, r0, r1 + lsrs r1, r0, #2 + ldr r2, _08000EC4 @ =0x33333333 + ands r0, r2 + ands r1, r2 + adds r0, r0, r1 + lsrs r1, r0, #4 + ldr r2, _08000EC8 @ =0x0F0F0F0F + ands r0, r2 + ands r1, r2 + adds r0, r0, r1 + lsrs r1, r0, #8 + ldr r2, _08000ECC @ =0x00FF00FF + ands r0, r2 + ands r1, r2 + adds r0, r0, r1 + lsls r1, r0, #0x10 + adds r0, r0, r1 + lsrs r0, r0, #0x10 + bx lr + + non_word_aligned_thumb_func_start sub_08000E92 +sub_08000E92: @ 0x08000E92 + movs r3, #1 + b _08000E98 + + non_word_aligned_thumb_func_start LoadResourceAsync +LoadResourceAsync: @ 0x08000E96 + movs r3, #0 +_08000E98: + push {r4, r5} + ldr r5, _08000ED0 @ =gUnk_03003DE0 + ldrb r4, [r5] + cmp r4, #0x28 + bhs _08000EB6 + adds r4, #1 + strb r4, [r5] + movs r5, #0xc + muls r4, r5, r4 + ldr r5, _08000ED4 @ =gUnk_03000C24 + adds r4, r4, r5 + strb r3, [r4] + strh r2, [r4, #2] + str r0, [r4, #4] + str r1, [r4, #8] +_08000EB6: + pop {r4, r5} + bx lr + .align 2, 0 +_08000EBC: .4byte gRand +_08000EC0: .4byte 0x55555555 +_08000EC4: .4byte 0x33333333 +_08000EC8: .4byte 0x0F0F0F0F +_08000ECC: .4byte 0x00FF00FF +_08000ED0: .4byte gUnk_03003DE0 +_08000ED4: .4byte gUnk_03000C24 diff --git a/asm/src/code_08000F10.s b/asm/src/code_08000F10.s new file mode 100644 index 00000000..e7ce35aa --- /dev/null +++ b/asm/src/code_08000F10.s @@ -0,0 +1,51 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start CheckBits +CheckBits: @ 0x08000F10 + ldr r3, _08000F50 @ =ram_CheckBits + bx r3 + + thumb_func_start sub_08000F14 +sub_08000F14: @ 0x08000F14 + push {r4, r5, r6} + movs r4, #0x1e +_08000F18: + ldrsh r5, [r1, r4] + ldrsh r6, [r2, r4] + adds r5, r5, r6 + ldrsh r6, [r3, r4] + adds r5, r5, r6 + strh r5, [r0, r4] + subs r4, #2 + bpl _08000F18 + pop {r4, r5, r6} + bx lr + + thumb_func_start sub_08000F2C +sub_08000F2C: @ 0x08000F2C + push {r4, r5, r6, r7} + movs r4, #0x1e + movs r7, #0 +_08000F32: + ldrsh r5, [r1, r4] + ldrsh r6, [r2, r4] + adds r5, r5, r6 + ldrsh r6, [r3, r4] + adds r5, r5, r6 + bpl _08000F40 + movs r5, #0 +_08000F40: + strh r5, [r0, r4] + adds r7, r7, r5 + subs r4, #2 + bpl _08000F32 + adds r0, r7, #0 + pop {r4, r5, r6, r7} + bx lr + .align 2, 0 +_08000F50: .4byte ram_CheckBits diff --git a/asm/src/code_08001A7C.s b/asm/src/code_08001A7C.s new file mode 100644 index 00000000..6e0d3a95 --- /dev/null +++ b/asm/src/code_08001A7C.s @@ -0,0 +1,1254 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + +gUnk_08001A7C:: @ 08001A7C + .4byte gUnk_08001C5C + .4byte gUnk_08001C62 + .4byte gUnk_08001C68 + .4byte gUnk_08001C6E + .4byte gUnk_08001C74 + .4byte gUnk_08001C6E + .4byte gUnk_08001C7A + .4byte gUnk_08001C7A + .4byte gUnk_08001C7A + .4byte gUnk_08001C80 + .4byte gUnk_08001C86 + .4byte gUnk_08001C8C + .4byte gUnk_08001C92 + .4byte gUnk_08001C92 + .4byte gUnk_08001C92 + .4byte gUnk_08001C92 + .4byte gUnk_08001C92 + .4byte gUnk_08001C92 + .4byte gUnk_08001C98 + .4byte gUnk_08001C9E + .4byte gUnk_08001C86 + .4byte gUnk_08001C9E + .4byte gUnk_08001C86 + .4byte gUnk_08001CA4 + .4byte gUnk_08001C9E + .4byte gUnk_08001C9E + .4byte gUnk_08001CAA + .4byte gUnk_08001CB0 + .4byte gUnk_08001CB6 + .4byte gUnk_08001C92 + .4byte gUnk_08001C92 + .4byte gUnk_08001C92 + .4byte gUnk_08001CBC + .4byte gUnk_08001CC2 + .4byte gUnk_08001CC2 + .4byte gUnk_08001CC2 + .4byte gUnk_08001CC2 + .4byte gUnk_08001C9E + .4byte gUnk_08001C86 + .4byte gUnk_08001C86 + .4byte gUnk_08001C9E + .4byte gUnk_08001C86 + .4byte gUnk_08001C86 + .4byte gUnk_08001C86 + .4byte gUnk_08001DAC + .4byte gUnk_08001C6E + .4byte gUnk_08001C6E + .4byte gUnk_08001CA4 + .4byte gUnk_08001C9E + .4byte gUnk_08001C86 + .4byte gUnk_08001C86 + .4byte gUnk_08001C92 + .4byte gUnk_08001CA4 + .4byte gUnk_08001CC8 + .4byte gUnk_08001C6E + .4byte gUnk_08001CCE + .4byte gUnk_08001CD4 + .4byte gUnk_08001CDA + .4byte gUnk_08001CE0 + .4byte gUnk_08001CE6 + .4byte gUnk_08001CEC + .4byte gUnk_08001CF2 + .4byte gUnk_08001CF8 + .4byte gUnk_08001CFE + .4byte gUnk_08001D04 + .4byte gUnk_08001D0A + .4byte gUnk_08001D16 + .4byte gUnk_08001D1C + .4byte gUnk_08001D22 + .4byte gUnk_08001D28 + .4byte gUnk_08001D2E + .4byte gUnk_08001D34 + .4byte gUnk_08001D3A + .4byte gUnk_08001D40 + .4byte gUnk_08001D40 + .4byte gUnk_08001D40 + .4byte gUnk_08001D40 + .4byte gUnk_08001D40 + .4byte gUnk_08001D46 + .4byte gUnk_08001D4C + .4byte gUnk_08001D4C + .4byte gUnk_08001D4C + .4byte gUnk_08001D4C + .4byte gUnk_08001D52 + .4byte gUnk_08001D58 + .4byte gUnk_08001D5E + .4byte gUnk_08001D64 + .4byte gUnk_08001D40 + .4byte gUnk_08001D40 + .4byte gUnk_08001D40 + .4byte gUnk_08001D6A + .4byte gUnk_08001DB8 + .4byte gUnk_08001D40 + .4byte gUnk_08001DBE + .4byte gUnk_08001D70 + .4byte gUnk_08001D40 + .4byte gUnk_08001D40 + .4byte gUnk_08001D40 + .4byte gUnk_08001D40 + .4byte gUnk_08001D40 + .4byte gUnk_08001D76 + .4byte gUnk_08001DC4 + .4byte gUnk_08001D7C + .4byte gUnk_08001D7C + .4byte gUnk_08001D7C + .4byte gUnk_08001D7C + .4byte gUnk_08001D7C + .4byte gUnk_08001D82 + .4byte gUnk_08001D82 + .4byte gUnk_08001D88 + .4byte gUnk_08001D88 + .4byte gUnk_08001D88 + .4byte gUnk_08001D8E + .4byte gUnk_08001D8E + .4byte gUnk_08001D8E + .4byte gUnk_08001D94 + .4byte gUnk_08001D94 + .4byte gUnk_08001D9A + .4byte gUnk_08001DA0 + .4byte gUnk_08001DA6 + +gUnk_08001C5C:: @ 08001C5C + .incbin "code_080011C4/gUnk_08001C5C.bin" + +gUnk_08001C62:: @ 08001C62 + .incbin "code_080011C4/gUnk_08001C62.bin" + +gUnk_08001C68:: @ 08001C68 + .incbin "code_080011C4/gUnk_08001C68.bin" + +gUnk_08001C6E:: @ 08001C6E + .incbin "code_080011C4/gUnk_08001C6E.bin" + +gUnk_08001C74:: @ 08001C74 + .incbin "code_080011C4/gUnk_08001C74.bin" + +gUnk_08001C7A:: @ 08001C7A + .incbin "code_080011C4/gUnk_08001C7A.bin" + +gUnk_08001C80:: @ 08001C80 + .incbin "code_080011C4/gUnk_08001C80.bin" + +gUnk_08001C86:: @ 08001C86 + .incbin "code_080011C4/gUnk_08001C86.bin" + +gUnk_08001C8C:: @ 08001C8C + .incbin "code_080011C4/gUnk_08001C8C.bin" + +gUnk_08001C92:: @ 08001C92 + .incbin "code_080011C4/gUnk_08001C92.bin" + +gUnk_08001C98:: @ 08001C98 + .incbin "code_080011C4/gUnk_08001C98.bin" + +gUnk_08001C9E:: @ 08001C9E + .incbin "code_080011C4/gUnk_08001C9E.bin" + +gUnk_08001CA4:: @ 08001CA4 + .incbin "code_080011C4/gUnk_08001CA4.bin" + +gUnk_08001CAA:: @ 08001CAA + .incbin "code_080011C4/gUnk_08001CAA.bin" + +gUnk_08001CB0:: @ 08001CB0 + .incbin "code_080011C4/gUnk_08001CB0.bin" + +gUnk_08001CB6:: @ 08001CB6 + .incbin "code_080011C4/gUnk_08001CB6.bin" + +gUnk_08001CBC:: @ 08001CBC + .incbin "code_080011C4/gUnk_08001CBC.bin" + +gUnk_08001CC2:: @ 08001CC2 + .incbin "code_080011C4/gUnk_08001CC2.bin" + +gUnk_08001CC8:: @ 08001CC8 + .incbin "code_080011C4/gUnk_08001CC8.bin" + +gUnk_08001CCE:: @ 08001CCE + .incbin "code_080011C4/gUnk_08001CCE.bin" + +gUnk_08001CD4:: @ 08001CD4 + .incbin "code_080011C4/gUnk_08001CD4.bin" + +gUnk_08001CDA:: @ 08001CDA + .incbin "code_080011C4/gUnk_08001CDA.bin" + +gUnk_08001CE0:: @ 08001CE0 + .incbin "code_080011C4/gUnk_08001CE0.bin" + +gUnk_08001CE6:: @ 08001CE6 + .incbin "code_080011C4/gUnk_08001CE6.bin" + +gUnk_08001CEC:: @ 08001CEC + .incbin "code_080011C4/gUnk_08001CEC.bin" + +gUnk_08001CF2:: @ 08001CF2 + .incbin "code_080011C4/gUnk_08001CF2.bin" + +gUnk_08001CF8:: @ 08001CF8 + .incbin "code_080011C4/gUnk_08001CF8.bin" + +gUnk_08001CFE:: @ 08001CFE + .incbin "code_080011C4/gUnk_08001CFE.bin" + +gUnk_08001D04:: @ 08001D04 + .incbin "code_080011C4/gUnk_08001D04.bin" + +gUnk_08001D0A:: @ 08001D0A + .incbin "code_080011C4/gUnk_08001D0A.bin" + +gUnk_08001D16:: @ 08001D16 + .incbin "code_080011C4/gUnk_08001D16.bin" + +gUnk_08001D1C:: @ 08001D1C + .incbin "code_080011C4/gUnk_08001D1C.bin" + +gUnk_08001D22:: @ 08001D22 + .incbin "code_080011C4/gUnk_08001D22.bin" + +gUnk_08001D28:: @ 08001D28 + .incbin "code_080011C4/gUnk_08001D28.bin" + +gUnk_08001D2E:: @ 08001D2E + .incbin "code_080011C4/gUnk_08001D2E.bin" + +gUnk_08001D34:: @ 08001D34 + .incbin "code_080011C4/gUnk_08001D34.bin" + +gUnk_08001D3A:: @ 08001D3A + .incbin "code_080011C4/gUnk_08001D3A.bin" + +gUnk_08001D40:: @ 08001D40 + .incbin "code_080011C4/gUnk_08001D40.bin" + +gUnk_08001D46:: @ 08001D46 + .incbin "code_080011C4/gUnk_08001D46.bin" + +gUnk_08001D4C:: @ 08001D4C + .incbin "code_080011C4/gUnk_08001D4C.bin" + +gUnk_08001D52:: @ 08001D52 + .incbin "code_080011C4/gUnk_08001D52.bin" + +gUnk_08001D58:: @ 08001D58 + .incbin "code_080011C4/gUnk_08001D58.bin" + +gUnk_08001D5E:: @ 08001D5E + .incbin "code_080011C4/gUnk_08001D5E.bin" + +gUnk_08001D64:: @ 08001D64 + .incbin "code_080011C4/gUnk_08001D64.bin" + +gUnk_08001D6A:: @ 08001D6A + .incbin "code_080011C4/gUnk_08001D6A.bin" + +gUnk_08001D70:: @ 08001D70 + .incbin "code_080011C4/gUnk_08001D70.bin" + +gUnk_08001D76:: @ 08001D76 + .incbin "code_080011C4/gUnk_08001D76.bin" + +gUnk_08001D7C:: @ 08001D7C + .incbin "code_080011C4/gUnk_08001D7C.bin" + +gUnk_08001D82:: @ 08001D82 + .incbin "code_080011C4/gUnk_08001D82.bin" + +gUnk_08001D88:: @ 08001D88 + .incbin "code_080011C4/gUnk_08001D88.bin" + +gUnk_08001D8E:: @ 08001D8E + .incbin "code_080011C4/gUnk_08001D8E.bin" + +gUnk_08001D94:: @ 08001D94 + .incbin "code_080011C4/gUnk_08001D94.bin" + +gUnk_08001D9A:: @ 08001D9A + .incbin "code_080011C4/gUnk_08001D9A.bin" + +gUnk_08001DA0:: @ 08001DA0 + .incbin "code_080011C4/gUnk_08001DA0.bin" + +gUnk_08001DA6:: @ 08001DA6 + .incbin "code_080011C4/gUnk_08001DA6.bin" + +gUnk_08001DAC:: @ 08001DAC + .incbin "code_080011C4/gUnk_08001DAC.bin" + +gUnk_08001DB8:: @ 08001DB8 + .incbin "code_080011C4/gUnk_08001DB8.bin" + +gUnk_08001DBE:: @ 08001DBE + .incbin "code_080011C4/gUnk_08001DBE.bin" + +gUnk_08001DC4:: @ 08001DC4 + .incbin "code_080011C4/gUnk_08001DC4.bin" + +gUnk_08001DCC:: @ 08001DCC + .4byte gUnk_08001FAC + .4byte gUnk_08001FB4 + .4byte gUnk_08001FBC + .4byte gUnk_08001FC3 + .4byte gUnk_08001FCA + .4byte gUnk_08001FD1 + .4byte gUnk_08001FD8 + .4byte gUnk_08001FDF + .4byte gUnk_08001FE6 + .4byte gUnk_08001FED + .4byte gUnk_08001FF8 + .4byte gUnk_08001FFF + .4byte gUnk_08002006 + .4byte gUnk_0800200D + .4byte gUnk_08002014 + .4byte gUnk_0800201B + .4byte gUnk_08002022 + .4byte gUnk_08002029 + .4byte gUnk_08002030 + .4byte gUnk_08002037 + .4byte gUnk_0800203E + .4byte gUnk_08002045 + .4byte gUnk_0800204C + .4byte gUnk_08002053 + .4byte gUnk_0800205A + .4byte gUnk_08002061 + .4byte gUnk_08002068 + .4byte gUnk_08002071 + .4byte gUnk_0800207A + .4byte gUnk_08002081 + .4byte gUnk_0800208A + .4byte gUnk_08002091 + .4byte gUnk_08002098 + .4byte gUnk_0800209F + .4byte gUnk_080020A6 + .4byte gUnk_080020AD + .4byte gUnk_080020B4 + .4byte gUnk_080020BB + .4byte gUnk_080020C2 + .4byte gUnk_080020C9 + .4byte gUnk_080020D0 + .4byte gUnk_080020D7 + .4byte gUnk_080020DE + .4byte gUnk_080020E5 + .4byte gUnk_080020EC + .4byte gUnk_080020F4 + .4byte gUnk_080020FB + .4byte gUnk_08002102 + .4byte gUnk_08002109 + .4byte gUnk_08002110 + .4byte gUnk_08002117 + .4byte gUnk_0800211E + .4byte gUnk_08002125 + .4byte gUnk_0800212D + .4byte gUnk_08002135 + .4byte gUnk_0800213D + .4byte gUnk_08002144 + .4byte gUnk_0800214B + .4byte gUnk_08002152 + .4byte gUnk_0800215A + .4byte gUnk_08002162 + .4byte gUnk_08002169 + .4byte gUnk_08002170 + .4byte gUnk_08002178 + .4byte gUnk_08002184 + .4byte gUnk_0800218B + .4byte gUnk_08002193 + .4byte gUnk_0800219B + .4byte gUnk_080021A3 + .4byte gUnk_080021AB + .4byte gUnk_080021B3 + .4byte gUnk_080021BC + .4byte gUnk_080021C3 + .4byte gUnk_080021CA + .4byte gUnk_080021D1 + .4byte gUnk_080021D8 + .4byte gUnk_080021E1 + .4byte gUnk_080021E8 + .4byte gUnk_080021F1 + .4byte gUnk_080021F8 + .4byte gUnk_080021FF + .4byte gUnk_08002206 + .4byte gUnk_0800220D + .4byte gUnk_08002214 + .4byte gUnk_0800221B + .4byte gUnk_08002222 + .4byte gUnk_08002229 + .4byte gUnk_08002230 + .4byte gUnk_08002239 + .4byte gUnk_08002240 + .4byte gUnk_08002247 + .4byte gUnk_0800224E + .4byte gUnk_08002255 + .4byte gUnk_0800225C + .4byte gUnk_08002263 + .4byte gUnk_0800226A + .4byte gUnk_08002271 + .4byte gUnk_08002278 + .4byte gUnk_0800227F + .4byte gUnk_08002286 + .4byte gUnk_0800228D + .4byte gUnk_08002294 + .4byte gUnk_0800229B + .4byte gUnk_080022A7 + .4byte gUnk_080022B3 + .4byte gUnk_080022BF + .4byte gUnk_080022CB + .4byte gUnk_080022D7 + .4byte gUnk_080022DE + .4byte gUnk_080022E5 + .4byte gUnk_080022EC + .4byte gUnk_080022F3 + .4byte gUnk_080022FB + .4byte gUnk_08002302 + .4byte gUnk_08002309 + .4byte gUnk_08002310 + .4byte gUnk_08002317 + .4byte gUnk_0800231E + .4byte gUnk_08002325 + .4byte gUnk_0800232C + +gUnk_08001FAC:: @ 08001FAC + .incbin "code_080011C4/gUnk_08001FAC.bin" + +gUnk_08001FB4:: @ 08001FB4 + .incbin "code_080011C4/gUnk_08001FB4.bin" + +gUnk_08001FBC:: @ 08001FBC + .incbin "code_080011C4/gUnk_08001FBC.bin" + +gUnk_08001FC3:: @ 08001FC3 + .incbin "code_080011C4/gUnk_08001FC3.bin" + +gUnk_08001FCA:: @ 08001FCA + .incbin "code_080011C4/gUnk_08001FCA.bin" + +gUnk_08001FD1:: @ 08001FD1 + .incbin "code_080011C4/gUnk_08001FD1.bin" + +gUnk_08001FD8:: @ 08001FD8 + .incbin "code_080011C4/gUnk_08001FD8.bin" + +gUnk_08001FDF:: @ 08001FDF + .incbin "code_080011C4/gUnk_08001FDF.bin" + +gUnk_08001FE6:: @ 08001FE6 + .incbin "code_080011C4/gUnk_08001FE6.bin" + +gUnk_08001FED:: @ 08001FED + .incbin "code_080011C4/gUnk_08001FED.bin" + +gUnk_08001FF8:: @ 08001FF8 + .incbin "code_080011C4/gUnk_08001FF8.bin" + +gUnk_08001FFF:: @ 08001FFF + .incbin "code_080011C4/gUnk_08001FFF.bin" + +gUnk_08002006:: @ 08002006 + .incbin "code_080011C4/gUnk_08002006.bin" + +gUnk_0800200D:: @ 0800200D + .incbin "code_080011C4/gUnk_0800200D.bin" + +gUnk_08002014:: @ 08002014 + .incbin "code_080011C4/gUnk_08002014.bin" + +gUnk_0800201B:: @ 0800201B + .incbin "code_080011C4/gUnk_0800201B.bin" + +gUnk_08002022:: @ 08002022 + .incbin "code_080011C4/gUnk_08002022.bin" + +gUnk_08002029:: @ 08002029 + .incbin "code_080011C4/gUnk_08002029.bin" + +gUnk_08002030:: @ 08002030 + .incbin "code_080011C4/gUnk_08002030.bin" + +gUnk_08002037:: @ 08002037 + .incbin "code_080011C4/gUnk_08002037.bin" + +gUnk_0800203E:: @ 0800203E + .incbin "code_080011C4/gUnk_0800203E.bin" + +gUnk_08002045:: @ 08002045 + .incbin "code_080011C4/gUnk_08002045.bin" + +gUnk_0800204C:: @ 0800204C + .incbin "code_080011C4/gUnk_0800204C.bin" + +gUnk_08002053:: @ 08002053 + .incbin "code_080011C4/gUnk_08002053.bin" + +gUnk_0800205A:: @ 0800205A + .incbin "code_080011C4/gUnk_0800205A.bin" + +gUnk_08002061:: @ 08002061 + .incbin "code_080011C4/gUnk_08002061.bin" + +gUnk_08002068:: @ 08002068 + .incbin "code_080011C4/gUnk_08002068.bin" + +gUnk_08002071:: @ 08002071 + .incbin "code_080011C4/gUnk_08002071.bin" + +gUnk_0800207A:: @ 0800207A + .incbin "code_080011C4/gUnk_0800207A.bin" + +gUnk_08002081:: @ 08002081 + .incbin "code_080011C4/gUnk_08002081.bin" + +gUnk_0800208A:: @ 0800208A + .incbin "code_080011C4/gUnk_0800208A.bin" + +gUnk_08002091:: @ 08002091 + .incbin "code_080011C4/gUnk_08002091.bin" + +gUnk_08002098:: @ 08002098 + .incbin "code_080011C4/gUnk_08002098.bin" + +gUnk_0800209F:: @ 0800209F + .incbin "code_080011C4/gUnk_0800209F.bin" + +gUnk_080020A6:: @ 080020A6 + .incbin "code_080011C4/gUnk_080020A6.bin" + +gUnk_080020AD:: @ 080020AD + .incbin "code_080011C4/gUnk_080020AD.bin" + +gUnk_080020B4:: @ 080020B4 + .incbin "code_080011C4/gUnk_080020B4.bin" + +gUnk_080020BB:: @ 080020BB + .incbin "code_080011C4/gUnk_080020BB.bin" + +gUnk_080020C2:: @ 080020C2 + .incbin "code_080011C4/gUnk_080020C2.bin" + +gUnk_080020C9:: @ 080020C9 + .incbin "code_080011C4/gUnk_080020C9.bin" + +gUnk_080020D0:: @ 080020D0 + .incbin "code_080011C4/gUnk_080020D0.bin" + +gUnk_080020D7:: @ 080020D7 + .incbin "code_080011C4/gUnk_080020D7.bin" + +gUnk_080020DE:: @ 080020DE + .incbin "code_080011C4/gUnk_080020DE.bin" + +gUnk_080020E5:: @ 080020E5 + .incbin "code_080011C4/gUnk_080020E5.bin" + +gUnk_080020EC:: @ 080020EC + .incbin "code_080011C4/gUnk_080020EC.bin" + +gUnk_080020F4:: @ 080020F4 + .incbin "code_080011C4/gUnk_080020F4.bin" + +gUnk_080020FB:: @ 080020FB + .incbin "code_080011C4/gUnk_080020FB.bin" + +gUnk_08002102:: @ 08002102 + .incbin "code_080011C4/gUnk_08002102.bin" + +gUnk_08002109:: @ 08002109 + .incbin "code_080011C4/gUnk_08002109.bin" + +gUnk_08002110:: @ 08002110 + .incbin "code_080011C4/gUnk_08002110.bin" + +gUnk_08002117:: @ 08002117 + .incbin "code_080011C4/gUnk_08002117.bin" + +gUnk_0800211E:: @ 0800211E + .incbin "code_080011C4/gUnk_0800211E.bin" + +gUnk_08002125:: @ 08002125 + .incbin "code_080011C4/gUnk_08002125.bin" + +gUnk_0800212D:: @ 0800212D + .incbin "code_080011C4/gUnk_0800212D.bin" + +gUnk_08002135:: @ 08002135 + .incbin "code_080011C4/gUnk_08002135.bin" + +gUnk_0800213D:: @ 0800213D + .incbin "code_080011C4/gUnk_0800213D.bin" + +gUnk_08002144:: @ 08002144 + .incbin "code_080011C4/gUnk_08002144.bin" + +gUnk_0800214B:: @ 0800214B + .incbin "code_080011C4/gUnk_0800214B.bin" + +gUnk_08002152:: @ 08002152 + .incbin "code_080011C4/gUnk_08002152.bin" + +gUnk_0800215A:: @ 0800215A + .incbin "code_080011C4/gUnk_0800215A.bin" + +gUnk_08002162:: @ 08002162 + .incbin "code_080011C4/gUnk_08002162.bin" + +gUnk_08002169:: @ 08002169 + .incbin "code_080011C4/gUnk_08002169.bin" + +gUnk_08002170:: @ 08002170 + .incbin "code_080011C4/gUnk_08002170.bin" + +gUnk_08002178:: @ 08002178 + .incbin "code_080011C4/gUnk_08002178.bin" + +gUnk_08002184:: @ 08002184 + .incbin "code_080011C4/gUnk_08002184.bin" + +gUnk_0800218B:: @ 0800218B + .incbin "code_080011C4/gUnk_0800218B.bin" + +gUnk_08002193:: @ 08002193 + .incbin "code_080011C4/gUnk_08002193.bin" + +gUnk_0800219B:: @ 0800219B + .incbin "code_080011C4/gUnk_0800219B.bin" + +gUnk_080021A3:: @ 080021A3 + .incbin "code_080011C4/gUnk_080021A3.bin" + +gUnk_080021AB:: @ 080021AB + .incbin "code_080011C4/gUnk_080021AB.bin" + +gUnk_080021B3:: @ 080021B3 + .incbin "code_080011C4/gUnk_080021B3.bin" + +gUnk_080021BC:: @ 080021BC + .incbin "code_080011C4/gUnk_080021BC.bin" + +gUnk_080021C3:: @ 080021C3 + .incbin "code_080011C4/gUnk_080021C3.bin" + +gUnk_080021CA:: @ 080021CA + .incbin "code_080011C4/gUnk_080021CA.bin" + +gUnk_080021D1:: @ 080021D1 + .incbin "code_080011C4/gUnk_080021D1.bin" + +gUnk_080021D8:: @ 080021D8 + .incbin "code_080011C4/gUnk_080021D8.bin" + +gUnk_080021E1:: @ 080021E1 + .incbin "code_080011C4/gUnk_080021E1.bin" + +gUnk_080021E8:: @ 080021E8 + .incbin "code_080011C4/gUnk_080021E8.bin" + +gUnk_080021F1:: @ 080021F1 + .incbin "code_080011C4/gUnk_080021F1.bin" + +gUnk_080021F8:: @ 080021F8 + .incbin "code_080011C4/gUnk_080021F8.bin" + +gUnk_080021FF:: @ 080021FF + .incbin "code_080011C4/gUnk_080021FF.bin" + +gUnk_08002206:: @ 08002206 + .incbin "code_080011C4/gUnk_08002206.bin" + +gUnk_0800220D:: @ 0800220D + .incbin "code_080011C4/gUnk_0800220D.bin" + +gUnk_08002214:: @ 08002214 + .incbin "code_080011C4/gUnk_08002214.bin" + +gUnk_0800221B:: @ 0800221B + .incbin "code_080011C4/gUnk_0800221B.bin" + +gUnk_08002222:: @ 08002222 + .incbin "code_080011C4/gUnk_08002222.bin" + +gUnk_08002229:: @ 08002229 + .incbin "code_080011C4/gUnk_08002229.bin" + +gUnk_08002230:: @ 08002230 + .incbin "code_080011C4/gUnk_08002230.bin" + +gUnk_08002239:: @ 08002239 + .incbin "code_080011C4/gUnk_08002239.bin" + +gUnk_08002240:: @ 08002240 + .incbin "code_080011C4/gUnk_08002240.bin" + +gUnk_08002247:: @ 08002247 + .incbin "code_080011C4/gUnk_08002247.bin" + +gUnk_0800224E:: @ 0800224E + .incbin "code_080011C4/gUnk_0800224E.bin" + +gUnk_08002255:: @ 08002255 + .incbin "code_080011C4/gUnk_08002255.bin" + +gUnk_0800225C:: @ 0800225C + .incbin "code_080011C4/gUnk_0800225C.bin" + +gUnk_08002263:: @ 08002263 + .incbin "code_080011C4/gUnk_08002263.bin" + +gUnk_0800226A:: @ 0800226A + .incbin "code_080011C4/gUnk_0800226A.bin" + +gUnk_08002271:: @ 08002271 + .incbin "code_080011C4/gUnk_08002271.bin" + +gUnk_08002278:: @ 08002278 + .incbin "code_080011C4/gUnk_08002278.bin" + +gUnk_0800227F:: @ 0800227F + .incbin "code_080011C4/gUnk_0800227F.bin" + +gUnk_08002286:: @ 08002286 + .incbin "code_080011C4/gUnk_08002286.bin" + +gUnk_0800228D:: @ 0800228D + .incbin "code_080011C4/gUnk_0800228D.bin" + +gUnk_08002294:: @ 08002294 + .incbin "code_080011C4/gUnk_08002294.bin" + +gUnk_0800229B:: @ 0800229B + .incbin "code_080011C4/gUnk_0800229B.bin" + +gUnk_080022A7:: @ 080022A7 + .incbin "code_080011C4/gUnk_080022A7.bin" + +gUnk_080022B3:: @ 080022B3 + .incbin "code_080011C4/gUnk_080022B3.bin" + +gUnk_080022BF:: @ 080022BF + .incbin "code_080011C4/gUnk_080022BF.bin" + +gUnk_080022CB:: @ 080022CB + .incbin "code_080011C4/gUnk_080022CB.bin" + +gUnk_080022D7:: @ 080022D7 + .incbin "code_080011C4/gUnk_080022D7.bin" + +gUnk_080022DE:: @ 080022DE + .incbin "code_080011C4/gUnk_080022DE.bin" + +gUnk_080022E5:: @ 080022E5 + .incbin "code_080011C4/gUnk_080022E5.bin" + +gUnk_080022EC:: @ 080022EC + .incbin "code_080011C4/gUnk_080022EC.bin" + +gUnk_080022F3:: @ 080022F3 + .incbin "code_080011C4/gUnk_080022F3.bin" + +gUnk_080022FB:: @ 080022FB + .incbin "code_080011C4/gUnk_080022FB.bin" + +gUnk_08002302:: @ 08002302 + .incbin "code_080011C4/gUnk_08002302.bin" + +gUnk_08002309:: @ 08002309 + .incbin "code_080011C4/gUnk_08002309.bin" + +gUnk_08002310:: @ 08002310 + .incbin "code_080011C4/gUnk_08002310.bin" + +gUnk_08002317:: @ 08002317 + .incbin "code_080011C4/gUnk_08002317.bin" + +gUnk_0800231E:: @ 0800231E + .incbin "code_080011C4/gUnk_0800231E.bin" + +gUnk_08002325:: @ 08002325 + .incbin "code_080011C4/gUnk_08002325.bin" + +gUnk_0800232C:: @ 0800232C + .incbin "code_080011C4/gUnk_0800232C.bin" + +gUnk_0800232E:: @ 0800232E + .incbin "code_080011C4/gUnk_0800232E.bin" + +gUnk_08002342:: @ 08002342 + .incbin "code_080011C4/gUnk_08002342.bin" + + non_word_aligned_thumb_func_start sub_08002632 +sub_08002632: @ 0x08002632 + push {r4, r5, r6, r7, lr} + ldr r4, _0800269C @ =gUnk_0800232E + ldrb r3, [r0, #8] + cmp r3, #3 + beq _08002642 + cmp r3, #7 + bne _08002684 + ldr r4, _080026A0 @ =gUnk_08002342 +_08002642: + ldrb r3, [r0, #9] + lsls r1, r3, #0x10 + ldrb r3, [r0, #0xa] + lsls r3, r3, #8 + orrs r1, r3 + ldrb r3, [r0, #0xb] + orrs r1, r3 + add r6, pc, #0x38 +_08002652: + adds r4, #6 + ldrb r3, [r4] + lsls r2, r3, #0x10 + beq _08002684 + movs r5, #0 + ldrb r3, [r4, #1] + cmp r3, #0xff + bne _08002664 + movs r5, #8 +_08002664: + lsls r3, r3, #8 + orrs r2, r3 + ldrb r3, [r4, #2] + cmp r3, #0xff + bne _08002670 + adds r5, #4 +_08002670: + orrs r2, r3 + ldr r5, [r6, r5] + adds r3, r1, #0 + ands r3, r5 + ands r2, r5 + cmp r3, r2 + bne _08002652 + ldrb r0, [r4, #3] + ldrh r1, [r4, #4] + pop {r4, r5, r6, r7, pc} +_08002684: + movs r0, #0 + movs r1, #0 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0800268C: + .byte 0xFF, 0xFF, 0xFF, 0x00 + .byte 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00 +_0800269C: .4byte gUnk_0800232E +_080026A0: .4byte gUnk_08002342 + +gUnk_080026A4:: +@ normal entities + .4byte gUnk_020000B0 @ enemy target? (player) + .4byte gEntityLists - 8 @ first linked list + .4byte gEntityLists + 64 @ last linked list + .4byte ram_sub_080B2248 @ entity table +@ managers + .4byte gUnk_020000B0 + .4byte gEntityLists + 56 + .4byte gCollidableCount + .4byte ram_sub_080B2248 + + thumb_func_start sub_080026C4 +sub_080026C4: @ 0x080026C4 + push {r4, r5, r6, lr} + lsrs r4, r3, #3 + lsls r4, r4, #6 + adds r1, r1, r4 + movs r6, #0xf0 + lsls r4, r3, #0x1d + lsrs r4, r4, #0x1e + blo _080026D8 + movs r6, #0xf + adds r2, #0x10 +_080026D8: + adds r1, r1, r4 + movs r3, #0x10 +_080026DC: + ldrb r4, [r0] + ldrb r4, [r2, r4] + ldrb r5, [r1] + ands r5, r6 + orrs r5, r4 + strb r5, [r1] + adds r1, #4 + adds r0, #8 + subs r3, #1 + bne _080026DC + pop {r4, r5, r6, pc} + + non_word_aligned_thumb_func_start sub_080026F2 +sub_080026F2: @ 0x080026F2 + push {r4, r5, r6, lr} + lsrs r4, r3, #3 + lsls r4, r4, #6 + adds r1, r1, r4 + movs r6, #0xf0 + lsls r4, r3, #0x1d + lsrs r4, r4, #0x1e + blo _08002706 + movs r6, #0xf + adds r2, #0x10 +_08002706: + adds r1, r1, r4 + movs r3, #0x10 +_0800270A: + ldrb r4, [r0] + ldrb r4, [r2, r4] + cmp r4, #0 + beq _0800271A + ldrb r5, [r1] + ands r5, r6 + orrs r5, r4 + strb r5, [r1] +_0800271A: + adds r1, #4 + adds r0, #8 + subs r3, #1 + bne _0800270A + pop {r4, r5, r6, pc} + + thumb_func_start sub_08002724 +sub_08002724: @ 0x08002724 + push {r4, r5, lr} + movs r2, #0x10 + movs r3, #0xf +_0800272A: + ldrb r4, [r0] + lsrs r5, r4, #4 + ands r4, r3 + strb r4, [r1] + strb r5, [r1, #1] + ldrb r4, [r0, #1] + lsrs r5, r4, #4 + ands r4, r3 + strb r4, [r1, #2] + strb r5, [r1, #3] + ldrb r4, [r0, #2] + lsrs r5, r4, #4 + ands r4, r3 + strb r4, [r1, #4] + strb r5, [r1, #5] + ldrb r4, [r0, #3] + lsrs r5, r4, #4 + ands r4, r3 + strb r4, [r1, #6] + strb r5, [r1, #7] + adds r0, #4 + adds r1, #8 + subs r2, #1 + bne _0800272A + pop {r4, r5, pc} + +gUnk_0800275C:: + .byte 0x06, 0x00, 0x06, 0x60 + .byte 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x00, 0x60, 0x60, 0x60 + .byte 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x60, 0x06 + .byte 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x60, 0x06, 0x00, 0x06, 0x06, 0x06 + .byte 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06 + + thumb_func_start GetNextFunction +GetNextFunction: @ 0x0800279C + movs r1, #0x3a + ldrb r3, [r0, r1] + movs r2, #4 + ands r2, r3 + bne _080027AE + movs r1, #0x41 + ldrb r2, [r0, r1] + lsrs r2, r2, #7 + bne _080027CE +_080027AE: + movs r1, #0x42 + ldrb r2, [r0, r1] + cmp r2, #0 + bne _080027D2 + movs r1, #0x45 + ldrb r2, [r0, r1] + cmp r2, #0 + beq _080027D6 + lsrs r2, r3, #3 + bhs _080027E2 + movs r1, #0x43 + ldrb r2, [r0, r1] + cmp r2, #0 + bne _080027E6 +_080027CA: + movs r0, #0 + bx lr +_080027CE: + movs r0, #1 + bx lr +_080027D2: + movs r0, #2 + bx lr +_080027D6: + ldrb r2, [r0, #0xc] + ldrb r0, [r0, #0xd] + orrs r0, r2 + beq _080027CA + movs r0, #3 + bx lr +_080027E2: + movs r0, #5 + bx lr +_080027E6: + movs r0, #4 + bx lr + + non_word_aligned_thumb_func_start sub_080027EA +sub_080027EA: @ 0x080027EA + push {r4, r5, r6, r7, lr} + movs r3, #0x80 + tst r2, r3 + bne _08002860 + movs r4, #0x2a + ldrh r3, [r0, r4] + movs r4, #7 + tst r2, r4 + bne _08002812 + push {r0, r1, r2, r3} + adds r0, r2, #0 + adds r1, r3, #0 + bl sub_08002864 + adds r4, r0, #0 + pop {r0, r1, r2, r3} + cmp r2, r4 + beq _08002812 + adds r2, r4, #0 + ldr r1, _0800296C @ =0x00000100 +_08002812: + ldr r4, _08002970 @ =gUnk_0800275C + lsls r2, r2, #1 + ldrh r4, [r4, r2] + lsls r2, r2, #3 + ands r3, r4 + ldr r4, _08002974 @ =0x0000EE00 + tst r3, r4 + bne _0800283E + push {r0, r1, r2, r3} + ldr r4, _08002978 @ =gSineTable + ldrh r0, [r4, r2] + cmp r0, #0 + beq _08002834 + adds r6, #1 + bl FixedMul + lsls r0, r0, #8 +_08002834: + adds r4, r0, #0 + pop {r0, r1, r2, r3} + ldr r5, [r0, #0x2c] + adds r5, r5, r4 + str r5, [r0, #0x2c] +_0800283E: + movs r4, #0xee + tst r3, r4 + bne _08002860 + push {r0, r1, r2, r3} + ldr r4, _0800297C @ =gCosineTable + ldrh r0, [r4, r2] + cmp r0, #0 + beq _08002856 + adds r6, #2 + bl FixedMul + lsls r0, r0, #8 +_08002856: + adds r4, r0, #0 + pop {r0, r1, r2, r3} + ldr r5, [r0, #0x30] + subs r5, r5, r4 + str r5, [r0, #0x30] +_08002860: + adds r1, r6, #0 + pop {r4, r5, r6, r7, pc} + + thumb_func_start sub_08002864 +sub_08002864: @ 0x08002864 + adds r2, r0, #0 + lsrs r2, r2, #3 + cmp r2, #0 + beq _080028A8 + subs r2, #1 + beq _0800288E + subs r2, #1 + beq _080028C2 + ldr r3, _08002980 @ =0x00000E00 + ands r3, r1 + bne _0800287C + bx lr +_0800287C: + movs r2, #0 + ldr r3, _08002984 @ =0x0000020E + tst r3, r1 + beq _080028DC + movs r2, #0x10 + ldr r3, _08002988 @ =0x000004E0 + tst r3, r1 + beq _080028DC + bx lr +_0800288E: + ldr r3, _0800298C @ =0x0000E000 + ands r3, r1 + bne _08002896 + bx lr +_08002896: + movs r2, #0 + ldr r3, _08002990 @ =0x0000200E + tst r3, r1 + beq _080028DC + movs r2, #0x10 + ldr r3, _08002994 @ =0x000040E0 + tst r3, r1 + beq _080028DC + bx lr +_080028A8: + movs r3, #0xe + ands r3, r1 + bne _080028B0 + bx lr +_080028B0: + movs r2, #8 + ldr r3, _08002998 @ =0x0000E004 + tst r3, r1 + beq _080028DC + movs r2, #0x18 + ldr r3, _0800299C @ =0x00000E02 + tst r3, r1 + beq _080028DC + bx lr +_080028C2: + movs r3, #0xe0 + ands r3, r1 + bne _080028CA + bx lr +_080028CA: + movs r2, #8 + ldr r3, _080029A0 @ =0x0000E040 + tst r3, r1 + beq _080028DC + movs r2, #0x18 + ldr r3, _080029A4 @ =0x00000E20 + tst r3, r1 + beq _080028DC + bx lr +_080028DC: + adds r0, r2, #0 + bx lr + + thumb_func_start sub_080028E0 +sub_080028E0: @ 0x080028E0 + movs r1, #0x3d + movs r3, #1 + ldrsb r2, [r0, r1] + cmp r2, #0 + beq _080028F2 + bmi _080028EE + rsbs r3, r3, #0 +_080028EE: + adds r2, r2, r3 + strb r2, [r0, r1] +_080028F2: + bx lr + + thumb_func_start GetRandomByWeight +GetRandomByWeight: @ 0x080028F4 + push {r4, lr} + adds r4, r0, #0 + bl Random + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + movs r1, #0 +_08002902: + ldrb r2, [r4, r1] + adds r1, #1 + subs r0, r0, r2 + bpl _08002902 + subs r0, r1, #1 + pop {r4, pc} + + non_word_aligned_thumb_func_start CheckRectOnScreen +CheckRectOnScreen: @ 0x0800290E + push {r4, r5, r6, lr} + ldr r4, _080029A8 @ =gRoomControls + ldrh r5, [r4, #0xa] + ldrh r6, [r4, #6] + subs r5, r5, r6 + subs r5, r5, r2 + subs r0, r0, r5 + lsls r2, r2, #1 + adds r2, #0xf0 + cmp r0, r2 + bhs _0800293A + ldrh r5, [r4, #0xc] + ldrh r6, [r4, #8] + subs r5, r5, r6 + subs r5, r5, r3 + subs r1, r1, r5 + lsls r3, r3, #1 + adds r3, #0xa0 + cmp r1, r3 + bhs _0800293A + movs r0, #1 + pop {r4, r5, r6, pc} +_0800293A: + movs r0, #0 + pop {r4, r5, r6, pc} + + non_word_aligned_thumb_func_start CheckPlayerInRegion +CheckPlayerInRegion: @ 0x0800293E + push {r4, r5, r6, r7, lr} + ldr r4, _080029AC @ =gRoomControls + ldr r7, _080029B0 @ =gPlayerEntity + ldrh r6, [r4, #6] + ldrh r5, [r7, #0x2e] + subs r5, r5, r6 + subs r5, r5, r2 + subs r0, r0, r5 + lsls r2, r2, #1 + cmp r0, r2 + bhs _08002968 + ldrh r6, [r4, #8] + ldrh r5, [r7, #0x32] + subs r5, r5, r6 + subs r5, r5, r3 + subs r1, r1, r5 + lsls r3, r3, #1 + cmp r1, r3 + bhs _08002968 + movs r0, #1 + pop {r4, r5, r6, r7, pc} +_08002968: + movs r0, #0 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0800296C: .4byte 0x00000100 +_08002970: .4byte gUnk_0800275C +_08002974: .4byte 0x0000EE00 +_08002978: .4byte gSineTable +_0800297C: .4byte gCosineTable +_08002980: .4byte 0x00000E00 +_08002984: .4byte 0x0000020E +_08002988: .4byte 0x000004E0 +_0800298C: .4byte 0x0000E000 +_08002990: .4byte 0x0000200E +_08002994: .4byte 0x000040E0 +_08002998: .4byte 0x0000E004 +_0800299C: .4byte 0x00000E02 +_080029A0: .4byte 0x0000E040 +_080029A4: .4byte 0x00000E20 +_080029A8: .4byte gRoomControls +_080029AC: .4byte gRoomControls +_080029B0: .4byte gPlayerEntity diff --git a/asm/src/code_08003FC4.s b/asm/src/code_08003FC4.s new file mode 100644 index 00000000..718c0306 --- /dev/null +++ b/asm/src/code_08003FC4.s @@ -0,0 +1,677 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start GravityUpdate +GravityUpdate: @ 0x08003FC4 + @ r0 = Entity* + @ r1 = Gravity strength + @ returns z pos + + adds r3, r0, #0 + ldr r0, [r3, #0x34] + ldr r2, [r3, #0x20] + subs r0, r0, r2 + bpl _08003FD6 + subs r2, r2, r1 + str r0, [r3, #0x34] + str r2, [r3, #0x20] + bx lr +_08003FD6: + movs r0, #0 + str r0, [r3, #0x34] + str r0, [r3, #0x20] + bx lr + + non_word_aligned_thumb_func_start sub_08003FDE +sub_08003FDE: @ 0x08003FDE + push {r0, lr} + bl sub_08003FF2 + cmp r0, #0 + pop {r2} + beq _08003FF0 + adds r0, r2, #0 + bl sub_0806F58C +_08003FF0: + pop {pc} + + non_word_aligned_thumb_func_start sub_08003FF2 +sub_08003FF2: @ 0x08003FF2 + push {r4, r5, r6, r7, lr} + ldr r4, [r1, #0x48] + ldrb r5, [r4, #6] + ldrb r6, [r4, #7] + adds r2, r2, r5 + adds r3, r3, r6 + ldrh r5, [r1, #0x2e] + movs r7, #0 + ldrsb r7, [r4, r7] + ldrb r6, [r1, #0x18] + lsrs r6, r6, #3 + blo _0800400C + rsbs r7, r7, #0 +_0800400C: + adds r5, r5, r7 + ldrh r6, [r1, #0x32] + movs r7, #1 + ldrsb r7, [r4, r7] + adds r6, r6, r7 + movs r4, #0x38 + ldrb r7, [r0, r4] + ldrb r4, [r1, r4] + ands r7, r4 + movs r4, #3 + cmp r7, r4 + beq _08004048 + cmp r2, #0 + beq _08004034 + ldrh r4, [r0, #0x2e] + subs r4, r4, r5 + adds r4, r4, r2 + lsls r2, r2, #1 + cmp r2, r4 + blo _08004048 +_08004034: + cmp r3, #0 + beq _08004044 + ldrh r4, [r0, #0x32] + subs r4, r4, r6 + adds r4, r4, r3 + lsls r3, r3, #1 + cmp r3, r4 + blo _08004048 +_08004044: + movs r0, #1 + pop {r4, r5, r6, r7, pc} +_08004048: + movs r0, #0 + pop {r4, r5, r6, r7, pc} + + thumb_func_start DrawEntity +DrawEntity: @ 0x0800404C + push {r4, r5, lr} + adds r4, r0, #0 + ldrb r1, [r0, #0x18] + movs r2, #3 + ands r1, r2 + beq _0800409A + cmp r1, #3 + beq _08004064 + bl sub_080040A2 + cmp r0, #0 + beq _0800409A +_08004064: + ldrb r1, [r4, #0x19] + movs r2, #0xc0 + ands r1, r2 + lsrs r1, r1, #4 + ldr r2, _08004358 @ =gUnk_081326EC + ldr r1, [r2, r1] + ldrb r2, [r1] + cmp r2, #0x40 + bhs _0800407E + adds r2, #1 + strb r2, [r1] + lsls r2, r2, #2 + str r4, [r1, r2] +_0800407E: + movs r2, #0 + ldr r1, _0800435C @ =gUnk_02024048 + ldrb r5, [r1] + strb r2, [r1] + cmp r5, #0 + beq _080040A0 + ldr r4, _08004360 @ =gUnk_02021F20 +_0800408C: + ldrh r0, [r4] + bl SoundReq + adds r4, #2 + subs r5, #1 + bne _0800408C + pop {r4, r5, pc} +_0800409A: + ldr r1, _08004364 @ =gUnk_02024048 + movs r2, #0 + strb r2, [r1] +_080040A0: + pop {r4, r5, pc} + + non_word_aligned_thumb_func_start sub_080040A2 +sub_080040A2: @ 0x080040A2 + ldrb r1, [r0, #0x18] + lsrs r1, r1, #2 + bhs _080040D0 + + thumb_func_start CheckOnScreen +CheckOnScreen: @ 0x080040A8 + ldr r1, _08004368 @ =gRoomControls + movs r2, #0x2e + ldrsh r2, [r0, r2] + ldrh r3, [r1, #0xa] + subs r2, r2, r3 + adds r2, #0x3f + ldr r3, _0800436C @ =0x0000016E + cmp r2, r3 + bhs _080040D4 + movs r2, #0x32 + ldrsh r2, [r0, r2] + ldrh r3, [r1, #0xc] + subs r2, r2, r3 + movs r3, #0x36 + ldrsh r3, [r0, r3] + adds r2, r2, r3 + adds r2, #0x3f + ldr r3, _08004370 @ =0x0000011E + cmp r2, r3 + bhs _080040D4 +_080040D0: + movs r0, #1 + bx lr +_080040D4: + movs r0, #0 + bx lr + + thumb_func_start sub_080040D8 +sub_080040D8: @ 0x080040D8 + push {lr} + bl _080040F2 + adds r0, r2, #0 + pop {pc} + + non_word_aligned_thumb_func_start sub_080040E2 +sub_080040E2: @ 0x080040E2 + push {lr} + bl sub_080040EC + adds r0, r2, #0 + pop {pc} + + thumb_func_start sub_080040EC +sub_080040EC: @ 0x080040EC + ldrh r2, [r0, #0x2e] + ldrh r3, [r0, #0x32] + b _080040F2 +_080040F2: + push {r2, r3, r4, lr} + ldr r4, _08004374 @ =gRoomControls + 6 + ldrh r4, [r4] + subs r2, r2, r4 + ldr r4, _08004378 @ =gRoomControls + 8 + ldrh r4, [r4] + subs r3, r3, r4 + ldr r4, _0800437C @ =0x000003F0 + ands r2, r4 + ands r3, r4 + lsrs r2, r2, #4 + lsls r3, r3, #2 + adds r2, r2, r3 + movs r3, #0x38 + ldrb r3, [r0, r3] + lsls r3, r3, #2 + ldr r4, _08004380 @ =gUnk_08000248 + ldr r3, [r4, r3] + ldrb r4, [r3, r2] + pop {r2, r3} + cmp r4, #0x10 + bhs _0800412C + lsrs r3, r3, #4 + bhs _08004124 + lsrs r4, r4, #2 +_08004124: + lsrs r2, r2, #4 + bhs _08004162 + lsrs r4, r4, #1 + b _08004162 +_0800412C: + cmp r4, #0xff + beq _08004162 + subs r4, #0x10 + lsls r4, r4, #1 + ldrh r4, [r1, r4] + movs r1, #0xf + ands r1, r2 + cmp r1, #4 + blo _0800414C + lsrs r4, r4, #1 + cmp r1, #8 + blo _0800414C + lsrs r4, r4, #1 + cmp r1, #0xc + blo _0800414C + lsrs r4, r4, #1 +_0800414C: + movs r1, #0xf + ands r1, r3 + cmp r1, #4 + blo _08004162 + lsrs r4, r4, #4 + cmp r1, #8 + blo _08004162 + lsrs r4, r4, #4 + cmp r1, #0xc + blo _08004162 + lsrs r4, r4, #4 +_08004162: + movs r2, #1 + ands r2, r4 + pop {r4, pc} + + thumb_func_start sub_08004168 +sub_08004168: @ 0x08004168 + ldr r3, _08004384 @ =0x000FFFFF + ldr r1, _08004388 @ =0x00080000 + ldr r2, [r0, #0x2c] + bics r2, r3 + adds r2, r2, r1 + str r2, [r0, #0x2c] + ldr r2, [r0, #0x30] + bics r2, r3 + adds r2, r2, r1 + str r2, [r0, #0x30] + bx lr + + non_word_aligned_thumb_func_start sub_0800417E +sub_0800417E: @ 0x0800417E + ldrb r2, [r0, #0x15] + ldr r3, _0800438C @ =0x0000EE00 + tst r1, r3 + beq _0800418A + movs r3, #0x20 + subs r2, r3, r2 +_0800418A: + movs r3, #0xee + tst r1, r3 + beq _08004194 + movs r3, #0x10 + subs r2, r3, r2 +_08004194: + movs r3, #0x1f + ands r2, r3 + strb r2, [r0, #0x15] + bx lr + + thumb_func_start sub_0800419C +sub_0800419C: @ 0x0800419C + push {r5, r6, lr} + b _080041B0 + + thumb_func_start EntityInRectRadius +EntityInRectRadius: @ 0x080041A0 + push {r5, r6, lr} + movs r6, #0x38 + ldrb r5, [r0, r6] + ldrb r6, [r1, r6] + ands r5, r6 + movs r6, #3 + tst r5, r6 + beq _080041D8 +_080041B0: + cmp r2, #0 + beq _080041C2 + ldrh r5, [r0, #0x2e] + ldrh r6, [r1, #0x2e] + subs r5, r5, r6 + adds r5, r5, r2 + lsls r2, r2, #1 + cmp r2, r5 + blo _080041D8 +_080041C2: + cmp r3, #0 + beq _080041D4 + ldrh r5, [r0, #0x32] + ldrh r6, [r1, #0x32] + subs r5, r5, r6 + adds r5, r5, r3 + lsls r3, r3, #1 + cmp r3, r5 + blo _080041D8 +_080041D4: + movs r0, #1 + pop {r5, r6, pc} +_080041D8: + movs r0, #0 + pop {r5, r6, pc} + + thumb_func_start sub_080041DC +sub_080041DC: @ 0x080041DC + push {r1, r2} + movs r2, #0x32 + ldrsh r1, [r0, r2] + movs r3, #0x2e + ldrsh r0, [r0, r3] + pop {r2, r3} + + thumb_func_start sub_080041E8 +sub_080041E8: @ 0x080041E8 + subs r0, r0, r2 + subs r1, r1, r3 + + thumb_func_start sub_080041EC +sub_080041EC: @ 0x080041EC + adds r2, r0, #0 + muls r0, r2, r0 + adds r3, r1, #0 + muls r1, r3, r1 + push {lr} + adds r0, r0, r1 + lsls r0, r0, #8 + bl Sqrt + pop {r3} + bx r3 + + non_word_aligned_thumb_func_start sub_08004202 +sub_08004202: @ 0x08004202 + push {r1, lr} + ldrb r1, [r0, #0x14] + bl sub_08004212 + pop {r0} + str r1, [r0] + adds r0, r2, #0 + pop {pc} + + non_word_aligned_thumb_func_start sub_08004212 +sub_08004212: @ 0x08004212 + push {r4} + adds r4, r1, #0 + movs r3, #3 + tst r4, r3 + beq _08004226 + movs r3, #2 + lsrs r4, r4, #3 + blo _08004224 + rsbs r3, r3, #0 +_08004224: + adds r2, r2, r3 +_08004226: + adds r4, r1, #0 + movs r3, #3 + ands r4, r3 + cmp r4, #2 + beq _0800423C + movs r3, #0x80 + adds r1, #1 + lsrs r1, r1, #3 + bhs _0800423A + rsbs r3, r3, #0 +_0800423A: + adds r2, r2, r3 +_0800423C: + ldr r3, _08004390 @ =0x00001FFF + ands r2, r3 + movs r4, #0x38 + ldrb r4, [r0, r4] + lsls r4, r4, #3 + ldr r3, _08004394 @ =gUnk_08000228 + adds r3, r3, r4 + ldr r4, [r3] + ldrh r1, [r4, r2] + ldr r4, _08004398 @ =0x00004000 + tst r1, r4 + bne _0800425C + lsls r1, r1, #0x11 + lsrs r1, r1, #0x10 + ldr r4, [r3, #4] + ldrh r1, [r4, r1] +_0800425C: + pop {r4} + bx lr + + thumb_func_start InitializeAnimation @ r0 = Entity*, r1 = Frame* +InitializeAnimation: @ 0x08004260 + movs r2, #0x58 @ anim idx + strb r1, [r0, r2] + + ldrh r3, [r0, #0x12] @ Sprite idx + lsls r3, r3, #4 @ *= 16 + + ldr r2, _0800439C @ =gSpritePtrs + + ldr r2, [r2, r3] @ Load AnimData + lsls r1, r1, #2 @ *= 4 + + ldr r1, [r2, r1] @ AnimData->??? + str r1, [r0, #0x5c] + b FrameZero + + thumb_func_start GetNextFrame +GetNextFrame: @ 0x08004274 + movs r1, #1 + + non_word_aligned_thumb_func_start UpdateAnimationVariableFrames +UpdateAnimationVariableFrames: @ 0x08004276 + movs r3, #0x59 + ldrb r2, [r0, r3] @ Decrease frame timer + subs r2, r2, r1 + + beq FrameZero @ Frame timer is 0 + ble FrameNeg @ Frame timer is below 0 + + strb r2, [r0, r3] + + bx lr + +FrameNeg: + ldr r1, [r0, #0x5c] @ Load frame data + +_08004286: + ldrb r3, [r1, #1] + adds r2, r2, r3 + + bgt _0800429C @ Frame idx greater (?) + + ldrb r3, [r1, #3] + adds r1, #4 + lsrs r3, r3, #8 @ Branch if != 0xFF + + blo _08004286 + + ldrb r3, [r1] + lsls r3, r3, #2 + subs r1, r1, r3 + b _08004286 + +_0800429C: + str r1, [r0, #0x5c] + + push {r2, lr} + bl FrameZero + pop {r2, r3} + + movs r1, #0x59 + strb r2, [r0, r1] + bx r3 + + thumb_func_start InitAnimationForceUpdate +InitAnimationForceUpdate: @ 0x080042AC + push {lr} + bl InitializeAnimation + movs r2, #0xff + strb r2, [r0, #0x1f] + b _080042C0 + + thumb_func_start UpdateAnimationSingleFrame +UpdateAnimationSingleFrame: @ 0x080042B8 + movs r1, #1 + + non_word_aligned_thumb_func_start sub_080042BA +sub_080042BA: @ 0x080042BA + push {lr} + bl UpdateAnimationVariableFrames + +_080042C0: + pop {r1} + mov lr, r1 + + ldrb r1, [r0, #0x1e] + ldrb r3, [r0, #0x1f] + strb r1, [r0, #0x1f] + + cmp r1, r3 + beq _08004328 + + ldrh r2, [r0, #0x12] + + thumb_func_start sub_080042D0 +sub_080042D0: @ 0x080042D0 + cmp r1, #0xff + beq _08004328 + + lsls r2, r2, #4 + lsls r3, r1, #2 + ldr r1, _080043A0 @ =gSpritePtrs + adds r1, r1, r2 + ldr r2, [r1, #4] + + cmp r2, #0 + beq _08004328 + + ldr r1, [r1, #8] + adds r2, r2, r3 + ldrb r3, [r2] + cmp r3, #0 + beq _08004328 + push {r4, r5} + movs r3, #0x26 + ldrb r3, [r0, r3] + movs r4, #0xc + muls r3, r4, r3 + ldr r4, _080043A4 @ =gUnk_02024494 + adds r4, r4, r3 + ldrb r3, [r4] + movs r5, #0xf + ands r3, r5 + cmp r3, #5 + blo _08004326 + ldrb r5, [r4, #6] + ldrb r3, [r2] + strb r3, [r4, #6] + subs r5, r5, r3 + ldrh r3, [r2, #2] + lsls r3, r3, #5 + adds r1, r1, r3 + ldr r2, [r4, #8] + str r1, [r4, #8] + subs r2, r2, r1 + orrs r5, r2 + beq _08004326 + movs r2, #0xf0 + ldrb r1, [r4] + bics r1, r2 + adds r1, #0x30 + strb r1, [r4] +_08004326: + pop {r4, r5} +_08004328: + bx lr + +FrameZero: @ r0 = Entity* + ldrb r3, [r0, #0x1e] @ Get frame idx + strb r3, [r0, #0x1f] @ Set it to last frame idx + + ldr r1, [r0, #0x5c] + ldrb r3, [r1] @ Store new frame idx + strb r3, [r0, #0x1e] + + ldrb r3, [r1, #1] + movs r2, #0x59 + strb r3, [r0, r2] + + ldrb r3, [r1, #2] + movs r2, #0x5b + strb r3, [r0, r2] + + ldrb r3, [r1, #3] + movs r2, #0x5a + strb r3, [r0, r2] + + adds r1, #4 + lsrs r3, r3, #8 + + blo _08004352 + + ldrb r3, [r1] + lsls r3, r3, #2 + subs r1, r1, r3 + +_08004352: + str r1, [r0, #0x5c] + bx lr + .align 2, 0 + +_08004358: .4byte gUnk_081326EC +_0800435C: .4byte gUnk_02024048 +_08004360: .4byte gUnk_02021F20 +_08004364: .4byte gUnk_02024048 +_08004368: .4byte gRoomControls +_0800436C: .4byte 0x0000016E +_08004370: .4byte 0x0000011E +_08004374: .4byte gRoomControls + 6 +_08004378: .4byte gRoomControls + 8 +_0800437C: .4byte 0x000003F0 +_08004380: .4byte gUnk_08000248 +_08004384: .4byte 0x000FFFFF +_08004388: .4byte 0x00080000 +_0800438C: .4byte 0x0000EE00 +_08004390: .4byte 0x00001FFF +_08004394: .4byte gUnk_08000228 +_08004398: .4byte 0x00004000 +_0800439C: .4byte gSpritePtrs +_080043A0: .4byte gSpritePtrs +_080043A4: .4byte gUnk_02024494 + + thumb_func_start sub_080043A8 +sub_080043A8: @ 0x080043A8 + movs r1, #0xb + b _080043B6 + + thumb_func_start CreateChestSpawner +CreateChestSpawner: @ 0x080043AC + movs r1, #0xc + b _080043B6 + + thumb_func_start sub_080043B0 +sub_080043B0: @ 0x080043AC + movs r1, #0x52 + b _080043B6 + + thumb_func_start CreateItemOnGround +CreateItemOnGround: @ 0x080043B4 + movs r1, #0 + +_080043B6: + push {r4, lr} + adds r4, r0, #0 + movs r0, #0xf + movs r2, #0 + bl CreateObject + + cmp r0, #0 + beq _080043E0 @ Branch if entity could not be created + + movs r1, #0x48 + ldr r1, [r4, r1] @ Unused? + + ldrh r3, [r4, #0x2e] + strh r3, [r0, #0x2e] + + ldrh r3, [r4, #0x32] + strh r3, [r0, #0x32] + + ldrh r3, [r4, #0x36] + strh r3, [r0, #0x36] + + ldrb r3, [r4, #8] + + cmp r3, #3 @ Is the spawner an enemy? + bne _080043E0 + + movs r1, #1 + strb r1, [r0, #0xb] @ Set base parameter + +_080043E0: + adds r0, r4, #0 + bl DeleteEntity + + pop {r4, pc} diff --git a/asm/src/code_080043E8.s b/asm/src/code_080043E8.s new file mode 100644 index 00000000..8ce6abb5 --- /dev/null +++ b/asm/src/code_080043E8.s @@ -0,0 +1,408 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start sub_080043E8 +sub_080043E8: @ 0x080043E8 + push {r4, lr} + ldrb r1, [r0, #0xc] + cmp r1, #0 + beq _08004414 + adds r4, r0, #0 + bl sub_08016AD2 + movs r3, #0x36 + ldrsh r2, [r4, r3] + cmp r2, #0 + bmi _08004414 + cmp r0, #0 + beq _08004414 + add r3, pc, #0x10 +_08004404: + adds r3, #4 + ldrh r1, [r3] + cmp r1, #0 + beq _08004414 + cmp r0, r1 + bne _08004404 + ldrh r0, [r3, #2] + pop {r4, pc} +_08004414: + movs r0, #0 + pop {r4, pc} +_08004418: + .byte 0x0D, 0x00, 0x01, 0x00, 0x10, 0x00, 0x02, 0x00 + .byte 0x11, 0x00, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x00, 0x13, 0x00, 0x04, 0x00, 0x00, 0x00 + + non_word_aligned_thumb_func_start sub_0800442E +sub_0800442E: @ 0x0800442E + push {r0, lr} + bl sub_080043E8 + cmp r0, #0 + beq _08004448 + lsls r0, r0, #2 + add r1, pc, #0xC + ldr r1, [r1, r0] + pop {r0} + bl _call_via_r1 + movs r0, #1 + pop {pc} +_08004448: + movs r0, #0 + pop {r1, pc} +_0800444C: .4byte CreateItemOnGround +_08004450: .4byte sub_080043A8 +_08004454: .4byte CreateChestSpawner +_08004458: .4byte sub_080043B0 + + thumb_func_start sub_0800445C +sub_0800445C: @ 0x0800445C + push {r4, r5, lr} + adds r4, r0, #0 + bl sub_08079F8C + cmp r0, #0 + beq _08004482 + ldr r5, _080044D8 @ =gPlayerEntity + adds r0, r4, #0 + adds r1, r5, #0 + bl sub_08004484 + cmp r0, #0 + beq _08004482 + ldrb r0, [r5, #0xc] + cmp r0, #2 + bne _08004480 + movs r0, #3 + strb r0, [r5, #0xd] +_08004480: + movs r0, #1 +_08004482: + pop {r4, r5, pc} + + thumb_func_start sub_08004484 +sub_08004484: @ 0x08004484 + ldr r2, _080044DC @ =ram_sub_080B227C + bx r2 + + thumb_func_start EnqueueSFX +EnqueueSFX: @ 0x08004488 + ldr r1, _080044E0 @ =gUnk_02024048 + ldrb r2, [r1] + cmp r2, #8 + bhs _0800449A + adds r3, r2, #1 + strb r3, [r1] + ldr r1, _080044E4 @ =gUnk_02021F20 + lsls r2, r2, #1 + strh r0, [r1, r2] +_0800449A: + bx lr + + thumb_func_start SoundReqClipped +SoundReqClipped: @ 0x0800449C + push {r1, lr} + bl CheckOnScreen + cmp r0, #0 + pop {r0} + beq _080044AC + bl SoundReq +_080044AC: + pop {pc} + + non_word_aligned_thumb_func_start sub_080044AE +sub_080044AE: @ 0x080044AE + push {lr} + ldr r3, _080044E8 @ =gPlayerEntity + cmp r0, r3 + beq _080044CC + push {r0, r1, r2} + adds r1, r2, #0 + movs r2, #2 + bl CalculateEntityTileCollisions + pop {r0, r1, r2} + movs r3, #2 + bl ProcessMovementInternal +_080044C8: + pop {r3} + bx r3 +_080044CC: + adds r0, r1, #0 + adds r1, r2, #0 + bl sub_08079E58 + b _080044C8 + .align 2, 0 +_080044D8: .4byte gPlayerEntity +_080044DC: .4byte ram_sub_080B227C +_080044E0: .4byte gUnk_02024048 +_080044E4: .4byte gUnk_02021F20 +_080044E8: .4byte gPlayerEntity + + thumb_func_start sub_080044EC +sub_080044EC: @ 0x080044EC + ldr r2, [r0, #0x34] + ldr r3, [r0, #0x20] + subs r2, r2, r3 + bpl _080044FE + str r2, [r0, #0x34] + subs r3, r3, r1 + str r3, [r0, #0x20] + movs r0, #2 + bx lr +_080044FE: + movs r2, #1 + str r2, [r0, #0x34] + subs r3, r3, r1 + rsbs r3, r3, #0 + lsrs r3, r3, #1 + lsrs r1, r3, #2 + adds r3, r3, r1 + lsrs r1, r3, #0xc + cmp r1, #0xc + bhs _08004516 + movs r2, #0 + movs r3, #0 +_08004516: + str r3, [r0, #0x20] + adds r0, r2, #0 + bx lr + + thumb_func_start sub_0800451C +sub_0800451C: @ 0x0800451C + push {r0, lr} + bl sub_080B1AA8 + adds r1, r0, #0 + pop {r0, r3} + mov lr, r3 + cmp r1, #0xc + beq sub_08004542 + cmp r1, #0xb + beq sub_08004542 + cmp r1, #0xa + beq ResetCollisionLayer + cmp r1, #9 + beq ResetCollisionLayer + cmp r1, #0x26 + beq _0800457A + cmp r1, #0x27 + beq _0800457A + bx lr + + non_word_aligned_thumb_func_start sub_08004542 +sub_08004542: @ 0x08004542 + movs r1, #0x38 + movs r2, #2 + strb r2, [r0, r1] + movs r2, #0xc0 + ldrb r1, [r0, #0x1b] + bics r1, r2 + adds r1, #0x40 + strb r1, [r0, #0x1b] + movs r2, #0xc0 + ldrb r1, [r0, #0x19] + bics r1, r2 + adds r1, #0x40 + strb r1, [r0, #0x19] + bx lr + + non_word_aligned_thumb_func_start ResetCollisionLayer +ResetCollisionLayer: @ 0x0800455E + movs r1, #0x38 + movs r2, #1 + strb r2, [r0, r1] + movs r2, #0xc0 + ldrb r1, [r0, #0x1b] + bics r1, r2 + adds r1, #0x80 + strb r1, [r0, #0x1b] + movs r2, #0xc0 + ldrb r1, [r0, #0x19] + bics r1, r2 + adds r1, #0x80 + strb r1, [r0, #0x19] + bx lr +_0800457A: + movs r1, #0x38 + movs r2, #3 + strb r2, [r0, r1] + movs r2, #0xc0 + ldrb r1, [r0, #0x1b] + bics r1, r2 + adds r1, #0x40 + strb r1, [r0, #0x1b] + movs r2, #0xc0 + ldrb r1, [r0, #0x19] + bics r1, r2 + adds r1, #0x40 + strb r1, [r0, #0x19] + bx lr + + non_word_aligned_thumb_func_start sub_08004596 +sub_08004596: @ 0x08004596 + movs r2, #0x1f + ldrb r3, [r0, #0x15] + cmp r3, #0x20 + bhs _080045AE + subs r1, r1, r3 + beq _080045B2 + ands r1, r2 + cmp r1, #0x10 + movs r1, #1 + blo _080045AC + rsbs r1, r1, #0 +_080045AC: + adds r1, r3, r1 +_080045AE: + ands r1, r2 + strb r1, [r0, #0x15] +_080045B2: + bx lr + + thumb_func_start sub_080045B4 +sub_080045B4: @ 0x080045B4 + mov ip, r2 + adds r2, r1, #0 + movs r3, #0x32 + ldrsh r1, [r0, r3] + movs r3, #0x2e + ldrsh r0, [r0, r3] + ldr r3, _08004690 @ =ram_CalcCollisionDirection + bx r3 + + thumb_func_start GetFacingDirection +GetFacingDirection: @ 0x080045C4 + push {r4, r5} + movs r4, #0x32 + movs r5, #0x2e + ldrsh r3, [r1, r4] + ldrsh r2, [r1, r5] + ldrsh r1, [r0, r4] + ldrsh r0, [r0, r5] + pop {r4, r5} + + thumb_func_start CalculateDirectionTo +CalculateDirectionTo: @ 0x080045D4 + mov ip, r3 + ldr r3, _08004694 @ =ram_CalcCollisionDirection + bx r3 + + non_word_aligned_thumb_func_start sub_080045DA +sub_080045DA: @ 0x080045DA + push {r0, r1, r4, r5, r6, lr} + movs r6, #0x40 + cmp r0, #0 + beq _08004632 + ldr r5, _08004698 @ =gUnk_080C93E0 + lsls r2, r1, #8 + adds r1, r0, #0 + adds r0, r2, #0 + bl Div + ldr r1, _0800469C @ =0x00000106 + cmp r3, r1 + bhs _08004608 + movs r1, #0x6e + cmp r3, r1 + bhs _08004602 + movs r6, #0 + movs r1, #0 + movs r2, #0x20 + b _08004618 +_08004602: + movs r1, #0x20 + movs r2, #0x40 + b _08004618 +_08004608: + ldr r1, _080046A0 @ =0x00000280 + cmp r3, r1 + bhs _08004614 + movs r1, #0x40 + movs r2, #0x60 + b _08004618 +_08004614: + movs r1, #0x60 + movs r2, #0x7e +_08004618: + adds r0, r1, r5 + ldrh r4, [r0] + cmp r3, r4 + blo _0800462C + ldrh r4, [r0, #2] + cmp r3, r4 + bhs _0800462C + lsrs r6, r1, #1 + adds r6, #1 + b _08004632 +_0800462C: + adds r1, #2 + cmp r1, r2 + blo _08004618 +_08004632: + adds r2, r6, #0 + pop {r0, r1, r4, r5, r6} + cmp r0, #0 + bmi _08004644 + movs r0, #0x40 + cmp r1, #0 + bmi _0800464A +_08004640: + adds r0, r0, r2 + pop {pc} +_08004644: + movs r0, #0xc0 + cmp r1, #0 + bmi _08004640 +_0800464A: + subs r0, r0, r2 + pop {pc} + +gUnk_0800464E:: + .byte 0x00, 0x01 + .byte 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x08, 0x07, 0x06, 0x05, 0x04, 0x00, 0x00, 0x00, 0x10, 0x0F + .byte 0x0E, 0x0D, 0x0C, 0x00, 0x00, 0x00, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x1F + .byte 0x1E, 0x1D, 0x1C, 0x00, 0x00, 0x00, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x00, 0x00, 0x00, 0x10, 0x11 + .byte 0x12, 0x13, 0x14, 0x00, 0x00, 0x00, 0x18, 0x17, 0x16, 0x15, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00 + +_08004690: .4byte ram_CalcCollisionDirection +_08004694: .4byte ram_CalcCollisionDirection +_08004698: .4byte gUnk_080C93E0 +_0800469C: .4byte 0x00000106 +_080046A0: .4byte 0x00000280 + +gUnk_080046A4:: @ 080046A4 + .incbin "code_080043E8/gUnk_080046A4.bin" + +gUnk_080047F6:: @ 080047F6 + .incbin "code_080043E8/gUnk_080047F6.bin" + +gUnk_080049D6:: @ 080049D6 + .incbin "code_080043E8/gUnk_080049D6.bin" + +gUnk_080049F6:: @ 080049F6 + .incbin "code_080043E8/gUnk_080049F6.bin" + +gUnk_080049FE:: @ gUnk_080049FE + .incbin "code_080043E8/gUnk_080049FE.bin" + +gUnk_08004A0C:: @ 08004A0C + .incbin "code_080043E8/gUnk_08004A0C.bin" + +gUnk_08004A16:: @ 08004A16 + .incbin "code_080043E8/gUnk_08004A16.bin" + +gUnk_08004A24:: @ 08004A24 + .incbin "code_080043E8/gUnk_08004A24.bin" + +gUnk_08004A32:: @ 08004A32 + .incbin "code_080043E8/gUnk_08004A32.bin" + +gUnk_08004A48:: @ 08004A48 + .incbin "code_080043E8/gUnk_08004A48.bin" + +gUnk_08004A72:: @ 08004A72 + .incbin "code_080043E8/gUnk_08004A72.bin" + +gUnk_08004A8C:: @ 08004A8C + .incbin "code_080043E8/gUnk_08004A8C.bin" + +gUnk_08004AA6:: @ 08004AA6 + .incbin "code_080043E8/gUnk_08004AA6.bin" diff --git a/asm/src/code_08007CAC.s b/asm/src/code_08007CAC.s new file mode 100644 index 00000000..c457c0a2 --- /dev/null +++ b/asm/src/code_08007CAC.s @@ -0,0 +1,52 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + +gUnk_08007CAC:: @ 08007CAC + .incbin "code_080043E8/gUnk_08007CAC.bin" +.ifdef DEMO_JP +@ TODO only one byte differs + .incbin "code_080043E8/gUnk_08007CAC_1_DEMO_JP.bin" +.else +.ifdef DEMO_USA +@ TODO only one byte differs + .incbin "code_080043E8/gUnk_08007CAC_2_DEMO_USA.bin" +.else +.ifdef JP +@ TODO only one byte differs + .incbin "code_080043E8/gUnk_08007CAC_3_JP.bin" +.else +.ifdef EU +@ TODO only two bytes differ + .incbin "code_080043E8/gUnk_08007CAC_4_EU.bin" +.else + .incbin "code_080043E8/gUnk_08007CAC_5_USA.bin" +.endif +.endif +.endif +.endif + + non_word_aligned_thumb_func_start sub_08007DD6 +sub_08007DD6: @ 0x08007DD6 + push {lr} + bl sub_08007DE0 + adds r0, r3, #0 + pop {pc} + + thumb_func_start sub_08007DE0 +sub_08007DE0: @ 0x08007DE0 + subs r1, #4 +_08007DE2: + adds r1, #4 + ldrh r3, [r1] + cmp r3, #0 + beq _08007DF2 + cmp r0, r3 + bne _08007DE2 + ldrh r3, [r1, #2] + movs r2, #1 +_08007DF2: + bx lr diff --git a/asm/src/crt0.s b/asm/src/crt0.s new file mode 100644 index 00000000..2e3609b4 --- /dev/null +++ b/asm/src/crt0.s @@ -0,0 +1,49 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + .syntax unified + .text + + arm_func_start __start +__start: + b start_vector + +header: + .include "asm/rom_header.inc" + +start_vector: + mov r0, #0x12 + msr cpsr_fc, r0 + ldr sp, sp_irq + mov r0, #0x1f + msr cpsr_fc, r0 + ldr sp, sp_usr + ldr r1, INTR_VECTOR_BUF + ldr r0, intr_main + str r0, [r1] +.ifdef EU + ldr r1, unk_function + mov lr, pc + bx r1 +.else +.ifdef DEMO_JP + ldr r1, unk_function + mov lr, pc + bx r1 +.endif +.endif + ldr r1, =AgbMain + mov lr, pc + bx r1 +_080000F0: + b start_vector +sp_irq: .4byte irq_stack_begin +sp_usr: .4byte usr_stack_begin +INTR_VECTOR_BUF: .4byte 0x03007FFC +intr_main: .4byte ram_IntrMain +.ifdef EU +unk_function: .4byte fill_rq_stack +.else +.ifdef DEMO_JP +unk_function: .4byte fill_rq_stack +.endif +.endif diff --git a/asm/src/enemy.s b/asm/src/enemy.s new file mode 100644 index 00000000..4bada3c6 --- /dev/null +++ b/asm/src/enemy.s @@ -0,0 +1,250 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start EnemyUpdate +EnemyUpdate: @ 0x080011C4 + mov r3, lr + push {r3, r4} + adds r4, r0, #0 + ldrb r2, [r0, #0xc] + cmp r2, #0 + bne _080011DC + bl EnemyInit + cmp r0, #0 + bne _080011EA + bl DeleteThisEntity +_080011DC: + bl EntityIsDeleted + cmp r0, #0 + bne _0800120A + adds r0, r4, #0 + bl sub_080028E0 +_080011EA: + adds r0, r4, #0 + movs r1, #0x6d + ldrb r1, [r0, r1] + lsrs r1, r1, #5 + bhs _0800120A + ldrb r1, [r0, #9] + lsls r1, r1, #2 + ldr r2, _08001358 @ =gEnemyFunctions + ldr r1, [r2, r1] + bl _call_via_r1 + movs r1, #0x41 + movs r3, #0x7f + ldrb r2, [r4, r1] + ands r2, r3 + strb r2, [r4, r1] +_0800120A: + adds r0, r4, #0 + bl DrawEntity + pop {r3, r4} + bx r3 + + thumb_func_start sub_08001214 +sub_08001214: @ 0x08001214 + movs r3, #0x3a + ldrb r1, [r0, r3] + movs r2, #1 + tst r1, r2 + bne _08001230 + orrs r1, r2 + strb r2, [r0, r3] + movs r1, #1 + movs r2, #0x5a + ldrb r2, [r0, r2] + lsrs r2, r2, #7 + blo _0800122E + movs r1, #0x20 +_0800122E: + strb r1, [r0, #0xe] +_08001230: + ldrb r1, [r0, #0xe] + subs r1, #1 + beq _0800123E + strb r1, [r0, #0xe] + movs r1, #4 + ldr r3, _0800135C @ =UpdateAnimationVariableFrames + bx r3 +_0800123E: + ldr r3, _08001360 @ =CreateItemOnGround + bx r3 + + non_word_aligned_thumb_func_start GenericConfused +GenericConfused: @ 0x08001242 + push {lr} + movs r1, #0x43 + ldrb r2, [r0, r1] + subs r2, #1 + strb r2, [r0, r1] + cmp r2, #0x3c + bhs _08001282 + movs r3, #3 + ands r3, r2 + add r1, pc, #0x34 + ldrsb r1, [r1, r3] + movs r3, #0x62 + strb r1, [r0, r3] + cmp r2, #0 + bne _08001282 + movs r1, #0x68 + ldr r1, [r0, r1] + cmp r1, #0 + beq _08001282 + ldrb r2, [r1, #8] + cmp r2, #6 + bne _08001282 + ldrb r2, [r1, #9] + cmp r2, #0xf + bne _08001282 + ldrb r2, [r1, #0xa] + cmp r2, #0x1c + bne _08001282 + push {r0} + bl sub_0804AA1C + pop {r0} +_08001282: + ldr r1, _08001364 @ =0x00001800 + bl GravityUpdate + pop {pc} + .align 2, 0 +_0800128C: + .byte 0x00, 0x01, 0x00, 0xFF + + thumb_func_start sub_08001290 +sub_08001290: @ 0x08001290 + cmp r1, #0 + beq _0800129C + ldr r2, _08001368 @ =gUnk_080012C8 + lsls r1, r1, #2 + ldr r1, [r2, r1] + bx r1 +_0800129C: + bx lr + + @ r0: Entity* + @ r1: Function* array + non_word_aligned_thumb_func_start EnemyFunctionHandler +EnemyFunctionHandler: @ 0x0800129E + mov r3, lr + push {r3, r4, r5} + adds r4, r0, #0 + adds r5, r1, #0 + bl sub_080012DC + cmp r0, #0 + beq _080012B2 + ldr r1, _0800136C @ =gUnk_080012C8 + b _080012BA +_080012B2: + adds r0, r4, #0 + bl GetNextFunction + adds r1, r5, #0 +_080012BA: + lsls r0, r0, #2 + ldr r1, [r1, r0] + adds r0, r4, #0 + pop {r3, r4, r5} + mov lr, r3 + bx r1 + .align 2, 0 + +gUnk_080012C8:: + .4byte 0x00000000 +_080012CC: .4byte sub_08001214 +_080012D0: .4byte sub_080043A8 +_080012D4: .4byte CreateChestSpawner +_080012D8: .4byte sub_080043B0 + + thumb_func_start sub_080012DC +sub_080012DC: @ 0x080012DC + push {r4, r5, lr} + adds r4, r0, #0 + movs r5, #0x3a + ldrb r1, [r4, r5] + lsrs r1, r1, #3 + bhs _08001302 + bl sub_080043E8 + cmp r0, #4 + beq _08001302 + cmp r0, #0 + bne _08001306 + ldrb r1, [r4, r5] + lsrs r1, r1, #1 + blo _08001302 + ldrb r1, [r4, #0x10] + movs r2, #0x80 + orrs r1, r2 + strb r1, [r4, #0x10] +_08001302: + movs r0, #0 + pop {r4, r5, pc} +_08001306: + cmp r0, #1 + beq _08001316 + movs r1, #1 + strb r1, [r4, #0xe] + ldrb r2, [r4, r5] + movs r1, #1 + orrs r1, r2 + strb r1, [r4, r5] +_08001316: + pop {r4, r5, pc} + + thumb_func_start sub_08001318 +sub_08001318: @ 0x08001318 + movs r1, #0x36 + ldrsh r1, [r0, r1] + cmp r1, #0 + bpl GenericKnockback + movs r2, #0xff + strb r2, [r0, #0x15] + + thumb_func_start GenericKnockback +GenericKnockback: @ 0x08001324 + ldr r3, _08001370 @ =Knockback1 + bx r3 + + thumb_func_start GenericKnockback2 +GenericKnockback2: @ 0x08001328 + ldr r3, _08001374 @ =Knockback2 + bx r3 + + thumb_func_start sub_0800132C +sub_0800132C: @ 0x0800132C + movs r2, #0x38 + ldrb r3, [r1, r2] + ldrb r2, [r0, r2] + ands r2, r3 + beq _08001352 + ldrh r2, [r0, #0x2e] + ldrh r3, [r1, #0x2e] + subs r2, r2, r3 + adds r2, #8 + cmp r2, #0x11 + bhs _0800134E + ldrh r2, [r0, #0x32] + ldrh r3, [r1, #0x32] + subs r2, r2, r3 + adds r2, #8 + cmp r2, #0x11 + blo _08001352 +_0800134E: + ldr r3, _08001378 @ =GetFacingDirection + bx r3 +_08001352: + movs r0, #0xff + bx lr + .align 2, 0 +_08001358: .4byte gEnemyFunctions +_0800135C: .4byte UpdateAnimationVariableFrames +_08001360: .4byte CreateItemOnGround +_08001364: .4byte 0x00001800 +_08001368: .4byte gUnk_080012C8 +_0800136C: .4byte gUnk_080012C8 +_08001370: .4byte Knockback1 +_08001374: .4byte Knockback2 +_08001378: .4byte GetFacingDirection diff --git a/asm/src/intr.s b/asm/src/intr.s new file mode 100644 index 00000000..4aea95fc --- /dev/null +++ b/asm/src/intr.s @@ -0,0 +1,1947 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + .code 16 + +.global RAMFUNCS_BASE +RAMFUNCS_BASE:: + +sub_080B197C:: @ 0x080B197C + push {r4, r5, r6} + ldr r2, _080B19C0 @ =gRoomControls + ldrh r3, [r2, #0xa] + ldrh r4, [r2, #6] + subs r3, r3, r4 + ldrh r4, [r2, #0xc] + ldrh r2, [r2, #8] + subs r4, r4, r2 + adds r5, r4, #0 + lsrs r3, r3, #4 + lsrs r4, r4, #4 + lsls r4, r4, #7 + adds r3, r3, r4 + lsls r3, r3, #2 + adds r0, r0, r3 + subs r1, #0x40 + ldr r2, _080B19C4 @ =0x80000020 + ldr r3, _080B19C8 @ =0x040000D4 + movs r4, #1 + lsls r4, r4, #8 + movs r6, #0x17 + cmp r5, #8 + bhs _080B19AE + stm r3!, {r0, r1, r2} + b _080B19B4 +_080B19AE: + subs r0, r0, r4 +_080B19B0: + stm r3!, {r0, r1, r2} + adds r0, r0, r4 +_080B19B4: + subs r3, #0xc + adds r1, #0x40 + subs r6, #1 + bne _080B19B0 + pop {r4, r5, r6} + bx lr + .align 2, 0 +_080B19C0: .4byte gRoomControls +_080B19C4: .4byte 0x80000020 +_080B19C8: .4byte 0x040000D4 + +@ r0 = entity* + arm_func_start arm_GetTileAtEntityPos +arm_GetTileAtEntityPos: @ 0x080B19CC + ldrb r2, [r0, #0x38] @ obj layer + ldrh r1, [r0, #0x32] @ obj y + ldrh r0, [r0, #0x2e] @ obj x + ldr ip, _080B1C10 @ =gRoomControls +arm_sub_080B19D8: + ldrh r3, [ip, #6] + sub r0, r0, r3 @ obj x - room x + ldrh r3, [ip, #8] + sub r1, r1, r3 @ obj y - room y +arm_sub_080B19EC: + lsl r0, r0, #0x16 + lsr r0, r0, #0x1a + lsl r1, r1, #0x16 + lsr r1, r1, #0x1a +arm_sub_080B19FC: + add r0, r0, r1, lsl #6 + mov r1, r2 +arm_sub_080B1A04: + ldr r2, _080B1C14 @ =gUnk_08000258 + b _080B1A64 + + arm_func_start arm_sub_080B1A0C +arm_sub_080B1A0C: @ 0x080B1A0C + ldrh r3, [r0, #0x2e] + add r3, r3, r1 + ldrh r1, [r0, #0x32] + add r1, r1, r2 + ldrb r2, [r0, #0x38] + mov r0, r3 + b arm_GetTileTypeByPos +arm_GetTileTypeByEntity: + ldrb r2, [r0, #0x38] + ldrh r1, [r0, #0x32] + ldrh r0, [r0, #0x2e] +arm_GetTileTypeByPos: + ldr ip, _080B1C18 @ =gRoomControls + ldrh r3, [ip, #6] + sub r0, r0, r3 + ldrh r3, [ip, #8] + sub r1, r1, r3 +arm_sub_080B1A48: + lsl r0, r0, #0x16 + lsr r0, r0, #0x1a + lsl r1, r1, #0x16 + lsr r1, r1, #0x1a +arm_sub_080B1A58: + add r0, r0, r1, lsl #6 + mov r1, r2 + + arm_func_start arm_GetTileType +arm_GetTileType: @ 0x080B1A60 + ldr r2, _080B1C1C @ =gUnk_08000228 +_080B1A64: + add r2, r2, r1, lsl #3 + ldr r1, [r2] + lsl r0, r0, #1 + ldrh r0, [r1, r0] + cmp r0, #0x4000 @ return tile index is OOB + bxhs lr + ldr r1, [r2, #4] + lsl r0, r0, #1 + ldrh r0, [r1, r0] + bx lr + + arm_func_start arm_sub_080B1A8C +arm_sub_080B1A8C: @ 0x080B1A8C + ldrh r3, [r0, #0x2e] + add r3, r3, r1 + ldrh r1, [r0, #0x32] + add r1, r1, r2 + ldrb r2, [r0, #0x38] + mov r0, r3 + b arm_sub_080B1AB4 +arm_sub_080B1AA8: + ldrb r2, [r0, #0x38] + ldrh r1, [r0, #0x32] + ldrh r0, [r0, #0x2e] +arm_sub_080B1AB4: + ldr ip, _080B1C20 @ =gRoomControls + ldrh r3, [ip, #6] + sub r0, r0, r3 + ldrh r3, [ip, #8] + sub r1, r1, r3 +arm_sub_080B1AC8: + lsl r0, r0, #0x16 + lsr r0, r0, #0x1a + lsl r1, r1, #0x16 + lsr r1, r1, #0x1a +arm_sub_080B1AD8: + add r0, r0, r1, lsl #6 + mov r1, r2 +arm_sub_080B1AE0: + ldr r2, _080B1C24 @ =gUnk_08000278 + ldr r2, [r2, r1, lsl #2] + ldrb r0, [r2, r0] + bx lr + + arm_func_start arm_sub_080B1AF0 +arm_sub_080B1AF0: @ 0x080B1AF0 + ldrh r3, [r0, #0x2e] + add r3, r3, r1 + ldrh r1, [r0, #0x32] + add r1, r1, r2 + ldrb r2, [r0, #0x38] + mov r0, r3 + b arm_sub_080B1B18 +arm_sub_080B1B0C: + ldrb r2, [r0, #0x38] + ldrh r1, [r0, #0x32] + ldrh r0, [r0, #0x2e] +arm_sub_080B1B18: + ldr ip, _080B1C28 @ =gRoomControls + ldrh r3, [ip, #6] + sub r0, r0, r3 + ldrh r3, [ip, #8] + sub r1, r1, r3 +arm_sub_080B1B2C: + lsl r0, r0, #0x16 + lsr r0, r0, #0x1a + lsl r1, r1, #0x16 + lsr r1, r1, #0x1a +arm_sub_080B1B3C: + add r0, r0, r1, lsl #6 + mov r1, r2 +arm_sub_080B1B44: + ldr r2, _080B1C2C @ =gUnk_08000248 + ldr r1, [r2, r1, lsl #2] + ldrb r0, [r1, r0] + bx lr + + arm_func_start arm_sub_080B1B54 +arm_sub_080B1B54: @ 0x080B1B54 + lsls r0, r0, #0x12 + ldrlo r1, _080B1C30 @ =gUnk_080B37A0 + ldrhs r1, _080B1C34 @ =gUnk_080B7910 + ldrb r0, [r1, r0, lsr #18] + bx lr + + arm_func_start arm_sub_080B1B68 +arm_sub_080B1B68: @ 0x080B1B68 + lsrs r2, r0, #0xe + bxne lr + ldr r2, _080B1C38 @ =gUnk_0800022C + ldr r1, [r2, r1, lsl #3] + lsl r0, r0, #1 + ldrh r0, [r1, r0] + bx lr + + arm_func_start arm_sub_080B1B84 +arm_sub_080B1B84: @ 0x080B1B84 + mov ip, lr + bl arm_GetTileType + lsls r0, r0, #0x12 + ldrlo r1, _080B1C3C @ =gUnk_08000360 + ldrhs r1, _080B1C40 @ =gUnk_080B7A3E + lsr r0, r0, #0x11 + ldrh r0, [r1, r0] + bx ip + + arm_func_start arm_sub_080B1BA4 +arm_sub_080B1BA4: @ 0x080B1BA4 + mov ip, lr + mov r3, r2 + bl arm_GetTileType + lsls r0, r0, #0x12 + ldrlo r1, _080B1C44 @ =gUnk_08000360 + ldrhs r1, _080B1C48 @ =gUnk_080B7A3E + lsr r0, r0, #0x11 + ldrh r0, [r1, r0] + and r0, r0, r3 + bx ip + + arm_func_start sub_080B1BCC +sub_080B1BCC: @ 0x080B1BCC + ldrh r3, [r0, #0x2e] + add r1, r1, r3 + ldrh r3, [r0, #0x32] + add r2, r2, r3 + ldr ip, _080B1C4C @ =gRoomControls + ldrh r3, [ip, #6] + sub r1, r1, r3 + ldrh r3, [ip, #8] + sub r2, r2, r3 + and r1, r1, #0x3f0 + and r2, r2, #0x3f0 + add r1, r1, r2, lsl #6 + ldr r2, _080B1C50 @ =gUnk_08000278 + ldrb r3, [r0, #0x38] + ldr r2, [r2, r3, lsl #2] + ldrb r0, [r2, r1, lsr #4] + bx lr + .align 2, 0 +_080B1C10: .4byte gRoomControls +_080B1C14: .4byte gUnk_08000258 +_080B1C18: .4byte gRoomControls +_080B1C1C: .4byte gUnk_08000228 +_080B1C20: .4byte gRoomControls +_080B1C24: .4byte gUnk_08000278 +_080B1C28: .4byte gRoomControls +_080B1C2C: .4byte gUnk_08000248 +_080B1C30: .4byte gUnk_080B37A0 +_080B1C34: .4byte gUnk_080B7910 +_080B1C38: .4byte gUnk_0800022C +_080B1C3C: .4byte gUnk_08000360 +_080B1C40: .4byte gUnk_080B7A3E +_080B1C44: .4byte gUnk_08000360 +_080B1C48: .4byte gUnk_080B7A3E +_080B1C4C: .4byte gRoomControls +_080B1C50: .4byte gUnk_08000278 + + arm_func_start UpdateCollision +UpdateCollision: @ 0x080B1C54 + @ r0 : Entity* this + ldrb r1, [r0, #0x10] + ands r1, r1, #0x80 @ disable collision flag + bxeq lr + ldr r2, _080B200C @ =gCollidableList + ldr r3, _080B2010 @ =gCollidableCount + ldrb r1, [r3] + str r0, [r2, r1, lsl #2] + add r1, r1, #1 + strb r1, [r3] + bx lr + + arm_func_start arm_CollideAll +arm_CollideAll: @ 0x080B1C7C + push {r4, r5, r6, r7, r8, sb, sl, lr} + add r0, pc, #0x104 @ =_080B1D8C + ldm r0, {r8, sb, sl} + ldrb sl, [sl] + cmp sl, #0 + beq _080B1D84 + ldr r8, [r8] + mov r7, r8 +_080B1C9C: + ldr r4, [r8, #8] + ldrb r0, [r4, #0x10] + ands r0, r0, #0x80 + beq _080B1D78 + ldrb r0, [r4, #0x3c] + and r0, r0, #7 + mov r1, #1 + lsl r6, r1, r0 + ldrb r3, [r4, #0x3c] + ldrb r2, [r4, #0x3d] + mov ip, sl +_080B1CC8: + subs ip, ip, #1 + bmi _080B1D78 + ldr r5, [sb, ip, lsl #2] + cmp r4, r5 + beq _080B1CC8 + ldr r0, [r5, #0x3b] + ands r0, r0, r6 + beq _080B1CC8 + ldrb r0, [r5, #0x10] + ands r0, r0, #0x80 + beq _080B1CC8 + ldrb r0, [r4, #0x38] + ldrb r1, [r5, #0x38] + ands r0, r0, r1 + beq _080B1CC8 + ldrb r0, [r5, #0x3c] + orr r0, r0, r3 + lsrs r0, r0, #7 + bhs _080B1D20 + ldrb r0, [r5, #0x3d] + orrs r0, r0, r2 + bne _080B1CC8 +_080B1D20: + bl arm_CalcCollision + cmp r0, #0 + beq _080B1CC8 + ldrb r3, [r4, #0x3c] + ldrb r0, [r4, #0x3d] + ldrb r1, [r4, #0x43] + orr r2, r0, r1 + ldrb r0, [r5, #0x41] + ands r0, r0, #0x80 + bne _080B1D58 + str r4, [r5, #0x4c] + ldrb r0, [r4, #0x40] + orr r0, r0, #0x80 + strb r0, [r5, #0x41] +_080B1D58: + ldrb r0, [r4, #0x41] + ands r0, r0, #0x80 + bne _080B1CC8 + str r5, [r4, #0x4c] + ldrb r0, [r5, #0x40] + orr r0, r0, #0x80 + strb r0, [r4, #0x41] + b _080B1CC8 +_080B1D78: + ldr r8, [r8, #4] + cmp r8, r7 + bne _080B1C9C +_080B1D84: + pop {r4, r5, r6, r7, r8, sb, sl, lr} + bx lr +_080B1D8C: .4byte gUnk_02018EA0 +_080B1D90: .4byte gCollidableList +_080B1D94: .4byte gCollidableCount + + arm_func_start arm_CalcCollision +arm_CalcCollision: @ 0x080B1D98 + @ r6 = this, r7 = other + + push {r2, r3, r6, r7, r8, sb, ip, lr} + ldr r6, [r4, #0x48] + ldr r7, [r5, #0x48] + ldrh r0, [r4, #0x2e] + ldrh r1, [r5, #0x2e] + sub r0, r0, r1 + ldrsb r1, [r6] + add r0, r0, r1 + ldrsb r1, [r7] + sub r0, r0, r1 + ldrb r1, [r6, #6] + ldrb r2, [r7, #6] + add r1, r1, r2 + add r2, r0, r1 + cmp r2, r1, lsl #1 + bhi _080B1F28 + ldrh r1, [r4, #0x32] + ldrh r2, [r5, #0x32] + sub r1, r1, r2 + ldrsb r2, [r6, #1] + add r1, r1, r2 + ldrsb r2, [r7, #1] + sub r1, r1, r2 + ldrb r2, [r6, #7] + ldrb r3, [r7, #7] + add r2, r2, r3 + add r3, r1, r2 + cmp r3, r2, lsl #1 + bhi _080B1F28 + mov r2, #5 + mov r3, #5 + ldr r8, [r4, #0x3c] + ands r8, r8, #0x10 + ldrbne r2, [r6, #8] + ldr r8, [r5, #0x3c] + ands r8, r8, #0x10 + ldrbne r3, [r7, #8] + add r2, r2, r3 + ldrsh r8, [r4, #0x36] + ldrsh sb, [r5, #0x36] + sub r8, r8, sb + add r8, r2, r8 + cmp r8, r2, lsl #1 + bhi _080B1F28 + ldrb r2, [r4, #0x3c] + and r2, r2, #0x20 + lsr r2, r2, #3 + ldrb r3, [r5, #0x3c] + and r3, r3, #0x20 + adds r2, r2, r3, lsr #2 + beq _080B1E74 + add r3, pc, #0x180 @ =_080B1FEC + ldr r2, [r3, r2] + mov lr, pc + bx r2 +_080B1E74: + mov r2, #0 + mov ip, #0 + bl arm_CalcCollisionDirection + mov r6, r0 + ldrb r1, [r5, #0x3f] + mov r0, #0x22 + mul r1, r0, r1 + ldrb r0, [r4, #0x40] + add r0, r0, r1 + mov r1, #0xc + mul r2, r0, r1 + ldr r1, _080B2014 @ =gCollisionMtx + add r3, r2, r1 + mov r1, #0 + ldrb r0, [r3] + cmp r0, #0xff + ldrheq r1, [r3, #2] + ldr r0, _080B2018 @ =gUnk_080B3744 + ldr r7, [r0, r1, lsl #2] + mov r0, r4 + mov r1, r5 + mov r2, r6 + mov lr, pc + bx r7 +_080B1ED4: + cmp r0, #0 + beq _080B1F20 + cmp r0, #2 + beq _080B1F1C + ldrb r0, [r4, #0x3c] + and r0, r0, #0x80 + lsr r0, r0, #5 + ldrb r1, [r5, #0x3c] + and r1, r1, #0x80 + lsr r1, r1, #4 + add r0, r0, r1 + add r1, pc, #0xF4 @ =_080B1FFC + ldr r0, [r1, r0] + mov lr, pc + bx r0 +_080B1F10: + strb r6, [r5, #0x3e] + eor r6, r6, #0x10 + strb r6, [r4, #0x3e] +_080B1F1C: + mov r0, #1 +_080B1F20: + pop {r2, r3, r6, r7, r8, sb, ip, lr} + bx lr +_080B1F28: + mov r0, #0 + b _080B1F20 + + arm_func_start arm_sub_080B1F30 +arm_sub_080B1F30: @ 0x080B1F30 + ldrh r0, [r4, #0x2e] + ldrh r1, [r5, #0x2e] + sub r0, r0, r1 + ldrsb r1, [r7] + sub r0, r0, r1 + ldrh r1, [r4, #0x32] + ldrh r2, [r5, #0x32] + sub r1, r1, r2 + ldrsb r2, [r7, #1] + sub r1, r1, r2 + bx lr + + arm_func_start arm_sub_080B1F5C +arm_sub_080B1F5C: @ 0x080B1F5C + ldrh r0, [r4, #0x2e] + ldrh r1, [r5, #0x2e] + sub r0, r0, r1 + ldrsb r1, [r6] + add r0, r0, r1 + ldrh r1, [r4, #0x32] + ldrh r2, [r5, #0x32] + sub r1, r1, r2 + ldrsb r2, [r6, #1] + add r1, r1, r2 + bx lr + + arm_func_start arm_sub_080B1F88 +arm_sub_080B1F88: @ 0x080B1F88 + ldrh r0, [r4, #0x2e] + ldrh r1, [r5, #0x2e] + sub r0, r0, r1 + ldrh r1, [r4, #0x32] + ldrh r2, [r5, #0x32] + sub r1, r1, r2 + bx lr + + arm_func_start arm_sub_080B1FA4 +arm_sub_080B1FA4: @ 0x080B1FA4 + ldrb r0, [r5, #0x15] + eor r0, r0, #0x10 + b _080B1FB4 +_080B1FB0: + ldrb r0, [r4, #0x15] +_080B1FB4: + sub r1, r0, #8 + and r1, r1, #0x1f + sub r1, r6, r1 + and r1, r1, #0x1f + cmp r1, #0x11 + bxlo lr + sub r0, r6, r0 + sub r0, r0, #8 + and r0, r0, #0x1f + sub r6, r6, r0, lsl #1 + and r6, r6, #0x1f + bx lr + + arm_func_start arm_sub_080B1FE4 +arm_sub_080B1FE4: @ 0x080B1FE4 + ldrb r6, [r4, #0x15] +_080B1FE8: + bx lr +_080B1FEC: .4byte ram_sub_080B1FE8 +_080B1FF0: .4byte ram_sub_080B1F30 +_080B1FF4: .4byte ram_sub_080B1F5C +_080B1FF8: .4byte ram_sub_080B1F88 +_080B1FFC: .4byte ram_sub_080B1FE8 +_080B2000: .4byte ram_sub_080B1FB0 +_080B2004: .4byte ram_sub_080B1FA4 +_080B2008: .4byte ram_sub_080B1FE4 +_080B200C: .4byte gCollidableList +_080B2010: .4byte gCollidableCount +_080B2014: .4byte gCollisionMtx +_080B2018: .4byte gUnk_080B3744 + + arm_func_start IntrMain +IntrMain: + mov r3, #0x4000000 + add r3, r3, #0x200 + ldr r2, [r3] @ lo 16: interrupt_enable, hi 16: interrupt_request + ldrh r1, [r3, #8] @ interrupt master enable + mrs r0, spsr + push {r0, r1, r2, r3, lr} + and r1, r2, r2, lsr #16 + ands r0, r1, #0x2000 @ external irq + bne _080B20D4 + mov ip, #4 + ands r0, r1, #0x80 @ serial comm + bne _080B2074 + mov ip, #0xc + ands r0, r1, #4 @ vcount + bne _080B2074 + mov ip, #0x10 + ands r0, r1, #1 @ vblank + bne _080B2074 + mov ip, #0x14 + ands r0, r1, #0x40 @ timer 3 overflow + bne _080B2074 + mov ip, #0 +_080B2074: + strh r0, [r3, #2] + bic r2, r2, r0 + ldr r1, _080B20E4 @ =0x0000208C + and r1, r1, r2 + strh r1, [r3] + mrs r3, apsr + bic r3, r3, #0xdf + orr r3, r3, #0x1f + msr cpsr_fc, r3 + ldr r1, _080B20E8 @ =ram_gUnk_080B2A70 + ldr r0, [r1, ip] + stmdb sp!, {lr} + mov lr, pc + bx r0 + + arm_func_start sub_080B20AC +sub_080B20AC: @ 0x080B20AC + ldm sp!, {lr} + mrs r3, apsr + bic r3, r3, #0xdf + orr r3, r3, #0x92 + msr cpsr_fc, r3 + pop {r0, r1, r2, r3, lr} + strh r2, [r3] + strh r1, [r3, #8] + msr spsr_fc, r0 + bx lr +_080B20D4: + mov r0, #0 + strh r0, [r3, #8] + strb r0, [r3, #-0x17c] +_080B20E0: + b _080B20E0 + .align 2, 0 +_080B20E4: .4byte 0x0000208C +_080B20E8: .4byte ram_gUnk_080B2A70 + + arm_func_start arm_CheckBits +arm_CheckBits: @ 0x080B20EC + add r3, r0, r1, lsr #3 + and r1, r1, #7 + ldr r0, _080B21A4 @ =0x01010101 + lsl r1, r0, r1 +_080B20FC: + ldrb r0, [r3] + ands r0, r0, r1 + bxeq lr + lsls r1, r1, #1 + addhs r1, r1, #1 + addhs r3, r3, #1 + subs r2, r2, #1 + bne _080B20FC + mov r0, #1 + bx lr + + arm_func_start arm_MakeFadeBuff256 +arm_MakeFadeBuff256: @ 0x080B2124 + push {r4, r5, r6, r7, r8, sb, sl, fp} + mul r3, r2, r3 + mov r4, #0x400 + sub r2, r4, r2, lsl #2 + ldr r7, _080B21A8 @ =0x02000006 + ldrb r7, [r7] + ldr ip, _080B21AC @ =gUnk_08000F54 + add ip, ip, r7, lsl #4 + ldm ip, {r8, sb, sl} + mov r7, #0x3e + mov ip, #0x10 +_080B2150: + ldrh r6, [r0], #2 + lsl r6, r6, #1 + and r4, r7, r6 + mla r4, r2, r4, r3 + and r5, r7, r6, lsr #5 + mla r5, r2, r5, r3 + and r6, r7, r6, lsr #10 + mla r6, r2, r6, r3 + and r4, r7, r4, lsr #10 + and r5, r7, r5, lsr #10 + and r6, r7, r6, lsr #10 + ldrh r4, [r8, r4] + ldrh r5, [sb, r5] + ldrh r6, [sl, r6] + orr r4, r4, r5 + orr r4, r4, r6 + strh r4, [r1], #2 + subs ip, ip, #1 + bne _080B2150 + pop {r4, r5, r6, r7, r8, sb, sl, fp} + bx lr + .align 2, 0 +_080B21A4: .4byte 0x01010101 +_080B21A8: .4byte 0x02000000 + 6 @ brightness preference +_080B21AC: .4byte gUnk_08000F54 + +arm_ClearAndUpdateEntities: + ldr r11, _080B2270 @ =gUpdateContext + ldr r1, [r11] + ldm r1, {r7, r8, r9, r10} + ldr sp, [r11, #0xc] + ldr r8, [r11, #4] + ldr r0, [r11, #8] + add pc, pc, #0x60 @ =_080B2230 + +@ gUpdateContext { +@ void* chosen_table; +@ void* linked_list_top; +@ void* curr_entity; +@ void* restore_sp; +@ } + + arm_func_start arm_UpdateEntities +arm_UpdateEntities: @ 0x080B21B0 @ +@ UpdateEntities starts here + @ arg0 (r0) : 0 = entities, 1 = managers + ldr r1, _080B2274 @ =gUnk_080026A4 + add r1, r1, r0, lsl #4 + push {r4 - r11, lr} + ldr r11, _080B2278 @ =gUpdateContext + str r1, [r11, #0x0] + str sp, [r11, #0xc] + ldm r1, {r7, r8, r9, r10} +next_list: @ traverse entity linked list + add r8, r8, #8 + str r8, [r11, #4] + cmp r8, r9 + bhs lists_complete + ldr r4, [r8, #4] @ entity -> next +next_entity: + cmp r4, r8 + beq next_list + mov r0, #0 + str r0, [r7] + str r4, [r11, #8] + ldrb r1, [r4, #8] @ entity -> kind + ldr r1, [r10, r1, lsl #2] + mov r0, r4 + mov lr, pc + bx r1 @ call entity kind update function + ldr r0, [r11, #8] + cmp r0, r4 @ update collision if entity is still alive + bleq UpdateCollision +_080B2230: @ jumped here if ClearAndUpdateEntities + ldr r4, [r0, #4] + b next_entity +lists_complete: + mov r0, #0 + str r0, [r11, #8] + pop {r4 - r11, lr} + bx lr + +_080B2248:: +_080B2248: .4byte DeleteThisEntity @ 0x3005fbc +_080B224C: .4byte PlayerUpdate +_080B2250: .4byte DeleteThisEntity +_080B2254: .4byte EnemyUpdate +_080B2258: .4byte ProjectileUpdate +_080B225C: .4byte DeleteThisEntity +_080B2260: .4byte ObjectUpdate +_080B2264: .4byte NPCUpdate +_080B2268: .4byte ItemUpdate +_080B226C: .4byte ManagerUpdate + +_080B2270: .4byte gUpdateContext +_080B2274: .4byte gUnk_080026A4 +_080B2278: .4byte gUpdateContext + + arm_func_start arm_sub_080B227C +arm_sub_080B227C: @ 0x080B227C + push {r4, r5, r6, r7, r8, lr} + ldr r2, [r0, #0x48] + cmp r2, #0 + beq _080B236C + ldr r3, [r1, #0x48] + cmp r3, #0 + beq _080B236C + ldrh r4, [r1, #0x2e] + ldrsb r5, [r3] + add r4, r4, r5 + ldrh r5, [r0, #0x2e] + sub r4, r4, r5 + ldrsb r5, [r2] + sub r4, r4, r5 + ldrb r5, [r2, #6] + ldrb r6, [r3, #6] + add r5, r5, r6 + add r6, r4, r5 + lsl r7, r5, #1 + cmp r7, r6 + blo _080B236C + cmp r4, #0 + movpl ip, #8 + movmi ip, #0x18 + rsbmi r4, r4, #0 + sub r8, r5, r4 + ldrh r4, [r1, #0x32] + ldrsb r5, [r3, #1] + add r4, r4, r5 + ldrh r5, [r0, #0x32] + sub r4, r4, r5 + ldrsb r5, [r2, #1] + sub r4, r4, r5 + ldrb r2, [r2, #7] + ldrb r3, [r3, #7] + add r3, r2, r3 + add r5, r4, r3 + lsl r6, r3, #1 + cmp r6, r5 + blo _080B236C + cmp r4, #0 + movpl r2, #0x10 + movmi r2, #0 + rsbmi r4, r4, #0 + sub r7, r3, r4 + cmp r7, r8 + movhs r7, r8 + movhs r2, ip + cmp r7, #0 + beq _080B236C + cmp r7, #5 + movhs r7, #4 + mov r0, r1 + lsl r1, r7, #8 + ldr r3, _080B2378 @ =sub_080044AE + mov lr, pc + bx r3 +_080B2360: + pop {r4, r5, r6, r7, r8, lr} + mov r0, #1 + bx lr +_080B236C: + pop {r4, r5, r6, r7, r8, lr} + mov r0, #0 + bx lr + .align 2, 0 +_080B2378: .4byte sub_080044AE + + arm_func_start arm_CalcCollisionDirection +arm_CalcCollisionDirection: @ 0x080B237C + subs r2, r2, r0 + movpl r0, #0 + movmi r0, #0x20 + rsbmi r2, r2, #0 + subs r3, r1, ip + rsbmi r3, r3, #0 + addmi r0, r0, #0x10 + cmp r2, r3 + movhs r1, r3 + movhs r3, r2 + movhs r2, r1 + addhs r0, r0, #8 + lsl r2, r2, #3 + lsl r1, r3, #1 + cmp r2, r3 + addhs r0, r0, #1 + addhs r3, r3, r1 + cmp r2, r3 + addhs r0, r0, #1 + addhs r3, r3, r1 + cmp r2, r3 + addhs r0, r0, #1 + addhs r3, r3, r1 + cmp r2, r3 + addhs r0, r0, #1 + ldr r1, _080B23EC @ =gUnk_0800464E + ldrb r0, [r1, r0] + bx lr + .align 2, 0 +_080B23EC: .4byte gUnk_0800464E + + arm_func_start arm_DrawEntities +arm_DrawEntities: @ 0x080B23F0 +.ifdef EU + push {r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr fp, _080B2A30 @ =gOAMControls + ldrb r2, [fp, #3] + cmp r2, #0x80 + bhs _080B19C0EU + add r0, pc, #0x54 @ =_080B19C0 + str r0, [fp, #0x18] + str sp, [fp, #0x14] + ldrb r0, [fp, #0xf] + cmp r0, #0xff + bne _080B1984 + bl _080B1FBC +_080B1980: + mov r0, #0x0 +_080B1984: + ldr r1, _080B2154 @ =0x03006958 + ldr r1, [r1, r0, lsl #2] + str r1, [fp, #0x1c] + ldr r0, _080B2A34 @ =gUnk_081326EC + ldr r0, [r0] + bl sub_080B19C8 + ldr r0, _080B2A38 @ =gUnk_081326EC + ldr r0, [r0, #4] + bl sub_080B19C8 + ldr r0, _080B2A3C @ =gUnk_081326EC + ldr r0, [r0, #8] + bl sub_080B19C8 + ldr r0, _080B2A40 @ =gUnk_081326EC + ldr r0, [r0, #0xc] + bl sub_080B19C8 +_080B19C0EU: + pop {r4, r5, r6, r7, r8, sb, sl, fp, lr} + bx lr + + arm_func_start sub_080B19C8 +sub_080B19C8: @ 0x080B19C8 + ldrb r2, [r0] + cmp r2, #0 + bxeq lr + ldr r1, _080B2A44 @ =0x08131D3C + ldr r1, [r1, #0x10] + mov r2, #0 + strb r2, [r1] + stmdb sp!, {lr} + bl ResolveOamDrawPriority + bl sub_080B2534 + ldm sp!, {lr} + b _080B1C40EU +.else +.ifdef DEMO_JP @ TODO deduplicate same as EU + push {r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr fp, _080B2A30 @ =gOAMControls + ldrb r2, [fp, #3] + cmp r2, #0x80 + bhs _080B19C0EU + add r0, pc, #0x54 @ =_080B19C0 + str r0, [fp, #0x18] + str sp, [fp, #0x14] + ldrb r0, [fp, #0xf] + cmp r0, #0xff + bne _080B1984 + bl _080B1FBC +_080B1980: + mov r0, #0x0 +_080B1984: + ldr r1, _080B2154 @ =0x03006958 + ldr r1, [r1, r0, lsl #2] + str r1, [fp, #0x1c] + ldr r0, _080B2A34 @ =gUnk_081326EC + ldr r0, [r0] + bl sub_080B19C8 + ldr r0, _080B2A38 @ =gUnk_081326EC + ldr r0, [r0, #4] + bl sub_080B19C8 + ldr r0, _080B2A3C @ =gUnk_081326EC + ldr r0, [r0, #8] + bl sub_080B19C8 + ldr r0, _080B2A40 @ =gUnk_081326EC + ldr r0, [r0, #0xc] + bl sub_080B19C8 +_080B19C0EU: + pop {r4, r5, r6, r7, r8, sb, sl, fp, lr} + bx lr + + arm_func_start sub_080B19C8 +sub_080B19C8: @ 0x080B19C8 + ldrb r2, [r0] + cmp r2, #0 + bxeq lr + ldr r1, _080B2A44 @ =0x08131D3C + ldr r1, [r1, #0x10] + mov r2, #0 + strb r2, [r1] + stmdb sp!, {lr} + bl ResolveOamDrawPriority + bl sub_080B2534 + ldm sp!, {lr} + b _080B1C40EU +.else + push {r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr fp, _080B2A30 @ =gOAMControls + ldrb r2, [fp, #3] + cmp r2, #0x80 + bhs _080B2440 + add r0, pc, #0x34 @ =_080B2440 + str r0, [fp, #0x18] + str sp, [fp, #0x14] + ldr r0, _080B2A34 @ =gUnk_081326EC + ldr r0, [r0] + bl sub_080B2448 + ldr r0, _080B2A38 @ =gUnk_081326EC + ldr r0, [r0, #4] + bl sub_080B2448 + ldr r0, _080B2A3C @ =gUnk_081326EC + ldr r0, [r0, #8] + bl sub_080B2448 + ldr r0, _080B2A40 @ =gUnk_081326EC + ldr r0, [r0, #0xc] + bl sub_080B2448 +_080B2440: + pop {r4, r5, r6, r7, r8, sb, sl, fp, lr} + bx lr + + arm_func_start sub_080B2448 +sub_080B2448: @ 0x080B2448 + ldrb r2, [r0] + cmp r2, #0 + bxeq lr + ldr r1, _080B2A44 @ =gUnk_081326EC + ldr r1, [r1, #0x10] + mov r2, #0 + strb r2, [r1] + stmdb sp!, {lr} + bl ResolveOamDrawPriority + bl sub_080B2534 + ldm sp!, {lr} + b _080B26B4 +.endif +.endif + + arm_func_start ResolveOamDrawPriority +ResolveOamDrawPriority: @ 0x080B2478 + prio_a .req r8 + prio_b .req r5 + + mov sb, r0 + mov r1, r0 + ldrb r2, [r1], #4 + mov ip, r1 + sub sl, r2, #1 + add r2, r1, sl, lsl #2 + cmp sl, #0 + beq no_objs +_080B2498: + lsl r3, sl, #2 + mov r6, #0 +_080B24A0: + cmp r6, sl + bhs _080B2524 + sub r1, r2, r3 + sub r1, r1, r6, lsl #2 +_080B24B0: + cmp r1, ip + blo _080B251C +# sprite A + ldr r4, [r1] +# pos + ldr r8, [r4, #0x30] + add r8, #0x80000000 + lsr r8, #3 +# load priority bits, NOT so 0 = highest priority + ldrb r0, [r4, #0x29] + mvn r0, r0 + orr prio_a, r8, r0, lsl #29 + add r7, r1, r3 +next_sprite: + cmp r2, r7 + blo a_priority +# sprite B + ldr r5, [r7] + ldr r0, [r5, #0x30] + add r0, #0x80000000 + lsr r0, #3 + ldrb r5, [r5, #0x29] + mvn r5, r5 + orr prio_b, r0, r5, lsl #29 + cmp prio_a, prio_b + bhs a_priority + ldr r5, [r7], -r3 + str r5, [r7], r3, lsl #1 + b next_sprite +a_priority: + str r4, [r7, -r3]! + sub r1, r1, r3 + b _080B24B0 +_080B251C: + add r6, #1 + b _080B24A0 +_080B2524: + lsrs sl, #1 + bne _080B2498 +no_objs: + mov r0, sb + bx lr + + arm_func_start sub_080B2534 +sub_080B2534: @ 0x080B2534 + stmdb sp!, {lr} + mov r4, r0 + ldrb r5, [r4], #4 +_080B2540: + ldr r0, [r4], #4 + push {r4, r5} + bl sub_080B255C + pop {r4, r5} + subs r5, r5, #1 + bgt _080B2540 + ldm sp!, {pc} + + arm_func_start sub_080B255C +sub_080B255C: @ 0x080B255C +.ifdef EU + stmdb sp!, {lr} + mov r4, r0 + bl sub_080B299C + ldr r3, [fp, #0x1c] + mov lr, pc +.ifdef DEMO_JP + bx r3 +.else + bxne r3 +.endif + mov r5, #0 + strb r5, [fp, #0x12] + ldrsb r2, [r4, #0x29] + ands r2, r2, #8 + beq _080B1BB8 + ldrsh r3, [r4, #0x36] + cmp r3, #0 + bmi _080B1BA4 + mov r1, #0 + mov r2, #0 + bl sub_080B1BCC + ldrb r1, [r4, #0x18] + and r1, r1, #0x30 + mov r1, r1 + cmp r0, #0x19 + beq _080B1B98 + cmp r0, #0x2f + beq _080B1B64 + cmp r0, #0xf + bne _080B1BA4 + mov r5, #2 + strb r5, [fp, #0x12] + add r7, r7, r5 + ldrb r2, [fp, #1] + and r2, r2, #0x18 + add r2, r2, #0x80 + lsr r2, r2, #2 + b _080B1B74 +_080B1B64: + ldrb r2, [r4, #0x2e] + ldrb r3, [r4, #0x32] + eor r2, r2, r3 + and r2, r2, #6 +_080B1B74: + ldr r3, _080B2A48 @ =ram_0x80b2b58 + add r2, r1, r2, lsl #1 + ldr sl, [r3, r2] + push {r4, r8, sb} + mov r8, #0 + and sb, sb, #0xc00 + bl sub_080B2874 + pop {r4, r8, sb, lr} + b _080B2718 +_080B1B98: + mov r5, #2 + strb r5, [fp, #0x12] + add r7, r7, r5 +_080B1BA4: + stmdb sp!, {r4} + mov r0, r4 + bl _080B2718 + pop {r4, lr} + b _080B1BC0 +_080B1BB8: + ldm sp!, {lr} + b _080B2718 +_080B1BC0: + ldrsh r1, [r4, #0x36] + ldrb r0, [r4, #0x29] + tst r0, #0x10 + beq _080B1BD8 + cmp r1, #0 + bxpl lr +_080B1BD8: + tst r0, #0x20 + beq _080B1BEC + ldrb r0, [fp, #1] + tst r0, #1 + bxne lr +_080B1BEC: + mov r2, r7 + cmp r1, #0 + submi r2, r2, r1 + ldr r3, _080B2A4C @ =gUnk_081326EC + ldr r3, [r3, #0x10] + ldrb r0, [r3] + cmp r0, #0x40 + bxhs lr + add r0, r0, #1 + strb r0, [r3] + add r3, r3, r0, lsl #2 + lsr r0, sb, #0xa + and r0, r0, #3 + orr r0, r0, r2, lsl #6 + strh r0, [r3, #2] + ldrb r0, [r4, #0x18] + and r0, r0, #0x30 + lsr r0, r0, #4 + orr r0, r0, r6, lsl #6 + strh r0, [r3] + bx lr +_080B1C40EU: + ldr r4, _080B2A50 @ =gUnk_081326EC + ldr r4, [r4, #0x10] + ldrb r5, [r4] + cmp r5, #0 + bxeq lr + stmdb sp!, {lr} + add r4, r4, #4 +_080B1C5C: + ldrsh r0, [r4] + asr r6, r0, #6 + and r1, r0, #7 + ldr sl, _080B2A54 @ =ram_0x80b2bd8 + ldr sl, [sl, r1, lsl #2] + ldrsh r0, [r4, #2] + asr r7, r0, #6 + and r1, r0, #3 + lsl sb, r1, #0xa + mov r8, #0 + push {r4, r5} + bl sub_080B2874 + pop {r4, r5} + add r4, r4, #4 + subs r5, r5, #1 + bgt _080B1C5C + ldm sp!, {lr} + bx lr + +.else +.ifdef DEMO_JP @ TODO deduplicate nearly same as EU + stmdb sp!, {lr} + mov r4, r0 + bl sub_080B299C + ldr r3, [fp, #0x1c] + mov lr, pc +.ifdef DEMO_JP + bx r3 +.else + bxne r3 +.endif + mov r5, #0 + strb r5, [fp, #0x12] + ldrsb r2, [r4, #0x29] + ands r2, r2, #8 + beq _080B1BB8 + ldrsh r3, [r4, #0x36] + cmp r3, #0 + bmi _080B1BA4 + mov r1, #0 + mov r2, #0 + bl sub_080B1BCC + ldrb r1, [r4, #0x18] + and r1, r1, #0x30 + mov r1, r1 + cmp r0, #0x19 + beq _080B1B98 + cmp r0, #0x2f + beq _080B1B64 + cmp r0, #0xf + bne _080B1BA4 + mov r5, #2 + strb r5, [fp, #0x12] + add r7, r7, r5 + ldrb r2, [fp, #1] + and r2, r2, #0x18 + add r2, r2, #0x80 + lsr r2, r2, #2 + b _080B1B74 +_080B1B64: + ldrb r2, [r4, #0x2e] + ldrb r3, [r4, #0x32] + eor r2, r2, r3 + and r2, r2, #6 +_080B1B74: + ldr r3, _080B2A48 @ =ram_0x80b2b58 + add r2, r1, r2, lsl #1 + ldr sl, [r3, r2] + push {r4, r8, sb} + mov r8, #0 + and sb, sb, #0xc00 + bl sub_080B2874 + pop {r4, r8, sb, lr} + b _080B2718 +_080B1B98: + mov r5, #2 + strb r5, [fp, #0x12] + add r7, r7, r5 +_080B1BA4: + stmdb sp!, {r4} + mov r0, r4 + bl _080B2718 + pop {r4, lr} + b _080B1BC0 +_080B1BB8: + ldm sp!, {lr} + b _080B2718 +_080B1BC0: + ldrsh r1, [r4, #0x36] + ldrb r0, [r4, #0x29] + tst r0, #0x10 + beq _080B1BD8 + cmp r1, #0 + bxpl lr +_080B1BD8: + tst r0, #0x20 + beq _080B1BEC + ldrb r0, [fp, #1] + tst r0, #1 + bxne lr +_080B1BEC: + mov r2, r7 + cmp r1, #0 + submi r2, r2, r1 + ldr r3, _080B2A4C @ =gUnk_081326EC + ldr r3, [r3, #0x10] + ldrb r0, [r3] + cmp r0, #0x40 + bxhs lr + add r0, r0, #1 + strb r0, [r3] + add r3, r3, r0, lsl #2 + lsr r0, sb, #0xa + and r0, r0, #3 + orr r0, r0, r2, lsl #6 + strh r0, [r3, #2] + ldrb r0, [r4, #0x18] + and r0, r0, #0x30 + lsr r0, r0, #4 + orr r0, r0, r6, lsl #6 + strh r0, [r3] + bx lr +_080B1C40EU: + ldr r4, _080B2A50 @ =gUnk_081326EC + ldr r4, [r4, #0x10] + ldrb r5, [r4] + cmp r5, #0 + bxeq lr + stmdb sp!, {lr} + add r4, r4, #4 +_080B1C5C: + ldrsh r0, [r4] + asr r6, r0, #6 + and r1, r0, #7 + ldr sl, _080B2A54 @ =ram_0x80b2bd8 + ldr sl, [sl, r1, lsl #2] + ldrsh r0, [r4, #2] + asr r7, r0, #6 + and r1, r0, #3 + lsl sb, r1, #0xa + mov r8, #0 + push {r4, r5} + bl sub_080B2874 + pop {r4, r5} + add r4, r4, #4 + subs r5, r5, #1 + bgt _080B1C5C + ldm sp!, {lr} + bx lr + +.else + stmdb sp!, {lr} + mov r4, r0 + bl sub_080B299C + mov r5, #0 + strb r5, [fp, #0x12] + ldrsb r2, [r4, #0x29] + ands r2, r2, #8 + beq _080B262C + ldrsh r3, [r4, #0x36] + cmp r3, #0 + bmi _080B2618 + mov r1, #0 + mov r2, #0 + bl sub_080B1BCC + ldrb r1, [r4, #0x18] + and r1, r1, #0x30 + mov r1, r1 + cmp r0, #0x19 + beq _080B260C + cmp r0, #0x2f + beq _080B25D8 + cmp r0, #0xf + bne _080B2618 + mov r5, #2 + strb r5, [fp, #0x12] + add r7, r7, r5 + ldrb r2, [fp, #1] + and r2, r2, #0x18 + add r2, r2, #0x80 + lsr r2, r2, #2 + b _080B25E8 +_080B25D8: + ldrb r2, [r4, #0x2e] + ldrb r3, [r4, #0x32] + eor r2, r2, r3 + and r2, r2, #6 +_080B25E8: + ldr r3, _080B2A48 @ =ram_0x80b2b58 + add r2, r1, r2, lsl #1 + ldr sl, [r3, r2] + push {r4, r8, sb} + mov r8, #0 + and sb, sb, #0xc00 + bl sub_080B2874 + pop {r4, r8, sb, lr} + b _080B2718 +_080B260C: + mov r5, #2 + strb r5, [fp, #0x12] + add r7, r7, r5 +_080B2618: + stmdb sp!, {r4} + mov r0, r4 + bl _080B2718 + pop {r4, lr} + b _080B2634 +_080B262C: + ldm sp!, {lr} + b _080B2718 +_080B2634: + ldrsh r1, [r4, #0x36] + ldrb r0, [r4, #0x29] + tst r0, #0x10 + beq _080B264C + cmp r1, #0 + bxpl lr +_080B264C: + tst r0, #0x20 + beq _080B2660 + ldrb r0, [fp, #1] + tst r0, #1 + bxne lr +_080B2660: + mov r2, r7 + cmp r1, #0 + submi r2, r2, r1 + ldr r3, _080B2A4C @ =gUnk_081326EC + ldr r3, [r3, #0x10] + ldrb r0, [r3] + cmp r0, #0x40 + bxhs lr + add r0, r0, #1 + strb r0, [r3] + add r3, r3, r0, lsl #2 + lsr r0, sb, #0xa + and r0, r0, #3 + orr r0, r0, r2, lsl #6 + strh r0, [r3, #2] + ldrb r0, [r4, #0x18] + and r0, r0, #0x30 + lsr r0, r0, #4 + orr r0, r0, r6, lsl #6 + strh r0, [r3] + bx lr +_080B26B4: + ldr r4, _080B2A50 @ =gUnk_081326EC + ldr r4, [r4, #0x10] + ldrb r5, [r4] + cmp r5, #0 + bxeq lr + stmdb sp!, {lr} + add r4, r4, #4 +_080B26D0: + ldrsh r0, [r4] + asr r6, r0, #6 + and r1, r0, #7 + ldr sl, _080B2A54 @ =ram_0x80b2bd8 + ldr sl, [sl, r1, lsl #2] + ldrsh r0, [r4, #2] + asr r7, r0, #6 + and r1, r0, #3 + lsl sb, r1, #0xa + mov r8, #0 + push {r4, r5} + bl sub_080B2874 + pop {r4, r5} + add r4, r4, #4 + subs r5, r5, #1 + bgt _080B26D0 + ldm sp!, {lr} + bx lr + +.endif +.endif + + +_080B2718: + ldrsb r0, [r4, #0x28] + cmp r0, #0 + beq _080B27E4 + bpl _080B2730 + ldr sl, [r4, #0x64] + b sub_080B2874 +_080B2730: + ldr r4, _080B2A58 @ =gUnk_020000C0 + add r4, r4, r0, lsl #6 + mov r5, #4 + bic sb, sb, #0xf000 +_080B2740: + ldrb r0, [r4] + tst r0, #1 + bxeq lr + tst r0, #2 + bne _080B27B8 + ldrb r0, [r4, #1] + cmp r0, #0xff + beq _080B27A8 + push {r4, r5, r6, r7, r8, sb, lr} + ldrb r2, [r4, #4] + eor r8, r8, r2, lsl #28 + ldrsb r2, [r4, #6] + tst r8, #0x10000000 + addeq r6, r6, r2 + subne r6, r6, r2 + ldrsb r2, [r4, #7] + tst r8, #0x20000000 + addeq r7, r7, r2 + addne r7, r7, r2 + ldrb r2, [r4, #5] + orr sb, sb, r2, lsl #12 + ldrb r2, [r4, #8] + add sb, sb, r2 + ldrh r1, [r4, #2] + bl sub_080B27F4 + pop {r4, r5, r6, r7, r8, sb, lr} +_080B27A8: + add r4, r4, #0x10 + subs r5, r5, #1 + bne _080B2740 + bx lr +_080B27B8: + ldr r0, [r4, #0xc] + cmp r0, #0 + beq _080B27A8 + push {r4, r5, lr} + bl sub_080B299C + mov r4, r0 + ldrb r5, [fp, #0x12] + add r7, r7, r5 + bl _080B27E4 + pop {r4, r5, lr} + b _080B27A8 +_080B27E4: + ldrb r0, [r4, #0x1e] + cmp r0, #0xff + bxeq lr + ldrh r1, [r4, #0x12] + + arm_func_start sub_080B27F4 +sub_080B27F4: @ 0x080B27F4 + ldr sl, _080B2A5C @ =gFrameObjLists + ldr r2, [sl, r1, lsl #2] + add r2, r2, sl + ldr r0, [r2, r0, lsl #2] + add sl, sl, r0 + b sub_080B2874 + + arm_func_start arm_DrawDirect +arm_DrawDirect: @ 0x080B280C + cmp r2, #0xff + bxeq lr + ldr r3, _080B2A60 @ =gFrameObjLists + ldr r1, [r3, r1, lsl #2] + add r1, r1, r2, lsl #2 + ldr r1, [r3, r1] + add r1, r1, r3 +arm_sub_080ADA04: + ldrb r2, [r1] + cmp r2, #0 + bxeq lr + push {r4, r5, r6, r7, r8, sb, sl, fp, lr} + ldr fp, _080B2A64 @ =gOAMControls + ldrb r3, [fp, #3] + cmp r3, #0x80 + bhs _080B286C + mov sl, r1 + ldrsh r6, [r0] + ldrsh r7, [r0, #2] + ldr r8, [r0, #4] + ldrh sb, [r0, #8] + add r3, pc, #0x8 @ =_080B286C + str r3, [fp, #0x18] + str sp, [fp, #0x14] + bl sub_080B2874 +_080B286C: + pop {r4, r5, r6, r7, r8, sb, sl, fp, lr} + bx lr + + arm_func_start sub_080B2874 +sub_080B2874: @ 0x080B2874 + ldrb r0, [sl], #1 + lsls r0, r0, #0x18 + bxeq lr + lsl sb, sb, #0x10 + orr sb, r0, sb, lsr #16 + ands r0, r8, #0x300 + beq _080B289C + subs r0, r0, #0x100 + movne r0, #0xc0 + b _080B28A8 +_080B289C: + and r0, r8, #0x30000000 + lsr r0, r0, #0x18 + add r0, r0, r0, lsl #1 +_080B28A8: + ldr r5, _080B2A68 @ =ram_0x80b2be8 + add r5, r5, r0 + ldrb r0, [fp, #3] + orr sb, sb, r0, lsl #16 + add ip, fp, #0x20 + add ip, ip, r0, lsl #3 +_080B28C0: + sub sb, sb, #0x1000000 + ldrsb r2, [sl], #5 + ldrsb r1, [sl, #-4] + tst r8, #0x300 + bne _080B28E4 + tst r8, #0x20000000 + rsbne r1, r1, #0 + tst r8, #0x10000000 + rsbne r2, r2, #0 +_080B28E4: + ldrb r3, [sl, #-3] + and r0, r3, #0xf0 + add r4, r5, r0, lsr #2 + add r1, r1, r7 + ldrb r0, [r4, #1] + sub r1, r1, r0 + cmp r1, #0xa0 + bge _080B2974 + ldrb r0, [r4, #3] + cmn r1, r0 + ble _080B2974 + add r2, r2, r6 + ldrb r0, [r4] + sub r2, r2, r0 + cmp r2, #0xf0 + bge _080B2974 + ldrb r0, [r4, #2] + cmn r2, r0 + ble _080B2974 + and r0, r1, #0xff + lsl r2, r2, #0x17 + orr r0, r0, r2, lsr #7 + orr r0, r0, r8 + and r1, r3, #0xc0 + orr r0, r0, r1, lsl #8 + and r1, r3, #0x3c + eor r0, r0, r1, lsl #26 + str r0, [ip], #4 + ldrb r0, [sl, #-2] + add r0, r0, sb + tst r3, #1 + bicne r0, r0, #0xf000 + ldrb r1, [sl, #-1] + add r0, r0, r1, lsl #8 + strh r0, [ip], #4 + add sb, sb, #0x10000 +_080B2974: + lsrs r0, sb, #0x18 + bhs _080B298C + bne _080B28C0 + lsr r0, sb, #0x10 + strb r0, [fp, #3] + bx lr +_080B298C: + mov r0, #0x80 + strb r0, [fp, #3] + ldr sp, [fp, #0x14] + ldr pc, [fp, #0x18] + + arm_func_start sub_080B299C +sub_080B299C: @ 0x080B299C + ldrsb r6, [r0, #0x3d] + cmp r6, #0 + ldrbgt r6, [fp, #0xe] + movle r6, #0 + ldr ip, [r0, #0x18] + ldrh sb, [r0, #0x60] + ldrb r5, [r0, #0x1a] + orr r5, r5, r6 + and r5, r5, #0xf + orr sb, sb, r5, lsl #12 + ldrb r5, [r0, #0x1b] + and r5, r5, #0xc0 + orr sb, sb, r5, lsl #4 + ldrsh r6, [r0, #0x2e] + ldrsb r5, [r0, #0x62] + add r6, r6, r5 + ldrsh r7, [r0, #0x32] + ldrsh r5, [r0, #0x36] + add r7, r7, r5 + ldrsb r5, [r0, #0x63] + add r7, r7, r5 + and r5, ip, #3 + cmp r5, #2 + beq _080B2A0C + ldrsh r5, [fp, #4] + sub r6, r6, r5 + ldrsh r5, [fp, #6] + sub r7, r7, r5 +_080B2A0C: + ldr r8, _080B2A6C @ =0x3E003F00 + and r8, r8, ip + ldrb r5, [fp, #2] + orr r8, r8, r5, lsl #12 + ldrb r5, [r0, #0x5b] + eor r5, r5, ip + and r5, r5, #0xc0 + orr r8, r8, r5, lsl #22 + bx lr + .align 2, 0 + +.ifdef EU +_080B1FBC: + mov sl, lr + ldrsh r0, [fp, #0x1c] + ldrsh r1, [fp, #0x1e] + ldrsh r2, [fp, #4] + sub r0, r0, r2 + ldrsh r3, [fp, #6] + sub r1, r1, r3 + mov r2, #0 + mov r3, #0 + bl arm_CheckBitsEU + mov r5, #0 + ldr r4, _080B2194 @ =0x03003DF8 +_080B1FECEU: + ldr r0, [r4, #8] + cmp r0, #0 + beq _080B2074EU + ldrsh r6, [r0, #0x2e] + ldrsh r7, [r0, #0x32] + ldr r3, [r4, #4] + cmp r3, #0 + beq _080B2024 + ldrsb r0, [r3] + add r6, r6, r0 + ldrsb r0, [r3, #1] + add r7, r7, r0 + add r3, r3, #2 + b _080B202C +_080B2024: + ldr r3, [r0, #0x48] + add r3, r3, #6 +_080B202C: + ldrsh r0, [fp, #4] + sub r6, r6, r0 + ldrsh r0, [fp, #6] + sub r7, r7, r0 + ldrb r0, [r3] + ldrb r1, [r3, #1] + ldr r2, [fp, #1] + and r2, r2, #3 + lsl r3, r2, #0x1c + lsrs r2, r2, #1 + rsblo r0, r0, #0 + subhs r0, r0, #8 + rsbeq r1, r1, #0 + subne r1, r1, #8 + add r0, r0, r6 + add r1, r1, r7 + mov r2, #0 + bl arm_CheckBitsEU +_080B2074EU: + add r4, r4, #0xc + add r5, r5, #1 + cmp r5, #0x1f + bls _080B1FECEU + bx sl + + arm_func_start arm_sub_080B2088 +arm_sub_080B2088: @ 0x080B2088 + ldr r5, [r4, #0x48] + cmp r5, #0 + bxeq lr + ldrb r0, [r5, #6] + ldrb r1, [r5, #7] + ldr r2, [fp, #1] + and r2, r2, #3 + lsl r3, r2, #0x1c + lsrs r2, r2, #1 + rsblo r0, r0, #0 + subhs r0, r0, #8 + rsbeq r1, r1, #0 + subne r1, r1, #8 + ldrsb r2, [r5] + add r0, r6, r0 + add r0, r0, r2 + ldrsb r2, [r5, #1] + add r1, r7, r1 + add r1, r1, r2 + mov r2, sb + b arm_CheckBitsEU +_080B20DC: + mov r0, r6 + mov r1, r7 + mov r2, r9 + mov r3, #0x0 + + arm_func_start arm_CheckBitsEU +arm_CheckBitsEU: @ 0x080B20EC + add ip, r1, #7 + cmp ip, #0xa8 + bxhs lr + add ip, r0, #7 + cmp ip, #0xf8 + bxhs lr + and r1, r1, #0xff + lsl r0, r0, #0x17 + orr r0, r1, r0, lsr #7 + eor r0, r0, r3 + and r1, r2, #0xc00 + add r1, r1, #0xff + ldrb r3, [fp, #3] + add ip, fp, #0x20 + add ip, ip, r3, lsl #3 + str r0, [ip] + strh r1, [ip, #4] + add r3, r3, #1 + cmp r3, #0x80 + bhs _080B298C + strb r3, [fp, #3] + bx lr +_080B2144: + .4byte ram_sub_080B2140 + .4byte ram_sub_080B20DC + .4byte ram_sub_080B2088 +.endif +.ifdef DEMO_JP @ TODO deduplicate same as EU +_080B1FBC: + mov sl, lr + ldrsh r0, [fp, #0x1c] + ldrsh r1, [fp, #0x1e] + ldrsh r2, [fp, #4] + sub r0, r0, r2 + ldrsh r3, [fp, #6] + sub r1, r1, r3 + mov r2, #0 + mov r3, #0 + bl arm_CheckBitsEU + mov r5, #0 + ldr r4, _080B2194 @ =0x03003DF8 +_080B1FECEU: + ldr r0, [r4, #8] + cmp r0, #0 + beq _080B2074EU + ldrsh r6, [r0, #0x2e] + ldrsh r7, [r0, #0x32] + ldr r3, [r4, #4] + cmp r3, #0 + beq _080B2024 + ldrsb r0, [r3] + add r6, r6, r0 + ldrsb r0, [r3, #1] + add r7, r7, r0 + add r3, r3, #2 + b _080B202C +_080B2024: + ldr r3, [r0, #0x48] + add r3, r3, #6 +_080B202C: + ldrsh r0, [fp, #4] + sub r6, r6, r0 + ldrsh r0, [fp, #6] + sub r7, r7, r0 + ldrb r0, [r3] + ldrb r1, [r3, #1] + ldr r2, [fp, #1] + and r2, r2, #3 + lsl r3, r2, #0x1c + lsrs r2, r2, #1 + rsblo r0, r0, #0 + subhs r0, r0, #8 + rsbeq r1, r1, #0 + subne r1, r1, #8 + add r0, r0, r6 + add r1, r1, r7 + mov r2, #0 + bl arm_CheckBitsEU +_080B2074EU: + add r4, r4, #0xc + add r5, r5, #1 + cmp r5, #0x1f + bls _080B1FECEU + bx sl + + arm_func_start sub_080B2088 +sub_080B2088: @ 0x080B2088 + ldr r5, [r4, #0x48] + cmp r5, #0 + bxeq lr + ldrb r0, [r5, #6] + ldrb r1, [r5, #7] + ldr r2, [fp, #1] + and r2, r2, #3 + lsl r3, r2, #0x1c + lsrs r2, r2, #1 + rsblo r0, r0, #0 + subhs r0, r0, #8 + rsbeq r1, r1, #0 + subne r1, r1, #8 + ldrsb r2, [r5] + add r0, r6, r0 + add r0, r0, r2 + ldrsb r2, [r5, #1] + add r1, r7, r1 + add r1, r1, r2 + mov r2, sb + b arm_CheckBitsEU +_080B20DC: + mov r0, r6 + mov r1, r7 + mov r2, r9 + mov r3, #0x0 + + arm_func_start arm_CheckBitsEU +arm_CheckBitsEU: @ 0x080B20EC + add ip, r1, #7 + cmp ip, #0xa8 + bxhs lr + add ip, r0, #7 + cmp ip, #0xf8 + bxhs lr + and r1, r1, #0xff + lsl r0, r0, #0x17 + orr r0, r1, r0, lsr #7 + eor r0, r0, r3 + and r1, r2, #0xc00 + add r1, r1, #0xff + ldrb r3, [fp, #3] + add ip, fp, #0x20 + add ip, ip, r3, lsl #3 + str r0, [ip] + strh r1, [ip, #4] + add r3, r3, #1 + cmp r3, #0x80 + bhs _080B298C + strb r3, [fp, #3] + bx lr +_080B2144: + .4byte ram_sub_080B2140 + .4byte ram_sub_080B20DC + .4byte ram_sub_080B2088 +.endif + +_080B2A30: .4byte gOAMControls +.ifdef EU +_080B2154: .4byte 0x03006958 @TODO make pointer? +.endif +.ifdef DEMO_JP @ TODO deduplicate same as EU +_080B2154: .4byte 0x03006958 @TODO make pointer? +.endif +_080B2A34: .4byte gUnk_081326EC +_080B2A38: .4byte gUnk_081326EC +_080B2A3C: .4byte gUnk_081326EC +_080B2A40: .4byte gUnk_081326EC +_080B2A44: .4byte gUnk_081326EC +_080B2A48: .4byte ram_0x80b2b58 +_080B2A4C: .4byte gUnk_081326EC +_080B2A50: .4byte gUnk_081326EC +_080B2A54: .4byte ram_0x80b2bd8 +_080B2A58: .4byte gUnk_020000C0 +_080B2A5C: .4byte gFrameObjLists +_080B2A60: .4byte gFrameObjLists +_080B2A64: .4byte gOAMControls +_080B2A68: .4byte ram_0x80b2be8 +_080B2A6C: .4byte 0x3E003F00 +.ifdef EU +_080B2194: .4byte 0x03003DF8 @TODO pointer? +.endif +.ifdef DEMO_JP @ TODO deduplicate same as EU +_080B2194: .4byte 0x03003DF8 @TODO pointer? +.endif diff --git a/asm/src/player.s b/asm/src/player.s new file mode 100644 index 00000000..3bc4edf3 --- /dev/null +++ b/asm/src/player.s @@ -0,0 +1,786 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start sub_0800857C +sub_0800857C: @ 0x0800857C + push {r4, r5, r6, r7, lr} + mov r4, r8 + mov r5, sb + mov r6, sl + mov r7, fp + push {r4, r5, r6, r7} + ldrb r1, [r0, #0xb] + lsrs r1, r1, #8 + bhs _0800859C + ldr r1, _08008888 @ =gPlayerState + ldrb r1, [r1, #2] + movs r2, #0x80 + ands r1, r2 + bne _0800859C + bl sub_080085CC +_0800859C: + ldrh r1, [r0, #0x24] + ldrb r2, [r0, #0x15] + bl sub_080027EA + pop {r4, r5, r6, r7} + mov r8, r4 + mov sb, r5 + mov sl, r6 + mov fp, r7 + pop {r4, r5, r6, r7, pc} + + thumb_func_start sub_080085B0 +sub_080085B0: @ 0x080085B0 + push {r3, r4, r5, r6, r7, lr} + mov r4, r8 + mov r5, sb + mov r6, sl + mov r7, fp + push {r4, r5, r6, r7} + bl sub_080085CC + pop {r4, r5, r6, r7} + mov r8, r4 + mov sb, r5 + mov sl, r6 + mov fp, r7 + pop {r3, r4, r5, r6, r7, pc} + + thumb_func_start sub_080085CC +sub_080085CC: @ 0x080085CC + push {lr} + ldr r2, _0800888C @ =gPlayerState + ldr r1, _08008890 @ =gUnk_080083FC + movs r3, #0x26 + ldrb r3, [r2, r3] + orrs r3, r3 + beq _080085E6 + ldr r2, [r2, #0x30] + movs r3, #0x80 + ands r2, r3 + beq _0800861A + ldr r1, _08008894 @ =gUnk_0800839C + b _0800861A +_080085E6: + ldr r1, _08008898 @ =gUnk_0800845C + ldrb r3, [r2, #2] + orrs r3, r3 + bne _0800861A + ldr r2, [r2, #0x30] + ldr r3, _0800889C @ =0x01000000 + tst r2, r3 + bne _0800861A + movs r3, #0x80 + ldr r1, _080088A0 @ =gUnk_0800833C + ands r2, r3 + bne _0800861A + ldr r1, _080088A4 @ =gUnk_080084BC + ldr r3, _080088A8 @ =gPlayerState + ldrb r2, [r3, #0x1c] + orrs r2, r2 + bne _0800861A + ldrb r2, [r3, #5] + orrs r2, r2 + bne _0800861A + ldr r1, _080088AC @ =gUnk_0800851C + movs r2, #0xaa + ldrb r2, [r3, r2] + orrs r2, r2 + bne _0800861A + ldr r1, _080088B0 @ =gUnk_080082DC +_0800861A: + mov fp, r1 + movs r7, #0 + mov r8, r0 + movs r2, #0x2e + ldrh r3, [r0, r2] + movs r2, #0x32 + ldrh r4, [r0, r2] + movs r2, #0x48 + ldr r5, [r0, r2] + ldr r1, _080088B4 @ =gRoomControls + 6 + ldrh r1, [r1] + subs r3, r3, r1 + ldr r1, _080088B8 @ =gRoomControls + 8 + ldrh r1, [r1] + subs r4, r4, r1 + eors r2, r2 + ldrsb r0, [r5, r2] + adds r0, r0, r3 + movs r2, #1 + ldrsb r1, [r5, r2] + adds r1, r1, r4 + push {r0, r1} + ldrb r2, [r5, #2] + adds r0, r0, r2 + ldrb r4, [r5, #3] + movs r6, #2 + mov sl, r1 +_08008650: + lsls r7, r7, #1 + lsls r7, r7, #1 + adds r1, r1, r4 + bl sub_080086D8 + orrs r7, r2 + lsls r7, r7, #1 + mov r1, sl + subs r1, r1, r4 + bl sub_080086D8 + orrs r7, r2 + lsls r7, r7, #1 + subs r6, #1 + beq _08008678 + mov r1, sl + ldrb r3, [r5, #2] + subs r0, r0, r3 + subs r0, r0, r3 + b _08008650 +_08008678: + pop {r0, r1} + ldrb r2, [r5, #5] + adds r1, r1, r2 + ldrb r4, [r5, #4] + movs r6, #2 + mov sb, r0 +_08008684: + lsls r7, r7, #1 + lsls r7, r7, #1 + adds r0, r0, r4 + bl sub_080086D8 + orrs r7, r2 + lsls r7, r7, #1 + mov r0, sb + subs r0, r0, r4 + bl sub_080086D8 + orrs r7, r2 + lsls r7, r7, #1 + subs r6, #1 + beq _080086AC + mov r0, sb + ldrb r3, [r5, #5] + subs r1, r1, r3 + subs r1, r1, r3 + b _08008684 +_080086AC: + mov r0, r8 + movs r2, #0x2a + strh r7, [r0, r2] + pop {pc} + + thumb_func_start sub_080086B4 +sub_080086B4: @ 0x080086B4 + push {r3, r4, r5, r6, r7, lr} + mov r4, r8 + mov r5, sb + mov r6, sl + mov r7, fp + push {r4, r5, r6, r7} + mov fp, r2 + ldr r2, _080088BC @ =gPlayerEntity + mov r8, r2 + bl sub_080086D8 + pop {r4, r5, r6, r7} + mov r8, r4 + mov sb, r5 + mov sl, r6 + mov fp, r7 + adds r0, r2, #0 + pop {r3, r4, r5, r6, r7, pc} + + thumb_func_start sub_080086D8 +sub_080086D8: @ 0x080086D8 + push {r0, r1, lr} + ldr r2, _080088C0 @ =0x000003F0 + ands r0, r2 + ands r1, r2 + lsrs r0, r0, #4 + lsls r1, r1, #2 + adds r0, r0, r1 + mov r2, r8 + movs r3, #0x38 + ldrb r3, [r2, r3] + lsls r3, r3, #2 + ldr r1, _080088C4 @ =gUnk_08000248 + ldr r1, [r1, r3] + ldrb r2, [r0, r1] + push {r2} + mov r0, r8 + ldr r1, _080088C8 @ =gPlayerState + movs r2, #0x26 + ldrb r2, [r1, r2] + cmp r2, #0 + beq _08008716 + movs r2, #0x12 + ldrb r2, [r1, r2] + cmp r2, #0x18 + beq _08008716 + pop {r2} + pop {r0, r1} + cmp r2, #0x10 + bhs _0800872E + movs r2, #0xf + b _0800871E +_08008716: + pop {r2} + pop {r0, r1} + cmp r2, #0x10 + bhs _0800872E +_0800871E: + movs r3, #8 + tst r1, r3 + bne _08008726 + lsrs r2, r2, #2 +_08008726: + tst r0, r3 + bne _08008754 + lsrs r2, r2, #1 + b _08008754 +_0800872E: + cmp r2, #0xff + beq _08008754 + push {r4} + subs r2, #0x10 + mov r3, fp + ldrb r2, [r2, r3] + lsls r2, r2, #2 + ldr r3, _080088CC @ =gUnk_0800823C + ldr r3, [r3, r2] + movs r4, #0xf + ands r4, r1 + lsls r4, r4, #1 + ldrh r2, [r3, r4] + movs r3, #0xf + adds r4, r3, #0 + ands r3, r0 + eors r4, r3 + lsrs r2, r4 + pop {r4} +_08008754: + movs r3, #1 + ands r2, r3 + pop {pc} + + non_word_aligned_thumb_func_start sub_0800875A +sub_0800875A: @ 0x0800875A + push {r2, r4, lr} + ldrb r3, [r0, #0x14] + movs r2, #6 + ands r3, r2 + ldr r4, _080088D0 @ =gUnk_08007DF4 + ldrsb r2, [r4, r3] + adds r3, #1 + ldrsb r3, [r4, r3] + bl sub_08008782 + pop {r2, r4} + cmp r0, #0 + beq _08008780 + ldrb r1, [r0, #2] + strb r1, [r2, #3] + ldrb r1, [r0, #3] + strb r1, [r2, #7] + ldrb r1, [r0, #5] + strb r1, [r2, #8] +_08008780: + pop {pc} + + non_word_aligned_thumb_func_start sub_08008782 +sub_08008782: @ 0x08008782 + push {r4} + ldrh r4, [r0, #0x2e] + adds r2, r2, r4 + ldrh r4, [r0, #0x32] + adds r3, r3, r4 + pop {r4} + b sub_08008796 + + thumb_func_start sub_08008790 +sub_08008790: @ 0x08008790 + ldrh r2, [r0, #0x2e] + ldrh r3, [r0, #0x32] + b sub_08008796 + + non_word_aligned_thumb_func_start sub_08008796 +sub_08008796: @ 0x08008796 + push {r4, r5, r6, r7, lr} + push {r2, r3} + ldr r2, _080088D4 @ =gRoomControls + ldrh r3, [r2] + movs r2, #1 + cmp r2, r3 + pop {r2, r3} + beq _080087CE + push {r0, r1, r2, r3} + pop {r4, r5, r6, r7} + adds r0, r6, #0 + adds r1, r7, #0 + movs r2, #0x38 + ldrb r2, [r4, r2] + bl GetTileTypeByPos + ldr r1, _080088D8 @ =gUnk_080046A4 + bl sub_08007DE0 + beq _080087CE + lsls r1, r3, #3 + adds r3, r5, #0 + ldr r0, _080088DC @ =gUnk_080047F6 + adds r5, r0, r1 + ldrh r0, [r5] + lsrs r0, r3 + lsrs r0, r0, #1 + bhs _080087D2 +_080087CE: + movs r0, #0 + pop {r4, r5, r6, r7, pc} +_080087D2: + ldrb r0, [r5, #2] + ldrb r1, [r5, #3] + cmp r0, #0xff + beq _0800883A + cmp r3, #6 + beq _0800883A + cmp r3, #0xe + beq _0800883A + cmp r3, #0xa + beq _0800883A + cmp r3, #0xb + beq _0800883A + cmp r3, #0xd + bne _080087F6 + cmp r0, #0xf + bne _0800883A + cmp r1, #0x17 + bne _0800883A +_080087F6: + movs r2, #0 + cmp r0, #0xf + bne _080087FE + movs r2, #0x80 +_080087FE: + bl CreateObject + cmp r0, #0 + beq _0800883A + ldrb r1, [r5, #2] + cmp r1, #0 + beq _08008820 + movs r2, #0xf + adds r1, r6, #0 + bics r1, r2 + adds r1, #8 + strh r1, [r0, #0x2e] + adds r1, r7, #0 + bics r1, r2 + adds r1, #8 + strh r1, [r0, #0x32] + b _0800882C +_08008820: + ldrh r1, [r4, #0x2e] + strh r1, [r0, #0x2e] + ldrh r1, [r4, #0x32] + strh r1, [r0, #0x32] + ldrh r1, [r4, #0x36] + strh r1, [r1, #0x36] +_0800882C: + movs r3, #0x50 + str r4, [r1, r3] + movs r3, #0x38 + ldrb r1, [r4, r3] + strb r1, [r0, r3] + bl UpdateSpriteForCollisionLayer +_0800883A: + ldr r1, _080088E0 @ =gRoomControls + ldrh r0, [r1, #6] + subs r2, r6, r0 + lsrs r2, r2, #4 + ldrh r0, [r1, #8] + subs r3, r7, r0 + lsrs r3, r3, #4 + lsls r3, r3, #6 + adds r1, r2, r3 + movs r3, #0x38 + ldrb r2, [r4, r3] + ldrh r0, [r5, #6] + ldr r3, _080088E4 @ =0x00004000 + tst r0, r3 + beq _08008870 + ldr r3, _080088E8 @ =0x0000FFFF + cmp r0, r3 + beq _08008876 + push {r0, r1} + adds r0, r2, #0 + bl GetLayerByIndex + adds r3, r0, #4 + pop {r0, r1} + lsls r1, r1, #1 + strh r0, [r3, r1] + b _0800887E +_08008870: + bl sub_0807B7D8 + b _0800887E +_08008876: + adds r0, r1, #0 + adds r1, r2, #0 + bl sub_0807BA8C +_0800887E: + ldrb r1, [r5, #2] + ldrb r2, [r5, #3] + adds r0, r5, #0 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08008888: .4byte gPlayerState +_0800888C: .4byte gPlayerState +_08008890: .4byte gUnk_080083FC +_08008894: .4byte gUnk_0800839C +_08008898: .4byte gUnk_0800845C +_0800889C: .4byte 0x01000000 +_080088A0: .4byte gUnk_0800833C +_080088A4: .4byte gUnk_080084BC +_080088A8: .4byte gPlayerState +_080088AC: .4byte gUnk_0800851C +_080088B0: .4byte gUnk_080082DC +_080088B4: .4byte gRoomControls + 6 +_080088B8: .4byte gRoomControls + 8 +_080088BC: .4byte gPlayerEntity +_080088C0: .4byte 0x000003F0 +_080088C4: .4byte gUnk_08000248 +_080088C8: .4byte gPlayerState +_080088CC: .4byte gUnk_0800823C +_080088D0: .4byte gUnk_08007DF4 +_080088D4: .4byte gRoomControls +_080088D8: .4byte gUnk_080046A4 +_080088DC: .4byte gUnk_080047F6 +_080088E0: .4byte gRoomControls +_080088E4: .4byte 0x00004000 +_080088E8: .4byte 0x0000FFFF +_080088EC: + .byte 0x00, 0xFD, 0x03, 0xFD + .byte 0x03, 0x00, 0x03, 0x03, 0x00, 0x03, 0xFD, 0x03, 0xFD, 0x00, 0xFD, 0xFD +_080088FC: + .byte 0x00, 0xF6, 0x0A, 0xF6 + .byte 0x0A, 0x00, 0x0A, 0x0A, 0x00, 0x0A, 0xF6, 0x0A, 0xF6, 0x00, 0xF6, 0xF6 +_0800890C: + .byte 0x00, 0x06, 0xFA, 0x00 + .byte 0x00, 0xFA, 0x06, 0x00, 0x13, 0x12, 0x12, 0x10, 0x10, 0x11, 0x11, 0x13 +_0800891C: + push {r0} + bl ResetPlayerVelocity + pop {r0} +_08008924: + pop {pc} + + non_word_aligned_thumb_func_start sub_08008926 +sub_08008926: @ 0x08008926 + push {r4, r5, r6, lr} + bl sub_08008942 + pop {r4, r5, r6, pc} + + non_word_aligned_thumb_func_start sub_0800892E +sub_0800892E: @ 0x0800892E + push {r4, r5, r6, lr} + bl sub_08008936 + pop {r4, r5, r6, pc} + + non_word_aligned_thumb_func_start sub_08008936 +sub_08008936: @ 0x08008936 + push {lr} + ldrb r2, [r0, #0x14] + lsrs r2, r2, #1 + lsls r2, r2, #3 + ldr r1, _08008A68 @ =gPlayerState + b _08008960 + + non_word_aligned_thumb_func_start sub_08008942 +sub_08008942: @ 0x08008942 + push {lr} + ldr r1, _08008A6C @ =gPlayerState + ldrb r2, [r1, #7] + ldrb r3, [r1, #0xa] + orrs r2, r3 + bne _08008924 + ldrb r2, [r1, #0xd] + b _08008956 +_08008952: + push {lr} + ldr r1, _08008A70 @ =gPlayerState +_08008956: + movs r3, #0x15 + strb r2, [r0, r3] + movs r3, #0x80 + tst r2, r3 + bne _080089C0 +_08008960: + ldrb r3, [r1, #5] + cmp r3, #2 + beq _0800891C + cmp r3, #1 + beq _0800891C + ldr r4, _08008A74 @ =_080088FC + ldrb r3, [r1, #2] + adds r1, r2, #0 + orrs r3, r3 + beq _08008992 + push {r2} + movs r3, #0x14 + ldrb r1, [r0, r3] + lsrs r1, r1, #1 + lsls r1, r1, #1 + lsrs r2, r2, #2 + subs r2, r2, r1 + pop {r1} + adds r2, #2 + movs r4, #7 + ands r2, r4 + ldr r4, _08008A78 @ =_080088EC + cmp r2, #4 + beq _08008992 + bhs _080089A8 +_08008992: + adds r3, r1, #0 + lsrs r3, r3, #2 + lsls r3, r3, #1 + adds r4, r4, r3 + movs r3, #0 + ldrsb r2, [r4, r3] + adds r3, #1 + ldrsb r3, [r4, r3] + bl sub_08008A46 + b _080089C0 +_080089A8: + movs r3, #0x14 + ldrb r3, [r0, r3] + lsrs r3, r3, #1 + lsls r3, r3, #1 + ldr r4, _08008A7C @ =_0800890C + adds r4, r4, r3 + movs r3, #0 + ldrsb r2, [r4, r3] + adds r3, #1 + ldrsb r3, [r4, r3] + bl sub_08008A46 +_080089C0: + ldr r1, _08008A80 @ =gPlayerState + movs r4, #0x8c + movs r2, #8 + ldrsh r3, [r1, r4] + orrs r3, r3 + beq _080089E4 + bpl _080089D2 + movs r2, #0x18 + rsbs r3, r3, #0 +_080089D2: + push {r0, r1} + adds r1, r3, #0 + push {r2} + bl sub_080027EA + pop {r0} + bl sub_0807A5B8 + pop {r0, r1} +_080089E4: + movs r4, #0x8e + movs r2, #0x10 + ldrsh r3, [r1, r4] + orrs r3, r3 + beq _08008A06 + bpl _080089F4 + movs r2, #0 + rsbs r3, r3, #0 +_080089F4: + push {r0, r1} + adds r1, r3, #0 + push {r2} + bl sub_080027EA + pop {r0} + bl sub_0807A5B8 + pop {r0, r1} +_08008A06: + ldrb r2, [r1, #2] + orrs r2, r2 + bne _08008A18 + movs r2, #0x8c + bl sub_08008A1A + movs r2, #0x8e + bl sub_08008A1A +_08008A18: + pop {pc} + + non_word_aligned_thumb_func_start sub_08008A1A +sub_08008A1A: @ 0x08008A1A + ldrb r3, [r1, #2] + movs r4, #3 + orrs r3, r3 + bne _08008A2C + movs r3, #0x26 + ldrb r3, [r1, r3] + orrs r3, r3 + bne _08008A2C + movs r4, #3 +_08008A2C: + ldrsh r3, [r1, r2] + orrs r3, r3 + bmi _08008A3E + subs r3, r3, r4 + bpl _08008A3A + beq _08008A3A +_08008A38: + eors r3, r3 +_08008A3A: + strh r3, [r1, r2] + mov pc, lr +_08008A3E: + adds r3, r3, r4 + bmi _08008A3A + beq _08008A3A + b _08008A38 + + non_word_aligned_thumb_func_start sub_08008A46 +sub_08008A46: @ 0x08008A46 + push {lr} + ldr r1, _08008A84 @ =gPlayerState + movs r4, #0x8c + ldrsh r5, [r1, r4] + adds r5, r5, r2 + bl sub_08008A88 + movs r4, #0x8e + ldrsh r5, [r1, r4] + adds r5, r5, r3 + bl sub_08008A88 + pop {pc} +_08008A60: + eors r3, r3 + strh r3, [r1] + pop {pc} + .align 2, 0 +_08008A68: .4byte gPlayerState +_08008A6C: .4byte gPlayerState +_08008A70: .4byte gPlayerState +_08008A74: .4byte _080088FC +_08008A78: .4byte _080088EC +_08008A7C: .4byte _0800890C +_08008A80: .4byte gPlayerState +_08008A84: .4byte gPlayerState + + thumb_func_start sub_08008A88 +sub_08008A88: @ 0x08008A88 + orrs r5, r5 + bmi _08008A94 + ldr r6, _08008B38 @ =0x00000180 + cmp r5, r6 + blo _08008A9C + b _08008A9A +_08008A94: + ldr r6, _08008B3C @ =0xFFFFFE80 + cmp r5, r6 + bhs _08008A9C +_08008A9A: + adds r5, r6, #0 +_08008A9C: + strh r5, [r1, r4] + mov pc, lr + + thumb_func_start sub_08008AA0 +sub_08008AA0: @ 0x08008AA0 + push {r4, r5, lr} + ldr r1, _08008B40 @ =gPlayerState + ldrb r2, [r1, #0x12] + cmp r2, #1 + beq _08008AC4 + ldrb r2, [r1, #0xd] + cmp r2, #0xff + beq _08008AC4 + lsls r2, r2, #4 + ldr r3, _08008B44 @ =gSineTable + ldrsh r4, [r3, r2] + adds r3, #0x80 + ldrsh r5, [r3, r2] + rsbs r5, r5, #0 + movs r2, #0x8c + strh r4, [r1, r2] + movs r2, #0x8e + strh r5, [r1, r2] +_08008AC4: + pop {r4, r5, pc} + + non_word_aligned_thumb_func_start sub_08008AC6 +sub_08008AC6: @ 0x08008AC6 + push {r0, lr} + ldr r1, _08008B48 @ =gPlayerState + movs r3, #0x26 + ldrb r2, [r1, r3] + movs r3, #0xf + ands r2, r3 + bne _08008AEC + ldr r2, [r1, #0x30] + ldr r3, _08008B4C @ =gUnk_02000020 + ands r2, r3 + bne _08008AEC + bl sub_08008AEE + beq _08008AEC + movs r3, #0xe2 + movs r2, #0x3d + strb r3, [r0, r2] + bl RespawnPlayer +_08008AEC: + pop {r0, pc} + + non_word_aligned_thumb_func_start sub_08008AEE +sub_08008AEE: @ 0x08008AEE + ldrh r2, [r0, #0x2a] + movs r3, #0xe + movs r1, #4 +_08008AF4: + tst r2, r3 + beq _08008B00 + lsrs r2, r2, #4 + subs r1, #1 + bne _08008AF4 + movs r2, #1 +_08008B00: + bx lr + + non_word_aligned_thumb_func_start sub_08008B02 +sub_08008B02: @ 0x08008B02 + push {r0, r1, lr} + movs r1, #0 + movs r2, #0 + bl sub_080B1A8C + ldr r1, _08008B50 @ =0x00004000 + tst r0, r1 + bne _08008B1E + ldr r1, _08008B54 @ =gUnk_08007CAC + bl sub_08007DE0 + movs r2, #1 + cmp r3, #1 + beq _08008B20 +_08008B1E: + movs r2, #0 +_08008B20: + pop {r0, r1, pc} + + non_word_aligned_thumb_func_start sub_08008B22 +sub_08008B22: @ 0x08008B22 + push {lr} + ldr r0, _08008B58 @ =gPlayerEntity + bl sub_08008B02 + adds r0, r2, #0 + pop {pc} + + non_word_aligned_thumb_func_start sub_08008B2E +sub_08008B2E: @ 0x08008B2E + push {r0, lr} + adds r0, r2, #0 + bl EnqueueSFX + pop {r0, pc} + .align 2, 0 +_08008B38: .4byte 0x00000180 +_08008B3C: .4byte 0xFFFFFE80 +_08008B40: .4byte gPlayerState +_08008B44: .4byte gSineTable +_08008B48: .4byte gPlayerState +_08008B4C: .4byte gUnk_02000020 +_08008B50: .4byte 0x00004000 +_08008B54: .4byte gUnk_08007CAC +_08008B58: .4byte gPlayerEntity + + + diff --git a/asm/src/projectileUpdate.s b/asm/src/projectileUpdate.s new file mode 100644 index 00000000..590744ce --- /dev/null +++ b/asm/src/projectileUpdate.s @@ -0,0 +1,44 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start ProjectileUpdate +ProjectileUpdate: @ 0x08016AE4 + mov r3, lr + push {r3, r4} + adds r4, r0, #0 + ldrb r2, [r0, #0xc] + cmp r2, #0 + bne _08016AFC + bl ProjectileInit + cmp r0, #0 + bne _08016B0A + bl DeleteThisEntity +_08016AFC: + bl EntityIsDeleted + cmp r0, #0 + bne _08016B22 + adds r0, r4, #0 + bl sub_080028E0 +_08016B0A: + adds r0, r4, #0 + ldrb r1, [r0, #9] + lsls r1, r1, #2 + ldr r2, _08016B2C @ =gProjectileFunctions + ldr r1, [r2, r1] + bl _call_via_r1 + movs r1, #0x41 + movs r3, #0x7f + ldrb r2, [r4, r1] + ands r2, r3 + strb r2, [r4, r1] +_08016B22: + adds r0, r4, #0 + bl DrawEntity + pop {r3, r4} + bx r3 + .align 2, 0 +_08016B2C: .4byte gProjectileFunctions diff --git a/asm/src/script.s b/asm/src/script.s new file mode 100644 index 00000000..71de3364 --- /dev/null +++ b/asm/src/script.s @@ -0,0 +1,144 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + +gUnk_08016984:: @ 08016984 + .incbin "code_08016984/gUnk_08016984.bin" + + .text + + non_word_aligned_thumb_func_start GetNextScriptCommandHalfword +GetNextScriptCommandHalfword: @ 0x08016986 + ldrh r0, [r0] + bx lr + + non_word_aligned_thumb_func_start GetNextScriptCommandHalfwordAfterCommandMetadata +GetNextScriptCommandHalfwordAfterCommandMetadata: @ 0x0801698A + ldrh r0, [r0, #2] + bx lr + + non_word_aligned_thumb_func_start GetNextScriptCommandWord +GetNextScriptCommandWord: @ 0x0801698E + ldrh r1, [r0] + ldrh r0, [r0, #2] + lsls r0, r0, #0x10 + orrs r0, r1 + bx lr + + thumb_func_start GetNextScriptCommandWordAfterCommandMetadata +GetNextScriptCommandWordAfterCommandMetadata: @ 0x08016998 + ldrh r1, [r0, #2] + ldrh r0, [r0, #4] + lsls r0, r0, #0x10 + orrs r0, r1 + bx lr + .align 2, 0 + +gUnk_080169A4:: + .byte 0x01, 0xFF, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x01, 0x00 + .byte 0xFF, 0x01, 0x00, 0x00, 0x02, 0xFF, 0x01, 0xFE, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x01, 0xFF, 0x02 + .byte 0x00, 0x00, 0x01, 0x01, 0x02, 0xFF, 0x02, 0xFE, 0xFE, 0x02, 0xFF, 0x03, 0xFD, 0xFF, 0xFE, 0x01 + .byte 0x01, 0xFD, 0xFF, 0xFF, 0x03, 0xFE, 0x02, 0x00, 0x00, 0xFF, 0xFE, 0x03, 0xFD, 0x02, 0xFF, 0x00 + .byte 0x00, 0xFD, 0x02, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02 + .byte 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00 + .byte 0x00, 0x00, 0x01, 0x00 + + thumb_func_start UpdateSpriteForCollisionLayer +UpdateSpriteForCollisionLayer: @ 0x08016A04 + movs r1, #0x38 + ldrb r1, [r0, r1] + lsls r1, r1, #1 + add r3, pc, #0x1C + adds r1, r1, r3 + movs r3, #0xc0 + ldrb r2, [r0, #0x19] + bics r2, r3 + ldrb r3, [r1] + orrs r2, r3 + strb r2, [r0, #0x19] + movs r3, #0xc0 + ldrb r2, [r0, #0x1b] + bics r2, r3 + ldrb r3, [r1, #1] + orrs r2, r3 + strb r2, [r0, #0x1b] + bx lr +_08016A28: + .byte 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40 + + thumb_func_start ResolveCollisionLayer +ResolveCollisionLayer: @ 0x08016A30 + push {r4, r5, lr} + adds r4, r0, #0 + movs r5, #0x38 + ldrb r0, [r4, r5] + cmp r0, #0 + bne _08016A64 + ldrh r0, [r4, #0x2e] + ldrh r1, [r4, #0x32] + movs r2, #2 + bl GetTileTypeByPos + movs r3, #1 + cmp r0, #0 + beq _08016A62 + bl sub_080B1B54 + movs r3, #2 + add r1, pc, #0x40 +_08016A54: + adds r1, #4 + ldrh r2, [r1] + cmp r2, #0 + beq _08016A62 + cmp r0, r2 + bne _08016A54 + ldrb r3, [r1, #3] +_08016A62: + strb r3, [r4, r5] +_08016A64: + adds r0, r4, #0 + bl UpdateSpriteForCollisionLayer + pop {r4, r5, pc} + + thumb_func_start sub_08016A6C +sub_08016A6C: @ 0x08016A6C + push {r4, r5, lr} + adds r4, r0, #0 + bl sub_080B1AA8 + add r1, pc, #0x38 +_08016A76: + adds r1, #4 + ldrh r2, [r1] + cmp r2, #0 + beq _08016A90 + cmp r2, r0 + bne _08016A76 + movs r2, #0x38 + ldrb r3, [r4, r2] + ldrb r5, [r1, #2] + cmp r3, r5 + beq _08016A90 + ldrb r5, [r1, #3] + strb r5, [r4, r2] +_08016A90: + pop {r4, r5, pc} + .align 2, 0 +_08016A94: + .byte 0x2A, 0x00, 0x03, 0x03, 0x2D, 0x00, 0x03, 0x03, 0x2B, 0x00, 0x03, 0x03 + .byte 0x2C, 0x00, 0x03, 0x03, 0x4C, 0x00, 0x03, 0x03, 0x4E, 0x00, 0x03, 0x03, 0x4D, 0x00, 0x03, 0x03 + .byte 0x4F, 0x00, 0x03, 0x03, 0x0A, 0x00, 0x02, 0x01, 0x09, 0x00, 0x02, 0x01, 0x0C, 0x00, 0x01, 0x02 + .byte 0x0B, 0x00, 0x01, 0x02, 0x52, 0x00, 0x03, 0x03, 0x27, 0x00, 0x03, 0x03, 0x26, 0x00, 0x03, 0x03 + .byte 0x00, 0x00 + + non_word_aligned_thumb_func_start sub_08016AD2 +sub_08016AD2: @ 0x08016AD2 + push {r4, lr} + adds r4, r0, #0 + bl sub_08016A6C + push {r0} + adds r0, r4, #0 + bl UpdateSpriteForCollisionLayer + pop {r0, r4, pc} + diff --git a/asm/src/veneer.s b/asm/src/veneer.s new file mode 100644 index 00000000..3cb55e81 --- /dev/null +++ b/asm/src/veneer.s @@ -0,0 +1,475 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + +.ifndef USA +.ifndef DEMO_USA +.ifndef JP + thumb_func_start fill_rq_stack +fill_rq_stack: // fill iqr and user stack with 'MCZ3' + adr r0, 1f + ldm r0!, {r1, r2, r3} +0: + subs r2, #4 + str r1, [r2] + cmp r2, r3 + bgt 0b + bx lr + +// unused +// returns the maximum values reached by irq stack (r0) and usr stack (r1) +check_stack_threshold: + adr r0, 1f + ldm r0!, {r1, r2, r3} +0: + ldr r0, [r3] + adds r3, #4 + cmp r0, r1 // cmp against magic + beq 0b + + subs r2, #0xa0 +0: + ldr r0, [r2] + adds r2, #4 + cmp r0, r1 // cmp against magic + beq 0b + + subs r1, r2, #4 + subs r0, r3, #4 + bx lr + + .align 2, 0 +1: + .byte '3, 'Z, 'C, 'M // r1 + .4byte irq_stack_begin // r2 + .4byte usr_stack_top // r3 +.endif +.endif +.endif + + thumb_func_start UpdateScrollVram +UpdateScrollVram: @ 0x08000108 + push {r4, lr} + ldr r0, _080001E8 @ =gUpdateVisibleTiles + ldrb r1, [r0] + lsls r1, r1, #2 + beq _08000136 + add r4, pc, #0x20 + ldr r4, [r4, r1] + ldr r0, _080001EC @ =gMapBottom + ldr r0, [r0] + cmp r0, #0 + beq _08000126 + ldr r0, _080001F0 @ =gMapDataBottomSpecial + ldr r1, _080001F4 @ =gUnk_02021F70 + bl _call_via_r4 +_08000126: + ldr r0, _080001F8 @ =gMapTop + ldr r0, [r0] + cmp r0, #0 + beq _08000136 + ldr r0, _080001FC @ =gMapDataTopSpecial + ldr r1, _08000200 @ =gUnk_020344F0 + bl _call_via_r4 +_08000136: + pop {r4, pc} +_08000138: +_08000138: .4byte ram_sub_080B197C + 1 +_0800013C: .4byte sub_0807D280 @ layer 1, 2, 3? +_08000140: .4byte sub_0807D46C +_08000144: .4byte sub_0807D6D8 + + thumb_func_start sub_08000148 +sub_08000148: @ 0x08000148 + lsls r2, r2, #2 + ldr r3, _08000204 @ =gUnk_08000248 + ldr r2, [r3, r2] + strb r0, [r2, r1] + bx lr + + non_word_aligned_thumb_func_start sub_08000152 +sub_08000152: @ 0x08000152 + lsls r2, r2, #2 + add r3, pc, #0x68 + ldr r3, [r3, r2] + lsls r0, r0, #1 + ldrh r0, [r3, r0] + lsrs r2, r2, #2 + + non_word_aligned_thumb_func_start SetTile +SetTile: @ r0 = tile type, r1, = tile position, r2 = layer + push {r4-r7, lr} + lsls r3, r2, #3 + ldr r4, _08000208 @ =gUnk_08000228 + ldr r5, [r4, r3] + lsls r6, r1, #1 + ldrh r7, [r5, r6] + strh r0, [r5, r6] + ldr r6, _0800020C @ =0x00004000 + cmp r0, r6 + blo _0800019A + push {r1, r2} + subs r4, r0, r6 + ldr r3, _08000210 @ =gUnk_080B7910 + ldrb r0, [r3, r4] + bl sub_080001D0 + ldr r3, _08000214 @ =gUnk_080B79A7 + ldrb r0, [r3, r4] + lsrs r2, r2, #2 + bl sub_08000148 + pop {r0, r1} @ tilepos, layer + push {r0, r1} + bl DeleteLoadedTileEntity + adds r0, r7, #0 + pop {r1, r2} + bl sub_0801AF48 + pop {r4, r5, r6, r7, pc} +_0800019A: + adds r3, #4 + ldr r4, [r4, r3] + lsls r0, r0, #1 + ldrh r4, [r4, r0] + push {r1, r2} + ldr r3, _08000218 @ =gUnk_080B37A0 + ldrb r0, [r3, r4] + bl sub_080001D0 + ldr r3, _0800021C @ =gUnk_080B3E80 + ldrb r0, [r3, r4] + lsrs r2, r2, #2 + bl sub_08000148 + pop {r0, r1} + bl DeleteLoadedTileEntity + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_080001C0: .4byte gUnk_0202BEB4 +_080001C4: .4byte gUnk_0202BEB4 +_080001C8: .4byte gUnk_02011654 +_080001CC: .4byte gUnk_0202BEB4 + + thumb_func_start sub_080001D0 +sub_080001D0: @ 0x080001D0 + lsls r2, r2, #2 + ldr r3, _08000220 @ =gUnk_08000278 + ldr r3, [r3, r2] + strb r0, [r3, r1] + bx lr + + non_word_aligned_thumb_func_start GetTileIndex +GetTileIndex: @ 0x080001DA + lsls r1, r1, #3 + ldr r2, _08000224 @ =gUnk_08000228 + ldr r1, [r2, r1] + lsls r0, r0, #1 + ldrh r0, [r1, r0] + bx lr + .align 2, 0 +_080001E8: .4byte gUpdateVisibleTiles +_080001EC: .4byte gMapBottom +_080001F0: .4byte gMapDataBottomSpecial +_080001F4: .4byte gUnk_02021F70 +_080001F8: .4byte gMapTop +_080001FC: .4byte gMapDataTopSpecial +_08000200: .4byte gUnk_020344F0 +_08000204: .4byte gUnk_08000248 +_08000208: .4byte gUnk_08000228 +_0800020C: .4byte 0x00004000 +_08000210: .4byte gUnk_080B7910 +_08000214: .4byte gUnk_080B79A7 +_08000218: .4byte gUnk_080B37A0 +_0800021C: .4byte gUnk_080B3E80 +_08000220: .4byte gUnk_08000278 +_08000224: .4byte gUnk_08000228 +gUnk_08000228:: + .4byte gMapDataBottom +gUnk_0800022C:: + .4byte gMetatileTypesBottom + .4byte gMapDataBottom + .4byte gMetatileTypesBottom + .4byte gMapDataTop + .4byte gMetatileTypesTop + .4byte gMapDataBottom + .4byte gMetatileTypesBottom +gUnk_08000248:: + .4byte gUnk_02027EB4 + .4byte gUnk_02027EB4 + .4byte gUnk_0200D654 + .4byte gUnk_02027EB4 +gUnk_08000258:: + .4byte gUnk_02028EB4 + .4byte gMetatileTypesBottom + .4byte gUnk_02028EB4 + .4byte gMetatileTypesBottom + .4byte gUnk_0200E654 + .4byte gMetatileTypesTop + .4byte gUnk_02028EB4 + .4byte gMetatileTypesBottom +gUnk_08000278:: + .4byte gUnk_02030EB4 + .4byte gUnk_02030EB4 + .4byte gUnk_02016654 + .4byte gUnk_02030EB4 + +@ call 0x80B19CC +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. + thumb_func_start GetTileAtEntityPos +GetTileAtEntityPos: @ 0x08000288 + ldr r3, _080002F4 @ =ram_GetTileAtEntityPos + bx r3 + +@ call 0x80B19D8 +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. + thumb_func_start sub_080B19D8 +sub_080B19D8: @ 0x0800028C + ldr r3, _080002F8 @ =ram_sub_080B19D8 + bx r3 + +@ call 0x80B19EC +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. + thumb_func_start sub_080B19EC +sub_080B19EC: @ 0x08000290 + ldr r3, _080002FC @ =ram_sub_080B19EC + bx r3 + +@ call 0x80B19FC +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. + thumb_func_start sub_080B19FC +sub_080B19FC: @ 0x08000294 + ldr r3, _08000300 @ =ram_sub_080B19FC + bx r3 + +@ call 0x80B1A04 +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. + thumb_func_start sub_080B1A04 +sub_080B1A04: @ 0x08000298 + ldr r3, _08000304 @ =ram_sub_080B1A04 + bx r3 + +@ call 0x80B1A0C +@ r0: entity* +@ r1: s32 +@ r2: s32 + thumb_func_start sub_080B1A0C +sub_080B1A0C: @ 0x0800029C + ldr r3, _08000308 @ =ram_sub_080B1A0C + bx r3 + +@ call 0x080B1A28 +@ r0: entity +@ return: u32 (tileType) + thumb_func_start GetTileTypeByEntity +GetTileTypeByEntity: @ 0x080002A0 + ldr r3, _0800030C @ =ram_GetTileTypeByEntity + bx r3 + +@ call 0x080B1A34 +@ r0: s32 (xPos) +@ r1: s32 (yPos) +@ r2: u32 (layer) +@ return: u32 (tileType) + thumb_func_start GetTileTypeByPos +GetTileTypeByPos: @ 0x080002A4 + ldr r3, _08000310 @ =ram_GetTileTypeByPos + bx r3 + +@ call 0x080B1A48 +@ r0: s32 (xPos) +@ r1: s32 (yPos) +@ r2: u32 (layer) + thumb_func_start sub_080B1A48 +sub_080B1A48: @ 0x080002A8 + ldr r3, _08000314 @ =ram_sub_080B1A48 + bx r3 + +@ call 0x080B1A58 +@ r0: s32 (xPos) +@ r1: s32 (yPos) +@ r2: u32 (layer) + thumb_func_start sub_080B1A58 +sub_080B1A58: @ 0x080002AC + ldr r3, _08000318 @ =ram_sub_080B1A58 + bx r3 + +@ call 0x080B1A60 +@ r0: u32 (tileIndex) +@ r1: u32 (layer) +@ return: u32 (tileType) + thumb_func_start GetTileType +GetTileType: @ 0x080002B0 + ldr r3, _0800031C @ =ram_GetTileType + bx r3 + +@ call 0x080B1A8C +@ r0: Entity* +@ r1: u32 +@ r2: u32 + thumb_func_start sub_080B1A8C +sub_080B1A8C: @ 0x080002B4 + ldr r3, _08000320 @ =ram_sub_080B1A8C + bx r3 + +@ call 0x080B1AA8 +@ r0: +@ r1: +@ r2: +@ return: +@ ======== +@ Called every frame a pot is thrown, every frame the screen is sliding in a transition, and once when entering stairs. + thumb_func_start sub_080B1AA8 +sub_080B1AA8: @ 0x080002B8 + ldr r3, _08000324 @ =ram_sub_080B1AA8 + bx r3 + +@ call 0x080B1AB4 +@ r0: s32 (xPos) +@ r1: s32 (yPos) +@ r2: u32 (layer) + thumb_func_start sub_080B1AB4 +sub_080B1AB4: @ 0x080002BC + ldr r3, _08000328 @ =ram_sub_080B1AB4 + bx r3 + +@ call 0x080B1AC8 +@ r0: u32 +@ r1: u32 +@ r2: u32 +@ return: ??? + thumb_func_start sub_080B1AC8 +sub_080B1AC8: @ 0x080002C0 + ldr r3, _0800032C @ =ram_sub_080B1AC8 + bx r3 + +@ call 0x080B1AD8 +@ r0: Entity* +@ r1: s32 (xOffset) +@ r2: s32 (yOffset) +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. + thumb_func_start sub_080B1AD8 +sub_080B1AD8: @ 0x080002C4 + ldr r3, _08000330 @ =ram_sub_080B1AD8 + bx r3 + +@ call 0x080B1AE0 +@ r0: u32 (tileIndex) +@ r1: u32 (layer) + thumb_func_start sub_080B1AE0 +sub_080B1AE0: @ 0x080002C8 + ldr r3, _08000334 @ =ram_sub_080B1AE0 + bx r3 + +@ call 0x080B1AF0 +@ r0: Entity* +@ r1: ??? +@ r2: ??? + thumb_func_start sub_080B1AF0 +sub_080B1AF0: @ 0x080002CC + ldr r3, _08000338 @ =ram_sub_080B1AF0 + bx r3 + +@ call 0x080B1B0C +@ r0: Entity* + thumb_func_start sub_080B1B0C +sub_080B1B0C: @ 0x080002D0 + ldr r3, _0800033C @ =ram_sub_080B1B0C + bx r3 + +@ call 0x080B1B18 +@ r0: s32 (xPos) +@ r1: s32 (yPos) +@ r2: u32 (layer) + thumb_func_start sub_080B1B18 +sub_080B1B18: @ 0x080002D4 + ldr r3, _08000340 @ =ram_sub_080B1B18 + bx r3 + +@ call 0x080B1B2C +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. + thumb_func_start sub_080B1B2C +sub_080B1B2C: @ 0x080002D8 + ldr r3, _08000344 @ =ram_sub_080B1B2C + bx r3 + +@ call 0x080B1B3C +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. + thumb_func_start sub_080B1B3C +sub_080B1B3C: @ 0x080002DC + ldr r3, _08000348 @ =ram_sub_080B1B3C + bx r3 + +@ call 0x080B1B44 +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. + thumb_func_start sub_080B1B44 +sub_080B1B44: @ 0x080002E0 + ldr r3, _0800034C @ =ram_sub_080B1B44 + bx r3 + +@ call 0x080B1B54 +@ r0: u32 (tileIndex) + thumb_func_start sub_080B1B54 +sub_080B1B54: @ 0x080002E4 + ldr r3, _08000350 @ =ram_sub_080B1B54 + bx r3 + +@ call 0x080B1B68 +@ ======== +@ Unused? Doesn't seem to be called by anything in Ghidra. + thumb_func_start sub_080B1B68 +sub_080B1B68: @ 0x080002E8 + ldr r3, _08000354 @ =ram_sub_080B1B68 + bx r3 + +@ call 0x080B1B84 +@ r0: u32 (tileIndex) +@ r1: u32 (layer) + thumb_func_start sub_080B1B84 +sub_080B1B84: @ 0x080002EC + ldr r3, _08000358 @ =ram_sub_080B1B84 + bx r3 + +@ call 0x080B1BA4 +@ r0: u32 (tileIndex) +@ r1: u32 (layer) +@ r2: ??? + thumb_func_start sub_080B1BA4 +sub_080B1BA4: @ 0x080002F0 + ldr r3, _0800035C @ =ram_sub_080B1BA4 + bx r3 + +_080002F4: .4byte ram_GetTileAtEntityPos +_080002F8: .4byte ram_sub_080B19D8 +_080002FC: .4byte ram_sub_080B19EC +_08000300: .4byte ram_sub_080B19FC +_08000304: .4byte ram_sub_080B1A04 +_08000308: .4byte ram_sub_080B1A0C +_0800030C: .4byte ram_GetTileTypeByEntity +_08000310: .4byte ram_GetTileTypeByPos +_08000314: .4byte ram_sub_080B1A48 +_08000318: .4byte ram_sub_080B1A58 +_0800031C: .4byte ram_GetTileType +_08000320: .4byte ram_sub_080B1A8C +_08000324: .4byte ram_sub_080B1AA8 +_08000328: .4byte ram_sub_080B1AB4 +_0800032C: .4byte ram_sub_080B1AC8 +_08000330: .4byte ram_sub_080B1AD8 +_08000334: .4byte ram_sub_080B1AE0 +_08000338: .4byte ram_sub_080B1AF0 +_0800033C: .4byte ram_sub_080B1B0C +_08000340: .4byte ram_sub_080B1B18 +_08000344: .4byte ram_sub_080B1B2C +_08000348: .4byte ram_sub_080B1B3C +_0800034C: .4byte ram_sub_080B1B44 +_08000350: .4byte ram_sub_080B1B54 +_08000354: .4byte ram_sub_080B1B68 +_08000358: .4byte ram_sub_080B1B84 +_0800035C: .4byte ram_sub_080B1BA4 |
