diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2021-06-12 20:24:32 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2021-06-12 20:24:32 -0400 |
commit | 17055159a4118b09acdf3481fd4ecb19faa96f1a (patch) | |
tree | 3383c9608f54dd365584f59668c6f53d543c5d07 | |
parent | 5bf6a89e8ed480b72f901e3523b7ff7b4d695249 (diff) |
Decompile unk_0201E7D8, 1
-rw-r--r-- | arm9/arm9.lsf | 1 | ||||
-rw-r--r-- | arm9/asm/unk_0201E7D8_s.s (renamed from arm9/asm/unk_0201E7D8.s) | 400 | ||||
-rw-r--r-- | arm9/lib/include/fx.h | 25 | ||||
-rw-r--r-- | arm9/src/unk_0201E7D8.c | 123 |
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;
+ }
+}
|