diff options
-rw-r--r-- | scumm/resource.cpp | 45 | ||||
-rw-r--r-- | scumm/scumm.cpp | 27 |
2 files changed, 55 insertions, 17 deletions
diff --git a/scumm/resource.cpp b/scumm/resource.cpp index ff816fa5ab..0ed33c8483 100644 --- a/scumm/resource.cpp +++ b/scumm/resource.cpp @@ -571,6 +571,11 @@ void ScummEngine::readIndexFile() { readResTypeList(rtImage, MKID('AWIZ'), "images"); break; + case MKID('DIRT'): + _fileHandle.seek(itemsize - 8, SEEK_CUR); + warning("DIRT index block not yet handled, skipping"); + break; + case MKID('DISK'): _fileHandle.seek(itemsize - 8, SEEK_CUR); warning("DISK index block not yet handled, skipping"); @@ -2288,6 +2293,42 @@ void ScummEngine::readMAXS(int blockSize) { _numGlobalScripts = 2000; _shadowPaletteSize = NUM_SHADOW_PALETTE * 256; + } else if (_heversion >= 70 && (blockSize == 44 + 8)) { // C++ based engine + _numVariables = _fileHandle.readUint16LE(); + _fileHandle.readUint16LE(); // not used in spydemo + _fileHandle.readUint16LE(); // _numLocalVariables ? + _numLocalObjects = _fileHandle.readUint16LE(); + _numArray = _fileHandle.readUint16LE(); + _fileHandle.readUint16LE(); // unknown + _fileHandle.readUint16LE(); // unknown + _numFlObject = _fileHandle.readUint16LE(); + _numInventory = _fileHandle.readUint16LE(); + _numRooms = _fileHandle.readUint16LE(); + _numScripts = _fileHandle.readUint16LE(); + _numSounds = _fileHandle.readUint16LE(); + _numCharsets = _fileHandle.readUint16LE(); + _numCostumes = _fileHandle.readUint16LE(); + _numGlobalObjects = _fileHandle.readUint16LE(); + _numImages = _fileHandle.readUint16LE(); + _fileHandle.readUint16LE(); // unknown + _fileHandle.readUint16LE(); // _numLocalScriptOffsets + _fileHandle.readUint16LE(); // unknown + _fileHandle.readUint16LE(); // unknown + _fileHandle.readUint16LE(); // unknown + _fileHandle.readUint16LE(); // _numTalkie + + /* TODO check these values */ + + _objectRoomTable = (byte *)calloc(_numGlobalObjects, 1); + + _numNewNames = 10; + _numRoomVariables = 64; + + _objectRoomTable = (byte *)calloc(_numGlobalObjects * 4, 1); + + _numGlobalScripts = 200; + _shadowPaletteSize = 256; + } else if (_heversion >= 70 && (blockSize == 38 + 8)) { // Scummsys.9x _numVariables = _fileHandle.readUint16LE(); _fileHandle.readUint16LE(); // not used in spydemo @@ -2306,7 +2347,7 @@ void ScummEngine::readMAXS(int blockSize) { _numGlobalObjects = _fileHandle.readUint16LE(); _numImages = _fileHandle.readUint16LE(); _fileHandle.readUint16LE(); // unknown - _fileHandle.readUint16LE(); // _numLocalScripts? + _fileHandle.readUint16LE(); // _numLocalScriptOffsets _fileHandle.readUint16LE(); // unknown /* TODO check these values */ @@ -2320,8 +2361,6 @@ void ScummEngine::readMAXS(int blockSize) { _numGlobalScripts = 200; _shadowPaletteSize = 256; - } else if (_heversion >= 70 && (blockSize == 44 + 8)) { // C++ based engine - error("MAXS blocks from C++ based games not yet supported"); } else if (_heversion >= 70 && blockSize > 38) { // sputm7.2 if (blockSize != 32 + 8) error("MAXS block of size %d not supported, please report", blockSize); diff --git a/scumm/scumm.cpp b/scumm/scumm.cpp index 1b3773ea6a..eb6d0e5949 100644 --- a/scumm/scumm.cpp +++ b/scumm/scumm.cpp @@ -306,7 +306,6 @@ static const ScummGameSettings scumm_settings[] = { {"chase", "Spy Fox in Cheese Chase Game", GID_HEGAME, 6, 90, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, -#ifdef HEGAMES // Humongous Entertainment Scumm Version 9.8 ? Scummsys.98 // these and later games can easily be identified by the .(a) file instead of a .he1 // and INIB chunk in the .he0 @@ -325,6 +324,7 @@ static const ScummGameSettings scumm_settings[] = { {"BluesABCTimeDemo", "Blue's ABC Time (Demo)", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, + // Engine moved to c++ // Humongous Entertainment Scumm Version 9.9 ? Scummsys.99 {"sf2-demo", "Spyfox 2: Some Assembly Required (Demo)", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, @@ -333,30 +333,29 @@ static const ScummGameSettings scumm_settings[] = { {"mustard", "Spy Fox in Hold the Mustard", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, - // Humongous Entertainment Scumm Version ? engine moved to c++ - {"ff5demo", "Freddi Fish 5: The Case of the Creature of Coral Cave (Demo)", GID_HEGAME, 6, 90, MDT_NONE, + // Humongous Entertainment Scumm Version ? + {"ff5demo", "Freddi Fish 5: The Case of the Creature of Coral Cave (Demo)", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, - {"freddicove", "Freddi Fish 5: The Case of the Creature of Coral Cave", GID_HEGAME, 6, 90, MDT_NONE, + {"freddicove", "Freddi Fish 5: The Case of the Creature of Coral Cave", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, - {"ffhsdemo", "Freddi Fish 2: The Case of the Haunted Schoolhouse (Demo)", GID_HEGAME, 6, 90, MDT_NONE, + {"ffhsdemo", "Freddi Fish 2: The Case of the Haunted Schoolhouse (Demo)", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, - {"pj3-demo", "Pajama Sam 3: You Are What You Eat From Your Head to Your Feet (Demo)", GID_HEGAME, 6, 90, MDT_NONE, + {"pj3-demo", "Pajama Sam 3: You Are What You Eat From Your Head to Your Feet (Demo)", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, - {"pajama3", "Pajama Sam 3: You Are What You Eat From Your Head to Your Feet", GID_HEGAME, 6, 90, MDT_NONE, + {"pajama3", "Pajama Sam 3: You Are What You Eat From Your Head to Your Feet", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, - {"PuttsFunShop", "Putt-Putt's One-Stop Fun Shop", GID_HEGAME, 6, 90, MDT_NONE, + {"PuttsFunShop", "Putt-Putt's One-Stop Fun Shop", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, - {"putttime", "Putt-Putt Travels Through Time", GID_HEGAME, 6, 90, MDT_NONE, + {"putttime", "Putt-Putt Travels Through Time", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, - {"spyozon", "Spyfox 3: Operation Ozone", GID_HEGAME, 6, 90, MDT_NONE, + {"spyozon", "Spyfox 3: Operation Ozone", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, - {"bb2demo", "Backyard Baseball 2001 (Demo)", GID_HEGAME, 6, 90, MDT_NONE, + {"bb2demo", "Backyard Baseball 2001 (Demo)", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, - {"football2002", "Backyard Football 2002 (Demo)", GID_HEGAME, 6, 90, MDT_NONE, + {"football2002", "Backyard Football 2002 (Demo)", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, - {"pjsamdemo", "Pajama Sam: No Need To Hide When It's Dark Outside (Demo)", GID_HEGAME, 6, 90, MDT_NONE, + {"pjsamdemo", "Pajama Sam: No Need To Hide When It's Dark Outside (Demo)", GID_HEGAME, 6, 98, MDT_NONE, GF_NEW_OPCODES | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES, 0, 0}, -#endif {NULL, NULL, 0, 0, 0, MDT_NONE, 0, 0, 0} }; |