marioparty4/src/REL/m448Dll/main.c
2024-08-09 23:24:10 -07:00

1928 lines
73 KiB
C
Executable file

#include "REL/executor.h"
#include "game/audio.h"
#include "game/chrman.h"
#include "game/data.h"
#include "game/esprite.h"
#include "game/flag.h"
#include "game/gamework_data.h"
#include "game/hsfanim.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/memory.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/window.h"
#include "game/wipe.h"
#include "dolphin.h"
#include "ext_math.h"
#include "rel_sqrt_consts.h"
typedef struct {
/* 0x00 */ s32 unk00;
/* 0x04 */ s32 unk04;
/* 0x08 */ s32 unk08;
/* 0x0C */ s32 unk0C;
/* 0x10 */ s32 unk10;
/* 0x14 */ char unk14[4];
/* 0x18 */ s32 unk18;
/* 0x1C */ s32 unk1C;
/* 0x20 */ s32 unk20;
/* 0x24 */ s32 unk24;
/* 0x28 */ s32 unk28;
/* 0x2C */ s32 unk2C;
/* 0x30 */ s32 unk30;
/* 0x34 */ s32 unk34;
/* 0x38 */ s32 unk38;
/* 0x3C */ float unk3C;
/* 0x40 */ float unk40;
/* 0x44 */ float unk44;
/* 0x48 */ float unk48;
} UnkM448Struct_00; // Size 0x4C
typedef struct {
/* 0x00 */ s32 unk00;
/* 0x04 */ s32 unk04;
/* 0x08 */ s32 unk08;
/* 0x0C */ s32 unk0C;
/* 0x10 */ float unk10;
/* 0x14 */ char unk14[4];
/* 0x18 */ s32 unk18;
/* 0x1C */ s32 unk1C;
/* 0x20 */ s32 unk20;
} UnkM448Struct_01; // Size 0x24
typedef struct {
/* 0x00 */ s32 unk00;
/* 0x04 */ float unk04[3];
} UnkM448Struct_02; // Size 0x10
void fn_1_A0(void);
void fn_1_38C(void);
void fn_1_478(void);
void fn_1_4FC(ModelData* model, Mtx matrix);
void fn_1_1338(omObjData* arg0);
void fn_1_4310(omObjData* arg0);
void fn_1_6DAC(void);
void fn_1_7148(omObjData* arg0);
void fn_1_7DC4(ModelData* model, ParticleData* particle, Mtx matrix);
void fn_1_81C0(omObjData* arg0);
void fn_1_8DD0(omObjData* arg0);
void fn_1_9508(omObjData* arg0);
void ObjectSetup(void);
void fn_1_9B00(omObjData* arg0);
UnkM448Struct_01 lbl_1_bss_16C[20];
UnkM448Struct_02 lbl_1_bss_9C[13];
omObjData* lbl_1_bss_98;
omObjData* lbl_1_bss_94;
omObjData* lbl_1_bss_8C[2];
omObjData* lbl_1_bss_88;
s32 lbl_1_bss_84;
s32 lbl_1_bss_80;
s32 lbl_1_bss_7C;
s32 lbl_1_bss_78;
s32 lbl_1_bss_74;
Process* lbl_1_bss_70;
s32 lbl_1_bss_6C;
s32 lbl_1_bss_68;
s32 lbl_1_bss_64;
s32 lbl_1_bss_60;
GXTexObj lbl_1_bss_40;
char lbl_1_bss_3C_pad[4];
float lbl_1_bss_38;
s32 lbl_1_bss_34;
char lbl_1_bss_30_pad[4];
void* lbl_1_bss_2C;
void* lbl_1_bss_28;
s32 lbl_1_bss_24;
s32 lbl_1_bss_20;
s32 lbl_1_bss_1C;
s32 lbl_1_bss_18;
s32 lbl_1_bss_14;
s32 lbl_1_bss_10;
char lbl_1_bss_8_pad[8];
s32 lbl_1_bss_4;
s32 lbl_1_bss_0;
s32 lbl_1_data_0[] = {
DATA_MAKE_NUM(DATADIR_MGCONST, 23),
DATA_MAKE_NUM(DATADIR_MGCONST, 22),
DATA_MAKE_NUM(DATADIR_MGCONST, 51),
DATA_MAKE_NUM(DATADIR_MGCONST, 51),
DATADIR_MGCONST,
DATA_MAKE_NUM(DATADIR_MGCONST, 23),
DATA_MAKE_NUM(DATADIR_MGCONST, 22),
DATA_MAKE_NUM(DATADIR_MGCONST, 51),
DATA_MAKE_NUM(DATADIR_MGCONST, 51),
DATADIR_MGCONST
};
s32 lbl_1_data_28[10] = { 0 };
s32 lbl_1_data_50[] = {
DATA_MAKE_NUM(DATADIR_MARIOMOT, 0),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 2),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 3),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 5),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 6),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 8),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 10),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 9),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 26),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 23),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 24)
};
s32 lbl_1_data_7C[] = {
DATA_MAKE_NUM(DATADIR_M448, 19),
DATA_MAKE_NUM(DATADIR_M448, 20),
DATA_MAKE_NUM(DATADIR_M448, 21),
DATA_MAKE_NUM(DATADIR_M448, 24),
DATA_MAKE_NUM(DATADIR_M448, 25),
DATA_MAKE_NUM(DATADIR_M448, 26),
DATA_MAKE_NUM(DATADIR_M448, 27),
DATA_MAKE_NUM(DATADIR_M448, 28),
DATA_MAKE_NUM(DATADIR_M448, 19),
DATA_MAKE_NUM(DATADIR_M448, 22),
DATA_MAKE_NUM(DATADIR_M448, 23)
};
u8 lbl_1_data_A8[11] = { 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 };
u8 lbl_1_data_B3[11] = { 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1 };
s32 lbl_1_data_C0[11] = { 8, 8, 8, 0, 0, 0, 8, 8, 2, 8, 8 };
s32 lbl_1_data_EC[11] = { 0, 0, 0, 3, 5, 0, 0, 0, 0, 0, 0 };
s32 lbl_1_data_118[11] = { 8, 8, 8, 0, 2, 0, 0, 0, 0, 8, 8 };
s32 lbl_1_data_144[11] = { 0 }; // unused
s32 lbl_1_data_170[2] = { 0 };
s32 lbl_1_data_178[] = { 1, 1, 0, 0, 0, 1, 0, 0 };
s16 lbl_1_data_198 = -1;
s16 lbl_1_data_19A = -1;
s16 lbl_1_data_19C = -1;
s32 lbl_1_data_1A0 = -1;
s32 lbl_1_data_1A4[2] = { 0 };
s32 lbl_1_data_1AC[2] = { 0 };
s32 lbl_1_data_1B4[2] = { 0 };
float lbl_1_data_1BC[][4] = {
{ -90.0f, 2.0f, 525.0f, 180.0f },
{ 90.0f, 2.0f, 525.0f, 180.0f }
};
float lbl_1_data_1DC[] = { 0.0f, 0.0f, 0.0f, 1.0f };
void fn_1_A0(void) {
Center.x += 10.0 * (((HuPadBtn[0] & 2) != 0) - ((HuPadBtn[0] & 1) != 0));
Center.z -= 10.0 * (((HuPadBtn[0] & 8) != 0) - ((HuPadBtn[0] & 4) != 0));
Center.y += 30.0 * ((HuPadTrigL[0] - HuPadTrigR[0]) / 128.0);
CZoom += 25.0 * (((HuPadBtn[0] & 0x400) != 0) - ((HuPadBtn[0] & 0x800) != 0));
CRot.y += HuPadSubStkX[0] / 16.0;
CRot.x += HuPadSubStkY[0] / -16.0;
}
void fn_1_38C(void) {
lbl_1_bss_64 = GXGetTexBufferSize(640, 480, GX_TF_RGB565, GX_FALSE, 0);
lbl_1_bss_60 = GXGetTexBufferSize(160, 120, GX_TF_RGB565, GX_FALSE, 0);
lbl_1_bss_28 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_64, MEMORY_DEFAULT_NUM);
memset(lbl_1_bss_28, 0, lbl_1_bss_64);
lbl_1_bss_2C = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_60, MEMORY_DEFAULT_NUM);
memset(lbl_1_bss_2C, 0, lbl_1_bss_60);
}
void fn_1_478(void) {
if (lbl_1_bss_28) {
HuMemDirectFree(lbl_1_bss_28);
}
lbl_1_bss_28 = NULL;
if (lbl_1_bss_2C) {
HuMemDirectFree(lbl_1_bss_2C);
}
lbl_1_bss_2C = NULL;
}
void fn_1_4FC(ModelData* model, Mtx matrix) {
Mtx spC8;
Mtx sp98;
float temp_f31;
float temp_f29;
float temp_f30;
float temp_f28;
s32 sp10;
void* spC;
s32 var_r29;
s32 var_r20;
void* var_r28;
s32 i;
s32 j;
sp10 = lbl_1_bss_64;
spC = lbl_1_bss_28;
if (!lbl_1_bss_28) {
return;
}
GXSetScissor(0, 0, 640, 480);
GXSetViewport(0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
C_MTXOrtho(sp98, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f);
GXSetProjection(sp98, GX_ORTHOGRAPHIC);
PSMTXIdentity(spC8);
GXLoadPosMtxImm(spC8, GX_PNMTX0);
GXSetNumTevStages(1);
GXSetNumTexGens(1);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
GXSetTevOp(GX_TEVSTAGE0, GX_MODULATE);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_TEXC, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_RASA);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
GXSetBlendMode(GX_BM_BLEND, GX_BL_ONE, GX_BL_ZERO, GX_LO_NOOP);
GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_RGBA6, 0);
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0);
for (i = 0; i < 0; i++) {
s32 sp84[5] = { 0, 1, 1, 0, 1 };
float sp70[5] = { 1.0f, 2.0f, 2.5f, 0.0f, 0.0f };
float sp5C[5] = { 1.0f, 4.0f, 5.0f, 1.0f, 5.0f };
float sp48[5] = { 2.0f, 2.5f, 0.0f, 1.0f, 1.0f };
float sp34[5] = { 0.5f, -0.5f, 0.0f, 0.0f, 0.0f };
var_r20 = (sp84[i] == 0) ? lbl_1_bss_64 : lbl_1_bss_60;
var_r28 = (sp84[i] == 0) ? lbl_1_bss_28 : lbl_1_bss_2C;
if (sp70[i] > 0.0f) {
GXSetTexCopySrc(0, 0, 640.0f / sp70[i], 480.0f / sp70[i]);
GXSetTexCopyDst(
(sp84[i] == 0 ? 640 : 320) / sp70[i],
(sp84[i] == 0 ? 480 : 240) / sp70[i],
GX_TF_RGB565,
sp84[i] == 0 ? GX_FALSE : GX_TRUE);
GXSetCopyClear(BGColor, 0xFFFFFF);
GXCopyTex(var_r28, GX_FALSE);
DCFlushRange(var_r28, var_r20);
GXPixModeSync();
}
if (sp48[i] > 0.0f) {
GXInitTexObj(&lbl_1_bss_40, var_r28, 640.0f / sp5C[i], 480.0f / sp5C[i], GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE);
GXLoadTexObj(&lbl_1_bss_40, GX_TEXMAP0);
for (j = 0; j < (i != 4 ? 1 : 4); j++) {
float sp24[4] = { 16.5f, -8.5f, -16.5f, 8.5f };
float sp14[4] = { -8.5f, -16.5f, 8.5f, 16.5f };
temp_f31 = 0.0015625 * (0.5 * sp24[j]);
temp_f29 = 0.0f;
temp_f30 = 0.0015625 * (0.6666666666666666 * sp14[j]);
temp_f28 = 0.0f;
var_r29 = 16 - j * 5;
var_r29 = (i != 4) ? 0xFF : 0xB1;
if (i != 4) {
temp_f31 = 0.0f;
temp_f30 = 0.0f;
}
if (i == 3) {
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_TEXC, GX_CC_ZERO);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ZERO, GX_LO_NOOP);
} else if (i == 4) {
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_SUBHALF, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_NOOP);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetBlendMode(GX_BM_BLEND, GX_BL_ONE, GX_BL_ONE, GX_LO_NOOP);
} else {
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_RASC, GX_CC_TEXC, GX_CC_ZERO);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ZERO, GX_LO_NOOP);
}
temp_f31 = 0.0015625 * sp34[i];
temp_f30 = 0.0015625 * sp34[i];
temp_f31 = 0.0f;
temp_f30 = 0.0f;
temp_f29 += 0.5 * (1.0f / (640.0f / sp5C[i]));
temp_f28 += 0.5 * (1.0f / (640.0f / sp5C[i]));
temp_f31 = temp_f30 = temp_f29 = temp_f28 = 0.0f;
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3f32(
temp_f31 + 1.25 * (0.0f / sp48[i]),
temp_f30 + 1.25 * (0.0f / sp48[i]),
0.0f);
GXColor4u8(0xFF, 0xFF, 0xFF, var_r29);
GXPosition2f32(temp_f29 + 0.0, temp_f28 + 0.0);
GXPosition3f32(
temp_f31 + 1.25 * (1.0f / sp48[i]),
temp_f30 + 1.25 * (0.0f / sp48[i]),
0.0f);
GXColor4u8(0xFF, 0xFF, 0xFF, var_r29);
GXPosition2f32(temp_f29 + 1.25, temp_f28 + 0.0);
GXPosition3f32(
temp_f31 + 1.25 * (1.0f / sp48[i]),
temp_f30 + 1.25 * (1.0f / sp48[i]),
0.0f);
GXColor4u8(0xFF, 0xFF, 0xFF, var_r29);
GXPosition2f32(temp_f29 + 1.25, temp_f28 + 1.25);
GXPosition3f32(
temp_f31 + 1.25 * (0.0f / sp48[i]),
temp_f30 + 1.25 * (1.0f / sp48[i]),
0.0f);
GXColor4u8(0xFF, 0xFF, 0xFF, var_r29);
GXPosition2f32(temp_f29 + 0.0, temp_f28 + 1.25);
GXEnd();
}
}
}
}
const Vec lbl_1_rodata_100 = { 0.0f, 0.0f, 0.0f };
void fn_1_1338(omObjData* arg0) {
Mtx sp184;
Vec sp178;
s32 var_r24;
UnkM448Struct_00* temp_r31;
UnkM448Struct_00* sp11C;
UnkM448Struct_00* temp_r23;
UnkM448Struct_00* temp_r25;
UnkM448Struct_01* temp_r28;
UnkM448Struct_01* temp_r27;
float var_f29;
float var_f20;
float sp118;
float sp114;
float sp110;
float sp10C;
float sp108;
float sp104;
float sp100;
float spFC;
float spF8;
float spF4;
float spF0;
s32 var_r17;
s32 spEC;
float spE8;
s32 spE4;
float spE0;
float spDC;
float spD8;
float spD4;
float spD0;
float spCC;
float temp_f24;
float temp_f23;
float temp_f22;
float temp_f21;
float temp_f26;
float temp_f25;
float temp_f27;
float temp_f31;
float temp_f30;
float var_f28;
s16 var_r29;
s32 var_r21;
s32 var_r26;
s32 var_r20;
s32 var_r19;
s32 var_r18;
s32 var_r22;
temp_r31 = arg0->data;
sp11C = lbl_1_bss_8C[1 - arg0->work[0]]->data;
var_f29 = 0.0f;
var_f20 = 0.0f;
sp118 = 0.0f;
sp114 = 0.0f;
sp110 = 0.0f;
var_r29 = -1;
if (temp_r31->unk20 != 3) {
temp_r31->unk40 = temp_r31->unk48 = 0.0f;
}
temp_r31->unk38++;
switch (temp_r31->unk34) {
case 0:
if (lbl_1_bss_80 == 1001 && lbl_1_bss_84 == 45 && temp_r31->unk08 != -1) {
var_r20 = 8;
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[var_r20], lbl_1_data_EC[var_r20], 45.0f,
(lbl_1_data_A8[var_r20] != 0) ? 0 : 0x40000001);
temp_r31->unk20 = var_r20;
}
if (lbl_1_bss_80 == 1001 && lbl_1_bss_84 == 210 && temp_r31->unk08 != -1) {
var_r19 = 0;
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[var_r19], lbl_1_data_EC[var_r19], 30.0f,
(lbl_1_data_A8[var_r19] != 0) ? 0 : 0x40000001);
temp_r31->unk20 = var_r19;
}
if (lbl_1_bss_80 == 1003 && temp_r31->unk08 != -1) {
arg0->rot.y = 0.9 * (arg0->rot.y - (temp_r31->unk00 == 0 ? 90 : -90)) + (temp_r31->unk00 == 0 ? 90 : -90);
}
if (lbl_1_bss_80 == 1005) {
temp_r31->unk34 = (lbl_1_bss_14 == temp_r31->unk00) ? 1 : 3;
}
break;
case 1:
if (temp_r31->unk38 == 1 && temp_r31->unk08 != -1) {
Hu3DMotionNoMotReset(arg0->model[0], "ske_head",
(lbl_1_data_178[temp_r31->unk08] != 0) ? 0x100 : 0x80);
}
sp118 = (lbl_1_bss_1C < 90) ? 0 : 0x48;
if (arg0->trans.z < 250.0f) {
temp_r31->unk34 = 2;
lbl_1_bss_0 = 600;
if (lbl_1_data_19A != -1) {
MGSeqKill(lbl_1_data_19A);
}
lbl_1_data_19A = MGSeqCreate(1, lbl_1_bss_0 / 60, -1, -1);
for (var_r17 = 0; var_r17 < 10; var_r17++) {
espDispOn(lbl_1_data_28[var_r17]);
}
if (temp_r31->unk0C == -1) {
var_r24 = 0;
temp_r31->unk18 = temp_r31->unk1C = -1;
for (var_r26 = 0; var_r26 < 20; var_r26++) {
var_r24 += (lbl_1_bss_16C[var_r26].unk18 != 9);
}
if (var_r24 != 0) {
var_r24 = rand8() % var_r24;
for (var_r26 = 0; var_r26 < 20; var_r26++) {
if (lbl_1_bss_16C[var_r26].unk18 != 9) {
if (var_r24 <= 0) {
temp_r31->unk18 = lbl_1_bss_16C[var_r26].unk00;
temp_r31->unk1C = lbl_1_bss_16C[var_r26].unk04;
break;
}
var_r24--;
}
}
}
}
}
break;
case 6:
var_f20 = 4.0f * (0.5f + lbl_1_data_1BC[temp_r31->unk00][0] - arg0->trans.x);
sp118 = 4.0f * -(0.5f + lbl_1_data_1BC[temp_r31->unk00][2] - arg0->trans.z);
if (lbl_1_bss_80 == 1005) {
var_f20 = 0.0f;
}
if (arg0->trans.z >= lbl_1_data_1BC[temp_r31->unk00][2]) {
temp_r31->unk34 = (lbl_1_bss_80 < 1005) ? 0
: ((lbl_1_bss_68 == -1) ? 3 : 7);
temp_r31->unk38 = 0;
if (temp_r31->unk34 == 0) {
arg0->rot.y = 180.0f;
}
}
break;
case 2:
if (lbl_1_bss_14 != temp_r31->unk00) {
OSReport("m448 player turn error!\n");
}
if (lbl_1_bss_0 > 0 && lbl_1_bss_18 < 18000) {
if (temp_r31->unk0C != -1) {
var_f20 = HuPadStkX[temp_r31->unk0C];
sp118 = HuPadStkY[temp_r31->unk0C];
sp114 = (HuPadBtn[temp_r31->unk0C] & 0x100) > 0;
sp110 = (HuPadBtnDown[temp_r31->unk0C] & (temp_r31->unk20 == 3 ? 320 : 256)) > 0;
sp178 = lbl_1_rodata_100;
sp178.x = var_f20;
sp178.z = -sp118;
PSMTXRotRad(sp184, 'y', MTXDegToRad(CRot.y));
PSMTXMultVec(sp184, &sp178, &sp178);
var_f20 = sp178.x;
sp118 = -sp178.z;
} else {
if (temp_r31->unk20 == 3) {
if (temp_r31->unk44 < 0.0f && temp_r31->unk08 != -1) {
sp110 = sp114 = 1.0f;
} else {
sp114 = 1.0f;
}
}
if (temp_r31->unk18 != -1 && temp_r31->unk1C != -1) {
temp_f26 = 100.0 + 200.0 * (temp_r31->unk18 - 2.5) - arg0->trans.x;
temp_f25 = 100.0 + 200.0 * (temp_r31->unk1C - 2.0) - arg0->trans.z;
sp10C = sqrtf(temp_f26 * temp_f26 + temp_f25 * temp_f25);
if (temp_r31->unk08 != -1 && temp_r31->unk20 != 3) {
if (sp10C < 60.0f) {
sp110 = sp114 = 1.0f;
} else {
var_f20 = temp_f26;
sp118 = -temp_f25;
}
} else if (sp10C < 277.5) {
if (temp_r31->unk20 != 3) {
sp110 = sp114 = 1.0f;
}
var_f20 = (temp_f26 / 37.0) / 0.25;
sp118 = (-temp_f25 / 37.0) / 0.25;
} else {
var_f20 = temp_f26;
sp118 = -temp_f25;
}
}
}
}
arg0->trans.x = (arg0->trans.x < -450.0f) ? -450.0f
: (arg0->trans.x > 450.0f) ? 450.0f
: arg0->trans.x;
arg0->trans.z = (arg0->trans.z < -350.0f) ? -350.0f
: (arg0->trans.z > 350.0f) ? 350.0f
: arg0->trans.z;
if ((lbl_1_bss_0 <= 0 || lbl_1_bss_18 >= 18000) && temp_r31->unk20 == 0) {
temp_r31->unk34 = 5;
temp_r31->unk38 = 0;
lbl_1_bss_1C = 0;
if (lbl_1_bss_18 >= 18000) {
temp_r23 = lbl_1_bss_8C[1 - temp_r31->unk00]->data;
lbl_1_bss_68 = (temp_r31->unk08 == -1) ? temp_r31->unk00
: (temp_r23->unk08 == -1) ? temp_r23->unk00 : 4;
temp_r23->unk34 = 7;
temp_r23->unk38 = 0;
}
}
break;
case 3:
spFC = (arg0->rot.y > 0.0f) ? -180 : 180;
sp104 = lbl_1_bss_8C[1 - temp_r31->unk00]->trans.x;
sp100 = lbl_1_bss_8C[1 - temp_r31->unk00]->trans.z;
sp108 = atan2d(sp104 - arg0->trans.x, sp100 - arg0->trans.z);
arg0->rot.y = 0.3 * (arg0->rot.y + spFC) - spFC;
if (temp_r31->unk08 != -1) {
Hu3DMotionForceSet(arg0->model[0], "ske_head",
(lbl_1_data_178[temp_r31->unk08] != 0) ? 0x100 : 0x80,
(lbl_1_data_178[temp_r31->unk08] != 0) ? 180.0f + -sp108 : 180.0f + sp108);
}
break;
case 5:
if (arg0->trans.z >= 400.0f) {
temp_r25 = lbl_1_bss_8C[1 - temp_r31->unk00]->data;
temp_r31->unk34 = 6;
temp_r31->unk38 = 0;
sp118 = -40.0f;
if (lbl_1_bss_68 == -1) {
temp_r25->unk34 = 1;
temp_r25->unk38 = 0;
if (temp_r25->unk08 != -1) {
Hu3DMotionForceSet(lbl_1_bss_8C[1 - temp_r31->unk00]->model[0], "ske_head",
(lbl_1_data_178[temp_r25->unk08] != 0) ? 0x100 : 0x80, 180.0f);
Hu3DMotionNoMotReset(lbl_1_bss_8C[1 - temp_r31->unk00]->model[0], "ske_head",
(lbl_1_data_178[temp_r25->unk08] != 0) ? 0x100 : 0x80);
}
}
lbl_1_bss_14 = 1 - lbl_1_bss_14;
} else {
spF8 = lbl_1_data_1BC[temp_r31->unk00][0] - arg0->trans.x;
spF4 = 400.0f - arg0->trans.z;
spF0 = atan2d(lbl_1_data_1BC[temp_r31->unk00][0] - arg0->trans.x, 400.0f - arg0->trans.z);
var_f20 = 10.0 * sind(spF0) / 0.25;
sp118 = 10.0 * -cosd(spF0) / 0.25;
if (fabs(var_f20) > fabs(4.0f * (lbl_1_data_1BC[temp_r31->unk00][0] - arg0->trans.x))) {
var_f20 = 4.0f * (lbl_1_data_1BC[temp_r31->unk00][0] - arg0->trans.x);
}
}
break;
case 7:
if (temp_r31->unk38 == 1 && temp_r31->unk08 != -1) {
Hu3DMotionForceSet(arg0->model[0], "ske_head",
(lbl_1_data_178[temp_r31->unk08] != 0) ? 0x100 : 0x80, 180.0f);
Hu3DMotionNoMotReset(arg0->model[0], "ske_head",
(lbl_1_data_178[temp_r31->unk08] != 0) ? 0x100 : 0x80);
}
arg0->rot.y *= 0.3;
if (lbl_1_bss_80 == 1007 && temp_r31->unk20 == 0) {
temp_r31->unk24 = (lbl_1_bss_68 == temp_r31->unk00) ? 9 : 10;
}
break;
}
switch (temp_r31->unk20) {
case 4:
case 7:
case 8:
if ((temp_r31->unk08 != -1)
? CharModelMotionEndCheck(temp_r31->unk08)
: Hu3DMotionEndCheck(arg0->model[0]))
{
var_r29 = 0;
}
/* fallthrough */
case 0:
case 1:
case 2:
temp_f31 = 0.25 * var_f20;
temp_f30 = 0.25 * -sp118;
var_f29 = sqrtf(temp_f31 * temp_f31 + temp_f30 * temp_f30);
if (var_f29 >= 0.5f) {
if (var_f29 < 10.0f) {
temp_r31->unk40 = temp_f31;
temp_r31->unk48 += temp_f30;
} else {
temp_f31 = temp_f31 / var_f29;
temp_f30 = temp_f30 / var_f29;
var_f29 = 10.0f;
if (temp_r31->unk20 != 3) {
temp_r31->unk40 = temp_f31 * var_f29;
temp_r31->unk48 = temp_f30 * var_f29;
} else {
temp_r31->unk40 = 0.875 * temp_r31->unk40 + temp_f31 * var_f29 * 0.125;
temp_r31->unk48 = 0.875 * temp_r31->unk48 + temp_f30 * var_f29 * 0.125;
}
}
temp_r31->unk3C = var_f29;
arg0->rot.y = atan2d(temp_r31->unk40, temp_r31->unk48);
if (temp_r31->unk3C >= 8.0f) {
var_r29 = 2;
} else {
var_r29 = 1;
}
} else if (temp_r31->unk20 != 7 && temp_r31->unk20 != 4 && temp_r31->unk20 != 8) {
var_r29 = 0;
}
temp_r31->unk44 = 0.0f;
if (sp110) {
temp_r31->unk2C = 0;
temp_r31->unk28 = 1;
temp_r31->unk44 = 26.766666f;
var_r29 = 3;
}
break;
case 3:
if (temp_r31->unk08 != -1) {
temp_f31 = 0.25 * var_f20;
temp_f30 = 0.25 * -sp118;
var_f29 = sqrtf(temp_f31 * temp_f31 + temp_f30 * temp_f30);
if (var_f29 >= 0.5f) {
if (var_f29 < 10.0f) {
temp_r31->unk40 = temp_f31;
temp_r31->unk48 = temp_f30;
} else {
temp_f31 = temp_f31 / var_f29;
temp_f30 = temp_f30 / var_f29;
var_f29 = 10.0f;
if (temp_r31->unk20 != 3) {
temp_r31->unk40 = temp_f31 * var_f29;
temp_r31->unk48 = temp_f30 * var_f29;
} else {
temp_r31->unk40 = 0.875 * temp_r31->unk40 + temp_f31 * var_f29 * 0.125;
temp_r31->unk48 = 0.875 * temp_r31->unk48 + temp_f30 * var_f29 * 0.125;
}
}
temp_r31->unk3C = var_f29;
arg0->rot.y = atan2d(temp_r31->unk40, temp_r31->unk48);
} else {
// Required to match.
0.875 * temp_r31->unk40;
0.875 * temp_r31->unk48;
}
}
if (temp_r31->unk28 != 0) {
if (sp114) {
if (++temp_r31->unk28 > 4) {
temp_r31->unk28 = 0;
} else {
temp_r31->unk44 += 4.866667f;
}
} else {
temp_r31->unk28 = 0;
}
}
temp_r31->unk44 += -2.4333334f;
if (temp_r31->unk2C != 0) {
temp_r31->unk44 = 0.0f;
temp_r31->unk2C = 1;
var_r29 = 4;
if (temp_r31->unk08 != -1) {
break;
}
temp_r31->unk44 = 9.733334f;
temp_r31->unk44 = 0.0f;
temp_r31->unk2C = 0;
var_r29 = 6;
if (temp_r31->unk34 != 2) {
break;
}
for (spEC = 0; spEC < 20; spEC++) {
temp_r28 = &lbl_1_bss_16C[spEC];
temp_f24 = 100.0 + 200.0 * (temp_r28->unk00 - 2.5) - arg0->trans.x;
temp_f23 = 100.0 + 200.0 * (temp_r28->unk04 - 2.0) - arg0->trans.z;
spE8 = sqrtf(temp_f24 * temp_f24 + temp_f23 * temp_f23);
if (temp_r28->unk0C == -1 && spE8 <= 100.0) {
temp_r31->unk34 = 4;
temp_r31->unk38 = 0;
temp_r28->unk18 = 8;
temp_r28->unk1C = 0;
temp_r28->unk0C = temp_r31->unk00;
MGSeqParamSet(lbl_1_data_19A, 2, -1);
lbl_1_data_19A = -1;
lbl_1_bss_1C = 0;
}
}
} else if (sp110) {
temp_r31->unk44 = 0.0f;
temp_r31->unk30 = 0;
var_r29 = 5;
}
break;
case 5:
if ((Hu3DData[arg0->model[0]].unk_0C == -1 && temp_r31->unk08 != -1)
? CharModelMotionEndCheck(temp_r31->unk08)
: Hu3DMotionEndCheck(arg0->model[0]))
{
temp_r31->unk44 += -2.4333334f;
} else {
temp_r31->unk44 = 0.0f;
}
if (temp_r31->unk44 < 0.0f && temp_r31->unk2C != 0) {
if (temp_r31->unk30 != 0) {
temp_r31->unk44 = 0.0f;
temp_r31->unk30 = 0;
var_r29 = 7;
} else {
temp_r31->unk44 = 9.733334f;
temp_r31->unk2C = 0;
var_r29 = 6;
if (temp_r31->unk0C != -1) {
omVibrate(temp_r31->unk04, 12, 6, 6);
}
if (temp_r31->unk34 == 2) {
for (spE4 = 0; spE4 < 20; spE4++) {
temp_r27 = &lbl_1_bss_16C[spE4];
temp_f22 = 100.0 + 200.0 * (temp_r27->unk00 - 2.5) - arg0->trans.x;
temp_f21 = 100.0 + 200.0 * (temp_r27->unk04 - 2.0) - arg0->trans.z;
spE0 = sqrtf(temp_f22 * temp_f22 + temp_f21 * temp_f21);
if (temp_r27->unk0C == -1 && spE0 <= 100.0) {
temp_r31->unk34 = 4;
temp_r31->unk38 = 0;
temp_r27->unk18 = 8;
temp_r27->unk1C = 0;
temp_r27->unk0C = temp_r31->unk00;
MGSeqParamSet(lbl_1_data_19A, 2, -1);
lbl_1_data_19A = -1;
lbl_1_bss_1C = 0;
}
}
}
}
}
break;
case 6:
temp_r31->unk44 += -2.4333334f;
if (temp_r31->unk2C != 0) {
if ((temp_r31->unk08 != -1)
? CharModelMotionEndCheck(temp_r31->unk08)
: Hu3DMotionEndCheck(arg0->model[0]))
{
var_r29 = 7;
}
}
break;
case 9:
case 10:
break;
}
arg0->trans.x += temp_r31->unk40;
if (temp_r31->unk2C == 0) {
arg0->trans.y += temp_r31->unk44;
}
arg0->trans.z += temp_r31->unk48;
for (var_r22 = 1; var_r22 < 2; var_r22++) {
temp_f27 = lbl_1_bss_8C[var_r22]->trans.x - arg0->trans.x;
var_f28 = lbl_1_bss_8C[var_r22]->trans.z - arg0->trans.z;
if (var_r22 != temp_r31->unk00) {
if (temp_f27 == 0.0f && var_f28 == 0.0f) {
var_f28 = -1.0f;
}
spDC = sqrtf(temp_f27 * temp_f27 + var_f28 * var_f28);
if (spDC < 100.0f) {
temp_f27 *= 100.0f / spDC;
var_f28 *= 100.0f / spDC;
arg0->trans.x = lbl_1_bss_8C[var_r22]->trans.x - temp_f27;
arg0->trans.z = lbl_1_bss_8C[var_r22]->trans.z - var_f28;
}
}
}
if (arg0->trans.y < 0.0f) {
arg0->trans.y = (temp_r31->unk34 == 7) ? 2.5f : 0.0f;
temp_r31->unk2C = 1;
}
if (temp_r31->unk24 >= 0) {
var_r29 = temp_r31->unk24;
}
if (var_r29 >= 0 && var_r29 != temp_r31->unk20) {
var_r18 = (temp_r31->unk08 == -1 && (var_r29 == 9 || var_r29 == 10)) ? 0 : var_r29;
if (temp_r31->unk08 != -1) {
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[var_r18], lbl_1_data_EC[var_r18], lbl_1_data_C0[var_r18],
(lbl_1_data_A8[var_r18] != 0) ? 0 : 0x40000001);
} else {
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[var_r29], lbl_1_data_EC[var_r29], lbl_1_data_118[var_r29],
(lbl_1_data_B3[var_r29] != 0) ? 0 : 0x40000001);
if (var_r29 == 3) {
Hu3DMotionShiftSet(arg0->model[0], arg0->motion[5], 15.0f, 33.0f, 0x40000002);
}
}
temp_r31->unk20 = var_r29;
}
espBankSet(lbl_1_data_28[temp_r31->unk00 * 5 + 2], lbl_1_data_1A4[temp_r31->unk00] % 10);
espBankSet(lbl_1_data_28[temp_r31->unk00 * 5 + 3], (lbl_1_data_1A4[temp_r31->unk00] / 10) % 10);
lbl_1_data_1B4[temp_r31->unk00] += (lbl_1_data_1B4[temp_r31->unk00] < 256) ? 1 : 0;
if (lbl_1_data_1B4[temp_r31->unk00] <= 15) {
spD8 = 1.0 - lbl_1_data_1B4[temp_r31->unk00] / 15.0;
spD4 = 1.0f;
spD0 = 0.0f;
spCC = 0.0f;
for (var_r21 = 0; var_r21 < 2; var_r21++) {
if (lbl_1_data_1AC[temp_r31->unk00] > 0) {
float sp1B4[21] = {
0.0f, 0.0f, 0.0f, 5.0f, 0.0f, 7.0f, 0.0f,
0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 15.0f
};
spD8 = (lbl_1_data_1B4[temp_r31->unk00] < 10)
? 1.0 - lbl_1_data_1B4[temp_r31->unk00] / 10.0 : 0.0;
spD4 = 1.0 + (spD8 * 0.5 + spD8 * spD8 * 0.5) * sp1B4[lbl_1_data_1AC[temp_r31->unk00]] / 10.0;
espScaleSet(lbl_1_data_28[(var_r21 == 0 ? 2 : 3) + temp_r31->unk00 * 5], spD4, spD4);
} else if (lbl_1_data_1AC[temp_r31->unk00] < 0) {
s32 sp168[4] = { 100, 485, 16, -4 };
spD0 = spD8 * lbl_1_data_1AC[temp_r31->unk00] * (rand8() / 255.0 - 0.5);
spCC = spD8 * lbl_1_data_1AC[temp_r31->unk00] * (rand8() / 255.0 - 0.5);
espPosSet(lbl_1_data_28[(var_r21 == 0 ? 2 : 3) + temp_r31->unk00 * 5], (&sp168[var_r21])[2] + sp168[temp_r31->unk00] + spD0, 72.0f + spCC);
}
}
}
}
s32 lbl_1_data_25C = -1;
float lbl_1_data_260 = 2775.0f;
float lbl_1_data_264 = 314.0f;
float lbl_1_data_268 = -100.0f;
float lbl_1_data_26C = -38.75f;
void fn_1_4310(omObjData* arg0) {
UnkM448Struct_00* spC8[2];
float spB0;
float spAC;
float temp_f19;
float var_f18;
float spA8;
float spA4;
float spA0;
float sp9C;
float sp98;
float sp94;
float sp90;
float sp8C;
float sp88;
float sp84;
float sp80;
float sp7C;
float sp78;
float sp74;
float sp70;
float sp6C;
ModelData* temp_r23;
ModelData* temp_r22;
ModelData* temp_r26;
ModelData* temp_r29;
UnkM448Struct_01* temp_r31;
float temp_f21;
float temp_f20;
float temp_f26;
float temp_f30;
float temp_f29;
float var_f28;
float var_f27;
float var_f22;
float var_f23;
float var_f31;
s32 temp_r21;
s32 var_r25;
s32 var_r20;
s32 var_r19;
s32 var_r24;
s32 i;
for (i = 0; i < 2; i++) {
spC8[i] = lbl_1_bss_8C[i]->data;
}
lbl_1_bss_4++;
lbl_1_bss_1C++;
if (lbl_1_bss_80 == 1005) {
lbl_1_bss_18++;
if (lbl_1_bss_18 == 16200) {
lbl_1_data_19C = MGSeqCreate(1, (18060 - lbl_1_bss_18) / 60, -1, -1);
MGSeqPosSet(lbl_1_data_19C, 288.0f, 400.0f);
}
if (lbl_1_data_19C != -1) {
MGSeqParamSet(lbl_1_data_19C, 1, (18060 - lbl_1_bss_18) / 60);
}
}
lbl_1_data_1DC[0] = lbl_1_data_1DC[1] = lbl_1_data_1DC[2] = 0.0f;
if (lbl_1_bss_80 == 1004 && lbl_1_bss_84 == 0) {
lbl_1_bss_84++;
lbl_1_bss_78 = 1;
lbl_1_bss_74 = 0;
for (i = 0; i < 20; i++) {
lbl_1_bss_16C[i].unk18 = 2;
lbl_1_bss_16C[i].unk1C = 0;
lbl_1_bss_16C[i].unk08 = rand8() % 16;
lbl_1_bss_16C[i].unk10 = -40.0f;
}
}
switch (lbl_1_bss_78) {
case 1:
lbl_1_bss_74++;
if (lbl_1_bss_74 == 1) {
spC8[0]->unk34 = spC8[1]->unk34 = 6;
spC8[0]->unk38 = spC8[1]->unk38 = 0;
}
var_r20 = 0;
for (i = 0; i < 20; i++) {
var_r20 += (lbl_1_bss_16C[i].unk10 == 0.0f);
}
if (var_r20 >= 20) {
lbl_1_bss_78 = 2;
lbl_1_bss_74 = 0;
}
break;
case 2:
lbl_1_bss_74++;
if (lbl_1_bss_74 >= 30) {
lbl_1_bss_78 = 0;
lbl_1_bss_74 = 0;
for (i = 0; i < 20; i++) {
lbl_1_bss_16C[i].unk18 = 3;
lbl_1_bss_16C[i].unk1C = 0;
}
if (lbl_1_bss_9C[8].unk00 < 3) {
lbl_1_bss_9C[8].unk04[lbl_1_bss_9C[8].unk00] = 0.0f;
lbl_1_bss_9C[8].unk00++;
}
}
break;
case 3:
lbl_1_bss_74++;
if (lbl_1_bss_74 == 1) {
s32 var_r27 = 0;
s32 sp170[20] = { 0 };
for (var_r27 = 0; var_r27 < 20; var_r27++) {
temp_r23 = &Hu3DData[arg0->model[var_r27 + 7]];
temp_r22 = &Hu3DData[arg0->model[var_r27 + 27]];
do {
do {
var_r25 = rand8();
} while (var_r25 >= 240);
} while (sp170[var_r25 % 20] != 0);
sp170[var_r25 % 20] = 1;
lbl_1_bss_16C[var_r27].unk00 = (var_r25 % 20) % 5;
lbl_1_bss_16C[var_r27].unk04 = ((var_r25 % 20) / 5) % 4;
temp_r23->pos.x = temp_r22->pos.x = 100.0 + 200.0 * (lbl_1_bss_16C[var_r27].unk00 - 2.5);
temp_r23->pos.z = temp_r22->pos.z = 100.0 + 200.0 * (lbl_1_bss_16C[var_r27].unk04 - 2.0);
}
}
if (lbl_1_bss_74 >= 10) {
lbl_1_bss_78 = 4;
lbl_1_bss_74 = 0;
lbl_1_data_170[0] = 1;
}
break;
case 4:
if (lbl_1_bss_74 == 0 && lbl_1_bss_9C[0].unk00 < 3) {
lbl_1_bss_9C[0].unk04[lbl_1_bss_9C[0].unk00] = 0.0f;
lbl_1_bss_9C[0].unk00++;
}
lbl_1_bss_74++;
if (lbl_1_bss_74 % 4 == 1) {
spB0 = 10000.0f;
var_r24 = -1;
var_r19 = 0;
for (i = 0; i < 20; i++) {
var_r19 = (lbl_1_bss_16C[i].unk18 == 6 || !(lbl_1_bss_16C[i].unk00 == 0 && lbl_1_bss_16C[i].unk04 == 0)) ? 1 : var_r19;
if (lbl_1_bss_16C[i].unk18 != 6 && (lbl_1_bss_16C[i].unk00 != 0 || lbl_1_bss_16C[i].unk04 != 0)) {
temp_f20 = lbl_1_bss_16C[i].unk00 * lbl_1_bss_16C[i].unk00 + lbl_1_bss_16C[i].unk04 * lbl_1_bss_16C[i].unk04;
spAC = sqrtf(temp_f20) + (rand8() / 256.0) * 0.01;
if (spB0 > spAC) {
var_r24 = i;
spB0 = spAC;
}
}
}
if (var_r24 != -1) {
lbl_1_bss_16C[var_r24].unk18 = 6;
lbl_1_bss_16C[var_r24].unk1C = 0;
lbl_1_data_170[0]++;
lbl_1_bss_16C[var_r24].unk08 = lbl_1_data_170[0] - 1;
}
if (var_r19 == 0) {
lbl_1_bss_78 = 5;
lbl_1_bss_74 = 0;
}
}
break;
case 5:
lbl_1_bss_74++;
if (lbl_1_bss_74 == 5 && lbl_1_bss_9C[1].unk00 < 3) {
lbl_1_bss_9C[1].unk04[lbl_1_bss_9C[1].unk00] = 0.0f;
lbl_1_bss_9C[1].unk00++;
}
if (lbl_1_bss_74 == 5) {
s32 sp120[20] = { 0 };
for (i = 0; i < 20; i++) {
lbl_1_bss_16C[i].unk18 = 7;
lbl_1_bss_16C[i].unk1C = (19 - lbl_1_bss_16C[i].unk08) * 3;
do {
temp_r21 = rand8() % 20;
} while (sp120[temp_r21] != 0);
sp120[temp_r21] = 1;
lbl_1_bss_16C[i].unk00 = temp_r21 % 5;
lbl_1_bss_16C[i].unk04 = temp_r21 / 5;
}
}
if (lbl_1_bss_74 == 115 && lbl_1_data_1A0 != -1) {
HuAudSeqFadeOut(lbl_1_data_1A0, 1000);
lbl_1_data_1A0 = -1;
}
if (lbl_1_bss_74 == 145) {
lbl_1_bss_84++;
}
break;
}
for (i = 0; i < 20; i++) {
temp_r29 = &Hu3DData[arg0->model[i + 7]];
temp_r26 = &Hu3DData[arg0->model[i + 27]];
var_f18 = temp_r29->pos.x;
var_f31 = temp_r29->pos.y;
spA8 = temp_r29->pos.z;
var_f23 = temp_r29->rot.x;
spA4 = temp_r29->rot.y;
temp_r31 = &lbl_1_bss_16C[i];
switch (lbl_1_bss_16C[i].unk18) {
case 2:
temp_r31->unk1C++;
temp_r31->unk08 -= (temp_r31->unk08 > 0);
var_f23 = 180.0f;
if (temp_r31->unk08 == 0) {
if (var_f31 > 0.0f && var_f31 + temp_r31->unk10 <= 0.0f && lbl_1_bss_9C[7].unk00 < 3) {
lbl_1_bss_9C[7].unk04[lbl_1_bss_9C[7].unk00] = 0.0f;
lbl_1_bss_9C[7].unk00++;
}
var_f31 += temp_r31->unk10;
}
if (var_f31 < 150.0 * sind(ABS(var_f23))) {
temp_r31->unk10 = 0.0f;
var_f31 = 150.0 * sind(ABS(var_f23));
}
break;
case 3:
temp_r31->unk1C++;
var_f31 = 2.0 * (temp_r31->unk1C / 35.0) - 1.0;
var_f31 = 1.0f - var_f31 * var_f31;
var_f31 *= 200.0f;
var_f23 = 180.0 + 360.0 * (temp_r31->unk1C / 35.0) * 0.5;
if (temp_r31->unk1C >= 35) {
var_f31 = 0.0f;
temp_r31->unk18 = 4;
temp_r31->unk1C = 0;
}
break;
case 4:
temp_r31->unk1C++;
var_f23 = 0.0f;
if (lbl_1_bss_16C->unk18 == 4) {
temp_r31->unk1C = lbl_1_bss_16C->unk1C;
}
if (temp_r31->unk1C > 120) {
temp_r31->unk18++;
temp_r31->unk1C = 0;
}
break;
case 5:
if (i == 0 && temp_r31->unk1C == 0 && lbl_1_bss_9C[9].unk00 < 3) {
lbl_1_bss_9C[9].unk04[lbl_1_bss_9C[9].unk00] = 0.0f;
lbl_1_bss_9C[9].unk00++;
}
temp_r31->unk1C++;
var_f31 = 2.0 * (temp_r31->unk1C / 45.0) - 1.0;
var_f31 = 1.0f - var_f31 * var_f31;
var_f31 *= 200.0f;
var_f23 = 360.0 * (temp_r31->unk1C / 45.0) * 1.5;
if (temp_r31->unk1C >= 45) {
var_f31 = 0.0f;
lbl_1_bss_78 = 3;
lbl_1_bss_74 = 0;
temp_r31->unk18 = 0;
temp_r31->unk1C = 0;
}
break;
case 6:
temp_r31->unk1C++;
spA0 = 20.0f;
temp_f30 = 100.0 + 200.0 * (temp_r31->unk00 - 2.5);
temp_f29 = 100.0 + 200.0 * (temp_r31->unk04 - 2.0);
var_f28 = -400.0f;
var_f27 = -300.0f;
sp9C = sqrtf((temp_f30 - var_f28) * (temp_f30 - var_f28) + (temp_f29 - var_f27) * (temp_f29 - var_f27));
temp_f19 = sp9C / spA0;
temp_f26 = temp_r31->unk1C * spA0;
temp_f26 = (temp_f26 >= sp9C) ? 1.0f : (temp_f26 / sp9C);
temp_f26 = 0.75 * temp_f26 + 0.25 * (1.0f - (1.0f - temp_f26) * (1.0f - temp_f26));
sp98 = 1.0f - temp_f26;
var_f18 = temp_f30 * sp98 + var_f28 * temp_f26;
spA8 = temp_f29 * sp98 + var_f27 * temp_f26;
var_f31 = (temp_r31->unk08 * 10 < temp_r31->unk1C * spA0)
? temp_r31->unk08 * 10
: temp_r31->unk1C * spA0;
temp_f19 = 4.0f * (temp_r31->unk1C / temp_f19) - 2.0f;
temp_f19 = 4.0f - temp_f19 * temp_f19;
var_f31 = temp_f19 / 4.0 * temp_f26 * 0.5 * (temp_r31->unk08 * 10 + 100) + temp_f26 * temp_r31->unk08 * 10.0f;
if (temp_f26 >= 1.0f) {
temp_r31->unk18 = 0;
temp_r31->unk1C = 0;
temp_r31->unk00 = 0;
temp_r31->unk04 = 0;
var_f31 = temp_r31->unk08 * 10;
}
break;
case 7:
temp_r31->unk1C++;
if (temp_r31->unk1C == 60 && i != 0) {
lbl_1_data_170[0]--;
}
if (temp_r31->unk1C >= 60) {
sp94 = 100.0 + 200.0 * (temp_r31->unk00 - 2.5);
sp90 = 100.0 + 200.0 * (temp_r31->unk04 - 2.0);
sp8C = -400.0f;
sp88 = -300.0f;
temp_f21 = (temp_r31->unk1C - 60) / 50.0;
// Cast required to match.
temp_f21 = (double) (1.0f - (1.0f - temp_f21) * (1.0f - temp_f21));
sp84 = 1.0f - temp_f21;
var_f18 = sp8C * sp84 + sp94 * temp_f21;
spA8 = sp88 * sp84 + sp90 * temp_f21;
var_f31 = temp_r31->unk08 * 10 * sp84;
if (temp_f21 >= 1.0f) {
temp_r31->unk18 = 0;
temp_r31->unk1C = 0;
temp_r31->unk08 = 0;
lbl_1_data_170[0] = 0;
}
}
break;
case 8:
if (temp_r31->unk1C == 0) {
if (lbl_1_bss_9C[(temp_r31->unk20 > 0) ? 3 : 4].unk00 < 3) {
lbl_1_bss_9C[(temp_r31->unk20 > 0) ? 3 : 4].unk04[lbl_1_bss_9C[(temp_r31->unk20 > 0) ? 3 : 4].unk00] = 0.0f;
lbl_1_bss_9C[(temp_r31->unk20 > 0) ? 3 : 4].unk00++;
}
}
temp_r31->unk1C++;
var_f31 = 2.0 * (temp_r31->unk1C / 75.0) - 1.0;
var_f31 = 1.0f - var_f31 * var_f31;
var_f31 *= 400.0f;
var_f23 = 360.0 * (temp_r31->unk1C / 75.0) * 3.0;
if (temp_r31->unk1C == 1) {
Hu3DParticleCntSet(lbl_1_bss_88->model[5], 0);
}
sp80 = 100.0 + 200.0 * (temp_r31->unk00 - 2.5);
sp7C = 100.0 + 200.0 * (temp_r31->unk04 - 2.0);
sp78 = (temp_r31->unk0C == 0) ? -640.0 : 640.0;
sp74 = (temp_r31->unk0C == 0) ? 0.0 : 0.0;
sp70 = temp_r31->unk1C / 75.0;
sp6C = 1.0f - sp70;
var_f31 += sp70 * (lbl_1_data_170[temp_r31->unk0C] * 10 + 33);
var_f18 = sp80 * sp6C + sp78 * sp70;
spA8 = sp7C * sp6C + sp74 * sp70;
lbl_1_data_1DC[0] = var_f18;
lbl_1_data_1DC[1] = var_f31;
lbl_1_data_1DC[2] = spA8;
if (temp_r31->unk1C >= 75) {
var_f31 = lbl_1_data_170[temp_r31->unk0C] * 10 + 33;
lbl_1_data_170[temp_r31->unk0C]++;
lbl_1_data_1A4[temp_r31->unk0C] += temp_r31->unk20;
lbl_1_data_1AC[temp_r31->unk0C] = temp_r31->unk20;
lbl_1_data_1B4[temp_r31->unk0C] = 0;
lbl_1_data_1A4[temp_r31->unk0C] =
(lbl_1_data_1A4[temp_r31->unk0C] < 0) ? 0
: lbl_1_data_1A4[temp_r31->unk0C];
spC8[temp_r31->unk0C]->unk34 = 5;
spC8[temp_r31->unk0C]->unk38 = 0;
temp_r31->unk18 = 9;
temp_r31->unk1C = 0;
if (lbl_1_bss_9C[(temp_r31->unk20) > 0 ? 5 : 6].unk00 < 3) {
lbl_1_bss_9C[(temp_r31->unk20) > 0 ? 5 : 6].unk04[lbl_1_bss_9C[(temp_r31->unk20) > 0 ? 5 : 6].unk00] = 0.0f;
lbl_1_bss_9C[(temp_r31->unk20) > 0 ? 5 : 6].unk00++;
}
if (lbl_1_data_1A4[temp_r31->unk0C] >= 50 || lbl_1_data_170[0] + lbl_1_data_170[1] >= 20) {
lbl_1_bss_68 =
(lbl_1_data_1A4[temp_r31->unk0C] >= 50) ? temp_r31->unk0C
: (lbl_1_data_1A4[0] > lbl_1_data_1A4[1]) ? 0
: (lbl_1_data_1A4[0] < lbl_1_data_1A4[1]) ? 1: 4;
spC8[1 - temp_r31->unk0C]->unk34 = 7;
spC8[1 - temp_r31->unk0C]->unk38 = 0;
}
}
break;
}
temp_r29->pos.x = temp_r26->pos.x = var_f18;
temp_r29->pos.y = var_f31;
temp_r29->pos.z = temp_r26->pos.z = spA8;
temp_r29->rot.x = temp_r26->rot.x = var_f23;
temp_r29->rot.y = spA4;
if (temp_r29->pos.y <= 0.0f || temp_r31->unk18 == 9) {
Hu3DModelAttrSet(arg0->model[i + 7], 1);
Hu3DModelAttrReset(arg0->model[i + 27], 1);
temp_r26->pos.y = (temp_r31->unk18 != 9) ? 0.0f : temp_r29->pos.y;
} else {
Hu3DModelAttrReset(arg0->model[i + 7], 1);
Hu3DModelAttrSet(arg0->model[i + 27], 1);
}
}
{
s32 var_r18 = lbl_1_data_25C;
float spD0[][4] = {
{ 2500.0f, 0.0f, -100.0f, -40.0f },
{ 2775.0f, 314.0f, -100.0f, -38.75f },
{ 875.0f, 116.0f, -100.0f, -15.0f },
{ 1625.0f, -416.0f, -340.0f, -30.25f },
{ 875.0f, 116.0f, -100.0f, -30.0f }
};
if (lbl_1_data_25C == -1) {
lbl_1_data_25C = 1;
lbl_1_bss_34 = 0;
lbl_1_bss_38 = 0.0f;
}
if (lbl_1_bss_80 == 1003 && lbl_1_bss_84 == 1) {
lbl_1_data_25C = 2;
lbl_1_bss_34 = 0;
lbl_1_bss_38 = 0.0f;
}
if (lbl_1_bss_80 == 1004 && lbl_1_data_25C != 0) {
lbl_1_data_25C = 0;
lbl_1_bss_34 = 1;
lbl_1_bss_38 = 0.0f;
}
if (lbl_1_bss_80 == 1007 && lbl_1_bss_84 == 1) {
lbl_1_data_25C = 3;
lbl_1_bss_34 = 0;
lbl_1_bss_38 = 0.0f;
}
if (var_r18 != lbl_1_data_25C && var_r18 != -1) {
lbl_1_data_260 = CZoom;
lbl_1_data_264 = Center.y;
lbl_1_data_268 = Center.z;
lbl_1_data_26C = CRot.x;
}
if (lbl_1_bss_38 < 1.0f) {
if (lbl_1_bss_34 == 0) {
lbl_1_bss_38 = 1.0 - 0.95 * (1.0f - lbl_1_bss_38);
var_f22 = lbl_1_bss_38;
} else {
lbl_1_bss_38 += 0.011111111111111112;
lbl_1_bss_38 = (lbl_1_bss_38 > 1.0f) ? 1.0f : lbl_1_bss_38;
var_f22 = 0.5 + -0.5 * cosd(180.0f * lbl_1_bss_38);
}
lbl_1_bss_38 = (lbl_1_bss_38 > 1.0f) ? 1.0f : lbl_1_bss_38;
CZoom = var_f22 * spD0[lbl_1_data_25C][0] + lbl_1_data_260 * (1.0f - var_f22);
Center.y = var_f22 * spD0[lbl_1_data_25C][1] + lbl_1_data_264 * (1.0f - var_f22);
Center.z = var_f22 * spD0[lbl_1_data_25C][2] + lbl_1_data_268 * (1.0f - var_f22);
CRot.x = var_f22 * spD0[lbl_1_data_25C][3] + lbl_1_data_26C * (1.0f - var_f22);
}
}
}
const s32 lbl_1_rodata_408[] = {
MAKE_MESSID(43, 3),
MAKE_MESSID(43, 4),
MAKE_MESSID(43, 5),
MAKE_MESSID(43, 6),
MAKE_MESSID(43, 7),
MAKE_MESSID(43, 8),
MAKE_MESSID(43, 9),
MAKE_MESSID(43, 10),
0
};
void fn_1_6DAC(void) {
UnkM448Struct_00* sp8[2];
s16 var_r29;
s16 temp_r31;
u32 temp_r26;
s32 i;
var_r29 = 0;
for (i = 0; i < 2; i++) {
sp8[i] = lbl_1_bss_8C[i]->data;
}
HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 60);
HuWinComKeyReset();
temp_r31 = HuWinExCreateStyled(-10000.0f, 60.0f, 280, 120, -1, 1);
HuWinExAnimIn(temp_r31);
HuWinBGTPLvlSet(temp_r31, 0.8f);
HuWinMesSpeedSet(temp_r31, 1);
HuWinDisablePlayerSet(temp_r31, 0xF
& ((sp8[0]->unk0C != -1) ? ~(1 << sp8[0]->unk0C) : 0xF)
& ((sp8[1]->unk0C != -1) ? ~(1 << sp8[1]->unk0C) : 0xF));
HuWinMesColSet(temp_r31, 0);
HuWinMesSet(temp_r31, MAKE_MESSID(43, 1));
if (((sp8[0]->unk0C == -1) || (sp8[0]->unk08 == -1)) && ((sp8[1]->unk0C == -1) || (sp8[1]->unk08 == -1))) {
HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 60);
}
HuWinMesWait(temp_r31);
if (sp8[0]->unk0C != -1 || sp8[1]->unk0C != -1) {
HuWinMesColSet(temp_r31, 0);
HuWinMesSet(temp_r31, MAKE_MESSID(43, 2));
if (sp8[0]->unk0C == -1 && sp8[1]->unk0C == -1) {
HuPrcSleep(60);
var_r29 = 1;
} else {
var_r29 = HuWinChoiceGet(temp_r31, 0);
}
} else {
var_r29 = 1;
}
if (var_r29 == 0) {
i = 0;
while ((temp_r26 = lbl_1_rodata_408[i++]) != 0) {
HuWinMesColSet(temp_r31, 0);
HuWinMesSet(temp_r31, temp_r26);
if ((sp8[0]->unk0C == -1 || sp8[0]->unk08 == -1) && (sp8[1]->unk0C == -1 || sp8[1]->unk08 == -1)) {
HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 60);
}
HuWinMesWait(temp_r31);
}
} else {
HuWinMesColSet(temp_r31, 0);
HuWinMesSet(temp_r31, MAKE_MESSID(43, 10));
if ((sp8[0]->unk0C == -1 || sp8[0]->unk08 == -1) && (sp8[1]->unk0C == -1 || sp8[1]->unk08 == -1)) {
HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 60);
}
HuWinMesWait(temp_r31);
}
HuWinExAnimOut(temp_r31);
HuWinExCleanup(temp_r31);
lbl_1_bss_10 = 0;
HuPrcEnd();
}
void fn_1_7148(omObjData* arg0) {
float temp_f31;
UnkM448Struct_00* spC[2];
s32 sp8;
s32 temp_r28;
s32 i;
for (i = 0; i < 13; i++) {
s32 sp14[] = {
0x0000078E,
0x0000078F,
0x00000790,
0x00000791,
0x00000792,
0x00000793,
0x00000794,
0x00000795,
0x00000796,
0x00000797,
0x00000798,
0x00000799,
0x0000079A
};
if (lbl_1_bss_9C[i].unk00 > 3) {
lbl_1_bss_9C[i].unk00 = 3;
}
if (lbl_1_bss_9C[i].unk00 > 0) {
sp8 = HuAudFXPlay(sp14[i]);
lbl_1_bss_9C[i].unk00--;
}
}
for (i = 0; i < 2; i++) {
spC[i] = lbl_1_bss_8C[i]->data;
}
if (omSysExitReq != 0 && WipeStatGet() == 0) {
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
arg0->func = fn_1_9B00;
}
switch (lbl_1_bss_80) {
case 1000:
if (WipeStatGet() == 0) {
lbl_1_bss_80++;
lbl_1_bss_84 = 0;
}
break;
case 1001:
lbl_1_bss_84++;
if (lbl_1_bss_84 == 1) {
Hu3DModelAttrReset(lbl_1_bss_88->model[1], 0x40000002);
Hu3DModelAttrReset(lbl_1_bss_88->model[2], 0x40000002);
}
if (lbl_1_bss_84 > 0 && lbl_1_bss_84 <= 40 && lbl_1_bss_84 % 10 == 0 && lbl_1_bss_9C[12].unk00 < 3) {
lbl_1_bss_9C[12].unk04[lbl_1_bss_9C[12].unk00] = 0.0f;
lbl_1_bss_9C[12].unk00++;
}
if (lbl_1_bss_84 == 50 && lbl_1_bss_9C[10].unk00 < 3) {
lbl_1_bss_9C[10].unk04[lbl_1_bss_9C[10].unk00] = 0.0f;
lbl_1_bss_9C[10].unk00++;
}
if (lbl_1_bss_84 == 200 && lbl_1_bss_9C[11].unk00 < 3) {
lbl_1_bss_9C[11].unk04[lbl_1_bss_9C[11].unk00] = 0.0f;
lbl_1_bss_9C[11].unk00++;
}
if (lbl_1_bss_84 >= 210) {
temp_f31 = (lbl_1_bss_84 - 210) / 30.0;
Hu3DModelAmbSet(lbl_1_bss_8C[0]->model[0], temp_f31, temp_f31, temp_f31);
Hu3DModelAmbSet(lbl_1_bss_8C[1]->model[0], temp_f31, temp_f31, temp_f31);
}
if (lbl_1_bss_84 > 240) {
lbl_1_bss_80++;
lbl_1_bss_84 = 0;
Hu3DModelAttrSet(lbl_1_bss_88->model[1], 1);
Hu3DModelAttrSet(lbl_1_bss_88->model[2], 1);
Hu3DModelAttrReset(lbl_1_bss_88->model[0], 1);
Hu3DModelAmbSet(lbl_1_bss_8C[0]->model[0], 1.0f, 1.0f, 1.0f);
Hu3DModelAmbSet(lbl_1_bss_8C[1]->model[0], 1.0f, 1.0f, 1.0f);
}
break;
case 1002:
lbl_1_bss_84++;
if (lbl_1_bss_84 > 60) {
lbl_1_bss_80++;
if (spC[0]->unk08 != -1 && spC[1]->unk08 != -1) {
lbl_1_bss_80++;
}
lbl_1_bss_7C = 0;
lbl_1_bss_84 = 0;
if (lbl_1_data_1A0 == -1) {
lbl_1_data_1A0 = HuAudSeqPlay(0x3D);
}
}
break;
case 1003:
lbl_1_bss_84++;
if (lbl_1_bss_84 == 1) {
HuPrcChildCreate(fn_1_6DAC, 100, 0x2000, 0, HuPrcCurrentGet());
lbl_1_bss_10 = 1;
} else if (lbl_1_bss_10 == 0) {
lbl_1_bss_80++;
lbl_1_bss_84 = 0;
}
break;
case 1004:
lbl_1_bss_84 += (lbl_1_bss_84 >= 2);
if (lbl_1_bss_84 == 5 && lbl_1_data_198 < 0) {
lbl_1_data_198 = MGSeqCreate(3, 0);
}
if (lbl_1_bss_84 >= 5 && lbl_1_data_1A0 == -1 && (MGSeqStatGet(lbl_1_data_198) & 0x10)) {
lbl_1_data_1A0 = HuAudSeqPlay(0x3E);
}
if (lbl_1_bss_84 >= 5 && MGSeqStatGet(lbl_1_data_198) == 0 && lbl_1_data_198 >= 0) {
lbl_1_bss_80++;
lbl_1_data_198 = -1;
lbl_1_bss_84 = 0;
}
break;
case 1005:
lbl_1_bss_84++;
if (lbl_1_data_19A != -1) {
MGSeqParamSet(lbl_1_data_19A, 1, ((lbl_1_bss_0 < 0 ? 0 : lbl_1_bss_0) + 59) / 60);
lbl_1_bss_0--;
if (lbl_1_bss_0 <= -30) {
MGSeqParamSet(lbl_1_data_19A, 2, -1);
lbl_1_data_19A = -1;
}
}
if (lbl_1_bss_68 != -1) {
lbl_1_bss_80 = 1006;
lbl_1_bss_84 = 0;
}
break;
case 1006:
lbl_1_bss_84++;
if (lbl_1_data_198 < 0 && lbl_1_bss_84 == 1) {
if (lbl_1_data_19A != -1) {
MGSeqParamSet(lbl_1_data_19A, 2, -1);
}
if (lbl_1_data_19C != -1) {
MGSeqParamSet(lbl_1_data_19C, 2, -1);
}
lbl_1_data_198 = MGSeqCreate(3, 1);
if (lbl_1_data_1A0 == -1) {
break;
}
HuAudSeqFadeOut(lbl_1_data_1A0, 100);
lbl_1_data_1A0 = -1;
} else if (MGSeqStatGet(lbl_1_data_198) == 0) {
lbl_1_bss_80++;
lbl_1_bss_84 = 0;
}
break;
case 1007:
lbl_1_bss_84++;
if (lbl_1_bss_84 == 1) {
if (lbl_1_bss_68 != 4) {
if (spC[lbl_1_bss_68]->unk08 != -1) {
HuAudSStreamPlay(1);
} else {
HuAudSStreamPlay(3);
}
temp_r28 = spC[lbl_1_bss_68]->unk04;
if (_CheckFlag(FLAG_ID_MAKE(1, 12)) == 0) {
GWPlayer[temp_r28].coin_win = 10;
}
} else if (lbl_1_bss_68 == 4) {
HuAudSStreamPlay(4);
}
}
if (210.0f < lbl_1_bss_84) {
lbl_1_data_198 = -1;
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
arg0->func = fn_1_9B00;
}
break;
}
}
void fn_1_7DC4(ModelData* model, ParticleData* particle, Mtx matrix) {
HsfanimStruct01* var_r31;
s16 i;
if (particle->unk_34 == 0) {
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
var_r31->unk00_s16 = i * 2 + 100;
var_r31->unk40.a = 0;
var_r31->unk2C = 0.0f;
}
}
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
if (!var_r31->unk2C) {
break;
}
}
var_r31 = particle->unk_48;
for (i = 0; i < particle->unk_30; i++, var_r31++) {
if (var_r31->unk00_s16 == 100) {
var_r31->unk00_s16 = (lbl_1_data_1DC[0] == 0.0f && lbl_1_data_1DC[1] == 0.0f && lbl_1_data_1DC[2] == 0.0f) ? 0 : var_r31->unk00_s16;
var_r31->unk34.x = lbl_1_data_1DC[0] + 75.0 * (rand8() / 255.0);
var_r31->unk34.y = lbl_1_data_1DC[1] + 75.0 * (rand8() / 255.0);
var_r31->unk34.z = lbl_1_data_1DC[2] + 75.0 * (rand8() / 255.0);
var_r31->unk40.r = 0xFF;
var_r31->unk40.g = 0xF0;
var_r31->unk40.b = 0xA0;
var_r31->unk40.a = 0xFF;
var_r31->unk30 = 0.785f;
var_r31->unk2C = 40.0f;
}
if (var_r31->unk00_s16 <= 100) {
var_r31->unk34.y -= 3.0f;
var_r31->unk2C = ((var_r31->unk00_s16 > 50) ? (var_r31->unk00_s16 - 50) / 50.0 : 0.0)
* (rand8() * 80 / 255.0);
}
if (var_r31->unk00_s16 == 0) {
var_r31->unk2C = 0.0f;
}
var_r31->unk00_s16 -= (var_r31->unk00_s16 > 0);
}
}
void fn_1_81C0(omObjData* arg0) {
UnkM448Struct_00* temp_r26;
UnkM448Struct_00* temp_r23;
s32 temp_r29;
s32 temp_r25;
s32 i, j, k;
s32 var_r27;
memset(lbl_1_bss_16C, 0, sizeof(lbl_1_bss_16C));
arg0->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M448, 0));
Hu3DModelShadowMapSet(arg0->model[0]);
Hu3DModelAttrSet(arg0->model[0], 0x40000001);
Hu3DModelLayerSet(arg0->model[0], 0);
Hu3DMotionTimeSet(arg0->model[0], 20.0f);
Hu3DModelAttrSet(arg0->model[0], 1);
arg0->model[6] = Hu3DHookFuncCreate(fn_1_4FC);
Hu3DModelLayerSet(arg0->model[6], 6);
arg0->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M448, 1));
Hu3DModelShadowMapSet(arg0->model[1]);
Hu3DModelLayerSet(arg0->model[1], 0);
Hu3DModelPosSet(arg0->model[1], 0.0f, 0.0f, 0.0f);
Hu3DModelAttrSet(arg0->model[1], 0x40000002);
arg0->model[2] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M448, 2));
Hu3DModelShadowMapSet(arg0->model[2]);
Hu3DModelLayerSet(arg0->model[2], 0);
Hu3DModelPosSet(arg0->model[2], 0.0f, 0.0f, 0.0f);
Hu3DModelAttrSet(arg0->model[2], 0x40000002);
{
s32 sp9C[] = {
DATA_MAKE_NUM(DATADIR_M448, 9),
DATA_MAKE_NUM(DATADIR_M448, 10),
DATA_MAKE_NUM(DATADIR_M448, 11),
DATA_MAKE_NUM(DATADIR_M448, 12),
DATA_MAKE_NUM(DATADIR_M448, 13),
DATA_MAKE_NUM(DATADIR_M448, 14),
DATA_MAKE_NUM(DATADIR_M448, 16),
DATA_MAKE_NUM(DATADIR_M448, 15),
DATA_MAKE_NUM(DATADIR_M448, 17)
};
for (i = 0; i < 2; i++) {
temp_r26 = lbl_1_bss_8C[i]->data;
arg0->model[i + 3] = Hu3DModelCreateFile(sp9C[(temp_r26->unk08 == -1) ? 8 : temp_r26->unk08]);
Hu3DModelShadowMapSet(arg0->model[i + 3]);
Hu3DModelLayerSet(arg0->model[i + 3], 0);
Hu3DModelRotSet(arg0->model[i + 3], 0.0f, (temp_r26->unk08 == -1) ? (1 - i) * 180 : i * 180, 0.0f);
}
}
{
s32 sp110[] = {
-10, -5, -5, 3, 3, 3, 3, 3, 5, 5,
5, 5, 5, 10, 10, 10, 10, 10, 20, 20
};
s32 spC0[] = {
0, 1, 1, 2, 2, 2, 2, 2, 3, 3,
3, 3, 3, 4, 4, 4, 4, 4, 5, 5
};
s32 sp34[] = {
DATA_MAKE_NUM(DATADIR_M448, 3),
DATA_MAKE_NUM(DATADIR_M448, 4),
DATA_MAKE_NUM(DATADIR_M448, 5),
DATA_MAKE_NUM(DATADIR_M448, 6),
DATA_MAKE_NUM(DATADIR_M448, 7),
DATA_MAKE_NUM(DATADIR_M448, 8)
};
s32 sp1C[] = { -1, -1, -1, -1, -1, -1 };
for (i = 0; i < 4; i++) {
for (j = 0; j < 5; j++) {
temp_r29 = j + i * 5;
lbl_1_bss_16C[temp_r29].unk00 = j;
lbl_1_bss_16C[temp_r29].unk04 = i;
lbl_1_bss_16C[temp_r29].unk08 = 0;
lbl_1_bss_16C[temp_r29].unk0C = -1;
lbl_1_bss_16C[temp_r29].unk18 = 1;
temp_r25 = 19 - temp_r29;
lbl_1_bss_16C[temp_r29].unk20 = sp110[temp_r25];
sp110[temp_r25] = 0;
lbl_1_bss_16C[temp_r29].unk1C = 0;
for (k = 0; k < 2; k++) {
var_r27 = (k == 0) ? 7 : 27;
if (sp1C[spC0[temp_r25]] == -1) {
if (k == 1) {
sp1C[spC0[temp_r25]] = temp_r29;
}
arg0->model[var_r27 + temp_r29] = Hu3DModelCreateFile(sp34[spC0[temp_r25]]);
} else {
arg0->model[var_r27 + temp_r29] = Hu3DModelLink(arg0->model[var_r27 + sp1C[spC0[temp_r25]]]);
}
Hu3DModelPosSet(arg0->model[var_r27 + temp_r29],
100.0 + 200.0 * (lbl_1_bss_16C[temp_r29].unk00 - 2.5),
(k == 0) ? 4000 : 0,
100.0 + 200.0 * (lbl_1_bss_16C[temp_r29].unk04 - 2.0));
if (k == 0) {
Hu3DModelShadowSet(arg0->model[var_r27 + temp_r29]);
} else {
Hu3DModelAttrSet(arg0->model[var_r27 + temp_r29], 1);
Hu3DModelShadowMapSet(arg0->model[var_r27 + temp_r29]);
}
}
}
}
}
arg0->model[5] = Hu3DParticleCreate(HuSprAnimRead(HuDataReadNum(DATA_MAKE_NUM(DATADIR_M448, 30), MEMORY_DEFAULT_NUM)), 70);
Hu3DModelPosSet(arg0->model[5], 0.0f, 0.0f, 0.0f);
Hu3DModelScaleSet(arg0->model[5], 1.0f, 1.0f, 1.0f);
Hu3DModelLayerSet(arg0->model[5], 3);
Hu3DModelAttrReset(arg0->model[5], 1);
Hu3DParticleColSet(arg0->model[5], 0xFF, 0xFF, 0xFF);
Hu3DParticleScaleSet(arg0->model[5], 1.0f);
Hu3DParticleHookSet(arg0->model[5], fn_1_7DC4);
Hu3DParticleCntSet(arg0->model[5], 0);
Hu3DParticleBlendModeSet(arg0->model[5], 1);
for (i = 0; i < 10; i++) {
s32 sp14[] = { 100, 485 };
s32 sp74[] = { 0, 0, 16, -4, -36, 0, 0, 16, -4, -36 };
s32 sp4C[] = { 0, 0, 2, 2, -2, 0, 0, 2, 2, -2 };
if (lbl_1_data_0[i] == DATADIR_MGCONST) {
temp_r23 = lbl_1_bss_8C[i == 4 ? 0 : (i == 9 ? 1 : 0)]->data;
lbl_1_data_28[i] = espEntry((temp_r23->unk08 == -1) ? DATA_MAKE_NUM(DATADIR_M448, 29) : DATA_MAKE_NUM(lbl_1_data_0[i], temp_r23->unk08), 0, 0);
} else {
lbl_1_data_28[i] = espEntry(lbl_1_data_0[i], 0, 0);
}
espDrawNoSet(lbl_1_data_28[i], 0);
espAttrSet(lbl_1_data_28[i], 5);
espBankSet(lbl_1_data_28[i], 0);
espPriSet(lbl_1_data_28[i], 128 - i);
espPosSet(lbl_1_data_28[i], sp74[i] + sp14[i < 5 ? 0 : 1], sp4C[i] + 70);
if (((i >= 5) ? i - 5 : i) != 0) {
(void) 1; // Required to match.
} else {
espTPLvlSet(lbl_1_data_28[i], 0.5f);
espColorSet(lbl_1_data_28[i], 0, 0, 0);
}
}
arg0->func = fn_1_4310;
}
void fn_1_8DD0(omObjData* arg0) {
s32 var_r28;
s32 var_r27;
UnkM448Struct_00* temp_r31;
UnkM448Struct_00* sp30;
s32 var_r26;
s32 i;
var_r28 = -1;
var_r27 = -1;
temp_r31 = arg0->data;
sp30 = lbl_1_bss_8C[1 - arg0->work[0]]->data;
memset(temp_r31, 0, sizeof(*temp_r31));
temp_r31->unk00 = arg0->work[0];
if (GWPlayerCfg->character == 14 || GWPlayerCfg[1].character == 14 || GWPlayerCfg[2].character == 14 || GWPlayerCfg[3].character == 14) {
for (i = 0; i < 4; i++) {
if (GWPlayerCfg[i].character == 14) {
var_r28 = i;
}
}
var_r27 = (GWPlayerCfg[var_r28].group == 0) ? 1 : 0;
if (temp_r31->unk00 == 0) {
temp_r31->unk04 = var_r27;
var_r26 = var_r28;
} else {
temp_r31->unk04 = var_r28;
var_r26 = var_r27;
}
} else {
temp_r31->unk04 = (GWPlayerCfg[0].group == temp_r31->unk00) ? 0
: GWPlayerCfg[1].group == temp_r31->unk00 ? 1
: GWPlayerCfg[2].group == temp_r31->unk00 ? 2
: GWPlayerCfg[3].group == temp_r31->unk00 ? 3 : 4;
var_r26 = (GWPlayerCfg[0].group == 1 - temp_r31->unk00) ? 0
: (GWPlayerCfg[1].group == 1 - temp_r31->unk00) ? 1
: (GWPlayerCfg[2].group == 1 - temp_r31->unk00) ? 2
: (GWPlayerCfg[3].group == 1 - temp_r31->unk00) ? 3 : 4;
}
if (temp_r31->unk04 == 4) {
OSReport("m448:wrong player group\n");
temp_r31->unk04 = temp_r31->unk00;
}
temp_r31->unk08 = (var_r28 != -1 && temp_r31->unk00 == 1) ? -1
: GWPlayerCfg[temp_r31->unk04].character;
temp_r31->unk0C = (temp_r31->unk08 == -1 || GWPlayerCfg[temp_r31->unk04].iscom) ? -1
: GWPlayerCfg[temp_r31->unk04].pad_idx;
temp_r31->unk10 = (temp_r31->unk0C != -1) ? 0
: GWPlayerCfg[temp_r31->unk04].diff;
temp_r31->unk34 = 0;
if (temp_r31->unk08 != -1) {
arg0->model[0] = CharModelCreate(temp_r31->unk08, 2);
} else {
arg0->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M448, 18));
}
Hu3DModelLayerSet(arg0->model[0], 0);
CharModelLayerSetAll2(1);
Hu3DModelShadowSet(arg0->model[0]);
Hu3DModelAmbSet(arg0->model[0], 0.0f, 0.0f, 0.0f);
for (i = 0; i < 11; i++) {
if (temp_r31->unk08 != -1) {
arg0->motion[i] = CharModelMotionCreate(temp_r31->unk08, lbl_1_data_50[i]);
} else {
arg0->motion[i] = Hu3DJointMotionFile(arg0->model[0], lbl_1_data_7C[i]);
}
}
temp_r31->unk20 = (temp_r31->unk08 != -1) ? 0 : 0;
temp_r31->unk24 = -1;
Hu3DMotionSet(arg0->model[0], arg0->motion[temp_r31->unk20]);
if (temp_r31->unk08 != -1) {
Hu3DMotionTimeSet(arg0->model[0], (temp_r31->unk00 == 0) ? 0 : 80);
Hu3DModelAttrSet(arg0->model[0], 0x40000001);
} else {
lbl_1_bss_20 = CharModelEffectNpcInit(arg0->model[0], arg0->motion[2], 1, 14);
lbl_1_bss_24 = CharModelEffectNpcInit(arg0->model[0], arg0->motion[6], 5, 14);
}
arg0->trans.x = lbl_1_data_1BC[temp_r31->unk00][0];
arg0->trans.y = lbl_1_data_1BC[temp_r31->unk00][1];
arg0->trans.z = 0.0f;
arg0->rot.y = (temp_r31->unk00 == 0) ? 90 : 270;
arg0->rot.y = (temp_r31->unk08 != -1) ? 0
: (temp_r31->unk00 == 0) ? 90 : 270;
arg0->scale.x = arg0->scale.y = arg0->scale.z = 1.0f;
arg0->rot.x = arg0->rot.z = 0.0f;
arg0->func = fn_1_1338;
}
void fn_1_9508(omObjData* arg0) {
lbl_1_bss_80 = 1000;
lbl_1_bss_84 = 0;
lbl_1_bss_78 = 0;
lbl_1_bss_74 = 0;
lbl_1_bss_64 = GXGetTexBufferSize(640, 480, GX_TF_RGB565, GX_FALSE, 0);
lbl_1_bss_60 = GXGetTexBufferSize(160, 120, GX_TF_RGB565, GX_FALSE, 0U);
lbl_1_bss_28 = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_64, MEMORY_DEFAULT_NUM);
memset(lbl_1_bss_28, 0, lbl_1_bss_64);
lbl_1_bss_2C = HuMemDirectMallocNum(HEAP_SYSTEM, lbl_1_bss_60, MEMORY_DEFAULT_NUM);
memset(lbl_1_bss_2C, 0, lbl_1_bss_60);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
arg0->func = fn_1_7148;
}
void ObjectSetup(void) {
omObjData* var_r30;
s32 i;
OSReport("******* M448 ObjectSetup *********\n");
lbl_1_bss_70 = omInitObjMan(600, 0x2000);
omGameSysInit(lbl_1_bss_70);
Hu3DCameraCreate(1);
Hu3DCameraPerspectiveSet(1, 30.0f, 20.0f, 25000.0f, 1.2f);
Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
CZoom = 2500.0f;
Center.x = 0.0f;
Center.y = 0.0f;
Center.z = -100.0f;
CRot.x = -40.0f;
CRot.y = 0.0f;
CRot.z = 0.0f;
{
Vec sp3C = { 0.0f, 10000.0f, 0.0f };
Vec sp30 = { 0.0f, -1.0f, 0.0f };
GXColor sp8 = { 0xFF, 0xFF, 0xFF, 0xFF };
lbl_1_bss_6C = Hu3DGLightCreateV(&sp3C, &sp30, &sp8);
Hu3DGLightStaticSet(lbl_1_bss_6C, 1);
Hu3DGLightInfinitytSet(lbl_1_bss_6C);
lbl_1_bss_6C = Hu3DGLightCreateV(&sp3C, &sp30, &sp8);
Hu3DGLightStaticSet(lbl_1_bss_6C, 1);
Hu3DGLightInfinitytSet(lbl_1_bss_6C);
}
{
Vec sp24;
Vec sp18;
Vec spC;
sp24.x = 0.0f;
sp24.y = 10000.0f;
sp24.z = 0.0f;
sp18.x = 0.0f;
sp18.y = 1.0f;
sp18.z = 0.0f;
spC.x = 0.0f;
spC.y = 0.0f;
spC.z = 0.5f;
Hu3DShadowCreate(8.0f, 9000.0f, 11500.0f);
Hu3DShadowTPLvlSet(0.75f);
Hu3DShadowPosSet(&sp24, &sp18, &spC);
}
lbl_1_data_198 = -1;
lbl_1_bss_68 = -1;
HuWinInit(1);
lbl_1_bss_88 = omAddObjEx(lbl_1_bss_70, 101, 47, 0, 1, fn_1_81C0);
for (i = 0; i < 2; i++) {
var_r30 = lbl_1_bss_8C[i] = omAddObjEx(lbl_1_bss_70, 100, 1, 11, 0, fn_1_8DD0);
var_r30->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkM448Struct_00), MEMORY_DEFAULT_NUM);
var_r30->work[0] = i;
}
lbl_1_bss_94 = omAddObjEx(lbl_1_bss_70, 32730, 0, 0, -1, omOutView);
lbl_1_bss_98 = omAddObjEx(lbl_1_bss_70, 103, 0, 0, -1, fn_1_9508);
}
void fn_1_9B00(omObjData* arg0) {
s32 i;
UnkM448Struct_00* temp_r30;
if (WipeStatGet() != 0) {
return;
}
if (lbl_1_bss_28) {
HuMemDirectFree(lbl_1_bss_28);
}
lbl_1_bss_28 = NULL;
if (lbl_1_bss_2C) {
HuMemDirectFree(lbl_1_bss_2C);
}
lbl_1_bss_2C = NULL;
for (i = 0; i < 2; i++) {
temp_r30 = lbl_1_bss_8C[i]->data;
if (temp_r30->unk08 != -1) {
CharModelKill(temp_r30->unk08);
}
}
if (lbl_1_data_198 >= 0) {
MGSeqKill(lbl_1_data_198);
}
MGSeqKillAll();
HuAudAllStop();
omOvlReturnEx(1, 1);
}