diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 30b10c72b..4773a8262 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -2929,6 +2929,11 @@ void SaveGameData(SaveWriter &saveWriter) void SaveGame() { gbValidSaveFile = true; + +#if defined(UNPACKED_SAVES) && defined(DVL_NO_FILESYSTEM) + pfile_write_hero(/*writeGameData=*/true); + sfile_write_stash(); +#else const bool heroSaved = pfile_write_hero_with_backup(/*writeGameData=*/true); if (!heroSaved) { gbValidSaveFile = false; @@ -2939,6 +2944,7 @@ void SaveGame() gbValidSaveFile = false; return; } +#endif } void SaveLevel(SaveWriter &saveWriter) diff --git a/Source/pfile.cpp b/Source/pfile.cpp index ecf370c24..48fee9ebc 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -165,17 +165,15 @@ SaveWriter GetSaveWriter(uint32_t saveNum) return SaveWriter(GetSavePath(saveNum)); } -SaveWriter GetStashWriter() -{ - return SaveWriter(GetStashSavePath()); -} - +SaveWriter GetStashWriter() +{ + return SaveWriter(GetStashSavePath()); +} + +#if !(defined(UNPACKED_SAVES) && defined(DVL_NO_FILESYSTEM)) void CopySaveLocation(const std::string &sourceLocation, const std::string &targetLocation) { #if defined(UNPACKED_SAVES) -#ifdef DVL_NO_FILESYSTEM -#error "UNPACKED_SAVES requires either DISABLE_DEMOMODE or C++17 " -#endif if (!targetLocation.empty()) { CreateDir(targetLocation.c_str()); } @@ -191,9 +189,6 @@ void CopySaveLocation(const std::string &sourceLocation, const std::string &targ void RestoreSaveLocation(const std::string &targetLocation, const std::string &backupLocation) { #if defined(UNPACKED_SAVES) -#ifdef DVL_NO_FILESYSTEM -#error "UNPACKED_SAVES requires either DISABLE_DEMOMODE or C++17 " -#endif if (DirectoryExists(targetLocation.c_str())) { for (const std::filesystem::directory_entry &entry : std::filesystem::directory_iterator(targetLocation)) RemoveFile(entry.path().string().c_str()); @@ -207,6 +202,7 @@ void RestoreSaveLocation(const std::string &targetLocation, const std::string &b CopyFileOverwrite(backupLocation.c_str(), targetLocation.c_str()); #endif } +#endif void Game2UiPlayer(const Player &player, _uiheroinfo *heroinfo, bool bHasSaveFile) { @@ -641,12 +637,13 @@ const char *pfile_get_password() return gbIsMultiplayer ? PASSWORD_MULTI : PASSWORD_SINGLE; } -void pfile_write_hero(bool writeGameData) -{ - SaveWriter saveWriter = GetSaveWriter(gSaveNumber); - pfile_write_hero(saveWriter, writeGameData); -} - +void pfile_write_hero(bool writeGameData) +{ + SaveWriter saveWriter = GetSaveWriter(gSaveNumber); + pfile_write_hero(saveWriter, writeGameData); +} + +#if !(defined(UNPACKED_SAVES) && defined(DVL_NO_FILESYSTEM)) bool pfile_write_hero_with_backup(bool writeGameData) { const std::string backupPrefix = "backup_"; @@ -696,8 +693,10 @@ bool pfile_write_stash_with_backup() return false; } - -#ifndef DISABLE_DEMOMODE +#endif + +#ifndef DISABLE_DEMOMODE +#if !(defined(UNPACKED_SAVES) && defined(DVL_NO_FILESYSTEM)) void pfile_write_hero_demo(int demo) { const std::string saveLocation = GetSavePath(gSaveNumber, StrCat("demo_", demo, "_reference_")); @@ -719,13 +718,27 @@ HeroCompareResult pfile_compare_hero_demo(int demo, bool logDetails) SaveWriter saveWriter(actualSavePath.c_str()); pfile_write_hero(saveWriter, true); } - - return CompareSaves(actualSavePath, referenceSavePath, logDetails); -} -#endif - -void sfile_write_stash() -{ + + return CompareSaves(actualSavePath, referenceSavePath, logDetails); +} +#else +// Demo save comparison is unavailable on UNPACKED_SAVES targets without filesystem support. +void pfile_write_hero_demo(int demo) +{ + (void)demo; +} + +HeroCompareResult pfile_compare_hero_demo(int demo, bool logDetails) +{ + (void)demo; + (void)logDetails; + return { HeroCompareResult::ReferenceNotFound, {} }; +} +#endif +#endif + +void sfile_write_stash() +{ if (!Stash.dirty) return;