From 3611908f9b648abec8a5e4da7ecd725bb1a00604 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Thu, 25 Jan 2024 20:48:41 -0500 Subject: [PATCH] made buildable, more functions --- include/game/board/player.h | 2 + src/REL/w03Dll/mg_item.c | 3 +- src/REL/w03Dll/river.c | 14 +-- src/REL/w03Dll/statue.c | 7 +- src/game/board/basic_space.c | 2 +- src/game/board/player.c | 202 +++++++++++++++++++++++++++++++---- 6 files changed, 188 insertions(+), 42 deletions(-) diff --git a/include/game/board/player.h b/include/game/board/player.h index 73a7c180..2acc9a20 100644 --- a/include/game/board/player.h +++ b/include/game/board/player.h @@ -130,6 +130,7 @@ s32 BoardPlayerDiceJumpCheck(s32); static void DiceJumpFunc(omObjData*); void BoardRotateDiceNumbers(s32); void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2); +void UpdateDiceDigitSprite(omObjData*); //... void BoardPlayerMotBlendExec(omObjData*); s32 BoardPlayerAutoSizeGet(s32); @@ -150,5 +151,6 @@ s32 BoardPlayerMotBlendCheck(s32); void BoardPlayerMoveAwayStartCurr(s16, s32); void BoardBowserSuitMotionSetWalk(void); s16 BoardBowserSuitModelGet(void); +void UpdateDiceDigit2D(omObjData*); #endif diff --git a/src/REL/w03Dll/mg_item.c b/src/REL/w03Dll/mg_item.c index 7a32b5d2..eb1ff2a9 100644 --- a/src/REL/w03Dll/mg_item.c +++ b/src/REL/w03Dll/mg_item.c @@ -68,7 +68,6 @@ void BoardCameraQuakeSet(s32 duration, float strength); s16 MGSeqCreate(s32, ...); u8 MGSeqStatGet(s16); void omVibrate(s16, s16, s16, s16); -void BoardPlayerMotBlendSet(s32, s32, s32); f32 BoardPlayerRotYGet(s32); f32 BoardModelMotionTimeGet(s16); s32 BoardVecMinDistCheck(Vec *vec1, Vec *vec2, float min_dist); @@ -952,4 +951,4 @@ void fn_1_BE30(s32 arg0, ParticleData* arg1) { } } } -} \ No newline at end of file +} diff --git a/src/REL/w03Dll/river.c b/src/REL/w03Dll/river.c index 160e0a18..64b99a24 100644 --- a/src/REL/w03Dll/river.c +++ b/src/REL/w03Dll/river.c @@ -3,18 +3,17 @@ #include "REL/w03Dll.h" #include "board_unsplit.h" #include "game/board/main.h" +#include "game/board/player.h" double sin(double x); double cos(double x); double atan2(double y, double x); s16 BoardModelIDGet(s16 model); void Hu3DModelObjPosGet(s16 arg0, char *arg1, Vec *arg2); -void BoardPlayerMotBlendSet(s32, s32, s32); float BoardModelMotionTimeGet(s16 model); s32 BoardModelMotionShiftSet(s16 model, s32 motion, float time, float shift_time, u32 attr); void BoardPlayerPosSet(s32, f32, f32, f32); s32 BoardModelHookSet(s16 model, char *name, s16 hook); -void BoardPlayerMotionShiftSet(s32, s32, f32, f32, s32); #define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0]))) @@ -314,15 +313,6 @@ void fn_1_6B98(s32 arg0) { extern s32 lbl_1_data_368[]; extern w03State* lbl_1_bss_0; - -static inline PlayerState *BoardPlayerGet(s32 player) { - return &GWPlayer[player]; -} - -static inline s16 BoardPlayerModelGet(s32 player) { - PlayerState *player_ptr = BoardPlayerGet(player); - return boardPlayerMdl[player_ptr->player_idx]; -} void fn_1_6F9C(s32 arg0) { Vec sp20; @@ -474,4 +464,4 @@ void fn_1_77E4(s32 arg0) { BoardComKeySetRight(); } -char padRiver[] = "\0\0\0\0"; \ No newline at end of file +char padRiver[] = "\0\0\0\0"; diff --git a/src/REL/w03Dll/statue.c b/src/REL/w03Dll/statue.c index 60737d12..9b57ecf1 100644 --- a/src/REL/w03Dll/statue.c +++ b/src/REL/w03Dll/statue.c @@ -26,7 +26,6 @@ void fn_1_2A40(void); void fn_1_2B44(void); s32 BoardDAngleCalcRange(f32*, f32, f32); s32 BoardPlayerMotBlendCheck(s32); -void BoardPlayerMotBlendSet(s32, s32, s32); f32 BoardPlayerRotYGet(s32); void BoardConfettiCreate(Point3d*, s16, f32); double atan2(double y, double x); @@ -95,7 +94,7 @@ f32 lbl_1_bss_30; s8 lbl_1_bss_2C; Process* lbl_1_bss_28; -s32 fn_1_12C8(void) { +void fn_1_12C8(void) { BoardDiceDigit2DShowSet(0); lbl_1_bss_28 = HuPrcChildCreate(&fn_1_1358, 0x2003, 0x2000, 0, boardMainProc); HuPrcDestructorSet2(lbl_1_bss_28, &fn_1_152C); @@ -103,7 +102,7 @@ s32 fn_1_12C8(void) { while (lbl_1_bss_28) { HuPrcVSleep(); } - return BoardDiceDigit2DShowSet(1); + BoardDiceDigit2DShowSet(1); } void fn_1_1358(void) { @@ -648,4 +647,4 @@ void fn_1_2B44(void) { GXSetChanMatColor(GX_COLOR0A0, sp1C); } -f32 const padStatue = 0.0f; \ No newline at end of file +f32 const padStatue = 0.0f; diff --git a/src/game/board/basic_space.c b/src/game/board/basic_space.c index 58036f3c..c51bb88f 100644 --- a/src/game/board/basic_space.c +++ b/src/game/board/basic_space.c @@ -1,5 +1,6 @@ #include "game/board/basic_space.h" #include "game/board/main.h" +#include "game/board/player.h" #include "game/data.h" #include "game/flag.h" #include "game/object.h" @@ -38,7 +39,6 @@ extern void omVibrate(s16, s16, s16, s16); extern void BoardPlayerPosGet(s32, Vec*); extern void BoardModelPosGet(s16, Vec*); extern void BoardPlayerMotionEndWait(s32); -extern void BoardPlayerMotionShiftSet(s32, s32, f32, f32, s32); extern void BoardPlayerCoinsAdd(s32, s32); extern void BoardRotateDiceNumbers(s32); extern void BoardCameraMotBlendSet(s32, s16, s16); diff --git a/src/game/board/player.c b/src/game/board/player.c index 2860fa19..a2f5f0c3 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -78,36 +78,15 @@ typedef struct bitcopy { s16 unk_06[5]; } bitcopy; -typedef struct bitcopy2 { - struct { - u8 field00_bit0 : 1; - u8 field00_bit1 : 2; - u8 field00_bit3 : 1; - u8 field00_bit4 : 1; - u8 field00_bit5 : 2; - u8 field00_bit7 : 1; - }; - s8 unk_01; - s16 unk_02; - union{ - s32 unk_04; - struct { - s16 unk_04h; - s16 unk_06h; - }; - }; - f32 unk_08; - f32 unk_0C; -} bitcopy2; - static HsfMaterial *playerMatCopy[4]; static s32 (*postTurnHook[4])(); static s32 (*preTurnHook[4])(); s16 boardPlayerMdl[4]; static s16 playerMot[4]; -static s16 junctionArrowRot[4]; static s8 rollType; +static s16 junctionArrowRot[4]; +static omObjData* diceDigit2DObj; static omObjData* junctionObj; static s32 junctionMask; static s32 rollResized; @@ -1695,6 +1674,34 @@ static void PlayerPosLerpFunc(omObjData* arg0) { BoardPlayerPosSet(temp_r30, temp_f31, temp_f30, temp_f29); } +typedef struct bitcopy2 { + struct { + u8 field00_bit0 : 1; + u8 field00_bit1 : 2; + u8 field00_bit3 : 1; + u8 field00_bit4 : 1; + u8 field00_bit5 : 2; + u8 field00_bit7 : 1; + }; + s8 unk_01; + s16 unk_02; + union{ + struct { + s32 unk_04; + f32 unk_08; + f32 unk_0C; + }; + struct { + s16 unk_04h; + s16 unk_06h; + s16 unk_08h; + s16 unk_0Ah; + s16 unk_0Ch; + s16 unk_0Eh; + }; + }; +} bitcopy2; + void BoardPlayerDiceJumpStart(s32 arg0) { Point3d sp8; PlayerState* temp_r25; @@ -1884,6 +1891,155 @@ void BoardPlayerMotBlendSet(s32 arg0, s16 arg1, s16 arg2) { } } +void BoardPlayerMotBlendExec(omObjData* arg0) { + f32 sp48; + f32 var_f27; + bitcopy2* temp_r30; + + temp_r30 = (bitcopy2*) arg0->work; + if ((temp_r30->field00_bit0 != 0) || (BoardIsKill() != 0)) { + if (temp_r30->unk_04h > 0) { + BoardPlayerMotionKill(temp_r30->unk_01, temp_r30->unk_04h); + } + BoardPlayerRotYSet(temp_r30->unk_01, temp_r30->unk_08); + motDoneF[temp_r30->unk_01] = 0; + omDelObjEx(HuPrcCurrentGet(), arg0); + return; + } + if (temp_r30->unk_02-- <= 0) { + temp_r30->field00_bit0 = 1; + BoardPlayerRotYSet(temp_r30->unk_01, temp_r30->unk_08); + if (GWPlayer[temp_r30->unk_01].bowser_suit != 0) { + BoardBowserSuitMotionSetWait(); + BoardBowserSuitPlayerModelKill(); + } else { + BoardPlayerMotionStart(temp_r30->unk_01, 1, 0x40000001); + } + return; + } + var_f27 = BoardPlayerRotYGet(temp_r30->unk_01); + OSs16tof32(&temp_r30->unk_08h, &sp48); + var_f27 += temp_r30->unk_0C; + BoardPlayerRotYSet(temp_r30->unk_01, var_f27); +} + +s32 BoardPlayerMotBlendCheck(s32 arg0) { + if (motDoneF[arg0] != 0) { + return 0; + } + return 1; +} + +typedef struct bitcopy3 { + struct { + u8 field00_bit0 : 1; + u8 field00_bit1 : 1; + u8 field00_bit2 : 1; + u8 field00_bit3 : 2; + u8 field00_bit5 : 2; + u8 field00_bit7 : 1; + }; + u8 unk_01; + s8 unk_02; + s8 unk_03; + s16 unk_04; + s16 unk_06[5]; +} bitcopy3; + +void BoardDiceDigit2DInit(s32 arg0, s32 arg1) { + omObjData* temp_r3; + s32 var_r30; + bitcopy3* temp_r31; + + temp_r3 = omAddObjEx(boardObjMan, 0x105, 0, 0, -1, &UpdateDiceDigit2D); + temp_r31 = (bitcopy3*) temp_r3->work; + temp_r31->field00_bit0 = 0; + temp_r31->field00_bit1 = 1; + temp_r31->unk_01 = 0; + temp_r31->unk_02 = arg0; + if (arg1 != 0) { + temp_r31->unk_03 = 0; + } else { + temp_r31->unk_03 = 1; + } + temp_r31->unk_04 = HuSprGrpCreate(2); + + for (var_r30 = 0; var_r30 < 2; var_r30++) { + BoardSpriteCreate(0x7002B, 0x4B0, 0, &temp_r31->unk_06[var_r30]); + HuSprGrpMemberSet(temp_r31->unk_04, var_r30, temp_r31->unk_06[var_r30]); + HuSprPosSet(temp_r31->unk_04, var_r30, 288.0f, 240.0f); + HuSprAttrSet(temp_r31->unk_04, var_r30, 4); + } + diceDigit2DObj = temp_r3; +} + +void BoardDiceDigit2DUpdateEnable(s32 arg0) { + bitcopy3* temp_r31; + + if (diceDigit2DObj != 0) { + temp_r31 = (bitcopy3*) diceDigit2DObj->work; + temp_r31->field00_bit0 = 1; + } +} + +void BoardDiceDigit2DShowSet(s32 arg0) { + s32 var_r30; + bitcopy3* temp_r31; + + if (diceDigit2DObj != 0) { + temp_r31 = (bitcopy3*) diceDigit2DObj->work; + + for (var_r30 = 0; var_r30 < 2; var_r30++) { + if (arg0 != 0) { + temp_r31->field00_bit1 = 1; + if ((var_r30 == 1) && (GWPlayer[temp_r31->unk_02].roll / 10 == 0)) { + HuSprAttrSet(temp_r31->unk_04, var_r30, 4); + } else { + HuSprAttrReset(temp_r31->unk_04, var_r30, 4); + } + } else { + temp_r31->field00_bit1 = 0; + HuSprAttrSet(temp_r31->unk_04, var_r30, 4); + } + } + UpdateDiceDigitSprite(diceDigit2DObj); + } +} + +static void UpdateDiceDigitSprite(omObjData* arg0) { + f32 sp1C[2]; + s32 sp14[2]; + f32 spC[2] = { 320.0f, 256.0f }; + s32 var_r30; + s32 temp_r29; + bitcopy3* temp_r31; + + temp_r31 = (bitcopy3*) arg0->work; + temp_r29 = GWPlayer[temp_r31->unk_02].roll; + if (temp_r29 != 0) { + sp14[0] = temp_r29 % 10; + sp14[1] = temp_r29 / 10; + } else { + temp_r31->field00_bit0 = 1; + } + + for (var_r30 = 0; var_r30 < 2; var_r30++) { + if (((var_r30 == 1) && (sp14[1] == 0)) || (temp_r31->field00_bit1 == 0)) { + HuSprAttrSet(temp_r31->unk_04, var_r30, 4); + } else { + if ((sp14[1] == 0) && (var_r30 == 0)) { + sp1C[0] = 288.0f; + } else { + sp1C[0] = spC[var_r30]; + } + sp1C[1] = 176.0f; + HuSprAttrReset(temp_r31->unk_04, var_r30, 4); + HuSprBankSet(temp_r31->unk_04, var_r30, sp14[var_r30]); + HuSprPosSet(temp_r31->unk_04, var_r30, sp1C[0], sp1C[1]); + } + } +} + // ... void BoardPlayerCopyMat(s32 arg0) {