From b664e01d0bf872b915bbc22e25b893524b8d7a2c Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Thu, 14 Mar 2024 09:08:20 -0500 Subject: [PATCH] Decompile w21 board --- config/GMPE01_00/rels/w21Dll/symbols.txt | 22 +++--- configure.py | 2 +- src/REL/w21Dll/main.c | 85 ++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 12 deletions(-) create mode 100644 src/REL/w21Dll/main.c diff --git a/config/GMPE01_00/rels/w21Dll/symbols.txt b/config/GMPE01_00/rels/w21Dll/symbols.txt index 83af6697..1b629d3d 100644 --- a/config/GMPE01_00/rels/w21Dll/symbols.txt +++ b/config/GMPE01_00/rels/w21Dll/symbols.txt @@ -3,16 +3,16 @@ _prolog = .text:0x00000030; // type:function size:0x64 scope:global _epilog = .text:0x00000094; // type:function size:0x4C scope:global BoardCreate = .text:0x000000E0; // type:function size:0x1D4 BoardDestroy = .text:0x000002B4; // type:function size:0xB8 -fn_1_36C = .text:0x0000036C; // type:function size:0x44 -fn_1_3B0 = .text:0x000003B0; // type:function size:0x20 -fn_1_3D0 = .text:0x000003D0; // type:function size:0x8 -fn_1_3D8 = .text:0x000003D8; // type:function size:0x4 -fn_1_3DC = .text:0x000003DC; // type:function size:0x4 +LightSetHook = .text:0x0000036C; // type:function size:0x44 scope:local +LightResetHook = .text:0x000003B0; // type:function size:0x20 scope:local +WalkEvent = .text:0x000003D0; // type:function size:0x8 scope:local +WalkMiniEvent = .text:0x000003D8; // type:function size:0x4 scope:local +LandEvent = .text:0x000003DC; // type:function size:0x4 scope:local _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_data_0 = .data:0x00000000; // type:object size:0x2 data:2byte -lbl_1_data_2 = .data:0x00000002; // type:object size:0x2 data:2byte -lbl_1_data_4 = .data:0x00000004; // type:object size:0x2 data:2byte -lbl_1_data_8 = .data:0x00000008; // type:object size:0x8 +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 +bgMdl = .data:0x00000000; // type:object size:0x2 scope:local data:2byte +fgMdl = .data:0x00000002; // type:object size:0x2 scope:local data:2byte +hostMdl = .data:0x00000004; // type:object size:0x2 scope:local data:2byte +hostMotTbl = .data:0x00000008; // type:object size:0x8 scope:local diff --git a/configure.py b/configure.py index 94246d7c..9e7bacff 100644 --- a/configure.py +++ b/configure.py @@ -1104,7 +1104,7 @@ config.libs = [ Rel('w21Dll', objects = { Object(Matching, "REL/board_executor.c"), - Object(NonMatching, "REL/w21Dll/main.c"), + Object(Matching, "REL/w21Dll/main.c"), } ), Rel('ztardll', diff --git a/src/REL/w21Dll/main.c b/src/REL/w21Dll/main.c new file mode 100644 index 00000000..b870ea1e --- /dev/null +++ b/src/REL/w21Dll/main.c @@ -0,0 +1,85 @@ +#include "game/board/space.h" +#include "game/board/model.h" +#include "game/board/main.h" +#include "game/board/star.h" +#include "game/board/shop.h" + +#include "game/data.h" + +static s16 bgMdl = -1; +static s16 fgMdl = -1; +static s16 hostMdl = -1; + +static s32 hostMotTbl[] = { + DATA_MAKE_NUM(DATADIR_BGUEST, 42), + -1 +}; + +static void LightSetHook(void); +static void LightResetHook(void); +static s32 WalkEvent(void); +static s32 WalkMiniEvent(void); +static s32 LandEvent(void); + +void BoardCreate(void) +{ + BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W21, 0)); + bgMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W21, 1), NULL, 0); + fn_8006DDE8(bgMdl, -1.0f); + BoardModelMotionStart(bgMdl, 0, 0x40000001); + fgMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W21, 2), NULL, 0); + fn_8006DDE8(fgMdl, -1.0f); + BoardModelPosSet(fgMdl, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(fgMdl, 0, 0x40000001); + hostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 41), hostMotTbl, 0); + BoardModelPosSet(hostMdl, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(hostMdl, 1, 0x40000001); + BoardLightHookSet(LightSetHook, LightResetHook); + BoardSpaceWalkEventFuncSet(WalkEvent); + BoardSpaceWalkMiniEventFuncSet(WalkMiniEvent); + BoardSpaceLandEventFuncSet(LandEvent); + BoardStarHostSet(hostMdl); + BoardShopHostSet(hostMdl); +} + +void BoardDestroy(void) +{ + if(hostMdl != -1) { + BoardModelKill(hostMdl); + hostMdl = -1; + } + if(bgMdl != -1) { + BoardModelKill(bgMdl); + bgMdl = -1; + } + if(fgMdl != -1) { + BoardModelKill(fgMdl); + fgMdl = -1; + } +} + +static void LightSetHook(void) +{ + s16 id = BoardModelIDGet(bgMdl); + Hu3DModelLightInfoSet(id, 1); +} + +static void LightResetHook(void) +{ + Hu3DFogClear(); +} + +static s32 WalkEvent(void) +{ + return 0; +} + +static s32 WalkMiniEvent(void) +{ + +} + +static s32 LandEvent(void) +{ + +} \ No newline at end of file