diff options
author | uruk | 2013-08-11 14:06:15 +0200 |
---|---|---|
committer | uruk | 2013-08-11 14:06:15 +0200 |
commit | 698dae201a38218de71888bc54326429be79013e (patch) | |
tree | f062b066d453c335aa2ea2ec9034149b8da1ed8a | |
parent | ee6119d07feea83718f7a3ce9073d92de2747750 (diff) | |
download | scummvm-rg350-698dae201a38218de71888bc54326429be79013e.tar.gz scummvm-rg350-698dae201a38218de71888bc54326429be79013e.tar.bz2 scummvm-rg350-698dae201a38218de71888bc54326429be79013e.zip |
AVALANCHE: Introduce Graphics::drawText(). Rename raw to fontType, move it from Gyro to Graphics. Update the rest of the code using these two. Simplifying underlining of characters in Parser and Dropdown.
-rw-r--r-- | engines/avalanche/dropdown2.cpp | 21 | ||||
-rw-r--r-- | engines/avalanche/graphics.cpp | 13 | ||||
-rw-r--r-- | engines/avalanche/graphics.h | 6 | ||||
-rw-r--r-- | engines/avalanche/gyro2.h | 4 | ||||
-rw-r--r-- | engines/avalanche/parser.cpp | 27 | ||||
-rw-r--r-- | engines/avalanche/scrolls2.cpp | 25 | ||||
-rw-r--r-- | engines/avalanche/scrolls2.h | 2 | ||||
-rw-r--r-- | engines/avalanche/timeout2.cpp | 4 |
8 files changed, 44 insertions, 58 deletions
diff --git a/engines/avalanche/dropdown2.cpp b/engines/avalanche/dropdown2.cpp index bc8414d1a6..89eb231280 100644 --- a/engines/avalanche/dropdown2.cpp +++ b/engines/avalanche/dropdown2.cpp @@ -285,28 +285,25 @@ void Dropdown::chalk(int16 x, int16 y, char t, Common::String z, bool valid) { else ander = 170; + fontType font; for (byte fv = 0; fv < z.size(); fv++) - for (byte ff = 0; ff < 8; ff++) { - byte pixel = ~(_vm->_gyro->characters[z[fv]][ff] & ander); // Note that it's the bitwise NOT operator! - for (byte bit = 0; bit < 8; bit++) { - byte pixelBit = (pixel >> bit) & 1; - *_vm->_graphics->getPixel(x * 8 + fv * 8 + 7 - bit, y + ff) = pixelBit + (pixelBit << 1) + (pixelBit << 2); - // We don't have to bother with the planes, since they all have the same value. See the original. - // Note that it's the bitwise OR operator! - } - } + for (byte ff = 0; ff < 8; ff++) + font[z[fv]][ff] = _vm->_gyro->characters[z[fv]][ff] & ander; + _vm->_graphics->drawText(_vm->_graphics->_surface, z, font, 8, x * 8, y, black); + + // Underline the selected character. if (! z.contains(t)) return; else { byte fv; for (fv = 0; z[fv] != t; fv++); // Search for the character in the string. - // Similar to the cycle before. - byte pixel = ~ ander; + byte pixel = ander; for (byte bit = 0; bit < 8; bit++) { byte pixelBit = (pixel >> bit) & 1; - *_vm->_graphics->getPixel(x * 8 + fv * 8 + 7 - bit, y + 8) = pixelBit | (pixelBit << 1) | (pixelBit << 2); + if (pixelBit) + *_vm->_graphics->getPixel(x * 8 + fv * 8 + 7 - bit, y + 8) = black; } } } diff --git a/engines/avalanche/graphics.cpp b/engines/avalanche/graphics.cpp index 42a36ff83c..4b30f6fdb2 100644 --- a/engines/avalanche/graphics.cpp +++ b/engines/avalanche/graphics.cpp @@ -249,6 +249,19 @@ void Graphics::drawTriangle(::Graphics::Surface &surface, Common::Point *p, byte +void Graphics::drawText(::Graphics::Surface &surface, const Common::String &text, fontType font, byte fontHeight, int16 x, int16 y, byte color) { + for (byte i = 0; i < text.size(); i++) + for (byte j = 0; j < fontHeight; j++) { + byte pixel = font[text[i]][j]; + for (byte bit = 0; bit < 8; bit++) { + byte pixelBit = (pixel >> bit) & 1; + if (pixelBit) + *(byte *)surface.getBasePtr(x + i * 8 + 7 - bit, y + j) = color; + } + } +} + + ::Graphics::Surface Graphics::loadPictureGraphic(Common::File &file) { // This function mimics Pascal's getimage(). diff --git a/engines/avalanche/graphics.h b/engines/avalanche/graphics.h index c4c1e85b02..7492141c43 100644 --- a/engines/avalanche/graphics.h +++ b/engines/avalanche/graphics.h @@ -36,6 +36,8 @@ namespace Avalanche { class AvalancheEngine; +typedef byte fontType[256][16]; // raw font type + typedef byte manitype[2049]; // manitype = array[5..2053] of byte; // Be aware!!! @@ -99,6 +101,10 @@ public: + void drawText(::Graphics::Surface &surface, const Common::String &text, fontType font, byte fontHeight, int16 x, int16 y, byte color); + + + // The caller has to .free() the returned Surfaces!!! ::Graphics::Surface loadPictureGraphic(Common::File &file); // Reads Graphic-planar EGA data. diff --git a/engines/avalanche/gyro2.h b/engines/avalanche/gyro2.h index 854b5dfcc8..390011c41e 100644 --- a/engines/avalanche/gyro2.h +++ b/engines/avalanche/gyro2.h @@ -200,8 +200,6 @@ public: byte col; }; -typedef byte raw[256][16]; /* raw_font_type */ - enum controllers {cjoy, ckey}; typedef Common::String previoustype[20]; @@ -541,7 +539,7 @@ public: Common::String atkey; /* For XTs, set to "alt-". For ATs, set to "f1". */ byte cp, ledstatus, defaultled; - raw characters; + fontType characters; bool alive; byte buffer[2000]; uint16 bufsize; diff --git a/engines/avalanche/parser.cpp b/engines/avalanche/parser.cpp index 86f46c1f08..4ce8249eb0 100644 --- a/engines/avalanche/parser.cpp +++ b/engines/avalanche/parser.cpp @@ -93,16 +93,7 @@ void Parser::plotText() { _vm->_graphics->drawBar(24, 161, 640, 169, black); // Black out the line of the text. - // Draw the text. Similar to chalk(), but here we don't have to bother with the color of the characters. - for (byte i = 0; i < _vm->_parser->_inputText.size(); i++) - for (byte j = 0; j < 8; j++) { - byte pixel = _vm->_gyro->characters[_vm->_parser->_inputText[i]][j]; - for (byte bit = 0; bit < 8; bit++) { - byte pixelBit = (pixel >> bit) & 1; - if (pixelBit != 0) - *_vm->_graphics->getPixel(24 + i * 8 + 7 - bit, 161 + j) = white; - } - } + _vm->_graphics->drawText(_vm->_graphics->_surface, _vm->_parser->_inputText, _vm->_gyro->characters, 8, 24, 161, white); cursorOn(); _vm->_gyro->super_on(); @@ -134,19 +125,9 @@ int16 Parser::pos(const Common::String &crit, const Common::String &src) { } void Parser::drawCursor() { - // Draw the '_' character. Similar to plotText(). - char cursor = '_'; - - for (byte j = 0; j < 8; j++) { - byte pixel = _vm->_gyro->characters[cursor][j]; - for (byte bit = 0; bit < 8; bit++) { - byte pixelBit = (pixel >> bit) & 1; - if (pixelBit != 0) - *_vm->_graphics->getPixel(24 + _inputTextPos * 8 + 7 - bit, 161 + j) = white; - } - } - - + // Draw the '_' character. + for (byte bit = 0; bit < 8; bit++) + *_vm->_graphics->getPixel(24 + _inputTextPos * 8 + 7 - bit, 168) = white; bytefield bf; bf.x1 = _inputTextPos + 1; diff --git a/engines/avalanche/scrolls2.cpp b/engines/avalanche/scrolls2.cpp index 8a95d44887..5aa1cd50fe 100644 --- a/engines/avalanche/scrolls2.cpp +++ b/engines/avalanche/scrolls2.cpp @@ -103,9 +103,10 @@ void Scrolls::easteregg() { } void Scrolls::say(int16 x, int16 y, Common::String z) { /* Fancy FAST screenwriting */ - byte itw[12][80]; + //byte itw[12][80]; + Common::String text; + fontType itw; byte lz = z.size(); - byte ox = 0; _vm->_logger->log_scrollline(); @@ -123,28 +124,20 @@ void Scrolls::say(int16 x, int16 y, Common::String z) { /* Fancy FAST screenwrit break; default: { for (byte yy = 0; yy < 12; yy++) - itw[yy][ox] = ~ch[cfont][z[xx]][yy + 2]; - ox++; + itw[z[xx]][yy] = ch[cfont][z[xx]][yy + 2]; + + text += z[xx]; + _vm->_logger->log_scrollchar(Common::String(z[xx])); } } } bool offset = x % 8 == 4; - lz = ox; x = x / 8; y++; - // Similar to Dropdown::chalk(). - for (byte fv = 0; fv < lz; fv++) - for (byte ff = 0; ff < 12; ff++) { - byte pixel = itw[ff][fv]; - for (byte bit = 0; bit < 8; bit++) { - byte pixelBit = (pixel >> bit) & 1; - uint16 xa = x * 8 + fv * 8 + 7 - bit + offset * 4; - uint16 ya = y + ff; - *(byte *)_vm->_graphics->_scrolls.getBasePtr(xa, ya) = pixelBit + (pixelBit << 1) + (pixelBit << 2); - } - } + + _vm->_graphics->drawText(_vm->_graphics->_scrolls, text, itw, 12, x * 8 + offset *4, y, black); } /* Here are the procedures that Scroll calls */ /* So they must be... */ /*$F+*/ diff --git a/engines/avalanche/scrolls2.h b/engines/avalanche/scrolls2.h index b267ff68f6..8af3402d96 100644 --- a/engines/avalanche/scrolls2.h +++ b/engines/avalanche/scrolls2.h @@ -103,7 +103,7 @@ private: int16 dix, diy; - raw ch[2]; + fontType ch[2]; byte cfont; // Current font int16 dodgex, dodgey; diff --git a/engines/avalanche/timeout2.cpp b/engines/avalanche/timeout2.cpp index 4debd16653..459f12415d 100644 --- a/engines/avalanche/timeout2.cpp +++ b/engines/avalanche/timeout2.cpp @@ -212,9 +212,7 @@ void Timeout::one_tick() { } void Timeout::lose_timer(byte which) { - byte fv; - - for (fv = 0; fv < 7; fv++) { + for (byte fv = 0; fv < 7; fv++) { if (times[fv].what_for == which) times[fv].time_left = 0; // Cancel this one! } |