diff options
author | Martin Kiewitz | 2015-06-14 21:14:17 +0200 |
---|---|---|
committer | Martin Kiewitz | 2015-06-14 21:14:17 +0200 |
commit | f713094c6427e22c442b9b98be0f79d383d32b23 (patch) | |
tree | 09aa80edfc88a92221735f9bba471c208f430776 /engines/sherlock | |
parent | 133b4defe9f37ac1b2198b843282ab0b0a0e7b6b (diff) | |
download | scummvm-rg350-f713094c6427e22c442b9b98be0f79d383d32b23.tar.gz scummvm-rg350-f713094c6427e22c442b9b98be0f79d383d32b23.tar.bz2 scummvm-rg350-f713094c6427e22c442b9b98be0f79d383d32b23.zip |
SHERLOCK: SS: fix talkInterf to handle int. chars
so that line wrapping works properly for international versions
Diffstat (limited to 'engines/sherlock')
-rw-r--r-- | engines/sherlock/scalpel/scalpel_talk.cpp | 6 | ||||
-rw-r--r-- | engines/sherlock/talk.cpp | 10 | ||||
-rw-r--r-- | engines/sherlock/talk.h | 6 |
3 files changed, 18 insertions, 4 deletions
diff --git a/engines/sherlock/scalpel/scalpel_talk.cpp b/engines/sherlock/scalpel/scalpel_talk.cpp index c514ab1522..c86720f778 100644 --- a/engines/sherlock/scalpel/scalpel_talk.cpp +++ b/engines/sherlock/scalpel/scalpel_talk.cpp @@ -214,10 +214,10 @@ void ScalpelTalk::talkInterface(const byte *&str) { width += screen.charWidth(str[idx]); ++idx; ++_charCount; - } while (width < 298 && str[idx] && str[idx] != '{' && str[idx] < _opcodes[0]); + } while (width < 298 && str[idx] && str[idx] != '{' && (!isOpcode(str[idx]))); if (str[idx] || width >= 298) { - if (str[idx] < _opcodes[0] && str[idx] != '{') { + if ((!isOpcode(str[idx])) && str[idx] != '{') { --idx; --_charCount; } @@ -261,7 +261,7 @@ void ScalpelTalk::talkInterface(const byte *&str) { str += idx; // If line wrap occurred, then move to after the separating space between the words - if (str[0] < _opcodes[0] && str[0] != '{') + if ((!isOpcode(str[0])) && str[0] != '{') ++str; _yp += 9; diff --git a/engines/sherlock/talk.cpp b/engines/sherlock/talk.cpp index a349d7193d..6b122b4f1e 100644 --- a/engines/sherlock/talk.cpp +++ b/engines/sherlock/talk.cpp @@ -1059,7 +1059,7 @@ void Talk::doScript(const Common::String &script) { // Start of comment, so skip over it while (*str++ != '}') ; - } else if (c >= _opcodes[0] && c < (_opcodes[0] + 99) && _opcodeTable[c - _opcodes[0]]) { + } else if (isOpcode(c)) { // Handle control code switch ((this->*_opcodeTable[c - _opcodes[0]])(str)) { case RET_EXIT: @@ -1200,6 +1200,14 @@ int Talk::waitForMore(int delay) { return key2; } +inline bool Talk::isOpcode(byte checkCharacter) { + if ((checkCharacter < _opcodes[0]) || (checkCharacter >= (_opcodes[0] + 99))) + return false; // outside of range + if (_opcodeTable[checkCharacter - _opcodes[0]]) + return true; + return false; +} + void Talk::popStack() { if (!_scriptStack.empty()) { ScriptStackEntry scriptEntry = _scriptStack.pop(); diff --git a/engines/sherlock/talk.h b/engines/sherlock/talk.h index 6695e4ea08..563f780365 100644 --- a/engines/sherlock/talk.h +++ b/engines/sherlock/talk.h @@ -207,6 +207,7 @@ private: * the amount of text that's been displayed */ int waitForMore(int delay); + protected: SherlockEngine *_vm; OpcodeMethod *_opcodeTable; @@ -255,6 +256,11 @@ protected: OpcodeReturn cmdWalkToCAnimation(const byte *&str); protected: /** + * Checks, if a character is an opcode + */ + inline bool isOpcode(byte checkCharacter); + + /** * Display the talk interface window */ virtual void talkInterface(const byte *&str) = 0; |