From 5a3b17de54dc12e1c12eedbda882ba5f1f61382e Mon Sep 17 00:00:00 2001 From: Travis Howell Date: Tue, 2 Mar 2004 01:20:18 +0000 Subject: Add better check for HE resource differences. Move stringLen to HE7. svn-id: r13130 --- scumm/intern.h | 2 +- scumm/resource.cpp | 2 +- scumm/script_v6he.cpp | 20 +------------------- scumm/script_v7he.cpp | 15 ++++++++++++++- scumm/scumm.h | 17 +++++++++-------- scumm/scummvm.cpp | 8 ++++---- 6 files changed, 30 insertions(+), 34 deletions(-) (limited to 'scumm') 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, -- cgit v1.2.3