diff options
Diffstat (limited to 'engines/scumm/charset.cpp')
-rw-r--r-- | engines/scumm/charset.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/engines/scumm/charset.cpp b/engines/scumm/charset.cpp index e0ab9edd5e..3c76773a70 100644 --- a/engines/scumm/charset.cpp +++ b/engines/scumm/charset.cpp @@ -383,8 +383,8 @@ int CharsetRendererClassic::getCharWidth(uint16 chr) { if (_vm->_useCJKMode) { if (_vm->_game.platform == Common::kPlatformFMTowns) { - if ((chr & 0xff00) == 0xfd00) { - chr &= 0xff; + if ((chr & 0x00ff) == 0x00fd) { + chr >>= 8; } else if (chr >= 256) { spacing = 8; } else if (useTownsFontRomCharacter(chr)) { @@ -496,8 +496,8 @@ int CharsetRenderer::getStringWidth(int arg, const byte *text) { if (_vm->_useCJKMode) { if (_vm->_game.platform == Common::kPlatformFMTowns) { - if ((chr >= 0x80 && chr <= 0x9f) || (chr >= 0xe0 && chr <= 0xfd)) - chr = (chr << 8) | text[pos++]; + if (checkSJISCode(chr)) + chr |= (text[pos++] << 8); } else if (chr & 0x80) { pos++; width += _vm->_2byteWidth; @@ -515,7 +515,7 @@ int CharsetRenderer::getStringWidth(int arg, const byte *text) { void CharsetRenderer::addLinebreaks(int a, byte *str, int pos, int maxwidth) { int lastspace = -1; int curw = 1; - byte chr; + uint16 chr; int oldID = getCurID(); int code = (_vm->_game.heversion >= 80) ? 127 : 64; @@ -579,8 +579,8 @@ void CharsetRenderer::addLinebreaks(int a, byte *str, int pos, int maxwidth) { if (_vm->_useCJKMode) { if (_vm->_game.platform == Common::kPlatformFMTowns) { - if ((chr >= 0x80 && chr <= 0x9f) || (chr >= 0xe0 && chr <= 0xfd)) - chr = (chr << 8) | str[pos++]; + if (checkSJISCode(chr)) + chr |= (str[pos++] << 8); curw += getCharWidth(chr); } else if (chr & 0x80) { pos++; @@ -894,13 +894,16 @@ void CharsetRendererClassic::printChar(int chr, bool ignoreCharsetMask) { #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE processTownsCharsetColors(_bytesPerPixel); + bool noSjis = false; if (_vm->_game.platform == Common::kPlatformFMTowns && _vm->_useCJKMode) { - if ((chr & 0xff00) == 0xfd00) - chr &= 0xff; + if ((chr & 0x00ff) == 0x00fd) { + chr >>= 8; + noSjis = true; + } } - if (useTownsFontRomCharacter(chr)) { + if (useTownsFontRomCharacter(chr) && !noSjis) { charPtr = 0; _vm->_cjkChar = chr; enableShadow(true); @@ -909,7 +912,7 @@ void CharsetRendererClassic::printChar(int chr, bool ignoreCharsetMask) { offsX = offsY = 0; } else #endif - if (_vm->_useCJKMode && (chr >= 128)) { + if (_vm->_useCJKMode && (chr >= 128) && !noSjis) { enableShadow(true); origWidth = width = _vm->_2byteWidth; origHeight = height = _vm->_2byteHeight; |