aboutsummaryrefslogtreecommitdiff
path: root/engines/queen/display.cpp
diff options
context:
space:
mode:
authorMax Horn2006-02-11 22:45:04 +0000
committerMax Horn2006-02-11 22:45:04 +0000
commit26ee630756ebdd7c96bccede0881a8c8b98e8f2b (patch)
tree26e378d5cf990a2b81c2c96e9e683a7f333b62e8 /engines/queen/display.cpp
parent2a9a0d4211b1ea5723f1409d91cb95de8984429e (diff)
downloadscummvm-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.cpp1307
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