marioparty4/src/REL/m462Dll/main.c
dbalatoni13 accaf2085f
Port m426Dll to PAL, match m428Dll and remove PS prefixes (#537)
* Port m426Dll to PAL

* Remove PS prefix from mtx function usages

* Match m428Dll
2025-01-18 22:31:11 -06:00

1697 lines
56 KiB
C
Executable file

#include "game/audio.h"
#include "game/chrman.h"
#include "game/data.h"
#include "game/frand.h"
#include "game/gamework.h"
#include "game/gamework_data.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/minigame_seq.h"
#include "game/object.h"
#include "game/objsub.h"
#include "game/pad.h"
#include "game/process.h"
#include "game/sprite.h"
#include "game/wipe.h"
#include "dolphin.h"
#include "ext_math.h"
typedef struct {
/* 0x00 */ s16 unk00;
/* 0x02 */ s16 unk02;
/* 0x04 */ s16 unk04;
/* 0x06 */ s16 unk06[8];
/* 0x16 */ s16 unk16[4];
/* 0x1E */ s16 unk1E;
/* 0x20 */ s32 unk20;
/* 0x24 */ s32 unk24;
/* 0x28 */ s32 unk28;
/* 0x2C */ s32 unk2C;
/* 0x30 */ s32 unk30;
/* 0x34 */ s32 unk34;
/* 0x38 */ char unk38[4];
/* 0x3C */ s32 unk3C;
/* 0x40 */ char unk40[4];
/* 0x44 */ s32 unk44;
/* 0x48 */ s32 unk48;
/* 0x4C */ Vec unk4C;
/* 0x58 */ float unk58;
/* 0x5C */ float unk5C;
/* 0x60 */ Vec unk60;
/* 0x6C */ float unk6C;
/* 0x70 */ float unk70;
/* 0x74 */ float unk74;
/* 0x78 */ Vec unk78;
/* 0x84 */ float unk84;
/* 0x88 */ float unk88;
/* 0x8C */ float unk8C;
/* 0x90 */ float unk90;
/* 0x94 */ float unk94;
} StructBss340; // Size 0x98
typedef struct {
/* 0x00 */ s16 unk00;
/* 0x02 */ s16 unk02;
/* 0x04 */ s16 unk04[3];
/* 0x0A */ char unk0A[2];
/* 0x0C */ s32 unk0C;
/* 0x10 */ s32 unk10;
/* 0x14 */ Vec unk14;
/* 0x20 */ float unk20;
/* 0x24 */ float unk24;
/* 0x28 */ float unk28;
/* 0x2C */ float unk2C;
/* 0x30 */ float unk30;
/* 0x34 */ float unk34;
/* 0x38 */ s32 unk38;
/* 0x3C */ s32 unk3C;
/* 0x40 */ float unk40;
/* 0x44 */ float unk44;
} StructBss70; // Size 0x48
void fn_1_4A0(void);
float fn_1_14B4(float arg0);
void fn_1_174C(void);
void fn_1_17A0(s32 arg0, s32 arg1);
void fn_1_44D8(void);
void fn_1_4BC4(void);
void fn_1_69C0(void);
void fn_1_7D40(void);
void fn_1_545C(ModelData *model, ParticleData *particle, Mtx matrix);
void fn_1_594C(ModelData *model, ParticleData *particle, Mtx matrix);
void fn_1_5DE4(ModelData *model, ParticleData *particle, Mtx matrix);
void fn_1_7DA0(void);
s32 fn_1_1880(float arg0, float arg1, float arg2, s32 arg3, s32 arg4);
s16 lbl_1_bss_3EA;
s16 lbl_1_bss_3E8;
s32 lbl_1_bss_3E4;
s32 lbl_1_bss_3E0;
s32 lbl_1_bss_3DC;
s32 lbl_1_bss_3D8;
StructBss340 lbl_1_bss_340[1];
StructBss70 lbl_1_bss_70[10];
StructBss70 lbl_1_bss_28;
omObjData *lbl_1_bss_24;
Vec lbl_1_bss_18;
Vec lbl_1_bss_C;
Vec lbl_1_bss_0;
s32 lbl_1_data_0[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
s32 lbl_1_data_20[] = { DATA_MAKE_NUM(DATADIR_MARIOMOT, 79), DATA_MAKE_NUM(DATADIR_MARIOMOT, 27), DATA_MAKE_NUM(DATADIR_MARIOMOT, 75),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 22) };
Vec lbl_1_data_30[] = { { 0.0f, 0.0f, 35.0f }, { 0.0f, 0.0f, 35.0f }, { 0.0f, 0.0f, 35.0f }, { 0.0f, 0.0f, 35.0f }, { 0.0f, 0.0f, 35.0f },
{ 0.0f, 0.0f, 35.0f }, { 0.0f, 0.0f, 35.0f }, { 0.0f, 0.0f, 35.0f } };
Vec lbl_1_data_90[] = { { -900.0f, 143.0f, -1020.0f }, { -677.0f, 143.0f, -1020.0f }, { 900.0f, 0.0f, -1150.0f }, { -307.0f, 182.0f, -1575.0f } };
s32 lbl_1_data_C0[][5] = { { 50, 80, 90, 95, 100 }, { 5, 55, 85, 95, 100 }, { 0, 5, 55, 90, 100 } };
float lbl_1_data_FC[] = { 0.3f, 0.5f, 0.7f, 0.9f, 1.0f };
void ObjectSetup(void)
{
Process *temp_r3;
temp_r3 = omInitObjMan(50, 0x2000);
omGameSysInit(temp_r3);
Hu3DCameraCreate(1);
Hu3DCameraPerspectiveSet(1, 30.0f, 20.0f, 10000.0f, 1.2f);
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
Hu3DCameraScissorSet(1, 0, 0, 640, 480);
lbl_1_bss_24 = omAddObjEx(temp_r3, 0x7FDA, 0, 0, -1, omOutViewMulti);
lbl_1_bss_24->work[0] = 1;
CRotM->x = -26.0f;
CRotM->y = 0.0f;
CRotM->z = 0.0f;
CenterM->x = 0.0f;
CenterM->y = 0.0f;
CenterM->z = -295.0f;
CZoomM[0] = 3030.0f;
Hu3DLighInit();
lbl_1_bss_3EA = Hu3DGLightCreate(10000.0f, 0.0f, 10000.0f, -1.0f, 0.0f, -1.0f, 255, 50, 0);
Hu3DGLightPosAimSet(lbl_1_bss_3EA, -2500.0f, 3535.5f, 2500.0f, 0.0f, 0.0f, 0.0f);
Hu3DGLightInfinitytSet(lbl_1_bss_3EA);
lbl_1_bss_18.x = -2500.0f;
lbl_1_bss_18.y = 3535.5f;
lbl_1_bss_18.z = 2500.0f;
lbl_1_bss_C.x = lbl_1_bss_C.z = 0.0f;
lbl_1_bss_C.y = 1.0f;
lbl_1_bss_0.x = 0.0f;
lbl_1_bss_0.y = 0.0f;
lbl_1_bss_0.z = 0.0f;
Hu3DShadowCreate(30.0f, 20.0f, 10000.0f);
Hu3DShadowTPLvlSet(0.5f);
Hu3DShadowPosSet(&lbl_1_bss_18, &lbl_1_bss_C, &lbl_1_bss_0);
Hu3DBGColorSet(0, 0, 0);
fn_1_4A0();
HuPrcChildCreate(fn_1_7DA0, 0x1000, 0x2000, 0, HuPrcCurrentGet());
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
}
void fn_1_4A0(void)
{
float temp_f31;
float temp_f30;
void *var_r27;
StructBss340 *temp_r31;
StructBss70 *temp_r29;
Process *var_r25;
AnimData *var_r24;
AnimData *spC[4];
s16 var_r30;
s16 var_r23;
s16 sp8;
s32 i;
s32 j;
lbl_1_bss_3E0 = 0;
lbl_1_bss_3D8 = 0;
HuAudSndGrpSet(0x2C);
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_M462, 0), MEMORY_DEFAULT_NUM, HEAP_DATA);
var_r30 = Hu3DModelCreate(var_r27);
lbl_1_bss_3E8 = var_r30;
Hu3DModelLayerSet(var_r30, 1);
Hu3DModelShadowMapSet(var_r30);
Hu3DModelAttrSet(var_r30, HU3D_MOTATTR_LOOP);
i = 0;
temp_r31 = &lbl_1_bss_340[i];
temp_r31->unk20 = i;
temp_r31->unk24 = i;
temp_r31->unk28 = GWPlayerCfg[i].pad_idx;
temp_r31->unk02 = CharModelCreate(lbl_1_data_0[GWPlayerCfg[i].character], 2);
Hu3DModelLayerSet(temp_r31->unk00, 1);
CharModelLayerSetAll(2);
temp_r31->unk78.x = lbl_1_data_30[GWPlayerCfg[i].character].x;
temp_r31->unk78.y = lbl_1_data_30[GWPlayerCfg[i].character].y;
temp_r31->unk78.z = lbl_1_data_30[GWPlayerCfg[i].character].z;
Hu3DModelPosSet(temp_r31->unk02, temp_r31->unk78.x, temp_r31->unk78.y, temp_r31->unk78.z);
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_M462, 1), MEMORY_DEFAULT_NUM, HEAP_DATA);
temp_r31->unk00 = Hu3DModelCreate(var_r27);
Hu3DModelLayerSet(temp_r31->unk00, 1);
temp_r31->unk60.x = temp_r31->unk60.z = 0.0f;
temp_r31->unk60.y = 180.0f;
temp_r31->unk4C.x = 0.0f;
temp_r31->unk4C.y = 0.0f;
temp_r31->unk4C.z = 0.0f;
temp_r31->unk60.y = fn_1_14B4(temp_r31->unk60.y + 180.0f);
temp_r31->unk94 = temp_r31->unk60.y;
temp_r31->unk84 = 200.0f;
temp_r31->unk88 = 6.75f;
temp_r31->unk8C = 1.0f;
temp_r31->unk90 = 1.0f;
Hu3DModelPosSet(temp_r31->unk00, temp_r31->unk4C.x, temp_r31->unk4C.y, temp_r31->unk4C.z);
Hu3DModelRotSet(temp_r31->unk00, temp_r31->unk60.x, temp_r31->unk60.y, temp_r31->unk60.z);
Hu3DModelShadowSet(temp_r31->unk00);
Hu3DModelHookSet(temp_r31->unk00, "itemhook_c", temp_r31->unk02);
for (j = 0; j < 4; j++) {
temp_r31->unk16[j] = CharModelMotionCreate(lbl_1_data_0[GWPlayerCfg[i].character], lbl_1_data_20[j]);
}
CharModelMotionSet(lbl_1_data_0[GWPlayerCfg[i].character], temp_r31->unk16[0]);
CharModelMotionTimeSet(lbl_1_data_0[GWPlayerCfg[i].character], 60.0f);
CharModelVoiceEnableSet(lbl_1_data_0[GWPlayerCfg[i].character], temp_r31->unk16[2], 0);
for (j = 0; j < 8; j++) {
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_M462, 2 + j), MEMORY_DEFAULT_NUM, HEAP_DATA);
temp_r31->unk06[j] = Hu3DJointMotion(temp_r31->unk00, var_r27);
}
Hu3DMotionSet(temp_r31->unk00, temp_r31->unk06[0]);
Hu3DMotionShiftSpeedSet(temp_r31->unk00, 1.0f);
Hu3DMotionSpeedSet(temp_r31->unk00, 1.0f);
Hu3DModelAttrSet(temp_r31->unk00, HU3D_MOTATTR_LOOP);
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_M462, 10), MEMORY_DEFAULT_NUM, HEAP_DATA);
temp_r31->unk04 = Hu3DModelCreate(var_r27);
Hu3DModelLayerSet(temp_r31->unk04, 1);
Hu3DModelAttrSet(temp_r31->unk04, HU3D_ATTR_DISPOFF);
Hu3DModelAttrSet(temp_r31->unk04, HU3D_MOTATTR_PAUSE);
CharModelMotionDataClose(lbl_1_data_0[GWPlayerCfg[i].character]);
var_r25 = HuPrcChildCreate(fn_1_69C0, 0x2000, 0x3000, 0, HuPrcCurrentGet());
var_r25->user_data = temp_r31;
var_r24 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_EFFECT, 2), MEMORY_DEFAULT_NUM));
var_r30 = Hu3DParticleCreate(var_r24, 50);
Hu3DModelPosSet(var_r30, 0.0f, 0.0f, 0.0f);
Hu3DModelScaleSet(var_r30, 1.0f, 1.0f, 1.0f);
Hu3DModelLayerSet(var_r30, 3);
Hu3DParticleColSet(var_r30, 0xFF, 0xFF, 0xFF);
Hu3DParticleScaleSet(var_r30, 0.0f);
Hu3DParticleHookSet(var_r30, fn_1_545C);
var_r24 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_EFFECT, 2), MEMORY_DEFAULT_NUM));
var_r30 = Hu3DParticleCreate(var_r24, 50);
Hu3DModelPosSet(var_r30, 0.0f, 0.0f, 0.0f);
Hu3DModelScaleSet(var_r30, 1.0f, 1.0f, 1.0f);
Hu3DModelLayerSet(var_r30, 3);
Hu3DParticleColSet(var_r30, 0xFF, 0xFF, 0xFF);
Hu3DParticleScaleSet(var_r30, 0.0f);
Hu3DParticleHookSet(var_r30, fn_1_594C);
var_r24 = HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_EFFECT, 2), MEMORY_DEFAULT_NUM));
var_r30 = Hu3DParticleCreate(var_r24, 50);
Hu3DModelPosSet(var_r30, 0.0f, 0.0f, 0.0f);
Hu3DModelScaleSet(var_r30, 1.0f, 1.0f, 1.0f);
Hu3DModelLayerSet(var_r30, 3);
Hu3DParticleColSet(var_r30, 0xFF, 0xFF, 0xFF);
Hu3DParticleScaleSet(var_r30, 0.0f);
Hu3DParticleHookSet(var_r30, fn_1_5DE4);
HuDataDirClose(DATADIR_EFFECT);
for (i = 0; i < 10; i++) {
temp_r29 = &lbl_1_bss_70[i];
temp_r29->unk30 = 50.0f;
do {
temp_f31 = 1380.0f * frandf() - 690.0f;
temp_f30 = 1380.0f * frandf() - 690.0f;
} while (fn_1_1880(temp_f31, temp_f30, 50.0f, i, -1) != 0);
temp_r29->unk24 = temp_f31;
temp_r29->unk14.x = temp_f31;
temp_r29->unk14.y = 0.0f;
temp_r29->unk28 = temp_f30;
temp_r29->unk14.z = temp_f30;
}
for (i = 0; i < 10; i++) {
temp_r29 = &lbl_1_bss_70[i];
if (i == 0) {
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_M462, 12), MEMORY_DEFAULT_NUM, HEAP_DATA);
var_r30 = Hu3DModelCreate(var_r27);
var_r23 = var_r30;
}
else {
var_r30 = Hu3DModelLink(var_r23);
}
temp_r29->unk00 = var_r30;
temp_r29->unk0C = i;
temp_r29->unk30 = 50.0f;
temp_r29->unk10 = 0;
Hu3DModelLayerSet(var_r30, 1);
Hu3DModelShadowSet(var_r30);
Hu3DModelPosSet(var_r30, temp_r29->unk14.x, temp_r29->unk14.y, temp_r29->unk14.z);
temp_r29->unk20 = 0.0f;
temp_r29->unk34 = 6.75f * lbl_1_data_FC[0];
for (j = 0; j < 3; j++) {
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_M462, 13 + j), MEMORY_DEFAULT_NUM, HEAP_DATA);
temp_r29->unk04[j] = Hu3DJointMotion(var_r30, var_r27);
}
Hu3DMotionSet(var_r30, temp_r29->unk04[1]);
Hu3DModelAttrSet(var_r30, HU3D_MOTATTR_LOOP);
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_M462, 11), MEMORY_DEFAULT_NUM, HEAP_DATA);
var_r30 = Hu3DModelCreate(var_r27);
sp8 = var_r30;
temp_r29->unk02 = var_r30;
Hu3DModelAttrSet(var_r30, HU3D_ATTR_DISPOFF);
Hu3DModelLayerSet(var_r30, 3);
var_r25 = HuPrcChildCreate(fn_1_4BC4, 0x1000, 0x3000, 0, HuPrcCurrentGet());
var_r25->user_data = temp_r29;
}
for (i = 0; i < 2; i++) {
var_r30 = Hu3DModelLink(var_r23);
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_M462, 16), MEMORY_DEFAULT_NUM, HEAP_DATA);
Hu3DMotionSet(var_r30, Hu3DJointMotion(var_r30, var_r27));
Hu3DModelAttrSet(var_r30, HU3D_MOTATTR_LOOP);
Hu3DModelShadowSet(var_r30);
Hu3DModelPosSet(var_r30, lbl_1_data_90[i].x, lbl_1_data_90[i].y, lbl_1_data_90[i].z);
if (i != 0) {
Hu3DMotionTimeSet(var_r30, Hu3DMotionMaxTimeGet(var_r30) / 2.0f);
}
}
var_r30 = Hu3DModelLink(var_r23);
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_M462, 19), MEMORY_DEFAULT_NUM, HEAP_DATA);
Hu3DMotionSet(var_r30, Hu3DJointMotion(var_r30, var_r27));
Hu3DModelAttrSet(var_r30, HU3D_MOTATTR_LOOP);
Hu3DModelShadowSet(var_r30);
Hu3DModelPosSet(var_r30, lbl_1_data_90[3].x, lbl_1_data_90[3].y, lbl_1_data_90[3].z);
Hu3DMotionSpeedSet(var_r30, 0.7f);
temp_r29 = &lbl_1_bss_28;
var_r30 = Hu3DModelLink(var_r23);
temp_r29->unk00 = var_r30;
for (j = 0; j < 2; j++) {
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_M462, 17 + j), MEMORY_DEFAULT_NUM, HEAP_DATA);
temp_r29->unk04[j] = Hu3DJointMotion(var_r30, var_r27);
}
Hu3DMotionSet(var_r30, temp_r29->unk04[0]);
Hu3DModelAttrSet(var_r30, HU3D_MOTATTR_LOOP);
Hu3DModelShadowSet(var_r30);
temp_r29->unk14.x = lbl_1_data_90[2].x;
temp_r29->unk14.y = lbl_1_data_90[2].y;
temp_r29->unk14.z = lbl_1_data_90[2].z;
Hu3DModelPosSet(var_r30, temp_r29->unk14.x, temp_r29->unk14.y, temp_r29->unk14.z);
var_r25 = HuPrcChildCreate(fn_1_44D8, 0x1000, 0x2000, 0, HuPrcCurrentGet());
var_r25->user_data = temp_r29;
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_MGCONST, 44), MEMORY_DEFAULT_NUM, HEAP_DATA);
spC[0] = HuSprAnimRead(var_r27);
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_MGCONST, 55), MEMORY_DEFAULT_NUM, HEAP_DATA);
spC[1] = HuSprAnimRead(var_r27);
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_MGCONST, 48), MEMORY_DEFAULT_NUM, HEAP_DATA);
spC[2] = HuSprAnimRead(var_r27);
var_r27 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_MGCONST, 49), MEMORY_DEFAULT_NUM, HEAP_DATA);
spC[3] = HuSprAnimRead(var_r27);
lbl_1_bss_3DC = HuSprGrpCreate(6);
var_r30 = HuSprCreate(spC[0], 0x4000, 0);
HuSprGrpMemberSet(lbl_1_bss_3DC, 0, var_r30);
HuSprPosSet(lbl_1_bss_3DC, 0, 0.0f, 0.0f);
HuSprTPLvlSet(lbl_1_bss_3DC, 0, 0.5f);
HuSprColorSet(lbl_1_bss_3DC, 0, 0, 0, 0);
var_r30 = HuSprCreate(spC[1], 0x4000, 0);
HuSprGrpMemberSet(lbl_1_bss_3DC, 1, var_r30);
HuSprPosSet(lbl_1_bss_3DC, 1, -19.0f, -9.0f);
var_r30 = HuSprCreate(spC[2], 0x4000, 0);
HuSprGrpMemberSet(lbl_1_bss_3DC, 2, var_r30);
HuSprPosSet(lbl_1_bss_3DC, 2, 20.0f, -8.0f);
var_r30 = HuSprCreate(spC[2], 0x4000, 0);
HuSprGrpMemberSet(lbl_1_bss_3DC, 3, var_r30);
HuSprPosSet(lbl_1_bss_3DC, 3, 2.0f, -8.0f);
var_r30 = HuSprCreate(spC[3], 0x4000, 0);
HuSprGrpMemberSet(lbl_1_bss_3DC, 4, var_r30);
HuSprPosSet(lbl_1_bss_3DC, 4, 20.0f, 8.0f);
var_r30 = HuSprCreate(spC[3], 0x4000, 0);
HuSprGrpMemberSet(lbl_1_bss_3DC, 5, var_r30);
HuSprPosSet(lbl_1_bss_3DC, 5, 2.0f, 8.0f);
HuSprGrpPosSet(lbl_1_bss_3DC, 511.0f, 61.0f);
fn_1_17A0(lbl_1_bss_3D8, 0);
fn_1_17A0(GWMGRecordGet(14), 1);
fn_1_174C();
HuPrcChildCreate(fn_1_7D40, 0x1000, 0x1000, 0, HuPrcCurrentGet());
}
float fn_1_14B4(float arg0)
{
while (arg0 >= 360.0f || arg0 < 0.0f) {
if (arg0 >= 360.0f) {
arg0 -= 360.0f;
}
if (arg0 < 0.0f) {
arg0 += 360.0f;
}
}
return arg0;
}
float fn_1_1534(float arg0, float arg1)
{
float var_f31;
if (arg0 > 750.0f - arg1) {
var_f31 = 750.0f;
}
else if (arg0 < -(750.0f - arg1)) {
var_f31 = 750.0f;
}
else {
var_f31 = 750.0f;
}
return var_f31;
}
float fn_1_15B4(float arg0, float arg1)
{
return fn_1_1534(arg0, arg1);
}
void fn_1_1634(void)
{
float var_f31;
float temp_f30;
s32 i;
var_f31 = 0.0f;
while (TRUE) {
var_f31 += 16.0f;
temp_f30 = 1.0 + 0.2f * sind(var_f31);
for (i = 0; i < 3; i++) {
HuSprScaleSet(lbl_1_bss_3DC, i + 1, temp_f30, temp_f30);
}
HuPrcVSleep();
}
}
void fn_1_16F8(void)
{
s32 i;
for (i = 0; i < 6; i++) {
HuSprAttrReset(lbl_1_bss_3DC, i, HUSPR_ATTR_DISPOFF);
}
}
void fn_1_174C(void)
{
s32 i;
for (i = 0; i < 6; i++) {
HuSprAttrSet(lbl_1_bss_3DC, i, HUSPR_ATTR_DISPOFF);
}
}
void fn_1_17A0(s32 arg0, s32 arg1)
{
s32 var_r31;
if (arg1 != 0) {
var_r31 = 2;
}
else {
var_r31 = 4;
}
HuSprBankSet(lbl_1_bss_3DC, var_r31, arg0 % 10);
HuSprBankSet(lbl_1_bss_3DC, var_r31 + 1, arg0 / 10);
HuSprAttrReset(lbl_1_bss_3DC, var_r31 + 1, HUSPR_ATTR_DISPOFF);
}
s32 fn_1_1880(float arg0, float arg1, float arg2, s32 arg3, s32 arg4)
{
Vec sp34;
Vec sp28;
Vec sp1C;
s32 i;
StructBss70 *temp_r30;
StructBss340 *var_r29;
if (arg3 > 10) {
arg3 = 10;
}
HuSetVecF(&sp34, arg0, 0.0, arg1);
for (i = 0; i < arg3; i++) {
if (arg4 == i) {
continue;
}
temp_r30 = &lbl_1_bss_70[i];
HuSetVecF(&sp28, temp_r30->unk14.x, 0.0, temp_r30->unk14.z);
HuSubVecF(&sp1C, &sp34, &sp28);
if (VECMagXZ(&sp1C) < temp_r30->unk30 + arg2) {
break;
}
}
if (i < arg3) {
return 1;
}
var_r29 = &lbl_1_bss_340[0];
HuSetVecF(&sp28, var_r29->unk4C.x, 0.0, var_r29->unk4C.z);
HuSubVecF(&sp1C, &sp34, &sp28);
if (VECMagXZ(&sp1C) < var_r29->unk84 + arg2) {
return 1;
}
return 0;
}
s32 fn_1_1BD4(StructBss70 *arg0)
{
float var_f31;
float var_f30;
s32 var_r31;
var_r31 = 0;
var_f31 = fn_1_1534(arg0->unk14.z, arg0->unk30);
var_f30 = fn_1_1534(arg0->unk14.x, arg0->unk30);
if (arg0->unk14.x > var_f31 - arg0->unk30) {
var_r31 = 1;
arg0->unk14.x = var_f31 - arg0->unk30;
}
if (arg0->unk14.x < -(var_f31 - arg0->unk30)) {
var_r31 = 1;
arg0->unk14.x = -(var_f31 - arg0->unk30);
}
if (arg0->unk14.z > var_f30 - arg0->unk30) {
var_r31 = 1;
arg0->unk14.z = var_f30 - arg0->unk30;
}
if (arg0->unk14.z < -(var_f30 - arg0->unk30)) {
var_r31 = 1;
arg0->unk14.z = -(var_f30 - arg0->unk30);
}
return var_r31;
}
void fn_1_1E10(StructBss70 *arg0)
{
Vec sp104;
Vec spF8;
Vec spEC;
float temp_f21;
float temp_f20;
float var_f19;
float var_f26;
float spC4;
float spC0;
float spBC;
float spB8;
float spB4;
float spB0;
float spAC;
float spA0;
StructBss70 *var_r30;
StructBss70 *temp_r28;
s32 temp_r19;
s32 var_r21;
s32 i;
if (fn_1_1880(arg0->unk14.x, arg0->unk14.z, 50.0f, 10, arg0->unk0C) == 0) {
return;
}
var_f19 = fn_1_14B4(atan2d(arg0->unk14.x - arg0->unk24, arg0->unk14.z - arg0->unk28));
temp_f21 = spB8 = arg0->unk24;
temp_f20 = spB4 = arg0->unk28;
spAC = 1.0f;
for (var_r21 = 1.0f + arg0->unk34 / spAC; var_r21 != 0; var_r21--) {
temp_f21 += spAC * sind(var_f19);
temp_f20 += spAC * cosd(var_f19);
HuSetVecF(&sp104, temp_f21, arg0->unk14.y, temp_f20);
for (i = 0; i < 10; i++) {
if (i == arg0->unk0C) {
continue;
}
var_r30 = &lbl_1_bss_70[i];
HuSetVecF(&spF8, var_r30->unk14.x, var_r30->unk14.y, var_r30->unk14.z);
HuSubVecF(&spEC, &sp104, &spF8);
if (VECMagXYZ(&spEC) < arg0->unk30 + var_r30->unk30) {
break;
}
}
if (i < 10) {
break;
}
if (fn_1_1BD4(arg0)) {
goto block_end;
}
spB8 = temp_f21;
spB4 = temp_f20;
}
var_f19 = fn_1_14B4(atan2d(arg0->unk14.x - arg0->unk24, arg0->unk14.z - arg0->unk28));
var_f26 = fn_1_14B4(atan2d(var_r30->unk14.x - arg0->unk24, var_r30->unk14.z - arg0->unk28));
spC0 = var_f19 - var_f26;
if (spC0 > 0.0f) {
spBC = -0.5f;
}
else {
spBC = 0.5f;
}
if (ABS_INV(var_f19 - var_f26) > 180.0f) {
spBC = -spBC;
}
var_f26 = fn_1_14B4(atan2d(arg0->unk24 - var_r30->unk14.x, arg0->unk28 - var_r30->unk14.z));
spB0 = 0.8f * arg0->unk34;
temp_r19 = var_r30->unk0C;
spC4 = arg0->unk30 + var_r30->unk30 + 1.0f;
while (TRUE) {
temp_f21 = var_r30->unk14.x + spC4 * sind(var_f26);
temp_f20 = var_r30->unk14.z + spC4 * cosd(var_f26);
HuSetVecF(&sp104, temp_f21, 0.0, temp_f20);
for (i = 0; i < 10; i++) {
if (i == arg0->unk0C || i == temp_r19) {
continue;
}
temp_r28 = &lbl_1_bss_70[i];
HuSetVecF(&spF8, temp_r28->unk14.x, 0.0, temp_r28->unk14.z);
HuSubVecF(&spEC, &sp104, &spF8);
if (VECMagXZ(&spEC) < arg0->unk30 + temp_r28->unk30) {
break;
}
}
if (i < 10 || fn_1_1BD4(arg0)) {
break;
}
spB8 = temp_f21;
spB4 = temp_f20;
HuSetVecF(&sp104, arg0->unk24, 0.0, arg0->unk28);
HuSetVecF(&spF8, temp_f21, 0.0, temp_f20);
HuSubVecF(&spEC, &sp104, &spF8);
if (VECMagXZ(&spEC) > spB0) {
break;
}
var_f26 += spBC;
}
block_end:
arg0->unk14.x = spB8;
arg0->unk14.z = spB4;
}
void fn_1_2FDC(StructBss70 *arg0)
{
Vec spF0;
Vec spE4;
Vec spD8;
s32 i;
StructBss340 *var_r30;
StructBss70 *temp_r25;
float var_f31;
s32 var_r23;
s32 var_r20;
s32 spAC[2];
var_r30 = &lbl_1_bss_340[0];
arg0->unk24 = arg0->unk14.x;
arg0->unk28 = arg0->unk14.z;
switch (arg0->unk38) {
case 0:
var_r20 = 0;
HuSetVecF(&spF0, var_r30->unk4C.x, 0.0, var_r30->unk4C.z);
HuSetVecF(&spE4, arg0->unk14.x, 0.0, arg0->unk14.z);
HuSubVecF(&spD8, &spF0, &spE4);
if (VECMagXZ(&spD8) < var_r30->unk84 + arg0->unk30 + 100.0f) {
var_r20 = 80;
}
if (frandmod(100) < var_r20) {
var_f31 = fn_1_14B4(atan2d(arg0->unk14.x - var_r30->unk4C.x, arg0->unk14.z - var_r30->unk4C.z));
var_f31 += 30.0f * frandf() - 60.0f;
var_f31 = fn_1_14B4(var_f31);
arg0->unk20 = var_f31;
}
else if (ABS_INV(arg0->unk14.x) > 550.0f) {
var_f31 = fn_1_14B4(180.0 + atan2d(arg0->unk14.x, 0.0));
var_f31 += 10.0f * frandf() - 20.0f;
var_f31 = fn_1_14B4(var_f31);
arg0->unk20 = var_f31;
}
else if (frandmod(3) != 0) {
for (i = 0, var_r23 = 0; i < 10; i++) {
if (i == arg0->unk0C) {
continue;
}
temp_r25 = &lbl_1_bss_70[i];
HuSetVecF(&spF0, temp_r25->unk14.x, 0.0, temp_r25->unk14.z);
HuSetVecF(&spE4, arg0->unk14.x, 0.0, arg0->unk14.z);
HuSubVecF(&spD8, &spF0, &spE4);
if (VECMagXZ(&spD8) < 150.0f) {
spAC[var_r23++] = arg0->unk0C;
if (var_r23 >= 2) {
break;
}
}
}
if (var_r23 == 1 && ABS_INV(var_r30->unk4C.x) < 650.0f) {
temp_r25 = &lbl_1_bss_70[spAC[0]];
var_f31 = fn_1_14B4(atan2d(arg0->unk40 - arg0->unk14.x, arg0->unk44 - arg0->unk14.z));
}
else {
var_f31 = fn_1_14B4(180.0 + atan2d(arg0->unk14.x, arg0->unk14.z));
var_f31 += 30.0f * frandf() - 60.0f;
var_f31 = fn_1_14B4(var_f31);
arg0->unk20 = var_f31;
}
}
else {
var_f31 = 360.0f * frandf();
arg0->unk20 = var_f31;
}
arg0->unk40 = arg0->unk14.x + 100.0 * sind(var_f31);
arg0->unk44 = arg0->unk14.z + 100.0 * cosd(var_f31);
arg0->unk38 = 10;
arg0->unk3C = 60;
break;
case 10:
if (arg0->unk3C-- == 0) {
arg0->unk38 = 0;
}
if (arg0->unk3C < 50) {
HuSetVecF(&spF0, var_r30->unk4C.x, 0.0, var_r30->unk4C.z);
HuSetVecF(&spE4, arg0->unk14.x, 0.0, arg0->unk14.z);
HuSubVecF(&spD8, &spF0, &spE4);
if (VECMagXZ(&spD8) < var_r30->unk84 + arg0->unk30 + 100.0f) {
arg0->unk38 = 0;
}
}
HuSetVecF(&spF0, arg0->unk40, 0.0, arg0->unk44);
HuSetVecF(&spE4, arg0->unk14.x, 0.0, arg0->unk14.z);
HuSubVecF(&spD8, &spF0, &spE4);
if (VECMagXZ(&spD8) > 10.0f) {
var_f31 = fn_1_14B4(atan2d(arg0->unk40 - arg0->unk14.x, arg0->unk44 - arg0->unk14.z));
arg0->unk14.x += arg0->unk34 * sind(var_f31);
arg0->unk14.z += arg0->unk34 * cosd(var_f31);
if (fn_1_1BD4(arg0)) { }
if (fn_1_1880(arg0->unk14.x, arg0->unk14.z, 50.0f, 10, arg0->unk0C) != 0) {
arg0->unk14.x = arg0->unk24;
arg0->unk14.z = arg0->unk28;
arg0->unk38 = 100;
arg0->unk3C = 0;
}
}
else {
arg0->unk38 = 100;
arg0->unk3C = 0;
}
break;
case 100:
if (arg0->unk3C == 0) {
arg0->unk38 = 0;
}
arg0->unk3C--;
break;
}
}
void fn_1_44D8(void)
{
StructBss70 *temp_r31;
float temp_f30;
float var_f31;
s32 i;
temp_r31 = HuPrcCurrentGet()->user_data;
temp_f30 = temp_r31->unk14.x;
while (TRUE) {
Hu3DMotionSet(temp_r31->unk00, temp_r31->unk04[0]);
for (i = 0, var_f31 = 0.0f; i < 60; i++) {
temp_r31->unk14.x = temp_f30 - 300.0 * sind(var_f31);
var_f31 += 1.5f;
Hu3DModelPosSet(temp_r31->unk00, temp_r31->unk14.x, temp_r31->unk14.y, temp_r31->unk14.z);
HuPrcVSleep();
}
HuPrcSleep(30);
Hu3DMotionSet(temp_r31->unk00, temp_r31->unk04[1]);
for (i = 0, var_f31 = 90.0f; i < 60; i++) {
temp_r31->unk14.x = temp_f30 - 300.0 * sind(var_f31);
var_f31 -= 1.5f;
Hu3DModelPosSet(temp_r31->unk00, temp_r31->unk14.x, temp_r31->unk14.y, temp_r31->unk14.z);
HuPrcVSleep();
}
HuPrcSleep(30);
}
}
void fn_1_4644(StructBss70 *arg0)
{
float temp_f26;
float temp_f25;
float var_f27;
float var_f24;
float temp_f23;
s32 i;
do {
temp_f26 = 5.0f;
if (frandmod(2) != 0) {
arg0->unk14.x = -700.0f + temp_f26;
arg0->unk20 = 90.0f;
var_f27 = -700.0f + temp_f26 - 500.0f;
var_f24 = 8.333333f;
}
else {
arg0->unk14.x = 700.0f - temp_f26;
arg0->unk20 = 270.0f;
var_f27 = 700.0f - temp_f26 + 500.0f;
var_f24 = -8.333333f;
}
arg0->unk14.y = 0.0f;
temp_f23 = 550.0f;
temp_f25 = temp_f23 * frandf() * 2.0f - temp_f23;
arg0->unk14.z = temp_f25;
arg0->unk24 = arg0->unk14.x;
arg0->unk28 = arg0->unk14.z;
} while (fn_1_1880(arg0->unk14.x, arg0->unk14.z, 50.0f, 10, arg0->unk0C) != 0);
Hu3DMotionSet(arg0->unk00, arg0->unk04[2]);
Hu3DModelRotSet(arg0->unk00, 0.0f, arg0->unk20, 0.0f);
for (i = 0; i < 60; i++) {
var_f27 += var_f24;
Hu3DModelPosSet(arg0->unk00, var_f27, 0.0f, temp_f25);
if (lbl_1_bss_3E4 >= 4) {
break;
}
HuPrcVSleep();
}
if (lbl_1_bss_3E4 >= 4) {
arg0->unk14.x = var_f27;
arg0->unk14.z = temp_f25;
}
Hu3DModelPosSet(arg0->unk00, arg0->unk14.x, 0.0f, arg0->unk14.z);
}
void fn_1_4BC4(void)
{
s32 spC;
float sp8;
float temp_f23;
float var_f27;
float var_f28;
float var_f30;
float var_f29;
StructBss70 *temp_r31;
StructBss340 *var_r28;
StructBss340 *var_r30;
s32 temp_r27;
s32 temp_r24;
s32 var_r26;
s32 var_r25;
s32 i;
temp_r31 = HuPrcCurrentGet()->user_data;
temp_r31->unk10 = 0;
loop_1:
temp_r27 = lbl_1_bss_3E0 / 60;
var_r25 = 0;
if (temp_r27 > 10) {
var_r25 = 1;
}
if (temp_r27 > 20) {
var_r25 = 2;
}
temp_r27 = frandmod(100);
for (i = 0; i < 5; i++) {
if (lbl_1_data_C0[var_r25][i] > temp_r27) {
break;
}
}
if (i > 4) {
while (TRUE)
;
}
temp_r31->unk34 = 6.75f * lbl_1_data_FC[i];
temp_r31->unk38 = 0;
while (TRUE) {
switch (temp_r31->unk10) {
case 2:
Hu3DMotionSet(temp_r31->unk00, temp_r31->unk04[1]);
fn_1_4644(temp_r31);
temp_r31->unk10 = 0;
if (FALSE) {
default:
fn_1_2FDC(temp_r31);
}
Hu3DModelPosSet(temp_r31->unk00, temp_r31->unk14.x, temp_r31->unk14.y, temp_r31->unk14.z);
Hu3DModelRotSet(temp_r31->unk00, 0.0f, temp_r31->unk20, 0.0f);
if (lbl_1_bss_3E4 < 4) {
HuPrcVSleep();
break;
}
Hu3DMotionSet(temp_r31->unk00, temp_r31->unk04[0]);
HuPrcSleep(60);
var_r28 = &lbl_1_bss_340[0];
if (ABS_INV(var_r28->unk4C.z - temp_r31->unk14.z) > 250.0f) {
if (temp_r31->unk14.x > 0.0f) {
var_f30 = 10.0f;
}
else {
var_f30 = -10.0f;
}
}
else {
if (var_r28->unk4C.x > temp_r31->unk14.x) {
var_f30 = -10.0f;
}
else {
var_f30 = 10.0f;
}
}
if (var_f30 > 0.0f) {
Hu3DModelRotSet(temp_r31->unk00, 0.0f, 90.0f, 0.0f);
}
else {
Hu3DModelRotSet(temp_r31->unk00, 0.0f, 270.0f, 0.0f);
}
Hu3DMotionSet(temp_r31->unk00, temp_r31->unk04[1]);
while (ABS_INV(temp_r31->unk14.x) < 1500.0f) {
temp_r31->unk14.x += var_f30;
Hu3DModelPosSet(temp_r31->unk00, temp_r31->unk14.x, temp_r31->unk14.y, temp_r31->unk14.z);
HuPrcVSleep();
}
while (TRUE) {
HuPrcVSleep();
}
break;
case 3:
lbl_1_bss_3D8++;
if (lbl_1_bss_3D8 > 99) {
lbl_1_bss_3D8 = 99;
}
temp_r24 = lbl_1_bss_3D8;
var_r26 = 4;
HuSprBankSet(lbl_1_bss_3DC, var_r26, temp_r24 % 10);
HuSprBankSet(lbl_1_bss_3DC, var_r26 + 1, temp_r24 / 10);
HuSprAttrReset(lbl_1_bss_3DC, var_r26 + 1, HUSPR_ATTR_DISPOFF);
omVibrate(0, 12, 6, 6);
HuAudFXPlay(0x45);
HuAudFXPlay(0x5EE);
var_r30 = &lbl_1_bss_340[0];
temp_r31->unk2C = fn_1_14B4(atan2d(temp_r31->unk14.x - var_r30->unk4C.x, temp_r31->unk14.z - var_r30->unk4C.z));
Hu3DMotionTimeSet(temp_r31->unk02, 0.0f);
Hu3DModelAttrReset(temp_r31->unk02, HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(temp_r31->unk02, var_r30->unk4C.x + var_r30->unk84 * sind(temp_r31->unk2C), temp_r31->unk14.y + 50.0f,
var_r30->unk4C.z + var_r30->unk84 * cosd(temp_r31->unk2C));
i = 0;
var_f29 = temp_r31->unk14.x;
var_f28 = temp_r31->unk14.z;
while (TRUE) {
var_f29 += 30.0 * sind(var_r30->unk94);
var_f28 += 30.0 * cosd(var_r30->unk94);
if (ABS_INV(var_f29) > 1500.0f || var_f28 > 1300.0f || var_f28 < -2000.0f) {
break;
}
i++;
}
sp8 = temp_r31->unk14.y;
var_f27 = 0.0f;
temp_f23 = 180.0f / i;
spC = 0;
for (; i != 0; i--) {
temp_r31->unk14.x += 30.0 * sind(temp_r31->unk2C);
temp_r31->unk14.y = 400.0 * sind(var_f27);
temp_r31->unk14.z += 30.0 * cosd(temp_r31->unk2C);
var_f27 += temp_f23;
Hu3DModelPosSet(temp_r31->unk00, temp_r31->unk14.x, temp_r31->unk14.y, temp_r31->unk14.z);
HuPrcVSleep();
}
Hu3DModelPosSet(temp_r31->unk00, temp_r31->unk14.x, -1000.0f, temp_r31->unk14.z);
temp_r31->unk10 = 2;
Hu3DModelAttrSet(temp_r31->unk02, HU3D_ATTR_DISPOFF);
goto loop_1;
}
}
}
void fn_1_545C(ModelData *model, ParticleData *particle, Mtx matrix)
{
HsfanimStruct01 *var_r31;
StructBss340 *temp_r28;
float var_f30;
float var_f31;
float temp_f29;
s32 var_r27;
s16 i;
s16 j;
s16 k;
if (particle->unk_34 == 0) {
var_r31 = particle->unk_48;
for (k = 0; k < particle->unk_30; k++, var_r31++) {
var_r31->unk14.x = var_r31->unk2C = 0.0f;
}
}
var_r31 = particle->unk_48;
for (i = 0; i < 1; i++) {
temp_r28 = &lbl_1_bss_340[i];
if (!(temp_r28->unk30 & 1)) {
continue;
}
for (j = 0, var_f30 = 0.0f; j < 16; j++, var_f30 += 22.5f) {
for (k = 0; k < particle->unk_30; k++, var_r31++) {
if (var_r31->unk14.x == 0.0f) {
break;
}
}
if (k == particle->unk_30) {
break;
}
var_f31 = var_f30;
temp_f29 = 125.0f + 70.0f * frandf();
var_r31->unk34.x = temp_r28->unk6C + temp_f29 * sind(var_f31);
var_r31->unk34.y = temp_r28->unk70 + 50.0f * frandf();
var_r31->unk34.z = temp_r28->unk74 + temp_f29 * cosd(var_f31);
var_r31->unk08.x = 5.0 * sind(var_f31);
var_r31->unk08.y = 9.0f + 2.0f * frandf();
var_r31->unk08.z = 5.0 * cosd(var_f31);
var_r31->unk14.x = 30.0f;
var_r31->unk2C = 80.0f + 20.0f * frandf();
var_r31->unk14.y = 15.0f;
var_r31->unk40.a = 0xC8;
var_r31->unk14.z = 17.0f;
}
temp_r28->unk30 &= ~1;
}
var_r31 = particle->unk_48;
for (k = 0; k < particle->unk_30; k++, var_r31++) {
if (var_r31->unk14.x == 0.0f) {
continue;
}
VECAdd(&var_r31->unk08, &var_r31->unk34, &var_r31->unk34);
var_r31->unk08.x *= 0.95f;
var_r31->unk08.z *= 0.95f;
if (var_r31->unk08.y > 0.1f) {
var_r31->unk08.y -= 0.2f;
}
if (var_r31->unk08.y < 0.0f) {
var_r31->unk08.y = 0.0f;
}
var_r31->unk2C += var_r31->unk14.y;
if (var_r31->unk14.y > 2.0f) {
var_r31->unk14.y -= 1.5f;
}
var_r27 = var_r31->unk40.a;
var_r27 -= var_r31->unk14.z;
if (var_r31->unk14.z > 3.0f) {
var_r31->unk14.z -= 1.0f;
}
if (var_r27 < 0) {
var_r27 = 0;
var_r31->unk14.x = 0.0f;
}
var_r31->unk40.a = var_r27;
if (var_r31->unk14.x == 0.0f) {
var_r31->unk2C = 0.0f;
}
}
}
void fn_1_594C(ModelData *model, ParticleData *particle, Mtx matrix)
{
HsfanimStruct01 *var_r31;
StructBss340 *temp_r28;
float temp_f31;
float temp_f30;
s32 var_r27;
s16 i;
s16 j;
s16 k;
if (particle->unk_34 == 0) {
var_r31 = particle->unk_48;
for (k = 0; k < particle->unk_30; k++, var_r31++) {
var_r31->unk14.x = var_r31->unk2C = 0.0f;
var_r31->unk20 = -1.0f;
}
}
var_r31 = particle->unk_48;
for (i = 0; i < 1; i++) {
temp_r28 = &lbl_1_bss_340[i];
if (!(temp_r28->unk30 & 2)) {
continue;
}
for (j = 0; j < 10; j++) {
for (k = 0; k < particle->unk_30; k++, var_r31++) {
if (var_r31->unk14.x == 0.0f) {
break;
}
}
if (k == particle->unk_30) {
break;
}
temp_f31 = 400.0f * frandf() - 200.0f;
temp_f30 = 400.0f * frandf() - 200.0f;
var_r31->unk34.x = temp_r28->unk6C + temp_f31;
var_r31->unk34.y = temp_r28->unk70 + 50.0f;
var_r31->unk34.z = temp_r28->unk74 + temp_f30;
var_r31->unk08.x = 0.0f;
var_r31->unk08.y = 7.0f;
var_r31->unk08.z = 0.0f;
var_r31->unk20 = frandmod(10);
var_r31->unk24 = 0.0f;
var_r31->unk14.x = 100.0f;
var_r31->unk2C = 0.0f;
var_r31->unk14.y = 7.0f;
var_r31->unk40.a = 0xFF;
var_r31->unk14.z = 10.0f;
}
temp_r28->unk30 &= ~2;
}
var_r31 = particle->unk_48;
for (k = 0; k < particle->unk_30; k++, var_r31++) {
if (var_r31->unk20 > 0.0f) {
var_r31->unk20 -= 1.0f;
}
if (var_r31->unk20 == 0.0f) {
var_r31->unk24 = 1.0f;
var_r31->unk2C = 100.0f + 100.0f * frandf();
var_r31->unk20 = -1.0f;
}
if (var_r31->unk14.x == 0.0f || var_r31->unk24 == 0.0f) {
continue;
}
VECAdd(&var_r31->unk08, &var_r31->unk34, &var_r31->unk34);
if (var_r31->unk08.y > 1.0f) {
var_r31->unk08.y -= 0.3f;
}
var_r31->unk2C += var_r31->unk14.y;
if (var_r31->unk14.y > 2.0f) {
var_r31->unk14.y -= 0.4f;
}
var_r27 = var_r31->unk40.a;
var_r27 -= var_r31->unk14.z;
if (var_r31->unk14.z > 3.0f) {
var_r31->unk14.z -= 1.0f;
}
if (var_r27 < 0) {
var_r27 = 0;
var_r31->unk14.x = 0.0f;
}
var_r31->unk40.a = var_r27;
if (var_r31->unk14.x == 0.0f) {
var_r31->unk2C = 0.0f;
}
}
}
void fn_1_5DE4(ModelData *model, ParticleData *particle, Mtx matrix)
{
HsfanimStruct01 *var_r31;
StructBss340 *temp_r28;
float temp_f31;
float temp_f30;
s32 var_r27;
s16 i;
s16 j;
s16 k;
if (particle->unk_34 == 0) {
var_r31 = particle->unk_48;
for (k = 0; k < particle->unk_30; k++, var_r31++) {
var_r31->unk14.x = var_r31->unk2C = 0.0f;
var_r31->unk20 = -1.0f;
}
}
var_r31 = particle->unk_48;
for (i = 0; i < 1; i++) {
temp_r28 = &lbl_1_bss_340[i];
if (!(temp_r28->unk30 & 4)) {
continue;
}
for (j = 0; j < 10; j++) {
for (k = 0; k < particle->unk_30; k++, var_r31++) {
if (var_r31->unk14.x == 0.0f) {
break;
}
}
if (k == particle->unk_30) {
break;
}
temp_f31 = 400.0f * frandf() - 200.0f;
temp_f30 = 400.0f * frandf() - 200.0f;
var_r31->unk34.x = temp_r28->unk6C + temp_f31;
var_r31->unk34.y = temp_r28->unk70 + 50.0f;
var_r31->unk34.z = temp_r28->unk74 + temp_f30;
var_r31->unk08.x = 0.0f;
var_r31->unk08.y = 7.0f;
var_r31->unk08.z = 0.0f;
var_r31->unk20 = frandmod(10);
var_r31->unk24 = 0.0f;
var_r31->unk14.x = 100.0f;
var_r31->unk2C = 0.0f;
var_r31->unk14.y = 7.0f;
var_r31->unk40.a = 0xFF;
var_r31->unk14.z = 10.0f;
}
temp_r28->unk30 &= ~4;
}
var_r31 = particle->unk_48;
for (k = 0; k < particle->unk_30; k++, var_r31++) {
if (var_r31->unk20 > 0.0f) {
var_r31->unk20 -= 1.0f;
}
if (var_r31->unk20 == 0.0f) {
var_r31->unk24 = 1.0f;
var_r31->unk2C = 100.0f + 100.0f * frandf();
var_r31->unk20 = -1.0f;
}
if (var_r31->unk14.x == 0.0f || var_r31->unk24 == 0.0f) {
continue;
}
VECAdd(&var_r31->unk08, &var_r31->unk34, &var_r31->unk34);
if (var_r31->unk08.y > 1.0f) {
var_r31->unk08.y -= 0.3f;
}
var_r31->unk2C += var_r31->unk14.y;
if (var_r31->unk14.y > 2.0f) {
var_r31->unk14.y -= 0.4f;
}
var_r27 = var_r31->unk40.a;
var_r27 -= var_r31->unk14.z;
if (var_r31->unk14.z > 3.0f) {
var_r31->unk14.z -= 1.0f;
}
if (var_r27 < 0) {
var_r27 = 0;
var_r31->unk14.x = 0.0f;
}
var_r31->unk40.a = var_r27;
if (var_r31->unk14.x == 0.0f) {
var_r31->unk2C = 0.0f;
}
}
}
s8 fn_1_627C(s32 arg0, s32 arg1)
{
StructBss340 *temp_r31;
s8 var_r30;
temp_r31 = &lbl_1_bss_340[arg0];
(arg1 != 0) ? (var_r30 = HuPadStkY[temp_r31->unk28]) : (var_r30 = HuPadStkX[temp_r31->unk28]);
return var_r30;
}
u8 fn_1_62F0(s32 arg0, s32 arg1)
{
StructBss340 *temp_r31;
s8 var_r30;
temp_r31 = &lbl_1_bss_340[arg0];
(arg1 != 0) ? (var_r30 = HuPadTrigR[temp_r31->unk28]) : (var_r30 = HuPadTrigL[temp_r31->unk28]);
return var_r30;
}
u16 fn_1_636C(s32 arg0)
{
StructBss340 *temp_r31;
u16 var_r30;
temp_r31 = &lbl_1_bss_340[arg0];
var_r30 = HuPadBtnDown[temp_r31->unk28];
return var_r30;
}
u16 fn_1_63B4(s32 arg0)
{
StructBss340 *temp_r31;
u16 var_r30;
temp_r31 = &lbl_1_bss_340[arg0];
var_r30 = HuPadBtn[temp_r31->unk28];
return var_r30;
}
s32 fn_1_63FC(StructBss340 *arg0)
{
Vec sp24;
Vec sp18;
Vec spC;
StructBss70 *temp_r31;
s32 var_r28;
s32 i;
var_r28 = -1;
HuSetVecF(&sp24, arg0->unk4C.x, arg0->unk4C.y, arg0->unk4C.z);
for (i = 0; i < 10; i++) {
temp_r31 = &lbl_1_bss_70[i];
HuSetVecF(&sp18, temp_r31->unk14.x, temp_r31->unk14.y, temp_r31->unk14.z);
HuSubVecF(&spC, &sp24, &sp18);
if (VECMagXYZ(&spC) < arg0->unk84 + temp_r31->unk30) {
temp_r31->unk10 = 3;
var_r28 = i;
}
}
return var_r28;
}
s32 fn_1_65D0(StructBss340 *arg0)
{
float var_f31;
float var_f30;
s32 sp8;
var_f31 = fn_1_1534(arg0->unk4C.z, arg0->unk84);
var_f30 = fn_1_1534(arg0->unk4C.x, arg0->unk84);
if (arg0->unk4C.x > var_f31 - arg0->unk84) {
arg0->unk4C.x = var_f31 - arg0->unk84;
}
if (arg0->unk4C.x < -(var_f31 - arg0->unk84)) {
arg0->unk4C.x = -(var_f31 - arg0->unk84);
}
if (arg0->unk4C.z > var_f30 - arg0->unk84) {
arg0->unk4C.z = var_f30 - arg0->unk84;
}
if (arg0->unk4C.z < -(var_f30 - arg0->unk84)) {
arg0->unk4C.z = -(var_f30 - arg0->unk84);
}
return sp8;
}
float fn_1_67F0(float arg0, float arg1, float arg2)
{
float var_f30;
float var_f31;
var_f31 = fmod(arg1 - arg0, 360.0);
if (0.0f > var_f31) {
var_f31 += 360.0f;
}
if (180.0f < var_f31) {
var_f31 -= 360.0f;
}
var_f30 = fmod(arg0 + var_f31 * arg2, 360.0);
if (0.0f > var_f30) {
var_f30 += 360.0f;
}
return var_f30;
}
void fn_1_68F4(void)
{
StructBss340 *temp_r31;
s32 i;
temp_r31 = HuPrcCurrentGet()->user_data;
for (i = 0; i < 20; i++) {
temp_r31->unk78.z -= 4.0f;
Hu3DModelPosSet(temp_r31->unk02, temp_r31->unk78.x, temp_r31->unk78.y, temp_r31->unk78.z);
HuPrcVSleep();
}
HuPrcKill(HuPrcCurrentGet());
while (TRUE) {
HuPrcVSleep();
}
}
s32 fn_1_6964(StructBss340 *arg0)
{
return (arg0->unk2C == 4 || arg0->unk2C == 5 || arg0->unk2C == 6);
}
void fn_1_69C0(void)
{
float var_f23;
float var_f27;
float var_f26;
StructBss340 *temp_r31;
s16 var_r29;
s32 var_r24;
s32 var_r23;
Process *var_r22;
s32 var_r26;
s32 var_r25;
s32 var_r28;
s32 spA4;
temp_r31 = HuPrcCurrentGet()->user_data;
temp_r31->unk2C = 0;
temp_r31->unk48 = 0;
temp_r31->unk30 = 0;
while (lbl_1_bss_3E4 == 0) {
HuPrcVSleep();
}
lbl_1_bss_3E4 = 2;
while (lbl_1_bss_3E4 == 2) {
HuPrcVSleep();
}
var_r29 = -1;
while (TRUE) {
temp_r31->unk58 = temp_r31->unk4C.x;
temp_r31->unk5C = temp_r31->unk4C.z;
if (temp_r31->unk16[4] != 0) {
break;
}
switch (temp_r31->unk2C) {
case 8:
if (temp_r31->unk3C != 0) {
temp_r31->unk3C--;
}
else {
Hu3DMotionShiftSet(temp_r31->unk00, temp_r31->unk06[0], 0.0f, 5.0f, HU3D_MOTATTR_LOOP);
temp_r31->unk2C = 0;
}
break;
case 4:
omVibrate(temp_r31->unk20, 12, 4, 2);
Hu3DMotionShiftSet(temp_r31->unk00, temp_r31->unk06[4], 0.0f, 5.0f, HU3D_MOTATTR_NONE);
temp_r31->unk3C = 90;
temp_r31->unk44 = 30;
temp_r31->unk2C = 5;
break;
case 5:
if (temp_r31->unk44-- == 0) {
temp_r31->unk6C = temp_r31->unk4C.x;
temp_r31->unk70 = temp_r31->unk4C.y;
temp_r31->unk74 = temp_r31->unk4C.z;
temp_r31->unk30 |= 1;
}
if (temp_r31->unk3C != 0) {
temp_r31->unk3C--;
}
else {
Hu3DMotionSet(temp_r31->unk00, temp_r31->unk06[5]);
Hu3DModelAttrReset(temp_r31->unk00, HU3D_MOTATTR_LOOP);
temp_r31->unk2C = 6;
}
break;
case 6:
if (Hu3DMotionEndCheck(temp_r31->unk00) == TRUE) {
Hu3DMotionSet(temp_r31->unk00, temp_r31->unk06[0]);
temp_r31->unk2C = 0;
}
break;
default:
if (fn_1_627C(temp_r31->unk20, 0) > 20) {
temp_r31->unk94 -= temp_r31->unk90;
if (temp_r31->unk94 < 0.0f) {
temp_r31->unk94 += 360.0f;
}
temp_r31->unk60.y = temp_r31->unk94;
}
if (fn_1_627C(temp_r31->unk20, 0) < -20) {
temp_r31->unk94 += temp_r31->unk90;
if (temp_r31->unk94 > 360.0f) {
temp_r31->unk94 -= 360.0f;
}
temp_r31->unk60.y = temp_r31->unk94;
}
if (fn_1_63B4(temp_r31->unk20) & PAD_BUTTON_A) {
temp_r31->unk4C.x += temp_r31->unk88 * sind(temp_r31->unk94);
temp_r31->unk4C.z += temp_r31->unk88 * cosd(temp_r31->unk94);
}
if (fn_1_63B4(temp_r31->unk20) & PAD_BUTTON_B) {
temp_r31->unk4C.x -= temp_r31->unk88 * sind(temp_r31->unk94);
temp_r31->unk4C.z -= temp_r31->unk88 * cosd(temp_r31->unk94);
}
if (fn_1_63B4(temp_r31->unk20) & (PAD_BUTTON_A | PAD_BUTTON_B)) {
if (temp_r31->unk34 != 1) {
if (temp_r31->unk2C != 2) {
temp_r31->unk2C = 2;
if (fn_1_63B4(temp_r31->unk20) & PAD_BUTTON_A) {
Hu3DMotionShiftSet(temp_r31->unk00, temp_r31->unk06[1], 0.0f, 8.0f, HU3D_MOTATTR_LOOP);
Hu3DMotionShiftSpeedSet(temp_r31->unk00, 2.0f);
}
else {
Hu3DMotionShiftSet(temp_r31->unk00, temp_r31->unk06[1], 0.0f, 8.0f, HU3D_MOTATTR_LOOP | HU3D_MOTATTR_REV);
Hu3DMotionShiftSpeedSet(temp_r31->unk00, 2.0f);
}
if (var_r29 != -1) {
HuAudFXStop(var_r29);
}
}
}
else {
if (temp_r31->unk2C != 3) {
temp_r31->unk2C = 3;
temp_r31->unk48 = 0;
if (fn_1_63B4(temp_r31->unk20) & PAD_BUTTON_A) {
Hu3DMotionShiftSet(temp_r31->unk00, temp_r31->unk06[2], 0.0f, 8.0f, HU3D_MOTATTR_LOOP);
Hu3DMotionShiftSpeedSet(temp_r31->unk00, 2.0f);
}
else {
Hu3DMotionShiftSet(temp_r31->unk00, temp_r31->unk06[2], 0.0f, 8.0f, HU3D_MOTATTR_LOOP | HU3D_MOTATTR_REV);
Hu3DMotionShiftSpeedSet(temp_r31->unk00, 2.0f);
}
if (var_r29 != -1) {
HuAudFXStop(var_r29);
}
}
}
if (temp_r31->unk34 != 1) {
var_r24 = 8;
var_r23 = 32;
}
else {
var_r24 = 7;
var_r23 = 22;
}
if (temp_r31->unk48 == var_r24) {
HuAudFXPlay(0x5E0);
}
if (temp_r31->unk48 == var_r23) {
HuAudFXPlay(0x5E0);
}
temp_r31->unk48++;
if (temp_r31->unk34 != 1) {
if (temp_r31->unk48 >= 50) {
temp_r31->unk48 -= 50;
}
}
else {
if (temp_r31->unk48 >= 30) {
temp_r31->unk48 -= 30;
}
}
}
else {
if (ABS_INV(fn_1_627C(temp_r31->unk20, 0)) <= 20) {
if (temp_r31->unk2C != 0) {
temp_r31->unk2C = 0;
Hu3DMotionShiftSet(temp_r31->unk00, temp_r31->unk06[0], 0.0f, 8.0f, HU3D_MOTATTR_LOOP);
if (var_r29 != -1) {
HuAudFXStop(var_r29);
}
}
}
else {
if (temp_r31->unk2C != 1) {
temp_r31->unk2C = 1;
Hu3DMotionShiftSet(temp_r31->unk00, temp_r31->unk06[3], 0.0f, 8.0f, HU3D_MOTATTR_LOOP);
Hu3DMotionShiftSpeedSet(temp_r31->unk00, 1.5f);
var_r29 = HuAudFXPlay(0x5EB);
}
}
}
if (fn_1_63FC(temp_r31) != -1) { }
if ((spA4 = fn_1_65D0(temp_r31)) != -1) { }
break;
}
Hu3DModelPosSet(temp_r31->unk00, temp_r31->unk4C.x, temp_r31->unk4C.y, temp_r31->unk4C.z);
Hu3DModelRotSet(temp_r31->unk00, temp_r31->unk60.x, temp_r31->unk60.y, temp_r31->unk60.z);
HuPrcVSleep();
}
if (var_r29 != -1) {
HuAudFXStop(var_r29);
}
if (lbl_1_bss_3D8 == 0) {
HuAudFXPlay(0x5EA);
Hu3DMotionShiftSet(temp_r31->unk00, temp_r31->unk06[0], 0.0f, 2.0f, HU3D_MOTATTR_LOOP);
HuPrcSleep(90);
Hu3DModelAttrReset(temp_r31->unk04, HU3D_ATTR_DISPOFF);
Hu3DModelAttrReset(temp_r31->unk04, HU3D_MOTATTR_PAUSE);
Hu3DModelPosSet(temp_r31->unk04, temp_r31->unk4C.x, temp_r31->unk4C.y, temp_r31->unk4C.z);
Hu3DMotionShiftSet(temp_r31->unk00, temp_r31->unk06[7], 0.0f, 5.0f, HU3D_MOTATTR_NONE);
HuAudFXPlay(0x5E3);
HuPrcSleep(15);
HuPrcSleep(30);
temp_r31->unk6C = temp_r31->unk4C.x;
temp_r31->unk70 = temp_r31->unk4C.y;
temp_r31->unk74 = temp_r31->unk4C.z;
temp_r31->unk30 |= 2;
while (!Hu3DMotionEndCheck(temp_r31->unk00)) {
HuPrcVSleep();
}
CharModelMotionShiftSet(lbl_1_data_0[GWPlayerCfg[temp_r31->unk20].character], temp_r31->unk16[3], 0.0f, 5.0f, HU3D_MOTATTR_LOOP);
Hu3DModelHookReset(temp_r31->unk00);
Hu3DModelShadowSet(temp_r31->unk02);
var_f27 = 50.0f;
Hu3DModelPosSet(temp_r31->unk02, temp_r31->unk4C.x, temp_r31->unk4C.y + var_f27, temp_r31->unk4C.z);
HuPrcSleep(60);
for (var_r26 = 0, var_r25 = 0; var_r26 < 90; var_r26++) {
if (var_r25 & 1) {
Hu3DModelAttrReset(temp_r31->unk00, HU3D_ATTR_DISPOFF);
Hu3DModelAttrReset(temp_r31->unk04, HU3D_ATTR_DISPOFF);
}
else {
Hu3DModelAttrSet(temp_r31->unk00, HU3D_ATTR_DISPOFF);
Hu3DModelAttrSet(temp_r31->unk04, HU3D_ATTR_DISPOFF);
}
var_r25++;
HuPrcVSleep();
}
Hu3DModelAttrSet(temp_r31->unk04, HU3D_ATTR_DISPOFF);
for (var_r28 = 0, var_f23 = 1.0f; var_r28 < 30; var_r28++) {
var_f23 -= 0.033333335f;
Hu3DModelTPLvlSet(temp_r31->unk00, var_f23);
if (var_f27 > 0.0f) {
var_f27 -= 5.0f;
Hu3DModelPosSet(temp_r31->unk02, temp_r31->unk4C.x, temp_r31->unk4C.y + var_f27, temp_r31->unk4C.z);
}
HuPrcVSleep();
}
Hu3DModelAttrSet(temp_r31->unk00, HU3D_ATTR_DISPOFF);
HuAudSStreamPlay(4);
HuPrcSleep(180);
}
else {
var_f26 = temp_r31->unk90;
Hu3DMotionShiftSet(temp_r31->unk00, temp_r31->unk06[3], 0.0f, 2.0f, HU3D_MOTATTR_LOOP);
if (fn_1_14B4(temp_r31->unk60.y) != 0.0f) {
var_r28 = (360.0f - fn_1_14B4(temp_r31->unk60.y)) / var_f26;
if (temp_r31->unk60.y < 180.0f) {
var_r28 = temp_r31->unk60.y / var_f26;
var_f26 = -var_f26;
}
for (; var_r28 != 0; var_r28--) {
temp_r31->unk60.y += var_f26;
Hu3DModelRotSet(temp_r31->unk00, temp_r31->unk60.x, temp_r31->unk60.y, temp_r31->unk60.z);
HuPrcVSleep();
}
Hu3DModelRotSet(temp_r31->unk00, temp_r31->unk60.x, 0.0f, temp_r31->unk60.z);
}
Hu3DMotionShiftSet(temp_r31->unk00, temp_r31->unk06[0], 0.0f, 2.0f, HU3D_MOTATTR_LOOP);
while (lbl_1_bss_3E4 < 5) {
HuPrcVSleep();
}
HuAudSStreamPlay(1);
var_r22 = HuPrcChildCreate(fn_1_68F4, 0x2000, 0x1000, 0, HuPrcCurrentGet());
var_r22->user_data = temp_r31;
HuAudPlayerVoicePlay(temp_r31->unk20, 0x122);
CharModelMotionShiftSet(lbl_1_data_0[GWPlayerCfg[temp_r31->unk20].character], temp_r31->unk16[2], 0.0f, 2.0f, HU3D_MOTATTR_NONE);
temp_r31->unk2C = 10;
HuPrcSleep(180);
}
lbl_1_bss_3E4 = 6;
while (TRUE) {
HuPrcVSleep();
}
}
void fn_1_7D3C(void) { }
void fn_1_7D40(void)
{
while (TRUE) {
if (omSysExitReq == 1) {
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
HuAudFadeOut(1000);
HuPrcSleep(60);
MGSeqKillAll();
omOvlReturnEx(1, 1);
while (TRUE) {
HuPrcVSleep();
}
}
HuPrcVSleep();
}
}
void fn_1_7DA0(void)
{
s16 temp_r31;
s16 var_r30;
s16 temp_r26;
s32 var_r24;
s32 i;
lbl_1_bss_3E4 = 0;
lbl_1_bss_3E4 = 1;
while (lbl_1_bss_3E4 == 1) {
HuPrcVSleep();
}
var_r24 = HuAudSeqPlay(0x46);
temp_r31 = MGSeqStartCreate();
while (MGSeqStatGet(temp_r31) != 0) {
HuPrcVSleep();
}
fn_1_16F8();
var_r30 = 1859;
temp_r26 = MGSeqTimerCreate(var_r30 / 60);
lbl_1_bss_3E4 = 3;
while (TRUE) {
if (var_r30 < 59) {
break;
}
MGSeqParamSet(temp_r26, 1, var_r30-- / 60);
lbl_1_bss_3E0++;
HuPrcVSleep();
}
for (i = 0; i < 1; i++) {
lbl_1_bss_340[i].unk1E = 1;
}
lbl_1_bss_3E4 = 4;
HuAudSeqFadeOut(var_r24, 6);
MGSeqParamSet(temp_r26, 2, -1);
temp_r31 = MGSeqFinishCreate();
while (MGSeqStatGet(temp_r31) != 0) {
HuPrcVSleep();
}
mgRecordExtra = lbl_1_bss_3D8;
if (GWMGRecordGet(14) < lbl_1_bss_3D8) {
GWMGRecordSet(14, lbl_1_bss_3D8);
temp_r31 = MGSeqRecordCreate(lbl_1_bss_3D8);
HuPrcChildCreate(fn_1_1634, 0x1000, 0x1000, 0, HuPrcCurrentGet());
fn_1_17A0(lbl_1_bss_3D8, 1);
while (MGSeqStatGet(temp_r31) != 0) {
HuPrcVSleep();
}
lbl_1_bss_3E4 = 5;
}
else {
lbl_1_bss_3E4 = 5;
}
while (lbl_1_bss_3E4 < 6) {
HuPrcVSleep();
}
HuPrcSleep(30);
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
HuPrcSleep(60);
HuAudFadeOut(1);
MGSeqKillAll();
omOvlReturnEx(1, 1);
while (TRUE) {
HuPrcVSleep();
}
}