Matched REL/w06/main
This commit is contained in:
parent
b2993d1ba1
commit
bce4e4f2b9
6 changed files with 393 additions and 32 deletions
325
src/REL/w06Dll/main.c
Executable file
325
src/REL/w06Dll/main.c
Executable file
|
|
@ -0,0 +1,325 @@
|
|||
#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;
|
||||
void *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 = 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(0x10010)) {
|
||||
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(0x10010)) {
|
||||
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(0x1001C)) {
|
||||
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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue