aboutsummaryrefslogtreecommitdiff
path: root/engines/made/database.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2009-01-14 11:18:14 +0000
committerFilippos Karapetis2009-01-14 11:18:14 +0000
commit405680af6de7dfb09ca703eb08cecf1debe82893 (patch)
tree96f4e714ae945651d69e8ef5cc7e96785d80fe27 /engines/made/database.cpp
parentd5f9fdabc377c3eaae6cf530d94c1f52c7a3eb61 (diff)
downloadscummvm-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/database.cpp')
-rw-r--r--engines/made/database.cpp25
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();