summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Calixte <remicalixte.rmc@gmail.com>2021-08-23 22:41:01 +0200
committerRémi Calixte <remicalixte.rmc@gmail.com>2021-08-23 22:41:01 +0200
commitbe5461e427455695c3e99c4956b4f00c0535911a (patch)
tree4b93c6b0e864dca8441fbb57e99949688e1eea8f
parentf97c4d0627b52c8ad10a8d37082d05cdd8996197 (diff)
skip nonmatching FUN_02006ED4
-rw-r--r--arm9/asm/unk_02006D98.s665
-rw-r--r--arm9/src/unk_02006D98_c.c575
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);
+}