aboutsummaryrefslogtreecommitdiff
path: root/engines/sci
diff options
context:
space:
mode:
authorWalter van Niftrik2010-06-04 10:36:49 +0000
committerWalter van Niftrik2010-06-04 10:36:49 +0000
commita8acf7468c8f795355bb85962052eb8c02e2a4de (patch)
treef8514b02fd9bdb9e50d713c7e1a4137024ea0067 /engines/sci
parentf1a55a9c67886209e69900159c7917dfedc1d79f (diff)
downloadscummvm-rg350-a8acf7468c8f795355bb85962052eb8c02e2a4de.tar.gz
scummvm-rg350-a8acf7468c8f795355bb85962052eb8c02e2a4de.tar.bz2
scummvm-rg350-a8acf7468c8f795355bb85962052eb8c02e2a4de.zip
SCI: Add savegame version check in CheckSaveGame
svn-id: r49424
Diffstat (limited to 'engines/sci')
-rw-r--r--engines/sci/engine/kfile.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/engines/sci/engine/kfile.cpp b/engines/sci/engine/kfile.cpp
index ce501bab47..4be92015ab 100644
--- a/engines/sci/engine/kfile.cpp
+++ b/engines/sci/engine/kfile.cpp
@@ -44,6 +44,7 @@ struct SavegameDesc {
int id;
int date;
int time;
+ int version;
char name[SCI_MAX_SAVENAME_LENGTH];
};
@@ -276,6 +277,7 @@ void listSavegames(Common::Array<SavegameDesc> &saves) {
// We need to fix date in here, because we save DDMMYYYY instead of YYYYMMDD, so sorting wouldnt work
desc.date = ((desc.date & 0xFFFF) << 16) | ((desc.date & 0xFF0000) >> 8) | ((desc.date & 0xFF000000) >> 24);
desc.time = meta.savegame_time;
+ desc.version = meta.savegame_version;
if (meta.savegame_name.lastChar() == '\n')
meta.savegame_name.deleteLastChar();
@@ -444,7 +446,17 @@ reg_t kCheckSaveGame(EngineState *s, int argc, reg_t *argv) {
Common::Array<SavegameDesc> saves;
listSavegames(saves);
- return make_reg(0, savedir_nr < saves.size());
+ // Check for savegame slot being out of range
+ if (savedir_nr >= saves.size())
+ return NULL_REG;
+
+ // Check for compatible savegame version
+ int ver = saves[savedir_nr].version;
+ if (ver < MINIMUM_SAVEGAME_VERSION || ver > CURRENT_SAVEGAME_VERSION)
+ return NULL_REG;
+
+ // Otherwise we assume the savegame is OK
+ return make_reg(0, 1);
}
reg_t kGetSaveFiles(EngineState *s, int argc, reg_t *argv) {