summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira Akashi <rubenru09@aol.com>2021-07-25 20:12:22 +0100
committerGitHub <noreply@github.com>2021-07-25 20:12:22 +0100
commit0c2db8de60375ab8c450ea64320feb22431f43aa (patch)
treeaa1dcc5d2980a74dff1a7bb238f8f1fc56aff323
parent68d7aa47cc52ef822220e0e35890863d7cad479f (diff)
parent7e5c80f9b086a0e1df2430a0c0ed2f9eec3a5cb0 (diff)
Merge pull request #414 from PikalaxALT/pikalax_work
[Leak informed] Decompile camera-related code
-rw-r--r--arm9/asm/scrcmd_asm.s6
-rw-r--r--arm9/asm/unk_02012CC8.s18
-rw-r--r--arm9/asm/unk_0201C7A0.s4
-rw-r--r--arm9/asm/unk_0201E7D8.s1186
-rw-r--r--arm9/asm/unk_02046030.s10
-rw-r--r--arm9/asm/unk_0204C1B4.s8
-rw-r--r--arm9/asm/unk_020607D4.s4
-rw-r--r--arm9/asm/unk_0206DE24.s2
-rw-r--r--arm9/asm/unk_0207EF6C.s14
-rw-r--r--arm9/asm/unk_02086414.s2
-rw-r--r--arm9/global.inc64
-rw-r--r--arm9/lib/NitroSDK/include/GX_g3_util.h4
-rw-r--r--arm9/lib/NitroSDK/include/fx.h162
-rw-r--r--arm9/lib/NitroSDK/src/FX_vec.c15
-rw-r--r--arm9/lib/NitroSDK/src/GX_g3_util.c2
-rw-r--r--arm9/modules/05/asm/mod05_021D74E0.s10
-rw-r--r--arm9/modules/05/asm/mod05_021DA5B8.s28
-rw-r--r--arm9/modules/05/asm/mod05_021DBD84.s16
-rw-r--r--arm9/modules/05/asm/mod05_021DC0B8.s4
-rw-r--r--arm9/modules/05/asm/module_05.s84
-rw-r--r--arm9/modules/06/asm/module_06.s70
-rw-r--r--arm9/modules/07/asm/module_07.s2
-rw-r--r--arm9/modules/08/asm/module_08.s28
-rw-r--r--arm9/modules/12/asm/module_12.s2
-rw-r--r--arm9/modules/18/asm/module_18.s2
-rw-r--r--arm9/modules/63/asm/mod63_021D74E0.s22
-rw-r--r--arm9/modules/63/asm/mod63_021D8890.s44
-rw-r--r--arm9/modules/63/src/mod63_021DB450.c4
-rw-r--r--arm9/modules/64/asm/module_64.s16
-rw-r--r--arm9/modules/65/asm/module_65.s14
-rw-r--r--arm9/modules/68/asm/module_68.s14
-rw-r--r--arm9/modules/69/asm/module_69.s12
-rw-r--r--arm9/modules/77/asm/module_77.s18
-rw-r--r--arm9/modules/78/asm/module_78.s10
-rw-r--r--arm9/modules/81/asm/module_81.s26
-rw-r--r--arm9/modules/84/asm/module_84_thumb1.s14
-rw-r--r--arm9/src/unk_0201E7D8.c383
-rw-r--r--include/nitro/FX_types.h109
-rw-r--r--include/nitro/NNS_g3d.h89
-rw-r--r--include/unk_0201E7D8.h61
40 files changed, 993 insertions, 1590 deletions
diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s
index 417c0605..8dcbdf20 100644
--- a/arm9/asm/scrcmd_asm.s
+++ b/arm9/asm/scrcmd_asm.s
@@ -438,7 +438,7 @@ ScrCmd_Unk0066: ; 0x0203B468
ldr r1, [r5, #0x0]
add r0, r4, #0x0
ldr r1, [r1, #0x20]
- bl FUN_0201EC68
+ bl Camera_SetFixedTarget
mov r0, #0x0
add sp, #0xc
pop {r4-r7, pc}
@@ -471,7 +471,7 @@ ScrCmd_Unk0067: ; 0x0203B500
ldr r1, [r5, #0x0]
add r0, r4, #0x0
ldr r1, [r1, #0x20]
- bl FUN_0201EC68
+ bl Camera_SetFixedTarget
mov r0, #0x0
pop {r3-r5, pc}
@@ -685,7 +685,7 @@ _0203B6F8:
ldr r1, [r5, #0x0]
add r0, sp, #0x0
ldr r1, [r1, #0x20]
- bl FUN_0201EF70
+ bl Camera_OffsetLookAtPosAndTarget
mov r0, #0x0
add sp, #0xc
pop {r4-r7, pc}
diff --git a/arm9/asm/unk_02012CC8.s b/arm9/asm/unk_02012CC8.s
index e54565f1..3a1b080f 100644
--- a/arm9/asm/unk_02012CC8.s
+++ b/arm9/asm/unk_02012CC8.s
@@ -145,7 +145,7 @@ _02012D14:
cmp r0, #0x1
bne _02012DA8
ldr r0, [sp, #0x2c]
- bl FUN_0201EB64
+ bl Camera_Alloc
str r0, [r4, #0x20]
mov r3, #0x0
str r3, [r4, #0x24]
@@ -160,13 +160,13 @@ _02012D14:
str r0, [sp, #0x4]
ldrh r2, [r4, #0x30]
ldr r0, _02012DDC ; =UNK_020ED4F0
- bl FUN_0201ED5C
+ bl Camera_InitWithPosAndTarget
add r0, r4, #0x0
mov r1, #0x0
add r0, #0xdb
strb r1, [r0, #0x0]
ldr r0, [r4, #0x20]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
_02012DA8:
mov r0, #0x6
str r0, [sp, #0x0]
@@ -291,7 +291,7 @@ _02012E94:
ldr r0, [r5, #0x20]
cmp r0, #0x0
beq _02012E9E
- bl FUN_0201EB70
+ bl Camera_Free
_02012E9E:
add r0, r5, #0x0
bl FreeToHeap
@@ -947,10 +947,10 @@ FUN_02013300: ; 0x02013300
beq _0201331C
add r0, #0xdb
ldrb r0, [r0, #0x0]
- bl FUN_0201EE2C
+ bl Camera_ApplyPerspectiveType
ldr r0, [r4, #0x20]
- bl FUN_0201EB8C
- bl FUN_0201EBA4
+ bl Camera_SetWorkPtr
+ bl Camera_PushLookAtToNNSGlb
_0201331C:
bl NNS_G3dGlbFlushP
ldr r0, [r4, #0x0]
@@ -959,7 +959,7 @@ _0201331C:
ldr r0, [r4, #0x20]
cmp r0, #0x0
beq _02013332
- bl FUN_0201EB98
+ bl Camera_UnsetWorkPtr
_02013332:
bl NNS_G3dGlbFlushP
pop {r4, pc}
@@ -1106,7 +1106,7 @@ FUN_020133FC: ; 0x020133FC
str r0, [r2, #0x0]
ldr r1, [r5, #0x20]
add r0, r4, #0x0
- bl FUN_0201EC58
+ bl Camera_SetLookAtCamUp
pop {r3-r5, pc}
.balign 4
diff --git a/arm9/asm/unk_0201C7A0.s b/arm9/asm/unk_0201C7A0.s
index cbc055af..0602b2cb 100644
--- a/arm9/asm/unk_0201C7A0.s
+++ b/arm9/asm/unk_0201C7A0.s
@@ -22,8 +22,8 @@ FUN_0201C7A8: ; 0x0201C7A8
_0201C7AE:
bx lr
- thumb_func_start FUN_0201C7B0
-FUN_0201C7B0: ; 0x0201C7B0
+ thumb_func_start CalcAngleBetweenVecs
+CalcAngleBetweenVecs: ; 0x0201C7B0
push {r3-r7, lr}
sub sp, #0x30
add r4, r1, #0x0
diff --git a/arm9/asm/unk_0201E7D8.s b/arm9/asm/unk_0201E7D8.s
deleted file mode 100644
index abc19a78..00000000
--- a/arm9/asm/unk_0201E7D8.s
+++ /dev/null
@@ -1,1186 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .extern NNS_G3dGlb
- .extern NNS_G3dGlb
- .extern NNS_G3dGlb
- .extern FX_SinCosTable_
- .extern NNS_G3dGlb
- .extern NNS_G3dGlb
- .extern NNS_G3dGlb
-
- .section .data
-
- .global UNK_02105BB8
-UNK_02105BB8: ; 0x02105BB8
- .byte 0x01, 0x00, 0x00, 0x00
-
- .section .bss
-
- .global UNK_021C59A4
-UNK_021C59A4: ; 0x021C59A4
- .space 0x4
-
- .text
-
- thumb_func_start FUN_0201E7D8
-FUN_0201E7D8: ; 0x0201E7D8
- push {r3-r5, lr}
- add r5, r0, #0x0
- ldrh r0, [r5, #0x3e]
- ldr r2, [r5, #0x38]
- ldrh r4, [r5, #0x3c]
- asr r0, r0, #0x4
- lsl r1, r0, #0x2
- ldr r0, _0201E8B4 ; =FX_SinCosTable_
- asr r3, r2, #0x1f
- ldrsh r0, [r0, r1]
- asr r1, r0, #0x1f
- bl _ll_mul
- mov r2, #0x2
- mov r3, #0x0
- lsl r2, r2, #0xa
- add r0, r0, r2
- adc r1, r3
- asr r2, r4, #0x4
- lsl r2, r2, #0x1
- add r2, r2, #0x1
- lsl r3, r2, #0x1
- ldr r2, _0201E8B4 ; =FX_SinCosTable_
- lsl r1, r1, #0x14
- ldrsh r2, [r2, r3]
- lsr r0, r0, #0xc
- orr r0, r1
- asr r1, r0, #0x1f
- asr r3, r2, #0x1f
- bl _ll_mul
- mov r2, #0x2
- mov r3, #0x0
- 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, #0x14]
- ldrh r0, [r5, #0x3e]
- ldr r2, [r5, #0x38]
- asr r0, r0, #0x4
- lsl r0, r0, #0x1
- add r0, r0, #0x1
- lsl r1, r0, #0x1
- ldr r0, _0201E8B4 ; =FX_SinCosTable_
- asr r3, r2, #0x1f
- ldrsh r0, [r0, r1]
- asr r1, r0, #0x1f
- bl _ll_mul
- mov r2, #0x2
- lsl r2, r2, #0xa
- mov r3, #0x0
- add r0, r0, r2
- adc r1, r3
- ldrh r2, [r5, #0x3c]
- lsl r1, r1, #0x14
- lsr r0, r0, #0xc
- asr r2, r2, #0x4
- lsl r2, r2, #0x1
- add r2, r2, #0x1
- lsl r3, r2, #0x1
- ldr r2, _0201E8B4 ; =FX_SinCosTable_
- orr r0, r1
- ldrsh r2, [r2, r3]
- asr r1, r0, #0x1f
- asr r3, r2, #0x1f
- bl _ll_mul
- mov r2, #0x2
- mov r3, #0x0
- lsl r2, r2, #0xa
- add r2, r0, r2
- adc r1, r3
- lsl r0, r1, #0x14
- lsr r1, r2, #0xc
- orr r1, r0
- neg r0, r4
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- str r1, [r5, #0x1c]
- asr r0, r0, #0x4
- lsl r1, r0, #0x2
- ldr r0, _0201E8B4 ; =FX_SinCosTable_
- ldr r2, [r5, #0x38]
- ldrsh r0, [r0, r1]
- asr r3, r2, #0x1f
- asr r1, r0, #0x1f
- bl _ll_mul
- mov r2, #0x2
- mov r3, #0x0
- lsl r2, r2, #0xa
- add r2, r0, r2
- adc r1, r3
- lsl r0, r1, #0x14
- lsr r1, r2, #0xc
- orr r1, r0
- add r0, r5, #0x0
- str r1, [r5, #0x18]
- add r0, #0x14
- add r5, #0x20
- add r1, r5, #0x0
- add r2, r0, #0x0
- bl VEC_Add
- pop {r3-r5, pc}
- nop
-_0201E8B4: .word FX_SinCosTable_
-
- thumb_func_start FUN_0201E8B8
-FUN_0201E8B8: ; 0x0201E8B8
- push {r3-r5, lr}
- add r5, r0, #0x0
- ldrh r0, [r5, #0x3e]
- ldr r2, [r5, #0x38]
- ldrh r4, [r5, #0x3c]
- asr r0, r0, #0x4
- lsl r1, r0, #0x2
- ldr r0, _0201E998 ; =FX_SinCosTable_
- asr r3, r2, #0x1f
- ldrsh r0, [r0, r1]
- asr r1, r0, #0x1f
- bl _ll_mul
- mov r2, #0x2
- mov r3, #0x0
- lsl r2, r2, #0xa
- add r0, r0, r2
- adc r1, r3
- asr r2, r4, #0x4
- lsl r2, r2, #0x1
- add r2, r2, #0x1
- lsl r3, r2, #0x1
- ldr r2, _0201E998 ; =FX_SinCosTable_
- lsl r1, r1, #0x14
- ldrsh r2, [r2, r3]
- lsr r0, r0, #0xc
- orr r0, r1
- asr r1, r0, #0x1f
- asr r3, r2, #0x1f
- bl _ll_mul
- mov r2, #0x2
- mov r3, #0x0
- lsl r2, r2, #0xa
- add r2, r0, r2
- adc r1, r3
- lsl r0, r1, #0x14
- lsr r1, r2, #0xc
- orr r1, r0
- neg r0, r1
- str r0, [r5, #0x20]
- ldrh r0, [r5, #0x3e]
- ldr r2, [r5, #0x38]
- asr r0, r0, #0x4
- lsl r0, r0, #0x1
- add r0, r0, #0x1
- lsl r1, r0, #0x1
- ldr r0, _0201E998 ; =FX_SinCosTable_
- asr r3, r2, #0x1f
- ldrsh r0, [r0, r1]
- asr r1, r0, #0x1f
- bl _ll_mul
- mov r2, #0x2
- lsl r2, r2, #0xa
- mov r3, #0x0
- add r0, r0, r2
- adc r1, r3
- ldrh r2, [r5, #0x3c]
- lsl r1, r1, #0x14
- lsr r0, r0, #0xc
- asr r2, r2, #0x4
- lsl r2, r2, #0x1
- add r2, r2, #0x1
- lsl r3, r2, #0x1
- ldr r2, _0201E998 ; =FX_SinCosTable_
- orr r0, r1
- ldrsh r2, [r2, r3]
- asr r1, r0, #0x1f
- asr r3, r2, #0x1f
- bl _ll_mul
- mov r2, #0x2
- mov r3, #0x0
- lsl r2, r2, #0xa
- add r2, r0, r2
- adc r1, r3
- lsl r0, r1, #0x14
- lsr r1, r2, #0xc
- orr r1, r0
- neg r0, r1
- str r0, [r5, #0x28]
- neg r0, r4
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- asr r0, r0, #0x4
- lsl r1, r0, #0x2
- ldr r0, _0201E998 ; =FX_SinCosTable_
- ldr r2, [r5, #0x38]
- ldrsh r0, [r0, r1]
- asr r3, r2, #0x1f
- asr r1, r0, #0x1f
- bl _ll_mul
- mov r2, #0x2
- mov r3, #0x0
- lsl r2, r2, #0xa
- add r2, r0, r2
- adc r1, r3
- lsl r0, r1, #0x14
- lsr r1, r2, #0xc
- orr r1, r0
- neg r0, r1
- str r0, [r5, #0x24]
- add r0, r5, #0x0
- add r0, #0x20
- add r5, #0x14
- add r1, r5, #0x0
- add r2, r0, #0x0
- bl VEC_Add
- pop {r3-r5, pc}
- .balign 4
-_0201E998: .word FX_SinCosTable_
-
- thumb_func_start FUN_0201E99C
-FUN_0201E99C: ; 0x0201E99C
- add r2, r1, #0x0
- add r2, #0x46
- strh r0, [r2, #0x0]
- asr r0, r0, #0x4
- lsl r3, r0, #0x1
- ldr r2, _0201E9E0 ; =FX_SinCosTable_
- lsl r0, r3, #0x1
- ldrsh r0, [r2, r0]
- str r0, [r1, #0x0]
- add r0, r3, #0x1
- lsl r0, r0, #0x1
- ldrsh r0, [r2, r0]
- mov r2, #0x0
- str r0, [r1, #0x4]
- ldr r0, _0201E9E4 ; =0x00001555
- str r0, [r1, #0x8]
- mov r0, #0x96
- lsl r0, r0, #0xc
- str r0, [r1, #0xc]
- mov r0, #0xe1
- lsl r0, r0, #0xe
- str r0, [r1, #0x10]
- mov r0, #0x1
- str r2, [r1, #0x2c]
- lsl r0, r0, #0xc
- str r0, [r1, #0x30]
- str r2, [r1, #0x34]
- str r2, [r1, #0x54]
- str r2, [r1, #0x58]
- str r2, [r1, #0x5c]
- str r2, [r1, #0x60]
- str r2, [r1, #0x64]
- bx lr
- nop
-_0201E9E0: .word FX_SinCosTable_
-_0201E9E4: .word 0x00001555
-
- thumb_func_start FUN_0201E9E8
-FUN_0201E9E8: ; 0x0201E9E8
- ldr r2, [r0, #0x58]
- cmp r2, #0x0
- bne _0201E9F2
- mov r2, #0x0
- str r2, [r1, #0x0]
-_0201E9F2:
- ldr r2, [r0, #0x5c]
- cmp r2, #0x0
- bne _0201E9FC
- mov r2, #0x0
- str r2, [r1, #0x4]
-_0201E9FC:
- ldr r0, [r0, #0x60]
- cmp r0, #0x0
- bne _0201EA06
- mov r0, #0x0
- str r0, [r1, #0x8]
-_0201EA06:
- bx lr
-
- thumb_func_start FUN_0201EA08
-FUN_0201EA08: ; 0x0201EA08
- push {r3-r7, lr}
- add r5, r0, #0x0
- ldr r7, [r5, #0x64]
- add r4, r1, #0x0
- add r6, r2, #0x0
- cmp r7, #0x0
- bne _0201EA20
- ldmia r4!, {r0-r1}
- stmia r6!, {r0-r1}
- ldr r0, [r4, #0x0]
- str r0, [r6, #0x0]
- pop {r3-r7, pc}
-_0201EA20:
- add r0, r7, #0x0
- str r0, [sp, #0x0]
- add r0, #0x8
- str r0, [sp, #0x0]
- ldr r0, [r7, #0x10]
- cmp r0, #0x0
- bne _0201EA48
- add r3, r4, #0x0
- ldmia r3!, {r0-r1}
- stmia r2!, {r0-r1}
- ldr r0, [r3, #0x0]
- str r0, [r2, #0x0]
- ldr r0, [r5, #0x64]
- ldr r2, [r7, #0x4]
- ldr r1, [r0, #0xc]
- cmp r2, r1
- bne _0201EA5C
- mov r1, #0x1
- str r1, [r0, #0x10]
- b _0201EA5C
-_0201EA48:
- ldr r2, [r7, #0x4]
- mov r1, #0xc
- mul r1, r2
- ldr r0, [r7, #0x20]
- add r2, r6, #0x0
- add r3, r0, r1
- ldmia r3!, {r0-r1}
- stmia r2!, {r0-r1}
- ldr r0, [r3, #0x0]
- str r0, [r2, #0x0]
-_0201EA5C:
- ldr r1, [r5, #0x64]
- ldr r0, [r7, #0x4]
- ldr r1, [r1, #0x0]
- add r0, r0, #0x1
- bl _s32_div_f
- str r1, [r7, #0x4]
- ldr r1, [sp, #0x0]
- ldr r0, [r5, #0x64]
- ldr r2, [r1, #0x0]
- mov r1, #0xc
- ldr r0, [r0, #0x20]
- mul r1, r2
- add r3, r4, #0x0
- add r2, r0, r1
- ldmia r3!, {r0-r1}
- stmia r2!, {r0-r1}
- ldr r0, [r3, #0x0]
- str r0, [r2, #0x0]
- ldr r0, [sp, #0x0]
- ldr r1, [r5, #0x64]
- ldr r0, [r0, #0x0]
- ldr r1, [r1, #0x0]
- add r0, r0, #0x1
- bl _s32_div_f
- ldr r0, [sp, #0x0]
- str r1, [r0, #0x0]
- ldr r0, [r5, #0x64]
- ldr r0, [r0, #0x14]
- cmp r0, #0x0
- bne _0201EAA0
- ldr r0, [r4, #0x0]
- str r0, [r6, #0x0]
-_0201EAA0:
- ldr r0, [r5, #0x64]
- ldr r0, [r0, #0x18]
- cmp r0, #0x0
- bne _0201EAAC
- ldr r0, [r4, #0x4]
- str r0, [r6, #0x4]
-_0201EAAC:
- ldr r0, [r5, #0x64]
- ldr r0, [r0, #0x1c]
- cmp r0, #0x0
- bne _0201EAB8
- ldr r0, [r4, #0x8]
- str r0, [r6, #0x8]
-_0201EAB8:
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_0201EABC
-FUN_0201EABC: ; 0x0201EABC
- push {r3-r7, lr}
- add r5, r0, #0x0
- ldr r0, [sp, #0x18]
- add r7, r1, #0x0
- str r0, [sp, #0x18]
- ldr r0, [r0, #0x54]
- add r6, r2, #0x0
- str r3, [sp, #0x0]
- cmp r0, #0x0
- beq _0201EB46
- add r0, r7, #0x1
- cmp r0, r5
- ble _0201EADA
- bl GF_AssertFail
-_0201EADA:
- ldr r0, [sp, #0x0]
- mov r1, #0x24
- bl AllocFromHeap
- add r4, r0, #0x0
- mov r1, #0xc
- ldr r0, [sp, #0x0]
- mul r1, r5
- bl AllocFromHeap
- mov r1, #0x0
- str r0, [r4, #0x20]
- cmp r5, #0x0
- ble _0201EB12
- add r2, r1, #0x0
- add r0, r1, #0x0
-_0201EAFA:
- ldr r3, [r4, #0x20]
- add r1, r1, #0x1
- str r0, [r3, r2]
- ldr r3, [r4, #0x20]
- add r3, r3, r2
- str r0, [r3, #0x4]
- ldr r3, [r4, #0x20]
- add r3, r3, r2
- str r0, [r3, #0x8]
- add r2, #0xc
- cmp r1, r5
- blt _0201EAFA
-_0201EB12:
- str r5, [r4, #0x0]
- mov r0, #0x0
- str r0, [r4, #0x4]
- str r7, [r4, #0x8]
- str r7, [r4, #0xc]
- str r0, [r4, #0x10]
- str r0, [r4, #0x14]
- str r0, [r4, #0x18]
- str r0, [r4, #0x1c]
- mov r0, #0x1
- add r1, r6, #0x0
- tst r1, r0
- beq _0201EB2E
- str r0, [r4, #0x14]
-_0201EB2E:
- mov r0, #0x2
- tst r0, r6
- beq _0201EB38
- mov r0, #0x1
- str r0, [r4, #0x18]
-_0201EB38:
- mov r0, #0x4
- tst r0, r6
- beq _0201EB42
- mov r0, #0x1
- str r0, [r4, #0x1c]
-_0201EB42:
- ldr r0, [sp, #0x18]
- str r4, [r0, #0x64]
-_0201EB46:
- pop {r3-r7, pc}
-
- thumb_func_start FUN_0201EB48
-FUN_0201EB48: ; 0x0201EB48
- push {r4, lr}
- add r4, r0, #0x0
- ldr r0, [r4, #0x64]
- cmp r0, #0x0
- beq _0201EB62
- ldr r0, [r0, #0x20]
- bl FreeToHeap
- ldr r0, [r4, #0x64]
- bl FreeToHeap
- mov r0, #0x0
- str r0, [r4, #0x64]
-_0201EB62:
- pop {r4, pc}
-
- thumb_func_start FUN_0201EB64
-FUN_0201EB64: ; 0x0201EB64
- ldr r3, _0201EB6C ; =AllocFromHeap
- mov r1, #0x68
- bx r3
- nop
-_0201EB6C: .word AllocFromHeap
-
- thumb_func_start FUN_0201EB70
-FUN_0201EB70: ; 0x0201EB70
- ldr r3, _0201EB74 ; =FreeToHeap
- bx r3
- .balign 4
-_0201EB74: .word FreeToHeap
-
- thumb_func_start FUN_0201EB78
-FUN_0201EB78: ; 0x0201EB78
- push {r3-r4}
- add r4, r0, #0x0
- add r3, r1, #0x0
- mov r2, #0xd
-_0201EB80:
- ldmia r4!, {r0-r1}
- stmia r3!, {r0-r1}
- sub r2, r2, #0x1
- bne _0201EB80
- pop {r3-r4}
- bx lr
-
- thumb_func_start FUN_0201EB8C
-FUN_0201EB8C: ; 0x0201EB8C
- ldr r1, _0201EB94 ; =UNK_021C59A4
- str r0, [r1, #0x0]
- bx lr
- nop
-_0201EB94: .word UNK_021C59A4
-
- thumb_func_start FUN_0201EB98
-FUN_0201EB98: ; 0x0201EB98
- ldr r0, _0201EBA0 ; =UNK_021C59A4
- mov r1, #0x0
- str r1, [r0, #0x0]
- bx lr
- .balign 4
-_0201EBA0: .word UNK_021C59A4
-
- thumb_func_start FUN_0201EBA4
-FUN_0201EBA4: ; 0x0201EBA4
- push {r3-r6, lr}
- sub sp, #0x1c
- ldr r0, _0201EC40 ; =UNK_021C59A4
- ldr r1, [r0, #0x0]
- cmp r1, #0x0
- beq _0201EC3A
- ldr r0, [r1, #0x54]
- cmp r0, #0x0
- beq _0201EBEE
- add r1, #0x48
- add r2, sp, #0x10
- bl VEC_Subtract
- ldr r0, _0201EC40 ; =UNK_021C59A4
- add r1, sp, #0x10
- ldr r0, [r0, #0x0]
- bl FUN_0201E9E8
- ldr r0, _0201EC40 ; =UNK_021C59A4
- add r1, sp, #0x10
- ldr r0, [r0, #0x0]
- add r2, sp, #0x4
- bl FUN_0201EA08
- ldr r1, _0201EC40 ; =UNK_021C59A4
- add r0, sp, #0x4
- ldr r1, [r1, #0x0]
- bl FUN_0201EF70
- ldr r0, _0201EC40 ; =UNK_021C59A4
- ldr r3, [r0, #0x0]
- ldr r2, [r3, #0x54]
- add r3, #0x48
- ldmia r2!, {r0-r1}
- stmia r3!, {r0-r1}
- ldr r0, [r2, #0x0]
- str r0, [r3, #0x0]
-_0201EBEE:
- ldr r0, _0201EC40 ; =UNK_021C59A4
- ldr r5, _0201EC44 ; =NNS_G3dGlb + 0x240
- ldr r4, [r0, #0x0]
- add r3, r4, #0x0
- add r2, r4, #0x0
- add r4, #0x14
- add r6, r4, #0x0
- ldmia r6!, {r0-r1}
- stmia r5!, {r0-r1}
- ldr r0, [r6, #0x0]
- add r2, #0x2c
- str r0, [r5, #0x0]
- add r6, r2, #0x0
- ldr r5, _0201EC48 ; =NNS_G3dGlb + 0x24C
- ldmia r6!, {r0-r1}
- stmia r5!, {r0-r1}
- ldr r0, [r6, #0x0]
- add r3, #0x20
- str r0, [r5, #0x0]
- add r6, r3, #0x0
- ldr r5, _0201EC4C ; =NNS_G3dGlb + 0x258
- ldmia r6!, {r0-r1}
- stmia r5!, {r0-r1}
- ldr r0, [r6, #0x0]
- add r1, r2, #0x0
- str r0, [r5, #0x0]
- ldr r0, _0201EC50 ; =NNS_G3dGlb + 0x4C
- add r2, r3, #0x0
- str r0, [sp, #0x0]
- add r0, r4, #0x0
- mov r3, #0x0
- bl G3i_LookAt_
- ldr r1, _0201EC54 ; =NNS_G3dGlb + 0x80
- mov r0, #0xe8
- ldr r2, [r1, #0x7c]
- bic r2, r0
- str r2, [r1, #0x7c]
-_0201EC3A:
- add sp, #0x1c
- pop {r3-r6, pc}
- nop
-_0201EC40: .word UNK_021C59A4
-_0201EC44: .word NNS_G3dGlb + 0x240
-_0201EC48: .word NNS_G3dGlb + 0x24C
-_0201EC4C: .word NNS_G3dGlb + 0x258
-_0201EC50: .word NNS_G3dGlb + 0x4C
-_0201EC54: .word NNS_G3dGlb + 0x80
-
- thumb_func_start FUN_0201EC58
-FUN_0201EC58: ; 0x0201EC58
- add r3, r0, #0x0
- add r2, r1, #0x0
- ldmia r3!, {r0-r1}
- add r2, #0x2c
- stmia r2!, {r0-r1}
- ldr r0, [r3, #0x0]
- str r0, [r2, #0x0]
- bx lr
-
- thumb_func_start FUN_0201EC68
-FUN_0201EC68: ; 0x0201EC68
- push {r3-r4}
- add r3, r1, #0x0
- add r4, r0, #0x0
- str r4, [r3, #0x54]
- add r2, r3, #0x0
- ldmia r4!, {r0-r1}
- add r2, #0x48
- stmia r2!, {r0-r1}
- ldr r0, [r4, #0x0]
- str r0, [r2, #0x0]
- mov r0, #0x1
- str r0, [r3, #0x58]
- str r0, [r3, #0x5c]
- str r0, [r3, #0x60]
- pop {r3-r4}
- bx lr
-
- thumb_func_start FUN_0201EC88
-FUN_0201EC88: ; 0x0201EC88
- mov r1, #0x0
- str r1, [r0, #0x54]
- str r1, [r0, #0x58]
- str r1, [r0, #0x5c]
- str r1, [r0, #0x60]
- bx lr
-
- thumb_func_start FUN_0201EC94
-FUN_0201EC94: ; 0x0201EC94
- str r0, [r2, #0xc]
- add r0, r2, #0x0
- str r1, [r2, #0x10]
- add r0, #0x44
- ldr r3, _0201ECA4 ; =FUN_0201EE2C
- ldrb r0, [r0, #0x0]
- add r1, r2, #0x0
- bx r3
- .balign 4
-_0201ECA4: .word FUN_0201EE2C
-
- thumb_func_start FUN_0201ECA8
-FUN_0201ECA8: ; 0x0201ECA8
- push {r3-r7, lr}
- ldr r4, [sp, #0x20]
- add r5, r0, #0x0
- add r7, r1, #0x0
- add r0, r3, #0x0
- add r1, r4, #0x0
- add r6, r2, #0x0
- bl FUN_0201E99C
- add r3, r5, #0x0
- add r2, r4, #0x0
- ldmia r3!, {r0-r1}
- add r2, #0x20
- stmia r2!, {r0-r1}
- ldr r0, [r3, #0x0]
- str r0, [r2, #0x0]
- str r7, [r4, #0x38]
- ldrh r0, [r6, #0x0]
- strh r0, [r4, #0x3c]
- ldrh r0, [r6, #0x2]
- strh r0, [r4, #0x3e]
- add r0, r4, #0x0
- ldrh r1, [r6, #0x4]
- add r0, #0x40
- strh r1, [r0, #0x0]
- add r0, r4, #0x0
- ldrh r1, [r6, #0x6]
- add r0, #0x42
- strh r1, [r0, #0x0]
- add r0, r4, #0x0
- bl FUN_0201E7D8
- add r0, sp, #0x8
- ldrb r0, [r0, #0x10]
- add r1, r4, #0x0
- bl FUN_0201EE2C
- ldr r0, [sp, #0x1c]
- cmp r0, #0x0
- beq _0201ED0E
- str r5, [r4, #0x54]
- add r2, r4, #0x0
- ldmia r5!, {r0-r1}
- add r2, #0x48
- stmia r2!, {r0-r1}
- ldr r0, [r5, #0x0]
- str r0, [r2, #0x0]
- mov r0, #0x1
- str r0, [r4, #0x58]
- str r0, [r4, #0x5c]
- str r0, [r4, #0x60]
-_0201ED0E:
- pop {r3-r7, pc}
-
- thumb_func_start FUN_0201ED10
-FUN_0201ED10: ; 0x0201ED10
- push {r3-r7, lr}
- ldr r4, [sp, #0x1c]
- add r6, r0, #0x0
- add r7, r1, #0x0
- add r0, r3, #0x0
- add r1, r4, #0x0
- add r5, r2, #0x0
- bl FUN_0201E99C
- add r2, r4, #0x0
- ldmia r6!, {r0-r1}
- add r2, #0x14
- stmia r2!, {r0-r1}
- ldr r0, [r6, #0x0]
- str r0, [r2, #0x0]
- str r7, [r4, #0x38]
- ldrh r0, [r5, #0x0]
- strh r0, [r4, #0x3c]
- ldrh r0, [r5, #0x2]
- strh r0, [r4, #0x3e]
- add r0, r4, #0x0
- ldrh r1, [r5, #0x4]
- add r0, #0x40
- strh r1, [r0, #0x0]
- add r0, r4, #0x0
- ldrh r1, [r5, #0x6]
- add r0, #0x42
- strh r1, [r0, #0x0]
- add r0, r4, #0x0
- bl FUN_0201E8B8
- add r0, sp, #0x8
- ldrb r0, [r0, #0x10]
- add r1, r4, #0x0
- bl FUN_0201EE2C
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_0201ED5C
-FUN_0201ED5C: ; 0x0201ED5C
- push {r4-r7, lr}
- sub sp, #0x3c
- ldr r4, [sp, #0x54]
- add r5, r0, #0x0
- add r6, r1, #0x0
- add r0, r2, #0x0
- add r1, r4, #0x0
- add r7, r3, #0x0
- bl FUN_0201E99C
- add r3, r5, #0x0
- add r2, r4, #0x0
- ldmia r3!, {r0-r1}
- add r2, #0x20
- stmia r2!, {r0-r1}
- ldr r0, [r3, #0x0]
- add r3, r6, #0x0
- str r0, [r2, #0x0]
- add r2, r4, #0x0
- ldmia r3!, {r0-r1}
- add r2, #0x14
- stmia r2!, {r0-r1}
- ldr r0, [r3, #0x0]
- add r1, r5, #0x0
- str r0, [r2, #0x0]
- add r0, r6, #0x0
- add r2, sp, #0x30
- bl VEC_Subtract
- add r0, sp, #0x30
- bl VEC_Mag
- str r0, [r4, #0x38]
- mov r6, #0x0
- add r0, sp, #0x24
- str r6, [r0, #0x0]
- str r6, [r0, #0x4]
- str r6, [r0, #0x8]
- add r0, sp, #0x18
- str r6, [r0, #0x0]
- str r6, [r0, #0x4]
- str r6, [r0, #0x8]
- add r0, sp, #0xc
- str r6, [r0, #0x0]
- str r6, [r0, #0x4]
- str r6, [r0, #0x8]
- mov r0, #0x1
- lsl r0, r0, #0xc
- add r3, sp, #0x30
- str r0, [sp, #0x8]
- ldmia r3!, {r0-r1}
- add r2, sp, #0xc
- stmia r2!, {r0-r1}
- ldr r0, [r3, #0x0]
- str r6, [sp, #0x0]
- str r0, [r2, #0x0]
- str r6, [sp, #0x4]
- str r6, [sp, #0x10]
- add r0, sp, #0x0
- add r1, sp, #0xc
- bl FUN_0201C7B0
- strh r0, [r4, #0x3e]
- add r1, r6, #0x0
- mov r0, #0x1
- lsl r0, r0, #0xc
- str r0, [sp, #0x0]
- ldr r0, [sp, #0x38]
- str r1, [sp, #0x4]
- str r0, [sp, #0xc]
- ldr r0, [sp, #0x34]
- str r1, [sp, #0x8]
- str r0, [sp, #0x14]
- str r1, [sp, #0x10]
- add r0, sp, #0x0
- add r1, sp, #0xc
- bl FUN_0201C7B0
- strh r0, [r4, #0x3c]
- add r0, r4, #0x0
- add r1, r6, #0x0
- add r0, #0x40
- strh r1, [r0, #0x0]
- add r0, r7, #0x0
- add r1, r4, #0x0
- bl FUN_0201EE2C
- ldr r0, [sp, #0x50]
- cmp r0, #0x0
- beq _0201EE26
- str r5, [r4, #0x54]
- add r2, r4, #0x0
- ldmia r5!, {r0-r1}
- add r2, #0x48
- stmia r2!, {r0-r1}
- ldr r0, [r5, #0x0]
- str r0, [r2, #0x0]
- mov r0, #0x1
- str r0, [r4, #0x58]
- str r0, [r4, #0x5c]
- str r0, [r4, #0x60]
-_0201EE26:
- add sp, #0x3c
- pop {r4-r7, pc}
- .balign 4
-
- thumb_func_start FUN_0201EE2C
-FUN_0201EE2C: ; 0x0201EE2C
- push {r3-r6, lr}
- sub sp, #0x14
- add r5, r1, #0x0
- cmp r0, #0x0
- bne _0201EE6C
- ldr r0, [r5, #0x10]
- str r0, [sp, #0x0]
- mov r0, #0x1
- lsl r0, r0, #0xc
- str r0, [sp, #0x4]
- mov r0, #0x0
- str r0, [sp, #0x8]
- ldr r0, _0201EEE4 ; =NNS_G3dGlb + 0x8
- str r0, [sp, #0xc]
- ldr r0, [r5, #0x0]
- ldr r1, [r5, #0x4]
- ldr r2, [r5, #0x8]
- ldr r3, [r5, #0xc]
- bl G3i_PerspectiveW_
- ldr r1, _0201EEE8 ; =NNS_G3dGlb + 0x80
- mov r0, #0x50
- ldr r2, [r1, #0x7c]
- add r5, #0x44
- bic r2, r0
- str r2, [r1, #0x7c]
- mov r1, #0x0
- ldr r0, _0201EEEC ; =UNK_02105BB8
- strb r1, [r5, #0x0]
- str r1, [r0, #0x0]
- add sp, #0x14
- pop {r3-r6, pc}
-_0201EE6C:
- ldr r4, [r5, #0x38]
- ldr r0, [r5, #0x0]
- ldr r1, [r5, #0x4]
- bl FX_Div
- asr r1, r0, #0x1f
- asr r3, r4, #0x1f
- add r2, r4, #0x0
- bl _ll_mul
- mov r2, #0x2
- mov r3, #0x0
- lsl r2, r2, #0xa
- add r2, r0, r2
- adc r1, r3
- lsr r4, r2, #0xc
- lsl r0, r1, #0x14
- orr r4, r0
- ldr r2, [r5, #0x8]
- asr r1, r4, #0x1f
- add r0, r4, #0x0
- asr r3, r2, #0x1f
- bl _ll_mul
- mov r6, #0x2
- mov r2, #0x0
- lsl r6, r6, #0xa
- add r3, r0, r6
- adc r1, r2
- lsl r0, r1, #0x14
- lsr r3, r3, #0xc
- orr r3, r0
- ldr r0, [r5, #0xc]
- neg r1, r4
- str r0, [sp, #0x0]
- ldr r0, [r5, #0x10]
- str r0, [sp, #0x4]
- lsl r0, r6, #0x1
- str r0, [sp, #0x8]
- str r2, [sp, #0xc]
- ldr r0, _0201EEE4 ; =NNS_G3dGlb + 0x8
- neg r2, r3
- str r0, [sp, #0x10]
- add r0, r4, #0x0
- bl G3i_OrthoW_
- ldr r1, _0201EEE8 ; =NNS_G3dGlb + 0x80
- mov r0, #0x50
- ldr r2, [r1, #0x7c]
- add r5, #0x44
- bic r2, r0
- str r2, [r1, #0x7c]
- mov r0, #0x1
- strb r0, [r5, #0x0]
- ldr r0, _0201EEEC ; =UNK_02105BB8
- mov r1, #0x0
- str r1, [r0, #0x0]
- add sp, #0x14
- pop {r3-r6, pc}
- nop
-_0201EEE4: .word NNS_G3dGlb + 0x8
-_0201EEE8: .word NNS_G3dGlb + 0x80
-_0201EEEC: .word UNK_02105BB8
-
- thumb_func_start FUN_0201EEF0
-FUN_0201EEF0: ; 0x0201EEF0
- add r2, r1, #0x0
- add r2, #0x46
- strh r0, [r2, #0x0]
- add r0, r1, #0x0
- add r0, #0x46
- ldrh r0, [r0, #0x0]
- ldr r3, _0201EF24 ; =FUN_0201EE2C
- asr r0, r0, #0x4
- lsl r2, r0, #0x2
- ldr r0, _0201EF28 ; =FX_SinCosTable_
- ldrsh r2, [r0, r2]
- str r2, [r1, #0x0]
- add r2, r1, #0x0
- add r2, #0x46
- ldrh r2, [r2, #0x0]
- asr r2, r2, #0x4
- lsl r2, r2, #0x1
- add r2, r2, #0x1
- lsl r2, r2, #0x1
- ldrsh r0, [r0, r2]
- str r0, [r1, #0x4]
- add r0, r1, #0x0
- add r0, #0x44
- ldrb r0, [r0, #0x0]
- bx r3
- nop
-_0201EF24: .word FUN_0201EE2C
-_0201EF28: .word FX_SinCosTable_
-
- thumb_func_start FUN_0201EF2C
-FUN_0201EF2C: ; 0x0201EF2C
- add r2, r1, #0x0
- add r2, #0x46
- ldrh r2, [r2, #0x0]
- ldr r3, _0201EF68 ; =FUN_0201EE2C
- add r2, r2, r0
- add r0, r1, #0x0
- add r0, #0x46
- strh r2, [r0, #0x0]
- add r0, r1, #0x0
- add r0, #0x46
- ldrh r0, [r0, #0x0]
- asr r0, r0, #0x4
- lsl r2, r0, #0x2
- ldr r0, _0201EF6C ; =FX_SinCosTable_
- ldrsh r2, [r0, r2]
- str r2, [r1, #0x0]
- add r2, r1, #0x0
- add r2, #0x46
- ldrh r2, [r2, #0x0]
- asr r2, r2, #0x4
- lsl r2, r2, #0x1
- add r2, r2, #0x1
- lsl r2, r2, #0x1
- ldrsh r0, [r0, r2]
- str r0, [r1, #0x4]
- add r0, r1, #0x0
- add r0, #0x44
- ldrb r0, [r0, #0x0]
- bx r3
- nop
-_0201EF68: .word FUN_0201EE2C
-_0201EF6C: .word FX_SinCosTable_
-
- thumb_func_start FUN_0201EF70
-FUN_0201EF70: ; 0x0201EF70
- push {r3-r5, lr}
- add r4, r1, #0x0
- add r5, r0, #0x0
- add r0, r4, #0x0
- add r0, #0x14
- add r1, r5, #0x0
- add r2, r0, #0x0
- bl VEC_Add
- add r4, #0x20
- add r0, r4, #0x0
- add r1, r5, #0x0
- add r2, r4, #0x0
- bl VEC_Add
- pop {r3-r5, pc}
-
- thumb_func_start FUN_0201EF90
-FUN_0201EF90: ; 0x0201EF90
- ldrh r2, [r0, #0x0]
- strh r2, [r1, #0x3c]
- ldrh r2, [r0, #0x2]
- strh r2, [r1, #0x3e]
- add r2, r1, #0x0
- ldrh r3, [r0, #0x4]
- add r2, #0x40
- strh r3, [r2, #0x0]
- ldrh r2, [r0, #0x6]
- add r0, r1, #0x0
- add r0, #0x42
- strh r2, [r0, #0x0]
- ldr r3, _0201EFB0 ; =FUN_0201E7D8
- add r0, r1, #0x0
- bx r3
- nop
-_0201EFB0: .word FUN_0201E7D8
-
- thumb_func_start FUN_0201EFB4
-FUN_0201EFB4: ; 0x0201EFB4
- ldrh r3, [r1, #0x3c]
- ldrh r2, [r0, #0x0]
- add r2, r3, r2
- strh r2, [r1, #0x3c]
- ldrh r3, [r1, #0x3e]
- ldrh r2, [r0, #0x2]
- add r2, r3, r2
- strh r2, [r1, #0x3e]
- add r2, r1, #0x0
- add r2, #0x40
- ldrh r2, [r2, #0x0]
- ldrh r0, [r0, #0x4]
- ldr r3, _0201EFDC ; =FUN_0201E8B8
- add r2, r2, r0
- add r0, r1, #0x0
- add r0, #0x40
- strh r2, [r0, #0x0]
- add r0, r1, #0x0
- bx r3
- nop
-_0201EFDC: .word FUN_0201E8B8
-
- thumb_func_start FUN_0201EFE0
-FUN_0201EFE0: ; 0x0201EFE0
- ldr r3, _0201EFE8 ; =FUN_0201E7D8
- str r0, [r1, #0x38]
- add r0, r1, #0x0
- bx r3
- .balign 4
-_0201EFE8: .word FUN_0201E7D8
-
- thumb_func_start FUN_0201EFEC
-FUN_0201EFEC: ; 0x0201EFEC
- push {r4, lr}
- add r3, r1, #0x0
- add r4, r0, #0x0
- add r2, r3, #0x0
- ldmia r4!, {r0-r1}
- add r2, #0x20
- stmia r2!, {r0-r1}
- ldr r0, [r4, #0x0]
- str r0, [r2, #0x0]
- add r0, r3, #0x0
- bl FUN_0201E7D8
- pop {r4, pc}
- .balign 4
-
- thumb_func_start FUN_0201F008
-FUN_0201F008: ; 0x0201F008
- add r0, #0x46
- ldrh r0, [r0, #0x0]
- bx lr
- .balign 4
-
- thumb_func_start FUN_0201F010
-FUN_0201F010: ; 0x0201F010
- ldr r0, [r0, #0x38]
- bx lr
-
- thumb_func_start FUN_0201F014
-FUN_0201F014: ; 0x0201F014
- ldrh r2, [r1, #0x3c]
- strh r2, [r0, #0x0]
- ldrh r2, [r1, #0x3e]
- strh r2, [r0, #0x2]
- add r2, r1, #0x0
- add r2, #0x40
- ldrh r2, [r2, #0x0]
- add r1, #0x42
- strh r2, [r0, #0x4]
- ldrh r1, [r1, #0x0]
- strh r1, [r0, #0x6]
- bx lr
-
- thumb_func_start FUN_0201F02C
-FUN_0201F02C: ; 0x0201F02C
- add r2, r1, #0x0
- add r2, #0x20
- add r3, r0, #0x0
- ldmia r2!, {r0-r1}
- stmia r3!, {r0-r1}
- ldr r0, [r2, #0x0]
- str r0, [r3, #0x0]
- bx lr
-
- thumb_func_start FUN_0201F03C
-FUN_0201F03C: ; 0x0201F03C
- add r2, r1, #0x0
- add r2, #0x14
- add r3, r0, #0x0
- ldmia r2!, {r0-r1}
- stmia r3!, {r0-r1}
- ldr r0, [r2, #0x0]
- str r0, [r3, #0x0]
- bx lr
-
- thumb_func_start FUN_0201F04C
-FUN_0201F04C: ; 0x0201F04C
- add r3, r0, #0x0
- add r2, r1, #0x0
- ldmia r3!, {r0-r1}
- add r2, #0x20
- stmia r2!, {r0-r1}
- ldr r0, [r3, #0x0]
- str r0, [r2, #0x0]
- bx lr
-
- thumb_func_start FUN_0201F05C
-FUN_0201F05C: ; 0x0201F05C
- add r3, r0, #0x0
- add r2, r1, #0x0
- ldmia r3!, {r0-r1}
- add r2, #0x14
- stmia r2!, {r0-r1}
- ldr r0, [r3, #0x0]
- str r0, [r2, #0x0]
- bx lr
diff --git a/arm9/asm/unk_02046030.s b/arm9/asm/unk_02046030.s
index 5e124ff5..7dad9af5 100644
--- a/arm9/asm/unk_02046030.s
+++ b/arm9/asm/unk_02046030.s
@@ -251,10 +251,10 @@ FUN_02046224: ; 0x02046224
add r4, r0, #0x0
ldr r0, _02046278 ; =0x000008C1
ldr r1, [r4, #0x20]
- bl FUN_0201EEF0
+ bl Camera_SetPerspectiveAngle
ldr r0, _0204627C ; =0x000F81B8
ldr r1, [r4, #0x20]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
ldr r0, _02046280 ; =0x0350523D
str r0, [sp, #0x8]
ldr r0, _02046284 ; =0x0015EDB7
@@ -263,7 +263,7 @@ FUN_02046224: ; 0x02046224
str r0, [sp, #0x10]
ldr r1, [r4, #0x20]
add r0, sp, #0x8
- bl FUN_0201F04C
+ bl Camera_SetLookAtCamTarget
ldr r1, _0204628C ; =0x00000823
add r0, sp, #0x0
strh r1, [r0, #0x0]
@@ -274,12 +274,12 @@ FUN_02046224: ; 0x02046224
strh r1, [r0, #0x4]
ldr r1, [r4, #0x20]
add r0, sp, #0x0
- bl FUN_0201EF90
+ bl Camera_SetAngle
mov r0, #0x3
ldr r1, _02046290 ; =0x0061C000
ldr r2, [r4, #0x20]
lsl r0, r0, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
add sp, #0x14
pop {r3-r4, pc}
nop
diff --git a/arm9/asm/unk_0204C1B4.s b/arm9/asm/unk_0204C1B4.s
index d330a96d..7ca0881c 100644
--- a/arm9/asm/unk_0204C1B4.s
+++ b/arm9/asm/unk_0204C1B4.s
@@ -1038,11 +1038,11 @@ _0204C9B4:
ldr r0, [r5, #0x38]
bl FUN_02055360
ldr r1, [r5, #0x20]
- bl FUN_0201EFEC
+ bl Camera_SetLookAtTargetAndRecalcPos
ldr r0, [r5, #0x38]
bl FUN_02055360
ldr r1, [r5, #0x20]
- bl FUN_0201EC68
+ bl Camera_SetFixedTarget
add sp, #0x10
pop {r3-r5, pc}
@@ -1104,10 +1104,10 @@ _0204CA48:
ldr r0, [r5, #0x38]
bl FUN_02055360
ldr r1, [r5, #0x20]
- bl FUN_0201EFEC
+ bl Camera_SetLookAtTargetAndRecalcPos
ldr r0, [r5, #0x38]
bl FUN_02055360
ldr r1, [r5, #0x20]
- bl FUN_0201EC68
+ bl Camera_SetFixedTarget
add sp, #0x10
pop {r4-r6, pc}
diff --git a/arm9/asm/unk_020607D4.s b/arm9/asm/unk_020607D4.s
index d3382d8c..d5b014bf 100644
--- a/arm9/asm/unk_020607D4.s
+++ b/arm9/asm/unk_020607D4.s
@@ -124,11 +124,11 @@ _02060892:
add r1, #0x24
bl FUN_02055350
ldr r0, [r5, #0x20]
- bl FUN_0201EC88
+ bl Camera_ClearFixedTarget
add r0, r4, #0x0
ldr r1, [r5, #0x20]
add r0, #0x24
- bl FUN_0201EC68
+ bl Camera_SetFixedTarget
mov r0, #0x0
ldr r1, [r4, #0x10]
mvn r0, r0
diff --git a/arm9/asm/unk_0206DE24.s b/arm9/asm/unk_0206DE24.s
index 46895ddb..d11acd85 100644
--- a/arm9/asm/unk_0206DE24.s
+++ b/arm9/asm/unk_0206DE24.s
@@ -228,7 +228,7 @@ FUN_0206DFB4: ; 0x0206DFB4
mov r1, #0xe1
lsl r0, r0, #0xc
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
_0206DFEC:
add r0, r4, #0x0
add sp, #0x8
diff --git a/arm9/asm/unk_0207EF6C.s b/arm9/asm/unk_0207EF6C.s
index 2d585edb..77550e14 100644
--- a/arm9/asm/unk_0207EF6C.s
+++ b/arm9/asm/unk_0207EF6C.s
@@ -173,7 +173,7 @@ FUN_0207F008: ; 0x0207F008
cmp r0, #0x4
bne _0207F046
bl FUN_020222AC
- bl FUN_0201EBA4
+ bl Camera_PushLookAtToNNSGlb
ldr r2, _0207F060 ; =0x04000440
mov r3, #0x0
add r1, r2, #0x0
@@ -213,7 +213,7 @@ FUN_0207F068: ; 0x0207F068
mov r0, #0xad
lsl r0, r0, #0x2
ldr r0, [r4, r0]
- bl FUN_0201EB70
+ bl Camera_Free
mov r0, #0x2d
lsl r0, r0, #0x4
ldr r0, [r4, r0]
@@ -247,7 +247,7 @@ FUN_0207F098: ; 0x0207F098
strh r0, [r1, #0x4]
strh r0, [r1, #0x6]
mov r0, #0x13
- bl FUN_0201EB64
+ bl Camera_Alloc
mov r1, #0xad
lsl r1, r1, #0x2
str r0, [r4, r1]
@@ -259,22 +259,22 @@ FUN_0207F098: ; 0x0207F098
ldr r3, _0207F104 ; =0x000005C1
add r0, sp, #0x10
add r2, sp, #0x8
- bl FUN_0201ED10
+ bl Camera_InitWithPosAndAngle
mov r2, #0xad
lsl r2, r2, #0x2
mov r1, #0x19
ldr r2, [r4, r2]
mov r0, #0x0
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
mov r0, #0xad
lsl r0, r0, #0x2
ldr r0, [r4, r0]
- bl FUN_0201EC88
+ bl Camera_ClearFixedTarget
mov r0, #0xad
lsl r0, r0, #0x2
ldr r0, [r4, r0]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
add sp, #0x1c
pop {r3-r4, pc}
nop
diff --git a/arm9/asm/unk_02086414.s b/arm9/asm/unk_02086414.s
index e041eec2..f5e751fa 100644
--- a/arm9/asm/unk_02086414.s
+++ b/arm9/asm/unk_02086414.s
@@ -897,7 +897,7 @@ FUN_02086A80: ; 0x02086A80
mov r1, #0xe1
lsl r0, r0, #0xc
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
_02086AB8:
add r0, r4, #0x0
add sp, #0x8
diff --git a/arm9/global.inc b/arm9/global.inc
index d638e601..db33a314 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -1187,7 +1187,7 @@
.extern FUN_0201C78C
.extern FUN_0201C7A0
.extern FUN_0201C7A8
-.extern FUN_0201C7B0
+.extern CalcAngleBetweenVecs
.extern FUN_0201C878
.extern FUN_0201CAA8
.extern FUN_0201CB20
@@ -1239,36 +1239,36 @@
.extern GX_BothDispOn
.extern GX_SwapDisplay
.extern GX_GetEngineALayers
-.extern FUN_0201EABC
-.extern FUN_0201EB48
-.extern FUN_0201EB64
-.extern FUN_0201EB70
-.extern FUN_0201EB78
-.extern FUN_0201EB8C
-.extern FUN_0201EB98
-.extern FUN_0201EBA4
-.extern FUN_0201EC58
-.extern FUN_0201EC68
-.extern FUN_0201EC88
-.extern FUN_0201EC94
-.extern FUN_0201ECA8
-.extern FUN_0201ED10
-.extern FUN_0201ED5C
-.extern FUN_0201EE2C
-.extern FUN_0201EEF0
-.extern FUN_0201EF2C
-.extern FUN_0201EF70
-.extern FUN_0201EF90
-.extern FUN_0201EFB4
-.extern FUN_0201EFE0
-.extern FUN_0201EFEC
-.extern FUN_0201F008
-.extern FUN_0201F010
-.extern FUN_0201F014
-.extern FUN_0201F02C
-.extern FUN_0201F03C
-.extern FUN_0201F04C
-.extern FUN_0201F05C
+.extern Camera_AllocHistory
+.extern Camera_FreeHistory
+.extern Camera_Alloc
+.extern Camera_Free
+.extern Camera_Copy
+.extern Camera_SetWorkPtr
+.extern Camera_UnsetWorkPtr
+.extern Camera_PushLookAtToNNSGlb
+.extern Camera_SetLookAtCamUp
+.extern Camera_SetFixedTarget
+.extern Camera_ClearFixedTarget
+.extern Camera_SetPerspectiveClippingPlane
+.extern Camera_InitWithTargetAndAngle
+.extern Camera_InitWithPosAndAngle
+.extern Camera_InitWithPosAndTarget
+.extern Camera_ApplyPerspectiveType
+.extern Camera_SetPerspectiveAngle
+.extern Camera_AdjustPerspectiveAngle
+.extern Camera_OffsetLookAtPosAndTarget
+.extern Camera_SetAngle
+.extern Camera_AdjustAngle
+.extern Camera_SetDistance
+.extern Camera_SetLookAtTargetAndRecalcPos
+.extern Camera_GetPerspectiveAngle
+.extern Camera_GetDistance
+.extern Camera_GetAngle
+.extern Camera_GetLookAtCamTarget
+.extern Camera_GetLookAtCamPos
+.extern Camera_SetLookAtCamTarget
+.extern Camera_SetLookAtCamPos
.extern FUN_0201F100
.extern FUN_0201F140
.extern FUN_0201F178
@@ -8272,7 +8272,7 @@
.extern UNK_020FF368
.extern UNK_020FF3D4
.extern FX_SinCosTable_
-.extern UNK_02105BB8
+.extern g3dDepthBufferingMode
.extern NNS_GfdDefaultFuncFreeTexVram
.extern NNS_GfdDefaultFuncFreePlttVram
.extern UnloadOverlayByID
diff --git a/arm9/lib/NitroSDK/include/GX_g3_util.h b/arm9/lib/NitroSDK/include/GX_g3_util.h
index a9bc4c17..8b66aee7 100644
--- a/arm9/lib/NitroSDK/include/GX_g3_util.h
+++ b/arm9/lib/NitroSDK/include/GX_g3_util.h
@@ -1,9 +1,11 @@
#ifndef GUARD_GX_G3_UTIL_H
#define GUARD_GX_G3_UTIL_H
+#include "nitro/FX_types.h"
+
void G3i_PerspectiveW_(fx32 fovsin, fx32 fovcos, fx32 ratio, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx);
void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 near, fx32 far, fx32 scale, u32 load, struct Mtx44 *mtx);
-void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx);
+void G3i_LookAt_(const struct Vecx32 *a, const struct Vecx32 *b, const struct Vecx32 *c, BOOL load, struct Mtx43 *mtx);
void G3_RotX(fx32 sinphi, fx32 cosphi);
void G3_RotY(fx32 sinphi, fx32 cosphi);
void G3_RotZ(fx32 sinphi, fx32 cosphi);
diff --git a/arm9/lib/NitroSDK/include/fx.h b/arm9/lib/NitroSDK/include/fx.h
index bdf49037..59c759ab 100644
--- a/arm9/lib/NitroSDK/include/fx.h
+++ b/arm9/lib/NitroSDK/include/fx.h
@@ -1,109 +1,8 @@
#ifndef GUARD_FX_H
#define GUARD_FX_H
-#include "nitro/types.h"
-
-typedef s16 fx16;
-typedef s32 fx32;
-typedef s64 fx64;
-typedef s64 fx64c;
-
-#define FX16_INT_MASK 0xF000
-#define FX16_INT_ABS_MASK 0x7000
-#define FX16_FRAC_MASK 0x0FFF
-#define FX16_INT_SHIFT 0xC
-
-#define FX32_INT_MASK 0xFFFFF000
-#define FX32_INT_ABS_MASK 0x7FFFF000
-#define FX32_FRAC_MASK 0x00000FFF
-#define FX32_INT_SHIFT 0xC
-
-#define FX64_INT_MASK 0xFFFFFFFFFFFFF000
-#define FX64_INT_ABS_MASK 0x7FFFFFFFFFFFF000
-#define FX64_FRAC_MASK 0x0000000000000FFF
-#define FX64_INT_SHIFT 0xC
-
-#define FX64C_INT_MASK 0xFFFFFFFF00000000
-#define FX64C_INT_ABS_MASK 0x7FFFFFFF00000000
-#define FX64C_FRAC_MASK 0x00000000FFFFFFFF
-#define FX64C_INT_SHIFT 0x20
-
-#define FX_INT(TYPE, x) (((x) & TYPE ## _INT_MASK) >> TYPE ## _INT_SHIFT)
-#define FX_INT_ABS(TYPE, x) (((x) & TYPE ## _INT_ABS_MASK) >> TYPE ## _INT_SHIFT)
-#define FX_FRAC(TYPE, x) ((x) & TYPE ## _FRAC_MASK)
-
-#define FX16_INT(x) FX_INT(FX16, x)
-#define FX16_INT_ABS(x) FX_INT_ABS(FX16, x)
-#define FX16_FRAC(x) FX_FRAC(FX16, x)
-
-#define FX32_INT(x) FX_INT(FX32, x)
-#define FX32_INT_ABS(x) FX_INT_ABS(FX32, x)
-#define FX32_FRAC(x) FX_FRAC(FX32, x)
-
-#define FX64_INT(x) FX_INT(FX64, x)
-#define FX64_INT_ABS(x) FX_INT_ABS(FX64, x)
-#define FX64_FRAC(x) FX_FRAC(FX64, x)
-
-#define FX64C_INT(x) FX_INT(FX64C, x)
-#define FX64C_INT_ABS(x) FX_INT_ABS(FX64C, x)
-#define FX64C_FRAC(x) FX_FRAC(FX64C, x)
-
-//TODO: clean up these macros
-#define FX32_MUL_NO_ROUND(a, b) ((fx32)(((fx64)(a) * (b)) >> FX32_INT_SHIFT))
-#define FX32_MUL(a, b) ((fx32)((((fx64)(a) * (b) + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)))
-#define FX32_MUL_ADD_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) + (fx64)c * d) >> FX32_INT_SHIFT))
-//the extra term here is for rounding
-#define FX32_MUL_SUB_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) - (fx64)c * d + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT))
-
-#define FX_MUL_FX32_FX64C(a, b) ((fx32)((((a) * (b) + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT)))
-
-#define FX_FX16_TO_F32(x) ((f32)((x) / (f32)(1 << FX16_SHIFT)))
-#define FX_F32_TO_FX16(x) ((fx16)(((x) > 0) ? \
- (fx16)((x) * (1 << FX16_INT_SHIFT) + 0.5f ) : \
- (fx16)((x) * (1 << FX16_INT_SHIFT) - 0.5f )))
-#define FX_F32_TO_FX32(x) ((fx32)(((x) > 0) ? \
- (fx32)((x) * (1 << FX32_INT_SHIFT) + 0.5f ) : \
- (fx32)((x) * (1 << FX32_INT_SHIFT) - 0.5f )))
-#define FX16_CONST(x) FX_F32_TO_FX16(x)
-#define FX32_CONST(x) FX_F32_TO_FX32(x)
-
-#define FX16_ONE ((fx16)0x1000)
-#define FX32_ONE ((fx32)0x00001000L)
-
-struct Vecx32
-{
- fx32 x;
- fx32 y;
- fx32 z;
-};
-
-struct Vecx16
-{
- fx16 x;
- fx16 y;
- fx16 z;
-};
-
-//Matrices are indexed as [column][row]
-struct Mtx44
-{
- fx32 _[16];
-};
-
-struct Mtx43
-{
- fx32 _[12];
-};
-
-struct Mtx33
-{
- fx32 _[9];
-};
-
-struct Mtx22
-{
- fx32 _[4];
-};
+#include "nitro/FX_types.h"
+#include "GX_g3_util.h"
//FX
void FX_Init();
@@ -114,15 +13,15 @@ u16 FX_Atan(fx32 x);
u16 FX_Atan2(fx32 x, fx32 y);
//Vec
-void VEC_Add(struct Vecx32 *x, struct Vecx32 *y, struct Vecx32 *dst);
-void VEC_Subtract(struct Vecx32 *x, struct Vecx32 *y, struct Vecx32 *dst);
+void VEC_Add(const struct Vecx32 *a, const struct Vecx32 *b, struct Vecx32 *dst);
+void VEC_Subtract(const struct Vecx32 *a, const struct Vecx32 *b, struct Vecx32 *dst);
void VEC_Fx16Add(struct Vecx16 *x, struct Vecx16 *y, struct Vecx16 *dst);
-fx32 VEC_DotProduct(struct Vecx32 *x, struct Vecx32 *y);
+fx32 VEC_DotProduct(const struct Vecx32 *a, const struct Vecx32 *b);
fx32 VEC_Fx16DotProduct(struct Vecx16 *a, struct Vecx16 *b);
-void VEC_CrossProduct(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst);
+void VEC_CrossProduct(const struct Vecx32 *a, const struct Vecx32 *b, struct Vecx32 *dst);
void VEC_Fx16CrossProduct(struct Vecx16 *a, struct Vecx16 *b, struct Vecx16 *dst);
fx32 VEC_Mag(struct Vecx32 *a);
-void VEC_Normalize(struct Vecx32 *a, struct Vecx32 *dst);
+void VEC_Normalize(const struct Vecx32 *a, struct Vecx32 *dst);
void VEC_Fx16Normalize(struct Vecx16 *a, struct Vecx16 *dst);
void VEC_MultAdd(fx32 factor, struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst);
@@ -174,4 +73,51 @@ void MTX_ScaleApply22(struct Mtx22 *mtx, struct Mtx22 *dst, fx32 x, fx32 y);
void MTX_Identity22_(struct Mtx22 *mtx);
void MTX_Rot22_(struct Mtx22 *mtx, fx32 sinphi, fx32 cosphi);
+// Trig
+extern const fx16 FX_SinCosTable_[];
+
+static inline fx16 FX_SinIdx(int idx)
+{
+ return FX_SinCosTable_[((idx >> 4) << 1)];
+}
+
+static inline fx16 FX_CosIdx(int idx)
+{
+ return FX_SinCosTable_[((idx >> 4) << 1) + 1];
+}
+
+static inline fx32 FX32_CAST(s64 res)
+{
+ return (fx32)res;
+}
+
+static inline fx32 FX_MulInline(fx32 v1, fx32 v2)
+{
+ return FX32_CAST(((s64)v1 * v2 + 0x800LL) >> FX32_INT_SHIFT);
+}
+
+#define FX_Mul(v1, v2) FX_MulInline(v1, v2)
+
+static inline void VEC_Set(struct Vecx32 * vec, fx32 x, fx32 y, fx32 z)
+{
+ vec->x = x;
+ vec->y = y;
+ vec->z = z;
+}
+
+static inline void MTX_LookAt(const VecFx32 * camPos, const VecFx32 * camUp, const VecFx32 * target, MtxFx43 * mtx)
+{
+ G3i_LookAt_(camPos, camUp, target, FALSE, mtx);
+}
+
+static inline void MTX_Perspective(fx32 fovySin, fx32 fovyCos, fx32 aspect, fx32 n, fx32 f, MtxFx44 * mtx)
+{
+ G3i_PerspectiveW_(fovySin, fovyCos, aspect, n, f, FX32_ONE, FALSE, mtx);
+}
+
+static inline void MTX_Ortho(fx32 t, fx32 b, fx32 l, fx32 r, fx32 n, fx32 f, MtxFx44 * mtx)
+{
+ G3i_OrthoW_(t, b, l, r, n, f, FX32_ONE, FALSE, mtx);
+}
+
#endif //GUARD_FX_H
diff --git a/arm9/lib/NitroSDK/src/FX_vec.c b/arm9/lib/NitroSDK/src/FX_vec.c
index 005872ac..18d0939f 100644
--- a/arm9/lib/NitroSDK/src/FX_vec.c
+++ b/arm9/lib/NitroSDK/src/FX_vec.c
@@ -1,15 +1,14 @@
-#include "fx.h"
-
-#include "global.h"
+#include "function_target.h"
#include "registers.h"
+#include "fx.h"
-ARM_FUNC void VEC_Add(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){
+ARM_FUNC void VEC_Add(const struct Vecx32 *a, const struct Vecx32 *b, struct Vecx32 *dst){
dst->x = a->x + b->x;
dst->y = a->y + b->y;
dst->z = a->z + b->z;
}
-ARM_FUNC void VEC_Subtract(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){
+ARM_FUNC void VEC_Subtract(const struct Vecx32 *a, const struct Vecx32 *b, struct Vecx32 *dst){
dst->x = a->x - b->x;
dst->y = a->y - b->y;
dst->z = a->z - b->z;
@@ -21,7 +20,7 @@ ARM_FUNC void VEC_Fx16Add(struct Vecx16 *a, struct Vecx16 *b, struct Vecx16 *dst
dst->z = (s16)(a->z + b->z);
}
-ARM_FUNC fx32 VEC_DotProduct(struct Vecx32 *a, struct Vecx32 *b){
+ARM_FUNC fx32 VEC_DotProduct(const struct Vecx32 *a, const struct Vecx32 *b){
return (fx32)(((fx64)a->x * b->x + (fx64)a->y * b->y + (fx64)a->z * b->z + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT);
}
@@ -32,7 +31,7 @@ ARM_FUNC fx32 VEC_Fx16DotProduct(struct Vecx16 *a, struct Vecx16 *b){
return (fx32)(((fx64)temp1 + temp2) >> FX64_INT_SHIFT);
}
-ARM_FUNC void VEC_CrossProduct(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *dst){
+ARM_FUNC void VEC_CrossProduct(const struct Vecx32 *a, const struct Vecx32 *b, struct Vecx32 *dst){
fx32 x, y, z;
x = (fx32)(((fx64)a->y * b->z - (fx64)a->z * b->y + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT);
y = (fx32)(((fx64)a->z * b->x - (fx64)a->x * b->z + (1 << (FX64_INT_SHIFT - 1))) >> FX64_INT_SHIFT);
@@ -62,7 +61,7 @@ ARM_FUNC fx32 VEC_Mag(struct Vecx32 *a){
return ((fx32)reg_CP_SQRT_RESULT + 1) >> 1;
}
-ARM_FUNC void VEC_Normalize(struct Vecx32 *a, struct Vecx32 *dst){
+ARM_FUNC void VEC_Normalize(const struct Vecx32 *a, struct Vecx32 *dst){
fx64 l2 = (fx64)a->x * a->x;
l2 += (fx64)a->y * a->y;
l2 += (fx64)a->z * a->z;
diff --git a/arm9/lib/NitroSDK/src/GX_g3_util.c b/arm9/lib/NitroSDK/src/GX_g3_util.c
index e647f1c7..b4fdd0cc 100644
--- a/arm9/lib/NitroSDK/src/GX_g3_util.c
+++ b/arm9/lib/NitroSDK/src/GX_g3_util.c
@@ -165,7 +165,7 @@ ARM_FUNC void G3i_OrthoW_(fx32 top, fx32 bottom, fx32 left, fx32 right, fx32 nea
}
}
-ARM_FUNC void G3i_LookAt_(struct Vecx32 *a, struct Vecx32 *b, struct Vecx32 *c, u32 load, struct Mtx44 *mtx){
+ARM_FUNC void G3i_LookAt_(const struct Vecx32 *a, const struct Vecx32 *b, const struct Vecx32 *c, BOOL load, struct Mtx43 *mtx){
struct Vecx32 temp, temp1, temp2;
fx32 c1, c2, c3;
vu32 *reg_ptr;
diff --git a/arm9/modules/05/asm/mod05_021D74E0.s b/arm9/modules/05/asm/mod05_021D74E0.s
index 1aad5cc7..52073cac 100644
--- a/arm9/modules/05/asm/mod05_021D74E0.s
+++ b/arm9/modules/05/asm/mod05_021D74E0.s
@@ -815,7 +815,7 @@ MOD05_021D7BE0: ; 0x021D7BE0
sub sp, #0x80
add r4, r0, #0
bl FUN_020222AC
- bl FUN_0201EBA4
+ bl Camera_PushLookAtToNNSGlb
add r0, r4, #0
bl FUN_0205E0A8
ldr r0, [r4, #0x24]
@@ -885,7 +885,7 @@ _021D7C1C:
ldr r0, [r4, #4]
ldr r0, [r0, #4]
bl MOD05_021D7FD0
- ldr r1, _021D7CA0 ; =UNK_02105BB8
+ ldr r1, _021D7CA0 ; =g3dDepthBufferingMode
mov r0, #0
ldr r1, [r1]
bl FUN_020222B4
@@ -894,7 +894,7 @@ _021D7C1C:
nop
_021D7C98: .word NNS_G3dGlb + 0x8
_021D7C9C: .word NNS_G3dGlb + 0x80
-_021D7CA0: .word UNK_02105BB8
+_021D7CA0: .word g3dDepthBufferingMode
thumb_func_start MOD05_021D7CA4
MOD05_021D7CA4: ; 0x021D7CA4
@@ -943,7 +943,7 @@ MOD05_021D7CF0: ; 0x021D7CF0
mov r0, #1
mov r1, #0
bl GX_EngineAToggleLayers
- ldr r0, _021D7D44 ; =UNK_02105BB8
+ ldr r0, _021D7D44 ; =g3dDepthBufferingMode
ldr r0, [r0]
lsl r1, r0, #1
ldr r0, _021D7D48 ; =0x04000540
@@ -973,7 +973,7 @@ _021D7D36:
str r0, [r5, #0x30]
pop {r3, r4, r5, pc}
nop
-_021D7D44: .word UNK_02105BB8
+_021D7D44: .word g3dDepthBufferingMode
_021D7D48: .word 0x04000540
thumb_func_start MOD05_021D7D4C
diff --git a/arm9/modules/05/asm/mod05_021DA5B8.s b/arm9/modules/05/asm/mod05_021DA5B8.s
index eb8560b0..fb2b253a 100644
--- a/arm9/modules/05/asm/mod05_021DA5B8.s
+++ b/arm9/modules/05/asm/mod05_021DA5B8.s
@@ -132,7 +132,7 @@ _021DA69A:
cmp r6, #0x4b
beq _021DA6B2
ldr r0, [r5, #0x20]
- bl FUN_0201EC88
+ bl Camera_ClearFixedTarget
mov r0, #1
str r0, [r4, #0x20]
_021DA6B2:
@@ -360,14 +360,14 @@ _021DA864:
pop {r4, r5, r6, r7, pc}
_021DA878:
ldr r0, [r5, #0x20]
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
strh r0, [r4, #0x24]
ldr r0, [sp, #0x1c]
cmp r0, #0x4b
beq _021DA88E
ldr r0, _021DA9D8 ; =0x0000FFA0
ldr r1, [r5, #0x20]
- bl FUN_0201EF2C
+ bl Camera_AdjustPerspectiveAngle
_021DA88E:
ldr r0, [r4]
add r0, r0, #1
@@ -498,7 +498,7 @@ _021DA980:
cmp r0, #0
beq _021DA9BE
ldr r0, [r5, #0x20]
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
ldrh r1, [r4, #0x24]
cmp r1, r0
bne _021DA9BE
@@ -555,7 +555,7 @@ MOD05_021DA9E8: ; 0x021DA9E8
lsr r4, r0, #0x18
_021DAA08:
add r0, r6, #0
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
sub r0, r0, r4
lsl r0, r0, #0x10
lsr r0, r0, #0x10
@@ -564,7 +564,7 @@ _021DAA08:
lsl r0, r0, #0x10
lsr r0, r0, #0x10
add r1, r6, #0
- bl FUN_0201EF2C
+ bl Camera_AdjustPerspectiveAngle
_021DAA22:
ldrb r0, [r5]
add r0, r0, #1
@@ -594,14 +594,14 @@ _021DAA4A:
mov r4, #0x10
_021DAA4C:
add r0, r6, #0
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
add r0, r0, r4
lsl r0, r0, #0x10
lsr r0, r0, #0x10
beq _021DAA62
add r0, r4, #0
add r1, r6, #0
- bl FUN_0201EF2C
+ bl Camera_AdjustPerspectiveAngle
_021DAA62:
ldrb r0, [r5]
add r0, r0, #1
@@ -1391,11 +1391,11 @@ _021DB096:
str r0, [r4, #8]
strb r0, [r4, #4]
ldr r0, [r5, #0x20]
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
strh r0, [r4, #0xc]
ldr r0, _021DB13C ; =0x0000FFA0
ldr r1, [r5, #0x20]
- bl FUN_0201EF2C
+ bl Camera_AdjustPerspectiveAngle
mov r0, #6
str r0, [sp]
mov r1, #1
@@ -1440,7 +1440,7 @@ _021DB106:
cmp r0, #0
beq _021DB126
ldr r0, [r5, #0x20]
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
ldrh r1, [r4, #0xc]
cmp r1, r0
bne _021DB126
@@ -1644,11 +1644,11 @@ _021DB2AA:
str r0, [r4, #8]
strb r0, [r4, #4]
ldr r0, [r5, #0x20]
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
strh r0, [r4, #0xc]
ldr r0, _021DB37C ; =0x0000FFA0
ldr r1, [r5, #0x20]
- bl FUN_0201EF2C
+ bl Camera_AdjustPerspectiveAngle
cmp r7, #3
bhi _021DB2EA
add r0, r7, r7
@@ -1722,7 +1722,7 @@ _021DB348:
cmp r0, #0
beq _021DB368
ldr r0, [r5, #0x20]
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
ldrh r1, [r4, #0xc]
cmp r1, r0
bne _021DB368
diff --git a/arm9/modules/05/asm/mod05_021DBD84.s b/arm9/modules/05/asm/mod05_021DBD84.s
index 9a6cb847..8919e775 100644
--- a/arm9/modules/05/asm/mod05_021DBD84.s
+++ b/arm9/modules/05/asm/mod05_021DBD84.s
@@ -19,7 +19,7 @@ MOD05_021DBD84: ; 0x021DBD84
bl GF_AssertFail
_021DBD9E:
mov r0, #4
- bl FUN_0201EB64
+ bl Camera_Alloc
str r0, [r5, #0x20]
ldrb r0, [r4, #0xc]
add r2, r4, #4
@@ -31,13 +31,13 @@ _021DBD9E:
ldrh r3, [r4, #0xe]
ldr r1, [r4]
add r0, r7, #0
- bl FUN_0201ECA8
+ bl Camera_InitWithTargetAndAngle
ldr r0, [r5, #0x20]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
ldr r0, [r4, #0x10]
ldr r1, [r4, #0x14]
ldr r2, [r5, #0x20]
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
cmp r6, #0
beq _021DBDE2
ldr r0, [r5, #0x20]
@@ -46,7 +46,7 @@ _021DBD9E:
mov r0, #7
mov r2, #2
mov r3, #4
- bl FUN_0201EABC
+ bl Camera_AllocHistory
_021DBDE2:
add sp, #0xc
pop {r4, r5, r6, r7, pc}
@@ -57,11 +57,11 @@ _021DBDE8: .word UNK05_021F6608
MOD05_021DBDEC: ; 0x021DBDEC
push {r4, lr}
add r4, r0, #0
- bl FUN_0201EB98
+ bl Camera_UnsetWorkPtr
ldr r0, [r4, #0x20]
- bl FUN_0201EB48
+ bl Camera_FreeHistory
ldr r0, [r4, #0x20]
- bl FUN_0201EB70
+ bl Camera_Free
pop {r4, pc}
.balign 4, 0
diff --git a/arm9/modules/05/asm/mod05_021DC0B8.s b/arm9/modules/05/asm/mod05_021DC0B8.s
index 0e77cb4b..a2550744 100644
--- a/arm9/modules/05/asm/mod05_021DC0B8.s
+++ b/arm9/modules/05/asm/mod05_021DC0B8.s
@@ -2261,14 +2261,14 @@ MOD05_021DD180: ; 0x021DD180
lsl r0, r0, #2
ldr r0, [r1, r0]
ldr r0, [r0, #0x20]
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
add r6, r0, #0
mov r0, #0x41
ldr r1, [r5]
lsl r0, r0, #2
ldr r0, [r1, r0]
ldr r0, [r0, #0x20]
- bl FUN_0201F010
+ bl Camera_GetDistance
add r1, r0, #0
add r0, sp, #0xc
str r0, [sp]
diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s
index 36143bb3..3cc1b9fe 100644
--- a/arm9/modules/05/asm/module_05.s
+++ b/arm9/modules/05/asm/module_05.s
@@ -419,7 +419,7 @@ _021E8952:
ldr r0, [r4, #0x10]
ldr r0, [r0, #0x20]
str r0, [r5]
- bl FUN_0201F010
+ bl Camera_GetDistance
mov r2, #0x32
add r1, r0, #0
mov r0, #6
@@ -438,7 +438,7 @@ _021E899C:
add r6, r0, #0
ldr r0, [r5, #4]
ldr r1, [r5]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
cmp r6, #1
bne _021E8A56
ldr r0, [r4]
@@ -460,7 +460,7 @@ _021E899C:
ldr r0, [r4, #0x10]
ldr r0, [r0, #0x20]
str r0, [r5]
- bl FUN_0201F010
+ bl Camera_GetDistance
mov r2, #0x32
add r1, r0, #0
mov r0, #6
@@ -478,7 +478,7 @@ _021E89F4:
add r6, r0, #0
ldr r0, [r5, #4]
ldr r1, [r5]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
cmp r6, #1
bne _021E8A56
add r0, r4, #0
@@ -601,7 +601,7 @@ _021E8AD2:
ldr r0, [r4, #0x10]
ldr r0, [r0, #0x20]
str r0, [r5]
- bl FUN_0201F010
+ bl Camera_GetDistance
mov r2, #0x32
add r1, r0, #0
mov r0, #6
@@ -620,7 +620,7 @@ _021E8B1C:
add r6, r0, #0
ldr r0, [r5, #4]
ldr r1, [r5]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
cmp r6, #1
bne _021E8BD6
ldr r0, [r4]
@@ -642,7 +642,7 @@ _021E8B1C:
ldr r0, [r4, #0x10]
ldr r0, [r0, #0x20]
str r0, [r5]
- bl FUN_0201F010
+ bl Camera_GetDistance
mov r2, #0x1e
add r1, r0, #0
mov r0, #6
@@ -660,7 +660,7 @@ _021E8B74:
add r6, r0, #0
ldr r0, [r5, #4]
ldr r1, [r5]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
cmp r6, #1
bne _021E8BD6
add r0, r4, #0
@@ -1214,7 +1214,7 @@ _021E8F92:
ldr r0, [r4, #0x10]
ldr r0, [r0, #0x20]
str r0, [r5]
- bl FUN_0201F010
+ bl Camera_GetDistance
mov r2, #0x19
add r1, r0, #0
mov r0, #0xc
@@ -1234,7 +1234,7 @@ _021E8FDC:
bl MOD05_021E36A4
ldr r0, [r5, #4]
ldr r1, [r5]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
bl FUN_0200E308
cmp r0, #0
beq _021E9026
@@ -1349,7 +1349,7 @@ _021E90A2:
ldr r0, [r4, #0x10]
ldr r0, [r0, #0x20]
str r0, [r5]
- bl FUN_0201F010
+ bl Camera_GetDistance
mov r2, #0x32
add r1, r0, #0
mov r0, #0xc
@@ -1369,7 +1369,7 @@ _021E90EC:
bl MOD05_021E36A4
ldr r0, [r5, #4]
ldr r1, [r5]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
bl FUN_0200E308
cmp r0, #0
beq _021E9136
@@ -1669,7 +1669,7 @@ _021E931A:
mov r0, #7
lsl r0, r0, #6
ldr r0, [r4, r0]
- bl FUN_0201F010
+ bl Camera_GetDistance
add r1, r0, #0
mov r0, #6
str r0, [sp]
@@ -1748,7 +1748,7 @@ _021E93A6:
ldr r0, [r4, r1]
sub r1, r1, #4
ldr r1, [r4, r1]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
add r0, r7, #0
bl MOD05_021E35AC
cmp r0, #0
@@ -2079,7 +2079,7 @@ _021E96C8:
mov r0, #0x69
lsl r0, r0, #2
ldr r0, [r4, r0]
- bl FUN_0201F010
+ bl Camera_GetDistance
add r1, r0, #0
mov r0, #8
str r0, [sp]
@@ -2105,7 +2105,7 @@ _021E9702:
ldr r0, [r4, r1]
sub r1, r1, #4
ldr r1, [r4, r1]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
add r0, r6, #0
bl MOD05_021E35AC
cmp r0, #1
@@ -2483,7 +2483,7 @@ _021E9A12:
mov r0, #0x72
lsl r0, r0, #2
ldr r0, [r4, r0]
- bl FUN_0201F010
+ bl Camera_GetDistance
add r1, r0, #0
mov r0, #8
str r0, [sp]
@@ -2547,7 +2547,7 @@ _021E9A8E:
ldr r0, [r4, r1]
sub r1, r1, #4
ldr r1, [r4, r1]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
ldr r0, [sp, #0x18]
cmp r0, #1
bne _021E9B2A
@@ -2853,7 +2853,7 @@ _021E9D34:
_021E9D36:
sub r0, #0x1c
ldr r0, [r4, r0]
- bl FUN_0201F010
+ bl Camera_GetDistance
add r1, r0, #0
mov r0, #0x10
str r0, [sp]
@@ -3088,7 +3088,7 @@ _021E9F1C:
ldr r0, [r4, r1]
sub r1, r1, #4
ldr r1, [r4, r1]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
mov r1, #2
lsl r1, r1, #8
ldr r0, [r4, r1]
@@ -3519,7 +3519,7 @@ _021EA2C2:
mov r0, #0x1d
lsl r0, r0, #4
ldr r0, [r4, r0]
- bl FUN_0201F010
+ bl Camera_GetDistance
add r1, r0, #0
mov r0, #8
str r0, [sp]
@@ -3557,7 +3557,7 @@ _021EA310:
ldr r0, [r4, r1]
sub r1, r1, #4
ldr r1, [r4, r1]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
bl FUN_0200E308
cmp r0, #0
beq _021EA382
@@ -4002,7 +4002,7 @@ _021EA6B4:
mov r0, #0x82
lsl r0, r0, #2
ldr r0, [r4, r0]
- bl FUN_0201F010
+ bl Camera_GetDistance
add r1, r0, #0
mov r0, #0x40
str r0, [sp]
@@ -4040,7 +4040,7 @@ _021EA6FA:
ldr r0, [r4, r1]
sub r1, r1, #4
ldr r1, [r4, r1]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
cmp r5, #1
bne _021EA7DE
ldr r0, [sp, #0x18]
@@ -5612,10 +5612,10 @@ MOD05_021EB414: ; 0x021EB414
add r5, r0, #0
ldrh r0, [r4, #8]
ldr r1, [r5, #0x20]
- bl FUN_0201EEF0
+ bl Camera_SetPerspectiveAngle
ldr r0, [r4]
ldr r1, [r5, #0x20]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
ldrh r1, [r4, #4]
add r0, sp, #0
strh r1, [r0]
@@ -5625,7 +5625,7 @@ MOD05_021EB414: ; 0x021EB414
strh r1, [r0, #4]
ldr r1, [r5, #0x20]
add r0, sp, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
add sp, #8
pop {r3, r4, r5, pc}
.balign 4, 0
@@ -5891,7 +5891,7 @@ _021EB640:
str r0, [r5]
ldr r0, [r4, #0x10]
ldr r0, [r0, #0x20]
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
mov r2, #1
add r1, r0, #0
add r5, #8
@@ -5915,7 +5915,7 @@ _021EB66E:
lsl r0, r0, #0x10
ldr r1, [r1, #0x20]
lsr r0, r0, #0x10
- bl FUN_0201EEF0
+ bl Camera_SetPerspectiveAngle
cmp r6, #1
bne _021EB754
ldr r0, [r4]
@@ -5932,7 +5932,7 @@ _021EB698:
bpl _021EB754
ldr r0, [r4, #0x10]
ldr r0, [r0, #0x20]
- bl FUN_0201F010
+ bl Camera_GetDistance
mov r3, #8
str r3, [sp]
ldr r2, _021EB758 ; =0x0092E000
@@ -5955,7 +5955,7 @@ _021EB6C6:
add r6, r0, #0
ldr r0, [r5, #0x1c]
ldr r1, [r1, #0x20]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
cmp r6, #1
bne _021EB754
ldr r0, [r4]
@@ -7284,7 +7284,7 @@ _021EC19E:
str r0, [r4, r1]
ldr r1, [r4, r1]
add r0, sp, #0x2c
- bl FUN_0201F014
+ bl Camera_GetAngle
add r1, sp, #0x2c
mov r2, #0x92
ldrh r0, [r1]
@@ -7329,7 +7329,7 @@ _021EC1E8:
sub r0, #8
ldr r1, [r4, r1]
add r0, r4, r0
- bl FUN_0201EF90
+ bl Camera_SetAngle
cmp r6, #1
beq _021EC214
_021EC212:
@@ -7343,7 +7343,7 @@ _021EC21C:
mov r0, #0x8b
lsl r0, r0, #2
ldr r0, [r4, r0]
- bl FUN_0201F010
+ bl Camera_GetDistance
add r1, r0, #0
mov r0, #0x1e
str r0, [sp]
@@ -7402,7 +7402,7 @@ _021EC284:
ldr r0, [r4, r1]
sub r1, r1, #4
ldr r1, [r4, r1]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
mov r1, #0x2e
ldr r2, [r4]
lsl r1, r1, #0xc
@@ -15713,7 +15713,7 @@ MOD05_021F0318: ; 0x021F0318
ldr r1, [r4, #0x50]
add r0, sp, #0x60
add r6, r2, #0
- bl FUN_0201F02C
+ bl Camera_GetLookAtCamTarget
ldr r3, _021F0434 ; =UNK05_021F8B6C
add r2, sp, #0xc
ldmia r3!, {r0, r1}
@@ -15861,9 +15861,9 @@ MOD05_021F0454: ; 0x021F0454
add r5, r0, #0
add r4, r1, #0
add r0, sp, #0
- bl FUN_0201F014
+ bl Camera_GetAngle
add r0, r4, #0
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
strh r0, [r5]
ldrh r0, [r5]
ldr r2, _021F04F0 ; =FX_SinCosTable_
@@ -15888,10 +15888,10 @@ MOD05_021F0454: ; 0x021F0454
add r1, r4, #0
str r0, [r2]
add r0, sp, #0x14
- bl FUN_0201F03C
+ bl Camera_GetLookAtCamPos
add r0, sp, #8
add r1, r4, #0
- bl FUN_0201F02C
+ bl Camera_GetLookAtCamTarget
add r0, sp, #0x14
add r1, sp, #8
add r2, r5, #4
@@ -28249,7 +28249,7 @@ MOD05_021F61F4: ; 0x021F61F4
str r5, [r4, #0x2c]
ldr r0, [r5, #0x20]
str r0, [r4, #0x30]
- bl FUN_0201F010
+ bl Camera_GetDistance
str r0, [r4, #0x10]
str r0, [r4, #0x20]
ldr r0, _021F622C ; =MOD05_021F6270
@@ -28385,7 +28385,7 @@ MOD05_021F62FC: ; 0x021F62FC
ldr r1, [r1, #0x30]
bx r3
nop
-_021F6308: .word FUN_0201EFE0
+_021F6308: .word Camera_SetDistance
thumb_func_start MOD05_021F630C
MOD05_021F630C: ; 0x021F630C
diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s
index 5567f4d2..13b58921 100644
--- a/arm9/modules/06/asm/module_06.s
+++ b/arm9/modules/06/asm/module_06.s
@@ -1193,10 +1193,10 @@ MOD06_02239F80: ; 0x02239F80
ldr r0, _0223A008 ; =0x00001701
ldr r1, [r5, #0x20]
add r4, r2, #0
- bl FUN_0201EEF0
+ bl Camera_SetPerspectiveAngle
ldr r0, _0223A00C ; =0x000C8A55
ldr r1, [r5, #0x20]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
ldr r0, _0223A010 ; =0x002280EF
str r0, [sp, #8]
ldr r0, _0223A014 ; =0x000CA424
@@ -1205,7 +1205,7 @@ MOD06_02239F80: ; 0x02239F80
str r0, [sp, #0x10]
ldr r1, [r5, #0x20]
add r0, sp, #8
- bl FUN_0201F04C
+ bl Camera_SetLookAtCamTarget
ldr r1, _0223A01C ; =0x000022A2
add r0, sp, #0
strh r1, [r0]
@@ -1220,7 +1220,7 @@ MOD06_02239F80: ; 0x02239F80
strh r1, [r0, #4]
ldr r1, [r5, #0x20]
add r0, sp, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
.ifdef DIAMOND
mov r0, #2
mov r1, #0x7d
@@ -1233,7 +1233,7 @@ MOD06_02239F80: ; 0x02239F80
.ifdef DIAMOND
lsl r1, r1, #0x10
.endif
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
mov r0, #4
bl MOD06_0223B574
str r0, [r4, #4]
@@ -1242,7 +1242,7 @@ MOD06_02239F80: ; 0x02239F80
str r0, [r4, #8]
ldr r1, [r5, #0x20]
add r0, sp, #8
- bl FUN_0201F02C
+ bl Camera_GetLookAtCamTarget
ldr r0, [r4, #4]
ldr r1, [sp, #8]
ldr r2, [sp, #0xc]
@@ -1282,10 +1282,10 @@ MOD06_0223A020: ; 0x0223A020
ldr r0, _0223A0B8 ; =0x00000F81
ldr r1, [r5, #0x20]
add r4, r2, #0
- bl FUN_0201EEF0
+ bl Camera_SetPerspectiveAngle
ldr r0, _0223A0BC ; =0x0017E532
ldr r1, [r5, #0x20]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
ldr r0, _0223A0C0 ; =0x00F99D58
str r0, [sp, #8]
ldr r0, _0223A0C4 ; =0x000C5502
@@ -1294,7 +1294,7 @@ MOD06_0223A020: ; 0x0223A020
str r0, [sp, #0x10]
ldr r1, [r5, #0x20]
add r0, sp, #8
- bl FUN_0201F04C
+ bl Camera_SetLookAtCamTarget
ldr r1, _0223A0CC ; =0x00000642
add r0, sp, #0
strh r1, [r0]
@@ -1304,13 +1304,13 @@ MOD06_0223A020: ; 0x0223A020
strh r1, [r0, #4]
ldr r1, [r5, #0x20]
add r0, sp, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
mov r0, #0x16
mov r1, #0x7d
ldr r2, [r5, #0x20]
lsl r0, r0, #0xe
lsl r1, r1, #0x10
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
add r0, r5, #0
add r0, #0x48
bl MOD05_021DB4B0
@@ -1326,7 +1326,7 @@ MOD06_0223A020: ; 0x0223A020
str r0, [r4, #8]
ldr r1, [r5, #0x20]
add r0, sp, #8
- bl FUN_0201F02C
+ bl Camera_GetLookAtCamTarget
ldr r0, [r4, #4]
ldr r1, [sp, #8]
ldr r2, [sp, #0xc]
@@ -1356,10 +1356,10 @@ MOD06_0223A0D4: ; 0x0223A0D4
ldr r0, _0223A16C ; =0x000004C1
ldr r1, [r5, #0x20]
add r4, r2, #0
- bl FUN_0201EEF0
+ bl Camera_SetPerspectiveAngle
ldr r0, _0223A170 ; =0x0026BEC1
ldr r1, [r5, #0x20]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
ldr r0, _0223A174 ; =0x01DF5DFD
str r0, [sp, #8]
ldr r0, _0223A178 ; =0x00073A0C
@@ -1368,7 +1368,7 @@ MOD06_0223A0D4: ; 0x0223A0D4
str r0, [sp, #0x10]
ldr r1, [r5, #0x20]
add r0, sp, #8
- bl FUN_0201F04C
+ bl Camera_SetLookAtCamTarget
ldr r1, _0223A180 ; =0x000004C2
add r0, sp, #0
strh r1, [r0]
@@ -1379,12 +1379,12 @@ MOD06_0223A0D4: ; 0x0223A0D4
strh r1, [r0, #4]
ldr r1, [r5, #0x20]
add r0, sp, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
mov r0, #0xb
ldr r1, _0223A184 ; =0x005C8000
ldr r2, [r5, #0x20]
lsl r0, r0, #0x10
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
add r0, r5, #0
add r0, #0x48
bl MOD05_021DB4B0
@@ -1400,7 +1400,7 @@ MOD06_0223A0D4: ; 0x0223A0D4
str r0, [r4, #8]
ldr r1, [r5, #0x20]
add r0, sp, #8
- bl FUN_0201F02C
+ bl Camera_GetLookAtCamTarget
ldr r0, [r4, #4]
ldr r1, [sp, #8]
ldr r2, [sp, #0xc]
@@ -1526,7 +1526,7 @@ _0223A234: ; jump table
_0223A242:
ldr r1, [r1, #0x20]
add r0, sp, #0
- bl FUN_0201F02C
+ bl Camera_GetLookAtCamTarget
mov r2, #2
ldr r3, [sp, #4]
lsl r2, r2, #0xc
@@ -1837,7 +1837,7 @@ MOD06_0223A428: ; 0x0223A428
add r4, r0, #0
bl memset
add r0, r5, #0
- bl FUN_0201EB64
+ bl Camera_Alloc
str r0, [r4]
mov r0, #5
str r0, [r4, #0x40]
@@ -1849,7 +1849,7 @@ MOD06_0223A44C: ; 0x0223A44C
push {r4, lr}
add r4, r0, #0
ldr r0, [r4]
- bl FUN_0201EB70
+ bl Camera_Free
add r0, r4, #0
bl FreeToHeap
pop {r4, pc}
@@ -1866,10 +1866,10 @@ MOD06_0223A460: ; 0x0223A460
bl MOD06_0223A5C0
ldr r0, [sp, #0x2c]
ldr r1, [r5]
- bl FUN_0201EB78
+ bl Camera_Copy
ldr r1, [sp, #0x2c]
add r0, sp, #4
- bl FUN_0201F02C
+ bl Camera_GetLookAtCamTarget
add r3, sp, #4
add r2, r5, #0
add r2, #0x28
@@ -1887,9 +1887,9 @@ MOD06_0223A460: ; 0x0223A460
str r0, [r2]
ldr r1, [r5]
add r0, r6, #0
- bl FUN_0201EC68
+ bl Camera_SetFixedTarget
ldr r0, [r5]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
ldr r0, [sp, #0x2c]
mov r1, #0
str r0, [r5, #4]
@@ -2011,7 +2011,7 @@ _0223A598:
pop {r3, r4, r5, pc}
_0223A5A0:
ldr r0, [r4, #4]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
ldr r0, [r4, #0x40]
add r0, r0, #1
str r0, [r4, #0x40]
@@ -8786,7 +8786,7 @@ MOD06_0223D918: ; 0x0223D918
add r0, r4, #0
bl MOD06_0223D978
mov r0, #0xb
- bl FUN_0201EB64
+ bl Camera_Alloc
add r1, r4, #0
add r1, #0x90
str r0, [r1]
@@ -8794,11 +8794,11 @@ MOD06_0223D918: ; 0x0223D918
add r1, #0x90
ldr r0, [r5, #0x20]
ldr r1, [r1]
- bl FUN_0201EB78
+ bl Camera_Copy
add r0, r4, #0
add r0, #0x90
ldr r0, [r0]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
ldr r0, _0223D974 ; =0x0000023D
mov r1, #0
strb r1, [r4, r0]
@@ -9057,7 +9057,7 @@ MOD06_0223DB64: ; 0x0223DB64
add r1, #0x90
ldr r1, [r1]
add r0, r2, #0
- bl FUN_0201EF70
+ bl Camera_OffsetLookAtPosAndTarget
ldr r0, _0223DBC8 ; =0x0000023D
add sp, #0xc
ldrb r1, [r4, r0]
@@ -10832,7 +10832,7 @@ MOD06_0223EA38: ; 0x0223EA38
add r1, #0x90
ldr r1, [r1]
add r0, r2, #0
- bl FUN_0201EF70
+ bl Camera_OffsetLookAtPosAndTarget
ldr r0, _0223EAFC ; =0x0000023D
add sp, #0xc
ldrb r1, [r5, r0]
@@ -10847,13 +10847,13 @@ _0223EA74:
add r0, #0x90
ldr r0, [r0]
ldr r1, [r4, #0x20]
- bl FUN_0201EB78
+ bl Camera_Copy
add r0, r5, #0
add r0, #0x90
ldr r0, [r0]
- bl FUN_0201EB70
+ bl Camera_Free
ldr r0, [r4, #0x20]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
add r0, r5, #0
bl MOD06_0223EBD4
add r1, r5, #0
@@ -17787,7 +17787,7 @@ _02242342:
ldr r1, _022423FC ; =0x006A4000
ldr r2, [r6, #0x20]
lsl r0, r0, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
mov r1, #6
str r1, [sp]
ldr r0, _02242400 ; =0x000076A0
diff --git a/arm9/modules/07/asm/module_07.s b/arm9/modules/07/asm/module_07.s
index 6e4f14c2..bc0d71b9 100644
--- a/arm9/modules/07/asm/module_07.s
+++ b/arm9/modules/07/asm/module_07.s
@@ -3047,7 +3047,7 @@ MOD07_022136B4: ; 0x022136B4
mov r1, #0xe1
lsl r0, r0, #0xc
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
ldr r2, [r4]
mov r0, #0x3d
ldr r2, [r2, #0x24]
diff --git a/arm9/modules/08/asm/module_08.s b/arm9/modules/08/asm/module_08.s
index 1cc36e88..acd698d5 100644
--- a/arm9/modules/08/asm/module_08.s
+++ b/arm9/modules/08/asm/module_08.s
@@ -7997,7 +7997,7 @@ MOD08_0221599C: ; 0x0221599C
mov r1, #0xe1
lsl r0, r0, #0xc
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
_022159D4:
add r0, r4, #0
add sp, #8
@@ -8031,7 +8031,7 @@ MOD08_022159E4: ; 0x022159E4
mov r1, #0xe1
lsl r0, r0, #0xc
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
_02215A1C:
add r0, r4, #0
add sp, #8
@@ -8309,10 +8309,10 @@ _02215BFA:
add r4, r0, #0
add r0, sp, #8
add r1, r4, #0
- bl FUN_0201F014
+ bl Camera_GetAngle
add r0, sp, #8
add r1, r4, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
add sp, #0x34
pop {r4, r5, r6, r7, pc}
.align 2, 0
@@ -12154,7 +12154,7 @@ MOD08_02217904: ; 0x02217904
bl FUN_0201343C
add r1, r0, #0
add r0, sp, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
mov r0, #1
add sp, #8
pop {r3, pc}
@@ -12182,7 +12182,7 @@ MOD08_02217928: ; 0x02217928
bl FUN_02013440
add r0, sp, #0
add r1, r5, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
mov r0, #1
add sp, #8
pop {r3, r4, r5, pc}
@@ -12214,7 +12214,7 @@ MOD08_02217964: ; 0x02217964
bl FUN_0201343C
add r1, r0, #0
add r0, sp, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
mov r0, #1
add sp, #0x18
pop {r4, pc}
@@ -12242,7 +12242,7 @@ MOD08_022179A0: ; 0x022179A0
bl FUN_02013440
add r0, sp, #0
add r1, r5, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
mov r0, #1
add sp, #8
pop {r3, r4, r5, pc}
@@ -12284,12 +12284,12 @@ MOD08_022179DC: ; 0x022179DC
bne _02217A2A
add r0, sp, #8
add r1, r5, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
b _02217A32
_02217A2A:
add r0, sp, #0
add r1, r5, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
_02217A32:
mov r0, #1
add sp, #0x10
@@ -12320,7 +12320,7 @@ MOD08_02217A3C: ; 0x02217A3C
bl FUN_02013440
add r0, sp, #0
add r1, r5, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
mov r0, #1
add sp, #8
pop {r3, r4, r5, pc}
@@ -12350,7 +12350,7 @@ MOD08_02217A78: ; 0x02217A78
bl FUN_02013440
add r0, sp, #0
add r1, r5, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
mov r0, #1
add sp, #8
pop {r3, r4, r5, pc}
@@ -12371,7 +12371,7 @@ MOD08_02217AB4: ; 0x02217AB4
bl MOD08_022278FC
add r0, sp, #0
add r1, r4, #0
- bl FUN_0201F04C
+ bl Camera_SetLookAtCamTarget
mov r0, #1
add sp, #0xc
pop {r4, r5, pc}
@@ -12391,7 +12391,7 @@ MOD08_02217ADC: ; 0x02217ADC
bl MOD08_022278FC
add r0, sp, #0
add r1, r4, #0
- bl FUN_0201F04C
+ bl Camera_SetLookAtCamTarget
mov r0, #1
add sp, #0xc
pop {r4, r5, pc}
diff --git a/arm9/modules/12/asm/module_12.s b/arm9/modules/12/asm/module_12.s
index 0df8207d..c035be6d 100644
--- a/arm9/modules/12/asm/module_12.s
+++ b/arm9/modules/12/asm/module_12.s
@@ -6315,7 +6315,7 @@ _022309E8:
mov r1, #0xe1
lsl r0, r0, #0xc
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
mov r0, #0x3d
mov r1, #3
mov r2, #0x17
diff --git a/arm9/modules/18/asm/module_18.s b/arm9/modules/18/asm/module_18.s
index d1d70504..f30d7e23 100644
--- a/arm9/modules/18/asm/module_18.s
+++ b/arm9/modules/18/asm/module_18.s
@@ -37211,7 +37211,7 @@ MOD18_0224B804: ; 0x0224B804
_0224B83E:
ldr r1, [r4, #0x20]
add r0, sp, #0
- bl FUN_0201EF70
+ bl Camera_OffsetLookAtPosAndTarget
add sp, #0xc
pop {r4, r5, pc}
.align 2, 0
diff --git a/arm9/modules/63/asm/mod63_021D74E0.s b/arm9/modules/63/asm/mod63_021D74E0.s
index 182b8d56..0dded682 100644
--- a/arm9/modules/63/asm/mod63_021D74E0.s
+++ b/arm9/modules/63/asm/mod63_021D74E0.s
@@ -623,7 +623,7 @@ _021D79B6:
pop {r4, r5, pc}
_021D79CA:
bl FUN_020222AC
- bl FUN_0201EBA4
+ bl Camera_PushLookAtToNNSGlb
add r1, r4, #0
add r0, sp, #0
add r1, #0x90
@@ -965,7 +965,7 @@ _021D7C52:
add r0, #0xd0
str r1, [r0]
add r0, r4, #0
- bl FUN_0201EB64
+ bl Camera_Alloc
add r1, r5, #0
add r1, #0xa0
str r0, [r1]
@@ -981,23 +981,23 @@ _021D7C52:
add r0, r5, #0
add r0, #0xbc
lsl r2, r2, #4
- bl FUN_0201ED5C
+ bl Camera_InitWithPosAndTarget
add r2, r5, #0
add r2, #0xa0
mov r1, #0x19
ldr r2, [r2]
mov r0, #0
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
add r1, r5, #0
add r1, #0xa0
ldr r1, [r1]
mov r0, #0
- bl FUN_0201EE2C
+ bl Camera_ApplyPerspectiveType
add r0, r5, #0
add r0, #0xa0
ldr r0, [r0]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
mov r3, #0x42
lsl r3, r3, #2
add r2, r3, #2
@@ -1652,13 +1652,13 @@ _021D81DC:
add r0, r4, #0
ldr r1, [r1]
add r0, #0xbc
- bl FUN_0201F04C
+ bl Camera_SetLookAtCamTarget
add r1, r4, #0
add r1, #0xa0
add r0, r4, #0
ldr r1, [r1]
add r0, #0xc8
- bl FUN_0201F05C
+ bl Camera_SetLookAtCamPos
cmp r5, #1
bne _021D824E
mov r0, #4
@@ -1727,13 +1727,13 @@ _021D8272:
add r0, r5, #0
ldr r1, [r1]
add r0, #0xfc
- bl FUN_0201F04C
+ bl Camera_SetLookAtCamTarget
add r1, r5, #0
add r1, #0xa0
add r0, r5, #0
ldr r1, [r1]
add r0, #0xe4
- bl FUN_0201F05C
+ bl Camera_SetLookAtCamPos
mov r0, #1
add r1, r0, #0
bl GX_EngineAToggleLayers
@@ -1838,7 +1838,7 @@ MOD63_021D8360: ; 0x021D8360
ldr r0, [r0]
add r4, r1, #0
add r6, r2, #0
- bl FUN_0201EB70
+ bl Camera_Free
add r0, r5, #4
bl MOD63_021D7970
add r0, r4, #0
diff --git a/arm9/modules/63/asm/mod63_021D8890.s b/arm9/modules/63/asm/mod63_021D8890.s
index 34d50a11..0fd84316 100644
--- a/arm9/modules/63/asm/mod63_021D8890.s
+++ b/arm9/modules/63/asm/mod63_021D8890.s
@@ -1631,9 +1631,9 @@ MOD63_021D95A8: ; 0x021D95A8
ldrb r0, [r0]
cmp r0, #0
beq _021D95F6
- bl FUN_0201EB98
+ bl Camera_UnsetWorkPtr
ldr r0, [r5, #0x78]
- bl FUN_0201EB70
+ bl Camera_Free
mov r4, #0
mov r6, #0x58
_021D95D0:
@@ -2016,7 +2016,7 @@ _021D98BC:
ldr r0, [sp, #0xc]
bl NARC_dtor
mov r0, #0x4c
- bl FUN_0201EB64
+ bl Camera_Alloc
add r3, sp, #0x20
ldr r4, _021D9968 ; =MOD63_021DBAE4
str r0, [r5, #0x44]
@@ -2034,10 +2034,10 @@ _021D98BC:
str r0, [sp, #8]
add r0, r2, #0
ldr r2, _021D9974 ; =MOD63_021DBB80
- bl FUN_0201ECA8
+ bl Camera_InitWithTargetAndAngle
ldr r0, _021D9978 ; =0x00000981
ldr r1, [r5, #0x44]
- bl FUN_0201EEF0
+ bl Camera_SetPerspectiveAngle
ldr r4, _021D997C ; =MOD63_021DBB08
add r3, sp, #0x14
ldmia r4!, {r0, r1}
@@ -2047,9 +2047,9 @@ _021D98BC:
str r0, [r3]
ldr r1, [r5, #0x44]
add r0, r2, #0
- bl FUN_0201EF70
+ bl Camera_OffsetLookAtPosAndTarget
ldr r0, [r5, #0x44]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
mov r0, #1
strb r0, [r5, #4]
add sp, #0x2c
@@ -2091,7 +2091,7 @@ _021D998C:
str r0, [r1, #4]
str r0, [r1, #8]
bl FUN_020222AC
- bl FUN_0201EBA4
+ bl Camera_PushLookAtToNNSGlb
mov r4, #0
add r5, #0x48
add r7, sp, #0
@@ -2773,19 +2773,19 @@ MOD63_021D9F38: ; 0x021D9F38
cmp r5, r1
bgt _021D9FE2
ldr r0, [r4, #0x44]
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
ldr r1, _021DA07C ; =0x000005C1
sub r0, #0x20
cmp r0, r1
ble _021D9F68
ldr r0, _021DA080 ; =0x0000FFE0
ldr r1, [r4, #0x44]
- bl FUN_0201EF2C
+ bl Camera_AdjustPerspectiveAngle
b _021D9F70
_021D9F68:
add r0, r1, #0
ldr r1, [r4, #0x44]
- bl FUN_0201EEF0
+ bl Camera_SetPerspectiveAngle
_021D9F70:
mov r0, #2
ldr r1, [sp, #0x4c]
@@ -2794,7 +2794,7 @@ _021D9F70:
str r0, [sp, #0x4c]
ldr r1, [r4, #0x44]
add r0, sp, #0x44
- bl FUN_0201EF70
+ bl Camera_OffsetLookAtPosAndTarget
ldr r0, _021DA078 ; =0x000004AB
cmp r5, r0
bne _021DA074
@@ -2814,7 +2814,7 @@ _021D9F70:
str r0, [sp, #8]
add r0, r2, #0
ldr r2, _021DA08C ; =MOD63_021DBB80
- bl FUN_0201ECA8
+ bl Camera_InitWithTargetAndAngle
ldr r5, _021DA090 ; =MOD63_021DBB20
add r3, sp, #0x2c
ldmia r5!, {r0, r1}
@@ -2824,7 +2824,7 @@ _021D9F70:
str r0, [r3]
ldr r1, [r4, #0x44]
add r0, r2, #0
- bl FUN_0201EF70
+ bl Camera_OffsetLookAtPosAndTarget
ldr r2, _021DA094 ; =MOD63_021DBAC8
add r1, sp, #0xc
ldrh r3, [r2]
@@ -2837,7 +2837,7 @@ _021D9F70:
strh r3, [r1, #4]
strh r2, [r1, #6]
ldr r1, [r4, #0x44]
- bl FUN_0201EFB4
+ bl Camera_AdjustAngle
add sp, #0x50
pop {r4, r5, r6, pc}
_021D9FE2:
@@ -2850,7 +2850,7 @@ _021D9FE2:
add r1, r2, r1
str r1, [sp, #0x44]
ldr r1, [r4, #0x44]
- bl FUN_0201EF70
+ bl Camera_OffsetLookAtPosAndTarget
ldr r3, _021DA098 ; =0x0000057D
cmp r5, r3
bne _021DA074
@@ -2870,10 +2870,10 @@ _021D9FE2:
str r0, [sp, #8]
add r0, r2, #0
ldr r2, _021DA08C ; =MOD63_021DBB80
- bl FUN_0201ECA8
+ bl Camera_InitWithTargetAndAngle
ldr r0, _021DA07C ; =0x000005C1
ldr r1, [r4, #0x44]
- bl FUN_0201EEF0
+ bl Camera_SetPerspectiveAngle
ldr r5, _021DA0A0 ; =MOD63_021DBAF0
add r3, sp, #0x14
ldmia r5!, {r0, r1}
@@ -2883,7 +2883,7 @@ _021D9FE2:
str r0, [r3]
ldr r1, [r4, #0x44]
add r0, r2, #0
- bl FUN_0201EF70
+ bl Camera_OffsetLookAtPosAndTarget
add sp, #0x50
pop {r4, r5, r6, pc}
_021DA044:
@@ -2891,7 +2891,7 @@ _021DA044:
cmp r5, r0
blt _021DA062
ldr r0, [r4, #0x44]
- bl FUN_0201F008
+ bl Camera_GetPerspectiveAngle
mov r1, #1
add r0, #0x20
lsl r1, r1, #0xe
@@ -2899,7 +2899,7 @@ _021DA044:
bge _021DA062
ldr r1, [r4, #0x44]
mov r0, #0x20
- bl FUN_0201EF2C
+ bl Camera_AdjustPerspectiveAngle
_021DA062:
mov r0, #1
ldr r1, [sp, #0x4c]
@@ -2908,7 +2908,7 @@ _021DA062:
str r0, [sp, #0x4c]
ldr r1, [r4, #0x44]
add r0, sp, #0x44
- bl FUN_0201EF70
+ bl Camera_OffsetLookAtPosAndTarget
_021DA074:
add sp, #0x50
pop {r4, r5, r6, pc}
diff --git a/arm9/modules/63/src/mod63_021DB450.c b/arm9/modules/63/src/mod63_021DB450.c
index 454b2b19..31917596 100644
--- a/arm9/modules/63/src/mod63_021DB450.c
+++ b/arm9/modules/63/src/mod63_021DB450.c
@@ -18,7 +18,7 @@ extern struct UnkStruct63_021DB450 * FUN_02006D98(u32);
extern void FUN_02068C00(struct UnkStruct63_021DB49C*, u16, u32, u32, u32, u32, u32);
extern void FUN_02012CC8(void);
extern void FUN_02007558(u32, u32, u32);
-extern void FUN_0201EC94(u32, u32, u32);
+extern void Camera_SetPerspectiveClippingPlane(u32, u32, u32);
extern u32 FUN_0201343C(void);
extern void FUN_02013194(void *, u32, u32, u32);
extern u32 FUN_0201318C(u32, u32, u32);
@@ -87,7 +87,7 @@ THUMB_FUNC void Title_SetupMonAnimationSprites(struct UnkStruct63_021DB450 * arg
FUN_02012CC8();
arg0->field_14 = AllocFromHeap(0x4C, 0x4800);
arg0->field_18 = FUN_02012CDC(MOD63_021DB450, MOD63_021DB474, arg0->field_14, 0x4800, 1, 0x4C);
- FUN_0201EC94(0x1000, 0x384000, FUN_0201343C());
+ Camera_SetPerspectiveClippingPlane(0x1000, 0x384000, FUN_0201343C());
FUN_02013194(arg0->field_18, FUN_0201318C(0x3D, 4, 0x4C), 10, 1);
}
diff --git a/arm9/modules/64/asm/module_64.s b/arm9/modules/64/asm/module_64.s
index 47d2195c..ce6e5e5e 100644
--- a/arm9/modules/64/asm/module_64.s
+++ b/arm9/modules/64/asm/module_64.s
@@ -1653,7 +1653,7 @@ MOD64_021D81D8: ; 0x021D81D8
mov r0, #0x11
add r2, r1, #0
bl NNS_G3dGeBufferOP_N
- bl FUN_0201EBA4
+ bl Camera_PushLookAtToNNSGlb
add r0, r4, #0
bl MOD64_021D8058
mov r2, #1
@@ -1679,7 +1679,7 @@ MOD64_021D824C: ; 0x021D824C
push {r4, lr}
add r4, r0, #0
add r0, r1, #0
- bl FUN_0201EB64
+ bl Camera_Alloc
mov r1, #0x5f
lsl r1, r1, #4
str r0, [r4, r1]
@@ -1713,7 +1713,7 @@ MOD64_021D8268: ; 0x021D8268
lsl r1, r1, #0xe
add r2, sp, #0xc
str r4, [sp, #8]
- bl FUN_0201ECA8
+ bl Camera_InitWithTargetAndAngle
mov r1, #0
mov r0, #1
lsl r0, r0, #0xc
@@ -1722,9 +1722,9 @@ MOD64_021D8268: ; 0x021D8268
str r1, [sp, #0x1c]
add r0, sp, #0x14
add r1, r4, #0
- bl FUN_0201EC58
+ bl Camera_SetLookAtCamUp
add r0, r4, #0
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
add sp, #0x20
pop {r4, pc}
.align 2, 0
@@ -1740,7 +1740,7 @@ MOD64_021D82BC: ; 0x021D82BC
ldr r0, [r0, r1]
bx r3
nop
-_021D82C8: .word FUN_0201EB70
+_021D82C8: .word Camera_Free
thumb_func_end MOD64_021D82BC
thumb_func_start MOD64_021D82CC
@@ -2573,10 +2573,10 @@ MOD64_021D88C4: ; 0x021D88C4
strh r1, [r0, #4]
ldr r1, [r5, #0x30]
add r0, sp, #0
- bl FUN_0201EF90
+ bl Camera_SetAngle
ldr r0, [r5, #0x10]
ldr r1, [r5, #0x30]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
ldr r1, [r5, #0x20]
ldr r0, [r5, #0x34]
str r1, [r0, #8]
diff --git a/arm9/modules/65/asm/module_65.s b/arm9/modules/65/asm/module_65.s
index 4fc8d105..0e8bbfba 100644
--- a/arm9/modules/65/asm/module_65.s
+++ b/arm9/modules/65/asm/module_65.s
@@ -5378,7 +5378,7 @@ MOD65_021D9F50: ; 0x021D9F50
push {r4, lr}
add r4, r0, #0
bl FUN_020222AC
- bl FUN_0201EBA4
+ bl Camera_PushLookAtToNNSGlb
ldr r2, _021D9F84 ; =0x04000440
mov r3, #0
add r1, r2, #0
@@ -5406,7 +5406,7 @@ MOD65_021D9F8C: ; 0x021D9F8C
push {r4, lr}
add r4, r0, #0
ldr r0, [r4]
- bl FUN_0201EB70
+ bl Camera_Free
ldr r0, [r4, #4]
bl FUN_020072E8
pop {r4, pc}
@@ -5432,7 +5432,7 @@ MOD65_021D9FA0: ; 0x021D9FA0
strh r0, [r1, #4]
strh r0, [r1, #6]
add r0, r2, #0
- bl FUN_0201EB64
+ bl Camera_Alloc
str r0, [r4]
mov r1, #1
str r1, [sp]
@@ -5442,16 +5442,16 @@ MOD65_021D9FA0: ; 0x021D9FA0
add r0, sp, #0x10
lsl r1, r1, #0x10
add r2, sp, #8
- bl FUN_0201ED10
+ bl Camera_InitWithPosAndAngle
mov r1, #0x19
ldr r2, [r4]
mov r0, #0
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
ldr r0, [r4]
- bl FUN_0201EC88
+ bl Camera_ClearFixedTarget
ldr r0, [r4]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
add sp, #0x1c
pop {r4, r5, pc}
.align 2, 0
diff --git a/arm9/modules/68/asm/module_68.s b/arm9/modules/68/asm/module_68.s
index e30ad283..633d7b77 100644
--- a/arm9/modules/68/asm/module_68.s
+++ b/arm9/modules/68/asm/module_68.s
@@ -1470,7 +1470,7 @@ MOD68_021D806C: ; 0x021D806C
push {r4, lr}
add r4, r0, #0
bl FUN_020222AC
- bl FUN_0201EBA4
+ bl Camera_PushLookAtToNNSGlb
ldr r2, _021D80A0 ; =0x04000440
mov r3, #0
add r1, r2, #0
@@ -1501,7 +1501,7 @@ MOD68_021D80A8: ; 0x021D80A8
ldr r0, [r0]
bx r3
.align 2, 0
-_021D80B0: .word FUN_0201EB70
+_021D80B0: .word Camera_Free
thumb_func_end MOD68_021D80A8
thumb_func_start MOD68_021D80B4
@@ -1522,7 +1522,7 @@ MOD68_021D80B4: ; 0x021D80B4
strh r0, [r1, #4]
strh r0, [r1, #6]
mov r0, #0x24
- bl FUN_0201EB64
+ bl Camera_Alloc
add r1, r4, #0
add r1, #0xd0
str r0, [r1]
@@ -1536,21 +1536,21 @@ MOD68_021D80B4: ; 0x021D80B4
add r0, sp, #0x10
lsl r1, r1, #0x10
add r2, sp, #8
- bl FUN_0201ED10
+ bl Camera_InitWithPosAndAngle
add r2, r4, #0
add r2, #0xd0
mov r1, #0x19
ldr r2, [r2]
mov r0, #0
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
add r0, r4, #0
add r0, #0xd0
ldr r0, [r0]
- bl FUN_0201EC88
+ bl Camera_ClearFixedTarget
add r4, #0xd0
ldr r0, [r4]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
add sp, #0x1c
pop {r3, r4, pc}
.align 2, 0
diff --git a/arm9/modules/69/asm/module_69.s b/arm9/modules/69/asm/module_69.s
index b29554ea..1667a6f0 100644
--- a/arm9/modules/69/asm/module_69.s
+++ b/arm9/modules/69/asm/module_69.s
@@ -996,7 +996,7 @@ MOD69_0222DDFC: ; 0x0222DDFC
sub sp, #0x18
add r4, r0, #0
mov r0, #0x3f
- bl FUN_0201EB64
+ bl Camera_Alloc
ldr r2, _0222DE80 ; =0x00001B1C
ldr r3, _0222DE84 ; =0x00000FA4
str r0, [r4, r2]
@@ -1029,7 +1029,7 @@ MOD69_0222DDFC: ; 0x0222DDFC
add r0, r4, r0
lsl r1, r1, #0xc
add r2, r4, r2
- bl FUN_0201ECA8
+ bl Camera_InitWithTargetAndAngle
mov r1, #0
mov r0, #1
lsl r0, r0, #0xc
@@ -1039,17 +1039,17 @@ MOD69_0222DDFC: ; 0x0222DDFC
ldr r1, _0222DE80 ; =0x00001B1C
add r0, sp, #0xc
ldr r1, [r4, r1]
- bl FUN_0201EC58
+ bl Camera_SetLookAtCamUp
ldr r0, _0222DE80 ; =0x00001B1C
ldr r0, [r4, r0]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
ldr r2, _0222DE80 ; =0x00001B1C
mov r0, #1
mov r1, #0x7d
ldr r2, [r4, r2]
lsl r0, r0, #0xc
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
add sp, #0x18
pop {r4, pc}
nop
@@ -1064,7 +1064,7 @@ MOD69_0222DE88: ; 0x0222DE88
bx r3
.align 2, 0
_0222DE90: .word 0x00001B1C
-_0222DE94: .word FUN_0201EB70
+_0222DE94: .word Camera_Free
thumb_func_start MOD69_0222DE98
MOD69_0222DE98: ; 0x0222DE98
diff --git a/arm9/modules/77/asm/module_77.s b/arm9/modules/77/asm/module_77.s
index 2d4f838a..4b8e4702 100644
--- a/arm9/modules/77/asm/module_77.s
+++ b/arm9/modules/77/asm/module_77.s
@@ -88,7 +88,7 @@ _021D7540:
ldr r1, _021D75F8 ; =0x0000C070
str r0, [r5, r1]
ldr r0, [r5]
- bl FUN_0201EB64
+ bl Camera_Alloc
ldr r1, _021D75FC ; =0x0000C2CC
str r0, [r5, r1]
mov r0, #0
@@ -817,7 +817,7 @@ MOD77_021D7BAC: ; 0x021D7BAC
bl GX_EngineBToggleLayers
ldr r0, _021D7C14 ; =0x0000C2CC
ldr r0, [r4, r0]
- bl FUN_0201EB70
+ bl Camera_Free
ldr r0, _021D7C18 ; =0x0000C070
ldr r0, [r4, r0]
bl ScrStrBufs_delete
@@ -2490,20 +2490,20 @@ MOD77_021D8970: ; 0x021D8970
ldr r2, _021D89EC ; =0x000005C1
str r0, [sp, #4]
add r0, r7, #0
- bl FUN_0201ED5C
+ bl Camera_InitWithPosAndTarget
ldr r2, _021D89E8 ; =0x0000C2CC
mov r1, #0x19
ldr r2, [r4, r2]
mov r0, #0
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
ldr r1, _021D89E8 ; =0x0000C2CC
mov r0, #0
ldr r1, [r4, r1]
- bl FUN_0201EE2C
+ bl Camera_ApplyPerspectiveType
ldr r0, _021D89E8 ; =0x0000C2CC
ldr r0, [r4, r0]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
ldr r0, _021D89F0 ; =0x0000C2F4
ldrh r1, [r4, r0]
cmp r1, #0
@@ -2944,7 +2944,7 @@ MOD77_021D8CF8: ; 0x021D8CF8
add r5, r0, #0
ldr r0, _021D8D7C ; =0x0000C2CC
ldr r0, [r5, r0]
- bl FUN_0201F010
+ bl Camera_GetDistance
ldr r1, _021D8D80 ; =0x0000C2D8
mov r4, #0
ldrh r2, [r5, r1]
@@ -3005,7 +3005,7 @@ _021D8D6A:
_021D8D70:
ldr r1, _021D8D7C ; =0x0000C2CC
ldr r1, [r5, r1]
- bl FUN_0201EFE0
+ bl Camera_SetDistance
add r0, r4, #0
pop {r3, r4, r5, pc}
.align 2, 0
@@ -3047,7 +3047,7 @@ _021D8D90:
pop {r3, r4, r5, r6, r7, pc}
_021D8DC2:
bl FUN_020222AC
- bl FUN_0201EBA4
+ bl Camera_PushLookAtToNNSGlb
ldr r1, _021D8E7C ; =0x0000C2B4
add r0, sp, #0x4c
add r1, r5, r1
diff --git a/arm9/modules/78/asm/module_78.s b/arm9/modules/78/asm/module_78.s
index 4b4209f2..f12941f2 100644
--- a/arm9/modules/78/asm/module_78.s
+++ b/arm9/modules/78/asm/module_78.s
@@ -33,7 +33,7 @@ MOD78_021D74E0: ; 0x021D74E0
add r0, #0x9d
strb r1, [r0]
mov r0, #0x48
- bl FUN_0201EB64
+ bl Camera_Alloc
str r0, [r4]
bl MOD78_021D7708
add r0, r4, #0
@@ -50,9 +50,9 @@ MOD78_021D74E0: ; 0x021D74E0
str r1, [sp, #8]
ldr r1, _021D75C8 ; =0x0029AEC1
ldr r3, _021D75CC ; =0x000005C1
- bl FUN_0201ECA8
+ bl Camera_InitWithTargetAndAngle
ldr r0, [r4]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
mov r4, #0
mov r7, #2
mov r6, #4
@@ -209,7 +209,7 @@ _021D7680:
cmp r2, #4
blo _021D7668
bl FUN_020222AC
- bl FUN_0201EBA4
+ bl Camera_PushLookAtToNNSGlb
add r0, r4, #4
add r1, sp, #0
add r2, sp, #0x18
@@ -254,7 +254,7 @@ _021D76C8:
ldr r0, [r6, #0x5c]
bl FreeToHeap
ldr r0, [r6]
- bl FUN_0201EB70
+ bl Camera_Free
ldr r0, [sp]
bl OverlayManager_FreeData
bl FUN_0201B398
diff --git a/arm9/modules/81/asm/module_81.s b/arm9/modules/81/asm/module_81.s
index 09e12fdf..df849b5e 100644
--- a/arm9/modules/81/asm/module_81.s
+++ b/arm9/modules/81/asm/module_81.s
@@ -1480,7 +1480,7 @@ MOD81_02238940: ; 0x02238940
mov r0, #0x11
add r2, r1, #0
bl NNS_G3dGeBufferOP_N
- bl FUN_0201EBA4
+ bl Camera_PushLookAtToNNSGlb
ldr r0, [r5, #0x1c]
mov r6, #0
cmp r0, #0
@@ -1858,7 +1858,7 @@ MOD81_02238B8C: ; 0x02238B8C
mov r0, #0x11
add r2, r1, #0
bl NNS_G3dGeBufferOP_N
- bl FUN_0201EBA4
+ bl Camera_PushLookAtToNNSGlb
add r1, r4, #0
ldr r0, [r4, #0x5c]
add r4, #0x74
@@ -1887,7 +1887,7 @@ MOD81_02238C40: ; 0x02238C40
add r4, r1, #0
ldr r1, [r2]
add r0, sp, #0
- bl FUN_0201F03C
+ bl Camera_GetLookAtCamPos
add r2, sp, #0
ldmia r2!, {r0, r1}
stmia r4!, {r0, r1}
@@ -1906,7 +1906,7 @@ MOD81_02238C60: ; 0x02238C60
ldr r1, [r2]
bx r3
nop
-_02238C6C: .word FUN_0201EF90
+_02238C6C: .word Camera_SetAngle
thumb_func_end MOD81_02238C60
thumb_func_start MOD81_02238C70
@@ -1917,7 +1917,7 @@ MOD81_02238C70: ; 0x02238C70
ldr r1, [r2]
bx r3
nop
-_02238C7C: .word FUN_0201EFB4
+_02238C7C: .word Camera_AdjustAngle
thumb_func_end MOD81_02238C70
thumb_func_start MOD81_02238C80
@@ -1928,7 +1928,7 @@ MOD81_02238C80: ; 0x02238C80
ldr r1, [r2]
bx r3
nop
-_02238C8C: .word FUN_0201EE2C
+_02238C8C: .word Camera_ApplyPerspectiveType
thumb_func_end MOD81_02238C80
thumb_func_start MOD81_02238C90
@@ -1939,7 +1939,7 @@ MOD81_02238C90: ; 0x02238C90
ldr r1, [r2]
bx r3
nop
-_02238C9C: .word FUN_0201EEF0
+_02238C9C: .word Camera_SetPerspectiveAngle
thumb_func_end MOD81_02238C90
thumb_func_start MOD81_02238CA0
@@ -1951,7 +1951,7 @@ MOD81_02238CA0: ; 0x02238CA0
add r4, r1, #0
add r6, r2, #0
add r7, r3, #0
- bl FUN_0201EB64
+ bl Camera_Alloc
str r0, [r5]
str r4, [r5, #4]
str r6, [r5, #8]
@@ -1971,7 +1971,7 @@ MOD81_02238CA0: ; 0x02238CA0
add r0, r5, #4
lsl r1, r1, #0xe
add r2, #0x10
- bl FUN_0201ECA8
+ bl Camera_InitWithTargetAndAngle
mov r1, #0
mov r0, #1
lsl r0, r0, #0xc
@@ -1980,14 +1980,14 @@ MOD81_02238CA0: ; 0x02238CA0
str r1, [sp, #0x14]
ldr r1, [r5]
add r0, sp, #0xc
- bl FUN_0201EC58
+ bl Camera_SetLookAtCamUp
ldr r0, [r5]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
mov r1, #0xfa
ldr r2, [r5]
mov r0, #0
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
add sp, #0x18
pop {r3, r4, r5, r6, r7, pc}
nop
@@ -2000,7 +2000,7 @@ MOD81_02238D0C: ; 0x02238D0C
ldr r0, [r0]
bx r3
nop
-_02238D14: .word FUN_0201EB70
+_02238D14: .word Camera_Free
thumb_func_end MOD81_02238D0C
thumb_func_start MOD81_02238D18
diff --git a/arm9/modules/84/asm/module_84_thumb1.s b/arm9/modules/84/asm/module_84_thumb1.s
index ea18857a..c9bff482 100644
--- a/arm9/modules/84/asm/module_84_thumb1.s
+++ b/arm9/modules/84/asm/module_84_thumb1.s
@@ -792,7 +792,7 @@ MOD84_021D7B54: ; 0x021D7B54
sub sp, #0x18
add r4, r0, #0
mov r0, #0x4b
- bl FUN_0201EB64
+ bl Camera_Alloc
str r0, [r4, #0x20]
mov r0, #0
str r0, [r4, #0x24]
@@ -813,7 +813,7 @@ MOD84_021D7B54: ; 0x021D7B54
add r0, #0x24
lsl r1, r1, #0xe
add r2, #0x30
- bl FUN_0201ECA8
+ bl Camera_InitWithTargetAndAngle
mov r1, #0
mov r0, #1
lsl r0, r0, #0xc
@@ -822,14 +822,14 @@ MOD84_021D7B54: ; 0x021D7B54
str r1, [sp, #0x14]
ldr r1, [r4, #0x20]
add r0, sp, #0xc
- bl FUN_0201EC58
+ bl Camera_SetLookAtCamUp
ldr r0, [r4, #0x20]
- bl FUN_0201EB8C
+ bl Camera_SetWorkPtr
mov r1, #0xfa
ldr r2, [r4, #0x20]
mov r0, #0
lsl r1, r1, #0xe
- bl FUN_0201EC94
+ bl Camera_SetPerspectiveClippingPlane
add sp, #0x18
pop {r4, pc}
nop
@@ -842,7 +842,7 @@ MOD84_021D7BBC: ; 0x021D7BBC
ldr r0, [r0, #0x20]
bx r3
nop
-_021D7BC4: .word FUN_0201EB70
+_021D7BC4: .word Camera_Free
thumb_func_end MOD84_021D7BBC
thumb_func_start MOD84_021D7BC8
@@ -1003,7 +1003,7 @@ MOD84_021D7CFC: ; 0x021D7CFC
mov r0, #0x11
add r2, r1, #0
bl NNS_G3dGeBufferOP_N
- bl FUN_0201EBA4
+ bl Camera_PushLookAtToNNSGlb
add r4, #0x38
add r0, sp, #0x28
bl MTX_Identity33_
diff --git a/arm9/src/unk_0201E7D8.c b/arm9/src/unk_0201E7D8.c
new file mode 100644
index 00000000..3658f40b
--- /dev/null
+++ b/arm9/src/unk_0201E7D8.c
@@ -0,0 +1,383 @@
+#include "global.h"
+#include "fx.h"
+#include "heap.h"
+#include "nitro/NNS_g3d.h"
+#include "unk_0201E7D8.h"
+#include "GX_g3.h"
+
+extern fx16 CalcAngleBetweenVecs(VecFx32 * a, VecFx32 * b);
+
+GXBufferMode g3dDepthBufferingMode = GX_BUFFERMODE_W;
+static struct CameraWork * sCameraWorkPtr;
+
+void Camera_OffsetLookAtPosAndTarget(const VecFx32 *delta, struct CameraWork * camera);
+void Camera_ApplyPerspectiveType(u8 perspectiveType, struct CameraWork * camera);
+
+THUMB_FUNC void Camera_CalcLookAtPosFromTargetAndAngle(struct CameraWork * camera)
+{
+ u16 negx = -camera->angle.x;
+ camera->lookAt.camPos.x = FX_Mul(FX_Mul(FX_SinIdx(camera->angle.y), camera->distance), FX_CosIdx(camera->angle.x));
+ camera->lookAt.camPos.z = FX_Mul(FX_Mul(FX_CosIdx(camera->angle.y), camera->distance), FX_CosIdx(camera->angle.x));
+ camera->lookAt.camPos.y = FX_Mul(FX_SinIdx(negx), camera->distance);
+ VEC_Add(&camera->lookAt.camPos, &camera->lookAt.camTarget, &camera->lookAt.camPos);
+}
+
+THUMB_FUNC void Camera_CalcLookAtTargetFromPosAndAngle(struct CameraWork * camera)
+{
+ u16 negx = -camera->angle.x;
+ camera->lookAt.camTarget.x = -FX_Mul(FX_Mul(FX_SinIdx(camera->angle.y), camera->distance), FX_CosIdx(camera->angle.x));
+ camera->lookAt.camTarget.z = -FX_Mul(FX_Mul(FX_CosIdx(camera->angle.y), camera->distance), FX_CosIdx(camera->angle.x));
+ camera->lookAt.camTarget.y = -FX_Mul(FX_SinIdx(negx), camera->distance);
+ VEC_Add(&camera->lookAt.camTarget, &camera->lookAt.camPos, &camera->lookAt.camTarget);
+}
+
+THUMB_FUNC void Camera_InitInternal(u16 perspectiveAngle, struct CameraWork * camera)
+{
+ camera->perspectiveAngle = perspectiveAngle;
+ camera->perspective.fovySin = FX_SinIdx(perspectiveAngle);
+ camera->perspective.fovyCos = FX_CosIdx(perspectiveAngle);
+ camera->perspective.aspect = FX32_CONST(1.33333333); // 4x3
+ camera->perspective.near = FX32_CONST(150);
+ camera->perspective.far = FX32_CONST(900);
+ camera->lookAt.camUp.x = 0;
+ camera->lookAt.camUp.y = FX32_ONE;
+ camera->lookAt.camUp.z = 0;
+ camera->currTarget_p = NULL;
+ camera->enableOffsetX = FALSE;
+ camera->enableOffsetY = FALSE;
+ camera->enableOffsetZ = FALSE;
+ camera->history = NULL;
+}
+
+THUMB_FUNC void Camera_VecResetCoordsIfOffsetComponentNotEnabled(struct CameraWork * camera, VecFx32 * vec)
+{
+ if (!camera->enableOffsetX)
+ vec->x = 0;
+ if (!camera->enableOffsetY)
+ vec->y = 0;
+ if (!camera->enableOffsetZ)
+ vec->z = 0;
+}
+
+THUMB_FUNC void Camera_GetVecFromSomeRingBufferMaybe(struct CameraWork * camera, const VecFx32 * vecDefault, VecFx32 * vecDst)
+{
+ s32 * idx_p;
+ s32 * idx2_p;
+ if (camera->history == NULL)
+ {
+ *vecDst = *vecDefault;
+ }
+ else
+ {
+ idx_p = &camera->history->readIdx;
+ idx2_p = &camera->history->writeIdx;
+ if (!camera->history->overrideEnabled)
+ {
+ *vecDst = *vecDefault;
+ if (*idx_p == camera->history->writeIdxInit)
+ camera->history->overrideEnabled = TRUE;
+ }
+ else
+ {
+ *vecDst = camera->history->vecs[camera->history->readIdx];
+ }
+ *idx_p = (*idx_p + 1) % camera->history->count;
+ camera->history->vecs[*idx2_p] = *vecDefault;
+ *idx2_p = (*idx2_p + 1) % camera->history->count;
+ if (!camera->history->enableUpdateX)
+ vecDst->x = vecDefault->x;
+ if (!camera->history->enableUpdateY)
+ vecDst->y = vecDefault->y;
+ if (!camera->history->enableUpdateZ)
+ vecDst->z = vecDefault->z;
+ }
+}
+
+THUMB_FUNC void Camera_AllocHistory(s32 count, s32 initialWriteIdx, s32 updateEnableFlags, s32 heap_id, struct CameraWork * camera)
+{
+ s32 i;
+ struct CameraHistory * history;
+
+ if (camera->currTarget_p != NULL)
+ {
+ GF_ASSERT(initialWriteIdx + 1 <= count);
+ history = AllocFromHeap(heap_id, sizeof(struct CameraHistory));
+ history->vecs = AllocFromHeap(heap_id, sizeof(VecFx32) * count);
+ for (i = 0; i < count; i++)
+ {
+ history->vecs[i].x = 0;
+ history->vecs[i].y = 0;
+ history->vecs[i].z = 0;
+ }
+ history->count = count;
+ history->readIdx = 0;
+ history->writeIdx = initialWriteIdx;
+ history->writeIdxInit = initialWriteIdx;
+ history->overrideEnabled = FALSE;
+ history->enableUpdateX = FALSE;
+ history->enableUpdateY = FALSE;
+ history->enableUpdateZ = FALSE;
+ if (updateEnableFlags & 1)
+ history->enableUpdateX = TRUE;
+ if (updateEnableFlags & 2)
+ history->enableUpdateY = TRUE;
+ if (updateEnableFlags & 4)
+ history->enableUpdateZ = TRUE;
+ camera->history = history;
+ }
+}
+
+THUMB_FUNC void Camera_FreeHistory(struct CameraWork * camera)
+{
+ if (camera->history != NULL)
+ {
+ FreeToHeap(camera->history->vecs);
+ FreeToHeap(camera->history);
+ camera->history = NULL;
+ }
+}
+
+THUMB_FUNC struct CameraWork * Camera_Alloc(u32 heap_id)
+{
+ return AllocFromHeap(heap_id, sizeof(struct CameraWork));
+}
+
+THUMB_FUNC void Camera_Free(struct CameraWork * camera)
+{
+ FreeToHeap(camera);
+}
+
+THUMB_FUNC void Camera_Copy(struct CameraWork * src, struct CameraWork * dest)
+{
+ *dest = *src;
+}
+
+THUMB_FUNC void Camera_SetWorkPtr(struct CameraWork * camera)
+{
+ sCameraWorkPtr = camera;
+}
+
+THUMB_FUNC void Camera_UnsetWorkPtr(void)
+{
+ sCameraWorkPtr = NULL;
+}
+
+THUMB_FUNC void Camera_PushLookAtToNNSGlb(void)
+{
+ VecFx32 diff;
+ VecFx32 offset;
+ if (sCameraWorkPtr != NULL)
+ {
+ if (sCameraWorkPtr->currTarget_p != NULL)
+ {
+ VEC_Subtract(sCameraWorkPtr->currTarget_p, &sCameraWorkPtr->lastTarget, &diff);
+ Camera_VecResetCoordsIfOffsetComponentNotEnabled(sCameraWorkPtr, &diff);
+ Camera_GetVecFromSomeRingBufferMaybe(sCameraWorkPtr, &diff, &offset);
+ Camera_OffsetLookAtPosAndTarget(&offset, sCameraWorkPtr);
+ sCameraWorkPtr->lastTarget = *sCameraWorkPtr->currTarget_p;
+ }
+ NNS_G3dGlbLookAt(&sCameraWorkPtr->lookAt.camPos, &sCameraWorkPtr->lookAt.camUp, &sCameraWorkPtr->lookAt.camTarget);
+ }
+}
+
+THUMB_FUNC void Camera_SetLookAtCamUp(VecFx32 * camUp, struct CameraWork * camera)
+{
+ camera->lookAt.camUp = *camUp;
+}
+
+THUMB_FUNC void Camera_SetFixedTarget(VecFx32 * target, struct CameraWork * camera)
+{
+ camera->currTarget_p = target;
+ camera->lastTarget = *target;
+ camera->enableOffsetX = TRUE;
+ camera->enableOffsetY = TRUE;
+ camera->enableOffsetZ = TRUE;
+}
+
+THUMB_FUNC void Camera_ClearFixedTarget(struct CameraWork * camera)
+{
+ camera->currTarget_p = NULL;
+ camera->enableOffsetX = FALSE;
+ camera->enableOffsetY = FALSE;
+ camera->enableOffsetZ = FALSE;
+}
+
+THUMB_FUNC void Camera_SetPerspectiveClippingPlane(s32 n, s32 f, struct CameraWork * camera)
+{
+ camera->perspective.near = n;
+ camera->perspective.far = f,
+ Camera_ApplyPerspectiveType(camera->perspectiveType, camera);
+}
+
+THUMB_FUNC void Camera_InitWithTargetAndAngle(VecFx32 * target, fx32 distance, struct CameraAngle * angle, u16 perspectiveAngle, u8 perspectiveType, BOOL fixReference, struct CameraWork * camera)
+{
+ Camera_InitInternal(perspectiveAngle, camera);
+ camera->lookAt.camTarget = *target;
+ camera->distance = distance;
+ camera->angle = *angle;
+ Camera_CalcLookAtPosFromTargetAndAngle(camera);
+ Camera_ApplyPerspectiveType(perspectiveType, camera);
+ if (fixReference)
+ {
+ camera->currTarget_p = target;
+ camera->lastTarget = *target;
+ camera->enableOffsetX = TRUE;
+ camera->enableOffsetY = TRUE;
+ camera->enableOffsetZ = TRUE;
+ }
+}
+
+THUMB_FUNC void Camera_InitWithPosAndAngle(VecFx32 * pos, fx32 distance, struct CameraAngle * angle, u16 perspectiveAngle, u8 sp18, struct CameraWork * camera)
+{
+ Camera_InitInternal(perspectiveAngle, camera);
+ camera->lookAt.camPos = *pos;
+ camera->distance = distance;
+ camera->angle = *angle;
+ Camera_CalcLookAtTargetFromPosAndAngle(camera);
+ Camera_ApplyPerspectiveType(sp18, camera);
+}
+
+THUMB_FUNC void Camera_InitWithPosAndTarget(const VecFx32 *target, const VecFx32 *pos, u16 perspectiveAngle, u8 perspectiveType, BOOL setReference, struct CameraWork * camera)
+{
+ VecFx32 vec_from_pos_to_target;
+ Camera_InitInternal(perspectiveAngle, camera);
+
+ camera->lookAt.camTarget = *target;
+ camera->lookAt.camPos = *pos;
+
+ VEC_Subtract(pos, target, &vec_from_pos_to_target);
+ camera->distance = VEC_Mag(&vec_from_pos_to_target);
+ {
+ VecFx32 sp24 = {0, 0, 0}; // unused
+ VecFx32 sp18 = {0, 0, 0}; // unused
+ VecFx32 sp0C = {0, 0, 0};
+ VecFx32 sp00;
+
+ sp00.x = 0;
+ sp00.y = 0;
+ sp00.z = FX32_ONE;
+ sp0C = vec_from_pos_to_target;
+ sp0C.y = 0;
+ camera->angle.y = CalcAngleBetweenVecs(&sp00, &sp0C);
+
+ sp00.x = FX32_ONE;
+ sp00.y = 0;
+ sp00.z = 0;
+ sp0C.x = vec_from_pos_to_target.z;
+ sp0C.z = vec_from_pos_to_target.y;
+ sp0C.y = 0;
+ camera->angle.x = CalcAngleBetweenVecs(&sp00, &sp0C);
+
+ camera->angle.z = 0;
+ }
+ Camera_ApplyPerspectiveType(perspectiveType, camera);
+
+ if (setReference)
+ {
+ camera->currTarget_p = target;
+ camera->lastTarget = *target;
+ camera->enableOffsetX = TRUE;
+ camera->enableOffsetY = TRUE;
+ camera->enableOffsetZ = TRUE;
+ }
+}
+
+THUMB_FUNC void Camera_ApplyPerspectiveType(u8 perspectiveType, struct CameraWork * camera)
+{
+ if (perspectiveType == 0)
+ {
+ NNS_G3dGlbPerspective(camera->perspective.fovySin, camera->perspective.fovyCos, camera->perspective.aspect, camera->perspective.near, camera->perspective.far);
+ camera->perspectiveType = 0;
+ g3dDepthBufferingMode = GX_BUFFERMODE_Z;
+ }
+ else
+ {
+ fx32 y = FX_Mul(FX_Div(camera->perspective.fovySin, camera->perspective.fovyCos), camera->distance);
+ fx32 x = FX_Mul(y, camera->perspective.aspect);
+ NNS_G3dGlbOrtho(y, -y, -x, x, camera->perspective.near, camera->perspective.far);
+ camera->perspectiveType = 1;
+ g3dDepthBufferingMode = GX_BUFFERMODE_Z;
+ }
+}
+
+THUMB_FUNC void Camera_SetPerspectiveAngle(u16 perspectiveAngle, struct CameraWork * camera)
+{
+ camera->perspectiveAngle = perspectiveAngle;
+ camera->perspective.fovySin = FX_SinIdx(camera->perspectiveAngle);
+ camera->perspective.fovyCos = FX_CosIdx(camera->perspectiveAngle);
+ Camera_ApplyPerspectiveType(camera->perspectiveType, camera);
+}
+
+THUMB_FUNC void Camera_AdjustPerspectiveAngle(u16 rotation, struct CameraWork * camera)
+{
+ camera->perspectiveAngle += rotation;
+ camera->perspective.fovySin = FX_SinIdx(camera->perspectiveAngle);
+ camera->perspective.fovyCos = FX_CosIdx(camera->perspectiveAngle);
+ Camera_ApplyPerspectiveType(camera->perspectiveType, camera);
+}
+
+THUMB_FUNC void Camera_OffsetLookAtPosAndTarget(const VecFx32 *delta, struct CameraWork * camera)
+{
+ VEC_Add(&camera->lookAt.camPos, delta, &camera->lookAt.camPos);
+ VEC_Add(&camera->lookAt.camTarget, delta, &camera->lookAt.camTarget);
+}
+
+THUMB_FUNC void Camera_SetAngle(const struct CameraAngle * angle, struct CameraWork * camera)
+{
+ camera->angle = *angle;
+ Camera_CalcLookAtPosFromTargetAndAngle(camera);
+}
+
+THUMB_FUNC void Camera_AdjustAngle(const struct CameraAngle * delta, struct CameraWork * camera)
+{
+ camera->angle.x += delta->x;
+ camera->angle.y += delta->y;
+ camera->angle.z += delta->z;
+ Camera_CalcLookAtTargetFromPosAndAngle(camera);
+}
+
+THUMB_FUNC void Camera_SetDistance(fx32 distance, struct CameraWork * camera)
+{
+ camera->distance = distance;
+ Camera_CalcLookAtPosFromTargetAndAngle(camera);
+}
+
+THUMB_FUNC void Camera_SetLookAtTargetAndRecalcPos(const VecFx32 * target, struct CameraWork * camera)
+{
+ camera->lookAt.camTarget = *target;
+ Camera_CalcLookAtPosFromTargetAndAngle(camera);
+}
+
+THUMB_FUNC u16 Camera_GetPerspectiveAngle(struct CameraWork * camera)
+{
+ return camera->perspectiveAngle;
+}
+
+THUMB_FUNC fx32 Camera_GetDistance(struct CameraWork * camera)
+{
+ return camera->distance;
+}
+
+THUMB_FUNC void Camera_GetAngle(struct CameraAngle * dest, struct CameraWork * camera)
+{
+ *dest = camera->angle;
+}
+
+THUMB_FUNC void Camera_GetLookAtCamTarget(VecFx32 * dest, const struct CameraWork * camera)
+{
+ *dest = camera->lookAt.camTarget;
+}
+THUMB_FUNC void Camera_GetLookAtCamPos(VecFx32 * dest, const struct CameraWork * camera)
+{
+ *dest = camera->lookAt.camPos;
+}
+
+THUMB_FUNC void Camera_SetLookAtCamTarget(const VecFx32 * target, struct CameraWork * camera)
+{
+ camera->lookAt.camTarget = *target;
+}
+
+THUMB_FUNC void Camera_SetLookAtCamPos(const VecFx32 * pos, struct CameraWork * camera)
+{
+ camera->lookAt.camPos = *pos;
+}
diff --git a/include/nitro/FX_types.h b/include/nitro/FX_types.h
new file mode 100644
index 00000000..3c48b6c6
--- /dev/null
+++ b/include/nitro/FX_types.h
@@ -0,0 +1,109 @@
+#ifndef GUARD_FX_TYPES_H
+#define GUARD_FX_TYPES_H
+
+#include "nitro/types.h"
+
+
+typedef s16 fx16;
+typedef s32 fx32;
+typedef s64 fx64;
+typedef s64 fx64c;
+
+#define FX16_INT_MASK 0xF000
+#define FX16_INT_ABS_MASK 0x7000
+#define FX16_FRAC_MASK 0x0FFF
+#define FX16_INT_SHIFT 0xC
+
+#define FX32_INT_MASK 0xFFFFF000
+#define FX32_INT_ABS_MASK 0x7FFFF000
+#define FX32_FRAC_MASK 0x00000FFF
+#define FX32_INT_SHIFT 0xC
+
+#define FX64_INT_MASK 0xFFFFFFFFFFFFF000
+#define FX64_INT_ABS_MASK 0x7FFFFFFFFFFFF000
+#define FX64_FRAC_MASK 0x0000000000000FFF
+#define FX64_INT_SHIFT 0xC
+
+#define FX64C_INT_MASK 0xFFFFFFFF00000000
+#define FX64C_INT_ABS_MASK 0x7FFFFFFF00000000
+#define FX64C_FRAC_MASK 0x00000000FFFFFFFF
+#define FX64C_INT_SHIFT 0x20
+
+#define FX_INT(TYPE, x) (((x) & TYPE ## _INT_MASK) >> TYPE ## _INT_SHIFT)
+#define FX_INT_ABS(TYPE, x) (((x) & TYPE ## _INT_ABS_MASK) >> TYPE ## _INT_SHIFT)
+#define FX_FRAC(TYPE, x) ((x) & TYPE ## _FRAC_MASK)
+
+#define FX16_INT(x) FX_INT(FX16, x)
+#define FX16_INT_ABS(x) FX_INT_ABS(FX16, x)
+#define FX16_FRAC(x) FX_FRAC(FX16, x)
+
+#define FX32_INT(x) FX_INT(FX32, x)
+#define FX32_INT_ABS(x) FX_INT_ABS(FX32, x)
+#define FX32_FRAC(x) FX_FRAC(FX32, x)
+
+#define FX64_INT(x) FX_INT(FX64, x)
+#define FX64_INT_ABS(x) FX_INT_ABS(FX64, x)
+#define FX64_FRAC(x) FX_FRAC(FX64, x)
+
+#define FX64C_INT(x) FX_INT(FX64C, x)
+#define FX64C_INT_ABS(x) FX_INT_ABS(FX64C, x)
+#define FX64C_FRAC(x) FX_FRAC(FX64C, x)
+
+//TODO: clean up these macros
+#define FX32_MUL_NO_ROUND(a, b) ((fx32)(((fx64)(a) * (b)) >> FX32_INT_SHIFT))
+#define FX32_MUL(a, b) ((fx32)((((fx64)(a) * (b) + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT)))
+#define FX32_MUL_ADD_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) + (fx64)c * d) >> FX32_INT_SHIFT))
+//the extra term here is for rounding
+#define FX32_MUL_SUB_MUL(a, b, c, d) ((fx32)(((fx64)(a) * (b) - (fx64)c * d + (1 << (FX32_INT_SHIFT - 1))) >> FX32_INT_SHIFT))
+
+#define FX_MUL_FX32_FX64C(a, b) ((fx32)((((a) * (b) + ((fx64)1 << (FX64C_INT_SHIFT - 1))) >> FX64C_INT_SHIFT)))
+
+#define FX_FX16_TO_F32(x) ((f32)((x) / (f32)(1 << FX16_SHIFT)))
+#define FX_F32_TO_FX16(x) ((fx16)(((x) > 0) ? \
+ (fx16)((x) * (1 << FX16_INT_SHIFT) + 0.5f ) : \
+ (fx16)((x) * (1 << FX16_INT_SHIFT) - 0.5f )))
+#define FX_F32_TO_FX32(x) ((fx32)(((x) > 0) ? \
+ (fx32)((x) * (1 << FX32_INT_SHIFT) + 0.5f ) : \
+ (fx32)((x) * (1 << FX32_INT_SHIFT) - 0.5f )))
+#define FX16_CONST(x) FX_F32_TO_FX16(x)
+#define FX32_CONST(x) FX_F32_TO_FX32(x)
+
+#define FX16_ONE ((fx16)0x1000)
+#define FX32_ONE ((fx32)0x00001000L)
+
+typedef struct Vecx32
+{
+ fx32 x;
+ fx32 y;
+ fx32 z;
+} VecFx32;
+
+typedef struct Vecx16
+{
+ fx16 x;
+ fx16 y;
+ fx16 z;
+} VecFx16;
+
+//Matrices are indexed as [column][row]
+typedef struct Mtx44
+{
+ fx32 _[16];
+} MtxFx44;
+
+typedef struct Mtx43
+{
+ fx32 _[12];
+} MtxFx43;
+
+typedef struct Mtx33
+{
+ fx32 _[9];
+} MtxFx33;
+
+typedef struct Mtx22
+{
+ fx32 _[4];
+} MtxFx22;
+
+#endif //GUARD_FX_TYPES_H
diff --git a/include/nitro/NNS_g3d.h b/include/nitro/NNS_g3d.h
new file mode 100644
index 00000000..f9a3a1b8
--- /dev/null
+++ b/include/nitro/NNS_g3d.h
@@ -0,0 +1,89 @@
+#ifndef GUARD_NNS_G3D_H
+#define GUARD_NNS_G3D_H
+
+#include "fx.h"
+
+typedef enum
+{
+ NNS_G3D_GLB_FLAG_FLUSH_WVP = 0x00000001,
+ NNS_G3D_GLB_FLAG_FLUSH_VP = 0x00000002,
+ NNS_G3D_GLB_FLAG_INVBASE_UPTODATE = 0x00000004,
+ NNS_G3D_GLB_FLAG_INVCAMERA_UPTODATE = 0x00000008,
+ NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE = 0x00000010,
+ NNS_G3D_GLB_FLAG_INVBASECAMERA_UPTODATE = 0x00000020,
+ NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE = 0x00000040,
+
+ NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE = 0x00000080,
+
+ NNS_G3D_GLB_FLAG_SRTCAMERA_UPTODATE = NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE,
+ NNS_G3D_GLB_FLAG_FLUSH_ALT = NNS_G3D_GLB_FLAG_FLUSH_WVP
+}
+ NNSG3dGlbFlag;
+
+typedef struct
+{
+ /*0x000*/ u32 cmd0;
+ /*0x004*/ u32 mtxmode_proj;
+ /*0x008*/ MtxFx44 projMtx;
+
+ /*0x048*/ u32 mtxmode_posvec;
+ /*0x04C*/ MtxFx43 cameraMtx;
+
+ /*0x07C*/ u32 cmd1;
+ /*0x080*/ u32 lightVec[4];
+
+ /*0x090*/ u32 cmd2;
+ /*0x094*/ u32 prmMatColor0;
+ /*0x098*/ u32 prmMatColor1;
+ /*0x09C*/ u32 prmPolygonAttr;
+ /*0x0A0*/ u32 prmViewPort;
+
+ /*0x0A4*/ u32 cmd3;
+ /*0x0A8*/ u32 lightColor[4];
+
+ /*0x0B8*/ u32 cmd4;
+ /*0x0BC*/ MtxFx33 prmBaseRot;
+ /*0x0E0*/ VecFx32 prmBaseTrans;
+ /*0x0EC*/ VecFx32 prmBaseScale;
+ /*0x0F8*/ u32 prmTexImageParam;
+
+ /*0x0FC*/ u32 flag;
+ /*0x100*/ MtxFx43 invCameraMtx;
+ /*0x130*/ MtxFx43 srtCameraMtx;
+ /*0x160*/ MtxFx43 invSrtCameraMtx;
+
+ /*0x190*/ MtxFx43 invBaseMtx;
+
+ /*0x1C0*/ MtxFx44 invProjMtx;
+ /*0x200*/ MtxFx44 invCameraProjMtx;
+
+ /*0x240*/ VecFx32 camPos;
+ /*0x24C*/ VecFx32 camUp;
+ /*0x258*/ VecFx32 camTarget;
+}
+NNSG3dGlb;
+
+extern NNSG3dGlb NNS_G3dGlb;
+
+static inline void NNS_G3dGlbLookAt(const VecFx32 * camPos, const VecFx32 * camUp, const VecFx32 * camTarget)
+{
+ NNS_G3dGlb.camPos = *camPos;
+ NNS_G3dGlb.camUp = *camUp;
+ NNS_G3dGlb.camTarget = *camTarget;
+ MTX_LookAt(camPos, camUp, camTarget, &NNS_G3dGlb.cameraMtx);
+ NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVCAMERA_UPTODATE | NNS_G3D_GLB_FLAG_INVBASECAMERA_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE | NNS_G3D_GLB_FLAG_BASECAMERA_UPTODATE);
+}
+
+static inline void NNS_G3dGlbPerspective(fx32 fovySin, fx32 fovyCos, fx32 aspect, fx32 n, fx32 f)
+{
+ MTX_Perspective(fovySin, fovyCos, aspect, n, f, &NNS_G3dGlb.projMtx);
+ NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE);
+}
+
+static inline void NNS_G3dGlbOrtho(fx32 t, fx32 b, fx32 l, fx32 r, fx32 n, fx32 f)
+{
+ MTX_Ortho(t, b, l, r, n, f, &NNS_G3dGlb.projMtx);
+ NNS_G3dGlb.flag &= ~(NNS_G3D_GLB_FLAG_INVPROJ_UPTODATE | NNS_G3D_GLB_FLAG_INVCAMERAPROJ_UPTODATE);
+}
+
+#endif //GUARD_NNS_G3D_H
diff --git a/include/unk_0201E7D8.h b/include/unk_0201E7D8.h
new file mode 100644
index 00000000..6c3f922d
--- /dev/null
+++ b/include/unk_0201E7D8.h
@@ -0,0 +1,61 @@
+#ifndef POKEDIAMOND_UNK_0201E7D8_H
+#define POKEDIAMOND_UNK_0201E7D8_H
+
+#include "fx.h"
+
+
+struct CameraHistory
+{
+ s32 count;
+ s32 readIdx;
+ s32 writeIdx;
+ s32 writeIdxInit;
+ BOOL overrideEnabled;
+ BOOL enableUpdateX;
+ BOOL enableUpdateY;
+ BOOL enableUpdateZ;
+ VecFx32 * vecs;
+};
+
+struct CameraAngle
+{
+ u16 x;
+ u16 y;
+ u16 z;
+ u16 unused;
+};
+
+struct CameraPerspective
+{
+ fx32 fovySin;
+ fx32 fovyCos;
+ fx32 aspect;
+ fx32 near;
+ fx32 far;
+};
+
+struct CameraLookAt
+{
+ VecFx32 camPos;
+ VecFx32 camTarget;
+ VecFx32 camUp;
+};
+
+struct CameraWork
+{
+ struct CameraPerspective perspective;
+ struct CameraLookAt lookAt;
+ fx32 distance;
+ struct CameraAngle angle;
+ u8 perspectiveType;
+ u16 perspectiveAngle;
+ VecFx32 lastTarget;
+ const VecFx32 * currTarget_p;
+ BOOL enableOffsetX;
+ BOOL enableOffsetY;
+ BOOL enableOffsetZ;
+ struct CameraHistory * history;
+};
+
+
+#endif //POKEDIAMOND_UNK_0201E7D8_H