From a25ab62f73336580c6d7dccb9ec4f135aacc3630 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 28 Jan 2024 09:46:31 -0600 Subject: [PATCH 1/2] Do more work on minigame_seq.c --- config/GMPE01_00/symbols.txt | 2 +- src/game/minigame_seq.c | 722 ++++++++++++++++++++++++++++++++--- 2 files changed, 673 insertions(+), 51 deletions(-) diff --git a/config/GMPE01_00/symbols.txt b/config/GMPE01_00/symbols.txt index c220eeb8..c05a472b 100644 --- a/config/GMPE01_00/symbols.txt +++ b/config/GMPE01_00/symbols.txt @@ -5784,7 +5784,7 @@ lbl_801D34B0 = .sdata:0x801D34B0; // type:object size:0x1 lbl_801D34B1 = .sdata:0x801D34B1; // type:object size:0x7 mgSeqInitF = .sdata:0x801D34B8; // type:object size:0x4 data:4byte wordStartE = .sdata:0x801D34BC; // type:object size:0x7 scope:local data:string -punctTbl = .sdata:0x801D34C3; // type:object size:0x3 scope:local data:byte +seqPunctTbl = .sdata:0x801D34C3; // type:object size:0x3 scope:local data:byte wordStartJ = .sdata:0x801D34C6; // type:object size:0x6 scope:local wordFinishJ = .sdata:0x801D34CC; // type:object size:0x8 scope:local wordDrawJ = .sdata:0x801D34D4; // type:object size:0x6 scope:local diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index d3ecb1cd..eb60aeb4 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -2,10 +2,14 @@ #include "game/sprite.h" #include "game/process.h" #include "game/gamework_data.h" +#include "game/objsub.h" #include "game/hsfman.h" +#include "math.h" #include "stdarg.h" +void MGSeqStub(void); + extern s16 HuSysVWaitGet(s16 param); typedef struct seq_work SeqWork; @@ -28,7 +32,7 @@ typedef struct seq_work { s16 work_s16[4]; s16 param[2]; s16 type; - s16 sprite_grp[16]; + s16 spr_grp[16]; s16 sprite[16]; u8 seq_no; u8 stat; @@ -126,51 +130,6 @@ static char lbl_8012F336[] = { static char lbl_8012F389[] = "x first\n"; static char lbl_8012F392[] = "y first\n"; -static char seqFontAlphaTbl[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - -static char seqFontKanaTbl[] = { - 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, - 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, - 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, - 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, - 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, - 0xD9, 0xDA, 0xDB, 0xDC, 0xA6, 0xDD, 0xA7, 0xA8, - 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB6, - 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, - 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xCA, 0xCB, - 0xCC, 0xCD, 0xCE, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, - 0xB0, 0x00 -}; - -static char seqFontNumTbl[] = "0123456789"; - - -static s32 *letterBufTbl[5] = { }; - -static char wordStartE[] = "START!"; - -static char punctTbl[] = "!?"; - -static char wordStartJ[] = { - 0xBD, 0xC0, 0xB0, 0xC4, 0x21, 0x00 -}; - -static char wordFinishJ[] = { - 0xCC, 0xA8, 0xC6, 0xAF, 0xBC, 0xAD, 0x21, 0x00 -}; - -static char wordDrawJ[] = { - 0xCB, 0xB7, 0xDC, 0xB9, 0x21, 0x00 -}; - -static char wordFinishE[] = "FINISH!"; -static char wordDrawE[] = "DRAW!"; - -static char *wordMgTbl[6] = { - wordStartJ, wordFinishJ, wordDrawJ, - wordStartE, wordFinishE, wordDrawE, -}; - static s16 seqMaxTime[8]; static SeqWork seqWorkData[8]; @@ -295,7 +254,7 @@ static s16 CreateSeq(u8 seq_no, va_list params) work->work_float[0] = work->work_float[1] = 0.0f; work->param[0] = work->param[1] = 0; for(temp=0; temp<16; temp++) { - work->sprite[temp] = work->sprite_grp[temp] = -1; + work->sprite[temp] = work->spr_grp[temp] = -1; } if(NULL != info->init) { temp = info->init(work, params); @@ -304,8 +263,671 @@ static s16 CreateSeq(u8 seq_no, va_list params) return -1; } } - { - seqTimer = 30; - return i; + seqTimer = 30; + return i; +} + +s16 MGSeqCreate(s16 type, ...) +{ + s16 ret; + va_list params; + va_start(params, type); + if(type == 3) { + if(GWSystem.mg_next == 0xFFFF) { + type = 8; + } else { + type = mgSeqTypeTbl[mgInfoTbl[GWSystem.mg_next].type]; + } + } + //FIXME: Fix truncation of type + ret = CreateSeq(type, params); + va_end(params); + return ret; +} + +u8 MGSeqStatGet(s16 id) +{ + SeqWork *work; + u8 ret = 0; + if(id < 0) { + int i; + work = seqWorkData; + for(i=8; i != 0; i--, work++) { + ret |= work->stat; + } + } else { + if(id < 8) { + ret = seqWorkData[id].stat; + } + } + return ret; +} + +void MGSeqPosSet(s16 id, float x, float y) +{ + if(id >= 0 && id < 8) { + seqWorkData[id].x = x; + seqWorkData[id].y = y; } } + +void MGSeqParamSet(s16 id, s16 param1, s16 param2) +{ + if(id >= 0 && id < 8) { + seqWorkData[id].param[0] = param1; + seqWorkData[id].param[1] = param2; + } +} + +void MGSeqKill(s16 id, s16 param1, s16 param2) +{ + if(id >= 0 && id < 8) { + if(seqWorkData[id].stat != 0) { + seqWorkData[id].stat = 8; + } + } +} + +void MGSeqKillAll(s16 id, s16 param1, s16 param2) +{ + seqDoneF = 1; + MGSeqMain(); + seqDoneF = 0; + MGSeqStub(); + lbl_801D3D94 = 0; +} + +s32 MGSeqDoneCheck(void) +{ + u8 stat = MGSeqStatGet(-1); + if(stat == 0 || (stat & 0xC)) { + if(seqTimer <= 0 || (stat & 0x8)) { + return 1; + } + } + return 0; +} + +void MGSeqStub(void) +{ + +} + +void MGSeqSprKill(SeqWork *work) +{ + int i; + for(i=0; i<16; i++) { + if(work->spr_grp[i] >= 0) { + HuSprGrpKill(work->spr_grp[i]); + } + if(work->sprite[i] >= 0) { + HuSprKill(work->sprite[i]); + } + } +} + +static void *SeqReadFile(s32 file) +{ + return HuAR_ARAMtoMRAMFileRead(file, MEMORY_DEFAULT_NUM, HEAP_DATA); +} + +static int SeqInitTimer(SeqWork *work, va_list params) +{ + AnimData *spr_anim; + s16 sprite; + s16 spr_grp; + int duration, x, y; + s16 i; + + duration = va_arg(params, int); + x = va_arg(params, int); + y = va_arg(params, int); + if(duration <= 0 && duration > 99) { + duration = 99; + } + work->work_s16[0] = duration; + if(x >= 0) { + work->x = x; + } + if(y >= 0) { + work->y = y; + } + work->work_s16[2] = 0; + work->work_s16[1] = 2; + work->work_float[0] = 0; + work->spr_grp[0] = spr_grp = HuSprGrpCreate(4); + HuSprGrpScaleSet(spr_grp, work->scale_x, work->scale_y); + spr_anim = HuSprAnimRead(SeqReadFile(MAKE_DATA_NUM(DATADIR_GAMEMES, 2))); + x = 12; + for(i=0; i<2; i++) { + sprite = HuSprCreate(spr_anim, 5, 0); + HuSprGrpMemberSet(spr_grp, i, sprite); + HuSprSpeedSet(spr_grp, i, 0); + HuSprPosSet(spr_grp, i, x, 0); + HuSprColorSet(spr_grp, i, 112, 233, 255); + x -= 24; + (void)i; //Hack for Matching + } + spr_anim = HuSprAnimRead(SeqReadFile(MAKE_DATA_NUM(DATADIR_GAMEMES, 1))); + sprite = HuSprCreate(spr_anim, 7, 0); + HuSprGrpMemberSet(spr_grp, 2, sprite); + HuSprPosSet(spr_grp, 2, 0, 0); + HuSprTPLvlSet(spr_grp, 2, 0.5f); + HuSprColorSet(spr_grp, 2, 0, 0, 0); + spr_anim = HuSprAnimRead(SeqReadFile(MAKE_DATA_NUM(DATADIR_GAMEMES, 0))); + sprite = HuSprCreate(spr_anim, 6, 0); + HuSprGrpMemberSet(spr_grp, 3, sprite); + HuSprPosSet(spr_grp, 3, 0, 0); + if(seqPauseF) { + work->work_s16[1] = 1; + for(i=0; i<2; i++) { + HuSprAttrSet(spr_grp, i, SPRITE_ATTR_HIDDEN); + (void)i; //Hack for Matching + } + } + return 1; +} + +static int SeqUpdateTimer(SeqWork *work) +{ + float scale; + float tp_lvl; + u8 digits[2]; + s16 i; + s16 spr_grp = work->spr_grp[0]; + if(work->param[0] != 0 && work->work_s16[1] != -1) { + switch(work->param[0]) { + case 2: + switch(work->param[1]) { + case -1: + work->stat |= 0x4; + work->work_s16[1] = -1; + work->work_float[0] = 0.0f; + break; + + case 0: + work->work_s16[1] = 2; + work->work_float[0] = 0.0f; + break; + + case 1: + work->work_s16[1] = 3; + work->work_float[0] = 0.0f; + break; + + default: + break; + } + work->param[0] = 0; + break; + + case 1: + if(work->param[1] < 0 && !(work->stat & 0x4)) { + work->stat |= 0x4; + work->work_s16[1] = -1; + work->work_float[0] = 0.0f; + } else { + if(work->param[1] > 99) { + work->work_s16[0] = 99; + } else { + if(work->work_s16[0] != work->param[1]) { + work->work_s16[0] = work->param[1]; + if(work->param[1] <= 5) { + HuAudFXPlay(6); + work->work_s16[1] = 3; + work->work_float[0] = 0.0f; + HuSprColorSet(spr_grp, 0, 255, 112, 160); + HuSprColorSet(spr_grp, 1, 255, 112, 160); + } else { + HuSprColorSet(spr_grp, 0, 112, 233, 255); + HuSprColorSet(spr_grp, 1, 112, 233, 255); + } + } + } + } + work->param[0] = 0; + break; + + case 3: + for(i=0; i<2; i++) { + HuSprAttrReset(spr_grp, i, SPRITE_ATTR_HIDDEN); + } + work->work_s16[1] = 3; + work->param[0] = 0; + break; + + default: + work->param[0] = 0; + break; + } + } + if(work->work_s16[1] == 1) { + return 1; + } + if(work->work_s16[0] > 99) { + digits[0] = digits[1] = 9; + } else { + s32 value; + value = work->work_s16[0]/10; + digits[1] = value; + digits[0] = work->work_s16[0]-(value*10); + } + HuSprGrpPosSet(spr_grp, work->x, work->y); + HuSprGrpScaleSet(spr_grp, work->scale_x, work->scale_y); + for(i=0; i<2; i++) { + HuSprBankSet(spr_grp, i, digits[i]); + } + if(work->work_s16[1] != 0) { + switch(work->work_s16[1]) { + case 2: + { + float scale_x, scale_y; + scale = fabs(((sin((work->work_float[0]*M_PI)/180)*5.0f)+1.0f)-(sin((130*M_PI)/180)*5.0f)); + scale_x = work->scale_x*scale; + scale_y = work->scale_y*scale; + work->work_float[0] += seqSpeed*5.0f; + if(work->work_float[0] > 130.0f) { + work->work_s16[1] = 0; + break; + } + HuSprGrpScaleSet(spr_grp, scale_x, scale_y); + } + break; + + case 3: + { + scale = sin((work->work_float[0]*M_PI)/180)+1.0; + tp_lvl = 1.0-(sin((work->work_float[0]*M_PI)/180)*0.5); + work->work_float[0] += seqSpeed*18.0f; + if(work->work_float[0] > 180.0f) { + work->work_s16[1] = 0; + scale = 1.0f; + tp_lvl = 1.0f; + } + for(i=0; i<2; i++) { + HuSprScaleSet(spr_grp, i, scale, scale); + HuSprTPLvlSet(spr_grp, i, tp_lvl); + } + } + break; + + case -1: + HuSprGrpScaleSet(spr_grp, work->scale_x, work->scale_y); + for(i=0; i<2; i++) { + HuSprScaleSet(spr_grp, i, 1.0f, 1.0f); + } + work->work_float[0] += 1.0f; + if(work->work_float[0] < 60.0f) { + break; + } + tp_lvl = 1.0-((work->work_float[0]-60.0f)/20.0f); + if(tp_lvl <= 0.0f) { + tp_lvl = 0.0f; + work->work_s16[1] = 0; + work->stat |= 0x8; + } + + for(i=0; i<4; i++) { + HuSprTPLvlSet(spr_grp, i, tp_lvl); + } + break; + + default: + break; + } + } + if(seqDoneF || (work->stat & 0x8)) { + MGSeqSprKill(work); + return 0; + } else { + return 1; + } +} + +static int SeqInitType2(SeqWork *work, va_list params) +{ + s16 spr_idx; + s16 spr_grp; + AnimData *anim_tbl[6]; + s32 i; + s16 len; + char *str; + char c; + int time_max; + int x, y; + work->data = va_arg(params, void *); + time_max = va_arg(params, int); + x = va_arg(params, int); + y = va_arg(params, int); + if(time_max < 0) { + time_max = -1; + } + work->time_max = time_max; + if(x >= 0) { + work->x = x; + } + if(y >= 0) { + work->y = y; + } + work->work_s16[1] = 0; + work->work_float[0] = 0.0f; + x = 0; + len = 0; + str=work->data; + while(c=*str++) { + if(c >= '0' && c <= '9') { + x |= 1; + len++; + } else if(c >= 'A' && c <= 'Z') { + x |= 2; + len++; + } else if(c >= 'a' && c <= 'z') { + x |= 4; + len++; + } else if(c == '!' || c == '?') { + x |= 8; + len++; + } + } + work->work_s16[3] = len; + for(i=0; i<6; i++) { + if(x & (1 << i)) { + anim_tbl[i] = HuSprAnimRead(SeqReadFile(seqType2SprTbl[i])); + } else { + anim_tbl[i] = NULL; + } + } + work->spr_grp[0] = spr_grp = HuSprGrpCreate(len); + x = 0; + spr_idx = 0; + str=work->data; + while(c=*str++) { + i = -2; + if(c >= '0' && c <= '9') { + c -= '0'; + i = 0; + } else if(c >= 'A' && c <= 'Z') { + c -= 'A'; + i = 1; + } else if(c >= 'a' && c <= 'z') { + c -= 'a'; + i = 2; + } else if(c == '!' || c == '?') { + if(c == '!') { + c = 0; + } else { + c = 1; + } + i = 3; + } else if(c == ' ') { + i = -1; + } + work->work_s16[2] = x; + if(i == -1) { + x += 32; + } else if(i >= 0) { + s16 sprite = HuSprCreate(anim_tbl[i], 5, c); + HuSprGrpMemberSet(spr_grp, spr_idx, sprite); + HuSprSpeedSet(spr_grp, spr_idx, 0.0f); + HuSprPosSet(spr_grp, spr_idx, x, 0.0f); + spr_idx++; + x += 64; + } + } + if(seqPauseF) { + work->work_s16[1] = 1; + for(i=0; iwork_s16[3]; i++) { + HuSprAttrSet(spr_grp, i, SPRITE_ATTR_HIDDEN); + } + } + return 1; +} + +static int SeqUpdateType2(SeqWork *work) +{ + float tp_lvl; + s16 spr_grp; + spr_grp = work->spr_grp[0]; + HuSprGrpPosSet(spr_grp, work->x-((0.5f*work->scale_x)*work->work_s16[2]), work->y); + HuSprGrpScaleSet(spr_grp, work->scale_x, work->scale_y); + if(work->param[0] != 0 && work->work_s16[1] != -1) { + switch(work->param[0]) { + case 2: + if(work->param[1] != -1) { + (void)work; //HACK: to introduce extra branch + } else { + work->work_s16[1] = -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: + { + s32 i; + for(i=0; iwork_s16[3]; i++) { + HuSprAttrReset(spr_grp, i, SPRITE_ATTR_HIDDEN); + (void)i; + } + work->work_s16[1] = 0; + work->param[0] = 0; + } + break; + + default: + work->param[0] = 0; + break; + } + } + if(work->work_s16[1] == 1) { + return 1; + } + work->time += seqSpeed; + if(work->time >= work->time_max && work->work_s16[1] != -1) { + work->stat |= 0x4; + work->work_s16[1] = -1; + work->work_float[0] = 0.0f; + } + if(work->work_s16[1] != 0) { + if(work->work_s16[1] != -1) { + (void)work; //HACK: to introduce extra branch + } else { + s16 i; + work->work_float[0] += seqSpeed*0.1f; + tp_lvl = 1.0f-work->work_float[0]; + if(tp_lvl <= 0.0f) { + tp_lvl = 0.0f; + work->work_s16[1] = 0; + work->stat |= 0x8; + } + for(i=0; iwork_s16[3]; i++) { + HuSprTPLvlSet(spr_grp, i, tp_lvl); + (void)i; + } + } + } + if(seqDoneF || (work->stat & 0x8)) { + MGSeqSprKill(work); + return 0; + } else { + return 1; + } +} + + +static char seqFontAlphaTbl[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +static char seqFontKanaTbl[] = { + 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, + 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, + 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, + 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, + 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, + 0xD9, 0xDA, 0xDB, 0xDC, 0xA6, 0xDD, 0xA7, 0xA8, + 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB6, + 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, + 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xCA, 0xCB, + 0xCC, 0xCD, 0xCE, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, + 0xB0, 0x00 +}; + +static char seqFontNumTbl[] = "0123456789"; + +static s32 *letterBufTbl[5] = { }; + +static char wordStartE[] = "START!"; + +static char seqPunctTbl[] = "!?"; + +static char wordStartJ[] = { + 0xBD, 0xC0, 0xB0, 0xC4, 0x21, 0x00 +}; + +static char wordFinishJ[] = { + 0xCC, 0xA8, 0xC6, 0xAF, 0xBC, 0xAD, 0x21, 0x00 +}; + +static char wordDrawJ[] = { + 0xCB, 0xB7, 0xDC, 0xB9, 0x21, 0x00 +}; + +static char wordFinishE[] = "FINISH!"; +static char wordDrawE[] = "DRAW!"; + +static char *wordMgTbl[6] = { + wordStartJ, wordFinishJ, wordDrawJ, + wordStartE, wordFinishE, wordDrawE, +}; + +void fn_80036BC8(void) +{ + if(!letterBufTbl[0]) { + letterBufTbl[0] = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(s32)*strlen(seqFontAlphaTbl)); + memset(letterBufTbl[0], 0, sizeof(s32)*strlen(seqFontAlphaTbl)); + } + if(!letterBufTbl[1]) { + letterBufTbl[1] = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(s32)*strlen(seqFontKanaTbl)); + memset(letterBufTbl[1], 0, sizeof(s32)*strlen(seqFontKanaTbl)); + } + if(!letterBufTbl[2]) { + letterBufTbl[2] = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(s32)*strlen(seqFontKanaTbl)); + memset(letterBufTbl[2], 0, sizeof(s32)*strlen(seqFontKanaTbl)); + } + if(!letterBufTbl[3]) { + letterBufTbl[3] = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(s32)*strlen(seqFontNumTbl)); + memset(letterBufTbl[3], 0, sizeof(s32)*strlen(seqFontNumTbl)); + } + if(!letterBufTbl[4]) { + letterBufTbl[4] = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(s32)*strlen(seqPunctTbl)); + memset(letterBufTbl[4], 0, sizeof(s32)*strlen(seqPunctTbl)); + } +} + +static AnimData *SeqLoadFontChar(char *str, s16 flags); + +static s32 SeqMakeWord(SeqWork *work, char *str, s16 flags) +{ + s16 *char_pos; + char *str_ptr; + s16 spr_grp; + s16 i; + s16 x; + s16 grp_idx; + s16 len; + AnimData **char_anim; + for(grp_idx=0; grp_idx<16; grp_idx++) { + if(work->spr_grp[grp_idx] == -1) { + break; + } + } + if(grp_idx == 16) { + return -1; + } + char_anim = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(AnimData *)*100); + char_pos = HuMemDirectMalloc(HEAP_SYSTEM, sizeof(s16)*100); + str_ptr = str; + x = 0; + len = 0; + while(*str_ptr != 0) { + char_anim[len] = SeqLoadFontChar(str_ptr, flags); + if(char_anim[len]) { + char_pos[len] = x; + x += 56; + len++; + } + str_ptr++; + } + work->spr_grp[grp_idx] = spr_grp = HuSprGrpCreate(len); + x = (x/2)-28; + for(i=0; iwork_s16[3] = len; + HuMemDirectFree(char_anim); + HuMemDirectFree(char_pos); + return grp_idx; +} + +static AnimData *SeqLoadFontChar(char *str, s16 flags) +{ + s32 data_num; + s16 id; + char *list; + char c = *str; + if(c == 222 || c == 223) { + return NULL; + } + if(c == 32) { + return HuSprAnimRead(SeqReadFile(MAKE_DATA_NUM(DATADIR_GAMEMES, 10))); + } + for(id = 0, list=seqFontAlphaTbl; *list != 0; id++, list++) { + if(*list == c) { + data_num = MAKE_DATA_NUM(DATADIR_GAMEMES, id+21); + return HuSprAnimRead(SeqReadFile(data_num)); + } + } + for(id = 0, list=seqFontNumTbl; *list != 0; id++, list++) { + if(*list == c) { + data_num = MAKE_DATA_NUM(DATADIR_GAMEMES, id+11); + return HuSprAnimRead(SeqReadFile(data_num)); + } + } + for(id = 0, list=seqPunctTbl; *list != 0; id++, list++) { + if(*list == c) { + data_num = MAKE_DATA_NUM(DATADIR_GAMEMES, id+154); + return HuSprAnimRead(SeqReadFile(data_num)); + } + } + if(str[1] == 222) { + list = seqFontKanaTbl; + list += 55; + id = 55; + } else if(str[1] == 223) { + list = seqFontKanaTbl; + list += 75; + id = 75; + } else { + list = seqFontKanaTbl; + id = 0; + } + while(*list != 0) { + if(*list == c) { + if(flags & 0x1) { + data_num = MAKE_DATA_NUM(DATADIR_GAMEMES, id+156); + } else { + data_num = MAKE_DATA_NUM(DATADIR_GAMEMES, id+73); + } + return HuSprAnimRead(SeqReadFile(data_num)); + } + id++; + list++; + } + return NULL; +} \ No newline at end of file From 929378e263086f4f065585294e0d098861f61019 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 28 Jan 2024 09:53:39 -0600 Subject: [PATCH 2/2] Reformat Some minigame_seq variables seqFontAlphaTbl, seqFontNumTbl, and seqPunctTbl are no longer string literals --- src/game/minigame_seq.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/game/minigame_seq.c b/src/game/minigame_seq.c index eb60aeb4..42bf3c44 100644 --- a/src/game/minigame_seq.c +++ b/src/game/minigame_seq.c @@ -760,7 +760,15 @@ static int SeqUpdateType2(SeqWork *work) } -static char seqFontAlphaTbl[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; +static char seqFontAlphaTbl[] = { + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', + 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', + 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', + 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', + 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', + 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', + 'w', 'x', 'y', 'z', '\0' +}; static char seqFontKanaTbl[] = { 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, @@ -776,13 +784,18 @@ static char seqFontKanaTbl[] = { 0xB0, 0x00 }; -static char seqFontNumTbl[] = "0123456789"; +static char seqFontNumTbl[] = { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', '\0' +}; static s32 *letterBufTbl[5] = { }; static char wordStartE[] = "START!"; -static char seqPunctTbl[] = "!?"; +static char seqPunctTbl[] = { + '!', '?', '\0' +}; static char wordStartJ[] = { 0xBD, 0xC0, 0xB0, 0xC4, 0x21, 0x00