aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/text_rpg.cpp
diff options
context:
space:
mode:
authorathrxx2016-01-09 22:00:51 +0100
committerathrxx2018-11-14 17:22:22 +0100
commitf49eaa5654b2ee2e41b1794a4576d24967e2f7d7 (patch)
tree9366d630ba3fc4d5f7579bc2602075e6dfe35c6b /engines/kyra/text_rpg.cpp
parent61bd730bcf4ee311e79ab2fc49e3eca21018cdfe (diff)
downloadscummvm-rg350-f49eaa5654b2ee2e41b1794a4576d24967e2f7d7.tar.gz
scummvm-rg350-f49eaa5654b2ee2e41b1794a4576d24967e2f7d7.tar.bz2
scummvm-rg350-f49eaa5654b2ee2e41b1794a4576d24967e2f7d7.zip
KYRA: (EOB) - add support for FM-Towns version of EOB II
Diffstat (limited to 'engines/kyra/text_rpg.cpp')
-rw-r--r--engines/kyra/text_rpg.cpp34
1 files changed, 26 insertions, 8 deletions
diff --git a/engines/kyra/text_rpg.cpp b/engines/kyra/text_rpg.cpp
index 6dea66c14d..cc7ab068a7 100644
--- a/engines/kyra/text_rpg.cpp
+++ b/engines/kyra/text_rpg.cpp
@@ -75,10 +75,13 @@ void TextDisplayer_rpg::setupField(int dim, bool mode) {
_textDimData[dim].color2 = _vm->guiSettings()->colors.fill;
_screen->setScreenDim(dim);
- if (mode)
+ if (mode) {
+ _screen->set16bitShadingLevel(4);
clearCurDim();
- else
+ _screen->set16bitShadingLevel(0);
+ } else {
resetDimTextPositions(dim);
+ }
}
void TextDisplayer_rpg::resetDimTextPositions(int dim) {
@@ -123,7 +126,8 @@ void TextDisplayer_rpg::displayText(char *str, ...) {
int sdx = _screen->curDimIndex();
bool sjisTextMode = (_vm->gameFlags().lang == Common::JA_JPN && _vm->gameFlags().use16ColorMode && (sdx == 3 || sdx == 4 || sdx == 5 || sdx == 15)) ? true : false;
- int sjisOffs = sjisTextMode ? 8 : 9;
+ int sjisOffs = (sjisTextMode || _vm->game() == GI_EOB2) ? 8 : 9;
+ Screen::FontId of = (_vm->game() == GI_EOB2 && _vm->gameFlags().platform == Common::kPlatformFMTowns) ? _screen->setFont(Screen::FID_8_FNT) : _screen->_currentFont;
uint16 charsPerLine = (sd->w << 3) / (_screen->getFontWidth() + _screen->_charWidth);
@@ -225,6 +229,8 @@ void TextDisplayer_rpg::displayText(char *str, ...) {
if (_numCharsLeft)
printLine(_currentLine);
+
+ _screen->setFont(of);
}
char TextDisplayer_rpg::parseCommand() {
@@ -283,7 +289,7 @@ void TextDisplayer_rpg::readNextPara() {
void TextDisplayer_rpg::printLine(char *str) {
const ScreenDim *sd = _screen->_curDim;
int sdx = _screen->curDimIndex();
- bool sjisTextMode = (_vm->gameFlags().lang == Common::JA_JPN && _vm->gameFlags().use16ColorMode && (sdx == 3 || sdx == 4 || sdx == 5 || sdx == 15)) ? true : false;
+ bool sjisTextMode = _vm->gameFlags().lang == Common::JA_JPN && (_vm->gameFlags().use16ColorMode && (sdx == 3 || sdx == 4 || sdx == 5 || sdx == 15)) ? true : false;
int fh = (_screen->_currentFont == Screen::FID_SJIS_FNT) ? 9 : (_screen->getFontHeight() + _screen->_charOffset);
int lines = (sd->h - _screen->_charOffset) / fh;
@@ -301,7 +307,10 @@ void TextDisplayer_rpg::printLine(char *str) {
if (h2)
_screen->copyRegion(sd->sx << 3, sd->sy + fh, sd->sx << 3, sd->sy, sd->w << 3, h2, _screen->_curPage, _screen->_curPage, Screen::CR_NO_P_CHECK);
+ _screen->set16bitShadingLevel(4);
_screen->fillRect(sd->sx << 3, sd->sy + h1, ((sd->sx + sd->w) << 3) - 1, sd->sy + sd->h - 1, _textDimData[sdx].color2);
+ _screen->set16bitShadingLevel(0);
+
if (_textDimData[sdx].line)
_textDimData[sdx].line--;
}
@@ -482,7 +491,7 @@ void TextDisplayer_rpg::printLine(char *str) {
str[len] = 0;
_numCharsLeft = strlen(str);
- _lineWidth = sjisTextMode ? (_numCharsLeft << 2) : (_screen->_currentFont == Screen::FID_SJIS_FNT ? _numCharsLeft * 9: _screen->getTextWidth(str));
+ _lineWidth = sjisTextMode ? (_numCharsLeft << 2) : (_screen->_currentFont == Screen::FID_SJIS_FNT ? _numCharsLeft * 9 : _screen->getTextWidth(str));
if (!_numCharsLeft && (_textDimData[sdx].column + twoByteCharOffs) <= (sd->w << 3))
return;
@@ -499,7 +508,9 @@ void TextDisplayer_rpg::printDialogueText(int stringId, const char *pageBreakStr
assert(strlen(str) < kEoBTextBufferSize);
Common::strlcpy(_dialogueBuffer, str, kEoBTextBufferSize);
+ _screen->set16bitShadingLevel(4);
displayText(_dialogueBuffer);
+ _screen->set16bitShadingLevel(0);
if (pageBreakString) {
if (pageBreakString[0]) {
@@ -566,7 +577,7 @@ void TextDisplayer_rpg::textPageBreak() {
SWAP(_vm->_dialogueButtonLabelColor1, _vm->_dialogueButtonLabelColor2);
int cp = _screen->setCurPage(0);
- Screen::FontId cf = _screen->setFont((_vm->gameFlags().lang == Common::JA_JPN && _vm->gameFlags().use16ColorMode) ? Screen::FID_SJIS_FNT : Screen::FID_6_FNT);
+ Screen::FontId cf = _screen->setFont((_vm->gameFlags().lang == Common::JA_JPN && _vm->gameFlags().use16ColorMode) ? Screen::FID_SJIS_FNT : ((_vm->game() == GI_EOB2 && _vm->gameFlags().platform == Common::kPlatformFMTowns) ? Screen::FID_8_FNT : Screen::FID_6_FNT));
if (_vm->game() == GI_LOL)
_vm->_timer->pauseSingleTimer(11, true);
@@ -614,8 +625,11 @@ void TextDisplayer_rpg::textPageBreak() {
_vm->gui_drawBox(x + 8, (y & ~7) - 1, 66, 10, 0xEE, 0xCC, -1);
_screen->printText(_pageBreakString, (x + 37 - (strlen(_pageBreakString) << 1) + 4) & ~3, (y + 2) & ~7, 0xC1, 0);
} else {
+ int yOffs = (_vm->game() == GI_EOB2 && _vm->gameFlags().platform == Common::kPlatformFMTowns) ? 1 : 2;
+ _screen->set16bitShadingLevel(4);
_vm->gui_drawBox(x, y, w, _vm->guiSettings()->buttons.height, _vm->guiSettings()->colors.frame1, _vm->guiSettings()->colors.frame2, _vm->guiSettings()->colors.fill);
- _screen->printText(_pageBreakString, x + (w >> 1) - (_vm->screen()->getTextWidth(_pageBreakString) >> 1), y + 2, _vm->_dialogueButtonLabelColor1, 0);
+ _screen->set16bitShadingLevel(0);
+ _screen->printText(_pageBreakString, x + (w >> 1) - (_vm->screen()->getTextWidth(_pageBreakString) >> 1), y + yOffs, _vm->_dialogueButtonLabelColor1, 0);
}
_vm->removeInputTop();
@@ -659,12 +673,14 @@ void TextDisplayer_rpg::textPageBreak() {
}
} while (loop && !_vm->shouldQuit());
+ _screen->set16bitShadingLevel(4);
if (_vm->gameFlags().use16ColorMode)
_screen->fillRect(x + 8, y, x + 57, y + 9, _textDimData[_screen->curDimIndex()].color2);
else
- _screen->fillRect(x, y, x + w - 1, y + 8, _textDimData[_screen->curDimIndex()].color2);
+ _screen->fillRect(x, y, x + w - 1, y + _vm->guiSettings()->buttons.height - 1, _textDimData[_screen->curDimIndex()].color2);
clearCurDim();
+ _screen->set16bitShadingLevel(0);
_screen->updateScreen();
if (_vm->game() == GI_LOL)
@@ -709,7 +725,9 @@ void TextDisplayer_rpg::displayWaitButton() {
while (!_vm->processDialogue() && !_vm->shouldQuit()) {}
+ _screen->set16bitShadingLevel(4);
_screen->fillRect(_vm->_dialogueButtonPosX[0], _vm->_dialogueButtonPosY[0], _vm->_dialogueButtonPosX[0] + _vm->_dialogueButtonWidth - 1, _vm->_dialogueButtonPosY[0] + _vm->guiSettings()->buttons.height - 1, _vm->guiSettings()->colors.fill);
+ _screen->set16bitShadingLevel(0);
_screen->updateScreen();
_vm->_dialogueButtonWidth = 95;
SWAP(_vm->_dialogueButtonLabelColor1, _vm->_dialogueButtonLabelColor2);