d_s_menu work

This commit is contained in:
Jasper St. Pierre
2024-07-02 16:31:05 -07:00
parent f61e242c1a
commit 84c76203fc
10 changed files with 154 additions and 68 deletions
+34 -36
View File
@@ -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);
+83 -12
View File
@@ -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;
+1 -1
View File
@@ -48,7 +48,7 @@ void mDoMemCdRWm_CalcCheckSumPictData(void*, u32) {
}
/* 8001A358-8001A39C .text mDoMemCdRWm_TestCheckSumPictData__FPv */
void mDoMemCdRWm_TestCheckSumPictData(void*) {
BOOL mDoMemCdRWm_TestCheckSumPictData(void*) {
/* Nonmatching */
}