MASSIVE PlayerState update...

This commit is contained in:
CreateSource 2024-01-04 17:51:37 -05:00
parent 68008e2b52
commit dfa85ff4c2
2 changed files with 85 additions and 22 deletions

View file

@ -69,14 +69,16 @@ typedef struct player_state {
/* 0x04 */ s8 port; /* 0x04 */ s8 port;
/* 0x05 */ s8 items[3]; /* 0x05 */ s8 items[3];
/* 0x08 */ struct { /* 0x08 */ struct {
u8 color : 2; u16 color : 2;
u8 moving : 1; u16 moving : 1;
u8 field08_bit3 : 1; u16 field08_bit3 : 1;
u8 show_next : 1; u16 show_next : 1;
u8 size : 2; u16 size : 2;
u8 field08_bit7 : 3; u16 field08_bit7 : 2;
u8 rank : 1; u16 field08_bit8 : 1;
u8 bowser_suit : 1; u16 rank : 1;
u16 bowser_suit : 1;
u16 field08_bit11 : 1;
}; };
/* 0x0A */ s8 roll; /* 0x0A */ s8 roll;
/* 0x0C */ s16 space_curr; /* 0x0C */ s16 space_curr;

View file

@ -7,14 +7,23 @@ extern void BoardCameraMoveSet(s32);
extern void BoardCameraViewSet(s32); extern void BoardCameraViewSet(s32);
extern void BoardPauseEnableSet(s32); extern void BoardPauseEnableSet(s32);
extern void BoardCameraTargetPlayerSet(s32); extern void BoardCameraTargetPlayerSet(s32);
extern void BoardCameraOffsetSet(float, float, float);
extern void BoardCameraTargetModelSet(s16);
extern void BoardCameraTargetPlayerSet(s32);
//// #include "game/board/space.h" //// #include "game/board/space.h"
extern s32 BoardSpaceFlagPosGet(s32, s32, u32); extern s32 BoardSpaceFlagPosGet(s32, s32, u32);
extern void BoardSpaceDirPosGet(s32, s32, Vec*); extern void BoardSpaceDirPosGet(s32, s32, Vec*);
extern void BoardSpaceLandExec(s32, s16, s32); extern void BoardSpaceLandExec(s32, s16);
extern s32 BoardSpaceFlagGet(s32, s16);
extern s32 BoardSpaceHiddenBlockExec(s32, s16);
extern void BoardSpaceLandExec(s32, s16);
extern s32 BoardSpaceTypeGet(s32, s16);
extern s32 BoardSpaceWalkEventExec(void);
extern s32 BoardSpaceWalkExec(s32, s32);
//// #include "game/board/ui.h" //// #include "game/board/ui.h"
extern void BoardStatusHammerShowSet(s32, s32); extern void BoardStatusHammerShowSet(s32, s32);
extern void BoardYourTurnExec(s32); extern void BoardYourTurnExec(s32);
extern s8 BoardItemUseExec(s32); extern s32 BoardItemUseExec(s32);
//// #include "game/board/model.h" //// #include "game/board/model.h"
extern s16 BoardModelCreateCharacter(s32, s32, s32*, s32); extern s16 BoardModelCreateCharacter(s32, s32, s32*, s32);
extern void BoardModelExistCheck(s16, s32); extern void BoardModelExistCheck(s16, s32);
@ -115,14 +124,26 @@ s32 BoardPlayerSizeGet(s32);
s32 BoardPlayerSameTeamFind(s32); s32 BoardPlayerSameTeamFind(s32);
s32 BoardPlayerTeamFind(s32); s32 BoardPlayerTeamFind(s32);
s32 BoardPlayerRankCalc(s32); s32 BoardPlayerRankCalc(s32);
void BoardPlayerPreTurnHookSet(s32, s32 (*)());
void BoardPlayerPostTurnHookSet(s32, void (*)());
void BoardPlayerTurnExec(s32);
void BoardPlayerTurnRollExec(s32);
//... //...
s32 BoardPlayerAutoSizeGet(s32); s32 BoardPlayerAutoSizeGet(s32);
void BoardPlayerAutoSizeSet(s32, s32); void BoardPlayerAutoSizeSet(s32, s32);
void BoardPlayerCopyMat(s32); void BoardPlayerCopyMat(s32);
void BoardBowserSuitKill(s32); void BoardBowserSuitKill(s32);
void BoardPlayerTurnMoveExec(s32); void BoardPlayerTurnMoveExec(s32);
void BoardPlayerTurnRollExec(s32);
void SetRollPlayerSize(s32); void SetRollPlayerSize(s32);
void BoardDiceDigit2DUpdateEnable(s32);
void BoardPlayerMoveTo(s32, s16);
void BoardPlayerSizeRestore(s32);
void BoardPlayerZoomRestore(s32);
void BoardRotateDiceNumbers(s32);
s32 DoDebugMove(s32, s16*);
s32 DoSparkSpace(s32, s16*);
s32 ExecJunction(s32, s16*);
s32 MegaPlayerPassFunc(s32, s16);
static void (*playerMatCopy[4])(); static void (*playerMatCopy[4])();
static void (*postTurnHook[4])(); static void (*postTurnHook[4])();
@ -189,7 +210,7 @@ void BoardPlayerInit(void) {
fn_80062D90(var_r31); fn_80062D90(var_r31);
BoardPlayerSizeSet(var_r31, 0); BoardPlayerSizeSet(var_r31, 0);
GWPlayer[var_r31].color = 0; GWPlayer[var_r31].color = 0;
GWPlayer[var_r31].rank = 0; GWPlayer[var_r31].bowser_suit = 0;
GWPlayer[var_r31].field01_bit9 = 0; GWPlayer[var_r31].field01_bit9 = 0;
GWPlayer[var_r31].field08_bit3 = 0; GWPlayer[var_r31].field08_bit3 = 0;
} }
@ -226,7 +247,7 @@ void BoardPlayerModelInit(void) {
suitPlayerMdl = -1; suitPlayerMdl = -1;
if ((_CheckFlag(0x10005U) != 0) || ((_CheckFlag(0x10006U) != 0) && (temp_r4 = GWSystem.board, temp_r4 == 5))) { if ((_CheckFlag(0x10005U) != 0) || ((_CheckFlag(0x10006U) != 0) && (temp_r4 = GWSystem.board, temp_r4 == 5))) {
for (var_r31 = 0; var_r31 < 4; var_r31++) { for (var_r31 = 0; var_r31 < 4; var_r31++) {
temp_r25 = GWPlayer[var_r31].bowser_suit; temp_r25 = GWPlayer[var_r31].field08_bit11;
GWPlayer[var_r31].team = temp_r25; GWPlayer[var_r31].team = temp_r25;
GWPlayerCfg[var_r31].group = temp_r25; GWPlayerCfg[var_r31].group = temp_r25;
} }
@ -262,7 +283,7 @@ void BoardPlayerModelInit(void) {
GWPlayerCfg[var_r31].group = temp_r24; GWPlayerCfg[var_r31].group = temp_r24;
} }
GWPlayer[var_r31].show_next = 1; GWPlayer[var_r31].show_next = 1;
GWPlayer[var_r31].rank = 0; GWPlayer[var_r31].bowser_suit = 0;
BoardModelExistDupe(temp_r3, 1); BoardModelExistDupe(temp_r3, 1);
BoardModelExistCheck(temp_r3, 1); BoardModelExistCheck(temp_r3, 1);
fn_8006DDE8(temp_r3, -1.0f); fn_8006DDE8(temp_r3, -1.0f);
@ -284,8 +305,7 @@ void BoardPlayerModelKill(void) {
PlayerState* temp_r29; PlayerState* temp_r29;
for (var_r31 = 0; var_r31 < 4; var_r31++) { for (var_r31 = 0; var_r31 < 4; var_r31++) {
temp_r29 = &GWPlayer[var_r31]; temp_r30 = GetPlayer(var_r31);
temp_r30 = temp_r29;
if (boardPlayerMdl[temp_r30->player_idx] != -1) { if (boardPlayerMdl[temp_r30->player_idx] != -1) {
BoardModelKill(boardPlayerMdl[temp_r30->player_idx]); BoardModelKill(boardPlayerMdl[temp_r30->player_idx]);
boardPlayerMdl[temp_r30->player_idx] = -1; boardPlayerMdl[temp_r30->player_idx] = -1;
@ -423,7 +443,7 @@ void BoardPlayerMtxSet(s32 arg0, Mtx arg1) {
void BoardPlayerPosSetV(s32 arg0, Vec* arg1) { void BoardPlayerPosSetV(s32 arg0, Vec* arg1) {
BoardModelPosSetV(GetBoardPlayer(arg0), arg1); BoardModelPosSetV(GetBoardPlayer(arg0), arg1);
if (GWPlayer[arg0].rank != 0) { if (GWPlayer[arg0].bowser_suit != 0) {
BoardModelPosSetV(suitMdl, arg1); BoardModelPosSetV(suitMdl, arg1);
} }
} }
@ -431,7 +451,7 @@ void BoardPlayerPosSetV(s32 arg0, Vec* arg1) {
void BoardPlayerPosSet(s32 arg0, f32 arg8, f32 arg9, f32 argA) { void BoardPlayerPosSet(s32 arg0, f32 arg8, f32 arg9, f32 argA) {
BoardModelPosSet(GetBoardPlayer(arg0), arg8, arg9, argA); BoardModelPosSet(GetBoardPlayer(arg0), arg8, arg9, argA);
if (GWPlayer[arg0].rank != 0) { if (GWPlayer[arg0].bowser_suit != 0) {
BoardModelPosSet(suitMdl, arg8, arg9, argA); BoardModelPosSet(suitMdl, arg8, arg9, argA);
} }
} }
@ -443,7 +463,7 @@ void BoardPlayerPosGet(s32 arg0, Vec* arg1) {
void BoardPlayerRotSetV(s32 arg0, Vec* arg1) { void BoardPlayerRotSetV(s32 arg0, Vec* arg1) {
BoardModelRotSetV(GetBoardPlayer(arg0), arg1); BoardModelRotSetV(GetBoardPlayer(arg0), arg1);
if (GWPlayer[arg0].rank != 0) { if (GWPlayer[arg0].bowser_suit != 0) {
BoardModelRotSetV(suitMdl, arg1); BoardModelRotSetV(suitMdl, arg1);
} }
} }
@ -451,7 +471,7 @@ void BoardPlayerRotSetV(s32 arg0, Vec* arg1) {
void BoardPlayerRotSet(s32 arg0, f32 arg8, f32 arg9, f32 argA) { void BoardPlayerRotSet(s32 arg0, f32 arg8, f32 arg9, f32 argA) {
BoardModelRotSet(GetBoardPlayer(arg0), arg8, arg9, argA); BoardModelRotSet(GetBoardPlayer(arg0), arg8, arg9, argA);
if (GWPlayer[arg0].rank != 0) { if (GWPlayer[arg0].bowser_suit != 0) {
BoardModelRotSet(suitMdl, arg8, arg9, argA); BoardModelRotSet(suitMdl, arg8, arg9, argA);
} }
} }
@ -468,7 +488,7 @@ void BoardPlayerRotYSet(s32 arg0, f32 arg8) {
arg8 -= 360.0f; arg8 -= 360.0f;
} }
BoardModelRotYSet(GetBoardPlayer(arg0), arg8); BoardModelRotYSet(GetBoardPlayer(arg0), arg8);
if (GWPlayer[arg0].rank != 0) { if (GWPlayer[arg0].bowser_suit != 0) {
BoardModelRotYSet(suitMdl, arg8); BoardModelRotYSet(suitMdl, arg8);
} }
} }
@ -476,7 +496,7 @@ void BoardPlayerRotYSet(s32 arg0, f32 arg8) {
f32 BoardPlayerRotYGet(s32 arg0) { f32 BoardPlayerRotYGet(s32 arg0) {
f32 var_f31; f32 var_f31;
if (GWPlayer[arg0].rank != 0) { if (GWPlayer[arg0].bowser_suit != 0) {
var_f31 = BoardModelRotYGet(suitMdl); var_f31 = BoardModelRotYGet(suitMdl);
} else { } else {
var_f31 = BoardModelRotYGet(GetBoardPlayer(arg0)); var_f31 = BoardModelRotYGet(GetBoardPlayer(arg0));
@ -717,3 +737,44 @@ void BoardPlayerTurnExec(s32 arg0) {
} }
BoardPlayerTurnMoveExec(arg0); BoardPlayerTurnMoveExec(arg0);
} }
static inline s32 PlayerItemUseExec(s32 arg0) {
return BoardItemUseExec(arg0);
}
void BoardPlayerTurnRollExec(s32 arg0) {
s32 temp_r28;
s32 temp_r30;
GWPlayer[arg0].roll = 0;
GWPlayer[arg0].field08_bit7 = 1;
BoardPauseEnableSet(0);
do {
temp_r30 = fn_80085CC8(arg0);
switch (temp_r30) {
case -2:
BoardPauseEnableSet(1);
fn_80085EB4();
BoardCameraTargetPlayerSet(arg0);
BoardCameraMotionWait();
rollType = PlayerItemUseExec(arg0);
if (BoardRollTypeGet() == 0xC) {
_SetFlag(0x10016);
BoardSpaceLandExec(arg0, GWPlayer[arg0].space_curr);
BoardCameraMoveSet(1);
BoardCameraViewSet(2);
_ClearFlag(0x10016);
}
BoardPauseEnableSet(0);
break;
case -3:
fn_80085EB4();
fn_80072DA8(arg0);
break;
case -4:
fn_80085EB4();
fn_800729A4(arg0);
break;
}
} while (temp_r30 <= 0);
}