aboutsummaryrefslogtreecommitdiff
path: root/engines/xeen/saves.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/xeen/saves.cpp')
-rw-r--r--engines/xeen/saves.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/engines/xeen/saves.cpp b/engines/xeen/saves.cpp
index 2a6b7d6619..f69757f4d0 100644
--- a/engines/xeen/saves.cpp
+++ b/engines/xeen/saves.cpp
@@ -143,7 +143,7 @@ Common::Error SavesManager::saveGameState(int slot, const Common::String &desc)
Map &map = *g_vm->_map;
map.saveMaze();
-
+ // Write the savegame header
XeenSavegameHeader header;
header._saveName = desc;
writeSavegameHeader(out, header);
@@ -159,6 +159,10 @@ Common::Error SavesManager::saveGameState(int slot, const Common::String &desc)
}
}
+ // Write out miscellaneous
+ FileManager &files = *g_vm->_files;
+ files.save(*out);
+
out->finalize();
delete out;
@@ -166,6 +170,11 @@ Common::Error SavesManager::saveGameState(int slot, const Common::String &desc)
}
Common::Error SavesManager::loadGameState(int slot) {
+ EventsManager &events = *g_vm->_events;
+ FileManager &files = *g_vm->_files;
+ Map &map = *g_vm->_map;
+ Party &party = *g_vm->_party;
+
Common::InSaveFile *saveFile = g_system->getSavefileManager()->openForLoading(
generateSaveName(slot));
if (!saveFile)
@@ -182,7 +191,7 @@ Common::Error SavesManager::loadGameState(int slot) {
}
// Set the total play time
- g_vm->_events->setPlayTime(header._totalFrames);
+ events.setPlayTime(header._totalFrames);
// Loop through loading the sides' save archives
SaveArchive *archives[2] = { File::_xeenSave, File::_darkSave };
@@ -198,6 +207,13 @@ Common::Error SavesManager::loadGameState(int slot) {
}
}
+ // Read in miscellaneous
+ files.load(*saveFile);
+
+ // Load the new map
+ map._loadDarkSide = files._isDarkCc;
+ map.load(party._mazeId);
+
return Common::kNoError;
}