[Scummvm-git-logs] scummvm master -> c89feeb64441735a9cf35bcc3eaed6c733908116
lephilousophe
lephilousophe at users.noreply.github.com
Sat Mar 14 11:28:43 UTC 2020
This automated email contains information about 14 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
11cbfb1c9a CRYOMNI3D: Fix functions name in create_cryomni3d
09f2bcf7e8 CRYOMNI3D: Revamp text handling and fonts
90d1c764c3 CRYOMNI3D: Add clipping support for videos
dad1b4d135 CRYOMNI3D: Add subtitles support for CJK
baad1c7c86 CRYOMNI3D: Add support for subtitles in create_cryomni3d
168522beea CRYOMNI3D: Add support for automatically named saves
bf215580dd CRYOMNI3D: Prepare CJK support for Versailles
658c4dfa37 CRYOMNI3D: Handle translations for riddles and bomb
128f1978bc CRYOMNI3D: Add support for Chinese version of Versailles
b40d3ca55f CRYOMNI3D: Add TTF list support
cb4c1a72ba CRYOMNI3D: Add Korean version of Versailles
39f6d8e7ed CRYOMNI3D: Add Japanese version of Versailles
a05676d2c3 CRYOMNI3D: Fix documentation for CJK
c89feeb644 CRYOMNI3D: Abort even in yes/no message box and file picker
Commit: 11cbfb1c9afbed1160d5a2573d31efd98031d7a4
https://github.com/scummvm/scummvm/commit/11cbfb1c9afbed1160d5a2573d31efd98031d7a4
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Fix functions name in create_cryomni3d
Changed paths:
devtools/create_cryomni3d/create_cryomni3d_dat.cpp
devtools/create_cryomni3d/versailles.cpp
diff --git a/devtools/create_cryomni3d/create_cryomni3d_dat.cpp b/devtools/create_cryomni3d/create_cryomni3d_dat.cpp
index 96724a379c..acbec44ab9 100644
--- a/devtools/create_cryomni3d/create_cryomni3d_dat.cpp
+++ b/devtools/create_cryomni3d/create_cryomni3d_dat.cpp
@@ -43,11 +43,11 @@ struct Parts {
};
#define DEFINE_GAME_PLATFORM_LANG_FUNCS(game, platform, lang) \
- size_t write ## game ## _ ## platform ## _ ## lang ## Header(FILE *f, \
+ size_t write ## game ## _ ## platform ## _ ## lang ## _Header(FILE *f, \
uint32 offset, uint32 size); \
- size_t write ## game ## _ ## platform ## _ ## lang ## Data(FILE *f);
-#define GAME_PLATFORM_LANG_PART(game, platform, lang) { write ## game ## _ ## platform ## _ ## lang ## Header, \
- write ## game ## _ ## platform ## _ ## lang ## Data, 0, 0 }
+ size_t write ## game ## _ ## platform ## _ ## lang ## _Data(FILE *f);
+#define GAME_PLATFORM_LANG_PART(game, platform, lang) { write ## game ## _ ## platform ## _ ## lang ## _Header, \
+ write ## game ## _ ## platform ## _ ## lang ## _Data, 0, 0 }
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, FR)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, BR)
diff --git a/devtools/create_cryomni3d/versailles.cpp b/devtools/create_cryomni3d/versailles.cpp
index 5aed6cb65c..68f810a5bd 100644
--- a/devtools/create_cryomni3d/versailles.cpp
+++ b/devtools/create_cryomni3d/versailles.cpp
@@ -30,12 +30,12 @@
// In Versailles platform doesn't seem to change anything
#define DEFINE_FUNCS(lang) \
- size_t writeVersailles_ALL_ ## lang ## Header(FILE *f, uint32 offset, uint32 size) { \
+ size_t writeVersailles_ALL_ ## lang ## _Header(FILE *f, uint32 offset, uint32 size) { \
return writeGameHeader(f, VERSAILLES_GAMEID, VERSAILLES_VERSION, LANG_ ## lang, PLATFORM_ALL, \
offset, size); \
} \
\
- size_t writeVersailles_ALL_ ## lang ## Data(FILE *f) { \
+ size_t writeVersailles_ALL_ ## lang ## _Data(FILE *f) { \
size_t size = 0; \
\
assert(VERSAILLES_LOCALIZED_FILENAMES_COUNT == ARRAYSIZE(versailles ## lang ## localizedFilenames)); \
Commit: 09f2bcf7e87afb7da4c25e7e7a2120b6b6da3a4f
https://github.com/scummvm/scummvm/commit/09f2bcf7e87afb7da4c25e7e7a2120b6b6da3a4f
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Revamp text handling and fonts
Add support to extended Cryo fonts used by Chinese version of
Versailles and melt in existing Graphics::Font interface.
Changed paths:
A engines/cryomni3d/fonts/cryoextfont.cpp
A engines/cryomni3d/fonts/cryoextfont.h
A engines/cryomni3d/fonts/cryofont.cpp
A engines/cryomni3d/fonts/cryofont.h
engines/cryomni3d/font_manager.cpp
engines/cryomni3d/font_manager.h
engines/cryomni3d/module.mk
engines/cryomni3d/versailles/documentation.cpp
engines/cryomni3d/versailles/engine.cpp
diff --git a/engines/cryomni3d/font_manager.cpp b/engines/cryomni3d/font_manager.cpp
index b882b5106b..93178d345c 100644
--- a/engines/cryomni3d/font_manager.cpp
+++ b/engines/cryomni3d/font_manager.cpp
@@ -22,72 +22,105 @@
#include "common/debug.h"
#include "common/file.h"
+#include "common/hash-ptr.h"
+#include "common/hash-str.h"
#include "graphics/managed_surface.h"
#include "cryomni3d/font_manager.h"
+#include "cryomni3d/fonts/cryoextfont.h"
+#include "cryomni3d/fonts/cryofont.h"
namespace CryOmni3D {
FontManager::FontManager() : _currentFont(nullptr), _transparentBackground(false),
- _spaceWidth(0), _charSpacing(0), _lineHeight(30), _foreColor(0), _blockTextRemaining(nullptr) {
+ _spaceWidth(0), _charSpacing(0), _lineHeight(30), _foreColor(0), _blockTextRemaining(nullptr),
+ _useSpaceDelimiter(true), _keepASCIIjoined(true), _codepage(Common::kCodePageInvalid),
+ _toUnicode(false) {
}
FontManager::~FontManager() {
- for (Common::Array<Font *>::iterator it = _fonts.begin(); it != _fonts.end(); it++) {
+ Common::HashMap<Graphics::Font *, bool> deletedFonts;
+ for (Common::Array<Graphics::Font *>::iterator it = _fonts.begin(); it != _fonts.end(); it++) {
+ if (deletedFonts.find(*it) != deletedFonts.end()) {
+ // Already deleted
+ continue;
+ }
+
+ deletedFonts[*it] = true;
delete *it;
}
}
-void FontManager::loadFonts(const Common::Array<Common::String> &fontFiles) {
- _fonts.reserve(_fonts.size() + fontFiles.size());
+void FontManager::loadFonts(const Common::Array<Common::String> &fontFiles,
+ Common::CodePage codepage) {
+ assert(codepage != Common::kCodePageInvalid);
+ _codepage = codepage;
+ setupWrapParameters();
+
+ // Cryo fonts are never in Unicode
+ _toUnicode = false;
+
+ _fonts.clear();
+ _fonts.reserve(fontFiles.size());
+
+ Common::HashMap<Common::String, Graphics::Font *> fontsCache;
for (Common::Array<Common::String>::const_iterator it = fontFiles.begin(); it != fontFiles.end();
it++) {
- Common::File font_fl;
- //debug("Open font file %s", it->c_str());
- if (!font_fl.open(*it)) {
- error("Can't open file %s", it->c_str());
+ Graphics::Font *fontEntry = fontsCache.getVal(*it, nullptr);
+ if (fontEntry) {
+ _fonts.push_back(fontEntry);
+ continue;
}
- loadFont(font_fl);
- }
-}
-void FontManager::loadFont(Common::ReadStream &font_fl) {
- byte magic[8];
+ // New font
- font_fl.read(magic, sizeof(magic));
- if (memcmp(magic, "CRYOFONT", 8)) {
- error("Invalid font magic");
+ // For now only support CP950 in extended cryo font
+ if (_codepage == Common::kWindows950) {
+ CryoExtFont *font = new CryoExtFont();
+ font->load(*it, _codepage);
+ _fonts.push_back(font);
+ fontsCache[*it] = font;
+ } else {
+ CryoFont *font = new CryoFont();
+ font->load(*it);
+ _fonts.push_back(font);
+ fontsCache[*it] = font;
+ }
}
+}
- // 3 unknown uint16
- (void) font_fl.readUint16BE();
- (void) font_fl.readUint16BE();
- (void) font_fl.readUint16BE();
-
- Font *font = new Font();
-
- font->maxHeight = font_fl.readSint16BE();
- //debug("Max char height %d", font.maxHeight);
-
- font_fl.read(font->comment, sizeof(font->comment));
- //debug("Comment %s", font.comment);
-
- for (uint i = 0; i < Font::kCharactersCount; i++) {
- uint16 h = font_fl.readUint16BE();
- uint16 w = font_fl.readUint16BE();
- uint sz = font->chars[i].setup(w, h);
- //debug("Char %d sz %dx%d %d", i, w, h, sz);
- font->chars[i].offX = font_fl.readSint16BE();
- font->chars[i].offY = font_fl.readSint16BE();
- font->chars[i].printedWidth = font_fl.readUint16BE();
- //debug("Char %d offX %d offY %d PW %d", i, font.chars[i].offX, font.chars[i].offY, font.chars[i].printedWidth);
+Common::U32String FontManager::toU32(const Common::String &str) const {
+ assert(_codepage != Common::kCodePageInvalid);
- font_fl.read(font->chars[i].data, sz);
- //debug("Char %d read %d", i, v);
+ if (_toUnicode) {
+ return str.decode(_codepage);
}
- _fonts.push_back(font);
+ switch (_codepage) {
+ case Common::kUtf8:
+ error("UTF-8 not supported");
+ case Common::kWindows932:
+ case Common::kWindows949:
+ case Common::kWindows950: {
+ /* if high-order bit is 1, then character is 2 bytes else it's 1 byte
+ * We don't check validity of the codepoint */
+ Common::U32String ret;
+ for (uint32 i = 0; i < str.size(); i++) {
+ uint32 c = (byte)str[i];
+ if ((c & 0x80) && (i + 1 < str.size())) {
+ c <<= 8;
+ i++;
+ c |= str[i] & 0xff;
+ }
+ ret += c;
+ }
+ return ret;
+ }
+ default:
+ // All other codepages are SBCS: one byte is one character
+ return str;
+ }
}
void FontManager::setCurrentFont(int currentFont) {
@@ -101,82 +134,42 @@ void FontManager::setCurrentFont(int currentFont) {
}
void FontManager::setSpaceWidth(uint additionalSpace) {
+ // For now space character is still the same in all encodings: 0x20
if (_currentFont) {
- _spaceWidth = additionalSpace + _currentFont->chars[0].printedWidth;
+ _spaceWidth = additionalSpace + _currentFont->getCharWidth(' ');
} else {
_spaceWidth = 0;
}
}
uint FontManager::displayStr_(uint x, uint y,
- const Common::String &text) const {
+ const Common::U32String &text) const {
uint offset = 0;
- for (Common::String::const_iterator it = text.begin(); it != text.end(); it++) {
- offset += displayChar(x + offset, y, *it);
+ for (Common::U32String::const_iterator it = text.begin(); it != text.end(); it++) {
+ _currentFont->drawChar(_currentSurface, *it, x + offset, y, _foreColor);
+ offset += _currentFont->getCharWidth(*it) + _charSpacing;
}
return offset;
}
-uint FontManager::displayChar(uint x, uint y, unsigned char c) const {
- if (!_currentFont) {
- error("There is no current font");
- }
- if (!_currentSurface) {
- error("There is no current surface");
- }
-
- if (c < ' ' || c >= 255) {
- c = '?';
- }
- c -= 32;
-
- const Character &char_ = _currentFont->chars[c];
- int realX = x + char_.offX;
- int realY = y + char_.offY + _currentFont->maxHeight - 2;
-
- if (!_transparentBackground) {
- _currentSurface->fillRect(Common::Rect(realX, realY, realX + char_.w, realY + char_.h), 0xff);
- }
- Graphics::Surface src;
- src.init(char_.w, char_.h, char_.w, char_.data, Graphics::PixelFormat::createFormatCLUT8());
- _currentSurface->transBlitFrom(src, Common::Point(realX, realY), 0, false, _foreColor);
-
- // WORKAROUND: in Versailles game the space width is calculated differently in this function and in the getStrWidth one, let's try to be consistent
-#define KEEP_SPACE_BUG
-#ifndef KEEP_SPACE_BUG
- if (c == 0) {
- return _spaceWidth;
- } else {
- return _charSpacing + char_.printedWidth;
- }
-#else
- return _charSpacing + char_.printedWidth;
-#endif
-}
-
-uint FontManager::getStrWidth(const Common::String &text) const {
+uint FontManager::getStrWidth(const Common::U32String &text) const {
uint width = 0;
- for (Common::String::const_iterator it = text.begin(); it != text.end(); it++) {
- unsigned char c = *it;
+ for (Common::U32String::const_iterator it = text.begin(); it != text.end(); it++) {
+ uint32 c = *it;
if (c == ' ') {
width += _spaceWidth;
} else {
- if (c < ' ' || c >= 255) {
- c = '?';
- }
- c -= 32;
- width += _charSpacing;
- width += _currentFont->chars[c].printedWidth;
+ width += _currentFont->getCharWidth(*it) + _charSpacing;
}
}
return width;
}
-bool FontManager::displayBlockText(const Common::String &text,
- Common::String::const_iterator begin) {
+bool FontManager::displayBlockText(const Common::U32String &text,
+ Common::U32String::const_iterator begin) {
bool notEnoughSpace = false;
- Common::String::const_iterator ptr = begin;
- Common::Array<Common::String> words;
+ Common::U32String::const_iterator ptr = begin;
+ Common::Array<Common::U32String> words;
if (begin != text.end()) {
_blockTextRemaining = nullptr;
@@ -193,7 +186,7 @@ bool FontManager::displayBlockText(const Common::String &text,
} else {
spaceWidthPerWord = (double)spacesWidth / (double)words.size();
}
- Common::Array<Common::String>::const_iterator word;
+ Common::Array<Common::U32String>::const_iterator word;
uint word_i;
for (word = words.begin(), word_i = 0; word != words.end(); word++, word_i++) {
_blockPos.x += displayStr_(_blockPos.x, _blockPos.y, *word);
@@ -218,22 +211,22 @@ bool FontManager::displayBlockText(const Common::String &text,
return notEnoughSpace;
}
-uint FontManager::getLinesCount(const Common::String &text, uint width) {
+uint FontManager::getLinesCount(const Common::U32String &text, uint width) {
if (text.size() == 0) {
// One line even if it's empty
return 1;
}
- if (text.size() > 1024) {
+ if (text.size() >= 1024) {
// Too long text, be lazy
return getStrWidth(text) / width + 3;
}
uint lineCount = 0;
- Common::String::const_iterator textP = text.begin();
+ Common::U32String::const_iterator textP = text.begin();
uint len = text.size();
while (len > 0) {
- Common::String buffer;
+ Common::U32String buffer;
uint lineWidth = 0;
lineCount++;
while (lineWidth < width && len > 0 && *textP != '\r') {
@@ -244,20 +237,34 @@ uint FontManager::getLinesCount(const Common::String &text, uint width) {
if (lineWidth >= width) {
// We overrun the line, get backwards
- while (buffer.size()) {
- if (buffer[buffer.size() - 1] == ' ') {
- break;
+ if (_useSpaceDelimiter) {
+ uint bufferSize = buffer.size();
+ while (buffer.size()) {
+ if (buffer[buffer.size() - 1] == ' ') {
+ break;
+ }
+ buffer.deleteLastChar();
+ textP--;
+ len++;
+ }
+ if (!buffer.size()) {
+ // Word was too long: fail
+ // Split in middle of something
+ textP += bufferSize - 1;
+ len -= bufferSize - 1;
+ }
+ if (*textP == ' ') {
+ textP++;
+ }
+ } else {
+ if (buffer.size()) {
+ buffer.deleteLastChar();
+ textP--;
+ len++;
+ } else {
+ // fail
+ return 0;
}
- buffer.deleteLastChar();
- textP--;
- len++;
- }
- if (!buffer.size()) {
- // Word was too long: fail
- return 0;
- }
- if (*textP == ' ') {
- textP++;
}
// Continue with next line
continue;
@@ -276,14 +283,14 @@ uint FontManager::getLinesCount(const Common::String &text, uint width) {
return lineCount;
}
-void FontManager::calculateWordWrap(const Common::String &text,
- Common::String::const_iterator *position, uint *finalPos, bool *hasCr,
- Common::Array<Common::String> &words) const {
+void FontManager::calculateWordWrap(const Common::U32String &text,
+ Common::U32String::const_iterator *position, uint *finalPos, bool *hasCr,
+ Common::Array<Common::U32String> &words) const {
*hasCr = false;
uint offset = 0;
bool wordWrap = false;
uint lineWidth = _blockRect.right - _blockRect.left;
- Common::String::const_iterator ptr = *position;
+ Common::U32String::const_iterator ptr = *position;
words.clear();
@@ -296,9 +303,9 @@ void FontManager::calculateWordWrap(const Common::String &text,
}
while (!wordWrap) {
- Common::String::const_iterator begin = ptr;
- for (; ptr != text.end() && *ptr != '\r' && *ptr != ' '; ptr++) { }
- Common::String word(begin, ptr);
+ Common::U32String::const_iterator begin = ptr;
+ for (; ptr != text.end() && *ptr != '\r' && (!_useSpaceDelimiter || *ptr != ' '); ptr++) { }
+ Common::U32String word(begin, ptr);
uint width = getStrWidth(word);
if (width + offset >= lineWidth) {
wordWrap = true;
@@ -317,24 +324,72 @@ void FontManager::calculateWordWrap(const Common::String &text,
if (words.size() > 0) {
offset -= _spaceWidth;
- }
+ } /**/ else {
+ // couldn't get a word (too long): we are at start of line
+ Common::U32String::const_iterator begin = ptr;
+ // Start with one character
+ for (ptr++; ptr != text.end(); ptr++) {
+ Common::U32String word(begin, ptr);
+ uint width = getStrWidth(word);
+ if (width >= lineWidth) {
+ break;
+ }
+ offset = width;
+ }
+ // We overran: go back
+ if (ptr != begin) {
+ ptr--;
+ }
+ if (_keepASCIIjoined) {
+ Common::U32String::const_iterator end = ptr;
+ // Until now ptr was pointing after the last character
+ // As we want to look at it, go back
+ if (ptr != begin) {
+ ptr--;
+ }
+ for (; ptr != begin; ptr--) {
+ // Try to split at space or non-ASCII character
+ if (*ptr >= 0x80) {
+ break;
+ }
+ if (Common::isSpace(*ptr)) {
+ break;
+ }
+ }
+ if (ptr == begin) {
+ // Too bad: we have to split in middle of something
+ ptr = end;
+ } else {
+ // Go back just after last character
+ ptr++;
+ }
+ }
+ Common::U32String word(begin, ptr);
+ words.push_back(word);
+ } /**/
*finalPos = offset;
*position = ptr;
}
-FontManager::Character::Character() : h(0), w(0), offX(0), offY(0), printedWidth(0), data(0) {
-}
-
-FontManager::Character::~Character() {
- delete[] data;
-}
-
-uint FontManager::Character::setup(uint16 width, uint16 height) {
- w = width;
- h = height;
- uint sz = w * h;
- data = new byte[sz];
- return sz;
+void FontManager::setupWrapParameters() {
+ switch (_codepage) {
+ case Common::kWindows932:
+ _useSpaceDelimiter = true;
+ _keepASCIIjoined = false;
+ break;
+ case Common::kWindows949:
+ _useSpaceDelimiter = true;
+ _keepASCIIjoined = false;
+ break;
+ case Common::kWindows950:
+ _useSpaceDelimiter = false;
+ _keepASCIIjoined = true;
+ break;
+ default:
+ _useSpaceDelimiter = true;
+ _keepASCIIjoined = false;
+ break;
+ }
}
} // End of namespace CryOmni3D
diff --git a/engines/cryomni3d/font_manager.h b/engines/cryomni3d/font_manager.h
index dd347ec19e..a71d5e8bcd 100644
--- a/engines/cryomni3d/font_manager.h
+++ b/engines/cryomni3d/font_manager.h
@@ -25,11 +25,11 @@
#include "common/array.h"
#include "common/str.h"
+#include "common/str-enc.h"
+#include "common/ustr.h"
#include "common/rect.h"
-namespace Common {
-class ReadStream;
-}
+#include "graphics/font.h"
namespace Graphics {
class ManagedSurface;
@@ -42,7 +42,7 @@ public:
FontManager();
virtual ~FontManager();
- void loadFonts(const Common::Array<Common::String> &fontFiles);
+ void loadFonts(const Common::Array<Common::String> &fontFiles, Common::CodePage codepage);
void setCurrentFont(int currentFont);
uint getCurrentFont() { return _currentFontId; }
void setTransparentBackground(bool transparent) { _transparentBackground = transparent; }
@@ -53,52 +53,45 @@ public:
void setCharSpacing(uint w) { _charSpacing = w; }
void setSurface(Graphics::ManagedSurface *surface) { _currentSurface = surface; }
- int getFontMaxHeight() { return _currentFont->maxHeight; }
-
- void displayInt(uint x, uint y, int value) const { displayStr_(x, y, Common::String::format("%d", value)); }
- void displayStr(uint x, uint y, const Common::String &text) const { displayStr_(x, y, text); }
- uint getStrWidth(const Common::String &text) const;
-
- uint getLinesCount(const Common::String &text, uint width);
-
- void setupBlock(const Common::Rect &block, bool justifyText = false) { _blockRect = block; _blockPos.x = block.left; _blockPos.y = block.top; _justifyText = justifyText; }
- bool displayBlockText(const Common::String &text) { return displayBlockText(text, text.begin()); }
- bool displayBlockText(const Common::String &text, Common::String::const_iterator begin);
- Common::String::const_iterator blockTextRemaining() { return _blockTextRemaining; }
+ int getFontMaxHeight() { return _currentFont->getFontHeight(); }
+
+ void displayInt(uint x, uint y, int value) const {
+ displayStr_(x, y,
+ toU32(Common::String::format("%d", value)));
+ }
+ void displayStr(uint x, uint y, const Common::String &text) const { displayStr_(x, y, toU32(text)); }
+ void displayStr(uint x, uint y, const Common::U32String &text) const { displayStr_(x, y, text); }
+ uint getStrWidth(const Common::String &text) const { return getStrWidth(toU32(text)); }
+ uint getStrWidth(const Common::U32String &text) const;
+
+ uint getLinesCount(const Common::String &text, uint width) { return getLinesCount(toU32(text), width); }
+
+ void setupBlock(const Common::Rect &block, bool justifyText = false) {
+ _blockRect = block;
+ _blockPos.x = block.left;
+ _blockPos.y = block.top;
+ _justifyText = justifyText;
+ }
+ bool displayBlockText(const Common::String &text) {
+ _blockTextStr = toU32(text);
+ return displayBlockText(_blockTextStr, _blockTextStr.begin());
+ }
+ bool displayBlockTextContinue() { return displayBlockText(_blockTextStr, _blockTextRemaining); }
Common::Point blockTextLastPos() { return _blockPos; }
private:
- void loadFont(Common::ReadStream &font_fl);
- uint displayStr_(uint x, uint y, const Common::String &text) const;
- uint displayChar(uint x, uint y, unsigned char c) const;
- void calculateWordWrap(const Common::String &text, Common::String::const_iterator *position,
- uint *finalPos, bool *has_br, Common::Array<Common::String> &words) const;
-
- struct Character {
- uint16 h;
- uint16 w;
- int16 offX;
- int16 offY;
- uint16 printedWidth;
-
- byte *data;
-
- Character();
- ~Character();
-
- uint setup(uint16 width, uint16 height);
- };
-
- struct Font {
- static const uint kCharactersCount = 223;
-
- uint16 maxHeight;
- byte comment[32];
- Character chars[kCharactersCount];
- };
-
- Common::Array<Font *> _fonts;
- const Font *_currentFont;
+ Common::U32String toU32(const Common::String &text) const;
+
+ uint displayStr_(uint x, uint y, const Common::U32String &text) const;
+ uint getLinesCount(const Common::U32String &text, uint width);
+ bool displayBlockText(const Common::U32String &text, Common::U32String::const_iterator begin);
+ void calculateWordWrap(const Common::U32String &text, Common::U32String::const_iterator *position,
+ uint *finalPos, bool *has_br, Common::Array<Common::U32String> &words) const;
+
+ Common::CodePage _codepage;
+ bool _toUnicode;
+ Common::Array<Graphics::Font *> _fonts;
+ const Graphics::Font *_currentFont;
uint _currentFontId;
bool _transparentBackground;
uint _spaceWidth;
@@ -112,7 +105,13 @@ private:
Common::Point _blockPos;
int _lineHeight;
bool _justifyText;
- Common::String::const_iterator _blockTextRemaining;
+ Common::U32String _blockTextStr;
+ Common::U32String::const_iterator _blockTextRemaining;
+
+ // Specific parameters for non alphabetic languages
+ void setupWrapParameters();
+ bool _useSpaceDelimiter;
+ bool _keepASCIIjoined;
};
} // End of namespace CryOmni3D
diff --git a/engines/cryomni3d/fonts/cryoextfont.cpp b/engines/cryomni3d/fonts/cryoextfont.cpp
new file mode 100644
index 0000000000..49300042f7
--- /dev/null
+++ b/engines/cryomni3d/fonts/cryoextfont.cpp
@@ -0,0 +1,269 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/debug.h"
+#include "common/file.h"
+#include "graphics/managed_surface.h"
+
+#include "cryomni3d/fonts/cryoextfont.h"
+
+namespace CryOmni3D {
+
+CryoExtFont::~CryoExtFont() {
+ delete _crf;
+}
+
+void CryoExtFont::load(const Common::String &fontFile, Common::CodePage codepage) {
+ // For now only CP950 is supported
+ assert(codepage == Common::kWindows950);
+
+ _codepage = codepage;
+
+ Common::File *crf = new Common::File();
+
+ if (!crf->open(fontFile)) {
+ error("can't open file %s", fontFile.c_str());
+ }
+
+ _crf = crf;
+
+ byte magic[8];
+
+ _crf->read(magic, sizeof(magic));
+ if (memcmp(magic, "CRYOFONT", 8)) {
+ error("Invalid font magic");
+ }
+
+ // 3 unknown uint16
+ (void) _crf->readUint16BE();
+ (void) _crf->readUint16BE();
+ (void) _crf->readUint16BE();
+
+ _height = _crf->readSint16BE();
+ //debug("Max char height %d", _maxHeight);
+
+ _crf->read(_comment, sizeof(_comment));
+ //debug("Comment %s", _comment);
+
+ Common::String offsetsFile = fontFile;
+ offsetsFile.setChar('I', offsetsFile.size() - 1);
+ loadOffsets(offsetsFile);
+}
+
+void CryoExtFont::loadOffsets(const Common::String &offsetsFile) {
+ Common::File cri;
+
+ if (!cri.open(offsetsFile)) {
+ error("can't open file %s", offsetsFile.c_str());
+ }
+
+ uint32 counts = cri.size() / sizeof(uint32);
+ _offsets.reserve(counts);
+ debug("Loading %u offsets", counts);
+
+ for (; counts > 0; counts--) {
+ uint32 offset = cri.readUint32BE();
+ _offsets.push_back(offset);
+ }
+}
+
+void CryoExtFont::assureCached(uint32 chr) const {
+ if (_cache.contains(chr)) {
+ return;
+ }
+
+ uint32 glyphId = mapGlyph(chr);
+
+ if (glyphId >= _offsets.size()) {
+ warning("Invalid glyph id: %u", glyphId);
+ glyphId = 0;
+ }
+
+ uint32 offset = _offsets[glyphId];
+ _crf->seek(offset);
+
+ Glyph &glyph = _cache[chr];
+ uint16 h = _crf->readUint16BE();
+ uint16 w = _crf->readUint16BE();
+ uint sz = glyph.setup(w, h);
+ //debug("Char %u/%u sz %ux%u %u", chr, glyphId, w, h, sz);
+ glyph.offX = _crf->readSint16BE();
+ glyph.offY = _crf->readSint16BE();
+ glyph.advance = _crf->readUint16BE();
+ //debug("Char %u/%u offX %d offY %d PW %d", chr, glyphId, glyph.offX, glyph.offY, glyph.advance);
+
+ _crf->read(glyph.bitmap, sz);
+ //debug("Char %u/%u read %d", chr, glyphId, v);
+
+ if ((_cache.size() % 10) == 0) {
+ debug("Glyph cache size is now %u", _cache.size());
+ }
+}
+
+Common::Rect CryoExtFont::getBoundingBox(uint32 chr) const {
+ assureCached(chr);
+
+ const Glyph &glyph = _cache[chr];
+ return Common::Rect(glyph.offX, glyph.offY,
+ glyph.offX + glyph.w, glyph.offY + glyph.h);
+}
+
+int CryoExtFont::getCharWidth(uint32 chr) const {
+ assureCached(chr);
+
+ const Glyph &glyph = _cache[chr];
+ return glyph.advance;
+}
+
+void CryoExtFont::drawChar(Graphics::Surface *dst, uint32 chr, int x, int y, uint32 color) const {
+ assert(dst);
+ assert(dst->format.bytesPerPixel == 1 || dst->format.bytesPerPixel == 2 ||
+ dst->format.bytesPerPixel == 4);
+
+ assureCached(chr);
+
+ const Glyph &glyph = _cache[chr];
+
+ x += glyph.offX;
+ // In european versions of Versailles there was a -2 offset which is not present in Chinese one
+ // Maybe this offset should be checked when adding new games
+ y += glyph.offY + _height;
+
+ if (x > dst->w) {
+ return;
+ }
+ if (y > dst->h) {
+ return;
+ }
+
+ int w = glyph.w;
+ int h = glyph.h;
+
+ const uint8 *srcPos = (const uint8 *)glyph.bitmap;
+
+ const uint16 stride = (glyph.w + 7) / 8;
+ const uint16 originalWidth = glyph.w;
+
+ // Make sure we are not drawing outside the screen bounds
+ if (y < 0) {
+ // y is negative so srcPos will increase and h will decrease
+ srcPos -= y * stride;
+ h += y;
+ y = 0;
+ }
+
+ if (y + h > dst->h) {
+ h = dst->h - y;
+ }
+
+ if (h <= 0) {
+ return;
+ }
+
+ int jStart = 0;
+ if (x < 0) {
+ // x is negative so jStart will be positive and w will decrease
+ jStart = -x;
+ w += x;
+ x = 0;
+ }
+
+ if (x + w > dst->w) {
+ w = dst->w - x;
+ }
+
+ if (w <= 0) {
+ return;
+ }
+
+ const int jEnd = jStart + w - 1;
+
+ for (uint16 i = 0; i < h; i++) {
+ byte b = 0;
+ for (uint16 j = 0; j < originalWidth; j++) {
+ if ((j % 8) == 0) {
+ b = *(srcPos++);
+ }
+
+ if (j >= jStart && j <= jEnd && b & 0x80) {
+ if (dst->format.bytesPerPixel == 1) {
+ *((byte *)dst->getBasePtr(x + j, y + i)) = color;
+ } else if (dst->format.bytesPerPixel == 2) {
+ *((uint16 *)dst->getBasePtr(x + j, y + i)) = color;
+ } else if (dst->format.bytesPerPixel == 4) {
+ *((uint32 *)dst->getBasePtr(x + j, y + i)) = color;
+ }
+ }
+
+ b <<= 1;
+ }
+ }
+}
+
+uint32 CryoExtFont::mapGlyph(uint32 chr) const {
+ switch (_codepage) {
+ case Common::kWindows950:
+ /* Nothing more than 0xffff */
+ if (chr >> 16) {
+ return 0;
+ }
+ /* No glyph for non printable */
+ if (chr < 0x20) {
+ return 0;
+ }
+ /* ASCII characters : like in 8bits case, 0x60 ones */
+ if (chr < 0x80) {
+ return chr - 0x20;
+ }
+ /* Invalid ranges */
+ if (chr < 0x8000) {
+ return 0;
+ }
+ if ((chr & 0xff) < 0x40) {
+ return 0;
+ }
+ /* After the 0x60 ASCII characters
+ * a table of 0xC0 large (starting at 0x40) and
+ * 0x80 long (starting at 0x80) */
+ chr = 0xC0 * ((chr >> 8) - 0x80) + ((chr & 0xff) - 0x40) + 0x60;
+ return chr;
+ default:
+ error("Invalid encoding");
+ }
+}
+
+CryoExtFont::Glyph::Glyph() : offX(0), offY(0), advance(0), bitmap(nullptr) {
+}
+
+CryoExtFont::Glyph::~Glyph() {
+ delete[] bitmap;
+}
+
+uint CryoExtFont::Glyph::setup(uint16 width, uint16 height) {
+ w = width;
+ h = height;
+ uint sz = h * ((w + 7) / 8);
+ bitmap = new byte[sz];
+ return sz;
+}
+
+} // End of namespace CryOmni3D
diff --git a/engines/cryomni3d/fonts/cryoextfont.h b/engines/cryomni3d/fonts/cryoextfont.h
new file mode 100644
index 0000000000..5cae411811
--- /dev/null
+++ b/engines/cryomni3d/fonts/cryoextfont.h
@@ -0,0 +1,88 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef CRYOMNI3D_FONTS_CRYOEXTFONT_H
+#define CRYOMNI3D_FONTS_CRYOEXTFONT_H
+
+#include "common/array.h"
+#include "common/hashmap.h"
+#include "common/str.h"
+#include "graphics/font.h"
+
+namespace Common {
+class SeekableReadStream;
+}
+
+namespace CryOmni3D {
+
+class CryoExtFont : public Graphics::Font {
+public:
+ CryoExtFont() : _height(0), _maxAdvance(0), _crf(nullptr), _codepage(Common::kCodePageInvalid) { }
+ virtual ~CryoExtFont();
+
+ void load(const Common::String &fontFile, Common::CodePage encoding);
+
+ virtual int getFontHeight() const { return _height; }
+ virtual int getMaxCharWidth() const { return _maxAdvance; }
+
+ virtual int getCharWidth(uint32 chr) const;
+
+ virtual Common::Rect getBoundingBox(uint32 chr) const;
+
+ virtual void drawChar(Graphics::Surface *dst, uint32 chr, int x, int y, uint32 color) const;
+
+private:
+ void loadOffsets(const Common::String &offsetsFile);
+ void assureCached(uint32 chr) const;
+ uint32 mapGlyph(uint32 chr) const;
+
+ struct Glyph {
+ uint16 h;
+ uint16 w;
+ int16 offX;
+ int16 offY;
+ uint16 advance;
+
+ byte *bitmap;
+
+ Glyph();
+ ~Glyph();
+
+ uint setup(uint16 width, uint16 height);
+ };
+
+ uint16 _height;
+ uint16 _maxAdvance;
+ byte _comment[32];
+
+ Common::CodePage _codepage;
+
+ mutable Common::SeekableReadStream *_crf;
+ Common::Array<uint32> _offsets;
+
+ typedef Common::HashMap<uint32, Glyph> GlyphCache;
+ mutable GlyphCache _cache;
+};
+
+} // End of namespace CryOmni3D
+
+#endif
diff --git a/engines/cryomni3d/fonts/cryofont.cpp b/engines/cryomni3d/fonts/cryofont.cpp
new file mode 100644
index 0000000000..0a17465ed6
--- /dev/null
+++ b/engines/cryomni3d/fonts/cryofont.cpp
@@ -0,0 +1,186 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/debug.h"
+#include "common/file.h"
+#include "graphics/managed_surface.h"
+
+#include "cryomni3d/fonts/cryofont.h"
+
+namespace CryOmni3D {
+
+void CryoFont::load(const Common::String &fontFile) {
+ Common::File crf;
+
+ if (!crf.open(fontFile)) {
+ error("can't open file %s", fontFile.c_str());
+ }
+
+ byte magic[8];
+
+ crf.read(magic, sizeof(magic));
+ if (memcmp(magic, "CRYOFONT", 8)) {
+ error("Invalid font magic");
+ }
+
+ // 3 unknown uint16
+ (void) crf.readUint16BE();
+ (void) crf.readUint16BE();
+ (void) crf.readUint16BE();
+
+ _height = crf.readSint16BE();
+ //debug("Max char height %d", _maxHeight);
+
+ crf.read(_comment, sizeof(_comment));
+ //debug("Comment %s", _comment);
+
+ loadAll8bitGlyphs(crf);
+}
+
+void CryoFont::loadAll8bitGlyphs(Common::SeekableReadStream &font_fl) {
+ for (uint i = 0; i < k8bitCharactersCount; i++) {
+ // Cache maps a character to a glyph
+ Glyph &glyph = _glyphs[i];
+ uint16 h = font_fl.readUint16BE();
+ uint16 w = font_fl.readUint16BE();
+ uint sz = glyph.setup(w, h);
+ //debug("Char %d sz %dx%d %d", i, w, h, sz);
+ glyph.offX = font_fl.readSint16BE();
+ glyph.offY = font_fl.readSint16BE();
+ glyph.advance = font_fl.readUint16BE();
+ //debug("Char %d offX %d offY %d PW %d", i, glyph.offX, glyph.offY, glyph.advance);
+
+ font_fl.read(glyph.bitmap, sz);
+ //debug("Char %d read %d", i, v);
+
+ if (glyph.advance > _maxAdvance) {
+ _maxAdvance = glyph.advance;
+ }
+ }
+}
+
+Common::Rect CryoFont::getBoundingBox(uint32 chr) const {
+ const Glyph &glyph = _glyphs[mapGlyph(chr)];
+ return Common::Rect(glyph.offX, glyph.offY,
+ glyph.offX + glyph.w, glyph.offY + glyph.h);
+}
+
+int CryoFont::getCharWidth(uint32 chr) const {
+ const Glyph &glyph = _glyphs[mapGlyph(chr)];
+ return glyph.advance;
+}
+
+void CryoFont::drawChar(Graphics::Surface *dst, uint32 chr, int x, int y, uint32 color) const {
+ assert(dst);
+ assert(dst->format.bytesPerPixel == 1 || dst->format.bytesPerPixel == 2 ||
+ dst->format.bytesPerPixel == 4);
+
+ const Glyph &glyph = _glyphs[mapGlyph(chr)];
+
+ x += glyph.offX;
+ y += glyph.offY + _height - 2;
+
+ if (x > dst->w) {
+ return;
+ }
+ if (y > dst->h) {
+ return;
+ }
+
+ int w = glyph.w;
+ int h = glyph.h;
+
+ const uint8 *srcPos = (const uint8 *)glyph.bitmap;
+
+ // Make sure we are not drawing outside the screen bounds
+ if (x < 0) {
+ // x is negative so srcPos will increase and w will decrease
+ srcPos -= x;
+ w += x;
+ x = 0;
+ }
+
+ if (x + w > dst->w) {
+ w = dst->w - x;
+ }
+
+ if (w <= 0) {
+ return;
+ }
+
+ if (y < 0) {
+ // y is negative so srcPos will increase and h will decrease
+ srcPos -= y * glyph.w;
+ h += y;
+ y = 0;
+ }
+
+ if (y + h > dst->h) {
+ h = dst->h - y;
+ }
+
+ if (h <= 0) {
+ return;
+ }
+
+ for (uint16 i = 0; i < h; i++) {
+ for (uint16 j = 0; j < w; j++) {
+ if (srcPos[j]) {
+ if (dst->format.bytesPerPixel == 1) {
+ *((byte *)dst->getBasePtr(x + j, y + i)) = color;
+ } else if (dst->format.bytesPerPixel == 2) {
+ *((uint16 *)dst->getBasePtr(x + j, y + i)) = color;
+ } else if (dst->format.bytesPerPixel == 4) {
+ *((uint32 *)dst->getBasePtr(x + j, y + i)) = color;
+ }
+ }
+ }
+ // Next line
+ srcPos += glyph.w;
+ }
+}
+
+uint32 CryoFont::mapGlyph(uint32 chr) const {
+ /* Placeholder for non printable and out of limit characters */
+ if (chr < 0x20 || chr >= 0xff) {
+ chr = '?';
+ }
+ chr -= 0x20;
+ return chr;
+}
+
+CryoFont::Glyph::Glyph() : offX(0), offY(0), advance(0), bitmap(nullptr) {
+}
+
+CryoFont::Glyph::~Glyph() {
+ delete[] bitmap;
+}
+
+uint CryoFont::Glyph::setup(uint16 width, uint16 height) {
+ w = width;
+ h = height;
+ uint sz = w * h;
+ bitmap = new byte[sz];
+ return sz;
+}
+
+} // End of namespace CryOmni3D
diff --git a/engines/cryomni3d/fonts/cryofont.h b/engines/cryomni3d/fonts/cryofont.h
new file mode 100644
index 0000000000..ac50a5712f
--- /dev/null
+++ b/engines/cryomni3d/fonts/cryofont.h
@@ -0,0 +1,82 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef CRYOMNI3D_FONTS_CRYOFONT_H
+#define CRYOMNI3D_FONTS_CRYOFONT_H
+
+#include "common/array.h"
+#include "common/hashmap.h"
+#include "common/str.h"
+#include "graphics/font.h"
+
+namespace Common {
+class SeekableReadStream;
+}
+
+namespace CryOmni3D {
+
+class CryoFont : public Graphics::Font {
+public:
+ CryoFont() : _height(0), _maxAdvance(0) { }
+
+ void load(const Common::String &fontFile);
+
+ virtual int getFontHeight() const { return _height; }
+ virtual int getMaxCharWidth() const { return _maxAdvance; }
+
+ virtual int getCharWidth(uint32 chr) const;
+
+ virtual Common::Rect getBoundingBox(uint32 chr) const;
+
+ virtual void drawChar(Graphics::Surface *dst, uint32 chr, int x, int y, uint32 color) const;
+
+private:
+ void loadAll8bitGlyphs(Common::SeekableReadStream &font_fl);
+ uint32 mapGlyph(uint32 chr) const;
+
+ struct Glyph {
+ uint16 h;
+ uint16 w;
+ int16 offX;
+ int16 offY;
+ uint16 advance;
+
+ byte *bitmap;
+
+ Glyph();
+ ~Glyph();
+
+ uint setup(uint16 width, uint16 height);
+ };
+
+ static const uint k8bitCharactersCount = 223;
+
+ uint16 _height;
+ uint16 _maxAdvance;
+ byte _comment[32];
+
+ Glyph _glyphs[k8bitCharactersCount];
+};
+
+} // End of namespace CryOmni3D
+
+#endif
diff --git a/engines/cryomni3d/module.mk b/engines/cryomni3d/module.mk
index 830f4502f7..266a6e93da 100644
--- a/engines/cryomni3d/module.mk
+++ b/engines/cryomni3d/module.mk
@@ -1,6 +1,8 @@
MODULE := engines/cryomni3d
MODULE_OBJS = \
+ fonts/cryoextfont.o \
+ fonts/cryofont.o \
image/codecs/hlz.o \
image/hlz.o \
video/hnm_decoder.o \
diff --git a/engines/cryomni3d/versailles/documentation.cpp b/engines/cryomni3d/versailles/documentation.cpp
index d52e67c89a..e39fd5cb47 100644
--- a/engines/cryomni3d/versailles/documentation.cpp
+++ b/engines/cryomni3d/versailles/documentation.cpp
@@ -1508,7 +1508,7 @@ void Versailles_Documentation::drawRecordData(Graphics::ManagedSurface &surface,
blockContent2.top = _fontManager->blockTextLastPos().y + lineHeight;
_fontManager->setupBlock(blockContent2);
- if (!_fontManager->displayBlockText(text, _fontManager->blockTextRemaining())) {
+ if (!_fontManager->displayBlockTextContinue()) {
// All text was drawn
break;
}
diff --git a/engines/cryomni3d/versailles/engine.cpp b/engines/cryomni3d/versailles/engine.cpp
index 9807df1446..b72c0c5756 100644
--- a/engines/cryomni3d/versailles/engine.cpp
+++ b/engines/cryomni3d/versailles/engine.cpp
@@ -276,6 +276,8 @@ void CryOmni3DEngine_Versailles::setupFonts() {
// Explainations below are based on original binaries, debug is not used in this engine
// Fonts loaded are not always the same: FR Mac and EN DOS don't use the same font for debug doc/unused
// The important is that the loaded one is present in all versions
+
+ // Code below is for SBCS encodings (ie. non CJK)
uint8 fontsSet = getFeatures() & GF_VERSAILLES_FONTS_MASK;
switch (fontsSet) {
case GF_VERSAILLES_FONTS_NUMERIC:
@@ -352,7 +354,8 @@ void CryOmni3DEngine_Versailles::setupFonts() {
error("Font set invalid");
}
- _fontManager.loadFonts(fonts);
+ // Use a SBCS codepage as a placeholder, we won't convert characters anyway
+ _fontManager.loadFonts(fonts, Common::kWindows1250);
}
void CryOmni3DEngine_Versailles::setupSprites() {
Commit: 90d1c764c32ed369609225a5724ab994a479d61a
https://github.com/scummvm/scummvm/commit/90d1c764c32ed369609225a5724ab994a479d61a
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Add clipping support for videos
This will be used to avoid drawing subtitles at every frame
Changed paths:
engines/cryomni3d/cryomni3d.cpp
engines/cryomni3d/cryomni3d.h
diff --git a/engines/cryomni3d/cryomni3d.cpp b/engines/cryomni3d/cryomni3d.cpp
index 952e69af84..fdfe2200bc 100644
--- a/engines/cryomni3d/cryomni3d.cpp
+++ b/engines/cryomni3d/cryomni3d.cpp
@@ -44,7 +44,7 @@ namespace CryOmni3D {
CryOmni3DEngine::CryOmni3DEngine(OSystem *syst,
const CryOmni3DGameDescription *gamedesc) : Engine(syst), _gameDescription(gamedesc),
_canLoadSave(false), _fontManager(), _sprites(), _dragStatus(kDragStatus_NoDrag), _lastMouseButton(0),
- _autoRepeatNextEvent(uint(-1)) {
+ _autoRepeatNextEvent(uint(-1)), _hnmHasClip(false) {
if (!_mixer->isReady()) {
error("Sound initialization failed");
}
@@ -172,7 +172,16 @@ void CryOmni3DEngine::playHNM(const Common::String &filename, Audio::Mixer::Soun
if (beforeDraw) {
(this->*beforeDraw)(frameNum);
}
- g_system->copyRectToScreen(frame->getPixels(), frame->pitch, 0, 0, width, height);
+
+ if (_hnmHasClip) {
+ Common::Rect rct(width, height);
+ rct.clip(_hnmClipping);
+ g_system->copyRectToScreen(frame->getPixels(), frame->pitch, rct.left, rct.top, rct.width(),
+ rct.height());
+ } else {
+ g_system->copyRectToScreen(frame->getPixels(), frame->pitch, 0, 0, width, height);
+ }
+
if (afterDraw) {
(this->*afterDraw)(frameNum);
}
diff --git a/engines/cryomni3d/cryomni3d.h b/engines/cryomni3d/cryomni3d.h
index 387a5a02c9..716ba11de3 100644
--- a/engines/cryomni3d/cryomni3d.h
+++ b/engines/cryomni3d/cryomni3d.h
@@ -176,6 +176,9 @@ protected:
void fadeInPalette(const byte *colors);
void setBlackPalette();
+ void setHNMClipping(const Common::Rect &clip) { _hnmClipping = clip; _hnmHasClip = true; }
+ void unsetHNMClipping() { _hnmHasClip = false; }
+
protected:
bool _canLoadSave;
@@ -194,6 +197,9 @@ protected:
private:
uint _lockPaletteStartRW;
uint _lockPaletteEndRW;
+
+ Common::Rect _hnmClipping;
+ bool _hnmHasClip;
};
} // End of namespace CryOmni3D
Commit: dad1b4d1357fe9453aa9f67ccc98137ff71f98ba
https://github.com/scummvm/scummvm/commit/dad1b4d1357fe9453aa9f67ccc98137ff71f98ba
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Add subtitles support for CJK
Changed paths:
engines/cryomni3d/versailles/data.cpp
engines/cryomni3d/versailles/engine.cpp
engines/cryomni3d/versailles/engine.h
diff --git a/engines/cryomni3d/versailles/data.cpp b/engines/cryomni3d/versailles/data.cpp
index f97e0da917..1220497605 100644
--- a/engines/cryomni3d/versailles/data.cpp
+++ b/engines/cryomni3d/versailles/data.cpp
@@ -71,6 +71,24 @@ const FakeTransitionActionPlace CryOmni3DEngine_Versailles::kFakeTransitions[] =
{0, 0} // Must be the last one
};
+static void readSubtitles(Common::HashMap<Common::String, Common::Array<SubtitleEntry> > &subtitles,
+ DATSeekableStream *data) {
+ uint16 vidsCount = data->readUint16LE();
+ for (uint16 i = 0; i < vidsCount; i++) {
+ Common::String vidName = data->readString16();
+ Common::Array<SubtitleEntry> &entries = subtitles[vidName];
+
+ uint16 linesCount = data->readUint16LE();
+ entries.resize(linesCount);
+ for (uint16 j = 0; j < linesCount; j++) {
+ SubtitleEntry &entry = entries[j];
+
+ entry.frameStart = data->readUint32LE();
+ entry.text = data->readString16();
+ }
+ }
+}
+
void CryOmni3DEngine_Versailles::loadStaticData() {
// This should match data in devtools/create_cryomni3d_dat
DATSeekableStream *data = getStaticData(MKTAG('V', 'R', 'S', 'L'), 1);
@@ -91,6 +109,14 @@ void CryOmni3DEngine_Versailles::loadStaticData() {
data->readString16Array16(_paintingsTitles);
assert(_paintingsTitles.size() == 48);
+ _subtitles.clear();
+ // Only CJK have subtitles, don't change dat format for other languages
+ if ((getLanguage() == Common::JA_JPN) ||
+ (getLanguage() == Common::KO_KOR) ||
+ (getLanguage() == Common::ZH_TWN)) {
+ readSubtitles(_subtitles, data);
+ }
+
delete data;
}
diff --git a/engines/cryomni3d/versailles/engine.cpp b/engines/cryomni3d/versailles/engine.cpp
index b72c0c5756..c4e7b39db0 100644
--- a/engines/cryomni3d/versailles/engine.cpp
+++ b/engines/cryomni3d/versailles/engine.cpp
@@ -656,8 +656,7 @@ void CryOmni3DEngine_Versailles::playTransitionEndLevel(int level) {
}
}
- // Videos are like music because if you mute music in game it will mute videos soundtracks
- playHNM(video, Audio::Mixer::kMusicSoundType);
+ playSubtitledVideo(video);
clearKeys();
if (shouldAbort()) {
@@ -1611,6 +1610,81 @@ void CryOmni3DEngine_Versailles::playInGameVideo(const Common::String &filename,
}
}
+void CryOmni3DEngine_Versailles::playSubtitledVideo(const Common::String &filename) {
+ Common::HashMap<Common::String, Common::Array<SubtitleEntry> >::const_iterator it;
+
+ if (!showSubtitles() ||
+ (it = _subtitles.find(filename)) == _subtitles.end() ||
+ it->_value.size() == 0) {
+ // No subtitle, don't try to handle them frame by frame
+ // Videos are like music because if you mute music in game it will mute videos soundtracks
+ playHNM(filename, Audio::Mixer::kMusicSoundType);
+ return;
+ }
+
+ // Keep 2 colors for background and text
+ setPalette(&_cursorPalette[3 * 242], 254, 1);
+ setPalette(&_cursorPalette[3 * 247], 255, 1);
+ lockPalette(0, 253);
+
+ _currentSubtitleSet = &it->_value;
+ _currentSubtitle = _currentSubtitleSet->begin();
+
+ _fontManager.setCurrentFont(8);
+ _fontManager.setTransparentBackground(true);
+ _fontManager.setForeColor(254u);
+ _fontManager.setLineHeight(22);
+ _fontManager.setSpaceWidth(2);
+ _fontManager.setCharSpacing(1);
+
+ // Videos are like music because if you mute music in game it will mute videos soundtracks
+ playHNM(filename, Audio::Mixer::kMusicSoundType,
+ static_cast<HNMCallback>(&CryOmni3DEngine_Versailles::drawVideoSubtitles), nullptr);
+
+ clearKeys();
+ unlockPalette();
+}
+
+void CryOmni3DEngine_Versailles::drawVideoSubtitles(uint frameNum) {
+ if (_currentSubtitle == _currentSubtitleSet->end()) {
+ // No next subtitle to draw, just return
+ return;
+ }
+
+ if (frameNum < _currentSubtitle->frameStart) {
+ // Not yet the good frame, just return
+ return;
+ }
+
+ const Common::String &text = _currentSubtitle->text;
+ _currentSubtitle++;
+
+ if (text.size() == 0) {
+ // Empty text, reset clipping
+ unsetHNMClipping();
+ return;
+ }
+
+ uint lines = _fontManager.getLinesCount(text, 640 - 8);
+ uint top = 480 - (2 * 4) - _fontManager.lineHeight() * lines;
+
+ Graphics::ManagedSurface tmp(640, 480 - top, Graphics::PixelFormat::createFormatCLUT8());
+
+ tmp.clear(255u);
+
+ _fontManager.setSurface(&tmp);
+ _fontManager.setupBlock(Common::Rect(4, 4, tmp.w - 4,
+ tmp.h - 4)); // +1 because bottom,right is excluded
+
+ _fontManager.displayBlockText(text);
+
+ // Enable clipping to avoid refreshing text at every frame
+ setHNMClipping(Common::Rect(0, 0, 640, top));
+
+ g_system->copyRectToScreen(tmp.getPixels(), tmp.pitch, 0, top, tmp.w, tmp.h);
+ g_system->updateScreen();
+}
+
void CryOmni3DEngine_Versailles::loadBMPs(const char *pattern, Graphics::Surface *bmps,
uint count) {
Image::BitmapDecoder bmpDecoder;
diff --git a/engines/cryomni3d/versailles/engine.h b/engines/cryomni3d/versailles/engine.h
index d5f02b7e8c..8fc48115dd 100644
--- a/engines/cryomni3d/versailles/engine.h
+++ b/engines/cryomni3d/versailles/engine.h
@@ -27,6 +27,7 @@
#include "common/random.h"
#include "common/array.h"
#include "common/hashmap.h"
+#include "common/hash-str.h"
#include "common/str.h"
#include "cryomni3d/cryomni3d.h"
@@ -219,6 +220,11 @@ struct MsgBoxParameters {
uint timeoutChar;
};
+struct SubtitleEntry {
+ uint32 frameStart;
+ Common::String text;
+};
+
class CryOmni3DEngine_Versailles : public CryOmni3DEngine {
friend class Versailles_DialogsManager;
protected:
@@ -342,6 +348,7 @@ private:
bool showSubtitles() const;
void playInGameVideo(const Common::String &filename, bool restoreCursorPalette = true);
+ void playSubtitledVideo(const Common::String &filename);
void loadBMPs(const char *pattern, Graphics::Surface *bmps, uint count);
@@ -428,6 +435,12 @@ private:
bool doCountDown();
void doDrawCountdown(Graphics::ManagedSurface *surface);
+ // Video subtitles
+ Common::HashMap<Common::String, Common::Array<SubtitleEntry> > _subtitles;
+ const Common::Array<SubtitleEntry> *_currentSubtitleSet;
+ Common::Array<SubtitleEntry>::const_iterator _currentSubtitle;
+ void drawVideoSubtitles(uint frameNum);
+
// Objects
template<uint ID>
void genericDisplayObject();
Commit: baad1c7c86bcdc9bc56c7275617047756b032a68
https://github.com/scummvm/scummvm/commit/baad1c7c86bcdc9bc56c7275617047756b032a68
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Add support for subtitles in create_cryomni3d
Changed paths:
devtools/create_cryomni3d/util.cpp
devtools/create_cryomni3d/util.h
devtools/create_cryomni3d/versailles.cpp
devtools/create_cryomni3d/versailles.h
diff --git a/devtools/create_cryomni3d/util.cpp b/devtools/create_cryomni3d/util.cpp
index 4ce94efb8c..d27379e417 100644
--- a/devtools/create_cryomni3d/util.cpp
+++ b/devtools/create_cryomni3d/util.cpp
@@ -127,21 +127,10 @@ size_t writeString16(FILE *fp, const char *string) {
return written;
}
-template<typename T, size_t (*Tf)(FILE *fp, T), typename U, size_t (*Uf)(FILE *fp, U)>
-size_t writeArray(FILE *fp, T const *array, U elems) {
- size_t written = 0;
- written += Uf(fp, elems);
- for (U i = 0; i < elems; i++) {
- written += Tf(fp, array[i]);
- }
- return written;
-}
-
size_t writeString16Array16(FILE *fp, char const *const *array, uint16 elems) {
return writeArray<char const *, writeString16, uint16, writeUint16LE>(fp, array, elems);
}
-
//#define DEBUG
static const char padBuf[PADDING_ALIGNMENT] = {
#ifndef DEBUG
diff --git a/devtools/create_cryomni3d/util.h b/devtools/create_cryomni3d/util.h
index 4cd685e927..91e8974e21 100644
--- a/devtools/create_cryomni3d/util.h
+++ b/devtools/create_cryomni3d/util.h
@@ -46,6 +46,26 @@ size_t writeString16Array16(FILE *fp, char const *const *string, uint16 elems);
size_t writePadding(FILE *fp);
uint32 fileSize(FILE *fp);
+// Helper
+template<typename T, size_t (*Tf)(FILE *fp, const T &), typename U, size_t (*Uf)(FILE *fp, U)>
+size_t writeArray(FILE *fp, T const *array, U elems) {
+ size_t written = 0;
+ written += Uf(fp, elems);
+ for (U i = 0; i < elems; i++) {
+ written += Tf(fp, array[i]);
+ }
+ return written;
+}
+template<typename T, size_t (*Tf)(FILE *fp, T), typename U, size_t (*Uf)(FILE *fp, U)>
+size_t writeArray(FILE *fp, T const *array, U elems) {
+ size_t written = 0;
+ written += Uf(fp, elems);
+ for (U i = 0; i < elems; i++) {
+ written += Tf(fp, array[i]);
+ }
+ return written;
+}
+
/* Misc stuff */
void NORETURN_PRE error(const char *s, ...) NORETURN_POST;
void warning(const char *s, ...);
diff --git a/devtools/create_cryomni3d/versailles.cpp b/devtools/create_cryomni3d/versailles.cpp
index 68f810a5bd..e287309566 100644
--- a/devtools/create_cryomni3d/versailles.cpp
+++ b/devtools/create_cryomni3d/versailles.cpp
@@ -28,6 +28,35 @@
#include "versailles.h"
+size_t writeVersaillesSubtitleEntry(FILE *fp, const SubtitleEntry &entry) {
+ size_t size = 0;
+
+ size += writeUint32LE(fp, entry.frameStart);
+ size += writeString16(fp, entry.text);
+
+ return size;
+}
+
+size_t writeVersaillesSubtitle(FILE *fp, Subtitle const &subtitle) {
+ size_t size = 0;
+
+ size += writeString16(fp, subtitle.videoName);
+
+ size_t count = 0;
+ for (; count < ARRAYSIZE(subtitle.entries) &&
+ (subtitle.entries[count].text != nullptr ||
+ subtitle.entries[count].frameStart != 0); count++) { }
+
+ size += writeArray<SubtitleEntry, writeVersaillesSubtitleEntry, uint16, writeUint16LE>(fp,
+ subtitle.entries, count);
+
+ return size;
+}
+
+size_t writeVersaillesSubtitles16(FILE *fp, Subtitle const *subtitles, uint16 elems) {
+ return writeArray<Subtitle, writeVersaillesSubtitle, uint16, writeUint16LE>(fp, subtitles, elems);
+}
+
// In Versailles platform doesn't seem to change anything
#define DEFINE_FUNCS(lang) \
size_t writeVersailles_ALL_ ## lang ## _Header(FILE *f, uint32 offset, uint32 size) { \
@@ -48,10 +77,45 @@
size += writeString16(f, versailles ## lang ## BombPwd); \
\
assert(VERSAILLES_MESSAGES_COUNT == ARRAYSIZE(versailles ## lang ## messages)); \
- size += writeString16Array16(f, versailles ## lang ## messages, VERSAILLES_MESSAGES_COUNT); \
+ size += writeString16Array16(f, versailles ## lang ## messages, ARRAYSIZE(versailles ## lang ## messages)); \
+ \
+ assert(VERSAILLES_PAINTINGS_COUNT == ARRAYSIZE(versailles ## lang ## paintings)); \
+ size += writeString16Array16(f, versailles ## lang ## paintings, ARRAYSIZE(versailles ## lang ## paintings)); \
+ \
+ size += writePadding(f); \
+ return size; \
+ }
+
+#define DEFINE_FUNCS_CJK(lang) \
+ size_t writeVersailles_ALL_ ## lang ## _Header(FILE *f, uint32 offset, uint32 size) { \
+ return writeGameHeader(f, VERSAILLES_GAMEID, VERSAILLES_VERSION, LANG_ ## lang, PLATFORM_ALL, \
+ offset, size); \
+ } \
+ \
+ size_t writeVersailles_ALL_ ## lang ## _Data(FILE *f) { \
+ size_t size = 0; \
+ \
+ assert(VERSAILLES_LOCALIZED_FILENAMES_COUNT == ARRAYSIZE(versailles ## lang ## localizedFilenames)); \
+ size += writeString16Array16(f, versailles ## lang ## localizedFilenames, \
+ VERSAILLES_LOCALIZED_FILENAMES_COUNT); \
+ \
+ size += writeString16(f, versailles ## lang ## EpilMsg); \
+ size += writeString16(f, versailles ## lang ## EpilPwd); \
+ \
+ if ((LANG_ ## lang == LANG_JA)) { \
+ assert(VERSAILLES_JA_BOMB_ALPHABET_SIZE + 1 == sizeof(versaillesJABombAlphabet)); \
+ size += writeString16(f, versaillesJABombAlphabet); \
+ } \
+ size += writeString16(f, versailles ## lang ## BombPwd); \
+ \
+ assert(VERSAILLES_MESSAGES_COUNT_CJK == ARRAYSIZE(versailles ## lang ## messages)); \
+ size += writeString16Array16(f, versailles ## lang ## messages, ARRAYSIZE(versailles ## lang ## messages)); \
\
assert(VERSAILLES_PAINTINGS_COUNT == ARRAYSIZE(versailles ## lang ## paintings)); \
- size += writeString16Array16(f, versailles ## lang ## paintings, VERSAILLES_PAINTINGS_COUNT); \
+ size += writeString16Array16(f, versailles ## lang ## paintings, ARRAYSIZE(versailles ## lang ## paintings)); \
+ \
+ /* No need to assert as we don't expect a fixed count in engine */ \
+ size += writeVersaillesSubtitles16(f, versailles ## lang ## subtitles, ARRAYSIZE(versailles ## lang ## subtitles)); \
\
size += writePadding(f); \
return size; \
diff --git a/devtools/create_cryomni3d/versailles.h b/devtools/create_cryomni3d/versailles.h
index f384a40139..e856f08fbf 100644
--- a/devtools/create_cryomni3d/versailles.h
+++ b/devtools/create_cryomni3d/versailles.h
@@ -28,6 +28,17 @@
#define VERSAILLES_GAMEID MKTAG('V', 'R', 'S', 'L')
#define VERSAILLES_VERSION 1
+struct SubtitleEntry {
+ uint32 frameStart;
+ char const *const text;
+};
+
+#define MAX_SUBTITLE_ENTRIES 256
+struct Subtitle {
+ char const *const videoName;
+ SubtitleEntry const entries[MAX_SUBTITLE_ENTRIES];
+};
+
#define VERSAILLES_LOCALIZED_FILENAMES_COUNT 5
static char const *const versaillesFRlocalizedFilenames[] = {
"DIALOG1.GTO",
Commit: 168522beeac66c38f2639031a5a40da74bef2c2b
https://github.com/scummvm/scummvm/commit/168522beeac66c38f2639031a5a40da74bef2c2b
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Add support for automatically named saves
CJK versions of game use this to avoid handling extended character set
in files
Changed paths:
engines/cryomni3d/versailles/engine.h
engines/cryomni3d/versailles/menus.cpp
engines/cryomni3d/versailles/saveload.cpp
diff --git a/engines/cryomni3d/versailles/engine.h b/engines/cryomni3d/versailles/engine.h
index 8fc48115dd..693b9e971f 100644
--- a/engines/cryomni3d/versailles/engine.h
+++ b/engines/cryomni3d/versailles/engine.h
@@ -330,7 +330,7 @@ private:
bool canVisit() const;
Common::String getSaveFileName(bool visit, uint saveNum) const;
- void getSavesList(bool visit, Common::Array<Common::String> &saveNames);
+ void getSavesList(bool visit, Common::Array<Common::String> &saveNames, int &nextSaveNum);
void saveGame(bool visit, uint saveNum, const Common::String &saveName);
bool loadGame(bool visit, uint saveNum);
diff --git a/engines/cryomni3d/versailles/menus.cpp b/engines/cryomni3d/versailles/menus.cpp
index ea34b5d80d..b474e5eae5 100644
--- a/engines/cryomni3d/versailles/menus.cpp
+++ b/engines/cryomni3d/versailles/menus.cpp
@@ -590,6 +590,8 @@ uint CryOmni3DEngine_Versailles::displayYesNoBox(Graphics::ManagedSurface &surfa
uint CryOmni3DEngine_Versailles::displayFilePicker(const Graphics::Surface *bgFrame,
bool saveMode, Common::String &saveName) {
+ bool autoName = (_messages.size() >= 148);
+
Graphics::ManagedSurface surface(bgFrame->w, bgFrame->h, bgFrame->format);
surface.blitFrom(*bgFrame);
@@ -609,7 +611,8 @@ uint CryOmni3DEngine_Versailles::displayFilePicker(const Graphics::Surface *bgFr
g_system->updateScreen();
Common::Array<Common::String> savesList;
- getSavesList(_isVisiting, savesList);
+ int nextSaveNum;
+ getSavesList(_isVisiting, savesList, nextSaveNum);
Common::String saveNameBackup;
showMouse(true);
@@ -750,15 +753,27 @@ uint CryOmni3DEngine_Versailles::displayFilePicker(const Graphics::Surface *bgFr
boxSelected = boxHovered;
// Backup new one
saveNameBackup = savesList[boxSelected + fileListOffset];
- // Not an existing save clear free name
- if (!existingSave) {
- savesList[boxSelected + fileListOffset] = "";
+ if (saveMode) {
+ if (!existingSave) {
+ // Not an existing save clear free name
+ savesList[boxSelected + fileListOffset] = "";
+ }
+ if (autoName) {
+ // Apply autoname to text
+ if (_currentLevel < 8) {
+ savesList[boxSelected + fileListOffset] = Common::String::format(_messages[146].c_str(),
+ _currentLevel);
+ } else {
+ savesList[boxSelected + fileListOffset] = _messages[147];
+ }
+ savesList[boxSelected + fileListOffset] += Common::String::format(" - %d", nextSaveNum);
+ }
}
redraw = true;
}
}
}
- if (boxSelected != uint(-1) && saveMode) {
+ if (boxSelected != uint(-1) && saveMode && !autoName) {
if (key.keycode != Common::KEYCODE_INVALID) {
// Reference means we edit in place
Common::String &selectedSaveName = savesList[boxSelected + fileListOffset];
@@ -837,7 +852,11 @@ uint CryOmni3DEngine_Versailles::displayFilePicker(const Graphics::Surface *bgFr
}
}
if (boxSelected != uint(-1)) {
- saveName = savesList[boxSelected + fileListOffset];
+ if (autoName) {
+ saveName = Common::String::format("AUTO%04d", nextSaveNum);
+ } else {
+ saveName = savesList[boxSelected + fileListOffset];
+ }
ConfMan.setInt(_isVisiting ? "visits_list_off" : "saves_list_off", fileListOffset);
return boxSelected + fileListOffset + 1;
} else {
diff --git a/engines/cryomni3d/versailles/saveload.cpp b/engines/cryomni3d/versailles/saveload.cpp
index c71b6d1e40..1af28bee60 100644
--- a/engines/cryomni3d/versailles/saveload.cpp
+++ b/engines/cryomni3d/versailles/saveload.cpp
@@ -53,8 +53,13 @@ bool CryOmni3DEngine_Versailles::canVisit() const {
return Common::File::exists("game0001.sav");
}
-void CryOmni3DEngine_Versailles::getSavesList(bool visit, Common::StringArray &saveNames) {
+void CryOmni3DEngine_Versailles::getSavesList(bool visit, Common::StringArray &saveNames,
+ int &nextSaveNum) {
+ nextSaveNum = 1;
+ bool supportsAutoName = (_messages.size() >= 148);
+
char saveName[kSaveDescriptionLen + 1];
+ // Terminate saveName here forever (we don't overrun kSaveDescriptionLen)
saveName[kSaveDescriptionLen] = '\0';
Common::String pattern = Common::String::format("%s%s.????", _targetName.c_str(),
visit ? "_visit" : "");
@@ -98,9 +103,34 @@ void CryOmni3DEngine_Versailles::getSavesList(bool visit, Common::StringArray &s
num++;
Common::InSaveFile *in = _saveFileMan->openForLoading(*file);
if (in) {
- if (in->read(saveName, kSaveDescriptionLen) == kSaveDescriptionLen) {
- saveNames.push_back(saveName);
+ if (in->read(saveName, kSaveDescriptionLen) != kSaveDescriptionLen) {
+ delete in;
+ }
+
+ Common::String saveNameStr = saveName;
+ if (supportsAutoName && saveNameStr.hasPrefix("AUTO")) {
+ int saveNum = atoi(saveName + 4);
+ if (saveNum >= 1 && saveNum <= 9999) {
+ in->seek(436); // Go to current level
+ uint32 level = in->readUint32BE();
+
+ if (level < 8) {
+ saveNameStr = Common::String::format(_messages[146].c_str(), level);
+ } else {
+ saveNameStr = _messages[147];
+ }
+ saveNameStr += Common::String::format(" - %d", saveNum);
+ if (saveNum >= nextSaveNum) {
+ if (saveNum >= 9999) {
+ nextSaveNum = 9999;
+ } else {
+ nextSaveNum = saveNum + 1;
+ }
+ }
+ }
}
+
+ saveNames.push_back(saveNameStr);
delete in;
}
}
Commit: bf215580ddc51e191246f25d3d212b1cca91f2f6
https://github.com/scummvm/scummvm/commit/bf215580ddc51e191246f25d3d212b1cca91f2f6
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Prepare CJK support for Versailles
Changed paths:
devtools/create_cryomni3d/versailles.cpp
devtools/create_cryomni3d/versailles.h
engines/cryomni3d/versailles/data.cpp
engines/cryomni3d/versailles/engine.h
engines/cryomni3d/versailles/logic.cpp
diff --git a/devtools/create_cryomni3d/versailles.cpp b/devtools/create_cryomni3d/versailles.cpp
index e287309566..5955268f40 100644
--- a/devtools/create_cryomni3d/versailles.cpp
+++ b/devtools/create_cryomni3d/versailles.cpp
@@ -102,10 +102,6 @@ size_t writeVersaillesSubtitles16(FILE *fp, Subtitle const *subtitles, uint16 el
size += writeString16(f, versailles ## lang ## EpilMsg); \
size += writeString16(f, versailles ## lang ## EpilPwd); \
\
- if ((LANG_ ## lang == LANG_JA)) { \
- assert(VERSAILLES_JA_BOMB_ALPHABET_SIZE + 1 == sizeof(versaillesJABombAlphabet)); \
- size += writeString16(f, versaillesJABombAlphabet); \
- } \
size += writeString16(f, versailles ## lang ## BombPwd); \
\
assert(VERSAILLES_MESSAGES_COUNT_CJK == ARRAYSIZE(versailles ## lang ## messages)); \
diff --git a/devtools/create_cryomni3d/versailles.h b/devtools/create_cryomni3d/versailles.h
index e856f08fbf..ed897a2e7c 100644
--- a/devtools/create_cryomni3d/versailles.h
+++ b/devtools/create_cryomni3d/versailles.h
@@ -105,6 +105,7 @@ static char const versaillesESBombPwd[] = "NO ES PODER DE REYES EL ALCANZAR LA P
static char const versaillesITBombPwd[] = "AI SOVRANI NON E DATO RAGGIUNGERE LA PERFEZIONE";
#define VERSAILLES_MESSAGES_COUNT 146
+#define VERSAILLES_MESSAGES_COUNT_CJK 151
#define VERSAILLES_PAINTINGS_COUNT 48
static char const *const versaillesFRmessages[] = {
diff --git a/engines/cryomni3d/versailles/data.cpp b/engines/cryomni3d/versailles/data.cpp
index 1220497605..a853885462 100644
--- a/engines/cryomni3d/versailles/data.cpp
+++ b/engines/cryomni3d/versailles/data.cpp
@@ -101,11 +101,18 @@ void CryOmni3DEngine_Versailles::loadStaticData() {
// epigraph settings, bomb password
_epigraphContent = data->readString16();
_epigraphPassword = data->readString16();
+ _bombAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ '";
_bombPassword = data->readString16();
// messages, paintings titles
data->readString16Array16(_messages);
- assert(_messages.size() == 146);
+ if ((getLanguage() == Common::JA_JPN) ||
+ (getLanguage() == Common::KO_KOR) ||
+ (getLanguage() == Common::ZH_TWN)) {
+ assert(_messages.size() == 151);
+ } else {
+ assert(_messages.size() == 146);
+ }
data->readString16Array16(_paintingsTitles);
assert(_paintingsTitles.size() == 48);
diff --git a/engines/cryomni3d/versailles/engine.h b/engines/cryomni3d/versailles/engine.h
index 693b9e971f..e2465e64db 100644
--- a/engines/cryomni3d/versailles/engine.h
+++ b/engines/cryomni3d/versailles/engine.h
@@ -558,15 +558,16 @@ private:
IMG_CB(88003d);
IMG_CB(88003e);
IMG_CB(88003f);
- Common::String _bombPassword;
+ Common::U32String _bombAlphabet; // For Japanese edition
+ Common::U32String _bombPassword;
static const uint kBombPasswordSmallLength = 40;
static const uint kBombPasswordMaxLength = 60;
static const uint16 kBombLettersPos[2][kBombPasswordMaxLength][2];
bool handleBomb(ZonFixedImage *fimg);
void drawBombLetters(Graphics::ManagedSurface &surface, const Graphics::Surface(&bmpLetters)[28],
const uint bombPasswordLength,
- const unsigned char (&bombPossibilites)[kBombPasswordMaxLength][5],
- const unsigned char (&bombCurrentLetters)[kBombPasswordMaxLength]);
+ const uint32(&bombPossibilites)[kBombPasswordMaxLength][5],
+ const byte(&bombCurrentLetters)[kBombPasswordMaxLength]);
IMG_CB(88004);
IMG_CB(88004b);
#undef IMG_CB
diff --git a/engines/cryomni3d/versailles/logic.cpp b/engines/cryomni3d/versailles/logic.cpp
index 10e96d1413..e2edad534a 100644
--- a/engines/cryomni3d/versailles/logic.cpp
+++ b/engines/cryomni3d/versailles/logic.cpp
@@ -2930,8 +2930,8 @@ bool CryOmni3DEngine_Versailles::handleBomb(ZonFixedImage *fimg) {
bool success = false;
Common::RandomSource rnd("VersaillesBomb");
Graphics::Surface bmpLetters[28];
- unsigned char bombPossibilites[60][5];
- unsigned char bombCurrentLetters[60];
+ uint32 bombPossibilites[60][5];
+ byte bombCurrentLetters[60];
Graphics::ManagedSurface tempSurf;
const uint bombPasswordLength = _bombPassword.size();
@@ -2939,14 +2939,21 @@ bool CryOmni3DEngine_Versailles::handleBomb(ZonFixedImage *fimg) {
error("Bomb password is too long");
}
- loadBMPs("bomb_%02d.bmp", bmpLetters, 28);
+ uint max = _bombAlphabet.size() - 1;
+ if (getLanguage() != Common::JA_JPN) {
+ // In bitmap mode we only have 28 images
+ assert(max < 28);
+ // BUG: in game the rand is modulo 27
+ max = 26;
+ loadBMPs("bomb_%02d.bmp", bmpLetters, 28);
+ }
for (uint i = 0; i < bombPasswordLength; i++) {
- bombPossibilites[i][0] = toupper(_bombPassword[i]);
+ bombPossibilites[i][0] = _bombPassword[i];
for (uint j = 1; j < 5; j++) {
bool foundSameLetter;
do {
foundSameLetter = false;
- bombPossibilites[i][j] = rnd.getRandomNumberRng('A', 'Z');
+ bombPossibilites[i][j] = _bombAlphabet[rnd.getRandomNumber(max)];
for (uint k = 0; k < j; k++) {
if (bombPossibilites[i][k] == bombPossibilites[i][j]) {
foundSameLetter = true;
@@ -2989,8 +2996,8 @@ bool CryOmni3DEngine_Versailles::handleBomb(ZonFixedImage *fimg) {
// Check if password is OK
success = true;
for (uint i = 0; i < bombPasswordLength; i++) {
- unsigned char letterChar = bombPossibilites[i][bombCurrentLetters[i]];
- if (letterChar != _bombPassword[i]) {
+ uint16 letterId = bombPossibilites[i][bombCurrentLetters[i]];
+ if (letterId != _bombPassword[i]) {
success = false;
break;
}
@@ -3122,22 +3129,33 @@ const uint16 CryOmni3DEngine_Versailles::kBombLettersPos[2][kBombPasswordMaxLeng
void CryOmni3DEngine_Versailles::drawBombLetters(Graphics::ManagedSurface &surface,
const Graphics::Surface(&bmpLetters)[28], const uint bombPasswordLength,
- const unsigned char (&bombPossibilites)[kBombPasswordMaxLength][5],
- const unsigned char (&bombCurrentLetters)[kBombPasswordMaxLength]) {
+ const uint32(&bombPossibilites)[kBombPasswordMaxLength][5],
+ const byte(&bombCurrentLetters)[kBombPasswordMaxLength]) {
uint table = bombPasswordLength <= kBombPasswordSmallLength ? 0 : 1;
- for (uint i = 0; i < bombPasswordLength; i++) {
- unsigned char letterChar = bombPossibilites[i][bombCurrentLetters[i]];
- uint letterId = 0;
- if (letterChar >= 'A' && letterChar <= 'Z') {
- letterId = letterChar - 'A';
- } else if (letterChar == ' ') {
- letterId = 26;
- } else if (letterChar == '\'') {
- letterId = 27;
+ if (getLanguage() == Common::JA_JPN) {
+ _fontManager.setCurrentFont(1);
+ _fontManager.setTransparentBackground(true);
+ _fontManager.setForeColor(0);
+ _fontManager.setSurface(&surface);
+
+ for (uint i = 0; i < bombPasswordLength; i++) {
+ Common::Rect rct(34, 34);
+ rct.moveTo(kBombLettersPos[table][i][0], kBombLettersPos[table][i][1]);
+ surface.fillRect(rct, 239);
+
+ uint32 letter = bombPossibilites[i][bombCurrentLetters[i]];
+ Common::U32String str(&letter, 1);
+
+ _fontManager.displayStr(rct.left + (34 - _fontManager.getStrWidth(str)) / 2,
+ rct.top + 5, str);
+ }
+ } else {
+ for (uint i = 0; i < bombPasswordLength; i++) {
+ uint letterId = _bombAlphabet.find(bombPossibilites[i][bombCurrentLetters[i]]);
+ const Graphics::Surface &letter = bmpLetters[letterId];
+ Common::Point dst(kBombLettersPos[table][i][0], kBombLettersPos[table][i][1]);
+ surface.transBlitFrom(letter, dst);
}
- const Graphics::Surface &letter = bmpLetters[letterId];
- Common::Point dst(kBombLettersPos[table][i][0], kBombLettersPos[table][i][1]);
- surface.transBlitFrom(letter, dst);
}
}
Commit: 658c4dfa37b87bce52c8a9e04562dd6343479626
https://github.com/scummvm/scummvm/commit/658c4dfa37b87bce52c8a9e04562dd6343479626
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Handle translations for riddles and bomb
Changed paths:
engines/cryomni3d/versailles/engine.h
engines/cryomni3d/versailles/logic.cpp
diff --git a/engines/cryomni3d/versailles/engine.h b/engines/cryomni3d/versailles/engine.h
index e2465e64db..3b6823df96 100644
--- a/engines/cryomni3d/versailles/engine.h
+++ b/engines/cryomni3d/versailles/engine.h
@@ -452,6 +452,8 @@ private:
void obj_125();
void obj_126();
void obj_126hk(Graphics::ManagedSurface &surface);
+ void obj_129();
+ void obj_129hk(Graphics::ManagedSurface &surface);
void obj_142();
void obj_142hk(Graphics::ManagedSurface &surface);
@@ -564,6 +566,7 @@ private:
static const uint kBombPasswordMaxLength = 60;
static const uint16 kBombLettersPos[2][kBombPasswordMaxLength][2];
bool handleBomb(ZonFixedImage *fimg);
+ void handleBombTranslation(Graphics::ManagedSurface &surface);
void drawBombLetters(Graphics::ManagedSurface &surface, const Graphics::Surface(&bmpLetters)[28],
const uint bombPasswordLength,
const uint32(&bombPossibilites)[kBombPasswordMaxLength][5],
diff --git a/engines/cryomni3d/versailles/logic.cpp b/engines/cryomni3d/versailles/logic.cpp
index e2edad534a..d3d1cb1e75 100644
--- a/engines/cryomni3d/versailles/logic.cpp
+++ b/engines/cryomni3d/versailles/logic.cpp
@@ -106,7 +106,7 @@ void CryOmni3DEngine_Versailles::setupObjects() {
SET_OBJECT_CB(112, 126);
SET_OBJECT_GENERIC_CB(90, 127, 17);
SET_OBJECT(216, 128);
- SET_OBJECT_GENERIC_CB(32, 129, 18);
+ SET_OBJECT_CB(32, 129);
SET_OBJECT(37, 130); // 35
SET_OBJECT_GENERIC_CB(134, 131, 19);
SET_OBJECT_GENERIC_CB(150, 132, 20);
@@ -192,6 +192,46 @@ void CryOmni3DEngine_Versailles::obj_126hk(Graphics::ManagedSurface &surface) {
for (uint i = 0; i < 28; i++) {
bmpLetters[i].free();
}
+
+ if (_messages.size() <= 148) {
+ return;
+ }
+
+ Common::String &translation = _messages[148];
+
+ if (translation.size() == 0) {
+ return;
+ }
+
+ _fontManager.setCurrentFont(1);
+ _fontManager.setTransparentBackground(true);
+ _fontManager.setForeColor(0);
+ _fontManager.setSurface(&surface);
+ _fontManager.displayStr(9, 424, translation);
+}
+
+void CryOmni3DEngine_Versailles::obj_129() {
+ displayObject(kImagesObjects[18], &CryOmni3DEngine_Versailles::obj_129hk);
+}
+
+void CryOmni3DEngine_Versailles::obj_129hk(Graphics::ManagedSurface &surface) {
+ if (_messages.size() <= 149) {
+ return;
+ }
+
+ Common::String &translation = _messages[149];
+
+ if (translation.size() == 0) {
+ return;
+ }
+
+ surface.fillRect(Common::Rect(0, 455, 640, 480), 247);
+
+ _fontManager.setCurrentFont(8);
+ _fontManager.setTransparentBackground(true);
+ _fontManager.setForeColor(242);
+ _fontManager.setSurface(&surface);
+ _fontManager.displayStr(10, 460, translation);
}
void CryOmni3DEngine_Versailles::obj_142() {
@@ -3003,6 +3043,7 @@ bool CryOmni3DEngine_Versailles::handleBomb(ZonFixedImage *fimg) {
}
}
if (success) {
+ handleBombTranslation(tempSurf);
break;
}
}
@@ -3020,6 +3061,43 @@ bool CryOmni3DEngine_Versailles::handleBomb(ZonFixedImage *fimg) {
return success;
}
+void CryOmni3DEngine_Versailles::handleBombTranslation(Graphics::ManagedSurface &surface) {
+ if (_messages.size() <= 150) {
+ return;
+ }
+
+ Common::String &translation = _messages[150];
+
+ if (translation.size() == 0) {
+ return;
+ }
+
+ surface.fillRect(Common::Rect(0, 430, 640, 480), 247);
+
+ _fontManager.setCurrentFont(1);
+ _fontManager.setTransparentBackground(true);
+ _fontManager.setForeColor(242);
+ _fontManager.setSurface(&surface);
+ uint w = _fontManager.getStrWidth(translation);
+ _fontManager.displayStr((640 - w) / 2, 440, translation);
+
+ g_system->copyRectToScreen(surface.getPixels(), surface.pitch, 0, 0,
+ surface.w, surface.h);
+ g_system->updateScreen();
+
+ uint32 end = g_system->getMillis() + 5000;
+ bool exitImg = false;
+ while (!shouldAbort() && !exitImg && g_system->getMillis() < end) {
+ if (pollEvents()) {
+ if (checkKeysPressed() || getCurrentMouseButton() == 1) {
+ exitImg = true;
+ }
+ }
+ g_system->updateScreen();
+ g_system->delayMillis(10);
+ }
+}
+
const uint16 CryOmni3DEngine_Versailles::kBombLettersPos[2][kBombPasswordMaxLength][2] = {
{
{26, 91},
Commit: 128f1978bcdc2ba284d9eba13829d41c0bc6e55e
https://github.com/scummvm/scummvm/commit/128f1978bcdc2ba284d9eba13829d41c0bc6e55e
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Add support for Chinese version of Versailles
Changed paths:
devtools/create_cryomni3d/create_cryomni3d_dat.cpp
devtools/create_cryomni3d/create_cryomni3d_dat.h
devtools/create_cryomni3d/versailles.cpp
devtools/create_cryomni3d/versailles.h
dists/engine-data/cryomni3d.dat
engines/cryomni3d/datstream.cpp
engines/cryomni3d/detection_tables.h
engines/cryomni3d/versailles/documentation.cpp
engines/cryomni3d/versailles/engine.cpp
engines/cryomni3d/versailles/menus.cpp
diff --git a/devtools/create_cryomni3d/create_cryomni3d_dat.cpp b/devtools/create_cryomni3d/create_cryomni3d_dat.cpp
index acbec44ab9..9f9f93d26e 100644
--- a/devtools/create_cryomni3d/create_cryomni3d_dat.cpp
+++ b/devtools/create_cryomni3d/create_cryomni3d_dat.cpp
@@ -55,6 +55,7 @@ DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, DE)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, EN)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, ES)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, IT)
+DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, ZT)
static Parts gamesParts[] = {
GAME_PLATFORM_LANG_PART(Versailles, ALL, FR),
@@ -63,6 +64,7 @@ static Parts gamesParts[] = {
GAME_PLATFORM_LANG_PART(Versailles, ALL, EN),
GAME_PLATFORM_LANG_PART(Versailles, ALL, ES),
GAME_PLATFORM_LANG_PART(Versailles, ALL, IT),
+ GAME_PLATFORM_LANG_PART(Versailles, ALL, ZT),
};
#define CRYOMNI3D_DAT_VER 1 // 32-bit integer
diff --git a/devtools/create_cryomni3d/create_cryomni3d_dat.h b/devtools/create_cryomni3d/create_cryomni3d_dat.h
index f9ae6bdee1..730c0958fb 100644
--- a/devtools/create_cryomni3d/create_cryomni3d_dat.h
+++ b/devtools/create_cryomni3d/create_cryomni3d_dat.h
@@ -44,5 +44,6 @@ size_t writeGameHeader(FILE *f, uint32 gameId, uint16 version, uint16 lang, uint
#define LANG_ES MKTAG16('e', 's')
#define LANG_FR MKTAG16('f', 'r')
#define LANG_IT MKTAG16('i', 't')
+#define LANG_ZT MKTAG16('z', 't') // ZH_TWN
#endif
diff --git a/devtools/create_cryomni3d/versailles.cpp b/devtools/create_cryomni3d/versailles.cpp
index 5955268f40..94bd058c26 100644
--- a/devtools/create_cryomni3d/versailles.cpp
+++ b/devtools/create_cryomni3d/versailles.cpp
@@ -123,3 +123,4 @@ DEFINE_FUNCS(DE)
DEFINE_FUNCS(EN)
DEFINE_FUNCS(ES)
DEFINE_FUNCS(IT)
+DEFINE_FUNCS_CJK(ZT)
diff --git a/devtools/create_cryomni3d/versailles.h b/devtools/create_cryomni3d/versailles.h
index ed897a2e7c..683848e19f 100644
--- a/devtools/create_cryomni3d/versailles.h
+++ b/devtools/create_cryomni3d/versailles.h
@@ -82,6 +82,13 @@ static char const *const versaillesBRlocalizedFilenames[] = {
"credits.BR",
"LEB1_BR.WAV",
};
+static char const *const versaillesZTlocalizedFilenames[] = {
+ "DIALOG1.TW",
+ "tous_doc.TW",
+ "lien_doc.txt",
+ "credits.TW",
+ "LEB1_GB.WAV",
+};
static char const versaillesFREpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT";
static char const versaillesFREpilPwd[] = "LELOUPETLATETE";
@@ -95,6 +102,8 @@ static char const versaillesESEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT"
static char const versaillesESEpilPwd[] = "ELZORROYLAGRULLA";
static char const versaillesITEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT";
static char const versaillesITEpilPwd[] = "LEANATREEILCANE";
+static char const versaillesZTEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT";
+static char const versaillesZTEpilPwd[] = "FOXANDCRANE";
static char const versaillesFRBombPwd[] = "JEMENVAISMAISLETATDEMEURERATOUJOURS";
static char const versaillesBRBombPwd[] = "O PODER DE UM REI NAO O TORNA IMORTAL";
@@ -103,6 +112,7 @@ static char const versaillesDEBombPwd[] =
static char const versaillesENBombPwd[] = "IT IS NOT IN THE POWER OF KINGS TO ATTAIN PERFECTION";
static char const versaillesESBombPwd[] = "NO ES PODER DE REYES EL ALCANZAR LA PERFECCION";
static char const versaillesITBombPwd[] = "AI SOVRANI NON E DATO RAGGIUNGERE LA PERFEZIONE";
+static char const versaillesZTBombPwd[] = "IT IS NOT IN THE POWER OF KINGS TO ATTAIN PERFECTION";
#define VERSAILLES_MESSAGES_COUNT 146
#define VERSAILLES_MESSAGES_COUNT_CJK 151
@@ -1405,4 +1415,861 @@ static char const *const versaillesITpaintings[] = {
"\"Cristo calato dalla Croce\"\rCharles Lebrun", /* 47: 45260 */
};
+static char const *const versaillesZTmessages[] = {
+ "\xa5\xd8\xab" "e" "\xb8" "T" "\xa4\xee\xb6" "}" "\xb1\xd2\xb3" "o" ""
+ "\xae\xb0\xaa\xf9\xa1" "C", /* 0 */
+ "\xb3" "o" "\xae\xb0\xaa\xf9\xac" "O" ""
+ "\xc2\xea\xb5\xdb\xaa\xba\xa1" "C", /* 1 */
+ "\xb3" "o" "\xae\xb0\xaa\xf9\xac" "O" ""
+ "\xc2\xea\xb5\xdb\xaa\xba\xa1" "C", /* 2 */
+ "\xb3" "o" "\xad\xd3\xc2" "d" "\xa4" "l" "\xac" "O" ""
+ "\xaa\xc5\xaa\xba\xa1" "C", /* 3 */
+ "\xa7" "A" "\xb5" "L" "\xaa" "k" ""
+ "\xb1\xb5\xc4\xb2\xa8\xec\xa8\xba\xad\xd3\xbb\\\xa4" "l" "\xa1" "C", /* 4 */
+ "\xb3" "o" "\xb4\xca\xbe\xef\xa4" "l" "\xbe\xf0\xa4" "W" "\xa8" "S" ""
+ "\xa6\xb3\xaa" "F" "\xa6\xe8\xa1" "C", /* 5 */
+ "\xb3" "o" "\xa4\xa3\xac" "O" "\xbe\xef\xa4" "l" "\xbe\xf0\xa1" "I", /* 6 */
+ "\xa4\xd3\xb7" "t" "\xa4" "F" "\xa1" "C", /* 7 */
+ "\xb3" "o" "\xad\xd3\xa4" "p" "\xbd" "c" "\xa4" "l" "\xa4" "W" ""
+ "\xc2\xea\xa4" "F" "\xa1" "C", /* 8 */
+ "\xa7" "A" "\xa5" "i" "\xa5" "H" "\xa5\xb4\xb6" "}" ""
+ "\xa8\xba\xae\xb0\xaa\xf9\xa1" "C", /* 9 */
+ "\xa7" "A" "\xbb\xdd\xad" "n" "\xa4" "@" "\xa8\xc7\xaa" "F" ""
+ "\xa6\xe8\xa1" "A" "\xa4" "~" ""
+ "\xaf\xe0\xb1\xb5\xc4\xb2\xa8\xec\xac\xb5\xbc" "u" "\xa1" "C", /* 10 */
+ "\xb3" "o" "\xad\xd3\xaa\xe1\xb2" "~" "\xac" "O" ""
+ "\xaa\xc5\xaa\xba\xa1" "C", /* 11 */
+ "\xb2" "{" "\xa6" "b" "\xa7" "A" "\xa5" "i" "\xa5" "H" "\xb8" "g" ""
+ "\xb9" "L" "\xa4" "F" "\xa1" "C", /* 12 */
+ "\xa7" "A" "\xa8" "S" "\xa6\xb3\xae\xc9\xb6\xa1\xa4" "F" ""
+ "\xb8\xd1\xae" "c" "\xa7\xca\xa1" "I", /* 13 */
+ "\xad" "n" "\xac\xdd\xb9\xcf\xb5" "e" "\xa1" "A" "\xb2" "{" "\xa6" ""
+ "b" "\xa4" "]" "\xa4\xd3\xb1\xdf\xa4" "F" "\xa1" "C", /* 14 */
+ "\xb5\xa5\xa4" "@" "\xa4" "U" "\xa1" "I" "\xa7\xe2\xa7" "A" ""
+ "\xaa\xba\xbd" "u" "\xaf\xc1\xa5\xe6\xb5\xb9\xaa\xf9\xa9\xd0\xa1" ""
+ "C", /* 15 */
+ "\xa7" "A" "\xb7" "p" "\xa4\xa3\xa8\xec\xa8\xba\xb1" "i" ""
+ "\xaf\xc8\xa1" "C", /* 16 */
+ "\xa9\xb9\xc3\xc4\xbe\xaf\xae" "v" "\xb3" "B" "\xa1" "C", /* 17 */
+ "\xc4\xb5\xa7" "i" "\xa1" "G" "\xa7" "A" "\xa5" "i" "\xa5" "H" ""
+ "\xab" "e" "\xa9\xb9\xa6\xb9\xbc" "h" ""
+ "\xaa\xba\xb5\xb2\xa7\xf4\xa6" "a" "\xc2" "I" "\xa1" "A" ""
+ "\xa6\xfd\xac" "O" "\xa7" "A" "\xa9" "|" ""
+ "\xa5\xbc\xa7\xb9\xa6\xa8\xa5" "i" "\xa5" "H" "\xc4" "~" ""
+ "\xc4\xf2\xb6" "i" "\xa6\xe6\xb9" "C" ""
+ "\xc0\xb8\xa9\xd2\xbb\xdd\xaa\xba\xa4" "@" ""
+ "\xa4\xc1\xa6\xe6\xb0\xca\xa1" "C" "\xab\xd8\xc4\xb3\xa7" "A" ""
+ "\xb2" "{" "\xa6" "b" "\xb4" "N" "\xc0" "x" "\xa6" "s" "\xb9" "C" ""
+ "\xc0\xb8\xb6" "i" "\xab\xd7\xa1" "C", /* 18 */
+ "\xc4\xb5\xa7" "i" "\xa1" "G" "\xa7" "A" "\xa5" "i" "\xa5" "H" ""
+ "\xab" "e" "\xa9\xb9\xa6\xb9\xbc" "h" ""
+ "\xaa\xba\xb5\xb2\xa7\xf4\xa6" "a" "\xc2" "I" "\xa1" "A" ""
+ "\xa6\xfd\xac" "O" "\xa7" "A" "\xa6\xb3\xa5" "i" "\xaf\xe0\xa9" "|" ""
+ "\xa5\xbc\xa7\xb9\xa6\xa8\xa5" "i" "\xa5" "H" "\xc4" "~" ""
+ "\xc4\xf2\xb6" "i" "\xa6\xe6\xb9" "C" ""
+ "\xc0\xb8\xa9\xd2\xbb\xdd\xaa\xba\xa4" "@" ""
+ "\xa4\xc1\xa6\xe6\xb0\xca\xa1" "C" "\xab\xd8\xc4\xb3\xa7" "A" ""
+ "\xb2" "{" "\xa6" "b" "\xb4" "N" "\xc0" "x" "\xa6" "s" "\xb9" "C" ""
+ "\xc0\xb8\xb6" "i" "\xab\xd7\xa1" "C", /* 19 */
+ "\xa7" "A" "\xa4\xa3\xaf\xe0\xb1" "a" "\xb5\xdb\xa4" "@" "\xae" "y" ""
+ "\xbc\xd3\xb1\xe8\xa8\xec\xb3" "B" "\xb6" "]" "\xa1" "I", /* 20 */
+ "\xb3" "o" "\xb8\xcc\xa8" "S" "\xa6\xb3\xa7" "O" "\xaa\xba\xaa" "F" ""
+ "\xa6\xe8\xa1" "C", /* 21 */
+ "\xa6" "A" "\xa8\xa3\xa1" "I", /* 22 */
+ "\xa4" "Z" "\xba\xb8\xc1\xc9\xa1\xd0\xae" "c" ""
+ "\xa7\xca\xba\xc3\xb6\xb3", /* 23 */
+ "\xb8\xf4\xa9\xf6\xa4" "Q" "\xa5" "|" "\xae" "c" ""
+ "\xa7\xca\xaa\xba\xb3\xb1\xbf\xd1", /* 24 */
+ "\xb0\xd1\xbe\\\xa4\xe5\xa5\xf3\xb0\xcf", /* 25 */
+ " " "\xc4" "~" "\xc4\xf2\xa5\xbb\xa6\xb8\xb9" "C" ""
+ "\xc0\xb8", /* 26 */
+ " " "\xb6" "}" "\xa9" "l" "\xb7" "s" "\xb9" "C" ""
+ "\xc0\xb8", /* 27 */
+ " " "\xb8\xfc\xa4" "J" "\xb9" "C" "\xc0\xb8\xb6" "i" ""
+ "\xab\xd7", /* 28 */
+ " " "\xc0" "x" "\xa6" "s" "\xa5\xbb\xa6\xb8\xb9" "C" ""
+ "\xc0\xb8", /* 29 */
+ " " "\xc5\xe3\xa5\xdc\xa6" "r" "\xb9\xf5\xa1" "G" "\xb6" ""
+ "}" "\xb1\xd2", /* 30 */
+ " " "\xc5\xe3\xa5\xdc\xa6" "r" "\xb9\xf5\xa1" "G" ""
+ "\xc3\xf6\xb3\xac", /* 31 */
+ " " "\xad\xb5\xbc\xd6\xa1" "G" "\xb6" "}" "\xb1\xd2", /* 32 */
+ " " "\xad\xb5\xbc\xd6\xa1" "G" "\xc3\xf6\xb3\xac", /* 33 */
+ " " "\xb1" "N" "\xa4" "@" ""
+ "\xad\xba\xad\xb5\xbc\xd6\xbd\xc6\xbb" "s" "\xa6\xdc\xb5" "w" ""
+ "\xba\xd0" "(20 Mb)", /* 34 */
+ " " "\xb1" "N" ""
+ "\xa9\xd2\xa6\xb3\xad\xb5\xbc\xd6\xbd\xc6\xbb" "s" "\xa6\xdc\xb5" ""
+ "w" "\xba\xd0" "(92 Mb)", /* 35 */
+ " " "\xa4\xa3\xb1" "N" "\xad\xb5\xbc\xd6\xbd\xc6\xbb" "s" ""
+ "\xa6\xdc\xb5" "w" "\xba\xd0" "(" "\xb1" "qCD" "\xbc\xbd\xa9\xf1" ""
+ ")", /* 36 */
+ nullptr, /* 37 */
+ nullptr, /* 38 */
+ "\xad\xb5\xb6" "q", /* 39 */
+ "\xc2\xf7\xb6" "}" "\xb9" "C" "\xc0\xb8", /* 40 */
+ "", /* 41 */
+ "\xb0\xd1\xc6" "[" "\xab\xb0\xb3\xf9", /* 42 */
+ "\xbb" "s" "\xa7" "@" "\xb8" "s", /* 43 */
+ " " "\xc4" "~" "\xc4\xf2\xa5\xbb\xa6\xb8\xb0\xd1\xb3" "X", /* 44 */
+ " " "\xc0" "x" "\xa6" "s" "\xa5\xbb\xa6\xb8\xb0\xd1\xb3" ""
+ "X", /* 45 */
+ " " "\xb8\xfc\xa4" "J" "\xb0\xd1\xb3" "X" "\xb6" "i" ""
+ "\xab\xd7", /* 46 */
+ nullptr, /* 47 */
+ " Omni3D" "\xa1" "G" "\xbc\xd0\xb7\xc7", /* 48 */
+ " Omni3D" "\xa1" "G" "\xba" "C" "\xb3" "t", /* 49 */
+ " Omni3D" "\xa1" "G" "\xb7\xa5\xba" "C" "\xb3" "t", /* 50 */
+ " Omni3D" "\xa1" "G" "\xa7\xd6\xb3" "t", /* 51 */
+ " Omni3D" "\xa1" "G" "\xb7\xa5\xa7\xd6\xb3" "t", /* 52 */
+ "\xbd" "T" "\xa9" "w", /* 53 */
+ "\xa8\xfa\xae\xf8", /* 54 */
+ "\xaa\xc5\xa5\xd5\xc4\xe6\xa6\xec", /* 55 */
+ "\xb5" "L" "\xc0\xc9\xa6" "W", /* 56 */
+ "\xc4\xb5\xa7" "i" "\xa1" "G" ""
+ "\xb7\xc7\xb3\xc6\xa9\xf1\xb1\xf3\xb3" "o" "\xad\xd3\xb9" "C" ""
+ "\xc0\xb8\xa1" "C", /* 57 */
+ "\xaa\xf0\xa6" "^", /* 58 */
+ "\xab\xb0\xb3\xf9", /* 59 */
+ "\xa6" "^" "\xa5" "D" "\xbf\xef\xb3\xe6", /* 60 */
+ "\xa4\xe5\xa5\xf3\xb0\xcf\xba" "K" "\xad" "n", /* 61 */
+ "\xab\xb0\xb3\xf9\xa4\xce\xaa\xe1\xb6\xe9\xa6" "a" "\xb9\xcf", /* 62 */
+ "\xab\xb0\xb3\xf9\xa4\xba\xb3\xa1\xb5\xb2\xba" "c" "\xb9\xcf", /* 63 */
+ "\xb5" "L" "\xaa" "k" "\xbc" "g" "\xa4" "J" "\xb5" "w" ""
+ "\xba\xd0\xa1" "G" "\xb5" "w" "\xba\xd0\xa4" "w" "\xba\xa1", /* 64 */
+ nullptr, /* 65 */
+ "\xa9\xf1\xa4" "J" "\xa5\xfa\xba\xd0\xa4\xf9", /* 66 */
+ "\xa9\xf1\xa4" "J" "\xb2\xc4" "%d" "\xb1" "i" ""
+ "\xa5\xfa\xba\xd0\xa4\xf9\xa8\xc3\xab\xf6\xa5\xf4\xa4" "@" ""
+ "\xc1\xe4", /* 67 */
+ "\xc3\xc0\xb3" "N", /* 68 */
+ "\xb0\xf5\xac" "F" "\xaa\xcc", /* 69 */
+ "\xae" "c" "\xa7\xca\xa4" "H" "\xad\xfb", /* 70 */
+ "\xab\xb0\xb3\xf9\xa4\xa4\xaa\xba\xa5\xcd\xac\xa1", /* 71 */
+ "\xab\xb0\xb3\xf9\xa4\xce\xaa\xe1\xb6\xe9", /* 72 */
+ "\xac\xf6\xa8\xc6\xaa\xed", /* 73 */
+ "\xaa\xfc\xaa" "i" "\xc3\xb9\xbc" "Q" "\xac" "u", /* 74 */
+ "\xab\xb0\xb3\xf9", /* 75 */
+ "\xac" "W" "\xb4" "Y", /* 76 */
+ "\xb0" "g" "\xae" "c", /* 77 */
+ "\xa9\xd4\xc5" "M" "\xae" "R" "\xbc" "Q" "\xac" "u", /* 78 */
+ "\xbe\xef\xa4" "l" "\xb7\xc5\xab\xc7", /* 79 */
+ "\xa4\xf4\xa6\xc0\xb0\xcf", /* 80 */
+ "\xba\xf1\xbd\xae\xa4" "j" "\xb9" "D", /* 81 */
+ "\xa4" "j" "\xb0\xa8\xb4\\", /* 82 */
+ "\xa4" "p" "\xb0\xa8\xb4\\", /* 83 */
+ "\xaa\xe1\xb6\xe9", /* 84 */
+ "\xab" "e" "\xae" "x", /* 85 */
+ "\xa4" "j" "\xb9" "B" "\xaa" "e", /* 86 */
+ "\xab" "n" "\xaf\xf3\xa9" "W", /* 87 */
+ "\xa5" "_" "\xaf\xf3\xa9" "W", /* 88 */
+ "\xb0\xea\xa4\xfd\xaa\xba\xb5\xe6\xb6\xe9", /* 89 */
+ "\xbb" "R" "\xc6" "U", /* 90 */
+ "\xae\xfc\xac" "v" "\xa4\xa7\xac" "u", /* 91 */
+ "\xa6" "u" "\xbd\xc3\xa4\xa7\xb4\xf2", /* 92 */
+ "\xc0" "@" "\xa4" "l", /* 93 */
+ "\xb0\xc5\xa4" "M", /* 94 */
+ "\xaf\xc8", /* 95 */
+ "\xc3\xf6\xa9\xf3\xc3\xc0\xb3" "N" "\xaa\xba\xa4" "p" "\xa5" "U" ""
+ "\xa4" "l", /* 96 */
+ "\xa4" "p" "\xc6" "_" "\xb0\xcd" "1", /* 97 */
+ "\xa7\xef\xc5\xdc\xb9" "L" "\xaa\xba\xaf\xc8", /* 98 */
+ "\xa7\xcb\xc5\xbc\xaa\xba\xaf\xc8", /* 99 */
+ "\xb1" "q" "\xa4" "p" "\xbd" "c" "\xa4" "l" ""
+ "\xb8\xcc\xae\xb3\xa8\xec\xaa\xba\xaf\xc8", /* 100 */
+ "\xc3\xf6\xa9\xf3\xac\xd3\xab\xc7\xa6\xe5\xb2\xce\xaa\xba\xa4" "p" ""
+ "\xa5" "U" "\xa4" "l", /* 101 */
+ "\xc2" "I" "\xbf" "U" "\xaa\xba\xc4\xfa\xc0\xeb", /* 102 */
+ "\xc4\xfa\xc0\xeb", /* 103 */
+ "\xc6" "_" "\xb0\xcd" " ", /* 104 */
+ "\xaf\xf3\xb9\xcf\xa7\xa8", /* 105 */
+ "\xaf\xf3\xb9\xcf\xa7\xa8", /* 106 */
+ "\xb0\xb2\xaf\xf3\xb9\xcf", /* 107 */
+ "\xbc\xd3\xb1\xe8", /* 108 */
+ "\xb3" "Q" "\xaf" "}" "\xc3" "a" "\xaa\xba\xaf\xf3\xb9\xcf", /* 109 */
+ "\xa8\xea\xa4" "l", /* 110 */
+ "\xaa\xf7\xa6\xe2\xaa\xba\xa8\xea\xa4" "l", /* 111 */
+ "\xac\xf5\xa6\xe2\xaa\xba\xa8\xea\xa4" "l", /* 112 */
+ "\xac\xb4\xb5\xa7", /* 113 */
+ "\xaf\xc8", /* 114 */
+ "\xc3\xf6\xa9\xf3\xab\xd8\xbf" "v" "\xaa\xba\xa4" "p" "\xa5" "U" ""
+ "\xa4" "l", /* 115 */
+ "\xa4" "p" "\xc6" "_" "\xb0\xcd" "2", /* 116 */
+ "Archer(useless!)", /* 117 */
+ "\xbc\xd6\xc3\xd0", /* 118 */
+ "\xbc\xb2\xb2" "y" "\xb1\xec", /* 119 */
+ "\xb3\\\xa5" "i" "\xb5\xfd\xa9\xfa", /* 120 */
+ "\xbe\xb1\xb3\xb9\xaa\xba\xa6" "A" "\xbb" "s" "\xab" "~", /* 121 */
+ "\xa9\xf1\xbe\xb1\xb3\xb9\xaa\xba\xc3" "o" "\xc2" "d", /* 122 */
+ "\xb3" "q" "\xa9\xb9\xaa\xfc\xaa" "i" "\xc3\xb9\xa4" "p" ""
+ "\xaa\xf9\xaa\xba\xc6" "_" "\xb0\xcd", /* 123 */
+ "\xad\xb9\xaa\xab", /* 124 */
+ "\xc3\xf6\xa9\xf3\xa9" "v" "\xb1\xd0\xaa\xba\xa4" "p" "\xa5" "U" ""
+ "\xa4" "l", /* 125 */
+ "\xb8" "O" "\xa4\xe5", /* 126 */
+ "\xc3\xf6\xa9\xf3\xac" "F" "\xa9\xb2\xaa\xba\xa4" "p" "\xa5" "U" ""
+ "\xa4" "l", /* 127 */
+ "\xc3" "Z" "\xa4\xf2\xb5\xa7", /* 128 */
+ "\xb3\xc6\xa7\xd1\xbf\xfd", /* 129 */
+ "\xb1\xe6\xbb\xb7\xc3\xe8", /* 130 */
+ "\xa8" "U" "\xa8\xb9\xb3" "]" "\xad" "p" "\xb9\xcf", /* 131 */
+ "\xa8" "U" "\xa8\xb9\xb3" "]" "\xad" "p" "\xb9\xcf", /* 132 */
+ "\xc3\xb7\xaf\xc1", /* 133 */
+ "\xc0" "J" "\xaa\xa9", /* 134 */
+ "\xa4" "p" "\xc6" "_" "\xb0\xcd" "3", /* 135 */
+ "\xa4" "p" "\xc6" "_" "\xb0\xcd" "4", /* 136 */
+ "\xab" "K" "\xba\xe0", /* 137 */
+ "\xab\xb0\xb3\xf9\xb3" "]" "\xad" "p" "\xb9\xcf", /* 138 */
+ "\xab\xb0\xb3\xf9\xb3" "]" "\xad" "p" "\xb9\xcf", /* 139 */
+ "\xbb\xd5\xbc\xd3\xaa\xba\xc6" "_" "\xb0\xcd", /* 140 */
+ "\xb4" "J" "\xa8\xa5", /* 141 */
+ "\xb0" "g" "\xae" "c" "\xb3" "]" "\xad" "p" "\xb9\xcf", /* 142 */
+ "\xa4" "u" "\xa8\xe3", /* 143 */
+ "\xc3\xc4", /* 144 */
+ "\xba\xb6\xb7\xc0\xc4\xfa\xc0\xeb\xaa\xba\xb0\xc5\xa4" "l", /* 145 */
+ "Act %d", /* 146 */
+ "Visit", /* 147 */
+ /* These ones are not in messages but it's simpler */
+ nullptr, /* 148/Epigraph */
+ nullptr, /* 149/Memo */
+ nullptr, /* 150/Bomb */
+};
+
+static char const *const versaillesZTpaintings[] = {
+ "\"The Animals entering the Ark\"\rGerolamo Bassano", /* 0: 41201 */
+ "\"The Supper at Emmaus\"\rJacopo Bassano", /* 1: 41202 */
+ "\"Mary Magdalen at the feet of the Christ", /* 2: 41203 */
+ "\"Leaving the Ark\"\rGerolamo Bassano", /* 3: 41204 */
+ "\"Striking the Rock\"\rJacopo Bassano", /* 4: 41205 */
+ "\"The Battle of Arbelles\"\rJoseph Parrocel", /* 5: 41301 */
+ "\"Alexander the Great, Vanquisher of Darisu at the battle of "
+ "Arbelles\"\rLe Bourguignon", /* 6: 41302 */
+ "\"The Combat of Leuze\"\rJoseph Parrocel", /* 7: 42401 */
+ "\"Saint Cecilia with an angel holding musical notation\"\rIl "
+ "Domenichino", /* 8: 42901 */
+ "\"Don Francisco of Moncada\"\rVan Dyck", /* 9: 42902 */
+ "\"The young John the Baptist\"\rCarracci", /* 10: 42903 */
+ "\"Saint Matthew\"\rValentin", /* 11: 42904 */
+ "\"Render unto Caesar\"\rValentin", /* 12: 42905 */
+ "\"Saint Luke\"\rValentin", /* 13: 42906 */
+ "\"The Mystical Marriage of Saint Catherine\"\r Alessandro Turchi", /* 14: 42907 */
+ "\"The Meeting of the Drinkers\"\rNicolas Tournier", /* 15: 42908 */
+ "\"The Fortune-teller\"\rValentin", /* 16: 42909 */
+ "\"King David playing the Harp\"\rIl Domenichino", /* 17: 42910 */
+ "\"Mary Magdalen\"\rIl Domenichino", /* 18: 42911 */
+ "\"Self-portrait\"\rVan Dyck", /* 19: 42912 */
+ "\"Saint John the Evangelist\"\r Valentin", /* 20: 42913 */
+ "\"Hagar being helped by an angel\"\rGiovanni Lanfranco", /* 21: 42914 */
+ "\"Saint Mark\"\rValentin", /* 22: 42915 */
+ "\"Meleager with the head of the boar of Calydon at his "
+ "feet\"\rJacques Rousseau", /* 23: 43090 */ /* BUG: Switched */
+ "\"The King in Roman dress\"\rJean Warin", /* 24: 43091 */
+ "\"Atalanta\"\rJacques Rousseau", /* 25: 43092 */
+ "\"Aeneas carrying Anchises\"\rSpada", /* 26: 43100 */
+ "\"David and Bethsheba\"\rVeronese", /* 27: 43101 */
+ "\"The Flight into Egypt\"\rGuido Reni", /* 28: 43102 */
+ "\"Louis XIV on horseback\"\rPierre Mignard", /* 29: 43103 */
+ "\"Royal Magnificence and the Progress of the Beaux "
+ "Arts\"\rHouasse", /* 30: 43104 */
+ "\"The Sacrifice of Iphigeneia\"\rCharles de La Fosse", /* 31: 43130 */
+ "\"Bust of Louis XIV\"\rsculpted by Bernini", /* 32: 43131 */
+ "\"Diana discovers Endymion in the arms of Morpheus\"\rGabriel "
+ "Blanchard", /* 33: 43132 */
+ "\"Saint Peter and the Virgin Mary\"\rIl Guercino", /* 34: 43140 */
+ "\"The Disciples at Emmaus\"\rVeronese", /* 35: 43141 */
+ "\"The Holy Family\"\rVeronese", /* 36: 43142 */
+ "\"Darius' family at the feet of Alexander\"\rCharles LeBrun", /* 37: 43143 */
+ "\"Saint John the Baptist\"\rRaphael", /* 38: 43144 */
+ "\"Marie de Medici\"\rVan Dyck", /* 39: 43150 */
+ "\"Hercules struggling with Achelous\"\rGuido Reni", /* 40: 43151 */
+ "\"The Centaur Nessus carrying away Deianeira\"\rGuido Reni", /* 41: 43152 */
+ "\"Saint Francis of Assissi comforted after receiving the "
+ "stigmata\"\rSeghers", /* 42: 43153 */
+ "\"Thomiris plunging Cyrus' head in blood\"\rRubens", /* 43: 43154 */
+ "\"Hercules Slaying the Hydra\"\rGuido Reni", /* 44: 43155 */
+ "\"Hercules in flames \"\rGuido Reni", /* 45: 43156 */
+ "\"Portrait of the Prince Palatine & his brother Prince "
+ "Robert\"\rVan Dyck", /* 46: 43157 */
+ "\"Christ being taken down from the cross\"\rCharles Lebrun", /* 47: 45260 */
+};
+
+static const Subtitle versaillesZTsubtitles[] = {
+ {
+ "a0_vf.hns", {
+ {
+ 75, "\xa4" "Z" "\xba\xb8\xc1\xc9\xab\xb0\xb3\xf9\xa1" "@" "\xb4" "N" ""
+ "\xb9\xb3\xa8\xc8\xa8\xaf\xae" "c" "\xb7\xb5\xa1" "@" "\xb1" "N" ""
+ "\xa6" "b" "\xae" "L" "\xa6\xdc\xae\xc9\xa1" "@" "\xb2" "l" ""
+ "\xa4\xf5\xa8" "R" "\xa4\xd1\xa1" "@" "\xa6" "i" ""
+ "\xac\xb0\xa5\xad\xa6" "a"
+ },
+ {180, ""},
+ {
+ 210, "\xb0\xea\xa4\xfd\xbb" "{" "\xac\xb0\xb3" "o" "\xac" "O" "\xa4" "@" ""
+ "\xad\xd3\xba\xc6\xa4" "l" "\xaa\xba\xa4\xdb\xb7" "Q" "\xa1" "A" ""
+ "\xa9" "_" "\xab\xe4\xb2\xa7\xb7" "Q" "\xaa\xba\xb5\xb2\xaa" "G" ""
+ "\x85" "."
+ },
+ {
+ 260, "\xb0\xa3\xab" "D" "\xa8\xb9\xa5\xd0\xa5\xce\xba\xc9\xa5" "L" ""
+ "\xa9\xd2\xa6\xb3\xaa\xba\xa4" "O" "\xb6" "q" "\xa1" "@" "\xa7" "_" ""
+ "\xab" "h" "\xb3\xa3\xb1" "N" "\xc2" "k" ""
+ "\xa9\xf3\xb5\xea\xaa\xc5\xa1" "@" "\xa6" "]" ""
+ "\xac\xb0\xae\xc9\xb6\xa1\xa5\xbf\xa6" "b" "\xac" "y" "\xb3" "u" ""
+ "\xa1" "@" "\xa7\xda\xa6" "V" "\xa6" "p" "\xac" "P" ""
+ "\xaf\xeb\xb0\xaa\xb6\xc6\xaa\xba\xb0\xea\xa4\xfd\xac" "D" ""
+ "\xbe\xd4\xa1" "@" "\xa5\xce\xb3\xf2\xc2\xb6\xa6" "b" "\xa5" "L" ""
+ "\xb6" "g" "\xb3\xf2\xaa\xba\xb2\xb3\xac" "P" "\xa1" "@" ""
+ "\xa7\xe4\xa5" "X" "\xc1\xbc\xc3" "D" "\xa9" "M" "\xad" "p" ""
+ "\xb9\xba\xa1" "@" "\xa6\xb3\xbc\xd0\xc3" "D" "\xa1" "A" ""
+ "\xa6\xb3\xc0" "Y" "\xba\xfc\xa1" "@" ""
+ "\xc1\xd9\xa6\xb3\xa5\xec\xaf\xc1\xaa\xba\xb4" "J" "\xa8\xa5\xa1" ""
+ "@" "\xa5\xad\xae\xa7\xa7\xda\xbf" "U" "\xbf" "N" "\xaa\xba\xaf" ""
+ "O" "\xa6" "L" "\xa1" "C" "\xa6\xb6\xa4\xf1\xaf" "S" "\xa9" "M" ""
+ "\xb3\xb1\xbf\xd1\xa1" "C"
+ },
+ {
+ 450, "\xb3" "o" "\xaa" "F" "\xa6\xe8\xc5\xaa\xb0" "_" ""
+ "\xa8\xd3\xb9\xb3\xac" "O" "\xba\xc6\xa4" "l" "\xaa\xba\xad" "J" ""
+ "\xa8\xa5\xb6\xc3\xbb" "y" "\xa1" "I" "\xb2" "{" "\xa6" "b" ""
+ "\xa7\xda\xa5\xb2\xb6\xb7\xaa" "A" "\xa8\xcd\xb0\xea\xa4\xfd\xa1" ""
+ "A" "\xa9\xd2\xa5" "H" "\xa7\xda\xb5" "L" "\xaa" "k" "\xb3" "B" ""
+ "\xb2" "z" "\xb3" "o" "\xa5\xf3\xa8\xc6\xa1" "C" ""
+ "\xa9\xd4\xb6\xa9\xbc" "w" "\xa1" "A" "\xa7\xda\xad" "n" "\xa7" "A" ""
+ "\xad" "t" "\xb3" "d" "\xbd\xd5\xac" "d" "\xb3" "o" ""
+ "\xa5\xf3\xa8\xc6\xb1\xa1\xa1" "C" "\xa8\xad\xac\xb0\xb9\xec\xae" ""
+ "c" "\xaa\xba\xa8\xcd\xaa\xcc\xa1" "A" "\xa7" "A" "\xa5" "i" "\xa5" ""
+ "H" "\xa6\xdb\xa5\xd1\xa6" "a" "\xa6" "b" "\xae" "c" ""
+ "\xa4\xa4\xa8\xab\xb0\xca\xa1" "C"
+ },
+ {
+ 536, "\xa7" "A" "\xa4" "F" "\xb8\xd1\xab\xb0\xb3\xf9\xa1" "A" "\xbb" "{" ""
+ "\xc3\xd1\xb8\xcc\xad\xb1\xaa\xba\xa4" "H" "\xa9" "M" ""
+ "\xa5\xa6\xaa\xba\xc2\xa7\xb8" "`" "\xa1" "C" "\xa6" "b" ""
+ "\xbd\xd5\xac" "d" "\xae\xc9\xa5\xb2\xb6\xb7\xa4\xa3\xc2" "_" ""
+ "\xa6" "a" "\xb0\xdd\xb0\xdd\xc3" "D" "\xa1" "A" "\xa8\xc3\xa6" "b" ""
+ "\xa7\xe4\xa8\xec\xa5\xf4\xa6\xf3\xa5" "i" ""
+ "\xba\xc3\xaa\xba\xa8\xc6\xb1\xa1\xae\xc9\xa6" "V" ""
+ "\xa7\xda\xb3\xf8\xa7" "i" "\xa1" "C"
+ },
+ {
+ 622, "\xa6\xfd\xac" "O" "\xad" "n" "\xa4" "p" "\xa4\xdf\xa1" "I" ""
+ "\xa4\xa3\xad" "n" "\xb4\xb2\xa7" "G" "\xc1\xc1\xa8\xa5\xa1" "A" ""
+ "\xbb\xa1\xa6\xb3\xad\xd3\xba\xc6\xa4" "l" "\xa6" "b" ""
+ "\xab\xc2\xaf\xd9\xb0\xea\xa4\xfd\xa1" "I" "\xa5" "B" "\xa7" "A" ""
+ "\xb0\xca\xa7" "@" "\xad" "n" "\xa7\xd6\xa1" "A" "\xa6" "]" ""
+ "\xac\xb0\xa7" "A" "\xa5" "u" "\xa6\xb3\xa4" "@" ""
+ "\xa4\xd1\xaa\xba\xae\xc9\xb6\xa1" "...."
+ },
+ {690, "\xa4" "K" "\xc2" "I" "\xa5" "b" "\xa1" "C"},
+ }
+ }, /* a0_vf.hns */
+ {
+ "a1_vf.hns", {
+ {
+ 150, "\xa4" "Z" "\xba\xb8\xc1\xc9\xa1\xd0\xae" "c" ""
+ "\xa7\xca\xba\xc3\xb6\xb3"
+ },
+ {225, ""},
+ {
+ 358, "\xb0\xa1\xa4" "U" "\xa1" "A" "\xae\xc9\xb6\xa1\xa8\xec\xa4" "F" ""
+ "\xa1" "C"
+ },
+ {
+ 388, "\xb7\xed\xb0\xea\xa4\xfd\xbf\xf4\xa8\xd3\xae\xc9\xa1" "A" ""
+ "\xad\xba\xae" "u" "\xc2\xe5\xa5\xcd\xb9" "F" "\xa5" "i" ""
+ "\xa9\xf8\xc0\xcb\xac" "d" "\xa5" "L" "\xaa\xba\xb0\xb7\xb1" "d" ""
+ "\xa1" "C"
+ },
+ {
+ 440, "\xb0\xa1\xa4" "U" "\xba\xce\xb1" "o" "\xa5" "i" "\xa6" "n" "\xa1" ""
+ "H" "\xb7" "|" "\xc4\xb1\xb1" "o" "\xa4\xd3\xbc\xf6\xb6\xdc\xa1" ""
+ "H" "\xc1\xd9\xac" "O" "\xad" "n" "\xa6" "A" "\xab\xf6\xbc\xaf\xa4" ""
+ "@" "\xa4" "U" "\xa1" "H"
+ },
+ {500, "\xc1\xc2\xc1\xc2\xa1" "A" "\xb9" "F" "\xa5" "i" "\xa9\xf8\xa1" "C"},
+ {
+ 510, "\xb9" "L" "\xa5" "h" "\xa8\xe2\xad\xd3\xa4\xeb\xa5" "H" ""
+ "\xa8\xd3\xa1" "A" "\xb0\xa1\xa4" "U" "\xaa\xba\xb0\xb7\xb1" "d" ""
+ "\xb1\xa1\xa7\xce\xb3\xa3\xab\xdc\xa8" "}" "\xa6" "n" "\xa1" "C"
+ },
+ {550, ""},
+ {
+ 580, "\xb7\xed\xa8\xb9\xa5\xd0\xb2" "M" "\xac" "~" ""
+ "\xb0\xea\xa4\xfd\xaa\xba\xa4\xe2\xae\xc9\xa1" "A" ""
+ "\xac\xd3\xb1\xda\xaa\xba\xa4" "H" "\xa4" "@" "\xa6" "p" ""
+ "\xa9\xb9\xb1" "`" "\xaa\xba\xa6" "b" "\xa8" "C" ""
+ "\xa4\xd1\xa6\xad\xb1\xe1\xa9\xe8\xb9" "F" "\xa6\xb9\xa6" "a" ""
+ "\xa1" "C" "\xac\xd3\xa4\xd3\xa4" "l" "\xa1" "A" ""
+ "\xb0\xea\xa4\xfd\xaa\xba\xa5" "S" "\xa7\xcc\xa1" "A" "\xa5" "H" ""
+ "\xa4\xce\xbd" "q" "\xa6" "]" "\xa4\xbd\xc0\xef\xa1" "A" ""
+ "\xb3\xa3\xab" "e" "\xa8\xd3\xa5\xd8\xb8" "@" ""
+ "\xb0\xea\xa4\xfd\xb0" "_" "\xa8\xad\xa1" "C"
+ },
+ {713, ""},
+ {
+ 750, "\xb6\xe2\xa1" "I" "\xab\xc4\xa4" "l" "\xa1" "A" "\xa7" "A" ""
+ "\xa4\xb5\xa4\xd1\xa6\xad\xa4" "W" "\xad" "n" ""
+ "\xa4\xb0\xbb\xf2\xae\xc9\xad\xd4\xa5" "X" "\xb5" "o" "\xa5" "h" ""
+ "\xc2" "y" "\xaf" "T" "\xa9" "O" "\xa1" "H"
+ },
+ {795, ""},
+ }
+ }, /* a1_vf.hns */
+ {
+ "a2_vf.hns", {
+ {
+ 60, "\xa4\xa3\xa1" "A" "\xac\xd3\xa5" "S" "\xa1" "C" "\xa7" "A" ""
+ "\xaa\xba\xb2\xca\xb3\xa5\xa4\xe8\xaa" "k" ""
+ "\xa4\xa3\xaf\xe0\xab\xec\xb4" "_" "\xb0\xea\xa4\xba\xaa\xba\xa9" ""
+ "M" "\xa5\xad\xa1" "C"
+ },
+ {
+ 74, "\xb7\xed\xb5" "M" "\xa1" "A" "\xb0\xea\xa4\xfd\xa4" "w" "\xb8" "g" ""
+ "\xb4\xa3\xa8\xec\xad" "n" ""
+ "\xac\xa3\xbb\xba\xa7\xf9\xa9\xd4\xb4\xb5\xa5\xfd\xa5\xcd\xab" "e" ""
+ "\xa5" "h" "\xa8\xa3\xa9\xd4\xa5\xb1\xb4\xb5\xa4\xbd\xc0\xef"
+ },
+ {
+ 130, "\xa7\xda\xb8\xf2\xa7" "A" "\xab" "O" "\xb5\xfd\xa1" "A" "\xa5" "L" ""
+ "\xb5" "L" "\xaa" "k" ""
+ "\xa8\xa3\xa8\xec\xa9\xd4\xa5\xb1\xb4\xb5\xa4\xbd\xc0\xef\xa1" "C"
+ },
+ {160, ""},
+ {
+ 200, "\xb0\xea\xa4\xfd\xb0" "_" "\xa7\xc9\xbf" "d" "\xac" "~" ""
+ "\xa4\xa7\xab\xe1\xa4\xce\xb4\xc2\xa6\xda\xb6" "i" ""
+ "\xbf\xd6\xa4\xa7\xab" "e" "\xa1" "A" "\xb2" "z" "\xbe" "v" "\xae" ""
+ "v" "\xb7" "|" "\xa5\xfd\xac\xb0\xb0\xea\xa4\xfd\xae\xde\xb2" "z" ""
+ "\xa1" "A" "\xc0\xb9\xa4" "W" "\xb5" "u" "\xb0\xb2\xbe" "v" "\xa1" ""
+ "C"
+ },
+ {307, ""},
+ {
+ 360, "\xb5" "M" "\xab\xe1\xb0\xea\xa4\xfd\xab" "K" ""
+ "\xb7\xc7\xb3\xc6\xab" "e" "\xa9\xb9\xa4" "j" "\xc6" "U" "\xa1" "A" ""
+ "\xb6" "i" "\xa6\xe6\xb5\xdb\xb3" "T" "\xbb\xf6\xa6\xa1\xa1" "C"
+ },
+ {406, ""},
+ {
+ 440, "\xa9" "^" "\xad\xe3\xaa\xba\xb4\xc2\xa6\xda\xad\xcc\xa5" "i" ""
+ "\xa5" "H" "\xb3\xad\xa6\xf1\xb0\xea\xa4\xfd\xa4" "@" "\xa6" "P" ""
+ "\xa8\xc9\xa5\xce\xa4" "p" "\xc2" "I" "\xa4\xdf\xa1" "C"
+ },
+ {
+ 520, "\xa8" "C" "\xad\xd3\xa4" "H" ""
+ "\xb3\xa3\xa7\xc6\xb1\xe6\xb0\xea\xa4\xfd\xaf\xe0\xac\xdd\xa5" "L" ""
+ "\xa4" "@" "\xb2\xb4\xa1" "A" "\xb8\xdf\xb0\xdd\xa5" "L" ""
+ "\xaa\xba\xb0\xb7\xb1" "d" ""
+ "\xb1\xa1\xa7\xce\xa8\xc3\xb2\xe2\xc5\xa5\xa9\xce\xb4\xb2\xbc\xbd\xb7\xed\xa4\xd1\xaa\xba\xc1\xc1\xa8\xa5\xa1" ""
+ "C"
+ },
+ {
+ 600, "\xb0\xea\xa4\xfd\xa6" "b" "\xa4\xbd\xb2\xb3\xaa\xba\xaa" "`" ""
+ "\xa5\xd8\xa4\xa7\xa4" "U" "\xa1" "A" "\xa7\xea\xba" "t" ""
+ "\xb5\xdb\xa5" "L" "\xa9\xb9\xb1" "`" ""
+ "\xaa\xba\xa8\xa4\xa6\xe2\xa1" "C" "\xa6\xb3\xa4" "H" ""
+ "\xc0\xb0\xa5" "L" "\xab" "c" "\xc5\xbd\xa1" "A" "\xac" "~" "\xc1" ""
+ "y" "\xa1" "A" "\xb5" "M" "\xab\xe1\xb5\xdb\xb8\xcb\xa1" "C"
+ },
+ {679, ""},
+ {
+ 815, "\xb5\xdb\xa6" "n" "\xb8\xcb\xab\xe1\xa1" "A" ""
+ "\xb0\xea\xa4\xfd\xab" "K" "\xa6" "^" "\xa8\xec\xa6\xdb\xa4" "v" ""
+ "\xaa\xba\xb9\xec\xab\xc7\xa1" "A" "\xb0\xb5\xa4" "@" ""
+ "\xad\xd3\xc2\xb2\xb5" "u" "\xaa\xba\xa6\xad\xc3\xab\xa1" "C"
+ },
+ {860, ""},
+ {
+ 948, "\xc3\xab\xa7" "i" "\xa4\xa7\xab\xe1\xa1" "A" ""
+ "\xb0\xea\xa4\xfd\xb7" "|" "\xc0" "H" "\xb5\xdb\xa9" "x" ""
+ "\xad\xfb\xa1" "A" "\xab" "e" "\xa9\xb9\xc4\xb3\xb7" "|" "\xc6" "U" ""
+ "\xa1" "A" "\xa6" "b" "\xa8\xba\xb8\xcc\xb0" "Q" ""
+ "\xbd\xd7\xb0\xea\xae" "a" "\xa8\xc6\xb0\xc8\xa1" "C"
+ },
+ {1027, ""},
+ }
+ }, /* a2_vf.hns */
+ {
+ "a3_vf.hns", {
+ {
+ 30, "\xb5\xdb\xb3" "T" "\xbb\xf6\xa6\xa1\xb5\xb2\xa7\xf4\xab\xe1\xa1" ""
+ "A" "\xb0\xea\xa4\xfd\xab" "K" "\xab" "e" "\xa9\xb9\xc4\xb3\xb7" ""
+ "|" "\xc6" "U" "\xa1" "C" "\xbb" "P" "\xa9" "x" ""
+ "\xad\xfb\xad\xcc\xb3" "B" "\xb2" "z" "\xb0\xea\xae" "a" ""
+ "\xaa\xba\xa8\xc6\xb0\xc8\xa1" "C"
+ },
+ {
+ 110, "\xac\xb0\xbd" "T" "\xab" "O" "\xbe\xf7\xb1" "K" "\xa1" "A" ""
+ "\xa9\xd2\xa6\xb3\xaa\xba\xaa\xf9\xb1" "N" "\xb3" "Q" ""
+ "\xa4\xcf\xc2\xea\xa1" "C" "\xa9" "x" "\xad\xfb\xbf" "c" ""
+ "\xa5\xcb\xab" "K" "\xb6" "}" "\xa9" "l" ""
+ "\xb7\xed\xa4\xd1\xaa\xba\xad\xab\xad" "n" "\xc4\xb3\xc3" "D" ""
+ "\xa1" "C"
+ },
+ {211, ""},
+ {280, "\xa6" "U" "\xa6\xec\xa1" "A" "\xbd\xd0\xa7\xa4\xa1" "I"},
+ {
+ 290, "\xb0\xea\xa4\xfd\xb7" "|" "\xb6\xc9\xc5\xa5\xa8\xd3\xa6\xdb\xa6" ""
+ "U" "\xa4\xe8\xa4\xa3\xa6" "P" "\xaa\xba\xb7" "N" "\xa8\xa3\xa1" ""
+ "A" "\xb5" "M" "\xab\xe1\xb0\xb5\xa8" "M" "\xa9" "w" "\xa1" "C" ""
+ "\xa5" "L" "\xb3" "q" "\xb1" "`" "\xb7" "|" "\xb1\xb5\xa8\xfc\xa4" ""
+ "j" "\xa6" "h" "\xbc\xc6\xa4" "H" "\xaa\xba\xb7" "N" "\xa8\xa3\xa1" ""
+ "C"
+ },
+ {
+ 360, "\xa6" "b" "\xb3" "o" "\xa6" "P" "\xae\xc9\xa1" "A" ""
+ "\xb2\xb3\xb4\xc2\xa6\xda\xa6" "b" "\xa4" "j" "\xc6" "U" ""
+ "\xa4\xa4\xb5\xa5\xad\xd4\xb0\xea\xa4\xfd\xb2" "{" "\xa8\xad\xa1" ""
+ "C"
+ },
+ {411, ""},
+ {
+ 440, "\xa6" "U" "\xa6\xec\xa1" "A" "\xb0\xa1\xa4" "U" "\xbe" "r" ""
+ "\xa8\xec\xa1" "C"
+ },
+ {450, ""},
+ {
+ 550, "\xb2" "{" "\xa6" "b" "\xac" "O" ""
+ "\xa4\xa4\xa4\xc8\xae\xc9\xa4\xc0\xa1" "C" "\xb0\xea\xa4\xfd\xa5" ""
+ "h" "\xb0\xd1\xa5" "[" "\xc0\xb1\xbc\xbb\xa1" "C" ""
+ "\xb4\xc2\xa6\xda\xa6" "b" "\xa5" "L" ""
+ "\xaa\xba\xab\xe1\xad\xb1\xb1\xc6\xa6\xa8\xa4" "@" "\xa6" "C" ""
+ "\xa1" "C" "\xb0\xea\xa4\xfd\xa6" "b" "\xa4\xfd\xa4" "l" "\xa9" "M" ""
+ "\xa4\xbd\xa5" "D" "\xaa\xba\xb3\xad\xa6" "P" "\xa4" "U" "\xa1" "A" ""
+ "\xac\xef\xb9" "L" "\xa4" "j" "\xc6" "U" "\xa1" "A" "\xab" "e" ""
+ "\xa9\xb9\xb1\xd0\xb0\xf3\xa1" "C"
+ },
+ {687, ""},
+ {
+ 728, "\xa6" "p" "\xaa" "G" "\xb0\xa1\xa4" "U" "\xa4\xaf\xb7" "O" "\xa1" ""
+ "A" "\xc4" "@" "\xb7" "N" "\xac\xdd\xac\xdd\xb3" "o" ""
+ "\xa5\xf7\xbd\xd0\xc4" "@" "\xae\xd1\xa1" "A" "\xbd\xd0\xa8" "D" ""
+ "\xb0\xa1\xa4" "U" "\xac\xb0\xa7\xda\xa8\xba\xa6" "b" ""
+ "\xa4\xa3\xa4\xbd\xaa\xba\xbc" "f" "\xa7" "P" "\xa4\xa4\xa1" "A" ""
+ "\xa6\xa8\xac\xb0\xc4\xeb\xac\xb9\xaa\xcc\xaa\xba\xa8\xe0\xa4" "l" ""
+ "\xa6\xf9\xad\xde\xa1" "C"
+ },
+ {
+ 805, "\xa7\xda\xad\xcc\xb7" "|" "\xaa" "`" "\xb7" "N" "\xb3" "o" ""
+ "\xa5\xf3\xa8\xc6\xa1" "A" "\xa5\xfd\xa5\xcd\xa1" "A" ""
+ "\xa7\xda\xad\xcc\xb7" "|" "\xaa" "`" "\xb7" "N"
+ },
+ {840, ""},
+ {
+ 1060, "\xb0\xea\xa4\xfd\xa6" "b" "\xac\xd3\xae" "a" "\xaa\xf8\xb4" "Y" ""
+ "\xa4\xa4\xaf\xb8\xa9" "w" "\xa1" "A" "\xa4\xfd\xa4" "l" "\xa9" "M" ""
+ "\xa4\xbd\xa5" "D" "\xa8\xcc\xb6\xa5\xbc" "h" ""
+ "\xa5\xfd\xab\xe1\xaf\xb8\xa6" "b" "\xa5" "L" ""
+ "\xaa\xba\xab\xe1\xad\xb1\xa1" "C" "\xb0\xea\xa4\xfd\xc4" "Y" ""
+ "\xb8" "T" "\xa5\xe6\xbd\xcd\xa8\xc3\xad" "n" "\xa8" "D" "\xa5" "L" ""
+ "\xad\xcc\xb0" "@" "\xb7" "q" "\xa1" "C"
+ },
+ {1220, ""},
+ }
+ }, /* a3_vf.hns */
+ {
+ "a4_vf.hns", {
+ {
+ 90, "\xa6" "b" "\xc0\xb1\xbc\xbb\xae\xc9\xa1" "A" "\xac\xd3\xae" "a" ""
+ "\xbc" "p" "\xa9\xd0\xaa\xba\xa9" "x" "\xad\xfb\xa1" "A" "\xaf" "N" ""
+ "\xa6\xd7\xa6" "K" "\xa1" "A" "\xc4\xd1\xa5" "]" "\xae" "v" ""
+ "\xb3\xc5\xa9" "M" "\xa5" "L" "\xad\xcc\xaa\xba\xa7" "U" ""
+ "\xa4\xe2\xa5\xbf\xa6\xa3\xb5\xdb\xb7\xc7\xb3\xc6\xc0\\\xc2" "I" ""
+ "\xa1" "C"
+ },
+ {
+ 200, "\xb0\xea\xa4\xfd\xaa\xba\xad" "G" "\xa4" "f" "\xab\xdc\xa4" "j" ""
+ "\xa1" "A" "\xa6\xd3\xb0\xea\xa4\xfd\xa8" "S" "\xa6\xb3\xa6" "Y" ""
+ "\xa7\xb9\xaa\xba\xad\xb9\xaa\xab\xab" "h" "\xb7" "|" "\xaf" "d" ""
+ "\xb5\xb9\xa5" "L" "\xa4" "H" "\xad\xb9\xa5\xce\xa1" "A" ""
+ "\xa6\xd3\xa4" "@" "\xaf\xeb\xa4" "H" "\xa4" "]" "\xa4\xa3\xb7" "|" ""
+ "\xac\xdd\xa4\xa3\xb0" "_" "\xa6" "V" "\xbc" "p" ""
+ "\xa9\xd0\xc1\xca\xb6" "R" "\xb3\xd1\xbe" "l" "\xb5\xe6\xc0" "a" ""
+ "\xaa\xba\xa6\xe6\xac\xb0\xa1" "C"
+ },
+ {300, ""},
+ {
+ 320, "\xa4\xbd\xb6" "}" "\xa5\xce\xc0\\\xac" "O" "\xa5\xf3\xa4" "j" ""
+ "\xa8\xc6\xa1" "A" ""
+ "\xa9\xd2\xa6\xb3\xaa\xba\xb4\xc2\xa6\xda\xb3\xa3\xb7" "|" ""
+ "\xbb\xb0\xa5" "h" "\xb0\xd1\xa5" "["
+ },
+ {
+ 366, "\xa6" "U" "\xa6\xec\xa5\xfd\xa5\xcd\xa1" "A" "\xb0\xa1\xa4" "U" ""
+ "\xa5\xce\xc0\\\xa1" "C"
+ },
+ {393, ""},
+ {
+ 610, "\xa5" "u" "\xa6\xb3\xac\xd3\xab\xc7\xaa\xba\xa4" "H" "\xa5" "i" ""
+ "\xa5" "H" "\xa9" "M" "\xb0\xea\xa4\xfd\xa6" "P" "\xa7\xa4\xa1" "A" ""
+ "\xa6\xd3\xa5" "B" "\xa5" "u" "\xa6\xb3\xa4" "k" ""
+ "\xa4\xbd\xc0\xef\xa5" "i" "\xa5" "H" "\xa7\xa4\xa6" "b" "\xa5" "L" ""
+ "\xaa\xba\xad\xb1\xab" "e" "\xa1" "C"
+ },
+ {685, ""},
+ {
+ 705, "\xb6\xe2\xa1" "A" "\xab\xc4\xa4" "l" "\xa1" "A" "\xa7" "A" ""
+ "\xb7\xc7\xb3\xc6\xac\xb0\xa7\xda\xad\xcc\xaa\xed\xba" "t" "\xc3" ""
+ "M" "\xb3" "N" "\xb6\xdc\xa1" "H"
+ },
+ {747, ""},
+ {
+ 760, "\xa6" "b" "\xa5\xce\xc0\\\xae\xc9\xa1" "A" "\xa6\xb3\xa4" "T" ""
+ "\xb9" "D" "\xb5" "{" "\xa7\xc7\xa1" "A" "\xa8" "C" "\xa4" "@" ""
+ "\xb9" "D" "\xb3\xa3\xa6\xb3\xa4\xbb\xb9" "D" "\xa4\xa3\xa6" "P" ""
+ "\xaa\xba\xb5\xe6\xc0" "a" "\xa1" "G" "\xb4\xf6\xa9" "M" "\xb6" "}" ""
+ "\xad" "G" "\xb5\xe6\xa1" "A" "\xaf" "N" "\xa6\xd7\xa9" "M" "\xc2" ""
+ "I" "\xa4\xdf"
+ },
+ {847, ""},
+ }
+ }, /* a4_vf.hns */
+ {
+ "a5_vf.hns", {
+ {13, "\xc0\\\xab\xe1\xa6\xb3\xa4\xf4\xaa" "G...." "\xa1" "A....."},
+ {36, ""},
+ {
+ 90, "\xa4\xa7\xab\xe1\xb0\xea\xa4\xfd\xaa\xe1\xbc\xc6\xa4" "p" ""
+ "\xae\xc9\xaa\xba\xae\xc9\xb6\xa1\xa8\xd3\xb3" "B" "\xb2" "z" ""
+ "\xb0\xea\xae" "a" "\xa8\xc6\xb0\xc8\xa1" "C" "\xa6" "b" "\xb3" "o" ""
+ "\xac" "q" "\xae\xc9\xb6\xa1\xa4\xba\xa1" "A" "\xa5" "L" ""
+ "\xb3\xdf\xc5" "w" "\xa6" "b" "\xb0\xd2\xaf" "S" ""
+ "\xbb\xfa\xa4\xd2\xa4" "H" "\xaa\xba\xa9\xd0\xa4" "l" ""
+ "\xb8\xcc\xbf\xec\xa4\xbd\xa1" "A" ""
+ "\xa6\xb3\xa8\xc7\xae\xc9\xad\xd4\xb7" "|" "\xa6\xb3\xa9" "x" ""
+ "\xad\xfb\xb3\xad\xa6\xf1\xa1" "C"
+ },
+ {
+ 200, "\xb3" "o" "\xad\xd3\xbb" "P" "\xa5" "L" "\xaf\xb5\xb1" "K" ""
+ "\xa6\xa8\xb1" "B" "\xa4" "k" "\xa4" "H" "\xaa\xba\xa9\xd0\xa4" "l" ""
+ "\xb8\xcc\xa1" "A" "\xa5" "L" "\xb7" "P" ""
+ "\xa8\xfc\xa8\xec\xa5\xad\xc0" "R" "\xa4\xce\xb7\xc5\xb7" "x" ""
+ "\xa1" "A" "\xb3" "o" "\xa5\xbf\xac" "O" "\xa5" "L" "\xa4" "u" ""
+ "\xa7" "@" "\xae\xc9\xa9\xd2\xbb\xdd\xad" "n" "\xaa\xba\xa1" "C"
+ },
+ {296, ""},
+ {
+ 310, "\xb0\xea\xa4\xfd\xa5\xce\xa4" "T" "\xad\xd3\xa4" "p" ""
+ "\xae\xc9\xaa\xba\xae\xc9\xb6\xa1\xb8\xd4\xb2\xd3\xac" "d" ""
+ "\xac\xdd\xa6" "U" "\xb6\xb5\xa8\xc6\xb0\xc8"
+ },
+ {345, ""},
+ {
+ 360, "\xb9\xef\xb4\xc2\xa6\xda\xa6\xd3\xa8\xa5\xa1" "A" "\xb3" "o" ""
+ "\xac" "O" "\xa4" "@" "\xa4\xd1\xb7\xed\xa4\xa4\xa5" "L" ""
+ "\xad\xcc\xa4\xa3\xb6\xb7\xb9\xb3\xb0\xea\xa4\xfd\xaa\xba\xbc" "v" ""
+ "\xa4" "l" "\xa4" "@" "\xbc\xcb\xa1" "A" "\xc0" "H" ""
+ "\xae\xc9\xb8\xf2\xb5\xdb\xb0\xea\xa4\xfd\xa8" "C" "\xa4" "@" ""
+ "\xa8" "B" "\xa6\xe6\xb0\xca\xaa\xba\xae\xc9\xa8\xe8\xa1" "C"
+ },
+ {
+ 460, "\xa6\xb3\xa8\xc7\xa4" "H" "\xaa\xb1\xb5" "P" "\xa1" "C" "\xb5" "P" ""
+ "\xae\xe0\xa5" "i" "\xa5" "H" "\xb4\xa3\xa8\xd1\xa4" "@" ""
+ "\xa8\xc7\xa6\xac\xa4" "J" "\xa1" "A" "\xa6\xb3\xa8\xc7\xa4" "H" ""
+ "\xb7" "|" "\xb2" "@" "\xa4\xa3\xb5" "S" "\xbf\xdd\xa6" "a" "\xab" ""
+ "_" "\xb5\xdb\xa5\xa2\xc3" "d" "\xaa\xba\xa6" "M" "\xc0" "I" "\xa5" ""
+ "X" "\xa6\xd1\xa4" "d" "\xa1" "C"
+ },
+ {560, ""},
+ {
+ 665, "\xa8\xe4\xa5" "L" "\xa4" "H" "\xab" "h" "\xb1" "q" "\xa8\xc6\xa4" ""
+ "@" "\xa8\xc7\xbb\xdd\xad" "n" ""
+ "\xa7\xde\xa5\xa9\xaa\xba\xac\xa1\xb0\xca\xa1" "A" "\xa6" "p" ""
+ "\xbc\xb2\xb2" "y" "\xb5\xa5\xa1" "C" "\xa6\xfd\xac" "O" "\xa4" "~" ""
+ "\xb5\xd8\xac" "v" "\xb7\xb8\xaa\xba\xb9\xef\xb8\xdc\xac" "O" ""
+ "\xa4" "Z" "\xba\xb8\xb6\xeb\xae" "c" ""
+ "\xa4\xa4\xb3\xcc\xa8\xfc\xb3\xdf\xb7" "R" "\xaa\xba\xae" "T" ""
+ "\xbc\xd6"
+ },
+ {766, ""},
+ }
+ }, /* a5_vf.hns */
+ {
+ "a6_vf.hns", {
+ {
+ 45, "\xb1\xb5\xaa\xf1\xa4" "U" "\xa4\xc8\xa4\xad\xc2" "I" ""
+ "\xc4\xc1\xaa\xba\xae\xc9\xad\xd4\xa1" "A" "\xb5\xb2\xa7\xf4\xa4" ""
+ "@" "\xa4\xd1\xaa\xba\xa4" "u" "\xa7" "@" "\xa1" "A" ""
+ "\xb0\xea\xa4\xfd\xb7" "|" ""
+ "\xa8\xec\xaa\xe1\xb6\xe9\xb8\xcc\xb4\xb2\xa8" "B" ""
+ "\xa8\xc3\xb0\xd1\xc6" "[" "\xa6" "U" "\xad\xd3\xae" "x" "\xb0" "| "
+ ""
+ },
+ {
+ 90, "..." "\xa5" "L" "\xa5" "[" "\xa4" "J" "\xa6" "b" "\xa4" "j" "\xb2" ""
+ "z" "\xa5\xdb\xae" "x" "\xb0" "|" "\xb5\xa5\xad\xd4\xa5" "L" ""
+ "\xaa\xba\xb4\xc2\xa6\xda\xa1" "C"
+ },
+ {160, ""},
+ {
+ 170, "\xa5" "u" "\xa6\xb3\xc0\xf2\xb1" "o" "\xaf" "S" ""
+ "\xb3\\\xaa\xba\xa4" "H" "\xa4" "~" "\xaf\xe0\xbb" "P" ""
+ "\xb0\xea\xa4\xfd\xa4" "@" "\xa6" "P" "\xb4\xb2\xa8" "B" "\xa1" "C"
+ },
+ {208, ""},
+ {
+ 295, "\xa4" "H" "\xb8" "s" "\xac\xef\xb9" "L" "\xa7" "C" "\xaa\xf8\xb4" ""
+ "Y" "\xa1" "A" "\xa8\xab\xa6" "V" "\xae" "x" "\xb0" "|" "\xa1" "A" ""
+ "\xb5" "M" "\xab\xe1\xab" "e" ""
+ "\xa9\xb9\xa4\xf4\xa6\xc0\xaf\xf3\xa9" "W" "\xa1" "A" "\xa6" "b" ""
+ "\xa8\xba\xb8\xcc\xb0\xea\xa4\xfd\xb3\xdf\xc5" "w" "\xaa\xe1\xa4" ""
+ "@" "\xa8\xc7\xae\xc9\xb6\xa1\xaa" "Y" ""
+ "\xbd\xe0\xab\xb0\xb3\xf9\xaa\xba\xb4\xba\xc6" "[" "\xa1" "C"
+ },
+ {
+ 430, "\xb1" "q" "\xbe\xef\xb6\xe9\xa8\xec\xac" "W" "\xb4" "Y" "\xa1" "A" ""
+ "\xb0\xea\xa4\xfd\xa5" "J" "\xb2\xd3\xb9\xee\xac\xdd\xa8" "C" ""
+ "\xb6\xb5\xa4" "u" "\xa7" "@" "\xb6" "i" ""
+ "\xa6\xe6\xa4\xa4\xaa\xba\xb1\xa1\xa7\xce\xa1" "C"
+ },
+ {492, ""},
+ {
+ 945, "\xb0\xd1\xb3" "X" "\xa6" "b" "\xa4" "p" ""
+ "\xab\xc2\xa5\xa7\xb4\xb5\xb5\xb2\xa7\xf4\xa1" "C" ""
+ "\xb0\xea\xa4\xfd\xb1" "q" "\xb9" "D" "\xa9" "_" ""
+ "\xab\xb0\xa7\xe4\xa8\xd3\xa5\xad\xa9\xb3\xb2\xee\xaa\xba\xb2\xee\xa4\xd2\xa1" ""
+ "A" "\xa6" "b" "\xa4\xd1\xae\xf0\xa8" "}" "\xa6" "n" ""
+ "\xaa\xba\xae\xc9\xad\xd4\xa1" "A" "\xa5" "L" "\xad\xcc\xb4" "N" ""
+ "\xb7" "|" "\xb1" "a" "\xb5\xdb\xae" "c" "\xa7\xca\xaa\xba\xa4" "H" ""
+ "\xa6" "b" "\xb9" "B" "\xaa" "e" "\xa4" "W" "\xaf\xe8\xa6\xe6\xa1" ""
+ "C"
+ },
+ }
+ }, /* a6_vf.hns */
+ {
+ "a7_vf.hns", {
+ {
+ 40, "\xa6" "b" "\xae" "L" "\xa4\xd1\xb1\xdf\xa4" "W" "\xa1" "A" ""
+ "\xb2\xb3\xa4" "H" "\xac\xd2\xaa\xbe\xad" "n" "\xa6" "b" ""
+ "\xaa\xe1\xb6\xe9\xaa\xba\xa4" "p" "\xbe\xf0\xc2" "O" ""
+ "\xb6\xa1\xa5\xce\xab" "K" "\xc0\\\xa8\xd3\xa8\xfa\xa5" "N" ""
+ "\xb1\xdf\xc0\\\xa1" "C"
+ },
+ {107, ""},
+ {
+ 198, "\xb5" "M" "\xab\xe1\xa1" "A" "\xb7\xed\xa9" "]" ""
+ "\xb1\xdf\xa8\xd3\xc1" "{" "\xae\xc9\xa1" "A" ""
+ "\xa9\xd2\xa6\xb3\xa4" "H" "\xb3\xa3\xa6" "^" ""
+ "\xab\xb0\xb3\xf9\xb0\xd1\xa5" "[" "\xb0\xea\xa4\xfd\xaa\xba\xb4" ""
+ "N" "\xb9\xec\xbb\xf6\xa6\xa1\xa1" "C"
+ },
+ {245, ""},
+ {
+ 355, "\xa4" "k" "\xa4" "h" "\xa4\xa3\xaf\xe0\xb0\xd1\xa5" "[" ""
+ "\xb0\xea\xa4\xfd\xaa\xba\xb4" "N" "\xb9\xec\xbb\xf6\xa6\xa1\xa1" ""
+ "A" "\xa4" "]" "\xa4\xa3\xb7" "|" "\xc0\xf2\xc1\xdc\xb0\xd1\xa5" ""
+ "[" "\xb0" "_" "\xa7\xc9\xa9" "M" "\xb5\xdb\xb3" "T" "\xc2\xa7\xa1" ""
+ "C" "\xb0\xea\xa4\xfd\xa5" "l" "\xb6\xb0\xa6" "o" "\xad\xcc\xab" ""
+ "e" "\xa9\xb9\xa4" "j" "\xc6" "U" "\xa1" "A" "\xa6" "V" "\xa6" "o" ""
+ "\xad\xcc\xb9" "D" "\xb1\xdf\xa6" "w" "\xa1" "C"
+ },
+ {442, ""},
+ {
+ 454, "\xa4" "k" "\xa4" "h" "\xad\xcc\xa1" "A" "\xa7\xc6\xb1\xe6\xa6" "b" ""
+ "\xb3" "o" "\xa9" "]" "\xb1\xdf\xae\xc9\xa4\xc0\xa1" "A" "\xac" "O" ""
+ "\xbe" "A" "\xa6" "X" "\xa7" "A" ""
+ "\xad\xcc\xa5\xf0\xae\xa7\xaa\xba\xae\xc9\xb6\xa1\xa1" "C"
+ },
+ {512, ""},
+ {
+ 647, "\xb5" "M" "\xab\xe1\xb4" "N" "\xb9\xec\xbb\xf6\xa6\xa1\xab" "K" ""
+ "\xa5\xbf\xa6\xa1\xb6" "}" "\xa9" "l" "\xa1" "C" "\xa6\xad\xa4" "W" ""
+ "\xb0\xd1\xa5" "[" "\xb5\xdb\xb3" "T" ""
+ "\xc2\xa7\xaa\xba\xb4\xc2\xa6\xda\xa5\xb2\xb5" "M" "\xb7" "|" ""
+ "\xa8\xd3\xb0\xd1\xa5" "[" "\xb4" "N" ""
+ "\xb9\xec\xbb\xf6\xa6\xa1\xa1" "C"
+ },
+ {722, ""},
+ {
+ 733, "\xad" "n" "\xbd\xd0\xbd\xd6\xb0\xf5\xc0\xeb\xa9" "O" "\xa1" "A" ""
+ "\xb0\xa1\xa4" "U" "\xa1" "H"
+ },
+ {763, ""},
+ {
+ 925, "\xb0\xea\xa4\xfd\xa8" "C" "\xa4\xd1\xaa\xba\xa6\xe6\xb0\xca\xac" ""
+ "O" "\xa4" "@" "\xba\xd8\xac\xb0\xb0\xaa\xa9" "|" ""
+ "\xaa\xba\xaa\xed\xb2" "{" "\xa1" "C" "\xa6" "b" "\xa5" "L" "\xa4" ""
+ "W" "\xa7\xc9\xae\xc9\xac\xb0\xa5" "L" ""
+ "\xae\xb3\xc4\xfa\xc0\xeb\xaa\xba\xc5" "v" "\xa7" "Q" "\xa1" "A" ""
+ "\xb7" "|" "\xbd\xe7\xb5\xb9\xa6" "a" "\xa6\xec\xaf" "S" ""
+ "\xae\xed\xaa\xba\xa4" "H" "\xa1" "A" "\xb3" "q" "\xb1" "`" "\xac" ""
+ "O" "\xa8\xd3\xb3" "X" "\xaa\xba\xa5" "~" "\xbb\xab"
+ },
+ {1048, ""},
+ {
+ 1060, "\xa6" "]" "\xa6\xb9\xa5" "L" "\xb4" "N" "\xc0\xf2\xb1" "o" ""
+ "\xb3\xad\xa6\xf1\xb0\xea\xa4\xfd\xab" "e" "\xa9\xb9\xb9\xec\xae" ""
+ "c" "\xaa\xba\xc5" "v" "\xa7" "Q" "\xa1" "C"
+ },
+ {1100, ""},
+ {
+ 1115, "\xa6\xfd\xac" "O" "\xa1" "A" "\xb4" "N" "\xa6" "b" "\xb3" "o" ""
+ "\xa4\xd1\xb1\xdf\xa4" "W...."
+ },
+ {1135, ""},
+ {
+ 1188, "\xa4\xf5\xa1" "I" "\xa4\xf5\xa1" "I" "\xa9\xd4\xb6\xa9\xbc" "w" ""
+ "\xa1" "A" "\xb9" "L" "\xa8\xd3\xa1" "A" "\xaa\xfd\xa4\xee\xb3" "o" ""
+ "\xad\xd3\xba\xc6\xa4" "l" "\xa1" "I"
+ },
+ {
+ 1230, " " "\xa6" "U" "\xa6\xec\xa1" "A" "\xa5" "v" "\xa5" "[" ""
+ "\xa9\xac\xb7\xe7\xa9\xd4\xab" "J" "\xc0\xef\xa6" "V" "\xa4" "j" ""
+ "\xae" "a" "\xb9" "D" "\xb1\xdf\xa6" "w" "\xa1" "C"
+ },
+ }
+ }, /* a7_vf.hns */
+ {
+ "a8_vf.hns", {
+ {
+ 212, "\xa7" "Y" "\xa8\xcf\xac" "O" "\xa6" "b" "\xb9\xda\xa4\xa4\xa1" "A" ""
+ "\xbd\xd6\xaf\xe0\xb1\xb5\xa8\xfc\xa4" "@" "\xad\xd3\xba\xc6\xa4" ""
+ "l" "\xb3\xba\xb5" "M" "\xaf\xe0\xb0\xf7\xb7\xb4\xb1\xbc\xb3" "o" ""
+ "\xae" "y" "\xab\xb0\xb3\xf9\xa9" "O" "\xa1" "H" "\xa6" "A" ""
+ "\xb8\xd5\xa4" "@" "\xa6\xb8\xa7" "a" "\xa1" "I" "\xb2" "{" "\xa6" ""
+ "b" "\xa4\xa3\xb0\xb5\xa1" "A" "\xb4" "N" "\xa5\xc3\xbb\xb7\xa8" ""
+ "S" "\xa6\xb3\xbe\xf7\xb7" "|" "\xa4" "F" "\xa1" "C"
+ },
+ {320, ""},
+ }
+ }, /* a8_vf.hns */
+ {
+ "a9_vf.hns", {
+ {
+ 30, "\xa9\xd4\xb6\xa9\xbc" "w" "\xa1" "A" "\xa7\xda\xa4" "w" "\xb8" "g" ""
+ "\xa6" "V" "\xb0\xea\xa4\xfd\xb3\xf8\xa7" "i" "\xa7" "A" ""
+ "\xbc\xf6\xa4\xdf\xb3" "B" "\xb2" "z" "\xb3" "o" ""
+ "\xa5\xf3\xa8\xc6\xaa\xba\xba" "A" "\xab\xd7\xa4" "F" "\xa1" "C" ""
+ "\xb0\xea\xa4\xfd\xad" "n" "\xa7\xda\xa6" "V" "\xa7" "A" ""
+ "\xaa\xed\xa5\xdc\xb7" "q" "\xb7" "N" "\xa1" "C"
+ },
+ {125, ""},
+ {
+ 200, "\xa8\xb9\xa5\xd0\xa5\xfd\xa5\xcd\xa7" "i" "\xb6" "D" ""
+ "\xa7\xda\xad\xcc\xa9\xd2\xa6\xb3\xa7" "A" "\xb8" "g" ""
+ "\xbe\xfa\xb9" "L" "\xaa\xba\xa8\xc6\xa1" "C"
+ },
+ {
+ 300, "\xa7\xda\xa5\xad\xc0" "R" "\xa6" "a" "\xac\xdd\xb5\xdb\xb3" "o" ""
+ "\xa4\xa3\xa5\xad\xa4" "Z" "\xaa\xba\xa4" "@" ""
+ "\xa4\xd1\xb5\xb2\xa7\xf4\xa1" "A" ""
+ "\xa5\xa6\xc0\xb3\xb8\xd3\xa9\xf1\xa6" "b" ""
+ "\xa4\xeb\xa5\xfa\xa4\xa7\xa4" "U" "\xa1" "A" ""
+ "\xa6\xd3\xa4\xa3\xac" "O" "\xa9\xf1\xa6" "b" ""
+ "\xb6\xa7\xa5\xfa\xa4\xa7\xa4" "U" "\xa1" "C"
+ },
+ {
+ 400, "\xc1\xd9\xac" "O" "\xa6\xb3\xa4" "@" ""
+ "\xa8\xc7\xaf\xab\xaf\xb5\xa5\xbc\xb8\xd1\xa1" "C" "\xa6\xfd\xac" ""
+ "O" "\xa1" "A" "\xa5\xfd\xa5\xcd\xa1" "A" "\xb5" "L" "\xbd\xd7\xa7" ""
+ "A" "\xa8\xec\xa8\xba\xb8\xcc\xa1" "A" "\xa7" "A" "\xb3\xa3\xb0" ""
+ "t" "\xba\xd9\xac\xb0\xac" "O" "\xa7\xda\xad\xcc\xaa\xba\xaf" "S" ""
+ "\xa8\xcf\xa1" "C"
+ },
+ {515, ""},
+ }
+ }, /* a9_vf.hns */
+};
+
#endif
diff --git a/dists/engine-data/cryomni3d.dat b/dists/engine-data/cryomni3d.dat
index ab05c86869..4e28d4d476 100644
Binary files a/dists/engine-data/cryomni3d.dat and b/dists/engine-data/cryomni3d.dat differ
diff --git a/engines/cryomni3d/datstream.cpp b/engines/cryomni3d/datstream.cpp
index e701d1d0d4..dd6e596365 100644
--- a/engines/cryomni3d/datstream.cpp
+++ b/engines/cryomni3d/datstream.cpp
@@ -129,6 +129,8 @@ uint16 DATSeekableStream::translateLanguage(Common::Language lang) {
return MKTAG16('i', 't');
case Common::PT_BRA:
return MKTAG16('b', 'r');
+ case Common::ZH_TWN:
+ return MKTAG16('z', 't');
default:
// Invalid language
return 0;
diff --git a/engines/cryomni3d/detection_tables.h b/engines/cryomni3d/detection_tables.h
index 69c6ac4db5..6002955e5a 100644
--- a/engines/cryomni3d/detection_tables.h
+++ b/engines/cryomni3d/detection_tables.h
@@ -415,6 +415,41 @@ static const CryOmni3DGameDescription gameDescriptions[] = {
GType_VERSAILLES,
GF_VERSAILLES_FONTS_NUMERIC | GF_VERSAILLES_AUDIOPADDING_YES | GF_VERSAILLES_LINK_STANDARD,
},
+
+ // Versailles 1685
+ // Chinese Windows compressed from DVD
+ // From lePhilousophe
+ {
+ {
+ "versailles",
+ "",
+ VERSAILLES_ENTRY_DEF("PROGRAM.Z", "37f3d691e90e17b78050d6a91f7e0377", 242583),
+ Common::ZH_TWN,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUI_OPTIONS_VERSAILLES
+ },
+ GType_VERSAILLES,
+ /* GF_VERSAILLES_FONTS_ | */ GF_VERSAILLES_AUDIOPADDING_YES,
+ },
+
+ // Versailles 1685
+ // Chinese Windows from DVD
+ // From lePhilousophe
+ {
+ {
+ "versailles",
+ "",
+ VERSAILLES_ENTRY_DEF("VERSAILL.EXE", "5209e7c9b20612467af7e9745758ee72", 352256),
+ Common::ZH_TWN,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUI_OPTIONS_VERSAILLES
+ },
+ GType_VERSAILLES,
+ /* GF_VERSAILLES_FONTS_ | */ GF_VERSAILLES_AUDIOPADDING_YES,
+ },
+
{ AD_TABLE_END_MARKER, 0, 0 }
};
diff --git a/engines/cryomni3d/versailles/documentation.cpp b/engines/cryomni3d/versailles/documentation.cpp
index e39fd5cb47..aaf2d456c7 100644
--- a/engines/cryomni3d/versailles/documentation.cpp
+++ b/engines/cryomni3d/versailles/documentation.cpp
@@ -1448,6 +1448,12 @@ void Versailles_Documentation::drawRecordData(Graphics::ManagedSurface &surface,
blockContent1 = Common::Rect(60, 80, 351, 345);
blockContent2 = Common::Rect(60, 345, 605, 437);
}
+ // Fix of overlapping areas for Chinese (as in original binary)
+ if (_engine->getLanguage() == Common::ZH_TWN && !_currentMapLayout) {
+ blockContent1.bottom += 30;
+ blockContent2.top += 30;
+ }
+
if (_currentInTimeline) {
background = "CHRONO1";
foreColor = 241;
diff --git a/engines/cryomni3d/versailles/engine.cpp b/engines/cryomni3d/versailles/engine.cpp
index c4e7b39db0..499b382aeb 100644
--- a/engines/cryomni3d/versailles/engine.cpp
+++ b/engines/cryomni3d/versailles/engine.cpp
@@ -277,6 +277,23 @@ void CryOmni3DEngine_Versailles::setupFonts() {
// Fonts loaded are not always the same: FR Mac and EN DOS don't use the same font for debug doc/unused
// The important is that the loaded one is present in all versions
+ if (getLanguage() == Common::ZH_TWN) {
+ fonts.push_back("tw13.CRF"); // 0: Doc titles
+ fonts.push_back("tw18.CRF"); // 1: Menu and T0 in credits
+ fonts.push_back("tw13.CRF"); // 2: T1 and T3 in credits
+ fonts.push_back("tw12.CRF"); // 3: Menu title, options messages boxes buttons
+ fonts.push_back("tw12.CRF"); // 4: T2 in credits, text in docs
+ fonts.push_back("tw12.CRF"); // 5: objects description in toolbar, options messages boxes text, T4 in credits
+ fonts.push_back("tw12.CRF"); // 6: T5 in credits, doc subtitle
+ fonts.push_back("tw12.CRF"); // 7: dialogs texts
+ fonts.push_back("tw12.CRF"); // 8: unused
+ fonts.push_back("tw12.CRF"); // 9: Warp messages texts
+ fonts.push_back("tw12.CRF"); // 10: debug
+
+ _fontManager.loadFonts(fonts, Common::kWindows950);
+ return;
+ }
+
// Code below is for SBCS encodings (ie. non CJK)
uint8 fontsSet = getFeatures() & GF_VERSAILLES_FONTS_MASK;
switch (fontsSet) {
@@ -361,7 +378,9 @@ void CryOmni3DEngine_Versailles::setupFonts() {
void CryOmni3DEngine_Versailles::setupSprites() {
Common::File file;
- if (!file.open("all_spr.bin")) {
+ Common::String fName = getLanguage() == Common::ZH_TWN ? "allsprtw.bin" : "all_spr.bin";
+
+ if (!file.open(fName)) {
error("Failed to open all_spr.bin file");
}
_sprites.loadSprites(file);
diff --git a/engines/cryomni3d/versailles/menus.cpp b/engines/cryomni3d/versailles/menus.cpp
index b474e5eae5..ada88fa317 100644
--- a/engines/cryomni3d/versailles/menus.cpp
+++ b/engines/cryomni3d/versailles/menus.cpp
@@ -59,6 +59,11 @@ void CryOmni3DEngine_Versailles::drawMenuTitle(Graphics::ManagedSurface *surface
titleY = 80;
subtitleX = 283;
subtitleY = 80;
+ } else if (getLanguage() == Common::ZH_TWN) {
+ titleX = 130;
+ titleY = 160;
+ subtitleX = 340;
+ subtitleY = 160;
} else {
titleX = 100;
titleY = 80;
@@ -77,7 +82,8 @@ void CryOmni3DEngine_Versailles::drawMenuTitle(Graphics::ManagedSurface *surface
if (getLanguage() == Common::FR_FRA ||
getLanguage() == Common::ES_ESP ||
- getLanguage() == Common::PT_BRA) {
+ getLanguage() == Common::PT_BRA ||
+ getLanguage() == Common::ZH_TWN) {
surface->vLine(100, 146, 172, color);
surface->hLine(100, 172, 168, color); // minus 1 because hLine draws inclusive
}
Commit: b40d3ca55f7b2a42b4f3c49eefe77cf6543ee41c
https://github.com/scummvm/scummvm/commit/b40d3ca55f7b2a42b4f3c49eefe77cf6543ee41c
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Add TTF list support
This will be used for Korean and Japanese versions of Versailles
Changed paths:
engines/cryomni3d/font_manager.cpp
engines/cryomni3d/font_manager.h
diff --git a/engines/cryomni3d/font_manager.cpp b/engines/cryomni3d/font_manager.cpp
index 93178d345c..1243dbe0fc 100644
--- a/engines/cryomni3d/font_manager.cpp
+++ b/engines/cryomni3d/font_manager.cpp
@@ -24,6 +24,9 @@
#include "common/file.h"
#include "common/hash-ptr.h"
#include "common/hash-str.h"
+#ifdef USE_FREETYPE2
+#include "graphics/fonts/ttf.h"
+#endif
#include "graphics/managed_surface.h"
#include "cryomni3d/font_manager.h"
@@ -90,6 +93,68 @@ void FontManager::loadFonts(const Common::Array<Common::String> &fontFiles,
}
}
+void FontManager::loadTTFList(const Common::String &ttfList, Common::CodePage codepage) {
+#ifdef USE_FREETYPE2
+ assert(codepage != Common::kCodePageInvalid);
+ _codepage = codepage;
+ setupWrapParameters();
+
+ // Freetype2 is configured to use Unicode
+ _toUnicode = true;
+
+ _fonts.clear();
+
+ Common::File list;
+
+ if (!list.open(ttfList)) {
+ error("can't open file %s", ttfList.c_str());
+ }
+
+ Common::String line = list.readLine();
+ uint32 num = atoi(line.c_str());
+
+ _fonts.reserve(num);
+
+ for (uint i = 0; i < num; i++) {
+ line = list.readLine();
+ if (line.size() == 0) {
+ error("Invalid font list: missing line");
+ }
+
+ uint32 sharpFile = line.find("#");
+ if (sharpFile == Common::String::npos) {
+ error("Invalid font list: missing #");
+ }
+ uint32 sharpFlags = line.find("#", sharpFile + 1);
+ if (sharpFlags == Common::String::npos) {
+ error("Invalid font list: missing #");
+ }
+
+ Common::String fontFace(line.begin(), line.begin() + sharpFile);
+ Common::U32String uniFontFace = fontFace.decode(codepage);
+ Common::String fontFile(line.begin() + sharpFile + 1, line.begin() + sharpFlags);
+ Common::String sizeFlags(line.begin() + sharpFlags + 1, line.end());
+
+ uint32 size = atoi(sizeFlags.c_str());
+ bool bold = sizeFlags.contains('B');
+ bool italic = sizeFlags.contains('I');
+
+ Common::Array<Common::String> fontFiles;
+ fontFiles.push_back(fontFile);
+
+ // Use 96 dpi as it's the default under Windows
+ Graphics::Font *font = Graphics::findTTFace(fontFiles, uniFontFace, bold, italic, -size,
+ 96, Graphics::kTTFRenderModeMonochrome);
+ if (!font) {
+ error("Can't find required face (line %u) in %s", i, fontFile.c_str());
+ }
+ _fonts.push_back(font);
+ }
+#else
+ error("TrueType support not compiled in");
+#endif
+}
+
Common::U32String FontManager::toU32(const Common::String &str) const {
assert(_codepage != Common::kCodePageInvalid);
diff --git a/engines/cryomni3d/font_manager.h b/engines/cryomni3d/font_manager.h
index a71d5e8bcd..6e0b7c6615 100644
--- a/engines/cryomni3d/font_manager.h
+++ b/engines/cryomni3d/font_manager.h
@@ -43,6 +43,7 @@ public:
virtual ~FontManager();
void loadFonts(const Common::Array<Common::String> &fontFiles, Common::CodePage codepage);
+ void loadTTFList(const Common::String &listFile, Common::CodePage codepage);
void setCurrentFont(int currentFont);
uint getCurrentFont() { return _currentFontId; }
void setTransparentBackground(bool transparent) { _transparentBackground = transparent; }
Commit: cb4c1a72ba07380f9421ba246dffb2a5e8073387
https://github.com/scummvm/scummvm/commit/cb4c1a72ba07380f9421ba246dffb2a5e8073387
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Add Korean version of Versailles
Changed paths:
devtools/create_cryomni3d/create_cryomni3d_dat.cpp
devtools/create_cryomni3d/create_cryomni3d_dat.h
devtools/create_cryomni3d/versailles.cpp
devtools/create_cryomni3d/versailles.h
dists/engine-data/cryomni3d.dat
engines/cryomni3d/datstream.cpp
engines/cryomni3d/detection_tables.h
engines/cryomni3d/versailles/engine.cpp
engines/cryomni3d/versailles/menus.cpp
diff --git a/devtools/create_cryomni3d/create_cryomni3d_dat.cpp b/devtools/create_cryomni3d/create_cryomni3d_dat.cpp
index 9f9f93d26e..6f862ab0e0 100644
--- a/devtools/create_cryomni3d/create_cryomni3d_dat.cpp
+++ b/devtools/create_cryomni3d/create_cryomni3d_dat.cpp
@@ -55,6 +55,7 @@ DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, DE)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, EN)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, ES)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, IT)
+DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, KO)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, ZT)
static Parts gamesParts[] = {
@@ -64,6 +65,7 @@ static Parts gamesParts[] = {
GAME_PLATFORM_LANG_PART(Versailles, ALL, EN),
GAME_PLATFORM_LANG_PART(Versailles, ALL, ES),
GAME_PLATFORM_LANG_PART(Versailles, ALL, IT),
+ GAME_PLATFORM_LANG_PART(Versailles, ALL, KO),
GAME_PLATFORM_LANG_PART(Versailles, ALL, ZT),
};
diff --git a/devtools/create_cryomni3d/create_cryomni3d_dat.h b/devtools/create_cryomni3d/create_cryomni3d_dat.h
index 730c0958fb..113288d0f1 100644
--- a/devtools/create_cryomni3d/create_cryomni3d_dat.h
+++ b/devtools/create_cryomni3d/create_cryomni3d_dat.h
@@ -44,6 +44,7 @@ size_t writeGameHeader(FILE *f, uint32 gameId, uint16 version, uint16 lang, uint
#define LANG_ES MKTAG16('e', 's')
#define LANG_FR MKTAG16('f', 'r')
#define LANG_IT MKTAG16('i', 't')
+#define LANG_KO MKTAG16('k', 'o')
#define LANG_ZT MKTAG16('z', 't') // ZH_TWN
#endif
diff --git a/devtools/create_cryomni3d/versailles.cpp b/devtools/create_cryomni3d/versailles.cpp
index 94bd058c26..da4e61ce61 100644
--- a/devtools/create_cryomni3d/versailles.cpp
+++ b/devtools/create_cryomni3d/versailles.cpp
@@ -123,4 +123,5 @@ DEFINE_FUNCS(DE)
DEFINE_FUNCS(EN)
DEFINE_FUNCS(ES)
DEFINE_FUNCS(IT)
+DEFINE_FUNCS_CJK(KO)
DEFINE_FUNCS_CJK(ZT)
diff --git a/devtools/create_cryomni3d/versailles.h b/devtools/create_cryomni3d/versailles.h
index 683848e19f..30473eec3c 100644
--- a/devtools/create_cryomni3d/versailles.h
+++ b/devtools/create_cryomni3d/versailles.h
@@ -82,6 +82,13 @@ static char const *const versaillesBRlocalizedFilenames[] = {
"credits.BR",
"LEB1_BR.WAV",
};
+static char const *const versaillesKOlocalizedFilenames[] = {
+ "DIALOG1.KR",
+ "tous_doc.KR",
+ "lien_doc.txt",
+ "credits.KR",
+ "LEB1_GB.WAV",
+};
static char const *const versaillesZTlocalizedFilenames[] = {
"DIALOG1.TW",
"tous_doc.TW",
@@ -102,6 +109,8 @@ static char const versaillesESEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT"
static char const versaillesESEpilPwd[] = "ELZORROYLAGRULLA";
static char const versaillesITEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT";
static char const versaillesITEpilPwd[] = "LEANATREEILCANE";
+static char const versaillesKOEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT";
+static char const versaillesKOEpilPwd[] = "FOXANDCRANE";
static char const versaillesZTEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT";
static char const versaillesZTEpilPwd[] = "FOXANDCRANE";
@@ -112,6 +121,7 @@ static char const versaillesDEBombPwd[] =
static char const versaillesENBombPwd[] = "IT IS NOT IN THE POWER OF KINGS TO ATTAIN PERFECTION";
static char const versaillesESBombPwd[] = "NO ES PODER DE REYES EL ALCANZAR LA PERFECCION";
static char const versaillesITBombPwd[] = "AI SOVRANI NON E DATO RAGGIUNGERE LA PERFEZIONE";
+static char const versaillesKOBombPwd[] = "IT IS NOT IN THE POWER OF KINGS TO ATTAIN PERFECTION";
static char const versaillesZTBombPwd[] = "IT IS NOT IN THE POWER OF KINGS TO ATTAIN PERFECTION";
#define VERSAILLES_MESSAGES_COUNT 146
@@ -1415,6 +1425,1119 @@ static char const *const versaillesITpaintings[] = {
"\"Cristo calato dalla Croce\"\rCharles Lebrun", /* 47: 45260 */
};
+static char const *const versaillesKOmessages[] = {
+ "\xc1\xf6\xb1\xdd\xc0\xba" " " "\xc0\xcc" " " "\xb9\xae\xc0\xcc" " "
+ "" "\xbf\xad\xb8\xae\xc1\xf6" " " ""
+ "\xbe\xca\xbd\xc0\xb4\xcf\xb4\xd9" ".", /* 0 */
+ "\xb9\xae\xc0\xcc" " " "\xc0\xe1\xb0\xe5\xbd\xc0\xb4\xcf\xb4\xd9" ""
+ ".", /* 1 */
+ "\xb9\xae\xc0\xcc" " " "\xc0\xe1\xb0\xe5\xbd\xc0\xb4\xcf\xb4\xd9" ""
+ ".", /* 2 */
+ "\xbc\xad\xb6\xf8\xc0\xcc" " " ""
+ "\xba\xf1\xbe\xfa\xbd\xc0\xb4\xcf\xb4\xd9" ".", /* 3 */
+ "\xb5\xa4\xb0\xb3\xbf\xa1" " " "\xb4\xea\xc1\xf6" " " ""
+ "\xbe\xca\xbd\xc0\xb4\xcf\xb4\xd9" ".", /* 4 */
+ "\xc0\xcc" " " "\xb3\xaa\xb9\xab\xbf\xa3" " " "\xbe\xc6\xb9\xab" " "
+ "" "\xb0\xcd\xb5\xb5" " " "\xbe\xf8\xbd\xc0\xb4\xcf\xb4\xd9" ".", /* 5 */
+ "\xbf\xc0\xb7\xbb\xc1\xf6\xb3\xaa\xb9\xab\xb0\xa1" " " ""
+ "\xbe\xc6\xb4\xd5\xb4\xcf\xb4\xd9" "!", /* 6 */
+ "\xb3\xca\xb9\xab" " " "\xbe\xee\xb5\xd3\xbd\xc0\xb4\xcf\xb4\xd9" ""
+ ".", /* 7 */
+ "\xbb\xf3\xc0\xda\xb0\xa1" " " ""
+ "\xc0\xe1\xb0\xe5\xbd\xc0\xb4\xcf\xb4\xd9" ". ", /* 8 */
+ "\xb9\xae\xc0\xbb" " " "\xbf\xad" " " "\xbc\xf6" " " ""
+ "\xc0\xd6\xbd\xc0\xb4\xcf\xb4\xd9" ".", /* 9 */
+ "\xc6\xf8\xc5\xba\xbf\xa1" " " "\xb4\xea\xc0\xbb" " " "\xbc\xf6" " "
+ "" "\xc0\xd6\xb4\xc2" " " "\xb0\xcd\xc0\xcc" " " ""
+ "\xc7\xca\xbf\xe4\xc7\xd5\xb4\xcf\xb4\xd9" ".", /* 10 */
+ "\xb2\xc9\xba\xb4\xc0\xcc" " " ""
+ "\xba\xf1\xbe\xfa\xbd\xc0\xb4\xcf\xb4\xd9" ".", /* 11 */
+ "\xc0\xcc\xc1\xa6" " " "\xc1\xf6\xb3\xaa" " " "\xb0\xa1\xb5\xb5" " "
+ "" "\xb5\xcb\xb4\xcf\xb4\xd9" ".", /* 12 */
+ "\xb4\xf5" " " "\xbe\xcb\xbe\xc6\xb3\xbe" " " ""
+ "\xbd\xc3\xb0\xa3\xc0\xcc" " " "\xbe\xf8\xbd\xc0\xb4\xcf\xb4\xd9" ""
+ "!", /* 13 */
+ "\xb1\xd7\xb8\xb2" " " "\xb0\xa8\xbb\xf3\xc7\xcf\xb1\xe2\xbf\xa3" ""
+ " " "\xb4\xca\xbd\xc0\xb4\xcf\xb4\xd9" "!", /* 14 */
+ "\xc0\xe1\xb1\xf1" "! " "\xc0\xc7\xc0\xfc\xb0\xfc\xbf\xa1\xb0\xd4" ""
+ " " "\xb4\xdc\xbc\xad\xb8\xa6" ".", /* 15 */
+ "\xc1\xbe\xc0\xcc\xbf\xa1" " " "\xb4\xea\xc1\xf6" " " ""
+ "\xbe\xca\xbd\xc0\xb4\xcf\xb4\xd9" ".", /* 16 */
+ "\xbe\xe0\xb1\xb9\xc0\xb8\xb7\xce" ".", /* 17 */
+ "\xc1\xd6\xc0\xc7" ": " "\xb4\xe7\xbd\xc5\xc0\xba" " " "\xc0\xcc" ""
+ " " "\xb7\xb9\xba\xa7\xc0\xc7" " " "\xb3\xa1\xb1\xee\xc1\xf6" " " ""
+ "\xb5\xb5\xb4\xde\xc7\xd2" " " "\xbc\xf6" " " ""
+ "\xc0\xd6\xbd\xc0\xb4\xcf\xb4\xd9" ", " "\xc7\xcf\xc1\xf6\xb8\xb8" ""
+ " " "\xb0\xe8\xbc\xd3\xc7\xcf\xb1\xe2" " " ""
+ "\xc0\xa7\xc7\xd8\xbc\xad" " " "\xc7\xca\xbf\xe4\xc7\xd1" " " ""
+ "\xb8\xf0\xb5\xe7" " " "\xc7\xe0\xb5\xbf\xc0\xbb" " " ""
+ "\xbf\xcf\xbc\xf6\xc7\xcf\xc1\xf6" " " ""
+ "\xbe\xca\xbe\xd2\xbd\xc0\xb4\xcf\xb4\xd9" ". " "\xc1\xf6\xb1\xdd" ""
+ " " "\xc0\xcc" " " "\xb0\xd4\xc0\xd3\xc0\xbb" " " ""
+ "\xc0\xfa\xc0\xe5\xc7\xcf\xbd\xca\xbd\xc3\xbf\xc0" ".", /* 18 */
+ " " "\xc1\xd6\xc0\xc7" ": " "\xb4\xe7\xbd\xc5\xc0\xba" " " ""
+ "\xc0\xcc" " " "\xb7\xb9\xba\xa7\xc0\xc7" " " ""
+ "\xb3\xa1\xb1\xee\xc1\xf6" " " "\xb5\xb5\xb4\xde\xc7\xd2" " " ""
+ "\xbc\xf6" " " "\xc0\xd6\xbd\xc0\xb4\xcf\xb4\xd9" ", " ""
+ "\xc7\xcf\xc1\xf6\xb8\xb8" " " "\xb0\xe8\xbc\xd3\xc7\xcf\xb1\xe2" ""
+ " " "\xc0\xa7\xc7\xd8\xbc\xad" " " "\xc7\xca\xbf\xe4\xc7\xd1" " " ""
+ "\xb8\xf0\xb5\xe7" " " "\xc7\xe0\xb5\xbf\xc0\xbb" " " ""
+ "\xbf\xcf\xbc\xf6\xc7\xcf\xc1\xf6" " " ""
+ "\xbe\xca\xbe\xd2\xc1\xf6\xb5\xb5" " " ""
+ "\xb8\xf0\xb8\xa8\xb4\xcf\xb4\xd9" ". " "\xc1\xf6\xb1\xdd" " " ""
+ "\xc0\xcc" " " "\xb0\xd4\xc0\xd3\xc0\xbb" " SAVE" ""
+ "\xc7\xcf\xbd\xca\xbd\xc3\xbf\xc0" ".", /* 19 */
+ "\xbb\xe7\xb4\xd9\xb8\xae\xb8\xa6" " " "\xb0\xa1\xc1\xf6\xb0\xed" ""
+ " " "\xbf\xf2\xc1\xf7\xc0\xcf" " " "\xbc\xf6" " " ""
+ "\xbe\xf8\xbd\xc0\xb4\xcf\xb4\xd9" "!", /* 20 */
+ "\xbe\xc6\xb9\xab\xb0\xcd\xb5\xb5" " " ""
+ "\xbe\xf8\xbd\xc0\xb4\xcf\xb4\xd9" ".", /* 21 */
+ "\xc0\xcc\xb8\xb8" "...", /* 22 */
+ "\xba\xa3\xb8\xa3\xbb\xe7\xc0\xcc\xc0\xaf" ",", /* 23 */
+ "\xb7\xe7\xc0\xcc" " 14" "\xbc\xbc" " " "\xb1\xc3\xc0\xfc\xc0\xc7" ""
+ " " "\xc0\xbd\xb8\xf0", /* 24 */
+ "\xb9\xae\xbc\xad" " " "\xbf\xb5\xbf\xaa\xc0\xbb" " " ""
+ "\xc2\xfc\xc1\xb6", /* 25 */
+ " " "\xb0\xd4\xc0\xd3\xc0\xbb" " " "\xb0\xe8\xbc\xd3", /* 26 */
+ " " "\xbb\xf5\xb7\xce\xbf\xee" " " ""
+ "\xb0\xd4\xc0\xd3\xc0\xbb" " " "\xbd\xc3\xc0\xdb", /* 27 */
+ " " "\xb0\xd4\xc0\xd3\xc0\xbb" " " "\xb7\xce\xb5\xe5", /* 28 */
+ " " "\xb0\xd4\xc0\xd3\xc0\xbb" " " "\xc0\xfa\xc0\xe5", /* 29 */
+ " " "\xc0\xda\xb8\xb7" " " "\xc7\xa5\xbd\xc3" ": " ""
+ "\xbf\xb9", /* 30 */
+ " " "\xc0\xda\xb8\xb7" " " "\xc7\xa5\xbd\xc3" ": " ""
+ "\xbe\xc6\xb4\xcf\xbf\xc0", /* 31 */
+ " " "\xc0\xbd\xbe\xc7" ": " "\xbf\xb9", /* 32 */
+ " " "\xc0\xbd\xbe\xc7" ": " "\xbe\xc6\xb4\xcf\xbf\xc0", /* 33 */
+ " " "\xc7\xd1" " " "\xc0\xbd\xbe\xc7\xc0\xbb" " HDD" ""
+ "\xbf\xa1" " " "\xc0\xfa\xc0\xe5" "(20 Mo)", /* 34 */
+ " " "\xb8\xf0\xb5\xe7" " " "\xc0\xbd\xbe\xc7\xc0\xbb" " "
+ "HDD" "\xbf\xa1" " " "\xc0\xfa\xc0\xe5" "(92 Mo)", /* 35 */
+ " " "\xbe\xc6\xb9\xab" " " "\xc0\xbd\xbe\xc7\xb5\xb5" " "
+ "HDD" "\xbf\xa1" " " "\xc0\xfa\xc0\xe5" " " "\xbe\xc8\xc7\xd4" " "
+ "(lecture CD)", /* 36 */
+ nullptr, /* 37 */
+ nullptr, /* 38 */
+ "\xba\xbc\xb7\xfd", /* 39 */
+ "\xb0\xd4\xc0\xd3" " " "\xc1\xdf\xb4\xdc", /* 40 */
+ "", /* 41 */
+ "\xbc\xba\xc0\xbb" " " "\xc1\xb6\xbb\xe7", /* 42 */
+ "\xc5\xa9\xb7\xb9\xb5\xf7", /* 43 */
+ " " "\xc1\xb6\xbb\xe7\xb8\xa6" " " "\xb0\xe8\xbc\xd3", /* 44 */
+ " " "\xc1\xb6\xbb\xe7\xb8\xa6" " " "\xc0\xfa\xc0\xe5", /* 45 */
+ " " "\xc1\xb6\xbb\xe7\xb8\xa6" " " "\xb7\xce\xb5\xe5", /* 46 */
+ nullptr, /* 47 */
+ " Omni3D: " "\xc7\xa5\xc1\xd8", /* 48 */
+ " Omni3D: " "\xb4\xc0\xb8\xae\xb0\xd4", /* 49 */
+ " Omni3D: " "\xbe\xc6\xc1\xd6" " " ""
+ "\xb4\xc0\xb8\xae\xb0\xd4", /* 50 */
+ " Omni3D: " "\xba\xfc\xb8\xa3\xb0\xd4", /* 51 */
+ " Omni3D: " "\xbe\xc6\xc1\xd6" " " ""
+ "\xba\xfc\xb8\xa3\xb0\xd4", /* 52 */
+ "\xc8\xae\xc0\xce", /* 53 */
+ "\xc3\xeb\xbc\xd2", /* 54 */
+ "\xba\xf1\xbe\xee" " " "\xc0\xd6\xc0\xbd", /* 55 */
+ "\xc0\xcc\xb8\xa7" " " "\xbe\xf8\xc0\xbd", /* 56 */
+ "\xc1\xd6\xc0\xc7" ": " "\xc0\xcc" " " "\xb0\xd4\xc0\xd3\xc0\xba" ""
+ " " "\xc1\xdf\xb4\xdc\xb5\xc9" " " "\xb0\xcd\xc0\xd3" ".", /* 57 */
+ "\xb5\xb9\xbe\xc6\xb0\xa8", /* 58 */
+ "\xbc\xba", /* 59 */
+ "\xb8\xde\xc0\xce" " " "\xb8\xde\xb4\xba\xb7\xce" " " ""
+ "\xb5\xb9\xbe\xc6\xb0\xa8", /* 60 */
+ "\xb9\xae\xbc\xad" " " "\xbf\xb5\xbf\xaa" " " "\xbf\xe4\xbe\xe0", /* 61 */
+ "\xbc\xba\xb0\xfa" " " "\xc1\xa4\xbf\xf8" " " "\xc1\xf6\xb5\xb5", /* 62 */
+ "\xbc\xba\xc0\xc7" " " "\xb3\xbb\xba\xce" " " ""
+ "\xbc\xb3\xb0\xe8\xb5\xb5", /* 63 */
+ "HDD" "\xbf\xa1" " " "\xbe\xb2\xb4\xc2" " " "\xb0\xcd\xc0\xcc" " " ""
+ "\xba\xd2\xb0\xa1\xb4\xc9\xc7\xd4" ": " "\xbf\xa9\xba\xd0" " " ""
+ "\xba\xce\xc1\xb7", /* 64 */
+ nullptr, /* 65 */
+ "CD" "\xb8\xa6" " " "\xb3\xd6\xc0\xb8\xbd\xc3\xbf\xc0" " ", /* 66 */
+ "%d " "\xb9\xf8\xc2\xb0" " CD" "\xb8\xa6" " " "\xb3\xd6\xb0\xed" " "
+ "" "\xbe\xc6\xb9\xab" " " "\xc5\xb0\xb3\xaa" " " ""
+ "\xb4\xa9\xb8\xa3\xbd\xc3\xbf\xc0", /* 67 */
+ "\xbf\xb9\xbc\xfa", /* 68 */
+ "\xc5\xeb\xc4\xa1", /* 69 */
+ "\xb1\xc3\xc1\xa4", /* 70 */
+ "\xbc\xba\xbf\xa1\xbc\xad\xc0\xc7" " " "\xbb\xfd\xc8\xb0", /* 71 */
+ "\xbc\xba\xb0\xfa" " " "\xc1\xa4\xbf\xf8", /* 72 */
+ "\xbf\xac\xb4\xeb\xb1\xe2", /* 73 */
+ "\xbe\xc6\xc6\xfa\xb7\xce" " " "\xba\xd0\xbc\xf6", /* 74 */
+ "\xbc\xba", /* 75 */
+ "\xc4\xdd\xb7\xce\xb3\xaa\xb5\xe5", /* 76 */
+ "\xb9\xcc\xb7\xce", /* 77 */
+ "\xb6\xf3\xc5\xe4\xb3\xaa", /* 78 */
+ "\xb0\xa8\xb1\xd6\xbf\xf8", /* 79 */
+ "\xb9\xb0\xc0\xc7" " " "\xc8\xad\xb4\xdc", /* 80 */
+ "\xb5\xb5\xb9\xda\xb4\xeb", /* 81 */
+ "\xb4\xeb" " " "\xc1\xb6\xb7\xc3\xc0\xe5", /* 82 */
+ "\xbc\xd2" " " "\xc1\xb6\xb7\xc3\xc0\xe5", /* 83 */
+ "\xc1\xa4\xbf\xf8", /* 84 */
+ "\xbe\xd5" " " "\xb6\xe3", /* 85 */
+ "\xb4\xeb\xbf\xee\xc7\xcf", /* 86 */
+ "\xb3\xb2\xc2\xca" " " "\xc8\xad\xb4\xdc", /* 87 */
+ "\xba\xcf\xc2\xca" " " "\xc8\xad\xb4\xdc", /* 88 */
+ "\xb1\xb9\xbf\xd5\xc0\xc7" " " "\xbe\xdf\xc3\xa4\xb9\xe7", /* 89 */
+ "\xb9\xab\xb5\xb5\xbd\xc7", /* 90 */
+ "\xb3\xdc\xc6\xaa" " " "\xba\xd0\xbc\xf6", /* 91 */
+ "\xbd\xba\xc0\xa7\xbd\xba\xbf\xeb\xba\xb4\xc0\xc7" " " ""
+ "\xc8\xa3\xbc\xf6", /* 92 */
+ "\xb9\xd9\xb4\xc3" "(" "\xbe\xb5\xb8\xf0\xbe\xf8\xc0\xbd" "!)", /* 93 */
+ "\xb0\xa1\xc0\xa7", /* 94 */
+ "\xc1\xbe\xc0\xcc", /* 95 */
+ "\xbf\xb9\xbc\xfa\xbf\xa1" " " "\xb0\xfc\xc7\xd1" " " ""
+ "\xb9\xae\xbc\xad", /* 96 */
+ "\xc0\xdb\xc0\xba" " " "\xbf\xad\xbc\xe8" " 1", /* 97 */
+ "\xba\xaf\xc7\xfc\xb5\xc8" " " "\xc1\xbe\xc0\xcc", /* 98 */
+ "\xc2\xf8\xbb\xf6\xc7\xd1" " " "\xc1\xbe\xc0\xcc", /* 99 */
+ "\xbb\xf3\xc0\xda\xc0\xc7" " " "\xc1\xbe\xc0\xcc", /* 100 */
+ "\xc8\xb2\xbd\xc7" " " "\xb0\xa1\xb0\xe8\xbf\xa1" " " ""
+ "\xb0\xfc\xc7\xd1" " " "\xb9\xae\xbc\xad", /* 101 */
+ "\xb9\xe0\xc7\xf4\xc1\xf8" " " "\xc3\xca", /* 102 */
+ "\xc3\xca", /* 103 */
+ "\xbf\xad\xbc\xe8", /* 104 */
+ "\xbd\xba\xc4\xc9\xc4\xa1" " " "\xb9\xad\xc0\xbd", /* 105 */
+ "\xbd\xba\xc4\xc9\xc4\xa1" " " "\xb9\xad\xc0\xbd", /* 106 */
+ "\xc0\xa7\xc1\xb6" " " "\xbd\xba\xc4\xc9\xc4\xa1", /* 107 */
+ "\xbb\xe7\xb4\xd9\xb8\xae", /* 108 */
+ "\xc6\xc4\xb1\xab\xb5\xc8" " " "\xbd\xba\xc4\xc9\xc4\xa1", /* 109 */
+ "\xba\xd7", /* 110 */
+ "\xc8\xb2\xb1\xdd\xbb\xf6" " " "\xba\xd7", /* 111 */
+ "\xba\xd3\xc0\xba\xbb\xf6" " " "\xba\xd7", /* 112 */
+ "\xb8\xf1\xc5\xba" " " "\xbf\xac\xc7\xca", /* 113 */
+ "\xc1\xbe\xc0\xcc", /* 114 */
+ "\xb0\xc7\xc3\xe0\xbf\xa1" " " "\xb0\xfc\xc7\xd1" " " ""
+ "\xb9\xae\xbc\xad", /* 115 */
+ "\xc0\xdb\xc0\xba" " " "\xbf\xad\xbc\xe8" " 2", /* 116 */
+ "\xbb\xe7\xbc\xf6" "(" "\xbe\xb5\xb8\xf0\xbe\xf8\xc0\xbd" "!)", /* 117 */
+ "\xc0\xbd\xbe\xc7" " " "\xbe\xc7\xba\xb8", /* 118 */
+ "\xb4\xe7\xb1\xb8" " " "\xc5\xa5", /* 119 */
+ "\xc7\xe3\xb0\xa1", /* 120 */
+ "\xb8\xde\xb4\xde" " " "\xba\xb9\xc1\xa6", /* 121 */
+ "\xb8\xde\xb4\xde\xc0\xcc" " " "\xc0\xd6\xb4\xc2" " " ""
+ "\xbc\xad\xb6\xf8", /* 122 */
+ "\xbe\xc6\xc6\xfa\xb7\xce" " " "\xc0\xdb\xc0\xba" " " ""
+ "\xb9\xae\xc0\xc7" " " "\xbf\xad\xbc\xe8", /* 123 */
+ "\xc0\xbd\xbd\xc4", /* 124 */
+ "\xc1\xbe\xb1\xb3\xbf\xa1" " " "\xb0\xfc\xc7\xd1" " " ""
+ "\xb9\xae\xbc\xad", /* 125 */
+ "\xbc\xf6\xbc\xf6\xb2\xb2\xb3\xa2", /* 126 */
+ "\xc5\xeb\xc4\xa1\xbf\xa1" " " "\xb0\xfc\xc7\xd1" " " ""
+ "\xb9\xae\xbc\xad", /* 127 */
+ "\xb1\xea\xc6\xe6", /* 128 */
+ "\xb8\xde\xb8\xf0", /* 129 */
+ "\xb8\xc1\xbf\xf8\xb0\xe6", /* 130 */
+ "\xba\xb8\xb9\xe6" " " "\xbc\xb3\xb0\xe8\xb5\xb5", /* 131 */
+ "\xba\xb8\xb9\xe6" " " "\xbc\xb3\xb0\xe8\xb5\xb5", /* 132 */
+ "\xb2\xf6", /* 133 */
+ "\xc1\xb6\xc6\xc7", /* 134 */
+ "\xc0\xdb\xc0\xba" " " "\xbf\xad\xbc\xe8" " 3", /* 135 */
+ "\xc0\xdb\xc0\xba" " " "\xbf\xad\xbc\xe8" " 4", /* 136 */
+ "\xba\xf1\xb8\xc1\xb7\xcf", /* 137 */
+ "\xbc\xba\xc0\xc7" " " "\xbc\xb3\xb0\xe8\xb5\xb5", /* 138 */
+ "\xbc\xba\xc0\xc7" " " "\xbc\xb3\xb0\xe8\xb5\xb5", /* 139 */
+ "\xb4\xd9\xb6\xf4\xb9\xe6" " " "\xbf\xad\xbc\xe8", /* 140 */
+ "\xbf\xec\xc8\xad", /* 141 */
+ "\xb9\xcc\xb7\xce\xc0\xc7" " " "\xbc\xb3\xb0\xe8\xb5\xb5", /* 142 */
+ "\xb5\xb5\xb1\xb8", /* 143 */
+ "\xbe\xe0", /* 144 */
+ "\xc3\xd0\xba\xd2" " " "\xb2\xf4\xb4\xc2" " " "\xb1\xe2\xb1\xb8", /* 145 */
+ "\xc1\xa6" "%d" "\xc0\xe5", /* 146 */
+ "\xc1\xb6\xbb\xe7\xb8\xa6", /* 147 */
+ /* These ones are not in messages but it's simpler */
+ "\xbf\xa9\xbf\xec\xbf\xcd \xb5\xce\xb7\xe7\xb9\xcc", /* 148/Epigraph */
+ nullptr, /* 149/Memo */
+ "\xbf\xcf\xba\xae\xc7\xd4\xbf\xa1 \xc0\xcc\xb8\xa3\xb4\xc2 "
+ "\xb0\xcd\xc0\xba \xb1\xb9\xbf\xd5\xc0\xc7 "
+ "\xb1\xc7\xb7\xc2\xbf\xa1 \xc0\xd6\xc1\xf6 \xbe\xca\xb4\xd9", /* 150/Bomb */
+};
+
+static char const *const versaillesKOpaintings[] = {
+ "\"" "\xb3\xeb\xbe\xc6\xc0\xc7" " " "\xb9\xe6\xc1\xd6\xb7\xce" " " ""
+ "\xb5\xe9\xbe\xee\xbf\xc0\xb4\xc2" " " ""
+ "\xb5\xbf\xb9\xb0\xb5\xe9\"\r\xc1\xa6\xb7\xd1\xb6\xf3\xb8\xf0" " " ""
+ "\xb9\xd9\xbb\xe7\xb3\xeb", /* 0: 41201 */
+ "\"" "\xbf\xa5\xb8\xb6\xbf\xec\xbd\xba\xc0\xc7" " " ""
+ "\xc0\xfa\xb3\xe1\xbd\xc4\xbb\xe7\"\r\xc0\xda\xc4\xda\xc6\xf7" " " ""
+ "\xb9\xd9\xbb\xe7\xb3\xeb", /* 1: 41202 */
+ "\"" "\xb1\xd7\xb8\xae\xbd\xba\xb5\xb5\xc0\xc7" " " ""
+ "\xb9\xdf\xb9\xd8\xbf\xa1" " " "\xc0\xd6\xb4\xc2" " " ""
+ "\xb8\xb7\xb4\xde\xb6\xf3" " " "\xb8\xb6\xb8\xae\xbe\xc6\"\r", /* 2: 41203 */
+ "\"" "\xb3\xeb\xbe\xc6\xc0\xc7" " " "\xb9\xe6\xc1\xd6\xb8\xa6" " " ""
+ "\xb6\xb0\xb3\xaa\xb8\xe7\"\r\xc1\xa6\xb7\xd1\xb6\xf3\xb8\xf0" " " ""
+ "\xb9\xd9\xbb\xe7\xb3\xeb", /* 3: 41204 */
+ "\"" "\xb9\xd9\xc0\xa7\xb8\xa6" " " ""
+ "\xb1\xfa\xb8\xe7\"\r\xc0\xda\xc4\xda\xc6\xf7" " " ""
+ "\xb9\xd9\xbb\xe7\xb3\xeb", /* 4: 41205 */
+ "\"" "\xbe\xc6\xb8\xa3\xba\xa7" "(Arbelles)" "\xc0\xc7" " " ""
+ "\xc0\xfc\xc5\xf5\"\r\xc1\xb6\xbc\xc1" " " ""
+ "\xc6\xc4\xb7\xce\xbc\xbf", /* 5: 41301 */
+ "\"" "\xbe\xcb\xb7\xba\xbb\xea\xb4\xf5" " " "\xb4\xeb\xbf\xd5" ", " ""
+ "\xbe\xc6\xb8\xa3\xba\xa7\xc0\xc7" " " ""
+ "\xc0\xfc\xc5\xf5\xbf\xa1\xbc\xad" " " ""
+ "\xb4\xd9\xb8\xae\xbf\xec\xbd\xba\xbf\xa1" " " "\xb4\xeb\xc7\xd1" ""
+ " " "\xbd\xc2\xb8\xae\"\r\xb8\xa3" " " ""
+ "\xba\xce\xb8\xa3\xb1\xcd\xb3\xf3", /* 6: 41302 */
+ "\"" "\xb7\xe7\xc0\xcc\xc1\xee" "(Leuze)" "\xc0\xc7" " " ""
+ "\xc0\xfc\xc5\xf5\"\r\xc1\xb6\xbc\xc1" " " ""
+ "\xc6\xc4\xb7\xce\xbc\xbf", /* 7: 42401 */
+ "\"" "\xb1\xe2\xba\xb8\xb9\xfd\xc0\xbb" " " ""
+ "\xb0\xa1\xc1\xf6\xb0\xed" " " "\xc0\xd6\xb4\xc2" " " ""
+ "\xc3\xb5\xbb\xe7\xbf\xcd" " " "\xc7\xd4\xb2\xb2" " " ""
+ "\xc0\xd6\xb4\xc2" " " "\xbc\xba" " " ""
+ "\xbc\xbc\xbd\xc7\xb8\xae\xbe\xc6\"\r" " " "\xc0\xcf" " " ""
+ "\xb5\xb5\xb8\xde\xb4\xcf\xc4\xa1\xb3\xeb", /* 8: 42901 */
+ "\"" "\xb8\xf9\xc4\xab\xb4\xd9\xc0\xc7" " " "\xb5\xbf" " " ""
+ "\xc7\xc1\xb6\xf5\xbd\xc3\xbd\xba\xc4\xda\"\r\xb9\xdd" " " ""
+ "\xb4\xd9\xc0\xcc\xc5\xa9", /* 9: 42902 */
+ "\"" "\xc0\xfe\xc0\xba" " " "\xbc\xbc\xb7\xca" " " ""
+ "\xbf\xe4\xc7\xd1\"\r\xc4\xab\xb6\xf3\xc4\xa1", /* 10: 42903 */
+ "\"" "\xbc\xba" " " ""
+ "\xb8\xb6\xc5\xc2\"\r\xb9\xdf\xb7\xbb\xc5\xb8\xc0\xce", /* 11: 42904 */
+ "\"" "\xc4\xc9\xbb\xe7\xb8\xa3\xbf\xa1\xb0\xd4" " " ""
+ "\xb3\xd1\xb0\xdc\xc1\xd6\xb8\xe7\"\r\xb9\xdf\xb7\xbb\xc5\xb8\xc0\xce",/* 12: 42905 */
+ "\"" "\xbc\xba" " " ""
+ "\xb4\xa9\xb0\xa1\"\r\xb9\xdf\xb7\xbb\xc5\xb8\xc0\xce", /* 13: 42906 */
+ "\"" "\xbc\xba" " " "\xb1\xee\xb6\xdf\xb8\xb0\xc0\xc7" " " ""
+ "\xbd\xc5\xba\xf1\xb7\xce\xbf\xee" " " ""
+ "\xb0\xe1\xc8\xa5\"\r\xbe\xcb\xb7\xb9\xbb\xea\xb5\xe5\xb7\xce" " " ""
+ "\xc5\xf5\xb8\xa3\xc4\xa1", /* 14: 42907 */
+ "\"" "\xb8\xb6\xbd\xc3\xb4\xc2" " " ""
+ "\xbb\xe7\xb6\xf7\xb5\xe9\xc0\xc7" " " ""
+ "\xb8\xf0\xc0\xd3\"\r\xb4\xcf\xc4\xdd\xb6\xf3\xbd\xba" " " ""
+ "\xb6\xd1\xb8\xa3\xb4\xcf\xbf\xa1", /* 15: 42908 */
+ "\"" "\xc1\xa1\xc0\xe5\xc0\xcc\"\r\xb9\xdf\xb7\xbb\xc5\xb8\xc0\xce", /* 16: 42909 */
+ "\"" "\xc7\xcf\xc7\xc1\xb8\xa6" " " ""
+ "\xbf\xac\xc1\xd6\xc7\xcf\xb4\xc2" " " ""
+ "\xb4\xd9\xc0\xad\xbf\xd5\"\r\xc0\xcf" " " ""
+ "\xb5\xb5\xb8\xde\xb4\xcf\xc4\xa1\xb3\xeb", /* 17: 42910 */
+ "\"" "\xb8\xb7\xb4\xde\xb6\xf3" " " ""
+ "\xb8\xb6\xb8\xae\xbe\xc6\"\r\xc0\xcf" " " ""
+ "\xb5\xb5\xb8\xde\xb4\xcf\xc4\xa1\xb3\xeb", /* 18: 42911 */
+ "\"" "\xc0\xda\xc8\xad\xbb\xf3\"\r\xb9\xdd" " " ""
+ "\xb4\xd9\xc0\xcc\xc5\xa9", /* 19: 42912 */
+ "\"" "\xc0\xfc\xb5\xb5\xc0\xda" " " "\xbc\xba" " " ""
+ "\xbf\xe4\xc7\xd1\"\r\xb9\xdf\xb7\xbb\xc5\xb8\xc0\xce", /* 20: 42913 */
+ "\"" "\xc3\xb5\xbb\xe7\xc0\xc7" " " "\xb5\xb5\xbf\xf2\xc0\xbb" " " ""
+ "\xb9\xde\xb4\xc2" " " ""
+ "\xc7\xcf\xb0\xa5\"\r\xc1\xf6\xbf\xc0\xb9\xd9\xb4\xcf" " " ""
+ "\xb6\xfb\xc7\xc1\xb6\xfb\xc4\xda", /* 21: 42914 */
+ "\"" "\xbc\xba" " " ""
+ "\xb8\xb6\xb0\xa1\"\r\xb9\xdf\xb7\xbb\xc5\xb8\xc0\xce", /* 22: 42915 */
+ "\"" "\xb9\xdf" " " "\xbe\xc6\xb7\xa1\xbf\xa1" " " ""
+ "\xc4\xae\xb8\xae\xb5\xbf\xc0\xc7" " " "\xb8\xe4\xb5\xc5\xc1\xf6" ""
+ " " "\xb8\xd3\xb8\xae\xb8\xa6" " " "\xb3\xf5\xc0\xba" " " ""
+ "\xb8\xe1\xb7\xb9\xbe\xc6\xb1\xd7\xb7\xce\xbd\xba\"\r\xc0\xda\xb2\xf4" ""
+ " " "\xb7\xe7\xbc\xd2", /* 23: 43090 */ /* BUG: Switched */
+ "\"" "\xb7\xce\xb8\xb6\xc0\xc7" " " "\xbf\xca\xc0\xbb" " " ""
+ "\xc0\xd4\xc0\xbb" " " "\xbf\xd5\"\r\xc0\xe5" " " ""
+ "\xbf\xcd\xb8\xb0" " ", /* 24: 43091 */
+ "\"" "\xbe\xc6\xc5\xbb\xb6\xf5\xc5\xb8\"\r\xc0\xda\xb2\xf4" " " ""
+ "\xb7\xe7\xbc\xd2", /* 25: 43092 */
+ "\"" "\xbe\xc8\xc5\xb0\xbc\xbc\xbd\xba\xb8\xa6" " " ""
+ "\xb5\xa5\xb7\xc1\xb0\xa1\xb4\xc2" " " ""
+ "\xbe\xc6\xbf\xa1\xb3\xd7\xc0\xcc\xbe\xc6\xbd\xba\"\r\xbd\xba\xc6\xc4\xb4\xd9",/* 26: 43100 */
+ "\"" "\xb4\xd9\xc0\xad\xb0\xfa" " " ""
+ "\xba\xa3\xb6\xdf\xbc\xbc\xb9\xd9\"\r\xb1\xb8\xc0\xcc\xb5\xb5" " " ""
+ "\xb7\xb9\xb4\xcf", /* 27: 43101 */
+ "\"" "\xc0\xcc\xc1\xfd\xc6\xae\xb7\xce\xc0\xc7" " " ""
+ "\xb5\xb5\xc1\xd6\"\r\xb1\xb8\xc0\xcc\xb5\xb5" " " ""
+ "\xb7\xb9\xb4\xcf", /* 28: 43102 */
+ "\"" "\xb8\xbb\xc0\xbb" " " "\xc5\xb8\xb0\xed" " " ""
+ "\xc0\xd6\xb4\xc2" " " "\xb7\xe7\xc0\xcc" " 14" ""
+ "\xbc\xbc\"\r\xc7\xc7\xbf\xa1\xb8\xa3" " " ""
+ "\xb9\xcc\xb3\xc4\xb5\xe5", /* 29: 43103 */
+ "\"" "\xb1\xb9\xbf\xd5\xc0\xc7" " " ""
+ "\xc0\xe5\xb4\xeb\xc7\xd4\xb0\xfa" " " "\xb9\xcc\xbc\xfa" "(" ""
+ "\xc7\xd0\xb1\xb3" ")" "\xc0\xc7" " " ""
+ "\xb9\xdf\xc0\xfc\"\r\xc8\xc4\xbe\xc6\xbd\xba", /* 30: 43104 */
+ "\"" "\xc0\xcc\xc7\xc7\xb0\xd4\xb4\xcf\xbe\xc6\xc0\xc7" " " ""
+ "\xc8\xf1\xbb\xfd\"\r\xbb\xfe\xb8\xa6" " " "\xb5\xe9" " " ""
+ "\xb6\xf3" " " "\xc6\xf7\xbd\xba", /* 31: 43130 */
+ "\"" "\xb7\xe7\xc0\xcc" " 14" "\xbc\xbc\xc0\xc7" " " ""
+ "\xc8\xe4\xbb\xf3\"\r\xba\xa3\xb8\xa3\xb4\xcf\xb4\xcf", /* 32: 43131 */
+ "\"" "\xb4\xd9\xc0\xcc\xbe\xc6\xb3\xaa\xb0\xa1" " " ""
+ "\xc0\xe1\xb5\xe9\xbe\xee\xc0\xd6\xb4\xc2" " " ""
+ "\xbf\xa3\xb5\xf0\xb9\xcc\xbf\xc2" "(" "\xb4\xde\xc0\xc7" " " ""
+ "\xbf\xa9\xbd\xc5" " Selene" "\xc0\xc7" " " ""
+ "\xbb\xe7\xb6\xfb\xc0\xbb" " " "\xb9\xde\xb4\xc2" " " ""
+ "\xbe\xe7\xc4\xa1\xb1\xe2" " " "\xb9\xcc\xbc\xd2\xb3\xe2" ")" ""
+ "\xc0\xbb" " " ""
+ "\xb9\xdf\xb0\xdf\xc7\xcf\xb4\xd9\"\r\xb0\xa1\xba\xea\xb8\xae\xbf\xa4" ""
+ " " "\xba\xed\xb6\xfb\xc2\xf7", /* 33: 43132 */
+ "\"" "\xbc\xba" " " "\xba\xa3\xb5\xe5\xb7\xce\xbf\xcd" " " ""
+ "\xb5\xbf\xc1\xa4\xb3\xe0" " " ""
+ "\xb8\xb6\xb8\xae\xbe\xc6\"\r\xc0\xcf" " " ""
+ "\xb1\xb8\xbf\xa1\xb8\xa3\xbd\xc3\xb3\xeb", /* 34: 43140 */
+ "\"" "\xbf\xa5\xb8\xb6\xbf\xec\xbd\xba\xbf\xa1\xbc\xad\xc0\xc7" " " ""
+ "\xbb\xe7\xb5\xb5\xb5\xe9\"\r\xba\xa3\xb7\xce\xb3\xd7\xc1\xee", /* 35: 43141 */
+ "\"" ""
+ "\xbd\xc5\xbc\xba\xb0\xa1\xc1\xb7\"\r\xba\xa3\xb7\xce\xb3\xd7\xc1\xee",/* 36: 43142 */
+ "\"" "\xbe\xcb\xb7\xba\xbb\xea\xb4\xf5\xc0\xc7" " " ""
+ "\xb9\xdf\xb9\xd8\xbf\xa1" " " "\xc0\xd6\xb4\xc2" " " ""
+ "\xb4\xd9\xb8\xae\xbf\xec\xbd\xba" " " ""
+ "\xb0\xa1\xc1\xb7\"\r\xbb\xfe\xb8\xa6" " " "\xb8\xa3" " " ""
+ "\xba\xea\xb7\xf8", /* 37: 43143 */
+ "\"" "\xbc\xbc\xb7\xca" " " ""
+ "\xbf\xe4\xc7\xd1\"\r\xb6\xf3\xc6\xc4\xbf\xa4", /* 38: 43144 */
+ "\"" "\xb8\xb6\xb8\xae" " " "\xb5\xe5" " " ""
+ "\xb8\xde\xb5\xf0\xc4\xa1\"\r\xb9\xdd" " " ""
+ "\xb4\xd9\xc0\xcc\xc5\xa9", /* 39: 43150 */
+ "\"" "\xbe\xc6\xc4\xcc\xb7\xce\xbf\xec\xbd\xba\xbf\xcd" " " ""
+ "\xbd\xce\xbf\xec\xb4\xc2" " " ""
+ "\xc7\xec\xb8\xa3\xc5\xa7\xb7\xb9\xbd\xba\"\r\xb1\xb8\xc0\xcc\xb5\xb5" ""
+ " " "\xb7\xb9\xb4\xcf", /* 40: 43151 */
+ "\"" "\xb5\xa5\xc0\xcc\xbe\xc6\xb3\xd7\xc0\xcc\xbe\xc6" "(" ""
+ "\xc7\xec\xb8\xa3\xc5\xa7\xb7\xb9\xbd\xba\xc0\xc7" " " ""
+ "\xbe\xc6\xb3\xbb" ")" "\xb8\xa6" " " ""
+ "\xbb\xaf\xbe\xc6\xb0\xa1\xb4\xc2" " " ""
+ "\xc4\xcb\xc5\xb8\xbf\xec\xb7\xce\xbd\xba" " " ""
+ "\xb3\xd7\xbc\xad\xbd\xba\"\r\xb1\xb8\xc0\xcc\xb5\xb5" " " ""
+ "\xb7\xb9\xb4\xcf", /* 41: 43152 */
+ "\"" "\xbc\xba\xc8\xe7" "(" "\xe1\xa1\xfd\xdd" ")" "\xc0\xbb" " " ""
+ "\xb9\xde\xc0\xba" " " "\xc8\xc4" " " "\xc0\xa7\xbe\xc8\xc0\xbb" " "
+ "" "\xb4\xc0\xb3\xa2\xb4\xc2" " " ""
+ "\xbe\xc6\xbd\xc3\xbd\xc3\xc0\xc7" " " "\xbc\xba" " " ""
+ "\xc7\xc1\xb6\xf5\xbd\xc3\xbd\xba\xc4\xda\"\r\xc1\xa6\xb0\xa1\xbd\xba",/* 42: 43153 */
+ "\"" "\xc4\xfb\xb7\xce\xbd\xba\xc0\xc7" " " ""
+ "\xb8\xd3\xb8\xae\xb8\xa6" " " "\xc7\xc7\xb7\xce" " " ""
+ "\xb9\xb0\xb5\xe9\xc0\xcc\xb4\xc2" " " ""
+ "\xc5\xe4\xb9\xcc\xb8\xae\xbd\xba\"\r\xb7\xe7\xba\xa5\xbd\xba", /* 43: 43154 */
+ "\"" "\xc8\xf7\xb5\xe5\xb6\xf3\xb8\xa6" " " ""
+ "\xc1\xd7\xc0\xcc\xb4\xc2" " " ""
+ "\xc7\xec\xb8\xa3\xc5\xa7\xb7\xb9\xbd\xba\"\r\xb1\xb8\xc0\xcc\xb5\xb5" ""
+ " " "\xb7\xb9\xb4\xcf", /* 44: 43155 */
+ "\"" "\xc8\xef\xba\xd0\xc7\xd1" " " ""
+ "\xc7\xec\xb8\xa3\xc5\xa7\xb7\xb9\xbd\xba\"\r\xb1\xb8\xc0\xcc\xb5\xb5" ""
+ " " "\xb7\xb9\xb4\xcf" " ", /* 45: 43156 */
+ "\"" "\xbb\xa1\xb6\xfb\xb6\xaf" " " "\xbf\xd5\xc0\xda\xbf\xcd" " " ""
+ "\xb1\xd7\xc0\xc7" " " "\xc7\xfc\xc1\xa6\xc0\xce" " " ""
+ "\xb7\xce\xba\xa3\xb8\xa3" " " "\xbf\xd5\xc1\xb6\xc0\xc7" " " ""
+ "\xc3\xca\xbb\xf3\xc8\xad\"\r\xb9\xdd" " " ""
+ "\xb4\xd9\xc0\xcc\xc5\xa9", /* 46: 43157 */
+ "\"" "\xbd\xca\xc0\xda\xb0\xa1\xbf\xa1" " " ""
+ "\xb8\xf8\xb9\xdb\xc7\xf4" " " "\xc0\xd6\xb4\xc2" " " ""
+ "\xb1\xd7\xb8\xae\xbd\xba\xb5\xb5\"\r\xbb\xfe\xb8\xa6" " " ""
+ "\xb8\xa3" " " "\xba\xea\xb7\xf8" " ", /* 47: 45260 */
+};
+
+static const Subtitle versaillesKOsubtitles[] = {
+ {
+ "a0_vf.hns", {
+ {
+ 75, "\xc5\xc2\xbe\xe7\xc0\xcc" " " "\xc0\xcf\xb3\xe2" " " ""
+ "\xc1\xdf\xbf\xa1\xbc\xad" " " "\xb0\xa1\xc0\xe5" " " ""
+ "\xb3\xf4\xc0\xcc" " " "\xb6\xb9\xc0\xbb" " " "\xb6\xa7"
+ },
+ {
+ 95, "\xbe\xcb\xbd\xc5" " " "\xb1\xc3\xc0\xfc\xb0\xfa" " " ""
+ "\xb0\xb0\xc0\xba"
+ },
+ {115, "\xba\xa3\xb8\xa3\xbb\xe7\xc0\xcc\xc0\xaf" " " "\xbc\xba\xc0\xba"},
+ {
+ 130, "\xc7\xcf\xb4\xc3\xbf\xa1\xbc\xad" " " ""
+ "\xba\xd2\xb2\xc9\xc3\xb3\xb7\xb3" " " ""
+ "\xc5\xb8\xbf\xc0\xb8\xa3\xb0\xed"
+ },
+ {
+ 150, "\xbe\xc6\xb9\xab\xb0\xcd\xb5\xb5" " " "\xb3\xb2\xc1\xf6" " " ""
+ "\xbe\xca\xc0\xb8\xb8\xae\xb6\xf3" "."
+ },
+ {180, ""},
+ {
+ 210, "\xb1\xb9\xbf\xd5\xb2\xb2\xbc\xad\xb4\xc2" " " "\xbe\xee\xb6\xb2" ""
+ " " "\xb9\xcc\xc4\xa3" " " "\xc0\xda\xc0\xc7" " " ""
+ "\xc1\xfe\xc0\xcc\xb6\xf3\xb0\xed" " " ""
+ "\xbb\xfd\xb0\xa2\xc7\xcf\xbd\xc5\xb4\xd9" ". " ""
+ "\xc0\xaf\xc4\xa1\xc7\xd1" " " "\xbb\xf3\xbb\xf3\xc0\xc7" " " ""
+ "\xb0\xe1\xb0\xfa\xb6\xf3\xb0\xed" "...."
+ },
+ {
+ 250, "\xb8\xf0\xb5\xe7" " " "\xb9\xab\xb8\xae\xb5\xe9\xb0\xfa" " " ""
+ "\xc7\xd4\xb2\xb2"
+ },
+ {
+ 270, "\xba\xc0\xb6\xa5\xc0\xbb" " " ""
+ "\xc7\xd8\xb9\xe6\xbd\xc3\xc5\xb0\xb7\xc1\xb4\xc2" " " ""
+ "\xbd\xc3\xb5\xb5\xb4\xc2" " "
+ },
+ {
+ 290, "\xb0\xe1\xb1\xb9" " " "\xbd\xc7\xc6\xd0\xc7\xd2" " " ""
+ "\xb0\xcd\xc0\xcc\xb4\xd9"
+ },
+ {
+ 310, "\xbd\xc3\xb0\xa3\xc0\xcc" " " "\xb4\xd9" " " ""
+ "\xb5\xc7\xbe\xfa\xb1\xe2\xbf\xa1"
+ },
+ {
+ 325, "\xb1\xd7\xb8\xae\xb0\xed" " " "\xb3\xaa\xb4\xc2" " " ""
+ "\xba\xb0\xc3\xb3\xb7\xb3" " " "\xba\xfb\xb3\xaa\xb4\xc2" " " ""
+ "\xbf\xd5\xbf\xa1\xb0\xd4" " " "\xb9\xdd\xc7\xd7\xc7\xd1\xb4\xd9"
+ },
+ {
+ 350, "\xbf\xd5\xc0\xc7" " " "\xc1\xd6\xc0\xa7\xb8\xa6" " " ""
+ "\xb5\xb5\xb4\xc2" " " "\xc7\xe0\xbc\xba\xb0\xfa"
+ },
+ {
+ 370, "\xc1\xa6\xb8\xf1\xb0\xfa" " " "\xc7\xa5\xc1\xa6\xb5\xe9" " " ""
+ "\xb1\xd7\xb8\xae\xb0\xed"
+ },
+ {
+ 390, "\xba\xd2\xc5\xb8\xb4\xc2" " " "\xc8\xb6\xba\xd2" " " ""
+ "\xbe\xc6\xb7\xa1" " " "\xb3\xaa\xc5\xb8\xb3\xaa\xb4\xc2"
+ },
+ {
+ 410, "\xc0\xcc\xbc\xd9\xc0\xc7" " " "\xbe\xcf\xc8\xa3\xb8\xa6" " " ""
+ "\xb0\xae\xb0\xed\xbc\xad"
+ },
+ {
+ 430, "\xb3\xaa\xb4\xc2" " " "\xbc\xf6\xbc\xf6\xb2\xb2\xb3\xa2\xbf\xcd" ""
+ " " "\xc0\xbd\xb8\xf0\xb8\xa6" " " ""
+ "\xc3\xa3\xbe\xc6\xb0\xa1\xb3\xeb\xb6\xf3"
+ },
+ {
+ 450, "\xc0\xcc\xb0\xc7" " " "\xb8\xb6\xc4\xa1" " " ""
+ "\xbf\xef\xba\xce\xc2\xa2\xb4\xc2" " " "\xbe\xee\xb6\xb2" " " ""
+ "\xc0\xbd\xb8\xf0\xc3\xb3\xb7\xb3" " " ""
+ "\xb5\xe9\xb8\xae\xb4\xc2\xb1\xba" "! " "\xb1\xb9\xbf\xd5\xc0\xbb" ""
+ " " "\xb8\xf0\xbc\xc5\xbe\xdf" " " "\xc7\xcf\xb1\xe2" " " ""
+ "\xb6\xa7\xb9\xae\xbf\xa1" " " "\xb3\xad" " " "\xc0\xcc" " " ""
+ "\xc0\xcf\xc0\xbb" " " "\xc1\xb6\xbb\xe7\xc7\xd2" " " "\xbc\xf6" " "
+ "" "\xbe\xf8\xb3\xd7" ". " "\xb6\xf3\xb6\xfb\xb5\xe5" ", " ""
+ "\xbb\xe7\xb0\xc7\xc0\xbb" " " "\xb8\xc3\xbe\xc6\xc1\xd6\xb0\xd4" ""
+ ". " "\xc4\xa7\xbd\xc7\xc0\xc7" " " ""
+ "\xbd\xc3\xc1\xbe\xc0\xb8\xb7\xce\xbc\xad" ", " ""
+ "\xb9\xe6\xc7\xd8\xb9\xde\xc1\xf6" " " "\xbe\xca\xb0\xed" " " ""
+ "\xbe\xee\xb5\xf0\xb5\xe7\xc1\xf6" " " "\xb0\xa5" " " "\xbc\xf6" " "
+ "" "\xc0\xd6\xb3\xd7" "."
+ },
+ {
+ 536, "\xc0\xda\xb3\xd9" " " "\xbc\xba" ", " "\xbb\xe7\xb6\xf7\xb5\xe9" ""
+ ", " "\xb1\xd7\xb8\xae\xb0\xed" " " "\xb0\xfc\xbd\xc0\xbf\xa1" " " ""
+ "\xb4\xeb\xc7\xd8" " " "\xc0\xdf" " " "\xbe\xcb\xb0\xed" " " ""
+ "\xc0\xd6\xc1\xf6" ". " "\xb0\xe8\xbc\xd3" " " ""
+ "\xc1\xfa\xb9\xae\xc0\xbb" " " "\xc7\xcf\xb0\xed" " " ""
+ "\xbc\xf6\xbb\xf3\xc7\xd1" " " "\xb0\xcd\xc0\xcc" " " ""
+ "\xb9\xdf\xb0\xdf\xb5\xc7\xb0\xc5\xb5\xe7" " " ""
+ "\xb3\xaa\xbf\xa1\xb0\xd4" " " "\xba\xb8\xb0\xed\xc7\xcf\xb0\xd4" ""
+ "."
+ },
+ {
+ 622, "\xc7\xcf\xc1\xf6\xb8\xb8" " " "\xc1\xb6\xbd\xc9\xc7\xcf\xb0\xd4" ""
+ "! " "\xbe\xee\xb6\xb2" " " "\xb9\xcc\xc4\xa3" " " ""
+ "\xc0\xdb\xc0\xda\xb0\xa1" " " "\xb1\xb9\xbf\xd5\xc0\xbb" " " ""
+ "\xbd\xc3\xc7\xd8\xc7\xcf\xb7\xc1\xc7\xd1\xb4\xd9\xb0\xed" " " ""
+ "\xbc\xd2\xb9\xae\xc0\xbb" " " ""
+ "\xc6\xdb\xb6\xdf\xb8\xae\xc1\xf6\xb4\xc2" " " "\xb8\xbb\xb0\xd4" ""
+ "! " "\xbc\xad\xb5\xce\xb8\xa3\xb0\xd4" ", " "\xb4\xdc" " " ""
+ "\xc7\xcf\xb7\xe7\xc0\xc7" " " "\xbd\xc3\xb0\xa3" " " ""
+ "\xb9\xdb\xbf\xa1\xb4\xc2" " " "\xbe\xf8\xbe\xee" "."
+ },
+ {690, "8" "\xbd\xc3" " " "\xb9\xdd\xc0\xcc\xb1\xba" "."},
+ }
+ }, /* a0_vf.hns */
+ {
+ "a1_vf.hns", {
+ {
+ 358, "\xc6\xf3\xc7\xcf" ", " "\xbd\xc3\xb0\xa3\xc0\xcc" " " ""
+ "\xb5\xc7\xbe\xfa\xbd\xc0\xb4\xcf\xb4\xd9" "."
+ },
+ {
+ 388, "\xb1\xb9\xbf\xd5\xc0\xcc" " " "\xc0\xe1\xbf\xa1\xbc\xad" " " ""
+ "\xb1\xfa\xc0\xda" ", " "\xc1\xd6\xc4\xa1\xc0\xc7\xc0\xce" " " ""
+ "\xb4\xd9\xb2\xa4\xc0\xcc" " " "\xb1\xd7\xc0\xc7" " " ""
+ "\xbe\xc8\xba\xce\xb8\xa6" " " "\xb9\xaf\xb4\xc2\xb4\xd9" "."
+ },
+ {
+ 440, "\xc6\xf3\xc7\xcf\xb2\xb2\xbc\xb1" " " "\xc0\xdf" " " ""
+ "\xc1\xd6\xb9\xab\xbc\xcc\xbd\xc0\xb4\xcf\xb1\xee" "? " ""
+ "\xb3\xca\xb9\xab" " " "\xb4\xfe\xc1\xf6\xb4\xc2" " " ""
+ "\xbe\xca\xbe\xd2\xbd\xc0\xb4\xcf\xb1\xee" "? " ""
+ "\xb8\xb6\xbb\xe7\xc1\xf6\xb8\xa6" " " ""
+ "\xb9\xde\xc0\xb8\xbd\xc3\xb0\xda\xbd\xc0\xb4\xcf\xb1\xee" "?"
+ },
+ {500, "\xb0\xed\xb8\xbf\xb1\xba" ", " "\xb4\xd9\xb2\xb7" "."},
+ {
+ 510, "\xc6\xf3\xc7\xcf\xb2\xb2\xbc\xb1" " " "\xc1\xf6\xb3\xad" " " ""
+ "\xb5\xce" " " "\xb4\xde\xb0\xa3" " " "\xbe\xc6\xc1\xd6" " " ""
+ "\xb0\xc7\xb0\xad\xc7\xcf\xbd\xca\xb4\xcf\xb4\xd9" "."
+ },
+ {550, ""},
+ {
+ 580, "\xba\xc0\xb6\xa5\xc0\xcc" " " "\xb1\xb9\xbf\xd5\xc0\xc7" " " ""
+ "\xbc\xd5\xc0\xbb" " " "\xbe\xc4\xb4\xc2" " " "\xb5\xbf\xbe\xc8" ""
+ ", " "\xb8\xc5\xc0\xcf" " " "\xbe\xc6\xc4\xa7" " " ""
+ "\xb1\xd7\xb7\xa8\xb4\xf8" " " "\xb0\xcd\xc3\xb3\xb7\xb3" " " ""
+ "\xb0\xa1\xc1\xb7\xc0\xcc" " " "\xb5\xb5\xc2\xf8\xc7\xd1\xb4\xd9" ""
+ ". " "\xb9\xab\xbd\xc3\xc0\xaf" ", " "\xb1\xb9\xbf\xd5\xc0\xc7" " " ""
+ "\xb5\xbf\xbb\xfd" ", " "\xb8\xf9\xbc\xbc\xb4\xba" ", " ""
+ "\xb5\xb5\xc6\xd8" ", " "\xb8\xc7\xb4\xc0" " " ""
+ "\xb0\xf8\xc0\xdb\xc0\xcc" " " "\xb1\xb9\xbf\xd5\xc0\xbb" " " ""
+ "\xbe\xcb\xc7\xf6\xc7\xcf\xb1\xe2" " " "\xc0\xa7\xc7\xd8" " " ""
+ "\xb5\xb5\xc2\xf8\xc7\xdf\xb4\xd9" "."
+ },
+ {713, ""},
+ {
+ 750, "\xc0\xda" ", " "\xb3\xbb" " " "\xbe\xc6\xb5\xe9\xbe\xc6" ", " ""
+ "\xbf\xc0\xb4\xc3" " " "\xbe\xc6\xc4\xa7\xbf\xa1\xb4\xc2" " " ""
+ "\xbe\xf0\xc1\xa6" " " "\xc0\xcc\xb8\xae" " " ""
+ "\xbb\xe7\xb3\xc9\xc0\xbb" " " "\xc7\xcf\xb7\xaf" " " ""
+ "\xb3\xaa\xbc\xb9\xb4\xc0\xb3\xc4" "?"
+ },
+ {795, ""},
+ }
+ }, /* a1_vf.hns */
+ {
+ "a2_vf.hns", {
+ {
+ 60, "\xbe\xc6\xb4\xd5\xb4\xcf\xb4\xd9" ". " "\xb4\xe7\xbd\xc5\xc0\xc7" ""
+ " " "\xc0\xdc\xc0\xce\xc7\xd1" " " "\xb9\xe6\xb9\xfd\xc0\xba" " " ""
+ "\xbf\xd5\xb1\xb9\xc0\xc7" " " "\xc6\xf2\xc8\xad\xb8\xa6" " " ""
+ "\xba\xb8\xc1\xb8\xc7\xd2" " " "\xbc\xf6" " " ""
+ "\xbe\xf8\xc0\xbb\xb0\xcc\xb4\xcf\xb4\xd9" "."
+ },
+ {
+ 74, "\xb4\xd9\xb8\xa5" " " "\xc0\xcc\xb5\xe9\xc0\xba" " " ""
+ "\xc8\xae\xbd\xc5\xc7\xcf\xb0\xed" " " "\xc0\xd6\xc1\xf6\xbf\xe4" ""
+ ", " "\xb1\xb9\xbf\xd5\xb2\xb2\xbc\xad" " " ""
+ "\xb5\xda\xb6\xf3\xb8\xa6" " " "\xc6\xf7\xb8\xa3\xbd\xba" " " ""
+ "\xb0\xf8\xc0\xdb\xbf\xa1\xb0\xd4" " " ""
+ "\xba\xb8\xb3\xbb\xb6\xf3\xb0\xed" " " ""
+ "\xb8\xbb\xbe\xb8\xc7\xcf\xbc\xcc\xb4\xd9\xb4\xc2" " " ""
+ "\xb0\xcd\xc0\xbb" "..."
+ },
+ {
+ 130, "\xbe\xc6\xb8\xb6\xb5\xb5" ", " "\xb1\xd7\xb4\xc2" " " "\xb1\xd7" ""
+ " " "\xb0\xf8\xc0\xdb\xc0\xc7" " " "\xb0\xb3\xc1\xbe\xc0\xbb" " " ""
+ "\xbe\xf2\xbe\xee\xb3\xbe" " " "\xbc\xf6" " " ""
+ "\xbe\xf8\xc0\xbb\xb0\xcc\xb4\xcf\xb4\xd9" "."
+ },
+ {160, ""},
+ {
+ 200, "\xb1\xb9\xbf\xd5\xc0\xc7" " " "\xbe\xc6\xc4\xa7" " " ""
+ "\xbf\xb9\xbd\xc4\xc0\xba" " " ""
+ "\xbc\xbc\xc1\xa4\xbd\xc4\xc0\xb8\xb7\xce" " " "\xb3\xa1\xc0\xbb" ""
+ " " "\xb8\xce\xb4\xc2\xb4\xd9" ". " "\xc3\xb9" " " ""
+ "\xb9\xe6\xb9\xae\xb0\xb4" " " "\xc1\xdf" " " ""
+ "\xc7\xe3\xb6\xf4\xb5\xc8" " " "\xbd\xc5\xc7\xcf\xb5\xe9" " " ""
+ "\xbe\xd5\xbf\xa1\xbc\xad" ", " "\xc0\xcc\xb9\xdf\xbb\xe7\xb4\xc2" ""
+ " " "\xb1\xb9\xbf\xd5\xc0\xc7" " " ""
+ "\xb8\xf6\xb4\xdc\xc0\xe5\xc0\xbb" " " "\xc7\xcf\xb0\xed" " " ""
+ "\xb0\xa1\xb9\xdf\xc0\xbb" " " "\xbe\xba\xbf\xee\xb4\xd9" "."
+ },
+ {307, ""},
+ {
+ 360, "\xb1\xd7\xb7\xaf\xb8\xe9" " " "\xbf\xb9\xba\xb9" " " ""
+ "\xc0\xc7\xbd\xc4\xc0\xbb" " " "\xc0\xa7\xc7\xd8" " " ""
+ "\xb1\xb9\xbf\xd5\xc0\xcc" " " "\xbb\xec\xb7\xd5\xc0\xb8\xb7\xce" ""
+ " " "\xb3\xaa\xb0\xa1\xb5\xb5\xb7\xcf" " " ""
+ "\xc1\xd8\xba\xf1\xb5\xc8\xb4\xd9" "."
+ },
+ {406, ""},
+ {
+ 440, "\xbd\xc2\xc0\xce\xb5\xc8" " " "\xbd\xc5\xc7\xcf\xb0\xa1" " " ""
+ "\xb1\xb9\xbf\xd5\xc0\xcc" " " "\xbe\xc6\xc4\xa7" " " ""
+ "\xbd\xc4\xbb\xe7\xb8\xa6" " " "\xc7\xcf\xb4\xc2" " " ""
+ "\xb5\xbf\xbe\xc8" " " "\xc7\xd4\xb2\xb2" " " "\xc7\xd1\xb4\xd9" ""
+ "."
+ },
+ {
+ 520, "\xb0\xa2\xc0\xda" " " "\xb1\xb9\xbf\xd5\xc0\xcc" " " ""
+ "\xc3\xc4\xb4\xd9\xba\xc1" " " "\xc1\xd6\xb1\xe2\xb8\xa6" " " ""
+ "\xb9\xd9\xb6\xf3\xb0\xed" " " "\xc0\xd6\xc0\xb8\xb8\xe7" ", " ""
+ "\xb1\xb9\xbf\xd5\xb2\xb2" " " "\xbe\xc8\xba\xce\xb8\xa6" " " ""
+ "\xbf\xa9\xc2\xe3\xb0\xed" ", " "\xb0\xa2\xc1\xbe" " " ""
+ "\xbc\xd2\xb9\xae\xc0\xbb" " " ""
+ "\xc6\xdb\xb6\xdf\xb8\xae\xb0\xc5\xb3\xaa" " " ""
+ "\xb5\xe8\xb4\xc2\xb4\xd9" "."
+ },
+ {
+ 600, "\xbd\xc3\xc1\xbe\xb5\xe9\xc0\xcc" " " "\xb1\xb9\xbf\xd5\xc0\xc7" ""
+ " " "\xb8\xe9\xb5\xb5\xb8\xa6" " " "\xc7\xd8\xc1\xd6\xb0\xed" " " ""
+ "\xbc\xd5\xc0\xbb" " " "\xbe\xc4\xbe\xee" " " "\xc1\xd6\xb0\xed" " "
+ "" "\xbf\xca\xc0\xbb" " " "\xc0\xd4\xc7\xf4" " " "\xc1\xd8\xb4\xd9" ""
+ ". " "\xc0\xcc\xb7\xb1" " " "\xb1\xb9\xbf\xd5\xc0\xc7" " " ""
+ "\xc0\xcf\xbb\xf3\xc0\xba" " " "\xbb\xe7\xb6\xf7\xb5\xe9" " " ""
+ "\xbe\xd5\xbf\xa1\xbc\xad" " " "\xc1\xf8\xc7\xe0\xb5\xc8\xb4\xd9" ""
+ ".."
+ },
+ {679, ""},
+ {
+ 815, "\xbf\xca\xc0\xbb" " " "\xc0\xd4\xc0\xba" " " "\xc8\xc4" ", " ""
+ "\xb1\xb9\xbf\xd5\xc0\xba" " " "\xc4\xa7\xbd\xc7\xb7\xce" " " ""
+ "\xb5\xb9\xbe\xc6\xb0\xa1" " " "\xb0\xa3\xb4\xdc\xc7\xd1" " " ""
+ "\xbe\xc6\xc4\xa7" " " "\xb1\xe2\xb5\xb5\xb8\xa6" " " ""
+ "\xb5\xe5\xb8\xb0\xb4\xd9" "."
+ },
+ {860, ""},
+ {
+ 948, "\xb1\xe2\xb5\xb5\xb8\xa6" " " "\xb5\xe5\xb8\xb0" " " "\xc8\xc4" ""
+ ", " "\xbd\xc5\xc7\xcf\xb5\xe9\xb0\xfa" " " "\xc7\xd4\xb2\xb2" " " ""
+ "\xb1\xb9\xbf\xd5\xc0\xba" " " "\xc8\xb8\xc0\xc7\xbd\xc7\xb7\xce" ""
+ " " "\xb0\xa1\xbc\xad" " " "\xbf\xd5\xb1\xb9\xbf\xa1" " " ""
+ "\xb0\xfc\xc7\xd1" " " "\xc0\xcf\xc0\xbb" " " ""
+ "\xb3\xed\xc0\xc7\xc7\xd1\xb4\xd9" "."
+ },
+ {1027, ""},
+ }
+ }, /* a2_vf.hns */
+ {
+ "a3_vf.hns", {
+ {
+ 30, "\xbf\xb9\xba\xb9" " " "\xc0\xc7\xbd\xc4\xc0\xcc" " " ""
+ "\xb3\xa1\xb3\xad" " " "\xc8\xc4" ", " "\xb1\xb9\xbf\xd5\xc0\xba" ""
+ " " "\xc8\xb8\xc0\xc7\xbd\xc7\xb7\xce" " " "\xb0\xa1\xbc\xad" " " ""
+ "\xbd\xc5\xc7\xcf\xb5\xe9\xb0\xfa" " " "\xc7\xd4\xb0\xd4" " " ""
+ "\xb1\xb9\xbb\xe7\xb8\xa6" " " "\xb4\xd9\xb7\xe7\xbe\xfa\xb4\xd9" ""
+ ". " "\xba\xf1\xb9\xd0\xc0\xbb" " " ""
+ "\xc0\xaf\xc1\xf6\xc7\xcf\xb1\xe2" " " "\xc0\xa7\xc7\xd8" " " ""
+ "\xc3\xe2\xc0\xd4\xc0\xcc" " " ""
+ "\xb1\xdd\xc1\xf6\xb5\xc7\xbe\xfa\xb4\xd9" "."
+ },
+ {
+ 110, "\xbd\xc5\xc7\xcf" " " "\xc1\xdf" " " "\xb0\xa1\xc0\xe5" " " ""
+ "\xc1\xdf\xbf\xe4\xc7\xd1" " " "\xc0\xce\xb9\xb0\xc0\xce" " " ""
+ "\xb7\xe7\xba\xce\xbe\xc6" " " "\xc8\xc4\xc0\xdb\xc0\xcc" " " ""
+ "\xc7\xcf\xb7\xe7\xc0\xc7" " " "\xc0\xc7\xc1\xa6\xb8\xa6" " " ""
+ "\xb0\xf8\xc1\xf6\xc7\xdf\xb4\xd9" "."
+ },
+ {211, ""},
+ {280, "\xb8\xf0\xb5\xce" " " "\xbe\xc9\xc0\xb8\xbd\xc3\xbf\xc0" "!"},
+ {
+ 290, "\xb1\xb9\xbf\xd5\xc0\xba" " " "\xbf\xa9\xb7\xaf" " " ""
+ "\xc0\xc7\xb0\xdf\xc0\xbb" " " "\xb5\xe8\xb0\xed" ", " ""
+ "\xb0\xe1\xc1\xa4\xc0\xbb" " " "\xb3\xbb\xb7\xc8\xb4\xd9" ". " ""
+ "\xc7\xd7\xbb\xf3" " " "\xb1\xd7\xb4\xc2" " " ""
+ "\xb1\xc7\xc0\xa7\xb8\xa6" " " "\xc0\xd2\xc1\xf6" " " ""
+ "\xbe\xca\xbe\xd2\xb4\xd9" "."
+ },
+ {
+ 360, "\xb1\xd7\xb5\xbf\xbe\xc8" " " "\xc1\xb6\xbd\xc5\xb5\xe9\xc0\xba" ""
+ " " "\xb1\xb9\xbf\xd5\xc0\xcc" " " "\xc8\xa6\xbf\xa1" " " ""
+ "\xb8\xf0\xbd\xc0\xc0\xbb" " " ""
+ "\xb5\xe5\xb7\xaf\xb3\xbb\xb1\xe2\xb8\xa6" " " ""
+ "\xb1\xe2\xb4\xd9\xb7\xc8\xb4\xd9" "."
+ },
+ {411, ""},
+ {
+ 440, "\xbf\xa9\xb7\xaf\xba\xd0" ", " "\xb1\xb9\xbf\xd5\xb2\xb2\xbc\xad" ""
+ " " "\xbf\xc0\xbc\xcc\xbd\xc0\xb4\xcf\xb4\xd9" "."
+ },
+ {450, ""},
+ {
+ 550, "\xc1\xa4\xbf\xc0\xb0\xa1" " " "\xb5\xc7\xbe\xfa\xb4\xd9" ". " ""
+ "\xb1\xb9\xbf\xd5\xc0\xba" " " "\xb9\xcc\xbb\xe7\xbf\xa1" " " ""
+ "\xc2\xfc\xbc\xae\xc7\xd1\xb4\xd9" ". " "\xc1\xb6\xbd\xc5\xc0\xba" ""
+ " " "\xb1\xd7" " " "\xb5\xda\xb8\xa6" " " ""
+ "\xb5\xfb\xb8\xa5\xb4\xd9" ". " "\xb1\xb9\xbf\xd5\xc0\xba" " " ""
+ "\xbf\xd5\xc0\xda\xbf\xcd" " " "\xb0\xf8\xc1\xd6\xbf\xcd" " " ""
+ "\xc7\xd4\xb2\xb2" " '" "\xc0\xa7\xb4\xeb\xc7\xd1" " " "\xb9\xe6" ""
+ "'" "\xc0\xbb" " " "\xb0\xa1\xb7\xce\xc1\xfa\xb7\xaf" " " ""
+ "\xbf\xb9\xb9\xe8\xb4\xe7\xc0\xb8\xb7\xce" " " ""
+ "\xc7\xe2\xc7\xd1\xb4\xd9" "."
+ },
+ {687, ""},
+ {
+ 728, "\xba\xce\xb5\xf0" " " "\xc0\xcc" " " "\xc5\xba\xbf\xf8\xc0\xbb" " "
+ "" "\xb5\xe9\xbe\xee\xc1\xd6\xbd\xca\xbd\xc3\xbf\xc0" ", " ""
+ "\xc6\xf3\xc7\xcf" ". " "\xc0\xdc\xc0\xce\xc7\xd1" " " ""
+ "\xbc\xd2\xbc\xdb\xc0\xc7" " " "\xc8\xf1\xbb\xfd\xb9\xb0\xc0\xcc" ""
+ " " "\xb5\xc8" " " "\xb3\xaa\xc0\xc7" " " ""
+ "\xc1\xb6\xc4\xab\xb8\xa6" " " "\xb4\xeb\xbd\xc5\xc7\xd8" " " ""
+ "\xb1\xb9\xbf\xd5\xb2\xb2" " " ""
+ "\xb0\xa3\xc3\xbb\xc7\xd5\xb4\xcf\xb4\xd9" "."
+ },
+ {805, "\xbe\xcb\xb0\xda\xb4\xd9" ", " "\xbe\xcb\xb0\xda\xb4\xd9" "...."},
+ {840, ""},
+ {
+ 1060, "\xb1\xb9\xbf\xd5\xc0\xba" " " "\xc8\xb2\xbd\xc7" " " ""
+ "\xb0\xb6\xb7\xaf\xb8\xae\xbf\xa1" " " ""
+ "\xc2\xfc\xbc\xae\xc7\xdf\xb0\xed" ", " "\xbf\xd5\xc0\xda\xbf\xcd" ""
+ " " "\xb0\xf8\xc1\xd6\xb0\xa1" " " "\xb1\xd7" " " ""
+ "\xb5\xda\xb8\xa6" " " "\xc0\xa7\xb0\xe8" " " ""
+ "\xc1\xfa\xbc\xad\xbf\xa1" " " "\xb5\xfb\xb6\xf3" " " ""
+ "\xc0\xda\xb8\xae\xc7\xdf\xb4\xd9" ". " "\xb1\xb9\xbf\xd5\xc0\xba" ""
+ " " "\xc0\xcc\xbe\xdf\xb1\xe2\xc7\xcf\xb4\xc2" " " ""
+ "\xb0\xcd\xc0\xbb" " " "\xb1\xdd\xc7\xdf\xb0\xed" " " ""
+ "\xb0\xe6\xb0\xc7\xc7\xcf\xb5\xb5\xb7\xcf" " " ""
+ "\xbf\xe4\xb1\xb8\xc7\xdf\xb4\xd9" "."
+ },
+ {1220, ""},
+ }
+ }, /* a3_vf.hns */
+ {
+ "a4_vf.hns", {
+ {
+ 90, "\xb9\xcc\xbb\xe7" " " "\xb5\xbf\xbe\xc8" ", " "\xc8\xb2\xbd\xc7" ""
+ " " "\xbd\xc4\xb4\xe7\xc0\xc7" " " "\xb0\xfc\xb8\xae\xc0\xda" ", " ""
+ "\xb0\xed\xb1\xe2" " " "\xb1\xc1\xb4\xc2" " " "\xbb\xe7\xb6\xf7" ""
+ ", " "\xbb\xa7" " " "\xb1\xc1\xb4\xc2" " " ""
+ "\xbb\xe7\xb6\xf7\xb0\xfa" " " "\xb1\xd7" " " ""
+ "\xba\xb8\xc1\xb6\xb5\xe9\xc0\xba" " " "\xb8\xb8\xc2\xf9\xc0\xbb" ""
+ " " "\xc1\xd8\xba\xf1\xc7\xcf\xb4\xc0\xb6\xf3" " " ""
+ "\xba\xd0\xc1\xd6\xc7\xdf\xb4\xd9" "."
+ },
+ {
+ 200, "\xc0\xfc\xbc\xb3\xc0\xfb\xc0\xce" " " "\xbd\xc4\xbf\xe5\xc0\xbb" ""
+ " " "\xb0\xa1\xc1\xf6\xb0\xed" " " "\xc0\xd6\xb4\xc2" " " ""
+ "\xb1\xba\xc1\xd6\xb0\xa1" " " "\xbc\xd5\xb4\xeb\xc1\xf6" " " ""
+ "\xbe\xca\xc0\xba" " " "\xc0\xbd\xbd\xc4\xc0\xba" " " ""
+ "\xb4\xd9\xb8\xa5" " " "\xc0\xcc\xb5\xe9\xc0\xcc" " " ""
+ "\xb8\xd4\xb0\xd4" " " "\xb5\xc9" " " "\xb0\xcd\xc0\xcc\xb0\xed" ""
+ ", " "\xba\xb8\xc5\xeb" " " "\xbb\xe7\xb6\xf7\xb5\xe9\xc0\xba" " " ""
+ "\xb1\xd7" " " "\xbd\xc4\xb4\xe7\xc0\xb8\xb7\xce\xba\xce\xc5\xcd" ""
+ " " "\xb3\xb2\xc0\xba" " " "\xb0\xcd\xc0\xbb" " " ""
+ "\xb1\xb8\xc0\xd4\xc7\xcf\xb4\xc2" " " "\xb0\xcd\xc0\xbb" " " ""
+ "\xb2\xa8\xb8\xae\xc1\xf6" " " "\xbe\xca\xbe\xd2\xb4\xd9" "."
+ },
+ {300, ""},
+ {
+ 320, "\xb8\xb9\xc0\xba" " " "\xbb\xe7\xb6\xf7\xb5\xe9\xc0\xcc" " " ""
+ "\xc2\xfc\xbc\xae\xc7\xd1" " " "\xb8\xb8\xc2\xf9\xc0\xba" " " ""
+ "\xb8\xf0\xb5\xe7" " " "\xc1\xb6\xbd\xc5\xb5\xe9\xc0\xcc" " " ""
+ "\xbc\xad\xb5\xd1\xb7\xaf" " " "\xc2\xfc\xbc\xae\xc7\xcf\xb4\xc2" ""
+ " " "\xb8\xda\xc1\xf8" " " ""
+ "\xc0\xe5\xb0\xfc\xc0\xcc\xbe\xfa\xb4\xd9" "."
+ },
+ {
+ 366, "\xbf\xa9\xb7\xaf\xba\xd0" ", " "\xb1\xb9\xbf\xd5\xb2\xb2\xbc\xad" ""
+ " " "\xbd\xc4\xbb\xe7\xc1\xdf\xc0\xcc\xbd\xca\xb4\xcf\xb4\xd9" "."
+ },
+ {393, ""},
+ {
+ 610, "\xbf\xc0\xc1\xf7" " " "\xc8\xb2\xbd\xc7" " " ""
+ "\xb0\xa1\xc1\xb7\xb5\xe9\xb8\xb8\xc0\xcc" " " ""
+ "\xb1\xb9\xbf\xd5\xc0\xc7" " " "\xc5\xd7\xc0\xcc\xba\xed\xbf\xa1" ""
+ " " "\xbe\xc9\xc0\xbb" " " "\xbc\xf6" " " ""
+ "\xc0\xd6\xbe\xfa\xb0\xed" ", " "\xb0\xf8\xc0\xdb" " " ""
+ "\xba\xce\xc0\xce\xb5\xe9\xb8\xb8\xc0\xcc" " " "\xb1\xd7" " " ""
+ "\xbe\xd5\xbf\xa1" " " "\xbe\xc9\xc0\xbb" " " "\xbc\xf6" " " ""
+ "\xc0\xd6\xbe\xfa\xb4\xd9" "."
+ },
+ {685, ""},
+ {
+ 705, "\xc0\xda" ", " "\xb3\xbb" " " "\xbe\xc6\xb5\xe9\xbe\xc6" ", " ""
+ "\xbf\xec\xb8\xae\xb8\xa6" " " "\xc0\xa7\xc7\xd1" " " ""
+ "\xc0\xdc\xc4\xa1\xb8\xa6" " " "\xc0\xdf" " " ""
+ "\xc1\xd8\xba\xf1\xc7\xcf\xb0\xed" " " "\xc0\xd6\xb4\xc0\xb3\xc4" ""
+ "?"
+ },
+ {747, ""},
+ {
+ 760, "\xb8\xb8\xc2\xf9" " " "\xb5\xbf\xbe\xc8" ", " ""
+ "\xbc\xbc\xb0\xa1\xc1\xf6" " " "\xc4\xda\xbd\xba\xb0\xa1" " " ""
+ "\xb0\xa2\xb0\xa2" " " "\xbf\xa9\xbc\xb8" " " ""
+ "\xc1\xa2\xbd\xc3\xbf\xa1" " " "\xb4\xe3\xb0\xdc\xc1\xae" " " ""
+ "\xc1\xa6\xb0\xf8\xb5\xc7\xbe\xfa\xb4\xd9" ": " ""
+ "\xbd\xba\xc7\xc1\xbf\xcd" " " "\xc1\xa6" "1" "\xc4\xda\xbd\xba" ""
+ ", " "\xb1\xb8\xbf\xee" " " "\xb0\xed\xb1\xe2\xbf\xcd" " " ""
+ "\xb5\xf0\xc0\xfa\xc6\xae" "..."
+ },
+ {847, ""},
+ }
+ }, /* a4_vf.hns */
+ {
+ "a5_vf.hns", {
+ {
+ 13, "\xb8\xb8\xc2\xf9" " " "\xc8\xc4\xbf\xa1\xb4\xc2" " " ""
+ "\xb0\xfa\xc0\xcf\xc0\xcc" ",..."
+ },
+ {36, ""},
+ {
+ 90, "..." "\xb1\xd7\xb7\xb1" " " "\xc8\xc4" " " ""
+ "\xb1\xb9\xbf\xd5\xc0\xba" " " "\xb1\xb9\xbb\xe7\xbf\xa1" " " ""
+ "\xb8\xee" " " "\xbd\xc3\xb0\xa3\xb5\xbf\xbe\xc8" " " ""
+ "\xc0\xfc\xb3\xe4\xc7\xdf\xb4\xd9" ". " "\xc0\xcc\xc1\xee\xc0\xbd" ""
+ " " "\xb8\xcd\xb6\xdf\xb3\xf3" " " ""
+ "\xc8\xc4\xc0\xdb\xba\xce\xc0\xce\xc0\xc7" " " ""
+ "\xb9\xe6\xbf\xa1\xbc\xad" " " "\xc1\xf7\xb9\xab\xb8\xa6" " " ""
+ "\xbc\xf6\xc7\xe0\xc7\xcf\xb4\xc2" " " "\xb0\xcd\xc0\xbb" " " ""
+ "\xc1\xc1\xbe\xc6\xc7\xdf\xb0\xed" ", " "\xc1\xbe\xc1\xbe" " " ""
+ "\xbd\xc5\xc7\xcf\xb5\xe9\xb0\xfa" " " "\xc7\xd4\xb2\xb2\xc0\xce" ""
+ " " "\xc3\xa4" " " "\xbc\xf6\xc7\xe0\xc7\xdf\xb4\xd9" "."
+ },
+ {
+ 200, "\xb1\xd7\xb0\xa1" " " "\xba\xf1\xb9\xd0\xbd\xba\xb7\xb4\xb0\xd4" ""
+ " " "\xb0\xe1\xc8\xa5\xc7\xd1" " " "\xb1\xd7\xb3\xe0\xc0\xc7" " " ""
+ "\xb0\xc5\xc3\xb3\xbf\xa1\xbc\xad" " " ""
+ "\xc0\xda\xbd\xc5\xbf\xa1\xb0\xd4" " " "\xc7\xca\xbf\xe4\xc7\xd1" ""
+ " " "\xc6\xf2\xc8\xad\xbf\xcd" " " ""
+ "\xc6\xf2\xbf\xc2\xc7\xd4\xc0\xbb" " " "\xbe\xf2\xc0\xbb" " " ""
+ "\xbc\xf6" " " "\xc0\xd6\xbe\xfa\xb4\xd9" "."
+ },
+ {296, ""},
+ {
+ 310, "\xbc\xbc" " " "\xbd\xc3\xb0\xa3" " " "\xb5\xbf\xbe\xc8" " " ""
+ "\xb1\xb9\xbf\xd5\xc0\xba" " " "\xbc\xad\xb7\xf9\xb8\xa6" " " ""
+ "\xbc\xbc\xb9\xd0\xc7\xcf\xb0\xd4" " " ""
+ "\xb0\xcb\xc5\xe4\xc7\xdf\xb4\xd9" "...."
+ },
+ {345, ""},
+ {
+ 360, "\xc4\xab\xb5\xe5\xb3\xee\xc0\xcc\xb4\xc2" " " ""
+ "\xbd\xc5\xc7\xcf\xb5\xe9\xbf\xa1\xb0\xd4" " " ""
+ "\xc0\xd6\xbe\xee\xbc\xad" ", " "\xb1\xba\xc1\xd6\xb8\xa6" " " ""
+ "\xb5\xfb\xb6\xf3\xb4\xd9\xb4\xcf\xc1\xf6" " " ""
+ "\xbe\xca\xbe\xc6\xb5\xb5" " " "\xb5\xc7\xb4\xc2" " " ""
+ "\xb5\xe5\xb9\xae" " " "\xbc\xf8\xb0\xa3" " " "\xc1\xdf" " " ""
+ "\xc7\xcf\xb3\xaa\xbf\xb4\xb4\xd9" ". " "\xbe\xee\xb6\xb2" " " ""
+ "\xc0\xcc\xb4\xc2" " " "\xbe\xc6\xc1\xd6" " " ""
+ "\xbf\xad\xc1\xa4\xc0\xfb\xc0\xb8\xb7\xce" " " ""
+ "\xc4\xab\xb5\xe5\xb3\xee\xc0\xcc\xb8\xa6" " " "\xc7\xdf\xb4\xd9" ""
+ "."
+ },
+ {
+ 460, "\xc4\xab\xb5\xe5" " " "\xc5\xd7\xc0\xcc\xba\xed\xc0\xba" " " ""
+ "\xc1\xa6\xb9\xfd" " " "\xbc\xf6\xc0\xd4\xc0\xbb" " " ""
+ "\xc1\xd6\xb1\xe2\xb5\xb5" " " "\xc7\xcf\xb4\xc2\xb5\xa5" ", " ""
+ "\xbe\xee\xb6\xb2" " " "\xc0\xcc\xb4\xc2" " " ""
+ "\xbc\xd3\xc0\xd3\xbc\xf6\xb8\xa6" " " "\xbd\xe1\xbc\xad" " " ""
+ "\xc8\xb2\xbd\xc7\xc0\xbb" " " ""
+ "\xba\xd2\xb8\xed\xbf\xb9\xbd\xba\xb7\xb4\xb0\xd4" " " ""
+ "\xc7\xcf\xb4\xc2" " " "\xb0\xcd\xb5\xb5" " " ""
+ "\xc1\xd6\xc0\xfa\xc7\xcf\xc1\xf6" " " "\xbe\xca\xbe\xd2\xb4\xd9" ""
+ "."
+ },
+ {560, ""},
+ {
+ 665, "\xb4\xd9\xb8\xa5" " " "\xc0\xcc\xb5\xe9\xc0\xba" " " ""
+ "\xb4\xe7\xb1\xb8\xbf\xcd" " " "\xb0\xb0\xc0\xcc" " " ""
+ "\xb1\xe2\xbc\xfa\xc0\xcc" " " "\xc7\xca\xbf\xe4\xc7\xd1" " " ""
+ "\xb0\xd4\xc0\xd3\xc0\xbb" " " "\xc7\xcf\xb1\xe2\xb5\xb5" " " ""
+ "\xc7\xcf\xc1\xf6\xb8\xb8" ", " "\xb0\xdd\xc1\xb6\xb3\xf4\xc0\xba" ""
+ " " "\xb4\xeb\xc8\xad\xbe\xdf\xb8\xbb\xb7\xce" " " ""
+ "\xba\xa3\xb8\xa3\xbb\xe7\xc0\xcc\xc0\xaf\xbf\xa1\xbc\xad" " " ""
+ "\xb0\xa1\xc0\xe5" " " "\xb3\xf4\xc0\xcc" " " ""
+ "\xc0\xce\xc1\xa4\xb9\xde\xb4\xc2" " " "\xb1\xe2\xbb\xdd" " " ""
+ "\xc1\xdf" " " "\xc7\xcf\xb3\xaa\xc0\xcc\xb4\xd9" "."
+ },
+ {766, ""},
+ }
+ }, /* a5_vf.hns */
+ {
+ "a6_vf.hns", {
+ {
+ 45, "\xbf\xc0\xc8\xc4" " " "\xb4\xd9\xbc\xb8\xbd\xc3\xb0\xa1" " " ""
+ "\xb4\xd9\xb0\xa1\xbf\xc0\xc0\xda" ", " "\xc1\xf7\xb9\xab\xb8\xa6" ""
+ " " "\xb8\xb6\xc4\xa3" " " "\xb1\xb9\xbf\xd5\xc0\xba" " " ""
+ "\xc1\xa4\xbf\xf8\xbf\xa1\xbc\xad" " " ""
+ "\xbb\xea\xc3\xa5\xc7\xcf\xb0\xed" " " "\xb0\xc7\xb9\xb0\xc0\xbb" ""
+ " " "\xb5\xd1\xb7\xaf\xba\xbb\xb4\xd9" "."
+ },
+ {
+ 90, "... " "\xb4\xeb\xb8\xae\xbc\xae" " " ""
+ "\xbe\xc8\xb6\xe3\xbf\xa1\xbc\xad" " " ""
+ "\xb1\xe2\xb4\xd9\xb8\xae\xb0\xed" " " "\xc0\xd6\xb4\xf8" " " ""
+ "\xbd\xc5\xc7\xcf\xb5\xe9\xb0\xfa" " " "\xc7\xd4\xb2\xb2" " " ""
+ "\xc7\xdf\xb4\xd9" "."
+ },
+ {160, ""},
+ {
+ 170, "\xb8\xee\xb8\xee" " " "\xc6\xaf\xba\xb0\xc7\xd1" " " ""
+ "\xc0\xcc\xb5\xe9\xb8\xb8\xc0\xcc" " " "\xb1\xb9\xbf\xd5\xb0\xfa" ""
+ " " "\xc7\xd4\xb2\xb2" " " "\xc7\xd2" " " "\xbc\xf6" " " ""
+ "\xc0\xd6\xbe\xfa\xb4\xd9" "."
+ },
+ {208, ""},
+ {
+ 295, "\xb1\xd7\xb5\xe9\xc0\xba" " " "\xbe\xc6\xb7\xa1\xc3\xfe\xc0\xc7" ""
+ " " "\xb0\xb6\xb7\xaf\xb8\xae\xb8\xa6" " " "\xc1\xf6\xb3\xaa" " " ""
+ "\xc5\xd7\xb6\xf3\xbd\xba\xb7\xce" " " "\xb1\xd7\xb8\xae\xb0\xed" ""
+ " " "\xb9\xb0\xc0\xc7" " " "\xc8\xad\xb4\xdc\xc0\xb8\xb7\xce" " " ""
+ "\xb3\xaa\xbe\xc6\xb0\xac\xb4\xd9" ". " "\xb1\xb9\xbf\xd5\xc0\xba" ""
+ " " "\xb1\xd7\xb0\xf7\xbf\xa1\xbc\xad" " " "\xbc\xba\xc0\xc7" " " ""
+ "\xbf\xdc\xb0\xfc\xc0\xbb" " " "\xb0\xa8\xbb\xf3\xc7\xcf\xb4\xc2" ""
+ " " "\xb0\xcd\xc0\xbb" " " "\xc1\xc1\xbe\xc6\xc7\xdf\xb4\xd9" "."
+ },
+ {
+ 430, "\xb0\xa8\xb1\xd6\xbf\xf8\xc0\xb8\xb7\xce\xba\xce\xc5\xcd" " " ""
+ "\xc4\xdd\xb7\xce\xb3\xaa\xb5\xe5\xb1\xee\xc1\xf6" ", " ""
+ "\xb1\xb9\xbf\xd5\xc0\xba" " " "\xc1\xf8\xc7\xe0\xc1\xdf\xc0\xce" ""
+ " " "\xbf\xa9\xb7\xaf" " " "\xc0\xdb\xc7\xb0\xc0\xbb" " " ""
+ "\xc2\xf7\xb7\xca\xc2\xf7\xb7\xca" " " ""
+ "\xbc\xbc\xb9\xd0\xc7\xcf\xb0\xd4" " " ""
+ "\xbb\xec\xc7\xc7\xbe\xfa\xb4\xd9" "."
+ },
+ {492, ""},
+ {
+ 945, "\xc0\xcc" " " "\xc7\xe0\xc2\xf7\xb4\xc2" " " "\xbc\xd2" " " ""
+ "\xba\xa3\xb4\xcf\xbd\xba\xbf\xa1\xbc\xad" " " "\xb3\xa1\xc0\xcc" ""
+ " " "\xb3\xad\xb4\xd9" ". " "\xb1\xb9\xbf\xd5\xc0\xba" " " ""
+ "\xc3\xd1\xb5\xb6\xc0\xc7" " " ""
+ "\xb5\xb5\xbd\xc3\xb7\xce\xba\xce\xc5\xcd" " " "\xbf\xc2" " " ""
+ "\xb0\xc5\xb7\xed\xb9\xe8\xb8\xa6" " " "\xb0\xa1\xc1\xf6\xb0\xed" ""
+ " " "\xc0\xd6\xb4\xc2\xb5\xa5" ", " "\xc1\xc1\xc0\xba" " " ""
+ "\xb3\xaf\xbe\xbe\xbf\xa1\xb4\xc2" " " "\xbf\xee\xc7\xcf\xc0\xc7" ""
+ " " "\xb8\xbc\xc0\xba" " " "\xb9\xb0\xc0\xa7\xb7\xce" ", " ""
+ "\xbd\xc5\xc7\xcf\xb5\xe9\xb0\xfa" " " "\xc7\xd4\xb2\xb2" " " ""
+ "\xc0\xcc" " " "\xb9\xe8\xb8\xa6" " " "\xc5\xb8\xb0\xed" " " ""
+ "\xb3\xaa\xbf\xc2\xb4\xd9" "."
+ },
+ }
+ }, /* a6_vf.hns */
+ {
+ "a7_vf.hns", {
+ {
+ 40, "\xc0\xdf" " " "\xbf\xad\xb7\xc1\xc1\xf8" " " "\xb4\xeb\xb7\xce" ""
+ ", " "\xbf\xa9\xb8\xa7" " " "\xc0\xfa\xb3\xe1\xbf\xa1\xb4\xc2" " " ""
+ "\xb1\xb9\xbf\xd5\xc0\xba" " " "\xb0\xf8\xbf\xf8\xc0\xc7" " " ""
+ "\xbd\xa3" " " "\xbc\xd3\xbf\xa1" " " "\xb8\xb6\xb7\xc3\xb5\xc8" " "
+ "" "\xb0\xa3\xb4\xdc\xc7\xd1" " " "\xbd\xc4\xbb\xe7\xb7\xce" " " ""
+ "\xc0\xfa\xb3\xe1\xc0\xbb" " " "\xb4\xeb\xbd\xc5\xc7\xd1\xb4\xd9"
+ },
+ {107, ""},
+ {
+ 198, "\xb9\xe3\xc0\xcc" " " "\xb1\xed\xbe\xee\xc1\xf6\xb0\xed" ", " ""
+ "\xb1\xb9\xbf\xd5\xc0\xcc" " " "\xc4\xa7\xbd\xc7\xbf\xa1" " " ""
+ "\xb5\xe9\xb8\xe9" " " "\xb8\xf0\xb5\xe7" " " "\xc0\xcc\xb0\xa1" " "
+ "" "\xbc\xba\xc0\xb8\xb7\xce" " " ""
+ "\xb5\xb9\xbe\xc6\xb0\xa3\xb4\xd9" "."
+ },
+ {245, ""},
+ {
+ 355, "\xba\xce\xc0\xce\xb5\xe9\xc0\xba" " " "\xb1\xb9\xbf\xd5\xc0\xcc" ""
+ " " "\xbe\xc6\xc4\xa7" " " "\xbf\xb9\xba\xb9" " " ""
+ "\xc0\xc7\xbd\xc4\xbf\xa1" " " "\xc3\xca\xb4\xeb\xb9\xde\xc1\xf6" ""
+ " " "\xb8\xf8\xc7\xdf\xb0\xed" ", " "\xc0\xfa\xb3\xe1" " " ""
+ "\xc4\xa7\xbd\xc7\xbf\xa1" " " "\xb5\xe5\xb4\xc2" " " ""
+ "\xc0\xc7\xbd\xc4\xbf\xa1\xb5\xb5" " " ""
+ "\xc3\xca\xb4\xeb\xb9\xde\xc1\xf6" " " ""
+ "\xb8\xf8\xc7\xcf\xbf\xb4\xb4\xd9" ". " "\xb1\xb9\xbf\xd5\xc0\xba" ""
+ " " "\xb1\xd7\xb5\xe9\xbf\xa1\xb0\xd4" " " ""
+ "\xbb\xec\xb7\xd5\xbf\xa1\xbc\xad" " " ""
+ "\xc0\xfa\xb3\xe1\xc0\xce\xbb\xe7\xb8\xa6" " " ""
+ "\xc7\xcf\xb5\xb5\xb7\xcf" " " "\xc7\xcf\xbf\xb4\xb4\xd9" "."
+ },
+ {442, ""},
+ {
+ 454, "\xc0\xcc" " " "\xc7\xcf\xc1\xf6\xc0\xc7" " " "\xb1\xe4" " " ""
+ "\xb9\xe3\xc0\xcc" " " "\xba\xce\xc0\xce\xb5\xe9\xc0\xc7" " " ""
+ "\xc8\xde\xbd\xc4\xc0\xbb" " " "\xc0\xa7\xc7\xd8" " " ""
+ "\xc3\xe6\xba\xd0\xc7\xcf\xb1\xe2\xb8\xa6" " " ""
+ "\xba\xf4\xb0\xda\xbd\xc0\xb4\xcf\xb4\xd9" "."
+ },
+ {512, ""},
+ {
+ 647, "\xb1\xd7\xb8\xae\xb0\xed" " " "\xc4\xa7\xbd\xc7\xb7\xce" " " ""
+ "\xb5\xe5\xb4\xc2" " " "\xc0\xc7\xbd\xc4\xc0\xcc" " " ""
+ "\xbd\xc3\xc0\xdb\xb5\xc8\xb4\xd9" ". " "\xbe\xc6\xc4\xa7" " " ""
+ "\xbf\xb9\xba\xb9" " " "\xc0\xc7\xbd\xc4\xbf\xa1" " " ""
+ "\xc2\xfc\xbc\xae\xc7\xd1" " " "\xbd\xc5\xc7\xcf\xb5\xe9\xc0\xba" ""
+ " " "\xc0\xcc\xb0\xf7\xbf\xa1\xb5\xb5" " " ""
+ "\xc2\xfc\xbc\xae\xc7\xcf\xb1\xe2\xb7\xce" " " ""
+ "\xb5\xc7\xbe\xee\xc0\xd6\xb4\xd9" "."
+ },
+ {722, ""},
+ {
+ 733, "\xb4\xa9\xb1\xb8\xbf\xa1\xb0\xd4" " " "\xc3\xd0\xb4\xeb\xb8\xa6" ""
+ " " "\xb5\xe9\xb0\xd4" " " "\xc7\xd2\xb1\xee\xbf\xe4" ", " ""
+ "\xc6\xf3\xc7\xcf" "?"
+ },
+ {763, ""},
+ {
+ 925, "\xb1\xb9\xbf\xd5\xc0\xba" " " "\xc0\xcf\xbb\xf3\xc0\xc7" " " ""
+ "\xc7\xe0\xc0\xa7\xb8\xa6" " " "\xb0\xed\xb1\xcd\xc7\xd1" " " ""
+ "\xc7\xe0\xc0\xa7\xb7\xce" " " "\xb9\xd9\xb2\xd9\xbe\xee" " " ""
+ "\xb3\xf5\xbe\xd2\xb4\xd9" ". " "\xc4\xa7\xbd\xc7\xb1\xee\xc1\xf6" ""
+ " " "\xc3\xd0\xb4\xeb\xb8\xa6" " " "\xb5\xe9\xb0\xed" " " ""
+ "\xb0\xa5" " " "\xbc\xf6" " " "\xc0\xd6\xb4\xc2" " " ""
+ "\xb1\xc7\xb8\xae\xb4\xc2" " " "\xc0\xaf\xb8\xed" " " ""
+ "\xc0\xce\xbb\xe7\xbf\xa1\xb0\xd4" " " ""
+ "\xc1\xd6\xbe\xee\xc1\xb3\xb0\xed" ", " "\xc1\xbe\xc1\xbe" " " ""
+ "\xb9\xe6\xb9\xae\xc7\xd1" " " ""
+ "\xbf\xdc\xb1\xb9\xc0\xce\xbf\xa1\xb0\xd4\xb5\xb5" " " ""
+ "\xc1\xd6\xbe\xee\xc1\xb3\xb4\xd9" "..."
+ },
+ {1048, ""},
+ {
+ 1060, "..." "\xb1\xd7\xb4\xc2" " " "\xc4\xa7\xbd\xc7\xb1\xee\xc1\xf6" " " ""
+ "\xb1\xb9\xbf\xd5\xb0\xfa" " " "\xc7\xd4\xb2\xb2" " " "\xb0\xa5" " "
+ "" "\xbc\xf6" " " "\xc0\xd6\xb4\xc2" " " "\xb1\xc7\xb8\xae\xb8\xa6" ""
+ " " "\xbe\xf2\xb0\xd4" " " "\xb5\xc8" " " ""
+ "\xb0\xcd\xc0\xcc\xb4\xd9" "."
+ },
+ {1100, ""},
+ {
+ 1115, "\xb1\xd7\xb7\xaf\xb3\xaa" " " "\xbf\xc0\xb4\xc3" " " ""
+ "\xbe\xc6\xc4\xa7" "...."
+ },
+ {1135, ""},
+ {
+ 1188, "\xb9\xdd\xbf\xaa\xc0\xcc\xb4\xd9" "! " ""
+ "\xb9\xdd\xbf\xaa\xc0\xcc\xbe\xdf" "! " "\xc0\xcc\xb8\xae" " " ""
+ "\xbf\xc0\xb0\xd4" ", " "\xb6\xf3\xb6\xfb\xb5\xe5" ", " "\xc0\xcc" ""
+ " " "\xb9\xcc\xc4\xa3" " " "\xc0\xda\xb8\xa6" " " ""
+ "\xb8\xb7\xb0\xd4" "!"
+ },
+ {
+ 1230, "\xbf\xa9\xb7\xaf\xba\xd0" ", " ""
+ "\xbd\xba\xb1\xee\xba\xfc\xb7\xbc\xb6\xf3" " " ""
+ "\xc8\xc4\xc0\xdb\xc0\xcc" " " ""
+ "\xc0\xfa\xb3\xe1\xc0\xce\xbb\xe7\xb8\xa6" " " ""
+ "\xb5\xe5\xb8\xb3\xb4\xcf\xb4\xd9" "."
+ },
+ }
+ }, /* a7_vf.hns */
+ {
+ "a8_vf.hns", {
+ {
+ 212, "\xb9\xcc\xc4\xa5\xb4\xeb\xb7\xce" " " "\xb9\xcc\xc4\xa3" " " ""
+ "\xc0\xda\xb0\xa1" " " "\xc0\xcc" " " "\xbc\xba\xc0\xbb" " " ""
+ "\xc6\xc4\xb1\xab\xc7\xcf\xb8\xae\xb6\xf3\xb0\xed" " " ""
+ "\xb4\xa9\xb0\xa1" " " "\xb2\xde\xbf\xa1\xb3\xaa" " " ""
+ "\xbb\xfd\xb0\xa2\xc7\xdf\xb0\xda\xb4\xc2\xb0\xa1" "? " ""
+ "\xb4\xe7\xbd\xc5\xc0\xba" " " "\xb4\xd9\xbd\xc3" " " ""
+ "\xbd\xc3\xc0\xdb\xc7\xd8\xbe\xdf" " " "\xc7\xd1\xb4\xd9" ". " ""
+ "\xc1\xf6\xb1\xdd" " " "\xb4\xe7\xc0\xe5" "."
+ },
+ {320, ""},
+ }
+ }, /* a8_vf.hns */
+ {
+ "a9_vf.hns", {
+ {
+ 30, "\xc0\xcc" " " "\xc0\xcf\xbf\xa1" " " "\xb4\xeb\xc7\xd1" " " ""
+ "\xc0\xda\xb3\xd7\xc0\xc7" " " "\xbf\xad\xc1\xa4\xc0\xbb" " " ""
+ "\xb1\xb9\xbf\xd5\xb2\xb2" " " "\xb8\xbb\xbe\xb8" " " ""
+ "\xb5\xe5\xb7\xc8\xb3\xd7" ", " "\xb6\xf3\xb6\xfb\xb5\xe5" ". " ""
+ "\xb1\xb9\xbf\xd5\xb2\xb2\xbc\xad\xb4\xc2" " " ""
+ "\xc0\xda\xb3\xd7\xb8\xa6" " " "\xb3\xf4\xc0\xcc" " " ""
+ "\xc6\xf2\xb0\xa1\xc7\xcf\xb0\xed" " " ""
+ "\xbd\xcd\xbe\xee\xc7\xcf\xbd\xc3\xb3\xd7" "."
+ },
+ {125, ""},
+ {
+ 200, "\xba\xc0\xb6\xa5\xc0\xba" " " "\xc0\xda\xb3\xd7\xb0\xa1" " " ""
+ "\xb0\xfc\xb0\xe8\xc7\xdf\xb4\xf8" " " "\xc0\xcf\xbf\xa1" " " ""
+ "\xb0\xfc\xc7\xd8" " " "\xbf\xec\xb8\xae\xbf\xa1\xb0\xd4" " " ""
+ "\xb8\xf0\xb5\xe7" " " "\xb0\xcd\xc0\xbb" " " ""
+ "\xb8\xbb\xc7\xdf\xb3\xd7" "."
+ },
+ {
+ 300, "\xbf\xc0\xb4\xc3" " " "\xc0\xcf\xc0\xbb" " " ""
+ "\xba\xb8\xb8\xe9\xbc\xad" " " "\xb8\xf0\xb5\xe7" " " ""
+ "\xb3\xeb\xbf\xa9\xbf\xf2\xc0\xcc" " " ""
+ "\xbb\xe7\xb6\xf3\xc1\xb3\xb3\xd7" ". " "\xbf\xc0\xb4\xc3" " " ""
+ "\xc0\xcf\xc0\xba" " " "\xb9\xe0\xc7\xf4\xc1\xf6\xb1\xe2" " " ""
+ "\xba\xb8\xb4\xd9\xb4\xc2" " " "\xbe\xee\xb5\xd2\xbc\xd3\xbf\xa1" ""
+ " " "\xb9\xaf\xc7\xf4\xc1\xae\xbe\xdf\xb8\xb8" " " ""
+ "\xc7\xcf\xb0\xda\xc1\xf6" "."
+ },
+ {
+ 400, "\xb8\xee\xb8\xee" " " "\xc0\xcc\xbb\xf3\xc7\xd1" " " ""
+ "\xc1\xa1\xc0\xcc" " " "\xb3\xb2\xbe\xc6\xc0\xd6\xb1\xe2\xb4\xc2" ""
+ " " "\xc7\xcf\xb3\xd7" ". " "\xc7\xcf\xc1\xf6\xb8\xb8" ", " ""
+ "\xc0\xda\xb3\xd7\xb0\xa1" " " "\xbe\xee\xb5\xf4" " " ""
+ "\xb0\xa1\xb5\xe7\xc1\xf6" ", " "\xbf\xec\xb8\xae\xc0\xc7" " " ""
+ "\xb4\xeb\xbb\xe7\xb7\xce" " " "\xb4\xeb\xc1\xa2\xb9\xde\xc0\xbb" ""
+ " " "\xb8\xb8\xc7\xd1" " " "\xc3\xe6\xba\xd0\xc7\xd1" " " ""
+ "\xc0\xda\xb0\xdd\xc0\xba" " " "\xc0\xd6\xb3\xd7" "."
+ },
+ {515, ""},
+ }
+ }, /* a9_vf.hns */
+};
+
static char const *const versaillesZTmessages[] = {
"\xa5\xd8\xab" "e" "\xb8" "T" "\xa4\xee\xb6" "}" "\xb1\xd2\xb3" "o" ""
"\xae\xb0\xaa\xf9\xa1" "C", /* 0 */
diff --git a/dists/engine-data/cryomni3d.dat b/dists/engine-data/cryomni3d.dat
index 4e28d4d476..918926b11e 100644
Binary files a/dists/engine-data/cryomni3d.dat and b/dists/engine-data/cryomni3d.dat differ
diff --git a/engines/cryomni3d/datstream.cpp b/engines/cryomni3d/datstream.cpp
index dd6e596365..3b6bda9b16 100644
--- a/engines/cryomni3d/datstream.cpp
+++ b/engines/cryomni3d/datstream.cpp
@@ -127,6 +127,8 @@ uint16 DATSeekableStream::translateLanguage(Common::Language lang) {
return MKTAG16('f', 'r');
case Common::IT_ITA:
return MKTAG16('i', 't');
+ case Common::KO_KOR:
+ return MKTAG16('k', 'o');
case Common::PT_BRA:
return MKTAG16('b', 'r');
case Common::ZH_TWN:
diff --git a/engines/cryomni3d/detection_tables.h b/engines/cryomni3d/detection_tables.h
index 6002955e5a..c67d4602a4 100644
--- a/engines/cryomni3d/detection_tables.h
+++ b/engines/cryomni3d/detection_tables.h
@@ -450,6 +450,40 @@ static const CryOmni3DGameDescription gameDescriptions[] = {
/* GF_VERSAILLES_FONTS_ | */ GF_VERSAILLES_AUDIOPADDING_YES,
},
+ // Versailles 1685
+ // Korean Windows compressed from DVD
+ // From lePhilousophe
+ {
+ {
+ "versailles",
+ "",
+ VERSAILLES_ENTRY_DEF("PROGRAM.Z", "ffb7599d042fb71f22ab4d76a2e0147f", 244155),
+ Common::KO_KOR,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUI_OPTIONS_VERSAILLES
+ },
+ GType_VERSAILLES,
+ /* GF_VERSAILLES_FONTS_ | */ GF_VERSAILLES_AUDIOPADDING_YES,
+ },
+
+ // Versailles 1685
+ // Korean Windows from DVD
+ // From lePhilousophe
+ {
+ {
+ "versailles",
+ "",
+ VERSAILLES_ENTRY_DEF("VERSAILL.EXE", "549c588e05df8d42b531ffc9b2796303", 355840),
+ Common::KO_KOR,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUI_OPTIONS_VERSAILLES
+ },
+ GType_VERSAILLES,
+ /* GF_VERSAILLES_FONTS_ | */ GF_VERSAILLES_AUDIOPADDING_YES,
+ },
+
{ AD_TABLE_END_MARKER, 0, 0 }
};
diff --git a/engines/cryomni3d/versailles/engine.cpp b/engines/cryomni3d/versailles/engine.cpp
index 499b382aeb..b4a11b17e1 100644
--- a/engines/cryomni3d/versailles/engine.cpp
+++ b/engines/cryomni3d/versailles/engine.cpp
@@ -292,6 +292,9 @@ void CryOmni3DEngine_Versailles::setupFonts() {
_fontManager.loadFonts(fonts, Common::kWindows950);
return;
+ } else if (getLanguage() == Common::KO_KOR) {
+ _fontManager.loadTTFList("FONTS_KR.LST", Common::kWindows949);
+ return;
}
// Code below is for SBCS encodings (ie. non CJK)
diff --git a/engines/cryomni3d/versailles/menus.cpp b/engines/cryomni3d/versailles/menus.cpp
index ada88fa317..94b2aac69d 100644
--- a/engines/cryomni3d/versailles/menus.cpp
+++ b/engines/cryomni3d/versailles/menus.cpp
@@ -49,6 +49,7 @@ void CryOmni3DEngine_Versailles::drawMenuTitle(Graphics::ManagedSurface *surface
int titleX, titleY, subtitleX, subtitleY;
if (getLanguage() == Common::FR_FRA ||
getLanguage() == Common::ES_ESP ||
+ getLanguage() == Common::KO_KOR ||
getLanguage() == Common::PT_BRA) {
titleX = 144;
titleY = 160;
@@ -82,6 +83,7 @@ void CryOmni3DEngine_Versailles::drawMenuTitle(Graphics::ManagedSurface *surface
if (getLanguage() == Common::FR_FRA ||
getLanguage() == Common::ES_ESP ||
+ getLanguage() == Common::KO_KOR ||
getLanguage() == Common::PT_BRA ||
getLanguage() == Common::ZH_TWN) {
surface->vLine(100, 146, 172, color);
Commit: 39f6d8e7ed55e95e29f83bf85e0b018b3af20d46
https://github.com/scummvm/scummvm/commit/39f6d8e7ed55e95e29f83bf85e0b018b3af20d46
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Add Japanese version of Versailles
Changed paths:
devtools/create_cryomni3d/create_cryomni3d_dat.cpp
devtools/create_cryomni3d/create_cryomni3d_dat.h
devtools/create_cryomni3d/versailles.cpp
devtools/create_cryomni3d/versailles.h
dists/engine-data/cryomni3d.dat
engines/cryomni3d/datstream.cpp
engines/cryomni3d/detection_tables.h
engines/cryomni3d/versailles/data.cpp
engines/cryomni3d/versailles/engine.cpp
engines/cryomni3d/versailles/menus.cpp
diff --git a/devtools/create_cryomni3d/create_cryomni3d_dat.cpp b/devtools/create_cryomni3d/create_cryomni3d_dat.cpp
index 6f862ab0e0..c25c9c2241 100644
--- a/devtools/create_cryomni3d/create_cryomni3d_dat.cpp
+++ b/devtools/create_cryomni3d/create_cryomni3d_dat.cpp
@@ -55,6 +55,7 @@ DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, DE)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, EN)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, ES)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, IT)
+DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, JA)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, KO)
DEFINE_GAME_PLATFORM_LANG_FUNCS(Versailles, ALL, ZT)
@@ -65,6 +66,7 @@ static Parts gamesParts[] = {
GAME_PLATFORM_LANG_PART(Versailles, ALL, EN),
GAME_PLATFORM_LANG_PART(Versailles, ALL, ES),
GAME_PLATFORM_LANG_PART(Versailles, ALL, IT),
+ GAME_PLATFORM_LANG_PART(Versailles, ALL, JA),
GAME_PLATFORM_LANG_PART(Versailles, ALL, KO),
GAME_PLATFORM_LANG_PART(Versailles, ALL, ZT),
};
diff --git a/devtools/create_cryomni3d/create_cryomni3d_dat.h b/devtools/create_cryomni3d/create_cryomni3d_dat.h
index 113288d0f1..47f77fb7d8 100644
--- a/devtools/create_cryomni3d/create_cryomni3d_dat.h
+++ b/devtools/create_cryomni3d/create_cryomni3d_dat.h
@@ -44,6 +44,7 @@ size_t writeGameHeader(FILE *f, uint32 gameId, uint16 version, uint16 lang, uint
#define LANG_ES MKTAG16('e', 's')
#define LANG_FR MKTAG16('f', 'r')
#define LANG_IT MKTAG16('i', 't')
+#define LANG_JA MKTAG16('j', 'a')
#define LANG_KO MKTAG16('k', 'o')
#define LANG_ZT MKTAG16('z', 't') // ZH_TWN
diff --git a/devtools/create_cryomni3d/versailles.cpp b/devtools/create_cryomni3d/versailles.cpp
index da4e61ce61..f476b8a2d1 100644
--- a/devtools/create_cryomni3d/versailles.cpp
+++ b/devtools/create_cryomni3d/versailles.cpp
@@ -102,6 +102,10 @@ size_t writeVersaillesSubtitles16(FILE *fp, Subtitle const *subtitles, uint16 el
size += writeString16(f, versailles ## lang ## EpilMsg); \
size += writeString16(f, versailles ## lang ## EpilPwd); \
\
+ if ((LANG_ ## lang == LANG_JA)) { \
+ assert(VERSAILLES_JA_BOMB_ALPHABET_SIZE + 1 == sizeof(versaillesJABombAlphabet)); \
+ size += writeString16(f, versaillesJABombAlphabet); \
+ } \
size += writeString16(f, versailles ## lang ## BombPwd); \
\
assert(VERSAILLES_MESSAGES_COUNT_CJK == ARRAYSIZE(versailles ## lang ## messages)); \
@@ -123,5 +127,6 @@ DEFINE_FUNCS(DE)
DEFINE_FUNCS(EN)
DEFINE_FUNCS(ES)
DEFINE_FUNCS(IT)
+DEFINE_FUNCS_CJK(JA)
DEFINE_FUNCS_CJK(KO)
DEFINE_FUNCS_CJK(ZT)
diff --git a/devtools/create_cryomni3d/versailles.h b/devtools/create_cryomni3d/versailles.h
index 30473eec3c..46bee5a7c5 100644
--- a/devtools/create_cryomni3d/versailles.h
+++ b/devtools/create_cryomni3d/versailles.h
@@ -82,6 +82,13 @@ static char const *const versaillesBRlocalizedFilenames[] = {
"credits.BR",
"LEB1_BR.WAV",
};
+static char const *const versaillesJAlocalizedFilenames[] = {
+ "DIALOG1.JP",
+ "tous_doc.JP",
+ "lien_doc.txt",
+ "credits.JP",
+ "LEB1_GB.WAV",
+};
static char const *const versaillesKOlocalizedFilenames[] = {
"DIALOG1.KR",
"tous_doc.KR",
@@ -109,6 +116,8 @@ static char const versaillesESEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT"
static char const versaillesESEpilPwd[] = "ELZORROYLAGRULLA";
static char const versaillesITEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT";
static char const versaillesITEpilPwd[] = "LEANATREEILCANE";
+static char const versaillesJAEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT";
+static char const versaillesJAEpilPwd[] = "FOXANDCRANE";
static char const versaillesKOEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT";
static char const versaillesKOEpilPwd[] = "FOXANDCRANE";
static char const versaillesZTEpilMsg[] = "FELIXFORTUNADIVINUMEXPLORATUMACTUIIT";
@@ -121,9 +130,120 @@ static char const versaillesDEBombPwd[] =
static char const versaillesENBombPwd[] = "IT IS NOT IN THE POWER OF KINGS TO ATTAIN PERFECTION";
static char const versaillesESBombPwd[] = "NO ES PODER DE REYES EL ALCANZAR LA PERFECCION";
static char const versaillesITBombPwd[] = "AI SOVRANI NON E DATO RAGGIUNGERE LA PERFEZIONE";
+static char const versaillesJABombPwd[] = "\203V\203A\203K\203\212\203m\203_\203\223\203J\203C"
+ "\203j\203C\203^\203c\203^\203m\203K\203R\203N\203I\203E\203^\203`\203j\203`\203J\203\211\203K"
+ "\203A\203\213\203R\203g\203j\203i\203\211\203i\203C\203m\203_";
+
static char const versaillesKOBombPwd[] = "IT IS NOT IN THE POWER OF KINGS TO ATTAIN PERFECTION";
static char const versaillesZTBombPwd[] = "IT IS NOT IN THE POWER OF KINGS TO ATTAIN PERFECTION";
+#define VERSAILLES_JA_BOMB_ALPHABET_SIZE 2490
+static char const versaillesJABombAlphabet[] =
+ "\202\323\202\255\202\353\202\244\202\306\221\274\202\314\222\271\202\275\202\277\210\253\202\242"
+ "\202\323\202\255\202\353\202\244\202\252\222\213\212\324\201A\222\271\202\275\202\277\202\360"
+ "\212l\202\350\202\311\217o\202\251\202\257\222\271\202\275\202\277\202\315\217W\202\334"
+ "\202\301\202\304\211\236\220\355\217X\202\255\202\267\202\254\202\270\224\374\202\265\202\267"
+ "\202\254\202\270\223\313\202\301\202\302\202\253\201A\220\330\202\350\227\364\202\253\201A"
+ "\215\217\202\361\202\305\202\277\202\254\202\351\227Y\214{\202\306\203_\203C\203A"
+ "\203\202\203\223\203h\227Y\214{\202\252\201A\345v\222\216\202\360\222T\202\265"
+ "\202\304\222n\226\312\202\360\214@\202\301\202\304\202\242\202\351\202\306\203_\203C"
+ "\203A\203\202\203\223\203h\202\360\214@\202\350\223\226\202\304\202\275\227Y\214{"
+ "\202\252\214\276\202\244\202\311\202\315\201A\202\261\202\361\202\310\220\316\202\261\202\353"
+ "\202\252\211\275\202\314\226\360\202\311\202\275\202\302\201H\224a\202\314\202\331\202\244"
+ "\202\252\202\334\202\276\202\334\202\265\202\310\202\314\202\311\224L\202\306\203l\203Y"
+ "\203~\224L\202\252\216\200\202\361\202\276\202\323\202\350\202\360\202\265\202\304\203l"
+ "\203Y\203~\202\360\202\275\202\255\202\263\202\361\225\337\202\334\202\246\202\275\202\340"
+ "\202\301\202\306\225\337\202\334\202\246\202\346\202\244\202\306\201A\217\254\224\236\225\262"
+ "\202\311\202\334\202\335\202\352\202\304\211B\202\352\202\304\202\242\202\351\202\306\224N"
+ "\212\361\202\350\203l\203Y\203~\202\252\225@\202\360\202\255\202\361\202\255\202\361"
+ "\224L\202\346\202\350\217\254\224\236\225\262\202\314\202\331\202\244\202\252\202\250\202\242"
+ "\202\265\202\273\202\244\202\276\227\263\202\306\202\342\202\267\202\350\227\263\202\252\202\342"
+ "\202\267\202\350\202\360\202\251\202\266\202\301\202\304\202\242\202\351\202\306\202\342\202\267"
+ "\202\350\202\252\220\324\226\332\202\314\227\263\202\311\220q\202\313\202\275\202\310\202\272"
+ "\214\343\220\346\202\340\215l\202\246\202\270\201A\341\222\341\233\202\360\213N\202\261"
+ "\202\265\202\304\226l\202\360\202\251\202\266\202\351\202\314\201H\214\253\202\242\202\240"
+ "\202\310\202\275\202\314\216\225\202\252\202\310\202\255\202\310\202\301\202\304\202\265\202\334"
+ "\202\244\202\346\202\253\202\302\202\313\202\306\222\337\202\253\202\302\202\313\202\252\222\337"
+ "\202\360\220H\216\226\202\311\217\265\202\242\202\304\225\275\202\327\202\301\202\275\202\242"
+ "\216M\202\311\223\374\202\352\202\304\217o\202\265\202\275\216\251\225\252\202\315\202\346"
+ "\202\276\202\352\202\360\202\275\202\347\202\265\202\310\202\252\202\347\216M\202\360\202\330"
+ "\202\353\202\330\202\353\232{\202\314\222\267\202\242\222\337\202\315\202\275\202\276\202\267"
+ "\202\267\202\351\202\276\202\257\201B\222\337\202\306\202\253\202\302\202\313\202\261\202\361"
+ "\202\307\202\315\222\337\202\252\202\253\202\302\202\313\202\360\217\265\202\242\202\304\215\327"
+ "\222\267\202\242\202\302\202\332\202\311\223\374\202\352\202\304\217o\202\265\202\275\222\337"
+ "\202\315\202\250\225\240\210\352\224t\220H\202\327\202\275\202\350\210\371\202\361\202\276"
+ "\202\350\202\251\202\255\202\265\202\304\225\234\217Q\202\315\220\213\202\260\202\347\202\352"
+ "\202\275\201B\216\223\214{\202\306\203q\203\210\203R\202\275\202\277\202\306\202\361"
+ "\202\321\202\252\227\326\202\360\202\251\202\242\202\304\224\362\202\361\202\305\202\242\202\351"
+ "\202\314\202\360\214\251\202\302\202\257\202\275\216\223\214{\202\240\202\355\202\304\202\304"
+ "\203q\203\210\203R\202\275\202\277\202\360\214{\217\254\211\256\202\326\202\265\202\251"
+ "\202\265\216\251\225\252\202\252\220H\202\327\202\347\202\352\202\304\202\240\202\355\202\352"
+ "\202\310\203q\203\210\203R\202\275\202\277\202\315\212O\202\326\202\340\217o\202\347"
+ "\202\352\202\270\201A\225\302\202\266\202\261\202\337\202\347\202\352\202\275\202\334\202\334"
+ "\230V\202\242\202\304\202\242\202\255\201B\230T\202\306\222\337\230T\202\252\215\234"
+ "\202\360\202\314\202\335\202\261\202\361\202\305\201A\202\314\202\307\202\311\216h\202\263"
+ "\202\301\202\304\222\311\202\255\202\304\202\275\202\334\202\347\202\310\202\242\202\273\202\261"
+ "\202\305\222\337\202\311\201A\202\250\212\350\202\242\202\276\202\251\202\347\202\261\202\314"
+ "\215\234\202\360\202\306\202\301\202\304\202\277\202\345\202\244\202\276\202\242\201A\202\273"
+ "\202\314\202\251\202\355\202\350\215\234\202\360\202\306\202\301\202\304\202\340\202\347\202\301"
+ "\202\304\202\340\214N\202\314\202\261\202\306\202\360\220H\202\327\202\275\202\350\202\265"
+ "\202\310\202\242\202\251\202\347\230T\202\315\201A\202\273\202\244\214\276\202\242\202\310"
+ "\202\252\202\347\202\340\202\323\202\255\202\352\202\301\226\312\221\351\202\306\217\254\222\271"
+ "\202\275\202\277\221\351\202\252\217\254\222\271\202\275\202\277\202\360\220H\216\226\202\311"
+ "\217\265\202\242\202\275\222a\220\266\223\372\202\314\202\250\217j\202\242\202\360\202\267"
+ "\202\351\202\251\202\347\221\201\202\255\227\210\202\304\211\272\202\263\202\242\217\254\222\271"
+ "\202\275\202\277\202\252\217W\202\334\202\301\202\304\217j\202\242\202\314\220\310\202\311"
+ "\202\302\202\255\202\306\221\351\202\315\202\267\202\256\202\263\202\334\217P\202\242\202\251"
+ "\202\251\202\350\201A\202\262\202\277\202\273\202\244\202\311\202\240\202\350\202\302\202\242"
+ "\202\275\202\251\202\246\202\351\202\306\203W\203\205\203s\203^\201[\211\244\227l"
+ "\202\276\202\346\201A\202\306\203W\203\205\203s\203^\201[\202\252\202\255\202\352"
+ "\202\275\212\333\221\276\202\315\221\345\202\265\202\275\225\250\202\266\202\341\202\310\202\251"
+ "\202\301\202\275\202\306\202\251\202\246\202\351\202\275\202\277\202\315\203K\201[\203K"
+ "\201[\225\266\213\345\202\316\202\251\202\350\202\273\202\261\202\305\203W\203\205\203s"
+ "\203^\201[\202\315\203R\203E\203m\203g\203\212\202\360\202\302\202\251\202\355"
+ "\202\265\202\304\202\251\202\246\202\351\202\275\202\277\202\360\202\335\202\361\202\310\220H"
+ "\202\327\202\263\202\271\202\275\230h\202\306\202\244\202\263\202\254\202\306\202\251\202\324"
+ "\202\306\222\216\230h\202\252\202\244\202\263\202\254\202\360\202\302\202\251\202\334\202\246"
+ "\202\275\202\244\202\263\202\254\202\314\227F\222B\202\314\202\251\202\324\202\306\222\216"
+ "\202\252\201A\202\307\202\244\202\251\202\244\202\263\202\254\202\360\217\225\202\257\202\304"
+ "\202\342\202\301\202\304\211\272\202\263\202\242\202\265\202\251\202\265\230h\202\315\202\244"
+ "\202\263\202\254\202\360\220H\202\327\202\304\202\265\202\334\202\242\202\251\202\324\202\306"
+ "\222\216\202\315\230h\202\360\215\246\202\361\202\305\201A\230h\202\314\216Y\202\361"
+ "\202\276\227\221\202\360\221S\225\224\225\262\201X\202\311\215\323\202\242\202\304\202\265"
+ "\202\334\202\301\202\275\203l\203Y\203~\202\306\224L\202\306\217\254\202\263\202\310"
+ "\227Y\214{\216q\203l\203Y\203~\202\252\202\250\225\352\202\263\202\361\202\311"
+ "\201A\202\332\202\255\202\315\227Y\214{\202\315\202\253\202\347\202\242\202\276\202\257"
+ "\202\307\224L\202\315\221\345\215D\202\253\202\267\202\351\202\306\202\250\225\352\202\263"
+ "\202\361\202\315\201A\211\275\202\360\214\276\202\244\202\314\202\250\202\277\202\321\202\277"
+ "\202\341\202\361\201A\224L\202\315\216\204\202\275\202\277\202\360\220H\202\327\202\304"
+ "\202\240\202\361\202\310\202\311\221\276\202\301\202\304\202\251\202\301\202\261\202\346\202\255"
+ "\202\310\202\301\202\275\202\314\202\346\202\305\202\340\227Y\214{\202\252\202\342\202\271"
+ "\202\304\212i\215D\202\252\210\253\202\242\202\314\202\315\201A\216\204\202\275\202\277"
+ "\203l\203Y\203~\202\360\202\302\202\251\202\334\202\246\202\347\202\352\202\310\202\242"
+ "\202\251\202\347\202\310\202\314\202\346\224\222\222\271\202\306\203R\203E\203m\203g"
+ "\203\212\224\222\222\271\202\252\220\205\225\323\202\305\224\374\202\265\202\242\220\272\202\305"
+ "\211\314\202\301\202\304\202\242\202\351\202\306\202\307\202\244\202\265\202\304\211\314\202\301"
+ "\202\304\202\242\202\351\202\314\201H\202\306\222m\202\350\202\275\202\252\202\350\211\256"
+ "\202\314\203R\203E\203m\203g\203\212\202\276\202\301\202\304\216\204\202\315\202\340"
+ "\202\244\202\267\202\256\216\200\202\312\202\361\202\276\202\301\202\304\214\374\202\261\202\244"
+ "\202\251\202\347\202\242\202\242\222m\202\347\202\271\202\252\223\315\202\242\202\275\202\361"
+ "\202\305\202\267\202\340\202\314\202\250\202\250\202\251\202\335\202\306\222\244\221\234\214\216"
+ "\202\314\214\365\202\305\201A\222\244\221\234\202\252\223\256\202\242\202\275\202\346\202\244"
+ "\202\311\214\251\202\246\202\275\202\314\202\305\201A\202\250\202\250\202\251\202\335\202\315"
+ "\225\337\202\334\202\246\202\346\202\244\202\306\220g\215\\\202\246\202\275\202\305\202\340"
+ "\216c\224O\202\310\202\252\202\347\222\244\221\234\202\311\202\315\220\316\202\314\221\314"
+ "\202\360\223\256\202\251\202\267\202\275\202\337\202\314\220S\202\340\202\310\202\242\202\265"
+ "\212\264\217\356\202\340\202\310\202\242\201A\215l\202\246\202\340\217\356\224M\202\340"
+ "\201A\210\244\202\340\202\310\202\242\202\240\202\320\202\351\202\306\203X\203p\203j"
+ "\203G\203\213\214\242\203X\203p\203j\203G\203\213\214\242\202\252\226\260\202\301"
+ "\202\304\202\242\202\351\203A\203q\203\213\202\311\202\251\202\335\202\302\202\261\202\244"
+ "\202\306\202\267\202\351\202\306\203A\203q\203\213\202\315\202\267\202\316\202\342\202\255"
+ "\223\246\202\260\202\304\203K\201[\203K\201[\226\302\202\253\202\310\202\252\202\347"
+ "\214\242\202\360\202\261\202\244\224l\202\301\202\275\216\251\225\252\202\314\216\350\202\311"
+ "\223\315\202\251\202\310\202\242\202\340\202\314\202\360\222\307\202\242\202\251\202\257\202\351"
+ "\202\310\202\361\202\304\201A\214N\202\315\211\275\202\304\202\244\202\312\202\332\202\352"
+ "\202\342\202\305\202\250\202\353\202\251\216\322\202\310\202\361\202\276";
+
#define VERSAILLES_MESSAGES_COUNT 146
#define VERSAILLES_MESSAGES_COUNT_CJK 151
#define VERSAILLES_PAINTINGS_COUNT 48
@@ -1425,6 +1545,1122 @@ static char const *const versaillesITpaintings[] = {
"\"Cristo calato dalla Croce\"\rCharles Lebrun", /* 47: 45260 */
};
+static char const *const versaillesJAmessages[] = {
+ "\x8d\xa1\x82\xb1\x82\xcc\x83" "h" "\x83" "A" "\x82\xf0\x8a" "J" ""
+ "\x82\xaf\x82\xe9\x82\xb1\x82\xc6\x82\xcd\x8b\xd6\x82\xb6\x82\xe7\x82\xea\x82\xc4\x82\xa2\x82\xdc\x82\xb7\x81" ""
+ "B", /* 0 */
+ "\x82\xb1\x82\xcc\x83" "h" "\x83" "A" ""
+ "\x82\xc9\x82\xcd\x8c\xae\x82\xaa\x82\xa9\x82\xa9\x82\xc1\x82\xc4\x82\xa2\x82\xdc\x82\xb7\x81" ""
+ "B", /* 1 */
+ "\x82\xb1\x82\xcc\x83" "h" "\x83" "A" ""
+ "\x82\xc9\x82\xcd\x8c\xae\x82\xaa\x82\xa9\x82\xa9\x82\xc1\x82\xc4\x82\xa2\x82\xdc\x82\xb7\x81" ""
+ "B", /* 2 */
+ "\x82\xb1\x82\xcc\x88\xf8\x82\xab\x8f" "o" ""
+ "\x82\xb5\x82\xcd\x8b\xf3\x82\xc5\x82\xb7\x81" "B", /* 3 */
+ "\x8e\xe8\x82\xaa\x93\xcd\x82\xab\x82\xdc\x82\xb9\x82\xf1\x81" "B", /* 4 */
+ "\x82\xb1\x82\xcc\x83" "I" "\x83\x8c\x83\x93\x83" "W" ""
+ "\x82\xcc\x96\xd8\x82\xc9\x82\xcd\x89\xbd\x82\xe0\x82\xa0\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81" ""
+ "B ", /* 5 */
+ "\x82\xb1\x82\xea\x82\xcd\x83" "I" "\x83\x8c\x83\x93\x83" "W" ""
+ "\x82\xcc\x96\xd8\x82\xc5\x82\xcd\x82\xa0\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81" ""
+ "I ", /* 6 */
+ "\x88\xc3\x82\xb7\x82\xac\x82\xdc\x82\xb7\x81" "B", /* 7 */
+ "\""
+ "\x82\xb1\x82\xcc\x94\xa0\x82\xc9\x82\xcd\x8c\xae\x82\xaa\x82\xa9\x82\xa9\x82\xc1\x82\xc4\x82\xa2\x82\xdc\x82\xb7\x81" ""
+ "B ", /* 8 */
+ "\x82\xb1\x82\xcc\x83" "h" "\x83" "A" "\x82\xcd\x8a" "J" ""
+ "\x82\xab\x82\xdc\x82\xb7\x81" "B ", /* 9 */
+ "\x94\x9a\x92" "e" ""
+ "\x82\xc9\x82\xbd\x82\xc7\x82\xe8\x82\xc2\x82\xad\x82\xbd\x82\xdf\x82\xc9\x82\xcd\x81" ""
+ "A" "\x89\xbd\x82\xa9\x82\xaa\x95" "K" "\x97" "v" ""
+ "\x82\xc5\x82\xb7\x81" "B ", /* 10 */
+ "\x82\xb1\x82\xcc\x89\xd4\x95" "r" ""
+ "\x82\xcd\x8b\xf3\x82\xc5\x82\xb7\x81" "B ", /* 11 */
+ "\x82\xe0\x82\xa4\x92\xca\x82\xea\x82\xdc\x82\xb7\x81" "B ", /* 12 */
+ "\x8b" "{" "\x92\xec\x82\xcc\x82\xb1\x82\xc6\x82\xf0\x8a" "w" ""
+ "\x82\xf1\x82\xc5\x82\xa2\x82\xe9\x8e\x9e\x8a\xd4\x82\xcd\x82\xa0\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81" ""
+ "I ", /* 13 */
+ "\x8a" "G" ""
+ "\x82\xf0\x8c\xa9\x82\xe9\x82\xc9\x82\xcd\x82\xe0\x82\xa4\x92" "x" ""
+ "\x82\xb7\x82\xac\x82\xdc\x82\xb7\x81" "B", /* 14 */
+ "\x91\xd2\x82\xbf\x82\xc8\x82\xb3\x82\xa2\x81" "I" ""
+ "\x88\xc4\x93\xe0\x90" "l" ""
+ "\x82\xc9\x93\xe4\x82\xc6\x82\xab\x82\xcc\x8e\xe8\x82\xaa\x82\xa9\x82\xe8\x82\xf0\x93" ""
+ "n" "\x82\xb5\x82\xc8\x82\xb3\x82\xa2\x81" "B ", /* 15 */
+ "\""
+ "\x83\x81\x83\x82\x82\xc9\x82\xcd\x8e\xe8\x82\xaa\x93\xcd\x82\xab\x82\xdc\x82\xb9\x82\xf1\x81" ""
+ "B ", /* 16 */
+ "\x96\xf2\x8d\xdc\x8e" "t" ""
+ "\x82\xcc\x82\xc6\x82\xb1\x82\xeb\x82\xd6\x81" "B", /* 17 */
+ "\x8c" "x" "\x8d\x90" ":" ""
+ "\x82\xa0\x82\xc8\x82\xbd\x82\xcd\x82\xb1\x82\xcc\x83\x8c\x83" "x" ""
+ "\x83\x8b\x82\xcc\x8f" "I" ""
+ "\x82\xed\x82\xe8\x82\xdc\x82\xc5\x82\xcd\x8d" "s" ""
+ "\x82\xad\x82\xb1\x82\xc6\x82\xaa\x82\xc5\x82\xab\x82\xdc\x82\xb7\x82\xaa\x81" ""
+ "A" ""
+ "\x82\xbb\x82\xcc\x90\xe6\x82\xf0\x91\xb1\x82\xaf\x82\xe9\x82\xbd\x82\xdf\x82\xc9\x95" ""
+ "K" "\x97" "v" "\x82\xc8\x91" "S" "\x82\xc4\x82\xcc\x83" "A" "\x83" ""
+ "N" "\x83" "V" "\x83\x87\x83\x93\x82\xf0\x8d" "s" ""
+ "\x82\xa2\x82\xdc\x82\xb9\x82\xf1\x82\xc5\x82\xb5\x82\xbd\x81" "B" ""
+ "\x8d\xa1\x83" "Q" "\x81" "[" ""
+ "\x83\x80\x82\xf0\x95\xdb\x91\xb6\x82\xb7\x82\xe9\x82\xb1\x82\xc6\x82\xf0\x82\xa8\x8a\xa9\x82\xdf\x82\xb5\x82\xdc\x82\xb7\x81" ""
+ "B", /* 18 */
+ "\x8c" "x" "\x8d\x90" ":" ""
+ "\x82\xa0\x82\xc8\x82\xbd\x82\xcd\x82\xb1\x82\xcc\x83\x8c\x83" "x" ""
+ "\x83\x8b\x82\xcc\x8f" "I" ""
+ "\x82\xed\x82\xe8\x82\xdc\x82\xc5\x82\xcd\x8d" "s" ""
+ "\x82\xad\x82\xb1\x82\xc6\x82\xaa\x82\xc5\x82\xab\x82\xdc\x82\xb7\x82\xaa\x81" ""
+ "A" ""
+ "\x82\xbb\x82\xcc\x90\xe6\x82\xf0\x91\xb1\x82\xaf\x82\xe9\x82\xbd\x82\xdf\x82\xc9\x95" ""
+ "K" "\x97" "v" "\x82\xc8\x91" "S" "\x82\xc4\x82\xcc\x83" "A" "\x83" ""
+ "N" "\x83" "V" "\x83\x87\x83\x93\x82\xf0\x8d" "s" ""
+ "\x82\xed\x82\xc8\x82\xa9\x82\xc1\x82\xbd\x82\xa9\x82\xe0\x82\xb5\x82\xea\x82\xdc\x82\xb9\x82\xf1\x81" ""
+ "B" "\x8d\xa1\x83" "Q" "\x81" "[" ""
+ "\x83\x80\x82\xf0\x95\xdb\x91\xb6\x82\xb7\x82\xe9\x82\xb1\x82\xc6\x82\xf0\x82\xa8\x8a\xa9\x82\xdf\x82\xb5\x82\xdc\x82\xb7\x81" ""
+ "B", /* 19 */
+ "\x92\xf2\x8e" "q" "\x82\xf0\x89" "^" ""
+ "\x82\xf1\x82\xc5\x82\xa2\x82\xe9\x8a\xd4\x82\xcd\x81" "A" ""
+ "\x93\xae\x82\xab\x82\xdc\x82\xed\x82\xe9\x82\xb1\x82\xc6\x82\xcd\x82\xc5\x82\xab\x82\xdc\x82\xb9\x82\xf1\x81" ""
+ "I ", /* 20 */
+ "\x82\xb1\x82\xb1\x82\xc9\x82\xcd\x81" "A" ""
+ "\x91\xbc\x82\xc9\x89\xbd\x82\xe0\x82\xa0\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81" ""
+ "B", /* 21 */
+ "\x82\xb3\x82\xe6\x82\xa4\x82\xc8\x82\xe7" "...", /* 22 */
+ "\x83\x94\x83" "F" "\x83\x8b\x83" "T" "\x83" "C" "\x83\x86", /* 23 */
+ "\x91" "_" "\x82\xed\x82\xea\x82\xbd\x8b" "{" "\x93" "a", /* 24 */
+ "\x8e\x91\x97\xbf\x83" "]" "\x81" "[" ""
+ "\x83\x93\x82\xc5\x92\xb2\x82\xd7\x82\xe9", /* 25 */
+ " " "\x82\xb1\x82\xcc\x83" "Q" "\x81" "[" ""
+ "\x83\x80\x82\xf0\x91\xb1\x82\xaf\x82\xe9", /* 26 */
+ " " "\x90" "V" "\x82\xbd\x82\xc9\x83" "Q" "\x81" "[" ""
+ "\x83\x80\x82\xf0\x8e" "n" "\x82\xdf\x82\xe9" " ", /* 27 */
+ " " "\x83" "Q" "\x81" "[" "\x83\x80\x82\xf0\x83\x8d\x81" ""
+ "[" "\x83" "h" "\x82\xb7\x82\xe9", /* 28 */
+ " " "\x83" "Q" "\x81" "[" "\x83\x80\x82\xf0\x83" "Z" ""
+ "\x81" "[" "\x83" "u" "\x82\xb7\x82\xe9", /* 29 */
+ " " "\x8e\x9a\x96\x8b\x95\\\x8e\xa6" ": YES", /* 30 */
+ " " "\x8e\x9a\x96\x8b\x95\\\x8e\xa6" ": NO", /* 31 */
+ " " "\x89\xb9\x8a" "y: YES", /* 32 */
+ " " "\x89\xb9\x8a" "y: NO", /* 33 */
+ " " "\x89\xb9\x8a" "y" ""
+ "\x82\xcc\x82\xa4\x82\xbf\x88\xea\x8b\xc8\x82\xf0\x83" "n" "\x81" ""
+ "[" "\x83" "h" "\x83" "f" "\x83" "B" "\x83" "X" "\x83" "N" ""
+ "\x82\xd6" " (20 MB)", /* 34 */
+ " " "\x89\xb9\x8a" "y" "\x82\xcd\x91" "S" "\x82\xc4\x83" ""
+ "n" "\x81" "[" "\x83" "h" "\x83" "f" "\x83" "B" "\x83" "X" "\x83" ""
+ "N" "\x82\xd6" " (92 MB)", /* 35 */
+ " " "\x89\xb9\x8a" "y" "\x82\xcd\x83" "n" "\x81" "[" ""
+ "\x83" "h" "\x83" "f" "\x83" "B" "\x83" "X" "\x83" "N" ""
+ "\x82\xd6\x93\xfc\x82\xea\x82\xc8\x82\xa2" " ", /* 36 */
+ nullptr, /* 37 */
+ nullptr, /* 38 */
+ "\x83" "{" "\x83\x8a\x83\x85\x81" "[" "\x83\x80", /* 39 */
+ "\x83" "Q" "\x81" "[" "\x83\x80\x82\xf0\x82\xe2\x82\xdf\x82\xe9", /* 40 */
+ "", /* 41 */
+ "\x8f\xe9\x8a\xd9\x82\xf0\x96" "K" "\x82\xcb\x82\xe9", /* 42 */
+ "\x83" "N" "\x83\x8c\x83" "W" "\x83" "b" "\x83" "g", /* 43 */
+ " " ""
+ "\x82\xb1\x82\xcc\x8f\xea\x96\xca\x82\xf0\x91\xb1\x82\xaf\x82\xe9", /* 44 */
+ " " ""
+ "\x82\xb1\x82\xcc\x8f\xea\x96\xca\x82\xf0\x95\xdb\x91\xb6\x82\xb7\x82\xe9",/* 45 */
+ " " ""
+ "\x82\xb1\x82\xcc\x8f\xea\x96\xca\x82\xf0\x83\x8d\x81" "[" "\x83" ""
+ "h" "\x82\xb7\x82\xe9", /* 46 */
+ nullptr, /* 47 */
+ " Omni3D: " "\x95" "W" "\x8f\x80", /* 48 */
+ " Omni3D: " "\x92\xe1\x91\xac", /* 49 */
+ " Omni3D: " "\x92\xb4\x92\xe1\x91\xac", /* 50 */
+ " Omni3D: " "\x8d\x82\x91\xac", /* 51 */
+ " Omni3D: " "\x92\xb4\x8d\x82\x91\xac", /* 52 */
+ "\x82" "n" "\x82" "j", /* 53 */
+ "\x83" "L" "\x83\x83\x83\x93\x83" "Z" "\x83\x8b", /* 54 */
+ "\x83" "t" "\x83\x8a\x81" "[", /* 55 */
+ "\x96\xbc\x91" "O" "\x82\xc8\x82\xb5" " ", /* 56 */
+ "\x8c" "x" "\x8d\x90\x81" "F" "\x82\xb1\x82\xcc\x83" "Q" "\x81" "[" ""
+ "\x83\x80\x82\xf0\x8f" "I" "\x97\xb9\x82\xb5\x82\xdc\x82\xb7", /* 57 */
+ "\x83\x8a\x83" "^" "\x81" "[" "\x83\x93", /* 58 */
+ "\x8f\xe9\x8a\xd9", /* 59 */
+ "\x83\x81\x83" "C" "\x83\x93\x83\x81\x83" "j" "\x83\x85\x81" "[" ""
+ "\x82\xc9\x96\xdf\x82\xe9", /* 60 */
+ "\x8e\x91\x97\xbf\x83" "]" "\x81" "[" "\x83\x93\x82\xcc\x97" "v" ""
+ "\x96\xf1", /* 61 */
+ "\x8f\xe9\x8a\xd9\x82\xc6\x92\xeb\x89\x80\x82\xcc\x92" "n" "\x90" ""
+ "}", /* 62 */
+ "\""
+ "\x8f\xe9\x8a\xd9\x82\xcc\x93\xe0\x95\x94\x8c\xa9\x8e\xe6\x82\xe8\x90" ""
+ "}", /* 63 */
+ "\x83" "n" "\x81" "[" "\x83" "h" "\x83" "f" "\x83" "B" "\x83" "X" ""
+ "\x83" "N" ""
+ "\x82\xc9\x8f\x91\x82\xab\x8d\x9e\x82\xdd\x82\xaa\x82\xc5\x82\xab\x82\xdc\x82\xb9\x82\xf1" ""
+ ": " "\x83" "f" "\x83" "B" "\x83" "X" "\x83" "N" ""
+ "\x82\xcd\x82\xa2\x82\xc1\x82\xcf\x82\xa2\x82\xc5\x82\xb7", /* 64 */
+ nullptr, /* 65 */
+ "CD" "\x82\xf0\x91" "}" ""
+ "\x93\xfc\x82\xb5\x82\xc4\x89\xba\x82\xb3\x82\xa2", /* 66 */
+ "%d CD" "\x82\xf0\x91" "}" "\x93\xfc\x82\xb5\x81" "A" ""
+ "\x89\xbd\x82\xa9\x83" "L" "\x81" "[" ""
+ "\x82\xf0\x89\x9f\x82\xb5\x82\xc4\x89\xba\x82\xb3\x82\xa2\x81" "B", /* 67 */
+ "\x94\xfc\x8f" "p", /* 68 */
+ "\x93\x9d\x8e\xa1", /* 69 */
+ "\x8b" "{" "\x92\xec", /* 70 */
+ "\x8f\xe9\x8a\xd9\x82\xc5\x82\xcc\x90\xb6\x8a\x88", /* 71 */
+ "\x8f\xe9\x8a\xd9\x82\xc6\x92\xeb\x89\x80", /* 72 */
+ "\x94" "N" "\x95\\", /* 73 */
+ "\x83" "A" "\x83" "|" "\x83\x8d\x83\x93\x82\xcc\x90\xf2\x90\x85", /* 74 */
+ "\x8f\xe9\x8a\xd9", /* 75 */
+ "\x97\xf1\x92\x8c", /* 76 */
+ "\x96\xc0\x98" "H", /* 77 */
+ "\x83\x89\x83" "g" "\x81" "[" "\x83" "k" "\x82\xcc\x90\xf2\x90\x85", /* 78 */
+ "\x83" "I" "\x83\x89\x83\x93\x83" "W" "\x83\x85\x83\x8a\x81" "[", /* 79 */
+ "\x90\x85\x92\xeb\x89\x80", /* 80 */
+ "\x97\xce\x82\xcc\xe3" "O" "\x9f" "~", /* 81 */
+ "\x91\xe5\x89" "X" "\x8e\xc9", /* 82 */
+ "\x8f\xac\x89" "X" "\x8e\xc9", /* 83 */
+ "\x92\xeb\x89\x80", /* 84 */
+ "\x8b" "{" "\x92\xec\x91" "O", /* 85 */
+ "\x91\xe5\x90\x85\x98" "H", /* 86 */
+ "\x93\xec\x82\xcc\x89\xd4\x92" "d", /* 87 */
+ "\x96" "k" "\x82\xcc\x89\xd4\x92" "d", /* 88 */
+ "\x8d\x91\x89\xa4\x82\xcc\x96\xec\x8d\xd8\x89\x80", /* 89 */
+ "\x95\x91\x93\xa5\x8f\xea", /* 90 */
+ "\x83" "l" "\x83" "v" "\x83" "`" "\x83\x85\x81" "[" "\x83" "k" ""
+ "\x82\xcc\x90\xf2\x90\x85", /* 91 */
+ "\x83" "X" "\x83" "C" "\x83" "X" "\x90" "l" "\x82\xcc\x92" "r", /* 92 */
+ "\x90" "j (" "\x95" "s" "\x97" "v!)", /* 93 */
+ "\xe7\xf5", /* 94 */
+ "\x8e\x86", /* 95 */
+ "\x94\xfc\x8f" "p" "\x82\xc9\x8a\xd6\x82\xb7\x82\xe9\x95\x97\x8e" ""
+ "h" "\x95\xb6", /* 96 */
+ "\x8f\xac\x82\xb3\x82\xa2\x8c\xae" " 1", /* 97 */
+ "\x95\xcf\x89\xbb\x82\xb5\x82\xbd\x8e\x86", /* 98 */
+ "\x83" "V" "\x83" "~" "\x82\xcc\x82\xc2\x82\xa2\x82\xbd\x8e\x86", /* 99 */
+ "\x94\xa0\x82\xa9\x82\xe7\x8e\xe6\x82\xe8\x8f" "o" ""
+ "\x82\xb5\x82\xbd\x8e\x86", /* 100 */
+ "\""
+ "\x89\xa4\x89\xc6\x82\xcc\x8c\x8c\x93\x9d\x82\xc9\x8a\xd6\x82\xb7\x82\xe9\x95\x97\x8e" ""
+ "h" "\x95\xb6", /* 101 */
+ "\x93\x94\x82\xb3\x82\xea\x82\xbd\x82\xeb\x82\xa4\x82\xbb\x82\xad", /* 102 */
+ "\x82\xeb\x82\xa4\x82\xbb\x82\xad", /* 103 */
+ "\x8c\xae", /* 104 */
+ "\x83" "X" "\x83" "P" "\x83" "b" "\x83" "`" "\x93\xfc\x82\xea", /* 105 */
+ "\x83" "X" "\x83" "P" "\x83" "b" "\x83" "`" "\x93\xfc\x82\xea", /* 106 */
+ "\x82\xc9\x82\xb9\x82\xcc\x83" "X" "\x83" "P" "\x83" "b" "\x83" "`", /* 107 */
+ "\x92\xf2\x8e" "q", /* 108 */
+ "\x89\xf3\x82\xb3\x82\xea\x82\xbd\x83" "X" "\x83" "P" "\x83" "b" ""
+ "\x83" "`", /* 109 */
+ "\x8a" "G" "\x95" "M", /* 110 */
+ "\x8b\xe0\x90" "F" "\x82\xcc\x8a" "G" "\x95" "M", /* 111 */
+ "\x90\xd4\x82\xa2\x8a" "G" "\x95" "M", /* 112 */
+ "\x83" "f" "\x83" "b" "\x83" "T" "\x83\x93\x97" "p" "\x96\xd8\x92" ""
+ "Y", /* 113 */
+ "\x83\x81\x83\x82", /* 114 */
+ "\x8c\x9a\x92" "z" "\x82\xc9\x8a\xd6\x82\xb7\x82\xe9\x95\x97\x8e" ""
+ "h" "\x95\xb6", /* 115 */
+ "\x8f\xac\x82\xb3\x82\xa2\x8c\xae" " 2", /* 116 */
+ "\x8b" "|" "\x82\xcc\x8e\xcb\x8e\xe8" "(" "\x95" "s" "\x97" "v!)", /* 117 */
+ "\x8a" "y" "\x95\x88", /* 118 */
+ "\x83" "r" "\x83\x8a\x83\x84\x81" "[" "\x83" "h" "\x82\xcc\x83" "L" ""
+ "\x83\x85\x81" "[", /* 119 */
+ "\x94" "F" "\x89\xc2", /* 120 */
+ "\x83\x81\x83" "_" "\x83\x8b\x82\xcc\x95\xa1\x8e\xca", /* 121 */
+ "\x83\x81\x83" "_" ""
+ "\x83\x8b\x82\xcc\x93\xfc\x82\xc1\x82\xbd\x88\xf8\x82\xab\x8f" "o" ""
+ "\x82\xb5", /* 122 */
+ "\x8f\xac\x82\xb3\x82\xc8\x83" "A" "\x83" "|" ""
+ "\x83\x8d\x83\x93\x82\xcc\x83" "h" "\x83" "A" "\x82\xcc\x8c\xae", /* 123 */
+ "\x90" "H" "\x97\xbf", /* 124 */
+ "\x8f" "@" "\x8b\xb3\x82\xc9\x8a\xd6\x82\xb7\x82\xe9\x95\x97\x8e" ""
+ "h" "\x95\xb6", /* 125 */
+ "\x96\xc1", /* 126 */
+ "\x93\x9d\x8e\xa1\x82\xc9\x8a\xd6\x82\xb7\x82\xe9\x95\x97\x8e" "h" ""
+ "\x95\xb6", /* 127 */
+ "\x83" "y" "\x83\x93", /* 128 */
+ "\x83\x81\x83\x82", /* 129 */
+ "\x96" "]" "\x89\x93\x8b\xbe", /* 130 */
+ "\x83\x94\x83" "H" "\x81" "[" "\x83" "o" ""
+ "\x83\x93\x82\xcc\x90\xdd\x8c" "v" "\x90" "}", /* 131 */
+ "\x83\x94\x83" "H" "\x81" "[" "\x83" "o" ""
+ "\x83\x93\x82\xcc\x90\xdd\x8c" "v" "\x90" "}", /* 132 */
+ "\x82\xd0\x82\xe0", /* 133 */
+ "\x94\xc5\x89\xe6", /* 134 */
+ "\x8f\xac\x82\xb3\x82\xa2\x8c\xae" " 3", /* 135 */
+ "\x8f\xac\x82\xb3\x82\xa2\x8c\xae" " 4", /* 136 */
+ "\x83\x81\x83\x82", /* 137 */
+ "\x8f\xe9\x8a\xd9\x82\xcc\x8c\xa9\x8e\xe6\x82\xe8\x90" "}", /* 138 */
+ "\x8f\xe9\x8a\xd9\x82\xcc\x8c\xa9\x8e\xe6\x82\xe8\x90" "}", /* 139 */
+ "\x89\xae\x8d\xaa\x97\xa0\x95\x94\x89\xae\x82\xcc\x8c\xae", /* 140 */
+ "\x8b\xf5\x98" "b", /* 141 */
+ "\x96\xc0\x98" "H" "\x82\xcc\x92" "n" "\x90" "}", /* 142 */
+ "\x93\xb9\x8b\xef", /* 143 */
+ "\x96\xf2", /* 144 */
+ "\x82\xeb\x82\xa4\x82\xbb\x82\xad\x8f\xc1\x82\xb5", /* 145 */
+ "\x91\xe6" "%d" "\x8f\xcd", /* 146 */
+ "\x8f\xea\x96\xca", /* 147 */
+ /* These ones are not in messages but it's simpler */
+ "\x82\xab\x82\xc2\x82\xcb\x82\xc6\x92\xdf", /* 148/Epigraph */
+ "\x81" "u" "\x83" "t" "\x83\x89\x83\x93\x83" "X" "\x82\xcc\x82" "R"
+ "\x82\xc2\x82\xcc\x93" "s" "\x8e" "s" "\x96\xbc\x81" "v", /* 149/Memo */
+ nullptr, /* 150/Bomb */
+};
+
+static char const *const versaillesJApaintings[] = {
+ "\"" "\x94\xa0\x91" "D" ""
+ "\x82\xc9\x8f\xe6\x82\xe9\x93\xae\x95\xa8\x82\xbd\x82\xbf\"\r\x83" ""
+ "W" "\x83\x8d\x83\x89\x83\x82\x81" "E" "\x83" "o" "\x83" "b" "\x83" ""
+ "T" "\x81" "[" "\x83" "m ", /* 0: 41201 */
+ "\"" "\x83" "G" "\x83" "}" "\x83" "I" "\x82\xcc\x94\xd3\x8e" ""
+ "`\"\r" "\x83\x84\x83" "R" "\x83" "|" "\x81" "E" "\x83" "o" "\x83" ""
+ "b" "\x83" "T" "\x81" "[" "\x83" "m", /* 1: 41202 */
+ "\"" "\x83" "L" "\x83\x8a\x83" "X" "\x83" "g" ""
+ "\x82\xcc\x91\xab\x89\xba\x82\xcc\x83" "}" "\x83" "O" "\x83" "_" ""
+ "\x83\x89\x82\xcc\x83" "}" "\x83\x8a\x83" "A\"\r", /* 2: 41203 */
+ "\"" "\x94\xa0\x91" "D" "\x82\xf0\x8d" "~" ""
+ "\x82\xe8\x82\xe9\"\r\x83" "W" "\x83\x8d\x83\x89\x83\x82\x81" "E" ""
+ "\x83" "o" "\x83" "b" "\x83" "T" "\x81" "[" "\x83" "m ", /* 3: 41204 */
+ "\"" "\x8a\xe2\x82\xa9\x82\xe7\x90\x85\x82\xf0\x8f" "o" ""
+ "\x82\xb7\x83\x82\x81" "[" "\x83" "Z\"\r" "\x83\x84\x83" "R" "\x83" ""
+ "|" "\x81" "E" "\x83" "o" "\x83" "b" "\x83" "T" "\x81" "[" "\x83" ""
+ "m", /* 4: 41205 */
+ "\"" "\x83" "A" "\x83\x8b\x83" "x" ""
+ "\x83\x8b\x82\xcc\x90\xed\x82\xa2\"\r\x83" "W" "\x83\x87\x83" "[" ""
+ "\x83" "t" "\x81" "E" "\x83" "p" "\x83\x8d\x83" "Z" "\x83\x8b", /* 5: 41301 */
+ "\"" "\x83" "A" "\x83\x8c\x83" "N" "\x83" "T" "\x83\x93\x83" "_" ""
+ "\x81" "[" "\x91\xe5\x89\xa4\x81" "E" "\x83" "A" "\x83\x8b\x83" "x" ""
+ "\x83\x8b\x82\xcc\x90\xed\x82\xa2\x82\xc5\x83" "_" "\x83\x8c\x83" ""
+ "C" "\x83" "I" "\x83" "X" "\x82\xf0\x94" "j" ""
+ "\x82\xe9\"\r\x83\x8b\x81" "E" "\x83" "u" "\x83\x8b\x83" "M" "\x83" ""
+ "j" "\x83\x87\x83\x93" " ", /* 6: 41302 */
+ "\"" "\x83\x8b\x81" "[" "\x83" "Y" ""
+ "\x82\xcc\x90\xed\x93\xac\"\r\x83" "W" "\x83\x87\x83" "[" "\x83" ""
+ "t" "\x81" "E" "\x83" "p" "\x83\x8d\x83" "Z" "\x83\x8b", /* 7: 42401 */
+ "\"" "\x90\xb9\x83" "`" "\x83" "F" "\x83" "`" "\x83\x8a\x83" "A" ""
+ "\x82\xc6\x8a" "y" "\x95\x88\x82\xf0\x8e\x9d\x82\xc2\x93" "V" ""
+ "\x8e" "g\"\r" "\x83" "C" "\x83\x8b\x81" "E" "\x83" "h" ""
+ "\x83\x81\x83" "j" "\x83" "L" "\x81" "[" "\x83" "m", /* 8: 42901 */
+ "\"" "\x83\x82\x83\x93\x83" "J" "\x83" "_" "\x82\xcc\x83" "h" ""
+ "\x83\x93\x81" "E" "\x83" "t" "\x83\x89\x83\x93\x83" "V" "\x83" "X" ""
+ "\x83" "R\"\r" "\x83" "t" "\x83" "@" "\x83\x93\x81" "E" "\x83" "_" ""
+ "\x83" "C" "\x83" "N", /* 9: 42902 */
+ "\"" "\x97" "c" ""
+ "\x82\xab\x90\xf4\x97\xe7\x8e\xd2\x90\xb9\x83\x88\x83" "n" "\x83" ""
+ "l\"\r" "\x83" "J" "\x83\x89\x83" "b" "\x83" "`", /* 10: 42903 */
+ "\"" "\x90\xb9\x83" "}" "\x83" "^" "\x83" "C\"\r" "\x83\x94\x83" ""
+ "@" "\x83\x89\x83\x93\x83" "^" "\x83\x93", /* 11: 42904 */
+ "\"" "\x83" "V" "\x81" "[" "\x83" "U" "\x81" "[" ""
+ "\x82\xc9\x82\xb3\x82\xb3\x82\xae\"\r\x83\x94\x83" "@" ""
+ "\x83\x89\x83\x93\x83" "^" "\x83\x93", /* 12: 42905 */
+ "\"" "\x90\xb9\x83\x8b\x83" "J\"\r" "\x83\x94\x83" "@" ""
+ "\x83\x89\x83\x93\x83" "^" "\x83\x93", /* 13: 42906 */
+ "\"" "\x90\xb9\x83" "J" "\x83" "^" "\x83\x8a\x83" "i" ""
+ "\x82\xcc\x90" "_" "\x94\xe9\x82\xcc\x8c\x8b\x8d\xa5\"\r\x83" "A" ""
+ "\x83\x8c\x83" "b" "\x83" "T" "\x83\x93\x83" "h" "\x83\x8d\x81" "E" ""
+ "\x83" "g" "\x83" "D" "\x83\x8b\x83" "`", /* 14: 42907 */
+ "\"" "\x8e\xf0\x88\xf9\x82\xdd\x82\xcc\x8f" "W" ""
+ "\x82\xdc\x82\xe8\"\r\x83" "j" "\x83" "R" "\x83\x89\x81" "E" "\x83" ""
+ "g" "\x83" "D" "\x83\x8b\x83" "j" "\x83" "G", /* 15: 42908 */
+ "\"" "\x90\xe8\x82\xa2\x8f\x97\"\r\x83\x94\x83" "@" ""
+ "\x83\x89\x83\x93\x83" "^" "\x83\x93", /* 16: 42909 */
+ "\"" "\x92" "G" "\x8b\xd5\x82\xf0\x92" "e" "\x82\xad\x83" "_" ""
+ "\x83\x94\x83" "B" "\x83" "f" "\x89\xa4\"\r\x83" "C" "\x83\x8b\x81" ""
+ "E" "\x83" "h" "\x83\x81\x83" "j" "\x83" "L" "\x81" "[" "\x83" "m", /* 17: 42910 */
+ "\"" "\x83" "}" "\x83" "O" "\x83" "_" "\x83\x89\x82\xcc\x83" "}" ""
+ "\x83\x8a\x83" "A\"\r" "\x83" "C" "\x83\x8b\x81" "E" "\x83" "h" ""
+ "\x83\x81\x83" "j" "\x83" "L" "\x81" "[" "\x83" "m", /* 18: 42911 */
+ "\"" "\x8e\xa9\x89\xe6\x91\x9c\"\r\x83" "t" "\x83" "@" ""
+ "\x83\x93\x81" "E" "\x83" "_" "\x83" "C" "\x83" "N", /* 19: 42912 */
+ "\"" "\x90\xf4\x97\xe7\x8e\xd2\x90\xb9\x83\x88\x83" "n" "\x83" ""
+ "l\"\r" "\x83\x94\x83" "@" "\x83\x89\x83\x93\x83" "^" "\x83\x93", /* 20: 42913 */
+ "\"" "\x93" "V" "\x8e" "g" "\x82\xc9\x8b" "~" ""
+ "\x82\xed\x82\xea\x82\xe9\x83" "n" "\x83" "K" "\x83\x8b\"\r\x83" ""
+ "W" "\x83\x87\x83\x94\x83" "@" "\x83\x93\x83" "j" "\x81" "E" ""
+ "\x83\x89\x83\x93\x83" "t" "\x83\x89\x83\x93\x83" "R", /* 21: 42914 */
+ "\"" "\x90\xb9\x83" "}" "\x83\x8b\x83" "R\"\r" "\x83\x94\x83" "@" ""
+ "\x83\x89\x83\x93\x83" "^" "\x83\x93", /* 22: 42915 */
+ "\"" "\x83" "J" "\x83\x8a\x83\x85\x83" "h" ""
+ "\x83\x93\x82\xcc\x89\xa4\x8e" "q" "\x83\x81\x83\x8c\x83" "A" ""
+ "\x83" "O" "\x83\x8d\x83" "X" ""
+ "\x82\xcc\x92\x96\x8e\xeb\x82\xe8\"\r\x83" "W" "\x83\x83\x83" "b" ""
+ "\x83" "N" "\x81" "E" "\x83\x8b\x83\\\x81" "[", /* 23: 43090 */ /* BUG: Switched */
+ "\"" "\x83\x8d\x81" "[" "\x83" "}" ""
+ "\x95\x97\x82\xcc\x88\xdf\x91\x95\x82\xf0\x82\xdc\x82\xc6\x82\xa4\x89\xa4\"\r\x83" ""
+ "W" "\x83\x83\x83\x93\x81" "E" "\x83\x94\x83" "@" ""
+ "\x83\x89\x83\x93", /* 24: 43091 */
+ "\"" "\x83" "A" "\x83" "^" "\x83\x89\x83\x93\x83" "e\"\r" "\x83" ""
+ "W" "\x83\x83\x83" "b" "\x83" "N" "\x81" "E" "\x83\x8b\x83\\\x81" ""
+ "[", /* 25: 43092 */
+ "\"" "\x83" "A" "\x83\x93\x83" "L" "\x83" "Z" "\x83" "X" ""
+ "\x82\xf0\x94" "w" "\x95\x89\x82\xa4\x83" "A" "\x83" "C" "\x83" "l" ""
+ "\x83" "C" "\x83" "A" "\x83" "X\"\r" "\x83" "X" "\x83" "p" "\x81" ""
+ "[" "\x83" "_", /* 26: 43100 */
+ "\"" "\x83" "_" "\x83\x94\x83" "B" "\x83" "f" "\x82\xc6\x83" "o" ""
+ "\x83" "e" "\x83" "V" "\x83" "o\"\r" "\x83\x94\x83" "F" ""
+ "\x83\x8d\x83" "l" "\x81" "[" "\x83" "[", /* 27: 43101 */
+ "\"" "\x83" "G" "\x83" "W" "\x83" "v" "\x83" "g" ""
+ "\x82\xd6\x82\xcc\x93\xa6\x94\xf0\"\r\x83" "O" "\x83" "C" "\x81" ""
+ "[" "\x83" "h" "\x81" "E" "\x83\x8c\x81" "[" "\x83" "j ", /* 28: 43102 */
+ "\"" "\x83\x8b\x83" "C" "\x82" "P" "\x82" "S" "\x90\xa2\x8b" "R" ""
+ "\x94" "n" "\x91\x9c\"\r\x83" "s" "\x83" "G" "\x81" "[" ""
+ "\x83\x8b\x81" "E" "\x83" "~" "\x83" "j" "\x83\x83\x81" "[" ""
+ "\x83\x8b", /* 29: 43103 */
+ "\"" "\x89\xa4\x82\xcc\x88\xd0\x8c\xf5\x82\xc6\x94\xfc\x8f" "p" ""
+ "\x82\xcc\x90" "i" "\x95\xe0\"\r\x83" "E" "\x83" "@" "\x81" "[" ""
+ "\x83" "X", /* 30: 43104 */
+ "\"" "\x83" "C" "\x83" "t" "\x83" "B" "\x83" "Q" "\x83" "l" "\x83" ""
+ "C" "\x83" "A" "\x82\xcc\x8b" "]" "\x90\xb5\"\r\x83" "V" ""
+ "\x83\x83\x83\x8b\x83\x8b\x81" "E" "\x83" "h" "\x81" "E" ""
+ "\x83\x89\x81" "E" "\x83" "t" "\x83" "H" "\x83" "b" "\x83" "X", /* 31: 43130 */
+ "\"" "\x83\x8b\x83" "C" "\x82" "P" "\x82" "S" ""
+ "\x90\xa2\x8b\xb9\x91\x9c\"\r" " " "\x83" "x" "\x83\x8b\x83" "j" ""
+ "\x81" "[" "\x83" "j", /* 32: 43131 */
+ "\"" "\x83\x82\x83\x8b\x83" "t" "\x83" "F" "\x83" "E" "\x83" "X" ""
+ "\x82\xcc\x98" "r" "\x82\xcc\x92\x86\x82\xcc\x83" "G" ""
+ "\x83\x93\x83" "f" "\x83\x85\x83" "~" "\x83" "I" ""
+ "\x83\x93\x82\xf0\x94\xad\x8c\xa9\x82\xb7\x82\xe9\x83" "_" "\x83" ""
+ "C" "\x83" "A" "\x83" "i\"\r" "\x83" "K" "\x83" "u" "\x83\x8a\x83" ""
+ "G" "\x83\x8b\x81" "E" "\x83" "u" "\x83\x89\x83\x93\x83" "V" ""
+ "\x83\x83\x81" "[" "\x83\x8b", /* 33: 43132 */
+ "\"" "\x90\xb9\x83" "y" "\x83" "e" ""
+ "\x83\x8d\x82\xc6\x90\xb9\x95\xea\"\r\x83" "C" "\x83\x8b\x81" "E" ""
+ "\x83" "O" "\x83" "G" "\x83\x8b\x83" "`" "\x81" "[" "\x83" "m", /* 34: 43140 */
+ "\"" "\x83" "G" "\x83" "}" "\x83" "I" "\x82\xcc\x8e" "g" "\x93" "k" ""
+ "\x82\xbd\x82\xbf\"\r\x83\x94\x83" "F" "\x83\x8d\x83" "l" "\x81" ""
+ "[" "\x83" "[", /* 35: 43141 */
+ "\"" "\x90\xb9\x89\xc6\x91\xb0\"\r\x83\x94\x83" "F" "\x83\x8d\x83" ""
+ "l" "\x81" "[" "\x83" "[", /* 36: 43142 */
+ "\"" "\x83" "A" "\x83\x8c\x83" "N" "\x83" "T" "\x83\x93\x83" "_" ""
+ "\x81" "[" "\x91\xe5\x89\xa4\x82\xcc\x91" "O" "\x82\xcc\x83" "_" ""
+ "\x83\x8c\x83" "C" "\x83" "I" "\x83" "X" "\x88\xea\x91\xb0\"\r\x83" ""
+ "V" "\x83\x83\x83\x8b\x83\x8b\x81" "E" "\x83\x8b\x81" "E" "\x83" ""
+ "u" "\x83\x89\x83\x93", /* 37: 43143 */
+ "\"" "\x90\xf4\x97\xe7\x8e\xd2\x90\xb9\x83\x88\x83" "n" "\x83" ""
+ "l\"\r" "\x83\x89\x83" "t" "\x83" "@" "\x83" "G" "\x83\x8d", /* 38: 43144 */
+ "\"" "\x83" "}" "\x83\x8a\x81" "[" "\x81" "E" "\x83" "h" "\x81" "E" ""
+ "\x83\x81\x83" "f" "\x83" "B" "\x83" "`\"\r" "\x83" "t" "\x83" "@" ""
+ "\x83\x93\x81" "E" "\x83" "_" "\x83" "C" "\x83" "N", /* 39: 43150 */
+ "\"" "\x83" "A" "\x83" "P" "\x83\x8d\x83" "I" "\x83" "X" ""
+ "\x82\xc6\x8a" "i" "\x93\xac\x82\xb7\x82\xe9\x83" "w" ""
+ "\x83\x89\x83" "N" "\x83\x8c\x83" "X\"\r" "\x83" "O" "\x83" "C" ""
+ "\x81" "[" "\x83" "h" "\x81" "E" "\x83\x8c\x81" "[" "\x83" "j", /* 40: 43151 */
+ "\"" "\x83" "l" "\x83" "b" "\x83\\\x83" "X" ""
+ "\x82\xc9\x82\xe6\x82\xe9\x83" "f" "\x83" "B" "\x83" "A" "\x83" "l" ""
+ "\x83" "C" "\x83\x89\x82\xcc\x97\xaa\x92" "D\"\r" "\x83" "O" "\x83" ""
+ "C" "\x81" "[" "\x83" "h" "\x81" "E" "\x83\x8c\x81" "[" "\x83" "j", /* 41: 43152 */
+ "\"" ""
+ "\x90\xb9\x8d\xad\x82\xf0\x8e\xf3\x82\xaf\x82\xbd\x8c\xe3\x82\xcc\x83" ""
+ "A" "\x83" "b" "\x83" "V" "\x83" "W" "\x82\xcc\x90\xb9\x83" "t" ""
+ "\x83\x89\x83\x93\x83" "`" "\x83" "F" "\x83" "X" "\x83" "R\"\r" ""
+ "\x83" "Z" "\x81" "[" "\x83" "w" "\x83\x8b\x83" "Y", /* 42: 43153 */
+ "\"" "\x8c\x8c\x82\xc9\x82\xdc\x82\xdd\x82\xea\x82\xbd\x83" "T" ""
+ "\x83" "C" "\x83\x8b\x83" "X" ""
+ "\x82\xcc\x93\xaa\x82\xf0\x93\xcb\x82\xad\x83" "g" "\x83" "~" ""
+ "\x83\x8a\x83" "X\"\r" "\x83\x8b\x81" "[" "\x83" "x" "\x83\x93\x83" ""
+ "X", /* 43: 43154 */
+ "\"" "\x83" "q" "\x83\x85\x83" "h" "\x83\x89\x82\xc6\x8a" "i" ""
+ "\x93\xac\x82\xb7\x82\xe9\x83" "w" "\x83\x89\x83" "N" ""
+ "\x83\x8c\x83" "X\"\r" "\x83" "O" "\x83" "C" "\x81" "[" "\x83" "h" ""
+ "\x81" "E" "\x83\x8c\x81" "[" "\x83" "j", /* 44: 43155 */
+ "\"" "\x89\x8a\x82\xcc\x92\x86\x82\xcc\x83" "w" "\x83\x89\x83" "N" ""
+ "\x83\x8c\x83" "X \"\r" "\x83" "O" "\x83" "C" "\x81" "[" "\x83" "h" ""
+ "\x81" "E" "\x83\x8c\x81" "[" "\x83" "j", /* 45: 43156 */
+ "\"" "\x83" "v" "\x83" "t" "\x83" "@" "\x83\x8b\x83" "c" ""
+ "\x8c\xf2\x82\xc6\x94\xde\x82\xcc\x92\xed\x83\x8d\x83" "x" "\x81" ""
+ "[" "\x83\x8b\x8c\xf6\x82\xcc\x8f\xd1\x91\x9c\"\r\x83" "t" "\x83" ""
+ "@" "\x83\x93\x81" "E" "\x83" "_" "\x83" "C" "\x83" "N", /* 46: 43157 */
+ "\"" "\x8f\\\x8e\x9a\x89\xcb\x8d" "~" "\x89\xba\"\r\x83" "V" ""
+ "\x83\x83\x83\x8b\x83\x8b\x81" "E" "\x83\x8b\x81" "E" "\x83" "u" ""
+ "\x83\x89\x83\x93", /* 47: 45260 */
+};
+
+static const Subtitle versaillesJAsubtitles[] = {
+ {
+ "a0_vf.hns", {
+ {
+ 75, "\x83\x94\x83" "F" "\x83\x8b\x83" "T" "\x83" "C" ""
+ "\x83\x86\x82\xcc\x8b" "{" "\x93" "a" "\x82\xcd\x81" "@ " "\x83" ""
+ "A" "\x83\x8b\x83" "L" "\x83" "m" "\x83" "I" "\x83" "X" ""
+ "\x82\xcc\x89\xa4\x8b" "{" "\x82\xcc\x82\xb2\x82\xc6\x82\xad\x81" ""
+ "@ " "\x89\xc4\x8e\x8a\x82\xcc\x93\xfa\x82\xc9\x81" "@ " ""
+ "\x89\x8a\x82\xc6\x82\xc8\x82\xc1\x82\xc4\x8b\xf3\x82\xc9\x95\x91\x82\xa2\x8f\xe3\x82\xaa\x82\xe8\x81" ""
+ "@ " "\x8c\xe3\x82\xc9\x82\xcd\x89\xbd\x82\xe0\x8e" "c" ""
+ "\x82\xe7\x82\xc8\x82\xa2\x82\xc5\x82\xa0\x82\xeb\x82\xa4"
+ },
+ {180, ""},
+ {
+ 210, "\x8d\x91\x89\xa4\x82\xcd\x81" "A" ""
+ "\x82\xb1\x82\xf1\x82\xc8\x82\xe0\x82\xcc\x82\xcd\x8b\xb6\x90" "l" ""
+ "\x82\xcc\x8c\xb6\x8e\x8b\x81" "A" "\x97\x9d\x90\xab\x82\xf0\x92" ""
+ "m" "\x82\xe7\x82\xca\x91" "z" "\x91\x9c\x97\xcd\x82\xcc\x8e" "Y" ""
+ "\x95\xa8\x82\xc9\x82\xb7\x82\xac\x82\xca\x82\xc6\x82\xa8\x82\xc1\x82\xb5\x82\xe1\x82\xc1\x82\xc4\x82\xa8\x82\xe7\x82\xea\x82\xe9\x82\xaa\x81" ""
+ "D" "\x81" "D"
+ },
+ {
+ 260, "\x83" "{" "\x83\x93\x83" "^" "\x83\x93\x82\xc6\x81" "@ " ""
+ "\x94\xde\x82\xcc\x90" "b" "\x89\xba\x82\xbd\x82\xbf\x82\xf0\x8a" ""
+ "F" "\x89\xf0\x95\xfa\x82\xb5\x82\xc4\x82\xe0\x81" "@ " ""
+ "\x96\xb3\x91\xca\x82\xc5\x82\xa0\x82\xe9\x81" "@ " ""
+ "\x8e\x9e\x8a\xd4\x82\xaa\x82\xc8\x82\xad\x82\xc8\x82\xc1\x82\xc4\x82\xab\x82\xbd\x81" ""
+ "@ " ""
+ "\x8e\x84\x82\xcd\x90\xaf\x82\xcc\x82\xb2\x82\xc6\x82\xab\x8d\x91\x89\xa4\x82\xc6\x81" ""
+ "@ " ""
+ "\x94\xde\x82\xcc\x8e\xfc\x82\xe8\x82\xc9\x82\xa4\x82\xb8\x82\xdc\x82\xad\x98" ""
+ "f" "\x90\xaf\x82\xc9\x92\xa7\x82\xde\x81" "@ " "\x83" "^" "\x83" ""
+ "C" "\x83" "g" "\x83\x8b\x82\xc6\x8c\xa9\x8f" "o" ""
+ "\x82\xb5\x82\xc6\x81" "@ " "\x83" "C" "\x83\\\x83" "b" "\x83" "v" ""
+ "\x82\xcc\x8c\xbe\x97" "t" "\x82\xf0\x97" "p" ""
+ "\x82\xa2\x82\xc4\x81" "@ " ""
+ "\x8e\x84\x82\xcc\x8f\xbc\x96\xbe\x82\xc9\x89\xce\x82\xf0\x82\xc2\x82\xaf\x82\xe9\x81" ""
+ "@ " "\x93\xe4\x82\xc6\x8d\xf4\x96" "d" ""
+ "\x82\xf0\x82\xc5\x82\xab\x82\xe9\x82\xe0\x82\xcc\x82\xc8\x82\xe7\x8c\xa9\x94" ""
+ "j" "\x82\xe9\x82\xaa\x82\xe6\x82\xa2\x81" "A" "\x82\xc6"
+ },
+ {
+ 450, "\x82\xdc\x82\xe9\x82\xc5\x8b" "C" ""
+ "\x8b\xb6\x82\xa2\x82\xcc\x82\xbd\x82\xed\x82\xb2\x82\xc6\x82\xbe\x81" ""
+ "I" "\x8d\x91\x89\xa4\x95\xc3\x89\xba\x82\xc9\x82\xa8\x8e" "d" ""
+ "\x82\xa6\x82\xb5\x82\xc8\x82\xaf\x82\xea\x82\xce\x82\xc8\x82\xe7\x82\xc8\x82\xa2\x82\xb1\x82\xcc\x90" ""
+ "g" "\x82\xe4\x82\xa6\x81" "A" ""
+ "\x8e\xa9\x82\xe7\x82\xb1\x82\xcc\x8c\x8f\x82\xf0\x92\xb2\x82\xd7\x82\xe9\x82\xb1\x82\xc6\x82\xcd\x82\xc5\x82\xab\x82\xc8\x82\xa2\x81" ""
+ "B" "\x82\xbe\x82\xa9\x82\xe7\x83\x89\x83\x89\x83\x93\x83" "h" ""
+ "\x81" "A" "\x82\xa8\x91" "O" ""
+ "\x82\xc9\x82\xb1\x82\xcc\x8c\x8f\x82\xf0\x94" "C" ""
+ "\x82\xb9\x82\xe6\x82\xa4\x81" "B"
+ },
+ {
+ 536, "\x82\xb2\x90" "Q" "\x8f\x8a\x8c" "W" "\x82\xcc\x82\xa8\x91" "O" ""
+ "\x82\xcc\x82\xb1\x82\xc6\x82\xbe\x81" "A" ""
+ "\x8e\xd7\x96\x82\x82\xbe\x82\xc4\x82\xb3\x82\xea\x82\xb8\x82\xc9\x93\xae\x82\xab\x82\xdc\x82\xed\x82\xe9\x82\xb1\x82\xc6\x82\xaa\x82\xc5\x82\xab\x82\xe6\x82\xa4\x81" ""
+ "B" "\x8b" "{" "\x93" "a" "\x82\xcc\x82\xb1\x82\xc6\x82\xe0\x81" ""
+ "A" "\x82\xbb\x82\xb1\x82\xc9\x82\xa2\x82\xe9\x90" "l" "\x81" "X" ""
+ "\x82\xcc\x82\xb1\x82\xc6\x82\xe0\x81" "A" ""
+ "\x82\xb5\x82\xab\x82\xbd\x82\xe8\x82\xe0\x90" "S" ""
+ "\x93\xbe\x82\xc4\x82\xa2\x82\xe9\x82\xcd\x82\xb8\x82\xbe\x81" "B"
+ },
+ {
+ 622, "\x8d\xdb\x8c\xc0\x82\xc8\x82\xad\x90" "q" ""
+ "\x82\xcb\x82\xdc\x82\xed\x82\xc1\x82\xc4\x81" "A" ""
+ "\x89\xbd\x82\xa9\x89\xf6\x82\xb5\x82\xa2\x82\xb1\x82\xc6\x82\xaa\x82\xa0\x82\xea\x82\xce\x81" ""
+ "A" ""
+ "\x8e\x84\x82\xc9\x95\xf1\x8d\x90\x82\xb7\x82\xe9\x82\xcc\x82\xbe\x81" ""
+ "B" "\x82\xbe\x82\xaa\x90" "T" "\x8f" "d" "\x82\xc9\x82\xc8\x81" ""
+ "B" "\x8b\xb6\x90" "l" ""
+ "\x82\xaa\x95\xc3\x89\xba\x82\xf0\x8b\xba\x94\x97\x82\xb5\x82\xc4\x82\xa2\x82\xe9\x82\xc8\x82\xc7\x82\xc6\x82\xa2\x82\xa4\x89\\\x82\xf0\x8d" ""
+ "L" "\x82\xdf\x82\xc4\x82\xcd\x82\xc8\x82\xe7\x82\xca\x81" "B" ""
+ "\x8b" "}" "\x82\xb0\x81" "I1" ""
+ "\x93\xfa\x82\xb5\x82\xa9\x8e\x9e\x8a\xd4\x82\xcd\x8e" "c" ""
+ "\x82\xb3\x82\xea\x82\xc4\x82\xa2\x82\xc8\x82\xa2\x82\xcc\x82\xbe"
+ },
+ {690, "8" "\x8e\x9e\x94\xbc\x82\xa9" " "},
+ }
+ }, /* a0_vf.hns */
+ {
+ "a1_vf.hns", {
+ {
+ 358, "\x95\xc3\x89\xba\xa4\x82\xb2\x8b" "N" ""
+ "\x8f\xb0\x82\xcc\x82\xa8\x8e\x9e\x8a\xd4\x82\xc5\x82\xb2\x82\xb4\x82\xa2\x82\xdc\x82\xb7" ""
+ " "
+ },
+ {
+ 388, "\x8d\x91\x89\xa4\x82\xaa\x8b" "N" ""
+ "\x8f\xb0\x82\xc8\x82\xb3\x82\xe9\x82\xc6\x82\xb7\x82\xae\x82\xc9\x81" ""
+ "A" "\x8e\x98\x88\xe3\x92\xb7\x82\xcc\x83" "_" "\x83" "b" "\x83" ""
+ "J" ""
+ "\x83\x93\x82\xaa\x8d\x91\x89\xa4\x82\xcc\x91\xcc\x92\xb2\x82\xf0\x82\xa8\x90" ""
+ "q" "\x82\xcb\x82\xb5\x82\xdc\x82\xb7" " "
+ },
+ {
+ 440, "\x95\xc3\x89\xba\x82\xc9\x82\xa8\x82\xa9\x82\xea\x82\xdc\x82\xb5\x82\xc4\x82\xcd\x81" ""
+ "A" "\x82\xe6\x82\xad\x82\xa8\x82\xe2\x82\xb7\x82\xdd\x82\xc9\x82\xc8\x82\xe7\x82\xea\x82"
+ "\xdc\x82\xb5\x82\xbd\x82\xa9\x82\xc5\x82\xb5\x82\xe5\x82\xa4\x82\xa9\x81" "H" ""
+ "\x8f\x8b\x82\xad\x82\xcd\x82\xb2\x82\xb4\x82\xa2\x82\xdc\x82\xb9\x82\xf1\x82\xc5\x82\xb5\x82\xbd\x82\xa9\x81" ""
+ "H" "\x83" "}" "\x83" "b" "\x83" "T" "\x81" "[" "\x83" "W" ""
+ "\x82\xf0\x82\xa8\x8b\x81\x82\xdf\x82\xc5\x82\xb5\x82\xe5\x82\xa4\x82\xa9\x81" ""
+ "H"
+ },
+ {
+ 500, "\x82\xe0\x82\xa4\x82\xe6\x82\xa2\x81" "A" "\x83" "_" "\x83" "b" ""
+ "\x83" "J" "\x83\x93"
+ },
+ {
+ 510, "\x8d\x91\x89\xa4\x95\xc3\x89\xba\x82\xc9\x82\xa8\x82\xa9\x82\xea\x82\xdc\x82\xb5\x82\xc4\x82\xcd\x81" ""
+ "A" "\x82\xb1\x82\xcc" "2" "\x83\x96\x8c\x8e\x8a\xd4\x81" "A" ""
+ "\x89\xbd\x88\xea\x82\xc2\x8b\xef\x8d\x87\x82\xcc\x88\xab\x82\xa2\x82\xc6\x82\xb1\x82\xeb\x82\xcd\x82\xb2\x82\xb4\x82\xa2\x82\xdc\x82\xb9\x82\xf1" ""
+ " "
+ },
+ {550, ""},
+ {
+ 580, "\x83" "{" "\x83\x93\x83" "^" ""
+ "\x83\x93\x82\xaa\x8d\x91\x89\xa4\x82\xcc\x90\xf4\x96\xca\x82\xf0\x8e\xe8\x93" ""
+ "`" "\x82\xc1\x82\xc4\x82\xa2\x82\xe9\x82\xc6\x81" "A" ""
+ "\x96\x88\x92\xa9\x82\xcc\x8f" "K" "\x8a\xb5\x92\xca\x82\xe8\x81" ""
+ "A" "\x89\xa4\x89\xc6\x82\xcc\x90" "l" "\x81" "X" ""
+ "\x82\xaa\x93\xfc\x82\xc1\x82\xc4\x82\xab\x82\xdc\x82\xb7\x81" "B" ""
+ "\x89\xa4\x92\xed\x93" "a" "\x89\xba\x81" "A" "\x8d" "c" ""
+ "\x91\xbe\x8e" "q" "\x93" "a" "\x89\xba\x81" "A" "\x83\x81\x81" "[" ""
+ "\x83" "k" ""
+ "\x8c\xf6\x8e\xdd\x82\xaa\x8d\x91\x89\xa4\x82\xcc\x82\xb2\x8b" "N" ""
+ "\x8f\xb0\x82\xf0\x94" "q" ""
+ "\x8c\xa9\x82\xb5\x82\xc9\x82\xe2\x82\xc1\x82\xc4\x82\xab\x82\xbd\x82\xcc\x82\xc5\x82\xb7"
+ },
+ {713, ""},
+ {
+ 750, "\x91\xa7\x8e" "q" "\x82\xe6\x81" "A" ""
+ "\x8d\xa1\x92\xa9\x82\xcd\x89\xbd\x8e\x9e\x82\xc9\x98" "T" ""
+ "\x8e\xeb\x82\xe8\x82\xc9\x8f" "o" ""
+ "\x82\xa9\x82\xaf\x82\xbd\x82\xcc\x82\xa9\x82\xc8\x81" "H "
+ },
+ {795, ""},
+ }
+ }, /* a1_vf.hns */
+ {
+ "a2_vf.hns", {
+ {
+ 60, "\x82\xbe\x82\xdf\x82\xc5\x82\xb7\x82\xe6\x81" "A" "\x8a" "t" ""
+ "\x89\xba\x81" "B" "\x8a" "t" ""
+ "\x89\xba\x82\xcc\x82\xe6\x82\xa4\x82\xc8\x8d\x93\x82\xa2\x82\xe2\x82\xe8\x95\xfb\x82\xc5\x82\xcd\x81" ""
+ "A" "\x89\xa4\x8d\x91\x82\xc9\x95\xbd\x98" "a" ""
+ "\x82\xcd\x96\xdf\x82\xe8\x82\xdc\x82\xb9\x82\xf1"
+ },
+ {
+ 74, "\x90" "S" "\x94" "z" "\x82\xb7\x82\xe9\x82\xc8\x81" "B" ""
+ "\x95\xc3\x89\xba\x82\xcd\x83" "f" "\x83\x85\x83\x89\x83" "X" ""
+ "\x93" "a" "\x82\xf0\x83" "h" "\x83" "D" "\x81" "E" "\x83\x89\x81" ""
+ "E" "\x83" "t" "\x83" "H" "\x83\x8b\x83" "X" ""
+ "\x8c\xf6\x8e\xdd\x82\xcc\x82\xc6\x82\xb1\x82\xeb\x82\xc9\x94" "h" ""
+ "\x8c\xad\x82\xb7\x82\xe9\x82\xc6\x82\xa8\x82\xc1\x82\xb5\x82\xe1\x82\xc1\x82\xbd"
+ },
+ {
+ 130, "\x8c\xf6\x8e\xdd\x82\xf0\x90" "S" ""
+ "\x95\xcf\x82\xed\x82\xe8\x82\xb3\x82\xb9\x82\xe9\x82\xc8\x82\xc7\x81" ""
+ "A" ""
+ "\x90\xe2\x91\xce\x82\xc9\x82\xc5\x82\xab\x82\xc1\x82\xb1\x82\xa0\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x82\xe6"
+ },
+ {160, ""},
+ {
+ 200, "\x8d\x91\x89\xa4\x82\xcc\x8b" "N" "\x8f\xb0\x82\xcc\x8b" "V" ""
+ "\x82\xcd\x81" "A" "\x9f\x94\x97\x81\x82\xc5\x8f" "I" ""
+ "\x82\xed\x82\xe8\x82\xdc\x82\xb5\x82\xbd\x81" "B" ""
+ "\x92\xa9\x82\xcc\x8d\xc5\x8f\x89\x82\xcc\x88\xf8\x8c\xa9\x82\xd6\x82\xcc\x8f" ""
+ "o" "\x90\xc8\x82\xf0\x94" "F" ""
+ "\x82\xdf\x82\xe7\x82\xea\x82\xbd\x92\xec\x90" "b" ""
+ "\x82\xbd\x82\xbf\x82\xcc\x96\xda\x82\xcc\x91" "O" "\x82\xc5\x81" ""
+ "A" "\x97\x9d\x94\xaf\x8e" "t" ""
+ "\x82\xaa\x8d\x91\x89\xa4\x82\xcc\x94\xaf\x82\xf0\x90\xae\x82\xa6\x82\xc4\x82\xa9\x82\xe7\xa4\x92" ""
+ "Z" ""
+ "\x82\xa2\x82\xa9\x82\xc2\x82\xe7\x82\xf0\x94\xed\x82\xb9\x82\xdc\x82\xb7"
+ },
+ {307, ""},
+ {
+ 360, "\x82\xbb\x82\xea\x82\xa9\x82\xe7\x81" "A" ""
+ "\x8d\x91\x89\xa4\x82\xaa\x92\x85\x88\xdf\x82\xcc\x8b" "V" ""
+ "\x82\xcc\x82\xbd\x82\xdf\x82\xc9\x83" "T" ""
+ "\x83\x8d\x83\x93\x82\xd6\x82\xc6\x88\xda\x93\xae\x82\xc8\x82\xb3\x82\xe9\x82\xe6\x82\xa4\x82\xc9\x82\xc6\x81" ""
+ "A" "\x93\xb9\x82\xaa\x8a" "J" ""
+ "\x82\xaf\x82\xe7\x82\xea\x82\xdc\x82\xb5\x82\xbd"
+ },
+ {406, ""},
+ {
+ 440, "\x8d\x91\x89\xa4\x82\xaa\x8c" "y" "\x90" "H" ""
+ "\x82\xf0\x82\xa8\x82\xc6\x82\xe8\x82\xc9\x82\xc8\x82\xe9\x8a\xd4\x82\xc9\x81" ""
+ "A" "\x8e" "Q" ""
+ "\x97\xf1\x82\xf0\x8b\x96\x82\xb3\x82\xea\x82\xbd\x92\xec\x90" "b" ""
+ "\x82\xbd\x82\xbf\x82\xaa\x89\xc1\x82\xed\x82\xe8\x82\xdc\x82\xb7\x81" ""
+ "B"
+ },
+ {
+ 520, "\x82\xdd\x82\xc8\x81" "A" ""
+ "\x8d\x91\x89\xa4\x82\xc9\x82\xa8\x96\xda\x82\xf0\x82\xa8\x97\xaf\x82\xdf\x82\xa2\x82\xbd\x82\xbe\x82\xb1\x82\xa4\x82\xc6\x8a\xe8\x82\xc1\x82\xc4\x8d\x91\x89\xa4\x82\xcc\x8c\x92\x8d" ""
+ "N" "\x8f\xf3\x91\xd4\x82\xf0\x8e" "f" ""
+ "\x82\xc1\x82\xbd\x82\xe8\x81" "A" ""
+ "\x82\xbb\x82\xcc\x93\xfa\x82\xcc\x89\\\x82\xc9\x8e\xa8\x82\xf0\x8c" ""
+ "X" "\x82\xaf\x82\xbd\x82\xe8\xa4\x89\\\x82\xf0\x8d" "L" ""
+ "\x82\xdf\x82\xbd\x82\xe8\x82\xb5\x82\xdc\x82\xb7\x81" "B"
+ },
+ {
+ 600, "\x8f" "O" ""
+ "\x96\xda\x82\xc9\x82\xb3\x82\xe7\x82\xb3\x82\xea\x82\xc4\x82\xa2\x82\xe9\x8d\x91\x89\xa4\x82\xcd\x81" ""
+ "A" ""
+ "\x82\xa2\x82\xc2\x82\xe0\x82\xc8\x82\xaa\x82\xe7\x82\xcc\x96\xb1\x82\xdf\x82\xf0\x89\xca\x82\xbd\x82\xb5\x82\xdc\x82\xb5\x82\xbd\x81" ""
+ "B" "\x95" "E" "\x82\xf0\x82\xa0\x82\xbd\x82\xe7\x82\xb9\x81" "A" ""
+ "\x90\xf4\x96\xca\x82\xf0\x82\xb3\x82\xb9\x81" "A" ""
+ "\x95\x9e\x82\xf0\x92\x85\x82\xb9\x82\xc4\x82\xe0\x82\xe7\x82\xc1\x82\xbd\x82\xcc\x82\xc5\x82\xb7"
+ },
+ {679, ""},
+ {
+ 815, "\x90" "g" ""
+ "\x82\xb6\x82\xbd\x82\xad\x82\xf0\x90\xae\x82\xa6\x82\xbd\x8d\x91\x89\xa4\x82\xcd\x81" ""
+ "A" "\x90" "Q" ""
+ "\x8f\x8a\x82\xc9\x96\xdf\x82\xc1\x82\xc4\x92\xa9\x82\xcc\x92" "Z" ""
+ "\x82\xa2\x82\xa8\x8b" "F" ""
+ "\x82\xe8\x82\xf0\x8f\xa5\x82\xa6\x82\xdc\x82\xb5\x82\xbd"
+ },
+ {860, ""},
+ {
+ 948, "\x82\xa8\x8b" "F" "\x82\xe8\x82\xf0\x8f\xa5\x82\xa6\x8f" "I" ""
+ "\x82\xed\x82\xe9\x82\xc6\x81" "A" ""
+ "\x8d\x91\x89\xa4\x82\xcd\x91\xe5\x90" "b" ""
+ "\x82\xbd\x82\xbf\x82\xf0\x8f" "]" "\x82\xa6\x82\xc4\x81" "A" ""
+ "\x8d\x91\x8e\x96\x82\xaa\x98" "_" ""
+ "\x82\xb6\x82\xe7\x82\xea\x82\xe9\x89\xef\x8b" "c" ""
+ "\x82\xcc\x8a\xd4\x82\xc9\x88\xda\x82\xe8\x82\xdc\x82\xb5\x82\xbd"
+ },
+ {1027, ""},
+ }
+ }, /* a2_vf.hns */
+ {
+ "a3_vf.hns", {
+ {
+ 30, "\x92\x85\x88\xdf\x82\xf0\x8f" "I" ""
+ "\x82\xa6\x82\xbd\x8d\x91\x89\xa4\x82\xcd\x89\xef\x8b" "c" ""
+ "\x82\xcc\x8a\xd4\x82\xc9\x88\xda\x82\xe8\x82\xdc\x82\xb5\x82\xbd\x81" ""
+ "B" "\x91\xe5\x90" "b" ""
+ "\x82\xbd\x82\xbf\x82\xc9\x88\xcd\x82\xdc\x82\xea\x82\xc4\x81" "A" ""
+ "\x8d\x91\x8e\x96\x82\xf0\x82\xc2\x82\xa9\x82\xb3\x82\xc7\x82\xe8\x82\xdc\x82\xb7\x81" ""
+ "B" "\x94\xe9\x96\xa7\x82\xf0\x8e\xe7\x82\xe9\x82\xbd\x82\xdf\x81" ""
+ "A" ""
+ "\x95\x94\x89\xae\x82\xcc\x94\xe0\x82\xcd\x95\xc2\x82\xdc\x82\xc1\x82\xc4\x82\xa2\x82\xdc\x82\xb7\x81" ""
+ "B"
+ },
+ {
+ 110, "\x82\xa2\x82\xbf\x82\xce\x82\xf1\x82\xcc\x8f" "d" "\x90" "b" ""
+ "\x82\xc5\x82\xa0\x82\xe9\x83\x8b\x81" "[" "\x83\x94\x83" "H" ""
+ "\x83\x8f\x8c\xf2\x8e\xdd\x82\xaa\x82\xbb\x82\xcc\x93\xfa\x82\xcc\x8b" ""
+ "c" ""
+ "\x8e\x96\x97\\\x92\xe8\x82\xf0\x94\xad\x95\\\x82\xb5\x82\xdc\x82\xb5\x82\xbd"
+ },
+ {211, ""},
+ {
+ 280, "\x82\xdd\x82\xc8\x82\xcc\x8e\xd2\x81" "A" ""
+ "\x92\x85\x90\xc8\x82\xf0"
+ },
+ {
+ 290, "\x8d\x91\x89\xa4\x82\xcd\x82\xb3\x82\xdc\x82\xb4\x82\xdc\x82\xc8\x88\xd3"
+ "\x8c\xa9\x82\xc9\x8e\xa8\x82\xf0\x8c"
+ "X" "\x82\xaf\x82\xc4\x82\xa9\x82\xe7\x8c\x88\x92\xe8\x82\xf0\x8d" ""
+ "s" "\x82\xa2\x82\xdc\x82\xb5\x82\xbd\x81" "B" ""
+ "\x82\xc5\x82\xe0\x81" "A" ""
+ "\x91\xe5\x90\xa8\x82\xcc\x88\xd3\x8c\xa9\x82\xc9\x93\xaf\x92\xb2\x82\xb7\x82\xe9\x82\xb1\x82\xc6\x82\xaa\x91\xbd\x82\xa2\x82\xcc\x82\xc5\x82\xb7"
+ },
+ {
+ 360, "\x82\xbb\x82\xcc\x8a\xd4\x81" "A" "\x92\xec\x90" "b" ""
+ "\x82\xbd\x82\xbf\x82\xcd\x8d\x91\x89\xa4\x82\xcc\x82\xa8\x8f" "o" ""
+ "\x82\xdc\x82\xb5\x82\xf0\x8d" "L" ""
+ "\x8a\xd4\x82\xc5\x91\xd2\x82\xc1\x82\xc4\x82\xa2\x82\xdc\x82\xb5\x82\xbd"
+ },
+ {411, ""},
+ {
+ 440, "\x8a" "F" "\x97" "l" "\x81" "A" ""
+ "\x8d\x91\x89\xa4\x95\xc3\x89\xba\x82\xcc\x82\xa8\x8f" "o" ""
+ "\x82\xdc\x82\xb5\x82\xc5\x82\xb7"
+ },
+ {450, ""},
+ {
+ 550, "\x90\xb3\x8c\xdf\x82\xc9\x82\xc8\x82\xe8\x82\xdc\x82\xb5\x82\xbd\x81" ""
+ "B" "\x8d\x91\x89\xa4\x82\xcd\x83" "~" "\x83" "T" "\x82\xc9\x8f" ""
+ "o" "\x90\xc8\x82\xc8\x82\xb3\x82\xa2\x82\xdc\x82\xb7\x81" "B" ""
+ "\x8b" "{" "\x92\xec\x91" "S" "\x91\xcc\x82\xaa\x81" "A" ""
+ "\x97\xf1\x82\xc9\x82\xc8\x82\xc1\x82\xc4\x82\xbb\x82\xcc\x8c\xe3\x82\xc9\x8f" ""
+ "]" "\x82\xa2\x82\xdc\x82\xb7\x81" "B" ""
+ "\x8d\x91\x89\xa4\x95\xc3\x89\xba\x82\xcd\x89\xa4\x8e" "q" ""
+ "\x82\xe2\x89\xa4\x8f\x97\x82\xbd\x82\xbf\x82\xc9\x94\xba\x82\xed\x82\xea\x82\xc4\x89\xa4\x8e\xba\x97\xe7\x94" ""
+ "q" "\x93\xb0\x82\xc9\x88\xda\x82\xe9\x93" "r" ""
+ "\x92\x86\x82\xc5\x81" "A" ""
+ "\x91\xe5\x8b\x8f\x8e\xba\x82\xf0\x89\xa1\x90\xd8\x82\xe8\x82\xdc\x82\xb7" ""
+ " "
+ },
+ {687, ""},
+ {
+ 728, "\x95\xc3\x89\xba\x81" "A" ""
+ "\x82\xc7\x82\xa4\x82\xbc\x82\xb1\x82\xcc\x92" "Q" ""
+ "\x8a\xe8\x8f\x91\x82\xf0\x82\xb2\x97\x97\x82\xad\x82\xbe\x82\xb3\x82\xa2\x81" "B"
+ "\x89\x99\x82\xc9\x91\xe3\x82\xed\x82\xc1\x82\xc4\x95\xc3\x89\xba\x82\xc9\x82\xa8"
+ "\x8a\xe8\x82\xa2\x90\\\x82\xb5\x8f\xe3\x82\xb0\x82\xdc\x82\xb7\x81" "B"
+ "\x89\x99\x82\xcd\x8b\xb0\x82\xeb\x82\xb5\x82\xa2\x8d\xd9\x94\xbb\x82\xcc\x8b" "]"
+ "\x90\xb5\x82\xc9\x82\xc8\x82\xc1\x82\xbd\x82\xcc\x82\xc5\x82\xb7"
+ },
+ {
+ 805, "\x82\xbb\x82\xa4\x82\xa9\x81" "A" "\x82\xbb\x82\xa4\x82\xa9\x81" ""
+ "A" "\x92\xb2\x82\xd7\x82\xb3\x82\xb9\x82\xe6\x82\xa4" " "
+ },
+ {840, ""},
+ {
+ 1060, "\x8d\x91\x89\xa4\x82\xaa\x89\xa4\x89\xc6\x82\xcc\x90\xea\x97" "p" ""
+ "\x90\xc8\x82\xc9\x92\x85\x8d\xc0\x82\xb7\x82\xe9\x82\xc6\x81" "A" ""
+ "\x89\xa4\x8e" "q" ""
+ "\x82\xc8\x82\xe7\x82\xd1\x82\xc9\x89\xa4\x8f\x97\x82\xbd\x82\xbf\x82\xaa\x81" ""
+ "A" "\x90" "g" ""
+ "\x95\xaa\x82\xcc\x8f\x87\x82\xc9\x82\xbb\x82\xcc\x8c\xe3\x82\xeb\x82\xc9\x95\xc0\x82\xd1\x82\xdc\x82\xb7\x81" ""
+ "B" ""
+ "\x8d\x91\x89\xa4\x82\xcd\x8e\x84\x8c\xea\x82\xf0\x8b\xd6\x82\xb6\x82\xe9\x82\xc6\x81" ""
+ "A" ""
+ "\x96\xd9\x93\x98\x82\xf0\x91\xa3\x82\xb5\x82\xdc\x82\xb5\x82\xbd"
+ },
+ {1220, ""},
+ }
+ }, /* a3_vf.hns */
+ {
+ "a4_vf.hns", {
+ {
+ 90, "\x83" "~" "\x83" "T" "\x82\xcc\x8a\xd4\x81" "A" ""
+ "\x89\xa4\x89\xc6\x82\xcc\x90" "~" "\x96" "[" ""
+ "\x82\xc5\x82\xcd\x90\xea\x94" "C" "\x82\xcc\x96\xf0\x90" "l" ""
+ "\x81" "A" "\x83\x8d\x81" "[" "\x83" "X" "\x83" "g" "\x8c" "W" ""
+ "\x81" "A" "\x83" "p" "\x83\x93\x8f\xc4\x82\xab\x90" "E" "\x90" "l" ""
+ "\x82\xe2\x8f\x95\x8e\xe8\x82\xbd\x82\xbf\x82\xaa\x90\xb3\x8e" "`" ""
+ "\x82\xcc\x8f\x80\x94\xf5\x82\xc9\x91\xe5\x82\xed\x82\xe7\x82\xed\x82\xc5\x82\xb7\x81" ""
+ "B"
+ },
+ {
+ 200, "\x8c\xea\x82\xe8\x91\x90\x82\xc9\x82\xc8\x82\xe9\x82\xd9\x82\xc7\x82\xcc\x90" ""
+ "H" "\x97" "~" ""
+ "\x82\xf0\x82\xe0\x82\xc2\x8d\x91\x89\xa4\x82\xaa\x8f\xa2\x82\xb5\x8f\xe3\x82"
+ "\xaa\x82\xe7\x82\xc8\x82\xa9\x82\xc1\x82\xbd\x97\xbf\x97\x9d\x82\xcd\x81" "A"
+ "\x91\xbc\x82\xcc\x8e\xd2\x82\xcc\x8c\xfb\x82\xc9\x93\xfc\x82\xe8\x81" ""
+ "A" "\x88\xea\x94\xca\x90" "l" ""
+ "\x82\xe0\x89\xa4\x89\xc6\x82\xcc\x90" "~" "\x96" "[" ""
+ "\x82\xcc\x8e" "c" ""
+ "\x82\xe8\x95\xa8\x82\xf0\x94\x83\x82\xa4\x82\xb1\x82\xc6\x82\xf0\x92" ""
+ "p" ""
+ "\x82\xc6\x82\xb5\x82\xdc\x82\xb9\x82\xf1\x82\xc5\x82\xb5\x82\xbd"
+ },
+ {300, ""},
+ {
+ 320, "\x8c\xf6\x8a" "J" "\x82\xcc\x90\xb3\x8e" "`" "\x82\xcd\x91" "s" ""
+ "\x8a\xcf\x82\xc5\x81" "A" "\x92\xec\x90" "b" ""
+ "\x82\xbd\x82\xbf\x82\xcd\x82\xb1\x82\xcc\x90\xc8\x82\xc9\x82\xc2\x82\xe7\x82\xc8\x82\xeb\x82\xa4\x82\xc6\x8b" ""
+ "}" "\x82\xae\x82\xcc\x82\xc5\x82\xb5\x82\xbd"
+ },
+ {
+ 366, "\x8a" "F" "\x97" "l" "\x81" "A" ""
+ "\x8d\x91\x89\xa4\x95\xc3\x89\xba\x82\xcc\x82\xa8\x8f\xa2\x82\xb5\x8f\xe3\x82\xaa\x82\xe8\x82\xc9\x82\xc8\x82\xe9\x93\xf7\x97\xbf\x97\x9d\x82\xc5\x82\xb7"
+ },
+ {393, ""},
+ {
+ 610, "\x8d\x91\x89\xa4\x82\xc6\x93\xaf\x82\xb6\x83" "e" "\x81" "[" ""
+ "\x83" "u" ""
+ "\x83\x8b\x82\xc9\x82\xc2\x82\xad\x82\xb1\x82\xc6\x82\xcc\x82\xc5\x82\xab\x82\xe9\x82\xcc\x82\xcd\x89\xa4\x89\xc6\x82\xcc\x90" ""
+ "l" "\x81" "X" "\x82\xbe\x82\xaf\x82\xc5\x81" "A" ""
+ "\x8d\x91\x89\xa4\x82\xcc\x96\xca\x91" "O" ""
+ "\x82\xc9\x8d\xc0\x82\xe9\x82\xb1\x82\xc6\x82\xcc\x82\xc5\x82\xab\x82\xe9\x82\xcc\x82\xcd\x8c\xf6\x8e\xdd\x95" ""
+ "v" "\x90" "l" "\x82\xbe\x82\xaf\x82\xc5\x82\xb5\x82\xbd" " "
+ },
+ {685, ""},
+ {
+ 705, "\x91\xa7\x8e" "q" "\x82\xe6\x81" "A" "\x94" "n" ""
+ "\x8f\xe3\x8b\xa3\x8b" "Z" ""
+ "\x91\xe5\x89\xef\x82\xcc\x8f\x80\x94\xf5\x82\xcd\x90" "i" ""
+ "\x82\xdf\x82\xc4\x82\xa8\x82\xe9\x82\xa9\x81" "H"
+ },
+ {747, ""},
+ {
+ 760, "\x82\xb1\x82\xcc\x90\xb3\x8e" "`" "\x82\xc5\x82\xcd" "3" ""
+ "\x8e\xed\x97\xde\x82\xcc\x83" "R" "\x81" "[" "\x83" "X" ""
+ "\x97\xbf\x97\x9d\x82\xaa\x8f" "o" ""
+ "\x82\xb3\x82\xea\x82\xdc\x82\xb7\x82\xaa\x81" "A" ""
+ "\x82\xa2\x82\xb8\x82\xea\x82\xcc\x83" "R" "\x81" "[" "\x83" "X" ""
+ "\x82\xe0\x83" "X" "\x81" "[" "\x83" "v" "\x82\xc9\x8e" "n" ""
+ "\x82\xdc\x82\xe8\x81" "A" "\x91" "O" "\x8d\xd8\x81" "A" ""
+ "\x93\xf7\x97\xbf\x97\x9d\x81" "A" "\x83" "f" "\x83" "U" "\x81" "[" ""
+ "\x83" "g" "\x82\xd6\x82\xc6" "6" ""
+ "\x8e\xed\x97\xde\x82\xcc\x97\xbf\x97\x9d\x82\xaa\x8f" "o" ""
+ "\x82\xdc\x82\xb7"
+ },
+ {847, ""},
+ }
+ }, /* a4_vf.hns */
+ {
+ "a5_vf.hns", {
+ {
+ 13, "\x90\xb3\x8e" "`" "\x82\xaa\x8f" "I" ""
+ "\x82\xed\x82\xe9\x82\xc6\x81" "A" "\x89\xca\x95\xa8\x82\xaa\x8f" ""
+ "o" "\x82\xdc\x82\xb7"
+ },
+ {36, ""},
+ {
+ 90, "\x8d\x91\x89\xa4\x82\xcd\x82\xbb\x82\xea\x82\xa9\x82\xe7\x82\xcc\x90\x94"
+ "\x8e\x9e\x8a\xd4\x82\xf0\x8d\x91\x8e\x96\x82\xc9\x82\xa0\x82\xc4\x82\xdc"
+ "\x82\xb5\x82\xbd\x81" "B" "\x82\xb1\x82\xcc\x8e\x9e\x8a\xfa\x81" "A" ""
+ "\x8d\x91\x89\xa4\x82\xcd\x83" "}" "\x83\x93\x83" "g" "\x83" "m" ""
+ "\x83\x93\x8c\xf2\x8e\xdd\x95" "v" "\x90" "l" ""
+ "\x82\xcc\x8b\x8f\x8e\xba\x82\xc5\x81" "A" ""
+ "\x8e\x9e\x82\xc9\x82\xcd\x91\xe5\x90" "b" ""
+ "\x82\xbd\x82\xbf\x82\xf0\x8c\xf0\x82\xa6\x82\xc4\x8e\xb7\x96\xb1\x82\xb7\x82\xe9\x82\xb1\x82\xc6\x82\xf0\x8d" ""
+ "D" "\x82\xdd\x82\xdc\x82\xb5\x82\xbd\x81" "B"
+ },
+ {
+ 200, "\x8d\x91\x89\xa4\x82\xcd\x93\xe0\x89\x8f\x8a\xd6\x8c" "W" ""
+ "\x82\xc9\x82\xa0\x82\xe9\x8c\xf2\x8e\xdd\x95" "v" "\x90" "l" ""
+ "\x82\xcc\x8b\x8f\x8e\xba\x82\xc9\x81" "A" ""
+ "\x8d\x91\x8e\x96\x82\xcc\x90\x8b\x8d" "s" "\x82\xc9\x95" "K" ""
+ "\x97" "v" ""
+ "\x82\xc8\x95\xbd\x88\xc0\x82\xc6\x90\xc3\xe6\x8d\x82\xb3\x82\xf0\x8c\xa9\x8f" ""
+ "o" "\x82\xb5\x82\xc4\x82\xa2\x82\xbd\x82\xcc\x82\xc5\x82\xb7"
+ },
+ {296, ""},
+ {
+ 310, "\x8d\x91\x89\xa4\x82\xcd\x81" "A" "\x8f\x91\x97\xde\x82\xf0" "3" ""
+ "\x8e\x9e\x8a\xd4\x82\xc9\x82\xed\x82\xbd\x82\xc1\x82\xc4\x8f\xda\x8d\xd7\x82\xc9\x92\xb2\x82\xd7\x82\xdc\x82\xb5\x82\xbd\x81" ""
+ "D" "\x81" "D" "\x81" "D"
+ },
+ {345, ""},
+ {
+ 360, "\x92\xec\x90" "b" ""
+ "\x82\xbd\x82\xbf\x82\xc9\x82\xc6\x82\xc1\x82\xc4\x82\xa2\x82\xdc\x82\xcd\x81" ""
+ "A" "\x89" "e" ""
+ "\x82\xcc\x82\xb2\x82\xc6\x82\xad\x8d\x91\x89\xa4\x82\xc9\x95" "t" ""
+ "\x82\xab\x8f" "]" ""
+ "\x82\xed\x82\xc8\x82\xad\x82\xc4\x82\xe6\x82\xa2\x81" "A" ""
+ "\x88\xea\x93\xfa\x82\xcc\x93\xe0\x82\xc5\x82\xe0\x82\xdc\x82\xea\x82\xc8\x82\xd0\x82\xc6\x82\xc6\x82\xab\x82\xc5\x82\xb5\x82\xbd\x81" ""
+ "B" "\x83" "J" "\x81" "[" "\x83" "h" "\x97" "V" ""
+ "\x82\xd1\x82\xc9\x94" "M" ""
+ "\x82\xf0\x82\xa0\x82\xb0\x82\xe9\x8e\xd2\x82\xe0\x82\xa0\x82\xe8\x82\xdc\x82\xb5\x82\xbd\x81" ""
+ "B"
+ },
+ {
+ 460, "\x83" "J" "\x81" "[" "\x83" "h" "\x97" "V" "\x82\xd1\x82\xc5\x8a" ""
+ "m" ""
+ "\x82\xa9\x82\xc8\x8e\xfb\x93\xfc\x82\xf0\x93\xbe\x82\xe9\x82\xb1\x82\xc6\x82\xe0\x82\xc5\x82\xab\x82\xbd\x82\xcc\x82\xc5\x81" ""
+ "A" ""
+ "\x82\xa2\x82\xa9\x82\xb3\x82\xdc\x8f\x9f\x95\x89\x82\xf0\x82\xb5\x82\xc4\x89\xa4\x82\xcc\x95" ""
+ "s" ""
+ "\x8b\xbb\x82\xf0\x94\x83\x82\xa4\x82\xb1\x82\xc6\x82\xf0\x82\xbd\x82\xdf\x82\xe7\x82\xed\x82\xc8\x82\xa2\x8e\xd2\x82\xe0\x82\xa0\x82\xc1\x82\xbd\x82\xcc\x82\xc5\x82\xb7"
+ },
+ {560, ""},
+ {
+ 665, "\x83" "r" "\x83\x8a\x83\x84\x81" "[" "\x83" "h" "\x82\xe2\x83" "g" ""
+ "\x83\x8b\x83" "}" "\x83" "_" "\x83\x80\x81" "i" ""
+ "\x8b\x85\x82\xb1\x82\xeb\x82\xaa\x82\xb5\x81" "j" ""
+ "\x82\xc8\x82\xc7\x82\xcc\x8b\x85\x8b" "Z" ""
+ "\x82\xc9\x91\xc5\x82\xbf\x8d\x9e\x82\xde\x8e\xd2\x82\xe0\x82\xa0\x82\xe8\x82\xdc\x82\xb5\x82\xbd\x82\xaa\x81" ""
+ "A" "\x83\x94\x83" "F" "\x83\x8b\x83" "T" "\x83" "C" ""
+ "\x83\x86\x82\xc5\x8d\xc5\x82\xe0\x8f" "d" ""
+ "\x82\xf1\x82\xb6\x82\xe7\x82\xea\x82\xbd\x8a" "y" ""
+ "\x82\xb5\x82\xdd\x82\xcc\x88\xea\x82\xc2\x82\xcd\x81" "A" "\x83" ""
+ "E" "\x83" "B" "\x83" "b" "\x83" "g" "\x82\xc9\x95" "x" ""
+ "\x82\xf1\x82\xbe\x89\xef\x98" "b" "\x82\xc5\x82\xb5\x82\xbd"
+ },
+ {766, ""},
+ }
+ }, /* a5_vf.hns */
+ {
+ "a6_vf.hns", {
+ {
+ 45, "\x97" "[" "\x8d\x8f\x82\xcc" "5" "\x8e\x9e\x8d\xa0\x81" "A" ""
+ "\x8e\xb7\x96\xb1\x82\xf0\x8f" "I" ""
+ "\x82\xa6\x82\xbd\x8d\x91\x89\xa4\x82\xcd\x81" "A" "\x89\xa4\x8b" ""
+ "{" ""
+ "\x82\xcc\x8c\x9a\x95\xa8\x82\xf0\x82\xcc\x82\xbc\x82\xab\x82\xc8\x82\xaa\x82\xe7\x92\xeb\x89\x80\x82\xf0\x8e" ""
+ "U" "\x95\xe0\x82\xb5\x82\xdc\x82\xb7"
+ },
+ {
+ 90, "\x81" "D" "\x81" "D" "\x81" "D" ""
+ "\x82\xbb\x82\xb5\x82\xc4\x92\xec\x90" "b" ""
+ "\x82\xbd\x82\xbf\x82\xaa\x91\xd2\x82\xbf\x8e\xf3\x82\xaf\x82\xc4\x82\xa2\x82\xe9\x91\xe5\x97\x9d\x90\xce\x82\xcc\x92\x86\x92\xeb\x82\xc9\x8e\x8a\x82\xe8\x82\xdc\x82\xb5\x82\xbd"
+ },
+ {160, ""},
+ {
+ 170, "\x8d\x91\x89\xa4\x82\xcc\x82\xa8\x8b\x9f\x82\xaa\x82\xc5\x82\xab\x82\xe9\x82\xcc\x82\xcd\x81" ""
+ "A" "\x82\xbb\x82\xcc\x93\xc1\x8c\xa0\x82\xf0\x94" "F" ""
+ "\x82\xdf\x82\xe7\x82\xea\x82\xbd\x8e\xd2\x82\xbe\x82\xaf\x82\xc5\x82\xb5\x82\xbd"
+ },
+ {208, ""},
+ {
+ 295, "\x88\xea\x8d" "s" "\x82\xcd\x89\xba\x82\xcc\x83" "M" ""
+ "\x83\x83\x83\x8b\x83\x8a\x81" "[" ""
+ "\x82\xf0\x89\xa1\x90\xd8\x82\xc1\x82\xc4\x83" "e" "\x83\x89\x83" ""
+ "X" "\x82\xd6\x81" "A" ""
+ "\x82\xbb\x82\xea\x82\xa9\x82\xe7\x90\x85\x92\xeb\x89\x80\x82\xd6\x82\xc6\x88\xda\x93\xae\x82\xb5\x82\xdc\x82\xb5\x82\xbd\x81" ""
+ "B" "\x8d\x91\x89\xa4\x82\xcd\x82\xbb\x82\xb1\x82\xa9\x82\xe7\x81" ""
+ "A" "\x8b" "{" "\x93" "a" ""
+ "\x82\xcc\x90\xb3\x96\xca\x82\xf0\x82\xed\x82\xb8\x82\xa9\x82\xc8\x8e\x9e\x8a\xd4\x92\xad\x82\xdf\x82\xc4\x82\xb7\x82\xb2\x82\xb7\x82\xcc\x82\xaa\x82\xa8\x8d" ""
+ "D" "\x82\xab\x82\xc5\x82\xb5\x82\xbd\x81" "B"
+ },
+ {
+ 430, "\x83" "I" "\x83\x89\x83\x93\x83" "W" "\x83\x85\x83\x8a\x81" "[" ""
+ "\x82\xa9\x82\xe7\x83" "R" "\x83\x8d\x83" "i" "\x81" "[" "\x83" "h" ""
+ "\x82\xdc\x82\xc5\x81" "A" "\x8d\x91\x89\xa4\x82\xcd\x90" "i" ""
+ "\x8d" "s" ""
+ "\x92\x86\x82\xcc\x82\xb3\x82\xdc\x82\xb4\x82\xdc\x82\xc8\x8d" "H" ""
+ "\x8e\x96\x82\xcc\x90" "i" "\x82\xdd\x8b\xef\x8d\x87\x82\xf0\x94" ""
+ "O" ""
+ "\x93\xfc\x82\xe8\x82\xc9\x8c\xa9\x82\xc4\x82\xdc\x82\xed\x82\xe8\x82\xdc\x82\xb5\x82\xbd"
+ },
+ {492, ""},
+ {
+ 945, "\x82\xb1\x82\xcc\x8e" "U" "\x8d\xf4\x82\xcd\x81" "A" ""
+ "\x8f\xac\x83" "x" "\x83" "l" "\x83" "c" "\x83" "B" "\x83" "A" ""
+ "\x82\xc5\x8f" "I" "\x82\xed\x82\xe8\x82\xdc\x82\xb5\x82\xbd\x81" ""
+ "B" "\x8d\x91\x89\xa4\x82\xcd\x83" "x" "\x83" "l" "\x83" "c" "\x83" ""
+ "B" "\x83" "A" "\x82\xa9\x82\xe7\x83" "S" "\x83\x93\x83" "h" ""
+ "\x83\x89\x82\xcc\x91" "D" ""
+ "\x93\xaa\x82\xf0\x8c\xc4\x82\xd1\x8a\xf1\x82\xb9\x82\xc4\x81" "A" ""
+ "\x90\xb0\x82\xea\x82\xbd\x93\xfa\x82\xc9\x82\xcd\x89" "^" ""
+ "\x89\xcd\x82\xcc\x90\x9f\x82\xf1\x82\xbe\x90\x85\x82\xcc\x8f\xe3\x82\xc9\x92\xec\x90" ""
+ "b" "\x82\xbd\x82\xbf\x82\xf0\x98" "A" "\x82\xea\x8f" "o" ""
+ "\x82\xb5\x82\xbd\x82\xcc\x82\xc5\x82\xb5\x82\xbd"
+ },
+ }
+ }, /* a6_vf.hns */
+ {
+ "a7_vf.hns", {
+ {
+ 40, "\x89\xc4\x82\xcc\x8f\xaa\x82\xc9\x82\xcd\x81" "A" ""
+ "\x8d\x91\x89\xa4\x82\xaa\x97" "[" "\x90" "H" ""
+ "\x82\xcc\x91\xe3\x82\xed\x82\xe8\x82\xc9\x92\xeb\x89\x80\x93\xe0\x82\xcc\x96\xd8\x97\xa7\x82\xcc\x82\xa2\x82\xb8\x82\xea\x82\xa9\x82\xc9\x8c" ""
+ "y" "\x90" "H" "\x82\xf0\x97" "p" ""
+ "\x88\xd3\x82\xb3\x82\xb9\x82\xe9\x82\xb1\x82\xc6\x82\xcd\x82\xe6\x82\xad\x92" ""
+ "m" "\x82\xe7\x82\xea\x82\xc4\x82\xa2\x82\xdc\x82\xb5\x82\xbd"
+ },
+ {107, ""},
+ {
+ 198, "\x82\xbb\x82\xb5\x82\xc4\x93\xfa\x82\xaa\x95\xe9\x82\xea\x82\xe9\x82\xc6\x81" ""
+ "A" "\x8d\x91\x89\xa4\x82\xcc\x8f" "A" "\x90" "Q" ""
+ "\x82\xcc\x82\xbd\x82\xdf\x82\xc9\x81" "A" "\x91" "S" ""
+ "\x88\xf5\x82\xaa\x8b" "{" "\x93" "a" ""
+ "\x82\xc9\x96\xdf\x82\xe9\x82\xcc\x82\xc5\x82\xb5\x82\xbd"
+ },
+ {245, ""},
+ {
+ 355, "\x82\xb2\x95" "w" "\x90" "l" "\x82\xbd\x82\xbf\x82\xcd\x81" "A" ""
+ "\x8d\x91\x89\xa4\x82\xcc\x8f" "A" "\x90" "Q" ""
+ "\x82\xc9\x82\xe0\x81" "A" "\x82\xdc\x82\xbd\x8b" "N" ""
+ "\x8f\xb0\x82\xe2\x92\x85\x88\xdf\x82\xc9\x82\xe0\x8f\xb5\x91\xd2\x82\xb3\x82\xea\x82\xe9\x82\xb1\x82\xc6\x82\xaa\x82\xa0\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x82\xc5\x82\xb5\x82\xbd\x81" ""
+ "B" "\x8d\x91\x89\xa4\x82\xcd\x95" "w" "\x90" "l" ""
+ "\x82\xbd\x82\xbf\x82\xc9\x82\xbb\x82\xcc\x93\xfa\x82\xcc\x8d\xc5\x8c\xe3\x82\xcc\x88\xa5\x8e" ""
+ "A" "\x82\xf0\x82\xb7\x82\xe9\x82\xbd\x82\xdf\x82\xc9\x81" "A" ""
+ "\x83" "T" "\x83\x8d\x83\x93\x82\xc9\x8f" "W" ""
+ "\x82\xdf\x82\xdc\x82\xb5\x82\xbd"
+ },
+ {442, ""},
+ {
+ 454, "\x82\xb2\x95" "w" "\x90" "l" ""
+ "\x95\xfb\x82\xaa\x82\xb1\x82\xcc\x89\xc4\x8e\x8a\x82\xcc\x96\xe9\x82\xc9\x81" ""
+ "A" "\x8a" "F" "\x90" "S" "\x92" "n" "\x82\xe6\x82\xad\x8b" "x" ""
+ "\x82\xdc\x82\xea\x82\xe9\x82\xb1\x82\xc6\x82\xf0\x8a\xe8\x82\xc1\x82\xc4\x82\xa8\x82\xe8\x82\xdc\x82\xb7\x82\xbc" ""
+ " "
+ },
+ {512, ""},
+ {
+ 647, "\x82\xb1\x82\xea\x82\xc5\x81" "A" "\x82\xe2\x82\xc1\x82\xc6\x8f" ""
+ "A" "\x90" "Q" "\x82\xcc\x8b" "V" "\x82\xaa\x8e" "n" ""
+ "\x82\xdc\x82\xe8\x82\xdc\x82\xb7\x81" "B" ""
+ "\x92\xa9\x82\xcc\x92\x85\x88\xdf\x82\xcc\x8b" "V" ""
+ "\x82\xc9\x97\xf1\x90\xc8\x82\xb5\x82\xbd\x92\xec\x90" "b" ""
+ "\x82\xbd\x82\xbf\x82\xcd\x81" "A" "\x82\xb1\x82\xcc\x8f" "A" ""
+ "\x90" "Q" "\x82\xcc\x8b" "V" ""
+ "\x82\xc9\x82\xe0\x97\xd5\x82\xde\x82\xb1\x82\xc6\x82\xf0\x96\xb1\x82\xdf\x82\xc6\x82\xb5\x82\xc4\x82\xa2\x82\xdc\x82\xb5\x82\xbd"
+ },
+ {722, ""},
+ {
+ 733, "\x90" "C" "\x91\xe4\x82\xcd\x92" "N" "\x82\xc9\x93" "n" ""
+ "\x82\xb5\x82\xdc\x82\xb5\x82\xe5\x82\xa4\x82\xa9\x81" "A" ""
+ "\x95\xc3\x89\xba\x81" "H "
+ },
+ {763, ""},
+ {
+ 925, "\x8d\x91\x89\xa4\x82\xcd\x81" "A" "\x96\x88\x93\xfa\x82\xcc\x8d" ""
+ "s" "\x82\xa2\x82\xcc\x88\xea\x82\xc2\x88\xea\x82\xc2\x82\xf0\x91" ""
+ "s" ""
+ "\x91\xe5\x82\xc8\x88\xd3\x96\xa1\x82\xf0\x82\xe0\x82\xc2\x82\xe0\x82\xcc\x82\xc9\x95\xcf\x96" ""
+ "e" "\x82\xb3\x82\xb9\x82\xdc\x82\xb5\x82\xbd\x81" "B" "\x8f" "A" ""
+ "\x90" "Q" "\x82\xcc\x8d\xdb\x82\xc9\x90" "C" ""
+ "\x91\xe4\x82\xf0\x8c" "f" ""
+ "\x82\xb0\x82\xe0\x82\xc2\x8c\xa0\x97\x98\x82\xcd\x97" "D" ""
+ "\x82\xea\x82\xbd\x8e\xd2\x82\xc9\x97" "^" ""
+ "\x82\xa6\x82\xe7\x82\xea\x82\xdc\x82\xb5\x82\xbd\x81" "B" ""
+ "\x82\xbb\x82\xcc\x89" "h" "\x97" "_" "\x82\xaa\x8a" "O" ""
+ "\x8d\x91\x82\xa9\x82\xe7\x82\xcc\x96" "K" ""
+ "\x96\xe2\x8e\xd2\x82\xc9\x97" "^" ""
+ "\x82\xa6\x82\xe7\x82\xea\x82\xe9\x82\xb1\x82\xc6\x82\xe0\x82\xb5\x82\xce\x82\xb5\x82\xce\x82\xc5\x81" ""
+ "D" "\x81" "D" "\x81" "D"
+ },
+ {1048, ""},
+ {1060, ""},
+ {1100, ""},
+ {
+ 1115, "\x82\xb5\x82\xa9\x82\xb5\x8d\xa1\x94\xd3\x81" "D" "\x81" "D" ""
+ "\x81" "D"
+ },
+ {1135, ""},
+ {
+ 1188, "\x82\xbd\x82\xa2\x82\xdc\x82\xc2\x82\xf0\x81" "A" ""
+ "\x82\xbd\x82\xa2\x82\xdc\x82\xc2\x82\xf0\x82\xe0\x82\xc4\x81" "I" ""
+ "\x82\xb1\x82\xbf\x82\xe7\x82\xbe\x81" "A" ""
+ "\x83\x89\x83\x89\x83\x93\x83" "h" "\x81" "B" ""
+ "\x82\xb1\x82\xcc\x8b" "C" "\x8b\xb6\x82\xa2\x82\xf0\x8e" "~" ""
+ "\x82\xdf\x82\xe9\x82\xcc\x82\xbe\x81" "I"
+ },
+ {
+ 1230, "\x8f\x94\x8c" "N" "\x81" "A" "\x83" "X" "\x83" "L" "\x83\x83\x83" "p"
+ "\x83\x8c\x83\x89\x8c\xf2\x8e\xdd\x82\xcd\x8d\xa1\x94\xd3\x82\xcd\x82\xb1"
+ "\x82\xea\x82\xc5\x8e\xb8\x97\xe7\x82\xb5\x82\xdc\x82\xb7"
+ },
+ }
+ }, /* a7_vf.hns */
+ {
+ "a8_vf.hns", {
+ {
+ 212, "\x93" "r" "\x95\xfb\x82\xe0\x82\xc8\x82\xa2\x8b\xb6\x90" "l" ""
+ "\x82\xaa\x82\xb1\x82\xcc\x8b" "{" "\x93" "a" ""
+ "\x82\xf0\x96\xc5\x82\xda\x82\xb7\x82\xc8\x82\xc7\x82\xc6\x81" "A" ""
+ "\x96\xb2\x82\xc9\x82\xe0\x8e" "v" ""
+ "\x82\xa6\x82\xe9\x8e\xd2\x82\xaa\x82\xa0\x82\xe8\x82\xdc\x82\xb5\x82\xe5\x82\xa4\x82\xa9\x81" ""
+ "H " "\x82\xe0\x82\xa4\x88\xea\x93" "x" "\x83" "v" "\x83\x8c\x83" ""
+ "C" "\x82\xb5\x82\xc4\x82\xdd\x82\xdc\x82\xb5\x82\xe5\x82\xa4\x81" ""
+ "B" "\x83" "`" "\x83\x83\x83\x93\x83" "X" ""
+ "\x82\xcd\x8d\xa1\x82\xb5\x82\xa9\x82\xa0\x82\xe8\x82\xdc\x82\xb9\x82\xf1" ""
+ " "
+ },
+ {320, ""},
+ }
+ }, /* a8_vf.hns */
+ {
+ "a9_vf.hns", {
+ {
+ 30, "\x83\x89\x83\x89\x83\x93\x83" "h" "\x81" "A" ""
+ "\x95\xc3\x89\xba\x82\xc6\x8d\xa1\x89\xf1\x82\xcc\x82\xa8\x91" "O" ""
+ "\x82\xcc\x94" "M" "\x90" "S" ""
+ "\x82\xc8\x93\xad\x82\xab\x82\xd4\x82\xe8\x82\xc9\x82\xc2\x82\xa2\x82\xc4\x98" ""
+ "b" "\x82\xb5\x8d\x87\x82\xc1\x82\xbd\x81" "B" ""
+ "\x95\xc3\x89\xba\x82\xcd\x82\xa8\x91" "O" "\x82\xc9\x82\xa8\x97" ""
+ "_" "\x82\xdf\x82\xcc\x8c\xbe\x97" "t" ""
+ "\x82\xf0\x82\xa9\x82\xaf\x82\xbd\x82\xa2\x82\xc6\x82\xa8\x82\xc1\x82\xb5\x82"
+ "\xe1\x82\xc1\x82\xc4\x82\xa8\x82\xe7\x82\xea\x82\xe9"
+ },
+ {125, ""},
+ {
+ 200, "\x83" "{" "\x83\x93\x83" "^" "\x83\x93\x82\xaa\x81" "A" ""
+ "\x82\xa8\x91" "O" ""
+ "\x82\xcc\x8a\xd6\x82\xed\x82\xc1\x82\xbd\x8e\x96\x8c\x8f"
+ "\x82\xc9\x82\xc2\x82\xa2\x82\xc4\x82\xb7\x82\xd7\x82\xc4\x98"
+ "b" "\x82\xb5\x82\xc4\x82\xad\x82\xea\x82\xbd\x81" "B"
+ },
+ {
+ 300, "\x8e\x84\x82\xcd\x8d\xa1\x93\xfa\x82\xcc\x92\xf7\x82\xdf\x82\xad\x82\xad\x82\xe8\x95\xfb\x82\xf0\x93" ""
+ "{" "\x82\xc1\x82\xc4\x82\xcd\x82\xa8\x82\xe7\x82\xf1\x82\xaa\x81" ""
+ "A" "\x82\xa0\x82\xdc\x82\xe8\x82\xc9\x82\xe0\x96" "@" "\x8a" "O" ""
+ "\x82\xc8\x82\xe0\x82\xcc\x82\xbe\x82\xa9\x82\xe7\x81" "A" ""
+ "\x82\xb1\x82\xcc\x82\xb1\x82\xc6\x82\xcd\x94\x92\x93\xfa\x82\xcc\x82\xe0"
+ "\x82\xc6\x82\xc9\x82\xb3\x82\xe7\x82\xb7\x82\xe6\x82\xe8\x82\xe0\x8c\x8e"
+ "\x82\xcc\x8c\xf5\x82\xcc\x82\xe0\x82\xc6\x82\xc9\x82\xc6\x82\xc7\x82\xdf"
+ "\x82\xc4\x82\xa8\x82\xb1\x82\xa4\x82\xc5\x82\xcd\x82\xc8\x82\xa2\x82\xa9\x81" ""
+ "B"
+ },
+ {
+ 400, "\x82\xdc\x82\xbe\x93\xe4\x82\xcd\x8e" "c" ""
+ "\x82\xc1\x82\xc4\x82\xa2\x82\xe9\x81" "B" "\x82\xbe\x82\xaa\x81" ""
+ "A" "\x8c" "N" ""
+ "\x82\xcd\x82\xc7\x82\xb1\x82\xc9\x82\xa0\x82\xeb\x82\xa4\x82\xc6\x82\xe0\x81" ""
+ "A" "\x82\xb1\x82\xcc\x8e\x9e\x91\xe3\x82\xcc\x90" "^" ""
+ "\x8e\xc0\x82\xf0\x93" "`" ""
+ "\x82\xa6\x82\xc4\x82\xad\x82\xea\x82\xe9\x91\xe5\x8e" "g" ""
+ "\x82\xc6\x82\xc8\x82\xe9\x82\xc9\x82\xd3\x82\xb3\x82\xed\x82\xb5\x82\xa2\x8e\x91\x8a" ""
+ "i" "\x82\xf0\x82\xe0\x82\xc1\x82\xc4\x82\xa2\x82\xe9"
+ },
+ {515, ""},
+ }
+ }, /* a9_vf.hns */
+};
+
static char const *const versaillesKOmessages[] = {
"\xc1\xf6\xb1\xdd\xc0\xba" " " "\xc0\xcc" " " "\xb9\xae\xc0\xcc" " "
"" "\xbf\xad\xb8\xae\xc1\xf6" " " ""
diff --git a/dists/engine-data/cryomni3d.dat b/dists/engine-data/cryomni3d.dat
index 918926b11e..6af13e6084 100644
Binary files a/dists/engine-data/cryomni3d.dat and b/dists/engine-data/cryomni3d.dat differ
diff --git a/engines/cryomni3d/datstream.cpp b/engines/cryomni3d/datstream.cpp
index 3b6bda9b16..4ce4650454 100644
--- a/engines/cryomni3d/datstream.cpp
+++ b/engines/cryomni3d/datstream.cpp
@@ -127,6 +127,8 @@ uint16 DATSeekableStream::translateLanguage(Common::Language lang) {
return MKTAG16('f', 'r');
case Common::IT_ITA:
return MKTAG16('i', 't');
+ case Common::JA_JPN:
+ return MKTAG16('j', 'a');
case Common::KO_KOR:
return MKTAG16('k', 'o');
case Common::PT_BRA:
diff --git a/engines/cryomni3d/detection_tables.h b/engines/cryomni3d/detection_tables.h
index c67d4602a4..dab0bcef0c 100644
--- a/engines/cryomni3d/detection_tables.h
+++ b/engines/cryomni3d/detection_tables.h
@@ -484,6 +484,40 @@ static const CryOmni3DGameDescription gameDescriptions[] = {
/* GF_VERSAILLES_FONTS_ | */ GF_VERSAILLES_AUDIOPADDING_YES,
},
+ // Versailles 1685
+ // Japanese Windows compressed from DVD
+ // From lePhilousophe
+ {
+ {
+ "versailles",
+ "",
+ VERSAILLES_ENTRY_DEF("PROGRAM.Z", "1944d7c30dbb25ab10f684422e196c16", 248700),
+ Common::JA_JPN,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUI_OPTIONS_VERSAILLES
+ },
+ GType_VERSAILLES,
+ /* GF_VERSAILLES_FONTS_ | */ GF_VERSAILLES_AUDIOPADDING_YES,
+ },
+
+ // Versailles 1685
+ // Japanese Windows from DVD
+ // From lePhilousophe
+ {
+ {
+ "versailles",
+ "",
+ VERSAILLES_ENTRY_DEF("VERSAILL.EXE", "b7dadaf14cc5783e235125f9d6f6adea", 358912),
+ Common::JA_JPN,
+ Common::kPlatformWindows,
+ ADGF_NO_FLAGS,
+ GUI_OPTIONS_VERSAILLES
+ },
+ GType_VERSAILLES,
+ /* GF_VERSAILLES_FONTS_ | */ GF_VERSAILLES_AUDIOPADDING_YES,
+ },
+
{ AD_TABLE_END_MARKER, 0, 0 }
};
diff --git a/engines/cryomni3d/versailles/data.cpp b/engines/cryomni3d/versailles/data.cpp
index a853885462..d04420bc01 100644
--- a/engines/cryomni3d/versailles/data.cpp
+++ b/engines/cryomni3d/versailles/data.cpp
@@ -101,8 +101,14 @@ void CryOmni3DEngine_Versailles::loadStaticData() {
// epigraph settings, bomb password
_epigraphContent = data->readString16();
_epigraphPassword = data->readString16();
- _bombAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ '";
- _bombPassword = data->readString16();
+
+ if (getLanguage() == Common::JA_JPN) {
+ _bombAlphabet = data->readString16().decode(Common::kWindows932);
+ _bombPassword = data->readString16().decode(Common::kWindows932);
+ } else {
+ _bombAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ '";
+ _bombPassword = data->readString16();
+ }
// messages, paintings titles
data->readString16Array16(_messages);
diff --git a/engines/cryomni3d/versailles/engine.cpp b/engines/cryomni3d/versailles/engine.cpp
index b4a11b17e1..7e92414147 100644
--- a/engines/cryomni3d/versailles/engine.cpp
+++ b/engines/cryomni3d/versailles/engine.cpp
@@ -292,6 +292,9 @@ void CryOmni3DEngine_Versailles::setupFonts() {
_fontManager.loadFonts(fonts, Common::kWindows950);
return;
+ } else if (getLanguage() == Common::JA_JPN) {
+ _fontManager.loadTTFList("FONTS_JP.LST", Common::kWindows932);
+ return;
} else if (getLanguage() == Common::KO_KOR) {
_fontManager.loadTTFList("FONTS_KR.LST", Common::kWindows949);
return;
@@ -690,6 +693,22 @@ void CryOmni3DEngine_Versailles::playTransitionEndLevel(int level) {
return;
}
+ if (level == -2) {
+ if (getLanguage() == Common::JA_JPN && Common::File::exists("jvclogo.hnm")) {
+ // Display one more copyright
+ playHNM("jvclogo.hnm", Audio::Mixer::kMusicSoundType);
+ clearKeys();
+ if (shouldAbort()) {
+ return;
+ }
+
+ fadeOutPalette();
+ if (shouldAbort()) {
+ return;
+ }
+ }
+ }
+
// Display back cursor there once the palette has been zeroed
showMouse(cursorWasVisible);
diff --git a/engines/cryomni3d/versailles/menus.cpp b/engines/cryomni3d/versailles/menus.cpp
index 94b2aac69d..71ed50fc38 100644
--- a/engines/cryomni3d/versailles/menus.cpp
+++ b/engines/cryomni3d/versailles/menus.cpp
@@ -60,6 +60,11 @@ void CryOmni3DEngine_Versailles::drawMenuTitle(Graphics::ManagedSurface *surface
titleY = 80;
subtitleX = 283;
subtitleY = 80;
+ } else if (getLanguage() == Common::JA_JPN) {
+ titleX = 144;
+ titleY = 125;
+ subtitleX = 144;
+ subtitleY = 145;
} else if (getLanguage() == Common::ZH_TWN) {
titleX = 130;
titleY = 160;
@@ -340,6 +345,8 @@ uint CryOmni3DEngine_Versailles::displayOptions() {
} else if (getLanguage() == Common::ES_ESP ||
getLanguage() == Common::IT_ITA) {
rct = Common::Rect(250, 420, 530, 465);
+ } else if (getLanguage() == Common::JA_JPN) {
+ rct = Common::Rect(245, 420, 505, 465);
} else {
rct = Common::Rect(235, 420, 505, 465);
}
Commit: a05676d2c312e70ab2ea42d1da255663c5a2252c
https://github.com/scummvm/scummvm/commit/a05676d2c312e70ab2ea42d1da255663c5a2252c
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Fix documentation for CJK
One minor fix for font choice and support multiline attributes for
Japanese version
Changed paths:
engines/cryomni3d/versailles/documentation.cpp
engines/cryomni3d/versailles/documentation.h
diff --git a/engines/cryomni3d/versailles/documentation.cpp b/engines/cryomni3d/versailles/documentation.cpp
index aaf2d456c7..54bfe43aac 100644
--- a/engines/cryomni3d/versailles/documentation.cpp
+++ b/engines/cryomni3d/versailles/documentation.cpp
@@ -91,6 +91,9 @@ void Versailles_Documentation::init(const Sprites *sprites, FontManager *fontMan
_allDocsFileName = allDocsFileName;
_linksDocsFileName = linksDocsFileName;
+ // Japanese version of Versailles handles records attributeswith multilines
+ _multilineAttributes = (_engine->getLanguage() == Common::JA_JPN);
+
// Build list of records
Common::File allDocsFile;
@@ -1448,8 +1451,10 @@ void Versailles_Documentation::drawRecordData(Graphics::ManagedSurface &surface,
blockContent1 = Common::Rect(60, 80, 351, 345);
blockContent2 = Common::Rect(60, 345, 605, 437);
}
- // Fix of overlapping areas for Chinese (as in original binary)
- if (_engine->getLanguage() == Common::ZH_TWN && !_currentMapLayout) {
+ // Fix of overlapping areas for Chinese and Japanese (as in original binary)
+ if ((_engine->getLanguage() == Common::JA_JPN ||
+ _engine->getLanguage() == Common::ZH_TWN) &&
+ !_currentMapLayout) {
blockContent1.bottom += 30;
blockContent2.top += 30;
}
@@ -1483,7 +1488,14 @@ void Versailles_Documentation::drawRecordData(Graphics::ManagedSurface &surface,
Common::String text = getRecordData(_currentRecord, title, subtitle, caption, hyperlinks);*/
uint lineHeight = 21;
- _fontManager->setCurrentFont(4);
+
+ if (_engine->getLanguage() == Common::JA_JPN ||
+ _engine->getLanguage() == Common::KO_KOR ||
+ _engine->getLanguage() == Common::ZH_TWN) {
+ _fontManager->setCurrentFont(8);
+ } else {
+ _fontManager->setCurrentFont(4);
+ }
_fontManager->setTransparentBackground(true);
_fontManager->setSpaceWidth(1);
_fontManager->setCharSpacing(1);
@@ -1852,9 +1864,25 @@ char *Versailles_Documentation::getDocPartAddress(char *start, char *end, const
}
/*debug("Matched %.10s", foundPos);*/
foundPos += patternLen;
- char *eol = foundPos;
- for (; *eol != '\r' && *eol != '\0'; eol++) {}
- *eol = '\0';
+ if (_multilineAttributes) {
+ char *eoa = foundPos;
+
+ // Find next '='
+ for (; eoa < end && *eoa != '\0' && *eoa != '='; eoa++) {}
+
+ if (eoa == end || *eoa == '\0') {
+ // This is the end of block or data has already been split
+ return foundPos;
+ }
+
+ // Go back to start of line
+ for (; eoa != foundPos && *eoa != '\r'; eoa--) {}
+ *eoa = '\0';
+ } else {
+ char *eol = foundPos;
+ for (; *eol != '\r' && *eol != '\0'; eol++) {}
+ *eol = '\0';
+ }
return foundPos;
}
@@ -1996,7 +2024,16 @@ Common::String Versailles_Documentation::getRecordData(const Common::String &rec
caption = captionP ? captionP : "";
getRecordHyperlinks(recordData, recordDataEnd, hyperlinks);
- Common::String text(getDocTextAddress(recordData, recordDataEnd));
+ const char *textP = nullptr;
+ if (_multilineAttributes) {
+ const char *patterns[] = { "TEXTE=", "TEXT=", nullptr };
+ textP = getDocPartAddress(recordData, recordDataEnd, patterns);
+ } else {
+ textP = getDocTextAddress(recordData, recordDataEnd);
+ }
+
+ assert(textP != nullptr);
+ Common::String text(textP);
delete[] recordData;
diff --git a/engines/cryomni3d/versailles/documentation.h b/engines/cryomni3d/versailles/documentation.h
index 7dea214ca9..6fa9bd04be 100644
--- a/engines/cryomni3d/versailles/documentation.h
+++ b/engines/cryomni3d/versailles/documentation.h
@@ -95,12 +95,12 @@ private:
};
static const TimelineEntry kTimelineEntries[];
- static char *getDocPartAddress(char *start, char *end, const char *patterns[]);
- static const char *getDocTextAddress(char *start, char *end);
- static const char *getRecordTitle(char *start, char *end);
- static const char *getRecordSubtitle(char *start, char *end);
- static const char *getRecordCaption(char *start, char *end);
- static void getRecordHyperlinks(char *start, char *end, Common::StringArray &hyperlinks);
+ char *getDocPartAddress(char *start, char *end, const char *patterns[]);
+ const char *getDocTextAddress(char *start, char *end);
+ const char *getRecordTitle(char *start, char *end);
+ const char *getRecordSubtitle(char *start, char *end);
+ const char *getRecordCaption(char *start, char *end);
+ void getRecordHyperlinks(char *start, char *end, Common::StringArray &hyperlinks);
Common::String getRecordTitle(const Common::String &record);
Common::String getRecordData(const Common::String &record, Common::String &title,
@@ -121,6 +121,8 @@ private:
const Sprites *_sprites;
const Common::StringArray *_messages;
+ bool _multilineAttributes;
+
Common::StringArray _recordsOrdered;
Common::HashMap<Common::String, RecordInfo> _records;
char *_linksData;
Commit: c89feeb64441735a9cf35bcc3eaed6c733908116
https://github.com/scummvm/scummvm/commit/c89feeb64441735a9cf35bcc3eaed6c733908116
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2020-03-14T12:20:41+01:00
Commit Message:
CRYOMNI3D: Abort even in yes/no message box and file picker
Changed paths:
engines/cryomni3d/versailles/menus.cpp
diff --git a/engines/cryomni3d/versailles/menus.cpp b/engines/cryomni3d/versailles/menus.cpp
index 71ed50fc38..6a4e7ca084 100644
--- a/engines/cryomni3d/versailles/menus.cpp
+++ b/engines/cryomni3d/versailles/menus.cpp
@@ -555,7 +555,7 @@ uint CryOmni3DEngine_Versailles::displayYesNoBox(Graphics::ManagedSurface &surfa
bool redraw = true;
uint result = uint(-1);
- while (!end || redraw) {
+ while (!shouldAbort() && (!end || redraw)) {
if (redraw) {
for (uint boxId = 0; boxId < 2; boxId++) {
if (boxId == result) {
@@ -856,6 +856,9 @@ uint CryOmni3DEngine_Versailles::displayFilePicker(const Graphics::Surface *bgFr
autoRepeatEndInhibit = g_system->getMillis() + autoRepeatDelay;
filesListChanged = true;
}
+ if (shouldAbort()) {
+ return uint(-1);
+ }
}
if (autoRepeatInhibit && g_system->getMillis() > autoRepeatEndInhibit) {
autoRepeatInhibit = false;
More information about the Scummvm-git-logs
mailing list