Merge pull request #237 from mrshigure/w06

Matched REL/w06/main
This commit is contained in:
Rainchus 2024-04-01 09:58:54 -05:00 committed by GitHub
commit 0681005905
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 393 additions and 32 deletions

View file

@ -3,14 +3,14 @@ _prolog = .text:0x00000030; // type:function size:0x64 scope:global
_epilog = .text:0x00000094; // type:function size:0x4C scope:global
BoardCreate = .text:0x000000E0; // type:function size:0x4C4
BoardDestroy = .text:0x000005A4; // type:function size:0x18C
fn_1_730 = .text:0x00000730; // type:function size:0x6C
fn_1_79C = .text:0x0000079C; // type:function size:0x20
fn_1_7BC = .text:0x000007BC; // type:function size:0x144
fn_1_900 = .text:0x00000900; // type:function size:0x84
fn_1_984 = .text:0x00000984; // type:function size:0x3C
fn_1_9C0 = .text:0x000009C0; // type:function size:0x168
fn_1_B28 = .text:0x00000B28; // type:function size:0x34
fn_1_B5C = .text:0x00000B5C; // type:function size:0x214
fn_1_730 = .text:0x00000730; // type:function size:0x6C scope:local
fn_1_79C = .text:0x0000079C; // type:function size:0x20 scope:local
fn_1_7BC = .text:0x000007BC; // type:function size:0x144 scope:local
fn_1_900 = .text:0x00000900; // type:function size:0x84 scope:local
fn_1_984 = .text:0x00000984; // type:function size:0x3C scope:local
fn_1_9C0 = .text:0x000009C0; // type:function size:0x168 scope:local
fn_1_B28 = .text:0x00000B28; // type:function size:0x34 scope:local
fn_1_B5C = .text:0x00000B5C; // type:function size:0x214 scope:local
fn_1_D70 = .text:0x00000D70; // type:function size:0x1FC
fn_1_F6C = .text:0x00000F6C; // type:function size:0xE8
fn_1_1054 = .text:0x00001054; // type:function size:0x90
@ -121,16 +121,16 @@ fn_1_CC90 = .text:0x0000CC90; // type:function size:0x7C
fn_1_CD0C = .text:0x0000CD0C; // type:function size:0x398
_ctors = .ctors:0x00000000; // type:label scope:global data:4byte
_dtors = .dtors:0x00000000; // type:label scope:global data:4byte
lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float
lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float
lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float
lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float
lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x8 data:4byte
lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x8 data:4byte
lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float
lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float
lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float
lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float
lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float
lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float
lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float
lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float
lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x8 scope:local data:4byte
lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x8 scope:local data:4byte
lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float
lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float
lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float
lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float
lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x4 data:float
lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float
lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float
@ -268,14 +268,14 @@ lbl_1_rodata_2C4 = .rodata:0x000002C4; // type:object size:0x4 data:float
lbl_1_rodata_2C8 = .rodata:0x000002C8; // type:object size:0x8 data:double
lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float
lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float
lbl_1_data_0 = .data:0x00000000; // type:object size:0xF0
lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x2 data:2byte
lbl_1_data_F2 = .data:0x000000F2; // type:object size:0x2 data:2byte
lbl_1_data_F4 = .data:0x000000F4; // type:object size:0x2 data:2byte
lbl_1_data_F6 = .data:0x000000F6; // type:object size:0x2 data:2byte
lbl_1_data_F8 = .data:0x000000F8; // type:object size:0x8
lbl_1_data_100 = .data:0x00000100; // type:object size:0x8
lbl_1_data_108 = .data:0x00000108; // type:object size:0xA0
lbl_1_data_0 = .data:0x00000000; // type:object size:0xF0 scope:local
lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x2 scope:local data:2byte
lbl_1_data_F2 = .data:0x000000F2; // type:object size:0x2 scope:local data:2byte
lbl_1_data_F4 = .data:0x000000F4; // type:object size:0x2 scope:local data:2byte
lbl_1_data_F6 = .data:0x000000F6; // type:object size:0x2 scope:local data:2byte
lbl_1_data_F8 = .data:0x000000F8; // type:object size:0x8 scope:local
lbl_1_data_100 = .data:0x00000100; // type:object size:0x8 scope:local
lbl_1_data_108 = .data:0x00000108; // type:object size:0xA0 scope:local
lbl_1_data_1A8 = .data:0x000001A8; // type:object size:0x2 data:2byte
lbl_1_data_1AA = .data:0x000001AA; // type:object size:0x1 data:byte
lbl_1_data_1AD = .data:0x000001AD; // type:object size:0x3
@ -333,8 +333,8 @@ lbl_1_data_510 = .data:0x00000510; // type:object size:0x20
lbl_1_data_530 = .data:0x00000530; // type:object size:0x6 data:string
lbl_1_data_536 = .data:0x00000536; // type:object size:0xB data:string
lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte
lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte
lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte
lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 scope:local data:4byte
lbl_1_bss_C = .bss:0x0000000C; // type:object size:0xC data:2byte
lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte
lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x1 data:byte

View file

@ -107,7 +107,7 @@ boardWork = .bss:0x00000000; // type:object size:0x4 data:4byte
lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte
motTbl = .bss:0x00000008; // type:object size:0x4 scope:local data:4byte
tutorialDoneF = .bss:0x0000000C; // type:object size:0x2 data:2byte
w10ExitWin = .bss:0x0000000E; // type:object size:0x2 data:2byte
tutorialExitWin = .bss:0x0000000E; // type:object size:0x2 data:2byte
lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x8 data:2byte
hostProc = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte
hostPos = .bss:0x0000001C; // type:object size:0x2 scope:local data:2byte

View file

@ -1135,10 +1135,10 @@ config.libs = [
Object(NonMatching, "REL/w05Dll/mg_coin.c"),
}
),
Rel('w05Dll',
Rel('w06Dll',
objects = {
Object(Matching, "REL/board_executor.c"),
Object(NonMatching, "REL/w06Dll/main.c"),
Object(Matching, "REL/w06Dll/main.c"),
Object(NonMatching, "REL/w06Dll/mg_item.c"),
Object(NonMatching, "REL/w06Dll/mg_coin.c"),
Object(NonMatching, "REL/w06Dll/fire.c"),

View file

@ -4,7 +4,7 @@
#include "dolphin/types.h"
enum {
MAPOBJ_MAX = 33
MAPOBJ_MAX = 33
};
typedef struct {

36
include/REL/w06Dll.h Executable file
View file

@ -0,0 +1,36 @@
#ifndef REL_W06_H
#define REL_W06_H
#include "dolphin/types.h"
enum {
MAPOBJ_MAX = 6
};
extern void fn_1_D70(void);
extern void fn_1_F6C(void);
extern void fn_1_1054(void); // return s32?
extern void fn_1_4878(void);
extern void fn_1_4A10(void);
extern void fn_1_4A60(void); // return s32?
extern void fn_1_6EF0(void); // return s32?
extern void fn_1_7BB0(void);
extern void fn_1_7F3C(void);
extern void fn_1_8264(s32 arg0, s16 arg1);
extern void fn_1_8F20(void);
extern void fn_1_91D8(void);
extern void fn_1_9294(s32 arg0, s32 arg1);
extern s32 fn_1_92D8(s32 arg0, s32 arg1);
extern void fn_1_C108(s32 arg0);
extern void fn_1_C2B4(void);
extern void fn_1_CC90(void);
extern void fn_1_CD0C(void);
extern s16 lbl_1_bss_C[MAPOBJ_MAX];
extern void *lbl_1_bss_0;
#endif

325
src/REL/w06Dll/main.c Executable file
View 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);
}