marioparty4/src/REL/m415Dll/main.c
2024-09-29 01:13:30 -04:00

1867 lines
No EOL
65 KiB
C

#include "REL/m415Dll.h"
#include "rel_sqrt_consts.h"
#include "math.h"
#include "ext_math.h"
#include "game/audio.h"
#include "game/chrman.h"
#include "game/EnvelopeExec.h"
#include "game/esprite.h"
#include "game/frand.h"
#include "game/hsfdraw.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/minigame_seq.h"
#include "game/objsub.h"
#include "game/pad.h"
#include "game/sprite.h"
#include "game/wipe.h"
// bss
unkStruct5 lbl_1_bss_36C;
omObjData* lbl_1_bss_368;
omObjData* lbl_1_bss_364;
omObjData* lbl_1_bss_360;
omObjData* lbl_1_bss_35C;
omObjData* lbl_1_bss_34C[4];
u16 lbl_1_bss_34A;
s16 lbl_1_bss_348;
s16 lbl_1_bss_346;
s16 lbl_1_bss_344;
s16 lbl_1_bss_342;
s16 lbl_1_bss_33A[4];
s16 lbl_1_bss_338;
u8* lbl_1_bss_334;
s32 lbl_1_bss_234[4][4][4];
void* lbl_1_bss_34[0x80];
s32 lbl_1_bss_2C[2];
unkStruct lbl_1_bss_4[4];
static s32 pad_05_00000000_bss;
// data
Vec lbl_1_data_0 = { 0.0f, 3000.0f, 2000.0f };
Vec lbl_1_data_C = { 0.0f, -0.7f, -0.6f };
GXColor lbl_1_data_18 = { 0xFF, 0xFF, 0xFF, 0xFF };
Vec lbl_1_data_1C = { 0.0f, 3000.0f, -2000.0f };
Vec lbl_1_data_28 = { 0.0f, 1.0f, 0.0f };
Vec lbl_1_data_34 = { 0.0f, 0.0f, 0.0f };
void ObjectSetup(void) {
s32 var_r31;
Process* temp_r30;
omObjData* var_r29;
LightData* var_r28;
s32 temp_r27;
s32 var_r26;
OSReport("******* M415ObjectSetup *********\n");
Hu3DLighInit();
var_r26 = Hu3DGLightCreateV(&lbl_1_data_0, &lbl_1_data_C, &lbl_1_data_18);
Hu3DGLightInfinitytSet(var_r26);
var_r28 = &Hu3DGlobalLight[0];
var_r28->unk_00 |= 0x8000;
temp_r30 = omInitObjMan(0x32, 0x2000);
temp_r27 = frand() & 0x1F;
for (var_r31 = 0; var_r31 < temp_r27; var_r31++) {
fn_1_679C();
}
CRot.x = -55.0f;
CRot.y = 0.0f;
CRot.z = 0.0f;
Center.x = 0.0f;
Center.y = 200.0f;
Center.z = 200.0f;
CZoom = 1500.0f;
Hu3DCameraCreate(1);
Hu3DCameraPerspectiveSet(1, -1.0f, 5.0f, 10000.0f, 1.2f);
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
lbl_1_bss_364 = omAddObjEx(temp_r30, 0x7FDA, 0, 0, -1, omOutView);
lbl_1_bss_368 = omAddObjEx(temp_r30, 0x10, 8, 0, -1, fn_1_43C);
lbl_1_bss_35C = omAddObjEx(temp_r30, 0x20, 0x10, 0, -1, fn_1_15D0);
lbl_1_bss_360 = omAddObjEx(temp_r30, 0x50, 0x10, 0, -1, fn_1_2B18);
omAddObjEx(temp_r30, 0x60, 0, 0, -1, fn_1_6304);
omMakeGroupEx(temp_r30, 0, 4);
omGetGroupMemberListEx(temp_r30, 0);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
lbl_1_bss_34C[var_r31] = var_r29 = omAddObjEx(temp_r30, 0x30, 6, 0xA, 0, fn_1_3208);
var_r29->work[0] = var_r31;
var_r29->work[1] = var_r31;
}
Hu3DShadowCreate(30.0f, 100.0f, 25000.0f);
Hu3DShadowTPLvlSet(0.4f);
Hu3DShadowPosSet(&lbl_1_data_1C, &lbl_1_data_28, &lbl_1_data_34);
omGameSysInit(temp_r30);
HuAudSndGrpSet(0x28);
fn_1_6368();
fn_1_8780(0x40, 0x40);
}
void fn_1_43C(omObjData* object) {
CameraData* var_r31;
var_r31 = &Hu3DCamera[0];
lbl_1_bss_34A = 0;
WipeCreate(1, 0, 0x3C);
var_r31->fov = 45.0f;
object->func = fn_1_4B0;
}
void fn_1_4B0(omObjData* object) {
Vec sp14;
Vec sp8;
s32 var_r31;
f32 var_f31;
switch (lbl_1_bss_34A) {
case 0:
sp14.x = 0.0f;
sp14.y = 200.0f;
sp14.z = 200.0f;
sp8.x = -55.0f;
sp8.y = 0.0f;
sp8.z = 0.0f;
var_f31 = 1500.0f;
fn_1_2E88(1.0f, &sp14, &sp8, var_f31);
fn_1_A94C(0x2E000D, 0, 0);
HuDataDirClose(0x2E000D);
fn_1_A94C(0x2E000C, 0x40, 0x40);
HuDataDirClose(0x2E000C);
lbl_1_bss_342 = 0x78;
HuAudFXPlay(0x5AE);
lbl_1_bss_34A++;
break;
case 1:
if (72.0f == lbl_1_bss_342) {
HuAudFXPlay(0x5AF);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
omVibrate(var_r31, 0xC, 4, 2);
}
}
if (--lbl_1_bss_342 == 0) {
lbl_1_bss_34A++;
}
break;
case 2:
if (lbl_1_bss_342 == 0) {
lbl_1_bss_342 = 90;
}
if (--lbl_1_bss_342 == 0) {
lbl_1_bss_34A++;
}
break;
case 3:
lbl_1_bss_34A = 4;
lbl_1_bss_348 = lbl_1_bss_346 = -1;
object->func = fn_1_7D8;
HuSprAnimRead(HuDataReadNum(0x2E000D, 0x10000000));
break;
}
if ((omSysExitReq != 0) && (WipeStatGet() == 0)) {
WipeCreate(2, 0, 0x3C);
object->func = fn_1_14C0;
}
}
extern s32 lbl_1_data_64 = -1;
void fn_1_7D8(omObjData* object) {
GXColor sp18[4] = {
{ 0xF0, 0x00, 0x00, 0xFF },
{ 0x30, 0x60, 0xF0, 0xFF },
{ 0xE0, 0xE0, 0x00, 0xFF },
{ 0xFF, 0x80, 0x80, 0xFF }
};
s32 sp8[4];
s32 var_r31;
s32 var_r30;
s32 var_r29;
s32 var_r28;
s32 var_r27;
unkStruct2* var_r25;
s16 temp_r24;
s16 temp_r23;
s16 var_r22;
switch (lbl_1_bss_34A) {
case 4:
if (lbl_1_bss_346 == -1) {
lbl_1_bss_344 = 0x708;
lbl_1_bss_346 = MGSeqCreate(3, 0);
MGSeqPosSet(lbl_1_bss_346, 320.0f, 240.0f);
} else {
if (MGSeqStatGet(lbl_1_bss_346) == 0) {
lbl_1_bss_346 = -1;
lbl_1_bss_34A++;
lbl_1_bss_342 = 0;
lbl_1_bss_348 = MGSeqCreate(1, lbl_1_bss_344 / 60, -1, -1);
}
}
if ((lbl_1_data_64 == -1) && ((MGSeqStatGet(lbl_1_bss_346) & 0x10) != 0)) {
lbl_1_data_64 = HuAudSeqPlay(0x45);
}
break;
case 5:
var_r27 = 0;
lbl_1_bss_344--;
MGSeqParamSet(lbl_1_bss_348, 1, ((lbl_1_bss_344 + 0x3B) / 60));
if (lbl_1_bss_344 == 0) {
var_r27++;
}
if (var_r27 != 0) {
lbl_1_bss_34A += 1;
}
break;
case 6:
if (lbl_1_bss_346 == -1) {
lbl_1_bss_346 = MGSeqCreate(3, 1);
MGSeqPosSet(lbl_1_bss_346, 320.0f, 240.0f);
MGSeqParamSet(lbl_1_bss_348, 2, -1);
HuAudSeqFadeOut(lbl_1_data_64, 0x64);
} else if (MGSeqStatGet(lbl_1_bss_346) == 0) {
lbl_1_bss_346 = -1;
lbl_1_bss_34A++;
lbl_1_bss_342 = 0;
}
break;
case 7:
if (lbl_1_bss_342 == 0) {
for (var_r31 = 0; var_r31 < 4; var_r31++) {
lbl_1_bss_4[var_r31].unk8 = espEntry(0x2E0010, 10, 0);
espColorSet(lbl_1_bss_4[var_r31].unk8, 0, 0, 0);
espTPLvlSet(lbl_1_bss_4[var_r31].unk8, 0.5f);
espPosSet(lbl_1_bss_4[var_r31].unk8,
144.0f * (((var_r31 & 1) * 2) + 1),
120.0f * (((s16)(((var_r31 < 0) + var_r31) >> 1) << 1) + 1)
);
lbl_1_bss_4[var_r31].unk6 = espEntry(0x2E000F, 10, 0);
espPosSet(lbl_1_bss_4[var_r31].unk6,
144.0f * (((var_r31 & 1) * 2) + 1),
120.0f * (((s16)(((var_r31 < 0) + var_r31) >> 1) << 1) + 1)
);
for (var_r30 = 0; var_r30 < 3; var_r30++) {
lbl_1_bss_4[var_r31].unk0[var_r30] = espEntry(0x2E0011, 10, 0);
espPosSet(lbl_1_bss_4[var_r31].unk0[var_r30],
(32.0f * var_r30) + ((144.0f * (((var_r31 & 1) * 2) + 1)) - 32.0f),
(120.0f * (((s16)(((var_r31 < 0) + var_r31) >> 1) << 1) + 1))
);
espColorSet(lbl_1_bss_4[var_r31].unk0[var_r30], sp18[var_r31].r, sp18[var_r31].g, sp18[var_r31].b);
}
espBankSet(lbl_1_bss_4[var_r31].unk0[2], 10);
}
lbl_1_bss_342 = 0x3C;
HuAudFXPlay(0x5B4);
} else {
for (var_r31 = 0; var_r31 < 4; var_r31++) {
for (var_r30 = 0; var_r30 < 2; var_r30++) {
espBankSet(lbl_1_bss_4[var_r31].unk0[var_r30], (s32)((fn_1_679C() / 65536.0f) * 10.0f));
}
}
if (--lbl_1_bss_342 == 0) {
HuAudFXPlay(0x5B5);
var_r28 = 6;
for (var_r29 = 0; var_r29 < 4; var_r29++) {
sp8[var_r29] = 0;
for (var_r31 = 0; var_r31 < 4; var_r31++) {
for (var_r30 = 0; var_r30 < 4; var_r30++) {
sp8[var_r29] += lbl_1_bss_234[var_r29][var_r31][var_r30];
}
}
sp8[var_r29] = (0.99f + ((100.0f * sp8[var_r29]) / 360000.0f));
if (var_r28 < sp8[var_r29]) {
var_r28 = sp8[var_r29];
}
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
temp_r24 = sp8[var_r31];
espBankSet(lbl_1_bss_4[var_r31].unk0[0], temp_r24 / 10);
espBankSet(lbl_1_bss_4[var_r31].unk0[1], temp_r24 % 10);
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
lbl_1_bss_33A[var_r31] = -1;
}
var_r31 = 0;
var_r30 = 0;
for (;var_r31 < 4; var_r31++) {
if (sp8[var_r31] >= var_r28) {
var_r22 = GWPlayer[var_r31].coin_win;
temp_r23 = var_r22 + 10;
if (_CheckFlag(0x1000CU) == 0) {
GWPlayer[var_r31].coin_win = temp_r23;
}
lbl_1_bss_33A[var_r30++] = GWPlayerCfg[var_r31].character;
var_r25 = lbl_1_bss_34C[var_r31]->data;
var_r25->unkE = 1;
}
}
lbl_1_bss_342 = 0x3C;
lbl_1_bss_34A++;
}
}
break;
case 8:
if (lbl_1_bss_346 == -1) {
if (--lbl_1_bss_342 == 0) {
if (lbl_1_bss_33A[0] == -1) {
lbl_1_bss_346 = MGSeqCreate(3, 2);
HuAudSStreamPlay(4);
} else {
lbl_1_bss_346 = MGSeqCreate(5, 3, lbl_1_bss_33A[0], lbl_1_bss_33A[1], lbl_1_bss_33A[2], lbl_1_bss_33A[3]);
HuAudSStreamPlay(1);
}
lbl_1_bss_346 = -1;
lbl_1_bss_34A++;
lbl_1_bss_342 = 0xD2;
}
}
break;
case 9:
if (--lbl_1_bss_342 == 0) {
WipeCreate(2, 0, 0x3C);
object->func = fn_1_14C0;
}
break;
}
if ((omSysExitReq != 0) && (WipeStatGet() == 0)) {
WipeCreate(2, 0, 0x3C);
object->func = fn_1_14C0;
}
}
void fn_1_14C0(omObjData* object) {
if (WipeStatGet() == 0) {
CharModelKill(-1);
fn_1_B634();
fn_1_64DC();
MGSeqKill(lbl_1_bss_348);
MGSeqKillAll();
HuAudFadeOut(1);
omOvlReturnEx(1, 1);
}
}
void fn_1_1524(s16 arg0, char* arg1, f32 arg8, Mtx arg2) {
ModelData* temp_r31;
temp_r31 = &Hu3DData[arg0];
if (temp_r31->unk_08 != -1) {
Hu3DMotionExec(arg0, temp_r31->unk_08, arg8, 0);
}
if (temp_r31->unk_0C != -1) {
Hu3DSubMotionExec(arg0);
}
if (temp_r31->hsfData->cenvCnt != 0) {
EnvelopeProc(temp_r31->hsfData);
}
Hu3DModelObjMtxGet(arg0, arg1, arg2);
}
void fn_1_15D0(omObjData* object) {
Mtx sp20;
Vec sp14;
Vec sp8;
s32 var_r28;
s32 var_r27;
ModelData* var_r29;
f32 temp_f31;
s32 var_r31;
object->model[0] = var_r31 = Hu3DModelCreateFile(0x2E0000);
Hu3DModelShadowSet(var_r31);
temp_f31 = Hu3DMotionMaxTimeGet(var_r31);
fn_1_1524(var_r31, "oekaki", temp_f31, sp20);
sp14.x = -sp20[0][3];
sp14.y = -sp20[1][3];
sp14.z = -sp20[2][3];
fn_1_6A78(sp20, &sp8);
sp8.x = -(sp8.x - 90.0f);
sp8.y = -(sp8.y - 90.0f);
sp8.z = -(sp8.z - 90.0f);
Hu3DMotionTimeSet(var_r31, 0.0f);
Hu3DMotionSpeedSet(var_r31, 2.0f);
omSetTra(object, sp14.x, sp14.y, sp14.z);
omSetRot(object, sp8.x, sp8.y, sp8.z);
Hu3DModelPosSetV(var_r31, &sp14);
Hu3DModelRotSetV(var_r31, &sp8);
lbl_1_bss_338 = Hu3DAnimCreate(HuDataReadNum(0x2E000A, 0x10000000), var_r31, "dummy");
var_r28 = 0x57E40;
lbl_1_bss_334 = HuMemDirectMallocNum(HEAP_DATA, var_r28, 0x10000000);
memset(lbl_1_bss_334, 0, var_r28);
(void)var_r28;
memset(&lbl_1_bss_234, 0, 0x100);
var_r31 = fn_1_A2D0(1, 2);
object->model[1] = var_r31;
fn_1_AFC8(var_r31, 0, 0x2E000B, 0x200, 0x200);
fn_1_B864(var_r31, 0.0f, -50.0f, 0.0f);
fn_1_BB4C(var_r31, -90.0f, 0.0f, 0.0f);
fn_1_BC9C(var_r31, 5.0f, 5.0f, 1.0f);
fn_1_C2D0(var_r31, 0, 0);
var_r27 = fn_1_66AC();
object->model[2] = var_r27;
fn_1_C81C(var_r27, 4);
fn_1_B0B8(var_r31, 1, var_r27);
var_r31 = Hu3DModelCreateFile(0x2E0002);
object->model[3] = var_r31;
Hu3DModelShadowSet(var_r31);
Hu3DMotionSpeedSet(var_r31, 2.0f);
object->func = fn_1_1960;
}
void fn_1_1960(omObjData* object) {
u32 temp_r29;
AnimData** temp_r3;
switch (lbl_1_bss_34A) {
case 0:
break;
case 1:
GXDrawDone();
temp_r3 = fn_1_9734(object->model[2]);
temp_r29 = Hu3DShadowData.unk_02 * Hu3DShadowData.unk_02;
memcpy((*temp_r3)->bmp->data, OSCachedToUncached(Hu3DShadowData.unk_04), temp_r29);
DCStoreRangeNoSync((*temp_r3)->bmp->data, temp_r29);
break;
case 2:
Hu3DModelShadowMapObjSet(object->model[0], "kyanbasu");
Hu3DModelShadowReset(object->model[0]);
Hu3DModelShadowReset(object->model[3]);
break;
case 3:
case 4:
case 5:
break;
}
return;
}
void fn_1_1A60(unkStruct3* arg0) {
Mtx sp118;
Mtx spE8;
Vec spB8[4];
Vec sp88[4];
GXColor sp68[8] = {
{ 0xF0, 0x00, 0x00, 0xFF },
{ 0x00, 0x00, 0xF0, 0xFF },
{ 0xFF, 0x80, 0x80, 0xFF },
{ 0x00, 0xFF, 0x00, 0xFF },
{ 0x80, 0x00, 0xC0, 0xFF },
{ 0x80, 0x40, 0x00, 0xFF },
{ 0xE0, 0xE0, 0x00, 0xFF },
{ 0x00, 0x00, 0x00, 0xFF }
};
GXColor sp48[8] = {
{ 0xFF, 0x60, 0x60, 0xFF },
{ 0x60, 0x60, 0xFF, 0xFF },
{ 0xFF, 0xC0, 0xC0, 0xFF },
{ 0x40, 0xFF, 0x40, 0xFF },
{ 0xC0, 0x40, 0xFF, 0xFF },
{ 0xD0, 0x80, 0x40, 0xFF },
{ 0xFF, 0xFF, 0x20, 0xFF },
{ 0x80, 0x80, 0x80, 0xFF }
};
GXColor sp38[4] = {
{ 0xF0, 0x00, 0x00, 0xFF },
{ 0x00, 0x00, 0xF0, 0xFF },
{ 0xE0, 0xE0, 0x00, 0xFF },
{ 0xFF, 0x80, 0x80, 0xFF }
};
GXColor sp28[4] = {
{ 0xFF, 0x60, 0x60, 0xFF },
{ 0x60, 0x60, 0xFF, 0xFF },
{ 0xFF, 0xFF, 0x20, 0xFF },
{ 0xFF, 0xC0, 0xC0, 0xFF }
};
Vec sp1C;
s32 sp18;
s16 sp14;
s16 sp12;
s16 sp10;
s16 spE;
s16 spC;
s16 spA;
u8 sp8;
f32 var_f31;
f32 temp_f30;
f32 var_f29;
f32 var_f28;
s32 var_r31;
s16 var_r30;
s32 var_r29;
u8 temp_r28;
s16 var_r27;
s32 temp_r26;
s16 var_r24;
s16 var_r23;
u16* temp_r22;
u8 temp_r21;
AnimBmpData* var_r20;
s16 temp_r19;
s16 temp_r18;
s32 temp_r17;
sp1C = arg0->unk2C;
temp_f30 = arg0->unk20;
sp8 = arg0->unk1;
temp_r28 = arg0->unk0;
sp14 = 0.5f * (600.0f + sp1C.x);
sp12 = 0.5f * (600.0f + sp1C.z);
var_r20 = fn_1_668C(lbl_1_bss_338);
temp_r22 = (u16*)var_r20->data;
var_r27 = 0x32;
var_r30 = var_r27 >> 1;
spC = 0x96;
spA = 0;
if ((s16)temp_f30 == ((s16)(temp_f30 / 90.0f) * 90)) {
spB8[0].x = -var_r30;
spB8[0].y = -var_r30;
spB8[1].x = -var_r30;
spB8[1].y = var_r30;
spB8[2].x = var_r30;
spB8[2].y = -var_r30;
spB8[3].x = var_r30;
spB8[3].y = var_r30;
spB8[0].z = spB8[1].z = spB8[2].z = spB8[3].z = 0.0f;
} else {
spB8[0].x = var_r27;
spB8[0].y = var_r27;
spB8[1].x = var_r27;
spB8[1].y = -var_r27;
spB8[2].x = -var_r27;
spB8[2].y = var_r27;
spB8[3].x = -var_r27;
spB8[3].y = -var_r27;
spB8[0].z = spB8[1].z = spB8[2].z = spB8[3].z = 0.0f;
for (var_r31 = -1; var_r31 < 2; var_r31+=2) {
for (var_r29 = -1; var_r29 < 2; var_r29+=2) {
MTXRotDeg(sp118, 0x59, temp_f30);
PSMTXTrans(spE8, (var_r30 * var_r31), 0.0f, (var_r30 * var_r29));
PSMTXConcat(sp118, spE8, spE8);
if ((spB8[0].y > spE8[2][3]) || ((spB8[0].y == spE8[2][3]) && (spB8[0].x > spE8[0][3]))) {
spB8[0].x = spE8[0][3];
spB8[0].y = spE8[2][3];
}
if ((spB8[1].x > spE8[0][3]) || (spB8[1].x >= spE8[0][3]) && (spB8[1].y < spE8[2][3])) {
spB8[1].x = spE8[0][3];
spB8[1].y = spE8[2][3];
}
if ((spB8[2].x < spE8[0][3]) || (spB8[2].x <= spE8[0][3]) && (spB8[2].y > spE8[2][3])) {
spB8[2].x = spE8[0][3];
spB8[2].y = spE8[2][3];
}
if ((spB8[3].y <= spE8[2][3]) || (spB8[3].y <= spE8[2][3]) && (spB8[3].x < spE8[0][3])) {
spB8[3].x = spE8[0][3];
spB8[3].y = spE8[2][3];
}
}
}
}
VECSubtract(&spB8[1], &spB8[0], &sp88[0]);
VECSubtract(&spB8[2], &spB8[0], &sp88[1]);
VECSubtract(&spB8[3], &spB8[1], &sp88[2]);
VECSubtract(&spB8[3], &spB8[2], &sp88[3]);
temp_r17 = (1.5 * (var_r30 * var_r30));
for (var_r31 = spB8[0].y; var_r31 < spB8[3].y; var_r31++) {
var_r23 = sp12 + var_r31;
if (var_r23 >= 0 && (!(var_r23 >= 600.0f))) {
temp_r18 = (var_r23 / 150.0f);
if (var_r31 <= spB8[1].y) {
var_f31 = ((var_r31 - spB8[0].y) / sp88[0].y);
var_f29 = var_f31 * sp88[0].x + spB8[0].x;
} else {
var_f31 = ((var_r31 - spB8[1].y) / sp88[2].y);
var_f29 = var_f31 * sp88[2].x + spB8[1].x;
}
if (var_r31 <= spB8[2].y) {
var_f31 = ((var_r31 - spB8[0].y) / sp88[1].y);
var_f28 = var_f31 * sp88[1].x + spB8[0].x;
} else {
var_f31 = ((var_r31 - spB8[2].y) / sp88[3].y);
var_f28 = var_f31 * sp88[3].x + spB8[2].x;
}
for (var_r29 = var_f29; var_r29 < var_f28; var_r29++) {
var_r24 = sp14 + var_r29;
if (var_r24 >= 0 && (!(var_r24 >= 600.0f))) {
temp_r19 = (var_r24 / 150.0f);
temp_r26 = (600.0f * var_r23 + var_r24);
temp_r21 = lbl_1_bss_334[temp_r26];
lbl_1_bss_334[temp_r26] = temp_r28 + 1;
sp10 = (var_r24 >> 2);
spE = (var_r23 >> 2);
temp_r26 = ((var_r23 % 4) * 4) + ((sp10 * 0x10) + (var_r24 % 4) + spE * ((spC * 0x10) + (spA * 4)));
sp18 = ((fn_1_679C() / 65536.0f) * (1.0f + ((6.0f * (temp_r17 - ((var_r31 * var_r31) + (var_r29 * var_r29)))) / temp_r17)));
if (sp18 == 0) {
if (temp_r21 != (temp_r28 + 1)) {
temp_r22[temp_r26] = ((sp28[temp_r28].r >> 3) << 10) | ((sp28[temp_r28].g >> 3) << 5) | (sp28[temp_r28].b >> 3) | 0x8000;
}
} else {
temp_r22[temp_r26] = ((sp38[temp_r28].r >> 3) << 10) | ((sp38[temp_r28].g >> 3) << 5) | (sp38[temp_r28].b >> 3) | 0x8000;
}
if (temp_r21 != (temp_r28 + 1)) {
lbl_1_bss_234[temp_r28][temp_r19][temp_r18]++;
if (temp_r21 != 0) {
lbl_1_bss_234[temp_r21 - 1][temp_r19][temp_r18]--;
}
}
}
}
}
}
DCStoreRange(temp_r22, 0xAFC80);
}
void fn_1_2B18(omObjData* object) {
unkStruct4* var_r31;
var_r31 = fn_1_63A8(0x14C);
object->data = var_r31;
var_r31->unk148 = var_r31->unk144 = 0.0f;
var_r31->unk140 = 1.0f;
var_r31->unk10.x = var_r31->unk28.x = -55.0f;
var_r31->unk10.y = var_r31->unk28.y = 0.0f;
var_r31->unk10.z = var_r31->unk28.z = 0.0f;
var_r31->unk4.x = var_r31->unk1C.x = 0.0f;
var_r31->unk4.y = var_r31->unk1C.y = 200.0f;
var_r31->unk4.z = var_r31->unk1C.z = 200.0f;
var_r31->unk130 = var_r31->unk134 = 1500.0f;
object->func = fn_1_2C14;
}
void fn_1_2C14(omObjData* object) {
f32 temp_f31;
unkStruct4* temp_r31;
temp_r31 = (unkStruct4*)object->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->unk0 == 0) {
temp_r31->unk4.x = (temp_r31->unk1C.x + (temp_f31 * (temp_r31->unk34.x - temp_r31->unk1C.x)));
temp_r31->unk4.y = (temp_r31->unk1C.y + (temp_f31 * (temp_r31->unk34.y - temp_r31->unk1C.y)));
temp_r31->unk4.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_7A54(2.0f * temp_f31, &temp_r31->unk4, temp_r31->unkF4, temp_r31->unk64, temp_r31->unk88, 3);
fn_1_7A54(2.0f * temp_f31, &temp_r31->unk10, temp_r31->unk100, temp_r31->unkAC, temp_r31->unkD0, 3);
temp_r31->unk130 = fn_1_7520(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->unk4.x;
Center.y = temp_r31->unk4.y;
Center.z = temp_r31->unk4.z;
CZoom = temp_r31->unk130;
}
void fn_1_2E88(f32 arg0, Vec* arg1, Vec* arg2, f32 arg3) {
unkStruct4* temp_r31;
temp_r31 = lbl_1_bss_360->data;
temp_r31->unk0 = 0;
temp_r31->unk144 = arg0;
temp_r31->unk148 = arg0;
temp_r31->unk1C = temp_r31->unk4;
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;
}
void fn_1_2F28(f32 arg8, Vec* arg0, Vec* arg1, f32 arg9, Vec* arg2, Vec* arg3, f32 argA) {
unkStruct4* temp_r31;
temp_r31 = lbl_1_bss_360->data;
temp_r31->unk0 = 1;
temp_r31->unk148 = temp_r31->unk144 = arg8;
temp_r31->unk1C = temp_r31->unk4;
temp_r31->unk34.x = arg0->x;
temp_r31->unk34.y = arg0->y;
temp_r31->unk34.z = arg0->z;
temp_r31->unk4C.x = arg2->x;
temp_r31->unk4C.y = arg2->y;
temp_r31->unk4C.z = arg2->z;
temp_r31->unk28 = temp_r31->unk10;
temp_r31->unk40.x = arg1->x;
temp_r31->unk40.y = arg1->y;
temp_r31->unk40.z = arg1->z;
temp_r31->unk58.x = arg3->x;
temp_r31->unk58.y = arg3->y;
temp_r31->unk58.z = arg3->z;
temp_r31->unk134 = temp_r31->unk130;
temp_r31->unk138 = arg9;
temp_r31->unk13C = argA;
temp_r31->unk64[0] = temp_r31->unk1C;
temp_r31->unk64[1] = temp_r31->unk4C;
temp_r31->unk64[2] = temp_r31->unk34;
temp_r31->unkAC[0] = temp_r31->unk28;
temp_r31->unkAC[1] = temp_r31->unk58;
temp_r31->unkAC[2] = 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] = (temp_r31->unk124[1] + ABS(temp_r31->unk10C[2] - temp_r31->unk10C[1]));
fn_1_7674(temp_r31->unkF4, temp_r31->unk64, temp_r31->unk88, 3);
fn_1_7674(temp_r31->unk100, temp_r31->unkAC, temp_r31->unkD0, 3);
fn_1_7268(temp_r31->unk124, temp_r31->unk10C, temp_r31->unk118, 3);
}
void fn_1_31E0(f32 arg8) {
unkStruct4* data;
data = (unkStruct4*)lbl_1_bss_360->data;
data->unk140 = arg8;
}
s32 lbl_1_data_80[10] = {
0, 3, 5, 6,
0x2E0012, 0x2E001A, 0x2E0022, 0x2E001A,
0x17, 0x72
};
Vec lbl_1_data_A8[4] = {
{ -200.0f, 1600.0f, -200.0f },
{ 200.0f, 1600.0f, -200.0f },
{ -200.0f, 1600.0f, 200.0f },
{ 200.0f, 1600.0f, 200.0f }
};
void fn_1_3208(omObjData* object) {
s32 var_r29;
s32 var_r28;
u32 temp_r27;
unkStruct3* var_r31;
object->data = var_r31 = fn_1_63A8(0xA0);
var_r31->unk0 = object->work[0];
var_r31->unk1 = GWPlayerCfg[var_r31->unk0].character;
var_r31->unk2 = (var_r31->unk0 >> 1);
var_r31->unk3 = (var_r31->unk0 & 1);
var_r31->unk4 = GWPlayerCfg[var_r31->unk0].pad_idx;
var_r31->unk5 = GWPlayerCfg[var_r31->unk0].iscom;
var_r31->unk6 = GWPlayerCfg[var_r31->unk0].diff;
var_r31->unk18 = var_r31->unk1A = 4;
var_r31->unk7 = 1;
var_r31->unkC = 1;
var_r31->unkD = 0;
var_r31->unkA = 0;
var_r31->unk5D = 0;
var_r31->unk5C = 0;
var_r31->unkE = 0;
temp_r27 = object->work[1];
var_r31->unk2C.x = lbl_1_data_A8[temp_r27].x;
var_r31->unk2C.y = lbl_1_data_A8[temp_r27].y + (400.0f * ((fn_1_679C() - 0x8000) / 32768.0f));
var_r31->unk2C.z = lbl_1_data_A8[temp_r27].z;
var_r31->unk44.x = var_r31->unk44.y = var_r31->unk44.z = 0.0f;
var_r31->unk38.x = var_r31->unk38.y = var_r31->unk38.z = 0.0f;
var_r31->unk20 = var_r31->unk38.y;
var_r31->unk24 = 0.0f;
var_r31->unk1C = 0.0f;
var_r31->unk28 = 1.0f;
memset(&var_r31->unk60, 0, 0x40);
var_r29 = CharModelCreate(var_r31->unk1, 4);
object->model[0] = var_r29;
Hu3DModelAttrSet(var_r29, 0x40000001);
Hu3DModelShadowSet(var_r29);
for (var_r28 = 0; var_r28 < 10; var_r28++) {
if ((lbl_1_data_80[var_r28] & 0xFFFF0000) != 0) {
object->motion[var_r28] = CharModelMotionCreate(var_r31->unk1, var_r31->unk1 + lbl_1_data_80[var_r28]);
} else {
object->motion[var_r28] = CharModelMotionCreate(var_r31->unk1, lbl_1_data_80[var_r28]);
}
}
CharModelMotionDataClose(var_r31->unk1);
CharModelMotionSet(var_r31->unk1, object->motion[var_r31->unk18]);
CharModelStepTypeSet(var_r31->unk1, 1);
CharModelVoiceEnableSet(var_r31->unk1, object->motion[2], 0);
object->model[2] = var_r29 = Hu3DModelCreateFile(var_r31->unk0 + 0x2E0003);
object->model[3] = Hu3DJointMotion(var_r29, HuDataSelHeapReadNum(0x2E0007, 0x10000000, HEAP_DATA));
object->model[4] = Hu3DJointMotion(var_r29, HuDataSelHeapReadNum(0x2E0008, 0x10000000, HEAP_DATA));
object->model[5] = Hu3DJointMotion(var_r29, HuDataSelHeapReadNum(0x2E0009, 0x10000000, HEAP_DATA));
Hu3DModelPosSet(var_r29, var_r31->unk2C.x, var_r31->unk2C.y, var_r31->unk2C.z);
Hu3DModelHookSet(var_r29, "stamp00", object->model[0]);
Hu3DMotionSet(object->model[2], object->model[4]);
Hu3DModelShadowSet(var_r29);
object->func = fn_1_3640;
}
void fn_1_3640(omObjData* object) {
s32 sp8;
unkStruct3* temp_r31;
sp8 = object->model[0];
temp_r31 = (unkStruct3*)object->data;
temp_r31->unk10 = temp_r31->unk12 = 0;
temp_r31->unk14 = temp_r31->unk16 = 0;
switch (lbl_1_bss_34A) {
case 1:
break;
case 2:
if (lbl_1_bss_342 == 0) {
temp_r31->unk18 = 6;
temp_r31->unk44.y = 0.0f;
temp_r31->unkC = 0;
}
break;
case 4:
object->func = fn_1_3764;
break;
}
if (temp_r31->unk2C.y < 0.0f) {
omVibrate(temp_r31->unk0, 0xC, 6, 6);
HuAudFXPlay(0x5B0);
temp_r31->unk2C.y = 0.0f;
temp_r31->unkC = 1;
}
fn_1_3B44(object);
}
void fn_1_3764(omObjData* object) {
s32 spC;
s32 sp8;
unkStruct3* temp_r31;
spC = object->model[0];
temp_r31 = (unkStruct3*)object->data;
if (temp_r31->unk7 != 0) {
if ((lbl_1_bss_34A == 5) && ((temp_r31->unk7 & 2) == 0)) {
if (temp_r31->unk5 != 0) {
fn_1_4660(object);
} else {
temp_r31->unk10 = HuPadStkX[temp_r31->unk4];
temp_r31->unk12 = HuPadStkY[temp_r31->unk4];
temp_r31->unk14 = HuPadBtnDown[temp_r31->unk4];
temp_r31->unk16 = HuPadBtn[temp_r31->unk4];
}
} else {
temp_r31->unk10 = temp_r31->unk12 = 0;
temp_r31->unk14 = temp_r31->unk16 = 0;
}
switch (lbl_1_bss_34A) {
case 4:
case 5:
break;
case 6:
if ((Hu3DModelAttrGet(object->model[2]) & 1) == 0) {
Hu3DModelHookReset(object->model[2]);
Hu3DModelAttrSet(object->model[2], 1);
omSetTra(object, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z);
omSetRot(object, temp_r31->unk38.x, temp_r31->unk38.y, temp_r31->unk38.z);
sp8 = fn_1_A2D0(1, 1);
fn_1_B038(lbl_1_bss_36C.unk36, 0, 0x2E000C);
fn_1_B8D0(lbl_1_bss_36C.unk36, lbl_1_bss_36C.unk38, temp_r31->unk2C.x, 50.0f + temp_r31->unk2C.y, temp_r31->unk2C.z);
fn_1_BD08(lbl_1_bss_36C.unk36, lbl_1_bss_36C.unk38, 3.0f, 3.0f, 1.0f);
fn_1_BE30(lbl_1_bss_36C.unk36, lbl_1_bss_36C.unk38, 0x80000000);
fn_1_C110(lbl_1_bss_36C.unk36, lbl_1_bss_36C.unk38, 0xFF, 0xFF, 0xFF, 0xFF);
fn_1_C410(lbl_1_bss_36C.unk36, lbl_1_bss_36C.unk38, lbl_1_bss_36C.unk3A, 0x11);
fn_1_C58C(lbl_1_bss_36C.unk36, lbl_1_bss_36C.unk38, lbl_1_bss_36C.unk3A, 0.5f);
if (temp_r31->unkC != 0) {
temp_r31->unkC = 0;
temp_r31->unkB = 1;
temp_r31->unk44.y = 26.766666f;
}
temp_r31->unk18 = 2;
temp_r31->unk2C.y += 100.65;
}
break;
case 7:
temp_r31->unk20 = fn_1_67F0(temp_r31->unk20, 0.0f, 0.9f);
break;
case 9:
if (temp_r31->unkE != 0) {
temp_r31->unk18 = 8;
} else {
temp_r31->unk18 = 9;
}
break;
}
if (temp_r31->unk2C.y <= 0.0f) {
temp_r31->unk2C.y = 0.0f;
temp_r31->unkC = 1;
}
fn_1_3B44(object);
}
}
void fn_1_3B44(omObjData* object) {
s16 sp8;
unkStruct3* temp_r31;
s16 var_r29;
s16 var_r28;
s16 temp_r27;
s16 temp_r26;
s16 var_r25;
s16 temp_r24;
s32 temp_r23;
s32 var_r22;
var_r25 = 0;
temp_r23 = object->model[0];
temp_r31 = (unkStruct3*)object->data;
temp_r27 = temp_r31->unk10;
temp_r26 = temp_r31->unk12;
sp8 = temp_r31->unk14;
temp_r24 = temp_r31->unk16;
temp_r31->unk50 = temp_r31->unk2C;
var_r29 = temp_r31->unk18;
var_r28 = 0;
switch (temp_r31->unk18) {
case 0:
var_r28 = 1;
break;
case 1:
if (temp_r31->unk1C > 0.1f) {
var_r29 = 1;
var_r28 = 1;
temp_r31->unk20 = temp_r31->unk38.y;
temp_r31->unk24++;
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_r29 = 0;
var_r28 = 1;
}
break;
case 2:
temp_r31->unk44.y += -2.4333334f;
if (temp_r31->unkC != 0) {
var_r29 = 3;
var_r28 = 0;
temp_r31->unk44.y = 0.0f;
}
break;
case 3:
if (CharModelMotionEndCheck(temp_r31->unk1) != 0) {
var_r29 = 0;
var_r28 = 1;
}
break;
case 4:
temp_r31->unk44.y = -2.4333334f;
if (FABS(temp_r27) + FABS(temp_r26) > 8) {
temp_r31->unk20 = atan2d(temp_r27, -temp_r26);
}
if ((temp_r24 & 0x100) != 0) {
temp_r31->unkB = 0U;
var_r29 = 5;
var_r28 = 0;
var_r25 = 3;
if (FABS(temp_r27) + FABS(temp_r26) > 8) {
temp_r31->unk20 = atan2d(temp_r27, -temp_r26);
temp_r31->unk1C = 6.0f;
}
}
break;
case 5:
if (temp_r31->unkB < 0x20) {
temp_r31->unkB++;
}
if (FABS(temp_r27) + FABS(temp_r26) > 8) {
temp_r31->unk20 = atan2d(temp_r27, -temp_r26);
temp_r31->unk1C = 6.0f;
} else {
temp_r31->unk1C = 0.0f;
}
if ((temp_r24 & 0x100) == 0) {
temp_r31->unk44.y = (2.4333334f * (2.5f + (0.009f * temp_r31->unkB * temp_r31->unkB)));
var_r29 = 6;
var_r28 = 0;
var_r25 = 4;
if (temp_r31->unkB < 0xC) {
HuAudFXPlay(0x5B1);
} else if (temp_r31->unkB < 0x18) {
HuAudFXPlay(0x5B2);
} else {
HuAudFXPlay(0x5B3);
}
}
break;
case 6:
if ((Hu3DMotionEndCheck(object->model[2]) == 0) && (Hu3DMotionShiftIDGet(object->model[2]) >= 0)) {
temp_r31->unkC = 1;
} else {
if (temp_r31->unk44.y >= 0.0f) {
temp_r31->unkC = 0U;
}
temp_r31->unk44.y += -2.4333334f;
if (temp_r31->unkC != 0) {
if ((temp_r24 & 0x100) != 0) {
var_r29 = 4;
var_r28 = 1;
} else {
var_r29 = 7;
var_r28 = 0;
}
temp_r31->unk1C = 0.0f;
temp_r31->unk44.y = 0.0f;
var_r25 = 5;
fn_1_1A60(temp_r31);
var_r22 = fn_1_A2D0(0x28, 1);
fn_1_B038(var_r22, 0, 0x2E000D);
lbl_1_bss_36C.unk40[var_r22].unk30 = &fn_1_5B20;
fn_1_B864(var_r22, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z);
fn_1_C264(var_r22, 1);
}
}
break;
case 7:
if ((temp_r24 & 0x100) != 0) {
var_r29 = 4;
var_r28 = 1;
} else {
if (Hu3DMotionTimeGet(temp_r23) <= 0.0f) {
var_r29 = 4;
var_r28 = 1;
} else {
if ((Hu3DMotionTimeGet(temp_r23) >= 10.0f) && (Hu3DMotionShiftIDGet(temp_r23) < 0)) {
Hu3DModelAttrSet(temp_r23, 0x40000004);
}
}
}
break;
case 8:
case 9:
var_r28 = 0;
temp_r31->unk44.y = -2.4333334f;
break;
}
temp_r31->unk38.y = fn_1_67F0(temp_r31->unk38.y, temp_r31->unk20, 0.75f);
temp_r31->unk44.x = (temp_r31->unk1C * sind(temp_r31->unk20));
temp_r31->unk44.z = (temp_r31->unk1C * cosd(temp_r31->unk20));
if ((temp_r31->unkC == 0) || (var_r29 == 1)) {
temp_r31->unk2C.x += temp_r31->unk44.x;
temp_r31->unk2C.y += temp_r31->unk44.y;
temp_r31->unk2C.z += temp_r31->unk44.z;
}
temp_r31->unk18 = var_r29;
if (var_r29 != temp_r31->unk1A) {
temp_r31->unk1A = var_r29;
CharModelMotionShiftSet(temp_r31->unk1, object->motion[temp_r31->unk18], 0.0f, 8.0f, var_r28);
temp_r31->unk28 = CharModelMotionMaxTimeGet(temp_r31->unk1);
if (var_r25 != 0) {
Hu3DMotionShiftSet(object->model[2], object->model[var_r25], 0.0f, 8.0f, HU3D_MOTATTR_NONE);
}
}
if ((Hu3DModelAttrGet(object->model[2]) & 1) != 0) {
omSetTra(object, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z);
omSetRot(object, temp_r31->unk38.x, temp_r31->unk38.y, temp_r31->unk38.z);
} else {
omSetTra(object, 0.0f, 0.0f, 0.0f);
omSetRot(object, 0.0f, 0.0f, 0.0f);
Hu3DModelPosSet(object->model[2], temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z);
Hu3DModelRotSet(object->model[2], temp_r31->unk38.x, temp_r31->unk38.y, temp_r31->unk38.z);
}
}
void fn_1_4660(omObjData* object) {
s16 sp3C[3][3];
Vec sp30;
Vec sp24;
Vec sp18;
s32 sp14;
s32 sp10;
s16 spC;
f32 var_f31;
f32 temp_f30;
f32 var_f29;
unkStruct3* temp_r31;
s32 var_r30;
s32 var_r29;
u8 temp_r28;
u8 temp_r27;
s32 var_r26;
s32 var_r25;
s16 var_r24;
s16 var_r23;
unkStruct3* temp_r22;
u8 var_r21;
u8 var_r20;
s16 var_r19;
s16 var_r18;
s16 temp_r17;
temp_r31 = (unkStruct3*)object->data;
sp14 = object->model[0];
spC = temp_r31->unk18;
temp_r17 = temp_r31->unk6;
var_r24 = var_r23 = var_r19 = var_r18 = 0;
switch (temp_r31->unk5D) {
case 0:
temp_r28 = ((0.5f * (600.0f + temp_r31->unk2C.x)) / 150.0f);
temp_r27 = ((0.5f * (600.0f + temp_r31->unk2C.z)) / 150.0f);
if (lbl_1_bss_234[temp_r31->unk0][temp_r28][temp_r27] < 16875.0f) {
temp_r31->unk60s = temp_r28;
temp_r31->unk62s = temp_r27;
temp_r31->unk5D++;
} else {
var_r26 = 0x57E4;
for (var_r30 = temp_r28 - 1; var_r30 <= (temp_r28 + 1); var_r30++) {
if ((var_r30 >= 0) && (var_r30 < 4)) {
for (var_r29 = temp_r27 - 1; var_r29 <= (temp_r27 + 1); var_r29++) {
if ((var_r29 >= 0)
&& (var_r29 < 4)
&& (lbl_1_bss_234[temp_r31->unk0][var_r30][var_r29] <= var_r26)
&& ((var_r26 != lbl_1_bss_234[temp_r31->unk0][var_r30][var_r29])
|| ((fn_1_679C() & 1) == 0))) {
var_r21 = var_r30;
var_r20 = var_r29;
var_r26 = lbl_1_bss_234[temp_r31->unk0][var_r30][var_r29];
}
}
}
}
if (var_r26 < 16875.0f) {
temp_r31->unk60s = var_r21;
temp_r31->unk62s = var_r20;
temp_r31->unk5D++;
} else {
var_r26 = 0x57E4;
for (var_r30 = 0; var_r30 < 4; var_r30++) {
for (var_r29 = 0; var_r29 < 4; var_r29++) {
if (lbl_1_bss_234[temp_r31->unk0][var_r30][var_r29] <= var_r26) {
var_r21 = var_r30;
var_r20 = var_r29;
var_r26 = lbl_1_bss_234[temp_r31->unk0][var_r30][var_r29];
}
}
}
temp_r31->unk60s = var_r21;
temp_r31->unk62s = var_r20;
temp_r31->unk5D++;
}
}
break;
case 1:
var_f29 = 360000.0f;
sp18 = temp_r31->unk2C;
sp18.x += 50.0f * sind(temp_r31->unk38.y);
sp18.z += 50.0f * cosd(temp_r31->unk38.y);
for (var_r30 = 0; var_r30 < 3.0f; var_r30++) {
for (var_r29 = 0; var_r29 < 3.0f; var_r29++) {
sp3C[var_r30][var_r29] = 0;
}
}
for (var_r30 = 0; var_r30 < 150.0f; var_r30++) {
for (var_r29 = 0; var_r29 < 150.0f; var_r29++) {
sp30.x = (150.0f * temp_r31->unk60s) + var_r30;
sp30.z = (150.0f * temp_r31->unk62s) + var_r29;
sp10 = (sp30.x + (600.0f * sp30.z));
if ((temp_r31->unk0 + 1) != lbl_1_bss_334[sp10]) {
sp3C[(s16)(var_r30 / 50.0f)][(s16)(var_r29 / 50.0f)]++;
}
}
}
temp_r28 = (((0.5f * (600.0f + temp_r31->unk2C.x)) - (150.0f * temp_r31->unk60s)) / 50.0f);
temp_r27 = (((0.5f * (600.0f + temp_r31->unk2C.x)) - (150.0f * temp_r31->unk62s)) / 50.0f);
var_r25 = 0;
for (var_r30 = temp_r28 - 1; var_r30 <= (temp_r28 + 1); var_r30++) {
if (var_r30 >= 0) {
if (var_r30 >= 3.0f) continue;
for (var_r29 = temp_r27 - 1; var_r29 <= (temp_r27 + 1); var_r29++) {
if (var_r29 >= 0) {
if (var_r29 >= 3.0f) continue;
if (sp3C[var_r30][var_r29] < 1250.0f) continue;
if (sp3C[var_r30][var_r29] < var_r25) continue;
if ((var_r25 != sp3C[var_r30][var_r29]) || ((fn_1_679C() & 1) == 0)) {
var_r25 = sp3C[var_r30][var_r29];
sp30.x = 25.0f + ((150.0f * temp_r31->unk60s) + (50.0f * var_r30));
sp30.z = 25.0f + ((150.0f * temp_r31->unk62s) + (50.0f * var_r29));
sp30.x = (2.0f * sp30.x) - 600.0f;
sp30.z = (2.0f * sp30.z) - 600.0f;
sp30.y = 0.0f;
temp_r31->unk6C.x = sp30.x;
temp_r31->unk6C.y = sp30.y;
temp_r31->unk6C.z = sp30.z;
}
}
}
}
}
if (var_r25 == 0) {
var_r25 = 0;
for (var_r30 = 0; var_r30 < 3.0f; var_r30++) {
for (var_r29 = 0; var_r29 < 3.0f; var_r29++) {
if (sp3C[var_r30][var_r29] >= var_r25) {
sp30.x = 25.0f + ((150.0f * temp_r31->unk60s) + (50.0f * var_r30));
sp30.z = 25.0f + ((150.0f * temp_r31->unk62s) + (50.0f * var_r29));
sp30.x = (2.0f * sp30.x) - 600.0f;
sp30.z = (2.0f * sp30.z) - 600.0f;
sp30.y = 0.0f;
VECSubtract(&sp18, &sp30, &sp24);
temp_f30 = VECMag(&sp24);
if ((var_r25 != sp3C[var_r30][var_r29]) || !(temp_f30 > var_f29)) {
if (!(temp_f30 > var_f29) || !(sp3C[var_r30][var_r29] < (1.5f * var_r25))) {
temp_r31->unk6C.x = sp30.x;
temp_r31->unk6C.y = sp30.y;
temp_r31->unk6C.z = sp30.z;
var_r25 = sp3C[var_r30][var_r29];
var_f29 = temp_f30;
}
}
}
}
}
}
temp_r31->unk64 = (1.0f + ((5 - temp_r17) * (fn_1_679C() / 65536.0f)));
temp_r31->unk68 = (1.0f + ((0x32 - (temp_r17 * 0x10)) * (fn_1_679C() / 65536.0f)));
temp_r31->unk5D++;
break;
case 2:
if (--temp_r31->unk68 == 0) {
VECSubtract(&temp_r31->unk6C, &temp_r31->unk2C, &sp24);
VECNormalize(&sp24, &sp24);
var_r24 = (32.0f * sp24.x);
var_r23 = (32.0f * -sp24.z);
var_r19 = var_r18 = 0x100;
temp_r31->unk66 = 0x18 + (s32)(((20 - (temp_r17 * 6)) * ((fn_1_679C() - 0x8000) / 32768.0f)));
temp_r31->unk5D++;
}
break;
case 3:
var_r24 = temp_r31->unk10;
var_r23 = temp_r31->unk12;
var_r19 = var_r18 = 0x100;
if (--temp_r31->unk66 == 0) {
temp_r31->unk5D++;
}
break;
case 4:
if (spC != 7) {
var_r24 = temp_r31->unk10;
var_r23 = temp_r31->unk12;
} else {
for (var_r30 = 0; var_r30 < 4; var_r30++) {
temp_r22 = lbl_1_bss_34C[var_r30]->data;
if (temp_r22 == temp_r31) continue;
temp_r28 = ((0.5f * (600.0f + temp_r22->unk2C.x)) / 150.0f);
temp_r27 = ((0.5f * (600.0f + temp_r22->unk2C.z)) / 150.0f);
if (temp_r31->unk60s == temp_r28 && temp_r31->unk62s == temp_r27) break;
}
if (var_r30 != 4) {
var_r26 = 0x57E4;
for (var_r30 = 0; var_r30 < 4; var_r30++) {
for (var_r29 = 0; var_r29 < 4; var_r29++) {
if ((lbl_1_bss_234[temp_r31->unk0][var_r30][var_r29] <= var_r26) && ((temp_r31->unk60s != var_r30) || (temp_r31->unk62s != var_r29))) {
var_r21 = var_r30;
var_r20 = var_r29;
var_r26 = lbl_1_bss_234[temp_r31->unk0][var_r30][var_r29];
}
}
}
temp_r31->unk60s = var_r21;
temp_r31->unk62s = var_r20;
temp_r31->unk5D = 1;
} else {
var_r24 = (32.0 * sind(temp_r31->unk38.y));
var_r23 = (32.0 * -cosd(temp_r31->unk38.y));
var_f31 = 517.5f;
if ((temp_r31->unk2C.x > var_f31) || (temp_r31->unk2C.x < -var_f31)) {
var_r24 = -var_r24;
}
var_f31 = 517.5f;
if ((temp_r31->unk2C.z > var_f31) || (temp_r31->unk2C.z < -var_f31)) {
var_r23 = -var_r23;
}
if (--temp_r31->unk64 != 0) {
var_r19 = var_r18 = 0x100;
temp_r31->unk66 = 0x18 + (s32)(((20 - (temp_r17 * 6)) * ((fn_1_679C() - 0x8000) / 32768.0f)));
temp_r31->unk5D = 3;
} else {
temp_r28 = temp_r31->unk60s;
temp_r27 = temp_r31->unk62s;
if (lbl_1_bss_234[temp_r31->unk0][temp_r28][temp_r27] > 16875.0f) {
temp_r31->unk5D = 0;
} else {
temp_r31->unk5D = 1;
}
}
}
}
break;
}
temp_r31->unk10 = var_r24;
temp_r31->unk12 = var_r23;
temp_r31->unk14 = var_r19;
temp_r31->unk16 = var_r18;
}
void fn_1_5B20(unkSubStruct2* arg0) {
s16 sp8;
f32 temp_f31;
f32 temp_f30;
f32 temp_f29;
f32 temp_f28;
s32 var_r29;
unkSubStruct* var_r31;
sp8 = 0;
switch (arg0->unk60) {
case 0:
temp_f28 = 360.0f / arg0->unk2;
var_r31 = arg0->unk3C;
for (var_r29 = 0; var_r29 < arg0->unk2; var_r29++, var_r31++) {
var_r31->unk68.x = sind(temp_f28 * var_r29) * (0.5f + (0.1f * (1.2f * ((fn_1_679C() - 0x8000) / 32768.0f))));
var_r31->unk68.y = 0.0f;
var_r31->unk68.z = cosd(temp_f28 * var_r29) * (0.5f + (0.1f * (1.2f * ((fn_1_679C() - 0x8000) / 32768.0f))));
var_r31->unk0.x = 65.0f * var_r31->unk68.x;
var_r31->unk0.y = 6.0f;
var_r31->unk0.z = 65.0f * var_r31->unk68.z;
}
arg0->unk7Cs = 30;
arg0->unk60++;
case 1:
arg0->unk7Cs--;
temp_f31 = (30.0f - arg0->unk7Cs) / 30.0f;
temp_f29 = arg0->unk7Cs / 30.0f;
var_r31 = arg0->unk3C;
for (var_r29 = 0; var_r29 < arg0->unk2; var_r29++, var_r31++) {
var_r31->unk0.x += 5.0f * temp_f29 * var_r31->unk68.x;
var_r31->unk0.z += 5.0f * temp_f29 * var_r31->unk68.z;
temp_f30 = 0.4f + (1.2f * temp_f31);
var_r31->unk18.x = temp_f30;
var_r31->unk18.y = temp_f30;
var_r31->unk18.z = temp_f30;
var_r31->unk50.r = 0xFF;
var_r31->unk50.g = 0xFF;
var_r31->unk50.b = 0xFF;
var_r31->unk50.a = 96.0f * (1.0f - (temp_f31 * temp_f31));
}
if (arg0->unk7Cs == 0) {
arg0->unk60++;
}
break;
case 2:
fn_1_A800(arg0->unk0);
return;
}
}
void fn_1_5FB0(omObjData* arg0) {
Vec sp2C;
Vec sp20;
Vec sp14;
Vec sp8;
f32 temp_f31;
f32 var_f30;
f32 temp_f29;
f32 var_f28;
f32 temp_f27;
s32 var_r29;
unkStruct3* temp_r30;
unkStruct3* temp_r31;
temp_r31 = (unkStruct3*)arg0->data;
if (temp_r31->unk7 != 0) {
VECSubtract(&temp_r31->unk2C, &temp_r31->unk50, &sp2C);
var_f28 = VECMag(&sp2C);
if (var_f28 != 0.0f) {
for (var_r29 = 0; var_r29 < 4; var_r29++) {
if (var_r29 != temp_r31->unk0) {
temp_r30 = (unkStruct3*)lbl_1_bss_34C[var_r29]->data;
if (temp_r30->unk7 != 0) {
sp14.x = temp_r31->unk2C.x;
sp14.y = temp_r31->unk2C.y;
sp14.z = temp_r31->unk2C.z;
sp14.y = 0.0f;
sp8.x = temp_r30->unk2C.x;
sp8.y = temp_r30->unk2C.y;
sp8.z = temp_r30->unk2C.z;
sp8.y = 0.0f;
VECSubtract(&sp14, &sp8, &sp2C);
temp_f31 = VECMag(&sp2C);
if (temp_f31 >= 109.45f) continue;
VECSubtract(&temp_r30->unk2C, &temp_r30->unk50, &sp2C);
temp_f27 = VECMag(&sp2C);
VECSubtract(&sp14, &sp8, &sp20);
VECNormalize(&sp20, &sp20);
temp_f31 = 110.0f - temp_f31;
temp_f29 = ((0.6f * temp_f27) + (0.4f * var_f28)) / (var_f28 + temp_f27);
temp_r31->unk2C.x += temp_f29 * (temp_f31 * sp20.x);
temp_r31->unk2C.y += temp_f29 * (temp_f31 * sp20.y);
temp_r31->unk2C.z += temp_f29 * (temp_f31 * sp20.z);
temp_f29 = ((0.6f * var_f28) + (0.4f * var_f28)) / (var_f28 + temp_f27);
temp_r30->unk2C.x += temp_f29 * (temp_f31 * -sp20.x);
temp_r30->unk2C.y += temp_f29 * (temp_f31 * -sp20.y);
temp_r30->unk2C.z += temp_f29 * (temp_f31 * -sp20.z);
fn_1_5FB0(lbl_1_bss_34C[var_r29]);
}
}
}
var_f30 = 555.0f;
if (temp_r31->unk2C.x > var_f30) {
temp_r31->unk2C.x = var_f30;
}
if (temp_r31->unk2C.x < -var_f30) {
temp_r31->unk2C.x = -var_f30;
}
var_f30 = 555.0f;
if (temp_r31->unk2C.z > var_f30) {
temp_r31->unk2C.z = var_f30;
}
if (temp_r31->unk2C.z < -var_f30) {
temp_r31->unk2C.z = -var_f30;
}
}
}
}
void fn_1_6304(omObjData* object) {
s32 var_r31;
if (lbl_1_bss_34A >= 5) {
for (var_r31 = 0; var_r31 < 4; var_r31++) {
fn_1_5FB0(lbl_1_bss_34C[var_r31]);
}
}
}
void fn_1_6368(void) {
s32 var_r31;
for (var_r31 = 0; var_r31 < 0x80; var_r31++) {
lbl_1_bss_34[var_r31] = NULL;
}
}
void* fn_1_63A8(s32 arg0) {
s32 var_r31;
for (var_r31 = 0; var_r31 < 0x80; var_r31++) {
if (!lbl_1_bss_34[var_r31]) break;
}
if (var_r31 == 0x80) {
return NULL;
}
lbl_1_bss_34[var_r31] = HuMemDirectMallocNum(HEAP_SYSTEM, arg0, 0x10000000);
return lbl_1_bss_34[var_r31];
}
void fn_1_6448(void* arg0) {
s32 var_r31;
for (var_r31 = 0; var_r31 < 0x80; var_r31++) {
if (lbl_1_bss_34[var_r31] == arg0) break;
}
if (var_r31 != 0x80) {
HuMemDirectFree(lbl_1_bss_34[var_r31]);
lbl_1_bss_34[var_r31] = NULL;
}
}
void fn_1_64DC(void) {
s32 var_r31;
for (var_r31 = 0; var_r31 < 0x80; var_r31++) {
if (lbl_1_bss_34[var_r31]) {
OSReport("adr %x\n", lbl_1_bss_34[var_r31]);
HuMemDirectFree(lbl_1_bss_34[var_r31]);
lbl_1_bss_34[var_r31] = NULL;
}
}
}
void fn_1_6584(s16 arg0, char* arg1, u8 arg2, u8 arg3, u8 arg4) {
char sp13[0x100];
HsfObject* var_r31;
HsfMaterial* temp_r30;
HsfData* temp_r29;
HsfBuffer* temp_r28;
HsfObject* var_r26;
s32 var_r25;
s32 var_r27;
temp_r29 = Hu3DData[arg0].hsfData;
var_r26 = temp_r29->object;
strcpy(&sp13, MakeObjectName(arg1));
for (var_r25 = 0; var_r25 < temp_r29->objectCnt; var_r25++, var_r26++) {
var_r31 = var_r26;
temp_r28 = var_r31->data.face;
if (var_r31->constData && strcmp(&sp13, var_r31->name) == 0) {
for (var_r27 = 0; var_r27 < temp_r28->count; var_r27++) {
temp_r30 = &var_r31->data.material[((HsfFace*)temp_r28->data)[var_r27].mat & 0xFFF];
temp_r30->color[0] = arg2;
temp_r30->color[1] = arg3;
temp_r30->color[2] = arg4;
}
return;
}
}
}
AnimBmpData* fn_1_668C(s16 arg0) {
return Hu3DTexAnimData[arg0].unk10->bmp;
}
s16 fn_1_66AC(void) {
AnimBmpData* temp_r31;
s32 var_r30;
AnimData** var_r29;
s32 var_r28;
var_r30 = fn_1_A94C(0xFFFF0000, Hu3DShadowData.unk_02, Hu3DShadowData.unk_02);
fn_1_ACF4(var_r30, 7, Hu3DShadowData.unk_02, Hu3DShadowData.unk_02, Hu3DShadowData.unk_02, Hu3DShadowData.unk_02);
var_r29 = fn_1_9734(var_r30);
temp_r31 = (*var_r29)->bmp;
var_r28 = temp_r31->sizeX * temp_r31->sizeY;
memcpy(temp_r31->data, Hu3DShadowData.unk_04, var_r28);
return var_r30;
}
u32 lbl_1_data_110 = 0x41C64E6D;
s32 fn_1_679C(void) {
lbl_1_data_110 *= 0x41C64E6D;
lbl_1_data_110 += 0x3039;
return lbl_1_data_110 >> 0x10;
}
f32 fn_1_67F0(f32 arg0, f32 arg1, f32 arg2) {
f32 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) {
return arg0 - 360.0f;
}
if (arg0 <= -180.0f) {
arg0 += 360.0f;
}
return arg0;
}
void fn_1_6958(Mtx arg0, f32 arg8, f32 arg9, f32 argA) {
Mtx sp38;
Mtx sp8;
if (argA != 0.0f) {
MTXRotDeg(arg0, 0x5A, argA);
} else {
PSMTXIdentity(arg0);
}
if (arg8 != 0.0f) {
MTXRotDeg(sp38, 0x58, arg8);
PSMTXConcat(sp38, arg0, arg0);
}
if (arg9 != 0.0f) {
MTXRotDeg(sp8, 0x59, arg9);
PSMTXConcat(sp8, arg0, arg0);
}
}
void fn_1_6A78(Mtx arg0, Vec* arg1) {
f32 temp_f29;
f32 var_f28;
arg1->x = atan2d(arg0[2][2], arg0[1][2]);
arg1->z = atan2d(arg0[0][0], arg0[0][1]);
temp_f29 = -arg0[0][2];
var_f28 = sqrtf(ABS(1.0 - (temp_f29 * temp_f29)));
if ((arg1->x > 90.0f) && (arg1->x < 270.0f) && (arg1->z > 90.0f) && (arg1->z < 270.0f)) {
arg1->x = fmod((180.0f + arg1->x), 360.0);
arg1->z = fmod((180.0f + arg1->z), 360.0);
var_f28 = -var_f28;
}
arg1->y = atan2d(var_f28, temp_f29);
}
f32 fn_1_6D84(f32 arg8, f32 arg9, f32 argA, f32 argB) {
f32 temp_f31;
f32 var_f30;
temp_f31 = (1.0 - arg8);
var_f30 = (argB * (arg8 * arg8)) + ((arg9 * (temp_f31 * temp_f31)) + (2.0 * (argA * (temp_f31 * arg8))));
return var_f30;
}
void fn_1_6DFC(f32* arg0, f32* arg1, f32* arg2, f32* arg3, f32 arg8) {
s32 var_r31;
for (var_r31 = 0; var_r31 < 3; var_r31++) {
*arg3++ = fn_1_6D84(arg8, *arg0++, *arg1++, *arg2++);
}
}
f32 fn_1_6F18(f32 arg8, f32 arg9, f32 argA, f32 argB) {
f32 var_f31;
var_f31 = (2.0 * ((arg8 * argB) + (((arg8 - 1.0) * arg9) + ((1.0 - (2.0 * arg8)) * argA))));
return var_f31;
}
void fn_1_6F90(f32* arg0, f32* arg1, f32* arg2, f32* arg3, f32 arg8) {
f32 spC[3];
f32 var_f29;
s32 var_r31;
for (var_r31 = 0; var_r31 < 3; var_r31++) {
spC[var_r31] = fn_1_6F18(arg8, *arg0++, *arg1++, *arg2++);
}
var_f29 = sqrtf((spC[2] * spC[2]) + ((spC[0] * spC[0]) + (spC[1] * spC[1])));
if (var_f29) {
var_f29 = (1.0 / var_f29);
for (var_r31 = 0; var_r31 < 3; var_r31++) {
*arg3++ = var_f29 * spC[var_r31];
}
return;
}
*arg3++ = 0.0f;
*arg3++ = 0.0f;
*arg3++ = 1.0f;
}
void fn_1_7268(f32* arg0, f32* arg1, f32* arg2, s32 arg3) {
f32 sp48[0x10];
f32 sp8[0x10];
f32 temp_f31;
s32 var_r31;
arg2[0] = 0.0f;
arg2[arg3 - 1] = 0.0f;
for (var_r31 = 0; var_r31 < arg3 - 1; var_r31++) {
sp48[var_r31] = arg0[var_r31 + 1] - arg0[var_r31];
if (sp48[var_r31] == 0.0f) {
sp8[var_r31 + 1] = 0.0f;
} else {
sp8[var_r31 + 1] = (arg1[var_r31 + 1] - arg1[var_r31]) / sp48[var_r31];
}
}
arg2[1] = (sp8[2] - sp8[1]);
sp8[1] = 2.0f * (arg0[2] - arg0[0]);
for (var_r31 = 1; var_r31 < arg3 - 2; var_r31++) {
temp_f31 = sp48[var_r31] / sp8[var_r31];
arg2[var_r31 + 1] = ((sp8[var_r31 + 2] - sp8[var_r31 + 1]) - (temp_f31 * (f64)arg2[var_r31]));
sp8[var_r31 + 1] = ((2.0f * (arg0[var_r31 + 2] - arg0[var_r31])) - (temp_f31 * (f64)sp48[var_r31]));
}
arg2[arg3 - 2] -= sp48[arg3 - 2] * arg2[arg3 - 1];
for (var_r31 = arg3 - 2; var_r31 > 0; var_r31--) {
if (0.0f == sp8[var_r31]) {
arg2[var_r31] = 0.0f;
} else {
arg2[var_r31] = (arg2[var_r31] - (sp48[var_r31] * arg2[var_r31 + 1])) / sp8[var_r31];
}
}
}
f32 fn_1_7520(f32 arg0, f32* arg1, f32* arg2, f32* arg3, s32 arg4) {
f32 temp_f30;
f32 temp_f31;
f32 var_f29;
s32 temp_r31;
temp_r31 = (s32)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;
}
void fn_1_7674(f32* arg0, Vec* arg1, Vec* arg2, s32 arg3) {
f32 spD4[0x10];
f32 sp94[0x10];
f32 sp54[0x10];
f32 sp14[0x10];
Vec sp8;
f32 temp_f31;
s32 var_r27;
s32 var_r30;
s32 var_r31;
arg0[0] = 0.0f;
for (var_r30 = 1; var_r30 < arg3; var_r30++) {
VECSubtract(&arg1[var_r30], &arg1[var_r30 - 1], &sp8);
arg0[var_r30] = arg0[var_r30 - 1] + VECMag(&sp8);
}
for (var_r27 = 0; var_r27 < 3; var_r27++) {
for (var_r30 = 0; var_r30 < arg3; var_r30++) {
spD4[var_r30] = ((f32(*)[3])arg1)[var_r30][var_r27];
}
sp94[0] = 0.0f;
sp94[arg3 - 1] = 0.0f;
for (var_r31 = 0; var_r31 < (arg3 - 1); var_r31++) {
sp14[var_r31] = arg0[var_r31 + 1] - arg0[var_r31];
if (sp14[var_r31] == 0.0f) {
sp54[var_r31 + 1] = 0.0f;
} else {
sp54[var_r31 + 1] = (spD4[var_r31 + 1] - spD4[var_r31]) / sp14[var_r31];
}
}
sp94[1] = sp54[2] - sp54[1];
sp54[1] = 2.0f * (arg0[2] - arg0[0]);
for (var_r31 = 1; var_r31 < (arg3 - 2); var_r31++) {
temp_f31 = sp14[var_r31] / sp54[var_r31];
sp94[var_r31 + 1] = ((sp54[var_r31 + 2] - sp54[var_r31 + 1]) - (temp_f31 * (f64)sp94[var_r31]));
sp54[var_r31 + 1] = ((2.0f * (arg0[var_r31 + 2] - arg0[var_r31])) - (temp_f31 * (f64)sp14[var_r31]));
}
sp94[arg3 - 2] -= sp14[arg3 - 2] * sp94[arg3 - 1];
for (var_r31 = arg3 - 2; var_r31 > 0; var_r31--) {
if (sp54[var_r31] == 0.0f) {
sp94[var_r31] = 0.0f;
} else {
sp94[var_r31] = (sp94[var_r31] - (sp14[var_r31] * sp94[var_r31 + 1])) / sp54[var_r31];
}
}
for (var_r30 = 0; var_r30 < arg3; var_r30++) {
((f32(*)[3])arg2)[var_r30][var_r27] = sp94[var_r30];
(void)arg2;
}
}
}
void fn_1_7A54(f32 arg0, Vec* arg1, f32* arg2, Vec* arg3, Vec* arg4, s32 arg5) {
f32 sp48[0x10];
f32 sp8[0x10];
f32 temp_f29;
f32 temp_f31;
f32 var_f28;
s32 temp_r31;
s32 var_r29;
s32 var_r30;
for (var_r29 = 0; var_r29 < 3; var_r29++) {
for (var_r30 = 0; var_r30 < arg5; var_r30++) {
sp48[var_r30] = ((f32(*)[3])arg3)[var_r30][var_r29];
sp8[var_r30] = ((f32(*)[3])arg4)[var_r30][var_r29];
}
((f32(*)[3])arg1)[0][var_r29] = fn_1_7520(arg0, arg2, sp48, sp8, 0);
}
}
f32 fn_1_7C68(Vec* arg0) {
f32 temp_f29;
f32 temp_f30;
temp_f30 = (arg0->z * arg0->z) + ((arg0->x * arg0->x) + (arg0->y * arg0->y));
temp_f30 = sqrtf(temp_f30);
if (temp_f30 != 0.0f) {
temp_f29 = 1.0f / temp_f30;
arg0->x *= temp_f29;
arg0->y *= temp_f29;
arg0->z *= temp_f29;
} else {
arg0->x = arg0->y = arg0->z = 0.0f;
}
return temp_f30;
}
f32 fn_1_7E00(Vec arg0, Vec arg1, Vec* arg2, f32 arg8) {
if (arg8 <= 0.0f) {
arg2->x = arg0.x;
arg2->y = arg0.y;
arg2->z = arg0.z;
arg8 = 0.0f;
} else if (arg8 >= 1.0f) {
arg2->x = arg0.x + arg1.x;
arg2->y = arg0.y + arg1.y;
arg2->z = arg0.z + arg1.z;
arg8 = 1.0f;
} else {
arg2->x = arg0.x + (arg8 * arg1.x);
arg2->y = arg0.y + (arg8 * arg1.y);
arg2->z = arg0.z + (arg8 * arg1.z);
}
return arg8;
}
f32 fn_1_7ED8(Vec arg0, Vec arg1, Vec arg2) {
f32 temp_f30;
f32 var_f31;
var_f31 = (arg2.z * (arg1.z - arg0.z)) + ((arg2.x * (arg1.x - arg0.x)) + (arg2.y * (arg1.y - arg0.y)));
temp_f30 = -((arg2.z * arg2.z) + ((arg2.x * arg2.x) + (arg2.y * arg2.y)));
if (temp_f30 != 0.0f) {
var_f31 /= temp_f30;
}
return var_f31;
}
f32 fn_1_7F94(Vec* arg0, Vec* arg1, Vec* arg2) {
Vec sp44;
f32 var_f30;
if (0.0f == ((arg2->z * arg2->z) + ((arg2->x * arg2->x) + (arg2->y * arg2->y)))) {
return ((arg0->z - arg1->z) * (arg0->z - arg1->z)) + (((arg0->x - arg1->x) * (arg0->x - arg1->x)) + ((arg0->y - arg1->y) * (arg0->y - arg1->y)));
}
var_f30 = fn_1_7ED8(*arg0, *arg1, *arg2);
fn_1_7E00(*arg1, *arg2, &sp44, var_f30);
return ((arg0->z - sp44.z) * (arg0->z - sp44.z)) + (((arg0->x - sp44.x) * (arg0->x - sp44.x)) + ((arg0->y - sp44.y) * (arg0->y - sp44.y)));
}
f32 fn_1_82D0(Vec* arg0, Vec* arg1, Vec* arg2, Vec* arg3, Vec* arg4) {
f32 var_f31;
f32 var_f30;
if (0.0f == ((arg2->z * arg2->z) + ((arg2->x * arg2->x) + (arg2->y * arg2->y)))) {
return ((arg0->z - arg1->z) * (arg0->z - arg1->z)) + (((arg0->x - arg1->x) * (arg0->x - arg1->x)) + ((arg0->y - arg1->y) * (arg0->y - arg1->y)));
} else {
var_f30 = fn_1_7ED8(*arg0, *arg1, *arg2);
fn_1_7E00(*arg1, *arg2, arg3, var_f30);
}
arg4->x = arg3->x - arg0->x;
arg4->y = arg3->y - arg0->y;
arg4->z = arg3->z - arg0->z;
return fn_1_7C68(arg4);
}