halfway point (fn_1_E034)

This commit is contained in:
CreateSource 2024-06-25 12:45:30 -04:00
parent 588c7f21ad
commit d117010759
3 changed files with 991 additions and 4 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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;
}
}