marioparty4/src/REL/w05Dll/monkey.c

336 lines
10 KiB
C

#include "REL/w05Dll.h"
#include "game/hsfdraw.h"
#include "game/frand.h"
#include "game/board/model.h"
#include "game/board/player.h"
// data
s32 lbl_1_data_1A8[3] = { 0x0079001F, 0x00790020, 0xFFFFFFFF };
char *lbl_1_data_1C4[2] = { "monkyA", "monkyB"};
s32 lbl_1_data_1CC[3] = { 0x78, 0x6F, 0x70 };
// bss
s16 lbl_1_bss_4E[2];
s16 lbl_1_bss_4C;
s16 lbl_1_bss_4A;
s16 lbl_1_bss_48;
s16 lbl_1_bss_44[2];
Vec lbl_1_bss_38;
s16 lbl_1_bss_30[4];
void fn_1_2B40(void) {
s32 var_r31;
BoardModelAttrSet(lbl_1_bss_14[2], 0x40000002);
BoardModelAttrSet(lbl_1_bss_14[3], 0x40000002);
BoardModelMotionTimeSet(lbl_1_bss_14[2], 0.0f);
BoardModelMotionTimeSet(lbl_1_bss_14[3], 0.0f);
for (var_r31 = 0; var_r31 < 2; var_r31++) {
lbl_1_bss_4E[var_r31] = BoardModelCreate(0x79001E, lbl_1_data_1A8, 0);
BoardModelAttrSet(lbl_1_bss_4E[var_r31], 0x40000001);
}
BoardModelHookSet(lbl_1_bss_14[2], lbl_1_data_1C4[0], lbl_1_bss_4E[0]);
BoardModelHookSet(lbl_1_bss_14[3], lbl_1_data_1C4[1], lbl_1_bss_4E[1]);
}
void fn_1_2C7C(s32 arg0) {
Vec spC;
s32 var_r31;
lbl_1_bss_4C = GWSystem.player_curr;
lbl_1_bss_48 = arg0;
if (lbl_1_bss_48 == 0) {
lbl_1_bss_4A = lbl_1_bss_14[2];
spC.x = 150.0f;
BoardModelPosGet(lbl_1_bss_4A, &lbl_1_bss_38);
lbl_1_bss_38.x += 140.0f;
} else {
lbl_1_bss_4A = lbl_1_bss_14[3];
spC.x = -150.0f;
BoardModelPosGet(lbl_1_bss_4A, &lbl_1_bss_38);
lbl_1_bss_38.x -= 140.0f;
}
lbl_1_bss_44[0] = BoardModelCreate(0x79001C, NULL, 0);
lbl_1_bss_44[1] = BoardModelCreate(0x79001D, NULL, 0);
BoardModelVisibilitySet(lbl_1_bss_44[0], 0);
BoardModelVisibilitySet(lbl_1_bss_44[1], 0);
BoardModelAttrSet(lbl_1_bss_44[0], 0x40000001);
for (var_r31 = 0; var_r31 < 3; var_r31++) {
lbl_1_bss_30[var_r31] = BoardPlayerMotionCreate(lbl_1_bss_4C, lbl_1_data_1CC[var_r31] | lbl_1_data_124[GWPlayer[lbl_1_bss_4C].character]);
}
BoardRollDispSet(0);
BoardPlayerIdleSet(lbl_1_bss_4C);
spC.y = 100.0f;
spC.z = 0.0f;
BoardCameraMotionStartEx(lbl_1_bss_4A, NULL, &spC, 2300.0f, -1.0f, 0x1E);
BoardCameraRotSet(-33.0f, 0.0f);
BoardCameraMotionWait();
HuAudFXPlay(0x48A);
BoardWinCreate(0, 0x270018, -1);
BoardWinWait();
BoardWinKill();
fn_1_3044();
fn_1_3430();
if (GWPlayer[lbl_1_bss_4C].bowser_suit != 0) {
fn_1_3D88();
} else {
fn_1_3514();
}
BoardPlayerIdleSet(lbl_1_bss_4C);
BoardCameraViewSet(1);
BoardCameraMotionWait();
BoardRollDispSet(1);
for (var_r31 = 0; var_r31 < 2; var_r31++) {
BoardModelKill(lbl_1_bss_44[var_r31]);
}
for (var_r31 = 0; var_r31 < 3; var_r31++) {
BoardPlayerMotionKill(lbl_1_bss_4C, lbl_1_bss_30[var_r31]);
}
}
void fn_1_3044(void) {
Vec sp20;
Vec sp14;
Vec sp8;
f32 temp_f30;
f32 var_f29;
f32 temp_f28;
f32 var_f31;
HuPrcSleep(0x1E);
BoardModelMotionStart(lbl_1_bss_4E[lbl_1_bss_48], 1, 0);
BoardModelAttrReset(lbl_1_bss_4A, 0x40000002);
BoardModelMotionTimeSet(lbl_1_bss_4A, 0.0f);
HuPrcSleep(0x88);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_4A), lbl_1_data_1C4[lbl_1_bss_48], &sp20);
Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_4E[lbl_1_bss_48]), "bakawa1", &sp14);
PSVECAdd(&sp20, &sp14, &sp14);
BoardModelPosSetV(lbl_1_bss_44[0], &sp14);
BoardModelVisibilitySet(lbl_1_bss_44[0], 1);
BoardModelMotionTimeSet(lbl_1_bss_44[0], 0.0f);
HuAudFXPlay(0x48C);
PSVECSubtract(&lbl_1_bss_38, &sp14, &sp8);
sp8.y = 0.0f;
PSVECNormalize(&sp8, &sp8);
PSVECScale(&sp8, &sp8, 8.0f);
temp_f30 = 11.0f;
var_f31 = 0.0f;
while (1) {
sp8.y = (temp_f30 - (0.075 * (0.25f * (var_f31 * var_f31))));
var_f31 += 1.0f;
PSVECAdd(&sp14, &sp8, &sp14);
PSVECSubtract(&lbl_1_bss_38, &sp14, &sp20);
sp20.y = 0.0f;
var_f29 = PSVECMag(&sp20);
if (var_f29 <= 8.0f) {
sp14.x = lbl_1_bss_38.x;
sp14.z = lbl_1_bss_38.z;
sp8.x = sp8.z = 0.0f;
}
if (sp14.y <= lbl_1_bss_38.y) {
sp14.y = lbl_1_bss_38.y;
BoardModelVisibilitySet(lbl_1_bss_44[0], 0);
BoardModelVisibilitySet(lbl_1_bss_44[1], 1);
BoardModelPosSetV(lbl_1_bss_44[1], &sp14);
BoardModelMotionTimeSet(lbl_1_bss_44[1], 0.0f);
break;
} else {
BoardModelPosSetV(lbl_1_bss_44[0], &sp14);
if (BoardModelMotionTimeGet(lbl_1_bss_4E[lbl_1_bss_48]) >= BoardModelMotionMaxTimeGet(lbl_1_bss_4E[lbl_1_bss_48])) {
BoardModelMotionStart(lbl_1_bss_4E[lbl_1_bss_48], 0, 0x40000001);
}
HuPrcVSleep();
}
}
}
void fn_1_3430(void) {
if (GWPlayer[lbl_1_bss_4C].bowser_suit == 0) {
BoardPlayerMotionShiftSet(lbl_1_bss_4C, lbl_1_bss_30[2], 0.0f, 8.0f, 0);
HuPrcSleep(8);
while (BoardPlayerMotionEndCheck(lbl_1_bss_4C) == 0) {
HuPrcVSleep();
}
BoardPlayerMotionStart(lbl_1_bss_4C, lbl_1_bss_30[1], 0x40000001);
HuPrcSleep(0x5A);
return;
}
HuPrcSleep(0x2D);
}
void fn_1_3514(void) {
Vec sp2C; /* compiler-managed */
Vec sp20; /* compiler-managed */
Vec sp14;
Vec sp8;
f32 var_f29;
f32 var_f30;
f32 var_f31;
s32 var_r30;
s32 var_r31;
BoardPlayerPosGet(lbl_1_bss_4C, &sp2C);
BoardPlayerMotionShiftSet(lbl_1_bss_4C, 4, 0.0f, 5.0f, 0);
PSVECSubtract(&lbl_1_bss_38, &sp2C, &sp20);
sp20.y = 0.0f;
PSVECNormalize(&sp20, &sp20);
PSVECScale(&sp20, &sp20, 7.2f);
var_f30 = 10.0f;
var_f31 = 0.0f;
while (1) {
sp20.y = (var_f30 - (0.075f * (0.25f * (var_f31 * var_f31))));
var_f31 += 1.0f;
PSVECAdd(&sp2C, &sp20, &sp2C);
PSVECSubtract(&lbl_1_bss_38, &sp2C, &sp14);
sp14.y = 0.0f;
var_f29 = PSVECMag(&sp14);
if (var_f29 <= 7.2f) {
sp2C.x = lbl_1_bss_38.x;
sp2C.z = lbl_1_bss_38.z;
sp20.x = sp20.z = 0.0f;
}
if (sp2C.y <= lbl_1_bss_38.y) {
sp2C.y = lbl_1_bss_38.y;
BoardPlayerMotionStart(lbl_1_bss_4C, lbl_1_bss_30[0], 0);
break;
} else {
BoardPlayerPosSetV(lbl_1_bss_4C, &sp2C);
HuPrcVSleep();
}
}
HuAudFXPlay(0x48B);
HuAudPlayerVoicePlay(lbl_1_bss_4C, 0x123);
HuPrcChildCreate(fn_1_3E8C, 0x2001, 0x1000, 0, boardMainProc);
HuAudFXPlay(0x48A);
BoardModelMotionStart(lbl_1_bss_4E[lbl_1_bss_48], 2, 0);
var_r31 = BoardSpaceLinkFlagSearch(0, GWPlayer[lbl_1_bss_4C].space_curr, 0x100);
if (frandBool() != 0) {
var_r31 = BoardSpaceLinkFlagSearch(0, var_r31, 0x200);
} else {
var_r31 = BoardSpaceLinkFlagSearch(0, var_r31, 0x400);
}
BoardSpacePosGet(0, var_r31, &sp8);
PSVECSubtract(&sp8, &sp2C, &sp20);
sp20.y = 0.0f;
PSVECNormalize(&sp20, &sp20);
PSVECScale(&sp20, &sp20, 10.0f);
var_f30 = 9.0f;
var_f31 = 0.0f;
while (1) {
sp20.y = var_f30 - (0.075f * (0.25f * (var_f31 * var_f31)));
var_f31 += 1.0f;
PSVECAdd(&sp2C, &sp20, &sp2C);
PSVECSubtract(&sp8, &sp2C, &sp14);
sp14.y = 0.0f;
var_f29 = PSVECMag(&sp14);
if (var_f29 <= 10.0f) {
sp2C.x = sp8.x;
sp2C.z = sp8.z;
sp20.x = sp20.z = 0.0f;
}
if (sp2C.y <= sp8.y) {
sp2C.y = sp8.y;
omVibrate(lbl_1_bss_4C, 0xC, 4, 2);
break;
}
BoardPlayerPosSetV(lbl_1_bss_4C, &sp2C);
if (BoardModelMotionTimeGet(lbl_1_bss_4E[lbl_1_bss_48]) >= BoardModelMotionMaxTimeGet(lbl_1_bss_4E[lbl_1_bss_48])) {
BoardModelMotionStart(lbl_1_bss_4E[lbl_1_bss_48], 0, 0x40000001);
}
HuPrcVSleep();
}
var_f30 = 10.0f;
var_f31 = 0.0f;
if (BoardPlayerSizeGet(lbl_1_bss_4C) == 2) {
HuAudFXPlay(0x490);
} else if (BoardPlayerSizeGet(lbl_1_bss_4C) == 1) {
HuAudFXPlay(0x48F);
} else {
HuAudPlayerVoicePlay(lbl_1_bss_4C, 0x119);
}
while (1) {
sp20.y = var_f30 - (0.18333334f * (0.25f * (var_f31 * var_f31)));
var_f31 += 1.0f;
sp2C.y += sp20.y;
if (sp2C.y <= sp8.y) {
var_f30 = 0.25f * -sp20.y;
var_f31 = 0.0f;
sp2C.y = sp8.y;
if (BoardPlayerSizeGet(lbl_1_bss_4C) == 2) {
OSReport("big se\n");
HuAudFXPlay(0x490);
} else {
if (BoardPlayerSizeGet(lbl_1_bss_4C) == 1) {
OSReport("small se\n");
HuAudFXPlay(0x48F);
} else {
OSReport("normal se\n");
HuAudPlayerVoicePlay(lbl_1_bss_4C, 0x119);
}
}
}
BoardPlayerPosSetV(lbl_1_bss_4C, &sp2C);
if (!(fabs(var_f30) < 5.0)) {
if (BoardModelMotionTimeGet(lbl_1_bss_4E[lbl_1_bss_48]) >= BoardModelMotionMaxTimeGet(lbl_1_bss_4E[lbl_1_bss_48])) {
BoardModelMotionStart(lbl_1_bss_4E[lbl_1_bss_48], 0, 0x40000001U);
}
HuPrcVSleep();
} else {
BoardPlayerMotionShiftSet(lbl_1_bss_4C, 6, 0.0f, 8.0f, 0x40000001U);
break;
}
}
var_r30 = 0x44;
while (var_r30--, var_r30 != 0) {
if (BoardModelMotionTimeGet(lbl_1_bss_4E[lbl_1_bss_48]) >= BoardModelMotionMaxTimeGet(lbl_1_bss_4E[lbl_1_bss_48])) {
BoardModelMotionStart(lbl_1_bss_4E[lbl_1_bss_48], 0, 0x40000001U);
}
HuPrcVSleep();
}
GWPlayer[lbl_1_bss_4C].space_curr = var_r31;
}
void fn_1_3D88(void) {
s32 temp_r3;
temp_r3 = BoardSpaceLinkFlagSearch(0, GWPlayer[lbl_1_bss_4C].space_curr, 0x100U);
BoardPlayerMoveBetween(lbl_1_bss_4C, GWPlayer[lbl_1_bss_4C].space_curr, temp_r3);
GWPlayer[lbl_1_bss_4C].space_curr = temp_r3;
HuAudFXPlay(0x48B);
HuPrcChildCreate(fn_1_3E8C, 0x2001U, 0x1000U, 0, boardMainProc);
BoardPlayerIdleSet(lbl_1_bss_4C);
BoardWinCreate(0, 0x270019, -1);
BoardWinWait();
BoardWinKill();
}
void fn_1_3E8C(void) {
Vec sp14;
Vec sp8;
s32 i;
BoardModelPosGet(lbl_1_bss_44[1], &sp14);
sp8.z = 0.0f;
sp8.y = 10.0f;
if (lbl_1_bss_48 == 0) {
sp8.x = -25.0f;
} else {
sp8.x = 25.0f;
}
for (i = 0; i < 60; i++) {
PSVECAdd(&sp14, &sp8, &sp14);
sp8.y -= 0.625f;
BoardModelPosSetV(lbl_1_bss_44[1], &sp14);
HuPrcVSleep();
}
HuPrcEnd();
}