From 798ce43e19f1f4ee5b95f4de291217bf25a342f9 Mon Sep 17 00:00:00 2001 From: Gregory Montoir Date: Sun, 25 Nov 2007 23:27:51 +0000 Subject: - enabled speech sounds - added end of demo check for demo 1.10 - simplified parts loop - populated strings table in IGOR.TBL - updated and packed charset data svn-id: r29641 --- engines/igor/detection.cpp | 14 +- engines/igor/igor.cpp | 180 ++++++-- engines/igor/igor.h | 45 +- engines/igor/parts/part_04.cpp | 21 +- engines/igor/parts/part_05.cpp | 24 +- engines/igor/parts/part_06.cpp | 5 +- engines/igor/parts/part_12.cpp | 22 +- engines/igor/parts/part_13.cpp | 20 +- engines/igor/parts/part_14.cpp | 20 +- engines/igor/parts/part_15.cpp | 38 +- engines/igor/parts/part_16.cpp | 23 +- engines/igor/parts/part_17.cpp | 27 +- engines/igor/parts/part_18.cpp | 19 +- engines/igor/parts/part_19.cpp | 19 +- engines/igor/parts/part_21.cpp | 28 +- engines/igor/parts/part_22.cpp | 19 +- engines/igor/parts/part_23.cpp | 21 +- engines/igor/parts/part_24.cpp | 21 +- engines/igor/parts/part_25.cpp | 19 +- engines/igor/parts/part_26.cpp | 21 +- engines/igor/parts/part_27.cpp | 25 +- engines/igor/parts/part_28.cpp | 24 +- engines/igor/parts/part_30.cpp | 21 +- engines/igor/parts/part_31.cpp | 21 +- engines/igor/parts/part_33.cpp | 23 +- engines/igor/parts/part_36.cpp | 22 +- engines/igor/parts/part_37.cpp | 22 +- engines/igor/parts/part_75.cpp | 10 +- engines/igor/parts/part_85.cpp | 34 +- engines/igor/parts/part_90.cpp | 6 +- engines/igor/parts/part_95.cpp | 118 ++--- engines/igor/parts/part_main.cpp | 18 +- engines/igor/resource_ids.h | 54 +++ engines/igor/staticres.cpp | 716 +++++-------------------------- tools/create_igortbl/create_igortbl.c | 37 +- tools/create_igortbl/resource_sp_cdrom.h | 96 +++++ tools/create_igortbl/strings.h | 55 ++- 37 files changed, 744 insertions(+), 1164 deletions(-) diff --git a/engines/igor/detection.cpp b/engines/igor/detection.cpp index 130cf22780..998efb0e31 100644 --- a/engines/igor/detection.cpp +++ b/engines/igor/detection.cpp @@ -33,6 +33,7 @@ struct IgorGameDescription { Common::ADGameDescription desc; int gameVersion; + int gameFlags; }; static const IgorGameDescription igorGameDescriptions[] = { @@ -49,7 +50,8 @@ static const IgorGameDescription igorGameDescriptions[] = { Common::kPlatformPC, Common::ADGF_DEMO }, - Igor::kIdEngDemo100 + Igor::kIdEngDemo100, + Igor::kFlagDemo | Igor::kFlagFloppy }, { { @@ -64,7 +66,8 @@ static const IgorGameDescription igorGameDescriptions[] = { Common::kPlatformPC, Common::ADGF_DEMO }, - Igor::kIdEngDemo110 + Igor::kIdEngDemo110, + Igor::kFlagDemo | Igor::kFlagFloppy }, { { @@ -79,9 +82,10 @@ static const IgorGameDescription igorGameDescriptions[] = { Common::kPlatformPC, Common::ADGF_NO_FLAGS }, - Igor::kIdSpaCD + Igor::kIdSpaCD, + Igor::kFlagTalkie }, - { AD_TABLE_END_MARKER, 0 } + { AD_TABLE_END_MARKER, 0, 0 } }; static const PlainGameDescriptor igorGameDescriptors[] = { @@ -104,7 +108,7 @@ static const Common::ADParams igorDetectionParams = { static bool Engine_IGOR_createInstance(OSystem *syst, Engine **engine, Common::EncapsulatedADGameDesc encapsulatedDesc) { const IgorGameDescription *gd = (const IgorGameDescription *)(encapsulatedDesc.realDesc); if (gd) { - *engine = new Igor::IgorEngine(syst, gd->gameVersion); + *engine = new Igor::IgorEngine(syst, gd->gameVersion, gd->gameFlags, gd->desc.language); } return gd != 0; } diff --git a/engines/igor/igor.cpp b/engines/igor/igor.cpp index 5e761a9e11..f4de78434a 100644 --- a/engines/igor/igor.cpp +++ b/engines/igor/igor.cpp @@ -36,10 +36,8 @@ namespace Igor { -IgorEngine::IgorEngine(OSystem *system, int gameVersion) - : Engine(system), _gameVersion(gameVersion) { - - _midiPlayer = new MidiPlayer(this); +IgorEngine::IgorEngine(OSystem *system, int gameVersion, int gameFlags, Common::Language language) + : Engine(system), _gameVersion(gameVersion), _gameFlags(gameFlags), _gameLanguage(language) { _screenVGA = (uint8 *)malloc(320 * 200); for (int i = 0; i < 4; ++i) { @@ -60,13 +58,17 @@ IgorEngine::IgorEngine(OSystem *system, int gameVersion) Common::addSpecialDebugLevel(kDebugScreen, "Screen", "Screen debug level"); Common::addSpecialDebugLevel(kDebugWalk, "Walk", "Walk debug level"); Common::addSpecialDebugLevel(kDebugGame, "Game", "Game debug level"); + + if (gameFlags & kFlagFloppy) { + _midiPlayer = new MidiPlayer(this); + } else { + _midiPlayer = 0; + } } IgorEngine::~IgorEngine() { - delete _midiPlayer; free(_resourceEntries); free(_soundOffsets); - Common::clearAllSpecialDebugLevels(); free(_screenVGA); for (int i = 0; i < 4; ++i) { free(_facingIgorFrames[i]); @@ -80,6 +82,10 @@ IgorEngine::~IgorEngine() { free(_inventoryPanelBuffer); free(_inventoryImagesBuffer); free(_verbsPanelBuffer); + + Common::clearAllSpecialDebugLevels(); + + delete _midiPlayer; } int IgorEngine::init() { @@ -98,7 +104,7 @@ void IgorEngine::restart() { memset(&_gameState, 0, sizeof(_gameState)); _nextTimer = 0; _fastMode = false; - _language = kLanguageEnglish; + _language = 0; memset(_walkData, 0, sizeof(_walkData)); _walkCurrentPos = 0; @@ -158,6 +164,8 @@ void IgorEngine::restart() { _soundOffsetsCount = 0; _soundOffsets = 0; + _demoActionsCounter = 0; + _gameTicks = 0; } @@ -170,7 +178,7 @@ int IgorEngine::go() { } const char *ovlFileName = "IGOR.DAT"; const char *fsdFileName = "IGOR.FSD"; - if (_gameVersion == kIdSpaCD) { + if (_gameFlags & kFlagTalkie) { ovlFileName = "IGOR.EXE"; fsdFileName = "IGOR.DAT"; } @@ -180,7 +188,7 @@ int IgorEngine::go() { if (!_sndFile.open(fsdFileName)) { error("Unable to open '%s'", fsdFileName); } - readResourceTableFile(); + readTableFile(); loadMainTexts(); loadIgorFrames(); _gameState.talkMode = kTalkModeTextOnly; @@ -193,11 +201,11 @@ int IgorEngine::go() { return 0; } -void IgorEngine::readResourceTableFile() { +void IgorEngine::readTableFile() { Common::File tblFile; - uint32 resourcesEntriesOffset = 0, soundEntriesOffset = 0; - if (tblFile.open("IGOR.TBL") && tblFile.readUint32BE() == MKID_BE('ITBL') && tblFile.readUint32BE() == 2) { - tblFile.skip(4); + uint32 stringsEntriesOffset = 0, resourcesEntriesOffset = 0, soundEntriesOffset = 0; + if (tblFile.open("IGOR.TBL") && tblFile.readUint32BE() == MKID_BE('ITBL') && tblFile.readUint32BE() == 3) { + stringsEntriesOffset = tblFile.readUint32BE(); uint32 borlandOverlaySize = _ovlFile.size(); int gameVersionsCount = tblFile.readByte(); for (int i = 0; i < gameVersionsCount; ++i) { @@ -225,11 +233,38 @@ void IgorEngine::readResourceTableFile() { for (int i = 0; i < _soundOffsetsCount; ++i) { _soundOffsets[i] = tblFile.readUint32BE(); } + tblFile.seek(stringsEntriesOffset); + int stringsCount = tblFile.readUint16BE(); + for (int i = 0; i < stringsCount; ++i) { + int id = tblFile.readUint16BE(); + int lang = tblFile.readByte(); + int len = tblFile.readByte(); + bool skipString = (lang == 1 && _gameLanguage != Common::EN_ANY) || (lang == 2 && _gameLanguage != Common::ES_ESP); + if (skipString) { + tblFile.skip(len); + } else { + char buf[256]; + tblFile.read(buf, len); + buf[len] = 0; + _stringEntries.push_back(StringEntry(id, buf)); + } + } return; } error("Unable to read 'IGOR.TBL'"); } +const char *IgorEngine::getString(int id) { + const char *str = 0; + for (Common::Array::const_iterator it = _stringEntries.begin(); it != _stringEntries.end(); ++it) { + if ((*it).id == id) { + str = (*it).str.c_str(); + break; + } + } + return str; +} + void IgorEngine::waitForTimer(int ticks) { _system->copyRectToScreen(_screenVGA, 320, 0, _screenVGAVOffset, 320, 200 - _screenVGAVOffset); _system->updateScreen(); @@ -283,12 +318,16 @@ void IgorEngine::waitForTimer(int ticks) { return; } _gameTicks += kTimerTicksCount; - if (_gameTicks == 64) { // TODO: original switches cursors more often - _gameTicks = 0; + if ((_gameTicks & 31) == 0) { setCursor(_currentCursor); _currentCursor = (_currentCursor + 1) & 3; } - // TODO: updateMusic(); + if (_gameFlags & kFlagFloppy) { + updateMusic(); + } + if (_gameTicks == 64) { + _gameTicks = 0; + } } void IgorEngine::copyArea(uint8 *dst, int dstOffset, int dstPitch, const uint8 *src, int srcPitch, int w, int h, bool transparent) { @@ -323,21 +362,21 @@ void IgorEngine::startMusic(int cmf) { void IgorEngine::playMusic(int num) { debugC(9, kDebugEngine, "playMusic() %d", num); - static const int cmf[] = { 0, 0, CMF_2_1, CMF_3, CMF_4, 0, 0, CMF_7_1, CMF_8, CMF_9, CMF_10, CMF_11, CMF_12 }; - assert(num < ARRAYSIZE(cmf) && cmf[num] != 0); - _gameState.musicNum = num; - _gameState.musicSequenceIndex = 1; - if (_gameVersion == kIdSpaCD) { - // different file format - return; + if (_gameFlags & kFlagFloppy) { + static const int cmf[] = { 0, 0, CMF_2_1, CMF_3, CMF_4, 0, 0, CMF_7_1, CMF_8, CMF_9, CMF_10, CMF_11, CMF_12 }; + assert(num < ARRAYSIZE(cmf) && cmf[num] != 0); + _gameState.musicNum = num; + _gameState.musicSequenceIndex = 1; + startMusic(cmf[num]); + } else { + // TODO: play CD track } - startMusic(cmf[num]); } void IgorEngine::updateMusic() { static const int cmf2Seq[] = { CMF_2_1, CMF_2_2, CMF_2_3, CMF_2_4 }; static const int cmf7Seq[] = { CMF_7_1, CMF_7_2, CMF_7_3, CMF_7_4 }; - if (_gameState.jumpToNextMusic) { + if (_gameState.jumpToNextMusic && 0) { // TODO: enable switch (_gameState.musicNum) { case 2: _gameState.musicSequenceIndex = getRandomNumber(4) + 1; @@ -367,21 +406,36 @@ void IgorEngine::updateMusic() { } } -void IgorEngine::playSound(int num, int fl) { +void IgorEngine::playSound(int num, int type) { debugC(9, kDebugEngine, "playSound() %d", num); - if (fl && _mixer->isSoundHandleActive(_sfxHandle)) { - return; - } - if (!fl) { -// num = 20; // "Speech not recorded" + --num; + int soundOffset = -1; + Audio::Mixer::SoundType soundType = Audio::Mixer::kPlainSoundType; + Audio::SoundHandle *soundHandle = 0; + if (type == 1) { + if (_mixer->isSoundHandleActive(_sfxHandle)) { + return; + } + assert(num >= 0 && num < _soundOffsetsCount); + soundOffset = _soundOffsets[num]; + soundType = Audio::Mixer::kSFXSoundType; + soundHandle = &_sfxHandle; + } else if (type == 0 && (_gameFlags & kFlagTalkie) != 0 && num != kNoSpeechSound) { + if (_mixer->isSoundHandleActive(_speechHandle)) { + _mixer->stopHandle(_speechHandle); + } + num += 100; + assert(num >= 0 && num < _soundOffsetsCount); + soundOffset = _soundOffsets[num]; + soundType = Audio::Mixer::kSpeechSoundType; + soundHandle = &_speechHandle; + } else { return; } - --num; - assert(num >= 0 && num < _soundOffsetsCount); - _sndFile.seek(_soundOffsets[num]); + _sndFile.seek(soundOffset); Audio::AudioStream *stream = Audio::makeVOCStream(_sndFile); if (stream) { - _mixer->playInputStream(Audio::Mixer::kSFXSoundType, &_sfxHandle, stream); + _mixer->playInputStream(soundType, soundHandle, stream); } } @@ -398,6 +452,15 @@ void IgorEngine::loadIgorFrames() { memcpy(_igorPalette, PAL_IGOR_1, 48); } +void IgorEngine::loadIgorFrames2() { + loadData(FRM_IgorDirBack2, _facingIgorFrames[0]); + loadData(FRM_IgorDirRight2, _facingIgorFrames[1]); + loadData(FRM_IgorDirFront2, _facingIgorFrames[2]); + loadData(FRM_IgorDirLeft2, _facingIgorFrames[3]); + loadData(FRM_IgorHead2, _igorHeadFrames); + memcpy(_igorPalette, PAL_IGOR_2, 48); +} + void IgorEngine::fixDialogueTextPosition(int num, int count, int *x, int *y) { int textLineWidth = 0; for (int i = 0; i < count; ++i) { @@ -527,9 +590,6 @@ void IgorEngine::fixIgorDialogueTextPosition(int num, int count, int *x, int *y) void IgorEngine::startIgorDialogue() { debugC(9, kDebugEngine, "startIgorDialogue()"); -// if (_dialogueCursorOn) { -// clearCursor(); -// } --_dialogueTextsCount; int talkX, talkY; const DialogueText *dt = &_dialogueTextsTable[_dialogueTextsStart]; @@ -997,8 +1057,10 @@ void IgorEngine::drawString(uint8 *dst, const char *s, int x, int y, int color1, } for (int j = 0; j < 11; ++j) { uint8 *p = dst + (j + y) * 320 + x + dx; - for (int i = 0; i < 9; ++i) { - uint8 code = _fontData[(chr * 11 + j) * 9 + i]; + uint32 chrMask = _fontData[chr * 11 + j]; + for (int i = 0; i < 9; ++i, chrMask >>= 2) { +// uint8 code = _fontData[(chr * 11 + j) * 9 + i]; + uint8 code = chrMask & 3; if (code == 1) { p[i] = color1; } else if (code == 2 && color2 != -1) { @@ -1393,7 +1455,7 @@ void IgorEngine::handleRoomInput() { } if (_inputVars[kInputCursorYPos] >= 156 && _inputVars[kInputCursorYPos] <= 167) { if (_inputVars[kInputClick]) { - int verb = _verbAreasTable[_inputVars[kInputCursorXPos]]; + int verb = getVerbUnderCursor(_inputVars[kInputCursorXPos]); if (verb != _currentAction.verb) { redrawVerb(_currentAction.verb, false); _currentAction.verb = verb; @@ -1702,6 +1764,42 @@ void IgorEngine::handleRoomLight() { } } +void IgorEngine::enterPartLoop() { + if (!_gameState.dialogueTextRunning) { + showCursor(); + } + _gameState.igorMoving = false; + if (_gameVersion == kIdEngDemo110) { + CHECK_FOR_END_OF_DEMO(); + } +} + +void IgorEngine::leavePartLoop() { + hideCursor(); + SET_EXEC_ACTION_FUNC(1, 0); + _updateRoomBackground = 0; +} + +void IgorEngine::runPartLoop() { + handleRoomInput(); + if (compareGameTick(1, 16)) { + handleRoomIgorWalk(); + } + if (compareGameTick(19, 32)) { + handleRoomDialogue(); + } + if (compareGameTick(4, 8)) { + handleRoomInventoryScroll(); + } + if (compareGameTick(1)) { + handleRoomLight(); + } + if (_updateRoomBackground) { + (this->*_updateRoomBackground)(); + } + waitForTimer(); +} + int IgorEngine::lookupScale(int xOffset, int yOffset, int h) const { int index = READ_LE_UINT16(_walkScaleTable + 0x734 + _walkWidthScaleTable[h - 1] * 2); int offset = _walkScaleTable[0x4FC + index + xOffset]; diff --git a/engines/igor/igor.h b/engines/igor/igor.h index 6659d21132..1c5221eb0c 100644 --- a/engines/igor/igor.h +++ b/engines/igor/igor.h @@ -26,9 +26,10 @@ #ifndef IGOR_ENGINE_H #define IGOR_ENGINE_H +#include "common/array.h" #include "common/endian.h" #include "common/file.h" -#include "common/rect.h" +#include "common/str.h" #include "common/util.h" #include "sound/mixer.h" @@ -56,6 +57,12 @@ enum { kIdSpaCD }; +enum { + kFlagDemo = 1 << 0, + kFlagFloppy = 1 << 1, + kFlagTalkie = 1 << 2 +}; + enum { kStartupPart = 900, kInvalidPart = 255, @@ -65,7 +72,8 @@ enum { kTickDelay = 1193180 / 4096, kTimerTicksCount = 8, kQuickSaveSlot = 0, - kMaxSaveStates = 10 + kMaxSaveStates = 10, + kNoSpeechSound = 999 }; enum { @@ -122,6 +130,7 @@ enum InputVar { struct DialogueText { int num; int count; + int sound; }; struct ResourceEntry { @@ -130,6 +139,14 @@ struct ResourceEntry { uint32 size; }; +struct StringEntry { + int id; + Common::String str; + + StringEntry() : id(0) {} + StringEntry(int i, const char *s) : id(i), str(s) {} +}; + struct RoomObjectArea { uint8 area; uint8 object; @@ -284,7 +301,7 @@ public: typedef void (IgorEngine::*UpdateDialogueProc)(int action); typedef void (IgorEngine::*UpdateRoomBackgroundProc)(); - IgorEngine(OSystem *system, int gameVersion); + IgorEngine(OSystem *system, int gameVersion, int gameFlags, Common::Language language); virtual ~IgorEngine(); virtual int init(); @@ -304,7 +321,8 @@ protected: bool compareGameTick(int add, int mod) const { return ((_gameTicks + (add & ~7)) % mod) == 0; } // { return ((_gameTicks + add) % mod) == 0; } bool compareGameTick(int eq) const { return _gameTicks == (eq & ~7); } // { return _gameTicks == eq; } int getPart() const { return _currentPart / 10; } - void readResourceTableFile(); + void readTableFile(); + const char *getString(int id); void restart(); void waitForTimer(int ticks = -1); void copyArea(uint8 *dst, int dstOffset, int dstPitch, const uint8 *src, int srcPitch, int w, int h, bool transparent = false); @@ -314,9 +332,10 @@ protected: void startMusic(int cmf); void playMusic(int num); void updateMusic(); - void playSound(int num, int fl); + void playSound(int num, int type); void stopSound(); void loadIgorFrames(); + void loadIgorFrames2(); void fixDialogueTextPosition(int num, int count, int *x, int *y); void startCutsceneDialogue(int x, int y, int r, int g, int b); void waitForEndOfCutsceneDialogue(int x, int y, int r, int g, int b); @@ -357,6 +376,7 @@ protected: void updateRoomLight(int fl); void drawVerbsPanel(); void redrawVerb(uint8 verb, bool highlight); + int getVerbUnderCursor(int x) const { return ((x % 46) < 44) ? (kVerbTalk + x / 46) : 0; } void drawInventory(int start, int mode); void packInventory(); void scrollInventory(); @@ -370,6 +390,9 @@ protected: void handleRoomIgorWalk(); void handleRoomInventoryScroll(); void handleRoomLight(); + void enterPartLoop(); + void leavePartLoop(); + void runPartLoop(); int lookupScale(int xOffset, int yOffset, int h) const; void moveIgor(int pos, int frame); void buildWalkPathSimple(int srcX, int srcY, int dstX, int dstY); @@ -407,6 +430,7 @@ protected: Common::File _sndFile; Audio::SoundHandle _sfxHandle; + Audio::SoundHandle _speechHandle; uint8 *_screenVGA; uint8 *_facingIgorFrames[4]; @@ -427,6 +451,8 @@ protected: bool _fastMode; int _language; int _gameVersion; + int _gameFlags; + Common::Language _gameLanguage; WalkData _walkData[100]; uint8 _walkCurrentPos; @@ -484,20 +510,21 @@ protected: RoomWalkBounds _roomWalkBounds; UpdateDialogueProc _updateDialogue; UpdateRoomBackgroundProc _updateRoomBackground; + int _demoActionsCounter; int _gameTicks; int _resourceEntriesCount; ResourceEntry *_resourceEntries; int _soundOffsetsCount; uint32 *_soundOffsets; + Common::Array _stringEntries; char _saveStateDescriptions[kMaxSaveStates][100]; static const uint8 _dialogueColor[]; static const uint8 _sentenceColorIndex[]; static const uint8 _fontCharIndex[]; static const uint8 _fontCharWidth[]; - static const uint8 _fontData[]; + static const uint32 _fontData[]; static const uint8 _talkDelays[]; - static const uint8 _verbAreasTable[]; static const uint8 _inventoryOffsetTable[]; static const uint8 _inventoryActionsTable[]; static const uint8 _walkWidthScaleTable[]; @@ -512,13 +539,14 @@ protected: // // main loop - void ADD_DIALOGUE_TEXT(int num, int count); + void ADD_DIALOGUE_TEXT(int num, int count, int sound = kNoSpeechSound); void SET_DIALOGUE_TEXT(int start, int count); void SET_EXEC_ACTION_FUNC(int i, ExecuteActionProc p); void EXEC_MAIN_ACTION(int action); void EXEC_MAIN_ACTION_38(); void EXEC_MAIN_ACTION_43(); void EXEC_MAIN_ACTION_54(); + void CHECK_FOR_END_OF_DEMO(); void SET_PAL_208_96_1(); void SET_PAL_240_48_1(); void UPDATE_OBJECT_STATE(int num); @@ -627,6 +655,7 @@ protected: void PART_15_ACTION_107(); void PART_15_ACTION_115(); void PART_15_ACTION_116(); + void PART_15_UPDATE_ROOM_BACKGROUND(); void PART_15_UPDATE_DIALOGUE_TOBIAS(int action); void PART_15_HANDLE_DIALOGUE_TOBIAS(); void PART_15_HELPER_1(int num); diff --git a/engines/igor/parts/part_04.cpp b/engines/igor/parts/part_04.cpp index bb198cee15..2c7190a8e4 100644 --- a/engines/igor/parts/part_04.cpp +++ b/engines/igor/parts/part_04.cpp @@ -29,16 +29,26 @@ namespace Igor { void IgorEngine::PART_04_EXEC_ACTION(int action) { debugC(9, kDebugGame, "PART_04_EXEC_ACTION %d", action); + if (_gameFlags & kFlagDemo) { + if (action == 102 || action == 103 || action == 104) { + ADD_DIALOGUE_TEXT(102, 2); + SET_DIALOGUE_TEXT(1, 1); + startIgorDialogue(); + return; + } + } switch (action) { case 101: _currentPart = 120; break; case 102: + _currentPart = 0; + break; case 103: + _currentPart = 350; + break; case 104: - ADD_DIALOGUE_TEXT(102, 2); - SET_DIALOGUE_TEXT(1, 1); - startIgorDialogue(); + _currentPart = 100; break; case 105: if (_objectsState[111] == 0) { @@ -90,8 +100,7 @@ void IgorEngine::PART_04() { _walkData[0].scaleHeight = 49; _walkDataLastIndex = 1; _walkDataCurrentIndex = 1; - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart == 40) { handleRoomInput(); if (compareGameTick(19, 32)) { @@ -109,7 +118,7 @@ void IgorEngine::PART_04() { setPaletteRange(184, 199); waitForTimer(); } - memcpy(_paletteBuffer, _currentPalette, 624); + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_05.cpp b/engines/igor/parts/part_05.cpp index ae4ff11999..16258546b3 100644 --- a/engines/igor/parts/part_05.cpp +++ b/engines/igor/parts/part_05.cpp @@ -123,6 +123,9 @@ void IgorEngine::PART_05_ACTION_103() { } while (i != 3); addObjectToInventory(21, 56); _objectsState[60] = 1; + if (_gameVersion == kIdEngDemo110) { + ++_demoActionsCounter; + } PART_05_HELPER_4(255); } @@ -256,25 +259,11 @@ void IgorEngine::PART_05() { if (_currentPart == 50) { PART_05_HELPER_6(); } - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart >= 50 && _currentPart <= 52) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - PART_05_UPDATE_ROOM_BACKGROUND(); - waitForTimer(); + runPartLoop(); } + leavePartLoop(); stopSound(); if (_currentPart == 255) { fadeOutPalette(768); @@ -285,7 +274,6 @@ void IgorEngine::PART_05() { memcpy(_currentPalette, _paletteBuffer, 624); fadeOutPalette(624); } - _updateRoomBackground = 0; } } // namespace Igor diff --git a/engines/igor/parts/part_06.cpp b/engines/igor/parts/part_06.cpp index e6fed6e68d..dc5e33be17 100644 --- a/engines/igor/parts/part_06.cpp +++ b/engines/igor/parts/part_06.cpp @@ -389,9 +389,8 @@ void IgorEngine::PART_06() { _roomDataOffsets = PART_06_ROOM_DATA_OFFSETS; _walkDataLastIndex = 1; _walkDataCurrentIndex = 1; - showCursor(); - _gameState.igorMoving = false; _gameState.unkF = (_objectsState[61] == 1); + enterPartLoop(); while (_currentPart >= 60 && _currentPart <= 61) { setRoomWalkBounds(0, 0, _objectsState[61] == 0 ? 234 : 142, 143); handleRoomInput(); @@ -413,7 +412,7 @@ void IgorEngine::PART_06() { } waitForTimer(); } - _updateRoomBackground = 0; + leavePartLoop(); } } // namespace Igor diff --git a/engines/igor/parts/part_12.cpp b/engines/igor/parts/part_12.cpp index 3b12480b60..e421782902 100644 --- a/engines/igor/parts/part_12.cpp +++ b/engines/igor/parts/part_12.cpp @@ -522,6 +522,7 @@ void IgorEngine::PART_12() { _roomDataOffsets = PART_12_ROOM_DATA_OFFSETS; setRoomWalkBounds(89, 0, 275, 143); SET_EXEC_ACTION_FUNC(1, &IgorEngine::PART_12_EXEC_ACTION); + _updateRoomBackground = &IgorEngine::PART_12_UPDATE_ROOM_BACKGROUND; PART_12_HELPER_1(255); memcpy(_screenVGA, _screenLayer1, 46080); if (_objectsState[44] == 0) { @@ -555,27 +556,12 @@ void IgorEngine::PART_12() { } } PART_12_HELPER_2(); - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart >= 120 && _currentPart <= 122) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - PART_12_UPDATE_ROOM_BACKGROUND(); - waitForTimer(); + runPartLoop(); } PART_12_EXIT: - hideCursor(); + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_13.cpp b/engines/igor/parts/part_13.cpp index 24195a5a63..b004f7034c 100644 --- a/engines/igor/parts/part_13.cpp +++ b/engines/igor/parts/part_13.cpp @@ -223,25 +223,11 @@ void IgorEngine::PART_13() { } else { PART_13_HELPER_2(); } - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart >= 130 && _currentPart <= 131) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - waitForTimer(); + runPartLoop(); } - hideCursor(); + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_14.cpp b/engines/igor/parts/part_14.cpp index 22cbc7aed5..f3c7c092f3 100644 --- a/engines/igor/parts/part_14.cpp +++ b/engines/igor/parts/part_14.cpp @@ -578,25 +578,11 @@ void IgorEngine::PART_14() { if (_currentPart == 142) { PART_14_HELPER_4(); } - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart >= 140 && _currentPart <= 142) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - waitForTimer(); + runPartLoop(); } - hideCursor(); + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_15.cpp b/engines/igor/parts/part_15.cpp index 6ad73509d4..70f759f7e7 100644 --- a/engines/igor/parts/part_15.cpp +++ b/engines/igor/parts/part_15.cpp @@ -317,6 +317,16 @@ void IgorEngine::PART_15_ACTION_116() { _currentPart = 780; } +void IgorEngine::PART_15_UPDATE_ROOM_BACKGROUND() { + PART_15_HELPER_5(); + if (_gameTicks == 38 || _gameTicks == 60) { + if (_objectsState[48] != 1 && getRandomNumber(200) == 0 && _gameState.counter[3] == 0) { + _gameState.counter[3] = 1; + } + } + PART_15_HELPER_3(); +} + void IgorEngine::PART_15_UPDATE_DIALOGUE_TOBIAS(int action) { switch (action) { case kUpdateDialogueAnimEndOfSentence: @@ -477,7 +487,7 @@ void IgorEngine::PART_15() { _roomDataOffsets = PART_15_ROOM_DATA_OFFSETS; setRoomWalkBounds(28, 0, 96, 143); SET_EXEC_ACTION_FUNC(1, &IgorEngine::PART_15_EXEC_ACTION); - _updateRoomBackground = 0; + _updateRoomBackground = &IgorEngine::PART_15_UPDATE_ROOM_BACKGROUND; PART_15_HELPER_1(255); memcpy(_screenVGA, _screenLayer1, 46080); _currentAction.verb = kVerbWalk; @@ -487,31 +497,11 @@ void IgorEngine::PART_15() { _gameState.counter[3] = 0; _gameState.counter[4] = 0; PART_15_HELPER_2(); - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart == 150) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - PART_15_HELPER_5(); - if (_gameTicks == 38 || _gameTicks == 60) { - if (_objectsState[48] != 1 && getRandomNumber(200) == 0 && _gameState.counter[3] == 0) { - _gameState.counter[3] = 1; - } - } - PART_15_HELPER_3(); - waitForTimer(); + runPartLoop(); } + leavePartLoop(); if (_objectsState[48] == 1) { _objectsState[48] = 2; } diff --git a/engines/igor/parts/part_16.cpp b/engines/igor/parts/part_16.cpp index aeff170bc5..01b1e7a32f 100644 --- a/engines/igor/parts/part_16.cpp +++ b/engines/igor/parts/part_16.cpp @@ -71,6 +71,9 @@ void IgorEngine::PART_16_ACTION_101() { } addObjectToInventory(20, 55); _objectsState[52] = 1; + if (_gameVersion == kIdEngDemo110) { + ++_demoActionsCounter; + } ADD_DIALOGUE_TEXT(204, 3); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); @@ -271,25 +274,11 @@ void IgorEngine::PART_16() { if (_objectsState[65] == 2 && _inventoryInfo[71] != 0 && _objectsState[76] == 1) { PART_16_HELPER_3(); } - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart == 160) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - waitForTimer(); + runPartLoop(); } - hideCursor(); + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_17.cpp b/engines/igor/parts/part_17.cpp index 6134c734c9..27af8b320b 100644 --- a/engines/igor/parts/part_17.cpp +++ b/engines/igor/parts/part_17.cpp @@ -205,6 +205,9 @@ void IgorEngine::PART_17_ACTION_106() { _objectsState[3] = 1; PART_17_HELPER_1(255); UPDATE_OBJECT_STATE(4); + if (_gameVersion == kIdEngDemo110) { + ++_demoActionsCounter; + } --_walkDataLastIndex; buildWalkPath(104, 87, 143, 123); _walkDataCurrentIndex = 1; @@ -497,34 +500,18 @@ void IgorEngine::PART_17() { } else if (_currentPart == 171) { PART_17_HELPER_6(); } - showCursor(); - _gameState.igorMoving = false; - while (_currentPart == 170 || _currentPart == 171) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - PART_17_UPDATE_ROOM_BACKGROUND(); - waitForTimer(); + enterPartLoop(); + while (_currentPart >= 170 && _currentPart <= 171) { + runPartLoop(); } + leavePartLoop(); if (_objectsState[55] == 1) { _objectsState[56] = 1; } if (_objectsState[54] == 0) { _objectsState[54] = 1; } - hideCursor(); fadeOutPalette(624); - _updateRoomBackground = 0; } } // namespace Igor diff --git a/engines/igor/parts/part_18.cpp b/engines/igor/parts/part_18.cpp index 11abb3cf2e..560ee35ccd 100644 --- a/engines/igor/parts/part_18.cpp +++ b/engines/igor/parts/part_18.cpp @@ -182,24 +182,11 @@ void IgorEngine::PART_18() { _currentAction.verb = kVerbWalk; fadeInPalette(768); PART_18_HELPER_2(); - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart == 180) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - waitForTimer(); + runPartLoop(); } + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_19.cpp b/engines/igor/parts/part_19.cpp index e7cf3b4327..26cbea9d83 100644 --- a/engines/igor/parts/part_19.cpp +++ b/engines/igor/parts/part_19.cpp @@ -311,24 +311,11 @@ void IgorEngine::PART_19() { if (_objectsState[59] == 0) { PART_19_HELPER_4(); } else { - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart == 190) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - waitForTimer(); + runPartLoop(); } + leavePartLoop(); } fadeOutPalette(624); } diff --git a/engines/igor/parts/part_21.cpp b/engines/igor/parts/part_21.cpp index 81f21204af..3b41a73857 100644 --- a/engines/igor/parts/part_21.cpp +++ b/engines/igor/parts/part_21.cpp @@ -203,6 +203,9 @@ void IgorEngine::PART_21_ACTION_111() { removeObjectFromInventory(56); _objectsState[65] = 1; PART_21_HELPER_1(255); + if (_gameVersion == kIdEngDemo110) { + ++_demoActionsCounter; + } ADD_DIALOGUE_TEXT(210, 2); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); @@ -465,28 +468,13 @@ void IgorEngine::PART_21() { PART_21_HELPER_3(); } else if (_currentPart == 212) { PART_21_HELPER_4(); + } + enterPartLoop(); + while (_currentPart >= 210 && _currentPart <= 212) { + runPartLoop(); } - showCursor(); - _gameState.igorMoving = false; - while (_currentPart == 210 || _currentPart == 211 || _currentPart == 212) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - PART_21_UPDATE_ROOM_BACKGROUND(); - waitForTimer(); - } + leavePartLoop(); fadeOutPalette(624); - _updateRoomBackground = 0; } } // namespace Igor diff --git a/engines/igor/parts/part_22.cpp b/engines/igor/parts/part_22.cpp index 5ed1ca3f7c..9727ae3e1a 100644 --- a/engines/igor/parts/part_22.cpp +++ b/engines/igor/parts/part_22.cpp @@ -162,24 +162,11 @@ void IgorEngine::PART_22() { _currentAction.verb = kVerbWalk; fadeInPalette(768); PART_22_HELPER_2(); - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart == 220) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - waitForTimer(); + runPartLoop(); } + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_23.cpp b/engines/igor/parts/part_23.cpp index e165ad5b1d..b1451442ac 100644 --- a/engines/igor/parts/part_23.cpp +++ b/engines/igor/parts/part_23.cpp @@ -278,27 +278,12 @@ void IgorEngine::PART_23() { } else if (_currentPart == 232) { PART_23_HELPER_4(); } - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart >= 230 && _currentPart <= 232) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - PART_23_UPDATE_ROOM_BACKGROUND(); - waitForTimer(); + runPartLoop(); } + leavePartLoop(); fadeOutPalette(624); - _updateRoomBackground = 0; } } // namespace Igor diff --git a/engines/igor/parts/part_24.cpp b/engines/igor/parts/part_24.cpp index 5d3d485ae0..d6855bab21 100644 --- a/engines/igor/parts/part_24.cpp +++ b/engines/igor/parts/part_24.cpp @@ -314,27 +314,12 @@ void IgorEngine::PART_24() { } else if (_currentPart == 242) { PART_24_HELPER_9(); } - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart >= 240 && _currentPart <= 242) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - PART_24_UPDATE_ROOM_BACKGROUND(); - waitForTimer(); + runPartLoop(); } + leavePartLoop(); fadeOutPalette(624); - _updateRoomBackground = 0; } } // namespace Igor diff --git a/engines/igor/parts/part_25.cpp b/engines/igor/parts/part_25.cpp index 67acbae58a..c8f395ce9f 100644 --- a/engines/igor/parts/part_25.cpp +++ b/engines/igor/parts/part_25.cpp @@ -232,24 +232,11 @@ void IgorEngine::PART_25() { } else if (_currentPart == 252) { PART_25_HELPER_4(); } - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart >= 250 && _currentPart <= 252) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - waitForTimer(); + runPartLoop(); } + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_26.cpp b/engines/igor/parts/part_26.cpp index eea2cd4c3d..8791e12b63 100644 --- a/engines/igor/parts/part_26.cpp +++ b/engines/igor/parts/part_26.cpp @@ -271,27 +271,12 @@ void IgorEngine::PART_26() { } else { PART_26_HELPER_5(); } - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart >= 260 && _currentPart <= 261) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - PART_26_UPDATE_ROOM_BACKGROUND(); - waitForTimer(); + runPartLoop(); } + leavePartLoop(); fadeOutPalette(624); - _updateRoomBackground = 0; } } // namespace Igor diff --git a/engines/igor/parts/part_27.cpp b/engines/igor/parts/part_27.cpp index 5d06e946a8..59e0eb0411 100644 --- a/engines/igor/parts/part_27.cpp +++ b/engines/igor/parts/part_27.cpp @@ -173,6 +173,9 @@ void IgorEngine::PART_27_ACTION_108() { } addObjectToInventory(23, 58); PART_27_HELPER_1(1); + if (_gameVersion == kIdEngDemo110) { + ++_demoActionsCounter; + } } void IgorEngine::PART_27_ACTION_110() { @@ -193,6 +196,9 @@ void IgorEngine::PART_27_ACTION_110() { removeObjectFromInventory(55); PART_27_HELPER_1(255); _objectsState[107] = 1; + if (_gameVersion == kIdEngDemo110) { + ++_demoActionsCounter; + } } void IgorEngine::PART_27_HELPER_1(int num) { @@ -272,24 +278,11 @@ void IgorEngine::PART_27() { } else { PART_27_HELPER_5(); } - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart == 270 || _currentPart == 271) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - waitForTimer(); + runPartLoop(); } + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_28.cpp b/engines/igor/parts/part_28.cpp index 4b952ad3bb..1f8a2c23fd 100644 --- a/engines/igor/parts/part_28.cpp +++ b/engines/igor/parts/part_28.cpp @@ -178,6 +178,9 @@ void IgorEngine::PART_28_ACTION_109() { ADD_DIALOGUE_TEXT(230, 1); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); + if (_gameVersion == kIdEngDemo110) { + ++_demoActionsCounter; + } } void IgorEngine::PART_28_UPDATE_DIALOGUE_CAROLINE(int action) { @@ -340,30 +343,15 @@ void IgorEngine::PART_28() { } else if (_currentPart == 281) { PART_28_HELPER_6(); } - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart == 280 || _currentPart == 281) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - PART_28_UPDATE_ROOM_BACKGROUND(); - waitForTimer(); + runPartLoop(); } if (_objectsState[87] == 1) { _objectsState[87] = 2; } + leavePartLoop(); fadeOutPalette(624); - _updateRoomBackground = 0; } } // namespace Igor diff --git a/engines/igor/parts/part_30.cpp b/engines/igor/parts/part_30.cpp index 8cd8ca8626..507d88f1c5 100644 --- a/engines/igor/parts/part_30.cpp +++ b/engines/igor/parts/part_30.cpp @@ -299,26 +299,11 @@ void IgorEngine::PART_30() { PART_30_HELPER_5(); } } - if (!_gameState.dialogueTextRunning) { - showCursor(); - } - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart >= 300 && _currentPart <= 303) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - waitForTimer(); + runPartLoop(); } + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_31.cpp b/engines/igor/parts/part_31.cpp index a3822d7982..ca4f598daf 100644 --- a/engines/igor/parts/part_31.cpp +++ b/engines/igor/parts/part_31.cpp @@ -427,26 +427,11 @@ void IgorEngine::PART_31() { } else if (_currentPart == 313) { PART_31_HELPER_6(); } - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart >= 310 && _currentPart <= 313) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - PART_31_UPDATE_ROOM_BACKGROUND(); - waitForTimer(); + runPartLoop(); } - _updateRoomBackground = 0; + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_33.cpp b/engines/igor/parts/part_33.cpp index 38ca6cce3b..2e49e60e95 100644 --- a/engines/igor/parts/part_33.cpp +++ b/engines/igor/parts/part_33.cpp @@ -265,6 +265,9 @@ void IgorEngine::PART_33_ACTION_115() { } removeObjectFromInventory(67); PART_33_HELPER_1(255); + if (_gameVersion == kIdEngDemo110) { + ++_demoActionsCounter; + } ADD_DIALOGUE_TEXT(217, 2); SET_DIALOGUE_TEXT(1, 1); _updateDialogue = &IgorEngine::PART_33_UPDATE_DIALOGUE_HARRISON_2; @@ -481,25 +484,11 @@ void IgorEngine::PART_33() { _currentAction.verb = kVerbWalk; fadeInPalette(768); PART_33_HELPER_7(); - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart == 330) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - PART_33_UPDATE_ROOM_BACKGROUND(); - waitForTimer(); + runPartLoop(); } + leavePartLoop(); if (_objectsState[75] == 1) { _objectsState[75] = 2; } diff --git a/engines/igor/parts/part_36.cpp b/engines/igor/parts/part_36.cpp index 1973bf9101..261ddeb8f7 100644 --- a/engines/igor/parts/part_36.cpp +++ b/engines/igor/parts/part_36.cpp @@ -105,6 +105,9 @@ void IgorEngine::PART_36_ACTION_102() { addObjectToInventory(30, 65); _objectsState[88] = 1; PART_36_HELPER_1(255); + if (_gameVersion == kIdEngDemo110) { + ++_demoActionsCounter; + } } void IgorEngine::PART_36_HELPER_1(int num) { @@ -153,24 +156,11 @@ void IgorEngine::PART_36() { _currentAction.verb = kVerbWalk; fadeInPalette(768); PART_36_HELPER_2(); - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart == 360) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - waitForTimer(); + runPartLoop(); } + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_37.cpp b/engines/igor/parts/part_37.cpp index ff2c2f74cf..5d2f7b03ac 100644 --- a/engines/igor/parts/part_37.cpp +++ b/engines/igor/parts/part_37.cpp @@ -82,6 +82,9 @@ void IgorEngine::PART_37_ACTION_102() { addObjectToInventory(32, 67); _objectsState[89] = 1; PART_37_HELPER_1(255); + if (_gameVersion == kIdEngDemo110) { + ++_demoActionsCounter; + } } void IgorEngine::PART_37_HELPER_1(int num) { @@ -115,24 +118,11 @@ void IgorEngine::PART_37() { _currentAction.verb = kVerbWalk; fadeInPalette(768); PART_37_HELPER_2(); - showCursor(); - _gameState.igorMoving = false; + enterPartLoop(); while (_currentPart == 370) { - handleRoomInput(); - if (compareGameTick(1, 16)) { - handleRoomIgorWalk(); - } - if (compareGameTick(19, 32)) { - handleRoomDialogue(); - } - if (compareGameTick(4, 8)) { - handleRoomInventoryScroll(); - } - if (compareGameTick(1)) { - handleRoomLight(); - } - waitForTimer(); + runPartLoop(); } + leavePartLoop(); fadeOutPalette(624); } diff --git a/engines/igor/parts/part_75.cpp b/engines/igor/parts/part_75.cpp index a1108149db..d263fc8d99 100644 --- a/engines/igor/parts/part_75.cpp +++ b/engines/igor/parts/part_75.cpp @@ -65,9 +65,9 @@ void IgorEngine::PART_75() { memset(_currentPalette, 0, 768); fadeInPalette(768); _gameState.igorMoving = false; - ADD_DIALOGUE_TEXT(201, 1); - ADD_DIALOGUE_TEXT(202, 2); - ADD_DIALOGUE_TEXT(204, 1); + ADD_DIALOGUE_TEXT(201, 1, 1156); + ADD_DIALOGUE_TEXT(202, 2, 1157); + ADD_DIALOGUE_TEXT(204, 1, 1158); SET_DIALOGUE_TEXT(1, 3); startCutsceneDialogue(187, 82, 63, 63, 0); waitForEndOfCutsceneDialogue(187, 82, 63, 63, 0); @@ -75,8 +75,8 @@ void IgorEngine::PART_75() { PART_75_HELPER_1(PART_75_ANIM_DATA_1[i]); waitForTimer(30); } - ADD_DIALOGUE_TEXT(205, 1); - ADD_DIALOGUE_TEXT(206, 1); + ADD_DIALOGUE_TEXT(205, 1, 1159); + ADD_DIALOGUE_TEXT(206, 1, 1160); SET_DIALOGUE_TEXT(1, 2); startCutsceneDialogue(187, 82, 63, 63, 0); waitForEndOfCutsceneDialogue(187, 82, 63, 63, 0); diff --git a/engines/igor/parts/part_85.cpp b/engines/igor/parts/part_85.cpp index dc0aab55fe..cf685b13a3 100644 --- a/engines/igor/parts/part_85.cpp +++ b/engines/igor/parts/part_85.cpp @@ -124,30 +124,30 @@ void IgorEngine::PART_85() { if (_inputVars[kInputEscape]) goto PART_85_EXIT; PART_85_HELPER_1(0, 0x7481, 2, 7, 32); if (_inputVars[kInputEscape]) goto PART_85_EXIT; - ADD_DIALOGUE_TEXT(201, 3); - ADD_DIALOGUE_TEXT(204, 1); + ADD_DIALOGUE_TEXT(201, 3, 545); + ADD_DIALOGUE_TEXT(204, 1, 546); SET_DIALOGUE_TEXT(1, 2); startCutsceneDialogue(89, 56, 63, 63, 0); VAR_CURRENT_TALKING_ACTOR = 0; waitForEndOfCutsceneDialogue(89, 56, 63, 63, 0); if (_inputVars[kInputEscape]) goto PART_85_EXIT; - ADD_DIALOGUE_TEXT(205, 3); + ADD_DIALOGUE_TEXT(205, 3, 547); SET_DIALOGUE_TEXT(1, 1); startCutsceneDialogue(113, 59, 63, 0, 38); VAR_CURRENT_TALKING_ACTOR = 1; waitForEndOfCutsceneDialogue(113, 59, 63, 0, 38); if (_inputVars[kInputEscape]) goto PART_85_EXIT; - ADD_DIALOGUE_TEXT(208, 1); + ADD_DIALOGUE_TEXT(208, 1, 548); SET_DIALOGUE_TEXT(1, 1); startCutsceneDialogue(89, 56, 63, 63, 0); VAR_CURRENT_TALKING_ACTOR = 0; waitForEndOfCutsceneDialogue(89, 56, 63, 63, 0); if (_inputVars[kInputEscape]) goto PART_85_EXIT; - ADD_DIALOGUE_TEXT(209, 2); - ADD_DIALOGUE_TEXT(211, 1); - ADD_DIALOGUE_TEXT(212, 1); - ADD_DIALOGUE_TEXT(213, 1); - ADD_DIALOGUE_TEXT(214, 1); + ADD_DIALOGUE_TEXT(209, 2, 549); + ADD_DIALOGUE_TEXT(211, 1, 550); + ADD_DIALOGUE_TEXT(212, 1, 551); + ADD_DIALOGUE_TEXT(213, 1, 552); + ADD_DIALOGUE_TEXT(214, 1, 553); SET_DIALOGUE_TEXT(1, 5); startCutsceneDialogue(113, 59, 63, 0, 38); VAR_CURRENT_TALKING_ACTOR = 1; @@ -155,16 +155,16 @@ void IgorEngine::PART_85() { if (_inputVars[kInputEscape]) goto PART_85_EXIT; PART_85_HELPER_1(0, 0x7481, 2, 7, 32); if (_inputVars[kInputEscape]) goto PART_85_EXIT; - ADD_DIALOGUE_TEXT(215, 1); - ADD_DIALOGUE_TEXT(216, 2); - ADD_DIALOGUE_TEXT(218, 1); + ADD_DIALOGUE_TEXT(215, 1, 554); + ADD_DIALOGUE_TEXT(216, 2, 555); + ADD_DIALOGUE_TEXT(218, 1, 556); SET_DIALOGUE_TEXT(1, 3); startCutsceneDialogue(89, 56, 63, 63, 0); VAR_CURRENT_TALKING_ACTOR = 0; waitForEndOfCutsceneDialogue(89, 56, 63, 63, 0); if (_inputVars[kInputEscape]) goto PART_85_EXIT; - ADD_DIALOGUE_TEXT(219, 2); - ADD_DIALOGUE_TEXT(221, 2); + ADD_DIALOGUE_TEXT(219, 2, 557); + ADD_DIALOGUE_TEXT(221, 2, 558); SET_DIALOGUE_TEXT(1, 2); startCutsceneDialogue(113, 59, 63, 0, 38); VAR_CURRENT_TALKING_ACTOR = 1; @@ -191,7 +191,7 @@ void IgorEngine::PART_85() { _walkData[0].scaleWidth = 50; _walkDataLastIndex = 1; _walkCurrentPos = 4; - ADD_DIALOGUE_TEXT(223, 2); + ADD_DIALOGUE_TEXT(223, 2, 559); SET_DIALOGUE_TEXT(1, 1); startIgorDialogue(); waitForEndOfIgorDialogue(); @@ -201,8 +201,8 @@ void IgorEngine::PART_85() { _walkData[0].x = 250; _walkData[0].y = 119; _walkCurrentPos = 3; - ADD_DIALOGUE_TEXT(225, 2); - ADD_DIALOGUE_TEXT(227, 3); + ADD_DIALOGUE_TEXT(225, 2, 560); + ADD_DIALOGUE_TEXT(227, 3, 561); SET_DIALOGUE_TEXT(1, 2); startIgorDialogue(); waitForEndOfIgorDialogue(); diff --git a/engines/igor/parts/part_90.cpp b/engines/igor/parts/part_90.cpp index c503d155f2..5a94f00b1f 100644 --- a/engines/igor/parts/part_90.cpp +++ b/engines/igor/parts/part_90.cpp @@ -27,10 +27,6 @@ namespace Igor { -static const char *STR_COPYRIGHT_1995 = "(C) 1995 Optik Software. All rights reserved."; - -static const char *STR_COPYRIGHT_1994 = "(C) 1994 PENDULO STUDIOS. All rights reserved."; - void IgorEngine::PART_90() { memset(_currentPalette, 0, 768); setPaletteRange(0, 255); @@ -54,7 +50,7 @@ void IgorEngine::PART_90() { case 904: loadData(PAL_TitleScreen, _paletteBuffer); loadData(IMG_TitleScreen, _screenVGA); - drawString(_screenVGA, (_gameVersion == kIdEngDemo110) ? STR_COPYRIGHT_1994 : STR_COPYRIGHT_1995, 2, 187, 0xF5, 0, 0); + drawString(_screenVGA, (_gameVersion == kIdEngDemo110) ? getString(STR_COPYRIGHT_1994) : getString(STR_COPYRIGHT_1995), 2, 187, 0xF5, 0, 0); break; } fadeInPalette(768); diff --git a/engines/igor/parts/part_95.cpp b/engines/igor/parts/part_95.cpp index b32751ec23..41f6b1c7f5 100644 --- a/engines/igor/parts/part_95.cpp +++ b/engines/igor/parts/part_95.cpp @@ -30,73 +30,74 @@ namespace Igor { struct SharewareScreenString { uint8 color; int y; - const char *str; + int strId; }; static const SharewareScreenString STR_SHAREWARE[] = { // 950 - { 255, 30, "\"Igor. Objective Uikokahonia\"" }, - { 228, 70, "This is SHAREWARE!" }, - { 228, 81, "You can copy this version!" }, - { 228, 96, "Pass it around, give it to your friends, family," }, - { 228, 107, "colleagues and upload it to your favorite BBS." }, - { 228, 122, "Let everyone enjoy IGOR!" }, - { 228, 161, "To place an order: 1-800-OPTIK-99" }, + { 255, 30, STR_IGOR_OBJECTIVE_UIKOKAHONIA }, + { 228, 70, STR_SHAREWARE_TEXT1 }, + { 228, 81, STR_SHAREWARE_TEXT2 }, + { 228, 96, STR_SHAREWARE_TEXT3 }, + { 228, 107, STR_SHAREWARE_TEXT4 }, + { 228, 122, STR_SHAREWARE_TEXT5 }, + { 228, 161, STR_SHAREWARE_PLACE_ORDER }, // 951 - { 255, 30, "\"Igor. Objective Uikokahonia\"" }, - { 228, 42, "Shareware version" }, - { 228, 85, "Order the full IGOR game for only $34.99 US." }, - { 228, 96, "$5.00 for shipping and handling (US & CANADA)." }, - { 228, 107, "Please add $3.00 for international shipping." }, - { 228, 161, "To place an order: 1-800-OPTIK-99" }, + { 255, 30, STR_IGOR_OBJECTIVE_UIKOKAHONIA }, + { 228, 42, STR_SHAREWARE_VERSION }, + { 228, 85, STR_SHAREWARE_ORDER_1 }, + { 228, 96, STR_SHAREWARE_ORDER_2 }, + { 228, 107, STR_SHAREWARE_ORDER_3 }, + { 228, 161, STR_SHAREWARE_ORDER_4 }, // 952 - { 255, 30, "\"Igor. Objective Uikokahonia\"" }, - { 228, 42, "Shareware version" }, - { 228, 70, "90 day limited warranty." }, - { 228, 85, "Please allow 2-4 days for delivery (US only)." }, - { 228, 96, "Elsewhere, up to a week or two..." }, - { 228, 111, "Overnight/second day shipping available an" }, - { 228, 122, "aditional change. Please call for exact pricing." }, - { 228, 161, "To place an order: 1-800-OPTIK-99" }, + { 255, 30, STR_IGOR_OBJECTIVE_UIKOKAHONIA }, + { 228, 42, STR_SHAREWARE_VERSION }, + { 228, 70, STR_SHAREWARE_SHIPPING_1 }, + { 228, 85, STR_SHAREWARE_SHIPPING_2 }, + { 228, 96, STR_SHAREWARE_SHIPPING_3 }, + { 228, 111, STR_SHAREWARE_SHIPPING_4 }, + { 228, 122, STR_SHAREWARE_SHIPPING_5 }, + { 228, 161, STR_SHAREWARE_PLACE_ORDER }, // 953 - { 255, 30, "\"Igor. Objective Uikokahonia\"" }, - { 228, 42, "Shareware version" }, - { 228, 70, "Three easy ways to order:" }, - { 228, 85, "- Call 1-800-678-4599 (orders only) and use" }, - { 228, 96, "Your Visa, Mastercard or Discover card." }, - { 228, 110, "- Fax your order (please include credit card" }, - { 228, 121, "information) to (412) 381-1031" }, - { 228, 161, "To place an order: 1-800-OPTIK-99" }, + { 255, 30, STR_IGOR_OBJECTIVE_UIKOKAHONIA }, + { 228, 42, STR_SHAREWARE_VERSION }, + { 228, 70, STR_SHAREWARE_SHIPPING_6 }, + { 228, 85, STR_SHAREWARE_SHIPPING_7 }, + { 228, 96, STR_SHAREWARE_SHIPPING_8 }, + { 228, 110, STR_SHAREWARE_SHIPPING_9 }, + { 228, 121, STR_SHAREWARE_SHIPPING_10 }, + { 228, 161, STR_SHAREWARE_PLACE_ORDER }, // 954 - { 255, 30, "\"Igor. Objective Uikokahonia\"" }, - { 228, 42, "Shareware version" }, - { 228, 74, "- Mail a check or money order to:" }, - { 228, 85, "Optik Software Inc." }, - { 228, 96, "1000 Napor Boulevard" }, - { 228, 107, "Pittsburgh, PA. 15205" }, - { 228, 118, "USA" }, - { 228, 161, "To place an order: 1-800-OPTIK-99" }, + { 255, 30, STR_IGOR_OBJECTIVE_UIKOKAHONIA }, + { 228, 42, STR_SHAREWARE_VERSION }, + { 228, 74, STR_SHAREWARE_OPTIK_ADDRESS_1 }, + { 228, 85, STR_SHAREWARE_OPTIK_ADDRESS_2 }, + { 228, 96, STR_SHAREWARE_OPTIK_ADDRESS_3 }, + { 228, 107, STR_SHAREWARE_OPTIK_ADDRESS_4 }, + { 228, 118, STR_SHAREWARE_OPTIK_ADDRESS_5 }, + { 228, 161, STR_SHAREWARE_PLACE_ORDER }, // 955 - { 255, 30, "\"Igor. Objective Uikokahonia\"" }, - { 240, 42, "Shareware version" }, - { 240, 79, "Optik Software Inc." }, - { 240, 90, "Orders only: 1-800-OPTIK-99 (67845-99)" }, - { 240, 101, "Fax: (412) 381-1031" }, - { 240, 112, "E-mail: optiksoft\xFA""aol.com" }, - { 240, 161, "To place an order: 1-800-OPTIK-99" }, + { 255, 30, STR_IGOR_OBJECTIVE_UIKOKAHONIA }, + { 240, 42, STR_SHAREWARE_VERSION }, + { 240, 79, STR_SHAREWARE_OPTIK_ADDRESS_6 }, + { 240, 90, STR_SHAREWARE_OPTIK_ADDRESS_7 }, + { 240, 101, STR_SHAREWARE_OPTIK_ADDRESS_8 }, + { 240, 112, STR_SHAREWARE_OPTIK_ADDRESS_9 }, + { 240, 161, STR_SHAREWARE_PLACE_ORDER }, // 956 - { 255, 30, "\"Igor. Objective Uikokahonia\"" }, - { 228, 42, "Shareware version" }, - { 228, 64, "A game by" }, - { 228, 80, "PENDULO STUDIOS" }, - { 228, 91, "P.O. Box 21091" }, - { 228, 102, "28009 Madrid" }, - { 228, 113, "Spain" }, - { 228, 128, "E-mail: 100641.1737\xFA""compuserve.com" }, - { 228, 161, "To place an order: 1-800-OPTIK-99" } + { 255, 30, STR_IGOR_OBJECTIVE_UIKOKAHONIA }, + { 228, 42, STR_SHAREWARE_VERSION }, + { 228, 64, STR_SHAREWARE_PENDULO_ADDRESS_1 }, + { 228, 80, STR_SHAREWARE_PENDULO_ADDRESS_2 }, + { 228, 91, STR_SHAREWARE_PENDULO_ADDRESS_3 }, + { 228, 102, STR_SHAREWARE_PENDULO_ADDRESS_4 }, + { 228, 113, STR_SHAREWARE_PENDULO_ADDRESS_5 }, + { 228, 128, STR_SHAREWARE_PENDULO_ADDRESS_6 }, + { 228, 161, STR_SHAREWARE_PLACE_ORDER } }; void IgorEngine::PART_95() { + hideCursor(); memset(_currentPalette, 0, 768); setPaletteRange(0, 255); memset(_screenVGA, 0, 64000); @@ -159,9 +160,12 @@ void IgorEngine::PART_95() { } break; } - for (int i = startStr; i <= endStr; ++i) { - const SharewareScreenString *s = &STR_SHAREWARE[i]; - drawString(_screenVGA, s->str, (320 - getStringWidth(s->str)) / 2, s->y, s->color, 0, 0); + if (startStr != -1) { + for (int i = startStr; i <= endStr; ++i) { + const SharewareScreenString *s = &STR_SHAREWARE[i]; + const char *str = getString(s->strId); + drawString(_screenVGA, str, (320 - getStringWidth(str)) / 2, s->y, s->color, 0, 0); + } } fadeInPalette(768); for (int i = 0; !_inputVars[kInputEscape] && i < 3000; ++i) { diff --git a/engines/igor/parts/part_main.cpp b/engines/igor/parts/part_main.cpp index f3c99b8de1..9d3abe429d 100644 --- a/engines/igor/parts/part_main.cpp +++ b/engines/igor/parts/part_main.cpp @@ -29,11 +29,12 @@ namespace Igor { -void IgorEngine::ADD_DIALOGUE_TEXT(int num, int count) { +void IgorEngine::ADD_DIALOGUE_TEXT(int num, int count, int sound) { assert(_dialogueTextsCount < MAX_DIALOGUE_TEXTS); DialogueText *dt = &_dialogueTextsTable[_dialogueTextsCount]; dt->num = num; dt->count = count; + dt->sound = sound; ++_dialogueTextsCount; } @@ -461,7 +462,6 @@ void IgorEngine::EXEC_MAIN_ACTION_38() { loadData(IMG_NewsPaper, _screenVGA); loadData(PAL_NewsPaper, _paletteBuffer); fadeInPalette(624); -// mov _dialogueColor+3, 0 WalkData *wd = &_walkData[_walkDataLastIndex - 1]; int _walkDataCurrentPosX2 = wd->x; int _walkDataCurrentPosY2 = wd->y; @@ -494,7 +494,6 @@ void IgorEngine::EXEC_MAIN_ACTION_38() { } fadeInPalette(624); _objectsState[2] = 1; -// mov _dialogueColor+3, 63 } void IgorEngine::EXEC_MAIN_ACTION_43() { @@ -508,7 +507,6 @@ void IgorEngine::EXEC_MAIN_ACTION_43() { loadData(IMG_PhotoHarrisonMargaret, _screenVGA); loadData(PAL_PhotoHarrisonMargaret, _paletteBuffer); fadeInPalette(624); -// mov _dialogueColor+3, 0 WalkData *wd = &_walkData[_walkDataLastIndex - 1]; int _walkDataCurrentPosX2 = wd->x; int _walkDataCurrentPosY2 = wd->y; @@ -531,7 +529,6 @@ void IgorEngine::EXEC_MAIN_ACTION_43() { free(tmp); } fadeInPalette(624); -// mov _dialogueColor+3, 63 } void IgorEngine::EXEC_MAIN_ACTION_54() { @@ -573,6 +570,15 @@ void IgorEngine::EXEC_MAIN_ACTION_54() { fadeInPalette(624); } +void IgorEngine::CHECK_FOR_END_OF_DEMO() { + if (_demoActionsCounter >= 10) { + ADD_DIALOGUE_TEXT(104, 2); + ADD_DIALOGUE_TEXT(106, 2); + SET_DIALOGUE_TEXT(1, 2); + startIgorDialogue(); + } +} + void IgorEngine::SET_PAL_208_96_1() { memcpy(_paletteBuffer + 208 * 3, PAL_96_1, 96); } @@ -966,7 +972,7 @@ void IgorEngine::PART_MAIN() { _gameState.nextMusicCounter = 0; } } while (_currentPart != kInvalidPart && !_eventQuitGame); - if (_gameVersion == kIdEngDemo100 || _gameVersion == kIdEngDemo110) { + if (_gameFlags & kFlagDemo) { for (_currentPart = kSharewarePart; !_eventQuitGame && _currentPart <= kSharewarePart + 6; ++_currentPart) { PART_95(); } diff --git a/engines/igor/resource_ids.h b/engines/igor/resource_ids.h index e684a50e62..826e68dc6a 100644 --- a/engines/igor/resource_ids.h +++ b/engines/igor/resource_ids.h @@ -331,3 +331,57 @@ #define PAL_PhotoHarrisonMargaret 331 #define IMG_InventoryPanel 332 #define IMG_Objects 333 +#define DAT_Physicsclassroom 334 +#define FRM_IgorDirBack2 335 +#define FRM_IgorDirRight2 336 +#define FRM_IgorDirFront2 337 +#define FRM_IgorDirLeft2 338 +#define FRM_IgorHead2 339 +#define STR_COPYRIGHT_1995 340 +#define STR_COPYRIGHT_1994 341 +#define STR_BOTTLE_OF_WHISKY 342 +#define STR_EMPTY_BOTTLE 343 +#define STR_BOTTLE_OF_WATER 344 +#define STR_LIZARD 345 +#define STR_FAT_LIZARD 346 +#define STR_CAROLINE_FOLDER 347 +#define STR_PHILIP_FOLDER 348 +#define STR_STATUETTE 349 +#define STR_REWARD 350 +#define STR_IGOR_OBJECTIVE_UIKOKAHONIA 351 +#define STR_SHAREWARE_VERSION 352 +#define STR_SHAREWARE_PLACE_ORDER 353 +#define STR_SHAREWARE_TEXT1 354 +#define STR_SHAREWARE_TEXT2 355 +#define STR_SHAREWARE_TEXT3 356 +#define STR_SHAREWARE_TEXT4 357 +#define STR_SHAREWARE_TEXT5 358 +#define STR_SHAREWARE_ORDER_1 359 +#define STR_SHAREWARE_ORDER_2 360 +#define STR_SHAREWARE_ORDER_3 361 +#define STR_SHAREWARE_ORDER_4 362 +#define STR_SHAREWARE_SHIPPING_1 363 +#define STR_SHAREWARE_SHIPPING_2 364 +#define STR_SHAREWARE_SHIPPING_3 365 +#define STR_SHAREWARE_SHIPPING_4 366 +#define STR_SHAREWARE_SHIPPING_5 367 +#define STR_SHAREWARE_SHIPPING_6 368 +#define STR_SHAREWARE_SHIPPING_7 369 +#define STR_SHAREWARE_SHIPPING_8 370 +#define STR_SHAREWARE_SHIPPING_9 371 +#define STR_SHAREWARE_SHIPPING_10 372 +#define STR_SHAREWARE_OPTIK_ADDRESS_1 373 +#define STR_SHAREWARE_OPTIK_ADDRESS_2 374 +#define STR_SHAREWARE_OPTIK_ADDRESS_3 375 +#define STR_SHAREWARE_OPTIK_ADDRESS_4 376 +#define STR_SHAREWARE_OPTIK_ADDRESS_5 377 +#define STR_SHAREWARE_OPTIK_ADDRESS_6 378 +#define STR_SHAREWARE_OPTIK_ADDRESS_7 379 +#define STR_SHAREWARE_OPTIK_ADDRESS_8 380 +#define STR_SHAREWARE_OPTIK_ADDRESS_9 381 +#define STR_SHAREWARE_PENDULO_ADDRESS_1 382 +#define STR_SHAREWARE_PENDULO_ADDRESS_2 383 +#define STR_SHAREWARE_PENDULO_ADDRESS_3 384 +#define STR_SHAREWARE_PENDULO_ADDRESS_4 385 +#define STR_SHAREWARE_PENDULO_ADDRESS_5 386 +#define STR_SHAREWARE_PENDULO_ADDRESS_6 387 diff --git a/engines/igor/staticres.cpp b/engines/igor/staticres.cpp index b44090ce34..382c924136 100644 --- a/engines/igor/staticres.cpp +++ b/engines/igor/staticres.cpp @@ -56,620 +56,120 @@ const uint8 IgorEngine::_fontCharWidth[] = { 0x06, 0x06, 0x05, 0x06, 0x07, 0x05, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x08, 0x08, 0x06, 0x07, 0x06, 0x06, 0x05, 0x06, 0x06, 0x08, 0x07, 0x07, 0x07, 0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x05, 0x07, 0x07, 0x07, 0x06, 0x06, 0x07, 0x07, 0x04, 0x04, 0x03, - 0x03, 0x06, 0x03, 0x03, 0x07, 0x07, 0x08, 0x05, 0x05, 0x08, 0x04, 0x06, 0x08, 0x07, 0x05 + 0x03, 0x06, 0x03, 0x03, 0x07, 0x07, 0x08, 0x05, 0x05, 0x08, 0x04, 0x06, 0x08, 0x07, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00 }; -const uint8 IgorEngine::_fontData[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, - 0x01, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x02, - 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, - 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, - 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, - 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, - 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, - 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, - 0x02, 0x03, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, - 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x02, 0x02, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, - 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, 0x03, - 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x02, 0x02, 0x03, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, - 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x03, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, - 0x02, 0x03, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, - 0x03, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x02, 0x02, 0x03, 0x00, 0x02, 0x01, 0x01, - 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, - 0x01, 0x01, 0x03, 0x02, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, - 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x02, - 0x01, 0x01, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, - 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, - 0x03, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, - 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x01, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x00, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, - 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, - 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, - 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, - 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x01, 0x01, 0x01, - 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, - 0x01, 0x03, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, - 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x02, - 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, - 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x01, 0x03, - 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x03, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, - 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, - 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, - 0x03, 0x02, 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, - 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, - 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, - 0x01, 0x03, 0x03, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, - 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, - 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, - 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x03, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, - 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, - 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, - 0x00, 0x00, 0x02, 0x02, 0x03, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, - 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, - 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, - 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x03, - 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, - 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, - 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x03, - 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x03, 0x01, 0x01, 0x03, 0x01, 0x03, 0x00, 0x02, 0x02, 0x03, - 0x01, 0x01, 0x03, 0x02, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00, - 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, - 0x01, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, - 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, - 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, - 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, - 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, - 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, - 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, - 0x01, 0x01, 0x03, 0x01, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x03, 0x02, 0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x03, 0x03, 0x02, - 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x00, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02, - 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, - 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, - 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, - 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, - 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, - 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x03, 0x02, - 0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x03, 0x01, 0x01, 0x01, 0x03, 0x03, - 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, - 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x01, - 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, - 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, - 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x03, - 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, - 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, - 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, - 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x00, - 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, - 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x03, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, - 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, - 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, - 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x03, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, - 0x03, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, - 0x01, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, - 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, 0x03, 0x01, 0x01, - 0x03, 0x02, 0x01, 0x01, 0x03, 0x01, 0x03, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x03, - 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, - 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, - 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, - 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, - 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, - 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x01, 0x01, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x00, - 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, - 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, - 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, - 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, - 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, - 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, - 0x02, 0x01, 0x01, 0x03, 0x01, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x01, 0x03, 0x01, - 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, - 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, - 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, - 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, - 0x01, 0x03, 0x03, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, - 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, - 0x00, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, - 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x03, 0x03, 0x01, 0x01, 0x03, - 0x03, 0x00, 0x02, 0x02, 0x03, 0x01, 0x01, 0x03, 0x03, 0x02, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, - 0x03, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, - 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, - 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, - 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, - 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, - 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, - 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x02, 0x00, 0x00, 0x02, - 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, - 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, - 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, - 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, - 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, - 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x01, 0x01, 0x03, - 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, - 0x03, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, - 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, - 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x02, 0x02, - 0x02, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, - 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x03, 0x02, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x01, 0x01, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x01, - 0x01, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x01, 0x01, 0x02, - 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, - 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, - 0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, - 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, - 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x03, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, - 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, - 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x02, 0x01, 0x01, 0x03, - 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, - 0x01, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, - 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, - 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, - 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x01, 0x01, - 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x02, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, - 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, - 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, - 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, - 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x01, 0x01, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, - 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, - 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, - 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, - 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, - 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x01, 0x01, - 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, - 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, - 0x01, 0x01, 0x03, 0x02, 0x02, 0x03, 0x03, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, - 0x03, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, - 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x01, 0x01, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, - 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, - 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, - 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x02, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x00, - 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x03, - 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x01, 0x01, - 0x01, 0x03, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x01, 0x01, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, - 0x01, 0x02, 0x01, 0x01, 0x02, 0x00, 0x02, 0x02, 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, - 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x03, 0x02, - 0x02, 0x03, 0x03, 0x00, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, - 0x03, 0x03, 0x01, 0x01, 0x02, 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x03, 0x00, 0x02, - 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x03, 0x01, 0x03, 0x03, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00 +const uint32 IgorEngine::_fontData[] = { + 0x000000, 0x000AA0, 0x002968, 0x00A55A, 0x0097D6, 0x00D6D6, 0x00D556, 0x00D7D6, 0x00D6D6, 0x00FAFA, + 0x000000, 0x000000, 0x00AAAA, 0x029556, 0x025F5A, 0x035B58, 0x03D558, 0x025F58, 0x035B5A, 0x03D556, + 0x00FFFA, 0x000000, 0x000000, 0x00AAA8, 0x02955A, 0x025FD6, 0x03E8D6, 0x0000D6, 0x02A8D6, 0x025AD6, + 0x03D55A, 0x00FFE8, 0x000000, 0x000000, 0x002AAA, 0x00A556, 0x02975A, 0x025B58, 0x035B58, 0x035B58, + 0x03D75A, 0x00F556, 0x003FFA, 0x000000, 0x000000, 0x02AAAA, 0x025556, 0x037F5A, 0x03A758, 0x003558, + 0x02B758, 0x027B5A, 0x035556, 0x03FFFA, 0x000000, 0x000000, 0x02AAAA, 0x025556, 0x037F5A, 0x03A758, + 0x003558, 0x003758, 0x003B5A, 0x000956, 0x000FFA, 0x000000, 0x000000, 0x00AAA0, 0x029568, 0x025F5A, + 0x03EBD6, 0x02AAD6, 0x0256D6, 0x035A5A, 0x035568, 0x03FFA0, 0x000000, 0x000000, 0x00AAAA, 0x009696, + 0x00D6D6, 0x00D6D6, 0x00D556, 0x00D7D6, 0x00D6D6, 0x00D6D6, 0x00FAFA, 0x000000, 0x000000, 0x00AAAA, + 0x009556, 0x00FD7A, 0x000D60, 0x000D60, 0x000D60, 0x00AD6A, 0x009556, 0x00FFFA, 0x000000, 0x000000, + 0x02AA80, 0x025580, 0x03D680, 0x00D600, 0x00D6AA, 0x00D696, 0x00D6D6, 0x00F55A, 0x003FE8, 0x000000, + 0x000000, 0x02AAAA, 0x025A56, 0x035B5A, 0x03D758, 0x00F558, 0x029758, 0x025B5A, 0x035B56, 0x03EBFA, + 0x000000, 0x000000, 0x000AAA, 0x000956, 0x000F5A, 0x000358, 0x02A358, 0x026B58, 0x035B5A, 0x035556, + 0x03FFFA, 0x000000, 0x000000, 0x02A8AA, 0x025A96, 0x035656, 0x035556, 0x035556, 0x035DD6, 0x035ED6, + 0x0358D6, 0x03E8FA, 0x000000, 0x000000, 0x02A8AA, 0x025A96, 0x035A56, 0x035956, 0x0355D6, 0x0356D6, + 0x035AD6, 0x0358D6, 0x03E8FA, 0x000000, 0x000000, 0x002AA0, 0x00A568, 0x02975A, 0x025BD6, 0x0358D6, + 0x035AD6, 0x03D65A, 0x00F568, 0x003FA0, 0x000000, 0x000000, 0x00AAAA, 0x029556, 0x025F5A, 0x035B58, + 0x03D558, 0x00FF58, 0x000B5A, 0x000956, 0x000FFA, 0x000000, 0x000000, 0x002AA8, 0x00A55A, 0x0097D6, + 0x00D6D6, 0x00D6D6, 0x00D6D6, 0x00D5D6, 0x00F55A, 0x0095E8, 0x00FE80, 0x000000, 0x00AAAA, 0x029556, + 0x025F5A, 0x035B58, 0x03D558, 0x025F58, 0x035B5A, 0x035B56, 0x03EBFA, 0x000000, 0x000000, 0x002AA8, + 0x00A55A, 0x0097D6, 0x00FAD6, 0x00A55A, 0x0097EA, 0x00D696, 0x00F55A, 0x003FE8, 0x000000, 0x000000, + 0x00AAAA, 0x009556, 0x00DD76, 0x00ED7A, 0x000D60, 0x000D60, 0x002D68, 0x002558, 0x003FE8, 0x000000, + 0x000000, 0x00AAAA, 0x009696, 0x00D6D6, 0x00D6D6, 0x00D6D6, 0x00D6D6, 0x00D6D6, 0x00F55A, 0x003FE8, + 0x000000, 0x000000, 0x00AAAA, 0x009696, 0x00D6D6, 0x00D6D6, 0x00D6D6, 0x00D6D6, 0x00F55A, 0x003D68, + 0x000FA0, 0x000000, 0x000000, 0x02A8AA, 0x025896, 0x0358D6, 0x035AD6, 0x0359D6, 0x035556, 0x035756, + 0x03DBDA, 0x00E8E8, 0x000000, 0x000000, 0x02A8AA, 0x025896, 0x035AD6, 0x03D65A, 0x00F568, 0x02975A, + 0x025BD6, 0x0358D6, 0x03E8FA, 0x000000, 0x000000, 0x00AAAA, 0x009696, 0x00D6D6, 0x00D6D6, 0x00F55A, + 0x003D68, 0x002D68, 0x002558, 0x003FE8, 0x000000, 0x000000, 0x02AAAA, 0x025556, 0x0357D6, 0x03D5F6, + 0x02F57A, 0x027D5A, 0x035F56, 0x035556, 0x03FFFA, 0x000000, 0x000000, 0x000000, 0x000000, 0x000AA8, + 0x002958, 0x0025E8, 0x00355A, 0x0035D6, 0x00355A, 0x003FE8, 0x000000, 0x000000, 0x0000AA, 0x000096, + 0x000AD6, 0x002956, 0x0025D6, 0x0035D6, 0x0035D6, 0x003D56, 0x000FFA, 0x000000, 0x000000, 0x000000, + 0x000000, 0x000AA8, 0x00295A, 0x0025D6, 0x003ED6, 0x0025D6, 0x003D5A, 0x000FE8, 0x000000, 0x000000, + 0x002A80, 0x002580, 0x0035A8, 0x00355A, 0x0035D6, 0x0035D6, 0x0035D6, 0x00355A, 0x003FE8, 0x000000, + 0x000000, 0x000000, 0x000000, 0x000AA8, 0x00295A, 0x0025D6, 0x003556, 0x003FD6, 0x00255A, 0x003FE8, + 0x000000, 0x000000, 0x002AA0, 0x002568, 0x003F58, 0x000B5A, 0x000956, 0x000F5A, 0x000B5A, 0x000956, + 0x000FFA, 0x000000, 0x000000, 0x000000, 0x000000, 0x002AA8, 0x00255A, 0x0035D6, 0x0035D6, 0x00355A, + 0x0035EA, 0x003D56, 0x000FFA, 0x000000, 0x0000AA, 0x000096, 0x000AD6, 0x002956, 0x0025D6, 0x0035D6, + 0x0035D6, 0x0035D6, 0x003EFA, 0x000000, 0x000000, 0x0002A8, 0x000258, 0x0003EA, 0x000256, 0x00035A, + 0x000358, 0x000B5A, 0x000956, 0x000FFA, 0x000000, 0x000000, 0x002A80, 0x002580, 0x003E80, 0x002580, + 0x003580, 0x0035AA, 0x003596, 0x0035D6, 0x003D5A, 0x000FE8, 0x000000, 0x0000AA, 0x000096, 0x00AAD6, + 0x0096D6, 0x00F5D6, 0x003D56, 0x00A5D6, 0x0096D6, 0x00FAFA, 0x000000, 0x000000, 0x0002AA, 0x000256, + 0x00035A, 0x000358, 0x000358, 0x000358, 0x000B5A, 0x000956, 0x000FFA, 0x000000, 0x000000, 0x000000, + 0x000000, 0x00AAAA, 0x029656, 0x025556, 0x035DD6, 0x035DD6, 0x035ED6, 0x03E8FA, 0x000000, 0x000000, + 0x000000, 0x000000, 0x000AAA, 0x002956, 0x0025D6, 0x0035D6, 0x0035D6, 0x0035D6, 0x003EFA, 0x000000, + 0x000000, 0x000AAA, 0x000956, 0x000FFA, 0x002956, 0x0025D6, 0x0035D6, 0x0035D6, 0x0035D6, 0x003EFA, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000AA8, 0x00295A, 0x0025D6, 0x0035D6, 0x0035D6, 0x003D5A, + 0x000FE8, 0x000000, 0x000000, 0x000000, 0x000000, 0x000AAA, 0x002956, 0x0025D6, 0x0035D6, 0x003D56, + 0x000FD6, 0x0000D6, 0x0000FA, 0x000000, 0x000000, 0x000000, 0x002AA8, 0x00255A, 0x0035D6, 0x0035D6, + 0x00355A, 0x0035E8, 0x003580, 0x003E80, 0x000000, 0x000000, 0x000000, 0x002AAA, 0x002596, 0x003D5A, + 0x000F58, 0x000B5A, 0x000956, 0x000FFA, 0x000000, 0x000000, 0x000000, 0x000000, 0x002AA8, 0x00255A, + 0x003FD6, 0x00295A, 0x0025EA, 0x003D56, 0x000FFA, 0x000000, 0x000000, 0x0002A0, 0x000268, 0x002B5A, + 0x002556, 0x003F5A, 0x000358, 0x002B58, 0x002568, 0x003FA0, 0x000000, 0x000000, 0x000000, 0x000000, + 0x002AAA, 0x002596, 0x0035D6, 0x0035D6, 0x0035D6, 0x003D5A, 0x000FE8, 0x000000, 0x000000, 0x000000, + 0x000000, 0x002AAA, 0x002596, 0x0035D6, 0x0035D6, 0x003D5A, 0x000F68, 0x0003A0, 0x000000, 0x000000, + 0x000000, 0x000000, 0x02A8AA, 0x025A96, 0x0359D6, 0x035DD6, 0x035556, 0x03D75A, 0x00FBE8, 0x000000, + 0x000000, 0x000000, 0x000000, 0x02A8AA, 0x025A96, 0x03D65A, 0x00F568, 0x02975A, 0x025BD6, 0x03E8FA, + 0x000000, 0x000000, 0x000000, 0x000000, 0x002AAA, 0x002596, 0x0035D6, 0x0035D6, 0x00355A, 0x0035EA, + 0x003D56, 0x000FFA, 0x000000, 0x000000, 0x000000, 0x00AAAA, 0x009556, 0x00F5F6, 0x00BD7A, 0x009F5A, + 0x00D556, 0x00FFFA, 0x000000, 0x002A80, 0x0025A0, 0x003D60, 0x000FA8, 0x002958, 0x0025E8, 0x00355A, + 0x0035D6, 0x00355A, 0x003FE8, 0x000000, 0x002A80, 0x0025A0, 0x003D60, 0x000FA8, 0x00295A, 0x0025D6, + 0x003556, 0x003FD6, 0x00255A, 0x003FE8, 0x000000, 0x000AA0, 0x000968, 0x000F58, 0x0003EA, 0x000256, + 0x00035A, 0x000358, 0x000B5A, 0x000956, 0x000FFA, 0x000000, 0x002A80, 0x0025A0, 0x003D60, 0x000FA8, + 0x00295A, 0x0025D6, 0x0035D6, 0x0035D6, 0x003D5A, 0x000FE8, 0x000000, 0x002A80, 0x0025A0, 0x003D60, + 0x002FAA, 0x002596, 0x0035D6, 0x0035D6, 0x0035D6, 0x003D5A, 0x000FE8, 0x000000, 0x000000, 0x00AAA8, + 0x02955A, 0x025FD6, 0x0358D6, 0x0358D6, 0x0358D6, 0x035AD6, 0x03D55A, 0x00FFE8, 0x000000, 0x000000, + 0x000AA0, 0x000968, 0x000D58, 0x000D68, 0x000D60, 0x000D60, 0x00AD6A, 0x009556, 0x00FFFA, 0x000000, + 0x000000, 0x002AA8, 0x00A55A, 0x0097D6, 0x00D6FA, 0x00F568, 0x00BF5A, 0x0097D6, 0x00D556, 0x00FFFA, + 0x000000, 0x000000, 0x002AA8, 0x00A55A, 0x0097D6, 0x00D6FA, 0x00F560, 0x0097AA, 0x00D696, 0x00F55A, + 0x003FE8, 0x000000, 0x000000, 0x00AA80, 0x0095A0, 0x00D568, 0x00D75A, 0x02D7D6, 0x025556, 0x03D7FA, + 0x025580, 0x03FE80, 0x000000, 0x000000, 0x00AAAA, 0x009556, 0x00FFD6, 0x00A556, 0x0097FA, 0x00D6AA, + 0x00D696, 0x00F55A, 0x003FE8, 0x000000, 0x000000, 0x002AA0, 0x002568, 0x003F5A, 0x002BD6, 0x00A556, + 0x0097D6, 0x00D6D6, 0x00F55A, 0x003FE8, 0x000000, 0x000000, 0x00AAAA, 0x009556, 0x00D7D6, 0x00D6FA, + 0x00F5A0, 0x003D60, 0x000D60, 0x000D60, 0x000FA0, 0x000000, 0x000000, 0x002AA8, 0x00A55A, 0x0097D6, + 0x00D6D6, 0x00F55A, 0x0097D6, 0x00D6D6, 0x00F55A, 0x003FE8, 0x000000, 0x000000, 0x002AA8, 0x00A55A, + 0x0097D6, 0x00D6D6, 0x00D55A, 0x00D7E8, 0x00F5A8, 0x003D58, 0x000FE8, 0x000000, 0x000AA0, 0x000968, + 0x000F5A, 0x0003D6, 0x0000D6, 0x0000D6, 0x0000D6, 0x0002D6, 0x000A5A, 0x000968, 0x000FA0, 0x0000AA, + 0x000296, 0x000A5A, 0x000968, 0x000D60, 0x000D60, 0x000D60, 0x000D68, 0x000F5A, 0x0003D6, 0x0000FA, + 0x000000, 0x000000, 0x000000, 0x000000, 0x00AAAA, 0x009556, 0x00FFFA, 0x000000, 0x000000, 0x000000, + 0x000000, 0x000000, 0x000000, 0x000AA0, 0x000960, 0x00AD6A, 0x009556, 0x00FD7A, 0x000D60, 0x000FA0, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x00AAAA, 0x009556, 0x00FFFA, 0x009556, 0x00FFFA, + 0x000000, 0x000000, 0x000000, 0x000000, 0x002A80, 0x0025A0, 0x003D68, 0x000F5A, 0x0003D6, 0x000A5A, + 0x002968, 0x0025A0, 0x003E80, 0x000000, 0x000000, 0x0000AA, 0x000296, 0x000A5A, 0x002968, 0x0025A0, + 0x003D68, 0x000F5A, 0x0003D6, 0x0000FA, 0x000000, 0x000000, 0x00A800, 0x009A00, 0x00D680, 0x00F5A0, + 0x003D68, 0x000F5A, 0x0003D6, 0x0000F6, 0x00003A, 0x000000, 0x000000, 0x00002A, 0x0000A6, 0x000296, + 0x000A5A, 0x002968, 0x00A5A0, 0x009680, 0x00DA00, 0x00E800, 0x000000, 0x000000, 0x000000, 0x000000, + 0x000000, 0x000000, 0x000000, 0x0002A8, 0x000258, 0x00035A, 0x0003D6, 0x0000FA, 0x000000, 0x000000, + 0x000000, 0x0002A8, 0x000258, 0x000358, 0x0003E8, 0x000258, 0x00035A, 0x0003D6, 0x0000FA, 0x000000, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0000AA, 0x000096, 0x0000D6, 0x0000FA, 0x000000, + 0x000000, 0x000000, 0x000000, 0x0000AA, 0x000096, 0x0000D6, 0x0000FA, 0x000096, 0x0000D6, 0x0000FA, + 0x000000, 0x002AAA, 0x002596, 0x0035D6, 0x0035D6, 0x003EFA, 0x000000, 0x000000, 0x000000, 0x000000, + 0x000000, 0x000000, 0x000000, 0x0000AA, 0x000096, 0x0000FA, 0x000096, 0x0000D6, 0x0000D6, 0x0000D6, + 0x0000D6, 0x0000FA, 0x000000, 0x000000, 0x0000AA, 0x000096, 0x0000D6, 0x0000D6, 0x0000D6, 0x0000D6, + 0x0000FA, 0x000096, 0x0000FA, 0x000000, 0x000000, 0x000AA0, 0x000960, 0x000FA0, 0x000968, 0x000F5A, + 0x00ABD6, 0x0096D6, 0x00F55A, 0x003FE8, 0x000000, 0x000000, 0x002AA8, 0x00A55A, 0x0097D6, 0x00D6FA, + 0x00F5A0, 0x003D60, 0x000FA0, 0x000960, 0x000FA0, 0x000000, 0x02AAAA, 0x025556, 0x03FFFA, 0x025A96, + 0x035A56, 0x035956, 0x0355D6, 0x0356D6, 0x035AD6, 0x03E8FA, 0x000000, 0x000AAA, 0x000956, 0x000FD6, + 0x0000D6, 0x0000D6, 0x0000D6, 0x0000D6, 0x0000D6, 0x000AD6, 0x000956, 0x000FFA, 0x000AAA, 0x000956, + 0x000D7A, 0x000D60, 0x000D60, 0x000D60, 0x000D60, 0x000D60, 0x000D6A, 0x000D56, 0x000FFA, 0x000000, + 0x000000, 0x02AAAA, 0x02965A, 0x025556, 0x03D75A, 0x025556, 0x03D75A, 0x02FBEA, 0x000000, 0x000000, + 0x0002A8, 0x000258, 0x00035A, 0x0003D6, 0x0000FA, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, + 0x000000, 0x000000, 0x000000, 0x000000, 0x0002AA, 0x000256, 0x000356, 0x000356, 0x0003FA, 0x000000, + 0x000000, 0x000000, 0x000000, 0x002AA0, 0x00A568, 0x009758, 0x02F568, 0x025D5A, 0x03D5D6, 0x02D6D6, + 0x02595A, 0x03EFE8, 0x000000, 0x000A80, 0x0029A8, 0x00A55A, 0x0097D6, 0x00FAD6, 0x00A55A, 0x0097EA, + 0x00D696, 0x00F55A, 0x003DE8, 0x000E80, 0x000000, 0x00AAA8, 0x02955A, 0x025FD6, 0x0355D6, 0x0355D6, + 0x0355D6, 0x03FED6, 0x00A55A, 0x003FE8, 0x000000 }; const uint8 IgorEngine::_talkDelays[] = { 0, 27, 22, 17, 12, 7, 0 }; -const uint8 IgorEngine::_verbAreasTable[] = { - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 -}; - const uint8 IgorEngine::_inventoryOffsetTable[] = { 1, 8, 15, 22, 29, 36, 42, 0 }; const uint8 IgorEngine::_inventoryActionsTable[] = { diff --git a/tools/create_igortbl/create_igortbl.c b/tools/create_igortbl/create_igortbl.c index 06f12d968d..e5225c9bfb 100644 --- a/tools/create_igortbl/create_igortbl.c +++ b/tools/create_igortbl/create_igortbl.c @@ -51,20 +51,20 @@ struct ResourceEntry { uint32 size; }; -static const struct ResourceEntry _resourceEntriesEngDemo100[] = { +static struct ResourceEntry _resourceEntriesEngDemo100[] = { #include "resource_en_demo100.h" }; -static const struct ResourceEntry _resourceEntriesEngDemo110[] = { +static struct ResourceEntry _resourceEntriesEngDemo110[] = { #include "resource_en_demo110.h" }; -static const struct ResourceEntry _resourceEntriesSpaCd[] = { +static struct ResourceEntry _resourceEntriesSpaCd[] = { #include "resource_sp_cdrom.h" }; -static const struct { - const struct ResourceEntry *p; +static struct { + struct ResourceEntry *p; int count; } _resourceEntriesList[] = { { _resourceEntriesEngDemo100, TABLE_SIZE(_resourceEntriesEngDemo100) }, @@ -81,7 +81,7 @@ static const uint32 _soundEntriesSpaCd[] = { #include "fsd_sp_cdrom.h" }; -static const struct { +static struct { const uint32 *p; int count; } _soundEntriesList[] = { @@ -97,18 +97,18 @@ enum { }; struct StringEntry { - uint8 id; + int id; uint8 language; const char *str; }; -static const struct StringEntry _stringEntries[] = { +static struct StringEntry _stringEntries[] = { #include "strings.h" }; struct GameVersion { uint32 borlandOverlaySize; - const struct ResourceEntry *resourceEntries; + struct ResourceEntry *resourceEntries; const uint32 *soundEntries; }; @@ -119,7 +119,7 @@ static const struct GameVersion _gameVersions[] = { }; static const uint32 ITBL_TAG = 0x4954424C; -static const uint32 CURRENT_VERSION = 2; +static const uint32 CURRENT_VERSION = 3; static const uint32 DEFAULT_OFFSET = 0x12345678; struct TablePtrOffset { @@ -165,9 +165,14 @@ static void writeUint32BE(FILE *fp, uint32 value) { writeUint16BE(fp, (uint16)(value & 0xFFFF)); } -static void writeResourceEntriesTable(FILE *fp, const struct ResourceEntry *re, int count) { +int compareResourceEntry(const void *a, const void *b) { + return ((struct ResourceEntry *)a)->id - ((struct ResourceEntry *)b)->id; +} + +static void writeResourceEntriesTable(FILE *fp, struct ResourceEntry *re, int count) { int i; + qsort(re, count, sizeof(struct ResourceEntry), compareResourceEntry); writeUint16BE(fp, count); for (i = 0; i < count; ++i, ++re) { writeUint16BE(fp, re->id); @@ -185,15 +190,21 @@ static void writeSoundEntriesTable(FILE *fp, const uint32 *fsd, int count) { } } -static void writeStringEntriesTable(FILE *fp, const struct StringEntry *se, int count) { +int compareStringEntry(const void *a, const void *b) { + return ((struct StringEntry *)a)->id - ((struct StringEntry *)b)->id; +} + +static void writeStringEntriesTable(FILE *fp, struct StringEntry *se, int count) { int i, len; + qsort(se, count, sizeof(struct StringEntry), compareStringEntry); writeUint16BE(fp, count); for (i = 0; i < count; ++i, ++se) { - writeByte(fp, se->id); + writeUint16BE(fp, se->id); writeByte(fp, se->language); len = strlen(se->str); assert(len < 256); + writeByte(fp, len); fwrite(se->str, 1, len, fp); } } diff --git a/tools/create_igortbl/resource_sp_cdrom.h b/tools/create_igortbl/resource_sp_cdrom.h index f3f446b6de..80e2cbcda9 100644 --- a/tools/create_igortbl/resource_sp_cdrom.h +++ b/tools/create_igortbl/resource_sp_cdrom.h @@ -1,8 +1,27 @@ +{ FRM_PhysicsClassroom1, 0x19d541, 3100 }, +{ ANM_PhilipVodka, 0x19e46f, 24175 }, +{ AOF_PhilipVodka, 0x1a42de, 80 }, { TXT_PhilipRoom, 0x1a4a75, 1191 }, { IMG_PhilipRoom, 0x1a4f1c, 46080 }, { PAL_PhilipRoom, 0x1b031c, 768 }, { MSK_PhilipRoom, 0x1b061c, 3 }, { BOX_PhilipRoom, 0x1b061f, 1280 }, +{ FRM_ChemistryClassroom1, 0x1d1191, 14 }, +{ FRM_ChemistryClassroom2, 0x1d119f, 3332 }, +{ DAT_Physicsclassroom, 0x3a1960, 6017 }, +{ TXT_PhysicsClassroom, 0x3a55a2, 1141 }, +{ IMG_PhysicsClassroom, 0x3a5a17, 46080 }, +{ PAL_PhysicsClassroom, 0x3b0e17, 624 }, +{ MSK_PhysicsClassroom, 0x3b1087, 1557 }, +{ BOX_PhysicsClassroom, 0x3b169c, 1280 }, +{ DAT_ChemistryClassroom, 0x3b4d8b, 6345 }, +{ TXT_ChemistryClassroom, 0x3b8ca2, 1233 }, +{ IMG_ChemistryClassroom, 0x3b9173, 46080 }, +{ PAL_ChemistryClassroom, 0x3c4573, 624 }, +{ MSK_ChemistryClassroom, 0x3c47e3, 1980 }, +{ BOX_ChemistryClassroom, 0x3c4f9f, 1280 }, +{ FRM_MenToilets1, 0x3d4159, 3038 }, +{ FRM_MenToilets2, 0x3d4d37, 1624 }, { DAT_CollegeStairsSecondFloor, 0x407c47, 6393 }, { FRM_CollegeStairsSecondFloor1, 0x40b7a3, 2756 }, { FRM_CollegeStairsSecondFloor2, 0x40c267, 11136 }, @@ -24,6 +43,11 @@ { FRM_CollegeCorridorMissBarrymore1, 0x448da3, 3250 }, { FRM_CollegeCorridorMissBarrymore2, 0x449a55, 5280 }, { FRM_CollegeCorridorMissBarrymore3, 0x44aef5, 10824 }, +{ TXT_CollegeCorridorMissBarrymore, 0x44e0a2, 1405 }, +{ IMG_CollegeCorridorMissBarrymore, 0x44e61f, 46080 }, +{ PAL_CollegeCorridorMissBarrymore, 0x459a1f, 624 }, +{ MSK_CollegeCorridorMissBarrymore, 0x459c8f, 2484 }, +{ BOX_CollegeCorridorMissBarrymore, 0x45a643, 1280 }, { DAT_CollegeCorridorAnnouncementBoard, 0x45de90, 5973 }, { FRM_CollegeCorridorAnnouncementBoard1, 0x461570, 2392 }, { FRM_CollegeCorridorAnnouncementBoard2, 0x461ec8, 6944 }, @@ -51,6 +75,8 @@ { PAL_CollegeCorridorCaroline, 0x4a789d, 624 }, { MSK_CollegeCorridorCaroline, 0x4a7b0d, 2151 }, { DAT_CollegeCorridorLucas, 0x4ab255, 6109 }, +{ FRM_SpringBridge1, 0x4b16f4, 24 }, +{ FRM_SpringBridge2, 0x4b170c, 4410 }, { TXT_CollegeCorridorLucas, 0x4b2fa2, 1333 }, { IMG_CollegeCorridorLucas, 0x4b34d7, 46080 }, { PAL_CollegeCorridorLucas, 0x4be8d7, 624 }, @@ -75,6 +101,7 @@ { PAL_CollegeLockers, 0x4fd1bb, 624 }, { MSK_CollegeLockers, 0x4fd42b, 2235 }, { BOX_CollegeLockers, 0x4fdce6, 1280 }, +{ DAT_MenToilets, 0x5015d7, 6465 }, { DAT_WomenToilets, 0x508bfe, 6385 }, { FRM_WomenToilets1, 0x50c907, 854 }, { FRM_WomenToilets2, 0x50cc5d, 12 }, @@ -86,12 +113,57 @@ { PAL_WomenToilets, 0x51cc24, 624 }, { MSK_WomenToilets, 0x51ce94, 2022 }, { BOX_WomenToilets, 0x51d67a, 1280 }, +{ TXT_MenToilets, 0x51e3a2, 1346 }, +{ IMG_MenToilets, 0x51e8e4, 46080 }, +{ PAL_MenToilets, 0x529ce4, 624 }, +{ MSK_MenToilets, 0x529f54, 1980 }, +{ BOX_MenToilets, 0x52a710, 1280 }, +{ DAT_OutsideCollege, 0x52f49f, 6777 }, +{ FRM_OutsideCollege1, 0x533609, 2156 }, +{ FRM_OutsideCollege2, 0x533e75, 4347 }, +{ FRM_OutsideCollege3, 0x534f70, 693 }, +{ FRM_OutsideCollege4, 0x535225, 594 }, +{ FRM_OutsideCollege5, 0x535477, 10080 }, +{ TXT_OutsideCollege, 0x5383a2, 1824 }, +{ IMG_OutsideCollege, 0x538ac2, 46080 }, +{ PAL_OutsideCollege, 0x543ec2, 624 }, +{ MSK_OutsideCollege, 0x544132, 4974 }, +{ BOX_OutsideCollege, 0x5454a0, 1280 }, +{ DAT_Laboratory, 0x54915f, 5645 }, +{ FRM_MargaretRoom1, 0x5509d4, 10853 }, +{ FRM_MargaretRoom2, 0x553439, 16 }, +{ FRM_MargaretRoom3, 0x553449, 44564 }, +{ FRM_MargaretRoom4, 0x55e25d, 80 }, { TXT_MargaretRoom, 0x55e975, 1709 }, { IMG_MargaretRoom, 0x55f022, 46080 }, { PAL_MargaretRoom, 0x56a422, 768 }, { MSK_MargaretRoom, 0x56a722, 3 }, { BOX_MargaretRoom, 0x56a725, 1280 }, { IMG_Meanwhile, 0x56aeb7, 46080 }, +{ FRM_Laboratory1, 0x5763a3, 2254 }, +{ FRM_Laboratory2, 0x576c71, 26218 }, +{ FRM_Laboratory3, 0x57d2db, 128 }, +{ TXT_Laboratory, 0x57daa2, 1482 }, +{ IMG_Laboratory, 0x57e06c, 46080 }, +{ PAL_Laboratory, 0x58946c, 624 }, +{ MSK_Laboratory, 0x5896dc, 2130 }, +{ BOX_Laboratory, 0x589f2e, 1280 }, +{ DAT_Map, 0x58c60b, 6273 }, +{ TXT_Map, 0x5902a2, 1023 }, +{ IMG_Map, 0x5906a1, 46080 }, +{ PAL_Map, 0x59baa1, 624 }, +{ MSK_Map, 0x59bd11, 1809 }, +{ BOX_Map, 0x59c422, 1280 }, +{ DAT_TobiasOffice, 0x59fc28, 5945 }, +{ ANM_TobiasOffice1, 0x5a9ad6, 2392 }, +{ AOF_TobiasOffice1, 0x5aa42e, 910 }, +{ ANM_TobiasOffice2, 0x5aa7bc, 16992 }, +{ AOF_TobiasOffice2, 0x5aea1c, 6678 }, +{ TXT_TobiasOffice, 0x5b0ba2, 2084 }, +{ IMG_TobiasOffice, 0x5b13c6, 46080 }, +{ PAL_TobiasOffice, 0x5bc7c6, 624 }, +{ MSK_TobiasOffice, 0x5bca36, 1455 }, +{ BOX_TobiasOffice, 0x5bcfe5, 1280 }, { DAT_BellChurch, 0x5bf85c, 5617 }, { FRM_BellChurch1, 0x5c2a70, 40960 }, { FRM_BellChurch2, 0x5cca70, 2100 }, @@ -100,6 +172,23 @@ { PAL_BellChurch, 0x5d9224, 624 }, { MSK_BellChurch, 0x5d9494, 861 }, { BOX_BellChurch, 0x5d97f1, 1280 }, +{ DAT_SpringBridge, 0x6a54a6, 6017 }, +{ WLK_Bridge1, 0x6a83a8, 134 }, +{ WLK_Bridge2, 0x6a842e, 2546 }, +{ DAT_SpringRock, 0x6b60ed, 6195 }, +{ WLK_Bridge3, 0x6b9153, 134 }, +{ WLK_Bridge4, 0x6b91d9, 2546 }, +{ FRM_SpringRock1, 0x6ba53e, 84 }, +{ FRM_SpringRock2, 0x6ba592, 759 }, +{ FRM_SpringRock3, 0x6ba889, 5145 }, +{ FRM_SpringRock4, 0x6bbca2, 4508 }, +{ FRM_SpringRock5, 0x6bce3e, 13364 }, +{ FRM_SpringRock6, 0x6c0272, 54 }, +{ TXT_SpringBridge, 0x6c0aa2, 1080 }, +{ IMG_SpringBridge, 0x6c0eda, 46080 }, +{ PAL_SpringBridge, 0x6cc2da, 624 }, +{ MSK_SpringBridge, 0x6cc5aa, 3936 }, +{ BOX_SpringBridge, 0x6cd50a, 1280 }, { ANM_PhilipLauraIntro, 0x7cb4d4, 29824 }, { AOF_PhilipLauraIntro, 0x7d2954, 74 }, { ANM_LauraIntro, 0x7d299e, 12793 }, @@ -120,6 +209,11 @@ { IMG_Presents, 0x80f66e, 64000 }, { PAL_OptikSoftware, 0x81f16e, 768 }, { IMG_OptikSoftware, 0x81f46e, 64000 }, +{ FRM_IgorDirBack2, 0x82f0c3, 10500 }, +{ FRM_IgorDirRight2, 0x8319c7, 13500 }, +{ FRM_IgorDirFront2, 0x834e83, 10500 }, +{ FRM_IgorDirLeft2, 0x837787, 13500 }, +{ FRM_IgorHead2, 0x83ac43, 3696 }, { FRM_IgorDirBack, 0x83bdc3, 10500 }, { FRM_IgorDirRight, 0x83e6c7, 13500 }, { FRM_IgorDirFront, 0x841b83, 10500 }, @@ -127,3 +221,5 @@ { FRM_IgorHead, 0x847943, 3696 }, { IMG_VerbsPanel, 0x848ae0, 3840 }, { TXT_MainTable, 0x8499e0, 28028 }, +{ IMG_InventoryPanel, 0x89a298, 9600 }, +{ IMG_Objects, 0x89c818, 48000 }, diff --git a/tools/create_igortbl/strings.h b/tools/create_igortbl/strings.h index 4014000dd1..86edd881d6 100644 --- a/tools/create_igortbl/strings.h +++ b/tools/create_igortbl/strings.h @@ -1,3 +1,54 @@ -//{ STR_COPYRIGHT_1995, STR_LANG_ANY, "(C) 1995 Optik Software. All rights reserved." }, -//{ STR_COPYRIGHT_1994, STR_LANG_ANY, "(C) 1994 PENDULO STUDIOS. All rights reserved." }, +{ STR_COPYRIGHT_1995, STR_LANG_ANY, "(C) 1995 Optik Software. All rights reserved." }, +{ STR_COPYRIGHT_1994, STR_LANG_ANY, "(C) 1994 PENDULO STUDIOS. All rights reserved." }, +{ STR_BOTTLE_OF_WHISKY, STR_LANG_ENG, " bottle of whisky" }, +{ STR_EMPTY_BOTTLE, STR_LANG_ENG, " empty bottle" }, +{ STR_BOTTLE_OF_WATER, STR_LANG_ENG, " bottle of water" }, +{ STR_LIZARD, STR_LANG_ENG, " lizard" }, +{ STR_FAT_LIZARD, STR_LANG_ENG, " fat lizard" }, +{ STR_CAROLINE_FOLDER, STR_LANG_ENG, " Caroline%s folder" }, +{ STR_PHILIP_FOLDER, STR_LANG_ENG, " Philip%s folder" }, +{ STR_STATUETTE, STR_LANG_ENG, " statuette" }, +{ STR_REWARD, STR_LANG_ENG, " reward" }, +{ STR_IGOR_OBJECTIVE_UIKOKAHONIA, STR_LANG_ENG, "\"Igor. Objective Uikokahonia\"" }, +{ STR_SHAREWARE_VERSION, STR_LANG_ENG, "Shareware version" }, +{ STR_SHAREWARE_PLACE_ORDER, STR_LANG_ENG, "To place an order: 1-800-OPTIK-99" }, + +{ STR_SHAREWARE_TEXT1, STR_LANG_ENG, "This is SHAREWARE!" }, +{ STR_SHAREWARE_TEXT2, STR_LANG_ENG, "You can copy this version!" }, +{ STR_SHAREWARE_TEXT3, STR_LANG_ENG, "Pass it around, give it to your friends, family," }, +{ STR_SHAREWARE_TEXT4, STR_LANG_ENG, "colleagues and upload it to your favorite BBS." }, +{ STR_SHAREWARE_TEXT5, STR_LANG_ENG, "Let everyone enjoy IGOR!" }, + +{ STR_SHAREWARE_ORDER_1, STR_LANG_ENG, "Order the full IGOR game for only $34.99 US." }, +{ STR_SHAREWARE_ORDER_2, STR_LANG_ENG, "$5.00 for shipping and handling (US & CANADA)." }, +{ STR_SHAREWARE_ORDER_3, STR_LANG_ENG, "Please add $3.00 for international shipping." }, +{ STR_SHAREWARE_ORDER_4, STR_LANG_ENG, "To place an order: 1-800-OPTIK-99" }, + +{ STR_SHAREWARE_SHIPPING_1, STR_LANG_ENG, "90 day limited warranty." }, +{ STR_SHAREWARE_SHIPPING_2, STR_LANG_ENG, "Please allow 2-4 days for delivery (US only)." }, +{ STR_SHAREWARE_SHIPPING_3, STR_LANG_ENG, "Elsewhere, up to a week or two..." }, +{ STR_SHAREWARE_SHIPPING_4, STR_LANG_ENG, "Overnight/second day shipping available an" }, +{ STR_SHAREWARE_SHIPPING_5, STR_LANG_ENG, "aditional change. Please call for exact pricing." }, +{ STR_SHAREWARE_SHIPPING_6, STR_LANG_ENG, "Three easy ways to order:" }, +{ STR_SHAREWARE_SHIPPING_7, STR_LANG_ENG, "- Call 1-800-678-4599 (orders only) and use" }, +{ STR_SHAREWARE_SHIPPING_8, STR_LANG_ENG, "Your Visa, Mastercard or Discover card." }, +{ STR_SHAREWARE_SHIPPING_9, STR_LANG_ENG, "- Fax your order (please include credit card" }, +{ STR_SHAREWARE_SHIPPING_10, STR_LANG_ENG, "information) to (412) 381-1031" }, + +{ STR_SHAREWARE_OPTIK_ADDRESS_1, STR_LANG_ENG, "- Mail a check or money order to:" }, +{ STR_SHAREWARE_OPTIK_ADDRESS_2, STR_LANG_ENG, "Optik Software Inc." }, +{ STR_SHAREWARE_OPTIK_ADDRESS_3, STR_LANG_ENG, "1000 Napor Boulevard" }, +{ STR_SHAREWARE_OPTIK_ADDRESS_4, STR_LANG_ENG, "Pittsburgh, PA. 15205" }, +{ STR_SHAREWARE_OPTIK_ADDRESS_5, STR_LANG_ENG, "USA" }, +{ STR_SHAREWARE_OPTIK_ADDRESS_6, STR_LANG_ENG, "Optik Software Inc." }, +{ STR_SHAREWARE_OPTIK_ADDRESS_7, STR_LANG_ENG, "Orders only: 1-800-OPTIK-99 (67845-99)" }, +{ STR_SHAREWARE_OPTIK_ADDRESS_8, STR_LANG_ENG, "Fax: (412) 381-1031" }, +{ STR_SHAREWARE_OPTIK_ADDRESS_9, STR_LANG_ENG, "E-mail: optiksoft\xFA""aol.com" }, + +{ STR_SHAREWARE_PENDULO_ADDRESS_1, STR_LANG_ENG, "A game by" }, +{ STR_SHAREWARE_PENDULO_ADDRESS_2, STR_LANG_ENG, "PENDULO STUDIOS" }, +{ STR_SHAREWARE_PENDULO_ADDRESS_3, STR_LANG_ENG, "P.O. Box 21091" }, +{ STR_SHAREWARE_PENDULO_ADDRESS_4, STR_LANG_ENG, "28009 Madrid" }, +{ STR_SHAREWARE_PENDULO_ADDRESS_5, STR_LANG_ENG, "Spain" }, +{ STR_SHAREWARE_PENDULO_ADDRESS_6, STR_LANG_ENG, "E-mail: 100641.1737\xFA""compuserve.com" }, -- cgit v1.2.3