From b77686213aedc5a3950a65a14434903f2d0dfd1a Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Tue, 26 Oct 2021 16:29:28 +0200 Subject: [PATCH] :bug: Correctly wipe temp data from saves Fixes #3167 --- Source/diablo.cpp | 1 + Source/loadsave.cpp | 3 ++- Source/pfile.cpp | 3 +++ test/writehero_test.cpp | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Source/diablo.cpp b/Source/diablo.cpp index c57da5e5..5546c4cf 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -1549,6 +1549,7 @@ bool StartGame(bool bNewGame, bool bSinglePlayer) InitPortals(); InitDungMsgs(Players[MyPlayerId]); } + giNumberOfLevels = gbIsHellfire ? 25 : 17; interface_mode uMsg = WM_DIABNEWGAME; if (gbValidSaveFile && gbLoadGame) { uMsg = WM_DIABLOADGAME; diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 87f885f2..7a8d9b4c 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -1673,7 +1673,6 @@ void RemoveEmptyInventory(Player &player) void LoadGame(bool firstflag) { FreeGameMem(); - pfile_remove_temp_files(); LoadHelper file("game"); if (!file.IsValid()) @@ -1693,6 +1692,8 @@ void LoadGame(bool firstflag) giNumberOfSmithPremiumItems = 6; } + pfile_remove_temp_files(); + setlevel = file.NextBool8(); setlvlnum = static_cast<_setlevels>(file.NextBE()); currlevel = file.NextBE(); diff --git a/Source/pfile.cpp b/Source/pfile.cpp index 3455d85b..dafc169e 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -347,6 +347,9 @@ bool pfile_ui_save_create(_uiheroinfo *heroinfo) if (!OpenArchive(saveNum)) return false; heroinfo->saveNumber = saveNum; + + giNumberOfLevels = gbIsHellfire ? 25 : 17; + mpqapi_remove_hash_entries(GetFileName); strncpy(hero_names[saveNum], heroinfo->name, PLR_NAME_LEN); hero_names[saveNum][PLR_NAME_LEN - 1] = '\0'; diff --git a/test/writehero_test.cpp b/test/writehero_test.cpp index 5d88593b..072ba2ac 100644 --- a/test/writehero_test.cpp +++ b/test/writehero_test.cpp @@ -331,6 +331,7 @@ TEST(Writehero, pfile_write_hero) gbIsMultiplayer = true; gbIsHellfireSaveGame = false; leveltype = DTYPE_TOWN; + giNumberOfLevels = 17; MyPlayerId = 0; MyPlayer = &Players[MyPlayerId];