commit
951674e85f
2 changed files with 595 additions and 11 deletions
|
|
@ -4943,8 +4943,8 @@ seqFontKanaTbl = .data:0x8012F3D0; // type:object size:0x52 scope:local data:str
|
||||||
seqFontNumTbl = .data:0x8012F422; // type:object size:0xB scope:local data:string
|
seqFontNumTbl = .data:0x8012F422; // type:object size:0xB scope:local data:string
|
||||||
letterBufTbl = .data:0x8012F430; // type:object size:0x14 scope:local
|
letterBufTbl = .data:0x8012F430; // type:object size:0x14 scope:local
|
||||||
wordMgTbl = .data:0x8012F444; // type:object size:0x18 scope:local
|
wordMgTbl = .data:0x8012F444; // type:object size:0x18 scope:local
|
||||||
letterOfs$912 = .data:0x8012F45C; // type:object size:0x40 scope:local
|
letterOfs$909 = .data:0x8012F45C; // type:object size:0x40 scope:local
|
||||||
letterOfs$913 = .data:0x8012F49C; // type:object size:0x1C scope:local
|
letterOfs$1386 = .data:0x8012F49C; // type:object size:0x1C scope:local
|
||||||
letterOfs$914 = .data:0x8012F4B8; // type:object size:0x38 scope:local
|
letterOfs$914 = .data:0x8012F4B8; // type:object size:0x38 scope:local
|
||||||
charMKoopaNameE = .data:0x8012F4F0; // type:object size:0xA scope:local data:string
|
charMKoopaNameE = .data:0x8012F4F0; // type:object size:0xA scope:local data:string
|
||||||
winCharNameTbl = .data:0x8012F4FC; // type:object size:0x78 scope:local
|
winCharNameTbl = .data:0x8012F4FC; // type:object size:0x78 scope:local
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
#include "stdarg.h"
|
#include "stdarg.h"
|
||||||
|
|
||||||
|
#define ABS(x) (((x) < 0) ? -(x) : (x))
|
||||||
|
|
||||||
void MGSeqStub(void);
|
void MGSeqStub(void);
|
||||||
|
|
||||||
void MGSeqPauseEnableCtrl(s32 flag);
|
void MGSeqPauseEnableCtrl(s32 flag);
|
||||||
|
|
@ -163,8 +165,8 @@ void MGSeqInit(void)
|
||||||
seqDoneF = 0;
|
seqDoneF = 0;
|
||||||
lbl_801D3D94 = 0;
|
lbl_801D3D94 = 0;
|
||||||
seqTimer = 30;
|
seqTimer = 30;
|
||||||
HuAR_DVDtoARAM(MAKE_DIR_NUM(DATADIR_GAMEMES));
|
HuAR_DVDtoARAM(DATADIR_GAMEMES);
|
||||||
HuAR_DVDtoARAM(MAKE_DIR_NUM(DATADIR_MGCONST));
|
HuAR_DVDtoARAM(DATADIR_MGCONST);
|
||||||
while(HuARDMACheck());
|
while(HuARDMACheck());
|
||||||
fn_80036BC8();
|
fn_80036BC8();
|
||||||
mgSeqInitF = -1;
|
mgSeqInitF = -1;
|
||||||
|
|
@ -890,13 +892,6 @@ static s32 SeqMakeWord(SeqWork *work, char *str, s16 flags)
|
||||||
return grp_idx;
|
return grp_idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
static s32 SeqCloneWord(SeqWork *work, s16 grp_idx)
|
|
||||||
{
|
|
||||||
s16 i;
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
static AnimData *SeqLoadFontChar(char *str, s16 flags)
|
static AnimData *SeqLoadFontChar(char *str, s16 flags)
|
||||||
{
|
{
|
||||||
s32 data_num;
|
s32 data_num;
|
||||||
|
|
@ -1487,6 +1482,595 @@ static int SeqUpdateMGBattle(SeqWork *work)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int SeqUpdateMG1vs3(SeqWork *work)
|
||||||
|
{
|
||||||
|
s16 idx;
|
||||||
|
float scale;
|
||||||
|
if(work->param[0] != 0 && work->type != -1) {
|
||||||
|
switch(work->param[0]) {
|
||||||
|
case 2:
|
||||||
|
if(work->param[1] != -1) {
|
||||||
|
(void)work; //HACK: to introduce extra branch
|
||||||
|
} else {
|
||||||
|
work->type = -1;
|
||||||
|
work->work_float[0] = 0.0f;
|
||||||
|
}
|
||||||
|
work->param[0] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
work->time_max = work->param[1];
|
||||||
|
work->param[0] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
work->type = 1;
|
||||||
|
work->param[0] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
work->param[0] = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(work->type == 2) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
work->time += seqSpeed;
|
||||||
|
if(work->time >= work->time_max && work->type != -1) {
|
||||||
|
work->stat |= 0x4;
|
||||||
|
work->type = -1;
|
||||||
|
work->work_float[0] = 0.0f;
|
||||||
|
}
|
||||||
|
if(work->type) {
|
||||||
|
switch(work->type) {
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
float time;
|
||||||
|
float scale_x, scale_y;
|
||||||
|
float pos_x, pos_y;
|
||||||
|
s16 i;
|
||||||
|
s16 j;
|
||||||
|
if(work->work_s16[1] == 0) {
|
||||||
|
if(work->time <= 10) {
|
||||||
|
scale = work->time/10.0f;
|
||||||
|
time = work->time;
|
||||||
|
for(idx=0; idx<work->work_s16[3]; idx++) {
|
||||||
|
scale_x = 0.3*work->scale_x;
|
||||||
|
scale_y = 0.3*work->scale_y;
|
||||||
|
pos_x = ((28.0f*scale_x)+(work->x-(0.5f*(scale_x*(work->work_s16[3]*56)))))+(scale_x*(idx*56));
|
||||||
|
pos_y = work->y-(150.0*sin((M_PI*(((16.0f/3.0f)*time)+20.0f))/180.0));
|
||||||
|
HuSprPosSet(work->spr_grp[0], idx, pos_x, pos_y);
|
||||||
|
HuSprScaleSet(work->spr_grp[0], idx, scale_x, scale_y*cos(M_PI*(12.0f*time)/180.0));
|
||||||
|
HuSprTPLvlSet(work->spr_grp[0], idx, scale);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(work->time <= 60) {
|
||||||
|
for(i=0; i<4; i++) {
|
||||||
|
for(idx=0; idx<work->work_s16[3]; idx++) {
|
||||||
|
time = (work->time-10)-(idx*3)-i;
|
||||||
|
if(time < 0.0f) {
|
||||||
|
time = 0.0f;
|
||||||
|
} else {
|
||||||
|
if(time > 30.0f) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scale = 0.3+(0.7*(1.0-cos((M_PI*(time*3.0f))/180.0)));
|
||||||
|
scale_x = work->scale_x*scale;
|
||||||
|
scale_y = work->scale_y*scale;
|
||||||
|
pos_x = ((28.0f*scale_x)+(work->x-(0.5f*(scale_x*(work->work_s16[3]*56)))))+(scale_x*(idx*56));
|
||||||
|
pos_y = work->y-(150.0*sin((M_PI*(((16.0f/3.0f)*time)+20.0f))/180.0));
|
||||||
|
HuSprPosSet(work->spr_grp[i], idx, pos_x, pos_y);
|
||||||
|
HuSprScaleSet(work->spr_grp[i], idx, scale_x, scale_y*cos(M_PI*(12.0f*time)/180.0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(work->time == 60) {
|
||||||
|
for(i=1; i<4; i++) {
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(work->time > 70) {
|
||||||
|
time = work->time-70;
|
||||||
|
scale = 0.5*sin((M_PI*(time*9.0f))/180.0);
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x));
|
||||||
|
HuSprPosSet(work->spr_grp[0], j, pos_x, work->y);
|
||||||
|
HuSprScaleSet(work->spr_grp[0], j, work->scale_x+scale, work->scale_y+scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(work->time == 70) {
|
||||||
|
HuAudFXPlay(36);
|
||||||
|
work->stat |= 0x10;
|
||||||
|
}
|
||||||
|
if(work->time == 90) {
|
||||||
|
work->stat |= 0x4;
|
||||||
|
SeqPlayStartFX();
|
||||||
|
}
|
||||||
|
if(work->time >= 90) {
|
||||||
|
work->type = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(work->time == 1) {
|
||||||
|
if(work->work_s16[1] == 1) {
|
||||||
|
HuAudFXPlay(37);
|
||||||
|
} else {
|
||||||
|
HuAudFXPlay(40);
|
||||||
|
}
|
||||||
|
MGSeqPauseEnableCtrl(0);
|
||||||
|
work->stat |= 0x10;
|
||||||
|
}
|
||||||
|
if(work->time <= 20) {
|
||||||
|
for(i=1; i<4; i++) {
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
time = work->time;
|
||||||
|
scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0));
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
HuSprAttrReset(work->spr_grp[0], j, SPRITE_ATTR_HIDDEN);
|
||||||
|
pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56));
|
||||||
|
HuSprPosSet(work->spr_grp[0], j, pos_x, work->y);
|
||||||
|
HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0)));
|
||||||
|
}
|
||||||
|
if(time == 20.0f) {
|
||||||
|
for(i=1; i<4; i++) {
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
HuSprAttrReset(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(work->time > 80 || work->time < 140) {
|
||||||
|
for(i=0; i<4; i++) {
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
time = (work->time-80)-i-j;
|
||||||
|
if(time < 0 || time > 40) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(time <= 20) {
|
||||||
|
float pos_base = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(j*56);
|
||||||
|
pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+((work->work_s16[3]-j-1)*56);
|
||||||
|
HuSprPosSet(work->spr_grp[i], j, pos_base+((time/20.0f)*(pos_x-pos_base)), work->y+((440.0f-work->y)*(time/20.0f)));
|
||||||
|
} else {
|
||||||
|
time -= 20.0f;
|
||||||
|
pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+((work->work_s16[3]-j-1)*56);
|
||||||
|
pos_y = 440.0f;
|
||||||
|
HuSprPosSet(work->spr_grp[i], j, pos_x, pos_y+((-40.0f-pos_y)*(time/20.0f)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(work->time == 140) {
|
||||||
|
work->stat |= 0x4;
|
||||||
|
}
|
||||||
|
if(work->time >= 140) {
|
||||||
|
work->type = 0;
|
||||||
|
work->stat |= 0x8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case -1:
|
||||||
|
{
|
||||||
|
work->work_float[0] += seqSpeed*0.1f;
|
||||||
|
scale = 1.0f-work->work_float[0];
|
||||||
|
if(scale <= 0.0f) {
|
||||||
|
scale = 0.0f;
|
||||||
|
work->type = 0;
|
||||||
|
work->stat |= 0x8;
|
||||||
|
if(work->work_s16[1] == 0) {
|
||||||
|
MGSeqPauseEnableCtrl(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(idx=0; idx<work->work_s16[3]; idx++) {
|
||||||
|
HuSprTPLvlSet(work->spr_grp[0], idx, scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(seqDoneF || (work->stat & 0x8)) {
|
||||||
|
MGSeqSprKill(work);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int SeqUpdateMGStory(SeqWork *work)
|
||||||
|
{
|
||||||
|
s16 idx;
|
||||||
|
float scale;
|
||||||
|
if(work->param[0] != 0 && work->type != -1) {
|
||||||
|
switch(work->param[0]) {
|
||||||
|
case 2:
|
||||||
|
if(work->param[1] != -1) {
|
||||||
|
(void)work; //HACK: to introduce extra branch
|
||||||
|
} else {
|
||||||
|
work->type = -1;
|
||||||
|
work->work_float[0] = 0.0f;
|
||||||
|
}
|
||||||
|
work->param[0] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
work->time_max = work->param[1];
|
||||||
|
work->param[0] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
work->type = 1;
|
||||||
|
work->param[0] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
work->param[0] = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(work->type == 2) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
work->time += seqSpeed;
|
||||||
|
if(work->time >= work->time_max && work->type != -1) {
|
||||||
|
work->stat |= 0x4;
|
||||||
|
work->type = -1;
|
||||||
|
work->work_float[0] = 0.0f;
|
||||||
|
}
|
||||||
|
if(work->type) {
|
||||||
|
switch(work->type) {
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
float pos_x, pos_y;
|
||||||
|
float time;
|
||||||
|
s16 i;
|
||||||
|
s16 j;
|
||||||
|
if(work->work_s16[1] == 0) {
|
||||||
|
if(work->time <= 30) {
|
||||||
|
for(idx=0; idx<work->work_s16[3]; idx++) {
|
||||||
|
time = (work->time-(idx*2));
|
||||||
|
if(time < 0.0f || time > 15.0f) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
pos_x = -50.0f;
|
||||||
|
HuSprPosSet(work->spr_grp[0], idx, pos_x+((288.0f-pos_x)*(time/15.0f)), work->y);
|
||||||
|
HuSprTPLvlSet(work->spr_grp[0], idx, 1.0f);
|
||||||
|
HuSprZRotSet(work->spr_grp[0], idx, (1.0-(time/15.0f))*180.0);
|
||||||
|
pos_x = 626.0f;
|
||||||
|
HuSprPosSet(work->spr_grp[1], idx, pos_x+((288.0f-pos_x)*(time/15.0f)), work->y);
|
||||||
|
HuSprTPLvlSet(work->spr_grp[1], idx, 1.0f);
|
||||||
|
HuSprZRotSet(work->spr_grp[1], idx, (1.0-(time/15.0f))*-180.0);
|
||||||
|
}
|
||||||
|
if(work->time == 30) {
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
HuSprAttrSet(work->spr_grp[1], j, SPRITE_ATTR_HIDDEN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(work->time > 35 && work->time <= 45) {
|
||||||
|
time = work->time-35;
|
||||||
|
for(idx=0; idx<work->work_s16[3]; idx++) {
|
||||||
|
pos_x = (work->x-(0.5f*(work->work_s16[3]*56)))+28.0f+(idx*56);
|
||||||
|
HuSprPosSet(work->spr_grp[0], idx, 288.0f+((pos_x-288.0f)*(time/10.0f)), work->y);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(work->time > 55) {
|
||||||
|
time = work->time-55;
|
||||||
|
scale = 0.5*sin(M_PI*(9.0f*time)/180.0);
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x));
|
||||||
|
HuSprPosSet(work->spr_grp[0], j, pos_x, work->y);
|
||||||
|
HuSprScaleSet(work->spr_grp[0], j, work->scale_x+scale, work->scale_y+scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(work->time == 55) {
|
||||||
|
HuAudFXPlay(36);
|
||||||
|
work->stat |= 0x10;
|
||||||
|
}
|
||||||
|
if(work->time == 75) {
|
||||||
|
SeqPlayStartFX();
|
||||||
|
work->stat |= 0x4;
|
||||||
|
}
|
||||||
|
if(work->time >= 75) {
|
||||||
|
work->type = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(work->time == 1) {
|
||||||
|
if(work->work_s16[1] == 1) {
|
||||||
|
HuAudFXPlay(37);
|
||||||
|
} else {
|
||||||
|
HuAudFXPlay(40);
|
||||||
|
}
|
||||||
|
MGSeqPauseEnableCtrl(0);
|
||||||
|
work->stat |= 0x10;
|
||||||
|
}
|
||||||
|
if(work->time <= 20) {
|
||||||
|
for(i=1; i<4; i++) {
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
time = work->time;
|
||||||
|
scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0));
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
HuSprAttrReset(work->spr_grp[0], j, SPRITE_ATTR_HIDDEN);
|
||||||
|
pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56));
|
||||||
|
HuSprPosSet(work->spr_grp[0], j, pos_x, work->y);
|
||||||
|
HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0)));
|
||||||
|
}
|
||||||
|
if(time == 20.0f){
|
||||||
|
for(i=1; i<4; i++) {
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
HuSprAttrReset(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if(work->time > 80 && work->time < 160) {
|
||||||
|
for(i=0; i<4; i++) {
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
s16 initF;
|
||||||
|
float dx, dy;
|
||||||
|
time = (work->time-80)-i;
|
||||||
|
if(time < 0 || time > 60) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(j*56);
|
||||||
|
dx = 28.0f+(work->x-(0.5f*(work->work_s16[3]*56)));
|
||||||
|
pos_y = work->y;
|
||||||
|
for(idx=initF=0; idx<time; idx++) {
|
||||||
|
if(!initF) {
|
||||||
|
pos_x -= 20.0f;
|
||||||
|
if(pos_x <= dx) {
|
||||||
|
pos_x = 28.0f+(work->x-(0.5f*(work->work_s16[3]*56)));
|
||||||
|
initF = 1;
|
||||||
|
dy = 25.0f;
|
||||||
|
dx = 10.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
pos_x += dx;
|
||||||
|
pos_y += dy;
|
||||||
|
dx += 0.1;
|
||||||
|
dy -= 2.0f;
|
||||||
|
if(pos_y < 0.0f) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HuSprPosSet(work->spr_grp[i], j, pos_x, pos_y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(work->time == 160) {
|
||||||
|
work->stat |= 0x4;
|
||||||
|
}
|
||||||
|
if(work->time >= 160) {
|
||||||
|
work->type = 0;
|
||||||
|
work->stat |= 0x8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case -1:
|
||||||
|
{
|
||||||
|
work->work_float[0] += seqSpeed*0.1f;
|
||||||
|
scale = 1.0f-work->work_float[0];
|
||||||
|
if(scale <= 0.0f) {
|
||||||
|
scale = 0.0f;
|
||||||
|
work->type = 0;
|
||||||
|
work->stat |= 0x8;
|
||||||
|
if(work->work_s16[1] == 0) {
|
||||||
|
MGSeqPauseEnableCtrl(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(idx=0; idx<work->work_s16[3]; idx++) {
|
||||||
|
HuSprTPLvlSet(work->spr_grp[0], idx, scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(seqDoneF || (work->stat & 0x8)) {
|
||||||
|
MGSeqSprKill(work);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int SeqUpdateMG2vs2(SeqWork *work)
|
||||||
|
{
|
||||||
|
s16 idx;
|
||||||
|
float scale;
|
||||||
|
if(work->param[0] != 0 && work->type != -1) {
|
||||||
|
switch(work->param[0]) {
|
||||||
|
case 2:
|
||||||
|
if(work->param[1] != -1) {
|
||||||
|
(void)work; //HACK: to introduce extra branch
|
||||||
|
} else {
|
||||||
|
work->type = -1;
|
||||||
|
work->work_float[0] = 0.0f;
|
||||||
|
}
|
||||||
|
work->param[0] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
work->time_max = work->param[1];
|
||||||
|
work->param[0] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
work->type = 1;
|
||||||
|
work->param[0] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
work->param[0] = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(work->type == 2) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
work->time += seqSpeed;
|
||||||
|
if(work->time >= work->time_max && work->type != -1) {
|
||||||
|
work->stat |= 0x4;
|
||||||
|
work->type = -1;
|
||||||
|
work->work_float[0] = 0.0f;
|
||||||
|
}
|
||||||
|
if(work->type) {
|
||||||
|
switch(work->type) {
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
static s16 letterOfs[] = {
|
||||||
|
-10, -50,
|
||||||
|
0, -30,
|
||||||
|
5, -60,
|
||||||
|
-10, 60,
|
||||||
|
8, -40,
|
||||||
|
5, 50,
|
||||||
|
-10, 20
|
||||||
|
};
|
||||||
|
|
||||||
|
float pos_x;
|
||||||
|
float time;
|
||||||
|
s16 i;
|
||||||
|
s16 j;
|
||||||
|
if(work->work_s16[1] == 0) {
|
||||||
|
if(work->time <= 30) {
|
||||||
|
time = work->time;
|
||||||
|
for(idx=0; idx<work->work_s16[3]; idx++) {
|
||||||
|
pos_x = (28.0f+(work->x-(0.5f*(work->scale_x*(work->work_s16[3]*56)))))+(idx*56);
|
||||||
|
HuSprPosSet(work->spr_grp[0], idx, pos_x+((1.0f-(time/30.0f))*letterOfs[(idx*2)]), work->y+((1.0f-(time/30.0f))*letterOfs[(idx*2)+1]));
|
||||||
|
HuSprTPLvlSet(work->spr_grp[0], idx, time/30.0f);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(work->time > 40 && work->time <= 60) {
|
||||||
|
time = work->time-40;
|
||||||
|
scale = 0.5*sin(((time*9.0f)*M_PI)/180.0);
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
pos_x = (28.0f*(scale+work->scale_x))+(work->x-(0.5f*((work->work_s16[3]*56)*(scale+work->scale_x))))+((j*56)*(scale+work->scale_x));
|
||||||
|
HuSprPosSet(work->spr_grp[0], j, pos_x, work->y);
|
||||||
|
HuSprScaleSet(work->spr_grp[0], j, work->scale_x+scale, work->scale_y+scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(work->time == 40) {
|
||||||
|
HuAudFXPlay(36);
|
||||||
|
work->stat |= 0x10;
|
||||||
|
}
|
||||||
|
if(work->time == 60) {
|
||||||
|
work->stat |= 0x4;
|
||||||
|
SeqPlayStartFX();
|
||||||
|
}
|
||||||
|
if(work->time >= 60) {
|
||||||
|
work->type = 0;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(work->time == 1) {
|
||||||
|
if(work->work_s16[1] == 1) {
|
||||||
|
HuAudFXPlay(37);
|
||||||
|
} else {
|
||||||
|
HuAudFXPlay(40);
|
||||||
|
}
|
||||||
|
MGSeqPauseEnableCtrl(0);
|
||||||
|
work->stat |= 0x10;
|
||||||
|
}
|
||||||
|
if(work->time <= 20) {
|
||||||
|
for(i=1; i<4; i++) {
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
HuSprAttrSet(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
time = work->time;
|
||||||
|
scale = work->scale_x+(0.5*sin((M_PI*(time*9.0f))/180.0));
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
HuSprAttrReset(work->spr_grp[0], j, SPRITE_ATTR_HIDDEN);
|
||||||
|
pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(j*56));
|
||||||
|
HuSprPosSet(work->spr_grp[0], j, pos_x, work->y);
|
||||||
|
HuSprScaleSet(work->spr_grp[0], j, work->scale_x+(sin((M_PI*(time*9.0f))/180.0)), work->scale_y+(sin((M_PI*(time*9.0f))/180.0)));
|
||||||
|
}
|
||||||
|
if(time == 20.0f) {
|
||||||
|
for(i=1; i<4; i++) {
|
||||||
|
for(j=0; j<work->work_s16[3]; j++) {
|
||||||
|
HuSprAttrReset(work->spr_grp[i], j, SPRITE_ATTR_HIDDEN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(work->time > 80 && work->time < 140) {
|
||||||
|
time = work->time-80;
|
||||||
|
for(idx=0; idx<work->work_s16[3]; idx++) {
|
||||||
|
float radius = (idx*56)-(((work->work_s16[3]-1)*56)/2);
|
||||||
|
float angle = (1.0f+(1.0f-(ABS(radius)/320.0f)))*720.0f;
|
||||||
|
float new_scale;
|
||||||
|
radius *= 1.0-(time/60.0f);
|
||||||
|
HuSprPosSet(work->spr_grp[0], idx, (radius*sin(M_PI*(((time/60.0f)*angle)+90.0f)/180.0))+work->x, (radius*cos(M_PI*(((time/60.0f)*angle)+90.0f)/180.0))+work->y);
|
||||||
|
HuSprZRotSet(work->spr_grp[0], idx, -(time/60.0f)*720.0f);
|
||||||
|
new_scale = 0.5+(0.5*(1.0f-(time/60.0f)));
|
||||||
|
HuSprScaleSet(work->spr_grp[0], idx, new_scale, new_scale);
|
||||||
|
HuSprTPLvlSet(work->spr_grp[0], idx, 1.0f-(time/60.0f));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(work->time == 140) {
|
||||||
|
work->stat |= 0x4;
|
||||||
|
}
|
||||||
|
if(work->time >= 150) {
|
||||||
|
work->type = 0;
|
||||||
|
work->stat |= 0x8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case -1:
|
||||||
|
{
|
||||||
|
work->work_float[0] += seqSpeed*0.1f;
|
||||||
|
scale = 1.0f-work->work_float[0];
|
||||||
|
if(scale <= 0.0f) {
|
||||||
|
scale = 0.0f;
|
||||||
|
work->type = 0;
|
||||||
|
work->stat |= 0x8;
|
||||||
|
if(work->work_s16[1] == 0) {
|
||||||
|
MGSeqPauseEnableCtrl(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(idx=0; idx<work->work_s16[3]; idx++) {
|
||||||
|
HuSprTPLvlSet(work->spr_grp[0], idx, scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(seqDoneF || (work->stat & 0x8)) {
|
||||||
|
MGSeqSprKill(work);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int SeqInitDraw(SeqWork *work, va_list params)
|
static int SeqInitDraw(SeqWork *work, va_list params)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue