From d117010759f2800adf09cc221832dd624f3fd496 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Tue, 25 Jun 2024 12:45:30 -0400 Subject: [PATCH] halfway point (fn_1_E034) --- include/REL/m440Dll.h | 63 ++- src/REL/m440Dll/main.c | 2 +- src/REL/m440Dll/object.c | 930 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 991 insertions(+), 4 deletions(-) diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h index 9844466f..0e03a87f 100644 --- a/include/REL/m440Dll.h +++ b/include/REL/m440Dll.h @@ -202,10 +202,51 @@ typedef struct _unkStruct15 { void* unk1C; } unkStruct15; +// object.c +typedef struct _unkObjStruct { + s32 unk0; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + s16 unkC; + s16 unkE; + s16 unk10; + s16 unk12; + s16 unk14; + s16 unk16; + Vec unk18; + Vec unk24; + Vec unk30; + Vec unk3C; + u8 unk48; + s16 unk4A; + f32 unk4C; + s16 unk50; + s16 unk52; + s16 unk54; + s16 unk56; + s16 unk58; + s16 unk5A; + f32 unk5C; + s16 unk60; + s16 unk62; + char unk64[0x4]; + f32 unk68; + f32 unk6C; + f32 unk70; +} unkObjStruct; + ////// BSS ////// // object.c extern omObjData* lbl_1_bss_C0[4]; +extern s16 lbl_1_bss_B8[4]; +extern Vec lbl_1_bss_88[4]; +extern f32 lbl_1_bss_84; +extern s16 lbl_1_bss_74; +extern u8 lbl_1_bss_72; +extern s16 lbl_1_bss_70; // main.c extern omObjData* lbl_1_bss_6C; extern omObjData* lbl_1_bss_68; @@ -248,6 +289,10 @@ extern s16 lbl_1_data_104[2]; extern s16 lbl_1_data_108[2]; // object.c extern s16 lbl_1_data_1D8; +extern s16 lbl_1_data_1DA; +extern u32 lbl_1_data_1DC[8][2]; +extern f32 lbl_1_data_21C[4]; +extern f32 lbl_1_data_250; ////// FUNCTIONS ////// // main.c @@ -268,7 +313,7 @@ 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 u8 fn_1_1954(void); extern void fn_1_19B0(void); extern void fn_1_1CAC(void); extern void fn_1_2240(ModelData* data, unkStruct5*, Mtx); @@ -326,9 +371,25 @@ void fn_1_A390(ModelData*, Mtx); extern void fn_1_AA94(void); // object.c extern void fn_1_AE08(Process*); +extern void fn_1_AEE4(omObjData*); +extern void fn_1_B17C(omObjData*); +extern void fn_1_B180(omObjData*); +extern void fn_1_B3A4(omObjData*); +extern void fn_1_B884(omObjData*, unkObjStruct*); +extern void fn_1_C1D4(omObjData*, unkObjStruct*); +extern void fn_1_C944(omObjData*, unkObjStruct*); +extern s16 fn_1_CFAC(unkObjStruct*, u8); +extern void fn_1_D24C(unkObjStruct*, f32, f32); +extern void fn_1_D34C(omObjData*, unkObjStruct*); +extern void fn_1_D7F8(omObjData*, unkObjStruct*); +extern void fn_1_E034(omObjData*, unkObjStruct*); +extern u8 fn_1_E8AC(omObjData*, unkObjStruct*); extern void fn_1_EE78(void); extern void fn_1_EF50(void); extern s16 fn_1_F0FC(void); extern void fn_1_F168(void); extern void fn_1_F228(void); +// ... +extern void fn_1_ED88(omObjData*, s32, s32); +extern void fn_1_F4D4(unkObjStruct*, s32, s32); extern s32 fn_1_F4FC(s32); \ No newline at end of file diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index 5603491c..d7a2207e 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -430,7 +430,7 @@ void fn_1_18E0(void) { HuAudSeqFadeOut(temp_r31->unkC, 0x64); } -s32 fn_1_1954(void) { +u8 fn_1_1954(void) { unkStruct2* sp8; sp8 = (unkStruct2*)lbl_1_bss_6C->data; diff --git a/src/REL/m440Dll/object.c b/src/REL/m440Dll/object.c index cc6e6d54..e2e1f247 100644 --- a/src/REL/m440Dll/object.c +++ b/src/REL/m440Dll/object.c @@ -1,12 +1,41 @@ #include "REL/m440Dll.h" +#include "string.h" +#include "math.h" +#include "ext_math.h" +#include "game/flag.h" +#include "game/gamework_data.h" +#include "game/chrman.h" +#include "game/hsfmotion.h" +#include "game/pad.h" + // bss omObjData* lbl_1_bss_C0[4]; +s16 lbl_1_bss_B8[4]; +Vec lbl_1_bss_88[4]; +f32 lbl_1_bss_84; +s16 lbl_1_bss_74; +u8 lbl_1_bss_72; +s16 lbl_1_bss_70; // data +s16 lbl_1_data_1D8 = 2; +s16 lbl_1_data_1DA = -1; +u32 lbl_1_data_1DC[8][2] = { + { 0x5F0000, 0 }, + { 0x5F0002, 0 }, + { 0x5F0003, 0 }, + { 0x5F0038, 0 }, + { 0x5F0048, 0 }, + { 0x5F0017, 0 }, + { 0x47000C, 1 }, + { 0x5F0036, 0 } +}; +f32 lbl_1_data_21C[4] = { + 210.0f, 190.0f, 170.0f, 0.0f +}; // prototypes -void fn_1_AEE4(omObjData*); void fn_1_B180(omObjData*); void fn_1_AE08(Process* arg0) { @@ -15,10 +44,907 @@ void fn_1_AE08(Process* arg0) { omMakeGroupEx(arg0, 0, 4); omGetGroupMemberListEx(arg0, 0); -loop_2: for (var_r31 = 0; var_r31 < 4; var_r31++) { lbl_1_bss_C0[var_r31] = omAddObjEx(arg0, 0x64, 9, 8, 0, fn_1_AEE4); lbl_1_bss_C0[var_r31]->work[0] = var_r31; } omAddObjEx(arg0, 0x65, 0, 0, -1, fn_1_B180); } + +void fn_1_AEE4(omObjData* arg0) { + f32 var_f31; + s32 temp_r28; + s16 var_r29; + unkObjStruct* temp_r31; + + arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x78, 0x10000000); + temp_r31 = (unkObjStruct*)arg0->data; + memset(temp_r31, 0, 0x78); + arg0->stat |= 0x100; + temp_r31->unk4 = arg0->work[0]; + temp_r31->unk6 = GWPlayerCfg[temp_r31->unk4].pad_idx; + temp_r31->unk8 = GWPlayerCfg[temp_r31->unk4].character; + arg0->model[0] = CharModelCreate(temp_r31->unk8, 4); + Hu3DModelLayerSet(arg0->model[0], 1); + Hu3DModelShadowSet(arg0->model[0]); + + for (var_r29 = 0; var_r29 < 8; var_r29++) { + if (lbl_1_data_1DC[var_r29][1] == 0) { + arg0->motion[var_r29] = CharModelMotionCreate(temp_r31->unk8, lbl_1_data_1DC[var_r29][0]); + } else { + arg0->motion[var_r29] = CharModelMotionCreate(temp_r31->unk8, temp_r31->unk8 + lbl_1_data_1DC[var_r29][0]); + } + } + CharModelVoiceEnableSet(temp_r31->unk8, arg0->motion[4], 0); + CharModelMotionDataClose(temp_r31->unk8); + Hu3DMotionSet(arg0->model[0], arg0->motion[0]); + temp_r31->unk18.x = temp_r31->unk18.y = temp_r31->unk18.z = 0.0f; + temp_r31->unk30.x = temp_r31->unk30.y = temp_r31->unk30.z = 0.0f; + temp_r31->unk3C.y = 90.0f; + temp_r31->unkC = 0; + temp_r31->unkE = 0x78; + temp_r31->unk10 = temp_r31->unk12 = temp_r31->unk14 = 0; + if (temp_r31->unk8 == 5) { + var_f31 = 350.0f; + } else { + var_f31 = 410.0f; + } + temp_r31->unk5C = var_f31; + temp_r28 = temp_r31->unk4; + if (_CheckFlag(0x1000CU) == 0) { + GWPlayer[temp_r28].coin_win = 0; + } + arg0->func = fn_1_B17C; +} + +void fn_1_B17C(omObjData* arg0) { + return; +} + +void fn_1_B180(omObjData* arg0) { + s16 var_r29; + s16 var_r31; + s32 var_r28; + u32 temp_r0; + u32 temp_r3; + u32 temp_r3_2; + unkObjStruct* temp_r30; + + var_r28 = GWSystem.player_curr; + if (var_r28 < 0) { + var_r28 = 0; + } + var_r29 = var_r28; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_B8[var_r31] = var_r29; + var_r29 = (var_r29 + 1) % 4; + } + lbl_1_bss_88->x = (700.0f * cos(M_PI/2 - M_PI/9)); + lbl_1_bss_88->z = (700.0f * sin(M_PI/2 - M_PI/9)); + + for (var_r31 = 1; var_r31 < 4; var_r31++) { + lbl_1_bss_88[var_r31].x = lbl_1_bss_88[var_r31 - 1].x - 150.0f; + lbl_1_bss_88[var_r31].z = lbl_1_bss_88->z; + } + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + temp_r30 = lbl_1_bss_C0[lbl_1_bss_B8[var_r31]]->data; + temp_r30->unkA = var_r31; + temp_r30->unk24.x = (lbl_1_bss_88[var_r31].x - 1000.0f); + temp_r30->unk24.y = 0.0f; + temp_r30->unk24.z = lbl_1_bss_88->z; + } + arg0->func = fn_1_B3A4; +} + +void fn_1_B3A4(omObjData* arg0) { + f32 sp14; + ModelData* sp8; + f32 var_f31; + s16 var_r28; + s16 var_r29; + omObjData* var_r30; + unkObjStruct* var_r31; + + for (var_r29 = 0; var_r29 < 4; var_r29++) { + if (lbl_1_bss_B8[var_r29] != -1) { + var_r30 = lbl_1_bss_C0[lbl_1_bss_B8[var_r29]]; + sp8 = &Hu3DData[var_r30->model[0]]; + var_r31 = (unkObjStruct*)var_r30->data; + switch(var_r31->unk0 & 0xF) { + case 1: + var_r31->unkC++; + var_f31 = (f32)var_r31->unkC / var_r31->unkE; + if (var_f31 >= 1.0f) { + var_f31 = 1.0f; + var_r31->unkC = 0; + if (lbl_1_bss_72 == 0) { + lbl_1_bss_72 = 1; + fn_1_F228(); + } else { + fn_1_F4D4(var_r31, 15, 7); + Hu3DMotionShiftSet(var_r30->model[0], var_r30->motion[1], 0.0f, 7.0f, 0x40000001); + } + } + var_r28 = (var_r31->unkA == -1) ? 0 : var_r31->unkA; + var_r31->unk18.x = var_r31->unk24.x + (lbl_1_bss_88[var_r28].x - var_r31->unk24.x) * var_f31; + var_r31->unk18.y = 0.0f; + var_r31->unk18.z = var_r31->unk24.z + (lbl_1_bss_88[var_r28].z - var_r31->unk24.z) * var_f31; + var_r31->unk14++; + var_f31 = var_r31->unk14 / 20.0f; + if (var_f31 >= 1.0f) { + var_f31 = 1.0f; + } + var_r31->unk30.y = var_r31->unk3C.y + (90.0f - var_r31->unk3C.y) * var_f31; + break; + case 7: + var_r31->unkC++; + var_f31 = (f32)var_r31->unkC / 40.0f; + if (var_f31 >= 1.0f) { + var_f31 = 1.0f; + var_r31->unkC = 0; + fn_1_F4D4(var_r31, 15, 8); + Hu3DMotionShiftSet(var_r30->model[0], var_r30->motion[0], 0.0f, 7.0f, 0x40000001); + } + var_r31->unk30.y = 90.0f + (lbl_1_data_21C[var_r31->unkA] - 90.0f) * var_f31; + var_r31->unk3C = var_r31->unk30; + break; + case 2: + fn_1_B884(var_r30, var_r31); + break; + case 3: + if (fn_1_1954() != 0) { + fn_1_16D8(); + fn_1_C1D4(var_r30, var_r31); + fn_1_C944(var_r30, var_r31); + fn_1_D34C(var_r30, var_r31); + } + break; + case 4: + fn_1_D7F8(var_r30, var_r31); + break; + case 5: + fn_1_E034(var_r30, var_r31); + break; + case 6: + if (fn_1_E8AC(var_r30, var_r31) != 0) { + lbl_1_bss_B8[var_r29] = -1; + } + break; + case 0: + case 8: + break; + } + Hu3DModelPosSet(var_r30->model[0], var_r31->unk18.x, var_r31->unk18.y, var_r31->unk18.z); + Hu3DModelRotSet(var_r30->model[0], var_r31->unk30.x, var_r31->unk30.y, var_r31->unk30.z); + } + } +} + +f32 lbl_1_data_250 = 70.0f; + +void fn_1_B884(omObjData* arg0, unkObjStruct* arg1) { + s16 sp8[5] = {3, 1, 0, 2, 4}; + f32 var_f29; + f32 var_f28; + f32 var_f31; + f32 var_f30; + s16 temp_r0; + s16 temp_r0_2; + s16 temp_r3; + s16 var_r30; + + switch (lbl_1_bss_74) { + case 0: + lbl_1_data_250 -= 0.5f; + if (lbl_1_data_250 <= 45.0f) { + lbl_1_data_250 = 45.0f; + lbl_1_bss_74++; + } + arg1->unk24 = arg1->unk18; + arg1->unk18.x = (700.0 * cos((M_PI * lbl_1_data_250) / 180.0)); + arg1->unk18.z = (700.0 * sin((M_PI * lbl_1_data_250) / 180.0)); + var_f29 = (arg1->unk18.x - arg1->unk24.x); + var_f28 = (arg1->unk18.z - arg1->unk24.z); + var_f30 = (180.0 * (atan2(var_f29, var_f28) / M_PI)); + if (var_f30 < 0.0f) { + var_f30 += 360.0f; + } + arg1->unk68 = var_f30; + arg1->unk30.y = var_f30; + return; + case 1: + arg1->unkE++; + var_f31 = arg1->unkE / 10.0f; + if (var_f31 >= 1.0f) { + var_f31 = 1.0f; + } + var_f30 = 225.0f; + arg1->unk30.y = arg1->unk68 + (var_f31 * (var_f30 - arg1->unk68)); + arg1->unkC++; + var_f31 = arg1->unkC / 50.0f; + if (var_f31 >= 1.0f) { + var_f31 = 1.0f; + arg1->unkC = arg1->unkE = 0; + arg1->unk68 = arg1->unk30.y; + + for (var_r30 = 0; var_r30 < 5; var_r30++) { + if (lbl_1_data_14[sp8[var_r30]] != 0) { + arg1->unk4A = arg1->unk60 = sp8[var_r30]; + break; + } + } + lbl_1_bss_74++; + } + var_f29 = 700.0f + ((arg1->unk5C - 700.0f) * var_f31); + arg1->unk18.x = (var_f29 * cos(M_PI/4)); + arg1->unk18.z = (var_f29 * sin(M_PI/4)); + var_f29 = 0.1f; + var_f28 = 0.6f; + if (var_f31 >= var_f29) { + var_f31 -= var_f29; + var_f31 *= (1.0f / var_f28); + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + arg1->unk18.y = 150.0f * var_f31; + } + break; + case 2: + lbl_1_data_250++; + if (lbl_1_data_250 >= lbl_1_data_0[arg1->unk60]) { + lbl_1_data_250 = lbl_1_data_0[arg1->unk60]; + lbl_1_bss_74++; + } + arg1->unk24 = arg1->unk18; + arg1->unk18.x = (arg1->unk5C * cos((M_PI * lbl_1_data_250) / 180.0)); + arg1->unk18.z = (arg1->unk5C * sin((M_PI * lbl_1_data_250) / 180.0)); + var_f29 = (arg1->unk18.x - arg1->unk24.x); + var_f28 = (arg1->unk18.z - arg1->unk24.z); + var_f30 = (180.0 * (atan2(var_f29, var_f28) / M_PI)); + if (var_f30 < 0.0f) { + var_f30 += 360.0f; + } + arg1->unkC++; + var_f31 = arg1->unkC / 10.0f; + if (var_f31 < 1.0f) { + arg1->unk30.y = arg1->unk68 + (var_f31 * (var_f30 - arg1->unk68)); + } else { + arg1->unk30.y = var_f30; + } + arg1->unk6C = arg1->unk30.y; + return; + case 3: + arg1->unkE++; + var_f31 = arg1->unkE / 10.0f; + if (var_f31 >= 1.0f) { + var_f31 = 1.0f; + arg1->unkC = arg1->unkE = 0; + lbl_1_bss_74++; + Hu3DMotionShiftSet(*arg0->model, *arg0->motion, 0.0f, 7.0f, 0x40000001U); + } + + var_f30 = 90.0f - lbl_1_data_0[arg1->unk60]; + arg1->unk30.y = fn_1_927C(arg1->unk6C, var_f30, var_f31); + return; + case 4: + if (++arg1->unkC > 0xF) { + lbl_1_bss_74++; + } + break; + case 5: + if (lbl_1_data_1DA < 0) { + fn_1_181C(); + lbl_1_data_1DA++; + return; + } + if (lbl_1_data_1DA == 0) { + if (fn_1_1890() == 0) { + lbl_1_data_1DA++; + return; + } + } else { + lbl_1_bss_74 = 0; + lbl_1_data_250 = 70.0f; + arg1->unk48 = 0; + arg1->unkC = arg1->unkE = 0; + arg1->unk68 = lbl_1_data_0[arg1->unk60]; + arg1->unk6C = 0.0f; + arg1->unk60 = 0; + fn_1_D24C(arg1, arg1->unk30.y, arg1->unk30.y); + fn_1_F4D4(arg1, 0xF, 3); + fn_1_1768(); + } + break; + } +} + +void fn_1_C1D4(omObjData* arg0, unkObjStruct* arg1) { + s16 sp12[5]; + s16 sp8[5]; + f32 var_f28; + f32 var_f29; + f32 var_f30; + f32 var_f31; + s16 temp_r0; + s16 temp_r0_2; + s16 temp_r3; + s16 var_r29; + s16 var_r28; + s16 var_r30; + + if (GWPlayerCfg[arg1->unk4].iscom != 0) { + HuPadStkX[arg1->unk6] = 0; + HuPadStkY[arg1->unk6] = 0; + HuPadTrigR[arg1->unk6] = 0; + HuPadBtn[arg1->unk6] = 0; + switch (GWPlayerCfg[arg1->unk4].diff) { + case 0: + var_f31 = 0.3f; + break; + case 1: + var_f31 = 0.3f; + break; + case 2: + var_f31 = 0.3f; + break; + case 3: + var_f31 = 0.3f; + break; + } + + var_f31 += (0.1f * lbl_1_bss_70); + for (var_r30 = 0, var_r29 = 0; var_r30 < 5; var_r30++) { + if (lbl_1_data_14[var_r30] != 0) { + sp8[var_r29++] = var_r30; + } + } + var_r29--; + if (arg1->unk50 == -1) { + if (arg1->unk4C < var_f31) { + arg1->unk50 = fn_1_4E54(-1); + } else { + for (var_r30 = 0, var_r28 = 0; var_r30 < 5; var_r30++) { + if ((var_r30 != fn_1_4E54(-1)) && (lbl_1_data_14[var_r30] != 0)) { + sp12[var_r28++] = var_r30; + } + } + var_r28--; + var_r30 = (((rand8() << 8) | rand8()) % (s16)(var_r28 + 1)); + arg1->unk50 = sp12[var_r30]; + } + var_r30 = (((rand8() << 8) | rand8()) % (s16)(var_r29 + 1)); + arg1->unk52 = sp8[var_r30]; + } + if (arg1->unk54 == 0) { + var_f30 = ABS(arg1->unk68 - lbl_1_data_0[arg1->unk50]); + if (var_f30 < 5.0f) { + HuPadTrigR[arg1->unk6] = 0x96; + HuPadBtn[arg1->unk6] = 0x20; + return; + } + if (arg1->unk68 < lbl_1_data_0[arg1->unk50]) { + HuPadStkX[arg1->unk6] = -0x2D; + return; + } + if (arg1->unk68 > lbl_1_data_0[arg1->unk50]) { + HuPadStkX[arg1->unk6] = 0x2D; + } + } else { + var_f30 = ABS(arg1->unk68 - lbl_1_data_0[arg1->unk52]); + if (var_f30 < 5.0f) { + if (arg1->unk5A != 0) { + arg1->unk56++; + var_f31 = arg1->unk56 / 40.0f; + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + arg1->unk5A = 0; + arg1->unk54--; + var_r30 = (((rand8() << 8) | rand8()) % (s16)(var_r29 + 1)); + arg1->unk52 = sp8[var_r30]; + } + HuPadTrigR[arg1->unk6] = (u8) (arg1->unk58 * var_f31); + return; + } + if ((((rand8() << 8) | rand8()) % 101) < 0x32) { + arg1->unk56 = 0; + arg1->unk58 = ((((rand8() << 8) | rand8()) % 81) + 0x32); + arg1->unk5A = 1; + return; + } + arg1->unk54--; + var_r30 = (((rand8() << 8) | rand8()) % (s16)(var_r29 + 1)); + arg1->unk52 = sp8[var_r30]; + return; + } + if (arg1->unk68 < lbl_1_data_0[arg1->unk52]) { + HuPadStkX[arg1->unk6] = -0x2D; + return; + } + if (arg1->unk68 > lbl_1_data_0[arg1->unk52]) { + HuPadStkX[arg1->unk6] = 0x2D; + } + } + } +} + +void fn_1_C944(omObjData* arg0, unkObjStruct* arg1) { + s16 sp8; + f32 var_f26; + f32 var_f25; + f32 var_f28; + f32 temp_f27; + f32 var_f29; + f32 var_f30; + f32 var_f31; + s16 var_r28; + s16 var_r30; + s16 var_r29; + + if (fn_1_17CC() < -1) { + fn_1_1708(); + HuPadStkX[arg1->unk6] = 0; + HuPadStkY[arg1->unk6] = 0; + HuPadTrigR[arg1->unk6] = 0x96; + HuPadBtn[arg1->unk6] = 0x20; + } else { + var_r29 = HuPadStkX[arg1->unk6]; + sp8 = HuPadStkY[arg1->unk6]; + } + if ((arg1->unk48 & 8) == 0) { + var_r30 = -1; + if (ABS(var_r29) < 7) { + var_r30 = fn_1_CFAC(arg1, 0); + } else { + if (var_r29 > 0) { + arg1->unk48 = arg1->unk48 & 0xFFFFFFFD; + arg1->unk48 = arg1->unk48 | 1; + } else { + arg1->unk48 = arg1->unk48 & 0xFFFFFFFE; + arg1->unk48 = arg1->unk48 | 2; + } + var_r30 = fn_1_CFAC(arg1, 1); + if (var_r30 >= 0x64) { + var_r30 -= 0x64; + arg1->unk4A = var_r30; + arg1->unk48 = arg1->unk48 & 0xFFFFFFFC; + } + } + if ((arg1->unk48 & 1) != 0) { + arg1->unk68 -= 1.0f; + if ((var_r30 != -1) && (lbl_1_data_0[var_r30] > arg1->unk68)) { + arg1->unk68 = lbl_1_data_0[var_r30]; + arg1->unk4A = var_r30; + arg1->unk48 = arg1->unk48 & 0xFFFFFFFE; + } + } else if ((arg1->unk48 & 2) != 0) { + arg1->unk68++; + if ((var_r30 != -1) && (lbl_1_data_0[var_r30] < arg1->unk68)) { + arg1->unk68 = lbl_1_data_0[var_r30]; + arg1->unk4A = var_r30; + arg1->unk48 = arg1->unk48 & 0xFFFFFFFD; + } + } + arg1->unk24 = arg1->unk18; + arg1->unk18.x = (arg1->unk5C * cos((M_PI * arg1->unk68) / 180.0)); + arg1->unk18.z = (arg1->unk5C * sin((M_PI * arg1->unk68) / 180.0)); + if ((arg1->unk48 & 3) != 0) { + arg1->unk48 = arg1->unk48 & ~4; + var_f26 = (arg1->unk18.x - arg1->unk24.x); + var_f25 = (arg1->unk18.z - arg1->unk24.z); + var_f29 = (180.0 * (atan2(var_f26, var_f25) / M_PI)); + if (var_f29 < 0.0f) { + var_f29 += 360.0f; + } + fn_1_D24C(arg1, arg1->unk30.y, var_f29); + } else { + arg1->unk48 |= 4; + var_f29 = 90.0f - lbl_1_data_0[arg1->unk4A]; + fn_1_D24C(arg1, arg1->unk30.y, var_f29); + } + arg1->unkC++; + var_f28 = (f32)arg1->unkC / arg1->unkE; + if (arg1->unkC >= arg1->unkE) { + arg1->unkC = arg1->unkE; + var_f28 = 1.0f; + if ((arg1->unk48 & 4) != 0) { + fn_1_ED88(arg0, 0, 0x40000001); + } else { + fn_1_ED88(arg0, 2, 0x40000001); + } + } else { + fn_1_ED88(arg0, 2, 0x40000001); + } + if ((arg1->unk48 & 4) != 0) { + arg1->unk30.y = fn_1_927C(arg1->unk6C, arg1->unk70, var_f28); + return; + } + var_f31 = arg1->unk6C; + temp_f27 = arg1->unk70; + if ((arg1->unk48 & 1) != 0) { + if (var_f31 > temp_f27) { + var_f31 -= 360.0f; + } + } else if (((arg1->unk48 & 2) != 0) && (var_f31 < temp_f27)) { + var_f31 += 360.0f; + } + var_f30 = var_f31 + (var_f28 * (temp_f27 - var_f31)); + if (var_f30 < 0.0f) { + var_f30 += 360.0f; + } else { + if (var_f30 >= 360.0f) { + var_f30 -= 360.0f; + } + } + arg1->unk30.y = var_f30; + } +} + +s16 fn_1_CFAC(unkObjStruct* arg0, u8 arg1) { + f32 var_f31; + s16 var_r30; + s16 var_r31; + + var_f31 = 999.0f; + var_r30 = -1; + if ((arg0->unk48 & 1) != 0) { + for (var_r31 = 0; var_r31 < 5; var_r31++) { + if (lbl_1_data_14[var_r31] != 0) { + if (arg1 == 0) { + if (lbl_1_data_0[var_r31] > arg0->unk68) { + continue; + } + } else if (lbl_1_data_0[var_r31] >= arg0->unk68) { + continue; + } + if (var_f31 > (arg0->unk68 - lbl_1_data_0[var_r31])) { + var_r30 = var_r31; + var_f31 = arg0->unk68 - lbl_1_data_0[var_r31]; + } + } + } + } else if ((arg0->unk48 & 2) != 0) { + for (var_r31 = 0; var_r31 < 5; var_r31++) { + if (lbl_1_data_14[var_r31] != 0) { + if (arg1 == 0) { + if (lbl_1_data_0[var_r31] < arg0->unk68) { + continue; + } + } else if (lbl_1_data_0[var_r31] <= arg0->unk68) { + continue; + } + if (var_f31 > (lbl_1_data_0[var_r31] - arg0->unk68)) { + var_r30 = var_r31; + var_f31 = lbl_1_data_0[var_r31] - arg0->unk68; + } + } + } + } + if ((var_r30 == -1) && (arg1 != 0)) { + for (var_r31 = 0; var_r31 < 5; var_r31++) { + if ((lbl_1_data_14[var_r31] != 0) && (arg0->unk68 == lbl_1_data_0[var_r31])) { + var_r30 = var_r31 + 0x64; + } + } + } + return var_r30; +} + +void fn_1_D24C(unkObjStruct* arg0, f32 arg1, f32 arg2) { + f32 var_f28; + f32 var_f29; + f32 var_f30; + f32 var_f31; + + var_f28 = 10.0f; + arg0->unk6C = arg1; + arg0->unk70 = arg2; + var_f31 = ABS(arg1 - arg2); + if (var_f31 > 180.0f) { + var_f31 -= 360.0f; + } + var_f31 = ABS(var_f31); + arg0->unkC = 0; + arg0->unkE = ((var_f28 / 90.0f) * var_f31); +} + +void fn_1_D34C(omObjData* arg0, unkObjStruct* arg1) { + ModelData* temp_r30; + f32 temp_f28; + f32 temp_f29; + f32 temp_f30; + f32 var_f31; + f32 var_f26; + + temp_r30 = &Hu3DData[arg0->model[0]]; + temp_f29 = 7.0f; + temp_f28 = Hu3DMotionMaxTimeGet(arg0->model[0]) - temp_f29; + temp_f30 = HuPadTrigR[arg1->unk6]; + if ((temp_r30->unk_0C == -1) && (temp_r30->unk_08 == arg0->motion[0]) && ((arg1->unk48 & 8) == 0) && (temp_f30 > 10.0f)) { + arg1->unk48 |= 8; + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[3], 0.0f, 7.0f, 0U); + } + if ((arg1->unk48 & 8) != 0) { + if (temp_f30 <= 10.0f) { + fn_1_4E00(arg1->unk4A, -1.0f); + arg1->unk48 &= ~8; + temp_r30->unk_68 = 1.0f; + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[0], 0.0f, 7.0f, 0x40000001U); + } else if (temp_f30 > 10.0f) { + if ((HuPadBtn[arg1->unk6] & 0x20) != 0) { + arg1->unk60 = 0; + arg1->unk68 = temp_f30; + arg1->unk6C = 0.0f; + arg1->unk48 = 0; + lbl_1_data_14[arg1->unk4A] = 0; + if (fn_1_17CC() < 270.0f) { + fn_1_1708(); + } + fn_1_F4D4(arg1, 0xF, 4); + } + if (temp_r30->unk_0C == -1) { + temp_r30->unk_68 = 0.0f; + var_f31 = 0.006666667f * (temp_f30 - 10.0f); + if (var_f31 > 0.8f) { + var_f31 = 0.8f; + } + var_f31 = temp_f29 + (var_f31 * temp_f28); + var_f26 = ABS(temp_r30->unk_64 - var_f31); + if (var_f26 < 1.0f) { + temp_r30->unk_64 = var_f31; + } + if (temp_r30->unk_64 < var_f31) { + temp_r30->unk_64 += 1.0f; + } else if (temp_r30->unk_64 > var_f31) { + temp_r30->unk_64 -= 1.0f; + } + var_f31 = (temp_r30->unk_64 - temp_f29) / temp_f28; + fn_1_4E00(arg1->unk4A, var_f31); + } + } + arg1->unk18.x = (410.0 * cos((M_PI * lbl_1_data_0[arg1->unk4A]) / 180.0)); + arg1->unk18.z = (410.0 * sin((M_PI * lbl_1_data_0[arg1->unk4A]) / 180.0)); + } +} + +void fn_1_D7F8(omObjData* arg0, unkObjStruct* arg1) { + ModelData* temp_r29; + f32 temp_f28; + f32 temp_f29; + f32 var_f26; + f32 var_f30; + f32 var_f31; + + temp_r29 = &Hu3DData[arg0->model[0]]; + temp_f29 = 7.0f; + temp_f28 = Hu3DMotionMaxTimeGet(arg0->model[0]) - temp_f29; + switch (arg1->unk60) { + case 0: + if (temp_r29->unk_0C == -1) { + arg1->unk68 += 40.0f; + temp_r29->unk_68 = 0.0f; + var_f31 = 0.006666667f * (arg1->unk68 - 10.0f); + if (var_f31 > 0.8f) { + var_f31 = 0.8f; + } + var_f30 = 0.01f * (arg1->unk68 - 130.0f); + if (var_f30 > 0.19999999f) { + var_f30 = 0.19999999f; + } else if (var_f30 < 0.0f) { + var_f30 = 0.0f; + } + var_f31 += var_f30; + var_f31 = var_f30 = temp_f29 + (var_f31 * temp_f28); + var_f26 = ABS(temp_r29->unk_64 - var_f31); + if (var_f26 < 1.0f) { + temp_r29->unk_64 = var_f31; + } + if (temp_r29->unk_64 < var_f31) { + temp_r29->unk_64 += 3.0f; + } else if (temp_r29->unk_64 > var_f31) { + temp_r29->unk_64 -= 3.0f; + } + var_f31 = (temp_r29->unk_64 - temp_f29) / temp_f28; + fn_1_4E00(arg1->unk4A, var_f31); + arg1->unk18.x = (410.0 * cos((M_PI * lbl_1_data_0[arg1->unk4A]) / 180.0)); + arg1->unk18.z = (410.0 * sin((M_PI * lbl_1_data_0[arg1->unk4A]) / 180.0)); + if (arg1->unk68 >= 150.0f) { + arg1->unk68 = 150.0f; + if (temp_r29->unk_64 == var_f30) { + arg1->unkC = 0; + arg1->unk68 = arg1->unk30.y; + arg1->unk6C = 180.0f + arg1->unk30.y; + if (arg1->unk6C >= 360.0f) { + arg1->unk6C -= 360.0f; + } + arg1->unk60++; + HuAudFXPlay(0x70B); + } + } + } + break; + case 1: + if (++arg1->unkC > 0xA) { + arg1->unkC = 0; + Hu3DMotionSpeedSet(arg0->model[0], 2.0f); + if ((arg1->unk6C - arg1->unk68) > 0.0f) { + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[7], 64.0f, 7.0f, 0U); + } else { + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[7], 4.0f, 7.0f, 0U); + } + Hu3DMotionShiftSpeedSet(arg0->model[0], 2.0f); + arg1->unk60++; + } + break; + case 2: + arg1->unkC++; + var_f31 = arg1->unkC / 30.0f; + arg1->unk18.x = ((410.0f + (var_f31 * (arg1->unk5C - 410.0f))) * cos((M_PI * lbl_1_data_0[arg1->unk4A]) / 180.0)); + arg1->unk18.z = ((410.0f + (var_f31 * (arg1->unk5C - 410.0f))) * sin((M_PI * lbl_1_data_0[arg1->unk4A]) / 180.0)); + if (var_f31 >= 1.0f) { + arg1->unkC = 0; + var_f31 = 1.0f; + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[0], 0.0f, 7.0f, 0x40000001U); + arg1->unk60++; + } else if (((arg1->unk6C - arg1->unk68) < 0.0f) && (Hu3DMotionShiftIDGet(arg0->model[0]) < 0)) { + if (Hu3DMotionTimeGet(arg0->model[0]) >= 60.0f) { + Hu3DMotionSpeedSet(arg0->model[0], 0.0f); + } + } + arg1->unk30.y = fn_1_927C(arg1->unk68, arg1->unk6C, var_f31); + break; + case 3: + if (++arg1->unkC > 0x3C) { + if (fn_1_4E54(arg1->unk4A) == 0) { + fn_1_4EEC(7U, 3U); + } else { + fn_1_4EEC(7U, 4U); + } + arg1->unkC = 0; + arg1->unk60++; + } + break; + case 4: + if (fn_1_4EA8(0x100U) != 0) { + fn_1_4EEC(0x100U, 0U); + if (fn_1_4E54(arg1->unk4A) == 0) { + fn_1_F4D4(arg1, 0xF, 5); + } else { + fn_1_F4D4(arg1, 0xF, 6); + } + arg1->unkC = arg1->unkE = 0; + arg1->unk60 = arg1->unk62 = 0; + arg1->unk68 = arg1->unk6C = 0.0f; + } + break; + } + if (fn_1_17F4() >= 0) { + if (fn_1_17CC() < 270.0f) { + fn_1_1708(); + return; + } + fn_1_16D8(); + } +} + +void fn_1_E034(omObjData* arg0, unkObjStruct* arg1) { + ModelData* temp_r27; + f32 var_f28; + f32 var_f29; + f32 var_f30; + f32 var_f31; + s16 var_r28; + s16 var_r29; + + temp_r27 = &Hu3DData[arg0->model[0]]; + switch (arg1->unk60) { + case 0: + lbl_1_bss_84 = lbl_1_data_0[arg1->unk4A]; + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[4], 0.0f, 7.0f, 0x40000001); + HuAudCharVoicePlay(arg1->unk8, 0x125); + arg1->unk60++; + break; + case 1: + if (temp_r27->unk_64 >= (Hu3DMotionMaxTimeGet(arg0->model[0]) - 1.0f)) { + Hu3DMotionShiftSet(arg0->model[0], arg0->motion[2], 0.0f, 7.0f, 0x40000001U); + arg1->unkC = arg1->unkE = 0; + arg1->unk68 = arg1->unk30.y; + + for (var_r29 = 0, var_r28 = -1; var_r29 < 5; var_r29++) { + if (lbl_1_data_14[var_r29] != 0) { + var_r28++; + } + } + if (var_r28 == 0) { + lbl_1_bss_70++; + fn_1_4EEC(0x18, 0x18); + HuAudFXPlay(0x70E); + } + arg1->unk60++; + } + break; + case 2: + lbl_1_bss_84++; + if (lbl_1_bss_84 >= 135.0f) { + lbl_1_bss_84 = 135.0f; + arg1->unkE = arg1->unk10 = 0; + fn_1_F228(); + arg1->unk60++; + } + arg1->unk24 = arg1->unk18; + arg1->unk18.x = (arg1->unk5C * cos((M_PI * lbl_1_bss_84) / 180.0)); + arg1->unk18.z = (arg1->unk5C * sin((M_PI * lbl_1_bss_84) / 180.0)); + var_f29 = (arg1->unk18.x - arg1->unk24.x); + var_f28 = (arg1->unk18.z - arg1->unk24.z); + var_f30 = (180.0 * (atan2(var_f29, var_f28) / M_PI)); + if (var_f30 < 0.0f) { + var_f30 += 360.0f; + } + arg1->unkC++; + var_f31 = arg1->unkC / 10.0f; + if (var_f31 >= 1.0f) { + var_f31 = 1.0f; + } + arg1->unk30.y = fn_1_927C(arg1->unk68, var_f30, var_f31); + arg1->unk6C = arg1->unk30.y; + break; + case 3: + arg1->unkE++; + var_f31 = arg1->unkE / 10.0f; + if (var_f31 >= 1.0f) { + var_f31 = 1.0f; + } + var_f30 = 315.0f; + arg1->unk30.y = arg1->unk6C + (var_f31 * (var_f30 - arg1->unk6C)); + arg1->unk10++; + var_f31 = arg1->unk10 / 50.0f; + if (var_f31 >= 1.0f) { + var_f31 = 1.0f; + arg1->unkC = arg1->unkE = arg1->unk10 = 0; + arg1->unk68 = arg1->unk30.y; + arg1->unk60++; + } + var_f29 = arg1->unk5C + ((700.0f - arg1->unk5C) * var_f31); + arg1->unk18.x = (var_f29 * cos(2.356194490192345)); // atan2(1.0, -1.0) + arg1->unk18.z = (var_f29 * sin(2.356194490192345)); + var_f29 = 0.3f; + var_f28 = 0.6f; + if (var_f31 >= var_f29) { + var_f31 -= var_f29; + var_f31 *= (1.0f / var_f28); + if (var_f31 > 1.0f) { + var_f31 = 1.0f; + } + arg1->unk18.y = 150.0f * (1.0f - var_f31); + } + break; + case 4: + lbl_1_bss_84 -= 0.5f; + if (lbl_1_bss_84 <= 110.0f) { + lbl_1_bss_84 = 110.0f; + arg1->unk60 = 0; + arg1->unkC = 0; + arg1->unkE = (3 - lbl_1_data_1D8) * 0x1E; + arg1->unk14 = 0; + arg1->unk3C.y = 90.0f; + fn_1_F4D4(arg1, 0xF, 1); + } + arg1->unk24 = arg1->unk18; + arg1->unk18.x = (700.0 * cos((M_PI * lbl_1_bss_84) / 180.0)); + arg1->unk18.z = (700.0 * sin((M_PI * lbl_1_bss_84) / 180.0)); + var_f29 = (arg1->unk18.x - arg1->unk24.x); + var_f28 = (arg1->unk18.z - arg1->unk24.z); + var_f30 = (180.0 * (atan2(var_f29, var_f28) / M_PI)); + if (var_f30 < 0.0f) { + var_f30 += 360.0f; + } + arg1->unk10++; + var_f31 = arg1->unk10 / 10.0f; + if (var_f31 >= 1.0f) { + var_f31 = 1.0f; + } + arg1->unk30.y = fn_1_927C(arg1->unk68, var_f30, var_f31); + break; + } +} \ No newline at end of file