Finish more of board/bowser.c
Particle struct changes are also present
This commit is contained in:
parent
eeff144f1c
commit
1a019c7c11
11 changed files with 990 additions and 71 deletions
|
|
@ -3,6 +3,8 @@
|
|||
#include "game/board/player.h"
|
||||
#include "game/board/audio.h"
|
||||
#include "game/board/window.h"
|
||||
#include "game/board/ui.h"
|
||||
#include "game/hsfdraw.h"
|
||||
|
||||
#include "game/objsub.h"
|
||||
#include "game/sprite.h"
|
||||
|
|
@ -10,7 +12,19 @@
|
|||
#include "game/wipe.h"
|
||||
#include "game/gamework.h"
|
||||
|
||||
static s16 bowserSpr[11];
|
||||
#include "string.h"
|
||||
|
||||
#define ABS(x) ((x) < 0 ? -(x) : (x))
|
||||
|
||||
typedef struct bowser_event_data {
|
||||
s16 sprite[3];
|
||||
s16 delay[3];
|
||||
s16 angle[3];
|
||||
s16 group;
|
||||
s16 model;
|
||||
} BowserEventData;
|
||||
|
||||
static BowserEventData bowserEvent;
|
||||
static Vec playerPosTemp[4];
|
||||
|
||||
static s32 scareFxTbl[] = {
|
||||
|
|
@ -58,19 +72,24 @@ static void ExecBowserShuffle(void);
|
|||
static void ExecBowserRevo(void);
|
||||
static void ExecBowserSuit(void);
|
||||
|
||||
static void CreateBowserObj(void);
|
||||
static s32 CheckSuitGive(void);
|
||||
static void StartSuitGive(void);
|
||||
static void SuitGiveMain(omObjData *object);
|
||||
|
||||
static void CreateBowserObj(void);
|
||||
static void ExecBowserObj(omObjData *object);
|
||||
static void SetBowserState(s32 state);
|
||||
static s32 CheckBowserIdle(void);
|
||||
|
||||
static void CreateBowserEvent(void);
|
||||
static s32 CheckBowserEvent(void);
|
||||
static void StopBowserEvent(void);
|
||||
|
||||
static void ExecBowserEvent(omObjData *object);
|
||||
static void ConfigBowserEvent(void);
|
||||
|
||||
static void CreateMiniBowser(void);
|
||||
static s32 CheckMiniBowser(void);
|
||||
static void ExecMiniBowser(omObjData *object);
|
||||
|
||||
|
||||
static void CreatePlayerMot(void);
|
||||
|
|
@ -108,14 +127,25 @@ s32 BoardBowserExec(s32 player, s32 space)
|
|||
|
||||
typedef struct bowser_work {
|
||||
u8 kill : 1;
|
||||
u8 state : 3;
|
||||
u8 mot_active : 1;
|
||||
u8 fall_done : 1;
|
||||
u8 jump_done : 1;
|
||||
u8 jump_state;
|
||||
u8 idle_timer;
|
||||
} BowserWork;
|
||||
|
||||
typedef struct mini_bowser_work {
|
||||
u8 kill : 1;
|
||||
s16 group;
|
||||
s16 sprite;
|
||||
s16 angle;
|
||||
} MiniBowserWork;
|
||||
|
||||
typedef struct bowser_event_work {
|
||||
u8 kill : 1;
|
||||
s8 state;
|
||||
s16 timer;
|
||||
} BowserEventWork;
|
||||
|
||||
static void ExecBowser(void)
|
||||
|
|
@ -483,4 +513,890 @@ static void DoMGReturnEffect(void)
|
|||
while(!BoardStatusStopCheck(player)) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
|
||||
static void ExecBowserShuffle(void)
|
||||
{
|
||||
Vec pos;
|
||||
Vec target;
|
||||
s16 space_old[4];
|
||||
s16 space[4];
|
||||
s32 i;
|
||||
s32 player;
|
||||
s32 player_new;
|
||||
s32 reset_cam;
|
||||
BoardWinCreate(2, 0x30010, 5);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
for(i=0; i<4; i++) {
|
||||
space_old[i] = GWPlayer[i].space_curr;
|
||||
}
|
||||
player=0;
|
||||
while(player<4) {
|
||||
player_new = BoardRandMod(4);
|
||||
if(player_new == player || space_old[player_new] == -1) {
|
||||
continue;
|
||||
}
|
||||
space[player] = space_old[player_new];
|
||||
space_old[player_new] = -1;
|
||||
player++;
|
||||
}
|
||||
HuAudFXPlay(857);
|
||||
BoardModelMotionShiftSet(bowserMdl, 4, 0.0f, 10.0f, 0);
|
||||
while(!BoardModelMotionEndCheck(bowserMdl)) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
SetBowserState(3);
|
||||
HuPrcSleep(60);
|
||||
WipeColorSet(255, 255, 255);
|
||||
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1);
|
||||
while(WipeStatGet()) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
reset_cam = 0;
|
||||
for(i=0; i<4; i++) {
|
||||
GWPlayer[i].space_curr = space[i];
|
||||
if(eventSpace == space[i]) {
|
||||
BoardPlayerMotionStart(i, playerMot[i], 0);
|
||||
BoardPlayerMotionTimeSet(i, 50.0f);
|
||||
BoardPlayerMotionSpeedSet(i, 0.0f);
|
||||
reset_cam = 1;
|
||||
} else {
|
||||
BoardPlayerIdleSet(i);
|
||||
}
|
||||
BoardPlayerMoveAwayStart(i, GWPlayer[i].space_curr, 1);
|
||||
}
|
||||
if(reset_cam) {
|
||||
BoardCameraTargetGet(&target);
|
||||
BoardCameraPosGet(&pos);
|
||||
BoardCameraTargetModelSet(-1);
|
||||
BoardCameraTargetSet(target.x, target.y, target.z);
|
||||
BoardCameraPosSet(pos.x, pos.y, pos.z);
|
||||
}
|
||||
SetBowserState(4);
|
||||
HuPrcSleep(60);
|
||||
BoardModelMotionStart(bowserMdl, 1, 0x40000001);
|
||||
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1);
|
||||
while(WipeStatGet()) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
|
||||
static void ExecBowserRevo(void)
|
||||
{
|
||||
s32 i;
|
||||
s32 coin;
|
||||
BoardWinCreate(2, 0x30011, 5);
|
||||
BoardWinWait();
|
||||
BoardWinKill();
|
||||
for(coin=i=0; i<4; i++) {
|
||||
coin += BoardPlayerCoinsGet(i);
|
||||
}
|
||||
coin /= 4;
|
||||
HuAudFXPlay(857);
|
||||
BoardModelMotionShiftSet(bowserMdl, 4, 0.0f, 10.0f, 0);
|
||||
while(!BoardModelMotionEndCheck(bowserMdl)) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
SetBowserState(3);
|
||||
HuPrcSleep(60);
|
||||
WipeColorSet(255, 255, 255);
|
||||
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1);
|
||||
while(WipeStatGet()) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
SetBowserState(4);
|
||||
for(i=0; i<4; i++) {
|
||||
BoardPlayerCoinsSet(i, coin);
|
||||
}
|
||||
HuPrcSleep(60);
|
||||
BoardModelMotionStart(bowserMdl, 1, 0x40000001);
|
||||
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1);
|
||||
while(WipeStatGet()) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
|
||||
static void ExecBowserSuit(void)
|
||||
{
|
||||
BoardModelMotionShiftSet(bowserMdl, 1, 0.0f, 10.0f, 0);
|
||||
BoardWinCreate(2, 0x30012, 5);
|
||||
BoardWinWait();
|
||||
HuAudFXPlay(857);
|
||||
BoardModelMotionShiftSet(bowserMdl, 4, 0.0f, 10.0f, 0);
|
||||
HuPrcSleep(10);
|
||||
StartSuitGive();
|
||||
while(!CheckSuitGive()) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
BoardWinKill();
|
||||
BoardModelAttrSet(bowserMdl, 0x40000004);
|
||||
while(!BoardModelMotionEndCheck(bowserMdl)) {
|
||||
HuPrcVSleep();
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct suit_give_work {
|
||||
u8 kill : 1;
|
||||
u8 state;
|
||||
u8 timer;
|
||||
u8 idle_timer;
|
||||
s16 model;
|
||||
} SuitGiveWork;
|
||||
|
||||
static s32 CheckSuitGive(void)
|
||||
{
|
||||
if(!suitGiveObj) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void StartSuitGive(void)
|
||||
{
|
||||
omObjData *object;
|
||||
SuitGiveWork *work;
|
||||
Vec pos;
|
||||
object = omAddObjEx(boardObjMan, 258, 0, 0, -1, SuitGiveMain);
|
||||
suitGiveObj = object;
|
||||
work = OM_GET_WORK_PTR(suitGiveObj, SuitGiveWork);
|
||||
work->kill = 0;
|
||||
work->state = 0;
|
||||
work->idle_timer = 0;
|
||||
work->timer = 30;
|
||||
work->model = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 120), NULL, 0);
|
||||
BoardModelLayerSet(work->model, 7);
|
||||
BoardModelScaleSet(work->model, 0.16f, 0.16f, 0.16f);
|
||||
object->trans.x = 288.0f;
|
||||
object->trans.y = -64.0f;
|
||||
pos.x = 288.0f;
|
||||
pos.y = 240.0f;
|
||||
object->rot.x = (pos.x-object->trans.x)/30.0f;
|
||||
object->rot.y = (pos.y-object->trans.y)/30.0f;
|
||||
object->scale.x = 300.0f;
|
||||
pos.x = object->trans.x;
|
||||
pos.y = object->trans.y;
|
||||
pos.z = object->scale.x;
|
||||
Hu3D2Dto3D(&pos, 1, &pos);
|
||||
BoardModelPosSetV(work->model, &pos);
|
||||
}
|
||||
|
||||
static void SuitGiveMain(omObjData *object)
|
||||
{
|
||||
SuitGiveWork *work = OM_GET_WORK_PTR(object, SuitGiveWork);
|
||||
s32 effect_active;
|
||||
Vec pos;
|
||||
if(work->kill || BoardIsKill()) {
|
||||
BoardModelKill(work->model);
|
||||
suitGiveObj = NULL;
|
||||
omDelObjEx(HuPrcCurrentGet(), object);
|
||||
return;
|
||||
}
|
||||
if(work->idle_timer) {
|
||||
work->idle_timer--;
|
||||
return;
|
||||
}
|
||||
|
||||
effect_active = 0;
|
||||
switch(work->state) {
|
||||
case 0:
|
||||
if(work->timer == 0) {
|
||||
work->state = 1;
|
||||
work->idle_timer = 30;
|
||||
work->timer = 30;
|
||||
BoardStatusPosGet(eventPlayer, &pos);
|
||||
object->rot.x = (pos.x-object->trans.x)/30.0f;
|
||||
object->rot.y = (pos.y-object->trans.y)/30.0f;
|
||||
} else {
|
||||
work->timer--;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if(work->timer == 0) {
|
||||
work->state = 2;
|
||||
work->idle_timer = 6;
|
||||
effect_active = 1;
|
||||
} else {
|
||||
work->timer--;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
BoardPlayerItemAdd(eventPlayer, 10);
|
||||
BoardModelVisibilitySet(work->model, 0);
|
||||
work->kill = 1;
|
||||
return;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
object->trans.x += object->rot.x;
|
||||
object->trans.y += object->rot.y;
|
||||
pos.x = object->trans.x;
|
||||
pos.y = object->trans.y;
|
||||
pos.z = object->scale.x;
|
||||
Hu3D2Dto3D(&pos, 1, &pos);
|
||||
BoardModelPosSetV(work->model, &pos);
|
||||
if(effect_active) {
|
||||
CharModelLayerSetAll(6);
|
||||
CharModelEffectCreate(1, &pos);
|
||||
}
|
||||
}
|
||||
|
||||
static const s32 bowserMotTbl[] = {
|
||||
DATA_MAKE_NUM(DATADIR_BKOOPA, 8),
|
||||
DATA_MAKE_NUM(DATADIR_BKOOPA, 10),
|
||||
DATA_MAKE_NUM(DATADIR_BKOOPA, 11),
|
||||
DATA_MAKE_NUM(DATADIR_BKOOPA, 12),
|
||||
DATA_MAKE_NUM(DATADIR_BKOOPA, 13),
|
||||
DATA_NUM_LISTEND
|
||||
};
|
||||
|
||||
static void CreateBowserObj(void)
|
||||
{
|
||||
BowserWork *work;
|
||||
Vec pos;
|
||||
bowserObj = omAddObjEx(boardObjMan, 257, 0, 0, -1, ExecBowserObj);
|
||||
work = OM_GET_WORK_PTR(bowserObj, BowserWork);
|
||||
work->kill = 0;
|
||||
work->jump_state = 0;
|
||||
work->idle_timer = 0;
|
||||
work->mot_active = 0;
|
||||
work->fall_done = 0;
|
||||
work->jump_done = 0;
|
||||
if(!_CheckFlag(0x10003)) {
|
||||
work->state = 1;
|
||||
} else {
|
||||
work->state = 0;
|
||||
}
|
||||
bowserMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BKOOPA, 7), (s32 *)bowserMotTbl, 0);
|
||||
BoardModelVisibilitySet(bowserMdl, 0);
|
||||
BoardModelScaleSet(bowserMdl, 2.0f, 2.0f, 2.0f);
|
||||
BoardPlayerPosGet(eventPlayer, &pos);
|
||||
BoardModelLayerSet(bowserMdl, 2);
|
||||
bowserObj->trans.x = pos.x;
|
||||
bowserObj->trans.y = pos.y;
|
||||
bowserObj->trans.z = pos.z;
|
||||
if(!_CheckFlag(0x10003)) {
|
||||
suitItemMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 99), NULL, 0);
|
||||
BoardModelLayerSet(suitItemMdl, 2);
|
||||
BoardModelVisibilitySet(suitItemMdl, 0);
|
||||
} else {
|
||||
s32 space = GWPlayer[eventPlayer].space_curr;
|
||||
BoardSpacePosGet(0, space, &pos);
|
||||
bowserObj->trans.x = pos.x;
|
||||
bowserObj->trans.y = pos.y;
|
||||
bowserObj->trans.z = pos.z;
|
||||
BoardModelPosSetV(bowserMdl, &pos);
|
||||
BoardCameraTargetSpaceSet(space);
|
||||
BoardModelMotionStart(bowserMdl, 1, 0x40000001);
|
||||
BoardModelVisibilitySet(bowserMdl, 1);
|
||||
}
|
||||
}
|
||||
|
||||
static void ExecBowserFall(BowserWork *work, omObjData *object);
|
||||
static void ExecBowserLaugh(BowserWork *work, omObjData *object);
|
||||
static void ExecBowserPowerUp(BowserWork *work, omObjData *object);
|
||||
static void ExecBowserFire(BowserWork *work, omObjData *object);
|
||||
static void ExecBowserJump(BowserWork *work, omObjData *object);
|
||||
|
||||
static void ExecBowserObj(omObjData *object)
|
||||
{
|
||||
BowserWork *work = OM_GET_WORK_PTR(bowserObj, BowserWork);
|
||||
Vec pos;
|
||||
Vec rot;
|
||||
|
||||
if(work->kill || BoardIsKill()) {
|
||||
BoardModelKill(bowserMdl);
|
||||
bowserMdl = -1;
|
||||
BoardModelKill(suitItemMdl);
|
||||
suitItemMdl = -1;
|
||||
omDelObjEx(HuPrcCurrentGet(), object);
|
||||
bowserObj = NULL;
|
||||
return;
|
||||
}
|
||||
if(work->idle_timer) {
|
||||
work->idle_timer--;
|
||||
return;
|
||||
}
|
||||
if(work->mot_active && BoardModelMotionEndCheck(bowserMdl)) {
|
||||
work->mot_active = 0;
|
||||
BoardModelMotionShiftSet(bowserMdl, 1, 0.0f, 10.0f, 0x40000001);
|
||||
}
|
||||
switch(work->state) {
|
||||
case 1:
|
||||
ExecBowserFall(work, object);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
ExecBowserLaugh(work, object);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
ExecBowserPowerUp(work, object);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
ExecBowserFire(work, object);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
ExecBowserJump(work, object);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
BoardModelVisibilitySet(suitItemMdl, 0);
|
||||
work->state = 0;
|
||||
break;
|
||||
|
||||
case 0:
|
||||
break;
|
||||
}
|
||||
BoardModelPosSet(bowserMdl, object->trans.x, object->trans.y, object->trans.z);
|
||||
BoardCameraRotGet(&rot);
|
||||
pos.x = object->trans.x+(-100.0f*sin(M_PI*BoardModelRotYGet(bowserMdl)/180.0));
|
||||
pos.z = object->trans.z+(-100.0f*cos(M_PI*BoardModelRotYGet(bowserMdl)/180.0));
|
||||
pos.y = object->trans.y+250.0f;
|
||||
BoardModelPosSetV(suitItemMdl, &pos);
|
||||
}
|
||||
|
||||
static void ExecBowserFall(BowserWork *work, omObjData *object)
|
||||
{
|
||||
Vec pos;
|
||||
Vec pos_space;
|
||||
Vec pos_player;
|
||||
s32 i;
|
||||
if(!work->jump_state) {
|
||||
BoardModelVisibilitySet(bowserMdl, 1);
|
||||
BoardModelMotionStart(bowserMdl, 2, 0);
|
||||
BoardModelMotionTimeSet(bowserMdl, 100.0f);
|
||||
work->jump_state = 1;
|
||||
return;
|
||||
}
|
||||
if(BoardModelMotionEndCheck(bowserMdl)) {
|
||||
work->state = 0;
|
||||
BoardModelMotionShiftSet(bowserMdl, 1, 0.0f, 10.0f, 0x40000001);
|
||||
return;
|
||||
}
|
||||
if(!work->fall_done && !(BoardModelMotionTimeGet(bowserMdl) < 140.0f)) {
|
||||
BoardPlayerPosGet(eventPlayer, &pos);
|
||||
HuAudFXPlay(829);
|
||||
BoardCameraQuakeSet(60, 100.0f);
|
||||
object->trans.y = pos.y;
|
||||
BoardPlayerPosGet(eventPlayer, &pos_player);
|
||||
if(!_CheckFlag(0x10003)) {
|
||||
HuAudFXPlay(798);
|
||||
}
|
||||
pos_player.y += 6.0f;
|
||||
BoardPlayerPosSetV(eventPlayer, &pos_player);
|
||||
GWPlayer[eventPlayer].show_next = 0;
|
||||
BoardPlayerMotionSpeedSet(eventPlayer, 0.0f);
|
||||
for(i=0; i<4; i++) {
|
||||
if(eventSpace != GWPlayer[i].space_curr) {
|
||||
continue;
|
||||
}
|
||||
BoardPlayerPosGet(i, &pos_player);
|
||||
BoardSpacePosGet(0, eventSpace, &pos_space);
|
||||
pos_player.y = 2.5f+pos_space.y;
|
||||
BoardPlayerPosSetV(i, &pos_player);
|
||||
BoardPlayerMotionStart(i, playerMot[i], 0);
|
||||
BoardPlayerMotionTimeSet(i, 50.0f);
|
||||
BoardPlayerMotionSpeedSet(i, 0.0f);
|
||||
}
|
||||
if(!work->fall_done) {
|
||||
work->fall_done = 1;
|
||||
omVibrate(eventPlayer, 12, 4, 2);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void ExecBowserLaugh(BowserWork *work, omObjData *object)
|
||||
{
|
||||
BoardModelMotionStart(bowserMdl, 3, 0);
|
||||
work->mot_active = 1;
|
||||
work->state = 0;
|
||||
}
|
||||
|
||||
static void ExecBowserFire(BowserWork *work, omObjData *object)
|
||||
{
|
||||
BoardModelMotionStart(bowserMdl, 5, 0);
|
||||
work->state = 0;
|
||||
}
|
||||
|
||||
static void ExecBowserJump(BowserWork *work, omObjData *object)
|
||||
{
|
||||
switch(work->jump_state) {
|
||||
case 0:
|
||||
BoardModelMotionShiftSet(bowserMdl, 2, 0.0f, 4.0f, 0);
|
||||
work->jump_state = 1;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
{
|
||||
s16 model_id = BoardModelIDGet(bowserMdl);
|
||||
if(Hu3DMotionShiftIDGet(model_id) == -1) {
|
||||
work->jump_state = 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
{
|
||||
float time = BoardModelMotionTimeGet(bowserMdl);
|
||||
if(time < 60.0f) {
|
||||
break;
|
||||
}
|
||||
if(!work->jump_done) {
|
||||
omVibrate(eventPlayer, 12, 12, 0);
|
||||
HuAudFXPlay(61);
|
||||
work->jump_done = 1;
|
||||
}
|
||||
if(time >= 100.0f) {
|
||||
BoardModelVisibilitySet(bowserMdl, 0);
|
||||
work->state = 0;
|
||||
work->kill = 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void ExecBowserPowerUp(BowserWork *work, omObjData *object)
|
||||
{
|
||||
Vec pos;
|
||||
if(work->jump_state == 0) {
|
||||
BoardModelVisibilitySet(suitItemMdl, 1);
|
||||
BoardModelMotionStart(suitItemMdl, 0, 0);
|
||||
BoardModelScaleSet(suitItemMdl, 10.0f, 10.0f, 10.0f);
|
||||
pos.x = object->trans.x+(-100.0f*sin(M_PI*BoardModelRotYGet(bowserMdl)/180.0));
|
||||
pos.z = object->trans.z+(-100.0f*cos(M_PI*BoardModelRotYGet(bowserMdl)/180.0));
|
||||
pos.y = object->trans.y+250.0f;
|
||||
BoardModelPosSetV(suitItemMdl, &pos);
|
||||
HuAudFXPlay(850);
|
||||
} else {
|
||||
if(work->jump_state >= 100) {
|
||||
work->state = 0;
|
||||
}
|
||||
}
|
||||
work->jump_state++;
|
||||
}
|
||||
|
||||
static void SetBowserState(s32 state)
|
||||
{
|
||||
BowserWork *work = OM_GET_WORK_PTR(bowserObj, BowserWork);
|
||||
work->state = state;
|
||||
work->jump_state = 0;
|
||||
}
|
||||
|
||||
static s32 CheckBowserIdle(void)
|
||||
{
|
||||
BowserWork *work;
|
||||
if(!bowserObj) {
|
||||
return 1;
|
||||
}
|
||||
work = OM_GET_WORK_PTR(bowserObj, BowserWork);
|
||||
if(work->state != 0 || work->idle_timer != 0) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void CreateMiniBowser(void)
|
||||
{
|
||||
omObjData *object;
|
||||
MiniBowserWork *work;
|
||||
object = omAddObjEx(boardObjMan, 257, 0, 0, -1, ExecMiniBowser);
|
||||
miniBowserObj = object;
|
||||
work = OM_GET_WORK_PTR(object, MiniBowserWork);
|
||||
work->kill = 0;
|
||||
work->angle = 0;
|
||||
work->group = HuSprGrpCreate(1);
|
||||
BoardSpriteCreate(DATA_MAKE_NUM(DATADIR_BKOOPA, 5), 100, NULL, &work->sprite);
|
||||
HuSprGrpMemberSet(work->group, 0, work->sprite);
|
||||
HuSprAttrSet(work->group, 0, HUSPR_ATTR_LINEAR);
|
||||
HuSprGrpPosSet(work->group, 288.0f, 240.0f);
|
||||
HuSprGrpScaleSet(work->group, 4.0f, 4.0f);
|
||||
}
|
||||
|
||||
static s32 CheckMiniBowser(void)
|
||||
{
|
||||
if(miniBowserObj) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void ExecMiniBowser(omObjData *object)
|
||||
{
|
||||
MiniBowserWork *work = OM_GET_WORK_PTR(object, MiniBowserWork);
|
||||
float alpha;
|
||||
if(work->kill || BoardIsKill()) {
|
||||
HuSprGrpKill(work->group);
|
||||
miniBowserObj = NULL;
|
||||
omDelObjEx(HuPrcCurrentGet(), object);
|
||||
return;
|
||||
}
|
||||
OSs16tof32(&work->angle, &alpha);
|
||||
alpha = sin(M_PI*BoardDAngleCalc(alpha)/180.0);
|
||||
HuSprTPLvlSet(work->group, 0, ABS(alpha));
|
||||
if(work->angle == 60) {
|
||||
HuAudFXPlay(807);
|
||||
}
|
||||
work->angle += 2;
|
||||
if(work->angle == 90 || work->angle == 270 || work->angle == 450) {
|
||||
omVibrate(eventPlayer, 12, 4, 2);
|
||||
}
|
||||
if(work->angle >= 540) {
|
||||
work->kill = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void CreateBowserEvent(void)
|
||||
{
|
||||
Vec pos_2d;
|
||||
Vec pos_3d;
|
||||
s32 eventSpr[] = {
|
||||
DATA_MAKE_NUM(DATADIR_BKOOPA, 1),
|
||||
DATA_MAKE_NUM(DATADIR_BKOOPA, 2),
|
||||
DATA_MAKE_NUM(DATADIR_BKOOPA, 3),
|
||||
DATA_MAKE_NUM(DATADIR_BKOOPA, 4),
|
||||
};
|
||||
|
||||
|
||||
BowserEventData *data;
|
||||
s32 i;
|
||||
BowserEventWork *work;
|
||||
s32 sprite;
|
||||
bowserEventObj = omAddObjEx(boardObjMan, 257, 0, 0, -1, ExecBowserEvent);
|
||||
work = OM_GET_WORK_PTR(bowserEventObj, BowserEventWork);
|
||||
work->kill = 0;
|
||||
work->state = 0;
|
||||
work->timer = 0;
|
||||
memset(&bowserEvent, 0, sizeof(BowserEventData));
|
||||
data = &bowserEvent;
|
||||
data->group = HuSprGrpCreate(3);
|
||||
sprite = eventSpr[GWSystem.bowser_event];
|
||||
for(i=0; i<3; i++) {
|
||||
BoardSpriteCreate(sprite, 100, NULL, &data->sprite[i]);
|
||||
HuSprGrpMemberSet(data->group, i, data->sprite[i]);
|
||||
HuSprTPLvlSet(data->group, i, 0.0f);
|
||||
HuSprPosSet(data->group, i, 0.0f, 0.0f);
|
||||
data->delay[i] = i*2;
|
||||
}
|
||||
HuSprGrpPosSet(data->group, 288.0f, 240.0f);
|
||||
data->model = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 101), NULL, 0);
|
||||
pos_2d.x = 288.0f;
|
||||
pos_2d.y = 240.0f;
|
||||
pos_2d.z = 1000.0f;
|
||||
Hu3D2Dto3D(&pos_2d, 1, &pos_3d);
|
||||
BoardModelMotionStart(data->model, 0, 0x40000001);
|
||||
BoardModelPosSetV(data->model, &pos_3d);
|
||||
BoardModelLayerSet(data->model, 2);
|
||||
}
|
||||
|
||||
static s32 CheckBowserEvent(void)
|
||||
{
|
||||
BowserEventWork *work = OM_GET_WORK_PTR(bowserEventObj, BowserEventWork);
|
||||
|
||||
if(work->state != 2) {
|
||||
return 0;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void StopBowserEvent(void)
|
||||
{
|
||||
BowserEventWork *work = OM_GET_WORK_PTR(bowserEventObj, BowserEventWork);
|
||||
work->state = 1;
|
||||
}
|
||||
|
||||
static void ShowBowserEvent(BowserEventWork *work, omObjData *object);
|
||||
static void HideBowserEvent(BowserEventWork *work, omObjData *object);
|
||||
|
||||
static void ExecBowserEvent(omObjData *object)
|
||||
{
|
||||
BowserEventWork *work = OM_GET_WORK_PTR(object, BowserEventWork);
|
||||
BowserEventData *data = &bowserEvent;
|
||||
if(work->kill || BoardIsKill()) {
|
||||
HuSprGrpKill(data->group);
|
||||
BoardModelKill(data->model);
|
||||
bowserEventObj = NULL;
|
||||
omDelObjEx(HuPrcCurrentGet(), object);
|
||||
return;
|
||||
}
|
||||
if(work->timer) {
|
||||
work->timer--;
|
||||
return;
|
||||
}
|
||||
switch(work->state) {
|
||||
case 0:
|
||||
ShowBowserEvent(work, object);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
HideBowserEvent(work, object);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void ShowBowserEvent(BowserEventWork *work, omObjData *object)
|
||||
{
|
||||
BowserEventData *data;
|
||||
s32 i;
|
||||
s32 count;
|
||||
float angle;
|
||||
float tplvl;
|
||||
float scale;
|
||||
data = &bowserEvent;
|
||||
for(count=i=0; i<3; i++) {
|
||||
if(data->delay[i]) {
|
||||
data->delay[i]--;
|
||||
} else {
|
||||
if(data->angle[i] > 90) {
|
||||
count++;
|
||||
continue;
|
||||
}
|
||||
OSs16tof32(&data->angle[i], &angle);
|
||||
tplvl = sin(M_PI*angle/180.0);
|
||||
scale = sin(M_PI*angle/180.0);
|
||||
HuSprTPLvlSet(data->group, i, tplvl);
|
||||
HuSprScaleSet(data->group, i, scale, scale);
|
||||
BoardModelAlphaSet(data->model, 255.0f*tplvl);
|
||||
data->angle[i] += 9;
|
||||
if(data->angle[i] > 90 && i != 0) {
|
||||
HuSprAttrSet(data->group, i, HUSPR_ATTR_DISPOFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(count == 3) {
|
||||
work->state = 2;
|
||||
work->timer = 60;
|
||||
}
|
||||
}
|
||||
|
||||
static void HideBowserEvent(BowserEventWork *work, omObjData *object)
|
||||
{
|
||||
BowserEventData *data = &bowserEvent;
|
||||
float angle;
|
||||
float tplvl;
|
||||
OSs16tof32(&data->angle[0], &angle);
|
||||
tplvl = sin(M_PI*angle/180.0);
|
||||
HuSprTPLvlSet(data->group, 0, tplvl);
|
||||
BoardModelAlphaSet(data->model, 255.0f*tplvl);
|
||||
data->angle[0] -= 10;
|
||||
if(data->angle[0] < 0) {
|
||||
work->kill = 1;
|
||||
HuSprAttrSet(data->group, 0, HUSPR_ATTR_DISPOFF);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void ConfigBowserEvent(void)
|
||||
{
|
||||
s32 i;
|
||||
s32 chance;
|
||||
s32 coins;
|
||||
s32 item_full;
|
||||
item_full = 0;
|
||||
if(BoardPlayerItemCount(eventPlayer) == 3) {
|
||||
item_full = 1;
|
||||
}
|
||||
for(coins=i=0; i<4; i++) {
|
||||
coins += BoardPlayerCoinsGet(i);
|
||||
}
|
||||
retry:
|
||||
while(1) {
|
||||
chance = BoardRandMod(100);
|
||||
if(chance >= 95) {
|
||||
if(item_full) {
|
||||
continue;
|
||||
}
|
||||
if(GWSystem.max_turn-GWSystem.turn == 0) {
|
||||
continue;
|
||||
}
|
||||
GWSystem.bowser_event = 3;
|
||||
break;
|
||||
} else if(chance >= 85) {
|
||||
GWSystem.bowser_event = 2;
|
||||
break;
|
||||
} else if(chance >= 70) {
|
||||
GWSystem.bowser_event = 1;
|
||||
break;
|
||||
} else {
|
||||
if(coins == 0) {
|
||||
continue;
|
||||
}
|
||||
GWSystem.bowser_event = 0;
|
||||
GWSystem.bowser_loss = BoardRandMod(3);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void CreatePlayerMot(void)
|
||||
{
|
||||
s32 scareMotTbl[] = {
|
||||
DATA_MAKE_NUM(DATADIR_MARIOMOT, 27),
|
||||
DATA_MAKE_NUM(DATADIR_LUIGIMOT, 27),
|
||||
DATA_MAKE_NUM(DATADIR_PEACHMOT, 27),
|
||||
DATA_MAKE_NUM(DATADIR_YOSHIMOT, 27),
|
||||
DATA_MAKE_NUM(DATADIR_WARIOMOT, 27),
|
||||
DATA_MAKE_NUM(DATADIR_DONKEYMOT, 27),
|
||||
DATA_MAKE_NUM(DATADIR_DAISYMOT, 27),
|
||||
DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 27),
|
||||
};
|
||||
s32 jumpMotTbl[] = {
|
||||
DATA_MAKE_NUM(DATADIR_MARIOMOT, 26),
|
||||
DATA_MAKE_NUM(DATADIR_LUIGIMOT, 26),
|
||||
DATA_MAKE_NUM(DATADIR_PEACHMOT, 26),
|
||||
DATA_MAKE_NUM(DATADIR_YOSHIMOT, 26),
|
||||
DATA_MAKE_NUM(DATADIR_WARIOMOT, 26),
|
||||
DATA_MAKE_NUM(DATADIR_DONKEYMOT, 26),
|
||||
DATA_MAKE_NUM(DATADIR_DAISYMOT, 26),
|
||||
DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 26),
|
||||
};
|
||||
s32 playerMotTbl[] = {
|
||||
DATA_MAKE_NUM(DATADIR_MARIOMOT, 31),
|
||||
DATA_MAKE_NUM(DATADIR_LUIGIMOT, 31),
|
||||
DATA_MAKE_NUM(DATADIR_PEACHMOT, 31),
|
||||
DATA_MAKE_NUM(DATADIR_YOSHIMOT, 31),
|
||||
DATA_MAKE_NUM(DATADIR_WARIOMOT, 31),
|
||||
DATA_MAKE_NUM(DATADIR_DONKEYMOT, 31),
|
||||
DATA_MAKE_NUM(DATADIR_DAISYMOT, 31),
|
||||
DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 31),
|
||||
};
|
||||
s32 i;
|
||||
s32 character;
|
||||
character = GWPlayer[eventPlayer].character;
|
||||
scareMot = BoardPlayerMotionCreate(eventPlayer, scareMotTbl[character]);
|
||||
jumpMot = BoardPlayerMotionCreate(eventPlayer, jumpMotTbl[character]);
|
||||
for(i=0; i<4; i++) {
|
||||
character = GWPlayer[i].character;
|
||||
playerMot[i] = BoardPlayerMotionCreate(i, playerMotTbl[character]);
|
||||
}
|
||||
}
|
||||
|
||||
static void KillPlayerMot(void)
|
||||
{
|
||||
s32 i;
|
||||
if(scareMot > 0) {
|
||||
BoardPlayerMotionKill(eventPlayer, scareMot);
|
||||
scareMot = -1;
|
||||
}
|
||||
if(jumpMot > 0) {
|
||||
BoardPlayerMotionKill(eventPlayer, jumpMot);
|
||||
jumpMot = -1;
|
||||
}
|
||||
for(i=0; i<4; i++) {
|
||||
if(playerMot[i] > 0) {
|
||||
BoardPlayerMotionKill(i, playerMot[i]);
|
||||
playerMot[i] = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void BowserFireHook(ModelData *model, ParticleData *particle, Mtx matrix);
|
||||
|
||||
static void SpawnBowserFire(HsfanimStruct01 *arg0);
|
||||
static s32 CheckBowserFire(HsfanimStruct01 *arg0);
|
||||
|
||||
static void InitBowserFire(void)
|
||||
{
|
||||
fireAnim = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_BOARD, 106));
|
||||
fireParMan = Hu3DParticleCreate(fireAnim, 30);
|
||||
Hu3DParticleColSet(fireParMan, 255, 255, 255);
|
||||
Hu3DParticleScaleSet(fireParMan, 10.0f);
|
||||
Hu3DParticleHookSet(fireParMan, BowserFireHook);
|
||||
Hu3DParticleBlendModeSet(fireParMan, 1);
|
||||
Hu3DModelLayerSet(fireParMan, 2);
|
||||
}
|
||||
|
||||
static void BowserFireHook(ModelData *model, ParticleData *particle, Mtx matrix)
|
||||
{
|
||||
HsfanimStruct01* var_r30;
|
||||
s32 i;
|
||||
s32 var_r28;
|
||||
Vec pos;
|
||||
Hu3DModelObjPosGet(BoardModelIDGet(bowserMdl), "itemhook_M_1", &pos);
|
||||
if (particle->unk_34 == 0) {
|
||||
var_r30 = particle->unk_48;
|
||||
for (i = 0; i < particle->unk_30; i++, var_r30++) {
|
||||
var_r30->unk2C = 0.0f;
|
||||
}
|
||||
particle->unk_34 = 1;
|
||||
particle->unk_00 = 0;
|
||||
}
|
||||
if((particle->unk_34 & 0x3) == 0) {
|
||||
var_r30 = particle->unk_48;
|
||||
for(var_r28=0; var_r28<particle->unk_30; var_r28++, var_r30++) {
|
||||
if(var_r30->unk2C == 0.0f) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(var_r28 != particle->unk_30) {
|
||||
var_r30->unk34 = pos;
|
||||
particle->unk_00++;
|
||||
SpawnBowserFire(var_r30);
|
||||
}
|
||||
}
|
||||
var_r30 = particle->unk_48;
|
||||
for (i = 0; i < particle->unk_30; i++, var_r30++) {
|
||||
if(var_r30->unk2C != 0.0f && CheckBowserFire(var_r30)) {
|
||||
particle->unk_00--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void SpawnBowserFire(HsfanimStruct01 *arg0)
|
||||
{
|
||||
Vec dir;
|
||||
BoardCameraDirGet(&dir);
|
||||
arg0->unk08.x = 0.0f;
|
||||
arg0->unk08.y = 0.0f;
|
||||
arg0->unk08.z = 0.0f;
|
||||
arg0->unk14.x = -dir.x*((0.5f*BoardRandFloat())+0.5f);
|
||||
arg0->unk14.y = -dir.y*((0.5f*BoardRandFloat())+0.5f);
|
||||
arg0->unk14.z = -dir.z*((0.5f*BoardRandFloat())+0.5f);
|
||||
arg0->unk24 = 1.025f;
|
||||
arg0->unk40.a = 254;
|
||||
arg0->unk40.r = 255;
|
||||
arg0->unk40.g = 255;
|
||||
arg0->unk40.b = 255;
|
||||
arg0->unk2C = 100.0f;
|
||||
}
|
||||
|
||||
static s32 CheckBowserFire(HsfanimStruct01 *arg0)
|
||||
{
|
||||
arg0->unk34.x += arg0->unk08.x;
|
||||
arg0->unk34.y += arg0->unk08.y;
|
||||
arg0->unk34.z += arg0->unk08.z;
|
||||
arg0->unk08.x += arg0->unk14.x;
|
||||
arg0->unk08.y += arg0->unk14.y;
|
||||
arg0->unk08.z += arg0->unk14.z;
|
||||
arg0->unk40.a -= 8;
|
||||
arg0->unk2C *= arg0->unk24;
|
||||
if(arg0->unk40.a == 0.0f) {
|
||||
arg0->unk40.a = 0;
|
||||
arg0->unk2C = 0.0f;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void KillBowserFire(void)
|
||||
{
|
||||
if(fireParMan != -1) {
|
||||
Hu3DModelKill(fireParMan);
|
||||
fireParMan = -1;
|
||||
fireAnim = NULL;
|
||||
}
|
||||
}
|
||||
|
|
@ -75,8 +75,8 @@ static void ExecItemLight(void);
|
|||
static void ExecItemWhistle(void);
|
||||
static void ExecItemBowser(void);
|
||||
static void ExecItemBooBall(void);
|
||||
static void LampParticleUpdate(s32 arg0, ParticleData *arg1);
|
||||
static void GenieParticleUpdate(s32 arg0, ParticleData *arg1);
|
||||
static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix);
|
||||
static void GenieParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix);
|
||||
static void GenieCameraProc(void);
|
||||
static void GenieCameraCalc(UnkGenieCameraStruct *arg0, s32 arg1, float arg2, Vec *arg3, Vec *arg4);
|
||||
static void GenieSceneExec(void);
|
||||
|
|
@ -1924,7 +1924,7 @@ static void ForceConsts(void)
|
|||
(void)125.0f;
|
||||
}
|
||||
|
||||
static void LampParticleUpdate(s32 arg0, ParticleData *arg1) {
|
||||
static void LampParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix) {
|
||||
HsfanimStruct01 *var_r31;
|
||||
Vec spC;
|
||||
float sp8;
|
||||
|
|
@ -1933,26 +1933,26 @@ static void LampParticleUpdate(s32 arg0, ParticleData *arg1) {
|
|||
s32 i;
|
||||
s32 j;
|
||||
|
||||
if (arg1->unk_34 == 0) {
|
||||
var_r31 = arg1->unk_48;
|
||||
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
|
||||
if (particle->unk_34 == 0) {
|
||||
var_r31 = particle->unk_48;
|
||||
for (i = 0; i < particle->unk_30; i++, var_r31++) {
|
||||
var_r31->unk2C = 0.0f;
|
||||
var_r31->unk40.a = 0;
|
||||
}
|
||||
arg1->unk_04 = 0.0f;
|
||||
arg1->unk_00 = 0;
|
||||
particle->unk_04 = 0.0f;
|
||||
particle->unk_00 = 0;
|
||||
}
|
||||
if (arg1->unk_00 == 0) {
|
||||
arg1->unk_00 = 2;
|
||||
if (particle->unk_00 == 0) {
|
||||
particle->unk_00 = 2;
|
||||
BoardModelRotGet(suitMdl, &spC);
|
||||
for (i = 0; i < 2; i++) {
|
||||
var_r31 = arg1->unk_48;
|
||||
for (j = 0; j < arg1->unk_30; j++, var_r31++) {
|
||||
var_r31 = particle->unk_48;
|
||||
for (j = 0; j < particle->unk_30; j++, var_r31++) {
|
||||
if (var_r31->unk2C == 0.0f) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (j != arg1->unk_30) {
|
||||
if (j != particle->unk_30) {
|
||||
var_r31->unk34.x = 60.0 * sin((spC.y - 90.0f) * M_PI / 180.0);
|
||||
var_r31->unk34.y = 30.0f;
|
||||
var_r31->unk34.z = 60.0 * cos((spC.y - 90.0f) * M_PI / 180.0);
|
||||
|
|
@ -1968,10 +1968,10 @@ static void LampParticleUpdate(s32 arg0, ParticleData *arg1) {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
arg1->unk_00--;
|
||||
particle->unk_00--;
|
||||
}
|
||||
var_r31 = arg1->unk_48;
|
||||
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
|
||||
var_r31 = particle->unk_48;
|
||||
for (i = 0; i < particle->unk_30; i++, var_r31++) {
|
||||
if (var_r31->unk2C != 0.0f) {
|
||||
if (var_r31->unk00_s16 == 0) {
|
||||
PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34);
|
||||
|
|
@ -2001,16 +2001,16 @@ static void LampParticleUpdate(s32 arg0, ParticleData *arg1) {
|
|||
}
|
||||
}
|
||||
|
||||
static void GenieParticleUpdate(s32 arg0, ParticleData *arg1) {
|
||||
static void GenieParticleUpdate(ModelData *model, ParticleData *particle, Mtx matrix) {
|
||||
HsfanimStruct01* var_r31;
|
||||
float temp_f31;
|
||||
float temp_f30;
|
||||
s32 var_r28;
|
||||
s32 i;
|
||||
|
||||
if (arg1->unk_34 == 0) {
|
||||
var_r31 = arg1->unk_48;
|
||||
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
|
||||
if (particle->unk_34 == 0) {
|
||||
var_r31 = particle->unk_48;
|
||||
for (i = 0; i < particle->unk_30; i++, var_r31++) {
|
||||
var_r31->unk34.x = -50.0f + (frand() & 0xFF) * 100.0f * 0.003921569f;
|
||||
var_r31->unk34.y = -50.0f + (frand() & 0xFF) * 100.0f * 0.003921569f;
|
||||
var_r31->unk34.z = -10.0f + (frand() & 0xFF) * 20.0f * 0.003921569f;
|
||||
|
|
@ -2025,9 +2025,9 @@ static void GenieParticleUpdate(s32 arg0, ParticleData *arg1) {
|
|||
var_r31->unk2C = 80.0f + (frand() & 0xFF) * 60.0f * 0.003921569f;
|
||||
}
|
||||
}
|
||||
var_r31 = arg1->unk_48;
|
||||
var_r31 = particle->unk_48;
|
||||
var_r28 = 0;
|
||||
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
|
||||
for (i = 0; i < particle->unk_30; i++, var_r31++) {
|
||||
if (var_r31->unk2C != 0.0f) {
|
||||
var_r28++;
|
||||
PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34);
|
||||
|
|
@ -2042,7 +2042,7 @@ static void GenieParticleUpdate(s32 arg0, ParticleData *arg1) {
|
|||
}
|
||||
}
|
||||
if (var_r28 == 0) {
|
||||
arg1->unk_02 = 0;
|
||||
particle->unk_02 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2235,7 +2235,7 @@ static void GenieSceneExec(void) {
|
|||
temp_r21 = HuPrcChildCreate(GenieCameraProc, 0x2005, 0x1000, 0, HuPrcCurrentGet());
|
||||
Hu3DBGColorSet(0xFF, 0xFF, 0xFF);
|
||||
temp_r27 = Hu3DParticleCreate(genieParticleAnim, 0x32);
|
||||
Hu3DParticleHookSet(temp_r27, &GenieParticleUpdate);
|
||||
Hu3DParticleHookSet(temp_r27, GenieParticleUpdate);
|
||||
Hu3DParticleBlendModeSet(temp_r27, 1);
|
||||
Hu3DParticleColSet(temp_r27, 0xFF, 0xFF, 0xFF);
|
||||
Hu3DParticleAnimModeSet(temp_r27, 0);
|
||||
|
|
@ -2409,7 +2409,7 @@ static void ExecItemGenie(void) {
|
|||
HuAudPlayerVoicePlay(currItemRestore, 0x125);
|
||||
temp_r25 = HuAudFXPlay(0x34D);
|
||||
temp_r31 = Hu3DParticleCreate(genieParticleAnim, 0x96);
|
||||
Hu3DParticleHookSet(temp_r31, &LampParticleUpdate);
|
||||
Hu3DParticleHookSet(temp_r31, LampParticleUpdate);
|
||||
Hu3DParticleBlendModeSet(temp_r31, 0);
|
||||
Hu3DParticleColSet(temp_r31, 0xFF, 0xFF, 0xFF);
|
||||
Hu3DParticleAnimModeSet(temp_r31, 0);
|
||||
|
|
|
|||
|
|
@ -749,7 +749,7 @@ static void SeparateStatus(bitcopy* arg0, omObjData* arg1) {
|
|||
switch (arg0->unk_02) {
|
||||
case 0:
|
||||
for (var_r28 = 0; var_r28 < 4; var_r28++) {
|
||||
BoardStatusPosGet(var_r28, &sp8.x);
|
||||
BoardStatusPosGet(var_r28, &sp8);
|
||||
if (sp8.x < 288.0f) {
|
||||
sp8.x = -98.0f;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -689,7 +689,7 @@ void BoardPlayerPostTurnHookSet(s32 arg0, s32 (*arg1)()) {
|
|||
void BoardPlayerTurnExec(s32 arg0) {
|
||||
BoardPauseDisableSet(1);
|
||||
BoardComUseItemSet(arg0, -1);
|
||||
GWSystem.field31_bit4 = 0xF;
|
||||
GWSystem.bowser_event = 0xF;
|
||||
_ClearFlag(0x10016);
|
||||
_ClearFlag(0x1000E);
|
||||
BoardCameraMoveSet(1);
|
||||
|
|
@ -853,11 +853,11 @@ block_14:
|
|||
BoardSpaceBlockExec(arg0, sp8);
|
||||
BoardSpaceLandExec(arg0, sp8);
|
||||
_SetFlag(0x1000E);
|
||||
if (GWSystem.field31_bit4 != 1) {
|
||||
if (GWSystem.bowser_event != 1) {
|
||||
BoardCameraViewSet(2);
|
||||
BoardCameraMotionWait();
|
||||
} else {
|
||||
GWSystem.field31_bit4 = 0xF;
|
||||
GWSystem.bowser_event = 0xF;
|
||||
}
|
||||
BoardPlayerZoomRestore(arg0);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -402,11 +402,11 @@ void BoardStatusTargetPosSet(s32 arg0, Vec *arg1) {
|
|||
temp_r31->unk00_bit2 = 1;
|
||||
}
|
||||
|
||||
void BoardStatusPosGet(s32 arg0, float *arg1) {
|
||||
void BoardStatusPosGet(s32 arg0, Vec *arg1) {
|
||||
UnkUiStatusStruct *temp_r31 = &uiStatus[arg0];
|
||||
|
||||
arg1[0] = temp_r31->unk04.x;
|
||||
arg1[1] = temp_r31->unk04.y;
|
||||
arg1->x = temp_r31->unk04.x;
|
||||
arg1->y = temp_r31->unk04.y;
|
||||
}
|
||||
|
||||
void BoardStatusPosSet(s32 arg0, Vec *arg1) {
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ static s16 CreateEffectStar(s16 arg0, float arg1, float arg2, float arg3, float
|
|||
static s16 CreateEffectWarn(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5);
|
||||
static s16 CreateEffectBird(s16 arg0, float arg1, float arg2, float arg3, float arg4, EffectParamData *arg5);
|
||||
static s16 CreateEffect(s16 arg0, s16 arg1, float arg2, float arg3, float arg4, float arg5, EffectParamData *arg6);
|
||||
static void UpdateEffect(s32 arg0, ParticleData *arg1);
|
||||
static void UpdateEffect(ModelData *model, ParticleData *particle, Mtx matrix);
|
||||
static void RotateEffect(HsfanimStruct01 *arg0);
|
||||
static void PlayEffectSound(HsfanimStruct01 *arg0);
|
||||
static void UpdateItemHook(void);
|
||||
|
|
@ -887,21 +887,21 @@ static s16 CreateEffect(s16 arg0, s16 arg1, float arg2, float arg3, float arg4,
|
|||
return i;
|
||||
}
|
||||
|
||||
static void UpdateEffect(s32 arg0, ParticleData *arg1) {
|
||||
static void UpdateEffect(ModelData *model, ParticleData *particle, Mtx matrix) {
|
||||
EffectParamData *temp_r30;
|
||||
HsfanimStruct01 *var_r31;
|
||||
s16 var_r28;
|
||||
s16 i;
|
||||
|
||||
temp_r30 = arg1->unk_1C;
|
||||
if (arg1->unk_34 == 0) {
|
||||
var_r31 = arg1->unk_48;
|
||||
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
|
||||
temp_r30 = particle->unk_1C;
|
||||
if (particle->unk_34 == 0) {
|
||||
var_r31 = particle->unk_48;
|
||||
for (i = 0; i < particle->unk_30; i++, var_r31++) {
|
||||
var_r31->unk2C = 0.0f;
|
||||
}
|
||||
}
|
||||
var_r31 = arg1->unk_48;
|
||||
for (i = 0; i < arg1->unk_30; i++, var_r31++) {
|
||||
var_r31 = particle->unk_48;
|
||||
for (i = 0; i < particle->unk_30; i++, var_r31++) {
|
||||
if (var_r31->unk2C) {
|
||||
if (var_r31->unk02 == -1) {
|
||||
var_r31->unk08.x *= temp_r30[i].unk18;
|
||||
|
|
@ -962,7 +962,7 @@ static void UpdateEffect(s32 arg0, ParticleData *arg1) {
|
|||
}
|
||||
}
|
||||
}
|
||||
DCStoreRangeNoSync(arg1->unk_48, arg1->unk_30 * sizeof(HsfanimStruct01));
|
||||
DCStoreRangeNoSync(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01));
|
||||
}
|
||||
|
||||
static void RotateEffect(HsfanimStruct01 *arg0) {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ typedef struct {
|
|||
|
||||
static void _Hu3DParticleAttrReset(ModelData *arg0, Mtx arg1);
|
||||
static void ParManFunc(void);
|
||||
static void ParManHook(ModelData *arg0, ParticleData *arg1);
|
||||
static void ParManHook(ModelData *arg0, ParticleData *arg1, Mtx matrix);
|
||||
|
||||
u32 frand(void);
|
||||
|
||||
|
|
@ -606,7 +606,7 @@ void Hu3DParticleBlendModeSet(s16 arg0, u8 arg1) {
|
|||
temp_r30->unk_2C = arg1;
|
||||
}
|
||||
|
||||
void Hu3DParticleHookSet(s16 arg0, void *arg1) {
|
||||
void Hu3DParticleHookSet(s16 arg0, ParticleHook arg1) {
|
||||
ModelData *temp_r31 = &Hu3DData[arg0];
|
||||
ParticleData *temp_r30 = temp_r31->unk_120;
|
||||
|
||||
|
|
@ -673,7 +673,7 @@ static void _Hu3DParticleAttrReset(ModelData *arg0, Mtx arg1) {
|
|||
AnimLayerData *temp_r27;
|
||||
ParticleData *temp_r31;
|
||||
HsfanimStruct01 *var_r29;
|
||||
void (*var_r17)(void*, void*, Mtx);
|
||||
ParticleHook var_r17;
|
||||
Mtx sp128;
|
||||
Mtx spF8;
|
||||
Mtx spC8;
|
||||
|
|
@ -872,7 +872,7 @@ s16 Hu3DParManCreate(AnimData *arg0, s16 arg1, HsfanimStruct00 *arg2) {
|
|||
return -1;
|
||||
}
|
||||
temp_r3 = Hu3DParticleCreate(arg0, arg1);
|
||||
Hu3DParticleHookSet(temp_r3, &ParManHook);
|
||||
Hu3DParticleHookSet(temp_r3, ParManHook);
|
||||
temp_r25 = &Hu3DData[temp_r3];
|
||||
temp_r29 = temp_r25->unk_120;
|
||||
temp_r29->unk_00 = var_r30;
|
||||
|
|
@ -1214,7 +1214,7 @@ static float jitterTbl[] = {
|
|||
0.5f, 0.7f, 0.9f, 1.0f
|
||||
};
|
||||
|
||||
static void ParManHook(ModelData *arg0, ParticleData *arg1) {
|
||||
static void ParManHook(ModelData *model, ParticleData *particle, Mtx matrix) {
|
||||
HsfanimStruct00 *temp_r26;
|
||||
ParManProcUserData *temp_r28;
|
||||
HsfanimStruct01 *var_r29;
|
||||
|
|
@ -1228,9 +1228,9 @@ static void ParManHook(ModelData *arg0, ParticleData *arg1) {
|
|||
s16 sp8;
|
||||
s16 i;
|
||||
|
||||
if (Hu3DPauseF == 0 || (arg0->attr & 0x200000)) {
|
||||
var_r29 = arg1->unk_48;
|
||||
for (i = 0; i < arg1->unk_30; i++, var_r29++) {
|
||||
if (Hu3DPauseF == 0 || (model->attr & 0x200000)) {
|
||||
var_r29 = particle->unk_48;
|
||||
for (i = 0; i < particle->unk_30; i++, var_r29++) {
|
||||
if (var_r29->unk2C) {
|
||||
temp_r28 = parManProc[var_r29->unk02]->user_data;
|
||||
temp_r26 = temp_r28->unk3C;
|
||||
|
|
@ -1278,8 +1278,8 @@ static void ParManHook(ModelData *arg0, ParticleData *arg1) {
|
|||
}
|
||||
}
|
||||
}
|
||||
temp_r28 = parManProc[arg1->unk_00]->user_data;
|
||||
temp_r28 = parManProc[particle->unk_00]->user_data;
|
||||
temp_r28->unk38++;
|
||||
DCStoreRangeNoSync(arg1->unk_48, arg1->unk_30 * sizeof(HsfanimStruct01));
|
||||
DCStoreRangeNoSync(particle->unk_48, particle->unk_30 * sizeof(HsfanimStruct01));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue