1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-11 15:45:05 +02:00

separate atlas for tiles and glyphs; fix printing spec glyphs;

This commit is contained in:
XProger
2019-02-26 20:55:49 +03:00
parent a6d56b3525
commit 24d96e0f65
9 changed files with 331 additions and 308 deletions

View File

@@ -57,7 +57,6 @@ struct IGame {
virtual TR::Level* getLevel() { return NULL; }
virtual MeshBuilder* getMesh() { return NULL; }
virtual Texture* getAtlas() { return NULL; }
virtual ICamera* getCamera(int index = -1) { return NULL; }
virtual Controller* getLara(int index = 0) { return NULL; }
virtual Controller* getLara(const vec3 &pos) { return NULL; }

View File

@@ -83,7 +83,7 @@ struct OptionItem {
}
float drawBar(float x, float y, float w, bool active, uint8 value) const {
UI::renderBar(UI::BAR_WHITE, vec2(x + (32.0f + 2.0f), y - LINE_HEIGHT + 6 + 2), vec2(w - (64.0f + 4.0f), LINE_HEIGHT - 6 - 4), value / float(maxValue), color, 0xFF000000, 0xFFA0A0A0, 0xFFA0A0A0, 0xFF000000);
UI::renderBar(CTEX_WHITE_SPRITE, vec2(x + (32.0f + 2.0f), y - LINE_HEIGHT + 6 + 2), vec2(w - (64.0f + 4.0f), LINE_HEIGHT - 6 - 4), value / float(maxValue), color, 0xFF000000, 0xFFA0A0A0, 0xFFA0A0A0, 0xFF000000);
UI::specOut(vec2(x + 16.0f, y), icon);
if (active) {
if (value > 0) UI::specOut(vec2(x, y), 108);
@@ -94,13 +94,13 @@ struct OptionItem {
float render(float x, float y, float w, bool active, Core::Settings *settings) const {
if (active)
UI::renderBar(UI::BAR_OPTION, vec2(x, y - LINE_HEIGHT + 6), vec2(w, LINE_HEIGHT - 6), 1.0f, 0xFFD8377C, 0);
UI::renderBar(CTEX_OPTION, vec2(x, y - LINE_HEIGHT + 6), vec2(w, LINE_HEIGHT - 6), 1.0f, 0xFFD8377C, 0);
const uint8 &value = *(uint8*)(intptr_t(settings) + offset);
switch (type) {
case TYPE_TITLE :
UI::renderBar(UI::BAR_OPTION, vec2(x, y - LINE_HEIGHT + 6), vec2(w, LINE_HEIGHT - 6), 1.0f, 0x802288FF, 0, 0, 0);
UI::renderBar(CTEX_OPTION, vec2(x, y - LINE_HEIGHT + 6), vec2(w, LINE_HEIGHT - 6), 1.0f, 0x802288FF, 0, 0, 0);
UI::textOut(vec2(x, y), title, UI::aCenter, w, 255, UI::SHADE_GRAY);
case TYPE_EMPTY : break;
case TYPE_BUTTON : {
@@ -1472,7 +1472,7 @@ struct Inventory {
float y = ( UI::height - height ) * 0.5f + LINE_HEIGHT;
// background
UI::renderBar(UI::BAR_OPTION, vec2(x, y - 16.0f), vec2(width, height), 0.0f, 0, 0xC0000000);
UI::renderBar(CTEX_OPTION, vec2(x, y - 16.0f), vec2(width, height), 0.0f, 0, 0xC0000000);
x += 8.0f;
width -= 16.0f;
@@ -1562,7 +1562,7 @@ struct Inventory {
}
}
UI::renderBar(UI::BAR_HEALTH, pos, size, health);
UI::renderBar(CTEX_HEALTH, pos, size, health);
}
}
@@ -1946,9 +1946,9 @@ struct Inventory {
}
if (page == PAGE_SAVEGAME) {
UI::renderBar(UI::BAR_OPTION, vec2(-eye + UI::width / 2 - 120, 240 - 14), vec2(240, LINE_HEIGHT - 6), 1.0f, 0x802288FF, 0, 0, 0);
UI::renderBar(CTEX_OPTION, vec2(-eye + UI::width / 2 - 120, 240 - 14), vec2(240, LINE_HEIGHT - 6), 1.0f, 0x802288FF, 0, 0, 0);
UI::textOut(vec2(-eye, 240), pageTitle[page], UI::aCenter, UI::width);
UI::renderBar(UI::BAR_OPTION, vec2(-eye - 48 * slot + UI::width / 2, 240 + 24 - 16), vec2(48, 18), 1.0f, 0xFFD8377C, 0);
UI::renderBar(CTEX_OPTION, vec2(-eye - 48 * slot + UI::width / 2, 240 + 24 - 16), vec2(48, 18), 1.0f, 0xFFD8377C, 0);
UI::textOut(vec2(-eye - 48 + UI::width / 2, 240 + 24), STR_YES, UI::aCenter, 48);
UI::textOut(vec2(-eye + UI::width / 2, 240 + 24), STR_NO, UI::aCenter, 48);
return;

View File

@@ -245,7 +245,7 @@ enum StringID {
, "Polski" \
, "Portugu)es" \
, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B>" \
, "\x01\x02\x70\x01\x98\x01\xCD\xFF\xFF" \
, "\x11\x02\x70\x01\x98\x01\xCD\xFF\xFF" \
#define LANG_PREFIXES "_EN", "_FR", "_DE", "_ES", "_IT", "_PL", "_PT", "_RU", "_JA"

View File

@@ -6,7 +6,7 @@
#include "glyph_jap.h"
bool isJapaneseStart(char c) {
return c == '\x01';
return c == '\x11';
}
uint16 getJapaneseGlyph(const char *text) {
@@ -293,30 +293,30 @@ const char *STR_JA[] = { "日本語"
#define JAP_MAP_COUNT 453
const char *STR_JA[] = { "\x01\x02\x70\x01\x98\x01\xCD\xFF\xFF"
const char *STR_JA[] = { "\x11\x02\x70\x01\x98\x01\xCD\xFF\xFF"
// help
, "\x01\x01\x52\x01\x03\x01\x2E\x01\x4D\x01\x06\x01\x06\x01\x06\xFF\xFF"
, "H\x01\x01\x1B\x01\x13\x01\x02\x01\x1D\x02\x71\x01\x22\x01\x36\x01\x07\x02\x6E\x02\x6F\xFF\xFF"
, "\x11\x01\x52\x01\x03\x01\x2E\x01\x4D\x01\x06\x01\x06\x01\x06\xFF\xFF"
, "H\x11\x01\x1B\x01\x13\x01\x02\x01\x1D\x02\x71\x01\x22\x01\x36\x01\x07\x02\x6E\x02\x6F\xFF\xFF"
, helpText
, "%s@@@"
"\x01\x02\x74\x01\x04\x01\x0E\x02\x75\x01\xAF\xFF\xFF"" %d@@"
"\x01\x02\x72\x01\x15\x01\x0E\x01\x23\x01\x3B\x01\x21\x01\x30\x01\xAF\xFF\xFF"" %d@@"
"\x01\x01\x2D\x01\x03\x01\x34\x01\x3D\x01\x2C\x01\x1F\xFF\xFF"" %d / %d@@"
"\x01\x02\x73\x01\x9A\x02\x68\x01\x7C\xFF\xFF"" %s"
, "\x01\x01\x5C\x01\x03\x01\x4F\x01\x4D\x01\x06\x01\x06\x01\x06\xFF\xFF"
, "\x01\x01\x5C\x01\x03\x01\x4F\x01\x04\x01\x19\x01\x04\x01\x0E\x01\x42\xFF\xFF"
, "\x01\x01\x5C\x01\x03\x01\x4F\x01\x1D\x01\x2F\x01\x19\x01\x4A\x01\x2B\x01\x1D\x01\x04\x01\x0E\x01\x42\xFF\xFF"
, "\x01\x01\x16\x01\x0C\xFF\xFF"
, "\x01\x01\x0C\x01\x0C\x01\x48\xFF\xFF"
, "\x01\x01\x39\x01\x46\xFF\xFF"
, "\x01\x01\x39\x01\x02\xFF\xFF"
, "\x01\x02\x69\x02\x66\x01\xC3\x02\x67\xFF\xFF"
"\x11\x02\x74\x01\x04\x01\x0E\x02\x75\x01\xAF\xFF\xFF"" %d@@"
"\x11\x02\x72\x01\x15\x01\x0E\x01\x23\x01\x3B\x01\x21\x01\x30\x01\xAF\xFF\xFF"" %d@@"
"\x11\x01\x2D\x01\x03\x01\x34\x01\x3D\x01\x2C\x01\x1F\xFF\xFF"" %d / %d@@"
"\x11\x02\x73\x01\x9A\x02\x68\x01\x7C\xFF\xFF"" %s"
, "\x11\x01\x5C\x01\x03\x01\x4F\x01\x4D\x01\x06\x01\x06\x01\x06\xFF\xFF"
, "\x11\x01\x5C\x01\x03\x01\x4F\x01\x04\x01\x19\x01\x04\x01\x0E\x01\x42\xFF\xFF"
, "\x11\x01\x5C\x01\x03\x01\x4F\x01\x1D\x01\x2F\x01\x19\x01\x4A\x01\x2B\x01\x1D\x01\x04\x01\x0E\x01\x42\xFF\xFF"
, "\x11\x01\x16\x01\x0C\xFF\xFF"
, "\x11\x01\x0C\x01\x0C\x01\x48\xFF\xFF"
, "\x11\x01\x39\x01\x46\xFF\xFF"
, "\x11\x01\x39\x01\x02\xFF\xFF"
, "\x11\x02\x69\x02\x66\x01\xC3\x02\x67\xFF\xFF"
, "VR"
, "\x01\x02\x6C\xFF\xFF"
, "\x01\x01\x4D\xFF\xFF"
, "\x01\x02\x6D\xFF\xFF"
, "\x11\x02\x6C\xFF\xFF"
, "\x11\x01\x4D\xFF\xFF"
, "\x11\x02\x6D\xFF\xFF"
, STR_LANGUAGES
, "\x01\x02\x6A\x02\x6B\xFF\xFF"
, "\x11\x02\x6A\x02\x6B\xFF\xFF"
, "Gamepad 1"
, "Gamepad 2"
, "Gamepad 3"
@@ -324,56 +324,56 @@ const char *STR_JA[] = { "\x01\x02\x70\x01\x98\x01\xCD\xFF\xFF"
, "Not Ready"
, "Player 1"
, "Player 2"
, "\x01\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x37\x01\x3E\x01\x38\x01\x0C\xFF\xFF"
, "%s - \x01\x02\x80\x01\x7E\xFF\xFF"
, "%s - \x01\x01\xC2\x01\x08\xFF\xFF"
, "\x11\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x37\x01\x3E\x01\x38\x01\x0C\xFF\xFF"
, "%s - \x11\x02\x80\x01\x7E\xFF\xFF"
, "%s - \x11\x01\xC2\x01\x08\xFF\xFF"
// inventory pages
, "\x01\x01\x39\x01\x36\x01\x2D\x01\x64\x01\x02\xFF\xFF"
, "\x01\x01\xC9\x01\x49\x01\xB6\xFF\xFF"
, "\x01\x01\x23\x01\x3B\x01\x21\x01\x30\xFF\xFF"
, "\x11\x01\x39\x01\x36\x01\x2D\x01\x64\x01\x02\xFF\xFF"
, "\x11\x01\xC9\x01\x49\x01\xB6\xFF\xFF"
, "\x11\x01\x23\x01\x3B\x01\x21\x01\x30\xFF\xFF"
// save game page
, "\x01\x01\x5C\x01\x03\x01\x4F\x01\x04\x01\x19\x01\x2A\x01\x14\x01\x41\xFF\xFF"
, "\x01\x01\xBE\x02\x81\x02\x7E\x02\x7F\xFF\xFF"
, "\x11\x01\x5C\x01\x03\x01\x4F\x01\x04\x01\x19\x01\x2A\x01\x14\x01\x41\xFF\xFF"
, "\x11\x01\xBE\x02\x81\x02\x7E\x02\x7F\xFF\xFF"
// inventory option
, "\x01\x01\x68\x01\x03\x01\x30\xFF\xFF"
, "\x01\x01\x50\x01\x2C\x01\x36\xFF\xFF"
, "\x01\x01\x5E\x01\x02\x01\x60\x01\x18\xFF\xFF"
, "\x01\x01\x18\x01\x21\x01\x03\x01\x13\x01\x18\xFF\xFF"
, "\x01\x01\x17\x01\x17\x01\x01\x01\x4C\xFF\xFF"
, "\x01\x02\x84\x02\x85\x01\x9D\x01\x7E\xFF\xFF"
, "\x01\x01\xB1\x01\x63\x01\x02\x01\x2E\xFF\xFF"
, "\x01\x01\x5E\x01\x02\x01\x1F\x01\x52\x01\x03\x01\x17\xFF\xFF"
, "\x01\x01\x7F\x01\x08\x01\x38\xFF\xFF"
, "\x11\x01\x68\x01\x03\x01\x30\xFF\xFF"
, "\x11\x01\x50\x01\x2C\x01\x36\xFF\xFF"
, "\x11\x01\x5E\x01\x02\x01\x60\x01\x18\xFF\xFF"
, "\x11\x01\x18\x01\x21\x01\x03\x01\x13\x01\x18\xFF\xFF"
, "\x11\x01\x17\x01\x17\x01\x01\x01\x4C\xFF\xFF"
, "\x11\x02\x84\x02\x85\x01\x9D\x01\x7E\xFF\xFF"
, "\x11\x01\xB1\x01\x63\x01\x02\x01\x2E\xFF\xFF"
, "\x11\x01\x5E\x01\x02\x01\x1F\x01\x52\x01\x03\x01\x17\xFF\xFF"
, "\x11\x01\x7F\x01\x08\x01\x38\xFF\xFF"
// passport menu
, "\x01\x01\x52\x01\x03\x01\x2E\xFF\xFF"
, "\x01\x01\xB0\x01\x04\x01\x0C\x01\x68\x01\x03\x01\x30\xFF\xFF"
, "\x01\x01\x29\x01\x36\x01\x3D\x01\x3B\xFF\xFF"
, "\x01\x01\x71\x01\xAB\x01\x4B\x01\x03\x01\x0D\x01\xC2\x01\x08\xFF\xFF"
, "\x01\x01\x68\x01\x03\x01\x30\x01\x07\x02\x82\x01\x1E\x01\x08\xFF\xFF"
, "\x01\x01\x3D\x01\x6D\x01\x22\x01\x07\x02\x83\x02\x78\x01\x2A\x01\x08\xFF\xFF"
, "\x11\x01\x52\x01\x03\x01\x2E\xFF\xFF"
, "\x11\x01\xB0\x01\x04\x01\x0C\x01\x68\x01\x03\x01\x30\xFF\xFF"
, "\x11\x01\x29\x01\x36\x01\x3D\x01\x3B\xFF\xFF"
, "\x11\x01\x71\x01\xAB\x01\x4B\x01\x03\x01\x0D\x01\xC2\x01\x08\xFF\xFF"
, "\x11\x01\x68\x01\x03\x01\x30\x01\x07\x02\x82\x01\x1E\x01\x08\xFF\xFF"
, "\x11\x01\x3D\x01\x6D\x01\x22\x01\x07\x02\x83\x02\x78\x01\x2A\x01\x08\xFF\xFF"
// detail options
, "\x01\x01\x58\x01\x26\x01\x21\x01\x03\x01\x22\x02\x79\x02\x76\xFF\xFF"
, "\x01\x01\x46\x01\x26\x01\x22\x01\x13\x01\x29\x01\x02\x01\x3F\xFF\xFF"
, "\x01\x01\x17\x01\x3B\x01\x21\x01\x26\x01\x02\x01\x3F\x01\x34\x01\x39\x01\x29\x01\x21\x01\x26\xFF\xFF"
, "\x01\x01\x2D\x01\x4E\x01\x2E\x01\x63\x01\x34\x01\x39\x01\x29\x01\x21\x01\x26\xFF\xFF"
, "\x01\x01\x66\x01\x34\x01\x39\x01\x29\x01\x21\x01\x26\xFF\xFF"
, "\x11\x01\x58\x01\x26\x01\x21\x01\x03\x01\x22\x02\x79\x02\x76\xFF\xFF"
, "\x11\x01\x46\x01\x26\x01\x22\x01\x13\x01\x29\x01\x02\x01\x3F\xFF\xFF"
, "\x11\x01\x17\x01\x3B\x01\x21\x01\x26\x01\x02\x01\x3F\x01\x34\x01\x39\x01\x29\x01\x21\x01\x26\xFF\xFF"
, "\x11\x01\x2D\x01\x4E\x01\x2E\x01\x63\x01\x34\x01\x39\x01\x29\x01\x21\x01\x26\xFF\xFF"
, "\x11\x01\x66\x01\x34\x01\x39\x01\x29\x01\x21\x01\x26\xFF\xFF"
, "VSync"
, "\x01\x01\x60\x01\x17\x01\x3D\x01\x22\x01\x65\x01\x4B\x01\x03\xFF\xFF"
, "2D\x01\x01\x23\x01\x3B\x01\x21\x01\x30\xFF\xFF"
, "\x11\x01\x60\x01\x17\x01\x3D\x01\x22\x01\x65\x01\x4B\x01\x03\xFF\xFF"
, "2D\x11\x01\x23\x01\x3B\x01\x21\x01\x30\xFF\xFF"
// sound options
, "\x01\x02\x77\x02\x7C\x01\x9D\x01\x7E\xFF\xFF"
, "\x01\x01\x29\x01\x45\x01\x03\x01\x4F\x01\x3D\x01\x03\x01\x2D\x01\x64\x01\x02\xFF\xFF"
, "\x01\x02\x7D\x02\x7A\xFF\xFF"
, "\x01\x01\xEF\x01\xCD\xFF\xFF"
, "\x11\x02\x77\x02\x7C\x01\x9D\x01\x7E\xFF\xFF"
, "\x11\x01\x29\x01\x45\x01\x03\x01\x4F\x01\x3D\x01\x03\x01\x2D\x01\x64\x01\x02\xFF\xFF"
, "\x11\x02\x7D\x02\x7A\xFF\xFF"
, "\x11\x01\xEF\x01\xCD\xFF\xFF"
// controls options
, "\x01\x01\x5E\x01\x02\x01\x1F\x01\x52\x01\x03\x01\x17\x01\x9D\x01\x7E\xFF\xFF"
, "\x01\x01\x20\x01\x03\x01\x1B\x01\x03\x01\x2E\xFF\xFF"
, "\x01\x01\x68\x01\x03\x01\x30\x01\x60\x01\x2C\x01\x2E\xFF\xFF"
, "\x01\x01\x45\x01\x3B\x01\x4F\x01\x3D\x01\x03\x01\x2D\x01\x64\x01\x02\xFF\xFF"
, "\x01\x01\x29\x01\x13\x01\x03\x01\x68\x01\x21\x01\x26\x01\x02\x01\x3F\xFF\xFF"
, "\x01\x01\x50\x01\x22\x01\x5B\x01\x6A\x01\x3B\x01\x55\x01\x02\x01\x3F\xFF\xFF"
, "\x11\x01\x5E\x01\x02\x01\x1F\x01\x52\x01\x03\x01\x17\x01\x9D\x01\x7E\xFF\xFF"
, "\x11\x01\x20\x01\x03\x01\x1B\x01\x03\x01\x2E\xFF\xFF"
, "\x11\x01\x68\x01\x03\x01\x30\x01\x60\x01\x2C\x01\x2E\xFF\xFF"
, "\x11\x01\x45\x01\x3B\x01\x4F\x01\x3D\x01\x03\x01\x2D\x01\x64\x01\x02\xFF\xFF"
, "\x11\x01\x29\x01\x13\x01\x03\x01\x68\x01\x21\x01\x26\x01\x02\x01\x3F\xFF\xFF"
, "\x11\x01\x50\x01\x22\x01\x5B\x01\x6A\x01\x3B\x01\x55\x01\x02\x01\x3F\xFF\xFF"
// controls
, "\x01\x02\x7B\xFF\xFF", "\x01\x01\x9C\xFF\xFF", "\x01\x01\x31\xFF\xFF", "\x01\x01\x67\xFF\xFF", "\x01\x01\x35\x01\x4E\x01\x02\x01\x36\xFF\xFF", "\x01\x01\x78\x01\x37\xFF\xFF", "\x01\x01\x23\x01\x34\x01\x2D\x01\x64\x01\x02\xFF\xFF", "\x01\x01\xD3\x01\x07\x02\x50\x01\x37\xFF\xFF", "\x01\x01\x99\x01\x08\xFF\xFF", "\x01\x01\x04\x01\x96\x01\x1A\x01\xD5\xFF\xFF", "\x01\x01\x5A\x01\x2C\x01\x2D\x01\x4B\xFF\xFF", "\x01\x02\x51\x01\x1A\x01\x08\xFF\xFF", "\x01\x01\xC9\x01\x49\x01\xB6\x01\x07\x01\x99\x01\x08\xFF\xFF", "\x01\x01\x18\x01\x13\x01\x03\x01\x1F\xFF\xFF"
, "\x11\x02\x7B\xFF\xFF", "\x11\x01\x9C\xFF\xFF", "\x11\x01\x31\xFF\xFF", "\x11\x01\x67\xFF\xFF", "\x11\x01\x35\x01\x4E\x01\x02\x01\x36\xFF\xFF", "\x11\x01\x78\x01\x37\xFF\xFF", "\x11\x01\x23\x01\x34\x01\x2D\x01\x64\x01\x02\xFF\xFF", "\x11\x01\xD3\x01\x07\x02\x50\x01\x37\xFF\xFF", "\x11\x01\x99\x01\x08\xFF\xFF", "\x11\x01\x04\x01\x96\x01\x1A\x01\xD5\xFF\xFF", "\x11\x01\x5A\x01\x2C\x01\x2D\x01\x4B\xFF\xFF", "\x11\x02\x51\x01\x1A\x01\x08\xFF\xFF", "\x11\x01\xC9\x01\x49\x01\xB6\x01\x07\x01\x99\x01\x08\xFF\xFF", "\x11\x01\x18\x01\x13\x01\x03\x01\x1F\xFF\xFF"
// keys
, "NONE", "LEFT", "RIGHT", "UP", "DOWN", "SPACE", "TAB", "ENTER", "ESCAPE", "SHIFT", "CTRL", "ALT"
, "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
@@ -382,185 +382,185 @@ const char *STR_JA[] = { "\x01\x02\x70\x01\x98\x01\xCD\xFF\xFF"
// gamepad
, "NONE", "A", "B", "X", "Y", "L BUMPER", "R BUMPER", "SELECT", "START", "L STICK", "R STICK", "L TRIGGER", "R TRIGGER", "D-LEFT", "D-RIGHT", "D-UP", "D-DOWN"
// inventory items
, "\x01\x02\x4E\x01\x7F\xFF\xFF"
, "\x01\x02\x4F\x01\x72\xFF\xFF"
, "\x01\x01\x54\x01\x18\x01\x1F\x01\x22\xFF\xFF"
, "\x01\x01\x2D\x01\x64\x01\x2C\x01\x1F\x01\x77\x01\x02\xFF\xFF"
, "\x01\x01\x50\x01\x3F\x01\x51\x01\x30\xFF\xFF"
, "\x01\x01\x63\x01\x03\x01\x35\x01\x03\xFF\xFF"
, "\x01\x01\x54\x01\x18\x01\x1F\x01\x22\x01\x72\xFF\xFF"
, "\x01\x01\x2D\x01\x64\x01\x2C\x01\x1F\x01\x77\x01\x02\x01\x72\xFF\xFF"
, "\x01\x01\x50\x01\x3F\x01\x51\x01\x30\x01\x72\xFF\xFF"
, "\x01\x01\x63\x01\x03\x01\x35\x01\x03\x01\x72\xFF\xFF"
, "\x01\x01\x71\x01\x58\x01\x26\x01\x60\x01\x2C\x01\x34\x01\xE1\x02\x54\x01\xE0\xFF\xFF"
, "\x01\x01\x71\x01\x58\x01\x26\x01\x60\x01\x2C\x01\x34\x01\xE1\x01\x53\x01\xE0\xFF\xFF"
, "\x01\x02\x55\x01\x01\x01\xDE\x01\xDC\xFF\xFF"
, "\x01\x01\x2D\x01\x39\x01\x02\xFF\xFF"
, "\x11\x02\x4E\x01\x7F\xFF\xFF"
, "\x11\x02\x4F\x01\x72\xFF\xFF"
, "\x11\x01\x54\x01\x18\x01\x1F\x01\x22\xFF\xFF"
, "\x11\x01\x2D\x01\x64\x01\x2C\x01\x1F\x01\x77\x01\x02\xFF\xFF"
, "\x11\x01\x50\x01\x3F\x01\x51\x01\x30\xFF\xFF"
, "\x11\x01\x63\x01\x03\x01\x35\x01\x03\xFF\xFF"
, "\x11\x01\x54\x01\x18\x01\x1F\x01\x22\x01\x72\xFF\xFF"
, "\x11\x01\x2D\x01\x64\x01\x2C\x01\x1F\x01\x77\x01\x02\x01\x72\xFF\xFF"
, "\x11\x01\x50\x01\x3F\x01\x51\x01\x30\x01\x72\xFF\xFF"
, "\x11\x01\x63\x01\x03\x01\x35\x01\x03\x01\x72\xFF\xFF"
, "\x11\x01\x71\x01\x58\x01\x26\x01\x60\x01\x2C\x01\x34\x01\xE1\x02\x54\x01\xE0\xFF\xFF"
, "\x11\x01\x71\x01\x58\x01\x26\x01\x60\x01\x2C\x01\x34\x01\xE1\x01\x53\x01\xE0\xFF\xFF"
, "\x11\x02\x55\x01\x01\x01\xDE\x01\xDC\xFF\xFF"
, "\x11\x01\x2D\x01\x39\x01\x02\xFF\xFF"
// keys
, "\x01\x01\x40\xFF\xFF"
, "\x01\x02\x52\x01\x01\x01\x40\xFF\xFF"
, "\x01\x02\x53\x01\x89\x01\x0E\x01\x40\xFF\xFF"
, "\x01\x01\xD9\x01\x01\x01\x40\xFF\xFF"
, "\x01\x01\xB1\x01\x46\x02\x48\x01\x3B\x01\x23\x01\x20\x01\x03\xFF\xFF"
, "\x01\x01\xDB\x01\x36\x01\x1F\x01\xE2\x01\x03\x01\xE3\x01\x18\x01\x01\x01\x40\xFF\xFF"
, "\x01\x01\x23\x01\x1F\x01\x17\x01\x03\x01\x18\x01\x01\x01\x40\xFF\xFF"
, "\x01\x01\x5A\x01\xE4\x01\x34\x01\x3D\x01\x18\x01\x01\x01\x40\xFF\xFF"
, "\x01\x01\x1F\x01\x03\x01\x22\x01\x01\x01\x40\xFF\xFF"
, "\x01\x02\x49\x02\x46\x01\x09\x01\x40\xFF\xFF"
, "\x11\x01\x40\xFF\xFF"
, "\x11\x02\x52\x01\x01\x01\x40\xFF\xFF"
, "\x11\x02\x53\x01\x89\x01\x0E\x01\x40\xFF\xFF"
, "\x11\x01\xD9\x01\x01\x01\x40\xFF\xFF"
, "\x11\x01\xB1\x01\x46\x02\x48\x01\x3B\x01\x23\x01\x20\x01\x03\xFF\xFF"
, "\x11\x01\xDB\x01\x36\x01\x1F\x01\xE2\x01\x03\x01\xE3\x01\x18\x01\x01\x01\x40\xFF\xFF"
, "\x11\x01\x23\x01\x1F\x01\x17\x01\x03\x01\x18\x01\x01\x01\x40\xFF\xFF"
, "\x11\x01\x5A\x01\xE4\x01\x34\x01\x3D\x01\x18\x01\x01\x01\x40\xFF\xFF"
, "\x11\x01\x1F\x01\x03\x01\x22\x01\x01\x01\x40\xFF\xFF"
, "\x11\x02\x49\x02\x46\x01\x09\x01\x40\xFF\xFF"
// puzzles
, "\x01\x01\x60\x01\x86\x01\x22\xFF\xFF"
, "\x01\x01\x88\x01\x03\x01\x22\x01\x2E\x01\x23\x01\x3B\x01\x2E\x01\x22\xFF\xFF"
, "\x01\x01\xD9\x01\x01\x01\xDE\x01\xDC\xFF\xFF"
, "\x01\x02\x47\x02\x4C\xFF\xFF"
, "\x01\x02\x4D\x01\x4B\x01\x03\x01\x86\xFF\xFF"
, "\x01\x01\x23\x01\x02\x01\x34\xFF\xFF"
, "\x01\x01\x75\x01\x22\x01\x18\x01\x01\x01\xD0\xFF\xFF"
, "\x01\x01\x23\x01\xE3\x01\x65\x01\x18\x01\x01\x02\x4A\x02\x4B\xFF\xFF"
, "\x01\x01\x18\x01\x43\x01\x17\x01\x6D\xFF\xFF"
, "\x01\x01\x54\x01\x17\x01\x55\x01\x2C\x01\x2E\x01\x01\x01\x40\xFF\xFF"
, "\x11\x01\x60\x01\x86\x01\x22\xFF\xFF"
, "\x11\x01\x88\x01\x03\x01\x22\x01\x2E\x01\x23\x01\x3B\x01\x2E\x01\x22\xFF\xFF"
, "\x11\x01\xD9\x01\x01\x01\xDE\x01\xDC\xFF\xFF"
, "\x11\x02\x47\x02\x4C\xFF\xFF"
, "\x11\x02\x4D\x01\x4B\x01\x03\x01\x86\xFF\xFF"
, "\x11\x01\x23\x01\x02\x01\x34\xFF\xFF"
, "\x11\x01\x75\x01\x22\x01\x18\x01\x01\x01\xD0\xFF\xFF"
, "\x11\x01\x23\x01\xE3\x01\x65\x01\x18\x01\x01\x02\x4A\x02\x4B\xFF\xFF"
, "\x11\x01\x18\x01\x43\x01\x17\x01\x6D\xFF\xFF"
, "\x11\x01\x54\x01\x17\x01\x55\x01\x2C\x01\x2E\x01\x01\x01\x40\xFF\xFF"
// TR1 subtitles
/* 22 */ ,
"[04000]\x01\x01\x19\x01\x0E\x01\xCE\x01\x0E\x01\x01\x01\x41\xFF\xFF"
"[05500]\x01\x01\x32\x01\x1C\x01\x24\x01\x56\x01\x3C\x01\x09\x01\x0E\x01\x01\x02\x60\x02\x61\x01\x07\x02\x5E\x01\x0C\x01\x0D\x01\x33\x01\x05\xFF\xFF"
"[09000]\x01\x01\xD4\x01\xE5\x01\x01\x01\x83\x01\x84\x01\x16\x01\x5D\x01\x2F\x02\x5F\x01\x15\x01\x0B\x01\x04\x01\x19\x01\x0C\x01\x0A\x01\xE9\x02\x64\x02\x65\x02\x62\x01\x16\x02\x63\x01\x37\x02\x58\x02\x59\x01\x04\x01\x09\x01\x37\x01\x09\x01\x15\x01\x0B\x01\x0C\x01\x08\x01\x05\xFF\xFF"
"[14000]\x01\x01\x04\x01\x14\x01\x04\x01\x0A\x02\x56\x02\x57\x01\x0F\x01\x47\x01\x09\x01\x08\x01\xB0\x02\x5C\x01\x07\x01\xEB\x01\x0D\x01\xEC\x01\x3A\x02\x5D\x01\x4A\x01\x80\x01\x0A\x01\x6F\x01\x7C\x01\x16\x01\x7C\x02\x5A\x01\x2F\x01\x38\x01\x27\x01\x0A\xFF\xFF"
"[18000]\x01\x02\x5B\x01\xB3\x01\xB4\x01\x0D\x01\x16\x02\x86\x01\xB2\x01\x07\x01\x24\x01\x3A\x01\x8D\x01\x37\x01\x0A\xFF\xFF"
"[20500]\x01\x01\x24\x01\x3A\x01\x83\x01\x84\x01\x38\x01\x4A\x01\x08\x01\x05\xFF\xFF"
"[22500]\x01\x01\x09\x01\x2B\x01\x3E\x01\x14\x01\x2E\x01\x03\x01\x54\x01\x02\x01\x3F\x01\x04\x01\x0E\x01\x83\x01\x84\x02\xB1\x01\x15\x01\x0B\x01\x12\x01\x0F\x01\x33\xFF\xFF"
"[24500]\x01\x01\x8D\x01\x0C\x02\xB2\x02\xAF\x01\x1A\x02\xB0\x01\x9A\x01\x09\x01\x01\x01\x24\x01\x05\x01\x3E\x01\x14\x01\x11\x01\x0A\x01\x53\x01\x81\x01\x07\x02\xB5\x02\xB6\x01\x38\x01\x4A\x01\x0A\xFF\xFF"
"[29500]\x01\x02\xB3\x01\x7F\x01\x01\x02\xB4\x02\xA9\x01\x0D\x02\xAA\x01\x3A\x02\xA7\x01\x15\x01\x0B\x01\x0C\x01\x0E\x01\xA6\x01\x0E\x01\x49\x01\x0D\x01\x0A\xFF\xFF"
"[33000]\x01\x01\xA5\x01\x47\x02\xA8\x01\x98\x01\xB4\x01\x09\x01\xD4\x02\xAD\x02\xAE\x01\xC5\x01\x07\x01\x8D\x01\x0C\x01\x0E\x01\x2B\x01\x3E\x01\x05\xFF\xFF"
"[37000]\x01\x01\x73\x01\x01\x01\x36\x01\x17\x01\x02\x01\x1A\x02\xAB\x01\x07\x02\xAC\x01\x1C\x01\x01\x01\x24\x01\x05\xFF\xFF"
"[39000]\x01\x01\x32\x01\x1C\x01\x31\x01\x93\x01\x37\x01\x0C\x01\x37\x01\x14\x01\x04\x01\x11\x01\x05\x01\x05\x01\x05\xFF\xFF"
"[40000]\x01\x02\xC1\x01\x84\x02\xC2\x02\xBF\x01\x19\x01\x1D\xFF\xFF""15\x01\x01\xC0\x01\x79\x01\x05\xFF\xFF"
"[43000]\x01\x01\x4D\x02\xC0\x01\x2A\x01\x08\x01\x0D\x01\x16\x01\xB7\x01\x2A\x01\xB5\x01\x08\x01\x1E\x01\x33\x01\x05\xFF\xFF"
"[45000]\x01\x01\x93\x02\xC5\x01\x16\x01\x0A\x01\xBF\x01\x01\x01\x0F\x01\x12\x01\x0D\x02\xC6\x01\x2A\x01\x1E\x01\x05\xFF\xFF"
"[47000]\x01\x01\x5A\x01\x71\x01\x42\x01\x1C\x01\x1E\x02\xC3\x01\x56\x01\x42\x01\x42\x01\x42\xFF\xFF"
"[50000]10\x01\x01\xC0\x01\x79\xFF\xFF"
"[54000]5\x01\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[55500]4\x01\x01\x06\x01\x06\x01\x06\xFF\xFF""3\x01\x01\x06\x01\x06\x01\x06\xFF\xFF""2\x01\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[60000]1\x01\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[04000]\x11\x01\x19\x01\x0E\x01\xCE\x01\x0E\x01\x01\x01\x41\xFF\xFF"
"[05500]\x11\x01\x32\x01\x1C\x01\x24\x01\x56\x01\x3C\x01\x09\x01\x0E\x01\x01\x02\x60\x02\x61\x01\x07\x02\x5E\x01\x0C\x01\x0D\x01\x33\x01\x05\xFF\xFF"
"[09000]\x11\x01\xD4\x01\xE5\x01\x01\x01\x83\x01\x84\x01\x16\x01\x5D\x01\x2F\x02\x5F\x01\x15\x01\x0B\x01\x04\x01\x19\x01\x0C\x01\x0A\x01\xE9\x02\x64\x02\x65\x02\x62\x01\x16\x02\x63\x01\x37\x02\x58\x02\x59\x01\x04\x01\x09\x01\x37\x01\x09\x01\x15\x01\x0B\x01\x0C\x01\x08\x01\x05\xFF\xFF"
"[14000]\x11\x01\x04\x01\x14\x01\x04\x01\x0A\x02\x56\x02\x57\x01\x0F\x01\x47\x01\x09\x01\x08\x01\xB0\x02\x5C\x01\x07\x01\xEB\x01\x0D\x01\xEC\x01\x3A\x02\x5D\x01\x4A\x01\x80\x01\x0A\x01\x6F\x01\x7C\x01\x16\x01\x7C\x02\x5A\x01\x2F\x01\x38\x01\x27\x01\x0A\xFF\xFF"
"[18000]\x11\x02\x5B\x01\xB3\x01\xB4\x01\x0D\x01\x16\x02\x86\x01\xB2\x01\x07\x01\x24\x01\x3A\x01\x8D\x01\x37\x01\x0A\xFF\xFF"
"[20500]\x11\x01\x24\x01\x3A\x01\x83\x01\x84\x01\x38\x01\x4A\x01\x08\x01\x05\xFF\xFF"
"[22500]\x11\x01\x09\x01\x2B\x01\x3E\x01\x14\x01\x2E\x01\x03\x01\x54\x01\x02\x01\x3F\x01\x04\x01\x0E\x01\x83\x01\x84\x02\xB1\x01\x15\x01\x0B\x01\x12\x01\x0F\x01\x33\xFF\xFF"
"[24500]\x11\x01\x8D\x01\x0C\x02\xB2\x02\xAF\x01\x1A\x02\xB0\x01\x9A\x01\x09\x01\x01\x01\x24\x01\x05\x01\x3E\x01\x14\x01\x11\x01\x0A\x01\x53\x01\x81\x01\x07\x02\xB5\x02\xB6\x01\x38\x01\x4A\x01\x0A\xFF\xFF"
"[29500]\x11\x02\xB3\x01\x7F\x01\x01\x02\xB4\x02\xA9\x01\x0D\x02\xAA\x01\x3A\x02\xA7\x01\x15\x01\x0B\x01\x0C\x01\x0E\x01\xA6\x01\x0E\x01\x49\x01\x0D\x01\x0A\xFF\xFF"
"[33000]\x11\x01\xA5\x01\x47\x02\xA8\x01\x98\x01\xB4\x01\x09\x01\xD4\x02\xAD\x02\xAE\x01\xC5\x01\x07\x01\x8D\x01\x0C\x01\x0E\x01\x2B\x01\x3E\x01\x05\xFF\xFF"
"[37000]\x11\x01\x73\x01\x01\x01\x36\x01\x17\x01\x02\x01\x1A\x02\xAB\x01\x07\x02\xAC\x01\x1C\x01\x01\x01\x24\x01\x05\xFF\xFF"
"[39000]\x11\x01\x32\x01\x1C\x01\x31\x01\x93\x01\x37\x01\x0C\x01\x37\x01\x14\x01\x04\x01\x11\x01\x05\x01\x05\x01\x05\xFF\xFF"
"[40000]\x11\x02\xC1\x01\x84\x02\xC2\x02\xBF\x01\x19\x01\x1D\xFF\xFF""15\x11\x01\xC0\x01\x79\x01\x05\xFF\xFF"
"[43000]\x11\x01\x4D\x02\xC0\x01\x2A\x01\x08\x01\x0D\x01\x16\x01\xB7\x01\x2A\x01\xB5\x01\x08\x01\x1E\x01\x33\x01\x05\xFF\xFF"
"[45000]\x11\x01\x93\x02\xC5\x01\x16\x01\x0A\x01\xBF\x01\x01\x01\x0F\x01\x12\x01\x0D\x02\xC6\x01\x2A\x01\x1E\x01\x05\xFF\xFF"
"[47000]\x11\x01\x5A\x01\x71\x01\x42\x01\x1C\x01\x1E\x02\xC3\x01\x56\x01\x42\x01\x42\x01\x42\xFF\xFF"
"[50000]10\x11\x01\xC0\x01\x79\xFF\xFF"
"[54000]5\x11\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[55500]4\x11\x01\x06\x01\x06\x01\x06\xFF\xFF""3\x11\x01\x06\x01\x06\x01\x06\xFF\xFF""2\x11\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[60000]1\x11\x01\x06\x01\x06\x01\x06\xFF\xFF"
/* 23 */ ,
"[00001]\x01\x02\xC4\x01\xBB\x01\x16\x01\x98\x01\xBC\x01\x0D\x01\x3C\x01\x0E\x01\x04\x01\x07\x02\xB9\x01\x11\x01\x4A\x01\x0B\x01\x04\x01\x19\x01\x15\x01\x0E\x01\x24\x01\x1C\x01\x33\x01\x05\xFF\xFF"
"[04000]\x01\x02\xBA\x02\xB7\x01\x0C\x01\x0E\x01\x14\x01\x09\x01\x41\xFF\xFF"
"[06000]\x01\x01\x0B\x01\x69\x02\xB8\x01\x01\x01\x67\x01\x93\x01\x09\x01\xD3\x01\x01\x01\x61\x01\x14\x01\xA4\x01\x1D\x01\xA0\x01\x14\x01\x15\x01\x0E\x01\xA9\x01\x05\xFF\xFF"
"[09000]\x01\x01\x32\x01\x27\x01\x16\x01\x5F\x01\x1C\x01\x47\xFF\xFF"
"[10000]\x01\x01\x61\x01\x69\x01\x48\x01\x38\x01\x2B\x01\x0A\x01\x3C\x01\x01\x01\x34\x02\xBD\x02\xBE\x01\xB2\x01\x04\x01\x0C\x01\x2D\x01\x39\x01\x02\x01\x01\x01\x14\x01\x44\x01\x11\x01\x1A\x01\x32\x01\x2B\x01\x09\x01\x0D\x02\xBB\x01\x04\x01\x0C\x01\x01\x01\x14\x01\x0C\x01\x41\xFF\xFF"
"[13500]\x01\x01\x09\x01\x11\x01\x32\x01\x27\x01\x07\x01\x23\x01\x02\x01\x13\x01\x01\x01\x7B\x01\x7D\x01\x01\x02\xBC\x01\x0D\x01\xB9\x01\x49\x02\x91\x01\x2B\x01\x1D\x01\x8A\x01\x15\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[17000]\x01\x01\x49\x01\x62\x01\x15\x01\x0F\x01\xCB\x01\x15\x01\x0B\x01\x06\x01\x06\x01\x06\x01\x3C\x01\x09\x01\x0E\x01\x3C\x01\x01\x01\x61\x01\xCA\x01\x3A\x01\x01\x02\x92\x01\x04\x01\x0B\x01\x08\x01\x01\x01\x41\xFF\xFF"
"[20000]\x01\x01\xBC\x01\x0E\x01\x3A\x01\x79\x01\x3E\x01\x24\x01\x06\x01\x06\x01\x06\x01\xD0\x01\x01\x01\x7B\x01\x7D\x01\x01\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[21500]\x01\x01\x3C\x01\x15\x01\x0A\x01\x49\x01\x62\x01\x15\x01\x0F\x01\xCB\x01\x15\x01\x0B\xFF\xFF"" - \x01\x01\x8E\x01\x69\x01\x2B\x01\x09\x01\x38\x01\x0C\x01\x05\xFF\xFF"
"[24000]\x01\x01\x12\x01\x01\x01\x2D\x01\x39\x01\x02\x01\x0F\x01\x61\x01\xCA\x01\x3A\x01\x01\x01\x14\x01\x44\x01\x11\x01\x16\x01\xBF\x01\x0D\x01\x5F\x01\x12\x01\x0D\x01\x3C\x01\x08\x01\x01\xFF\xFF"
"[26500]\x01\x01\x55\x01\x18\x01\x06\x01\x51\x01\x1F\x01\x17\x01\x1A\x01\x54\x01\x6A\x01\x03\x01\x22\x01\x06\x01\x2E\x01\xE2\x02\x8F\x01\x02\x01\x15\x01\x0B\x01\xC4\x01\x7D\x01\x07\x01\xA8\x01\x15\x01\x0B\x02\x90\x01\x38\x01\x4A\x01\x0B\x01\x0C\x01\x08\x01\x05\xFF\xFF"
"[29500]\x01\x01\x32\x01\x27\x01\x16\x01\x5F\x01\x12\x01\x09\x01\x01\x01\x41\xFF\xFF"
"[30500]\x01\x01\x16\x01\x03\x01\x42\x01\x61\x01\x69\x01\x48\x01\x38\x01\x2B\x01\x15\x01\x0B\x01\xC4\x01\x7D\x02\x95\x01\x0C\x01\x70\x01\x37\x01\x12\x01\x0F\x01\x16\x01\x1D\x01\x2F\x01\x33\x01\x48\x01\x24\x01\x05\xFF\xFF"
"[34000]\x01\x01\x5F\x01\x12\x01\x15\x01\x0B\x01\x9F\x01\x0C\x01\x0B\x01\x08\x01\x33\x01\x2B\x01\x42\xFF\xFF"
"[37000]\x01\x01\x0C\x01\x8A\x01\x56\x01\x3C\x01\x01\x01\x46\x01\x17\x01\x02\x01\x18\x02\x96\x02\x93\x01\x1A\x01\x5F\x01\x12\x01\x0C\x01\x15\x01\x0E\x01\x14\x01\x1E\x01\x14\x01\x2B\x01\x33\x01\x48\x01\x2B\x01\x3E\x01\x24\x01\x05\xFF\xFF"
"[41500]\x01\x01\x55\x01\x18\x01\x06\x01\x51\x01\x1F\x01\x17\x01\x0D\x01\x9F\x01\x37\x01\x04\x01\x14\x01\x33\x01\x48\x01\x85\x01\x96\x01\x33\x01\x03\x01\x14\x01\x41\xFF\xFF"
"[00001]\x11\x02\xC4\x01\xBB\x01\x16\x01\x98\x01\xBC\x01\x0D\x01\x3C\x01\x0E\x01\x04\x01\x07\x02\xB9\x01\x11\x01\x4A\x01\x0B\x01\x04\x01\x19\x01\x15\x01\x0E\x01\x24\x01\x1C\x01\x33\x01\x05\xFF\xFF"
"[04000]\x11\x02\xBA\x02\xB7\x01\x0C\x01\x0E\x01\x14\x01\x09\x01\x41\xFF\xFF"
"[06000]\x11\x01\x0B\x01\x69\x02\xB8\x01\x01\x01\x67\x01\x93\x01\x09\x01\xD3\x01\x01\x01\x61\x01\x14\x01\xA4\x01\x1D\x01\xA0\x01\x14\x01\x15\x01\x0E\x01\xA9\x01\x05\xFF\xFF"
"[09000]\x11\x01\x32\x01\x27\x01\x16\x01\x5F\x01\x1C\x01\x47\xFF\xFF"
"[10000]\x11\x01\x61\x01\x69\x01\x48\x01\x38\x01\x2B\x01\x0A\x01\x3C\x01\x01\x01\x34\x02\xBD\x02\xBE\x01\xB2\x01\x04\x01\x0C\x01\x2D\x01\x39\x01\x02\x01\x01\x01\x14\x01\x44\x01\x11\x01\x1A\x01\x32\x01\x2B\x01\x09\x01\x0D\x02\xBB\x01\x04\x01\x0C\x01\x01\x01\x14\x01\x0C\x01\x41\xFF\xFF"
"[13500]\x11\x01\x09\x01\x11\x01\x32\x01\x27\x01\x07\x01\x23\x01\x02\x01\x13\x01\x01\x01\x7B\x01\x7D\x01\x01\x02\xBC\x01\x0D\x01\xB9\x01\x49\x02\x91\x01\x2B\x01\x1D\x01\x8A\x01\x15\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[17000]\x11\x01\x49\x01\x62\x01\x15\x01\x0F\x01\xCB\x01\x15\x01\x0B\x01\x06\x01\x06\x01\x06\x01\x3C\x01\x09\x01\x0E\x01\x3C\x01\x01\x01\x61\x01\xCA\x01\x3A\x01\x01\x02\x92\x01\x04\x01\x0B\x01\x08\x01\x01\x01\x41\xFF\xFF"
"[20000]\x11\x01\xBC\x01\x0E\x01\x3A\x01\x79\x01\x3E\x01\x24\x01\x06\x01\x06\x01\x06\x01\xD0\x01\x01\x01\x7B\x01\x7D\x01\x01\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[21500]\x11\x01\x3C\x01\x15\x01\x0A\x01\x49\x01\x62\x01\x15\x01\x0F\x01\xCB\x01\x15\x01\x0B\xFF\xFF"" - \x11\x01\x8E\x01\x69\x01\x2B\x01\x09\x01\x38\x01\x0C\x01\x05\xFF\xFF"
"[24000]\x11\x01\x12\x01\x01\x01\x2D\x01\x39\x01\x02\x01\x0F\x01\x61\x01\xCA\x01\x3A\x01\x01\x01\x14\x01\x44\x01\x11\x01\x16\x01\xBF\x01\x0D\x01\x5F\x01\x12\x01\x0D\x01\x3C\x01\x08\x01\x01\xFF\xFF"
"[26500]\x11\x01\x55\x01\x18\x01\x06\x01\x51\x01\x1F\x01\x17\x01\x1A\x01\x54\x01\x6A\x01\x03\x01\x22\x01\x06\x01\x2E\x01\xE2\x02\x8F\x01\x02\x01\x15\x01\x0B\x01\xC4\x01\x7D\x01\x07\x01\xA8\x01\x15\x01\x0B\x02\x90\x01\x38\x01\x4A\x01\x0B\x01\x0C\x01\x08\x01\x05\xFF\xFF"
"[29500]\x11\x01\x32\x01\x27\x01\x16\x01\x5F\x01\x12\x01\x09\x01\x01\x01\x41\xFF\xFF"
"[30500]\x11\x01\x16\x01\x03\x01\x42\x01\x61\x01\x69\x01\x48\x01\x38\x01\x2B\x01\x15\x01\x0B\x01\xC4\x01\x7D\x02\x95\x01\x0C\x01\x70\x01\x37\x01\x12\x01\x0F\x01\x16\x01\x1D\x01\x2F\x01\x33\x01\x48\x01\x24\x01\x05\xFF\xFF"
"[34000]\x11\x01\x5F\x01\x12\x01\x15\x01\x0B\x01\x9F\x01\x0C\x01\x0B\x01\x08\x01\x33\x01\x2B\x01\x42\xFF\xFF"
"[37000]\x11\x01\x0C\x01\x8A\x01\x56\x01\x3C\x01\x01\x01\x46\x01\x17\x01\x02\x01\x18\x02\x96\x02\x93\x01\x1A\x01\x5F\x01\x12\x01\x0C\x01\x15\x01\x0E\x01\x14\x01\x1E\x01\x14\x01\x2B\x01\x33\x01\x48\x01\x2B\x01\x3E\x01\x24\x01\x05\xFF\xFF"
"[41500]\x11\x01\x55\x01\x18\x01\x06\x01\x51\x01\x1F\x01\x17\x01\x0D\x01\x9F\x01\x37\x01\x04\x01\x14\x01\x33\x01\x48\x01\x85\x01\x96\x01\x33\x01\x03\x01\x14\x01\x41\xFF\xFF"
"[46000]"
"[50500]\x01\x01\x3C\x01\x3A\x01\x1A\x01\x0F\x01\x1C\x01\x05\x01\xA1\x01\x2B\x01\x01\x01\x61\x02\x94\x01\x05\xFF\xFF"
"[50500]\x11\x01\x3C\x01\x3A\x01\x1A\x01\x0F\x01\x1C\x01\x05\x01\xA1\x01\x2B\x01\x01\x01\x61\x02\x94\x01\x05\xFF\xFF"
/* 24 */ , ""
/* 25 */ ,
"[03000]\x01\x01\x12\x01\x12\x01\x0D\x02\x89\x01\x08\x01\x16\x01\x92\x01\x90\x01\x21\x01\x26\x01\x75\x01\x43\x01\x02\xFF\xFF"
"[06000]\x01\x01\x06\x01\x06\x01\x06\x01\x53\x01\x81\x01\x23\x01\x1F\x01\x17\x01\x02\x01\x21\x01\x26\x01\x18\x01\x07\x02\x8A\x02\x87\x01\x04\x01\x0E\x02\x88\x01\x6F\x01\x01\x02\x8D\x01\x7F\x02\x8E\x01\x53\x01\x09\x02\x8B\x02\x8C\x01\xA6\x01\x01\x01\x76\x01\x6F\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[11000]\x01\x01\x92\x01\x90\x01\x16\x01\x53\x01\x81\x01\x01\x02\xA1\x01\x0C\x01\x0D\x02\xA2\x01\xD5\x01\x14\x01\x01\x01\x24\x01\x1C\x01\x0D\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[14000]\x01\x01\x06\x01\x06\x01\x06\x01\x12\x01\x01\x02\x9F\x01\x27\x01\xB3\x01\x0B\x01\x0C\x01\x0E\x02\xA0\x01\x0D\x02\xA5\x02\xA6\x01\x0F\x01\xD7\x01\x07\x01\xD6\x01\x11\x01\x32\x01\x1C\x01\x0F\x01\x04\x01\x0E\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[18000]\x01\x02\xA3\x02\xA4\x01\x01\x01\x87\x01\x38\x01\xCC\x02\x99\x01\x15\x01\x0E\x01\x92\x01\x90\x01\x16\x01\x32\x01\x01\x02\x9A\x01\xD7\x01\x01\x02\x97\x02\x98\x01\x07\x01\xDF\x01\xEB\x02\x9D\x02\x9E\x01\x48\x01\x08\x01\x12\x01\x0F\x01\x16\x01\x09\x01\x14\x01\x15\x01\x0E\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[25000]\x01\x02\x9B\x01\x53\x01\x09\x01\x08\x01\x21\x01\x26\x01\x75\x01\x43\x01\x02\x02\x9C\x01\x0A\x01\x73\x01\x0E\x01\x49\x01\x0D\x01\x8E\x02\x45\x01\xF7\x01\x07\x01\x05\xFF\xFF"
/* 26 */ , "\x01\x01\x73\x01\x01\x01\x4C\x01\x0D\x01\x24\x01\x1C\x01\x12\x01\x32\x01\x05\xFF\xFF""@\x01\x01\x4C\x01\x01\x01\x4D\x01\x07\x01\xDD\x01\xDA\x01\x2A\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 27 */ , "\x01\x01\x25\x01\x28\x01\x20\x01\x03\x01\x10\x01\x04\x01\x0B\x01\x0A\x01\x55\x01\x4B\x01\x03\x01\x35\x01\x2C\x01\x34\x01\x22\x01\x03\x01\x30\x01\x0D\x02\x0A\x01\x15\x01\x0B\x01\x05\xFF\xFF"
/* 28 */ , "OK\x01\x01\x05\x01\x35\x01\x4E\x01\x02\x01\x36\x01\x01\x01\xD8\x01\xD1\x01\x04\x01\x19\x01\x04\x01\x62\x01\x1C\x01\x05\xFF\xFF""@\x01\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x05\xFF\xFF"
/* 29 */ , "\x01\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x14\x01\x11\x01\x2A\x01\x6C\x01\x0D\x01\x25\x01\x28\x01\x20\x01\x03\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x0A\xFF\xFF""@\x01\x01\x25\x01\x28\x01\x20\x01\x03\x01\x07\x01\x10\x01\x04\x01\x0E\x01\x25\x01\x28\x01\x0D\x01\x35\x01\x4E\x01\x02\x01\x36\x01\x2A\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 30 */ , "\x01\x01\x1C\x01\xD2\x01\xD2\x01\x0A\x01\x12\x01\x12\x01\x16\x01\xF9\x01\xFE\x01\x7C\x01\x24\xFF\xFF""@\x01\x02\x04\x01\x11\x01\x14\x01\x15\x01\x0B\x01\x0C\x01\x0B\x01\x8E\x01\x69\x01\x2B\x01\x09\x01\x38\x01\x0C\x01\x33\x01\x05\xFF\xFF""@\x01\x01\xE6\x01\xEC\x01\xFF\x01\x1A\x01\x19\x01\x3E\x01\xCE\x01\x09\x01\x0C\x01\x01\x01\x24\x01\x05\xFF\xFF"
/* 31 */ , "\x01\x01\x74\x01\x16\x01\x5E\x01\x02\x01\x21\x01\x51\x01\x0D\x01\x24\x01\x85\x01\x6B\x01\x15\x01\x0B\x01\xF6\x01\x19\x01\x04\x01\x62\x01\x1C\x01\x05\xFF\xFF""@\x01\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x07\x01\x10\x01\x04\x01\x09\x01\x1A\x01\x11\xFF\xFF""x\x01\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x05\xFF\xFF"
/* 32 */ , "\x01\x01\x12\x01\x01\x01\xFC\x01\xFB\x01\x16\x01\x73\x01\x01\x01\x35\x01\x30\x01\x24\x01\x05\xFF\xFF""@\x01\x01\x5F\x01\x1C\x01\x41\xFF\xFF"
/* 33 */ , "R1\x01\x01\x20\x01\x03\x01\x07\x01\x10\x01\x04\x01\x09\x01\x1A\x01\x11\x01\x25\x01\x28\x01\x20\x01\x03\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x0A\xFF\xFF""@\x01\x01\xAE\x01\xAC\x01\x01\x01\x0F\x01\x12\x01\x59\x01\x19\x01\x1D\x01\x78\x01\x0C\x01\x0B\x01\x05\xFF\xFF"
/* 34 */ , "R1\x01\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x0C\x01\x08\x01\x0F\x01\x0A\x01\x82\x01\x14\x01\x11\x01\x9E\x01\x49\x01\x09\x01\x0C\x01\x1E\x01\x24\x01\x05\xFF\xFF"
/* 35 */ , "\x01\x01\xFD\x01\x3A\x01\x07\x01\x99\x01\xA3\x01\x04\x01\x0E\x01\x0C\x01\x0F\x01\x2F\x01\x16\xFF\xFF""L1\x01\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x09\x01\x1A\x01\x11\x01\x0A\x01\x25\x01\x28\x01\x20\x01\x03\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x05\xFF\xFF""1\x01\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x09\x01\x1A\x01\x11\x01\x0A\x01\x25\x01\x28\x01\x20\x01\x03\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x05\xFF\xFF"
/* 36 */ , "\x01\x01\x19\x01\xCC\x01\x16\x01\x0A\x01\xAE\x01\xAC\x01\x01\x01\x0F\x01\x12\x01\x59\x01\x19\x01\x1D\x01\x78\x01\x0C\x01\x0B\x01\x0A\xFF\xFF""@\x01\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x09\x01\x1A\x01\x11\x01\x0A\x01\x2A\x01\x6C\x01\x0D\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x0A\xFF\xFF""@\x01\x01\xA7\x01\x4D\x01\x0D\x01\x0C\x01\x08\x01\x0F\x01\x2F\x01\x0D\xFF\xFF""x\x01\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x15\x02\x08\x01\x09\x01\x04\x01\x0D\x01\x2A\x01\x08\x01\x0F\x01\x0A\xFF\xFF""@\x01\x01\x46\x01\x5B\x01\x0D\x01\x70\x01\x14\x01\x19\x01\x27\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 37 */ , "x\x01\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0E\x01\x19\x01\x19\x01\x0A\x01\x31\x01\x07\x01\x10\x01\x2A\x01\x0F\x01\x6B\x01\x27\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 38 */ , "\x01\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x07\x01\x10\x01\x04\x01\x09\x01\x1A\x01\x11\x01\x0A\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x2A\x01\x0F\x01\x8C\x01\x3A\x01\x09\x01\x1A\x01\x11\x01\x35\x01\x4E\x01\x02\x01\x36\x01\x1A\x01\x1D\x01\x2F\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 39 */ , "\x01\x01\xB8\x01\x2F\x01\x1A\x02\x06\x01\x19\x01\x08\x01\x19\x01\x1D\x01\x78\x01\x0C\x01\x0B\x01\x79\x01\x83\x01\x04\x01\x0A\xFF\xFF""R1\x01\x01\x1B\x01\x13\x01\x02\x01\x07\x01\xF8\x01\x04\x01\x0B\x01\x14\x01\x11\xFF\xFF""@\x01\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x67\x01\x07\xFF\xFF""1\x01\x02\x32\x01\x10\x01\x04\x01\x0B\x01\x0A\x01\x12\x01\x27\x01\x1D\x01\xA0\x01\x8C\x01\x1A\x01\x1D\x01\x2F\x01\x08\x01\x24\x01\x1C\x01\x0D\x01\x09\x01\x08\x01\x1E\x01\x05\xFF\xFF""@\x01\x01\x31\x01\x07\x01\x10\x01\x04\x01\x0A\x01\x2A\x01\x6C\x01\x0D\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\xAA\x01\x44\x01\x08\x01\x05\xFF\xFF""@\x01\x01\x32\x01\x1C\x01\x2A\x01\x08\x01\x0F\x01\xC6\x01\x29\x01\xC6\x01\x29\x01\x01\x01\x0F\x01\x12\x01\x59\x01\x1D\x01\x35\x01\x4E\x01\x02\x01\x36\x01\x1D\x01\x2F\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 40 */ , "\x01\x01\x32\x01\x04\x01\x0B\x01\x74\x01\x16\x01\xA5\x01\x47\x02\x30\x01\x9A\x01\x09\x01\x12\x01\x0F\x01\x05\xFF\xFF""@\x01\x01\x8C\x01\x3A\x01\x09\x01\x1A\x01\x11\x01\x35\x01\x4E\x01\x02\x01\x36\x01\x07\x01\x04\x01\x0B\x01\xA7\x01\x4D\x01\x0D\x01\x0C\x01\x08\x01\x0F\x01\x2F\x01\x0A\xFF\xFF""@x\x01\x01\x1B\x01\x13\x01\x02\x01\x3E\x01\x44\x01\x07\x01\x10\x01\x04\x01\xAA\x01\x44\x01\x08\x01\x0F\x01\x82\x01\x01\x01\x46\x01\x5B\x01\x0D\x01\x70\x01\x14\x01\x19\x01\x27\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 41 */ , "\x01\x01\x0C\x01\x0C\x01\x1E\x01\x56\x01\x7A\xFF\xFF""OK\x01\x01\x05\xFF\xFF"
/* 42 */ , "\x01\x01\x24\x01\x85\x01\x6B\x01\x08\x01\x0D\x01\x16\xFF\xFF""x\x01\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0E\x01\x19\x01\x19\x01\x0A\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x05\xFF\xFF"
/* 43 */ , "\x01\x01\x31\x01\x01\x01\x18\x01\x91\x01\x03\x01\x18\x01\x1A\x02\x33\x01\x37\x01\x0B\x01\x0A\x01\x12\x01\x12\x01\x14\x01\x11\x01\x16\x01\x6B\x01\x27\x01\x09\x01\x0C\x01\x1E\x01\x05\xFF\xFF""@x\x01\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0E\x01\x19\x01\x19\x01\x0A\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x9C\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x0A\xFF\xFF""@\x01\x01\x9C\x02\x36\x01\x19\x01\x1D\x01\x5D\x01\x15\x01\x0E\x01\x11\x01\x0A\xFF\xFF""x\x01\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0E\x01\x19\x01\x19\x01\x0A\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x07\x01\x10\x01\x4A\x01\x80\x01\x6B\x01\x27\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 44 */ , "\x01\x01\x0C\x01\x0C\x01\x1E\x01\x56\x01\x7A\x01\x47\x01\x04\x01\x7B\x01\x77\x01\x07\x01\x04\x01\x0E\x01\x37\x01\x09\x01\x14\x01\x15\x01\x0E\x01\x11\x01\x0A\x01\xBD\x01\xBA\x01\x01\x01\x4D\x01\x1D\x01\x16\x02\x35\x02\x2B\x02\x2A\x01\x37\x01\x5D\x01\xB8\x01\x2A\x01\x08\x01\x12\x01\x0F\x01\x33\x01\x05\xFF\xFF"
/* 45 */ , "\x01\x01\xE9\x01\xC3\x01\x01\x01\xDF\x01\x59\x01\x0D\x01\x82\x01\x1A\x01\x3C\x01\x08\x01\x0F\x01\x2F\x01\x0A\xFF\xFF""@\x01\x01\x76\x01\xBB\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x67\x01\x07\x01\x10\x01\x04\x01\x0A\x01\x2A\x01\x6C\x01\x0D\xFF\xFF""x\x01\x01\x1B\x01\x13\x01\x02\x01\x3E\x01\x44\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x0A\xFF\xFF""@\x01\x01\x82\x01\x01\x01\x46\x01\x5B\x01\x0D\x01\xB9\x01\x11\x01\x67\x01\x1A\x01\x08\x01\x12\x01\x0F\x01\x47\x01\x1D\x01\x2F\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 46 */ , "\x01\x01\x85\x01\x96\x01\x3C\x01\x0A\x01\x74\x01\x0D\x01\x5D\x01\x2F\x01\x19\x01\x04\x01\x62\x01\x1C\x01\x05\xFF\xFF"
/* 47 */ , "\x01\x01\x74\x01\x16\x01\x94\x01\xB5\x01\x01\x01\xD8\x01\xD1\x01\x33\x01\x05\xFF\xFF"
/* 48 */ , "\x01\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x0F\x01\x25\x01\x28\x01\x20\x01\x03\x01\x07\x01\xA8\x01\x15\x01\x0B\x01\x0A\xFF\xFF""@\x01\x01\x94\x01\xA4\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 49 */ , "\x01\x02\x2C\x01\x04\x01\x14\x01\x15\x01\x0E\x01\x56\xFF\xFF""@\x01\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x0A\xFF\xFF""L2\x01\x01\x1B\x01\x13\x01\x02\x01\x0F\xFF\xFF""R2\x01\x01\x1B\x01\x13\x01\x02\x01\x1D\x01\x66\x01\x31\x01\x94\x01\x6C\x01\x12\x01\x0F\x01\x1A\x01\x1D\x01\x2F\x01\x08\x01\x1E\x01\x05\xFF\xFF""@\x01\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x1D\x01\x19\x01\x0E\x01\xC1\x01\x27\x01\x08\x01\x01\x01\x05\xFF\xFF""@\x01\x01\x36\x01\x03\x01\x22\x01\x01\x01\x46\x01\x5B\x01\x0D\x01\x5D\x01\x15\x01\x0B\x01\x0A\xFF\xFF""x\x01\x01\x1B\x01\x13\x01\x02\x01\x0F\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x07\x01\x10\x01\x2A\x01\x0F\x01\x66\x01\x14\x01\x11\x01\x31\x01\x1A\x01\x27\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 50 */ , "\x01\x01\x32\x01\x59\x01\x32\x01\x59\x02\x2E\x02\x2D\x01\x0D\x01\x5D\x01\x2F\x01\x19\x01\x04\x01\x62\x01\x1C\x01\x14\x01\x41\xFF\xFF"
/* 51 */ , "\x01\x01\x12\x01\x01\x01\x71\x01\x18\x02\x40\x01\x1A\x01\x06\x01\x06\x01\x06\x01\x42\xFF\xFF"
/* 52 */ , "\x01\x01\x12\x01\x0C\x01\x70\x01\x11\x01\x76\x01\x6F\x01\x76\x01\x6F\x01\xDD\x01\xDA\x01\x04\x01\x33\x01\x48\x01\x0F\x01\x09\x01\x05\xFF\xFF"
/* 53 */ , "\x01\x01\x32\x01\x0C\x01\x70\x01\xA3\x01\x4A\x01\x0F\x01\x16\x01\xEF\x01\x1E\x01\x33\x01\x48\x01\x42\xFF\xFF""@\x01\x01\x09\x01\xA9\x01\x09\x01\x11\x01\x0A\x01\x12\x01\x12\x01\x1D\x02\x3F\x01\x2B\x01\x1D\x01\x47\x01\x11\x01\x1C\x01\x14\x01\x11\x01\x38\x01\x3C\x01\x05\xFF\xFF"
/* 54 */ , "\x01\x01\x73\x01\x1A\x01\x32\x01\x2B\x01\x09\x01\x0D\x02\x3E\x02\x41\x01\x0D\x01\x8A\x01\x11\x01\x27\x01\x08\x01\x0F\x02\x44\x01\x1C\x01\x41\xFF\xFF"
/* 55 */ , "\x01\x01\x65\x01\x02\x01\x88\x01\x01\x02\x43\x02\x42\x01\x07\x02\x39\x01\x44\x01\xA2\x01\x08\x01\x0D\x01\x16\x02\x37\x01\x04\x01\xB7\x01\x14\x01\x15\x01\x0E\x01\x24\x01\x1C\x01\x3E\x01\x09\x01\x7A\x01\x50\x01\x2E\x01\xE4\x02\x3A\x02\x3D\x01\x22\x01\x05\xFF\xFF""@\x01\x01\x12\x01\x1C\x01\x0C\x01\x1C\x01\x47\x01\x01\x01\x16\x02\x3C\x01\x49\x01\xA2\x01\x11\x01\x09\x01\x44\x01\x27\x01\x80\x01\x09\x01\x11\x01\x09\x01\x0C\x01\x14\x01\x11\x01\x33\x01\x05\xFF\xFF""@\x01\x01\x1C\x01\x56\x01\x7A\x01\xD6\x01\x0D\x01\x87\x02\x3B\x01\x3E\x01\x05\x02\x28\x01\x0F\x01\x12\x01\x1C\x01\x04\x01\x0B\x01\xC5\x01\x1E\x01\x09\x01\x44\x01\x27\x01\x80\x01\x09\x01\x11\x01\x09\x01\x0C\x01\x09\x01\x2B\x01\x0B\x01\x05\xFF\xFF""@\x01\x01\x1D\x01\x47\x01\x0A\x01\x12\x01\x27\x01\x1A\x01\xE6\x01\xE5\x01\x09\x01\x01\x01\x38\x01\x05\xFF\xFF"
"[03000]\x11\x01\x12\x01\x12\x01\x0D\x02\x89\x01\x08\x01\x16\x01\x92\x01\x90\x01\x21\x01\x26\x01\x75\x01\x43\x01\x02\xFF\xFF"
"[06000]\x11\x01\x06\x01\x06\x01\x06\x01\x53\x01\x81\x01\x23\x01\x1F\x01\x17\x01\x02\x01\x21\x01\x26\x01\x18\x01\x07\x02\x8A\x02\x87\x01\x04\x01\x0E\x02\x88\x01\x6F\x01\x01\x02\x8D\x01\x7F\x02\x8E\x01\x53\x01\x09\x02\x8B\x02\x8C\x01\xA6\x01\x01\x01\x76\x01\x6F\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[11000]\x11\x01\x92\x01\x90\x01\x16\x01\x53\x01\x81\x01\x01\x02\xA1\x01\x0C\x01\x0D\x02\xA2\x01\xD5\x01\x14\x01\x01\x01\x24\x01\x1C\x01\x0D\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[14000]\x11\x01\x06\x01\x06\x01\x06\x01\x12\x01\x01\x02\x9F\x01\x27\x01\xB3\x01\x0B\x01\x0C\x01\x0E\x02\xA0\x01\x0D\x02\xA5\x02\xA6\x01\x0F\x01\xD7\x01\x07\x01\xD6\x01\x11\x01\x32\x01\x1C\x01\x0F\x01\x04\x01\x0E\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[18000]\x11\x02\xA3\x02\xA4\x01\x01\x01\x87\x01\x38\x01\xCC\x02\x99\x01\x15\x01\x0E\x01\x92\x01\x90\x01\x16\x01\x32\x01\x01\x02\x9A\x01\xD7\x01\x01\x02\x97\x02\x98\x01\x07\x01\xDF\x01\xEB\x02\x9D\x02\x9E\x01\x48\x01\x08\x01\x12\x01\x0F\x01\x16\x01\x09\x01\x14\x01\x15\x01\x0E\x01\x06\x01\x06\x01\x06\xFF\xFF"
"[25000]\x11\x02\x9B\x01\x53\x01\x09\x01\x08\x01\x21\x01\x26\x01\x75\x01\x43\x01\x02\x02\x9C\x01\x0A\x01\x73\x01\x0E\x01\x49\x01\x0D\x01\x8E\x02\x45\x01\xF7\x01\x07\x01\x05\xFF\xFF"
/* 26 */ , "\x11\x01\x73\x01\x01\x01\x4C\x01\x0D\x01\x24\x01\x1C\x01\x12\x01\x32\x01\x05\xFF\xFF""@\x11\x01\x4C\x01\x01\x01\x4D\x01\x07\x01\xDD\x01\xDA\x01\x2A\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 27 */ , "\x11\x01\x25\x01\x28\x01\x20\x01\x03\x01\x10\x01\x04\x01\x0B\x01\x0A\x01\x55\x01\x4B\x01\x03\x01\x35\x01\x2C\x01\x34\x01\x22\x01\x03\x01\x30\x01\x0D\x02\x0A\x01\x15\x01\x0B\x01\x05\xFF\xFF"
/* 28 */ , "OK\x11\x01\x05\x01\x35\x01\x4E\x01\x02\x01\x36\x01\x01\x01\xD8\x01\xD1\x01\x04\x01\x19\x01\x04\x01\x62\x01\x1C\x01\x05\xFF\xFF""@\x11\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x05\xFF\xFF"
/* 29 */ , "\x11\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x14\x01\x11\x01\x2A\x01\x6C\x01\x0D\x01\x25\x01\x28\x01\x20\x01\x03\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x0A\xFF\xFF""@\x11\x01\x25\x01\x28\x01\x20\x01\x03\x01\x07\x01\x10\x01\x04\x01\x0E\x01\x25\x01\x28\x01\x0D\x01\x35\x01\x4E\x01\x02\x01\x36\x01\x2A\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 30 */ , "\x11\x01\x1C\x01\xD2\x01\xD2\x01\x0A\x01\x12\x01\x12\x01\x16\x01\xF9\x01\xFE\x01\x7C\x01\x24\xFF\xFF""@\x11\x02\x04\x01\x11\x01\x14\x01\x15\x01\x0B\x01\x0C\x01\x0B\x01\x8E\x01\x69\x01\x2B\x01\x09\x01\x38\x01\x0C\x01\x33\x01\x05\xFF\xFF""@\x11\x01\xE6\x01\xEC\x01\xFF\x01\x1A\x01\x19\x01\x3E\x01\xCE\x01\x09\x01\x0C\x01\x01\x01\x24\x01\x05\xFF\xFF"
/* 31 */ , "\x11\x01\x74\x01\x16\x01\x5E\x01\x02\x01\x21\x01\x51\x01\x0D\x01\x24\x01\x85\x01\x6B\x01\x15\x01\x0B\x01\xF6\x01\x19\x01\x04\x01\x62\x01\x1C\x01\x05\xFF\xFF""@\x11\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x07\x01\x10\x01\x04\x01\x09\x01\x1A\x01\x11\xFF\xFF""x\x11\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x05\xFF\xFF"
/* 32 */ , "\x11\x01\x12\x01\x01\x01\xFC\x01\xFB\x01\x16\x01\x73\x01\x01\x01\x35\x01\x30\x01\x24\x01\x05\xFF\xFF""@\x11\x01\x5F\x01\x1C\x01\x41\xFF\xFF"
/* 33 */ , "R1\x11\x01\x20\x01\x03\x01\x07\x01\x10\x01\x04\x01\x09\x01\x1A\x01\x11\x01\x25\x01\x28\x01\x20\x01\x03\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x0A\xFF\xFF""@\x11\x01\xAE\x01\xAC\x01\x01\x01\x0F\x01\x12\x01\x59\x01\x19\x01\x1D\x01\x78\x01\x0C\x01\x0B\x01\x05\xFF\xFF"
/* 34 */ , "R1\x11\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x0C\x01\x08\x01\x0F\x01\x0A\x01\x82\x01\x14\x01\x11\x01\x9E\x01\x49\x01\x09\x01\x0C\x01\x1E\x01\x24\x01\x05\xFF\xFF"
/* 35 */ , "\x11\x01\xFD\x01\x3A\x01\x07\x01\x99\x01\xA3\x01\x04\x01\x0E\x01\x0C\x01\x0F\x01\x2F\x01\x16\xFF\xFF""L1\x11\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x09\x01\x1A\x01\x11\x01\x0A\x01\x25\x01\x28\x01\x20\x01\x03\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x05\xFF\xFF""@1\x11\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x09\x01\x1A\x01\x11\x01\x0A\x01\x25\x01\x28\x01\x20\x01\x03\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x05\xFF\xFF"
/* 36 */ , "\x11\x01\x19\x01\xCC\x01\x16\x01\x0A\x01\xAE\x01\xAC\x01\x01\x01\x0F\x01\x12\x01\x59\x01\x19\x01\x1D\x01\x78\x01\x0C\x01\x0B\x01\x0A\xFF\xFF""@\x11\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x09\x01\x1A\x01\x11\x01\x0A\x01\x2A\x01\x6C\x01\x0D\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x0A\xFF\xFF""@\x11\x01\xA7\x01\x4D\x01\x0D\x01\x0C\x01\x08\x01\x0F\x01\x2F\x01\x0D\xFF\xFF""x\x11\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x15\x02\x08\x01\x09\x01\x04\x01\x0D\x01\x2A\x01\x08\x01\x0F\x01\x0A\xFF\xFF""@\x11\x01\x46\x01\x5B\x01\x0D\x01\x70\x01\x14\x01\x19\x01\x27\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 37 */ , "x\x11\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0E\x01\x19\x01\x19\x01\x0A\x01\x31\x01\x07\x01\x10\x01\x2A\x01\x0F\x01\x6B\x01\x27\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 38 */ , "\x11\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x07\x01\x10\x01\x04\x01\x09\x01\x1A\x01\x11\x01\x0A\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x2A\x01\x0F\x01\x8C\x01\x3A\x01\x09\x01\x1A\x01\x11\x01\x35\x01\x4E\x01\x02\x01\x36\x01\x1A\x01\x1D\x01\x2F\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 39 */ , "\x11\x01\xB8\x01\x2F\x01\x1A\x02\x06\x01\x19\x01\x08\x01\x19\x01\x1D\x01\x78\x01\x0C\x01\x0B\x01\x79\x01\x83\x01\x04\x01\x0A\xFF\xFF""R1\x11\x01\x1B\x01\x13\x01\x02\x01\x07\x01\xF8\x01\x04\x01\x0B\x01\x14\x01\x11\xFF\xFF""@\x11\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x67\x01\x07\xFF\xFF""1\x11\x02\x32\x01\x10\x01\x04\x01\x0B\x01\x0A\x01\x12\x01\x27\x01\x1D\x01\xA0\x01\x8C\x01\x1A\x01\x1D\x01\x2F\x01\x08\x01\x24\x01\x1C\x01\x0D\x01\x09\x01\x08\x01\x1E\x01\x05\xFF\xFF""@\x11\x01\x31\x01\x07\x01\x10\x01\x04\x01\x0A\x01\x2A\x01\x6C\x01\x0D\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\xAA\x01\x44\x01\x08\x01\x05\xFF\xFF""@\x11\x01\x32\x01\x1C\x01\x2A\x01\x08\x01\x0F\x01\xC6\x01\x29\x01\xC6\x01\x29\x01\x01\x01\x0F\x01\x12\x01\x59\x01\x1D\x01\x35\x01\x4E\x01\x02\x01\x36\x01\x1D\x01\x2F\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 40 */ , "\x11\x01\x32\x01\x04\x01\x0B\x01\x74\x01\x16\x01\xA5\x01\x47\x02\x30\x01\x9A\x01\x09\x01\x12\x01\x0F\x01\x05\xFF\xFF""@\x11\x01\x8C\x01\x3A\x01\x09\x01\x1A\x01\x11\x01\x35\x01\x4E\x01\x02\x01\x36\x01\x07\x01\x04\x01\x0B\x01\xA7\x01\x4D\x01\x0D\x01\x0C\x01\x08\x01\x0F\x01\x2F\x01\x0A\xFF\xFF""@x\x11\x01\x1B\x01\x13\x01\x02\x01\x3E\x01\x44\x01\x07\x01\x10\x01\x04\x01\xAA\x01\x44\x01\x08\x01\x0F\x01\x82\x01\x01\x01\x46\x01\x5B\x01\x0D\x01\x70\x01\x14\x01\x19\x01\x27\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 41 */ , "\x11\x01\x0C\x01\x0C\x01\x1E\x01\x56\x01\x7A\xFF\xFF""OK\x11\x01\x05\xFF\xFF"
/* 42 */ , "\x11\x01\x24\x01\x85\x01\x6B\x01\x08\x01\x0D\x01\x16\xFF\xFF""x\x11\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0E\x01\x19\x01\x19\x01\x0A\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x05\xFF\xFF"
/* 43 */ , "\x11\x01\x31\x01\x01\x01\x18\x01\x91\x01\x03\x01\x18\x01\x1A\x02\x33\x01\x37\x01\x0B\x01\x0A\x01\x12\x01\x12\x01\x14\x01\x11\x01\x16\x01\x6B\x01\x27\x01\x09\x01\x0C\x01\x1E\x01\x05\xFF\xFF""@x\x11\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0E\x01\x19\x01\x19\x01\x0A\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x9C\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x0A\xFF\xFF""@\x11\x01\x9C\x02\x36\x01\x19\x01\x1D\x01\x5D\x01\x15\x01\x0E\x01\x11\x01\x0A\xFF\xFF""x\x11\x01\x1B\x01\x13\x01\x02\x01\x07\x01\x10\x01\x04\x01\x0E\x01\x19\x01\x19\x01\x0A\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x07\x01\x10\x01\x4A\x01\x80\x01\x6B\x01\x27\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 44 */ , "\x11\x01\x0C\x01\x0C\x01\x1E\x01\x56\x01\x7A\x01\x47\x01\x04\x01\x7B\x01\x77\x01\x07\x01\x04\x01\x0E\x01\x37\x01\x09\x01\x14\x01\x15\x01\x0E\x01\x11\x01\x0A\x01\xBD\x01\xBA\x01\x01\x01\x4D\x01\x1D\x01\x16\x02\x35\x02\x2B\x02\x2A\x01\x37\x01\x5D\x01\xB8\x01\x2A\x01\x08\x01\x12\x01\x0F\x01\x33\x01\x05\xFF\xFF"
/* 45 */ , "\x11\x01\xE9\x01\xC3\x01\x01\x01\xDF\x01\x59\x01\x0D\x01\x82\x01\x1A\x01\x3C\x01\x08\x01\x0F\x01\x2F\x01\x0A\xFF\xFF""@\x11\x01\x76\x01\xBB\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x67\x01\x07\x01\x10\x01\x04\x01\x0A\x01\x2A\x01\x6C\x01\x0D\xFF\xFF""x\x11\x01\x1B\x01\x13\x01\x02\x01\x3E\x01\x44\x01\x07\x01\x10\x01\x04\x01\x0B\x01\x0A\xFF\xFF""@\x11\x01\x82\x01\x01\x01\x46\x01\x5B\x01\x0D\x01\xB9\x01\x11\x01\x67\x01\x1A\x01\x08\x01\x12\x01\x0F\x01\x47\x01\x1D\x01\x2F\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 46 */ , "\x11\x01\x85\x01\x96\x01\x3C\x01\x0A\x01\x74\x01\x0D\x01\x5D\x01\x2F\x01\x19\x01\x04\x01\x62\x01\x1C\x01\x05\xFF\xFF"
/* 47 */ , "\x11\x01\x74\x01\x16\x01\x94\x01\xB5\x01\x01\x01\xD8\x01\xD1\x01\x33\x01\x05\xFF\xFF"
/* 48 */ , "\x11\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x0F\x01\x25\x01\x28\x01\x20\x01\x03\x01\x07\x01\xA8\x01\x15\x01\x0B\x01\x0A\xFF\xFF""@\x11\x01\x94\x01\xA4\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 49 */ , "\x11\x02\x2C\x01\x04\x01\x14\x01\x15\x01\x0E\x01\x56\xFF\xFF""@\x11\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x0A\xFF\xFF""L2\x11\x01\x1B\x01\x13\x01\x02\x01\x0F\xFF\xFF""R2\x11\x01\x1B\x01\x13\x01\x02\x01\x1D\x01\x66\x01\x31\x01\x94\x01\x6C\x01\x12\x01\x0F\x01\x1A\x01\x1D\x01\x2F\x01\x08\x01\x1E\x01\x05\xFF\xFF""@\x11\x01\x57\x01\x1B\x01\x13\x01\x02\x01\x1D\x01\x19\x01\x0E\x01\xC1\x01\x27\x01\x08\x01\x01\x01\x05\xFF\xFF""@\x11\x01\x36\x01\x03\x01\x22\x01\x01\x01\x46\x01\x5B\x01\x0D\x01\x5D\x01\x15\x01\x0B\x01\x0A\xFF\xFF""x\x11\x01\x1B\x01\x13\x01\x02\x01\x0F\x01\x25\x01\x28\x01\x20\x01\x03\x01\x01\x01\x31\x01\x07\x01\x10\x01\x2A\x01\x0F\x01\x66\x01\x14\x01\x11\x01\x31\x01\x1A\x01\x27\x01\x08\x01\x1E\x01\x05\xFF\xFF"
/* 50 */ , "\x11\x01\x32\x01\x59\x01\x32\x01\x59\x02\x2E\x02\x2D\x01\x0D\x01\x5D\x01\x2F\x01\x19\x01\x04\x01\x62\x01\x1C\x01\x14\x01\x41\xFF\xFF"
/* 51 */ , "\x11\x01\x12\x01\x01\x01\x71\x01\x18\x02\x40\x01\x1A\x01\x06\x01\x06\x01\x06\x01\x42\xFF\xFF"
/* 52 */ , "\x11\x01\x12\x01\x0C\x01\x70\x01\x11\x01\x76\x01\x6F\x01\x76\x01\x6F\x01\xDD\x01\xDA\x01\x04\x01\x33\x01\x48\x01\x0F\x01\x09\x01\x05\xFF\xFF"
/* 53 */ , "\x11\x01\x32\x01\x0C\x01\x70\x01\xA3\x01\x4A\x01\x0F\x01\x16\x01\xEF\x01\x1E\x01\x33\x01\x48\x01\x42\xFF\xFF""@\x11\x01\x09\x01\xA9\x01\x09\x01\x11\x01\x0A\x01\x12\x01\x12\x01\x1D\x02\x3F\x01\x2B\x01\x1D\x01\x47\x01\x11\x01\x1C\x01\x14\x01\x11\x01\x38\x01\x3C\x01\x05\xFF\xFF"
/* 54 */ , "\x11\x01\x73\x01\x1A\x01\x32\x01\x2B\x01\x09\x01\x0D\x02\x3E\x02\x41\x01\x0D\x01\x8A\x01\x11\x01\x27\x01\x08\x01\x0F\x02\x44\x01\x1C\x01\x41\xFF\xFF"
/* 55 */ , "\x11\x01\x65\x01\x02\x01\x88\x01\x01\x02\x43\x02\x42\x01\x07\x02\x39\x01\x44\x01\xA2\x01\x08\x01\x0D\x01\x16\x02\x37\x01\x04\x01\xB7\x01\x14\x01\x15\x01\x0E\x01\x24\x01\x1C\x01\x3E\x01\x09\x01\x7A\x01\x50\x01\x2E\x01\xE4\x02\x3A\x02\x3D\x01\x22\x01\x05\xFF\xFF""@\x11\x01\x12\x01\x1C\x01\x0C\x01\x1C\x01\x47\x01\x01\x01\x16\x02\x3C\x01\x49\x01\xA2\x01\x11\x01\x09\x01\x44\x01\x27\x01\x80\x01\x09\x01\x11\x01\x09\x01\x0C\x01\x14\x01\x11\x01\x33\x01\x05\xFF\xFF""@\x11\x01\x1C\x01\x56\x01\x7A\x01\xD6\x01\x0D\x01\x87\x02\x3B\x01\x3E\x01\x05\x02\x28\x01\x0F\x01\x12\x01\x1C\x01\x04\x01\x0B\x01\xC5\x01\x1E\x01\x09\x01\x44\x01\x27\x01\x80\x01\x09\x01\x11\x01\x09\x01\x0C\x01\x09\x01\x2B\x01\x0B\x01\x05\xFF\xFF""@\x11\x01\x1D\x01\x47\x01\x0A\x01\x12\x01\x27\x01\x1A\x01\xE6\x01\xE5\x01\x09\x01\x01\x01\x38\x01\x05\xFF\xFF"
/* 56 */ , ""
// TR1 levels
, "\x01\x01\x17\x01\x17\x01\x01\x01\x4C\xFF\xFF"
, "\x01\x02\x13\x02\x16\xFF\xFF"
, "\x01\x02\x18\x02\x17\x01\xEE\x01\xED\x01\x65\x01\x22\x01\x43\x01\x45\x01\x02\x01\x45\xFF\xFF"
, "\x01\x01\x52\x01\x18\x01\x1F\x01\x06\x01\x45\x01\x3D\x01\x03\xFF\xFF"
, "\x01\x01\x34\x01\x23\x01\x52\x01\x91\x01\x2C\x01\x34\x01\xEA\x01\x8B\xFF\xFF"
, "\x01\x01\x8F\x01\x46\x01\x17\x01\x02\x01\x2D\x01\x18\x01\x8F\x02\x0D\xFF\xFF"
, "\x01\x01\x5E\x01\x52\x01\x2D\x01\x23\x01\x30\xFF\xFF"
, "\x01\x01\x55\x01\x5A\x01\x18\x01\x01\x02\x0C\x02\x11\xFF\xFF"
, "\x01\x02\x10\x01\x66\x02\x23\xFF\xFF"
, "\x01\x01\x21\x01\x26\x01\x75\x01\x43\x01\x02\x01\xEA\x01\x8B\xFF\xFF"
, "\x01\x01\x43\x01\x03\x01\x30\x01\x03\x01\x02\x01\x01\x01\xEE\x01\xED\x01\xBD\x01\xBA\xFF\xFF"
, "\x01\x01\x43\x01\x03\x01\x30\x01\x03\x01\x02\x01\x01\x01\x39\x01\x6D\x01\x29\x01\x18\x01\x34\xFF\xFF"
, "\x01\x01\x2D\x01\x39\x01\x02\x01\x01\x01\x8F\x02\x27\xFF\xFF"
, "\x01\x01\x51\x01\x1F\x01\x17\x01\x01\x02\x26\x02\x25\xFF\xFF"
, "\x01\x01\x23\x01\x1F\x01\x17\x01\x02\x01\x21\x01\x26\x01\x18\xFF\xFF"
, "\x01\x01\x3F\x01\x3D\x01\x03\x01\x1F\x01\x06\x01\x54\x01\x17\x01\x55\x01\x2C\x01\x2E\xFF\xFF"
, "\x01\x01\x6A\x01\x35\x01\x36\x01\x1F\x02\x1C\x02\x1B\xFF\xFF"
, "\x01\x02\x1A\x01\x01\x01\x6E\xFF\xFF"
, "\x01\x01\x23\x01\x1F\x01\x17\x01\x02\x01\x21\x01\x26\x01\x18\x02\x20\x02\x1F\x02\x1E\x01\x01\x02\x1D\x01\x97\xFF\xFF"
, "\x01\x01\xCF\x02\x24\xFF\xFF"
, "\x11\x01\x17\x01\x17\x01\x01\x01\x4C\xFF\xFF"
, "\x11\x02\x13\x02\x16\xFF\xFF"
, "\x11\x02\x18\x02\x17\x01\xEE\x01\xED\x01\x65\x01\x22\x01\x43\x01\x45\x01\x02\x01\x45\xFF\xFF"
, "\x11\x01\x52\x01\x18\x01\x1F\x01\x06\x01\x45\x01\x3D\x01\x03\xFF\xFF"
, "\x11\x01\x34\x01\x23\x01\x52\x01\x91\x01\x2C\x01\x34\x01\xEA\x01\x8B\xFF\xFF"
, "\x11\x01\x8F\x01\x46\x01\x17\x01\x02\x01\x2D\x01\x18\x01\x8F\x02\x0D\xFF\xFF"
, "\x11\x01\x5E\x01\x52\x01\x2D\x01\x23\x01\x30\xFF\xFF"
, "\x11\x01\x55\x01\x5A\x01\x18\x01\x01\x02\x0C\x02\x11\xFF\xFF"
, "\x11\x02\x10\x01\x66\x02\x23\xFF\xFF"
, "\x11\x01\x21\x01\x26\x01\x75\x01\x43\x01\x02\x01\xEA\x01\x8B\xFF\xFF"
, "\x11\x01\x43\x01\x03\x01\x30\x01\x03\x01\x02\x01\x01\x01\xEE\x01\xED\x01\xBD\x01\xBA\xFF\xFF"
, "\x11\x01\x43\x01\x03\x01\x30\x01\x03\x01\x02\x01\x01\x01\x39\x01\x6D\x01\x29\x01\x18\x01\x34\xFF\xFF"
, "\x11\x01\x2D\x01\x39\x01\x02\x01\x01\x01\x8F\x02\x27\xFF\xFF"
, "\x11\x01\x51\x01\x1F\x01\x17\x01\x01\x02\x26\x02\x25\xFF\xFF"
, "\x11\x01\x23\x01\x1F\x01\x17\x01\x02\x01\x21\x01\x26\x01\x18\xFF\xFF"
, "\x11\x01\x3F\x01\x3D\x01\x03\x01\x1F\x01\x06\x01\x54\x01\x17\x01\x55\x01\x2C\x01\x2E\xFF\xFF"
, "\x11\x01\x6A\x01\x35\x01\x36\x01\x1F\x02\x1C\x02\x1B\xFF\xFF"
, "\x11\x02\x1A\x01\x01\x01\x6E\xFF\xFF"
, "\x11\x01\x23\x01\x1F\x01\x17\x01\x02\x01\x21\x01\x26\x01\x18\x02\x20\x02\x1F\x02\x1E\x01\x01\x02\x1D\x01\x97\xFF\xFF"
, "\x11\x01\xCF\x02\x24\xFF\xFF"
// TR2 levels
, "\x01\x01\x17\x01\x17\x01\x01\x01\x4C\xFF\xFF"
, "\x01\x02\x21\x02\x22\x01\x01\x02\x12\x01\x97\xFF\xFF"
, "\x01\x01\x6D\x01\xAB\x01\x18\xFF\xFF"
, "\x01\x01\x45\x01\x22\x01\x1F\x01\x03\x01\x29\x01\x01\x02\x0F\x01\x27\x01\x4C\xFF\xFF"
, "\x01\x01\x39\x01\x91\x01\x17\x01\xE8\x01\x63\x01\x18\xFF\xFF"
, "\x01\x01\xE7\x01\x31\x02\x0E\x02\x19\xFF\xFF"
, "\x01\x01\xC1\x01\x66\x01\x9B\xFF\xFF"
, "\x01\x01\xE7\x01\xAD\xFF\xFF"
, "\x01\x01\x50\x01\x29\x01\x23\x02\x14\x01\x01\x01\x87\x02\x15\xFF\xFF"
, "\x01\x02\x38\x01\xAD\xFF\xFF"
, "\x01\x01\x58\x01\x2C\x01\x20\xFF\xFF"
, "\x01\x01\x5B\x01\x6D\x01\x2C\x01\x1F\x01\x01\x02\x2F\x02\x29\xFF\xFF"
, "\x01\x01\x45\x01\x03\x01\x43\x01\x02\x01\x3F\x01\x6E\x01\x95\xFF\xFF"
, "\x01\x01\x13\x01\x29\x01\x39\x01\x02\x01\x01\x01\x8B\xFF\xFF"
, "\x01\x02\x34\x01\x01\x01\x97\xFF\xFF"
, "\x01\x02\x31\x01\xFA\x01\x01\x01\x6E\xFF\xFF"
, "\x01\x01\xF1\x02\x07\xFF\xFF"
, "\x01\x01\x2E\x01\x17\x01\x88\x01\x02\x01\x01\x01\xCF\xFF\xFF"
, "\x01\x01\x17\x01\x17\x01\x01\x01\x4C\xFF\xFF"
, "\x11\x01\x17\x01\x17\x01\x01\x01\x4C\xFF\xFF"
, "\x11\x02\x21\x02\x22\x01\x01\x02\x12\x01\x97\xFF\xFF"
, "\x11\x01\x6D\x01\xAB\x01\x18\xFF\xFF"
, "\x11\x01\x45\x01\x22\x01\x1F\x01\x03\x01\x29\x01\x01\x02\x0F\x01\x27\x01\x4C\xFF\xFF"
, "\x11\x01\x39\x01\x91\x01\x17\x01\xE8\x01\x63\x01\x18\xFF\xFF"
, "\x11\x01\xE7\x01\x31\x02\x0E\x02\x19\xFF\xFF"
, "\x11\x01\xC1\x01\x66\x01\x9B\xFF\xFF"
, "\x11\x01\xE7\x01\xAD\xFF\xFF"
, "\x11\x01\x50\x01\x29\x01\x23\x02\x14\x01\x01\x01\x87\x02\x15\xFF\xFF"
, "\x11\x02\x38\x01\xAD\xFF\xFF"
, "\x11\x01\x58\x01\x2C\x01\x20\xFF\xFF"
, "\x11\x01\x5B\x01\x6D\x01\x2C\x01\x1F\x01\x01\x02\x2F\x02\x29\xFF\xFF"
, "\x11\x01\x45\x01\x03\x01\x43\x01\x02\x01\x3F\x01\x6E\x01\x95\xFF\xFF"
, "\x11\x01\x13\x01\x29\x01\x39\x01\x02\x01\x01\x01\x8B\xFF\xFF"
, "\x11\x02\x34\x01\x01\x01\x97\xFF\xFF"
, "\x11\x02\x31\x01\xFA\x01\x01\x01\x6E\xFF\xFF"
, "\x11\x01\xF1\x02\x07\xFF\xFF"
, "\x11\x01\x2E\x01\x17\x01\x88\x01\x02\x01\x01\x01\xCF\xFF\xFF"
, "\x11\x01\x17\x01\x17\x01\x01\x01\x4C\xFF\xFF"
// TR3 levels
, "\x01\x01\x17\x01\x17\x01\x01\x01\x4C\xFF\xFF"
, "\x01\x01\x35\x01\x4E\x01\x02\x01\x3F\x01\x22\xFF\xFF"
, "\x01\x01\xC8\x01\x89\x01\x0E\x01\x6E\x01\x95\xFF\xFF"
, "\x01\x01\x77\x01\x02\x01\x35\x01\x18\x01\xC7\xFF\xFF"
, "\x01\x01\x43\x01\x29\x01\x23\x01\x7B\x01\x03\x01\x4F\xFF\xFF"
, "\x01\x01\x5E\x01\x03\x01\x18\x01\x1F\x01\x65\x01\x3D\x01\x2C\x01\x35\xFF\xFF"
, "\x01\x02\x0B\x01\x9E\x01\xBE\x01\x9B\xFF\xFF"
, "\x01\x01\x50\x01\x58\x01\x4B\x01\x45\x01\x01\x01\xF4\xFF\xFF"
, "\x01\x01\x54\x01\x4B\x01\x51\x01\x6E\x01\x95\xFF\xFF"
, "\x01\x01\x21\x01\x30\x01\x86\x01\xC7\x01\x01\x01\xA1\x01\x0F\x01\x3A\xFF\xFF"
, "\x01\x01\x23\x01\x02\x01\x5A\x01\x03\x01\x3F\x01\x17\x01\x63\x01\x02\x01\x2E\xFF\xFF"
, "\x01\x01\x22\x01\x2C\x01\x2E\x01\x01\x02\x03\xFF\xFF"
, "\x01\x01\x2D\x01\x21\x01\x26\xFF\xFF"
, "\x01\x01\xDB\x01\x45\x01\x5A\x02\x09\x02\x05\xFF\xFF"
, "\x01\x01\xE8\x01\x3B\x01\x5C\x01\x20\x01\x4B\x01\x29\x01\x21\x01\x26\x01\x6A\x01\x29\x01\x23\xFF\xFF"
, "\x01\x01\x6A\x01\x29\x01\x23\xFF\xFF""51"
, "\x01\x01\xF2\x01\xF0\x01\x53\x01\x81\xFF\xFF"
, "RX-TECH\x01\x01\xF5\x02\x01\x02\x02\x01\x9B\xFF\xFF"
, "\x01\x01\xC8\x01\x89\x01\x0E\x01\x21\x01\x26\x01\xF3\x01\x18\xFF\xFF"
, "\x01\x01\x34\x01\x3D\x01\x03\x01\x13\x01\x03\xFF\xFF"
, "\x01\x01\x5C\x01\x3B\x01\x02\x01\x1F\x01\x58\x01\x3B\xFF\xFF"
, "\x11\x01\x17\x01\x17\x01\x01\x01\x4C\xFF\xFF"
, "\x11\x01\x35\x01\x4E\x01\x02\x01\x3F\x01\x22\xFF\xFF"
, "\x11\x01\xC8\x01\x89\x01\x0E\x01\x6E\x01\x95\xFF\xFF"
, "\x11\x01\x77\x01\x02\x01\x35\x01\x18\x01\xC7\xFF\xFF"
, "\x11\x01\x43\x01\x29\x01\x23\x01\x7B\x01\x03\x01\x4F\xFF\xFF"
, "\x11\x01\x5E\x01\x03\x01\x18\x01\x1F\x01\x65\x01\x3D\x01\x2C\x01\x35\xFF\xFF"
, "\x11\x02\x0B\x01\x9E\x01\xBE\x01\x9B\xFF\xFF"
, "\x11\x01\x50\x01\x58\x01\x4B\x01\x45\x01\x01\x01\xF4\xFF\xFF"
, "\x11\x01\x54\x01\x4B\x01\x51\x01\x6E\x01\x95\xFF\xFF"
, "\x11\x01\x21\x01\x30\x01\x86\x01\xC7\x01\x01\x01\xA1\x01\x0F\x01\x3A\xFF\xFF"
, "\x11\x01\x23\x01\x02\x01\x5A\x01\x03\x01\x3F\x01\x17\x01\x63\x01\x02\x01\x2E\xFF\xFF"
, "\x11\x01\x22\x01\x2C\x01\x2E\x01\x01\x02\x03\xFF\xFF"
, "\x11\x01\x2D\x01\x21\x01\x26\xFF\xFF"
, "\x11\x01\xDB\x01\x45\x01\x5A\x02\x09\x02\x05\xFF\xFF"
, "\x11\x01\xE8\x01\x3B\x01\x5C\x01\x20\x01\x4B\x01\x29\x01\x21\x01\x26\x01\x6A\x01\x29\x01\x23\xFF\xFF"
, "\x11\x01\x6A\x01\x29\x01\x23\xFF\xFF""51"
, "\x11\x01\xF2\x01\xF0\x01\x53\x01\x81\xFF\xFF"
, "RX-TECH\x11\x01\xF5\x02\x01\x02\x02\x01\x9B\xFF\xFF"
, "\x11\x01\xC8\x01\x89\x01\x0E\x01\x21\x01\x26\x01\xF3\x01\x18\xFF\xFF"
, "\x11\x01\x34\x01\x3D\x01\x03\x01\x13\x01\x03\xFF\xFF"
, "\x11\x01\x5C\x01\x3B\x01\x02\x01\x1F\x01\x58\x01\x3B\xFF\xFF"
};
#endif

View File

@@ -34,6 +34,7 @@ struct Level : IGame {
TR::Level level;
Texture *atlas;
Texture *glyphs;
MeshBuilder *mesh;
Lara *players[2], *player;
@@ -419,10 +420,6 @@ struct Level : IGame {
return mesh;
}
virtual Texture* getAtlas() {
return atlas;
}
virtual ICamera* getCamera(int index = -1) {
if (index == -1)
return camera;
@@ -949,6 +946,7 @@ struct Level : IGame {
delete zoneCache;
delete atlas;
delete glyphs;
delete mesh;
Sound::stopAll();
@@ -1202,8 +1200,8 @@ struct Level : IGame {
return 0;
}
static void fillCallback(int id, int tileX, int tileY, int atlasWidth, int atlasHeight, Atlas::Tile &tile, void *userData, void *data) {
static const uint32 barColor[UI::BAR_MAX][25] = {
static void fillCallback(Atlas *atlas, int id, int tileX, int tileY, int atlasWidth, int atlasHeight, Atlas::Tile &tile, void *userData, void *data) {
static const uint32 CommonTexData[CTEX_MAX][25] = {
// flash bar
{ 0x00000000, 0xFFA20058, 0xFFFFFFFF, 0xFFA20058, 0x00000000 },
// health bar
@@ -1216,7 +1214,9 @@ struct Level : IGame {
0x00000000, 0x80808080, 0x80808080, 0x80808080, 0x00000000,
0x00000000, 0x60606060, 0x60606060, 0x60606060, 0x00000000,
0x00000000, 0x20202020, 0x20202020, 0x20202020, 0x00000000 },
// white bar (white tile)
// white tile
{ 0xFFFFFFFF },
// white sprite
{ 0xFFFFFFFF },
};
@@ -1272,16 +1272,17 @@ struct Level : IGame {
uvCount = 4;
switch (id) {
case UI::BAR_FLASH :
case UI::BAR_HEALTH :
case UI::BAR_OXYGEN :
case UI::BAR_OPTION :
case UI::BAR_WHITE :
src = (Color32*)&barColor[id][0];
tex = &barTile[id];
if (id != UI::BAR_WHITE) {
case CTEX_FLASH :
case CTEX_HEALTH :
case CTEX_OXYGEN :
case CTEX_OPTION :
case CTEX_WHITE_TILE :
case CTEX_WHITE_SPRITE :
src = (Color32*)&CommonTexData[id][0];
tex = &CommonTex[id];
if (id != CTEX_WHITE_TILE && id != CTEX_WHITE_SPRITE) {
mm.w = 4; // height - 1
if (id == UI::BAR_OPTION) {
if (id == CTEX_OPTION) {
stride = 5;
mm.z = 4;
}
@@ -1305,25 +1306,25 @@ struct Level : IGame {
int w = mm.z - mm.x + 1;
int h = mm.w - mm.y + 1;
dst += tileY * atlasWidth + tileX;
for (int y = -ATLAS_BORDER; y < h + ATLAS_BORDER; y++) {
for (int x = -ATLAS_BORDER; x < w + ATLAS_BORDER; x++) {
for (int y = -atlas->border.y; y < h + atlas->border.w; y++) {
for (int x = -atlas->border.x; x < w + atlas->border.z; x++) {
Color32 *p = &src[mm.y * stride + mm.x];
ASSERT((x + ATLAS_BORDER + tileX) >= 0 && (x + ATLAS_BORDER + tileX) < atlasWidth);
ASSERT((y + ATLAS_BORDER + tileY) >= 0 && (y + ATLAS_BORDER + tileY) < atlasHeight);
ASSERT((x + atlas->border.x + tileX) >= 0 && (x + atlas->border.x + tileX) < atlasWidth);
ASSERT((y + atlas->border.y + tileY) >= 0 && (y + atlas->border.y + tileY) < atlasHeight);
p += clamp(x, 0, w - 1);
p += clamp(y, 0, h - 1) * stride;
if (isSprite && (y < 0 || y >= h || x < 0 || x >= w)) {
dst[x + ATLAS_BORDER] = Color32(0, 0, 0, 0);
dst[x + atlas->border.x] = Color32(0, 0, 0, 0);
} else {
dst[x + ATLAS_BORDER] = *p;
dst[x + atlas->border.x] = *p;
}
}
dst += atlasWidth;
}
cx += tileX + ATLAS_BORDER;
cy += tileY + ATLAS_BORDER;
cx += tileX + atlas->border.x;
cy += tileY + atlas->border.y;
}
for (int i = 0; i < uvCount; i++) {
@@ -1452,7 +1453,8 @@ struct Level : IGame {
}
// repack texture tiles
Atlas *tiles = new Atlas(level.objectTexturesCount + level.spriteTexturesCount + UI::BAR_MAX, this, fillCallback);
Atlas *tAtlas = new Atlas(level.objectTexturesCount + level.spriteTexturesCount + CTEX_MAX, short4(8, 8, 8, 8), this, fillCallback);
Atlas *gAtlas = new Atlas(level.spriteTexturesCount + CTEX_MAX, short4(0, 0, 1, 1), this, fillCallback);
// add textures
for (int i = 0; i < level.objectTexturesCount; i++) {
TR::TextureInfo &t = level.objectTextures[i];
@@ -1464,7 +1466,7 @@ struct Level : IGame {
uv.z = max(max(t.texCoord[0].x, t.texCoord[1].x), t.texCoord[2].x) + 1;
uv.w = max(max(t.texCoord[0].y, t.texCoord[1].y), t.texCoord[2].y) + 1;
tiles->add(i, uv, &t);
tAtlas->add(i, uv, &t);
}
// add sprites
for (int i = 0; i < level.spriteTexturesCount; i++) {
@@ -1484,19 +1486,30 @@ struct Level : IGame {
uv.w += offset;
}
tiles->add(level.objectTexturesCount + i, uv, &t);
if (level.extra.glyphs != -1) {
TR::SpriteSequence &seq = level.spriteSequences[level.extra.glyphs];
if ((i >= seq.sStart && i < seq.sStart + seq.sCount) || i >= UI::advGlyphsStart) {
gAtlas->add(level.objectTexturesCount + i, uv, &t);
continue;
}
}
tAtlas->add(level.objectTexturesCount + i, uv, &t);
}
// add common textures
const short2 bar[UI::BAR_MAX] = { short2(0, 4), short2(0, 4), short2(0, 4), short2(4, 4), short2(0, 0) };
for (int i = 0; i < UI::BAR_MAX; i++) {
barTile[i].type = TR::TEX_TYPE_SPRITE;
tiles->add(level.objectTexturesCount + level.spriteTexturesCount + i, short4(i * 32, ATLAS_PAGE_BARS, i * 32 + bar[i].x, ATLAS_PAGE_BARS + bar[i].y), &barTile[i]);
const short2 CommonTexOffset[] = { short2(0, 4), short2(0, 4), short2(0, 4), short2(4, 4), short2(0, 0), short2(0, 0) };
ASSERT(COUNT(CommonTexOffset) == CTEX_MAX);
for (int i = 0; i < CTEX_MAX; i++) {
CommonTex[i].type = TR::TEX_TYPE_SPRITE;
Atlas *dst = (i == CTEX_FLASH || i == CTEX_WHITE_TILE) ? tAtlas : gAtlas;
dst->add(level.objectTexturesCount + level.spriteTexturesCount + i, short4(i * 32, ATLAS_PAGE_BARS, i * 32 + CommonTexOffset[i].x, ATLAS_PAGE_BARS + CommonTexOffset[i].y), &CommonTex[i]);
}
// get result texture
tileData = new TR::Tile32();
atlas = tiles->pack();
atlas = tAtlas->pack(true);
glyphs = gAtlas->pack(false);
delete[] tileData;
tileData = NULL;
@@ -1506,11 +1519,15 @@ struct Level : IGame {
glyphsJap = NULL;
atlas->setFilterQuality(Core::settings.detail.filter);
glyphs->setFilterQuality(Core::settings.detail.filter);
delete tiles;
delete tAtlas;
delete gAtlas;
LOG("atlas: %d x %d\n", atlas->width, atlas->height);
LOG("atlas : %d x %d\n", atlas->width, atlas->height);
LOG("glyphs : %d x %d\n", glyphs->width, glyphs->height);
PROFILE_LABEL(TEXTURE, atlas->ID, "atlas");
PROFILE_LABEL(TEXTURE, glyphs->ID, "glyphs");
#else
ASSERT(level.tilesCount);
@@ -2949,8 +2966,11 @@ struct Level : IGame {
UI::begin();
UI::updateAspect(camera->aspect);
atlas->bind(sDiffuse);
UI::renderPickups();
glyphs->bind(sDiffuse);
Core::resetLights();
if (!level.isCutsceneLevel()) {
@@ -2974,12 +2994,12 @@ struct Level : IGame {
pos = vec2(UI::width - 32 - size.x - eye, 32);
if (!player->dozy && (player->stand == Lara::STAND_ONWATER || player->stand == Character::STAND_UNDERWATER)) {
UI::renderBar(UI::BAR_OXYGEN, pos, size, oxygen);
UI::renderBar(CTEX_OXYGEN, pos, size, oxygen);
pos.y += 16.0f;
}
if ((!inventory->active && ((player->wpnReady() && !player->emptyHands()) || player->damageTime > 0.0f || health <= 0.2f))) {
UI::renderBar(UI::BAR_HEALTH, pos, size, health);
UI::renderBar(CTEX_HEALTH, pos, size, health);
pos.y += 32.0f;
if (!inventory->active && !player->emptyHands()) { // ammo
@@ -3018,6 +3038,7 @@ struct Level : IGame {
UI::begin();
UI::updateAspect(aspect);
glyphs->bind(sDiffuse);
inventory->renderUI();
UI::end();
}
@@ -3055,7 +3076,7 @@ struct Level : IGame {
Core::setTarget(NULL, NULL, RT_CLEAR_COLOR | RT_STORE_COLOR);
UI::begin();
UI::updateAspect(float(Core::width) / float(Core::height));
UI::textOut(vec2(0, 480 - 16), STR_LOADING, UI::aCenter, UI::width);
glyphs->bind(sDiffuse); UI::textOut(vec2(0, 480 - 16), STR_LOADING, UI::aCenter, UI::width);
UI::end();
return;
}

View File

@@ -4,8 +4,19 @@
#include "core.h"
#include "format.h"
TR::TextureInfo barTile[5 /* UI::BAR_MAX */];
TR::TextureInfo &whiteTile = barTile[4]; // BAR_WHITE
enum CommonTexType {
CTEX_FLASH,
CTEX_HEALTH,
CTEX_OXYGEN,
CTEX_OPTION,
CTEX_WHITE_TILE,
CTEX_WHITE_SPRITE,
CTEX_MAX,
};
TR::TextureInfo CommonTex[CTEX_MAX];
TR::TextureInfo &whiteTile = CommonTex[CTEX_WHITE_TILE];
TR::TextureInfo &whiteSprite = CommonTex[CTEX_WHITE_SPRITE];
#define PLANE_DETAIL 48
#define CIRCLE_SEGS 16
@@ -485,7 +496,7 @@ struct MeshBuilder {
quad.iStart = iCount;
quad.iCount = 2 * 3;
addQuad(indices, iCount, vCount, vStartCommon, vertices, &whiteTile, false, false);
addQuad(indices, iCount, vCount, vStartCommon, vertices, &whiteSprite, false, false);
vertices[vCount + 0].coord = short4( -32767, 32767, 0, 1 );
vertices[vCount + 1].coord = short4( 32767, 32767, 1, 1 );
vertices[vCount + 2].coord = short4( 32767, -32767, 1, 0 );
@@ -517,7 +528,7 @@ struct MeshBuilder {
pos.rotate(cs);
v.coord = short4( short(pos.x), short(pos.y), 0, 0 );
v.normal = short4( 0, 0, 0, 32767 );
v.texCoord = short4( whiteTile.texCoordAtlas[0].x, whiteTile.texCoordAtlas[0].y, 32767, 32767 );
v.texCoord = short4( whiteSprite.texCoordAtlas[0].x, whiteSprite.texCoordAtlas[0].y, 32767, 32767 );
v.color = ubyte4( 255, 255, 255, 255 );
v.light = ubyte4( 255, 255, 255, 255 );
@@ -1263,7 +1274,7 @@ struct MeshBuilder {
int &iCount = dynICount;
int &vCount = dynVCount;
short4 uv = short4( whiteTile.texCoordAtlas[0].x, whiteTile.texCoordAtlas[0].y, 32767, 32767 );
short4 uv = short4( whiteSprite.texCoordAtlas[0].x, whiteSprite.texCoordAtlas[0].y, 32767, 32767 );
int16 minX = int16(pos.x);
int16 minY = int16(pos.y);

View File

@@ -709,7 +709,6 @@ struct Texture : GAPI::Texture {
}
};
#define ATLAS_BORDER 8
struct Atlas {
struct Tile {
@@ -718,7 +717,7 @@ struct Atlas {
short4 uv;
} *tiles;
typedef void (Callback)(int id, int tileX, int tileY, int atalsWidth, int atlasHeight, Tile &tile, void *userData, void *data);
typedef void (Callback)(Atlas *atlas, int id, int tileX, int tileY, int atalsWidth, int atlasHeight, Tile &tile, void *userData, void *data);
struct Node {
Node *child[2];
@@ -734,21 +733,21 @@ struct Atlas {
delete child[1];
}
Node* insert(const short4 &tile, int tileIndex) {
Node* insert(Atlas *atlas, const short4 &tile, int tileIndex) {
ASSERT(tile.x != 0x7FFF);
if (child[0] != NULL && child[1] != NULL) {
Node *node = child[0]->insert(tile, tileIndex);
Node *node = child[0]->insert(atlas, tile, tileIndex);
if (node != NULL) return node;
return child[1]->insert(tile, tileIndex);
return child[1]->insert(atlas, tile, tileIndex);
} else {
if (this->tileIndex != -1)
return NULL;
int16 w = rect.z - rect.x;
int16 h = rect.w - rect.y;
int16 tx = (tile.z - tile.x) + ATLAS_BORDER * 2;
int16 ty = (tile.w - tile.y) + ATLAS_BORDER * 2;
int16 tx = (tile.z - tile.x) + atlas->border.x + atlas->border.z;
int16 ty = (tile.w - tile.y) + atlas->border.y + atlas->border.w;
if (w < tx || h < ty)
return NULL;
@@ -769,7 +768,7 @@ struct Atlas {
child[1] = new Node(rect.x, rect.y + ty, rect.z, rect.w);
}
return child[0]->insert(tile, tileIndex);
return child[0]->insert(atlas, tile, tileIndex);
}
}
} *root;
@@ -777,10 +776,11 @@ struct Atlas {
int tilesCount;
int size;
int width, height;
short4 border;
void *userData;
Callback *callback;
Atlas(int maxTiles, void *userData, Callback *callback) : root(NULL), tilesCount(0), size(0), userData(userData), callback(callback) {
Atlas(int maxTiles, short4 border, void *userData, Callback *callback) : root(NULL), tilesCount(0), size(0), border(border), userData(userData), callback(callback) {
tiles = new Tile[maxTiles];
}
@@ -804,19 +804,19 @@ struct Atlas {
tilesCount++;
if (uv.x != 0x7FFF)
size += (uv.z - uv.x + ATLAS_BORDER * 2) * (uv.w - uv.y + ATLAS_BORDER * 2);
size += (uv.z - uv.x + border.x + border.z) * (uv.w - uv.y + border.y + border.w);
}
bool insertAll(int *indices) {
for (int i = 0; i < tilesCount; i++) {
int idx = indices[i];
if (tiles[idx].uv.x != 0x7FFF && !root->insert(tiles[idx].uv, idx))
if (tiles[idx].uv.x != 0x7FFF && !root->insert(this, tiles[idx].uv, idx))
return false;
}
return true;
}
Texture* pack() {
Texture* pack(bool mipmaps) {
// TODO TR2 fix CUT2 AV
// width = 4096;//nextPow2(int(sqrtf(float(size))));
// height = 2048;//(width * width / 2 > size) ? (width / 2) : width;
@@ -835,7 +835,7 @@ struct Atlas {
short4 &a = tiles[indices[i - 1]].uv;
short4 &b = tiles[indices[i]].uv;
//if ((a.z - a.x + ATLAS_BORDER * 2) * (a.w - a.y + ATLAS_BORDER * 2) < (b.z - b.x + ATLAS_BORDER * 2) * (b.w - b.y + ATLAS_BORDER * 2)) {
if ((a.z - a.x + ATLAS_BORDER * 2) < (b.z - b.x + ATLAS_BORDER * 2)) {
if ((a.z - a.x) < (b.z - b.x)) {
swap(indices[i - 1], indices[i]);
swapped = true;
}
@@ -863,7 +863,7 @@ struct Atlas {
fill(root, data);
fillInstances();
Texture *atlas = new Texture(width, height, 1, FMT_RGBA, OPT_MIPMAPS, data);
Texture *atlas = new Texture(width, height, 1, FMT_RGBA, mipmaps ? OPT_MIPMAPS : 0, data);
//Texture::SaveBMP("atlas", (char*)data, width, height);
@@ -878,13 +878,13 @@ struct Atlas {
fill(node->child[0], data);
fill(node->child[1], data);
} else
callback(tiles[node->tileIndex].id, node->rect.x, node->rect.y, width, height, tiles[node->tileIndex], userData, data);
callback(this, tiles[node->tileIndex].id, node->rect.x, node->rect.y, width, height, tiles[node->tileIndex], userData, data);
}
void fillInstances() {
for (int i = 0; i < tilesCount; i++)
if (tiles[i].uv.x == 0x7FFF)
callback(tiles[i].id, tiles[i].uv.y, 0, width, height, tiles[i], userData, NULL);
callback(this, tiles[i].id, tiles[i].uv.y, 0, width, height, tiles[i], userData, NULL);
}
};

View File

@@ -1205,9 +1205,10 @@ struct Lightning : Controller {
}
void setVertex(Vertex &v, const vec3 &coord, int16 joint, int idx) {
TR::TextureInfo &tex = CommonTex[CTEX_FLASH];
v.coord = toCoord(coord, joint);
v.normal = short4( 0, -1, 0, 0 );
v.texCoord = short4( barTile[0].texCoordAtlas[idx].x, barTile[0].texCoordAtlas[idx].y, 32767, 32767 );
v.texCoord = short4( tex.texCoordAtlas[idx].x, tex.texCoordAtlas[idx].y, 32767, 32767 );
v.color = ubyte4( 255, 255, 255, 255 );
}

View File

@@ -202,15 +202,6 @@ namespace UI {
return short2(w, h);
}
enum BarType {
BAR_FLASH,
BAR_HEALTH,
BAR_OXYGEN,
BAR_OPTION,
BAR_WHITE,
BAR_MAX,
};
#ifdef SPLIT_BY_TILE
uint16 curTile, curClut;
#endif
@@ -605,15 +596,15 @@ namespace UI {
Core::setDepthTest(true);
}
void renderBar(BarType type, const vec2 &pos, const vec2 &size, float value, uint32 fgColor = 0xFFFFFFFF, uint32 bgColor = 0x80000000, uint32 brColor1 = 0xFF4C504C, uint32 brColor2 = 0xFF748474, uint32 fgColor2 = 0) {
void renderBar(CommonTexType type, const vec2 &pos, const vec2 &size, float value, uint32 fgColor = 0xFFFFFFFF, uint32 bgColor = 0x80000000, uint32 brColor1 = 0xFF4C504C, uint32 brColor2 = 0xFF748474, uint32 fgColor2 = 0) {
MeshBuilder *mesh = game->getMesh();
if (brColor1 != 0 || brColor2 != 0)
mesh->addDynFrame(pos - 2.0f, size + 4.0f, brColor1, brColor2);
if (bgColor != 0)
mesh->addDynBar(whiteTile, pos - 1.0f, size + 2.0f, bgColor);
mesh->addDynBar(whiteSprite, pos - 1.0f, size + 2.0f, bgColor);
if ((fgColor != 0 || fgColor2 != 0) && value > 0.0f)
mesh->addDynBar(barTile[type], pos, vec2(size.x * value, size.y), fgColor, fgColor2);
mesh->addDynBar(CommonTex[type], pos, vec2(size.x * value, size.y), fgColor, fgColor2);
}
void renderHelp() {