Decompile to SeqInitMGCommon

This commit is contained in:
gamemasterplc 2024-01-28 14:31:50 -06:00
parent 929378e263
commit 43e77ce668
7 changed files with 325 additions and 8 deletions

View file

@ -695,7 +695,7 @@ MGSeqPauseKill = .text:0x8003F360; // type:function size:0xC
MGSeqPauseEnableCtrl = .text:0x8003F36C; // type:function size:0x40
MGSeqPracticeInit = .text:0x8003F3AC; // type:function size:0xDC
PracticeProc = .text:0x8003F488; // type:function size:0x234 scope:local
SeqSEPlay = .text:0x8003F6BC; // type:function size:0xD4 scope:local
SeqPlayStartFX = .text:0x8003F6BC; // type:function size:0xD4 scope:local
MGSeqPracticeExitCheck = .text:0x8003F790; // type:function size:0x128
espInit = .text:0x8003F8B8; // type:function size:0xA0
espEntry = .text:0x8003F958; // type:function size:0x1B0
@ -4953,7 +4953,7 @@ winWordTbl = .data:0x8012F580; // type:object size:0x18 scope:local
winPosOfs = .data:0x8012F598; // type:object size:0x50 scope:local
practiceTbl = .data:0x8012F5E8; // type:object size:0xAC scope:local
practicePosYTbl = .data:0x8012F694; // type:object size:0xC scope:local
seqFXTbl = .data:0x8012F6A0; // type:object size:0xF0 scope:local
seqStartFXTbl = .data:0x8012F6A0; // type:object size:0xF0 scope:local
lbl_8012F790 = .data:0x8012F790; // type:object size:0x15 data:string
lbl_8012F7A5 = .data:0x8012F7A5; // type:object size:0x10 data:string
lbl_8012F7B5 = .data:0x8012F7B5; // type:object size:0x13 data:string

View file

@ -14,7 +14,7 @@
#define SPRITE_ATTR_PAUSED 0x1
#define SPRITE_ATTR_LOOP 0x2
#define SPRITE_ATTR_HIDDEN 0x4
#define SPIRTE_ATTR_BILINEAR 0x8
#define SPRITE_ATTR_BILINEAR 0x8
#define SPRITE_ATTR_FUNC 0x10
#define SPRITE_ATTR_NOPAUSE 0x20
#define SPRITE_ATTR_REVERSE 0x40

View file

@ -478,12 +478,12 @@ static void TitleInit(void)
sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 2));
sprite = HuSprCreate(sprite_data, 2, 0);
HuSprGrpMemberSet(titleGroup, 2, sprite);
HuSprAttrSet(titleGroup, 2, SPRITE_ATTR_HIDDEN|SPIRTE_ATTR_BILINEAR);
HuSprAttrSet(titleGroup, 2, SPRITE_ATTR_HIDDEN|SPRITE_ATTR_BILINEAR);
HuSprPosSet(titleGroup, 2, 288, 380);
sprite_data = HuSprAnimReadFile(MAKE_DATA_NUM(DATADIR_TITLE, 9));
sprite = HuSprCreate(sprite_data, 0, 0);
HuSprGrpMemberSet(titleGroup, 3, sprite);
HuSprAttrSet(titleGroup, 3, SPRITE_ATTR_HIDDEN|SPIRTE_ATTR_BILINEAR);
HuSprAttrSet(titleGroup, 3, SPRITE_ATTR_HIDDEN|SPRITE_ATTR_BILINEAR);
HuSprPosSet(titleGroup, 3, 288, 200);
}

View file

@ -2023,7 +2023,7 @@ void BoardLast5GfxInit(void)
}
BoardSpriteCreate(spr_file, prio, NULL, &work->sprites[i]);
HuSprGrpMemberSet(work->group, i, work->sprites[i]);
HuSprAttrSet(work->group, i, SPIRTE_ATTR_BILINEAR);
HuSprAttrSet(work->group, i, SPRITE_ATTR_BILINEAR);
HuSprPosSet(work->group, i, last5GfxPosTbl[lastF][i][0], last5GfxPosTbl[lastF][i][1]);
}
if(!work->is_last) {

View file

@ -10,6 +10,8 @@
void MGSeqStub(void);
void MGSeqPauseEnableCtrl(s32 flag);
extern s16 HuSysVWaitGet(s16 param);
typedef struct seq_work SeqWork;
@ -888,6 +890,13 @@ static s32 SeqMakeWord(SeqWork *work, char *str, s16 flags)
return grp_idx;
}
static s32 SeqCloneWord(SeqWork *work, s16 grp_idx)
{
s16 i;
return i;
}
static AnimData *SeqLoadFontChar(char *str, s16 flags)
{
s32 data_num;
@ -943,4 +952,312 @@ static AnimData *SeqLoadFontChar(char *str, s16 flags)
list++;
}
return NULL;
}
static float ForceDefine480()
{
return 480.0f;
}
static void SeqPlayStartFX(void);
static int SeqInitMGBasic(SeqWork *work, va_list params)
{
s16 i;
s16 word_grp;
work->work_s16[1] = va_arg(params, int);
if(work->work_s16[1] == 2) {
return SeqInitDraw(work, params);
}
work->type = 0;
work->work_float[0] = 0;
{
s32 word_katakana;
s32 word_flag;
s32 word_ofs;
word_katakana = 0;
if(work->work_s16[1] == 2 && seqLanguage == 0) {
word_katakana = 1;
}
if(word_katakana) {
word_flag = 1;
} else {
word_flag = 0;
}
if(seqLanguage == 0) {
word_ofs = 0;
} else {
word_ofs = 3;
}
word_grp = SeqMakeWord(work, wordMgTbl[work->work_s16[1]+word_ofs], word_flag);
}
HuSprGrpPosSet(work->spr_grp[word_grp], 0.0f, 0.0f);
for(i=0; i<work->work_s16[3]; i++) {
HuSprTPLvlSet(work->spr_grp[word_grp], i, 1.0f);
HuSprPosSet(work->spr_grp[word_grp], i, -100.0f, 240.0f);
}
if(seqPauseF) {
work->type = 2;
HuSprAttrSet(word_grp, 0, SPRITE_ATTR_HIDDEN);
} else {
work->param[0] = 3;
}
return 1;
}
static int SeqUpdateMGBasic(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->type = -1;
work->work_float[0] = 0.0f;
}
if(work->type != 0) {
switch(work->type) {
case 1:
{
float pos_x;
float time;
s16 i;
if(work->work_s16[1] == 0) {
if(work->time <= 40) {
for(i=0; i<work->work_s16[3]; i++) {
time = work->time-((20/work->work_s16[3])*(work->work_s16[3]-i-1));
if(time < 0 || time > 20.0f) {
continue;
}
pos_x = (work->x-(0.5f*(work->work_s16[3]*56)))+28.0f+(i*56);
if(time == 20.0f) {
HuSprPosSet(work->spr_grp[0], i, pos_x, work->y);
HuSprZRotSet(work->spr_grp[0], i, 0.0f);
} else {
HuSprPosSet(work->spr_grp[0], i, pos_x-(((1.0-sin(((time*4.5f)*M_PI)/180.0))*(work->work_s16[3]*56*2))), work->y);
HuSprZRotSet(work->spr_grp[0], i, (time/20.0f)*390.0f);
}
}
} else {
time = work->time-40;
scale = work->scale_x+(0.5*sin(((time*9.0f)*M_PI)/180.0));
for(i=0; i<work->work_s16[3]; i++) {
pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(i*56));
HuSprPosSet(work->spr_grp[0], i, pos_x, work->y);
HuSprScaleSet(work->spr_grp[0], i, scale, work->scale_y+sin(((time*9.0f)*M_PI)/180.0));
}
}
if(work->time == 40) {
idx = HuAudFXPlay(36);
work->stat |= 0x10;
}
if(work->time == 60) {
SeqPlayStartFX();
work->stat |= 0x4;
}
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) {
time = work->time;
scale = work->scale_x+(0.5*sin(((time*9.0f)*M_PI)/180.0));
for(i=0; i<work->work_s16[3]; i++) {
HuSprAttrReset(work->spr_grp[0], i, SPRITE_ATTR_HIDDEN);
pos_x = ((28.0f*scale)+(work->x-(0.5f*(scale*(work->work_s16[3]*56)))))+(scale*(i*56));
HuSprPosSet(work->spr_grp[0], i, pos_x, work->y);
HuSprScaleSet(work->spr_grp[0], i, work->scale_x+sin(((time*9.0f)*M_PI)/180.0), work->scale_y+sin(((time*9.0f)*M_PI)/180.0));
}
if(time == 20.0f) {
for(i=0; i<work->work_s16[3]; i++) {
HuSprAttrReset(work->spr_grp[0], i, SPRITE_ATTR_HIDDEN);
}
}
} else {
if(work->time > 80) {
for(i=0; i<work->work_s16[3]; i++) {
time = (work->time-80)-((20/work->work_s16[3])*(work->work_s16[3]-i-1));
if(time < 0.0f || time > 20.0f) {
continue;
}
pos_x = (28.0f+(work->x-(0.5f*(work->work_s16[3]*56))))+(i*56);
if(time == 20.0f) {
HuSprAttrSet(work->spr_grp[0], i, SPRITE_ATTR_HIDDEN);
} else {
HuSprPosSet(work->spr_grp[0], i, pos_x+((1.0-cos(((time*4.5f)*M_PI)/180.0f))*(work->work_s16[3]*56*2)), work->y);
HuSprZRotSet(work->spr_grp[0], i, (time/20.0f)*390.0f);
}
}
}
}
if(work->time == 110) {
work->stat |= 0x4;
}
if(work->time >= 110) {
work->type = 0;
work->stat |= 8;
}
}
}
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 SeqInitMGCommon(SeqWork *work, va_list params)
{
s16 i;
float tp_lvl;
s16 j;
s16 word_grp;
work->work_s16[1] = va_arg(params, int);
if(work->work_s16[1] == 2) {
return SeqInitDraw(work, params);
}
work->type = 0;
work->work_float[0] = 0;
tp_lvl = 1.0f;
for(i=0; i<4; i++) {
if(i == 0)
{
s32 word_katakana;
s32 word_flag;
s32 word_ofs;
word_katakana = 0;
if(work->work_s16[1] == 2 && seqLanguage == 0) {
word_katakana = 1;
}
if(word_katakana) {
word_flag = 1;
} else {
word_flag = 0;
}
if(seqLanguage == 0) {
word_ofs = 0;
} else {
word_ofs = 3;
}
word_grp = SeqMakeWord(work, wordMgTbl[work->work_s16[1]+word_ofs], word_flag);
} else {
s16 grp_idx;
s32 new_grp;
for(grp_idx=0; grp_idx<16; grp_idx++) {
if(work->spr_grp[grp_idx] == -1) {
break;
}
}
if(grp_idx == 16) {
new_grp = -1;
} else {
work->spr_grp[grp_idx] = HuSprGrpCopy(work->spr_grp[word_grp]);
new_grp = grp_idx;
}
(void)new_grp;
word_grp = new_grp;
}
HuSprGrpPosSet(work->spr_grp[word_grp], 0.0f, 0.0f);
for(j=0; j<work->work_s16[3]; j++) {
HuSprTPLvlSet(work->spr_grp[word_grp], j, tp_lvl);
HuSprPosSet(work->spr_grp[word_grp], j, -100.0f, 240.0f);
HuSprPriSet(work->spr_grp[word_grp], j, i+5);
HuSprAttrSet(work->spr_grp[word_grp], i, SPRITE_ATTR_BILINEAR);
}
if(i == 0) {
tp_lvl -= 0.5;
} else {
tp_lvl -= 0.1f;
}
}
if(seqPauseF) {
work->type = 2;
HuSprAttrSet(word_grp, 0, SPRITE_ATTR_HIDDEN);
} else {
work->param[0] = 3;
}
return 1;
}
static int SeqInitDraw(SeqWork *work, va_list params)
{
}
static void SeqPlayStartFX(void)
{
}
void MGSeqPauseEnableCtrl(s32 flag)
{
}

View file

@ -675,7 +675,7 @@ void HuSprSprBGSet(short sprite, AnimData *bg, short bg_bank)
sprite_ptr->bg = bg;
sprite_ptr->bg_bank = bg_bank;
sprite_ptr->wrap_t = sprite_ptr->wrap_s = GX_REPEAT;
sprite_ptr->attr &= ~SPIRTE_ATTR_BILINEAR;
sprite_ptr->attr &= ~SPRITE_ATTR_BILINEAR;
}
void AnimDebug(AnimData *anim)

View file

@ -123,7 +123,7 @@ void HuSprDisp(SpriteData *sprite)
continue;
}
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
HuSprTexLoad(anim, layer->bmpNo, 0, sprite->wrap_s, sprite->wrap_t, (sprite->attr & SPIRTE_ATTR_BILINEAR) ? GX_LINEAR : GX_NEAR);
HuSprTexLoad(anim, layer->bmpNo, 0, sprite->wrap_s, sprite->wrap_t, (sprite->attr & SPRITE_ATTR_BILINEAR) ? GX_LINEAR : GX_NEAR);
if(layer->alpha != 255 || color_sum != 255*4) {
color.a = (u16)(sprite->a*layer->alpha) >> 8;
GXSetTevColor(GX_TEVSTAGE1, color);