aboutsummaryrefslogtreecommitdiff
path: root/engines/queen
diff options
context:
space:
mode:
authorGregory Montoir2007-02-21 20:27:48 +0000
committerGregory Montoir2007-02-21 20:27:48 +0000
commit948630c3b452cdfd480c7f6fe9398bcda57501d7 (patch)
tree2c8de196552036b81861c91bbcec4fe86ca2cbac /engines/queen
parent098bcc2fe88220f6ff656d6f42beabc55b2bf8d9 (diff)
downloadscummvm-rg350-948630c3b452cdfd480c7f6fe9398bcda57501d7.tar.gz
scummvm-rg350-948630c3b452cdfd480c7f6fe9398bcda57501d7.tar.bz2
scummvm-rg350-948630c3b452cdfd480c7f6fe9398bcda57501d7.zip
added initial support for FOTAQ amiga versions
svn-id: r25769
Diffstat (limited to 'engines/queen')
-rw-r--r--engines/queen/bankman.cpp198
-rw-r--r--engines/queen/bankman.h4
-rw-r--r--engines/queen/display.cpp695
-rw-r--r--engines/queen/display.h9
-rw-r--r--engines/queen/graphics.cpp83
-rw-r--r--engines/queen/journal.cpp14
-rw-r--r--engines/queen/logic.cpp3
-rw-r--r--engines/queen/music.cpp2
-rw-r--r--engines/queen/queen.cpp20
-rw-r--r--engines/queen/queen.h3
-rw-r--r--engines/queen/resource.cpp86
-rw-r--r--engines/queen/resource.h38
-rw-r--r--engines/queen/sound.cpp643
-rw-r--r--engines/queen/sound.h97
-rw-r--r--engines/queen/talk.cpp6
15 files changed, 1293 insertions, 608 deletions
diff --git a/engines/queen/bankman.cpp b/engines/queen/bankman.cpp
index 18ad276d0f..d9eb020dfe 100644
--- a/engines/queen/bankman.cpp
+++ b/engines/queen/bankman.cpp
@@ -31,7 +31,6 @@ BankManager::BankManager(Resource *res)
: _res(res) {
memset(_frames, 0, sizeof(_frames));
memset(_banks, 0, sizeof(_banks));
- memset(_loadedBanks, 0, sizeof(_loadedBanks));
}
BankManager::~BankManager() {
@@ -43,102 +42,189 @@ BankManager::~BankManager() {
void BankManager::load(const char *bankname, uint32 bankslot) {
debug(9, "BankManager::load(%s, %d)", bankname, bankslot);
+
assert(bankslot < MAX_BANKS_NUMBER);
+ PackedBank *bank = &_banks[bankslot];
- if (!scumm_stricmp(bankname, _loadedBanks[bankslot])) {
+ if (!scumm_stricmp(bankname, bank->name)) {
debug(9, "BankManager::load() bank '%s' already loaded", bankname);
return;
}
close(bankslot);
- _banks[bankslot].data = _res->loadFile(bankname);
-
- uint16 entries = READ_LE_UINT16(_banks[bankslot].data);
- assert(entries < MAX_BANK_SIZE);
- debug(9, "BankManager::load() entries = %d", entries);
-
- uint32 offset = 2;
- const uint8 *p = _banks[bankslot].data;
- for (uint16 i = 1; i <= entries; ++i) {
- _banks[bankslot].indexes[i] = offset;
- uint16 w = READ_LE_UINT16(p + offset + 0);
- uint16 h = READ_LE_UINT16(p + offset + 2);
- // jump to next entry, skipping data & header
- offset += w * h + 8;
+ bank->data = _res->loadFile(bankname);
+
+ if (_res->getPlatform() == Common::kPlatformAmiga) {
+ uint16 entries = READ_BE_UINT16(bank->data + 4);
+ assert(entries < MAX_BANK_SIZE);
+ debug(9, "BankManager::load() entries = %d", entries);
+ uint32 offset = 6;
+ for (uint16 i = 1; i <= entries; ++i) {
+ _banks[bankslot].indexes[i] = offset;
+ uint16 dataSize = READ_BE_UINT16(bank->data + offset + 10);
+ offset += dataSize + 12;
+ }
+ } else {
+ uint16 entries = READ_LE_UINT16(bank->data);
+ assert(entries < MAX_BANK_SIZE);
+ debug(9, "BankManager::load() entries = %d", entries);
+ uint32 offset = 2;
+ for (uint16 i = 1; i <= entries; ++i) {
+ _banks[bankslot].indexes[i] = offset;
+ uint16 w = READ_LE_UINT16(bank->data + offset + 0);
+ uint16 h = READ_LE_UINT16(bank->data + offset + 2);
+ offset += w * h + 8;
+ }
}
// mark this bank as loaded
- strcpy(_loadedBanks[bankslot], bankname);
+ strcpy(bank->name, bankname);
+}
+
+static void convertPlanarBitmap(uint8 *dst, int dstPitch, const uint8 *src, int w, int h, int plane) {
+ assert(w != 0 && h != 0);
+ int planarSize = plane * h * w * 2;
+ uint8 *planarBuf = new uint8[ planarSize ];
+ uint8 *dstPlanar = planarBuf;
+ while (planarSize > 0) {
+ if (src[0] == 0) {
+ int count = src[1];
+ memset(dstPlanar, 0, count);
+ dstPlanar += count;
+ src += 2;
+ planarSize -= count;
+ } else {
+ *dstPlanar++ = *src++;
+ --planarSize;
+ }
+ }
+
+ src = planarBuf;
+ int i = 0;
+ int planeSize = h * w * 2;
+ while (h--) {
+ for (int x = 0; x < w * 2; ++x) {
+ for (int b = 0; b < 8; ++b) {
+ const uint8 mask = (1 << (7 - b));
+ uint8 color = 0;
+ for (int p = 0; p < plane; ++p) {
+ if (src[planeSize * p + i] & mask) {
+ color |= (1 << p);
+ }
+ }
+ dst[8 * x + b] = color;
+ }
+ ++i;
+ }
+ dst += dstPitch;
+ }
+
+ delete[] planarBuf;
}
void BankManager::unpack(uint32 srcframe, uint32 dstframe, uint32 bankslot) {
debug(9, "BankManager::unpack(%d, %d, %d)", srcframe, dstframe, bankslot);
+
assert(bankslot < MAX_BANKS_NUMBER);
- assert(_banks[bankslot].data != NULL);
-
- BobFrame *pbf = &_frames[dstframe];
- const uint8 *p = _banks[bankslot].data + _banks[bankslot].indexes[srcframe];
- pbf->width = READ_LE_UINT16(p + 0);
- pbf->height = READ_LE_UINT16(p + 2);
- pbf->xhotspot = READ_LE_UINT16(p + 4);
- pbf->yhotspot = READ_LE_UINT16(p + 6);
-
- uint32 size = pbf->width * pbf->height;
- delete[] pbf->data;
- pbf->data = new uint8[ size ];
- memcpy(pbf->data, p + 8, size);
+ PackedBank *bank = &_banks[bankslot];
+ assert(bank->data != NULL);
+
+ assert(dstframe < MAX_FRAMES_NUMBER);
+ BobFrame *bf = &_frames[dstframe];
+ delete[] bf->data;
+ bf->data = NULL;
+
+ const uint8 *p = bank->data + bank->indexes[srcframe];
+
+ if (_res->getPlatform() == Common::kPlatformAmiga) {
+ uint16 w = READ_BE_UINT16(p + 0);
+ uint16 h = READ_BE_UINT16(p + 2);
+ uint16 plane = READ_BE_UINT16(p + 4);
+ bf->xhotspot = READ_BE_UINT16(p + 6);
+ bf->yhotspot = READ_BE_UINT16(p + 8);
+ bf->width = w * 16;
+ bf->height = h;
+
+ uint32 size = bf->width * bf->height;
+ bf->data = new uint8[ size ];
+ convertPlanarBitmap(bf->data, bf->width, p + 12, w, h, plane);
+ } else {
+ bf->width = READ_LE_UINT16(p + 0);
+ bf->height = READ_LE_UINT16(p + 2);
+ bf->xhotspot = READ_LE_UINT16(p + 4);
+ bf->yhotspot = READ_LE_UINT16(p + 6);
+
+ uint32 size = bf->width * bf->height;
+ bf->data = new uint8[ size ];
+ memcpy(bf->data, p + 8, size);
+ }
}
void BankManager::overpack(uint32 srcframe, uint32 dstframe, uint32 bankslot) {
debug(9, "BankManager::overpack(%d, %d, %d)", srcframe, dstframe, bankslot);
- assert(bankslot < MAX_BANKS_NUMBER);
- assert(_banks[bankslot].data != NULL);
- const uint8 *p = _banks[bankslot].data + _banks[bankslot].indexes[srcframe];
- uint16 src_w = READ_LE_UINT16(p + 0);
- uint16 src_h = READ_LE_UINT16(p + 2);
-
- // unpack if destination frame is smaller than source one
- if (_frames[dstframe].width < src_w || _frames[dstframe].height < src_h) {
- unpack(srcframe, dstframe, bankslot);
+ assert(bankslot < MAX_BANKS_NUMBER);
+ PackedBank *bank = &_banks[bankslot];
+ assert(bank->data != NULL);
+
+ assert(dstframe < MAX_FRAMES_NUMBER);
+ BobFrame *bf = &_frames[dstframe];
+
+ const uint8 *p = bank->data + bank->indexes[srcframe];
+
+ if (_res->getPlatform() == Common::kPlatformAmiga) {
+ uint16 w = READ_BE_UINT16(p + 0);
+ uint16 h = READ_BE_UINT16(p + 2);
+ uint16 plane = READ_BE_UINT16(p + 4);
+ uint16 src_w = w * 16;
+ uint16 src_h = h;
+
+ if (bf->width < src_w || bf->height < src_h) {
+ unpack(srcframe, dstframe, bankslot);
+ } else {
+ convertPlanarBitmap(bf->data, bf->width, p + 12, w, h, plane);
+ }
} else {
- // copy data 'over' destination frame (without changing frame header)
- memcpy(_frames[dstframe].data, p + 8, src_w * src_h);
+ uint16 src_w = READ_LE_UINT16(p + 0);
+ uint16 src_h = READ_LE_UINT16(p + 2);
+
+ // unpack if destination frame is smaller than source
+ if (bf->width < src_w || bf->height < src_h) {
+ unpack(srcframe, dstframe, bankslot);
+ } else {
+ // copy data 'over' destination frame (without updating frame header)
+ memcpy(bf->data, p + 8, src_w * src_h);
+ }
}
}
void BankManager::close(uint32 bankslot) {
debug(9, "BankManager::close(%d)", bankslot);
assert(bankslot < MAX_BANKS_NUMBER);
- delete[] _banks[bankslot].data;
- memset(&_banks[bankslot], 0, sizeof(PackedBank));
- _loadedBanks[bankslot][0] = '\0';
+ PackedBank *bank = &_banks[bankslot];
+ delete[] bank->data;
+ memset(bank, 0, sizeof(PackedBank));
}
BobFrame *BankManager::fetchFrame(uint32 index) {
debug(9, "BankManager::fetchFrame(%d)", index);
assert(index < MAX_FRAMES_NUMBER);
- BobFrame *pbf = &_frames[index];
- assert(pbf->data != 0);
- return pbf;
+ BobFrame *bf = &_frames[index];
+ assert(bf->data != 0);
+ return bf;
}
void BankManager::eraseFrame(uint32 index) {
debug(9, "BankManager::eraseFrame(%d)", index);
assert(index < MAX_FRAMES_NUMBER);
- BobFrame *pbf = &_frames[index];
- delete[] pbf->data;
- memset(pbf, 0, sizeof(BobFrame));
+ BobFrame *bf = &_frames[index];
+ delete[] bf->data;
+ memset(bf, 0, sizeof(BobFrame));
}
void BankManager::eraseFrames(bool joe) {
- uint32 i = 0;
- if (!joe) {
- i = FRAMES_JOE;
- }
- while (i < MAX_FRAMES_NUMBER) {
+ for (uint32 i = joe ? 0 : FRAMES_JOE; i < MAX_FRAMES_NUMBER; ++i) {
eraseFrame(i);
- ++i;
}
}
diff --git a/engines/queen/bankman.h b/engines/queen/bankman.h
index a386706950..bdc9847d31 100644
--- a/engines/queen/bankman.h
+++ b/engines/queen/bankman.h
@@ -68,6 +68,7 @@ private:
struct PackedBank {
uint32 indexes[MAX_BANK_SIZE];
uint8 *data;
+ char name[20];
};
//! unpacked bob frames
@@ -76,9 +77,6 @@ private:
//! banked bob frames
PackedBank _banks[MAX_BANKS_NUMBER];
- //! loaded banks names
- char _loadedBanks[MAX_BANKS_NUMBER][20];
-
Resource *_res;
};
diff --git a/engines/queen/display.cpp b/engines/queen/display.cpp
index 7f5e26102d..ef059bb8af 100644
--- a/engines/queen/display.cpp
+++ b/engines/queen/display.cpp
@@ -45,18 +45,11 @@ Display::Display(QueenEngine *vm, OSystem *system)
: _fullscreen(true), _horizontalScroll(0), _bdWidth(0), _bdHeight(0),
_system(system), _vm(vm) {
- if (vm->resource()->getLanguage() == Common::HB_ISR)
- _font = _fontHebrew;
- else if (vm->resource()->getLanguage() == Common::RU_RUS)
- _font = _fontRussian;
- 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];
+ _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);
@@ -77,6 +70,11 @@ Display::Display(QueenEngine *vm, OSystem *system)
_pal.dirtyMax = 255;
_pal.scrollable = true;
+ _imageExt = (_vm->resource()->getPlatform() == Common::kPlatformAmiga) ? "LBM" : "PCX";
+
+ _curTextColor = 0;
+ memset(_texts, 0, sizeof(_texts));
+
memset(&_dynalum, 0, sizeof(_dynalum));
}
@@ -106,10 +104,10 @@ void Display::dynalumInit(const char *roomName, uint16 roomNum) {
if (!isPalFadingDisabled(roomNum)) {
char filename[20];
- sprintf(filename, "%s.msk", roomName);
+ 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);
+ sprintf(filename, "%s.LUM", roomName);
if (_vm->resource()->fileExists(filename)) {
_dynalum.lumBuf = (int8 *)_vm->resource()->loadFile(filename, 0, &_dynalum.lumSize);
_dynalum.valid = true;
@@ -628,35 +626,44 @@ void Display::update(bool dynalum, int16 dynaX, int16 dynaY) {
}
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;
+ uint16 panelWidth, panelHeight;
+ uint32 dataSize;
+ char dataName[20];
+ sprintf(dataName, "PANEL.%s", _imageExt);
+ uint8 *data = _vm->resource()->loadFile(dataName, 0, &dataSize);
+
+ if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+ decodeLBM(data, dataSize, _panelBuf, PANEL_W, &panelWidth, &panelHeight, _pal.panel, 0, 32, 144);
+ } else {
+ WRITE_LE_UINT16(data + 14, PANEL_H - 10);
+ decodePCX(data, dataSize, _panelBuf + PANEL_W * 10, PANEL_W, &panelWidth, &panelHeight, _pal.panel, 144, 256);
+ }
palSetPanel();
+
+ delete[] data;
}
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);
+ uint32 dataSize;
+ char dataName[20];
+ sprintf(dataName, "%s.%s", name, _imageExt);
+ uint8 *data = _vm->resource()->loadFile(dataName, 0, &dataSize);
+ if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+ decodeLBM(data, dataSize, _backdropBuf, BACKDROP_W, &_bdWidth, &_bdHeight, _pal.room, 0, 32);
+ } else {
+ int n = getNumColorsForRoom(room);
+ if (n != 256) {
+ n = 144;
+ }
+ decodePCX(data, dataSize, _backdropBuf, BACKDROP_W, &_bdWidth, &_bdHeight, _pal.room, 0, n);
+ palCustomColors(room);
+ }
+
+ delete[] data;
forceFullRefresh();
}
@@ -670,10 +677,24 @@ void Display::drawBobPasteDown(const uint8 *data, uint16 x, uint16 y, uint16 w,
}
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);
+ if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+ if (data != NULL) {
+ uint8 *dst = _panelBuf + y * PANEL_W + x;
+ while (h--) {
+ for (int i = 0; i < w; ++i) {
+ dst[i] = 144 + *data++;
+ }
+ dst += PANEL_W;
+ }
+ } else {
+ fill(_panelBuf, PANEL_W, x, y, w, h, 144 + 2);
+ }
} else {
- fill(_panelBuf, PANEL_W, x, y, w, h, INK_BG_PANEL);
+ 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);
}
@@ -722,10 +743,18 @@ void Display::fill(uint8 *dstBuf, uint16 dstPitch, uint16 x, uint16 y, uint16 w,
}
}
-void Display::readPCX(uint8 *dst, uint16 dstPitch, const uint8 *src, uint16 w, uint16 h) {
- while (h--) {
+void Display::decodePCX(const uint8 *src, uint32 srcSize, uint8 *dst, uint16 dstPitch, uint16 *w, uint16 *h, uint8 *pal, uint16 palStart, uint16 palEnd) {
+ *w = READ_LE_UINT16(src + 12);
+ *h = READ_LE_UINT16(src + 14);
+
+ assert(palStart <= palEnd && palEnd <= 256);
+ const uint8 *palData = src + srcSize - 768;
+ memcpy(pal, palData + palStart * 3, (palEnd - palStart) * 3);
+
+ src += 128;
+ for (int y = 0; y < *h; ++y) {
uint8 *p = dst;
- while (p < dst + w) {
+ while (p < dst + *w) {
uint8 col = *src++;
if ((col & 0xC0) == 0xC0) {
uint8 len = col & 0x3F;
@@ -739,6 +768,75 @@ void Display::readPCX(uint8 *dst, uint16 dstPitch, const uint8 *src, uint16 w, u
}
}
+void Display::decodeLBM(const uint8 *src, uint32 srcSize, uint8 *dst, uint16 dstPitch, uint16 *w, uint16 *h, uint8 *pal, uint16 palStart, uint16 palEnd, uint8 colorBase) {
+ int planeCount, planePitch;
+ const uint8 *srcEnd = src + srcSize;
+ src += 12;
+ while (src < srcEnd) {
+ uint32 type = READ_BE_UINT32(src);
+ uint32 size = READ_BE_UINT32(src + 4);
+ src += 8;
+ switch (type) {
+ case MKID_BE('BMHD'): {
+ *w = READ_BE_UINT16(src + 0);
+ *h = READ_BE_UINT16(src + 2);
+ planeCount = src[8];
+ planePitch = ((*w + 15) >> 4) * 2;
+ }
+ break;
+ case MKID_BE('CMAP'): {
+ assert(palStart <= palEnd && palEnd <= size / 3);
+ memcpy(pal, src + palStart * 3, (palEnd - palStart) * 3);
+ }
+ break;
+ case MKID_BE('BODY'): {
+ uint32 planarSize = (*h) * planeCount * planePitch;
+ uint8 *planarBuf = new uint8[planarSize];
+ uint8 *dstPlanar = planarBuf;
+ for (int y = 0; y < *h; ++y) {
+ for (int p = 0; p < planeCount; ++p) {
+ const uint8 *end = dstPlanar + planePitch;
+ while (dstPlanar < end) {
+ int code = (int8)*src++;
+ if (code != -128) {
+ if (code < 0) {
+ code = -code + 1;
+ memset(dstPlanar, *src++, code);
+ } else {
+ ++code;
+ memcpy(dstPlanar, src, code);
+ src += code;
+ }
+ dstPlanar += code;
+ }
+ }
+ }
+ }
+ src = planarBuf;
+ for (int y = 0; y < *h; ++y) {
+ for (int x = 0; x < *w / 8; ++x) {
+ for (int b = 0; b < 8; ++b) {
+ const uint8 mask = (1 << (7 - b));
+ uint8 color = 0;
+ for (int p = 0; p < planeCount; ++p) {
+ if (src[planePitch * p + x] & mask) {
+ color |= 1 << p;
+ }
+ }
+ dst[x * 8 + b] = colorBase + color;
+ }
+ }
+ src += planeCount * planePitch;
+ dst += dstPitch;
+ }
+ delete[] planarBuf;
+ }
+ return;
+ }
+ src += size;
+ }
+}
+
void Display::horizontalScrollUpdate(int16 xCamera) {
debug(9, "Display::horizontalScrollUpdate(%d)", xCamera);
if (_bdWidth <= 320) {
@@ -790,6 +888,17 @@ void Display::showMouseCursor(bool show) {
}
void Display::initFont() {
+ switch (_vm->resource()->getLanguage()) {
+ case Common::HB_ISR:
+ _font = _fontHebrew;
+ break;
+ case Common::RU_RUS:
+ _font = _fontRussian;
+ break;
+ default:
+ _font = _fontRegular;
+ break;
+ }
// calculate font justification sizes
for (int i = 0; i < 256; ++i) {
_charWidth[i] = 0;
@@ -1017,264 +1126,264 @@ void Display::blankScreenEffect3() {
#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,
+ 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,
+ 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
};
diff --git a/engines/queen/display.h b/engines/queen/display.h
index 953d8f95e8..62a17fc993 100644
--- a/engines/queen/display.h
+++ b/engines/queen/display.h
@@ -109,8 +109,11 @@ public:
void blit(uint8 *dstBuf, uint16 dstPitch, uint16 x, uint16 y, const uint8 *srcBuf, uint16 srcPitch, uint16 w, uint16 h, bool xflip, bool masked);
void fill(uint8 *dstBuf, uint16 dstPitch, uint16 x, uint16 y, uint16 w, uint16 h, uint8 color);
- //! decode a PCX stream
- void readPCX(uint8 *dst, uint16 dstPitch, const uint8 *src, uint16 w, uint16 h);
+ //! decode PCX picture data
+ void decodePCX(const uint8 *src, uint32 srcSize, uint8 *dst, uint16 dstPitch, uint16 *w, uint16 *h, uint8 *pal, uint16 palStart, uint16 palEnd);
+
+ //! decode ILBM picture data
+ void decodeLBM(const uint8 *src, uint32 srcSize, uint8 *dst, uint16 dstPitch, uint16 *w, uint16 *h, uint8 *pal, uint16 palStart, uint16 palEnd, uint8 colorBase = 0);
void horizontalScrollUpdate(int16 xCamera);
void horizontalScroll(int16 scroll);
@@ -223,6 +226,8 @@ private:
uint16 _horizontalScroll;
uint16 _bdWidth, _bdHeight;
+ const char *_imageExt;
+
//! texts list
TextSlot _texts[GAME_SCREEN_HEIGHT];
diff --git a/engines/queen/graphics.cpp b/engines/queen/graphics.cpp
index 60be8f86cc..6d79a71197 100644
--- a/engines/queen/graphics.cpp
+++ b/engines/queen/graphics.cpp
@@ -246,31 +246,76 @@ Graphics::~Graphics() {
}
void Graphics::unpackControlBank() {
- _vm->bankMan()->load("control.BBK",17);
- _vm->bankMan()->unpack(1, 1, 17); // Mouse pointer
- // unpack arrows frames and change hotspot to be always on top
- for (int i = 3; i <= 4; ++i) {
- _vm->bankMan()->unpack(i, i, 17);
- BobFrame *bf = _vm->bankMan()->fetchFrame(i);
- bf->yhotspot += 200;
+ if (_vm->resource()->getPlatform() == Common::kPlatformPC) {
+ _vm->bankMan()->load("CONTROL.BBK",17);
+
+ // unpack mouse pointer frame
+ _vm->bankMan()->unpack(1, 1, 17);
+
+ // unpack arrows frames and change hotspot to be always on top
+ _vm->bankMan()->unpack(3, 3, 17);
+ _vm->bankMan()->fetchFrame(3)->yhotspot += 200;
+ _vm->bankMan()->unpack(4, 4, 17);
+ _vm->bankMan()->fetchFrame(4)->yhotspot += 200;
+
+ _vm->bankMan()->close(17);
}
- _vm->bankMan()->close(17);
}
void Graphics::setupArrows() {
- int scrollX = _vm->display()->horizontalScroll();
- BobSlot *arrow;
- arrow = bob(ARROW_BOB_UP);
- arrow->curPos(303 + 8 + scrollX, 150 + 1 + 200);
- arrow->frameNum = 3;
- arrow = bob(ARROW_BOB_DOWN);
- arrow->curPos(303 + scrollX, 175 + 200);
- arrow->frameNum = 4;
+ if (_vm->resource()->getPlatform() == Common::kPlatformPC) {
+ int scrollX = _vm->display()->horizontalScroll();
+ BobSlot *arrow;
+ arrow = bob(ARROW_BOB_UP);
+ arrow->curPos(303 + 8 + scrollX, 150 + 1 + 200);
+ arrow->frameNum = 3;
+ arrow = bob(ARROW_BOB_DOWN);
+ arrow->curPos(303 + scrollX, 175 + 200);
+ arrow->frameNum = 4;
+ }
}
void Graphics::setupMouseCursor() {
- BobFrame *bf = _vm->bankMan()->fetchFrame(1);
- _vm->display()->setMouseCursor(bf->data, bf->width, bf->height);
+ if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+ static const uint8 defaultAmigaCursor[4 * 15] = {
+ 0x00, 0x00, 0xFF, 0xC0,
+ 0x7F, 0x80, 0x80, 0x40,
+ 0x7F, 0x00, 0x80, 0x80,
+ 0x7E, 0x00, 0x81, 0x00,
+ 0x7F, 0x00, 0x80, 0x80,
+ 0x7F, 0x80, 0x80, 0x40,
+ 0x7F, 0xC0, 0x80, 0x20,
+ 0x6F, 0xE0, 0x90, 0x10,
+ 0x47, 0xF0, 0xA8, 0x08,
+ 0x03, 0xF8, 0xC4, 0x04,
+ 0x01, 0xFC, 0x02, 0x02,
+ 0x00, 0xF8, 0x01, 0x04,
+ 0x00, 0x70, 0x00, 0x88,
+ 0x00, 0x20, 0x00, 0x50,
+ 0x00, 0x00, 0x00, 0x20
+ };
+ uint8 cursorData[16 * 15];
+ const uint8 *src = defaultAmigaCursor;
+ int i = 0;
+ for (int h = 0; h < 15; ++h) {
+ for (int b = 0; b < 16; ++b) {
+ const uint16 mask = (1 << (15 - b));
+ cursorData[i] = 0;
+ if (READ_BE_UINT16(src + 0) & mask) {
+ cursorData[i] |= 4;
+ }
+ if (READ_BE_UINT16(src + 2) & mask) {
+ cursorData[i] |= 8;
+ }
+ ++i;
+ }
+ src += 4;
+ }
+ _vm->display()->setMouseCursor(cursorData, 16, 15);
+ } else {
+ BobFrame *bf = _vm->bankMan()->fetchFrame(1);
+ _vm->display()->setMouseCursor(bf->data, bf->width, bf->height);
+ }
}
void Graphics::drawBob(const BobSlot *bs, const BobFrame *bf, const Box *bbox, int16 x, int16 y) {
@@ -1119,7 +1164,7 @@ BamScene::BamScene(QueenEngine *vm)
}
void BamScene::playSfx() {
- // Don't try to play all the sounds. This is only necessary for the
+ // Don't try to play all the sounds. This is only necessary for the
// fight bam, in which the number of 'sfx bam frames' is too much
// important / too much closer. The original game does not have
// this problem since its playSfx() function returns immediately
diff --git a/engines/queen/journal.cpp b/engines/queen/journal.cpp
index b36b4bad31..5e722ef111 100644
--- a/engines/queen/journal.cpp
+++ b/engines/queen/journal.cpp
@@ -268,7 +268,7 @@ void Journal::handleMouseDown(int x, int y) {
if (_saveDescriptions[currentSlot][0]) {
_vm->graphics()->clearBobs();
_vm->display()->palFadeOut(ROOM_JOURNAL);
- _vm->music()->stopSong();
+ _vm->sound()->stopSong();
_vm->loadGameState(currentSlot);
_vm->display()->clearTexts(0, GAME_SCREEN_HEIGHT - 1);
_quitMode = QM_RESTORE;
@@ -320,7 +320,7 @@ void Journal::handleMouseDown(int x, int y) {
break;
case ZN_MUSIC_VOLUME:
val = (x - 136) * QueenEngine::MAX_MUSIC_VOLUME / (266 - 136);
- _vm->music()->setVolume(val);
+ _vm->sound()->setVolume(val);
drawConfigPanel();
break;
case ZN_DESC_1:
@@ -357,7 +357,7 @@ void Journal::handleMouseDown(int x, int y) {
if (_vm->sound()->musicOn()) {
_vm->sound()->playLastSong();
} else {
- _vm->music()->stopSong();
+ _vm->sound()->stopSong();
}
drawConfigPanel();
break;
@@ -447,7 +447,7 @@ void Journal::drawConfigPanel() {
_vm->checkOptionSettings();
drawSlideBar(_vm->talkSpeed(), QueenEngine::MAX_TEXT_SPEED, BOB_TALK_SPEED, 164, FRAME_BLUE_PIN);
- drawSlideBar(_vm->music()->volume(), QueenEngine::MAX_MUSIC_VOLUME, BOB_MUSIC_VOLUME, 177, FRAME_GREEN_PIN);
+ drawSlideBar(_vm->sound()->volume(), QueenEngine::MAX_MUSIC_VOLUME, BOB_MUSIC_VOLUME, 177, FRAME_GREEN_PIN);
drawCheckBox(_vm->sound()->sfxOn(), BOB_SFX_TOGGLE, 221, 155, FRAME_CHECK_BOX);
drawCheckBox(_vm->sound()->speechOn(), BOB_SPEECH_TOGGLE, 158, 155, FRAME_CHECK_BOX);
@@ -468,12 +468,6 @@ void Journal::drawInfoPanel() {
case 'a':
_vm->display()->setTextCentered(132, "Amiga A500/600", false);
break;
- case 'A':
- _vm->display()->setTextCentered(132, "Amiga A1200", false);
- break;
- case 'c':
- _vm->display()->setTextCentered(132, "Amiga CD-32", false);
- break;
}
switch (ver[1]) {
case 'E':
diff --git a/engines/queen/logic.cpp b/engines/queen/logic.cpp
index f7a23eeb3d..848efb68b4 100644
--- a/engines/queen/logic.cpp
+++ b/engines/queen/logic.cpp
@@ -98,7 +98,8 @@ void Logic::readQueenJas() {
}
_roomData[_numRooms + 1] = _numObjects;
- if (_vm->resource()->isDemo()) {
+ if ((_vm->resource()->isDemo() && _vm->resource()->getPlatform() == Common::kPlatformPC) ||
+ (_vm->resource()->isInterview() && _vm->resource()->getPlatform() == Common::kPlatformAmiga)) {
_sfxName = NULL;
} else {
_sfxName = new uint16[_numRooms + 1];
diff --git a/engines/queen/music.cpp b/engines/queen/music.cpp
index bf7402e824..ccd7f9c86f 100644
--- a/engines/queen/music.cpp
+++ b/engines/queen/music.cpp
@@ -56,7 +56,7 @@ void MusicPlayer::setVolume(int volume) {
volume = 255;
if (_masterVolume == volume)
- return;
+ return;
_masterVolume = volume;
diff --git a/engines/queen/queen.cpp b/engines/queen/queen.cpp
index 168f80f364..2363d29429 100644
--- a/engines/queen/queen.cpp
+++ b/engines/queen/queen.cpp
@@ -40,14 +40,11 @@
#include "queen/grid.h"
#include "queen/input.h"
#include "queen/logic.h"
-#include "queen/music.h"
#include "queen/resource.h"
#include "queen/sound.h"
#include "queen/talk.h"
#include "queen/walk.h"
-#include "sound/mididrv.h"
-
static const PlainGameDescriptor queenGameDescriptor = {
"queen", "Flight of the Amazon Queen"
};
@@ -80,7 +77,7 @@ GameList Engine_QUEEN_detectGames(const FSList &fslist) {
}
Queen::DetectedGameVersion version;
if (Queen::Resource::detectVersion(&version, &dataFile)) {
- GameDescriptor dg(queenGameDescriptor.gameid, queenGameDescriptor.description, version.language, Common::kPlatformPC);
+ GameDescriptor dg(queenGameDescriptor.gameid, queenGameDescriptor.description, version.language, version.platform);
if (version.features & Queen::GF_DEMO) {
dg.updateDesc("Demo");
} else if (version.features & Queen::GF_INTERVIEW) {
@@ -123,7 +120,6 @@ QueenEngine::~QueenEngine() {
delete _grid;
delete _input;
delete _logic;
- delete _music;
delete _sound;
delete _walk;
}
@@ -153,7 +149,7 @@ void QueenEngine::checkOptionSettings() {
}
void QueenEngine::readOptionSettings() {
- _music->setVolume(ConfMan.getInt("music_volume"));
+ _sound->setVolume(ConfMan.getInt("music_volume"));
_sound->musicToggle(!ConfMan.getBool("music_mute"));
_sound->sfxToggle(!ConfMan.getBool("sfx_mute"));
_talkSpeed = (ConfMan.getInt("talkspeed") * (MAX_TEXT_SPEED - MIN_TEXT_SPEED) + 255 / 2) / 255 + MIN_TEXT_SPEED;
@@ -163,7 +159,7 @@ void QueenEngine::readOptionSettings() {
}
void QueenEngine::writeOptionSettings() {
- ConfMan.setInt("music_volume", _music->volume());
+ ConfMan.setInt("music_volume", _sound->volume());
ConfMan.setBool("music_mute", !_sound->musicOn());
ConfMan.setBool("sfx_mute", !_sound->sfxOn());
ConfMan.setInt("talkspeed", ((_talkSpeed - MIN_TEXT_SPEED) * 255 + (MAX_TEXT_SPEED - MIN_TEXT_SPEED) / 2) / (MAX_TEXT_SPEED - MIN_TEXT_SPEED));
@@ -388,16 +384,6 @@ int QueenEngine::init() {
// Set mixer music volume to maximum, since music volume is regulated by MusicPlayer's MIDI messages
_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, Audio::Mixer::kMaxMixerVolume);
- int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);
- bool native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
-
- MidiDriver *driver = MidiDriver::createMidi(midiDriver);
- if (native_mt32)
- driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
-
- _music = new Music(driver, this);
- _music->hasNativeMT32(native_mt32);
-
_sound = Sound::makeSoundInstance(_mixer, this, _resource->getCompression());
_walk = new Walk(this);
//_talkspeedScale = (MAX_TEXT_SPEED - MIN_TEXT_SPEED) / 255.0;
diff --git a/engines/queen/queen.h b/engines/queen/queen.h
index d51ad97abc..c1a9b0f455 100644
--- a/engines/queen/queen.h
+++ b/engines/queen/queen.h
@@ -65,7 +65,6 @@ class Graphics;
class Grid;
class Input;
class Logic;
-class Music;
class Resource;
class Sound;
class Walk;
@@ -85,7 +84,6 @@ public:
Grid *grid() const { return _grid; }
Input *input() const { return _input; }
Logic *logic() const { return _logic; }
- Music *music() const { return _music; }
Resource *resource() const { return _resource; }
Sound *sound() const { return _sound; }
Walk *walk() const { return _walk; }
@@ -146,7 +144,6 @@ protected:
Grid *_grid;
Input *_input;
Logic *_logic;
- Music *_music;
Resource *_resource;
Sound *_sound;
Walk *_walk;
diff --git a/engines/queen/resource.cpp b/engines/queen/resource.cpp
index 6945635818..cece71ae8b 100644
--- a/engines/queen/resource.cpp
+++ b/engines/queen/resource.cpp
@@ -46,7 +46,10 @@ const RetailGameVersion Resource::_gameVersions[] = {
{ "CHM10", 0x000DA981, 190705558 },
{ "PE100", 0x00101EC6, 3724538 },
{ "PE100", 0x00102B7F, 3732177 },
- { "PEint", 0x00103838, 1915913 }
+ { "PEint", 0x00103838, 1915913 },
+ { "aEM10", 0x00103F1E, 351775 },
+ { "CE101", 0x00107D8D, 563335 },
+ { "PE100", 0x001086D4, 597032 }
};
static int compareResourceEntry(const void *a, const void *b) {
@@ -107,26 +110,41 @@ ResourceEntry *Resource::resourceEntry(const char *filename) const {
return re;
}
+static uint8 emptyBank[] = { 0, 0 };
+
uint8 *Resource::loadFile(const char *filename, uint32 skipBytes, uint32 *size) {
+ debug(7, "Resource::loadFile('%s')", filename);
ResourceEntry *re = resourceEntry(filename);
+ if (_version.platform == Common::kPlatformAmiga && re == NULL) {
+ return emptyBank;
+ }
assert(re != NULL);
uint32 sz = re->size - skipBytes;
if (size != NULL) {
*size = sz;
}
-
byte *dstBuf = new byte[sz];
- _resourceFile.seek(re->offset + skipBytes);
- _resourceFile.read(dstBuf, sz);
+ if (re->bundle == 1) {
+ _resourceFile.seek(re->offset + skipBytes);
+ _resourceFile.read(dstBuf, sz);
+ } else {
+ Common::File resourceFile;
+ char name[20];
+ sprintf(name, "queen.%d", re->bundle);
+ if (!resourceFile.open(name)) {
+ error("Could not open resource file '%s'", name);
+ }
+ resourceFile.seek(re->offset + skipBytes);
+ resourceFile.read(dstBuf, sz);
+ }
return dstBuf;
}
bool Resource::detectVersion(DetectedGameVersion *ver, Common::File *f) {
memset(ver, 0, sizeof(DetectedGameVersion));
- char versionStr[6];
if (f->readUint32BE() == MKID_BE('QTBL')) {
- f->read(versionStr, 6);
+ f->read(ver->str, 6);
f->skip(2);
ver->compression = f->readByte();
ver->features = GF_REBUILT;
@@ -137,13 +155,26 @@ bool Resource::detectVersion(DetectedGameVersion *ver, Common::File *f) {
warning("Unknown/unsupported FOTAQ version");
return false;
}
- strcpy(versionStr, gameVersion->str);
+ strcpy(ver->str, gameVersion->str);
ver->compression = COMPRESSION_NONE;
ver->features = 0;
ver->tableOffset = gameVersion->tableOffset;
+ strcpy(ver->str, gameVersion->str);
+
+ // Handle game versions for which versionStr information is irrevelant
+ if (gameVersion == &_gameVersions[VER_AMI_DEMO]) { // CE101
+ ver->features |= GF_FLOPPY | GF_DEMO;
+ ver->platform = Common::kPlatformAmiga;
+ return true;
+ }
+ if (gameVersion == &_gameVersions[VER_AMI_INTERVIEW]) { // PE100
+ ver->features |= GF_FLOPPY | GF_INTERVIEW;
+ ver->platform = Common::kPlatformAmiga;
+ return true;
+ }
}
- switch (versionStr[1]) {
+ switch (ver->str[1]) {
case 'E':
if (Common::parseLanguage(ConfMan.get("language")) == Common::RU_RUS) {
ver->language = Common::RU_RUS;
@@ -167,33 +198,43 @@ bool Resource::detectVersion(DetectedGameVersion *ver, Common::File *f) {
ver->language = Common::HB_ISR;
break;
default:
- warning("Unknown language id '%c', defaulting to English", versionStr[1]);
- ver->language = Common::EN_ANY;
+ error("Invalid language id '%c'", ver->str[1]);
break;
}
- switch (versionStr[0]) {
+ switch (ver->str[0]) {
case 'P':
ver->features |= GF_FLOPPY;
+ ver->platform = Common::kPlatformPC;
break;
case 'C':
ver->features |= GF_TALKIE;
+ ver->platform = Common::kPlatformPC;
+ break;
+ case 'a':
+ ver->features |= GF_FLOPPY;
+ ver->platform = Common::kPlatformAmiga;
+ break;
+ default:
+ error("Invalid platform id '%c'", ver->str[0]);
break;
}
- if (strcmp(versionStr, "PE100") == 0) {
+ if (strcmp(ver->str + 2, "100") == 0 || strcmp(ver->str + 2, "101") == 0) {
ver->features |= GF_DEMO;
- } else if (strcmp(versionStr, "PEint") == 0) {
+ } else if (strcmp(ver->str + 2, "int") == 0) {
ver->features |= GF_INTERVIEW;
}
-
- strcpy(ver->str, versionStr);
return true;
}
void Resource::checkJASVersion() {
+ if (_version.platform == Common::kPlatformAmiga) {
+ warning("Resource::checkJASVersion() disabled for Amiga versions");
+ return;
+ }
ResourceEntry *re = resourceEntry("QUEEN.JAS");
- assert(re != NULL);
+ assert(re != NULL && re->bundle == 1);
uint32 offset = re->offset;
if (isDemo())
offset += JAS_VERSION_OFFSET_DEMO;
@@ -252,17 +293,14 @@ const RetailGameVersion *Resource::detectGameVersionFromSize(uint32 size) {
}
Common::File *Resource::findSound(const char *filename, uint32 *size) {
- assert(strstr(filename, ".SB"));
- Common::File *f = NULL;
+ assert(strstr(filename, ".SB") != NULL || strstr(filename, ".AMR") != NULL);
ResourceEntry *re = resourceEntry(filename);
- if (re) {
- if (size != NULL) {
- *size = re->size;
- }
+ if (re && re->bundle == 1) {
+ *size = re->size;
_resourceFile.seek(re->offset);
- f = &_resourceFile;
+ return &_resourceFile;
}
- return f;
+ return NULL;
}
LineReader::LineReader(char *buffer, uint32 bufsize) : _buffer(buffer), _bufSize(bufsize), _current(0) {
diff --git a/engines/queen/resource.h b/engines/queen/resource.h
index 2e669198fb..2c16e51b82 100644
--- a/engines/queen/resource.h
+++ b/engines/queen/resource.h
@@ -44,6 +44,7 @@ struct RetailGameVersion {
};
struct DetectedGameVersion {
+ Common::Platform platform;
Common::Language language;
uint8 features;
uint8 compression;
@@ -87,29 +88,34 @@ public:
//! returns the language of the game
Common::Language getLanguage() const { return _version.language; }
+ Common::Platform getPlatform() const { return _version.platform; }
+
//! detect game version
static bool detectVersion(DetectedGameVersion *ver, Common::File *f);
enum Version {
- VER_ENG_FLOPPY = 0,
- VER_ENG_TALKIE = 1,
- VER_FRE_FLOPPY = 2,
- VER_FRE_TALKIE = 3,
- VER_GER_FLOPPY = 4,
- VER_GER_TALKIE = 5,
- VER_ITA_FLOPPY = 6,
- VER_ITA_TALKIE = 7,
- VER_SPA_TALKIE = 8,
- VER_HEB_TALKIE = 9,
- VER_DEMO_PCGAMES = 10,
- VER_DEMO = 11,
- VER_INTERVIEW = 12,
-
- VER_COUNT = 13
+ VER_ENG_FLOPPY = 0,
+ VER_ENG_TALKIE = 1,
+ VER_FRE_FLOPPY = 2,
+ VER_FRE_TALKIE = 3,
+ VER_GER_FLOPPY = 4,
+ VER_GER_TALKIE = 5,
+ VER_ITA_FLOPPY = 6,
+ VER_ITA_TALKIE = 7,
+ VER_SPA_TALKIE = 8,
+ VER_HEB_TALKIE = 9,
+ VER_DEMO_PCGAMES = 10,
+ VER_DEMO = 11,
+ VER_INTERVIEW = 12,
+ VER_AMI_ENG_FLOPPY = 13,
+ VER_AMI_DEMO = 14,
+ VER_AMI_INTERVIEW = 15,
+
+ VER_COUNT = 16
};
enum {
- CURRENT_TBL_VERSION = 1
+ CURRENT_TBL_VERSION = 2
};
enum {
diff --git a/engines/queen/sound.cpp b/engines/queen/sound.cpp
index 917351f3da..e228d6a1dd 100644
--- a/engines/queen/sound.cpp
+++ b/engines/queen/sound.cpp
@@ -21,45 +21,47 @@
*/
#include "common/stdafx.h"
+#include "common/config-manager.h"
#include "common/endian.h"
+#include "common/stream.h"
#include "queen/sound.h"
-
#include "queen/input.h"
+#include "queen/logic.h"
#include "queen/music.h"
#include "queen/queen.h"
#include "queen/resource.h"
#include "sound/flac.h"
+#include "sound/mididrv.h"
#include "sound/mp3.h"
#include "sound/vorbis.h"
#define SB_HEADER_SIZE_V104 110
#define SB_HEADER_SIZE_V110 122
-#define STOP_MUSIC -1
namespace Queen {
-class SilentSound : public Sound {
+class SilentSound : public PCSound {
public:
- SilentSound(Audio::Mixer *mixer, QueenEngine *vm) : Sound(mixer, vm) {}
+ SilentSound(Audio::Mixer *mixer, QueenEngine *vm) : PCSound(mixer, vm) {}
protected:
void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) {
// Do nothing
}
};
-class SBSound : public Sound {
+class SBSound : public PCSound {
public:
- SBSound(Audio::Mixer *mixer, QueenEngine *vm) : Sound(mixer, vm) {}
+ SBSound(Audio::Mixer *mixer, QueenEngine *vm) : PCSound(mixer, vm) {}
protected:
void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle);
};
#ifdef USE_MAD
-class MP3Sound : public Sound {
+class MP3Sound : public PCSound {
public:
- MP3Sound(Audio::Mixer *mixer, QueenEngine *vm) : Sound(mixer, vm) {}
+ MP3Sound(Audio::Mixer *mixer, QueenEngine *vm) : PCSound(mixer, vm) {}
protected:
void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) {
_mixer->playInputStream(Audio::Mixer::kSFXSoundType, soundHandle, Audio::makeMP3Stream(f, size));
@@ -68,9 +70,9 @@ protected:
#endif
#ifdef USE_VORBIS
-class OGGSound : public Sound {
+class OGGSound : public PCSound {
public:
- OGGSound(Audio::Mixer *mixer, QueenEngine *vm) : Sound(mixer, vm) {}
+ OGGSound(Audio::Mixer *mixer, QueenEngine *vm) : PCSound(mixer, vm) {}
protected:
void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) {
_mixer->playInputStream(Audio::Mixer::kSFXSoundType, soundHandle, Audio::makeVorbisStream(f, size));
@@ -79,9 +81,9 @@ protected:
#endif
#ifdef USE_FLAC
-class FLACSound : public Sound {
+class FLACSound : public PCSound {
public:
- FLACSound(Audio::Mixer *mixer, QueenEngine *vm) : Sound(mixer, vm) {};
+ FLACSound(Audio::Mixer *mixer, QueenEngine *vm) : PCSound(mixer, vm) {};
protected:
void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) {
_mixer->playInputStream(Audio::Mixer::kSFXSoundType, soundHandle, Audio::makeFlacStream(f, size));
@@ -90,15 +92,13 @@ protected:
#endif // #ifdef USE_FLAC
Sound::Sound(Audio::Mixer *mixer, QueenEngine *vm) :
- _mixer(mixer), _vm(vm), _sfxToggle(true), _speechToggle(true), _musicToggle(true), _lastOverride(0) {
-#ifdef ENABLE_AMIGA_MUSIC
- _lastModuleOverride = -1;
-#endif
+ _mixer(mixer), _vm(vm), _sfxToggle(true), _speechToggle(true), _musicToggle(true),
+ _speechSfxExists(false), _lastOverride(0), _masterVolume(0) {
}
Sound *Sound::makeSoundInstance(Audio::Mixer *mixer, QueenEngine *vm, uint8 compression) {
- if (!mixer->isReady())
- return new SilentSound(mixer, vm);
+ if (vm->resource()->getPlatform() == Common::kPlatformAmiga)
+ return new AmigaSound(mixer, vm);
switch (compression) {
case COMPRESSION_NONE:
@@ -130,135 +130,52 @@ Sound *Sound::makeSoundInstance(Audio::Mixer *mixer, QueenEngine *vm, uint8 comp
}
}
-void Sound::waitFinished(bool isSpeech) {
- while (_mixer->isSoundHandleActive(isSpeech ? _speechHandle : _sfxHandle))
- _vm->input()->delay(10);
-}
-
-void Sound::playSfx(uint16 sfx) {
- if (sfxOn() && sfx != 0) {
-#ifndef PALMOS_68K
- playSound(_sfxName[sfx - 1], false);
-#else
- playSound(_sfxName + 10 * (sfx - 1), false); // saved as 8char + /0/0
-#endif
- }
-}
-
-void Sound::playSpeech(const char *base) {
- if (speechOn()) {
- playSound(base, true);
- }
+void Sound::saveState(byte *&ptr) {
+ WRITE_BE_UINT16(ptr, _lastOverride); ptr += 2;
}
-void Sound::playSound(const char *base, bool isSpeech) {
- char name[13];
- strcpy(name, base);
- // alter filename to add zeros and append ".SB"
- for (int i = 0; i < 8; i++) {
- if (name[i] == ' ')
- name[i] = '0';
- }
- strcat(name, ".SB");
- waitFinished(isSpeech);
- uint32 size;
- Common::File *f = _vm->resource()->findSound(name, &size);
- if (f) {
- playSoundData(f, size, isSpeech ? &_speechHandle : &_sfxHandle);
- _speechSfxExists = isSpeech;
- } else {
- _speechSfxExists = false;
- }
+void Sound::loadState(uint32 ver, byte *&ptr) {
+ _lastOverride = (int16)READ_BE_INT16(ptr); ptr += 2;
}
-#ifdef ENABLE_AMIGA_MUSIC
-
-static struct {
- const char *name;
- uint8 songNum;
- uint8 remapSongNumTable[6];
-} amigaMusicData[] = {
- { "HOTEL", 1, { 1, 2, 39, 0 } },
- { "HOTEL", 2, { 20, 30, 34, 0 } },
- { "HOTEL", 3, { 19, 0 } },
- { "HOTEL", 4, { 29, 35, 36, 0 } },
- { "JUNG", 1, { 40, 0 } },
- { "JUNG", 2, { 3, 38, 89, 0 } },
- { "TEMPLE", 1, { 54, 0 } },
- { "TEMPLE", 2, { 12, 0 } },
- { "TEMPLE", 3, { 7, 9, 10, 11, 0 } },
- { "TEMPLE", 4, { 31, 0 } },
- { "FLODA", 1, { 16, 0 } },
- { "FLODA", 2, { 17, 0 } },
- { "FLODA", 3, { 13, 0 } },
- { "FLODA", 4, { 41, 0 } },
- { "FLODA", 5, { 30, 43, 0 } },
- { "TITLE", 1, { 67, 88, 203, 0 } },
- { "AWESTRUK", 1, { 37, 52, 90, 196, 0 } },
- { "'JUNGLE'", 1, { 91, 0 } },
- { "FRANK", 1, { 46, 0 } },
- { "BOB", 1, { 6, 0 } },
- { "AZURA", 1, { 44, 53, 204, 0 } },
- { "FORT", 1, { 21, 0 } },
- { "ROCKET", 1, { 32, 194, 195, 0 } },
- { "ROBOT", 1, { 92, 0 } }
-};
-
-void Sound::playSong(int16 songNum) {
- debug(2, "Sound::playSong %d override %d/%d", songNum, _lastModuleOverride, _lastOverride);
+PCSound::PCSound(Audio::Mixer *mixer, QueenEngine *vm)
+ : Sound(mixer, vm) {
- const char *moduleName = 0;
- for (int i = 0; i < ARRAYSIZE(amigaMusicData) && !moduleName; ++i) {
- for (int j = 0; amigaMusicData[i].remapSongNumTable[j] != 0; ++j) {
- if (amigaMusicData[i].remapSongNumTable[j] == songNum) {
- moduleName = amigaMusicData[i].name;
- songNum = amigaMusicData[i].songNum;
+ int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);
+ bool native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
- if (_lastModuleOverride == i && _lastOverride == songNum)
- return;
+ MidiDriver *driver = MidiDriver::createMidi(midiDriver);
+ if (native_mt32)
+ driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
- _lastModuleOverride = i;
- _lastOverride = songNum;
- break;
- }
- }
- }
- if (!moduleName)
- return;
-
- _mixer->stopHandle(_musicHandle);
-
- debug(1, "playAmigaSong name '%s' subsong %d", moduleName, songNum);
-
- char buf[16];
- sprintf(buf, "%s.SNG", moduleName);
- Common::File fsng;
- if (!fsng.open(buf))
- return;
-
- sprintf(buf, "%s.INS", moduleName);
- Common::File fins;
- if (!fins.open(buf))
- return;
+ _music = new Music(driver, vm);
+ _music->hasNativeMT32(native_mt32);
+}
- Audio::AudioStream *rjp1Stream = Audio::makeRjp1Stream(&fsng, &fins, songNum);
- if (rjp1Stream) {
- _mixer->playInputStream(Audio::Mixer::kMusicSoundType, &_musicHandle, rjp1Stream);
- }
+PCSound::~PCSound() {
+ delete _music;
}
+void PCSound::playSfx(uint16 sfx) {
+ if (sfxOn() && sfx != 0) {
+#ifndef PALMOS_68K
+ playSound(_sfxName[sfx - 1], false);
#else
+ playSound(_sfxName + 10 * (sfx - 1), false); // saved as 8char + /0/0
+#endif
+ }
+}
-void Sound::playSong(int16 songNum) {
+void PCSound::playSong(int16 songNum) {
if (songNum <= 0) {
- _vm->music()->stopSong();
+ _music->stopSong();
return;
}
int16 newTune;
if (_vm->resource()->isDemo()) {
if (songNum == 17) {
- _vm->music()->stopSong();
+ _music->stopSong();
return;
}
newTune = _songDemo[songNum - 1].tuneList[0] - 1;
@@ -281,25 +198,58 @@ void Sound::playSong(int16 songNum) {
break;
// Alter song settings (such as volume) and exit
case 2:
- _vm->music()->toggleVChange();
+ _music->toggleVChange();
default:
return;
}
_lastOverride = songNum;
- _vm->music()->queueTuneList(newTune);
- _vm->music()->playMusic();
+ _music->queueTuneList(newTune);
+ _music->playMusic();
}
-#endif // ENABLE_AMIGA_MUSIC
+void PCSound::stopSong() {
+ _music->stopSong();
+}
-void Sound::saveState(byte *&ptr) {
- WRITE_BE_UINT16(ptr, _lastOverride); ptr += 2;
+void PCSound::playSpeech(const char *base) {
+ if (speechOn()) {
+ playSound(base, true);
+ }
}
-void Sound::loadState(uint32 ver, byte *&ptr) {
- _lastOverride = (int16)READ_BE_INT16(ptr); ptr += 2;
+void PCSound::setVolume(int vol) {
+ _music->setVolume(vol);
+}
+
+int PCSound::volume() {
+ return _music->volume();
+}
+
+void PCSound::waitFinished(bool isSpeech) {
+ while (_mixer->isSoundHandleActive(isSpeech ? _speechHandle : _sfxHandle))
+ _vm->input()->delay(10);
+}
+
+void PCSound::playSound(const char *base, bool isSpeech) {
+ char name[13];
+ strcpy(name, base);
+ // alter filename to add zeros and append ".SB"
+ for (int i = 0; i < 8; i++) {
+ if (name[i] == ' ')
+ name[i] = '0';
+ }
+ strcat(name, ".SB");
+ waitFinished(isSpeech);
+ uint32 size;
+ Common::File *f = _vm->resource()->findSound(name, &size);
+ if (f) {
+ playSoundData(f, size, isSpeech ? &_speechHandle : &_sfxHandle);
+ _speechSfxExists = isSpeech;
+ } else {
+ _speechSfxExists = false;
+ }
}
void SBSound::playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) {
@@ -328,4 +278,425 @@ void SBSound::playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *so
}
}
+AmigaSound::AmigaSound(Audio::Mixer *mixer, QueenEngine *vm)
+ : Sound(mixer, vm), _fanfareRestore(0), _fanfareCount(0), _fluteCount(0) {
+}
+
+void AmigaSound::playSfx(uint16 sfx) {
+ if (_vm->logic()->currentRoom() == 111) {
+ // lightning sound
+ playSound("88SSSSSS");
+ }
+}
+
+void AmigaSound::playSong(int16 song) {
+ debug(2, "Sound::playSong %d override %d", song, _lastOverride);
+
+ if (song < 0) {
+ stopSong();
+ return;
+ }
+
+ // remap song numbers for the Amiga
+ switch (song)
+ {
+ case 1:
+ case 2:
+ song = 39;
+ break;
+ case 37:
+ case 52:
+ case 196:
+ song = 90;
+ break;
+ case 38:
+ case 89:
+ song = 3;
+ break;
+ case 24:
+ case 158:
+ song = 117;
+ break;
+ case 71:
+ case 72:
+ case 73:
+ case 75:
+ song = 133;
+ break;
+ case 203:
+ song = 67;
+ break;
+ case 145:
+ song = 140;
+ break;
+ case 53:
+ case 204:
+ song = 44;
+ break;
+ case 136:
+ case 142:
+ case 179:
+ song = 86;
+ break;
+ case 101:
+ case 102:
+ case 143:
+ song = 188;
+ break;
+ case 65:
+ case 62:
+ song = 69;
+ break;
+ case 118:
+ case 119:
+ song = 137;
+ break;
+ case 130:
+ case 131:
+ song = 59;
+ break;
+ case 174:
+ case 175:
+ song = 57;
+ break;
+ case 171:
+ case 121:
+ song = 137;
+ break;
+ case 138:
+ case 170:
+ case 149:
+ song = 28;
+ break;
+ case 122:
+ case 180:
+ case 83:
+ case 98:
+ song = 83;
+ break;
+ case 20:
+ case 33:
+ song = 34;
+ break;
+ case 29:
+ case 35:
+ song = 36;
+ break;
+ case 7:
+ case 9:
+ case 10:
+ song = 11;
+ break;
+ case 110:
+ song = 94;
+ break;
+ case 111:
+ song = 95;
+ break;
+ case 30:
+ song = 43;
+ break;
+ case 76:
+ song = 27;
+ break;
+ case 194:
+ case 195:
+ song = 32;
+ break;
+ }
+
+ if (_lastOverride != 32 && _lastOverride != 44) {
+ if (playSpecialSfx(song)) {
+ return;
+ }
+ }
+
+ if (_lastOverride == song && _mixer->isSoundHandleActive(_modHandle)) {
+ return;
+ }
+ switch (song) {
+ // hotel
+ case 39:
+ playModule("HOTEL", 1);
+ break;
+ case 19:
+ playModule("HOTEL", 3);
+ break;
+ case 34:
+ playModule("HOTEL", 2);
+ break;
+ case 36:
+ playModule("HOTEL", 4);
+ _fanfareRestore = _lastOverride;
+ _fanfareCount = 60;
+ break;
+ // jungle
+ case 40:
+ playModule("JUNG", 1);
+ _fanfareRestore = _lastOverride;
+ _fanfareCount = 80;
+ _fluteCount = 100;
+ break;
+ case 3:
+ playModule("JUNG", 2);
+ _fluteCount = 100;
+ break;
+ // temple
+ case 54:
+ playModule("TEMPLE", 1);
+ break;
+ case 12:
+ playModule("TEMPLE", 2);
+ break;
+ case 11:
+ playModule("TEMPLE", 3);
+ break;
+ case 31:
+ playModule("TEMPLE", 4);
+ _fanfareRestore = _lastOverride;
+ _fanfareCount = 80;
+ break;
+ // floda
+ case 41:
+ playModule("FLODA", 4);
+ _fanfareRestore = _lastOverride;
+ _fanfareCount = 60;
+ break;
+ case 13:
+ playModule("FLODA", 3);
+ break;
+ case 16:
+ playModule("FLODA", 1);
+ break;
+ case 17:
+ playModule("FLODA", 2);
+ break;
+ case 43:
+ playModule("FLODA", 5);
+ break;
+ // end credits
+ case 67:
+ playModule("TITLE", 1);
+ break;
+ // intro credits
+ case 88:
+ playModule("TITLE", 1);
+ break;
+ // valley
+ case 90:
+ playModule("AWESTRUK", 1);
+ break;
+ // confrontation
+ case 91:
+ playModule("'JUNGLE'", 1);
+ break;
+ // Frank
+ case 46:
+ playModule("FRANK", 1);
+ break;
+ // trader bob
+ case 6:
+ playModule("BOB", 1);
+ break;
+ // azura
+ case 44:
+ playModule("AZURA", 1);
+ break;
+ // amazon fortress
+ case 21:
+ playModule("FORT", 1);
+ break;
+ // rocket
+ case 32:
+ playModule("ROCKET", 1);
+ break;
+ // robot
+ case 92:
+ playModule("ROBOT", 1);
+ break;
+ default:
+ // song not available in the amiga version
+ return;
+ }
+ _lastOverride = song;
+}
+
+void AmigaSound::stopSfx() {
+ _mixer->stopHandle(_sfxHandle);
+}
+
+void AmigaSound::stopSong() {
+ _mixer->stopHandle(_modHandle);
+ _fanfareCount = _fluteCount = 0;
+}
+
+void AmigaSound::updateMusic() {
+ if (_fanfareCount > 0) {
+ --_fanfareCount;
+ if (_fanfareCount == 0) {
+ playSong(_fanfareRestore);
+ }
+ }
+ if (_fluteCount > 0 && (_lastOverride == 40 || _lastOverride == 3)) {
+ --_fluteCount;
+ if (_fluteCount == 0) {
+// playPattern(3, 5 + (getRandomNumber() & 7));
+ _fluteCount = 100;
+ }
+ }
+}
+
+void AmigaSound::playSound(const char *base) {
+ char soundName[20];
+ sprintf(soundName, "%s.AMR", base);
+
+ uint32 soundSize;
+ Common::File *f = _vm->resource()->findSound(soundName, &soundSize);
+ if (f) {
+ uint8 *soundData = (uint8 *)malloc(soundSize);
+ if (soundData) {
+ f->read(soundData, soundSize);
+ byte flags = Audio::Mixer::FLAG_AUTOFREE;
+ _mixer->playRaw(Audio::Mixer::kSFXSoundType, &_sfxHandle, soundData, soundSize, 11025, flags);
+ }
+ }
+}
+
+void AmigaSound::playModule(const char *base, int song) {
+ char name[20];
+
+ // load song/pattern data
+ uint32 sngDataSize;
+ sprintf(name, "%s.SNG", base);
+ uint8 *sngData = _vm->resource()->loadFile(name, 0, &sngDataSize);
+ Common::MemoryReadStream sngStr(sngData, sngDataSize);
+
+ // load instruments/wave data
+ uint32 insDataSize;
+ sprintf(name, "%s.INS", base);
+ uint8 *insData = _vm->resource()->loadFile(name, 0, &insDataSize);
+ Common::MemoryReadStream insStr(insData, insDataSize);
+
+ _mixer->stopHandle(_modHandle);
+ Audio::AudioStream *stream = Audio::makeRjp1Stream(&sngStr, &insStr, song, _mixer->getOutputRate());
+ if (stream) {
+ _mixer->playInputStream(Audio::Mixer::kMusicSoundType, &_modHandle, stream);
+ }
+
+ delete[] sngData;
+ delete[] insData;
+
+ _fanfareCount = 0;
+}
+
+bool AmigaSound::playSpecialSfx(int16 sfx) {
+ switch (sfx) {
+ case 5: // normal volume
+ break;
+ case 15: // soft volume
+ break;
+ case 14: // medium volume
+ break;
+ case 25: // open door
+ playSound("116BSSSS");
+ break;
+ case 26: // close door
+ playSound("105ASSSS");
+ break;
+ case 56: // light switch
+ playSound("27SSSSSS");
+ break;
+ case 57: // hydraulic doors open
+ playSound("96SSSSSS");
+ break;
+ case 58: // hydraulic doors close
+ playSound("97SSSSSS");
+ break;
+ case 59: // metallic door slams
+ playSound("105SSSSS");
+ break;
+ case 63: // oracle rezzes in
+ playSound("132SSSSS");
+ break;
+ case 27: // cloth slide 1
+ playSound("135SSSSS");
+ break;
+ case 83: // splash
+ playSound("18SSSSSS");
+ break;
+ case 85: // agression enhancer
+ playSound("138BSSSS");
+ break;
+ case 68: // dino ray
+ playSound("138SSSSS");
+ break;
+ case 140: // dino transformation
+ playSound("55BSSSSS");
+ break;
+ case 141: // experimental laser
+ playSound("55SSSSSS");
+ break;
+ case 94: // plane hatch open
+ playSound("3SSSSSSS");
+ break;
+ case 95: // plane hatch close
+ playSound("4SSSSSSS");
+ break;
+ case 117: // oracle rezzes out
+ playSound("70SSSSSS");
+ break;
+ case 124: // dino horn
+ playSound("103SSSSS");
+ break;
+ case 127: // punch
+ playSound("128SSSSS");
+ break;
+ case 128: // body hits ground
+ playSound("129SSSSS");
+ break;
+ case 137: // explosion
+ playSound("88SSSSSS");
+ break;
+ case 86: // stone door grind 1
+ playSound("1001SSSS");
+ break;
+ case 188: // stone door grind 2
+ playSound("1002SSSS");
+ break;
+ case 28: // cloth slide 2
+ playSound("1005SSSS");
+ break;
+ case 151: // rattle bars
+ playSound("115SSSSS");
+ break;
+ case 152: // door dissolves
+ playSound("56SSSSSS");
+ break;
+ case 153: // altar slides
+ playSound("85SSSSSS");
+ break;
+ case 166 : // pull lever
+ playSound("1008SSSS");
+ break;
+ case 182: // zap Frank
+ playSound("1023SSSS");
+ break;
+ case 69: // splorch
+ playSound("137ASSSS");
+ break;
+ case 70: // robot laser
+ playSound("61SSSSSS");
+ break;
+ case 133: // pick hits stone
+ playSound("71SSSSSS");
+ break;
+ case 165: // press button
+ playSound("1007SSSS");
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
} //End of namespace Queen
diff --git a/engines/queen/sound.h b/engines/queen/sound.h
index 38dadd7ece..c93714e0d9 100644
--- a/engines/queen/sound.h
+++ b/engines/queen/sound.h
@@ -28,18 +28,12 @@
#include "sound/mods/rjp1.h"
#include "queen/defs.h"
-// define this to enable amiga "rjp1" modules playback
-//#define ENABLE_AMIGA_MUSIC 1
-
namespace Common {
class File;
}
namespace Queen {
-class Input;
-class Resource;
-
struct songData {
int16 tuneList[5];
int16 volume;
@@ -56,6 +50,7 @@ struct tuneData {
int16 delay;
};
+class Music;
class QueenEngine;
class Sound {
@@ -68,27 +63,33 @@ public:
*/
static Sound *makeSoundInstance(Audio::Mixer *mixer, QueenEngine *vm, uint8 compression);
- void playSfx(uint16 sfx);
- void playSpeech(const char *base);
- void playSong(int16 songNum);
+ virtual void playSfx(uint16 sfx) {}
+ virtual void playSong(int16 songNum) {}
+ virtual void playSpeech(const char *base) {}
+
+ virtual void stopSfx() {}
+ virtual void stopSong() {}
+ virtual void stopSpeech() {}
+
+ virtual bool isSpeechActive() const { return false; }
+ virtual bool isSfxActive() const { return false; }
+
+ virtual void setVolume(int vol) { _masterVolume = vol; }
+ virtual int volume() { return _masterVolume; }
+
void playLastSong() { playSong(_lastOverride); }
- void stopSpeech() { _mixer->stopHandle(_speechHandle); }
- void stopSfx() { _mixer->stopHandle(_sfxHandle); }
bool sfxOn() const { return _sfxToggle; }
void sfxToggle(bool val) { _sfxToggle = val; }
- void toggleSfx() { _sfxToggle ^= true; }
+ void toggleSfx() { _sfxToggle = !_sfxToggle; }
bool speechOn() const { return _speechToggle; }
void speechToggle(bool val) { _speechToggle = val; }
- void toggleSpeech() { _speechToggle ^= true; }
+ void toggleSpeech() { _speechToggle = !_speechToggle; }
bool musicOn() const { return _musicToggle; }
void musicToggle(bool val) { _musicToggle = val; }
- void toggleMusic() { _musicToggle ^= true; }
-
- bool isSpeechActive() const { return _mixer->isSoundHandleActive(_speechHandle); }
- bool isSfxActive() const { return _mixer->isSoundHandleActive(_sfxHandle); }
+ void toggleMusic() { _musicToggle = !_musicToggle; }
bool speechSfxExists() const { return _speechSfxExists; }
@@ -114,9 +115,6 @@ public:
#endif
protected:
- void waitFinished(bool isSpeech);
- void playSound(const char *base, bool isSpeech);
- virtual void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) = 0;
Audio::Mixer *_mixer;
QueenEngine *_vm;
@@ -127,12 +125,63 @@ protected:
bool _speechSfxExists;
int16 _lastOverride;
+ int _masterVolume;
+};
+
+class PCSound : public Sound {
+public:
+ PCSound(Audio::Mixer *mixer, QueenEngine *vm);
+ ~PCSound();
+
+ void playSfx(uint16 sfx);
+ void playSpeech(const char *base);
+ void playSong(int16 songNum);
+
+ void stopSfx() { _mixer->stopHandle(_sfxHandle); }
+ void stopSong();
+ void stopSpeech() { _mixer->stopHandle(_speechHandle); }
+
+ bool isSpeechActive() const { return _mixer->isSoundHandleActive(_speechHandle); }
+ bool isSfxActive() const { return _mixer->isSoundHandleActive(_sfxHandle); }
+
+ void setVolume(int vol);
+ int volume();
+
+protected:
+ void waitFinished(bool isSpeech);
+ void playSound(const char *base, bool isSpeech);
+
+ virtual void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) = 0;
+
Audio::SoundHandle _sfxHandle;
Audio::SoundHandle _speechHandle;
-#ifdef ENABLE_AMIGA_MUSIC
- int16 _lastModuleOverride;
- Audio::SoundHandle _musicHandle;
-#endif
+ Music *_music;
+};
+
+class AmigaSound : public Sound {
+public:
+ AmigaSound(Audio::Mixer *mixer, QueenEngine *vm);
+
+ void playSfx(uint16 sfx);
+ void playSong(int16 song);
+
+ void stopSfx();
+ void stopSong();
+
+ void updateMusic();
+
+ bool isSfxActive() const { return false; }
+
+protected:
+
+ void playSound(const char *base);
+ void playModule(const char *base, int song);
+ bool playSpecialSfx(int16 sfx);
+
+ int16 _fanfareRestore;
+ int _fanfareCount, _fluteCount;
+ Audio::SoundHandle _modHandle;
+ Audio::SoundHandle _sfxHandle;
};
} // End of namespace Queen
diff --git a/engines/queen/talk.cpp b/engines/queen/talk.cpp
index 5d1cb6e447..17cf56d60b 100644
--- a/engines/queen/talk.cpp
+++ b/engines/queen/talk.cpp
@@ -350,9 +350,9 @@ byte *Talk::loadDialogFile(const char *filename) {
const char *filename;
Common::Language language;
} dogFiles[] = {
- { "chief1.dog", Common::FR_FRA },
- { "chief2.dog", Common::FR_FRA },
- { "bud1.dog", Common::IT_ITA }
+ { "CHIEF1.DOG", Common::FR_FRA },
+ { "CHIEF2.DOG", Common::FR_FRA },
+ { "BUD1.DOG", Common::IT_ITA }
};
for (int i = 0; i < ARRAYSIZE(dogFiles); ++i) {
if (!scumm_stricmp(filename, dogFiles[i].filename) &&