Always create a save file if one doesn't exist (#2028)

* Always create a save file if one doesn't exist

* Fix MSVC build

* Re-add accidentally deleted line

* Integrate into d_file_select state machine & put behind instantSaves

---------

Co-authored-by: Luke Street <luke@street.dev>
This commit is contained in:
doop
2026-06-15 14:47:23 -04:00
committed by GitHub
parent 02fdde3768
commit 38a0a7be0b
2 changed files with 63 additions and 0 deletions
+9
View File
@@ -287,6 +287,11 @@ public:
MEMCARDCHECKPROC_ERR_YESNO_CURSOR_MOVE_ANM,
MEMCARDCHECKPROC_SAVEDATA_CLEAR,
#if TARGET_PC
MEMCARDCHECKPROC_AUTO_MAKE_GAMEFILE,
MEMCARDCHECKPROC_AUTO_MAKE_GAMEFILE_ERR_WAIT,
#endif
#if PLATFORM_WII || PLATFORM_SHIELD
MEMCARDCHECKPROC_NAND_STAT_CHECK,
MEMCARDCHECKPROC_GAMEFILE_INIT_SEL,
@@ -445,6 +450,10 @@ public:
void MemCardMakeGameFile();
void MemCardMakeGameFileWait();
void MemCardMakeGameFileCheck();
#if TARGET_PC
void MemCardAutoMakeGameFile();
void MemCardAutoMakeGameFileErrWait();
#endif
void MemCardMsgWindowInitOpen();
void MemCardMsgWindowOpen();
void MemCardMsgWindowClose();
+54
View File
@@ -4238,6 +4238,11 @@ static MemCardCheckFuncT MemCardCheckProc[] = {
&dFile_select_c::MemCardErrYesNoCursorMoveAnm,
&dFile_select_c::MemCardSaveDataClear,
#if TARGET_PC
&dFile_select_c::MemCardAutoMakeGameFile,
&dFile_select_c::MemCardAutoMakeGameFileErrWait,
#endif
#if PLATFORM_WII || PLATFORM_SHIELD
&dFile_select_c::nandStatCheck,
&dFile_select_c::gameFileInitSel,
@@ -4321,11 +4326,33 @@ void dFile_select_c::MemCardStatCheck() {
mDoMemCd_Load();
mCardCheckProc = MEMCARDCHECKPROC_LOAD_WAIT;
break;
#if TARGET_PC
case 1: { // no save file
if (dusk::getSettings().game.instantSaves) {
field_0x03b1 = 1;
setInitSaveData();
dataSave();
mCardCheckProc = MEMCARDCHECKPROC_AUTO_MAKE_GAMEFILE;
} else {
errDispInitSet(22, 0);
field_0x0280 = true;
mNextCardCheckProc = MEMCARDCHECKPROC_MAKE_GAMEFILE_SEL;
}
break;
}
case 4: // card is writing
if (dusk::getSettings().game.instantSaves) {
field_0x03b1 = 1;
mCardCheckProc = MEMCARDCHECKPROC_AUTO_MAKE_GAMEFILE;
}
break;
#else
case 1:
errDispInitSet(22, 0);
field_0x0280 = true;
mNextCardCheckProc = MEMCARDCHECKPROC_MAKE_GAMEFILE_SEL;
break;
#endif
}
#else
switch (status) {
@@ -5031,6 +5058,33 @@ void dFile_select_c::MemCardMakeGameFileCheck() {
}
}
#if TARGET_PC
void dFile_select_c::MemCardAutoMakeGameFile() {
field_0x03b4 = mDoMemCd_SaveSync();
if (field_0x03b4 == 0) {
return;
}
field_0x03b1 = 0;
if (field_0x03b4 == 1) {
mDoMemCd_Load();
mCardCheckProc = MEMCARDCHECKPROC_LOAD_WAIT;
} else {
errDispInitSet(0x1A, 0);
field_0x0280 = false;
mWindowCloseMsgDispCb = NULL;
mKeyWaitMsgDispCb = NULL;
mNextCardCheckProc = MEMCARDCHECKPROC_AUTO_MAKE_GAMEFILE_ERR_WAIT;
}
}
void dFile_select_c::MemCardAutoMakeGameFileErrWait() {
mNextCardCheckProc = MEMCARDCHECKPROC_STAT_CHECK;
mKeyWaitCardCheckProc = MEMCARDCHECKPROC_MSG_WINDOW_CLOSE;
mCardCheckProc = MEMCARDCHECKPROC_ERRMSG_WAIT_KEY;
}
#endif
#if PLATFORM_WII || PLATFORM_SHIELD
void dFile_select_c::gameFileInitSel() {
if (errYesNoSelect() != 0) {