From f5247457740142385e2d5de229dbe7d1bb57f02b Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Mon, 9 Jul 2018 00:40:03 +0300 Subject: DREAMWEB: Simplify the character kerning checks --- engines/dreamweb/dreamweb.cpp | 1 - engines/dreamweb/dreamweb.h | 5 ++--- engines/dreamweb/keypad.cpp | 16 +++++----------- engines/dreamweb/print.cpp | 10 ++++------ 4 files changed, 11 insertions(+), 21 deletions(-) diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp index a10403c0e1..665e5b44de 100644 --- a/engines/dreamweb/dreamweb.cpp +++ b/engines/dreamweb/dreamweb.cpp @@ -91,7 +91,6 @@ DreamWebEngine::DreamWebEngine(OSystem *syst, const DreamWebGameDescription *gam // misc variables _speechCount = 0; _charShift = 0; - _kerning = 0; _brightPalette = false; _roomLoaded = 0; _didZoom = 0; diff --git a/engines/dreamweb/dreamweb.h b/engines/dreamweb/dreamweb.h index 0231f142d8..d34af40a05 100644 --- a/engines/dreamweb/dreamweb.h +++ b/engines/dreamweb/dreamweb.h @@ -316,7 +316,6 @@ public: // misc variables uint8 _speechCount; uint16 _charShift; - uint8 _kerning; bool _brightPalette; bool _copyProtection; uint8 _roomLoaded; @@ -647,10 +646,10 @@ public: // from print.cpp uint8 getNextWord(const GraphicsFile &charSet, const uint8 *string, uint8 *totalWidth, uint8 *charCount); - void printChar(const GraphicsFile &charSet, uint16 *x, uint16 y, uint8 c, uint8 nextChar, uint8 *width, uint8 *height); + void printChar(const GraphicsFile &charSet, uint16 *x, uint16 y, uint8 c, uint8 nextChar, uint8 *width, uint8 *height, bool kerning = false); void printChar(const GraphicsFile &charSet, uint16 x, uint16 y, uint8 c, uint8 nextChar, uint8 *width, uint8 *height); void printBoth(const GraphicsFile &charSet, uint16 *x, uint16 y, uint8 c, uint8 nextChar); - uint8 printDirect(const uint8** string, uint16 x, uint16 *y, uint8 maxWidth, bool centered); + uint8 printDirect(const uint8** string, uint16 x, uint16 *y, uint8 maxWidth, bool centered, bool kerning = false); uint8 printDirect(const uint8* string, uint16 x, uint16 y, uint8 maxWidth, bool centered); uint8 getNumber(const GraphicsFile &charSet, const uint8 *string, uint16 maxWidth, bool centered, uint16 *offset); uint8 kernChars(uint8 firstChar, uint8 secondChar, uint8 width); diff --git a/engines/dreamweb/keypad.cpp b/engines/dreamweb/keypad.cpp index 50e452eb82..476e9b5fb7 100644 --- a/engines/dreamweb/keypad.cpp +++ b/engines/dreamweb/keypad.cpp @@ -440,18 +440,16 @@ void DreamWebEngine::showLeftPage() { showFrame(_folderGraphics2, 0, y, 5, 0); _lineSpacing = 8; _charShift = 91; - _kerning = 1; uint8 pageIndex = _folderPage - 2; const uint8 *string = getTextInFile1(pageIndex * 2); y = 48; for (uint i = 0; i < 2; ++i) { uint8 lastChar; do { - lastChar = printDirect(&string, 2, &y, 140, false); + lastChar = printDirect(&string, 2, &y, 140, false, true); y += _lineSpacing; } while (lastChar != '\0'); } - _kerning = 0; _charShift = 0; _lineSpacing = 10; uint8 *bufferToSwap = workspace() + (48*kScreenwidth)+2; @@ -473,18 +471,16 @@ void DreamWebEngine::showRightPage() { showFrame(_folderGraphics2, 143, y, 2, 0); _lineSpacing = 8; - _kerning = 1; uint8 pageIndex = _folderPage - 1; const uint8 *string = getTextInFile1(pageIndex * 2); y = 48; for (uint i = 0; i < 2; ++i) { uint8 lastChar; do { - lastChar = printDirect(&string, 152, &y, 140, false); + lastChar = printDirect(&string, 152, &y, 140, false, true); y += _lineSpacing; } while (lastChar != '\0'); } - _kerning = 0; _lineSpacing = 10; } @@ -848,17 +844,15 @@ void DreamWebEngine::diaryKeyN() { void DreamWebEngine::showDiaryPage() { showFrame(_diaryGraphics, kDiaryx, kDiaryy, 0, 0); - _kerning = 1; useTempCharset(&_diaryCharset); _charShift = 91+91; const uint8 *string = getTextInFile1(_diaryPage); uint16 y = kDiaryy + 16; - printDirect(&string, kDiaryx + 48, &y, 240, 240 & 1); + printDirect(&string, kDiaryx + 48, &y, 240, 240 & 1, true); y = kDiaryy + 16; - printDirect(&string, kDiaryx + 129, &y, 240, 240 & 1); + printDirect(&string, kDiaryx + 129, &y, 240, 240 & 1, true); y = kDiaryy + 23; - printDirect(&string, kDiaryx + 48, &y, 240, 240 & 1); - _kerning = 0; + printDirect(&string, kDiaryx + 48, &y, 240, 240 & 1, true); _charShift = 0; useCharset1(); } diff --git a/engines/dreamweb/print.cpp b/engines/dreamweb/print.cpp index c119f284cc..b98d5dda67 100644 --- a/engines/dreamweb/print.cpp +++ b/engines/dreamweb/print.cpp @@ -60,7 +60,7 @@ uint8 DreamWebEngine::getNextWord(const GraphicsFile &charSet, const uint8 *stri } } -void DreamWebEngine::printChar(const GraphicsFile &charSet, uint16* x, uint16 y, uint8 c, uint8 nextChar, uint8 *width, uint8 *height) { +void DreamWebEngine::printChar(const GraphicsFile &charSet, uint16* x, uint16 y, uint8 c, uint8 nextChar, uint8 *width, uint8 *height, bool kerning) { // WORKAROUND: Some texts contain leftover tab characters, which will cause // OOB memory access when showing a character, as all the printable ones are // from 32 onwards. We compensate for that here by ignoring all the invalid @@ -77,7 +77,7 @@ void DreamWebEngine::printChar(const GraphicsFile &charSet, uint16* x, uint16 y, y -= 3; uint16 tmp = c - 32 + _charShift; showFrame(charSet, *x, y, tmp & 0x1ff, (tmp >> 8) & 0xfe, width, height); - if (_kerning == 0) + if (!kerning) *width = kernChars(c, nextChar, *width); (*x) += *width; } @@ -130,7 +130,7 @@ uint8 DreamWebEngine::printDirect(const uint8* string, uint16 x, uint16 y, uint8 return printDirect(&string, x, &y, maxWidth, centered); } -uint8 DreamWebEngine::printDirect(const uint8** string, uint16 x, uint16 *y, uint8 maxWidth, bool centered) { +uint8 DreamWebEngine::printDirect(const uint8** string, uint16 x, uint16 *y, uint8 maxWidth, bool centered, bool kerning) { _lastXPos = x; const GraphicsFile &charSet = *_currentCharset; while (true) { @@ -211,7 +211,6 @@ uint16 DreamWebEngine::waitFrames() { } const char *DreamWebEngine::monPrint(const char *string) { - _kerning = 1; uint16 x = _monAdX; const char *iterator = string; bool done = false; @@ -233,7 +232,7 @@ const char *DreamWebEngine::monPrint(const char *string) { break; } c = modifyChar(c); - printChar(_monitorCharset, &x, _monAdY, c, 0, NULL, NULL); + printChar(_monitorCharset, &x, _monAdY, c, 0, NULL, NULL, true); _cursLocX = x; _cursLocY = _monAdY; _mainTimer = 1; @@ -248,7 +247,6 @@ const char *DreamWebEngine::monPrint(const char *string) { _cursLocX = _monAdX; } - _kerning = 0; return iterator; } -- cgit v1.2.3