diff --git a/progress/report.json b/progress/report.json index e87585f..5f91a09 100644 --- a/progress/report.json +++ b/progress/report.json @@ -1,15 +1,15 @@ { "measures": { - "fuzzy_match_percent": 59.069077, + "fuzzy_match_percent": 59.834522, "total_code": "342284", - "matched_code": "202184", - "matched_code_percent": 59.06908, + "matched_code": "204804", + "matched_code_percent": 59.834522, "total_data": "26260848", "matched_data": "26147980", "matched_data_percent": 99.570206, "total_functions": 1429, - "matched_functions": 1091, - "matched_functions_percent": 76.34709, + "matched_functions": 1105, + "matched_functions_percent": 77.326805, "total_units": 70 }, "units": [ @@ -3160,16 +3160,16 @@ { "name": "main/drawctrl", "measures": { - "fuzzy_match_percent": 67.41521, + "fuzzy_match_percent": 72.711784, "total_code": "25828", - "matched_code": "17412", - "matched_code_percent": 67.41521, + "matched_code": "18780", + "matched_code_percent": 72.711784, "total_data": "12376", "matched_data": "7872", "matched_data_percent": 63.606983, "total_functions": 98, - "matched_functions": 87, - "matched_functions_percent": 88.77551, + "matched_functions": 91, + "matched_functions_percent": 92.85714, "total_units": 1 }, "sections": [ @@ -3207,7 +3207,7 @@ { "name": ".text", "size": "25992", - "fuzzy_match_percent": 67.41521, + "fuzzy_match_percent": 72.711784, "metadata": {} } ], @@ -3542,6 +3542,7 @@ { "name": "DrawObjTapCtrl", "size": "252", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "13552" }, @@ -3581,6 +3582,7 @@ { "name": "DrawMozaikuDisp", "size": "164", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "16576" }, @@ -3606,6 +3608,7 @@ { "name": "DrawNoodlesDisp", "size": "616", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "18160" }, @@ -3654,6 +3657,7 @@ { "name": "DrawScenectrlReq", "size": "336", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "19304" }, @@ -6811,16 +6815,16 @@ { "name": "menu/menusub", "measures": { - "fuzzy_match_percent": 23.582188, + "fuzzy_match_percent": 25.284107, "total_code": "73564", - "matched_code": "17348", - "matched_code_percent": 23.582188, + "matched_code": "18600", + "matched_code_percent": 25.284105, "total_data": "51456", "matched_data": "38576", "matched_data_percent": 74.9689, "total_functions": 165, - "matched_functions": 78, - "matched_functions_percent": 47.272728, + "matched_functions": 88, + "matched_functions_percent": 53.333336, "total_units": 1 }, "sections": [ @@ -6858,7 +6862,7 @@ { "name": ".text", "size": "73904", - "fuzzy_match_percent": 23.582188, + "fuzzy_match_percent": 25.284107, "metadata": {} } ], @@ -6989,6 +6993,7 @@ { "name": "TsBGMPause", "size": "44", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "1872" }, @@ -7008,6 +7013,7 @@ { "name": "TsCmnPkOpen", "size": "96", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "2832" }, @@ -7066,6 +7072,7 @@ { "name": "TSNumRBack", "size": "52", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "4496" }, @@ -7086,6 +7093,7 @@ { "name": "TsMENU_GetMapNo", "size": "140", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "4632" }, @@ -7131,6 +7139,7 @@ { "name": "TsMENU_EndSystem", "size": "52", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "7520" }, @@ -7158,6 +7167,7 @@ { "name": "TsMenu_InitFlow", "size": "180", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "8720" }, @@ -7171,6 +7181,7 @@ { "name": "TsMenu_Flow", "size": "112", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "9008" }, @@ -7215,6 +7226,7 @@ { "name": "GetRankScoreID", "size": "356", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "12528" }, @@ -7433,6 +7445,7 @@ { "name": "TsCMPMes_Draw", "size": "192", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "33464" }, @@ -7484,6 +7497,7 @@ { "name": "TsPopCusDim", "size": "28", + "fuzzy_match_percent": 100.0, "metadata": {}, "address": "35240" }, @@ -13638,32 +13652,32 @@ { "id": "main", "measures": { - "fuzzy_match_percent": 89.60302, + "fuzzy_match_percent": 90.705925, "total_code": "124036", - "matched_code": "111140", - "matched_code_percent": 89.60302, + "matched_code": "112508", + "matched_code_percent": 90.705925, "total_data": "142100", "matched_data": "105132", "matched_data_percent": 73.98451, "total_functions": 570, - "matched_functions": 550, - "matched_functions_percent": 96.49123, + "matched_functions": 554, + "matched_functions_percent": 97.192986, "total_units": 17 } }, { "id": "menu", "measures": { - "fuzzy_match_percent": 45.23735, + "fuzzy_match_percent": 46.327446, "total_code": "114852", - "matched_code": "51956", - "matched_code_percent": 45.237347, + "matched_code": "53208", + "matched_code_percent": 46.327446, "total_data": "93716", "matched_data": "45092", "matched_data_percent": 48.115585, "total_functions": 374, - "matched_functions": 273, - "matched_functions_percent": 72.99465, + "matched_functions": 283, + "matched_functions_percent": 75.66845, "total_units": 9 } }, diff --git a/src/main/drawctrl.c b/src/main/drawctrl.c index 1a50f4f..fc60c67 100644 --- a/src/main/drawctrl.c +++ b/src/main/drawctrl.c @@ -70,6 +70,7 @@ /* sbss 399a78 */ extern MEN_CTRL_ENUM men_ctrl_enum; /* static */ /* bss 1c6fe98 */ extern SCENECTRL *check_scenectrl[20]; /* static */ /* sbss 399a7c */ extern u_char ddbg_pause_f; /* static */ +/* sdata 399340 */ extern int oddeven_idx; /* static */ static void UseGsRegSet(void); static void UseGsSetXyOffset(int ofs); @@ -1469,7 +1470,43 @@ void DrawObjStrTapTimeNext(SCENE_OBJDATA *sod_pp) { } } -INCLUDE_ASM("asm/nonmatchings/main/drawctrl", DrawObjTapCtrl); +void DrawObjTapCtrl(SCENE_OBJDATA *sod_pp, DR_TAP_REQ *tap_pp, int tap_num) { + int num; + short tap_id; + short req_no; + + num = tap_num; + + WorkClear((sod_pp->objactprg_ctrl).objactprg[OBJACTPRG_TAP], (sod_pp->objactprg_ctrl).num * 28); + + if (0 < num) { + do { + tap_id = tap_pp->tap_id; + + if (tap_id == 0xfe) { + req_no = tap_pp->req_no; + } else if (sod_pp->tap_id != tap_id) { + goto next; + } else { + req_no = tap_pp->req_no; + } + + if (sod_pp->objtapstr_size <= req_no) { + printf(" TAP REQ Table over!! ID:%d num:%d\n", tap_id, req_no); + goto next; + } + + DrawObjTapStrTapReq(sod_pp, req_no, 0, tap_pp->pad_prs_pp); + +next: + tap_pp++; + } while (--num != 0); + } + + for (num = 0; num < sod_pp->tapstr_size; num++) { + DrawObjStrDispTap(sod_pp, num); + } +} extern const char D_00399520[]; /* .sdata - "nome_" */ @@ -1587,7 +1624,30 @@ int DrawAlphaBlendDisp(void *para_pp, int frame, int first_f, int useDisp, int d return 0; } -INCLUDE_ASM("asm/nonmatchings/main/drawctrl", DrawMozaikuDisp); +int DrawMozaikuDisp(void *para_pp, int frame, int first_f, int useDisp, int drDisp) { + sceGsFrame *frame_pp; + sceGsFrame *gsframe_pp; + sceGifPacket gifpk[2]; + + if (first_f == DRPRGF_INIT) { + return 0; + } + if (first_f == DRPRGF_RESET) { + return 0; + } + + frame_pp = DrawGetFrameP(useDisp); + gsframe_pp = DrawGetFrameP(drDisp); + + CmnGifADPacketMake(gifpk, gsframe_pp); + + ((u64 *)gifpk)[2] = (u64)(*(u32 *)gsframe_pp) | 0x1f1f1f1f00000000; + + UG_MozaikuDisp(para_pp, frame_pp, gifpk); + CmnGifADPacketMakeTrans(gifpk); + + return 0; +} INCLUDE_ASM("asm/nonmatchings/main/drawctrl", DrawFadeDisp); @@ -1615,7 +1675,56 @@ int DrawTim2DIsp(void *para_pp, int frame, int first_f, int useDisp, int drDisp) return 0; } -INCLUDE_ASM("asm/nonmatchings/main/drawctrl", DrawNoodlesDisp); +int DrawNoodlesDisp(void *para_pp, int frame, int first_f, int useDisp, int drDisp) { + NOODLES_STR *ndl_pp; + sceGsFrame *draw_pp; + sceGsFrame *use_pp; + sceGsFrame *col_pp; + void *tim2_pp; + sceGifPacket gifpk; + + if (first_f == DRPRGF_INIT) { + return 0; + } + if (first_f == DRPRGF_RESET) { + return 0; + } + + ndl_pp = para_pp; + use_pp = DrawGetFrameP(useDisp); + draw_pp = DrawGetFrameP(drDisp); + col_pp = DrawGetFrameP(DNUM_ZBUFF); + + CmnGifADPacketMake(&gifpk, draw_pp); + + tim2_pp = GetIntAdrsCurrent(ndl_pp->texnum); + Tim2Trans_TBP_MODE(tim2_pp, use_pp->FBP << 5, 0x1b); + + tim2_pp = GetIntAdrsCurrent(ndl_pp->texnum); + Tim2TransColor_TBP(tim2_pp, col_pp->FBP << 5); + + sceGifPkAddGsAD(&gifpk, SCE_GS_TEX0_1, + SCE_GS_SET_TEX0(use_pp->FBP << 5, use_pp->FBW, 0x1b, + 10, 8, 1, 0, + col_pp->FBP << 5, 2, 0, 0, 1)); + sceGifPkAddGsAD(&gifpk, SCE_GS_TEX1_1, 0); + sceGifPkAddGsAD(&gifpk, SCE_GS_TEST_1, 0x33001); + sceGifPkAddGsAD(&gifpk, SCE_GS_ALPHA_1, 0x44); + sceGifPkAddGsAD(&gifpk, SCE_GS_TEXA, 0x4000008000); + sceGifPkAddGsAD(&gifpk, SCE_GS_PRIM, 0x156); + sceGifPkAddGsAD(&gifpk, SCE_GS_FRAME_1, *(u_long *)use_pp); + sceGifPkAddGsAD(&gifpk, SCE_GS_UV, 0); + sceGifPkAddGsAD(&gifpk, SCE_GS_XYZ2, 0x179006c00); + sceGifPkAddGsAD(&gifpk, SCE_GS_UV, 0x0e002800); + sceGifPkAddGsAD(&gifpk, SCE_GS_XYZ2, 0x187009400); + sceGifPkAddGsAD(&gifpk, SCE_GS_TEXFLUSH, 0); + sceGifPkAddGsAD(&gifpk, SCE_GS_FRAME_1, *(u_long *)draw_pp); + + UG_NoodlesDisp(para_pp, use_pp, &gifpk, frame); + CmnGifADPacketMakeTrans(&gifpk); + + return 0; +} extern const char D_00393300[]; /* "local vram copy\n" */ @@ -1693,7 +1802,48 @@ static int drawDispCheckSub(u_int drD, u_int *dat_pp) { return drawDispCheckSub(drD, &drDispFlag); } -INCLUDE_ASM("asm/nonmatchings/main/drawctrl", DrawScenectrlReq); +int DrawScenectrlReq(SCENECTRL *scenectrl_pp, u_int time) { + int ret = 0; + int useDispCheck; + int drDispCheck; + int active; + + active = !(time < scenectrl_pp->start_flame); + if (!(time < scenectrl_pp->end_flame)) { + active = 0; + } + + if (scenectrl_pp->prg_pp == NULL) { + return -1; + } + + if (active) { + useDispCheck = drawUseDispCheck(scenectrl_pp->useDisp); + drDispCheck = drawDrDispCheck(scenectrl_pp->drDisp); + + if (drDispCheck != 2) { + if (drDispCheck == 16) { + UseGsSetXyOffset(0); + } + } else if (oddeven_idx & 1) { + UseGsSetXyOffset(0); + } else { + UseGsSetXyOffset(1); + } + + if (scenectrl_pp->use_flag == 0) { + ret = scenectrl_pp->prg_pp(scenectrl_pp->param_pp, time - scenectrl_pp->start_flame, 0, useDispCheck, drDispCheck); + scenectrl_pp->use_flag = 1; + } else { + ret = scenectrl_pp->prg_pp(scenectrl_pp->param_pp, time - scenectrl_pp->start_flame, 1, useDispCheck, drDispCheck); + } + } else if (scenectrl_pp->use_flag != 0) { + ret = scenectrl_pp->prg_pp(scenectrl_pp->param_pp, 0, -1, 0, 0); + scenectrl_pp->use_flag = 0; + } + + return ret; +} void MendererCtrlInit(void) { men_ctrl_ratio = 0.0f; diff --git a/src/menu/menusub.c b/src/menu/menusub.c index 0b0cd62..a33feaa 100644 --- a/src/menu/menusub.c +++ b/src/menu/menusub.c @@ -199,9 +199,9 @@ static void tsBGMONEPause(int flg); static void TsBGMStop(int time); /* static */ void TsBGMMute(int time); static int TsBGMLoadCheck(void); -/* static */ void TsBGMPause(int flg); +static void TsBGMPause(int flg); /* static */ void TsBGMPoll(void); -/* static */ void* TsCmnPkOpen(sceGifPacket *pgifpk); +static void* TsCmnPkOpen(sceGifPacket *pgifpk); /* static */ void TsCmnPkClose(sceGifPacket *pgifpk, void *pk, int pri); static void TsClearMenuPad(int no); static void TsGetMenuPad(int no, u_int *getpad); @@ -209,7 +209,7 @@ static void TsSndFlow(int flg); /* static */ int TSNumMov(int cn, int dn, int scale); static int TSLOOP(int no, int max); static int TSLIMIT(int no, int min, int max); -/* static */ int TsMENU_GetMapNo(int *psize); +static int TsMENU_GetMapNo(int *psize); static void TsMENU_GetMapTimeState(int flg); /* static */ void TsSetScene_Map(MN_SCENE *pScene, int mapNo, int tflg, int bFocus); static void TsSet_ParappaCapColor(void); @@ -246,7 +246,7 @@ static int TsMCAMes_GetSelect(void); static int TsMCAMes_IsON(void); /* static */ void TsMCAMes_Flow(u_int tpad); /* static */ void TsMCAMes_Draw(SPR_PKT pk, SPR_PRM *spr); -/* static */ void TsCMPMes_Draw(SPR_PKT pk, SPR_PRM *spr); +static void TsCMPMes_Draw(SPR_PKT pk, SPR_PRM *spr); static void TsANIME_Init(ANIME_WK *wk); /* static */ int TsANIME_Poll(ANIME_WK *wk); static void TsANIME_Start(ANIME_WK *wk, int state, int tim); @@ -500,7 +500,14 @@ static int TsBGMLoadCheck(void) { return MenuVoiceBankSet(-1); } -INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsBGMPause); +static void TsBGMPause(int flg) { + if (TsBGMState.state != 0) { + TsBGMState.chgReq = 0; + TsBGMState.cstate = 0; + TsBGMState.ctim = 0; + tsBGMONEPause(flg); + } +} void TsBGMChangePos(int no) { BGMSTATE *pbgm = &TsBGMState; @@ -518,7 +525,17 @@ void TsBGMChangePos(int no) { INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsBGMPoll); -INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsCmnPkOpen); +static void *TsCmnPkOpen(sceGifPacket *pgifpk) { + CmnGifOpenCmnPk(pgifpk); + + sceGifPkAddGsAD(pgifpk, SCE_GS_PABE, 0); + sceGifPkAddGsAD(pgifpk, SCE_GS_FBA_1, 0); + sceGifPkAddGsAD(pgifpk, SCE_GS_TEST_1, 0x30000); + + sceGifPkCloseGifTag(pgifpk); + + return pgifpk->pCurrent; +} INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsCmnPkClose); @@ -679,7 +696,16 @@ static void TsSndFlow(int flg) { INCLUDE_ASM("asm/nonmatchings/menu/menusub", TSNumMov); -INCLUDE_ASM("asm/nonmatchings/menu/menusub", TSNumRBack); +float TSNumRBack(float rt, float bkrt) { + float limit = bkrt + 1.0f; + + rt *= (bkrt * 2.0f) + 1.0f; + if (limit < rt) { + rt = (limit * 2.0f) - rt; + } + + return rt; +} static int TSLOOP(int no, int max) { return (no + max) % max; @@ -695,7 +721,51 @@ static int TSLIMIT(int no, int min, int max) { return no; } -INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsMENU_GetMapNo); +static int TsMENU_GetMapNo(int *psize) { + int mapno; + int size; + int flg; + + mapno = 9; + if (pP3GameState->pLog->nRound < 1) { + flg = pP3GameState->pLog->clrFlg[0]; + mapno = 1; + + if (flg != 0) { + do { + flg >>= 1; + mapno++; + } while (flg != 0); + } + + if (mapno > 9) { + mapno = 9; + } + } + + if (mapno == 0) { + size = 0; + goto end; + } + + if (mapno < 2) { + size = 1; + } else if (mapno < 4) { + size = 2; + } else { + size = 4; + if (mapno < 5) { + size = 3; + } + } + +end: + if (psize != 0) { + *psize = size; + } + + return mapno; +} static inline int PrBcdInt(u_int n) { return (((n / 16) * 10) + (n % 16)); @@ -841,7 +911,14 @@ void TsMENU_InitSystem(void) { CurFileInfo.repFileNo = -1; } -INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsMENU_EndSystem); +void TsMENU_EndSystem(void) { + if (pCStageRank != 0) { + free(pCStageRank); + } + if (UserWork != 0) { + free(UserWork); + } +} void TsMenu_RankingClear(void) { int i; @@ -973,7 +1050,26 @@ void TsMenu_End(void) { } } -INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsMenu_InitFlow); +void TsMenu_InitFlow(P3GAMESTATE *pstate) { + pstate->pAutoMove = 0; + pstate->curRecJacket = 0; + + pP3GameState = pstate; + TsSet_ParappaCapColor(); + + switch (pstate->endFlg) { + case 0: + TsMap_Flow(1, 3, 0); + break; + case 1: + TsClearSet(pP3GameState); + TsMap_Flow(1, 2, 0); + break; + case 2: + TsMap_Flow(1, 1, 0); + break; + } +} int TsMenuMemcChk_Flow(void) { u_int tpad, tpad2; @@ -991,7 +1087,22 @@ int TsMenuMemcChk_Flow(void) { return ret; } -INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsMenu_Flow); +int TsMenu_Flow(void) { + u_int tpad, tpad2; + int ret; + + TsGetMenuPad(0, &tpad); + TsGetMenuPad(1, &tpad2); + + ret = TsMap_Flow(0, tpad, tpad2); + + TsMCAMes_Flow(tpad); + TsSCFADE_Flow(0, 0); + TsBGMPoll(); + TsSndFlow(0); + + return ret; +} void TsMenu_Draw(void) { SPR_PRM SprPrm; @@ -1099,7 +1210,30 @@ int DateChgInt(u_int n) { ); } -INCLUDE_ASM("asm/nonmatchings/menu/menusub", GetRankScoreID); +void GetRankScoreID(MAP_TIME *mptim, u_int *dat) { + int year; + int second; + int hour; + int day; + int month; + int minute; + int score; + + year = DateChgInt(mptim->date_year); + second = DateChgInt(mptim->date_second); + hour = DateChgInt(mptim->date_hour); + day = DateChgInt(mptim->date_day); + month = DateChgInt(mptim->date_month); + minute = DateChgInt(mptim->date_minute); + + score = (year % 50) * 32140800 + (second % 60); + score += (hour % 24) * 3600 + (day % 31) * 86400; + score += (month % 12) * 2678400 + (minute % 60) * 60; + + dat[0] = score; + + dat[1] = ((rand() % 65536) << 8) + mptim->date_pad; +} INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsRanking_Set); @@ -2517,7 +2651,22 @@ void TsCMPMes_SetMes(int no) { } } -INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsCMPMes_Draw); +static void TsCMPMes_Draw(SPR_PKT pk, SPR_PRM *spr) { + CMPMES_WORK *pmesw = &CmpMesWork; + + if (pmesw->backSw) { + MNScene_DispSw(&MNS_JimakuBak, 1); + MNScene_Draw(&MNS_JimakuBak); + } else { + MNScene_DispSw(&MNS_JimakuBak, 0); + } + + if ((u_int)pmesw->mesflg >= 0x1000) { + return; + } + + _PkSubMsgPut(pk, spr, pmesw->mesflg & 0xffff, pmesw->px, pmesw->py, 0x807f7f7f); +} void TsANIME_Init(ANIME_WK *wk) { memset(wk, 0, sizeof(*wk)); @@ -2581,7 +2730,11 @@ INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsGetRankingList); INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsPopCusAOff); -INCLUDE_ASM("asm/nonmatchings/menu/menusub", TsPopCusDim); +void TsPopCusDim(POPCTIM *pfw, int n, int flg) { + if ((u_int)n < 16) { + pfw->bDim[n] = (u_short)flg; + } +} void TsPopCusInit(POPCTIM *pfw, int curIdx) { memset(pfw, 0, sizeof(*pfw));