aboutsummaryrefslogtreecommitdiff
path: root/engines/glk/streams.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2018-11-25 22:25:31 -0800
committerPaul Gilbert2018-12-08 19:05:59 -0800
commit33a23bca1c0363340d14ed4c84e558e82a9f245e (patch)
tree7a0bdfbbb546050cdbce67678a940bfb4bb8ba39 /engines/glk/streams.cpp
parent6e6b285e83d44e0b35b1c8df3fd5fe325310810e (diff)
downloadscummvm-rg350-33a23bca1c0363340d14ed4c84e558e82a9f245e.tar.gz
scummvm-rg350-33a23bca1c0363340d14ed4c84e558e82a9f245e.tar.bz2
scummvm-rg350-33a23bca1c0363340d14ed4c84e558e82a9f245e.zip
GLK: FROTZ: Further reading/writing setup for savegames using Quetzal
Diffstat (limited to 'engines/glk/streams.cpp')
-rw-r--r--engines/glk/streams.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/engines/glk/streams.cpp b/engines/glk/streams.cpp
index 911f6d92bb..80f03dd7cb 100644
--- a/engines/glk/streams.cpp
+++ b/engines/glk/streams.cpp
@@ -25,6 +25,7 @@
#include "glk/events.h"
#include "glk/glk.h"
#include "glk/windows.h"
+#include "glk/frotz/detection.h"
#include "gui/saveload.h"
#include "common/file.h"
#include "common/savefile.h"
@@ -771,7 +772,9 @@ FileStream::FileStream(Streams *streams, frefid_t fref, glui32 fmode, glui32 roc
if (!_outFile)
error("Could open file for writing - %s", fname.c_str());
- if (fref->_slotNumber != -1)
+ // For creating savegames, write out the header. Frotz is a special case,
+ // since the Quetzal format is used for compatibility
+ if (fref->_slotNumber != -1 && g_vm->getInterpreterType() != INTERPRETER_FROTZ)
writeSavegameHeader(_outFile, fref->_description);
} else if (fmode == filemode_Read) {
if (_file.open(fname)) {
@@ -787,8 +790,11 @@ FileStream::FileStream(Streams *streams, frefid_t fref, glui32 fmode, glui32 roc
if (_inFile) {
// It's a save file, so skip over the header
SavegameHeader header;
- if (!readSavegameHeader(_inStream, header))
+ if (!(g_vm->getInterpreterType() == INTERPRETER_FROTZ ?
+ Frotz::FrotzMetaEngine::readSavegameHeader(_inStream, header) :
+ readSavegameHeader(_inStream, header)))
error("Invalid savegame");
+
if (header._interpType != g_vm->getInterpreterType() || header._language != g_vm->getLanguage()
|| header._md5 != g_vm->getGameMD5())
error("Savegame is for a different game");