Import 0.3.7

This commit is contained in:
Gregory Montoir 2018-01-21 00:00:00 +08:00
parent e8f6b94ef8
commit be1f81f217
41 changed files with 772 additions and 133 deletions

View File

@ -1,6 +1,6 @@
REminiscence README
Release version: 0.3.6
Release version: 0.3.7
-------------------------------------------------------------------------------

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "game.h"

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include <math.h>
@ -117,31 +117,31 @@ uint16_t Cutscene::findTextSeparators(const uint8_t *p) {
return ret;
}
void Cutscene::drawText(int16_t x, int16_t y, const uint8_t *p, uint16_t color, uint8_t *page, uint8_t n) {
debug(DBG_CUT, "Cutscene::drawText(x=%d, y=%d, c=%d)", x, y, color);
void Cutscene::drawText(int16_t x, int16_t y, const uint8_t *p, uint16_t color, uint8_t *page, int textJustify) {
debug(DBG_CUT, "Cutscene::drawText(x=%d, y=%d, c=%d, justify=%d)", x, y, color, textJustify);
Video::drawCharFunc dcf = _vid->_drawChar;
const uint8_t *fnt = (_res->_lang == LANG_JP) ? Video::_font8Jp : _res->_fnt;
uint16_t last_sep = 0;
if (n != 0) {
if (textJustify != kTextJustifyLeft) {
last_sep = findTextSeparators(p);
if (n != 2) {
last_sep = 30;
if (textJustify != kTextJustifyCenter) {
last_sep = (_res->_lang == LANG_JP) ? 20 : 30;
}
}
const uint8_t *sep = _textSep;
y += 50;
x += 8;
x += (_res->_lang == LANG_JP) ? 0 : 8;
int16_t yy = y;
int16_t xx = x;
if (n != 0) {
xx += ((last_sep - *sep++) & 0xFE) * 4;
if (textJustify != kTextJustifyLeft) {
xx += ((last_sep - *sep++) / 2) * 8;
}
for (; *p != 0xA && *p; ++p) {
if (isNewLineChar(*p, _res)) {
yy += 8;
xx = x;
if (n != 0) {
xx += ((last_sep - *sep++) & 0xFE) * 4;
if (textJustify != kTextJustifyLeft) {
xx += ((last_sep - *sep++) / 2) * 8;
}
} else if (*p == 0x20) {
xx += 8;
@ -199,7 +199,7 @@ void Cutscene::drawCreditsText() {
} else {
_creditsTextCounter -= 10;
}
drawText((_creditsTextPosX - 1) * 8, _creditsTextPosY * 8, _textBuf, 0xEF, _page1, 0);
drawText((_creditsTextPosX - 1) * 8, _creditsTextPosY * 8, _textBuf, 0xEF, _page1, kTextJustifyLeft);
}
}
@ -397,8 +397,8 @@ void Cutscene::op_drawStringAtBottom() {
if (strId != 0xFFFF) {
const uint8_t *str = _res->getCineString(strId);
if (str) {
drawText(0, 129, str, 0xEF, _page1, 1);
drawText(0, 129, str, 0xEF, _pageC, 1);
drawText(0, 129, str, 0xEF, _page1, kTextJustifyAlign);
drawText(0, 129, str, 0xEF, _pageC, kTextJustifyAlign);
}
}
}
@ -843,7 +843,7 @@ void Cutscene::op_drawStringAtPos() {
const uint8_t *str = _res->getCineString(strId & 0xFFF);
if (str) {
uint8_t color = 0xD0 + (strId >> 0xC);
drawText(x, y, str, color, _page1, 2);
drawText(x, y, str, color, _page1, kTextJustifyCenter);
}
// 'voyage' - cutscene script redraws the string to refresh the screen
if (_id == 0x34 && (strId & 0xFFF) == 0x45) {
@ -961,7 +961,7 @@ void Cutscene::mainLoop(uint16_t offset) {
}
}
void Cutscene::load(uint16_t cutName) {
bool Cutscene::load(uint16_t cutName) {
assert(cutName != 0xFFFF);
const char *name = _namesTable[cutName & 0xFF];
switch (_res->_type) {
@ -994,6 +994,19 @@ void Cutscene::load(uint16_t cutName) {
break;
}
_res->load_CINE();
return _res->_cmd && _res->_pol;
}
void Cutscene::unload() {
switch (_res->_type) {
case kResourceTypeAmiga:
_res->unload(Resource::OT_CMP);
break;
case kResourceTypeDOS:
_res->unload(Resource::OT_CMD);
_res->unload(Resource::OT_POL);
break;
}
}
void Cutscene::prepare() {
@ -1027,8 +1040,10 @@ void Cutscene::playCredits() {
prepare();
uint16_t cutName = _offsetsTable[cut_id * 2 + 0];
uint16_t cutOff = _offsetsTable[cut_id * 2 + 1];
load(cutName);
mainLoop(cutOff);
if (load(cutName)) {
mainLoop(cutOff);
unload();
}
}
_creditsSequence = false;
}
@ -1050,7 +1065,7 @@ void Cutscene::playText(const char *str) {
}
const int y = (128 - lines * 8) / 2;
memset(_page1, 0xC0, _vid->_layerSize);
drawText(0, y, (const uint8_t *)str, 0xC1, _page1, 1);
drawText(0, y, (const uint8_t *)str, 0xC1, _page1, kTextJustifyAlign);
_stub->copyRect(0, 0, _vid->_w, _vid->_h, _page1, 256);
_stub->updateScreen(0);
@ -1106,8 +1121,12 @@ void Cutscene::play() {
}
}
} else if (cutName != 0xFFFF) {
load(cutName);
mainLoop(cutOff);
if (load(cutName)) {
mainLoop(cutOff);
unload();
}
} else if (_id == 8 && g_options.play_stone_cutscene) {
playSet(_caillouSetData, 0x5E4);
}
_vid->fullRefresh();
if (_id != 0x3D) {
@ -1115,3 +1134,138 @@ void Cutscene::play() {
}
}
}
static void readSetPalette(const uint8_t *p, uint16_t offset, uint16_t *palette) {
offset += 12;
for (int i = 0; i < 16; ++i) {
const uint16_t color = READ_BE_UINT16(p + offset); offset += 2;
palette[i] = color;
}
}
void Cutscene::drawSetShape(const uint8_t *p, uint16_t offset, int x, int y, uint8_t *paletteLut) {
const int count = READ_BE_UINT16(p + offset); offset += 2;
for (int i = 0; i < count - 1; ++i) {
offset += 5; // shape_marker
const int verticesCount = p[offset++];
const int ix = (int16_t)READ_BE_UINT16(p + offset); offset += 2;
const int iy = (int16_t)READ_BE_UINT16(p + offset); offset += 2;
uint8_t color = paletteLut[p[offset]]; offset += 2;
if (verticesCount == 255) {
int rx = (int16_t)READ_BE_UINT16(p + offset); offset += 2;
int ry = (int16_t)READ_BE_UINT16(p + offset); offset += 2;
Point pt;
pt.x = x + ix;
pt.y = y + iy;
_gfx.drawEllipse(color, false, &pt, rx, ry);
} else {
for (int i = 0; i < verticesCount; ++i) {
_vertices[i].x = x + (int16_t)READ_BE_UINT16(p + offset); offset += 2;
_vertices[i].y = y + (int16_t)READ_BE_UINT16(p + offset); offset += 2;
}
_gfx.drawPolygon(color, false, _vertices, verticesCount);
}
}
}
static uint16_t readSetShapeOffset(const uint8_t *p, int offset) {
const int count = READ_BE_UINT16(p + offset); offset += 2;
for (int i = 0; i < count - 1; ++i) {
offset += 5; // shape_marker
const int verticesCount = p[offset++];
offset += 6;
if (verticesCount == 255) {
offset += 4; // ellipse
} else {
offset += verticesCount * 4; // polygon
}
}
return offset;
}
static const int kMaxShapesCount = 16;
static const int kMaxPaletteSize = 32;
void Cutscene::playSet(const uint8_t *p, int offset) {
SetShape backgroundShapes[kMaxShapesCount];
const int bgCount = READ_BE_UINT16(p + offset); offset += 2;
assert(bgCount <= kMaxShapesCount);
for (int i = 0; i < bgCount; ++i) {
uint16_t nextOffset = readSetShapeOffset(p, offset);
backgroundShapes[i].offset = offset;
backgroundShapes[i].size = nextOffset - offset;
offset = nextOffset + 45;
}
SetShape foregroundShapes[kMaxShapesCount];
const int fgCount = READ_BE_UINT16(p + offset); offset += 2;
assert(fgCount <= kMaxShapesCount);
for (int i = 0; i < fgCount; ++i) {
uint16_t nextOffset = readSetShapeOffset(p, offset);
foregroundShapes[i].offset = offset;
foregroundShapes[i].size = nextOffset - offset;
offset = nextOffset + 45;
}
prepare();
_gfx._layer = _page1;
offset = 10;
const int frames = READ_BE_UINT16(p + offset); offset += 2;
for (int i = 0; i < frames && !_stub->_pi.quit; ++i) {
const uint32_t timestamp = _stub->getTimeStamp();
memset(_page1, 0xC0, _vid->_layerSize);
const int shapeBg = READ_BE_UINT16(p + offset); offset += 2;
const int count = READ_BE_UINT16(p + offset); offset += 2;
uint16_t paletteBuffer[kMaxPaletteSize];
memset(paletteBuffer, 0, sizeof(paletteBuffer));
readSetPalette(p, backgroundShapes[shapeBg].offset + backgroundShapes[shapeBg].size, paletteBuffer);
int paletteLutSize = 16;
uint8_t paletteLut[kMaxPaletteSize];
for (int j = 0; j < 16; ++j) {
paletteLut[j] = 0xC0 + j;
}
drawSetShape(p, backgroundShapes[shapeBg].offset, 0, 0, paletteLut);
for (int j = 0; j < count; ++j) {
const int shapeFg = READ_BE_UINT16(p + offset); offset += 2;
const int shapeX = (int16_t)READ_BE_UINT16(p + offset); offset += 2;
const int shapeY = (int16_t)READ_BE_UINT16(p + offset); offset += 2;
uint16_t tempPalette[16];
readSetPalette(p, foregroundShapes[shapeFg].offset + foregroundShapes[shapeFg].size, tempPalette);
for (int k = 0; k < 16; ++k) {
bool found = false;
for (int l = 0; l < paletteLutSize; ++l) {
if (tempPalette[k] == paletteBuffer[l]) {
found = true;
paletteLut[k] = 0xC0 + l;
break;
}
}
if (!found) {
assert(paletteLutSize < kMaxPaletteSize);
paletteLut[k] = 0xC0 + paletteLutSize;
paletteBuffer[paletteLutSize++] = tempPalette[k];
}
}
drawSetShape(p, foregroundShapes[shapeFg].offset, shapeX, shapeY, paletteLut);
}
for (int j = 0; j < paletteLutSize; ++j) {
Color c = Video::AMIGA_convertColor(paletteBuffer[j]);
_stub->setPaletteEntry(0xC0 + j, &c);
}
_stub->copyRect(0, 0, _vid->_w, _vid->_h, _page1, 256);
_stub->updateScreen(0);
const int diff = 6 * TIMER_SLICE - (_stub->getTimeStamp() - timestamp);
_stub->sleep((diff < 16) ? 16 : diff);
_stub->processEvents();
}
}

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef CUTSCENE_H__
@ -22,6 +22,17 @@ struct Cutscene {
TIMER_SLICE = 15
};
enum {
kTextJustifyLeft = 0,
kTextJustifyAlign = 1,
kTextJustifyCenter = 2,
};
struct SetShape {
uint16_t offset;
uint16_t size;
};
struct Text {
int num;
const char *str;
@ -41,6 +52,7 @@ struct Cutscene {
static const uint8_t _protectionShapeData[];
static const Text _frTextsTable[];
static const Text _enTextsTable[];
static const uint8_t _caillouSetData[];
Graphics _gfx;
Resource *_res;
@ -99,7 +111,7 @@ struct Cutscene {
void setPalette();
void setRotationTransform(uint16_t a, uint16_t b, uint16_t c);
uint16_t findTextSeparators(const uint8_t *p);
void drawText(int16_t x, int16_t y, const uint8_t *p, uint16_t color, uint8_t *page, uint8_t n);
void drawText(int16_t x, int16_t y, const uint8_t *p, uint16_t color, uint8_t *page, int textJustify);
void swapLayers();
void drawCreditsText();
void drawProtectionShape(uint8_t shapeNum, int16_t zoom);
@ -125,11 +137,15 @@ struct Cutscene {
uint8_t fetchNextCmdByte();
uint16_t fetchNextCmdWord();
void mainLoop(uint16_t offset);
void load(uint16_t cutName);
bool load(uint16_t cutName);
void unload();
void prepare();
void playCredits();
void playText(const char *str);
void play();
void drawSetShape(const uint8_t *p, uint16_t offset, int x, int y, uint8_t *paletteLut);
void playSet(const uint8_t *p, int offset);
};
#endif // CUTSCENE_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include <sys/param.h>

2
file.h
View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef FILE_H__

2
fs.cpp
View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifdef _WIN32

2
fs.h
View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef FS_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include <ctime>
@ -19,7 +19,7 @@ Game::Game(SystemStub *stub, FileSystem *fs, const char *savePath, int level, Re
_stub(stub), _fs(fs), _savePath(savePath) {
_stateSlot = 1;
_inp_demPos = 0;
_skillLevel = _menu._skill = 1;
_skillLevel = _menu._skill = kSkillNormal;
_currentLevel = _menu._level = level;
_demoBin = -1;
}
@ -96,7 +96,7 @@ void Game::run() {
if (_res._demLen == 0) {
continue;
}
_skillLevel = 1;
_skillLevel = kSkillNormal;
_currentLevel = _demoInputs[_demoBin].level;
_randSeed = 0;
_mix.stopMusic();
@ -1460,6 +1460,7 @@ void Game::loadLevelData() {
} else {
_inp_demPos = 1;
}
_printLevelCodeCounter = 0;
}
for (uint16_t i = 0; i < _res._pgeNum; ++i) {

2
game.h
View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef GAME_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "graphics.h"

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef GRAPHICS_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef INTERN_H__
@ -83,6 +83,12 @@ enum ResourceType {
kResourceTypeDOS
};
enum Skill {
kSkillEasy = 0,
kSkillNormal,
kSkillExpert,
};
struct Options {
bool bypass_protection;
bool play_disabled_cutscenes;
@ -91,6 +97,7 @@ struct Options {
bool use_tiledata;
bool use_text_cutscenes;
bool use_seq_cutscenes;
bool play_stone_cutscene;
};
struct Color {

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include <SDL.h>
@ -35,6 +35,7 @@ static int detectVersion(FileSystem *fs) {
{ "DEMO_UK.ABA", kResourceTypeDOS, "DOS (Demo)" },
{ "INTRO.SEQ", kResourceTypeDOS, "DOS CD" },
{ "LEVEL1.MAP", kResourceTypeDOS, "DOS" },
{ "LEVEL1.BNQ", kResourceTypeDOS, "DOS (Demo)" },
{ "LEVEL1.LEV", kResourceTypeAmiga, "Amiga" },
{ "DEMO.LEV", kResourceTypeAmiga, "Amiga (Demo)" },
{ 0, -1, 0 }
@ -96,6 +97,7 @@ static void initOptions() {
{ "use_tiledata", &g_options.use_tiledata },
{ "use_text_cutscenes", &g_options.use_text_cutscenes },
{ "use_seq_cutscenes", &g_options.use_seq_cutscenes },
{ "play_stone_cutscene", &g_options.play_stone_cutscene },
{ 0, 0 }
};
static const char *filename = "rs.cfg";

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "game.h"
@ -13,7 +13,7 @@
Menu::Menu(Resource *res, SystemStub *stub, Video *vid)
: _res(res), _stub(stub), _vid(vid) {
_skill = 1;
_skill = kSkillNormal;
_level = 0;
}
@ -120,11 +120,11 @@ void Menu::handleSkillScreen() {
loadPicture("menu3");
_vid->fullRefresh();
drawString(_res->getMenuString(LocaleData::LI_12_SKILL_LEVEL), 12, 4, 3);
int skill_level = _skill;
int currentSkill = _skill;
do {
drawString(_res->getMenuString(LocaleData::LI_13_EASY), 15, 14, colors[skill_level][0]);
drawString(_res->getMenuString(LocaleData::LI_14_NORMAL), 17, 14, colors[skill_level][1]);
drawString(_res->getMenuString(LocaleData::LI_15_EXPERT), 19, 14, colors[skill_level][2]);
drawString(_res->getMenuString(LocaleData::LI_13_EASY), 15, 14, colors[currentSkill][0]);
drawString(_res->getMenuString(LocaleData::LI_14_NORMAL), 17, 14, colors[currentSkill][1]);
drawString(_res->getMenuString(LocaleData::LI_15_EXPERT), 19, 14, colors[currentSkill][2]);
_vid->updateScreen();
_stub->sleep(EVENTS_DELAY);
@ -132,18 +132,24 @@ void Menu::handleSkillScreen() {
if (_stub->_pi.dirMask & PlayerInput::DIR_UP) {
_stub->_pi.dirMask &= ~PlayerInput::DIR_UP;
if (skill_level != 0) {
--skill_level;
} else {
skill_level = 2;
switch (currentSkill) {
case kSkillNormal:
currentSkill = kSkillEasy;
break;
case kSkillExpert:
currentSkill = kSkillNormal;
break;
}
}
if (_stub->_pi.dirMask & PlayerInput::DIR_DOWN) {
_stub->_pi.dirMask &= ~PlayerInput::DIR_DOWN;
if (skill_level != 2) {
++skill_level;
} else {
skill_level = 0;
switch (currentSkill) {
case kSkillEasy:
currentSkill = kSkillNormal;
break;
case kSkillNormal:
currentSkill = kSkillExpert;
break;
}
}
if (_stub->_pi.escape) {
@ -152,7 +158,7 @@ void Menu::handleSkillScreen() {
}
if (_stub->_pi.enter) {
_stub->_pi.enter = false;
_skill = skill_level;
_skill = currentSkill;
return;
}
} while (!_stub->_pi.quit);
@ -272,18 +278,24 @@ bool Menu::handleLevelScreen() {
}
if (_stub->_pi.dirMask & PlayerInput::DIR_LEFT) {
_stub->_pi.dirMask &= ~PlayerInput::DIR_LEFT;
if (currentSkill != 0) {
--currentSkill;
} else {
currentSkill = 2;
switch (currentSkill) {
case kSkillNormal:
currentSkill = kSkillEasy;
break;
case kSkillExpert:
currentSkill = kSkillNormal;
break;
}
}
if (_stub->_pi.dirMask & PlayerInput::DIR_RIGHT) {
_stub->_pi.dirMask &= ~PlayerInput::DIR_RIGHT;
if (currentSkill != 2) {
++currentSkill;
} else {
currentSkill = 0;
switch (currentSkill) {
case kSkillEasy:
currentSkill = kSkillNormal;
break;
case kSkillNormal:
currentSkill = kSkillExpert;
break;
}
}
if (_stub->_pi.escape) {

2
menu.h
View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef MENU_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "mixer.h"

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef MIXER_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "file.h"

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef MOD_PLAYER_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifdef USE_TREMOR

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef OGG_PLAYER_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "cutscene.h"

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "file.h"
@ -59,10 +59,12 @@ void Resource::init() {
_isDemo = _fs->exists("demo.lev");
break;
case kResourceTypeDOS:
if (_fs->exists(ResourceAba::FILENAME)) {
if (_fs->exists(ResourceAba::FILENAME)) { // fbdemous
_aba = new ResourceAba(_fs);
_aba->readEntries();
_isDemo = true;
} else if (!_fs->exists("LEVEL1.MAP")) { // fbdemofr (no cutscenes)
_isDemo = true;
}
break;
}
@ -304,11 +306,8 @@ static const char *getCineName(Language lang, ResourceType type) {
void Resource::load_CINE() {
const char *prefix = getCineName(_lang, _type);
debug(DBG_RES, "Resource::load_CINE('%s')", prefix);
if (_type == kResourceTypeAmiga) {
if (_isDemo) {
// file not present in demo data files
return;
}
switch (_type) {
case kResourceTypeAmiga:
if (_cine_txt == 0) {
snprintf(_entryName, sizeof(_entryName), "%sCINE.TXT", prefix);
File f;
@ -332,52 +331,61 @@ void Resource::load_CINE() {
}
p = sep + 1;
}
} else if (_isDemo) {
// file not present in demo datafiles
return;
}
if (!_cine_txt) {
error("Cannot load '%s'", _entryName);
}
}
return;
}
if (_cine_off == 0) {
snprintf(_entryName, sizeof(_entryName), "%sCINE.BIN", prefix);
File f;
if (f.open(_entryName, "rb", _fs)) {
int len = f.size();
_cine_off = (uint8_t *)malloc(len);
if (!_cine_off) {
error("Unable to allocate cinematics offsets");
}
f.read(_cine_off, len);
if (f.ioErr()) {
error("I/O error when reading '%s'", _entryName);
}
} else if (_aba) {
_cine_off = _aba->loadEntry(_entryName);
}
if (!_cine_off) {
error("Cannot load '%s'", _entryName);
}
}
if (_cine_txt == 0) {
snprintf(_entryName, sizeof(_entryName), "%sCINE.TXT", prefix);
File f;
if (f.open(_entryName, "rb", _fs)) {
int len = f.size();
_cine_txt = (uint8_t *)malloc(len);
if (!_cine_txt) {
error("Unable to allocate cinematics text data");
}
f.read(_cine_txt, len);
if (f.ioErr()) {
error("I/O error when reading '%s'", _entryName);
}
} else if (_aba) {
_cine_txt = _aba->loadEntry(_entryName);
}
if (!_cine_txt) {
error("Cannot load '%s'", _entryName);
}
break;
case kResourceTypeDOS:
if (_cine_off == 0) {
snprintf(_entryName, sizeof(_entryName), "%sCINE.BIN", prefix);
File f;
if (f.open(_entryName, "rb", _fs)) {
int len = f.size();
_cine_off = (uint8_t *)malloc(len);
if (!_cine_off) {
error("Unable to allocate cinematics offsets");
}
f.read(_cine_off, len);
if (f.ioErr()) {
error("I/O error when reading '%s'", _entryName);
}
} else if (_aba) {
_cine_off = _aba->loadEntry(_entryName);
} else if (_isDemo) {
return; // some demos do not have cutscene datafiles
}
}
if (!_cine_off) {
error("Cannot load '%s'", _entryName);
}
if (_cine_txt == 0) {
snprintf(_entryName, sizeof(_entryName), "%sCINE.TXT", prefix);
File f;
if (f.open(_entryName, "rb", _fs)) {
int len = f.size();
_cine_txt = (uint8_t *)malloc(len);
if (!_cine_txt) {
error("Unable to allocate cinematics text data");
}
f.read(_cine_txt, len);
if (f.ioErr()) {
error("I/O error when reading '%s'", _entryName);
}
} else if (_aba) {
_cine_txt = _aba->loadEntry(_entryName);
} else if (_isDemo) {
return; // some demos do not have cutscene datafiles
}
}
if (!_cine_txt) {
error("Cannot load '%s'", _entryName);
}
break;
}
}
@ -450,6 +458,28 @@ static const char *getTextBin(Language lang, ResourceType type) {
}
}
void Resource::unload(int objType) {
switch (objType) {
case OT_CMD:
free(_cmd);
_cmd = 0;
break;
case OT_POL:
free(_pol);
_pol = 0;
break;
case OT_CMP:
free(_cmd);
_cmd = 0;
free(_pol);
_pol = 0;
break;
default:
error("Unimplemented Resource::load() type %d", objType);
break;
}
}
void Resource::load(const char *objName, int objType, const char *ext) {
debug(DBG_RES, "Resource::load('%s', %d)", objName, objType);
LoadStub loadStub = 0;
@ -630,6 +660,14 @@ void Resource::load(const char *objName, int objType, const char *ext) {
}
return;
}
} else if (_isDemo) {
// some demos (fbdemofr.zip) do not have the cutscene datafiles included
switch (objType) {
case OT_CMD:
case OT_POL:
warning("Unable to load '%s' type %d", _entryName, objType);
return;
}
}
error("Cannot open '%s'", _entryName);
}

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef RESOURCE_H__
@ -183,6 +183,7 @@ struct Resource {
void load_CINE();
void load_TEXT();
void free_TEXT();
void unload(int objType);
void load(const char *objName, int objType, const char *ext = 0);
void load_CT(File *pf);
void load_FNT(File *pf);

3
rs.cfg
View File

@ -18,3 +18,6 @@ use_text_cutscenes=false
# enable playback of .SEQ cutscenes (use polygonal if false)
use_seq_cutscenes=true
# enable playback of 'CAILLOU-F.SET' cutscene
play_stone_cutscene=true

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "scaler.h"

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef SCALER_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "file.h"

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef SEQ_PLAYER_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "mixer.h"

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef SFX_PLAYER_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "game.h"
@ -5088,3 +5088,404 @@ const uint16_t SfxPlayer::_periodTable[] = {
0x153, 0x140, 0x12E, 0x11D, 0x10D, 0x0FE, 0x0F0, 0x0E2, 0x0D6, 0x0CA,
0x0BE, 0x0B4, 0x0AA, 0x0A0, 0x097, 0x08F, 0x087, 0x07F, 0x078, 0x071
};
const uint8_t Cutscene::_caillouSetData[] = {
0x50, 0x4f, 0x4c, 0x59, 0x00, 0x0a, 0x00, 0x02, 0xff, 0xff, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x02,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x00, 0x00, 0x03,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x01, 0xff, 0xb8,
0xff, 0xbd, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25,
0x00, 0x17, 0x00, 0x02, 0xff, 0xf0, 0xff, 0xcf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x26,
0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x02, 0x00, 0x1c, 0xff, 0xe2, 0x00, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00,
0x00, 0x25, 0x00, 0x17, 0x00, 0x03, 0x00, 0x03, 0xff, 0xdd, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17,
0x00, 0x03, 0x00, 0x0d, 0xff, 0xe2, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
0x00, 0x0d, 0x00, 0x26, 0x00, 0x18, 0x00, 0x00, 0x00, 0x25, 0x00, 0x17, 0x00, 0x04, 0x00, 0x02,
0xff, 0xea, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x14,
0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x0f, 0x00, 0x05, 0x00, 0x03, 0xff, 0xf2, 0x00, 0x09,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0d, 0xff, 0xed, 0x00, 0x21, 0x00, 0x00,
0x00, 0x0f, 0xff, 0xff, 0x00, 0x05, 0xff, 0xed, 0xff, 0xe5, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0xf7, 0xff, 0xf7, 0x00, 0x05, 0xff, 0xd5, 0xff, 0xdd,
0x00, 0x0d, 0xff, 0xc6, 0x00, 0x27, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x00, 0x00, 0xff, 0xcd, 0xff, 0xea, 0x00, 0x06, 0xff, 0xe6, 0xff, 0xf4, 0x00, 0x00, 0x00, 0x02,
0x00, 0x00, 0xff, 0x92, 0xff, 0xd7, 0x00, 0x06, 0xff, 0xaf, 0xff, 0xe3, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00,
0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x78,
0x00, 0x14, 0xff, 0xff, 0x00, 0x0e, 0x00, 0x99, 0x00, 0x3b, 0x00, 0x45, 0x00, 0x30, 0x00, 0x59,
0x00, 0x30, 0x00, 0x88, 0x00, 0x35, 0x00, 0x99, 0x00, 0x3c, 0x00, 0x86, 0x00, 0x37, 0x00, 0x4d,
0x00, 0x23, 0x00, 0x2a, 0x00, 0x69, 0x00, 0x47, 0x00, 0x62, 0x00, 0x54, 0x00, 0x62, 0x00, 0x6d,
0x00, 0x62, 0x00, 0x53, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x3e, 0x00, 0x92, 0x00, 0x51, 0xff, 0xff,
0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4,
0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00,
0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a,
0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4,
0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00,
0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a,
0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4,
0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00,
0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a,
0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4,
0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00,
0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a,
0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4,
0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00,
0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a,
0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4,
0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00,
0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a,
0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4,
0x00, 0x5a, 0x00, 0x03, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00,
0x00, 0xb4, 0x00, 0x5a, 0x00, 0x0a, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a,
0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x0e, 0x00, 0xbd,
0x00, 0x5a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x10, 0x00, 0xb4, 0x00, 0x5a, 0x00, 0x00,
0x00, 0xb4, 0x00, 0x5a, 0x00, 0x01, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xef, 0x00, 0x7f,
0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x35, 0x00, 0x00, 0x0b, 0x0b,
0x00, 0x35, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xef, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00,
0x01, 0x04, 0x00, 0x10, 0x00, 0x6d, 0x0b, 0x0b, 0x00, 0x10, 0x00, 0x6d, 0x00, 0xef, 0x00, 0x74,
0x00, 0xef, 0x00, 0x7f, 0x00, 0x18, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00,
0x00, 0x2a, 0x08, 0x08, 0x00, 0x70, 0x00, 0x2a, 0x00, 0x6d, 0x00, 0x2f, 0x00, 0x64, 0x00, 0x33,
0x00, 0x4e, 0x00, 0x37, 0x00, 0x33, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x2f,
0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0xff, 0xfe, 0x00, 0x19, 0x05, 0x05, 0x00, 0x68, 0x00, 0x19,
0x00, 0x71, 0x00, 0x1c, 0x00, 0x72, 0x00, 0x22, 0x00, 0x70, 0x00, 0x2a, 0x00, 0x6a, 0x00, 0x2f,
0x00, 0x57, 0x00, 0x33, 0x00, 0x44, 0x00, 0x35, 0x00, 0x20, 0x00, 0x32, 0xff, 0xfe, 0x00, 0x2e,
0xff, 0xfe, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x2f, 0x00, 0x01, 0x03, 0x03,
0x00, 0x3b, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x02, 0x00, 0x46, 0x00, 0x08, 0x00, 0x57, 0x00, 0x12,
0x00, 0x65, 0x00, 0x17, 0x00, 0x6d, 0x00, 0x1c, 0x00, 0x67, 0x00, 0x22, 0x00, 0x5f, 0x00, 0x25,
0x00, 0x4e, 0x00, 0x28, 0x00, 0x2f, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x01, 0x14, 0x00, 0x04,
0x00, 0x09, 0x02, 0x02, 0x00, 0x31, 0x00, 0x09, 0x00, 0x38, 0x00, 0x08, 0x00, 0x41, 0x00, 0x0c,
0x00, 0x46, 0x00, 0x13, 0x00, 0x4e, 0x00, 0x17, 0x00, 0x56, 0x00, 0x19, 0x00, 0x49, 0x00, 0x1f,
0x00, 0x37, 0x00, 0x21, 0x00, 0x34, 0x00, 0x22, 0x00, 0x30, 0x00, 0x25, 0x00, 0x31, 0x00, 0x27,
0x00, 0x22, 0x00, 0x28, 0x00, 0x1b, 0x00, 0x29, 0x00, 0x14, 0x00, 0x29, 0x00, 0x05, 0x00, 0x28,
0x00, 0x01, 0x00, 0x26, 0xff, 0xff, 0x00, 0x23, 0xff, 0xff, 0x00, 0x1e, 0xff, 0xff, 0x00, 0x18,
0x00, 0x02, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x0a, 0x00, 0x07, 0x04, 0x04,
0x00, 0x08, 0x00, 0x06, 0x00, 0x34, 0x00, 0x07, 0x00, 0x31, 0x00, 0x08, 0x00, 0x28, 0x00, 0x10,
0x00, 0x21, 0x00, 0x17, 0x00, 0x15, 0x00, 0x19, 0x00, 0x0d, 0x00, 0x15, 0x00, 0x07, 0x00, 0x0e,
0x00, 0x05, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x04, 0x00, 0x30, 0x05, 0x05,
0xff, 0xff, 0x00, 0x2f, 0x00, 0x21, 0x00, 0x32, 0x00, 0x0c, 0x00, 0x34, 0x00, 0x04, 0x00, 0x33,
0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x04, 0x00, 0x00, 0x07, 0x07, 0x00, 0x39, 0xff, 0xff,
0x00, 0x38, 0x00, 0x07, 0x00, 0x27, 0x00, 0x0a, 0x00, 0x11, 0x00, 0x0b, 0x00, 0x01, 0x00, 0x06,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x44, 0x00, 0x05, 0x02, 0x02,
0x00, 0x3f, 0x00, 0x04, 0x00, 0x46, 0x00, 0x0a, 0x00, 0x58, 0x00, 0x13, 0x00, 0x59, 0x00, 0x15,
0x00, 0x49, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x00, 0x2e, 0x00, 0x0c, 0x03, 0x03,
0x00, 0x3f, 0x00, 0x0c, 0x00, 0x41, 0x00, 0x0e, 0x00, 0x46, 0x00, 0x14, 0x00, 0x4e, 0x00, 0x18,
0x00, 0x54, 0x00, 0x19, 0x00, 0x50, 0x00, 0x1b, 0x00, 0x4a, 0x00, 0x1d, 0x00, 0x44, 0x00, 0x1e,
0x00, 0x38, 0x00, 0x1c, 0x00, 0x2e, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x0a,
0x00, 0x0f, 0x03, 0x03, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x08, 0x00, 0x13, 0x00, 0x10, 0x00, 0x18,
0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x5c, 0x00, 0x16, 0x02, 0x02,
0x00, 0x5a, 0x00, 0x15, 0x00, 0x57, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x1e,
0x00, 0x29, 0x09, 0x09, 0x00, 0x25, 0x00, 0x29, 0x00, 0x2f, 0x00, 0x2a, 0x00, 0x30, 0x00, 0x2f,
0x00, 0x34, 0x00, 0x34, 0x00, 0x1e, 0x00, 0x32, 0x00, 0x1e, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00,
0x01, 0x09, 0x00, 0x00, 0x00, 0x26, 0x09, 0x09, 0x00, 0x00, 0x00, 0x26, 0x00, 0x02, 0x00, 0x28,
0x00, 0x07, 0x00, 0x29, 0x00, 0x0e, 0x00, 0x2b, 0x00, 0x1d, 0x00, 0x2b, 0x00, 0x21, 0x00, 0x32,
0x00, 0x0c, 0x00, 0x34, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00,
0x01, 0x02, 0x00, 0x12, 0x00, 0x1f, 0x0a, 0x0a, 0x00, 0x1a, 0x00, 0x1f, 0x00, 0x12, 0x00, 0x1f,
0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x31, 0x00, 0x22, 0x0a, 0x0a, 0x00, 0x33, 0x00, 0x22,
0x00, 0x31, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x30, 0x00, 0x25, 0x0a, 0x0a,
0x00, 0x31, 0x00, 0x25, 0x00, 0x30, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x1f,
0x00, 0x1c, 0x0a, 0x0a, 0x00, 0x25, 0x00, 0x1c, 0x00, 0x1f, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x01, 0x02, 0x00, 0x1b, 0x00, 0x1e, 0x0a, 0x0a, 0x00, 0x1f, 0x00, 0x1e, 0x00, 0x1b, 0x00, 0x1f,
0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x19, 0x00, 0x19, 0x0a, 0x0a, 0x00, 0x19, 0x00, 0x19,
0x00, 0x1c, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x24, 0x00, 0x08, 0x03, 0x03,
0x00, 0x32, 0x00, 0x09, 0x00, 0x35, 0x00, 0x08, 0x00, 0x39, 0x00, 0x09, 0x00, 0x3e, 0x00, 0x0c,
0x00, 0x3e, 0x00, 0x10, 0x00, 0x33, 0x00, 0x10, 0x00, 0x2f, 0x00, 0x13, 0x00, 0x29, 0x00, 0x18,
0x00, 0x26, 0x00, 0x19, 0x00, 0x25, 0x00, 0x18, 0x00, 0x24, 0x00, 0x17, 0x00, 0x26, 0x00, 0x16,
0x00, 0x2a, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
0x00, 0x00, 0x00, 0x45, 0x00, 0x17, 0x00, 0x73, 0x00, 0x19, 0x00, 0x7a, 0x00, 0x19, 0x00, 0x7f,
0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x00, 0x00, 0x06, 0x88, 0x0a, 0xaa, 0x0c, 0xcc, 0x06, 0x66, 0x0a, 0xa8, 0x0e, 0xa8, 0x06, 0x6a,
0x04, 0x66, 0x08, 0x86, 0x08, 0x88, 0x04, 0x88, 0x0a, 0x8a, 0x0d, 0xdd, 0x0e, 0xee, 0x0f, 0xff,
0x00, 0x00, 0x0e, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x58, 0x00, 0x34, 0x0a,
0x0a, 0x00, 0xb1, 0x00, 0x4e, 0x00, 0x86, 0x00, 0x4e, 0x00, 0x7d, 0x00, 0x4b, 0x00, 0x77, 0x00,
0x47, 0x00, 0x74, 0x00, 0x40, 0x00, 0x74, 0x00, 0x39, 0x00, 0x7e, 0x00, 0x2f, 0x00, 0x87, 0x00,
0x2b, 0x00, 0x95, 0x00, 0x29, 0x00, 0xa3, 0x00, 0x2c, 0x00, 0xad, 0x00, 0x31, 0x00, 0xb8, 0x00,
0x39, 0x00, 0xbf, 0x00, 0x41, 0x00, 0xbd, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00,
0x68, 0x00, 0x54, 0x0e, 0x0e, 0x00, 0x84, 0x00, 0x4e, 0x00, 0xa6, 0x00, 0x4d, 0x00, 0xad, 0x00,
0x49, 0x00, 0xb2, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x67, 0x00, 0x34, 0x0b,
0x0b, 0x00, 0x83, 0x00, 0x2d, 0x00, 0x91, 0x00, 0x29, 0x00, 0x9f, 0x00, 0x2a, 0x00, 0xaa, 0x00,
0x2f, 0x00, 0x9b, 0x00, 0x37, 0x00, 0x8d, 0x00, 0x37, 0x00, 0x8a, 0x00, 0x34, 0x00, 0x00, 0x00,
0x00, 0x01, 0x08, 0x00, 0x5c, 0x00, 0x40, 0x0d, 0x0d, 0x00, 0x84, 0x00, 0x4d, 0x00, 0x7e, 0x00,
0x41, 0x00, 0x78, 0x00, 0x3e, 0x00, 0x88, 0x00, 0x35, 0x00, 0x9a, 0x00, 0x37, 0x00, 0xa3, 0x00,
0x3f, 0x00, 0xac, 0x00, 0x48, 0x00, 0xa5, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00,
0x91, 0x00, 0x4b, 0x0d, 0x0d, 0x00, 0xad, 0x00, 0x49, 0x00, 0xbf, 0x00, 0x40, 0x00, 0xbf, 0x00,
0x44, 0x00, 0xbd, 0x00, 0x49, 0x00, 0xb3, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00,
0x58, 0x00, 0x44, 0x0e, 0x0e, 0x00, 0x74, 0x00, 0x39, 0x00, 0x7c, 0x00, 0x3c, 0x00, 0x84, 0x00,
0x4e, 0x00, 0x7c, 0x00, 0x4b, 0x00, 0x77, 0x00, 0x48, 0x00, 0x74, 0x00, 0x42, 0x00, 0x00, 0x00,
0x00, 0x01, 0x06, 0x00, 0x58, 0x00, 0x34, 0x0c, 0x0c, 0x00, 0x7c, 0x00, 0x3b, 0x00, 0x74, 0x00,
0x38, 0x00, 0x7e, 0x00, 0x2e, 0x00, 0x83, 0x00, 0x2c, 0x00, 0x8f, 0x00, 0x29, 0x00, 0x8a, 0x00,
0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x70, 0x00, 0x40, 0x0c, 0x0c, 0x00, 0x8c, 0x00,
0x35, 0x00, 0x9a, 0x00, 0x37, 0x00, 0x94, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00,
0x71, 0x00, 0x51, 0x0e, 0x0e, 0x00, 0x94, 0x00, 0x4d, 0x00, 0x8d, 0x00, 0x4d, 0x00, 0x94, 0x00,
0x46, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x84, 0x00, 0x46, 0x0c, 0x0c, 0x00, 0xad, 0x00,
0x48, 0x00, 0xa0, 0x00, 0x3b, 0x00, 0xb2, 0x00, 0x3b, 0x00, 0xbc, 0x00, 0x3d, 0x00, 0xbe, 0x00,
0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x7f, 0x00, 0x42, 0x0c, 0x0c, 0x00, 0x9f, 0x00,
0x3b, 0x00, 0x9b, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x76, 0x00, 0x40, 0x0a,
0x0a, 0x00, 0x9d, 0x00, 0x36, 0x00, 0x92, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00,
0x94, 0x00, 0x42, 0x0e, 0x0e, 0x00, 0x94, 0x00, 0x46, 0x00, 0x94, 0x00, 0x42, 0x00, 0x00, 0x00,
0x00, 0x01, 0x02, 0x00, 0x79, 0x00, 0x48, 0x0c, 0x0c, 0x00, 0x95, 0x00, 0x3d, 0x00, 0x95, 0x00,
0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08,
0x88, 0x04, 0x88, 0x00, 0x00, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04,
0x48, 0x0c, 0xcc, 0x0a, 0xaa, 0x06, 0x66, 0x04, 0x44, 0x02, 0x22, 0x04, 0x66, 0x00, 0x00, 0x09,
0x00, 0x00, 0x00, 0x00, 0x01, 0x12, 0x00, 0x33, 0x00, 0x1b, 0x06, 0x06, 0x00, 0x44, 0x00, 0x24,
0x00, 0x50, 0x00, 0x1e, 0x00, 0x56, 0x00, 0x1d, 0x00, 0x64, 0x00, 0x22, 0x00, 0x75, 0x00, 0x2c,
0x00, 0x74, 0x00, 0x2e, 0x00, 0x6c, 0x00, 0x30, 0x00, 0x5e, 0x00, 0x2f, 0x00, 0x63, 0x00, 0x35,
0x00, 0x6d, 0x00, 0x3a, 0x00, 0x7c, 0x00, 0x45, 0x00, 0x8a, 0x00, 0x4e, 0x00, 0x8c, 0x00, 0x52,
0x00, 0x8a, 0x00, 0x54, 0x00, 0x86, 0x00, 0x55, 0x00, 0x79, 0x00, 0x51, 0x00, 0x6e, 0x00, 0x4b,
0x00, 0x32, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04,
0x00, 0x32, 0x00, 0x02, 0x00, 0x3c, 0x00, 0x1c, 0x00, 0x43, 0x00, 0x23, 0x00, 0x44, 0x00, 0x2b,
0x00, 0x40, 0x00, 0x39, 0x00, 0x39, 0x00, 0x42, 0x00, 0x31, 0x00, 0x48, 0x00, 0x2c, 0x00, 0x48,
0x00, 0x24, 0x00, 0x42, 0x00, 0x13, 0x00, 0x42, 0x00, 0x00, 0x00, 0x37, 0xff, 0xff, 0x00, 0x02,
0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x33, 0x00, 0x46, 0x06, 0x06, 0x00, 0x32, 0x00, 0x48,
0x00, 0x6a, 0x00, 0x4a, 0x00, 0x74, 0x00, 0x54, 0x00, 0x81, 0x00, 0x59, 0x00, 0x82, 0x00, 0x5a,
0x00, 0x82, 0x00, 0x5c, 0x00, 0x7e, 0x00, 0x5e, 0x00, 0x70, 0x00, 0x5e, 0x00, 0x6a, 0x00, 0x5b,
0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x35, 0x00, 0x48, 0x06, 0x06, 0x00, 0x34, 0x00, 0x4a,
0x00, 0x67, 0x00, 0x5b, 0x00, 0x66, 0x00, 0x5d, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x5d, 0x00, 0x5f,
0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x38, 0x00, 0x4b, 0x06, 0x06, 0x00, 0x37, 0x00, 0x4d,
0x00, 0x57, 0x00, 0x5d, 0x00, 0x53, 0x00, 0x5f, 0x00, 0x4d, 0x00, 0x5f, 0x00, 0x40, 0x00, 0x59,
0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x61, 0x00, 0x50, 0x05, 0x05, 0x00, 0x60, 0x00, 0x52,
0x00, 0x6b, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x53, 0x00, 0x57, 0x05, 0x05,
0x00, 0x52, 0x00, 0x59, 0x00, 0x57, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x5d,
0x00, 0x2a, 0x05, 0x05, 0x00, 0x5c, 0x00, 0x2c, 0x00, 0x61, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42,
0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20,
0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01,
0x07, 0x00, 0x69, 0x00, 0x36, 0x06, 0x06, 0x00, 0x75, 0x00, 0x36, 0x00, 0x8d, 0x00, 0x50, 0x00,
0x90, 0x00, 0x59, 0x00, 0x8f, 0x00, 0x5d, 0x00, 0x8c, 0x00, 0x5e, 0x00, 0x7f, 0x00, 0x56, 0x00,
0x69, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x75, 0x00, 0x35, 0x06, 0x06, 0x00,
0x75, 0x00, 0x35, 0x00, 0x97, 0x00, 0x45, 0x00, 0x9f, 0x00, 0x4f, 0x00, 0xa7, 0x00, 0x58, 0x00,
0xa7, 0x00, 0x5c, 0x00, 0xa3, 0x00, 0x5d, 0x00, 0x9a, 0x00, 0x58, 0x00, 0x93, 0x00, 0x52, 0x00,
0x8b, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x6d, 0x00, 0x1f, 0x06, 0x06, 0x00,
0x73, 0x00, 0x21, 0x00, 0x7b, 0x00, 0x20, 0x00, 0x81, 0x00, 0x1f, 0x00, 0x91, 0x00, 0x2b, 0x00,
0x93, 0x00, 0x2e, 0x00, 0x90, 0x00, 0x30, 0x00, 0xa2, 0x00, 0x3d, 0x00, 0xad, 0x00, 0x49, 0x00,
0xad, 0x00, 0x4d, 0x00, 0xab, 0x00, 0x50, 0x00, 0x99, 0x00, 0x47, 0x00, 0x6d, 0x00, 0x30, 0x00,
0x00, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x06, 0x00, 0x00, 0x04, 0x04, 0x00, 0x68, 0x00, 0x00, 0x00,
0x71, 0x00, 0x08, 0x00, 0x70, 0x00, 0x18, 0x00, 0x72, 0x00, 0x1f, 0x00, 0x70, 0x00, 0x22, 0x00,
0x74, 0x00, 0x29, 0x00, 0x76, 0x00, 0x30, 0x00, 0x73, 0x00, 0x38, 0x00, 0x6b, 0x00, 0x41, 0x00,
0x64, 0x00, 0x44, 0x00, 0x60, 0x00, 0x46, 0x00, 0x46, 0x00, 0x3e, 0x00, 0x18, 0x00, 0x17, 0x00,
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x62, 0x00, 0x43, 0x06, 0x06, 0x00,
0x69, 0x00, 0x43, 0x00, 0x7e, 0x00, 0x56, 0x00, 0x81, 0x00, 0x5c, 0x00, 0x80, 0x00, 0x5f, 0x00,
0x7c, 0x00, 0x60, 0x00, 0x65, 0x00, 0x4f, 0x00, 0x62, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x01,
0x02, 0x00, 0x82, 0x00, 0x26, 0x05, 0x05, 0x00, 0x82, 0x00, 0x26, 0x00, 0x8a, 0x00, 0x2e, 0x00,
0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x8a, 0x00, 0x2e, 0x05, 0x05, 0x00, 0x8a, 0x00, 0x2e, 0x00,
0x90, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xa0, 0x00, 0x54, 0x05, 0x05, 0x00,
0xa1, 0x00, 0x54, 0x00, 0xa0, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x9c, 0x00,
0x58, 0x05, 0x05, 0x00, 0xa0, 0x00, 0x58, 0x00, 0x9c, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08,
0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04,
0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09,
0x00, 0x87, 0x00, 0x44, 0x06, 0x06, 0x00, 0x95, 0x00, 0x44, 0x00, 0xa6, 0x00, 0x59, 0x00, 0xa5,
0x00, 0x5a, 0x00, 0xa6, 0x00, 0x62, 0x00, 0xa3, 0x00, 0x69, 0x00, 0x9e, 0x00, 0x65, 0x00, 0x9b,
0x00, 0x5d, 0x00, 0x92, 0x00, 0x58, 0x00, 0x87, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08,
0x00, 0x96, 0x00, 0x44, 0x06, 0x06, 0x00, 0x96, 0x00, 0x44, 0x00, 0xad, 0x00, 0x53, 0x00, 0xb2,
0x00, 0x5a, 0x00, 0xb4, 0x00, 0x5e, 0x00, 0xb3, 0x00, 0x68, 0x00, 0xb0, 0x00, 0x6a, 0x00, 0xae,
0x00, 0x66, 0x00, 0xae, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x97, 0x00, 0x32,
0x06, 0x06, 0x00, 0x9d, 0x00, 0x32, 0x00, 0xb2, 0x00, 0x3b, 0x00, 0xb4, 0x00, 0x3e, 0x00, 0xc0,
0x00, 0x46, 0x00, 0xc3, 0x00, 0x49, 0x00, 0xc8, 0x00, 0x51, 0x00, 0xc7, 0x00, 0x53, 0x00, 0xc3,
0x00, 0x54, 0x00, 0xc6, 0x00, 0x59, 0x00, 0xc6, 0x00, 0x5e, 0x00, 0xc5, 0x00, 0x62, 0x00, 0xc2,
0x00, 0x62, 0x00, 0xbf, 0x00, 0x5b, 0x00, 0xbd, 0x00, 0x58, 0x00, 0xaf, 0x00, 0x52, 0x00, 0x97,
0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x49, 0x00, 0x00, 0x04, 0x04, 0x00, 0x94,
0x00, 0x00, 0x00, 0x9b, 0x00, 0x0d, 0x00, 0x9c, 0x00, 0x12, 0x00, 0x9e, 0x00, 0x22, 0x00, 0x9c,
0x00, 0x2b, 0x00, 0x9c, 0x00, 0x37, 0x00, 0x98, 0x00, 0x40, 0x00, 0x91, 0x00, 0x48, 0x00, 0x85,
0x00, 0x4a, 0x00, 0x74, 0x00, 0x43, 0x00, 0x56, 0x00, 0x1b, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x04, 0x00, 0x9b, 0x00, 0x66, 0x06, 0x06, 0x00, 0x9d, 0x00, 0x66, 0x00, 0xa2,
0x00, 0x69, 0x00, 0x9d, 0x00, 0x6b, 0x00, 0x9b, 0x00, 0x69, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
0x00, 0xb6, 0x00, 0x48, 0x05, 0x05, 0x00, 0xb6, 0x00, 0x48, 0x00, 0xbf, 0x00, 0x4d, 0x00, 0x00,
0x00, 0x00, 0x01, 0x02, 0x00, 0xbf, 0x00, 0x4d, 0x05, 0x05, 0x00, 0xbf, 0x00, 0x4d, 0x00, 0xc3,
0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xb0, 0x00, 0x62, 0x05, 0x05, 0x00, 0xb0,
0x00, 0x63, 0x00, 0xb2, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xb2, 0x00, 0x5e,
0x05, 0x05, 0x00, 0xb2, 0x00, 0x62, 0x00, 0xb4, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
0x00, 0xa0, 0x00, 0x66, 0x05, 0x05, 0x00, 0xa0, 0x00, 0x66, 0x00, 0xa2, 0x00, 0x66, 0x00, 0x00,
0x00, 0x00, 0x01, 0x02, 0x00, 0xa2, 0x00, 0x64, 0x05, 0x05, 0x00, 0xa2, 0x00, 0x66, 0x00, 0xa5,
0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66,
0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00,
0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x94, 0x00, 0x42, 0x06, 0x06, 0x00, 0xa7, 0x00,
0x42, 0x00, 0xbc, 0x00, 0x62, 0x00, 0xb0, 0x00, 0x5c, 0x00, 0x9e, 0x00, 0x59, 0x00, 0x98, 0x00,
0x54, 0x00, 0x94, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0d, 0x00, 0x5c, 0x00, 0x00, 0x04,
0x04, 0x00, 0xa5, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x06, 0x00, 0xa6, 0x00, 0x1f, 0x00, 0xa2, 0x00,
0x31, 0x00, 0xa7, 0x00, 0x3d, 0x00, 0xa4, 0x00, 0x45, 0x00, 0xa0, 0x00, 0x48, 0x00, 0x95, 0x00,
0x4b, 0x00, 0x8c, 0x00, 0x4b, 0x00, 0x82, 0x00, 0x39, 0x00, 0x7b, 0x00, 0x37, 0x00, 0x69, 0x00,
0x1d, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0xa8, 0x00, 0x3d, 0x06,
0x06, 0x00, 0xa8, 0x00, 0x3d, 0x00, 0xc9, 0x00, 0x4e, 0x00, 0xc9, 0x00, 0x51, 0x00, 0xcc, 0x00,
0x53, 0x00, 0xd0, 0x00, 0x5b, 0x00, 0xd4, 0x00, 0x60, 0x00, 0xd7, 0x00, 0x68, 0x00, 0xd4, 0x00,
0x69, 0x00, 0xcb, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0xa8, 0x00, 0x3f, 0x06,
0x06, 0x00, 0xa8, 0x00, 0x3f, 0x00, 0xcd, 0x00, 0x5c, 0x00, 0xbe, 0x00, 0x59, 0x00, 0x00, 0x00,
0x00, 0x01, 0x07, 0x00, 0xa7, 0x00, 0x40, 0x06, 0x06, 0x00, 0xa7, 0x00, 0x40, 0x00, 0xc4, 0x00,
0x5f, 0x00, 0xc6, 0x00, 0x62, 0x00, 0xc3, 0x00, 0x72, 0x00, 0xbf, 0x00, 0x78, 0x00, 0xbd, 0x00,
0x75, 0x00, 0xbe, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0xaa, 0x00, 0x5b, 0x06,
0x06, 0x00, 0xb0, 0x00, 0x5b, 0x00, 0xb4, 0x00, 0x65, 0x00, 0xb0, 0x00, 0x71, 0x00, 0xad, 0x00,
0x77, 0x00, 0xaa, 0x00, 0x76, 0x00, 0xad, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00,
0x9f, 0x00, 0x59, 0x06, 0x06, 0x00, 0x9f, 0x00, 0x59, 0x00, 0xb0, 0x00, 0x5a, 0x00, 0xad, 0x00,
0x65, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xc1, 0x00, 0x4e, 0x05, 0x05, 0x00, 0xc1, 0x00,
0x4e, 0x00, 0xca, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xbe, 0x00, 0x59, 0x05,
0x05, 0x00, 0xbe, 0x00, 0x59, 0x00, 0xbf, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, 0x64, 0x0c,
0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, 0x44, 0x06,
0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x88,
0x00, 0x1e, 0x06, 0x06, 0x00, 0x9a, 0x00, 0x30, 0x00, 0xc7, 0x00, 0x59, 0x00, 0x97, 0x00, 0x42,
0x00, 0x00, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x3a, 0x00, 0x06, 0x04, 0x04, 0x00, 0x91, 0x00, 0x06,
0x00, 0x97, 0x00, 0x2c, 0x00, 0x99, 0x00, 0x2f, 0x00, 0x9a, 0x00, 0x3d, 0x00, 0x94, 0x00, 0x47,
0x00, 0x89, 0x00, 0x4d, 0x00, 0x84, 0x00, 0x4a, 0x00, 0x73, 0x00, 0x48, 0x00, 0x4a, 0x00, 0x2c,
0x00, 0x41, 0x00, 0x24, 0x00, 0x3a, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x8b,
0x00, 0x1d, 0x06, 0x06, 0x00, 0x9a, 0x00, 0x2f, 0x00, 0xa0, 0x00, 0x30, 0x00, 0xaf, 0x00, 0x34,
0x00, 0xba, 0x00, 0x3b, 0x00, 0xc9, 0x00, 0x43, 0x00, 0xd2, 0x00, 0x50, 0x00, 0xcf, 0x00, 0x52,
0x00, 0xca, 0x00, 0x52, 0x00, 0xd2, 0x00, 0x5f, 0x00, 0xcf, 0x00, 0x62, 0x00, 0xc5, 0x00, 0x58,
0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x89, 0x00, 0x31, 0x06, 0x06, 0x00, 0x98, 0x00, 0x43,
0x00, 0xb2, 0x00, 0x4f, 0x00, 0xb0, 0x00, 0x52, 0x00, 0xb6, 0x00, 0x5b, 0x00, 0xb8, 0x00, 0x60,
0x00, 0xb9, 0x00, 0x67, 0x00, 0xb6, 0x00, 0x69, 0x00, 0xb1, 0x00, 0x68, 0x00, 0xaf, 0x00, 0x60,
0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x86, 0x00, 0x32, 0x06, 0x06, 0x00, 0x97, 0x00, 0x44,
0x00, 0xb1, 0x00, 0x5f, 0x00, 0x95, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x7b,
0x00, 0x32, 0x06, 0x06, 0x00, 0x96, 0x00, 0x44, 0x00, 0xa4, 0x00, 0x5a, 0x00, 0xa6, 0x00, 0x5e,
0x00, 0xa6, 0x00, 0x63, 0x00, 0xa2, 0x00, 0x65, 0x00, 0xa0, 0x00, 0x64, 0x00, 0x9e, 0x00, 0x5f,
0x00, 0x92, 0x00, 0x57, 0x00, 0x8a, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xac,
0x00, 0x35, 0x05, 0x05, 0x00, 0xbb, 0x00, 0x47, 0x00, 0xca, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00,
0x01, 0x02, 0x00, 0xbb, 0x00, 0x3e, 0x05, 0x05, 0x00, 0xca, 0x00, 0x50, 0x00, 0xca, 0x00, 0x52,
0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xa5, 0x00, 0x4f, 0x05, 0x05, 0x00, 0xb8, 0x00, 0x61,
0x00, 0xb4, 0x00, 0x63, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0xa3, 0x00, 0x50, 0x05, 0x05,
0x00, 0xb4, 0x00, 0x63, 0x00, 0xb2, 0x00, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, 0x64, 0x0c, 0x86,
0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, 0x44, 0x06, 0x66,
0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x45, 0x00,
0x0c, 0x06, 0x06, 0x00, 0x52, 0x00, 0x0c, 0x00, 0x65, 0x00, 0x30, 0x00, 0x6a, 0x00, 0x40, 0x00,
0x69, 0x00, 0x42, 0x00, 0x66, 0x00, 0x44, 0x00, 0x5c, 0x00, 0x40, 0x00, 0x51, 0x00, 0x39, 0x00,
0x45, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
0x4d, 0x00, 0x00, 0x00, 0x52, 0x00, 0x0b, 0x00, 0x53, 0x00, 0x16, 0x00, 0x50, 0x00, 0x20, 0x00,
0x47, 0x00, 0x29, 0x00, 0x41, 0x00, 0x2d, 0x00, 0x20, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x1e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x51, 0x00, 0x00, 0x06, 0x06, 0x00,
0x51, 0x00, 0x04, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x09, 0x00,
0x6d, 0x00, 0x0d, 0x00, 0x77, 0x00, 0x11, 0x00, 0x7d, 0x00, 0x16, 0x00, 0x92, 0x00, 0x23, 0x00,
0x9b, 0x00, 0x2d, 0x00, 0x9a, 0x00, 0x2f, 0x00, 0x98, 0x00, 0x30, 0x00, 0x8d, 0x00, 0x28, 0x00,
0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x51, 0x00, 0x05, 0x06, 0x06, 0x00, 0x51, 0x00, 0x05, 0x00,
0x90, 0x00, 0x29, 0x00, 0x78, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x52, 0x00,
0x06, 0x06, 0x06, 0x00, 0x52, 0x00, 0x06, 0x00, 0x7b, 0x00, 0x23, 0x00, 0x7d, 0x00, 0x29, 0x00,
0x90, 0x00, 0x34, 0x00, 0x94, 0x00, 0x36, 0x00, 0x98, 0x00, 0x3c, 0x00, 0x96, 0x00, 0x3f, 0x00,
0x75, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x92, 0x00, 0x3d, 0x06, 0x06, 0x00,
0x92, 0x00, 0x3d, 0x00, 0x95, 0x00, 0x3f, 0x00, 0x93, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01,
0x09, 0x00, 0x51, 0x00, 0x07, 0x06, 0x06, 0x00, 0x51, 0x00, 0x07, 0x00, 0x79, 0x00, 0x2e, 0x00,
0x74, 0x00, 0x32, 0x00, 0x79, 0x00, 0x3e, 0x00, 0x7e, 0x00, 0x40, 0x00, 0x7e, 0x00, 0x44, 0x00,
0x7a, 0x00, 0x46, 0x00, 0x72, 0x00, 0x43, 0x00, 0x68, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01,
0x02, 0x00, 0x63, 0x00, 0x07, 0x05, 0x05, 0x00, 0x63, 0x00, 0x07, 0x00, 0x71, 0x00, 0x0f, 0x00,
0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x76, 0x00, 0x42, 0x05, 0x05, 0x00, 0x76, 0x00, 0x43, 0x00,
0x79, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x79, 0x00, 0x3f, 0x05, 0x05, 0x00,
0x79, 0x00, 0x42, 0x00, 0x7a, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00,
0x3f, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e,
0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, 0x44, 0x06, 0x66, 0x00,
0x00, 0x04, 0x66, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x1a, 0x00, 0x7b,
0x08, 0x08, 0x00, 0x1a, 0x00, 0x7b, 0x00, 0x53, 0x00, 0x7f, 0x00, 0x1a, 0x00, 0x7f, 0x00, 0x00,
0x00, 0x00, 0x01, 0x03, 0x00, 0x18, 0x00, 0x72, 0x08, 0x08, 0x00, 0x18, 0x00, 0x72, 0x00, 0x54,
0x00, 0x7f, 0x00, 0x1a, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x54,
0x09, 0x09, 0x00, 0x00, 0x00, 0x54, 0x00, 0x08, 0x00, 0x58, 0x00, 0x0e, 0x00, 0x60, 0x00, 0x18,
0x00, 0x75, 0x00, 0x19, 0x00, 0x7a, 0x00, 0x19, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88,
0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0,
0x02, 0x20, 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x00, 0x01, 0x08, 0x00, 0x11, 0x00, 0x65, 0x08, 0x08, 0x00, 0x11, 0x00, 0x65, 0x00, 0x3e, 0x00,
0x70, 0x00, 0x63, 0x00, 0x77, 0x00, 0x70, 0x00, 0x74, 0x00, 0x79, 0x00, 0x76, 0x00, 0x7a, 0x00,
0x7a, 0x00, 0x7e, 0x00, 0x7f, 0x00, 0x1b, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00,
0x00, 0x00, 0x45, 0x09, 0x09, 0x00, 0x00, 0x00, 0x45, 0x00, 0x0f, 0x00, 0x62, 0x00, 0x1a, 0x00,
0x7d, 0x00, 0x1a, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00,
0x71, 0x00, 0x78, 0x08, 0x08, 0x00, 0x8a, 0x00, 0x78, 0x00, 0x8d, 0x00, 0x79, 0x00, 0x8e, 0x00,
0x7c, 0x00, 0x87, 0x00, 0x7f, 0x00, 0x71, 0x00, 0x7f, 0x00, 0x7f, 0x00, 0x7a, 0x00, 0x00, 0x00,
0x00, 0x01, 0x05, 0x00, 0x67, 0x00, 0x71, 0x08, 0x08, 0x00, 0x79, 0x00, 0x71, 0x00, 0x7e, 0x00,
0x72, 0x00, 0x7e, 0x00, 0x75, 0x00, 0x78, 0x00, 0x7a, 0x00, 0x67, 0x00, 0x77, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06,
0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02,
0x20, 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00,
0x01, 0x06, 0x00, 0x7c, 0x00, 0x68, 0x08, 0x08, 0x00, 0x8c, 0x00, 0x68, 0x00, 0x93, 0x00, 0x68,
0x00, 0x97, 0x00, 0x69, 0x00, 0x99, 0x00, 0x6d, 0x00, 0x85, 0x00, 0x6b, 0x00, 0x7c, 0x00, 0x69,
0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0x9a, 0x00, 0x6d, 0x08, 0x08, 0x00, 0x9f, 0x00, 0x6d,
0x00, 0xa8, 0x00, 0x73, 0x00, 0xa8, 0x00, 0x77, 0x00, 0xa1, 0x00, 0x73, 0x00, 0x9a, 0x00, 0x6d,
0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x82, 0x00, 0x79, 0x08, 0x08, 0x00, 0x9d, 0x00, 0x79,
0x00, 0xa8, 0x00, 0x7f, 0x00, 0x9e, 0x00, 0x7f, 0x00, 0x82, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x00,
0x01, 0x0a, 0x00, 0x0d, 0x00, 0x43, 0x08, 0x08, 0x00, 0x0d, 0x00, 0x5c, 0x00, 0x36, 0x00, 0x65,
0x00, 0x56, 0x00, 0x69, 0x00, 0x86, 0x00, 0x6a, 0x00, 0x95, 0x00, 0x6c, 0x00, 0xa0, 0x00, 0x70,
0x00, 0xa7, 0x00, 0x78, 0x00, 0x8d, 0x00, 0x7b, 0x00, 0xa3, 0x00, 0x86, 0x00, 0x22, 0x00, 0x86,
0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x45, 0x09, 0x09, 0x00, 0x00, 0x00, 0x45,
0x00, 0x19, 0x00, 0x77, 0x00, 0x1a, 0x00, 0x7b, 0x00, 0x0a, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
0x01, 0x03, 0x00, 0x00, 0x00, 0x47, 0x09, 0x09, 0x00, 0x00, 0x00, 0x47, 0x00, 0x0d, 0x00, 0x72,
0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x27, 0x00, 0x7a, 0x08, 0x08,
0x00, 0x27, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x1a, 0x00, 0x5a, 0x08, 0x08,
0x00, 0x1a, 0x00, 0x73, 0x00, 0x23, 0x00, 0x86, 0x00, 0x1a, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42,
0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20,
0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01,
0x0c, 0x00, 0x0a, 0x00, 0x55, 0x08, 0x08, 0x00, 0x0a, 0x00, 0x55, 0x00, 0x40, 0x00, 0x60, 0x00,
0x6a, 0x00, 0x66, 0x00, 0x77, 0x00, 0x65, 0x00, 0x89, 0x00, 0x69, 0x00, 0xa8, 0x00, 0x69, 0x00,
0xb8, 0x00, 0x6b, 0x00, 0xc6, 0x00, 0x70, 0x00, 0xc8, 0x00, 0x77, 0x00, 0xc0, 0x00, 0x7c, 0x00,
0xb3, 0x00, 0x7f, 0x00, 0x1e, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00,
0x45, 0x09, 0x09, 0x00, 0x00, 0x00, 0x45, 0x00, 0x14, 0x00, 0x6b, 0x00, 0x0a, 0x00, 0x63, 0x00,
0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x47, 0x09, 0x09, 0x00, 0x00, 0x00, 0x47, 0x00,
0x09, 0x00, 0x63, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x00, 0xc7, 0x00,
0x6f, 0x08, 0x08, 0x00, 0xd6, 0x00, 0x76, 0x00, 0xc9, 0x00, 0x73, 0x00, 0xc7, 0x00, 0x70, 0x00,
0xd3, 0x00, 0x6f, 0x00, 0xda, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x19, 0x00,
0x75, 0x08, 0x08, 0x00, 0x19, 0x00, 0x75, 0x00, 0x1e, 0x00, 0x7f, 0x00, 0x1a, 0x00, 0x7f, 0x00,
0x1a, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00,
0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04,
0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00,
0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x10, 0x00, 0x62, 0x08, 0x08, 0x00, 0x10,
0x00, 0x62, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0x65, 0x00, 0x71, 0x00, 0x7f, 0x00, 0x6f, 0x00, 0x92,
0x00, 0x75, 0x00, 0x96, 0x00, 0x79, 0x00, 0x91, 0x00, 0x7f, 0x00, 0x1b, 0x00, 0x7f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88,
0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0,
0x02, 0x20, 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04, 0x66, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x45, 0x09, 0x09, 0x00, 0x3f, 0x00, 0x43, 0x00, 0x4e, 0x00,
0x60, 0x00, 0x59, 0x00, 0x7b, 0x00, 0x59, 0x00, 0x7d, 0x00, 0x3f, 0x00, 0x7d, 0x00, 0x00, 0x00,
0x00, 0x01, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x09, 0x09, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x28, 0x00,
0x08, 0x00, 0x2e, 0x00, 0x10, 0x00, 0x38, 0x00, 0x25, 0x00, 0x39, 0x00, 0x2a, 0x00, 0x39, 0x00,
0x2f, 0x00, 0x1b, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x06, 0x42, 0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08,
0xaa, 0x04, 0x66, 0x04, 0x48, 0x00, 0xe0, 0x02, 0x20, 0x04, 0x44, 0x06, 0x66, 0x00, 0x00, 0x04,
0x66, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x69, 0x00, 0x47, 0x08, 0x08,
0x00, 0xba, 0x00, 0x4c, 0x00, 0xbc, 0x00, 0x4e, 0x00, 0xbc, 0x00, 0x51, 0x00, 0xb7, 0x00, 0x53,
0x00, 0x97, 0x00, 0x5a, 0x00, 0x84, 0x00, 0x5c, 0x00, 0x78, 0x00, 0x5a, 0x00, 0x6a, 0x00, 0x52,
0x00, 0x69, 0x00, 0x4c, 0x00, 0x71, 0x00, 0x48, 0x00, 0x75, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x08, 0x88, 0x04, 0x88, 0x00, 0x00,
0x08, 0x64, 0x0c, 0x86, 0x0e, 0xa8, 0x08, 0xaa, 0x04, 0x66, 0x04, 0x48, 0x0c, 0xcc, 0x0a, 0xaa,
0x06, 0x66, 0x04, 0x44, 0x02, 0x22, 0x04, 0x66, 0x00
};

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef SYSTEMSTUB_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include <SDL.h>
@ -85,6 +85,10 @@ void SystemStub_SDL::init(const char *title, int w, int h, bool fullscreen, Scal
SDL_ShowCursor(SDL_DISABLE);
_caption = title;
memset(&_pi, 0, sizeof(_pi));
_window = 0;
_renderer = 0;
_texture = 0;
_fmt = 0;
_screenBuffer = 0;
_fadeOnUpdateScreen = false;
_fullscreen = fullscreen;

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "unpack.h"

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef UNPACK_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifdef _WIN32

2
util.h
View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef UTIL_H__

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#include "resource.h"

View File

@ -1,7 +1,7 @@
/*
* REminiscence - Flashback interpreter
* Copyright (C) 2005-2015 Gregory Montoir (cyx@users.sourceforge.net)
* Copyright (C) 2005-2018 Gregory Montoir (cyx@users.sourceforge.net)
*/
#ifndef VIDEO_H__