marioparty4/src/REL/m434Dll/main.c
2024-11-10 06:57:04 +01:00

609 lines
17 KiB
C

#include "game/audio.h"
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/object.h"
#include "game/objsub.h"
#include "game/sprite.h"
#include "game/wipe.h"
#include "REL/m434Dll.h"
#include "ext_math.h"
#include "game/gamework_data.h"
#include "game/minigame_seq.h"
#include "math.h"
typedef struct camera_view {
float zoom;
Vec pos;
Vec rot;
} CameraView;
Vec lbl_1_data_0 = { -700, 2500, -700 };
Vec lbl_1_data_C = { 0.3, -0.8, 0.3 };
Vec lbl_1_data_18 = { 34.75, -24.75, 3500 };
GXColor lbl_1_data_24 = { 255, 255, 255, 255 };
Vec lbl_1_data_28 = { -700, 2500, 700 };
Vec lbl_1_data_34 = { 0, 1, 0 };
Vec lbl_1_data_40 = { 0, 0, 0 };
omObjData *lbl_1_bss_3D4;
omObjData *lbl_1_bss_3D0;
omObjData *lbl_1_bss_3CC;
omObjData *lbl_1_bss_3C8;
omObjData *lbl_1_bss_3C4;
s16 lbl_1_bss_3C2;
s16 lbl_1_bss_3C0;
s32 lbl_1_bss_3BC;
s32 lbl_1_bss_3B8;
s16 lbl_1_bss_3B2[3];
s16 lbl_1_bss_3B0;
s16 lbl_1_bss_3AC[2];
s16 lbl_1_bss_3AA;
s16 lbl_1_bss_3A8;
s16 lbl_1_bss_3A0[4];
s32 lbl_1_bss_39C;
CameraView lbl_1_bss_1C[32];
s32 lbl_1_bss_18;
s32 lbl_1_bss_10[2];
s32 lbl_1_bss_8[2];
s32 lbl_1_bss_4;
float lbl_1_bss_0;
void fn_1_4FC(omObjData *object);
void fn_1_CC8(omObjData *object);
s32 fn_1_10F4(void);
void fn_1_1104(Process *objman);
void fn_1_1684(void);
void fn_1_16B4(void);
void ObjectSetup(void)
{
s32 i;
Process *objman;
OSReport("******* M434ObjectSetup *********\n");
objman = omInitObjMan(50, 8192);
omGameSysInit(objman);
CZoom = 2097.6f;
Center.x = 0;
Center.y = 172;
Center.z = 361;
CRot.x = -32;
CRot.y = 0;
CRot.z = 0;
for (i = 0; i < 4; i++) {
CZoomM[i] = CZoom;
CenterM[i] = Center;
CRotM[i] = CRot;
}
fn_1_16B4();
Hu3DCameraCreate(15);
Hu3DCameraPerspectiveSet(2, 30, 20, 25000, 1.2f);
Hu3DCameraViewportSet(2, 0, 0, 320, 240, 0, 1);
Hu3DCameraPerspectiveSet(13, 30, 20, 25000, 1.2f);
Hu3DCameraViewportSet(13, 0, 0, 640, 480, 0, 1);
lbl_1_bss_3CC = omAddObjEx(objman, 32730, 0, 0, -1, omOutViewMulti);
lbl_1_bss_3CC->work[0] = 4;
HuAudSndGrpSet(59);
lbl_1_data_C.x = -lbl_1_data_0.x;
lbl_1_data_C.y = -lbl_1_data_0.y;
lbl_1_data_C.z = -lbl_1_data_0.z;
VECNormalize(&lbl_1_data_C, &lbl_1_data_C);
lbl_1_bss_3B0 = Hu3DGLightCreateV(&lbl_1_data_0, &lbl_1_data_C, &lbl_1_data_24);
Hu3DGLightInfinitytSet(lbl_1_bss_3B0);
Hu3DGLightStaticSet(lbl_1_bss_3B0, 1);
for (i = 0; i < 4; i++) {
lbl_1_bss_3A0[i] = GWPlayerCfg[i].group;
}
lbl_1_bss_3D4 = omAddObjEx(objman, 0, 0, 0, -1, fn_1_4FC);
lbl_1_bss_3D0 = omAddObjEx(objman, 0, 1, 0, -1, fn_1_CC8);
fn_1_1DB0(objman);
fn_1_4854(objman);
fn_1_6860(objman);
fn_1_1104(objman);
}
void fn_1_558(omObjData *object);
void fn_1_4FC(omObjData *object)
{
fn_1_1D64(0);
lbl_1_bss_3AA = 0;
lbl_1_bss_3A8 = 0;
object->func = fn_1_558;
}
s32 lbl_1_data_70 = -1;
void fn_1_C64(omObjData *object);
void fn_1_1638(s32 arg0);
void fn_1_558(omObjData *object)
{
s32 temp_r31;
s32 temp_r29;
s32 sp10[2][4];
s32 sp8[2];
switch (fn_1_1D54()) {
case 0:
lbl_1_bss_3C2 = 60;
lbl_1_bss_3C0 = 60;
fn_1_1D64(1);
lbl_1_bss_10[1] = 60;
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
HuAudFXPlay(1736);
break;
case 1:
if (fn_1_10F4() == 2) {
if (lbl_1_bss_10[1] != 0) {
if (--lbl_1_bss_10[1] == 0) {
lbl_1_bss_3BC = MGSeqStartCreate();
HuAudStreamPlay("sound/mu_047a.adp", 1);
}
}
else {
if (MGSeqStatGet(lbl_1_bss_3BC) == 0) {
fn_1_1D64(2);
HuAudFXPlay(1738);
lbl_1_bss_3B8 = MGSeqTimerCreate(60);
fn_1_1638(1);
}
if (lbl_1_data_70 < 0 && (MGSeqStatGet(lbl_1_bss_3BC) & 0x10)) {
lbl_1_data_70 = HuAudSeqPlay(67);
}
}
}
break;
case 2:
if (--lbl_1_bss_3C0 == 0) {
lbl_1_bss_3C2--;
MGSeqParamSet(lbl_1_bss_3B8, 1, lbl_1_bss_3C2);
lbl_1_bss_3C0 = 60;
}
if (!lbl_1_bss_3C2 || lbl_1_bss_3A8 == 1) {
fn_1_1D64(3);
lbl_1_bss_10[1] = 60;
lbl_1_bss_3BC = MGSeqFinishCreate();
HuAudStreamFadeOut(30);
HuAudSeqFadeOut(lbl_1_data_70, 100);
}
break;
case 3:
if (lbl_1_bss_3B8 >= 0) {
MGSeqParamSet(lbl_1_bss_3B8, 2, -1);
lbl_1_bss_3B8 = -1;
}
if (MGSeqStatGet(lbl_1_bss_3BC) == 0) {
fn_1_1D64(4);
lbl_1_bss_10[1] = 60;
}
break;
case 4:
if (--lbl_1_bss_10[1] == 0) {
sp8[0] = sp8[1] = 0;
for (temp_r31 = 0; temp_r31 < 4; temp_r31++) {
temp_r29 = fn_1_1D74(temp_r31);
sp10[temp_r29][sp8[temp_r29]++] = temp_r31;
}
lbl_1_bss_3AA = fn_1_1CB8();
switch (lbl_1_bss_3AA) {
case -1:
lbl_1_bss_3AC[0] = GWPlayerCfg[sp10[0][0]].character;
lbl_1_bss_3AC[1] = GWPlayerCfg[sp10[0][1]].character;
MGSeqWinCreate(lbl_1_bss_3AC[0], lbl_1_bss_3AC[1], -1, -1);
GWPlayerCoinWinSet(sp10[0][0], 10);
GWPlayerCoinWinSet(sp10[0][1], 10);
HuAudSStreamPlay(1);
break;
case 0:
MGSeqDrawCreate();
HuAudSStreamPlay(4);
break;
case 1:
lbl_1_bss_3AC[0] = GWPlayerCfg[sp10[1][0]].character;
lbl_1_bss_3AC[1] = GWPlayerCfg[sp10[1][1]].character;
MGSeqWinCreate(lbl_1_bss_3AC[0], lbl_1_bss_3AC[1], -1, -1);
GWPlayerCoinWinSet(sp10[1][0], 10);
GWPlayerCoinWinSet(sp10[1][1], 10);
HuAudSStreamPlay(1);
break;
}
fn_1_1D64(5);
lbl_1_bss_10[1] = 210;
}
break;
case 5:
if (--lbl_1_bss_10[1] == 0) {
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
object->func = fn_1_C64;
}
break;
}
for (temp_r31 = 0; temp_r31 < 4; temp_r31++) {
CZoomM[temp_r31] = CZoom;
CRotM[temp_r31] = CRot;
CenterM[temp_r31] = Center;
}
if (omSysExitReq && !WipeStatGet()) {
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60);
object->func = fn_1_C64;
}
}
void fn_1_C64(omObjData *object)
{
if (WipeStatGet()) {
return;
}
fn_1_1E44();
fn_1_4964();
fn_1_6A84();
fn_1_1684();
MGSeqKillAll();
HuAudFadeOut(1);
omOvlReturnEx(1, 1);
OSReport("******* M434Exit *********\n");
}
void fn_1_E44(omObjData *object);
void fn_1_16D8(void);
void fn_1_1950(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5, float arg6);
void fn_1_1A00(s32 arg0);
void fn_1_1A10(float arg0);
void fn_1_CC8(omObjData *object)
{
lbl_1_bss_8[0] = 0;
lbl_1_bss_8[1] = 140;
fn_1_16D8();
fn_1_1950(302, 0, 125, -188, -24, 28, 0);
fn_1_1A00(1);
object->func = fn_1_E44;
omSetStatBit(object, 0x100);
object->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M434, 0x07));
Hu3DModelCameraSet(object->model[0], 4);
Hu3DModelLayerSet(object->model[0], 4);
Hu3DModelPosSet(object->model[0], -50, -40, -540);
Hu3DMotionSpeedSet(object->model[0], 1);
Hu3DModelRotSet(object->model[0], 0, 70, 0);
}
s32 lbl_1_data_A4[] = { 74, 98 };
float lbl_1_data_AC[] = { -120, -267.9 };
void fn_1_10BC(omObjData *object);
void fn_1_E44(omObjData *object)
{
ModelData *temp_r31;
s32 temp_r30;
Vec sp8;
switch (lbl_1_bss_8[0]) {
case 0:
if (--lbl_1_bss_8[1] == 0) {
Hu3DModelAttrSet(object->model[0], HU3D_ATTR_DISPOFF);
lbl_1_bss_8[0] = 1;
}
for (temp_r30 = 0; temp_r30 < 2u; temp_r30++) {
if (lbl_1_bss_4 == lbl_1_data_A4[temp_r30]) {
temp_r31 = &Hu3DData[object->model[0]];
sp8.x = temp_r31->pos.x + (lbl_1_data_AC[temp_r30] * cosd(temp_r31->rot.y));
sp8.y = -15.000001f;
sp8.z = temp_r31->pos.z - (lbl_1_data_AC[temp_r30] * sind(temp_r31->rot.y));
if (temp_r30 == 0) {
fn_1_47EC(&sp8);
HuAudFXPlay(1731);
}
else {
fn_1_43AC(&sp8);
HuAudFXPlay(1739);
}
}
}
lbl_1_bss_4++;
break;
case 1:
lbl_1_bss_0 += 0.02f;
if (lbl_1_bss_0 >= 1.0f) {
lbl_1_bss_8[0] = 2;
lbl_1_bss_0 = 1.0f;
object->func = fn_1_10BC;
}
fn_1_1A10(lbl_1_bss_0);
break;
}
}
void fn_1_1788(void);
void fn_1_10BC(omObjData *object)
{
fn_1_1788();
fn_1_1788();
object->func = NULL;
}
s32 fn_1_10F4(void)
{
return lbl_1_bss_8[0];
}
void fn_1_1150(omObjData *object);
u16 lbl_1_data_B4[6] = { 0, 1, 2, 3, 4, 4 };
float lbl_1_data_C0[6][2] = { 0, 0, 0, 0, -33, -2, -9, -2, 11, -2, 31, -2 };
float lbl_1_data_F0[2][2] = { 104, 56, 472, 56 };
typedef struct work_1150 {
s32 unk0;
s16 unk4;
s16 unk6[6];
u16 unk12;
} Work1150;
void fn_1_1104(Process *objman)
{
lbl_1_bss_3C4 = omAddObjEx(objman, 0, 0, 0, -1, fn_1_1150);
}
void fn_1_1470(omObjData *object);
void fn_1_1150(omObjData *object)
{
Work1150 *temp_r31;
u32 temp_r30;
s32 temp_r29;
temp_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 2 * sizeof(Work1150), MEMORY_DEFAULT_NUM);
object->data = temp_r31;
memset(object->data, 0, 2 * sizeof(Work1150));
for (temp_r29 = 0; temp_r29 < 2; temp_r31++, temp_r29++) {
for (temp_r30 = 0; temp_r30 < 6; temp_r30++) {
switch (lbl_1_data_B4[temp_r30]) {
case 0:
temp_r31->unk6[temp_r30] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 0x1D), 1, 0);
espPriSet(temp_r31->unk6[temp_r30], 256);
espColorSet(temp_r31->unk6[temp_r30], 0, 0, 0);
espTPLvlSet(temp_r31->unk6[temp_r30], 0.5);
break;
case 1:
temp_r31->unk6[temp_r30]
= espEntry((temp_r29 == 0) ? DATA_MAKE_NUM(DATADIR_MGCONST, 0x1B) : DATA_MAKE_NUM(DATADIR_MGCONST, 0x1C), 1, 0);
espPriSet(temp_r31->unk6[temp_r30], 256);
break;
case 2:
temp_r31->unk6[temp_r30] = espEntry(DATA_MAKE_NUM(DATADIR_M434, 0x0C), 1, 0);
espPriSet(temp_r31->unk6[temp_r30], 256);
espScaleSet(temp_r31->unk6[temp_r30], 0.75, 0.75);
break;
case 3:
temp_r31->unk6[temp_r30] = espEntry(DATA_MAKE_NUM(DATADIR_M434, 0x0D), 1, 0);
espPriSet(temp_r31->unk6[temp_r30], 256);
break;
case 4:
temp_r31->unk6[temp_r30] = espEntry(DATA_MAKE_NUM(DATADIR_MGCONST, 0x33), 1, 0);
espPriSet(temp_r31->unk6[temp_r30], 255);
break;
}
espDispOff(temp_r31->unk6[temp_r30]);
espDrawNoSet(temp_r31->unk6[temp_r30], 0);
espAttrSet(temp_r31->unk6[temp_r30], HUSPR_ATTR_NOANIM);
espPosSet(temp_r31->unk6[temp_r30], lbl_1_data_F0[temp_r29][0] + lbl_1_data_C0[temp_r30][0],
lbl_1_data_F0[temp_r29][1] + lbl_1_data_C0[temp_r30][1]);
}
temp_r31->unk0 = -1;
}
HuDataDirClose(DATADIR_MGCONST);
object->func = fn_1_1470;
}
void fn_1_1470(omObjData *object)
{
float temp_f31;
Work1150 *temp_r31;
s32 temp_r30;
s32 temp_r29;
temp_r31 = object->data;
for (temp_r29 = 0; temp_r29 < 2; temp_r29++, temp_r31++) {
if (temp_r31->unk0 >= 0) {
if (temp_r31->unk0 == 0) {
for (temp_r30 = 0; temp_r30 < 6; temp_r30++) {
espDispOn(temp_r31->unk6[temp_r30]);
}
temp_r31->unk0++;
}
if (temp_r31->unk12) {
temp_r31->unk12--;
temp_f31 = (0.5 * sind((180.0f * temp_r31->unk12) / 16.0f)) + 1.0;
espScaleSet(temp_r31->unk6[4], temp_f31, temp_f31);
espScaleSet(temp_r31->unk6[5], temp_f31, temp_f31);
}
espBankSet(temp_r31->unk6[4], temp_r31->unk4 / 10);
espBankSet(temp_r31->unk6[5], temp_r31->unk4 % 10);
}
}
}
void fn_1_1638(s32 arg0)
{
Work1150 *temp_r31;
s32 temp_r30;
temp_r31 = lbl_1_bss_3C4->data;
for (temp_r30 = 0; temp_r30 < 2; temp_r30++, temp_r31++) {
temp_r31->unk0 = 0;
}
}
void fn_1_1684(void)
{
HuMemDirectFree(lbl_1_bss_3C4->data);
}
void fn_1_16B4(void)
{
lbl_1_bss_39C = 0;
lbl_1_bss_18 = 0;
}
void fn_1_16D8(void)
{
CameraView *temp_r31 = &lbl_1_bss_1C[lbl_1_bss_39C++];
temp_r31->zoom = CZoom;
temp_r31->pos.x = Center.x;
temp_r31->pos.y = Center.y;
temp_r31->pos.z = Center.z;
temp_r31->rot.x = CRot.x;
temp_r31->rot.y = CRot.y;
temp_r31->rot.z = CRot.z;
}
void fn_1_1788(void)
{
CameraView *temp_r31 = &lbl_1_bss_1C[--lbl_1_bss_39C];
CZoom = temp_r31->zoom;
Center.x = temp_r31->pos.x;
Center.y = temp_r31->pos.y;
Center.z = temp_r31->pos.z;
CRot.x = temp_r31->rot.x;
CRot.y = temp_r31->rot.y;
CRot.z = temp_r31->rot.z;
}
void fn_1_1838(CameraView *arg0)
{
CameraView *temp_r30;
CameraView sp8;
sp8 = lbl_1_bss_1C[lbl_1_bss_39C++];
temp_r30 = &sp8;
memcpy(temp_r30, arg0, sizeof(CameraView));
CZoom = arg0->zoom;
Center.x = arg0->pos.x;
Center.y = arg0->pos.y;
Center.z = arg0->pos.z;
CRot.x = arg0->rot.x;
CRot.y = arg0->rot.y;
CRot.z = arg0->rot.z;
}
void fn_1_1950(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5, float arg6)
{
CameraView *temp_r31 = &lbl_1_bss_1C[lbl_1_bss_39C++];
temp_r31->zoom = CZoom = arg0;
temp_r31->pos.x = Center.x = arg1;
temp_r31->pos.y = Center.y = arg2;
temp_r31->pos.z = Center.z = arg3;
temp_r31->rot.x = CRot.x = arg4;
temp_r31->rot.y = CRot.y = arg5;
temp_r31->rot.z = CRot.z = arg6;
}
void fn_1_1A00(s32 arg0)
{
lbl_1_bss_18 = arg0;
}
#define LERP_PARAM(view1, view2, field, weight) ((view1)->field +)
void fn_1_1A10(float arg0)
{
float weight;
CameraView *view1 = &lbl_1_bss_1C[lbl_1_bss_39C - 1];
CameraView *view2 = view1 - 1;
if (lbl_1_bss_39C < 2) {
return;
}
switch (lbl_1_bss_18) {
case 0:
weight = arg0;
break;
case 1:
weight = sind(90.0f * arg0);
break;
case 2:
weight = sind(90.0f * arg0);
weight *= weight;
break;
}
CZoom = view1->zoom + (weight * (view2->zoom - view1->zoom));
Center.x = view1->pos.x + (weight * (view2->pos.x - view1->pos.x));
Center.y = view1->pos.y + (weight * (view2->pos.y - view1->pos.y));
Center.z = view1->pos.z + (weight * (view2->pos.z - view1->pos.z));
CRot.x = view1->rot.x + (weight * (view2->rot.x - view1->rot.x));
CRot.y = view1->rot.y + (weight * (view2->rot.y - view1->rot.y));
CRot.z = view1->rot.z + (weight * (view2->rot.z - view1->rot.z));
}
void fn_1_1C44(s32 arg0, s32 arg1)
{
Work1150 *temp_r31 = &((Work1150 *)lbl_1_bss_3C4->data)[arg0];
temp_r31->unk4 += arg1;
temp_r31->unk12 = 16;
}
s32 fn_1_1C88(s32 arg0)
{
Work1150 *temp_r31 = &((Work1150 *)lbl_1_bss_3C4->data)[arg0];
return temp_r31->unk4;
}
s32 fn_1_1CB8(void)
{
s32 temp_r31 = fn_1_1C88(0);
s32 temp_r30 = fn_1_1C88(1);
if (temp_r31 == temp_r30) {
return 0;
}
if (temp_r31 > temp_r30) {
return -1;
}
else {
return 1;
}
}
s16 fn_1_1D44(void)
{
return lbl_1_bss_3C2;
}
s32 fn_1_1D54(void)
{
return lbl_1_bss_10[0];
}
void fn_1_1D64(s32 arg0)
{
lbl_1_bss_10[0] = arg0;
}
s32 fn_1_1D74(s32 arg0)
{
return lbl_1_bss_3A0[arg0];
}
s32 fn_1_1D8C(void)
{
return lbl_1_bss_3AA;
}
void fn_1_1D9C(void)
{
lbl_1_bss_3A8 = 1;
}