From acf7f29dbda493da51854a59a00010876c83da69 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 21 Jan 2020 19:22:38 +0100 Subject: [PATCH] - moved Exhumed's engine state save code into the common part. This needs to be save for all games and the discrepancies have already caused problems so engine state saving needs to be unified. --- source/common/savegamehelp.cpp | 73 ++++++++++++++++++++++++++++++++++ source/common/savegamehelp.h | 3 ++ source/exhumed/src/save.cpp | 67 +------------------------------ 3 files changed, 78 insertions(+), 65 deletions(-) diff --git a/source/common/savegamehelp.cpp b/source/common/savegamehelp.cpp index 475173948..8fa337b18 100644 --- a/source/common/savegamehelp.cpp +++ b/source/common/savegamehelp.cpp @@ -351,3 +351,76 @@ FString G_BuildSaveName (const char *prefix) return name; } +#include "build.h" +#include "mmulti.h" +void SaveEngineState() +{ + auto fw = WriteSavegameChunk("engine.bin"); + fw->Write(&numsectors, sizeof(numsectors)); + fw->Write(sector, sizeof(sectortype) * numsectors); + fw->Write(&numwalls, sizeof(numwalls)); + fw->Write(wall, sizeof(walltype) * numwalls); + fw->Write(sprite, sizeof(spritetype) * MAXSPRITES); + fw->Write(headspritesect, sizeof(headspritesect)); + fw->Write(prevspritesect, sizeof(prevspritesect)); + fw->Write(nextspritesect, sizeof(nextspritesect)); + fw->Write(headspritestat, sizeof(headspritestat)); + fw->Write(prevspritestat, sizeof(prevspritestat)); + fw->Write(nextspritestat, sizeof(nextspritestat)); + + fw->Write(&tailspritefree, sizeof(tailspritefree)); + fw->Write(&myconnectindex, sizeof(myconnectindex)); + fw->Write(&connecthead, sizeof(connecthead)); + fw->Write(connectpoint2, sizeof(connectpoint2)); + fw->Write(&numframes, sizeof(numframes)); + fw->Write(&randomseed, sizeof(randomseed)); + fw->Write(&numshades, sizeof(numshades)); + + fw->Write(&g_visibility, sizeof(g_visibility)); + fw->Write(¶llaxtype, sizeof(parallaxtype)); + fw->Write(¶llaxyoffs_override, sizeof(parallaxyoffs_override)); + fw->Write(¶llaxyscale_override, sizeof(parallaxyscale_override)); + fw->Write(&pskybits_override, sizeof(pskybits_override)); + + fw->Write(show2dwall, sizeof(show2dwall)); + fw->Write(show2dsprite, sizeof(show2dsprite)); + fw->Write(show2dsector, sizeof(show2dsector)); +} + +void LoadEngineState() +{ + auto fr = ReadSavegameChunk("engine.bin"); + if (fr.isOpen()) + { + fr.Read(&numsectors, sizeof(numsectors)); + fr.Read(sector, sizeof(sectortype) * numsectors); + fr.Read(&numwalls, sizeof(numwalls)); + fr.Read(wall, sizeof(walltype) * numwalls); + fr.Read(sprite, sizeof(spritetype) * MAXSPRITES); + fr.Read(headspritesect, sizeof(headspritesect)); + fr.Read(prevspritesect, sizeof(prevspritesect)); + fr.Read(nextspritesect, sizeof(nextspritesect)); + fr.Read(headspritestat, sizeof(headspritestat)); + fr.Read(prevspritestat, sizeof(prevspritestat)); + fr.Read(nextspritestat, sizeof(nextspritestat)); + + fr.Read(&tailspritefree, sizeof(tailspritefree)); + fr.Read(&myconnectindex, sizeof(myconnectindex)); + fr.Read(&connecthead, sizeof(connecthead)); + fr.Read(connectpoint2, sizeof(connectpoint2)); + fr.Read(&numframes, sizeof(numframes)); + fr.Read(&randomseed, sizeof(randomseed)); + fr.Read(&numshades, sizeof(numshades)); + + fr.Read(&g_visibility, sizeof(g_visibility)); + fr.Read(¶llaxtype, sizeof(parallaxtype)); + fr.Read(¶llaxyoffs_override, sizeof(parallaxyoffs_override)); + fr.Read(¶llaxyscale_override, sizeof(parallaxyscale_override)); + fr.Read(&pskybits_override, sizeof(pskybits_override)); + + fr.Read(show2dwall, sizeof(show2dwall)); + fr.Read(show2dsprite, sizeof(show2dsprite)); + fr.Read(show2dsector, sizeof(show2dsector)); + fr.Close(); + } +} \ No newline at end of file diff --git a/source/common/savegamehelp.h b/source/common/savegamehelp.h index a829a8443..c045d4b58 100644 --- a/source/common/savegamehelp.h +++ b/source/common/savegamehelp.h @@ -17,5 +17,8 @@ class FileReader; FString G_BuildSaveName (const char *prefix); int G_ValidateSavegame(FileReader &fr, FString *savetitle, bool formenu); +void SaveEngineState(); +void LoadEngineState(); + #define SAVEGAME_EXT ".dsave" diff --git a/source/exhumed/src/save.cpp b/source/exhumed/src/save.cpp index 395e09dc9..81c96a0aa 100644 --- a/source/exhumed/src/save.cpp +++ b/source/exhumed/src/save.cpp @@ -40,37 +40,7 @@ static TArray sghelpers(TArray::NoInit); bool GameInterface::SaveGame(FSaveGameNode* sv) { - auto fw = WriteSavegameChunk("engine"); - fw->Write(&numsectors, sizeof(numsectors)); - fw->Write(sector, sizeof(sectortype) * numsectors); - fw->Write(&numwalls, sizeof(numwalls)); - fw->Write(wall, sizeof(walltype) * numwalls); - fw->Write(sprite, sizeof(spritetype) * kMaxSprites); - fw->Write(headspritesect, sizeof(headspritesect)); - fw->Write(prevspritesect, sizeof(prevspritesect)); - fw->Write(nextspritesect, sizeof(nextspritesect)); - fw->Write(headspritestat, sizeof(headspritestat)); - fw->Write(prevspritestat, sizeof(prevspritestat)); - fw->Write(nextspritestat, sizeof(nextspritestat)); - - fw->Write(&tailspritefree, sizeof(tailspritefree)); - fw->Write(&myconnectindex, sizeof(myconnectindex)); - fw->Write(&connecthead, sizeof(connecthead)); - fw->Write(connectpoint2, sizeof(connectpoint2)); - fw->Write(&numframes, sizeof(numframes)); - fw->Write(&randomseed, sizeof(randomseed)); - fw->Write(&numshades, sizeof(numshades)); - - fw->Write(&g_visibility, sizeof(g_visibility)); - fw->Write(¶llaxtype, sizeof(parallaxtype)); - fw->Write(¶llaxyoffs_override, sizeof(parallaxyoffs_override)); - fw->Write(¶llaxyscale_override, sizeof(parallaxyscale_override)); - fw->Write(&pskybits_override, sizeof(pskybits_override)); - - fw->Write(show2dwall, sizeof(show2dwall)); - fw->Write(show2dsprite, sizeof(show2dsprite)); - fw->Write(show2dsector, sizeof(show2dsector)); - + SaveEngineState(); for (auto sgh : sghelpers) sgh->Save(); SaveTextureState(); FinishSavegameWrite(); @@ -80,40 +50,7 @@ bool GameInterface::SaveGame(FSaveGameNode* sv) bool GameInterface::LoadGame(FSaveGameNode* sv) { OpenSaveGameForRead(sv->Filename); - auto fr = ReadSavegameChunk("engine"); - if (fr.isOpen()) - { - fr.Read(&numsectors, sizeof(numsectors)); - fr.Read(sector, sizeof(sectortype) * numsectors); - fr.Read(&numwalls, sizeof(numwalls)); - fr.Read(wall, sizeof(walltype) * numwalls); - fr.Read(sprite, sizeof(spritetype) * kMaxSprites); - fr.Read(headspritesect, sizeof(headspritesect)); - fr.Read(prevspritesect, sizeof(prevspritesect)); - fr.Read(nextspritesect, sizeof(nextspritesect)); - fr.Read(headspritestat, sizeof(headspritestat)); - fr.Read(prevspritestat, sizeof(prevspritestat)); - fr.Read(nextspritestat, sizeof(nextspritestat)); - - fr.Read(&tailspritefree, sizeof(tailspritefree)); - fr.Read(&myconnectindex, sizeof(myconnectindex)); - fr.Read(&connecthead, sizeof(connecthead)); - fr.Read(connectpoint2, sizeof(connectpoint2)); - fr.Read(&numframes, sizeof(numframes)); - fr.Read(&randomseed, sizeof(randomseed)); - fr.Read(&numshades, sizeof(numshades)); - - fr.Read(&g_visibility, sizeof(g_visibility)); - fr.Read(¶llaxtype, sizeof(parallaxtype)); - fr.Read(¶llaxyoffs_override, sizeof(parallaxyoffs_override)); - fr.Read(¶llaxyscale_override, sizeof(parallaxyscale_override)); - fr.Read(&pskybits_override, sizeof(pskybits_override)); - - fr.Read(show2dwall, sizeof(show2dwall)); - fr.Read(show2dsprite, sizeof(show2dsprite)); - fr.Read(show2dsector, sizeof(show2dsector)); - fr.Close(); - } + LoadEngineState(); for (auto sgh : sghelpers) sgh->Load(); LoadTextureState();