462 lines
12 KiB
C
462 lines
12 KiB
C
#include "REL/w05Dll.h"
|
|
|
|
#include "game/gamework_data.h"
|
|
#include "game/chrman.h"
|
|
#include "game/frand.h"
|
|
|
|
#include "game/board/audio.h"
|
|
#include "game/board/boo_house.h"
|
|
#include "game/board/com.h"
|
|
#include "game/board/lottery.h"
|
|
#include "game/board/model.h"
|
|
#include "game/board/player.h"
|
|
#include "game/board/shop.h"
|
|
#include "game/board/space.h"
|
|
#include "game/board/star.h"
|
|
#include "game/board/window.h"
|
|
|
|
// data
|
|
BoardMapObject lbl_1_data_0[7] = {
|
|
{ { 3300.0f, 100.0f, -900.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 1.0f, 1.0f, 1.0f },
|
|
0x790011
|
|
},
|
|
{ { -2550.0f, 0.0f, 1350.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 1.0f, 1.0f, 1.0f },
|
|
0x790014
|
|
},
|
|
{ { -3000.0f, 100.0f, -1050.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 1.0f, 1.0f, 1.0f },
|
|
0x79001A
|
|
},
|
|
{ { 2100.0f, 100.0f, -450.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 1.0f, 1.0f, 1.0f },
|
|
0x79001B
|
|
},
|
|
{ { -450.0f, 100.0f, -750.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 1.0f, 1.0f, 1.0f },
|
|
0x79000A
|
|
},
|
|
{ { -2710.0f, 0.0f, 1315.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 1.0f, 1.0f, 1.0f },
|
|
0x79000A
|
|
},
|
|
{ { 3055.0f, 100.0f, -815.0f },
|
|
{ 0.0f, 0.0f, 0.0f },
|
|
{ 1.0f, 1.0f, 1.0f },
|
|
0x79000A
|
|
},
|
|
};
|
|
s16 lbl_1_data_118 = 0xFFFF;
|
|
s16 lbl_1_data_11A = 0xFFFF;
|
|
s16 lbl_1_data_11C = 0xFFFF;
|
|
s16 lbl_1_data_11E = 0xFFFF;
|
|
s16 lbl_1_data_120 = 0xFFFF;
|
|
s32 lbl_1_data_124[8] = {0x5F0000, 0x1A0000, 0x6D0000, 0x8A0000, 0x850000, 0x110000, 0xD0000, 0x810000};
|
|
s32 lbl_1_data_144[2] = {0x790006, 0xFFFFFFFF};
|
|
s32 lbl_1_data_14C = 0xFFFFFFFF;
|
|
|
|
// bss
|
|
s16 lbl_1_bss_14[7];
|
|
s32* lbl_1_bss_10;
|
|
s16 lbl_1_bss_8[4];
|
|
Process* lbl_1_bss_4;
|
|
bitcopy* lbl_1_bss_0;
|
|
|
|
void BoardCreate(void) {
|
|
s32 sp8;
|
|
s32 var_r31;
|
|
BoardMapObject* temp_r30;
|
|
|
|
sp8 = GWBoardGet();
|
|
lbl_1_bss_0 = (bitcopy*) GWSystem.board_data;
|
|
BoardSpaceInit(0x790000);
|
|
lbl_1_data_118 = BoardModelCreate(0x790001, NULL, 0);
|
|
lbl_1_data_120 = BoardModelCreate(0x790002, NULL, 0);
|
|
fn_8006DDE8(lbl_1_data_118, -1.0f);
|
|
BoardModelPosSet(lbl_1_data_118, 0.0f, 0.0f, 0.0f);
|
|
BoardModelMotionStart(lbl_1_data_118, 0, 0x40000001);
|
|
BoardModelMotionSpeedSet(lbl_1_data_118, 1.0f);
|
|
fn_8006DDE8(lbl_1_data_120, -1.0f);
|
|
BoardModelPosSet(lbl_1_data_120, 0.0f, 0.0f, 0.0f);
|
|
BoardModelMotionStart(lbl_1_data_120, 0, 0x40000001);
|
|
BoardModelMotionSpeedSet(lbl_1_data_120, 1.0f);
|
|
BoardModelLayerSet(lbl_1_data_120, 1);
|
|
lbl_1_data_11A = BoardModelCreate(0x790003, NULL, 0);
|
|
fn_8006DDE8(lbl_1_data_11A, -1.0f);
|
|
BoardModelPosSet(lbl_1_data_11A, 0.0f, 0.0f, 0.0f);
|
|
BoardModelMotionStart(lbl_1_data_11A, 0, 0x40000001);
|
|
lbl_1_data_11C = BoardModelCreate(0x790005, lbl_1_data_144, 0);
|
|
BoardModelPosSet(lbl_1_data_11C, 0.0f, 0.0f, 0.0f);
|
|
BoardModelMotionStart(lbl_1_data_11C, 1, 0x40000001);
|
|
lbl_1_data_11E = BoardModelCreate(0x2001C, &lbl_1_data_14C, 0);
|
|
BoardModelMotionStart(lbl_1_data_11E, 1, 0x40000001);
|
|
BoardLightHookSet(&fn_1_744, &fn_1_788);
|
|
|
|
for (var_r31 = 0; var_r31 < 7; var_r31++) {
|
|
temp_r30 = &lbl_1_data_0[var_r31];
|
|
if (temp_r30->data_num != -1) {
|
|
if ((var_r31 == 4) || (var_r31 == 5) || (var_r31 == 6)) {
|
|
lbl_1_bss_10 = &lbl_1_data_14C;
|
|
} else {
|
|
lbl_1_bss_10 = NULL;
|
|
}
|
|
lbl_1_bss_14[var_r31] = BoardModelCreate(temp_r30->data_num, lbl_1_bss_10, 0);
|
|
BoardModelPosSetV(lbl_1_bss_14[var_r31], &temp_r30->pos);
|
|
BoardModelRotSetV(lbl_1_bss_14[var_r31], &temp_r30->rot);
|
|
BoardModelScaleSetV(lbl_1_bss_14[var_r31], &temp_r30->scale);
|
|
BoardModelVisibilitySet(lbl_1_bss_14[var_r31], 1);
|
|
if (lbl_1_bss_10 != NULL) {
|
|
BoardModelMotionStart(lbl_1_bss_14[var_r31], 0, 0x40000001);
|
|
}
|
|
}
|
|
}
|
|
fn_1_92C();
|
|
fn_1_13D4();
|
|
fn_1_2B40();
|
|
BoardSpaceWalkEventFuncSet(&fn_1_82C);
|
|
BoardSpaceWalkMiniEventFuncSet(&fn_1_1114);
|
|
BoardSpaceLandEventFuncSet(&fn_1_78C);
|
|
BoardStarHostSet(lbl_1_data_11C);
|
|
BoardBooHouseHostSet(lbl_1_data_11E);
|
|
BoardShopHostSet(lbl_1_data_11E);
|
|
BoardLotteryHostSet(lbl_1_data_11E);
|
|
}
|
|
|
|
void BoardDestroy(void) {
|
|
s32 var_r31;
|
|
|
|
for (var_r31 = 0; var_r31 < 7; var_r31++) {
|
|
if (lbl_1_bss_14[var_r31] != 0) {
|
|
BoardModelKill(lbl_1_bss_14[var_r31]);
|
|
lbl_1_bss_14[var_r31] = 0;
|
|
}
|
|
}
|
|
if (lbl_1_data_11E != -1) {
|
|
BoardModelKill(lbl_1_data_11E);
|
|
lbl_1_data_11E = -1;
|
|
}
|
|
if (lbl_1_data_11C != -1) {
|
|
BoardModelKill(lbl_1_data_11C);
|
|
lbl_1_data_11C = -1;
|
|
}
|
|
if (lbl_1_data_118 != -1) {
|
|
BoardModelKill(lbl_1_data_118);
|
|
lbl_1_data_118 = -1;
|
|
}
|
|
if (lbl_1_data_120 != -1) {
|
|
BoardModelKill(lbl_1_data_120);
|
|
lbl_1_data_120 = -1;
|
|
}
|
|
if (lbl_1_data_11A != -1) {
|
|
BoardModelKill(lbl_1_data_11A);
|
|
lbl_1_data_11A = -1;
|
|
}
|
|
BoardSpaceDestroy();
|
|
}
|
|
|
|
void fn_1_744(void) {
|
|
s16 var_r31 = BoardModelIDGet(lbl_1_data_118);
|
|
Hu3DModelLightInfoSet(var_r31, 1);
|
|
}
|
|
|
|
void fn_1_788(void) {
|
|
}
|
|
|
|
s32 fn_1_78C(void) {
|
|
s32 var_r30 = GWSystem.player_curr;
|
|
s32 var_r29 = GWPlayer[var_r30].space_curr;
|
|
s32 var_r28;
|
|
u32 temp_r3;
|
|
|
|
temp_r3 = BoardSpaceFlagGet(0, var_r29);
|
|
if ((temp_r3 & 2) != 0) {
|
|
fn_1_1E44();
|
|
return;
|
|
}
|
|
if ((temp_r3 & 0x40) != 0) {
|
|
var_r28 = (temp_r3 & 0x38) >> 3;
|
|
fn_1_4034(var_r28);
|
|
}
|
|
}
|
|
|
|
s32 fn_1_82C(void) {
|
|
s32 temp_r30;
|
|
BoardSpace* temp_r3;
|
|
|
|
temp_r30 = GWSystem.player_curr;
|
|
temp_r3 = BoardSpaceGet(0, GWPlayer[temp_r30].space_curr);
|
|
if ((temp_r3->flag & 1) != 0) {
|
|
fn_1_2C7C(0);
|
|
return 1;
|
|
}
|
|
if ((temp_r3->flag & 0x800) != 0) {
|
|
fn_1_2C7C(1);
|
|
return 1;
|
|
}
|
|
if (BoardPlayerSizeGet(temp_r30) == 2) {
|
|
return 0;
|
|
}
|
|
if (GWPlayer[temp_r30].bowser_suit != 0) {
|
|
return 0;
|
|
}
|
|
if ((temp_r3->flag & 4) != 0) {
|
|
fn_1_155C();
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void fn_1_92C(void) {
|
|
fn_1_6B28();
|
|
fn_1_9680();
|
|
}
|
|
|
|
void fn_1_950(void) {
|
|
}
|
|
|
|
void fn_1_954(void) {
|
|
Vec sp14;
|
|
Vec sp8;
|
|
s32 var_r26;
|
|
u32 var_r28;
|
|
s32 temp_r27;
|
|
s32 var_r29;
|
|
s32 var_r31;
|
|
s32 temp_r30;
|
|
|
|
temp_r30 = GWSystem.player_curr;
|
|
if (BoardPlayerItemCount(temp_r30) == 3) {
|
|
BoardWinCreate(2, 0x270009, 7);
|
|
BoardWinWait();
|
|
BoardWinKill();
|
|
HuPrcEnd();
|
|
}
|
|
lbl_1_bss_8[0] = 0;
|
|
|
|
for (var_r31 = 1; var_r31 < 3;) {
|
|
lbl_1_bss_8[var_r31] = (u32)frandmod(0xE);
|
|
if ((lbl_1_bss_8[var_r31] == 0xA) || (lbl_1_bss_8[var_r31] == 0xD)) {
|
|
continue;
|
|
}
|
|
for (var_r29 = 0; var_r29 < var_r31; var_r29++) {
|
|
if (lbl_1_bss_8[var_r31] == lbl_1_bss_8[var_r29]) {
|
|
lbl_1_bss_8[var_r31] = -1;
|
|
}
|
|
}
|
|
if (lbl_1_bss_8[var_r31] == -1) {
|
|
continue;
|
|
}
|
|
var_r31++;
|
|
}
|
|
fn_1_74D0(lbl_1_bss_8);
|
|
BoardWinCreateChoice(2, 0x27000A, 7, 0);
|
|
if (GWPlayer[temp_r30].com != 0) {
|
|
if (BoardComPreferItemCheck(temp_r30, lbl_1_bss_8[0], lbl_1_bss_8[1], lbl_1_bss_8[2]) != -1) {
|
|
BoardComKeySetLeft();
|
|
} else {
|
|
BoardComKeySetRight();
|
|
}
|
|
}
|
|
BoardWinWait();
|
|
BoardWinKill();
|
|
var_r28 = BoardWinChoiceGet();
|
|
if (var_r28 == 1 || var_r28 == -1) {
|
|
while (((u32)fn_1_8884() & 0x10) == 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardWinCreate(2, 0x27000B, 7);
|
|
BoardWinWait();
|
|
BoardWinKill();
|
|
BoardMGExit();
|
|
fn_1_88B8();
|
|
fn_1_77B0();
|
|
fn_1_7314();
|
|
while (BoardMGDoneFlagGet() != 1) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardMGDoneFlagSet(0);
|
|
HuPrcEnd();
|
|
}
|
|
sp14.x = -30.0f;
|
|
sp14.y = sp14.z = 0.0f;
|
|
sp8.x = 0.0f;
|
|
sp8.y = 0.0f;
|
|
sp8.z = 0.0f;
|
|
BoardCameraMotionStartEx(lbl_1_bss_14[0], &sp14, &sp8, 1250.0f, 25.0f, 0x15);
|
|
|
|
while (((u32)fn_1_8884() & 0x10) == 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
temp_r27 = GWPlayer[temp_r30].space_curr;
|
|
var_r26 = BoardSpaceLinkFlagSearch(0, temp_r27, 0x02000000);
|
|
BoardPlayerMoveBetween(temp_r30, temp_r27, var_r26);
|
|
|
|
while (GWPlayer[temp_r30].moving != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardPlayerMotionStart(temp_r30, 1, 0x40000001);
|
|
fn_1_6B7C();
|
|
|
|
while (BoardEventFlagGet() != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
while ((GWPlayer[temp_r30].moving) != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardPlayerMotionStart(temp_r30, 1, 0x40000001);
|
|
HuPrcEnd();
|
|
}
|
|
|
|
void fn_1_D4C(void) {
|
|
BoardWinKill();
|
|
CharModelDataClose(-1);
|
|
lbl_1_bss_4 = NULL;
|
|
}
|
|
|
|
void fn_1_D84(void) {
|
|
lbl_1_bss_4 = HuPrcChildCreate(fn_1_954, 0x2003U, 0x3000U, 0, boardMainProc);
|
|
HuPrcDestructorSet2(lbl_1_bss_4, fn_1_D4C);
|
|
|
|
while (lbl_1_bss_4 != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
}
|
|
|
|
void fn_1_E04(void) {
|
|
HuPrcSleep(0x3C);
|
|
BoardMusStart(1, 0x23, 0x7F, 0);
|
|
HuPrcEnd();
|
|
}
|
|
|
|
void fn_1_E40(void) {
|
|
Vec sp20;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
s32 temp_r30;
|
|
s32 temp_r29;
|
|
s32 temp_r3_2;
|
|
s32 temp_r31;
|
|
|
|
temp_r31 = GWSystem.player_curr;
|
|
fn_1_96B4();
|
|
BoardWinCreateChoice(2, 0x27000F, 7, 0);
|
|
if (GWPlayer[temp_r31].com != 0) {
|
|
if (frandBool() != 0) {
|
|
BoardComKeySetLeft();
|
|
} else {
|
|
BoardComKeySetRight();
|
|
}
|
|
}
|
|
BoardWinWait();
|
|
BoardWinKill();
|
|
temp_r30 = BoardWinChoiceGet();
|
|
if ((temp_r30 == 1) || (temp_r30 == -1)) {
|
|
fn_1_9760();
|
|
BoardWinCreate(2, 0x270010, 7);
|
|
BoardWinWait();
|
|
BoardWinKill();
|
|
BoardMGExit();
|
|
|
|
while (BoardMGDoneFlagGet() != 1) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardMGDoneFlagSet(0);
|
|
return;
|
|
}
|
|
BoardAudSeqPause(0, 1, 0x3E8);
|
|
HuPrcChildCreate(fn_1_E04, 0x2003, 0x1000, 0, boardMainProc);
|
|
sp20.x = -35.0f;
|
|
sp20.y = sp20.z = 0.0f;
|
|
sp14.x = 0.0f;
|
|
sp14.y = 0.0f;
|
|
sp14.z = -250.0f;
|
|
BoardCameraMotionStartEx(lbl_1_bss_14[1], &sp20, &sp14, 1550.0f, 25.0f, 0x15);
|
|
temp_r29 = GWPlayer[temp_r31].space_curr;
|
|
temp_r3_2 = BoardSpaceLinkFlagSearch(0, temp_r29, 0x02000000);
|
|
BoardSpacePosGet(0, temp_r3_2, &sp8);
|
|
BoardPlayerMoveBetween(temp_r31, temp_r29, temp_r3_2);
|
|
while (GWPlayer[temp_r31].moving != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardPlayerMotionStart(temp_r31, 1, 0x40000001);
|
|
fn_1_97AC();
|
|
while (GWPlayer[temp_r31].moving != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
while (BoardEventFlagGet() != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
while (GWPlayer[temp_r31].moving != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
BoardPlayerMotionStart(temp_r31, 1, 0x40000001);
|
|
}
|
|
|
|
s32 fn_1_1114(void) {
|
|
u32 temp_r31;
|
|
s16 var_r30 = GWPlayer[GWSystem.player_curr].space_curr;
|
|
|
|
temp_r31 = BoardSpaceFlagGet(0, var_r30) & 0x600000;
|
|
BoardRollDispSet(0);
|
|
if ((temp_r31 & 0x200000) != 0) {
|
|
lbl_1_bss_4 = HuPrcChildCreate(fn_1_954, 0x2003, 0x3000, 0, boardMainProc);
|
|
HuPrcDestructorSet2(lbl_1_bss_4, fn_1_D4C);
|
|
|
|
while (lbl_1_bss_4 != 0) {
|
|
HuPrcVSleep();
|
|
}
|
|
} else if ((temp_r31 & 0x400000) != 0) {
|
|
fn_1_E40();
|
|
}
|
|
BoardRollDispSet(1);
|
|
}
|
|
|
|
s32 fn_1_1208(s16 arg0, f32 arg8, f32 arg9) {
|
|
f32 var_f29;
|
|
f32 var_f31;
|
|
s32 var_r31;
|
|
|
|
var_r31 = 0;
|
|
var_f31 = BoardModelRotYGet(arg0);
|
|
arg8 = fmod(arg8, 360.0);
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
if (arg8 < 0.0f) {
|
|
arg8 += 360.0f;
|
|
}
|
|
if (var_f31 != arg8) {
|
|
var_f29 = arg8 - var_f31;
|
|
if (var_f29 < 0.0f) {
|
|
var_f29 += 360.0f;
|
|
}
|
|
if (var_f29 < 180.0f) {
|
|
if (var_f29 > arg9) {
|
|
var_f31 = var_f31 + arg9;
|
|
} else {
|
|
var_f31 = arg8;
|
|
}
|
|
} else if ((360.0f - var_f29) > arg9) {
|
|
var_f31 = var_f31 - arg9;
|
|
} else {
|
|
var_f31 = arg8;
|
|
}
|
|
if (var_f31 < 0.0f) {
|
|
var_f31 += 360.0f;
|
|
}
|
|
if (var_f31 >= 360.0f) {
|
|
var_f31 -= 360.0f;
|
|
}
|
|
BoardModelRotYSet(arg0, var_f31);
|
|
} else {
|
|
var_r31 = 1;
|
|
}
|
|
return var_r31;
|
|
}
|