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;  | 
