aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/igor/detection.cpp14
-rw-r--r--engines/igor/igor.cpp180
-rw-r--r--engines/igor/igor.h45
-rw-r--r--engines/igor/parts/part_04.cpp21
-rw-r--r--engines/igor/parts/part_05.cpp24
-rw-r--r--engines/igor/parts/part_06.cpp5
-rw-r--r--engines/igor/parts/part_12.cpp22
-rw-r--r--engines/igor/parts/part_13.cpp20
-rw-r--r--engines/igor/parts/part_14.cpp20
-rw-r--r--engines/igor/parts/part_15.cpp38
-rw-r--r--engines/igor/parts/part_16.cpp23
-rw-r--r--engines/igor/parts/part_17.cpp27
-rw-r--r--engines/igor/parts/part_18.cpp19
-rw-r--r--engines/igor/parts/part_19.cpp19
-rw-r--r--engines/igor/parts/part_21.cpp28
-rw-r--r--engines/igor/parts/part_22.cpp19
-rw-r--r--engines/igor/parts/part_23.cpp21
-rw-r--r--engines/igor/parts/part_24.cpp21
-rw-r--r--engines/igor/parts/part_25.cpp19
-rw-r--r--engines/igor/parts/part_26.cpp21
-rw-r--r--engines/igor/parts/part_27.cpp25
-rw-r--r--engines/igor/parts/part_28.cpp24
-rw-r--r--engines/igor/parts/part_30.cpp21
-rw-r--r--engines/igor/parts/part_31.cpp21
-rw-r--r--engines/igor/parts/part_33.cpp23
-rw-r--r--engines/igor/parts/part_36.cpp22
-rw-r--r--engines/igor/parts/part_37.cpp22
-rw-r--r--engines/igor/parts/part_75.cpp10
-rw-r--r--engines/igor/parts/part_85.cpp34
-rw-r--r--engines/igor/parts/part_90.cpp6
-rw-r--r--engines/igor/parts/part_95.cpp118
-rw-r--r--engines/igor/parts/part_main.cpp18
-rw-r--r--engines/igor/resource_ids.h54
-rw-r--r--engines/igor/staticres.cpp716
-rw-r--r--tools/create_igortbl/create_igortbl.c37
-rw-r--r--tools/create_igortbl/resource_sp_cdrom.h96
-rw-r--r--tools/create_igortbl/strings.h55
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<StringEntry>::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"
@@ -57,6 +58,12 @@ enum {
};
enum {
+ kFlagDemo = 1 << 0,
+ kFlagFloppy = 1 << 1,
+ kFlagTalkie = 1 << 2
+};
+
+enum {
kStartupPart = 900,
kInvalidPart = 255,
kSharewarePart = 950,
@@ -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<StringEntry> _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" },