aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/resource.cpp45
-rw-r--r--scumm/scumm.cpp27
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}
};