Finish board/main.c
This commit is contained in:
parent
39a8ebf124
commit
44e4c89f6a
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
|
||||
last5GfxSprTbl = .data:0x80139828; // type:object size:0xC scope:local
|
||||
last5GfxPosTbl = .data:0x80139834; // type:object size:0x30 scope:local
|
||||
tauntActiveSfxTbl = .data:0x80139864; // type:object size:0x10 scope:local
|
||||
tauntSfxTbl = .data:0x80139874; // type:object size:0x24 scope:local
|
||||
tauntActiveFXTbl = .data:0x80139864; // type:object size:0x10 scope:local
|
||||
tauntFXTbl = .data:0x80139874; // type:object size:0x24 scope:local
|
||||
diceJumpObj = .data:0x80139898; // 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
|
||||
|
|
|
|||
|
|
@ -359,7 +359,7 @@ config.libs = [
|
|||
Object(Matching, "game/flag.c"),
|
||||
Object(Matching, "game/saveload.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/model.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 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)
|
||||
{
|
||||
u32 tmp;
|
||||
|
|
|
|||
|
|
@ -74,6 +74,11 @@ typedef void (*BoardCameraPosCalcFunc)(BoardCameraData *camera);
|
|||
|
||||
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 BoardKill(void);
|
||||
s32 BoardIsKill(void);
|
||||
|
|
@ -121,11 +126,14 @@ s32 BoardCameraCullCheck(Vec *point, float radius);
|
|||
s32 BoardCameraMotionIsDone(void);
|
||||
void BoardCameraMotionWait(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 BoardEventFlagReset(void);
|
||||
s32 BoardEventFlagGet(void);
|
||||
|
||||
void BoardMTXCalcLookAt(Mtx dest, Vec *eye, Vec *up, Vec *target);
|
||||
float BoardArcSin(float value);
|
||||
float BoardArcCos(float value);
|
||||
void BoardRandInit(void);
|
||||
|
|
@ -134,13 +142,21 @@ u32 BoardRandMod(u32 value);
|
|||
float BoardRandFloat(void);
|
||||
float BoardVecDistXZCalc(Vec *vec1, Vec *vec2);
|
||||
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);
|
||||
|
||||
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 BoardConfettiStop(void);
|
||||
|
||||
void BoardLast5GfxInit(void);
|
||||
|
||||
void BoardLast5GfxShowSet(s32 show);
|
||||
void BoardTauntInit(void);
|
||||
void BoardTauntKill(void);
|
||||
s32 BoardDataDirReadAsync(s32 data_num);
|
||||
void BoardDataAsyncWait(s32 status);
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ s32 BoardVecDAngleCalcRange(f32*, f32, f32);
|
|||
s32 BoardPlayerMotBlendCheck(s32);
|
||||
void BoardPlayerMotBlendSet(s32, s32, s32);
|
||||
f32 BoardPlayerRotYGet(s32);
|
||||
void BoardConfettiCreate(Point3d*, s32, f32);
|
||||
void BoardConfettiCreate(Point3d*, s16, f32);
|
||||
double atan2(double y, double x);
|
||||
void omVibrate(s16, s16, s16, s16);
|
||||
f32 BoardModelMotionTimeGet(s16);
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@
|
|||
#include "game/hsfdraw.h"
|
||||
#include "game/board/main.h"
|
||||
#include "game/board/player.h"
|
||||
#include "game/pad.h"
|
||||
#include "game/msm.h"
|
||||
|
||||
typedef struct camera_view {
|
||||
s16 x_rot;
|
||||
|
|
@ -28,8 +30,8 @@ void *boardBowserHook;
|
|||
void *boardStarShowNextHook;
|
||||
void *boardStarGiveHook;
|
||||
BoardFunc boardTurnFunc;
|
||||
BoardLightHook boardLightSetHook;
|
||||
BoardLightHook boardLightResetHook;
|
||||
BoardLightHook boardLightSetHook;
|
||||
static BoardFunc destroyFunc;
|
||||
static BoardFunc createFunc;
|
||||
static s32 cameraUseBackup;
|
||||
|
|
@ -38,8 +40,8 @@ static omObjData *cameraObj;
|
|||
Process *boardObjMan;
|
||||
Process *boardMainProc;
|
||||
|
||||
static BoardCameraData cameraBackup;
|
||||
BoardCameraData boardCamera;
|
||||
static BoardCameraData cameraBackup;
|
||||
|
||||
static OverlayID nextOvl = OVL_INVALID;
|
||||
|
||||
|
|
@ -60,21 +62,6 @@ extern void BoardMGSetupPlayClear(void);
|
|||
extern void BoardStartExec(void);
|
||||
|
||||
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 ExecBoardFunc(omObjData *object);
|
||||
|
|
@ -84,7 +71,6 @@ static void UpdateCamera(omObjData *object);
|
|||
static void CalcCameraTarget(BoardCameraData *camera);
|
||||
static void CalcCameraPos(BoardCameraData *camera);
|
||||
|
||||
|
||||
static void MainFunc(void);
|
||||
static void DestroyMainFunc(void);
|
||||
|
||||
|
|
@ -789,6 +775,11 @@ void BoardLightResetExec(void)
|
|||
Hu3DReflectNoSet(0);
|
||||
}
|
||||
|
||||
static BoardCameraData *BoardCameraGet(void)
|
||||
{
|
||||
return &boardCamera;
|
||||
}
|
||||
|
||||
void BoardCameraBackup(void)
|
||||
{
|
||||
cameraUseBackup = TRUE;
|
||||
|
|
@ -1208,7 +1199,7 @@ void BoardCameraInit(void)
|
|||
cameraObj = omAddObjEx(boardObjMan, 32258, 0, 0, -1, UpdateCamera);
|
||||
}
|
||||
|
||||
static void CalcCameraView(void)
|
||||
static inline void CalcCameraView(void)
|
||||
{
|
||||
BoardCameraData *camera = &boardCamera;
|
||||
CalcCameraTarget(camera);
|
||||
|
|
@ -1785,6 +1776,31 @@ void BoardConfettiCreate(Vec *pos, s16 count, float range)
|
|||
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)
|
||||
{
|
||||
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 {
|
||||
struct {
|
||||
u8 kill : 1;
|
||||
|
|
@ -2112,7 +2103,7 @@ static void UpdateLast5Gfx(omObjData *object)
|
|||
}
|
||||
}
|
||||
|
||||
void BoardLast5GfxShowSet(s32 visible)
|
||||
void BoardLast5GfxShowSet(s32 show)
|
||||
{
|
||||
s32 i;
|
||||
Last5GfxWork *work;
|
||||
|
|
@ -2122,7 +2113,7 @@ void BoardLast5GfxShowSet(s32 visible)
|
|||
|
||||
work = OM_GET_WORK_PTR(last5GfxObj, Last5GfxWork);
|
||||
for(i=0; i<3; i++) {
|
||||
if(visible) {
|
||||
if(show) {
|
||||
HuSprAttrReset(work->group, i, SPRITE_ATTR_HIDDEN);
|
||||
} else {
|
||||
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 status = HuDataDirReadAsync(data_num);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue