diff options
author | Max Horn | 2006-02-11 22:45:04 +0000 |
---|---|---|
committer | Max Horn | 2006-02-11 22:45:04 +0000 |
commit | 26ee630756ebdd7c96bccede0881a8c8b98e8f2b (patch) | |
tree | 26e378d5cf990a2b81c2c96e9e683a7f333b62e8 /engines/queen/display.cpp | |
parent | 2a9a0d4211b1ea5723f1409d91cb95de8984429e (diff) | |
download | scummvm-rg350-26ee630756ebdd7c96bccede0881a8c8b98e8f2b.tar.gz scummvm-rg350-26ee630756ebdd7c96bccede0881a8c8b98e8f2b.tar.bz2 scummvm-rg350-26ee630756ebdd7c96bccede0881a8c8b98e8f2b.zip |
Moved engines to the new engines/ directory
svn-id: r20582
Diffstat (limited to 'engines/queen/display.cpp')
-rw-r--r-- | engines/queen/display.cpp | 1307 |
1 files changed, 1307 insertions, 0 deletions
diff --git a/engines/queen/display.cpp b/engines/queen/display.cpp new file mode 100644 index 0000000000..d56e472e30 --- /dev/null +++ b/engines/queen/display.cpp @@ -0,0 +1,1307 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003-2006 The ScummVM project + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "common/system.h" +#include "queen/display.h" + +#include "queen/input.h" +#include "queen/logic.h" +#include "queen/queen.h" +#include "queen/resource.h" + +namespace Queen { + +#ifdef PALMOS_68K +static const uint8 *_fontRegular; +static const uint8 *_fontHebrew; +static const uint8 *_palJoeClothes; +static const uint8 *_palJoeDress; +#endif + +Display::Display(QueenEngine *vm, OSystem *system) + : _fullscreen(true), _horizontalScroll(0), _bdWidth(0), _bdHeight(0), + _system(system), _vm(vm) { + + if (vm->resource()->getLanguage() == HEBREW) + _font = _fontHebrew; + else + _font = _fontRegular; + + initFont(); + + _screenBuf = new uint8[SCREEN_W * SCREEN_H]; + _panelBuf = new uint8[PANEL_W * PANEL_H]; + _backdropBuf = new uint8[BACKDROP_W * BACKDROP_H]; + memset(_screenBuf, 0, SCREEN_W * SCREEN_H); + memset(_panelBuf, 0, PANEL_W * PANEL_H); + memset(_backdropBuf, 0, BACKDROP_W * BACKDROP_H); + + _fullRefresh = 1; + _dirtyBlocksWidth = SCREEN_W / D_BLOCK_W; + _dirtyBlocksHeight = SCREEN_H / D_BLOCK_H; + _dirtyBlocks = new uint8[_dirtyBlocksWidth * _dirtyBlocksHeight]; + memset(_dirtyBlocks, 0, _dirtyBlocksWidth * _dirtyBlocksHeight); + + _pal.room = new uint8[ 256 * 3 ]; + _pal.screen = new uint8[ 256 * 3 ]; + _pal.panel = new uint8[ 112 * 3 ]; + memset(_pal.room, 0, 256 * 3); + memset(_pal.screen, 0, 256 * 3); + memset(_pal.panel, 0, 112 * 3); + _pal.dirtyMin = 0; + _pal.dirtyMax = 255; + _pal.scrollable = true; + + memset(&_dynalum, 0, sizeof(_dynalum)); +} + +Display::~Display() { + delete[] _backdropBuf; + delete[] _panelBuf; + delete[] _screenBuf; + + delete[] _dirtyBlocks; + + delete[] _pal.room; + delete[] _pal.screen; + delete[] _pal.panel; + + delete[] _dynalum.mskBuf; + delete[] _dynalum.lumBuf; +} + +void Display::dynalumInit(const char *roomName, uint16 roomNum) { + debug(9, "Display::dynalumInit(%s, %d)", roomName, roomNum); + + _dynalum.valid = false; + delete[] _dynalum.mskBuf; + _dynalum.mskBuf = NULL; + delete[] _dynalum.lumBuf; + _dynalum.lumBuf = NULL; + + if (!isPalFadingDisabled(roomNum)) { + char filename[20]; + sprintf(filename, "%s.msk", roomName); + if (_vm->resource()->fileExists(filename)) { + _dynalum.mskBuf = (uint8 *)_vm->resource()->loadFile(filename, 0, &_dynalum.mskSize); + sprintf(filename, "%s.lum", roomName); + if (_vm->resource()->fileExists(filename)) { + _dynalum.lumBuf = (int8 *)_vm->resource()->loadFile(filename, 0, &_dynalum.lumSize); + _dynalum.valid = true; + _dynalum.prevColMask = 0xFF; + } + } + } +} + +void Display::dynalumUpdate(int16 x, int16 y) { + if (!_dynalum.valid) + return; + + if (x < 0) { + x = 0; + } else if (x > _bdWidth) { + x = _bdWidth; + } + if (y < 0) { + y = 0; + } else if (y > ROOM_ZONE_HEIGHT - 1) { + y = ROOM_ZONE_HEIGHT - 1; + } + + uint32 offset = (y / 4) * 160 + (x / 4); + assert(offset < _dynalum.mskSize); + + uint8 colMask = _dynalum.mskBuf[offset]; + debug(9, "Display::dynalumUpdate(%d, %d) - colMask = %d", x, y, colMask); + if (colMask != _dynalum.prevColMask) { + for (int i = 144; i < 160; ++i) { + for (int j = 0; j < 3; ++j) { + int16 c = (int16)(_pal.room[i * 3 + j] + _dynalum.lumBuf[colMask * 3 + j] * 4); + if (c < 0) { + c = 0; + } else if (c > 255) { + c = 255; + } + _pal.screen[i * 3 + j] = (uint8)c; + } + } + _pal.dirtyMin = MIN(_pal.dirtyMin, 144); + _pal.dirtyMax = MAX(_pal.dirtyMax, 159); + _dynalum.prevColMask = colMask; + } +} + +void Display::palSet(const uint8 *pal, int start, int end, bool updateScreen) { + debug(9, "Display::palSet(%d, %d)", start, end); + const int numColors = end - start + 1; + uint8 tempPal[256 * 4]; + for (int i = 0; i < numColors; i++) { + tempPal[4 * i + 0] = *pal++; + tempPal[4 * i + 1] = *pal++; + tempPal[4 * i + 2] = *pal++; + tempPal[4 * i + 3] = 0; + } + _system->setPalette(tempPal, start, numColors); + if (updateScreen) { + _system->updateScreen(); + _vm->input()->delay(20); + } +} + +void Display::palSetJoeDress() { + memcpy(_pal.room + 144 * 3, _palJoeDress, 16 * 3); + memcpy(_pal.screen + 144 * 3, _palJoeDress, 16 * 3); + palSet(_pal.screen, 144, 159, true); +} + +void Display::palSetJoeNormal() { + memcpy(_pal.room + 144 * 3, _palJoeClothes, 16 * 3); + memcpy(_pal.screen + 144 * 3, _palJoeClothes, 16 * 3); + palSet(_pal.screen, 144, 159, true); +} + +void Display::palSetPanel() { + memcpy(_pal.room + 144 * 3, _pal.panel, (256 - 144) * 3); + memcpy(_pal.screen + 144 * 3, _pal.panel, (256 - 144) * 3); +} + +void Display::palFadeIn(uint16 roomNum, bool dynalum, int16 dynaX, int16 dynaY) { + debug(9, "Display::palFadeIn(%d)", roomNum); + int n = getNumColorsForRoom(roomNum); + memcpy(_pal.screen, _pal.room, n * 3); + if (!isPalFadingDisabled(roomNum)) { + if (dynalum) { + dynalumUpdate(dynaX, dynaY); + } + uint8 tempPal[256 * 3]; + for (int i = 0; i <= FADE_SPEED; ++i) { + for (int j = 0; j < n * 3; ++j) { + tempPal[j] = _pal.screen[j] * i / FADE_SPEED; + } + palSet(tempPal, 0, n - 1, true); + } + } + _pal.dirtyMin = 0; + _pal.dirtyMax = n - 1; + _pal.scrollable = true; +} + +void Display::palFadeOut(uint16 roomNum) { + debug(9, "Display::palFadeOut(%d)", roomNum); + _pal.scrollable = false; + int n = getNumColorsForRoom(roomNum); + if (isPalFadingDisabled(roomNum)) { + memset(_pal.screen, 0, n * 3); + palSet(_pal.screen, 0, n - 1, true); + } else { + uint8 tempPal[256 * 3]; + memcpy(tempPal, _pal.screen, n * 3); + for (int i = FADE_SPEED; i >= 0; --i) { + for (int j = 0; j < n * 3; ++j) { + _pal.screen[j] = tempPal[j] * i / FADE_SPEED; + } + palSet(_pal.screen, 0, n - 1, true); + } + } +} + +void Display::palGreyPanel() { + debug(9, "Display::palGreyPanel()"); + uint8 tempPal[256 * 3]; + for (int i = 224 * 3; i < 256 * 3; i += 3) { + tempPal[i] = tempPal[i + 1] = tempPal[i + 2] = _pal.screen[i + 1] * 2 / 3; + } + palSet(tempPal, 224, 255, true); +} + +void Display::palScroll(int start, int end) { + debug(9, "Display::palScroll(%d, %d)", start, end); + + uint8 *palEnd = _pal.screen + end * 3; + uint8 *palStart = _pal.screen + start * 3; + + uint8 r = *palEnd++; + uint8 g = *palEnd++; + uint8 b = *palEnd; + + int n = (end - start) * 3; + while (n--) { + *palEnd = *(palEnd - 3); + --palEnd; + } + + *palStart++ = r; + *palStart++ = g; + *palStart = b; +} + +void Display::palCustomColors(uint16 roomNum) { + debug(9, "Display::palCustomColors(%d)", roomNum); + int i; + switch (roomNum) { + case 31: + for (i = 72; i < 84; i++) { + _pal.room[i * 3 + 1] = _pal.room[i * 3 + 1] * 90 / 100; + _pal.room[i * 3 + 2] = _pal.room[i * 3 + 2] * 70 / 100; + } + break; + case 29: + for (i = 72; i < 84; i++) { + _pal.room[i * 3 + 1] = _pal.room[i * 3 + 1] * 60 / 100; + _pal.room[i * 3 + 2] = _pal.room[i * 3 + 2] * 60 / 100; + } + break; + case 30: + for (i = 72; i < 84; i++) { + _pal.room[i * 3 + 0] = _pal.room[i * 3 + 0] * 60 / 100; + _pal.room[i * 3 + 1] = _pal.room[i * 3 + 1] * 80 / 100; + } + break; + case 28: + for (i = 72; i < 84; i++) { + _pal.room[i * 3 + 0] = _pal.room[i * 3 + 0] * 80 / 100; + _pal.room[i * 3 + 2] = _pal.room[i * 3 + 1] * 60 / 100; + } + break; + } +} + +void Display::palCustomScroll(uint16 roomNum) { + debug(9, "Display::palCustomScroll(%d)", roomNum); + static int16 scrollx = 0; + + if (!_pal.scrollable) { + return; + } + + int hiPal = 0; + int loPal = 255; + int i; + + ++scrollx; + switch (roomNum) { + case 123: { + static int16 j = 0, jdir = 2; + for (i = 96; i < 111; ++i) { + _pal.screen[i * 3 + 0] = MIN(255, _pal.room[i * 3 + 0] + j * 8); + _pal.screen[i * 3 + 1] = MIN(255, _pal.room[i * 3 + 1] + j * 4); + } + j += jdir; + if (j <= 0 || j >= 18) { + jdir = -jdir; + } + loPal = 96; + hiPal = 111; + } + break; + case 124: { + static int16 j = 0,jdir = 2; + for (i = 80; i < 144; ++i) { + _pal.screen[i * 3 + 0] = MIN(255, _pal.room[i * 3 + 0] + j * 8); + _pal.screen[i * 3 + 1] = MIN(255, _pal.room[i * 3 + 1] + j * 4); + } + j += jdir; + if (j <= 0 || j >= 14) { + jdir = -jdir; + if (_rnd.getRandomNumber(1)) { + if (ABS(jdir) == 1) { + jdir *= 2; + } else { + jdir /= 2; + } + } + } + loPal = 80; + hiPal = 143; + } + break; + case 125: + palScroll(32, 63); + palScroll(64, 95); + loPal = 32; + hiPal = 95; + break; + case 100: + if (scrollx & 1) { + palScroll(128, 132); + palScroll(133, 137); + palScroll(138, 143); + loPal = 128; + hiPal = 143; + } + break; + case 102: + if (scrollx & 1) { + palScroll(112, 127); + loPal = 112; + hiPal = 127; + } + break; + case 62: + if (scrollx & 1) { + palScroll(108, 119); + loPal = 108; + hiPal = 119; + } + break; + case 25: + palScroll(116, 123); + loPal = 116; + hiPal = 123; + break; + case 59: + if (scrollx & 1) { + palScroll(56, 63); + loPal = 56; + hiPal = 63; + } + break; + case 39: + palScroll(112, 143); + loPal = 112; + hiPal = 143; + break; + case 74: + palScroll(28, 31); + palScroll(88, 91); + palScroll(92, 95); + palScroll(128, 135); + if (scrollx & 1) { + palScroll(136, 143); + } + loPal = 28; + hiPal = 143; + break; + case 40: + if (scrollx & 1) { + palScroll(96, 103); + } + if (scrollx & 3) { + palScroll(104, 107); + } + loPal = 96; + hiPal = 107; + break; + case 97: + if (scrollx & 1) { + palScroll(96, 107); + palScroll(108, 122); + loPal = 96; + hiPal = 122; + } + break; + case 55: + palScroll(128, 143); + loPal = 128; + hiPal = 143; + break; + case 57: + palScroll(128, 143); + if (scrollx & 1) { + palScroll(96, 103); + } + loPal = 96; + hiPal = 143; + break; + case 76: + palScroll(88, 95); + loPal = 88; + hiPal = 95; + break; + case 2: + if (scrollx & 1) { + palScroll(120, 127); + loPal = 120; + hiPal = 127; + } + break; + case 3: + case 5: + if (scrollx & 1) { + palScroll(128, 135); + palScroll(136, 143); + loPal = 128; + hiPal = 143; + } + break; + case 7: + if (scrollx & 1) { + palScroll(119, 127); + loPal = 119; + hiPal = 127; + } + break; + case 42: + if (scrollx & 1) { + palScroll(118, 127); + palScroll(136, 143); + loPal = 118; + hiPal = 143; + } + break; + case 4: + if (scrollx & 1) { + palScroll(32,47); + } + palScroll(64, 70); + palScroll(71, 79); + loPal = 32; + hiPal = 79; + break; + case 8: + if (scrollx & 1) { + palScroll(120, 127); + } + loPal = 120; + hiPal = 127; + break; + case 12: + case 64: + if (scrollx & 1) { + palScroll(112, 119); + palScroll(120, 127); + loPal = 112; + hiPal = 127; + } + break; + case 49: + palScroll(101, 127); + loPal = 101; + hiPal = 127; + break; + } + _pal.dirtyMin = MIN(_pal.dirtyMin, loPal); + _pal.dirtyMax = MAX(_pal.dirtyMax, hiPal); +} + +void Display::palCustomFlash() { + uint8 tempPal[256 * 3]; + memset(tempPal, 255, 17 * 3); + memset(tempPal + 17 * 3, 0, 67 * 3); + memset(tempPal + 67 * 3, 255, 172 * 3); + // set flash palette + palSet(tempPal, 0, 255, true); + // restore original palette + palSet(_pal.screen, 0, 255, true); +} + +void Display::palCustomLightsOff(uint16 roomNum) { + int end = 223; + int start = (roomNum == ROOM_FLODA_FRONTDESK) ? 32 : 16; + int n = end - start + 1; + + memset(_pal.screen + start * 3, 0, n * 3); + palSet(_pal.screen, start, end, true); + + _pal.scrollable = false; +} + +void Display::palCustomLightsOn(uint16 roomNum) { + int end = 223; + int start = (roomNum == ROOM_FLODA_FRONTDESK) ? 32 : 0; + int n = end - start + 1; + + memcpy(_pal.screen + start * 3, _pal.room + start * 3, n * 3); + palSet(_pal.screen, start, end, true); + + _pal.dirtyMin = 0; + _pal.dirtyMax = 223; + _pal.scrollable = true; +} + +int Display::getNumColorsForRoom(uint16 room) const { + int n = 224; + if (room >= 114 && room <= 125) { + n = 256; + } + return n; +} + +bool Display::isPalFadingDisabled(uint16 room) const { + // introduction rooms don't fade palette + return (room >= 90 && room <= 94) || (room >= 115 && room <= 125); +} + +void Display::screenMode(int comPanel, bool inCutaway) { + debug(6, "Display::screenMode(%d, %d)", comPanel, inCutaway); + + if (comPanel == 2 && inCutaway) { + fullscreen((_bdHeight == GAME_SCREEN_HEIGHT)); + } else if (comPanel == 1) { + fullscreen(false); + } +} + +void Display::prepareUpdate() { + int h = GAME_SCREEN_HEIGHT; + if (!_fullscreen) { + h = ROOM_ZONE_HEIGHT; + memcpy(_screenBuf + SCREEN_W * ROOM_ZONE_HEIGHT, _panelBuf, PANEL_W * PANEL_H); + } + uint8 *dst = _screenBuf; + const uint8 *src = _backdropBuf + _horizontalScroll; + + while (h--) { + memcpy(dst, src, SCREEN_W); + dst += SCREEN_W; + src += BACKDROP_W; + } +} + +void Display::update(bool dynalum, int16 dynaX, int16 dynaY) { + drawTexts(); + if (_pal.scrollable && dynalum) { + dynalumUpdate(dynaX, dynaY); + } + if (_pal.dirtyMin != 144 || _pal.dirtyMax != 144) { + palSet(_pal.screen, _pal.dirtyMin, _pal.dirtyMax); + _pal.dirtyMin = 144; + _pal.dirtyMax = 144; + } + // uncomment this line to disable the dirty blocks rendering +// _fullRefresh = 1; + if (_fullRefresh) { + _system->copyRectToScreen(_screenBuf, SCREEN_W, 0, 0, SCREEN_W, SCREEN_H); + _system->updateScreen(); + --_fullRefresh; + if (_fullRefresh) { + memset(_dirtyBlocks, 0, _dirtyBlocksWidth * _dirtyBlocksHeight); + } + debug(7, "Display::update() - Full blit (%d)", _fullRefresh); + } else { + uint16 count = 0; + uint8 *scrBuf = _screenBuf; + uint8 *dbBuf = _dirtyBlocks; + for (int j = 0; j < _dirtyBlocksHeight; ++j) { + uint16 accW = 0; + for (int i = 0; i < _dirtyBlocksWidth; ++i) { + if (dbBuf[i] != 0) { + --dbBuf[i]; + ++accW; + } else if (accW != 0) { + int x = (i - accW) * D_BLOCK_W; + _system->copyRectToScreen(scrBuf + x, SCREEN_W, x, j * D_BLOCK_H, accW * D_BLOCK_W, D_BLOCK_H); + accW = 0; + ++count; + } + } + if (accW != 0) { + int x = (_dirtyBlocksWidth - accW) * D_BLOCK_W; + _system->copyRectToScreen(scrBuf + x, SCREEN_W, x, j * D_BLOCK_H, accW * D_BLOCK_W, D_BLOCK_H); + ++count; + } + dbBuf += _dirtyBlocksWidth; + scrBuf += SCREEN_W * D_BLOCK_H; + } + if (count != 0) { + _system->updateScreen(); + } + debug(7, "Display::update() - Dirtyblocks blit (%d)", count); + } +} + +void Display::setupPanel() { + uint32 size; + uint8 *pcxBuf = _vm->resource()->loadFile("panel.pcx", 0, &size); + uint8 *dst = _panelBuf + PANEL_W * 10; + readPCX(dst, PANEL_W, pcxBuf + 128, PANEL_W, PANEL_H - 10); + const uint8 *pal = pcxBuf + size - 768 + 144 * 3; + memcpy(_pal.panel, pal, (256 - 144) * 3); + delete[] pcxBuf; + + palSetPanel(); +} + +void Display::setupNewRoom(const char *name, uint16 room) { + dynalumInit(name, room); + uint32 size; + char filename[20]; + sprintf(filename, "%s.PCX", name); + uint8 *pcxBuf = _vm->resource()->loadFile(filename, 0, &size); + _bdWidth = READ_LE_UINT16(pcxBuf + 12); + _bdHeight = READ_LE_UINT16(pcxBuf + 14); + readPCX(_backdropBuf, BACKDROP_W, pcxBuf + 128, _bdWidth, _bdHeight); + int n = getNumColorsForRoom(room); + if (n != 256) { + n = 144; + } + memcpy(_pal.room, pcxBuf + size - 768, n * 3); + delete[] pcxBuf; + + palCustomColors(room); + + forceFullRefresh(); +} + +void Display::drawBobSprite(const uint8 *data, uint16 x, uint16 y, uint16 w, uint16 h, uint16 pitch, bool xflip) { + blit(_screenBuf, SCREEN_W, x, y, data, pitch, w, h, xflip, true); + setDirtyBlock(xflip ? (x - w + 1) : x, y, w, h); +} + +void Display::drawBobPasteDown(const uint8 *data, uint16 x, uint16 y, uint16 w, uint16 h) { + blit(_backdropBuf, BACKDROP_W, x, y, data, w, w, h, false, true); +} + +void Display::drawInventoryItem(const uint8 *data, uint16 x, uint16 y, uint16 w, uint16 h) { + if (data != NULL) { + blit(_panelBuf, PANEL_W, x, y, data, w, w, h, false, false); + } else { + fill(_panelBuf, PANEL_W, x, y, w, h, INK_BG_PANEL); + } + setDirtyBlock(x, 150 + y, w, h); +} + +void Display::blit(uint8 *dstBuf, uint16 dstPitch, uint16 x, uint16 y, const uint8 *srcBuf, uint16 srcPitch, uint16 w, uint16 h, bool xflip, bool masked) { + assert(w <= dstPitch); + dstBuf += dstPitch * y + x; + + if (!masked) { // Unmasked always unflipped + while (h--) { + memcpy(dstBuf, srcBuf, w); + srcBuf += srcPitch; + dstBuf += dstPitch; + } + } else if (!xflip) { // Masked bitmap unflipped + while (h--) { + for (int i = 0; i < w; ++i) { + uint8 b = *(srcBuf + i); + if (b != 0) { + *(dstBuf + i) = b; + } + } + srcBuf += srcPitch; + dstBuf += dstPitch; + } + } else { // Masked bitmap flipped + while (h--) { + for (int i = 0; i < w; ++i) { + uint8 b = *(srcBuf + i); + if (b != 0) { + *(dstBuf - i) = b; + } + } + srcBuf += srcPitch; + dstBuf += dstPitch; + } + } +} + +void Display::fill(uint8 *dstBuf, uint16 dstPitch, uint16 x, uint16 y, uint16 w, uint16 h, uint8 color) { + assert(w <= dstPitch); + dstBuf += dstPitch * y + x; + while (h--) { + memset(dstBuf, color, w); + dstBuf += dstPitch; + } +} + +void Display::readPCX(uint8 *dst, uint16 dstPitch, const uint8 *src, uint16 w, uint16 h) { + while (h--) { + uint8 *p = dst; + while (p < dst + w) { + uint8 col = *src++; + if ((col & 0xC0) == 0xC0) { + uint8 len = col & 0x3F; + memset(p, *src++, len); + p += len; + } else { + *p++ = col; + } + } + dst += dstPitch; + } +} + +void Display::horizontalScrollUpdate(int16 xCamera) { + debug(9, "Display::horizontalScrollUpdate(%d)", xCamera); + if (_bdWidth <= 320) { + horizontalScroll(0); + } else { + if (xCamera > 160 && xCamera < 480) { + horizontalScroll(xCamera - 160); + } else if (xCamera >= 480) { + horizontalScroll(320); + } else { + horizontalScroll(0); + } + } +} + +void Display::horizontalScroll(int16 scroll) { + if (_horizontalScroll != scroll) { + _fullRefresh = 2; + _horizontalScroll = scroll; + } +} + +void Display::setDirtyBlock(uint16 x, uint16 y, uint16 w, uint16 h) { + if (_fullRefresh < 2) { + uint16 ex = (x + w - 1) / D_BLOCK_W; + uint16 ey = (y + h - 1) / D_BLOCK_H; + x /= D_BLOCK_W; + y /= D_BLOCK_H; + uint16 cy = ey - y + 1; + uint16 cx = ex - x + 1; + if (cy >= _dirtyBlocksHeight) cy = _dirtyBlocksHeight - 1; + if (cx >= _dirtyBlocksWidth) cx = _dirtyBlocksWidth - 1; + uint8 *p = _dirtyBlocks + _dirtyBlocksWidth * y + x; + while (cy--) { + for (uint16 i = 0; i < cx; ++i) { + p[i] = 2; + } + p += _dirtyBlocksWidth; + } + } +} + +void Display::setMouseCursor(uint8 *buf, uint16 w, uint16 h) { + _system->setMouseCursor(buf, w, h, 1, 1, 0); +} + +void Display::showMouseCursor(bool show) { + _system->showMouse(show); +} + +void Display::initFont() { + // calculate font justification sizes + for (int i = 0; i < 256; ++i) { + _charWidth[i] = 0; + for (int y = 0; y < 8; ++y) { + uint8 c = _font[i * 8 + y]; + for (int x = 0; x < 8; ++x) { + if ((c & (0x80 >> x)) && (x > _charWidth[i])) { + _charWidth[i] = x; + } + } + } + _charWidth[i] += 2; + } + _charWidth[0x20] = 4; + --_charWidth[0x5E]; +} + +void Display::setText(uint16 x, uint16 y, const char *text, bool outlined) { + if (y < GAME_SCREEN_HEIGHT) { + if (x == 0) x = 1; + if (y == 0) y = 1; + TextSlot *pts = &_texts[y]; + pts->x = x; + pts->color = _curTextColor; + pts->outlined = outlined; + pts->text = text; + } +} + +void Display::setTextCentered(uint16 y, const char *text, bool outlined) { + int len = strlen(text); + int16 x; + while ((x = (GAME_SCREEN_WIDTH - textWidth(text, len)) / 2) <= 0) { + ++text; + len -= 2; + } + assert(y < GAME_SCREEN_HEIGHT); + TextSlot *pts = &_texts[y]; + pts->x = x; + pts->color = _curTextColor; + pts->outlined = outlined; + pts->text = Common::String(text, len); +} + +void Display::drawTexts() { + for (int y = GAME_SCREEN_HEIGHT - 1; y > 0; --y) { + const TextSlot *pts = &_texts[y]; + if (!pts->text.isEmpty()) { + drawText(pts->x, y, pts->color, pts->text.c_str(), pts->outlined); + } + } +} + +void Display::clearTexts(uint16 y1, uint16 y2) { + assert(y1 <= y2 && y2 < GAME_SCREEN_HEIGHT); + while (y1 <= y2) { + _texts[y1].text.clear(); + ++y1; + } +} + +int Display::textCenterX(const char *text) const { + return (GAME_SCREEN_WIDTH - textWidth(text)) / 2; +} + +uint16 Display::textWidth(const char *text) const { + return textWidth(text, strlen(text)); +} + +uint16 Display::textWidth(const char *text, uint16 len) const { + assert(len <= strlen(text)); + uint16 width = 0; + for (uint16 i = 0; i < len; ++i) { + width += _charWidth[ (uint8)text[i] ]; + } + return width; +} + +void Display::drawChar(uint16 x, uint16 y, uint8 color, const uint8 *chr) { + uint8 *dstBuf = _screenBuf + SCREEN_W * y + x; + for (int j = 0; j < 8; ++j) { + uint8 *p = dstBuf; + uint8 c = *chr++; + if (c != 0) { + for (int i = 0; i < 8; ++i) { + if (c & 0x80) { + *p = color; + } + ++p; + c <<= 1; + } + } + dstBuf += SCREEN_W; + } +} + +void Display::drawText(uint16 x, uint16 y, uint8 color, const char *text, bool outlined) { + static const int dx[] = { -1, 0, 1, 1, 1, 0, -1, -1 }; + static const int dy[] = { -1, -1, -1, 0, 1, 1, 1, 0 }; + const uint8 *str = (const uint8 *)text; + uint16 xs = x; + while (*str && x < SCREEN_W) { + const uint8 ch = *str++; + const uint8 *ftch = _font + ch * 8; + if (outlined) { + for (int i = 0; i < 8; ++i) { + drawChar(x + dx[i], y + dy[i], INK_OUTLINED_TEXT, ftch); + } + } + drawChar(x, y, color, ftch); + x += _charWidth[ch]; + } + setDirtyBlock(xs - 1, y - 1, x - xs + 2, 8 + 2); +} + +void Display::drawBox(int16 x1, int16 y1, int16 x2, int16 y2, uint8 col) { + int i; + for (i = y1; i <= y2; ++i) { + _screenBuf[i * SCREEN_W + x1] = _screenBuf[i * SCREEN_W + x2] = col; + } + setDirtyBlock(x1, y1, 1, y2 - y1); + setDirtyBlock(x2, y1, 1, y2 - y1); + for (i = x1; i <= x2; ++i) { + _screenBuf[y1 * SCREEN_W + i] = _screenBuf[y2 * SCREEN_W + i] = col; + } + setDirtyBlock(x1, y1, x2 - x1, 1); + setDirtyBlock(x1, y2, x2 - x1, 1); +} + +void Display::shake(bool reset) { + _system->setShakePos(reset ? 0 : 3); +} + +void Display::blankScreen() { + static int current = 0; + typedef void (Display::*BlankerEffect)(); + static const BlankerEffect effects[] = { + &Display::blankScreenEffect1, + &Display::blankScreenEffect2, + &Display::blankScreenEffect3 + }; + (this->*effects[current])(); + current = (current + 1) % ARRAYSIZE(effects); + forceFullRefresh(); +} + +void Display::blankScreenEffect1() { + uint8 buf[32 * 32]; + while (_vm->input()->idleTime() >= Input::DELAY_SCREEN_BLANKER) { + for (int i = 0; i < 2; ++i) { + int x = _rnd.getRandomNumber(SCREEN_W - 32 - 2) + 1; + int y = _rnd.getRandomNumber(SCREEN_H - 32 - 2) + 1; + const uint8 *p = _screenBuf + SCREEN_W * y + x; + for (int j = 0; j < 32; ++j) { + memcpy(buf + j * 32, p, 32); + p += SCREEN_W; + } + if (_rnd.getRandomNumber(1)) { + ++x; + } else { + --x; + } + if (_rnd.getRandomNumber(1)) { + ++y; + } else { + --y; + } + _system->copyRectToScreen(buf, 32, x, y, 32, 32); + _system->updateScreen(); + _vm->input()->delay(10); + } + } +} + +void Display::blankScreenEffect2() { + while (_vm->input()->idleTime() >= Input::DELAY_SCREEN_BLANKER) { + int x = _rnd.getRandomNumber(SCREEN_W - 2); + int y = _rnd.getRandomNumber(SCREEN_H - 2); + uint8 *p = _screenBuf + y * SCREEN_W + x; + uint8 c = 0; + switch (_rnd.getRandomNumber(3)) { + case 0: + c = *p; + break; + case 1: + c = *(p + 1); + break; + case 2: + c = *(p + SCREEN_W); + break; + case 3: + c = *(p + SCREEN_W + 1); + break; + } + memset(p, c, 2); + memset(p + SCREEN_W, c, 2); + _system->copyRectToScreen(p, SCREEN_W, x, y, 2, 2); + _system->updateScreen(); + _vm->input()->delay(10); + } +} + +void Display::blankScreenEffect3() { + uint32 i = 0; + while (_vm->input()->idleTime() >= Input::DELAY_SCREEN_BLANKER) { + if (i > 4000000) { + memset(_screenBuf, 0, SCREEN_W * SCREEN_H); + _system->copyRectToScreen(_screenBuf, SCREEN_W, 0, 0, SCREEN_W, SCREEN_H); + } else { + int x = _rnd.getRandomNumber(SCREEN_W - 2); + int y = _rnd.getRandomNumber(SCREEN_H - 2); + uint8 *p = _screenBuf + SCREEN_W * y + x; + int sum = *p + *(p + 1) + *(p + SCREEN_W) + *(p + SCREEN_W + 1); + uint8 c = (uint8)(sum / 4); + memset(p, c, 2); + memset(p + SCREEN_W, c, 2); + ++i; + _system->copyRectToScreen(p, SCREEN_W, x, y, 2, 2); + } + _system->updateScreen(); + _vm->input()->delay(10); + } +} + +#ifndef PALMOS_68K +const uint8 Display::_fontRegular[] = { + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, + 0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, + 0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00, + 0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00, + 0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00, + 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00, + 0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00, + 0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00, + 0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00, + 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00, + 0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0, + 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, + 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00, + 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00, + 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00, + 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00, + 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, + 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00, + 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, + 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C, + 0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00, + 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, + 0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00, + 0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00, + 0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, + 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00, + 0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, + 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00, + 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, + 0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, + 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, + 0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00, + 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, + 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, + 0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00, + 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, + 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00, + 0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0, + 0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00, + 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00, + 0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00, + 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, + 0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, + 0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x18, 0x30, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x18, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, + 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00, + 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00, + 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00, + 0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00, + 0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, + 0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00, + 0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00, + 0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0, + 0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, + 0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00, + 0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E, + 0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, + 0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, + 0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, + 0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, + 0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, + 0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, + 0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00, + 0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00, + 0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00, + 0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60, + 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18, + 0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, + 0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, + 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, + 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30, + 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x66, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30 +}; + +const uint8 Display::_fontHebrew[] = { + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, + 0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, + 0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00, + 0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00, + 0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00, + 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00, + 0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00, + 0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00, + 0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00, + 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00, + 0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0, + 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, + 0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00, + 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00, + 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00, + 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00, + 0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, + 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00, + 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, + 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C, + 0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00, + 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, + 0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00, + 0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00, + 0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, + 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00, + 0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, + 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00, + 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, + 0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, + 0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, + 0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00, + 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00, + 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, + 0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, + 0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00, + 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, + 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00, + 0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0, + 0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00, + 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00, + 0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00, + 0xCC, 0x66, 0x76, 0xBC, 0x98, 0x8C, 0xE6, 0x00, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFE, 0x00, + 0x78, 0x18, 0x18, 0x18, 0x38, 0x78, 0xD8, 0x00, 0xFE, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0xFE, 0x06, 0x06, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x7C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, + 0xDC, 0x66, 0xE6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0xF0, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xF8, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF8, 0x00, + 0xC0, 0xFE, 0x06, 0x06, 0x0C, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x00, + 0xFC, 0x76, 0x66, 0x66, 0x66, 0x66, 0x6E, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0xEE, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0xFE, 0xC6, 0xC6, 0xF6, 0x06, 0x06, 0x06, 0x06, + 0xFE, 0xC6, 0xC6, 0xFE, 0x06, 0x06, 0xFE, 0x00, 0xFE, 0x66, 0x6C, 0x78, 0x60, 0x60, 0x60, 0x60, + 0xEE, 0x66, 0x3C, 0x18, 0x0C, 0x06, 0xFE, 0x00, 0xFE, 0x06, 0x0E, 0xD8, 0xF0, 0xF0, 0xC0, 0xC0, + 0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0xEE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x7C, 0x00, + 0xFF, 0x67, 0x67, 0x67, 0x67, 0x67, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x00, 0x0C, 0x3E, 0x6C, 0x3E, 0x0C, 0x00, 0x00, 0x38, 0x6C, 0x60, 0xF0, 0x60, 0x60, 0xFC, 0x00, + 0x42, 0x3C, 0x66, 0x3C, 0x42, 0x00, 0x00, 0x00, 0xC3, 0x66, 0x3C, 0x18, 0x3C, 0x18, 0x18, 0x00, + 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00, + 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00, + 0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00, + 0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, + 0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00, + 0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00, + 0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0, + 0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, + 0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00, + 0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E, + 0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, + 0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, + 0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, + 0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, + 0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, + 0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, + 0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, + 0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00, + 0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, + 0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00, + 0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00, + 0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60, + 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, + 0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18, + 0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, + 0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, + 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, + 0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, + 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, + 0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, + 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30, + 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x66, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30 +}; + +const uint8 Display::_palJoeClothes[] = { + 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x87, 0x87, 0x87, 0xB0, 0xB0, 0xB0, 0xDA, 0xDA, 0xDA, 0x43, + 0x34, 0x20, 0x77, 0x33, 0x1F, 0xA3, 0x43, 0x27, 0x80, 0x45, 0x45, 0x9E, 0x5D, 0x5B, 0xB9, 0x78, + 0x75, 0xDF, 0x97, 0x91, 0x17, 0x27, 0x63, 0x1F, 0x3F, 0x83, 0x27, 0x5B, 0xA7, 0x98, 0xD4, 0xFF +}; + +const uint8 Display::_palJoeDress[] = { + 0x00, 0x00, 0x00, 0x50, 0x50, 0x50, 0x70, 0x70, 0x70, 0x90, 0x90, 0x90, 0xC6, 0xC6, 0xC6, 0xFF, + 0xFF, 0xFF, 0x30, 0x30, 0x90, 0x47, 0x49, 0xD0, 0x40, 0x24, 0x00, 0x79, 0x34, 0x0B, 0xB2, 0x3D, + 0x22, 0xED, 0x42, 0x42, 0x80, 0x45, 0x45, 0xA3, 0x5F, 0x5F, 0xC8, 0x7C, 0x7C, 0xEC, 0x9C, 0x9C +}; + +#endif + +} // End of namespace Queen + +#ifdef PALMOS_68K +#include "scumm_globals.h" + +_GINIT(Queen_Display) +_GSETPTR(Queen::_fontRegular, GBVARS_DISPLAYFONTREGULAR_INDEX, uint8, GBVARS_QUEEN) +_GSETPTR(Queen::_fontHebrew, GBVARS_DISPLAYFONTHEBREW_INDEX, uint8, GBVARS_QUEEN) +_GSETPTR(Queen::_palJoeClothes, GBVARS_DISPLAYPALJOECLOTHES_INDEX, uint8, GBVARS_QUEEN) +_GSETPTR(Queen::_palJoeDress, GBVARS_DISPLAYPALJOEDRESS_INDEX, uint8, GBVARS_QUEEN) +_GEND + +_GRELEASE(Queen_Display) +_GRELEASEPTR(GBVARS_DISPLAYFONTREGULAR_INDEX, GBVARS_QUEEN) +_GRELEASEPTR(GBVARS_DISPLAYFONTHEBREW_INDEX, GBVARS_QUEEN) +_GRELEASEPTR(GBVARS_DISPLAYPALJOECLOTHES_INDEX, GBVARS_QUEEN) +_GRELEASEPTR(GBVARS_DISPLAYPALJOEDRESS_INDEX, GBVARS_QUEEN) +_GEND + +#endif |