325 lines
9.6 KiB
C
Executable file
325 lines
9.6 KiB
C
Executable file
#include "REL/w06Dll.h"
|
|
#include "REL/board_executor.h"
|
|
#include "game/audio.h"
|
|
#include "game/data.h"
|
|
#include "game/flag.h"
|
|
#include "game/hsfman.h"
|
|
#include "game/object.h"
|
|
#include "game/process.h"
|
|
#include "game/board/boo_house.h"
|
|
#include "game/board/lottery.h"
|
|
#include "game/board/main.h"
|
|
#include "game/board/map_object.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 "dolphin.h"
|
|
|
|
typedef struct {
|
|
struct {
|
|
u8 unk00_field0 : 1;
|
|
};
|
|
s8 unk01[10];
|
|
} Bss8Work;
|
|
|
|
typedef struct {
|
|
/* 0x00 */ s32 unk00;
|
|
/* 0x04 */ Vec unk04;
|
|
} Data108Struct; // Size 0x10
|
|
|
|
static void fn_1_730(void);
|
|
static void fn_1_79C(void);
|
|
static s32 fn_1_7BC(void);
|
|
static s32 fn_1_900(void);
|
|
static s32 fn_1_984(void);
|
|
static void fn_1_9C0(void);
|
|
static void fn_1_B28(void);
|
|
static void fn_1_B5C(omObjData *arg0);
|
|
|
|
s16 lbl_1_bss_C[MAPOBJ_MAX];
|
|
|
|
static BoardMapObject lbl_1_data_0[MAPOBJ_MAX] = {
|
|
{ { 450.0f, 200.0f, -2950.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W06, 6) },
|
|
{ { -1650.0f, 0.0f, 2100.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W06, 8) },
|
|
{ { 2700.0f, 100.0f, -1950.0f }, { 0.0f, -89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W06, 5) },
|
|
{ { -3000.0f, 0.0f, 2550.0f }, { 0.0f, 89.999985f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W06, 5) },
|
|
{ { -1800.0f, 0.0f, 2250.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 33) },
|
|
{ { 300.0f, 200.0f, -2850.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 33) }
|
|
};
|
|
|
|
static omObjData *lbl_1_bss_8;
|
|
static s32 lbl_1_bss_4;
|
|
UnkW06BoardData *lbl_1_bss_0;
|
|
|
|
static s16 lbl_1_data_F0 = -1;
|
|
static s16 lbl_1_data_F2 = -1;
|
|
static s16 lbl_1_data_F4 = -1;
|
|
static s16 lbl_1_data_F6 = -1;
|
|
|
|
static s32 lbl_1_data_F8[] = {
|
|
DATA_MAKE_NUM(DATADIR_W06, 18),
|
|
-1
|
|
};
|
|
|
|
static s32 lbl_1_data_100[] = {
|
|
DATA_MAKE_NUM(DATADIR_BGUEST, 34),
|
|
-1
|
|
};
|
|
|
|
static Data108Struct lbl_1_data_108[] = {
|
|
0x00000002, { -3359.9998f, 170.0f, -3559.9998f },
|
|
0x0000002A, { 3540.0002f, 170.0f, 1320.0f },
|
|
0x00000052, { -710.0f, 170.0f, -4580.0f },
|
|
0x0000007A, { -3670.0f, 170.0f, 1020.0f },
|
|
0x000000A2, { 1970.0001f, 170.0f, -3840.0002f },
|
|
0x000000CA, { -3160.0f, 170.0f, -3770.0f },
|
|
0x000000F2, { -3500.0f, 170.0f, -2340.0f },
|
|
0x0000011A, { -3700.0f, 170.0f, -810.00005f },
|
|
0x00000142, { 100.0f, 170.0f, -4100.0f },
|
|
0x0000016A, { 3290.0002f, 170.0f, -340.0f }
|
|
};
|
|
|
|
void BoardCreate(void) {
|
|
BoardMapObject *temp_r30;
|
|
s32 *var_r29;
|
|
s32 i;
|
|
|
|
lbl_1_bss_0 = (UnkW06BoardData*) GWSystem.board_data;
|
|
BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W06, 0));
|
|
lbl_1_data_F0 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 1), NULL, 0);
|
|
fn_8006DDE8(lbl_1_data_F0, -1.0f);
|
|
BoardModelMotionStart(lbl_1_data_F0, 0, 0x40000001);
|
|
lbl_1_data_F2 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 2), NULL, 0);
|
|
fn_8006DDE8(lbl_1_data_F2, -1.0f);
|
|
BoardModelPosSet(lbl_1_data_F2, 0.0f, 0.0f, 0.0f);
|
|
BoardModelMotionStart(lbl_1_data_F2, 0, 0x40000001);
|
|
lbl_1_data_F4 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W06, 17), lbl_1_data_F8, 0);
|
|
BoardModelPosSet(lbl_1_data_F4, 0.0f, 0.0f, 0.0f);
|
|
BoardModelMotionStart(lbl_1_data_F4, 1, 0x40000001);
|
|
lbl_1_data_F6 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 33), lbl_1_data_100, 0);
|
|
BoardModelPosSet(lbl_1_data_F6, 0.0f, 0.0f, 0.0f);
|
|
BoardModelMotionStart(lbl_1_data_F6, 1, 0x40000001);
|
|
for (i = 0; i < MAPOBJ_MAX; i++) {
|
|
temp_r30 = &lbl_1_data_0[i];
|
|
if (temp_r30->data_num != -1) {
|
|
if (i == 4 || i == 5) {
|
|
var_r29 = lbl_1_data_100;
|
|
} else {
|
|
var_r29 = NULL;
|
|
}
|
|
lbl_1_bss_C[i] = BoardModelCreate(temp_r30->data_num, var_r29, 0);
|
|
BoardModelPosSetV(lbl_1_bss_C[i], &temp_r30->pos);
|
|
BoardModelRotSetV(lbl_1_bss_C[i], &temp_r30->rot);
|
|
BoardModelScaleSetV(lbl_1_bss_C[i], &temp_r30->scale);
|
|
BoardModelVisibilitySet(lbl_1_bss_C[i], 1);
|
|
}
|
|
}
|
|
BoardModelMotionStart(lbl_1_bss_C[4], 1, 0x40000001);
|
|
BoardModelMotionStart(lbl_1_bss_C[5], 1, 0x40000001);
|
|
BoardModelMotionStart(lbl_1_bss_C[2], 0, 0);
|
|
BoardModelMotionSpeedSet(lbl_1_bss_C[2], 0.0f);
|
|
BoardModelLayerSet(lbl_1_bss_C[2], 1);
|
|
BoardModelMotionStart(lbl_1_bss_C[3], 0, 0);
|
|
BoardModelMotionSpeedSet(lbl_1_bss_C[3], 0.0f);
|
|
BoardModelLayerSet(lbl_1_bss_C[3], 1);
|
|
fn_1_D70();
|
|
fn_1_4878();
|
|
fn_1_7BB0();
|
|
fn_1_8F20();
|
|
BoardLightHookSet(fn_1_730, fn_1_79C);
|
|
BoardSpaceWalkEventFuncSet(fn_1_7BC);
|
|
BoardSpaceWalkMiniEventFuncSet(fn_1_900);
|
|
BoardSpaceLandEventFuncSet(fn_1_984);
|
|
BoardStarHostSet(lbl_1_data_F4);
|
|
BoardBooHouseHostSet(lbl_1_data_F6);
|
|
BoardLotteryHostSet(lbl_1_data_F6);
|
|
BoardShopHostSet(lbl_1_data_F6);
|
|
BoardJunctionMaskSet(0x3000);
|
|
boardTurnFunc = fn_1_C2B4;
|
|
boardStarShowNextHook = fn_1_CD0C;
|
|
boardTurnStartFunc = fn_1_9294;
|
|
boardStarGiveHook = fn_1_CC90;
|
|
boardBowserHook = fn_1_C108;
|
|
fn_1_9C0();
|
|
}
|
|
|
|
void BoardDestroy(void) {
|
|
s32 i;
|
|
|
|
fn_1_B28();
|
|
boardTurnFunc
|
|
= (void*) boardStarShowNextHook
|
|
= (void*) boardTurnStartFunc
|
|
= (void*) boardStarGiveHook
|
|
= (void*) boardBowserHook = NULL;
|
|
fn_1_91D8();
|
|
fn_1_7F3C();
|
|
fn_1_F6C();
|
|
fn_1_4A10();
|
|
for (i = 0; i < MAPOBJ_MAX; i++) {
|
|
BoardModelKill(lbl_1_bss_C[i]);
|
|
lbl_1_bss_C[i] = -1;
|
|
}
|
|
if (lbl_1_data_F6 != -1) {
|
|
BoardModelKill(lbl_1_data_F6);
|
|
lbl_1_data_F6 = -1;
|
|
}
|
|
if (lbl_1_data_F4 != -1) {
|
|
BoardModelKill(lbl_1_data_F4);
|
|
lbl_1_data_F4 = -1;
|
|
}
|
|
if (lbl_1_data_F0 != -1) {
|
|
BoardModelKill(lbl_1_data_F0);
|
|
lbl_1_data_F0 = -1;
|
|
}
|
|
if (lbl_1_data_F2 != -1) {
|
|
BoardModelKill(lbl_1_data_F2);
|
|
lbl_1_data_F2 = -1;
|
|
}
|
|
}
|
|
|
|
static void fn_1_730(void) {
|
|
s16 var_r31;
|
|
|
|
var_r31 = BoardModelIDGet(lbl_1_data_F0);
|
|
Hu3DModelLightInfoSet(var_r31, 1);
|
|
Hu3DFogSet(4200.0f, 30000.0f, 0xF8, 0x30, 0);
|
|
}
|
|
|
|
static void fn_1_79C(void) {
|
|
Hu3DFogClear();
|
|
}
|
|
|
|
static s32 fn_1_7BC(void) {
|
|
s32 sp10[] = { 0, 1 };
|
|
s32 sp8[] = { 0x300, 0xC0 };
|
|
BoardSpace *temp_r31;
|
|
s16 temp_r28;
|
|
s32 temp_r27;
|
|
s32 i;
|
|
s32 j;
|
|
|
|
temp_r27 = GWSystem.player_curr;
|
|
temp_r28 = GWPlayer[temp_r27].space_curr;
|
|
if (fn_1_92D8(temp_r27, temp_r28) != 0) {
|
|
return 1;
|
|
}
|
|
for (i = 0; i < 2; i++) {
|
|
if (BoardSpaceLinkFlagSearch(0, temp_r28, sp8[i]) == -1) {
|
|
continue;
|
|
}
|
|
temp_r31 = BoardSpaceGet(0, temp_r28);
|
|
for (j = 0; j < temp_r31->link_cnt; j++) {
|
|
if ((BoardSpaceFlagGet(0, temp_r31->link[j]) & 0x04000000) == 0) {
|
|
fn_1_8264(sp10[i], temp_r31->link[j]);
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static s32 fn_1_900(void) {
|
|
s16 var_r30;
|
|
s32 temp_r31;
|
|
|
|
var_r30 = GWPlayer[GWSystem.player_curr].space_curr;
|
|
temp_r31 = BoardSpaceFlagGet(0, var_r30) & 0x600000;
|
|
if (temp_r31 == 0x200000) {
|
|
fn_1_1054(); // TODO: return?
|
|
} else if (temp_r31 == 0x400000) {
|
|
fn_1_4A60(); // TODO: return?
|
|
}
|
|
}
|
|
|
|
static s32 fn_1_984(void) {
|
|
if (BoardPlayerSizeGet(GWSystem.player_curr) != 2) {
|
|
fn_1_6EF0(); // TODO: return?
|
|
}
|
|
}
|
|
|
|
static void fn_1_9C0(void) {
|
|
Vec sp14;
|
|
Vec sp8;
|
|
omObjData *temp_r3;
|
|
Bss8Work *temp_r30;
|
|
s32 i;
|
|
|
|
temp_r3 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_B5C);
|
|
lbl_1_bss_8 = temp_r3;
|
|
temp_r30 = OM_GET_WORK_PTR(temp_r3, Bss8Work);
|
|
temp_r30->unk00_field0 = 0;
|
|
BoardCameraPosGet(&sp14);
|
|
BoardCameraDirGet(&sp8);
|
|
HuAudFXListnerSetEX(&sp14, &sp8, 6600.0f, 36000.0f, 0.0f, 1650.0f, 1650.0f);
|
|
for (i = 0; i < 10; i++) {
|
|
temp_r30->unk01[i] = 0;
|
|
}
|
|
if (!_CheckFlag(FLAG_ID_MAKE(1, 16))) {
|
|
if (lbl_1_bss_4 == 0) {
|
|
HuAudFXPauseAll(1);
|
|
lbl_1_bss_4 = 1;
|
|
}
|
|
} else if (lbl_1_bss_4 != 0) {
|
|
HuAudFXPauseAll(0);
|
|
lbl_1_bss_4 = 0;
|
|
}
|
|
}
|
|
|
|
static void fn_1_B28(void) {
|
|
if (lbl_1_bss_8) {
|
|
OM_GET_WORK_PTR(lbl_1_bss_8, Bss8Work)->unk00_field0 = 1;
|
|
}
|
|
}
|
|
|
|
static void fn_1_B5C(omObjData *arg0) {
|
|
Bss8Work *temp_r30;
|
|
Vec sp14;
|
|
Vec sp8;
|
|
s16 temp_r28;
|
|
s16 var_r29;
|
|
s16 i;
|
|
|
|
temp_r30 = OM_GET_WORK_PTR(arg0, Bss8Work);
|
|
if (temp_r30->unk00_field0 != 0 || BoardIsKill()) {
|
|
HuAudFXListnerKill();
|
|
lbl_1_bss_8 = NULL;
|
|
omDelObjEx(HuPrcCurrentGet(), arg0);
|
|
return;
|
|
}
|
|
temp_r28 = BoardModelMotionTimeGet(lbl_1_data_F0);
|
|
BoardCameraDirGet(&sp8);
|
|
BoardCameraTargetGet(&sp14);
|
|
sp14.y += 2000.0f;
|
|
if (!_CheckFlag(FLAG_ID_MAKE(1, 16))) {
|
|
if (lbl_1_bss_4 == 0) {
|
|
HuAudFXPauseAll(1);
|
|
lbl_1_bss_4 = 1;
|
|
}
|
|
} else if (lbl_1_bss_4 != 0) {
|
|
HuAudFXPauseAll(0);
|
|
lbl_1_bss_4 = 0;
|
|
}
|
|
if (!_CheckFlag(FLAG_ID_MAKE(1, 28))) {
|
|
for (var_r29 = i = 0; i < 10; i++) {
|
|
if (temp_r30->unk01[i] != 0) {
|
|
var_r29++;
|
|
} else if (temp_r28 == lbl_1_data_108[i].unk00) {
|
|
HuAudFXEmiterPlay(0x4A1, &lbl_1_data_108[i].unk04);
|
|
temp_r30->unk01[i] = 1;
|
|
goto block_20;
|
|
}
|
|
}
|
|
if (var_r29 < 10) {
|
|
return;
|
|
}
|
|
for (i = 0; i < 10; i++) {
|
|
temp_r30->unk01[i] = 0;
|
|
}
|
|
}
|
|
block_20:
|
|
HuAudFXListnerUpdate(&sp14, &sp8);
|
|
}
|