diff --git a/include/JSystem/JKernel/JKRAram.h b/include/JSystem/JKernel/JKRAram.h index 754e9a45c..34a1b24a1 100644 --- a/include/JSystem/JKernel/JKRAram.h +++ b/include/JSystem/JKernel/JKRAram.h @@ -86,6 +86,10 @@ inline JKRAramBlock *JKRMainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKR return JKRAram::mainRamToAram(buf, bufSize, alignedSize, expandSwitch, fileSize, heap, id); } +inline JKRAramBlock* JKRMainRamToAram(u8* buf, JKRAramBlock* block, u32 size, JKRExpandSwitch expandSwitch, u32 fileSize, JKRHeap* heap, int id) { + return JKRAram::mainRamToAram(buf, block, size, expandSwitch, fileSize, heap, id); +} + // void JKRDecompressFromAramToMainRam(u32, void*, u32, u32, u32, u32*); #endif /* JKRARAM_H */ diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 88d9124f7..d8a03c653 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -486,7 +486,8 @@ public: ItemTableList* getItemTable() { return mpItemTable; } void setFmapData(void * pData) { mpFmapData = pData; } - void setPictureBoxData(JKRAramBlock* aramHeap, int i) { mPictureBoxDataHeap[i] = aramHeap; } + JKRAramBlock* getPictureBoxData(int i) { return mPictureBoxData[i]; } + void setPictureBoxData(JKRAramBlock* aramBlock, int i) { mPictureBoxData[i] = aramBlock; } void offPictureFlag(u8 i) { u8 mask = (1 << i); mPictureFlag &= ~mask; @@ -494,7 +495,7 @@ public: u8 getPictureFormat() { return mPictureFormat; } u8 getPictureResult() { return mPictureResult; } u8 getPictureResultDetail() { return mPictureResultDetail; } - void setBossBattleData(JKRAramBlock* aramHeap, int i) { mBossBattleDataHeap[i] = aramHeap; } + void setBossBattleData(JKRAramBlock* aramBlock, int i) { mBossBattleData[i] = aramBlock; } void startItemTimer() { mStartItemTimer = true; } @@ -572,13 +573,13 @@ public: /* 0x47F8 */ JKRArchive* mpEnglishTextArchive; #if VERSION != VERSION_JPN /* 0x47FC */ JKRArchive* mpHyruleTextArchive; - /* 0x4800 */ JKRAramBlock* mPictureBoxDataHeap[3]; - /* 0x480C */ JKRAramBlock* mBossBattleDataHeap[4]; + /* 0x4800 */ JKRAramBlock* mPictureBoxData[3]; + /* 0x480C */ JKRAramBlock* mBossBattleData[4]; /* 0x481C */ JKRAramBlock* field_0x481c; /* 0x4820 */ JKRAramBlock* field_0x4820; #else - /* 0x47FC */ JKRAramBlock* mPictureBoxDataHeap[3]; - /* 0x480C */ JKRAramBlock* mBossBattleDataHeap[4]; + /* 0x47FC */ JKRAramBlock* mPictureBoxData[3]; + /* 0x480C */ JKRAramBlock* mBossBattleData[4]; #endif /* Offsets below are for USA/PAL */ @@ -2550,8 +2551,12 @@ inline u8 dComIfGp_getMesgStatus() { return g_dComIfG_gameInfo.play.getMesgStatus(); } -inline void dComIfGp_setPictureBoxData(JKRAramBlock* aramHeap, int i) { - g_dComIfG_gameInfo.play.setPictureBoxData(aramHeap, i); +inline JKRAramBlock* dComIfGp_getPictureBoxData(int i) { + return g_dComIfG_gameInfo.play.getPictureBoxData(i); +} + +inline void dComIfGp_setPictureBoxData(JKRAramBlock* aramBlock, int i) { + g_dComIfG_gameInfo.play.setPictureBoxData(aramBlock, i); } inline void dComIfGp_offPictureFlag(u8 i) { @@ -2570,8 +2575,8 @@ inline u8 dComIfGp_getPictureResultDetail() { return g_dComIfG_gameInfo.play.getPictureResultDetail(); } -inline void dComIfGp_setBossBattleData(JKRAramBlock* aramHeap, int i) { - g_dComIfG_gameInfo.play.setBossBattleData(aramHeap, i); +inline void dComIfGp_setBossBattleData(JKRAramBlock* aramBlock, int i) { + g_dComIfG_gameInfo.play.setBossBattleData(aramBlock, i); } inline u8 dComIfGp_getButtonActionMode() { diff --git a/include/d/d_file_select.h b/include/d/d_file_select.h index 1041d9404..1bce5f3ce 100644 --- a/include/d/d_file_select.h +++ b/include/d/d_file_select.h @@ -222,9 +222,12 @@ public: /* 0x3908 */ char* field_0x3908; /* 0x390C */ STControl* stick; /* 0x3910 */ STControl* stick2; - /* 0x3914 */ u8 field_0x3914[0x3921 - 0x3914]; + /* 0x3914 */ u8 field_0x3914[3]; + /* 0x3917 */ u8 field_0x3917[0x391A - 0x3917]; + /* 0x391A */ u8 saveStatus[3]; + /* 0x391D */ u8 field_0x391D[0x3921 - 0x391D]; /* 0x3921 */ u8 field_0x3921; - /* 0x3922 */ u8 field_0x3922; + /* 0x3922 */ u8 saveSlot; /* 0x3923 */ u8 field_0x3923; /* 0x3924 */ u8 field_0x3924[0x3927 - 0x3924]; /* 0x3927 */ u8 field_0x3927; diff --git a/include/d/d_name.h b/include/d/d_name.h index eac2a01ba..155344069 100644 --- a/include/d/d_name.h +++ b/include/d/d_name.h @@ -67,7 +67,11 @@ public: /* 0x0004 */ u8 field_0x4[0x0008 - 0x0004]; /* 0x0008 */ dDlst_NameIN_c field_0x8; - /* 0x000C */ u8 field_0xc[0x2AD0 - 0x000C]; + /* 0x000C */ u8 field_0xc[0x290B - 0x000C]; + /* 0x290B */ u8 field_0x290b; + /* 0x290C */ u8 field_0x290c[0x2A5C - 0x290C]; + /* 0x2A5C */ char field_0x2a5c[8]; + /* 0x2A64 */ u8 field_0x2964[0x2AD0 - 0x2A64]; /* 0x2AD0 */ char field_0x2ad0[0x2AE8 - 0x2AD0]; }; diff --git a/include/d/d_s_menu.h b/include/d/d_s_menu.h index 10cb4e2cc..86c9239fe 100644 --- a/include/d/d_s_menu.h +++ b/include/d/d_s_menu.h @@ -42,9 +42,9 @@ public: /* 0x1CC */ mDoDvdThd_toMainRam_c* command; /* 0x1D0 */ mDoDvdThd_toMainRam_c* fontCommand; /* 0x1D4 */ menu_inf* info; - /* 0x1D8 */ ResFONT* field_0x1d8; - /* 0x1DC */ myFontClass* field_0x1dc; - /* 0x1E0 */ u8 field_0x1e0; + /* 0x1D8 */ ResFONT* fontRes; + /* 0x1DC */ myFontClass* font; + /* 0x1E0 */ u8 startCode; /* 0x1E1 */ u8 field_0x1e1; /* 0x1E2 */ u8 field_0x1e2; }; diff --git a/include/d/d_s_name.h b/include/d/d_s_name.h index bc9627c00..5310fa199 100644 --- a/include/d/d_s_name.h +++ b/include/d/d_s_name.h @@ -164,13 +164,14 @@ public: /* 0x55D */ u8 field_0x55d; /* 0x55E */ u8 field_0x55e; /* 0x55F */ u8 field_0x55f; - /* 0x560 */ u8 field_0x560[0x1650]; + /* 0x560 */ u8 saveMemory[0x1650]; /* 0x1BB0 */ void* savePicDatabuf; /* 0x1BB4 */ short field_0x1bb4; /* 0x1BB6 */ u8 field_0x1bb6; /* 0x1BB7 */ u8 field_0x1bb7; /* 0x1BB8 */ u8 field_0x1bb8; - /* 0x1BB9 */ u8 field_0x1bb9[0x1BBC - 0x1BB9]; + /* 0x1BB9 */ u8 field_0x1bb9; + /* 0x1BBA */ u8 field_0x1bba[0x1BBC - 0x1BBA]; /* 0x1BBC */ int field_0x1bbc; }; diff --git a/include/m_Do/m_Do_MemCardRWmng.h b/include/m_Do/m_Do_MemCardRWmng.h index 709b5d370..99bd1881b 100644 --- a/include/m_Do/m_Do_MemCardRWmng.h +++ b/include/m_Do/m_Do_MemCardRWmng.h @@ -16,7 +16,7 @@ void mDoMemCdRWm_SetCardStat(CARDFileInfo*); void mDoMemCdRWm_CheckCardStat(CARDFileInfo*); void mDoMemCdRWm_CalcCheckSum(void*, u32); void mDoMemCdRWm_CalcCheckSumPictData(void*, u32); -void mDoMemCdRWm_TestCheckSumPictData(void*); +BOOL mDoMemCdRWm_TestCheckSumPictData(void*); void mDoMemCdRWm_SetCheckSumPictData(u8*); void mDoMemCdRWm_CalcCheckSumGameData(void*, u32); void mDoMemCdRWm_TestCheckSumGameData(void*); diff --git a/src/d/d_s_menu.cpp b/src/d/d_s_menu.cpp index a1bca113c..d55bffc29 100644 --- a/src/d/d_s_menu.cpp +++ b/src/d/d_s_menu.cpp @@ -31,47 +31,45 @@ u8 l_languageType; static BOOL dScnMenu_Draw(menu_of_scene_class* i_this) { /* Nonmatching - regalloc */ JUTReport(300, 50, "メニュー"); - if (i_this->field_0x1e0) { - JUTReport(400, 50,"<%d>", i_this->field_0x1e0 - 1); + if (i_this->startCode) { + JUTReport(400, 50,"<%d>", i_this->startCode - 1); } - menu_of_scene_class::menu_inf* r30 = i_this->info; - int r29 = 70; - u8 r3; - int r4 = l_cursolID - l_startID; - r3 = r30->num; - int r31 = r3 < 20 ? r3 : 20; - if (r4 < 5) { - l_startID += r4 - 5; + menu_of_scene_class::menu_inf* info = i_this->info; + s32 y = 70; + u8 num; + s32 scroll = l_cursolID - l_startID; + num = info->num; + s32 lineNum = num < 20 ? num : 20; + if (scroll < 5) { + l_startID += scroll - 5; if (l_startID < 0) { l_startID = 0; } - } else if (r4 > 15) { - int r5 = r3 - 20; + } else if (scroll > 15) { + int r5 = num - 20; if (r5 < 0) { r5 = 0; } - l_startID += r4 - 15; + l_startID += scroll - 15; if (l_startID > r5) { l_startID = r5; } } - int i, id; - id = l_startID; - for (i = 0; i < r31; id++, r29 += 16, i++) { - s8 r6 = l_cursolID == id ? 79 : 32; - menu_of_scene_class::stage_inf* stage = &r30->stage[id]; - JUTReport(20, r29, "%c %2d %s <%s>", r6, id, stage->name, stage->roomPtr[l_groupPoint[id]].name); + for (s32 id = l_startID, i = 0; i < lineNum; id++, y += 16, i++) { + char selectChar = l_cursolID == id ? 79 : 32; + menu_of_scene_class::stage_inf* stage = &info->stage[id]; + JUTReport(20, y, "%c %2d %s <%s>", selectChar, id, stage->name, stage->roomPtr[l_groupPoint[id]].name); } JUTReport(280,400,"X:進む Y:戻る"); - char* local_3c[] = {"通常", "高速経過", "朝(あさ)に固定", "昼(ひる)に固定", "夕方(ゆうがた)に固定", "夜(よる)に固定", "時に固定"}; - char* local_58[] = {"日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"}; + char* timepat_str[] = {"通常", "高速経過", "朝(あさ)に固定", "昼(ひる)に固定", "夕方(ゆうがた)に固定", "夜(よる)に固定", "時に固定"}; + char* weekpat_str[] = {"日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"}; if (l_timepat >= 6) { - JUTReport(280, 420, "時刻:%d%s", l_timepat + -6, local_3c[6]); + JUTReport(280, 420, "時刻:%d%s", l_timepat - 6, timepat_str[6]); } else { - JUTReport(280, 420, "時刻:%s", local_3c[l_timepat]); + JUTReport(280, 420, "時刻:%s", timepat_str[l_timepat]); } JUTReport(40, 420, "十字右:進む 十字左:戻る"); - JUTReport(200, 400, "曜日:%s", local_58[l_weekpat]); + JUTReport(200, 400, "曜日:%s", weekpat_str[l_weekpat]); #if VERSION != VERSION_JPN static const char* language[] = {"ENGLISH", "GERMAN", "FRENCH", "SPANISH", "ITALIAN"}; JUTReport(40, 440, "%s", language[g_dComIfG_gameInfo.play.mGameLanguage]); @@ -134,17 +132,17 @@ static BOOL dScnMenu_Execute(menu_of_scene_class* i_this) { } if (CPad_CHECK_TRIG_R(0)) { - if (++i_this->field_0x1e0 == 0) - i_this->field_0x1e0++; + if (++i_this->startCode == 0) + i_this->startCode++; } else if (CPad_CHECK_TRIG_L(0)) { - if (--i_this->field_0x1e0 == 0) - i_this->field_0x1e0--; + if (--i_this->startCode == 0) + i_this->startCode--; } if (CPad_CHECK_TRIG_START(0)) { menu_of_scene_class::room_inf* room = &info->stage[l_cursolID].roomPtr[l_groupPoint[l_cursolID]]; dComIfGp_offEnableNextStage(); - s16 startCode = (i_this->field_0x1e0 != 0) ? i_this->field_0x1e0 - 1 : room->startCode; + s16 startCode = (i_this->startCode != 0) ? i_this->startCode - 1 : room->startCode; dComIfGp_setNextStage(room->stageName, startCode, room->roomNo, room->layerNo); if (strcmp(dComIfGp_getNextStageName(), "ENDING") == 0) { fopScnM_ChangeReq(i_this, PROC_ENDING_SCENE, 0, 5); @@ -238,9 +236,9 @@ static BOOL dScnMenu_IsDelete(menu_of_scene_class*) { /* 8022F320-8022F3C4 .text dScnMenu_Delete__FP19menu_of_scene_class */ static BOOL dScnMenu_Delete(menu_of_scene_class* i_this) { JUTDbPrint::getManager()->changeFont(JFWSystem::systemFont); - delete i_this->field_0x1dc; + delete i_this->font; JKRFree(i_this->info); - JKRFree(i_this->field_0x1d8); + JKRFree(i_this->fontRes); g_HIO.mDisplayFlag &= ~2; g_HIO.mDisplayFlag &= ~2; dComIfGs_setRestartOption(0); @@ -278,12 +276,12 @@ s32 phase_2(menu_of_scene_class* i_this) { l_groupPoint[i] = 0; } } - i_this->field_0x1d8 = (ResFONT*)i_this->fontCommand->getMemAddress(); + i_this->fontRes = (ResFONT*)i_this->fontCommand->getMemAddress(); delete i_this->fontCommand; - if (i_this->field_0x1d8) { - i_this->field_0x1dc = new myFontClass(i_this->field_0x1d8, NULL); - if (i_this->field_0x1dc) { - JUTDbPrint::getManager()->changeFont(i_this->field_0x1dc); + if (i_this->fontRes) { + i_this->font = new myFontClass(i_this->fontRes, NULL); + if (i_this->font) { + JUTDbPrint::getManager()->changeFont(i_this->font); } } JFWDisplay::getManager()->setTickRate(OS_TIMER_CLOCK / 60); diff --git a/src/d/d_s_name.cpp b/src/d/d_s_name.cpp index c9b15130e..a537bb82b 100644 --- a/src/d/d_s_name.cpp +++ b/src/d/d_s_name.cpp @@ -23,8 +23,10 @@ #include "m_Do/m_Do_hostIO.h" #include "m_Do/m_Do_machine.h" #include "m_Do/m_Do_MemCard.h" +#include "m_Do/m_Do_MemCardRWmng.h" #include "m_Do/m_Do_mtx.h" #include "m_Do/m_Do_Reset.h" +#include "JSystem/JKernel/JKRAram.h" #include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "JSystem/J2DGraph/J2DScreen.h" #include "JSystem/JKernel/JKRExpHeap.h" @@ -480,7 +482,6 @@ void dScnName_c::MemCardCheckDbg() {} /* 802313B0-80231428 .text MemCardCheckDbgWait__10dScnName_cFv */ void dScnName_c::MemCardCheckDbgWait() { - /* Nonmatching */ } /* 80231428-80231454 .text FileErrorDraw__10dScnName_cFv */ @@ -511,7 +512,7 @@ void dScnName_c::NoteOpenWait() { } if (g_snHIO.field_0x8 == 0) { if (fpcM_GetName(this) == PROC_NAME_SCENE) { - dFs_c->field_0x3938 = field_0x560; + dFs_c->field_0x3938 = saveMemory; dFs_c->field_0x393c = savePicDatabuf; } if (fpcM_GetName(this) == PROC_NAMEEX_SCENE) { @@ -579,7 +580,7 @@ void dScnName_c::buttonIconProc() { break; case 3: { - s32 ret = paneTransButtonIcon(field_0x1bb4 - g_snHIO.field_0xf, g_snHIO.field_0xe, g_snHIO.field_0xc, 0.0f, 1); + s32 ret = paneTransButtonIcon(field_0x1bb4 - g_snHIO.field_0xf, g_snHIO.field_0xe, g_snHIO.field_0xc, 0.0f, 0); field_0x1bb4++; if (ret == 1) { field_0x1bb4 = 0; @@ -590,7 +591,7 @@ void dScnName_c::buttonIconProc() { break; case 4: { - s32 ret = paneTransButtonIcon(field_0x1bb4 - g_snHIO.field_0xf, g_snHIO.field_0xe, g_snHIO.field_0xc, 0.0f, 1); + s32 ret = paneTransButtonIcon(field_0x1bb4 - g_snHIO.field_0xf, g_snHIO.field_0xe, g_snHIO.field_0xc, 0.0f, 0); field_0x1bb4++; if (ret == 1) { field_0x1bb4 = 0; @@ -606,7 +607,7 @@ void dScnName_c::buttonIconProc() { break; case 5: { - s32 ret = paneTransButtonIcon(field_0x1bb4 - g_snHIO.field_0xf, g_snHIO.field_0xe, g_snHIO.field_0xc, 0.0f, 1); + s32 ret = paneTransButtonIcon(field_0x1bb4 - g_snHIO.field_0xf, g_snHIO.field_0xe, g_snHIO.field_0xc, 0.0f, 0); field_0x1bb4++; if (ret == 1) { field_0x1bb4 = 0; @@ -620,6 +621,8 @@ void dScnName_c::buttonIconProc() { } } break; + case 6: + break; } } @@ -644,17 +647,71 @@ void dScnName_c::FileselOpenWait() {} void dScnName_c::FileSelectMain() { dFs_c->_move(); field_0x1bb6 = dFs_c->field_0x3936; - if (fpcM_GetName(this) == PROC_NAME_SCENE) { + if (fpcM_GetName(this) == PROC_NAME_SCENE) FileSelectMainNormal(); - } - if (fpcM_GetName(this) == PROC_NAMEEX_SCENE) { + if (fpcM_GetName(this) == PROC_NAMEEX_SCENE) FileSelectMainExSave(); - } } /* 80231A8C-80231CB8 .text FileSelectMainNormal__10dScnName_cFv */ void dScnName_c::FileSelectMainNormal() { /* Nonmatching */ + switch (dFs_c->field_0x392c) { + case 1: + field_0x1bb9 = 0; + if (dFs_c->field_0x3914[dFs_c->saveSlot] != 0) { + field_0x1bb6 = 3; + mMainProc = 5; + } else { + g_dComIfG_gameInfo.save.card_to_memory((char *)saveMemory, dFs_c->saveSlot); + if (dFs_c->saveStatus[dFs_c->saveSlot] != 0 && !dComIfGs_isEventBit(0x3510)) { + field_0x1bb9 = 1; + } + + u8 pictureNum = dComIfGs_getPictureNum(); + if (dComIfGs_getPictureNum() != 0) { + u8 failed = 0; + u8 boxDataIdx = 0; + u8* workBuf = &((u8*)savePicDatabuf)[dFs_c->saveSlot * 0x6000]; + for (s32 i = 0; i < 3; i++) { + u32 mask = 1 << i; + if ((dComIfGs_getEventReg(0x89ff) & mask)) { + workBuf += 0x2000; + continue; + } + + if (mDoMemCdRWm_TestCheckSumPictData(workBuf)) { + JKRMainRamToAram(workBuf, dComIfGp_getPictureBoxData(boxDataIdx), 0x2000, EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1); + boxDataIdx++; + } else { + failed++; + } + + if (i == pictureNum) + break; + + workBuf += 0x2000; + } + + dComIfGs_setPictureNum(pictureNum - failed); + } + dComIfGs_setEventReg(0x89ff, 0); + g_mDoMemCd_control.mCardCommand = 0; + g_dComIfG_gameInfo.play.itemInit(); + if (field_0x1bb9 != 0) { + field_0x1bb6 = 3; + mMainProc = 5; + } else { + field_0x55f = 0; + mMainProc = 9; + } + } + break; + case 2: + field_0x1bb6 = 3; + mMainProc = 5; + break; + } } /* 80231CB8-80231D00 .text FileSelectMainExSave__10dScnName_cFv */ @@ -714,10 +771,10 @@ void dScnName_c::FileSelectClose() { mDrawProc = 3; break; case 1: - if (field_0x1bb9[0]) { + if (field_0x1bb9) { strcpy(dNm_c->field_0x2ad0, dComIfGs_getPlayerName()); } else { - strcpy(dNm_c->field_0x2ad0,""); + strcpy(dNm_c->field_0x2ad0, ""); } dNm_c->initial(); mMainProc = 6; @@ -752,6 +809,20 @@ void dScnName_c::NameOpenWait() {} /* 80231F48-80231FF4 .text NameInMain__10dScnName_cFv */ void dScnName_c::NameInMain() { /* Nonmatching */ + dNm_c->_move(); + if (dNm_c->field_0x290b == 1) { + if (!field_0x1bb9) { + g_dComIfG_gameInfo.save.init(); + g_dComIfG_gameInfo.play.itemInit(); + } + + dComIfGs_setPlayerName(dNm_c->field_0x2a5c); + field_0x55f = 1; + mMainProc = 9; + } else if (dNm_c->field_0x290b == 2) { + field_0x1bb6 = 3; + mMainProc = 8; + } } /* 80231FF4-80232050 .text NameInClose__10dScnName_cFv */ @@ -778,7 +849,7 @@ void dScnName_c::ShopDemoDataLoad() { /* 802320C0-8023213C .text ShopDemoDataSet__10dScnName_cFv */ void dScnName_c::ShopDemoDataSet() { if (field_0x410->sync()) { - memcpy(field_0x560, ((u8*)field_0x410->getMemAddress()) + 8, 0x1650); + memcpy(saveMemory, ((u8*)field_0x410->getMemAddress()) + 8, 0x1650); delete field_0x410; mMainProc = 1; mDrawProc = 4; diff --git a/src/m_Do/m_Do_MemCardRWmng.cpp b/src/m_Do/m_Do_MemCardRWmng.cpp index c03251cc6..e4105b40b 100644 --- a/src/m_Do/m_Do_MemCardRWmng.cpp +++ b/src/m_Do/m_Do_MemCardRWmng.cpp @@ -48,7 +48,7 @@ void mDoMemCdRWm_CalcCheckSumPictData(void*, u32) { } /* 8001A358-8001A39C .text mDoMemCdRWm_TestCheckSumPictData__FPv */ -void mDoMemCdRWm_TestCheckSumPictData(void*) { +BOOL mDoMemCdRWm_TestCheckSumPictData(void*) { /* Nonmatching */ }