marioparty4/src/REL/m458Dll/main.c
2025-01-01 18:59:23 +01:00

1615 lines
57 KiB
C

#include "ext_math.h"
#include "game/audio.h"
#include "game/chrman.h"
#include "game/esprite.h"
#include "game/flag.h"
#include "game/gamework_data.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 "string.h"
#include "game/frand.h"
extern s32 rand8(void);
typedef struct UnkCameraStruct {
/* 0x00 */ float unk_00;
/* 0x04 */ float unk_04;
/* 0x08 */ float unk_08;
/* 0x0C */ float unk_0C;
/* 0x10 */ float unk_10;
/* 0x14 */ float unk_14;
} UnkCameraStruct; /* size = 0x18 */
typedef struct UnkBssCCStruct {
/* 0x00 */ s32 unk_00;
/* 0x04 */ float unk_04[3];
} UnkBssCCStruct; /* size = 0x10 */
typedef struct UnkBss28CStruct {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ float unk_08;
/* 0x0C */ s32 unk_0C;
} UnkBss28CStruct; /* size = 0x10 */
typedef struct UnkData114Struct {
/* 0x00 */ s32 unk_00;
/* 0x04 */ s32 unk_04;
/* 0x08 */ float unk_08;
/* 0x0C */ float unk_0C;
/* 0x10 */ float unk_10;
/* 0x14 */ float unk_14;
} UnkData114Struct; /* size = 0x18 */
typedef struct M458DllWork {
s32 unk_00;
s32 unk_04;
s32 unk_08;
s32 unk_0C;
s32 unk_10;
s32 unk_14;
s32 unk_18;
s32 unk_1C;
s32 unk_20;
s32 unk_24;
float unk_28;
float unk_2C;
char unk30[4];
float unk_34;
s32 unk_38;
s32 unk_3C;
s32 unk_40;
} M458DllWork; /* size = 0x44 */
s16 fn_1_4BE8();
void fn_1_6D9C(omObjData *arg0);
s32 lbl_1_data_0[2] = { 0x570025, 0x570026 };
s32 lbl_1_data_8[2] = { 0, 0 };
s32 lbl_1_data_10[0xA] = {
0x5F0000,
0x5F0002,
0x5F0003,
0x5F0005,
0x5F0006,
0x5F0036,
0x5F002F,
0x5F001A,
0x570000,
0x5F0017,
};
u32 lbl_1_data_38[0xA] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 };
u32 lbl_1_data_60[0xA] = { 0x30008, 0, 0, 0x3000A, 0, 0, 0x57002A, 0x570028, 0x570029, 0x570027 };
u8 lbl_1_data_88[0xA] = { 0, 0, 0, 1, 1, 1, 1, 0, 1, 1 };
u8 lbl_1_data_92[0xA] = { 0, 0, 0, 1, 1, 1, 1, 0, 1, 1 };
s32 lbl_1_data_9C[0xA] = { 8, 8, 8, 0, 0, 0, 8, 8, 8, 8 };
s32 lbl_1_data_C4[0xA] = { 0, 0, 0, 0, 3, 0, 0, 0, 0, 0 };
s32 lbl_1_data_EC[0xA] = { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 };
UnkData114Struct lbl_1_data_114 = { 0, 0, 0.0f, 0.0f, 0.0f, 0.0f };
s16 lbl_1_data_12C = -1;
s16 lbl_1_data_12E = -1;
s32 lbl_1_data_130 = -1;
s32 lbl_1_data_134 = -1;
s16 lbl_1_data_138[0x12] = {
-1,
0,
-0x3D4C,
0,
0,
0,
0x4403,
0x4000,
0x4334,
0,
0x42B4,
0,
0,
0,
0x4403,
0x4000,
0x4334,
0,
};
s32 lbl_1_data_15C = -1;
UnkBss28CStruct lbl_1_bss_28C[9];
UnkBssCCStruct lbl_1_bss_CC[0x1C];
omObjData *lbl_1_bss_C8;
omObjData *lbl_1_bss_C4;
omObjData *lbl_1_bss_C0;
omObjData *lbl_1_bss_BC;
omObjData *lbl_1_bss_B8;
s32 lbl_1_bss_B4;
s32 lbl_1_bss_B0;
s32 lbl_1_bss_AC;
s32 lbl_1_bss_A8;
s32 lbl_1_bss_A4;
Process *lbl_1_bss_A0;
s32 lbl_1_bss_9C;
s32 lbl_1_bss_98;
s32 lbl_1_bss_94;
s32 lbl_1_bss_90;
s32 lbl_1_bss_8C;
HsfanimStruct00 lbl_1_bss_3C;
float lbl_1_bss_38;
float lbl_1_bss_34;
float lbl_1_bss_30;
float lbl_1_bss_2C;
float 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;
s16 lbl_1_bss_C;
s32 lbl_1_bss_8;
s32 lbl_1_bss_4;
s32 lbl_1_bss_0;
void fn_1_A0(void)
{
if ((HuPadBtnDown[0] & PAD_BUTTON_B) != 0) {
Center.x = lbl_1_bss_BC->trans.x;
Center.y = lbl_1_bss_BC->trans.y;
Center.z = lbl_1_bss_BC->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(0x40, 0x188, 1.0f, "%f,%f,%f", Center.x, Center.y, Center.z);
print8(0x40, 0x198, 1.0f, "%f,%f,%f", CRot.x, CRot.y, CRot.z);
print8(0x40, 0x1A8, 1.0f, "%f", CZoom);
}
s32 lbl_1_data_16C = -1;
// https://decomp.me/scratch/QQLCN r17 issues
void fn_1_4C8(omObjData *object)
{
Mtx sp1E0;
float sp1A8[2];
float sp1A0[2];
s32 spD0;
s32 spCC;
s32 spC8;
s32 spC4;
s32 spC0;
float spBC;
s32 spB8;
ModelData *spB4;
float spB0;
float spAC;
s32 spA8;
s32 spA4;
float var_f31;
float var_f30;
float var_f28;
float var_f27;
float var_f26;
float var_f25;
float var_f24;
float var_f23;
float var_f22;
float var_f21;
float var_f20;
M458DllWork *var_r31;
ModelData *var_r29;
s16 var_r28;
M458DllWork *var_r27;
s32 var_r26;
s32 var_r25;
s32 var_r24;
ModelData *var_r23;
s32 var_r22;
s32 var_r21;
s32 var_r20;
s32 var_r19;
s32 var_r18;
s32 var_r17;
var_r31 = object->data;
var_r27 = (&lbl_1_bss_BC)[1 - object->work[0]]->data;
var_f23 = 0.0f;
var_f22 = 0.0f;
var_f28 = 0.0f;
var_r22 = 0;
var_r28 = -1;
var_r31->unk_2C = var_r31->unk_34 = 0.0f;
if ((lbl_1_bss_B0 == (var_r31->unk_00 == 0 ? 0x3F1 : 0x3F2)) && (var_r31->unk_18 == 3) && (var_r31->unk_1C >= 0x168)) {
if (var_r31->unk_1C == 0x168) {
var_r31->unk_14 = rand8() % 15;
}
if (var_r31->unk_0C != -1) {
var_r22 = (HuPadBtnDown[var_r31->unk_0C] & 0x100) != 0 ? 1 : 0;
}
else {
var_r31->unk_14 += var_r31->unk_14 < 0x10000;
if (var_r31->unk_14 == 0x1E) {
var_r22 = 1;
}
}
}
if (lbl_1_bss_B0 == (var_r31->unk_00 == 0 ? 0x3ED : 0x3EF)) {
var_r25 = 0;
var_r24 = 0;
if (var_r31->unk_0C != -1) {
var_r25 = HuPadStkX[var_r31->unk_0C] < -0x14 ? -1 : (HuPadStkX[var_r31->unk_0C] > 0x14 ? 1 : 0);
var_r24 = -HuPadStkY[var_r31->unk_0C] < -0x14 ? -1 : (-HuPadStkY[var_r31->unk_0C] > 0x14 ? 1 : 0);
var_r22 = (HuPadBtnDown[var_r31->unk_0C] & 0x100) != 0 ? 1 : 0;
}
else {
var_r31->unk_14 += var_r31->unk_14 < 0x10000;
if (var_r31->unk_14 == 0x1E) {
lbl_1_bss_94 = rand8() % (var_r31->unk_00 + 2);
lbl_1_bss_90 = rand8() % (var_r31->unk_00 + 2);
}
if (fabs((500.0 * var_r31->unk_3C) - object->trans.x) < 10.0) {
var_r25 = lbl_1_bss_94 > 0 ? (var_r31->unk_00 == 0 ? (((rand8() % 2) * 2) - 1) : -1) : 0;
lbl_1_bss_94 -= lbl_1_bss_94 > 0;
}
if (fabs((500.0 * var_r31->unk_40) - object->trans.z) < 10.0) {
var_r24 = lbl_1_bss_90 > 0 ? (var_r31->unk_00 == 0 ? (((rand8() % 2) * 2) - 1) : -1) : 0;
lbl_1_bss_90 -= lbl_1_bss_90 > 0;
}
if ((var_r31->unk_14 >= 0x2D) && ((var_r31->unk_14 % 30) == 0xF) && (lbl_1_bss_94 == 0) && (lbl_1_bss_90 == 0)) {
var_r22 = 1;
}
}
if (lbl_1_bss_B4 >= 0x32) {
var_r25 = var_r24 = 0;
}
if (var_r31->unk_00 == 1) {
spC4 = 0;
spC0 = 0;
if (fabs((500.0 * var_r31->unk_3C) - object->trans.x) < 10.0) {
var_r17 = object->trans.x < -250.0 ? -1 : (object->trans.x > 250.0 ? 1 : 0);
spD0 = var_r17;
}
else {
var_r17 = (object->trans.x < 0.0f ? -1 : 0);
spD0 = var_r17 + 1;
}
if (fabs((500.0 * var_r31->unk_40) - object->trans.z) < 10.0) {
spCC = spC8 = object->trans.z < -250.0 ? -1 : (object->trans.z > 250.0 ? 1 : 0);
}
else {
spCC = object->trans.z < 0.0f ? -1 : 0;
spC8 = spCC + 1;
}
for (var_r21 = var_r17; var_r21 <= spD0; var_r21++) {
for (var_r20 = spCC; var_r20 <= spC8; var_r20++) {
if (var_r27->unk_38 == 1 + var_r21 + var_r25 + (1 + var_r20 + var_r24) * 3) {
var_r25 = var_r24 = 0;
}
if (var_r27->unk_38 == 1 + var_r21 + var_r25 + (var_r20 + 1) * 3) {
var_r25 = 0;
}
if (var_r27->unk_38 == 1 + var_r21 + (1 + var_r20 + var_r24) * 3) {
var_r24 = 0;
}
}
}
}
if ((var_r25 * ((500.0 * var_r31->unk_3C) - object->trans.x)) < 0.0) {
var_r31->unk_3C = var_r31->unk_3C + var_r25;
}
if ((fabs((500.0 * var_r31->unk_3C) - object->trans.x) < 10.0) && (var_r25 != 0) && ((var_r31->unk_3C + var_r25) >= -1)
&& ((var_r31->unk_3C + var_r25) <= 1)) {
var_r31->unk_3C = var_r31->unk_3C + var_r25;
}
var_f23 = (((500.0 * var_r31->unk_3C) - object->trans.x) / 0.25) / 1.75;
if ((var_r24 * ((500.0 * var_r31->unk_40) - object->trans.z)) < 0.0) {
var_r31->unk_40 = var_r31->unk_40 + var_r24;
}
if ((fabs((500.0 * var_r31->unk_40) - object->trans.z) < 10.0) && (var_r24 != 0) && ((var_r31->unk_40 + var_r24) >= -1)
&& ((var_r31->unk_40 + var_r24) <= 1)) {
var_r31->unk_40 = var_r31->unk_40 + var_r24;
}
var_f22 = (((500.0 * var_r31->unk_40) - object->trans.z) / -0.25) / 1.75;
}
if (((var_r31->unk_00 != 1) || (var_r31->unk_08 != -1)) && (var_r31->unk_18 == 0)) {
if ((lbl_1_bss_B0 > (var_r31->unk_00 == 0 ? 0x3E9 : 0x3EE)) && (lbl_1_bss_B0 < 0x3F3)) {
var_f31 = 0.25 * var_f23;
var_f30 = 0.25 * -var_f22;
{
Vec sp1B0 = { 0.0f, 0.0f, 0.0f };
sp1B0.x = var_f31;
sp1B0.z = var_f30;
PSMTXRotRad(sp1E0, 0x79, 0.017453292f * CRot.y);
PSMTXMultVec(sp1E0, &sp1B0, &sp1B0);
var_f31 = sp1B0.x;
var_f30 = sp1B0.z;
}
var_f28 = sqrtf((var_f31 * var_f31) + (var_f30 * var_f30));
if (var_f28 >= 0.5f) {
if (var_f28 < 10.0f) {
var_r31->unk_2C = var_f31;
var_r31->unk_34 += var_f30;
}
else {
var_f31 = var_f31 / var_f28;
var_f30 = var_f30 / var_f28;
var_f28 = 10.0f;
var_r31->unk_2C = var_f31 * var_f28;
var_r31->unk_34 = var_f30 * var_f28;
}
var_r31->unk_28 = var_f28;
object->rot.y = atan2d(var_r31->unk_2C, var_r31->unk_34);
if (var_r31->unk_28 >= 8.0f) {
var_r28 = 2;
}
else {
var_r28 = 2;
}
}
else {
var_r28 = 0;
}
}
}
object->trans.x += 1.75f * var_r31->unk_2C;
object->trans.z += 1.75f * var_r31->unk_34;
switch (lbl_1_bss_B0) {
case 0x3E9:
case 0x3EE:
if (lbl_1_bss_B0 == (var_r31->unk_00 == 0 ? 0x3E9 : 0x3EE)) {
if (lbl_1_bss_B4 == 0) {
Hu3DModelAttrReset(object->model[0], HU3D_ATTR_DISPOFF);
if (var_r31->unk_00 == 0) {
object->trans.x = 0.0f;
object->trans.z = 0.0f;
}
else if (var_r31->unk_08 != -1) {
var_r31->unk_3C = -2;
for (var_r18 = 2; var_r18 >= 0; var_r18--) {
for (var_r19 = 2; var_r19 >= 0; var_r19--) {
if (var_r27->unk_38 != (var_r18 + (var_r19 * 3))) {
var_r31->unk_3C = var_r19 - 1;
var_r31->unk_40 = var_r18 - 1;
object->trans.x = 500.0 * var_r31->unk_3C;
object->trans.z = 500.0 * var_r31->unk_40;
break;
}
}
if (var_r31->unk_3C != -2) {
break;
}
}
}
else {
do {
var_r31->unk_38 = rand8() % 9;
} while (var_r27->unk_38 == var_r31->unk_38);
var_r31->unk_3C = (var_r31->unk_38 % 3) - 1;
var_r31->unk_40 = (var_r31->unk_38 / 3) - 1;
object->trans.x = 500.0 * var_r31->unk_3C;
object->trans.z = 500.0 * var_r31->unk_40;
}
}
if (lbl_1_bss_B4 <= 0x1E) {
if (var_r31->unk_08 == -1) {
Hu3DMotionTimeSet(object->model[0], 138.0f);
}
object->trans.y = 2400.0 * (1.0 - (lbl_1_bss_B4 / 30.0));
}
if ((var_r31->unk_08 != -1) && (lbl_1_bss_B4 == 0x1E)) {
var_r28 = 4;
}
if (lbl_1_bss_B4 == ((var_r31->unk_08 != -1 ? 0xA : 0x3C) + 0x1E)) {
var_r28 = 0;
}
if (lbl_1_bss_B4 == 0x1E) {
lbl_1_data_114.unk_04 += 0x32;
}
if (lbl_1_bss_B4 == 0x1E) {
HuAudFXPlay(0x33D);
}
}
break;
case 0x3EB:
if ((lbl_1_bss_B4 == 0) && (var_r31->unk_00 == 0)) {
var_r31->unk_18 = 1;
var_r31->unk_1C = 0;
}
break;
case 0x3ED:
case 0x3EF:
if (lbl_1_bss_B0 == (var_r31->unk_00 == 0 ? 0x3ED : 0x3EF)) {
if (lbl_1_bss_B4 == 0) {
lbl_1_bss_0 = 0x12C;
lbl_1_data_12E = MGSeqCreate(1, 0xA, -1, -1);
HuWinMesMaxSizeGet(1, sp1A8, 0x280019);
lbl_1_bss_C = HuWinCreate(-10000.0f, 400.0f, sp1A8[0], sp1A8[1], 1);
HuWinBGTPLvlSet(lbl_1_bss_C, 0.0f);
HuWinMesSpeedSet(lbl_1_bss_C, 0);
HuWinMesSet(lbl_1_bss_C, 0x280019);
}
if (lbl_1_data_12E != -1) {
MGSeqParamSet(lbl_1_data_12E, 1, (lbl_1_bss_0 + 0x3A) / 60);
}
lbl_1_bss_0--;
if ((var_r22 != 0) || (lbl_1_bss_0 == 0)) {
lbl_1_bss_B4 = 0x32;
MGSeqKill(lbl_1_data_12E);
lbl_1_data_12E = -1;
HuWinExCleanup(lbl_1_bss_C);
}
if (lbl_1_bss_B4 == 0x32) {
if (fabs((500.0 * var_r31->unk_3C) - object->trans.x) < 1.0) {
if (fabs((500.0 * var_r31->unk_40) - object->trans.z) < 1.0) {
lbl_1_bss_B4 = 0x3C;
object->rot.y = 0.0f;
var_r31->unk_38 = 1 + var_r31->unk_3C + ((var_r31->unk_40 + 1) * 3);
}
}
}
}
break;
case 0x3F1:
case 0x3F2:
if ((lbl_1_bss_B0 == (var_r31->unk_00 == 0 ? 0x3F1 : 0x3F2)) && (lbl_1_bss_B4 == 0) && (var_r31->unk_08 != -1)) {
HuWinMesMaxSizeGet(1, sp1A0, 0x300025);
lbl_1_bss_C = HuWinCreate(-10000.0f, 400.0f, sp1A0[0], sp1A0[1], 1);
HuWinBGTPLvlSet(lbl_1_bss_C, 0.0f);
HuWinMesSpeedSet(lbl_1_bss_C, 0);
HuWinMesSet(lbl_1_bss_C, 0x300025);
}
break;
case 0x3F3:
if (lbl_1_bss_98 != var_r31->unk_00) {
if (lbl_1_bss_B4 == 1) {
var_r28 = 7;
}
if (lbl_1_bss_B4 == 0x78) {
Hu3DModelAttrReset(lbl_1_bss_B8->model[var_r31->unk_38 + 4], HU3D_MOTATTR_PAUSE);
if (lbl_1_bss_CC[0].unk_00 < 3) {
lbl_1_bss_CC[0].unk_04[lbl_1_bss_CC[0].unk_00] = 0.0f;
lbl_1_bss_CC[0].unk_00++;
}
}
if (lbl_1_bss_B4 == 0x99) {
Hu3DModelAttrSet(lbl_1_bss_B8->model[var_r31->unk_38 + 4], HU3D_MOTATTR_PAUSE);
}
if (lbl_1_bss_B4 == 0xB7) {
Hu3DModelAttrReset(lbl_1_bss_B8->model[var_r31->unk_38 + 4], HU3D_MOTATTR_PAUSE);
}
if ((lbl_1_bss_B4 == 0xBC) && (lbl_1_bss_CC[1].unk_00 < 3)) {
lbl_1_bss_CC[1].unk_04[lbl_1_bss_CC[1].unk_00] = 0.0f;
lbl_1_bss_CC[1].unk_00++;
}
if (lbl_1_bss_B4 == 0xD2) {
var_r28 = 8;
espAttrReset(lbl_1_data_8[1], HUSPR_ATTR_DISPOFF);
if (lbl_1_bss_CC[(var_r31->unk_08 != -1 ? var_r31->unk_08 : 8) + 2].unk_00 < 3) {
lbl_1_bss_CC[(var_r31->unk_08 != -1 ? var_r31->unk_08 : 8) + 2]
.unk_04[lbl_1_bss_CC[(var_r31->unk_08 != -1 ? var_r31->unk_08 : 8) + 2].unk_00]
= 0.0f;
lbl_1_bss_CC[(var_r31->unk_08 != -1 ? var_r31->unk_08 : 8) + 2].unk_00++;
}
if (lbl_1_data_130 != -1) {
HuAudSeqFadeOut(lbl_1_data_130, 0x64);
lbl_1_data_130 = -1;
}
}
if ((lbl_1_bss_B4 >= 0xD2) && (lbl_1_bss_B4 <= 0xD6)) {
s32 sp1BC[9] = { 0, -12, -36, 0, 0, -12, -36, -48, 0 };
spBC = (lbl_1_bss_B4 - 0xD2) / 4.0;
var_f26 = (lbl_1_bss_B4 - 0xD2) / 4.0;
var_f26 = var_f26 > 1.0f ? 1.0f : var_f26;
espPosSet(lbl_1_data_8[1], 290.0f, (64.0f * (1.0f - spBC)) + (sp1BC[(var_r31->unk_08 != -1 ? var_r31->unk_08 : 8)] + 0x8C));
espScaleSet(lbl_1_data_8[1], var_f26, var_f26);
}
if (lbl_1_bss_B4 == 0x10E) {
Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_PAUSE);
espAttrSet(lbl_1_data_8[1], HUSPR_ATTR_DISPOFF);
}
if (lbl_1_bss_B4 == 0x122) {
// TODO remove temporary?
spB8 = HuAudFXPlay((var_r31->unk_08 != -1 ? var_r31->unk_08 : 8) + 0x800);
HuAudFXFadeOut(spB8, 0x9C4);
}
if (lbl_1_bss_B4 >= 0x13B) {
object->trans.y -= 77.0f;
}
}
else if ((lbl_1_bss_B4 == 0x3C) && (lbl_1_data_138[0] != -1)) {
Hu3DParManKill(lbl_1_data_138[0]);
lbl_1_data_138[0] = -1;
}
break;
case 0x3F4:
if (var_r31->unk_00 == lbl_1_bss_98) {
if ((lbl_1_bss_B4 == 1) && (var_r31->unk_08 == -1)) {
HuAudFXPlay(0x3A);
}
var_r28 = 9;
}
break;
}
switch (var_r31->unk_18) {
case 0:
var_r31->unk_1C++;
break;
case 1:
var_r31->unk_1C++;
if (var_r31->unk_1C <= 0x3C) {
var_r28 = 5;
object->rot.y = -180.0 * (var_r31->unk_1C / 60.0);
}
else {
Hu3DMotionTimeSet(object->model[0], 120.0f);
var_r28 = 0;
var_r31->unk_18 = 0;
var_r31->unk_1C = 0;
}
break;
case 2:
var_r31->unk_1C++;
break;
case 3:
if (var_r31->unk_1C == 0) {
lbl_1_data_15C = 6;
}
if (var_r31->unk_1C < 0x168) {
var_r23 = &Hu3DData[lbl_1_bss_B8->model[3]];
if (var_r31->unk_1C == 0) {
Hu3DModelAttrReset(lbl_1_bss_B8->model[3], HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(lbl_1_bss_B8->model[3], object->trans.x, 625.0f + object->trans.y, object->trans.z);
Hu3DModelScaleSet(lbl_1_bss_B8->model[3], 0.1f, 0.1f, 0.1f);
Hu3DModelTPLvlSet(lbl_1_bss_B8->model[3], 1.0f);
lbl_1_bss_1C = 0;
HuAudFXPlay(0x7F4);
lbl_1_data_16C = HuAudFXPlay(0x7F3);
}
var_r23->rot.y = lbl_1_bss_1C % 360;
lbl_1_bss_1C += 0x19;
if (var_r31->unk_1C < 0xB4) {
var_f20 = 0.0f;
var_f21 = 1.0f;
}
else {
var_f20 = 1.0f;
var_f21 = 1.0f;
}
var_r23->scale.x = var_f20 + (var_f21 * sind((float)(var_r31->unk_1C % 180)));
var_r23->scale.y = var_r23->scale.z = var_r23->scale.x;
if (var_r31->unk_1C < 0xB4) {
var_r31->unk_1C += 6;
}
else {
var_r31->unk_1C = var_r31->unk_1C + 0x12;
}
if (var_r31->unk_1C >= 0x168) {
var_r31->unk_1C = 0x168;
Hu3DModelRotSet(lbl_1_bss_B8->model[3], 0.0f, 0.0f, 0.0f);
}
}
else {
spB4 = &Hu3DData[lbl_1_bss_B8->model[3]];
var_r31->unk_1C = var_r31->unk_1C + 4;
if (var_r31->unk_1C > 0x2D0) {
var_r31->unk_1C -= 0x168;
}
spB4->pos.y += (0.20000000298023224 * sind((var_r31->unk_1C - 0x168)));
if (var_r22 != 0) {
lbl_1_bss_B4 = 0x32;
var_r31->unk_18 = 4;
var_r31->unk_1C = 0;
var_r28 = 6;
}
}
break;
case 4:
var_r31->unk_1C++;
if (var_r31->unk_1C >= 0x1B) {
var_r29 = &Hu3DData[lbl_1_bss_B8->model[3]];
var_r26 = var_r31->unk_1C - 0x1B;
if (var_r26 == 0) {
if (var_r31->unk_04 != -1) {
omVibrate(var_r31->unk_04, 0xC, 4, 2);
}
HuWinExCleanup(lbl_1_bss_C);
lbl_1_data_15C = -1;
if (lbl_1_data_16C != -1) {
HuAudFXStop(lbl_1_data_16C);
lbl_1_data_16C = -1;
}
HuAudFXPlay(0x7F5);
}
if (var_r26 == 8) {
if (lbl_1_data_138[0] == -1) {
lbl_1_data_138[0] = fn_1_4BE8();
Hu3DParManPosSet(lbl_1_data_138[0], var_r29->pos.x, var_r29->pos.y, var_r29->pos.z);
}
Hu3DModelAttrSet(lbl_1_bss_B8->model[3], HU3D_ATTR_DISPOFF);
}
else if (var_r26 > 8) {
if (var_r31->unk_20 == 6) {
if (Hu3DMotionTimeGet(object->model[0]) >= Hu3DMotionMaxTimeGet(object->model[0])) {
var_r28 = 0;
}
}
if (var_r26 <= 0x1C) {
var_f27 = (var_r26 - 8) / 10.0;
spB0 = ((var_r26 - 8) * 0x12);
var_f27 = var_f27 > 1.0f ? 2.5 : 2.5 * var_f27;
Hu3DModelAttrReset(lbl_1_bss_B8->model[lbl_1_bss_18 + 0xD], HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(lbl_1_bss_B8->model[lbl_1_bss_18 + 0xD], var_r29->pos.x, var_r29->pos.y, var_r29->pos.z);
Hu3DModelScaleSet(lbl_1_bss_B8->model[lbl_1_bss_18 + 0xD], var_f27, var_f27, var_f27);
}
if ((var_r26 >= 0x2D) && (var_r26 <= 0x41)) {
var_f25 = (var_r26 - 0x2D) / 5.0;
spAC = (var_r26 - 0x2D) * 0x12;
var_f25 = var_f25 > 1.0f ? 1.0f : var_f25;
var_f25 = 0.0;
Hu3DModelAttrReset(lbl_1_bss_B8->model[lbl_1_bss_18 + 0xD], HU3D_ATTR_DISPOFF);
Hu3DModelPosSet(lbl_1_bss_B8->model[lbl_1_bss_18 + 0xD], var_r29->pos.x, var_r29->pos.y - (30.0f * var_f25), var_r29->pos.z);
var_r31->unk_1C += 5;
}
if (var_r26 == 0x62) {
Hu3DModelAttrSet(lbl_1_bss_B8->model[lbl_1_bss_18 + 0xD], HU3D_ATTR_DISPOFF);
lbl_1_bss_18 = lbl_1_bss_18 >= 9 ? var_r27->unk_38 : lbl_1_bss_18;
if (lbl_1_bss_18 == var_r27->unk_38) {
lbl_1_bss_98 = var_r31->unk_00;
}
else if (lbl_1_bss_18 == var_r31->unk_38) {
lbl_1_bss_98 = var_r27->unk_00;
}
var_r31->unk_18 = lbl_1_bss_98 == -1 ? 5 : 0;
var_r31->unk_1C = 0;
}
}
else {
if (var_r26 < 4) {
var_r29->pos.y += 10.0f + (0.5f * var_r26);
var_r29->scale.x += 0.10000000149011612 * sind((4.0f * var_r26));
var_r29->scale.y = var_r29->scale.z = var_r29->scale.x;
}
else {
var_f24 = (0xFF - (var_r26 << 5));
var_f24 = var_f24 * 0.003921569f; // 1 / 255
Hu3DModelTPLvlSet(lbl_1_bss_B8->model[3], var_f24);
}
var_r29->pos.y += -0.49f * var_r26 * var_r26;
}
}
break;
case 5:
if (var_r31->unk_1C == 0) {
Hu3DModelAttrReset(lbl_1_bss_B8->model[lbl_1_bss_18 + 4], HU3D_MOTATTR_PAUSE);
lbl_1_bss_28C[lbl_1_bss_18].unk_0C = 0;
if (lbl_1_bss_CC[0].unk_00 < 3) {
lbl_1_bss_CC[0].unk_04[lbl_1_bss_CC->unk_00] = 0.0f;
lbl_1_bss_CC[0].unk_00++;
}
}
var_r31->unk_1C++;
if ((var_r31->unk_1C == 0x3C) && (*lbl_1_data_138 != -1)) {
Hu3DParManKill(*lbl_1_data_138);
lbl_1_data_138[0] = -1;
}
if (var_r31->unk_1C == 0x21) {
Hu3DModelAttrSet(lbl_1_bss_B8->model[lbl_1_bss_18 + 4], HU3D_MOTATTR_PAUSE);
}
if (var_r31->unk_1C == 0x3F) {
Hu3DModelAttrReset(lbl_1_bss_B8->model[lbl_1_bss_18 + 4], HU3D_MOTATTR_PAUSE);
}
if ((var_r31->unk_1C == 0x44) && (lbl_1_bss_CC[1].unk_00 < 3)) {
lbl_1_bss_CC[1].unk_04[lbl_1_bss_CC[1].unk_00] = 0.0f;
lbl_1_bss_CC[1].unk_00++;
}
if (var_r31->unk_1C == 0x82) {
var_r31->unk_18 = 0;
var_r31->unk_1C = 0;
}
break;
}
if (((var_r31->unk_18 == 3) || (var_r31->unk_18 == 4)) && (lbl_1_data_15C >= 0)) {
lbl_1_data_15C++;
if (lbl_1_data_15C >= 6) {
spA4 = lbl_1_bss_18;
for (spA8 = 0; spA8 < 0x32; spA8++) {
loop_344:
lbl_1_bss_18 = rand8() % 11;
if (lbl_1_bss_18 >= 9) {
if (lbl_1_bss_18 == (var_r31->unk_00 + 9)) {
goto loop_344;
}
}
if ((lbl_1_bss_18 < 9) && (lbl_1_bss_28C[lbl_1_bss_18].unk_0C == 0)) {
goto loop_344;
}
if (spA4 != lbl_1_bss_18) {
break;
}
}
spA4 = lbl_1_bss_18 >= 9 ? (var_r27->unk_08 == -1 ? 0x11 : (var_r27->unk_08 + 9)) : lbl_1_bss_18;
lbl_1_data_15C = 0;
Hu3DMotionTimeSet(lbl_1_bss_B8->model[3], 0.5 + spA4);
}
}
if (var_r31->unk_24 >= 0) {
var_r28 = var_r31->unk_24;
}
if ((var_r28 >= 0) && (var_r28 != var_r31->unk_20)) {
Hu3DMotionShiftSet(object->model[0], object->motion[var_r28], lbl_1_data_C4[var_r28],
(var_r31->unk_08 != -1 ? lbl_1_data_9C[var_r28] : lbl_1_data_EC[var_r28]),
(var_r28 == 8 ? 0x40000002
: (var_r31->unk_08 != -1 ? lbl_1_data_88[var_r28] : lbl_1_data_92[var_r28]) != 0 ? 0
: 0x40000001));
var_r31->unk_20 = var_r28;
}
}
s32 lbl_1_data_1A0 = -1;
float lbl_1_data_1A4 = 3500.0f;
float lbl_1_data_1A8 = 100.0f;
float lbl_1_data_1AC = -59.0f;
void fn_1_350C(omObjData *var_r27)
{
M458DllWork *spC[2];
float var_f31;
float var_f29;
float var_f27;
float var_f26;
float var_f25;
float var_f19;
s32 var_r31;
s32 var_r30;
ModelData *var_r29;
ModelData *var_r28;
ModelData *var_r26;
s32 var_r25;
s32 var_r24;
s32 var_r23;
for (var_r31 = 0; var_r31 < 2; var_r31++) {
spC[var_r31] = (&lbl_1_bss_BC)[var_r31]->data;
}
lbl_1_bss_4++;
switch (lbl_1_bss_B0) {
case 0x3EA:
if (lbl_1_bss_B4 <= 0x77) {
var_f27 = lbl_1_bss_B4 / 119.0;
var_f27 = var_f27 > 1.0f ? 1.0f : var_f27;
Hu3DModelPosSet(lbl_1_bss_B8->model[2], 0.0f, 100.0f + (-1500.0f * (1.0f - var_f27)), -950.0f);
Hu3DModelAttrReset(lbl_1_bss_B8->model[1], HU3D_ATTR_DISPOFF);
Hu3DModelAttrReset(lbl_1_bss_B8->model[2], HU3D_ATTR_DISPOFF);
}
break;
case 0x3EB:
if (lbl_1_bss_B4 == 0) {
lbl_1_bss_8C = 0;
}
if (lbl_1_bss_B4 == 0x14) {
espAttrReset(lbl_1_data_8[0], HUSPR_ATTR_DISPOFF);
}
if (((lbl_1_bss_B4 >= 0x14) && (lbl_1_bss_B4 <= 0x32)) || ((lbl_1_bss_B4 >= 0xB4) && (lbl_1_bss_B4 <= 0xD2))) {
var_f19 = lbl_1_bss_B4 <= 0x78 ? ((lbl_1_bss_B4 - 0x14) / 30.0) : (1.0 - ((lbl_1_bss_B4 - 0xB4) / 30.0));
espTPLvlSet(lbl_1_data_8[0], var_f19);
}
if (lbl_1_bss_B4 == 0xD2) {
espAttrSet(lbl_1_data_8[0], HUSPR_ATTR_DISPOFF);
}
case 0x3EC:
case 0x3ED:
lbl_1_bss_8C++;
lbl_1_bss_8C %= 0x168;
if (lbl_1_bss_14 != 0) {
Hu3DModelPosSet(lbl_1_bss_B8->model[2], 0.0f, 100.0 + (25.0 * sind((360.0 * ((lbl_1_bss_8C % 360) / 360.0)))), -950.0f);
}
break;
case 0x3EE:
if (lbl_1_bss_14 != 0) {
var_r26 = &Hu3DData[lbl_1_bss_B8->model[2]];
if (lbl_1_bss_B4 >= 7) {
var_r26->pos.y += 12.5;
}
if (lbl_1_bss_B4 == 0) {
Hu3DMotionShiftSet(var_r27->model[1], var_r27->motion[1], 0.0f, 8.0f, HU3D_MOTATTR_LOOP);
}
}
else {
var_r29 = &Hu3DData[lbl_1_bss_B8->model[spC[0]->unk_38 + 4]];
if (lbl_1_bss_20 == 0) {
lbl_1_bss_20 = 1;
HuAudFXPlay(0x7F6);
}
if (lbl_1_bss_B4 == 1) {
lbl_1_bss_28C[spC[0]->unk_38].unk_08 = 83.333336f;
}
var_r29->pos.y = (0.9 * var_r29->pos.y) + (0.1 * lbl_1_bss_28C[spC[0]->unk_38].unk_08);
lbl_1_bss_BC->trans.y = var_r29->pos.y - -16.666666666666668;
}
break;
case 0x3F0:
Hu3DModelAttrSet(lbl_1_bss_B8->model[1], HU3D_ATTR_DISPOFF);
Hu3DModelAttrSet(lbl_1_bss_B8->model[2], HU3D_ATTR_DISPOFF);
if (lbl_1_bss_B4 <= 0x3C) {
var_f29 = lbl_1_bss_B4 / 60.0;
var_f29 = var_f29;
var_f29 = 1.0f - ((1.0f - var_f29) * (1.0f - var_f29));
if (lbl_1_bss_B4 == 0) {
lbl_1_bss_28C[spC[0]->unk_38].unk_08 = -16.666666f;
}
for (var_r31 = 0; var_r31 < 9; var_r31++) {
var_r28 = &Hu3DData[lbl_1_bss_B8->model[var_r31 + 4]];
Hu3DModelPosSet(lbl_1_bss_B8->model[var_r31 + 4], (500.0 + (200.0f * var_f29)) * (lbl_1_bss_28C[var_r31].unk_00 - 1),
(0.9 * var_r28->pos.y) + (0.1 * lbl_1_bss_28C[spC[0]->unk_38].unk_08),
(500.0 + (200.0f * var_f29)) * (lbl_1_bss_28C[var_r31].unk_04 - 1));
for (var_r30 = 0; var_r30 < 2; var_r30++) {
if (var_r31 == spC[var_r30]->unk_38) {
(&lbl_1_bss_BC)[var_r30]->trans.x = (500.0 + (200.0f * var_f29)) * (lbl_1_bss_28C[var_r31].unk_00 - 1);
(&lbl_1_bss_BC)[var_r30]->trans.y = var_r28->pos.y - -16.666666666666668;
(&lbl_1_bss_BC)[var_r30]->trans.z = (500.0 + (200.0f * var_f29)) * (lbl_1_bss_28C[var_r31].unk_04 - 1);
}
}
}
}
break;
}
var_r25 = lbl_1_data_1A0;
{
UnkCameraStruct sp14[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 },
{ 800.0f, 0.0f, 200.0f, 0.0f, -89.0f, 0.0f },
{ 1800.0f, 0.0f, 200.0f, 0.0f, -30.0f, 0.0f },
};
if (lbl_1_bss_98 != -1) {
sp14[3].unk_04 = (&lbl_1_bss_BC)[1 - lbl_1_bss_98]->trans.x;
sp14[3].unk_0C = (&lbl_1_bss_BC)[1 - lbl_1_bss_98]->trans.z;
sp14[4].unk_04 = (&lbl_1_bss_BC)[1 - lbl_1_bss_98]->trans.x;
sp14[4].unk_0C = (&lbl_1_bss_BC)[1 - lbl_1_bss_98]->trans.z;
sp14[5].unk_04 = (&lbl_1_bss_BC)[lbl_1_bss_98]->trans.x;
sp14[5].unk_0C = (&lbl_1_bss_BC)[lbl_1_bss_98]->trans.z;
}
if (lbl_1_data_1A0 == -1) {
lbl_1_data_1A0 = 0;
lbl_1_bss_24 = 1;
lbl_1_bss_28 = 1.0f;
}
if (lbl_1_data_1A0 == 0) {
lbl_1_data_1A0 = 1;
lbl_1_bss_24 = 1;
lbl_1_bss_28 = 0.5f;
}
if ((lbl_1_bss_B0 == 0x3F0) && (lbl_1_bss_B4 >= 1) && (lbl_1_data_1A0 == 1)) {
lbl_1_data_1A0 = 2;
lbl_1_bss_24 = 0;
lbl_1_bss_28 = 0.0f;
}
if ((lbl_1_bss_B0 == 0x3F3) && (lbl_1_data_1A0 == 2)) {
lbl_1_data_1A0 = 3;
lbl_1_bss_24 = 0;
lbl_1_bss_28 = 0.0f;
}
if ((lbl_1_bss_B0 == 0x3F3) && (lbl_1_bss_B4 >= 0x12C) && (lbl_1_data_1A0 == 3)) {
lbl_1_data_1A0 = 4;
lbl_1_bss_24 = 1;
lbl_1_bss_28 = 1.0f;
}
if ((lbl_1_bss_B0 == 0x3F4) && (lbl_1_data_1A0 == 4)) {
lbl_1_data_1A0 = 5;
lbl_1_bss_24 = 0;
lbl_1_bss_28 = 0.0f;
}
if ((var_r25 != lbl_1_data_1A0) && (var_r25 != -1)) {
lbl_1_data_1A4 = CZoom;
lbl_1_data_1A8 = Center.y;
lbl_1_bss_30 = Center.z;
lbl_1_data_1AC = CRot.x;
lbl_1_bss_34 = CRot.y;
}
if (lbl_1_bss_28 <= 1.0f) {
if (lbl_1_bss_24 == 0) {
lbl_1_bss_28 = 1.0 - (0.95 * (1.0f - lbl_1_bss_28));
var_f31 = lbl_1_bss_28;
}
else {
lbl_1_bss_28 += 0.008333333333333333;
lbl_1_bss_28 = lbl_1_bss_28 > 1.0f ? 1.0f : lbl_1_bss_28;
var_f31 = 0.5 + (-0.5 * cosd((180.0f * lbl_1_bss_28)));
var_f31 = var_f31;
}
lbl_1_bss_28 = lbl_1_bss_28 > 1.0f ? 1.0f : lbl_1_bss_28;
CZoom = (var_f31 * sp14[lbl_1_data_1A0].unk_00) + (lbl_1_data_1A4 * (1.0f - var_f31));
Center.x = (var_f31 * sp14[lbl_1_data_1A0].unk_04) + (lbl_1_bss_2C * (1.0f - var_f31));
Center.y = (var_f31 * sp14[lbl_1_data_1A0].unk_08) + (lbl_1_data_1A8 * (1.0f - var_f31));
Center.z = (var_f31 * sp14[lbl_1_data_1A0].unk_0C) + (lbl_1_bss_30 * (1.0f - var_f31));
CRot.x = (var_f31 * sp14[lbl_1_data_1A0].unk_10) + (lbl_1_data_1AC * (1.0f - var_f31));
CRot.y = (var_f31 * sp14[lbl_1_data_1A0].unk_14) + (lbl_1_bss_34 * (1.0f - var_f31));
}
}
if ((lbl_1_bss_B0 == 0x3E9) || (lbl_1_bss_B0 == 0x3EE)) {
var_f25 = 0.0f;
var_f26 = 0.0f;
if ((lbl_1_data_114.unk_00 % 2) >= 0) {
lbl_1_data_114.unk_08 = lbl_1_data_114.unk_10;
lbl_1_data_114.unk_0C = lbl_1_data_114.unk_14;
do {
lbl_1_data_114.unk_10 = 2.0 * (rand8() / 255.0) - 1.0;
lbl_1_data_114.unk_14 = (2.0 * (rand8() / 255.0)) - 1.0;
lbl_1_data_114.unk_10 = 0.0f;
} while (sqrtf(((lbl_1_data_114.unk_10 - lbl_1_data_114.unk_08) * (lbl_1_data_114.unk_10 - lbl_1_data_114.unk_08))
+ ((lbl_1_data_114.unk_14 - lbl_1_data_114.unk_0C) * (lbl_1_data_114.unk_14 - lbl_1_data_114.unk_0C)))
< 0.75);
}
var_f25 = lbl_1_data_114.unk_08;
var_f26 = lbl_1_data_114.unk_0C;
var_f25 *= lbl_1_data_114.unk_04 * 2;
var_f26 *= lbl_1_data_114.unk_04 * 2;
lbl_1_data_114.unk_00 = !lbl_1_data_114.unk_00;
if (lbl_1_data_114.unk_04 > 0x18) {
var_r24 = 0x17;
}
else {
if ((lbl_1_data_114.unk_04 - 1) > 0) {
var_r23 = lbl_1_data_114.unk_04 - 1;
}
else {
var_r23 = 0;
}
var_r24 = var_r23;
}
lbl_1_data_114.unk_04 = var_r24;
Center.x = 0.0f;
Center.y = 100.0f + var_f26;
}
}
const HsfanimStruct00 lbl_1_rodata_2A0 = {
0x0096,
{ 0x00, 0x00 },
50.0f,
0.0f,
65.0f,
{ 0.0f, -0.195f, 0.0f },
100.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 },
},
};
s16 fn_1_4BE8(void)
{
s16 var_r31;
s16 var_r30;
AnimData *var_r29;
void *var_r28;
HsfanimStruct00 sp8 = lbl_1_rodata_2A0;
lbl_1_bss_3C = sp8;
var_r28 = HuDataSelHeapReadNum(0x7006B, MEMORY_DEFAULT_NUM, HEAP_DATA);
var_r29 = HuSprAnimRead(var_r28);
var_r31 = Hu3DParManCreate(var_r29, 0x64, &lbl_1_bss_3C);
Hu3DParManAttrSet(var_r31, 0x108);
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);
Hu3DParticleBlendModeSet(var_r30, 0);
return var_r31;
}
void fn_1_4D44(void)
{
M458DllWork *spC[2];
s16 sp8;
s16 var_r31;
s32 var_r30;
WindowData *var_r29;
s32 var_r28;
s32 var_r27;
s32 var_r26;
s32 var_r25;
sp8 = 0;
for (var_r30 = 0; var_r30 < 2; var_r30++) {
spC[var_r30] = (&lbl_1_bss_BC)[var_r30]->data;
}
HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 0x3C);
HuWinComKeyReset();
var_r31 = HuWinExCreateStyled(36.0f, 344.0f, 0x1F8, 0x60, 6, 0);
var_r29 = &winData[var_r31];
if (spC[1]->unk_0C != -1) {
var_r28 = 1 << spC[1]->unk_0C;
}
else {
if (spC[1]->unk_08 != -1) {
var_r27 = 1 << GWPlayerCfg[spC[1]->unk_04].pad_idx;
}
else {
var_r27 = 0;
}
var_r28 = var_r27;
}
if (spC[0]->unk_0C != -1) {
var_r26 = 1 << spC[0]->unk_0C;
}
else {
if (spC[0]->unk_08 != -1) {
var_r25 = 1 << GWPlayerCfg[spC[0]->unk_04].pad_idx;
}
else {
var_r25 = 0;
}
var_r26 = var_r25;
}
var_r29->active_pad = var_r26 | var_r28;
OSReport("%d\n", var_r29->active_pad);
HuWinBGTPLvlSet(var_r31, 0.8f);
HuWinMesSpeedSet(var_r31, 1);
HuWinExAnimIn(var_r31);
HuWinMesSet(var_r31, 0x300024);
if (((spC[0]->unk_0C == -1) || (spC[0]->unk_08 == -1)) && ((spC[1]->unk_0C == -1) || (spC[1]->unk_08 == -1))) {
HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 0x3C);
HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 0x3C);
HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 0x3C);
HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 0x3C);
HuWinComKeyWait(0x100, 0x100, 0x100, 0x100, 0x3C);
}
HuWinMesWait(var_r31);
HuWinExAnimOut(var_r31);
HuWinExCleanup(var_r31);
lbl_1_bss_10 = 0;
HuPrcEnd();
}
void fn_1_5014(omObjData *var_r30)
{
M458DllWork *spC[2];
s32 sp8;
s32 var_r31;
for (var_r31 = 0; var_r31 < 0x1C; var_r31++) {
s32 sp14[] = {
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_CC[var_r31].unk_00 > 3) {
lbl_1_bss_CC[var_r31].unk_00 = 3;
}
if (lbl_1_bss_CC[var_r31].unk_00 > 0) {
sp8 = HuAudFXPlay(sp14[var_r31]);
lbl_1_bss_CC[var_r31].unk_00--;
}
}
for (var_r31 = 0; var_r31 < 2; var_r31++) {
spC[var_r31] = (&lbl_1_bss_BC)[var_r31]->data;
}
if ((omSysExitReq != 0) && (WipeStatGet() == 0)) {
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
var_r30->func = fn_1_6D9C;
}
switch (lbl_1_bss_B0) {
case 0x3E8:
if (WipeStatGet() == 0) {
lbl_1_bss_B0++;
lbl_1_bss_B4 = 0.0f;
if (lbl_1_data_138[0] != -1) {
Hu3DParManKill(*lbl_1_data_138);
lbl_1_data_138[0] = -1;
}
}
default:
break;
case 0x3E9:
lbl_1_bss_B4++;
if (lbl_1_bss_B4 == ((lbl_1_bss_14 == 0 ? 0x1E : 0) + 0x3C)) {
lbl_1_bss_B0 = lbl_1_bss_14 != 0 ? 0x3EA : 0x3ED;
lbl_1_bss_B4 = 0.0f;
}
break;
case 0x3EA:
lbl_1_bss_B4++;
if (lbl_1_bss_B4 == 0x78) {
lbl_1_bss_B0++;
lbl_1_bss_B4 = 0.0f;
}
break;
case 0x3EB:
lbl_1_bss_B4++;
if (lbl_1_bss_B4 > 0xD2) {
lbl_1_bss_B0++;
lbl_1_bss_B4 = 0.0f;
}
break;
case 0x3EC:
if (lbl_1_bss_B4 == 0) {
HuPrcChildCreate(fn_1_4D44, 0x64, 0x2000, 0, HuPrcCurrentGet());
lbl_1_bss_10 = 1;
lbl_1_bss_B4++;
break;
}
if (lbl_1_bss_10 == 0) {
lbl_1_bss_B4++;
if (spC[0]->unk_18 == 0) {
lbl_1_bss_B0++;
lbl_1_bss_B4 = 0.0f;
}
}
break;
case 0x3ED:
lbl_1_bss_B4 += lbl_1_bss_B4 < 0x1E;
if (lbl_1_bss_B4 >= 0x3C) {
lbl_1_bss_B0++;
lbl_1_bss_B4 = 0.0f;
}
break;
case 0x3EE:
lbl_1_bss_B4++;
if (lbl_1_bss_B4 == ((spC[1]->unk_08 == -1 ? 0x78 : 0x3C) + (lbl_1_bss_14 == 0 ? 0x1E : 0))) {
lbl_1_bss_B0++;
if (spC[1]->unk_08 == -1) {
lbl_1_bss_B0++;
}
lbl_1_bss_B4 = 0.0f;
}
break;
case 0x3EF:
lbl_1_bss_B4 += lbl_1_bss_B4 < 0x1E;
if (lbl_1_bss_B4 >= 0x3C) {
lbl_1_bss_B0++;
lbl_1_bss_B4 = 0.0f;
}
break;
case 0x3F0:
lbl_1_bss_B4++;
if (lbl_1_bss_B4 == 0x5A) {
lbl_1_bss_B0++;
lbl_1_bss_B4 = 0.0f;
}
break;
case 0x3F1:
case 0x3F2:
if (lbl_1_bss_B4 == 0) {
spC[lbl_1_bss_B0 == 0x3F1 ? 0 : 1]->unk_18 = 3;
spC[lbl_1_bss_B0 == 0x3F1 ? 0 : 1]->unk_1C = 0;
}
lbl_1_bss_B4++;
if (spC[lbl_1_bss_B0 == 0x3F1 ? 0 : 1]->unk_18 == 0) {
if (lbl_1_bss_98 != -1) {
lbl_1_bss_B0 = 0x3F3;
}
else {
lbl_1_bss_B0 = lbl_1_bss_B0 == 0x3F1 ? 0x3F2 : 0x3F1;
}
lbl_1_bss_B4 = 0.0f;
}
break;
case 0x3F3:
lbl_1_bss_B4++;
if (lbl_1_bss_B4 >= 0x1E0) {
lbl_1_bss_B0++;
lbl_1_bss_B4 = 0.0f;
}
break;
case 0x3F4:
lbl_1_bss_B4++;
if (lbl_1_bss_B4 == 1) {
if (lbl_1_bss_98 != 4) {
if (spC[lbl_1_bss_98]->unk_08 != -1) {
HuAudSStreamPlay(1);
}
else {
HuAudSStreamPlay(3);
}
if (lbl_1_bss_14 != 0) {
if (lbl_1_bss_98 == 0) {
_SetFlag(0x10007);
}
}
else {
GWPlayerCoinWinSet(spC[lbl_1_bss_98]->unk_04, 10);
}
}
else {
lbl_1_bss_98 == 4;
}
}
if (210.0f < lbl_1_bss_B4) {
if (lbl_1_data_134 != -1) {
HuAudFXStop(lbl_1_data_134);
lbl_1_data_134 = -1;
}
lbl_1_data_12C = -1;
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 0x3C);
var_r30->func = fn_1_6D9C;
}
break;
}
}
s32 lbl_1_data_1E8[0xB] = {
0x570013,
0x570014,
0x570015,
0x570016,
0x570017,
0x570018,
0x570019,
0x57001A,
0x57001B,
0x57001C,
0x57001D,
};
void fn_1_59DC(omObjData *object)
{
M458DllWork *sp18[2];
s32 var_r30;
s16 var_r29;
s16 var_r28;
s32 var_r27;
void *var_r26;
AnimData *var_r25;
s16 var_r24;
s16 var_r23;
for (var_r30 = 0; var_r30 < 2; var_r30++) {
sp18[var_r30] = (&lbl_1_bss_BC)[var_r30]->data;
}
object->model[1] = Hu3DModelCreateFile(0x3000E);
Hu3DModelAttrSet(object->model[1], HU3D_MOTATTR_LOOP);
object->model[2] = Hu3DModelCreateFile(0x30000);
Hu3DModelAttrSet(object->model[2], HU3D_MOTATTR_LOOP);
Hu3DModelHookSet(object->model[2], "minik01", object->model[1]);
Hu3DModelPosSet(object->model[2], 0.0f, -750.0f, -700.0f);
Hu3DModelAttrSet(object->model[1], HU3D_ATTR_DISPOFF);
Hu3DModelAttrSet(object->model[2], HU3D_ATTR_DISPOFF);
object->motion[0] = Hu3DJointMotionFile(object->model[1], 0x3000F);
object->motion[1] = Hu3DJointMotionFile(object->model[1], 0x30012);
Hu3DMotionSet(object->model[1], object->motion[0]);
Hu3DModelLayerSet(object->model[2], 1);
Hu3DModelLayerSet(object->model[1], 1);
object->model[0] = Hu3DModelCreateFile(0x570008);
Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_LOOP);
Hu3DMotionSpeedSet(object->model[0], 0.1f);
object->model[3] = Hu3DModelCreateFile(0x570009);
Hu3DModelAttrSet(object->model[3], HU3D_MOTATTR_LOOP);
Hu3DModelPosSet(object->model[3], 0.0f, 400.0f, 0.0f);
Hu3DModelAttrSet(object->model[3], HU3D_ATTR_DISPOFF);
Hu3DModelLayerSet(object->model[3], 1);
Hu3DMotionSpeedSet(object->model[3], 0.0f);
for (var_r30 = 0; var_r30 < 9; var_r30++) {
object->model[var_r30 + 4] = Hu3DModelCreateFile(var_r30 + 0x57000A);
lbl_1_bss_28C[var_r30].unk_00 = var_r30 % 3;
lbl_1_bss_28C[var_r30].unk_04 = var_r30 / 3;
lbl_1_bss_28C[var_r30].unk_08 = 0.0f;
lbl_1_bss_28C[var_r30].unk_0C = 1;
Hu3DModelPosSet(
lbl_1_bss_B8->model[var_r30 + 4], 500.0 * (lbl_1_bss_28C[var_r30].unk_00 - 1), -16.666666f, 500.0 * (lbl_1_bss_28C[var_r30].unk_04 - 1));
Hu3DModelScaleSet(lbl_1_bss_B8->model[var_r30 + 4], 1.6666666f, 1.6666666f, 1.6666666f);
Hu3DModelAttrSet(object->model[var_r30 + 4], HU3D_MOTATTR_PAUSE);
Hu3DModelShadowMapSet(object->model[var_r30 + 4]);
Hu3DModelLayerSet(object->model[var_r30 + 4], 1);
}
for (var_r30 = 0; var_r30 < 0xB; var_r30++) {
if ((var_r30 == 9) || (var_r30 == 0xA)) {
if (sp18[var_r30 - 9]->unk_08 != -1) {
var_r27 = sp18[var_r30 - 9]->unk_08 + 0x57001C;
}
else {
var_r27 = 0x570024;
}
lbl_1_data_1E8[var_r30] = var_r27;
}
object->model[var_r30 + 0xD] = Hu3DModelCreateFile(lbl_1_data_1E8[var_r30]);
Hu3DMotionTimeSet(object->model[var_r30 + 0xD], 10.0f);
Hu3DMotionSpeedSet(object->model[var_r30 + 0xD], 0.0f);
Hu3DModelAttrSet(object->model[var_r30 + 0xD], HU3D_ATTR_DISPOFF);
Hu3DModelLayerSet(object->model[var_r30 + 0xD], 1);
}
for (var_r30 = 0; var_r30 < 2; var_r30++) {
s32 sp10[2] = { 0x120, 0x122 };
s32 sp8[2] = { 0xF0, 0x8C };
lbl_1_data_8[var_r30] = espEntry(lbl_1_data_0[var_r30], 0, 0);
espDrawNoSet(lbl_1_data_8[var_r30], 0);
espAttrSet(lbl_1_data_8[var_r30], HUSPR_ATTR_NOANIM | HUSPR_ATTR_DISPOFF);
espBankSet(lbl_1_data_8[var_r30], 0);
espPriSet(lbl_1_data_8[var_r30], 0x80 - var_r30);
espPosSet(lbl_1_data_8[var_r30], sp10[var_r30], sp8[var_r30]);
espTPLvlSet(lbl_1_data_8[var_r30], 1.0f);
}
{
HsfanimStruct00 sp20 = lbl_1_rodata_2A0;
lbl_1_bss_3C = sp20;
}
var_r26 = HuDataSelHeapReadNum(0x7006B, MEMORY_DEFAULT_NUM, HEAP_DATA);
var_r25 = HuSprAnimRead(var_r26);
var_r29 = Hu3DParManCreate(var_r25, 0x64, &lbl_1_bss_3C);
Hu3DParManAttrSet(var_r29, 0x108);
Hu3DParManRotSet(var_r29, 0.0f, 0.0f, 0.0f);
Hu3DParManVecSet(var_r29, 0.0f, 0.4f, 0.2f);
var_r28 = Hu3DParManModelIDGet(var_r29);
Hu3DModelLayerSet(var_r28, 2);
Hu3DParticleBlendModeSet(var_r28, 0);
var_r24 = var_r29;
var_r23 = var_r24;
lbl_1_data_138[0] = var_r23;
Hu3DParManPosSet(lbl_1_data_138[0], 10000.0f, -10000.0f, 10000.0f);
object->func = fn_1_350C;
}
void fn_1_6314(omObjData *object)
{
s32 sp10;
void *spC;
s32 sp8;
M458DllWork *var_r31;
s32 var_r29;
s32 var_r28;
s32 var_r27;
s32 var_r26;
s32 var_r25;
s32 var_r24;
s32 var_r23;
s32 var_r22;
s32 var_r21;
s32 var_r20;
s32 var_r19;
s32 var_r18;
s32 var_r17;
var_r31 = object->data;
spC = (&lbl_1_bss_BC)[1 - object->work[0]]->data;
memset(var_r31, 0, 0x44);
var_r31->unk_00 = object->work[0];
// probably ternary, but it causes regswaps
if (GWPlayerCfg->group == var_r31->unk_00) {
var_r28 = 0;
}
else {
if (GWPlayerCfg[1].group == var_r31->unk_00) {
var_r27 = 1;
}
else {
if (GWPlayerCfg[2].group == var_r31->unk_00) {
var_r26 = 2;
}
else {
if (GWPlayerCfg[3].group == var_r31->unk_00) {
var_r25 = 3;
}
else {
var_r25 = 4;
}
var_r26 = var_r25;
}
var_r27 = var_r26;
}
var_r28 = var_r27;
}
var_r31->unk_04 = var_r28;
if (GWPlayerCfg->group == (1 - var_r31->unk_00)) {
var_r24 = 0;
}
else {
if (GWPlayerCfg[1].group == (1 - var_r31->unk_00)) {
var_r23 = 1;
}
else {
if (GWPlayerCfg[2].group == (1 - var_r31->unk_00)) {
var_r22 = 2;
}
else {
if (GWPlayerCfg[3].group == (1 - var_r31->unk_00)) {
var_r21 = 3;
}
else {
var_r21 = 4;
}
var_r22 = var_r21;
}
var_r23 = var_r22;
}
var_r24 = var_r23;
}
sp10 = var_r24;
if (var_r31->unk_04 == 4) {
OSReport("m458:wrong player group\n");
var_r31->unk_04 = var_r31->unk_00;
}
if ((var_r31->unk_00 == 1) && (lbl_1_bss_14 != 0)) {
var_r31->unk_08 = -1;
var_r31->unk_0C = -1;
var_r31->unk_04 = -1;
var_r31->unk_10 = 0;
}
else {
var_r31->unk_08 = GWPlayerCfg[var_r31->unk_04].character;
var_r20 = 1;
if ((var_r31->unk_08 != -1) && (GWPlayerCfg[var_r31->unk_04].iscom == 0)) {
var_r20 = 0;
}
var_r31->unk_0C = var_r20 != 0 ? -1 : GWPlayerCfg[var_r31->unk_04].pad_idx;
var_r31->unk_10 = var_r31->unk_0C != -1 ? 0 : GWPlayerCfg[var_r31->unk_04].diff;
}
var_r31->unk_18 = 0;
var_r31->unk_20 = 3;
var_r31->unk_24 = -1;
if (var_r31->unk_08 != -1) {
object->model[0] = CharModelCreate(var_r31->unk_08, 1);
}
else {
object->model[0] = Hu3DModelCreateFile(0x30007);
}
omSetTra(object, 0.0f, var_r31->unk_00 == 0 ? 0 : 0x12C, 0.0f);
if (var_r31->unk_08 != -1) {
omSetSca(object, 2.5f, 2.5f, 2.5f);
}
else {
omSetSca(object, 2.0f, 2.0f, 2.0f);
}
for (var_r29 = 0; var_r29 < 0xA; var_r29++) {
if (var_r31->unk_08 != -1) {
object->motion[var_r29]
= CharModelMotionCreate(var_r31->unk_08, lbl_1_data_10[var_r29] + (lbl_1_data_38[var_r29] != 0 ? var_r31->unk_08 : 0));
}
else if (lbl_1_data_60[var_r29] != 0) {
object->motion[var_r29] = Hu3DJointMotionFile(object->model[0], lbl_1_data_60[var_r29]);
}
}
Hu3DMotionSet(object->model[0], object->motion[var_r31->unk_20]);
Hu3DMotionTimeSet(object->model[0], 10.0f);
Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_LOOP);
Hu3DModelShadowSet(object->model[0]);
Hu3DModelAttrSet(object->model[0], HU3D_ATTR_DISPOFF);
Hu3DModelLayerSet(object->model[0], 1);
CharModelLayerSetAll2(1);
object->func = fn_1_4C8;
}
void fn_1_685C(omObjData *object)
{
lbl_1_bss_B0 = 0x3E8;
lbl_1_bss_B4 = 0.0f;
lbl_1_bss_A8 = 0;
lbl_1_bss_A4 = 0;
if (lbl_1_data_130 == -1) {
lbl_1_data_130 = HuAudSeqPlay(0x4D);
}
lbl_1_data_134 = HuAudFXPlay(0x6D7);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
object->func = fn_1_5014;
}
void ObjectSetup(void)
{
s32 i;
omObjData *object;
OSReport("******* M458 ObjectSetup *********\n");
lbl_1_bss_A0 = omInitObjMan(0x258, 0x2000);
omGameSysInit(lbl_1_bss_A0);
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 = { 255, 255, 255, 255 };
lbl_1_bss_9C = Hu3DGLightCreateV(&sp3C, &sp30, &sp8);
Hu3DGLightStaticSet(lbl_1_bss_9C, 1);
Hu3DGLightInfinitytSet(lbl_1_bss_9C);
}
{
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_12C = -1;
lbl_1_bss_98 = -1;
lbl_1_bss_14 = _CheckFlag(0x10000) != 0;
HuWinInit(1);
lbl_1_bss_B8 = omAddObjEx(lbl_1_bss_A0, 0x65, 0x18, 2, 1, fn_1_59DC);
for (i = 0; i < 2; i++) {
object = (&lbl_1_bss_BC)[i] = omAddObjEx(lbl_1_bss_A0, 0x64, 0xB, 0xA, 0, fn_1_6314);
object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M458DllWork), MEMORY_DEFAULT_NUM);
object->work[0] = i;
}
lbl_1_bss_C4 = omAddObjEx(lbl_1_bss_A0, 0x7FDA, 0, 0, -1, omOutView);
lbl_1_bss_C8 = omAddObjEx(lbl_1_bss_A0, 0x67, 0, 0, -1, fn_1_685C);
}
void fn_1_6D9C(omObjData *object)
{
if (lbl_1_data_138[0] != -1) {
Hu3DParManKill(lbl_1_data_138[0]);
lbl_1_data_138[0] = -1;
}
if (WipeStatGet() == 0) {
s32 i;
for (i = 0; i < 2; i++) {
void *sp8 = (&lbl_1_bss_BC)[i]->data;
}
if (lbl_1_data_12C >= 0) {
MGSeqKill(lbl_1_data_12C);
}
MGSeqKillAll();
HuAudAllStop();
omOvlReturnEx(1, 1);
}
}