marioparty4/src/REL/m427Dll/player.c
2025-04-14 21:39:19 +02:00

2334 lines
81 KiB
C

#include "REL/m427Dll.h"
#include "dolphin/gx/GXEnum.h"
#include "dolphin/gx/GXStruct.h"
#include "dolphin/gx/GXVert.h"
#include "ext_math.h"
#include "game/audio.h"
#include "game/chrman.h"
#include "game/gamework_data.h"
#include "game/hsfdraw.h"
#include "game/hsfformat.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/memory.h"
#include "game/object.h"
#include "game/objsub.h"
#include "game/pad.h"
#include "string.h"
#ifndef __MWERKS__
#include "game/frand.h"
#endif
typedef struct M427DllPlayerWork2 {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
/* 0x0C */ s32 unk_0C;
/* 0x10 */ s32 unk_10;
/* 0x14 */ s32 unk_14;
/* 0x18 */ s32 unk_18;
/* 0x1C */ s32 unk_1C;
/* 0x20 */ s32 unk_20;
/* 0x24 */ s32 unk_24;
/* 0x28 */ s32 unk_28;
/* 0x2C */ s32 unk_2C;
/* 0x30 */ s32 unk_30;
/* 0x34 */ s32 unk_34;
/* 0x38 */ s32 unk_38;
/* 0x3C */ s32 unk_3C;
/* 0x40 */ s32 unk_40;
/* 0x44 */ s32 unk_44;
/* 0x48 */ s32 unk_48;
/* 0x4C */ s32 unk_4C;
/* 0x50 */ s32 unk_50;
/* 0x54 */ s32 unk_54;
/* 0x58 */ s32 unk_58;
/* 0x5C */ s32 unk_5C;
/* 0x60 */ s32 unk_60;
/* 0x64 */ s32 unk_64;
/* 0x68 */ float unk_68;
/* 0x6C */ float unk_6C;
/* 0x70 */ float unk_70;
} M427DllPlayerWork2; /* size = 0x74 */
typedef struct M427DllPlayerWork {
/* 0x00 */ omObjData *unk_00[2];
/* 0x08 */ M427DllPlayerWork2 *unk_08[2];
/* 0x10 */ s32 unk_10;
/* 0x14 */ s32 unk_14;
/* 0x18 */ s32 unk_18;
/* 0x1C */ s32 unk_1C;
/* 0x20 */ s32 unk_20;
/* 0x24 */ s32 unk_24;
/* 0x28 */ float unk_28;
/* 0x2C */ float unk_2C;
/* 0x30 */ s32 unk_30[5];
/* 0x34 */ char unk44[8];
/* 0x4C */ float unk_4C;
/* 0x50 */ float unk_50;
/* 0x54 */ float unk_54;
/* 0x58 */ float unk_58;
/* 0x5C */ float unk_5C;
/* 0x60 */ s32 unk_60;
/* 0x64 */ float unk_64;
/* 0x68 */ s32 unk_68;
/* 0x6C */ char unk6C[4];
} M427DllPlayerWork; /* size = 0x70 */
typedef struct M427DllBss57CStruct {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
/* 0x0C */ s32 unk_0C;
/* 0x10 */ s32 unk_10;
/* 0x14 */ s32 unk_14;
/* 0x18 */ s32 unk_18;
/* 0x1C */ Vec unk_1C;
/* 0x28 */ Vec unk_28;
/* 0x34 */ float unk_34;
/* 0x38 */ char unk38[4];
} M427DllBss57CStruct; /* size = 0x3C */
typedef struct M427DllBss590Struct {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ s32 unk_08;
/* 0x0C */ float unk_0C;
/* 0x10 */ float unk_10;
/* 0x14 */ Vec unk_14[2];
/* 0x2C */ Vec unk_2C[2];
/* 0x44 */ Vec unk_44;
/* 0x50 */ float unk_50;
/* 0x54 */ float unk_54;
/* 0x58 */ float unk_58;
/* 0x5C */ float unk_5C;
/* 0x60 */ float unk_60;
/* 0x64 */ float unk_64;
/* 0x68 */ float unk_68;
/* 0x6C */ float unk_6C;
/* 0x70 */ float unk_70;
/* 0x74 */ float unk_74;
/* 0x78 */ Vec *unk_78;
/* 0x7C */ Vec *unk_7C;
/* 0x80 */ Vec *unk_80;
} M427DllBss590Struct; /* size = 0x84 */
void fn_1_10830(omObjData *object);
void fn_1_1143C(omObjData *object);
void fn_1_115B4(omObjData *object);
void fn_1_119C0(omObjData *object);
void fn_1_11A74(omObjData *object);
void fn_1_11ED8(omObjData *object);
void fn_1_12514(omObjData *object);
void fn_1_12518(omObjData *object);
void fn_1_12580(omObjData *object);
void fn_1_12B08(void);
void fn_1_13F24(void);
void fn_1_13FB8(void);
s32 fn_1_155E0(float arg8, float arg9, float argA, float *arg0);
float fn_1_15714(float arg8, float arg9);
void fn_1_158D8(float arg8, float arg9, Vec *arg0);
s32 fn_1_15AF0(s32 arg0, Vec *arg1, Vec *arg2, Vec *arg3, Vec *arg4);
void fn_1_1607C(s32 arg0);
s32 fn_1_160D4(s32 arg0, Vec *arg1, float arg8);
s32 fn_1_16260(s32 arg0, Vec *arg2, Vec *arg3, Vec *arg4, float arg8);
float fn_1_16594(float arg8, float arg9);
void fn_1_16E3C(Vec *arg0, Vec *arg1, Vec *arg2, s32 arg3);
void fn_1_17048(Vec *arg0, float *arg1, Vec *arg2, Vec *arg3);
void fn_1_1723C(Mtx arg0, Vec *arg1);
void fn_1_172F0(s32 arg0, float arg8);
s32 fn_1_17430(s32 arg0, s32 arg1, s32 arg2);
void fn_1_EC74(omObjData *object);
void fn_1_EC94(omObjData *object);
void fn_1_F0E0(omObjData *object);
Vec lbl_1_data_260[0x1D] = {
{ -900.0f, 0.0f, 2000.0f },
{ -900.0f, 0.0f, 0.0f },
{ -900.0f, 0.0f, -2000.0f },
{ -900.0f, 0.0f, -4000.0f },
{ -1300.0f, 0.0f, -4500.0f },
{ -1600.0f, 0.0f, -5000.0f },
{ -1800.0f, 0.0f, -5500.0f },
{ -1900.0f, 0.0f, -6000.0f },
{ -1800.0f, 0.0f, -6500.0f },
{ -1600.0f, -100.0f, -7000.0f },
{ -1300.0f, -200.0f, -7500.0f },
{ -900.0f, -300.0f, -8000.0f },
{ -900.0f, -300.0f, -8500.0f },
{ -500.0f, -300.0f, -9000.0f },
{ -500.0f, -300.0f, -10000.0f },
{ -500.0f, -300.0f, -11000.0f },
{ -900.0f, -300.0f, -11500.0f },
{ -900.0f, -300.0f, -12000.0f },
{ -500.0f, -300.0f, -12500.0f },
{ -200.0f, -300.0f, -13000.0f },
{ -0.0f, -300.0f, -13500.0f },
{ 100.0f, -300.0f, -14000.0f },
{ 0.0f, -300.0f, -14500.0f },
{ -200.0f, -400.0f, -15000.0f },
{ -500.0f, -500.0f, -15500.0f },
{ -900.0f, -600.0f, -16000.0f },
{ -900.0f, -600.0f, -18000.0f },
{ -900.0f, -600.0f, -20000.0f },
{ -900.0f, -600.0f, -22000.0f },
};
Vec lbl_1_data_3BC[29] = {
{ 900.0f, 0.0f, 2000.0f },
{ 900.0f, 0.0f, -0.0f },
{ 900.0f, 0.0f, -2000.0f },
{ 900.0f, 0.0f, -4000.0f },
{ 500.0f, 0.0f, -4500.0f },
{ 200.0f, 0.0f, -5000.0f },
{ 0.0f, 0.0f, -5500.0f },
{ -100.0f, 0.0f, -6000.0f },
{ 0.0f, 0.0f, -6500.0f },
{ 200.0f, -100.0f, -7000.0f },
{ 500.0f, -200.0f, -7500.0f },
{ 900.0f, -300.0f, -8000.0f },
{ 900.0f, -300.0f, -8500.0f },
{ 500.0f, -300.0f, -9000.0f },
{ 500.0f, -300.0f, -10000.0f },
{ 500.0f, -300.0f, -11000.0f },
{ 900.0f, -300.0f, -11500.0f },
{ 900.0f, -300.0f, -12000.0f },
{ 1300.0f, -300.0f, -12500.0f },
{ 1600.0f, -300.0f, -13000.0f },
{ 1800.0f, -300.0f, -13500.0f },
{ 1900.0f, -300.0f, -14000.0f },
{ 1800.0f, -300.0f, -14500.0f },
{ 1600.0f, -400.0f, -15000.0f },
{ 1300.0f, -500.0f, -15500.0f },
{ 900.0f, -600.0f, -16000.0f },
{ 900.0f, -600.0f, -18000.0f },
{ 900.0f, -600.0f, -20000.0f },
{ 900.0f, -600.0f, -22000.0f },
};
s32 lbl_1_data_518[7] = { 0, 1, 2, 3, 4, 5, 6 };
Vec lbl_1_data_534[2] = { { 0.0f, -25.0f, 50.0f }, { 0.0f, -25.0f, -50.0f } };
Vec lbl_1_data_54C[2] = { { 0.0f, 0.0f, 1900.0f }, { 0.0f, 20.0f, 20.0f } };
Vec lbl_1_data_564 = { 0.0f, 240.00002f, 360.0f };
Vec lbl_1_data_570 = { 0.0f, 1.0f, 1.5f };
GXColor lbl_1_data_57C = { 0xFF, 0xFF, 0xFF, 0xFF };
Process *lbl_1_bss_594;
M427DllBss590Struct *lbl_1_bss_590;
Vec *lbl_1_bss_58C;
Vec *lbl_1_bss_588;
Vec *lbl_1_bss_584;
s32 lbl_1_bss_580;
M427DllBss57CStruct *lbl_1_bss_57C;
M427DllPlayerWork *lbl_1_bss_578;
M427DllPlayerWork2 *lbl_1_bss_574;
omObjData *lbl_1_bss_56C[2];
char lbl_1_bss_55C[0x10];
Vec *lbl_1_bss_558;
Vec *lbl_1_bss_554;
Vec *lbl_1_bss_550;
void fn_1_E98C(Process *sp8)
{
s32 sp10;
omObjData *object;
s32 var_r30;
s32 var_r29;
s32 var_r28;
s32 var_r27;
s32 var_r26;
s8 spE[2] = { 0xFF, 0xFF };
s8 spC[2] = { 0xFF, 0xFF };
sp10 = 0;
OSReport("Init Player \n");
lbl_1_bss_594 = sp8;
object = omAddObjEx(lbl_1_bss_594, 0x42, 0, 0, -1, fn_1_EC74);
omMakeGroupEx(lbl_1_bss_594, 0, 4);
omGetGroupMemberListEx(lbl_1_bss_594, 0);
for (var_r30 = 0, var_r28 = 0, var_r27 = 0, var_r29 = 0; var_r30 < 4; var_r30++) {
var_r26 = GWPlayerCfg[var_r30].group;
switch (var_r26) {
case 0:
if (var_r28 >= 2) {
var_r29 = 1;
}
else {
spE[var_r28] = var_r30;
var_r28++;
}
break;
case 1:
if (var_r27 >= 2) {
var_r29 = 1;
}
else {
spC[var_r27] = var_r30;
var_r27++;
}
break;
default:
var_r29 = 1;
break;
}
if (var_r29 != 0) {
break;
}
}
lbl_1_bss_578 = HuMemDirectMallocNum(HEAP_SYSTEM, 2 * sizeof(M427DllPlayerWork), MEMORY_DEFAULT_NUM);
memset(lbl_1_bss_578, 0, 0xE0);
lbl_1_bss_574 = HuMemDirectMallocNum(HEAP_SYSTEM, 4 * sizeof(M427DllPlayerWork2), MEMORY_DEFAULT_NUM);
memset(lbl_1_bss_574, 0, 0x1D0);
memset(lbl_1_bss_56C, 0, 8);
memset(lbl_1_bss_55C, 0, 0x10);
for (var_r30 = 0; var_r30 < 2; var_r30++) {
object = lbl_1_bss_56C[var_r30] = omAddObjEx(lbl_1_bss_594, 0x41, 0xE, 0, -1, fn_1_EC94);
object->work[0] = var_r30;
if (var_r29 != 0) {
object->work[1] = var_r30 * 2;
object->work[2] = (var_r30 * 2) + 1;
}
else if (var_r30 == 0) {
object->work[1] = spE[0];
object->work[2] = spE[1];
}
else {
object->work[1] = spC[0];
object->work[2] = spC[1];
}
}
fn_1_12B08();
}
s32 lbl_1_data_590[7] = { 0x3A001C, 0x3A001D, 0x3A001E, 0x3A001F, 0x3A0020, 0x3A0026, 0x3A0027 };
s32 lbl_1_data_5AC[7] = { 0x3A0021, 0x3A0022, 0x3A0023, 0x3A0024, 0x3A0025, 0x3A0026, 0x3A0027 };
s32 lbl_1_data_5C8[2] = { 1, 3 };
s32 lbl_1_data_5D0[2] = { 2, 4 };
void fn_1_EC54(void)
{
fn_1_13FB8();
}
void fn_1_EC74(omObjData *object)
{
fn_1_13F24();
}
void fn_1_EC94(omObjData *object)
{
M427DllPlayerWork *work;
s32 var_r29;
s32 var_r28;
s32 var_r27;
work = &lbl_1_bss_578[object->work[0]];
object->data = work;
work->unk_10 = object->work[0];
work->unk_14 = 0;
work->unk_18 = 0;
work->unk_1C = 0;
work->unk_20 = 0;
work->unk_24 = 0;
work->unk_28 = 0.0f;
work->unk_2C = 0.0f;
work->unk_4C = 0.0f;
work->unk_50 = 0.0f;
work->unk_54 = 0.0f;
work->unk_58 = 0.0f;
work->unk_5C = 0.0f;
work->unk_60 = 0;
work->unk_64 = 180.0f;
work->unk_68 = 0;
object->trans.x = lbl_1_data_54C->x;
object->trans.y = lbl_1_data_54C->y;
object->trans.z = lbl_1_data_54C->z;
for (var_r29 = 0; var_r29 < 7; var_r29++) {
if (work->unk_10 == 0) {
object->model[var_r29] = Hu3DModelCreateFile(lbl_1_data_590[var_r29]);
}
else {
object->model[var_r29] = Hu3DModelCreateFile(lbl_1_data_5AC[var_r29]);
}
Hu3DModelLayerSet(object->model[var_r29], 2);
if (work->unk_10 == 0) {
Hu3DModelCameraSet(object->model[var_r29], 1);
}
else {
Hu3DModelCameraSet(object->model[var_r29], 2);
}
if (var_r29 < 5) {
Hu3DMotionSpeedSet(object->model[var_r29], 2.0f);
}
}
Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_LOOP);
Hu3DMotionSpeedSet(object->model[0], 2.0f);
Hu3DModelLayerSet(object->model[5], 5);
Hu3DModelAttrSet(object->model[5], HU3D_MOTATTR_LOOP);
for (var_r29 = 0; var_r29 < 5; var_r29++) {
if (var_r29 == 0) {
var_r28 = object->model[var_r29];
var_r27 = Hu3DLLightCreateV(var_r28, &lbl_1_data_564, &lbl_1_data_570, &lbl_1_data_57C);
work->unk_30[var_r29] = var_r27;
Hu3DLLightStaticSet(var_r28, var_r27, 1);
Hu3DLLightPointSet(var_r28, var_r27, 80.0f, 0.95f, 3);
Hu3DLLightColorSet(var_r28, var_r27, 0xFF, 0xF0, 0xDC, 0xFF);
Hu3DLLightPosSet(
var_r28, var_r27, lbl_1_data_564.x, lbl_1_data_564.y, lbl_1_data_564.z, lbl_1_data_570.x, lbl_1_data_570.y, lbl_1_data_570.z);
}
else {
var_r28 = object->model[var_r29];
work->unk_30[var_r29] = fn_1_17430(object->model[0], work->unk_30[0], var_r28);
}
fn_1_172F0(var_r28, 0.1f);
}
for (var_r29 = 0; var_r29 < 2; var_r29++) {
work->unk_00[var_r29] = omAddObjEx(lbl_1_bss_594, 0x40, 2, 4, -1, fn_1_11A74);
work->unk_00[var_r29]->work[0] = object->work[var_r29 + 1];
work->unk_00[var_r29]->work[1] = work->unk_10;
work->unk_00[var_r29]->work[2] = var_r29;
}
object->func = fn_1_F0E0;
}
void fn_1_F0E0(omObjData *object)
{
Mtx sp38;
Vec sp2C;
Vec sp20;
Vec sp14;
Vec sp8;
float var_f31;
float var_f30;
float var_f29;
M427DllPlayerWork *work;
s32 var_r29;
s32 var_r28;
work = object->data;
if ((work->unk_00[0] == NULL) || (work->unk_08[0] == NULL)) {
return;
}
sp2C.x = object->trans.x;
sp2C.y = object->trans.y;
sp2C.z = object->trans.z;
switch (work->unk_1C) {
case 0:
object->rot.y = work->unk_64 = 180.0f;
for (var_r29 = 0; var_r29 < 2; var_r29++) {
if ((work->unk_08[var_r29]->unk_30 != 0) && (Hu3DMotionEndCheck(object->model[lbl_1_data_5C8[var_r29]]) != 0)) {
fn_1_3B20(var_r29 * 2, work->unk_10);
Hu3DMotionTimeSet(object->model[lbl_1_data_5C8[var_r29]], 0.0f);
if (work->unk_10 == 0) {
HuAudFXPlay(0x655);
}
else {
HuAudFXPlay(0x656);
}
}
if ((work->unk_08[var_r29]->unk_34 != 0) && (Hu3DMotionEndCheck(object->model[lbl_1_data_5D0[var_r29]]) != 0)) {
fn_1_3B20((var_r29 * 2) + 1, work->unk_10);
Hu3DMotionTimeSet(object->model[lbl_1_data_5D0[var_r29]], 0.0f);
if (work->unk_10 == 0) {
HuAudFXPlay(0x655);
}
else {
HuAudFXPlay(0x656);
}
}
}
if (sp2C.z != object->trans.z) {
work->unk_60 = 2;
}
else {
work->unk_60 = 0;
}
if (fn_1_1788() == 3) {
work->unk_1C = 1;
}
break;
case 1:
if (sp2C.z != object->trans.z) {
work->unk_60 = 2;
}
else {
work->unk_60 = 0;
}
if (fn_1_1788() == 4) {
work->unk_1C = 2;
}
break;
case 2:
for (var_r29 = 0; var_r29 < 2; var_r29++) {
if (work->unk_08[var_r29]->unk_30 != 0) {
work->unk_58 += 0.1f;
if (Hu3DMotionEndCheck(object->model[lbl_1_data_5C8[var_r29]]) != 0) {
fn_1_3B20(var_r29 * 2, work->unk_10);
Hu3DMotionTimeSet(object->model[lbl_1_data_5C8[var_r29]], 0.0f);
if (work->unk_10 == 0) {
HuAudFXPlay(0x655);
}
else {
HuAudFXPlay(0x656);
}
}
}
if (work->unk_08[var_r29]->unk_34 != 0) {
work->unk_5C += 0.1f;
if (Hu3DMotionEndCheck(object->model[lbl_1_data_5D0[var_r29]]) != 0) {
fn_1_3B20((var_r29 * 2) + 1, work->unk_10);
Hu3DMotionTimeSet(object->model[lbl_1_data_5D0[var_r29]], 0.0f);
if (work->unk_10 == 0) {
HuAudFXPlay(0x655);
}
else {
HuAudFXPlay(0x656);
}
}
}
}
fn_1_158D8(object->trans.x, object->trans.z, &sp8);
work->unk_4C += 0.15f * sp8.x;
work->unk_54 += 0.15f * sp8.z;
work->unk_58 *= 0.995f;
work->unk_5C *= 0.995f;
work->unk_4C *= 0.99f;
work->unk_54 *= 0.99f;
work->unk_60 = work->unk_58 + work->unk_5C;
if (work->unk_60 < -5.0f) {
work->unk_60 = -5;
}
else if (work->unk_60 > 5.0f) {
work->unk_60 = 5;
}
var_f30 = 0.25f * (work->unk_58 - work->unk_5C);
if (var_f30 > 20.0f) {
var_f30 = 20.0f;
}
else if (var_f30 < -20.0f) {
var_f30 = -20.0f;
}
work->unk_64 += var_f30;
if (work->unk_64 > 360.0f) {
work->unk_64 -= 360.0f;
}
else if (work->unk_64 < 0.0f) {
work->unk_64 += 360.0f;
}
if (work->unk_64 > 270.0f) {
work->unk_64 = 270.0f;
}
else if (work->unk_64 < 90.0f) {
work->unk_64 = 90.0f;
}
object->rot.y = work->unk_64;
var_f31 = work->unk_60;
object->trans.x = object->trans.x + (2.0 * (var_f31 * sind(work->unk_64)));
object->trans.z = object->trans.z + (2.0 * (var_f31 * cosd(work->unk_64)));
object->trans.x += work->unk_4C;
object->trans.z += work->unk_54;
if (work->unk_68 > 0) {
work->unk_68--;
}
for (var_r29 = 0, var_r28 = 1; (var_r28 == 1) && (var_r29 < 6); var_r29++) {
var_r28 = 0;
sp20.x = object->trans.x;
sp20.y = object->trans.y;
sp20.z = object->trans.z;
if (fn_1_15AF0(-1, &sp2C, &sp20, &sp14, &sp8) != 0) {
var_r28 = 1;
sp2C = sp20;
object->trans.x = sp14.x;
object->trans.y = sp14.y;
object->trans.z = sp14.z;
if ((work->unk_68 == 0) && (fn_1_1788() <= 4)) {
if (work->unk_10 == 0) {
HuAudFXPlay(0x65C);
}
else {
HuAudFXPlay(0x65D);
}
}
work->unk_68 = 5;
}
sp20.x = object->trans.x;
sp20.y = object->trans.y;
sp20.z = object->trans.z;
if (fn_1_16260(work->unk_10, &sp2C, &sp20, &sp14, 200.0f) != 0) {
var_r28 = 1;
sp2C = sp20;
object->trans.x = sp14.x;
object->trans.y = sp14.y;
object->trans.z = sp14.z;
}
}
if (work->unk_20 <= 0) {
sp20.x = object->trans.x;
sp20.y = object->trans.y;
sp20.z = object->trans.z;
if (fn_1_160D4(work->unk_10, &sp20, 200.0f) != 0) {
omVibrate(work->unk_08[0]->unk_00, 0xC, 6, 6);
omVibrate(work->unk_08[1]->unk_00, 0xC, 6, 6);
HuAudCharVoicePlay(work->unk_08[0]->unk_0C, 0x123);
HuAudCharVoicePlay(work->unk_08[1]->unk_0C, 0x123);
work->unk_24 = 0x78;
work->unk_1C = 3;
work->unk_28 = 5.0f;
work->unk_2C = 360.0f * ((frand() & 0x7F) / 127.0f);
work->unk_18 = 0;
}
}
else {
work->unk_20--;
}
fn_1_119C0(object);
if (fn_1_1788() >= 5) {
work->unk_1C = 4;
}
break;
case 3:
work->unk_58 = 0.0f;
work->unk_5C = 0.0f;
work->unk_4C = 0.0f;
work->unk_54 = 0.0f;
work->unk_60 = work->unk_58 + work->unk_5C;
if (work->unk_60 < -5.0f) {
work->unk_60 = -5;
}
else if (work->unk_60 > 5.0f) {
work->unk_60 = 5;
}
var_f31 = work->unk_60 / 5.0f;
var_f31 = 5.0f * (var_f31 * var_f31);
object->trans.x = object->trans.x + (2.0 * (var_f31 * sind(work->unk_64)));
object->trans.z = object->trans.z + (2.0 * (var_f31 * cosd(work->unk_64)));
object->trans.x += work->unk_4C;
object->trans.z += work->unk_54;
for (var_r29 = 0, var_r28 = 1; (var_r28 == 1) && (var_r29 < 6); var_r29++) {
var_r28 = 0;
sp20.x = object->trans.x;
sp20.y = object->trans.y;
sp20.z = object->trans.z;
if (fn_1_15AF0(-1, &sp2C, &sp20, &sp14, &sp8) != 0) {
var_r28 = 1;
sp2C = sp20;
object->trans.x = sp14.x;
object->trans.y = sp14.y;
object->trans.z = sp14.z;
}
sp20.x = object->trans.x;
sp20.y = object->trans.y;
sp20.z = object->trans.z;
if (fn_1_16260(work->unk_10, &sp2C, &sp20, &sp14, 200.0f) != 0) {
var_r28 = 1;
sp2C = sp20;
object->trans.x = sp14.x;
object->trans.y = sp14.y;
object->trans.z = sp14.z;
}
}
if ((--work->unk_24 > 0) && ((work->unk_18 & 3) == 0)) {
omVibrate(work->unk_08[0]->unk_00, 0xC, 6, 6);
omVibrate(work->unk_08[1]->unk_00, 0xC, 6, 6);
}
if (work->unk_18 >= 120.0f) {
work->unk_1C = 2;
work->unk_20 = 0xB4;
work->unk_18 = 0;
}
fn_1_119C0(object);
if (fn_1_1788() >= 7) {
work->unk_20 = 0;
work->unk_18 = 0;
work->unk_1C = 4;
object->func = fn_1_10830;
}
break;
case 4:
work->unk_58 *= 0.993f;
work->unk_5C *= 0.993f;
work->unk_4C *= 0.993f;
work->unk_54 *= 0.993f;
work->unk_60 = work->unk_58 + work->unk_5C;
if (work->unk_60 < -5.0f) {
work->unk_60 = -5;
}
else if (work->unk_60 > 5.0f) {
work->unk_60 = 5;
}
var_f31 = work->unk_60 / 5.0f;
var_f31 = 5.0f * (var_f31 * var_f31);
object->trans.x = object->trans.x + (2.0 * (var_f31 * sind(work->unk_64)));
object->trans.z = object->trans.z + (2.0 * (var_f31 * cosd(work->unk_64)));
object->trans.x += work->unk_4C;
object->trans.z += work->unk_54;
for (var_r29 = 0, var_r28 = 1; (var_r28 == 1) && (var_r29 < 6); var_r29++) {
var_r28 = 0;
sp20.x = object->trans.x;
sp20.y = object->trans.y;
sp20.z = object->trans.z;
if (fn_1_15AF0(-1, &sp2C, &sp20, &sp14, &sp8) != 0) {
var_r28 = 1;
sp2C = sp20;
object->trans.x = sp14.x;
object->trans.y = sp14.y;
object->trans.z = sp14.z;
}
sp20.x = object->trans.x;
sp20.y = object->trans.y;
sp20.z = object->trans.z;
if (fn_1_16260(work->unk_10, &sp2C, &sp20, &sp14, 200.0f) != 0) {
var_r28 = 1;
sp2C = sp20;
object->trans.x = sp14.x;
object->trans.y = sp14.y;
object->trans.z = sp14.z;
}
}
work->unk_20 = 0;
if (fn_1_1788() >= 7) {
work->unk_18 = 0;
work->unk_1C = 4;
object->func = fn_1_10830;
}
break;
case 5:
if (sp2C.z != object->trans.z) {
work->unk_60 = 2;
}
else {
work->unk_60 = 0;
}
break;
case 6:
break;
case 7:
break;
}
var_f31 = work->unk_60 / 5.0f;
Hu3DMotionSpeedSet(object->model[0], 2.0f * var_f31);
if (work->unk_1C == 3) {
work->unk_2C += (frand() & 3) + 2;
object->rot.x = 0.0f;
object->rot.z = 0.0f;
work->unk_28 = 5.0f - (5.0f * (0.008333334f * work->unk_18));
var_f29 = 7.0 * (work->unk_28 * sind((10.0f * work->unk_18)));
object->rot.x = object->rot.x + (var_f29 * sind(work->unk_2C));
object->rot.z = object->rot.z + (var_f29 * cosd(work->unk_2C));
}
if (((work->unk_1C == 3) || (work->unk_20 != 0)) && ((work->unk_18 & 1) != 0)) {
for (var_r29 = 0; var_r29 < 7; var_r29++) {
Hu3DModelAttrSet(object->model[var_r29], HU3D_ATTR_DISPOFF);
}
for (var_r29 = 0; var_r29 < 2; var_r29++) {
if (work->unk_00[var_r29]->model[0] != -1) {
Hu3DModelAttrSet(*work->unk_00[var_r29]->model, HU3D_ATTR_DISPOFF);
}
}
}
else {
for (var_r29 = 0; var_r29 < 7; var_r29++) {
Hu3DModelAttrReset(object->model[var_r29], HU3D_ATTR_DISPOFF);
}
for (var_r29 = 0; var_r29 < 2; var_r29++) {
if (work->unk_00[var_r29]->model[0] != -1) {
Hu3DModelAttrReset(*work->unk_00[var_r29]->model, HU3D_ATTR_DISPOFF);
}
}
}
for (var_r29 = 0; var_r29 < 2; var_r29++) {
work->unk_08[var_r29]->unk_24 = work->unk_1C;
}
object->trans.y = fn_1_AE78(work->unk_10, object->trans.x, object->trans.z);
mtxRot(sp38, object->rot.x, object->rot.y, object->rot.z);
sp38[1][0] *= object->scale.y;
sp38[1][1] *= object->scale.y;
sp38[1][2] *= object->scale.z;
sp20.x = 0.0f;
sp20.y = 0.0f;
sp20.z = 100.0f;
fn_1_1723C(sp38, &sp20);
sp20.x += object->trans.x;
sp20.y += object->trans.y;
sp20.z += object->trans.z;
fn_1_91E0(work->unk_10, sp20.x, sp20.y, sp20.z, 180.0f + object->rot.y);
for (var_r29 = 0; var_r29 < 2; var_r29++) {
sp20 = lbl_1_data_534[var_r29];
fn_1_1723C(sp38, &sp20);
work->unk_00[var_r29]->trans.x = object->trans.x + sp20.x;
work->unk_00[var_r29]->trans.y = object->trans.y + sp20.y;
work->unk_00[var_r29]->trans.z = object->trans.z + sp20.z;
work->unk_00[var_r29]->rot.x = object->rot.x;
work->unk_00[var_r29]->rot.y = object->rot.y;
work->unk_00[var_r29]->rot.z = object->rot.z;
}
for (var_r29 = 0; var_r29 < 7; var_r29++) {
Hu3DModelPosSet(object->model[var_r29], object->trans.x, object->trans.y, object->trans.z);
Hu3DModelRotSet(object->model[var_r29], object->rot.x, object->rot.y, object->rot.z);
}
fn_1_1143C(object);
if ((fn_1_32EC() == 0) && (object->func != fn_1_10830) && ((work->unk_1C == 2) || (work->unk_1C == 3))) {
fn_1_115B4(object);
}
work->unk_18++;
}
s32 lbl_1_data_5F8[2] = { 1, 3 };
s32 lbl_1_data_600[2] = { 2, 4 };
s32 lbl_1_data_608[4] = { 0x3A002F, 0x3A0037, 0x3A003F, 0x3A0047 };
s32 lbl_1_data_618[4] = { 15, 10, 6, 5 };
void fn_1_10830(omObjData *object)
{
Mtx sp14;
Vec sp8;
s32 var_r30;
M427DllPlayerWork *work;
s32 var_r28;
s32 var_r27;
work = object->data;
switch (work->unk_1C) {
case 4:
var_r27 = fn_1_1884();
if (var_r27 == 3) {
break;
}
if (var_r27 == work->unk_10) {
for (var_r30 = 0; var_r30 < 2; var_r30++) {
Hu3DModelCameraSet(*work->unk_00[var_r30]->model, 1);
Hu3DModelLayerSet(*work->unk_00[var_r30]->model, 3);
fn_1_172F0(work->unk_00[var_r30]->model[0], 5.0f);
}
for (var_r30 = 0; var_r30 < 7; var_r30++) {
Hu3DModelCameraSet(object->model[var_r30], 1);
Hu3DModelLayerSet(object->model[var_r30], 3);
if (var_r30 < 5) {
fn_1_172F0(object->model[var_r30], 5.0f);
}
}
Hu3DModelAttrSet(object->model[5], HU3D_ATTR_DISPOFF);
for (var_r30 = 0; var_r30 < 2; var_r30++) {
work->unk_00[var_r30]->model[1] = Hu3DModelLink(*work->unk_00[var_r30]->model);
Hu3DModelCameraSet(work->unk_00[var_r30]->model[1], 1);
Hu3DModelLayerSet(work->unk_00[var_r30]->model[1], 1);
}
for (var_r30 = 0; var_r30 < 7; var_r30++) {
object->model[var_r30 + 7] = Hu3DModelLink(object->model[var_r30]);
Hu3DModelCameraSet(object->model[var_r30 + 7], 1);
Hu3DModelLayerSet(object->model[var_r30 + 7], 1);
}
object->trans.x = object->trans.y = object->trans.z = 0.0f;
object->rot.x = object->rot.z = 0.0f;
object->rot.y = 180.0f;
work->unk_1C = 5;
break;
}
for (var_r30 = 0; var_r30 < 2; var_r30++) {
Hu3DModelAttrSet(work->unk_00[var_r30]->model[0], HU3D_ATTR_DISPOFF);
work->unk_00[var_r30]->func = NULL;
}
for (var_r30 = 0; var_r30 < 7; var_r30++) {
Hu3DModelAttrSet(object->model[var_r30], HU3D_ATTR_DISPOFF);
}
object->func = NULL;
return;
case 5:
for (var_r30 = 0; var_r30 < 2; var_r30++) {
var_r28 = lbl_1_data_5F8[var_r30];
if ((work->unk_08[var_r30]->unk_30 != 0) && (Hu3DMotionEndCheck(object->model[var_r28]) != 0)) {
fn_1_3B20(var_r30 * 2, work->unk_10);
Hu3DMotionTimeSet(object->model[var_r28], 0.0f);
if (work->unk_10 == 0) {
HuAudFXPlay(0x655);
}
else {
HuAudFXPlay(0x656);
}
}
var_r28 = lbl_1_data_600[var_r30];
if ((work->unk_08[var_r30]->unk_34 != 0) && (Hu3DMotionEndCheck(object->model[var_r28]) != 0)) {
fn_1_3B20((var_r30 * 2) + 1, work->unk_10);
Hu3DMotionTimeSet(object->model[var_r28], 0.0f);
if (work->unk_10 == 0) {
HuAudFXPlay(0x655);
}
else {
HuAudFXPlay(0x656);
}
}
}
if (fn_1_1788() >= 0xC) {
work->unk_1C = 6;
}
break;
case 6:
case 7:
break;
}
for (var_r30 = 0; var_r30 < 2; var_r30++) {
work->unk_08[var_r30]->unk_24 = work->unk_1C;
}
mtxRot(sp14, object->rot.x, object->rot.y, object->rot.z);
sp14[1][0] *= object->scale.y;
sp14[1][1] *= object->scale.y;
sp14[1][2] *= object->scale.z;
sp8.x = 0.0f;
sp8.y = 0.0f;
sp8.z = 100.0f;
fn_1_1723C(sp14, &sp8);
sp8.x += object->trans.x;
sp8.y += object->trans.y;
sp8.z += object->trans.z;
fn_1_91E0(work->unk_10, sp8.x, sp8.y, sp8.z, 180.0f + object->rot.y);
object->trans.y = fn_1_AE78(work->unk_10, object->trans.x, object->trans.z);
for (var_r30 = 0; var_r30 < 2; var_r30++) {
sp8 = lbl_1_data_534[var_r30];
fn_1_1723C(sp14, &sp8);
work->unk_00[var_r30]->trans.x = object->trans.x + sp8.x;
work->unk_00[var_r30]->trans.y = object->trans.y + sp8.y;
work->unk_00[var_r30]->trans.z = object->trans.z + sp8.z;
work->unk_00[var_r30]->rot.x = object->rot.x;
work->unk_00[var_r30]->rot.y = object->rot.y;
work->unk_00[var_r30]->rot.z = object->rot.z;
if (work->unk_00[var_r30]->model[1] != -1) {
Hu3DModelPosSet(
work->unk_00[var_r30]->model[1], -work->unk_00[var_r30]->trans.x, work->unk_00[var_r30]->trans.y, work->unk_00[var_r30]->trans.z);
Hu3DModelRotSet(
work->unk_00[var_r30]->model[1], work->unk_00[var_r30]->rot.x, -work->unk_00[var_r30]->rot.y, work->unk_00[var_r30]->rot.z);
}
}
for (var_r30 = 0; var_r30 < 0xE; var_r30++) {
if (object->model[var_r30] != -1) {
if (var_r30 < 7) {
Hu3DModelPosSet(object->model[var_r30], object->trans.x, object->trans.y, object->trans.z);
Hu3DModelRotSet(object->model[var_r30], object->rot.x, object->rot.y, object->rot.z);
}
else {
Hu3DModelPosSet(object->model[var_r30], -object->trans.x, object->trans.y, object->trans.z);
Hu3DModelRotSet(object->model[var_r30], object->rot.x, -object->rot.y, object->rot.z);
}
}
}
work->unk_64 = 200.0f;
fn_1_1143C(object);
work->unk_18++;
}
void fn_1_10F8C(omObjData *object)
{
s32 var_r31;
M427DllPlayerWork *work = object->data;
for (var_r31 = 0; var_r31 < 2; var_r31++) {
fn_1_12514(work->unk_00[var_r31]);
}
}
s32 fn_1_10FE8(s32 arg0, s32 *arg1)
{
s32 var_r31;
M427DllPlayerWork *var_r30;
omObjData *var_r29;
var_r29 = lbl_1_bss_56C[arg0];
var_r30 = &lbl_1_bss_578[arg0];
if ((var_r29 == NULL) || (var_r30 == NULL)) {
return -1;
}
if ((var_r30->unk_00[0] == NULL) || (var_r30->unk_08[0] == NULL)) {
return -1;
}
for (var_r31 = 0; var_r31 < 7; var_r31++) {
if (var_r31 < 5) {
arg1[var_r31] = var_r29->model[var_r31];
}
else if (var_r31 < 6) {
arg1[var_r31] = var_r30->unk_00[0]->model[0];
}
else {
arg1[var_r31] = var_r30->unk_00[1]->model[0];
}
}
return var_r31;
}
void fn_1_110E8(s32 arg0, s32 *arg1)
{
s32 var_r31;
M427DllPlayerWork *var_r30;
omObjData *var_r29;
var_r29 = lbl_1_bss_56C[arg0];
var_r30 = &lbl_1_bss_578[arg0];
for (var_r31 = 0; var_r31 < 2; var_r31++) {
arg1[var_r31] = 0;
}
if ((var_r29 == NULL) || (var_r30 == NULL)) {
return;
}
if ((var_r30->unk_00[0] == NULL) || (var_r30->unk_08[0] == NULL)) {
return;
}
for (var_r31 = 0; var_r31 < 2; var_r31++) {
arg1[var_r31] = var_r30->unk_08[var_r31]->unk_0C;
}
}
void fn_1_111C0(s32 arg0, s32 *arg1)
{
s32 var_r31;
M427DllPlayerWork *var_r30;
omObjData *var_r29;
var_r29 = lbl_1_bss_56C[arg0];
var_r30 = &lbl_1_bss_578[arg0];
for (var_r31 = 0; var_r31 < 2; var_r31++) {
arg1[var_r31] = 0;
}
if ((var_r29 == NULL) || (var_r30 == NULL)) {
return;
}
if ((var_r30->unk_00[0] == NULL) || (var_r30->unk_08[0] == NULL)) {
return;
}
for (var_r31 = 0; var_r31 < 2; var_r31++) {
arg1[var_r31] = var_r30->unk_08[var_r31]->unk_00;
}
}
void fn_1_11298(float var_f30)
{
float var_f31;
omObjData *object;
s32 var_r30;
if (fn_1_1788() < 4) {
for (var_r30 = 0; var_r30 < 2; var_r30++) {
object = lbl_1_bss_56C[var_r30];
if (object) {
object->trans.z = 1900.0f + (-1800.0f * var_f30);
}
}
return;
}
for (var_r30 = 0; var_r30 < 2; var_r30++) {
object = lbl_1_bss_56C[var_r30];
if (object) {
object->trans.z = -1800.0f * var_f30;
if (object->trans.z < -1500.0f) {
var_f31 = (object->trans.z - -1500.0f) / 300.0f;
object->rot.y = 180.0f - (30.0f * var_f31);
}
}
}
}
s32 fn_1_113F0(s32 arg0)
{
M427DllPlayerWork *work;
omObjData *object;
object = lbl_1_bss_56C[arg0];
work = object->data;
if (work->unk_14 == 3) {
return 1;
}
return 0;
}
void fn_1_1143C(omObjData *object)
{
Mtx sp20;
Vec sp14;
Vec sp8;
M427DllPlayerWork *work;
s32 var_r29;
work = object->data;
mtxRot(sp20, 0.0f, work->unk_64, 0.0f);
sp14 = lbl_1_data_564;
fn_1_1723C(sp20, &sp14);
sp14.x += object->trans.x;
sp14.y += object->trans.y;
sp14.z += object->trans.z;
sp8.x = sp8.z = 0.0f;
sp8.y = 1.0f;
Hu3DLLightPosSet(object->model[0], work->unk_30[0], sp14.x, sp14.y, sp14.z, sp8.x, sp8.y, sp8.z);
for (var_r29 = 0; var_r29 < 2; var_r29++) {
if (*work->unk_00[var_r29]->model != -1) {
Hu3DLLightPosSet(work->unk_00[var_r29]->model[0], work->unk_08[var_r29]->unk_14, sp14.x, sp14.y, sp14.z, sp8.x, sp8.y, sp8.z);
}
}
}
void fn_1_115B4(omObjData *object)
{
Vec spC;
float sp8;
float var_f31;
float var_f30;
float var_f29;
M427DllBss590Struct *var_r31;
M427DllPlayerWork *work;
s32 var_r28;
work = object->data;
var_r28 = fn_1_155E0(object->trans.x, object->trans.y, object->trans.z, &sp8);
if ((var_r28 < 0) || (var_r28 >= (lbl_1_bss_580 - 1))) {
return;
}
var_r31 = &lbl_1_bss_590[var_r28];
spC.x = var_r31->unk_44.x + (sp8 * var_r31->unk_50);
spC.y = 275.0f + (var_r31->unk_44.y + (sp8 * var_r31->unk_54));
spC.z = var_r31->unk_44.z + (sp8 * var_r31->unk_58);
var_f29 = object->trans.x - spC.x;
spC.x += 0.4f * var_f29;
if (var_f29 < 0.0f) {
var_f30 = fabs(var_r31->unk_5C + (sp8 * (var_r31->unk_64 - var_r31->unk_5C)));
}
else {
var_f30 = fabs(var_r31->unk_60 + (sp8 * (var_r31->unk_68 - var_r31->unk_60)));
}
CenterM[work->unk_10].x = CenterM[work->unk_10].x + (0.06666667f * (spC.x - CenterM[work->unk_10].x));
CenterM[work->unk_10].y = CenterM[work->unk_10].y + (0.06666667f * (spC.y - CenterM[work->unk_10].y));
CenterM[work->unk_10].z = CenterM[work->unk_10].z + (0.06666667f * (spC.z - CenterM[work->unk_10].z));
var_f31 = var_r31->unk_0C;
if (var_f31 < 0.0f) {
var_f31 += 360.0f;
}
var_f31 = 180.0f + (0.25f * (var_f31 - 180.0f));
if (var_f30 != 0.0f) {
var_f30 = var_f29 / var_f30;
}
var_f31 -= 30.0f * var_f30;
CRotM[work->unk_10].y = fn_1_168FC(0.020000001f, CRotM[work->unk_10].y, 180.0f + var_f31);
}
void fn_1_119C0(omObjData *object)
{
float var_f31;
float var_f30;
M427DllBss590Struct *var_r31;
M427DllPlayerWork *work;
M427DllBss590Struct *var_r28;
work = object->data;
var_r31 = &lbl_1_bss_590[1];
var_r28 = &lbl_1_bss_590[27];
var_f31 = var_r28->unk_80->z - var_r31->unk_80->z;
var_f30 = object->trans.z - var_r31->unk_80->z;
fn_1_1798(work->unk_10, var_f30 / var_f31);
}
void fn_1_11A74(omObjData *object)
{
M427DllPlayerWork2 *var_r31;
s32 var_r29;
s32 var_r28;
s32 var_r27;
M427DllPlayerWork *var_r26;
var_r31 = &lbl_1_bss_574[object->work[0]];
object->data = var_r31;
var_r26 = &lbl_1_bss_578[object->work[1]];
lbl_1_bss_578[object->work[1]].unk_08[object->work[2]] = var_r31;
var_r31->unk_00 = object->work[0];
var_r31->unk_04 = object->work[1];
var_r31->unk_08 = GWPlayerCfg[var_r31->unk_00].pad_idx;
var_r31->unk_0C = GWPlayerCfg[var_r31->unk_00].character;
var_r31->unk_10 = object->work[2];
var_r31->unk_18 = GWPlayerCfg[var_r31->unk_00].iscom;
var_r31->unk_1C = GWPlayerCfg[var_r31->unk_00].diff;
var_r31->unk_20 = 0;
var_r31->unk_24 = 0;
var_r31->unk_28 = 0;
var_r31->unk_30 = 0;
var_r31->unk_34 = 0;
var_r31->unk_38 = 0;
var_r31->unk_3C = 0;
var_r31->unk_40 = var_r31->unk_44 = 0;
var_r31->unk_48 = var_r31->unk_4C = 0;
var_r31->unk_50 = 0;
var_r31->unk_54 = 0;
var_r31->unk_60 = lbl_1_data_618[var_r31->unk_1C];
var_r31->unk_58 = frand() % var_r31->unk_60;
var_r31->unk_5C = frand() % 7;
var_r31->unk_64 = -1;
var_r31->unk_68 = var_r31->unk_6C = var_r31->unk_70 = 0.0f;
if (var_r31->unk_18 != 0) {
var_r26->unk_14 |= 1 << var_r31->unk_10;
}
var_r27 = var_r31->unk_0C;
object->model[0] = CharModelCreate(var_r27, 4);
Hu3DModelLayerSet(object->model[0], 2);
if (var_r31->unk_04 == 0) {
Hu3DModelCameraSet(object->model[0], 1);
}
else {
Hu3DModelCameraSet(object->model[0], 2);
}
if (var_r31->unk_10 != 0) {
fn_1_172F0(object->model[0], 0.3f);
}
else {
fn_1_172F0(object->model[0], 0.3f);
}
CharModelStepTypeSet(var_r27, 3);
for (var_r29 = 0; var_r29 < 4; var_r29++) {
object->motion[var_r29] = Hu3DJointMotionFile(object->model[0], var_r31->unk_0C + lbl_1_data_608[var_r29]);
}
var_r31->unk_2C = 0;
CharModelMotionSet(var_r31->unk_0C, object->motion[0]);
CharModelMotionDataClose(var_r27);
var_r28 = Hu3DLLightCreateV(object->model[0], &lbl_1_data_564, &lbl_1_data_570, &lbl_1_data_57C);
var_r31->unk_14 = var_r28;
Hu3DLLightStaticSet(object->model[0], var_r28, 1);
if (var_r31->unk_10 == 0) {
Hu3DLLightPointSet(object->model[0], var_r28, 80.0f, 0.95f, 3);
}
else {
Hu3DLLightPointSet(object->model[0], var_r28, 80.0f, 0.95f, 3);
}
Hu3DLLightColorSet(object->model[0], var_r28, 0xFF, 0xFF, 0xFF, 0xFF);
Hu3DLLightPosSet(
object->model[0], var_r28, lbl_1_data_564.x, lbl_1_data_564.y, lbl_1_data_564.z, lbl_1_data_570.x, lbl_1_data_570.y, lbl_1_data_570.z);
object->func = fn_1_11ED8;
(void)var_r29;
}
void fn_1_11ED8(omObjData *object)
{
M427DllPlayerWork2 *var_r31;
s32 var_r29;
M427DllPlayerWork *var_r28;
omObjData *var_r27;
var_r31 = object->data;
var_r28 = &lbl_1_bss_578[var_r31->unk_04];
var_r27 = lbl_1_bss_56C[var_r31->unk_04];
var_r31->unk_40 = HuPadBtn[var_r31->unk_08];
var_r31->unk_44 = HuPadBtnDown[var_r31->unk_08];
if ((var_r31->unk_18 != 0) && (var_r31->unk_24 == 2)) {
if (var_r28->unk_14 == 3) {
fn_1_12580(object);
}
else {
fn_1_12518(object);
}
}
var_r31->unk_38 = var_r31->unk_3C = 0;
if (var_r31->unk_30 != 0) {
var_r31->unk_38 = 1;
}
if (var_r31->unk_34 != 0) {
var_r31->unk_3C = 1;
}
var_r31->unk_30 = var_r31->unk_34 = 0;
switch (var_r31->unk_24) {
case 0:
if (((var_r31->unk_20 & 0xF) == 0) && (var_r27->trans.z > 100.0f)) {
var_r31->unk_30 = 1;
var_r31->unk_34 = 1;
}
var_r29 = 1;
if (var_r29 != var_r31->unk_2C) {
var_r31->unk_2C = var_r29;
CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_2C], 0.0f, 8.0f, 0x40000001);
}
break;
case 1:
var_r29 = 0;
if ((var_r29 != var_r31->unk_2C) && (CharModelMotionShiftIDGet(var_r31->unk_0C) == -1)) {
var_r31->unk_2C = var_r29;
CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_2C], 0.0f, 8.0f, 0x40000001);
var_r31->unk_28 = 0;
}
break;
case 2:
if (fn_1_32EC() == 0) {
if ((var_r31->unk_44 & 0x100) != 0) {
var_r31->unk_30 = 1;
}
if ((var_r31->unk_44 & 0x200) != 0) {
var_r31->unk_34 = 1;
}
}
var_r31->unk_48 = var_r31->unk_40;
var_r31->unk_4C = var_r31->unk_44;
if ((var_r31->unk_30 != 0) || (var_r31->unk_34 != 0)) {
var_r29 = 1;
}
else {
var_r29 = 0;
}
if ((CharModelMotionShiftIDGet(var_r31->unk_0C) == -1)
&& ((var_r29 != var_r31->unk_2C) || (CharModelMotionEndCheck(var_r31->unk_0C) == 1))) {
if (var_r31->unk_2C == var_r29) {
CharModelMotionTimeSet(var_r31->unk_0C, 0.0f);
}
else {
var_r31->unk_2C = var_r29;
CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_2C], 0.0f, 8.0f, 0);
}
}
break;
case 3:
var_r29 = 2;
if ((var_r29 != var_r31->unk_2C) && (CharModelMotionShiftIDGet(var_r31->unk_0C) == -1)) {
var_r31->unk_2C = var_r29;
CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_2C], 0.0f, 8.0f, 0x40000001);
var_r31->unk_28 = 0;
}
if (var_r31->unk_2C == 2) {
if (++var_r31->unk_28 >= 240.0f) {
Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_LOOP);
}
}
break;
case 4:
var_r29 = 0;
if ((var_r29 != var_r31->unk_2C) && (CharModelMotionShiftIDGet(var_r31->unk_0C) == -1)) {
var_r31->unk_2C = var_r29;
if (object->model[1] != -1) {
Hu3DMotionShiftSet(object->model[1], object->motion[var_r31->unk_2C], 0.0f, 8.0f, HU3D_MOTATTR_LOOP);
}
else {
CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_2C], 0.0f, 8.0f, 0x40000001);
}
var_r31->unk_28 = 0;
}
break;
case 5:
if (object->trans.z > -1300.0f) {
if ((var_r31->unk_20 & 0xF) == 0) {
var_r31->unk_30 = 1;
var_r31->unk_34 = 1;
}
var_r29 = 1;
}
else {
var_r29 = 0;
}
if (var_r31->unk_2C == 1) {
Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_LOOP);
}
if ((CharModelMotionShiftIDGet(var_r31->unk_0C) == -1) && (var_r29 != var_r31->unk_2C)) {
var_r31->unk_2C = var_r29;
CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_2C], 0.0f, 8.0f, 0x40000001);
}
break;
case 6:
var_r29 = 3;
if ((var_r29 != var_r31->unk_2C) && (CharModelMotionShiftIDGet(var_r31->unk_0C) == -1)) {
var_r31->unk_2C = var_r29;
CharModelMotionShiftSet(var_r31->unk_0C, object->motion[var_r31->unk_2C], 0.0f, 8.0f, 0);
HuAudCharVoicePlay(var_r31->unk_0C, 0x124);
var_r31->unk_28 = 0;
}
break;
case 7:
break;
}
var_r31->unk_20++;
}
void fn_1_12514(omObjData *object) { }
void fn_1_12518(omObjData *object)
{
M427DllPlayerWork *var_r31;
M427DllPlayerWork2 *var_r30;
M427DllPlayerWork2 *var_r29;
var_r30 = object->data;
var_r31 = &lbl_1_bss_578[var_r30->unk_04];
if (var_r31->unk_14 == 1) {
var_r29 = var_r31->unk_08[1];
}
else {
var_r29 = var_r31->unk_08[0];
}
var_r30->unk_40 = var_r29->unk_48;
var_r30->unk_44 = var_r29->unk_4C;
}
void fn_1_12580(omObjData *var_r24)
{
float var_f31;
float var_f30;
float var_f29;
float var_f28;
float var_f27;
M427DllPlayerWork2 *var_r31;
M427DllBss590Struct *var_r30;
omObjData *var_r29;
M427DllPlayerWork *var_r28;
s32 var_r27;
s32 var_r26;
s32 var_r25;
var_r31 = var_r24->data;
var_r28 = &lbl_1_bss_578[var_r31->unk_04];
var_r29 = lbl_1_bss_56C[var_r31->unk_04];
var_r31->unk_40 = 0;
var_r31->unk_44 = 0;
var_r26 = fn_1_155E0(var_r29->trans.x, var_r29->trans.y, var_r29->trans.z, NULL);
if ((var_r31->unk_64 != var_r26) || (var_r31->unk_54 > 180.0f)) {
var_r31->unk_64 = var_r26;
switch (var_r31->unk_1C) {
case 0:
var_r27 = 2;
break;
case 1:
var_r27 = 2;
break;
case 2:
var_r27 = 3;
break;
case 3:
var_r27 = 4;
break;
}
if ((var_r31->unk_64 >= 0) && (var_r31->unk_64 < (lbl_1_bss_580 - var_r27)) && (var_r31->unk_64 <= (lbl_1_bss_580 - 2))) {
var_r26 = var_r31->unk_64 + var_r27;
var_r30 = &lbl_1_bss_590[var_r26];
var_f31 = 0.5f * (var_r30->unk_64 + var_r30->unk_68);
var_f30 = (0.6f - (0.1f * var_r31->unk_1C)) - (0.1f * var_r31->unk_1C * ((frand() & 0x7F) / 127.0f));
if (var_f30 > 1.0f) {
var_f30 = 1.0f;
}
else if (var_f30 < 0.0f) {
var_f30 = 0.0f;
}
var_f31 *= var_f30;
if ((frand() & 1) != 0) {
var_f31 *= -1.0f;
}
var_r31->unk_68 = var_r30->unk_80->x + var_f31;
var_r31->unk_6C = var_r30->unk_80->y;
var_r31->unk_70 = var_r30->unk_80->z;
}
else {
var_r30 = &lbl_1_bss_590[lbl_1_bss_580 - 1];
var_r31->unk_68 = var_r30->unk_80->x;
var_r31->unk_6C = var_r30->unk_80->y;
var_r31->unk_70 = var_r30->unk_80->z;
}
var_r31->unk_54 = 0;
}
var_r25 = var_r31->unk_60 + var_r31->unk_5C;
if (var_r28->unk_20 != 0) {
var_r25 = 5;
}
if (++var_r31->unk_58 > var_r25) {
var_r31->unk_58 = 0;
var_r31->unk_5C = frand() % 7;
var_f28 = var_r31->unk_68 - var_r29->trans.x;
var_f27 = var_r31->unk_70 - var_r29->trans.z;
var_f31 = fn_1_16594(atan2d(var_f28, var_f27), var_r28->unk_64);
if (fabs(var_f31) < (30.0f - (5.0f * var_r31->unk_1C))) {
if (var_r31->unk_1C > 2) {
var_f29 = 0.25f * (var_r28->unk_58 - var_r28->unk_5C);
if (var_f29 > 10.0f) {
var_r31->unk_44 |= 0x100;
}
else if (var_f29 < -10.0f) {
var_r31->unk_44 |= 0x200;
}
else {
var_r31->unk_44 |= 0x300;
}
}
else {
var_r31->unk_44 |= 0x300;
}
}
else if (var_f31 < 0.0f) {
var_r31->unk_44 |= 0x200;
}
else {
var_r31->unk_44 |= 0x100;
}
}
var_r31->unk_50++;
var_r31->unk_54++;
}
void fn_1_12B08(void)
{
Vec sp20;
M427DllBss590Struct *var_r31;
s32 var_r30;
M427DllBss57CStruct *var_r29;
lbl_1_bss_580 = 0x1D;
lbl_1_bss_584 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_580 * sizeof(Vec), MEMORY_DEFAULT_NUM);
memset(lbl_1_bss_584, 0, lbl_1_bss_580 * sizeof(Vec));
for (var_r30 = 0; var_r30 < lbl_1_bss_580; var_r30++) {
lbl_1_bss_584[var_r30].x = 0.5f * (lbl_1_data_260[var_r30].x + lbl_1_data_3BC[var_r30].x);
lbl_1_bss_584[var_r30].y = 0.5f * (lbl_1_data_260[var_r30].y + lbl_1_data_3BC[var_r30].y);
lbl_1_bss_584[var_r30].z = 0.5f * (lbl_1_data_260[var_r30].z + lbl_1_data_3BC[var_r30].z);
}
lbl_1_bss_58C = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_580 * sizeof(Vec), MEMORY_DEFAULT_NUM);
memset(lbl_1_bss_58C, 0, lbl_1_bss_580 * sizeof(Vec));
for (var_r30 = 0; var_r30 < lbl_1_bss_580; var_r30++) {
VECSubtract(&lbl_1_bss_584[var_r30], &lbl_1_data_260[var_r30], &lbl_1_bss_58C[var_r30]);
VECNormalize(&lbl_1_bss_58C[var_r30], &lbl_1_bss_58C[var_r30]);
VECScale(&lbl_1_bss_58C[var_r30], &lbl_1_bss_58C[var_r30], 200.0f);
VECAdd(&lbl_1_bss_58C[var_r30], &lbl_1_data_260[var_r30], &lbl_1_bss_58C[var_r30]);
}
lbl_1_bss_588 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_580 * sizeof(Vec), MEMORY_DEFAULT_NUM);
memset(lbl_1_bss_588, 0, lbl_1_bss_580 * sizeof(Vec));
for (var_r30 = 0; var_r30 < lbl_1_bss_580; var_r30++) {
VECSubtract(&lbl_1_bss_584[var_r30], &lbl_1_data_3BC[var_r30], &lbl_1_bss_588[var_r30]);
VECNormalize(&lbl_1_bss_588[var_r30], &lbl_1_bss_588[var_r30]);
VECScale(&lbl_1_bss_588[var_r30], &lbl_1_bss_588[var_r30], 200.0f);
VECAdd(&lbl_1_bss_588[var_r30], &lbl_1_data_3BC[var_r30], &lbl_1_bss_588[var_r30]);
}
var_r31 = lbl_1_bss_590 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_580 * sizeof(M427DllBss590Struct), MEMORY_DEFAULT_NUM);
memset(lbl_1_bss_590, 0, lbl_1_bss_580 * sizeof(M427DllBss590Struct));
for (var_r30 = 0; var_r30 < lbl_1_bss_580; var_r30++, var_r31++) {
var_r31->unk_00 = var_r30;
var_r31->unk_04 = var_r30 + 1;
var_r31->unk_08 = var_r30 - 1;
if (var_r31->unk_04 >= lbl_1_bss_580) {
var_r31->unk_04 = -1;
}
if (var_r31->unk_08 >= lbl_1_bss_580) {
var_r31->unk_08 = -1;
}
var_r31->unk_78 = &lbl_1_bss_58C[var_r30];
var_r31->unk_7C = &lbl_1_bss_588[var_r30];
var_r31->unk_80 = &lbl_1_bss_584[var_r30];
if (var_r31->unk_04 < 0) {
var_r31->unk_0C = 180.0f;
var_r31->unk_70 = 180.0f;
var_r31->unk_74 = 180.0f;
}
else {
var_r31->unk_0C
= atan2d(lbl_1_bss_584[var_r31->unk_04].x - lbl_1_bss_584[var_r30].x, lbl_1_bss_584[var_r31->unk_04].z - lbl_1_bss_584[var_r30].z);
var_r31->unk_70
= atan2d(lbl_1_bss_58C[var_r31->unk_04].x - lbl_1_bss_58C[var_r30].x, lbl_1_bss_58C[var_r31->unk_04].z - lbl_1_bss_58C[var_r30].z);
var_r31->unk_74
= atan2d(lbl_1_bss_588[var_r31->unk_04].x - lbl_1_bss_588[var_r30].x, lbl_1_bss_588[var_r31->unk_04].z - lbl_1_bss_588[var_r30].z);
}
if (var_r31->unk_08 < 0) {
var_r31->unk_10 = 0.0f;
}
else {
var_r31->unk_10
= atan2d(lbl_1_bss_584[var_r31->unk_08].x - lbl_1_bss_584[var_r30].x, lbl_1_bss_584[var_r31->unk_08].z - lbl_1_bss_584[var_r30].z);
}
if (var_r31->unk_04 < 0) {
var_r31->unk_6C = 0.0f;
sp20.x = lbl_1_bss_58C[var_r30].x + lbl_1_bss_590[var_r30 - 1].unk_14[1].x;
sp20.y = lbl_1_bss_58C[var_r30].y + lbl_1_bss_590[var_r30 - 1].unk_14[1].y;
sp20.z = lbl_1_bss_58C[var_r30].z + lbl_1_bss_590[var_r30 - 1].unk_14[1].z;
fn_1_16E3C(&lbl_1_data_260[var_r30], &sp20, &var_r31->unk_14[0], 0);
sp20.x = lbl_1_bss_588[var_r30].x + lbl_1_bss_590[var_r30 - 1].unk_2C[1].x;
sp20.y = lbl_1_bss_588[var_r30].y + lbl_1_bss_590[var_r30 - 1].unk_2C[1].y;
sp20.z = lbl_1_bss_588[var_r30].z + lbl_1_bss_590[var_r30 - 1].unk_2C[1].z;
fn_1_16E3C(&lbl_1_data_3BC[var_r30], &sp20, &var_r31->unk_2C[0], 0);
sp20.x = lbl_1_bss_584[var_r30].x + lbl_1_bss_590[var_r30 - 1].unk_50;
sp20.y = lbl_1_bss_584[var_r30].y + lbl_1_bss_590[var_r30 - 1].unk_54;
sp20.z = lbl_1_bss_584[var_r30].z + lbl_1_bss_590[var_r30 - 1].unk_58;
fn_1_16E3C(&lbl_1_bss_584[var_r30], &sp20, &var_r31->unk_44, 0);
}
else {
sp20.x = lbl_1_bss_584[var_r30 + 1].x - lbl_1_bss_584[var_r30].x;
sp20.y = lbl_1_bss_584[var_r30 + 1].y - lbl_1_bss_584[var_r30].y;
sp20.z = lbl_1_bss_584[var_r30 + 1].z - lbl_1_bss_584[var_r30].z;
var_r31->unk_6C = sqrtf((sp20.z * sp20.z) + ((sp20.x * sp20.x) + (sp20.y * sp20.y)));
fn_1_16E3C(&lbl_1_bss_58C[var_r30], &lbl_1_bss_58C[var_r31->unk_04], &var_r31->unk_14[0], 0);
fn_1_16E3C(&lbl_1_bss_588[var_r30], &lbl_1_bss_588[var_r31->unk_04], &var_r31->unk_2C[0], 0);
fn_1_16E3C(&lbl_1_bss_584[var_r30], &lbl_1_bss_584[var_r31->unk_04], &var_r31->unk_44, 0);
}
sp20.x = lbl_1_bss_58C[var_r30].x - lbl_1_bss_584[var_r30].x;
sp20.z = lbl_1_bss_58C[var_r30].z - lbl_1_bss_584[var_r30].z;
sp20.y = 0.0f;
var_r31->unk_5C = sqrtf((sp20.z * sp20.z) + ((sp20.x * sp20.x) + (sp20.y * sp20.y)));
sp20.x = lbl_1_bss_588[var_r30].x - lbl_1_bss_584[var_r30].x;
sp20.z = lbl_1_bss_588[var_r30].z - lbl_1_bss_584[var_r30].z;
sp20.y = 0.0f;
var_r31->unk_60 = sqrtf((sp20.z * sp20.z) + ((sp20.x * sp20.x) + (sp20.y * sp20.y)));
if (var_r31->unk_04 < 0) {
var_r31->unk_64 = var_r31->unk_5C;
var_r31->unk_68 = var_r31->unk_60;
}
else {
sp20.x = lbl_1_bss_58C[var_r31->unk_04].x - lbl_1_bss_584[var_r31->unk_04].x;
sp20.z = lbl_1_bss_58C[var_r31->unk_04].z - lbl_1_bss_584[var_r31->unk_04].z;
sp20.y = 0.0f;
var_r31->unk_64 = sqrtf((sp20.z * sp20.z) + ((sp20.x * sp20.x) + (sp20.y * sp20.y)));
sp20.x = lbl_1_bss_588[var_r31->unk_04].x - lbl_1_bss_584[var_r31->unk_04].x;
sp20.z = lbl_1_bss_588[var_r31->unk_04].z - lbl_1_bss_584[var_r31->unk_04].z;
sp20.y = 0.0f;
var_r31->unk_68 = sqrtf((sp20.z * sp20.z) + ((sp20.x * sp20.x) + (sp20.y * sp20.y)));
}
}
lbl_1_bss_558 = lbl_1_data_260;
lbl_1_bss_554 = lbl_1_data_3BC;
lbl_1_bss_550 = lbl_1_bss_584;
var_r29 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x40 * sizeof(M427DllBss57CStruct), MEMORY_DEFAULT_NUM);
lbl_1_bss_57C = var_r29;
memset(lbl_1_bss_57C, 0, 0x40 * sizeof(M427DllBss57CStruct));
for (var_r30 = 0; var_r30 < 0x40; var_r30++, var_r29++) {
var_r29->unk_00 = var_r30;
var_r29->unk_04 = -1;
var_r29->unk_08 = -1;
var_r29->unk_0C = 0;
var_r29->unk_10 = 0;
var_r29->unk_14 = var_r29->unk_18 = 0;
}
}
void fn_1_13F24(void)
{
M427DllBss57CStruct *var_r31;
s32 var_r30;
for (var_r31 = lbl_1_bss_57C, var_r30 = 0; var_r30 < 0x40; var_r30 += 1, var_r31++) {
if ((var_r31->unk_04 >= 0) && (var_r31->unk_08 >= 0) && (var_r31->unk_18 >= 0)) {
if (++var_r31->unk_14 > var_r31->unk_18) {
fn_1_1607C(var_r30);
}
}
}
}
void fn_1_13FB8(void) { }
GXColor lbl_1_data_648 = { 0xFF, 0xFF, 0xFF, 0xFF };
GXColor lbl_1_data_64C = { 0xFF, 0, 0, 0xFF };
GXColor lbl_1_data_650 = { 0xFF, 0xFF, 0, 0xFF };
void fn_1_13FBC(ModelData *model, Mtx matrix)
{
Mtx sp70;
float var_f31;
float var_f30;
float var_f29;
M427DllBss57CStruct *var_r31;
M427DllBss590Struct *var_r30;
s16 var_r29;
s16 var_r28;
M427DllPlayerWork *var_r27;
M427DllPlayerWork2 *var_r26;
s32 *var_r25;
omObjData *var_r24;
var_r25 = model->unk_120;
var_r27 = &lbl_1_bss_578[*var_r25];
var_r24 = lbl_1_bss_56C[*var_r25];
GXLoadPosMtxImm(matrix, 0);
MTXInvXpose(matrix, sp70);
GXLoadNrmMtxImm(sp70, 0);
GXSetNumTevStages(1);
GXSetNumTexGens(1);
GXSetNumChans(1);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3C, GX_FALSE, 0x7D);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
GXSetTevOp(GX_TEVSTAGE0, GX_REPLACE);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_RASC);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG0);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVREG0);
GXSetChanCtrl(GX_COLOR0A0, 1, GX_SRC_VTX, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_SPEC);
GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1);
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE);
GXSetZCompLoc(GX_FALSE);
GXSetBlendMode(GX_BM_BLEND, GX_BL_ONE, GX_BL_ZERO, GX_LO_NOOP);
GXSetLineWidth(0x10, GX_TO_ZERO);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0);
GXSETARRAY(GX_VA_POS, lbl_1_data_260, sizeof(lbl_1_data_260), sizeof(Vec));
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_TEX_ST, GX_RGBA8, 0);
GXSETARRAY(GX_VA_CLR0, &lbl_1_data_648, sizeof(lbl_1_data_648), sizeof(GXColor));
GXBegin(GX_LINESTRIP, GX_VTXFMT0, 0x1D);
for (var_r29 = 0; var_r29 < 0x1DU; var_r29++) {
GXPosition1x16(var_r29);
GXColor1x16(0);
}
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSETARRAY(GX_VA_POS, &lbl_1_data_3BC, sizeof(lbl_1_data_3BC), sizeof(Vec));
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSETARRAY(GX_VA_CLR0, &lbl_1_data_648, sizeof(lbl_1_data_648), sizeof(GXColor));
GXBegin(GX_LINESTRIP, GX_VTXFMT0, 0x1D);
for (var_r29 = 0; var_r29 < 0x1DU; var_r29++) {
GXPosition1x16(var_r29);
GXColor1x16(0);
}
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSETARRAY(GX_VA_POS, lbl_1_bss_584, lbl_1_bss_580 * sizeof(Vec), sizeof(Vec));
GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSETARRAY(GX_VA_CLR0, &lbl_1_data_650, sizeof(lbl_1_data_650), sizeof(GXColor));
GXBegin(GX_LINESTRIP, GX_VTXFMT0, 0x1D);
for (var_r29 = 0; var_r29 < lbl_1_bss_580; var_r29++) {
GXPosition1x16(var_r29);
GXColor1x16(0);
}
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXBegin(GX_LINES, GX_VTXFMT0, lbl_1_bss_580 * 4);
for (var_r30 = lbl_1_bss_590, var_r29 = 0; var_r29 < lbl_1_bss_580; var_r29++, var_r30++) {
GXPosition3f32(var_r30->unk_78->x, var_r30->unk_78->y, var_r30->unk_78->z);
GXColor4u8(lbl_1_data_64C.r, lbl_1_data_64C.g, lbl_1_data_64C.b, lbl_1_data_64C.a);
GXPosition3f32(var_r30->unk_80->x, var_r30->unk_80->y, var_r30->unk_80->z);
GXColor4u8(lbl_1_data_64C.r, lbl_1_data_64C.g, lbl_1_data_64C.b, lbl_1_data_64C.a);
GXPosition3f32(var_r30->unk_7C->x, var_r30->unk_7C->y, var_r30->unk_7C->z);
GXColor4u8(lbl_1_data_64C.r, lbl_1_data_64C.g, lbl_1_data_64C.b, lbl_1_data_64C.a);
GXPosition3f32(var_r30->unk_80->x, var_r30->unk_80->y, var_r30->unk_80->z);
GXColor4u8(lbl_1_data_64C.r, lbl_1_data_64C.g, lbl_1_data_64C.b, lbl_1_data_64C.a);
}
for (var_r29 = 0, var_r31 = lbl_1_bss_57C; var_r29 < 0x40; var_r29++, var_r31++) {
if ((var_r31->unk_04 >= 0) && (var_r31->unk_08 >= 0) && (var_r31->unk_10 == *var_r25) && (var_r31->unk_04 == 1)) {
switch (var_r31->unk_08) {
case 0:
GXBegin(GX_LINESTRIP, GX_VTXFMT0, 5);
var_f31 = 200.0f + fn_1_15714(var_r31->unk_1C.x, var_r31->unk_1C.z);
GXPosition3f32(var_r31->unk_1C.x, var_f31, var_r31->unk_1C.z);
GXColor4u8(0, 0xFF, 0, 0xFF);
GXPosition3f32(var_r31->unk_28.x, var_f31, var_r31->unk_1C.z);
GXColor4u8(0, 0xFF, 0, 0xFF);
GXPosition3f32(var_r31->unk_28.x, var_f31, var_r31->unk_28.z);
GXColor4u8(0, 0xFF, 0, 0xFF);
GXPosition3f32(var_r31->unk_1C.x, var_f31, var_r31->unk_28.z);
GXColor4u8(0, 0xFF, 0, 0xFF);
GXPosition3f32(var_r31->unk_1C.x, var_f31, var_r31->unk_1C.z);
GXColor4u8(0, 0xFF, 0, 0xFF);
break;
case 1:
GXBegin(GX_LINESTRIP, GX_VTXFMT0, 0xA);
var_f31 = 200.0f + fn_1_15714(var_r31->unk_1C.x, var_r31->unk_1C.z);
for (var_r28 = 0; var_r28 < 0xA; var_r28++) {
var_f30 = var_r31->unk_1C.x + (var_r31->unk_34 * sind((40.0f * var_r28)));
var_f29 = var_r31->unk_1C.z + (var_r31->unk_34 * cosd((40.0f * var_r28)));
GXPosition3f32(var_f30, var_f31, var_f29);
GXColor4u8(0, 0xFF, 0, 0xFF);
}
break;
}
}
}
for (var_r29 = 0, var_r31 = lbl_1_bss_57C; var_r29 < 0x40; var_r29++, var_r31++) {
if ((var_r31->unk_04 >= 0) && (var_r31->unk_08 >= 0) && (var_r31->unk_10 == *var_r25) && (var_r31->unk_04 == 0)) {
switch (var_r31->unk_08) {
case 0:
GXBegin(GX_LINESTRIP, GX_VTXFMT0, 5);
var_f31 = 200.0f + fn_1_15714(var_r31->unk_1C.x, var_r31->unk_1C.z);
GXPosition3f32(var_r31->unk_1C.x, var_f31, var_r31->unk_1C.z);
GXColor4u8(0, 0, 0xFF, 0xFF);
GXPosition3f32(var_r31->unk_28.x, var_f31, var_r31->unk_1C.z);
GXColor4u8(0, 0, 0xFF, 0xFF);
GXPosition3f32(var_r31->unk_28.x, var_f31, var_r31->unk_28.z);
GXColor4u8(0, 0, 0xFF, 0xFF);
GXPosition3f32(var_r31->unk_1C.x, var_f31, var_r31->unk_28.z);
GXColor4u8(0, 0, 0xFF, 0xFF);
GXPosition3f32(var_r31->unk_1C.x, var_f31, var_r31->unk_1C.z);
GXColor4u8(0, 0, 0xFF, 0xFF);
break;
case 1:
GXBegin(GX_LINESTRIP, GX_VTXFMT0, 0xA);
var_f31 = 200.0f + fn_1_15714(var_r31->unk_1C.x, var_r31->unk_1C.z);
for (var_r28 = 0; var_r28 < 0xA; var_r28++) {
var_f30 = var_r31->unk_1C.x + (var_r31->unk_34 * sind((40.0f * var_r28)));
var_f29 = var_r31->unk_1C.z + (var_r31->unk_34 * cosd((40.0f * var_r28)));
GXPosition3f32(var_f30, var_f31, var_f29);
GXColor4u8(0, 0, 0xFF, 0xFF);
}
break;
}
}
}
if ((var_r24 == NULL) || (var_r27 == NULL)) {
return;
}
if ((var_r27->unk_00[0] == NULL) || (var_r27->unk_08[0] == NULL)) {
return;
}
GXBegin(GX_LINESTRIP, GX_VTXFMT0, 0xA);
var_f31 = 100.0f + var_r24->trans.y;
for (var_r28 = 0; var_r28 < 0xA; var_r28++) {
var_f30 = var_r24->trans.x + (200.0 * sind((40.0f * var_r28)));
var_f30 = var_f30;
var_f29 = var_r24->trans.z + (200.0 * cosd((40.0f * var_r28)));
var_f29 = var_f29;
GXPosition3f32(var_f30, var_f31, var_f29);
GXColor4u8(0xFF, 0, 0xFF, 0xFF);
}
GXBegin(GX_LINESTRIP, GX_VTXFMT0, 4);
var_r26 = var_r27->unk_08[0];
var_f30 = var_r26->unk_68;
var_f29 = var_r26->unk_70;
var_f31 = 100.0f + fn_1_15714(var_f30, var_f29);
GXPosition3f32(var_f30, var_f31, var_f29);
GXColor4u8(0xFF, 0x80, 0, 0xFF);
GXPosition3f32(100.0f + var_f30, 200.0f + var_f31, var_f29);
GXColor4u8(0xFF, 0x80, 0, 0xFF);
GXPosition3f32(var_f30 - 100.0f, 200.0f + var_f31, var_f29);
GXColor4u8(0xFF, 0x80, 0, 0xFF);
GXPosition3f32(var_f30, var_f31, var_f29);
GXColor4u8(0xFF, 0x80, 0, 0xFF);
GXBegin(GX_LINESTRIP, GX_VTXFMT0, 4);
var_r26 = var_r27->unk_08[1];
var_f30 = var_r26->unk_68;
var_f29 = var_r26->unk_70;
var_f31 = 100.0f + fn_1_15714(var_f30, var_f29);
GXPosition3f32(var_f30, var_f31, var_f29);
GXColor4u8(0, 0x80, 0xFF, 0xFF);
GXPosition3f32(100.0f + var_f30, 200.0f + var_f31, var_f29);
GXColor4u8(0, 0x80, 0xFF, 0xFF);
GXPosition3f32(var_f30 - 100.0f, 200.0f + var_f31, var_f29);
GXColor4u8(0, 0x80, 0xFF, 0xFF);
GXPosition3f32(var_f30, var_f31, var_f29);
GXColor4u8(0, 0x80, 0xFF, 0xFF);
}
void fn_1_154B8(void) { }
s32 fn_1_154BC(float arg8, float arg9, float argA)
{
float var_f31;
float var_f30;
float var_f29;
float var_f28;
float var_f27;
s32 var_r31;
s32 var_r30;
var_r30 = -1;
var_f27 = 1e7f;
for (var_r31 = 0; var_r31 < lbl_1_bss_580; var_r31++) {
var_f31 = lbl_1_bss_590[var_r31].unk_80->x - arg8;
var_f30 = lbl_1_bss_590[var_r31].unk_80->y - arg9;
var_f29 = lbl_1_bss_590[var_r31].unk_80->z - argA;
var_f28 = (var_f29 * var_f29) + ((var_f31 * var_f31) + (var_f30 * var_f30));
if (var_f28 < var_f27) {
var_r30 = var_r31;
var_f27 = var_f28;
}
}
return var_r30;
}
s32 fn_1_155E0(float arg8, float arg9, float argA, float *arg0)
{
float var_f31;
M427DllBss590Struct *var_r31;
s32 var_r30;
M427DllBss590Struct *var_r29;
for (var_r30 = 0; var_r30 < (lbl_1_bss_580 - 1); var_r30++) {
var_r31 = &lbl_1_bss_590[var_r30];
var_r29 = &lbl_1_bss_590[var_r30 + 1];
if ((argA < var_r31->unk_80->z) && (argA >= var_r29->unk_80->z)) {
var_f31 = var_r29->unk_80->z - var_r31->unk_80->z;
if ((arg0 != NULL) && (var_f31 != 0.0f)) {
*arg0 = fabs((argA - var_r31->unk_80->z) / var_f31);
}
break;
}
}
return var_r30;
}
float fn_1_15714(float arg8, float arg9)
{
float sp8;
M427DllBss590Struct *var_r31;
s32 var_r28;
M427DllBss590Struct *var_r26;
var_r28 = fn_1_155E0(0.0f, 0.0f, arg9, &sp8);
var_r31 = &lbl_1_bss_590[var_r28];
if ((var_r28 < 0) || (var_r28 >= (lbl_1_bss_580 - 1))) {
return var_r31->unk_80->y;
}
var_r26 = &lbl_1_bss_590[var_r28 + 1];
return var_r31->unk_80->y + (sp8 * (var_r26->unk_80->y - var_r31->unk_80->y));
}
void fn_1_158D8(float arg8, float var_f30, Vec *var_r31)
{
float sp8;
M427DllBss590Struct *var_r30;
M427DllBss590Struct *var_r29;
s32 var_r26;
var_r31->x = var_r31->y = var_r31->z = 0.0f;
var_r26 = fn_1_155E0(0.0f, 0.0f, var_f30, &sp8);
var_r30 = &lbl_1_bss_590[var_r26];
if ((var_r26 < 0) || (var_r26 >= (lbl_1_bss_580 - 1))) {
return;
}
var_r29 = &lbl_1_bss_590[var_r26 + 1];
if (var_r30->unk_80->y > var_r29->unk_80->y) {
var_r31->x = var_r29->unk_80->x - var_r30->unk_80->x;
var_r31->z = var_r29->unk_80->z - var_r30->unk_80->z;
VECNormalize(var_r31, var_r31);
}
}
s32 fn_1_15AF0(s32 arg0, Vec *arg1, Vec *arg2, Vec *arg3, Vec *arg4)
{
Vec sp3C;
Vec sp30;
Vec sp24;
Vec sp18;
Vec spC;
float sp8;
float var_f31;
float var_f29;
M427DllBss590Struct *var_r30;
*arg3 = *arg2;
arg4->x = arg4->y = arg4->z = 0.0f;
if (arg0 < 0) {
arg0 = fn_1_155E0(0.0f, 0.0f, arg2->z, &sp8);
}
if ((arg0 < 0) || (arg0 >= (lbl_1_bss_580 - 1))) {
return 0;
}
var_r30 = &lbl_1_bss_590[arg0];
sp3C.x = arg2->x - arg1->x;
sp3C.y = arg2->y - arg1->y;
sp3C.z = arg2->z - arg1->z;
VECNormalize(&sp3C, &sp3C);
spC.x = var_r30->unk_44.x + (sp8 * var_r30->unk_50);
spC.y = var_r30->unk_44.y + (sp8 * var_r30->unk_54);
spC.z = var_r30->unk_44.z + (sp8 * var_r30->unk_58);
var_f29 = fabs(arg2->x - spC.x);
if (arg2->x < spC.x) {
var_f31 = var_r30->unk_5C + (sp8 * (var_r30->unk_64 - var_r30->unk_5C));
if (var_f29 > var_f31) {
sp30 = *arg2;
fn_1_17048(var_r30->unk_14, NULL, &sp30, &sp24);
arg3->x = sp24.x;
arg3->y = sp24.y;
arg3->z = sp24.z;
arg4->x = arg3->x - arg2->x;
arg4->y = arg3->y - arg2->y;
arg4->z = arg3->z - arg2->z;
return 1;
}
goto block_18;
}
var_f31 = var_r30->unk_60 + (sp8 * (var_r30->unk_68 - var_r30->unk_60));
if (var_f29 > var_f31) {
sp30 = *arg2;
fn_1_17048(var_r30->unk_2C, NULL, &sp30, &sp18);
arg3->x = sp18.x;
arg3->y = sp18.y;
arg3->z = sp18.z;
arg4->x = arg3->x - arg2->x;
arg4->y = arg3->y - arg2->y;
arg4->z = arg3->z - arg2->z;
return 1;
}
block_18:
return 0;
}
s32 fn_1_15F10(Vec arg0, Vec arg1, s32 arg2, s32 arg3, s32 arg4)
{
M427DllBss57CStruct *var_r31;
s32 var_r30;
for (var_r31 = lbl_1_bss_57C, var_r30 = 0; var_r30 < 0x40; var_r30++, var_r31++) {
if ((var_r31->unk_04 < 0) || (var_r31->unk_08 < 0)) {
break;
}
}
if (var_r30 >= 0x40) {
return -1;
}
var_r31->unk_04 = arg2;
var_r31->unk_08 = 0;
var_r31->unk_0C = 0;
var_r31->unk_10 = arg4;
var_r31->unk_18 = arg3;
var_r31->unk_14 = 0;
var_r31->unk_1C = arg0;
var_r31->unk_28 = arg1;
return var_r30;
}
s32 fn_1_15FD0(Vec arg0, float arg8, s32 arg1, s32 arg2, s32 arg3)
{
M427DllBss57CStruct *var_r31;
s32 var_r30;
for (var_r31 = lbl_1_bss_57C, var_r30 = 0; var_r30 < 0x40; var_r30++, var_r31++) {
if ((var_r31->unk_04 < 0) || (var_r31->unk_08 < 0)) {
break;
}
}
if (var_r30 >= 0x40) {
return -1;
}
var_r31->unk_04 = arg1;
var_r31->unk_08 = 1;
var_r31->unk_0C = 0;
var_r31->unk_10 = arg3;
var_r31->unk_18 = arg2;
var_r31->unk_14 = 0;
var_r31->unk_1C = arg0;
var_r31->unk_34 = arg8;
return var_r30;
}
void fn_1_1607C(s32 arg0)
{
M427DllBss57CStruct *var_r31;
if ((arg0 < 0) || (arg0 >= 0x40)) {
return;
}
var_r31 = &lbl_1_bss_57C[arg0];
var_r31->unk_04 = -1;
var_r31->unk_08 = -1;
var_r31->unk_14 = var_r31->unk_18 = 0;
}
s32 fn_1_160D4(s32 arg0, Vec *arg1, float arg8)
{
float var_f31;
float var_f30;
float var_f29;
M427DllBss57CStruct *var_r31;
s32 var_r30;
for (var_r31 = lbl_1_bss_57C, var_r30 = 0; var_r30 < 0x40; var_r30++, var_r31++) {
if ((var_r31->unk_04 >= 0) && (var_r31->unk_08 >= 0) && (var_r31->unk_10 == arg0) && ((var_r31->unk_04 == 1) || (var_r31->unk_04 == 2))) {
switch (var_r31->unk_08) {
case 0:
var_f31 = arg1->x - var_r31->unk_1C.x;
var_f30 = arg1->z - var_r31->unk_1C.z;
if ((arg1->x >= (var_r31->unk_1C.x - arg8)) && (arg1->x <= (var_r31->unk_28.x + arg8)) && (arg1->z >= (var_r31->unk_1C.z - arg8))
&& (arg1->z <= (var_r31->unk_28.z + arg8))) {
return 1;
}
break;
case 1:
var_f31 = arg1->x - var_r31->unk_1C.x;
var_f30 = arg1->z - var_r31->unk_1C.z;
var_f29 = var_r31->unk_34 + arg8;
if (((var_f31 * var_f31) + (var_f30 * var_f30)) < (var_f29 * var_f29)) {
return 1;
}
break;
}
}
}
return 0;
}
s32 fn_1_16260(s32 arg0, Vec *arg2, Vec *arg3, Vec *arg4, float arg8)
{
float var_f31;
float var_f30;
float var_f28;
M427DllBss57CStruct *var_r31;
s32 var_r30;
*arg4 = *arg3;
for (var_r31 = lbl_1_bss_57C, var_r30 = 0; var_r30 < 0x40; var_r30++, var_r31++) {
if ((var_r31->unk_04 >= 0) && (var_r31->unk_08 >= 0) && (var_r31->unk_10 == arg0) && ((var_r31->unk_04 == 0) || (var_r31->unk_04 == 2))) {
switch (var_r31->unk_08) {
case 0:
var_f31 = arg3->x - var_r31->unk_1C.x;
var_f30 = arg3->z - var_r31->unk_1C.z;
if ((arg3->x >= (var_r31->unk_1C.x - arg8)) && (arg3->x <= (var_r31->unk_28.x + arg8)) && (arg3->z >= (var_r31->unk_1C.z - arg8))
&& (arg3->z <= (var_r31->unk_28.z + arg8))) {
return 1;
}
break;
case 1:
var_f31 = arg3->x - var_r31->unk_1C.x;
var_f30 = arg3->z - var_r31->unk_1C.z;
var_f28 = var_r31->unk_34 + arg8;
if (((var_f31 * var_f31) + (var_f30 * var_f30)) < (var_f28 * var_f28)) {
var_f28 = sqrtf((var_f31 * var_f31) + (var_f30 * var_f30));
if (var_f28 == 0.0f) {
var_f31 = 0.0f;
var_f30 = 1.0f;
}
else {
var_f31 /= var_f28;
var_f30 /= var_f28;
}
var_f28 = var_r31->unk_34 + arg8;
arg4->x = var_r31->unk_1C.x + (var_f31 * var_f28);
arg4->z = var_r31->unk_1C.z + (var_f30 * var_f28);
arg4->y = arg3->y;
return 1;
}
break;
}
}
}
return 0;
}
float fn_1_16594(float arg8, float arg9)
{
float var_f31;
if (arg8 >= 360.0f) {
arg8 -= 360.0f;
}
else if (arg8 < 0.0f) {
arg8 += 360.0f;
}
if (arg9 >= 360.0f) {
arg9 -= 360.0f;
}
else if (arg9 < 0.0f) {
arg9 += 360.0f;
}
var_f31 = arg8 - arg9;
if (var_f31 <= -180.0f) {
var_f31 += 360.0f;
}
else if (var_f31 >= 180.0f) {
var_f31 -= 360.0f;
}
return var_f31;
}
float fn_1_166AC(float arg8, float arg9, float argA)
{
float var_f31;
float var_f30;
if (arg8 >= 360.0) {
arg8 -= 360.0;
}
else if (arg8 < 0.0) {
arg8 += 360.0;
}
if (arg9 >= 360.0) {
arg9 -= 360.0;
}
else if (arg9 < 0.0) {
arg9 += 360.0;
}
var_f30 = 360.0 + (arg8 - arg9);
if (fabs(var_f30) >= 360.0) {
var_f30 = fmod(var_f30, 360.0);
}
if (var_f30 < 180.0) {
if (var_f30 <= argA) {
var_f31 = var_f30;
}
else {
var_f31 = argA;
}
}
else if ((360.0 - var_f30) <= argA) {
var_f31 = -(360.0 - var_f30);
}
else {
var_f31 = -argA;
}
var_f31 += arg9;
if (var_f31 >= 360.0) {
var_f31 -= 360.0;
}
else if (var_f31 < 0.0) {
var_f31 += 360.0;
}
return var_f31;
}
float fn_1_168FC(float arg8, float arg9, float argA)
{
float var_f24;
float var_f23;
var_f23 = fn_1_16594(argA, arg9);
var_f24 = fabs(var_f23 * arg8);
return fn_1_166AC(argA, arg9, var_f24);
}
void fn_1_16CF4(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3)
{
Vec sp14;
Vec sp8;
sp14.x = arg1->x - arg0->x;
sp14.y = arg1->y - arg0->y;
sp14.z = arg1->z - arg0->z;
sp8.x = arg2->x - arg0->x;
sp8.y = arg2->y - arg0->y;
sp8.z = arg2->z - arg0->z;
arg3->x = (sp14.y * sp8.z) - (sp14.z * sp8.y);
arg3->y = (sp14.z * sp8.x) - (sp14.x * sp8.z);
arg3->z = (sp14.x * sp8.y) - (sp14.y * sp8.x);
VECNormalize(arg3, arg3);
arg3[1].x = (arg3->z * arg0->z) + ((arg3->x * arg0->x) + (arg3->y * arg0->y));
}
void fn_1_16E3C(Vec *arg0, Vec *arg1, Vec *arg2, s32 arg3)
{
Vec spC;
spC.x = arg1->x - arg0->x;
spC.y = arg1->y - arg0->y;
spC.z = arg1->z - arg0->z;
if (arg3 != 0) {
VECNormalize(&spC, &spC);
}
arg2->x = arg0->x;
arg2->y = arg0->y;
arg2->z = arg0->z;
arg2[1].x = spC.x;
arg2[1].y = spC.y;
arg2[1].z = spC.z;
}
void fn_1_16EF8(Vec *arg0, float *arg1, Vec *arg2, Vec *arg3)
{
float var_f31;
float var_f30;
float var_f29;
var_f30 = (arg0[1].z * arg0[1].z) + ((arg0[1].x * arg0[1].x) + (arg0[1].y * arg0[1].y));
var_f29 = (-arg0[0].z * arg0[1].z) + (arg2->z * arg0[1].z)
+ ((-arg0[0].x * arg0[1].x) + (arg2->x * arg0[1].x) + ((-arg0[0].y * arg0[1].y) + (arg2->y * arg0[1].y)));
if (var_f30 != 0.0f) {
var_f31 = var_f29 / var_f30;
}
else {
var_f31 = 0.0f;
}
if (arg3 != NULL) {
arg3->x = arg0[0].x + (var_f31 * arg0[1].x);
arg3->y = arg0[0].y + (var_f31 * arg0[1].y);
arg3->z = arg0[0].z + (var_f31 * arg0[1].z);
}
if (arg1 != NULL) {
*arg1 = var_f31;
}
}
typedef struct Vec3d {
double x;
double y;
double z;
} Vec3d;
void fn_1_17048(Vec *arg0, float *arg1, Vec *arg2, Vec *arg3)
{
Vec3d sp38;
Vec3d sp20;
Vec3d sp8;
double var_f31;
double var_f30;
double var_f29;
sp20.x = 0.0;
sp20.y = 0.0;
sp20.z = 0.0;
sp38.x = arg0[1].x;
sp38.y = arg0[1].y;
sp38.z = arg0[1].z;
sp8.x = arg2->x - arg0->x;
sp8.y = arg2->y - arg0->y;
sp8.z = arg2->z - arg0->z;
var_f30 = (sp38.z * arg0[1].z) + ((sp38.x * arg0[1].x) + (sp38.y * arg0[1].y));
var_f29 = (-sp20.z * sp38.z) + (sp8.z * sp38.z) + ((-sp20.x * sp38.x) + (sp8.x * sp38.x) + ((-sp20.y * sp38.y) + (sp8.y * sp38.y)));
if (0.0 != var_f30) {
var_f31 = var_f29 / var_f30;
}
else {
var_f31 = 0.0;
}
if (arg3 != NULL) {
arg3->x = arg0->x + (float)(sp20.x + (var_f31 * sp38.x));
arg3->y = arg0->y + (float)(sp20.y + (var_f31 * sp38.y));
arg3->z = arg0->z + (float)(sp20.z + (var_f31 * sp38.z));
}
if (arg1 != NULL) {
*arg1 = var_f31;
}
}
void fn_1_17238(void) { }
void fn_1_1723C(Mtx arg0, Vec *arg1)
{
Vec sp8;
sp8.x = (arg0[0][2] * arg1->z) + ((arg0[0][0] * arg1->x) + (arg0[0][1] * arg1->y));
sp8.y = (arg0[1][2] * arg1->z) + ((arg0[1][0] * arg1->x) + (arg0[1][1] * arg1->y));
sp8.z = (arg0[2][2] * arg1->z) + ((arg0[2][0] * arg1->x) + (arg0[2][1] * arg1->y));
*arg1 = sp8;
}
void fn_1_172F0(s32 arg0, float arg8)
{
HsfMaterial *var_r31;
s32 var_r30;
HsfData *var_r29;
s32 var_r28;
ModelData *var_r27;
s32 var_r26;
var_r27 = &Hu3DData[arg0];
var_r29 = var_r27->hsfData;
var_r31 = var_r29->material;
var_r26 = var_r29->materialCnt;
for (var_r28 = 0; var_r28 < var_r26; var_r28++, var_r31++) {
var_r31->vtxMode = 1;
var_r30 = var_r31->litColor[0] * arg8;
if (var_r30 > 0xFF) {
var_r30 = 0xFF;
}
var_r31->litColor[0] = var_r30;
var_r30 = var_r31->litColor[1] * arg8;
if (var_r30 > 0xFF) {
var_r30 = 0xFF;
}
var_r31->litColor[1] = var_r30;
var_r30 = var_r31->litColor[2] * arg8;
if (var_r30 > 0xFF) {
var_r30 = 0xFF;
}
var_r31->litColor[2] = var_r30;
}
}
s32 fn_1_17430(s32 arg0, s32 arg1, s32 arg2)
{
s32 var_r31;
ModelData *var_r30;
ModelData *var_r29;
var_r29 = &Hu3DData[arg0];
var_r30 = &Hu3DData[arg2];
for (var_r31 = 0; var_r31 < 8; var_r31++) {
if (var_r30->unk_38[var_r31] == -1) {
break;
}
}
if (var_r31 == 8) {
return -1;
}
var_r30->unk_38[var_r31] = var_r29->unk_38[arg1];
var_r30->attr |= 0x1000;
return var_r31;
}