diff options
-rw-r--r-- | engines/queen/bankman.cpp | 198 | ||||
-rw-r--r-- | engines/queen/bankman.h | 4 | ||||
-rw-r--r-- | engines/queen/display.cpp | 695 | ||||
-rw-r--r-- | engines/queen/display.h | 9 | ||||
-rw-r--r-- | engines/queen/graphics.cpp | 83 | ||||
-rw-r--r-- | engines/queen/journal.cpp | 14 | ||||
-rw-r--r-- | engines/queen/logic.cpp | 3 | ||||
-rw-r--r-- | engines/queen/music.cpp | 2 | ||||
-rw-r--r-- | engines/queen/queen.cpp | 20 | ||||
-rw-r--r-- | engines/queen/queen.h | 3 | ||||
-rw-r--r-- | engines/queen/resource.cpp | 86 | ||||
-rw-r--r-- | engines/queen/resource.h | 38 | ||||
-rw-r--r-- | engines/queen/sound.cpp | 643 | ||||
-rw-r--r-- | engines/queen/sound.h | 97 | ||||
-rw-r--r-- | engines/queen/talk.cpp | 6 | ||||
-rw-r--r-- | sound/mods/rjp1.cpp | 6 | ||||
-rw-r--r-- | sound/mods/rjp1.h | 2 | ||||
-rw-r--r-- | tools/qtable/fat_amiga_demo.h | 115 | ||||
-rw-r--r-- | tools/qtable/fat_amiga_eng_floppy.h | 763 | ||||
-rw-r--r-- | tools/qtable/fat_amiga_interview.h | 70 | ||||
-rw-r--r-- | tools/qtable/qtable.c | 17 |
21 files changed, 2257 insertions, 617 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) && diff --git a/sound/mods/rjp1.cpp b/sound/mods/rjp1.cpp index be0794cdc6..f2967181cb 100644 --- a/sound/mods/rjp1.cpp +++ b/sound/mods/rjp1.cpp @@ -82,7 +82,7 @@ public: int instrumentsCount; }; - Rjp1(int rate = 44100, bool stereo = true); + Rjp1(int rate, bool stereo); virtual ~Rjp1(); bool load(Common::SeekableReadStream *songData, Common::SeekableReadStream *instrumentsData); @@ -519,8 +519,8 @@ const int16 Rjp1::_periodsTable[] = { const int Rjp1::_periodsCount = ARRAYSIZE(_periodsTable); -AudioStream *makeRjp1Stream(Common::SeekableReadStream *songData, Common::SeekableReadStream *instrumentsData, int song) { - Rjp1 *stream = new Rjp1; +AudioStream *makeRjp1Stream(Common::SeekableReadStream *songData, Common::SeekableReadStream *instrumentsData, int song, int rate, bool stereo) { + Rjp1 *stream = new Rjp1(rate, stereo); if (stream->load(songData, instrumentsData)) { stream->startSong(song); return stream; diff --git a/sound/mods/rjp1.h b/sound/mods/rjp1.h index ae36869a73..b9c9ab2a6c 100644 --- a/sound/mods/rjp1.h +++ b/sound/mods/rjp1.h @@ -29,7 +29,7 @@ namespace Audio { class AudioStream; -AudioStream *makeRjp1Stream(Common::SeekableReadStream *songData, Common::SeekableReadStream *instrumentsData, int song); +AudioStream *makeRjp1Stream(Common::SeekableReadStream *songData, Common::SeekableReadStream *instrumentsData, int song, int rate = 44100, bool stereo = true); } // End of namespace Audio diff --git a/tools/qtable/fat_amiga_demo.h b/tools/qtable/fat_amiga_demo.h new file mode 100644 index 0000000000..027fc83e78 --- /dev/null +++ b/tools/qtable/fat_amiga_demo.h @@ -0,0 +1,115 @@ +struct DataFileEntry fatAmigaDemo[] = { + { 1, 0x00000000, 0x0034AB, "ANDERSON.ACT" }, + { 2, 0x00000000, 0x000346, "C11A.CUT" }, + { 2, 0x00000346, 0x000ED4, "C39A.CUT" }, + { 1, 0x000034AB, 0x0002B8, "C70A.CUT" }, + { 1, 0x00003763, 0x000348, "C70B.CUT" }, + { 2, 0x0000121A, 0x005006, "C70B.SAM" }, + { 2, 0x00006220, 0x000292, "C70C.CUT" }, + { 1, 0x00003AAB, 0x000952, "C70D.CUT" }, + { 1, 0x000043FD, 0x00038C, "C70E.CUT" }, + { 2, 0x000064B2, 0x000310, "C70F.CUT" }, + { 2, 0x000067C2, 0x003639, "C70F.SAM" }, + { 2, 0x00009DFB, 0x00030C, "C70G.CUT" }, + { 2, 0x0000A107, 0x0054B9, "C70G.SAM" }, + { 1, 0x00004789, 0x000322, "C70H.CUT" }, + { 1, 0x00004AAB, 0x0003D8, "C70I.CUT" }, + { 1, 0x00004E83, 0x000184, "C70J.CUT" }, + { 1, 0x00005007, 0x0002C0, "C70K.CUT" }, + { 1, 0x000052C7, 0x0002C0, "C70L.CUT" }, + { 1, 0x00005587, 0x0002BA, "C70M.CUT" }, + { 1, 0x00005841, 0x0002BA, "C70N.CUT" }, + { 2, 0x0000F5C0, 0x000094, "C71A.CUT" }, + { 2, 0x0000F654, 0x000094, "C71B.CUT" }, + { 2, 0x0000F6E8, 0x0000B2, "C71C.CUT" }, + { 2, 0x0000F79A, 0x000730, "C72A.CUT" }, + { 2, 0x0000FECA, 0x000632, "C72B.CUT" }, + { 2, 0x000104FC, 0x00007C, "C72C.CUT" }, + { 2, 0x00010578, 0x00038A, "C73A.CUT" }, + { 2, 0x00010902, 0x0002B8, "C73B.CUT" }, + { 2, 0x00010BBA, 0x000192, "C73C.CUT" }, + { 2, 0x00010D4C, 0x0000C8, "C73D.CUT" }, + { 2, 0x00010E14, 0x000110, "C73E.CUT" }, + { 2, 0x00010F24, 0x000110, "C73F.CUT" }, + { 2, 0x00011034, 0x000210, "C73G.CUT" }, + { 2, 0x00011244, 0x000786, "C74A.CUT" }, + { 2, 0x000119CA, 0x00018C, "C74B.CUT" }, + { 2, 0x00011B56, 0x0001DC, "C74C.CUT" }, + { 2, 0x00011D32, 0x00018C, "C74D.CUT" }, + { 2, 0x00011EBE, 0x0000E0, "C74F.CUT" }, + { 2, 0x00011F9E, 0x000D00, "C75B.CUT" }, + { 2, 0x00012C9E, 0x000072, "C76A.CUT" }, + { 2, 0x00012D10, 0x000EEC, "C76B.CUT" }, + { 2, 0x00013BFC, 0x0007E4, "C8A.CUT" }, + { 2, 0x000143E0, 0x0001B8, "C8B.CUT" }, + { 2, 0x00014598, 0x00017E, "C97A.CUT" }, + { 2, 0x00014716, 0x00013C, "C97B.CUT" }, + { 2, 0x00014852, 0x000094, "C99D.CUT" }, + { 2, 0x000148E6, 0x0002E6, "C99E.CUT" }, + { 2, 0x00014BCC, 0x0002E6, "C99F.CUT" }, + { 2, 0x00014EB2, 0x0001FA, "C9A.CUT" }, + { 2, 0x000150AC, 0x0000F8, "C9B.CUT" }, + { 2, 0x000151A4, 0x000136, "C9C.CUT" }, + { 2, 0x000152DA, 0x0000A0, "C9D.CUT" }, + { 2, 0x0001537A, 0x0001F6, "CDCLO.CUT" }, + { 2, 0x00015570, 0x0001F6, "CDRES.CUT" }, + { 2, 0x00015766, 0x0035B4, "CHANGE.SAM" }, + { 1, 0x00005AFB, 0x00176A, "CINTR.CUT" }, + { 1, 0x00007265, 0x0000AA, "CLOGO.CUT" }, + { 1, 0x0000730F, 0x0003AE, "CRED.CUT" }, + { 1, 0x000076BD, 0x003D06, "CROWBAR.SAM" }, + { 2, 0x00018D1A, 0x0001F6, "CUDRS.CUT" }, + { 1, 0x0000B3C3, 0x003F22, "D1.BBK" }, + { 1, 0x0000F2E5, 0x0068D2, "D1.LBM" }, + { 1, 0x00015BB7, 0x00674C, "D1C.SAM" }, + { 2, 0x00018F10, 0x002D36, "D2.BBK" }, + { 2, 0x0001BC46, 0x006662, "D2.LBM" }, + { 2, 0x000222A8, 0x00305A, "D3.BBK" }, + { 2, 0x00025302, 0x0061B4, "D3.LBM" }, + { 2, 0x0002B4B6, 0x004288, "D3.SAM" }, + { 1, 0x0001C303, 0x00BD80, "D4.BBK" }, + { 1, 0x00028083, 0x008352, "D4.LBM" }, + { 2, 0x0002F73E, 0x00651C, "D9.BBK" }, + { 2, 0x00035C5A, 0x008E56, "D9.LBM" }, + { 2, 0x0003EAB0, 0x003997, "DEINO.ACT" }, + { 2, 0x00042447, 0x002347, "DFRANK.ACT" }, + { 2, 0x0004478E, 0x001331, "DISK1.SAM" }, + { 2, 0x00045ABF, 0x008665, "FAYE.ACT" }, + { 2, 0x0004E124, 0x00007A, "FAYE5.CUT" }, + { 2, 0x0004E19E, 0x004947, "FRANK.ACT" }, + { 2, 0x00052AE5, 0x000E48, "FRANK.DOG" }, + { 2, 0x0005392D, 0x007530, "FRANK.INS" }, + { 2, 0x0005AE5D, 0x000B05, "FRANK.SNG" }, + { 2, 0x0005B962, 0x007C6F, "FRANK_H.ACT" }, + { 2, 0x000635D1, 0x0089E1, "FRANK_H.BBK" }, + { 2, 0x0006BFB2, 0x002EA6, "FRANK_H.LBM" }, + { 2, 0x0006EE58, 0x002A12, "GOONS.ACT" }, + { 2, 0x0007186A, 0x004C0B, "HENRY.ACT" }, + { 1, 0x000303D5, 0x007530, "HOTEL.INS" }, + { 1, 0x00037905, 0x000BAE, "HOTEL.SNG" }, + { 2, 0x00076475, 0x004373, "JOED_A.BBK" }, + { 2, 0x0007A7E8, 0x0048A5, "JOED_B.BBK" }, + { 1, 0x000384B3, 0x003F8F, "JOEU_A.BBK" }, + { 1, 0x0003C442, 0x004179, "JOEU_B.BBK" }, + { 1, 0x000405BB, 0x003553, "JOE_A.BBK" }, + { 1, 0x00043B0E, 0x00562B, "JOE_B.BBK" }, + { 1, 0x00049139, 0x008726, "L1.LBM" }, + { 2, 0x0007F08D, 0x001784, "LARIS.ACT" }, + { 2, 0x00080811, 0x000F32, "LARIS.DOG" }, + { 2, 0x00081743, 0x00079A, "LARIS3.DOG" }, + { 2, 0x00081EDD, 0x00837C, "LOLA.ACT" }, + { 2, 0x0008A259, 0x000AD6, "LOLA1.DOG" }, + { 2, 0x0008AD2F, 0x0049C1, "N14.BBK" }, + { 2, 0x0008F6F0, 0x006D24, "N14.LBM" }, + { 2, 0x00096414, 0x01204F, "N14.SAM" }, + { 1, 0x0005185F, 0x00F1B8, "OBJECTS.BBK" }, + { 1, 0x00060A17, 0x001BD6, "PANEL.LBM" }, + { 1, 0x000625ED, 0x0000DA, "PCLOGO.CUT" }, + { 1, 0x000626C7, 0x0130D8, "QUEEN.JAS" }, + { 1, 0x0007579F, 0x008A5D, "QUEEN2.JAS" }, + { 1, 0x0007E1FC, 0x00468A, "RENEGADE.LBM" }, + { 1, 0x00082886, 0x00526D, "SHEET.SAM" }, + { 1, 0x00087AF3, 0x001D94, "T21.LBM" }, + { 2, 0x000A8463, 0x00A727, "TABLET.BBK" }, + { 2, 0x000B2B8A, 0x0069EA, "TABLET.LBM" } +}; diff --git a/tools/qtable/fat_amiga_eng_floppy.h b/tools/qtable/fat_amiga_eng_floppy.h new file mode 100644 index 0000000000..49895cd0eb --- /dev/null +++ b/tools/qtable/fat_amiga_eng_floppy.h @@ -0,0 +1,763 @@ +struct DataFileEntry fatAmigaEngFl[] = { + { 11, 0x00000000, 0x00C012, "'JUNGLE'.INS" }, + { 11, 0x0000C012, 0x000F60, "'JUNGLE'.SNG" }, + { 11, 0x0000CF72, 0x005208, "1001SSSS.AMR" }, + { 11, 0x0001217A, 0x004974, "1002SSSS.AMR" }, + { 11, 0x00016AEE, 0x001E36, "1005SSSS.AMR" }, + { 11, 0x00018924, 0x001304, "1007SSSS.AMR" }, + { 11, 0x00019C28, 0x002DDC, "1008SSSS.AMR" }, + { 11, 0x0001CA04, 0x003D11, "1023SSSS.AMR" }, + { 11, 0x00020715, 0x005208, "103SSSSS.AMR" }, + { 11, 0x0002591D, 0x001C96, "105ASSSS.AMR" }, + { 11, 0x000275B3, 0x002470, "105SSSSS.AMR" }, + { 11, 0x00029A23, 0x002512, "115SSSSS.AMR" }, + { 11, 0x0002BF35, 0x0022E2, "116BSSSS.AMR" }, + { 11, 0x0002E217, 0x000DC6, "128SSSSS.AMR" }, + { 11, 0x0002EFDD, 0x000A94, "129SSSSS.AMR" }, + { 11, 0x0002FA71, 0x005208, "132SSSSS.AMR" }, + { 11, 0x00034C79, 0x00175A, "135SSSSS.AMR" }, + { 11, 0x000363D3, 0x0017B8, "137ASSSS.AMR" }, + { 11, 0x00037B8B, 0x005208, "138BSSSS.AMR" }, + { 11, 0x0003CD93, 0x005208, "138SSSSS.AMR" }, + { 11, 0x00041F9B, 0x001574, "18SSSSSS.AMR" }, + { 11, 0x0004350F, 0x001032, "27SSSSSS.AMR" }, + { 11, 0x00044541, 0x000C96, "3SSSSSSS.AMR" }, + { 11, 0x000451D7, 0x000964, "4SSSSSSS.AMR" }, + { 11, 0x00045B3B, 0x003D11, "55BSSSSS.AMR" }, + { 11, 0x0004984C, 0x00449A, "55SSSSSS.AMR" }, + { 11, 0x0004DCE6, 0x00519D, "56SSSSSS.AMR" }, + { 11, 0x00052E83, 0x0050CF, "61SSSSSS.AMR" }, + { 11, 0x00057F52, 0x005208, "70SSSSSS.AMR" }, + { 11, 0x0005D15A, 0x000F35, "71SSSSSS.AMR" }, + { 11, 0x0005E08F, 0x004402, "85SSSSSS.AMR" }, + { 11, 0x00062491, 0x005207, "88SSSSSS.AMR" }, + { 11, 0x00067698, 0x0050A2, "96SSSSSS.AMR" }, + { 11, 0x0006C73A, 0x004904, "97SSSSSS.AMR" }, + { 5, 0x00000000, 0x0040AF, "AMAZON.ACT" }, + { 3, 0x00000000, 0x0009CA, "AND1.DOG" }, + { 2, 0x00000000, 0x0034AB, "ANDERSON.ACT" }, + { 6, 0x00000000, 0x0034AB, "ANDSON2.ACT" }, + { 10, 0x00000000, 0x002FCD, "ANDSON_E.ACT" }, + { 4, 0x00000000, 0x004E3D, "APE.ACT" }, + { 4, 0x00004E3D, 0x0011D4, "APE.DOG" }, + { 5, 0x000040AF, 0x0008DA, "APE2.DOG" }, + { 5, 0x00004989, 0x000788, "APE3.DOG" }, + { 11, 0x0007103E, 0x007530, "AWESTRUK.INS" }, + { 11, 0x0007856E, 0x000C68, "AWESTRUK.SNG" }, + { 11, 0x000791D6, 0x004322, "AZURA.INS" }, + { 11, 0x0007D4F8, 0x0003A9, "AZURA.SNG" }, + { 10, 0x00002FCD, 0x0029C5, "AZURA_E.ACT" }, + { 6, 0x000034AB, 0x0052F2, "AZURA_H.ACT" }, + { 6, 0x0000879D, 0x00B73A, "AZURA_H.BBK" }, + { 6, 0x00013ED7, 0x006CE8, "AZURA_H.LBM" }, + { 6, 0x0001ABBF, 0x003611, "B1.BBK" }, + { 6, 0x0001E1D0, 0x00AF2C, "B1.LBM" }, + { 4, 0x00006011, 0x0025E8, "B2.BBK" }, + { 4, 0x000085F9, 0x00618E, "B2.LBM" }, + { 5, 0x00005111, 0x0034D2, "BAT.SAM" }, + { 5, 0x000085E3, 0x000470, "BEETLE.ACT" }, + { 1, 0x00000000, 0x0012CD, "BIGAM.ACT" }, + { 9, 0x00000000, 0x000148, "BLUEP.CUT" }, + { 11, 0x0007D8A1, 0x007530, "BOB.INS" }, + { 11, 0x00084DD1, 0x000960, "BOB.SNG" }, + { 4, 0x0000E787, 0x0010BC, "BOB1.DOG" }, + { 4, 0x0000F843, 0x000E5A, "BOB2.DOG" }, + { 11, 0x00085731, 0x000DF8, "BOB3.DOG" }, + { 4, 0x0001069D, 0x000DEA, "BOB4.DOG" }, + { 4, 0x00011487, 0x000BF0, "BOB5.DOG" }, + { 5, 0x00008A53, 0x002C93, "BUD.ACT" }, + { 5, 0x0000B6E6, 0x00129C, "BUD1.DOG" }, + { 5, 0x0000C982, 0x000C0E, "BUD2.DOG" }, + { 4, 0x00012077, 0x001BCF, "C1.BBK" }, + { 4, 0x00013C46, 0x003DC0, "C1.LBM" }, + { 3, 0x000009CA, 0x00D81F, "C10.BBK" }, + { 3, 0x0000E1E9, 0x006948, "C10.LBM" }, + { 7, 0x00000000, 0x0003BE, "C100A.CUT" }, + { 7, 0x000003BE, 0x000346, "C100B.CUT" }, + { 7, 0x00000704, 0x00019A, "C100C.CUT" }, + { 7, 0x0000089E, 0x000774, "C100D.CUT" }, + { 8, 0x00000000, 0x00021A, "C101A.CUT" }, + { 8, 0x0000021A, 0x0000E6, "C101B.CUT" }, + { 8, 0x00000300, 0x000200, "C101C.CUT" }, + { 8, 0x00000500, 0x000144, "C101D.CUT" }, + { 8, 0x00000644, 0x000144, "C101E.CUT" }, + { 9, 0x00000148, 0x00040E, "C102A.CUT" }, + { 9, 0x00000556, 0x00040E, "C102B.CUT" }, + { 9, 0x00000964, 0x00047E, "C102C.CUT" }, + { 9, 0x00000DE2, 0x0003B8, "C102D.CUT" }, + { 9, 0x0000119A, 0x00037E, "C102E.CUT" }, + { 5, 0x0000D590, 0x0000B4, "C103A.CUT" }, + { 5, 0x0000D644, 0x000104, "C103B.CUT" }, + { 5, 0x0000D748, 0x000090, "C103C.CUT" }, + { 5, 0x0000D7D8, 0x000070, "C103D.CUT" }, + { 5, 0x0000D848, 0x0000DA, "C103E.CUT" }, + { 5, 0x0000D922, 0x00084A, "C103F.CUT" }, + { 5, 0x0000E16C, 0x00068E, "C103G.CUT" }, + { 5, 0x0000E7FA, 0x0003BE, "C103H.CUT" }, + { 5, 0x0000EBB8, 0x0001F2, "C103I.CUT" }, + { 5, 0x0000EDAA, 0x00041C, "C103J.CUT" }, + { 5, 0x0000F1C6, 0x00016A, "C103K.CUT" }, + { 5, 0x0000F330, 0x000458, "C103L.CUT" }, + { 2, 0x000034AB, 0x003DF0, "C11.BBK" }, + { 2, 0x0000729B, 0x0052C8, "C11.LBM" }, + { 6, 0x000290FC, 0x000346, "C11A.CUT" }, + { 5, 0x0000F788, 0x0004D0, "C12A.CUT" }, + { 6, 0x00029442, 0x000164, "C13A.CUT" }, + { 6, 0x000295A6, 0x00016C, "C13B.CUT" }, + { 6, 0x00029712, 0x0001FA, "C13C.CUT" }, + { 6, 0x0002990C, 0x000174, "C13D.CUT" }, + { 6, 0x00029A80, 0x0001D0, "C13E.CUT" }, + { 6, 0x00029C50, 0x0002D6, "C13F.CUT" }, + { 6, 0x00029F26, 0x000152, "C13G.CUT" }, + { 6, 0x0002A078, 0x000116, "C13H.CUT" }, + { 6, 0x0002A18E, 0x000080, "C13I.CUT" }, + { 6, 0x0002A20E, 0x000272, "C13J.CUT" }, + { 6, 0x0002A480, 0x000192, "C13K.CUT" }, + { 6, 0x0002A612, 0x0001DC, "C13L.CUT" }, + { 6, 0x0002A7EE, 0x000468, "C13M.CUT" }, + { 6, 0x0002AC56, 0x00015E, "C13N.CUT" }, + { 5, 0x0000FC58, 0x0002FE, "C14A.CUT" }, + { 5, 0x0000FF56, 0x000126, "C14B.CUT" }, + { 5, 0x0001007C, 0x000150, "C14C.CUT" }, + { 5, 0x000101CC, 0x000108, "C14D.CUT" }, + { 5, 0x000102D4, 0x000264, "C15A.CUT" }, + { 5, 0x00010538, 0x000136, "C15B.CUT" }, + { 5, 0x0001066E, 0x000380, "C15C.CUT" }, + { 5, 0x000109EE, 0x0002D2, "C15D.CUT" }, + { 5, 0x00010CC0, 0x0000F4, "C15E.CUT" }, + { 5, 0x00010DB4, 0x0005D6, "C16A.CUT" }, + { 5, 0x0001138A, 0x00057E, "C16B.CUT" }, + { 1, 0x000012CD, 0x000156, "C17A.CUT" }, + { 5, 0x00011908, 0x000A60, "C18A.CUT" }, + { 5, 0x00012368, 0x0012B8, "C18B.CUT" }, + { 5, 0x00013620, 0x001202, "C18C.CUT" }, + { 5, 0x00014822, 0x0009FA, "C18D.CUT" }, + { 5, 0x0001521C, 0x0009E4, "C18E.CUT" }, + { 5, 0x00015C00, 0x001076, "C19A.CUT" }, + { 5, 0x00016C76, 0x00015C, "C19B.CUT" }, + { 4, 0x00017A06, 0x00034E, "C1A.CUT" }, + { 4, 0x00017D54, 0x00366A, "C2.BBK" }, + { 4, 0x0001B3BE, 0x0065A8, "C2.LBM" }, + { 4, 0x00021966, 0x00468A, "C2.SAM" }, + { 6, 0x0002ADB4, 0x000500, "C20A.CUT" }, + { 6, 0x0002B2B4, 0x000168, "C20B.CUT" }, + { 6, 0x0002B41C, 0x000170, "C20C.CUT" }, + { 6, 0x0002B58C, 0x000388, "C20D.CUT" }, + { 6, 0x0002B914, 0x000394, "C20E.CUT" }, + { 6, 0x0002BCA8, 0x00073A, "C20F.CUT" }, + { 6, 0x0002C3E2, 0x00029C, "C20G.CUT" }, + { 4, 0x00025FF0, 0x0000DA, "C21A.CUT" }, + { 4, 0x000260CA, 0x0000EE, "C21B.CUT" }, + { 4, 0x000261B8, 0x00025E, "C21C.CUT" }, + { 4, 0x00026416, 0x0002EC, "C21D.CUT" }, + { 4, 0x00026702, 0x000602, "C21E.CUT" }, + { 4, 0x00026D04, 0x0003E2, "C21F.CUT" }, + { 4, 0x000270E6, 0x000136, "C21G.CUT" }, + { 4, 0x0002721C, 0x000172, "C21H.CUT" }, + { 4, 0x0002738E, 0x00024C, "C21I.CUT" }, + { 4, 0x000275DA, 0x000122, "C21J.CUT" }, + { 4, 0x000276FC, 0x000584, "C21K.CUT" }, + { 4, 0x00027C80, 0x000522, "C21L.CUT" }, + { 4, 0x000281A2, 0x0001EA, "C21M.CUT" }, + { 4, 0x0002838C, 0x000610, "C21N.CUT" }, + { 4, 0x0002899C, 0x0000F4, "C21O.CUT" }, + { 4, 0x00028A90, 0x000150, "C21P.CUT" }, + { 4, 0x00028BE0, 0x0002EC, "C21Q.CUT" }, + { 4, 0x00028ECC, 0x000106, "C21R.CUT" }, + { 4, 0x00028FD2, 0x00012A, "C21S.CUT" }, + { 4, 0x000290FC, 0x00015E, "C21T.CUT" }, + { 4, 0x0002925A, 0x0000C6, "C21U.CUT" }, + { 5, 0x00016DD2, 0x000156, "C22A.CUT" }, + { 5, 0x00016F28, 0x0000FC, "C22B.CUT" }, + { 5, 0x00017024, 0x000166, "C22C.CUT" }, + { 6, 0x0002C67E, 0x0000EC, "C24A.CUT" }, + { 6, 0x0002C76A, 0x0005CA, "C24B.CUT" }, + { 5, 0x0001718A, 0x0002D0, "C25A.CUT" }, + { 5, 0x0001745A, 0x0002E4, "C25B.CUT" }, + { 5, 0x0001773E, 0x00023E, "C25C.CUT" }, + { 5, 0x0001797C, 0x000182, "C25D.CUT" }, + { 5, 0x00017AFE, 0x000126, "C25E.CUT" }, + { 5, 0x00017C24, 0x00017C, "C25F.CUT" }, + { 5, 0x00017DA0, 0x0001E2, "C25G.CUT" }, + { 5, 0x00017F82, 0x000218, "C25H.CUT" }, + { 5, 0x0001819A, 0x0001DA, "C25I.CUT" }, + { 5, 0x00018374, 0x00030E, "C26A.CUT" }, + { 5, 0x00018682, 0x0000BE, "C26B.CUT" }, + { 5, 0x00018740, 0x0001A4, "C26C.CUT" }, + { 4, 0x00029320, 0x0008D0, "C2A.CUT" }, + { 4, 0x00029BF0, 0x0004B8, "C2B.CUT" }, + { 4, 0x0002A0A8, 0x00023E, "C2C.CUT" }, + { 4, 0x0002A2E6, 0x0035E0, "C3.BBK" }, + { 4, 0x0002D8C6, 0x006CF4, "C3.LBM" }, + { 4, 0x000345BA, 0x004D3F, "C3.SAM" }, + { 6, 0x0002CD34, 0x000254, "C30A.CUT" }, + { 6, 0x0002CF88, 0x0003C4, "C30B.CUT" }, + { 6, 0x0002D34C, 0x000722, "C30C.CUT" }, + { 6, 0x0002DA6E, 0x000206, "C30D.CUT" }, + { 6, 0x0002DC74, 0x000976, "C30E.CUT" }, + { 6, 0x0002E5EA, 0x00010E, "C30F.CUT" }, + { 6, 0x0002E6F8, 0x0001E6, "C30G.CUT" }, + { 6, 0x0002E8DE, 0x00014C, "C30H.CUT" }, + { 6, 0x0002EA2A, 0x00020C, "C31A.CUT" }, + { 6, 0x0002EC36, 0x000596, "C31B.CUT" }, + { 6, 0x0002F1CC, 0x0000E2, "C31C.CUT" }, + { 6, 0x0002F2AE, 0x0004E4, "C31D.CUT" }, + { 6, 0x0002F792, 0x0000EE, "C31E.CUT" }, + { 6, 0x0002F880, 0x00010E, "C31F.CUT" }, + { 6, 0x0002F98E, 0x0000AC, "C32A.CUT" }, + { 6, 0x0002FA3A, 0x00010C, "C32B.CUT" }, + { 6, 0x0002FB46, 0x0000E8, "C32C.CUT" }, + { 4, 0x000392F9, 0x00042A, "C35A.CUT" }, + { 4, 0x00039723, 0x0001C0, "C35B.CUT" }, + { 8, 0x00000788, 0x00078C, "C36A.CUT" }, + { 3, 0x00014B31, 0x000ED4, "C39A.CUT" }, + { 4, 0x000398E3, 0x000610, "C3A.CUT" }, + { 4, 0x00039EF3, 0x0000A0, "C3B.CUT" }, + { 4, 0x00039F93, 0x0005D8, "C3C.CUT" }, + { 4, 0x0003A56B, 0x000344, "C3D.CUT" }, + { 4, 0x0003A8AF, 0x00013A, "C3E.CUT" }, + { 4, 0x0003A9E9, 0x0000E0, "C3F.CUT" }, + { 4, 0x0003AAC9, 0x000102, "C3G.CUT" }, + { 4, 0x0003ABCB, 0x000120, "C3H.CUT" }, + { 1, 0x00001423, 0x00366F, "C4.BBK" }, + { 1, 0x00004A92, 0x0059E2, "C4.LBM" }, + { 1, 0x0000A474, 0x000F9B, "C4.SAM" }, + { 6, 0x0002FC2E, 0x00094A, "C40A.CUT" }, + { 6, 0x00030578, 0x0002C2, "C40B.CUT" }, + { 4, 0x0003ACEB, 0x000B84, "C41A.CUT" }, + { 4, 0x0003B86F, 0x001BA0, "C41B.CUT" }, + { 4, 0x0003D40F, 0x000170, "C41C.CUT" }, + { 4, 0x0003D57F, 0x00025C, "C41D.CUT" }, + { 4, 0x0003D7DB, 0x0001B8, "C41E.CUT" }, + { 4, 0x0003D993, 0x00009C, "C41F.CUT" }, + { 4, 0x0003DA2F, 0x0000FE, "C41G.CUT" }, + { 4, 0x0003DB2D, 0x0000BA, "C41H.CUT" }, + { 6, 0x0003083A, 0x0003CE, "C42A.CUT" }, + { 6, 0x00030C08, 0x000802, "C42B.CUT" }, + { 6, 0x0003140A, 0x0001AE, "C42C.CUT" }, + { 6, 0x000315B8, 0x00010E, "C42D.CUT" }, + { 6, 0x000316C6, 0x000106, "C42E.CUT" }, + { 6, 0x000317CC, 0x000166, "C42F.CUT" }, + { 7, 0x00001012, 0x0004F8, "C44A.CUT" }, + { 7, 0x0000150A, 0x00079E, "C44B.CUT" }, + { 7, 0x00001CA8, 0x00030A, "C44C.CUT" }, + { 7, 0x00001FB2, 0x0000F8, "C45A.CUT" }, + { 7, 0x000020AA, 0x0000F8, "C45B.CUT" }, + { 7, 0x000021A2, 0x0000F8, "C45C.CUT" }, + { 7, 0x0000229A, 0x0000F8, "C45D.CUT" }, + { 7, 0x00002392, 0x000186, "C45E.CUT" }, + { 7, 0x00002518, 0x0000F8, "C46A.CUT" }, + { 7, 0x00002610, 0x0000F8, "C46B.CUT" }, + { 7, 0x00002708, 0x0000F8, "C46C.CUT" }, + { 7, 0x00002800, 0x0000F8, "C46D.CUT" }, + { 7, 0x000028F8, 0x000640, "C47A.CUT" }, + { 8, 0x00000F14, 0x000656, "C48A.CUT" }, + { 8, 0x0000156A, 0x000516, "C48C.CUT" }, + { 8, 0x00001A80, 0x000398, "C49B.CUT" }, + { 8, 0x00001E18, 0x000132, "C49C.CUT" }, + { 8, 0x00001F4A, 0x0004E4, "C49D.CUT" }, + { 1, 0x0000B40F, 0x000094, "C4A.CUT" }, + { 1, 0x0000B4A3, 0x0003F4, "C4B.CUT" }, + { 4, 0x0003DBE7, 0x002A0A, "C5.BBK" }, + { 4, 0x000405F1, 0x007016, "C5.LBM" }, + { 4, 0x00047607, 0x0018D3, "C5.SAM" }, + { 7, 0x00002F38, 0x0004F2, "C50A.CUT" }, + { 7, 0x0000342A, 0x0001F8, "C50B.CUT" }, + { 7, 0x00003622, 0x00086E, "C50C.CUT" }, + { 7, 0x00003E90, 0x0000E2, "C50D.CUT" }, + { 7, 0x00003F72, 0x000618, "C50E.CUT" }, + { 7, 0x0000458A, 0x0003B8, "C50F.CUT" }, + { 7, 0x00004942, 0x0008DA, "C50G.CUT" }, + { 7, 0x0000521C, 0x0000BA, "C50H.CUT" }, + { 7, 0x000052D6, 0x0009D4, "C50I.CUT" }, + { 7, 0x00005CAA, 0x0000F2, "C50J.CUT" }, + { 8, 0x0000242E, 0x00080E, "C51A.CUT" }, + { 8, 0x00002C3C, 0x0001D8, "C51B.CUT" }, + { 8, 0x00002E14, 0x0001D8, "C51C.CUT" }, + { 8, 0x00002FEC, 0x0000EC, "C51D.CUT" }, + { 8, 0x000030D8, 0x000566, "C53A.CUT" }, + { 8, 0x0000363E, 0x00018A, "C53B.CUT" }, + { 8, 0x000037C8, 0x00028C, "C54A.CUT" }, + { 8, 0x00003A54, 0x0006C8, "C55A.CUT" }, + { 8, 0x0000411C, 0x0003BA, "C56A.CUT" }, + { 8, 0x000044D6, 0x000678, "C56B.CUT" }, + { 8, 0x00004B4E, 0x0001CC, "C58A.CUT" }, + { 9, 0x00001518, 0x00014A, "C59A.CUT" }, + { 4, 0x00048EDA, 0x00040C, "C5A.CUT" }, + { 4, 0x000492E6, 0x00050C, "C5C.CUT" }, + { 4, 0x000497F2, 0x001C99, "C6.BBK" }, + { 4, 0x0004B48B, 0x0065FE, "C6.LBM" }, + { 4, 0x00051A89, 0x002C23, "C6.SAM" }, + { 9, 0x00001662, 0x000170, "C60A.CUT" }, + { 8, 0x00004D1A, 0x000170, "C61A.CUT" }, + { 9, 0x000017D2, 0x000DDE, "C62A.CUT" }, + { 9, 0x000025B0, 0x000268, "C62B.CUT" }, + { 9, 0x00002818, 0x000164, "C62C.CUT" }, + { 9, 0x0000297C, 0x0002A2, "C62D.CUT" }, + { 9, 0x00002C1E, 0x0002D0, "C63A.CUT" }, + { 9, 0x00002EEE, 0x00098E, "C63B.CUT" }, + { 9, 0x0000387C, 0x0005D8, "C63C.CUT" }, + { 9, 0x00003E54, 0x000194, "C63D.CUT" }, + { 9, 0x00003FE8, 0x000336, "C63E.CUT" }, + { 9, 0x0000431E, 0x00041A, "C63F.CUT" }, + { 9, 0x00004738, 0x000170, "C63G.CUT" }, + { 9, 0x000048A8, 0x00039A, "C63H.CUT" }, + { 9, 0x00004C42, 0x0003AC, "C63I.CUT" }, + { 9, 0x00004FEE, 0x0002F0, "C63J.CUT" }, + { 9, 0x000052DE, 0x000634, "C63K.CUT" }, + { 10, 0x00005992, 0x000128, "C64A.CUT" }, + { 10, 0x00005ABA, 0x0002E8, "C66A.CUT" }, + { 10, 0x00005DA2, 0x0005B6, "C67A.CUT" }, + { 10, 0x00006358, 0x00054C, "C67B.CUT" }, + { 10, 0x000068A4, 0x000700, "C69A.CUT" }, + { 10, 0x00006FA4, 0x000670, "C69B.CUT" }, + { 10, 0x00007614, 0x000688, "C69C.CUT" }, + { 10, 0x00007C9C, 0x0006AC, "C69D.CUT" }, + { 10, 0x00008348, 0x0009CC, "C69E.CUT" }, + { 10, 0x00008D14, 0x000AA2, "C69F.CUT" }, + { 10, 0x000097B6, 0x0019AC, "C69G.CUT" }, + { 10, 0x0000B162, 0x00075A, "C69H.CUT" }, + { 10, 0x0000B8BC, 0x0003F0, "C69I.CUT" }, + { 10, 0x0000BCAC, 0x00008A, "C69J.CUT" }, + { 10, 0x0000BD36, 0x0005C8, "C69K.CUT" }, + { 10, 0x0000C2FE, 0x00062A, "C69L.CUT" }, + { 10, 0x0000C928, 0x0005BA, "C69M.CUT" }, + { 10, 0x0000CEE2, 0x00012C, "C69N.CUT" }, + { 10, 0x0000D00E, 0x0001E4, "C69O.CUT" }, + { 10, 0x0000D1F2, 0x0017A4, "C69Z.CUT" }, + { 4, 0x000546AC, 0x000220, "C6A.CUT" }, + { 4, 0x000548CC, 0x0000DA, "C6B.CUT" }, + { 4, 0x000549A6, 0x000138, "C6C.CUT" }, + { 2, 0x0000C563, 0x004E4E, "C7.BBK" }, + { 2, 0x000113B1, 0x004CC0, "C7.LBM" }, + { 2, 0x00016071, 0x0002B8, "C70A.CUT" }, + { 2, 0x00016329, 0x000384, "C70B.CUT" }, + { 2, 0x000166AD, 0x005006, "C70B.SAM" }, + { 2, 0x0001B6B3, 0x000292, "C70C.CUT" }, + { 2, 0x0001B945, 0x000952, "C70D.CUT" }, + { 2, 0x0001C297, 0x00038C, "C70E.CUT" }, + { 2, 0x0001C623, 0x00034C, "C70F.CUT" }, + { 2, 0x0001C96F, 0x00356B, "C70F.SAM" }, + { 2, 0x0001FEDA, 0x000348, "C70G.CUT" }, + { 2, 0x00020222, 0x0054B7, "C70G.SAM" }, + { 2, 0x000256D9, 0x000322, "C70H.CUT" }, + { 2, 0x000259FB, 0x0003D8, "C70I.CUT" }, + { 2, 0x00025DD3, 0x000184, "C70J.CUT" }, + { 2, 0x00025F57, 0x0002C0, "C70K.CUT" }, + { 2, 0x00026217, 0x0002C0, "C70L.CUT" }, + { 2, 0x000264D7, 0x0002BA, "C70M.CUT" }, + { 2, 0x00026791, 0x0002BA, "C70N.CUT" }, + { 3, 0x00015A05, 0x000094, "C71A.CUT" }, + { 3, 0x00015A99, 0x000094, "C71B.CUT" }, + { 3, 0x00015B2D, 0x0000B2, "C71C.CUT" }, + { 3, 0x00015BDF, 0x000730, "C72A.CUT" }, + { 3, 0x0001630F, 0x000632, "C72B.CUT" }, + { 3, 0x00016941, 0x00007C, "C72C.CUT" }, + { 2, 0x00026A4B, 0x00038A, "C73A.CUT" }, + { 2, 0x00026DD5, 0x0002B8, "C73B.CUT" }, + { 2, 0x0002708D, 0x000192, "C73C.CUT" }, + { 2, 0x0002721F, 0x0000C8, "C73D.CUT" }, + { 2, 0x000272E7, 0x000330, "C73E.CUT" }, + { 2, 0x00027617, 0x000344, "C73F.CUT" }, + { 2, 0x0002795B, 0x000210, "C73G.CUT" }, + { 3, 0x000169BD, 0x00075E, "C74A.CUT" }, + { 3, 0x0001711B, 0x00018C, "C74B.CUT" }, + { 3, 0x000172A7, 0x0001DC, "C74C.CUT" }, + { 3, 0x00017483, 0x00018C, "C74D.CUT" }, + { 3, 0x0001760F, 0x0000E0, "C74F.CUT" }, + { 3, 0x000176EF, 0x000D00, "C75B.CUT" }, + { 4, 0x00054ADE, 0x000072, "C76A.CUT" }, + { 4, 0x00054B50, 0x000F28, "C76B.CUT" }, + { 2, 0x00027B6B, 0x005173, "C8.BBK" }, + { 2, 0x0002CCDE, 0x0060D0, "C8.LBM" }, + { 5, 0x000188E4, 0x0007E4, "C8A.CUT" }, + { 5, 0x000190C8, 0x0002A8, "C8B.CUT" }, + { 2, 0x00032DAE, 0x004969, "C9.BBK" }, + { 2, 0x00037717, 0x003DBE, "C9.LBM" }, + { 7, 0x00005D9C, 0x00017E, "C97A.CUT" }, + { 8, 0x00004E8A, 0x00013C, "C97B.CUT" }, + { 7, 0x00005F1A, 0x000094, "C99D.CUT" }, + { 7, 0x00005FAE, 0x0002E6, "C99E.CUT" }, + { 7, 0x00006294, 0x0002E6, "C99F.CUT" }, + { 5, 0x00019370, 0x0001FA, "C9A.CUT" }, + { 5, 0x0001956A, 0x0000F8, "C9B.CUT" }, + { 5, 0x00019662, 0x000136, "C9C.CUT" }, + { 5, 0x00019798, 0x0000A0, "C9D.CUT" }, + { 3, 0x000183EF, 0x0001F6, "CDCLO.CUT" }, + { 3, 0x000185E5, 0x0001F6, "CDRES.CUT" }, + { 3, 0x000187DB, 0x0035B2, "CHANGE.SAM" }, + { 3, 0x0001BD8D, 0x0035B2, "CHANGE2.SAM" }, + { 5, 0x00019838, 0x002872, "CHEF.ACT" }, + { 5, 0x0001C0AA, 0x000AF0, "CHEF.DOG" }, + { 4, 0x00055A78, 0x0009CA, "CHIEF1.DOG" }, + { 4, 0x00056442, 0x00121E, "CHIEF2.DOG" }, + { 4, 0x00057660, 0x000BE4, "CHIEF3.DOG" }, + { 4, 0x00058244, 0x0002C4, "CHIEF4.DOG" }, + { 10, 0x0000E996, 0x00034A, "CHORN.CUT" }, + { 2, 0x0003B4D5, 0x0000AA, "CLOGO.CUT" }, + { 8, 0x00004FC6, 0x000386, "CMASK.CUT" }, + { 9, 0x00005912, 0x0003D8, "COCON.CUT" }, + { 9, 0x00005CEA, 0x004EB5, "COCONUT.SAM" }, + { 9, 0x0000AB9F, 0x00094E, "COMIC.CUT" }, + { 10, 0x0000ECE0, 0x001BFB, "COMPY.ACT" }, + { 2, 0x0003B57F, 0x000086, "COPY.CUT" }, + { 2, 0x0003B605, 0x00521E, "COPY.LBM" }, + { 2, 0x00040823, 0x0003AE, "CRED.CUT" }, + { 2, 0x00040BD1, 0x000604, "CREDIT1.CRD" }, + { 1, 0x0000B897, 0x0010D3, "CREDIT2.CRD" }, + { 2, 0x000411D5, 0x003D02, "CROWBAR.SAM" }, + { 3, 0x0001F33F, 0x0001F6, "CUDRS.CUT" }, + { 2, 0x00044ED7, 0x003F22, "D1.BBK" }, + { 2, 0x00048DF9, 0x0068D2, "D1.LBM" }, + { 2, 0x0004F6CB, 0x00674C, "D1C.SAM" }, + { 3, 0x0001F535, 0x002D36, "D2.BBK" }, + { 3, 0x0002226B, 0x006662, "D2.LBM" }, + { 3, 0x000288CD, 0x003058, "D3.BBK" }, + { 3, 0x0002B925, 0x0061B4, "D3.LBM" }, + { 3, 0x00031AD9, 0x00426E, "D3.SAM" }, + { 2, 0x00055E17, 0x00BD80, "D4.BBK" }, + { 2, 0x00061B97, 0x008352, "D4.LBM" }, + { 3, 0x00035D47, 0x004962, "D5.BBK" }, + { 3, 0x0003A6A9, 0x0041D2, "D5.LBM" }, + { 3, 0x0003E87B, 0x0015AE, "D5.SAM" }, + { 3, 0x0003FE29, 0x001133, "D5B.SAM" }, + { 3, 0x00040F5C, 0x005527, "D6.BBK" }, + { 3, 0x00046483, 0x0062CA, "D6.LBM" }, + { 2, 0x00069EE9, 0x00651C, "D9.BBK" }, + { 2, 0x00070405, 0x008E56, "D9.LBM" }, + { 6, 0x00031932, 0x004A01, "DEATH.ACT" }, + { 6, 0x00036333, 0x0017CA, "DEATH1.DOG" }, + { 6, 0x00037AFD, 0x00081E, "DEATH2.DOG" }, + { 10, 0x000108DB, 0x003997, "DEINO.ACT" }, + { 1, 0x0000C96A, 0x002347, "DFRANK.ACT" }, + { 8, 0x0000534C, 0x001331, "DISK1.SAM" }, + { 5, 0x0001CB9A, 0x001317, "DOG.ACT" }, + { 5, 0x0001DEB1, 0x00023A, "DOG.DOG" }, + { 10, 0x00014272, 0x00A603, "E1.BBK" }, + { 10, 0x0001E875, 0x00A3EA, "E1.LBM" }, + { 1, 0x0000ECB1, 0x004E56, "E2.BBK" }, + { 1, 0x00013B07, 0x0033DC, "E2.LBM" }, + { 1, 0x00016EE3, 0x007AC5, "E3.BBK" }, + { 1, 0x0001E9A8, 0x0025FC, "E3.LBM" }, + { 5, 0x0001E0EB, 0x002F58, "F1.BBK" }, + { 5, 0x00021043, 0x005616, "F1.LBM" }, + { 5, 0x00026659, 0x005FCB, "F1.SAM" }, + { 5, 0x0002C624, 0x00435D, "F2.BBK" }, + { 5, 0x00030981, 0x0058F6, "F2.LBM" }, + { 5, 0x00036277, 0x001AE5, "F3.BBK" }, + { 5, 0x00037D5C, 0x007DFA, "F3.LBM" }, + { 5, 0x0003FB56, 0x0051C2, "F3.SAM" }, + { 1, 0x00020FA4, 0x006A7A, "F4.BBK" }, + { 1, 0x00027A1E, 0x00AE2E, "F4.LBM" }, + { 7, 0x0000657A, 0x00430D, "FALL.SAM" }, + { 4, 0x00058508, 0x008665, "FAYE.ACT" }, + { 4, 0x00060B6D, 0x00098E, "FAYE2.DOG" }, + { 10, 0x00028C5F, 0x0005D8, "FAYE3.DOG" }, + { 5, 0x00044D18, 0x000C40, "FAYE4.DOG" }, + { 4, 0x000614FB, 0x00007A, "FAYE5.CUT" }, + { 4, 0x00061575, 0x0009CE, "FAYE5.DOG" }, + { 10, 0x00029237, 0x000466, "FAYE6.DOG" }, + { 10, 0x0002969D, 0x001D45, "FAYE_E.ACT" }, + { 4, 0x00061F43, 0x004B04, "FAYE_H.ACT" }, + { 4, 0x00066A47, 0x006B19, "FAYE_H.BBK" }, + { 4, 0x0006D560, 0x005B76, "FAYE_H.LBM" }, + { 1, 0x0003284C, 0x0008D8, "FISH.ACT" }, + { 11, 0x00086529, 0x007530, "FLODA.INS" }, + { 11, 0x0008DA59, 0x000B9F, "FLODA.SNG" }, + { 11, 0x0008E5F8, 0x007530, "FORT.INS" }, + { 11, 0x00095B28, 0x000951, "FORT.SNG" }, + { 3, 0x0004C74D, 0x004947, "FRANK.ACT" }, + { 9, 0x0000B4ED, 0x000E48, "FRANK.DOG" }, + { 11, 0x00096479, 0x007530, "FRANK.INS" }, + { 11, 0x0009D9A9, 0x000B05, "FRANK.SNG" }, + { 3, 0x00051094, 0x007C6F, "FRANK_H.ACT" }, + { 3, 0x00058D03, 0x0089E1, "FRANK_H.BBK" }, + { 3, 0x000616E4, 0x002EA6, "FRANK_H.LBM" }, + { 8, 0x0000667D, 0x00397D, "GET_GEM.SAM" }, + { 6, 0x0003831B, 0x00277B, "GET_HORN.SAM" }, + { 7, 0x0000A887, 0x00009C, "GM.CUT" }, + { 3, 0x0006458A, 0x002A12, "GOONS.ACT" }, + { 6, 0x0003AA96, 0x00230E, "GUARDS.ACT" }, + { 3, 0x00066F9C, 0x004C0B, "HENRY.ACT" }, + { 6, 0x0003CDA4, 0x001280, "HENRY.DOG" }, + { 6, 0x0003E024, 0x000B24, "HENRY2.DOG" }, + { 10, 0x0002B3E2, 0x002615, "HORN.SAM" }, + { 2, 0x0007925B, 0x007530, "HOTEL.INS" }, + { 2, 0x0008078B, 0x000BAE, "HOTEL.SNG" }, + { 7, 0x0000A923, 0x00462D, "IAN.ACT" }, + { 7, 0x0000EF50, 0x000518, "IAN1.DOG" }, + { 8, 0x00009FFA, 0x000A9A, "IAN2.DOG" }, + { 5, 0x00045958, 0x00168F, "J1.BBK" }, + { 5, 0x00046FE7, 0x005EF0, "J1.LBM" }, + { 5, 0x0004CED7, 0x0042C2, "J1.SAM" }, + { 5, 0x00051199, 0x000B2F, "J2.BBK" }, + { 5, 0x00051CC8, 0x0060AA, "J2.LBM" }, + { 5, 0x00057D72, 0x003D7E, "J2.SAM" }, + { 5, 0x0005BAF0, 0x0019FB, "J3.BBK" }, + { 5, 0x0005D4EB, 0x006CF0, "J3.LBM" }, + { 5, 0x000641DB, 0x002CB6, "J4.BBK" }, + { 5, 0x00066E91, 0x0062DC, "J4.LBM" }, + { 5, 0x0006D16D, 0x003094, "J5.BBK" }, + { 5, 0x00070201, 0x006280, "J5.LBM" }, + { 5, 0x00076481, 0x0019AB, "J5.SAM" }, + { 6, 0x0003EB48, 0x002539, "J6.BBK" }, + { 6, 0x00041081, 0x006576, "J6.LBM" }, + { 5, 0x00077E2C, 0x001ED4, "J7.BBK" }, + { 5, 0x00079D00, 0x005848, "J7.LBM" }, + { 5, 0x0007F548, 0x00461B, "J7.SAM" }, + { 5, 0x00083B63, 0x001D7F, "J8.BBK" }, + { 5, 0x000858E2, 0x005D2E, "J8.LBM" }, + { 5, 0x0008B610, 0x00028C, "J8.SAM" }, + { 7, 0x0000F468, 0x001D40, "JASPAR.ACT" }, + { 6, 0x000475F7, 0x001276, "JIM1.DOG" }, + { 6, 0x0004886D, 0x001282, "JIM2.DOG" }, + { 6, 0x00049AEF, 0x000DF6, "JIM3.DOG" }, + { 6, 0x0004A8E5, 0x004159, "JIMTAM.ACT" }, + { 3, 0x0006BBA7, 0x004371, "JOED_A.BBK" }, + { 3, 0x0006FF18, 0x0048A5, "JOED_B.BBK" }, + { 2, 0x00081339, 0x003F8D, "JOEU_A.BBK" }, + { 2, 0x000852C6, 0x004179, "JOEU_B.BBK" }, + { 2, 0x0008943F, 0x003553, "JOE_A.BBK" }, + { 2, 0x0008C992, 0x00562B, "JOE_B.BBK" }, + { 10, 0x0002D9F7, 0x00241F, "JOE_E.ACT" }, + { 6, 0x0004EA3E, 0x002D76, "JOHN.ACT" }, + { 6, 0x000517B4, 0x00067C, "JOHN1.DOG" }, + { 11, 0x0009E4AE, 0x005770, "JOURNAL.BBK" }, + { 11, 0x000A3C1E, 0x0059DC, "JOURNAL.LBM" }, + { 11, 0x000A95FA, 0x007530, "JUNG.INS" }, + { 11, 0x000B0B2A, 0x0007EF, "JUNG.SNG" }, + { 11, 0x000B1319, 0x007530, "JUNGLE.INS" }, + { 11, 0x000B8849, 0x000F60, "JUNGLE.SNG" }, + { 6, 0x00051E30, 0x006623, "KISS1.SAM" }, + { 6, 0x00058453, 0x003066, "KLUNK.ACT" }, + { 9, 0x0000C335, 0x000E6A, "KLUNK1.DOG" }, + { 9, 0x0000D19F, 0x000ED0, "KLUNK2.DOG" }, + { 8, 0x0000AA94, 0x008966, "KLUNK2.SAM" }, + { 2, 0x00091FBD, 0x003F78, "L1.LBM" }, + { 3, 0x000747BD, 0x001784, "LARIS.ACT" }, + { 3, 0x00075F41, 0x000F32, "LARIS.DOG" }, + { 3, 0x00076E73, 0x00079A, "LARIS3.DOG" }, + { 1, 0x00033124, 0x000167, "LITTLEP.ACT" }, + { 3, 0x0007760D, 0x00837C, "LOLA.ACT" }, + { 3, 0x0007F989, 0x000AD6, "LOLA1.DOG" }, + { 5, 0x0008B89C, 0x00242F, "LOU.ACT" }, + { 5, 0x0008DCCB, 0x0010AC, "LOU1.DOG" }, + { 5, 0x0008ED77, 0x000BAE, "LOU2.DOG" }, + { 4, 0x000730D6, 0x0050AA, "M1.BBK" }, + { 4, 0x00078180, 0x00DBE4, "M1.LBM" }, + { 4, 0x00085D64, 0x000FDC, "M2.BBK" }, + { 4, 0x00086D40, 0x004988, "M2.LBM" }, + { 4, 0x0008B6C8, 0x0011E8, "M2.SAM" }, + { 5, 0x0008F925, 0x00101E, "MAN1.DOG" }, + { 5, 0x00090943, 0x0007A4, "MAN2.DOG" }, + { 8, 0x000133FA, 0x0032CC, "MASK.SAM" }, + { 5, 0x000910E7, 0x0028EC, "N1.BBK" }, + { 5, 0x000939D3, 0x005D0E, "N1.LBM" }, + { 9, 0x0000E06F, 0x00BB63, "N10.BBK" }, + { 9, 0x00019BD2, 0x004CB6, "N10.LBM" }, + { 9, 0x0001E888, 0x00BB63, "N10.SAM" }, + { 8, 0x000166C6, 0x000DFB, "N11.BBK" }, + { 8, 0x000174C1, 0x005224, "N11.LBM" }, + { 6, 0x0005B4B9, 0x002D7B, "N12.BBK" }, + { 6, 0x0005E234, 0x00612A, "N12.LBM" }, + { 4, 0x0008C8B0, 0x003C1D, "N13.BBK" }, + { 4, 0x000904CD, 0x004C04, "N13.LBM" }, + { 4, 0x000950D1, 0x010C58, "N13.SAM" }, + { 4, 0x000A5D29, 0x000F2A, "N13B.SAM" }, + { 3, 0x0008045F, 0x0049BD, "N14.BBK" }, + { 3, 0x00084E1C, 0x006D24, "N14.LBM" }, + { 3, 0x0008BB40, 0x012049, "N14.SAM" }, + { 9, 0x0002A3EB, 0x006E4E, "N15.LBM" }, + { 6, 0x0006435E, 0x000C55, "N16.BBK" }, + { 6, 0x00064FB3, 0x006EF0, "N16.LBM" }, + { 6, 0x0006BEA3, 0x004CE4, "N2.BBK" }, + { 6, 0x00070B87, 0x004568, "N2.LBM" }, + { 5, 0x000996E1, 0x00392C, "N3.BBK" }, + { 5, 0x0009D00D, 0x0052B0, "N3.LBM" }, + { 5, 0x000A22BD, 0x006794, "N4.BBK" }, + { 5, 0x000A8A51, 0x005438, "N4.LBM" }, + { 5, 0x000ADE89, 0x0017C3, "N5.BBK" }, + { 5, 0x000AF64C, 0x006488, "N5.LBM" }, + { 6, 0x000750EF, 0x0016BC, "N6.BBK" }, + { 6, 0x000767AB, 0x0054D6, "N6.LBM" }, + { 4, 0x000A6C53, 0x001BEA, "N7.BBK" }, + { 4, 0x000A883D, 0x006908, "N7.LBM" }, + { 6, 0x0007BC81, 0x006373, "N8.BBK" }, + { 6, 0x00081FF4, 0x0048FE, "N8.LBM" }, + { 6, 0x000868F2, 0x009280, "N9.BBK" }, + { 6, 0x0008FB72, 0x0062A4, "N9.LBM" }, + { 6, 0x00095E16, 0x0065F1, "N9.SAM" }, + { 4, 0x000AF145, 0x0013B6, "NAOMI.DOG" }, + { 4, 0x000B04FB, 0x000A40, "NAOMI2.DOG" }, + { 2, 0x00095F35, 0x00F186, "OBJECTS.BBK" }, + { 7, 0x000111A8, 0x001DAB, "ORACLE.ACT" }, + { 7, 0x00012F53, 0x001088, "ORACLE1.DOG" }, + { 9, 0x00031239, 0x0003C0, "ORACLE2.DOG" }, + { 9, 0x000315F9, 0x000806, "ORACLE3.DOG" }, + { 2, 0x000A50BB, 0x001BD6, "PANEL.LBM" }, + { 5, 0x000B5AD4, 0x00007A, "PRIN1.CUT" }, + { 6, 0x0009C407, 0x000AEA, "PRIN1.DOG" }, + { 6, 0x0009CEF1, 0x00055A, "PRIN2.DOG" }, + { 6, 0x0009D44B, 0x000720, "PRIN4.DOG" }, + { 5, 0x000B5B4E, 0x006249, "PRINCESS.ACT" }, + { 4, 0x000B0F3B, 0x00387F, "PRISON.ACT" }, + { 3, 0x0009DB89, 0x003077, "PUNCH.SAM" }, + { 6, 0x0009DB6B, 0x003FEF, "PUSH.SAM" }, + { 4, 0x000B47BA, 0x007E55, "PYGMY.ACT" }, + { 1, 0x0003328B, 0x01371A, "QUEEN.JAS" }, + { 1, 0x000469A5, 0x008C00, "QUEEN2.JAS" }, + { 9, 0x00031DFF, 0x00815C, "R1.LBM" }, + { 9, 0x00039F5B, 0x007BF8, "R2.LBM" }, + { 9, 0x00041B53, 0x0081D6, "R3.LBM" }, + { 9, 0x00049D29, 0x005B40, "R4.LBM" }, + { 6, 0x000A1B5A, 0x0023E0, "RASH.SAM" }, + { 2, 0x000A6C91, 0x003B80, "RENEGADE.LBM" }, + { 11, 0x000B97A9, 0x007530, "ROBOT.INS" }, + { 11, 0x000C0CD9, 0x000C2A, "ROBOT.SNG" }, + { 9, 0x0004F869, 0x00817C, "ROCKET.INS" }, + { 9, 0x000579E5, 0x008FCC, "ROCKET.SAM" }, + { 9, 0x000609B1, 0x0004D9, "ROCKET.SNG" }, + { 5, 0x000BBD97, 0x003150, "SEC.ACT" }, + { 5, 0x000BEEE7, 0x001672, "SEC1.DOG" }, + { 5, 0x000C0559, 0x000944, "SEC2.DOG" }, + { 2, 0x000AA811, 0x00526D, "SHEET.SAM" }, + { 1, 0x0004F5A5, 0x00394C, "SHOWER.ACT" }, + { 1, 0x00052EF1, 0x0005FC, "SHOWERAM.DOG" }, + { 5, 0x000C0E9D, 0x0020BB, "SKULL.ACT" }, + { 3, 0x000A0C00, 0x007592, "SPARKY.ACT" }, + { 4, 0x000BC60F, 0x000986, "SPARKY1.DOG" }, + { 4, 0x000BCF95, 0x000402, "SPARKY2.DOG" }, + { 4, 0x000BD397, 0x00126E, "SPARKY3.DOG" }, + { 4, 0x000BE605, 0x00043A, "SPARKY4.DOG" }, + { 4, 0x000BEA3F, 0x00091C, "SPARKY5.DOG" }, + { 4, 0x000BF35B, 0x0007B6, "SPARKY6.DOG" }, + { 4, 0x000BFB11, 0x00095E, "SPARKY7.DOG" }, + { 4, 0x000C046F, 0x00072A, "SPARKY8.DOG" }, + { 6, 0x000A3F3A, 0x00805A, "T1.BBK" }, + { 6, 0x000ABF94, 0x0044F4, "T1.LBM" }, + { 6, 0x000B0488, 0x00273F, "T1.SAM" }, + { 8, 0x0001C6E5, 0x0073A0, "T10.BBK" }, + { 8, 0x00023A85, 0x00B412, "T10.LBM" }, + { 8, 0x0002EE97, 0x003B30, "T10.SAM" }, + { 8, 0x000329C7, 0x0016D5, "T11.BBK" }, + { 8, 0x0003409C, 0x005AD8, "T11.LBM" }, + { 8, 0x00039B74, 0x003DD2, "T12.BBK" }, + { 8, 0x0003D946, 0x004BB8, "T12.LBM" }, + { 8, 0x000424FE, 0x005160, "T12.SAM" }, + { 8, 0x0004765E, 0x002F84, "T13.BBK" }, + { 8, 0x0004A5E2, 0x006446, "T13.LBM" }, + { 8, 0x00050A28, 0x001F7B, "T14.BBK" }, + { 8, 0x000529A3, 0x0059CA, "T14.LBM" }, + { 8, 0x0005836D, 0x007DA0, "T14.SAM" }, + { 8, 0x0006010D, 0x007EA9, "T15.BBK" }, + { 8, 0x00067FB6, 0x005502, "T15.LBM" }, + { 8, 0x0006D4B8, 0x0058D4, "T15.SAM" }, + { 8, 0x00072D8C, 0x009EFD, "T15B.SAM" }, + { 8, 0x0007CC89, 0x001856, "T16.BBK" }, + { 8, 0x0007E4DF, 0x00503C, "T16.LBM" }, + { 8, 0x0008351B, 0x0044EB, "T17.BBK" }, + { 8, 0x00087A06, 0x0057BE, "T17.LBM" }, + { 9, 0x00060E8A, 0x00488F, "T18.BBK" }, + { 9, 0x00065719, 0x0056DA, "T18.LBM" }, + { 9, 0x0006ADF3, 0x007073, "T19.BBK" }, + { 9, 0x00071E66, 0x005BCE, "T19.LBM" }, + { 9, 0x00077A34, 0x00C569, "T19.SAM" }, + { 9, 0x00083F9D, 0x005431, "T1B.SAM" }, + { 7, 0x00013FDB, 0x00206A, "T2.BBK" }, + { 7, 0x00016045, 0x00930E, "T2.LBM" }, + { 7, 0x0001F353, 0x003D1D, "T2.SAM" }, + { 9, 0x000893CE, 0x0030B7, "T20.BBK" }, + { 9, 0x0008C485, 0x00552A, "T20.LBM" }, + { 9, 0x000919AF, 0x0040EC, "T20.SAM" }, + { 9, 0x00095A9B, 0x003DCF, "T20B.SAM" }, + { 8, 0x0008D1C4, 0x0076FC, "T21.LBM" }, + { 9, 0x0009986A, 0x006622, "T22.LBM" }, + { 7, 0x00023070, 0x00282D, "T23.BBK" }, + { 7, 0x0002589D, 0x00626C, "T23.LBM" }, + { 8, 0x000948C0, 0x006632, "T24.BBK" }, + { 8, 0x0009AEF2, 0x005C64, "T24.LBM" }, + { 7, 0x0002BB09, 0x00544E, "T25.BBK" }, + { 7, 0x00030F57, 0x005B7C, "T25.LBM" }, + { 7, 0x00036AD3, 0x00428D, "T25.SAM" }, + { 7, 0x0003AD60, 0x0085C0, "T26.BBK" }, + { 7, 0x00043320, 0x00A8AC, "T26.LBM" }, + { 7, 0x0004DBCC, 0x0068DC, "T26A.SAM" }, + { 8, 0x000A0B56, 0x005163, "T27.BBK" }, + { 8, 0x000A5CB9, 0x005EDC, "T27.LBM" }, + { 7, 0x000544A8, 0x0126F1, "T2B.SAM" }, + { 7, 0x00066B99, 0x002BAC, "T3.BBK" }, + { 7, 0x00069745, 0x0056DE, "T3.LBM" }, + { 7, 0x0006EE23, 0x003AAE, "T3.SAM" }, + { 7, 0x000728D1, 0x00227E, "T4.BBK" }, + { 7, 0x00074B4F, 0x00519C, "T4.LBM" }, + { 7, 0x00079CEB, 0x0012BE, "T5.BBK" }, + { 7, 0x0007AFA9, 0x0058F8, "T5.LBM" }, + { 7, 0x000808A1, 0x00363F, "T5.SAM" }, + { 7, 0x00083EE0, 0x0064C2, "T5B.SAM" }, + { 7, 0x0008A3A2, 0x0029A4, "T5C.SAM" }, + { 7, 0x0008CD46, 0x004CEF, "T6.BBK" }, + { 7, 0x00091A35, 0x0060F8, "T6.LBM" }, + { 7, 0x00097B2D, 0x00802F, "T6A.SAM" }, + { 7, 0x0009FB5C, 0x0082C8, "T6B.SAM" }, + { 7, 0x000A7E24, 0x00B7E1, "T6C.SAM" }, + { 9, 0x0009FE8C, 0x005BB7, "T7.BBK" }, + { 9, 0x000A5A43, 0x0057A8, "T7.LBM" }, + { 9, 0x000AB1EB, 0x00790D, "T7.SAM" }, + { 8, 0x000ABB95, 0x001E37, "T8.BBK" }, + { 8, 0x000AD9CC, 0x00591E, "T8.LBM" }, + { 8, 0x000B32EA, 0x009700, "T8.SAM" }, + { 8, 0x000BC9EA, 0x001D31, "T9.BBK" }, + { 8, 0x000BE71B, 0x005EB0, "T9.LBM" }, + { 8, 0x000C45CB, 0x005315, "T9.SAM" }, + { 3, 0x000A8192, 0x00A8D1, "TABLET.BBK" }, + { 3, 0x000B2A63, 0x0069EA, "TABLET.LBM" }, + { 4, 0x000C0B99, 0x00034A, "TALLPYG.DOG" }, + { 6, 0x000B2BC7, 0x001E8A, "TAM1.DOG" }, + { 6, 0x000B4A51, 0x00076C, "TAM2.DOG" }, + { 6, 0x000B51BD, 0x0007C2, "TAM3.DOG" }, + { 6, 0x000B597F, 0x00083C, "TAM4.DOG" }, + { 1, 0x000534ED, 0x00251A, "TEMPLE.ACT" }, + { 11, 0x000C1903, 0x007530, "TEMPLE.INS" }, + { 11, 0x000C8E33, 0x000B54, "TEMPLE.SNG" }, + { 2, 0x000AFA7E, 0x00C8F2, "TITLE.INS" }, + { 2, 0x000BC370, 0x000BE9, "TITLE.SNG" }, + { 10, 0x0002FE16, 0x005016, "TMPD.ACT" }, + { 4, 0x000C0EE3, 0x008B80, "TRADER.ACT" }, + { 10, 0x00034E2C, 0x0047FD, "V1.BBK" }, + { 10, 0x00039629, 0x005E88, "V1.LBM" }, + { 10, 0x0003F4B1, 0x002812, "V1.SAM" }, + { 10, 0x00041CC3, 0x004798, "V10.BBK" }, + { 10, 0x0004645B, 0x00122A, "V10.LBM" }, + { 10, 0x00047685, 0x004998, "V11.BBK" }, + { 10, 0x0004C01D, 0x001296, "V11.LBM" }, + { 10, 0x0004D2B3, 0x0048FB, "V2.BBK" }, + { 10, 0x00051BAE, 0x003C58, "V2.LBM" }, + { 10, 0x00055806, 0x005C10, "V3.BBK" }, + { 10, 0x0005B416, 0x004310, "V3.LBM" }, + { 10, 0x0005F726, 0x0035E1, "V4.BBK" }, + { 10, 0x00062D07, 0x00A33E, "V4.LBM" }, + { 10, 0x0006D045, 0x009C51, "V5.BBK" }, + { 10, 0x00076C96, 0x00436E, "V5.LBM" }, + { 10, 0x0007B004, 0x00EECB, "V5.SAM" }, + { 10, 0x00089ECF, 0x0083DD, "V5B.SAM" }, + { 10, 0x000922AC, 0x009CC4, "V5C.SAM" }, + { 10, 0x0009BF70, 0x000746, "V5D.SAM" }, + { 10, 0x0009C6B6, 0x006FAB, "V5E.SAM" }, + { 10, 0x000A3661, 0x0090B3, "V5X.SAM" }, + { 10, 0x000AC714, 0x005C10, "V6.BBK" }, + { 10, 0x000B2324, 0x0051D2, "V6.LBM" }, + { 10, 0x000B74F6, 0x00B386, "V7.BBK" }, + { 10, 0x000C287C, 0x0065F8, "V7.LBM" }, + { 5, 0x000C2F58, 0x004645, "VACUUM.SAM" }, + { 1, 0x00055A07, 0x000418, "WATER.ACT" }, + { 4, 0x000C9A63, 0x0015D5, "WEDGE.ACT" }, + { 4, 0x000CB038, 0x0002C4, "WEDGE.DOG" }, + { 9, 0x000B2AF8, 0x004484, "WEENIE.SAM" }, + { 6, 0x000B61BB, 0x0012E4, "WITCH1.DOG" }, + { 6, 0x000B749F, 0x00088E, "WITCH2.DOG" }, + { 6, 0x000B7D2D, 0x000DF8, "WITCH3.DOG" }, + { 6, 0x000B8B25, 0x0002B2, "WITCH4.DOG" }, + { 7, 0x000B3605, 0x003E8A, "ZOMBIE.ACT" }, + { 7, 0x000B748F, 0x000F6A, "ZOMBIE1.DOG" }, + { 7, 0x000B83F9, 0x000C40, "ZOMBIE2.DOG" } +}; diff --git a/tools/qtable/fat_amiga_interview.h b/tools/qtable/fat_amiga_interview.h new file mode 100644 index 0000000000..1ea39df6cb --- /dev/null +++ b/tools/qtable/fat_amiga_interview.h @@ -0,0 +1,70 @@ +struct DataFileEntry fatAmigaInterview[] = { + { 1, 0x00000000, 0x000A47, "CONTROL.BBK" }, + { 1, 0x00000A47, 0x000944, "D1A.CUT" }, + { 1, 0x0000138B, 0x0000AE, "D1B.CUT" }, + { 1, 0x00001439, 0x00013E, "D1C.CUT" }, + { 1, 0x00001577, 0x00015E, "D1D.CUT" }, + { 1, 0x000016D5, 0x0001FE, "D1E.CUT" }, + { 1, 0x000018D3, 0x0001EC, "D1F.CUT" }, + { 1, 0x00001ABF, 0x00012E, "D1G.CUT" }, + { 1, 0x00001BED, 0x00033A, "D1H.CUT" }, + { 1, 0x00001F27, 0x00012C, "D1I.CUT" }, + { 1, 0x00002053, 0x0000E2, "D1J.CUT" }, + { 1, 0x00002135, 0x000128, "D1K.CUT" }, + { 1, 0x0000225D, 0x0000BC, "D1L.CUT" }, + { 1, 0x00002319, 0x0000CA, "D1M.CUT" }, + { 1, 0x000023E3, 0x000154, "D1N.CUT" }, + { 1, 0x00002537, 0x0000D4, "D1O.CUT" }, + { 1, 0x0000260B, 0x000172, "D1P.CUT" }, + { 1, 0x0000277D, 0x00015A, "D1Q.CUT" }, + { 1, 0x000028D7, 0x0000F0, "D1R.CUT" }, + { 1, 0x000029C7, 0x00024C, "D1Z.CUT" }, + { 1, 0x00002C13, 0x00019A, "D2A.CUT" }, + { 1, 0x00002DAD, 0x0001C2, "D2B.CUT" }, + { 1, 0x00002F6F, 0x0000E8, "D2C.CUT" }, + { 1, 0x00003057, 0x0000DE, "D2D.CUT" }, + { 1, 0x00003135, 0x000178, "D2E.CUT" }, + { 1, 0x000032AD, 0x00036C, "D3A.CUT" }, + { 1, 0x00003619, 0x000330, "D3B.CUT" }, + { 1, 0x00003949, 0x00039C, "D3C.CUT" }, + { 1, 0x00003CE5, 0x005ACF, "FAYE-H.ACT" }, + { 1, 0x000097B4, 0x006A9C, "FAYE-H.LBM" }, + { 1, 0x00010250, 0x008665, "FAYE.ACT" }, + { 1, 0x000188B5, 0x00007A, "FAYE1.CUT" }, + { 1, 0x0001892F, 0x000C34, "FAYE1.DOG" }, + { 1, 0x00019563, 0x00009C, "FAYE2.CUT" }, + { 1, 0x000195FF, 0x003553, "JOE_A.BBK" }, + { 1, 0x0001CB52, 0x00562B, "JOE_B.BBK" }, + { 1, 0x0002217D, 0x00391F, "JOHN.ACT" }, + { 1, 0x00025A9C, 0x00087C, "JOHN1.DOG" }, + { 1, 0x00026318, 0x00091C, "JOHN2.DOG" }, + { 1, 0x00026C34, 0x00111D, "OBJECTS.BBK" }, + { 1, 0x00027D51, 0x001C3C, "PANEL.LBM" }, + { 1, 0x0002998D, 0x000DA6, "QUEEN.JAS" }, + { 1, 0x0002A733, 0x0012D4, "QUEEN2.JAS" }, + { 1, 0x0002BA07, 0x0002A8, "START.CUT" }, + { 1, 0x0002BCAF, 0x00330F, "STEVE.ACT" }, + { 1, 0x0002EFBE, 0x0009A8, "STEVE1.DOG" }, + { 1, 0x0002F966, 0x000CF0, "STEVE2.DOG" }, + { 1, 0x00030656, 0x001BCB, "TONY.ACT" }, + { 1, 0x00032221, 0x000D6A, "TONY1.DOG" }, + { 1, 0x00032F8B, 0x0046DE, "Z0.LBM" }, + { 1, 0x00037669, 0x0049C3, "Z1.BBK" }, + { 1, 0x0003C02C, 0x008808, "Z1.LBM" }, + { 1, 0x00044834, 0x002353, "Z2.BBK" }, + { 1, 0x00046B87, 0x00B686, "Z2.LBM" }, + { 1, 0x0005220D, 0x002824, "Z3.BBK" }, + { 1, 0x00054A31, 0x007032, "Z3.LBM" }, + { 1, 0x0005BA63, 0x00239C, "Z4.BBK" }, + { 1, 0x0005DDFF, 0x005F82, "Z4.LBM" }, + { 1, 0x00063D81, 0x001F84, "Z4.SAM" }, + { 1, 0x00065D05, 0x005502, "Z5.LBM" }, + { 1, 0x0006B207, 0x002D36, "Z6.BBK" }, + { 1, 0x0006DF3D, 0x006662, "Z6.LBM" }, + { 1, 0x0007459F, 0x003096, "Z7.BBK" }, + { 1, 0x00077635, 0x006280, "Z7.LBM" }, + { 1, 0x0007D8B5, 0x00673D, "Z8.BBK" }, + { 1, 0x00083FF2, 0x0054C0, "Z8.LBM" }, + { 1, 0x000894B2, 0x0025E8, "Z9.BBK" }, + { 1, 0x0008BA9A, 0x00618E, "Z9.LBM" } +}; diff --git a/tools/qtable/qtable.c b/tools/qtable/qtable.c index 8844af2e8c..82885abbbf 100644 --- a/tools/qtable/qtable.c +++ b/tools/qtable/qtable.c @@ -65,6 +65,10 @@ typedef struct GameVersion { #include "fat_pc_demo_pcgames.h" #include "fat_pc_demo.h" #include "fat_pc_interview.h" +#include "fat_amiga_eng_floppy.h" +#include "fat_amiga_demo.h" +#include "fat_amiga_interview.h" + #define FAT(x) x, (sizeof(x)/sizeof(x[0])) @@ -81,11 +85,14 @@ static GameVersion gameVersionsTable[] = { { "CHM10", 190705558, FAT(fatHebCd), 0 }, { "PE100", 3724538, FAT(fatPCDemoPcGames), 0 }, { "PE100", 3732177, FAT(fatPCDemo), 0 }, - { "PEint", 1915913, FAT(fatPCInterview), 0 } + { "PEint", 1915913, FAT(fatPCInterview), 0 }, + { "aEM10", 351775, FAT(fatAmigaEngFl), 0 }, + { "CE101", 563335, FAT(fatAmigaDemo), 0 }, + { "PE100", 597032, FAT(fatAmigaInterview), 0 } }; static const uint32 QTBL_TAG = 0x5154424C; -static const uint32 CURRENT_VERSION = 1; +static const uint32 CURRENT_VERSION = 2; static void writeByte(FILE *fp, uint8 b) { fwrite(&b, 1, 1, fp); @@ -113,7 +120,7 @@ static void createTableFile(TableFile *tf) { uint16 i, j; uint32 offset; /* dump offset */ - /* setup file entries table */ + /* setup file entries table */ assert(ARRAYSIZE(gameVersionsTable) < MAX_VERSIONS); for (i = 0; i < ARRAYSIZE(gameVersionsTable); ++i) { const GameVersion *gv = &gameVersionsTable[i]; @@ -121,7 +128,7 @@ static void createTableFile(TableFile *tf) { tf->dataFileEntriesTable[i].fileEntriesCount = gv->dataFileEntriesCount; } tf->dataFileEntriesTableCount = ARRAYSIZE(gameVersionsTable); - + /* write queen table file */ out = fopen(tf->outfile, "wb"); if (!out) { @@ -129,7 +136,7 @@ static void createTableFile(TableFile *tf) { return; } /* write header tag */ - writeUint32BE(out, QTBL_TAG); + writeUint32BE(out, QTBL_TAG); /* write version */ writeUint32BE(out, CURRENT_VERSION); /* write tables */ |