summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2021-06-12 20:24:32 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2021-06-12 20:24:32 -0400
commit17055159a4118b09acdf3481fd4ecb19faa96f1a (patch)
tree3383c9608f54dd365584f59668c6f53d543c5d07
parent5bf6a89e8ed480b72f901e3523b7ff7b4d695249 (diff)
Decompile unk_0201E7D8, 1
-rw-r--r--arm9/arm9.lsf1
-rw-r--r--arm9/asm/unk_0201E7D8_s.s (renamed from arm9/asm/unk_0201E7D8.s)400
-rw-r--r--arm9/lib/include/fx.h25
-rw-r--r--arm9/src/unk_0201E7D8.c123
4 files changed, 156 insertions, 393 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 6b0a49a7..88cf83b5 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -71,6 +71,7 @@ Static arm9
Object unk_0201E00C.o
Object GX_layers.o
Object unk_0201E7D8.o
+ Object unk_0201E7D8_s.o
Object unk_0201F06C.o
Object unk_020208B8.o
Object timer3.o
diff --git a/arm9/asm/unk_0201E7D8.s b/arm9/asm/unk_0201E7D8_s.s
index abc19a78..6a0f205f 100644
--- a/arm9/asm/unk_0201E7D8.s
+++ b/arm9/asm/unk_0201E7D8_s.s
@@ -2,403 +2,17 @@
.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
+ .extern UNK_02105BB8
+ .extern UNK_021C59A4
.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
+ .extern FUN_0201E7D8
+ .extern FUN_0201E8B8
+ .extern FUN_0201E99C
+ .extern FUN_0201E9E8
+ .extern FUN_0201EA08
thumb_func_start FUN_0201EABC
FUN_0201EABC: ; 0x0201EABC
diff --git a/arm9/lib/include/fx.h b/arm9/lib/include/fx.h
index 38506194..18bb09f2 100644
--- a/arm9/lib/include/fx.h
+++ b/arm9/lib/include/fx.h
@@ -172,4 +172,29 @@ 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)
+
#endif //GUARD_FX_H
diff --git a/arm9/src/unk_0201E7D8.c b/arm9/src/unk_0201E7D8.c
new file mode 100644
index 00000000..5915c4f5
--- /dev/null
+++ b/arm9/src/unk_0201E7D8.c
@@ -0,0 +1,123 @@
+#include "global.h"
+#include "fx.h"
+
+struct UnkStruct_0201E7D8_64
+{
+ s32 unk_00;
+ s32 unk_04;
+ s32 unk_08;
+ s32 unk_0C;
+ s32 unk_10;
+ s32 unk_14;
+ s32 unk_18;
+ s32 unk_1C;
+ struct Vecx32 * unk_20;
+};
+
+struct UnkStruct_0201E7D8
+{
+ fx32 unk_00;
+ fx32 unk_04;
+ fx32 unk_08;
+ fx32 unk_0C;
+ fx32 unk_10;
+ struct Vecx32 unk_14;
+ struct Vecx32 unk_20;
+ fx32 unk_2C;
+ fx32 unk_30;
+ fx32 unk_34;
+ fx32 unk_38;
+ u16 unk_3C;
+ u16 unk_3E;
+ u8 filler_40[6];
+ u16 unk_46;
+ u8 filler_48[12];
+ u32 unk_54;
+ u32 unk_58;
+ u32 unk_5C;
+ u32 unk_60;
+ struct UnkStruct_0201E7D8_64 * unk_64;
+};
+
+BOOL UNK_02105BB8 = TRUE;
+void * UNK_021C59A4;
+
+THUMB_FUNC void FUN_0201E7D8(struct UnkStruct_0201E7D8 * a0)
+{
+ u16 r4 = -a0->unk_3C;
+ a0->unk_14.x = FX_Mul(FX_Mul(FX_SinIdx(a0->unk_3E), a0->unk_38), FX_CosIdx(a0->unk_3C));
+ a0->unk_14.z = FX_Mul(FX_Mul(FX_CosIdx(a0->unk_3E), a0->unk_38), FX_CosIdx(a0->unk_3C));
+ a0->unk_14.y = FX_Mul(FX_SinIdx(r4), a0->unk_38);
+ VEC_Add(&a0->unk_14, &a0->unk_20, &a0->unk_14);
+}
+
+THUMB_FUNC void FUN_0201E8B8(struct UnkStruct_0201E7D8 * a0)
+{
+ u16 r4 = -a0->unk_3C;
+ a0->unk_20.x = -FX_Mul(FX_Mul(FX_SinIdx(a0->unk_3E), a0->unk_38), FX_CosIdx(a0->unk_3C));
+ a0->unk_20.z = -FX_Mul(FX_Mul(FX_CosIdx(a0->unk_3E), a0->unk_38), FX_CosIdx(a0->unk_3C));
+ a0->unk_20.y = -FX_Mul(FX_SinIdx(r4), a0->unk_38);
+ VEC_Add(&a0->unk_20, &a0->unk_14, &a0->unk_20);
+}
+
+THUMB_FUNC void FUN_0201E99C(u16 a0, struct UnkStruct_0201E7D8 * a1)
+{
+ a1->unk_46 = a0;
+ a1->unk_00 = FX_SinIdx(a0);
+ a1->unk_04 = FX_CosIdx(a0);
+ a1->unk_08 = FX32_CONST(1.33333333);
+ a1->unk_0C = FX32_CONST(150);
+ a1->unk_10 = FX32_CONST(900);
+ a1->unk_2C = 0;
+ a1->unk_30 = FX32_ONE;
+ a1->unk_34 = 0;
+ a1->unk_54 = 0;
+ a1->unk_58 = 0;
+ a1->unk_5C = 0;
+ a1->unk_60 = 0;
+ a1->unk_64 = NULL;
+}
+
+THUMB_FUNC void FUN_0201E9E8(struct UnkStruct_0201E7D8 * a0, struct Vecx32 * a1)
+{
+ if (a0->unk_58 == 0)
+ a1->x = 0;
+ if (a0->unk_5C == 0)
+ a1->y = 0;
+ if (a0->unk_60 == 0)
+ a1->z = 0;
+}
+
+THUMB_FUNC void FUN_0201EA08(struct UnkStruct_0201E7D8 * a0, struct Vecx32 * a1, struct Vecx32 * a2)
+{
+ s32 * r7;
+ s32 * sp0;
+ if (a0->unk_64 == NULL)
+ {
+ *a2 = *a1;
+ }
+ else
+ {
+ r7 = &a0->unk_64->unk_04;
+ sp0 = &a0->unk_64->unk_08;
+ if (a0->unk_64->unk_10 == 0)
+ {
+ *a2 = *a1;
+ if (*r7 == a0->unk_64->unk_0C)
+ a0->unk_64->unk_10 = 1;
+ }
+ else
+ {
+ *a2 = a0->unk_64->unk_20[a0->unk_64->unk_04];
+ }
+ *r7 = (*r7 + 1) % a0->unk_64->unk_00;
+ a0->unk_64->unk_20[*sp0] = *a1;
+ *sp0 = (*sp0 + 1) % a0->unk_64->unk_00;
+ if (a0->unk_64->unk_14 == 0)
+ a2->x = a1->x;
+ if (a0->unk_64->unk_18 == 0)
+ a2->y = a1->y;
+ if (a0->unk_64->unk_1C == 0)
+ a2->z = a1->z;
+ }
+}