From e6eeddcdd034b09d07d146c97770035c777b63a8 Mon Sep 17 00:00:00 2001 From: M0liusX Date: Fri, 26 Jan 2024 12:53:36 -0600 Subject: [PATCH 01/14] initial w02dll gamble.c --- src/REL/w02Dll/gamble.c | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/REL/w02Dll/gamble.c diff --git a/src/REL/w02Dll/gamble.c b/src/REL/w02Dll/gamble.c new file mode 100644 index 00000000..47a68b7e --- /dev/null +++ b/src/REL/w02Dll/gamble.c @@ -0,0 +1,8 @@ +#include "dolphin.h" + + +s32 lbl_1_bss_50; + +void fn_1_3938(void) { + lbl_1_bss_50 = 0; +} \ No newline at end of file From 2fcad7161dde4411d7d3ca9c14dc72eeec0011a9 Mon Sep 17 00:00:00 2001 From: M0liusX Date: Fri, 26 Jan 2024 13:02:16 -0600 Subject: [PATCH 02/14] decomp w02dll fn_1_394C --- src/REL/w02Dll/gamble.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/REL/w02Dll/gamble.c b/src/REL/w02Dll/gamble.c index 47a68b7e..9a4e562c 100644 --- a/src/REL/w02Dll/gamble.c +++ b/src/REL/w02Dll/gamble.c @@ -1,8 +1,28 @@ #include "dolphin.h" +#include "game/process.h" +#include "game/gamework_data.h" +#include "game/board/main.h" + +Process* lbl_1_bss_50; +s32 lbl_1_bss_54; -s32 lbl_1_bss_50; +void fn_1_2D04(); + void fn_1_3938(void) { - lbl_1_bss_50 = 0; + lbl_1_bss_50 = NULL; +} + + +void fn_1_394C(s32 arg0) { + s32 currPlayer; + currPlayer = GWSystem.player_curr; + + lbl_1_bss_54 = arg0; + lbl_1_bss_50 = HuPrcChildCreate(fn_1_2D04, 0x2003U, 0x2000U, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_50, fn_1_3938); + while (lbl_1_bss_50) { + HuPrcVSleep(); + } } \ No newline at end of file From 83ae7b2a6fff6d51e24e284784c04430b14bf4d1 Mon Sep 17 00:00:00 2001 From: M0liusX Date: Fri, 26 Jan 2024 16:32:50 -0600 Subject: [PATCH 03/14] init work on w02Dll main.c --- src/REL/w02Dll/main.c | 46 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/REL/w02Dll/main.c diff --git a/src/REL/w02Dll/main.c b/src/REL/w02Dll/main.c new file mode 100644 index 00000000..d9c2bb9a --- /dev/null +++ b/src/REL/w02Dll/main.c @@ -0,0 +1,46 @@ +#include "dolphin.h" +#include "game/board/model.h" + +s16 lbl_1_bss_30[0x10]; // Model List + +/* Special Models */ +s16 lbl_1_data_280; +s16 lbl_1_data_282; +s16 lbl_1_data_284; +s16 lbl_1_data_286; + + +void BoardDestroy(void) { + /* Kill Model List */ + s32 i; + for (i = 0; i < 0x10; i++) { + if (lbl_1_bss_30[i] != 0) { + BoardModelKill(lbl_1_bss_30[i]); + lbl_1_bss_30[i] = 0; + } + } + + /* Kill Special Models */ + if (lbl_1_data_286 != -1) { + BoardModelKill(lbl_1_data_286); + lbl_1_data_286 = -1; + } + if (lbl_1_data_284 != -1) { + BoardModelKill(lbl_1_data_284); + lbl_1_data_284 = -1; + } + if (lbl_1_data_280 != -1) { + BoardModelKill(lbl_1_data_280); + lbl_1_data_280 = -1; + } + if (lbl_1_data_282 != -1) { + BoardModelKill(lbl_1_data_282); + lbl_1_data_282 = -1; + } + BoardSpaceDestroy(); +} + +void fn_1_72C(void) { + s16 var = BoardModelIDGet(lbl_1_data_280); + Hu3DModelLightInfoSet(var, 1); +} \ No newline at end of file From b3396d86cf2843034a59ae7734df7ad7c84c3385 Mon Sep 17 00:00:00 2001 From: M0liusX Date: Mon, 29 Jan 2024 12:33:12 -0600 Subject: [PATCH 04/14] decomp some more w02|main.c --- src/REL/w02Dll/main.c | 89 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/src/REL/w02Dll/main.c b/src/REL/w02Dll/main.c index d9c2bb9a..b1799047 100644 --- a/src/REL/w02Dll/main.c +++ b/src/REL/w02Dll/main.c @@ -1,14 +1,28 @@ #include "dolphin.h" +#include "game/process.h" +#include "game/gamework_data.h" #include "game/board/model.h" +#include "game/board/space.h" +/* Data */ s16 lbl_1_bss_30[0x10]; // Model List -/* Special Models */ +// Special Models s16 lbl_1_data_280; s16 lbl_1_data_282; s16 lbl_1_data_284; s16 lbl_1_data_286; +/* Functions */ +//Actual externs +extern void BoardMusStart(s32, s32, s32, s32); + +// Local functions +extern void fn_1_394C(s32); +extern void fn_1_39F4(); +extern void fn_1_5CF8(); +extern void fn_1_93C8(s32); +extern void fn_1_E41C(); void BoardDestroy(void) { /* Kill Model List */ @@ -43,4 +57,77 @@ void BoardDestroy(void) { void fn_1_72C(void) { s16 var = BoardModelIDGet(lbl_1_data_280); Hu3DModelLightInfoSet(var, 1); +} + +void fn_1_770(void) { + +} + +/* Decrement current space's [UNKNOWN] flag */ +void fn_1_774(void) { + u32 unkFlag; + u32 currPlayer; + u32 currSpace; + u32 spaceFlags; + currPlayer = GWSystem.player_curr; + currSpace = GWPlayer[currPlayer].space_curr; + spaceFlags = BoardSpaceFlagGet(0, currSpace); + //temp_r31 = (temp_r) + unkFlag = (spaceFlags & 0x1C0) >> 6; + if (unkFlag != 0) { + unkFlag--; + fn_1_93C8(unkFlag); + } +} + +/* Check if can iteract with board object? */ +s32 fn_1_800(void) { + BoardSpace* currSpace; + s32 currPlayer; + s32 var_r29; + + currPlayer = GWSystem.player_curr; + currSpace = BoardSpaceGet(0, GWPlayer[currPlayer].space_curr); + if ((currSpace->flag & 0x30) != 0) { + + + // If mega mushroom state return + if (BoardPlayerSizeGet(currPlayer) == 2) { + return 0; + } + // If using the bowser suit return + if (GWPlayer[currPlayer].bowser_suit) { + return 0; + } + + if ((currSpace->flag & 0x20) != 0 && (currSpace->flag & 0x10) != 0) { + var_r29 = 2; + } else if ((currSpace->flag & 0x20) != 0) { + var_r29 = 1; + } else { + var_r29 = 0; + } + fn_1_394C(var_r29); + return 1; + } + if ((currSpace->flag & 1) != 0) { + fn_1_E41C(); + return 1; + } + return 0; +} + +void fn_1_92C(void) { + fn_1_39F4(); + fn_1_5CF8(); +} + +void fn_1_950(void) { + +} + +void fn_1_954(void) { + HuPrcSleep(0x3C); + BoardMusStart(1, 0x12, 0x7F, 0); + HuPrcEnd(); } \ No newline at end of file From 373ea7d7991a2aeb237a19573479d15ebae9f7c5 Mon Sep 17 00:00:00 2001 From: M0liusX Date: Mon, 29 Jan 2024 16:36:13 -0600 Subject: [PATCH 05/14] couple more funcs for w02|main --- src/REL/w02Dll/main.c | 216 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 209 insertions(+), 7 deletions(-) diff --git a/src/REL/w02Dll/main.c b/src/REL/w02Dll/main.c index b1799047..320b9972 100644 --- a/src/REL/w02Dll/main.c +++ b/src/REL/w02Dll/main.c @@ -3,26 +3,69 @@ #include "game/gamework_data.h" #include "game/board/model.h" #include "game/board/space.h" +#include "game/board/main.h" +#include "game/board/window.h" -/* Data */ +// Temporary defines +#define MINI_MUSHROOM 0x0 +#define MEGA_MUSHROOM 0x1 +#define SUPER_MINI_MUSHROOM 0x2 +#define SUPER_MEGA_MUSHROOM 0x3 +#define MINI_MEGA_HAMMER 0x4 +#define WARP_PIPE 0x5 +#define SWAP_CARD 0x6 +#define SPARKY_STICKER 0x7 +#define GADDLIGHT 0x8 +#define CHOMP_CALL 0x9 +#define BOWSER_SUIT 0xA +#define BOOS_CRYSTAL_BALL 0xB +#define MAGIC_LAMP 0xC +#define ITEM_BAG 0xD +#define TOTAL_ITEMS 0xE +#define NO_ITEM -1 + +/* BSS */ +s16 lbl_1_bss_8[3]; // Item List s16 lbl_1_bss_30[0x10]; // Model List +/* DATA */ // Special Models s16 lbl_1_data_280; s16 lbl_1_data_282; s16 lbl_1_data_284; s16 lbl_1_data_286; +/* RODATA */ +f32 lbl_1_rodata_14; +f32 lbl_1_rodata_1C; +f32 lbl_1_rodata_20; +f32 lbl_1_rodata_24; +f32 lbl_1_rodata_28; +f32 lbl_1_rodata_2C; +f32 lbl_1_rodata_30; + + /* Functions */ //Actual externs extern void BoardMusStart(s32, s32, s32, s32); +extern void BoardAudSeqPause(s32, s32, s32); +s8 BoardComPreferItemCheck(s32, s8, s8, s8); +extern void BoardComKeySetLeft(); +extern void BoardComKeySetRight(); +extern u32 frand(); +extern u32 frandmod(u32); -// Local functions -extern void fn_1_394C(s32); -extern void fn_1_39F4(); -extern void fn_1_5CF8(); -extern void fn_1_93C8(s32); -extern void fn_1_E41C(); +// Local incomplete functions +void fn_1_394C(s32); +void fn_1_3BF4(); +void fn_1_39F4(); +void fn_1_5CF8(); +void fn_1_5D28(); +void fn_1_5F90(); +void fn_1_79BC(s16* itemList); +void fn_1_8244(s32); +void fn_1_93C8(s32 spaceFlag); +void fn_1_E41C(); void BoardDestroy(void) { /* Kill Model List */ @@ -130,4 +173,163 @@ void fn_1_954(void) { HuPrcSleep(0x3C); BoardMusStart(1, 0x12, 0x7F, 0); HuPrcEnd(); +} + +void fn_1_990(void) { + Vec rotation; + Vec offset; + Vec boardSpacePos; + + s32 textChoice; + s32 currPlayer; + s32 currSpace; + s32 spaceLinkFlag; + + + currPlayer = GWSystem.player_curr; + BoardWinCreateChoice(2, 0x130011U, 4, 0); + if (GWPlayer[currPlayer].com) { + if ((s32) (frand() & 1) != 0) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } + } + BoardWinWait(); + BoardWinKill(); + textChoice = BoardWinChoiceGet(); + if ((textChoice == 1) || (textChoice == -1)) { + BoardWinCreate(2, 0x130012U, 4); + BoardWinWait(); + BoardWinKill(); + BoardMGExit(); + while (BoardMGDoneFlagGet() != 1) { + HuPrcVSleep(); + } + BoardMGDoneFlagSet(0); + return; + } + BoardAudSeqPause(0, 1, 0x3E8); + HuPrcChildCreate(fn_1_954, 0x2003U, 0x1000U, 0, boardMainProc); + rotation.x = lbl_1_rodata_14; + rotation.y = rotation.z = lbl_1_rodata_14; + offset.y = lbl_1_rodata_1C; + offset.x = offset.z = lbl_1_rodata_14; + BoardCameraMotionStartEx(lbl_1_bss_30[8], &rotation, &offset, lbl_1_rodata_20, lbl_1_rodata_24, 0x15); + currSpace = GWPlayer[currPlayer].space_curr; + spaceLinkFlag = BoardSpaceLinkFlagSearch(0, currSpace, 0x02000000U); + BoardSpacePosGet(0, spaceLinkFlag, &boardSpacePos); + BoardPlayerMoveBetween(currPlayer, currSpace, spaceLinkFlag); + while (GWPlayer[currPlayer].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(currPlayer, 1, 0x40000001); + fn_1_3BF4(); + + while (GWPlayer[currPlayer].moving) { + HuPrcVSleep(); + } + while (BoardEventFlagGet() != 0) { + HuPrcVSleep(); + } + while (GWPlayer[currPlayer].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart(currPlayer, 1, 0x40000001); +} + +void fn_1_C50(void) { + Vec rotation; + Vec offset; + s32 currSpace; + s32 spaceLinkFlags; + s32 textChoice; + s32 currPlayer; + s32 i, j; + + currPlayer = GWSystem.player_curr; + if (BoardPlayerItemCount((s32) currPlayer) == 3) { + BoardWinCreate(2, 0x13001A, 4); + BoardWinWait(); + BoardWinKill(); + HuPrcEnd(); + } + BoardCameraTargetModelSet(lbl_1_bss_30[10]); + BoardCameraMotionWait(); + + /* Generate three random unique items where + the first item is MINI_MUSHROOM and the + other two are not BOWSER_SUIT or ITEM_BAG. + */ + lbl_1_bss_8[0] = MINI_MUSHROOM; + for (i = 1; i < 3;) { + lbl_1_bss_8[i] = frandmod(TOTAL_ITEMS); + if (lbl_1_bss_8[i] != BOWSER_SUIT && lbl_1_bss_8[i] != ITEM_BAG) { + for (j = 0; j < i; j++) { + if (lbl_1_bss_8[i] == lbl_1_bss_8[j]) { + lbl_1_bss_8[i] = NO_ITEM; + } + } + if (lbl_1_bss_8[i] != NO_ITEM) { + i++; + } + } + } + fn_1_79BC(lbl_1_bss_8); + + HuAudFXPlay(0x43); + BoardWinCreateChoice(2, 0x130016, 4, 0); + if (GWPlayer[currPlayer].com) { + if (BoardComPreferItemCheck(currPlayer, lbl_1_bss_8[0], lbl_1_bss_8[1], lbl_1_bss_8[2]) != -1) { + BoardComKeySetLeft(); + } else { + BoardComKeySetRight(); + } + } + BoardWinWait(); + BoardWinKill(); + textChoice = BoardWinChoiceGet(); + if ((textChoice == 1) || (textChoice == -1)) { + HuAudFXPlay(0x44); + BoardWinCreate(2, 0x130017, 4); + BoardWinWait(); + BoardWinKill(); + BoardMGExit(); + fn_1_8244(1); + while (BoardMGDoneFlagGet() != 1) { + HuPrcVSleep(); + } + BoardMGDoneFlagSet(0); + fn_1_5F90(); + HuPrcEnd(); + } + rotation.x = lbl_1_rodata_28; + rotation.y = rotation.z = lbl_1_rodata_14; + offset.x = lbl_1_rodata_14; + offset.y = lbl_1_rodata_14; + offset.z = lbl_1_rodata_2C; + BoardCameraMotionStartEx(lbl_1_bss_30[10], (Point3d* ) &rotation, (Point3d* ) &offset, lbl_1_rodata_30, lbl_1_rodata_24, 0x15); + currSpace = GWPlayer[currPlayer].space_curr; + spaceLinkFlags = BoardSpaceLinkFlagSearch(0, currSpace, 0x02000000U); + BoardPlayerMoveBetween(currPlayer, currSpace, spaceLinkFlags); + while (GWPlayer[currPlayer].moving) { + HuPrcVSleep(); + } + BoardPlayerMotionStart((s32) currPlayer, 1, 0x40000001); + BoardPlayerMotBlendSet(currPlayer, 0xB4, 0xF); + while (BoardPlayerMotBlendCheck(currPlayer) == 0) { + HuPrcVSleep(); + } + BoardCameraMotionWait(); + fn_1_5D28(); + while (BoardEventFlagGet() != 0) { + HuPrcVSleep(); + } + fn_1_8244(0); + while (GWPlayer[currPlayer].moving) { + HuPrcVSleep(); + } + fn_1_5F90(); + BoardPlayerMotionStart((s32) currPlayer, 1, 0x40000001); + HuPrcEnd(); } \ No newline at end of file From cfbcedb69900f25c2df2be553e81114ab078b18a Mon Sep 17 00:00:00 2001 From: M0liusX Date: Tue, 30 Jan 2024 16:20:05 -0600 Subject: [PATCH 06/14] matched w02|main.c --- src/REL/w02Dll/main.c | 284 +++++++++++++++++++++++++++++++++--------- 1 file changed, 227 insertions(+), 57 deletions(-) diff --git a/src/REL/w02Dll/main.c b/src/REL/w02Dll/main.c index 320b9972..d9b710c4 100644 --- a/src/REL/w02Dll/main.c +++ b/src/REL/w02Dll/main.c @@ -7,42 +7,90 @@ #include "game/board/window.h" // Temporary defines -#define MINI_MUSHROOM 0x0 -#define MEGA_MUSHROOM 0x1 -#define SUPER_MINI_MUSHROOM 0x2 -#define SUPER_MEGA_MUSHROOM 0x3 -#define MINI_MEGA_HAMMER 0x4 -#define WARP_PIPE 0x5 -#define SWAP_CARD 0x6 -#define SPARKY_STICKER 0x7 -#define GADDLIGHT 0x8 -#define CHOMP_CALL 0x9 -#define BOWSER_SUIT 0xA -#define BOOS_CRYSTAL_BALL 0xB -#define MAGIC_LAMP 0xC -#define ITEM_BAG 0xD -#define TOTAL_ITEMS 0xE -#define NO_ITEM -1 +#define BOARD_ITEM_MINI 0x0 +#define BOARD_ITEM_MEGA 0x1 +#define BOARD_ITEM_SUPERMINI 0x2 +#define BOARD_ITEM_SUPERMEGA 0x3 +#define BOARD_ITEM_HAMMER 0x4 +#define BOARD_ITEM_PIPE 0x5 +#define BOARD_ITEM_CARD 0x6 +#define BOARD_ITEM_SPARKY 0x7 +#define BOARD_ITEM_GADDLIGHT 0x8 +#define BOARD_ITEM_CHOMPCALL 0x9 +#define BOARD_ITEM_SUIT 0xA +#define BOARD_ITEM_BOO 0xB +#define BOARD_ITEM_LAMP 0xC +#define BOARD_ITEM_BAG 0xD +#define BOARD_ITEM_MAX 0xE +#define BOARD_ITEM_NONE -1 + +typedef struct ModelTransform { +/* 0x00 */ Vec pos; +/* 0x0C */ Vec rot; +/* 0x18 */ Vec scale; +/* 0x24 */ s32 id; +} ModelTransform; /* BSS */ -s16 lbl_1_bss_8[3]; // Item List +u8* lbl_1_bss_0; +Process* lbl_1_bss_4; +s16 lbl_1_bss_8[4]; // Item List +s32* lbl_1_bss_10; +Point3d lbl_1_bss_14; +Point3d lbl_1_bss_20; +s16 lbl_1_bss_2C; +s16 lbl_1_bss_2E; s16 lbl_1_bss_30[0x10]; // Model List /* DATA */ +ModelTransform lbl_1_data_0[0x10] = { +{{2550.0f, 0.0f, -450.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x000C)}, +{{-3150.0f, 0.0f, -1350.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x000D)}, +{{-3150.0f, 0.0f, 1650.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x000E)}, +{{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x0008)}, +{{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x0009)}, +{{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x000A)}, +{{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x000B)}, +{{1350.0f, 0.0f, -300.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x0011)}, +{{1350.0f, 0.0f, -300.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x0012)}, +{{1350.0f, 0.0f, -300.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x0015)}, +{{-300.0f, 0.0f, -900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x0016)}, +{{1175.0f, 0.0f, -125.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x0005)}, +{{-525.0f, 0.0f, -825.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x0005)}, +{{-2225.0f, 0.0f, -2100.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x0005)}, +{{1925.0f, 0.0f, -2100.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x0005)}, +{{150.0f, 0.0f, 1650.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x0005)}, +}; + // Special Models -s16 lbl_1_data_280; -s16 lbl_1_data_282; -s16 lbl_1_data_284; -s16 lbl_1_data_286; +s16 lbl_1_data_280 = -1; +s16 lbl_1_data_282 = -1; +s16 lbl_1_data_284 = -1; +s16 lbl_1_data_286 = -1; + +s32 lbl_1_data_288[] = { + MAKE_DATA_NUM(0x0076, 0x0004), + DATA_NUM_LISTEND +}; +s32 lbl_1_data_290[] = { + MAKE_DATA_NUM(0x0076, 0x0004), + MAKE_DATA_NUM(0x0076, 0x0004), + MAKE_DATA_NUM(0x0076, 0x0004), + MAKE_DATA_NUM(0x0076, 0x0004), + DATA_NUM_LISTEND, + 0x00000000 // Padding +}; /* RODATA */ -f32 lbl_1_rodata_14; -f32 lbl_1_rodata_1C; -f32 lbl_1_rodata_20; -f32 lbl_1_rodata_24; -f32 lbl_1_rodata_28; -f32 lbl_1_rodata_2C; -f32 lbl_1_rodata_30; +// f32 -1.0f; +// f32 0.1f; +// f32 0.0f; +// f32 135.0f; +// f32 1200.0f; +// f32 25.0f; +// f32 -30.0f; +// f32 -250.0f; +// f32 lbl_1_rodata_30; /* Functions */ @@ -52,20 +100,100 @@ extern void BoardAudSeqPause(s32, s32, s32); s8 BoardComPreferItemCheck(s32, s8, s8, s8); extern void BoardComKeySetLeft(); extern void BoardComKeySetRight(); +extern void CharModelDataClose(s16); extern u32 frand(); extern u32 frandmod(u32); -// Local incomplete functions -void fn_1_394C(s32); -void fn_1_3BF4(); -void fn_1_39F4(); -void fn_1_5CF8(); -void fn_1_5D28(); -void fn_1_5F90(); -void fn_1_79BC(s16* itemList); -void fn_1_8244(s32); -void fn_1_93C8(s32 spaceFlag); -void fn_1_E41C(); +// Local Functions +void fn_1_770(); +void fn_1_72C(); +s32 fn_1_774(); +s32 fn_1_800(); +void fn_1_92C(); +s32 fn_1_1128(); + +// Local Extern Functions +extern void fn_1_394C(s32); +extern void fn_1_3BF4(); +extern void fn_1_39F4(); +extern void fn_1_5CF8(); +extern void fn_1_5D28(); +extern void fn_1_5F90(); +extern void fn_1_79BC(s16* itemList); +extern void fn_1_8244(s32); +extern void fn_1_9250(); +extern void fn_1_93C8(s32 spaceFlag); +extern void fn_1_BC1C(); +extern void fn_1_E41C(); + + +// function is probably global. only inlined in rels? +inline s32 get_current_board(void) { + return GWSystem.board; +} + +void BoardCreate(void) { + s32 i, boardData; + ModelTransform* modelTransform; + + boardData = get_current_board(); + lbl_1_bss_0 = GWSystem.board_data; + BoardSpaceInit(0x760000); + lbl_1_data_280 = BoardModelCreate(0x760001, NULL, 0); + fn_8006DDE8(lbl_1_data_280, -1.0f); + BoardModelPosSet(lbl_1_data_280, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_280, 0, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_data_280, 0.1f); + lbl_1_data_282 = BoardModelCreate(0x760002, NULL, 0); + fn_8006DDE8(lbl_1_data_282, -1.0f); + BoardModelPosSet(lbl_1_data_282, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_282, 0, 0x40000001); + lbl_1_data_284 = BoardModelCreate(0x760003, lbl_1_data_288, 0); + BoardModelPosSet(lbl_1_data_284, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(lbl_1_data_284, 1, 0x40000001); + lbl_1_data_286 = BoardModelCreate(0x20005, lbl_1_data_290, 0); + BoardModelMotionStart(lbl_1_data_286, 1, 0x40000001); + BoardLightHookSet(fn_1_72C, fn_1_770); + + for(i = 0; i < 0x10; i++) { + modelTransform = &lbl_1_data_0[i]; + if (modelTransform->id != -1) { + if ((i == 0xB) || (i == 0xC) || (i == 0xD) || (i == 0xE) || (i == 0xF)) { + lbl_1_bss_10 = lbl_1_data_290; + } else { + lbl_1_bss_10 = NULL; + } + lbl_1_bss_30[i] = BoardModelCreate(modelTransform->id, lbl_1_bss_10, 0); + BoardModelPosSetV(lbl_1_bss_30[i], &modelTransform->pos); + BoardModelRotSetV(lbl_1_bss_30[i], &modelTransform->rot); + BoardModelScaleSetV(lbl_1_bss_30[i], &modelTransform->scale); + BoardModelVisibilitySet(lbl_1_bss_30[i], 1); + if (lbl_1_bss_10 != NULL) { + BoardModelMotionStart(lbl_1_bss_30[i], 1, 0x40000001); + } + } + } + + BoardModelAttrSet(lbl_1_bss_30[0], 0x40000002); + BoardModelAttrSet(lbl_1_bss_30[1], 0x40000002); + BoardModelAttrSet(lbl_1_bss_30[2], 0x40000002); + fn_1_BC1C(); + fn_1_92C(); + BoardModelPosGet(lbl_1_bss_30[13], &lbl_1_bss_20); + BoardModelPosGet(lbl_1_bss_30[14], &lbl_1_bss_14); + lbl_1_bss_2E = BoardModelCreate(0x760010, NULL, 1); + lbl_1_bss_2C = BoardModelCreate(0x760010, NULL, 1); + fn_1_9250(); + BoardSpaceWalkEventFuncSet(fn_1_800); + BoardSpaceWalkMiniEventFuncSet(fn_1_1128); + BoardSpaceLandEventFuncSet(fn_1_774); + BoardStarHostSet(lbl_1_data_284); + BoardBooHouseHostSet(lbl_1_data_286); + BoardLotteryHostSet(lbl_1_data_286); + BoardShopHostSet(lbl_1_data_286); + BoardJunctionMaskSet(0xE); + BoardJunctionMaskSet(0x30); +} void BoardDestroy(void) { /* Kill Model List */ @@ -107,7 +235,7 @@ void fn_1_770(void) { } /* Decrement current space's [UNKNOWN] flag */ -void fn_1_774(void) { +s32 fn_1_774(void) { u32 unkFlag; u32 currPlayer; u32 currSpace; @@ -211,11 +339,11 @@ void fn_1_990(void) { } BoardAudSeqPause(0, 1, 0x3E8); HuPrcChildCreate(fn_1_954, 0x2003U, 0x1000U, 0, boardMainProc); - rotation.x = lbl_1_rodata_14; - rotation.y = rotation.z = lbl_1_rodata_14; - offset.y = lbl_1_rodata_1C; - offset.x = offset.z = lbl_1_rodata_14; - BoardCameraMotionStartEx(lbl_1_bss_30[8], &rotation, &offset, lbl_1_rodata_20, lbl_1_rodata_24, 0x15); + rotation.x = 0.0f; + rotation.y = rotation.z = 0.0f; + offset.y = 135.0f; + offset.x = offset.z = 0.0f; + BoardCameraMotionStartEx(lbl_1_bss_30[8], &rotation, &offset, 1200.0f, 25.0f, 0x15); currSpace = GWPlayer[currPlayer].space_curr; spaceLinkFlag = BoardSpaceLinkFlagSearch(0, currSpace, 0x02000000U); BoardSpacePosGet(0, spaceLinkFlag, &boardSpacePos); @@ -261,16 +389,16 @@ void fn_1_C50(void) { the first item is MINI_MUSHROOM and the other two are not BOWSER_SUIT or ITEM_BAG. */ - lbl_1_bss_8[0] = MINI_MUSHROOM; + lbl_1_bss_8[0] = BOARD_ITEM_MINI; for (i = 1; i < 3;) { - lbl_1_bss_8[i] = frandmod(TOTAL_ITEMS); - if (lbl_1_bss_8[i] != BOWSER_SUIT && lbl_1_bss_8[i] != ITEM_BAG) { + lbl_1_bss_8[i] = frandmod(BOARD_ITEM_MAX); + if (lbl_1_bss_8[i] != BOARD_ITEM_SUIT && lbl_1_bss_8[i] != BOARD_ITEM_BAG) { for (j = 0; j < i; j++) { if (lbl_1_bss_8[i] == lbl_1_bss_8[j]) { - lbl_1_bss_8[i] = NO_ITEM; + lbl_1_bss_8[i] = BOARD_ITEM_NONE; } } - if (lbl_1_bss_8[i] != NO_ITEM) { + if (lbl_1_bss_8[i] != BOARD_ITEM_NONE) { i++; } } @@ -303,12 +431,12 @@ void fn_1_C50(void) { fn_1_5F90(); HuPrcEnd(); } - rotation.x = lbl_1_rodata_28; - rotation.y = rotation.z = lbl_1_rodata_14; - offset.x = lbl_1_rodata_14; - offset.y = lbl_1_rodata_14; - offset.z = lbl_1_rodata_2C; - BoardCameraMotionStartEx(lbl_1_bss_30[10], (Point3d* ) &rotation, (Point3d* ) &offset, lbl_1_rodata_30, lbl_1_rodata_24, 0x15); + rotation.x = -30.0f; + rotation.y = rotation.z = 0.0f; + offset.x = 0.0f; + offset.y = 0.0f; + offset.z = -250.0f; + BoardCameraMotionStartEx(lbl_1_bss_30[10], (Point3d* ) &rotation, (Point3d* ) &offset, 1500.0f, 25.0f, 0x15); currSpace = GWPlayer[currPlayer].space_curr; spaceLinkFlags = BoardSpaceLinkFlagSearch(0, currSpace, 0x02000000U); BoardPlayerMoveBetween(currPlayer, currSpace, spaceLinkFlags); @@ -332,4 +460,46 @@ void fn_1_C50(void) { fn_1_5F90(); BoardPlayerMotionStart((s32) currPlayer, 1, 0x40000001); HuPrcEnd(); -} \ No newline at end of file +} + +void fn_1_1070(void) { + BoardWinKill(); + CharModelDataClose(-1); + lbl_1_bss_4 = 0; +} + +void fn_1_10A8(void) { + lbl_1_bss_4 = HuPrcChildCreate(fn_1_C50, 0x2003U, 0x2000U, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_4, fn_1_1070); + while (lbl_1_bss_4) { + HuPrcVSleep(); + } +} + +s32 fn_1_1128(void) { + u32 spaceFlags; + s16 currSpace; + currSpace = GWPlayer[GWSystem.player_curr].space_curr; + spaceFlags = BoardSpaceFlagGet(0, currSpace) & 0x600000; + BoardDiceDigit2DShowSet(0); + + if (spaceFlags & 0x200000) { + fn_1_990(); + } else if (spaceFlags & 0x400000) { + lbl_1_bss_4 = HuPrcChildCreate(fn_1_C50, 0x2003U, 0x2000U, 0, boardMainProc); + HuPrcDestructorSet2(lbl_1_bss_4, fn_1_1070); + while (lbl_1_bss_4) { + HuPrcVSleep(); + } + } + + BoardDiceDigit2DShowSet(1); +} + +void fn_1_121C(u32 arg0) { + BoardWinCreate(2, arg0, 4); + BoardWinWait(); + BoardWinKill(); +} + +f32 const padMain = 0.0f; \ No newline at end of file From e76421af5cc13e5726e2b31f520f9f96a16fa351 Mon Sep 17 00:00:00 2001 From: M0liusX Date: Tue, 30 Jan 2024 16:21:01 -0600 Subject: [PATCH 07/14] remove rodata comments w02|main.c --- src/REL/w02Dll/main.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/REL/w02Dll/main.c b/src/REL/w02Dll/main.c index d9b710c4..5f132f85 100644 --- a/src/REL/w02Dll/main.c +++ b/src/REL/w02Dll/main.c @@ -81,18 +81,6 @@ s32 lbl_1_data_290[] = { 0x00000000 // Padding }; -/* RODATA */ -// f32 -1.0f; -// f32 0.1f; -// f32 0.0f; -// f32 135.0f; -// f32 1200.0f; -// f32 25.0f; -// f32 -30.0f; -// f32 -250.0f; -// f32 lbl_1_rodata_30; - - /* Functions */ //Actual externs extern void BoardMusStart(s32, s32, s32, s32); From 369307cf6b2420995cb8f530d5822ddbbed6495b Mon Sep 17 00:00:00 2001 From: M0liusX Date: Wed, 31 Jan 2024 16:17:07 -0600 Subject: [PATCH 08/14] w02 cleanup and initial w02|roulette.c --- src/REL/w02Dll/gamble.c | 6 +--- src/REL/w02Dll/main.c | 47 ++++++----------------------- src/REL/w02Dll/roulette.c | 63 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 43 deletions(-) create mode 100644 src/REL/w02Dll/roulette.c diff --git a/src/REL/w02Dll/gamble.c b/src/REL/w02Dll/gamble.c index 9a4e562c..dcb77bfa 100644 --- a/src/REL/w02Dll/gamble.c +++ b/src/REL/w02Dll/gamble.c @@ -1,12 +1,8 @@ -#include "dolphin.h" -#include "game/process.h" -#include "game/gamework_data.h" -#include "game/board/main.h" +#include "REL/w02Dll.h" Process* lbl_1_bss_50; s32 lbl_1_bss_54; - void fn_1_2D04(); diff --git a/src/REL/w02Dll/main.c b/src/REL/w02Dll/main.c index 5f132f85..424fed5c 100644 --- a/src/REL/w02Dll/main.c +++ b/src/REL/w02Dll/main.c @@ -1,10 +1,4 @@ -#include "dolphin.h" -#include "game/process.h" -#include "game/gamework_data.h" -#include "game/board/model.h" -#include "game/board/space.h" -#include "game/board/main.h" -#include "game/board/window.h" +#include "REL/w02Dll.h" // Temporary defines #define BOARD_ITEM_MINI 0x0 @@ -32,15 +26,15 @@ typedef struct ModelTransform { } ModelTransform; /* BSS */ -u8* lbl_1_bss_0; -Process* lbl_1_bss_4; -s16 lbl_1_bss_8[4]; // Item List -s32* lbl_1_bss_10; -Point3d lbl_1_bss_14; -Point3d lbl_1_bss_20; -s16 lbl_1_bss_2C; -s16 lbl_1_bss_2E; s16 lbl_1_bss_30[0x10]; // Model List +s16 lbl_1_bss_2E; +s16 lbl_1_bss_2C; +Point3d lbl_1_bss_20; +Point3d lbl_1_bss_14; +s32* lbl_1_bss_10; +s16 lbl_1_bss_8[4]; // Item List +Process* lbl_1_bss_4; +u8* lbl_1_bss_0; /* DATA */ ModelTransform lbl_1_data_0[0x10] = { @@ -92,29 +86,6 @@ extern void CharModelDataClose(s16); extern u32 frand(); extern u32 frandmod(u32); -// Local Functions -void fn_1_770(); -void fn_1_72C(); -s32 fn_1_774(); -s32 fn_1_800(); -void fn_1_92C(); -s32 fn_1_1128(); - -// Local Extern Functions -extern void fn_1_394C(s32); -extern void fn_1_3BF4(); -extern void fn_1_39F4(); -extern void fn_1_5CF8(); -extern void fn_1_5D28(); -extern void fn_1_5F90(); -extern void fn_1_79BC(s16* itemList); -extern void fn_1_8244(s32); -extern void fn_1_9250(); -extern void fn_1_93C8(s32 spaceFlag); -extern void fn_1_BC1C(); -extern void fn_1_E41C(); - - // function is probably global. only inlined in rels? inline s32 get_current_board(void) { return GWSystem.board; diff --git a/src/REL/w02Dll/roulette.c b/src/REL/w02Dll/roulette.c new file mode 100644 index 00000000..4efa5f08 --- /dev/null +++ b/src/REL/w02Dll/roulette.c @@ -0,0 +1,63 @@ +#include "REL/w02Dll.h" + + +/* RODATA */ +extern f32 lbl_1_rodata_408; +extern f32 lbl_1_rodata_40C; +extern f32 lbl_1_rodata_410; +extern f32 lbl_1_rodata_414; + +/* BSS */ +extern s16 lbl_1_bss_388; + + +/* FUNCTIONS */ +void fn_1_BC1C(void) { + Point3d sp8; + + BoardModelPosGet(lbl_1_bss_30[15], &sp8); + sp8.z -= lbl_1_rodata_408; + sp8.y += lbl_1_rodata_40C; + BoardModelPosSetV(lbl_1_bss_30[6], &sp8); + BoardModelAttrSet(lbl_1_bss_30[5], 0x40000002); + BoardModelMotionTimeSet(lbl_1_bss_30[5], lbl_1_rodata_410); + BoardModelRotGet(lbl_1_bss_30[15], &sp8); + sp8.y = lbl_1_rodata_410; + BoardModelRotSetV(lbl_1_bss_30[15], &sp8); +} + +void fn_1_BCFC(void) { + s32 spaceLinkFlags; + s32 temp_r30; + s32 temp_r29; + + BoardDiceDigit2DShowSet(0); + spaceLinkFlags = BoardSpaceLinkFlagSearch(0, (s32) GWPlayer[lbl_1_bss_388].space_curr, 2U); + BoardPlayerMoveToAsync(lbl_1_bss_388, spaceLinkFlags); + while (GWPlayer[lbl_1_bss_388].moving) { + HuPrcVSleep(); + } + BoardRotateDiceNumbers((s32) lbl_1_bss_388); + BoardCameraViewSet(2); + BoardCameraMotionWait(); + BoardPlayerMotBlendSet((s32) lbl_1_bss_388, 0x5A, 0xF); + while (BoardPlayerMotBlendCheck((s32) lbl_1_bss_388) == 0) { + HuPrcVSleep(); + } + BoardModelRotYSet(lbl_1_bss_30[15], lbl_1_rodata_414); + fn_1_121C(0x130000); + HuAudFXPlay(0x44); + temp_r29 = fn_1_BE88(); + BoardStatusShowSetAll(0); + fn_1_121C(0x130001); + temp_r30 = fn_1_C108(temp_r29); + fn_1_CD04(temp_r30); + BoardCameraViewSet(1); + BoardStatusShowSetAll(1); + BoardCameraMotionWait(); + BoardDiceDigit2DShowSet(1); + HuPrcKill(NULL); + while(TRUE) { + HuPrcVSleep(); + } +} \ No newline at end of file From 84108deeede8579374a40a62cacce4475feba41b Mon Sep 17 00:00:00 2001 From: M0liusX Date: Thu, 1 Feb 2024 16:26:46 -0600 Subject: [PATCH 09/14] more work on w02|roulette.c --- src/REL/w02Dll/main.c | 4 +- src/REL/w02Dll/roulette.c | 137 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+), 2 deletions(-) diff --git a/src/REL/w02Dll/main.c b/src/REL/w02Dll/main.c index 424fed5c..bd88f4fa 100644 --- a/src/REL/w02Dll/main.c +++ b/src/REL/w02Dll/main.c @@ -455,8 +455,8 @@ s32 fn_1_1128(void) { BoardDiceDigit2DShowSet(1); } -void fn_1_121C(u32 arg0) { - BoardWinCreate(2, arg0, 4); +void fn_1_121C(u32 mesg) { + BoardWinCreate(2, mesg, 4); BoardWinWait(); BoardWinKill(); } diff --git a/src/REL/w02Dll/roulette.c b/src/REL/w02Dll/roulette.c index 4efa5f08..2e89393a 100644 --- a/src/REL/w02Dll/roulette.c +++ b/src/REL/w02Dll/roulette.c @@ -1,14 +1,31 @@ #include "REL/w02Dll.h" +#define ROULETTE_CHOICE_YES 0 +#define ROULETTE_CHOICE_NO 1 +#define ROULETTE_CHOICE_MAP 2 + +#define BRIBE_CHOICE_20 0 +#define BRIBE_CHOICE_10 1 +#define BRIBE_CHOICE_5 2 +#define BRIBE_CHOICE_NVM 3 +#define BRIBE_CHOICE_INVALID -1 + /* RODATA */ extern f32 lbl_1_rodata_408; extern f32 lbl_1_rodata_40C; extern f32 lbl_1_rodata_410; extern f32 lbl_1_rodata_414; +extern f32 lbl_1_rodata_490; /* BSS */ +extern s32 lbl_1_bss_38C; extern s16 lbl_1_bss_388; +extern f32 lbl_1_bss_380; + +//Function Externs +extern void BoardComKeySetDown(); +extern void BoardComKeySetUp(); /* FUNCTIONS */ @@ -60,4 +77,124 @@ void fn_1_BCFC(void) { while(TRUE) { HuPrcVSleep(); } +} + +s32 fn_1_BE74(void) { + lbl_1_bss_38C = 0; +} + +s32 fn_1_BE88(void) { + s32 coinAmount; + s32 var_r30; + s16 playerCoinRegion; + s32 bribeChoice; + s32 i; + s32 rouletteChoice; + s32 mesg; + + var_r30 = -1; + coinAmount = BoardPlayerCoinsGet((s32) lbl_1_bss_388); + if (coinAmount < 5) { + return var_r30; + } + fn_1_121C(0x130002); + + do { + BoardWinCreateChoice(2, 0x13001DU, 4, 0); + /* COM has 50% to bribe goomba */ + if (GWPlayer[lbl_1_bss_388].com) { + if (frand() & 1) { + BoardComKeySetRight(); + } else { + BoardComKeySetLeft(); + } + } + BoardWinWait(); + BoardWinKill(); + rouletteChoice = BoardWinChoiceGet(); + // If chose to play roulette + if (rouletteChoice == ROULETTE_CHOICE_YES) { + BoardWinCreateChoice(1, 0x130003U, 4, 0); + playerCoinRegion = 3; + if (coinAmount < 0x14) { + BoardWinChoiceDisable(0); + playerCoinRegion--; + } + if (coinAmount < 0xA) { + BoardWinChoiceDisable(1); + playerCoinRegion--; + } + /* COM always bribes max unless it has 20 or + more coins. Then 50% max, 50% 10 coin bribe. */ + if (GWPlayer[lbl_1_bss_388].com) { + if (playerCoinRegion < 2) { + BoardComKeySetUp(); + } else if (frand() & 1) { + BoardComKeySetUp(); + } else { + BoardComKeySetDown(); + } + } + BoardWinWait(); + BoardWinKill(); + bribeChoice = BoardWinChoiceGet(); + if (bribeChoice == BRIBE_CHOICE_INVALID || + bribeChoice == BRIBE_CHOICE_NVM) { + continue; + } + + // Coin amount is now the bribe amount in coins + switch (bribeChoice) { + case BRIBE_CHOICE_20: + mesg = 0x130004; + coinAmount = 0x14; + var_r30 = 0x5A; + break; + case BRIBE_CHOICE_10: + mesg = 0x130005; + coinAmount = 0xA; + var_r30 = 0x3C; + break; + case BRIBE_CHOICE_5: + mesg = 0x130006; + coinAmount = 5; + var_r30 = 0x1E; + break; + } + fn_1_121C(mesg); + + + for (i = 0; i < coinAmount; i++) { + BoardPlayerCoinsAdd(lbl_1_bss_388, -1); + HuAudFXPlay(0xE); + HuPrcSleep(6); + } + HuAudFXPlay(0xF); + // If chose to view map + } else if (rouletteChoice == ROULETTE_CHOICE_MAP) { + BoardViewMapExec(lbl_1_bss_388); + } + } while (rouletteChoice == ROULETTE_CHOICE_MAP); // While viewing map + if (var_r30 == -1) { + fn_1_121C(0x130007); + } + return var_r30; +} + +// https://decomp.me/scratch/rctvo +// fn_1_C108 (98.34%) + +/* Rotate (yaw) of model 4 */ +void fn_1_E310(f32 degrees) { + Point3d spC; + lbl_1_bss_380 += degrees; + if (lbl_1_bss_380 >= lbl_1_rodata_490) { + lbl_1_bss_380 -= lbl_1_rodata_490; + } + if (lbl_1_bss_380 < lbl_1_rodata_410) { + lbl_1_bss_380 += lbl_1_rodata_490; + } + BoardModelRotGet(lbl_1_bss_30[4], &spC); + spC.y = lbl_1_bss_380; + BoardModelRotSetV(lbl_1_bss_30[4], &spC); } \ No newline at end of file From 530ef410d599f236f63e9dd33dbca15a4d5464be Mon Sep 17 00:00:00 2001 From: M0liusX Date: Sat, 3 Feb 2024 11:44:19 -0600 Subject: [PATCH 10/14] forgot header file --- include/REL/w02Dll.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 include/REL/w02Dll.h diff --git a/include/REL/w02Dll.h b/include/REL/w02Dll.h new file mode 100644 index 00000000..24720608 --- /dev/null +++ b/include/REL/w02Dll.h @@ -0,0 +1,41 @@ +#ifndef W02DLL +#define W02DLL + +#include "dolphin.h" +#include "game/process.h" +#include "game/gamework_data.h" +#include "game/board/model.h" +#include "game/board/space.h" +#include "game/board/main.h" +#include "game/board/window.h" + +extern s16 lbl_1_bss_30[0x10]; // Model List + + +// main.c +extern void fn_1_770(); +extern void fn_1_72C(); +extern s32 fn_1_774(); +extern s32 fn_1_800(); +extern void fn_1_92C(); +extern s32 fn_1_1128(); +extern void fn_1_121C(u32); + +// unorganized +extern void fn_1_394C(s32); +extern void fn_1_3BF4(); +extern void fn_1_39F4(); +extern void fn_1_5CF8(); +extern void fn_1_5D28(); +extern void fn_1_5F90(); +extern void fn_1_79BC(s16* itemList); +extern void fn_1_8244(s32); +extern void fn_1_9250(); +extern void fn_1_93C8(s32 spaceFlag); +extern void fn_1_BC1C(); +extern s32 fn_1_BE88(); +extern s32 fn_1_C108(s32); +extern void fn_1_CD04(s32); +extern void fn_1_E41C(); + +#endif //W02DLL \ No newline at end of file From 2a211c4826f391cde447971bc29967dcbcd4ed25 Mon Sep 17 00:00:00 2001 From: M0liusX Date: Sat, 3 Feb 2024 14:44:12 -0600 Subject: [PATCH 11/14] Add big roullete func --- include/REL/w02Dll.h | 3 +- src/REL/w02Dll/roulette.c | 257 +++++++++++++++++++++++++++++++++++++- 2 files changed, 258 insertions(+), 2 deletions(-) diff --git a/include/REL/w02Dll.h b/include/REL/w02Dll.h index 24720608..cdf8faa6 100644 --- a/include/REL/w02Dll.h +++ b/include/REL/w02Dll.h @@ -1,17 +1,18 @@ #ifndef W02DLL #define W02DLL +#include "math.h" #include "dolphin.h" #include "game/process.h" #include "game/gamework_data.h" #include "game/board/model.h" #include "game/board/space.h" #include "game/board/main.h" +#include "game/board/player.h" #include "game/board/window.h" extern s16 lbl_1_bss_30[0x10]; // Model List - // main.c extern void fn_1_770(); extern void fn_1_72C(); diff --git a/src/REL/w02Dll/roulette.c b/src/REL/w02Dll/roulette.c index 2e89393a..6803b530 100644 --- a/src/REL/w02Dll/roulette.c +++ b/src/REL/w02Dll/roulette.c @@ -16,9 +16,46 @@ extern f32 lbl_1_rodata_408; extern f32 lbl_1_rodata_40C; extern f32 lbl_1_rodata_410; extern f32 lbl_1_rodata_414; +extern f32 lbl_1_rodata_418; +extern f32 lbl_1_rodata_41C; +extern f32 lbl_1_rodata_420; +extern f32 lbl_1_rodata_424; +extern f32 lbl_1_rodata_428; +extern f32 lbl_1_rodata_42C; +extern f32 lbl_1_rodata_430; +extern f32 lbl_1_rodata_434; +extern f32 lbl_1_rodata_438; +extern f32 lbl_1_rodata_43C; +extern f32 lbl_1_rodata_440; +extern f32 lbl_1_rodata_444; +extern f32 lbl_1_rodata_448; +extern f64 lbl_1_rodata_450; +extern f64 lbl_1_rodata_458; +extern f32 lbl_1_rodata_460; +extern f32 lbl_1_rodata_464; +extern f32 lbl_1_rodata_468; +extern f32 lbl_1_rodata_46C; +extern f32 lbl_1_rodata_470; +extern f32 lbl_1_rodata_474; +extern f32 lbl_1_rodata_478; +extern f32 lbl_1_rodata_47C; +extern f64 lbl_1_rodata_480; +extern f64 lbl_1_rodata_488; extern f32 lbl_1_rodata_490; +extern f32 lbl_1_rodata_494; +extern f64 lbl_1_rodata_498; +extern f64 lbl_1_rodata_4A0; +extern f32 lbl_1_rodata_4A8; +extern f32 lbl_1_rodata_4AC; +extern f32 lbl_1_rodata_4B0; +extern f32 lbl_1_rodata_4B8; + +/* DATA */ +extern s32 lbl_1_data_4D0[]; /* BSS */ +extern s32 lbl_1_bss_384; +extern s16 lbl_1_bss_388; extern s32 lbl_1_bss_38C; extern s16 lbl_1_bss_388; extern f32 lbl_1_bss_380; @@ -26,6 +63,18 @@ extern f32 lbl_1_bss_380; //Function Externs extern void BoardComKeySetDown(); extern void BoardComKeySetUp(); +extern void omVibrate(s16 player, s16 duration, s16 off, s16 on); +extern u32 frand(); + +//Local Functions +s32 fn_1_E2AC(void); +void fn_1_E310(f32); + +// Unknown Structures +typedef struct UnkPoint { + f32 unk00; + Vec point; +} UnkPoint; /* FUNCTIONS */ @@ -182,7 +231,213 @@ s32 fn_1_BE88(void) { } // https://decomp.me/scratch/rctvo -// fn_1_C108 (98.34%) +s32 fn_1_C108(s32 arg0) { + Vec sp34; + Vec sp28; + Vec sp1C; + UnkPoint spC; + + + f32 var_f27; + f32 var_f26; + f32 var_f25; + f32 var_f28; + f32 var_f29; + f64 var_f30; + f32 var_f31; + + s32 var_r26; + s32 var_r27; + s16 var_r28; + s32 var_r30; + s32 var_r29; + s32 i; + + if ((s32) frandmod(0x64U) < arg0) { + s32 temp_r25 = fn_1_E2AC(); + var_r27 = 4; + var_r29 = frandmod(3U); + if ((s32) frandmod(0x64U) < 0x14) { + var_r29 += 1; + } + var_r29 = var_r29 + (3 - temp_r25) * 4; + } else { + var_r29 = frandmod(0x10U); + var_r27 = frandmod(4U); + } + BoardModelPosGet(lbl_1_bss_30[4], &spC.point); + BoardCameraViewSet(1); + BoardCameraMotionWait(); + var_r26 = BoardSpaceFlagSearch(0, 0x800U); + BoardCameraTargetSpaceSet(var_r26); + BoardPlayerMotBlendSet(lbl_1_bss_388, 0xB4, 0xF); + BoardModelRotGet(lbl_1_bss_30[15], &sp34); + + for (i = 0; i < 0xF; i++) { + sp34.y -= lbl_1_rodata_418; + BoardModelRotSetV(lbl_1_bss_30[15], &sp34); + HuPrcVSleep(); + } + + sp34.y = lbl_1_rodata_41C; + BoardModelRotSetV(lbl_1_bss_30[15], &sp34); + BoardCameraMotionWait(); + lbl_1_bss_384 = HuAudFXPlay(0x41D); + var_r28 = -0x1FFF; + var_f29 = lbl_1_rodata_410; + for (i = 0; i < 0x3C; i++) { + var_f29 -= lbl_1_rodata_420; + fn_1_E310(var_f29); + var_r28 = (s16) ((f32) (s16) var_r28 + lbl_1_rodata_424); + HuAudFXPitchSet(lbl_1_bss_384, var_r28); + HuPrcVSleep(); + } + + var_f29 = lbl_1_rodata_428; + HuAudFXPitchSet(lbl_1_bss_384, 0); + BoardModelMotionStart(lbl_1_bss_30[15], 2, 0x40000001); + BoardModelPosGet(lbl_1_bss_30[15], &sp34); + + for (i = 0; i < 0x1E; i++) { + sp34.z += lbl_1_rodata_42C; + BoardModelPosSetV(lbl_1_bss_30[15], &sp34); + fn_1_E310(var_f29); + HuPrcVSleep(); + } + BoardModelMotionStart(lbl_1_bss_30[15], 1, 0x40000001); + while (var_r29) { + fn_1_E310(var_f29); + HuPrcVSleep(); + var_r29 -= 1; + } + BoardModelMotionStart(lbl_1_bss_30[15], 3, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_bss_30[15], lbl_1_rodata_430); + + for (i = 0; i < 0xA; i++) { + sp34.z -= lbl_1_rodata_434; + BoardModelPosSetV(lbl_1_bss_30[15], &sp34); + fn_1_E310(var_f29); + HuPrcVSleep(); + } + BoardModelMotionStart(lbl_1_bss_30[15], 1, 0x40000001); + BoardModelMotionSpeedSet(lbl_1_bss_30[15], lbl_1_rodata_438); + HuAudFXPlay(0x41F); + HuAudFXPlay(0x42D); + omVibrate(lbl_1_bss_388, 0xC, 6, 6); + var_f31 = lbl_1_rodata_410; + var_f27 = lbl_1_rodata_43C; + sp1C.x = lbl_1_rodata_410; + sp1C.z = lbl_1_rodata_440; + + // Roulette motion and ball ? + while(TRUE) { + sp1C.y = var_f27 - (lbl_1_rodata_444 * (lbl_1_rodata_448 * (var_f31 * var_f31))); + var_f31 += lbl_1_rodata_438; + BoardModelPosGet(lbl_1_bss_30[6], &sp28); + PSVECAdd(&sp28, &sp1C, &sp28); + var_f28 = (sp28.x - spC.point.x) * (sp28.x - spC.point.x) + ((sp28.z - spC.point.z) * (sp28.z - spC.point.z)); + if (var_f28 > lbl_1_rodata_410) { + var_f30 = __frsqrte(var_f28); + var_f30 = lbl_1_rodata_450 * var_f30 * (lbl_1_rodata_458 - ((f64) var_f28 * (var_f30 * var_f30))); + var_f30 = lbl_1_rodata_450 * var_f30 * (lbl_1_rodata_458 - ((f64) var_f28 * (var_f30 * var_f30))); + var_f30 = (lbl_1_rodata_450 * var_f30 * (lbl_1_rodata_458 - (var_f28 * (var_f30 * var_f30)))); + spC.unk00 = (var_f28 * var_f30); + var_f26 = spC.unk00; + } else { + var_f26 = var_f28; + } + + var_f25 = var_f26; + if (var_f25 >= lbl_1_rodata_460) { + if (sp28.y <= (lbl_1_rodata_464 + spC.point.y)) { + PSVECSubtract(&sp28, &spC.point, (Vec* ) &sp1C); + PSVECNormalize((Vec* ) &sp1C, (Vec* ) &sp1C); + sp1C.y = lbl_1_rodata_410; + PSVECScale((Vec* ) &sp1C, (Vec* ) &sp1C, lbl_1_rodata_468); + PSVECAdd((Vec* ) &sp1C, &spC.point, (Vec* ) &sp1C); + sp28.x = sp1C.x; + sp28.z = sp1C.z; + sp1C.x = lbl_1_rodata_46C; + sp1C.z = lbl_1_rodata_470; + } + } + + if (sp28.y < spC.point.y) { + sp28.y = spC.point.y; + if (var_r27 >= 3) { + break; + } + //var_f31 = (lbl_1_rodata_474 * (lbl_1_rodata_418 * (s32) (u8) frand())); + var_f27 = lbl_1_rodata_418 + (lbl_1_rodata_474 * (lbl_1_rodata_418 * (s32) (u8) frand())); + var_f31 = lbl_1_rodata_438; + var_r27 += 1; + //var_f31 = (lbl_1_rodata_474 * (lbl_1_rodata_47C * (s32) (u8) frand())); + sp1C.x = lbl_1_rodata_478 + (lbl_1_rodata_474 * (lbl_1_rodata_47C * (s32) (u8) frand())); + sp1C.z = lbl_1_rodata_478 + (lbl_1_rodata_474 * (lbl_1_rodata_47C * (s32) (u8) frand())); + HuAudFXPlay(0x41E); + } + + BoardModelPosSetV(lbl_1_bss_30[6], (Vec* ) &sp28); + fn_1_E310(var_f29); + HuPrcVSleep(); + } + + HuAudFXPlay(0x41E); + PSVECSubtract(&sp28, &spC.point, (Vec* ) &sp1C); + PSVECNormalize((Vec* ) &sp1C, (Vec* ) &sp1C); + var_f31 = (f32) (lbl_1_rodata_480 * (atan2((f64) -sp1C.z, (f64) sp1C.x) / lbl_1_rodata_488)); + BoardModelRotGet(lbl_1_bss_30[4], &sp34); + var_f31 = var_f31 - sp34.y; + if (var_f31 < lbl_1_rodata_410) { + var_f31 += lbl_1_rodata_490; + } + var_r30 = (s32) (var_f31 / lbl_1_rodata_494); + if (fmod(var_f31, lbl_1_rodata_498) > lbl_1_rodata_4A0) { + var_r30 += 1; + } + if (var_r30 >= 0x10) { + var_r30 -= 0x10; + } + sp1C.y = lbl_1_rodata_410; + + while(TRUE) { + fn_1_E310(var_f29); + BoardModelRotGet(lbl_1_bss_30[4], &sp34); + var_f31 = (lbl_1_rodata_494 * var_r30) + sp34.y; // TODO: Update rodata for asm change + sp1C.x= cos((lbl_1_rodata_488 * var_f31) / lbl_1_rodata_480); + sp1C.z = -sin((lbl_1_rodata_488 * var_f31) / lbl_1_rodata_480); + PSVECScale(&sp1C, &sp1C, lbl_1_rodata_468); + PSVECAdd(&sp1C, &spC.point, &sp1C); + sp28.x = sp1C.x; + sp28.z = sp1C.z; + BoardModelPosSetV(lbl_1_bss_30[6], &sp28); + if (sp34.y >= lbl_1_rodata_4A8 && + sp34.y < lbl_1_rodata_4AC) { + break; + } + HuPrcVSleep(); + } + + for (i = 0; i < 0x3C; i++) { + var_f29 += lbl_1_rodata_420; + fn_1_E310(var_f29); + BoardModelRotGet(lbl_1_bss_30[4], &sp34); + var_f31 = (lbl_1_rodata_494 * (f32) var_r30) + sp34.y; // TODO: Update rodata for asm change + sp1C.x = (f32) cos((lbl_1_rodata_488 * (f64) var_f31) / lbl_1_rodata_480); + sp1C.z = (f32) -sin((lbl_1_rodata_488 * (f64) var_f31) / lbl_1_rodata_480); + PSVECScale(&sp1C, &sp1C, lbl_1_rodata_468); + PSVECAdd((Vec* ) &sp1C, &spC.point, (Vec* ) &sp1C); + sp28.x = sp1C.x; + sp28.z = sp1C.z; + BoardModelPosSetV(lbl_1_bss_30[6], (Vec* ) &sp28); + var_r28 = var_r28 + lbl_1_rodata_4B0; + HuAudFXPitchSet(lbl_1_bss_384, var_r28); + HuPrcVSleep(); + } + BoardModelRotYSet(lbl_1_bss_30[4], lbl_1_rodata_410); + HuAudFXStop(lbl_1_bss_384); + return lbl_1_data_4D0[var_r30]; +} /* Rotate (yaw) of model 4 */ void fn_1_E310(f32 degrees) { From 7e7dc99731ec3711a6868933ed8864d5bde5c2fa Mon Sep 17 00:00:00 2001 From: M0liusX Date: Sun, 4 Feb 2024 21:31:36 -0600 Subject: [PATCH 12/14] some missing bss symbols for roulette.c --- src/REL/w02Dll/roulette.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/REL/w02Dll/roulette.c b/src/REL/w02Dll/roulette.c index 6803b530..70580576 100644 --- a/src/REL/w02Dll/roulette.c +++ b/src/REL/w02Dll/roulette.c @@ -1,5 +1,5 @@ #include "REL/w02Dll.h" - +#include "game/audio.h" #define ROULETTE_CHOICE_YES 0 #define ROULETTE_CHOICE_NO 1 @@ -49,6 +49,13 @@ extern f32 lbl_1_rodata_4A8; extern f32 lbl_1_rodata_4AC; extern f32 lbl_1_rodata_4B0; extern f32 lbl_1_rodata_4B8; +extern f32 lbl_1_rodata_4C0; +extern f32 lbl_1_rodata_4C4; +extern f32 lbl_1_rodata_4C8; +extern f32 lbl_1_rodata_4CC; +extern f64 lbl_1_rodata_4D0; +extern f32 lbl_1_rodata_4D8; +extern f32 lbl_1_rodata_4DC; /* DATA */ extern s32 lbl_1_data_4D0[]; @@ -197,17 +204,17 @@ s32 fn_1_BE88(void) { case BRIBE_CHOICE_20: mesg = 0x130004; coinAmount = 0x14; - var_r30 = 0x5A; + var_r30 = 0x5A; // 90% break; case BRIBE_CHOICE_10: mesg = 0x130005; coinAmount = 0xA; - var_r30 = 0x3C; + var_r30 = 0x3C; // 60% break; case BRIBE_CHOICE_5: mesg = 0x130006; coinAmount = 5; - var_r30 = 0x1E; + var_r30 = 0x1E; // 30% break; } fn_1_121C(mesg); @@ -430,7 +437,7 @@ s32 fn_1_C108(s32 arg0) { sp28.x = sp1C.x; sp28.z = sp1C.z; BoardModelPosSetV(lbl_1_bss_30[6], (Vec* ) &sp28); - var_r28 = var_r28 + lbl_1_rodata_4B0; + var_r28 = var_r28 + lbl_1_rodata_4B0; // TODO: Weird extra rodata HuAudFXPitchSet(lbl_1_bss_384, var_r28); HuPrcVSleep(); } From 82e27e65d1e85a8963218b309ab4bc74f1d7e8f5 Mon Sep 17 00:00:00 2001 From: M0liusX Date: Mon, 5 Feb 2024 15:09:57 -0600 Subject: [PATCH 13/14] decomp w02|fn_1_CD04 --- include/REL/w02Dll.h | 4 ++ src/REL/w02Dll/roulette.c | 135 +++++++++++++++++++++++++++++++++++++- 2 files changed, 136 insertions(+), 3 deletions(-) diff --git a/include/REL/w02Dll.h b/include/REL/w02Dll.h index cdf8faa6..da02d3b5 100644 --- a/include/REL/w02Dll.h +++ b/include/REL/w02Dll.h @@ -22,6 +22,10 @@ extern void fn_1_92C(); extern s32 fn_1_1128(); extern void fn_1_121C(u32); +// roulette.c +extern void fn_1_D3AC(); +extern s32 fn_1_D8C4(); +extern void fn_1_DF48(); // unorganized extern void fn_1_394C(s32); extern void fn_1_3BF4(); diff --git a/src/REL/w02Dll/roulette.c b/src/REL/w02Dll/roulette.c index 6803b530..f50af052 100644 --- a/src/REL/w02Dll/roulette.c +++ b/src/REL/w02Dll/roulette.c @@ -49,18 +49,26 @@ extern f32 lbl_1_rodata_4A8; extern f32 lbl_1_rodata_4AC; extern f32 lbl_1_rodata_4B0; extern f32 lbl_1_rodata_4B8; +extern f32 lbl_1_rodata_4C0; +extern f32 lbl_1_rodata_4C4; +extern f32 lbl_1_rodata_4C8; +extern f32 lbl_1_rodata_4CC; +extern f64 lbl_1_rodata_4D0; +extern f32 lbl_1_rodata_4D8; +extern f32 lbl_1_rodata_4DC; /* DATA */ extern s32 lbl_1_data_4D0[]; /* BSS */ -extern s32 lbl_1_bss_384; -extern s16 lbl_1_bss_388; extern s32 lbl_1_bss_38C; extern s16 lbl_1_bss_388; +extern s32 lbl_1_bss_384; extern f32 lbl_1_bss_380; //Function Externs +extern s16 BoardBowserSuitModelGet(); +extern s16 BoardBowserSuitPlayerModelGet(); extern void BoardComKeySetDown(); extern void BoardComKeySetUp(); extern void omVibrate(s16 player, s16 duration, s16 off, s16 on); @@ -439,6 +447,127 @@ s32 fn_1_C108(s32 arg0) { return lbl_1_data_4D0[var_r30]; } +// Place player on space post roulette? +void fn_1_CD04(s32 arg0) { + Vec sp24; + Vec sp18; + Vec spC; + + f32 temp_f30; + f32 temp_f29; + f32 var_f31; + + s16 var_r25; + u32 var_r26; + s32 var_r27; + s32 var_r29; + s32 var_r28; + s32 var_r30; + BoardSpace* temp_r31; + + if (arg0 < 0) { + fn_1_D3AC(); + arg0 = fn_1_D8C4(); + } + temp_r31 = BoardSpaceGet(0, BoardSpaceFlagSearch(0, 0x800)); + + for (var_r28 = 0; var_r28 < temp_r31->link_cnt; var_r28++) { + var_r29 = temp_r31->link[var_r28]; + var_r26 = ( (BoardSpaceFlagGet(0, var_r29) & 0xE) >> 1U); + if ( var_r26 == (arg0 + 2)) { + break; + } + } + BoardSpacePosGet(0, var_r29, &sp24); + BoardModelAttrReset(lbl_1_bss_30[5], 0x40000002); + HuAudFXPlay(0x420); + if (BoardPlayerSizeGet(lbl_1_bss_388) == 2) { + while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_4C0) { + HuPrcVSleep(); + } + BoardPlayerScaleGet(lbl_1_bss_388, &spC); + + while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_4C4) { + spC.x -= lbl_1_rodata_448; + spC.y -= lbl_1_rodata_448; + //temp_f1 = spC.z; + spC.z = spC.z - lbl_1_rodata_448; + BoardPlayerScaleSetV(lbl_1_bss_388, &spC); + HuPrcVSleep(); + } + + spC.x = spC.y = spC.z = lbl_1_rodata_4C8; + BoardPlayerScaleSetV(lbl_1_bss_388, &spC); + } + + while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_4C4) { + HuPrcVSleep(); + } + if (GWPlayer[lbl_1_bss_388].bowser_suit) { + BoardModelVisibilitySet(BoardBowserSuitModelGet(), 0); + BoardModelVisibilitySet(BoardBowserSuitPlayerModelGet(), 0); + } else { + BoardModelVisibilitySet(BoardPlayerModelGet(lbl_1_bss_388), 0); + } + HuAudFXPlay(0x421); + omVibrate(lbl_1_bss_388, 0xC, 4, 2); + + while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_4CC) { + HuPrcVSleep(); + } + + BoardModelPosGet(lbl_1_bss_30[5], &sp18); + temp_f30 = (f32) ((lbl_1_rodata_480 * (atan2(sp24.x - sp18.x, sp24.z - sp18.z) / lbl_1_rodata_488)) / lbl_1_rodata_4D0); + + while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < lbl_1_rodata_408) { + BoardModelRotYSet(lbl_1_bss_30[5], temp_f30 + BoardModelRotYGet(lbl_1_bss_30[5])); + HuPrcVSleep(); + } + BoardModelRotYSet(lbl_1_bss_30[5], (f32) (lbl_1_rodata_480 * (atan2(sp24.x - sp18.x, sp24.z - sp18.z) / lbl_1_rodata_488))); + omVibrate(lbl_1_bss_388, 0xC, 4, 2); + if (GWPlayer[lbl_1_bss_388].bowser_suit) { + + BoardModelVisibilitySet(BoardBowserSuitModelGet(),1); + BoardModelVisibilitySet(BoardBowserSuitPlayerModelGet(),1); + } else { + BoardModelVisibilitySet(BoardPlayerModelGet(lbl_1_bss_388), 1); + } + GWPlayer[lbl_1_bss_388].space_curr =(s16) var_r29; + BoardPlayerPosSetV(lbl_1_bss_388, &sp24); + temp_r31 = BoardSpaceGet(0, var_r29); + + for ( var_r30 = 0; var_r30 < (s32) temp_r31->link_cnt; var_r30++) { + if (BoardSpaceTypeGet(0, temp_r31->link[var_r30])) { + break; + } + } + + if (var_r30 != (s32) temp_r31->link_cnt) { + BoardSpacePosGet(0, temp_r31->link[var_r30], &sp18); + BoardPlayerRotYSet(lbl_1_bss_388, (f32) (lbl_1_rodata_480 * (atan2(sp18.x - sp24.x, sp18.z - sp24.z) / lbl_1_rodata_488))); + } + if (BoardPlayerSizeGet(lbl_1_bss_388) == 2) { + var_f31 = spC.x; + + while (var_f31 < lbl_1_rodata_4DC) { + var_f31 += lbl_1_rodata_4D8; + if (var_f31 > lbl_1_rodata_4DC) { + var_f31 = lbl_1_rodata_4DC; + } + spC.z = var_f31; + spC.y = var_f31; + spC.x = var_f31; + BoardPlayerScaleSetV(lbl_1_bss_388, &spC); + HuPrcVSleep(); + } + } + HuAudFXPlay(0x42A); + while (BoardModelMotionTimeGet(lbl_1_bss_30[5]) < BoardModelMotionMaxTimeGet(lbl_1_bss_30[5])) { + HuPrcVSleep(); + } + HuPrcCreate(&fn_1_DF48, 0x2004, 0x1000, 0); +} + /* Rotate (yaw) of model 4 */ void fn_1_E310(f32 degrees) { Point3d spC; @@ -452,4 +581,4 @@ void fn_1_E310(f32 degrees) { BoardModelRotGet(lbl_1_bss_30[4], &spC); spC.y = lbl_1_bss_380; BoardModelRotSetV(lbl_1_bss_30[4], &spC); -} \ No newline at end of file +} From cd85761ba238fcd0d92a5d300e544d86799433b2 Mon Sep 17 00:00:00 2001 From: M0liusX Date: Mon, 1 Apr 2024 10:39:34 -0500 Subject: [PATCH 14/14] update to be compatible with past changes --- include/REL/w02Dll.h | 1 + src/REL/w02Dll/main.c | 57 +++++++++++++++++++------------------------ 2 files changed, 26 insertions(+), 32 deletions(-) diff --git a/include/REL/w02Dll.h b/include/REL/w02Dll.h index da02d3b5..bf99e873 100644 --- a/include/REL/w02Dll.h +++ b/include/REL/w02Dll.h @@ -10,6 +10,7 @@ #include "game/board/main.h" #include "game/board/player.h" #include "game/board/window.h" +#include "game/board/map_object.h" extern s16 lbl_1_bss_30[0x10]; // Model List diff --git a/src/REL/w02Dll/main.c b/src/REL/w02Dll/main.c index bd88f4fa..9981ac30 100644 --- a/src/REL/w02Dll/main.c +++ b/src/REL/w02Dll/main.c @@ -18,13 +18,6 @@ #define BOARD_ITEM_MAX 0xE #define BOARD_ITEM_NONE -1 -typedef struct ModelTransform { -/* 0x00 */ Vec pos; -/* 0x0C */ Vec rot; -/* 0x18 */ Vec scale; -/* 0x24 */ s32 id; -} ModelTransform; - /* BSS */ s16 lbl_1_bss_30[0x10]; // Model List s16 lbl_1_bss_2E; @@ -37,23 +30,23 @@ Process* lbl_1_bss_4; u8* lbl_1_bss_0; /* DATA */ -ModelTransform lbl_1_data_0[0x10] = { -{{2550.0f, 0.0f, -450.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x000C)}, -{{-3150.0f, 0.0f, -1350.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x000D)}, -{{-3150.0f, 0.0f, 1650.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x000E)}, -{{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x0008)}, -{{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x0009)}, -{{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x000A)}, -{{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x000B)}, -{{1350.0f, 0.0f, -300.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x0011)}, -{{1350.0f, 0.0f, -300.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x0012)}, -{{1350.0f, 0.0f, -300.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x0015)}, -{{-300.0f, 0.0f, -900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0076, 0x0016)}, -{{1175.0f, 0.0f, -125.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x0005)}, -{{-525.0f, 0.0f, -825.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x0005)}, -{{-2225.0f, 0.0f, -2100.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x0005)}, -{{1925.0f, 0.0f, -2100.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x0005)}, -{{150.0f, 0.0f, 1650.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, MAKE_DATA_NUM(0x0002, 0x0005)}, +static BoardMapObject lbl_1_data_0[0x10] = { + {{2550.0f, 0.0f, -450.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x000C)}, + {{-3150.0f, 0.0f, -1350.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x000D)}, + {{-3150.0f, 0.0f, 1650.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x000E)}, + {{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x0008)}, + {{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x0009)}, + {{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x000A)}, + {{-150.0f, 0.0f, 900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x000B)}, + {{1350.0f, 0.0f, -300.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x0011)}, + {{1350.0f, 0.0f, -300.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x0012)}, + {{1350.0f, 0.0f, -300.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x0015)}, + {{-300.0f, 0.0f, -900.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0076, 0x0016)}, + {{1175.0f, 0.0f, -125.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0002, 0x0005)}, + {{-525.0f, 0.0f, -825.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0002, 0x0005)}, + {{-2225.0f, 0.0f, -2100.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0002, 0x0005)}, + {{1925.0f, 0.0f, -2100.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0002, 0x0005)}, + {{150.0f, 0.0f, 1650.0f}, {0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f}, DATA_MAKE_NUM(0x0002, 0x0005)} }; // Special Models @@ -63,14 +56,14 @@ s16 lbl_1_data_284 = -1; s16 lbl_1_data_286 = -1; s32 lbl_1_data_288[] = { - MAKE_DATA_NUM(0x0076, 0x0004), + DATA_MAKE_NUM(0x0076, 0x0004), DATA_NUM_LISTEND }; s32 lbl_1_data_290[] = { - MAKE_DATA_NUM(0x0076, 0x0004), - MAKE_DATA_NUM(0x0076, 0x0004), - MAKE_DATA_NUM(0x0076, 0x0004), - MAKE_DATA_NUM(0x0076, 0x0004), + DATA_MAKE_NUM(0x0076, 0x0004), + DATA_MAKE_NUM(0x0076, 0x0004), + DATA_MAKE_NUM(0x0076, 0x0004), + DATA_MAKE_NUM(0x0076, 0x0004), DATA_NUM_LISTEND, 0x00000000 // Padding }; @@ -93,7 +86,7 @@ inline s32 get_current_board(void) { void BoardCreate(void) { s32 i, boardData; - ModelTransform* modelTransform; + BoardMapObject* modelTransform; boardData = get_current_board(); lbl_1_bss_0 = GWSystem.board_data; @@ -116,13 +109,13 @@ void BoardCreate(void) { for(i = 0; i < 0x10; i++) { modelTransform = &lbl_1_data_0[i]; - if (modelTransform->id != -1) { + if (modelTransform->data_num != -1) { if ((i == 0xB) || (i == 0xC) || (i == 0xD) || (i == 0xE) || (i == 0xF)) { lbl_1_bss_10 = lbl_1_data_290; } else { lbl_1_bss_10 = NULL; } - lbl_1_bss_30[i] = BoardModelCreate(modelTransform->id, lbl_1_bss_10, 0); + lbl_1_bss_30[i] = BoardModelCreate(modelTransform->data_num, lbl_1_bss_10, 0); BoardModelPosSetV(lbl_1_bss_30[i], &modelTransform->pos); BoardModelRotSetV(lbl_1_bss_30[i], &modelTransform->rot); BoardModelScaleSetV(lbl_1_bss_30[i], &modelTransform->scale);