marioparty4/src/REL/m403Dll/main.c
2024-08-18 07:59:47 -05:00

1592 lines
51 KiB
C
Executable file

#include "REL/m403Dll.h"
#include "REL/executor.h"
#include "game/audio.h"
#include "game/chrman.h"
#include "game/data.h"
#include "game/frand.h"
#include "game/gamework.h"
#include "game/gamework_data.h"
#include "game/hsfanim.h"
#include "game/hsfman.h"
#include "game/memory.h"
#include "game/minigame_seq.h"
#include "game/object.h"
#include "game/objsub.h"
#include "game/pad.h"
#include "game/sprite.h"
#include "game/wipe.h"
#include "ext_math.h"
#include "rel_sqrt_consts.h"
typedef struct {
/* 0x000 */ u8 unk00;
/* 0x001 */ char unk01[3];
/* 0x004 */ Vec unk04;
/* 0x010 */ Vec unk10;
/* 0x01C */ Vec unk1C;
/* 0x028 */ Vec unk28;
/* 0x034 */ Vec unk34;
/* 0x040 */ Vec unk40;
/* 0x04C */ Vec unk4C;
/* 0x058 */ Vec unk58;
/* 0x064 */ Vec unk64;
/* 0x070 */ Vec unk70;
/* 0x07C */ Vec unk7C;
/* 0x088 */ float unk88[3][3];
/* 0x0AC */ Vec unkAC;
/* 0x0B8 */ Vec unkB8;
/* 0x0C4 */ Vec unkC4;
/* 0x0D0 */ float unkD0[3][3];
/* 0x0F4 */ float unkF4[3];
/* 0x100 */ float unk100[3];
/* 0x10C */ float unk10C[3];
/* 0x118 */ float unk118[3];
/* 0x124 */ float unk124[3];
/* 0x130 */ float unk130;
/* 0x134 */ float unk134;
/* 0x138 */ float unk138;
/* 0x13C */ float unk13C;
/* 0x140 */ float unk140;
/* 0x144 */ float unk144;
/* 0x148 */ float unk148;
} Unkm403Struct_00; // Size 0x14C
typedef struct {
/* 0x00 */ u8 unk00;
/* 0x01 */ u8 unk01;
/* 0x02 */ u8 unk02;
/* 0x03 */ u8 unk03;
/* 0x04 */ u8 unk04;
/* 0x05 */ u8 unk05;
/* 0x06 */ u8 unk06;
/* 0x07 */ u8 unk07;
/* 0x08 */ char unk08[2];
/* 0x0A */ u8 unk0A;
/* 0x0B */ char unk0B[1];
/* 0x0C */ u8 unk0C;
/* 0x0D */ u8 unk0D;
/* 0x0E */ u8 unk0E;
/* 0x0F */ char unk0F[1];
/* 0x10 */ s16 unk10;
/* 0x12 */ s16 unk12;
/* 0x14 */ s16 unk14;
/* 0x16 */ s16 unk16;
/* 0x18 */ s16 unk18;
/* 0x1A */ s16 unk1A;
/* 0x1C */ float unk1C;
/* 0x20 */ float unk20;
/* 0x24 */ float unk24;
/* 0x28 */ float unk28;
/* 0x2C */ Vec unk2C;
/* 0x38 */ float unk38;
/* 0x3C */ float unk3C;
/* 0x40 */ float unk40;
/* 0x44 */ float unk44;
/* 0x48 */ float unk48;
/* 0x4C */ float unk4C;
/* 0x50 */ Vec unk50;
/* 0x5C */ s16 unk5C; // Start of a struct of size 0x40 (memset)?
/* 0x5E */ s16 unk5E;
/* 0x60 */ float unk60;
/* 0x64 */ float unk64;
/* 0x68 */ char unk68[0x34];
/* 0x9C */ u8 unk9C;
/* 0x9D */ char unk9D[3];
/* 0xA0 */ s32 unkA0;
} Unkm403Struct_01; // Size 0xA4
static void fn_1_424(omObjData *arg0);
static void fn_1_444(omObjData *arg0);
static void fn_1_82C(omObjData *arg0);
static void fn_1_1214(omObjData *arg0);
static void fn_1_1274(omObjData *arg0);
static void fn_1_1460(omObjData *arg0);
static void fn_1_16D8(omObjData *arg0);
static void fn_1_17DC(omObjData *arg0);
static void fn_1_1A50(float arg0, Vec *arg1, Vec *arg2, float arg3);
static void fn_1_1AF0(float arg0, Vec *arg1, Vec *arg2, float arg3, Vec *arg4, Vec *arg5, float arg6);
static void fn_1_1DA8(float arg0);
static void fn_1_1DD0(omObjData *arg0);
static void fn_1_2158(omObjData *arg0);
static void fn_1_22A4(omObjData *arg0);
static void fn_1_2598(omObjData *arg0);
static void fn_1_2FDC(omObjData *arg0);
static void fn_1_3800(void);
static s32 fn_1_3894(void);
static void fn_1_3B80(omObjData *arg0);
static void fn_1_3D6C(Vec *arg0, Vec *arg1);
static void fn_1_3E4C(omObjData *arg0);
static s16 fn_1_400C(s32 arg0, s16 arg1, ParticleHook arg2);
static void fn_1_40A8(ModelData *model, ParticleData *particle, Mtx matrix);
static s32 fn_1_4528(void);
static float fn_1_457C(float arg0, float arg1, float arg2);
static void fn_1_46E4(Mtx arg0, float arg1, float arg2, float arg3);
static void fn_1_4804(float *arg0, float *arg1);
static float fn_1_4B10(float arg0, float arg1, float arg2, float arg3);
static void fn_1_4B88(float *arg0, float *arg1, float *arg2, float *arg3, float arg4);
static float fn_1_4CA4(float arg0, float arg1, float arg2, float arg3);
static void fn_1_4D1C(float *arg0, float *arg1, float *arg2, float *arg3, float arg4);
static void fn_1_4FF4(float *arg0, float *arg1, float *arg2, s32 arg3);
static float fn_1_52AC(float arg0, float *arg1, float *arg2, float *arg3, s32 arg4);
static void fn_1_5400(float *arg0, Vec *arg1, float arg2[][3], s32 arg3);
static void fn_1_57E0(float arg0, Vec *arg1, float *arg2, Vec *arg3, float arg4[][3], s32 arg5);
static float fn_1_59F4(Vec *arg0);
static void fn_1_5B8C(Vec arg0, Vec arg1, Vec *arg2, float arg3);
static float fn_1_5C64(Vec arg0, Vec arg1, Vec arg2);
static float fn_1_5D20(Vec *arg0, Vec *arg1, Vec *arg2);
static float fn_1_605C(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3, Vec *arg4);
static omObjData *lbl_1_bss_50;
static omObjData *lbl_1_bss_4C;
static omObjData *lbl_1_bss_48;
static omObjData *lbl_1_bss_44;
static omObjData *lbl_1_bss_34[4];
static u16 lbl_1_bss_30;
static s16 lbl_1_bss_2E;
static s16 lbl_1_bss_2C;
static s16 lbl_1_bss_2A;
static s16 lbl_1_bss_28;
static s16 lbl_1_bss_1C[6];
static s16 lbl_1_bss_18[2];
static u8 lbl_1_bss_10_unused[8];
static s32 lbl_1_bss_C;
static u8 lbl_1_bss_6_unused[6];
static s16 lbl_1_bss_4;
static s16 lbl_1_bss_2;
static s16 lbl_1_bss_0;
static s16 lbl_1_data_0 = -1;
static Vec lbl_1_data_4 = { 0.0f, 4000.0f, 4000.0f };
static Vec lbl_1_data_10 = { 0.0f, -0.7f, -0.6f };
static GXColor lbl_1_data_1C = { 0xFF, 0xFF, 0xFF, 0xFF };
static Vec lbl_1_data_20_unused = { 0.0f, 4000.0f, -2000.0f };
static Vec lbl_1_data_2C_unused = { 0.0f, 1.0f, 0.0f };
static u8 lbl_1_data_38_unused[0xC] = { 0 };
void ObjectSetup(void) {
LightData *var_r28;
Process *temp_r31;
omObjData *var_r29;
s32 temp_r27;
s32 var_r26;
s32 i;
OSReport("******* M403ObjectSetup *********\n");
Hu3DLighInit();
var_r26 = Hu3DGLightCreateV(&lbl_1_data_4, &lbl_1_data_10, &lbl_1_data_1C);
Hu3DGLightInfinitytSet(var_r26);
var_r28 = &Hu3DGlobalLight[0];
var_r28->unk_00 |= 0x8000;
temp_r31 = omInitObjMan(50, 0x2000);
temp_r27 = frand() & 0x1F;
for (i = 0; i < temp_r27; i++) {
fn_1_4528();
}
CRot.x = -23.5f;
CRot.y = 0.0f;
CRot.z = 0.0f;
Center.x = 0.0f;
Center.y = 320.0f;
Center.z = 147.0f;
CZoom = 1720.0f;
Hu3DCameraCreate(1);
Hu3DCameraPerspectiveSet(1, 45.0f, 400.0f, 10000.0f, 1.2f);
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
lbl_1_bss_4C = omAddObjEx(temp_r31, 0x7FDA, 0, 0, -1, omOutView);
lbl_1_bss_50 = omAddObjEx(temp_r31, 0x10, 8, 0, -1, fn_1_424);
lbl_1_bss_44 = omAddObjEx(temp_r31, 0x20, 16, 0, -1, fn_1_1274);
lbl_1_bss_48 = omAddObjEx(temp_r31, 0x50, 16, 0, -1, fn_1_16D8);
omAddObjEx(temp_r31, 0x60, 0, 0, -1, fn_1_3B80);
fn_1_650C(temp_r31);
fn_1_7C50(3);
omMakeGroupEx(temp_r31, 0, 4);
omGetGroupMemberListEx(temp_r31, 0);
for (i = 0; i < 4; i++) {
var_r29 = omAddObjEx(temp_r31, 0x30, 2, 8, 0, fn_1_1DD0);
lbl_1_bss_34[i] = var_r29;
var_r29->work[0] = i;
var_r29->work[1] = i;
}
omGameSysInit(temp_r31);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
HuAudSndGrpSet(0x1C);
lbl_1_bss_2 = 0;
if (GWMGRecordGet(9) == 0) {
GWMGRecordSet(9, 5);
}
}
static void fn_1_424(omObjData *arg0) {
lbl_1_bss_30 = 0;
arg0->func = fn_1_444;
}
static void fn_1_444(omObjData *arg0) {
Vec sp2C;
Vec sp20;
Vec sp14;
Vec sp8;
float var_f31;
float var_f30;
switch (lbl_1_bss_30) {
case 0:
sp2C.x = 0.0f;
sp2C.y = 0.0f;
sp2C.z = -50.0f;
sp20.x = -90.0f;
sp20.y = 90.0f;
sp20.z = 0.0f;
var_f31 = 2200.0f;
fn_1_1A50(1.0f, &sp2C, &sp20, var_f31);
lbl_1_bss_28 = 60;
lbl_1_bss_30++;
break;
case 1:
if (--lbl_1_bss_28 == 0) {
lbl_1_bss_30++;
}
break;
case 2:
if (lbl_1_bss_28 == 0) {
fn_1_7C60();
lbl_1_bss_28 = 90;
sp2C.x = 200.0f;
sp2C.y = 100.0f;
sp2C.z = -50.0f;
sp20.x = -50.0f;
sp20.y = 90.0f;
sp20.z = 0.0f;
var_f31 = 2000.0f;
sp14.x = 0.0f;
sp14.y = 320.0f;
sp14.z = 147.0f;
sp8.x = -23.5f;
sp8.y = 0.0f;
sp8.z = 0.0f;
var_f30 = 1720.0f;
fn_1_1AF0(180.0f, &sp14, &sp8, var_f30, &sp2C, &sp20, var_f31);
}
if (--lbl_1_bss_28 == 0) {
lbl_1_bss_30++;
}
break;
case 3:
if (lbl_1_bss_28 == 0) {
lbl_1_bss_28 = 90;
}
if (--lbl_1_bss_28 == 0) {
lbl_1_bss_30++;
}
break;
case 4:
lbl_1_bss_30 = 5;
lbl_1_bss_2E = lbl_1_bss_2C = -1;
arg0->func = fn_1_82C;
HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M403, 19), MEMORY_DEFAULT_NUM));
break;
}
if (omSysExitReq != 0 && WipeStatGet() == 0) {
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
arg0->func = fn_1_1214;
}
}
static s32 lbl_1_data_68 = -1;
s32 lbl_1_data_6C[] = {
DATA_MAKE_NUM(DATADIR_MGCONST, 0),
DATA_MAKE_NUM(DATADIR_MGCONST, 1),
DATA_MAKE_NUM(DATADIR_MGCONST, 2),
DATA_MAKE_NUM(DATADIR_MGCONST, 3),
DATA_MAKE_NUM(DATADIR_MGCONST, 4),
DATA_MAKE_NUM(DATADIR_MGCONST, 5),
DATA_MAKE_NUM(DATADIR_MGCONST, 6),
DATA_MAKE_NUM(DATADIR_MGCONST, 7)
};
static void fn_1_82C(omObjData *arg0) {
Vec sp1C;
Vec sp10;
float var_f31;
s16 sp8[4];
s32 var_r30;
s32 var_r27;
s32 var_r29;
s32 i;
switch (lbl_1_bss_30) {
case 5:
if (lbl_1_bss_2C == -1) {
lbl_1_bss_2A = 1800;
lbl_1_bss_2C = MGSeqStartCreate();
MGSeqPosSet(lbl_1_bss_2C, 320.0f, 240.0f);
} else if (MGSeqStatGet(lbl_1_bss_2C) == 0) {
lbl_1_bss_2C = -1;
lbl_1_bss_30++;
lbl_1_bss_28 = 0;
lbl_1_data_0 = 4;
if (lbl_1_bss_2 != 0) {
sp1C.x = 476.0f;
sp1C.y = 64.0f;
var_r30 = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 51), 2, 0);
lbl_1_bss_1C[0] = var_r30;
espPosSet(var_r30, sp1C.x + 32.0f, sp1C.y);
var_r30 = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 51), 2, 0);
lbl_1_bss_1C[1] = var_r30;
espPosSet(var_r30, sp1C.x + 56.0f, sp1C.y);
var_r30 = espEntry(lbl_1_data_6C[GWPlayerCfg[lbl_1_bss_4].character], 1, 0);
lbl_1_bss_1C[2] = var_r30;
espPosSet(var_r30, sp1C.x, sp1C.y);
var_r30 = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 22), 3, 0);
lbl_1_bss_1C[3] = var_r30;
espPosSet(var_r30, sp1C.x + 36.0f, sp1C.y);
var_r30 = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 23), 4, 0);
lbl_1_bss_1C[4] = var_r30;
espColorSet(var_r30, 0, 0, 0);
espTPLvlSet(var_r30, 0.5);
espPosSet(var_r30, sp1C.x + 36.0f, sp1C.y);
}
}
if (lbl_1_data_68 == -1 && (MGSeqStatGet(lbl_1_bss_2C) & 0x10)) {
lbl_1_data_68 = HuAudSeqPlay(0x48);
}
break;
case 6:
var_r29 = 0;
if (lbl_1_bss_2 != 0) {
if (((Unkm403Struct_01*) lbl_1_bss_34[lbl_1_bss_4]->data)->unk07 == 0 && fn_1_8264() == 0) {
var_r29++;
}
} else if (lbl_1_data_0 <= 1 && fn_1_8264() == 0) {
var_r29++;
}
if (lbl_1_bss_2 != 0) {
espBankSet(lbl_1_bss_1C[0], lbl_1_bss_0 / 10);
espBankSet(lbl_1_bss_1C[1], lbl_1_bss_0 % 10);
}
if (var_r29 != 0) {
lbl_1_bss_30++;
}
break;
case 7:
if (lbl_1_bss_2C == -1) {
lbl_1_bss_2C = MGSeqFinishCreate();
MGSeqPosSet(lbl_1_bss_2C, 320.0f, 240.0f);
MGSeqKill(lbl_1_bss_2E);
HuAudSeqFadeOut(lbl_1_data_68, 100);
break;
}
if (MGSeqStatGet(lbl_1_bss_2C) == 0) {
lbl_1_bss_2C = -1;
if (lbl_1_bss_2 == 0) {
if (lbl_1_data_0 != 0) {
for (i = 0; i < 4; i++) {
if (((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk07 != 0) {
break;
}
}
sp1C.x = lbl_1_bss_34[i]->trans.x;
sp1C.y = 100.0f;
sp1C.z = lbl_1_bss_34[i]->trans.z;
sp10.x = -18.0f;
sp10.y = 0.0f;
sp10.z = 0.0f;
var_f31 = 600.0f;
fn_1_1A50(45.0f, &sp1C, &sp10, var_f31);
}
lbl_1_bss_30 = 9;
lbl_1_bss_28 = 90;
break;
}
if (GWMGRecordGet(9) < lbl_1_bss_0 - 1) {
GWMGRecordSet(9, lbl_1_bss_0 - 1);
lbl_1_bss_30 = 8;
break;
}
lbl_1_bss_2C = -1;
lbl_1_bss_30 = 11;
lbl_1_bss_28 = 150;
}
break;
case 8:
if (lbl_1_bss_2C == -1) {
lbl_1_bss_2C = MGSeqRecordCreate(lbl_1_bss_0 - 1);
break;
}
if (MGSeqStatGet(lbl_1_bss_2C) == 0) {
lbl_1_bss_2C = -1;
lbl_1_bss_28 = 150;
lbl_1_bss_30 = 11;
}
break;
case 9:
if (--lbl_1_bss_28 == 0) {
lbl_1_bss_30++;
}
break;
case 10:
if (lbl_1_bss_2C == -1) {
if (lbl_1_data_0 == 0) {
lbl_1_bss_2C = MGSeqDrawCreate();
HuAudSStreamPlay(4);
} else {
for (i = 0; i < 4; i++) {
sp8[i] = -1;
}
for (i = 0, var_r27 = 0; i < 4; i++) {
if (((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk07 != 0) {
GWPlayerCoinWinAdd(i, 10);
sp8[var_r27++] = GWPlayerCfg[i].character;
}
}
lbl_1_bss_2C = MGSeqWinCreate(sp8[0], sp8[1], sp8[2], sp8[3]);
HuAudSStreamPlay(1);
}
}
lbl_1_bss_2C = -1;
lbl_1_bss_28 = 210;
lbl_1_bss_30++;
break;
case 11:
if (--lbl_1_bss_28 == 0) {
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
arg0->func = fn_1_1214;
}
break;
}
if (omSysExitReq != 0 && WipeStatGet() == 0) {
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
arg0->func = fn_1_1214;
}
}
static void fn_1_1214(omObjData *arg0) {
if (WipeStatGet() == 0) {
fn_1_676C();
CharModelKill(-1);
MGSeqKill(lbl_1_bss_2E);
MGSeqKillAll();
HuAudFadeOut(1);
omOvlReturnEx(1, 1);
}
}
static void fn_1_1274(omObjData *arg0) {
Hu3DLightAllKill();
lbl_1_bss_18[0] = Hu3DGLightCreateV(&lbl_1_data_4, &lbl_1_data_10, &lbl_1_data_1C);
Hu3DGLightStaticSet(lbl_1_bss_18[0], 1);
Hu3DGLightInfinitytSet(lbl_1_bss_18[0]);
lbl_1_bss_18[1] = Hu3DGLightCreate(0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0, 0, 0);
Hu3DGLightStaticSet(lbl_1_bss_18[1], 1);
Hu3DGLightPointSet(lbl_1_bss_18[1], 0.0f, 0.0f, 3);
Hu3DGLightColorSet(lbl_1_bss_18[0], 0, 0, 0, 0xFF);
Hu3DGLightPosSet(lbl_1_bss_18[1], -1470.0f, 800.0f, -2000.0f, 0.0f, -1.0f, 0.0f);
Hu3DGLightColorSet(lbl_1_bss_18[1], 0, 0, 0, 0xFF);
Hu3DGLightPointSet(lbl_1_bss_18[1], 1200.0f, 0.6f, 3);
arg0->func = fn_1_1460;
}
static void fn_1_1460(omObjData *arg0) {
s8 sp11[] = { 1, 0, 2, 1, 0, 3, 2, 1, 0 };
s8 sp8[] = { 1, 1, 2, 2, 2, 3, 3, 3, 3 };
s32 var_r30;
switch (lbl_1_bss_30) {
case 0:
break;
case 1:
Hu3DGLightColorSet(lbl_1_bss_18[0], 0xF0, 0xF0, 0xF0, 0xFF);
break;
case 2:
break;
case 3:
Hu3DGLightColorSet(lbl_1_bss_18[1], 0xFF, 0xE0, 0xD0, 0xFF);
break;
case 4:
break;
case 5:
arg0->work[0] = 30;
arg0->work[1] = 17;
lbl_1_bss_C = 1;
break;
case 6:
if (fn_1_8264() != 0) {
break;
}
if (lbl_1_bss_C == 0) {
lbl_1_bss_C = 30;
lbl_1_bss_0++;
}
lbl_1_bss_C--;
if (lbl_1_bss_C == 0) {
var_r30 = (arg0->work[1] - 2) / 2;
if (var_r30 < 0) {
var_r30 = 0;
}
fn_1_8670(sp11[var_r30]);
fn_1_7C50(sp8[var_r30]);
fn_1_7C30(0.01f * arg0->work[0]);
arg0->work[0] += 5;
if (arg0->work[1] > 2) {
arg0->work[1]--;
}
}
break;
}
}
static void fn_1_16D8(omObjData *arg0) {
Unkm403Struct_00 *temp_r3;
temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r3), MEMORY_DEFAULT_NUM);
arg0->data = temp_r3;
temp_r3->unk148 = temp_r3->unk144 = 0.0f;
temp_r3->unk140 = 1.0f;
temp_r3->unk10.x = temp_r3->unk28.x = -23.5f;
temp_r3->unk10.y = temp_r3->unk28.y = 0.0f;
temp_r3->unk10.z = temp_r3->unk28.z = 0.0f;
temp_r3->unk04.x = temp_r3->unk1C.x = 0.0f;
temp_r3->unk04.y = temp_r3->unk1C.y = 320.0f;
temp_r3->unk04.z = temp_r3->unk1C.z = 147.0f;
temp_r3->unk130 = temp_r3->unk134 = 1720.0f;
arg0->func = fn_1_17DC;
}
static void fn_1_17DC(omObjData *arg0) {
Unkm403Struct_00 *temp_r31;
float temp_f31;
temp_r31 = arg0->data;
if (temp_r31->unk148 > 0.0f) {
temp_r31->unk148 -= temp_r31->unk140;
temp_f31 = (temp_r31->unk144 - temp_r31->unk148) / temp_r31->unk144;
temp_f31 = sind(90.0f * temp_f31);
if (temp_r31->unk00 == 0) {
temp_r31->unk04.x = temp_r31->unk1C.x + temp_f31 * (temp_r31->unk34.x - temp_r31->unk1C.x);
temp_r31->unk04.y = temp_r31->unk1C.y + temp_f31 * (temp_r31->unk34.y - temp_r31->unk1C.y);
temp_r31->unk04.z = temp_r31->unk1C.z + temp_f31 * (temp_r31->unk34.z - temp_r31->unk1C.z);
temp_r31->unk10.x = temp_r31->unk28.x + temp_f31 * (temp_r31->unk40.x - temp_r31->unk28.x);
temp_r31->unk10.y = temp_r31->unk28.y + temp_f31 * (temp_r31->unk40.y - temp_r31->unk28.y);
temp_r31->unk10.z = temp_r31->unk28.z + temp_f31 * (temp_r31->unk40.z - temp_r31->unk28.z);
temp_r31->unk130 = temp_r31->unk134 + temp_f31 * (temp_r31->unk138 - temp_r31->unk134);
} else {
fn_1_57E0(2.0f * temp_f31, &temp_r31->unk04, temp_r31->unkF4, &temp_r31->unk64, temp_r31->unk88, 3);
fn_1_57E0(2.0f * temp_f31, &temp_r31->unk10, temp_r31->unk100, &temp_r31->unkAC, temp_r31->unkD0, 3);
temp_r31->unk130 = fn_1_52AC(2.0f * temp_f31, temp_r31->unk124, temp_r31->unk10C, temp_r31->unk118, 3);
}
}
CRot.x = temp_r31->unk10.x;
CRot.y = temp_r31->unk10.y;
CRot.z = temp_r31->unk10.z;
Center.x = temp_r31->unk04.x;
Center.y = temp_r31->unk04.y;
Center.z = temp_r31->unk04.z;
CZoom = temp_r31->unk130;
}
static void fn_1_1A50(float arg0, Vec *arg1, Vec *arg2, float arg3) {
Unkm403Struct_00 *temp_r31;
temp_r31 = lbl_1_bss_48->data;
temp_r31->unk00 = 0;
temp_r31->unk144 = arg0;
temp_r31->unk148 = arg0;
temp_r31->unk1C = temp_r31->unk04;
temp_r31->unk34.x = arg1->x;
temp_r31->unk34.y = arg1->y;
temp_r31->unk34.z = arg1->z;
temp_r31->unk28 = temp_r31->unk10;
temp_r31->unk40.x = arg2->x;
temp_r31->unk40.y = arg2->y;
temp_r31->unk40.z = arg2->z;
temp_r31->unk134 = temp_r31->unk130;
temp_r31->unk138 = arg3;
}
static void fn_1_1AF0(float arg0, Vec *arg1, Vec *arg2, float arg3, Vec *arg4, Vec *arg5, float arg6) {
Unkm403Struct_00 *temp_r31;
temp_r31 = lbl_1_bss_48->data;
temp_r31->unk00 = 1;
temp_r31->unk148 = temp_r31->unk144 = arg0;
temp_r31->unk1C = temp_r31->unk04;
temp_r31->unk34.x = arg1->x;
temp_r31->unk34.y = arg1->y;
temp_r31->unk34.z = arg1->z;
temp_r31->unk4C.x = arg4->x;
temp_r31->unk4C.y = arg4->y;
temp_r31->unk4C.z = arg4->z;
temp_r31->unk28 = temp_r31->unk10;
temp_r31->unk40.x = arg2->x;
temp_r31->unk40.y = arg2->y;
temp_r31->unk40.z = arg2->z;
temp_r31->unk58.x = arg5->x;
temp_r31->unk58.y = arg5->y;
temp_r31->unk58.z = arg5->z;
temp_r31->unk134 = temp_r31->unk130;
temp_r31->unk138 = arg3;
temp_r31->unk13C = arg6;
temp_r31->unk64 = temp_r31->unk1C;
temp_r31->unk70 = temp_r31->unk4C;
temp_r31->unk7C = temp_r31->unk34;
temp_r31->unkAC = temp_r31->unk28;
temp_r31->unkB8 = temp_r31->unk58;
temp_r31->unkC4 = temp_r31->unk40;
temp_r31->unk10C[0] = temp_r31->unk134;
temp_r31->unk10C[1] = temp_r31->unk13C;
temp_r31->unk10C[2] = temp_r31->unk138;
temp_r31->unk124[0] = 0.0f;
temp_r31->unk124[1] = ABS(temp_r31->unk10C[1] - temp_r31->unk10C[0]);
temp_r31->unk124[2] = ABS(temp_r31->unk10C[2] - temp_r31->unk10C[1]) + temp_r31->unk124[1];
fn_1_5400(temp_r31->unkF4, &temp_r31->unk64, temp_r31->unk88, 3);
fn_1_5400(temp_r31->unk100, &temp_r31->unkAC, temp_r31->unkD0, 3);
fn_1_4FF4(temp_r31->unk124, temp_r31->unk10C, temp_r31->unk118, 3);
}
static void fn_1_1DA8(float arg0) {
Unkm403Struct_00 *temp_r31;
temp_r31 = lbl_1_bss_48->data;
temp_r31->unk140 = arg0;
}
static s32 lbl_1_data_C4[] = {
0, 2, 3, 8, 10, 9, 23, 24
};
static Vec lbl_1_data_E4[] = {
{ -300.0f, 2200.0f, 0.0f },
{ -100.0f, 2200.0f, 0.0f },
{ 100.0f, 2200.0f, 0.0f },
{ 300.0f, 2200.0f, 0.0f }
};
static float lbl_1_data_114[] = {
40.0f, 40.0f, 40.0f, 40.0f,
40.0f, 100.0f, 40.0f, 80.0f
};
static float lbl_1_data_134[] = {
160.0f, 160.0f, 180.0f, 160.0f,
160.0f, 180.0f, 180.0f, 200.0f
};
static u32 lbl_1_data_154 = 0x41C64E6D;
static void fn_1_1DD0(omObjData *arg0) {
Unkm403Struct_01 *temp_r3;
s32 temp_r27;
s32 i;
s32 temp_r28;
temp_r3 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(*temp_r3), MEMORY_DEFAULT_NUM);
arg0->data = temp_r3;
temp_r3->unk00 = arg0->work[0];
temp_r3->unk01 = GWPlayerCfg[temp_r3->unk00].character;
temp_r3->unk02 = temp_r3->unk00 >> 1;
temp_r3->unk03 = temp_r3->unk00 & 1;
temp_r3->unk04 = GWPlayerCfg[temp_r3->unk00].pad_idx;
temp_r3->unk05 = GWPlayerCfg[temp_r3->unk00].iscom;
temp_r3->unk06 = GWPlayerCfg[temp_r3->unk00].diff;
temp_r3->unk18 = temp_r3->unk1A = 0;
temp_r3->unk07 = 1;
temp_r3->unk0C = 1;
temp_r3->unk0D = 0;
temp_r3->unk0E = 0;
temp_r3->unk0A = 0;
temp_r3->unk9C = 0;
temp_r27 = arg0->work[1];
temp_r3->unk2C.x = lbl_1_data_E4[temp_r27].x;
temp_r3->unk2C.y = lbl_1_data_E4[temp_r27].y + 100.0f * ((fn_1_4528() - 0x8000) / 32768.0f);
temp_r3->unk2C.z = lbl_1_data_E4[temp_r27].z;
temp_r3->unk44 = temp_r3->unk48 = temp_r3->unk4C = 0.0f;
temp_r3->unk38 = temp_r3->unk3C = temp_r3->unk40 = 0.0f;
temp_r3->unk20 = temp_r3->unk3C;
temp_r3->unk24 = 0.0f;
temp_r3->unk1C = 0.0f;
temp_r3->unk28 = 1.0f;
memset(&temp_r3->unk5C, 0, 0x40);
temp_r3->unkA0 = 1;
if (lbl_1_bss_2 != 0 && temp_r3->unk05 == 0) {
lbl_1_bss_4 = temp_r3->unk00;
}
temp_r28 = CharModelCreate(temp_r3->unk01, 4);
arg0->model[0] = temp_r28;
Hu3DModelAttrSet(temp_r28, 0x40000001);
Hu3DModelShadowSet(temp_r28);
for (i = 0; i < 8; i++) {
arg0->motion[i] = CharModelMotionCreate(temp_r3->unk01, lbl_1_data_C4[i]);
}
CharModelMotionDataClose(temp_r3->unk01);
CharModelMotionSet(temp_r3->unk01, arg0->motion[temp_r3->unk18]);
omSetTra(arg0, temp_r3->unk2C.x, temp_r3->unk2C.y, temp_r3->unk2C.z);
Hu3DModelPosSet(temp_r28, temp_r3->unk2C.x, temp_r3->unk2C.y, temp_r3->unk2C.z);
Hu3DModelRotSet(temp_r28, 0.0f, 30.0f, 0.0f);
CharModelStepTypeSet(temp_r3->unk01, 1);
CharModelVoiceEnableSet(temp_r3->unk01, arg0->motion[3], 0);
arg0->func = fn_1_2158;
}
static void fn_1_2158(omObjData *arg0) {
Unkm403Struct_01 *temp_r31;
s32 sp8;
sp8 = arg0->model[0];
temp_r31 = arg0->data;
temp_r31->unk10 = temp_r31->unk12 = 0;
temp_r31->unk14 = temp_r31->unk16 = 0;
switch (lbl_1_bss_30) {
case 3:
break;
case 2:
if (lbl_1_bss_28 < 60.0f) {
break;
}
/* fallthrough */
case 1:
temp_r31->unk18 = 3;
temp_r31->unk48 = 0.0f;
temp_r31->unk0C = 0;
break;
case 5:
arg0->func = fn_1_22A4;
break;
}
if (temp_r31->unk2C.y < 10.0f) {
omVibrate(temp_r31->unk00, 12, 6, 6);
temp_r31->unk2C.y = 10.0f;
temp_r31->unk0C = 1;
}
fn_1_2FDC(arg0);
}
static void fn_1_22A4(omObjData *arg0) {
Unkm403Struct_01 *temp_r31;
s32 temp_r29;
s32 temp_r28;
temp_r29 = arg0->model[0];
temp_r31 = arg0->data;
if (temp_r31->unk07 != 0) {
if (lbl_1_bss_30 == 6 && !(temp_r31->unk07 & 2)) {
if (temp_r31->unk05 != 0) {
fn_1_2598(arg0);
} else {
temp_r31->unk10 = HuPadStkX[temp_r31->unk04];
temp_r31->unk12 = HuPadStkY[temp_r31->unk04];
temp_r31->unk14 = HuPadBtnDown[temp_r31->unk04];
temp_r31->unk16 = HuPadBtn[temp_r31->unk04];
}
} else {
temp_r31->unk10 = temp_r31->unk12 = 0;
temp_r31->unk14 = temp_r31->unk16 = 0;
}
switch (lbl_1_bss_30) {
case 5:
case 6:
break;
case 7:
case 9:
arg0->scale.y += 0.2f * (1.0f - arg0->scale.y);
temp_r31->unk3C = fn_1_457C(temp_r31->unk3C, 0.0f, 0.9f);
break;
case 10:
if (temp_r31->unk18 != 6) {
temp_r31->unk18 = 6;
}
break;
}
if (temp_r31->unk07 & 2) {
temp_r31->unk10 = temp_r31->unk12 = 0;
temp_r31->unk14 = temp_r31->unk16 = 0;
if (arg0->scale.y < 0.2f) {
omVibrate(temp_r31->unk00, 12, 4, 2);
HuAudFXPlay(0x523);
temp_r31->unk07 = 0;
Hu3DModelShadowReset(temp_r29);
Hu3DModelAttrSet(temp_r29, 1);
lbl_1_data_0--;
temp_r28 = fn_1_400C(DATA_MAKE_NUM(DATADIR_M403, 19), 100, fn_1_40A8);
Hu3DModelPosSet(temp_r28, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z);
Hu3DModelLayerSet(temp_r28, 2);
}
}
if (fn_1_8264() != 0) {
temp_r31->unkA0 = 0;
} else if (!(temp_r31->unk07 & 2) && temp_r31->unkA0 == 0) {
omVibrate(temp_r31->unk00, 12, 6, 6);
temp_r31->unkA0 = 1;
}
fn_1_2FDC(arg0);
}
}
static void fn_1_2598(omObjData *arg0) {
Vec sp38[6];
Vec sp14;
Vec sp8;
float sp20[6];
float var_f31;
float var_f30;
float temp_f29;
float var_f28;
Unkm403Struct_01 *temp_r31;
s16 var_r27;
s16 var_r26;
s16 var_r21;
s16 var_r20;
s16 temp_r28;
s32 var_r23;
s32 var_r22;
s32 var_r25;
s32 temp_r24;
s32 var_r29;
s32 i;
var_r22 = 0;
for (i = 0, var_r29 = 0; i < 4; i++) {
temp_r31 = lbl_1_bss_34[i]->data;
if (temp_r31->unk05 == 0 && temp_r31->unk07 != 0) {
break;
}
}
temp_r31 = arg0->data;
if (i >= 4 && temp_r31->unk9C == 0) {
var_r22 = 1;
}
temp_r28 = temp_r31->unk06;
var_r27 = var_r26 = var_r21 = var_r20 = 0;
switch (temp_r31->unk5C) {
case 0:
if (fn_1_8264() != 0) {
temp_r31->unk5C = 1;
}
break;
case 1:
temp_r31->unk5C = 2;
temp_r31->unk5E = (s32) (60.0f * (1.2f - 0.2f * temp_r28) * (fn_1_4528() / 65536.0f));
temp_r31->unk60 = 500.0f * ((fn_1_4528() - 0x8000) / 32768.0f);
temp_r31->unk64 = 200.0f * ((fn_1_4528() - 0x8000) / 32768.0f);
var_r27 = temp_r31->unk10;
var_r26 = temp_r31->unk12;
break;
case 2:
sp8.x = temp_r31->unk60 - temp_r31->unk2C.x;
sp8.y = 0.0f;
sp8.z = temp_r31->unk64 - temp_r31->unk2C.z;
var_f31 = fn_1_59F4(&sp8);
if (var_f31 < 20.0f) {
temp_r31->unk5C = 3;
} else {
if (var_f31 >= 100.0f) {
var_f28 = 0.8f;
} else {
var_f28 = 0.4f;
}
var_f30 = fn_1_457C(temp_r31->unk3C, atan2d(sp8.x, sp8.z), var_f28);
temp_f29 = 48.0f + 4.0f * temp_r28;
var_r27 = temp_f29 * sind(var_f30);
var_r26 = temp_f29 * -cosd(var_f30);
if (fn_1_8264() == 0) {
temp_r31->unk5C = 0;
if (temp_r31->unk5E == 0) {
temp_r31->unk5E = -1;
}
} else if (temp_r31->unk5E >= 0) {
if (temp_r31->unk5E == 0) {
if (var_f31 < 150.0f && temp_r31->unk0E != 0) {
temp_r31->unk5C = 3;
} else if ((s32) ((temp_r28 + 2) * (fn_1_4528() / 65536.0f)) != 0 && var_r22 == 0) {
temp_r31->unk5C = 4;
} else {
temp_r31->unk5C = 1;
}
} else {
temp_r31->unk5E--;
}
}
}
break;
case 3:
sp8.x = temp_r31->unk60 - temp_r31->unk2C.x;
sp8.y = 0.0f;
sp8.z = temp_r31->unk64 - temp_r31->unk2C.z;
if (fn_1_59F4(&sp8) >= 30.000002f && temp_r31->unk0E == 0) {
temp_r31->unk5C = 2;
} else if (fn_1_8264() == 0) {
temp_r31->unk5C = 0;
} else {
if (temp_r31->unk5E > 0) {
temp_r31->unk5E--;
}
if (temp_r31->unk5E == 0) {
if ((s32) ((temp_r28 + 2) * (fn_1_4528() / 65536.0f)) != 0 && var_r22 == 0) {
temp_r31->unk5C = 4;
} else {
temp_r31->unk5C = 1;
}
}
}
break;
case 4:
temp_r24 = fn_1_82D0(&sp38[0]);
for (i = 0; i < temp_r24; i++) {
VECSubtract(&sp38[i], &temp_r31->unk2C, &sp8);
sp20[i] = VECMag(&sp8);
}
for (i = 0; i < temp_r24 - 1; i++) {
for (var_r29 = i + 1; var_r29 < temp_r24; var_r29++) {
if (sp20[i] > sp20[var_r29]) {
sp14 = sp38[i];
sp38[i] = sp38[var_r29];
sp38[var_r29] = sp14;
var_f31 = sp20[i];
sp20[i] = sp20[var_r29];
sp20[var_r29] = var_f31;
}
}
}
var_r25 = 1000;
var_r23 = var_r25 * (fn_1_4528() / 65536.0f);
for (i = 0; i < temp_r24 - 1; i++) {
var_r25 = var_r25 * (5.0f + temp_r28) * 0.1f;
var_r23 -= var_r25;
if (var_r23 < 0) {
break;
}
}
temp_r31->unk60 = sp38[i].x + 100.0f * (0.5f - 0.15f * temp_r28) * ((fn_1_4528() - 0x8000) / 32768.0f);
temp_r31->unk64 = sp38[i].z + 100.0f * (0.5f - 0.15f * temp_r28) * ((fn_1_4528() - 0x8000) / 32768.0f);
temp_r31->unk5C = 2;
temp_r31->unk5E = -1;
var_r27 = temp_r31->unk10;
var_r26 = temp_r31->unk12;
break;
}
temp_r31->unk10 = var_r27;
temp_r31->unk12 = var_r26;
temp_r31->unk14 = var_r21;
temp_r31->unk16 = var_r20;
}
static void fn_1_2FDC(omObjData *arg0) {
float var_f29;
Unkm403Struct_01 *temp_r31;
s32 temp_r25;
s16 var_r27;
s16 var_r28;
s16 temp_r30;
s16 temp_r29;
s16 spA;
s16 sp8;
temp_r31 = arg0->data;
temp_r25 = arg0->model[0];
var_r28 = temp_r31->unk18;
temp_r31->unk50 = temp_r31->unk2C;
temp_r30 = temp_r31->unk10;
temp_r29 = temp_r31->unk12;
spA = temp_r31->unk14;
sp8 = temp_r31->unk16;
switch (temp_r31->unk18) {
case 0:
case 1:
case 2:
temp_r31->unk1C = 0.14f * sqrtf(temp_r30 * temp_r30 + temp_r29 * temp_r29);
if (temp_r31->unk1C > 0.1f) {
if (temp_r31->unk1C >= 6.0f) {
var_r28 = 2;
var_r27 = 1;
} else {
var_r28 = 1;
var_r27 = 1;
}
var_f29 = atan2d(temp_r30, -temp_r29);
temp_r31->unk3C = fn_1_457C(temp_r31->unk3C, var_f29, 0.5f);
temp_r31->unk20 = temp_r31->unk3C;
temp_r31->unk24 += 1.0f;
if (temp_r31->unk24 >= 0.5f * temp_r31->unk28) {
temp_r31->unk24 -= 0.5f * temp_r31->unk28;
}
temp_r31->unk1C *= 1.0 + 0.25 * cosd(90.0f * (temp_r31->unk24 / (0.5f * temp_r31->unk28)));
} else {
temp_r31->unk24 = 0.0f;
temp_r31->unk1C = 0.0f;
var_r28 = 0;
var_r27 = 1;
}
temp_r31->unk48 = -2.4333334f;
break;
case 3:
var_r27 = 0;
if (Hu3DData[temp_r25].unk_0C == -1 && CharModelMotionEndCheck(temp_r31->unk01)) {
temp_r31->unk48 += -2.4333334f;
} else {
temp_r31->unk48 = 0.0f;
}
if (temp_r31->unk0C != 0) {
if (temp_r31->unk0D != 0) {
temp_r31->unk48 = 0.0f;
temp_r31->unk0D = 0;
var_r28 = 5;
var_r27 = 0;
} else {
temp_r31->unk48 *= -0.1f;
temp_r31->unk0C = 0;
var_r28 = 4;
var_r27 = 0;
}
}
break;
case 4:
temp_r31->unk48 += -2.4333334f;
if (temp_r31->unk0C != 0 && CharModelMotionEndCheck(temp_r31->unk01)) {
var_r28 = 5;
var_r27 = 0;
}
break;
case 5:
if (CharModelMotionEndCheck(temp_r31->unk01)) {
var_r28 = 0;
var_r27 = 1;
}
break;
case 6:
case 7:
var_r27 = 0;
temp_r31->unk48 = -2.4333334f;
break;
}
if (temp_r31->unk07 & 4) {
if (temp_r31->unk0A & 2) {
Hu3DModelAttrSet(temp_r25, 1);
} else {
Hu3DModelAttrReset(temp_r25, 1);
}
if (--temp_r31->unk0A == 0) {
temp_r31->unk07 &= ~4;
}
}
temp_r31->unk44 = temp_r31->unk1C * sind(temp_r31->unk20);
temp_r31->unk4C = temp_r31->unk1C * cosd(temp_r31->unk20);
temp_r31->unk2C.x += temp_r31->unk44;
if (temp_r31->unk0C == 0) {
temp_r31->unk2C.y += temp_r31->unk48;
}
temp_r31->unk2C.z += temp_r31->unk4C;
if (var_r28 != temp_r31->unk1A) {
temp_r31->unk1A = var_r28;
temp_r31->unk18 = var_r28;
CharModelMotionShiftSet(temp_r31->unk01, arg0->motion[temp_r31->unk18], 0.0f, 8.0f, var_r27);
temp_r31->unk28 = CharModelMotionMaxTimeGet(temp_r31->unk01);
}
omSetTra(arg0, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z);
omSetRot(arg0, temp_r31->unk38, temp_r31->unk3C, temp_r31->unk40);
}
static void fn_1_3800(void) {
s32 var_r29;
s32 i;
Unkm403Struct_01 *temp_r30;
var_r29 = 0;
for (i = 0; i < 4; i++) {
temp_r30 = lbl_1_bss_34[i]->data;
if (temp_r30->unk07 != 0) {
temp_r30->unk0E = 0;
}
}
while (fn_1_3894() != 0 && var_r29 < 50) {
var_r29++;
}
}
static s32 fn_1_3894(void) {
Vec sp14[4];
Vec sp8;
float var_f31;
float var_f30;
s32 var_r26;
omObjData* temp_r25;
Unkm403Struct_01 *temp_r28;
Unkm403Struct_01 *temp_r27;
Unkm403Struct_01 *temp_r31;
s32 i;
s32 j;
var_r26 = 0;
for (i = 0; i < 4; i++) {
sp14[i].x = sp14[i].y = sp14[i].z = 0.0f;
}
for (i = 0; i < 3; i++) {
temp_r28 = lbl_1_bss_34[i]->data;
if (temp_r28->unk07 != 0) {
for (j = i + 1; j < 4; j++) {
temp_r27 = lbl_1_bss_34[j]->data;
if (temp_r27->unk07 != 0) {
VECSubtract(&temp_r28->unk2C, &temp_r27->unk2C, &sp8);
var_f31 = VECMag(&sp8);
if (var_f31 < 80.0f) {
VECNormalize(&sp8, &sp8);
var_f30 = 0.0001f + 0.5f * (80.0f - var_f31);
VECScale(&sp8, &sp8, var_f30);
VECAdd(&sp14[i], &sp8, &sp14[i]);
VECSubtract(&sp14[j], &sp8, &sp14[j]);
temp_r28->unk0E++;
temp_r27->unk0E++;
var_r26++;
}
}
}
}
}
for (i = 0; i < 4; i++) {
temp_r25 = lbl_1_bss_34[i];
temp_r31 = temp_r25->data;
if (temp_r31->unk07 != 0) {
VECAdd(&temp_r31->unk2C, &sp14[i], &temp_r31->unk2C);
if (temp_r31->unk2C.x > 660.0f) {
temp_r31->unk2C.x = 660.0f;
}
if (temp_r31->unk2C.x < -660.0f) {
temp_r31->unk2C.x = -660.0f;
}
if (temp_r31->unk2C.z > 360.0f) {
temp_r31->unk2C.z = 360.0f;
}
if (temp_r31->unk2C.z < -360.0f) {
temp_r31->unk2C.z = -360.0f;
}
omSetTra(temp_r25, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z);
}
}
return var_r26;
}
static void fn_1_3B80(omObjData *arg0) {
s32 sp8[4];
s32 var_r30;
s32 i;
if (lbl_1_bss_30 < 6) {
return;
}
if (fn_1_8264() != 0) {
for (i = 0; i < 4; i++) {
fn_1_3E4C(lbl_1_bss_34[i]);
}
} else {
for (i = 0, var_r30 = 0; i < 4; i++) {
((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk9C = 0;
if (((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk07 != 0) {
sp8[var_r30++] = i;
}
}
if (var_r30 != 0) {
i = sp8[(s32) (var_r30 * (fn_1_4528() / 65536.0f))];
((Unkm403Struct_01*) lbl_1_bss_34[i]->data)->unk9C = 1;
}
}
fn_1_3800();
}
static void fn_1_3D6C(Vec *arg0, Vec *arg1) {
Vec sp18[6];
Vec spC;
float var_f31;
float var_f30;
s32 temp_r30;
s32 i;
temp_r30 = fn_1_8470(sp18);
var_f31 = 2000.0f;
for (i = 0; i < temp_r30; i++) {
VECSubtract(&sp18[i], arg0, &spC);
var_f30 = VECMag(&spC);
if (var_f30 >= var_f31) {
continue;
}
var_f31 = var_f30;
*arg1 = sp18[i];
}
}
static void fn_1_3E4C(omObjData *arg0) {
Vec sp8;
float var_f30;
float var_f31;
Unkm403Struct_01 *temp_r31;
temp_r31 = arg0->data;
if (temp_r31->unk07 != 0) {
var_f30 = fn_1_80D4(&temp_r31->unk2C, lbl_1_data_114[temp_r31->unk01]) - 10.0f;
if (var_f30 < 0.0f) {
var_f30 = 0.0f;
}
if (!(temp_r31->unk07 & 2)) {
var_f31 = 1.0f;
if (var_f30 < lbl_1_data_134[temp_r31->unk01]) {
if (fn_1_86A0(&temp_r31->unk2C, &sp8) != 0) {
temp_r31->unk2C.x = sp8.x;
temp_r31->unk2C.z = sp8.z;
} else {
if (fn_1_7F78(temp_r31->unk2C.x, temp_r31->unk2C.z) - 10.0f < 100.0f) {
temp_r31->unk07 |= 2;
}
var_f31 = var_f30 / lbl_1_data_134[temp_r31->unk01];
}
}
} else {
var_f31 = var_f30 / lbl_1_data_134[temp_r31->unk01];
}
if (arg0->scale.y < var_f31) {
var_f31 = arg0->scale.y + 0.2f * (var_f31 - arg0->scale.y);
}
arg0->scale.y = var_f31;
}
}
static s16 fn_1_400C(s32 arg0, s16 arg1, ParticleHook arg2) {
AnimData *var_r29;
ParticleData *temp_r31;
s32 temp_r30;
var_r29 = HuSprAnimRead(HuDataReadNum(arg0, MEMORY_DEFAULT_NUM));
temp_r30 = Hu3DParticleCreate(var_r29, arg1);
Hu3DParticleHookSet(temp_r30, arg2);
temp_r31 = Hu3DData[temp_r30].unk_120;
temp_r31->unk_2E = temp_r30;
temp_r31->unk_00 = temp_r31->unk_02 = 0;
return temp_r30;
}
static void fn_1_40A8(ModelData *model, ParticleData *particle, Mtx matrix) {
float temp_f31;
float temp_f30;
float temp_f29;
HsfanimStruct01 *var_r31;
s16 sp8;
s32 i;
sp8 = 0;
switch (particle->unk_00) {
case 0:
temp_f29 = 360.0f / particle->unk_30;
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
var_r31->unk08.x = sind(temp_f29 * i) * (1.0f + 6.0f * ((fn_1_4528() - 0x8000) / 32768.0f) * 0.1f);
var_r31->unk08.y = 0.0f;
var_r31->unk08.z = cosd(temp_f29 * i) * (1.0f + 6.0f * ((fn_1_4528() - 0x8000) / 32768.0f) * 0.1f);
var_r31->unk34.x = 0.0f;
var_r31->unk34.y = 0.0f;
var_r31->unk34.z = 0.0f;
}
particle->unk_02 = 30;
particle->unk_00++;
/* fallthrough */
case 1:
particle->unk_02--;
temp_f31 = (30.0f - particle->unk_02) / 30.0f;
temp_f30 = particle->unk_02 / 30.0f;
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
var_r31->unk34.x += 5.0f * temp_f30 * var_r31->unk08.x;
var_r31->unk34.y = 20.0f;
var_r31->unk34.z += 5.0f * temp_f30 * var_r31->unk08.z;
var_r31->unk2C = 20.0f + 60.0f * temp_f31;
var_r31->unk40.r = var_r31->unk40.g = var_r31->unk40.b = 0xFF;
var_r31->unk40.a = 64.0f * (1.0f - temp_f31 * temp_f31);
}
if (particle->unk_02 == 0) {
particle->unk_00++;
}
break;
case 2:
Hu3DModelKill(particle->unk_2E);
return;
}
DCFlushRange(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01));
}
static s32 fn_1_4528(void) {
lbl_1_data_154 *= 0x41C64E6D;
lbl_1_data_154 += 0x3039;
return lbl_1_data_154 >> 16;
}
static float fn_1_457C(float arg0, float arg1, float arg2) {
float var_f31;
if (arg0 > 180.0f) {
arg0 -= 360.0f;
} else if (arg0 <= -180.0f) {
arg0 += 360.0f;
}
if (arg1 > 180.0f) {
arg1 -= 360.0f;
} else if (arg1 <= -180.0f) {
arg1 += 360.0f;
}
var_f31 = arg0 - arg1;
if (var_f31 > 180.0f) {
var_f31 -= 360.0f;
} else if (var_f31 <= -180.0f) {
var_f31 += 360.0f;
}
arg0 = arg1 + var_f31 * arg2;
if (arg0 > 180.0f) {
arg0 -= 360.0f;
} else if (arg0 <= -180.0f) {
arg0 += 360.0f;
}
return arg0;
}
static void fn_1_46E4(Mtx arg0, float arg1, float arg2, float arg3) {
Mtx sp38;
Mtx sp8;
if (arg3 != 0.0f) {
PSMTXRotRad(arg0, 'Z', MTXDegToRad(arg3));
} else {
PSMTXIdentity(arg0);
}
if (arg1 != 0.0f) {
PSMTXRotRad(sp38, 'X', MTXDegToRad(arg1));
PSMTXConcat(sp38, arg0, arg0);
}
if (arg2 != 0.0f) {
PSMTXRotRad(sp8, 'Y', MTXDegToRad(arg2));
PSMTXConcat(sp8, arg0, arg0);
}
}
static void fn_1_4804(float *arg0, float *arg1) {
float temp_f29;
float var_f28;
double var_f30;
arg1[0] = atan2d(arg0[10], arg0[6]);
arg1[2] = atan2d(arg0[0], arg0[1]);
temp_f29 = -arg0[2];
if (1.0 - temp_f29 * temp_f29 < 0.0) {
var_f30 = -(1.0 - temp_f29 * temp_f29);
} else {
var_f30 = 1.0 - temp_f29 * temp_f29;
}
var_f28 = sqrtf(var_f30);
if (arg1[0] > 90.0f && arg1[0] < 270.0f && arg1[2] > 90.0f && arg1[2] < 270.0f) {
arg1[0] = fmod(180.0f + arg1[0], 360.0);
arg1[2] = fmod(180.0f + arg1[2], 360.0);
var_f28 = -var_f28;
}
arg1[1] = atan2d(var_f28, temp_f29);
}
static float fn_1_4B10(float arg0, float arg1, float arg2, float arg3) {
float temp_f31;
float var_f30;
temp_f31 = 1.0 - arg0;
var_f30 = temp_f31 * temp_f31 * arg1 + temp_f31 * arg0 * arg2 * 2.0 + arg0 * arg0 * arg3;
return var_f30;
}
static void fn_1_4B88(float *arg0, float *arg1, float *arg2, float *arg3, float arg4) {
s32 i;
for (i = 0; i < 3; i++) {
*(arg3++) = fn_1_4B10(arg4, *(arg0++), *(arg1++), *(arg2++));
}
}
static float fn_1_4CA4(float arg0, float arg1, float arg2, float arg3) {
float var_f31 = 2.0 * ((arg0 - 1.0) * arg1 + (1.0 - 2.0 * arg0) * arg2 + arg0 * arg3);
return var_f31;
}
static void fn_1_4D1C(float *arg0, float *arg1, float *arg2, float *arg3, float arg4) {
float spC[3];
float var_f29;
s32 i;
for (i = 0; i < 3; i++) {
spC[i] = fn_1_4CA4(arg4, *(arg0++), *(arg1++), *(arg2++));
}
var_f29 = VECMagPoint(spC[0], spC[1], spC[2]);
if (var_f29) {
var_f29 = 1.0 / var_f29;
for (i = 0; i < 3; i++) {
*(arg3++) = var_f29 * spC[i];
}
} else {
*(arg3++) = 0.0f;
*(arg3++) = 0.0f;
*(arg3++) = 1.0f;
}
}
static void fn_1_4FF4(float *arg0, float *arg1, float *arg2, s32 arg3) {
float sp48[16];
float sp8[16];
double temp_f31;
s32 i;
arg2[0] = 0.0f;
arg2[arg3 - 1] = 0.0f;
for (i = 0; i < arg3 - 1; i++) {
sp48[i] = arg0[i + 1] - arg0[i];
if (sp48[i] == 0.0f) {
sp8[i + 1] = 0.0f;
} else {
sp8[i + 1] = (arg1[i + 1] - arg1[i]) / sp48[i];
}
}
arg2[1] = sp8[2] - sp8[1];
sp8[1] = 2.0f * (arg0[2] - arg0[0]);
for (i = 1; i < arg3 - 2; i++) {
temp_f31 = sp48[i] / sp8[i];
arg2[i + 1] = sp8[i + 2] - sp8[i + 1] - temp_f31 * arg2[i];
sp8[i + 1] = 2.0f * (arg0[i + 2] - arg0[i]) - temp_f31 * sp48[i];
}
arg2[arg3 - 2] -= sp48[arg3 - 2] * arg2[arg3 - 1];
for (i = arg3 - 2; i > 0; i--) {
if (sp8[i] == 0.0f) {
arg2[i] = 0.0f;
} else {
arg2[i] = (arg2[i] - sp48[i] * arg2[i + 1]) / sp8[i];
}
}
}
static float fn_1_52AC(float arg0, float *arg1, float *arg2, float *arg3, s32 arg4) {
float temp_f31;
float temp_f30;
float var_f29;
s32 temp_r31;
temp_r31 = arg0;
arg0 -= temp_r31;
temp_f31 = arg1[temp_r31 + 1] - arg1[temp_r31];
temp_f30 = temp_f31 * arg0;
var_f29 = arg2[temp_r31] + temp_f30 * (temp_f30 * (3.0f * arg3[temp_r31] + temp_f30 * (arg3[temp_r31 + 1] - arg3[temp_r31]) / temp_f31) + ((arg2[temp_r31 + 1] - arg2[temp_r31]) / temp_f31 - temp_f31 * (2.0f * arg3[temp_r31] + arg3[temp_r31 + 1])));
if (temp_f31 == 0.0f) {
var_f29 = arg2[temp_r31];
}
return var_f29;
}
static void fn_1_5400(float *arg0, Vec *arg1, float arg2[][3], s32 arg3) {
Vec sp8;
float temp_f31;
float spD4[16];
float sp94[16];
s32 j;
s32 i;
arg0[0] = 0.0f;
for (i = 1; i < arg3; i++) {
VECSubtract(&arg1[i], &arg1[i - 1], &sp8);
arg0[i] = arg0[i - 1] + VECMag(&sp8);
}
for (j = 0; j < 3; j++) {
for (i = 0; i < arg3; i++) {
spD4[i] = ((float*) &arg1[i])[j];
}
fn_1_4FF4(arg0, spD4, sp94, arg3);
for (i = 0; i < arg3; i++) {
arg2[i][j] = sp94[i];
}
}
}
static void fn_1_57E0(float arg0, Vec *arg1, float *arg2, Vec *arg3, float arg4[][3], s32 arg5) {
float sp48[16];
float sp8[16];
s32 i;
s32 j;
for (i = 0; i < 3; i++) {
for (j = 0; j < arg5; j++) {
sp48[j] = ((float*) &arg3[j])[i];
sp8[j] = arg4[j][i];
}
((float*) arg1)[i] = fn_1_52AC(arg0, arg2, sp48, sp8, arg5);
}
}
static float fn_1_59F4(Vec *arg0) {
float var_f30;
float var_f29;
var_f30 = arg0->x * arg0->x + arg0->y * arg0->y + arg0->z * arg0->z;
var_f30 = sqrtf(var_f30);
if (var_f30 != 0.0f) {
var_f29 = 1.0f / var_f30;
arg0->x *= var_f29;
arg0->y *= var_f29;
arg0->z *= var_f29;
} else {
arg0->x = arg0->y = arg0->z = 0.0f;
}
return var_f30;
}
static void fn_1_5B8C(Vec arg0, Vec arg1, Vec *arg2, float arg3) {
if (arg3 <= 0.0f) {
arg2->x = arg0.x;
arg2->y = arg0.y;
arg2->z = arg0.z;
arg3 = 0.0f;
} else if (arg3 >= 1.0f) {
arg2->x = arg0.x + arg1.x;
arg2->y = arg0.y + arg1.y;
arg2->z = arg0.z + arg1.z;
arg3 = 1.0f;
} else {
arg2->x = arg0.x + arg3 * arg1.x;
arg2->y = arg0.y + arg3 * arg1.y;
arg2->z = arg0.z + arg3 * arg1.z;
}
}
static float fn_1_5C64(Vec arg0, Vec arg1, Vec arg2) {
float var_f31;
float temp_f30;
var_f31 = arg2.x * (arg1.x - arg0.x) + arg2.y * (arg1.y - arg0.y) + arg2.z * (arg1.z - arg0.z);
temp_f30 = -(arg2.x * arg2.x + arg2.y * arg2.y + arg2.z * arg2.z);
if (temp_f30 != 0.0f) {
var_f31 /= temp_f30;
}
return var_f31;
}
static float fn_1_5D20(Vec *arg0, Vec *arg1, Vec *arg2) {
Vec sp44;
float var_f31;
if (arg2->x * arg2->x + arg2->y * arg2->y + arg2->z * arg2->z == 0.0f) {
return (arg0->x - arg1->x) * (arg0->x - arg1->x) + (arg0->y - arg1->y) * (arg0->y - arg1->y) + (arg0->z - arg1->z) * (arg0->z - arg1->z);
}
var_f31 = fn_1_5C64(*arg0, *arg1, *arg2);
fn_1_5B8C(*arg1, *arg2, &sp44, var_f31);
return (arg0->x - sp44.x) * (arg0->x - sp44.x) + (arg0->y - sp44.y) * (arg0->y - sp44.y) + (arg0->z - sp44.z) * (arg0->z - sp44.z);
}
static float fn_1_605C(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3, Vec *arg4) {
float var_f27;
if (arg2->x * arg2->x + arg2->y * arg2->y + arg2->z * arg2->z == 0.0f) {
return (arg0->x - arg1->x) * (arg0->x - arg1->x) + (arg0->y - arg1->y) * (arg0->y - arg1->y) + (arg0->z - arg1->z) * (arg0->z - arg1->z);
}
var_f27 = fn_1_5C64(*arg0, *arg1, *arg2);
fn_1_5B8C(*arg1, *arg2, arg3, var_f27);
arg4->x = arg3->x - arg0->x;
arg4->y = arg3->y - arg0->y;
arg4->z = arg3->z - arg0->z;
return fn_1_59F4(arg4);
}