From 448ca4a3c66111b03a2ea62748f968896843dda1 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Wed, 5 Jun 2024 14:07:53 -0400 Subject: [PATCH] progress on m440/main.c --- include/REL/m440Dll.h | 81 +++++++- src/REL/m440Dll/main.c | 432 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 497 insertions(+), 16 deletions(-) diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h index 5580cf50..ad84ee77 100644 --- a/include/REL/m440Dll.h +++ b/include/REL/m440Dll.h @@ -1,6 +1,7 @@ #include "dolphin/types.h" #include "game/object.h" +extern s32 rand8(void); ////// TYPES ////// typedef struct _unkStruct { @@ -16,27 +17,83 @@ typedef struct _unkStruct2 { s16 unk8; s16 unkA; s32 unkC; + char unk10[0xC]; + s16 unk1C; } unkStruct2; +typedef struct _unkStruct3 { + char unk0[0x34]; + f32 unk34; + char unk38[0x8]; + f32 unk40; +} unkStruct3; + +typedef struct _unkStruct4 { + Vec unk0; + char unkC[0xC]; + f32 unk18; + f32 unk1C; + char unk20[0x4]; + f32 unk24; + f32 unk28; + f32 unk2C; + f32 unk30; + s16 unk34; + s16 unk36; + char unk38[0x10]; + Vec unk48; + Vec unk54; + s16 unk60; + s8 unk62; +} unkStruct4; // sizeof 0x64 + +typedef struct _unkStruct5 { // could be unkStruct3 + s16 unk0; + s16 unk2; + char unk4[0x10]; + s16 unk14; + unkStruct4 *unk18; + char unk1C[0x8]; + GXColor* unk24; // ? +} unkStruct5; + +typedef struct _unkStruct6 { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + char unk8[0x18]; + s32 unk20; + char unk24[0x14]; + void (*unk38)(s32); + char unk3C[0x4]; +} unkStruct6; // 0x40 + +typedef void (*m440Func5)(omObjData*, unkStruct5*, Mtx*); + ////// BSS ////// // object.c extern omObjData* lbl_1_bss_C0[4]; // main.c extern omObjData* lbl_1_bss_6C; extern omObjData* lbl_1_bss_68; -extern void* lbl_1_bss_64; +extern unkStruct6* lbl_1_bss_64; +extern s16 lbl_1_bss_60; extern s16 lbl_1_bss_10[10]; extern s16 lbl_1_bss_E; +extern u8 lbl_1_bss_C; extern u8 lbl_1_bss_B; extern u8 lbl_1_bss_A; extern s16 lbl_1_bss_8; extern s16 lbl_1_bss_6; extern s16 lbl_1_bss_4; extern s8 lbl_1_bss_2; +extern s8 lbl_1_bss_1; extern s8 lbl_1_bss_0; ////// DATA ////// // main.c +extern f32 lbl_1_data_0[5]; extern Vec lbl_1_data_2C; extern Vec lbl_1_data_38; extern GXColor lbl_1_data_44; @@ -44,6 +101,8 @@ extern Vec lbl_1_data_54; extern Vec lbl_1_data_60; extern Vec lbl_1_data_6C; extern unkStruct lbl_1_data_78[3]; +// extern s32 lbl_1_data_E4; +// extern s32 lbl_1_data_E8; ////// FUNCTIONS ////// // main.c @@ -55,5 +114,25 @@ extern s32 fn_1_6C8(void); extern void fn_1_8F0(omObjData* object); extern void fn_1_AE0(omObjData* object); extern s32 fn_1_E14(omObjData* object); +extern s32 fn_1_1138(omObjData* object); +extern void fn_1_16D8(void); +extern void fn_1_1708(void); +extern void fn_1_1768(void); +extern s16 fn_1_17CC(void); +extern s16 fn_1_17F4(void); +extern void fn_1_181C(void); +extern u8 fn_1_1890(void); +extern void fn_1_18E0(void); +extern s32 fn_1_1954(void); +extern void fn_1_19B0(void); +extern void fn_1_1CAC(void); +extern void fn_1_2240(omObjData* object, unkStruct5*, Mtx*); +extern u16 fn_1_23E4(u16); +extern void fn_1_2428(u16, u16); +extern void fn_1_2470(omObjData* object); +extern void fn_1_2A74(omObjData* object); +extern void fn_1_2AB4(omObjData* object); +extern void fn_1_2B04(omObjData* object); +extern void fn_1_2CA8(omObjData* object); // ... extern f32 fn_1_93C0(f32, f32, f32); \ No newline at end of file diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index d4a0fd77..8ab1f4de 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -4,6 +4,7 @@ #include "math.h" #include "game/frand.h" #include "game/hsfman.h" +#include "game/hsfmotion.h" #include "game/wipe.h" #include "game/audio.h" #include "game/objsub.h" @@ -11,26 +12,22 @@ #include "game/sprite.h" // prototypes -void fn_1_3C4(omObjData* object); -void fn_1_434(omObjData* object); -s32 fn_1_4A4(void); -s32 fn_1_6C8(void); -void fn_1_8F0(omObjData* object); -void fn_1_AE0(omObjData* object); -s32 fn_1_E14(omObjData* object); -// ... -u8 fn_1_1138(omObjData* object); -void fn_1_2240(omObjData* object); -u16 fn_1_23E4(s32); -void fn_1_2428(s32, s32); -void fn_1_2470(omObjData* object); +void fn_1_2D28(omObjData* object); +void fn_1_33D4(omObjData* object); +void fn_1_3DD8(omObjData* object); +void fn_1_4660(omObjData* object); +u16 fn_1_4EA8(s32); void fn_1_4EEC(s32, s32); +void fn_1_57B4(s32); +void fn_1_5C2C(s16, HsfObject*, unkStruct6*, s32); f32 fn_1_93C0(f32, f32, f32); +unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*); s16 fn_1_956C(AnimData*, s32, f32, s32, s32); void fn_1_9AB0(s16); -void fn_1_9B94(s16, omObjFunc); +void fn_1_9B94(s16, m440Func5); void fn_1_AE08(Process*); // object.c +s16 fn_1_F0FC(void); void fn_1_F168(void); // bss @@ -38,18 +35,22 @@ omObjData* lbl_1_bss_6C; omObjData* lbl_1_bss_68; s16 lbl_1_bss_10[10]; s16 lbl_1_bss_E; +u8 lbl_1_bss_C; u8 lbl_1_bss_B; u8 lbl_1_bss_A; s16 lbl_1_bss_8; s16 lbl_1_bss_6; s16 lbl_1_bss_4; s8 lbl_1_bss_2; +s8 lbl_1_bss_1; s8 lbl_1_bss_0; // data +f32 lbl_1_data_0[5] = { 90.0f, 80.0f, 100.0f, 70.0f, 110.0f }; Vec lbl_1_data_2C = { 800.0f, 1300.0f, 1000.0f }; Vec lbl_1_data_38 = { 0.0f, 0.0f, 0.0f }; GXColor lbl_1_data_44 = { 0xFF, 0xFF, 0xFF, 0xFF }; +Vec lbl_1_data_48 = { 10.0f, 45.0f, 0.0f }; // UNUSED Vec lbl_1_data_54 = { 1300.0f, 2500.0f, 1300.0f }; Vec lbl_1_data_60 = { 0.0f, 1.0f, 0.0f }; Vec lbl_1_data_6C = { 0.0f, 0.0f, -500.0f }; @@ -188,7 +189,7 @@ void fn_1_8F0(omObjData* arg0) { anim = HuSprAnimRead(HuDataReadNum(0x47000B, 0x10000000)); lbl_1_bss_10[0] = fn_1_956C(anim, 0x40, 50.0f, 0x40, 0x40); - fn_1_9B94(lbl_1_bss_10[0], &fn_1_2240); + fn_1_9B94(lbl_1_bss_10[0], fn_1_2240); Hu3DModelLayerSet(lbl_1_bss_10[0], 7); arg0->func = &fn_1_AE0; } @@ -294,4 +295,405 @@ s32 fn_1_E14(omObjData* arg0) { break; } return 0; +} + +s32 fn_1_1138(omObjData* object) { + unkStruct2* sp8; + f32 var_f31; + f32 var_f30; + s16 temp_r29; + u8 var_r28; + unkStruct3* temp_r30; + unkStruct* var_r31; + + sp8 = (unkStruct2*)lbl_1_bss_6C->data; + temp_r29 = fn_1_F0FC(); + temp_r30 = (unkStruct3*)lbl_1_bss_C0[temp_r29]->data; + switch (lbl_1_bss_6) { + case 0: + if (lbl_1_bss_8 == 0) { + Hu3DMotionShiftSet(lbl_1_bss_C0[temp_r29]->model[0], lbl_1_bss_C0[temp_r29]->motion[1], 0.0f, 7.0f, 0x40000001); + temp_r30->unk40 = temp_r30->unk34; + } + lbl_1_bss_8++; + var_f30 = lbl_1_bss_8 / 30.0f; + if (var_f30 >= 1.0f) { + var_f30 = 1.0f; + if (lbl_1_bss_B == 0) { + lbl_1_bss_B = 1; + Hu3DMotionShiftSet(lbl_1_bss_C0[temp_r29]->model[0], lbl_1_bss_C0[temp_r29]->motion[0], 0.0f, 7.0f, 0x40000001); + } + } + temp_r30->unk34 = (temp_r30->unk40 + (var_f30 * (360.0f - temp_r30->unk40))); + var_r31 = &lbl_1_data_78[1]; // could be fn_1_6C8 + var_r28 = 0; + lbl_1_bss_4++; + var_f31 = lbl_1_bss_4 / 120.0f; + if (var_f31 > 1.0f) { + lbl_1_bss_4 = 0; + var_f31 = 1.0f; + var_r28 = 1; + } + var_f31 = (sin((M_PI * (90.0f * var_f31)) / 180.0) * sin((M_PI * (90.0f * var_f31)) / 180.0)); + CZoom = fn_1_93C0(var_r31[0].zoom, var_r31[1].zoom, var_f31); + Center.x = fn_1_93C0(var_r31[0].center.x, var_r31[1].center.x, var_f31); + Center.y = fn_1_93C0(var_r31[0].center.y, var_r31[1].center.y, var_f31); + Center.z = fn_1_93C0(var_r31[0].center.z, var_r31[1].center.z, var_f31); + CRot.x = fn_1_93C0(var_r31[0].rot.x, var_r31[1].rot.x, var_f31); + CRot.y = fn_1_93C0(var_r31[0].rot.y, var_r31[1].rot.y, var_f31); + CRot.z = fn_1_93C0(var_r31[0].rot.z, var_r31[1].rot.z, var_f31); + if (var_r28 != 0) { + lbl_1_bss_8 = 0; + lbl_1_bss_6++; + } + break; + case 1: + Hu3DMotionShiftSet(lbl_1_bss_C0[temp_r29]->model[0], lbl_1_bss_C0[temp_r29]->motion[5], 0.0f, 7.0f, 0); + HuAudSStreamPlay(1); + lbl_1_bss_6++; + lbl_1_bss_8 = 0; + break; + case 2: + if (++lbl_1_bss_8 > 210.0f) { + lbl_1_bss_6 = 0; + return 1; + } + break; + } + return 0; +} + +void fn_1_16D8(void) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + temp_r31->unk6--; +} + +void fn_1_1708(void) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + if (temp_r31->unk8 != -1) { + MGSeqParamSet(temp_r31->unk8, 2, -1); + temp_r31->unk8 = -1; + temp_r31->unk6 = 0; + } +} + +void fn_1_1768(void) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + if (temp_r31->unk8 == -1) { + temp_r31->unk6 = 0x12C; + temp_r31->unk8 = MGSeqCreate(1, 5, -1, -1); + } +} + +s16 fn_1_17CC(void) { + unkStruct2* var_r31; + + var_r31 = (unkStruct2*)lbl_1_bss_6C->data; + return var_r31->unk6; +} + +s16 fn_1_17F4(void) { + unkStruct2* var_r31; + + var_r31 = (unkStruct2*)lbl_1_bss_6C->data; + return var_r31->unk8; +} + +void fn_1_181C(void) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + if (temp_r31->unk4 == -1) { + temp_r31->unk4 = MGSeqCreate(3, 0); + MGSeqPosSet(temp_r31->unk4, 320.0f, 240.0f); + } +} + +u8 fn_1_1890(void) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + if (temp_r31->unk4 != -1) { + return MGSeqStatGet(temp_r31->unk4); + } else { + return 0; + } +} + +void fn_1_18E0(void) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + temp_r31->unk4 = MGSeqCreate(3, 1); + MGSeqPosSet(temp_r31->unk4, 320.0f, 240.0f); + HuAudSeqFadeOut(temp_r31->unkC, 0x64); +} + +s32 fn_1_1954(void) { + unkStruct2* sp8; + + sp8 = (unkStruct2*)lbl_1_bss_6C->data; + if ((lbl_1_bss_2 != 0) || (lbl_1_bss_1 != 0)) { + return 0; + } else { + return 1; + } +} + +void fn_1_19B0(void) { + f32 temp_f29; + f32 var_f28; + f32 var_f27; + f32 temp_f31; + f32 var_f30; + s16 var_r31; + + var_f30 = (((rand8() << 8) | rand8()) % 361); + + for (var_r31 = 1; var_r31 < 4; var_r31++, var_f30+=120.0f) { + temp_f31 = 0.01f * ((((rand8() << 8) | rand8()) % 51) + 50); + temp_f29 = (temp_f31 * (200.0 * sin((M_PI * var_f30) / 180.0))); + var_f28 = (temp_f31 * (200.0 * cos((M_PI * var_f30) / 180.0))); + var_f27 = 0.0f; + Hu3DModelPosSet(lbl_1_bss_10[var_r31], temp_f29, 300.0f + var_f28, var_f27); + temp_f31 = 0.1f * ((((rand8() << 8) | rand8()) % 11) + 25); + Hu3DModelScaleSet(lbl_1_bss_10[var_r31], temp_f31, temp_f31, temp_f31); + Hu3DModelAttrReset(lbl_1_bss_10[var_r31], 1); + Hu3DModelAttrReset(lbl_1_bss_10[var_r31], 0x40000002); + } +} + +void fn_1_1CAC(void) { + s16 var_r31; + + for (var_r31 = 1; var_r31 < 4; var_r31++) { + Hu3DMotionTimeSet(lbl_1_bss_10[var_r31], 0.0f); + Hu3DModelAttrSet(lbl_1_bss_10[var_r31], 1); + Hu3DModelAttrSet(lbl_1_bss_10[var_r31], 0x40000002); + } +} + +void fn_1_1D54(f32 arg8, f32 arg9, f32 argA, s16 arg0, f32 argB, s16 arg1) { + Vec sp30; + Vec sp24; + GXColor sp1E; + f32 temp_f30; + f32 temp_f29; + f32 temp_f31; + s16 var_r30; + unkStruct4* var_r31; + + for (var_r30 = 0; var_r30 < arg0; var_r30++) { + temp_f31 = argB + ((((rand8() << 8) | rand8()) % 11) - 5); + temp_f30 = sin((M_PI * temp_f31) / 180.0); + temp_f29 = cos((M_PI * temp_f31) / 180.0); + sp30.x = arg8 + ((((rand8() << 8) | rand8()) % 21) - 10); + sp30.y = arg9 + ((((rand8() << 8) | rand8()) % 21) - 10); + sp30.z = argA; + sp24.x = sp24.y = sp24.z = 1.0f; + sp1E.r = sp1E.g = sp1E.b = 0xFF; + sp1E.a = 0x80; + var_r31 = fn_1_942C(arg1, &sp30, &sp24, 0.0f, &sp1E); + if (!var_r31) break; + + var_r31->unk34 = 0; + var_r31->unk36 = ((rand8() << 8) | rand8()) % 2 + 2; + var_r31->unk0.x = (temp_f30 * (0.1f * ((((rand8() << 8) | rand8()) % 41) + 0x28))); + var_r31->unk0.y = (temp_f29 * (0.1f * ((((rand8() << 8) | rand8()) % 61) + 0x3C))); + var_r31->unk0.z = 0.0f; + var_r31->unk18 = (0.01f * var_r31->unk0.x); + var_r31->unk1C = 0.1f; + var_r31->unk24 = 1.5f; + var_r31->unk28 = ((0.1f * ((((rand8() << 8) | rand8()) % 7) + 2)) / (var_r31->unk36 * 0xE)); + var_r31->unk2C = sp1E.a; + var_r31->unk30 = (var_r31->unk2C / (var_r31->unk36 * 0xE)); + } +} + +void fn_1_2240(omObjData* object, unkStruct5* arg1, Mtx* arg2) { + unkStruct4* var_r31; + GXColor* var_r30; + s16 var_r29; + + var_r31 = arg1->unk18; + var_r30 = arg1->unk24; + + for (var_r29 = 0; var_r29 < arg1->unk0; var_r29++, var_r31++, var_r30++) { + if (var_r31->unk62 != 0) { + var_r31->unk54.x += var_r31->unk0.x; + var_r31->unk54.y += var_r31->unk0.y; + var_r31->unk54.z += var_r31->unk0.z; + var_r31->unk0.x -= var_r31->unk18; + var_r31->unk0.y += var_r31->unk1C; + var_r31->unk18 = (0.001f * var_r31->unk0.x); + var_r31->unk1C *= 1.05f; + var_r31->unk24 += var_r31->unk28; + var_r31->unk48.x = var_r31->unk48.y = var_r31->unk48.z = var_r31->unk24; + var_r31->unk2C -= var_r31->unk30; + var_r30->a = var_r31->unk2C > 255.0f ? 255 : (u8)var_r31->unk2C; + var_r31->unk34++; + if (var_r31->unk34 >= var_r31->unk36) { + var_r31->unk34 = 0; + var_r31->unk60++; + } + if (var_r31->unk60 >= arg1->unk14 - 2) { + var_r31->unk62 = 0; + } + } + } +} + +u16 fn_1_23E4(u16 arg0) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + if (!temp_r31) { + return 0; + } + return temp_r31->unk0 & arg0; +} + +void fn_1_2428(u16 arg0, u16 arg1) { + unkStruct2* temp_r31; + + temp_r31 = (unkStruct2*)lbl_1_bss_6C->data; + temp_r31->unk0 = (temp_r31->unk0 & ~arg0); + temp_r31->unk0 = (temp_r31->unk0 | arg1); +} + +void fn_1_2470(omObjData* arg0) { + ModelData* temp_r29; + HsfObject* temp_r28; + f32 temp_f31; + f32 var_f30; + f32 var_f29; + s16 temp_r26; + s16 var_r30; + unkStruct2* temp_r27; + + arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x34, 0x10000000); + temp_r27 = arg0->data; + arg0->stat |= 0x100; + arg0->model[0] = Hu3DModelCreateFile(0x470008); + arg0->model[1] = Hu3DModelCreateFile(0x470009); + arg0->model[2] = Hu3DModelCreateFile(0x470000); + arg0->model[3] = Hu3DModelCreateFile(0x470002); + arg0->model[8] = Hu3DModelCreateFile(0x470003); + arg0->model[6] = Hu3DModelCreateFile(0x470004); + arg0->model[4] = Hu3DModelCreateFile(0x470005); + arg0->model[5] = Hu3DModelCreateFile(0x470006); + arg0->model[7] = Hu3DModelCreateFile(0x470007); + temp_r26 = Hu3DModelCreateFile(0x470001); + Hu3DModelAttrSet(arg0->model[0], 0x40000001); + Hu3DModelAttrSet(arg0->model[2], 0x20000); + Hu3DModelAttrSet(arg0->model[2], 0x40000002); + Hu3DModelAttrSet(temp_r26, 1); + + for (var_r30 = 0; var_r30 < 8; var_r30++) { + Hu3DModelLayerSet(arg0->model[var_r30], 1); + } + Hu3DModelPosSet(arg0->model[2], 0.0f, 5000.0f, 0.0f); + Hu3DModelPosSet(arg0->model[3], 0.0f, 5000.0f, 0.0f); + Hu3DModelShadowSet(arg0->model[2]); + Hu3DModelShadowSet(arg0->model[3]); + Hu3DModelShadowMapSet(arg0->model[0]); + + for (var_r30 = 0; var_r30 < 5; var_r30++) { + temp_f31 = (450.0 * cos(M_PI * lbl_1_data_0[var_r30] / 180.0)); + var_f29 = (450.0 * sin(M_PI * lbl_1_data_0[var_r30] / 180.0)); + Hu3DModelPosSet(arg0->model[var_r30+4], temp_f31, 0.0f, var_f29); + var_f30 = 90.0f - lbl_1_data_0[var_r30]; + Hu3DModelRotSet(arg0->model[var_r30+4], 0.0f, var_f30, 0.0f); + Hu3DMotionSpeedSet(arg0->model[var_r30+4], 0.0f); + } + temp_r27->unk0 = 0; + temp_r27->unk1C = 5; + temp_r29 = &Hu3DData[temp_r26]; + temp_r28 = temp_r29->hsfData->root; + lbl_1_bss_60 = temp_r28->data.childrenCount; + lbl_1_bss_64 = HuMemDirectMalloc(HEAP_DATA, lbl_1_bss_60 * 64); + OSReport("Koopa Object Count %d\n", temp_r29->hsfData->objectCnt); + + for (var_r30 = 0; var_r30 < lbl_1_bss_60; var_r30++) { + lbl_1_bss_64[var_r30].unk20 = 0; + } + + for (var_r30 = 0; var_r30 < lbl_1_bss_60; var_r30++) { + lbl_1_bss_64[var_r30].unk4 = var_r30; + fn_1_5C2C(temp_r26, temp_r28->data.children[var_r30], &lbl_1_bss_64[var_r30], 2); + if (lbl_1_bss_64[var_r30].unk20 != 0) { + Hu3DModelAttrSet(lbl_1_bss_64[var_r30].unk0, 1); + Hu3DModelPosSet(lbl_1_bss_64[var_r30].unk0, 0.0f, 250.0f, 0.0f); + lbl_1_bss_64[var_r30].unk38 = &fn_1_57B4; + } + } + arg0->func = &fn_1_2A74; +} + +void fn_1_2A74(omObjData* object) { + fn_1_2AB4(object); + fn_1_2CA8(object); + fn_1_4660(object); +} + +void fn_1_2AB4(omObjData* object) { + unkStruct2* sp8; + + sp8 = (unkStruct2*)object->data; + + switch (fn_1_4EA8(0x20)) { + case 0x20: + fn_1_2B04(object); + } +} + +s16 lbl_1_data_E4[2] = {0, 0}; +s16 lbl_1_data_E8[2] = {0, 0}; + +void fn_1_2B04(omObjData* object) { + f32 temp_f31; + unkStruct* temp_r31; + + temp_r31 = (unkStruct*)object->data; + switch (lbl_1_data_E4[0]) { + case 0: + lbl_1_data_E8[0]++; + temp_f31 = lbl_1_data_E8[0] / 360.0f; + if (temp_f31 > 1.0f) { + temp_f31 = 1.0f; + Hu3DModelAttrSet(object->model[3], 1); + lbl_1_data_E8[0] = 0; + lbl_1_data_E4[0] = 0; + fn_1_4EEC(0x20, 0); + return; + } + temp_f31 = sin((M_PI * (90.0f * temp_f31)) / 180.0); + temp_r31->center.y = (250.0f + (1750.0f * temp_f31)); + } + Hu3DModelPosSet(object->model[3], temp_r31->center.x, temp_r31->center.y, temp_r31->center.z); + Hu3DModelRotSet(object->model[3], temp_r31->rot.x, temp_r31->rot.y, temp_r31->rot.z); +} + +void fn_1_2CA8(omObjData* arg0) { + unkStruct2* sp8; + + sp8 = (unkStruct2*)arg0->data; + + switch (fn_1_4EA8(7)) { + case 1: + fn_1_2D28(arg0); + break; + case 3: + fn_1_33D4(arg0); + break; + case 4: + case 5: + fn_1_3DD8(arg0); + } } \ No newline at end of file