mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-12 03:56:20 +00:00
SHERLOCK: SS: fix talkInterf to handle int. chars
so that line wrapping works properly for international versions
This commit is contained in:
parent
133b4defe9
commit
f713094c64
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -207,6 +207,7 @@ private:
|
||||
* the amount of text that's been displayed
|
||||
*/
|
||||
int waitForMore(int delay);
|
||||
|
||||
protected:
|
||||
SherlockEngine *_vm;
|
||||
OpcodeMethod *_opcodeTable;
|
||||
@ -254,6 +255,11 @@ protected:
|
||||
OpcodeReturn cmdToggleObject(const byte *&str);
|
||||
OpcodeReturn cmdWalkToCAnimation(const byte *&str);
|
||||
protected:
|
||||
/**
|
||||
* Checks, if a character is an opcode
|
||||
*/
|
||||
inline bool isOpcode(byte checkCharacter);
|
||||
|
||||
/**
|
||||
* Display the talk interface window
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user