aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/tsage/saveload.cpp3
-rw-r--r--engines/tsage/saveload.h6
2 files changed, 9 insertions, 0 deletions
diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp
index f495f5a433..1ad7fa5ed0 100644
--- a/engines/tsage/saveload.cpp
+++ b/engines/tsage/saveload.cpp
@@ -121,6 +121,7 @@ Common::Error Saver::save(int slot, const Common::String &saveName) {
// Set up the serialiser
Common::OutSaveFile *saveFile = g_system->getSavefileManager()->openForSaving(_vm->generateSaveName(slot));
Serialiser serialiser(NULL, saveFile);
+ serialiser.setSaveVersion(TSAGE_SAVEGAME_VERSION);
// Write out the savegame header
tSageSavegameHeader header;
@@ -171,6 +172,8 @@ Common::Error Saver::restore(int slot) {
readSavegameHeader(saveFile, header);
delete header.thumbnail;
+ serialiser.setSaveVersion(header.version);
+
// Load in data for objects that need to come at the start of the savegame
for (Common::List<SaveListener *>::iterator i = _listeners.begin(); i != _listeners.end(); ++i) {
(*i)->listenerSynchronise(serialiser);
diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h
index b1b98ce640..ec7cc7e496 100644
--- a/engines/tsage/saveload.h
+++ b/engines/tsage/saveload.h
@@ -68,6 +68,12 @@ class Serialiser : public Common::Serializer {
public:
Serialiser(Common::SeekableReadStream *in, Common::WriteStream *out) : Common::Serializer(in, out) {}
+ // HACK: TSAGE saved games contain a single byte for the savegame version,
+ // thus the normal syncVersion() Serializer member won't work here. In order
+ // to maintain compatibility with older game saves, this method is provided
+ // in order to set the savegame version from a byte
+ void setSaveVersion(byte version) { _version = version; }
+
void syncPointer(SavedObject **ptr, Common::Serializer::Version minVersion = 0,
Common::Serializer::Version maxVersion = kLastVersion);
void validate(const Common::String &s, Common::Serializer::Version minVersion = 0,