diff options
author | Paul Gilbert | 2019-06-16 13:55:41 -0700 |
---|---|---|
committer | Paul Gilbert | 2019-06-16 14:59:26 -0700 |
commit | 919670a565ca38162346beb77414562d6126273a (patch) | |
tree | bb62b351f017fec80c2fc74202dd0cabe1cdd0fa /engines/glk/glk.cpp | |
parent | 553bb74f8c380ee31fb771c6619dad8e83fed8ce (diff) | |
download | scummvm-rg350-919670a565ca38162346beb77414562d6126273a.tar.gz scummvm-rg350-919670a565ca38162346beb77414562d6126273a.tar.bz2 scummvm-rg350-919670a565ca38162346beb77414562d6126273a.zip |
GLK: ADVSYS: Save/load fixes
Diffstat (limited to 'engines/glk/glk.cpp')
-rw-r--r-- | engines/glk/glk.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/engines/glk/glk.cpp b/engines/glk/glk.cpp index b3760cafd4..d154de2d39 100644 --- a/engines/glk/glk.cpp +++ b/engines/glk/glk.cpp @@ -190,11 +190,21 @@ Common::Error GlkEngine::loadGameState(int slot) { // so if present we can validate the save is for this game for (QuetzalReader::Iterator it = r.begin(); it != r.end(); ++it) { if ((*it)._id == ID_SCVM) { + // Skip over date/time & playtime + Common::SeekableReadStream *rs = it.getStream(); + rs->skip(14); + byte interpType = rs->readByte(); + byte language = rs->readByte(); + Common::String md5 = QuetzalReader::readString(rs); + delete rs; + + if (interpType != getInterpreterType() || language != getLanguage() || md5 != getGameMD5()) + errCode = Common::kReadingFailed; } } - if (errCode != Common::kNoError) { + if (errCode == Common::kNoError) { // Scan for an uncompressed memory chunk errCode = Common::kReadingFailed; // Presume we won't find chunk for (QuetzalReader::Iterator it = r.begin(); it != r.end(); ++it) { @@ -202,6 +212,7 @@ Common::Error GlkEngine::loadGameState(int slot) { Common::SeekableReadStream *rs = it.getStream(); errCode = readSaveData(rs).getCode(); delete rs; + break; } } } @@ -228,7 +239,7 @@ Common::Error GlkEngine::saveGameState(int slot, const Common::String &desc) { errCode = writeGameData(&ws).getCode(); } - if (errCode != Common::kNoError) { + if (errCode == Common::kNoError) { w.save(*file, desc); } |