marioparty4/src/REL/w05Dll/hotel.c

435 lines
14 KiB
C

#include "REL/w05Dll.h"
#include "game/hsfdraw.h"
#include "game/audio.h"
#include "game/pad.h"
#include "game/objsub.h"
#include "game/wipe.h"
#include "game/board/model.h"
#include "game/board/player.h"
#include "game/board/window.h"
#include "ext_math.h"
// data
s32 lbl_1_data_150[5] = {
DATA_MAKE_NUM(DATADIR_W05, 0x21), DATA_MAKE_NUM(DATADIR_W05, 0x22), DATA_MAKE_NUM(DATADIR_W05, 0x23),
DATA_MAKE_NUM(DATADIR_W05, 0x24), DATA_MAKE_NUM(DATADIR_W05, 0x25),
};
s16 lbl_1_data_164 = 0xFFFF;
// bss
s16 lbl_1_bss_28;
void fn_1_13D4(void) {
Vec sp8;
ModelData* temp_r31;
lbl_1_data_164 = BoardModelCreate(lbl_1_data_150[lbl_1_bss_0->unk_04], NULL, 0);
BoardModelAttrSet(lbl_1_data_164, 0x40000001);
temp_r31 = &Hu3DData[BoardModelIDGet(lbl_1_data_118)];
Hu3DMotionExec(BoardModelIDGet(lbl_1_data_118), temp_r31->unk_08, 0.0f, 0);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), "hotel1", &sp8);
BoardModelPosSetV(lbl_1_data_164, &sp8);
}
void fn_1_14D0(void) {
BoardModelKill(lbl_1_data_164);
}
u32 lbl_1_data_170[4] = { 0, 10, 25, 40 };
s32 lbl_1_data_180 = DATA_MAKE_NUM(DATADIR_W05, 0x0C);
s16 fn_1_14FC(void) {
s16 var_r31;
for (var_r31 = 0; var_r31 < 4;var_r31++) {
if (lbl_1_bss_0->unk_00 <= lbl_1_data_170[var_r31]) {
break;
}
}
return var_r31;
}
void fn_1_155C(void) {
Vec sp64;
Vec sp58;
Vec sp4C;
Vec sp40;
Vec sp34;
Vec sp28;
char sp18[16];
Vec spC;
char sp8[4];
s32 var_r27;
ModelData* temp_r25;
f32 temp_f30;
f32 temp_f31;
s16 var_r26;
s16 temp_r28;
s16 var_r30;
u32 var_r31;
lbl_1_bss_28 = GWSystem.player_curr;
BoardRollDispSet(0);
temp_r28 = BoardModelMotionCreate(lbl_1_bss_14[4], lbl_1_data_180);
temp_f30 = BoardPlayerRotYGet(lbl_1_bss_28);
BoardPlayerPosGet(lbl_1_bss_28, &sp58);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), "hotel1", &sp64);
temp_f31 = atan2d(sp64.x - sp58.x, sp64.z - sp58.z);
BoardPlayerMotBlendSet(lbl_1_bss_28, temp_f31, 0xF);
BoardCameraViewSet(2);
while (BoardPlayerMotBlendCheck(lbl_1_bss_28) == 0) {
HuPrcVSleep();
}
BoardCameraMotionWait();
BoardModelPosGet(lbl_1_bss_14[4], &sp4C);
sp40 = sp28 = sp4C;
if (sp58.x > sp28.x) {
sp28.x += 650.0f;
BoardModelRotYSet(lbl_1_bss_14[4], 90.0f);
} else {
sp28.x -= 650.0f;
BoardModelRotYSet(lbl_1_bss_14[4], -90.0f);
}
BoardModelMotionStart(lbl_1_bss_14[4], temp_r28, 0x40000001);
VECSubtract(&sp28, &sp40, &sp34);
VECScale(&sp34, &sp34, 0.018518519f);
for (var_r31 = 0; var_r31 < 0x36; var_r31++) {
VECAdd(&sp40, &sp34, &sp40);
BoardModelPosSetV(lbl_1_bss_14[4], &sp40);
HuPrcVSleep();
}
BoardModelPosSetV(lbl_1_bss_14[4], &sp28);
temp_f31 = atan2d(sp58.x - sp28.x, sp58.z - sp28.z);
while (fn_1_1208(lbl_1_bss_14[4], temp_f31, 10.0f) == 0) {
HuPrcVSleep();
}
BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, HU3D_MOTATTR_LOOP);
var_r30 = BoardPlayerCoinsGet(lbl_1_bss_28);
sprintf(sp18, "%d", lbl_1_bss_0->unk_00);
if (var_r30 > 0) {
if (var_r30 >= 5) {
var_r27 = MAKE_MESSID(0x27, 0x01);
var_r30 = 5;
} else {
var_r27 = MAKE_MESSID(0x27, 0x02);
}
sprintf(sp8, "%d", var_r30);
BoardWinCreate(2, var_r27, 7);
BoardWinInsertMesSet(MAKE_MESSID_PTR(sp8), 1);
} else {
BoardWinCreate(2, MAKE_MESSID(39, 3), 7);
BoardWinInsertMesSet(MAKE_MESSID_PTR(sp18), 0);
}
BoardWinWait();
BoardWinKill();
if (var_r30 > 0) {
for (var_r31 = 0; (s32) var_r31 < var_r30; var_r31++) {
BoardPlayerCoinsAdd(lbl_1_bss_28, -1);
HuAudFXPlay(0xE);
HuPrcSleep(6);
}
HuAudFXPlay(0xF);
lbl_1_bss_0->unk_00 += var_r30;
sprintf(sp18, "%d", lbl_1_bss_0->unk_00);
BoardWinCreate(2, MAKE_MESSID(39, 22), 7);
BoardWinInsertMesSet(MAKE_MESSID_PTR(sp18), 0);
BoardWinWait();
BoardWinKill();
}
var_r26 = fn_1_14FC();
if (var_r26 != lbl_1_bss_0->unk_04) {
lbl_1_bss_0->unk_04 = var_r26;
BoardCameraTargetModelSet(lbl_1_data_164);
BoardCameraOffsetSet(0.0f, 200.0f, 0.0f);
BoardCameraMotionWait();
HuPrcSleep(60);
WipeColorSet(0, 0, 0);
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 48);
while (WipeStatGet() != 0) {
HuPrcVSleep();
}
fn_1_14D0();
fn_1_13D4();
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 48);
while (WipeStatGet() != 0) {
HuPrcVSleep();
}
HuPrcSleep(60);
BoardCameraTargetPlayerSet(lbl_1_bss_28);
BoardCameraMotionWait();
}
BoardPlayerMotBlendSet(lbl_1_bss_28, temp_f30, 0xF);
BoardModelPosGet(lbl_1_bss_14[4], &sp40);
sp28 = sp4C;
if (sp58.x > sp28.x) {
BoardModelRotYSet(lbl_1_bss_14[4], -90.0f);
} else {
BoardModelRotYSet(lbl_1_bss_14[4], 90.0f);
}
BoardModelMotionStart(lbl_1_bss_14[4], temp_r28, 0x40000001);
VECSubtract(&sp28, &sp40, &sp34);
VECScale(&sp34, &sp34, 0.033333335f);
for (var_r31 = 0; var_r31 < 0x1E; var_r31++) {
VECAdd(&sp40, &sp34, &sp40);
BoardModelPosSetV(lbl_1_bss_14[4], &sp40);
HuPrcVSleep();
}
BoardModelPosSetV(lbl_1_bss_14[4], &sp28);
while (fn_1_1208(lbl_1_bss_14[4], 0.0f, 15.0f) == 0) {
HuPrcVSleep();
}
BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, HU3D_MOTATTR_LOOP);
BoardCameraViewSet(1);
while (BoardPlayerMotBlendCheck(lbl_1_bss_28) == 0) {
HuPrcVSleep();
}
BoardCameraMotionWait();
BoardModelMotionKill(lbl_1_bss_14[4], temp_r28);
BoardRollDispSet(1);
}
s32 lbl_1_data_188[4] = {
DATA_MAKE_NUM(DATADIR_W05, 0x0C), DATA_MAKE_NUM(DATADIR_W05, 0x0E),
DATA_MAKE_NUM(DATADIR_W05, 0x0F),DATA_MAKE_NUM(DATADIR_W05, 0x10)
};
s32 lbl_1_data_198[2] = { 28, 25 };
void fn_1_1E44(void) {
char sp84[0x10];
char sp74[0x10];
Vec sp68;
f32 sp64;
f32 sp60;
Vec sp5C;
Vec sp50;
Vec sp44;
Vec sp38;
f32 sp34;
f32 sp30;
Vec sp2C;
s16 sp1C[4][2];
Vec sp10;
s16 sp8[4];
ModelData* temp_r25;
f32 temp_f31;
f32 temp;
s16 temp_r3;
s16 var_r26;
s16 var_r27;
s32 var_r28;
s32 var_r31;
s32 temp_r24;
s32 var_r30;
lbl_1_bss_28 = GWSystem.player_curr;
BoardRollDispSet(0);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
sp8[var_r31] = BoardModelMotionCreate(lbl_1_bss_14[4], lbl_1_data_188[var_r31]);
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
for (var_r30 = 0; var_r30 < 2; var_r30++) {
sp1C[var_r31][var_r30] = BoardPlayerMotionCreate(var_r31, lbl_1_data_198[var_r30] | lbl_1_data_124[GWPlayer[var_r31].character]);
}
}
BoardCameraViewSet(2);
BoardCameraMotionWait();
BoardPlayerPosGet(lbl_1_bss_28, &sp50);
BoardModelPosGet(lbl_1_bss_14[4], &sp38);
sp5C = sp2C = sp38;
if (sp50.x > sp2C.x) {
sp2C.x += 520.0f;
BoardModelRotYSet(lbl_1_bss_14[4], 90.0f);
} else {
sp2C.x -= 520.0f;
BoardModelRotYSet(lbl_1_bss_14[4], -90.0f);
}
BoardModelMotionStart(lbl_1_bss_14[4], sp8[0], 0x40000001);
VECSubtract(&sp2C, &sp5C, &sp44);
VECScale(&sp44, &sp44, 0.018518519f);
for (var_r31 = 0; var_r31 < 0x36U; var_r31++) {
VECAdd(&sp5C, &sp44, &sp5C);
BoardModelPosSetV(lbl_1_bss_14[4], &sp5C);
HuPrcVSleep();
}
BoardModelPosSetV(lbl_1_bss_14[4], &sp2C);
temp_f31 = atan2d(sp50.x - sp2C.x, sp50.z - sp2C.z);
while (fn_1_1208(lbl_1_bss_14[4], temp_f31, 10.0f) == 0) {
HuPrcVSleep();
}
BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, HU3D_MOTATTR_LOOP);
temp_f31 = atan2d(sp2C.x - sp50.x, sp2C.z - sp50.z);
BoardPlayerMotBlendSet(lbl_1_bss_28, temp_f31, 0xF);
while (BoardPlayerMotBlendCheck(lbl_1_bss_28) == 0) {
HuPrcVSleep();
}
if (lbl_1_bss_0->unk_00 == 0) {
BoardWinCreate(2, MAKE_MESSID(39, 5), 7);
BoardWinWait();
BoardWinKill();
} else {
temp_r3 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W05, 0x04), NULL, 0);
BoardModelVisibilitySet(temp_r3, 0);
BoardModelLayerSet(temp_r3, 2U);
if (lbl_1_bss_0->unk_00 > BoardPlayerCoinsGet(lbl_1_bss_28)) {
var_r28 = BoardPlayerCoinsGet(lbl_1_bss_28);
} else {
var_r28 = lbl_1_bss_0->unk_00;
}
if (var_r28 < 0x14) {
var_r26 = 6;
} else if (var_r28 < 0x32) {
var_r26 = 3;
} else if (var_r28 < 0x64) {
var_r26 = 2;
} else {
var_r26 = 0;
}
sprintf(&sp84, "%d", lbl_1_bss_0->unk_00);
sprintf(&sp74, "%d", var_r28);
if (var_r28 == lbl_1_bss_0->unk_00) {
BoardWinCreate(2, MAKE_MESSID(39, 4), 7);
} else {
BoardWinCreate(2, MAKE_MESSID(39, 23), 7);
}
BoardWinInsertMesSet(MAKE_MESSID_PTR(sp84), 0);
BoardWinInsertMesSet(MAKE_MESSID_PTR(sp74), 1);
BoardWinWait();
BoardWinKill();
for (var_r31 = 0; var_r31 < var_r28; var_r31++) {
BoardPlayerCoinsAdd(lbl_1_bss_28, -1);
HuAudFXPlay(0xE);
HuPrcSleep(var_r26);
}
HuAudFXPlay(0xF);
HuPrcSleep(0x1E);
BoardCameraViewSet(1);
BoardCameraTargetModelSet(lbl_1_data_164);
BoardCameraMotionWait();
HuPrcSleep(0x1E);
omVibrate(lbl_1_bss_28, 0x7FFF, 0xC, 0);
BoardCameraQuakeSet(0x8C, 250.0f);
temp_r24 = HuAudFXPlay(0x482);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
BoardPlayerMotBlendSet(var_r31, 0, 0xF);
}
while (fn_1_1208(lbl_1_bss_14[4], 0.0f, 15.0f) == 0) {
HuPrcVSleep();
}
BoardModelMotionStart(lbl_1_bss_14[4], sp8[1], 0U);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
BoardPlayerVoiceEnableSet(var_r31, sp1C[var_r31][0], 0);
BoardPlayerMotionStart(var_r31, sp1C[var_r31][0], 0);
}
HuAudPlayerVoicePlay(lbl_1_bss_28, 0x12E);
HuPrcSleep(0x5A);
HuAudFXStop(temp_r24);
HuAudFXPlay(0x483);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), "tunami1", &sp68);
BoardModelPosSetV(temp_r3, &sp68);
BoardModelVisibilitySet(temp_r3, 1);
BoardModelMotionTimeSet(temp_r3, 0.0f);
HuPrcSleep(0x1E);
lbl_1_bss_0->unk_00 = 0;
lbl_1_bss_0->unk_04 = fn_1_14FC();
BoardModelKill(lbl_1_data_164);
lbl_1_data_164 = BoardModelCreate(lbl_1_data_150[lbl_1_bss_0->unk_04], NULL, 0);
BoardModelAttrSet(lbl_1_data_164, 0x40000001);
temp_r25 = &Hu3DData[BoardModelIDGet(lbl_1_data_118)];
Hu3DMotionExec(BoardModelIDGet(lbl_1_data_118), temp_r25->unk_08, 0.0f, 0);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_data_118), "hotel1", &sp10);
BoardModelPosSetV(lbl_1_data_164, &sp10);
BoardModelMotionStart(lbl_1_bss_14[4], sp8[2], 0x40000001U);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
BoardPlayerVoiceEnableSet(var_r31, sp1C[var_r31][0], 1);
if (var_r31 != lbl_1_bss_28) {
BoardPlayerVoiceEnableSet(var_r31, 6, 0);
}
BoardPlayerMotionStart(var_r31, 6, 0x40000001);
}
while (BoardModelMotionTimeGet(temp_r3) < BoardModelMotionMaxTimeGet(temp_r3)) {
HuPrcVSleep();
}
BoardModelKill(temp_r3);
HuPadRumbleStop(GWPlayer[lbl_1_bss_28].port);
BoardWinCreate(0, MAKE_MESSID(39, 6), -1);
BoardWinWait();
BoardWinKill();
HuPrcSleep(0x1E);
BoardModelMotionShiftSet(lbl_1_bss_14[4], sp8[3], 0.0f, 5.0f, HU3D_MOTATTR_NONE);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
BoardPlayerMotionShiftSet(var_r31, sp1C[var_r31][1], 0.0f, 5.0f, HU3D_MOTATTR_NONE);
BoardPlayerVoiceEnableSet(var_r31, 6, 1);
}
HuPrcSleep(0x23);
BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, HU3D_MOTATTR_LOOP);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
BoardPlayerMotionShiftSet(var_r31, 1, 0.0f, 5.0f, HU3D_MOTATTR_LOOP);
}
}
BoardCameraViewSet(1);
BoardPlayerPosGet(lbl_1_bss_28, &sp50);
BoardModelPosGet(lbl_1_bss_14[4], &sp5C);
sp2C = sp38;
if (sp50.x > sp2C.x) {
BoardModelRotYSet(lbl_1_bss_14[4], -90.0f);
} else {
BoardModelRotYSet(lbl_1_bss_14[4], 90.0f);
}
BoardModelMotionStart(lbl_1_bss_14[4], sp8[0], 0x40000001U);
VECSubtract(&sp38, &sp5C, &sp44);
VECScale(&sp44, &sp44, 0.055555556);
for (var_r31 = 0; var_r31 < 0x12U; var_r31++) {
VECAdd(&sp5C, &sp44, &sp5C);
BoardModelPosSetV(lbl_1_bss_14[4], &sp5C);
HuPrcVSleep();
}
BoardModelPosSetV(lbl_1_bss_14[4], &sp38);
while (fn_1_1208(lbl_1_bss_14[4], 0.0f, 15.0f) == 0) {
HuPrcVSleep();
}
BoardModelMotionShiftSet(lbl_1_bss_14[4], 0, 0.0f, 5.0f, HU3D_MOTATTR_LOOP);
for (var_r31 = 0; var_r31 < 4; var_r31++) {
BoardModelMotionKill(lbl_1_bss_14[4], sp8[var_r31]);
}
for (var_r31 = 0; var_r31 < 4; var_r31++) {
for (var_r30 = 0; var_r30 < 2; var_r30++) {
BoardPlayerMotionKill(var_r31, sp1C[var_r31][var_r30]);
}
}
BoardCameraMotionWait();
BoardPlayerMotBlendSet(lbl_1_bss_28, 0, 0xF);
while (BoardPlayerMotBlendCheck(lbl_1_bss_28) == 0) {
HuPrcVSleep();
}
}