commit
6542cbde63
6 changed files with 179 additions and 55 deletions
|
|
@ -5159,8 +5159,8 @@ jumptable_801397BC = .data:0x801397BC; // type:object size:0x24 scope:local
|
||||||
confettiLightTbl = .data:0x801397E0; // type:object size:0x48 scope:local
|
confettiLightTbl = .data:0x801397E0; // type:object size:0x48 scope:local
|
||||||
last5GfxSprTbl = .data:0x80139828; // type:object size:0xC scope:local
|
last5GfxSprTbl = .data:0x80139828; // type:object size:0xC scope:local
|
||||||
last5GfxPosTbl = .data:0x80139834; // type:object size:0x30 scope:local
|
last5GfxPosTbl = .data:0x80139834; // type:object size:0x30 scope:local
|
||||||
tauntActiveSfxTbl = .data:0x80139864; // type:object size:0x10 scope:local
|
tauntActiveFXTbl = .data:0x80139864; // type:object size:0x10 scope:local
|
||||||
tauntSfxTbl = .data:0x80139874; // type:object size:0x24 scope:local
|
tauntFXTbl = .data:0x80139874; // type:object size:0x24 scope:local
|
||||||
diceJumpObj = .data:0x80139898; // type:object size:0x10 scope:local
|
diceJumpObj = .data:0x80139898; // type:object size:0x10 scope:local
|
||||||
motDoneF = .data:0x801398A8; // type:object size:0x10 scope:local
|
motDoneF = .data:0x801398A8; // type:object size:0x10 scope:local
|
||||||
bowserSuitMot = .data:0x801398B8; // type:object size:0xA scope:local data:2byte
|
bowserSuitMot = .data:0x801398B8; // type:object size:0xA scope:local data:2byte
|
||||||
|
|
|
||||||
|
|
@ -359,7 +359,7 @@ config.libs = [
|
||||||
Object(Matching, "game/flag.c"),
|
Object(Matching, "game/flag.c"),
|
||||||
Object(Matching, "game/saveload.c"),
|
Object(Matching, "game/saveload.c"),
|
||||||
Object(NonMatching, "game/sreset.c"),
|
Object(NonMatching, "game/sreset.c"),
|
||||||
Object(NonMatching, "game/board/main.c"),
|
Object(Matching, "game/board/main.c"),
|
||||||
Object(NonMatching, "game/board/player.c"),
|
Object(NonMatching, "game/board/player.c"),
|
||||||
Object(NonMatching, "game/board/model.c"),
|
Object(NonMatching, "game/board/model.c"),
|
||||||
Object(Matching, "game/board/window.c"),
|
Object(Matching, "game/board/window.c"),
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,24 @@ static inline u8 __OSf32tou8(register f32 inF)
|
||||||
|
|
||||||
static inline void OSf32tou8(f32 *f, u8 *out) { *out = __OSf32tou8(*f); }
|
static inline void OSf32tou8(f32 *f, u8 *out) { *out = __OSf32tou8(*f); }
|
||||||
|
|
||||||
|
static inline s8 __OSf32tos8(register f32 inF)
|
||||||
|
{
|
||||||
|
u32 tmp;
|
||||||
|
register u32 *tmpPtr = &tmp;
|
||||||
|
register s8 out;
|
||||||
|
// clang-format off
|
||||||
|
asm {
|
||||||
|
psq_st inF, 0(tmpPtr), 0x1, OS_FASTCAST_S8
|
||||||
|
lbz out, 0(tmpPtr)
|
||||||
|
extsb out, out //HACK to match fast cast inlines
|
||||||
|
}
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void OSf32tos8(f32 *f, s8 *out) { *out = __OSf32tos8(*f); }
|
||||||
|
|
||||||
static inline u16 __OSf32tou16(register f32 inF)
|
static inline u16 __OSf32tou16(register f32 inF)
|
||||||
{
|
{
|
||||||
u32 tmp;
|
u32 tmp;
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,11 @@ typedef void (*BoardCameraPosCalcFunc)(BoardCameraData *camera);
|
||||||
|
|
||||||
typedef void (*BoardTurnStartHook)(s32 player, s32 space);
|
typedef void (*BoardTurnStartHook)(s32 player, s32 space);
|
||||||
|
|
||||||
|
extern BoardTurnStartHook boardTurnStartFunc;
|
||||||
|
extern BoardFunc boardTurnFunc;
|
||||||
|
extern BoardLightHook boardLightResetHook;
|
||||||
|
extern BoardLightHook boardLightSetHook;
|
||||||
|
|
||||||
void BoardCommonInit(BoardFunc create, BoardFunc destroy);
|
void BoardCommonInit(BoardFunc create, BoardFunc destroy);
|
||||||
void BoardKill(void);
|
void BoardKill(void);
|
||||||
s32 BoardIsKill(void);
|
s32 BoardIsKill(void);
|
||||||
|
|
@ -121,11 +126,14 @@ s32 BoardCameraCullCheck(Vec *point, float radius);
|
||||||
s32 BoardCameraMotionIsDone(void);
|
s32 BoardCameraMotionIsDone(void);
|
||||||
void BoardCameraMotionWait(void);
|
void BoardCameraMotionWait(void);
|
||||||
void BoardCameraInit(void);
|
void BoardCameraInit(void);
|
||||||
void BoardMGCreate(s32 param);
|
void BoardMGDoneFlagSet(s32 flag);
|
||||||
|
s32 BoardMGDoneFlagGet();
|
||||||
|
void BoardMGExit(void);
|
||||||
|
void BoardMGCreate(s32 arg0);
|
||||||
void BoardEventFlagSet(void);
|
void BoardEventFlagSet(void);
|
||||||
void BoardEventFlagReset(void);
|
void BoardEventFlagReset(void);
|
||||||
s32 BoardEventFlagGet(void);
|
s32 BoardEventFlagGet(void);
|
||||||
|
void BoardMTXCalcLookAt(Mtx dest, Vec *eye, Vec *up, Vec *target);
|
||||||
float BoardArcSin(float value);
|
float BoardArcSin(float value);
|
||||||
float BoardArcCos(float value);
|
float BoardArcCos(float value);
|
||||||
void BoardRandInit(void);
|
void BoardRandInit(void);
|
||||||
|
|
@ -134,13 +142,21 @@ u32 BoardRandMod(u32 value);
|
||||||
float BoardRandFloat(void);
|
float BoardRandFloat(void);
|
||||||
float BoardVecDistXZCalc(Vec *vec1, Vec *vec2);
|
float BoardVecDistXZCalc(Vec *vec1, Vec *vec2);
|
||||||
s32 BoardVecMaxDistXZCheck(Vec *vec1, Vec *vec2, float max_dist);
|
s32 BoardVecMaxDistXZCheck(Vec *vec1, Vec *vec2, float max_dist);
|
||||||
|
void BoardVecDAngleCalcVec(Vec *vec1);
|
||||||
|
float BoardVecDAngleCalc(float value);
|
||||||
|
s32 BoardVecDAngleCalcRange(float *value, float min, float range);
|
||||||
s32 BoardVecMinDistCheck(Vec *vec1, Vec *vec2, float min_dist);
|
s32 BoardVecMinDistCheck(Vec *vec1, Vec *vec2, float min_dist);
|
||||||
|
void BoardFilterFadeOut(s16 len);
|
||||||
|
void BoardFilterFadeInit(s16 len, u8 max_alpha);
|
||||||
|
s32 BoardFilterFadePauseCheck(void);
|
||||||
|
s32 BoardFilterFadeCheck(void);
|
||||||
|
void BoardConfettiCreate(Vec *pos, s16 count, float range);
|
||||||
void BoardConfettiKill(void);
|
void BoardConfettiKill(void);
|
||||||
void BoardConfettiStop(void);
|
void BoardConfettiStop(void);
|
||||||
|
|
||||||
void BoardLast5GfxInit(void);
|
void BoardLast5GfxInit(void);
|
||||||
|
void BoardLast5GfxShowSet(s32 show);
|
||||||
|
void BoardTauntInit(void);
|
||||||
|
void BoardTauntKill(void);
|
||||||
s32 BoardDataDirReadAsync(s32 data_num);
|
s32 BoardDataDirReadAsync(s32 data_num);
|
||||||
void BoardDataAsyncWait(s32 status);
|
void BoardDataAsyncWait(s32 status);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ s32 BoardVecDAngleCalcRange(f32*, f32, f32);
|
||||||
s32 BoardPlayerMotBlendCheck(s32);
|
s32 BoardPlayerMotBlendCheck(s32);
|
||||||
void BoardPlayerMotBlendSet(s32, s32, s32);
|
void BoardPlayerMotBlendSet(s32, s32, s32);
|
||||||
f32 BoardPlayerRotYGet(s32);
|
f32 BoardPlayerRotYGet(s32);
|
||||||
void BoardConfettiCreate(Point3d*, s32, f32);
|
void BoardConfettiCreate(Point3d*, s16, f32);
|
||||||
double atan2(double y, double x);
|
double atan2(double y, double x);
|
||||||
void omVibrate(s16, s16, s16, s16);
|
void omVibrate(s16, s16, s16, s16);
|
||||||
f32 BoardModelMotionTimeGet(s16);
|
f32 BoardModelMotionTimeGet(s16);
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,8 @@
|
||||||
#include "game/hsfdraw.h"
|
#include "game/hsfdraw.h"
|
||||||
#include "game/board/main.h"
|
#include "game/board/main.h"
|
||||||
#include "game/board/player.h"
|
#include "game/board/player.h"
|
||||||
|
#include "game/pad.h"
|
||||||
|
#include "game/msm.h"
|
||||||
|
|
||||||
typedef struct camera_view {
|
typedef struct camera_view {
|
||||||
s16 x_rot;
|
s16 x_rot;
|
||||||
|
|
@ -28,8 +30,8 @@ void *boardBowserHook;
|
||||||
void *boardStarShowNextHook;
|
void *boardStarShowNextHook;
|
||||||
void *boardStarGiveHook;
|
void *boardStarGiveHook;
|
||||||
BoardFunc boardTurnFunc;
|
BoardFunc boardTurnFunc;
|
||||||
BoardLightHook boardLightSetHook;
|
|
||||||
BoardLightHook boardLightResetHook;
|
BoardLightHook boardLightResetHook;
|
||||||
|
BoardLightHook boardLightSetHook;
|
||||||
static BoardFunc destroyFunc;
|
static BoardFunc destroyFunc;
|
||||||
static BoardFunc createFunc;
|
static BoardFunc createFunc;
|
||||||
static s32 cameraUseBackup;
|
static s32 cameraUseBackup;
|
||||||
|
|
@ -38,8 +40,8 @@ static omObjData *cameraObj;
|
||||||
Process *boardObjMan;
|
Process *boardObjMan;
|
||||||
Process *boardMainProc;
|
Process *boardMainProc;
|
||||||
|
|
||||||
static BoardCameraData cameraBackup;
|
|
||||||
BoardCameraData boardCamera;
|
BoardCameraData boardCamera;
|
||||||
|
static BoardCameraData cameraBackup;
|
||||||
|
|
||||||
static OverlayID nextOvl = OVL_INVALID;
|
static OverlayID nextOvl = OVL_INVALID;
|
||||||
|
|
||||||
|
|
@ -60,21 +62,6 @@ extern void BoardMGSetupPlayClear(void);
|
||||||
extern void BoardStartExec(void);
|
extern void BoardStartExec(void);
|
||||||
|
|
||||||
extern s8 boardTutorialF;
|
extern s8 boardTutorialF;
|
||||||
extern s16 boardPlayerMdl[4];
|
|
||||||
|
|
||||||
void BoardKill(void);
|
|
||||||
s32 BoardTurnNext(void);
|
|
||||||
void BoardCameraInit(void);
|
|
||||||
void BoardCameraMotionWait(void);
|
|
||||||
void BoardCameraTargetPlayerSet(s32 player);
|
|
||||||
void BoardCameraViewSet(s32 type);
|
|
||||||
void BoardCameraOffsetSet(float x, float y, float z);
|
|
||||||
void BoardCameraMoveSet(s32 move);
|
|
||||||
void BoardCameraMotionStartEx(s16 model_target, Vec *rot_target, Vec *offset_end, float zoom_target, float fov_target, s16 max_time);
|
|
||||||
void BoardRandInit(void);
|
|
||||||
float BoardRandFloat(void);
|
|
||||||
s32 BoardDataDirReadAsync(s32 data_num);
|
|
||||||
void BoardDataAsyncWait(s32 status);
|
|
||||||
|
|
||||||
static void InitBoardFunc(omObjData *object);
|
static void InitBoardFunc(omObjData *object);
|
||||||
static void ExecBoardFunc(omObjData *object);
|
static void ExecBoardFunc(omObjData *object);
|
||||||
|
|
@ -84,7 +71,6 @@ static void UpdateCamera(omObjData *object);
|
||||||
static void CalcCameraTarget(BoardCameraData *camera);
|
static void CalcCameraTarget(BoardCameraData *camera);
|
||||||
static void CalcCameraPos(BoardCameraData *camera);
|
static void CalcCameraPos(BoardCameraData *camera);
|
||||||
|
|
||||||
|
|
||||||
static void MainFunc(void);
|
static void MainFunc(void);
|
||||||
static void DestroyMainFunc(void);
|
static void DestroyMainFunc(void);
|
||||||
|
|
||||||
|
|
@ -789,6 +775,11 @@ void BoardLightResetExec(void)
|
||||||
Hu3DReflectNoSet(0);
|
Hu3DReflectNoSet(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BoardCameraData *BoardCameraGet(void)
|
||||||
|
{
|
||||||
|
return &boardCamera;
|
||||||
|
}
|
||||||
|
|
||||||
void BoardCameraBackup(void)
|
void BoardCameraBackup(void)
|
||||||
{
|
{
|
||||||
cameraUseBackup = TRUE;
|
cameraUseBackup = TRUE;
|
||||||
|
|
@ -1208,7 +1199,7 @@ void BoardCameraInit(void)
|
||||||
cameraObj = omAddObjEx(boardObjMan, 32258, 0, 0, -1, UpdateCamera);
|
cameraObj = omAddObjEx(boardObjMan, 32258, 0, 0, -1, UpdateCamera);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CalcCameraView(void)
|
static inline void CalcCameraView(void)
|
||||||
{
|
{
|
||||||
BoardCameraData *camera = &boardCamera;
|
BoardCameraData *camera = &boardCamera;
|
||||||
CalcCameraTarget(camera);
|
CalcCameraTarget(camera);
|
||||||
|
|
@ -1785,6 +1776,31 @@ void BoardConfettiCreate(Vec *pos, s16 count, float range)
|
||||||
HuAudFXPlay(774);
|
HuAudFXPlay(774);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BoardConfettiKill(void)
|
||||||
|
{
|
||||||
|
if(confettiObj) {
|
||||||
|
OM_GET_WORK_PTR(confettiObj, ConfettiWork)->kill = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BoardConfettiStop(void)
|
||||||
|
{
|
||||||
|
if(confettiObj) {
|
||||||
|
s32 i;
|
||||||
|
ConfettiParticle *particle;
|
||||||
|
ConfettiWork *work = OM_GET_WORK_PTR(confettiObj, ConfettiWork);
|
||||||
|
work->paused = 1;
|
||||||
|
particle = work->data;
|
||||||
|
for(i=0; i<work->count; i++, particle++) {
|
||||||
|
if(particle->time != -1) {
|
||||||
|
if(particle->time > 16) {
|
||||||
|
particle->time = 16;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void UpdateConfetti(omObjData *object)
|
static void UpdateConfetti(omObjData *object)
|
||||||
{
|
{
|
||||||
ConfettiWork *work = OM_GET_WORK_PTR(object, ConfettiWork);
|
ConfettiWork *work = OM_GET_WORK_PTR(object, ConfettiWork);
|
||||||
|
|
@ -1934,31 +1950,6 @@ static void DrawConfetti(ModelData *model, Mtx matrix)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BoardConfettiKill(void)
|
|
||||||
{
|
|
||||||
if(confettiObj) {
|
|
||||||
OM_GET_WORK_PTR(confettiObj, ConfettiWork)->kill = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void BoardConfettiStop(void)
|
|
||||||
{
|
|
||||||
if(confettiObj) {
|
|
||||||
s32 i;
|
|
||||||
ConfettiParticle *particle;
|
|
||||||
ConfettiWork *work = OM_GET_WORK_PTR(confettiObj, ConfettiWork);
|
|
||||||
work->paused = 1;
|
|
||||||
particle = work->data;
|
|
||||||
for(i=0; i<work->count; i++, particle++) {
|
|
||||||
if(particle->time != -1) {
|
|
||||||
if(particle->time > 16) {
|
|
||||||
particle->time = 16;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef struct last5_gfx_work {
|
typedef struct last5_gfx_work {
|
||||||
struct {
|
struct {
|
||||||
u8 kill : 1;
|
u8 kill : 1;
|
||||||
|
|
@ -2112,7 +2103,7 @@ static void UpdateLast5Gfx(omObjData *object)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BoardLast5GfxShowSet(s32 visible)
|
void BoardLast5GfxShowSet(s32 show)
|
||||||
{
|
{
|
||||||
s32 i;
|
s32 i;
|
||||||
Last5GfxWork *work;
|
Last5GfxWork *work;
|
||||||
|
|
@ -2122,7 +2113,7 @@ void BoardLast5GfxShowSet(s32 visible)
|
||||||
|
|
||||||
work = OM_GET_WORK_PTR(last5GfxObj, Last5GfxWork);
|
work = OM_GET_WORK_PTR(last5GfxObj, Last5GfxWork);
|
||||||
for(i=0; i<3; i++) {
|
for(i=0; i<3; i++) {
|
||||||
if(visible) {
|
if(show) {
|
||||||
HuSprAttrReset(work->group, i, SPRITE_ATTR_HIDDEN);
|
HuSprAttrReset(work->group, i, SPRITE_ATTR_HIDDEN);
|
||||||
} else {
|
} else {
|
||||||
HuSprAttrSet(work->group, i, SPRITE_ATTR_HIDDEN);
|
HuSprAttrSet(work->group, i, SPRITE_ATTR_HIDDEN);
|
||||||
|
|
@ -2133,6 +2124,105 @@ void BoardLast5GfxShowSet(s32 visible)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static s32 tauntActiveFXTbl[4] = { -1, -1, -1, -1 };
|
||||||
|
static s32 tauntFXTbl[8] = {
|
||||||
|
294,
|
||||||
|
358,
|
||||||
|
422,
|
||||||
|
486,
|
||||||
|
550,
|
||||||
|
614,
|
||||||
|
678,
|
||||||
|
742
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct taunt_work {
|
||||||
|
u8 kill : 1;
|
||||||
|
} TauntWork;
|
||||||
|
|
||||||
|
static void TauntUpdate(omObjData *object);
|
||||||
|
|
||||||
|
void BoardTauntInit(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
tauntObj = omAddObjEx(boardObjMan, 32258, 0, 0, -1, TauntUpdate);
|
||||||
|
for(i=0; i<4; i++) {
|
||||||
|
tauntActiveFXTbl[i] = -1;
|
||||||
|
}
|
||||||
|
_SetFlag(FLAG_ID_MAKE(1, 14));
|
||||||
|
}
|
||||||
|
|
||||||
|
void BoardTauntKill(void)
|
||||||
|
{
|
||||||
|
TauntWork *work;
|
||||||
|
if(!tauntObj) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
work = OM_GET_WORK_PTR(tauntObj, TauntWork);
|
||||||
|
work->kill = 1;
|
||||||
|
_SetFlag(FLAG_ID_MAKE(1, 14));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void TauntUpdate(omObjData *object)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
s32 port;
|
||||||
|
s32 character;
|
||||||
|
TauntWork *work;
|
||||||
|
work = OM_GET_WORK_PTR(object, TauntWork);
|
||||||
|
if(work->kill || BoardIsKill()) {
|
||||||
|
for(i=0; i<4; i++) {
|
||||||
|
if(tauntActiveFXTbl[i] >= 0) {
|
||||||
|
HuAudFXStop(tauntActiveFXTbl[i]);
|
||||||
|
tauntActiveFXTbl[i] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tauntObj = NULL;
|
||||||
|
omDelObjEx(HuPrcCurrentGet(), object);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for(i=0; i<4; i++) {
|
||||||
|
if(tauntActiveFXTbl[i] >= 0 && HuAudFXStatusGet(tauntActiveFXTbl[i]) == 0) {
|
||||||
|
tauntActiveFXTbl[i] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(BoardPauseActiveCheck()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(_CheckFlag(FLAG_ID_MAKE(1, 14))) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(WipeStatGet() != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(GWSystem.player_curr == -1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for(i=0; i<4; i++) {
|
||||||
|
|
||||||
|
if(i == GWSystem.player_curr || GWPlayer[i].com) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
port = GWPlayer[i].port & 0x3;
|
||||||
|
character = GWPlayer[i].character & 0x7;
|
||||||
|
if(tauntActiveFXTbl[port] >= 0) {
|
||||||
|
UnkMsmStruct_01 param;
|
||||||
|
float vol, pan;
|
||||||
|
vol = (64.0f*(HuPadSubStkX[port]/59.0f))+64.0f;
|
||||||
|
pan = 8191.0f*(HuPadSubStkY[port]/59.0f);
|
||||||
|
memset(¶m, 0, sizeof(UnkMsmStruct_01));
|
||||||
|
param.unk00 = 6;
|
||||||
|
OSf32tos8(&vol, ¶m.unk05);
|
||||||
|
OSf32tos16(&pan, ¶m.unk06);
|
||||||
|
msmSeSetParam(tauntActiveFXTbl[port], ¶m);
|
||||||
|
} else {
|
||||||
|
if(HuPadBtnDown[port] & PAD_TRIGGER_L) {
|
||||||
|
tauntActiveFXTbl[port] = HuAudFXPlay(tauntFXTbl[character]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
s32 BoardDataDirReadAsync(s32 data_num)
|
s32 BoardDataDirReadAsync(s32 data_num)
|
||||||
{
|
{
|
||||||
s32 status = HuDataDirReadAsync(data_num);
|
s32 status = HuDataDirReadAsync(data_num);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue