aboutsummaryrefslogtreecommitdiff
path: root/scumm
diff options
context:
space:
mode:
authorTravis Howell2004-03-02 01:20:18 +0000
committerTravis Howell2004-03-02 01:20:18 +0000
commit5a3b17de54dc12e1c12eedbda882ba5f1f61382e (patch)
tree1ed253ecae9d66367baa0b8d3b9f54095b05bdb4 /scumm
parent4accb5b006f76ecd7bac63096939065ce1807bfb (diff)
downloadscummvm-rg350-5a3b17de54dc12e1c12eedbda882ba5f1f61382e.tar.gz
scummvm-rg350-5a3b17de54dc12e1c12eedbda882ba5f1f61382e.tar.bz2
scummvm-rg350-5a3b17de54dc12e1c12eedbda882ba5f1f61382e.zip
Add better check for HE resource differences.
Move stringLen to HE7. svn-id: r13130
Diffstat (limited to 'scumm')
-rw-r--r--scumm/intern.h2
-rw-r--r--scumm/resource.cpp2
-rw-r--r--scumm/script_v6he.cpp20
-rw-r--r--scumm/script_v7he.cpp15
-rw-r--r--scumm/scumm.h17
-rw-r--r--scumm/scummvm.cpp8
6 files changed, 30 insertions, 34 deletions
diff --git a/scumm/intern.h b/scumm/intern.h
index 69ebb6d204..685040dc0f 100644
--- a/scumm/intern.h
+++ b/scumm/intern.h
@@ -587,7 +587,6 @@ protected:
void o6_setVolume();
void o6_seekFilePos();
void o6_localizeArray();
- void o6_stringLen();
void o6_unknownFA();
void o6_redimArray();
void o6_readINI();
@@ -620,6 +619,7 @@ protected:
/* Version 7 script opcodes */
void o7_objectX();
void o7_objectY();
+ void o7_stringLen();
void o7_unknownF4();
void o7_unknownFB();
};
diff --git a/scumm/resource.cpp b/scumm/resource.cpp
index 4c81bde7a5..0d27d13c15 100644
--- a/scumm/resource.cpp
+++ b/scumm/resource.cpp
@@ -2048,7 +2048,7 @@ void ScummEngine::readMAXS() {
_shadowPaletteSize = NUM_SHADOW_PALETTE * 256;
// FIXME better check for the more recent windows based humongous games...
- } else if (_gameId == GID_PJSDEMO) {
+ } else if (_features & GF_HE7_RESOURCES) {
_fileHandle.readUint16LE();
_numVariables = _fileHandle.readUint16LE();
_numBitVariables = _fileHandle.readUint16LE();
diff --git a/scumm/script_v6he.cpp b/scumm/script_v6he.cpp
index 73d737857a..f68131ebed 100644
--- a/scumm/script_v6he.cpp
+++ b/scumm/script_v6he.cpp
@@ -344,7 +344,7 @@ void ScummEngine_v6he::setupOpcodes() {
/* EC */
OPCODE(o6_invalid),
OPCODE(o6_invalid),
- OPCODE(o6_stringLen),
+ OPCODE(o6_invalid),
OPCODE(o6_invalid),
/* F0 */
OPCODE(o6_invalid),
@@ -1244,24 +1244,6 @@ void ScummEngine_v6he::redimArray(int arrayId, int newX, int newY, int type) {
ah->dim2 = TO_LE_16(newX + 1);
}
-// TODO: It's Win32 specific
-void ScummEngine_v6he::o6_stringLen() {
- int a, len;
-
- if (_features & GF_PC) {
- o6_invalid();
- }
-
- a = pop();
-
- if (_gameId == GID_FREDDEMO) {
- len = strlen((char *)getStringAddress(a));
- } else {
- len = 0; // TODO: implement
- }
- push(len);
-}
-
void ScummEngine_v6he::o6_readINI() {
int len;
diff --git a/scumm/script_v7he.cpp b/scumm/script_v7he.cpp
index f2016a7cd5..858ffcd08c 100644
--- a/scumm/script_v7he.cpp
+++ b/scumm/script_v7he.cpp
@@ -344,7 +344,7 @@ void ScummEngine_v7he::setupOpcodes() {
/* EC */
OPCODE(o6_invalid),
OPCODE(o6_invalid),
- OPCODE(o6_stringLen),
+ OPCODE(o7_stringLen),
OPCODE(o6_invalid),
/* F0 */
OPCODE(o6_invalid),
@@ -406,6 +406,19 @@ void ScummEngine_v7he::o7_objectY() {
push(_objs[objnum].y_pos);
}
+void ScummEngine_v7he::o7_stringLen() {
+ int a, len;
+
+ a = pop();
+
+ if (_gameId == GID_FREDDEMO) {
+ len = strlen((char *)getStringAddress(a));
+ } else {
+ len = 0; // TODO: implement
+ }
+ push(len);
+}
+
void ScummEngine_v7he::o7_unknownF4() {
byte b;
int len;
diff --git a/scumm/scumm.h b/scumm/scumm.h
index e961b688d4..34b9183bc3 100644
--- a/scumm/scumm.h
+++ b/scumm/scumm.h
@@ -90,15 +90,16 @@ enum GameFeatures {
GF_FEW_LOCALS = 1 << 13,
GF_HUMONGOUS = 1 << 14,
GF_AFTER_HEV7 = 1 << 15,
+ GF_HE7_RESOURCES = 1 << 16,
- GF_FMTOWNS = 1 << 16,
- GF_AMIGA = 1 << 17,
- GF_NES = 1 << 18,
- GF_ATARI_ST = 1 << 19,
- GF_MACINTOSH = 1 << 20,
- GF_PC = 1 << 21,
- GF_WINDOWS = 1 << 22,
- GF_DEMO = 1 << 23,
+ GF_FMTOWNS = 1 << 17,
+ GF_AMIGA = 1 << 18,
+ GF_NES = 1 << 19,
+ GF_ATARI_ST = 1 << 20,
+ GF_MACINTOSH = 1 << 21,
+ GF_PC = 1 << 22,
+ GF_WINDOWS = 1 << 23,
+ GF_DEMO = 1 << 24,
GF_EXTERNAL_CHARSET = GF_SMALL_HEADER
};
diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp
index 486556465b..1528c7dec8 100644
--- a/scumm/scummvm.cpp
+++ b/scumm/scummvm.cpp
@@ -210,15 +210,15 @@ static const ScummGameSettings scumm_settings[] = {
/* Note that both full versions of Humongous games and demos were often released for
* several interpreter versions... */
{"zoodemo", "Putt-Putt Saves the Zoo (Demo)", GID_PJSDEMO, 6, MDT_NONE,
- GF_NEW_OPCODES | GF_AFTER_HEV7 | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_DEFAULT_TO_1X_SCALER, 0},
+ GF_NEW_OPCODES | GF_AFTER_HEV7 | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_HE7_RESOURCES | GF_DEFAULT_TO_1X_SCALER, 0},
{"freddi", "Freddi Fish 1: The Case of the Missing Kelp Seeds", GID_FREDDI, 6, MDT_NONE,
GF_NEW_OPCODES | GF_AFTER_HEV7 | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_DEFAULT_TO_1X_SCALER, 0},
{"freddemo", "Freddi Fish 1: The Case of the Missing Kelp Seeds (Demo)", GID_FREDDEMO, 6, MDT_NONE,
- GF_NEW_OPCODES | GF_AFTER_HEV7 | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_DEFAULT_TO_1X_SCALER, 0},
+ GF_NEW_OPCODES | GF_AFTER_HEV7 | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_HE7_RESOURCES | GF_DEFAULT_TO_1X_SCALER, 0},
{"pjs-demo", "Pajama Sam 1: No Need to Hide When It's Dark Outside (Demo)", GID_PJSDEMO, 6, MDT_NONE,
- GF_NEW_OPCODES | GF_AFTER_HEV7 | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_DEFAULT_TO_1X_SCALER, 0},
+ GF_NEW_OPCODES | GF_AFTER_HEV7 | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_HE7_RESOURCES | GF_DEFAULT_TO_1X_SCALER, 0},
{"ff2-demo", "Freddi Fish 2: The Case of the Haunted Schoolhouse (Demo)", GID_PJSDEMO, 6, MDT_NONE,
- GF_NEW_OPCODES | GF_AFTER_HEV7 | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_DEFAULT_TO_1X_SCALER, 0},
+ GF_NEW_OPCODES | GF_AFTER_HEV7 | GF_USE_KEY | GF_HUMONGOUS | GF_NEW_COSTUMES | GF_HE7_RESOURCES | GF_DEFAULT_TO_1X_SCALER, 0},
#ifdef HEGAMES
{"puttwin", "Putt-Putt Joins The Parade (Windows)", GID_PUTTPUTT, 6, MDT_NONE,