diff options
-rw-r--r-- | scumm/resource.cpp | 16 | ||||
-rw-r--r-- | scumm/scumm.cpp | 13 | ||||
-rw-r--r-- | scumm/scumm.h | 2 |
3 files changed, 23 insertions, 8 deletions
diff --git a/scumm/resource.cpp b/scumm/resource.cpp index d46b8aed83..32de5d9057 100644 --- a/scumm/resource.cpp +++ b/scumm/resource.cpp @@ -430,7 +430,7 @@ void ScummEngine::readIndexFile() { break; case MKID('MAXS'): - readMAXS(); + readMAXS(itemsize); break; case MKID('DSOU'): @@ -448,7 +448,8 @@ void ScummEngine::readIndexFile() { break; default: - error("Bad ID '%s' found in index file directory!", tag2str(blocktype)); + error("Bad ID %04X('%s') found in index file directory!", blocktype, + tag2str(blocktype)); return; } } @@ -530,7 +531,10 @@ void ScummEngine::allocResTypeData(int id, uint32 tag, int num, const char *name assert(id >= 0 && id < (int)(ARRAYSIZE(res.mode))); if (num >= 2000) { - error("Too many %ss (%d) in directory", name, num); + /* FIXME: this used to be an error but it seems the newer humongous titles + * exceed this presumably old limit, need to determine a new ceiling + */ + warning("Too many %ss (%d) in directory", name, num); } res.mode[id] = mode; @@ -2034,7 +2038,7 @@ void ScummEngine::resourceStats() { debug(1, "Total allocated size=%d, locked=%d(%d)", _allocatedSize, lockedSize, lockedNum); } -void ScummEngine::readMAXS() { +void ScummEngine::readMAXS(int blockSize) { if (_version == 8) { // CMI _fileHandle.seek(50 + 50, SEEK_CUR); // 176 - 8 _numVariables = _fileHandle.readUint32LE(); // 1500 @@ -2087,6 +2091,8 @@ void ScummEngine::readMAXS() { _shadowPaletteSize = NUM_SHADOW_PALETTE * 256; } else if (_heversion >= 72) { // sputm7.2 + if (blockSize != 32 + 8) + error("MAXS block of size %d not supported", blockSize); _fileHandle.readUint16LE(); _numVariables = _fileHandle.readUint16LE(); _numBitVariables = _fileHandle.readUint16LE(); @@ -2115,6 +2121,8 @@ void ScummEngine::readMAXS() { _numGlobalScripts = 200; _shadowPaletteSize = 256; } else if (_version == 6) { + if (blockSize != 30 + 8) + error("MAXS block of size %d not supported", blockSize); _numVariables = _fileHandle.readUint16LE(); _fileHandle.readUint16LE(); // 16 in Sam/DOTT _numBitVariables = _fileHandle.readUint16LE(); diff --git a/scumm/scumm.cpp b/scumm/scumm.cpp index 6ec7b7cb13..5ac49d56b7 100644 --- a/scumm/scumm.cpp +++ b/scumm/scumm.cpp @@ -214,7 +214,7 @@ static const ScummGameSettings scumm_settings[] = { /* Note that both full versions of Humongous games and demos were often released for * several interpreter versions... */ // Humongous Entertainment Scumm Version 6 (Windows versions are version 7 actually) - {"catalog", "Humongous Interactive Catalog", GID_HEGAME, 6, 60, MDT_NONE, + {"catalog", "Humongous Interactive Catalog", GID_HEGAME, 6, 70, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0}, {"farm", "Let's Explore the Farm with Buzzy", GID_HEGAME, 6, 70, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0}, @@ -237,7 +237,8 @@ static const ScummGameSettings scumm_settings[] = { // Humongous Entertainment Scumm Version 8.0 ? Scummsrc.80 {"zoodemo", "Putt-Putt Saves the Zoo (Demo)", GID_HEGAME, 6, 72, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_WINDOWS, 0}, - {"freddemo", "Freddi Fish 1: The Case of the Missing Kelp Seeds (Demo)", GID_FREDDEMO, 6, 72, MDT_NONE, + /* has old MAXS block */ + {"freddemo", "Freddi Fish 1: The Case of the Missing Kelp Seeds (Demo)", GID_FREDDEMO, 6, 71, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_WINDOWS, 0}, {"ff2-demo", "Freddi Fish 2: The Case of the Haunted Schoolhouse (Demo)", GID_HEGAME, 6, 72, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_WINDOWS, 0}, @@ -295,7 +296,7 @@ static const ScummGameSettings scumm_settings[] = { GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_WINDOWS, 0}, {"puttrace", "Putt-Putt Enters the Race", GID_HEGAME, 6, 72, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_WINDOWS, 0}, - {"bluesabctimedemo", "Blue's ABC Time Demo", GID_HEGAME, 6, 72, MDT_NONE, + {"bluesabctimedemo", "Blue's ABC Time (Demo)", GID_HEGAME, 6, 72, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_WINDOWS, 0}, // Humongous Entertainment Scumm Version 9.9 ? Scummsys.99 @@ -323,6 +324,12 @@ static const ScummGameSettings scumm_settings[] = { GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_WINDOWS, 0}, {"spyozon", "Spyfox 3: Operation Ozone", GID_HEGAME, 6, 72, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_WINDOWS, 0}, + {"bb2demo", "Backyard Baseball 2001 (Demo)", GID_HEGAME, 6, 72, MDT_NONE, + GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_WINDOWS, 0}, + {"football2002", "Backyard Football 2002 (Demo)", GID_HEGAME, 6, 72, MDT_NONE, + GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_WINDOWS, 0}, + {"pjsamdemo", "Pajama Sam: No Need To Hide When It's Dark Outside (Demo)", GID_HEGAME, 6, 72, MDT_NONE, + GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_WINDOWS, 0}, #endif {NULL, NULL, 0, 0, 0, MDT_NONE, 0, 0} }; diff --git a/scumm/scumm.h b/scumm/scumm.h index 17bc973915..79ba0ba4c4 100644 --- a/scumm/scumm.h +++ b/scumm/scumm.h @@ -674,7 +674,7 @@ protected: void loadRoomObjectsOldBundle(); virtual void readArrayFromIndexFile(); - virtual void readMAXS(); + virtual void readMAXS(int blockSize); virtual void readIndexFile(); virtual void loadCharset(int i); void nukeCharset(int i); |