Fix Kanji text positioning in DIG. Constants based on disassembly, but
it can bring some regressions to subtitles. svn-id: r31757
This commit is contained in:
parent
fc6fe46951
commit
0ca949db2a
3 changed files with 25 additions and 9 deletions
|
@ -49,6 +49,7 @@ void ScummEngine::loadCJKFont() {
|
|||
Common::File fp;
|
||||
_useCJKMode = false;
|
||||
_textSurfaceMultiplier = 1;
|
||||
_newLineCharacter = 0xfe;
|
||||
|
||||
if (_game.version <= 5 && _game.platform == Common::kPlatformFMTowns && _language == Common::JA_JPN) { // FM-TOWNS v3 / v5 Kanji
|
||||
int numChar = 256 * 32;
|
||||
|
@ -95,15 +96,17 @@ void ScummEngine::loadCJKFont() {
|
|||
fp.seek(2, SEEK_CUR);
|
||||
_2byteWidth = fp.readByte();
|
||||
_2byteHeight = fp.readByte();
|
||||
_newLineCharacter = 0xff;
|
||||
break;
|
||||
case Common::JA_JPN:
|
||||
_2byteWidth = 16;
|
||||
_2byteHeight = 16;
|
||||
_newLineCharacter = 0xfe;
|
||||
break;
|
||||
case Common::ZH_TWN:
|
||||
_2byteWidth = 16;
|
||||
_2byteHeight = 15;
|
||||
// 0xFE -> 0x21. also compared with 0x0d. perhaps a newline
|
||||
_newLineCharacter = 0x21;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -352,7 +355,7 @@ int CharsetRenderer::getStringWidth(int arg, const byte *text) {
|
|||
int code = (_vm->_game.heversion >= 80) ? 127 : 64;
|
||||
|
||||
while ((chr = text[pos++]) != 0) {
|
||||
if (chr == '\n' || chr == '\r')
|
||||
if (chr == '\n' || chr == '\r' || chr == _vm->_newLineCharacter)
|
||||
break;
|
||||
if (_vm->_game.heversion >= 72) {
|
||||
if (chr == code) {
|
||||
|
@ -479,6 +482,9 @@ void CharsetRenderer::addLinebreaks(int a, byte *str, int pos, int maxwidth) {
|
|||
if (chr == ' ')
|
||||
lastspace = pos - 1;
|
||||
|
||||
if (chr == _vm->_newLineCharacter)
|
||||
lastspace = pos - 1;
|
||||
|
||||
if ((chr & 0x80) && _vm->_useCJKMode) {
|
||||
pos++;
|
||||
curw += _vm->_2byteWidth;
|
||||
|
|
|
@ -1199,6 +1199,7 @@ public:
|
|||
bool _useCJKMode;
|
||||
int _2byteHeight;
|
||||
int _2byteWidth;
|
||||
byte _newLineCharacter;
|
||||
byte *get2byteCharPtr(int idx);
|
||||
|
||||
protected:
|
||||
|
|
|
@ -279,6 +279,12 @@ bool ScummEngine::handleNextCharsetCode(Actor *a, int *code) {
|
|||
break;
|
||||
}
|
||||
c = *buffer++;
|
||||
|
||||
if (c == _newLineCharacter) {
|
||||
c = 13;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (c) {
|
||||
case 1:
|
||||
c = 13; // new line
|
||||
|
@ -479,13 +485,14 @@ void ScummEngine::CHARSET_1() {
|
|||
_string[0].ypos = _screenHeight - 40;
|
||||
}
|
||||
|
||||
if (_string[0].ypos < 1)
|
||||
_string[0].ypos = 1;
|
||||
if (_string[0].ypos < 10)
|
||||
_string[0].ypos = 10;
|
||||
|
||||
if (_string[0].xpos < 5)
|
||||
_string[0].xpos = 5;
|
||||
if (_string[0].xpos > _screenWidth - 10)
|
||||
_string[0].xpos = _screenWidth - 10;
|
||||
|
||||
if (_string[0].xpos < 80)
|
||||
_string[0].xpos = 80;
|
||||
if (_string[0].xpos > _screenWidth - 80)
|
||||
_string[0].xpos = _screenWidth - 80;
|
||||
}
|
||||
|
||||
_charset->_top = _string[0].ypos + _screenTop;
|
||||
|
@ -551,7 +558,7 @@ void ScummEngine::CHARSET_1() {
|
|||
if (_charset->_center) {
|
||||
_nextLeft -= _charset->getStringWidth(0, _charsetBuffer + _charsetBufPos) / 2;
|
||||
if (_nextLeft < 0)
|
||||
_nextLeft = 0;
|
||||
_nextLeft = _string[0].xpos;
|
||||
}
|
||||
|
||||
_charset->_disableOffsX = _charset->_firstChar = !_keepText;
|
||||
|
@ -576,6 +583,8 @@ void ScummEngine::CHARSET_1() {
|
|||
#endif
|
||||
if (_charset->_center) {
|
||||
_nextLeft -= _charset->getStringWidth(0, _charsetBuffer + _charsetBufPos) / 2;
|
||||
if (_nextLeft < 0)
|
||||
_nextLeft = _string[0].xpos;
|
||||
}
|
||||
|
||||
if (_game.version == 0) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue