marioparty4/src/REL/m463Dll/main.c
2025-02-04 14:39:32 -05:00

1388 lines
50 KiB
C
Executable file

// Panel Panic 9 Player
#include "game/audio.h"
#include "game/chrman.h"
#include "game/data.h"
#include "game/esprite.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/printfunc.h"
#include "game/sprite.h"
#include "game/window.h"
#include "game/wipe.h"
#include "ext_math.h"
typedef struct {
/* 0x00 */ s32 unk00;
/* 0x04 */ s32 unk04;
/* 0x08 */ float unk08;
/* 0x0C */ s32 unk0C;
} StructBss51C; // Size 0x10
typedef struct {
/* 0x00 */ s32 unk00;
/* 0x04 */ float unk04[3];
} StructBss35C; // Size 0x10
typedef struct {
/* 0x00 */ s32 player;
/* 0x00 */ s32 playerCfg;
/* 0x08 */ s32 character;
/* 0x0C */ s32 padIdx;
/* 0x10 */ s32 diff;
/* 0x14 */ s32 unk14;
/* 0x18 */ s32 unk18;
/* 0x1C */ s32 unk1C;
/* 0x20 */ s32 unk20;
/* 0x24 */ s32 unk24;
/* 0x28 */ float unk28;
/* 0x2C */ Vec unk2C;
/* 0x38 */ s32 unk38;
/* 0x3C */ s32 unk3C;
/* 0x40 */ s32 unk40;
/* 0x44 */ s32 unk44;
/* 0x48 */ s32 unk48;
/* 0x48 */ s32 unk4C;
/* 0x50 */ s32 unk50;
/* 0x54 */ s16 parMan;
/* 0x58 */ s32 parManTimer;
/* 0x5C */ s32 unk5C;
} M463PlayerData; // Size 0x60
typedef struct {
/* 0x00 */ s32 unk00;
/* 0x04 */ s32 unk04;
/* 0x08 */ float unk08;
/* 0x0C */ float unk0C;
/* 0x10 */ float unk10;
/* 0x14 */ float unk14;
} StructData134; // Size 0x18
s16 fn_1_4474(void);
void fn_1_659C(omObjData *arg0);
StructBss51C lbl_1_bss_51C[9];
StructBss35C lbl_1_bss_35C[28];
omObjData *lbl_1_bss_358;
omObjData *lbl_1_bss_354;
omObjData *playerObjs[9];
omObjData *lbl_1_bss_32C;
HsfanimStruct00 lbl_1_bss_5C[9];
s32 lbl_1_bss_58;
s32 lbl_1_bss_54;
s32 lbl_1_bss_50; //// TODO: setup enum when what this is gets figured out
char lbl_1_bss_4C[4]; // unused
s32 lbl_1_bss_48;
s32 lbl_1_bss_44;
Process *lbl_1_bss_40;
s32 lbl_1_bss_3C;
s32 lbl_1_bss_38;
s32 lbl_1_bss_34;
char lbl_1_bss_30[4]; // unused
float lbl_1_bss_2C;
float lbl_1_bss_28;
float lbl_1_bss_24;
float lbl_1_bss_20;
s32 lbl_1_bss_1C;
s32 lbl_1_bss_18;
s32 lbl_1_bss_14;
char lbl_1_bss_E[6]; // unused
s16 lbl_1_bss_C;
char lbl_1_bss_8[4]; // unused
s32 lbl_1_bss_4;
s32 lbl_1_bss_0;
s32 lbl_1_data_0[9] = { DATA_MAKE_NUM(DATADIR_M458, 38), DATA_MAKE_NUM(DATADIR_M458, 38), DATA_MAKE_NUM(DATADIR_M458, 38),
DATA_MAKE_NUM(DATADIR_M458, 38), DATA_MAKE_NUM(DATADIR_M458, 38), DATA_MAKE_NUM(DATADIR_M458, 38), DATA_MAKE_NUM(DATADIR_M458, 38),
DATA_MAKE_NUM(DATADIR_M458, 38), DATA_MAKE_NUM(DATADIR_M458, 38) };
s32 lbl_1_data_24[9] = { 0 };
s32 lbl_1_data_48[9] = {
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, 47),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 26),
DATA_MAKE_NUM(DATADIR_M458, 0),
DATA_MAKE_NUM(DATADIR_MARIOMOT, 23),
};
u32 lbl_1_data_6C[9] = { 0, 0, 0, 0, 0, 0, 0, 1, 0 };
u32 lbl_1_data_90[] = { DATA_MAKE_NUM(DATADIR_BKOOPA, 8), 0, 0, DATA_MAKE_NUM(DATADIR_BKOOPA, 10), 0, DATA_MAKE_NUM(DATADIR_M458, 42),
DATA_MAKE_NUM(DATADIR_M458, 40), DATA_MAKE_NUM(DATADIR_M458, 41), DATA_MAKE_NUM(DATADIR_M458, 39) };
u8 lbl_1_data_B4[9] = { 0, 0, 0, 1, 1, 1, 0, 1, 1 };
u8 lbl_1_data_BD[9] = { 0, 0, 0, 1, 1, 1, 0, 1, 1 };
s32 lbl_1_data_C8[9] = { 8, 8, 8, 0, 0, 8, 8, 8, 8 };
s32 lbl_1_data_EC[9] = { 0, 0, 0, 0, 3, 0, 0, 0, 0 };
s32 lbl_1_data_110[9] = { 8, 8, 8, 8, 8, 8, 8, 8, 8 };
StructData134 lbl_1_data_134 = { 0 };
s16 lbl_1_data_14C = -1;
s16 lbl_1_data_14E = -1;
s32 lbl_1_data_150 = -1;
s32 lbl_1_data_154 = -1;
// unused
float lbl_1_data_158[] = { -90.0f, 0.0f, 525.0f, 180.0f, 90.0f, 0.0f, 525.0f, 180.0f };
void fn_1_A0(void)
{
if (HuPadBtnDown[0] & PAD_BUTTON_B) {
Center.x = playerObjs[0]->trans.x;
Center.y = playerObjs[0]->trans.y;
Center.z = playerObjs[0]->trans.z;
}
Center.x += 10.0 * (((HuPadBtn[0] & PAD_BUTTON_RIGHT) != 0) - ((HuPadBtn[0] & PAD_BUTTON_LEFT) != 0));
Center.z -= 10.0 * (((HuPadBtn[0] & PAD_BUTTON_UP) != 0) - ((HuPadBtn[0] & PAD_BUTTON_DOWN) != 0));
Center.y += 30.0 * ((HuPadTrigL[0] - HuPadTrigR[0]) / 128.0);
CZoom += 25.0 * (((HuPadBtn[0] & PAD_BUTTON_X) != 0) - ((HuPadBtn[0] & PAD_BUTTON_Y) != 0));
CRot.y += HuPadSubStkX[0] / 16.0;
CRot.x += HuPadSubStkY[0] / -16.0;
print8(64, 392, 1.0f, "%f,%f,%f", Center.x, Center.y, Center.z);
print8(64, 408, 1.0f, "%f,%f,%f", CRot.x, CRot.y, CRot.z);
print8(64, 424, 1.0f, "%f", CZoom);
}
s32 lbl_1_data_184 = -1;
void fn_1_4C8(omObjData *object)
{
ModelData *model;
ModelData *model2;
float temp_f31;
float temp_f30;
float var_f28;
float temp_f27;
float temp_f26;
float temp_f25;
float var_f24;
float var_f23;
float var_f22;
float var_f21;
float var_f20;
M463PlayerData *data;
s16 var_r28;
s32 temp_r27;
s32 var_r26;
s32 var_r25;
s32 var_r23;
s32 var_r22;
M463PlayerData *iPlayerData;
s32 var_r20;
s32 var_r19;
M463PlayerData *temp_r18;
s32 player;
float sp180[2];
s32 spE0;
s32 spDC;
s32 spD8;
s32 spD4;
s32 spD0;
s32 spCC;
s32 spC8;
M463PlayerData *spC4;
s32 spC0;
s32 spBC;
M463PlayerData *spB8;
s32 spB4;
u32 spB0;
float spAC;
s32 spA8;
s32 spA4;
s32 spA0;
M463PlayerData *sp9C;
ModelData *sp98;
float sp94;
float sp90;
s32 sp8C;
s32 sp88;
data = object->data;
var_f23 = 0.0f;
var_f22 = 0.0f;
var_f28 = 0.0f;
var_r22 = 0;
var_r28 = -1;
data->unk2C.x = data->unk2C.z = 0.0f;
if (lbl_1_bss_50 == 1005 && data->unk18 == 3 && data->unk1C >= 360) {
if (data->unk1C == 360) {
data->unk14 = rand8() % 15;
}
if (data->padIdx != -1) {
var_r22 = (HuPadBtnDown[data->padIdx] & PAD_BUTTON_A) ? 1 : 0;
}
else {
data->unk14 += (data->unk14 < 0x10000);
if (data->unk14 == 30) {
var_r22 = 1;
}
}
}
if (data->player < 4 && lbl_1_bss_50 == 1002) {
var_r26 = 0;
var_r25 = 0;
if (data->padIdx != -1) {
var_r26 = (HuPadStkX[data->padIdx] < -20) ? -1 : (HuPadStkX[data->padIdx] > 20) ? 1 : 0;
var_r25 = (-HuPadStkY[data->padIdx] < -20) ? -1 : (-HuPadStkY[data->padIdx] > 20) ? 1 : 0;
var_r22 = (HuPadBtnDown[data->padIdx] & PAD_BUTTON_A) ? 1 : 0;
}
else {
if (lbl_1_bss_54 == 1) {
data->unk14 = rand8() % 64 + 30;
}
data->unk14 -= (data->unk14 > 0);
if (data->unk14 == 1) {
var_r26 = (data->unk3C > 0 ? -1 : 1) * (rand8() % 2);
var_r25 = (data->unk40 > 0 ? -1 : 1) * (rand8() % 2);
}
if (data->unk14 == 0) {
var_r22 = (rand8() % 64 == 1) ? 1 : 0;
}
}
if (lbl_1_bss_54 >= 50 || data->unk50 != 0) {
var_r26 = var_r25 = 0;
}
for (player = 0; player < 4; player++) {
iPlayerData = playerObjs[player]->data;
spD0 = 0;
spCC = 0;
if (player != data->player) {
if (fabs(500.0 * data->unk3C - object->trans.x) < 10.0) {
spE0 = spDC = (object->trans.x < -250.0) ? -1 : (object->trans.x > 250.0) ? 1 : 0;
}
else {
spE0 = (object->trans.x < 0.0f) ? -1 : 0;
spDC = spE0 + 1;
}
if (fabs(500.0 * data->unk40 - object->trans.z) < 10.0) {
spD8 = spD4 = (object->trans.z < -250.0) ? -1 : (object->trans.z > 250.0) ? 1 : 0;
}
else {
spD8 = (object->trans.z < 0.0f) ? -1 : 0;
spD4 = spD8 + 1;
}
for (var_r20 = spE0; var_r20 <= spDC; var_r20++) {
for (var_r19 = spD8; var_r19 <= spD4; var_r19++) {
if (iPlayerData->unk38 == (1 + var_r20 + var_r26) + (1 + var_r19 + var_r25) * 3) {
var_r26 = var_r25 = 0;
}
if (iPlayerData->unk38 == (1 + var_r20 + var_r26) + (1 + var_r19) * 3) {
var_r26 = 0;
}
if (iPlayerData->unk38 == (1 + var_r20) + (1 + var_r19 + var_r25) * 3) {
var_r25 = 0;
}
}
}
}
}
if (var_r26 * (500.0 * data->unk3C - object->trans.x) < 0.0) {
data->unk3C += var_r26;
}
if (fabs(500.0 * data->unk3C - object->trans.x) < 10.0 && var_r26 != 0 && data->unk3C + var_r26 >= -1
&& data->unk3C + var_r26 <= 1) {
data->unk3C += var_r26;
}
var_f23 = ((500.0 * data->unk3C - object->trans.x) / 0.25) / 1.75;
if (var_r25 * (500.0 * data->unk40 - object->trans.z) < 0.0) {
data->unk40 += var_r25;
}
if (fabs(500.0 * data->unk40 - object->trans.z) < 10.0 && var_r25 != 0 && data->unk40 + var_r25 >= -1
&& data->unk40 + var_r25 <= 1) {
data->unk40 += var_r25;
}
var_f22 = ((500.0 * data->unk40 - object->trans.z) / -0.25) / 1.75;
data->unk38 = (data->unk3C + 1) + (data->unk40 + 1) * 3;
}
if (data->unk18 == 0) {
if (lbl_1_bss_50 > (data->player < 4 ? 1001 : 1003) && lbl_1_bss_50 < 1006) {
temp_f31 = 0.25 * var_f23;
temp_f30 = 0.25 * -var_f22;
{
Vec sp1A0 = { 0.0f, 0.0f, 0.0f };
Mtx sp1D0;
sp1A0.x = temp_f31;
sp1A0.z = temp_f30;
MTXRotRad(sp1D0, 'y', MTXDegToRad(CRot.y));
MTXMultVec(sp1D0, &sp1A0, &sp1A0);
temp_f31 = sp1A0.x;
temp_f30 = sp1A0.z;
var_f28 = sqrtf(temp_f31 * temp_f31 + temp_f30 * temp_f30);
if (var_f28 >= 0.5f) {
if (var_f28 < 10.0f) {
data->unk2C.x = temp_f31;
data->unk2C.z += temp_f30;
}
else {
temp_f31 /= var_f28;
temp_f30 /= var_f28;
var_f28 = 10.0f;
data->unk2C.x = temp_f31 * var_f28;
data->unk2C.z = temp_f30 * var_f28;
}
data->unk28 = var_f28;
object->rot.y = atan2d(data->unk2C.x, data->unk2C.z);
if (data->unk28 >= 8.0f) {
var_r28 = 2;
}
else {
var_r28 = 2;
}
}
else {
var_r28 = 0;
}
}
}
}
object->trans.x += 1.75f * data->unk2C.x;
object->trans.z += 1.75f * data->unk2C.z;
switch (lbl_1_bss_50) {
case 1001:
case 1003:
if (lbl_1_bss_50 != (data->player < 4 ? 1001 : 1003)) {
break;
}
if (lbl_1_bss_54 == 0) {
Hu3DModelAttrReset(object->model[0], HU3D_ATTR_DISPOFF);
if (data->player < 4) {
data->unk38 = (data->player == 0) ? 0 : (data->player == 1) ? 2 : (data->player == 2) ? 6 : 8;
data->unk3C = data->unk38 % 3 - 1;
data->unk40 = data->unk38 / 3 - 1;
object->trans.x = 500.0 * data->unk3C;
object->trans.z = 500.0 * data->unk40;
}
else {
do {
data->unk38 = rand8() % 9;
for (spC8 = 0; spC8 < data->player; spC8++) {
spC4 = playerObjs[spC8]->data;
if (data->unk38 == spC4->unk38) {
break;
}
}
} while (spC8 != data->player);
data->unk3C = data->unk38 % 3 - 1;
data->unk40 = data->unk38 / 3 - 1;
object->trans.x = 500.0 * data->unk3C;
object->trans.z = 500.0 * data->unk40;
}
}
if (lbl_1_bss_54 <= 30) {
if (data->character == -1) {
Hu3DMotionTimeSet(object->model[0], 138.0f);
}
object->trans.y = 2400.0 * (1.0 - lbl_1_bss_54 / 30.0);
}
if (data->character != -1 && lbl_1_bss_54 == 30) {
var_r28 = 4;
}
if (lbl_1_bss_54 == (data->character != -1 ? 10 : 60) + 30) {
var_r28 = 0;
}
if (lbl_1_bss_54 == 30) {
lbl_1_data_134.unk04 += 50;
}
if (lbl_1_bss_54 == 30 && (data->player == 0 || data->player == 4)) {
HuAudFXPlay(0x33D);
}
break;
case 1002:
if (lbl_1_bss_54 != 0 && data->player < 4 && (var_r22 != 0 || lbl_1_bss_0 == 0) && data->unk50 == 0) {
data->unk50 = 1;
lbl_1_bss_14++;
lbl_1_bss_51C[data->unk38].unk08 = 83.333336f;
}
if (data->player != 0) {
break;
}
if (lbl_1_bss_54 == 0) {
lbl_1_bss_0 = 300;
lbl_1_data_14E = MGSeqTimerCreate(10);
HuWinMesMaxSizeGet(1, sp180, MAKE_MESSID(40, 25));
lbl_1_bss_C = HuWinCreate(-10000.0f, 400.0f, sp180[0], sp180[1], 1);
HuWinBGTPLvlSet(lbl_1_bss_C, 0.0f);
HuWinMesSpeedSet(lbl_1_bss_C, 0);
HuWinMesSet(lbl_1_bss_C, MAKE_MESSID(40, 25));
}
lbl_1_bss_0--;
if (lbl_1_data_14E != -1) {
MGSeqParamSet(lbl_1_data_14E, 1, (lbl_1_bss_0 + 59) / 60);
}
if (lbl_1_bss_14 >= 4) {
lbl_1_bss_54 = 50;
MGSeqParamSet(lbl_1_data_14E, 2, -1);
lbl_1_data_14E = -1;
HuWinExCleanup(lbl_1_bss_C);
}
if (lbl_1_bss_54 == 50) {
for (var_r23 = 0; var_r23 < 4; var_r23++) {
temp_r18 = playerObjs[var_r23]->data;
if (!(fabs(500.0 * temp_r18->unk3C - playerObjs[var_r23]->trans.x) < 1.0)
|| !(fabs(500.0 * temp_r18->unk40 - playerObjs[var_r23]->trans.z) < 1.0) || temp_r18->unk20 != 0) {
break;
}
}
if (var_r23 == 4) {
lbl_1_bss_54 = 60;
}
}
break;
case 1005:
if (data->unk5C != 0) {
if (object->trans.y < -15000.0f) {
Hu3DModelAttrSet(object->model[0], HU3D_ATTR_DISPOFF);
}
else {
object->trans.y -= 77.0f;
}
}
break;
case 1006:
if (lbl_1_bss_54 <= 1) {
Hu3DModelAttrSet(object->model[data->unk44 + 2], HU3D_ATTR_DISPOFF);
lbl_1_bss_51C[data->unk44].unk0C = 0;
}
if (lbl_1_bss_51C[data->unk38].unk0C != 0 || data->unk5C != 0) {
break;
}
if (lbl_1_bss_54 == 120) {
Hu3DModelAttrReset(lbl_1_bss_32C->model[data->unk38 + 1], HU3D_MOTATTR_PAUSE);
}
if (lbl_1_bss_54 == 153) {
Hu3DModelAttrSet(lbl_1_bss_32C->model[data->unk38 + 1], HU3D_MOTATTR_PAUSE);
}
if (lbl_1_bss_54 == 183) {
Hu3DModelAttrReset(lbl_1_bss_32C->model[data->unk38 + 1], HU3D_MOTATTR_PAUSE);
}
if (lbl_1_bss_54 == 210) {
spBC = 0;
for (spC0 = 0; spC0 < 9; spC0++) {
spB8 = playerObjs[spC0]->data;
spBC += (lbl_1_bss_51C[spB8->unk38].unk0C == 0 && spB8->unk5C == 0);
}
var_r28 = 7;
HuAudFXPlayVol(0x7F7 + (data->character != -1 ? data->character : 8), 1651 / (spBC + 12));
}
if (lbl_1_bss_54 >= 210 && lbl_1_bss_54 <= 214) {
s32 sp1AC[] = { 0, -12, -36, 0, 0, -12, -36, -48, 0 };
float sp194[] = { 150.0f, 175.0f, 205.0f };
float sp188[] = { 100.0f, 170.0f, 260.0f };
spB4 = data->unk38 % 3 - 1;
spB0 = data->unk38 / 3;
spAC = (lbl_1_bss_54 - 210) / 4.0;
temp_f26 = (lbl_1_bss_54 - 210) / 4.0;
temp_f26 = (temp_f26 > 1.0f) ? 1.0f : temp_f26;
espAttrReset(lbl_1_data_24[data->unk38], HUSPR_ATTR_DISPOFF);
espPosSet(lbl_1_data_24[data->unk38], 290.0f + spB4 * sp194[spB0],
sp188[spB0] + 0.5 * (64.0f * (1.0f - spAC) * 0.5 + sp1AC[data->character != -1 ? data->character : 8]));
espScaleSet(lbl_1_data_24[data->unk38], 0.5 * temp_f26, 0.5 * temp_f26);
}
if (lbl_1_bss_54 == 270) {
Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_PAUSE);
espAttrSet(lbl_1_data_24[data->unk38], HUSPR_ATTR_DISPOFF);
}
if (lbl_1_bss_54 == 290) {
spA0 = 0;
for (spA4 = 0; spA4 < 9; spA4++) {
sp9C = playerObjs[spA4]->data;
spA0 += (lbl_1_bss_51C[sp9C->unk38].unk0C == 0 && sp9C->unk5C == 0);
}
spA8 = HuAudFXPlayVol(0x800 + (data->character != -1 ? data->character : 8), 1651 / (spA0 + 12));
HuAudFXFadeOut(spA8, 0x9C4);
}
if (lbl_1_bss_54 >= 315) {
object->trans.y -= 77.0f;
}
break;
case 1007:
if (data->player == lbl_1_bss_38) {
var_r28 = 8;
if (data->player >= 4 && data->character != -1 && lbl_1_bss_54 == 1) {
HuAudFXPlay(0x809 + data->character);
}
if (data->character == -1 && lbl_1_bss_54 == 1) {
HuAudFXPlay(0x3A);
}
}
else if (object->trans.y < -40000.0f) {
Hu3DModelAttrSet(object->model[0], HU3D_ATTR_DISPOFF);
}
else {
object->trans.y -= 77.0f;
}
break;
}
switch (data->unk18) {
case 0:
data->unk1C++;
break;
case 1:
data->unk1C++;
if (data->unk1C <= 60) {
object->rot.y = -180.0 * (data->unk1C / 60.0);
}
else {
Hu3DMotionTimeSet(object->model[0], 120.0f);
var_r28 = 0;
data->unk18 = 0;
data->unk1C = 0;
}
break;
case 2:
data->unk1C++;
break;
case 3:
if (data->unk1C == 0) {
data->unk48 = 6;
data->unk4C = 0;
}
if (data->unk1C < 360) {
model = &Hu3DData[object->model[1]];
if (data->unk1C == 0) {
Hu3DModelAttrReset(object->model[1], HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(object->model[1], object->trans.x, object->trans.y + 625.0f, object->trans.z);
Hu3DModelScaleSet(object->model[1], 0.1f, 0.1f, 0.1f);
Hu3DModelTPLvlSet(object->model[1], 1.0f);
data->unk4C = 0;
if (lbl_1_bss_18 == 0) {
HuAudFXPlay(0x7F4);
lbl_1_data_184 = HuAudFXPlay(0x7F3);
}
lbl_1_bss_18++;
}
model->rot.y = data->unk4C % 360;
data->unk4C += 25;
if (data->unk1C < 180) {
var_f20 = 0.0f;
var_f21 = 1.0f;
}
else {
var_f20 = 1.0f;
var_f21 = 0.5f;
}
model->scale.x = var_f20 + var_f21 * sind((float)(data->unk1C % 180));
model->scale.y = model->scale.z = model->scale.x;
if (data->unk1C < 180) {
data->unk1C += 6;
}
else {
data->unk1C += 18;
}
if (data->unk1C >= 360) {
data->unk1C = 360;
Hu3DModelRotSet(object->model[1], 0.0f, 0.0f, 0.0f);
}
}
else {
sp98 = &Hu3DData[object->model[1]];
data->unk1C += 4;
if (data->unk1C > 720) {
data->unk1C -= 360;
}
sp98->pos.y += 0.2f * sind(data->unk1C - 360);
if (var_r22 != 0 || lbl_1_bss_0 == 0) {
lbl_1_bss_54 = 50;
data->unk18 = 4;
data->unk1C = 0;
var_r28 = 5;
}
}
break;
case 4:
data->unk1C++;
if (data->unk1C < 27) {
break;
}
model2 = &Hu3DData[object->model[1]];
temp_r27 = data->unk1C - 27;
if (temp_r27 == 0) {
if (data->playerCfg != -1) {
omVibrate(data->playerCfg, 12, 4, 2);
}
data->unk48 = -1;
lbl_1_bss_18--;
if (lbl_1_bss_18 == 0 && lbl_1_data_184 != -1) {
HuAudFXStop(lbl_1_data_184);
lbl_1_data_184 = -1;
}
HuAudFXPlay(0x7F5);
}
if (temp_r27 == 8) {
if (data->parMan == -1) {
lbl_1_bss_58 = data->player;
data->parMan = fn_1_4474();
Hu3DParManPosSet(data->parMan, model2->pos.x, model2->pos.y, model2->pos.z);
data->parManTimer = 150;
}
Hu3DModelAttrSet(object->model[1], HU3D_ATTR_DISPOFF);
}
else if (temp_r27 > 8) {
if (data->unk20 == 5) {
if (Hu3DMotionTimeGet(object->model[0]) >= Hu3DMotionMaxTimeGet(object->model[0])) {
var_r28 = 0;
}
}
if (temp_r27 <= 28) {
temp_f27 = (temp_r27 - 8) / 10.0;
sp94 = (temp_r27 - 8) * 18;
temp_f27 = (temp_f27 > 1.0f) ? 2.5 : (2.5 * temp_f27);
Hu3DModelAttrReset(object->model[data->unk44 + 2], HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(object->model[data->unk44 + 2], model2->pos.x, model2->pos.y, model2->pos.z);
Hu3DModelScaleSet(object->model[data->unk44 + 2], temp_f27, temp_f27, temp_f27);
}
if (temp_r27 >= 45 && temp_r27 <= 65) {
temp_f25 = (temp_r27 - 45) / 5.0;
sp90 = (temp_r27 - 45) * 18;
temp_f25 = (temp_f25 > 1.0f) ? 1.0f : temp_f25;
temp_f25 = 0.0f;
Hu3DModelAttrReset(object->model[data->unk44 + 2], HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(object->model[data->unk44 + 2], model2->pos.x, model2->pos.y - 30.0f * temp_f25, model2->pos.z);
data->unk1C += 5;
}
if (temp_r27 == 158) {
data->unk18 = 0;
data->unk1C = 0;
}
}
else {
if (temp_r27 < 4) {
model2->pos.y += 10.0f + 0.5f * temp_r27;
model2->scale.x += 0.1f * sind(4.0f * temp_r27);
model2->scale.y = model2->scale.z = model2->scale.x;
}
else {
var_f24 = 255 - (temp_r27 << 5);
var_f24 = var_f24 * (1.0f / 255);
Hu3DModelTPLvlSet(object->model[1], var_f24);
}
model2->pos.y += -0.49f * temp_r27 * temp_r27;
}
break;
case 5:
if (data->unk1C == 0) {
Hu3DModelAttrReset(lbl_1_bss_32C->model[data->unk44 + 1], HU3D_MOTATTR_PAUSE);
lbl_1_bss_51C[data->unk44].unk0C = 0;
if (lbl_1_bss_35C->unk00 < 3) {
lbl_1_bss_35C->unk04[lbl_1_bss_35C->unk00] = 0.0f;
lbl_1_bss_35C->unk00++;
}
}
data->unk1C++;
if (data->unk1C == 60 && data->parMan != -1) {
Hu3DParManKill(data->parMan);
data->parMan = -1;
}
if (data->unk1C == 33) {
Hu3DModelAttrSet(lbl_1_bss_32C->model[data->unk44 + 1], HU3D_MOTATTR_PAUSE);
}
if (data->unk1C == 63) {
Hu3DModelAttrReset(lbl_1_bss_32C->model[data->unk44 + 1], HU3D_MOTATTR_PAUSE);
}
if (data->unk1C == 68 && lbl_1_bss_35C[1].unk00 < 3) {
lbl_1_bss_35C[1].unk04[lbl_1_bss_35C[1].unk00] = 0.0f;
lbl_1_bss_35C[1].unk00++;
}
if (data->unk1C == 130) {
data->unk18 = 0;
data->unk1C = 0;
}
break;
}
if ((data->unk18 == 3 || data->unk18 == 4) && data->unk48 >= 0) {
data->unk48++;
if (data->unk48 >= 6) {
sp88 = data->unk44;
for (sp8C = 0; sp8C < 50; sp8C++) {
do {
data->unk44 = rand8() % 9;
if (data->unk44 >= 9) {
break;
}
} while (lbl_1_bss_51C[data->unk44].unk0C == 0);
if (sp88 != data->unk44) {
break;
}
}
sp88 = data->unk44;
data->unk48 = 0;
Hu3DMotionTimeSet(object->model[1], 0.5 + sp88);
}
}
if (data->unk24 >= 0) {
var_r28 = data->unk24;
}
if (var_r28 >= 0 && var_r28 != data->unk20) {
Hu3DMotionShiftSet(object->model[0], object->motion[var_r28], lbl_1_data_EC[var_r28],
(data->character != -1) ? lbl_1_data_C8[var_r28] : lbl_1_data_110[var_r28],
(var_r28 == 7) ? HU3D_MOTATTR_PAUSE
: (data->character != -1 ? lbl_1_data_B4[var_r28] : lbl_1_data_BD[var_r28]) ? 0
: HU3D_MOTATTR_LOOP);
data->unk20 = var_r28;
}
data->parManTimer -= (data->parManTimer > -1);
if (data->parManTimer == 0) {
if (data->parMan != -1) {
Hu3DParManKill(data->parMan);
data->parMan = -1;
}
data->parManTimer = -1;
}
}
s32 lbl_1_data_1A4[4] = { 0 };
s32 lbl_1_data_1B4 = -1;
float lbl_1_data_1B8 = 3500.0f;
float lbl_1_data_1BC = 100.0f;
float lbl_1_data_1C0 = -59.0f;
static inline void fn3264_unkInline(void) {
float var_f31;
s32 var_r26 = lbl_1_data_1B4;
float sp30[][6] = { { 3500.0f, 0.0f, 100.0f, 0.0f, -59.0f, 0.0f }, { 3200.0f, 0.0f, 100.0f, 0.0f, -30.0f, 0.0f },
{ 3800.0f, 0.0f, 100.0f, 0.0f, -30.0f, 0.0f }, { 2000.0f, 0.0f, 200.0f, 0.0f, -30.0f, 0.0f },
{ 4000.0f, 0.0f, 200.0f, 0.0f, -89.0f, 0.0f }, { 2700.0f, 0.0f, 200.0f, 0.0f, -30.0f, 0.0f } };
if (lbl_1_bss_38 != -1 && lbl_1_bss_38 != 9) {
sp30[5][1] = playerObjs[lbl_1_bss_38]->trans.x;
sp30[5][3] = playerObjs[lbl_1_bss_38]->trans.z;
}
if (lbl_1_data_1B4 == -1) {
lbl_1_data_1B4 = 0;
lbl_1_bss_1C = 1;
lbl_1_bss_20 = 1.0f;
}
if (lbl_1_data_1B4 == 0) {
lbl_1_data_1B4 = 1;
lbl_1_bss_1C = 1;
lbl_1_bss_20 = 0.5f;
}
if (lbl_1_bss_50 == 1004 && lbl_1_bss_54 >= 1 && lbl_1_data_1B4 == 1) {
lbl_1_data_1B4 = 2;
lbl_1_bss_1C = 0;
lbl_1_bss_20 = 0.0f;
}
if (lbl_1_bss_50 == 1006 && lbl_1_bss_54 >= 270 && lbl_1_data_1B4 == 2) {
lbl_1_data_1B4 = 4;
lbl_1_bss_1C = 1;
lbl_1_bss_20 = 1.0f;
}
if (lbl_1_bss_50 == 1005 && lbl_1_data_1B4 == 4) {
lbl_1_data_1B4 = 2;
lbl_1_bss_1C = 0;
lbl_1_bss_20 = 0.0f;
}
if (lbl_1_bss_50 == 1007 && lbl_1_bss_38 != 9 && lbl_1_data_1B4 == 4) {
lbl_1_data_1B4 = 5;
lbl_1_bss_1C = 0;
lbl_1_bss_20 = 0.0f;
}
if (var_r26 != lbl_1_data_1B4 && var_r26 != -1) {
lbl_1_data_1B8 = CZoom;
lbl_1_data_1BC = Center.y;
lbl_1_bss_28 = Center.z;
lbl_1_data_1C0 = CRot.x;
lbl_1_bss_2C = CRot.y;
}
if (lbl_1_bss_20 <= 1.0f) {
if (lbl_1_bss_1C == 0) {
lbl_1_bss_20 = 1.0 - 0.95 * (1.0f - lbl_1_bss_20);
var_f31 = lbl_1_bss_20;
}
else {
lbl_1_bss_20 += 0.008333333333333333;
lbl_1_bss_20 = (lbl_1_bss_20 > 1.0f) ? 1.0f : lbl_1_bss_20;
var_f31 = 0.5 + -0.5 * cosd(180.0f * lbl_1_bss_20);
}
lbl_1_bss_20 = (lbl_1_bss_20 > 1.0f) ? 1.0f : lbl_1_bss_20;
CZoom = var_f31 * sp30[lbl_1_data_1B4][0] + lbl_1_data_1B8 * (1.0f - var_f31);
Center.x = var_f31 * sp30[lbl_1_data_1B4][1] + lbl_1_bss_24 * (1.0f - var_f31);
Center.y = var_f31 * sp30[lbl_1_data_1B4][2] + lbl_1_data_1BC * (1.0f - var_f31);
Center.z = var_f31 * sp30[lbl_1_data_1B4][3] + lbl_1_bss_28 * (1.0f - var_f31);
CRot.x = var_f31 * sp30[lbl_1_data_1B4][4] + lbl_1_data_1C0 * (1.0f - var_f31);
CRot.y = var_f31 * sp30[lbl_1_data_1B4][5] + lbl_1_bss_2C * (1.0f - var_f31);
}
}
void fn_1_3264(omObjData *arg0)
{
float temp_f29;
float temp_f26;
float temp_f27;
float temp_f28;
M463PlayerData *spC[9];
ModelData *temp_r29;
ModelData *temp_r28;
s32 var_r27;
s32 i;
s32 j;
for (i = 0; i < 9; i++) {
spC[i] = playerObjs[i]->data;
}
lbl_1_bss_4++;
switch (lbl_1_bss_50) {
case 1002:
lbl_1_bss_34++;
lbl_1_bss_34 %= 360;
/* fallthrough */
case 1003:
var_r27 = 0;
for (i = 0; i < 4; i++) {
if (spC[i]->unk50 == 0 || spC[i]->unk20 != 0) {
continue;
}
temp_r29 = &Hu3DData[lbl_1_bss_32C->model[spC[i]->unk38 + 1]];
if (var_r27 == 0 && lbl_1_data_1A4[i] == 0) {
lbl_1_data_1A4[i] = 1;
var_r27 = 1;
HuAudFXPlay(0x7F6);
}
temp_r29->pos.y = 0.9 * temp_r29->pos.y + 0.1 * lbl_1_bss_51C[spC[i]->unk38].unk08;
playerObjs[i]->trans.y = temp_r29->pos.y - -16.666666666666668;
playerObjs[i]->rot.y = 0.0f;
}
break;
case 1004:
if (lbl_1_bss_54 <= 60) {
temp_f29 = lbl_1_bss_54 / 60.0;
temp_f29 = 1.0f - (1.0f - temp_f29) * (1.0f - temp_f29);
if (lbl_1_bss_54 == 0) {
lbl_1_bss_51C[spC[0]->unk38].unk08 = -16.666666f;
}
for (i = 0; i < 9; i++) {
temp_r28 = &Hu3DData[lbl_1_bss_32C->model[i + 1]];
Hu3DModelPosSet(lbl_1_bss_32C->model[i + 1], (500.0 + 200.0f * temp_f29) * (lbl_1_bss_51C[i].unk00 - 1),
0.9 * temp_r28->pos.y + 0.1 * lbl_1_bss_51C[spC[0]->unk38].unk08, (500.0 + 200.0f * temp_f29) * (lbl_1_bss_51C[i].unk04 - 1));
for (j = 0; j < 9; j++) {
if (i == spC[j]->unk38) {
playerObjs[j]->trans.x = (500.0 + 200.0f * temp_f29) * (lbl_1_bss_51C[i].unk00 - 1);
playerObjs[j]->trans.y = temp_r28->pos.y - -16.666666666666668;
playerObjs[j]->trans.z = (500.0 + 200.0f * temp_f29) * (lbl_1_bss_51C[i].unk04 - 1);
}
}
}
}
break;
}
fn3264_unkInline();
if (lbl_1_bss_50 == 1001 || lbl_1_bss_50 == 1003) {
temp_f26 = 0.0f;
temp_f27 = 0.0f;
if (lbl_1_data_134.unk00 % 2 >= 0) {
lbl_1_data_134.unk08 = lbl_1_data_134.unk10;
lbl_1_data_134.unk0C = lbl_1_data_134.unk14;
do {
lbl_1_data_134.unk10 = 2.0 * (rand8() / 255.0) - 1.0;
lbl_1_data_134.unk14 = 2.0 * (rand8() / 255.0) - 1.0;
lbl_1_data_134.unk10 = 0.0f;
temp_f28 = (lbl_1_data_134.unk10 - lbl_1_data_134.unk08) * (lbl_1_data_134.unk10 - lbl_1_data_134.unk08)
+ (lbl_1_data_134.unk14 - lbl_1_data_134.unk0C) * (lbl_1_data_134.unk14 - lbl_1_data_134.unk0C);
} while (sqrtf(temp_f28) < 0.75);
}
lbl_1_data_134.unk04 = (lbl_1_data_134.unk04 > 24) ? 24 : (lbl_1_data_134.unk04 > 0) ? lbl_1_data_134.unk04 : 0;
temp_f26 = lbl_1_data_134.unk08;
temp_f27 = lbl_1_data_134.unk0C;
temp_f26 *= lbl_1_data_134.unk04 * 2;
temp_f27 *= lbl_1_data_134.unk04 * 2;
lbl_1_data_134.unk00 = !lbl_1_data_134.unk00;
lbl_1_data_134.unk04 = (lbl_1_data_134.unk04 > 24) ? 23 : (lbl_1_data_134.unk04 - 1 > 0) ? (lbl_1_data_134.unk04 - 1) : 0;
Center.x = 0.0f;
Center.y = 100.0f + temp_f27;
}
}
s16 fn_1_4474(void)
{
AnimData *var_r29;
void *var_r28;
s16 var_r31;
s16 var_r30;
HsfanimStruct00 sp8 = { 0x96, { 0x00, 0x00 }, 50.0f, 0.0f, 65.0f, { 0.0f, -0.195f, 0.0f }, 80.0f, 0.99f, 40.0f, 0.999f, 4,
{ { 0xFF, 0xFF, 0x20, 0xFF }, { 0xFF, 0xFF, 0x00, 0xFF }, { 0xFF, 0xFF, 0x80, 0xFF }, { 0xFF, 0xFF, 0xFF, 0xFF } },
{ { 0xFF, 0xFF, 0xFF, 0x00 }, { 0xFF, 0xFF, 0xFF, 0x00 }, { 0xFF, 0xFF, 0xFF, 0x00 }, { 0xFF, 0xFF, 0xFF, 0x00 } } };
lbl_1_bss_5C[lbl_1_bss_58] = sp8;
var_r28 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_BOARD, 107), MEMORY_DEFAULT_NUM, HEAP_DATA);
var_r29 = HuSprAnimRead(var_r28);
var_r31 = Hu3DParManCreate(var_r29, 40, &lbl_1_bss_5C[lbl_1_bss_58]);
Hu3DParManAttrSet(var_r31, 8 | 0x100);
Hu3DParManRotSet(var_r31, 0.0f, 0.0f, 0.0f);
Hu3DParManVecSet(var_r31, 0.0f, 0.4f, 0.2f);
var_r30 = Hu3DParManModelIDGet(var_r31);
Hu3DModelLayerSet(var_r30, 2);
Hu3DparManBlendModeSet(var_r30, 0);
return var_r31;
}
void fn_1_45F8(omObjData *arg0)
{
M463PlayerData *sp14[9];
float spC[2];
s32 sp8;
s32 var_r29;
s32 var_r28;
s32 var_r27;
s32 var_r30;
s32 i;
for (i = 0; i < 28; i++) {
s32 sp38[] = { 0x7F1, 0x7F2, 0x7F7, 0x7F8, 0x7F9, 0x7FA, 0x7FB, 0x7FC, 0x7FD, 0x7FE, 0x7FF, 0x800, 0x801, 0x802, 0x803, 0x804, 0x7FB, 0x7FC,
0x7FD, 0x7FE, 0x7FF, 0x800, 0x801, 0x802, 0x803, 0x804, 0x7FB, 0x7FC };
if (lbl_1_bss_35C[i].unk00 > 3) {
lbl_1_bss_35C[i].unk00 = 3;
}
if (lbl_1_bss_35C[i].unk00 > 0) {
sp8 = HuAudFXPlay(sp38[i]);
lbl_1_bss_35C[i].unk00--;
}
}
for (i = 0; i < 9; i++) {
sp14[i] = playerObjs[i]->data;
}
if (omSysExitReq != 0 && WipeStatGet() == 0) {
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
arg0->func = fn_1_659C;
}
switch (lbl_1_bss_50) {
case 1000:
if (WipeStatGet() != 0) {
break;
}
lbl_1_bss_50++;
lbl_1_bss_54 = 0;
for (i = 0; i < 9; i++) {
if (sp14[i]->parMan != -1) {
Hu3DParManKill(sp14[i]->parMan);
sp14[i]->parMan = -1;
}
}
break;
case 1001:
lbl_1_bss_54++;
if (lbl_1_bss_54 == 90 && lbl_1_data_14C < 0) {
lbl_1_data_14C = MGSeqStartCreate();
}
if (lbl_1_bss_54 >= 90 && lbl_1_data_150 == -1 && (MGSeqStatGet(lbl_1_data_14C) & 0x10)) {
lbl_1_data_150 = HuAudSeqPlay(0x49);
}
if (lbl_1_bss_54 >= 90 && MGSeqStatGet(lbl_1_data_14C) == 0 && lbl_1_data_14C >= 0) {
lbl_1_bss_50 = 1002;
lbl_1_bss_54 = 0;
}
break;
case 1002:
lbl_1_bss_54 += (lbl_1_bss_54 < 30);
if (lbl_1_bss_54 >= 60) {
lbl_1_bss_50++;
lbl_1_bss_54 = 0;
}
break;
case 1003:
lbl_1_bss_54++;
if (lbl_1_bss_54 == (sp14[1]->character == -1 ? 120 : 60) + 30) {
lbl_1_bss_50++;
if (sp14[1]->character == -1) {
lbl_1_bss_50++;
}
lbl_1_bss_54 = 0;
}
break;
case 1004:
lbl_1_bss_54++;
if (lbl_1_bss_54 == 90) {
lbl_1_bss_50++;
lbl_1_bss_54 = 0;
}
break;
case 1005:
if (lbl_1_bss_54 == 0) {
for (i = 0; i < 9; i++) {
if (lbl_1_bss_51C[sp14[i]->unk38].unk0C != 0) {
sp14[i]->unk18 = 3;
sp14[i]->unk1C = 0;
}
else {
sp14[i]->unk5C = 1;
}
}
HuWinMesMaxSizeGet(1, spC, MAKE_MESSID(48, 37));
lbl_1_bss_C = HuWinCreate(-10000.0f, 400.0f, spC[0], spC[1], 1);
HuWinBGTPLvlSet(lbl_1_bss_C, 0.0f);
HuWinMesSpeedSet(lbl_1_bss_C, 0);
HuWinMesSet(lbl_1_bss_C, MAKE_MESSID(48, 37));
lbl_1_bss_0 = 180;
}
lbl_1_bss_54++;
if (lbl_1_bss_54 == 30) {
lbl_1_data_14E = MGSeqTimerCreate(10);
MGSeqPosSet(lbl_1_data_14E, 489.6f, 64.0f);
}
if (lbl_1_bss_54 >= 30 && lbl_1_data_14E != -1) {
var_r29 = 0;
for (i = 0; i < 9; i++) {
if (lbl_1_bss_51C[sp14[i]->unk38].unk0C == 0 || sp14[i]->unk18 == 4 || sp14[i]->unk18 == 0) {
var_r29++;
}
}
if (var_r29 >= 9 || lbl_1_bss_0 == 0) {
MGSeqParamSet(lbl_1_data_14E, 2, -1);
lbl_1_data_14E = -1;
}
else {
lbl_1_bss_0 -= (lbl_1_bss_0 > 0);
MGSeqParamSet(lbl_1_data_14E, 1, (lbl_1_bss_0 + 59) / 60);
}
}
var_r28 = 0;
for (i = 0; i < 9; i++) {
if (lbl_1_bss_51C[sp14[i]->unk38].unk0C == 0 || sp14[i]->unk18 == 0) {
var_r28++;
}
}
if (var_r28 >= 9) {
lbl_1_bss_50++;
lbl_1_bss_54 = 0;
}
break;
case 1006:
if (lbl_1_bss_54 == 1) {
HuWinExCleanup(lbl_1_bss_C);
}
lbl_1_bss_54++;
if (lbl_1_bss_54 == 3) {
lbl_1_bss_54 = 118;
}
if (lbl_1_bss_54 == 223) {
lbl_1_bss_54 = 233;
}
if (lbl_1_bss_54 == 120 && lbl_1_bss_35C->unk00 < 3) {
lbl_1_bss_35C->unk04[lbl_1_bss_35C->unk00] = 0.0f;
lbl_1_bss_35C->unk00++;
}
if (lbl_1_bss_54 == 188 && lbl_1_bss_35C[1].unk00 < 3) {
lbl_1_bss_35C[1].unk04[lbl_1_bss_35C[1].unk00] = 0.0f;
lbl_1_bss_35C[1].unk00++;
}
if (lbl_1_bss_54 == 360) {
var_r30 = 0;
var_r27 = -1;
for (i = 0; i < 9; i++) {
var_r30 += lbl_1_bss_51C[i].unk0C;
var_r27 = (lbl_1_bss_51C[sp14[i]->unk38].unk0C != 0) ? i : var_r27;
}
if (var_r30 <= 1) {
lbl_1_bss_38 = (var_r30 == 0) ? 9 : var_r27;
}
if (lbl_1_bss_38 != -1) {
lbl_1_data_14C = MGSeqFinishCreate();
if (lbl_1_data_150 != -1) {
HuAudSeqFadeOut(lbl_1_data_150, 100);
}
}
}
if (lbl_1_bss_54 >= 480) {
if (lbl_1_bss_38 != -1) {
if (MGSeqStatGet(lbl_1_data_14C) == 0 && lbl_1_bss_54 >= 510) {
lbl_1_bss_50 = 1007;
lbl_1_bss_54 = 0;
}
}
else {
lbl_1_bss_50 = 1005;
lbl_1_bss_54 = 0;
}
}
break;
case 1007:
lbl_1_bss_54++;
if (lbl_1_bss_54 == 1) {
if (lbl_1_bss_38 != 9) {
if (lbl_1_bss_38 < 9) {
HuAudSStreamPlay(1);
}
else {
HuAudSStreamPlay(1);
}
if (lbl_1_bss_38 < 4 && sp14[lbl_1_bss_38]->playerCfg != -1) {
GWPlayerCoinWinSet(sp14[lbl_1_bss_38]->playerCfg, 10);
}
}
else if (lbl_1_bss_38 == 9) {
HuAudSStreamPlay(4);
}
}
if (210.0f + (lbl_1_bss_38 == 9 ? 60 : 0) < lbl_1_bss_54) {
if (lbl_1_data_154 != -1) {
HuAudFXStop(lbl_1_data_154);
lbl_1_data_154 = -1;
}
lbl_1_data_14C = -1;
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
arg0->func = fn_1_659C;
}
break;
}
}
void fn_1_53A0(omObjData *arg0)
{
M463PlayerData *sp50[9];
s32 i;
for (i = 0; i < 9; i++) {
sp50[i] = playerObjs[i]->data;
}
arg0->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M458, 8));
Hu3DModelAttrSet(arg0->model[0], HU3D_MOTATTR_LOOP);
Hu3DMotionSpeedSet(arg0->model[0], 0.1f);
for (i = 0; i < 9; i++) {
arg0->model[i + 1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M458, 10 + i));
lbl_1_bss_51C[i].unk00 = i % 3;
lbl_1_bss_51C[i].unk04 = i / 3;
lbl_1_bss_51C[i].unk08 = 0.0f;
lbl_1_bss_51C[i].unk0C = 1;
Hu3DModelPosSet(lbl_1_bss_32C->model[i + 1], 500.0 * (lbl_1_bss_51C[i].unk00 - 1), -16.666666f, 500.0 * (lbl_1_bss_51C[i].unk04 - 1));
Hu3DModelScaleSet(lbl_1_bss_32C->model[i + 1], 1.6666666f, 1.6666666f, 1.6666666f);
Hu3DModelAttrSet(arg0->model[i + 1], HU3D_MOTATTR_PAUSE);
Hu3DModelShadowMapSet(arg0->model[i + 1]);
Hu3DModelLayerSet(arg0->model[i + 1], 1);
}
for (i = 0; i < 9; i++) {
s32 sp2C[9] = { 288, 290 };
s32 sp8[9] = { 240, 140 };
lbl_1_data_24[i] = espEntry(lbl_1_data_0[i], 0, 0);
espDrawNoSet(lbl_1_data_24[i], 0);
espAttrSet(lbl_1_data_24[i], HUSPR_ATTR_NOANIM | HUSPR_ATTR_DISPOFF);
espBankSet(lbl_1_data_24[i], 0);
espPriSet(lbl_1_data_24[i], 0x80 - i);
espPosSet(lbl_1_data_24[i], 290.0f, 140.0f);
espTPLvlSet(lbl_1_data_24[i], 1.0f);
}
arg0->func = fn_1_3264;
}
s32 lbl_1_data_1E4[] = { DATA_MAKE_NUM(DATADIR_M458, 19), DATA_MAKE_NUM(DATADIR_M458, 20), DATA_MAKE_NUM(DATADIR_M458, 21),
DATA_MAKE_NUM(DATADIR_M458, 22), DATA_MAKE_NUM(DATADIR_M458, 23), DATA_MAKE_NUM(DATADIR_M458, 24), DATA_MAKE_NUM(DATADIR_M458, 25),
DATA_MAKE_NUM(DATADIR_M458, 26), DATA_MAKE_NUM(DATADIR_M458, 27), DATA_MAKE_NUM(DATADIR_M458, 28), DATA_MAKE_NUM(DATADIR_M458, 29) };
void fn_1_5850(omObjData *arg0)
{
M463PlayerData *data;
s32 sp10[] = { 0, 1, 2, 3 };
s32 var_r25;
s32 var_r28;
s32 i;
s32 j;
var_r25 = 0;
data = arg0->data;
memset(data, 0, sizeof(*data));
data->player = arg0->work[0];
if (data->player >= 4) {
var_r28 = -1;
for (i = 0; i <= data->player - 4; i++) {
do {
var_r28++;
} while (GWPlayerCfg[0].character == var_r28 || GWPlayerCfg[1].character == var_r28 || GWPlayerCfg[2].character == var_r28
|| GWPlayerCfg[3].character == var_r28);
}
data->character = (var_r28 == 8) ? -1 : var_r28;
data->padIdx = -1;
data->playerCfg = -1;
data->diff = 0;
}
else {
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (i == GWPlayerCfg[j].group) {
sp10[var_r25] = j;
var_r25++;
}
}
}
data->player = arg0->work[0];
data->playerCfg = sp10[data->player];
if (data->playerCfg == 4) {
OSReport("m463:wrong player group\n");
data->playerCfg = data->player;
}
data->character = GWPlayerCfg[data->playerCfg].character;
data->padIdx = (data->character == -1 || GWPlayerCfg[data->playerCfg].iscom) ? -1 : GWPlayerCfg[data->playerCfg].pad_idx;
data->diff = (data->padIdx != -1) ? 0 : GWPlayerCfg[data->playerCfg].diff;
}
data->unk18 = 0;
data->unk20 = 3;
data->unk24 = -1;
data->unk48 = -1;
if (data->character != -1) {
arg0->model[0] = CharModelCreate(data->character, 4);
}
else {
arg0->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_BKOOPA, 7));
}
omSetTra(arg0, 0.0f, data->player == 0 ? 0 : 300, 0.0f);
if (data->character != -1) {
omSetSca(arg0, 2.5f, 2.5f, 2.5f);
}
else {
omSetSca(arg0, 2.0f, 2.0f, 2.0f);
}
for (i = 0; i < 9; i++) {
if (data->character != -1) {
if (data->player < 4 || (i != 1 && i != 2)) {
arg0->motion[i] = CharModelMotionCreate(data->character, lbl_1_data_48[i] + (lbl_1_data_6C[i] ? data->character : 0));
}
}
else if (lbl_1_data_90[i] != 0) {
arg0->motion[i] = Hu3DJointMotionFile(arg0->model[0], lbl_1_data_90[i]);
}
}
Hu3DMotionSet(arg0->model[0], arg0->motion[data->unk20]);
Hu3DMotionTimeSet(arg0->model[0], 10.0f);
Hu3DModelAttrReset(arg0->model[0], HU3D_MOTATTR_LOOP);
Hu3DModelShadowSet(arg0->model[0]);
Hu3DModelAttrSet(arg0->model[0], 1U);
Hu3DModelLayerSet(arg0->model[0], 1);
CharModelLayerSetAll2(1);
if (data->character != -1) {
CharModelDataClose(data->character);
}
arg0->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M458, 9));
Hu3DModelAttrSet(arg0->model[1], HU3D_MOTATTR_LOOP);
Hu3DModelPosSet(arg0->model[1], 0.0f, 400.0f, 0.0f);
Hu3DModelAttrSet(arg0->model[1], HU3D_ATTR_DISPOFF);
Hu3DModelLayerSet(arg0->model[1], 1);
Hu3DMotionSpeedSet(arg0->model[1], 0.0f);
for (i = 0; i < 9; i++) {
if (data->player == 0) {
arg0->model[i + 2] = Hu3DModelCreateFile(lbl_1_data_1E4[i]);
}
else {
arg0->model[i + 2] = Hu3DModelLink(playerObjs[0]->model[i + 2]);
}
Hu3DMotionTimeSet(arg0->model[i + 2], 10.0f);
Hu3DMotionSpeedSet(arg0->model[i + 2], 0.0f);
Hu3DModelAttrSet(arg0->model[i + 2], HU3D_ATTR_DISPOFF);
Hu3DModelLayerSet(arg0->model[i + 2], 1);
}
lbl_1_bss_58 = data->player;
data->parMan = fn_1_4474();
Hu3DParManPosSet(data->parMan, 10000.0f, -10000.0f, 10000.0f);
arg0->func = fn_1_4C8;
}
void fn_1_60A4(omObjData *arg0)
{
lbl_1_bss_50 = 1000;
lbl_1_bss_54 = 0;
lbl_1_bss_48 = 0;
lbl_1_bss_44 = 0;
lbl_1_data_154 = HuAudFXPlay(0x6D7);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
arg0->func = fn_1_45F8;
}
void ObjectSetup(void)
{
omObjData *var_r30;
s32 i;
OSReport("******* M463 ObjectSetup *********\n");
lbl_1_bss_40 = omInitObjMan(600, 0x2000);
omGameSysInit(lbl_1_bss_40);
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 = 3200.0f;
Center.x = 0.0f;
Center.y = 0.0f;
Center.z = -100.0f;
CRot.x = -30.0f;
CRot.y = 0.0f;
CRot.z = 0.0f;
{
Vec sp3C = { 0.0f, 0.0f, 0.0f };
Vec sp30 = { 0.25f, -0.75f, -0.45f };
GXColor sp8 = { 0xFF, 0xFF, 0xFF, 0xFF };
lbl_1_bss_3C = Hu3DGLightCreateV(&sp3C, &sp30, &sp8);
}
Hu3DGLightStaticSet(lbl_1_bss_3C, 1);
Hu3DGLightInfinitytSet(lbl_1_bss_3C);
{
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(12.0f, 9000.0f, 10010.0f);
Hu3DShadowTPLvlSet(0.625f);
Hu3DShadowPosSet(&sp24, &sp18, &spC);
}
Hu3DShadowSizeSet(0xE0);
lbl_1_data_14C = -1;
lbl_1_bss_38 = -1;
HuWinInit(1);
lbl_1_bss_32C = omAddObjEx(lbl_1_bss_40, 0x65, 10, 0, 1, fn_1_53A0);
for (i = 0; i < 9; i++) {
var_r30 = playerObjs[i] = omAddObjEx(lbl_1_bss_40, 100, 11, 9, 0, fn_1_5850);
var_r30->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M463PlayerData), MEMORY_DEFAULT_NUM);
var_r30->work[0] = i;
}
lbl_1_bss_354 = omAddObjEx(lbl_1_bss_40, 0x7FDA, 0, 0, -1, omOutView);
lbl_1_bss_358 = omAddObjEx(lbl_1_bss_40, 103, 0, 0, -1, fn_1_60A4);
}
void fn_1_659C(omObjData *arg0)
{
M463PlayerData *spC[9];
void *sp8;
s32 var_r31;
s32 var_r30;
for (var_r31 = 0; var_r31 < 9; var_r31++) {
spC[var_r31] = playerObjs[var_r31]->data;
if (spC[var_r31]->parMan != -1) {
Hu3DParManKill(spC[var_r31]->parMan);
spC[var_r31]->parMan = -1;
}
}
if (WipeStatGet() == 0) {
for (var_r30 = 0; var_r30 < 9; var_r30++) {
sp8 = playerObjs[var_r30]->data;
}
if (lbl_1_data_14C >= 0) {
MGSeqKill(lbl_1_data_14C);
}
MGSeqKillAll();
HuAudAllStop();
omOvlReturnEx(1, 1);
}
}