From f7617e7530c8d8dab948b44f1723a7dc42855eae Mon Sep 17 00:00:00 2001 From: toaster Date: Sat, 4 Mar 2023 21:09:59 +0000 Subject: [PATCH] Clear records, stats, and secrets on new in-SOC gamedata creation - Pre-emptive sanity check to some impending work - Move M_UpdateUnlockablesAndExtraEmblems out of M_ClearSecrets --- src/deh_soc.c | 4 ++++ src/g_game.c | 10 ++++++---- src/m_cond.c | 3 --- src/menus/options-data-erase-1.c | 2 ++ 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/deh_soc.c b/src/deh_soc.c index 7298491e7..86bf76c80 100644 --- a/src/deh_soc.c +++ b/src/deh_soc.c @@ -2768,6 +2768,10 @@ void readmaincfg(MYFILE *f, boolean mainfile) clear_emblems(); //clear_levels(); doClearLevels = true; + + G_ClearRecords(); + M_ClearStats(); + M_ClearSecrets(); } else if (!mainfile && !gamedataadded) { diff --git a/src/g_game.c b/src/g_game.c index 73e60a491..499d8b78e 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -4371,21 +4371,21 @@ void G_LoadGameData(void) if (M_CheckParm("-nodata")) { // Don't load at all. + // The following used to be in M_ClearSecrets, but that was silly. + M_UpdateUnlockablesAndExtraEmblems(false); return; } if (M_CheckParm("-resetdata")) { // Don't load, but do save. (essentially, reset) - gamedata->loaded = true; - return; + goto finalisegamedata; } if (P_SaveBufferFromFile(&save, va(pandf, srb2home, gamedatafilename)) == false) { // No gamedata. We can save a new one. - gamedata->loaded = true; - return; + goto finalisegamedata; } // Version check @@ -4550,6 +4550,8 @@ void G_LoadGameData(void) // done P_SaveBufferFree(&save); +finalisegamedata: + // Don't consider loaded until it's a success! // It used to do this much earlier, but this would cause the gamedata to // save over itself when it I_Errors from the corruption landing point below, diff --git a/src/m_cond.c b/src/m_cond.c index b57908bb1..27a88b10f 100644 --- a/src/m_cond.c +++ b/src/m_cond.c @@ -554,9 +554,6 @@ void M_ClearSecrets(void) Z_Free(gamedata->challengegrid); gamedata->challengegrid = NULL; gamedata->challengegridwidth = 0; - - // Re-unlock any always unlocked things - M_UpdateUnlockablesAndExtraEmblems(false); } // ---------------------- diff --git a/src/menus/options-data-erase-1.c b/src/menus/options-data-erase-1.c index f3a977f7f..b5af7eade 100644 --- a/src/menus/options-data-erase-1.c +++ b/src/menus/options-data-erase-1.c @@ -66,6 +66,8 @@ static void M_EraseDataResponse(INT32 ch) if (optionsmenu.erasecontext & EC_CHALLENGES) M_ClearSecrets(); + M_UpdateUnlockablesAndExtraEmblems(false); + F_StartIntro(); M_ClearMenus(true); }