diff options
author | Filippos Karapetis | 2009-01-14 11:18:14 +0000 |
---|---|---|
committer | Filippos Karapetis | 2009-01-14 11:18:14 +0000 |
commit | 405680af6de7dfb09ca703eb08cecf1debe82893 (patch) | |
tree | 96f4e714ae945651d69e8ef5cc7e96785d80fe27 /engines/made | |
parent | d5f9fdabc377c3eaae6cf530d94c1f52c7a3eb61 (diff) | |
download | scummvm-rg350-405680af6de7dfb09ca703eb08cecf1debe82893.tar.gz scummvm-rg350-405680af6de7dfb09ca703eb08cecf1debe82893.tar.bz2 scummvm-rg350-405680af6de7dfb09ca703eb08cecf1debe82893.zip |
Game database headers are verified now
svn-id: r35861
Diffstat (limited to 'engines/made')
-rw-r--r-- | engines/made/database.cpp | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/engines/made/database.cpp b/engines/made/database.cpp index ba7454be3e..d8f9800ef6 100644 --- a/engines/made/database.cpp +++ b/engines/made/database.cpp @@ -370,10 +370,21 @@ GameDatabaseV2::~GameDatabaseV2() { } void GameDatabaseV2::load(Common::SeekableReadStream &sourceS) { + int16 version = sourceS.readUint16LE(); - // TODO: Read/verifiy header + // Manhole:NE, Rodney's Funscreen and LGOP2 are version 54 + // The earlier EGA version of Manhole is version 40 + if (version != 54 && version != 40) + warning("Unknown database version, known versions are 54 and 40"); - sourceS.seek(0x1C); + char header[6]; + sourceS.read(header, 6); + if (strncmp(header, "ADVSYS", 6)) + warning ("Unexpected database header, expected ADVSYS"); + + /*uint32 unk = */sourceS.readUint16LE(); + + sourceS.skip(18); uint32 textOffs = sourceS.readUint16LE() * 512; uint16 objectCount = sourceS.readUint16LE(); @@ -527,10 +538,14 @@ GameDatabaseV3::GameDatabaseV3(MadeEngine *vm) : GameDatabase(vm) { } void GameDatabaseV3::load(Common::SeekableReadStream &sourceS) { + char header[6]; + sourceS.read(header, 6); + if (strncmp(header, "ADVSYS", 6)) + warning ("Unexpected database header, expected ADVSYS"); - // TODO: Read/verifiy header + /*uint32 unk = */sourceS.readUint32LE(); - sourceS.seek(0x1E); + sourceS.skip(20); uint32 objectIndexOffs = sourceS.readUint32LE(); uint16 objectCount = sourceS.readUint16LE(); @@ -649,7 +664,7 @@ int16 GameDatabaseV3::loadgame(const char *filename, int16 version) { if (size != expectedSize) { warning("Unexpected save game size. Expected %d, size is %d", expectedSize, size); delete in; - return false; + return 1; } int16 saveVersion = in->readUint16LE(); |