diff options
-rw-r--r-- | engines/sherlock/talk.cpp | 27 | ||||
-rw-r--r-- | engines/sherlock/talk.h | 7 |
2 files changed, 24 insertions, 10 deletions
diff --git a/engines/sherlock/talk.cpp b/engines/sherlock/talk.cpp index 416f04f631..e399c268ed 100644 --- a/engines/sherlock/talk.cpp +++ b/engines/sherlock/talk.cpp @@ -750,15 +750,17 @@ void Talk::doScript(const Common::String &script) { // Start of comment, so skip over it while (*str++ != '}') ; - } else if (isOpcode(c)) { - // Handle control code - switch ((this->*_opcodeTable[c - _opcodes[0]])(str)) { - case RET_EXIT: - return; - case RET_CONTINUE: - continue; - default: - break; + } else if (isPossibleOpcode(c)) { + if (isOpcode(c)) { + // Handle control code + switch ((this->*_opcodeTable[c - _opcodes[0]])(str)) { + case RET_EXIT: + return; + case RET_CONTINUE: + continue; + default: + break; + } } ++str; @@ -912,6 +914,13 @@ bool Talk::isOpcode(byte checkCharacter) { return false; } +bool Talk::isPossibleOpcode(byte checkCharacter) { + if (IS_SERRATED_SCALPEL && _vm->getLanguage() == Common::ES_ESP) + return checkCharacter >= 128; + + return isOpcode(checkCharacter); +} + void Talk::popStack() { if (!_scriptStack.empty()) { ScriptStackEntry scriptEntry = _scriptStack.pop(); diff --git a/engines/sherlock/talk.h b/engines/sherlock/talk.h index f354c28c1b..a0845efb2c 100644 --- a/engines/sherlock/talk.h +++ b/engines/sherlock/talk.h @@ -215,11 +215,16 @@ protected: OpcodeReturn cmdWalkToCAnimation(const byte *&str); protected: /** - * Checks, if a character is an opcode + * Checks if a character is an opcode */ bool isOpcode(byte checkCharacter); /** + * Checks if a character might be an opcode + */ + bool isPossibleOpcode(byte checkCharacter); + + /** * Form a table of the display indexes for statements */ void setTalkMap(); |