From c68eeb25cc2c83a42e4168b353af6347a2472f2f Mon Sep 17 00:00:00 2001 From: obligaron Date: Sun, 16 Jan 2022 17:16:54 +0100 Subject: [PATCH] Add additional missiles to save game --- Source/loadsave.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 68f303ceb..dd37cc4d7 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -1532,6 +1532,46 @@ void SaveDroppedItemLocations(SaveHelper &file, const std::unordered_map MaxMissilesForSaveGame) ? Missiles.size() - MaxMissilesForSaveGame : 0; + SaveHelper file("additionalMissiles", sizeof(uint32_t) + sizeof(int32_t) + (missileCountAdditional * BytesWrittenBySaveMissile)); + + file.WriteLE(VersionAdditionalMissiles); + file.WriteLE(missileCountAdditional); + + size_t wroteMissiles = 0; + for (auto &missile : Missiles) { + wroteMissiles += 1; + if (wroteMissiles >= MaxMissilesForSaveGame) { + SaveMissile(&file, missile); + } + } +} + +void LoadAdditionalMissiles() +{ + LoadHelper file("additionalMissiles"); + + if (!file.IsValid()) { + // no addtional Missiles saved + return; + } + + auto loadedVersion = file.NextLE(); + if (loadedVersion > VersionAdditionalMissiles) { + // unknown version + return; + } + uint32_t missileCountAdditional = file.NextLE(); + for (int i = 0; i < missileCountAdditional; i++) { + LoadMissile(&file); + } +} + const int DiabloItemSaveSize = 368; const int HellfireItemSaveSize = 372; @@ -1816,11 +1856,12 @@ void LoadGame(bool firstflag) ActiveMonsterCount = tmpNummonsters; ActiveObjectCount = tmpNobjects; - for (int &monstkill : MonsterKillCounts) monstkill = file.NextBE(); if (leveltype != DTYPE_TOWN) { + int8_t tmpActiveMissiles[MaxMissilesForSaveGame]; + for (int &monsterId : ActiveMonsters) monsterId = file.NextBE(); for (int i = 0; i < ActiveMonsterCount; i++) @@ -1858,6 +1899,8 @@ void LoadGame(bool firstflag) LoadDroppedItems(file, savedItemCount); + LoadAdditionalMissiles(); + for (bool &uniqueItemFlag : UniqueItemFlags) uniqueItemFlag = file.NextBool8(); @@ -2113,6 +2156,8 @@ void SaveGameData() file.WriteLE(AutomapActive ? 1 : 0); file.WriteBE(AutoMapScale); + + SaveAdditionalMissiles(); } void SaveGame()