diff options
author | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-08-23 22:41:01 +0200 |
---|---|---|
committer | Rémi Calixte <remicalixte.rmc@gmail.com> | 2021-08-23 22:41:01 +0200 |
commit | be5461e427455695c3e99c4956b4f00c0535911a (patch) | |
tree | 4b93c6b0e864dca8441fbb57e99949688e1eea8f | |
parent | f97c4d0627b52c8ad10a8d37082d05cdd8996197 (diff) |
skip nonmatching FUN_02006ED4
-rw-r--r-- | arm9/asm/unk_02006D98.s | 665 | ||||
-rw-r--r-- | arm9/src/unk_02006D98_c.c | 575 |
2 files changed, 573 insertions, 667 deletions
diff --git a/arm9/asm/unk_02006D98.s b/arm9/asm/unk_02006D98.s index f5256bc8..32f394bf 100644 --- a/arm9/asm/unk_02006D98.s +++ b/arm9/asm/unk_02006D98.s @@ -23,671 +23,6 @@ - thumb_func_start FUN_02006ED4 -FUN_02006ED4: ; 0x02006ED4 - push {r3-r7, lr} - sub sp, #0x20 - add r5, r0, #0x0 - bl FUN_020082A8 - add r0, r5, #0x0 - bl FUN_020086F4 - bl NNS_G3dGeFlushBuffer - mov r6, #0x9f - mov r0, #0x0 - ldr r4, _02007250 ; =0x04000444 - lsl r6, r6, #0x2 - str r0, [r4, #0x0] - str r0, [sp, #0x18] - add r0, r6, #0x0 - sub r0, #0xc - ldr r1, [r5, r0] - add r3, r6, #0x0 - ldr r2, [r5, r6] - add r0, r6, #0x0 - sub r3, #0x8 - add r6, #0x20 - ldr r3, [r5, r3] - ldr r6, [r5, r6] - sub r0, #0x10 - ldr r0, [r5, r0] - lsr r6, r6, #0x3 - lsl r3, r3, #0x1a - orr r6, r3 - mov r3, #0x1 - lsl r3, r3, #0x1e - lsl r0, r0, #0x14 - orr r3, r6 - lsl r1, r1, #0x17 - orr r0, r3 - lsl r2, r2, #0x1d - orr r0, r1 - orr r0, r2 - str r0, [r4, #0x64] - ldr r0, [sp, #0x18] - add r4, r5, #0x0 - str r0, [sp, #0x14] - ldr r0, _02007254 ; =UNK_020ECD4C - str r0, [sp, #0x1c] -_02006F30: - ldr r0, [r4, #0x0] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _02006F46 - ldr r0, [r4, #0x54] - lsl r1, r0, #0x1f - lsr r1, r1, #0x1f - bne _02006F46 - lsl r0, r0, #0x14 - lsr r0, r0, #0x1f - beq _02006F48 -_02006F46: - b _020072BC -_02006F48: - ldr r2, [r4, #0x68] - cmp r2, #0x0 - beq _02006F56 - add r1, r4, #0x0 - add r0, r4, #0x0 - add r1, #0x24 - blx r2 -_02006F56: - bl NNS_G3dGeFlushBuffer - ldr r0, _02007258 ; =0x000002E3 - ldrb r0, [r5, r0] - cmp r0, #0x1 - beq _02006F68 - ldr r0, _0200725C ; =0x04000454 - mov r1, #0x0 - str r1, [r0, #0x0] -_02006F68: - add r0, r4, #0x0 - bl FUN_02007F48 - mov r0, #0x9d - lsl r0, r0, #0x2 - ldr r0, [r5, r0] - cmp r0, #0x2 - bne _02006F7C - mov r0, #0x1 - b _02006F7E -_02006F7C: - mov r0, #0x0 -_02006F7E: - mov r1, #0xa9 - lsl r1, r1, #0x2 - ldr r2, [r5, r1] - ldr r1, [sp, #0x14] - add r2, r2, r1 - mov r1, #0x4 - sub r0, r1, r0 - add r1, r2, #0x0 - lsr r1, r0 - ldr r0, _02007260 ; =0x040004AC - str r1, [r0, #0x0] - ldr r0, [r4, #0x28] - lsl r1, r0, #0xc - mov r0, #0x26 - ldrsh r2, [r4, r0] - mov r0, #0x42 - ldrsh r0, [r4, r0] - add r0, r2, r0 - mov r2, #0x24 - ldrsh r3, [r4, r2] - mov r2, #0x40 - ldrsh r2, [r4, r2] - lsl r0, r0, #0xc - add r2, r3, r2 - lsl r3, r2, #0xc - ldr r2, _02007264 ; =0x04000470 - str r3, [r2, #0x0] - str r0, [r2, #0x0] - add r0, r2, #0x0 - str r1, [r0, #0x0] - ldrh r0, [r4, #0x38] - asr r0, r0, #0x4 - lsl r1, r0, #0x2 - ldr r0, _02007268 ; =FX_SinCosTable_ - add r2, r0, r1 - ldrsh r0, [r0, r1] - mov r1, #0x2 - ldrsh r1, [r2, r1] - bl G3_RotX - ldrh r0, [r4, #0x3a] - asr r0, r0, #0x4 - lsl r1, r0, #0x2 - ldr r0, _02007268 ; =FX_SinCosTable_ - add r2, r0, r1 - ldrsh r0, [r0, r1] - mov r1, #0x2 - ldrsh r1, [r2, r1] - bl G3_RotY - ldrh r0, [r4, #0x3c] - asr r0, r0, #0x4 - lsl r1, r0, #0x2 - ldr r0, _02007268 ; =FX_SinCosTable_ - add r2, r0, r1 - ldrsh r0, [r0, r1] - mov r1, #0x2 - ldrsh r1, [r2, r1] - bl G3_RotZ - ldr r0, [r4, #0x28] - lsl r0, r0, #0xc - neg r1, r0 - mov r0, #0x26 - ldrsh r2, [r4, r0] - mov r0, #0x42 - ldrsh r0, [r4, r0] - add r0, r2, r0 - mov r2, #0x24 - ldrsh r3, [r4, r2] - mov r2, #0x40 - ldrsh r2, [r4, r2] - lsl r0, r0, #0xc - neg r0, r0 - add r2, r3, r2 - lsl r2, r2, #0xc - neg r3, r2 - ldr r2, _02007264 ; =0x04000470 - str r3, [r2, #0x0] - str r0, [r2, #0x0] - add r0, r2, #0x0 - str r1, [r0, #0x0] - ldr r3, [r4, #0x50] - lsl r0, r3, #0x11 - lsr r0, r0, #0x1b - lsl r2, r3, #0x16 - lsl r1, r0, #0xa - lsl r0, r3, #0x1b - lsr r2, r2, #0x1b - lsr r0, r0, #0x1b - lsl r2, r2, #0x5 - orr r0, r2 - orr r0, r1 - lsl r0, r0, #0x10 - lsr r2, r0, #0x10 - lsl r0, r3, #0x2 - lsr r0, r0, #0x1b - lsl r1, r0, #0xa - lsl r0, r3, #0xc - lsl r3, r3, #0x7 - lsr r3, r3, #0x1b - lsr r0, r0, #0x1b - lsl r3, r3, #0x5 - orr r0, r3 - orr r0, r1 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - lsl r0, r0, #0x10 - add r1, r2, #0x0 - orr r1, r0 - mov r0, #0x2 - lsl r0, r0, #0xe - orr r1, r0 - ldr r0, _0200726C ; =0x040004C0 - str r1, [r0, #0x0] - ldr r1, _02007270 ; =0x00004210 - add r0, r0, #0x4 - str r1, [r0, #0x0] - ldr r1, [r4, #0x0] - ldr r0, [r4, #0x54] - lsl r1, r1, #0x19 - lsl r0, r0, #0x19 - lsr r1, r1, #0x1a - lsr r0, r0, #0x1b - lsl r2, r1, #0x18 - mov r1, #0xc0 - lsl r0, r0, #0x10 - orr r1, r2 - orr r1, r0 - ldr r0, _02007274 ; =0x040004A4 - str r1, [r0, #0x0] - ldr r0, [r4, #0x54] - lsl r0, r0, #0x1e - lsr r0, r0, #0x1f - beq _02007104 - add r0, r4, #0x0 - add r0, #0x5b - ldrb r0, [r0, #0x0] - add r2, r4, #0x0 - add r2, #0x44 - lsl r1, r0, #0x4 - ldr r0, [sp, #0x1c] - ldrb r3, [r2, #0x0] - add r0, r0, r1 - ldr r2, [sp, #0x1c] - ldr r0, [r0, #0x4] - ldr r1, [r2, r1] - add r6, r3, r1 - add r1, r4, #0x0 - add r1, #0x46 - ldrb r1, [r1, #0x0] - mov r12, r1 - add r1, r4, #0x0 - add r1, #0x45 - ldrb r2, [r1, #0x0] - add r1, r2, r0 - add r0, r4, #0x0 - add r0, #0x47 - ldrb r7, [r0, #0x0] - mov r0, r12 - add r0, r0, r6 - str r7, [sp, #0x0] - str r6, [sp, #0x4] - str r1, [sp, #0x8] - str r0, [sp, #0xc] - add r0, r7, r1 - str r0, [sp, #0x10] - mov r1, #0x24 - ldrsh r1, [r4, r1] - mov r0, #0x2c - ldrsh r0, [r4, r0] - sub r1, #0x28 - add r1, r1, r3 - add r0, r0, r1 - mov r3, #0x26 - ldrsh r3, [r4, r3] - mov r1, #0x2e - lsl r0, r0, #0x10 - sub r3, #0x28 - add r2, r3, r2 - ldrsh r1, [r4, r1] - ldr r3, [r4, #0x28] - asr r0, r0, #0x10 - add r2, r1, r2 - mov r1, #0x6e - ldrsb r1, [r4, r1] - sub r1, r2, r1 - ldr r2, [r4, #0x30] - lsl r1, r1, #0x10 - add r2, r3, r2 - asr r1, r1, #0x10 - mov r3, r12 - bl NNS_G2dDrawSpriteFast - b _02007174 -_02007104: - mov r0, #0x34 - ldrsh r1, [r4, r0] - mov r0, #0x50 - ldr r2, [sp, #0x1c] - mul r0, r1 - asr r3, r0, #0x8 - mov r0, #0x36 - ldrsh r1, [r4, r0] - mov r0, #0x50 - ldr r6, [sp, #0x1c] - mul r0, r1 - asr r1, r0, #0x8 - add r0, r4, #0x0 - add r0, #0x5b - ldrb r0, [r0, #0x0] - lsl r0, r0, #0x4 - str r1, [sp, #0x0] - add r2, r2, r0 - ldr r0, [r6, r0] - lsr r6, r1, #0x1f - str r0, [sp, #0x4] - ldr r0, [r2, #0x4] - add r6, r1, r6 - str r0, [sp, #0x8] - ldr r0, [r2, #0x8] - asr r1, r6, #0x1 - str r0, [sp, #0xc] - ldr r0, [r2, #0xc] - str r0, [sp, #0x10] - mov r0, #0x24 - ldrsh r2, [r4, r0] - lsr r0, r3, #0x1f - add r0, r3, r0 - asr r0, r0, #0x1 - sub r2, r2, r0 - mov r0, #0x2c - ldrsh r0, [r4, r0] - ldr r6, [r4, #0x28] - add r0, r2, r0 - mov r2, #0x26 - ldrsh r2, [r4, r2] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - sub r2, r2, r1 - mov r1, #0x2e - ldrsh r1, [r4, r1] - add r2, r2, r1 - mov r1, #0x6e - ldrsb r1, [r4, r1] - sub r1, r2, r1 - ldr r2, [r4, #0x30] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add r2, r6, r2 - bl NNS_G2dDrawSpriteFast -_02007174: - add r0, r4, #0x0 - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r1, r0, #0x1e - lsr r1, r1, #0x1e - beq _0200719A - lsl r0, r0, #0x19 - lsr r0, r0, #0x1e - beq _0200719A - ldr r0, [r4, #0x54] - lsl r0, r0, #0x1e - lsr r0, r0, #0x1f - bne _0200719A - mov r0, #0xb9 - lsl r0, r0, #0x2 - ldr r1, [r5, r0] - mov r0, #0x1 - tst r0, r1 - beq _0200719C -_0200719A: - b _020072BC -_0200719C: - ldr r0, _02007258 ; =0x000002E3 - ldrb r0, [r5, r0] - cmp r0, #0x1 - beq _020071AA - ldr r0, _0200725C ; =0x04000454 - mov r1, #0x0 - str r1, [r0, #0x0] -_020071AA: - mov r0, #0x9d - lsl r0, r0, #0x2 - ldr r0, [r5, r0] - cmp r0, #0x2 - bne _020071B8 - mov r1, #0x1 - b _020071BA -_020071B8: - mov r1, #0x0 -_020071BA: - add r2, r4, #0x0 - add r2, #0x6c - ldrh r2, [r2, #0x0] - mov r0, #0xa9 - lsl r0, r0, #0x2 - lsl r2, r2, #0x1e - lsr r2, r2, #0x1e - add r2, r2, #0x3 - ldr r0, [r5, r0] - lsl r2, r2, #0x5 - add r2, r0, r2 - mov r0, #0x4 - sub r0, r0, r1 - add r1, r2, #0x0 - lsr r1, r0 - ldr r0, _02007260 ; =0x040004AC - str r1, [r0, #0x0] - add r0, r4, #0x0 - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1b - lsr r0, r0, #0x1f - beq _020071FA - mov r0, #0x34 - ldrsh r0, [r4, r0] - lsl r0, r0, #0x6 - asr r3, r0, #0x8 - mov r0, #0x36 - ldrsh r0, [r4, r0] - lsl r0, r0, #0x4 - asr r1, r0, #0x8 - b _020071FE -_020071FA: - mov r3, #0x40 - mov r1, #0x10 -_020071FE: - add r0, r4, #0x0 - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1d - lsr r0, r0, #0x1f - beq _02007220 - mov r0, #0x74 - ldrsh r2, [r4, r0] - mov r0, #0x24 - mov r6, #0x2c - ldrsh r0, [r4, r0] - ldrsh r6, [r4, r6] - add r0, r0, r6 - add r2, r2, r0 - add r0, r4, #0x0 - add r0, #0x70 - strh r2, [r0, #0x0] -_02007220: - add r0, r4, #0x0 - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1c - lsr r0, r0, #0x1f - beq _02007242 - mov r0, #0x76 - ldrsh r2, [r4, r0] - mov r0, #0x26 - mov r6, #0x2e - ldrsh r0, [r4, r0] - ldrsh r6, [r4, r6] - add r0, r0, r6 - add r2, r2, r0 - add r0, r4, #0x0 - add r0, #0x72 - strh r2, [r0, #0x0] -_02007242: - add r0, r4, #0x0 - add r0, #0x6c - ldrh r0, [r0, #0x0] - ldr r2, _02007278 ; =UNK_020ECBD0 - ldr r6, _02007278 ; =UNK_020ECBD0 - b _0200727C - nop -_02007250: .word 0x04000444 -_02007254: .word UNK_020ECD4C -_02007258: .word 0x000002E3 -_0200725C: .word 0x04000454 -_02007260: .word 0x040004AC -_02007264: .word 0x04000470 -_02007268: .word FX_SinCosTable_ -_0200726C: .word 0x040004C0 -_02007270: .word 0x00004210 -_02007274: .word 0x040004A4 -_02007278: .word UNK_020ECBD0 -_0200727C: - lsl r0, r0, #0x19 - lsr r0, r0, #0x1e - lsl r0, r0, #0x4 - str r1, [sp, #0x0] - add r2, r2, r0 - ldr r0, [r6, r0] - lsr r6, r1, #0x1f - str r0, [sp, #0x4] - ldr r0, [r2, #0x4] - add r6, r1, r6 - str r0, [sp, #0x8] - ldr r0, [r2, #0x8] - asr r1, r6, #0x1 - str r0, [sp, #0xc] - ldr r0, [r2, #0xc] - str r0, [sp, #0x10] - mov r0, #0x70 - ldrsh r2, [r4, r0] - lsr r0, r3, #0x1f - add r0, r3, r0 - asr r0, r0, #0x1 - sub r0, r2, r0 - mov r2, #0x72 - ldrsh r2, [r4, r2] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - sub r1, r2, r1 - lsl r1, r1, #0x10 - ldr r2, _020072E0 ; =0xFFFFFC18 - asr r1, r1, #0x10 - bl NNS_G2dDrawSpriteFast -_020072BC: - ldr r0, [sp, #0x14] - add r4, #0x98 - add r0, #0x20 - str r0, [sp, #0x14] - ldr r0, [sp, #0x1c] - add r0, #0x20 - str r0, [sp, #0x1c] - ldr r0, [sp, #0x18] - add r0, r0, #0x1 - str r0, [sp, #0x18] - cmp r0, #0x4 - bge _020072D6 - b _02006F30 -_020072D6: - ldr r0, _020072E4 ; =0x04000448 - mov r1, #0x1 - str r1, [r0, #0x0] - add sp, #0x20 - pop {r3-r7, pc} - .balign 4 -_020072E0: .word 0xFFFFFC18 -_020072E4: .word 0x04000448 - - thumb_func_start FUN_020072E8 -FUN_020072E8: ; 0x020072E8 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0xab - lsl r0, r0, #0x2 - ldr r0, [r4, r0] - bl FreeToHeap - mov r0, #0x2b - lsl r0, r0, #0x4 - ldr r0, [r4, r0] - bl FreeToHeap - mov r0, #0xad - lsl r0, r0, #0x2 - ldr r0, [r4, r0] - bl FreeToHeap - add r0, r4, #0x0 - bl FreeToHeap - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02007314 -FUN_02007314: ; 0x02007314 - push {r3-r4} - add r1, r0, #0x0 - mov r3, #0x0 - add r1, #0x59 - strb r3, [r1, #0x0] - add r1, r3, #0x0 -_02007320: - add r2, r0, r3 - add r2, #0x5c - add r3, r3, #0x1 - strb r1, [r2, #0x0] - cmp r3, #0xa - blt _02007320 - add r2, r0, #0x0 - add r2, #0x59 - ldrb r2, [r2, #0x0] - lsl r2, r2, #0x1 - add r3, r0, r2 - mov r2, #0x84 - ldrsb r4, [r3, r2] - add r3, r2, #0x0 - sub r3, #0x85 - cmp r4, r3 - bne _0200734A - add r0, #0x5b - strb r1, [r0, #0x0] - pop {r3-r4} - bx lr -_0200734A: - add r1, r0, #0x0 - mov r3, #0x1 - add r1, #0x58 - strb r3, [r1, #0x0] - add r1, r0, #0x0 - add r1, #0x59 - ldrb r1, [r1, #0x0] - lsl r1, r1, #0x1 - add r1, r0, r1 - ldrsb r2, [r1, r2] - add r1, r0, #0x0 - add r1, #0x5b - strb r2, [r1, #0x0] - add r1, r0, #0x0 - add r1, #0x59 - ldrb r1, [r1, #0x0] - lsl r1, r1, #0x1 - add r1, r0, r1 - add r1, #0x85 - ldrb r1, [r1, #0x0] - add r0, #0x5a - strb r1, [r0, #0x0] - pop {r3-r4} - bx lr - .balign 4 - - thumb_func_start FUN_0200737C -FUN_0200737C: ; 0x0200737C - add r2, r0, #0x0 - ldr r3, _0200738C ; =MI_CpuCopy8 - add r2, #0x84 - add r0, r1, #0x0 - add r1, r2, #0x0 - mov r2, #0x14 - bx r3 - nop -_0200738C: .word MI_CpuCopy8 - - thumb_func_start FUN_02007390 -FUN_02007390: ; 0x02007390 - add r0, #0x58 - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - beq _0200739C - mov r0, #0x1 - bx lr -_0200739C: - mov r0, #0x0 - bx lr - - thumb_func_start FUN_020073A0 -FUN_020073A0: ; 0x020073A0 - push {r3-r7, lr} - sub sp, #0x18 - add r5, r0, #0x0 - add r6, r1, #0x0 - add r7, r2, #0x0 - str r3, [sp, #0x14] - mov r4, #0x0 -_020073AE: - ldr r1, [r0, #0x0] - lsl r1, r1, #0x1f - lsr r1, r1, #0x1f - beq _020073BE - add r4, r4, #0x1 - add r0, #0x98 - cmp r4, #0x4 - blt _020073AE -_020073BE: - cmp r4, #0x4 - bne _020073C6 - bl GF_AssertFail -_020073C6: - ldr r0, [sp, #0x30] - ldr r3, [sp, #0x14] - str r0, [sp, #0x0] - ldr r0, [sp, #0x34] - add r1, r6, #0x0 - str r0, [sp, #0x4] - ldr r0, [sp, #0x38] - str r4, [sp, #0x8] - str r0, [sp, #0xc] - ldr r0, [sp, #0x3c] - add r2, r7, #0x0 - str r0, [sp, #0x10] - add r0, r5, #0x0 - bl FUN_020073E8 - add sp, #0x18 - pop {r3-r7, pc} - thumb_func_start FUN_020073E8 FUN_020073E8: ; 0x020073E8 push {r4-r7, lr} diff --git a/arm9/src/unk_02006D98_c.c b/arm9/src/unk_02006D98_c.c index 0e39671b..7a5b48f5 100644 --- a/arm9/src/unk_02006D98_c.c +++ b/arm9/src/unk_02006D98_c.c @@ -5,6 +5,7 @@ #include "heap.h" #include "poketool/pokegra/otherpoke.naix" #include "registers.h" +#include "mod63_021DB450.h" struct UnkStruct3 { u32 unk00[8]; @@ -152,7 +153,7 @@ struct UnkStruct2 { u8 unk59; u8 unk5A; u8 unk5B; - u8 unk5C[0xC]; + u8 unk5C[10]; void (*unk68)(struct UnkStruct2 *, void *); u16 unk6C_0:2; u16 unk6C_2:1; @@ -165,7 +166,11 @@ struct UnkStruct2 { s16 unk72; s16 unk74; s16 unk76; - u8 unk78[0x20]; + u8 unk78[0xc]; + struct UnkStruct2_sub { + s8 unk0; + u8 unk1; + } unk84[10]; }; @@ -267,7 +272,9 @@ extern void FUN_02007F48(struct UnkStruct2 *); extern void NNS_G2dDrawSpriteFast(s16 param0, s16 param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8); +#ifdef NONMATCHING +// mostly matching, only 2 register writes messed up THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { s32 arg3; s32 arg4; @@ -279,6 +286,7 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { reg_G3_MTX_PUSH = 0; + // this is all shuffled however I try reg_G3_TEXIMAGE_PARAM = (param0->unk29C >> 3) | (param0->unk274 << 26) | (1 << 30) | (param0->unk26C << 20) | (param0->unk270 << 23) | (param0->unk27C << 29); for (int st18 = 0; st18 < 4; st18++) { @@ -342,7 +350,9 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { reg_G3_SPE_EMI = 0x4210; + { + // shuffled there as well u32 r1 = param0->unk000[st18].unk00_1; u32 r0 = param0->unk000[st18].unk54_2; reg_G3_POLYGON_ATTR = 0xc0 | (r1<<24) | (r0<<16); @@ -438,3 +448,564 @@ THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { reg_G3_MTX_POP = 1; } +#else +asm void FUN_02006ED4(struct UnkStruct1 *param0) { + // clang-format off + push {r3-r7, lr} + sub sp, #0x20 + add r5, r0, #0x0 + bl FUN_020082A8 + add r0, r5, #0x0 + bl FUN_020086F4 + bl NNS_G3dGeFlushBuffer + mov r6, #0x9f + mov r0, #0x0 + ldr r4, =0x04000444 + lsl r6, r6, #0x2 + str r0, [r4, #0x0] + str r0, [sp, #0x18] + add r0, r6, #0x0 + sub r0, #0xc + ldr r1, [r5, r0] + add r3, r6, #0x0 + ldr r2, [r5, r6] + add r0, r6, #0x0 + sub r3, #0x8 + add r6, #0x20 + ldr r3, [r5, r3] + ldr r6, [r5, r6] + sub r0, #0x10 + ldr r0, [r5, r0] + lsr r6, r6, #0x3 + lsl r3, r3, #0x1a + orr r6, r3 + mov r3, #0x1 + lsl r3, r3, #0x1e + lsl r0, r0, #0x14 + orr r3, r6 + lsl r1, r1, #0x17 + orr r0, r3 + lsl r2, r2, #0x1d + orr r0, r1 + orr r0, r2 + str r0, [r4, #0x64] + ldr r0, [sp, #0x18] + add r4, r5, #0x0 + str r0, [sp, #0x14] + ldr r0, =UNK_020ECD4C + str r0, [sp, #0x1c] +_02006F30: + ldr r0, [r4, #0x0] + lsl r0, r0, #0x1f + lsr r0, r0, #0x1f + beq _02006F46 + ldr r0, [r4, #0x54] + lsl r1, r0, #0x1f + lsr r1, r1, #0x1f + bne _02006F46 + lsl r0, r0, #0x14 + lsr r0, r0, #0x1f + beq _02006F48 +_02006F46: + b _020072BC +_02006F48: + ldr r2, [r4, #0x68] + cmp r2, #0x0 + beq _02006F56 + add r1, r4, #0x0 + add r0, r4, #0x0 + add r1, #0x24 + blx r2 +_02006F56: + bl NNS_G3dGeFlushBuffer + ldr r0, =0x000002E3 + ldrb r0, [r5, r0] + cmp r0, #0x1 + beq _02006F68 + ldr r0, =0x04000454 + mov r1, #0x0 + str r1, [r0, #0x0] +_02006F68: + add r0, r4, #0x0 + bl FUN_02007F48 + mov r0, #0x9d + lsl r0, r0, #0x2 + ldr r0, [r5, r0] + cmp r0, #0x2 + bne _02006F7C + mov r0, #0x1 + b _02006F7E +_02006F7C: + mov r0, #0x0 +_02006F7E: + mov r1, #0xa9 + lsl r1, r1, #0x2 + ldr r2, [r5, r1] + ldr r1, [sp, #0x14] + add r2, r2, r1 + mov r1, #0x4 + sub r0, r1, r0 + add r1, r2, #0x0 + lsr r1, r0 + ldr r0, =0x040004AC + str r1, [r0, #0x0] + ldr r0, [r4, #0x28] + lsl r1, r0, #0xc + mov r0, #0x26 + ldrsh r2, [r4, r0] + mov r0, #0x42 + ldrsh r0, [r4, r0] + add r0, r2, r0 + mov r2, #0x24 + ldrsh r3, [r4, r2] + mov r2, #0x40 + ldrsh r2, [r4, r2] + lsl r0, r0, #0xc + add r2, r3, r2 + lsl r3, r2, #0xc + ldr r2, =0x04000470 + str r3, [r2, #0x0] + str r0, [r2, #0x0] + add r0, r2, #0x0 + str r1, [r0, #0x0] + ldrh r0, [r4, #0x38] + asr r0, r0, #0x4 + lsl r1, r0, #0x2 + ldr r0, =FX_SinCosTable_ + add r2, r0, r1 + ldrsh r0, [r0, r1] + mov r1, #0x2 + ldrsh r1, [r2, r1] + bl G3_RotX + ldrh r0, [r4, #0x3a] + asr r0, r0, #0x4 + lsl r1, r0, #0x2 + ldr r0, =FX_SinCosTable_ + add r2, r0, r1 + ldrsh r0, [r0, r1] + mov r1, #0x2 + ldrsh r1, [r2, r1] + bl G3_RotY + ldrh r0, [r4, #0x3c] + asr r0, r0, #0x4 + lsl r1, r0, #0x2 + ldr r0, =FX_SinCosTable_ + add r2, r0, r1 + ldrsh r0, [r0, r1] + mov r1, #0x2 + ldrsh r1, [r2, r1] + bl G3_RotZ + ldr r0, [r4, #0x28] + lsl r0, r0, #0xc + neg r1, r0 + mov r0, #0x26 + ldrsh r2, [r4, r0] + mov r0, #0x42 + ldrsh r0, [r4, r0] + add r0, r2, r0 + mov r2, #0x24 + ldrsh r3, [r4, r2] + mov r2, #0x40 + ldrsh r2, [r4, r2] + lsl r0, r0, #0xc + neg r0, r0 + add r2, r3, r2 + lsl r2, r2, #0xc + neg r3, r2 + ldr r2, =0x04000470 + str r3, [r2, #0x0] + str r0, [r2, #0x0] + add r0, r2, #0x0 + str r1, [r0, #0x0] + ldr r3, [r4, #0x50] + lsl r0, r3, #0x11 + lsr r0, r0, #0x1b + lsl r2, r3, #0x16 + lsl r1, r0, #0xa + lsl r0, r3, #0x1b + lsr r2, r2, #0x1b + lsr r0, r0, #0x1b + lsl r2, r2, #0x5 + orr r0, r2 + orr r0, r1 + lsl r0, r0, #0x10 + lsr r2, r0, #0x10 + lsl r0, r3, #0x2 + lsr r0, r0, #0x1b + lsl r1, r0, #0xa + lsl r0, r3, #0xc + lsl r3, r3, #0x7 + lsr r3, r3, #0x1b + lsr r0, r0, #0x1b + lsl r3, r3, #0x5 + orr r0, r3 + orr r0, r1 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + lsl r0, r0, #0x10 + add r1, r2, #0x0 + orr r1, r0 + mov r0, #0x2 + lsl r0, r0, #0xe + orr r1, r0 + ldr r0, =0x040004C0 + str r1, [r0, #0x0] + ldr r1, =0x00004210 + add r0, r0, #0x4 + str r1, [r0, #0x0] + ldr r1, [r4, #0x0] + ldr r0, [r4, #0x54] + lsl r1, r1, #0x19 + lsl r0, r0, #0x19 + lsr r1, r1, #0x1a + lsr r0, r0, #0x1b + lsl r2, r1, #0x18 + mov r1, #0xc0 + lsl r0, r0, #0x10 + orr r1, r2 + orr r1, r0 + ldr r0, =0x040004A4 + str r1, [r0, #0x0] + ldr r0, [r4, #0x54] + lsl r0, r0, #0x1e + lsr r0, r0, #0x1f + beq _02007104 + add r0, r4, #0x0 + add r0, #0x5b + ldrb r0, [r0, #0x0] + add r2, r4, #0x0 + add r2, #0x44 + lsl r1, r0, #0x4 + ldr r0, [sp, #0x1c] + ldrb r3, [r2, #0x0] + add r0, r0, r1 + ldr r2, [sp, #0x1c] + ldr r0, [r0, #0x4] + ldr r1, [r2, r1] + add r6, r3, r1 + add r1, r4, #0x0 + add r1, #0x46 + ldrb r1, [r1, #0x0] + mov r12, r1 + add r1, r4, #0x0 + add r1, #0x45 + ldrb r2, [r1, #0x0] + add r1, r2, r0 + add r0, r4, #0x0 + add r0, #0x47 + ldrb r7, [r0, #0x0] + mov r0, r12 + add r0, r0, r6 + str r7, [sp, #0x0] + str r6, [sp, #0x4] + str r1, [sp, #0x8] + str r0, [sp, #0xc] + add r0, r7, r1 + str r0, [sp, #0x10] + mov r1, #0x24 + ldrsh r1, [r4, r1] + mov r0, #0x2c + ldrsh r0, [r4, r0] + sub r1, #0x28 + add r1, r1, r3 + add r0, r0, r1 + mov r3, #0x26 + ldrsh r3, [r4, r3] + mov r1, #0x2e + lsl r0, r0, #0x10 + sub r3, #0x28 + add r2, r3, r2 + ldrsh r1, [r4, r1] + ldr r3, [r4, #0x28] + asr r0, r0, #0x10 + add r2, r1, r2 + mov r1, #0x6e + ldrsb r1, [r4, r1] + sub r1, r2, r1 + ldr r2, [r4, #0x30] + lsl r1, r1, #0x10 + add r2, r3, r2 + asr r1, r1, #0x10 + mov r3, r12 + bl NNS_G2dDrawSpriteFast + b _02007174 +_02007104: + mov r0, #0x34 + ldrsh r1, [r4, r0] + mov r0, #0x50 + ldr r2, [sp, #0x1c] + mul r0, r1 + asr r3, r0, #0x8 + mov r0, #0x36 + ldrsh r1, [r4, r0] + mov r0, #0x50 + ldr r6, [sp, #0x1c] + mul r0, r1 + asr r1, r0, #0x8 + add r0, r4, #0x0 + add r0, #0x5b + ldrb r0, [r0, #0x0] + lsl r0, r0, #0x4 + str r1, [sp, #0x0] + add r2, r2, r0 + ldr r0, [r6, r0] + lsr r6, r1, #0x1f + str r0, [sp, #0x4] + ldr r0, [r2, #0x4] + add r6, r1, r6 + str r0, [sp, #0x8] + ldr r0, [r2, #0x8] + asr r1, r6, #0x1 + str r0, [sp, #0xc] + ldr r0, [r2, #0xc] + str r0, [sp, #0x10] + mov r0, #0x24 + ldrsh r2, [r4, r0] + lsr r0, r3, #0x1f + add r0, r3, r0 + asr r0, r0, #0x1 + sub r2, r2, r0 + mov r0, #0x2c + ldrsh r0, [r4, r0] + ldr r6, [r4, #0x28] + add r0, r2, r0 + mov r2, #0x26 + ldrsh r2, [r4, r2] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + sub r2, r2, r1 + mov r1, #0x2e + ldrsh r1, [r4, r1] + add r2, r2, r1 + mov r1, #0x6e + ldrsb r1, [r4, r1] + sub r1, r2, r1 + ldr r2, [r4, #0x30] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add r2, r6, r2 + bl NNS_G2dDrawSpriteFast +_02007174: + add r0, r4, #0x0 + add r0, #0x6c + ldrh r0, [r0, #0x0] + lsl r1, r0, #0x1e + lsr r1, r1, #0x1e + beq _0200719A + lsl r0, r0, #0x19 + lsr r0, r0, #0x1e + beq _0200719A + ldr r0, [r4, #0x54] + lsl r0, r0, #0x1e + lsr r0, r0, #0x1f + bne _0200719A + mov r0, #0xb9 + lsl r0, r0, #0x2 + ldr r1, [r5, r0] + mov r0, #0x1 + tst r0, r1 + beq _0200719C +_0200719A: + b _020072BC +_0200719C: + ldr r0, =0x000002E3 + ldrb r0, [r5, r0] + cmp r0, #0x1 + beq _020071AA + ldr r0, =0x04000454 + mov r1, #0x0 + str r1, [r0, #0x0] +_020071AA: + mov r0, #0x9d + lsl r0, r0, #0x2 + ldr r0, [r5, r0] + cmp r0, #0x2 + bne _020071B8 + mov r1, #0x1 + b _020071BA +_020071B8: + mov r1, #0x0 +_020071BA: + add r2, r4, #0x0 + add r2, #0x6c + ldrh r2, [r2, #0x0] + mov r0, #0xa9 + lsl r0, r0, #0x2 + lsl r2, r2, #0x1e + lsr r2, r2, #0x1e + add r2, r2, #0x3 + ldr r0, [r5, r0] + lsl r2, r2, #0x5 + add r2, r0, r2 + mov r0, #0x4 + sub r0, r0, r1 + add r1, r2, #0x0 + lsr r1, r0 + ldr r0, =0x040004AC + str r1, [r0, #0x0] + add r0, r4, #0x0 + add r0, #0x6c + ldrh r0, [r0, #0x0] + lsl r0, r0, #0x1b + lsr r0, r0, #0x1f + beq _020071FA + mov r0, #0x34 + ldrsh r0, [r4, r0] + lsl r0, r0, #0x6 + asr r3, r0, #0x8 + mov r0, #0x36 + ldrsh r0, [r4, r0] + lsl r0, r0, #0x4 + asr r1, r0, #0x8 + b _020071FE +_020071FA: + mov r3, #0x40 + mov r1, #0x10 +_020071FE: + add r0, r4, #0x0 + add r0, #0x6c + ldrh r0, [r0, #0x0] + lsl r0, r0, #0x1d + lsr r0, r0, #0x1f + beq _02007220 + mov r0, #0x74 + ldrsh r2, [r4, r0] + mov r0, #0x24 + mov r6, #0x2c + ldrsh r0, [r4, r0] + ldrsh r6, [r4, r6] + add r0, r0, r6 + add r2, r2, r0 + add r0, r4, #0x0 + add r0, #0x70 + strh r2, [r0, #0x0] +_02007220: + add r0, r4, #0x0 + add r0, #0x6c + ldrh r0, [r0, #0x0] + lsl r0, r0, #0x1c + lsr r0, r0, #0x1f + beq _02007242 + mov r0, #0x76 + ldrsh r2, [r4, r0] + mov r0, #0x26 + mov r6, #0x2e + ldrsh r0, [r4, r0] + ldrsh r6, [r4, r6] + add r0, r0, r6 + add r2, r2, r0 + add r0, r4, #0x0 + add r0, #0x72 + strh r2, [r0, #0x0] +_02007242: + add r0, r4, #0x0 + add r0, #0x6c + ldrh r0, [r0, #0x0] + ldr r2, =UNK_020ECBD0 + ldr r6, =UNK_020ECBD0 + lsl r0, r0, #0x19 + lsr r0, r0, #0x1e + lsl r0, r0, #0x4 + str r1, [sp, #0x0] + add r2, r2, r0 + ldr r0, [r6, r0] + lsr r6, r1, #0x1f + str r0, [sp, #0x4] + ldr r0, [r2, #0x4] + add r6, r1, r6 + str r0, [sp, #0x8] + ldr r0, [r2, #0x8] + asr r1, r6, #0x1 + str r0, [sp, #0xc] + ldr r0, [r2, #0xc] + str r0, [sp, #0x10] + mov r0, #0x70 + ldrsh r2, [r4, r0] + lsr r0, r3, #0x1f + add r0, r3, r0 + asr r0, r0, #0x1 + sub r0, r2, r0 + mov r2, #0x72 + ldrsh r2, [r4, r2] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + sub r1, r2, r1 + lsl r1, r1, #0x10 + ldr r2, =0xFFFFFC18 + asr r1, r1, #0x10 + bl NNS_G2dDrawSpriteFast +_020072BC: + ldr r0, [sp, #0x14] + add r4, #0x98 + add r0, #0x20 + str r0, [sp, #0x14] + ldr r0, [sp, #0x1c] + add r0, #0x20 + str r0, [sp, #0x1c] + ldr r0, [sp, #0x18] + add r0, r0, #0x1 + str r0, [sp, #0x18] + cmp r0, #0x4 + bge _020072D6 + b _02006F30 +_020072D6: + ldr r0, =0x04000448 + mov r1, #0x1 + str r1, [r0, #0x0] + add sp, #0x20 + pop {r3-r7, pc} + // clang-format on +} +#endif + + + +THUMB_FUNC void FUN_020072E8(struct UnkStruct1 *param0) { + FreeToHeap(param0->unk2AC); + FreeToHeap(param0->unk2B0); + FreeToHeap(param0->unk2B4); + FreeToHeap(param0); +} + + +THUMB_FUNC void FUN_02007314(struct UnkStruct2 *param0) { + param0->unk59 = 0; + for (s32 i = 0; i < 10; i++) { + param0->unk5C[i] = 0; + } + if (param0->unk84[param0->unk59].unk0 == -1) { + param0->unk5B = 0; + return; + } + + param0->unk58 = 1; + param0->unk5B = param0->unk84[param0->unk59].unk0; + param0->unk5A = param0->unk84[param0->unk59].unk1; + +} + + +THUMB_FUNC void FUN_0200737C(struct UnkStruct2 *param0, struct UnkStruct2_sub *param1) { + MI_CpuCopy8(param1, param0->unk84, sizeof(struct UnkStruct2_sub)*10); +} + +THUMB_FUNC BOOL FUN_02007390(struct UnkStruct2 *param0) { + if (param0->unk58 != 0) { + return TRUE; + } + return FALSE; +} + +extern u32 FUN_020073E8(struct UnkStruct1 *param0, struct UnkStruct63_021DB49C *param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7, u32 param8); + +THUMB_FUNC u32 FUN_020073A0(struct UnkStruct1 *param0, struct UnkStruct63_021DB49C *param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7) { + s32 i; + for (i = 0; i < 4; i++) { + if (param0->unk000[i].unk00_0 == 0) { + break; + } + } + GF_ASSERT(i != 4); + + return FUN_020073E8(param0, param1, param2, param3, param4, param5, i, param6, param7); +} |