diff options
-rw-r--r-- | engines/toon/font.cpp | 43 | ||||
-rw-r--r-- | engines/toon/font.h | 1 |
2 files changed, 28 insertions, 16 deletions
diff --git a/engines/toon/font.cpp b/engines/toon/font.cpp index be5a306d8c..62eb0beac0 100644 --- a/engines/toon/font.cpp +++ b/engines/toon/font.cpp @@ -37,16 +37,32 @@ FontRenderer::FontRenderer(ToonEngine *vm) : _vm(vm) { // mapping extended characters required for foreign versions to font (animation) static const byte map_textToFont[0x80] = { - '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', // 0x8x - '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', // 0x9x - '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', // 0xAx - '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', // 0xBx - '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', // 0xCx - '?', 0x0b, '?', '?', '?', '?', 0x1e, '?', '?', '?', '?', '?', 0x1f, '?', '?', 0x19, // 0xDx + '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', // 0x8x + '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', // 0x9x + '?', 0x09, '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', // 0xAx + '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 0x0a, // 0xBx + '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', // 0xCx + '?', 0x0b, '?', '?', '?', '?', 0x1e, '?', '?', '?', '?', '?', 0x1f, '?', '?', 0x19, // 0xDx 0x0d, 0x04, 0x0e, '?', 0x1a, '?', '?', 0x18, 0x10, 0x0f, 0x12, 0x11, 0x09, 0x05, 0x14, 0x13, // 0xEx 0x23, 0x08, 0x23, 0x06, 0x15, 0x23, 0x1b, 0x23, 0x23, 0x16, 0x07, 0x17, 0x1c, 0x23, 0x23, 0x23 // 0xFx }; +byte FontRenderer::textToFont(byte c) { + // No need to remap simple characters. + if (c < 0x80) + return c; + + // The Spanish version shows grave accent over the 'e' when it should + // be acute. This happens both in the original interpreter and when + // using the common map which works for other languages, so we add a + // special case for it. + if (_vm->_language == Common::ES_ESP && c == 0xe9) + return 0x10; + + // Use the common map to convert the extended characters. + return map_textToFont[c - 0x80]; +} + void FontRenderer::renderText(int32 x, int32 y, Common::String origText, int32 mode) { debugC(5, kDebugFont, "renderText(%d, %d, %s, %d)", x, y, origText.c_str(), mode); @@ -75,8 +91,7 @@ void FontRenderer::renderText(int32 x, int32 y, Common::String origText, int32 m height = 0; curX = x; } else { - if (curChar >= 0x80) - curChar = map_textToFont[curChar - 0x80]; + curChar = textToFont(curChar); _currentFont->drawFontFrame(_vm->getMainSurface(), curChar, curX, curY, _currentFontColor); curX = curX + _currentFont->getFrameWidth(curChar) - 1; height = MAX(height, _currentFont->getFrameHeight(curChar)); @@ -105,8 +120,7 @@ void FontRenderer::computeSize(Common::String origText, int32 *retX, int32 *retY lineHeight = 0; lineWidth = 0; } else { - if (curChar >= 0x80) - curChar = map_textToFont[curChar - 0x80]; + curChar = textToFont(curChar); int32 charWidth = _currentFont->getFrameWidth(curChar) - 1; int32 charHeight = _currentFont->getFrameHeight(curChar); lineWidth += charWidth; @@ -192,9 +206,8 @@ void FontRenderer::renderMultiLineText(int32 x, int32 y, Common::String origText if (curChar == 32) { lastSpace = it; lastSpaceX = curWidth; - } else if (curChar >= 0x80) { - curChar = map_textToFont[curChar - 0x80]; - } + } else + curChar = textToFont(curChar); int width = _currentFont->getFrameWidth(curChar); curWidth += width - 2; @@ -259,9 +272,7 @@ void FontRenderer::renderMultiLineText(int32 x, int32 y, Common::String origText const byte *line = lines[i]; curX = x - lineSize[i] / 2; while (*line) { - byte curChar = *line; - if (curChar >= 0x80) - curChar = map_textToFont[curChar - 0x80]; + byte curChar = textToFont(*line); if (curChar != 32) _currentFont->drawFontFrame(_vm->getMainSurface(), curChar, curX + _vm->state()->_currentScrollValue, curY, _currentFontColor); curX = curX + _currentFont->getFrameWidth(curChar) - 2; //height = MAX(height, _currentFont->getFrameHeight(curChar)); diff --git a/engines/toon/font.h b/engines/toon/font.h index 713d8c3409..e1b00fbf54 100644 --- a/engines/toon/font.h +++ b/engines/toon/font.h @@ -45,6 +45,7 @@ protected: Animation *_currentFont; ToonEngine *_vm; byte _currentFontColor[4]; + byte textToFont(byte c); }; } // End of namespace Toon |