diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-13 15:06:36 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-05-13 15:06:36 -0400 |
commit | c01ded544cff365d952ac64265e171d6a9b20b21 (patch) | |
tree | 700376d5ba92a37ac7be5c04a1ba1bfe420907b4 | |
parent | 404029d1602281ce381fdd88fb6fa08b9e64f402 (diff) |
Disassemble module 81
-rw-r--r-- | arm9/arm9.lcf | 25 | ||||
-rw-r--r-- | arm9/global.inc | 3 | ||||
-rw-r--r-- | arm9/modules/81/asm/module_81.s | 10353 |
3 files changed, 10378 insertions, 3 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index 22167bf8..f2470541 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -3109,7 +3109,17 @@ SECTIONS { SDK_OVERLAY_MODULE_81_ID = 81; SDK_OVERLAY.MODULE_81.ID = 81; SDK_OVERLAY.MODULE_81.START = .; - FILE_2E9A00.o (.text) /* 0x2E5A00 */ + module_81.o (.text) + module_81.o (.rodata) + module_81.o (.init) + SDK_OVERLAY.MODULE_81.SINIT_START = .; + module_81.o (.ctor) + module_81.o (.sinit) + WRITEW 0; + SDK_OVERLAY.MODULE_81.SINIT_END = .; + . = ALIGN(32); + module_81.o (.sdata) + module_81.o (.data) . = ALIGN(32); SDK_OVERLAY.MODULE_81.END = .; SDK_OVERLAY.MODULE_81.SIZE = SDK_OVERLAY.MODULE_81.END - SDK_OVERLAY.MODULE_81.START; @@ -3119,7 +3129,8 @@ SECTIONS { { ALIGNALL(4); . = ALIGN(32); SDK_OVERLAY.MODULE_81.BSS_START = .; - FILE_2E9A00.o (.bss) + module_81.o (.bss) + module_81.o (.sbss) . = ALIGN(32); SDK_OVERLAY.MODULE_81.BSS_END = .; SDK_OVERLAY.MODULE_81.BSS_SIZE = SDK_OVERLAY.MODULE_81.BSS_END - SDK_OVERLAY.MODULE_81.BSS_START; @@ -4084,7 +4095,15 @@ SECTIONS { WRITEW 80; WRITEW 0; - OVERLAY_TABLE(MODULE_81, 81) + WRITEW 81; + WRITEW ADDR(.MODULE_81); + WRITEW SDK_OVERLAY.MODULE_81.SIZE; + WRITEW SDK_OVERLAY.MODULE_81.BSS_SIZE; + WRITEW SDK_OVERLAY.MODULE_81.SINIT_START; + WRITEW SDK_OVERLAY.MODULE_81.SINIT_END; + WRITEW 81; + WRITEW 0; + OVERLAY_TABLE(MODULE_82, 82) OVERLAY_TABLE(MODULE_83, 83) OVERLAY_TABLE(MODULE_84, 84) diff --git a/arm9/global.inc b/arm9/global.inc index 22ff41b5..d241c10e 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -5863,6 +5863,9 @@ .extern FUN_0206B384
.extern FUN_020888BC
.extern FUN_020888CC
+.extern FUN_0200CA7C
+.extern FUN_02033F04
+.extern FUN_02068E1C
.extern MOD04_021DD808
.extern MOD04_021DD984
.extern MOD04_021DD9DC
diff --git a/arm9/modules/81/asm/module_81.s b/arm9/modules/81/asm/module_81.s new file mode 100644 index 00000000..c0b33a96 --- /dev/null +++ b/arm9/modules/81/asm/module_81.s @@ -0,0 +1,10353 @@ + .include "asm/macros.inc" + .include "global.inc" + .section .text + .balign 4, 0 + + thumb_func_start MOD81_02237E40 +MOD81_02237E40: ; 0x02237E40 + push {r4, r5, lr} + sub sp, #0x14 + add r5, r0, #0 + bl FUN_0200E308 + cmp r0, #0 + bne _02237E50 + b _02237FC8 +_02237E50: + mov r0, #3 + mov r1, #0x39 + lsl r2, r0, #0xf + bl FUN_0201681C + mov r0, #3 + mov r1, #0x3a + lsl r2, r0, #0xf + bl FUN_0201681C + bl MOD81_02238858 + ldr r1, _02237FD0 ; =0x00000492 + mov r0, #3 + mov r2, #1 + bl FUN_0200433C + mov r1, #0x55 + add r0, r5, #0 + lsl r1, r1, #2 + mov r2, #0x39 + bl FUN_02006268 + add r4, r0, #0 + bne _02237E84 + b _02237FC2 +_02237E84: + add r0, r5, #0 + bl FUN_0200628C + str r0, [r4] + mov r0, #0 + str r0, [r4, #4] + mov r0, #0x39 + bl FUN_02016B94 + str r0, [r4, #8] + mov r0, #0x19 + lsl r0, r0, #4 + mov r1, #0x39 + bl FUN_020219F4 + str r0, [r4, #0x14] + ldr r2, _02237FD4 ; =0x00000137 + mov r0, #0 + mov r1, #0x1a + mov r3, #0x39 + bl FUN_0200A86C + str r0, [r4, #0x10] + mov r0, #0x39 + bl FUN_0200AA80 + str r0, [r4, #0xc] + ldr r2, [r4] + ldr r0, [r2, #0x10] + cmp r0, #1 + beq _02237ECC + cmp r0, #2 + beq _02237EFE + cmp r0, #4 + beq _02237F0A + b _02237F22 +_02237ECC: + ldr r0, [r4, #0xc] + ldr r2, [r2] + mov r1, #0 + bl FUN_0200ACF8 + ldr r2, [r4] + ldr r0, [r4, #0xc] + ldr r2, [r2, #4] + mov r1, #1 + bl FUN_0200ACF8 + ldr r2, [r4] + ldr r0, [r4, #0xc] + ldr r2, [r2, #8] + mov r1, #2 + bl FUN_0200ABC0 + ldr r0, [r4] + ldr r0, [r0, #4] + bl MOD81_02237FE8 + mov r1, #0x52 + lsl r1, r1, #2 + str r0, [r4, r1] + b _02237F22 +_02237EFE: + ldr r0, [r4, #0xc] + ldr r2, [r2] + mov r1, #0 + bl FUN_0200ACF8 + b _02237F22 +_02237F0A: + ldr r0, [r4, #0xc] + ldr r2, [r2, #4] + mov r1, #1 + bl FUN_0200ACF8 + ldr r0, [r4] + ldr r0, [r0, #4] + bl MOD81_02237FE8 + mov r1, #0x52 + lsl r1, r1, #2 + str r0, [r4, r1] +_02237F22: + bl FUN_020B0FC0 + mov r0, #1 + str r0, [sp] + mov r0, #0x7f + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + mov r3, #0x20 + str r3, [sp, #0xc] + mov r1, #0x39 + str r1, [sp, #0x10] + mov r1, #0x80 + add r2, r0, #0 + bl FUN_02009EAC + add r1, r4, #0 + mov r0, #0x40 + add r1, #0x1c + mov r2, #0x39 + bl FUN_02008C9C + str r0, [r4, #0x18] + add r0, r4, #0 + mov r2, #0x3a + add r0, #0x1c + mov r1, #0 + lsl r2, r2, #0xe + bl FUN_02008D24 + ldr r0, [r4] + mov r1, #5 + ldr r0, [r0] + mov r2, #0 + bl FUN_020672BC + mov r1, #0x53 + lsl r1, r1, #2 + strh r0, [r4, r1] + ldr r0, [r4] + mov r1, #5 + ldr r0, [r0, #4] + mov r2, #0 + bl FUN_020672BC + ldr r1, _02237FD8 ; =0x0000014E + strh r0, [r4, r1] + mov r0, #0 + add r1, r1, #2 + str r0, [r4, r1] + add r1, r0, #0 + bl FUN_02015F10 + bl FUN_02015F1C + bl FUN_0201E6D8 + bl FUN_0201E740 + mov r2, #1 + lsl r2, r2, #0x1a + ldr r1, [r2] + ldr r0, _02237FDC ; =0xFFFFE0FF + and r1, r0 + str r1, [r2] + ldr r2, _02237FE0 ; =0x04001000 + ldr r1, [r2] + and r0, r1 + str r0, [r2] + ldr r0, _02237FE4 ; =MOD81_022380F4 + add r1, r4, #0 + mov r2, #1 + bl FUN_0200CA7C + mov r1, #0x51 + lsl r1, r1, #2 + str r0, [r4, r1] + mov r0, #0 + add r1, #0xc + str r0, [r4, r1] +_02237FC2: + add sp, #0x14 + mov r0, #1 + pop {r4, r5, pc} +_02237FC8: + mov r0, #0 + add sp, #0x14 + pop {r4, r5, pc} + nop +_02237FD0: .word 0x00000492 +_02237FD4: .word 0x00000137 +_02237FD8: .word 0x0000014E +_02237FDC: .word 0xFFFFE0FF +_02237FE0: .word 0x04001000 +_02237FE4: .word MOD81_022380F4 + thumb_func_end MOD81_02237E40 + + thumb_func_start MOD81_02237FE8 +MOD81_02237FE8: ; 0x02237FE8 + push {r3, lr} + mov r1, #5 + mov r2, #0 + bl FUN_020672BC + mov r1, #0x1c + bl FUN_02068678 + cmp r0, #0 + bne _02238000 + mov r0, #1 + pop {r3, pc} +_02238000: + mov r0, #0 + pop {r3, pc} + thumb_func_end MOD81_02237FE8 + + thumb_func_start MOD81_02238004 +MOD81_02238004: ; 0x02238004 + push {r4, r5, r6, lr} + add r5, r0, #0 + bl OS_DisableInterrupts + add r6, r0, #0 + add r0, r5, #0 + bl FUN_02006278 + add r4, r0, #0 + mov r0, #0x51 + lsl r0, r0, #2 + ldr r0, [r4, r0] + bl FUN_0200CAB4 + bl FUN_02033ED0 + ldr r0, [r4, #0xc] + bl FUN_0200AB18 + ldr r0, [r4, #0x10] + bl FUN_0200A8B8 + ldr r0, [r4, #0x14] + bl FUN_02021A20 + ldr r0, [r4, #8] + bl FUN_02016A18 + ldr r0, [r4, #0x18] + bl FUN_0201FD58 + bl FUN_02009FA0 + add r0, r5, #0 + bl FUN_0200627C + mov r0, #0x39 + bl FUN_020168D0 + mov r0, #0x3a + bl FUN_020168D0 + add r0, r6, #0 + bl OS_RestoreInterrupts + mov r0, #1 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD81_02238004 + + thumb_func_start MOD81_02238064 +MOD81_02238064: ; 0x02238064 + push {r4, r5, r6, lr} + add r5, r1, #0 + bl FUN_02006278 + add r4, r0, #0 + ldr r3, [r4, #4] + cmp r3, #7 + bhs _022380E0 + ldr r1, [r4] + ldr r6, _022380E4 ; =0x0223CF90 + lsl r2, r3, #4 + ldr r1, [r1, #0x10] + ldr r6, [r6, r2] + tst r1, r6 + beq _022380D0 + mov r1, #0x15 + lsl r1, r1, #4 + ldr r1, [r4, r1] + cmp r1, #0 + bne _02238098 + ldr r1, _022380E8 ; =0x0223CF84 + ldr r1, [r1, r2] + blx r1 + mov r1, #0x15 + lsl r1, r1, #4 + str r0, [r4, r1] +_02238098: + ldr r2, [r4, #4] + mov r0, #0x15 + lsl r3, r2, #4 + ldr r2, _022380EC ; =0x0223CF88 + lsl r0, r0, #4 + ldr r0, [r4, r0] + ldr r2, [r2, r3] + add r1, r5, #0 + blx r2 + cmp r0, #0 + beq _022380D8 + ldr r1, [r4, #4] + mov r0, #0x15 + lsl r2, r1, #4 + ldr r1, _022380F0 ; =0x0223CF8C + lsl r0, r0, #4 + ldr r0, [r4, r0] + ldr r1, [r1, r2] + blx r1 + mov r0, #0x15 + mov r1, #0 + lsl r0, r0, #4 + str r1, [r4, r0] + ldr r0, [r4, #4] + add r0, r0, #1 + str r0, [r4, #4] + str r1, [r5] + b _022380D8 +_022380D0: + add r0, r3, #1 + str r0, [r4, #4] + mov r0, #0 + str r0, [r5] +_022380D8: + bl MOD81_02238864 + mov r0, #0 + pop {r4, r5, r6, pc} +_022380E0: + mov r0, #1 + pop {r4, r5, r6, pc} + .align 2, 0 +_022380E4: .word 0x0223CF90 +_022380E8: .word 0x0223CF84 +_022380EC: .word 0x0223CF88 +_022380F0: .word 0x0223CF8C + thumb_func_end MOD81_02238064 + + thumb_func_start MOD81_022380F4 +MOD81_022380F4: ; 0x022380F4 + push {r3, lr} + ldr r0, [r1, #0x18] + bl FUN_0201FDEC + bl FUN_02009F80 + ldr r3, _02238110 ; =0x027E0000 + ldr r1, _02238114 ; =0x00003FF8 + mov r0, #1 + ldr r2, [r3, r1] + orr r0, r2 + str r0, [r3, r1] + pop {r3, pc} + nop +_02238110: .word 0x027E0000 +_02238114: .word 0x00003FF8 + thumb_func_end MOD81_022380F4 + + thumb_func_start MOD81_02238118 +MOD81_02238118: ; 0x02238118 + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + add r5, r0, #0 + mov r0, #0x39 + add r6, r1, #0 + add r1, r0, #0 + add r1, #0xc7 + bl FUN_02016998 + add r4, r0, #0 + ldr r0, _022381DC ; =0x00000000 + str r0, [r5] + beq _022381D4 + mov r0, #0x5d + mov r1, #6 + add r2, sp, #4 + mov r3, #0x39 + bl FUN_02006C08 + add r7, r0, #0 + beq _02238152 + mov r0, #0 + add r1, r4, #0 + mov r2, #0x60 + bl MIi_CpuClear16 + add r0, r7, #0 + bl FUN_02016A18 +_02238152: + add r1, r4, #0 + mov r0, #0 + add r1, #0xec + str r0, [r1] + add r1, r4, #0 + add r1, #0xe8 + str r0, [r1] + add r1, r4, #0 + add r1, #0xf0 + str r0, [r1] + add r1, r4, #0 + add r1, #0xf4 + str r0, [r1] + add r1, r4, #0 + add r1, #0xe4 + str r5, [r1] + add r1, r4, #0 + add r1, #0xf8 + str r0, [r1] + add r1, r4, #0 + add r1, #0xfc + str r6, [r1] + add r3, r4, #0 + add r2, r0, #0 +_02238182: + add r1, r3, #0 + add r1, #0xc4 + add r0, r0, #1 + add r3, r3, #4 + str r2, [r1] + cmp r0, #8 + blt _02238182 + mov r0, #8 + str r0, [sp] + ldr r0, _022381E0 ; =0x04000050 + mov r1, #4 + mov r2, #0xc + mov r3, #0x10 + bl G2x_SetBlendAlpha_ + mov r0, #8 + str r0, [sp] + ldr r0, _022381E4 ; =0x04001050 + mov r1, #4 + mov r2, #0xc + mov r3, #0x10 + bl G2x_SetBlendAlpha_ + ldr r0, _022381E8 ; =MOD81_02238248 + add r1, r4, #0 + mov r2, #0x14 + bl FUN_0200CA44 + add r1, r4, #0 + add r1, #0xc0 + str r0, [r1] + add r0, r4, #0 + add r0, #0xc0 + ldr r0, [r0] + cmp r0, #0 + beq _022381D4 + add r0, r4, #0 + add r0, #0xe4 + ldr r0, [r0] + mov r1, #1 + str r1, [r0] +_022381D4: + add r0, r4, #0 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + nop +_022381DC: .word 0x00000000 +_022381E0: .word 0x04000050 +_022381E4: .word 0x04001050 +_022381E8: .word MOD81_02238248 + thumb_func_end MOD81_02238118 + + thumb_func_start MOD81_022381EC +MOD81_022381EC: ; 0x022381EC + add r1, r0, #0 + add r1, #0xe4 + ldr r1, [r1] + ldr r1, [r1] + cmp r1, #1 + bne _022381FE + mov r1, #1 + add r0, #0xe8 + str r1, [r0] +_022381FE: + bx lr + thumb_func_end MOD81_022381EC + + thumb_func_start MOD81_02238200 +MOD81_02238200: ; 0x02238200 + push {r4, r5, r6, lr} + add r6, r0, #0 + add r0, #0xe4 + ldr r0, [r0] + ldr r0, [r0] + cmp r0, #1 + bne _02238246 + mov r4, #0 + add r5, r6, #0 +_02238212: + add r0, r5, #0 + add r0, #0xc4 + ldr r0, [r0] + cmp r0, #0 + beq _02238224 + add r0, r6, #0 + add r1, r4, #0 + bl MOD81_0223840C +_02238224: + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #8 + blt _02238212 + add r0, r6, #0 + add r0, #0xe4 + ldr r0, [r0] + mov r1, #0 + str r1, [r0] + add r0, r6, #0 + add r0, #0xc0 + ldr r0, [r0] + bl FUN_0200CAB4 + add r0, r6, #0 + bl FUN_02016A18 +_02238246: + pop {r4, r5, r6, pc} + thumb_func_end MOD81_02238200 + + thumb_func_start MOD81_02238248 +MOD81_02238248: ; 0x02238248 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + add r0, r4, #0 + add r0, #0xe8 + ldr r0, [r0] + cmp r0, #0 + bne _022382C6 + add r0, r4, #0 + add r0, #0xf0 + ldr r0, [r0] + sub r1, r0, #1 + add r0, r4, #0 + add r0, #0xf0 + str r1, [r0] + add r0, r4, #0 + add r0, #0xf0 + ldr r0, [r0] + cmp r0, #0 + bgt _02238284 + ldr r0, _0223832C ; =0x000006AE + bl FUN_020054C8 + add r0, r4, #0 + mov r1, #0x1e + add r0, #0xf0 + str r1, [r0] + add r0, r4, #0 + bl MOD81_02238358 +_02238284: + add r0, r4, #0 + add r0, #0xec + ldr r0, [r0] + cmp r0, #0 + beq _02238328 + bl GX_BeginLoadBGExtPltt + bl GXS_BeginLoadBGExtPltt + add r0, r4, #0 + mov r1, #0x60 + bl DC_FlushRange + mov r1, #6 + add r0, r4, #0 + lsl r1, r1, #0xc + mov r2, #0x60 + bl GX_LoadBGExtPltt + mov r1, #6 + add r0, r4, #0 + lsl r1, r1, #0xc + mov r2, #0x60 + bl GXS_LoadBGExtPltt + bl GX_EndLoadBGExtPltt + bl GXS_EndLoadBGExtPltt + mov r0, #0 + add r4, #0xec + str r0, [r4] + pop {r3, r4, r5, pc} +_022382C6: + add r0, r4, #0 + add r0, #0xec + ldr r0, [r0] + cmp r0, #0 + beq _02238308 + bl GX_BeginLoadBGExtPltt + bl GXS_BeginLoadBGExtPltt + add r0, r4, #0 + mov r1, #0x60 + bl DC_FlushRange + mov r1, #6 + add r0, r4, #0 + lsl r1, r1, #0xc + mov r2, #0x60 + bl GX_LoadBGExtPltt + mov r1, #6 + add r0, r4, #0 + lsl r1, r1, #0xc + mov r2, #0x60 + bl GXS_LoadBGExtPltt + bl GX_EndLoadBGExtPltt + bl GXS_EndLoadBGExtPltt + add r0, r4, #0 + mov r1, #0 + add r0, #0xec + str r1, [r0] +_02238308: + add r0, r4, #0 + add r0, #0xf4 + ldr r0, [r0] + cmp r0, #0 + bne _02238328 + add r0, r4, #0 + add r0, #0xe4 + ldr r0, [r0] + mov r1, #0 + str r1, [r0] + add r0, r4, #0 + bl FUN_02016A18 + add r0, r5, #0 + bl FUN_0200CAB4 +_02238328: + pop {r3, r4, r5, pc} + nop +_0223832C: .word 0x000006AE + thumb_func_end MOD81_02238248 + + thumb_func_start MOD81_02238330 +MOD81_02238330: ; 0x02238330 + push {r3, r4} + cmp r1, #0 + blt _02238340 + cmp r1, #0x60 + bge _02238340 + mov r4, #0 + lsl r1, r1, #1 + strh r4, [r0, r1] +_02238340: + cmp r2, #0 + blt _0223834C + cmp r2, #0x60 + bge _0223834C + lsl r1, r2, #1 + strh r3, [r0, r1] +_0223834C: + mov r1, #1 + add r0, #0xec + str r1, [r0] + pop {r3, r4} + bx lr + .align 2, 0 + thumb_func_end MOD81_02238330 + + thumb_func_start MOD81_02238358 +MOD81_02238358: ; 0x02238358 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r0, #0xf8 + ldr r0, [r0] + lsl r0, r0, #2 + add r0, r5, r0 + add r0, #0xc4 + ldr r0, [r0] + cmp r0, #0 + bne _02238404 + mov r0, #0x39 + mov r1, #0x18 + bl FUN_02016998 + add r4, r0, #0 + beq _02238404 + add r0, r5, #0 + str r5, [r4] + add r0, #0xfc + ldr r0, [r0] + cmp r0, #1 + bne _0223838A + mov r0, #0 + mvn r0, r0 + b _0223838C +_0223838A: + mov r0, #0xf +_0223838C: + str r0, [r4, #4] + mov r0, #0 + str r0, [r4, #0xc] + mov r0, #2 + str r0, [r4, #8] + add r0, r5, #0 + add r0, #0xf8 + ldr r0, [r0] + add r1, r4, #0 + str r0, [r4, #0x10] + add r0, r5, #0 + add r0, #0xfc + ldr r0, [r0] + mov r2, #0xa + str r0, [r4, #0x14] + ldr r0, _02238408 ; =MOD81_0223843C + bl FUN_0200CA44 + add r1, r5, #0 + add r1, #0xf8 + ldr r1, [r1] + lsl r1, r1, #2 + add r1, r5, r1 + add r1, #0xc4 + str r0, [r1] + add r0, r5, #0 + add r0, #0xf8 + ldr r0, [r0] + lsl r0, r0, #2 + add r0, r5, r0 + add r0, #0xc4 + ldr r0, [r0] + cmp r0, #0 + beq _022383FE + add r0, r5, #0 + add r0, #0xf4 + ldr r0, [r0] + add r1, r0, #1 + add r0, r5, #0 + add r0, #0xf4 + str r1, [r0] + add r0, r5, #0 + add r0, #0xf8 + ldr r0, [r0] + add r1, r0, #1 + add r0, r5, #0 + add r0, #0xf8 + str r1, [r0] + add r0, r5, #0 + add r0, #0xf8 + ldr r0, [r0] + cmp r0, #8 + blt _02238404 + mov r0, #0 + add r5, #0xf8 + str r0, [r5] + pop {r3, r4, r5, pc} +_022383FE: + add r0, r4, #0 + bl FUN_02016A18 +_02238404: + pop {r3, r4, r5, pc} + nop +_02238408: .word MOD81_0223843C + thumb_func_end MOD81_02238358 + + thumb_func_start MOD81_0223840C +MOD81_0223840C: ; 0x0223840C + push {r4, r5, r6, lr} + add r5, r0, #0 + add r6, r5, #0 + lsl r4, r1, #2 + add r6, #0xc4 + ldr r0, [r6, r4] + cmp r0, #0 + beq _0223843A + bl FUN_0201B6C8 + bl FUN_02016A18 + ldr r0, [r6, r4] + bl FUN_0200CAB4 + mov r0, #0 + str r0, [r6, r4] + add r0, r5, #0 + add r0, #0xf4 + ldr r0, [r0] + add r5, #0xf4 + sub r0, r0, #1 + str r0, [r5] +_0223843A: + pop {r4, r5, r6, pc} + thumb_func_end MOD81_0223840C + + thumb_func_start MOD81_0223843C +MOD81_0223843C: ; 0x0223843C + push {r4, lr} + add r4, r1, #0 + ldr r0, [r4, #0xc] + add r1, r0, #1 + str r1, [r4, #0xc] + ldr r0, [r4, #8] + cmp r1, r0 + blt _022384A4 + mov r3, #0 + str r3, [r4, #0xc] + ldr r0, [r4, #0x14] + cmp r0, #1 + bne _0223847C + ldr r1, [r4, #4] + ldr r0, [r4] + add r2, r1, #1 + cmp r2, #0xf + blt _0223846E + bl MOD81_02238330 + ldr r0, [r4] + ldr r1, [r4, #0x10] + bl MOD81_0223840C + pop {r4, pc} +_0223846E: + ldr r3, _022384A8 ; =0x00007FFF + bl MOD81_02238330 + ldr r0, [r4, #4] + add r0, r0, #1 + str r0, [r4, #4] + pop {r4, pc} +_0223847C: + ldr r2, [r4, #4] + ldr r0, [r4] + cmp r2, #0 + bge _02238496 + add r1, r2, #0 + add r2, r2, #1 + bl MOD81_02238330 + ldr r0, [r4] + ldr r1, [r4, #0x10] + bl MOD81_0223840C + pop {r4, pc} +_02238496: + ldr r3, _022384A8 ; =0x00007FFF + add r1, r2, #1 + bl MOD81_02238330 + ldr r0, [r4, #4] + sub r0, r0, #1 + str r0, [r4, #4] +_022384A4: + pop {r4, pc} + nop +_022384A8: .word 0x00007FFF + thumb_func_end MOD81_0223843C + + thumb_func_start MOD81_022384AC +MOD81_022384AC: ; 0x022384AC + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + str r0, [sp] + add r6, r1, #0 + mov r0, #0x39 + mov r1, #0x24 + add r7, r2, #0 + str r3, [sp, #4] + ldr r5, [sp, #0x28] + bl FUN_02016998 + add r4, r0, #0 + ldr r0, _0223850C ; =0x00000001 + str r0, [r5] + beq _02238504 + ldr r1, [sp] + str r1, [r4] + str r6, [r4, #8] + ldr r1, [sp, #4] + str r7, [r4, #0xc] + str r1, [r4, #0x10] + ldr r1, [sp, #0x20] + str r1, [r4, #0x14] + cmp r6, r7 + bge _022384E0 + mov r0, #0 +_022384E0: + str r0, [r4, #0x18] + ldr r0, [sp, #0x24] + mov r2, #0 + str r0, [r4, #0x1c] + str r5, [r4, #4] + ldr r0, _02238510 ; =MOD81_02238514 + add r1, r4, #0 + str r2, [r5] + bl FUN_0200CA60 + str r0, [r4, #0x20] + cmp r0, #0 + bne _02238504 + mov r0, #1 + str r0, [r5] + add r0, r4, #0 + bl FUN_02016A18 +_02238504: + add r0, r4, #0 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + nop +_0223850C: .word 0x00000001 +_02238510: .word MOD81_02238514 + thumb_func_end MOD81_022384AC + + thumb_func_start MOD81_02238514 +MOD81_02238514: ; 0x02238514 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldr r0, [r4, #8] + ldr r1, [r4, #0x10] + mul r1, r0 + asr r2, r1, #0xc + asr r1, r2, #4 + lsr r1, r1, #0x1b + add r1, r2, r1 + asr r2, r1, #5 + ldr r1, [r4, #0x18] + cmp r1, #0 + beq _02238536 + cmp r1, #1 + beq _0223854C + b _02238560 +_02238536: + ldr r1, [r4, #0xc] + add r0, r0, r2 + cmp r0, r1 + bge _02238542 + str r0, [r4, #8] + b _02238560 +_02238542: + str r1, [r4, #8] + ldr r0, [r4, #4] + mov r1, #1 + str r1, [r0] + b _02238560 +_0223854C: + ldr r1, [r4, #0xc] + sub r0, r0, r2 + cmp r0, r1 + ble _02238558 + str r0, [r4, #8] + b _02238560 +_02238558: + str r1, [r4, #8] + ldr r0, [r4, #4] + mov r1, #1 + str r1, [r0] +_02238560: + add r0, r4, #0 + bl MOD81_02238588 + ldr r0, [r4, #4] + ldr r0, [r0] + cmp r0, #0 + beq _0223857C + add r0, r4, #0 + bl MOD81_02238898 + add r0, r5, #0 + bl FUN_0200CAB4 + pop {r3, r4, r5, pc} +_0223857C: + ldr r1, [r4, #0x10] + ldr r0, [r4, #0x14] + add r0, r1, r0 + str r0, [r4, #0x10] + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD81_02238514 + + thumb_func_start MOD81_02238588 +MOD81_02238588: ; 0x02238588 + push {r3, r4, lr} + sub sp, #0x14 + add r4, r0, #0 + ldr r0, [r4, #8] + add r2, sp, #4 + str r0, [sp, #4] + mov r0, #0 + str r0, [sp, #8] + str r0, [sp, #0xc] + ldr r0, [r4, #8] + mov r3, #0x80 + str r0, [sp, #0x10] + ldr r0, [r4, #0x1c] + lsl r1, r0, #2 + ldr r0, _022385CC ; =0x0223CF6C + ldr r0, [r0, r1] + mov r1, #2 + str r0, [sp] + ldr r0, [r4] + bl FUN_02017BD0 + ldr r0, [r4, #0x1c] + add r2, sp, #4 + lsl r1, r0, #2 + ldr r0, _022385CC ; =0x0223CF6C + mov r3, #0x80 + ldr r0, [r0, r1] + mov r1, #6 + str r0, [sp] + ldr r0, [r4] + bl FUN_02017BD0 + add sp, #0x14 + pop {r3, r4, pc} + .align 2, 0 +_022385CC: .word 0x0223CF6C + thumb_func_end MOD81_02238588 + + thumb_func_start MOD81_022385D0 +MOD81_022385D0: ; 0x022385D0 + push {r4, r5, r6, r7, lr} + sub sp, #0x44 + add r5, r0, #0 + ldr r0, [sp, #0x58] + add r4, r1, #0 + str r2, [sp, #0x14] + str r3, [sp, #0x18] + cmp r0, #0 + beq _022385E8 + mov r6, #0x19 + lsl r6, r6, #8 + b _022385EC +_022385E8: + mov r6, #0x32 + lsl r6, r6, #6 +_022385EC: + mov r0, #0x39 + add r1, r6, #0 + bl FUN_020169D8 + add r7, r0, #0 + beq _02238690 + ldr r3, _022386B8 ; =0x0223CF74 + add r2, sp, #0x24 + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + ldmia r3!, {r0, r1} + stmia r2!, {r0, r1} + cmp r4, #0 + ldr r0, [r5] + bne _0223860E + ldr r4, [r0] + b _02238610 +_0223860E: + ldr r4, [r0, #4] +_02238610: + add r0, r4, #0 + bl FUN_02066A6C + str r0, [sp, #0x20] + add r0, sp, #0x34 + add r1, r4, #0 + mov r2, #2 + bl FUN_02068B70 + mov r1, #0 + add r0, r4, #0 + add r2, r1, #0 + bl FUN_020672BC + str r0, [sp, #0x1c] + add r0, r4, #0 + mov r1, #5 + mov r2, #0 + bl FUN_020672BC + lsl r0, r0, #0x10 + ldr r1, [sp, #0x58] + lsr r0, r0, #0x10 + cmp r1, #0 + beq _02238648 + ldr r1, [sp, #0x2c] + lsl r1, r1, #1 + str r1, [sp, #0x2c] +_02238648: + ldr r1, [sp, #0x1c] + str r7, [sp] + str r1, [sp, #4] + ldr r1, [sp, #0x58] + mov r2, #0x39 + str r1, [sp, #8] + mov r1, #2 + str r1, [sp, #0xc] + str r0, [sp, #0x10] + add r1, sp, #0x24 + ldrh r0, [r1, #0x10] + ldrh r1, [r1, #0x12] + add r3, sp, #0x24 + bl FUN_02012530 + add r0, r7, #0 + add r1, r6, #0 + bl DC_FlushRange + ldr r1, [sp, #0x14] + mov r0, #0 + str r0, [sp] + lsl r1, r1, #0x18 + ldr r0, [r5, #8] + lsr r1, r1, #0x18 + add r2, r7, #0 + add r3, r6, #0 + bl FUN_02017E14 + ldr r1, [sp, #0x20] + add r0, r4, #0 + bl FUN_02066A94 + add r0, r7, #0 + bl FUN_02016A18 +_02238690: + ldr r0, [sp, #0x14] + cmp r0, #4 + blo _0223869A + mov r2, #4 + b _0223869C +_0223869A: + mov r2, #0 +_0223869C: + mov r0, #0x20 + str r0, [sp] + mov r0, #0x39 + ldr r3, [sp, #0x18] + str r0, [sp, #4] + add r1, sp, #0x24 + ldrh r0, [r1, #0x10] + ldrh r1, [r1, #0x14] + lsl r3, r3, #5 + bl FUN_02006930 + add sp, #0x44 + pop {r4, r5, r6, r7, pc} + nop +_022386B8: .word 0x0223CF74 + thumb_func_end MOD81_022385D0 + + thumb_func_start MOD81_022386BC +MOD81_022386BC: ; 0x022386BC + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x20 + add r5, r0, #0 + add r4, r2, #0 + add r6, r3, #0 + cmp r1, #0 + bne _022386CE + mov r1, #0xc6 + b _022386DE +_022386CE: + mov r0, #0x52 + lsl r0, r0, #2 + ldr r0, [r5, r0] + cmp r0, #0 + beq _022386DC + mov r1, #0xc7 + b _022386DE +_022386DC: + mov r1, #0xc6 +_022386DE: + mov r0, #0x39 + str r0, [sp] + mov r0, #7 + mov r2, #0 + add r3, sp, #0x1c + bl FUN_02006BDC + add r7, r0, #0 + beq _02238746 + mov r0, #0xa + str r0, [sp] + str r0, [sp, #4] + ldr r0, [sp, #0x1c] + ldr r2, [sp, #0x38] + add r0, #0xc + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + str r0, [sp, #0x10] + mov r0, #0x20 + ldr r3, [sp, #0x3c] + str r0, [sp, #0x14] + str r0, [sp, #0x18] + lsl r1, r4, #0x18 + lsl r2, r2, #0x18 + lsl r3, r3, #0x18 + ldr r0, [r5, #8] + lsr r1, r1, #0x18 + lsr r2, r2, #0x18 + lsr r3, r3, #0x18 + bl FUN_02018170 + mov r0, #0xa + str r0, [sp] + str r0, [sp, #4] + lsl r0, r6, #0x18 + ldr r2, [sp, #0x38] + ldr r3, [sp, #0x3c] + lsr r0, r0, #0x18 + str r0, [sp, #8] + lsl r1, r4, #0x18 + lsl r2, r2, #0x18 + lsl r3, r3, #0x18 + ldr r0, [r5, #8] + lsr r1, r1, #0x18 + lsr r2, r2, #0x18 + lsr r3, r3, #0x18 + bl FUN_020186B4 + add r0, r7, #0 + bl FUN_02016A18 +_02238746: + add sp, #0x20 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD81_022386BC + + thumb_func_start MOD81_0223874C +MOD81_0223874C: ; 0x0223874C + push {r3, r4, r5, r6, lr} + sub sp, #4 + add r5, r0, #0 + add r4, r1, #0 + add r6, r3, #0 + mov r0, #0x3a + add r3, r5, #0 + str r0, [sp] + add r1, r2, #0 + add r0, r4, #0 + mov r2, #1 + add r3, #8 + bl FUN_02006C30 + str r0, [r5] + mov r0, #0x3a + add r3, r5, #0 + str r0, [sp] + add r0, r4, #0 + add r1, r6, #0 + mov r2, #1 + add r3, #0xc + bl FUN_02006C5C + str r0, [r5, #4] + add sp, #4 + pop {r3, r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD81_0223874C + + thumb_func_start MOD81_02238784 +MOD81_02238784: ; 0x02238784 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4] + cmp r0, #0 + beq _02238796 + bl FUN_02016A18 + mov r0, #0 + str r0, [r4] +_02238796: + ldr r0, [r4, #4] + cmp r0, #0 + beq _022387A4 + bl FUN_02016A18 + mov r0, #0 + str r0, [r4, #4] +_022387A4: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_02238784 + + thumb_func_start MOD81_022387A8 +MOD81_022387A8: ; 0x022387A8 + str r2, [r0] + str r3, [r0, #8] + ldr r2, [r1, #8] + str r2, [r0, #0xc] + ldr r1, [r1, #0xc] + ldr r2, [sp] + str r1, [r0, #0x10] + add r1, r0, #0 + add r1, #0x20 + strb r2, [r1] + mov r1, #0 + str r1, [r0, #4] + str r1, [r0, #0x14] + str r1, [r0, #0x18] + str r1, [r0, #0x1c] + bx lr + thumb_func_end MOD81_022387A8 + + thumb_func_start MOD81_022387C8 +MOD81_022387C8: ; 0x022387C8 + push {r4, lr} + sub sp, #0x20 + ldr r0, [r0, #0x18] + str r0, [sp] + lsl r0, r2, #0xc + str r0, [sp, #8] + lsl r0, r3, #0xc + str r0, [sp, #0xc] + mov r0, #0 + str r0, [sp, #0x10] + ldr r0, [sp, #0x28] + str r1, [sp, #4] + str r0, [sp, #0x14] + ldr r0, [sp, #0x2c] + str r0, [sp, #0x18] + mov r0, #0x39 + str r0, [sp, #0x1c] + add r0, sp, #0 + bl FUN_0201FF84 + add r4, r0, #0 + beq _02238804 + mov r1, #1 + bl FUN_020200BC + mov r1, #1 + add r0, r4, #0 + lsl r1, r1, #0xc + bl FUN_020200D8 +_02238804: + add r0, r4, #0 + add sp, #0x20 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_022387C8 + + thumb_func_start MOD81_0223880C +MOD81_0223880C: ; 0x0223880C + ldr r0, [r0, #8] + bx lr + thumb_func_end MOD81_0223880C + + thumb_func_start MOD81_02238810 +MOD81_02238810: ; 0x02238810 + ldr r0, [r0, #0xc] + bx lr + thumb_func_end MOD81_02238810 + + thumb_func_start MOD81_02238814 +MOD81_02238814: ; 0x02238814 + ldr r0, [r0, #0x10] + bx lr + thumb_func_end MOD81_02238814 + + thumb_func_start MOD81_02238818 +MOD81_02238818: ; 0x02238818 + ldr r0, [r0] + ldr r0, [r0] + bx lr + .align 2, 0 + thumb_func_end MOD81_02238818 + + thumb_func_start MOD81_02238820 +MOD81_02238820: ; 0x02238820 + ldr r0, [r0] + ldr r0, [r0, #4] + bx lr + .align 2, 0 + thumb_func_end MOD81_02238820 + + thumb_func_start MOD81_02238828 +MOD81_02238828: ; 0x02238828 + ldr r0, [r0] + ldr r0, [r0, #0xc] + bx lr + .align 2, 0 + thumb_func_end MOD81_02238828 + + thumb_func_start MOD81_02238830 +MOD81_02238830: ; 0x02238830 + mov r1, #0x53 + lsl r1, r1, #2 + ldrh r0, [r0, r1] + bx lr + thumb_func_end MOD81_02238830 + + thumb_func_start MOD81_02238838 +MOD81_02238838: ; 0x02238838 + ldr r1, _02238840 ; =0x0000014E + ldrh r0, [r0, r1] + bx lr + nop +_02238840: .word 0x0000014E + thumb_func_end MOD81_02238838 + + thumb_func_start MOD81_02238844 +MOD81_02238844: ; 0x02238844 + ldr r0, [r0] + ldr r3, _0223884C ; =FUN_02025084 + ldr r0, [r0, #0x14] + bx r3 + .align 2, 0 +_0223884C: .word FUN_02025084 + thumb_func_end MOD81_02238844 + + thumb_func_start MOD81_02238850 +MOD81_02238850: ; 0x02238850 + ldr r0, [r0] + ldr r0, [r0, #0x10] + bx lr + .align 2, 0 + thumb_func_end MOD81_02238850 + + thumb_func_start MOD81_02238858 +MOD81_02238858: ; 0x02238858 + ldr r0, _02238860 ; =0x0223D3C0 + mov r1, #0 + str r1, [r0] + bx lr + .align 2, 0 +_02238860: .word 0x0223D3C0 + thumb_func_end MOD81_02238858 + + thumb_func_start MOD81_02238864 +MOD81_02238864: ; 0x02238864 + push {r4, r5, r6, lr} + ldr r6, _02238890 ; =0x0223D3C0 + ldr r0, [r6] + cmp r0, #0 + beq _0223888C + mov r4, #0 + cmp r0, #0 + ble _02238886 + ldr r5, _02238894 ; =0x0223D3C4 +_02238876: + ldr r0, [r5] + bl FUN_02016A18 + ldr r0, [r6] + add r4, r4, #1 + add r5, r5, #4 + cmp r4, r0 + blt _02238876 +_02238886: + ldr r0, _02238890 ; =0x0223D3C0 + mov r1, #0 + str r1, [r0] +_0223888C: + pop {r4, r5, r6, pc} + nop +_02238890: .word 0x0223D3C0 +_02238894: .word 0x0223D3C4 + thumb_func_end MOD81_02238864 + + thumb_func_start MOD81_02238898 +MOD81_02238898: ; 0x02238898 + push {r4, lr} + add r4, r0, #0 + ldr r0, _022388B8 ; =0x0223D3C0 + ldr r0, [r0] + cmp r0, #0x20 + blt _022388A8 + bl ErrorHandling +_022388A8: + ldr r0, _022388B8 ; =0x0223D3C0 + ldr r2, [r0] + add r1, r2, #1 + str r1, [r0] + ldr r0, _022388BC ; =0x0223D3C4 + lsl r1, r2, #2 + str r4, [r0, r1] + pop {r4, pc} + .align 2, 0 +_022388B8: .word 0x0223D3C0 +_022388BC: .word 0x0223D3C4 + thumb_func_end MOD81_02238898 + + thumb_func_start MOD81_022388C0 +MOD81_022388C0: ; 0x022388C0 + push {r3, r4, r5, r6, r7, lr} + add r7, r0, #0 + add r4, r1, #0 + mov r0, #0x3a + mov r1, #0x20 + add r5, r2, #0 + str r3, [sp] + bl FUN_02016998 + add r6, r0, #0 + beq _02238906 + ldr r3, [sp] + add r1, r4, #0 + add r2, r5, #0 + bl MOD81_02238CA0 + mov r1, #0x8c + mov r0, #0x3a + mul r1, r7 + bl FUN_02016998 + str r0, [r6, #0x18] + mov r4, #0 + str r7, [r6, #0x1c] + cmp r7, #0 + bls _02238906 + add r5, r4, #0 +_022388F6: + ldr r0, [r6, #0x18] + add r0, r0, r5 + bl MOD81_02238A38 + add r4, r4, #1 + add r5, #0x8c + cmp r4, r7 + blo _022388F6 +_02238906: + add r0, r6, #0 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD81_022388C0 + + thumb_func_start MOD81_0223890C +MOD81_0223890C: ; 0x0223890C + push {r4, r5, r6, lr} + add r5, r0, #0 + ldr r0, [r5, #0x1c] + mov r6, #0 + cmp r0, #0 + bls _0223892C + add r4, r6, #0 +_0223891A: + ldr r0, [r5, #0x18] + add r0, r0, r4 + bl MOD81_02238A6C + ldr r0, [r5, #0x1c] + add r6, r6, #1 + add r4, #0x8c + cmp r6, r0 + blo _0223891A +_0223892C: + ldr r0, [r5, #0x18] + bl FUN_02016A18 + add r0, r5, #0 + bl MOD81_02238D0C + add r0, r5, #0 + bl FUN_02016A18 + pop {r4, r5, r6, pc} + thumb_func_end MOD81_0223890C + + thumb_func_start MOD81_02238940 +MOD81_02238940: ; 0x02238940 + push {r3, r4, r5, r6, lr} + sub sp, #4 + mov r1, #0 + add r5, r0, #0 + mov r0, #0x11 + add r2, r1, #0 + bl FUN_020BB1C0 + bl FUN_0201EBA4 + ldr r0, [r5, #0x1c] + mov r6, #0 + cmp r0, #0 + bls _02238976 + add r4, r6, #0 +_0223895E: + ldr r0, [r5, #0x18] + add r0, r0, r4 + ldr r1, [r0, #0x64] + cmp r1, #0 + beq _0223896C + bl MOD81_02238988 +_0223896C: + ldr r0, [r5, #0x1c] + add r6, r6, #1 + add r4, #0x8c + cmp r6, r0 + blo _0223895E +_02238976: + mov r2, #1 + mov r0, #0x12 + add r1, sp, #0 + str r2, [sp] + bl FUN_020BB1C0 + add sp, #4 + pop {r3, r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD81_02238940 + + thumb_func_start MOD81_02238988 +MOD81_02238988: ; 0x02238988 + push {r4, lr} + sub sp, #0x50 + add r4, r0, #0 + add r0, sp, #0x2c + bl MTX_Identity33_ + add r0, r4, #0 + add r0, #0x80 + ldrh r0, [r0] + ldr r3, _02238A34 ; =0x020FFA38 + asr r0, r0, #4 + lsl r2, r0, #1 + lsl r1, r2, #1 + add r2, r2, #1 + lsl r2, r2, #1 + ldrsh r1, [r3, r1] + ldrsh r2, [r3, r2] + add r0, sp, #8 + bl MTX_RotX33_ + add r1, sp, #0x2c + add r0, sp, #8 + add r2, r1, #0 + bl MTX_Concat33 + add r0, r4, #0 + add r0, #0x82 + ldrh r0, [r0] + ldr r3, _02238A34 ; =0x020FFA38 + asr r0, r0, #4 + lsl r2, r0, #1 + lsl r1, r2, #1 + add r2, r2, #1 + lsl r2, r2, #1 + ldrsh r1, [r3, r1] + ldrsh r2, [r3, r2] + add r0, sp, #8 + bl MTX_RotY33_ + add r1, sp, #0x2c + add r0, sp, #8 + add r2, r1, #0 + bl MTX_Concat33 + add r0, r4, #0 + add r0, #0x84 + ldrh r0, [r0] + ldr r3, _02238A34 ; =0x020FFA38 + asr r0, r0, #4 + lsl r2, r0, #1 + lsl r1, r2, #1 + add r2, r2, #1 + lsl r2, r2, #1 + ldrsh r1, [r3, r1] + ldrsh r2, [r3, r2] + add r0, sp, #8 + bl MTX_RotZ33_ + add r1, sp, #0x2c + add r0, sp, #8 + add r2, r1, #0 + bl MTX_Concat33 + add r0, r4, #0 + add r0, #0x88 + ldr r0, [r0] + cmp r0, #0x1f + beq _02238A20 + str r0, [sp] + mov r0, #0 + add r1, r0, #0 + add r2, r0, #0 + add r3, r0, #0 + str r0, [sp, #4] + bl FUN_020B8390 +_02238A20: + add r1, r4, #0 + add r0, r4, #4 + add r4, #0x74 + add r1, #0x68 + add r2, sp, #0x2c + add r3, r4, #0 + bl FUN_0201B26C + add sp, #0x50 + pop {r4, pc} + .align 2, 0 +_02238A34: .word 0x020FFA38 + thumb_func_end MOD81_02238988 + + thumb_func_start MOD81_02238A38 +MOD81_02238A38: ; 0x02238A38 + mov r1, #0 + str r1, [r0, #0x64] + add r2, r0, #0 + str r1, [r0] + add r2, #0x84 + strh r1, [r2] + mov r2, #0x84 + ldrsh r3, [r0, r2] + add r2, r0, #0 + add r2, #0x82 + strh r3, [r2] + mov r2, #0x82 + ldrsh r3, [r0, r2] + add r2, r0, #0 + add r2, #0x80 + strh r3, [r2] + mov r2, #1 + lsl r2, r2, #0xc + str r2, [r0, #0x7c] + str r2, [r0, #0x78] + str r2, [r0, #0x74] + str r1, [r0, #0x70] + str r1, [r0, #0x6c] + str r1, [r0, #0x68] + bx lr + .align 2, 0 + thumb_func_end MOD81_02238A38 + + thumb_func_start MOD81_02238A6C +MOD81_02238A6C: ; 0x02238A6C + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4] + cmp r0, #0 + beq _02238A80 + bl FUN_02016A18 + mov r0, #0 + str r0, [r4] + str r0, [r4, #0x64] +_02238A80: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_02238A6C + + thumb_func_start MOD81_02238A84 +MOD81_02238A84: ; 0x02238A84 + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + ldr r4, [r0, #0x18] + add r6, r1, #0 + mov r0, #0x8c + mul r6, r0 + add r7, r2, #0 + mov r0, #1 + str r0, [sp] + str r3, [sp, #4] + add r1, r3, #0 + add r0, r7, #0 + mov r2, #0 + mov r3, #0x3a + add r5, r4, r6 + bl FUN_02006C98 + str r0, [r4, r6] + ldr r1, [sp, #4] + add r0, r7, #0 + bl LoadFromNARC_7 + add r1, r0, #0 + ldr r0, [r4, r6] + bl DC_FlushRange + ldr r0, [r4, r6] + cmp r0, #0 + beq _02238B02 + bl FUN_020BC13C + str r0, [r5, #0x58] + ldrh r1, [r0, #0xe] + add r1, r0, r1 + ldr r1, [r1, #0xc] + add r0, r0, r1 + str r0, [r5, #0x5c] + ldr r0, [r5] + bl FUN_020BC0FC + str r0, [r5, #0x60] + bl FUN_0201B3C4 + ldr r0, [r5] + ldr r1, [r5, #0x60] + bl FUN_0201B3A8 + ldr r1, [r5, #0x5c] + add r0, r5, #4 + bl FUN_020B80B4 + ldr r0, [sp, #0x20] + mov r1, #0x1f + str r0, [r5, #0x68] + ldr r0, [sp, #0x24] + str r0, [r5, #0x6c] + ldr r0, [sp, #0x28] + str r0, [r5, #0x70] + add r0, r5, #0 + add r0, #0x88 + str r1, [r0] + ldr r0, [sp, #0x2c] + str r0, [r5, #0x64] +_02238B02: + add r0, r5, #0 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD81_02238A84 + + thumb_func_start MOD81_02238B08 +MOD81_02238B08: ; 0x02238B08 + add r2, r0, #0 + add r2, #0x68 + add r3, r1, #0 + ldmia r2!, {r0, r1} + stmia r3!, {r0, r1} + ldr r0, [r2] + str r0, [r3] + bx lr + thumb_func_end MOD81_02238B08 + + thumb_func_start MOD81_02238B18 +MOD81_02238B18: ; 0x02238B18 + add r3, r1, #0 + add r2, r0, #0 + ldmia r3!, {r0, r1} + add r2, #0x68 + stmia r2!, {r0, r1} + ldr r0, [r3] + str r0, [r2] + bx lr + thumb_func_end MOD81_02238B18 + + thumb_func_start MOD81_02238B28 +MOD81_02238B28: ; 0x02238B28 + add r2, r0, #0 + add r2, #0x80 + ldrh r2, [r2] + strh r2, [r1] + add r2, r0, #0 + add r2, #0x82 + ldrh r2, [r2] + add r0, #0x84 + strh r2, [r1, #2] + ldrh r0, [r0] + strh r0, [r1, #4] + bx lr + thumb_func_end MOD81_02238B28 + + thumb_func_start MOD81_02238B40 +MOD81_02238B40: ; 0x02238B40 + ldrh r3, [r1] + add r2, r0, #0 + add r2, #0x80 + strh r3, [r2] + add r2, r0, #0 + ldrh r3, [r1, #2] + add r2, #0x82 + add r0, #0x84 + strh r3, [r2] + ldrh r1, [r1, #4] + strh r1, [r0] + bx lr + thumb_func_end MOD81_02238B40 + + thumb_func_start MOD81_02238B58 +MOD81_02238B58: ; 0x02238B58 + str r1, [r0, #0x64] + bx lr + thumb_func_end MOD81_02238B58 + + thumb_func_start MOD81_02238B5C +MOD81_02238B5C: ; 0x02238B5C + push {r3, lr} + add r2, r0, #0 + add r2, #0x88 + str r1, [r2] + cmp r1, #0x1f + ldr r0, [r0, #0x5c] + beq _02238B76 + mov r2, #0x1f + mov r1, #0 + lsl r2, r2, #0x10 + bl FUN_020BC02C + pop {r3, pc} +_02238B76: + mov r2, #0x1f + mov r1, #1 + lsl r2, r2, #0x10 + bl FUN_020BC02C + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD81_02238B5C + + thumb_func_start MOD81_02238B84 +MOD81_02238B84: ; 0x02238B84 + str r1, [r0, #0x74] + str r1, [r0, #0x78] + str r1, [r0, #0x7c] + bx lr + thumb_func_end MOD81_02238B84 + + thumb_func_start MOD81_02238B8C +MOD81_02238B8C: ; 0x02238B8C + push {r3, r4, lr} + sub sp, #0x4c + add r4, r0, #0 + add r0, sp, #0x28 + bl MTX_Identity33_ + add r0, r4, #0 + add r0, #0x80 + ldrh r0, [r0] + ldr r3, _02238C3C ; =0x020FFA38 + asr r0, r0, #4 + lsl r2, r0, #1 + lsl r1, r2, #1 + add r2, r2, #1 + lsl r2, r2, #1 + ldrsh r1, [r3, r1] + ldrsh r2, [r3, r2] + add r0, sp, #4 + bl MTX_RotX33_ + add r1, sp, #0x28 + add r0, sp, #4 + add r2, r1, #0 + bl MTX_Concat33 + add r0, r4, #0 + add r0, #0x82 + ldrh r0, [r0] + ldr r3, _02238C3C ; =0x020FFA38 + asr r0, r0, #4 + lsl r2, r0, #1 + lsl r1, r2, #1 + add r2, r2, #1 + lsl r2, r2, #1 + ldrsh r1, [r3, r1] + ldrsh r2, [r3, r2] + add r0, sp, #4 + bl MTX_RotY33_ + add r1, sp, #0x28 + add r0, sp, #4 + add r2, r1, #0 + bl MTX_Concat33 + add r0, r4, #0 + add r0, #0x84 + ldrh r0, [r0] + ldr r3, _02238C3C ; =0x020FFA38 + asr r0, r0, #4 + lsl r2, r0, #1 + lsl r1, r2, #1 + add r2, r2, #1 + lsl r2, r2, #1 + ldrsh r1, [r3, r1] + ldrsh r2, [r3, r2] + add r0, sp, #4 + bl MTX_RotZ33_ + add r1, sp, #0x28 + add r0, sp, #4 + add r2, r1, #0 + bl MTX_Concat33 + mov r1, #0 + mov r0, #0x11 + add r2, r1, #0 + bl FUN_020BB1C0 + bl FUN_0201EBA4 + add r1, r4, #0 + ldr r0, [r4, #0x5c] + add r4, #0x74 + add r1, #0x68 + add r2, sp, #0x28 + add r3, r4, #0 + bl FUN_0201B6D0 + add r4, r0, #0 + mov r2, #1 + mov r0, #0x12 + add r1, sp, #0 + str r2, [sp] + bl FUN_020BB1C0 + add r0, r4, #0 + add sp, #0x4c + pop {r3, r4, pc} + .align 2, 0 +_02238C3C: .word 0x020FFA38 + thumb_func_end MOD81_02238B8C + + thumb_func_start MOD81_02238C40 +MOD81_02238C40: ; 0x02238C40 + push {r3, r4, lr} + sub sp, #0xc + add r2, r0, #0 + add r4, r1, #0 + ldr r1, [r2] + add r0, sp, #0 + bl FUN_0201F03C + add r2, sp, #0 + ldmia r2!, {r0, r1} + stmia r4!, {r0, r1} + ldr r0, [r2] + str r0, [r4] + add sp, #0xc + pop {r3, r4, pc} + .align 2, 0 + thumb_func_end MOD81_02238C40 + + thumb_func_start MOD81_02238C60 +MOD81_02238C60: ; 0x02238C60 + ldr r3, _02238C6C ; =FUN_0201EF90 + add r2, r0, #0 + add r0, r1, #0 + ldr r1, [r2] + bx r3 + nop +_02238C6C: .word FUN_0201EF90 + thumb_func_end MOD81_02238C60 + + thumb_func_start MOD81_02238C70 +MOD81_02238C70: ; 0x02238C70 + ldr r3, _02238C7C ; =FUN_0201EFB4 + add r2, r0, #0 + add r0, r1, #0 + ldr r1, [r2] + bx r3 + nop +_02238C7C: .word FUN_0201EFB4 + thumb_func_end MOD81_02238C70 + + thumb_func_start MOD81_02238C80 +MOD81_02238C80: ; 0x02238C80 + ldr r3, _02238C8C ; =FUN_0201EE2C + add r2, r0, #0 + add r0, r1, #0 + ldr r1, [r2] + bx r3 + nop +_02238C8C: .word FUN_0201EE2C + thumb_func_end MOD81_02238C80 + + thumb_func_start MOD81_02238C90 +MOD81_02238C90: ; 0x02238C90 + ldr r3, _02238C9C ; =FUN_0201EEF0 + add r2, r0, #0 + add r0, r1, #0 + ldr r1, [r2] + bx r3 + nop +_02238C9C: .word FUN_0201EEF0 + thumb_func_end MOD81_02238C90 + + thumb_func_start MOD81_02238CA0 +MOD81_02238CA0: ; 0x02238CA0 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x18 + add r5, r0, #0 + mov r0, #0x3a + add r4, r1, #0 + add r6, r2, #0 + add r7, r3, #0 + bl FUN_0201EB64 + str r0, [r5] + str r4, [r5, #4] + str r6, [r5, #8] + mov r1, #0x4b + add r2, r5, #0 + str r7, [r5, #0xc] + mov r0, #0 + strh r0, [r5, #0x10] + strh r0, [r5, #0x12] + strh r0, [r5, #0x14] + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r5] + ldr r3, _02238D08 ; =0x00000FA4 + str r0, [sp, #8] + add r0, r5, #4 + lsl r1, r1, #0xe + add r2, #0x10 + bl FUN_0201ECA8 + mov r1, #0 + mov r0, #1 + lsl r0, r0, #0xc + str r0, [sp, #0x10] + str r1, [sp, #0xc] + str r1, [sp, #0x14] + ldr r1, [r5] + add r0, sp, #0xc + bl FUN_0201EC58 + ldr r0, [r5] + bl FUN_0201EB8C + mov r1, #0xfa + ldr r2, [r5] + mov r0, #0 + lsl r1, r1, #0xe + bl FUN_0201EC94 + add sp, #0x18 + pop {r3, r4, r5, r6, r7, pc} + nop +_02238D08: .word 0x00000FA4 + thumb_func_end MOD81_02238CA0 + + thumb_func_start MOD81_02238D0C +MOD81_02238D0C: ; 0x02238D0C + ldr r3, _02238D14 ; =FUN_0201EB70 + ldr r0, [r0] + bx r3 + nop +_02238D14: .word FUN_0201EB70 + thumb_func_end MOD81_02238D0C + + thumb_func_start MOD81_02238D18 +MOD81_02238D18: ; 0x02238D18 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r0, #0x3a + mov r1, #0x6c + bl FUN_02016998 + add r4, r0, #0 + beq _02238D60 + str r5, [r4] + mov r0, #0 + str r0, [r4, #4] + add r0, r5, #0 + bl MOD81_0223880C + str r0, [r4, #0x40] + mov r0, #0x3a + bl FUN_02006D98 + str r0, [r4, #0xc] + mov r0, #0 + str r0, [r4, #0x10] + mov r0, #0x4b + lsl r0, r0, #2 + mov r1, #0x3a + bl FUN_020219F4 + str r0, [r4, #0x54] + mov r0, #0x4b + lsl r0, r0, #2 + mov r1, #0x3a + bl FUN_020219F4 + str r0, [r4, #0x58] + mov r0, #0 + str r0, [r4, #0x64] + str r0, [r4, #0x68] +_02238D60: + add r0, r4, #0 + pop {r3, r4, r5, pc} + thumb_func_end MOD81_02238D18 + + thumb_func_start MOD81_02238D64 +MOD81_02238D64: ; 0x02238D64 + push {r4, lr} + add r4, r0, #0 + beq _02238DC2 + bl MOD81_0223951C + add r0, r4, #0 + bl MOD81_022395E8 + add r0, r4, #0 + bl MOD81_02239498 + ldr r0, [r4, #0x54] + bl FUN_02021A20 + ldr r0, [r4, #0x58] + bl FUN_02021A20 + ldr r0, [r4, #0x5c] + bl MOD81_0223890C + ldr r0, [r4, #0x40] + mov r1, #1 + bl FUN_020178A0 + ldr r0, [r4, #0x40] + mov r1, #2 + bl FUN_020178A0 + ldr r0, [r4, #0x40] + mov r1, #6 + bl FUN_020178A0 + add r0, r4, #0 + add r0, #0x44 + bl FUN_02019178 + ldr r0, [r4, #0x10] + cmp r0, #0 + beq _02238DB6 + bl FUN_02007534 +_02238DB6: + ldr r0, [r4, #0xc] + bl FUN_020072E8 + add r0, r4, #0 + bl FUN_02016A18 +_02238DC2: + pop {r4, pc} + thumb_func_end MOD81_02238D64 + + thumb_func_start MOD81_02238DC4 +MOD81_02238DC4: ; 0x02238DC4 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldr r2, [r4] + add r5, r0, #0 + cmp r2, #4 + bhs _02238DF2 + lsl r3, r2, #2 + ldr r2, _02238DF8 ; =0x0223CFFC + add r1, r5, #4 + ldr r2, [r2, r3] + blx r2 + cmp r0, #0 + beq _02238DE8 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + mov r0, #0 + str r0, [r5, #4] +_02238DE8: + add r0, r5, #0 + bl MOD81_02238DFC + mov r0, #0 + pop {r3, r4, r5, pc} +_02238DF2: + mov r0, #1 + pop {r3, r4, r5, pc} + nop +_02238DF8: .word 0x0223CFFC + thumb_func_end MOD81_02238DC4 + + thumb_func_start MOD81_02238DFC +MOD81_02238DFC: ; 0x02238DFC + push {r3, r4, lr} + sub sp, #4 + add r4, r0, #0 + bl G3X_ResetMtxStack + mov r1, #0 + mov r0, #0x11 + add r2, r1, #0 + bl FUN_020BB1C0 + bl FUN_020BB394 + bl FUN_020B02C8 + ldr r0, [r4, #0xc] + bl FUN_020081C4 + ldr r0, [r4, #0xc] + bl FUN_02006ED4 + mov r2, #1 + str r2, [sp] + mov r0, #0x12 + add r1, sp, #0 + bl FUN_020BB1C0 + ldr r0, [r4, #0x5c] + bl MOD81_02238940 + mov r0, #0 + add r1, r0, #0 + bl FUN_020222B4 + add sp, #4 + pop {r3, r4, pc} + .align 2, 0 + thumb_func_end MOD81_02238DFC + + thumb_func_start MOD81_02238E44 +MOD81_02238E44: ; 0x02238E44 + push {r3, r4, lr} + sub sp, #0x1c + add r4, r0, #0 + ldr r0, _02239040 ; =0x0223D054 + bl FUN_0201E66C + ldr r2, _02239044 ; =0x04000304 + ldr r0, _02239048 ; =0xFFFF7FFF + ldrh r1, [r2] + and r0, r1 + strh r0, [r2] + ldr r0, _0223904C ; =0x0223D00C + bl FUN_02016BBC + ldr r0, [r4, #0x40] + ldr r2, _02239050 ; =0x0223D01C + mov r1, #1 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0x40] + ldr r2, _02239054 ; =0x0223D038 + mov r1, #2 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0x40] + ldr r2, _02239054 ; =0x0223D038 + mov r1, #6 + mov r3, #0 + bl FUN_02016C18 + mov r0, #1 + add r1, r0, #0 + bl FUN_0201E6E4 + ldr r2, _02239058 ; =0x04000008 + mov r0, #3 + ldrh r3, [r2] + mov r1, #1 + bic r3, r0 + add r0, r3, #0 + orr r0, r1 + strh r0, [r2] + mov r2, #0 + str r2, [sp] + ldr r0, [r4, #0x40] + add r3, r1, #0 + bl FUN_02017F48 + mov r2, #0 + str r2, [sp] + mov r0, #0x20 + str r0, [sp, #4] + str r0, [sp, #8] + str r2, [sp, #0xc] + ldr r0, [r4, #0x40] + mov r1, #1 + add r3, r2, #0 + bl FUN_02018540 + ldr r0, [r4] + bl MOD81_02238844 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #0x3a + str r0, [sp, #4] + ldr r0, [r4, #0x40] + mov r1, #1 + mov r2, #0x6d + mov r3, #2 + bl FUN_0200CD68 + mov r0, #0x13 + str r0, [sp] + mov r0, #0x1b + str r0, [sp, #4] + mov r0, #4 + add r1, r4, #0 + str r0, [sp, #8] + mov r2, #1 + str r2, [sp, #0xc] + str r2, [sp, #0x10] + ldr r0, [r4, #0x40] + add r1, #0x44 + mov r3, #2 + bl FUN_02019064 + add r0, r4, #0 + add r0, #0x44 + mov r1, #0xf + bl FUN_02019620 + mov r3, #0x20 + str r3, [sp] + mov r0, #0x3a + str r0, [sp, #4] + mov r0, #0xe + mov r1, #7 + mov r2, #0 + bl FUN_02006930 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0x40] + mov r0, #0x5d + mov r1, #0x16 + mov r3, #2 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0x40] + mov r0, #0x5d + mov r1, #0x15 + mov r3, #2 + bl FUN_020068C8 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x3a + mov r2, #0 + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #0x17 + add r3, r2, #0 + bl FUN_02006930 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0x40] + mov r0, #0x5d + mov r1, #0x16 + mov r3, #6 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0x40] + mov r0, #0x5d + mov r1, #0x15 + mov r3, #6 + bl FUN_020068C8 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x3a + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #0x17 + mov r2, #4 + mov r3, #0 + bl FUN_02006930 + ldr r0, [r4, #0x40] + mov r1, #1 + bl FUN_02017CD0 + add r0, r4, #0 + bl MOD81_022392D8 + mov r1, #0 + mov r0, #1 + add r2, r1, #0 + add r3, r1, #0 + bl MOD81_022388C0 + str r0, [r4, #0x5c] + add r0, r4, #0 + bl MOD81_022393A4 + str r0, [r4, #0x10] + mov r1, #0 + mov r0, #0x6a + str r1, [sp] + lsl r0, r0, #0xa + str r0, [sp, #4] + ldr r0, _0223905C ; =0x00073800 + mov r2, #0x5d + str r0, [sp, #8] + str r1, [sp, #0xc] + ldr r0, [r4, #0x5c] + mov r3, #0x1b + bl MOD81_02238A84 + ldr r2, _02239060 ; =0x0223CFF4 + str r0, [r4, #0x60] + ldrh r3, [r2] + add r0, sp, #0x14 + add r1, sp, #0x14 + strh r3, [r0] + ldrh r3, [r2, #2] + ldrh r2, [r2, #4] + strh r3, [r0, #2] + strh r2, [r0, #4] + ldr r0, [r4, #0x60] + bl MOD81_02238B40 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E6E4 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E74C + add r0, r4, #0 + bl MOD81_022393F4 + ldr r0, _02239064 ; =0x04000050 + mov r1, #0 + strh r1, [r0] + bl FUN_02033E74 + mov r0, #1 + mov r1, #0x39 + bl FUN_02033F04 + mov r0, #0x10 + str r0, [sp] + mov r1, #1 + str r1, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0 + add r2, r1, #0 + add r3, r0, #0 + bl FUN_0200E1D0 + mov r0, #1 + add sp, #0x1c + pop {r3, r4, pc} + .align 2, 0 +_02239040: .word 0x0223D054 +_02239044: .word 0x04000304 +_02239048: .word 0xFFFF7FFF +_0223904C: .word 0x0223D00C +_02239050: .word 0x0223D01C +_02239054: .word 0x0223D038 +_02239058: .word 0x04000008 +_0223905C: .word 0x00073800 +_02239060: .word 0x0223CFF4 +_02239064: .word 0x04000050 + thumb_func_end MOD81_02238E44 + + thumb_func_start MOD81_02239068 +MOD81_02239068: ; 0x02239068 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r1] + cmp r0, #0 + bne _0223908E + bl FUN_0200E308 + cmp r0, #0 + beq _0223908E + ldr r0, [r4, #0x28] + mov r1, #1 + bl FUN_02020130 + ldr r0, [r4, #0x28] + mov r1, #1 + bl FUN_020200A0 + mov r0, #1 + pop {r4, pc} +_0223908E: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_02239068 + + thumb_func_start MOD81_02239094 +MOD81_02239094: ; 0x02239094 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r5, r1, #0 + add r4, r0, #0 + ldr r0, [r5] + cmp r0, #4 + bhi _022390CE + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_022390AE: ; jump table + .short _022390B8 - _022390AE - 2 ; case 0 + .short _022390C4 - _022390AE - 2 ; case 1 + .short _02239138 - _022390AE - 2 ; case 2 + .short _022391BE - _022390AE - 2 ; case 3 + .short _022391DE - _022390AE - 2 ; case 4 +_022390B8: + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _022391EE +_022390C4: + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + cmp r0, #0xa + bgt _022390D0 +_022390CE: + b _022391EE +_022390D0: + ldr r0, [r4] + bl MOD81_02238814 + str r0, [sp, #0xc] + ldr r0, [r4] + bl MOD81_02238810 + add r7, r0, #0 + ldr r0, [r4] + bl MOD81_02238850 + cmp r0, #1 + bne _022390F0 + mov r1, #0 + mov r6, #2 + b _022390F4 +_022390F0: + mov r1, #4 + mov r6, #3 +_022390F4: + ldr r0, [sp, #0xc] + ldr r2, [r4, #0x54] + bl FUN_0200A8E0 + ldr r1, [r4, #0x58] + ldr r2, [r4, #0x54] + add r0, r7, #0 + bl FUN_0200B7B8 + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r3, [sp, #8] + add r0, r4, #0 + ldr r2, [r4, #0x58] + add r0, #0x44 + mov r1, #1 + bl FUN_0201BD84 + add r0, r4, #0 + add r0, #0x44 + mov r1, #0x6d + mov r2, #2 + bl FUN_0200D06C + add r0, r4, #0 + add r0, #0x44 + bl FUN_020191D0 + mov r0, #0 + str r0, [r4, #8] + str r6, [r5] + b _022391EE +_02239138: + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + cmp r0, #0x3c + ble _022391EE + ldr r0, [r4] + bl MOD81_02238814 + add r6, r0, #0 + ldr r0, [r4] + bl MOD81_02238810 + add r7, r0, #0 + ldr r2, [r4, #0x54] + add r0, r6, #0 + mov r1, #1 + bl FUN_0200A8E0 + ldr r1, [r4, #0x58] + ldr r2, [r4, #0x54] + add r0, r7, #0 + bl FUN_0200B7B8 + ldr r0, [r4] + bl MOD81_02238818 + mov r1, #0x4c + mov r2, #0 + bl FUN_020672BC + cmp r0, #0 + bne _0223918A + ldr r0, [r4, #0x10] + mov r1, #1 + bl FUN_02007314 + ldr r0, [r4] + bl MOD81_02238830 + bl FUN_02005578 +_0223918A: + add r0, r4, #0 + add r0, #0x44 + mov r1, #0xf + bl FUN_02019620 + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r3, [sp, #8] + add r0, r4, #0 + ldr r2, [r4, #0x58] + add r0, #0x44 + mov r1, #1 + bl FUN_0201BD84 + add r0, r4, #0 + add r0, #0x44 + bl FUN_02019548 + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _022391EE +_022391BE: + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + cmp r0, #0x3c + ble _022391EE + add r0, r4, #0 + add r0, #0x44 + mov r1, #0 + bl FUN_0200D0E0 + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _022391EE +_022391DE: + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + cmp r0, #0x14 + ble _022391EE + add sp, #0x10 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_022391EE: + mov r0, #0 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD81_02239094 + + thumb_func_start MOD81_022391F4 +MOD81_022391F4: ; 0x022391F4 + push {r4, r5, lr} + sub sp, #0xc + add r4, r1, #0 + ldr r1, [r4] + add r5, r0, #0 + cmp r1, #4 + bhi _022392CE + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_0223920E: ; jump table + .short _02239218 - _0223920E - 2 ; case 0 + .short _02239232 - _0223920E - 2 ; case 1 + .short _02239258 - _0223920E - 2 ; case 2 + .short _02239284 - _0223920E - 2 ; case 3 + .short _022392B6 - _0223920E - 2 ; case 4 +_02239218: + ldr r0, _022392D4 ; =0x000006A8 + bl FUN_020054C8 + add r0, r5, #0 + mov r1, #0 + mov r2, #0x10 + mov r3, #0xc + bl MOD81_022394BC + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _022392CE +_02239232: + bl MOD81_0223950C + cmp r0, #0 + beq _022392CE + ldr r0, [r5, #0x10] + bl FUN_02007534 + ldr r0, [r5, #0x2c] + mov r1, #0 + bl FUN_02020130 + ldr r0, [r5, #0x2c] + mov r1, #1 + bl FUN_020200A0 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _022392CE +_02239258: + ldr r0, [r5, #0x2c] + bl FUN_02020388 + cmp r0, #0 + bne _022392CE + ldr r0, [r5, #0x60] + mov r1, #1 + bl MOD81_02238B58 + mov r1, #0x10 + add r0, r5, #0 + mov r2, #0 + add r3, r1, #0 + bl MOD81_022394BC + add r0, r5, #0 + bl MOD81_02239578 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _022392CE +_02239284: + bl MOD81_022395D4 + cmp r0, #2 + bge _02239296 + add r0, r5, #0 + bl MOD81_022395C4 + cmp r0, #1 + bne _022392CE +_02239296: + mov r0, #0x18 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0 + add r1, r0, #0 + add r2, r0, #0 + add r3, r0, #0 + bl FUN_0200E1D0 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _022392CE +_022392B6: + bl FUN_0200E308 + cmp r0, #0 + beq _022392CE + add r0, r5, #0 + bl MOD81_022395C4 + cmp r0, #0 + beq _022392CE + add sp, #0xc + mov r0, #1 + pop {r4, r5, pc} +_022392CE: + mov r0, #0 + add sp, #0xc + pop {r4, r5, pc} + .align 2, 0 +_022392D4: .word 0x000006A8 + thumb_func_end MOD81_022391F4 + + thumb_func_start MOD81_022392D8 +MOD81_022392D8: ; 0x022392D8 + push {r3, r4, r5, r6, lr} + sub sp, #4 + add r5, r0, #0 + bl FUN_020BB7F4 + bl G3X_InitMtxStack + ldr r0, _02239380 ; =0x04000060 + ldr r2, _02239384 ; =0xFFFFCFFD + ldrh r1, [r0] + and r1, r2 + strh r1, [r0] + ldrh r3, [r0] + add r1, r2, #2 + and r3, r1 + mov r1, #0x10 + orr r1, r3 + strh r1, [r0] + ldrh r3, [r0] + ldr r1, _02239388 ; =0x0000CFFB + and r1, r3 + strh r1, [r0] + add r1, r2, #2 + ldrh r3, [r0] + lsr r2, r2, #0x11 + and r3, r1 + mov r1, #8 + orr r1, r3 + strh r1, [r0] + mov r0, #0 + add r1, r0, #0 + mov r3, #0x3f + str r0, [sp] + bl G3X_SetClearColor + ldr r1, _0223938C ; =0x04000540 + mov r0, #2 + str r0, [r1] + ldr r0, _02239390 ; =0xBFFF0000 + str r0, [r1, #0x40] + mov r0, #1 + add r1, r0, #0 + bl FUN_020AEB70 + mov r0, #1 + lsl r0, r0, #0xe + mov r1, #1 + bl FUN_020AEDF4 + ldr r3, _02239394 ; =0x021064B8 + mov r0, #1 + mov r1, #0 + ldr r3, [r3] + lsl r0, r0, #0xe + add r2, r1, #0 + blx r3 + ldr r3, _02239398 ; =0x021064C0 + add r4, r0, #0 + ldr r3, [r3] + mov r0, #0x80 + mov r1, #0 + mov r2, #1 + blx r3 + ldr r2, _0223939C ; =0x7FFF0000 + add r6, r0, #0 + and r2, r4 + lsl r1, r4, #0x10 + lsr r2, r2, #0x10 + ldr r0, [r5, #0xc] + lsr r1, r1, #0xd + lsl r2, r2, #4 + bl FUN_020081A8 + ldr r2, _022393A0 ; =0xFFFF0000 + lsl r1, r6, #0x10 + and r2, r6 + lsr r2, r2, #0x10 + ldr r0, [r5, #0xc] + lsr r1, r1, #0xd + lsl r2, r2, #3 + bl FUN_020081B4 + add sp, #4 + pop {r3, r4, r5, r6, pc} + .align 2, 0 +_02239380: .word 0x04000060 +_02239384: .word 0xFFFFCFFD +_02239388: .word 0x0000CFFB +_0223938C: .word 0x04000540 +_02239390: .word 0xBFFF0000 +_02239394: .word 0x021064B8 +_02239398: .word 0x021064C0 +_0223939C: .word 0x7FFF0000 +_022393A0: .word 0xFFFF0000 + thumb_func_end MOD81_022392D8 + + thumb_func_start MOD81_022393A4 +MOD81_022393A4: ; 0x022393A4 + push {r3, r4, r5, lr} + sub sp, #0x20 + add r4, r0, #0 + ldr r0, [r4] + bl MOD81_02238818 + add r5, r0, #0 + add r0, sp, #0x10 + add r1, r5, #0 + mov r2, #2 + bl FUN_02068B70 + ldr r0, [r4] + bl MOD81_02238830 + add r1, r0, #0 + add r0, r4, #0 + add r0, #0x14 + bl FUN_02069010 + add r0, r5, #0 + mov r1, #2 + bl FUN_02068E1C + add r3, r0, #0 + mov r1, #0 + str r1, [sp] + add r0, r4, #0 + str r1, [sp, #4] + add r0, #0x14 + str r0, [sp, #8] + str r1, [sp, #0xc] + ldr r0, [r4, #0xc] + add r3, #0x50 + add r1, sp, #0x10 + mov r2, #0x80 + bl FUN_020073A0 + add sp, #0x20 + pop {r3, r4, r5, pc} + thumb_func_end MOD81_022393A4 + + thumb_func_start MOD81_022393F4 +MOD81_022393F4: ; 0x022393F4 + push {r4, lr} + sub sp, #0x70 + add r4, r0, #0 + add r0, #0x30 + mov r1, #0x5d + mov r2, #7 + mov r3, #8 + bl MOD81_0223874C + add r0, sp, #0x5c + bl FUN_020B19DC + add r0, sp, #0x38 + bl FUN_020B1A24 + mov r3, #0 + str r3, [sp] + mov r2, #1 + str r2, [sp, #4] + str r3, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + add r0, sp, #0x38 + str r0, [sp, #0x10] + mov r0, #0x5d + mov r1, #9 + bl FUN_02006AE4 + mov r0, #0x3a + str r0, [sp] + add r0, sp, #0x5c + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #0xa + mov r2, #1 + mov r3, #0 + bl FUN_02006A8C + mov r0, #2 + add r1, r4, #0 + str r0, [sp] + add r0, sp, #0x14 + add r1, #0x30 + add r2, sp, #0x38 + add r3, sp, #0x5c + bl MOD81_022387A8 + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r4] + add r1, sp, #0x14 + mov r2, #0x80 + mov r3, #0x64 + bl MOD81_022387C8 + str r0, [r4, #0x28] + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r4] + add r1, sp, #0x14 + mov r2, #0x80 + mov r3, #0x5a + bl MOD81_022387C8 + str r0, [r4, #0x2c] + mov r1, #1 + bl FUN_02020238 + ldr r0, [r4, #0x28] + mov r1, #0 + bl FUN_020200A0 + ldr r0, [r4, #0x2c] + mov r1, #0 + bl FUN_020200A0 + add sp, #0x70 + pop {r4, pc} + thumb_func_end MOD81_022393F4 + + thumb_func_start MOD81_02239498 +MOD81_02239498: ; 0x02239498 + push {r4, r5, r6, lr} + add r6, r0, #0 + mov r4, #0 + add r5, r6, #0 +_022394A0: + ldr r0, [r5, #0x28] + cmp r0, #0 + beq _022394AA + bl FUN_0201FFC8 +_022394AA: + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #2 + blt _022394A0 + add r6, #0x30 + add r0, r6, #0 + bl MOD81_02238784 + pop {r4, r5, r6, pc} + thumb_func_end MOD81_02239498 + + thumb_func_start MOD81_022394BC +MOD81_022394BC: ; 0x022394BC + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #0x3a + mov r1, #0x14 + str r2, [sp] + add r7, r3, #0 + bl FUN_02016998 + add r4, r0, #0 + beq _02239502 + str r5, [r4] + lsl r0, r6, #0xc + str r0, [r4, #4] + ldr r0, [sp] + lsl r1, r0, #0xc + str r1, [r4, #8] + ldr r0, [r4, #4] + sub r0, r1, r0 + add r1, r7, #0 + bl _s32_div_f + str r0, [r4, #0xc] + ldr r0, _02239504 ; =MOD81_0223953C + str r7, [r4, #0x10] + add r1, r4, #0 + mov r2, #0 + bl FUN_0200CA60 + str r0, [r5, #0x64] + ldr r0, _02239508 ; =0x04000050 + mov r1, #1 + add r2, r6, #0 + bl G2x_SetBlendBrightness_ +_02239502: + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_02239504: .word MOD81_0223953C +_02239508: .word 0x04000050 + thumb_func_end MOD81_022394BC + + thumb_func_start MOD81_0223950C +MOD81_0223950C: ; 0x0223950C + ldr r0, [r0, #0x64] + cmp r0, #0 + bne _02239516 + mov r0, #1 + bx lr +_02239516: + mov r0, #0 + bx lr + .align 2, 0 + thumb_func_end MOD81_0223950C + + thumb_func_start MOD81_0223951C +MOD81_0223951C: ; 0x0223951C + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x64] + cmp r0, #0 + beq _02239538 + bl FUN_0201B6C8 + bl MOD81_02238898 + ldr r0, [r4, #0x64] + bl FUN_0200CAB4 + mov r0, #0 + str r0, [r4, #0x64] +_02239538: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223951C + + thumb_func_start MOD81_0223953C +MOD81_0223953C: ; 0x0223953C + push {r4, lr} + add r4, r1, #0 + ldr r0, [r4, #0x10] + sub r0, r0, #1 + str r0, [r4, #0x10] + cmp r0, #0 + ble _0223955E + ldr r1, [r4, #4] + ldr r0, [r4, #0xc] + add r2, r1, r0 + str r2, [r4, #4] + ldr r0, _02239574 ; =0x04000050 + mov r1, #1 + asr r2, r2, #0xc + bl G2x_SetBlendBrightness_ + pop {r4, pc} +_0223955E: + ldr r2, [r4, #8] + ldr r0, _02239574 ; =0x04000050 + mov r1, #1 + asr r2, r2, #0xc + bl G2x_SetBlendBrightness_ + ldr r0, [r4] + bl MOD81_0223951C + pop {r4, pc} + nop +_02239574: .word 0x04000050 + thumb_func_end MOD81_0223953C + + thumb_func_start MOD81_02239578 +MOD81_02239578: ; 0x02239578 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r0, #0x3a + mov r1, #0x30 + bl FUN_02016998 + add r4, r0, #0 + beq _022395B8 + str r5, [r4] + ldr r0, [r5, #0x60] + add r1, r4, #0 + str r0, [r4, #4] + add r1, #8 + bl MOD81_02238B08 + add r1, r4, #0 + ldr r0, [r4, #4] + add r1, #0x14 + bl MOD81_02238B28 + ldr r0, _022395BC ; =0x00002F60 + mov r2, #0 + str r0, [r4, #0x1c] + str r2, [r4, #0x20] + strh r2, [r4, #0x2c] + str r2, [r4, #0x24] + ldr r0, _022395C0 ; =MOD81_02239608 + add r1, r4, #0 + str r2, [r4, #0x28] + bl FUN_0200CA44 + str r0, [r5, #0x68] +_022395B8: + pop {r3, r4, r5, pc} + nop +_022395BC: .word 0x00002F60 +_022395C0: .word MOD81_02239608 + thumb_func_end MOD81_02239578 + + thumb_func_start MOD81_022395C4 +MOD81_022395C4: ; 0x022395C4 + ldr r0, [r0, #0x68] + cmp r0, #0 + bne _022395CE + mov r0, #1 + bx lr +_022395CE: + mov r0, #0 + bx lr + .align 2, 0 + thumb_func_end MOD81_022395C4 + + thumb_func_start MOD81_022395D4 +MOD81_022395D4: ; 0x022395D4 + push {r3, lr} + ldr r0, [r0, #0x68] + cmp r0, #0 + beq _022395E4 + bl FUN_0201B6C8 + ldr r0, [r0, #0x20] + pop {r3, pc} +_022395E4: + mov r0, #0 + pop {r3, pc} + thumb_func_end MOD81_022395D4 + + thumb_func_start MOD81_022395E8 +MOD81_022395E8: ; 0x022395E8 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x68] + cmp r0, #0 + beq _02239604 + bl FUN_0201B6C8 + bl FUN_02016A18 + ldr r0, [r4, #0x68] + bl FUN_0200CAB4 + mov r0, #0 + str r0, [r4, #0x68] +_02239604: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_022395E8 + + thumb_func_start MOD81_02239608 +MOD81_02239608: ; 0x02239608 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldr r0, [r4, #0x24] + cmp r0, #0 + bne _0223967C + ldr r1, [r4, #0xc] + ldr r0, [r4, #0x1c] + add r0, r1, r0 + str r0, [r4, #0xc] + ldr r1, [r4, #0x1c] + cmp r1, #0 + blt _0223962A + mov r0, #0x1e + lsl r0, r0, #6 + sub r0, r1, r0 + str r0, [r4, #0x1c] + b _0223967C +_0223962A: + mov r0, #0x1e + lsl r0, r0, #6 + sub r0, r1, r0 + str r0, [r4, #0x1c] + ldr r1, [r4, #0xc] + ldr r0, _022396E0 ; =0xFFFFC000 + cmp r1, r0 + bgt _0223967C + str r0, [r4, #0xc] + ldr r1, [r4, #0x1c] + mov r0, #0x2c + mul r0, r1 + mov r1, #0x64 + bl _s32_div_f + neg r1, r0 + mov r0, #0xfa + lsl r0, r0, #4 + str r1, [r4, #0x1c] + cmp r1, r0 + bge _02239658 + mov r0, #1 + str r0, [r4, #0x24] +_02239658: + ldr r0, _022396E4 ; =0x000005E6 + bl FUN_020054C8 + ldr r0, [r4, #0x20] + add r0, r0, #1 + str r0, [r4, #0x20] + cmp r0, #1 + beq _0223966E + cmp r0, #3 + beq _02239674 + b _0223967C +_0223966E: + mov r0, #0xb0 + strh r0, [r4, #0x2c] + b _0223967C +_02239674: + mov r0, #0x2c + ldrsh r0, [r4, r0] + add r0, #0x50 + strh r0, [r4, #0x2c] +_0223967C: + mov r0, #0x14 + mov r2, #0x2c + ldrsh r3, [r4, r0] + ldrsh r0, [r4, r2] + add r1, r4, #0 + add r1, #0x14 + add r0, r3, r0 + strh r0, [r4, #0x14] + mov r0, #0x18 + ldrsh r3, [r4, r0] + ldrsh r0, [r4, r2] + sub r0, r3, r0 + strh r0, [r4, #0x18] + ldr r0, [r4, #4] + bl MOD81_02238B40 + mov r2, #0x2c + ldrsh r3, [r4, r2] + ldr r5, [r4, #8] + add r1, r4, #0 + lsl r0, r3, #2 + add r0, r3, r0 + add r0, r5, r0 + str r0, [r4, #8] + ldrsh r2, [r4, r2] + ldr r3, [r4, #0x10] + add r1, #8 + lsl r0, r2, #2 + add r0, r2, r0 + add r0, r3, r0 + str r0, [r4, #0x10] + ldr r0, [r4, #4] + bl MOD81_02238B18 + ldr r0, [r4, #0x24] + cmp r0, #0 + beq _022396DE + mov r0, #0x2c + ldrsh r0, [r4, r0] + sub r0, #0xe + strh r0, [r4, #0x2c] + ldr r0, [r4, #0x28] + add r0, r0, #1 + str r0, [r4, #0x28] + cmp r0, #0x1e + ble _022396DE + ldr r0, [r4] + bl MOD81_022395E8 +_022396DE: + pop {r3, r4, r5, pc} + .align 2, 0 +_022396E0: .word 0xFFFFC000 +_022396E4: .word 0x000005E6 + thumb_func_end MOD81_02239608 + + thumb_func_start MOD81_022396E8 +MOD81_022396E8: ; 0x022396E8 + push {r3, r4, r5, lr} + mov r1, #0x5b + add r5, r0, #0 + mov r0, #0x3a + lsl r1, r1, #2 + bl FUN_02016998 + add r4, r0, #0 + beq _0223974A + str r5, [r4] + mov r0, #0 + str r0, [r4, #4] + add r0, r5, #0 + bl MOD81_0223880C + add r1, r4, #0 + add r1, #0xc0 + str r0, [r1] + add r0, r4, #0 + mov r1, #0 + add r0, #0xd4 + str r1, [r0] + add r0, r4, #0 + add r0, #0xc4 + str r1, [r0] + add r0, r4, #0 + add r0, #0xcc + str r1, [r0] + mov r0, #0x16 + lsl r0, r0, #4 + str r1, [r4, r0] + add r0, r0, #4 + str r1, [r4, r0] + bl FUN_0201BA60 + add r1, r4, #0 + add r1, #0xbc + str r0, [r1] + add r0, r4, #0 + mov r2, #0 + add r0, #0xd0 + str r2, [r0] + mov r0, #0x5a + lsl r0, r0, #2 + str r2, [r4, r0] + ldr r0, _02239750 ; =MOD81_02239F58 + add r1, r4, #0 + bl FUN_0200CA98 +_0223974A: + add r0, r4, #0 + pop {r3, r4, r5, pc} + nop +_02239750: .word MOD81_02239F58 + thumb_func_end MOD81_022396E8 + + thumb_func_start MOD81_02239754 +MOD81_02239754: ; 0x02239754 + push {r3, r4, r5, lr} + add r5, r0, #0 + bl OS_DisableInterrupts + add r4, r0, #0 + cmp r5, #0 + beq _022397A0 + add r0, r5, #0 + bl MOD81_02239C94 + add r0, r5, #0 + bl MOD81_02239DF0 + add r0, r5, #0 + bl MOD81_02239F1C + mov r0, #0x16 + lsl r0, r0, #4 + ldr r0, [r5, r0] + cmp r0, #0 + beq _02239782 + bl FUN_0200CAB4 +_02239782: + mov r0, #0x59 + lsl r0, r0, #2 + ldr r0, [r5, r0] + cmp r0, #0 + beq _02239790 + bl MOD81_0223A1FC +_02239790: + add r0, r5, #0 + add r0, #0xbc + ldr r0, [r0] + bl FUN_0201BA1C + add r0, r5, #0 + bl FUN_02016A18 +_022397A0: + add r0, r4, #0 + bl OS_RestoreInterrupts + pop {r3, r4, r5, pc} + thumb_func_end MOD81_02239754 + + thumb_func_start MOD81_022397A8 +MOD81_022397A8: ; 0x022397A8 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldr r2, [r4] + add r5, r0, #0 + cmp r2, #4 + bhs _022397D6 + lsl r3, r2, #2 + ldr r2, _022397DC ; =0x0223D094 + add r1, r5, #4 + ldr r2, [r2, r3] + blx r2 + cmp r0, #0 + beq _022397CC + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + mov r0, #0 + str r0, [r5, #4] +_022397CC: + add r0, r5, #0 + bl MOD81_022397E0 + mov r0, #0 + pop {r3, r4, r5, pc} +_022397D6: + mov r0, #1 + pop {r3, r4, r5, pc} + nop +_022397DC: .word 0x0223D094 + thumb_func_end MOD81_022397A8 + + thumb_func_start MOD81_022397E0 +MOD81_022397E0: ; 0x022397E0 + push {r4, lr} + add r4, r0, #0 + add r0, #0xd4 + ldr r0, [r0] + cmp r0, #0 + beq _02239800 + bl G3X_ResetMtxStack + add r4, #0xd4 + ldr r0, [r4] + bl MOD81_02238940 + mov r0, #0 + add r1, r0, #0 + bl FUN_020222B4 +_02239800: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_022397E0 + + thumb_func_start MOD81_02239804 +MOD81_02239804: ; 0x02239804 + push {r3, r4, lr} + sub sp, #0xc + add r4, r0, #0 + bl MOD81_022399FC + add r0, r4, #0 + bl MOD81_02239CDC + add r0, r4, #0 + bl MOD81_02239E00 + mov r0, #8 + str r0, [sp] + mov r1, #1 + str r1, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0 + add r2, r1, #0 + add r3, r0, #0 + bl FUN_0200E1D0 + mov r0, #1 + add sp, #0xc + pop {r3, r4, pc} + .align 2, 0 + thumb_func_end MOD81_02239804 + + thumb_func_start MOD81_02239838 +MOD81_02239838: ; 0x02239838 + push {r4, lr} + add r4, r1, #0 + ldr r1, [r4] + cmp r1, #0 + beq _02239848 + cmp r1, #1 + beq _0223985E + b _02239876 +_02239848: + bl FUN_0200E308 + cmp r0, #0 + beq _02239876 + ldr r0, _0223987C ; =0x0223D444 + mov r1, #0 + str r1, [r0] + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _02239876 +_0223985E: + ldr r1, _0223987C ; =0x0223D444 + ldr r2, [r1] + cmp r2, #0x1e + bge _0223986A + add r2, r2, #1 + str r2, [r1] +_0223986A: + add r0, #0xd0 + ldr r0, [r0] + cmp r0, #0 + beq _02239876 + mov r0, #1 + pop {r4, pc} +_02239876: + mov r0, #0 + pop {r4, pc} + nop +_0223987C: .word 0x0223D444 + thumb_func_end MOD81_02239838 + + thumb_func_start MOD81_02239880 +MOD81_02239880: ; 0x02239880 + push {r3, r4, r5, lr} + add r5, r1, #0 + ldr r1, [r5] + add r4, r0, #0 + cmp r1, #4 + bhi _02239926 + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_02239898: ; jump table + .short _022398A2 - _02239898 - 2 ; case 0 + .short _022398AE - _02239898 - 2 ; case 1 + .short _022398F2 - _02239898 - 2 ; case 2 + .short _02239908 - _02239898 - 2 ; case 3 + .short _0223991E - _02239898 - 2 ; case 4 +_022398A2: + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _02239926 +_022398AE: + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + cmp r0, #8 + ble _02239926 + add r0, r4, #0 + add r0, #0xd8 + ldr r0, [r0] + mov r1, #0 + mov r2, #0x1f + mov r3, #0x18 + bl MOD81_0223A228 + add r0, r4, #0 + bl MOD81_0223A2AC + mov r1, #0x16 + lsl r1, r1, #4 + str r0, [r4, r1] + add r0, r4, #0 + add r0, #0xd8 + ldr r0, [r0] + mov r1, #0 + bl MOD81_02238B5C + add r4, #0xd8 + ldr r0, [r4] + mov r1, #1 + bl MOD81_02238B58 + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _02239926 +_022398F2: + mov r0, #0x16 + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl MOD81_0223A658 + cmp r0, #0 + beq _02239926 + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _02239926 +_02239908: + mov r0, #0x16 + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl MOD81_0223A64C + cmp r0, #0 + beq _02239926 + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _02239926 +_0223991E: + bl MOD81_02239F4C + mov r0, #1 + pop {r3, r4, r5, pc} +_02239926: + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD81_02239880 + + thumb_func_start MOD81_0223992C +MOD81_0223992C: ; 0x0223992C + push {r4, r5, lr} + sub sp, #0xc + add r5, r1, #0 + ldr r1, [r5] + add r4, r0, #0 + cmp r1, #4 + bhi _022399F2 + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_02239946: ; jump table + .short _02239950 - _02239946 - 2 ; case 0 + .short _02239966 - _02239946 - 2 ; case 1 + .short _02239984 - _02239946 - 2 ; case 2 + .short _022399A0 - _02239946 - 2 ; case 3 + .short _022399E4 - _02239946 - 2 ; case 4 +_02239950: + mov r0, #0x16 + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl MOD81_0223A664 + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _022399F2 +_02239966: + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + cmp r0, #2 + ble _022399F2 + mov r0, #0 + str r0, [r4, #8] + add r4, #0xc4 + ldr r0, [r4] + bl MOD81_022381EC + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _022399F2 +_02239984: + add r1, r4, #0 + add r1, #0xc8 + ldr r1, [r1] + cmp r1, #0 + bne _022399F2 + mov r1, #0x59 + lsl r1, r1, #2 + add r1, r4, r1 + bl MOD81_0223A104 + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _022399F2 +_022399A0: + ldr r0, [r4, #8] + cmp r0, #0x28 + bge _022399B6 + add r0, r0, #1 + str r0, [r4, #8] + cmp r0, #0x28 + bne _022399B6 + mov r0, #0x6b + lsl r0, r0, #4 + bl FUN_020054C8 +_022399B6: + mov r0, #0x16 + lsl r0, r0, #4 + ldr r0, [r4, r0] + bl MOD81_0223A64C + cmp r0, #0 + beq _022399F2 + mov r0, #4 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0 + ldr r3, _022399F8 ; =0x00007FFF + add r1, r0, #0 + add r2, r0, #0 + bl FUN_0200E1D0 + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _022399F2 +_022399E4: + bl FUN_0200E308 + cmp r0, #0 + beq _022399F2 + add sp, #0xc + mov r0, #1 + pop {r4, r5, pc} +_022399F2: + mov r0, #0 + add sp, #0xc + pop {r4, r5, pc} + .align 2, 0 +_022399F8: .word 0x00007FFF + thumb_func_end MOD81_0223992C + + thumb_func_start MOD81_022399FC +MOD81_022399FC: ; 0x022399FC + push {r3, r4, r5, lr} + sub sp, #0x10 + add r4, r0, #0 + ldr r0, _02239C78 ; =0x0223D0EC + bl FUN_0201E66C + ldr r2, _02239C7C ; =0x04000304 + ldr r0, _02239C80 ; =0xFFFF7FFF + ldrh r1, [r2] + and r0, r1 + strh r0, [r2] + ldr r0, _02239C84 ; =0x0223D084 + bl FUN_02016BBC + add r0, r4, #0 + add r0, #0xc0 + ldr r0, [r0] + ldr r2, _02239C88 ; =0x0223D0B4 + mov r1, #2 + mov r3, #1 + bl FUN_02016C18 + add r0, r4, #0 + add r0, #0xc0 + ldr r0, [r0] + ldr r2, _02239C88 ; =0x0223D0B4 + mov r1, #6 + mov r3, #1 + bl FUN_02016C18 + bl OS_DisableInterrupts + add r5, r0, #0 + add r0, r4, #0 + add r0, #0xc0 + ldr r0, [r0] + ldr r2, _02239C8C ; =0x0223D0D0 + mov r1, #3 + mov r3, #2 + bl FUN_02016C18 + add r0, r4, #0 + add r0, #0xc0 + ldr r0, [r0] + ldr r2, _02239C8C ; =0x0223D0D0 + mov r1, #7 + mov r3, #2 + bl FUN_02016C18 + add r0, r5, #0 + bl OS_RestoreInterrupts + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + add r2, r4, #0 + str r0, [sp, #0xc] + add r2, #0xc0 + mov r1, #2 + ldr r2, [r2] + mov r0, #0x5d + add r3, r1, #0 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + add r2, r4, #0 + str r0, [sp, #0xc] + add r2, #0xc0 + ldr r2, [r2] + mov r0, #0x5d + mov r1, #2 + mov r3, #6 + bl FUN_0200687C + mov r1, #0 + str r1, [sp] + add r2, r4, #0 + str r1, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + add r2, #0xc0 + ldr r2, [r2] + mov r0, #0x5d + mov r3, #2 + bl FUN_020068C8 + mov r1, #0 + str r1, [sp] + str r1, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + add r2, r4, #0 + str r0, [sp, #0xc] + add r2, #0xc0 + ldr r2, [r2] + mov r0, #0x5d + mov r3, #6 + bl FUN_020068C8 + ldr r0, [r4] + bl MOD81_02238828 + add r5, r0, #0 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x3a + mov r2, #0 + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #3 + add r3, r2, #0 + bl FUN_02006930 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x3a + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #3 + mov r2, #4 + mov r3, #0 + bl FUN_02006930 + ldr r0, _02239C90 ; =0x0223D07C + lsl r1, r5, #1 + ldrh r5, [r0, r1] + mov r0, #0x20 + str r0, [sp] + mov r0, #0x40 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0x5d + mov r1, #3 + mov r2, #0 + add r3, r5, #0 + bl FUN_02006948 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x40 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0x5d + mov r1, #3 + mov r2, #4 + add r3, r5, #0 + bl FUN_02006948 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + add r2, r4, #0 + str r0, [sp, #0xc] + add r2, #0xc0 + ldr r2, [r2] + mov r0, #0x5d + mov r1, #5 + mov r3, #3 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + add r2, r4, #0 + str r0, [sp, #0xc] + add r2, #0xc0 + ldr r2, [r2] + mov r0, #0x5d + mov r1, #5 + mov r3, #7 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + add r2, r4, #0 + str r0, [sp, #0xc] + add r2, #0xc0 + ldr r2, [r2] + mov r0, #0x5d + mov r1, #4 + mov r3, #3 + bl FUN_020068C8 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + add r2, r4, #0 + str r0, [sp, #0xc] + add r2, #0xc0 + ldr r2, [r2] + mov r0, #0x5d + mov r1, #4 + mov r3, #7 + bl FUN_020068C8 + mov r0, #0x3a + mov r1, #0x60 + bl FUN_02016998 + add r5, r0, #0 + beq _02239C02 + mov r0, #0 + add r1, r5, #0 + mov r2, #0x60 + bl MIi_CpuClear32 + add r0, r5, #0 + mov r1, #0x60 + bl DC_FlushRange + bl GX_BeginLoadBGExtPltt + bl GXS_BeginLoadBGExtPltt + mov r1, #6 + add r0, r5, #0 + lsl r1, r1, #0xc + mov r2, #0x60 + bl GX_LoadBGExtPltt + mov r1, #6 + add r0, r5, #0 + lsl r1, r1, #0xc + mov r2, #0x60 + bl GXS_LoadBGExtPltt + bl GX_EndLoadBGExtPltt + bl GXS_EndLoadBGExtPltt + add r0, r5, #0 + bl FUN_02016A18 +_02239C02: + add r0, r4, #0 + add r0, #0xc0 + mov r3, #0xff + ldr r0, [r0] + mov r1, #6 + mov r2, #3 + mvn r3, r3 + bl FUN_020179E0 + mov r0, #7 + mov r1, #0 + bl FUN_0201797C + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E6E4 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E74C + add r0, r4, #0 + add r0, #0xc0 + mov r1, #3 + ldr r0, [r0] + add r2, r1, #0 + mov r3, #0 + bl FUN_020179E0 + add r0, r4, #0 + add r0, #0xc8 + mov r1, #1 + bl MOD81_02238118 + add r1, r4, #0 + add r1, #0xc4 + str r0, [r1] + mov r0, #0x4a + lsl r0, r0, #2 + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + add r0, r4, #0 + add r0, #0xd0 + str r0, [sp, #8] + add r0, r4, #0 + add r0, #0xc0 + mov r1, #0x12 + mov r2, #1 + ldr r0, [r0] + lsl r1, r1, #6 + lsl r2, r2, #0xc + mov r3, #1 + bl MOD81_022384AC + add r4, #0xcc + str r0, [r4] + add sp, #0x10 + pop {r3, r4, r5, pc} + .align 2, 0 +_02239C78: .word 0x0223D0EC +_02239C7C: .word 0x04000304 +_02239C80: .word 0xFFFF7FFF +_02239C84: .word 0x0223D084 +_02239C88: .word 0x0223D0B4 +_02239C8C: .word 0x0223D0D0 +_02239C90: .word 0x0223D07C + thumb_func_end MOD81_022399FC + + thumb_func_start MOD81_02239C94 +MOD81_02239C94: ; 0x02239C94 + push {r4, lr} + add r4, r0, #0 + add r0, #0xc8 + ldr r0, [r0] + cmp r0, #0 + beq _02239CAA + add r0, r4, #0 + add r0, #0xc4 + ldr r0, [r0] + bl MOD81_02238200 +_02239CAA: + add r0, r4, #0 + add r0, #0xc0 + ldr r0, [r0] + mov r1, #2 + bl FUN_020178A0 + add r0, r4, #0 + add r0, #0xc0 + ldr r0, [r0] + mov r1, #6 + bl FUN_020178A0 + add r0, r4, #0 + add r0, #0xc0 + ldr r0, [r0] + mov r1, #3 + bl FUN_020178A0 + add r4, #0xc0 + ldr r0, [r4] + mov r1, #7 + bl FUN_020178A0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_02239C94 + + thumb_func_start MOD81_02239CDC +MOD81_02239CDC: ; 0x02239CDC + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + bl FUN_020BB7F4 + bl G3X_InitMtxStack + ldr r0, _02239DBC ; =0x04000060 + ldr r1, _02239DC0 ; =0xFFFFCFFD + ldrh r2, [r0] + and r2, r1 + strh r2, [r0] + ldrh r3, [r0] + add r2, r1, #2 + and r3, r2 + mov r2, #0x10 + orr r2, r3 + strh r2, [r0] + ldrh r3, [r0] + ldr r2, _02239DC4 ; =0x0000CFFB + and r2, r3 + strh r2, [r0] + add r2, r1, #2 + ldrh r3, [r0] + add r1, r1, #2 + and r3, r2 + mov r2, #8 + orr r2, r3 + strh r2, [r0] + ldrh r2, [r0] + and r2, r1 + mov r1, #0x20 + orr r1, r2 + strh r1, [r0] + ldr r0, _02239DC8 ; =0x0223D0A4 + bl G3X_SetEdgeColorTable + mov r1, #0 + ldr r0, _02239DCC ; =0x000043FF + ldr r2, _02239DD0 ; =0x00007FFF + mov r3, #0x3f + str r1, [sp] + bl G3X_SetClearColor + ldr r1, _02239DD4 ; =0x04000540 + mov r0, #2 + str r0, [r1] + ldr r0, _02239DD8 ; =0xBFFF0000 + str r0, [r1, #0x40] + mov r0, #1 + add r1, r0, #0 + bl FUN_020AEB70 + mov r0, #1 + lsl r0, r0, #0xe + mov r1, #1 + bl FUN_020AEDF4 + mov r0, #1 + add r1, r0, #0 + bl FUN_0201E6E4 + ldr r1, _02239DDC ; =0x04000008 + mov r0, #3 + ldrh r2, [r1] + bic r2, r0 + strh r2, [r1] + mov r1, #0 + mov r0, #1 + add r2, r1, #0 + add r3, r1, #0 + bl MOD81_022388C0 + add r1, r4, #0 + add r1, #0xd4 + str r0, [r1] + mov r1, #0 + ldr r0, _02239DE0 ; =0xFFFC8800 + str r1, [sp] + str r0, [sp, #4] + str r1, [sp, #8] + add r0, r4, #0 + str r1, [sp, #0xc] + add r0, #0xd4 + ldr r0, [r0] + mov r2, #0x5d + mov r3, #0x1b + bl MOD81_02238A84 + add r1, r4, #0 + add r1, #0xd8 + str r0, [r1] + ldr r1, _02239DE4 ; =0x0000EBE0 + ldr r0, _02239DE8 ; =0x0223D444 + strh r1, [r0, #4] + mov r1, #0 + strh r1, [r0, #6] + strh r1, [r0, #8] + add r0, r4, #0 + add r0, #0xd4 + ldr r0, [r0] + ldr r1, _02239DEC ; =0x0223D448 + bl MOD81_02238C60 + add r4, #0xd8 + mov r1, #7 + ldr r0, [r4] + lsl r1, r1, #0xa + bl MOD81_02238B84 + add sp, #0x10 + pop {r4, pc} + .align 2, 0 +_02239DBC: .word 0x04000060 +_02239DC0: .word 0xFFFFCFFD +_02239DC4: .word 0x0000CFFB +_02239DC8: .word 0x0223D0A4 +_02239DCC: .word 0x000043FF +_02239DD0: .word 0x00007FFF +_02239DD4: .word 0x04000540 +_02239DD8: .word 0xBFFF0000 +_02239DDC: .word 0x04000008 +_02239DE0: .word 0xFFFC8800 +_02239DE4: .word 0x0000EBE0 +_02239DE8: .word 0x0223D444 +_02239DEC: .word 0x0223D448 + thumb_func_end MOD81_02239CDC + + thumb_func_start MOD81_02239DF0 +MOD81_02239DF0: ; 0x02239DF0 + push {r3, lr} + add r0, #0xd4 + ldr r0, [r0] + cmp r0, #0 + beq _02239DFE + bl MOD81_0223890C +_02239DFE: + pop {r3, pc} + thumb_func_end MOD81_02239DF0 + + thumb_func_start MOD81_02239E00 +MOD81_02239E00: ; 0x02239E00 + push {r4, r5, r6, r7, lr} + sub sp, #0x74 + add r7, r0, #0 + add r0, #0xc + mov r1, #0x5d + mov r2, #0xb + mov r3, #0xc + bl MOD81_0223874C + add r0, sp, #0x60 + bl FUN_020B19DC + add r0, sp, #0x3c + bl FUN_020B1A24 + mov r3, #0 + str r3, [sp] + mov r2, #1 + str r2, [sp, #4] + str r3, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + add r0, sp, #0x3c + str r0, [sp, #0x10] + mov r0, #0x5d + mov r1, #0xd + bl FUN_02006AE4 + mov r3, #0 + str r3, [sp] + mov r0, #2 + str r0, [sp, #4] + str r3, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + add r0, sp, #0x3c + str r0, [sp, #0x10] + mov r0, #0x5d + mov r1, #0xd + mov r2, #1 + bl FUN_02006AE4 + mov r0, #0x3a + str r0, [sp] + add r0, sp, #0x60 + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #0xe + mov r2, #1 + mov r3, #0 + bl FUN_02006A8C + mov r0, #0x3a + str r0, [sp] + add r0, sp, #0x60 + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #0xe + mov r2, #2 + mov r3, #0 + bl FUN_02006A8C + mov r0, #1 + add r1, r7, #0 + str r0, [sp] + add r0, sp, #0x18 + add r1, #0xc + add r2, sp, #0x3c + add r3, sp, #0x60 + bl MOD81_022387A8 + ldr r0, _02239F18 ; =0x035947D1 + bl FUN_0201BA1C + mov r0, #0 + str r0, [sp, #0x14] + add r4, r7, #0 +_02239E9A: + bl FUN_0201BA60 + mov r1, #0xe8 + bl _u32_div_f + add r6, r1, #0 + add r6, #0xc + bl FUN_0201BA60 + mov r1, #0x71 + lsl r1, r1, #2 + bl _u32_div_f + add r5, r1, #0 + mov r0, #0 + str r0, [sp] + mov r0, #1 + sub r5, #0x1c + str r0, [sp, #4] + ldr r0, [r7] + add r1, sp, #0x18 + add r2, r6, #0 + add r3, r5, #0 + bl MOD81_022387C8 + str r0, [r4, #0x1c] + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + add r5, #0x38 + ldr r0, [r7] + add r1, sp, #0x18 + add r2, r6, #0 + add r3, r5, #0 + bl MOD81_022387C8 + str r0, [r4, #0x20] + ldr r0, [r4, #0x1c] + mov r1, #0 + bl FUN_02020130 + ldr r0, [r4, #0x20] + mov r1, #1 + bl FUN_02020130 + ldr r0, [r4, #0x1c] + mov r1, #0 + bl FUN_020200A0 + ldr r0, [r4, #0x20] + mov r1, #0 + bl FUN_020200A0 + ldr r0, [sp, #0x14] + add r4, #8 + add r0, r0, #1 + str r0, [sp, #0x14] + cmp r0, #0x14 + blt _02239E9A + add sp, #0x74 + pop {r4, r5, r6, r7, pc} + nop +_02239F18: .word 0x035947D1 + thumb_func_end MOD81_02239E00 + + thumb_func_start MOD81_02239F1C +MOD81_02239F1C: ; 0x02239F1C + push {r4, r5, r6, lr} + add r6, r0, #0 + mov r4, #0 + add r5, r6, #0 +_02239F24: + ldr r0, [r5, #0x1c] + cmp r0, #0 + beq _02239F2E + bl FUN_0201FFC8 +_02239F2E: + ldr r0, [r5, #0x20] + cmp r0, #0 + beq _02239F38 + bl FUN_0201FFC8 +_02239F38: + add r4, r4, #1 + add r5, #8 + cmp r4, #0x14 + blt _02239F24 + add r6, #0xc + add r0, r6, #0 + bl MOD81_02238784 + pop {r4, r5, r6, pc} + .align 2, 0 + thumb_func_end MOD81_02239F1C + + thumb_func_start MOD81_02239F4C +MOD81_02239F4C: ; 0x02239F4C + mov r1, #0x5a + mov r2, #1 + lsl r1, r1, #2 + str r2, [r0, r1] + bx lr + .align 2, 0 + thumb_func_end MOD81_02239F4C + + thumb_func_start MOD81_02239F58 +MOD81_02239F58: ; 0x02239F58 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r0, #0x5a + add r4, r1, #0 + lsl r0, r0, #2 + ldr r1, [r4, r0] + cmp r1, #0 + beq _02239FAC + mov r1, #0 + str r1, [r4, r0] + add r0, r4, #0 + add r0, #0xc0 + mov r3, #0xff + ldr r0, [r0] + mov r1, #2 + mov r2, #3 + mvn r3, r3 + bl FUN_020179E0 + add r4, #0xc0 + ldr r0, [r4] + mov r1, #6 + mov r2, #3 + mov r3, #0 + bl FUN_020179E0 + mov r0, #3 + mov r1, #0 + bl FUN_0201797C + mov r0, #7 + mov r1, #1 + bl FUN_0201797C + ldr r2, _02239FB0 ; =0x04000304 + ldrh r1, [r2] + lsr r0, r2, #0xb + orr r0, r1 + strh r0, [r2] + add r0, r5, #0 + bl FUN_0200CAB4 +_02239FAC: + pop {r3, r4, r5, pc} + nop +_02239FB0: .word 0x04000304 + thumb_func_end MOD81_02239F58 + + thumb_func_start MOD81_02239FB4 +MOD81_02239FB4: ; 0x02239FB4 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + str r5, [r2, #4] + add r0, r2, #0 + str r1, [r0] + mov r1, #0x52 + mov r7, #0 + lsl r1, r1, #2 + str r7, [r0, r1] + add r1, r1, #4 + str r2, [sp] + str r7, [r0, r1] + add r4, r2, #0 + add r6, r2, #0 +_02239FD0: + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r5, #0x1c] + bl FUN_0202011C + add r2, r6, #0 + add r3, r0, #0 + ldmia r3!, {r0, r1} + add r2, #0x58 + stmia r2!, {r0, r1} + ldr r0, [r3] + add r7, r7, #1 + str r0, [r2] + add r4, r4, #4 + add r5, #8 + add r6, #0xc + cmp r7, #0x14 + blt _02239FD0 + ldr r0, _0223A018 ; =MOD81_0223A01C + ldr r1, [sp] + mov r2, #0 + bl FUN_0200CA44 + ldr r1, [sp] + ldr r1, [r1] + str r0, [r1] + ldr r0, [sp] + ldr r0, [r0] + ldr r0, [r0] + cmp r0, #0 + bne _0223A014 + ldr r0, [sp] + bl FUN_02016A18 +_0223A014: + pop {r3, r4, r5, r6, r7, pc} + nop +_0223A018: .word MOD81_0223A01C + thumb_func_end MOD81_02239FB4 + + thumb_func_start MOD81_0223A01C +MOD81_0223A01C: ; 0x0223A01C + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r6, r1, #0 + mov r1, #0x52 + lsl r1, r1, #2 + ldr r0, [r6, r1] + add r0, r0, #1 + str r0, [r6, r1] + ldr r0, [r6, r1] + cmp r0, #0xc + ble _0223A050 + mov r0, #0 + str r0, [r6, r1] + add r0, r1, #4 + ldr r0, [r6, r0] + cmp r0, #0x14 + bge _0223A050 + lsl r0, r0, #2 + mov r2, #1 + add r0, r6, r0 + str r2, [r0, #8] + add r0, r1, #4 + ldr r0, [r6, r0] + add r2, r0, #1 + add r0, r1, #4 + str r2, [r6, r0] +_0223A050: + mov r0, #0 + add r7, r6, #0 + str r0, [sp, #4] + add r5, r6, #0 + str r6, [sp] + add r4, r0, #0 + add r7, #0x58 +_0223A05E: + mov r1, #0x21 + ldr r2, [r5, #0x5c] + lsl r1, r1, #0xc + add r2, r2, r1 + mov r1, #0x6a + add r0, r5, #0 + lsl r1, r1, #0xe + add r0, #0x5c + str r2, [r5, #0x5c] + cmp r2, r1 + blt _0223A09E + mov r1, #0x71 + ldr r2, [r0] + lsl r1, r1, #0xe + sub r1, r2, r1 + str r1, [r0] + ldr r0, [sp] + ldr r0, [r0, #8] + cmp r0, #0 + beq _0223A09E + ldr r0, [r6, #4] + mov r1, #1 + add r0, r0, r4 + ldr r0, [r0, #0x1c] + bl FUN_020200A0 + ldr r0, [r6, #4] + mov r1, #1 + add r0, r0, r4 + ldr r0, [r0, #0x20] + bl FUN_020200A0 +_0223A09E: + ldr r0, [r6, #4] + add r1, r7, #0 + add r0, r0, r4 + ldr r0, [r0, #0x1c] + bl FUN_02020044 + add r2, r5, #0 + add r2, #0x58 + add r3, sp, #8 + ldmia r2!, {r0, r1} + mov ip, r3 + stmia r3!, {r0, r1} + ldr r0, [r2] + str r0, [r3] + mov r0, #0xe + ldr r1, [sp, #0xc] + lsl r0, r0, #0xe + add r0, r1, r0 + str r0, [sp, #0xc] + ldr r0, [r6, #4] + mov r1, ip + add r0, r0, r4 + ldr r0, [r0, #0x20] + bl FUN_02020044 + ldr r0, [sp] + add r5, #0xc + add r0, r0, #4 + str r0, [sp] + ldr r0, [sp, #4] + add r4, #8 + add r0, r0, #1 + add r7, #0xc + str r0, [sp, #4] + cmp r0, #0x14 + blt _0223A05E + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD81_0223A01C + + thumb_func_start MOD81_0223A0EC +MOD81_0223A0EC: ; 0x0223A0EC + push {r4, lr} + add r4, r0, #0 + beq _0223A102 + bl FUN_0201B6C8 + ldr r0, [r0] + mov r1, #0 + str r1, [r0] + add r0, r4, #0 + bl FUN_0200CAB4 +_0223A102: + pop {r4, pc} + thumb_func_end MOD81_0223A0EC + + thumb_func_start MOD81_0223A104 +MOD81_0223A104: ; 0x0223A104 + push {r4, r5, r6, lr} + add r5, r1, #0 + mov r1, #0x17 + add r6, r0, #0 + mov r0, #0x3a + lsl r1, r1, #4 + bl FUN_02016998 + add r4, r0, #0 + beq _0223A170 + str r6, [r4] + add r6, #0xc0 + mov r0, #0x55 + ldr r1, [r6] + lsl r0, r0, #2 + str r1, [r4, r0] + ldr r0, [r4, r0] + mov r1, #2 + bl FUN_02017B54 + lsl r1, r0, #0xc + mov r0, #0x56 + lsl r0, r0, #2 + str r1, [r4, r0] + sub r0, r0, #4 + ldr r0, [r4, r0] + mov r1, #6 + bl FUN_02017B54 + mov r1, #0x57 + lsl r0, r0, #0xc + lsl r1, r1, #2 + str r0, [r4, r1] + mov r2, #0 + add r0, r1, #4 + str r2, [r4, r0] + add r0, r1, #0 + add r0, #8 + str r2, [r4, r0] + add r0, r1, #0 + add r0, #0xc + str r5, [r4, r0] + add r1, #0x10 + str r2, [r4, r1] + ldr r0, _0223A174 ; =MOD81_0223A178 + add r1, r4, #0 + bl FUN_0200CA60 + str r0, [r5] + cmp r0, #0 + bne _0223A170 + add r0, r4, #0 + bl FUN_02016A18 +_0223A170: + pop {r4, r5, r6, pc} + nop +_0223A174: .word MOD81_0223A178 + thumb_func_end MOD81_0223A104 + + thumb_func_start MOD81_0223A178 +MOD81_0223A178: ; 0x0223A178 + push {r4, r5, r6, lr} + mov r3, #0x59 + add r4, r1, #0 + lsl r3, r3, #2 + mov r0, #2 + ldr r1, [r4, r3] + lsl r0, r0, #0x14 + cmp r1, r0 + bge _0223A1FA + sub r0, r3, #4 + ldr r1, [r4, r0] + add r0, r3, #0 + sub r0, #0x44 + add r1, r1, r0 + sub r0, r3, #4 + str r1, [r4, r0] + add r5, r3, #0 + ldr r1, [r4, r3] + ldr r0, [r4, r0] + sub r5, #0xc + add r0, r1, r0 + str r0, [r4, r3] + add r0, r3, #0 + sub r0, #0x10 + ldr r5, [r4, r5] + ldr r3, [r4, r3] + ldr r0, [r4, r0] + sub r3, r5, r3 + mov r1, #2 + mov r2, #3 + asr r3, r3, #0xc + bl FUN_020179E0 + mov r5, #0x55 + lsl r5, r5, #2 + add r3, r5, #0 + ldr r0, [r4, r5] + add r3, #8 + add r5, #0x10 + ldr r6, [r4, r3] + ldr r3, [r4, r5] + mov r1, #6 + sub r3, r6, r3 + mov r2, #3 + asr r3, r3, #0xc + bl FUN_020179E0 + mov r1, #0x59 + lsl r1, r1, #2 + mov r0, #2 + ldr r2, [r4, r1] + lsl r0, r0, #0x12 + cmp r2, r0 + blt _0223A1FA + add r0, r1, #0 + add r0, #8 + ldr r0, [r4, r0] + cmp r0, #0 + bne _0223A1FA + add r1, #8 + ldr r0, [r4] + add r1, r4, r1 + add r2, r4, #4 + bl MOD81_02239FB4 +_0223A1FA: + pop {r4, r5, r6, pc} + thumb_func_end MOD81_0223A178 + + thumb_func_start MOD81_0223A1FC +MOD81_0223A1FC: ; 0x0223A1FC + push {r3, r4, r5, lr} + add r5, r0, #0 + beq _0223A226 + bl FUN_0201B6C8 + add r4, r0, #0 + mov r0, #0x5a + lsl r0, r0, #2 + ldr r1, [r4, r0] + mov r2, #0 + str r2, [r1] + add r0, r0, #4 + ldr r0, [r4, r0] + bl MOD81_0223A0EC + add r0, r4, #0 + bl FUN_02016A18 + add r0, r5, #0 + bl FUN_0200CAB4 +_0223A226: + pop {r3, r4, r5, pc} + thumb_func_end MOD81_0223A1FC + + thumb_func_start MOD81_0223A228 +MOD81_0223A228: ; 0x0223A228 + push {r3, r4, r5, r6, r7, lr} + str r0, [sp] + add r5, r1, #0 + mov r0, #0x3a + mov r1, #0x14 + add r7, r2, #0 + add r6, r3, #0 + bl FUN_02016998 + add r4, r0, #0 + beq _0223A268 + lsl r0, r5, #0xc + str r0, [r4] + lsl r1, r7, #0xc + str r1, [r4, #8] + ldr r0, [r4] + sub r0, r1, r0 + add r1, r6, #0 + bl _s32_div_f + str r0, [r4, #4] + ldr r0, [sp] + str r6, [r4, #0xc] + add r1, r5, #0 + str r0, [r4, #0x10] + bl MOD81_02238B5C + ldr r0, _0223A26C ; =MOD81_0223A270 + add r1, r4, #0 + mov r2, #0 + bl FUN_0200CA44 +_0223A268: + pop {r3, r4, r5, r6, r7, pc} + nop +_0223A26C: .word MOD81_0223A270 + thumb_func_end MOD81_0223A228 + + thumb_func_start MOD81_0223A270 +MOD81_0223A270: ; 0x0223A270 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldr r0, [r4, #0xc] + sub r0, r0, #1 + str r0, [r4, #0xc] + cmp r0, #0 + ble _0223A292 + ldr r1, [r4] + ldr r0, [r4, #4] + add r1, r1, r0 + str r1, [r4] + ldr r0, [r4, #0x10] + asr r1, r1, #0xc + bl MOD81_02238B5C + pop {r3, r4, r5, pc} +_0223A292: + ldr r1, [r4, #8] + ldr r0, [r4, #0x10] + asr r1, r1, #0xc + bl MOD81_02238B5C + add r0, r4, #0 + bl FUN_02016A18 + add r0, r5, #0 + bl FUN_0200CAB4 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD81_0223A270 + + thumb_func_start MOD81_0223A2AC +MOD81_0223A2AC: ; 0x0223A2AC + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r5, #0 + add r4, #0xdc + add r0, #0xd8 + add r1, r4, #0 + ldr r0, [r0] + add r1, #8 + bl MOD81_02238B08 + add r0, r5, #0 + add r0, #0xd8 + add r1, r4, #0 + ldr r0, [r0] + add r1, #0x20 + bl MOD81_02238B28 + add r3, r4, #0 + add r3, #8 + add r2, r4, #0 + ldmia r3!, {r0, r1} + add r2, #0x14 + stmia r2!, {r0, r1} + ldr r0, [r3] + str r0, [r2] + add r0, r5, #0 + add r0, #0xd4 + ldr r0, [r0] + str r0, [r4, #4] + add r0, r5, #0 + add r0, #0xd8 + ldr r0, [r0] + add r5, #0xdc + str r0, [r5] + ldr r0, [r4, #0xc] + str r0, [r4, #0x28] + ldr r1, [r4, #0xc] + ldr r0, _0223A37C ; =0xFFFF8000 + sub r0, r0, r1 + mov r1, #0x1e + bl _s32_div_f + str r0, [r4, #0x2c] + add r0, r4, #0 + mov r2, #1 + mov r1, #0x1e + add r0, #0x80 + str r1, [r0] + mov r1, #0 + str r1, [r4, #0x38] + str r1, [r4, #0x3c] + str r1, [r4, #0x40] + add r0, r4, #0 + str r1, [r4, #0x44] + add r0, #0x54 + strh r1, [r0] + add r0, r4, #0 + lsl r2, r2, #0xe + add r0, #0x56 + strh r2, [r0] + add r0, r4, #0 + add r0, #0x5a + strh r1, [r0] + str r1, [r4, #0x7c] + add r2, r4, #0 + add r0, r1, #0 +_0223A330: + add r3, r2, #0 + add r3, #0x5c + strh r0, [r3] + add r3, r2, #0 + add r3, #0x5e + strh r0, [r3] + add r3, r2, #0 + add r3, #0x60 + strh r0, [r3] + add r3, r2, #0 + add r3, #0x62 + add r1, r1, #1 + add r2, #8 + strh r0, [r3] + cmp r1, #3 + blt _0223A330 + mov r1, #0xd + str r0, [r4, #0x78] + add r0, r4, #0 + lsl r1, r1, #8 + mov r2, #0x1e + bl MOD81_0223A384 + mov r1, #0x29 + mov r2, #5 + add r0, r4, #0 + lsl r1, r1, #0xc + lsl r2, r2, #0xe + mov r3, #0x1e + bl MOD81_0223A3C0 + ldr r0, _0223A380 ; =MOD81_0223A57C + add r1, r4, #0 + mov r2, #0 + bl FUN_0200CA44 + pop {r3, r4, r5, pc} + nop +_0223A37C: .word 0xFFFF8000 +_0223A380: .word MOD81_0223A57C + thumb_func_end MOD81_0223A2AC + + thumb_func_start MOD81_0223A384 +MOD81_0223A384: ; 0x0223A384 + push {r4, r5, r6, lr} + add r5, r0, #0 + add r4, r1, #0 + add r6, r2, #0 + beq _0223A3B2 + mov r0, #0x56 + ldrsh r0, [r5, r0] + add r1, r6, #0 + sub r0, r4, r0 + bl _s32_div_f + add r1, r5, #0 + add r1, #0x5a + strh r0, [r1] + mov r0, #0x56 + ldrsh r1, [r5, r0] + mov r0, #0x5a + ldrsh r0, [r5, r0] + add r1, r1, r0 + add r0, r5, #0 + add r0, #0x56 + strh r1, [r0] + b _0223A3B6 +_0223A3B2: + add r0, #0x56 + strh r4, [r0] +_0223A3B6: + add r0, r5, #0 + add r0, #0x58 + strh r4, [r0] + str r6, [r5, #0x74] + pop {r4, r5, r6, pc} + thumb_func_end MOD81_0223A384 + + thumb_func_start MOD81_0223A3C0 +MOD81_0223A3C0: ; 0x0223A3C0 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r4, r1, #0 + add r6, r2, #0 + add r7, r3, #0 + beq _0223A3F8 + ldr r0, [r5, #0x38] + add r1, r7, #0 + sub r0, r4, r0 + bl _s32_div_f + str r0, [r5, #0x40] + ldr r0, [r5, #0x3c] + add r1, r7, #0 + sub r0, r6, r0 + bl _s32_div_f + str r0, [r5, #0x44] + ldr r1, [r5, #0x38] + ldr r0, [r5, #0x40] + add r0, r1, r0 + str r0, [r5, #0x38] + ldr r1, [r5, #0x3c] + ldr r0, [r5, #0x44] + add r0, r1, r0 + str r0, [r5, #0x3c] + str r4, [r5, #0x48] + str r6, [r5, #0x4c] +_0223A3F8: + str r7, [r5, #0x50] + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD81_0223A3C0 + + thumb_func_start MOD81_0223A3FC +MOD81_0223A3FC: ; 0x0223A3FC + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r4, r1, #0 + add r6, r2, #0 + add r7, r3, #0 + beq _0223A422 + lsl r0, r4, #3 + str r0, [sp] + add r1, r5, r0 + mov r0, #0x5c + ldrsh r0, [r1, r0] + add r1, r7, #0 + sub r0, r6, r0 + bl _s32_div_f + ldr r1, [sp] + add r1, r5, r1 + add r1, #0x5e + strh r0, [r1] +_0223A422: + lsl r1, r4, #3 + add r0, r5, r1 + add r0, #0x60 + strh r6, [r0] + add r0, r5, r1 + add r0, #0x62 + strh r7, [r0] + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD81_0223A3FC + + thumb_func_start MOD81_0223A434 +MOD81_0223A434: ; 0x0223A434 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + ldr r0, [r5, #0x74] + cmp r0, #0 + beq _0223A460 + sub r0, r0, #1 + str r0, [r5, #0x74] + beq _0223A456 + mov r0, #0x56 + ldrsh r1, [r5, r0] + mov r0, #0x5a + ldrsh r0, [r5, r0] + add r1, r1, r0 + add r0, r5, #0 + add r0, #0x56 + strh r1, [r0] + b _0223A460 +_0223A456: + mov r0, #0x58 + ldrsh r1, [r5, r0] + add r0, r5, #0 + add r0, #0x56 + strh r1, [r0] +_0223A460: + mov r0, #0x54 + ldrsh r1, [r5, r0] + mov r0, #0x56 + ldrsh r0, [r5, r0] + add r1, r1, r0 + add r0, r5, #0 + add r0, #0x54 + strh r1, [r0] + add r0, r5, #0 + add r0, #0x54 + ldrh r0, [r0] + mov r1, #0xb6 + bl _s32_div_f + add r4, r0, #0 + mov r0, #0x5a + lsl r0, r0, #2 + cmp r4, r0 + blt _0223A488 + sub r4, r4, r0 +_0223A488: + ldr r0, [r5, #0x50] + cmp r0, #0 + beq _0223A4AE + ldr r1, [r5, #0x38] + ldr r0, [r5, #0x40] + add r0, r1, r0 + str r0, [r5, #0x38] + ldr r1, [r5, #0x3c] + ldr r0, [r5, #0x44] + add r0, r1, r0 + str r0, [r5, #0x3c] + ldr r0, [r5, #0x50] + sub r0, r0, #1 + str r0, [r5, #0x50] + bne _0223A4AE + ldr r0, [r5, #0x48] + str r0, [r5, #0x38] + ldr r0, [r5, #0x4c] + str r0, [r5, #0x3c] +_0223A4AE: + add r0, r4, #0 + add r0, #0x5a + lsl r1, r0, #2 + ldr r0, _0223A578 ; =0x020EDF50 + ldr r2, [r5, #0x38] + ldr r0, [r0, r1] + asr r3, r2, #0x1f + asr r1, r0, #0x1f + bl _ll_mul + mov r3, #2 + mov r6, #0 + lsl r3, r3, #0xa + add r3, r0, r3 + adc r1, r6 + lsl r0, r1, #0x14 + lsr r1, r3, #0xc + ldr r2, [r5, #8] + orr r1, r0 + add r0, r2, r1 + str r0, [r5, #0x14] + ldr r2, [r5, #0x3c] + ldr r0, _0223A578 ; =0x020EDF50 + lsl r1, r4, #2 + ldr r0, [r0, r1] + asr r3, r2, #0x1f + asr r1, r0, #0x1f + bl _ll_mul + mov r4, #2 + add r3, r6, #0 + lsl r4, r4, #0xa + add r4, r0, r4 + adc r1, r3 + lsl r0, r1, #0x14 + lsr r1, r4, #0xc + ldr r2, [r5, #0x10] + orr r1, r0 + add r0, r2, r1 + str r0, [r5, #0x1c] + mov r0, #0x22 + ldrsh r1, [r5, r0] + mov r0, #0x56 + ldrsh r0, [r5, r0] + mov r2, #0x5e + mov r6, #0x60 + add r0, r1, r0 + strh r0, [r5, #0x22] + add r0, r5, #0 + mov r1, #0x5c +_0223A512: + add r4, r0, #0 + add r4, #0x62 + ldrh r4, [r4] + cmp r4, #0 + beq _0223A54A + add r4, r0, #0 + add r4, #0x62 + ldrh r4, [r4] + sub r7, r4, #1 + add r4, r0, #0 + add r4, #0x62 + strh r7, [r4] + add r4, r0, #0 + add r4, #0x62 + ldrh r4, [r4] + cmp r4, #0 + bne _0223A53E + ldrsh r7, [r0, r6] + add r4, r0, #0 + add r4, #0x5c + strh r7, [r4] + b _0223A54A +_0223A53E: + ldrsh r7, [r0, r1] + ldrsh r4, [r0, r2] + add r7, r7, r4 + add r4, r0, #0 + add r4, #0x5c + strh r7, [r4] +_0223A54A: + add r3, r3, #1 + add r0, #8 + cmp r3, #3 + blt _0223A512 + mov r0, #0x20 + ldrsh r1, [r5, r0] + mov r0, #0x5c + ldrsh r0, [r5, r0] + add r0, r1, r0 + strh r0, [r5, #0x20] + mov r0, #0x22 + ldrsh r1, [r5, r0] + mov r0, #0x64 + ldrsh r0, [r5, r0] + add r0, r1, r0 + strh r0, [r5, #0x22] + mov r0, #0x24 + ldrsh r1, [r5, r0] + mov r0, #0x6c + ldrsh r0, [r5, r0] + add r0, r1, r0 + strh r0, [r5, #0x24] + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0223A578: .word 0x020EDF50 + thumb_func_end MOD81_0223A434 + + thumb_func_start MOD81_0223A57C +MOD81_0223A57C: ; 0x0223A57C + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #0 + beq _0223A5DC + ldr r1, [r4, #0x28] + ldr r0, [r4, #0x2c] + add r0, r1, r0 + str r0, [r4, #0x28] + str r0, [r4, #0x18] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + sub r1, r0, #1 + add r0, r4, #0 + add r0, #0x80 + str r1, [r0] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #0 + bgt _0223A5DC + mov r1, #2 + lsl r1, r1, #8 + str r1, [r4, #0x30] + mov r0, #0 + lsl r1, r1, #5 + str r0, [r4, #0x2c] + add r0, r4, #0 + add r2, r1, #0 + mov r3, #0x3c + bl MOD81_0223A3C0 + ldr r2, _0223A5F8 ; =0xFFFFF800 + add r0, r4, #0 + mov r1, #0 + mov r3, #0x1e + bl MOD81_0223A3FC + mov r0, #1 + str r0, [r4, #0x7c] + ldr r1, _0223A5FC ; =MOD81_0223A600 + add r0, r5, #0 + bl FUN_0201B6C4 +_0223A5DC: + add r0, r4, #0 + bl MOD81_0223A434 + add r1, r4, #0 + ldr r0, [r4] + add r1, #0x14 + bl MOD81_02238B18 + ldr r0, [r4] + add r4, #0x20 + add r1, r4, #0 + bl MOD81_02238B40 + pop {r3, r4, r5, pc} + .align 2, 0 +_0223A5F8: .word 0xFFFFF800 +_0223A5FC: .word MOD81_0223A600 + thumb_func_end MOD81_0223A57C + + thumb_func_start MOD81_0223A600 +MOD81_0223A600: ; 0x0223A600 + push {r4, lr} + add r4, r1, #0 + ldr r0, [r4, #0x78] + cmp r0, #0 + bne _0223A64A + ldr r1, [r4, #0x2c] + ldr r0, [r4, #0x30] + add r1, r1, r0 + str r1, [r4, #0x2c] + ldr r0, [r4, #0x28] + add r0, r0, r1 + str r0, [r4, #0x28] + str r0, [r4, #0x18] + add r0, r4, #0 + bl MOD81_0223A434 + add r1, r4, #0 + ldr r0, [r4] + add r1, #0x14 + bl MOD81_02238B18 + add r1, r4, #0 + ldr r0, [r4] + add r1, #0x20 + bl MOD81_02238B40 + ldr r0, [r4] + bl MOD81_02238B8C + cmp r0, #0 + bne _0223A64A + ldr r0, [r4] + mov r1, #0 + bl MOD81_02238B58 + mov r0, #1 + str r0, [r4, #0x78] +_0223A64A: + pop {r4, pc} + thumb_func_end MOD81_0223A600 + + thumb_func_start MOD81_0223A64C +MOD81_0223A64C: ; 0x0223A64C + push {r3, lr} + bl FUN_0201B6C8 + ldr r0, [r0, #0x78] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD81_0223A64C + + thumb_func_start MOD81_0223A658 +MOD81_0223A658: ; 0x0223A658 + push {r3, lr} + bl FUN_0201B6C8 + ldr r0, [r0, #0x7c] + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD81_0223A658 + + thumb_func_start MOD81_0223A664 +MOD81_0223A664: ; 0x0223A664 + push {r3, r4, r5, lr} + sub sp, #8 + add r5, r0, #0 + bl FUN_0201B6C8 + add r4, r0, #0 + mov r1, #0 + str r1, [r4, #0x78] + add r0, sp, #0 + strh r1, [r0, #4] + ldrh r1, [r0, #4] + strh r1, [r0, #2] + strh r1, [r0] + ldr r0, [r4, #4] + mov r1, #1 + bl MOD81_02238C80 + ldr r0, [r4, #4] + add r1, sp, #0 + bl MOD81_02238C60 + ldr r1, _0223A6EC ; =0x000058CC + mov r0, #2 + lsl r0, r0, #0x12 + str r1, [r4, #0x2c] + sub r0, r1, r0 + str r0, [r4, #0x28] + add r0, r4, #0 + mov r1, #0 + mov r3, #0x14 + add r0, #0x80 + str r3, [r0] + ldr r0, [r4, #0x28] + add r2, r1, #0 + str r0, [r4, #0x18] + add r0, r4, #0 + bl MOD81_0223A3C0 + mov r2, #0x56 + ldrsh r2, [r4, r2] + add r0, r4, #0 + mov r1, #1 + neg r2, r2 + mov r3, #0x1e + bl MOD81_0223A3FC + mov r1, #2 + add r2, r1, #0 + add r0, r4, #0 + add r2, #0xfe + mov r3, #0x32 + bl MOD81_0223A3FC + mov r1, #2 + ldr r0, [r4] + lsl r1, r1, #0xc + bl MOD81_02238B84 + ldr r0, [r4] + mov r1, #1 + bl MOD81_02238B58 + ldr r1, _0223A6F0 ; =MOD81_0223A6F4 + add r0, r5, #0 + bl FUN_0201B6C4 + add sp, #8 + pop {r3, r4, r5, pc} + .align 2, 0 +_0223A6EC: .word 0x000058CC +_0223A6F0: .word MOD81_0223A6F4 + thumb_func_end MOD81_0223A664 + + thumb_func_start MOD81_0223A6F4 +MOD81_0223A6F4: ; 0x0223A6F4 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + add r0, r4, #0 + bl MOD81_0223A434 + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #0 + beq _0223A734 + ldr r1, [r4, #0x28] + ldr r0, [r4, #0x2c] + add r0, r1, r0 + str r0, [r4, #0x28] + str r0, [r4, #0x18] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + sub r1, r0, #1 + add r0, r4, #0 + add r0, #0x80 + str r1, [r0] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #0 + bne _0223A734 + ldr r1, _0223A74C ; =MOD81_0223A750 + add r0, r5, #0 + bl FUN_0201B6C4 +_0223A734: + add r1, r4, #0 + ldr r0, [r4] + add r1, #0x14 + bl MOD81_02238B18 + ldr r0, [r4] + add r4, #0x20 + add r1, r4, #0 + bl MOD81_02238B40 + pop {r3, r4, r5, pc} + nop +_0223A74C: .word MOD81_0223A750 + thumb_func_end MOD81_0223A6F4 + + thumb_func_start MOD81_0223A750 +MOD81_0223A750: ; 0x0223A750 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + add r0, r4, #0 + bl MOD81_0223A434 + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + add r1, r0, #1 + add r0, r4, #0 + add r0, #0x80 + str r1, [r0] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #0x6e + ble _0223A792 + ldr r1, [r4, #0x28] + ldr r0, _0223A7A8 ; =0xFFFC5800 + sub r0, r0, r1 + mov r1, #0x35 + bl _s32_div_f + str r0, [r4, #0x2c] + add r0, r4, #0 + mov r1, #0x35 + add r0, #0x80 + str r1, [r0] + ldr r1, _0223A7AC ; =MOD81_0223A7B0 + add r0, r5, #0 + bl FUN_0201B6C4 +_0223A792: + add r1, r4, #0 + ldr r0, [r4] + add r1, #0x14 + bl MOD81_02238B18 + ldr r0, [r4] + add r4, #0x20 + add r1, r4, #0 + bl MOD81_02238B40 + pop {r3, r4, r5, pc} + .align 2, 0 +_0223A7A8: .word 0xFFFC5800 +_0223A7AC: .word MOD81_0223A7B0 + thumb_func_end MOD81_0223A750 + + thumb_func_start MOD81_0223A7B0 +MOD81_0223A7B0: ; 0x0223A7B0 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + add r0, r4, #0 + bl MOD81_0223A434 + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #0 + beq _0223A7F0 + ldr r1, [r4, #0x28] + ldr r0, [r4, #0x2c] + add r0, r1, r0 + str r0, [r4, #0x28] + str r0, [r4, #0x18] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + sub r1, r0, #1 + add r0, r4, #0 + add r0, #0x80 + str r1, [r0] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #0 + bne _0223A7F0 + ldr r1, _0223A808 ; =MOD81_0223A80C + add r0, r5, #0 + bl FUN_0201B6C4 +_0223A7F0: + add r1, r4, #0 + ldr r0, [r4] + add r1, #0x14 + bl MOD81_02238B18 + ldr r0, [r4] + add r4, #0x20 + add r1, r4, #0 + bl MOD81_02238B40 + pop {r3, r4, r5, pc} + nop +_0223A808: .word MOD81_0223A80C + thumb_func_end MOD81_0223A7B0 + + thumb_func_start MOD81_0223A80C +MOD81_0223A80C: ; 0x0223A80C + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + add r0, r4, #0 + bl MOD81_0223A434 + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + add r1, r0, #1 + add r0, r4, #0 + add r0, #0x80 + str r1, [r0] + add r0, r4, #0 + add r0, #0x80 + ldr r0, [r0] + cmp r0, #1 + ble _0223A83E + mov r0, #2 + lsl r0, r0, #0x10 + str r0, [r4, #0x2c] + ldr r1, _0223A854 ; =MOD81_0223A858 + add r0, r5, #0 + bl FUN_0201B6C4 +_0223A83E: + add r1, r4, #0 + ldr r0, [r4] + add r1, #0x14 + bl MOD81_02238B18 + ldr r0, [r4] + add r4, #0x20 + add r1, r4, #0 + bl MOD81_02238B40 + pop {r3, r4, r5, pc} + .align 2, 0 +_0223A854: .word MOD81_0223A858 + thumb_func_end MOD81_0223A80C + + thumb_func_start MOD81_0223A858 +MOD81_0223A858: ; 0x0223A858 + push {r4, lr} + add r4, r1, #0 + ldr r0, [r4, #0x78] + cmp r0, #0 + bne _0223A894 + add r0, r4, #0 + bl MOD81_0223A434 + ldr r1, [r4, #0x28] + ldr r0, [r4, #0x2c] + add r0, r1, r0 + str r0, [r4, #0x28] + str r0, [r4, #0x18] + add r1, r4, #0 + ldr r0, [r4] + add r1, #0x14 + bl MOD81_02238B18 + add r1, r4, #0 + ldr r0, [r4] + add r1, #0x20 + bl MOD81_02238B40 + ldr r0, [r4] + bl MOD81_02238B8C + cmp r0, #0 + bne _0223A894 + mov r0, #1 + str r0, [r4, #0x78] +_0223A894: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223A858 + + thumb_func_start MOD81_0223A898 +MOD81_0223A898: ; 0x0223A898 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r0, #0x3a + mov r1, #0xa4 + bl FUN_02016998 + add r4, r0, #0 + beq _0223A8C2 + str r5, [r4] + mov r0, #0 + str r0, [r4, #4] + add r0, r5, #0 + bl MOD81_0223880C + str r0, [r4, #0x24] + mov r0, #0 + str r0, [r4, #0x28] + add r0, r4, #0 + add r0, #0x34 + bl MOD81_0223AD80 +_0223A8C2: + add r0, r4, #0 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD81_0223A898 + + thumb_func_start MOD81_0223A8C8 +MOD81_0223A8C8: ; 0x0223A8C8 + push {r4, lr} + add r4, r0, #0 + beq _0223A8F6 + mov r0, #0 + add r1, r0, #0 + bl FUN_02015F10 + add r0, r4, #0 + bl MOD81_0223ABC0 + add r0, r4, #0 + bl MOD81_0223ACD8 + add r0, r4, #0 + bl MOD81_0223AD68 + add r0, r4, #0 + add r0, #0x34 + bl MOD81_0223AD88 + add r0, r4, #0 + bl FUN_02016A18 +_0223A8F6: + pop {r4, pc} + thumb_func_end MOD81_0223A8C8 + + thumb_func_start MOD81_0223A8F8 +MOD81_0223A8F8: ; 0x0223A8F8 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldr r2, [r4] + add r5, r0, #0 + cmp r2, #2 + bhs _0223A926 + lsl r3, r2, #2 + ldr r2, _0223A92C ; =0x0223D114 + add r1, r5, #4 + ldr r2, [r2, r3] + blx r2 + cmp r0, #0 + beq _0223A91C + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + mov r0, #0 + str r0, [r5, #4] +_0223A91C: + add r0, r5, #0 + bl MOD81_0223A930 + mov r0, #0 + pop {r3, r4, r5, pc} +_0223A926: + mov r0, #1 + pop {r3, r4, r5, pc} + nop +_0223A92C: .word 0x0223D114 + thumb_func_end MOD81_0223A8F8 + + thumb_func_start MOD81_0223A930 +MOD81_0223A930: ; 0x0223A930 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x28] + cmp r0, #0 + beq _0223A94C + bl G3X_ResetMtxStack + ldr r0, [r4, #0x28] + bl MOD81_02238940 + mov r0, #0 + add r1, r0, #0 + bl FUN_020222B4 +_0223A94C: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223A930 + + thumb_func_start MOD81_0223A950 +MOD81_0223A950: ; 0x0223A950 + push {r3, r4, lr} + sub sp, #0xc + add r4, r0, #0 + bl MOD81_0223AA68 + add r0, r4, #0 + bl MOD81_0223ABD8 + add r0, r4, #0 + bl MOD81_0223ACE8 + mov r2, #0 + ldr r0, _0223A990 ; =MOD81_0223B090 + add r1, r4, #0 + str r2, [r4, #0xc] + bl FUN_0200CA98 + mov r0, #3 + str r0, [sp] + mov r1, #1 + str r1, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + ldr r3, _0223A994 ; =0x00007FFF + mov r0, #0 + add r2, r1, #0 + bl FUN_0200E1D0 + mov r0, #1 + add sp, #0xc + pop {r3, r4, pc} + nop +_0223A990: .word MOD81_0223B090 +_0223A994: .word 0x00007FFF + thumb_func_end MOD81_0223A950 + + thumb_func_start MOD81_0223A998 +MOD81_0223A998: ; 0x0223A998 + push {r4, r5, lr} + sub sp, #0xc + add r4, r1, #0 + add r5, r0, #0 + ldr r0, [r4] + cmp r0, #4 + bhi _0223AA54 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_0223A9B2: ; jump table + .short _0223A9BC - _0223A9B2 - 2 ; case 0 + .short _0223A9C8 - _0223A9B2 - 2 ; case 1 + .short _0223A9F2 - _0223A9B2 - 2 ; case 2 + .short _0223AA1C - _0223A9B2 - 2 ; case 3 + .short _0223AA46 - _0223A9B2 - 2 ; case 4 +_0223A9BC: + mov r0, #0 + str r0, [r5, #8] + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _0223AA54 +_0223A9C8: + ldr r0, [r5, #8] + add r0, r0, #1 + str r0, [r5, #8] + cmp r0, #0xa + ble _0223AA54 + ldr r0, _0223AA5C ; =0x000006AC + bl FUN_020054C8 + add r1, r5, #0 + add r0, r5, #0 + add r1, #0x34 + bl MOD81_0223AD9C + ldr r0, [r5, #0x2c] + mov r1, #1 + bl MOD81_02238B58 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _0223AA54 +_0223A9F2: + add r0, r5, #0 + add r0, #0x34 + bl MOD81_0223AE48 + cmp r0, #0 + beq _0223AA54 + ldr r0, _0223AA60 ; =0x000006AD + bl FUN_020054C8 + ldr r0, [r5, #0x20] + mov r1, #3 + bl FUN_02020130 + ldr r0, [r5, #0x20] + mov r1, #1 + bl FUN_020200A0 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _0223AA54 +_0223AA1C: + ldr r0, [r5, #0x20] + bl FUN_02020388 + cmp r0, #0 + bne _0223AA54 + mov r0, #0x10 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0 + ldr r3, _0223AA64 ; =0x00007FFF + add r1, r0, #0 + add r2, r0, #0 + bl FUN_0200E1D0 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _0223AA54 +_0223AA46: + bl FUN_0200E308 + cmp r0, #0 + beq _0223AA54 + add sp, #0xc + mov r0, #1 + pop {r4, r5, pc} +_0223AA54: + mov r0, #0 + add sp, #0xc + pop {r4, r5, pc} + nop +_0223AA5C: .word 0x000006AC +_0223AA60: .word 0x000006AD +_0223AA64: .word 0x00007FFF + thumb_func_end MOD81_0223A998 + + thumb_func_start MOD81_0223AA68 +MOD81_0223AA68: ; 0x0223AA68 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r4, r0, #0 + ldr r0, _0223ABAC ; =0x0223D158 + bl FUN_0201E66C + ldr r2, _0223ABB0 ; =0x04000304 + ldr r0, _0223ABB4 ; =0xFFFF7FFF + ldrh r1, [r2] + and r0, r1 + strh r0, [r2] + ldr r0, _0223ABB8 ; =0x0223D11C + bl FUN_02016BBC + ldr r0, [r4, #0x24] + ldr r2, _0223ABBC ; =0x0223D13C + mov r1, #3 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0x24] + ldr r2, _0223ABBC ; =0x0223D13C + mov r1, #7 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4] + bl MOD81_02238828 + cmp r0, #3 + bhi _0223AABA + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_0223AAB2: ; jump table + .short _0223AABA - _0223AAB2 - 2 ; case 0 + .short _0223AAC6 - _0223AAB2 - 2 ; case 1 + .short _0223AAD2 - _0223AAB2 - 2 ; case 2 + .short _0223AADE - _0223AAB2 - 2 ; case 3 +_0223AABA: + mov r0, #0xf + str r0, [sp, #0x10] + mov r7, #0x10 + mov r6, #0x11 + mov r5, #0 + b _0223AAE8 +_0223AAC6: + mov r0, #0xf + str r0, [sp, #0x10] + mov r7, #0x10 + mov r6, #0x11 + mov r5, #0x20 + b _0223AAE8 +_0223AAD2: + mov r0, #0xf + str r0, [sp, #0x10] + mov r7, #0x10 + mov r6, #0x11 + mov r5, #0x40 + b _0223AAE8 +_0223AADE: + mov r0, #0x18 + str r0, [sp, #0x10] + mov r7, #0x19 + mov r6, #0x1a + mov r5, #0 +_0223AAE8: + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0x24] + mov r0, #0x5d + add r1, r7, #0 + mov r3, #3 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0x24] + mov r0, #0x5d + add r1, r7, #0 + mov r3, #7 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r1, [sp, #0x10] + ldr r2, [r4, #0x24] + mov r0, #0x5d + mov r3, #3 + bl FUN_020068C8 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r1, [sp, #0x10] + ldr r2, [r4, #0x24] + mov r0, #0x5d + mov r3, #7 + bl FUN_020068C8 + mov r2, #0 + str r2, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0x5d + add r1, r6, #0 + add r3, r5, #0 + bl FUN_02006948 + mov r0, #0 + str r0, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0x5d + add r1, r6, #0 + mov r2, #4 + add r3, r5, #0 + bl FUN_02006948 + mov r1, #3 + add r3, r1, #0 + ldr r0, [r4, #0x24] + add r2, r1, #0 + add r3, #0xfd + bl FUN_020179E0 + ldr r0, [r4, #0x24] + mov r1, #7 + mov r2, #3 + mov r3, #0 + bl FUN_020179E0 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E6E4 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E74C + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0223ABAC: .word 0x0223D158 +_0223ABB0: .word 0x04000304 +_0223ABB4: .word 0xFFFF7FFF +_0223ABB8: .word 0x0223D11C +_0223ABBC: .word 0x0223D13C + thumb_func_end MOD81_0223AA68 + + thumb_func_start MOD81_0223ABC0 +MOD81_0223ABC0: ; 0x0223ABC0 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x24] + mov r1, #3 + bl FUN_020178A0 + ldr r0, [r4, #0x24] + mov r1, #7 + bl FUN_020178A0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223ABC0 + + thumb_func_start MOD81_0223ABD8 +MOD81_0223ABD8: ; 0x0223ABD8 + push {r3, r4, lr} + sub sp, #0x24 + add r4, r0, #0 + bl FUN_020BB7F4 + bl G3X_InitMtxStack + ldr r0, _0223ACAC ; =0x04000060 + ldr r1, _0223ACB0 ; =0xFFFFCFFD + ldrh r2, [r0] + and r2, r1 + strh r2, [r0] + ldrh r3, [r0] + add r2, r1, #2 + and r3, r2 + mov r2, #0x10 + orr r2, r3 + strh r2, [r0] + ldrh r3, [r0] + ldr r2, _0223ACB4 ; =0x0000CFFB + and r2, r3 + strh r2, [r0] + add r2, r1, #2 + ldrh r3, [r0] + add r1, r1, #2 + and r3, r2 + mov r2, #8 + orr r2, r3 + strh r2, [r0] + ldrh r2, [r0] + and r2, r1 + mov r1, #0x20 + orr r1, r2 + strh r1, [r0] + ldr r0, _0223ACB8 ; =0x0223D12C + bl G3X_SetEdgeColorTable + mov r1, #0 + ldr r0, _0223ACBC ; =0x000043FF + ldr r2, _0223ACC0 ; =0x00007FFF + mov r3, #0x3f + str r1, [sp] + bl G3X_SetClearColor + ldr r1, _0223ACC4 ; =0x04000540 + mov r0, #2 + str r0, [r1] + ldr r0, _0223ACC8 ; =0xBFFF0000 + str r0, [r1, #0x40] + mov r0, #1 + add r1, r0, #0 + bl FUN_020AEB70 + mov r0, #1 + lsl r0, r0, #0xe + mov r1, #1 + bl FUN_020AEDF4 + mov r0, #1 + add r1, r0, #0 + bl FUN_0201E6E4 + ldr r1, _0223ACCC ; =0x04000008 + mov r0, #3 + ldrh r2, [r1] + bic r2, r0 + strh r2, [r1] + mov r1, #0 + mov r0, #1 + add r2, r1, #0 + add r3, r1, #0 + bl MOD81_022388C0 + str r0, [r4, #0x28] + mov r1, #0 + str r1, [sp] + str r1, [sp, #4] + str r1, [sp, #8] + str r1, [sp, #0xc] + ldr r0, [r4, #0x28] + mov r2, #0x5d + mov r3, #0x1b + bl MOD81_02238A84 + ldr r1, _0223ACD0 ; =0x000018E3 + str r0, [r4, #0x2c] + add r0, sp, #0x10 + strh r1, [r0] + mov r1, #0 + strh r1, [r0, #2] + strh r1, [r0, #4] + ldr r0, [r4, #0x28] + add r1, sp, #0x10 + bl MOD81_02238C60 + ldr r0, [r4, #0x28] + ldr r1, _0223ACD4 ; =0x000007D2 + bl MOD81_02238C90 + ldr r0, [r4, #0x28] + add r1, sp, #0x18 + bl MOD81_02238C40 + add sp, #0x24 + pop {r3, r4, pc} + nop +_0223ACAC: .word 0x04000060 +_0223ACB0: .word 0xFFFFCFFD +_0223ACB4: .word 0x0000CFFB +_0223ACB8: .word 0x0223D12C +_0223ACBC: .word 0x000043FF +_0223ACC0: .word 0x00007FFF +_0223ACC4: .word 0x04000540 +_0223ACC8: .word 0xBFFF0000 +_0223ACCC: .word 0x04000008 +_0223ACD0: .word 0x000018E3 +_0223ACD4: .word 0x000007D2 + thumb_func_end MOD81_0223ABD8 + + thumb_func_start MOD81_0223ACD8 +MOD81_0223ACD8: ; 0x0223ACD8 + push {r3, lr} + ldr r0, [r0, #0x28] + cmp r0, #0 + beq _0223ACE4 + bl MOD81_0223890C +_0223ACE4: + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD81_0223ACD8 + + thumb_func_start MOD81_0223ACE8 +MOD81_0223ACE8: ; 0x0223ACE8 + push {r4, lr} + sub sp, #0x70 + add r4, r0, #0 + add r0, #0x10 + mov r1, #0x5d + mov r2, #7 + mov r3, #8 + bl MOD81_0223874C + add r0, sp, #0x5c + bl FUN_020B19DC + add r0, sp, #0x38 + bl FUN_020B1A24 + mov r3, #0 + str r3, [sp] + mov r2, #1 + str r2, [sp, #4] + str r3, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + add r0, sp, #0x38 + str r0, [sp, #0x10] + mov r0, #0x5d + mov r1, #9 + bl FUN_02006AE4 + mov r0, #0x3a + str r0, [sp] + add r0, sp, #0x5c + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #0xa + mov r2, #1 + mov r3, #0 + bl FUN_02006A8C + mov r0, #0 + add r1, r4, #0 + str r0, [sp] + add r0, sp, #0x14 + add r1, #0x10 + add r2, sp, #0x38 + add r3, sp, #0x5c + bl MOD81_022387A8 + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r4] + add r1, sp, #0x14 + mov r2, #0x80 + mov r3, #0x60 + bl MOD81_022387C8 + mov r1, #0 + str r0, [r4, #0x20] + bl FUN_020200A0 + add sp, #0x70 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223ACE8 + + thumb_func_start MOD81_0223AD68 +MOD81_0223AD68: ; 0x0223AD68 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x20] + cmp r0, #0 + beq _0223AD76 + bl FUN_0201FFC8 +_0223AD76: + add r4, #0x10 + add r0, r4, #0 + bl MOD81_02238784 + pop {r4, pc} + thumb_func_end MOD81_0223AD68 + + thumb_func_start MOD81_0223AD80 +MOD81_0223AD80: ; 0x0223AD80 + mov r1, #0 + str r1, [r0, #4] + bx lr + .align 2, 0 + thumb_func_end MOD81_0223AD80 + + thumb_func_start MOD81_0223AD88 +MOD81_0223AD88: ; 0x0223AD88 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #4] + cmp r0, #0 + beq _0223AD9A + bl FUN_0200CAB4 + mov r0, #0 + str r0, [r4, #4] +_0223AD9A: + pop {r4, pc} + thumb_func_end MOD81_0223AD88 + + thumb_func_start MOD81_0223AD9C +MOD81_0223AD9C: ; 0x0223AD9C + push {r4, lr} + add r4, r1, #0 + str r0, [r4] + ldr r1, [r0, #0x2c] + ldr r2, _0223AE2C ; =0xFFFFD870 + str r1, [r4, #0xc] + ldr r0, [r0, #0x28] + ldr r1, _0223AE30 ; =0xFFF50E00 + str r0, [r4, #8] + mov r0, #0 + str r0, [r4, #0x10] + str r1, [r4, #0x14] + mov r1, #0xe2 + lsl r1, r1, #0xc + str r1, [r4, #0x18] + add r1, r4, #0 + add r1, #0x6c + strh r2, [r1] + add r1, r4, #0 + ldr r2, _0223AE34 ; =0xFFFFF550 + add r1, #0x6e + strh r2, [r1] + ldr r1, _0223AE38 ; =0x000134C4 + str r1, [r4, #0x3c] + ldr r1, _0223AE3C ; =0xFFFF4D56 + str r1, [r4, #0x40] + str r0, [r4, #0x60] + str r0, [r4, #0x64] + mov r1, #2 + str r0, [r4, #0x68] + lsl r1, r1, #0xc + strh r1, [r4, #0x34] + ldr r1, _0223AE40 ; =0xFFFFE000 + strh r1, [r4, #0x36] + strh r0, [r4, #0x38] + add r1, r4, #0 + ldr r0, [r4, #0xc] + add r1, #0x34 + bl MOD81_02238B40 + mov r0, #1 + lsl r0, r0, #0xc + str r0, [r4, #0x54] + mov r0, #0x4a + lsl r0, r0, #0xa + str r0, [r4, #0x44] + mov r0, #0x63 + lsl r0, r0, #0xa + str r0, [r4, #0x48] + mov r0, #0 + str r0, [r4, #0x5c] + add r0, r4, #0 + bl MOD81_0223AE90 + add r1, r4, #0 + ldr r0, [r4, #0xc] + add r1, #0x28 + bl MOD81_02238B18 + add r1, r4, #0 + ldr r0, [r4, #0xc] + add r1, #0x34 + bl MOD81_02238B28 + ldr r0, _0223AE44 ; =MOD81_0223AF5C + add r1, r4, #0 + mov r2, #0 + bl FUN_0200CA44 + str r0, [r4, #4] + pop {r4, pc} + nop +_0223AE2C: .word 0xFFFFD870 +_0223AE30: .word 0xFFF50E00 +_0223AE34: .word 0xFFFFF550 +_0223AE38: .word 0x000134C4 +_0223AE3C: .word 0xFFFF4D56 +_0223AE40: .word 0xFFFFE000 +_0223AE44: .word MOD81_0223AF5C + thumb_func_end MOD81_0223AD9C + + thumb_func_start MOD81_0223AE48 +MOD81_0223AE48: ; 0x0223AE48 + ldr r0, [r0, #4] + cmp r0, #0 + bne _0223AE52 + mov r0, #1 + bx lr +_0223AE52: + mov r0, #0 + bx lr + .align 2, 0 + thumb_func_end MOD81_0223AE48 + + thumb_func_start MOD81_0223AE58 +MOD81_0223AE58: ; 0x0223AE58 + push {r3, r4, r5, r6, r7, lr} + ldr r4, [sp, #0x18] + add r5, r0, #0 + add r6, r2, #0 + add r7, r3, #0 + cmp r4, #0 + beq _0223AE8E + ldr r0, [r5, #0x44] + sub r0, r1, r0 + add r1, r4, #0 + bl _s32_div_f + str r0, [r5, #0x4c] + ldr r0, [r5, #0x48] + add r1, r4, #0 + sub r0, r6, r0 + bl _s32_div_f + str r0, [r5, #0x50] + ldr r0, [r5, #0x54] + add r1, r4, #0 + sub r0, r7, r0 + bl _s32_div_f + str r0, [r5, #0x58] + ldr r0, [sp, #0x18] + str r0, [r5, #0x5c] +_0223AE8E: + pop {r3, r4, r5, r6, r7, pc} + thumb_func_end MOD81_0223AE58 + + thumb_func_start MOD81_0223AE90 +MOD81_0223AE90: ; 0x0223AE90 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r0, #0x6c + ldrh r0, [r0] + mov r1, #0xb6 + bl _s32_div_f + add r4, r0, #0 + mov r0, #0x5a + lsl r0, r0, #2 + cmp r4, r0 + blt _0223AEAA + sub r4, r4, r0 +_0223AEAA: + mov r0, #0x6c + ldrsh r1, [r5, r0] + mov r0, #0x6e + ldrsh r0, [r5, r0] + add r1, r1, r0 + add r0, r5, #0 + add r0, #0x6c + strh r1, [r0] + ldr r0, [r5, #0x5c] + cmp r0, #0 + beq _0223AEE4 + ldr r1, [r5, #0x44] + ldr r0, [r5, #0x4c] + add r0, r1, r0 + str r0, [r5, #0x44] + ldr r1, [r5, #0x48] + ldr r0, [r5, #0x50] + add r0, r1, r0 + str r0, [r5, #0x48] + ldr r1, [r5, #0x54] + ldr r0, [r5, #0x58] + add r1, r1, r0 + str r1, [r5, #0x54] + ldr r0, [r5, #0xc] + bl MOD81_02238B84 + ldr r0, [r5, #0x5c] + sub r0, r0, #1 + str r0, [r5, #0x5c] +_0223AEE4: + add r0, r4, #0 + add r0, #0x5a + lsl r1, r0, #2 + ldr r0, _0223AF58 ; =0x020EDF50 + ldr r2, [r5, #0x44] + ldr r0, [r0, r1] + asr r3, r2, #0x1f + asr r1, r0, #0x1f + bl _ll_mul + mov r2, #2 + mov r3, #0 + lsl r2, r2, #0xa + add r2, r0, r2 + adc r1, r3 + lsl r0, r1, #0x14 + lsr r1, r2, #0xc + orr r1, r0 + str r1, [r5, #0x1c] + ldr r2, [r5, #0x48] + ldr r0, _0223AF58 ; =0x020EDF50 + lsl r1, r4, #2 + ldr r0, [r0, r1] + asr r3, r2, #0x1f + asr r1, r0, #0x1f + bl _ll_mul + mov r2, #2 + mov r3, #0 + lsl r2, r2, #0xa + add r2, r0, r2 + adc r1, r3 + lsl r0, r1, #0x14 + lsr r1, r2, #0xc + orr r1, r0 + str r1, [r5, #0x20] + add r1, r5, #0 + str r3, [r5, #0x24] + mov r0, #0x34 + ldrsh r2, [r5, r0] + mov r0, #3 + lsl r0, r0, #8 + add r0, r2, r0 + strh r0, [r5, #0x34] + ldr r0, [r5, #0xc] + add r1, #0x34 + bl MOD81_02238B40 + add r0, r5, #0 + add r1, r5, #0 + add r5, #0x28 + add r0, #0x1c + add r1, #0x10 + add r2, r5, #0 + bl VEC_Add + pop {r3, r4, r5, pc} + nop +_0223AF58: .word 0x020EDF50 + thumb_func_end MOD81_0223AE90 + + thumb_func_start MOD81_0223AF5C +MOD81_0223AF5C: ; 0x0223AF5C + push {r3, r4, lr} + sub sp, #4 + add r4, r1, #0 + ldr r1, [r4, #0x68] + cmp r1, #0x3c + bge _0223AF6C + add r1, r1, #1 + str r1, [r4, #0x68] +_0223AF6C: + ldr r1, [r4, #0x60] + cmp r1, #4 + bls _0223AF74 + b _0223B084 +_0223AF74: + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_0223AF80: ; jump table + .short _0223AF8A - _0223AF80 - 2 ; case 0 + .short _0223AFBE - _0223AF80 - 2 ; case 1 + .short _0223AFFC - _0223AF80 - 2 ; case 2 + .short _0223B042 - _0223AF80 - 2 ; case 3 + .short _0223B072 - _0223AF80 - 2 ; case 4 +_0223AF8A: + ldr r1, [r4, #0x14] + ldr r0, [r4, #0x3c] + add r0, r1, r0 + str r0, [r4, #0x14] + ldr r1, [r4, #0x18] + ldr r0, [r4, #0x40] + add r0, r1, r0 + str r0, [r4, #0x18] + add r0, r4, #0 + bl MOD81_0223AE90 + add r1, r4, #0 + ldr r0, [r4, #0xc] + add r1, #0x28 + bl MOD81_02238B18 + ldr r0, [r4, #0xc] + bl MOD81_02238B8C + cmp r0, #0 + beq _0223B084 + ldr r0, [r4, #0x60] + add sp, #4 + add r0, r0, #1 + str r0, [r4, #0x60] + pop {r3, r4, pc} +_0223AFBE: + ldr r0, [r4, #0xc] + bl MOD81_02238B8C + cmp r0, #0 + bne _0223AFD8 + ldr r0, [r4] + bl MOD81_0223B088 + ldr r0, [r4, #0x60] + add sp, #4 + add r0, r0, #1 + str r0, [r4, #0x60] + pop {r3, r4, pc} +_0223AFD8: + ldr r1, [r4, #0x14] + ldr r0, [r4, #0x3c] + add r0, r1, r0 + str r0, [r4, #0x14] + ldr r1, [r4, #0x18] + ldr r0, [r4, #0x40] + add r0, r1, r0 + str r0, [r4, #0x18] + add r0, r4, #0 + bl MOD81_0223AE90 + ldr r0, [r4, #0xc] + add r4, #0x28 + add r1, r4, #0 + bl MOD81_02238B18 + add sp, #4 + pop {r3, r4, pc} +_0223AFFC: + ldr r1, [r4, #0x14] + ldr r0, [r4, #0x3c] + add r0, r1, r0 + str r0, [r4, #0x14] + ldr r1, [r4, #0x18] + ldr r0, [r4, #0x40] + add r0, r1, r0 + str r0, [r4, #0x18] + add r0, r4, #0 + bl MOD81_0223AE90 + add r1, r4, #0 + ldr r0, [r4, #0xc] + add r1, #0x28 + bl MOD81_02238B18 + ldr r0, [r4, #0x68] + cmp r0, #0x3c + blt _0223B084 + mov r1, #2 + lsl r1, r1, #0xa + mov r0, #0xc + str r0, [sp] + add r0, r4, #0 + add r2, r1, #0 + lsr r3, r1, #2 + bl MOD81_0223AE58 + mov r0, #0 + str r0, [r4, #0x64] + ldr r0, [r4, #0x60] + add sp, #4 + add r0, r0, #1 + str r0, [r4, #0x60] + pop {r3, r4, pc} +_0223B042: + add r0, r4, #0 + bl MOD81_0223AE90 + add r1, r4, #0 + ldr r0, [r4, #0xc] + add r1, #0x28 + bl MOD81_02238B18 + ldr r0, [r4, #0x64] + add r0, r0, #1 + str r0, [r4, #0x64] + cmp r0, #0xc + blt _0223B084 + ldr r0, [r4, #0xc] + mov r1, #0 + bl MOD81_02238B58 + mov r0, #0 + str r0, [r4, #0x64] + ldr r0, [r4, #0x60] + add sp, #4 + add r0, r0, #1 + str r0, [r4, #0x60] + pop {r3, r4, pc} +_0223B072: + ldr r1, [r4, #0x64] + add r1, r1, #1 + str r1, [r4, #0x64] + cmp r1, #8 + ble _0223B084 + mov r1, #0 + str r1, [r4, #4] + bl FUN_0200CAB4 +_0223B084: + add sp, #4 + pop {r3, r4, pc} + thumb_func_end MOD81_0223AF5C + + thumb_func_start MOD81_0223B088 +MOD81_0223B088: ; 0x0223B088 + mov r1, #1 + str r1, [r0, #0xc] + bx lr + .align 2, 0 + thumb_func_end MOD81_0223B088 + + thumb_func_start MOD81_0223B090 +MOD81_0223B090: ; 0x0223B090 + push {r3, r4, r5, lr} + sub sp, #8 + add r4, r1, #0 + add r5, r0, #0 + ldr r0, [r4, #0xc] + cmp r0, #0 + beq _0223B0DC + mov r3, #0 + ldr r1, _0223B0E0 ; =0x00001150 + str r3, [r4, #0xc] + add r0, sp, #0 + strh r1, [r0] + strh r3, [r0, #2] + strh r3, [r0, #4] + mov r1, #3 + ldr r0, [r4, #0x24] + add r2, r1, #0 + bl FUN_020179E0 + mov r2, #3 + add r3, r2, #0 + ldr r0, [r4, #0x24] + mov r1, #7 + add r3, #0xfd + bl FUN_020179E0 + ldr r0, [r4, #0x28] + add r1, sp, #0 + bl MOD81_02238C70 + ldr r2, _0223B0E4 ; =0x04000304 + ldrh r1, [r2] + lsr r0, r2, #0xb + orr r0, r1 + strh r0, [r2] + add r0, r5, #0 + bl FUN_0200CAB4 +_0223B0DC: + add sp, #8 + pop {r3, r4, r5, pc} + .align 2, 0 +_0223B0E0: .word 0x00001150 +_0223B0E4: .word 0x04000304 + thumb_func_end MOD81_0223B090 + + thumb_func_start MOD81_0223B0E8 +MOD81_0223B0E8: ; 0x0223B0E8 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r0, #0x3a + mov r1, #0x24 + bl FUN_02016998 + add r4, r0, #0 + beq _0223B106 + str r5, [r4] + mov r0, #0 + str r0, [r4, #4] + add r0, r5, #0 + bl MOD81_0223880C + str r0, [r4, #0xc] +_0223B106: + add r0, r4, #0 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD81_0223B0E8 + + thumb_func_start MOD81_0223B10C +MOD81_0223B10C: ; 0x0223B10C + push {r4, lr} + add r4, r0, #0 + beq _0223B11C + bl MOD81_0223B478 + add r0, r4, #0 + bl FUN_02016A18 +_0223B11C: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223B10C + + thumb_func_start MOD81_0223B120 +MOD81_0223B120: ; 0x0223B120 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldr r2, [r4] + add r5, r0, #0 + cmp r2, #2 + bhs _0223B148 + lsl r3, r2, #2 + ldr r2, _0223B14C ; =0x0223D180 + add r1, r5, #4 + ldr r2, [r2, r3] + blx r2 + cmp r0, #0 + beq _0223B144 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + mov r0, #0 + str r0, [r5, #4] +_0223B144: + mov r0, #0 + pop {r3, r4, r5, pc} +_0223B148: + mov r0, #1 + pop {r3, r4, r5, pc} + .align 2, 0 +_0223B14C: .word 0x0223D180 + thumb_func_end MOD81_0223B120 + + thumb_func_start MOD81_0223B150 +MOD81_0223B150: ; 0x0223B150 + push {lr} + sub sp, #0xc + bl MOD81_0223B264 + mov r0, #8 + str r0, [sp] + mov r1, #1 + str r1, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + ldr r3, _0223B174 ; =0x00007FFF + mov r0, #0 + add r2, r1, #0 + bl FUN_0200E1D0 + mov r0, #1 + add sp, #0xc + pop {pc} + .align 2, 0 +_0223B174: .word 0x00007FFF + thumb_func_end MOD81_0223B150 + + thumb_func_start MOD81_0223B178 +MOD81_0223B178: ; 0x0223B178 + push {r4, r5, lr} + sub sp, #0xc + add r4, r1, #0 + add r5, r0, #0 + ldr r0, [r4] + cmp r0, #0 + beq _0223B190 + cmp r0, #1 + beq _0223B1C2 + cmp r0, #2 + beq _0223B1EE + b _0223B1FC +_0223B190: + bl FUN_0200E308 + cmp r0, #0 + beq _0223B1FC + ldr r0, _0223B204 ; =0xFFE80000 + mov r2, #0 + str r0, [r5, #0x10] + mov r0, #5 + lsl r0, r0, #0x10 + str r0, [r5, #0x14] + ldr r0, _0223B208 ; =0x00005999 + add r1, r5, #0 + str r0, [r5, #0x18] + ldr r0, _0223B20C ; =0xFFFFDDDE + str r0, [r5, #0x1c] + mov r0, #0x3c + str r0, [r5, #8] + ldr r0, _0223B210 ; =MOD81_0223B21C + str r2, [r5, #0x20] + bl FUN_0200CA60 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _0223B1FC +_0223B1C2: + ldr r0, [r5, #0x20] + cmp r0, #0 + beq _0223B1FC + ldr r0, _0223B214 ; =0x000006A9 + bl FUN_020054C8 + mov r0, #0x10 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0 + ldr r3, _0223B218 ; =0x00007FFF + add r1, r0, #0 + add r2, r0, #0 + bl FUN_0200E1D0 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _0223B1FC +_0223B1EE: + bl FUN_0200E308 + cmp r0, #0 + beq _0223B1FC + add sp, #0xc + mov r0, #1 + pop {r4, r5, pc} +_0223B1FC: + mov r0, #0 + add sp, #0xc + pop {r4, r5, pc} + nop +_0223B204: .word 0xFFE80000 +_0223B208: .word 0x00005999 +_0223B20C: .word 0xFFFFDDDE +_0223B210: .word MOD81_0223B21C +_0223B214: .word 0x000006A9 +_0223B218: .word 0x00007FFF + thumb_func_end MOD81_0223B178 + + thumb_func_start MOD81_0223B21C +MOD81_0223B21C: ; 0x0223B21C + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldr r0, [r4, #8] + cmp r0, #0 + beq _0223B24A + sub r0, r0, #1 + str r0, [r4, #8] + ldr r1, [r4, #0x10] + ldr r0, [r4, #0x18] + add r0, r1, r0 + str r0, [r4, #0x10] + ldr r1, [r4, #0x14] + ldr r0, [r4, #0x1c] + add r2, r1, r0 + str r2, [r4, #0x14] + ldr r1, [r4, #0x10] + ldr r0, [r4, #0xc] + asr r1, r1, #0xc + asr r2, r2, #0xc + bl MOD81_0223B4B0 + pop {r3, r4, r5, pc} +_0223B24A: + mov r1, #0x2f + mvn r1, r1 + ldr r0, [r4, #0xc] + add r2, r1, #0 + bl MOD81_0223B4B0 + mov r0, #1 + str r0, [r4, #0x20] + add r0, r5, #0 + bl FUN_0200CAB4 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD81_0223B21C + + thumb_func_start MOD81_0223B264 +MOD81_0223B264: ; 0x0223B264 + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + ldr r0, _0223B45C ; =0x0223D1EC + bl FUN_0201E66C + ldr r2, _0223B460 ; =0x04000304 + ldrh r1, [r2] + lsr r0, r2, #0xb + orr r0, r1 + strh r0, [r2] + ldr r0, _0223B464 ; =0x0223D188 + bl FUN_02016BBC + ldr r0, [r4, #0xc] + ldr r2, _0223B468 ; =0x0223D198 + mov r1, #1 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0xc] + ldr r2, _0223B468 ; =0x0223D198 + mov r1, #5 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0xc] + ldr r2, _0223B46C ; =0x0223D1B4 + mov r1, #2 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0xc] + ldr r2, _0223B470 ; =0x0223D1D0 + mov r1, #3 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0xc] + ldr r2, _0223B470 ; =0x0223D1D0 + mov r1, #7 + mov r3, #0 + bl FUN_02016C18 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x5d + mov r1, #0x13 + mov r3, #3 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x5d + mov r1, #0x13 + mov r3, #7 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x5d + mov r1, #0x12 + mov r3, #3 + bl FUN_020068C8 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x5d + mov r1, #0x12 + mov r3, #7 + bl FUN_020068C8 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x3a + mov r2, #0 + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #0x14 + add r3, r2, #0 + bl FUN_02006930 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x3a + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #0x14 + mov r2, #4 + mov r3, #0 + bl FUN_02006930 + mov r0, #0xc8 + str r0, [sp] + mov r1, #1 + ldr r0, [r4, #0xc] + mov r2, #0 + add r3, r1, #0 + bl FUN_02017F48 + mov r0, #0xc8 + str r0, [sp] + ldr r0, [r4, #0xc] + mov r1, #5 + mov r2, #0 + mov r3, #1 + bl FUN_02017F48 + mov r0, #0xc8 + str r0, [sp] + ldr r0, [r4, #0xc] + mov r1, #2 + mov r2, #0 + mov r3, #1 + bl FUN_02017F48 + mov r1, #0 + str r1, [sp] + ldr r0, [r4] + mov r2, #1 + mov r3, #0xe + bl MOD81_022385D0 + mov r1, #0 + str r1, [sp] + ldr r0, [r4] + mov r2, #5 + mov r3, #0xe + bl MOD81_022385D0 + mov r0, #0 + str r0, [sp] + ldr r0, [r4] + mov r1, #1 + mov r2, #2 + mov r3, #0xf + bl MOD81_022385D0 + mov r3, #0 + str r3, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x40 + str r0, [sp, #8] + str r3, [sp, #0xc] + ldr r0, [r4, #0xc] + mov r1, #1 + mov r2, #0xc8 + bl FUN_02018540 + mov r3, #0 + str r3, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x40 + str r0, [sp, #8] + str r3, [sp, #0xc] + ldr r0, [r4, #0xc] + mov r1, #5 + mov r2, #0xc8 + bl FUN_02018540 + mov r3, #0 + str r3, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x40 + str r0, [sp, #8] + str r3, [sp, #0xc] + ldr r0, [r4, #0xc] + mov r1, #2 + mov r2, #0xc8 + bl FUN_02018540 + mov r0, #0x14 + str r0, [sp] + mov r1, #0 + str r1, [sp, #4] + ldr r0, [r4] + mov r2, #1 + mov r3, #0xe + bl MOD81_022386BC + mov r0, #0x14 + str r0, [sp] + mov r1, #0 + str r1, [sp, #4] + ldr r0, [r4] + mov r2, #5 + mov r3, #0xe + bl MOD81_022386BC + mov r2, #2 + str r2, [sp] + mov r0, #0 + str r0, [sp, #4] + ldr r0, [r4] + mov r1, #1 + mov r3, #0xf + bl MOD81_022386BC + ldr r0, [r4, #0xc] + mov r1, #1 + bl FUN_02017CD0 + ldr r0, [r4, #0xc] + mov r1, #5 + bl FUN_02017CD0 + ldr r0, [r4, #0xc] + mov r1, #2 + bl FUN_02017CD0 + ldr r0, [r4, #0xc] + ldr r2, _0223B474 ; =0xFFFFFE80 + mov r1, #0x50 + bl MOD81_0223B4B0 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E6E4 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E74C + add sp, #0x10 + pop {r4, pc} + .align 2, 0 +_0223B45C: .word 0x0223D1EC +_0223B460: .word 0x04000304 +_0223B464: .word 0x0223D188 +_0223B468: .word 0x0223D198 +_0223B46C: .word 0x0223D1B4 +_0223B470: .word 0x0223D1D0 +_0223B474: .word 0xFFFFFE80 + thumb_func_end MOD81_0223B264 + + thumb_func_start MOD81_0223B478 +MOD81_0223B478: ; 0x0223B478 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0xc] + mov r1, #3 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + mov r1, #7 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + mov r1, #2 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + mov r1, #6 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + mov r1, #1 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + mov r1, #5 + bl FUN_020178A0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223B478 + + thumb_func_start MOD81_0223B4B0 +MOD81_0223B4B0: ; 0x0223B4B0 + push {r4, r5, r6, lr} + ldr r3, _0223B4E4 ; =0x000001FF + add r4, r1, #0 + add r6, r2, #0 + and r4, r3 + add r5, r0, #0 + mov r1, #2 + mov r2, #3 + and r3, r6 + bl FUN_020179E0 + add r0, r5, #0 + mov r1, #1 + mov r2, #3 + add r3, r4, #0 + bl FUN_020179E0 + add r4, #0xc0 + add r0, r5, #0 + mov r1, #5 + mov r2, #3 + add r3, r4, #0 + bl FUN_020179E0 + pop {r4, r5, r6, pc} + nop +_0223B4E4: .word 0x000001FF + thumb_func_end MOD81_0223B4B0 + + thumb_func_start MOD81_0223B4E8 +MOD81_0223B4E8: ; 0x0223B4E8 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r0, #0x3a + mov r1, #0xb0 + bl FUN_02016998 + add r4, r0, #0 + beq _0223B51C + str r5, [r4] + mov r0, #0 + str r0, [r4, #4] + add r0, r5, #0 + bl MOD81_0223880C + str r0, [r4, #0x24] + mov r0, #0 + str r0, [r4, #0x28] + str r0, [r4, #0xc] + add r0, r4, #0 + add r0, #0x34 + bl MOD81_0223B9A0 + ldr r0, _0223B520 ; =MOD81_0223BCA8 + add r1, r4, #0 + bl FUN_02015F10 +_0223B51C: + add r0, r4, #0 + pop {r3, r4, r5, pc} + .align 2, 0 +_0223B520: .word MOD81_0223BCA8 + thumb_func_end MOD81_0223B4E8 + + thumb_func_start MOD81_0223B524 +MOD81_0223B524: ; 0x0223B524 + push {r4, lr} + add r4, r0, #0 + beq _0223B552 + mov r0, #0 + add r1, r0, #0 + bl FUN_02015F10 + add r0, r4, #0 + bl MOD81_0223B7D0 + add r0, r4, #0 + bl MOD81_0223B8F8 + add r0, r4, #0 + bl MOD81_0223B988 + add r0, r4, #0 + add r0, #0x34 + bl MOD81_0223B9A8 + add r0, r4, #0 + bl FUN_02016A18 +_0223B552: + pop {r4, pc} + thumb_func_end MOD81_0223B524 + + thumb_func_start MOD81_0223B554 +MOD81_0223B554: ; 0x0223B554 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldr r2, [r4] + add r5, r0, #0 + cmp r2, #2 + bhs _0223B57C + lsl r3, r2, #2 + ldr r2, _0223B580 ; =0x0223D214 + add r1, r5, #4 + ldr r2, [r2, r3] + blx r2 + cmp r0, #0 + beq _0223B578 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + mov r0, #0 + str r0, [r5, #4] +_0223B578: + mov r0, #0 + pop {r3, r4, r5, pc} +_0223B57C: + mov r0, #1 + pop {r3, r4, r5, pc} + .align 2, 0 +_0223B580: .word 0x0223D214 + thumb_func_end MOD81_0223B554 + + thumb_func_start MOD81_0223B584 +MOD81_0223B584: ; 0x0223B584 + push {r3, r4, lr} + sub sp, #0xc + add r4, r0, #0 + bl MOD81_0223B670 + add r0, r4, #0 + bl MOD81_0223B7E8 + add r0, r4, #0 + bl MOD81_0223B908 + mov r0, #8 + str r0, [sp] + mov r1, #1 + str r1, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + ldr r3, _0223B5B8 ; =0x00007FFF + mov r0, #0 + add r2, r1, #0 + bl FUN_0200E1D0 + mov r0, #1 + add sp, #0xc + pop {r3, r4, pc} + nop +_0223B5B8: .word 0x00007FFF + thumb_func_end MOD81_0223B584 + + thumb_func_start MOD81_0223B5BC +MOD81_0223B5BC: ; 0x0223B5BC + push {r4, r5, lr} + sub sp, #0xc + add r4, r1, #0 + add r5, r0, #0 + ldr r0, [r4] + cmp r0, #3 + bhi _0223B662 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_0223B5D6: ; jump table + .short _0223B5DE - _0223B5D6 - 2 ; case 0 + .short _0223B5FE - _0223B5D6 - 2 ; case 1 + .short _0223B628 - _0223B5D6 - 2 ; case 2 + .short _0223B654 - _0223B5D6 - 2 ; case 3 +_0223B5DE: + bl FUN_0200E308 + cmp r0, #0 + beq _0223B662 + ldr r0, [r5, #0x20] + mov r1, #3 + bl FUN_02020130 + ldr r0, [r5, #0x20] + mov r1, #1 + bl FUN_020200A0 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _0223B662 +_0223B5FE: + ldr r0, [r5, #0x20] + bl FUN_02020388 + cmp r0, #0 + bne _0223B662 + ldr r0, _0223B668 ; =0x000006AB + bl FUN_020054C8 + add r1, r5, #0 + add r0, r5, #0 + add r1, #0x34 + bl MOD81_0223B9BC + ldr r0, [r5, #0x2c] + mov r1, #1 + bl MOD81_02238B58 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _0223B662 +_0223B628: + add r5, #0x34 + add r0, r5, #0 + bl MOD81_0223BA7C + cmp r0, #0 + beq _0223B662 + mov r0, #0x10 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0 + ldr r3, _0223B66C ; =0x00007FFF + add r1, r0, #0 + add r2, r0, #0 + bl FUN_0200E1D0 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _0223B662 +_0223B654: + bl FUN_0200E308 + cmp r0, #0 + beq _0223B662 + add sp, #0xc + mov r0, #1 + pop {r4, r5, pc} +_0223B662: + mov r0, #0 + add sp, #0xc + pop {r4, r5, pc} + .align 2, 0 +_0223B668: .word 0x000006AB +_0223B66C: .word 0x00007FFF + thumb_func_end MOD81_0223B5BC + + thumb_func_start MOD81_0223B670 +MOD81_0223B670: ; 0x0223B670 + push {r4, r5, r6, r7, lr} + sub sp, #0x14 + add r4, r0, #0 + ldr r0, _0223B7C0 ; =0x0223D258 + bl FUN_0201E66C + ldr r2, _0223B7C4 ; =0x04000304 + ldrh r1, [r2] + lsr r0, r2, #0xb + orr r0, r1 + strh r0, [r2] + ldr r0, _0223B7C8 ; =0x0223D21C + bl FUN_02016BBC + ldr r0, [r4, #0x24] + ldr r2, _0223B7CC ; =0x0223D23C + mov r1, #3 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0x24] + ldr r2, _0223B7CC ; =0x0223D23C + mov r1, #7 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4] + bl MOD81_02238828 + cmp r0, #3 + bhi _0223B6C2 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_0223B6BA: ; jump table + .short _0223B6C2 - _0223B6BA - 2 ; case 0 + .short _0223B6CE - _0223B6BA - 2 ; case 1 + .short _0223B6DA - _0223B6BA - 2 ; case 2 + .short _0223B6E6 - _0223B6BA - 2 ; case 3 +_0223B6C2: + mov r0, #0xf + str r0, [sp, #0x10] + mov r7, #0x10 + mov r6, #0x11 + mov r5, #0 + b _0223B6F0 +_0223B6CE: + mov r0, #0xf + str r0, [sp, #0x10] + mov r7, #0x10 + mov r6, #0x11 + mov r5, #0x20 + b _0223B6F0 +_0223B6DA: + mov r0, #0xf + str r0, [sp, #0x10] + mov r7, #0x10 + mov r6, #0x11 + mov r5, #0x40 + b _0223B6F0 +_0223B6E6: + mov r0, #0x18 + str r0, [sp, #0x10] + mov r7, #0x19 + mov r6, #0x1a + mov r5, #0 +_0223B6F0: + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0x24] + mov r0, #0x5d + add r1, r7, #0 + mov r3, #3 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0x24] + mov r0, #0x5d + add r1, r7, #0 + mov r3, #7 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r1, [sp, #0x10] + ldr r2, [r4, #0x24] + mov r0, #0x5d + mov r3, #3 + bl FUN_020068C8 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r1, [sp, #0x10] + ldr r2, [r4, #0x24] + mov r0, #0x5d + mov r3, #7 + bl FUN_020068C8 + mov r2, #0 + str r2, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0x5d + add r1, r6, #0 + add r3, r5, #0 + bl FUN_02006948 + mov r0, #0 + str r0, [sp] + mov r0, #0x20 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0x5d + add r1, r6, #0 + mov r2, #4 + add r3, r5, #0 + bl FUN_02006948 + mov r1, #3 + ldr r0, [r4, #0x24] + add r2, r1, #0 + mov r3, #0 + bl FUN_020179E0 + mov r2, #3 + add r3, r2, #0 + ldr r0, [r4, #0x24] + mov r1, #7 + add r3, #0xfd + bl FUN_020179E0 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E6E4 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E74C + bl FUN_02033E74 + mov r0, #1 + mov r1, #0x39 + bl FUN_02033F04 + add sp, #0x14 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0223B7C0: .word 0x0223D258 +_0223B7C4: .word 0x04000304 +_0223B7C8: .word 0x0223D21C +_0223B7CC: .word 0x0223D23C + thumb_func_end MOD81_0223B670 + + thumb_func_start MOD81_0223B7D0 +MOD81_0223B7D0: ; 0x0223B7D0 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x24] + mov r1, #3 + bl FUN_020178A0 + ldr r0, [r4, #0x24] + mov r1, #7 + bl FUN_020178A0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223B7D0 + + thumb_func_start MOD81_0223B7E8 +MOD81_0223B7E8: ; 0x0223B7E8 + push {r3, r4, lr} + sub sp, #0x24 + add r4, r0, #0 + bl FUN_020BB7F4 + bl G3X_InitMtxStack + ldr r0, _0223B8C8 ; =0x04000060 + ldr r1, _0223B8CC ; =0xFFFFCFFD + ldrh r2, [r0] + and r2, r1 + strh r2, [r0] + ldrh r3, [r0] + add r2, r1, #2 + and r3, r2 + mov r2, #0x10 + orr r2, r3 + strh r2, [r0] + ldrh r3, [r0] + ldr r2, _0223B8D0 ; =0x0000CFFB + and r2, r3 + strh r2, [r0] + add r2, r1, #2 + ldrh r3, [r0] + add r1, r1, #2 + and r3, r2 + mov r2, #8 + orr r2, r3 + strh r2, [r0] + ldrh r2, [r0] + and r2, r1 + mov r1, #0x20 + orr r1, r2 + strh r1, [r0] + ldr r0, _0223B8D4 ; =0x0223D22C + bl G3X_SetEdgeColorTable + mov r1, #0 + ldr r0, _0223B8D8 ; =0x000043FF + ldr r2, _0223B8DC ; =0x00007FFF + mov r3, #0x3f + str r1, [sp] + bl G3X_SetClearColor + ldr r1, _0223B8E0 ; =0x04000540 + mov r0, #2 + str r0, [r1] + ldr r0, _0223B8E4 ; =0xBFFF0000 + str r0, [r1, #0x40] + mov r0, #1 + add r1, r0, #0 + bl FUN_020AEB70 + mov r0, #1 + lsl r0, r0, #0xe + mov r1, #1 + bl FUN_020AEDF4 + mov r0, #1 + add r1, r0, #0 + bl FUN_0201E6E4 + ldr r1, _0223B8E8 ; =0x04000008 + mov r0, #3 + ldrh r2, [r1] + bic r2, r0 + strh r2, [r1] + mov r1, #0 + mov r0, #1 + add r2, r1, #0 + add r3, r1, #0 + bl MOD81_022388C0 + str r0, [r4, #0x28] + mov r1, #0 + str r1, [sp] + str r1, [sp, #4] + str r1, [sp, #8] + str r1, [sp, #0xc] + ldr r0, [r4, #0x28] + mov r2, #0x5d + mov r3, #0x1b + bl MOD81_02238A84 + ldr r1, _0223B8EC ; =0x000018E3 + str r0, [r4, #0x2c] + add r0, sp, #0x10 + strh r1, [r0] + mov r1, #0 + strh r1, [r0, #2] + strh r1, [r0, #4] + ldr r0, [r4, #0x28] + add r1, sp, #0x10 + bl MOD81_02238C60 + ldr r1, _0223B8F0 ; =0x00001150 + add r0, sp, #0x10 + strh r1, [r0] + ldr r0, [r4, #0x28] + add r1, sp, #0x10 + bl MOD81_02238C70 + ldr r0, [r4, #0x28] + ldr r1, _0223B8F4 ; =0x000007D2 + bl MOD81_02238C90 + ldr r0, [r4, #0x28] + add r1, sp, #0x18 + bl MOD81_02238C40 + add sp, #0x24 + pop {r3, r4, pc} + .align 2, 0 +_0223B8C8: .word 0x04000060 +_0223B8CC: .word 0xFFFFCFFD +_0223B8D0: .word 0x0000CFFB +_0223B8D4: .word 0x0223D22C +_0223B8D8: .word 0x000043FF +_0223B8DC: .word 0x00007FFF +_0223B8E0: .word 0x04000540 +_0223B8E4: .word 0xBFFF0000 +_0223B8E8: .word 0x04000008 +_0223B8EC: .word 0x000018E3 +_0223B8F0: .word 0x00001150 +_0223B8F4: .word 0x000007D2 + thumb_func_end MOD81_0223B7E8 + + thumb_func_start MOD81_0223B8F8 +MOD81_0223B8F8: ; 0x0223B8F8 + push {r3, lr} + ldr r0, [r0, #0x28] + cmp r0, #0 + beq _0223B904 + bl MOD81_0223890C +_0223B904: + pop {r3, pc} + .align 2, 0 + thumb_func_end MOD81_0223B8F8 + + thumb_func_start MOD81_0223B908 +MOD81_0223B908: ; 0x0223B908 + push {r4, lr} + sub sp, #0x70 + add r4, r0, #0 + add r0, #0x10 + mov r1, #0x5d + mov r2, #7 + mov r3, #8 + bl MOD81_0223874C + add r0, sp, #0x5c + bl FUN_020B19DC + add r0, sp, #0x38 + bl FUN_020B1A24 + mov r3, #0 + str r3, [sp] + mov r2, #1 + str r2, [sp, #4] + str r3, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + add r0, sp, #0x38 + str r0, [sp, #0x10] + mov r0, #0x5d + mov r1, #9 + bl FUN_02006AE4 + mov r0, #0x3a + str r0, [sp] + add r0, sp, #0x5c + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #0xa + mov r2, #1 + mov r3, #0 + bl FUN_02006A8C + mov r0, #1 + add r1, r4, #0 + str r0, [sp] + add r0, sp, #0x14 + add r1, #0x10 + add r2, sp, #0x38 + add r3, sp, #0x5c + bl MOD81_022387A8 + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r4] + add r1, sp, #0x14 + mov r2, #0x80 + mov r3, #0x60 + bl MOD81_022387C8 + mov r1, #0 + str r0, [r4, #0x20] + bl FUN_020200A0 + add sp, #0x70 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223B908 + + thumb_func_start MOD81_0223B988 +MOD81_0223B988: ; 0x0223B988 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x20] + cmp r0, #0 + beq _0223B996 + bl FUN_0201FFC8 +_0223B996: + add r4, #0x10 + add r0, r4, #0 + bl MOD81_02238784 + pop {r4, pc} + thumb_func_end MOD81_0223B988 + + thumb_func_start MOD81_0223B9A0 +MOD81_0223B9A0: ; 0x0223B9A0 + mov r1, #0 + str r1, [r0, #4] + bx lr + .align 2, 0 + thumb_func_end MOD81_0223B9A0 + + thumb_func_start MOD81_0223B9A8 +MOD81_0223B9A8: ; 0x0223B9A8 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #4] + cmp r0, #0 + beq _0223B9BA + bl FUN_0200CAB4 + mov r0, #0 + str r0, [r4, #4] +_0223B9BA: + pop {r4, pc} + thumb_func_end MOD81_0223B9A8 + + thumb_func_start MOD81_0223B9BC +MOD81_0223B9BC: ; 0x0223B9BC + push {r3, r4, lr} + sub sp, #4 + add r4, r1, #0 + str r0, [r4] + ldr r1, [r0, #0x2c] + ldr r2, _0223BA5C ; =0xFFFFD870 + str r1, [r4, #0xc] + ldr r0, [r0, #0x28] + ldr r1, _0223BA60 ; =0x003D6C00 + str r0, [r4, #8] + mov r0, #0 + str r0, [r4, #0x10] + str r1, [r4, #0x14] + ldr r1, _0223BA64 ; =0xFFE44000 + str r1, [r4, #0x18] + add r1, r4, #0 + add r1, #0x78 + strh r2, [r1] + add r1, r4, #0 + ldr r2, _0223BA68 ; =0xFFFFF550 + add r1, #0x7a + strh r2, [r1] + ldr r1, _0223BA6C ; =0xFFFEF2C6 + str r1, [r4, #0x3c] + ldr r1, _0223BA70 ; =0x0000936D + str r1, [r4, #0x40] + str r0, [r4, #0x6c] + str r0, [r4, #0x70] + mov r1, #2 + str r0, [r4, #0x74] + lsl r1, r1, #0xc + strh r1, [r4, #0x34] + ldr r1, _0223BA74 ; =0xFFFFE000 + strh r1, [r4, #0x36] + strh r0, [r4, #0x38] + add r1, r4, #0 + ldr r0, [r4, #0xc] + add r1, #0x34 + bl MOD81_02238B40 + mov r3, #2 + lsl r3, r3, #8 + mov r1, #0x4a + mov r2, #0x63 + str r3, [r4, #0x5c] + lsl r0, r3, #2 + str r0, [r4, #0x44] + str r0, [r4, #0x48] + mov r0, #0 + str r0, [r4, #0x68] + mov r0, #0xc + str r0, [sp] + add r0, r4, #0 + lsl r1, r1, #0xa + lsl r2, r2, #0xa + lsl r3, r3, #3 + bl MOD81_0223BA8C + add r0, r4, #0 + bl MOD81_0223BAD0 + add r1, r4, #0 + ldr r0, [r4, #0xc] + add r1, #0x28 + bl MOD81_02238B18 + add r1, r4, #0 + ldr r0, [r4, #0xc] + add r1, #0x34 + bl MOD81_02238B28 + ldr r0, _0223BA78 ; =MOD81_0223BBC8 + add r1, r4, #0 + mov r2, #0 + bl FUN_0200CA44 + str r0, [r4, #4] + add sp, #4 + pop {r3, r4, pc} + nop +_0223BA5C: .word 0xFFFFD870 +_0223BA60: .word 0x003D6C00 +_0223BA64: .word 0xFFE44000 +_0223BA68: .word 0xFFFFF550 +_0223BA6C: .word 0xFFFEF2C6 +_0223BA70: .word 0x0000936D +_0223BA74: .word 0xFFFFE000 +_0223BA78: .word MOD81_0223BBC8 + thumb_func_end MOD81_0223B9BC + + thumb_func_start MOD81_0223BA7C +MOD81_0223BA7C: ; 0x0223BA7C + ldr r0, [r0, #4] + cmp r0, #0 + bne _0223BA86 + mov r0, #1 + bx lr +_0223BA86: + mov r0, #0 + bx lr + .align 2, 0 + thumb_func_end MOD81_0223BA7C + + thumb_func_start MOD81_0223BA8C +MOD81_0223BA8C: ; 0x0223BA8C + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + ldr r0, [sp, #0x18] + add r4, r1, #0 + add r6, r2, #0 + add r7, r3, #0 + str r0, [sp] + cmp r0, #0 + beq _0223BACC + ldr r0, [r5, #0x44] + ldr r1, [sp] + sub r0, r4, r0 + bl _s32_div_f + str r0, [r5, #0x4c] + ldr r0, [r5, #0x48] + ldr r1, [sp] + sub r0, r6, r0 + bl _s32_div_f + str r0, [r5, #0x50] + ldr r0, [r5, #0x5c] + ldr r1, [sp] + sub r0, r7, r0 + bl _s32_div_f + str r0, [r5, #0x60] + str r4, [r5, #0x54] + str r6, [r5, #0x58] + ldr r0, [sp, #0x18] + str r7, [r5, #0x64] + str r0, [r5, #0x68] +_0223BACC: + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 + thumb_func_end MOD81_0223BA8C + + thumb_func_start MOD81_0223BAD0 +MOD81_0223BAD0: ; 0x0223BAD0 + push {r3, r4, r5, lr} + add r5, r0, #0 + ldr r0, _0223BBC0 ; =0x0223D3A0 + ldr r0, [r0] + cmp r0, #0 + beq _0223BBAE + add r0, r5, #0 + add r0, #0x78 + ldrh r0, [r0] + mov r1, #0xb6 + bl _s32_div_f + add r4, r0, #0 + mov r0, #0x5a + lsl r0, r0, #2 + cmp r4, r0 + blt _0223BAF4 + sub r4, r4, r0 +_0223BAF4: + mov r0, #0x78 + ldrsh r1, [r5, r0] + mov r0, #0x7a + ldrsh r0, [r5, r0] + sub r1, r1, r0 + add r0, r5, #0 + add r0, #0x78 + strh r1, [r0] + ldr r0, [r5, #0x68] + cmp r0, #0 + beq _0223BB3C + sub r0, r0, #1 + str r0, [r5, #0x68] + beq _0223BB28 + ldr r1, [r5, #0x44] + ldr r0, [r5, #0x4c] + add r0, r1, r0 + str r0, [r5, #0x44] + ldr r1, [r5, #0x48] + ldr r0, [r5, #0x50] + add r0, r1, r0 + str r0, [r5, #0x48] + ldr r1, [r5, #0x5c] + ldr r0, [r5, #0x60] + add r0, r1, r0 + b _0223BB32 +_0223BB28: + ldr r0, [r5, #0x54] + str r0, [r5, #0x44] + ldr r0, [r5, #0x58] + str r0, [r5, #0x48] + ldr r0, [r5, #0x64] +_0223BB32: + str r0, [r5, #0x5c] + ldr r0, [r5, #0xc] + ldr r1, [r5, #0x5c] + bl MOD81_02238B84 +_0223BB3C: + add r0, r4, #0 + add r0, #0x5a + lsl r1, r0, #2 + ldr r0, _0223BBC4 ; =0x020EDF50 + ldr r2, [r5, #0x44] + ldr r0, [r0, r1] + asr r3, r2, #0x1f + asr r1, r0, #0x1f + bl _ll_mul + mov r2, #2 + mov r3, #0 + lsl r2, r2, #0xa + add r2, r0, r2 + adc r1, r3 + lsl r0, r1, #0x14 + lsr r1, r2, #0xc + orr r1, r0 + str r1, [r5, #0x1c] + ldr r2, [r5, #0x48] + ldr r0, _0223BBC4 ; =0x020EDF50 + lsl r1, r4, #2 + ldr r0, [r0, r1] + asr r3, r2, #0x1f + asr r1, r0, #0x1f + bl _ll_mul + mov r2, #2 + mov r3, #0 + lsl r2, r2, #0xa + add r2, r0, r2 + adc r1, r3 + lsl r0, r1, #0x14 + lsr r1, r2, #0xc + orr r1, r0 + str r1, [r5, #0x20] + add r1, r5, #0 + str r3, [r5, #0x24] + mov r0, #0x34 + ldrsh r2, [r5, r0] + mov r0, #3 + lsl r0, r0, #8 + sub r0, r2, r0 + strh r0, [r5, #0x34] + ldr r0, [r5, #0xc] + add r1, #0x34 + bl MOD81_02238B40 + add r0, r5, #0 + add r1, r5, #0 + add r5, #0x28 + add r0, #0x1c + add r1, #0x10 + add r2, r5, #0 + bl VEC_Add + pop {r3, r4, r5, pc} +_0223BBAE: + add r2, r5, #0 + add r2, #0x10 + ldmia r2!, {r0, r1} + add r5, #0x28 + stmia r5!, {r0, r1} + ldr r0, [r2] + str r0, [r5] + pop {r3, r4, r5, pc} + nop +_0223BBC0: .word 0x0223D3A0 +_0223BBC4: .word 0x020EDF50 + thumb_func_end MOD81_0223BAD0 + + thumb_func_start MOD81_0223BBC8 +MOD81_0223BBC8: ; 0x0223BBC8 + push {r4, lr} + add r4, r1, #0 + ldr r1, [r4, #0x74] + cmp r1, #0x46 + bge _0223BBD6 + add r1, r1, #1 + str r1, [r4, #0x74] +_0223BBD6: + ldr r1, [r4, #0x6c] + cmp r1, #3 + bhi _0223BC9C + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_0223BBE8: ; jump table + .short _0223BBF0 - _0223BBE8 - 2 ; case 0 + .short _0223BC16 - _0223BBE8 - 2 ; case 1 + .short _0223BC50 - _0223BBE8 - 2 ; case 2 + .short _0223BC8A - _0223BBE8 - 2 ; case 3 +_0223BBF0: + add r0, r4, #0 + bl MOD81_0223BAD0 + add r1, r4, #0 + ldr r0, [r4, #0xc] + add r1, #0x28 + bl MOD81_02238B18 + ldr r0, [r4, #0x74] + add r0, r0, #1 + str r0, [r4, #0x74] + cmp r0, #0xc + blt _0223BC9C + mov r0, #0 + str r0, [r4, #0x74] + ldr r0, [r4, #0x6c] + add r0, r0, #1 + str r0, [r4, #0x6c] + pop {r4, pc} +_0223BC16: + ldr r0, [r4, #0xc] + bl MOD81_02238B8C + cmp r0, #0 + bne _0223BC2E + ldr r0, [r4] + bl MOD81_0223BCA0 + ldr r0, [r4, #0x6c] + add r0, r0, #1 + str r0, [r4, #0x6c] + pop {r4, pc} +_0223BC2E: + ldr r1, [r4, #0x14] + ldr r0, [r4, #0x3c] + add r0, r1, r0 + str r0, [r4, #0x14] + ldr r1, [r4, #0x18] + ldr r0, [r4, #0x40] + add r0, r1, r0 + str r0, [r4, #0x18] + add r0, r4, #0 + bl MOD81_0223BAD0 + ldr r0, [r4, #0xc] + add r4, #0x28 + add r1, r4, #0 + bl MOD81_02238B18 + pop {r4, pc} +_0223BC50: + ldr r1, [r4, #0x14] + ldr r0, [r4, #0x3c] + add r0, r1, r0 + str r0, [r4, #0x14] + ldr r1, [r4, #0x18] + ldr r0, [r4, #0x40] + add r0, r1, r0 + str r0, [r4, #0x18] + add r0, r4, #0 + bl MOD81_0223BAD0 + add r1, r4, #0 + ldr r0, [r4, #0xc] + add r1, #0x28 + bl MOD81_02238B18 + ldr r0, [r4, #0x74] + cmp r0, #0x46 + blt _0223BC9C + ldr r0, [r4, #0xc] + mov r1, #0 + bl MOD81_02238B58 + mov r0, #0 + str r0, [r4, #0x70] + ldr r0, [r4, #0x6c] + add r0, r0, #1 + str r0, [r4, #0x6c] + pop {r4, pc} +_0223BC8A: + ldr r1, [r4, #0x70] + add r1, r1, #1 + str r1, [r4, #0x70] + cmp r1, #8 + ble _0223BC9C + mov r1, #0 + str r1, [r4, #4] + bl FUN_0200CAB4 +_0223BC9C: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223BBC8 + + thumb_func_start MOD81_0223BCA0 +MOD81_0223BCA0: ; 0x0223BCA0 + mov r1, #1 + str r1, [r0, #0xc] + bx lr + .align 2, 0 + thumb_func_end MOD81_0223BCA0 + + thumb_func_start MOD81_0223BCA8 +MOD81_0223BCA8: ; 0x0223BCA8 + push {r4, lr} + sub sp, #8 + add r4, r0, #0 + ldr r0, [r4, #0x28] + cmp r0, #0 + beq _0223BCC6 + bl G3X_ResetMtxStack + ldr r0, [r4, #0x28] + bl MOD81_02238940 + mov r0, #0 + add r1, r0, #0 + bl FUN_020222B4 +_0223BCC6: + ldr r0, [r4, #0xc] + cmp r0, #0 + beq _0223BD08 + ldr r1, _0223BD0C ; =0x0000EEB0 + add r0, sp, #0 + strh r1, [r0] + mov r1, #0 + strh r1, [r0, #2] + strh r1, [r0, #4] + mov r1, #3 + add r3, r1, #0 + ldr r0, [r4, #0x24] + add r2, r1, #0 + add r3, #0xfd + bl FUN_020179E0 + ldr r0, [r4, #0x24] + mov r1, #7 + mov r2, #3 + mov r3, #0 + bl FUN_020179E0 + ldr r0, [r4, #0x28] + add r1, sp, #0 + bl MOD81_02238C70 + ldr r2, _0223BD10 ; =0x04000304 + ldr r0, _0223BD14 ; =0xFFFF7FFF + ldrh r1, [r2] + and r0, r1 + strh r0, [r2] + mov r0, #0 + str r0, [r4, #0xc] +_0223BD08: + add sp, #8 + pop {r4, pc} + .align 2, 0 +_0223BD0C: .word 0x0000EEB0 +_0223BD10: .word 0x04000304 +_0223BD14: .word 0xFFFF7FFF + thumb_func_end MOD81_0223BCA8 + + thumb_func_start MOD81_0223BD18 +MOD81_0223BD18: ; 0x0223BD18 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r0, #0x3a + mov r1, #0x3c + bl FUN_02016998 + add r4, r0, #0 + beq _0223BD46 + str r5, [r4] + mov r0, #0 + str r0, [r4, #4] + add r0, r5, #0 + bl MOD81_0223880C + str r0, [r4, #0xc] + mov r0, #0 + str r0, [r4, #0x20] + str r0, [r4, #0x10] + str r0, [r4, #0x14] + str r0, [r4, #0x18] + str r0, [r4, #0x30] + str r0, [r4, #0x34] + str r0, [r4, #0x38] +_0223BD46: + add r0, r4, #0 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD81_0223BD18 + + thumb_func_start MOD81_0223BD4C +MOD81_0223BD4C: ; 0x0223BD4C + push {r4, lr} + add r4, r0, #0 + beq _0223BD80 + bl MOD81_0223C1A8 + add r0, r4, #0 + bl MOD81_0223C2EC + ldr r0, [r4, #0x30] + cmp r0, #0 + beq _0223BD66 + bl MOD81_0223C460 +_0223BD66: + ldr r0, [r4, #0x34] + cmp r0, #0 + beq _0223BD70 + bl MOD81_0223C3B0 +_0223BD70: + ldr r0, [r4, #0x38] + cmp r0, #0 + beq _0223BD7A + bl MOD81_0223C514 +_0223BD7A: + add r0, r4, #0 + bl FUN_02016A18 +_0223BD80: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223BD4C + + thumb_func_start MOD81_0223BD84 +MOD81_0223BD84: ; 0x0223BD84 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldr r2, [r4] + add r5, r0, #0 + cmp r2, #3 + bhs _0223BDB2 + lsl r3, r2, #2 + ldr r2, _0223BDB8 ; =0x0223D288 + add r1, r5, #4 + ldr r2, [r2, r3] + blx r2 + cmp r0, #0 + beq _0223BDA8 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + mov r0, #0 + str r0, [r5, #4] +_0223BDA8: + add r0, r5, #0 + bl MOD81_0223BDBC + mov r0, #0 + pop {r3, r4, r5, pc} +_0223BDB2: + mov r0, #1 + pop {r3, r4, r5, pc} + nop +_0223BDB8: .word 0x0223D288 + thumb_func_end MOD81_0223BD84 + + thumb_func_start MOD81_0223BDBC +MOD81_0223BDBC: ; 0x0223BDBC + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x20] + cmp r0, #0 + beq _0223BDEE + mov r0, #0x2a + ldrsh r1, [r4, r0] + mov r0, #1 + lsl r0, r0, #0xc + add r0, r1, r0 + strh r0, [r4, #0x2a] + add r1, r4, #0 + ldr r0, [r4, #0x24] + add r1, #0x28 + bl MOD81_02238B40 + bl G3X_ResetMtxStack + ldr r0, [r4, #0x20] + bl MOD81_02238940 + mov r0, #0 + add r1, r0, #0 + bl FUN_020222B4 +_0223BDEE: + pop {r4, pc} + thumb_func_end MOD81_0223BDBC + + thumb_func_start MOD81_0223BDF0 +MOD81_0223BDF0: ; 0x0223BDF0 + push {r3, r4, lr} + sub sp, #0xc + add r4, r0, #0 + bl MOD81_0223BF74 + add r0, r4, #0 + bl MOD81_0223C1DC + mov r0, #8 + str r0, [sp] + mov r1, #1 + str r1, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + ldr r3, _0223BE1C ; =0x00007FFF + mov r0, #0 + add r2, r1, #0 + bl FUN_0200E1D0 + mov r0, #1 + add sp, #0xc + pop {r3, r4, pc} + .align 2, 0 +_0223BE1C: .word 0x00007FFF + thumb_func_end MOD81_0223BDF0 + + thumb_func_start MOD81_0223BE20 +MOD81_0223BE20: ; 0x0223BE20 + push {r3, r4, r5, lr} + add r5, r1, #0 + ldr r1, [r5] + add r4, r0, #0 + cmp r1, #6 + bhi _0223BEEA + add r2, r1, r1 + add r2, pc + ldrh r2, [r2, #6] + lsl r2, r2, #0x10 + asr r2, r2, #0x10 + add pc, r2 +_0223BE38: ; jump table + .short _0223BE46 - _0223BE38 - 2 ; case 0 + .short _0223BE64 - _0223BE38 - 2 ; case 1 + .short _0223BE7E - _0223BE38 - 2 ; case 2 + .short _0223BE90 - _0223BE38 - 2 ; case 3 + .short _0223BEA8 - _0223BE38 - 2 ; case 4 + .short _0223BECC - _0223BE38 - 2 ; case 5 + .short _0223BEE0 - _0223BE38 - 2 ; case 6 +_0223BE46: + bl FUN_0200E308 + cmp r0, #0 + beq _0223BEEA + mov r0, #0 + str r0, [r4, #8] + add r0, r4, #0 + add r4, #0x30 + add r1, r4, #0 + bl MOD81_0223C3CC + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0223BEEA +_0223BE64: + ldr r1, [r4, #8] + add r1, r1, #1 + str r1, [r4, #8] + cmp r1, #8 + ble _0223BEEA + add r4, #0x34 + add r1, r4, #0 + bl MOD81_0223C300 + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0223BEEA +_0223BE7E: + ldr r0, [r4, #0x34] + cmp r0, #0 + bne _0223BEEA + ldr r0, [r4, #0x30] + cmp r0, #0 + bne _0223BEEA + add r0, r1, #1 + str r0, [r5] + b _0223BEEA +_0223BE90: + mov r1, #0 + add r0, #0x14 + mvn r1, r1 + bl MOD81_02238118 + str r0, [r4, #0x10] + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0223BEEA +_0223BEA8: + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + cmp r0, #0x1e + ble _0223BEEA + add r0, r4, #0 + add r0, #0x38 + str r0, [sp] + ldr r0, [r4, #0x24] + mov r1, #0x1f + mov r2, #0 + mov r3, #0x28 + bl MOD81_0223C47C + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0223BEEA +_0223BECC: + ldr r0, [r4, #0x38] + cmp r0, #0 + bne _0223BEEA + ldr r0, [r4, #0x10] + bl MOD81_022381EC + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0223BEEA +_0223BEE0: + ldr r0, [r4, #0x14] + cmp r0, #0 + bne _0223BEEA + mov r0, #1 + pop {r3, r4, r5, pc} +_0223BEEA: + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD81_0223BE20 + + thumb_func_start MOD81_0223BEF0 +MOD81_0223BEF0: ; 0x0223BEF0 + push {r4, r5, lr} + sub sp, #0xc + add r4, r1, #0 + add r5, r0, #0 + ldr r0, [r4] + cmp r0, #0 + beq _0223BF08 + cmp r0, #1 + beq _0223BF30 + cmp r0, #2 + beq _0223BF5A + b _0223BF6E +_0223BF08: + mov r0, #0x4a + lsl r0, r0, #2 + mov r3, #1 + str r0, [sp] + add r0, r5, #0 + str r3, [sp, #4] + add r0, #0x1c + str r0, [sp, #8] + ldr r0, [r5, #0xc] + lsl r1, r3, #0xc + lsl r2, r3, #0xa + bl MOD81_022384AC + str r0, [r5, #0x18] + mov r0, #0 + str r0, [r5, #8] + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _0223BF6E +_0223BF30: + ldr r0, [r5, #8] + add r0, r0, #1 + str r0, [r5, #8] + cmp r0, #0xd + ble _0223BF6E + mov r0, #8 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0 + add r1, r0, #0 + add r2, r0, #0 + add r3, r0, #0 + bl FUN_0200E1D0 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + b _0223BF6E +_0223BF5A: + bl FUN_0200E308 + cmp r0, #0 + beq _0223BF6E + ldr r0, [r5, #0x1c] + cmp r0, #0 + beq _0223BF6E + add sp, #0xc + mov r0, #1 + pop {r4, r5, pc} +_0223BF6E: + mov r0, #0 + add sp, #0xc + pop {r4, r5, pc} + thumb_func_end MOD81_0223BEF0 + + thumb_func_start MOD81_0223BF74 +MOD81_0223BF74: ; 0x0223BF74 + push {r3, r4, r5, lr} + sub sp, #0x10 + add r4, r0, #0 + ldr r0, _0223C18C ; =0x0223D2EC + bl FUN_0201E66C + ldr r2, _0223C190 ; =0x04000304 + ldrh r1, [r2] + lsr r0, r2, #0xb + orr r0, r1 + strh r0, [r2] + ldr r0, _0223C194 ; =0x0223D294 + bl FUN_02016BBC + ldr r0, [r4, #0xc] + ldr r2, _0223C198 ; =0x0223D2B4 + mov r1, #2 + mov r3, #1 + bl FUN_02016C18 + ldr r0, [r4, #0xc] + ldr r2, _0223C198 ; =0x0223D2B4 + mov r1, #6 + mov r3, #1 + bl FUN_02016C18 + bl OS_DisableInterrupts + add r5, r0, #0 + ldr r0, [r4, #0xc] + ldr r2, _0223C19C ; =0x0223D2D0 + mov r1, #3 + mov r3, #2 + bl FUN_02016C18 + ldr r0, [r4, #0xc] + ldr r2, _0223C19C ; =0x0223D2D0 + mov r1, #7 + mov r3, #2 + bl FUN_02016C18 + add r0, r5, #0 + bl OS_RestoreInterrupts + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + mov r1, #2 + ldr r2, [r4, #0xc] + mov r0, #0x5d + add r3, r1, #0 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x5d + mov r1, #2 + mov r3, #6 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r1, #1 + str r1, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x5d + mov r3, #2 + bl FUN_020068C8 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r1, #1 + str r1, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x5d + mov r3, #6 + bl FUN_020068C8 + ldr r0, [r4] + bl MOD81_02238828 + add r5, r0, #0 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x3a + mov r2, #0 + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #3 + add r3, r2, #0 + bl FUN_02006930 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x3a + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #3 + mov r2, #4 + mov r3, #0 + bl FUN_02006930 + ldr r0, _0223C1A0 ; =0x0223D280 + lsl r1, r5, #1 + ldrh r5, [r0, r1] + mov r0, #0x20 + str r0, [sp] + mov r0, #0x40 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0x5d + mov r1, #3 + mov r2, #0 + add r3, r5, #0 + bl FUN_02006948 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x40 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #0x5d + mov r1, #3 + mov r2, #4 + add r3, r5, #0 + bl FUN_02006948 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x5d + mov r1, #5 + mov r3, #3 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x5d + mov r1, #5 + mov r3, #7 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x5d + mov r1, #4 + mov r3, #3 + bl FUN_020068C8 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0xc] + mov r0, #0x5d + mov r1, #4 + mov r3, #7 + bl FUN_020068C8 + mov r0, #0x3a + mov r1, #0x60 + bl FUN_02016998 + add r5, r0, #0 + beq _0223C14A + mov r0, #0 + add r1, r5, #0 + mov r2, #0x60 + bl MIi_CpuClear32 + add r0, r5, #0 + mov r1, #0x60 + bl DC_FlushRange + bl GX_BeginLoadBGExtPltt + bl GXS_BeginLoadBGExtPltt + mov r1, #6 + add r0, r5, #0 + lsl r1, r1, #0xc + mov r2, #0x60 + bl GX_LoadBGExtPltt + mov r1, #6 + add r0, r5, #0 + lsl r1, r1, #0xc + mov r2, #0x60 + bl GXS_LoadBGExtPltt + bl GX_EndLoadBGExtPltt + bl GXS_EndLoadBGExtPltt + add r0, r5, #0 + bl FUN_02016A18 +_0223C14A: + ldr r0, [r4, #0xc] + ldr r3, _0223C1A4 ; =0xFFFFFE80 + mov r1, #2 + mov r2, #3 + bl FUN_020179E0 + mov r2, #3 + add r3, r2, #0 + ldr r0, [r4, #0xc] + mov r1, #6 + sub r3, #0xc3 + bl FUN_020179E0 + mov r1, #3 + ldr r0, [r4, #0xc] + add r2, r1, #0 + mov r3, #0x43 + bl FUN_020179E0 + mov r0, #7 + mov r1, #0 + bl FUN_0201797C + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E6E4 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E74C + add sp, #0x10 + pop {r3, r4, r5, pc} + .align 2, 0 +_0223C18C: .word 0x0223D2EC +_0223C190: .word 0x04000304 +_0223C194: .word 0x0223D294 +_0223C198: .word 0x0223D2B4 +_0223C19C: .word 0x0223D2D0 +_0223C1A0: .word 0x0223D280 +_0223C1A4: .word 0xFFFFFE80 + thumb_func_end MOD81_0223BF74 + + thumb_func_start MOD81_0223C1A8 +MOD81_0223C1A8: ; 0x0223C1A8 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x14] + cmp r0, #0 + beq _0223C1B8 + ldr r0, [r4, #0x10] + bl MOD81_02238200 +_0223C1B8: + ldr r0, [r4, #0xc] + mov r1, #2 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + mov r1, #6 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + mov r1, #3 + bl FUN_020178A0 + ldr r0, [r4, #0xc] + mov r1, #7 + bl FUN_020178A0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223C1A8 + + thumb_func_start MOD81_0223C1DC +MOD81_0223C1DC: ; 0x0223C1DC + push {r4, lr} + sub sp, #0x10 + add r4, r0, #0 + bl FUN_020BB7F4 + bl G3X_InitMtxStack + ldr r0, _0223C2C0 ; =0x04000060 + ldr r1, _0223C2C4 ; =0xFFFFCFFD + ldrh r2, [r0] + and r2, r1 + strh r2, [r0] + ldrh r3, [r0] + add r2, r1, #2 + and r3, r2 + mov r2, #0x10 + orr r2, r3 + strh r2, [r0] + ldrh r3, [r0] + ldr r2, _0223C2C8 ; =0x0000CFFB + and r2, r3 + strh r2, [r0] + add r2, r1, #2 + ldrh r3, [r0] + add r1, r1, #2 + and r3, r2 + mov r2, #8 + orr r2, r3 + strh r2, [r0] + ldrh r2, [r0] + and r2, r1 + mov r1, #0x20 + orr r1, r2 + strh r1, [r0] + ldr r0, _0223C2CC ; =0x0223D2A4 + bl G3X_SetEdgeColorTable + mov r1, #0 + ldr r0, _0223C2D0 ; =0x000043FF + ldr r2, _0223C2D4 ; =0x00007FFF + mov r3, #0x3f + str r1, [sp] + bl G3X_SetClearColor + ldr r1, _0223C2D8 ; =0x04000540 + mov r0, #2 + str r0, [r1] + ldr r0, _0223C2DC ; =0xBFFF0000 + str r0, [r1, #0x40] + mov r0, #1 + add r1, r0, #0 + bl FUN_020AEB70 + mov r0, #1 + lsl r0, r0, #0xe + mov r1, #1 + bl FUN_020AEDF4 + mov r0, #1 + add r1, r0, #0 + bl FUN_0201E6E4 + ldr r1, _0223C2E0 ; =0x04000008 + mov r0, #3 + ldrh r2, [r1] + bic r2, r0 + strh r2, [r1] + mov r1, #0 + mov r0, #1 + add r2, r1, #0 + add r3, r1, #0 + bl MOD81_022388C0 + str r0, [r4, #0x20] + mov r1, #0 + mov r0, #0x23 + str r1, [sp] + lsl r0, r0, #0xe + str r0, [sp, #4] + str r1, [sp, #8] + mov r0, #1 + str r0, [sp, #0xc] + ldr r0, [r4, #0x20] + mov r2, #0x5d + mov r3, #0x1b + bl MOD81_02238A84 + str r0, [r4, #0x24] + ldr r0, _0223C2E4 ; =0x0223D450 + mov r1, #0 + strh r1, [r0] + strh r1, [r0, #2] + strh r1, [r0, #4] + ldr r0, [r4, #0x20] + ldr r1, _0223C2E8 ; =0x0223D450 + bl MOD81_02238C60 + ldr r0, [r4, #0x20] + mov r1, #1 + bl MOD81_02238C80 + mov r1, #2 + ldr r0, [r4, #0x24] + lsl r1, r1, #0xc + bl MOD81_02238B84 + ldr r0, [r4, #0x24] + add r4, #0x28 + add r1, r4, #0 + bl MOD81_02238B28 + add sp, #0x10 + pop {r4, pc} + nop +_0223C2C0: .word 0x04000060 +_0223C2C4: .word 0xFFFFCFFD +_0223C2C8: .word 0x0000CFFB +_0223C2CC: .word 0x0223D2A4 +_0223C2D0: .word 0x000043FF +_0223C2D4: .word 0x00007FFF +_0223C2D8: .word 0x04000540 +_0223C2DC: .word 0xBFFF0000 +_0223C2E0: .word 0x04000008 +_0223C2E4: .word 0x0223D450 +_0223C2E8: .word 0x0223D450 + thumb_func_end MOD81_0223C1DC + + thumb_func_start MOD81_0223C2EC +MOD81_0223C2EC: ; 0x0223C2EC + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x20] + cmp r0, #0 + beq _0223C2FE + bl MOD81_0223890C + mov r0, #0 + str r0, [r4, #0x20] +_0223C2FE: + pop {r4, pc} + thumb_func_end MOD81_0223C2EC + + thumb_func_start MOD81_0223C300 +MOD81_0223C300: ; 0x0223C300 + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + mov r0, #0x3a + mov r1, #0x24 + bl FUN_02016998 + add r4, r0, #0 + beq _0223C340 + str r6, [r4] + ldr r0, [r6, #0xc] + add r1, r4, #0 + str r0, [r4, #4] + ldr r0, _0223C344 ; =0xFFE80000 + mov r2, #0 + str r0, [r4, #0xc] + asr r0, r0, #1 + str r0, [r4, #0x10] + ldr r0, _0223C348 ; =0x00009999 + str r0, [r4, #0x14] + mov r0, #0x28 + str r0, [r4, #8] + ldr r0, _0223C34C ; =MOD81_0223C350 + str r5, [r4, #0x1c] + bl FUN_0200CA60 + str r0, [r5] + cmp r0, #0 + bne _0223C340 + add r0, r4, #0 + bl FUN_02016A18 +_0223C340: + pop {r4, r5, r6, pc} + nop +_0223C344: .word 0xFFE80000 +_0223C348: .word 0x00009999 +_0223C34C: .word MOD81_0223C350 + thumb_func_end MOD81_0223C300 + + thumb_func_start MOD81_0223C350 +MOD81_0223C350: ; 0x0223C350 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldr r0, [r4, #8] + cmp r0, #0 + beq _0223C390 + ldr r1, [r4, #0xc] + ldr r0, [r4, #0x14] + mov r2, #3 + add r0, r1, r0 + str r0, [r4, #0xc] + ldr r1, [r4, #0x10] + ldr r0, [r4, #0x14] + add r0, r1, r0 + str r0, [r4, #0x10] + ldr r3, [r4, #0xc] + ldr r0, [r4, #4] + mov r1, #2 + asr r3, r3, #0xc + bl FUN_020179E0 + ldr r3, [r4, #0x10] + ldr r0, [r4, #4] + mov r1, #6 + mov r2, #3 + asr r3, r3, #0xc + bl FUN_020179E0 + ldr r0, [r4, #8] + sub r0, r0, #1 + str r0, [r4, #8] + pop {r3, r4, r5, pc} +_0223C390: + ldr r0, [r4, #4] + mov r1, #2 + mov r2, #3 + mov r3, #0 + bl FUN_020179E0 + ldr r0, [r4, #4] + mov r1, #6 + mov r2, #3 + mov r3, #0xc0 + bl FUN_020179E0 + add r0, r5, #0 + bl MOD81_0223C3B0 + pop {r3, r4, r5, pc} + thumb_func_end MOD81_0223C350 + + thumb_func_start MOD81_0223C3B0 +MOD81_0223C3B0: ; 0x0223C3B0 + push {r4, lr} + add r4, r0, #0 + beq _0223C3CA + bl FUN_0201B6C8 + ldr r1, [r0, #0x1c] + mov r2, #0 + str r2, [r1] + bl MOD81_02238898 + add r0, r4, #0 + bl FUN_0200CAB4 +_0223C3CA: + pop {r4, pc} + thumb_func_end MOD81_0223C3B0 + + thumb_func_start MOD81_0223C3CC +MOD81_0223C3CC: ; 0x0223C3CC + push {r4, r5, r6, lr} + add r6, r0, #0 + add r5, r1, #0 + mov r0, #0x3a + mov r1, #0x1c + bl FUN_02016998 + add r4, r0, #0 + beq _0223C418 + str r5, [r4] + ldr r0, [r6, #0x24] + add r1, r4, #0 + str r0, [r4, #8] + add r1, #0xc + bl MOD81_02238B08 + mov r0, #0x32 + ldr r1, [r4, #0x10] + lsl r0, r0, #0xc + sub r1, r0, r1 + asr r0, r1, #3 + lsr r0, r0, #0x1c + add r0, r1, r0 + asr r0, r0, #4 + str r0, [r4, #0x18] + mov r0, #0x10 + str r0, [r4, #4] + ldr r0, _0223C41C ; =MOD81_0223C420 + add r1, r4, #0 + mov r2, #0 + bl FUN_0200CA44 + str r0, [r5] + cmp r0, #0 + bne _0223C418 + add r0, r4, #0 + bl FUN_02016A18 +_0223C418: + pop {r4, r5, r6, pc} + nop +_0223C41C: .word MOD81_0223C420 + thumb_func_end MOD81_0223C3CC + + thumb_func_start MOD81_0223C420 +MOD81_0223C420: ; 0x0223C420 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + ldr r0, [r4, #4] + cmp r0, #0 + beq _0223C446 + ldr r1, [r4, #0x10] + ldr r0, [r4, #0x18] + add r0, r1, r0 + str r0, [r4, #0x10] + add r1, r4, #0 + ldr r0, [r4, #8] + add r1, #0xc + bl MOD81_02238B18 + ldr r0, [r4, #4] + sub r0, r0, #1 + str r0, [r4, #4] + pop {r3, r4, r5, pc} +_0223C446: + mov r0, #0x32 + lsl r0, r0, #0xc + str r0, [r4, #0x10] + ldr r0, [r4, #8] + add r4, #0xc + add r1, r4, #0 + bl MOD81_02238B18 + add r0, r5, #0 + bl MOD81_0223C460 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD81_0223C420 + + thumb_func_start MOD81_0223C460 +MOD81_0223C460: ; 0x0223C460 + push {r4, lr} + add r4, r0, #0 + beq _0223C47A + bl FUN_0201B6C8 + ldr r1, [r0] + mov r2, #0 + str r2, [r1] + bl FUN_02016A18 + add r0, r4, #0 + bl FUN_0200CAB4 +_0223C47A: + pop {r4, pc} + thumb_func_end MOD81_0223C460 + + thumb_func_start MOD81_0223C47C +MOD81_0223C47C: ; 0x0223C47C + push {r3, r4, r5, r6, r7, lr} + sub sp, #8 + str r0, [sp] + add r6, r1, #0 + mov r0, #0x3a + mov r1, #0x18 + str r2, [sp, #4] + add r7, r3, #0 + ldr r5, [sp, #0x20] + bl FUN_02016998 + add r4, r0, #0 + beq _0223C4D4 + str r5, [r4] + lsl r0, r6, #0xc + str r0, [r4, #4] + ldr r0, [sp, #4] + lsl r1, r0, #0xc + str r1, [r4, #0xc] + ldr r0, [r4, #4] + sub r0, r1, r0 + add r1, r7, #0 + bl _s32_div_f + str r0, [r4, #8] + ldr r0, [sp] + str r7, [r4, #0x10] + add r1, r6, #0 + str r0, [r4, #0x14] + bl MOD81_02238B5C + ldr r0, _0223C4DC ; =MOD81_0223C4E0 + add r1, r4, #0 + mov r2, #0 + bl FUN_0200CA44 + str r0, [r5] + cmp r0, #0 + bne _0223C4D8 + add r0, r4, #0 + bl FUN_02016A18 + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} +_0223C4D4: + mov r0, #0 + str r0, [r5] +_0223C4D8: + add sp, #8 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0223C4DC: .word MOD81_0223C4E0 + thumb_func_end MOD81_0223C47C + + thumb_func_start MOD81_0223C4E0 +MOD81_0223C4E0: ; 0x0223C4E0 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r1, #0x10] + sub r0, r0, #1 + str r0, [r1, #0x10] + cmp r0, #0 + ble _0223C500 + ldr r2, [r1, #4] + ldr r0, [r1, #8] + add r2, r2, r0 + str r2, [r1, #4] + ldr r0, [r1, #0x14] + asr r1, r2, #0xc + bl MOD81_02238B5C + pop {r4, pc} +_0223C500: + ldr r0, [r1, #0x14] + ldr r1, [r1, #0xc] + asr r1, r1, #0xc + bl MOD81_02238B5C + add r0, r4, #0 + bl MOD81_0223C514 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223C4E0 + + thumb_func_start MOD81_0223C514 +MOD81_0223C514: ; 0x0223C514 + push {r4, lr} + add r4, r0, #0 + beq _0223C52E + bl FUN_0201B6C8 + ldr r1, [r0] + mov r2, #0 + str r2, [r1] + bl FUN_02016A18 + add r0, r4, #0 + bl FUN_0200CAB4 +_0223C52E: + pop {r4, pc} + thumb_func_end MOD81_0223C514 + + thumb_func_start MOD81_0223C530 +MOD81_0223C530: ; 0x0223C530 + push {r3, r4, r5, lr} + add r5, r0, #0 + mov r0, #0x3a + mov r1, #0x70 + bl FUN_02016998 + add r4, r0, #0 + beq _0223C57A + str r5, [r4] + mov r0, #0 + str r0, [r4, #4] + add r0, r5, #0 + bl MOD81_0223880C + str r0, [r4, #0x44] + mov r0, #0x3a + bl FUN_02006D98 + str r0, [r4, #0x10] + mov r0, #0 + str r0, [r4, #0x14] + mov r0, #0x4b + lsl r0, r0, #2 + mov r1, #0x3a + bl FUN_020219F4 + str r0, [r4, #0x58] + mov r0, #0x4b + lsl r0, r0, #2 + mov r1, #0x3a + bl FUN_020219F4 + str r0, [r4, #0x5c] + mov r0, #0 + str r0, [r4, #0x68] + str r0, [r4, #0x6c] + str r0, [r4, #0x60] +_0223C57A: + add r0, r4, #0 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD81_0223C530 + + thumb_func_start MOD81_0223C580 +MOD81_0223C580: ; 0x0223C580 + push {r4, lr} + add r4, r0, #0 + beq _0223C5D2 + bl MOD81_0223CD08 + add r0, r4, #0 + bl MOD81_0223CC84 + ldr r0, [r4, #0x6c] + bl MOD81_0223CDE0 + ldr r0, [r4, #0x58] + bl FUN_02021A20 + ldr r0, [r4, #0x5c] + bl FUN_02021A20 + ldr r0, [r4, #0x60] + cmp r0, #0 + beq _0223C5AC + bl MOD81_0223890C +_0223C5AC: + ldr r0, [r4, #0x44] + mov r1, #1 + bl FUN_020178A0 + add r0, r4, #0 + add r0, #0x48 + bl FUN_02019178 + ldr r0, [r4, #0x14] + cmp r0, #0 + beq _0223C5C6 + bl FUN_02007534 +_0223C5C6: + ldr r0, [r4, #0x10] + bl FUN_020072E8 + add r0, r4, #0 + bl FUN_02016A18 +_0223C5D2: + pop {r4, pc} + thumb_func_end MOD81_0223C580 + + thumb_func_start MOD81_0223C5D4 +MOD81_0223C5D4: ; 0x0223C5D4 + push {r3, r4, r5, lr} + add r4, r1, #0 + ldr r2, [r4] + add r5, r0, #0 + cmp r2, #4 + bhs _0223C602 + lsl r3, r2, #2 + ldr r2, _0223C608 ; =0x0223D31C + add r1, r5, #4 + ldr r2, [r2, r3] + blx r2 + cmp r0, #0 + beq _0223C5F8 + ldr r0, [r4] + add r0, r0, #1 + str r0, [r4] + mov r0, #0 + str r0, [r5, #4] +_0223C5F8: + add r0, r5, #0 + bl MOD81_0223C60C + mov r0, #0 + pop {r3, r4, r5, pc} +_0223C602: + mov r0, #1 + pop {r3, r4, r5, pc} + nop +_0223C608: .word 0x0223D31C + thumb_func_end MOD81_0223C5D4 + + thumb_func_start MOD81_0223C60C +MOD81_0223C60C: ; 0x0223C60C + push {r3, r4, lr} + sub sp, #4 + add r4, r0, #0 + bl G3X_ResetMtxStack + mov r1, #0 + mov r0, #0x11 + add r2, r1, #0 + bl FUN_020BB1C0 + bl FUN_020BB394 + bl FUN_020B02C8 + ldr r0, [r4, #0x10] + bl FUN_020081C4 + ldr r0, [r4, #0x10] + bl FUN_02006ED4 + mov r2, #1 + str r2, [sp] + mov r0, #0x12 + add r1, sp, #0 + bl FUN_020BB1C0 + ldr r0, [r4, #0x60] + cmp r0, #0 + beq _0223C64A + bl MOD81_02238940 +_0223C64A: + mov r0, #0 + add r1, r0, #0 + bl FUN_020222B4 + add sp, #4 + pop {r3, r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223C60C + + thumb_func_start MOD81_0223C658 +MOD81_0223C658: ; 0x0223C658 + push {r3, r4, lr} + sub sp, #0x1c + add r4, r0, #0 + ldr r0, _0223C808 ; =0x0223D374 + bl FUN_0201E66C + ldr r2, _0223C80C ; =0x04000304 + ldrh r1, [r2] + lsr r0, r2, #0xb + orr r0, r1 + strh r0, [r2] + ldr r0, _0223C810 ; =0x0223D32C + bl FUN_02016BBC + ldr r0, [r4, #0x44] + ldr r2, _0223C814 ; =0x0223D33C + mov r1, #1 + mov r3, #0 + bl FUN_02016C18 + ldr r0, [r4, #0x44] + ldr r2, _0223C818 ; =0x0223D358 + mov r1, #2 + mov r3, #0 + bl FUN_02016C18 + mov r0, #1 + add r1, r0, #0 + bl FUN_0201E6E4 + ldr r2, _0223C81C ; =0x04000008 + mov r0, #3 + ldrh r3, [r2] + mov r1, #1 + bic r3, r0 + add r0, r3, #0 + orr r0, r1 + strh r0, [r2] + mov r2, #0 + str r2, [sp] + ldr r0, [r4, #0x44] + add r3, r1, #0 + bl FUN_02017F48 + mov r2, #0 + str r2, [sp] + mov r0, #0x20 + str r0, [sp, #4] + str r0, [sp, #8] + str r2, [sp, #0xc] + ldr r0, [r4, #0x44] + mov r1, #1 + add r3, r2, #0 + bl FUN_02018540 + ldr r0, [r4] + bl MOD81_02238844 + lsl r0, r0, #0x18 + lsr r0, r0, #0x18 + str r0, [sp] + mov r0, #0x3a + str r0, [sp, #4] + ldr r0, [r4, #0x44] + mov r1, #1 + mov r2, #0x6d + mov r3, #2 + bl FUN_0200CD68 + mov r0, #0x13 + str r0, [sp] + mov r0, #0x1b + str r0, [sp, #4] + mov r0, #4 + add r1, r4, #0 + str r0, [sp, #8] + mov r2, #1 + str r2, [sp, #0xc] + str r2, [sp, #0x10] + ldr r0, [r4, #0x44] + add r1, #0x48 + mov r3, #2 + bl FUN_02019064 + add r0, r4, #0 + add r0, #0x48 + mov r1, #0xf + bl FUN_02019620 + mov r3, #0x20 + str r3, [sp] + mov r0, #0x3a + str r0, [sp, #4] + mov r0, #0xe + mov r1, #7 + mov r2, #0 + bl FUN_02006930 + ldr r0, [r4, #0x44] + mov r1, #1 + bl FUN_02017CD0 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0x44] + mov r0, #0x5d + mov r1, #0x16 + mov r3, #2 + bl FUN_0200687C + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + ldr r2, [r4, #0x44] + mov r0, #0x5d + mov r1, #0x15 + mov r3, #2 + bl FUN_020068C8 + mov r0, #0x20 + str r0, [sp] + mov r0, #0x3a + mov r2, #0 + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #0x17 + add r3, r2, #0 + bl FUN_02006930 + add r0, r4, #0 + bl MOD81_0223CAC4 + mov r1, #0 + mov r0, #1 + add r2, r1, #0 + add r3, r1, #0 + bl MOD81_022388C0 + str r0, [r4, #0x60] + add r0, r4, #0 + bl MOD81_0223CB90 + mov r1, #6 + mov r2, #1 + str r0, [r4, #0x14] + bl FUN_02007558 + mov r1, #0 + mov r0, #0x13 + str r1, [sp] + lsl r0, r0, #0xc + str r0, [sp, #4] + mov r0, #0x1e + lsl r0, r0, #0xe + str r0, [sp, #8] + str r1, [sp, #0xc] + ldr r0, [r4, #0x60] + mov r2, #0x5d + mov r3, #0x1b + bl MOD81_02238A84 + ldr r2, _0223C820 ; =0x0223D314 + str r0, [r4, #0x64] + ldrh r3, [r2] + add r0, sp, #0x14 + add r1, sp, #0x14 + strh r3, [r0] + ldrh r3, [r2, #2] + ldrh r2, [r2, #4] + strh r3, [r0, #2] + strh r2, [r0, #4] + ldr r0, [r4, #0x64] + bl MOD81_02238B40 + add r0, r4, #0 + bl MOD81_0223CBE0 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E6E4 + mov r0, #0x10 + mov r1, #1 + bl FUN_0201E74C + mov r0, #0 + str r0, [sp] + ldr r0, _0223C824 ; =0x04000050 + mov r1, #1 + mov r2, #4 + mov r3, #0x10 + bl G2x_SetBlendAlpha_ + mov r0, #0x10 + str r0, [sp] + mov r1, #1 + str r1, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #3 + add r2, r1, #0 + mov r3, #0 + bl FUN_0200E1D0 + mov r0, #1 + add sp, #0x1c + pop {r3, r4, pc} + .align 2, 0 +_0223C808: .word 0x0223D374 +_0223C80C: .word 0x04000304 +_0223C810: .word 0x0223D32C +_0223C814: .word 0x0223D33C +_0223C818: .word 0x0223D358 +_0223C81C: .word 0x04000008 +_0223C820: .word 0x0223D314 +_0223C824: .word 0x04000050 + thumb_func_end MOD81_0223C658 + + thumb_func_start MOD81_0223C828 +MOD81_0223C828: ; 0x0223C828 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r1] + cmp r0, #0 + bne _0223C84E + bl FUN_0200E308 + cmp r0, #0 + beq _0223C84E + ldr r0, [r4, #0x2c] + mov r1, #1 + bl FUN_02020130 + ldr r0, [r4, #0x2c] + mov r1, #1 + bl FUN_020200A0 + mov r0, #1 + pop {r4, pc} +_0223C84E: + mov r0, #0 + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223C828 + + thumb_func_start MOD81_0223C854 +MOD81_0223C854: ; 0x0223C854 + push {r3, r4, r5, lr} + add r5, r1, #0 + ldr r1, [r5] + add r4, r0, #0 + cmp r1, #4 + bhi _0223C91C + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_0223C86C: ; jump table + .short _0223C876 - _0223C86C - 2 ; case 0 + .short _0223C884 - _0223C86C - 2 ; case 1 + .short _0223C8AE - _0223C86C - 2 ; case 2 + .short _0223C8D6 - _0223C86C - 2 ; case 3 + .short _0223C90E - _0223C86C - 2 ; case 4 +_0223C876: + add r1, r4, #0 + add r1, #0x6c + bl MOD81_0223CD64 + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] +_0223C884: + ldr r0, [r4, #0x6c] + cmp r0, #0 + bne _0223C91C + ldr r0, [r4, #0x30] + mov r1, #2 + bl FUN_02020130 + ldr r0, [r4, #0x30] + mov r1, #1 + bl FUN_020200A0 + ldr r0, [r4, #0x64] + mov r1, #0 + bl MOD81_02238B58 + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0223C91C +_0223C8AE: + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + cmp r0, #0xa + ble _0223C91C + ldr r0, [r4, #0x14] + mov r1, #6 + mov r2, #0 + bl FUN_02007558 + add r0, r4, #0 + mov r1, #0x10 + mov r2, #0 + mov r3, #0xc + bl MOD81_0223CCA8 + ldr r0, [r4, #4] + add r0, r0, #1 + str r0, [r4, #4] + b _0223C91C +_0223C8D6: + bl MOD81_0223CCF8 + cmp r0, #0 + beq _0223C91C + ldr r0, [r4] + bl MOD81_02238820 + mov r1, #0x4c + mov r2, #0 + bl FUN_020672BC + cmp r0, #0 + bne _0223C902 + ldr r0, [r4] + bl MOD81_02238838 + bl FUN_02005578 + ldr r0, [r4, #0x14] + mov r1, #1 + bl FUN_02007314 +_0223C902: + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0223C91C +_0223C90E: + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + cmp r0, #0x1e + ble _0223C91C + mov r0, #1 + pop {r3, r4, r5, pc} +_0223C91C: + mov r0, #0 + pop {r3, r4, r5, pc} + thumb_func_end MOD81_0223C854 + + thumb_func_start MOD81_0223C920 +MOD81_0223C920: ; 0x0223C920 + push {r3, r4, r5, r6, r7, lr} + sub sp, #0x10 + add r5, r1, #0 + ldr r1, [r5] + add r4, r0, #0 + cmp r1, #5 + bhi _0223C95C + add r1, r1, r1 + add r1, pc + ldrh r1, [r1, #6] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add pc, r1 +_0223C93A: ; jump table + .short _0223C946 - _0223C93A - 2 ; case 0 + .short _0223C952 - _0223C93A - 2 ; case 1 + .short _0223C9D0 - _0223C93A - 2 ; case 2 + .short _0223CA32 - _0223C93A - 2 ; case 3 + .short _0223CA52 - _0223C93A - 2 ; case 4 + .short _0223CA7C - _0223C93A - 2 ; case 5 +_0223C946: + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0223CA8A +_0223C952: + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + cmp r0, #0xa + bgt _0223C95E +_0223C95C: + b _0223CA8A +_0223C95E: + ldr r0, [r4] + bl MOD81_02238814 + str r0, [sp, #0xc] + ldr r0, [r4] + bl MOD81_02238810 + add r7, r0, #0 + ldr r0, [r4] + bl MOD81_02238850 + cmp r0, #1 + bne _0223C97E + mov r1, #2 + add r6, r1, #0 + b _0223C982 +_0223C97E: + mov r1, #5 + mov r6, #3 +_0223C982: + ldr r0, [sp, #0xc] + ldr r2, [r4, #0x58] + bl FUN_0200A8E0 + ldr r1, [r4, #0x5c] + ldr r2, [r4, #0x58] + add r0, r7, #0 + bl FUN_0200B7B8 + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r3, [sp, #8] + add r0, r4, #0 + ldr r2, [r4, #0x5c] + add r0, #0x48 + mov r1, #1 + bl FUN_0201BD84 + add r0, r4, #0 + add r0, #0x48 + mov r1, #0x6d + mov r2, #2 + bl FUN_0200D06C + add r0, r4, #0 + add r0, #0x48 + bl FUN_020191D0 + ldr r0, _0223CA90 ; =0x00000484 + bl FUN_02005C28 + mov r0, #0 + str r0, [r4, #8] + mov r0, #1 + str r0, [r4, #0xc] + str r6, [r5] + b _0223CA8A +_0223C9D0: + mov r1, #0x3c + bl MOD81_0223CA94 + cmp r0, #0 + beq _0223CA8A + ldr r0, [r4] + bl MOD81_02238814 + add r6, r0, #0 + ldr r0, [r4] + bl MOD81_02238810 + add r7, r0, #0 + ldr r2, [r4, #0x58] + add r0, r6, #0 + mov r1, #3 + bl FUN_0200A8E0 + ldr r1, [r4, #0x5c] + ldr r2, [r4, #0x58] + add r0, r7, #0 + bl FUN_0200B7B8 + add r0, r4, #0 + add r0, #0x48 + mov r1, #0xf + bl FUN_02019620 + mov r3, #0 + str r3, [sp] + mov r0, #0xff + str r0, [sp, #4] + str r3, [sp, #8] + add r0, r4, #0 + ldr r2, [r4, #0x5c] + add r0, #0x48 + mov r1, #1 + bl FUN_0201BD84 + add r0, r4, #0 + add r0, #0x48 + bl FUN_02019548 + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0223CA8A +_0223CA32: + mov r1, #0x3c + bl MOD81_0223CA94 + cmp r0, #0 + beq _0223CA8A + add r0, r4, #0 + add r0, #0x48 + mov r1, #0 + bl FUN_0200D0E0 + mov r0, #0 + str r0, [r4, #8] + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0223CA8A +_0223CA52: + ldr r0, [r4, #8] + add r0, r0, #1 + str r0, [r4, #8] + cmp r0, #0xa + ble _0223CA8A + mov r0, #0x10 + str r0, [sp] + mov r1, #0 + mov r0, #1 + str r0, [sp, #4] + mov r0, #0x3a + str r0, [sp, #8] + mov r0, #3 + add r2, r1, #0 + add r3, r1, #0 + bl FUN_0200E1D0 + ldr r0, [r5] + add r0, r0, #1 + str r0, [r5] + b _0223CA8A +_0223CA7C: + bl FUN_0200E308 + cmp r0, #0 + beq _0223CA8A + add sp, #0x10 + mov r0, #1 + pop {r3, r4, r5, r6, r7, pc} +_0223CA8A: + mov r0, #0 + add sp, #0x10 + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0223CA90: .word 0x00000484 + thumb_func_end MOD81_0223C920 + + thumb_func_start MOD81_0223CA94 +MOD81_0223CA94: ; 0x0223CA94 + push {r3, r4, r5, lr} + add r5, r0, #0 + ldr r0, [r5, #0xc] + add r4, r1, #0 + cmp r0, #0 + beq _0223CAA6 + bl FUN_02005CBC + str r0, [r5, #0xc] +_0223CAA6: + ldr r0, [r5, #8] + cmp r0, r4 + bge _0223CAB4 + add r0, r0, #1 + str r0, [r5, #8] + mov r0, #0 + pop {r3, r4, r5, pc} +_0223CAB4: + ldr r0, [r5, #0xc] + cmp r0, #0 + bne _0223CABE + mov r0, #1 + pop {r3, r4, r5, pc} +_0223CABE: + mov r0, #0 + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD81_0223CA94 + + thumb_func_start MOD81_0223CAC4 +MOD81_0223CAC4: ; 0x0223CAC4 + push {r3, r4, r5, r6, lr} + sub sp, #4 + add r5, r0, #0 + bl FUN_020BB7F4 + bl G3X_InitMtxStack + ldr r0, _0223CB6C ; =0x04000060 + ldr r2, _0223CB70 ; =0xFFFFCFFD + ldrh r1, [r0] + and r1, r2 + strh r1, [r0] + ldrh r3, [r0] + add r1, r2, #2 + and r3, r1 + mov r1, #0x10 + orr r1, r3 + strh r1, [r0] + ldrh r3, [r0] + ldr r1, _0223CB74 ; =0x0000CFFB + and r1, r3 + strh r1, [r0] + add r1, r2, #2 + ldrh r3, [r0] + lsr r2, r2, #0x11 + and r3, r1 + mov r1, #8 + orr r1, r3 + strh r1, [r0] + mov r0, #0 + add r1, r0, #0 + mov r3, #0x3f + str r0, [sp] + bl G3X_SetClearColor + ldr r1, _0223CB78 ; =0x04000540 + mov r0, #2 + str r0, [r1] + ldr r0, _0223CB7C ; =0xBFFF0000 + str r0, [r1, #0x40] + mov r0, #1 + add r1, r0, #0 + bl FUN_020AEB70 + mov r0, #1 + lsl r0, r0, #0xe + mov r1, #1 + bl FUN_020AEDF4 + ldr r3, _0223CB80 ; =0x021064B8 + mov r0, #1 + mov r1, #0 + ldr r3, [r3] + lsl r0, r0, #0xe + add r2, r1, #0 + blx r3 + ldr r3, _0223CB84 ; =0x021064C0 + add r4, r0, #0 + ldr r3, [r3] + mov r0, #0x80 + mov r1, #0 + mov r2, #1 + blx r3 + ldr r2, _0223CB88 ; =0x7FFF0000 + add r6, r0, #0 + and r2, r4 + lsl r1, r4, #0x10 + lsr r2, r2, #0x10 + ldr r0, [r5, #0x10] + lsr r1, r1, #0xd + lsl r2, r2, #4 + bl FUN_020081A8 + ldr r2, _0223CB8C ; =0xFFFF0000 + lsl r1, r6, #0x10 + and r2, r6 + lsr r2, r2, #0x10 + ldr r0, [r5, #0x10] + lsr r1, r1, #0xd + lsl r2, r2, #3 + bl FUN_020081B4 + add sp, #4 + pop {r3, r4, r5, r6, pc} + .align 2, 0 +_0223CB6C: .word 0x04000060 +_0223CB70: .word 0xFFFFCFFD +_0223CB74: .word 0x0000CFFB +_0223CB78: .word 0x04000540 +_0223CB7C: .word 0xBFFF0000 +_0223CB80: .word 0x021064B8 +_0223CB84: .word 0x021064C0 +_0223CB88: .word 0x7FFF0000 +_0223CB8C: .word 0xFFFF0000 + thumb_func_end MOD81_0223CAC4 + + thumb_func_start MOD81_0223CB90 +MOD81_0223CB90: ; 0x0223CB90 + push {r3, r4, r5, lr} + sub sp, #0x20 + add r4, r0, #0 + ldr r0, [r4] + bl MOD81_02238820 + add r5, r0, #0 + add r0, sp, #0x10 + add r1, r5, #0 + mov r2, #2 + bl FUN_02068B70 + ldr r0, [r4] + bl MOD81_02238838 + add r1, r0, #0 + add r0, r4, #0 + add r0, #0x18 + bl FUN_02069010 + add r0, r5, #0 + mov r1, #2 + bl FUN_02068E1C + add r3, r0, #0 + mov r1, #0 + str r1, [sp] + add r0, r4, #0 + str r1, [sp, #4] + add r0, #0x18 + str r0, [sp, #8] + str r1, [sp, #0xc] + ldr r0, [r4, #0x10] + add r3, #0x50 + add r1, sp, #0x10 + mov r2, #0x80 + bl FUN_020073A0 + add sp, #0x20 + pop {r3, r4, r5, pc} + thumb_func_end MOD81_0223CB90 + + thumb_func_start MOD81_0223CBE0 +MOD81_0223CBE0: ; 0x0223CBE0 + push {r4, lr} + sub sp, #0x70 + add r4, r0, #0 + add r0, #0x34 + mov r1, #0x5d + mov r2, #7 + mov r3, #8 + bl MOD81_0223874C + add r0, sp, #0x5c + bl FUN_020B19DC + add r0, sp, #0x38 + bl FUN_020B1A24 + mov r3, #0 + str r3, [sp] + mov r2, #1 + str r2, [sp, #4] + str r3, [sp, #8] + mov r0, #0x3a + str r0, [sp, #0xc] + add r0, sp, #0x38 + str r0, [sp, #0x10] + mov r0, #0x5d + mov r1, #9 + bl FUN_02006AE4 + mov r0, #0x3a + str r0, [sp] + add r0, sp, #0x5c + str r0, [sp, #4] + mov r0, #0x5d + mov r1, #0xa + mov r2, #1 + mov r3, #0 + bl FUN_02006A8C + mov r0, #2 + add r1, r4, #0 + str r0, [sp] + add r0, sp, #0x14 + add r1, #0x34 + add r2, sp, #0x38 + add r3, sp, #0x5c + bl MOD81_022387A8 + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r4] + add r1, sp, #0x14 + mov r2, #0x80 + mov r3, #0x64 + bl MOD81_022387C8 + str r0, [r4, #0x2c] + mov r0, #0 + str r0, [sp] + mov r0, #1 + str r0, [sp, #4] + ldr r0, [r4] + add r1, sp, #0x14 + mov r2, #0x80 + mov r3, #0x5a + bl MOD81_022387C8 + str r0, [r4, #0x30] + mov r1, #1 + bl FUN_02020238 + ldr r0, [r4, #0x2c] + mov r1, #0 + bl FUN_020200A0 + ldr r0, [r4, #0x30] + mov r1, #0 + bl FUN_020200A0 + add sp, #0x70 + pop {r4, pc} + thumb_func_end MOD81_0223CBE0 + + thumb_func_start MOD81_0223CC84 +MOD81_0223CC84: ; 0x0223CC84 + push {r4, r5, r6, lr} + add r6, r0, #0 + mov r4, #0 + add r5, r6, #0 +_0223CC8C: + ldr r0, [r5, #0x2c] + cmp r0, #0 + beq _0223CC96 + bl FUN_0201FFC8 +_0223CC96: + add r4, r4, #1 + add r5, r5, #4 + cmp r4, #2 + blt _0223CC8C + add r6, #0x34 + add r0, r6, #0 + bl MOD81_02238784 + pop {r4, r5, r6, pc} + thumb_func_end MOD81_0223CC84 + + thumb_func_start MOD81_0223CCA8 +MOD81_0223CCA8: ; 0x0223CCA8 + push {r3, r4, r5, r6, r7, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #0x3a + mov r1, #0x14 + str r2, [sp] + add r7, r3, #0 + bl FUN_02016998 + add r4, r0, #0 + beq _0223CCEE + str r5, [r4] + lsl r0, r6, #0xc + str r0, [r4, #4] + ldr r0, [sp] + lsl r1, r0, #0xc + str r1, [r4, #8] + ldr r0, [r4, #4] + sub r0, r1, r0 + add r1, r7, #0 + bl _s32_div_f + str r0, [r4, #0xc] + ldr r0, _0223CCF0 ; =MOD81_0223CD28 + str r7, [r4, #0x10] + add r1, r4, #0 + mov r2, #0 + bl FUN_0200CA60 + str r0, [r5, #0x68] + ldr r0, _0223CCF4 ; =0x04000050 + mov r1, #1 + add r2, r6, #0 + bl G2x_SetBlendBrightness_ +_0223CCEE: + pop {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0223CCF0: .word MOD81_0223CD28 +_0223CCF4: .word 0x04000050 + thumb_func_end MOD81_0223CCA8 + + thumb_func_start MOD81_0223CCF8 +MOD81_0223CCF8: ; 0x0223CCF8 + ldr r0, [r0, #0x68] + cmp r0, #0 + bne _0223CD02 + mov r0, #1 + bx lr +_0223CD02: + mov r0, #0 + bx lr + .align 2, 0 + thumb_func_end MOD81_0223CCF8 + + thumb_func_start MOD81_0223CD08 +MOD81_0223CD08: ; 0x0223CD08 + push {r4, lr} + add r4, r0, #0 + ldr r0, [r4, #0x68] + cmp r0, #0 + beq _0223CD24 + bl FUN_0201B6C8 + bl MOD81_02238898 + ldr r0, [r4, #0x68] + bl FUN_0200CAB4 + mov r0, #0 + str r0, [r4, #0x68] +_0223CD24: + pop {r4, pc} + .align 2, 0 + thumb_func_end MOD81_0223CD08 + + thumb_func_start MOD81_0223CD28 +MOD81_0223CD28: ; 0x0223CD28 + push {r4, lr} + add r4, r1, #0 + ldr r0, [r4, #0x10] + sub r0, r0, #1 + str r0, [r4, #0x10] + cmp r0, #0 + ble _0223CD4A + ldr r1, [r4, #4] + ldr r0, [r4, #0xc] + add r2, r1, r0 + str r2, [r4, #4] + ldr r0, _0223CD60 ; =0x04000050 + mov r1, #1 + asr r2, r2, #0xc + bl G2x_SetBlendBrightness_ + pop {r4, pc} +_0223CD4A: + ldr r2, [r4, #8] + ldr r0, _0223CD60 ; =0x04000050 + mov r1, #1 + asr r2, r2, #0xc + bl G2x_SetBlendBrightness_ + ldr r0, [r4] + bl MOD81_0223CD08 + pop {r4, pc} + nop +_0223CD60: .word 0x04000050 + thumb_func_end MOD81_0223CD28 + + thumb_func_start MOD81_0223CD64 +MOD81_0223CD64: ; 0x0223CD64 + push {r4, r5, r6, lr} + add r5, r0, #0 + add r6, r1, #0 + mov r0, #0x3a + mov r1, #0x44 + bl FUN_02016998 + add r4, r0, #0 + beq _0223CDD2 + mov r1, #0 + str r1, [r4, #4] + str r6, [r4] + ldr r0, [r5, #0x60] + str r0, [r4, #0x10] + ldr r0, [r5, #0x64] + str r0, [r4, #0x14] + str r5, [r4, #8] + ldr r0, _0223CDD8 ; =0x000018CC + str r1, [r4, #0x18] + str r0, [r4, #0x1c] + mov r0, #0x14 + str r0, [r4, #0x20] + mov r0, #1 + lsl r0, r0, #0xc + strh r0, [r4, #0x3a] + str r1, [r4, #0x40] + ldr r0, [r4, #0x14] + bl MOD81_02238B5C + ldr r0, [r4, #0x14] + mov r1, #1 + bl MOD81_02238B58 + add r1, r4, #0 + ldr r0, [r4, #0x14] + add r1, #0x24 + bl MOD81_02238B08 + add r1, r4, #0 + ldr r0, [r4, #0x14] + add r1, #0x34 + bl MOD81_02238B28 + ldr r0, _0223CDDC ; =MOD81_0223CE54 + add r1, r4, #0 + mov r2, #0 + bl FUN_0200CA44 + str r0, [r6] + cmp r0, #0 + bne _0223CDD6 + add r0, r4, #0 + bl FUN_02016A18 + pop {r4, r5, r6, pc} +_0223CDD2: + mov r0, #0 + str r0, [r6] +_0223CDD6: + pop {r4, r5, r6, pc} + .align 2, 0 +_0223CDD8: .word 0x000018CC +_0223CDDC: .word MOD81_0223CE54 + thumb_func_end MOD81_0223CD64 + + thumb_func_start MOD81_0223CDE0 +MOD81_0223CDE0: ; 0x0223CDE0 + push {r4, lr} + add r4, r0, #0 + beq _0223CDFA + bl FUN_0201B6C8 + ldr r1, [r0] + mov r2, #0 + str r2, [r1] + bl FUN_02016A18 + add r0, r4, #0 + bl FUN_0200CAB4 +_0223CDFA: + pop {r4, pc} + thumb_func_end MOD81_0223CDE0 + + thumb_func_start MOD81_0223CDFC +MOD81_0223CDFC: ; 0x0223CDFC + add r1, r0, #0 + ldr r0, [r1, #0x40] + cmp r0, #0 + beq _0223CE1E + mov r0, #0x3a + ldrsh r2, [r1, r0] + mov r0, #0x3c + ldrsh r0, [r1, r0] + add r0, r2, r0 + strh r0, [r1, #0x3a] + ldr r0, [r1, #0x40] + sub r0, r0, #1 + str r0, [r1, #0x40] + bne _0223CE1E + mov r0, #0x3e + ldrsh r0, [r1, r0] + strh r0, [r1, #0x3a] +_0223CE1E: + mov r0, #0x36 + ldrsh r2, [r1, r0] + mov r0, #0x3a + ldrsh r0, [r1, r0] + ldr r3, _0223CE34 ; =MOD81_02238B40 + add r0, r2, r0 + strh r0, [r1, #0x36] + ldr r0, [r1, #0x14] + add r1, #0x34 + bx r3 + nop +_0223CE34: .word MOD81_02238B40 + thumb_func_end MOD81_0223CDFC + + thumb_func_start MOD81_0223CE38 +MOD81_0223CE38: ; 0x0223CE38 + push {r3, r4, r5, lr} + add r5, r0, #0 + add r4, r2, #0 + beq _0223CE50 + mov r0, #0x3a + ldrsh r0, [r5, r0] + sub r0, r1, r0 + add r1, r4, #0 + bl _s32_div_f + strh r0, [r5, #0x3c] + str r4, [r5, #0x40] +_0223CE50: + pop {r3, r4, r5, pc} + .align 2, 0 + thumb_func_end MOD81_0223CE38 + + thumb_func_start MOD81_0223CE54 +MOD81_0223CE54: ; 0x0223CE54 + push {r3, r4, r5, lr} + add r4, r1, #0 + add r5, r0, #0 + add r0, r4, #0 + bl MOD81_0223CDFC + ldr r0, [r4, #4] + cmp r0, #5 + bhi _0223CF62 + add r0, r0, r0 + add r0, pc + ldrh r0, [r0, #6] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + add pc, r0 +_0223CE72: ; jump table + .short _0223CE7E - _0223CE72 - 2 ; case 0 + .short _0223CEAE - _0223CE72 - 2 ; case 1 + .short _0223CEC6 - _0223CE72 - 2 ; case 2 + .short _0223CEDC - _0223CE72 - 2 ; case 3 + .short _0223CF24 - _0223CE72 - 2 ; case 4 + .short _0223CF52 - _0223CE72 - 2 ; case 5 +_0223CE7E: + ldr r0, [r4, #0x20] + cmp r0, #0 + beq _0223CE9E + ldr r1, [r4, #0x18] + ldr r0, [r4, #0x1c] + add r0, r1, r0 + str r0, [r4, #0x18] + ldr r0, [r4, #0x20] + sub r0, r0, #1 + str r0, [r4, #0x20] + ldr r1, [r4, #0x18] + ldr r0, [r4, #0x14] + asr r1, r1, #0xc + bl MOD81_02238B5C + pop {r3, r4, r5, pc} +_0223CE9E: + ldr r0, [r4, #0x14] + mov r1, #0x1f + bl MOD81_02238B5C + ldr r0, [r4, #4] + add r0, r0, #1 + str r0, [r4, #4] + pop {r3, r4, r5, pc} +_0223CEAE: + mov r1, #6 + add r0, r4, #0 + lsl r1, r1, #6 + mov r2, #0x1e + bl MOD81_0223CE38 + mov r0, #0 + str r0, [r4, #0xc] + ldr r0, [r4, #4] + add r0, r0, #1 + str r0, [r4, #4] + pop {r3, r4, r5, pc} +_0223CEC6: + ldr r0, [r4, #0xc] + add r0, r0, #1 + str r0, [r4, #0xc] + cmp r0, #0xa + ble _0223CF62 + mov r0, #0 + str r0, [r4, #0x30] + ldr r0, [r4, #4] + add r0, r0, #1 + str r0, [r4, #4] + pop {r3, r4, r5, pc} +_0223CEDC: + ldr r1, [r4, #0x28] + ldr r0, [r4, #0x30] + add r0, r1, r0 + str r0, [r4, #0x28] + mov r0, #0x1e + ldr r1, [r4, #0x30] + lsl r0, r0, #6 + sub r0, r1, r0 + str r0, [r4, #0x30] + add r1, r4, #0 + ldr r0, [r4, #0x14] + add r1, #0x24 + bl MOD81_02238B18 + ldr r1, [r4, #0x28] + ldr r0, _0223CF64 ; =0xFFFF5000 + cmp r1, r0 + bge _0223CF62 + ldr r0, _0223CF68 ; =0x000005E6 + bl FUN_020054C8 + mov r0, #0 + ldr r1, [r4, #0x30] + mvn r0, r0 + mul r0, r1 + str r0, [r4, #0x30] + ldr r0, [r4, #8] + mov r1, #0 + mov r2, #0x10 + mov r3, #8 + bl MOD81_0223CCA8 + ldr r0, [r4, #4] + add r0, r0, #1 + str r0, [r4, #4] + pop {r3, r4, r5, pc} +_0223CF24: + ldr r1, [r4, #0x28] + ldr r0, [r4, #0x30] + add r1, r1, r0 + mov r0, #0x13 + lsl r0, r0, #0xc + str r1, [r4, #0x28] + cmp r1, r0 + blt _0223CF36 + str r0, [r4, #0x28] +_0223CF36: + add r1, r4, #0 + ldr r0, [r4, #0x14] + add r1, #0x24 + bl MOD81_02238B18 + mov r0, #0x13 + ldr r1, [r4, #0x28] + lsl r0, r0, #0xc + cmp r1, r0 + bne _0223CF62 + ldr r0, [r4, #4] + add r0, r0, #1 + str r0, [r4, #4] + pop {r3, r4, r5, pc} +_0223CF52: + ldr r0, [r4, #8] + bl MOD81_0223CCF8 + cmp r0, #0 + beq _0223CF62 + add r0, r5, #0 + bl MOD81_0223CDE0 +_0223CF62: + pop {r3, r4, r5, pc} + .align 2, 0 +_0223CF64: .word 0xFFFF5000 +_0223CF68: .word 0x000005E6 + thumb_func_end MOD81_0223CE54 + + .section .rodata + ; 0x0223CF6C + .incbin "baserom.nds", 0x2EEB2C, 0x430 + + .section .data + ; 0x0223D3A0 + .incbin "baserom.nds", 0x2EEF60, 0x20 + + .section .bss + ; 0x0223D3C0 + .space 0xA0 |