diff options
author | athrxx | 2019-11-26 22:07:32 +0100 |
---|---|---|
committer | athrxx | 2019-12-18 20:50:44 +0100 |
commit | 5a1162e99929d4a4d6351f91b8527fc0f205ad0f (patch) | |
tree | 1c4783b434cf9f4dbd1d26342b9f675ac26ab852 /engines/kyra/gui | |
parent | 1f42999a7cd3b35df4f5611cf27c7d98974e8673 (diff) | |
download | scummvm-rg350-5a1162e99929d4a4d6351f91b8527fc0f205ad0f.tar.gz scummvm-rg350-5a1162e99929d4a4d6351f91b8527fc0f205ad0f.tar.bz2 scummvm-rg350-5a1162e99929d4a4d6351f91b8527fc0f205ad0f.zip |
KYRA: (EOB/PC98) - fix Japanese text display
Diffstat (limited to 'engines/kyra/gui')
-rw-r--r-- | engines/kyra/gui/gui_eob.cpp | 89 | ||||
-rw-r--r-- | engines/kyra/gui/saveload_eob.cpp | 2 |
2 files changed, 56 insertions, 35 deletions
diff --git a/engines/kyra/gui/gui_eob.cpp b/engines/kyra/gui/gui_eob.cpp index adc5312702..37370b552d 100644 --- a/engines/kyra/gui/gui_eob.cpp +++ b/engines/kyra/gui/gui_eob.cpp @@ -103,16 +103,19 @@ void EoBCoreEngine::gui_drawCharPortraitWithStats(int index) { if (_currentControlMode == 0) { int x2 = charPortraitPosX[index & 1]; int y2 = charPortraitPosY[index >> 1]; - Screen::FontId cf = _screen->setFont(Screen::FID_6_FNT); - + _screen->copyRegion(176, 168, x2 , y2, 64, 24, 2, 2, Screen::CR_NO_P_CHECK); _screen->copyRegion(240, 168, x2, y2 + 24, 64, 26, 2, 2, Screen::CR_NO_P_CHECK); int cp = _screen->setCurPage(2); + Screen::FontId cf = _screen->setFont(_flags.use16ColorMode ? Screen::FID_SJIS_SMALL_FNT : Screen::FID_6_FNT); + if (index == _exchangeCharacterId) _screen->printText(_characterGuiStringsSt[0], x2 + 2, y2 + 2, guiSettings()->colors.guiColorDarkRed, guiSettings()->colors.fill); else - _screen->printText(c->name, x2 + 2, y2 + (_flags.platform == Common::kPlatformFMTowns ? 1 : 2), txtCol1, guiSettings()->colors.fill); + _screen->printText(c->name, x2 + 2, y2 + (_flags.platform == Common::kPlatformFMTowns ? 1 : 2), txtCol1, _flags.use16ColorMode ? 0 : guiSettings()->colors.fill); + + _screen->setFont(Screen::FID_6_FNT); gui_drawFaceShape(index); gui_drawWeaponSlot(index, 0); @@ -139,16 +142,17 @@ void EoBCoreEngine::gui_drawCharPortraitWithStats(int index) { _screen->copyRegion(176, 0, 0, 0, 144, 168, 2, 2, Screen::CR_NO_P_CHECK); _screen->_curPage = 2; gui_drawFaceShape(index); + Screen::FontId cf = _screen->setFont(_flags.use16ColorMode ? Screen::FID_SJIS_SMALL_FNT : Screen::FID_6_FNT); _screen->printShadedText(c->name, 219, 6, txtCol2, 0, guiSettings()->colors.guiColorBlack); + _screen->setFont(Screen::FID_6_FNT); gui_drawHitpoints(index); gui_drawFoodStatusGraph(index); if (_currentControlMode == 1) { - Screen::FontId cf = _screen->setFont(Screen::FID_6_FNT); int statusTxtY = 158; - if (_flags.platform == Common::kPlatformFMTowns) { + if (_flags.lang == Common::JA_JPN) { statusTxtY = 157; - _screen->setFont(Screen::FID_8_FNT); + _screen->setFont(_flags.platform == Common::kPlatformFMTowns ? Screen::FID_8_FNT : Screen::FID_SJIS_FNT); } if (c->hitPointsCur == -10) @@ -164,12 +168,14 @@ void EoBCoreEngine::gui_drawCharPortraitWithStats(int index) { else if (c->flags & 8) _screen->printShadedText(_characterGuiStringsSt[6], 232, statusTxtY, guiSettings()->colors.guiColorLightRed, 0, guiSettings()->colors.guiColorBlack); - _screen->setFont(cf); + _screen->setFont(Screen::FID_6_FNT); for (int i = 0; i < 27; i++) gui_drawInventoryItem(i, 0, 2); gui_drawInventoryItem(16, 1, 2); + _screen->setFont(cf); + } else { static const uint16 cm2X1[] = { 179, 272, 301 }; static const uint16 cm2Y1[] = { 36, 51, 51 }; @@ -179,6 +185,8 @@ void EoBCoreEngine::gui_drawCharPortraitWithStats(int index) { for (int i = 0; i < 3; i++) _screen->fillRect(cm2X1[i], cm2Y1[i], cm2X2[i], cm2Y2[i], guiSettings()->colors.sfill); + _screen->setFont(cf); + _screen->printShadedText(_characterGuiStringsIn[0], 183, 42, guiSettings()->colors.guiColorWhite, guiSettings()->colors.sfill, guiSettings()->colors.guiColorBlack); _screen->printText(_chargenClassStrings[c->cClass], 183, 55, guiSettings()->colors.guiColorBlack, guiSettings()->colors.sfill); _screen->printText(_chargenAlignmentStrings[c->alignment], 183, 62, guiSettings()->colors.guiColorBlack, guiSettings()->colors.sfill); @@ -521,8 +529,10 @@ void EoBCoreEngine::gui_drawInventoryItem(int slot, int redraw, int pageNum) { _screen->fillRect(227, 65, 238, 69, guiSettings()->colors.guiColorBlack); int cnt = countQueuedItems(_characters[_updateCharNum].inventory[slot], -1, -1, 1, 1); x = cnt >= 10 ? 227 : 233; + Screen::FontId cf = _screen->setFont(Screen::FID_6_FNT); Common::String str = Common::String::format("%d", cnt); _screen->printText(str.c_str(), x, 65, guiSettings()->colors.guiColorWhite, 0); + _screen->setFont(cf); } } @@ -563,6 +573,8 @@ void EoBCoreEngine::gui_drawSpellbook() { int numTab = (_flags.gameID == GI_EOB1) ? 5 : 6; _screen->copyRegion(64, 121, 64, 121, 112, 56, 0, 2, Screen::CR_NO_P_CHECK); + Screen::FontId of = (_flags.gameID == GI_EOB1 && _flags.platform == Common::kPlatformPC98) ? _screen->setFont(Screen::FID_SJIS_SMALL_FNT) : _screen->_currentFont; + for (int i = 0; i < numTab; i++) { int col1 = 0; int col2 = 1; @@ -627,12 +639,15 @@ void EoBCoreEngine::gui_drawSpellbook() { col5 = textCol1; } + int textCol3 = _flags.use16ColorMode ? 0 : textCol2; + int textCol4 = _flags.use16ColorMode ? 0 : col3; + for (int i = 0; i < 7; i++) { int d = _openBookAvailableSpells[_openBookSpellLevel * 10 + _openBookSpellListOffset + i]; if (_openBookSpellSelectedItem == i) { if (d >= 0 && i < 6 && (i + _openBookSpellListOffset) < 9) { _screen->fillRect(textXs, 132 + 6 * i, textXs + _screen->getTextWidth(_openBookSpellList[d]) - 1, 137 + 6 * i, textCol2); - _screen->printText(_openBookSpellList[d], textXs, 132 + 6 * i, textCol1, textCol2); + _screen->printText(_openBookSpellList[d], textXs, 132 + 6 * i, textCol1, textCol3); } else if (i == 6) { if (_flags.gameID == GI_EOB2) _screen->fillRect(69, 169, 144, 175, textCol2); @@ -640,7 +655,7 @@ void EoBCoreEngine::gui_drawSpellbook() { } } else { if (d >= 0 && i < 6 && (i + _openBookSpellListOffset) < 9) - _screen->printText(_openBookSpellList[d], textXs, 132 + 6 * i, textCol1, col3); + _screen->printText(_openBookSpellList[d], textXs, 132 + 6 * i, textCol1, textCol4); else _screen->printText(_magicStrings1[0], textXa, textY, col5, col4); } @@ -658,6 +673,7 @@ void EoBCoreEngine::gui_drawSpellbook() { if (_openBookAvailableSpells[_openBookSpellLevel * 10 + 6] <= 0) _screen->drawShape(2, _blackBoxWideGrid, 146, 168, 0); + _screen->setFont(of); _screen->setCurPage(0); _screen->copyRegion(64, 121, 64, 121, 112, 56, 2, 0, Screen::CR_NO_P_CHECK); if (!_loading) @@ -818,11 +834,12 @@ int EoBCoreEngine::clickedCamp(Button *button) { _gui->runCampMenu(); + _screen->fillRect(0, 0, 175, 143, 0, 2); _screen->copyRegion(0, 0, 0, 120, 176, 24, 12, 2, Screen::CR_NO_P_CHECK); _screen->setScreenDim(cd); _thumbNail.free(); - + drawScene(0); for (int i = 0; i < 6; i++) @@ -2067,7 +2084,7 @@ void GUI_EoB::simpleMenu_flashSelection(const char *str, int x, int y, int color } void GUI_EoB::runCampMenu() { - Screen::FontId of = _screen->setFont(Screen::FID_8_FNT); + Screen::FontId of = _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT); Button *highlightButton = 0; Button *prevHighlightButton = 0; @@ -2233,9 +2250,9 @@ void GUI_EoB::runCampMenu() { _vm->dropCharacter(selectCharacterDialogue(53)); _vm->gui_drawPlayField(false); _screen->copyRegion(0, 120, 0, 0, 176, 24, 0, 12, Screen::CR_NO_P_CHECK); - _screen->setFont(Screen::FID_6_FNT); + Screen::FontId cfn = _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_6_FNT); _vm->gui_drawAllCharPortraitsWithStats(); - _screen->setFont(Screen::FID_8_FNT); + _screen->setFont(cfn); } else { displayTextBox(45); } @@ -2349,7 +2366,7 @@ bool GUI_EoB::runLoadMenu(int x, int y, bool fromMainMenu) { bool GUI_EoB::confirmDialogue2(int dim, int id, int deflt) { int od = _screen->curDimIndex(); - Screen::FontId of = _screen->setFont(Screen::FID_8_FNT); + Screen::FontId of = _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT); _screen->setScreenDim(dim); drawTextBox(dim, id); @@ -2418,7 +2435,7 @@ bool GUI_EoB::confirmDialogue2(int dim, int id, int deflt) { void GUI_EoB::messageDialogue(int dim, int id, int buttonTextCol) { int od = _screen->curDimIndex(); _screen->setScreenDim(dim); - Screen::FontId of = _screen->setFont(Screen::FID_8_FNT); + Screen::FontId of = _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT); drawTextBox(dim, id); const ScreenDim *dm = _screen->getScreenDim(dim); @@ -2554,7 +2571,7 @@ int GUI_EoB::getTextInput(char *dest, int x, int y, int destMaxLen, int textColo _menuCur = -1; printKatakanaOptions(0); - int bytesPerChar = (_vm->_flags.lang == Common::JA_JPN) ? 2 : 1; + int bytesPerChar = (_vm->_flags.platform == Common::kPlatformFMTowns) ? 2 : 1; int in = 0; do { @@ -2632,7 +2649,8 @@ int GUI_EoB::getTextInput(char *dest, int x, int y, int destMaxLen, int textColo } else if ((in > 31 && in < 126) || (in == 0x89)) { if (!(in == 32 && pos == 0)) { - if (in >= 97 && in <= 122) + // EOBI/PC-98 is the only version that allows small characters + if (in >= 97 && in <= 122 && !_vm->_flags.use16ColorMode) in -= 32; if (pos < len) { @@ -2999,6 +3017,8 @@ int GUI_EoB::selectSaveSlotDialogue(int x, int y, int id) { _screen->printShadedText(title, 52, 5, col1, 0, _vm->guiSettings()->colors.guiColorBlack); _screen->copyRegion(0, 0, x, y, 176, 144, 2, 0, Screen::CR_NO_P_CHECK); + _screen->fillRect(0, 0, 175, 143, 0, 2); + _screen->setCurPage(0); _screen->updateScreen(); @@ -3333,9 +3353,9 @@ void GUI_EoB::runMemorizePrayMenu(int charIndex, int spellType) { releaseButtons(buttonList); updateBoxFrameHighLight(-1); - _screen->setFont(Screen::FID_6_FNT); + Screen::FontId of = _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_6_FNT); _vm->gui_drawCharPortraitWithStats(charIndex); - _screen->setFont(Screen::FID_8_FNT); + _screen->setFont(of); memset(charSpellList, 0, 80); if (spellType && _vm->game() == GI_EOB2) @@ -3378,7 +3398,6 @@ void GUI_EoB::runMemorizePrayMenu(int charIndex, int spellType) { delete[] lh; } - void GUI_EoB::scribeScrollDialogue() { int16 *scrollInvSlot = new int16[32]; int16 *scrollCharacter = new int16[32]; @@ -3560,7 +3579,7 @@ bool GUI_EoB::restParty() { } _screen->setClearScreenDim(7); - _screen->setFont(Screen::FID_6_FNT); + Screen::FontId of = _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_6_FNT); restParty_updateRestTime(hours, true); @@ -3708,7 +3727,6 @@ bool GUI_EoB::restParty() { if (_vm->_characters[i].food) { if (_vm->_characters[i].hitPointsCur < _vm->_characters[i].hitPointsMax) { _vm->_characters[i].hitPointsCur++; - _screen->setFont(Screen::FID_6_FNT); _vm->gui_drawCharPortraitWithStats(i); } @@ -3725,7 +3743,6 @@ bool GUI_EoB::restParty() { continue; _vm->inflictCharacterDamage(i, 1); starving = true; - _screen->setFont(Screen::FID_6_FNT); _vm->gui_drawCharPortraitWithStats(i); } } @@ -3771,7 +3788,7 @@ bool GUI_EoB::restParty() { _vm->removeInputTop(); _screen->setScreenDim(4); - _screen->setFont(Screen::FID_8_FNT); + _screen->setFont(of); if (!res) { if (!injured) @@ -3785,7 +3802,7 @@ bool GUI_EoB::restParty() { bool GUI_EoB::confirmDialogue(int id) { int od = _screen->curDimIndex(); - Screen::FontId of = _screen->setFont(Screen::FID_8_FNT); + Screen::FontId of = _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT); Button *buttonList = initMenu(5); @@ -3899,7 +3916,7 @@ int GUI_EoB::selectCharacterDialogue(int id) { _screen->drawShape(0, _vm->_blackBoxSmallGrid, selX[i] + 48, selY[i], 0); _charSelectRedraw = true; } - + _screen->updateScreen(); if (count == 1) { int l = _vm->getCharacterLevelIndex(4, _vm->_characters[result].cClass); @@ -3925,7 +3942,7 @@ int GUI_EoB::selectCharacterDialogue(int id) { } } - Screen::FontId of = _screen->setFont(Screen::FID_6_FNT); + Screen::FontId of = _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_6_FNT); while (result == -2 && !_vm->shouldQuit()) { int inputFlag = _vm->checkInput(buttonList, false, 0); @@ -3958,13 +3975,13 @@ int GUI_EoB::selectCharacterDialogue(int id) { result = hlCur; } else if (inputFlag == _vm->_keyMap[Common::KEYCODE_ESCAPE] || inputFlag == 0x8010) { - _screen->setFont(Screen::FID_8_FNT); + _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT); drawMenuButton(buttonList, true, true, true); _screen->updateScreen(); _vm->_system->delayMillis(80); drawMenuButton(buttonList, false, false, true); _screen->updateScreen(); - _screen->setFont(Screen::FID_6_FNT); + _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_6_FNT); result = -1; } else if (inputFlag > 0x8010 && inputFlag < 0x8017) { @@ -3978,7 +3995,7 @@ int GUI_EoB::selectCharacterDialogue(int id) { if (hlCur >= 0) _vm->gui_drawCharPortraitWithStats(hlCur); - _screen->setFont(Screen::FID_8_FNT); + _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT); if (result != -1 && id != 53) { if (flags & 4) { @@ -4006,12 +4023,14 @@ int GUI_EoB::selectCharacterDialogue(int id) { void GUI_EoB::displayTextBox(int id) { int op = _screen->setCurPage(2); int od = _screen->curDimIndex(); - Screen::FontId of = _screen->setFont(Screen::FID_8_FNT); + Screen::FontId of = _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT); _screen->setClearScreenDim(11); const ScreenDim *dm = _screen->getScreenDim(11); drawMenuButtonBox(dm->sx << 3, dm->sy, dm->w << 3, dm->h, false, false); + _screen->setTextMarginRight((dm->sx + dm->w) << 3); _screen->printShadedText(getMenuString(id), (dm->sx << 3) + 5, dm->sy + 5, _vm->guiSettings()->colors.guiColorWhite, 0, _vm->guiSettings()->colors.guiColorBlack); + _screen->setTextMarginRight(Screen::SCREEN_W); _screen->copyRegion(dm->sx << 3, dm->sy, dm->sx << 3, dm->sy, dm->w << 3, dm->h, 2, 0, Screen::CR_NO_P_CHECK); _screen->updateScreen(); @@ -4037,10 +4056,12 @@ Button *GUI_EoB::initMenu(int id) { const ScreenDim *dm = _screen->getScreenDim(m->dim); _screen->fillRect(dm->sx << 3, dm->sy, ((dm->sx + dm->w) << 3) - 1, (dm->sy + dm->h) - 1, _vm->guiSettings()->colors.fill); _screen->setScreenDim(m->dim); + _screen->setTextMarginRight((dm->sx + dm->w) << 3); drawMenuButtonBox(dm->sx << 3, dm->sy, dm->w << 3, dm->h, false, false); } _screen->printShadedText(getMenuString(m->titleStrId), 5, 5, m->titleCol, 0, _vm->guiSettings()->colors.guiColorBlack); + _screen->setTextMarginRight(Screen::SCREEN_W); Button *buttons = 0; for (int i = 0; i < m->numButtons; i++) { @@ -4123,7 +4144,7 @@ void GUI_EoB::drawTextBox(int dim, int id) { int od = _screen->curDimIndex(); _screen->setScreenDim(dim); const ScreenDim *dm = _screen->getScreenDim(dim); - Screen::FontId of = _screen->setFont(Screen::FID_8_FNT); + Screen::FontId of = _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT); if (dm->w <= 22 && dm->h <= 84) _screen->copyRegion(dm->sx << 3, dm->sy, 0, dm->h, dm->w << 3, dm->h, 0, 2, Screen::CR_NO_P_CHECK); @@ -4179,7 +4200,7 @@ void GUI_EoB::memorizePrayMenuPrintString(int spellId, int bookPageIndex, int sp if (spellId) { Common::String s; - if (_vm->_flags.platform == Common::kPlatformFMTowns) { + if (_vm->_flags.lang == Common::JA_JPN) { s = spellType ? _vm->_clericSpellList[spellId] : _vm->_mageSpellList[spellId]; for (int i = s.size() >> 1; i < 17; ++i) s.insertChar(' ', s.size()); @@ -4327,7 +4348,7 @@ void GUI_EoB::sortSaveSlots() { } void GUI_EoB::restParty_updateRestTime(int hours, bool init) { - Screen::FontId of = _screen->setFont(Screen::FID_8_FNT); + Screen::FontId of = _screen->setFont(_vm->_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_8_FNT); int od = _screen->curDimIndex(); _screen->setScreenDim(10); diff --git a/engines/kyra/gui/saveload_eob.cpp b/engines/kyra/gui/saveload_eob.cpp index 07c99d5b95..1bf6b1da2c 100644 --- a/engines/kyra/gui/saveload_eob.cpp +++ b/engines/kyra/gui/saveload_eob.cpp @@ -280,7 +280,7 @@ Common::Error EoBCoreEngine::loadGameState(int slot) { _screen->setScreenPalette(_screen->getPalette(0)); _sceneUpdateRequired = true; - _screen->setFont(Screen::FID_6_FNT); + _screen->setFont(_flags.use16ColorMode ? Screen::FID_SJIS_FNT : Screen::FID_6_FNT); for (int i = 0; i < 6; i++) { for (int ii = 0; ii < 10; ii++) { |