[Scummvm-git-logs] scummvm master -> 0b038463ffc9d7222ca8f9e2b45adc79254d4c37

sev- sev at scummvm.org
Mon Aug 2 15:35:36 UTC 2021


This automated email contains information about 24 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
a6afb2be20 XEEN: RU Initial commit
dcf3bb19b5 XEEN: RU Translated constants.cpp
66097d4e39 XEEN: RU Added plural forms for "days" in char info
3d6371c4f0 XEEN: RU Working on 8-bit font
f25b9c9c58 XEEN: RU Move plural forms to constants
cfcf36383f XEEN: RU Added plural forms for "days"
516f8d8824 XEEN: RU Combine multiple language constants in one ccs file
d18f2bb219 XEEN: RU Split language constants
84ad41f685 XEEN: RU Further sharpening ru translation
d3624575a7 XEEN: RU Working on gender and plural forms
325eb338fe XEEN: RU Further sharpening
9f80f452e4 XEEN: RU Translated all constants.h strings for Clouds. Ready for test.
15063fb740 XEEN: RU change hotkeys in dialogs_char_info, dialogs_control_panel
587031a2e5 XEEN: RU Further sharpening
b16ab4382e XEEN: RU Moving translated hotkeys to resources.
3bba21845d XEEN: RU Moving translated hotkeys to resources.
2da836da6c XEEN: RU Moving translated hotkeys to resources.
b655cfc03e XEEN: RU Moving translated hotkeys to resources.
33fb7a9284 XEEN: RU Fix some errors
6fd4f3ba2e XEEN: RU Fix some errors
21c727b2c7 XEEN: RU Fixed names according to conventions
805f55f1cd XEEN: RU Fixed some localized strings. Fixed intro subtitles.
4ea20488cc XEEN: RU create_xeen removed const in int return
0b038463ff XEEN: RU Fixed item materials


Commit: a6afb2be203765bcdf787a762ddeab3a821c5f4d
    https://github.com/scummvm/scummvm/commit/a6afb2be203765bcdf787a762ddeab3a821c5f4d
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Initial commit
Extended font support

Changed paths:
    dists/engine-data/xeen.ccs
    engines/xeen/font.cpp


diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index ca916053cd..9737dcf0e2 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/font.cpp b/engines/xeen/font.cpp
index d5f05bac0a..de1bfdfacf 100644
--- a/engines/xeen/font.cpp
+++ b/engines/xeen/font.cpp
@@ -20,6 +20,7 @@
  *
  */
 
+#include "common/config-manager.h"
 #include "common/endian.h"
 #include "xeen/font.h"
 #include "xeen/resources.h"
@@ -34,15 +35,60 @@ byte FontData::_bgColor;
 bool FontData::_fontReduced;
 Justify FontData::_fontJustify;
 
+Common::Language lang;
+int offset_fntEn;
+int offset_fntEnReduced;
+int offset_fntNonEn;
+int offset_fntNonEnReduced;
+int offset_fntEnW;
+int offset_fntEnReducedW;
+int offset_fntNonEnW;
+int offset_fntNonEnReducedW;
+
+
 FontSurface::FontSurface() : XSurface(), _msgWraps(false), _displayString(nullptr),
 		_writePos(*FontData::_fontWritePos) {
 	setTextColor(0);
+
+	lang = Common::parseLanguage(ConfMan.get("language"));
+	if (Common::RU_RUS == lang) {
+		offset_fntEn            = 0x0000;
+		offset_fntNonEn         = 0x0800;
+		offset_fntEnReduced     = 0x1000;
+		offset_fntNonEnReduced  = 0x1800;
+		offset_fntEnW           = 0x2000;
+		offset_fntNonEnW        = 0x2080;
+		offset_fntEnReducedW    = 0x2100;
+		offset_fntNonEnReducedW = 0x2180;
+	} else {
+		offset_fntEn            = 0x0000;
+		offset_fntEnReduced     = 0x0800;
+		offset_fntEnW           = 0x1000;
+		offset_fntEnReducedW    = 0x1080;
+	}
 }
 
 FontSurface::FontSurface(int wv, int hv) : XSurface(wv, hv),
 		_msgWraps(false), _displayString(nullptr), _writePos(*FontData::_fontWritePos) {
 	create(w, h);
 	setTextColor(0);
+
+	lang = Common::parseLanguage(ConfMan.get("language"));
+	if (Common::RU_RUS == lang) {
+		offset_fntEn            = 0x0000;
+		offset_fntNonEn         = 0x0800;
+		offset_fntEnReduced     = 0x1000;
+		offset_fntNonEnReduced  = 0x1800;
+		offset_fntEnW           = 0x2000;
+		offset_fntNonEnW        = 0x2080;
+		offset_fntEnReducedW    = 0x2100;
+		offset_fntNonEnReducedW = 0x2180;
+	} else {
+		offset_fntEn            = 0x0000;
+		offset_fntEnReduced     = 0x0800;
+		offset_fntEnW           = 0x1000;
+		offset_fntEnReducedW    = 0x1080;
+	}
 }
 
 void FontSurface::writeSymbol(int symbolId) {
@@ -193,7 +239,11 @@ const char *FontSurface::writeString(const Common::String &s, const Common::Rect
 				} else {
 					if (c == 6)
 						c = ' ';
-					byte charSize = _fontData[0x1000 + (int)c + (_fontReduced ? 0x80 : 0)];
+					int offset_charW = c < 0 ?
+						(_fontReduced ? offset_fntNonEnReducedW : offset_fntNonEnW) + (int)(0x80 + c) :
+						(_fontReduced ? offset_fntEnReducedW : offset_fntEnW) + (int)c;
+					byte charSize = _fontData[offset_charW];
+
 					_writePos.x -= charSize;
 				}
 
@@ -230,9 +280,13 @@ const char *FontSurface::writeString(const Common::String &s, const Common::Rect
 					idx = 0;
 				setTextColor(idx);
 			} else if (c < ' ') {
-				// End of string or invalid command
-				_displayString = nullptr;
-				break;
+				if (Common::RU_RUS == lang && c < 0) {
+					writeChar(c, bounds);
+				} else {
+					// End of string or invalid command
+					_displayString = nullptr;
+					break;
+				}
 			} else {
 				// Standard character - write it out
 				writeChar(c, bounds);
@@ -257,14 +311,16 @@ void FontSurface::writeCharacter(char c, const Common::Rect &clipRect) {
 }
 
 char FontSurface::getNextChar() {
-	return  *_displayString++ & 0x7f;
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language")))
+		return *_displayString++;
+	return *_displayString++ & 0x7f;
 }
 
 bool FontSurface::getNextCharWidth(int &total) {
-	char c = getNextChar();
+ 	char c = getNextChar();
 
 	if (c > ' ') {
-		total += _fontData[0x1000 + (int)c + (_fontReduced ? 0x80 : 0)];
+		total += _fontData[(_fontReduced ? offset_fntEnReducedW : offset_fntEnW) + (int)c];
 		return false;
 	} else if (c == ' ') {
 		total += 4;
@@ -283,6 +339,9 @@ bool FontSurface::getNextCharWidth(int &total) {
 		if (c != 'd')
 			getNextChar();
 		return false;
+	} else if (Common::RU_RUS == lang && c < 0) {
+		total += _fontData[(_fontReduced ? offset_fntNonEnReducedW : offset_fntNonEnW) + (int)(0x80 + c)];
+		return false;
 	} else {
 		--_displayString;
 		return true;
@@ -333,8 +392,16 @@ void FontSurface::writeChar(char c, const Common::Rect &clipRect) {
 	int yStart = y;
 
 	// Get pointers into font data and surface to write pixels to
-	int charIndex = (int)c + (_fontReduced ? 0x80 : 0);
-	const byte *srcP = &_fontData[charIndex * 16];
+	int offset_charData;
+	int offset_charW;
+	if (Common::RU_RUS == lang && c < 0) {
+		offset_charData = (_fontReduced ? offset_fntNonEnReduced : offset_fntNonEn) + (int)(0x80 + c) * 16;
+		offset_charW = (_fontReduced ? offset_fntNonEnReducedW : offset_fntNonEnW) + (int)(0x80 + c);
+	} else {
+		offset_charData = (_fontReduced ? offset_fntEnReduced : offset_fntEn) + (int)c * 16;
+		offset_charW = (_fontReduced ? offset_fntEnReducedW : offset_fntEnW) + (int)c;
+	}
+	const byte *srcP = &_fontData[offset_charData];
 
 	for (int yp = 0; yp < FONT_HEIGHT; ++yp, ++y) {
 		uint16 lineData = READ_LE_UINT16(srcP); srcP += 2;
@@ -357,7 +424,7 @@ void FontSurface::writeChar(char c, const Common::Rect &clipRect) {
 
 	addDirtyRect(Common::Rect(_writePos.x, yStart, _writePos.x + FONT_WIDTH,
 		yStart + FONT_HEIGHT));
-	_writePos.x += _fontData[0x1000 + charIndex];
+	_writePos.x += _fontData[offset_charW];
 }
 
 } // End of namespace Xeen


Commit: dcf3bb19b586c5a5fbe536a5f5ef8e8885697065
    https://github.com/scummvm/scummvm/commit/dcf3bb19b586c5a5fbe536a5f5ef8e8885697065
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Translated constants.cpp

Changed paths:
    devtools/create_xeen/constants.cpp


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index ef977b21ab..97a2d4f88d 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -20,7 +20,7 @@
  *
  */
 
- // Disable symbol overrides so that we can use system headers.
+// Disable symbol overrides so that we can use system headers.
 #define FORBIDDEN_SYMBOL_ALLOW_ALL
 
 // HACK to allow building with the SDL backend on MinGW
@@ -33,667 +33,759 @@
 #include "constants.h"
 
 enum MagicSpell {
-	MS_AcidSpray = 0, MS_Awaken = 1, MS_BeastMaster = 2, MS_Bless = 3,
-	MS_Clairvoyance = 4, MS_ColdRay = 5, MS_CreateFood = 6,
-	MS_CureDisease = 7, MS_CureParalysis = 8, MS_CurePoison = 9,
-	MS_CureWounds = 10, MS_DancingSword = 11, MS_DayOfProtection = 12,
-	MS_DayOfSorcery = 13, MS_DeadlySwarm = 14, MS_DetectMonster = 15,
-	MS_DivineIntervention = 16, MS_DragonSleep = 17, MS_ElementalStorm = 18,
-	MS_EnchantItem = 19, MS_EnergyBlast = 20, MS_Etheralize = 21,
-	MS_FantasticFreeze = 22, MS_FieryFlail = 23, MS_FingerOfDeath = 24,
-	MS_Fireball = 25, MS_FirstAid = 26, MS_FlyingFist = 27,
-	MS_FrostBite = 28, MS_GolemStopper = 29, MS_Heroism = 30,
-	MS_HolyBonus = 31, MS_HolyWord = 32, MS_Hynotize = 33,
-	MS_IdentifyMonster = 34, MS_Implosion = 35, MS_Incinerate = 36,
-	MS_Inferno = 37, MS_InsectSpray = 38, MS_ItemToGold = 39,
-	MS_Jump = 40, MS_Levitate = 41, MS_Light = 42, MS_LightningBolt = 43,
-	MS_LloydsBeacon = 44, MS_MagicArrow = 45, MS_MassDistortion = 46,
-	MS_MegaVolts = 47, MS_MoonRay = 48, MS_NaturesCure = 49, MS_Pain = 50,
-	MS_PoisonVolley = 51, MS_PowerCure = 52, MS_PowerShield = 53,
-	MS_PrismaticLight = 54, MS_ProtFromElements = 55, MS_RaiseDead = 56,
-	MS_RechargeItem = 57, MS_Resurrection = 58, MS_Revitalize = 59,
-	MS_Shrapmetal = 60, MS_Sleep = 61, MS_Sparks = 62, MS_StarBurst = 63,
-	MS_StoneToFlesh = 64, MS_SunRay = 65, MS_SuperShelter = 66,
-	MS_SuppressDisease = 67, MS_SuppressPoison = 68, MS_Teleport = 69,
-	MS_TimeDistortion = 70, MS_TownPortal = 71, MS_ToxicCloud = 72,
-	MS_TurnUndead = 73, MS_WalkOnWater = 74, MS_WizardEye = 75,
-	NO_SPELL = 76
-};
-
-static const char *const CLOUDS_CREDITS =
-	"\v012\t000\x3""c\f35Designed and Directed By:\n"
-	"\f17Jon Van Caneghem\x3l\n"
-	"\n"
-	"\t025\f35Programming:\n"
-	"\t035\f17Mark Caldwell\n"
-	"\t035Dave Hathaway\n"
-	"\n"
-	"\t025\f35Sound System & FX:\n"
-	"\t035\f17Todd Hendrix\n"
-	"\n"
-	"\t025\f35Music & Speech:\n"
-	"\t035\f17Tim Tully\n"
-	"\n"
-	"\t025\f35Writing:\n"
-	"\t035\f17Paul Rattner\n"
-	"\t035Debbie Murphy\n"
-	"\t035Jon Van Caneghem\v012\n"
-	"\n"
-	"\n"
-	"\t180\f35Graphics:\n"
-	"\t190\f17Louis Johnson\n"
-	"\t190Jonathan P. Gwyn\n"
-	"\t190Bonita Long-Hemsath\n"
-	"\t190Julia Ulano\n"
-	"\t190Ricardo Barrera\n"
-	"\n"
-	"\t180\f35Testing:\n"
-	"\t190\f17Benjamin Bent\n"
-	"\t190Mario Escamilla\n"
-	"\t190Richard Espy\n"
-	"\t190Scott McDaniel\n"
-	"\t190Clayton Retzer\n"
-	"\t190Michael Suarez\x3""c";
-
-static const char *const DARK_SIDE_CREDITS =
-	"\v012\t000\x3""c\f35Designed and Directed By:\n"
-	"\f17Jon Van Caneghem\x3l\n"
-	"\n"
-	"\t025\f35Programming:\n"
-	"\t035\f17Mark Caldwell\n"
-	"\t035Dave Hathaway\n"
-	"\n"
-	"\t025\f35Sound System & FX:\n"
-	"\t035\f17Mike Heilemann\n"
-	"\n"
-	"\t025\f35Music & Speech:\n"
-	"\t035\f17Tim Tully\n"
-	"\n"
-	"\t025\f35Writing:\n"
-	"\t035\f17Paul Rattner\n"
-	"\t035Debbie Van Caneghem\n"
-	"\t035Jon Van Caneghem\v012\n"
-	"\n"
-	"\n"
-	"\t180\f35Graphics:\n"
-	"\t190\f17Jonathan P. Gwyn\n"
-	"\t190Bonita Long-Hemsath\n"
-	"\t190Julia Ulano\n"
-	"\t190Ricardo Barrera\n"
-	"\n"
-	"\t180\f35Testing:\n"
-	"\t190\f17Benjamin Bent\n"
-	"\t190Christian Dailey\n"
-	"\t190Mario Escamilla\n"
-	"\t190Marco Hunter\n"
-	"\t190Robert J. Lupo\n"
-	"\t190Clayton Retzer\n"
-	"\t190David Vela\x3""c";
-static const char *const SWORDS_CREDITS1 =
-	"\v012\x3""c\f35Published By New World Computing, Inc.\f17\n"
-	"Developed By CATware, Inc.\x3l\n"
-	"\f01Design and Direction\t180Series Created by\n"
-	"\t020Bill Fawcett\t190John Van Caneghem\n"
-	"\n"
-	"\t010Story Contributions\t180Producer & Manual\n"
-	"\t020Ellen Guon\t190Dean Rettig\n"
-	"\n"
-	"\t010Programming & Ideas\t180Original Programming\n"
-	"\t020David Potter\t190Mark Caldwell\n"
-	"\t020Rod Retterath\t190Dave Hathaway\n"
-	"\n"
-	"\t010Manual Illustrations\t180Graphic Artists\n"
-	"\t020Todd Cameron Hamilton\t190Jonathan P. Gwyn\n"
-	"\t020James Clouse\t190Bonnie Long-Hemsath\n"
-	"\t190Julia Ulano\n"
-	"\t190Ricardo Barrera\n";
-static const char *const SWORDS_CREDITS2 =
-	"\f05\v012\t000\x3l\n"
-	"\t100Sound Programming\n"
-	"\t110Todd Hendrix\n"
-	"\n"
-	"\t100Music\n"
-	"\t110Tim Tully\n"
-	"\t110Quality Assurance Manager\n"
-	"\t110Peter Ryu\n"
-	"\t100Testers\n"
-	"\t110Walter Johnson\n"
-	"\t110Bryan Farina\n"
-	"\t110David Baton\n"
-	"\t110Jack Nalls\n";
-
-static const char *const OPTIONS_MENU =
-	"\r\x1\x3""c\fdMight and Magic Options\n"
-	"%s of Xeen\x2\n"
-	"\v%.3dCopyright (c) %d NWC, Inc.\n"
-	"All Rights Reserved\x1";
-static const char *const GAME_NAMES[3] = { "Clouds", "Darkside", "World" };
-
-static const char *const THE_PARTY_NEEDS_REST = "\v012The Party needs rest!";
-
-static const char *const WHO_WILL = "\x3""c\v000\t000%s\n\n"
-	"Who will\n%s?\n\v055F1 - F%d";
-
-static const char *const HOW_MUCH = "\x3""cHow Much\n\n";
-
-static const char *const WHATS_THE_PASSWORD = "\x3""cWhat's the Password?\n"
-	"\n"
-	"Please turn to page %u, go to\n"
-	"line %u, and type in word %u.\v067\t000Spaces are not counted as words or lines.  "
-	"Hyphenated words are treated as one word.  Any line that has any text is considered a line."
-	"\x3""c\v040\t000\n";
-
-static const char *const PASSWORD_INCORRECT = "\x3""c\v040\n"
-	"\f32Incorrect!\fd";
-
-static const char *const IN_NO_CONDITION = "\v007%s is not in any condition to perform actions!";
-
-static const char *const NOTHING_HERE = "\x3""c\v010Nothing here.";
-
-static const char *const TERRAIN_TYPES[6] = {
-	"town", "cave", "towr", "cstl", "dung", "scfi"
-};
-
-static const char *const OUTDOORS_WALL_TYPES[16] = {
-	nullptr, "mount", "ltree", "dtree", "grass", "snotree", "dsnotree",
-	"snomnt", "dedltree", "mount", "lavamnt", "palm", "dmount", "dedltree",
-	"dedltree", "dedltree"
-};
-
-static const char *const SURFACE_NAMES[16] = {
-	"water.srf", "dirt.srf", "grass.srf", "snow.srf", "swamp.srf",
-	"lava.srf", "desert.srf", "road.srf", "dwater.srf", "tflr.srf",
-	"sky.srf", "croad.srf", "sewer.srf", "cloud.srf", "scortch.srf",
-	"space.srf"
-};
-
-static const char *const WHO_ACTIONS[32] = {
-	"search", "open", "drink", "mine", "touch", "read", "learn", "take",
-	"bang", "steal", "bribe", "pay", "sit", "try", "turn", "bathe",
-	"destroy", "pull", "descend", "toss a coin", "pray", "join", "act",
-	"play", "push", "rub", "pick", "eat", "sign", "close", "look", "try"
-};
-
-static const char *const WHO_WILL_ACTIONS[4] = {
-	"Open Grate", "Open Door", "Open Scroll", "Select Char"
+  MS_AcidSpray = 0, MS_Awaken = 1, MS_BeastMaster = 2, MS_Bless = 3,
+  MS_Clairvoyance = 4, MS_ColdRay = 5, MS_CreateFood = 6,
+  MS_CureDisease = 7, MS_CureParalysis = 8, MS_CurePoison = 9,
+  MS_CureWounds = 10, MS_DancingSword = 11, MS_DayOfProtection = 12,
+  MS_DayOfSorcery = 13, MS_DeadlySwarm = 14, MS_DetectMonster = 15,
+  MS_DivineIntervention = 16, MS_DragonSleep = 17, MS_ElementalStorm = 18,
+  MS_EnchantItem = 19, MS_EnergyBlast = 20, MS_Etheralize = 21,
+  MS_FantasticFreeze = 22, MS_FieryFlail = 23, MS_FingerOfDeath = 24,
+  MS_Fireball = 25, MS_FirstAid = 26, MS_FlyingFist = 27,
+  MS_FrostBite = 28, MS_GolemStopper = 29, MS_Heroism = 30,
+  MS_HolyBonus = 31, MS_HolyWord = 32, MS_Hynotize = 33,
+  MS_IdentifyMonster = 34, MS_Implosion = 35, MS_Incinerate = 36,
+  MS_Inferno = 37, MS_InsectSpray = 38, MS_ItemToGold = 39,
+  MS_Jump = 40, MS_Levitate = 41, MS_Light = 42, MS_LightningBolt = 43,
+  MS_LloydsBeacon = 44, MS_MagicArrow = 45, MS_MassDistortion = 46,
+  MS_MegaVolts = 47, MS_MoonRay = 48, MS_NaturesCure = 49, MS_Pain = 50,
+  MS_PoisonVolley = 51, MS_PowerCure = 52, MS_PowerShield = 53,
+  MS_PrismaticLight = 54, MS_ProtFromElements = 55, MS_RaiseDead = 56,
+  MS_RechargeItem = 57, MS_Resurrection = 58, MS_Revitalize = 59,
+  MS_Shrapmetal = 60, MS_Sleep = 61, MS_Sparks = 62, MS_StarBurst = 63,
+  MS_StoneToFlesh = 64, MS_SunRay = 65, MS_SuperShelter = 66,
+  MS_SuppressDisease = 67, MS_SuppressPoison = 68, MS_Teleport = 69,
+  MS_TimeDistortion = 70, MS_TownPortal = 71, MS_ToxicCloud = 72,
+  MS_TurnUndead = 73, MS_WalkOnWater = 74, MS_WizardEye = 75,
+  NO_SPELL = 76
+};
+
+static const char* const CLOUDS_CREDITS =
+  "\v012\t000\x3""c\f35ˆ¤¥ï ¨ à㪮¢®¤á⢮ ¯à®¥ªâ®¬:\n"
+  "\f17„¦®­ ‚ ­ Š ­¥£¥¬\x3""l\n"
+  "\n"
+  "\t025\f35à®£à ¬¬¨áâë:\n"
+  "\t035\f17Œ àª Š®«¤ãí««\n"
+  "\t035„¥©¢ •íâíãí©\n"
+  "\n"
+  "\t025\f35€ã¤¨®á¨á⥬  ¨ §¢ãª:\n"
+  "\t035\f17’®¤¤ •¥­¤à¨ªá\n"
+  "\n"
+  "\t025\f35Œã§ëª  ¨ à¥çì:\n"
+  "\t035\f17’¨¬ ’ ««¨\n"
+  "\n"
+  "\t025\f35‘業 à¨©:\n"
+  "\t035\f17®«  â­¥à\n"
+  "\t035„¥¡¡¨ Œñàä¨\n"
+  "\t035„¦®­ ‚ ­ Š ­¥£¥¬\v012\n"
+  "\n"
+  "\n"
+  "\t180\f35•㤮¦­¨ª¨:\n"
+  "\t190\f17‹ã¨ „¦®­á®­\n"
+  "\t190„¦®­ â ­ . ƒ¢¨­\n"
+  "\t190®­¨â  ‹®­£-•¥¬á â\n"
+  "\t190„¦ã«¨ï “« ­®\n"
+  "\t190¨ª à¤®  àà¥à \n"
+  "\n"
+  "\t180\f35’¥áâ¥àë:\n"
+  "\t190\f17¥­¤¦ ¬¨­ ¥­â\n"
+  "\t190Œ à¨® áª ¬¨«« \n"
+  "\t190¨ç à¤ á¯¨\n"
+  "\t190‘ª®ââ Œ ª¤í­¨¥«\n"
+  "\t190Š«¥©â®­ ¥â§¥à\n"
+  "\t190Œ ©ª« ‘ã à¥á\x3""c";
+
+static const char* const DARK_SIDE_CREDITS =
+  "\v012\t000\x3""c\f35Designed and Directed By:\n"
+  "\f17Jon Van Caneghem\x3l\n"
+  "\n"
+  "\t025\f35Programming:\n"
+  "\t035\f17Mark Caldwell\n"
+  "\t035Dave Hathaway\n"
+  "\n"
+  "\t025\f35Sound System & FX:\n"
+  "\t035\f17Mike Heilemann\n"
+  "\n"
+  "\t025\f35Music & Speech:\n"
+  "\t035\f17Tim Tully\n"
+  "\n"
+  "\t025\f35Writing:\n"
+  "\t035\f17Paul Rattner\n"
+  "\t035Debbie Van Caneghem\n"
+  "\t035Jon Van Caneghem\v012\n"
+  "\n"
+  "\n"
+  "\t180\f35Graphics:\n"
+  "\t190\f17Jonathan P. Gwyn\n"
+  "\t190Bonita Long-Hemsath\n"
+  "\t190Julia Ulano\n"
+  "\t190Ricardo Barrera\n"
+  "\n"
+  "\t180\f35Testing:\n"
+  "\t190\f17Benjamin Bent\n"
+  "\t190Christian Dailey\n"
+  "\t190Mario Escamilla\n"
+  "\t190Marco Hunter\n"
+  "\t190Robert J. Lupo\n"
+  "\t190Clayton Retzer\n"
+  "\t190David Vela\x3""c";
+
+static const char* const SWORDS_CREDITS1 =
+  "\v012\x3""c\f35Published By New World Computing, Inc.\f17\n"
+  "Developed By CATware, Inc.\x3l\n"
+  "\f01Design and Direction\t180Series Created by\n"
+  "\t020Bill Fawcett\t190John Van Caneghem\n"
+  "\n"
+  "\t010Story Contributions\t180Producer & Manual\n"
+  "\t020Ellen Guon\t190Dean Rettig\n"
+  "\n"
+  "\t010Programming & Ideas\t180Original Programming\n"
+  "\t020David Potter\t190Mark Caldwell\n"
+  "\t020Rod Retterath\t190Dave Hathaway\n"
+  "\n"
+  "\t010Manual Illustrations\t180Graphic Artists\n"
+  "\t020Todd Cameron Hamilton\t190Jonathan P. Gwyn\n"
+  "\t020James Clouse\t190Bonnie Long-Hemsath\n"
+  "\t190Julia Ulano\n"
+  "\t190Ricardo Barrera\n";
+
+static const char* const SWORDS_CREDITS2 =
+  "\f05\v012\t000\x3l\n"
+  "\t100Sound Programming\n"
+  "\t110Todd Hendrix\n"
+  "\n"
+  "\t100Music\n"
+  "\t110Tim Tully\n"
+  "\t110Quality Assurance Manager\n"
+  "\t110Peter Ryu\n"
+  "\t100Testers\n"
+  "\t110Walter Johnson\n"
+  "\t110Bryan Farina\n"
+  "\t110David Baton\n"
+  "\t110Jack Nalls\n";
+
+static const char* const OPTIONS_MENU =
+  "\r\x1\x3""c\fdŒ¥ç ¨ Œ £¨ï\n"
+  "%s Šá¨­ \x2\n"
+  "\v%.3dCopyright (c) %d NWC, Inc.\n"
+  "All Rights Reserved\x1";
+static const char* const GAME_NAMES[3] = { "Ž¡« ª ", "Darkside", "World" };
+
+static const char* const THE_PARTY_NEEDS_REST = 
+  "\v012Žâàï¤ ­ã¦¤ ¥âáï ¢ ®â¤ëå¥!";
+
+static const char* const WHO_WILL = "\x3""c\v000\t000%s\n\n%s?\n\v055F1 - F%d";
+
+static const char* const HOW_MUCH = "\x3""c‘ª®«ìª®\n\n";
+
+static const char* const WHATS_THE_PASSWORD = "\x3""cWhat's the Password?\n"
+  "\n"
+  "Please turn to page %u, go to\n"
+  "line %u, and type in word %u.\v067\t000Spaces are not counted as words or lines.  "
+  "Hyphenated words are treated as one word.  Any line that has any text is considered a line."
+  "\x3""c\v040\t000\n";
+
+static const char* const PASSWORD_INCORRECT = "\x3""c\v040\n\f32Incorrect!\fd";
+
+static const char* const IN_NO_CONDITION = 
+  "\v007%s ­¥ ¢ á®áâ®ï­¨¨ çâ®-«¨¡® ᤥ« âì!";
+
+static const char* const NOTHING_HERE = "\x3""c\v010‡¤¥áì ­¨ç¥£® ­¥â.";
+
+static const char* const TERRAIN_TYPES[6] = {
+  "town", "cave", "towr", "cstl", "dung", "scfi"
+};
+
+static const char* const OUTDOORS_WALL_TYPES[16] = {
+  nullptr, "mount", "ltree", "dtree", "grass", "snotree", "dsnotree",
+  "snomnt", "dedltree", "mount", "lavamnt", "palm", "dmount", "dedltree",
+  "dedltree", "dedltree"
+};
+
+static const char* const SURFACE_NAMES[16] = {
+  "water.srf", "dirt.srf", "grass.srf", "snow.srf", "swamp.srf",
+  "lava.srf", "desert.srf", "road.srf", "dwater.srf", "tflr.srf",
+  "sky.srf", "croad.srf", "sewer.srf", "cloud.srf", "scortch.srf",
+  "space.srf"
+};
+
+static const char* const WHO_ACTIONS[32] = {
+  "Šâ® ®¡ëé¥â",
+  "Šâ® ®âªà®¥â",
+  "Šâ® ¢ë¯ì¥â",
+  "Šâ® ¡ã¤¥â ª®¯ âì",
+  "Šâ® ¯®âண ¥â",
+  "Šâ® ¯à®çâñâ",
+  "Š®£® ­ ãç¨âì",
+  "Šâ® ¢®§ì¬ñâ",
+  "Šâ® 㤠à¨â",
+  "Šâ® ãªà ¤ñâ",
+  "Šâ® ¤ áâ ¢§ïâªã",
+  "Šâ® § ¯« â¨â",
+  "Šâ® ¯à¨á拉â",
+  "Šâ® ¯®¯à®¡ã¥â",
+  "Šâ® ¥£® ¯®¢¥à­ñâ",
+  "Šâ® ¨áªã¯­ñâáï",
+  "Šâ® ¥£® ã­¨ç⮦¨â",
+  "Šâ® ¢ë¤¥à­¥â",
+  "Šâ® á¯ãáâ¨âáï",
+  "Šâ® ¡à®á¨â ¬®­¥âªã",
+  "pray",
+  "Šâ® áâ ­¥â ç«¥­®¬",
+  "act",
+  "Šâ® å®ç¥â áë£à âì",
+  "Šâ® ­ ¦¬ñâ",
+  "rub",
+  "pick",
+  "eat",
+  "sign",
+  "close",
+  "look",
+  "try"
+};
+
+static const char* const WHO_WILL_ACTIONS[4] = {
+  "Žâªàëâì à¥èñâªã",
+  "Žâªàëâì ¤¢¥àì",
+  " áªàëâì ᢨ⮪",
+  "‚ë¡¥à¨â¥ ¯¥àá®­ ¦ "
 };
 
 static const byte SYMBOLS[20][64] = {
-	{ // 0
-		0x00, 0x00, 0xA8, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x00, 0xA8, 0x9E, 0x9C, 0x9C, 0x9E, 0x9E, 0x9E,
-		0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0x9A, 0x9A, 0x9A, 0xAC, 0x9E, 0xAC, 0xA8, 0xA8, 0xA6, 0x97, 0x98,
-		0xAC, 0xA0, 0xAC, 0xAC, 0xA4, 0xA6, 0x98, 0x99, 0x00, 0xAC, 0xA0, 0xA0, 0xA8, 0xAC, 0x9A, 0x9A,
-		0x00, 0x00, 0xAC, 0xAC, 0xAC, 0xA4, 0x9B, 0x9A, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0x9B, 0x9B,
-	},
-	{ // 1
-		0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
-		0x99, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97,
-		0x99, 0x98, 0x98, 0x99, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
-		0x9A, 0x9B, 0x9B, 0x9C, 0x9B, 0x9A, 0x9C, 0x9A, 0x9B, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x9A, 0x9B,
-	},
-	{ // 2
-		0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
-		0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x98, 0x98, 0x99, 0x98, 0x98, 0x97, 0x98, 0x98,
-		0x99, 0x98, 0x98, 0x98, 0x99, 0x99, 0x98, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
-		0x9B, 0x9B, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9B, 0x99, 0x9A, 0x9B, 0x9B, 0x9A, 0x9A, 0x99, 0x9A,
-	},
-	{ // 3
-		0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
-		0x99, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x98, 0x98, 0x97, 0x97, 0x98, 0x98, 0x98, 0x98,
-		0x99, 0x99, 0x98, 0x99, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
-		0x9B, 0x9C, 0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0x9C, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x9A,
-	},
-	{ // 4
-		0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
-		0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x99, 0x9A, 0x97, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
-		0x99, 0x99, 0x98, 0x99, 0x99, 0x98, 0x98, 0x98, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
-		0x9A, 0x9C, 0x9B, 0x9B, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x99, 0x9B, 0x9B, 0x9A, 0x99, 0x9A, 0x9A,
-	},
-	{ // 5
-		0xA4, 0xA4, 0xA8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x9E, 0x9E, 0xA0, 0xA8, 0xAC, 0x00, 0x00,
-		0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9E, 0xAC, 0x00, 0x97, 0x97, 0x97, 0x98, 0x9C, 0x9C, 0xA0, 0xAC,
-		0x99, 0x98, 0x99, 0x99, 0x99, 0x9B, 0xA0, 0xAC, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9B, 0xA0, 0xAC,
-		0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x9A, 0x9A, 0x9B, 0x9B, 0xA4, 0xAC, 0x00,
-	},
-	{ // 6
-		0x00, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x9B, 0x99,
-		0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x98, 0x99, 0x99,
-		0x00, 0xAC, 0xA0, 0x9C, 0x9C, 0xA0, 0x9C, 0x9A, 0x00, 0x00, 0xAC, 0xA4, 0xA0, 0x99, 0x99, 0x99,
-		0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99,
-	},
-	{ // 7
-		0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-		0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x9C, 0x99, 0x99,
-		0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99,
-		0x00, 0x00, 0xAC, 0xA0, 0x9B, 0xA0, 0x9E, 0x9C, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x9C, 0x99, 0x99,
-	},
-	{ // 8
-		0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x9B, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-		0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-		0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-		0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x9C, 0x99, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x9E, 0x9C, 0x99,
-	},
-	{ // 9
-		0x00, 0x00, 0xAC, 0xA4, 0xA0, 0x9C, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x9C, 0xA0, 0x9C, 0x9A,
-		0xAC, 0xA4, 0x9C, 0x9A, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-		0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99,
-		0x00, 0xAC, 0xA4, 0x9C, 0x9A, 0x9C, 0x99, 0x99, 0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x9A, 0x99, 0x99,
-	},
-	{ // 10
-		0x99, 0x99, 0x99, 0x9A, 0xA0, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
-		0x99, 0x99, 0x9C, 0x9E, 0xA4, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x9C, 0x99, 0x9C, 0xA4, 0xAC, 0x00,
-		0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
-		0x99, 0x99, 0x99, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x9A, 0x9B, 0x9E, 0x9C, 0x9C, 0xA4, 0xAC, 0x00,
-	},
-	{ // 11
-		0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0x9E, 0xAC,
-		0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00,
-		0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
-		0x9C, 0x99, 0x99, 0x99, 0x9C, 0x9C, 0xA4, 0xAC, 0x99, 0x9E, 0x9E, 0x9C, 0x9C, 0xA0, 0xAC, 0x00,
-	},
-	{ // 12
-		0x99, 0x99, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x9B, 0x9C, 0x9E, 0x9C, 0x9C, 0xA4, 0xAC, 0x00,
-		0x99, 0x99, 0x99, 0x99, 0x99, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
-		0x99, 0x99, 0x99, 0x99, 0x9C, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xA4, 0xAC, 0x00,
-		0x99, 0x99, 0x9C, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
-	},
-	{ // 13
-		0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
-		0x99, 0x9B, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x9A, 0x99, 0x9C, 0xA0, 0xAC, 0x00,
-		0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
-		0x99, 0x99, 0x99, 0x99, 0x9A, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x9A, 0x9C, 0xA4, 0xAC, 0x00,
-	},
-	{ // 14
-		0x00, 0x00, 0xAC, 0x9E, 0x9C, 0x9C, 0x9C, 0x9B, 0x00, 0xAC, 0x9C, 0xA0, 0x9E, 0xA4, 0xA4, 0xA4,
-		0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0xAC, 0x9C, 0x9E, 0xAC, 0xA0, 0xAC, 0xA8, 0x9E, 0xA8, 0xAC, 0x99,
-		0xAC, 0x9E, 0xAC, 0xA8, 0xAC, 0x9E, 0xA4, 0xAC, 0xAC, 0xA4, 0xA0, 0xAC, 0xAC, 0xA0, 0xA4, 0xAC,
-		0x00, 0xAC, 0xA4, 0xA0, 0xA0, 0xA4, 0xAC, 0xA4, 0x00, 0x00, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-	},
-	{ // 15
-		0x9C, 0x9C, 0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
-		0x9E, 0x9E, 0x9E, 0x9C, 0x9E, 0x9E, 0x9E, 0x9E, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x99, 0x98,
-		0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0x9E, 0x9E, 0xA0,
-		0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-	},
-	{ // 16
-		0x9B, 0x9B, 0x9B, 0x9B, 0x9C, 0x9B, 0x9C, 0x9C, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
-		0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9E, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
-		0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xA0, 0xA0, 0xA0, 0x9E, 0xA0, 0x9E, 0x9E, 0xA0,
-		0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-	},
-	{ // 17
-		0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9C, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
-		0x9E, 0x9E, 0x9E, 0x9C, 0x9C, 0x9C, 0x9E, 0x9E, 0x98, 0x98, 0x98, 0x99, 0x9A, 0x9A, 0x99, 0x98,
-		0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9C, 0xA0, 0x9E, 0x9E, 0xA0, 0xA0, 0xA0, 0xA0, 0x9E,
-		0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-	},
-	{ // 18
-		0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
-		0x9E, 0x9E, 0x9E, 0x9E, 0x9C, 0x9C, 0x9C, 0x9E, 0x98, 0x98, 0x98, 0x98, 0x9A, 0x9A, 0x98, 0x99,
-		0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9B, 0x9C, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0xA0, 0xA0, 0xA0,
-		0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-	},
-	{ // 19
-		0x9C, 0x9B, 0x9C, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0x00, 0x00,
-		0x9E, 0x9E, 0x9C, 0x9C, 0x9E, 0xA0, 0xAC, 0x00, 0x99, 0x98, 0x98, 0x99, 0x9A, 0x9A, 0xA0, 0xAC,
-		0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xA0, 0xAC, 0xA0, 0xA0, 0x9E, 0xA0, 0xA0, 0xA0, 0xA0, 0xAC,
-		0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0x00, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0x00, 0x00,
-	}
+  { // 0
+    0x00, 0x00, 0xA8, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x00, 0xA8, 0x9E, 0x9C, 0x9C, 0x9E, 0x9E, 0x9E,
+    0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0x9A, 0x9A, 0x9A, 0xAC, 0x9E, 0xAC, 0xA8, 0xA8, 0xA6, 0x97, 0x98,
+    0xAC, 0xA0, 0xAC, 0xAC, 0xA4, 0xA6, 0x98, 0x99, 0x00, 0xAC, 0xA0, 0xA0, 0xA8, 0xAC, 0x9A, 0x9A,
+    0x00, 0x00, 0xAC, 0xAC, 0xAC, 0xA4, 0x9B, 0x9A, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0x9B, 0x9B,
+  },
+  { // 1
+    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+    0x99, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97,
+    0x99, 0x98, 0x98, 0x99, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+    0x9A, 0x9B, 0x9B, 0x9C, 0x9B, 0x9A, 0x9C, 0x9A, 0x9B, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x9A, 0x9B,
+  },
+  { // 2
+    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+    0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x98, 0x98, 0x99, 0x98, 0x98, 0x97, 0x98, 0x98,
+    0x99, 0x98, 0x98, 0x98, 0x99, 0x99, 0x98, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+    0x9B, 0x9B, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9B, 0x99, 0x9A, 0x9B, 0x9B, 0x9A, 0x9A, 0x99, 0x9A,
+  },
+  { // 3
+    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+    0x99, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x98, 0x98, 0x97, 0x97, 0x98, 0x98, 0x98, 0x98,
+    0x99, 0x99, 0x98, 0x99, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+    0x9B, 0x9C, 0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0x9C, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x9A,
+  },
+  { // 4
+    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+    0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x99, 0x9A, 0x97, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
+    0x99, 0x99, 0x98, 0x99, 0x99, 0x98, 0x98, 0x98, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+    0x9A, 0x9C, 0x9B, 0x9B, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x99, 0x9B, 0x9B, 0x9A, 0x99, 0x9A, 0x9A,
+  },
+  { // 5
+    0xA4, 0xA4, 0xA8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x9E, 0x9E, 0xA0, 0xA8, 0xAC, 0x00, 0x00,
+    0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9E, 0xAC, 0x00, 0x97, 0x97, 0x97, 0x98, 0x9C, 0x9C, 0xA0, 0xAC,
+    0x99, 0x98, 0x99, 0x99, 0x99, 0x9B, 0xA0, 0xAC, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9B, 0xA0, 0xAC,
+    0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x9A, 0x9A, 0x9B, 0x9B, 0xA4, 0xAC, 0x00,
+  },
+  { // 6
+    0x00, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x9B, 0x99,
+    0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x98, 0x99, 0x99,
+    0x00, 0xAC, 0xA0, 0x9C, 0x9C, 0xA0, 0x9C, 0x9A, 0x00, 0x00, 0xAC, 0xA4, 0xA0, 0x99, 0x99, 0x99,
+    0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99,
+  },
+  { // 7
+    0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+    0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x9C, 0x99, 0x99,
+    0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99,
+    0x00, 0x00, 0xAC, 0xA0, 0x9B, 0xA0, 0x9E, 0x9C, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x9C, 0x99, 0x99,
+  },
+  { // 8
+    0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x9B, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+    0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+    0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+    0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x9C, 0x99, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x9E, 0x9C, 0x99,
+  },
+  { // 9
+    0x00, 0x00, 0xAC, 0xA4, 0xA0, 0x9C, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x9C, 0xA0, 0x9C, 0x9A,
+    0xAC, 0xA4, 0x9C, 0x9A, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+    0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99,
+    0x00, 0xAC, 0xA4, 0x9C, 0x9A, 0x9C, 0x99, 0x99, 0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x9A, 0x99, 0x99,
+  },
+  { // 10
+    0x99, 0x99, 0x99, 0x9A, 0xA0, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
+    0x99, 0x99, 0x9C, 0x9E, 0xA4, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x9C, 0x99, 0x9C, 0xA4, 0xAC, 0x00,
+    0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
+    0x99, 0x99, 0x99, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x9A, 0x9B, 0x9E, 0x9C, 0x9C, 0xA4, 0xAC, 0x00,
+  },
+  { // 11
+    0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0x9E, 0xAC,
+    0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00,
+    0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
+    0x9C, 0x99, 0x99, 0x99, 0x9C, 0x9C, 0xA4, 0xAC, 0x99, 0x9E, 0x9E, 0x9C, 0x9C, 0xA0, 0xAC, 0x00,
+  },
+  { // 12
+    0x99, 0x99, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x9B, 0x9C, 0x9E, 0x9C, 0x9C, 0xA4, 0xAC, 0x00,
+    0x99, 0x99, 0x99, 0x99, 0x99, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
+    0x99, 0x99, 0x99, 0x99, 0x9C, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xA4, 0xAC, 0x00,
+    0x99, 0x99, 0x9C, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
+  },
+  { // 13
+    0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
+    0x99, 0x9B, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x9A, 0x99, 0x9C, 0xA0, 0xAC, 0x00,
+    0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
+    0x99, 0x99, 0x99, 0x99, 0x9A, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x9A, 0x9C, 0xA4, 0xAC, 0x00,
+  },
+  { // 14
+    0x00, 0x00, 0xAC, 0x9E, 0x9C, 0x9C, 0x9C, 0x9B, 0x00, 0xAC, 0x9C, 0xA0, 0x9E, 0xA4, 0xA4, 0xA4,
+    0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0xAC, 0x9C, 0x9E, 0xAC, 0xA0, 0xAC, 0xA8, 0x9E, 0xA8, 0xAC, 0x99,
+    0xAC, 0x9E, 0xAC, 0xA8, 0xAC, 0x9E, 0xA4, 0xAC, 0xAC, 0xA4, 0xA0, 0xAC, 0xAC, 0xA0, 0xA4, 0xAC,
+    0x00, 0xAC, 0xA4, 0xA0, 0xA0, 0xA4, 0xAC, 0xA4, 0x00, 0x00, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+  },
+  { // 15
+    0x9C, 0x9C, 0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+    0x9E, 0x9E, 0x9E, 0x9C, 0x9E, 0x9E, 0x9E, 0x9E, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x99, 0x98,
+    0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0x9E, 0x9E, 0xA0,
+    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+  },
+  { // 16
+    0x9B, 0x9B, 0x9B, 0x9B, 0x9C, 0x9B, 0x9C, 0x9C, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+    0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9E, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
+    0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xA0, 0xA0, 0xA0, 0x9E, 0xA0, 0x9E, 0x9E, 0xA0,
+    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+  },
+  { // 17
+    0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9C, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+    0x9E, 0x9E, 0x9E, 0x9C, 0x9C, 0x9C, 0x9E, 0x9E, 0x98, 0x98, 0x98, 0x99, 0x9A, 0x9A, 0x99, 0x98,
+    0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9C, 0xA0, 0x9E, 0x9E, 0xA0, 0xA0, 0xA0, 0xA0, 0x9E,
+    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+  },
+  { // 18
+    0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+    0x9E, 0x9E, 0x9E, 0x9E, 0x9C, 0x9C, 0x9C, 0x9E, 0x98, 0x98, 0x98, 0x98, 0x9A, 0x9A, 0x98, 0x99,
+    0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9B, 0x9C, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0xA0, 0xA0, 0xA0,
+    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+  },
+  { // 19
+    0x9C, 0x9B, 0x9C, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0x00, 0x00,
+    0x9E, 0x9E, 0x9C, 0x9C, 0x9E, 0xA0, 0xAC, 0x00, 0x99, 0x98, 0x98, 0x99, 0x9A, 0x9A, 0xA0, 0xAC,
+    0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xA0, 0xAC, 0xA0, 0xA0, 0x9E, 0xA0, 0xA0, 0xA0, 0xA0, 0xAC,
+    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0x00, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0x00, 0x00,
+  }
 };
 
 static const byte TEXT_COLORS[40][4] = {
-	{ 0x00, 0x19, 0x19, 0x19 },
-	{ 0x00, 0x08, 0x08, 0x08 },
-	{ 0x00, 0x0F, 0x0F, 0x0F },
-	{ 0x00, 0x15, 0x15, 0x15 },
-	{ 0x00, 0x01, 0x01, 0x01 },
-	{ 0x00, 0x21, 0x21, 0x21 },
-	{ 0x00, 0x26, 0x26, 0x26 },
-	{ 0x00, 0x2B, 0x2B, 0x2B },
-	{ 0x00, 0x31, 0x31, 0x31 },
-	{ 0x00, 0x36, 0x36, 0x36 },
-	{ 0x00, 0x3D, 0x3D, 0x3D },
-	{ 0x00, 0x41, 0x41, 0x41 },
-	{ 0x00, 0x46, 0x46, 0x46 },
-	{ 0x00, 0x4C, 0x4C, 0x4C },
-	{ 0x00, 0x50, 0x50, 0x50 },
-	{ 0x00, 0x55, 0x55, 0x55 },
-	{ 0x00, 0x5D, 0x5D, 0x5D },
-	{ 0x00, 0x60, 0x60, 0x60 },
-	{ 0x00, 0x65, 0x65, 0x65 },
-	{ 0x00, 0x6C, 0x6C, 0x6C },
-	{ 0x00, 0x70, 0x70, 0x70 },
-	{ 0x00, 0x75, 0x75, 0x75 },
-	{ 0x00, 0x7B, 0x7B, 0x7B },
-	{ 0x00, 0x80, 0x80, 0x80 },
-	{ 0x00, 0x85, 0x85, 0x85 },
-	{ 0x00, 0x8D, 0x8D, 0x8D },
-	{ 0x00, 0x90, 0x90, 0x90 },
-	{ 0x00, 0x97, 0x97, 0x97 },
-	{ 0x00, 0x9D, 0x9D, 0x9D },
-	{ 0x00, 0xA4, 0xA4, 0xA4 },
-	{ 0x00, 0xAB, 0xAB, 0xAB },
-	{ 0x00, 0xB0, 0xB0, 0xB0 },
-	{ 0x00, 0xB6, 0xB6, 0xB6 },
-	{ 0x00, 0xBD, 0xBD, 0xBD },
-	{ 0x00, 0xC0, 0xC0, 0xC0 },
-	{ 0x00, 0xC6, 0xC6, 0xC6 },
-	{ 0x00, 0xCD, 0xCD, 0xCD },
-	{ 0x00, 0xD0, 0xD0, 0xD0 },
-	{ 0x00, 0xD6, 0xD6, 0xD6 },
-	{ 0x00, 0xDB, 0xDB, 0xDB },
+  { 0x00, 0x19, 0x19, 0x19 },
+  { 0x00, 0x08, 0x08, 0x08 },
+  { 0x00, 0x0F, 0x0F, 0x0F },
+  { 0x00, 0x15, 0x15, 0x15 },
+  { 0x00, 0x01, 0x01, 0x01 },
+  { 0x00, 0x21, 0x21, 0x21 },
+  { 0x00, 0x26, 0x26, 0x26 },
+  { 0x00, 0x2B, 0x2B, 0x2B },
+  { 0x00, 0x31, 0x31, 0x31 },
+  { 0x00, 0x36, 0x36, 0x36 },
+  { 0x00, 0x3D, 0x3D, 0x3D },
+  { 0x00, 0x41, 0x41, 0x41 },
+  { 0x00, 0x46, 0x46, 0x46 },
+  { 0x00, 0x4C, 0x4C, 0x4C },
+  { 0x00, 0x50, 0x50, 0x50 },
+  { 0x00, 0x55, 0x55, 0x55 },
+  { 0x00, 0x5D, 0x5D, 0x5D },
+  { 0x00, 0x60, 0x60, 0x60 },
+  { 0x00, 0x65, 0x65, 0x65 },
+  { 0x00, 0x6C, 0x6C, 0x6C },
+  { 0x00, 0x70, 0x70, 0x70 },
+  { 0x00, 0x75, 0x75, 0x75 },
+  { 0x00, 0x7B, 0x7B, 0x7B },
+  { 0x00, 0x80, 0x80, 0x80 },
+  { 0x00, 0x85, 0x85, 0x85 },
+  { 0x00, 0x8D, 0x8D, 0x8D },
+  { 0x00, 0x90, 0x90, 0x90 },
+  { 0x00, 0x97, 0x97, 0x97 },
+  { 0x00, 0x9D, 0x9D, 0x9D },
+  { 0x00, 0xA4, 0xA4, 0xA4 },
+  { 0x00, 0xAB, 0xAB, 0xAB },
+  { 0x00, 0xB0, 0xB0, 0xB0 },
+  { 0x00, 0xB6, 0xB6, 0xB6 },
+  { 0x00, 0xBD, 0xBD, 0xBD },
+  { 0x00, 0xC0, 0xC0, 0xC0 },
+  { 0x00, 0xC6, 0xC6, 0xC6 },
+  { 0x00, 0xCD, 0xCD, 0xCD },
+  { 0x00, 0xD0, 0xD0, 0xD0 },
+  { 0x00, 0xD6, 0xD6, 0xD6 },
+  { 0x00, 0xDB, 0xDB, 0xDB },
 };
 
 static const byte TEXT_COLORS_STARTUP[40][4] = {
-	{ 0x00, 0x19, 0x19, 0x19 },
-	{ 0x00, 0x08, 0x08, 0x08 },
-	{ 0x00, 0x0F, 0x0F, 0x0F },
-	{ 0x00, 0x15, 0x15, 0x15 },
-	{ 0x00, 0x01, 0x01, 0x01 },
-	{ 0x00, 0x1F, 0x1F, 0x1F },
-	{ 0x00, 0x26, 0x26, 0x26 },
-	{ 0x00, 0x2B, 0x2B, 0x2B },
-	{ 0x00, 0x31, 0x31, 0x31 },
-	{ 0x00, 0x36, 0x36, 0x36 },
-	{ 0x00, 0x3D, 0x3D, 0x3D },
-	{ 0x00, 0x42, 0x42, 0x42 },
-	{ 0x00, 0x46, 0x46, 0x46 },
-	{ 0x00, 0x4C, 0x4C, 0x4C },
-	{ 0x00, 0x50, 0x50, 0x50 },
-	{ 0x00, 0x55, 0x55, 0x55 },
-	{ 0x00, 0x5D, 0x5D, 0x5D },
-	{ 0x00, 0x60, 0x60, 0x60 },
-	{ 0x00, 0x65, 0x65, 0x65 },
-	{ 0x00, 0x6C, 0x6C, 0x6C },
-	{ 0x00, 0x70, 0x70, 0x70 },
-	{ 0x00, 0x75, 0x75, 0x75 },
-	{ 0x00, 0x7B, 0x7B, 0x7B },
-	{ 0x00, 0x80, 0x80, 0x80 },
-	{ 0x00, 0x85, 0x85, 0x85 },
-	{ 0x00, 0x8D, 0x8D, 0x8D },
-	{ 0x00, 0x90, 0x90, 0x90 },
-	{ 0x00, 0x97, 0x97, 0x97 },
-	{ 0x00, 0x9D, 0x9D, 0x9D },
-	{ 0x00, 0xA4, 0xA4, 0xA4 },
-	{ 0x00, 0xAB, 0xAB, 0xAB },
-	{ 0x00, 0xB0, 0xB0, 0xB0 },
-	{ 0x00, 0xB6, 0xB6, 0xB6 },
-	{ 0x00, 0xBD, 0xBD, 0xBD },
-	{ 0x00, 0xC0, 0xC0, 0xC0 },
-	{ 0x00, 0xC6, 0xC6, 0xC6 },
-	{ 0x00, 0xCD, 0xCD, 0xCD },
-	{ 0x00, 0xD0, 0xD0, 0xD0 },
-	{ 0x00, 0x19, 0x19, 0x19 },
-	{ 0x00, 0x31, 0x31, 0x31 }
-};
-
-static const char *const DIRECTION_TEXT_UPPER[4] = { "NORTH", "EAST", "SOUTH", "WEST" };
-
-static const char *const DIRECTION_TEXT[4] = { "North", "East", "South", "West" };
-
-static const char *const RACE_NAMES[5] = { "Human", "Elf", "Dwarf", "Gnome", "H-Orc" };
+  { 0x00, 0x19, 0x19, 0x19 },
+  { 0x00, 0x08, 0x08, 0x08 },
+  { 0x00, 0x0F, 0x0F, 0x0F },
+  { 0x00, 0x15, 0x15, 0x15 },
+  { 0x00, 0x01, 0x01, 0x01 },
+  { 0x00, 0x1F, 0x1F, 0x1F },
+  { 0x00, 0x26, 0x26, 0x26 },
+  { 0x00, 0x2B, 0x2B, 0x2B },
+  { 0x00, 0x31, 0x31, 0x31 },
+  { 0x00, 0x36, 0x36, 0x36 },
+  { 0x00, 0x3D, 0x3D, 0x3D },
+  { 0x00, 0x42, 0x42, 0x42 },
+  { 0x00, 0x46, 0x46, 0x46 },
+  { 0x00, 0x4C, 0x4C, 0x4C },
+  { 0x00, 0x50, 0x50, 0x50 },
+  { 0x00, 0x55, 0x55, 0x55 },
+  { 0x00, 0x5D, 0x5D, 0x5D },
+  { 0x00, 0x60, 0x60, 0x60 },
+  { 0x00, 0x65, 0x65, 0x65 },
+  { 0x00, 0x6C, 0x6C, 0x6C },
+  { 0x00, 0x70, 0x70, 0x70 },
+  { 0x00, 0x75, 0x75, 0x75 },
+  { 0x00, 0x7B, 0x7B, 0x7B },
+  { 0x00, 0x80, 0x80, 0x80 },
+  { 0x00, 0x85, 0x85, 0x85 },
+  { 0x00, 0x8D, 0x8D, 0x8D },
+  { 0x00, 0x90, 0x90, 0x90 },
+  { 0x00, 0x97, 0x97, 0x97 },
+  { 0x00, 0x9D, 0x9D, 0x9D },
+  { 0x00, 0xA4, 0xA4, 0xA4 },
+  { 0x00, 0xAB, 0xAB, 0xAB },
+  { 0x00, 0xB0, 0xB0, 0xB0 },
+  { 0x00, 0xB6, 0xB6, 0xB6 },
+  { 0x00, 0xBD, 0xBD, 0xBD },
+  { 0x00, 0xC0, 0xC0, 0xC0 },
+  { 0x00, 0xC6, 0xC6, 0xC6 },
+  { 0x00, 0xCD, 0xCD, 0xCD },
+  { 0x00, 0xD0, 0xD0, 0xD0 },
+  { 0x00, 0x19, 0x19, 0x19 },
+  { 0x00, 0x31, 0x31, 0x31 }
+};
+
+static const char* const DIRECTION_TEXT_UPPER[4] = { 
+  "NORTH", "EAST", "SOUTH", "WEST" 
+};
+
+static const char* const DIRECTION_TEXT[4] = {
+  "‘¥¢¥à",
+  "‚®á⮪",
+  "ž£",
+  "‡ ¯ ¤"
+};
+
+static const char* const RACE_NAMES[5] = {
+  "—¥«®¢¥ª",
+  "«ìä",
+  "„¢®àä",
+  "ƒ­®¬",
+  "®«ã®àª"
+};
 
 static const int RACE_HP_BONUSES[5] = { 0, -2, 1, -1, 2 };
 
 static const int RACE_SP_BONUSES[5][2] = {
-	{ 0, 0 }, { 2, 0 }, { -1, -1 }, { 1, 1 }, { -2, -2 }
-};
-
-static const char *const ALIGNMENT_NAMES[3] = { "Good", "Neutral", "Evil" };
-
-static const char *const SEX_NAMES[2] = { "Male", "Female" };
-
-static const char *const SKILL_NAMES[18] = {
-	"Thievery\t100", "Arms Master", "Astrologer", "Body Builder", "Cartographer",
-	"Crusader", "Direction Sense", "Linguist", "Merchant", "Mountaineer",
-	"Navigator", "Path Finder", "Prayer Master", "Prestidigitator",
-	"Swimmer", "Tracker", "Spot Secret Door", "Danger Sense"
-};
-
-static const char *const CLASS_NAMES[11] = {
-	"Knight", "Paladin", "Archer", "Cleric", "Sorcerer", "Robber",
-	"Ninja", "Barbarian", "Druid", "Ranger", nullptr
+  { 0, 0 }, { 2, 0 }, { -1, -1 }, { 1, 1 }, { -2, -2 }
+};
+
+static const char* const ALIGNMENT_NAMES[3] = {
+  "•®à®è¨©",
+  "¥©âà «",
+  "‡«®©(- ï)"
+};
+
+static const char* const SEX_NAMES[2] = {
+  "Œã¦ç¨­ ",
+  "†¥­é¨­ "
+};
+
+static const char* const SKILL_NAMES[18] = {
+  "‚®à®¢á⢮\t100",
+  "Žà㦥©­¨ª",
+  "€áâ஫®£",
+  "€â«¥â",
+  "Š à⮣à ä",
+  "Šà¥áâ®­®á¥æ",
+  "—ã¢á⢮ ­ ¯à ¢«¥­¨ï",
+  "Ÿ§ëª®¢¥¤",
+  "Šã¯¥æ",
+  "‘ª «®« §",
+  "˜âãଠ­",
+  "‘«¥¤®¯ëâ",
+  "Œ £¨áâà ¬®«¨â¢ë",
+  "‹®¢ª®áâì ¯ «ì楢",
+  "«®¢¥æ",
+  "Žå®â­¨ª",
+  "‚®á¯à¨ï⨥",
+  "—ã¢á⢮ ®¯ á­®áâ¨"
+};
+
+static const char* const CLASS_NAMES[11] = {
+  "ëæ àì",
+  " « ¤¨­",
+  "‹ãç­¨ª",
+  "Š«¨à¨ª",
+  "Œ £",
+  "⨈",
+  "¨­¤§ï",
+  "‚ à¢ à",
+  "„à㨤",
+  "‘«¥¤®¯ëâ",
+  nullptr
 };
 
 static const int CLASS_EXP_LEVELS[10] = {
-	1500, 2000, 2000, 1500, 2000, 1000, 1500, 1500, 1500, 2000
-};
-
-static const char *const CONDITION_NAMES[17] = {
-	"Cursed", "Heart Broken", "Weak", "Poisoned", "Diseased",
-	"Insane", "In Love", "Drunk", "Asleep", "Depressed", "Confused",
-	"Paralyzed", "Unconscious", "Dead", "Stone", "Eradicated", "Good"
+  1500, 2000, 2000, 1500, 2000, 1000, 1500, 1500, 1500, 2000
+};
+
+static const char* const CONDITION_NAMES[17] = {
+  "à®ª«ï⨥",
+  "Heart Broken",
+  "‘« ¡®áâì",
+  "Žâà ¢«¥­¨¥",
+  "®«¥§­ì",
+  "¥§ã¬¨¥",
+  "‚«î¡«ñ­(- )",
+  " ¢¥á¥«¥",
+  "‘®­",
+  "‚ ã­ë­¨¨",
+  "‚ á¬ï⥭¨¨",
+  " à «¨ç",
+  ".á®§­ ­¨ï",
+  "Œ¥àâ¢",
+  "Š ¬¥­ì",
+  "“­¨ç⮦¥­",
+  "•®à®è¥¥"
 };
 
 static const int CONDITION_COLORS[17] = {
-	9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32, 32, 6, 6, 6, 6, 15
+  9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32, 32, 6, 6, 6, 6, 15
 };
 
-static const char *const GOOD = "Good";
+static const char* const GOOD = "•®à®è¥¥";
 
-static const char *const BLESSED = "\n\t020Blessed\t095%+d";
+static const char* const BLESSED = "\n\t014« £®á«®¢¥­¨¥\t095%+d";
 
-static const char *const POWER_SHIELD = "\n\t020Power Shield\t095%+d";
+static const char* const POWER_SHIELD = "\n\t014‘¨«®¢®© é¨â\t095%+d";
 
-static const char *const HOLY_BONUS = "\n\t020Holy Bonus\t095%+d";
+static const char* const HOLY_BONUS = "\n\t014‘¢ï⮩ ¤ à\t095%+d";
 
-static const char *const HEROISM = "\n\t020Heroism\t095%+d";
+static const char* const HEROISM = "\n\t014Œã¦¥á⢮\t095%+d";
 
-static const char *const IN_PARTY = "\014""15In Party\014""d";
+static const char* const IN_PARTY = "\f15‚ ®âà拉\fd";
 
-static const char *const PARTY_DETAILS = "\015\003l\002\014""00"
-	"\013""001""\011""035%s"
-	"\013""009""\011""035%s"
-	"\013""017""\011""035%s"
-	"\013""025""\011""035%s"
-	"\013""001""\011""136%s"
-	"\013""009""\011""136%s"
-	"\013""017""\011""136%s"
-	"\013""025""\011""136%s"
-	"\013""044""\011""035%s"
-	"\013""052""\011""035%s"
-	"\013""060""\011""035%s"
-	"\013""068""\011""035%s"
-	"\013""044""\011""136%s"
-	"\013""052""\011""136%s"
-	"\013""060""\011""136%s"
-	"\013""068""\011""136%s";
-static const char *const PARTY_DIALOG_TEXT =
-	"%s\x2\x3""c\v106\t013Up\t048Down\t083\f37D\fdel\t118\f37R\fdem"
-	"\t153\f37C\fdreate\t188E\f37x\fdit\x1";
+static const char* const PARTY_DETAILS = 
+  "\015\003l\002\014""00"
+  "\013""001""\011""035%s"
+  "\013""009""\011""035%s"
+  "\013""017""\011""035%s"
+  "\013""025""\011""035%s"
+  "\013""001""\011""136%s"
+  "\013""009""\011""136%s"
+  "\013""017""\011""136%s"
+  "\013""025""\011""136%s"
+  "\013""044""\011""035%s"
+  "\013""052""\011""035%s"
+  "\013""060""\011""035%s"
+  "\013""068""\011""035%s"
+  "\013""044""\011""136%s"
+  "\013""052""\011""136%s"
+  "\013""060""\011""136%s"
+  "\013""068""\011""136%s";
+
+static const char* const PARTY_DIALOG_TEXT =
+  "%s\x2\x3""c\v106\t013‚¢¥àå\t048‚­¨§\t083\f37“\fd¤ «\t118\f37‚\fd룭"
+  "\t153\f37‘\fd®§¤\t188‚\f37ë\fd室\x1";
 
 static const int FACE_CONDITION_FRAMES[17] = {
-	2, 2, 2, 1, 1, 4, 4, 4, 3, 2, 4, 3, 3, 5, 6, 7, 0
+  2, 2, 2, 1, 1, 4, 4, 4, 3, 2, 4, 3, 3, 5, 6, 7, 0
 };
 
 static const int CHAR_FACES_X[6] = { 10, 45, 81, 117, 153, 189 };
 
 static const int HP_BARS_X[6] = { 13, 50, 86, 122, 158, 194 };
 
-static const char *const NO_ONE_TO_ADVENTURE_WITH = "You have no one to adventure with";
+static const char* const NO_ONE_TO_ADVENTURE_WITH = 
+  "‚ ¬ ­¥ á ª¥¬ ¯ãâ¥è¥á⢮¢ âì";
 
-static const char *const YOUR_ROSTER_IS_FULL = "Your Roster is full!";
+static const char* const YOUR_ROSTER_IS_FULL = "‚ è ᯨ᮪ ¯®«®­!";
 
 static const byte DARKNESS_XLAT[3][256] = {
-	{
-	0, 25, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	60, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	76, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	92, 93, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	108, 109, 110, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	124, 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	140, 141, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	168, 169, 170, 171, 172, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	204, 205, 206, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	220, 221, 222, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	236, 237, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	252, 253, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-	}, {
-	0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
-	56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
-	72, 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0,
-	88, 89, 90, 91, 92, 93, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0,
-	104, 105, 106, 107, 108, 109, 110, 111, 0, 0, 0, 0, 0, 0, 0, 0,
-	120, 121, 122, 123, 124, 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0,
-	136, 137, 138, 139, 140, 141, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0,
-	160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	184, 185, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0,
-	200, 201, 202, 203, 204, 205, 206, 207, 0, 0, 0, 0, 0, 0, 0, 0,
-	216, 217, 218, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 0, 0, 0,
-	232, 233, 234, 235, 236, 237, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0,
-	248, 249, 250, 251, 252, 253, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0
-	}, {
-	0, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
-	24, 25, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0,
-	36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
-	52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0,
-	68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, 0,
-	84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 0, 0, 0, 0,
-	100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 0, 0, 0, 0,
-	116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0, 0, 0, 0,
-	132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 0, 0, 0, 0,
-	152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
-	168, 169, 170, 171, 172, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0,
-	180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0,
-	196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 0, 0, 0,
-	212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 0, 0, 0, 0,
-	228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 0, 0, 0, 0,
-	244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 0, 0, 0, 0
-	}
-};
-
-static const char *const PLEASE_WAIT = "\014""d\003""c\011""000"
-	"\013""002Please Wait...";
-
-static const char *const OOPS = "\003""c\011""000\013""002Oops...";
+  {
+    0,   25,  26,  27,  28,  29,  30,  31,  0,   0,   0,   0,   0,   0,   0,   0,
+    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    44,  45,  46,  47,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    60,  61,  62,  63,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    76,  77,  78,  79,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    92,  93,  94,  95,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    108, 109, 110, 111, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    124, 125, 126, 127, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    140, 141, 142, 143, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    168, 169, 170, 171, 172, 173, 174, 175, 0,   0,   0,   0,   0,   0,   0,   0,
+    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    188, 189, 190, 191, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    204, 205, 206, 207, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    220, 221, 222, 223, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    236, 237, 238, 239, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    252, 253, 254, 255, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
+  }, {
+    0,   17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
+    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    40,  41,  42,  43,  44,  45,  46,  47,  0,   0,   0,   0,   0,   0,   0,   0,
+    56,  57,  58,  59,  60,  61,  62,  63,  0,   0,   0,   0,   0,   0,   0,   0,
+    72,  73,  74,  75,  76,  77,  78,  79,  0,   0,   0,   0,   0,   0,   0,   0,
+    88,  89,  90,  91,  92,  93,  94,  95,  0,   0,   0,   0,   0,   0,   0,   0,
+    104, 105, 106, 107, 108, 109, 110, 111, 0,   0,   0,   0,   0,   0,   0,   0,
+    120, 121, 122, 123, 124, 125, 126, 127, 0,   0,   0,   0,   0,   0,   0,   0,
+    136, 137, 138, 139, 140, 141, 142, 143, 0,   0,   0,   0,   0,   0,   0,   0,
+    160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
+    184, 185, 186, 187, 188, 189, 190, 191, 0,   0,   0,   0,   0,   0,   0,   0,
+    200, 201, 202, 203, 204, 205, 206, 207, 0,   0,   0,   0,   0,   0,   0,   0,
+    216, 217, 218, 219, 220, 221, 222, 223, 0,   0,   0,   0,   0,   0,   0,   0,
+    232, 233, 234, 235, 236, 237, 238, 239, 0,   0,   0,   0,   0,   0,   0,   0,
+    248, 249, 250, 251, 252, 253, 254, 255, 0,   0,   0,   0,   0,   0,   0,   0
+  }, {
+    0,   9,   10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,
+    24,  25,  26,  27,  28,  29,  30,  31,  0,   0,   0,   0,   0,   0,   0,   0,
+    36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  0,   0,   0,   0,
+    52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  0,   0,   0,   0,
+    68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  0,   0,   0,   0,
+    84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  0,   0,   0,   0,
+    100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 0,   0,   0,   0,
+    116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0,   0,   0,   0,
+    132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 0,   0,   0,   0,
+    152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+    168, 169, 170, 171, 172, 173, 174, 175, 0,   0,   0,   0,   0,   0,   0,   0,
+    180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 0,   0,   0,   0,
+    196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0,   0,   0,   0,
+    212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 0,   0,   0,   0,
+    228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 0,   0,   0,   0,
+    244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 0,   0,   0,   0
+  }
+};
+
+static const char* const PLEASE_WAIT = "\fd\x3""c\t000\v002®¤®¦¤¨â¥...";
+
+static const char* const OOPS = "\x3""c\t000\v002“¯á...";
 
 static const int SCREEN_POSITIONING_X[4][48] = {
-	{
-	-1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
-	-1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
-	-1, -1,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,
-	-3, -2, -1,  0,  0,  1,  2,  3, -4,  4,  0,  0
-	}, {
-	 0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
-	 2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
-	 3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
-	 4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  0,  1
-	}, {
-	 1,  0,  0,  0, -1,  1,  0,  0,  0, -1,  2,  1,
-	 1,  0,  0,  0, -1, -1, -2,  4,  3,  3,  2,  2,
-	 1,  1,  0,  0,  0, -1, -1, -2, -2, -3, -3, -4,
-	 3,  2,  1,  0,  0, -1, -2, -3,  4, -4,  0,  0
-	}, {
-	 0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -2, -2,
-	-2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3,
-	-3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
-	-4, -4, -4, -4, -4, -4, -4, -4, -4, -4,  0, -1
-	}
+  {
+   -1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
+   -1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
+   -1, -1,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,
+   -3, -2, -1,  0,  0,  1,  2,  3, -4,  4,  0,  0
+  }, {
+    0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
+    2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
+    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
+    4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  0,  1
+  }, {
+    1,  0,  0,  0, -1,  1,  0,  0,  0, -1,  2,  1,
+    1,  0,  0,  0, -1, -1, -2,  4,  3,  3,  2,  2,
+    1,  1,  0,  0,  0, -1, -1, -2, -2, -3, -3, -4,
+    3,  2,  1,  0,  0, -1, -2, -3,  4, -4,  0,  0
+  }, {
+    0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -2, -2,
+   -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3,
+   -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
+   -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,  0, -1
+  }
 };
 
 static const int SCREEN_POSITIONING_Y[4][48] = {
-	{
-	 0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
-	 2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
-	 3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
-	 4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  0,  1
-	}, {
-	 1,  0,  0,  0, -1,  1,  0,  0,  0, -1,  2,  1,
-	 1,  0,  0,  0, -1, -1, -2,  4,  3,  3,  2,  2,
-	 1,  1,  0,  0,  0, -1, -1, -2, -2, -3, -3, -4,
-	 3,  2,  1,  0,  0, -1, -2, -3,  4, -4,  0,  0
-	}, {
-	 0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -2, -2,
-	-2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3,
-	-3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
-	-4, -4, -4, -4, -4, -4, -4, -4, -4, -4,  0, -1
-	}, {
-	-1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
-	-1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
-	-1, -1,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,
-	-3, -2, -1,  0,  0,  1,  2,  3, -4,  4,  0,  0
-	}
+  {
+    0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
+    2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
+    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
+    4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  0,  1
+  }, {
+    1,  0,  0,  0, -1,  1,  0,  0,  0, -1,  2,  1,
+    1,  0,  0,  0, -1, -1, -2,  4,  3,  3,  2,  2,
+    1,  1,  0,  0,  0, -1, -1, -2, -2, -3, -3, -4,
+    3,  2,  1,  0,  0, -1, -2, -3,  4, -4,  0,  0
+  }, {
+    0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -2, -2,
+   -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3,
+   -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
+   -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,  0, -1
+  }, {
+   -1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
+   -1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
+   -1, -1,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,
+   -3, -2, -1,  0,  0,  1,  2,  3, -4,  4,  0,  0
+  }
 };
 
 static const int MONSTER_GRID_BITMASK[12] = {
-	0xC, 8, 4, 0, 0xF, 0xF000, 0xF00, 0xF0, 0xF00, 0xF0, 0x0F, 0xF000
+  0xC, 8, 4, 0, 0xF, 0xF000, 0xF00, 0xF0, 0xF00, 0xF0, 0x0F, 0xF000
 };
 
 static const int INDOOR_OBJECT_X[2][12] = {
-	{ -5, -7, -112, 98, -8, -65, 49, -9, -34, 16, -58, 40 },
-	{ -35, -35, -142, 68, -35, -95, 19, -35, -62, -14, -98, 16 }
+  { -5,  -7,  -112, 98, -8,  -65, 49, -9,  -34,  16, -58, 40 },
+  { -35, -35, -142, 68, -35, -95, 19, -35, -62, -14, -98, 16 }
 };
 
 static const int MAP_OBJECT_Y[2][12] = {
-	{ 2, 25, 25, 25, 50, 50, 50, 58, 58, 58, 58, 58 },
-	{ -65, -6, -6, -6, 36, 36, 36, 54, 54, 54, 54, 54 }
+  {   2, 25, 25, 25, 50, 50, 50, 58, 58, 58, 58, 58 },
+  { -65, -6, -6, -6, 36, 36, 36, 54, 54, 54, 54, 54 }
 };
 
 static const int INDOOR_MONSTERS_Y[4] = { 2, 34, 53, 59 };
 
 static const int OUTDOOR_OBJECT_X[2][12] = {
-	{ -5, -7, -112, 98, -8, -77, 61, -9, -43, 25, -74, 56 },
-	{ -35, -35, -142, 68, -35, -95, 19, -35, -62, -24, -98, 16 }
+  {  -5,  -7, -112, 98,  -8, -77, 61,  -9, -43,  25, -74, 56 },
+  { -35, -35, -142, 68, -35, -95, 19, -35, -62, -24, -98, 16 }
 };
 
 static const int OUTDOOR_MONSTER_INDEXES[26] = {
-	42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 69, 70,
-	71, 72, 73, 74, 75, 90, 91, 92, 93, 94, 112, 115, 118
+  42, 43, 44, 45, 46, 47, 48, 49, 50, 51,  52,  69,  70,
+  71, 72, 73, 74, 75, 90, 91, 92, 93, 94, 112, 115, 118
 };
 
 static const int OUTDOOR_MONSTERS_Y[26] = {
-	59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 53, 53,
-	53, 53, 53, 53, 53, 34, 34, 34, 34, 34, 2, 2, 2
+  59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 53, 53,
+  53, 53, 53, 53, 53, 34, 34, 34, 34, 34,  2,  2,  2
 };
 
 static const int DIRECTION_ANIM_POSITIONS[4][4] = {
-	{ 0, 1, 2, 3 }, { 3, 0, 1, 2 }, { 2, 3, 0, 1 }, { 1, 2, 3, 0 }
+  { 0, 1, 2, 3 }, { 3, 0, 1, 2 }, { 2, 3, 0, 1 }, { 1, 2, 3, 0 }
 };
 
 static const byte WALL_SHIFTS[4][48] = {
-	{
-		12, 0, 12, 8, 12, 12, 0, 12, 8, 12, 12, 0,
-		12, 0, 12, 8, 12, 8, 12, 12, 0, 12, 0, 12,
-		0, 12, 0, 12, 8, 12, 8, 12, 8, 12, 8, 12,
-		0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 4, 4
-	}, {
-		8, 12, 8, 4, 8, 8, 12, 8, 4, 8, 8, 12,
-		8, 12, 8, 4, 8, 4, 8, 8, 12, 8, 12, 8,
-		12, 8, 12, 8, 4, 8, 4, 8, 4, 8, 4, 8,
-		12, 12, 12, 12, 4, 4, 4, 4, 0, 0, 0, 0
-	}, {
-		4, 8, 4, 0, 4, 4, 8, 4, 0, 4, 4, 8,
-		4, 8, 4, 0, 4, 0, 4, 4, 8, 4, 8, 4,
-		8, 4, 8, 4, 0, 4, 0, 4, 0, 4, 0, 4,
-		8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 12, 12
-	}, {
-		0, 4, 0, 12, 0, 0, 4, 0, 12, 0, 0, 4,
-		0, 4, 0, 12, 0, 12, 0, 0, 4, 0, 4, 0,
-		4, 0, 4, 0, 12, 0, 12, 0, 12, 0, 12, 0,
-		4, 4, 4, 4, 12, 12, 12, 12, 0, 0, 8, 8
-	}
+  {
+    12, 0, 12, 8, 12, 12, 0, 12, 8, 12, 12, 0,
+    12, 0, 12, 8, 12, 8,  12, 12, 0, 12, 0, 12,
+    0, 12, 0, 12, 8, 12, 8, 12, 8, 12, 8, 12,
+    0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 4, 4
+  }, {
+    8, 12, 8, 4, 8, 8, 12, 8, 4, 8, 8, 12,
+    8, 12, 8, 4, 8, 4, 8, 8, 12, 8, 12, 8,
+    12, 8, 12, 8, 4, 8, 4, 8, 4, 8, 4, 8,
+    12, 12, 12, 12, 4, 4, 4, 4, 0, 0, 0, 0
+  }, {
+    4, 8, 4, 0, 4, 4, 8, 4, 0, 4, 4, 8,
+    4, 8, 4, 0, 4, 0, 4, 4, 8, 4, 8, 4,
+    8, 4, 8, 4, 0, 4, 0, 4, 0, 4, 0, 4,
+    8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 12, 12
+  }, {
+    0, 4, 0, 12, 0, 0, 4, 0, 12, 0, 0, 4,
+    0, 4, 0, 12, 0, 12, 0, 0, 4, 0, 4, 0,
+    4, 0, 4, 0, 12, 0, 12, 0, 12, 0, 12, 0,
+    4, 4, 4, 4, 12, 12, 12, 12, 0, 0, 8, 8
+  }
 };
 
 static const int DRAW_NUMBERS[25] = {
-	36, 37, 38, 43, 42, 41,
-	39, 20, 22, 24, 33, 31,
-	29, 26, 10, 11, 18, 16,
-	13, 5, 9, 6, 0, 4, 1
+  36, 37, 38, 43, 42, 41,
+  39, 20, 22, 24, 33, 31,
+  29, 26, 10, 11, 18, 16,
+  13, 5, 9, 6, 0, 4, 1
 };
 
 static const int DRAW_FRAMES[25][2] = {
-	{ 18, 24 }, { 19, 23 }, { 20, 22 }, { 24, 18 }, { 23, 19 }, { 22, 20 },
-	{ 21, 21 }, { 11, 17 }, { 12, 16 }, { 13, 15 }, { 17, 11 }, { 16, 12 },
-	{ 15, 13 }, { 14, 14 }, { 6, 10 }, { 7, 9 }, { 10, 6 }, { 9, 7 },
-	{ 8, 8 }, { 3, 5 }, { 5, 3 }, { 4, 4 }, { 0, 2 }, { 2, 0 },
-	{ 1, 1 }
+  { 18, 24 }, { 19, 23 }, { 20, 22 }, { 24, 18 }, { 23, 19 }, { 22, 20 },
+  { 21, 21 }, { 11, 17 }, { 12, 16 }, { 13, 15 }, { 17, 11 }, { 16, 12 },
+  { 15, 13 }, { 14, 14 }, { 6, 10 }, { 7, 9 }, { 10, 6 }, { 9, 7 },
+  { 8, 8 }, { 3, 5 }, { 5, 3 }, { 4, 4 }, { 0, 2 }, { 2, 0 },
+  { 1, 1 }
 };
 
 static const int COMBAT_FLOAT_X[8] = { -2, -1, 0, 1, 2, 1, 0, -1 };
@@ -701,115 +793,116 @@ static const int COMBAT_FLOAT_X[8] = { -2, -1, 0, 1, 2, 1, 0, -1 };
 static const int COMBAT_FLOAT_Y[8] = { -2, 0, 2, 0, -1, 0, 2, 0 };
 
 static const int MONSTER_EFFECT_FLAGS[15][8] = {
-	{ 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10A, 0x10B },
-	{ 0x10C, 0x10D, 0x10E, 0x10F, 0x0, 0x0, 0x0, 0x0 },
-	{ 0x110, 0x111, 0x112, 0x113, 0x0, 0x0, 0x0, 0x0 },
-	{ 0x114, 0x115, 0x116, 0x117, 0x0, 0x0, 0x0, 0x0 },
-	{ 0x200, 0x201, 0x202, 0x203, 0x0, 0x0, 0x0, 0x0 },
-	{ 0x300, 0x301, 0x302, 0x303, 0x400, 0x401, 0x402, 0x403 },
-	{ 0x500, 0x501, 0x502, 0x503, 0x0, 0x0, 0x0, 0x0 },
-	{ 0x600, 0x601, 0x602, 0x603, 0x0, 0x0, 0x0, 0x0 },
-	{ 0x604, 0x605, 0x606, 0x607, 0x608, 0x609, 0x60A, 0x60B },
-	{ 0x60C, 0x60D, 0x60E, 0x60F, 0x0, 0x0, 0x0, 0x0 },
-	{ 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100 },
-	{ 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101 },
-	{ 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102 },
-	{ 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103 },
-	{ 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108 }
+  { 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10A, 0x10B },
+  { 0x10C, 0x10D, 0x10E, 0x10F, 0x0, 0x0, 0x0, 0x0 },
+  { 0x110, 0x111, 0x112, 0x113, 0x0, 0x0, 0x0, 0x0 },
+  { 0x114, 0x115, 0x116, 0x117, 0x0, 0x0, 0x0, 0x0 },
+  { 0x200, 0x201, 0x202, 0x203, 0x0, 0x0, 0x0, 0x0 },
+  { 0x300, 0x301, 0x302, 0x303, 0x400, 0x401, 0x402, 0x403 },
+  { 0x500, 0x501, 0x502, 0x503, 0x0, 0x0, 0x0, 0x0 },
+  { 0x600, 0x601, 0x602, 0x603, 0x0, 0x0, 0x0, 0x0 },
+  { 0x604, 0x605, 0x606, 0x607, 0x608, 0x609, 0x60A, 0x60B },
+  { 0x60C, 0x60D, 0x60E, 0x60F, 0x0, 0x0, 0x0, 0x0 },
+  { 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100 },
+  { 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101 },
+  { 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102 },
+  { 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103 },
+  { 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108 }
 };
 
 static const int SPELLS_ALLOWED[3][40] = {
-	{
-		0, 1, 2, 3, 5, 6, 7, 8, 9, 10,
-		12, 14, 16, 23, 26, 27, 28, 30, 31, 32,
-		33, 42, 46, 48, 49, 50, 52, 55, 56, 58,
-		59, 62, 64, 65, 67, 68, 71, 73, 74, 76
-	}, {
-		1, 4, 11, 13, 15, 17, 18, 19, 20, 21,
-		22, 24, 25, 29, 34, 35, 36, 37, 38, 39,
-		40, 41, 42, 43, 44, 45, 47, 51, 53, 54,
-		57, 60, 61, 63, 66, 69, 70, 72, 75, 76
-	}, {
-		0, 1, 2, 3, 4, 5, 7, 9, 10, 20,
-		25, 26, 27, 28, 30, 31, 34, 38, 40, 41,
-		42, 43, 44, 45, 49, 50, 52, 53, 55, 59,
-		60, 61, 62, 67, 68, 72, 73, 74, 75, 76
-	}
+  {
+    0,  1,  2,  3,  5,  6, 7, 8, 9, 10,
+    12, 14, 16, 23, 26, 27, 28, 30, 31, 32,
+    33, 42, 46, 48, 49, 50, 52, 55, 56, 58,
+    59, 62, 64, 65, 67, 68, 71, 73, 74, 76
+  }, {
+    1, 4, 11, 13, 15, 17, 18, 19, 20, 21,
+    22, 24, 25, 29, 34, 35, 36, 37, 38, 39,
+    40, 41, 42, 43, 44, 45, 47, 51, 53, 54,
+    57, 60, 61, 63, 66, 69, 70, 72, 75, 76
+  }, {
+    0, 1, 2, 3, 4, 5, 7, 9, 10, 20,
+    25, 26, 27, 28, 30, 31, 34, 38, 40, 41,
+    42, 43, 44, 45, 49, 50, 52, 53, 55, 59,
+    60, 61, 62, 67, 68, 72, 73, 74, 75, 76
+  }
 };
 
 static const int BASE_HP_BY_CLASS[10] = { 10, 8, 7, 5, 4, 8, 7, 12, 6, 9 };
 
-static const int AGE_RANGES[10] = { 1, 6, 11, 18, 36, 51, 76, 101, 201, 0xffff };
+static const int AGE_RANGES[10] = 
+  { 1, 6, 11, 18, 36, 51, 76, 101, 201, 0xffff };
 
 static const int AGE_RANGES_ADJUST[2][10] = {
-	{ -250, -50, -20, -10, 0, -2, -5, -10, -20, -50 },
-	{ -250, -50, -20, -10, 0, 2, 5, 10, 20, 50 }
+  { -250, -50, -20, -10, 0, -2, -5, -10, -20, -50 },
+  { -250, -50, -20, -10, 0, 2, 5, 10, 20, 50 }
 };
 
 static const int STAT_VALUES[24] = {
-	3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 25, 30, 35, 40,
-	50, 75, 100, 125, 150, 175, 200, 225, 250, 65535
+  3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 25, 30, 35, 40,
+  50, 75, 100, 125, 150, 175, 200, 225, 250, 65535
 };
 
 static const int STAT_BONUSES[24] = {
-	-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6,
-	7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20
+  -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6,
+  7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20
 };
 
 static const int ELEMENTAL_CATEGORIES[6] = { 8, 15, 20, 25, 33, 36 };
 
-static const int ATTRIBUTE_CATEGORIES[10] = {
-	9, 17, 25, 33, 39, 45, 50, 56, 61, 72 };
+static const int ATTRIBUTE_CATEGORIES[10] = 
+  { 9, 17, 25, 33, 39, 45, 50, 56, 61, 72 };
 
 static const int ATTRIBUTE_BONUSES[72] = {
-	2, 3, 5, 8, 12, 17, 23, 30, 38, 47,	// Might bonus
-	2, 3, 5, 8, 12, 17, 23, 30,			// INT bonus
-	2, 3, 5, 8, 12, 17, 23, 30,			// PER bonus
-	2, 3, 5, 8, 12, 17, 23, 30,			// SPD bonus
-	3, 5, 10, 15, 20, 30,				// ACC bonus
-	5, 10, 15, 20, 25, 30,				// LUC bonus
-	4, 6, 10, 20, 50,					// HP bonus
-	4, 8, 12, 16, 20, 25,				// SP bonus
-	2, 4, 6, 10, 16,					// AC bonus
-	4, 6, 8, 10, 12, 14, 16, 18, 20, 25	// Thievery bonus
+  2, 3, 5, 8, 12, 17, 23, 30, 38, 47, // Might bonus
+  2, 3, 5, 8, 12, 17, 23, 30,         // INT bonus
+  2, 3, 5, 8, 12, 17, 23, 30,         // PER bonus
+  2, 3, 5, 8, 12, 17, 23, 30,         // SPD bonus
+  3, 5, 10, 15, 20, 30,               // ACC bonus
+  5, 10, 15, 20, 25, 30,              // LUC bonus
+  4, 6, 10, 20, 50,                   // HP bonus
+  4, 8, 12, 16, 20, 25,               // SP bonus
+  2, 4, 6, 10, 16,                    // AC bonus
+  4, 6, 8, 10, 12, 14, 16, 18, 20, 25 // Thievery bonus
 };
 
 static const int ELEMENTAL_RESISTENCES[37] = {
-	0, 5, 7, 9, 12, 15, 20, 25, 30, 5, 7, 9, 12, 15, 20, 25,
-	5, 10, 15, 20, 25, 10, 15, 20, 25, 40, 5, 7, 9, 11, 13, 15, 20, 25,
-	5, 10, 20
+  0, 5, 7, 9, 12, 15, 20, 25, 30, 5, 7, 9, 12, 15, 20, 25,
+  5, 10, 15, 20, 25, 10, 15, 20, 25, 40, 5, 7, 9, 11, 13, 15, 20, 25,
+  5, 10, 20
 };
 
 static const int ELEMENTAL_DAMAGE[37] = {
-	0, 2, 3, 4, 5, 10, 15, 20, 30, 2, 3, 4, 5, 10, 15, 20, 2, 4, 5, 10, 20,
-	2, 4, 8, 16, 32, 2, 3, 4, 5, 10, 15, 20, 30, 5, 10, 25
+  0, 2, 3, 4, 5, 10, 15, 20, 30, 2, 3, 4, 5, 10, 15, 20, 2, 4, 5, 10, 20,
+  2, 4, 8, 16, 32, 2, 3, 4, 5, 10, 15, 20, 30, 5, 10, 25
 };
 
 static const int WEAPON_DAMAGE_BASE[35] = {
-	0, 3, 2, 3, 2, 2, 4, 1, 2, 4, 2, 3,
-	2, 2, 1, 1, 1, 1, 4, 4, 3, 2, 4, 2,
-	2, 2, 5, 3, 3, 3, 3, 5, 4, 2, 6
+  0, 3, 2, 3, 2, 2, 4, 1, 2, 4, 2, 3,
+  2, 2, 1, 1, 1, 1, 4, 4, 3, 2, 4, 2,
+  2, 2, 5, 3, 3, 3, 3, 5, 4, 2, 6
 };
 
 static const int WEAPON_DAMAGE_MULTIPLIER[35] = {
-	0, 3, 3, 4, 5, 4, 2, 3, 3, 3, 3, 3,
-	2, 4, 10, 6, 8, 9, 4, 3, 6, 8, 5, 6,
-	4, 5, 3, 5, 6, 7, 2, 2, 2, 2, 4
+  0, 3, 3, 4, 5, 4, 2, 3, 3, 3, 3, 3,
+  2, 4, 10, 6, 8, 9, 4, 3, 6, 8, 5, 6,
+  4, 5, 3, 5, 6, 7, 2, 2, 2, 2, 4
 };
 
 static const int METAL_DAMAGE[22] = {
-	-3, -6, -4, -2, 2, 4, 6, 8, 10, 0, 1,
-	1, 2, 2, 3, 4, 5, 12, 15, 20, 30, 50
+  -3, -6, -4, -2, 2, 4, 6, 8, 10, 0, 1,
+  1, 2, 2, 3, 4, 5, 12, 15, 20, 30, 50
 };
 
 static const int METAL_DAMAGE_PERCENT[22] = {
-	253, 252, 3, 2, 1, 2, 3, 4, 6, 0, 1,
-	1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10
+  253, 252, 3, 2, 1, 2, 3, 4, 6, 0, 1,
+  1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10
 };
 
 static const int METAL_LAC[22] = {
-	-3, 0, -2, -1, 1, 2, 4, 6, 8, 0, 1,
-	1, 2, 2, 3, 4, 5, 10, 12, 14, 16, 20
+  -3, 0, -2, -1, 1, 2, 4, 6, 8, 0, 1,
+  1, 2, 2, 3, 4, 5, 10, 12, 14, 16, 20
 };
 
 static const int ARMOR_STRENGTHS[14] = { 0, 2, 4, 5, 6, 7, 8, 10, 4, 2, 1, 1, 1, 1 };
@@ -817,884 +910,964 @@ static const int ARMOR_STRENGTHS[14] = { 0, 2, 4, 5, 6, 7, 8, 10, 4, 2, 1, 1, 1,
 static const int MAKE_ITEM_ARR1[6] = { 0, 8, 15, 20, 25, 33 };
 
 static const int MAKE_ITEM_ARR2[6][7][2] = {
-	{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
-	{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 7 }, { 7, 7 } },
-	{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 5 }, { 5, 5 } },
-	{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
-	{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
-	{ { 0, 0 }, { 1, 1 }, { 1, 1 }, { 1, 2 }, { 2, 2 }, { 2, 3 }, { 3, 3 } }
+  { { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
+  { { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 7 }, { 7, 7 } },
+  { { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 5 }, { 5, 5 } },
+  { { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
+  { { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
+  { { 0, 0 }, { 1, 1 }, { 1, 1 }, { 1, 2 }, { 2, 2 }, { 2, 3 }, { 3, 3 } }
 };
 
 static const int MAKE_ITEM_ARR3[10][7][2] = {
-	{ { 0, 0 }, { 1, 4 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 10 }, { 10, 10 } },
-	{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
-	{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
-	{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
-	{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 6 }, { 6, 6 } },
-	{ { 0, 0 }, { 1, 2 }, { 2, 3 }, { 3, 4 }, { 4, 5 }, { 5, 6 }, { 6, 6 } },
-	{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
-	{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 6 }, { 6, 6 } },
-	{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
-	{ { 0, 0 }, { 1, 2 }, { 1, 4 }, { 3, 6 }, { 5, 8 }, { 7, 10 }, { 10, 10 } }
+  { { 0, 0 }, { 1, 4 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 10 }, { 10, 10 } },
+  { { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 },  { 8,  8  } },
+  { { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 },  { 8,  8  } },
+  { { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 },  { 8,  8  } },
+  { { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 6 },  { 6,  6  } },
+  { { 0, 0 }, { 1, 2 }, { 2, 3 }, { 3, 4 }, { 4, 5 }, { 5, 6 },  { 6,  6  } },
+  { { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 },  { 5,  5  } },
+  { { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 6 },  { 6,  6  } },
+  { { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 },  { 5,  5  } },
+  { { 0, 0 }, { 1, 2 }, { 1, 4 }, { 3, 6 }, { 5, 8 }, { 7, 10 }, { 10, 10 } }
 };
 
 static const int MAKE_ITEM_ARR4[2][7][2] = {
-	{ { 0, 0 }, { 1, 4 }, { 3, 7 }, { 4, 8 }, { 5, 9 }, { 8, 9 }, { 9, 9 } },
-	{ { 0, 0 }, { 1, 4 }, { 2, 6 }, { 4, 7 }, { 6, 10 }, { 9, 13 }, { 13, 13 } }
+  { { 0, 0 }, { 1, 4 }, { 3, 7 }, { 4, 8 }, { 5, 9 },  { 8, 9 },  { 9,  9  } },
+  { { 0, 0 }, { 1, 4 }, { 2, 6 }, { 4, 7 }, { 6, 10 }, { 9, 13 }, { 13, 13 } }
 };
 
 static const int MAKE_ITEM_ARR5[8][2] = {
-	{ 0, 0 }, { 1, 15 }, { 16, 30 }, { 31, 40 }, { 41, 50 },
-	{ 51, 60 }, { 61, 73 }, { 61, 73 }
+  { 0, 0 },   { 1,  15 }, { 16, 30 }, { 31, 40 }, { 41, 50 },
+  { 51, 60 }, { 61, 73 }, { 61, 73 }
 };
 
 static const int OUTDOOR_DRAWSTRUCT_INDEXES[44] = {
-	37, 38, 39, 40, 41, 44, 42, 43, 47, 45, 46,
-	48, 49, 52, 50, 51, 66, 67, 68, 69, 70, 71,
-	72, 75, 73, 74, 87, 88, 89, 90, 91, 94, 92,
-	93, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
+  37, 38, 39, 40, 41, 44, 42, 43, 47, 45, 46,
+  48, 49, 52, 50, 51, 66, 67, 68, 69, 70, 71,
+  72, 75, 73, 74, 87, 88, 89, 90, 91, 94, 92,
+  93, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
 };
 
 static const int TOWN_MAXES[2][11] = {
-	{ 23, 13, 32, 16, 26, 16, 16, 16, 16, 16, 16 },
-	{ 26, 19, 48, 27, 26, 37, 16, 16, 16, 16, 16 }
+  { 23, 13, 32, 16, 26, 16, 16, 16, 16, 16, 16 },
+  { 26, 19, 48, 27, 26, 37, 16, 16, 16, 16, 16 }
 };
 
-static const char *const TOWN_ACTION_MUSIC[2][7] = {
-	{ "bank.m", "smith.m", "guild.m", "tavern.m",
-	"temple.m", "grounds.m", "endgame.m" },
-	{ "bank.m", "sf09.m", "guild.m", "tavern.m",
-	"temple.m", "smith.m", "endgame.m" }
+static const char* const TOWN_ACTION_MUSIC[2][7] = {
+  { "bank.m", "smith.m", "guild.m", "tavern.m",
+  "temple.m", "grounds.m", "endgame.m" },
+  { "bank.m", "sf09.m", "guild.m", "tavern.m",
+  "temple.m", "smith.m", "endgame.m" }
 };
 
-static const char *const TOWN_ACTION_SHAPES[7] = {
-	"bnkr", "blck", "gild", "tvrn", "tmpl", "trng", "eface08"
+static const char* const TOWN_ACTION_SHAPES[7] = {
+  "bnkr", "blck", "gild", "tvrn", "tmpl", "trng", "eface08"
 };
 
 static const int TOWN_ACTION_FILES[2][7] = {
-	{ 3, 2, 4, 2, 4, 2, 1 }, { 5, 3, 7, 5, 4, 6, 1 }
-};
-
-static const char *const BANK_TEXT = "\r\x2\x3""c\v122\t013"
-	"\f37D\fdep\t040\f37W\fdith\t067ESC"
-	"\x1\t000\v000Bank of Xeen\v015\n"
-	"Bank\x3l\n"
-	"Gold\x3r\t000%s\x3l\n"
-	"Gems\x3r\t000%s\x3""c\n"
-	"\n"
-	"Party\x3l\n"
-	"Gold\x3r\t000%s\x3l\n"
-	"Gems\x3r\t000%s";
-
-static const char *const BLACKSMITH_TEXT = "\x1\r\x3""c\v000\t000"
-	"Store Options for\t039\v027%s\x3l\v046\n"
-	"\t011\f37B\fdrowse\n"
-	"\t000\v090Gold\x3r\t000%s"
-	"\x2\x3""c\v122\t040ESC\x1";
-
-static const char *const GUILD_NOT_MEMBER_TEXT =
-	"\n\nYou have to be a member to shop here.";
-
-static const char *const GUILD_TEXT = "\x3""c\v027\t039%s"
-	"\x3l\v046\n"
-	"\t012\f37B\fduy Spells\n"
-	"\t012\f37S\fdpell Info";
-
-static const char *const TAVERN_TEXT =
-	"\r\x3""c\v000\t000Tavern Options for\t039"
-	"\v027%s%s\x3l\t000"
-	"\v090Gold\x3r\t000%s\x2\x3""c\v122"
-	"\t021\f37S\fdign in\t060ESC\x1";
-
-static const char *const FOOD_AND_DRINK =
-	"\x3l\t017\v046\f37D\fdrink\n"
-	"\t017\f37F\fdood\n"
-	"\t017\f37T\fdip\n"
-	"\t017\f37R\fdumors";
-
-static const char *const GOOD_STUFF = "\n"
-	"\n"
-	"Good Stuff\n"
-	"\n"
-	"Hit a key!";
-
-static const char *const HAVE_A_DRINK = "\n\nHave a Drink\n\nHit a key!";
-
-static const char *const YOURE_DRUNK = "\n\nYou're Drunk\n\nHit a key!";
+  { 3, 2, 4, 2, 4, 2, 1 }, { 5, 3, 7, 5, 4, 6, 1 }
+};
+
+static const char* const BANK_TEXT =
+  "\r\x2\x3""c\v122\t013"
+  "\f37‚\fdª«\t040\f37‘\fd­\t067ESC"
+  "\x1\t000\v000 ­ª Šá¨­ \v015\n"
+  " ­ª\x3""l\n"
+  "‡®«\x3""r\t000%s\x3""l\n"
+  "€«¬§\x3""r\t000%s\x3""c\n"
+  "\n"
+  "Žâàï¤\x3""l\n"
+  "‡®«\x3""r\t000%s\x3""l\n"
+  "€«¬§\x3""r\t000%s";
+
+static const char* const BLACKSMITH_TEXT =
+  "\x1\r\x3""c\v000\t000"
+  "‹ ¢ª \t039\v027%s\x3""l\v046\n"
+  "\t011\f37‘\fd¬®âà¥âì\n"
+  "\t000\v090‡®«\x3""r\t000%s"
+  "\x2\x3""c\v122\t040ESC\x1";
+
+static const char* const GUILD_NOT_MEMBER_TEXT =
+  "\n‚ë ¤®«¦­ë ¡ëâì ç«¥­®¬ £¨«ì¤¨¨, çâ®¡ë ¯®ªã¯ âì § ª«¨­ ­¨ï.";
+
+static const char* const GUILD_TEXT =
+  "\x3""c\v027\t039%s"
+  "\x3""l\v046\n"
+  "\t012\f37Š\fd㯨âì\n"
+  "\t012\f37Ž\fd¯¨á ­¨ï";
+
+static const char* const TAVERN_TEXT =
+  "\r\x3""c\v000\t000’ ¢¥à­ \t039"
+  "\v027%s%s\x3""l\t000"
+  "\v090‡®«\x3""r\t000%s\x2\x3""c\v122"
+  "\t021\f37Ž\fdâ¤ëå\t060ESC\x1";
+
+static const char* const FOOD_AND_DRINK =
+  "\x3""l\t017\v046\f37‚\fd믨âì\n"
+  "\t017\f37…\fd¤ \n"
+  "\t017\f37—\fd ¥¢ë¥\n"
+  "\t017\f37‘\fd«ãå¨";
+
+static const char* const GOOD_STUFF =
+  "\n"
+  "\n"
+  "¥¤ãà­®\n"
+  "\n"
+  " ¦¬¨â¥ ª« ¢¨èã!";
+
+static const char* const HAVE_A_DRINK = "\n‘¯¥à¢  ¢ë¯¥©â¥\n\n ¦¬¨â¥ ª« ¢¨èã!";
+
+static const char* const YOURE_DRUNK = "\n\n‚ë ¯ìï­ë\n\n ¦¬¨â¥ ª« ¢¨èã!";
 
 static const int TAVERN_EXIT_LIST[2][6][5][2] = {
-	{
-		{ { 21, 17 }, { 0, 0 }, { 20, 3 }, { 0, 0 }, { 0, 0 } },
-		{ { 13, 4 }, { 0, 0 }, { 19, 9 }, { 0, 0 }, { 0, 0 } },
-		{ { 20, 10 }, { 12, 8 }, { 5, 26 }, { 3, 4 }, { 7, 5 } },
-		{ { 18, 4 }, { 0, 0 }, { 19, 16 }, { 0, 0 }, { 11, 12 } },
-		{ { 15, 21 }, { 0, 0 }, { 13, 21 }, { 0, 0 }, { 0, 0 } },
-		{ { 10, 8 }, { 0, 0 }, { 15, 12 }, { 0, 0 }, { 0, 0 } },
-	}, {
-		{ { 21, 17 }, { 0, 0 }, { 20, 3 }, { 0, 0 }, { 0, 0 } },
-		{ { 13, 4 }, { 0, 0 }, { 19, 9 }, { 0, 0 }, { 0, 0 } },
-		{ { 20, 10 }, { 12, 8 }, { 5, 26 }, { 3, 4 }, { 7, 5 } },
-		{ { 17, 24 }, { 14, 13 }, { 0, 0 }, { 0, 0 }, { 9, 4 } },
-		{ { 15, 21 }, { 0, 0 }, { 13, 21 }, { 0, 0 }, { 0, 0 } },
-		{ { 10, 8 }, { 0, 0 }, { 15, 12 }, { 0, 0 }, { 0, 0 } }
-	}
-};
-
-static const char *const TEMPLE_TEXT =
-	"\r\x3""c\v000\t000Temple Options for"
-	"\t039\v027%s\x3l\t000\v046"
-	"\f37H\fdeal\x3r\t000%u\x3l\n"
-	"\f37D\fdonation\x3r\t000%u\x3l\n"
-	"\f37U\fdnCurse\x3r\t000%s"
-	"\x3l\t000\v090Gold\x3r\t000%s"
-	"\x2\x3""c\v122\t040ESC\x1";
-
-static const char *const EXPERIENCE_FOR_LEVEL =
-	"%s needs %u experience for level %u.";
-
-static const char *const TRAINING_LEARNED_ALL = "%s has learned all we can teach!";
-
-static const char *const ELIGIBLE_FOR_LEVEL = "%s is eligible for level %u.\x3l\n"
-	"\v081Cost\x3r\t000%u";
-
-static const char *const TRAINING_TEXT =
-	"\r\x3""cTraining Options\n"
-	"\n"
-	"%s\x3l\v090\t000Gold\x3r\t000%s\x2\x3""c\v122\t021"
-	"\f37T\fdrain\t060ESC\x1";
-
-static const char *const GOLD_GEMS =
-	"\x3""c\v000\t000%s\x3l\n"
-	"\n"
-	"Gold\x3r\t000%s\x3l\n"
-	"Gems\x3r\t000%s\x2\x3""c\v096\t013G\f37o\fdld\t040G\f37e\fdms\t067ESC\x1";
-
-static const char *const GOLD_GEMS_2 =
-	"\x3""c\v000\t000%s\x3l\n"
-	"\n"
-	"\x4""077Gold\x3r\t000%s\x3l\n"
-	"\x4""077Gems\x3r\t000%s\x3l\t000\v051\x4""077\n"
-	"\x4""077";
-
-static const char *const DEPOSIT_WITHDRAWL[2] = { "Deposit", "Withdrawl" };
-
-static const char *const NOT_ENOUGH_X_IN_THE_Y =
-	"\x3""c\v012Not enough %s in the %s!\x3l";
-
-static const char *const NO_X_IN_THE_Y = "\x3""c\v012No %s in the %s!\x3l";
-
-static const char *const STAT_NAMES[16] = {
-	"Might", "Intellect", "Personality", "Endurance", "Speed",
-	"Accuracy", "Luck", "Age", "Level", "Armor Class", "Hit Points",
-	"Spell Points", "Resistances", "Skills", "Awards", "Experience"
-};
-
-static const char *const CONSUMABLE_NAMES[4] = { "Gold", "Gems", "Food", "Condition" };
-
-static const char *const WHERE_NAMES[2] = { "Party", "Bank" };
-
-static const char *const AMOUNT = "\x3""c\t000\v051Amount\x3l\n";
-
-static const char *const FOOD_PACKS_FULL = "\v007Your food packs are already full!";
-
-static const char *const BUY_SPELLS =
-	"\x3""c\v027\t039%s\x3l\v046\n"
-	"\t012\f37B\fduy Spells\n"
-	"\t012\f37S\fdpell Info";
-
-static const char *const GUILD_OPTIONS =
-	"\r\f00\x3""c\v000\t000Guild Options for%s"
-	"\x3l\t000\v090Gold"
-	"\x3r\t000%s\x2\x3""c\v122\t040ESC\x1";
+  {
+    { { 21, 17 }, { 0,  0 }, { 20, 3  }, { 0, 0 }, { 0,  0  } },
+    { { 13, 4  }, { 0,  0 }, { 19, 9  }, { 0, 0 }, { 0,  0  } },
+    { { 20, 10 }, { 12, 8 }, { 5,  26 }, { 3, 4 }, { 7,  5  } },
+    { { 18, 4  }, { 0,  0 }, { 19, 16 }, { 0, 0 }, { 11, 12 } },
+    { { 15, 21 }, { 0,  0 }, { 13, 21 }, { 0, 0 }, { 0,  0  } },
+    { { 10, 8  }, { 0,  0 }, { 15, 12 }, { 0, 0 }, { 0,  0  } },
+  }, {
+    { { 21, 17 }, { 0,  0  }, { 20, 3  }, { 0, 0 }, { 0, 0 } },
+    { { 13, 4  }, { 0,  0  }, { 19, 9  }, { 0, 0 }, { 0, 0 } },
+    { { 20, 10 }, { 12, 8  }, { 5,  26 }, { 3, 4 }, { 7, 5 } },
+    { { 17, 24 }, { 14, 13 }, { 0,  0  }, { 0, 0 }, { 9, 4 } },
+    { { 15, 21 }, { 0,  0  }, { 13, 21 }, { 0, 0 }, { 0, 0 } },
+    { { 10, 8  }, { 0,  0  }, { 15, 12 }, { 0, 0 }, { 0, 0 } }
+  }
+};
+
+static const char* const TEMPLE_TEXT =
+  "\r\x3""c\v000\t000•à ¬"
+  "\t039\v027%s\x3""l\t000\v046"
+  "\f37‹\fd¥ç¨âì\x3""r\t000%lu\x3""l\n"
+  "\f37„\fd à\x3""r\t000%lu\x3""l\n"
+  "\f37‘\fd­à®ª«\x3""r\t000%s"
+  "\x3""l\t000\v090‡®«\x3""r\t000%s"
+  "\x2\x3""c\v122\t040ESC\x1";
+
+static const char* const EXPERIENCE_FOR_LEVEL =
+  "%s\nã¦­® %lu ®çª®¢ ®¯ëâ  ¤«ï ã஢­ï %u.";
+
+static const char* const TRAINING_LEARNED_ALL =
+  "%s\n‚ë 㦥 §­ ¥â¥ ¢áñ, ç¥¬ã ¬ë ¬®¦¥¬ ¢ á ­ ãç¨âì!";
+
+static const char* const ELIGIBLE_FOR_LEVEL =
+  "%s ¬®¦¥â ®¡ãç âìáï ¤® ã஢­ï %d.\x3""l\n"
+  "\v081–¥­ \x3""r\t000%lu";
+
+static const char* const TRAINING_TEXT =
+  "\r\x3""cŽ¡ã祭¨¥\n"
+  "\n"
+  "%s\x3""l\v090\t000‡®«\x3""r\t000%s\x2\x3""c\v122\t021"
+  "\f37Ž\fd¡ã祭¨¥\t060ESC\x1";
+
+static const char* const GOLD_GEMS =
+  "\x3""c\v000\t000%s\x3""l\n"
+  "\n"
+  "‡®«\x3""r\t000%s\x3""l\n"
+  "€«¬§\x3""r\t000%s\x2\x3""c\v096\t007\f37€\fd«¬§\t035\f37‡\fd®«\t067ESC\x1";
+
+static const char* const GOLD_GEMS_2 =
+  "\t000\v000\x3""c%s\x3""l\n"
+  "\n"
+  "\x4""077‡®«\x3""r\t000%s\x3""l\n"
+  "\x4""077€«¬§\x3""r\t000%s\x3""l\t000\v051\x4""077\n"
+  "\x4""077";
+
+static const char* const DEPOSIT_WITHDRAWL[2] = 
+  { "®«®¦¨âì ­  áçñâ", "‘­ïâì á® áçñâ " };
+
+static const char* const NOT_ENOUGH_X_IN_THE_Y =
+  "\x3""c\v012¥¤®áâ â®ç­® %s %s!\x3""l";
+
+static const char* const NO_X_IN_THE_Y = "\x3""c\v012¥â %s %s!\x3""l";
+
+static const char* const STAT_NAMES[16] = {
+  "‘¨« ", "ˆ­â¥««¥ªâ", "‘¨«  ¤ãå ", "‘«®¦¥­¨¥", "‘ª®à®áâì", 
+  "Œ¥âª®áâì", "“¤ ç ", "‚®§à áâ", "“஢¥­ì", "Š« áá § é¨âë", "‡¤®à®¢ì¥",
+  "Žçª¨ ¬ £¨¨", "“á⮩稢®áâ¨", " ¢ëª¨", " £à ¤ë", "ޝëâ"
+};
+
+static const char* const CONSUMABLE_NAMES[4] = 
+  { "‡®«®â®", "€«¬ §ë", "¨é ", "‘®áâ®ï­¨¥" };
+
+static const char* const WHERE_NAMES[2] = { "ã ®âà鸞", "¢ ¡ ­ª¥" };
+
+static const char* const AMOUNT = "\x3""c\t000\v051‘ª®«ìª®\x3""l\n";
+
+static const char* const FOOD_PACKS_FULL = "\v007‚ è¨ à ª¨ 㦥 ­ ¯®«­¥­ë!";
+
+static const char* const BUY_SPELLS =
+  "\x3""c\v027\t039%s\x3""l\v046\n"
+  "\t012\f37Š\fd㯨âì\n"
+  "\t012\f37Ž\fd¯¨á ­¨ï";
+
+static const char* const GUILD_OPTIONS =
+  "\x1\r\f00\x3""c\v000\t000ƒ¨«ì¤¨ï\n"
+  "%s\x3""l\t000\v090‡®«"
+  "\x3""r\t000%s\x2\x3""c\v122\t040ESC\x1";
 
 static const int MISC_SPELL_INDEX[74] = {
-	NO_SPELL, MS_Light, MS_Awaken, MS_MagicArrow,
-	MS_FirstAid, MS_FlyingFist, MS_EnergyBlast, MS_Sleep,
-	MS_Revitalize, MS_CureWounds, MS_Sparks, MS_Shrapmetal,
-	MS_InsectSpray, MS_ToxicCloud, MS_ProtFromElements, MS_Pain,
-	MS_Jump, MS_BeastMaster, MS_Clairvoyance, MS_TurnUndead,
-	MS_Levitate, MS_WizardEye, MS_Bless, MS_IdentifyMonster,
-	MS_LightningBolt, MS_HolyBonus, MS_PowerCure, MS_NaturesCure,
-	MS_LloydsBeacon, MS_PowerShield, MS_Heroism, MS_Hynotize,
-	MS_WalkOnWater, MS_FrostBite, MS_DetectMonster, MS_Fireball,
-	MS_ColdRay, MS_CurePoison, MS_AcidSpray, MS_TimeDistortion,
-	MS_DragonSleep, MS_CureDisease, MS_Teleport, MS_FingerOfDeath,
-	MS_CureParalysis, MS_GolemStopper, MS_PoisonVolley, MS_DeadlySwarm,
-	MS_SuperShelter, MS_DayOfProtection, MS_DayOfSorcery, MS_CreateFood,
-	MS_FieryFlail, MS_RechargeItem, MS_FantasticFreeze, MS_TownPortal,
-	MS_StoneToFlesh, MS_RaiseDead, MS_Etheralize, MS_DancingSword,
-	MS_MoonRay, MS_MassDistortion, MS_PrismaticLight, MS_EnchantItem,
-	MS_Incinerate, MS_HolyWord, MS_Resurrection, MS_ElementalStorm,
-	MS_MegaVolts, MS_Inferno, MS_SunRay, MS_Implosion,
-	MS_StarBurst, MS_DivineIntervention
+  NO_SPELL, MS_Light, MS_Awaken, MS_MagicArrow,
+  MS_FirstAid, MS_FlyingFist, MS_EnergyBlast, MS_Sleep,
+  MS_Revitalize, MS_CureWounds, MS_Sparks, MS_Shrapmetal,
+  MS_InsectSpray, MS_ToxicCloud, MS_ProtFromElements, MS_Pain,
+  MS_Jump, MS_BeastMaster, MS_Clairvoyance, MS_TurnUndead,
+  MS_Levitate, MS_WizardEye, MS_Bless, MS_IdentifyMonster,
+  MS_LightningBolt, MS_HolyBonus, MS_PowerCure, MS_NaturesCure,
+  MS_LloydsBeacon, MS_PowerShield, MS_Heroism, MS_Hynotize,
+  MS_WalkOnWater, MS_FrostBite, MS_DetectMonster, MS_Fireball,
+  MS_ColdRay, MS_CurePoison, MS_AcidSpray, MS_TimeDistortion,
+  MS_DragonSleep, MS_CureDisease, MS_Teleport, MS_FingerOfDeath,
+  MS_CureParalysis, MS_GolemStopper, MS_PoisonVolley, MS_DeadlySwarm,
+  MS_SuperShelter, MS_DayOfProtection, MS_DayOfSorcery, MS_CreateFood,
+  MS_FieryFlail, MS_RechargeItem, MS_FantasticFreeze, MS_TownPortal,
+  MS_StoneToFlesh, MS_RaiseDead, MS_Etheralize, MS_DancingSword,
+  MS_MoonRay, MS_MassDistortion, MS_PrismaticLight, MS_EnchantItem,
+  MS_Incinerate, MS_HolyWord, MS_Resurrection, MS_ElementalStorm,
+  MS_MegaVolts, MS_Inferno, MS_SunRay, MS_Implosion,
+  MS_StarBurst, MS_DivineIntervention
 };
 
 static const int SPELL_COSTS[77] = {
-	8, 1, 5, -2, 5, -2, 20, 10, 12, 8, 3,
-	- 3, 75, 40, 12, 6, 200, 10, 100, 30, -1, 30,
-	15, 25, 10, -2, 1, 2, 7, 20, -2, -2, 100,
-	15, 5, 100, 35, 75, 5, 20, 4, 5, 1, -2,
-	6, 2, 75, 40, 60, 6, 4, 25, -2, -2, 60,
-	- 1, 50, 15, 125, 2, -1, 3, -1, 200, 35, 150,
-	15, 5, 4, 10, 8, 30, 4, 5, 7, 5, 0
+  8, 1, 5, -2, 5, -2, 20, 10, 12, 8, 3,
+  -3, 75, 40, 12, 6, 200, 10, 100, 30, -1, 30,
+  15, 25, 10, -2, 1, 2, 7, 20, -2, -2, 100,
+  15, 5, 100, 35, 75, 5, 20, 4, 5, 1, -2,
+  6, 2, 75, 40, 60, 6, 4, 25, -2, -2, 60,
+  -1, 50, 15, 125, 2, -1, 3, -1, 200, 35, 150,
+  15, 5, 4, 10, 8, 30, 4, 5, 7, 5, 0
 };
 
 static const int DARK_SPELL_RANGES[12][2] = {
-	{ 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 },
-	{ 0, 17 }, { 14, 34 }, { 26, 37 }, { 29, 39 },
-	{ 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 }
+  { 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 },
+  { 0, 17 }, { 14, 34 }, { 26, 37 }, { 29, 39 },
+  { 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 }
 };
 
 static const int SWORDS_SPELL_RANGES[12][2] = {
-	{ 0, 20 },{ 16, 35 },{ 27, 39 },{ 29, 39 },
-	{ 0, 17 },{ 14, 34 },{ 26, 39 },{ 29, 39 },
-	{ 0, 20 },{ 16, 35 },{ 27, 39 },{ 29, 39 }
+  { 0, 20 },{ 16, 35 },{ 27, 39 },{ 29, 39 },
+  { 0, 17 },{ 14, 34 },{ 26, 39 },{ 29, 39 },
+  { 0, 20 },{ 16, 35 },{ 27, 39 },{ 29, 39 }
 };
 
 static const int CLOUDS_GUILD_SPELLS[5][20] = {
-	{
-		1, 10, 20, 26, 27, 38, 40, 42, 45, 50,
-		55, 59, 60, 61, 62, 68, 72, 75, 77, 77
-	}, {
-		3, 4, 5, 14, 15, 25, 30, 31, 34, 41,
-		49, 51, 53, 67, 73, 75, -1, -1, -1, -1
-	}, {
-		4, 8, 9, 12, 13, 22, 23, 24, 28, 34,
-		41, 44, 52, 70, 73, 74, -1, -1, -1, -1
-	}, {
-		6, 7, 9, 11, 12, 13, 17, 21, 22, 24,
-		29, 36, 56, 58, 64, 71, -1, -1, -1, -1
-	}, {
-		6, 7, 9, 11, 12, 13, 18, 21, 29, 32,
-		36, 37, 46, 51, 56, 58, 69, -1, -1, -1
-	}
+  {
+    1, 10, 20, 26, 27, 38, 40, 42, 45, 50,
+    55, 59, 60, 61, 62, 68, 72, 75, 77, 77
+  }, {
+    3, 4, 5, 14, 15, 25, 30, 31, 34, 41,
+    49, 51, 53, 67, 73, 75, -1, -1, -1, -1
+  }, {
+    4, 8, 9, 12, 13, 22, 23, 24, 28, 34,
+    41, 44, 52, 70, 73, 74, -1, -1, -1, -1
+  }, {
+    6, 7, 9, 11, 12, 13, 17, 21, 22, 24,
+    29, 36, 56, 58, 64, 71, -1, -1, -1, -1
+  }, {
+    6, 7, 9, 11, 12, 13, 18, 21, 29, 32,
+    36, 37, 46, 51, 56, 58, 69, -1, -1, -1
+  }
 };
 
 static const int DARK_SPELL_OFFSETS[3][39] = {
-	{
-		42, 1, 26, 59, 27, 10, 50, 68, 55, 62, 67, 73, 2,
-		5, 3, 31, 30, 52, 49, 28, 74, 0, 9, 7, 14, 8,
-		33, 6, 23, 71, 64, 56, 48, 46, 12, 32, 58, 65, 16
-	}, {
-		42, 1, 45, 61, 72, 40, 20, 60, 38, 41, 75, 34, 4,
-		43, 25, 53, 44, 15, 70, 17, 24, 69, 22, 66, 57, 11,
-		29, 39, 51, 21, 19, 36, 47, 13, 54, 37, 18, 35, 63
-	}, {
-		0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
-		13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-		26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38
-	}
+  {
+    42, 1, 26, 59, 27, 10, 50, 68, 55, 62, 67, 73, 2,
+    5, 3, 31, 30, 52, 49, 28, 74, 0, 9, 7, 14, 8,
+    33, 6, 23, 71, 64, 56, 48, 46, 12, 32, 58, 65, 16
+  }, {
+    42, 1, 45, 61, 72, 40, 20, 60, 38, 41, 75, 34, 4,
+    43, 25, 53, 44, 15, 70, 17, 24, 69, 22, 66, 57, 11,
+    29, 39, 51, 21, 19, 36, 47, 13, 54, 37, 18, 35, 63
+  }, {
+    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+    13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+    26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38
+  }
 };
 
 static const int SPELL_GEM_COST[77] = {
-	0, 0, 2, 1, 2, 4, 5, 0, 0, 0, 0, 10, 10, 10, 0, 0, 20, 4, 10, 20, 1, 10,
-	5, 5, 4, 2, 0, 0, 0, 10, 3, 1, 20, 4, 0, 20, 10, 10, 1, 10, 0, 0, 0, 2,
-	2, 0, 10, 10, 10, 0, 0, 10, 3, 2, 10, 1, 10, 10, 20, 0, 0, 1, 1, 20, 5, 20,
-	5, 0, 0, 0, 0, 5, 1, 2, 0, 2, 0
-};
-
-static const char *const NOT_A_SPELL_CASTER = "Not a spell caster...";
-
-static const char *const SPELLS_LEARNED_ALL = "You have learned all we\n"
-	"\t010can teach you.";
-
-static const char *const SPELLS_FOR = "\r\fd%s\x2\x3""c\t000\v002Spells for %s";
-
-static const char *const SPELL_LINES_0_TO_9 =
-	"\x2\x3l\v015\t0011\n2\n3\n4\n5\n6\n7\n8\n9\n0";
-
-static const char *const SPELLS_DIALOG_SPELLS = "\x3l\v015"
-	"\t010\f%2u%s\fd\x3l\n"
-	"\t010\f%2u%s\fd\x3l\n"
-	"\t010\f%2u%s\fd\x3l\n"
-	"\t010\f%2u%s\fd\x3l\n"
-	"\t010\f%2u%s\fd\x3l\n"
-	"\t010\f%2u%s\fd\x3l\n"
-	"\t010\f%2u%s\fd\x3l\n"
-	"\t010\f%2u%s\fd\x3l\n"
-	"\t010\f%2u%s\fd\x3l\n"
-	"\t010\f%2u%s\fd\x3l"
-	"\t004\v110%s - %u\x1";
-
-static const char *const SPELL_PTS = "Spell Pts";
-
-static const char *const GOLD = "Gold";
-
-static const char *const SPELL_INFO =
-	"\x3""c\f09%s\fd\x3l\n"
-	"\n"
-	"%s\x3""c\t000\v100Press a Key!";
-
-static const char *const SPELL_PURCHASE =
-	"\x3l\v000\t000\fd%s  Do you wish to purchase "
-	"\f09%s\fd for %u?";
-
-static const char *const MAP_TEXT =
-	"\x3""c\v000\t000%s\x3l\v139"
-	"\t000X = %d\x3r\t000Y = %d\x3""c\t000%s";
-
-static const char *const LIGHT_COUNT_TEXT = "\x3l\n\n\t024Light\x3r\t124%d";
-
-static const char *const FIRE_RESISTENCE_TEXT = "%c%sFire%s%u";
-
-static const char *const ELECRICITY_RESISTENCE_TEXT = "%c%sElectricity%s%u";
-
-static const char *const COLD_RESISTENCE_TEXT = "%c%sCold%s%u";
-
-static const char *const POISON_RESISTENCE_TEXT = "%c%sPoison/Acid%s%u";
-
-static const char *const CLAIRVOYANCE_TEXT = "%c%sClairvoyance%s";
-
-static const char *const LEVITATE_TEXT = "%c%sLevitate%s";
-
-static const char *const WALK_ON_WATER_TEXT = "%c%sWalk on Water";
-
-static const char *const GAME_INFORMATION =
-	"\r\x3""c\t000\v001\f37%s of Xeen\fd\n"
-	"Game Information\n"
-	"\n"
-	"Today is \f37%ssday\fd\n"
-	"\n"
-	"\t032Time\t072Day\t112Year\n"
-	"\t032\f37%d:%02d%c\t072%u\t112%u\fd%s";
-
-static const char *const WORLD_GAME_TEXT = "World";
-static const char *const DARKSIDE_GAME_TEXT = "Darkside";
-static const char *const CLOUDS_GAME_TEXT = "Clouds";
-static const char *const SWORDS_GAME_TEXT = "Swords";
-
-static const char *const WEEK_DAY_STRINGS[10] = {
-	"Ten", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"
-};
-
-static const char *const CHARACTER_DETAILS =
-	"\x3l\v041\t196%s\t000\v002%s : %s %s %s"
-	"\x3r\t053\v028\f%02u%u\fd\t103\f%02u%u\fd"
-	"\x3l\t131\f%02u%d\fd\t196\f15%u\fd\x3r"
-	"\t053\v051\f%02u%u\fd\t103\f%02u%u\fd"
-	"\x3l\t131\f%02u%u\fd\t196\f15%u\fd"
-	"\x3r\t053\v074\f%02u%u\fd\t103\f%02u%u\fd"
-	"\x3l\t131\f15%u\fd\t196\f15%u\fd"
-	"\x3r\t053\v097\f%02u%u\fd\t103\f%02u%u\fd"
-	"\x3l\t131\f15%u\fd\t196\f15%u day%c\fd"
-	"\x3r\t053\v120\f%02u%u\fd\t103\f%02u%u\fd"
-	"\x3l\t131\f15%u\fd\t196\f%02u%s\fd"
-	"\t230%s%s%s%s\fd";
-
-static const char *const PARTY_GOLD = "Party Gold";
-
-static const char *const PLUS_14 = "\f14+";
-
-static const char *const CHARACTER_TEMPLATE =
-	"\x1\f00\r\x3l\t029\v018Mgt\t080Acy\t131H.P.\t196Experience"
-	"\t029\v041Int\t080Lck\t131S.P.\t029\v064Per\t080Age"
-	"\t131Resis\t196Party Gems\t029\v087End\t080Lvl\t131Skills"
-	"\t196Party Food\t029\v110Spd\t080AC\t131Awrds\t196Condition\x3""c"
-	"\t290\v025\f37I\fdtem\t290\v057\f37Q"
-	"\fduick\t290\v089\f37E\fdxch\t290\v121Exit\x3l%s";
-
-static const char *const EXCHANGING_IN_COMBAT = "\x3""c\v007\t000Exchanging in combat is not allowed!";
-
-static const char *const CURRENT_MAXIMUM_RATING_TEXT = "\x2\x3""c%s\n"
-	"Current / Maximum\n"
-	"\x3r\t054%u\x3l\t058/ %u\n"
-	"\x3""cRating: %s";
-
-static const char *const CURRENT_MAXIMUM_TEXT = "\x2\x3""c%s\n"
-	"Current / Maximum\n"
-	"\x3r\t054%u\x3l\t058/ %u";
-
-static const char *const RATING_TEXT[24] = {
-	"Nonexistant", "Very Poor", "Poor", "Very Low", "Low", "Average", "Good",
-	"Very Good", "High", "Very High", "Great", "Super", "Amazing", "Incredible",
-	"Gigantic", "Fantastic", "Astoundig", "Astonishing", "Monumental", "Tremendous",
-	"Collosal", "Awesome", "Awe Inspiring", "Ultimate"
-};
-
-static const char *const AGE_TEXT = "\x2\x3""c%s\n"
-	"Current / Natural\n"
-	"\x3r\t057%u\x3l\t061/ %u\n"
-	"\x3""cBorn: %u / %u\x1";
-
-static const char *const LEVEL_TEXT =
-	"\x2\x3""c%s\n"
-	"Current / Maximum\n"
-	"\x3r\t054%u\x3l\t058/ %u\n"
-	"\x3""c%u Attack%s/Round\x1";
-
-static const char *const RESISTENCES_TEXT =
-	"\x2\x3""c%s\x3l\n"
-	"\t020Fire\t100%u\n"
-	"\t020Cold\t100%u\n"
-	"\t020Electricity\t100%u\n"
-	"\t020Poison\t100%u\n"
-	"\t020Energy\t100%u\n"
-	"\t020Magic\t100%u";
-
-static const char *const NONE = "\n\t020None";
-
-static const char *const EXPERIENCE_TEXT = "\x2\x3""c%s\x3l\n"
-	"\t010Current:\t070%u\n"
-	"\t010Next Level:\t070%s\x1";
-
-static const char *const ELIGIBLE = "\f12Eligible\fd";
-
-static const char *const IN_PARTY_IN_BANK =
-	"\x2\x3""cParty %s\n"
-	"%u on hand\n"
-	"%u in bank\x1\x3l";
-
-static const char *const FOOD_TEXT =
-	"\x2\x3""cParty %s\n"
-	"%u on hand\n"
-   "Enough for %u day%s\x3l";
-
-static const char *const EXCHANGE_WITH_WHOM = "\t010\v005Exchange with whom?";
-
-static const char *const QUICK_REF_LINE =
-	"\v%3d\t007%u)\t027%s\t110%c%c%c\x3r\t160\f%02u%u\fd"
-	"\x3l\t170\f%02u%d\fd\t208\f%02u%u\fd\t247\f"
-	"%02u%u\fd\t270\f%02u%c%c%c%c\fd";
-
-static const char *const QUICK_REFERENCE =
-	"\r\x3""cQuick Reference Chart\v012\x3l"
-	"\t007#\t027Name\t110Cls\t140Lvl\t176H.P."
-	"\t212S.P.\t241A.C.\t270Cond"
-	"%s%s%s%s%s%s%s%s"
-	"\v110\t064\x3""cGold\t144Gems\t224Food\v119"
-	"\t064\f15%u\t144%u\t224%u day%s\fd";
-
-static const int BLACKSMITH_MAP_IDS[2][4] = { { 28, 30, 73, 49 }, { 29, 31, 37, 43 } };
-
-static const char *const ITEMS_DIALOG_TEXT1 =
-	"\r\x2\x3""c\v021\t017\f37W\fdeap\t051\f37A\fdrmor\t085A"
-	"\f37c\fdces\t119\f37M\fdisc\t153%s\t187%s\t221%s"
-	"\t255%s\t289Exit";
-static const char *const ITEMS_DIALOG_TEXT2 =
-	"\r\x2\x3""c\v021\t017\f37W\fdeap\t051\f37A\fdrmor\t085A"
-	"\f37c\fdces\t119\f37M\fdisc\t153\f37%s\t289Exit";
-static const char *const ITEMS_DIALOG_LINE1 = "\x3r\f%02u\t023%2d)\x3l\t028%s\n";
-static const char *const ITEMS_DIALOG_LINE2 = "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%u\n";
-
-static const char *const BTN_BUY = "\f37B\fduy";
-static const char *const BTN_SELL = "\f37S\fdell";
-static const char *const BTN_IDENTIFY = "\f37I\fddentify";
-static const char *const BTN_FIX = "\f37F\fdix";
-static const char *const BTN_USE = "\f37U\fdse";
-static const char *const BTN_EQUIP = "\f37E\fdquip";
-static const char *const BTN_REMOVE = "\f37R\fdem";
-static const char *const BTN_DISCARD = "\f37D\fdisc";
-static const char *const BTN_QUEST = "\f37Q\fduest";
-static const char *const BTN_ENCHANT = "E\fdnchant";
-static const char *const BTN_RECHARGE = "R\fdechrg";
-static const char *const BTN_GOLD = "G\fdold";
-
-static const char *const ITEM_BROKEN = "\f32broken ";
-static const char *const ITEM_CURSED = "\f09cursed ";
-static const char *const ITEM_OF = "of ";
-
-static const char *const BONUS_NAMES[7] = {
-	"", "Dragon Slayer", "Undead Eater", "Golem Smasher",
-	"Bug Zapper", "Monster Masher", "Beast Bopper"
-};
-
-static const char *const WEAPON_NAMES[41] = {
-	nullptr, "long sword ", "short sword ", "broad sword ", "scimitar ",
-	"cutlass ", "sabre ", "club ", "hand axe ", "katana ", "nunchakas ",
-	"wakazashi ", "dagger ", "mace ", "flail ", "cudgel ", "maul ", "spear ",
-	"bardiche ", "glaive ", "halberd ", "pike ", "flamberge ", "trident ",
-	"staff ", "hammer ", "naginata ", "battle axe ", "grand axe ", "great axe ",
-	"short bow ", "long bow ", "crossbow ", "sling ", "Xeen Slayer Sword ",
-	"Elder LongSword ", "Elder Dagger ", "Elder Mace ", "Elder Spear ",
-	"Elder Staff ", "Elder LongBow "
-};
-
-static const char *const ARMOR_NAMES[14] = {
-	nullptr, "robes ", "scale armor ", "ring mail ", "chain mail ",
-	"splint mail ", "plate mail ", "plate armor ", "shield ",
-	"helm ", "boots ", "cloak ", "cape ", "gauntlets "
-};
-
-static const char *const ACCESSORY_NAMES[11] = {
-	nullptr, "ring ", "belt ", "brooch ", "medal ", "charm ", "cameo ",
-	"scarab ", "pendant ", "necklace ", "amulet "
-};
-
-static const char *const MISC_NAMES[22] = {
-	nullptr, "rod ", "jewel ", "gem ", "box ", "orb ", "horn ", "coin ",
-	"wand ", "whistle ", "potion ", "scroll ", "bogus", "bogus", "bogus",
-	"bogus", "bogus", "bogus", "bogus", "bogus", "bogus", "bogus"
-};
-
-static const char *const SPECIAL_NAMES[74] = {
-	nullptr, "light", "awakening", "magic arrows", "first aid", "fists", "energy blasts", "sleeping",
-	"revitalization", "curing", "sparking", "shrapmetal", "insect repellent", "toxic clouds", "elemental protection",
-	"pain", "jumping", "beast control", "clairvoyance", "undead turning", "levitation", "wizard eyes", "blessing",
-	"monster identification",  "lightning", "holy bonuses", "power curing", "nature's cures", "beacons",
-	"shielding", "heroism", "hypnotism", "water walking", "frost biting", "monster finding", "fireballs",
-	"cold rays", "antidotes", "acid spraying", "time distortion", "dragon sleep", "vaccination", "teleportation",
-	"death", "free movement", "golem stopping", "poison volleys", "deadly swarms", "shelter", "daily protection",
-	"daily sorcerery", "feasting", "fiery flails", "recharging", "freezing", "town portals", "stone to flesh",
-	"raising the dead", "etherealization", "dancing swords", "moon rays", "mass distortion", "prismatic light",
-	"enchant item", "incinerating", "holy words", "resurrection", "storms", "megavoltage", "infernos",
-	"sun rays", "implosions", "star bursts", "the GODS!"
-};
-
-static const char *const ELEMENTAL_NAMES[6] = {
-	"Fire", "Elec", "Cold", "Acid/Poison", "Energy", "Magic"
-};
-
-static const char *const ATTRIBUTE_NAMES[10] = {
-	"might", "Intellect", "Personality", "Speed", "accuracy", "Luck",
-	"Hit Points", "Spell Points", "Armor Class", "Thievery"
-};
-
-static const char *const EFFECTIVENESS_NAMES[7] = {
-	nullptr, "Dragons", "Undead", "Golems", "Bugs", "Monsters", "Beasts"
-};
-
-static const char *const QUEST_ITEM_NAMES[85] = {
-	"Deed to New Castle",
-	"Crystal Key to Witch Tower",
-	"Skeleton Key to Darzog's Tower",
-	"Enchanted Key to Tower of High Magic",
-	"Jeweled Amulet of the Northern Sphinx",
-	"Stone of a Thousand Terrors",
-	"Golem Stone of Admittance",
-	"Yak Stone of Opening",
-	"Xeen's Scepter of Temporal Distortion",
-	"Alacorn of Falista",
-	"Elixir of Restoration",
-	"Wand of Faery Magic",
-	"Princess Roxanne's Tiara",
-	"Holy Book of Elvenkind",
-	"Scarab of Imaging",
-	"Crystals of Piezoelectricity",
-	"Scroll of Insight",
-	"Phirna Root",
-	"Orothin's Bone Whistle",
-	"Barok's Magic Pendant",
-	"Ligono's Missing Skull",
-	"Last Flower of Summer",
-	"Last Raindrop of Spring",
-	"Last Snowflake of Winter",
-	"Last Leaf of Autumn",
-	"Ever Hot Lava Rock",
-	"King's Mega Credit",
-	"Excavation Permit",
-	"Cupie Doll",
-	"Might Doll",
-	"Speed Doll",
-	"Endurance Doll",
-	"Accuracy Doll",
-	"Luck Doll",
-	"Widget",
-	"Pass to Castleview",
-	"Pass to Sandcaster",
-	"Pass to Lakeside",
-	"Pass to Necropolis",
-	"Pass to Olympus",
-	"Key to Great Western Tower",
-	"Key to Great Southern Tower",
-	"Key to Great Eastern Tower",
-	"Key to Great Northern Tower",
-	"Key to Ellinger's Tower",
-	"Key to Dragon Tower",
-	"Key to Darkstone Tower",
-	"Key to Temple of Bark",
-	"Key to Dungeon of Lost Souls",
-	"Key to Ancient Pyramid",
-	"Key to Dungeon of Death",
-	"Amulet of the Southern Sphinx",
-	"Dragon Pharoah's Orb",
-	"Cube of Power",
-	"Chime of Opening",
-	"Gold ID Card",
-	"Silver ID Card",
-	"Vulture Repellant",
-	"Bridle",
-	"Enchanted Bridle",
-	"Treasure Map (Goto E1 x1, y11)",
-	"",
-	"Fake Map",
-	"Onyx Necklace",
-	"Dragon Egg",
-	"Tribble",
-	"Golden Pegasus Statuette",
-	"Golden Dragon Statuette",
-	"Golden Griffin Statuette",
-	"Chalice of Protection",
-	"Jewel of Ages",
-	"Songbird of Serenity",
-	"Sandro's Heart",
-	"Ector's Ring",
-	"Vespar's Emerald Handle",
-	"Queen Kalindra's Crown",
-	"Caleb's Magnifying Glass",
-	"Soul Box",
-	"Soul Box with Corak inside",
-	"Ruby Rock",
-	"Emerald Rock",
-	"Sapphire Rock",
-	"Diamond Rock",
-	"Monga Melon",
-	"Energy Disk"
-};
-
-static const char *QUEST_ITEM_NAMES_SWORDS[51] = {
-	"Pass to Hart", "Pass to Impery", "Pass to town3", "Pass to town4", "Pass to town5",
-	"Key to Hart Sewers", "Key to Rettig's Pyramid", "Key to the Old Temple",
-	"Key to Canegtut's Pyramid", "Key to Ascihep's Pyramid", "Key to Dragon Tower",
-	"Key to Darkstone Tower", "Key to Temple of Bark", "Key to Dungeon of Lost Souls",
-	"Key to Ancient Pyramid", "Key to Dungeon of Death", "Red Magic Hammer",
-	"Green Magic Hammer", "Golden Magic Wand", "Silver Magic Hammer", "Magic Coin",
-	"Ruby", "Diamond Mineral", "Emerald", "Sapphire", "Treasure Map (Goto E1 x1, y11)",
-	"NOTUSED", "Melon", "Princess Crown", "Emerald Wand", "Druid Carving", "High Sign",
-	"Holy Wheel", "Double Cross", "Sky Hook", "Sacred Cow", "Staff of the Mountain",
-	"Hard Rock", "Soft Rock", "Rock Candy", "Ivy Plant", "Spirit Gem", "Temple of Sun holy lamp oil",
-	"Noams Hammer", "Positive Orb", "Negative Orb", "FireBane Staff", "Diamond Edged Pick",
-	"Monga Melon", "Energy Disk", "Old XEEN Quest Item"
+  0, 0, 2, 1, 2, 4, 5, 0, 0, 0, 0, 10, 10, 10, 0, 0, 20, 4, 10, 20, 1, 10,
+  5, 5, 4, 2, 0, 0, 0, 10, 3, 1, 20, 4, 0, 20, 10, 10, 1, 10, 0, 0, 0, 2,
+  2, 0, 10, 10, 10, 0, 0, 10, 3, 2, 10, 1, 10, 10, 20, 0, 0, 1, 1, 20, 5, 20,
+  5, 0, 0, 0, 0, 5, 1, 2, 0, 2, 0
+};
+
+static const char* const NOT_A_SPELL_CASTER = "‚ë ­¥ § ª«¨­ â¥«ì...";
+
+static const char* const SPELLS_LEARNED_ALL =
+  "‚ë 㦥 §­ ¥â¥ ¢áñ,\n"
+  "\t010ç¥¬ã ¬ë ¬®¦¥¬ ¢ á\n"
+  "\t010­ ãç¨âì!\n"
+  "\n"
+  "\n"
+  "\n"
+  "\n"
+  "\n"
+  "\n"
+  "\n"
+  "\n"
+  "\n";
+
+static const char* const SPELLS_FOR = "\r\fd%s\x2\x3""c\t000\v002‡ ª«¨­ ­¨ï";
+
+static const char* const SPELL_LINES_0_TO_9 =
+  "\x2\x3l\v015\t0011\n2\n3\n4\n5\n6\n7\n8\n9\n0";
+
+static const char* const SPELLS_DIALOG_SPELLS = 
+  "\x3l\v015"
+  "\t010\f%2u%s\fd\x3l\n"
+  "\t010\f%2u%s\fd\x3l\n"
+  "\t010\f%2u%s\fd\x3l\n"
+  "\t010\f%2u%s\fd\x3l\n"
+  "\t010\f%2u%s\fd\x3l\n"
+  "\t010\f%2u%s\fd\x3l\n"
+  "\t010\f%2u%s\fd\x3l\n"
+  "\t010\f%2u%s\fd\x3l\n"
+  "\t010\f%2u%s\fd\x3l\n"
+  "\t010\f%2u%s\fd\x3l"
+  "\t004\v110%s - %u\x1";
+
+static const char* const SPELL_PTS = "Œ ­ ";
+
+static const char* const GOLD = "‡®«";
+
+static const char* const SPELL_INFO =
+  "\x3""c\f09%s\fd\x3""l\n"
+  "\n"
+  "%s\x3""c\t000\v110. ª« ¢¨èã!";
+
+static const char* const SPELL_PURCHASE =
+  "\x3""l\v000\t000\fd%s  †¥« ¥â¥ ¯à¨®¡à¥á⨠"
+  "\f09%s\fd §  %u?";
+
+static const char* const MAP_TEXT =
+  "\x3""c\v000\t000%s\x3l\v139"
+  "\t000X = %d\x3r\t000Y = %d\x3""c\t000%s";
+
+static const char* const LIGHT_COUNT_TEXT = "\x3""l\n\n\t024‘¢¥â\x3""r\t124%u";
+
+static const char* const FIRE_RESISTENCE_TEXT = "%c%sŽ£®­ì%s%u";
+
+static const char* const ELECRICITY_RESISTENCE_TEXT = "%c%sƒà®¬%s%u";
+
+static const char* const COLD_RESISTENCE_TEXT = "%c%s•®«®¤%s%u";
+
+static const char* const POISON_RESISTENCE_TEXT = "%c%sŸ¤/Š¨á«®â %s%u";
+
+static const char* const CLAIRVOYANCE_TEXT = "%c%sŸá­®¢¨¤¥­¨¥%s";
+
+static const char* const LEVITATE_TEXT = "%c%s‹¥¢¨â æ¨ï%s";
+
+static const char* const WALK_ON_WATER_TEXT = "%c%s•®¦¤¥­¨¥ ¯® ¢®¤¥";
+
+static const char* const GAME_INFORMATION =
+  "\r\x3""c\t000\v001\f37%s Šá¨­ \fd\n"
+  "ˆ£à®¢ ï ¨­ä®à¬ æ¨ï\n"
+  "\n"
+  "‘¥£®¤­ï \f37%s\fd\n"
+  "\n"
+  "\t032‚६ï\t072„¥­ì\t112ƒ®¤\n"
+  "\t032\f37%d:%02d%c\t072%u\t112%u\fd%s";
+
+static const char* const WORLD_GAME_TEXT = "World";
+static const char* const DARKSIDE_GAME_TEXT = "Darkside";
+static const char* const CLOUDS_GAME_TEXT = "Ž¡« ª ";
+static const char* const SWORDS_GAME_TEXT = "Swords";
+
+static const char* const WEEK_DAY_STRINGS[10] = {
+  "¤¥áï⨤¥­ì", "¯¥à¢®¤¥­ì", "¢â®à®¤¥­ì", "âà¥â쥤¥­ì", "ç¥â¢¥à®¤¥­ì", 
+  "¯ï⨤¥­ì",   "è¥á⨤¥­ì", "ᥬ¨¤¥­ì",  "¢®á쬨¤¥­ì", "¤¥¢ï⨤¥­ì"
+};
+
+static const char* const CHARACTER_DETAILS =
+  "\x3""l\v041\t196%s\t000\v002%s : %s %s %s"
+  "\x3""r\t053\v028\f%02u%u\fd\t103\f%02u%u\fd"
+  "\x3""l\t131\f%02u%d\fd\t196\f15%lu\fd\x3""r"
+  "\t053\v051\f%02u%u\fd\t103\f%02u%u\fd"
+  "\x3""l\t131\f%02u%u\fd\t196\f15%lu\fd"
+  "\x3""r\t053\v074\f%02u%u\fd\t103\f%02u%u\fd"
+  "\x3""l\t131\f15%u\fd\t196\f15%lu\fd"
+  "\x3""r\t053\v097\f%02u%u\fd\t103\f%02u%u\fd"
+  "\x3""l\t131\f15%u\fd\t196\f15%u %s\fd"
+  "\x3""r\t053\v120\f%02u%u\fd\t103\f%02u%u\fd"
+  "\x3""l\t131\f15%u\fd\t196\f%02u%s\fd"
+  "\t245%s%s%s%s\fd";
+
+static const char* const PARTY_GOLD = "‡®«®â®";
+
+static const char* const PLUS_14 = "\f14+";
+
+static const char* const CHARACTER_TEMPLATE =
+  "\x1\f00\r\x3""l\t029\v018‘¨«\t080Œâª\t131‡¤®à\t196ޝëâ"
+  "\t029\v041ˆ­â\t080“¤ç\t131ŽŒ\t029\v064„ãå\t080‚§à"
+  "\t131“áâ\t196€«¬ §ë\t029\v087‘«¦\t080“à¢\t131¢ª"
+  "\t196¨é \t029\v110‘ªà\t080Ї\t131 £à\t196‘®áâ®ï­¨¥"
+  "\x3""c\t290\v025\f37‚\fd¥é¨\t290\v057\f37"
+  "\fdáâà\t290\v089\f37‘\fd¬¥­\t290\v121‚ë室\x3""l%s";
+
+static const char* const EXCHANGING_IN_COMBAT =
+  "\x3""c\v007\t000‚® ¢à¥¬ï ¡¨â¢ë § ¯à¥é¥­® ¬¥­ïâìáï ¬¥áâ ¬¨!";
+
+static const char* const CURRENT_MAXIMUM_RATING_TEXT =
+  "\x2\x3""c%s\n"
+  "‘¥©ç á / Œ ªá¨¬ã¬\n"
+  "\x3""r\t054%lu\x3""l\t058/ %lu\n"
+  "\x3""c ­£: %s\x1";
+
+static const char* const CURRENT_MAXIMUM_TEXT =
+  "\x2\x3""c%s\n"
+  "‘¥©ç á / Œ ªá¨¬ã¬\n"
+  "\x3""r\t054%d\x3""l\t058/ %lu";
+
+static const char* const RATING_TEXT[24] = {
+  "¥â", "Œ¨§¥à­ë©", "† «ª¨©", "Žç.­¨§ª¨©", "¨§ª¨©", "‘।­¨©", "•®à®è¨©", 
+  "Žâ«¨ç­ë©", "‚ë᮪¨©", "‚ëá®ç¥­­ë©", "®«ì让", "Ž£à®¬­ë©", "“¤¨¢¨â¥«ì­ë©", 
+  "¥¢¥à®ïâ­ë©", "ƒ¨£ ­â᪨©", "” ­â áâ¨ç­ë©", "ˆ§ã¬¨â¥«ì­ë©", "®à §¨â¥«ì­ë©", 
+  "ƒà ­¤¨®§­ë©", "ƒà®¬ ¤­ë©", "Š®«®áá «ì­ë©", "®âàïá î騩", "—㤮¢¨é­ë©", 
+  "‚ëá®ç ©è¨©"
+};
+
+static const char* const AGE_TEXT =
+  "\x2\x3""c%s\n"
+  "’¥ªã騩 /  áâ®ï騩\n"
+  "\x3""r\t057%u\x3""l\t061/ %u\n"
+  "\x3""c®¤¨«%s: %u / %u\x1";
+
+static const char* const LEVEL_TEXT =
+  "\x2\x3""c%s\n"
+  "’¥ªã騩 / Œ ªá¨¬ã¬\n"
+  "\x3""r\t054%u\x3""l\t058/ %u\n"
+  "\x3""c%u €â ª%s/ ã­¤\x1";
+
+static const char* const RESISTENCES_TEXT =
+  "\x2\x3""c%s\x3""l\n"
+  "\t020Ž£®­ì\t100%u\n"
+  "\t020•®«®¤\t100%u\n"
+  "\t020ƒà®¬\t100%u\n"
+  "\t020Ÿ¤\t100%u\n"
+  "\t020­¥à£¨ï\t100%u\n"
+  "\t020Œ £¨ï\t100%u";
+
+static const char* const NONE = "\n\t012¥â";
+
+static const char* const EXPERIENCE_TEXT =
+  "\x2\x3""c%s\x3""l\n"
+  "\t005’¥ªã騩:\t070%lu\n"
+  "\t005‘«. ã஢¥­ì:\t070%s\x1";
+
+static const char* const ELIGIBLE = "\f12„®áâ㯥­\fd";
+
+static const char* const IN_PARTY_IN_BANK =
+  "\x2\x3""c%s\n"
+  "%lu á ᮡ®©\n"
+  "%lu ¢ ¡ ­ª¥\x1\x3""l";
+
+static const char* const FOOD_TEXT =
+  "\x2\x3""c%s\n"
+  "%u ¯®àæ¨%c\n"
+  "•¢ â¨â ­  %u %s\x1\x3""l";
+
+static const char* const EXCHANGE_WITH_WHOM = "\t010\v005®¬¥­ïâìáï á ª¥¬?";
+
+static const char* const QUICK_REF_LINE =
+  "\v%3d\t007%u)\t027%s\t110%c%c%c\x3r\t160\f%02u%u\fd"
+  "\x3l\t170\f%02u%d\fd\t208\f%02u%u\fd\t247\f"
+  "%02u%u\fd\t270\f%02u%c%c%c%c\fd";
+
+static const char* const QUICK_REFERENCE =
+  "\r\x3""cëáâà ï c¯à ¢ª \v012\x3""l"
+  "\t007#\t027ˆ¬ï\t110Š«á\t147“à¢\t174‡¤®à"
+  "\t214ŽŒ\t242Ї\t270‘®áâ"
+  "%s%s%s%s%s%s%s%s"
+  "\v110\t064\x3""c‡®«®â®\t144€«¬ §ë\t224¨é \v119"
+  "\t064\f15%lu\t144%lu\t224%u %s\fd";
+
+static const int BLACKSMITH_MAP_IDS[2][4] = 
+  { { 28, 30, 73, 49 }, { 29, 31, 37, 43 } };
+
+static const char* const ITEMS_DIALOG_TEXT1 =
+  "\r\x2\x3""c\v021\t017Žàã\f37¦\fd\t051\f37\fdà®­ï\t085"
+  "\f37“\fdªà è\t119\f37\fd §­\t153%s\t187%s\t221%s\t255%s\t289‚ë室";
+
+static const char* const ITEMS_DIALOG_TEXT2 =
+  "\r\x2\x3""c\v021\t017Žàã\f37¦\fd\t051\f37\fdà®­ï\t085"
+  "\f37“\fdªà è\t119\f37\fd §­\t153\f37%s\t289‚ë室";
+
+static const char* const ITEMS_DIALOG_LINE1 = "\x3r\f%02u\t023%2d)\x3l\t028%s\n";
+static const char* const ITEMS_DIALOG_LINE2 = "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%u\n";
+
+static const char* const BTN_BUY = "\f37Š\fdã¯";
+static const char *const BTN_SELL = "\f37\fdத";
+static const char* const BTN_IDENTIFY = "\f37Ž\fd¯®§­";
+static const char* const BTN_FIX = "\f37—\fd¨­¨âì";
+static const char* const BTN_USE = "\f37ˆ\fdá¯";
+static const char* const BTN_EQUIP = "\f37\fd ¤";
+static const char* const BTN_REMOVE = "\f37‘\fd­ïâì";
+static const char* const BTN_DISCARD = "\f37‚\fdë¡à";
+static const char* const BTN_QUEST = "\f37‡\fd ¤ ­";
+static const char* const BTN_ENCHANT = "‡\fd ç à";
+static const char* const BTN_RECHARGE = "\fd¥à¥§à";
+static const char* const BTN_GOLD = "‡\fd®«®â®";
+
+static const char* const ITEM_BROKEN = "\f32á«®¬ ­® ";
+static const char* const ITEM_CURSED = "\f09¯à®ª«ïâ® ";
+static const char* const ITEM_OF = "";
+
+static const char* const BONUS_NAMES[7] = {
+  "", "“¡¨©æë ¤à ª®­®¢", "ˆ§£®­ïî饣® ¬ñàâ¢ëå", "Šàãè¨â¥«ï £®«¥¬®¢", 
+  "„ ¢¨â¥«ï ­ á¥ª®¬ëå", "“¡¨©æë ¬®­áâ஢", "“¡¨©æë §¢¥à¥©"
+};
+
+static const char* const WEAPON_NAMES[41] = {
+  nullptr, "¬¥ç ", "£« ¤¨ãá ", "¯ « è ", "ïâ £ ­ ",
+  "ª®à⨪ ", "á ¡«ï ", "¤ã¡¨­  ", "⮯®à ", "ª â ­  ", "­ã­ç ª¨ ",
+  "¢ ª¨¤§ á¨ ", "ª¨­¦ « ", "¡ã« ¢  ", "楯 ", "¦¥§« ", "¬®«®â ", "ª®¯ìñ ",
+  "¡¥à¤ëè ", "£«¥ä  ", " «¥¡ à¤  ", "¯¨ª  ", "ä« ¬¡¥à£ ", "â१㡥æ ",
+  "¯®á®å ", "¡®¥¢®© ¬®«®â ", "­ £¨­ â  ", "¡®¥¢®© ⮯®à ", "ᥪ¨à  ", 
+  "⮯®à ¯ « ç  ", "«ãª ", "¡®«ì让 «ãª ", " à¡ «¥â ", "¯à é  ", 
+  "Œ¥ç - 㡨©æ  Šá¨­  ",
+  "Elder LongSword ", "Elder Dagger ", "Elder Mace ", "Elder Spear ",
+  "Elder Staff ", "Elder LongBow "
+};
+
+static const char* const ARMOR_NAMES[14] = {
+  nullptr, "¬ ­â¨ï ", "ç¥èãï ", "¯ ­æ¨àì ", "ª®«ìç㣠 ",
+  "î謠­ ", "¡¥åâ¥à¥æ ", "« âë ", "é¨â ",
+  "è«¥¬ ", "á ¯®£¨ ", "¯« é ", "­ ª¨¤ª  ", "¯¥àç âª¨ "
+};
+
+static const char* const ACCESSORY_NAMES[11] = {
+  nullptr, "ª®«ìæ® ", "¯®ïá ", "¡à®èì ", "¬¥¤ «ì ", "â «¨á¬ ­ ", "ª ¬¥ï ", 
+  "᪠ࠡ¥© ", "ªã«®­ ", "®¦¥à¥«ì¥ ", " ¬ã«¥â "
+};
+
+static const char* const MISC_NAMES[22] = {
+  nullptr, "᪨¯¥âà ", "á ¬®æ¢¥â ", "ª ¬¥­ì ", "誠â㫪  ", "áä¥à  ", "ண ", 
+  "¬®­¥âª  ", "¦¥§« ", "ᢨá⮪ ", "§¥«ì¥ ", "ᢨ⮪ ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", 
+  "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", 
+  "¯®¤¤¥«ª ", "¯®¤¤¥«ª "
+};
+
+static const char* const SPECIAL_NAMES[74] = {
+  nullptr, "ᢥâ ", "¯à®¡ã¦¤¥­¨ï", "¢®«è¥¡­ëå áâ५", "¯¥à¢®© ¯®¬®é¨", 
+  "ªã« ª®¢", "í­¥à£¥â¨ç¥áª®£® ¢§à뢠", "ãá믫¥­¨ï", "«¥ç¥­¨ï á« ¡®áâ¨", 
+  "«¥ç¥­¨ï", "¨áªà", "èà ¯­¥«¨", "९¥««¥­â ", "冷¢¨âëå ®¡« ª®¢", 
+  "§ é¨âë ®â áâ¨å¨©", "¡®«¨", "¯à릪®¢", "ª®­âà®«ï ­ ¤ ¬®­áâà ¬¨", 
+  "ïá­®¢¨¤¥­¨ï", "¨§£­ ­¨ï ­¥¦¨â¨", "«¥¢¨â æ¨¨", "¢®«è¥¡­®£® £« § ", 
+  "¡« £®á«®¢¥­¨ï", "®¯®§­ ­¨ï ¬®­áâ஢", "¬®«­¨©", "á¢ïâëå ¤ à®¢", "¨á楫¥­¨ï", 
+  "¯à¨à®¤­®£® «¥ç¥­¨ï", "¬ ïª®¢", "é¨â ", "¬ã¦¥á⢠", "£¨¯­®§ ", 
+  "宦¤¥­¨ï ¯® ¢®¤¥", "®¡¦¨£ î饣® 宫®¤ ", "¯®¨áª  ¬®­áâ஢", 
+  "®£­¥­­ëå è à®¢", "«ã祩 宫®¤ ", "¯à®â¨¢®ï¤¨ï", "à á¯ë«¥­¨ï ª¨á«®âë", 
+  "¢à¥¬¥­­®£® ¨áª ¦¥­¨ï", "ãá믫¥­¨ï ¤à ª®­®¢", "¢ ªæ¨­ æ¨¨", "⥫¥¯®àâ æ¨¨",
+  "ᬥàâ¨", "᢮¡®¤­®£® ¤¢¨¦¥­¨ï", "®áâ ­®¢ª¨ £®«¥¬ ", "冷¢¨âëå § «¯®¢", 
+  "ᬥà⥫쭮£® à®ï", "ã¡¥¦¨é ", "¤­ï § é¨âë", "¤­ï ¬ £¨¨", "¯¨à ", 
+  "®£­¥­­®£® 楯 ", "¯¥à¥§ à浪¨", "¬®à®§ ", "£®à®¤áª¨å ¯®àâ «®¢", 
+  "á­ïâ¨ï ®ª ¬¥­¥­¨ï", "®¦¨¢«¥­¨ï ¬ñàâ¢ëå", "¤¥¬ â¥à¨ «¨§ æ¨¨", 
+  "â ­æãîé¨å ª«¨­ª®¢", "«ã­­ëå «ã祩", "¨§¬¥­¥­¨ï ¢¥á ", 
+  "¯à¨§¬ â¨ç¥áª®£® ᢥâ ", "ç à", "¨á¯¥¯¥«¥­¨ï", "á¢ïâëå á«®¢", "¢®áªà¥è¥­¨ï", 
+  "¡ãàì", "¬¥£ ¢®«ìâ", "¨­ä¥à­®", "᮫­¥ç­ëå «ã祩", "¨¬¯«®§¨©", 
+  "¢§à뢠 §¢¥§¤ë", "ŽƒŽ‚!"
+};
+
+static const char* const ELEMENTAL_NAMES[6] = {
+  "Ž£­ï", "ƒà®¬ ", "•®«®¤ ", "Š¨á«®âë/Ÿ¤ ", "­¥à£¨¨", "Œ £¨¨"
+};
+
+static const char* const ATTRIBUTE_NAMES[10] = {
+  "‘¨« ", "ˆ­â¥««¥ªâ", "‘¨«  ¤ãå ", "‘ª®à®áâì", "Œ¥âª®áâì", "“¤ ç ",
+  "‡¤®à®¢ì¥", "Žçª¨ ¬ £¨¨", "Š« áá § é¨âë", "‚®à®¢á⢮"
+};
+
+static const char* const EFFECTIVENESS_NAMES[7] = {
+  nullptr, "„à ª®­®¢", "Œñàâ¢ëå", "ƒ®«¥¬®¢", " á¥ª®¬ëå", "Œ®­áâ஢", "‡¢¥à¥©"
+};
+
+static const char* const QUEST_ITEM_NAMES[85] = {
+  "à ¢® ¢« ¤¥­¨ï ì᫮¬",
+  "•àãáâ «ì­ë© ª«îç ®â ‚¥¤ì¬¨­®© ¡ è­¨",
+  "Žâ¬ë窠 ¤«ï ¡ è­¨ „ à§®£ ",
+  "Š«îç ®â  è­¨ ¢ëá襩 ¬ £¨¨",
+  "„à £®æ¥­­ë©  ¬ã«¥â ‘¥¢¥à­®£® ‘䨭ªá ",
+  "Š ¬¥­ì ’ëáïç¨ “¦ á®¢",
+  "Žâ¯¨à î騩 ª ¬¥­ì £®«¥¬®¢",
+  "Žâ¯¨à î騩 ª ¬¥­ì Ÿª ",
+  "‘ª¨¯¥âà ‚à¥¬¥­­®£® ˆáª ¦¥­¨ï",
+  "®£ ” «¨áâë",
+  "«¨ªá¨à ‚®ááâ ­®¢«¥­¨ï",
+  "‚®«è¥¡­ë© ¦¥§« 䥩",
+  "„¨ ¤¥¬  ¯à¨­æ¥ááë ®ªá ­ë",
+  "‘¢ï饭­ ï Š­¨£  «ì䮢",
+  "‘ª à ¡¥© ‚®¯«®é¥­¨ï",
+  "Šà¨áâ ««ë ì¥§®í«¥ªâà¨ç¥á⢠",
+  "‘¢¨â®ª Œã¤à®áâ¨",
+  "Š®à¥­ì ä¨à­ë",
+  "Š®áâï­®© ᢨá⮪ Žà®ä¨­ ",
+  "‚®«è¥¡­ë© ªã«®­  à®ª ",
+  "à®¯ ¢è¨© ç¥à¥¯ ‹¨£®­®",
+  "®á«¥¤­¨© 梥⮪ «¥â ",
+  "®á«¥¤­ïï ¤®¦¤¥¢ ï ª ¯¥«ìª  ¢¥á­ë",
+  "®á«¥¤­ïï á­¥¦¨­ª  §¨¬ë",
+  "®á«¥¤­¨© «¨á⠮ᥭ¨",
+  "‚¥ç­® £®àï稩 ªã᮪ ¯¥¬§ë",
+  "Œ¥£ ªà¥¤¨â ª®à®«ï",
+  " §à¥è¥­¨¥ ­  à áª®¯ª¨",
+  "Šãª®«ª ",
+  "Šãª«  ‘¨«ë",
+  "Šãª«  ‘ª®à®áâ¨",
+  "Šãª«  ‘«®¦¥­¨ï",
+  "Šãª«  Œ¥âª®áâ¨",
+  "Šãª«  “¤ ç¨",
+  "“áâனá⢮",
+  "Pass to Castleview",
+  "Pass to Sandcaster",
+  "Pass to Lakeside",
+  "Pass to Necropolis",
+  "Pass to Olympus",
+  "Key to Great Western Tower",
+  "Key to Great Southern Tower",
+  "Key to Great Eastern Tower",
+  "Key to Great Northern Tower",
+  "Key to Ellinger's Tower",
+  "Key to Dragon Tower",
+  "Key to Darkstone Tower",
+  "Key to Temple of Bark",
+  "Key to Dungeon of Lost Souls",
+  "Key to Ancient Pyramid",
+  "Key to Dungeon of Death",
+  "Amulet of the Southern Sphinx",
+  "Dragon Pharoah's Orb",
+  "Cube of Power",
+  "Chime of Opening",
+  "Gold ID Card",
+  "Silver ID Card",
+  "Vulture Repellant",
+  "Bridle",
+  "Enchanted Bridle",
+  "Treasure Map (Goto E1 x1, y11)",
+  "",
+  "Fake Map",
+  "Onyx Necklace",
+  "Dragon Egg",
+  "Tribble",
+  "Golden Pegasus Statuette",
+  "Golden Dragon Statuette",
+  "Golden Griffin Statuette",
+  "Chalice of Protection",
+  "Jewel of Ages",
+  "Songbird of Serenity",
+  "Sandro's Heart",
+  "Ector's Ring",
+  "Vespar's Emerald Handle",
+  "Queen Kalindra's Crown",
+  "Caleb's Magnifying Glass",
+  "Soul Box",
+  "Soul Box with Corak inside",
+  "Ruby Rock",
+  "Emerald Rock",
+  "Sapphire Rock",
+  "Diamond Rock",
+  "Monga Melon",
+  "Energy Disk"
+};
+
+static const char* QUEST_ITEM_NAMES_SWORDS[51] = {
+  "Pass to Hart", "Pass to Impery", "Pass to town3", "Pass to town4", "Pass to town5",
+  "Key to Hart Sewers", "Key to Rettig's Pyramid", "Key to the Old Temple",
+  "Key to Canegtut's Pyramid", "Key to Ascihep's Pyramid", "Key to Dragon Tower",
+  "Key to Darkstone Tower", "Key to Temple of Bark", "Key to Dungeon of Lost Souls",
+  "Key to Ancient Pyramid", "Key to Dungeon of Death", "Red Magic Hammer",
+  "Green Magic Hammer", "Golden Magic Wand", "Silver Magic Hammer", "Magic Coin",
+  "Ruby", "Diamond Mineral", "Emerald", "Sapphire", "Treasure Map (Goto E1 x1, y11)",
+  "NOTUSED", "Melon", "Princess Crown", "Emerald Wand", "Druid Carving", "High Sign",
+  "Holy Wheel", "Double Cross", "Sky Hook", "Sacred Cow", "Staff of the Mountain",
+  "Hard Rock", "Soft Rock", "Rock Candy", "Ivy Plant", "Spirit Gem", "Temple of Sun holy lamp oil",
+  "Noams Hammer", "Positive Orb", "Negative Orb", "FireBane Staff", "Diamond Edged Pick",
+  "Monga Melon", "Energy Disk", "Old XEEN Quest Item"
 };
 
 static const int WEAPON_BASE_COSTS[35] = {
-	0, 50, 15, 100, 80, 40, 60, 1, 10, 150, 30, 60, 8, 50,
-	100, 15, 30, 15, 200, 80, 250, 150, 400, 100, 40, 120,
-	300, 100, 200, 300, 25, 100, 50, 15, 0
+  0, 50, 15, 100, 80, 40, 60, 1, 10, 150, 30, 60, 8, 50,
+  100, 15, 30, 15, 200, 80, 250, 150, 400, 100, 40, 120,
+  300, 100, 200, 300, 25, 100, 50, 15, 0
 };
 static const int ARMOR_BASE_COSTS[14] = {
-	0, 20, 100, 200, 400, 600, 1000, 2000, 100, 60, 40, 250, 200, 100
+  0, 20, 100, 200, 400, 600, 1000, 2000, 100, 60, 40, 250, 200, 100
 };
 static const int ACCESSORY_BASE_COSTS[11] = {
-	0, 100, 100, 250, 100, 50, 300, 200, 500, 1000, 2000
+  0, 100, 100, 250, 100, 50, 300, 200, 500, 1000, 2000
 };
 static const int MISC_MATERIAL_COSTS[22] = {
-	0, 50, 1000, 500, 10, 100, 20, 10, 50, 10, 10, 100,
-	1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+  0, 50, 1000, 500, 10, 100, 20, 10, 50, 10, 10, 100,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1
 };
 static const int MISC_BASE_COSTS[76] = {
-	0, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
-	100, 100, 100, 100, 200, 200, 200, 200, 200, 200, 200, 200,
-	200, 200, 200, 200, 200, 200, 200, 300, 300, 300, 300, 300,
-	300, 300, 300, 300, 300, 400, 400, 400, 400, 400, 400, 400,
-	400, 400, 400, 500, 500, 500, 500, 500, 500, 500, 500, 500,
-	500, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,
-	600, 600, 600, 600
+  0, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+  100, 100, 100, 100, 200, 200, 200, 200, 200, 200, 200, 200,
+  200, 200, 200, 200, 200, 200, 200, 300, 300, 300, 300, 300,
+  300, 300, 300, 300, 300, 400, 400, 400, 400, 400, 400, 400,
+  400, 400, 400, 500, 500, 500, 500, 500, 500, 500, 500, 500,
+  500, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,
+  600, 600, 600, 600
 };
 static const int METAL_BASE_MULTIPLIERS[22] = {
-	10, 25, 5, 75, 2, 5, 10, 20, 50, 2, 3, 5, 10, 20, 30, 40,
-	50, 60, 70, 80, 90, 100
+  10, 25, 5, 75, 2, 5, 10, 20, 50, 2, 3, 5, 10, 20, 30, 40,
+  50, 60, 70, 80, 90, 100
 };
 static const int ITEM_SKILL_DIVISORS[4] = { 1, 2, 100, 10 };
 
 static const int RESTRICTION_OFFSETS[4] = { 0, 35, 49, 60 };
 
 static const int ITEM_RESTRICTIONS[86] = {
-	0, 86, 86, 86, 86, 86, 86, 0, 6, 239, 239, 239, 2, 4, 4, 4, 4,
-	6, 70, 70, 70, 70, 94, 70, 0, 4, 239, 86, 86, 86, 70, 70, 70, 70,
-	0, 0, 0, 68, 100, 116, 125, 255, 255, 85, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+  0, 86, 86, 86, 86, 86, 86, 0, 6, 239, 239, 239, 2, 4, 4, 4, 4,
+  6, 70, 70, 70, 70, 94, 70, 0, 4, 239, 86, 86, 86, 70, 70, 70, 70,
+  0, 0, 0, 68, 100, 116, 125, 255, 255, 85, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 };
 
-static const char *const NOT_PROFICIENT =
-	"\t000\v007\x3""c%ss are not proficient with a %s!";
+static const char* const NOT_PROFICIENT =
+  "\t000\v007\x3""c%s ­¥ ¬®¦¥â ¨á¯®«ì§®¢ âì %s!";
 
-static const char *const NO_ITEMS_AVAILABLE = "\x3""c\n"
-	"\t000No items available.";
+static const char* const NO_ITEMS_AVAILABLE = "\x3""c\n\t000¥â ¢¥é¥©.";
 
-static const char *const CATEGORY_NAMES[4] = { "Weapons", "Armor", "Accessories", "Miscellaneous" };
+static const char* const CATEGORY_NAMES[4] = { 
+  "Žà㦨¥", "à®­ï", "“ªà è¥­¨ï", " §­®¥"
+};
 
-static const char *const X_FOR_THE_Y =
-	"\x1\fd\r%s\v000\t000%s for %s the %s%s\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+static const char* const X_FOR_THE_Y =
+  "\x1\fd\r%s\v000\t000%s - %s %s%s\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
 
-static const char *const X_FOR_Y =
-	"\x1\fd\r\x3l\v000\t000%s for %s\x3r\t000%s\x3l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+static const char* const X_FOR_Y =
+  "\x1\fd\r\x3""l\v000\t000%s - %s\x3""r\t000%s\x3""l\v011"
+  "\x2%s%s%s%s%s%s%s%s%s\x1\fd";
 
-static const char *const X_FOR_Y_GOLD =
-	"\x1\fd\r\x3l\v000\t000%s for %s\t150Gold - %u%s\x3l\v011"
-	"\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+static const char* const X_FOR_Y_GOLD =
+  "\x1\fd\r\x3""l\v000\t000%s - %s\t150‡®«®â® - %lu%s\x3""l\v011"
+  "\x2%s%s%s%s%s%s%s%s%s\x1\fd";
 
-static const char *const FMT_CHARGES = "\x3rr\t000Charges\x3l";
+static const char* const FMT_CHARGES = "\x3""r\t000‡ à冷¢\x3""l";
 
-static const char *const AVAILABLE_GOLD_COST =
-	"\x1\fd\r\x3l\v000\t000Available %s\t150Gold - %u\x3r\t000Cost"
-	"\x3l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+static const char* const AVAILABLE_GOLD_COST =
+  "\x1\fd\r\x3""l\v000\t000%s\t150‡®«®â® - %lu\x3""r\t000–¥­ "
+  "\x3""l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
 
-static const char *const CHARGES = "Charges";
+static const char* const CHARGES = "‡ à冷¢";
 
-static const char *const COST = "Cost";
+static const char* const COST = "–¥­ ";
 
-static const char *const ITEM_ACTIONS[7] = {
-	"Equip", "Remove", "Use", "Discard", "Enchant", "Recharge", "Gold"
+static const char* const ITEM_ACTIONS[7] = {
+  "­ ¤¥âì", "á­ïâì", "¨á¯®«ì§®¢ âì", "¢ëª¨­ãâì", "§ ç à®¢ âì", "¯¥à¥§ à廊âì",
+  "à¥¢à â¨âì ¢ §®«®â®"
 };
-static const char *const WHICH_ITEM = "\t010\v005%s which item?";
 
-static const char *const WHATS_YOUR_HURRY = "\v007What's your hurry?\n"
-	"Wait till you get out of here!";
+static const char* const WHICH_ITEM = "\v000Š ª®© ¯à¥¤¬¥â ¢ë ¦¥« ¥â¥ %s?";
 
-static const char *const USE_ITEM_IN_COMBAT =
-	"\v007To use an item in Combat, invoke the Use command on your turn!";
+static const char* const WHATS_YOUR_HURRY =
+  "\v007—¥£® â®à®¯¨èìáï?\n"
+  "®¤®¦¤¨, ¯®ª  ­¥ ¢ë¡¥à¥èìáï ®âá!";
 
-static const char *const NO_SPECIAL_ABILITIES = "\v005\x3""c%s\fdhas no special abilities!";
+static const char* const USE_ITEM_IN_COMBAT =
+  "\v007—â®¡ë ¨á¯®«ì§®¢ âì ¯à¥¤¬¥â ¢ ¡¨â¢¥, ­ ¦¬¨â¥ ­  ª­®¯ªã 'ˆá¯' ­  ¡®ª®¢®© ¯ ­¥«¨.";
 
-static const char *const CANT_CAST_WHILE_ENGAGED = "\x3""c\v007Can't cast %s while engaged!";
+static const char* const NO_SPECIAL_ABILITIES = 
+  "\v005\x3""c%s\fd­¥ ¨¬¥¥â ®á®¡ëå ᢮©áâ¢!";
 
-static const char *const EQUIPPED_ALL_YOU_CAN = "\x3""c\v007You have equipped all the %ss you can!";
-static const char *const REMOVE_X_TO_EQUIP_Y = "\x3""c\v007You must remove %sto equip %s\b!";
-static const char *const RING = "ring";
-static const char *const MEDAL = "medal";
+static const char* const CANT_CAST_WHILE_ENGAGED = 
+  "\x3""c\v007‡ ª«¨­ ­¨¥ %s ­¥«ì§ï ¨á¯®«ì§®¢ âì ¢ ¡¨â¢¥!";
 
-static const char *const CANNOT_REMOVE_CURSED_ITEM = "\x3""You cannot remove a cursed item!";
+static const char* const EQUIPPED_ALL_YOU_CAN =
+  "\x3""c\v007‚ë ­¥ ¬®¦¥â¥ ­ ¤¥âì ¡®«ìè¥ ¤¢ãå %s!";
 
-static const char *const CANNOT_DISCARD_CURSED_ITEM = "\3x""cYou cannot discard a cursed item!";
+static const char* const REMOVE_X_TO_EQUIP_Y =
+  "\x3""c\v007‚ ¬ ­ã¦­® á­ïâì %sçâ®¡ë ­ ¤¥âì %s\b!";
 
-static const char *const PERMANENTLY_DISCARD = "\v000\t000\x3lPermanently discard %s\fd?";
+static const char* const RING = "ª®«¥æ";
+static const char* const MEDAL = "¬¥¤ «¥©";
 
-static const char *const BACKPACK_IS_FULL = "\v005\x3""c\fd%s's backpack is full.";
+static const char* const CANNOT_REMOVE_CURSED_ITEM =
+  "\x3""c‚ë ­¥ ¬®¦¥â¥ á­ïâì ¯à®ª«ïâãî ¢¥éì!";
 
-static const char *const CATEGORY_BACKPACK_IS_FULL[4] = {
-	"\v010\t000\x3""c%s's weapons backpack is full.",
-	"\v010\t000\x3""c%s's armor backpack is full.",
-	"\v010\t000\x3""c%s's accessories backpack is full.",
-	"\v010\t000\x3""c%s's miscellaneous backpack is full."
-};
-
-static const char *const BUY_X_FOR_Y_GOLD = "\x3l\v000\t000\fdBuy %s\fd for %u gold?";
-
-static const char *const SELL_X_FOR_Y_GOLD = "\x3l\v000\t000\fdSell %s\fd for %u gold?";
+static const char* const CANNOT_DISCARD_CURSED_ITEM =
+  "\x3""c‚ë ­¥ ¬®¦¥â¥ ¢ëª¨­ãâì ¯à®ª«ïâãî ¢¥éì!";
 
-static const char *const NO_NEED_OF_THIS = "\v005\x3""c\fdWe have no need of this %s\f!";
+static const char* const PERMANENTLY_DISCARD =
+  "\v000\t000\x3""l‚모­ãâì ­ ¢á¥£¤ ? %s";
 
-static const char *const NOT_RECHARGABLE = "\v012\x3""c\fdNot Rechargeable.  %s";
+static const char* const BACKPACK_IS_FULL =
+  "\v005\x3""c\fd%s! ‚ è à ª ¯®«®­.";
 
-static const char *const NOT_ENCHANTABLE = "\v012\t000\x3""cNot Enchantable.  %s";
+static const char* const CATEGORY_BACKPACK_IS_FULL[4] = {
+  "\v010\t000\x3""c%s! ‚ è à ª ¯®«®­.",
+  "\v010\t000\x3""c%s! ‚ è à ª ¯®«®­.",
+  "\v010\t000\x3""c%s! ‚ è à ª ¯®«®­.",
+  "\v010\t000\x3""c%s! ‚ è à ª ¯®«®­."
+};
 
-static const char *const SPELL_FAILED = "Spell Failed!";
+static const char* const BUY_X_FOR_Y_GOLD =
+  "\x3""l\v000\t000\fdŠã¯¨âì %s\fd §  %lu §®«®â%s?";
 
-static const char *const ITEM_NOT_BROKEN =  "\fdThat item is not broken!";
+static const char* const SELL_X_FOR_Y_GOLD =
+  "\x3""l\v000\t000\fdà®¤ âì %s\fd §  %lu §®«®â%s?";
 
-static const char *const FIX_IDENTIFY[2] = { "Fix", "Identify" };
+static const char* const NO_NEED_OF_THIS =
+  "\v005\x3""c\fd á ­¥ ¨­â¥à¥áã¥â %s\fd!";
 
-static const char *const FIX_IDENTIFY_GOLD = "\x3l\v000\t000%s %s\fd for %u gold?";
+static const char* const NOT_RECHARGABLE =
+  "\v007\x3""c\fd¥¢®§¬®¦­® ¯¥à¥§ à廊âì.\n%s";
 
-static const char *const IDENTIFY_ITEM_MSG = "\fd\v000\t000\x3""cIdentify Item\x3l\n"
-	"\n"
-	"\v012%s\fd\n"
-	"\n"
-	"%s";
+static const char* const NOT_ENCHANTABLE =
+  "\v007\t000\x3""c¥¢®§¬®¦­® § ç à®¢ âì.\n%s";
 
-static const char *const ITEM_DETAILS =
-	"Proficient Classes\t132:\t140%s\n"
-	"to Hit Modifier\t132:\t140%s\n"
-	"Physical Damage\t132:\t140%s\n"
-	"Elemental Damage\t132:\t140%s\n"
-	"Elemental Resistance\t132:\t140%s\n"
-	"Armor Class Bonus\t132:\t140%s\n"
-	"Attribute Bonus\t132:\t140%s\n"
-	"Special Power\t132:\t140%s";
-
-static const char *const ALL = "All";
-static const char *const FIELD_NONE = "None";
-static const char *const DAMAGE_X_TO_Y = "%d to %d";
-static const char *const ELEMENTAL_XY_DAMAGE = "%+d %s Damage";
-static const char *const ATTR_XY_BONUS = "%+d %s";
-static const char *const EFFECTIVE_AGAINST = "x3 vs %s";
-
-static const char *const QUESTS_DIALOG_TEXT =
-	"\r\x2\x3""c\v021\t017\f37I\fdtems\t085\f37Q\fduests\t153"
-	"\f37A\fduto Notes	221\f37U\fdp\t255\f37D\fdown"
-	"\t289Exit";
-static const char *const CLOUDS_OF_XEEN_LINE = "\b \b*-- \f04Clouds of Xeen\fd --";
-static const char *const DARKSIDE_OF_XEEN_LINE = "\b \b*-- \f04Darkside of Xeen\fd --";
-static const char *const SWORDS_OF_XEEN_LINE = "\b \b*-- \f04Swords of Xeen\fd --";
-
-static const char *const NO_QUEST_ITEMS =
-	"\r\x3""c\v000	000Quest Items\x3l\x2\n"
-	"\n"
-	"\x3""cNo Quest Items";
-static const char *const NO_CURRENT_QUESTS =
-	"\x3""c\v000\t000\n"
-	"\n"
-	"No Current Quests";
-static const char *const NO_AUTO_NOTES = "\x3""cNo Auto Notes";
-
-static const char *const QUEST_ITEMS_DATA =
-	"\r\x1\fd\x3""c\v000\t000Quest Items\x3l\x2\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s";
-static const char *const CURRENT_QUESTS_DATA =
-	"\r\x1\fd\x3""c\t000\v000Current Quests\x3l\x2\n"
-	"%s\n"
-	"\n"
-	"%s\n"
-	"\n"
-	"%s";
-static const char *const AUTO_NOTES_DATA =
-	"\r\x1\fd\x3""c\t000\v000Auto Notes\x3l\x2\n"
-	"%s\x3l\n"
-	"%s\x3l\n"
-	"%s\x3l\n"
-	"%s\x3l\n"
-	"%s\x3l\n"
-	"%s\x3l\n"
-	"%s\x3l\n"
-	"%s\x3l\n"
-	"%s\x3l";
-
-static const char *const REST_COMPLETE =
-	"\v000\t0008 hours pass.  Rest complete.\n"
-	"%s\n"
-	"%d food consumed.";
-static const char *const PARTY_IS_STARVING = "\f07The Party is Starving!\fd";
-static const char *const HIT_SPELL_POINTS_RESTORED = "Hit Pts and Spell Pts restored.";
-static const char *const TOO_DANGEROUS_TO_REST = "Too dangerous to rest here!";
-static const char *const SOME_CHARS_MAY_DIE = "Some Chars may die. Rest anyway?";
-
-static const char *const DISMISS_WHOM = "\t010\v005Dismiss whom?";
-static const char *const CANT_DISMISS_LAST_CHAR = "You cannot dismiss your last character!";
-
-static const char *const DELETE_CHAR_WITH_ELDER_WEAPON = "\v000\t000This character has an Elder Weapon and cannot be deleted!";
-
-static const char *const REMOVE_DELETE[2] = { "Remove", "Delete" };
-
-static const char *const REMOVE_OR_DELETE_WHICH = "\x3l\t010\v005%s which character?";
-
-static const char *const YOUR_PARTY_IS_FULL = "\v007Your party is full!";
-
-static const char *const HAS_SLAYER_SWORD =
-	"\v000\t000This character has the Xeen Slayer Sword and cannot be deleted!";
-static const char *const SURE_TO_DELETE_CHAR =
-	"Are you sure you want to delete %s the %s?";
-
-static const char *const CREATE_CHAR_DETAILS =
-	"\f04\x3""c\x2\t144\v119\f37R\f04oll\t144\v149\f37C\f04reate"
-	"\t144\v179\f37ESC\f04\x3l\x1\t195\v021\f37M\f04gt"
-	"\t195\v045\f37I\f04nt\t195\v069\f37P\f04er\t195\v093\f37E\f04nd"
-	"\t195\v116\f37S\f04pd\t195\v140\f37A\f04cy\t195\v164\f37L\f04ck%s";
-
-static const char *const NEW_CHAR_STATS =
-	"\f04\x3l\t022\v148Race\t055: %s\n"
-	"\t022Sex\t055: %s\n"
-	"\t022Class\t055:\n"
-	"\x3r\t215\v031%d\t215\v055%d\t215\v079%d\t215\v103%d\t215\v127%d"
-	"\t215\v151%d\t215\v175%d\x3l\t242\v020\f%.2dKnight\t242\v031\f%.2d"
-	"Paladin\t242\v042\f%.2dArcher\t242\v053\f%.2dCleric\t242\v064\f%.2d"
-	"Sorcerer\t242\v075\f%.2dRobber\t242\v086\f%.2dNinja\t242\v097\f%.2d"
-	"Barbarian\t242\v108\f%.2dDruid\t242\v119\f%.2dRanger\f04\x3""c"
-	"\t265\v142Skills\x3l\t223\v155%s\t223\v170%s%s";
-
-static const char *const NAME_FOR_NEW_CHARACTER =
-	"\x3""cEnter a Name for this Character\n\n";
-static const char *const SELECT_CLASS_BEFORE_SAVING =
-	"\v006\x3""cSelect a Class before saving.\x3l";
-static const char *const EXCHANGE_ATTR_WITH = "Exchange %s with...";
+static const char* const SPELL_FAILED = "‡ ª«¨­ ­¨¥ ­¥ áà ¡®â «®!";
+
+static const char* const ITEM_NOT_BROKEN = "\fdâ®â ¯à¥¤¬¥â ­¥ á«®¬ ­!";
+
+static const char* const FIX_IDENTIFY[2] = { "®ç¨­¨âì", "ޝ®§­ âì" };
+
+static const char* const FIX_IDENTIFY_GOLD =
+  "\x3""l\v000\t000%s %s\fd §  %lu §®«®â%s?";
+
+static const char* const IDENTIFY_ITEM_MSG =
+  "\fd\v000\t000\x3""cޝ®§­ âì ¯à¥¤¬¥â\x3""l\n"
+  "\n"
+  "\v012%s\fd\n"
+  "\n"
+  "%s";
+
+static const char* const ITEM_DETAILS =
+  "ˆá¯®«ì§ãîâ ª« ááë\t132:\t140%s\n"
+  "Œ®¤¨ä¨ª â®à ãà®­ \t132:\t140%s\n"
+  "”¨§¨ç¥áª¨© ãà®­\t132:\t140%s\n"
+  "“à®­ ®â ‘â¨å¨©\t132:\t140%s\n"
+  "‡ é¨â  ®â ‘â¨å¨©\t132:\t140%s\n"
+  "Š« áá § é¨âë\t132:\t140%s\n"
+  "®­ãá ᢮©á⢠\t132:\t140%s\n"
+  "Žá®¡®¥ ᢮©á⢮\t132:\t140%s";
+
+static const char* const ALL = "⇴";
+static const char* const FIELD_NONE = "¥â";
+static const char* const DAMAGE_X_TO_Y = "%d-%d";
+static const char* const ELEMENTAL_XY_DAMAGE = "%+d ãà®­  ®â %s";
+static const char* const ATTR_XY_BONUS = "%+d %s";
+static const char* const EFFECTIVE_AGAINST = "x3 ¯à®â¨¢ %s";
+
+static const char* const QUESTS_DIALOG_TEXT =
+  "\r\x2\x3""c\v021\t017\f37‚\fd¥é¨\t085\f37‡\fd ¤ ­¨ï\t153"
+  "‡\f37 \fd¬¥âª¨\t221‚¢¥àå\t255‚­¨§"
+  "\t289‚ë室";
+
+static const char* const CLOUDS_OF_XEEN_LINE = 
+  "\b \b*-- \f04Ž¡« ª  Šá¨­ \fd --";
+static const char* const DARKSIDE_OF_XEEN_LINE = 
+  "\b \b*-- \f04Darkside of Xeen\fd --";
+static const char* const SWORDS_OF_XEEN_LINE = 
+  "\b \b*-- \f04Swords of Xeen\fd --";
+
+static const char* const NO_QUEST_ITEMS =
+  "\r\x1\fd\x3""c\v000\t000à¥¤¬¥âë § ¤ ­¨©\x3""l\x2\n"
+  "\n"
+  "\x3""c¥â ¯à¥¤¬¥â®¢";
+
+static const char* const NO_CURRENT_QUESTS =
+  "\x3""c\v000\t000\n"
+  "\n"
+  "¥â § ¤ ­¨©";
+
+static const char* const NO_AUTO_NOTES = "\x3""c‡ ¬¥â®ª ­¥â";
+
+static const char* const QUEST_ITEMS_DATA =
+  "\r\x1\fd\x3""c\v000\t000à¥¤¬¥âë § ¤ ­¨©\x3""l\x2\n"
+  "\f04 * \fd%s\n"
+  "\f04 * \fd%s\n"
+  "\f04 * \fd%s\n"
+  "\f04 * \fd%s\n"
+  "\f04 * \fd%s\n"
+  "\f04 * \fd%s\n"
+  "\f04 * \fd%s\n"
+  "\f04 * \fd%s\n"
+  "\f04 * \fd%s";
+
+static const char* const CURRENT_QUESTS_DATA =
+  "\r\x1\fd\x3""c\t000\v000‡ ¤ ­¨ï\x3""l\x2\n"
+  "%s\n"
+  "\n"
+  "%s\n"
+  "\n"
+  "%s";
+
+static const char* const AUTO_NOTES_DATA =
+  "\r\x1\fd\x3""c\t000\v000‡ ¬¥âª¨\x3""l\x2\n"
+  "%s\x3""l\n"
+  "%s\x3""l\n"
+  "%s\x3""l\n"
+  "%s\x3""l\n"
+  "%s\x3""l\n"
+  "%s\x3""l\n"
+  "%s\x3""l\n"
+  "%s\x3""l\n"
+  "%s\x3""l";
+
+static const char* const REST_COMPLETE =
+  "\v000\t000à®è«® 8 ç á®¢. Žâ¤ëå § ª®­ç¥­\n"
+  "%s\n"
+  "ë«® áꥤ¥­® %d ¯¨é¨.";
+
+static const char* const PARTY_IS_STARVING = "\f07Žâàï¤ £®«®¤ ¥â!\fd";
+
+static const char* const HIT_SPELL_POINTS_RESTORED = 
+  "‡¤®à®¢ì¥ ¨ ¬ ­  ¢®ááâ ­®¢«¥­ë";
+
+static const char* const TOO_DANGEROUS_TO_REST = 
+  "‡¤¥áì ᫨誮¬ ®¯ á­® ®â¤ëå âì!";
+
+static const char* const SOME_CHARS_MAY_DIE = 
+  "Šâ®-â® ¨§ ®âà鸞 ¬®¦¥â 㬥à¥âì. ‚ë ¢áñ à ¢­® ¦¥« ¥â¥ ®â¤®å­ãâì?";
+
+static const char* const DISMISS_WHOM = "\r\t010\v005Š®£® ¢ë£­ âì?";
+
+static const char* const CANT_DISMISS_LAST_CHAR = 
+  "‚ë ­¥ ¬®¦¥â¥ ¢ë£­ âì ᢮¥£® ¯®á«¥¤­¥£® ¯¥àá®­ ¦ !";
+
+static const char* const DELETE_CHAR_WITH_ELDER_WEAPON = "\v000\t000This character has an Elder Weapon and cannot be deleted!";
+
+static const char* const REMOVE_DELETE[2] = { "‚룭 âì", "㤠«¨âì" };
+
+static const char* const REMOVE_OR_DELETE_WHICH = "\x3""l\t010\v005Š®£® %s?";
+
+static const char* const YOUR_PARTY_IS_FULL = "\v007‚ è ®âàï¤ ¯®«®­!";
+
+static const char* const HAS_SLAYER_SWORD =
+  "\v000\t000â®â ¯¥àá®­ ¦ ­¥ ¬®¦¥â ¡ëâì 㤠«ñ­, â ª ª ª ã ­¥£® Œ¥ç-㡨©æ  Šá¨­ !";
+  
+static const char* const SURE_TO_DELETE_CHAR =
+  "%s %s. ‚ë 㢥७ë, çâ® å®â¨â¥ 㤠«¨âì í⮣® £¥à®ï?";
+
+static const char* const CREATE_CHAR_DETAILS =
+  "\f04\x3""c\x2\t144\v119\f37\f04à®á®ª\t144\v149\f37‘\f04®§¤"
+  "\t144\v179\f37ESC\f04\x3""l\x1\t195\v021‘¨\f37«\f04"
+  "\t195\v045\f37ˆ\f04­â\t195\v069\f37„\f04ãå\t195\v093‘«\f37¦\f04"
+  "\t195\v116‘\f37ª\f04à\t195\v140\f37Œ\f04âª\t195\v164\f37“\f04¤ç%s";
+
+static const char* const NEW_CHAR_STATS =
+"\f04\x3""l\t017\v148 á \t055: %s\n"
+"\t017®«\t055: %s\n"
+"\t017Š« áá\t055:\n"
+"\x3""r\t215\v031%d\t215\v055%d\t215\v079%d\t215\v103%d\t215\v127%d"
+"\t215\v151%d\t215\v175%d\x3""l\t242\v020\f%2dëæ àì\t242\v031\f%2d"
+" « ¤¨­\t242\v042\f%2d‹ãç­¨ª\t242\v053\f%2dŠ«¨à¨ª\t242\v064\f%2d"
+"Œ £\t242\v075\f%2d‚®à\t242\v086\f%2d¨­¤§ï\t242\v097\f%2d"
+"‚ à¢ à\t242\v108\f%2d„à㨤\t242\v119\f%2d‘«¥¤®¯ëâ\f04\x3""c"
+"\t265\v142 ¢ëª¨\x2\x3""l\t223\v155%s\t223\v170%s%s\x1";
+
+static const char* const NAME_FOR_NEW_CHARACTER =
+  "\x3""c‚¢¥¤¨â¥ ¨¬ï ¯¥àá®­ ¦ \n\n";
+
+static const char* const SELECT_CLASS_BEFORE_SAVING =
+  "\v003\x3""c¥à¥¤ á®åà ­¥­¨¥¬ ¢ë¡¥à¨â¥ ª« áá.\x3""l";
+
+static const char* const EXCHANGE_ATTR_WITH = "®¬¥­ïâì %s á...";
 
 static const int NEW_CHAR_SKILLS[10] = { 1, 5, -1, -1, 4, 0, 0, -1, 6, 11 };
 static const int NEW_CHAR_SKILLS_OFFSET[10] = { 0, 0, 0, 5, 0, 0, 0, 0, 0, 0 };
@@ -1708,625 +1881,656 @@ static const int RACE_COLD_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
 static const int RACE_ENERGY_RESISTENCES[5] = { 7, 5, 2, 5, 0 };
 static const int RACE_POISON_RESISTENCES[5] = { 7, 0, 2, 20, 0 };
 static const int NEW_CHARACTER_SPELLS[10][4] = {
-	{ -1, -1, -1, -1 },
-	{ 21, -1, -1, -1 },
-	{ 22, -1, -1, -1 },
-	{ 21, 1, 14, -1 },
-	{ 22, 0, 25, -1 },
-	{ -1, -1, -1, -1 },
-	{ -1, -1, -1, -1 },
-	{ -1, -1, -1, -1 },
-	{ 20, 1, 11, 23 },
-	{ 20, 1, -1, -1 }
-};
-
-static const char *const COMBAT_DETAILS = "\r\f00\x3""c\v000\t000\x2""Combat%s%s%s\x1";
-
-static const char *NOT_ENOUGH_TO_CAST = "\x3""c\v010Not enough %s to Cast %s";
-static const char *SPELL_CAST_COMPONENTS[2] = { "Spell Points", "Gems" };
-
-static const char *const CAST_SPELL_DETAILS =
-	"\r\x2\x3""c\v122\t013\f37C\fdast\t040\f37N\fdew"
-	"\t067ESC\x1\t000\v000\x3""cCast Spell\n"
-	"\n"
-	"%s\x3l\n"
-	"\n"
-	"Spell Ready:\x3""c\n"
-	"\n"
-	"\f09%s\fd\x2\x3l\n"
-	"\v082Cost\x3r\t000%u/%u\x3l\n"
-	"Cur SP\x3r\t000%u\x1";
-
-static const char *const PARTY_FOUND =
-	"\x3""cThe Party Found:\n"
-	"\n"
-	"\x3r\t000%u Gold\n"
-	"%u Gems";
-
-static const char *const BACKPACKS_FULL_PRESS_KEY =
-	"\v007\f12Warning!  BackPacks Full!\fd\n"
-	"Press a Key";
-
-static const char *const HIT_A_KEY = "\x3l\v120\t000\x4""077\x3""c\f37Hit a key\fd";
-
-static const char *const GIVE_TREASURE_FORMATTING =
-	"\x3l\v060\t000\x4""077\n"
-	"\x4""077\n"
-	"\x4""077\n"
-	"\x4""077\n"
-	"\x4""077\n"
-	"\x4""077";
-
-static const char *const X_FOUND_Y = "\v060\t000\x3""c%s found: %s";
-
-static const char *const ON_WHO = "\x3""c\v009On Who?";
-
-static const char *const WHICH_ELEMENT1 =
-	"\r\x3""c\x1Which Element?\x2\v034\t014\f15F\fdire\t044"
-	"\f15E\fdlec\t074\f15C\fdold\t104\f15A\fdcid\x1";
-
-static const char *const WHICH_ELEMENT2 =
-	"\r\x3""cWhich Element?\x2\v034\t014\f15F\fdire\t044"
-	"\f15E\fdlec\t074\f15C\fdold\t104\f15A\fdcid\x1";
-
-static const char *const DETECT_MONSTERS = "\x3""cDetect Monsters";
-
-static const char *const LLOYDS_BEACON =
-	"\r\x3""c\v000\t000\x1Lloyd's Beacon\n"
-	"\n"
-	"Last Location\n"
-	"\n"
-	"%s\x3l\n"
-	"x = %d\x3r\t000y = %d\x3""c\x2\v122\t021\f15S\fdet\t060\f15R\fdeturn\x1";
-
-static const char *const HOW_MANY_SQUARES = "\x3""cTeleport\nHow many squares %s (1-9)\n";
-
-static const char *const TOWN_PORTAL =
-	"\x3""cTown Portal\x3l\n"
-	"\n"
-	"\t0101. %s\n"
-	"\t0102. %s\n"
-	"\t0103. %s\n"
-	"\t0104. %s\n"
-	"\t0105. %s\x3""c\n"
-	"\n"
-	"To which Town (1-5)\n"
-	"\n";
-
-static const char *const TOWN_PORTAL_SWORDS =
-	"\x3""cTown Portal\x3l\n"
-	"\n"
-	"\t0101. %s\n"
-	"\t0102. %s\n"
-	"\t0103. %s\x3""c\n"
-	"\n"
-	"To which Town (1-3)\n"
-	"\n";
+  { -1, -1, -1, -1 },
+  { 21, -1, -1, -1 },
+  { 22, -1, -1, -1 },
+  { 21, 1, 14, -1 },
+  { 22, 0, 25, -1 },
+  { -1, -1, -1, -1 },
+  { -1, -1, -1, -1 },
+  { -1, -1, -1, -1 },
+  { 20, 1, 11, 23 },
+  { 20, 1, -1, -1 }
+};
+
+static const char* const COMBAT_DETAILS = "\r\f00\x3""c\v000\t000\x2%s%s%s\x1";
+
+static const char* NOT_ENOUGH_TO_CAST =
+  "\x3""c\v000¥¤®áâ â®ç­® %s, çâ®¡ë § ª«¨­ âì %s";
+
+static const char* SPELL_CAST_COMPONENTS[2] = { "®çª®¢ ¬ £¨¨", " «¬ §®¢" };
+
+static const char* const CAST_SPELL_DETAILS =
+  "\r\x2\x3""c\v122\t013\f37‡\fd ª«\t040\f37\fd®¢"
+  "\t067ESC\x1\t000\v000\x3""c‡ ª«¨­ ­¨¥\n"
+  "\n"
+  "%s\x3""c\n"
+  "\n"
+  "     ƒ®â®¢®¥:\x3""c\n"
+  "\n"
+  "\f09%s\fd\x2\x3""l\n"
+  "\v082–¥­ \x3""r\t000%u/%u\x3""l\n"
+  "’¥ª ŽŒ\x3""r\t000%u\x1";
+
+static const char* const PARTY_FOUND =
+  "\x3""c ©¤¥­®:\n"
+  "\n"
+  "\x3""r\t000%lu ‡®«\n"
+  "%lu €«¬§";
+
+static const char* const BACKPACKS_FULL_PRESS_KEY =
+  "\v007\f12‚­¨¬ ­¨¥! îª§ ª¨ ¯¥à¥¯®«­¥­ë!\fd\n"
+  " ¦¬¨â¥ ª« ¢¨èã";
+
+static const char* const HIT_A_KEY =
+  "\x3""l\v120\t000\x4""077\x3""c\f37. ª« ¢¨èã\fd";
+
+static const char* const GIVE_TREASURE_FORMATTING =
+  "\x3l\v060\t000\x4""077\n"
+  "\x4""077\n"
+  "\x4""077\n"
+  "\x4""077\n"
+  "\x4""077\n"
+  "\x4""077";
+
+static const char* const X_FOUND_Y = "\v060\t000\x3""c%s ­ è%s: %s";
+
+static const char* const ON_WHO = "\x3""c\v009Š®£®?";
+
+static const char* const WHICH_ELEMENT1 =
+  "\r\x3""c\x1Š ª ï ‘â¨å¨ï?\x2\v034\t014\f15Ž\fd£®­ì\t044"
+  "\f15ƒ\fd஬\t074\f15•\fd®«®¤\t104\f15Ÿ\fd¤\x1";
+
+static const char* const WHICH_ELEMENT2 =
+  "\r\x3""cŠ ª ï ‘â¨å¨ï?\x2\v034\t014\f15Ž\fd£®­ì\t044"
+  "\f15ƒ\fd஬\t074\f15•\fd®«®¤\t104\f15Ÿ\fd¤\x1";
+
+static const char* const DETECT_MONSTERS = "\x3""c®¨áª ¬®­áâ஢";
+
+static const char* const LLOYDS_BEACON =
+  "\r\x3""c\v000\t000\x1Œ ïª ‹«®©¤ \n"
+  "\n"
+  "®á«¥¤­¥¥ ¬¥áâ®\n"
+  "\n"
+  "%s\x3""l\n"
+  "x = %d\x3""r\t000y = %d\x3""c\x2\v122\t021\f15“\fdáâ ­\t060\f15‚\fd¥à­\x1";
+
+static const char* const HOW_MANY_SQUARES =
+  "\x3""c’¥«¥¯®àâ\n‘ª®«ìª® ª«¥â®ª ­  %s (1-9)\n";
+
+static const char* const TOWN_PORTAL =
+  "\x3""cƒ®à®¤áª®© ¯®àâ «\x3""l\n"
+  "\n"
+  "\t0101. %s\n"
+  "\t0102. %s\n"
+  "\t0103. %s\n"
+  "\t0104. %s\n"
+  "\t0105. %s\x3""c\n"
+  "\n"
+  "‚ ª ª®© £®à®¤ (1-5)\n"
+  "\n";
+
+static const char* const TOWN_PORTAL_SWORDS =
+"\x3""cTown Portal\x3l\n"
+"\n"
+"\t0101. %s\n"
+"\t0102. %s\n"
+"\t0103. %s\x3""c\n"
+"\n"
+"To which Town (1-3)\n"
+"\n";
 
 static const int TOWN_MAP_NUMBERS[3][5] = {
-	{ 28, 29, 30, 31, 32 }, { 29, 31, 33, 35, 37 }, { 53, 92, 63, 0, 0 }
-};
-
-static const char *const MONSTER_DETAILS =
-	"\x3l\n"
-	"%s\x3""c\t100%s\t140%u\t180%u\x3r\t000%s";
-
-static const char *const MONSTER_SPECIAL_ATTACKS[23] = {
-	"None", "Magic", "Fire", "Elec", "Cold", "Poison", "Energy", "Disease",
-	"Insane", "Asleep", "CurseItm", "InLove", "DrnSPts", "Curse", "Paralys",
-	"Uncons", "Confuse", "BrkWpn", "Weak", "Erad", "Age+5", "Dead", "Stone"
-};
-
-static const char *const IDENTIFY_MONSTERS =
-	"Name\x3""c\t100HP\t140AC\t177#Atks\x3r\t000Special%s%s%s";
-
-static const char *const EVENT_SAMPLES[6] = {
-	"ahh.voc", "whereto.voc", "gulp.voc", "null.voc", "scream.voc", "laff1.voc"
-};
-
-static const char *const MOONS_NOT_ALIGNED =
-"\x3""c\v012\t000The moons are not aligned. Passage to the %s is unavailable";
-
-static const char *const AWARDS_FOR =
-	"\r\x1\fd\x3""c\v000\t000Awards for %s the %s\x3l\x2\n"
-	"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\x1";
-
-static const char *const AWARDS_TEXT =
-	"\r\x2\x3""c\v021\t221\f37U\fdp\t255\f37D\fdown\t289Exit";
-
-static const char *const NO_AWARDS = "\x3""cNo Awards";
-
-static const char *const WARZONE_BATTLE_MASTER = "The Warzone\n\t125Battle Master";
-
-static const char *const WARZONE_MAXED = "What!  You again?  Go pick on someone your own size!";
-
-static const char *const WARZONE_LEVEL = "What level of monsters? (1-10)\n";
-
-static const char *const WARZONE_HOW_MANY = "How many monsters? (1-20)\n";
-
-static const char *const PICKS_THE_LOCK = "\x3""c\v010%s picks the lock!\nPress any key.";
-
-static const char *const UNABLE_TO_PICK_LOCK = "\x3""c\v010%s was unable to pick the lock!\nPress any key.";
-
-static const char *const CONTROL_PANEL_TEXT =
-	"\x1\f00\x3""c\v000\t000Control Panel\x3r"
-	"\v022\t045\f06L\fdoad:\t124\f06E\fdfx:"
-	"\v041\t045\f06S\fdave:\t124\f06M\fdusic:"
-	"\v060\t045\f06Q\fduit:"
-	"\v080\t084Mr \f06W\fdizard:%s\t000\x1";
-static const char *const CONTROL_PANEL_BUTTONS =
-	"\x3""c\f11"
-	"\v022\t062load\t141%s"
-	"\v041\t062save\t141%s"
-	"\v060\t062exit"
-	"\v079\t102Help\fd";
-static const char *const ON = "\f15on\f11";
-static const char *const OFF = "\f32off\f11";
-static const char *const CONFIRM_QUIT = "Are you sure you want to quit?";
-static const char *const MR_WIZARD =
-	"Are you sure you want Mr.Wizard's Help ?";
-static const char *const NO_LOADING_IN_COMBAT =
-	"No Loading Allowed in Combat!";
-static const char *const NO_SAVING_IN_COMBAT =
-	"No Saving Allowed in Combat!";
-static const char *const QUICK_FIGHT_TEXT = "\r\fd\x3""c\v000\t000QuickFight Options\n\n"
-	"%s\x3l\n\n"
-	"Current\x3r\n"
-	"\t000%s\x2\x3""c\v122\t021\f37N\f04ext\t060Exit\x1";
-static const char *const QUICK_FIGHT_OPTIONS[4] = { "Attack", "Cast", "Block", "Run" };
-
-static const char *const WORLD_END_TEXT[9] = {
-	"\n\n\n\n\n\n\n"
-	"Congratulations Adventurers!\n\n"
-	"Let the unification ceremony begin!",
-	"And so the call went out to the people throughout the lands of Xeen"
-	" that the prophecy was nearing completion.",
-	"They came in great numbers to witness the momentous occasion.",
-	"\v026The Dragon Pharoah presided over the ceremony.",
-	"\v026Queen Kalindra presented the Cube of Power.",
-	"\v026Prince Roland presented the Xeen Sceptre.",
-	"\v026Together, they placed the Cube of Power...",
-	"\v026and the Sceptre, onto the Altar of Joining.",
-	"With the prophecy complete, the two sides of Xeen were united as one",
-};
-
-static const char *const WORLD_CONGRATULATIONS =
-	"\x3""cCongratulations\n\n"
-	"Your Final Score is:\n\n"
-	"%010lu\n"
-	"\x3l\n"
-	"Please send this score to the Ancient's Headquarters where "
-	"you'll be added to the Hall of Legends!\n\n"
-	"Ancient's Headquarters\n"
-	"New World Computing, Inc.\n"
-	"P.O. Box 4302\n"
-	"Hollywood, CA 90078";
-static const char *const WORLD_CONGRATULATIONS2 =
-	"\n\n\n\n\n\n"
-	"But wait... there's more!\n"
-	"\n\n"
-	"Include the message\n"
-	"\"%s\"\n"
-	"with your final score and receive a special bonus.";
-static const char *const CLOUDS_CONGRATULATIONS1 =
-	"\f23\x3l"
-	"\v000\t000Please send this score to the Ancient's Headquarters "
-	"where you'll be added to the Hall of Legends!\f33\x3""c"
-	"\v070\t000Press a Key";
-static const char *const CLOUDS_CONGRATULATIONS2 =
-	"\f23\x3l"
-	"\v000\t000Ancient's Headquarters\n"
-	"New World Computing, Inc.\n"
-	"P.O. Box 4302\n"
-	"Hollywood, CA 90078-4302\f33\x3""c"
-	"\v070\t000Press a Key";
-static const char *const GOOBER[3] = {
-	"", "I am a Goober!", "I am a Super Goober!"
-};
-
-static const char *const MUSIC_FILES1[5] = {
-	"outdoors.m", "town.m", "cavern.m", "dungeon.m", "castle.m"
-};
-
-static const char *const MUSIC_FILES2[6][7] = {
-	{ "outday1.m", "outday2.m", "outday4.m", "outnght1.m",
-	"outnght2.m", "outnght4.m", "daydesrt.m" },
-	{ "townday1.m", "twnwlk.m", "newbrigh.m", "twnnitea.m",
-	"twnniteb.m", "twnwlk.m", "townday1.m" },
-	{ "cavern1.m", "cavern2.m", "cavern3a.m", "cavern1.m",
-	"cavern2.m", "cavern3a.m", "cavern1.m" },
-	{ "dngon1.m", "dngon2.m", "dngon3.m", "dngon1.m",
-	"dngon2.m", "dngon3.m", "dngon1.m" },
-	{ "cstl1rev.m", "cstl2rev.m", "cstl3rev.m", "cstl1rev.m",
-	"cstl2rev.m", "cstl3rev.m", "cstl1rev.m" },
-	{ "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m" }
-};
-
-static const char *const DIFFICULTY_TEXT = "\v000\t000\x3""cSelect Game Preference";
-static const char *const SAVE_OFF_LIMITS = "\x3""c\v002\t000The Gods of Game Restoration deem this area off limits!\n"
-	"Sorry, no saving in this maze.";
-
-static const char *const CLOUDS_INTRO1 = "\f00\v082\t040\x3"
-	"cKing Burlock\v190\t040Peasants\v082\t247"
-	"Lord Xeen\v190\t258Xeen's Pet\v179\t150Crodo";
-
-static const char *const DARKSIDE_ENDING1 = "\n\x3" "cCongratulations\n"
-	"\n"
-	"Your Final Score is:\n"
-	"\n"
-	"%010lu\n"
-	"\x3" "l\n"
-	"Please send this score to the Ancient's Headquarters "
-	"where you'll be added to the Hall of Legends!\n"
-	"\n"
-	"Ancient's Headquarters\n"
-	"New World Computing, Inc.\n"
-	"P.O. Box 4302\n"
-	"Hollywood, CA 90078";
-
-static const char *const DARKSIDE_ENDING2 = "\n"
-	"Adventurers,\n"
-	"\n"
-	"I will save your game in Castleview.\n"
-	"\n"
-	"The World of Xeen still needs you!\n"
-	"\n"
-	"Load your game afterwards and come visit me in the "
-	"Great Pyramid for further instructions";
-
-static const char *const PHAROAH_ENDING_TEXT1 = "\fd\v001\t001%s\x3" "c\t000\v180Press a Key!\x3" "l";
-static const char *const PHAROAH_ENDING_TEXT2 = "\f04\v000\t000%s\x3" "c\t000\v180Press a Key!\x3" "l\fd";
-
-
-void writeConstants(CCArchive &cc) {
-	Common::MemFile file;
-	file.syncString(CLOUDS_CREDITS);
-	file.syncString(DARK_SIDE_CREDITS);
-	file.syncString(SWORDS_CREDITS1);
-	file.syncString(SWORDS_CREDITS2);
-	file.syncString(OPTIONS_MENU);
-	file.syncStrings(GAME_NAMES, 3);
-	file.syncString(THE_PARTY_NEEDS_REST);
-	file.syncString(WHO_WILL);
-	file.syncString(HOW_MUCH);
-	file.syncString(WHATS_THE_PASSWORD);
-	file.syncString(PASSWORD_INCORRECT);
-	file.syncString(IN_NO_CONDITION);
-	file.syncString(NOTHING_HERE);
-	file.syncStrings(TERRAIN_TYPES, 6);
-	file.syncStrings(OUTDOORS_WALL_TYPES, 16);
-	file.syncStrings(SURFACE_NAMES, 16);
-	file.syncStrings(WHO_ACTIONS, 32);
-	file.syncStrings(WHO_WILL_ACTIONS, 4);
-	file.syncBytes2D((const byte *)SYMBOLS, 20, 64);
-	file.syncBytes2D((const byte *)TEXT_COLORS, 40, 4);
-	file.syncBytes2D((const byte *)TEXT_COLORS_STARTUP, 40, 4);
-	file.syncStrings(DIRECTION_TEXT_UPPER, 4);
-	file.syncStrings(DIRECTION_TEXT, 4);
-	file.syncStrings(RACE_NAMES, 5);
-	file.syncNumbers(RACE_HP_BONUSES, 5);
-	file.syncNumbers2D((const int *)RACE_SP_BONUSES, 5, 2);
-	file.syncStrings(CLASS_NAMES, 11);
-	file.syncNumbers(CLASS_EXP_LEVELS, 10);
-	file.syncStrings(ALIGNMENT_NAMES, 3);
-	file.syncStrings(SEX_NAMES, 2);
-	file.syncStrings(SKILL_NAMES, 18);
-	file.syncStrings(CONDITION_NAMES, 17);
-	file.syncNumbers(CONDITION_COLORS, 17);
-	file.syncString(GOOD);
-	file.syncString(BLESSED);
-	file.syncString(POWER_SHIELD);
-	file.syncString(HOLY_BONUS);
-	file.syncString(HEROISM);
-	file.syncString(IN_PARTY);
-	file.syncString(PARTY_DETAILS);
-	file.syncString(PARTY_DIALOG_TEXT);
-	file.syncNumbers(FACE_CONDITION_FRAMES, 17);
-	file.syncNumbers(CHAR_FACES_X, 6);
-	file.syncNumbers(HP_BARS_X, 6);
-	file.syncString(NO_ONE_TO_ADVENTURE_WITH);
-	file.syncBytes2D((const byte *)DARKNESS_XLAT, 3, 256);
-	file.syncString(YOUR_ROSTER_IS_FULL);
-	file.syncString(PLEASE_WAIT);
-	file.syncString(OOPS);
-	file.syncNumbers2D((const int *)SCREEN_POSITIONING_X, 4, 48);
-	file.syncNumbers2D((const int *)SCREEN_POSITIONING_Y, 4, 48);
-	file.syncNumbers(MONSTER_GRID_BITMASK, 12);
-	file.syncNumbers2D((const int *)INDOOR_OBJECT_X, 2, 12);
-	file.syncNumbers2D((const int *)MAP_OBJECT_Y, 2, 12);
-	file.syncNumbers(INDOOR_MONSTERS_Y, 4);
-	file.syncNumbers2D((const int *)OUTDOOR_OBJECT_X, 2, 12);
-	file.syncNumbers(OUTDOOR_MONSTER_INDEXES, 26);
-	file.syncNumbers(OUTDOOR_MONSTERS_Y, 26);
-	file.syncNumbers2D((const int *)DIRECTION_ANIM_POSITIONS, 4, 4);
-	file.syncBytes2D((const byte *)WALL_SHIFTS, 4, 48);
-	file.syncNumbers(DRAW_NUMBERS, 25);
-	file.syncNumbers2D((const int *)DRAW_FRAMES, 25, 2);
-	file.syncNumbers(COMBAT_FLOAT_X, 8);
-	file.syncNumbers(COMBAT_FLOAT_Y, 8);
-	file.syncNumbers2D((const int *)MONSTER_EFFECT_FLAGS, 15, 8);
-	file.syncNumbers2D((const int *)SPELLS_ALLOWED, 3, 40);
-	file.syncNumbers(BASE_HP_BY_CLASS, 10);
-	file.syncNumbers(AGE_RANGES, 10);
-	file.syncNumbers2D((const int *)AGE_RANGES_ADJUST, 2, 10);
-	file.syncNumbers(STAT_VALUES, 24);
-	file.syncNumbers(STAT_BONUSES, 24);
-	file.syncNumbers(ELEMENTAL_CATEGORIES, 6);
-	file.syncNumbers(ATTRIBUTE_CATEGORIES, 10);
-	file.syncNumbers(ATTRIBUTE_BONUSES, 72);
-	file.syncNumbers(ELEMENTAL_RESISTENCES, 37);
-	file.syncNumbers(ELEMENTAL_DAMAGE, 37);
-	file.syncNumbers(WEAPON_DAMAGE_BASE, 35);
-	file.syncNumbers(WEAPON_DAMAGE_MULTIPLIER, 35);
-	file.syncNumbers(METAL_DAMAGE, 22);
-	file.syncNumbers(METAL_DAMAGE_PERCENT, 22);
-	file.syncNumbers(METAL_LAC, 22);
-	file.syncNumbers(ARMOR_STRENGTHS, 14);
-	file.syncNumbers(MAKE_ITEM_ARR1, 6);
-	file.syncNumbers3D((const int *)MAKE_ITEM_ARR2, 6, 7, 2);
-	file.syncNumbers3D((const int *)MAKE_ITEM_ARR3, 10, 7, 2);
-	file.syncNumbers3D((const int *)MAKE_ITEM_ARR4, 2, 7, 2);
-	file.syncNumbers2D((const int *)MAKE_ITEM_ARR5, 8, 2);
-	file.syncNumbers(OUTDOOR_DRAWSTRUCT_INDEXES, 44);
-	file.syncNumbers2D((const int *)TOWN_MAXES, 2, 11);
-	file.syncStrings2D((const char *const *)TOWN_ACTION_MUSIC, 2, 7);
-	file.syncStrings(TOWN_ACTION_SHAPES, 7);
-	file.syncNumbers2D((const int *)TOWN_ACTION_FILES, 2, 7);
-	file.syncString(BANK_TEXT);
-	file.syncString(BLACKSMITH_TEXT);
-	file.syncString(GUILD_NOT_MEMBER_TEXT);
-	file.syncString(GUILD_TEXT);
-	file.syncString(TAVERN_TEXT);
-	file.syncString(GOOD_STUFF);
-	file.syncString(HAVE_A_DRINK);
-	file.syncString(YOURE_DRUNK);
-	file.syncNumbers4D((const int *)TAVERN_EXIT_LIST, 2, 6, 5, 2);
-	file.syncString(FOOD_AND_DRINK);
-	file.syncString(TEMPLE_TEXT);
-	file.syncString(EXPERIENCE_FOR_LEVEL);
-	file.syncString(TRAINING_LEARNED_ALL);
-	file.syncString(ELIGIBLE_FOR_LEVEL);
-	file.syncString(TRAINING_TEXT);
-	file.syncString(GOLD_GEMS);
-	file.syncString(GOLD_GEMS_2);
-	file.syncStrings(DEPOSIT_WITHDRAWL, 2);
-	file.syncString(NOT_ENOUGH_X_IN_THE_Y);
-	file.syncString(NO_X_IN_THE_Y);
-	file.syncStrings(STAT_NAMES, 16);
-	file.syncStrings(CONSUMABLE_NAMES, 4);
-	file.syncStrings(WHERE_NAMES, 2);
-	file.syncString(AMOUNT);
-	file.syncString(FOOD_PACKS_FULL);
-	file.syncString(BUY_SPELLS);
-	file.syncString(GUILD_OPTIONS);
-	file.syncNumbers((const int *)MISC_SPELL_INDEX, 74);
-	file.syncNumbers((const int *)SPELL_COSTS, 77);
-	file.syncNumbers2D((const int *)CLOUDS_GUILD_SPELLS, 5, 20);
-	file.syncNumbers2D((const int *)DARK_SPELL_OFFSETS, 3, 39);
-	file.syncNumbers2D((const int *)DARK_SPELL_RANGES, 12, 2);
-	file.syncNumbers2D((const int *)SWORDS_SPELL_RANGES, 12, 2);
-	file.syncNumbers((const int *)SPELL_GEM_COST, 77);
-	file.syncString(NOT_A_SPELL_CASTER);
-	file.syncString(SPELLS_LEARNED_ALL);
-	file.syncString(SPELLS_FOR);
-	file.syncString(SPELL_LINES_0_TO_9);
-	file.syncString(SPELLS_DIALOG_SPELLS);
-	file.syncString(SPELL_PTS);
-	file.syncString(GOLD);
-	file.syncString(SPELL_INFO);
-	file.syncString(SPELL_PURCHASE);
-	file.syncString(MAP_TEXT);
-	file.syncString(LIGHT_COUNT_TEXT);
-	file.syncString(FIRE_RESISTENCE_TEXT);
-	file.syncString(ELECRICITY_RESISTENCE_TEXT);
-	file.syncString(COLD_RESISTENCE_TEXT);
-	file.syncString(POISON_RESISTENCE_TEXT);
-	file.syncString(CLAIRVOYANCE_TEXT);
-	file.syncString(LEVITATE_TEXT);
-	file.syncString(WALK_ON_WATER_TEXT);
-	file.syncString(GAME_INFORMATION);
-	file.syncString(WORLD_GAME_TEXT);
-	file.syncString(DARKSIDE_GAME_TEXT);
-	file.syncString(CLOUDS_GAME_TEXT);
-	file.syncString(SWORDS_GAME_TEXT);
-	file.syncStrings(WEEK_DAY_STRINGS, 10);
-	file.syncString(CHARACTER_DETAILS);
-	file.syncString(PARTY_GOLD);
-	file.syncString(PLUS_14);
-	file.syncString(CHARACTER_TEMPLATE);
-	file.syncString(EXCHANGING_IN_COMBAT);
-	file.syncString(CURRENT_MAXIMUM_RATING_TEXT);
-	file.syncString(CURRENT_MAXIMUM_TEXT);
-	file.syncStrings(RATING_TEXT, 24);
-	file.syncString(AGE_TEXT);
-	file.syncString(LEVEL_TEXT);
-	file.syncString(RESISTENCES_TEXT);
-	file.syncString(NONE);
-	file.syncString(EXPERIENCE_TEXT);
-	file.syncString(ELIGIBLE);
-	file.syncString(IN_PARTY_IN_BANK);
-	file.syncString(FOOD_TEXT);
-	file.syncString(EXCHANGE_WITH_WHOM);
-	file.syncString(QUICK_REF_LINE);
-	file.syncString(QUICK_REFERENCE);
-	file.syncNumbers2D((const int *)BLACKSMITH_MAP_IDS, 2, 4);
-	file.syncString(ITEMS_DIALOG_TEXT1);
-	file.syncString(ITEMS_DIALOG_TEXT2);
-	file.syncString(ITEMS_DIALOG_LINE1);
-	file.syncString(ITEMS_DIALOG_LINE2);
-	file.syncString(BTN_BUY);
-	file.syncString(BTN_SELL);
-	file.syncString(BTN_IDENTIFY);
-	file.syncString(BTN_FIX);
-	file.syncString(BTN_USE);
-	file.syncString(BTN_EQUIP);
-	file.syncString(BTN_REMOVE);
-	file.syncString(BTN_DISCARD);
-	file.syncString(BTN_QUEST);
-	file.syncString(BTN_ENCHANT);
-	file.syncString(BTN_RECHARGE);
-	file.syncString(BTN_GOLD);
-	file.syncString(ITEM_BROKEN);
-	file.syncString(ITEM_CURSED);
-	file.syncString(ITEM_OF);
-	file.syncStrings(BONUS_NAMES, 7);
-	file.syncStrings(WEAPON_NAMES, 41);
-	file.syncStrings(ARMOR_NAMES, 14);
-	file.syncStrings(ACCESSORY_NAMES, 11);
-	file.syncStrings(MISC_NAMES, 22);
-	file.syncStrings(SPECIAL_NAMES, 74);
-	file.syncStrings(ELEMENTAL_NAMES, 6);
-	file.syncStrings(ATTRIBUTE_NAMES, 10);
-	file.syncStrings(EFFECTIVENESS_NAMES, 7);
-	file.syncStrings(QUEST_ITEM_NAMES, 85);
-	file.syncStrings(QUEST_ITEM_NAMES_SWORDS, 51);
-	file.syncNumbers((const int *)WEAPON_BASE_COSTS, 35);
-	file.syncNumbers((const int *)ARMOR_BASE_COSTS, 14);
-	file.syncNumbers((const int *)ACCESSORY_BASE_COSTS, 11);
-	file.syncNumbers((const int *)MISC_MATERIAL_COSTS, 22);
-	file.syncNumbers((const int *)MISC_BASE_COSTS, 76);
-	file.syncNumbers((const int *)METAL_BASE_MULTIPLIERS, 22);
-	file.syncNumbers((const int *)ITEM_SKILL_DIVISORS, 4);
-	file.syncNumbers((const int *)RESTRICTION_OFFSETS, 4);
-	file.syncNumbers((const int *)ITEM_RESTRICTIONS, 86);
-	file.syncString(NOT_PROFICIENT);
-	file.syncString(NO_ITEMS_AVAILABLE);
-	file.syncStrings(CATEGORY_NAMES, 4);
-	file.syncString(X_FOR_THE_Y);
-	file.syncString(X_FOR_Y);
-	file.syncString(X_FOR_Y_GOLD);
-	file.syncString(FMT_CHARGES);
-	file.syncString(AVAILABLE_GOLD_COST);
-	file.syncString(CHARGES);
-	file.syncString(COST);
-	file.syncStrings(ITEM_ACTIONS, 7);
-	file.syncString(WHICH_ITEM);
-	file.syncString(WHATS_YOUR_HURRY);
-	file.syncString(USE_ITEM_IN_COMBAT);
-	file.syncString(NO_SPECIAL_ABILITIES);
-	file.syncString(CANT_CAST_WHILE_ENGAGED);
-	file.syncString(EQUIPPED_ALL_YOU_CAN);
-	file.syncString(REMOVE_X_TO_EQUIP_Y);
-	file.syncString(RING);
-	file.syncString(MEDAL);
-	file.syncString(CANNOT_REMOVE_CURSED_ITEM);
-	file.syncString(CANNOT_DISCARD_CURSED_ITEM);
-	file.syncString(PERMANENTLY_DISCARD);
-	file.syncString(BACKPACK_IS_FULL);
-	file.syncStrings(CATEGORY_BACKPACK_IS_FULL, 4);
-	file.syncString(BUY_X_FOR_Y_GOLD);
-	file.syncString(SELL_X_FOR_Y_GOLD);
-	file.syncString(NO_NEED_OF_THIS);
-	file.syncString(NOT_RECHARGABLE);
-	file.syncString(SPELL_FAILED);
-	file.syncString(NOT_ENCHANTABLE);
-	file.syncString(ITEM_NOT_BROKEN);
-	file.syncStrings(FIX_IDENTIFY, 2);
-	file.syncString(FIX_IDENTIFY_GOLD);
-	file.syncString(IDENTIFY_ITEM_MSG);
-	file.syncString(ITEM_DETAILS);
-	file.syncString(ALL);
-	file.syncString(FIELD_NONE);
-	file.syncString(DAMAGE_X_TO_Y);
-	file.syncString(ELEMENTAL_XY_DAMAGE);
-	file.syncString(ATTR_XY_BONUS);
-	file.syncString(EFFECTIVE_AGAINST);
-	file.syncString(QUESTS_DIALOG_TEXT);
-	file.syncString(CLOUDS_OF_XEEN_LINE);
-	file.syncString(DARKSIDE_OF_XEEN_LINE);
-	file.syncString(SWORDS_OF_XEEN_LINE);
-	file.syncString(NO_QUEST_ITEMS);
-	file.syncString(NO_CURRENT_QUESTS);
-	file.syncString(NO_AUTO_NOTES);
-	file.syncString(QUEST_ITEMS_DATA);
-	file.syncString(CURRENT_QUESTS_DATA);
-	file.syncString(AUTO_NOTES_DATA);
-	file.syncString(REST_COMPLETE);
-	file.syncString(PARTY_IS_STARVING);
-	file.syncString(HIT_SPELL_POINTS_RESTORED);
-	file.syncString(TOO_DANGEROUS_TO_REST);
-	file.syncString(SOME_CHARS_MAY_DIE);
-	file.syncString(DISMISS_WHOM);
-	file.syncString(CANT_DISMISS_LAST_CHAR);
-	file.syncString(DELETE_CHAR_WITH_ELDER_WEAPON);
-	file.syncStrings(REMOVE_DELETE, 2);
-	file.syncString(REMOVE_OR_DELETE_WHICH);
-	file.syncString(YOUR_PARTY_IS_FULL);
-	file.syncString(HAS_SLAYER_SWORD);
-	file.syncString(SURE_TO_DELETE_CHAR);
-	file.syncString(CREATE_CHAR_DETAILS);
-	file.syncString(NEW_CHAR_STATS);
-	file.syncString(NAME_FOR_NEW_CHARACTER);
-	file.syncString(SELECT_CLASS_BEFORE_SAVING);
-	file.syncString(EXCHANGE_ATTR_WITH);
-	file.syncNumbers((const int *)NEW_CHAR_SKILLS, 10);
-	file.syncNumbers((const int *)NEW_CHAR_SKILLS_OFFSET, 10);
-	file.syncNumbers((const int *)NEW_CHAR_SKILLS_LEN, 10);
-	file.syncNumbers((const int *)NEW_CHAR_RACE_SKILLS, 10);
-	file.syncNumbers((const int *)RACE_MAGIC_RESISTENCES, 5);
-	file.syncNumbers((const int *)RACE_FIRE_RESISTENCES, 5);
-	file.syncNumbers((const int *)RACE_ELECTRIC_RESISTENCES, 5);
-	file.syncNumbers((const int *)RACE_COLD_RESISTENCES, 5);
-	file.syncNumbers((const int *)RACE_ENERGY_RESISTENCES, 5);
-	file.syncNumbers((const int *)RACE_POISON_RESISTENCES, 5);
-	file.syncNumbers2D((const int *)NEW_CHARACTER_SPELLS, 10, 4);
-	file.syncString(COMBAT_DETAILS);
-	file.syncString(NOT_ENOUGH_TO_CAST);
-	file.syncStrings(SPELL_CAST_COMPONENTS, 2);
-	file.syncString(CAST_SPELL_DETAILS);
-	file.syncString(PARTY_FOUND);
-	file.syncString(BACKPACKS_FULL_PRESS_KEY);
-	file.syncString(HIT_A_KEY);
-	file.syncString(GIVE_TREASURE_FORMATTING);
-	file.syncString(X_FOUND_Y);
-	file.syncString(ON_WHO);
-	file.syncString(WHICH_ELEMENT1);
-	file.syncString(WHICH_ELEMENT2);
-	file.syncString(DETECT_MONSTERS);
-	file.syncString(LLOYDS_BEACON);
-	file.syncString(HOW_MANY_SQUARES);
-	file.syncString(TOWN_PORTAL);
-	file.syncString(TOWN_PORTAL_SWORDS);
-	file.syncNumbers2D((const int *)TOWN_MAP_NUMBERS, 3, 5);
-	file.syncString(MONSTER_DETAILS);
-	file.syncStrings(MONSTER_SPECIAL_ATTACKS, 23);
-	file.syncString(IDENTIFY_MONSTERS);
-	file.syncStrings(EVENT_SAMPLES, 6);
-	file.syncString(MOONS_NOT_ALIGNED);
-	file.syncString(AWARDS_FOR);
-	file.syncString(AWARDS_TEXT);
-	file.syncString(NO_AWARDS);
-	file.syncString(WARZONE_BATTLE_MASTER);
-	file.syncString(WARZONE_MAXED);
-	file.syncString(WARZONE_LEVEL);
-	file.syncString(WARZONE_HOW_MANY);
-	file.syncString(PICKS_THE_LOCK);
-	file.syncString(UNABLE_TO_PICK_LOCK);
-	file.syncString(CONTROL_PANEL_TEXT);
-	file.syncString(CONTROL_PANEL_BUTTONS);
-	file.syncString(ON);
-	file.syncString(OFF);
-	file.syncString(CONFIRM_QUIT);
-	file.syncString(MR_WIZARD);
-	file.syncString(NO_LOADING_IN_COMBAT);
-	file.syncString(NO_SAVING_IN_COMBAT);
-	file.syncString(QUICK_FIGHT_TEXT);
-	file.syncStrings(QUICK_FIGHT_OPTIONS, 4);
-	file.syncStrings(WORLD_END_TEXT, 9);
-	file.syncString(WORLD_CONGRATULATIONS);
-	file.syncString(WORLD_CONGRATULATIONS2);
-	file.syncString(CLOUDS_CONGRATULATIONS1);
-	file.syncString(CLOUDS_CONGRATULATIONS2);
-	file.syncStrings(GOOBER, 3);
-	file.syncStrings(MUSIC_FILES1, 5);
-	file.syncStrings2D((const char *const *)MUSIC_FILES2, 6, 7);
-	file.syncString(DIFFICULTY_TEXT);
-	file.syncString(SAVE_OFF_LIMITS);
-	file.syncString(CLOUDS_INTRO1);
-	file.syncString(DARKSIDE_ENDING1);
-	file.syncString(DARKSIDE_ENDING2);
-	file.syncString(PHAROAH_ENDING_TEXT1);
-	file.syncString(PHAROAH_ENDING_TEXT2);
-
-	cc.add("CONSTANTS", file);
+  { 28, 29, 30, 31, 32 }, { 29, 31, 33, 35, 37 }, { 53, 92, 63, 0, 0 }
+};
+
+static const char* const MONSTER_DETAILS =
+"\x3l\n"
+"%s\x3""c\t100%s\t140%u\t180%u\x3r\t000%s";
+
+static const char* const MONSTER_SPECIAL_ATTACKS[23] = {
+  "¥â", "Œ £¨ï", "Ž£­ï", "ƒà®¬ ", "•®«®¤ ", "Žâà ¢«¥­¨¥", "­¥à£¨¨", 
+  "®«¥§­ì", "¥§ã¬¨¥", "‘®­", "àª«à¤¬", "‚«î¡«", "Žáã臤®à", "à®ª«ï⨥", 
+  " à «¨ç", "¥áá®§­", "‘¬ï⥭¨¥", "‹®¬à®­", "‘« ¡®áâì", "“­¨ç⮦", 
+  "‚®§à áâ+5", "Œ¥àâ¢", "Š ¬¥­ì"
+};
+
+static const char* const IDENTIFY_MONSTERS =
+  "Œ®­áâà\x3""c\t155އ\t195Ї\t233#€â ª\x3""r\t000Žá®¡®¥%s%s%s";
+
+static const char* const EVENT_SAMPLES[6] = {
+  "ahh.voc", "whereto.voc", "gulp.voc", "null.voc", "scream.voc", "laff1.voc"
+};
+
+static const char* const MOONS_NOT_ALIGNED =
+  "\x3""c\v012\t000®ª  «ã­ë ­¥ ¢áâ ­ãâ ¢ àï¤, ¢ë ­¥ ᬮ¦¥â¥ ¯¥à¥©â¨ ­  ’ñ¬­ãî áâ®à®­ã Šá¨­ ";
+
+static const char* const AWARDS_FOR =
+  "\r\x1\fd\x3""c\v000\t000%s %s:  £à ¤ë \x3""l\x2\n"
+  "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\x1";
+
+static const char* const AWARDS_TEXT =
+  "\r\x2\x3""c\v021\t221‚¢¥àå\t255‚­¨§\t289‚ë室";
+
+static const char* const NO_AWARDS = "\x3""c“ ¯¥àá®­ ¦  ­¥â ­ £à ¤";
+
+
+static const char* const WARZONE_BATTLE_MASTER = "€à¥­ \n\t125Œ áâ¥à ¡¨â¢ë";
+
+static const char* const WARZONE_MAXED = 
+  "—â®!  ޝïâì ¢ë?  ¥ ¯à¨áâ ¢ ©â¥ ª ⥬, ªâ® ­¥ ¬®¦¥â ¤ âì ᤠç¨!";
+
+static const char* const WARZONE_LEVEL = "Š ª®© ã஢¥­ì ¬®­áâ஢? (1-10)\n";
+
+static const char* const WARZONE_HOW_MANY = "‘ª®«ìª® ¬®­áâ஢? (1-20)\n";
+
+static const char* const PICKS_THE_LOCK =
+  "\x3""c\v010%s ¢§«®¬ «%s § ¬®ª!\n ¦¬¨â¥ ª« ¢¨èã.";
+
+static const char* const UNABLE_TO_PICK_LOCK =
+  "\x3""c\v010%s ­¥ ᬮ£%s ¢§«®¬ âì § ¬®ª!\n ¦¬¨â¥ ª« ¢¨èã.";
+
+static const char* const CONTROL_PANEL_TEXT =
+  "\x1\f00\x3""c\v000\t000 ­¥«ì ã¯à ¢«¥­¨ï\x3""r"
+  "\v022\t045‡¢\f06ã\fdª:\t124\f06‘\fd®åà:"
+  "\v041\t045\f06Œ\fdã§.:\t124‘\f06®\fdåà:\v060\t045\f06‡\fd £à:"
+  "\t124\f06‚\fdë室"
+  "\v080\t084\f06\fd®¬®éì %s\t137Œ £ \t000\x1";
+
+static const char* const CONTROL_PANEL_BUTTONS =
+"\x3""c\f11"
+"\v022\t062load\t141%s"
+"\v041\t062save\t141%s"
+"\v060\t062exit"
+"\v079\t102Help\fd";
+
+static const char* const ON = "\f15¢ª«\f11";
+
+static const char* const OFF = "\f32¢ëª\f11";
+
+static const char* const CONFIRM_QUIT = "‚ë 㢥७ë, çâ® å®â¨â¥ ¢ë©â¨?";
+
+static const char* const MR_WIZARD =
+  "‚ë â®ç­® å®â¨â¥ ¢®á¯®«ì§®¢ âìáï ¯®¬®éìî Œà. Œ £ ?";
+
+static const char* const NO_LOADING_IN_COMBAT =
+  "¨ª ª¨å § £àã§®ª ¢® ¢à¥¬ï ¡¨â¢ë!";
+
+static const char* const NO_SAVING_IN_COMBAT =
+  "¨ª ª¨å á®åà ­¥­¨© ¢® ¢à¥¬ï ¡¨â¢ë!";
+
+static const char* const QUICK_FIGHT_TEXT =
+  "\r\fd\x3""c\v000\t000ëáâ஥ ¤¥©á⢨¥\n\n"
+  "%s\x3""l\n\n"
+  "’¥ªã饥\x3""r\n"
+  "\t000%s\x2\x3""c\v122\t019\f37‘\f04«¥¤\t055‚ë室\x1";
+
+static const char* const QUICK_FIGHT_OPTIONS[4] = { 
+  "€â ª ", "‡ ª«¨­ ­¨¥", "«®ª", "¥£á⢮" 
+};
+
+static const char* const WORLD_END_TEXT[9] = {
+  "\n\n\n\n\n\n\n"
+  "Congratulations Adventurers!\n\n"
+  "Let the unification ceremony begin!",
+  "And so the call went out to the people throughout the lands of Xeen"
+  " that the prophecy was nearing completion.",
+  "They came in great numbers to witness the momentous occasion.",
+  "\v026The Dragon Pharoah presided over the ceremony.",
+  "\v026Queen Kalindra presented the Cube of Power.",
+  "\v026Prince Roland presented the Xeen Sceptre.",
+  "\v026Together, they placed the Cube of Power...",
+  "\v026and the Sceptre, onto the Altar of Joining.",
+  "With the prophecy complete, the two sides of Xeen were united as one",
+};
+
+static const char* const WORLD_CONGRATULATIONS =
+  "\x3""cCongratulations\n\n"
+  "Your Final Score is:\n\n"
+  "%010lu\n"
+  "\x3l\n"
+  "Please send this score to the Ancient's Headquarters where "
+  "you'll be added to the Hall of Legends!\n\n"
+  "Ancient's Headquarters\n"
+  "New World Computing, Inc.\n"
+  "P.O. Box 4302\n"
+  "Hollywood, CA 90078";
+
+static const char* const WORLD_CONGRATULATIONS2 =
+  "\n\n\n\n\n\n"
+  "But wait... there's more!\n"
+  "\n\n"
+  "Include the message\n"
+  "\"%s\"\n"
+  "with your final score and receive a special bonus.";
+  static const char* const CLOUDS_CONGRATULATIONS1 =
+  "\f23\x3l"
+  "\v000\t000Please send this score to the Ancient's Headquarters "
+  "where you'll be added to the Hall of Legends!\f33\x3""c"
+  "\v070\t000Press a Key";
+
+static const char* const CLOUDS_CONGRATULATIONS2 =
+  "\f23\x3l"
+  "\v000\t000Ancient's Headquarters\n"
+  "New World Computing, Inc.\n"
+  "P.O. Box 4302\n"
+  "Hollywood, CA 90078-4302\f33\x3""c"
+  "\v070\t000Press a Key";
+
+static const char* const GOOBER[3] = {
+  "", "I am a Goober!", "I am a Super Goober!"
+};
+
+static const char* const MUSIC_FILES1[5] = {
+  "outdoors.m", "town.m", "cavern.m", "dungeon.m", "castle.m"
+};
+
+static const char* const MUSIC_FILES2[6][7] = {
+  { "outday1.m", "outday2.m", "outday4.m", "outnght1.m",
+  "outnght2.m", "outnght4.m", "daydesrt.m" },
+  { "townday1.m", "twnwlk.m", "newbrigh.m", "twnnitea.m",
+  "twnniteb.m", "twnwlk.m", "townday1.m" },
+  { "cavern1.m", "cavern2.m", "cavern3a.m", "cavern1.m",
+  "cavern2.m", "cavern3a.m", "cavern1.m" },
+  { "dngon1.m", "dngon2.m", "dngon3.m", "dngon1.m",
+  "dngon2.m", "dngon3.m", "dngon1.m" },
+  { "cstl1rev.m", "cstl2rev.m", "cstl3rev.m", "cstl1rev.m",
+  "cstl2rev.m", "cstl3rev.m", "cstl1rev.m" },
+  { "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m" }
+};
+
+static const char* const DIFFICULTY_TEXT =
+  "\v000\t000\x3""c‚ë¡¥à¨â¥ ¨£à®¢®© ०¨¬";
+
+static const char* const SAVE_OFF_LIMITS =
+"\x3""c\v002\t000®£¨ ‚®ááâ ­®¢«¥­¨ï ˆ£à áç¨â îâ íâ® ¬¥áâ® § ¯à¥â­ë¬!\n"
+"“¢ë, §¤¥áì ­¥«ì§ï á®åà ­ïâìáï";
+
+static const char* const CLOUDS_INTRO1 = 
+  "\f00\v082\t040\x3"
+  "cKing Burlock\v190\t040Peasants\v082\t247"
+  "Lord Xeen\v190\t258Xeen's Pet\v179\t150Crodo";
+
+static const char* const DARKSIDE_ENDING1 = 
+  "\n\x3" "cCongratulations\n"
+  "\n"
+  "Your Final Score is:\n"
+  "\n"
+  "%010lu\n"
+  "\x3" "l\n"
+  "Please send this score to the Ancient's Headquarters "
+  "where you'll be added to the Hall of Legends!\n"
+  "\n"
+  "Ancient's Headquarters\n"
+  "New World Computing, Inc.\n"
+  "P.O. Box 4302\n"
+  "Hollywood, CA 90078";
+
+static const char* const DARKSIDE_ENDING2 = "\n"
+  "Adventurers,\n"
+  "\n"
+  "I will save your game in Castleview.\n"
+  "\n"
+  "The World of Xeen still needs you!\n"
+  "\n"
+  "Load your game afterwards and come visit me in the "
+  "Great Pyramid for further instructions";
+
+static const char* const PHAROAH_ENDING_TEXT1 = 
+  "\fd\v001\t001%s\x3" "c\t000\v180Press a Key!\x3" "l";
+static const char* const PHAROAH_ENDING_TEXT2 = 
+  "\f04\v000\t000%s\x3" "c\t000\v180Press a Key!\x3" "l\fd";
+
+
+void writeConstants(CCArchive& cc) {
+  Common::MemFile file;
+  file.syncString(CLOUDS_CREDITS);
+  file.syncString(DARK_SIDE_CREDITS);
+  file.syncString(SWORDS_CREDITS1);
+  file.syncString(SWORDS_CREDITS2);
+  file.syncString(OPTIONS_MENU);
+  file.syncStrings(GAME_NAMES, 3);
+  file.syncString(THE_PARTY_NEEDS_REST);
+  file.syncString(WHO_WILL);
+  file.syncString(HOW_MUCH);
+  file.syncString(WHATS_THE_PASSWORD);
+  file.syncString(PASSWORD_INCORRECT);
+  file.syncString(IN_NO_CONDITION);
+  file.syncString(NOTHING_HERE);
+  file.syncStrings(TERRAIN_TYPES, 6);
+  file.syncStrings(OUTDOORS_WALL_TYPES, 16);
+  file.syncStrings(SURFACE_NAMES, 16);
+  file.syncStrings(WHO_ACTIONS, 32);
+  file.syncStrings(WHO_WILL_ACTIONS, 4);
+  file.syncBytes2D((const byte*)SYMBOLS, 20, 64);
+  file.syncBytes2D((const byte*)TEXT_COLORS, 40, 4);
+  file.syncBytes2D((const byte*)TEXT_COLORS_STARTUP, 40, 4);
+  file.syncStrings(DIRECTION_TEXT_UPPER, 4);
+  file.syncStrings(DIRECTION_TEXT, 4);
+  file.syncStrings(RACE_NAMES, 5);
+  file.syncNumbers(RACE_HP_BONUSES, 5);
+  file.syncNumbers2D((const int*)RACE_SP_BONUSES, 5, 2);
+  file.syncStrings(CLASS_NAMES, 11);
+  file.syncNumbers(CLASS_EXP_LEVELS, 10);
+  file.syncStrings(ALIGNMENT_NAMES, 3);
+  file.syncStrings(SEX_NAMES, 2);
+  file.syncStrings(SKILL_NAMES, 18);
+  file.syncStrings(CONDITION_NAMES, 17);
+  file.syncNumbers(CONDITION_COLORS, 17);
+  file.syncString(GOOD);
+  file.syncString(BLESSED);
+  file.syncString(POWER_SHIELD);
+  file.syncString(HOLY_BONUS);
+  file.syncString(HEROISM);
+  file.syncString(IN_PARTY);
+  file.syncString(PARTY_DETAILS);
+  file.syncString(PARTY_DIALOG_TEXT);
+  file.syncNumbers(FACE_CONDITION_FRAMES, 17);
+  file.syncNumbers(CHAR_FACES_X, 6);
+  file.syncNumbers(HP_BARS_X, 6);
+  file.syncString(NO_ONE_TO_ADVENTURE_WITH);
+  file.syncBytes2D((const byte*)DARKNESS_XLAT, 3, 256);
+  file.syncString(YOUR_ROSTER_IS_FULL);
+  file.syncString(PLEASE_WAIT);
+  file.syncString(OOPS);
+  file.syncNumbers2D((const int*)SCREEN_POSITIONING_X, 4, 48);
+  file.syncNumbers2D((const int*)SCREEN_POSITIONING_Y, 4, 48);
+  file.syncNumbers(MONSTER_GRID_BITMASK, 12);
+  file.syncNumbers2D((const int*)INDOOR_OBJECT_X, 2, 12);
+  file.syncNumbers2D((const int*)MAP_OBJECT_Y, 2, 12);
+  file.syncNumbers(INDOOR_MONSTERS_Y, 4);
+  file.syncNumbers2D((const int*)OUTDOOR_OBJECT_X, 2, 12);
+  file.syncNumbers(OUTDOOR_MONSTER_INDEXES, 26);
+  file.syncNumbers(OUTDOOR_MONSTERS_Y, 26);
+  file.syncNumbers2D((const int*)DIRECTION_ANIM_POSITIONS, 4, 4);
+  file.syncBytes2D((const byte*)WALL_SHIFTS, 4, 48);
+  file.syncNumbers(DRAW_NUMBERS, 25);
+  file.syncNumbers2D((const int*)DRAW_FRAMES, 25, 2);
+  file.syncNumbers(COMBAT_FLOAT_X, 8);
+  file.syncNumbers(COMBAT_FLOAT_Y, 8);
+  file.syncNumbers2D((const int*)MONSTER_EFFECT_FLAGS, 15, 8);
+  file.syncNumbers2D((const int*)SPELLS_ALLOWED, 3, 40);
+  file.syncNumbers(BASE_HP_BY_CLASS, 10);
+  file.syncNumbers(AGE_RANGES, 10);
+  file.syncNumbers2D((const int*)AGE_RANGES_ADJUST, 2, 10);
+  file.syncNumbers(STAT_VALUES, 24);
+  file.syncNumbers(STAT_BONUSES, 24);
+  file.syncNumbers(ELEMENTAL_CATEGORIES, 6);
+  file.syncNumbers(ATTRIBUTE_CATEGORIES, 10);
+  file.syncNumbers(ATTRIBUTE_BONUSES, 72);
+  file.syncNumbers(ELEMENTAL_RESISTENCES, 37);
+  file.syncNumbers(ELEMENTAL_DAMAGE, 37);
+  file.syncNumbers(WEAPON_DAMAGE_BASE, 35);
+  file.syncNumbers(WEAPON_DAMAGE_MULTIPLIER, 35);
+  file.syncNumbers(METAL_DAMAGE, 22);
+  file.syncNumbers(METAL_DAMAGE_PERCENT, 22);
+  file.syncNumbers(METAL_LAC, 22);
+  file.syncNumbers(ARMOR_STRENGTHS, 14);
+  file.syncNumbers(MAKE_ITEM_ARR1, 6);
+  file.syncNumbers3D((const int*)MAKE_ITEM_ARR2, 6, 7, 2);
+  file.syncNumbers3D((const int*)MAKE_ITEM_ARR3, 10, 7, 2);
+  file.syncNumbers3D((const int*)MAKE_ITEM_ARR4, 2, 7, 2);
+  file.syncNumbers2D((const int*)MAKE_ITEM_ARR5, 8, 2);
+  file.syncNumbers(OUTDOOR_DRAWSTRUCT_INDEXES, 44);
+  file.syncNumbers2D((const int*)TOWN_MAXES, 2, 11);
+  file.syncStrings2D((const char* const*)TOWN_ACTION_MUSIC, 2, 7);
+  file.syncStrings(TOWN_ACTION_SHAPES, 7);
+  file.syncNumbers2D((const int*)TOWN_ACTION_FILES, 2, 7);
+  file.syncString(BANK_TEXT);
+  file.syncString(BLACKSMITH_TEXT);
+  file.syncString(GUILD_NOT_MEMBER_TEXT);
+  file.syncString(GUILD_TEXT);
+  file.syncString(TAVERN_TEXT);
+  file.syncString(GOOD_STUFF);
+  file.syncString(HAVE_A_DRINK);
+  file.syncString(YOURE_DRUNK);
+  file.syncNumbers4D((const int*)TAVERN_EXIT_LIST, 2, 6, 5, 2);
+  file.syncString(FOOD_AND_DRINK);
+  file.syncString(TEMPLE_TEXT);
+  file.syncString(EXPERIENCE_FOR_LEVEL);
+  file.syncString(TRAINING_LEARNED_ALL);
+  file.syncString(ELIGIBLE_FOR_LEVEL);
+  file.syncString(TRAINING_TEXT);
+  file.syncString(GOLD_GEMS);
+  file.syncString(GOLD_GEMS_2);
+  file.syncStrings(DEPOSIT_WITHDRAWL, 2);
+  file.syncString(NOT_ENOUGH_X_IN_THE_Y);
+  file.syncString(NO_X_IN_THE_Y);
+  file.syncStrings(STAT_NAMES, 16);
+  file.syncStrings(CONSUMABLE_NAMES, 4);
+  file.syncStrings(WHERE_NAMES, 2);
+  file.syncString(AMOUNT);
+  file.syncString(FOOD_PACKS_FULL);
+  file.syncString(BUY_SPELLS);
+  file.syncString(GUILD_OPTIONS);
+  file.syncNumbers((const int*)MISC_SPELL_INDEX, 74);
+  file.syncNumbers((const int*)SPELL_COSTS, 77);
+  file.syncNumbers2D((const int*)CLOUDS_GUILD_SPELLS, 5, 20);
+  file.syncNumbers2D((const int*)DARK_SPELL_OFFSETS, 3, 39);
+  file.syncNumbers2D((const int*)DARK_SPELL_RANGES, 12, 2);
+  file.syncNumbers2D((const int*)SWORDS_SPELL_RANGES, 12, 2);
+  file.syncNumbers((const int*)SPELL_GEM_COST, 77);
+  file.syncString(NOT_A_SPELL_CASTER);
+  file.syncString(SPELLS_LEARNED_ALL);
+  file.syncString(SPELLS_FOR);
+  file.syncString(SPELL_LINES_0_TO_9);
+  file.syncString(SPELLS_DIALOG_SPELLS);
+  file.syncString(SPELL_PTS);
+  file.syncString(GOLD);
+  file.syncString(SPELL_INFO);
+  file.syncString(SPELL_PURCHASE);
+  file.syncString(MAP_TEXT);
+  file.syncString(LIGHT_COUNT_TEXT);
+  file.syncString(FIRE_RESISTENCE_TEXT);
+  file.syncString(ELECRICITY_RESISTENCE_TEXT);
+  file.syncString(COLD_RESISTENCE_TEXT);
+  file.syncString(POISON_RESISTENCE_TEXT);
+  file.syncString(CLAIRVOYANCE_TEXT);
+  file.syncString(LEVITATE_TEXT);
+  file.syncString(WALK_ON_WATER_TEXT);
+  file.syncString(GAME_INFORMATION);
+  file.syncString(WORLD_GAME_TEXT);
+  file.syncString(DARKSIDE_GAME_TEXT);
+  file.syncString(CLOUDS_GAME_TEXT);
+  file.syncString(SWORDS_GAME_TEXT);
+  file.syncStrings(WEEK_DAY_STRINGS, 10);
+  file.syncString(CHARACTER_DETAILS);
+  file.syncString(PARTY_GOLD);
+  file.syncString(PLUS_14);
+  file.syncString(CHARACTER_TEMPLATE);
+  file.syncString(EXCHANGING_IN_COMBAT);
+  file.syncString(CURRENT_MAXIMUM_RATING_TEXT);
+  file.syncString(CURRENT_MAXIMUM_TEXT);
+  file.syncStrings(RATING_TEXT, 24);
+  file.syncString(AGE_TEXT);
+  file.syncString(LEVEL_TEXT);
+  file.syncString(RESISTENCES_TEXT);
+  file.syncString(NONE);
+  file.syncString(EXPERIENCE_TEXT);
+  file.syncString(ELIGIBLE);
+  file.syncString(IN_PARTY_IN_BANK);
+  file.syncString(FOOD_TEXT);
+  file.syncString(EXCHANGE_WITH_WHOM);
+  file.syncString(QUICK_REF_LINE);
+  file.syncString(QUICK_REFERENCE);
+  file.syncNumbers2D((const int*)BLACKSMITH_MAP_IDS, 2, 4);
+  file.syncString(ITEMS_DIALOG_TEXT1);
+  file.syncString(ITEMS_DIALOG_TEXT2);
+  file.syncString(ITEMS_DIALOG_LINE1);
+  file.syncString(ITEMS_DIALOG_LINE2);
+  file.syncString(BTN_BUY);
+  file.syncString(BTN_SELL);
+  file.syncString(BTN_IDENTIFY);
+  file.syncString(BTN_FIX);
+  file.syncString(BTN_USE);
+  file.syncString(BTN_EQUIP);
+  file.syncString(BTN_REMOVE);
+  file.syncString(BTN_DISCARD);
+  file.syncString(BTN_QUEST);
+  file.syncString(BTN_ENCHANT);
+  file.syncString(BTN_RECHARGE);
+  file.syncString(BTN_GOLD);
+  file.syncString(ITEM_BROKEN);
+  file.syncString(ITEM_CURSED);
+  file.syncString(ITEM_OF);
+  file.syncStrings(BONUS_NAMES, 7);
+  file.syncStrings(WEAPON_NAMES, 41);
+  file.syncStrings(ARMOR_NAMES, 14);
+  file.syncStrings(ACCESSORY_NAMES, 11);
+  file.syncStrings(MISC_NAMES, 22);
+  file.syncStrings(SPECIAL_NAMES, 74);
+  file.syncStrings(ELEMENTAL_NAMES, 6);
+  file.syncStrings(ATTRIBUTE_NAMES, 10);
+  file.syncStrings(EFFECTIVENESS_NAMES, 7);
+  file.syncStrings(QUEST_ITEM_NAMES, 85);
+  file.syncStrings(QUEST_ITEM_NAMES_SWORDS, 51);
+  file.syncNumbers((const int*)WEAPON_BASE_COSTS, 35);
+  file.syncNumbers((const int*)ARMOR_BASE_COSTS, 14);
+  file.syncNumbers((const int*)ACCESSORY_BASE_COSTS, 11);
+  file.syncNumbers((const int*)MISC_MATERIAL_COSTS, 22);
+  file.syncNumbers((const int*)MISC_BASE_COSTS, 76);
+  file.syncNumbers((const int*)METAL_BASE_MULTIPLIERS, 22);
+  file.syncNumbers((const int*)ITEM_SKILL_DIVISORS, 4);
+  file.syncNumbers((const int*)RESTRICTION_OFFSETS, 4);
+  file.syncNumbers((const int*)ITEM_RESTRICTIONS, 86);
+  file.syncString(NOT_PROFICIENT);
+  file.syncString(NO_ITEMS_AVAILABLE);
+  file.syncStrings(CATEGORY_NAMES, 4);
+  file.syncString(X_FOR_THE_Y);
+  file.syncString(X_FOR_Y);
+  file.syncString(X_FOR_Y_GOLD);
+  file.syncString(FMT_CHARGES);
+  file.syncString(AVAILABLE_GOLD_COST);
+  file.syncString(CHARGES);
+  file.syncString(COST);
+  file.syncStrings(ITEM_ACTIONS, 7);
+  file.syncString(WHICH_ITEM);
+  file.syncString(WHATS_YOUR_HURRY);
+  file.syncString(USE_ITEM_IN_COMBAT);
+  file.syncString(NO_SPECIAL_ABILITIES);
+  file.syncString(CANT_CAST_WHILE_ENGAGED);
+  file.syncString(EQUIPPED_ALL_YOU_CAN);
+  file.syncString(REMOVE_X_TO_EQUIP_Y);
+  file.syncString(RING);
+  file.syncString(MEDAL);
+  file.syncString(CANNOT_REMOVE_CURSED_ITEM);
+  file.syncString(CANNOT_DISCARD_CURSED_ITEM);
+  file.syncString(PERMANENTLY_DISCARD);
+  file.syncString(BACKPACK_IS_FULL);
+  file.syncStrings(CATEGORY_BACKPACK_IS_FULL, 4);
+  file.syncString(BUY_X_FOR_Y_GOLD);
+  file.syncString(SELL_X_FOR_Y_GOLD);
+  file.syncString(NO_NEED_OF_THIS);
+  file.syncString(NOT_RECHARGABLE);
+  file.syncString(SPELL_FAILED);
+  file.syncString(NOT_ENCHANTABLE);
+  file.syncString(ITEM_NOT_BROKEN);
+  file.syncStrings(FIX_IDENTIFY, 2);
+  file.syncString(FIX_IDENTIFY_GOLD);
+  file.syncString(IDENTIFY_ITEM_MSG);
+  file.syncString(ITEM_DETAILS);
+  file.syncString(ALL);
+  file.syncString(FIELD_NONE);
+  file.syncString(DAMAGE_X_TO_Y);
+  file.syncString(ELEMENTAL_XY_DAMAGE);
+  file.syncString(ATTR_XY_BONUS);
+  file.syncString(EFFECTIVE_AGAINST);
+  file.syncString(QUESTS_DIALOG_TEXT);
+  file.syncString(CLOUDS_OF_XEEN_LINE);
+  file.syncString(DARKSIDE_OF_XEEN_LINE);
+  file.syncString(SWORDS_OF_XEEN_LINE);
+  file.syncString(NO_QUEST_ITEMS);
+  file.syncString(NO_CURRENT_QUESTS);
+  file.syncString(NO_AUTO_NOTES);
+  file.syncString(QUEST_ITEMS_DATA);
+  file.syncString(CURRENT_QUESTS_DATA);
+  file.syncString(AUTO_NOTES_DATA);
+  file.syncString(REST_COMPLETE);
+  file.syncString(PARTY_IS_STARVING);
+  file.syncString(HIT_SPELL_POINTS_RESTORED);
+  file.syncString(TOO_DANGEROUS_TO_REST);
+  file.syncString(SOME_CHARS_MAY_DIE);
+  file.syncString(DISMISS_WHOM);
+  file.syncString(CANT_DISMISS_LAST_CHAR);
+  file.syncString(DELETE_CHAR_WITH_ELDER_WEAPON);
+  file.syncStrings(REMOVE_DELETE, 2);
+  file.syncString(REMOVE_OR_DELETE_WHICH);
+  file.syncString(YOUR_PARTY_IS_FULL);
+  file.syncString(HAS_SLAYER_SWORD);
+  file.syncString(SURE_TO_DELETE_CHAR);
+  file.syncString(CREATE_CHAR_DETAILS);
+  file.syncString(NEW_CHAR_STATS);
+  file.syncString(NAME_FOR_NEW_CHARACTER);
+  file.syncString(SELECT_CLASS_BEFORE_SAVING);
+  file.syncString(EXCHANGE_ATTR_WITH);
+  file.syncNumbers((const int*)NEW_CHAR_SKILLS, 10);
+  file.syncNumbers((const int*)NEW_CHAR_SKILLS_OFFSET, 10);
+  file.syncNumbers((const int*)NEW_CHAR_SKILLS_LEN, 10);
+  file.syncNumbers((const int*)NEW_CHAR_RACE_SKILLS, 10);
+  file.syncNumbers((const int*)RACE_MAGIC_RESISTENCES, 5);
+  file.syncNumbers((const int*)RACE_FIRE_RESISTENCES, 5);
+  file.syncNumbers((const int*)RACE_ELECTRIC_RESISTENCES, 5);
+  file.syncNumbers((const int*)RACE_COLD_RESISTENCES, 5);
+  file.syncNumbers((const int*)RACE_ENERGY_RESISTENCES, 5);
+  file.syncNumbers((const int*)RACE_POISON_RESISTENCES, 5);
+  file.syncNumbers2D((const int*)NEW_CHARACTER_SPELLS, 10, 4);
+  file.syncString(COMBAT_DETAILS);
+  file.syncString(NOT_ENOUGH_TO_CAST);
+  file.syncStrings(SPELL_CAST_COMPONENTS, 2);
+  file.syncString(CAST_SPELL_DETAILS);
+  file.syncString(PARTY_FOUND);
+  file.syncString(BACKPACKS_FULL_PRESS_KEY);
+  file.syncString(HIT_A_KEY);
+  file.syncString(GIVE_TREASURE_FORMATTING);
+  file.syncString(X_FOUND_Y);
+  file.syncString(ON_WHO);
+  file.syncString(WHICH_ELEMENT1);
+  file.syncString(WHICH_ELEMENT2);
+  file.syncString(DETECT_MONSTERS);
+  file.syncString(LLOYDS_BEACON);
+  file.syncString(HOW_MANY_SQUARES);
+  file.syncString(TOWN_PORTAL);
+  file.syncString(TOWN_PORTAL_SWORDS);
+  file.syncNumbers2D((const int*)TOWN_MAP_NUMBERS, 3, 5);
+  file.syncString(MONSTER_DETAILS);
+  file.syncStrings(MONSTER_SPECIAL_ATTACKS, 23);
+  file.syncString(IDENTIFY_MONSTERS);
+  file.syncStrings(EVENT_SAMPLES, 6);
+  file.syncString(MOONS_NOT_ALIGNED);
+  file.syncString(AWARDS_FOR);
+  file.syncString(AWARDS_TEXT);
+  file.syncString(NO_AWARDS);
+  file.syncString(WARZONE_BATTLE_MASTER);
+  file.syncString(WARZONE_MAXED);
+  file.syncString(WARZONE_LEVEL);
+  file.syncString(WARZONE_HOW_MANY);
+  file.syncString(PICKS_THE_LOCK);
+  file.syncString(UNABLE_TO_PICK_LOCK);
+  file.syncString(CONTROL_PANEL_TEXT);
+  file.syncString(CONTROL_PANEL_BUTTONS);
+  file.syncString(ON);
+  file.syncString(OFF);
+  file.syncString(CONFIRM_QUIT);
+  file.syncString(MR_WIZARD);
+  file.syncString(NO_LOADING_IN_COMBAT);
+  file.syncString(NO_SAVING_IN_COMBAT);
+  file.syncString(QUICK_FIGHT_TEXT);
+  file.syncStrings(QUICK_FIGHT_OPTIONS, 4);
+  file.syncStrings(WORLD_END_TEXT, 9);
+  file.syncString(WORLD_CONGRATULATIONS);
+  file.syncString(WORLD_CONGRATULATIONS2);
+  file.syncString(CLOUDS_CONGRATULATIONS1);
+  file.syncString(CLOUDS_CONGRATULATIONS2);
+  file.syncStrings(GOOBER, 3);
+  file.syncStrings(MUSIC_FILES1, 5);
+  file.syncStrings2D((const char* const*)MUSIC_FILES2, 6, 7);
+  file.syncString(DIFFICULTY_TEXT);
+  file.syncString(SAVE_OFF_LIMITS);
+  file.syncString(CLOUDS_INTRO1);
+  file.syncString(DARKSIDE_ENDING1);
+  file.syncString(DARKSIDE_ENDING2);
+  file.syncString(PHAROAH_ENDING_TEXT1);
+  file.syncString(PHAROAH_ENDING_TEXT2);
+
+  cc.add("CONSTANTS", file);
 }


Commit: 66097d4e394779f627e34d089b845ba814b11f52
    https://github.com/scummvm/scummvm/commit/66097d4e394779f627e34d089b845ba814b11f52
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Added plural forms for "days" in char info

Changed paths:
    devtools/create_xeen/constants.cpp
    dists/engine-data/xeen.ccs
    engines/xeen/dialogs/dialogs_char_info.cpp
    engines/xeen/dialogs/dialogs_char_info.h
    engines/xeen/dialogs/dialogs_items.cpp
    engines/xeen/font.cpp
    engines/xeen/resources.cpp
    engines/xeen/resources.h


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index 97a2d4f88d..a5a1c8bb88 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -1295,6 +1295,8 @@ static const char* const CHARACTER_DETAILS =
   "\x3""l\t131\f15%u\fd\t196\f%02u%s\fd"
   "\t245%s%s%s%s\fd";
 
+static const char *const RU_DAYS[3] = { "¤¥­ì", "¤­ï", "¤­¥©" };
+
 static const char* const PARTY_GOLD = "‡®«®â®";
 
 static const char* const PLUS_14 = "\f14+";
@@ -1711,6 +1713,8 @@ static const char* const BUY_X_FOR_Y_GOLD =
 static const char* const SELL_X_FOR_Y_GOLD =
   "\x3""l\v000\t000\fdà®¤ âì %s\fd §  %lu §®«®â%s?";
 
+static const char *const RU_SELL_X_FOR_Y_GOLD_ENDINGS[2] = { "®©", "ëå" };
+
 static const char* const NO_NEED_OF_THIS =
   "\v005\x3""c\fd á ­¥ ¨­â¥à¥áã¥â %s\fd!";
 
@@ -2335,6 +2339,7 @@ void writeConstants(CCArchive& cc) {
   file.syncString(SWORDS_GAME_TEXT);
   file.syncStrings(WEEK_DAY_STRINGS, 10);
   file.syncString(CHARACTER_DETAILS);
+  file.syncStrings(RU_DAYS, 3);
   file.syncString(PARTY_GOLD);
   file.syncString(PLUS_14);
   file.syncString(CHARACTER_TEMPLATE);
@@ -2420,6 +2425,7 @@ void writeConstants(CCArchive& cc) {
   file.syncStrings(CATEGORY_BACKPACK_IS_FULL, 4);
   file.syncString(BUY_X_FOR_Y_GOLD);
   file.syncString(SELL_X_FOR_Y_GOLD);
+  file.syncStrings(RU_SELL_X_FOR_Y_GOLD_ENDINGS, 2);
   file.syncString(NO_NEED_OF_THIS);
   file.syncString(NOT_RECHARGABLE);
   file.syncString(SPELL_FAILED);
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index 9737dcf0e2..1aeeeeda89 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/dialogs/dialogs_char_info.cpp b/engines/xeen/dialogs/dialogs_char_info.cpp
index d4ac7d7ea7..fe64ce8aed 100644
--- a/engines/xeen/dialogs/dialogs_char_info.cpp
+++ b/engines/xeen/dialogs/dialogs_char_info.cpp
@@ -20,6 +20,7 @@
  *
  */
 
+#include "common/config-manager.h"
 #include "xeen/dialogs/dialogs_awards.h"
 #include "xeen/dialogs/dialogs_char_info.h"
 #include "xeen/dialogs/dialogs_exchange.h"
@@ -277,6 +278,17 @@ void CharacterInfo::addButtons() {
 	addPartyButtons(_vm);
 }
 
+int CharacterInfo::getRuDays(int val) {
+	int i = val % 100;
+	if (i < 5 || i > 20) switch (val % 10) {
+	case 1: return 0;
+	case 2: 
+	case 3: 
+	case 4: return 1;
+	}
+	return 2;
+}
+
 Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
 	Condition condition = c.worstCondition();
 	Party &party = *_vm->_party;
@@ -290,7 +302,39 @@ Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
 		c._energyResistence._permanent + c.itemScan(15) + c._energyResistence._temporary +
 		c._magicResistence._permanent + c.itemScan(16) + c._magicResistence._temporary;
 
-	return Common::String::format(Res.CHARACTER_DETAILS,
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		return Common::String::format(Res.CHARACTER_DETAILS,
+			Res.PARTY_GOLD, c._name.c_str(), Res.SEX_NAMES[c._sex],
+			Res.RACE_NAMES[c._race], Res.CLASS_NAMES[c._class],
+			c.statColor(c.getStat(MIGHT), c.getStat(MIGHT, true)), c.getStat(MIGHT),
+			c.statColor(c.getStat(ACCURACY), c.getStat(ACCURACY, true)), c.getStat(ACCURACY),
+			c.statColor(c._currentHp, c.getMaxHP()), c._currentHp,
+			c.getCurrentExperience(),
+			c.statColor(c.getStat(INTELLECT), c.getStat(INTELLECT, true)), c.getStat(INTELLECT),
+			c.statColor(c.getStat(LUCK), c.getStat(LUCK, true)), c.getStat(LUCK),
+			c.statColor(c._currentSp, c.getMaxSP()), c._currentSp,
+			party._gold,
+			c.statColor(c.getStat(PERSONALITY), c.getStat(PERSONALITY, true)), c.getStat(PERSONALITY),
+			c.statColor(c.getAge(), c.getAge(true)), c.getAge(),
+			totalResist,
+			party._gems,
+			c.statColor(c.getStat(ENDURANCE), c.getStat(ENDURANCE, true)), c.getStat(ENDURANCE),
+			c.statColor(c.getCurrentLevel(), c._level._permanent), c.getCurrentLevel(),
+			c.getNumSkills(),
+			foodVal,
+			Res.RU_DAYS[getRuDays(foodVal)],
+			c.statColor(c.getStat(SPEED), c.getStat(SPEED, true)), c.getStat(SPEED),
+			c.statColor(c.getArmorClass(), c.getArmorClass(true)), c.getArmorClass(),
+			c.getNumAwards(),
+			Res.CONDITION_COLORS[condition], Res.CONDITION_NAMES[condition],
+			condition == NO_CONDITION && party._blessed ? Res.PLUS_14 : "",
+			condition == NO_CONDITION && party._powerShield ? Res.PLUS_14 : "",
+			condition == NO_CONDITION && party._holyBonus ? Res.PLUS_14 : "",
+			condition == NO_CONDITION && party._heroism ? Res.PLUS_14 : ""
+		);
+	}
+
+	return  Common::String::format(Res.CHARACTER_DETAILS,
 		Res.PARTY_GOLD, c._name.c_str(), Res.SEX_NAMES[c._sex],
 		Res.RACE_NAMES[c._race], Res.CLASS_NAMES[c._class],
 		c.statColor(c.getStat(MIGHT), c.getStat(MIGHT, true)), c.getStat(MIGHT),
diff --git a/engines/xeen/dialogs/dialogs_char_info.h b/engines/xeen/dialogs/dialogs_char_info.h
index 6dc7eaa51a..8abbb5d4bd 100644
--- a/engines/xeen/dialogs/dialogs_char_info.h
+++ b/engines/xeen/dialogs/dialogs_char_info.h
@@ -49,6 +49,11 @@ private:
 	 */
 	void addButtons();
 
+	/**
+	 * Get russian day/days form id
+	 */
+	int getRuDays(int val);
+
 	/**
 	 * Return a string containing the details of the character
 	 */
diff --git a/engines/xeen/dialogs/dialogs_items.cpp b/engines/xeen/dialogs/dialogs_items.cpp
index da3b9cb1ca..454af251be 100644
--- a/engines/xeen/dialogs/dialogs_items.cpp
+++ b/engines/xeen/dialogs/dialogs_items.cpp
@@ -20,6 +20,7 @@
  *
  */
 
+#include "common/config-manager.h"
 #include "xeen/dialogs/dialogs_items.h"
 #include "xeen/dialogs/dialogs_query.h"
 #include "xeen/dialogs/dialogs_quests.h"
@@ -889,6 +890,8 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 				Common::String desc = c._items[category].getFullDescription(itemIndex);
 				Common::String msg = Common::String::format(Res.SELL_X_FOR_Y_GOLD,
 					desc.c_str(), cost);
+				if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) 
+					msg += Res.RU_SELL_X_FOR_Y_GOLD_ENDINGS[cost % 10 == 1 ? 0 : 1];
 
 				if (Confirm::show(_vm, msg)) {
 					// Remove the sold item and add gold to the party's total
diff --git a/engines/xeen/font.cpp b/engines/xeen/font.cpp
index de1bfdfacf..6f471e8fa7 100644
--- a/engines/xeen/font.cpp
+++ b/engines/xeen/font.cpp
@@ -311,8 +311,7 @@ void FontSurface::writeCharacter(char c, const Common::Rect &clipRect) {
 }
 
 char FontSurface::getNextChar() {
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language")))
-		return *_displayString++;
+	if (Common::RU_RUS == lang) return *_displayString++;
 	return *_displayString++ & 0x7f;
 }
 
diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp
index 8979cf53b2..a14198736f 100644
--- a/engines/xeen/resources.cpp
+++ b/engines/xeen/resources.cpp
@@ -212,6 +212,7 @@ void Resources::loadData() {
 	file.syncString(SWORDS_GAME_TEXT);
 	file.syncStrings(WEEK_DAY_STRINGS, 10);
 	file.syncString(CHARACTER_DETAILS);
+	file.syncStrings(RU_DAYS, 3);
 	file.syncString(PARTY_GOLD);
 	file.syncString(PLUS_14);
 	file.syncString(CHARACTER_TEMPLATE);
@@ -297,6 +298,7 @@ void Resources::loadData() {
 	file.syncStrings(CATEGORY_BACKPACK_IS_FULL, 4);
 	file.syncString(BUY_X_FOR_Y_GOLD);
 	file.syncString(SELL_X_FOR_Y_GOLD);
+	file.syncStrings(RU_SELL_X_FOR_Y_GOLD_ENDINGS, 2);
 	file.syncString(NO_NEED_OF_THIS);
 	file.syncString(NOT_RECHARGABLE);
 	file.syncString(SPELL_FAILED);
diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h
index 8a450ad062..6785d43fae 100644
--- a/engines/xeen/resources.h
+++ b/engines/xeen/resources.h
@@ -267,6 +267,7 @@ public:
 	const char *SWORDS_GAME_TEXT;
 	const char *WEEK_DAY_STRINGS[10];
 	const char *CHARACTER_DETAILS;
+	const char *RU_DAYS[3];
 	const char *PARTY_GOLD;
 	const char *PLUS_14;
 	const char *CHARACTER_TEMPLATE;
@@ -352,6 +353,7 @@ public:
 	const char *CATEGORY_BACKPACK_IS_FULL[4];
 	const char *BUY_X_FOR_Y_GOLD;
 	const char *SELL_X_FOR_Y_GOLD;
+	const char *RU_SELL_X_FOR_Y_GOLD_ENDINGS[2];
 	const char *NO_NEED_OF_THIS;
 	const char *NOT_RECHARGABLE;
 	const char *SPELL_FAILED;


Commit: 3d6371c4f09f0890bec622115f2a774ea03b103c
    https://github.com/scummvm/scummvm/commit/3d6371c4f09f0890bec622115f2a774ea03b103c
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Working on 8-bit font

Changed paths:
    dists/engine-data/xeen.ccs
    engines/xeen/font.cpp


diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index 1aeeeeda89..cf31cec898 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/font.cpp b/engines/xeen/font.cpp
index 6f471e8fa7..de1bfdfacf 100644
--- a/engines/xeen/font.cpp
+++ b/engines/xeen/font.cpp
@@ -311,7 +311,8 @@ void FontSurface::writeCharacter(char c, const Common::Rect &clipRect) {
 }
 
 char FontSurface::getNextChar() {
-	if (Common::RU_RUS == lang) return *_displayString++;
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language")))
+		return *_displayString++;
 	return *_displayString++ & 0x7f;
 }
 


Commit: f25b9c9c58b5cf24d5d35ecf3194422a3bce7936
    https://github.com/scummvm/scummvm/commit/f25b9c9c58b5cf24d5d35ecf3194422a3bce7936
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Move plural forms to constants

Changed paths:
    devtools/create_xeen/constants.cpp


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index a5a1c8bb88..97a2d4f88d 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -1295,8 +1295,6 @@ static const char* const CHARACTER_DETAILS =
   "\x3""l\t131\f15%u\fd\t196\f%02u%s\fd"
   "\t245%s%s%s%s\fd";
 
-static const char *const RU_DAYS[3] = { "¤¥­ì", "¤­ï", "¤­¥©" };
-
 static const char* const PARTY_GOLD = "‡®«®â®";
 
 static const char* const PLUS_14 = "\f14+";
@@ -1713,8 +1711,6 @@ static const char* const BUY_X_FOR_Y_GOLD =
 static const char* const SELL_X_FOR_Y_GOLD =
   "\x3""l\v000\t000\fdà®¤ âì %s\fd §  %lu §®«®â%s?";
 
-static const char *const RU_SELL_X_FOR_Y_GOLD_ENDINGS[2] = { "®©", "ëå" };
-
 static const char* const NO_NEED_OF_THIS =
   "\v005\x3""c\fd á ­¥ ¨­â¥à¥áã¥â %s\fd!";
 
@@ -2339,7 +2335,6 @@ void writeConstants(CCArchive& cc) {
   file.syncString(SWORDS_GAME_TEXT);
   file.syncStrings(WEEK_DAY_STRINGS, 10);
   file.syncString(CHARACTER_DETAILS);
-  file.syncStrings(RU_DAYS, 3);
   file.syncString(PARTY_GOLD);
   file.syncString(PLUS_14);
   file.syncString(CHARACTER_TEMPLATE);
@@ -2425,7 +2420,6 @@ void writeConstants(CCArchive& cc) {
   file.syncStrings(CATEGORY_BACKPACK_IS_FULL, 4);
   file.syncString(BUY_X_FOR_Y_GOLD);
   file.syncString(SELL_X_FOR_Y_GOLD);
-  file.syncStrings(RU_SELL_X_FOR_Y_GOLD_ENDINGS, 2);
   file.syncString(NO_NEED_OF_THIS);
   file.syncString(NOT_RECHARGABLE);
   file.syncString(SPELL_FAILED);


Commit: cfcf36383fcc2d7738cc3b9f4b62c555e14ef641
    https://github.com/scummvm/scummvm/commit/cfcf36383fcc2d7738cc3b9f4b62c555e14ef641
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Added plural forms for "days"

Changed paths:
    devtools/create_xeen/constants.cpp
    dists/engine-data/xeen.ccs
    engines/xeen/font.cpp


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index 97a2d4f88d..a5a1c8bb88 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -1295,6 +1295,8 @@ static const char* const CHARACTER_DETAILS =
   "\x3""l\t131\f15%u\fd\t196\f%02u%s\fd"
   "\t245%s%s%s%s\fd";
 
+static const char *const RU_DAYS[3] = { "¤¥­ì", "¤­ï", "¤­¥©" };
+
 static const char* const PARTY_GOLD = "‡®«®â®";
 
 static const char* const PLUS_14 = "\f14+";
@@ -1711,6 +1713,8 @@ static const char* const BUY_X_FOR_Y_GOLD =
 static const char* const SELL_X_FOR_Y_GOLD =
   "\x3""l\v000\t000\fdà®¤ âì %s\fd §  %lu §®«®â%s?";
 
+static const char *const RU_SELL_X_FOR_Y_GOLD_ENDINGS[2] = { "®©", "ëå" };
+
 static const char* const NO_NEED_OF_THIS =
   "\v005\x3""c\fd á ­¥ ¨­â¥à¥áã¥â %s\fd!";
 
@@ -2335,6 +2339,7 @@ void writeConstants(CCArchive& cc) {
   file.syncString(SWORDS_GAME_TEXT);
   file.syncStrings(WEEK_DAY_STRINGS, 10);
   file.syncString(CHARACTER_DETAILS);
+  file.syncStrings(RU_DAYS, 3);
   file.syncString(PARTY_GOLD);
   file.syncString(PLUS_14);
   file.syncString(CHARACTER_TEMPLATE);
@@ -2420,6 +2425,7 @@ void writeConstants(CCArchive& cc) {
   file.syncStrings(CATEGORY_BACKPACK_IS_FULL, 4);
   file.syncString(BUY_X_FOR_Y_GOLD);
   file.syncString(SELL_X_FOR_Y_GOLD);
+  file.syncStrings(RU_SELL_X_FOR_Y_GOLD_ENDINGS, 2);
   file.syncString(NO_NEED_OF_THIS);
   file.syncString(NOT_RECHARGABLE);
   file.syncString(SPELL_FAILED);
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index cf31cec898..1aeeeeda89 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/font.cpp b/engines/xeen/font.cpp
index de1bfdfacf..6f471e8fa7 100644
--- a/engines/xeen/font.cpp
+++ b/engines/xeen/font.cpp
@@ -311,8 +311,7 @@ void FontSurface::writeCharacter(char c, const Common::Rect &clipRect) {
 }
 
 char FontSurface::getNextChar() {
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language")))
-		return *_displayString++;
+	if (Common::RU_RUS == lang) return *_displayString++;
 	return *_displayString++ & 0x7f;
 }
 


Commit: 516f8d8824f98206833ce7fd9206035198fcf292
    https://github.com/scummvm/scummvm/commit/516f8d8824f98206833ce7fd9206035198fcf292
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Combine multiple language constants in one ccs file

Changed paths:
    devtools/create_xeen/clouds.cpp
    devtools/create_xeen/constants.cpp
    devtools/create_xeen/create_xeen.cpp
    dists/engine-data/xeen.ccs
    engines/xeen/dialogs/dialogs_char_info.cpp
    engines/xeen/dialogs/dialogs_char_info.h
    engines/xeen/files.cpp
    engines/xeen/font.cpp
    engines/xeen/font.h
    engines/xeen/resources.cpp
    engines/xeen/resources.h


diff --git a/devtools/create_xeen/clouds.cpp b/devtools/create_xeen/clouds.cpp
index f8aba7b7d6..ee3051614e 100644
--- a/devtools/create_xeen/clouds.cpp
+++ b/devtools/create_xeen/clouds.cpp
@@ -32,6 +32,7 @@
 #include "file.h"
 #include "clouds.h"
 
+
 static const char *const MAP_NAMES[86] = {
 	"", "Area A1", "Area A2", "Area A3", "Area A4", "Area B1", "Area B2",
 	"Area B3", "Area B4", "Area C1", "Area C2", "Area C3", "Area C4",
diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index a5a1c8bb88..0d89a09c42 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -20,7 +20,7 @@
  *
  */
 
-// Disable symbol overrides so that we can use system headers.
+ // Disable symbol overrides so that we can use system headers.
 #define FORBIDDEN_SYMBOL_ALLOW_ALL
 
 // HACK to allow building with the SDL backend on MinGW
@@ -29,6 +29,7 @@
 #undef main
 #endif // main
 
+#include "common/language.h"
 #include "file.h"
 #include "constants.h"
 
@@ -60,2483 +61,5178 @@ enum MagicSpell {
   NO_SPELL = 76
 };
 
-static const char* const CLOUDS_CREDITS =
-  "\v012\t000\x3""c\f35ˆ¤¥ï ¨ à㪮¢®¤á⢮ ¯à®¥ªâ®¬:\n"
-  "\f17„¦®­ ‚ ­ Š ­¥£¥¬\x3""l\n"
-  "\n"
-  "\t025\f35à®£à ¬¬¨áâë:\n"
-  "\t035\f17Œ àª Š®«¤ãí««\n"
-  "\t035„¥©¢ •íâíãí©\n"
-  "\n"
-  "\t025\f35€ã¤¨®á¨á⥬  ¨ §¢ãª:\n"
-  "\t035\f17’®¤¤ •¥­¤à¨ªá\n"
-  "\n"
-  "\t025\f35Œã§ëª  ¨ à¥çì:\n"
-  "\t035\f17’¨¬ ’ ««¨\n"
-  "\n"
-  "\t025\f35‘業 à¨©:\n"
-  "\t035\f17®«  â­¥à\n"
-  "\t035„¥¡¡¨ Œñàä¨\n"
-  "\t035„¦®­ ‚ ­ Š ­¥£¥¬\v012\n"
-  "\n"
-  "\n"
-  "\t180\f35•㤮¦­¨ª¨:\n"
-  "\t190\f17‹ã¨ „¦®­á®­\n"
-  "\t190„¦®­ â ­ . ƒ¢¨­\n"
-  "\t190®­¨â  ‹®­£-•¥¬á â\n"
-  "\t190„¦ã«¨ï “« ­®\n"
-  "\t190¨ª à¤®  àà¥à \n"
-  "\n"
-  "\t180\f35’¥áâ¥àë:\n"
-  "\t190\f17¥­¤¦ ¬¨­ ¥­â\n"
-  "\t190Œ à¨® áª ¬¨«« \n"
-  "\t190¨ç à¤ á¯¨\n"
-  "\t190‘ª®ââ Œ ª¤í­¨¥«\n"
-  "\t190Š«¥©â®­ ¥â§¥à\n"
-  "\t190Œ ©ª« ‘ã à¥á\x3""c";
-
-static const char* const DARK_SIDE_CREDITS =
-  "\v012\t000\x3""c\f35Designed and Directed By:\n"
-  "\f17Jon Van Caneghem\x3l\n"
-  "\n"
-  "\t025\f35Programming:\n"
-  "\t035\f17Mark Caldwell\n"
-  "\t035Dave Hathaway\n"
-  "\n"
-  "\t025\f35Sound System & FX:\n"
-  "\t035\f17Mike Heilemann\n"
-  "\n"
-  "\t025\f35Music & Speech:\n"
-  "\t035\f17Tim Tully\n"
-  "\n"
-  "\t025\f35Writing:\n"
-  "\t035\f17Paul Rattner\n"
-  "\t035Debbie Van Caneghem\n"
-  "\t035Jon Van Caneghem\v012\n"
-  "\n"
-  "\n"
-  "\t180\f35Graphics:\n"
-  "\t190\f17Jonathan P. Gwyn\n"
-  "\t190Bonita Long-Hemsath\n"
-  "\t190Julia Ulano\n"
-  "\t190Ricardo Barrera\n"
-  "\n"
-  "\t180\f35Testing:\n"
-  "\t190\f17Benjamin Bent\n"
-  "\t190Christian Dailey\n"
-  "\t190Mario Escamilla\n"
-  "\t190Marco Hunter\n"
-  "\t190Robert J. Lupo\n"
-  "\t190Clayton Retzer\n"
-  "\t190David Vela\x3""c";
-
-static const char* const SWORDS_CREDITS1 =
-  "\v012\x3""c\f35Published By New World Computing, Inc.\f17\n"
-  "Developed By CATware, Inc.\x3l\n"
-  "\f01Design and Direction\t180Series Created by\n"
-  "\t020Bill Fawcett\t190John Van Caneghem\n"
-  "\n"
-  "\t010Story Contributions\t180Producer & Manual\n"
-  "\t020Ellen Guon\t190Dean Rettig\n"
-  "\n"
-  "\t010Programming & Ideas\t180Original Programming\n"
-  "\t020David Potter\t190Mark Caldwell\n"
-  "\t020Rod Retterath\t190Dave Hathaway\n"
-  "\n"
-  "\t010Manual Illustrations\t180Graphic Artists\n"
-  "\t020Todd Cameron Hamilton\t190Jonathan P. Gwyn\n"
-  "\t020James Clouse\t190Bonnie Long-Hemsath\n"
-  "\t190Julia Ulano\n"
-  "\t190Ricardo Barrera\n";
-
-static const char* const SWORDS_CREDITS2 =
-  "\f05\v012\t000\x3l\n"
-  "\t100Sound Programming\n"
-  "\t110Todd Hendrix\n"
-  "\n"
-  "\t100Music\n"
-  "\t110Tim Tully\n"
-  "\t110Quality Assurance Manager\n"
-  "\t110Peter Ryu\n"
-  "\t100Testers\n"
-  "\t110Walter Johnson\n"
-  "\t110Bryan Farina\n"
-  "\t110David Baton\n"
-  "\t110Jack Nalls\n";
-
-static const char* const OPTIONS_MENU =
-  "\r\x1\x3""c\fdŒ¥ç ¨ Œ £¨ï\n"
-  "%s Šá¨­ \x2\n"
-  "\v%.3dCopyright (c) %d NWC, Inc.\n"
-  "All Rights Reserved\x1";
-static const char* const GAME_NAMES[3] = { "Ž¡« ª ", "Darkside", "World" };
-
-static const char* const THE_PARTY_NEEDS_REST = 
-  "\v012Žâàï¤ ­ã¦¤ ¥âáï ¢ ®â¤ëå¥!";
-
-static const char* const WHO_WILL = "\x3""c\v000\t000%s\n\n%s?\n\v055F1 - F%d";
-
-static const char* const HOW_MUCH = "\x3""c‘ª®«ìª®\n\n";
-
-static const char* const WHATS_THE_PASSWORD = "\x3""cWhat's the Password?\n"
-  "\n"
-  "Please turn to page %u, go to\n"
-  "line %u, and type in word %u.\v067\t000Spaces are not counted as words or lines.  "
-  "Hyphenated words are treated as one word.  Any line that has any text is considered a line."
-  "\x3""c\v040\t000\n";
-
-static const char* const PASSWORD_INCORRECT = "\x3""c\v040\n\f32Incorrect!\fd";
-
-static const char* const IN_NO_CONDITION = 
-  "\v007%s ­¥ ¢ á®áâ®ï­¨¨ çâ®-«¨¡® ᤥ« âì!";
-
-static const char* const NOTHING_HERE = "\x3""c\v010‡¤¥áì ­¨ç¥£® ­¥â.";
-
-static const char* const TERRAIN_TYPES[6] = {
-  "town", "cave", "towr", "cstl", "dung", "scfi"
+class LangConstants {
+protected:
+	const char **_gameNames = NULL;
+	const char **_whoWillActions = NULL;
+	const char **_whoActions = NULL;
+	const char **_directionText = NULL;
+	const char **_directionTextUpper = NULL;
+	const char **_raceNames = NULL;
+	const char **_sexNames = NULL;
+	const char **_alignmentNames = NULL;
+	const char **_skillNames = NULL;
+	const char **_classNames = NULL;
+	const char **_conditionNames = NULL;
+	const char **_depositWithdrawl = NULL;
+	const char **_statNames = NULL;
+	const char **_whereNames = NULL;
+	const char **_consumableNames = NULL;
+	const char **_weekDayStrings = NULL;
+	const char **_ratingText = NULL;
+	const char **_bonusNames = NULL;
+	const char **_weaponNames = NULL;
+	const char **_armorNames = NULL;
+	const char **_accessoryNames = NULL;
+	const char **_miscNames = NULL;
+	const char **_elementalNames = NULL;
+	const char **_specialNames = NULL;
+	const char **_attributeNames = NULL;
+	const char **_effectivenessNames = NULL;
+	const char **_questItemNamesSwords = NULL;
+	const char **_questItemNames = NULL;
+	const char **_categoryNames = NULL;
+	const char **_itemActions = NULL;
+	const char **_categoryBackpackIsFull = NULL;
+	const char **_fixIdentify = NULL;
+	const char **_removeDelete = NULL;
+	const char **_spellCastComponents = NULL;
+	const char **_monsterSpecialAttacks = NULL;
+	const char **_quickFightOptions = NULL;
+	const char **_goober = NULL;
+	const char **_worldEndText = NULL;
+	const char **_days = NULL;
+	const char **_sellXForYGoldEndings = NULL;
+	
+
+public:
+	virtual const char  *CLOUDS_CREDITS() = 0;
+	virtual const char  *DARK_SIDE_CREDITS() = 0;
+	virtual const char  *SWORDS_CREDITS1() = 0;
+	virtual const char  *SWORDS_CREDITS2() = 0;
+	virtual const char  *OPTIONS_MENU() = 0;
+	virtual const char **GAME_NAMES() = 0;
+	virtual const char  *THE_PARTY_NEEDS_REST() = 0;
+	virtual const char  *WHO_WILL() = 0;
+	virtual const char  *HOW_MUCH() = 0;
+	virtual const char  *WHATS_THE_PASSWORD() = 0;
+	virtual const char  *PASSWORD_INCORRECT() = 0;
+	virtual const char  *IN_NO_CONDITION() = 0;
+	virtual const char  *NOTHING_HERE() = 0;
+
+	const char *const TERRAIN_TYPES[6] = {
+		"town", "cave", "towr", "cstl", "dung", "scfi"
+	};
+
+	const char *const OUTDOORS_WALL_TYPES[16] = {
+		nullptr, "mount", "ltree", "dtree", "grass", "snotree", "dsnotree",
+		"snomnt", "dedltree", "mount", "lavamnt", "palm", "dmount", "dedltree",
+		"dedltree", "dedltree"
+	};
+
+	const char *const SURFACE_NAMES[16] = {
+		"water.srf", "dirt.srf", "grass.srf", "snow.srf", "swamp.srf",
+		"lava.srf", "desert.srf", "road.srf", "dwater.srf", "tflr.srf",
+		"sky.srf", "croad.srf", "sewer.srf", "cloud.srf", "scortch.srf",
+		"space.srf"
+	};
+
+	virtual const char **WHO_ACTIONS() = 0;
+	virtual const char **WHO_WILL_ACTIONS() = 0;
+
+	const byte SYMBOLS[20][64] = {
+		{ // 0
+			0x00, 0x00, 0xA8, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x00, 0xA8, 0x9E, 0x9C, 0x9C, 0x9E, 0x9E, 0x9E,
+			0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0x9A, 0x9A, 0x9A, 0xAC, 0x9E, 0xAC, 0xA8, 0xA8, 0xA6, 0x97, 0x98,
+			0xAC, 0xA0, 0xAC, 0xAC, 0xA4, 0xA6, 0x98, 0x99, 0x00, 0xAC, 0xA0, 0xA0, 0xA8, 0xAC, 0x9A, 0x9A,
+			0x00, 0x00, 0xAC, 0xAC, 0xAC, 0xA4, 0x9B, 0x9A, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0x9B, 0x9B,
+		},
+		{ // 1
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+			0x99, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97,
+			0x99, 0x98, 0x98, 0x99, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+			0x9A, 0x9B, 0x9B, 0x9C, 0x9B, 0x9A, 0x9C, 0x9A, 0x9B, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x9A, 0x9B,
+		},
+		{ // 2
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+			0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x98, 0x98, 0x99, 0x98, 0x98, 0x97, 0x98, 0x98,
+			0x99, 0x98, 0x98, 0x98, 0x99, 0x99, 0x98, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+			0x9B, 0x9B, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9B, 0x99, 0x9A, 0x9B, 0x9B, 0x9A, 0x9A, 0x99, 0x9A,
+		},
+		{ // 3
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+			0x99, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x98, 0x98, 0x97, 0x97, 0x98, 0x98, 0x98, 0x98,
+			0x99, 0x99, 0x98, 0x99, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+			0x9B, 0x9C, 0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0x9C, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x9A,
+		},
+		{ // 4
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+			0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x99, 0x9A, 0x97, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
+			0x99, 0x99, 0x98, 0x99, 0x99, 0x98, 0x98, 0x98, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+			0x9A, 0x9C, 0x9B, 0x9B, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x99, 0x9B, 0x9B, 0x9A, 0x99, 0x9A, 0x9A,
+		},
+		{ // 5
+			0xA4, 0xA4, 0xA8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x9E, 0x9E, 0xA0, 0xA8, 0xAC, 0x00, 0x00,
+			0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9E, 0xAC, 0x00, 0x97, 0x97, 0x97, 0x98, 0x9C, 0x9C, 0xA0, 0xAC,
+			0x99, 0x98, 0x99, 0x99, 0x99, 0x9B, 0xA0, 0xAC, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9B, 0xA0, 0xAC,
+			0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x9A, 0x9A, 0x9B, 0x9B, 0xA4, 0xAC, 0x00,
+		},
+		{ // 6
+			0x00, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x9B, 0x99,
+			0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x98, 0x99, 0x99,
+			0x00, 0xAC, 0xA0, 0x9C, 0x9C, 0xA0, 0x9C, 0x9A, 0x00, 0x00, 0xAC, 0xA4, 0xA0, 0x99, 0x99, 0x99,
+			0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99,
+		},
+		{ // 7
+			0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+			0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x9C, 0x99, 0x99,
+			0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99,
+			0x00, 0x00, 0xAC, 0xA0, 0x9B, 0xA0, 0x9E, 0x9C, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x9C, 0x99, 0x99,
+		},
+		{ // 8
+			0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x9B, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+			0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+			0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+			0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x9C, 0x99, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x9E, 0x9C, 0x99,
+		},
+		{ // 9
+			0x00, 0x00, 0xAC, 0xA4, 0xA0, 0x9C, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x9C, 0xA0, 0x9C, 0x9A,
+			0xAC, 0xA4, 0x9C, 0x9A, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+			0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99,
+			0x00, 0xAC, 0xA4, 0x9C, 0x9A, 0x9C, 0x99, 0x99, 0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x9A, 0x99, 0x99,
+		},
+		{ // 10
+			0x99, 0x99, 0x99, 0x9A, 0xA0, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
+			0x99, 0x99, 0x9C, 0x9E, 0xA4, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x9C, 0x99, 0x9C, 0xA4, 0xAC, 0x00,
+			0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
+			0x99, 0x99, 0x99, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x9A, 0x9B, 0x9E, 0x9C, 0x9C, 0xA4, 0xAC, 0x00,
+		},
+		{ // 11
+			0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0x9E, 0xAC,
+			0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00,
+			0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
+			0x9C, 0x99, 0x99, 0x99, 0x9C, 0x9C, 0xA4, 0xAC, 0x99, 0x9E, 0x9E, 0x9C, 0x9C, 0xA0, 0xAC, 0x00,
+		},
+		{ // 12
+			0x99, 0x99, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x9B, 0x9C, 0x9E, 0x9C, 0x9C, 0xA4, 0xAC, 0x00,
+			0x99, 0x99, 0x99, 0x99, 0x99, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
+			0x99, 0x99, 0x99, 0x99, 0x9C, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xA4, 0xAC, 0x00,
+			0x99, 0x99, 0x9C, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
+		},
+		{ // 13
+			0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
+			0x99, 0x9B, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x9A, 0x99, 0x9C, 0xA0, 0xAC, 0x00,
+			0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
+			0x99, 0x99, 0x99, 0x99, 0x9A, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x9A, 0x9C, 0xA4, 0xAC, 0x00,
+		},
+		{ // 14
+			0x00, 0x00, 0xAC, 0x9E, 0x9C, 0x9C, 0x9C, 0x9B, 0x00, 0xAC, 0x9C, 0xA0, 0x9E, 0xA4, 0xA4, 0xA4,
+			0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0xAC, 0x9C, 0x9E, 0xAC, 0xA0, 0xAC, 0xA8, 0x9E, 0xA8, 0xAC, 0x99,
+			0xAC, 0x9E, 0xAC, 0xA8, 0xAC, 0x9E, 0xA4, 0xAC, 0xAC, 0xA4, 0xA0, 0xAC, 0xAC, 0xA0, 0xA4, 0xAC,
+			0x00, 0xAC, 0xA4, 0xA0, 0xA0, 0xA4, 0xAC, 0xA4, 0x00, 0x00, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+		},
+		{ // 15
+			0x9C, 0x9C, 0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+			0x9E, 0x9E, 0x9E, 0x9C, 0x9E, 0x9E, 0x9E, 0x9E, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x99, 0x98,
+			0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0x9E, 0x9E, 0xA0,
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+		},
+		{ // 16
+			0x9B, 0x9B, 0x9B, 0x9B, 0x9C, 0x9B, 0x9C, 0x9C, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+			0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9E, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
+			0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xA0, 0xA0, 0xA0, 0x9E, 0xA0, 0x9E, 0x9E, 0xA0,
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+		},
+		{ // 17
+			0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9C, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+			0x9E, 0x9E, 0x9E, 0x9C, 0x9C, 0x9C, 0x9E, 0x9E, 0x98, 0x98, 0x98, 0x99, 0x9A, 0x9A, 0x99, 0x98,
+			0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9C, 0xA0, 0x9E, 0x9E, 0xA0, 0xA0, 0xA0, 0xA0, 0x9E,
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+		},
+		{ // 18
+			0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+			0x9E, 0x9E, 0x9E, 0x9E, 0x9C, 0x9C, 0x9C, 0x9E, 0x98, 0x98, 0x98, 0x98, 0x9A, 0x9A, 0x98, 0x99,
+			0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9B, 0x9C, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0xA0, 0xA0, 0xA0,
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+		},
+		{ // 19
+			0x9C, 0x9B, 0x9C, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0x00, 0x00,
+			0x9E, 0x9E, 0x9C, 0x9C, 0x9E, 0xA0, 0xAC, 0x00, 0x99, 0x98, 0x98, 0x99, 0x9A, 0x9A, 0xA0, 0xAC,
+			0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xA0, 0xAC, 0xA0, 0xA0, 0x9E, 0xA0, 0xA0, 0xA0, 0xA0, 0xAC,
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0x00, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0x00, 0x00,
+		}
+	};
+
+	const byte TEXT_COLORS[40][4] = {
+		{0x00, 0x19, 0x19, 0x19},
+		{0x00, 0x08, 0x08, 0x08},
+		{0x00, 0x0F, 0x0F, 0x0F},
+		{0x00, 0x15, 0x15, 0x15},
+		{0x00, 0x01, 0x01, 0x01},
+		{0x00, 0x21, 0x21, 0x21},
+		{0x00, 0x26, 0x26, 0x26},
+		{0x00, 0x2B, 0x2B, 0x2B},
+		{0x00, 0x31, 0x31, 0x31},
+		{0x00, 0x36, 0x36, 0x36},
+		{0x00, 0x3D, 0x3D, 0x3D},
+		{0x00, 0x41, 0x41, 0x41},
+		{0x00, 0x46, 0x46, 0x46},
+		{0x00, 0x4C, 0x4C, 0x4C},
+		{0x00, 0x50, 0x50, 0x50},
+		{0x00, 0x55, 0x55, 0x55},
+		{0x00, 0x5D, 0x5D, 0x5D},
+		{0x00, 0x60, 0x60, 0x60},
+		{0x00, 0x65, 0x65, 0x65},
+		{0x00, 0x6C, 0x6C, 0x6C},
+		{0x00, 0x70, 0x70, 0x70},
+		{0x00, 0x75, 0x75, 0x75},
+		{0x00, 0x7B, 0x7B, 0x7B},
+		{0x00, 0x80, 0x80, 0x80},
+		{0x00, 0x85, 0x85, 0x85},
+		{0x00, 0x8D, 0x8D, 0x8D},
+		{0x00, 0x90, 0x90, 0x90},
+		{0x00, 0x97, 0x97, 0x97},
+		{0x00, 0x9D, 0x9D, 0x9D},
+		{0x00, 0xA4, 0xA4, 0xA4},
+		{0x00, 0xAB, 0xAB, 0xAB},
+		{0x00, 0xB0, 0xB0, 0xB0},
+		{0x00, 0xB6, 0xB6, 0xB6},
+		{0x00, 0xBD, 0xBD, 0xBD},
+		{0x00, 0xC0, 0xC0, 0xC0},
+		{0x00, 0xC6, 0xC6, 0xC6},
+		{0x00, 0xCD, 0xCD, 0xCD},
+		{0x00, 0xD0, 0xD0, 0xD0},
+		{0x00, 0xD6, 0xD6, 0xD6},
+		{0x00, 0xDB, 0xDB, 0xDB},
+	};
+
+	const byte TEXT_COLORS_STARTUP[40][4] = {
+		{0x00, 0x19, 0x19, 0x19},
+		{0x00, 0x08, 0x08, 0x08},
+		{0x00, 0x0F, 0x0F, 0x0F},
+		{0x00, 0x15, 0x15, 0x15},
+		{0x00, 0x01, 0x01, 0x01},
+		{0x00, 0x1F, 0x1F, 0x1F},
+		{0x00, 0x26, 0x26, 0x26},
+		{0x00, 0x2B, 0x2B, 0x2B},
+		{0x00, 0x31, 0x31, 0x31},
+		{0x00, 0x36, 0x36, 0x36},
+		{0x00, 0x3D, 0x3D, 0x3D},
+		{0x00, 0x42, 0x42, 0x42},
+		{0x00, 0x46, 0x46, 0x46},
+		{0x00, 0x4C, 0x4C, 0x4C},
+		{0x00, 0x50, 0x50, 0x50},
+		{0x00, 0x55, 0x55, 0x55},
+		{0x00, 0x5D, 0x5D, 0x5D},
+		{0x00, 0x60, 0x60, 0x60},
+		{0x00, 0x65, 0x65, 0x65},
+		{0x00, 0x6C, 0x6C, 0x6C},
+		{0x00, 0x70, 0x70, 0x70},
+		{0x00, 0x75, 0x75, 0x75},
+		{0x00, 0x7B, 0x7B, 0x7B},
+		{0x00, 0x80, 0x80, 0x80},
+		{0x00, 0x85, 0x85, 0x85},
+		{0x00, 0x8D, 0x8D, 0x8D},
+		{0x00, 0x90, 0x90, 0x90},
+		{0x00, 0x97, 0x97, 0x97},
+		{0x00, 0x9D, 0x9D, 0x9D},
+		{0x00, 0xA4, 0xA4, 0xA4},
+		{0x00, 0xAB, 0xAB, 0xAB},
+		{0x00, 0xB0, 0xB0, 0xB0},
+		{0x00, 0xB6, 0xB6, 0xB6},
+		{0x00, 0xBD, 0xBD, 0xBD},
+		{0x00, 0xC0, 0xC0, 0xC0},
+		{0x00, 0xC6, 0xC6, 0xC6},
+		{0x00, 0xCD, 0xCD, 0xCD},
+		{0x00, 0xD0, 0xD0, 0xD0},
+		{0x00, 0x19, 0x19, 0x19},
+		{0x00, 0x31, 0x31, 0x31}
+	};
+
+	virtual const char **DIRECTION_TEXT_UPPER() = 0;
+	virtual const char **DIRECTION_TEXT() = 0;
+	virtual const char **RACE_NAMES() = 0;
+
+	const int RACE_HP_BONUSES[5] = {0, -2, 1, -1, 2};
+
+	const int RACE_SP_BONUSES[5][2] = {
+		{0, 0}, {2, 0}, {-1, -1}, {1, 1}, {-2, -2}
+	};
+
+	virtual const char **ALIGNMENT_NAMES() = 0;
+	virtual const char **SEX_NAMES() = 0;
+	virtual const char **SKILL_NAMES() = 0;
+	virtual const char **CLASS_NAMES() = 0;
+
+	const int CLASS_EXP_LEVELS[10] = {
+		1500, 2000, 2000, 1500, 2000, 1000, 1500, 1500, 1500, 2000
+	};
+
+	virtual const char **CONDITION_NAMES() = 0;
+
+	const int CONDITION_COLORS[17] = {
+		9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32, 32, 6, 6, 6, 6, 15
+	};
+
+	virtual const char *GOOD() = 0;
+	virtual const char *BLESSED() = 0;
+	virtual const char *POWER_SHIELD() = 0;
+	virtual const char *HOLY_BONUS() = 0;
+	virtual const char *HEROISM() = 0;
+	virtual const char *IN_PARTY() = 0;
+	virtual const char *PARTY_DETAILS() = 0;
+	virtual const char *PARTY_DIALOG_TEXT() = 0;
+
+	const int FACE_CONDITION_FRAMES[17] = {
+		2, 2, 2, 1, 1, 4, 4, 4, 3, 2, 4, 3, 3, 5, 6, 7, 0
+	};
+
+	const int CHAR_FACES_X[6] = {10, 45, 81, 117, 153, 189};
+
+	const int HP_BARS_X[6] = {13, 50, 86, 122, 158, 194};
+
+	virtual const char *NO_ONE_TO_ADVENTURE_WITH() = 0;
+	virtual const char *YOUR_ROSTER_IS_FULL() = 0;
+
+	const byte DARKNESS_XLAT[3][256] = {
+		{
+		0, 25, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		60, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		76, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		92, 93, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		108, 109, 110, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		124, 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		140, 141, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		168, 169, 170, 171, 172, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		204, 205, 206, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		220, 221, 222, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		236, 237, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		252, 253, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+		}, {
+		0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
+		56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+		72, 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0,
+		88, 89, 90, 91, 92, 93, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0,
+		104, 105, 106, 107, 108, 109, 110, 111, 0, 0, 0, 0, 0, 0, 0, 0,
+		120, 121, 122, 123, 124, 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0,
+		136, 137, 138, 139, 140, 141, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0,
+		160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		184, 185, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0,
+		200, 201, 202, 203, 204, 205, 206, 207, 0, 0, 0, 0, 0, 0, 0, 0,
+		216, 217, 218, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 0, 0, 0,
+		232, 233, 234, 235, 236, 237, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0,
+		248, 249, 250, 251, 252, 253, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0
+		}, {
+		0, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+		24, 25, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+		36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
+		52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0,
+		68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, 0,
+		84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 0, 0, 0, 0,
+		100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 0, 0, 0, 0,
+		116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0, 0, 0, 0,
+		132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 0, 0, 0, 0,
+		152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+		168, 169, 170, 171, 172, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0,
+		180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0,
+		196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 0, 0, 0,
+		212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 0, 0, 0, 0,
+		228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 0, 0, 0, 0,
+		244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 0, 0, 0, 0
+		}
+	};
+
+	virtual const char *PLEASE_WAIT() = 0;
+	virtual const char *OOPS() = 0;
+
+	const int SCREEN_POSITIONING_X[4][48] = {
+		{
+		-1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
+		-1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
+		-1, -1,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,
+		-3, -2, -1,  0,  0,  1,  2,  3, -4,  4,  0,  0
+		}, {
+		 0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
+		 2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
+		 3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
+		 4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  0,  1
+		}, {
+		 1,  0,  0,  0, -1,  1,  0,  0,  0, -1,  2,  1,
+		 1,  0,  0,  0, -1, -1, -2,  4,  3,  3,  2,  2,
+		 1,  1,  0,  0,  0, -1, -1, -2, -2, -3, -3, -4,
+		 3,  2,  1,  0,  0, -1, -2, -3,  4, -4,  0,  0
+		}, {
+		 0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -2, -2,
+		-2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3,
+		-3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
+		-4, -4, -4, -4, -4, -4, -4, -4, -4, -4,  0, -1
+		}
+	};
+
+	const int SCREEN_POSITIONING_Y[4][48] = {
+		{
+		 0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
+		 2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
+		 3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
+		 4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  0,  1
+		}, {
+		 1,  0,  0,  0, -1,  1,  0,  0,  0, -1,  2,  1,
+		 1,  0,  0,  0, -1, -1, -2,  4,  3,  3,  2,  2,
+		 1,  1,  0,  0,  0, -1, -1, -2, -2, -3, -3, -4,
+		 3,  2,  1,  0,  0, -1, -2, -3,  4, -4,  0,  0
+		}, {
+		 0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -2, -2,
+		-2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3,
+		-3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
+		-4, -4, -4, -4, -4, -4, -4, -4, -4, -4,  0, -1
+		}, {
+		-1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
+		-1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
+		-1, -1,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,
+		-3, -2, -1,  0,  0,  1,  2,  3, -4,  4,  0,  0
+		}
+	};
+
+	const int MONSTER_GRID_BITMASK[12] = {
+		0xC, 8, 4, 0, 0xF, 0xF000, 0xF00, 0xF0, 0xF00, 0xF0, 0x0F, 0xF000
+	};
+
+	const int INDOOR_OBJECT_X[2][12] = {
+		{ -5, -7, -112, 98, -8, -65, 49, -9, -34, 16, -58, 40 },
+		{ -35, -35, -142, 68, -35, -95, 19, -35, -62, -14, -98, 16 }
+	};
+
+	const int MAP_OBJECT_Y[2][12] = {
+		{ 2, 25, 25, 25, 50, 50, 50, 58, 58, 58, 58, 58 },
+		{ -65, -6, -6, -6, 36, 36, 36, 54, 54, 54, 54, 54 }
+	};
+
+	const int INDOOR_MONSTERS_Y[4] = { 2, 34, 53, 59 };
+
+	const int OUTDOOR_OBJECT_X[2][12] = {
+		{ -5, -7, -112, 98, -8, -77, 61, -9, -43, 25, -74, 56 },
+		{ -35, -35, -142, 68, -35, -95, 19, -35, -62, -24, -98, 16 }
+	};
+
+	const int OUTDOOR_MONSTER_INDEXES[26] = {
+		42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 69, 70,
+		71, 72, 73, 74, 75, 90, 91, 92, 93, 94, 112, 115, 118
+	};
+
+	const int OUTDOOR_MONSTERS_Y[26] = {
+		59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 53, 53,
+		53, 53, 53, 53, 53, 34, 34, 34, 34, 34, 2, 2, 2
+	};
+
+	const int DIRECTION_ANIM_POSITIONS[4][4] = {
+		{ 0, 1, 2, 3 }, { 3, 0, 1, 2 }, { 2, 3, 0, 1 }, { 1, 2, 3, 0 }
+	};
+
+	const byte WALL_SHIFTS[4][48] = {
+		{
+			12, 0, 12, 8, 12, 12, 0, 12, 8, 12, 12, 0,
+			12, 0, 12, 8, 12, 8, 12, 12, 0, 12, 0, 12,
+			0, 12, 0, 12, 8, 12, 8, 12, 8, 12, 8, 12,
+			0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 4, 4
+		}, {
+			8, 12, 8, 4, 8, 8, 12, 8, 4, 8, 8, 12,
+			8, 12, 8, 4, 8, 4, 8, 8, 12, 8, 12, 8,
+			12, 8, 12, 8, 4, 8, 4, 8, 4, 8, 4, 8,
+			12, 12, 12, 12, 4, 4, 4, 4, 0, 0, 0, 0
+		}, {
+			4, 8, 4, 0, 4, 4, 8, 4, 0, 4, 4, 8,
+			4, 8, 4, 0, 4, 0, 4, 4, 8, 4, 8, 4,
+			8, 4, 8, 4, 0, 4, 0, 4, 0, 4, 0, 4,
+			8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 12, 12
+		}, {
+			0, 4, 0, 12, 0, 0, 4, 0, 12, 0, 0, 4,
+			0, 4, 0, 12, 0, 12, 0, 0, 4, 0, 4, 0,
+			4, 0, 4, 0, 12, 0, 12, 0, 12, 0, 12, 0,
+			4, 4, 4, 4, 12, 12, 12, 12, 0, 0, 8, 8
+		}
+	};
+
+	const int DRAW_NUMBERS[25] = {
+		36, 37, 38, 43, 42, 41,
+		39, 20, 22, 24, 33, 31,
+		29, 26, 10, 11, 18, 16,
+		13, 5, 9, 6, 0, 4, 1
+	};
+
+	const int DRAW_FRAMES[25][2] = {
+		{ 18, 24 }, { 19, 23 }, { 20, 22 }, { 24, 18 }, { 23, 19 }, { 22, 20 },
+		{ 21, 21 }, { 11, 17 }, { 12, 16 }, { 13, 15 }, { 17, 11 }, { 16, 12 },
+		{ 15, 13 }, { 14, 14 }, { 6, 10 }, { 7, 9 }, { 10, 6 }, { 9, 7 },
+		{ 8, 8 }, { 3, 5 }, { 5, 3 }, { 4, 4 }, { 0, 2 }, { 2, 0 },
+		{ 1, 1 }
+	};
+
+	const int COMBAT_FLOAT_X[8] = { -2, -1, 0, 1, 2, 1, 0, -1 };
+
+	const int COMBAT_FLOAT_Y[8] = { -2, 0, 2, 0, -1, 0, 2, 0 };
+
+	const int MONSTER_EFFECT_FLAGS[15][8] = {
+		{ 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10A, 0x10B },
+		{ 0x10C, 0x10D, 0x10E, 0x10F, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x110, 0x111, 0x112, 0x113, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x114, 0x115, 0x116, 0x117, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x200, 0x201, 0x202, 0x203, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x300, 0x301, 0x302, 0x303, 0x400, 0x401, 0x402, 0x403 },
+		{ 0x500, 0x501, 0x502, 0x503, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x600, 0x601, 0x602, 0x603, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x604, 0x605, 0x606, 0x607, 0x608, 0x609, 0x60A, 0x60B },
+		{ 0x60C, 0x60D, 0x60E, 0x60F, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100 },
+		{ 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101 },
+		{ 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102 },
+		{ 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103 },
+		{ 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108 }
+	};
+
+	const int SPELLS_ALLOWED[3][40] = {
+		{
+			0, 1, 2, 3, 5, 6, 7, 8, 9, 10,
+			12, 14, 16, 23, 26, 27, 28, 30, 31, 32,
+			33, 42, 46, 48, 49, 50, 52, 55, 56, 58,
+			59, 62, 64, 65, 67, 68, 71, 73, 74, 76
+		}, {
+			1, 4, 11, 13, 15, 17, 18, 19, 20, 21,
+			22, 24, 25, 29, 34, 35, 36, 37, 38, 39,
+			40, 41, 42, 43, 44, 45, 47, 51, 53, 54,
+			57, 60, 61, 63, 66, 69, 70, 72, 75, 76
+		}, {
+			0, 1, 2, 3, 4, 5, 7, 9, 10, 20,
+			25, 26, 27, 28, 30, 31, 34, 38, 40, 41,
+			42, 43, 44, 45, 49, 50, 52, 53, 55, 59,
+			60, 61, 62, 67, 68, 72, 73, 74, 75, 76
+		}
+	};
+
+	const int BASE_HP_BY_CLASS[10] = { 10, 8, 7, 5, 4, 8, 7, 12, 6, 9 };
+
+	const int AGE_RANGES[10] = { 1, 6, 11, 18, 36, 51, 76, 101, 201, 0xffff };
+
+	const int AGE_RANGES_ADJUST[2][10] = {
+		{ -250, -50, -20, -10, 0, -2, -5, -10, -20, -50 },
+		{ -250, -50, -20, -10, 0, 2, 5, 10, 20, 50 }
+	};
+
+	const int STAT_VALUES[24] = {
+		3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 25, 30, 35, 40,
+		50, 75, 100, 125, 150, 175, 200, 225, 250, 65535
+	};
+
+	const int STAT_BONUSES[24] = {
+		-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6,
+		7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20
+	};
+
+	const int ELEMENTAL_CATEGORIES[6] = { 8, 15, 20, 25, 33, 36 };
+
+	const int ATTRIBUTE_CATEGORIES[10] = {
+		9, 17, 25, 33, 39, 45, 50, 56, 61, 72
+	};
+
+	const int ATTRIBUTE_BONUSES[72] = {
+		2, 3, 5, 8, 12, 17, 23, 30, 38, 47,	// Might bonus
+		2, 3, 5, 8, 12, 17, 23, 30,			// INT bonus
+		2, 3, 5, 8, 12, 17, 23, 30,			// PER bonus
+		2, 3, 5, 8, 12, 17, 23, 30,			// SPD bonus
+		3, 5, 10, 15, 20, 30,				// ACC bonus
+		5, 10, 15, 20, 25, 30,				// LUC bonus
+		4, 6, 10, 20, 50,					// HP bonus
+		4, 8, 12, 16, 20, 25,				// SP bonus
+		2, 4, 6, 10, 16,					// AC bonus
+		4, 6, 8, 10, 12, 14, 16, 18, 20, 25	// Thievery bonus
+	};
+
+	const int ELEMENTAL_RESISTENCES[37] = {
+		0, 5, 7, 9, 12, 15, 20, 25, 30, 5, 7, 9, 12, 15, 20, 25,
+		5, 10, 15, 20, 25, 10, 15, 20, 25, 40, 5, 7, 9, 11, 13, 15, 20, 25,
+		5, 10, 20
+	};
+
+	const int ELEMENTAL_DAMAGE[37] = {
+		0, 2, 3, 4, 5, 10, 15, 20, 30, 2, 3, 4, 5, 10, 15, 20, 2, 4, 5, 10, 20,
+		2, 4, 8, 16, 32, 2, 3, 4, 5, 10, 15, 20, 30, 5, 10, 25
+	};
+
+	const int WEAPON_DAMAGE_BASE[35] = {
+		0, 3, 2, 3, 2, 2, 4, 1, 2, 4, 2, 3,
+		2, 2, 1, 1, 1, 1, 4, 4, 3, 2, 4, 2,
+		2, 2, 5, 3, 3, 3, 3, 5, 4, 2, 6
+	};
+
+	const int WEAPON_DAMAGE_MULTIPLIER[35] = {
+		0, 3, 3, 4, 5, 4, 2, 3, 3, 3, 3, 3,
+		2, 4, 10, 6, 8, 9, 4, 3, 6, 8, 5, 6,
+		4, 5, 3, 5, 6, 7, 2, 2, 2, 2, 4
+	};
+
+	const int METAL_DAMAGE[22] = {
+		-3, -6, -4, -2, 2, 4, 6, 8, 10, 0, 1,
+		1, 2, 2, 3, 4, 5, 12, 15, 20, 30, 50
+	};
+
+	const int METAL_DAMAGE_PERCENT[22] = {
+		253, 252, 3, 2, 1, 2, 3, 4, 6, 0, 1,
+		1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10
+	};
+
+	const int METAL_LAC[22] = {
+		-3, 0, -2, -1, 1, 2, 4, 6, 8, 0, 1,
+		1, 2, 2, 3, 4, 5, 10, 12, 14, 16, 20
+	};
+
+	const int ARMOR_STRENGTHS[14] = { 0, 2, 4, 5, 6, 7, 8, 10, 4, 2, 1, 1, 1, 1 };
+
+	const int MAKE_ITEM_ARR1[6] = { 0, 8, 15, 20, 25, 33 };
+
+	const int MAKE_ITEM_ARR2[6][7][2] = {
+		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
+		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 7 }, { 7, 7 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 5 }, { 5, 5 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
+		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
+		{ { 0, 0 }, { 1, 1 }, { 1, 1 }, { 1, 2 }, { 2, 2 }, { 2, 3 }, { 3, 3 } }
+	};
+
+	const int MAKE_ITEM_ARR3[10][7][2] = {
+		{ { 0, 0 }, { 1, 4 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 10 }, { 10, 10 } },
+		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
+		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
+		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 6 }, { 6, 6 } },
+		{ { 0, 0 }, { 1, 2 }, { 2, 3 }, { 3, 4 }, { 4, 5 }, { 5, 6 }, { 6, 6 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 6 }, { 6, 6 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 4 }, { 3, 6 }, { 5, 8 }, { 7, 10 }, { 10, 10 } }
+	};
+
+	const int MAKE_ITEM_ARR4[2][7][2] = {
+		{ { 0, 0 }, { 1, 4 }, { 3, 7 }, { 4, 8 }, { 5, 9 }, { 8, 9 }, { 9, 9 } },
+		{ { 0, 0 }, { 1, 4 }, { 2, 6 }, { 4, 7 }, { 6, 10 }, { 9, 13 }, { 13, 13 } }
+	};
+
+	const int MAKE_ITEM_ARR5[8][2] = {
+		{ 0, 0 }, { 1, 15 }, { 16, 30 }, { 31, 40 }, { 41, 50 },
+		{ 51, 60 }, { 61, 73 }, { 61, 73 }
+	};
+
+	const int OUTDOOR_DRAWSTRUCT_INDEXES[44] = {
+		37, 38, 39, 40, 41, 44, 42, 43, 47, 45, 46,
+		48, 49, 52, 50, 51, 66, 67, 68, 69, 70, 71,
+		72, 75, 73, 74, 87, 88, 89, 90, 91, 94, 92,
+		93, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
+	};
+
+	const int TOWN_MAXES[2][11] = {
+		{ 23, 13, 32, 16, 26, 16, 16, 16, 16, 16, 16 },
+		{ 26, 19, 48, 27, 26, 37, 16, 16, 16, 16, 16 }
+	};
+
+	const char *const TOWN_ACTION_MUSIC[2][7] = {
+		{ "bank.m", "smith.m", "guild.m", "tavern.m",
+		"temple.m", "grounds.m", "endgame.m" },
+		{ "bank.m", "sf09.m", "guild.m", "tavern.m",
+		"temple.m", "smith.m", "endgame.m" }
+	};
+
+	const char *const TOWN_ACTION_SHAPES[7] = {
+		"bnkr", "blck", "gild", "tvrn", "tmpl", "trng", "eface08"
+	};
+
+	const int TOWN_ACTION_FILES[2][7] = {
+		{ 3, 2, 4, 2, 4, 2, 1 }, { 5, 3, 7, 5, 4, 6, 1 }
+	};
+
+	virtual const char *BANK_TEXT() = 0;
+	virtual const char *BLACKSMITH_TEXT() = 0;
+	virtual const char *GUILD_NOT_MEMBER_TEXT() = 0;
+	virtual const char *GUILD_TEXT() = 0;
+	virtual const char *TAVERN_TEXT() = 0;
+	virtual const char *FOOD_AND_DRINK() = 0;
+	virtual const char *GOOD_STUFF() = 0;
+	virtual const char *HAVE_A_DRINK() = 0;
+	virtual const char *YOURE_DRUNK() = 0;
+
+	const int TAVERN_EXIT_LIST[2][6][5][2] = {
+		{
+			{ { 21, 17 }, { 0, 0 }, { 20, 3 }, { 0, 0 }, { 0, 0 } },
+			{ { 13, 4 }, { 0, 0 }, { 19, 9 }, { 0, 0 }, { 0, 0 } },
+			{ { 20, 10 }, { 12, 8 }, { 5, 26 }, { 3, 4 }, { 7, 5 } },
+			{ { 18, 4 }, { 0, 0 }, { 19, 16 }, { 0, 0 }, { 11, 12 } },
+			{ { 15, 21 }, { 0, 0 }, { 13, 21 }, { 0, 0 }, { 0, 0 } },
+			{ { 10, 8 }, { 0, 0 }, { 15, 12 }, { 0, 0 }, { 0, 0 } },
+		}, {
+			{ { 21, 17 }, { 0, 0 }, { 20, 3 }, { 0, 0 }, { 0, 0 } },
+			{ { 13, 4 }, { 0, 0 }, { 19, 9 }, { 0, 0 }, { 0, 0 } },
+			{ { 20, 10 }, { 12, 8 }, { 5, 26 }, { 3, 4 }, { 7, 5 } },
+			{ { 17, 24 }, { 14, 13 }, { 0, 0 }, { 0, 0 }, { 9, 4 } },
+			{ { 15, 21 }, { 0, 0 }, { 13, 21 }, { 0, 0 }, { 0, 0 } },
+			{ { 10, 8 }, { 0, 0 }, { 15, 12 }, { 0, 0 }, { 0, 0 } }
+		}
+	};
+
+	virtual const char  *TEMPLE_TEXT() = 0;
+	virtual const char  *EXPERIENCE_FOR_LEVEL() = 0;
+	virtual const char  *TRAINING_LEARNED_ALL() = 0;
+	virtual const char  *ELIGIBLE_FOR_LEVEL() = 0;
+	virtual const char  *TRAINING_TEXT() = 0;
+	virtual const char  *GOLD_GEMS() = 0;
+	virtual const char  *GOLD_GEMS_2() = 0;
+	virtual const char **DEPOSIT_WITHDRAWL() = 0;
+	virtual const char  *NOT_ENOUGH_X_IN_THE_Y() = 0;
+	virtual const char  *NO_X_IN_THE_Y() = 0;
+	virtual const char **STAT_NAMES() = 0;
+	virtual const char **CONSUMABLE_NAMES() = 0;
+	virtual const char **WHERE_NAMES() = 0;
+	virtual const char  *AMOUNT() = 0;
+	virtual const char  *FOOD_PACKS_FULL() = 0;
+	virtual const char  *BUY_SPELLS() = 0;
+	virtual const char  *GUILD_OPTIONS() = 0;
+
+	const int MISC_SPELL_INDEX[74] = {
+		NO_SPELL, MS_Light, MS_Awaken, MS_MagicArrow,
+		MS_FirstAid, MS_FlyingFist, MS_EnergyBlast, MS_Sleep,
+		MS_Revitalize, MS_CureWounds, MS_Sparks, MS_Shrapmetal,
+		MS_InsectSpray, MS_ToxicCloud, MS_ProtFromElements, MS_Pain,
+		MS_Jump, MS_BeastMaster, MS_Clairvoyance, MS_TurnUndead,
+		MS_Levitate, MS_WizardEye, MS_Bless, MS_IdentifyMonster,
+		MS_LightningBolt, MS_HolyBonus, MS_PowerCure, MS_NaturesCure,
+		MS_LloydsBeacon, MS_PowerShield, MS_Heroism, MS_Hynotize,
+		MS_WalkOnWater, MS_FrostBite, MS_DetectMonster, MS_Fireball,
+		MS_ColdRay, MS_CurePoison, MS_AcidSpray, MS_TimeDistortion,
+		MS_DragonSleep, MS_CureDisease, MS_Teleport, MS_FingerOfDeath,
+		MS_CureParalysis, MS_GolemStopper, MS_PoisonVolley, MS_DeadlySwarm,
+		MS_SuperShelter, MS_DayOfProtection, MS_DayOfSorcery, MS_CreateFood,
+		MS_FieryFlail, MS_RechargeItem, MS_FantasticFreeze, MS_TownPortal,
+		MS_StoneToFlesh, MS_RaiseDead, MS_Etheralize, MS_DancingSword,
+		MS_MoonRay, MS_MassDistortion, MS_PrismaticLight, MS_EnchantItem,
+		MS_Incinerate, MS_HolyWord, MS_Resurrection, MS_ElementalStorm,
+		MS_MegaVolts, MS_Inferno, MS_SunRay, MS_Implosion,
+		MS_StarBurst, MS_DivineIntervention
+	};
+
+	const int SPELL_COSTS[77] = {
+		8, 1, 5, -2, 5, -2, 20, 10, 12, 8, 3,
+		- 3, 75, 40, 12, 6, 200, 10, 100, 30, -1, 30,
+		15, 25, 10, -2, 1, 2, 7, 20, -2, -2, 100,
+		15, 5, 100, 35, 75, 5, 20, 4, 5, 1, -2,
+		6, 2, 75, 40, 60, 6, 4, 25, -2, -2, 60,
+		- 1, 50, 15, 125, 2, -1, 3, -1, 200, 35, 150,
+		15, 5, 4, 10, 8, 30, 4, 5, 7, 5, 0
+	};
+
+	const int DARK_SPELL_RANGES[12][2] = {
+		{ 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 },
+		{ 0, 17 }, { 14, 34 }, { 26, 37 }, { 29, 39 },
+		{ 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 }
+	};
+
+	const int SWORDS_SPELL_RANGES[12][2] = {
+		{ 0, 20 },{ 16, 35 },{ 27, 39 },{ 29, 39 },
+		{ 0, 17 },{ 14, 34 },{ 26, 39 },{ 29, 39 },
+		{ 0, 20 },{ 16, 35 },{ 27, 39 },{ 29, 39 }
+	};
+
+	const int CLOUDS_GUILD_SPELLS[5][20] = {
+		{
+			1, 10, 20, 26, 27, 38, 40, 42, 45, 50,
+			55, 59, 60, 61, 62, 68, 72, 75, 77, 77
+		}, {
+			3, 4, 5, 14, 15, 25, 30, 31, 34, 41,
+			49, 51, 53, 67, 73, 75, -1, -1, -1, -1
+		}, {
+			4, 8, 9, 12, 13, 22, 23, 24, 28, 34,
+			41, 44, 52, 70, 73, 74, -1, -1, -1, -1
+		}, {
+			6, 7, 9, 11, 12, 13, 17, 21, 22, 24,
+			29, 36, 56, 58, 64, 71, -1, -1, -1, -1
+		}, {
+			6, 7, 9, 11, 12, 13, 18, 21, 29, 32,
+			36, 37, 46, 51, 56, 58, 69, -1, -1, -1
+		}
+	};
+
+	const int DARK_SPELL_OFFSETS[3][39] = {
+		{
+			42, 1, 26, 59, 27, 10, 50, 68, 55, 62, 67, 73, 2,
+			5, 3, 31, 30, 52, 49, 28, 74, 0, 9, 7, 14, 8,
+			33, 6, 23, 71, 64, 56, 48, 46, 12, 32, 58, 65, 16
+		}, {
+			42, 1, 45, 61, 72, 40, 20, 60, 38, 41, 75, 34, 4,
+			43, 25, 53, 44, 15, 70, 17, 24, 69, 22, 66, 57, 11,
+			29, 39, 51, 21, 19, 36, 47, 13, 54, 37, 18, 35, 63
+		}, {
+			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+			13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+			26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38
+		}
+	};
+
+	const int SPELL_GEM_COST[77] = {
+		0, 0, 2, 1, 2, 4, 5, 0, 0, 0, 0, 10, 10, 10, 0, 0, 20, 4, 10, 20, 1, 10,
+		5, 5, 4, 2, 0, 0, 0, 10, 3, 1, 20, 4, 0, 20, 10, 10, 1, 10, 0, 0, 0, 2,
+		2, 0, 10, 10, 10, 0, 0, 10, 3, 2, 10, 1, 10, 10, 20, 0, 0, 1, 1, 20, 5, 20,
+		5, 0, 0, 0, 0, 5, 1, 2, 0, 2, 0
+	};
+
+	virtual const char  *NOT_A_SPELL_CASTER() = 0;
+	virtual const char  *SPELLS_LEARNED_ALL() = 0;
+	virtual const char  *SPELLS_FOR() = 0;
+	virtual const char  *SPELL_LINES_0_TO_9() = 0;
+	virtual const char  *SPELLS_DIALOG_SPELLS() = 0;
+	virtual const char  *SPELL_PTS() = 0;
+	virtual const char  *GOLD() = 0;
+	virtual const char  *SPELL_INFO() = 0;
+	virtual const char  *SPELL_PURCHASE() = 0;
+	virtual const char  *MAP_TEXT() = 0;
+	virtual const char  *LIGHT_COUNT_TEXT() = 0;
+	virtual const char  *FIRE_RESISTENCE_TEXT() = 0;
+	virtual const char  *ELECRICITY_RESISTENCE_TEXT() = 0;
+	virtual const char  *COLD_RESISTENCE_TEXT() = 0;
+	virtual const char  *POISON_RESISTENCE_TEXT() = 0;
+	virtual const char  *CLAIRVOYANCE_TEXT() = 0;
+	virtual const char  *LEVITATE_TEXT() = 0;
+	virtual const char  *WALK_ON_WATER_TEXT() = 0;
+	virtual const char  *GAME_INFORMATION() = 0;
+	virtual const char  *WORLD_GAME_TEXT() = 0;
+	virtual const char  *DARKSIDE_GAME_TEXT() = 0;
+	virtual const char  *CLOUDS_GAME_TEXT() = 0;
+	virtual const char  *SWORDS_GAME_TEXT() = 0;
+	virtual const char **WEEK_DAY_STRINGS() = 0;
+	virtual const char  *CHARACTER_DETAILS() = 0;
+	virtual const char **DAYS() = 0;
+	virtual const char  *PARTY_GOLD() = 0;
+	virtual const char  *PLUS_14() = 0;
+	virtual const char  *CHARACTER_TEMPLATE() = 0;
+	virtual const char  *EXCHANGING_IN_COMBAT() = 0;
+	virtual const char  *CURRENT_MAXIMUM_RATING_TEXT() = 0;
+	virtual const char  *CURRENT_MAXIMUM_TEXT() = 0;
+	virtual const char **RATING_TEXT() = 0;
+	virtual const char  *AGE_TEXT() = 0;
+	virtual const char  *LEVEL_TEXT() = 0;
+	virtual const char  *RESISTENCES_TEXT() = 0;
+	virtual const char  *NONE() = 0;
+	virtual const char  *EXPERIENCE_TEXT() = 0;
+	virtual const char  *ELIGIBLE() = 0;
+	virtual const char  *IN_PARTY_IN_BANK() = 0;
+	virtual const char  *FOOD_TEXT() = 0;
+	virtual const char  *EXCHANGE_WITH_WHOM() = 0;
+	virtual const char  *QUICK_REF_LINE() = 0;
+	virtual const char  *QUICK_REFERENCE() = 0;
+
+	const int BLACKSMITH_MAP_IDS[2][4] = { { 28, 30, 73, 49 }, { 29, 31, 37, 43 } };
+
+	virtual const char  *ITEMS_DIALOG_TEXT1() = 0;
+	virtual const char  *ITEMS_DIALOG_TEXT2() = 0;
+	virtual const char  *ITEMS_DIALOG_LINE1() = 0;
+	virtual const char  *ITEMS_DIALOG_LINE2() = 0;
+	virtual const char  *BTN_BUY() = 0;
+	virtual const char  *BTN_SELL() = 0;
+	virtual const char  *BTN_IDENTIFY() = 0;
+	virtual const char  *BTN_FIX() = 0;
+	virtual const char  *BTN_USE() = 0;
+	virtual const char  *BTN_EQUIP() = 0;
+	virtual const char  *BTN_REMOVE() = 0;
+	virtual const char  *BTN_DISCARD() = 0;
+	virtual const char  *BTN_QUEST() = 0;
+	virtual const char  *BTN_ENCHANT() = 0;
+	virtual const char  *BTN_RECHARGE() = 0;
+	virtual const char  *BTN_GOLD() = 0;
+	virtual const char  *ITEM_BROKEN() = 0;
+	virtual const char  *ITEM_CURSED() = 0;
+	virtual const char  *ITEM_OF() = 0;
+	virtual const char **BONUS_NAMES() = 0;
+	virtual const char **WEAPON_NAMES() = 0;
+	virtual const char **ARMOR_NAMES() = 0;
+	virtual const char **ACCESSORY_NAMES() = 0;
+	virtual const char **MISC_NAMES() = 0;
+	virtual const char **SPECIAL_NAMES() = 0;
+	virtual const char **ELEMENTAL_NAMES() = 0;
+	virtual const char **ATTRIBUTE_NAMES() = 0;
+	virtual const char **EFFECTIVENESS_NAMES() = 0;
+	virtual const char **QUEST_ITEM_NAMES() = 0;
+	virtual const char **QUEST_ITEM_NAMES_SWORDS() = 0;
+
+	const int WEAPON_BASE_COSTS[35] = {
+		0, 50, 15, 100, 80, 40, 60, 1, 10, 150, 30, 60, 8, 50,
+		100, 15, 30, 15, 200, 80, 250, 150, 400, 100, 40, 120,
+		300, 100, 200, 300, 25, 100, 50, 15, 0
+	};
+	const int ARMOR_BASE_COSTS[14] = {
+		0, 20, 100, 200, 400, 600, 1000, 2000, 100, 60, 40, 250, 200, 100
+	};
+	const int ACCESSORY_BASE_COSTS[11] = {
+		0, 100, 100, 250, 100, 50, 300, 200, 500, 1000, 2000
+	};
+	const int MISC_MATERIAL_COSTS[22] = {
+		0, 50, 1000, 500, 10, 100, 20, 10, 50, 10, 10, 100,
+		1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+	};
+	const int MISC_BASE_COSTS[76] = {
+		0, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+		100, 100, 100, 100, 200, 200, 200, 200, 200, 200, 200, 200,
+		200, 200, 200, 200, 200, 200, 200, 300, 300, 300, 300, 300,
+		300, 300, 300, 300, 300, 400, 400, 400, 400, 400, 400, 400,
+		400, 400, 400, 500, 500, 500, 500, 500, 500, 500, 500, 500,
+		500, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,
+		600, 600, 600, 600
+	};
+	const int METAL_BASE_MULTIPLIERS[22] = {
+		10, 25, 5, 75, 2, 5, 10, 20, 50, 2, 3, 5, 10, 20, 30, 40,
+		50, 60, 70, 80, 90, 100
+	};
+	const int ITEM_SKILL_DIVISORS[4] = { 1, 2, 100, 10 };
+
+	const int RESTRICTION_OFFSETS[4] = { 0, 35, 49, 60 };
+
+	const int ITEM_RESTRICTIONS[86] = {
+		0, 86, 86, 86, 86, 86, 86, 0, 6, 239, 239, 239, 2, 4, 4, 4, 4,
+		6, 70, 70, 70, 70, 94, 70, 0, 4, 239, 86, 86, 86, 70, 70, 70, 70,
+		0, 0, 0, 68, 100, 116, 125, 255, 255, 85, 0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+	};
+
+	virtual const char  *NOT_PROFICIENT() = 0;
+	virtual const char  *NO_ITEMS_AVAILABLE() = 0;
+	virtual const char **CATEGORY_NAMES() = 0;
+	virtual const char  *X_FOR_THE_Y() = 0;
+	virtual const char  *X_FOR_Y() = 0;
+	virtual const char  *X_FOR_Y_GOLD() = 0;
+	virtual const char  *FMT_CHARGES() = 0;
+	virtual const char  *AVAILABLE_GOLD_COST() = 0;
+	virtual const char  *CHARGES() = 0;
+	virtual const char  *COST() = 0;
+	virtual const char **ITEM_ACTIONS() = 0;
+	virtual const char  *WHICH_ITEM() = 0;
+	virtual const char  *WHATS_YOUR_HURRY() = 0;
+	virtual const char  *USE_ITEM_IN_COMBAT() = 0;
+	virtual const char  *NO_SPECIAL_ABILITIES() = 0;
+	virtual const char  *CANT_CAST_WHILE_ENGAGED() = 0;
+	virtual const char  *EQUIPPED_ALL_YOU_CAN() = 0;
+	virtual const char  *REMOVE_X_TO_EQUIP_Y() = 0;
+	virtual const char  *RING() = 0;
+	virtual const char  *MEDAL() = 0;
+	virtual const char  *CANNOT_REMOVE_CURSED_ITEM() = 0;
+	virtual const char  *CANNOT_DISCARD_CURSED_ITEM() = 0;
+	virtual const char  *PERMANENTLY_DISCARD() = 0;
+	virtual const char  *BACKPACK_IS_FULL() = 0;
+	virtual const char **CATEGORY_BACKPACK_IS_FULL() = 0;
+	virtual const char  *BUY_X_FOR_Y_GOLD() = 0;
+	virtual const char  *SELL_X_FOR_Y_GOLD() = 0;
+	virtual const char **SELL_X_FOR_Y_GOLD_ENDINGS() = 0;
+	virtual const char  *NO_NEED_OF_THIS() = 0;
+	virtual const char  *NOT_RECHARGABLE() = 0;
+	virtual const char  *NOT_ENCHANTABLE() = 0;
+	virtual const char  *SPELL_FAILED() = 0;
+	virtual const char  *ITEM_NOT_BROKEN() = 0;
+	virtual const char **FIX_IDENTIFY() = 0;
+	virtual const char  *FIX_IDENTIFY_GOLD() = 0;
+	virtual const char  *IDENTIFY_ITEM_MSG() = 0;
+	virtual const char  *ITEM_DETAILS() = 0;
+	virtual const char  *ALL() = 0;
+	virtual const char  *FIELD_NONE() = 0;
+	virtual const char  *DAMAGE_X_TO_Y() = 0;
+	virtual const char  *ELEMENTAL_XY_DAMAGE() = 0;
+	virtual const char  *ATTR_XY_BONUS() = 0;
+	virtual const char  *EFFECTIVE_AGAINST() = 0;
+	virtual const char  *QUESTS_DIALOG_TEXT() = 0;
+	virtual const char  *CLOUDS_OF_XEEN_LINE() = 0;
+	virtual const char  *DARKSIDE_OF_XEEN_LINE() = 0;
+	virtual const char  *SWORDS_OF_XEEN_LINE() = 0;
+	virtual const char  *NO_QUEST_ITEMS() = 0;
+	virtual const char  *NO_CURRENT_QUESTS() = 0;
+	virtual const char  *NO_AUTO_NOTES() = 0;
+	virtual const char  *QUEST_ITEMS_DATA() = 0;
+	virtual const char  *CURRENT_QUESTS_DATA() = 0;
+	virtual const char  *AUTO_NOTES_DATA() = 0;
+	virtual const char  *REST_COMPLETE() = 0;
+	virtual const char  *PARTY_IS_STARVING() = 0;
+	virtual const char  *HIT_SPELL_POINTS_RESTORED() = 0;
+	virtual const char  *TOO_DANGEROUS_TO_REST() = 0;
+	virtual const char  *SOME_CHARS_MAY_DIE() = 0;
+	virtual const char  *DISMISS_WHOM() = 0;
+	virtual const char  *CANT_DISMISS_LAST_CHAR() = 0;
+	virtual const char  *DELETE_CHAR_WITH_ELDER_WEAPON() = 0;
+	virtual const char **REMOVE_DELETE() = 0;
+	virtual const char  *REMOVE_OR_DELETE_WHICH() = 0;
+	virtual const char  *YOUR_PARTY_IS_FULL() = 0;
+	virtual const char  *HAS_SLAYER_SWORD() = 0;
+	virtual const char  *SURE_TO_DELETE_CHAR() = 0;
+	virtual const char  *CREATE_CHAR_DETAILS() = 0;
+	virtual const char  *NEW_CHAR_STATS() = 0;
+	virtual const char  *NAME_FOR_NEW_CHARACTER() = 0;
+	virtual const char  *SELECT_CLASS_BEFORE_SAVING() = 0;
+	virtual const char  *EXCHANGE_ATTR_WITH() = 0;
+
+	const int NEW_CHAR_SKILLS[10] = { 1, 5, -1, -1, 4, 0, 0, -1, 6, 11 };
+	const int NEW_CHAR_SKILLS_OFFSET[10] = { 0, 0, 0, 5, 0, 0, 0, 0, 0, 0 };
+	const int NEW_CHAR_SKILLS_LEN[10] = { 11, 8, 0, 0, 12, 8, 8, 0, 9, 11 };
+	const int NEW_CHAR_RACE_SKILLS[10] = { 14, -1, 17, 16, -1, 0, 0, 0, 0, 0 };
+
+	const int RACE_MAGIC_RESISTENCES[5] = { 7, 5, 20, 0, 0 };
+	const int RACE_FIRE_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
+	const int RACE_ELECTRIC_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
+	const int RACE_COLD_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
+	const int RACE_ENERGY_RESISTENCES[5] = { 7, 5, 2, 5, 0 };
+	const int RACE_POISON_RESISTENCES[5] = { 7, 0, 2, 20, 0 };
+	const int NEW_CHARACTER_SPELLS[10][4] = {
+		{ -1, -1, -1, -1 },
+		{ 21, -1, -1, -1 },
+		{ 22, -1, -1, -1 },
+		{ 21, 1, 14, -1 },
+		{ 22, 0, 25, -1 },
+		{ -1, -1, -1, -1 },
+		{ -1, -1, -1, -1 },
+		{ -1, -1, -1, -1 },
+		{ 20, 1, 11, 23 },
+		{ 20, 1, -1, -1 }
+	};
+
+	virtual const char  *COMBAT_DETAILS() = 0;
+	virtual const char  *NOT_ENOUGH_TO_CAST() = 0;
+	virtual const char **SPELL_CAST_COMPONENTS() = 0;
+	virtual const char  *CAST_SPELL_DETAILS() = 0;
+	virtual const char  *PARTY_FOUND() = 0;
+	virtual const char  *BACKPACKS_FULL_PRESS_KEY() = 0;
+	virtual const char  *HIT_A_KEY() = 0;
+	virtual const char  *GIVE_TREASURE_FORMATTING() = 0;
+	virtual const char  *X_FOUND_Y() = 0;
+	virtual const char  *ON_WHO() = 0;
+	virtual const char  *WHICH_ELEMENT1() = 0;
+	virtual const char  *WHICH_ELEMENT2() = 0;
+	virtual const char  *DETECT_MONSTERS() = 0;
+	virtual const char  *LLOYDS_BEACON() = 0;
+	virtual const char  *HOW_MANY_SQUARES() = 0;
+	virtual const char  *TOWN_PORTAL() = 0;
+	virtual const char  *TOWN_PORTAL_SWORDS() = 0;
+
+	const int TOWN_MAP_NUMBERS[3][5] = {
+		{ 28, 29, 30, 31, 32 }, { 29, 31, 33, 35, 37 }, { 53, 92, 63, 0, 0 }
+	};
+
+	virtual const char  *MONSTER_DETAILS() = 0;
+	virtual const char **MONSTER_SPECIAL_ATTACKS() = 0;
+	virtual const char  *IDENTIFY_MONSTERS() = 0;
+
+	const char *const EVENT_SAMPLES[6] = {
+		"ahh.voc", "whereto.voc", "gulp.voc", "null.voc", "scream.voc", "laff1.voc"
+	};
+
+	virtual const char  *MOONS_NOT_ALIGNED() = 0;
+	virtual const char  *AWARDS_FOR() = 0;
+	virtual const char  *AWARDS_TEXT() = 0;
+	virtual const char  *NO_AWARDS() = 0;
+	virtual const char  *WARZONE_BATTLE_MASTER() = 0;
+	virtual const char  *WARZONE_MAXED() = 0;
+	virtual const char  *WARZONE_LEVEL() = 0;
+	virtual const char  *WARZONE_HOW_MANY() = 0;
+	virtual const char  *PICKS_THE_LOCK() = 0;
+	virtual const char  *UNABLE_TO_PICK_LOCK() = 0;
+	virtual const char  *CONTROL_PANEL_TEXT() = 0;
+	virtual const char  *CONTROL_PANEL_BUTTONS() = 0;
+	virtual const char  *ON() = 0;
+	virtual const char  *OFF() = 0;
+	virtual const char  *CONFIRM_QUIT() = 0;
+	virtual const char  *MR_WIZARD() = 0;
+	virtual const char  *NO_LOADING_IN_COMBAT() = 0;
+	virtual const char  *NO_SAVING_IN_COMBAT() = 0;
+	virtual const char  *QUICK_FIGHT_TEXT() = 0;
+	virtual const char **QUICK_FIGHT_OPTIONS() = 0;
+	virtual const char **WORLD_END_TEXT() = 0;
+	virtual const char  *WORLD_CONGRATULATIONS() = 0;
+	virtual const char  *WORLD_CONGRATULATIONS2() = 0;
+	virtual const char  *CLOUDS_CONGRATULATIONS1() = 0;
+	virtual const char  *CLOUDS_CONGRATULATIONS2() = 0;
+	virtual const char **GOOBER() = 0;
+
+	const char *const MUSIC_FILES1[5] = {
+		"outdoors.m", "town.m", "cavern.m", "dungeon.m", "castle.m"
+	};
+
+	const char *const MUSIC_FILES2[6][7] = {
+		{ "outday1.m", "outday2.m", "outday4.m", "outnght1.m",
+		"outnght2.m", "outnght4.m", "daydesrt.m" },
+		{ "townday1.m", "twnwlk.m", "newbrigh.m", "twnnitea.m",
+		"twnniteb.m", "twnwlk.m", "townday1.m" },
+		{ "cavern1.m", "cavern2.m", "cavern3a.m", "cavern1.m",
+		"cavern2.m", "cavern3a.m", "cavern1.m" },
+		{ "dngon1.m", "dngon2.m", "dngon3.m", "dngon1.m",
+		"dngon2.m", "dngon3.m", "dngon1.m" },
+		{ "cstl1rev.m", "cstl2rev.m", "cstl3rev.m", "cstl1rev.m",
+		"cstl2rev.m", "cstl3rev.m", "cstl1rev.m" },
+		{ "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m" }
+	};
+
+	virtual const char *DIFFICULTY_TEXT() = 0;
+	virtual const char *SAVE_OFF_LIMITS() = 0;
+	virtual const char *CLOUDS_INTRO1() = 0;
+	virtual const char *DARKSIDE_ENDING1() = 0;
+	virtual const char *DARKSIDE_ENDING2() = 0;
+	virtual const char *PHAROAH_ENDING_TEXT1() = 0;
+	virtual const char *PHAROAH_ENDING_TEXT2() = 0;
+
+	void writeConstants(Common::String num, CCArchive &cc) {
+		Common::MemFile file;
+		file.syncString(CLOUDS_CREDITS());
+		file.syncString(DARK_SIDE_CREDITS());
+		file.syncString(SWORDS_CREDITS1());
+		file.syncString(SWORDS_CREDITS2());
+		file.syncString(OPTIONS_MENU());
+		file.syncStrings(GAME_NAMES(), 3);
+		delete[] _gameNames;
+		_gameNames = NULL;
+		file.syncString(THE_PARTY_NEEDS_REST());
+		file.syncString(WHO_WILL());
+		file.syncString(HOW_MUCH());
+		file.syncString(WHATS_THE_PASSWORD());
+		file.syncString(PASSWORD_INCORRECT());
+		file.syncString(IN_NO_CONDITION());
+		file.syncString(NOTHING_HERE());
+		file.syncStrings(TERRAIN_TYPES, 6);
+		file.syncStrings(OUTDOORS_WALL_TYPES, 16);
+		file.syncStrings(SURFACE_NAMES, 16);
+		file.syncStrings(WHO_ACTIONS(), 32);
+		delete[] _whoActions;
+		_whoActions = NULL;
+		file.syncStrings(WHO_WILL_ACTIONS(), 4);
+		delete[] _whoWillActions;
+		_whoWillActions = NULL;
+		file.syncBytes2D((const byte *)SYMBOLS, 20, 64);
+		file.syncBytes2D((const byte *)TEXT_COLORS, 40, 4);
+		file.syncBytes2D((const byte *)TEXT_COLORS_STARTUP, 40, 4);
+		file.syncStrings(DIRECTION_TEXT_UPPER(), 4);
+		delete[] _directionTextUpper;
+		_directionTextUpper = NULL;
+		file.syncStrings(DIRECTION_TEXT(), 4);
+		delete[] _directionText;
+		_directionText = NULL;
+		file.syncStrings(RACE_NAMES(), 5);
+		delete[] _raceNames;
+		_raceNames = NULL;
+		file.syncNumbers(RACE_HP_BONUSES, 5);
+		file.syncNumbers2D((const int *)RACE_SP_BONUSES, 5, 2);
+		file.syncStrings(CLASS_NAMES(), 11);
+		delete[] _classNames;
+		_classNames = NULL;
+		file.syncNumbers(CLASS_EXP_LEVELS, 10);
+		file.syncStrings(ALIGNMENT_NAMES(), 3);
+		delete[] _alignmentNames;
+		_alignmentNames = NULL;
+		file.syncStrings(SEX_NAMES(), 2);
+		delete[] _sexNames;
+		_sexNames = NULL;
+		file.syncStrings(SKILL_NAMES(), 18);
+		delete[] _skillNames;
+		_skillNames = NULL;
+		file.syncStrings(CONDITION_NAMES(), 17);
+		delete[] _conditionNames;
+		_conditionNames = NULL;
+		file.syncNumbers(CONDITION_COLORS, 17);
+		file.syncString(GOOD());
+		file.syncString(BLESSED());
+		file.syncString(POWER_SHIELD());
+		file.syncString(HOLY_BONUS());
+		file.syncString(HEROISM());
+		file.syncString(IN_PARTY());
+		file.syncString(PARTY_DETAILS());
+		file.syncString(PARTY_DIALOG_TEXT());
+		file.syncNumbers(FACE_CONDITION_FRAMES, 17);
+		file.syncNumbers(CHAR_FACES_X, 6);
+		file.syncNumbers(HP_BARS_X, 6);
+		file.syncString(NO_ONE_TO_ADVENTURE_WITH());
+		file.syncBytes2D((const byte *)DARKNESS_XLAT, 3, 256);
+		file.syncString(YOUR_ROSTER_IS_FULL());
+		file.syncString(PLEASE_WAIT());
+		file.syncString(OOPS());
+		file.syncNumbers2D((const int *)SCREEN_POSITIONING_X, 4, 48);
+		file.syncNumbers2D((const int *)SCREEN_POSITIONING_Y, 4, 48);
+		file.syncNumbers(MONSTER_GRID_BITMASK, 12);
+		file.syncNumbers2D((const int *)INDOOR_OBJECT_X, 2, 12);
+		file.syncNumbers2D((const int *)MAP_OBJECT_Y, 2, 12);
+		file.syncNumbers(INDOOR_MONSTERS_Y, 4);
+		file.syncNumbers2D((const int *)OUTDOOR_OBJECT_X, 2, 12);
+		file.syncNumbers(OUTDOOR_MONSTER_INDEXES, 26);
+		file.syncNumbers(OUTDOOR_MONSTERS_Y, 26);
+		file.syncNumbers2D((const int *)DIRECTION_ANIM_POSITIONS, 4, 4);
+		file.syncBytes2D((const byte *)WALL_SHIFTS, 4, 48);
+		file.syncNumbers(DRAW_NUMBERS, 25);
+		file.syncNumbers2D((const int *)DRAW_FRAMES, 25, 2);
+		file.syncNumbers(COMBAT_FLOAT_X, 8);
+		file.syncNumbers(COMBAT_FLOAT_Y, 8);
+		file.syncNumbers2D((const int *)MONSTER_EFFECT_FLAGS, 15, 8);
+		file.syncNumbers2D((const int *)SPELLS_ALLOWED, 3, 40);
+		file.syncNumbers(BASE_HP_BY_CLASS, 10);
+		file.syncNumbers(AGE_RANGES, 10);
+		file.syncNumbers2D((const int *)AGE_RANGES_ADJUST, 2, 10);
+		file.syncNumbers(STAT_VALUES, 24);
+		file.syncNumbers(STAT_BONUSES, 24);
+		file.syncNumbers(ELEMENTAL_CATEGORIES, 6);
+		file.syncNumbers(ATTRIBUTE_CATEGORIES, 10);
+		file.syncNumbers(ATTRIBUTE_BONUSES, 72);
+		file.syncNumbers(ELEMENTAL_RESISTENCES, 37);
+		file.syncNumbers(ELEMENTAL_DAMAGE, 37);
+		file.syncNumbers(WEAPON_DAMAGE_BASE, 35);
+		file.syncNumbers(WEAPON_DAMAGE_MULTIPLIER, 35);
+		file.syncNumbers(METAL_DAMAGE, 22);
+		file.syncNumbers(METAL_DAMAGE_PERCENT, 22);
+		file.syncNumbers(METAL_LAC, 22);
+		file.syncNumbers(ARMOR_STRENGTHS, 14);
+		file.syncNumbers(MAKE_ITEM_ARR1, 6);
+		file.syncNumbers3D((const int *)MAKE_ITEM_ARR2, 6, 7, 2);
+		file.syncNumbers3D((const int *)MAKE_ITEM_ARR3, 10, 7, 2);
+		file.syncNumbers3D((const int *)MAKE_ITEM_ARR4, 2, 7, 2);
+		file.syncNumbers2D((const int *)MAKE_ITEM_ARR5, 8, 2);
+		file.syncNumbers(OUTDOOR_DRAWSTRUCT_INDEXES, 44);
+		file.syncNumbers2D((const int *)TOWN_MAXES, 2, 11);
+		file.syncStrings2D((const char *const *)TOWN_ACTION_MUSIC, 2, 7);
+		file.syncStrings(TOWN_ACTION_SHAPES, 7);
+		file.syncNumbers2D((const int *)TOWN_ACTION_FILES, 2, 7);
+		file.syncString(BANK_TEXT());
+		file.syncString(BLACKSMITH_TEXT());
+		file.syncString(GUILD_NOT_MEMBER_TEXT());
+		file.syncString(GUILD_TEXT());
+		file.syncString(TAVERN_TEXT());
+		file.syncString(GOOD_STUFF());
+		file.syncString(HAVE_A_DRINK());
+		file.syncString(YOURE_DRUNK());
+		file.syncNumbers4D((const int *)TAVERN_EXIT_LIST, 2, 6, 5, 2);
+		file.syncString(FOOD_AND_DRINK());
+		file.syncString(TEMPLE_TEXT());
+		file.syncString(EXPERIENCE_FOR_LEVEL());
+		file.syncString(TRAINING_LEARNED_ALL());
+		file.syncString(ELIGIBLE_FOR_LEVEL());
+		file.syncString(TRAINING_TEXT());
+		file.syncString(GOLD_GEMS());
+		file.syncString(GOLD_GEMS_2());
+		file.syncStrings(DEPOSIT_WITHDRAWL(), 2);
+		delete[] _depositWithdrawl;
+		_depositWithdrawl = NULL;
+		file.syncString(NOT_ENOUGH_X_IN_THE_Y());
+		file.syncString(NO_X_IN_THE_Y());
+		file.syncStrings(STAT_NAMES(), 16);
+		delete[] _statNames;
+		_statNames = NULL;
+		file.syncStrings(CONSUMABLE_NAMES(), 4);
+		delete[] _consumableNames;
+		_consumableNames = NULL;
+		file.syncStrings(WHERE_NAMES(), 2);
+		delete[] _whereNames;
+		_whereNames = NULL;
+		file.syncString(AMOUNT());
+		file.syncString(FOOD_PACKS_FULL());
+		file.syncString(BUY_SPELLS());
+		file.syncString(GUILD_OPTIONS());
+		file.syncNumbers((const int *)MISC_SPELL_INDEX, 74);
+		file.syncNumbers((const int *)SPELL_COSTS, 77);
+		file.syncNumbers2D((const int *)CLOUDS_GUILD_SPELLS, 5, 20);
+		file.syncNumbers2D((const int *)DARK_SPELL_OFFSETS, 3, 39);
+		file.syncNumbers2D((const int *)DARK_SPELL_RANGES, 12, 2);
+		file.syncNumbers2D((const int *)SWORDS_SPELL_RANGES, 12, 2);
+		file.syncNumbers((const int *)SPELL_GEM_COST, 77);
+		file.syncString(NOT_A_SPELL_CASTER());
+		file.syncString(SPELLS_LEARNED_ALL());
+		file.syncString(SPELLS_FOR());
+		file.syncString(SPELL_LINES_0_TO_9());
+		file.syncString(SPELLS_DIALOG_SPELLS());
+		file.syncString(SPELL_PTS());
+		file.syncString(GOLD());
+		file.syncString(SPELL_INFO());
+		file.syncString(SPELL_PURCHASE());
+		file.syncString(MAP_TEXT());
+		file.syncString(LIGHT_COUNT_TEXT());
+		file.syncString(FIRE_RESISTENCE_TEXT());
+		file.syncString(ELECRICITY_RESISTENCE_TEXT());
+		file.syncString(COLD_RESISTENCE_TEXT());
+		file.syncString(POISON_RESISTENCE_TEXT());
+		file.syncString(CLAIRVOYANCE_TEXT());
+		file.syncString(LEVITATE_TEXT());
+		file.syncString(WALK_ON_WATER_TEXT());
+		file.syncString(GAME_INFORMATION());
+		file.syncString(WORLD_GAME_TEXT());
+		file.syncString(DARKSIDE_GAME_TEXT());
+		file.syncString(CLOUDS_GAME_TEXT());
+		file.syncString(SWORDS_GAME_TEXT());
+		file.syncStrings(WEEK_DAY_STRINGS(), 10);
+		delete[] _weekDayStrings;
+		_weekDayStrings = NULL;
+		file.syncString(CHARACTER_DETAILS());
+		file.syncStrings(DAYS(), 3);
+		file.syncString(PARTY_GOLD());
+		file.syncString(PLUS_14());
+		file.syncString(CHARACTER_TEMPLATE());
+		file.syncString(EXCHANGING_IN_COMBAT());
+		file.syncString(CURRENT_MAXIMUM_RATING_TEXT());
+		file.syncString(CURRENT_MAXIMUM_TEXT());
+		file.syncStrings(RATING_TEXT(), 24);
+		delete[] _ratingText;
+		_ratingText = NULL;
+		file.syncString(AGE_TEXT());
+		file.syncString(LEVEL_TEXT());
+		file.syncString(RESISTENCES_TEXT());
+		file.syncString(NONE());
+		file.syncString(EXPERIENCE_TEXT());
+		file.syncString(ELIGIBLE());
+		file.syncString(IN_PARTY_IN_BANK());
+		file.syncString(FOOD_TEXT());
+		file.syncString(EXCHANGE_WITH_WHOM());
+		file.syncString(QUICK_REF_LINE());
+		file.syncString(QUICK_REFERENCE());
+		file.syncNumbers2D((const int *)BLACKSMITH_MAP_IDS, 2, 4);
+		file.syncString(ITEMS_DIALOG_TEXT1());
+		file.syncString(ITEMS_DIALOG_TEXT2());
+		file.syncString(ITEMS_DIALOG_LINE1());
+		file.syncString(ITEMS_DIALOG_LINE2());
+		file.syncString(BTN_BUY());
+		file.syncString(BTN_SELL());
+		file.syncString(BTN_IDENTIFY());
+		file.syncString(BTN_FIX());
+		file.syncString(BTN_USE());
+		file.syncString(BTN_EQUIP());
+		file.syncString(BTN_REMOVE());
+		file.syncString(BTN_DISCARD());
+		file.syncString(BTN_QUEST());
+		file.syncString(BTN_ENCHANT());
+		file.syncString(BTN_RECHARGE());
+		file.syncString(BTN_GOLD());
+		file.syncString(ITEM_BROKEN());
+		file.syncString(ITEM_CURSED());
+		file.syncString(ITEM_OF());
+		file.syncStrings(BONUS_NAMES(), 7);
+		delete[] _bonusNames;
+		_bonusNames = NULL;
+		file.syncStrings(WEAPON_NAMES(), 41);
+		delete[] _weaponNames;
+		_weaponNames = NULL;
+		file.syncStrings(ARMOR_NAMES(), 14);
+		delete[] _armorNames;
+		_armorNames = NULL;
+		file.syncStrings(ACCESSORY_NAMES(), 11);
+		delete[] _accessoryNames;
+		_accessoryNames = NULL;
+		file.syncStrings(MISC_NAMES(), 22);
+		delete[] _miscNames;
+		_miscNames = NULL;
+		file.syncStrings(SPECIAL_NAMES(), 74);
+		delete[] _specialNames;
+		_specialNames = NULL;
+		file.syncStrings(ELEMENTAL_NAMES(), 6);
+		delete[] _elementalNames;
+		_elementalNames = NULL;
+		file.syncStrings(ATTRIBUTE_NAMES(), 10);
+		delete[] _attributeNames;
+		_attributeNames = NULL;
+		file.syncStrings(EFFECTIVENESS_NAMES(), 7);
+		delete[] _effectivenessNames;
+		_effectivenessNames = NULL;
+		file.syncStrings(QUEST_ITEM_NAMES(), 85);
+		delete[] _questItemNames;
+		_questItemNames = NULL;
+		file.syncStrings(QUEST_ITEM_NAMES_SWORDS(), 51);
+		delete[] _questItemNamesSwords;
+		_questItemNamesSwords = NULL;
+		file.syncNumbers((const int *)WEAPON_BASE_COSTS, 35);
+		file.syncNumbers((const int *)ARMOR_BASE_COSTS, 14);
+		file.syncNumbers((const int *)ACCESSORY_BASE_COSTS, 11);
+		file.syncNumbers((const int *)MISC_MATERIAL_COSTS, 22);
+		file.syncNumbers((const int *)MISC_BASE_COSTS, 76);
+		file.syncNumbers((const int *)METAL_BASE_MULTIPLIERS, 22);
+		file.syncNumbers((const int *)ITEM_SKILL_DIVISORS, 4);
+		file.syncNumbers((const int *)RESTRICTION_OFFSETS, 4);
+		file.syncNumbers((const int *)ITEM_RESTRICTIONS, 86);
+		file.syncString(NOT_PROFICIENT());
+		file.syncString(NO_ITEMS_AVAILABLE());
+		file.syncStrings(CATEGORY_NAMES(), 4);
+		delete[] _categoryNames;
+		_categoryNames = NULL;
+		file.syncString(X_FOR_THE_Y());
+		file.syncString(X_FOR_Y());
+		file.syncString(X_FOR_Y_GOLD());
+		file.syncString(FMT_CHARGES());
+		file.syncString(AVAILABLE_GOLD_COST());
+		file.syncString(CHARGES());
+		file.syncString(COST());
+		file.syncStrings(ITEM_ACTIONS(), 7);
+		delete[] _itemActions;
+		_itemActions = NULL;
+		file.syncString(WHICH_ITEM());
+		file.syncString(WHATS_YOUR_HURRY());
+		file.syncString(USE_ITEM_IN_COMBAT());
+		file.syncString(NO_SPECIAL_ABILITIES());
+		file.syncString(CANT_CAST_WHILE_ENGAGED());
+		file.syncString(EQUIPPED_ALL_YOU_CAN());
+		file.syncString(REMOVE_X_TO_EQUIP_Y());
+		file.syncString(RING());
+		file.syncString(MEDAL());
+		file.syncString(CANNOT_REMOVE_CURSED_ITEM());
+		file.syncString(CANNOT_DISCARD_CURSED_ITEM());
+		file.syncString(PERMANENTLY_DISCARD());
+		file.syncString(BACKPACK_IS_FULL());
+		file.syncStrings(CATEGORY_BACKPACK_IS_FULL(), 4);
+		file.syncString(BUY_X_FOR_Y_GOLD());
+		file.syncString(SELL_X_FOR_Y_GOLD());
+		file.syncStrings(SELL_X_FOR_Y_GOLD_ENDINGS(), 2);
+		delete[] _sellXForYGoldEndings;
+		_sellXForYGoldEndings = NULL;
+		file.syncString(NO_NEED_OF_THIS());
+		file.syncString(NOT_RECHARGABLE());
+		file.syncString(SPELL_FAILED());
+		file.syncString(NOT_ENCHANTABLE());
+		file.syncString(ITEM_NOT_BROKEN());
+		file.syncStrings(FIX_IDENTIFY(), 2);
+		delete[] _fixIdentify;
+		_fixIdentify = NULL;
+		file.syncString(FIX_IDENTIFY_GOLD());
+		file.syncString(IDENTIFY_ITEM_MSG());
+		file.syncString(ITEM_DETAILS());
+		file.syncString(ALL());
+		file.syncString(FIELD_NONE());
+		file.syncString(DAMAGE_X_TO_Y());
+		file.syncString(ELEMENTAL_XY_DAMAGE());
+		file.syncString(ATTR_XY_BONUS());
+		file.syncString(EFFECTIVE_AGAINST());
+		file.syncString(QUESTS_DIALOG_TEXT());
+		file.syncString(CLOUDS_OF_XEEN_LINE());
+		file.syncString(DARKSIDE_OF_XEEN_LINE());
+		file.syncString(SWORDS_OF_XEEN_LINE());
+		file.syncString(NO_QUEST_ITEMS());
+		file.syncString(NO_CURRENT_QUESTS());
+		file.syncString(NO_AUTO_NOTES());
+		file.syncString(QUEST_ITEMS_DATA());
+		file.syncString(CURRENT_QUESTS_DATA());
+		file.syncString(AUTO_NOTES_DATA());
+		file.syncString(REST_COMPLETE());
+		file.syncString(PARTY_IS_STARVING());
+		file.syncString(HIT_SPELL_POINTS_RESTORED());
+		file.syncString(TOO_DANGEROUS_TO_REST());
+		file.syncString(SOME_CHARS_MAY_DIE());
+		file.syncString(DISMISS_WHOM());
+		file.syncString(CANT_DISMISS_LAST_CHAR());
+		file.syncString(DELETE_CHAR_WITH_ELDER_WEAPON());
+		file.syncStrings(REMOVE_DELETE(), 2);
+		delete[] _removeDelete;
+		_removeDelete = NULL;
+		file.syncString(REMOVE_OR_DELETE_WHICH());
+		file.syncString(YOUR_PARTY_IS_FULL());
+		file.syncString(HAS_SLAYER_SWORD());
+		file.syncString(SURE_TO_DELETE_CHAR());
+		file.syncString(CREATE_CHAR_DETAILS());
+		file.syncString(NEW_CHAR_STATS());
+		file.syncString(NAME_FOR_NEW_CHARACTER());
+		file.syncString(SELECT_CLASS_BEFORE_SAVING());
+		file.syncString(EXCHANGE_ATTR_WITH());
+		file.syncNumbers((const int *)NEW_CHAR_SKILLS, 10);
+		file.syncNumbers((const int *)NEW_CHAR_SKILLS_OFFSET, 10);
+		file.syncNumbers((const int *)NEW_CHAR_SKILLS_LEN, 10);
+		file.syncNumbers((const int *)NEW_CHAR_RACE_SKILLS, 10);
+		file.syncNumbers((const int *)RACE_MAGIC_RESISTENCES, 5);
+		file.syncNumbers((const int *)RACE_FIRE_RESISTENCES, 5);
+		file.syncNumbers((const int *)RACE_ELECTRIC_RESISTENCES, 5);
+		file.syncNumbers((const int *)RACE_COLD_RESISTENCES, 5);
+		file.syncNumbers((const int *)RACE_ENERGY_RESISTENCES, 5);
+		file.syncNumbers((const int *)RACE_POISON_RESISTENCES, 5);
+		file.syncNumbers2D((const int *)NEW_CHARACTER_SPELLS, 10, 4);
+		file.syncString(COMBAT_DETAILS());
+		file.syncString(NOT_ENOUGH_TO_CAST());
+		file.syncStrings(SPELL_CAST_COMPONENTS(), 2);
+		delete[] _spellCastComponents;
+		_spellCastComponents = NULL;
+		file.syncString(CAST_SPELL_DETAILS());
+		file.syncString(PARTY_FOUND());
+		file.syncString(BACKPACKS_FULL_PRESS_KEY());
+		file.syncString(HIT_A_KEY());
+		file.syncString(GIVE_TREASURE_FORMATTING());
+		file.syncString(X_FOUND_Y());
+		file.syncString(ON_WHO());
+		file.syncString(WHICH_ELEMENT1());
+		file.syncString(WHICH_ELEMENT2());
+		file.syncString(DETECT_MONSTERS());
+		file.syncString(LLOYDS_BEACON());
+		file.syncString(HOW_MANY_SQUARES());
+		file.syncString(TOWN_PORTAL());
+		file.syncString(TOWN_PORTAL_SWORDS());
+		file.syncNumbers2D((const int *)TOWN_MAP_NUMBERS, 3, 5);
+		file.syncString(MONSTER_DETAILS());
+		file.syncStrings(MONSTER_SPECIAL_ATTACKS(), 23);
+		delete[] _monsterSpecialAttacks;
+		_monsterSpecialAttacks = NULL;
+		file.syncString(IDENTIFY_MONSTERS());
+		file.syncStrings(EVENT_SAMPLES, 6);
+		file.syncString(MOONS_NOT_ALIGNED());
+		file.syncString(AWARDS_FOR());
+		file.syncString(AWARDS_TEXT());
+		file.syncString(NO_AWARDS());
+		file.syncString(WARZONE_BATTLE_MASTER());
+		file.syncString(WARZONE_MAXED());
+		file.syncString(WARZONE_LEVEL());
+		file.syncString(WARZONE_HOW_MANY());
+		file.syncString(PICKS_THE_LOCK());
+		file.syncString(UNABLE_TO_PICK_LOCK());
+		file.syncString(CONTROL_PANEL_TEXT());
+		file.syncString(CONTROL_PANEL_BUTTONS());
+		file.syncString(ON());
+		file.syncString(OFF());
+		file.syncString(CONFIRM_QUIT());
+		file.syncString(MR_WIZARD());
+		file.syncString(NO_LOADING_IN_COMBAT());
+		file.syncString(NO_SAVING_IN_COMBAT());
+		file.syncString(QUICK_FIGHT_TEXT());
+		file.syncStrings(QUICK_FIGHT_OPTIONS(), 4);
+		delete[] _quickFightOptions;
+		_quickFightOptions = NULL;
+		file.syncStrings(WORLD_END_TEXT(), 9);
+		delete[] _worldEndText;
+		_worldEndText = NULL;
+		file.syncString(WORLD_CONGRATULATIONS());
+		file.syncString(WORLD_CONGRATULATIONS2());
+		file.syncString(CLOUDS_CONGRATULATIONS1());
+		file.syncString(CLOUDS_CONGRATULATIONS2());
+		file.syncStrings(GOOBER(), 3);
+		delete[] _goober;
+		_goober = NULL;
+		file.syncStrings(MUSIC_FILES1, 5);
+		file.syncStrings2D((const char* const *)MUSIC_FILES2, 6, 7);
+		file.syncString(DIFFICULTY_TEXT());
+		file.syncString(SAVE_OFF_LIMITS());
+		file.syncString(CLOUDS_INTRO1());
+		file.syncString(DARKSIDE_ENDING1());
+		file.syncString(DARKSIDE_ENDING2());
+		file.syncString(PHAROAH_ENDING_TEXT1());
+		file.syncString(PHAROAH_ENDING_TEXT2());
+
+		cc.add("CONSTANTS" + num, file);
+	}
 };
 
-static const char* const OUTDOORS_WALL_TYPES[16] = {
-  nullptr, "mount", "ltree", "dtree", "grass", "snotree", "dsnotree",
-  "snomnt", "dedltree", "mount", "lavamnt", "palm", "dmount", "dedltree",
-  "dedltree", "dedltree"
+class EN : public LangConstants {
+public:
+	const char *CLOUDS_CREDITS() {
+		return "\v012\t000\x3"
+			   "c\f35Designed and Directed By:\n"
+			   "\f17Jon Van Caneghem\x3l\n"
+			   "\n"
+			   "\t025\f35Programming:\n"
+			   "\t035\f17Mark Caldwell\n"
+			   "\t035Dave Hathaway\n"
+			   "\n"
+			   "\t025\f35Sound System & FX:\n"
+			   "\t035\f17Todd Hendrix\n"
+			   "\n"
+			   "\t025\f35Music & Speech:\n"
+			   "\t035\f17Tim Tully\n"
+			   "\n"
+			   "\t025\f35Writing:\n"
+			   "\t035\f17Paul Rattner\n"
+			   "\t035Debbie Murphy\n"
+			   "\t035Jon Van Caneghem\v012\n"
+			   "\n"
+			   "\n"
+			   "\t180\f35Graphics:\n"
+			   "\t190\f17Louis Johnson\n"
+			   "\t190Jonathan P. Gwyn\n"
+			   "\t190Bonita Long-Hemsath\n"
+			   "\t190Julia Ulano\n"
+			   "\t190Ricardo Barrera\n"
+			   "\n"
+			   "\t180\f35Testing:\n"
+			   "\t190\f17Benjamin Bent\n"
+			   "\t190Mario Escamilla\n"
+			   "\t190Richard Espy\n"
+			   "\t190Scott McDaniel\n"
+			   "\t190Clayton Retzer\n"
+			   "\t190Michael Suarez\x3"
+			   "c";
+	}
+
+	const char *DARK_SIDE_CREDITS() {
+		return "\v012\t000\x3"
+			   "c\f35Designed and Directed By:\n"
+			   "\f17Jon Van Caneghem\x3l\n"
+			   "\n"
+			   "\t025\f35Programming:\n"
+			   "\t035\f17Mark Caldwell\n"
+			   "\t035Dave Hathaway\n"
+			   "\n"
+			   "\t025\f35Sound System & FX:\n"
+			   "\t035\f17Mike Heilemann\n"
+			   "\n"
+			   "\t025\f35Music & Speech:\n"
+			   "\t035\f17Tim Tully\n"
+			   "\n"
+			   "\t025\f35Writing:\n"
+			   "\t035\f17Paul Rattner\n"
+			   "\t035Debbie Van Caneghem\n"
+			   "\t035Jon Van Caneghem\v012\n"
+			   "\n"
+			   "\n"
+			   "\t180\f35Graphics:\n"
+			   "\t190\f17Jonathan P. Gwyn\n"
+			   "\t190Bonita Long-Hemsath\n"
+			   "\t190Julia Ulano\n"
+			   "\t190Ricardo Barrera\n"
+			   "\n"
+			   "\t180\f35Testing:\n"
+			   "\t190\f17Benjamin Bent\n"
+			   "\t190Christian Dailey\n"
+			   "\t190Mario Escamilla\n"
+			   "\t190Marco Hunter\n"
+			   "\t190Robert J. Lupo\n"
+			   "\t190Clayton Retzer\n"
+			   "\t190David Vela\x3"
+			   "c";
+	}
+
+	const char *SWORDS_CREDITS1() {
+		return "\v012\x3"
+			   "c\f35Published By New World Computing, Inc.\f17\n"
+			   "Developed By CATware, Inc.\x3l\n"
+			   "\f01Design and Direction\t180Series Created by\n"
+			   "\t020Bill Fawcett\t190John Van Caneghem\n"
+			   "\n"
+			   "\t010Story Contributions\t180Producer & Manual\n"
+			   "\t020Ellen Guon\t190Dean Rettig\n"
+			   "\n"
+			   "\t010Programming & Ideas\t180Original Programming\n"
+			   "\t020David Potter\t190Mark Caldwell\n"
+			   "\t020Rod Retterath\t190Dave Hathaway\n"
+			   "\n"
+			   "\t010Manual Illustrations\t180Graphic Artists\n"
+			   "\t020Todd Cameron Hamilton\t190Jonathan P. Gwyn\n"
+			   "\t020James Clouse\t190Bonnie Long-Hemsath\n"
+			   "\t190Julia Ulano\n"
+			   "\t190Ricardo Barrera\n";
+	}
+
+	const char *SWORDS_CREDITS2() {
+		return "\f05\v012\t000\x3l\n"
+			   "\t100Sound Programming\n"
+			   "\t110Todd Hendrix\n"
+			   "\n"
+			   "\t100Music\n"
+			   "\t110Tim Tully\n"
+			   "\t110Quality Assurance Manager\n"
+			   "\t110Peter Ryu\n"
+			   "\t100Testers\n"
+			   "\t110Walter Johnson\n"
+			   "\t110Bryan Farina\n"
+			   "\t110David Baton\n"
+			   "\t110Jack Nalls\n";
+	}
+
+	const char *OPTIONS_MENU() {
+		return "\r\x1\x3"
+			   "c\fdMight and Magic Options\n"
+			   "%s of Xeen\x2\n"
+			   "\v%.3dCopyright (c) %d NWC, Inc.\n"
+			   "All Rights Reserved\x1";
+	}
+
+	const char **GAME_NAMES() {
+		delete[] _gameNames;
+		_gameNames = new const char *[3] { "Clouds", "Darkside", "World" };
+		return _gameNames;
+	}
+
+	const char *THE_PARTY_NEEDS_REST() {
+		return "\v012The Party needs rest!";
+	}
+
+	const char *WHO_WILL() {
+		return "\x3""c\v000\t000%s\n\n"
+			   "Who will\n%s?\n\v055F1 - F%d";
+	}
+
+	const char *HOW_MUCH() {
+		return "\x3""cHow Much\n\n";
+	}
+
+	const char *WHATS_THE_PASSWORD() {
+		return "\x3""cWhat's the Password?\n"
+			   "\n"
+			   "Please turn to page %u, go to\n"
+			   "line %u, and type in word %u.\v067\t000Spaces are not counted as words or lines.  "
+			   "Hyphenated words are treated as one word.  Any line that has any text is considered a line."
+			   "\x3""c\v040\t000\n";
+	}
+	
+	const char *PASSWORD_INCORRECT() {
+		return "\x3""c\v040\n"
+			   "\f32Incorrect!\fd";
+	}
+	
+	const char *IN_NO_CONDITION() {
+		return "\v007%s is not in any condition to perform actions!";
+	}
+
+	const char *NOTHING_HERE() {
+		return "\x3""c\v010Nothing here.";
+	}
+
+	const char **WHO_ACTIONS() {
+		delete[] _whoActions;
+		_whoActions = new const char *[32] {
+			"search", "open", "drink", "mine", "touch", "read", "learn", "take",
+			"bang", "steal", "bribe", "pay", "sit", "try", "turn", "bathe",
+			"destroy", "pull", "descend", "toss a coin", "pray", "join", "act",
+			"play", "push", "rub", "pick", "eat", "sign", "close", "look", "try"
+		};
+		return _whoActions;
+	}
+
+	const char **WHO_WILL_ACTIONS() {
+		delete[] _whoWillActions;
+		_whoWillActions = new const char *[4] {
+			"Open Grate", "Open Door", "Open Scroll", "Select Char"
+		};
+		return _whoWillActions;
+	}
+
+	const char **DIRECTION_TEXT_UPPER() {
+		delete[] _directionTextUpper;
+		_directionTextUpper = new const char *[4] {"NORTH", "EAST", "SOUTH", "WEST"};
+		return _directionTextUpper;
+	}
+
+	const char **DIRECTION_TEXT() {
+		delete[] _directionText;
+		_directionText = new const char *[4] {"North", "East", "South", "West"};
+		return _directionText;
+	}
+
+	const char **RACE_NAMES() {
+		delete[] _raceNames;
+		_raceNames = new const char *[5] { "Human", "Elf", "Dwarf", "Gnome", "H-Orc" };
+		return _raceNames;
+	}
+
+	const char **ALIGNMENT_NAMES() {
+		delete[] _alignmentNames;
+		_alignmentNames = new const char *[3] { "Good", "Neutral", "Evil" };
+		return _alignmentNames;
+	}
+
+	const char **SEX_NAMES() {
+		delete[] _sexNames;
+		_sexNames = new const char *[2] { "Male", "Female" };
+		return _sexNames;
+	}
+
+	const char **SKILL_NAMES() {
+		delete[] _skillNames;
+		_skillNames = new const char *[18] {
+			"Thievery\t100", "Arms Master", "Astrologer", "Body Builder", "Cartographer",
+			"Crusader", "Direction Sense", "Linguist", "Merchant", "Mountaineer",
+			"Navigator", "Path Finder", "Prayer Master", "Prestidigitator",
+			"Swimmer", "Tracker", "Spot Secret Door", "Danger Sense"
+		};
+		return _skillNames;
+	}
+
+	const char **CLASS_NAMES() {
+		delete[] _classNames;
+		_classNames = new const char *[11] {
+			"Knight", "Paladin", "Archer", "Cleric", "Sorcerer", "Robber",
+			"Ninja", "Barbarian", "Druid", "Ranger", nullptr
+		};
+		return _classNames;
+	}
+
+	const char **CONDITION_NAMES() {
+		delete[] _conditionNames;
+		_conditionNames = new const char *[17] {
+			"Cursed", "Heart Broken", "Weak", "Poisoned", "Diseased",
+			"Insane", "In Love", "Drunk", "Asleep", "Depressed", "Confused",
+			"Paralyzed", "Unconscious", "Dead", "Stone", "Eradicated", "Good"
+		};
+		return _conditionNames;
+	}
+
+	const char *GOOD() {
+		return "Good";
+	}
+
+	const char *BLESSED() {
+		return "\n\t020Blessed\t095%+d";
+	}
+
+	const char *POWER_SHIELD() {
+		return "\n\t020Power Shield\t095%+d";
+	}
+
+	const char *HOLY_BONUS() {
+		return "\n\t020Holy Bonus\t095%+d";
+	}
+
+	const char *HEROISM() {
+		return "\n\t020Heroism\t095%+d";
+	}
+
+	const char *IN_PARTY() {
+		return "\014""15In Party\014""d";
+	}
+
+	const char *PARTY_DETAILS() {
+		return "\015\003l\002\014""00"
+			   "\013""001""\011""035%s"
+			   "\013""009""\011""035%s"
+			   "\013""017""\011""035%s"
+			   "\013""025""\011""035%s"
+			   "\013""001""\011""136%s"
+			   "\013""009""\011""136%s"
+			   "\013""017""\011""136%s"
+			   "\013""025""\011""136%s"
+			   "\013""044""\011""035%s"
+			   "\013""052""\011""035%s"
+			   "\013""060""\011""035%s"
+			   "\013""068""\011""035%s"
+			   "\013""044""\011""136%s"
+			   "\013""052""\011""136%s"
+			   "\013""060""\011""136%s"
+			   "\013""068""\011""136%s";
+	}
+
+	const char *PARTY_DIALOG_TEXT() {
+		return "%s\x2\x3""c\v106\t013Up\t048Down\t083\f37D\fdel\t118\f37R\fdem"
+			   "\t153\f37C\fdreate\t188E\f37x\fdit\x1";
+	}
+
+	const char *NO_ONE_TO_ADVENTURE_WITH() {
+		return "You have no one to adventure with";
+	}
+
+	const char *YOUR_ROSTER_IS_FULL() {
+		return "Your Roster is full!";
+	}
+
+	const char *PLEASE_WAIT() {
+		return "\014""d\003""c\011""000"
+			   "\013""002Please Wait...";
+	}
+
+	const char *OOPS() {
+		return "\003""c\011""000\013""002Oops...";
+	}
+
+	const char *BANK_TEXT() {
+		return "\r\x2\x3""c\v122\t013"
+			   "\f37D\fdep\t040\f37W\fdith\t067ESC"
+			   "\x1\t000\v000Bank of Xeen\v015\n"
+			   "Bank\x3l\n"
+			   "Gold\x3r\t000%s\x3l\n"
+			   "Gems\x3r\t000%s\x3""c\n"
+			   "\n"
+			   "Party\x3l\n"
+			   "Gold\x3r\t000%s\x3l\n"
+			   "Gems\x3r\t000%s";
+	}
+
+	const char *BLACKSMITH_TEXT() {
+		return "\x1\r\x3""c\v000\t000"
+			   "store options for\t039\v027%s\x3l\v046\n"
+			   "\t011\f37b\fdrowse\n"
+			   "\t000\v090gold\x3r\t000%s"
+			   "\x2\x3""c\v122\t040esc\x1";
+	}
+
+	const char *GUILD_NOT_MEMBER_TEXT() {
+		return "\n\nYou have to be a member to shop here.";
+	}
+
+	const char *GUILD_TEXT() {
+		return "\x3""c\v027\t039%s"
+			   "\x3l\v046\n"
+			   "\t012\f37B\fduy Spells\n"
+			   "\t012\f37S\fdpell Info";
+	}
+
+	const char *TAVERN_TEXT() {
+		return "\r\x3""c\v000\t000Tavern Options for\t039"
+			   "\v027%s%s\x3l\t000"
+			   "\v090Gold\x3r\t000%s\x2\x3""c\v122"
+			   "\t021\f37S\fdign in\t060ESC\x1";
+
+	}
+
+	const char *FOOD_AND_DRINK() {
+		return "\x3l\t017\v046\f37D\fdrink\n"
+			   "\t017\f37F\fdood\n"
+			   "\t017\f37T\fdip\n"
+			   "\t017\f37R\fdumors";
+	}
+
+	const char *GOOD_STUFF() {
+		return "\n"
+			   "\n"
+			   "Good Stuff\n"
+			   "\n"
+			   "Hit a key!";
+	}
+
+	const char *HAVE_A_DRINK() {
+		return "\n\nHave a Drink\n\nHit a key!";
+	}
+
+	const char *YOURE_DRUNK() {
+		return "\n\nYou're Drunk\n\nHit a key!";
+	}
+
+	const char *TEMPLE_TEXT() {
+		return "\r\x3""c\v000\t000Temple Options for"
+			   "\t039\v027%s\x3l\t000\v046"
+			   "\f37H\fdeal\x3r\t000%u\x3l\n"
+			   "\f37D\fdonation\x3r\t000%u\x3l\n"
+			   "\f37U\fdnCurse\x3r\t000%s"
+			   "\x3l\t000\v090Gold\x3r\t000%s"
+			   "\x2\x3""c\v122\t040ESC\x1";
+	}
+
+	const char *EXPERIENCE_FOR_LEVEL() {
+		return "%s needs %u experience for level %u.";
+	}
+
+	const char *TRAINING_LEARNED_ALL() {
+		return "%s has learned all we can teach!";
+	}
+
+	const char *ELIGIBLE_FOR_LEVEL() {
+		return "%s is eligible for level %u.\x3l\n"
+			   "\v081Cost\x3r\t000%u";
+	}
+
+	const char *TRAINING_TEXT() {
+		return "\r\x3""cTraining Options\n"
+			   "\n"
+			   "%s\x3l\v090\t000Gold\x3r\t000%s\x2\x3""c\v122\t021"
+			   "\f37T\fdrain\t060ESC\x1";
+	}
+
+	const char *GOLD_GEMS() {
+		return "\x3""c\v000\t000%s\x3l\n"
+			   "\n"
+			   "Gold\x3r\t000%s\x3l\n"
+			   "Gems\x3r\t000%s\x2\x3""c\v096\t013G\f37o\fdld\t040G\f37e\fdms\t067ESC\x1";
+	}
+
+	const char *GOLD_GEMS_2() {
+		return "\x3""c\v000\t000%s\x3l\n"
+			   "\n"
+			   "\x4""077Gold\x3r\t000%s\x3l\n"
+			   "\x4""077Gems\x3r\t000%s\x3l\t000\v051\x4""077\n"
+			   "\x4""077";
+	}
+
+	const char **DEPOSIT_WITHDRAWL() {
+		delete[] _depositWithdrawl;
+		_depositWithdrawl = new const char *[2] { "Deposit", "Withdrawl" };
+		return _depositWithdrawl;
+	}
+
+	const char *NOT_ENOUGH_X_IN_THE_Y() {
+		return "\x3""c\v012Not enough %s in the %s!\x3l";
+	}
+
+	const char *NO_X_IN_THE_Y() {
+		return "\x3""c\v012No %s in the %s!\x3l";
+	}
+
+	const char **STAT_NAMES() {
+		delete[] _statNames;
+		_statNames = new const char *[16] {
+			"Might", "Intellect", "Personality", "Endurance", "Speed",
+			"Accuracy", "Luck", "Age", "Level", "Armor Class", "Hit Points",
+			"Spell Points", "Resistances", "Skills", "Awards", "Experience"
+		};
+		return _statNames;
+	}
+
+	const char **CONSUMABLE_NAMES() {
+		delete[] _consumableNames;
+		_consumableNames = new const char *[4] { "Gold", "Gems", "Food", "Condition" };
+		return _consumableNames;
+	}
+
+	const char **WHERE_NAMES() {
+		delete[] _whereNames;
+		_whereNames = new const char *[2] { "Party", "Bank" };
+		return _whereNames;
+	}
+
+	const char *AMOUNT() {
+		return "\x3""c\t000\v051Amount\x3l\n";
+	}
+
+	const char *FOOD_PACKS_FULL() {
+		return "\v007Your food packs are already full!";
+	}
+
+	const char *BUY_SPELLS() {
+		return "\x3""c\v027\t039%s\x3l\v046\n"
+			   "\t012\f37B\fduy Spells\n"
+			   "\t012\f37S\fdpell Info";
+	}
+
+	const char *GUILD_OPTIONS() {
+		return "\r\f00\x3""c\v000\t000Guild Options for%s"
+			   "\x3l\t000\v090Gold"
+			   "\x3r\t000%s\x2\x3""c\v122\t040ESC\x1";
+	}
+
+	const char *NOT_A_SPELL_CASTER() {
+		return "Not a spell caster...";
+	}
+
+	const char *SPELLS_LEARNED_ALL() {
+		return "You have learned all we\n"
+			   "\t010can teach you.";
+	}
+
+	const char *SPELLS_FOR() {
+		return "\r\fd%s\x2\x3""c\t000\v002Spells for %s";
+	}
+
+	const char *SPELL_LINES_0_TO_9() {
+		return "\x2\x3l\v015\t0011\n2\n3\n4\n5\n6\n7\n8\n9\n0";
+	}
+
+	const char *SPELLS_DIALOG_SPELLS() {
+		return "\x3l\v015"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l"
+			   "\t004\v110%s - %u\x1";
+	}
+
+	const char *SPELL_PTS() {
+		return "Spell Pts";
+	}
+
+	const char *GOLD() {
+		return "Gold";
+	}
+
+	const char *SPELL_INFO() {
+		return "\x3""c\f09%s\fd\x3l\n"
+			   "\n"
+			   "%s\x3""c\t000\v100Press a Key!";
+	}
+
+	const char *SPELL_PURCHASE() {
+		return "\x3l\v000\t000\fd%s  Do you wish to purchase "
+			   "\f09%s\fd for %u?";
+	}
+
+	const char *MAP_TEXT() {
+		return "\x3""c\v000\t000%s\x3l\v139"
+			   "\t000X = %d\x3r\t000Y = %d\x3""c\t000%s";
+	}
+
+	const char *LIGHT_COUNT_TEXT() {
+		return "\x3l\n\n\t024Light\x3r\t124%d";
+	}
+
+	const char *FIRE_RESISTENCE_TEXT() {
+		return "%c%sFire%s%u";
+	}
+
+	const char *ELECRICITY_RESISTENCE_TEXT() {
+		return "%c%sElectricity%s%u";
+	}
+
+	const char *COLD_RESISTENCE_TEXT() {
+		return "%c%sCold%s%u";
+	}
+
+	const char *POISON_RESISTENCE_TEXT() {
+		return "%c%sPoison/Acid%s%u";
+	}
+
+	const char *CLAIRVOYANCE_TEXT() {
+		return "%c%sClairvoyance%s";
+	}
+
+	const char *LEVITATE_TEXT() {
+		return "%c%sLevitate%s";
+	}
+
+	const char *WALK_ON_WATER_TEXT() {
+		return "%c%sWalk on Water";
+	}
+
+	const char *GAME_INFORMATION() {
+		return "\r\x3""c\t000\v001\f37%s of Xeen\fd\n"
+			   "Game Information\n"
+			   "\n"
+			   "Today is \f37%ssday\fd\n"
+			   "\n"
+			   "\t032Time\t072Day\t112Year\n"
+			   "\t032\f37%d:%02d%c\t072%u\t112%u\fd%s";
+	}
+
+	const char *WORLD_GAME_TEXT() {
+		return "World";
+	}
+
+	const char *DARKSIDE_GAME_TEXT() {
+		return "Darkside";
+	}
+
+	const char *CLOUDS_GAME_TEXT() {
+		return "Clouds";
+	}
+
+	const char *SWORDS_GAME_TEXT() {
+		return "Swords";
+	}
+
+	const char **WEEK_DAY_STRINGS() {
+		delete[] _weekDayStrings;
+		_weekDayStrings = new const char *[10] {
+			"Ten", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"
+		};
+		return _weekDayStrings;
+	}
+
+	const char *CHARACTER_DETAILS() {
+		return "\x3l\v041\t196%s\t000\v002%s : %s %s %s"
+			   "\x3r\t053\v028\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3l\t131\f%02u%d\fd\t196\f15%u\fd\x3r"
+			   "\t053\v051\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3l\t131\f%02u%u\fd\t196\f15%u\fd"
+			   "\x3r\t053\v074\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3l\t131\f15%u\fd\t196\f15%u\fd"
+			   "\x3r\t053\v097\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3l\t131\f15%u\fd\t196\f15%u day%s\fd"
+			   "\x3r\t053\v120\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3l\t131\f15%u\fd\t196\f%02u%s\fd"
+			   "\t230%s%s%s%s\fd";
+	}
+
+	const char **DAYS() {
+		delete[] _days;
+		_days = new const char *[3] { "", "s", "" };
+		return _days;
+	}
+
+	const char *PARTY_GOLD() {
+		return "Party Gold";
+	}
+
+	const char *PLUS_14() {
+		return "\f14+";
+	}
+
+	const char *CHARACTER_TEMPLATE() {
+		return "\x1\f00\r\x3l\t029\v018Mgt\t080Acy\t131H.P.\t196Experience"
+			   "\t029\v041Int\t080Lck\t131S.P.\t029\v064Per\t080Age"
+			   "\t131Resis\t196Party Gems\t029\v087End\t080Lvl\t131Skills"
+			   "\t196Party Food\t029\v110Spd\t080AC\t131Awrds\t196Condition\x3""c"
+			   "\t290\v025\f37I\fdtem\t290\v057\f37Q"
+			   "\fduick\t290\v089\f37E\fdxch\t290\v121Exit\x3l%s";
+	}
+
+	const char *EXCHANGING_IN_COMBAT() {
+		return "\x3""c\v007\t000Exchanging in combat is not allowed!";
+	}
+
+	const char *CURRENT_MAXIMUM_RATING_TEXT() {
+		return "\x2\x3""c%s\n"
+			   "Current / Maximum\n"
+			   "\x3r\t054%u\x3l\t058/ %u\n"
+			   "\x3""cRating: %s";
+	}
+
+	const char *CURRENT_MAXIMUM_TEXT() {
+		return "\x2\x3""c%s\n"
+			   "Current / Maximum\n"
+			   "\x3r\t054%u\x3l\t058/ %u";
+	}
+
+	const char **RATING_TEXT() {
+		delete[] _ratingText;
+		_ratingText = new const char *[24] {
+			"Nonexistant", "Very Poor", "Poor", "Very Low", "Low", "Average", "Good",
+			"Very Good", "High", "Very High", "Great", "Super", "Amazing", "Incredible",
+			"Gigantic", "Fantastic", "Astoundig", "Astonishing", "Monumental", "Tremendous",
+			"Collosal", "Awesome", "Awe Inspiring", "Ultimate"
+		};
+		return _ratingText;
+	}
+
+	const char *AGE_TEXT() {
+		return "\x2\x3""c%s\n"
+			   "Current / Natural\n"
+			   "\x3r\t057%u\x3l\t061/ %u\n"
+			   "\x3""cBorn: %u / %u\x1";
+	}
+
+	const char *LEVEL_TEXT() {
+		return "\x2\x3""c%s\n"
+			   "Current / Maximum\n"
+			   "\x3r\t054%u\x3l\t058/ %u\n"
+			   "\x3""c%u Attack%s/Round\x1";
+	}
+
+	const char *RESISTENCES_TEXT() {
+		return "\x2\x3""c%s\x3l\n"
+			   "\t020Fire\t100%u\n"
+			   "\t020Cold\t100%u\n"
+			   "\t020Electricity\t100%u\n"
+			   "\t020Poison\t100%u\n"
+			   "\t020Energy\t100%u\n"
+			   "\t020Magic\t100%u";
+	}
+
+	const char *NONE() {
+		return "\n\t020None";
+	}
+
+	const char *EXPERIENCE_TEXT() {
+		return "\x2\x3""c%s\x3l\n"
+			   "\t010Current:\t070%u\n"
+			   "\t010Next Level:\t070%s\x1";
+	}
+
+	const char *ELIGIBLE() {
+		return "\f12Eligible\fd";
+	}
+
+	const char *IN_PARTY_IN_BANK() {
+		return "\x2\x3""cParty %s\n"
+			   "%u on hand\n"
+			   "%u in bank\x1\x3l";
+	}
+
+	const char *FOOD_TEXT() {
+		return "\x2\x3""cParty %s\n"
+			   "%u on hand\n"
+			   "Enough for %u day%s\x3l";
+	}
+
+	const char *EXCHANGE_WITH_WHOM() {
+		return "\t010\v005Exchange with whom?";
+	}
+
+	const char *QUICK_REF_LINE() {
+		return "\v%3d\t007%u)\t027%s\t110%c%c%c\x3r\t160\f%02u%u\fd"
+			   "\x3l\t170\f%02u%d\fd\t208\f%02u%u\fd\t247\f"
+			   "%02u%u\fd\t270\f%02u%c%c%c%c\fd";
+	}
+
+	const char *QUICK_REFERENCE() {
+		return "\r\x3""cQuick Reference Chart\v012\x3l"
+			   "\t007#\t027Name\t110Cls\t140Lvl\t176H.P."
+			   "\t212S.P.\t241A.C.\t270Cond"
+			   "%s%s%s%s%s%s%s%s"
+			   "\v110\t064\x3""cGold\t144Gems\t224Food\v119"
+			   "\t064\f15%u\t144%u\t224%u day%s\fd";
+	}
+
+	const char *ITEMS_DIALOG_TEXT1() {
+		return "\r\x2\x3""c\v021\t017\f37W\fdeap\t051\f37A\fdrmor\t085A"
+			   "\f37c\fdces\t119\f37M\fdisc\t153%s\t187%s\t221%s"
+			   "\t255%s\t289Exit";
+	}
+
+	const char *ITEMS_DIALOG_TEXT2() {
+		return "\r\x2\x3""c\v021\t017\f37W\fdeap\t051\f37A\fdrmor\t085A"
+			   "\f37c\fdces\t119\f37M\fdisc\t153\f37%s\t289Exit";
+	}
+
+	const char *ITEMS_DIALOG_LINE1() {
+		return "\x3r\f%02u\t023%2d)\x3l\t028%s\n";
+	}
+
+	const char *ITEMS_DIALOG_LINE2() {
+		return "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%u\n";
+	}
+
+	const char *BTN_BUY() {
+		return "\f37B\fduy";
+	}
+
+	const char *BTN_SELL() {
+		return "\f37S\fdell";
+	}
+
+	const char *BTN_IDENTIFY() {
+		return "\f37I\fddentify";
+	}
+
+	const char *BTN_FIX() {
+		return "\f37F\fdix";
+	}
+
+	const char *BTN_USE() {
+		return "\f37U\fdse";
+	}
+
+	const char *BTN_EQUIP() {
+		return "\f37E\fdquip";
+	}
+
+	const char *BTN_REMOVE() {
+		return "\f37R\fdem";
+	}
+
+	const char *BTN_DISCARD() {
+		return "\f37D\fdisc";
+	}
+
+	const char *BTN_QUEST() {
+		return "\f37Q\fduest";
+	}
+
+	const char *BTN_ENCHANT() {
+		return "E\fdnchant";
+	}
+
+	const char *BTN_RECHARGE() {
+		return "R\fdechrg";
+	}
+
+	const char *BTN_GOLD() {
+		return "G\fdold";
+	}
+
+	const char *ITEM_BROKEN() {
+		return "\f32broken ";
+	}
+
+	const char *ITEM_CURSED() {
+		return "\f09cursed ";
+	}
+
+	const char *ITEM_OF() {
+		return "of ";
+	}
+
+	const char **BONUS_NAMES() {
+		delete[] _bonusNames;
+		_bonusNames = new const char *[7] {
+			"", "Dragon Slayer", "Undead Eater", "Golem Smasher",
+			"Bug Zapper", "Monster Masher", "Beast Bopper"
+		};
+		return _bonusNames;
+	}
+
+	const char **WEAPON_NAMES() {
+		delete[] _weaponNames;
+		_weaponNames = new const char *[41] {
+			nullptr, "long sword ", "short sword ", "broad sword ", "scimitar ",
+			"cutlass ", "sabre ", "club ", "hand axe ", "katana ", "nunchakas ",
+			"wakazashi ", "dagger ", "mace ", "flail ", "cudgel ", "maul ", "spear ",
+			"bardiche ", "glaive ", "halberd ", "pike ", "flamberge ", "trident ",
+			"staff ", "hammer ", "naginata ", "battle axe ", "grand axe ", "great axe ",
+			"short bow ", "long bow ", "crossbow ", "sling ", "Xeen Slayer Sword ",
+			"Elder LongSword ", "Elder Dagger ", "Elder Mace ", "Elder Spear ",
+			"Elder Staff ", "Elder LongBow "
+		};
+		return _weaponNames;
+	}
+
+	const char **ARMOR_NAMES() {
+		delete[] _armorNames;
+		_armorNames = new const char *[14] {
+			nullptr, "robes ", "scale armor ", "ring mail ", "chain mail ",
+			"splint mail ", "plate mail ", "plate armor ", "shield ",
+			"helm ", "boots ", "cloak ", "cape ", "gauntlets "
+		};
+		return _armorNames;
+	}
+
+	const char **ACCESSORY_NAMES() {
+		delete[] _accessoryNames;
+		_accessoryNames = new const char *[11] {
+			nullptr, "ring ", "belt ", "brooch ", "medal ", "charm ", "cameo ",
+			"scarab ", "pendant ", "necklace ", "amulet "
+		};
+		return _accessoryNames;
+	}
+
+	const char **MISC_NAMES() {
+		delete[] _miscNames;
+		_miscNames = new const char *[22] {
+			nullptr, "rod ", "jewel ", "gem ", "box ", "orb ", "horn ", "coin ",
+			"wand ", "whistle ", "potion ", "scroll ", "bogus", "bogus", "bogus",
+			"bogus", "bogus", "bogus", "bogus", "bogus", "bogus", "bogus"
+		};
+		return _miscNames;
+	}
+
+	const char **SPECIAL_NAMES() {
+		delete[] _specialNames;
+		_specialNames = new const char *[74] {
+			nullptr, "light", "awakening", "magic arrows", "first aid", "fists", "energy blasts", "sleeping",
+			"revitalization", "curing", "sparking", "shrapmetal", "insect repellent", "toxic clouds", "elemental protection",
+			"pain", "jumping", "beast control", "clairvoyance", "undead turning", "levitation", "wizard eyes", "blessing",
+			"monster identification",  "lightning", "holy bonuses", "power curing", "nature's cures", "beacons",
+			"shielding", "heroism", "hypnotism", "water walking", "frost biting", "monster finding", "fireballs",
+			"cold rays", "antidotes", "acid spraying", "time distortion", "dragon sleep", "vaccination", "teleportation",
+			"death", "free movement", "golem stopping", "poison volleys", "deadly swarms", "shelter", "daily protection",
+			"daily sorcerery", "feasting", "fiery flails", "recharging", "freezing", "town portals", "stone to flesh",
+			"raising the dead", "etherealization", "dancing swords", "moon rays", "mass distortion", "prismatic light",
+			"enchant item", "incinerating", "holy words", "resurrection", "storms", "megavoltage", "infernos",
+			"sun rays", "implosions", "star bursts", "the GODS!"
+		};
+		return _specialNames;
+	}
+
+	const char **ELEMENTAL_NAMES() {
+		delete[] _elementalNames;
+		_elementalNames = new const char *[6] {
+			"Fire", "Elec", "Cold", "Acid/Poison", "Energy", "Magic"
+		};
+		return _elementalNames;
+	}
+
+	const char **ATTRIBUTE_NAMES() {
+		delete[] _attributeNames;
+		_attributeNames = new const char *[10] {
+			"might", "Intellect", "Personality", "Speed", "accuracy", "Luck",
+			"Hit Points", "Spell Points", "Armor Class", "Thievery"
+		};
+		return _attributeNames;
+	}
+
+	const char **EFFECTIVENESS_NAMES() {
+		delete[] _effectivenessNames;
+		_effectivenessNames = new const char *[7] {
+			nullptr, "Dragons", "Undead", "Golems", "Bugs", "Monsters", "Beasts"
+		};
+		return _effectivenessNames;
+	}
+
+	const char **QUEST_ITEM_NAMES() {
+		delete[] _questItemNames;
+		_questItemNames = new const char *[85] {
+			"Deed to New Castle",
+			"Crystal Key to Witch Tower",
+			"Skeleton Key to Darzog's Tower",
+			"Enchanted Key to Tower of High Magic",
+			"Jeweled Amulet of the Northern Sphinx",
+			"Stone of a Thousand Terrors",
+			"Golem Stone of Admittance",
+			"Yak Stone of Opening",
+			"Xeen's Scepter of Temporal Distortion",
+			"Alacorn of Falista",
+			"Elixir of Restoration",
+			"Wand of Faery Magic",
+			"Princess Roxanne's Tiara",
+			"Holy Book of Elvenkind",
+			"Scarab of Imaging",
+			"Crystals of Piezoelectricity",
+			"Scroll of Insight",
+			"Phirna Root",
+			"Orothin's Bone Whistle",
+			"Barok's Magic Pendant",
+			"Ligono's Missing Skull",
+			"Last Flower of Summer",
+			"Last Raindrop of Spring",
+			"Last Snowflake of Winter",
+			"Last Leaf of Autumn",
+			"Ever Hot Lava Rock",
+			"King's Mega Credit",
+			"Excavation Permit",
+			"Cupie Doll",
+			"Might Doll",
+			"Speed Doll",
+			"Endurance Doll",
+			"Accuracy Doll",
+			"Luck Doll",
+			"Widget",
+			"Pass to Castleview",
+			"Pass to Sandcaster",
+			"Pass to Lakeside",
+			"Pass to Necropolis",
+			"Pass to Olympus",
+			"Key to Great Western Tower",
+			"Key to Great Southern Tower",
+			"Key to Great Eastern Tower",
+			"Key to Great Northern Tower",
+			"Key to Ellinger's Tower",
+			"Key to Dragon Tower",
+			"Key to Darkstone Tower",
+			"Key to Temple of Bark",
+			"Key to Dungeon of Lost Souls",
+			"Key to Ancient Pyramid",
+			"Key to Dungeon of Death",
+			"Amulet of the Southern Sphinx",
+			"Dragon Pharoah's Orb",
+			"Cube of Power",
+			"Chime of Opening",
+			"Gold ID Card",
+			"Silver ID Card",
+			"Vulture Repellant",
+			"Bridle",
+			"Enchanted Bridle",
+			"Treasure Map (Goto E1 x1, y11)",
+			"",
+			"Fake Map",
+			"Onyx Necklace",
+			"Dragon Egg",
+			"Tribble",
+			"Golden Pegasus Statuette",
+			"Golden Dragon Statuette",
+			"Golden Griffin Statuette",
+			"Chalice of Protection",
+			"Jewel of Ages",
+			"Songbird of Serenity",
+			"Sandro's Heart",
+			"Ector's Ring",
+			"Vespar's Emerald Handle",
+			"Queen Kalindra's Crown",
+			"Caleb's Magnifying Glass",
+			"Soul Box",
+			"Soul Box with Corak inside",
+			"Ruby Rock",
+			"Emerald Rock",
+			"Sapphire Rock",
+			"Diamond Rock",
+			"Monga Melon",
+			"Energy Disk"
+		};
+		return _questItemNames;
+	}
+
+	const char **QUEST_ITEM_NAMES_SWORDS() {
+		delete[] _questItemNamesSwords;
+		_questItemNamesSwords = new const char *[51] {
+			"Pass to Hart", "Pass to Impery", "Pass to town3", "Pass to town4", "Pass to town5",
+			"Key to Hart Sewers", "Key to Rettig's Pyramid", "Key to the Old Temple",
+			"Key to Canegtut's Pyramid", "Key to Ascihep's Pyramid", "Key to Dragon Tower",
+			"Key to Darkstone Tower", "Key to Temple of Bark", "Key to Dungeon of Lost Souls",
+			"Key to Ancient Pyramid", "Key to Dungeon of Death", "Red Magic Hammer",
+			"Green Magic Hammer", "Golden Magic Wand", "Silver Magic Hammer", "Magic Coin",
+			"Ruby", "Diamond Mineral", "Emerald", "Sapphire", "Treasure Map (Goto E1 x1, y11)",
+			"NOTUSED", "Melon", "Princess Crown", "Emerald Wand", "Druid Carving", "High Sign",
+			"Holy Wheel", "Double Cross", "Sky Hook", "Sacred Cow", "Staff of the Mountain",
+			"Hard Rock", "Soft Rock", "Rock Candy", "Ivy Plant", "Spirit Gem", "Temple of Sun holy lamp oil",
+			"Noams Hammer", "Positive Orb", "Negative Orb", "FireBane Staff", "Diamond Edged Pick",
+			"Monga Melon", "Energy Disk", "Old XEEN Quest Item"
+		};
+		return _questItemNamesSwords;
+	}
+
+	const char *NOT_PROFICIENT() {
+		return "\t000\v007\x3""c%ss are not proficient with a %s!";
+	}
+	
+	const char *NO_ITEMS_AVAILABLE() {
+		return "\x3""c\n"
+			   "\t000No items available.";
+	}
+
+	const char **CATEGORY_NAMES() {
+		delete[] _categoryNames;
+		_categoryNames = new const char *[4] { "Weapons", "Armor", "Accessories", "Miscellaneous" };
+		return _categoryNames;
+	}
+
+	const char *X_FOR_THE_Y() {
+		return "\x1\fd\r%s\v000\t000%s for %s the %s%s\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+	}
+
+	const char *X_FOR_Y() {
+		return "\x1\fd\r\x3l\v000\t000%s for %s\x3r\t000%s\x3l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+	}
+
+	const char *X_FOR_Y_GOLD() {
+		return "\x1\fd\r\x3l\v000\t000%s for %s\t150Gold - %u%s\x3l\v011"
+			   "\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+	}
+
+	const char *FMT_CHARGES() {
+		return "\x3rr\t000Charges\x3l";
+	}
+
+	const char *AVAILABLE_GOLD_COST() {
+		return "\x1\fd\r\x3l\v000\t000Available %s\t150Gold - %u\x3r\t000Cost"
+			   "\x3l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+	}
+
+	const char *CHARGES() {
+		return "Charges";
+	}
+
+	const char *COST() {
+		return "Cost";
+	}
+
+	const char **ITEM_ACTIONS() {
+		delete[] _itemActions;
+		_itemActions = new const char *[7] {
+			"Equip", "Remove", "Use", "Discard", "Enchant", "Recharge", "Gold"
+		};
+		return _itemActions;
+	}
+
+	const char *WHICH_ITEM() {
+		return "\t010\v005%s which item?";
+	}
+
+	const char *WHATS_YOUR_HURRY() {
+		return "\v007What's your hurry?\n"
+			   "Wait till you get out of here!";
+	}
+
+	const char *USE_ITEM_IN_COMBAT() {
+		return "\v007To use an item in Combat, invoke the Use command on your turn!";
+	}
+
+	const char *NO_SPECIAL_ABILITIES() {
+		return "\v005\x3""c%s\fdhas no special abilities!";
+	}
+
+	const char *CANT_CAST_WHILE_ENGAGED() {
+		return "\x3""c\v007Can't cast %s while engaged!";
+	}
+
+	const char *EQUIPPED_ALL_YOU_CAN() {
+		return "\x3""c\v007You have equipped all the %ss you can!";
+	}
+
+	const char *REMOVE_X_TO_EQUIP_Y() {
+		return "\x3""c\v007You must remove %sto equip %s\b!";
+	}
+
+	const char *RING() {
+		return "ring";
+	}
+
+	const char *MEDAL() {
+		return "medal";
+	}
+
+	const char *CANNOT_REMOVE_CURSED_ITEM() {
+		return "\x3""You cannot remove a cursed item!";
+	}
+
+	const char *CANNOT_DISCARD_CURSED_ITEM() {
+		return "\3x""cYou cannot discard a cursed item!";
+	}
+
+	const char *PERMANENTLY_DISCARD() {
+		return "\v000\t000\x3lPermanently discard %s\fd?";
+	}
+
+	const char *BACKPACK_IS_FULL() {
+		return "\v005\x3""c\fd%s's backpack is full.";
+	}
+
+	const char **CATEGORY_BACKPACK_IS_FULL() {
+		delete[] _categoryBackpackIsFull;
+		_categoryBackpackIsFull = new const char *[4] {
+			"\v010\t000\x3""c%s's weapons backpack is full.",
+			"\v010\t000\x3""c%s's armor backpack is full.",
+			"\v010\t000\x3""c%s's accessories backpack is full.",
+			"\v010\t000\x3""c%s's miscellaneous backpack is full."
+		};
+		return _categoryBackpackIsFull;
+	}
+
+	const char *BUY_X_FOR_Y_GOLD() {
+		return "\x3l\v000\t000\fdBuy %s\fd for %u gold?";
+	}
+
+	const char *SELL_X_FOR_Y_GOLD() {
+		return "\x3l\v000\t000\fdSell %s\fd for %u gold?";
+	}
+
+	const char **SELL_X_FOR_Y_GOLD_ENDINGS() {
+		delete[] _sellXForYGoldEndings;
+		_sellXForYGoldEndings = new const char *[2] { "", "" };
+		return _sellXForYGoldEndings;
+	}
+
+	const char *NO_NEED_OF_THIS() {
+		return "\v005\x3""c\fdWe have no need of this %s\f!";
+	}
+
+	const char *NOT_RECHARGABLE() {
+		return "\v012\x3""c\fdNot Rechargeable.  %s";
+	}
+
+	const char *NOT_ENCHANTABLE() {
+		return "\v012\t000\x3""cNot Enchantable.  %s";
+	}
+
+	const char *SPELL_FAILED() {
+		return "Spell Failed!";
+	}
+
+	const char *ITEM_NOT_BROKEN() {
+		return "\fdThat item is not broken!";
+	}
+
+	const char **FIX_IDENTIFY() {
+		delete[] _fixIdentify;
+		_fixIdentify = new const char *[2] { "Fix", "Identify" };
+		return _fixIdentify;
+	}
+
+	const char *FIX_IDENTIFY_GOLD() {
+		return "\x3l\v000\t000%s %s\fd for %u gold?";
+	}
+
+	const char *IDENTIFY_ITEM_MSG() {
+		return "\fd\v000\t000\x3""cIdentify Item\x3l\n"
+			   "\n"
+			   "\v012%s\fd\n"
+			   "\n"
+			   "%s";
+	}
+
+	const char *ITEM_DETAILS() {
+		return "Proficient Classes\t132:\t140%s\n"
+			   "to Hit Modifier\t132:\t140%s\n"
+			   "Physical Damage\t132:\t140%s\n"
+			   "Elemental Damage\t132:\t140%s\n"
+			   "Elemental Resistance\t132:\t140%s\n"
+			   "Armor Class Bonus\t132:\t140%s\n"
+			   "Attribute Bonus\t132:\t140%s\n"
+			   "Special Power\t132:\t140%s";
+	}
+
+	const char *ALL() {
+		return "All";
+	}
+
+	const char *FIELD_NONE() {
+		return "None";
+	}
+
+	const char *DAMAGE_X_TO_Y() {
+		return "%d to %d";
+	}
+
+	const char *ELEMENTAL_XY_DAMAGE() {
+		return "%+d %s Damage";
+	}
+
+	const char *ATTR_XY_BONUS() {
+		return "%+d %s";
+	}
+
+	const char *EFFECTIVE_AGAINST() {
+		return "x3 vs %s";
+	}
+
+	const char *QUESTS_DIALOG_TEXT() {
+		return "\r\x2\x3""c\v021\t017\f37I\fdtems\t085\f37Q\fduests\t153"
+			   "\f37A\fduto Notes	221\f37U\fdp\t255\f37D\fdown"
+			   "\t289Exit";
+	}
+
+	const char *CLOUDS_OF_XEEN_LINE() {
+		return "\b \b*-- \f04Clouds of Xeen\fd --";
+	}
+
+	const char *DARKSIDE_OF_XEEN_LINE() {
+		return "\b \b*-- \f04Darkside of Xeen\fd --";
+	}
+
+	const char *SWORDS_OF_XEEN_LINE() {
+		return "\b \b*-- \f04Swords of Xeen\fd --";
+	}
+
+	const char *NO_QUEST_ITEMS() {
+		return "\r\x3""c\v000	000Quest Items\x3l\x2\n"
+			   "\n"
+			   "\x3""cNo Quest Items";
+	}
+
+	const char *NO_CURRENT_QUESTS() {
+		return "\x3""c\v000\t000\n"
+			   "\n"
+			   "No Current Quests";
+	}
+
+	const char *NO_AUTO_NOTES() {
+		return "\x3""cNo Auto Notes";
+	}
+
+	const char *QUEST_ITEMS_DATA() {
+		return "\r\x1\fd\x3""c\v000\t000Quest Items\x3l\x2\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s";
+	}
+
+	const char *CURRENT_QUESTS_DATA() {
+		return "\r\x1\fd\x3""c\t000\v000Current Quests\x3l\x2\n"
+			   "%s\n"
+			   "\n"
+			   "%s\n"
+			   "\n"
+			   "%s";
+	}
+
+	const char *AUTO_NOTES_DATA() {
+		return "\r\x1\fd\x3""c\t000\v000Auto Notes\x3l\x2\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l";
+	}
+
+	const char *REST_COMPLETE() {
+		return "\v000\t0008 hours pass.  Rest complete.\n"
+			   "%s\n"
+			   "%d food consumed.";
+	}
+
+	const char *PARTY_IS_STARVING() {
+		return "\f07The Party is Starving!\fd";
+	}
+
+	const char *HIT_SPELL_POINTS_RESTORED() {
+		return "Hit Pts and Spell Pts restored.";
+	}
+
+	const char *TOO_DANGEROUS_TO_REST() {
+		return "Too dangerous to rest here!";
+	}
+
+	const char *SOME_CHARS_MAY_DIE() {
+		return "Some Chars may die. Rest anyway?";
+	}
+
+	const char *DISMISS_WHOM() {
+		return "\t010\v005Dismiss whom?";
+	}
+
+	const char *CANT_DISMISS_LAST_CHAR() {
+		return "You cannot dismiss your last character!";
+	}
+
+	const char *DELETE_CHAR_WITH_ELDER_WEAPON() {
+		return "\v000\t000This character has an Elder Weapon and cannot be deleted!";
+	}
+
+	const char **REMOVE_DELETE() {
+		delete[] _removeDelete;
+		_removeDelete = new const char *[2] { "Remove", "Delete" };
+		return _removeDelete;
+	}
+
+	const char *REMOVE_OR_DELETE_WHICH() {
+		return "\x3l\t010\v005%s which character?";
+	}
+
+	const char *YOUR_PARTY_IS_FULL() {
+		return "\v007Your party is full!";
+	}
+
+	const char *HAS_SLAYER_SWORD() {
+		return "\v000\t000This character has the Xeen Slayer Sword and cannot be deleted!";
+	}
+
+	const char *SURE_TO_DELETE_CHAR() {
+		return "Are you sure you want to delete %s the %s?";
+	}
+
+	const char *CREATE_CHAR_DETAILS() {
+		return "\f04\x3""c\x2\t144\v119\f37R\f04oll\t144\v149\f37C\f04reate"
+			   "\t144\v179\f37ESC\f04\x3l\x1\t195\v021\f37M\f04gt"
+			   "\t195\v045\f37I\f04nt\t195\v069\f37P\f04er\t195\v093\f37E\f04nd"
+			   "\t195\v116\f37S\f04pd\t195\v140\f37A\f04cy\t195\v164\f37L\f04ck%s";
+	}
+
+	const char *NEW_CHAR_STATS() {
+		return "\f04\x3l\t022\v148Race\t055: %s\n"
+			   "\t022Sex\t055: %s\n"
+			   "\t022Class\t055:\n"
+			   "\x3r\t215\v031%d\t215\v055%d\t215\v079%d\t215\v103%d\t215\v127%d"
+			   "\t215\v151%d\t215\v175%d\x3l\t242\v020\f%.2dKnight\t242\v031\f%.2d"
+			   "Paladin\t242\v042\f%.2dArcher\t242\v053\f%.2dCleric\t242\v064\f%.2d"
+			   "Sorcerer\t242\v075\f%.2dRobber\t242\v086\f%.2dNinja\t242\v097\f%.2d"
+			   "Barbarian\t242\v108\f%.2dDruid\t242\v119\f%.2dRanger\f04\x3""c"
+			   "\t265\v142Skills\x3l\t223\v155%s\t223\v170%s%s";
+	}
+
+	const char *NAME_FOR_NEW_CHARACTER() {
+		return "\x3""cEnter a Name for this Character\n\n";
+	}
+
+	const char *SELECT_CLASS_BEFORE_SAVING() {
+		return "\v006\x3""cSelect a Class before saving.\x3l";
+	}
+
+	const char *EXCHANGE_ATTR_WITH() {
+		return "Exchange %s with...";
+	}
+
+	const char *COMBAT_DETAILS() {
+		return "\r\f00\x3""c\v000\t000\x2""Combat%s%s%s\x1";
+	}
+
+	const char *NOT_ENOUGH_TO_CAST() {
+		return "\x3""c\v010Not enough %s to Cast %s";
+	}
+
+	const char **SPELL_CAST_COMPONENTS() {
+		delete[] _spellCastComponents;
+		_spellCastComponents = new const char *[2] { "Spell Points", "Gems" };
+		return _spellCastComponents;
+	}
+
+	const char *CAST_SPELL_DETAILS() {
+		return "\r\x2\x3""c\v122\t013\f37C\fdast\t040\f37N\fdew"
+			   "\t067ESC\x1\t000\v000\x3""cCast Spell\n"
+			   "\n"
+			   "%s\x3l\n"
+			   "\n"
+			   "Spell Ready:\x3""c\n"
+			   "\n"
+			   "\f09%s\fd\x2\x3l\n"
+			   "\v082Cost\x3r\t000%u/%u\x3l\n"
+			   "Cur SP\x3r\t000%u\x1";
+	}
+
+	const char *PARTY_FOUND() {
+		return "\x3""cThe Party Found:\n"
+			   "\n"
+			   "\x3r\t000%u Gold\n"
+			   "%u Gems";
+	}
+
+	const char *BACKPACKS_FULL_PRESS_KEY() {
+		return "\v007\f12Warning!  BackPacks Full!\fd\n"
+			   "Press a Key";
+	}
+
+	const char *HIT_A_KEY() {
+		return "\x3l\v120\t000\x4""077\x3""c\f37Hit a key\fd";
+	}
+
+	const char *GIVE_TREASURE_FORMATTING() {
+		return "\x3l\v060\t000\x4""077\n"
+			   "\x4""077\n"
+			   "\x4""077\n"
+			   "\x4""077\n"
+			   "\x4""077\n"
+			   "\x4""077";
+	}
+
+	const char *X_FOUND_Y() {
+		return "\v060\t000\x3""c%s found: %s";
+	}
+
+	const char *ON_WHO() {
+		return "\x3""c\v009On Who?";
+	}
+
+	const char *WHICH_ELEMENT1() {
+		return "\r\x3""c\x1Which Element?\x2\v034\t014\f15F\fdire\t044"
+			   "\f15E\fdlec\t074\f15C\fdold\t104\f15A\fdcid\x1";
+	}
+
+	const char *WHICH_ELEMENT2() {
+		return "\r\x3""cWhich Element?\x2\v034\t014\f15F\fdire\t044"
+			   "\f15E\fdlec\t074\f15C\fdold\t104\f15A\fdcid\x1";
+	}
+
+	const char *DETECT_MONSTERS() {
+		return "\x3""cDetect Monsters";
+	}
+
+	const char *LLOYDS_BEACON() {
+		return "\r\x3""c\v000\t000\x1Lloyd's Beacon\n"
+			   "\n"
+			   "Last Location\n"
+			   "\n"
+			   "%s\x3l\n"
+			   "x = %d\x3r\t000y = %d\x3""c\x2\v122\t021\f15S\fdet\t060\f15R\fdeturn\x1";
+	}
+
+	const char *HOW_MANY_SQUARES() {
+		return "\x3""cTeleport\nHow many squares %s (1-9)\n";
+	}
+
+	const char *TOWN_PORTAL() {
+		return "\x3""cTown Portal\x3l\n"
+			   "\n"
+			   "\t0101. %s\n"
+			   "\t0102. %s\n"
+			   "\t0103. %s\n"
+			   "\t0104. %s\n"
+			   "\t0105. %s\x3""c\n"
+			   "\n"
+			   "To which Town (1-5)\n"
+			   "\n";
+	}
+
+	const char *TOWN_PORTAL_SWORDS() {
+		return "\x3""cTown Portal\x3l\n"
+			   "\n"
+			   "\t0101. %s\n"
+			   "\t0102. %s\n"
+			   "\t0103. %s\x3""c\n"
+			   "\n"
+			   "To which Town (1-3)\n"
+			   "\n";
+	}
+
+	const char *MONSTER_DETAILS() {
+		return "\x3l\n"
+			   "%s\x3""c\t100%s\t140%u\t180%u\x3r\t000%s";
+	}
+
+	const char **MONSTER_SPECIAL_ATTACKS() {
+		delete[] _monsterSpecialAttacks;
+		_monsterSpecialAttacks = new const char *[23] {
+			"None", "Magic", "Fire", "Elec", "Cold", "Poison", "Energy", "Disease",
+			"Insane", "Asleep", "CurseItm", "InLove", "DrnSPts", "Curse", "Paralys",
+			"Uncons", "Confuse", "BrkWpn", "Weak", "Erad", "Age+5", "Dead", "Stone"
+		};
+		return _monsterSpecialAttacks;
+	}
+
+	const char *IDENTIFY_MONSTERS() {
+		return "Name\x3""c\t100HP\t140AC\t177#Atks\x3r\t000Special%s%s%s";
+	}
+
+	const char *MOONS_NOT_ALIGNED() {
+		return "\x3""c\v012\t000The moons are not aligned. Passage to the %s is unavailable";
+	}
+
+	const char *AWARDS_FOR() {
+		return "\r\x1\fd\x3""c\v000\t000Awards for %s the %s\x3l\x2\n"
+			   "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\x1";
+	}
+
+	const char *AWARDS_TEXT() {
+		return "\r\x2\x3""c\v021\t221\f37U\fdp\t255\f37D\fdown\t289Exit";
+	}
+
+	const char *NO_AWARDS() {
+		return "\x3""cNo Awards";
+	}
+
+	const char *WARZONE_BATTLE_MASTER() {
+		return "The Warzone\n\t125Battle Master";
+	}
+
+	const char *WARZONE_MAXED() {
+		return "What!  You again?  Go pick on someone your own size!";
+	}
+
+	const char *WARZONE_LEVEL() {
+		return "What level of monsters? (1-10)\n";
+	}
+
+	const char *WARZONE_HOW_MANY() {
+		return "How many monsters? (1-20)\n";
+	}
+
+	const char *PICKS_THE_LOCK() {
+		return "\x3""c\v010%s picks the lock!\nPress any key.";
+	}
+
+	const char *UNABLE_TO_PICK_LOCK() {
+		return "\x3""c\v010%s was unable to pick the lock!\nPress any key.";
+	}
+
+	const char *CONTROL_PANEL_TEXT() {
+		return "\x1\f00\x3""c\v000\t000Control Panel\x3r"
+			   "\v022\t045\f06L\fdoad:\t124\f06E\fdfx:"
+			   "\v041\t045\f06S\fdave:\t124\f06M\fdusic:"
+			   "\v060\t045\f06Q\fduit:"
+			   "\v080\t084Mr \f06W\fdizard:%s\t000\x1";
+	}
+
+	const char *CONTROL_PANEL_BUTTONS() {
+		return "\x3""c\f11"
+			   "\v022\t062load\t141%s"
+			   "\v041\t062save\t141%s"
+			   "\v060\t062exit"
+			   "\v079\t102Help\fd";
+	}
+
+	const char *ON() {
+		return "\f15on\f11";
+	}
+
+	const char *OFF() {
+		return "\f32off\f11";
+	}
+
+	const char *CONFIRM_QUIT() {
+		return "Are you sure you want to quit?";
+	}
+
+	const char *MR_WIZARD() {
+		return "Are you sure you want Mr.Wizard's Help ?";
+	}
+
+	const char *NO_LOADING_IN_COMBAT() {
+		return "No Loading Allowed in Combat!";
+	}
+
+	const char *NO_SAVING_IN_COMBAT() {
+		return "No Saving Allowed in Combat!";
+	}
+
+	const char *QUICK_FIGHT_TEXT() {
+		return "\r\fd\x3""c\v000\t000QuickFight Options\n\n"
+			   "%s\x3l\n\n"
+			   "Current\x3r\n"
+			   "\t000%s\x2\x3""c\v122\t021\f37N\f04ext\t060Exit\x1";
+	}
+
+	const char **QUICK_FIGHT_OPTIONS() {
+		delete[] _quickFightOptions;
+		_quickFightOptions = new const char *[4] { "Attack", "Cast", "Block", "Run" };
+		return _quickFightOptions;
+	}
+
+	const char **WORLD_END_TEXT() {
+		delete[] _worldEndText;
+		_worldEndText = new const char *[9] {
+			"\n\n\n\n\n\n\n"
+			"Congratulations Adventurers!\n\n"
+			"Let the unification ceremony begin!",
+			"And so the call went out to the people throughout the lands of Xeen"
+			" that the prophecy was nearing completion.",
+			"They came in great numbers to witness the momentous occasion.",
+			"\v026The Dragon Pharoah presided over the ceremony.",
+			"\v026Queen Kalindra presented the Cube of Power.",
+			"\v026Prince Roland presented the Xeen Sceptre.",
+			"\v026Together, they placed the Cube of Power...",
+			"\v026and the Sceptre, onto the Altar of Joining.",
+			"With the prophecy complete, the two sides of Xeen were united as one",
+		};
+		return _worldEndText;
+	}
+
+	const char *WORLD_CONGRATULATIONS() {
+		return "\x3""cCongratulations\n\n"
+			   "Your Final Score is:\n\n"
+			   "%010lu\n"
+			   "\x3l\n"
+			   "Please send this score to the Ancient's Headquarters where "
+			   "you'll be added to the Hall of Legends!\n\n"
+			   "Ancient's Headquarters\n"
+			   "New World Computing, Inc.\n"
+			   "P.O. Box 4302\n"
+			   "Hollywood, CA 90078";
+	}
+
+	const char *WORLD_CONGRATULATIONS2() {
+		return "\n\n\n\n\n\n"
+			   "But wait... there's more!\n"
+			   "\n\n"
+			   "Include the message\n"
+			   "\"%s\"\n"
+			   "with your final score and receive a special bonus.";
+	}
+
+	const char *CLOUDS_CONGRATULATIONS1() {
+		return "\f23\x3l"
+			   "\v000\t000Please send this score to the Ancient's Headquarters "
+			   "where you'll be added to the Hall of Legends!\f33\x3""c"
+			   "\v070\t000Press a Key";
+	}
+
+	const char *CLOUDS_CONGRATULATIONS2() {
+		return "\f23\x3l"
+			   "\v000\t000Ancient's Headquarters\n"
+			   "New World Computing, Inc.\n"
+			   "P.O. Box 4302\n"
+			   "Hollywood, CA 90078-4302\f33\x3""c"
+			   "\v070\t000Press a Key";
+	}
+
+	const char **GOOBER() {
+		delete[] _goober;
+		_goober = new const char *[3] {
+			"", "I am a Goober!", "I am a Super Goober!"
+		};
+		return _goober;
+	}
+
+	const char *DIFFICULTY_TEXT() {
+		return "\v000\t000\x3""cSelect Game Preference";
+	}
+
+	const char *SAVE_OFF_LIMITS() {
+		return "\x3""c\v002\t000The Gods of Game Restoration deem this area off limits!\n"
+			   "Sorry, no saving in this maze.";
+	}
+
+	const char *CLOUDS_INTRO1() {
+		return "\f00\v082\t040\x3"
+			   "cKing Burlock\v190\t040Peasants\v082\t247"
+			   "Lord Xeen\v190\t258Xeen's Pet\v179\t150Crodo";
+	}
+
+	const char *DARKSIDE_ENDING1() {
+		return "\n\x3" "cCongratulations\n"
+			   "\n"
+			   "Your Final Score is:\n"
+			   "\n"
+			   "%010lu\n"
+			   "\x3" "l\n"
+			   "Please send this score to the Ancient's Headquarters "
+			   "where you'll be added to the Hall of Legends!\n"
+			   "\n"
+			   "Ancient's Headquarters\n"
+			   "New World Computing, Inc.\n"
+			   "P.O. Box 4302\n"
+			   "Hollywood, CA 90078";
+	}
+
+	const char *DARKSIDE_ENDING2() {
+		return "\n"
+			   "Adventurers,\n"
+			   "\n"
+			   "I will save your game in Castleview.\n"
+			   "\n"
+			   "The World of Xeen still needs you!\n"
+			   "\n"
+			   "Load your game afterwards and come visit me in the "
+			   "Great Pyramid for further instructions";
+	}
+
+	const char *PHAROAH_ENDING_TEXT1() {
+		return "\fd\v001\t001%s\x3" "c\t000\v180Press a Key!\x3" "l";
+	}
+
+	const char *PHAROAH_ENDING_TEXT2() {
+		return "\f04\v000\t000%s\x3" "c\t000\v180Press a Key!\x3" "l\fd";
+	}
 };
 
-static const char* const SURFACE_NAMES[16] = {
-  "water.srf", "dirt.srf", "grass.srf", "snow.srf", "swamp.srf",
-  "lava.srf", "desert.srf", "road.srf", "dwater.srf", "tflr.srf",
-  "sky.srf", "croad.srf", "sewer.srf", "cloud.srf", "scortch.srf",
-  "space.srf"
+class RU : public LangConstants {
+public:
+	const char *CLOUDS_CREDITS() {
+		return
+			"\v012\t000\x3""c\f35ˆ¤¥ï ¨ à㪮¢®¤á⢮ ¯à®¥ªâ®¬:\n"
+			"\f17„¦®­ ‚ ­ Š ­¥£¥¬\x3""l\n"
+			"\n"
+			"\t025\f35à®£à ¬¬¨áâë:\n"
+			"\t035\f17Œ àª Š®«¤ãí««\n"
+			"\t035„¥©¢ •íâíãí©\n"
+			"\n"
+			"\t025\f35€ã¤¨®á¨á⥬  ¨ §¢ãª:\n"
+			"\t035\f17’®¤¤ •¥­¤à¨ªá\n"
+			"\n"
+			"\t025\f35Œã§ëª  ¨ à¥çì:\n"
+			"\t035\f17’¨¬ ’ ««¨\n"
+			"\n"
+			"\t025\f35‘業 à¨©:\n"
+			"\t035\f17®«  â­¥à\n"
+			"\t035„¥¡¡¨ Œñàä¨\n"
+			"\t035„¦®­ ‚ ­ Š ­¥£¥¬\v012\n"
+			"\n"
+			"\n"
+			"\t180\f35•㤮¦­¨ª¨:\n"
+			"\t190\f17‹ã¨ „¦®­á®­\n"
+			"\t190„¦®­ â ­ . ƒ¢¨­\n"
+			"\t190®­¨â  ‹®­£-•¥¬á â\n"
+			"\t190„¦ã«¨ï “« ­®\n"
+			"\t190¨ª à¤®  àà¥à \n"
+			"\n"
+			"\t180\f35’¥áâ¥àë:\n"
+			"\t190\f17¥­¤¦ ¬¨­ ¥­â\n"
+			"\t190Œ à¨® áª ¬¨«« \n"
+			"\t190¨ç à¤ á¯¨\n"
+			"\t190‘ª®ââ Œ ª¤í­¨¥«\n"
+			"\t190Š«¥©â®­ ¥â§¥à\n"
+			"\t190Œ ©ª« ‘ã à¥á\x3""c";
+	}
+
+	const char *DARK_SIDE_CREDITS() {
+		return 
+		  "\v012\t000\x3""c\f35Designed and Directed By:\n"
+		  "\f17Jon Van Caneghem\x3l\n"
+		  "\n"
+		  "\t025\f35Programming:\n"
+		  "\t035\f17Mark Caldwell\n"
+		  "\t035Dave Hathaway\n"
+		  "\n"
+		  "\t025\f35Sound System & FX:\n"
+		  "\t035\f17Mike Heilemann\n"
+		  "\n"
+		  "\t025\f35Music & Speech:\n"
+		  "\t035\f17Tim Tully\n"
+		  "\n"
+		  "\t025\f35Writing:\n"
+		  "\t035\f17Paul Rattner\n"
+		  "\t035Debbie Van Caneghem\n"
+		  "\t035Jon Van Caneghem\v012\n"
+		  "\n"
+		  "\n"
+		  "\t180\f35Graphics:\n"
+		  "\t190\f17Jonathan P. Gwyn\n"
+		  "\t190Bonita Long-Hemsath\n"
+		  "\t190Julia Ulano\n"
+		  "\t190Ricardo Barrera\n"
+		  "\n"
+		  "\t180\f35Testing:\n"
+		  "\t190\f17Benjamin Bent\n"
+		  "\t190Christian Dailey\n"
+		  "\t190Mario Escamilla\n"
+		  "\t190Marco Hunter\n"
+		  "\t190Robert J. Lupo\n"
+		  "\t190Clayton Retzer\n"
+		  "\t190David Vela\x3""c";
+	}
+
+	const char *SWORDS_CREDITS1() {
+		return "\v012\x3"
+			   "c\f35Published By New World Computing, Inc.\f17\n"
+			   "Developed By CATware, Inc.\x3l\n"
+			   "\f01Design and Direction\t180Series Created by\n"
+			   "\t020Bill Fawcett\t190John Van Caneghem\n"
+			   "\n"
+			   "\t010Story Contributions\t180Producer & Manual\n"
+			   "\t020Ellen Guon\t190Dean Rettig\n"
+			   "\n"
+			   "\t010Programming & Ideas\t180Original Programming\n"
+			   "\t020David Potter\t190Mark Caldwell\n"
+			   "\t020Rod Retterath\t190Dave Hathaway\n"
+			   "\n"
+			   "\t010Manual Illustrations\t180Graphic Artists\n"
+			   "\t020Todd Cameron Hamilton\t190Jonathan P. Gwyn\n"
+			   "\t020James Clouse\t190Bonnie Long-Hemsath\n"
+			   "\t190Julia Ulano\n"
+			   "\t190Ricardo Barrera\n";
+	}
+
+	const char *SWORDS_CREDITS2() {
+		return "\f05\v012\t000\x3l\n"
+			   "\t100Sound Programming\n"
+			   "\t110Todd Hendrix\n"
+			   "\n"
+			   "\t100Music\n"
+			   "\t110Tim Tully\n"
+			   "\t110Quality Assurance Manager\n"
+			   "\t110Peter Ryu\n"
+			   "\t100Testers\n"
+			   "\t110Walter Johnson\n"
+			   "\t110Bryan Farina\n"
+			   "\t110David Baton\n"
+			   "\t110Jack Nalls\n";
+	}
+
+	const char *OPTIONS_MENU() {
+		return
+		  "\r\x1\x3""c\fdŒ¥ç ¨ Œ £¨ï\n"
+		  "%s Šá¨­ \x2\n"
+		  "\v%.3dCopyright (c) %d NWC, Inc.\n"
+		  "All Rights Reserved\x1";
+	}
+
+	const char **GAME_NAMES() {
+		delete[] _gameNames;
+		_gameNames = new const char *[3] { "Ž¡« ª ", "Darkside", "World" };
+		return _gameNames;
+	}
+
+	const char *THE_PARTY_NEEDS_REST() {
+		return "\v012Žâàï¤ ­ã¦¤ ¥âáï ¢ ®â¤ëå¥!";
+	}
+
+	const char *WHO_WILL() {
+		return "\x3""c\v000\t000%s\n\n%s?\n\v055F1 - F%d";
+	}
+
+	const char *HOW_MUCH() {
+		return "\x3""c‘ª®«ìª®\n\n";
+	}
+
+	const char *WHATS_THE_PASSWORD() {
+		return "\x3"
+			   "cWhat's the Password?\n"
+			   "\n"
+			   "Please turn to page %u, go to\n"
+			   "line %u, and type in word %u.\v067\t000Spaces are not counted as words or lines.  "
+			   "Hyphenated words are treated as one word.  Any line that has any text is considered a line."
+			   "\x3"
+			   "c\v040\t000\n";
+	}
+
+	const char *PASSWORD_INCORRECT() {
+		return "\x3"
+			   "c\v040\n"
+			   "\f32Incorrect!\fd";
+	}
+
+	const char *IN_NO_CONDITION() {
+		return "\v007%s ­¥ ¢ á®áâ®ï­¨¨ çâ®-«¨¡® ᤥ« âì!";
+	}
+
+	const char *NOTHING_HERE() {
+		return "\x3""c\v010‡¤¥áì ­¨ç¥£® ­¥â.";
+	}
+
+	const char **WHO_ACTIONS() {
+		delete[] _whoActions;
+		_whoActions = new const char *[32] {
+			"Šâ® ®¡ëé¥â",
+			"Šâ® ®âªà®¥â",
+			"Šâ® ¢ë¯ì¥â",
+			"Šâ® ¡ã¤¥â ª®¯ âì",
+			"Šâ® ¯®âண ¥â",
+			"Šâ® ¯à®çâñâ",
+			"Š®£® ­ ãç¨âì",
+			"Šâ® ¢®§ì¬ñâ",
+			"Šâ® 㤠à¨â",
+			"Šâ® ãªà ¤ñâ",
+			"Šâ® ¤ áâ ¢§ïâªã",
+			"Šâ® § ¯« â¨â",
+			"Šâ® ¯à¨á拉â",
+			"Šâ® ¯®¯à®¡ã¥â",
+			"Šâ® ¥£® ¯®¢¥à­ñâ",
+			"Šâ® ¨áªã¯­ñâáï",
+			"Šâ® ¥£® ã­¨ç⮦¨â",
+			"Šâ® ¢ë¤¥à­¥â",
+			"Šâ® á¯ãáâ¨âáï",
+			"Šâ® ¡à®á¨â ¬®­¥âªã",
+			"pray",
+			"Šâ® áâ ­¥â ç«¥­®¬",
+			"act",
+			"Šâ® å®ç¥â áë£à âì",
+			"Šâ® ­ ¦¬ñâ",
+			"rub",
+			"pick",
+			"eat",
+			"sign",
+			"close",
+			"look",
+			"try"
+		};
+		return _whoActions;
+	}
+
+	const char **WHO_WILL_ACTIONS() {
+		delete[] _whoWillActions;
+		_whoWillActions = new const char *[4] {
+			"Žâªàëâì à¥èñâªã",
+			"Žâªàëâì ¤¢¥àì",
+			" áªàëâì ᢨ⮪",
+			"‚ë¡¥à¨â¥ ¯¥àá®­ ¦ "
+		};
+		return _whoWillActions;
+	}
+
+	const char **DIRECTION_TEXT_UPPER() {
+		delete[] _directionTextUpper;
+		_directionTextUpper = new const char *[4] { "NORTH", "EAST", "SOUTH", "WEST" };
+		return _directionTextUpper;
+	}
+
+	const char **DIRECTION_TEXT() {
+		delete[] _directionText;
+		_directionText = new const char *[4] {
+			"‘¥¢¥à",
+			"‚®á⮪",
+			"ž£",
+			"‡ ¯ ¤"
+		};
+		return _directionText;
+	}
+
+	const char **RACE_NAMES() {
+		delete[] _raceNames;
+		_raceNames = new const char *[5] {
+			"—¥«®¢¥ª",
+			"«ìä",
+			"„¢®àä",
+			"ƒ­®¬",
+			"®«ã®àª"
+		};
+		return _raceNames;
+	}
+
+	const char **ALIGNMENT_NAMES() {
+		delete[] _alignmentNames;
+		_alignmentNames = new const char *[3] {
+			"•®à®è¨©",
+			"¥©âà «",
+			"‡«®©(- ï)"
+		};
+		return _alignmentNames;
+	}
+
+	const char **SEX_NAMES() {
+		delete[] _sexNames;
+		_sexNames = new const char *[2] {
+			"Œã¦ç¨­ ",
+			"†¥­é¨­ "
+		};
+		return _sexNames;
+	}
+
+	const char **SKILL_NAMES() {
+		delete[] _skillNames;
+		_skillNames = new const char *[18] {
+			"‚®à®¢á⢮\t100",
+			"Žà㦥©­¨ª",
+			"€áâ஫®£",
+			"€â«¥â",
+			"Š à⮣à ä",
+			"Šà¥áâ®­®á¥æ",
+			"—ã¢á⢮ ­ ¯à ¢«¥­¨ï",
+			"Ÿ§ëª®¢¥¤",
+			"Šã¯¥æ",
+			"‘ª «®« §",
+			"˜âãଠ­",
+			"‘«¥¤®¯ëâ",
+			"Œ £¨áâà ¬®«¨â¢ë",
+			"‹®¢ª®áâì ¯ «ì楢",
+			"«®¢¥æ",
+			"Žå®â­¨ª",
+			"‚®á¯à¨ï⨥",
+			"—ã¢á⢮ ®¯ á­®áâ¨"
+		};
+		return _skillNames;
+	}
+
+	const char **CLASS_NAMES() {
+		delete[] _classNames;
+		_classNames = new const char *[11] {
+			"ëæ àì",
+			" « ¤¨­",
+			"‹ãç­¨ª",
+			"Š«¨à¨ª",
+			"Œ £",
+			"⨈",
+			"¨­¤§ï",
+			"‚ à¢ à",
+			"„à㨤",
+			"‘«¥¤®¯ëâ",
+			nullptr
+		};
+		return _classNames;
+	}
+
+	const char **CONDITION_NAMES() {
+		delete[] _conditionNames;
+		_conditionNames = new const char *[17] {
+			"à®ª«ï⨥",
+			"Heart Broken",
+			"‘« ¡®áâì",
+			"Žâà ¢«¥­¨¥",
+			"®«¥§­ì",
+			"¥§ã¬¨¥",
+			"‚«î¡«ñ­(- )",
+			" ¢¥á¥«¥",
+			"‘®­",
+			"‚ ã­ë­¨¨",
+			"‚ á¬ï⥭¨¨",
+			" à «¨ç",
+			".á®§­ ­¨ï",
+			"Œ¥àâ¢",
+			"Š ¬¥­ì",
+			"“­¨ç⮦¥­",
+			"•®à®è¥¥"
+		};
+		return _conditionNames;
+	}
+
+	const char *GOOD() {
+		return "•®à®è¥¥";
+	}
+
+	const char *BLESSED() {
+		return "\n\t014« £®á«®¢¥­¨¥\t095%+d";
+	}
+
+	const char *POWER_SHIELD() {
+		return "\n\t014‘¨«®¢®© é¨â\t095%+d";
+	}
+
+	const char *HOLY_BONUS() {
+		return "\n\t014‘¢ï⮩ ¤ à\t095%+d";
+	}
+
+	const char *HEROISM() {
+		return "\n\t014Œã¦¥á⢮\t095%+d";
+	}
+
+	const char *IN_PARTY() {
+		return "\f15‚ ®âà拉\fd";
+	}
+
+	const char *PARTY_DETAILS() {
+		return
+			"\015\003l\002\014""00"
+			"\013""001""\011""035%s"
+			"\013""009""\011""035%s"
+			"\013""017""\011""035%s"
+			"\013""025""\011""035%s"
+			"\013""001""\011""136%s"
+			"\013""009""\011""136%s"
+			"\013""017""\011""136%s"
+			"\013""025""\011""136%s"
+			"\013""044""\011""035%s"
+			"\013""052""\011""035%s"
+			"\013""060""\011""035%s"
+			"\013""068""\011""035%s"
+			"\013""044""\011""136%s"
+			"\013""052""\011""136%s"
+			"\013""060""\011""136%s"
+			"\013""068""\011""136%s";
+	}
+
+	const char *PARTY_DIALOG_TEXT() {
+		return
+			"%s\x2\x3""c\v106\t013‚¢¥àå\t048‚­¨§\t083\f37“\fd¤ «\t118\f37‚\fd룭"
+			"\t153\f37‘\fd®§¤\t188‚\f37ë\fd室\x1";
+	}
+
+	const char *NO_ONE_TO_ADVENTURE_WITH() {
+		return "‚ ¬ ­¥ á ª¥¬ ¯ãâ¥è¥á⢮¢ âì";
+	}
+
+	const char *YOUR_ROSTER_IS_FULL() {
+		return "‚ è ᯨ᮪ ¯®«®­!";
+	}
+
+	const char *PLEASE_WAIT() {
+		return "\fd\x3""c\t000\v002®¤®¦¤¨â¥...";
+	}
+
+	const char *OOPS() {
+		return "\x3""c\t000\v002“¯á...";
+	}
+
+	const char *BANK_TEXT() {
+		return
+			"\r\x2\x3""c\v122\t013"
+			"\f37‚\fdª«\t040\f37‘\fd­\t067ESC"
+			"\x1\t000\v000 ­ª Šá¨­ \v015\n"
+			" ­ª\x3""l\n"
+			"‡®«\x3""r\t000%s\x3""l\n"
+			"€«¬§\x3""r\t000%s\x3""c\n"
+			"\n"
+			"Žâàï¤\x3""l\n"
+			"‡®«\x3""r\t000%s\x3""l\n"
+			"€«¬§\x3""r\t000%s";
+	}
+
+	const char *BLACKSMITH_TEXT() {
+		return
+			"\x1\r\x3""c\v000\t000"
+			"‹ ¢ª \t039\v027%s\x3""l\v046\n"
+			"\t011\f37‘\fd¬®âà¥âì\n"
+			"\t000\v090‡®«\x3""r\t000%s"
+			"\x2\x3""c\v122\t040ESC\x1";
+	}
+
+	const char *GUILD_NOT_MEMBER_TEXT() {
+		return "\n‚ë ¤®«¦­ë ¡ëâì ç«¥­®¬ £¨«ì¤¨¨, çâ®¡ë ¯®ªã¯ âì § ª«¨­ ­¨ï.";
+	}
+
+	const char *GUILD_TEXT() {
+		return
+			"\x3""c\v027\t039%s"
+			"\x3""l\v046\n"
+			"\t012\f37Š\fd㯨âì\n"
+			"\t012\f37Ž\fd¯¨á ­¨ï";
+	}
+
+	const char *TAVERN_TEXT() {
+		return
+			"\r\x3""c\v000\t000’ ¢¥à­ \t039"
+			"\v027%s%s\x3""l\t000"
+			"\v090‡®«\x3""r\t000%s\x2\x3""c\v122"
+			"\t021\f37Ž\fdâ¤ëå\t060ESC\x1";
+	}
+
+	const char *FOOD_AND_DRINK() {
+		return
+			"\x3""l\t017\v046\f37‚\fd믨âì\n"
+			"\t017\f37…\fd¤ \n"
+			"\t017\f37—\fd ¥¢ë¥\n"
+			"\t017\f37‘\fd«ãå¨";
+	}
+
+	const char *GOOD_STUFF() {
+		return
+			"\n"
+			"\n"
+			"¥¤ãà­®\n"
+			"\n"
+			" ¦¬¨â¥ ª« ¢¨èã!";
+	}
+
+	const char *HAVE_A_DRINK() {
+		return "\n‘¯¥à¢  ¢ë¯¥©â¥\n\n ¦¬¨â¥ ª« ¢¨èã!";
+	}
+
+	const char *YOURE_DRUNK() {
+		return "\n\n‚ë ¯ìï­ë\n\n ¦¬¨â¥ ª« ¢¨èã!";
+	}
+
+	const char *TEMPLE_TEXT() {
+		return
+			"\r\x3""c\v000\t000•à ¬"
+			"\t039\v027%s\x3""l\t000\v046"
+			"\f37‹\fd¥ç¨âì\x3""r\t000%lu\x3""l\n"
+			"\f37„\fd à\x3""r\t000%lu\x3""l\n"
+			"\f37‘\fd­à®ª«\x3""r\t000%s"
+			"\x3""l\t000\v090‡®«\x3""r\t000%s"
+			"\x2\x3""c\v122\t040ESC\x1";
+	}
+
+	const char *EXPERIENCE_FOR_LEVEL() {
+		return "%s\nã¦­® %lu ®çª®¢ ®¯ëâ  ¤«ï ã஢­ï %u.";
+	}
+
+	const char *TRAINING_LEARNED_ALL() {
+		return "%s\n‚ë 㦥 §­ ¥â¥ ¢áñ, ç¥¬ã ¬ë ¬®¦¥¬ ¢ á ­ ãç¨âì!";
+	}
+
+	const char *ELIGIBLE_FOR_LEVEL() {
+		return
+			"%s ¬®¦¥â ®¡ãç âìáï ¤® ã஢­ï %d.\x3""l\n"
+			"\v081–¥­ \x3""r\t000%lu";
+	}
+
+	const char *TRAINING_TEXT() {
+		return
+			"\r\x3""cŽ¡ã祭¨¥\n"
+			"\n"
+			"%s\x3""l\v090\t000‡®«\x3""r\t000%s\x2\x3""c\v122\t021"
+			"\f37Ž\fd¡ã祭¨¥\t060ESC\x1";
+	}
+
+	const char *GOLD_GEMS() {
+		return
+			"\x3""c\v000\t000%s\x3""l\n"
+			"\n"
+			"‡®«\x3""r\t000%s\x3""l\n"
+			"€«¬§\x3""r\t000%s\x2\x3""c\v096\t007\f37€\fd«¬§\t035\f37‡\fd®«\t067ESC\x1";
+	}
+
+	const char *GOLD_GEMS_2() {
+		return
+			"\t000\v000\x3""c%s\x3""l\n"
+			"\n"
+			"\x4""077‡®«\x3""r\t000%s\x3""l\n"
+			"\x4""077€«¬§\x3""r\t000%s\x3""l\t000\v051\x4""077\n"
+			"\x4""077";
+	}
+
+	const char **DEPOSIT_WITHDRAWL() {
+		delete[] _depositWithdrawl;
+		_depositWithdrawl = new const char *[2] { "®«®¦¨âì ­  áçñâ", "‘­ïâì á® áçñâ " };
+		return _depositWithdrawl;
+	}
+
+	const char *NOT_ENOUGH_X_IN_THE_Y() {
+		return "\x3""c\v012¥¤®áâ â®ç­® %s %s!\x3""l";
+	}
+
+	const char *NO_X_IN_THE_Y() {
+		return "\x3""c\v012¥â %s %s!\x3""l";
+	}
+
+	const char **STAT_NAMES() {
+		delete[] _statNames;
+		_statNames = new const char *[16] {
+			"‘¨« ", "ˆ­â¥««¥ªâ", "‘¨«  ¤ãå ", "‘«®¦¥­¨¥", "‘ª®à®áâì",
+			"Œ¥âª®áâì", "“¤ ç ", "‚®§à áâ", "“஢¥­ì", "Š« áá § é¨âë", "‡¤®à®¢ì¥",
+			"Žçª¨ ¬ £¨¨", "“á⮩稢®áâ¨", " ¢ëª¨", " £à ¤ë", "ޝëâ"
+		};
+		return _statNames;
+	}
+
+	const char **CONSUMABLE_NAMES() {
+		delete[] _consumableNames;
+		_consumableNames = new const char *[4] { "‡®«®â®", "€«¬ §ë", "¨é ", "‘®áâ®ï­¨¥" };
+		return _consumableNames;
+	}
+
+	const char **WHERE_NAMES() {
+		delete[] _whereNames;
+		_whereNames = new const char *[2] { "ã ®âà鸞", "¢ ¡ ­ª¥" };
+		return _whereNames;
+	}
+
+	const char *AMOUNT() {
+		return "\x3""c\t000\v051‘ª®«ìª®\x3""l\n";
+	}
+
+	const char *FOOD_PACKS_FULL() {
+		return "\v007‚ è¨ à ª¨ 㦥 ­ ¯®«­¥­ë!";
+	}
+
+	const char *BUY_SPELLS() {
+		return
+			"\x3""c\v027\t039%s\x3""l\v046\n"
+			"\t012\f37Š\fd㯨âì\n"
+			"\t012\f37Ž\fd¯¨á ­¨ï";
+	}
+
+	const char *GUILD_OPTIONS() {
+		return
+			"\x1\r\f00\x3""c\v000\t000ƒ¨«ì¤¨ï\n"
+			"%s\x3""l\t000\v090‡®«"
+			"\x3""r\t000%s\x2\x3""c\v122\t040ESC\x1";
+	}
+
+	const char *NOT_A_SPELL_CASTER() {
+		return "‚ë ­¥ § ª«¨­ â¥«ì...";
+	}
+
+	const char *SPELLS_LEARNED_ALL() {
+		return
+			"‚ë 㦥 §­ ¥â¥ ¢áñ,\n"
+			"\t010ç¥¬ã ¬ë ¬®¦¥¬ ¢ á\n"
+			"\t010­ ãç¨âì!\n"
+			"\n"
+			"\n"
+			"\n"
+			"\n"
+			"\n"
+			"\n"
+			"\n"
+			"\n"
+			"\n";
+	}
+
+	const char *SPELLS_FOR() {
+		return "\r\fd%s\x2\x3""c\t000\v002‡ ª«¨­ ­¨ï";
+	}
+
+	const char *SPELL_LINES_0_TO_9() {
+		return "\x2\x3l\v015\t0011\n2\n3\n4\n5\n6\n7\n8\n9\n0";
+	}
+
+	const char *SPELLS_DIALOG_SPELLS() {
+		return 
+			"\x3l\v015"
+			"\t010\f%2u%s\fd\x3l\n"
+			"\t010\f%2u%s\fd\x3l\n"
+			"\t010\f%2u%s\fd\x3l\n"
+			"\t010\f%2u%s\fd\x3l\n"
+			"\t010\f%2u%s\fd\x3l\n"
+			"\t010\f%2u%s\fd\x3l\n"
+			"\t010\f%2u%s\fd\x3l\n"
+			"\t010\f%2u%s\fd\x3l\n"
+			"\t010\f%2u%s\fd\x3l\n"
+			"\t010\f%2u%s\fd\x3l"
+			"\t004\v110%s - %u\x1";
+	}
+
+	const char *SPELL_PTS() {
+		return "Œ ­ ";
+	}
+
+	const char *GOLD() {
+		return "‡®«";
+	}
+
+	const char *SPELL_INFO() {
+		return
+			"\x3""c\f09%s\fd\x3""l\n"
+			"\n"
+			"%s\x3""c\t000\v110. ª« ¢¨èã!";
+	}
+
+	const char *SPELL_PURCHASE() {
+		return
+			"\x3""l\v000\t000\fd%s  †¥« ¥â¥ ¯à¨®¡à¥á⨠"
+			"\f09%s\fd §  %u?";
+	}
+
+	const char *MAP_TEXT() {
+		return
+			"\x3""c\v000\t000%s\x3l\v139"
+			"\t000X = %d\x3r\t000Y = %d\x3""c\t000%s";
+	}
+
+	const char *LIGHT_COUNT_TEXT() {
+		return "\x3""l\n\n\t024‘¢¥â\x3""r\t124%u";
+	}
+
+	const char *FIRE_RESISTENCE_TEXT() {
+		return "%c%sŽ£®­ì%s%u";
+	}
+
+	const char *ELECRICITY_RESISTENCE_TEXT() {
+		return "%c%sƒà®¬%s%u";
+	}
+
+	const char *COLD_RESISTENCE_TEXT() {
+		return "%c%s•®«®¤%s%u";
+	}
+
+	const char *POISON_RESISTENCE_TEXT() {
+		return "%c%sŸ¤/Š¨á«®â %s%u";
+	}
+
+	const char *CLAIRVOYANCE_TEXT() {
+		return "%c%sŸá­®¢¨¤¥­¨¥%s";
+	}
+
+	const char *LEVITATE_TEXT() {
+		return "%c%s‹¥¢¨â æ¨ï%s";
+	}
+
+	const char *WALK_ON_WATER_TEXT() {
+		return "%c%s•®¦¤¥­¨¥ ¯® ¢®¤¥";
+	}
+
+	const char *GAME_INFORMATION() {
+		return
+			"\r\x3""c\t000\v001\f37%s Šá¨­ \fd\n"
+			"ˆ£à®¢ ï ¨­ä®à¬ æ¨ï\n"
+			"\n"
+			"‘¥£®¤­ï \f37%s\fd\n"
+			"\n"
+			"\t032‚६ï\t072„¥­ì\t112ƒ®¤\n"
+			"\t032\f37%d:%02d%c\t072%u\t112%u\fd%s";
+	}
+
+	const char *WORLD_GAME_TEXT() {
+		return "World";
+	}
+
+	const char *DARKSIDE_GAME_TEXT() {
+		return "Darkside";
+	}
+
+	const char *CLOUDS_GAME_TEXT() {
+		return "Ž¡« ª ";
+	}
+
+	const char *SWORDS_GAME_TEXT() {
+		return "Swords";
+	}
+
+	const char **WEEK_DAY_STRINGS() {
+		delete[] _weekDayStrings;
+		_weekDayStrings = new const char *[10] {
+			"¤¥áï⨤¥­ì", "¯¥à¢®¤¥­ì", "¢â®à®¤¥­ì", "âà¥â쥤¥­ì", "ç¥â¢¥à®¤¥­ì",
+			"¯ï⨤¥­ì",   "è¥á⨤¥­ì", "ᥬ¨¤¥­ì",  "¢®á쬨¤¥­ì", "¤¥¢ï⨤¥­ì"
+		};
+		return _weekDayStrings;
+	}
+
+	const char *CHARACTER_DETAILS() {
+		return
+			"\x3""l\v041\t196%s\t000\v002%s : %s %s %s"
+			"\x3""r\t053\v028\f%02u%u\fd\t103\f%02u%u\fd"
+			"\x3""l\t131\f%02u%d\fd\t196\f15%lu\fd\x3""r"
+			"\t053\v051\f%02u%u\fd\t103\f%02u%u\fd"
+			"\x3""l\t131\f%02u%u\fd\t196\f15%lu\fd"
+			"\x3""r\t053\v074\f%02u%u\fd\t103\f%02u%u\fd"
+			"\x3""l\t131\f15%u\fd\t196\f15%lu\fd"
+			"\x3""r\t053\v097\f%02u%u\fd\t103\f%02u%u\fd"
+			"\x3""l\t131\f15%u\fd\t196\f15%u %s\fd"
+			"\x3""r\t053\v120\f%02u%u\fd\t103\f%02u%u\fd"
+			"\x3""l\t131\f15%u\fd\t196\f%02u%s\fd"
+			"\t245%s%s%s%s\fd";
+	}
+
+	const char **DAYS() {
+		delete[] _days;
+		_days = new const char *[3] { "¤¥­ì", "¤­ï", "¤­¥©" };
+		return _days;
+	}
+
+	const char *PARTY_GOLD() {
+		return "‡®«®â®";
+	}
+
+	const char *PLUS_14() {
+		return "\f14+";
+	}
+
+	const char *CHARACTER_TEMPLATE() {
+		return
+			"\x1\f00\r\x3""l\t029\v018‘¨«\t080Œâª\t131‡¤®à\t196ޝëâ"
+			"\t029\v041ˆ­â\t080“¤ç\t131ŽŒ\t029\v064„ãå\t080‚§à"
+			"\t131“áâ\t196€«¬ §ë\t029\v087‘«¦\t080“à¢\t131¢ª"
+			"\t196¨é \t029\v110‘ªà\t080Ї\t131 £à\t196‘®áâ®ï­¨¥"
+			"\x3""c\t290\v025\f37‚\fd¥é¨\t290\v057\f37"
+			"\fdáâà\t290\v089\f37‘\fd¬¥­\t290\v121‚ë室\x3""l%s";
+	}
+
+	const char *EXCHANGING_IN_COMBAT() {
+		return "\x3""c\v007\t000‚® ¢à¥¬ï ¡¨â¢ë § ¯à¥é¥­® ¬¥­ïâìáï ¬¥áâ ¬¨!";
+	}
+
+	const char *CURRENT_MAXIMUM_RATING_TEXT() {
+		return
+			"\x2\x3""c%s\n"
+			"‘¥©ç á / Œ ªá¨¬ã¬\n"
+			"\x3""r\t054%lu\x3""l\t058/ %lu\n"
+			"\x3""c ­£: %s\x1";
+	}
+
+	const char *CURRENT_MAXIMUM_TEXT() {
+		return
+			"\x2\x3""c%s\n"
+			"‘¥©ç á / Œ ªá¨¬ã¬\n"
+			"\x3""r\t054%d\x3""l\t058/ %lu";
+	}
+
+	const char **RATING_TEXT() {
+		delete[] _ratingText;
+		_ratingText = new const char *[24] {
+			"¥â", "Œ¨§¥à­ë©", "† «ª¨©", "Žç.­¨§ª¨©", "¨§ª¨©", "‘।­¨©", "•®à®è¨©",
+			"Žâ«¨ç­ë©", "‚ë᮪¨©", "‚ëá®ç¥­­ë©", "®«ì让", "Ž£à®¬­ë©", "“¤¨¢¨â¥«ì­ë©",
+			"¥¢¥à®ïâ­ë©", "ƒ¨£ ­â᪨©", "” ­â áâ¨ç­ë©", "ˆ§ã¬¨â¥«ì­ë©", "®à §¨â¥«ì­ë©",
+			"ƒà ­¤¨®§­ë©", "ƒà®¬ ¤­ë©", "Š®«®áá «ì­ë©", "®âàïá î騩", "—㤮¢¨é­ë©",
+			"‚ëá®ç ©è¨©"
+		};
+		return _ratingText;
+	}
+
+	const char *AGE_TEXT() {
+		return
+			"\x2\x3""c%s\n"
+			"’¥ªã騩 /  áâ®ï騩\n"
+			"\x3""r\t057%u\x3""l\t061/ %u\n"
+			"\x3""c®¤¨«%s: %u / %u\x1";
+	}
+
+	const char *LEVEL_TEXT() {
+		return
+			"\x2\x3""c%s\n"
+			"’¥ªã騩 / Œ ªá¨¬ã¬\n"
+			"\x3""r\t054%u\x3""l\t058/ %u\n"
+			"\x3""c%u €â ª%s/ ã­¤\x1";
+	}
+
+	const char *RESISTENCES_TEXT() {
+		return
+			"\x2\x3""c%s\x3""l\n"
+			"\t020Ž£®­ì\t100%u\n"
+			"\t020•®«®¤\t100%u\n"
+			"\t020ƒà®¬\t100%u\n"
+			"\t020Ÿ¤\t100%u\n"
+			"\t020­¥à£¨ï\t100%u\n"
+			"\t020Œ £¨ï\t100%u";
+	}
+
+	const char *NONE() {
+		return "\n\t012¥â";
+	}
+
+	const char *EXPERIENCE_TEXT() {
+		return
+			"\x2\x3""c%s\x3""l\n"
+			"\t005’¥ªã騩:\t070%lu\n"
+			"\t005‘«. ã஢¥­ì:\t070%s\x1";
+	}
+
+	const char *ELIGIBLE() {
+		return "\f12„®áâ㯥­\fd";
+	}
+
+	const char *IN_PARTY_IN_BANK() {
+		return
+			"\x2\x3""c%s\n"
+			"%lu á ᮡ®©\n"
+			"%lu ¢ ¡ ­ª¥\x1\x3""l";
+	}
+
+	const char *FOOD_TEXT() {
+		return
+			"\x2\x3""c%s\n"
+			"%u ¯®àæ¨%c\n"
+			"•¢ â¨â ­  %u %s\x1\x3""l";
+	}
+
+	const char *EXCHANGE_WITH_WHOM() {
+		return "\t010\v005®¬¥­ïâìáï á ª¥¬?";
+	}
+
+	const char *QUICK_REF_LINE() {
+		return
+			"\v%3d\t007%u)\t027%s\t110%c%c%c\x3r\t160\f%02u%u\fd"
+			"\x3l\t170\f%02u%d\fd\t208\f%02u%u\fd\t247\f"
+			"%02u%u\fd\t270\f%02u%c%c%c%c\fd";
+	}
+
+	const char *QUICK_REFERENCE() {
+		return
+			"\r\x3""cëáâà ï c¯à ¢ª \v012\x3""l"
+			"\t007#\t027ˆ¬ï\t110Š«á\t147“à¢\t174‡¤®à"
+			"\t214ŽŒ\t242Ї\t270‘®áâ"
+			"%s%s%s%s%s%s%s%s"
+			"\v110\t064\x3""c‡®«®â®\t144€«¬ §ë\t224¨é \v119"
+			"\t064\f15%lu\t144%lu\t224%u %s\fd";
+	}
+
+	const char *ITEMS_DIALOG_TEXT1() {
+		return
+			"\r\x2\x3""c\v021\t017Žàã\f37¦\fd\t051\f37\fdà®­ï\t085"
+			"\f37“\fdªà è\t119\f37\fd §­\t153%s\t187%s\t221%s\t255%s\t289‚ë室";
+	}
+
+	const char *ITEMS_DIALOG_TEXT2() {
+		return
+			"\r\x2\x3""c\v021\t017Žàã\f37¦\fd\t051\f37\fdà®­ï\t085"
+			"\f37“\fdªà è\t119\f37\fd §­\t153\f37%s\t289‚ë室";
+	}
+
+	const char *ITEMS_DIALOG_LINE1() {
+		return "\x3r\f%02u\t023%2d)\x3l\t028%s\n";
+	}
+
+	const char *ITEMS_DIALOG_LINE2() {
+		return "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%u\n";
+	}
+
+	const char *BTN_BUY() {
+		return "\f37Š\fdã¯";
+	}
+
+	const char *BTN_SELL() {
+		return "\f37\fdத";
+	}
+
+	const char *BTN_IDENTIFY() {
+		return "\f37Ž\fd¯®§­";
+	}
+
+	const char *BTN_FIX() {
+		return "\f37—\fd¨­¨âì";
+	}
+
+	const char *BTN_USE() {
+		return "\f37ˆ\fdá¯";
+	}
+
+	const char *BTN_EQUIP() {
+		return "\f37\fd ¤";
+	}
+
+	const char *BTN_REMOVE() {
+		return "\f37‘\fd­ïâì";
+	}
+
+	const char *BTN_DISCARD() {
+		return "\f37‚\fdë¡à";
+	}
+
+	const char *BTN_QUEST() {
+		return "\f37‡\fd ¤ ­";
+	}
+
+	const char *BTN_ENCHANT() {
+		return "‡\fd ç à";
+	}
+
+	const char *BTN_RECHARGE() {
+		return "\fd¥à¥§à";
+	}
+
+	const char *BTN_GOLD() {
+		return "‡\fd®«®â®";
+	}
+
+	const char *ITEM_BROKEN() {
+		return "\f32á«®¬ ­® ";
+	}
+
+	const char *ITEM_CURSED() {
+		return "\f09¯à®ª«ïâ® ";
+	}
+
+	const char *ITEM_OF() {
+		return "";
+	}
+
+	const char **BONUS_NAMES() {
+		delete[] _bonusNames;
+		_bonusNames = new const char *[7] {
+			"", "“¡¨©æë ¤à ª®­®¢", "ˆ§£®­ïî饣® ¬ñàâ¢ëå", "Šàãè¨â¥«ï £®«¥¬®¢",
+			"„ ¢¨â¥«ï ­ á¥ª®¬ëå", "“¡¨©æë ¬®­áâ஢", "“¡¨©æë §¢¥à¥©"
+		};
+		return _bonusNames;
+	}
+
+	const char **WEAPON_NAMES() {
+		delete[] _weaponNames;
+		_weaponNames = new const char *[41] {
+			nullptr, "¬¥ç ", "£« ¤¨ãá ", "¯ « è ", "ïâ £ ­ ",
+			"ª®à⨪ ", "á ¡«ï ", "¤ã¡¨­  ", "⮯®à ", "ª â ­  ", "­ã­ç ª¨ ",
+			"¢ ª¨¤§ á¨ ", "ª¨­¦ « ", "¡ã« ¢  ", "楯 ", "¦¥§« ", "¬®«®â ", "ª®¯ìñ ",
+			"¡¥à¤ëè ", "£«¥ä  ", " «¥¡ à¤  ", "¯¨ª  ", "ä« ¬¡¥à£ ", "â१㡥æ ",
+			"¯®á®å ", "¡®¥¢®© ¬®«®â ", "­ £¨­ â  ", "¡®¥¢®© ⮯®à ", "ᥪ¨à  ",
+			"⮯®à ¯ « ç  ", "«ãª ", "¡®«ì让 «ãª ", " à¡ «¥â ", "¯à é  ",
+			"Œ¥ç - 㡨©æ  Šá¨­  ",
+			"Elder LongSword ", "Elder Dagger ", "Elder Mace ", "Elder Spear ",
+			"Elder Staff ", "Elder LongBow "
+		};
+		return _weaponNames;
+	}
+
+	const char **ARMOR_NAMES() {
+		delete[] _armorNames;
+		_armorNames = new const char *[14] {
+			nullptr, "¬ ­â¨ï ", "ç¥èãï ", "¯ ­æ¨àì ", "ª®«ìç㣠 ",
+			"î謠­ ", "¡¥åâ¥à¥æ ", "« âë ", "é¨â ",
+			"è«¥¬ ", "á ¯®£¨ ", "¯« é ", "­ ª¨¤ª  ", "¯¥àç âª¨ "
+		};
+		return _armorNames;
+	}
+
+	const char **ACCESSORY_NAMES() {
+		delete[] _accessoryNames;
+		_accessoryNames = new const char *[11] {
+			nullptr, "ª®«ìæ® ", "¯®ïá ", "¡à®èì ", "¬¥¤ «ì ", "â «¨á¬ ­ ", "ª ¬¥ï ",
+			"᪠ࠡ¥© ", "ªã«®­ ", "®¦¥à¥«ì¥ ", " ¬ã«¥â "
+		};
+		return _accessoryNames;
+	}
+
+	const char **MISC_NAMES() {
+		delete[] _miscNames;
+		_miscNames = new const char *[22] {
+			nullptr, "᪨¯¥âà ", "á ¬®æ¢¥â ", "ª ¬¥­ì ", "誠â㫪  ", "áä¥à  ", "ண ",
+			"¬®­¥âª  ", "¦¥§« ", "ᢨá⮪ ", "§¥«ì¥ ", "ᢨ⮪ ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ",
+			"¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ",
+			"¯®¤¤¥«ª ", "¯®¤¤¥«ª "
+		};
+		return _miscNames;
+	}
+
+	const char **SPECIAL_NAMES() {
+		delete[] _specialNames;
+		_specialNames = new const char *[74] {
+			nullptr, "ᢥâ ", "¯à®¡ã¦¤¥­¨ï", "¢®«è¥¡­ëå áâ५", "¯¥à¢®© ¯®¬®é¨",
+			"ªã« ª®¢", "í­¥à£¥â¨ç¥áª®£® ¢§à뢠", "ãá믫¥­¨ï", "«¥ç¥­¨ï á« ¡®áâ¨",
+			"«¥ç¥­¨ï", "¨áªà", "èà ¯­¥«¨", "९¥««¥­â ", "冷¢¨âëå ®¡« ª®¢",
+			"§ é¨âë ®â áâ¨å¨©", "¡®«¨", "¯à릪®¢", "ª®­âà®«ï ­ ¤ ¬®­áâà ¬¨",
+			"ïá­®¢¨¤¥­¨ï", "¨§£­ ­¨ï ­¥¦¨â¨", "«¥¢¨â æ¨¨", "¢®«è¥¡­®£® £« § ",
+			"¡« £®á«®¢¥­¨ï", "®¯®§­ ­¨ï ¬®­áâ஢", "¬®«­¨©", "á¢ïâëå ¤ à®¢", "¨á楫¥­¨ï",
+			"¯à¨à®¤­®£® «¥ç¥­¨ï", "¬ ïª®¢", "é¨â ", "¬ã¦¥á⢠", "£¨¯­®§ ",
+			"宦¤¥­¨ï ¯® ¢®¤¥", "®¡¦¨£ î饣® 宫®¤ ", "¯®¨áª  ¬®­áâ஢",
+			"®£­¥­­ëå è à®¢", "«ã祩 宫®¤ ", "¯à®â¨¢®ï¤¨ï", "à á¯ë«¥­¨ï ª¨á«®âë",
+			"¢à¥¬¥­­®£® ¨áª ¦¥­¨ï", "ãá믫¥­¨ï ¤à ª®­®¢", "¢ ªæ¨­ æ¨¨", "⥫¥¯®àâ æ¨¨",
+			"ᬥàâ¨", "᢮¡®¤­®£® ¤¢¨¦¥­¨ï", "®áâ ­®¢ª¨ £®«¥¬ ", "冷¢¨âëå § «¯®¢",
+			"ᬥà⥫쭮£® à®ï", "ã¡¥¦¨é ", "¤­ï § é¨âë", "¤­ï ¬ £¨¨", "¯¨à ",
+			"®£­¥­­®£® 楯 ", "¯¥à¥§ à浪¨", "¬®à®§ ", "£®à®¤áª¨å ¯®àâ «®¢",
+			"á­ïâ¨ï ®ª ¬¥­¥­¨ï", "®¦¨¢«¥­¨ï ¬ñàâ¢ëå", "¤¥¬ â¥à¨ «¨§ æ¨¨",
+			"â ­æãîé¨å ª«¨­ª®¢", "«ã­­ëå «ã祩", "¨§¬¥­¥­¨ï ¢¥á ",
+			"¯à¨§¬ â¨ç¥áª®£® ᢥâ ", "ç à", "¨á¯¥¯¥«¥­¨ï", "á¢ïâëå á«®¢", "¢®áªà¥è¥­¨ï",
+			"¡ãàì", "¬¥£ ¢®«ìâ", "¨­ä¥à­®", "᮫­¥ç­ëå «ã祩", "¨¬¯«®§¨©",
+			"¢§à뢠 §¢¥§¤ë", "ŽƒŽ‚!"
+		};
+		return _specialNames;
+	}
+
+	const char **ELEMENTAL_NAMES() {
+		delete[] _elementalNames;
+		_elementalNames = new const char *[6] {
+			"Ž£­ï", "ƒà®¬ ", "•®«®¤ ", "Š¨á«®âë/Ÿ¤ ", "­¥à£¨¨", "Œ £¨¨"
+		};
+		return _elementalNames;
+	}
+
+	const char **ATTRIBUTE_NAMES() {
+		delete[] _attributeNames;
+		_attributeNames = new const char *[10] {
+			"‘¨« ", "ˆ­â¥««¥ªâ", "‘¨«  ¤ãå ", "‘ª®à®áâì", "Œ¥âª®áâì", "“¤ ç ",
+			"‡¤®à®¢ì¥", "Žçª¨ ¬ £¨¨", "Š« áá § é¨âë", "‚®à®¢á⢮"
+		};
+		return _attributeNames;
+	}
+
+	const char **EFFECTIVENESS_NAMES() {
+		delete[] _effectivenessNames;
+		_effectivenessNames = new const char *[7] {
+			nullptr, "„à ª®­®¢", "Œñàâ¢ëå", "ƒ®«¥¬®¢", " á¥ª®¬ëå", "Œ®­áâ஢", "‡¢¥à¥©"
+		};
+		return _effectivenessNames;
+	}
+
+	const char **QUEST_ITEM_NAMES() {
+		delete[] _questItemNames;
+		_questItemNames = new const char *[85] {
+			"à ¢® ¢« ¤¥­¨ï ì᫮¬",
+			"•àãáâ «ì­ë© ª«îç ®â ‚¥¤ì¬¨­®© ¡ è­¨",
+			"Žâ¬ë窠 ¤«ï ¡ è­¨ „ à§®£ ",
+			"Š«îç ®â  è­¨ ¢ëá襩 ¬ £¨¨",
+			"„à £®æ¥­­ë©  ¬ã«¥â ‘¥¢¥à­®£® ‘䨭ªá ",
+			"Š ¬¥­ì ’ëáïç¨ “¦ á®¢",
+			"Žâ¯¨à î騩 ª ¬¥­ì £®«¥¬®¢",
+			"Žâ¯¨à î騩 ª ¬¥­ì Ÿª ",
+			"‘ª¨¯¥âà ‚à¥¬¥­­®£® ˆáª ¦¥­¨ï",
+			"®£ ” «¨áâë",
+			"«¨ªá¨à ‚®ááâ ­®¢«¥­¨ï",
+			"‚®«è¥¡­ë© ¦¥§« 䥩",
+			"„¨ ¤¥¬  ¯à¨­æ¥ááë ®ªá ­ë",
+			"‘¢ï饭­ ï Š­¨£  «ì䮢",
+			"‘ª à ¡¥© ‚®¯«®é¥­¨ï",
+			"Šà¨áâ ««ë ì¥§®í«¥ªâà¨ç¥á⢠",
+			"‘¢¨â®ª Œã¤à®áâ¨",
+			"Š®à¥­ì ä¨à­ë",
+			"Š®áâï­®© ᢨá⮪ Žà®ä¨­ ",
+			"‚®«è¥¡­ë© ªã«®­  à®ª ",
+			"à®¯ ¢è¨© ç¥à¥¯ ‹¨£®­®",
+			"®á«¥¤­¨© 梥⮪ «¥â ",
+			"®á«¥¤­ïï ¤®¦¤¥¢ ï ª ¯¥«ìª  ¢¥á­ë",
+			"®á«¥¤­ïï á­¥¦¨­ª  §¨¬ë",
+			"®á«¥¤­¨© «¨á⠮ᥭ¨",
+			"‚¥ç­® £®àï稩 ªã᮪ ¯¥¬§ë",
+			"Œ¥£ ªà¥¤¨â ª®à®«ï",
+			" §à¥è¥­¨¥ ­  à áª®¯ª¨",
+			"Šãª®«ª ",
+			"Šãª«  ‘¨«ë",
+			"Šãª«  ‘ª®à®áâ¨",
+			"Šãª«  ‘«®¦¥­¨ï",
+			"Šãª«  Œ¥âª®áâ¨",
+			"Šãª«  “¤ ç¨",
+			"“áâனá⢮",
+			"Pass to Castleview",
+			"Pass to Sandcaster",
+			"Pass to Lakeside",
+			"Pass to Necropolis",
+			"Pass to Olympus",
+			"Key to Great Western Tower",
+			"Key to Great Southern Tower",
+			"Key to Great Eastern Tower",
+			"Key to Great Northern Tower",
+			"Key to Ellinger's Tower",
+			"Key to Dragon Tower",
+			"Key to Darkstone Tower",
+			"Key to Temple of Bark",
+			"Key to Dungeon of Lost Souls",
+			"Key to Ancient Pyramid",
+			"Key to Dungeon of Death",
+			"Amulet of the Southern Sphinx",
+			"Dragon Pharoah's Orb",
+			"Cube of Power",
+			"Chime of Opening",
+			"Gold ID Card",
+			"Silver ID Card",
+			"Vulture Repellant",
+			"Bridle",
+			"Enchanted Bridle",
+			"Treasure Map (Goto E1 x1, y11)",
+			"",
+			"Fake Map",
+			"Onyx Necklace",
+			"Dragon Egg",
+			"Tribble",
+			"Golden Pegasus Statuette",
+			"Golden Dragon Statuette",
+			"Golden Griffin Statuette",
+			"Chalice of Protection",
+			"Jewel of Ages",
+			"Songbird of Serenity",
+			"Sandro's Heart",
+			"Ector's Ring",
+			"Vespar's Emerald Handle",
+			"Queen Kalindra's Crown",
+			"Caleb's Magnifying Glass",
+			"Soul Box",
+			"Soul Box with Corak inside",
+			"Ruby Rock",
+			"Emerald Rock",
+			"Sapphire Rock",
+			"Diamond Rock",
+			"Monga Melon",
+			"Energy Disk"
+		};
+		return _questItemNames;
+	}
+
+	const char **QUEST_ITEM_NAMES_SWORDS() {
+		delete[] _questItemNamesSwords;
+		_questItemNamesSwords = new const char *[51] {
+			"Pass to Hart", "Pass to Impery", "Pass to town3", "Pass to town4", "Pass to town5",
+				"Key to Hart Sewers", "Key to Rettig's Pyramid", "Key to the Old Temple",
+				"Key to Canegtut's Pyramid", "Key to Ascihep's Pyramid", "Key to Dragon Tower",
+				"Key to Darkstone Tower", "Key to Temple of Bark", "Key to Dungeon of Lost Souls",
+				"Key to Ancient Pyramid", "Key to Dungeon of Death", "Red Magic Hammer",
+				"Green Magic Hammer", "Golden Magic Wand", "Silver Magic Hammer", "Magic Coin",
+				"Ruby", "Diamond Mineral", "Emerald", "Sapphire", "Treasure Map (Goto E1 x1, y11)",
+				"NOTUSED", "Melon", "Princess Crown", "Emerald Wand", "Druid Carving", "High Sign",
+				"Holy Wheel", "Double Cross", "Sky Hook", "Sacred Cow", "Staff of the Mountain",
+				"Hard Rock", "Soft Rock", "Rock Candy", "Ivy Plant", "Spirit Gem", "Temple of Sun holy lamp oil",
+				"Noams Hammer", "Positive Orb", "Negative Orb", "FireBane Staff", "Diamond Edged Pick",
+				"Monga Melon", "Energy Disk", "Old XEEN Quest Item"
+		};
+		return _questItemNamesSwords;
+	}
+
+	const char *NOT_PROFICIENT() {
+		return "\t000\v007\x3""c%s ­¥ ¬®¦¥â ¨á¯®«ì§®¢ âì %s!";
+	}
+
+	const char *NO_ITEMS_AVAILABLE() {
+		return "\x3""c\n\t000¥â ¢¥é¥©.";
+	}
+
+	const char **CATEGORY_NAMES() {
+		delete[] _categoryNames;
+		_categoryNames = new const char *[4] { "Žà㦨¥", "à®­ï", "“ªà è¥­¨ï", " §­®¥" };
+		return _categoryNames;
+	}
+
+	const char *X_FOR_THE_Y() {
+		return "\x1\fd\r%s\v000\t000%s - %s %s%s\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+	}
+
+	const char *X_FOR_Y() {
+		return
+		"\x1\fd\r\x3""l\v000\t000%s - %s\x3""r\t000%s\x3""l\v011"
+		"\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+	}
+
+	const char *X_FOR_Y_GOLD() {
+		return
+			"\x1\fd\r\x3""l\v000\t000%s - %s\t150‡®«®â® - %lu%s\x3""l\v011"
+			"\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+	}
+
+	const char *FMT_CHARGES() {
+		return "\x3""r\t000‡ à冷¢\x3""l";
+	}
+
+	const char *AVAILABLE_GOLD_COST() {
+		return
+		"\x1\fd\r\x3""l\v000\t000%s\t150‡®«®â® - %lu\x3""r\t000–¥­ "
+		"\x3""l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+	}
+
+	const char *CHARGES() {
+		return "‡ à冷¢";
+	}
+
+	const char *COST() {
+		return "–¥­ ";
+	}
+
+	const char **ITEM_ACTIONS() {
+		delete[] _itemActions;
+		_itemActions = new const char *[7] {
+			"­ ¤¥âì", "á­ïâì", "¨á¯®«ì§®¢ âì", "¢ëª¨­ãâì", "§ ç à®¢ âì", "¯¥à¥§ à廊âì",
+			"à¥¢à â¨âì ¢ §®«®â®"
+		};
+		return _itemActions;
+	}
+
+	const char *WHICH_ITEM() {
+		return "\v000Š ª®© ¯à¥¤¬¥â ¢ë ¦¥« ¥â¥ %s?";
+	}
+
+	const char *WHATS_YOUR_HURRY() {
+		return
+			"\v007—¥£® â®à®¯¨èìáï?\n"
+			"®¤®¦¤¨, ¯®ª  ­¥ ¢ë¡¥à¥èìáï ®âá!";
+	}
+
+	const char *USE_ITEM_IN_COMBAT() {
+		return "\v007—â®¡ë ¨á¯®«ì§®¢ âì ¯à¥¤¬¥â ¢ ¡¨â¢¥, ­ ¦¬¨â¥ ­  ª­®¯ªã 'ˆá¯' ­  ¡®ª®¢®© ¯ ­¥«¨.";
+	}
+
+	const char *NO_SPECIAL_ABILITIES() {
+		return "\v005\x3""c%s\fd­¥ ¨¬¥¥â ®á®¡ëå ᢮©áâ¢!";
+	}
+
+	const char *CANT_CAST_WHILE_ENGAGED() {
+		return "\x3""c\v007‡ ª«¨­ ­¨¥ %s ­¥«ì§ï ¨á¯®«ì§®¢ âì ¢ ¡¨â¢¥!";
+	}
+
+	const char *EQUIPPED_ALL_YOU_CAN() {
+		return "\x3""c\v007‚ë ­¥ ¬®¦¥â¥ ­ ¤¥âì ¡®«ìè¥ ¤¢ãå %s!";
+	}
+
+	const char *REMOVE_X_TO_EQUIP_Y() {
+		return "\x3""c\v007‚ ¬ ­ã¦­® á­ïâì %sçâ®¡ë ­ ¤¥âì %s\b!";
+	}
+
+	const char *RING() {
+		return "ª®«¥æ";
+	}
+
+	const char *MEDAL() {
+		return "¬¥¤ «¥©";
+	}
+
+	const char *CANNOT_REMOVE_CURSED_ITEM() {
+		return "\x3""c‚ë ­¥ ¬®¦¥â¥ á­ïâì ¯à®ª«ïâãî ¢¥éì!";
+	}
+
+	const char *CANNOT_DISCARD_CURSED_ITEM() {
+		return "\x3""c‚ë ­¥ ¬®¦¥â¥ ¢ëª¨­ãâì ¯à®ª«ïâãî ¢¥éì!";
+	}
+
+	const char *PERMANENTLY_DISCARD() {
+		return "\v000\t000\x3""l‚모­ãâì ­ ¢á¥£¤ ? %s";
+	}
+
+	const char *BACKPACK_IS_FULL() {
+		return "\v005\x3""c\fd%s! ‚ è à ª ¯®«®­.";
+	}
+
+	const char **CATEGORY_BACKPACK_IS_FULL() {
+		delete[] _categoryBackpackIsFull;
+		_categoryBackpackIsFull = new const char *[4] {
+			"\v010\t000\x3""c%s! ‚ è à ª ¯®«®­.",
+			"\v010\t000\x3""c%s! ‚ è à ª ¯®«®­.",
+			"\v010\t000\x3""c%s! ‚ è à ª ¯®«®­.",
+			"\v010\t000\x3""c%s! ‚ è à ª ¯®«®­."
+		};
+		return _categoryBackpackIsFull;
+	}
+
+	const char *BUY_X_FOR_Y_GOLD() {
+		return "\x3""l\v000\t000\fdŠã¯¨âì %s\fd §  %lu §®«®â%s?";
+	}
+
+	const char *SELL_X_FOR_Y_GOLD() {
+		return "\x3""l\v000\t000\fdà®¤ âì %s\fd §  %lu §®«®â%s?";
+	}
+
+	const char **SELL_X_FOR_Y_GOLD_ENDINGS() {
+		delete[] _sellXForYGoldEndings;
+		_sellXForYGoldEndings = new const char *[2] { "®©", "ëå" };
+		return _sellXForYGoldEndings;
+	}
+
+	const char *NO_NEED_OF_THIS() {
+		return "\v005\x3""c\fd á ­¥ ¨­â¥à¥áã¥â %s\fd!";
+	}
+
+	const char *NOT_RECHARGABLE() {
+		return "\v007\x3""c\fd¥¢®§¬®¦­® ¯¥à¥§ à廊âì.\n%s";
+	}
+
+	const char *NOT_ENCHANTABLE() {
+		return "\v007\t000\x3""c¥¢®§¬®¦­® § ç à®¢ âì.\n%s";
+	}
+
+	const char *SPELL_FAILED() {
+		return "‡ ª«¨­ ­¨¥ ­¥ áà ¡®â «®!";
+	}
+
+	const char *ITEM_NOT_BROKEN() {
+		return "\fdâ®â ¯à¥¤¬¥â ­¥ á«®¬ ­!";
+	}
+
+	const char **FIX_IDENTIFY() {
+		delete[] _fixIdentify;
+		_fixIdentify = new const char *[2] { "®ç¨­¨âì", "ޝ®§­ âì" };
+		return _fixIdentify;
+	}
+
+	const char *FIX_IDENTIFY_GOLD() {
+		return "\x3""l\v000\t000%s %s\fd §  %lu §®«®â%s?";
+	}
+
+	const char *IDENTIFY_ITEM_MSG() {
+		return
+			"\fd\v000\t000\x3""cޝ®§­ âì ¯à¥¤¬¥â\x3""l\n"
+			"\n"
+			"\v012%s\fd\n"
+			"\n"
+			"%s";
+	}
+
+	const char *ITEM_DETAILS() {
+		return
+			"ˆá¯®«ì§ãîâ ª« ááë\t132:\t140%s\n"
+			"Œ®¤¨ä¨ª â®à ãà®­ \t132:\t140%s\n"
+			"”¨§¨ç¥áª¨© ãà®­\t132:\t140%s\n"
+			"“à®­ ®â ‘â¨å¨©\t132:\t140%s\n"
+			"‡ é¨â  ®â ‘â¨å¨©\t132:\t140%s\n"
+			"Š« áá § é¨âë\t132:\t140%s\n"
+			"®­ãá ᢮©á⢠\t132:\t140%s\n"
+			"Žá®¡®¥ ᢮©á⢮\t132:\t140%s";
+	}
+
+	const char *ALL() {
+		return "⇴";
+	}
+
+	const char *FIELD_NONE() {
+		return "¥â";
+	}
+
+	const char *DAMAGE_X_TO_Y() {
+		return "%d-%d";
+	}
+
+	const char *ELEMENTAL_XY_DAMAGE() {
+		return "%+d ãà®­  ®â %s";
+	}
+
+	const char *ATTR_XY_BONUS() {
+		return "%+d %s";
+	}
+
+	const char *EFFECTIVE_AGAINST() {
+		return "x3 ¯à®â¨¢ %s";
+	}
+
+	const char *QUESTS_DIALOG_TEXT() {
+		return
+			"\r\x2\x3""c\v021\t017\f37‚\fd¥é¨\t085\f37‡\fd ¤ ­¨ï\t153"
+			"‡\f37 \fd¬¥âª¨\t221‚¢¥àå\t255‚­¨§"
+			"\t289‚ë室";
+	}
+
+	const char *CLOUDS_OF_XEEN_LINE() {
+		return "\b \b*-- \f04Ž¡« ª  Šá¨­ \fd --";
+	}
+
+	const char *DARKSIDE_OF_XEEN_LINE() {
+		return "\b \b*-- \f04Darkside of Xeen\fd --";
+	}
+
+	const char *SWORDS_OF_XEEN_LINE() {
+		return "\b \b*-- \f04Swords of Xeen\fd --";
+	}
+
+	const char *NO_QUEST_ITEMS() {
+		return
+			"\r\x1\fd\x3""c\v000\t000à¥¤¬¥âë § ¤ ­¨©\x3""l\x2\n"
+			"\n"
+			"\x3""c¥â ¯à¥¤¬¥â®¢";
+	}
+
+	const char *NO_CURRENT_QUESTS() {
+		return
+			"\x3""c\v000\t000\n"
+			"\n"
+			"¥â § ¤ ­¨©";
+	}
+
+	const char *NO_AUTO_NOTES() {
+		return "\x3""c‡ ¬¥â®ª ­¥â";
+	}
+
+	const char *QUEST_ITEMS_DATA() {
+		return
+			"\r\x1\fd\x3""c\v000\t000à¥¤¬¥âë § ¤ ­¨©\x3""l\x2\n"
+			"\f04 * \fd%s\n"
+			"\f04 * \fd%s\n"
+			"\f04 * \fd%s\n"
+			"\f04 * \fd%s\n"
+			"\f04 * \fd%s\n"
+			"\f04 * \fd%s\n"
+			"\f04 * \fd%s\n"
+			"\f04 * \fd%s\n"
+			"\f04 * \fd%s";
+	}
+
+	const char *CURRENT_QUESTS_DATA() {
+		return
+			"\r\x1\fd\x3""c\t000\v000‡ ¤ ­¨ï\x3""l\x2\n"
+			"%s\n"
+			"\n"
+			"%s\n"
+			"\n"
+			"%s";
+	}
+
+	const char *AUTO_NOTES_DATA() {
+		return
+			"\r\x1\fd\x3""c\t000\v000‡ ¬¥âª¨\x3""l\x2\n"
+			"%s\x3""l\n"
+			"%s\x3""l\n"
+			"%s\x3""l\n"
+			"%s\x3""l\n"
+			"%s\x3""l\n"
+			"%s\x3""l\n"
+			"%s\x3""l\n"
+			"%s\x3""l\n"
+			"%s\x3""l";
+	}
+
+	const char *REST_COMPLETE() {
+		return
+			"\v000\t000à®è«® 8 ç á®¢. Žâ¤ëå § ª®­ç¥­\n"
+			"%s\n"
+			"ë«® áꥤ¥­® %d ¯¨é¨.";
+	}
+
+	const char *PARTY_IS_STARVING() {
+		return "\f07Žâàï¤ £®«®¤ ¥â!\fd";
+	}
+
+	const char *HIT_SPELL_POINTS_RESTORED() {
+		return "‡¤®à®¢ì¥ ¨ ¬ ­  ¢®ááâ ­®¢«¥­ë";
+	}
+
+	const char *TOO_DANGEROUS_TO_REST() {
+		return "‡¤¥áì ᫨誮¬ ®¯ á­® ®â¤ëå âì!";
+	}
+
+	const char *SOME_CHARS_MAY_DIE() {
+		return "Šâ®-â® ¨§ ®âà鸞 ¬®¦¥â 㬥à¥âì. ‚ë ¢áñ à ¢­® ¦¥« ¥â¥ ®â¤®å­ãâì?";
+	}
+
+	const char *DISMISS_WHOM() {
+		return "\r\t010\v005Š®£® ¢ë£­ âì?";
+	}
+
+	const char *CANT_DISMISS_LAST_CHAR() {
+		return "‚ë ­¥ ¬®¦¥â¥ ¢ë£­ âì ᢮¥£® ¯®á«¥¤­¥£® ¯¥àá®­ ¦ !";
+	}
+
+	const char *DELETE_CHAR_WITH_ELDER_WEAPON() {
+		return "\v000\t000This character has an Elder Weapon and cannot be deleted!";
+	}
+
+	const char **REMOVE_DELETE() {
+		delete[] _removeDelete;
+		_removeDelete = new const char *[2] { "‚룭 âì", "㤠«¨âì" };
+		return _removeDelete;
+	}
+
+	const char *REMOVE_OR_DELETE_WHICH() {
+		return "\x3""l\t010\v005Š®£® %s?";
+	}
+
+	const char *YOUR_PARTY_IS_FULL() {
+		return "\v007‚ è ®âàï¤ ¯®«®­!";
+	}
+
+	const char *HAS_SLAYER_SWORD() {
+		return "\v000\t000â®â ¯¥àá®­ ¦ ­¥ ¬®¦¥â ¡ëâì 㤠«ñ­, â ª ª ª ã ­¥£® Œ¥ç-㡨©æ  Šá¨­ !";
+	}
+
+	const char *SURE_TO_DELETE_CHAR() {
+		return "%s %s. ‚ë 㢥७ë, çâ® å®â¨â¥ 㤠«¨âì í⮣® £¥à®ï?";
+	}
+
+	const char *CREATE_CHAR_DETAILS() {
+		return
+			"\f04\x3""c\x2\t144\v119\f37\f04à®á®ª\t144\v149\f37‘\f04®§¤"
+			"\t144\v179\f37ESC\f04\x3""l\x1\t195\v021‘¨\f37«\f04"
+			"\t195\v045\f37ˆ\f04­â\t195\v069\f37„\f04ãå\t195\v093‘«\f37¦\f04"
+			"\t195\v116‘\f37ª\f04à\t195\v140\f37Œ\f04âª\t195\v164\f37“\f04¤ç%s";
+	}
+
+	const char *NEW_CHAR_STATS() {
+		return
+			"\f04\x3""l\t017\v148 á \t055: %s\n"
+			"\t017®«\t055: %s\n"
+			"\t017Š« áá\t055:\n"
+			"\x3""r\t215\v031%d\t215\v055%d\t215\v079%d\t215\v103%d\t215\v127%d"
+			"\t215\v151%d\t215\v175%d\x3""l\t242\v020\f%2dëæ àì\t242\v031\f%2d"
+			" « ¤¨­\t242\v042\f%2d‹ãç­¨ª\t242\v053\f%2dŠ«¨à¨ª\t242\v064\f%2d"
+			"Œ £\t242\v075\f%2d‚®à\t242\v086\f%2d¨­¤§ï\t242\v097\f%2d"
+			"‚ à¢ à\t242\v108\f%2d„à㨤\t242\v119\f%2d‘«¥¤®¯ëâ\f04\x3""c"
+			"\t265\v142 ¢ëª¨\x2\x3""l\t223\v155%s\t223\v170%s%s\x1";
+	}
+
+	const char *NAME_FOR_NEW_CHARACTER() {
+		return "\x3""c‚¢¥¤¨â¥ ¨¬ï ¯¥àá®­ ¦ \n\n";
+	}
+
+	const char *SELECT_CLASS_BEFORE_SAVING() {
+		return "\v003\x3""c¥à¥¤ á®åà ­¥­¨¥¬ ¢ë¡¥à¨â¥ ª« áá.\x3""l";
+	}
+
+	const char *EXCHANGE_ATTR_WITH() {
+		return "®¬¥­ïâì %s á...";
+	}
+
+	const char *COMBAT_DETAILS() {
+		return "\r\f00\x3""c\v000\t000\x2%s%s%s\x1";
+	}
+
+	const char *NOT_ENOUGH_TO_CAST() {
+		return "\x3""c\v000¥¤®áâ â®ç­® %s, çâ®¡ë § ª«¨­ âì %s";
+	}
+
+	const char **SPELL_CAST_COMPONENTS() {
+		delete[] _spellCastComponents;
+		_spellCastComponents = new const char *[2] { "®çª®¢ ¬ £¨¨", " «¬ §®¢" };
+		return _spellCastComponents;
+	}
+
+	const char *CAST_SPELL_DETAILS() {
+		return
+			"\r\x2\x3""c\v122\t013\f37‡\fd ª«\t040\f37\fd®¢"
+			"\t067ESC\x1\t000\v000\x3""c‡ ª«¨­ ­¨¥\n"
+			"\n"
+			"%s\x3""c\n"
+			"\n"
+			"     ƒ®â®¢®¥:\x3""c\n"
+			"\n"
+			"\f09%s\fd\x2\x3""l\n"
+			"\v082–¥­ \x3""r\t000%u/%u\x3""l\n"
+			"’¥ª ŽŒ\x3""r\t000%u\x1";
+	}
+
+	const char *PARTY_FOUND() {
+		return
+			"\x3""c ©¤¥­®:\n"
+			"\n"
+			"\x3""r\t000%lu ‡®«\n"
+			"%lu €«¬§";
+	}
+
+	const char *BACKPACKS_FULL_PRESS_KEY() {
+		return
+			"\v007\f12‚­¨¬ ­¨¥! îª§ ª¨ ¯¥à¥¯®«­¥­ë!\fd\n"
+			" ¦¬¨â¥ ª« ¢¨èã";
+	}
+
+	const char *HIT_A_KEY() {
+		return "\x3""l\v120\t000\x4""077\x3""c\f37. ª« ¢¨èã\fd";
+	}
+
+	const char *GIVE_TREASURE_FORMATTING() {
+		return
+			"\x3l\v060\t000\x4""077\n"
+			"\x4""077\n"
+			"\x4""077\n"
+			"\x4""077\n"
+			"\x4""077\n"
+			"\x4""077";
+	}
+
+	const char *X_FOUND_Y() {
+		return "\v060\t000\x3""c%s ­ è%s: %s";
+	}
+
+	const char *ON_WHO() {
+		return "\x3""c\v009Š®£®?";
+	}
+
+	const char *WHICH_ELEMENT1() {
+		return
+			"\r\x3""c\x1Š ª ï ‘â¨å¨ï?\x2\v034\t014\f15Ž\fd£®­ì\t044"
+			"\f15ƒ\fd஬\t074\f15•\fd®«®¤\t104\f15Ÿ\fd¤\x1";
+	}
+
+	const char *WHICH_ELEMENT2() {
+		return
+			"\r\x3""cŠ ª ï ‘â¨å¨ï?\x2\v034\t014\f15Ž\fd£®­ì\t044"
+			"\f15ƒ\fd஬\t074\f15•\fd®«®¤\t104\f15Ÿ\fd¤\x1";
+	}
+
+	const char *DETECT_MONSTERS() {
+		return "\x3""c®¨áª ¬®­áâ஢";
+	}
+
+	const char *LLOYDS_BEACON() {
+		return
+			"\r\x3""c\v000\t000\x1Œ ïª ‹«®©¤ \n"
+			"\n"
+			"®á«¥¤­¥¥ ¬¥áâ®\n"
+			"\n"
+			"%s\x3""l\n"
+			"x = %d\x3""r\t000y = %d\x3""c\x2\v122\t021\f15“\fdáâ ­\t060\f15‚\fd¥à­\x1";
+	}
+
+	const char *HOW_MANY_SQUARES() {
+		return "\x3""c’¥«¥¯®àâ\n‘ª®«ìª® ª«¥â®ª ­  %s (1-9)\n";
+	}
+
+	const char *TOWN_PORTAL() {
+		return
+			"\x3""cƒ®à®¤áª®© ¯®àâ «\x3""l\n"
+			"\n"
+			"\t0101. %s\n"
+			"\t0102. %s\n"
+			"\t0103. %s\n"
+			"\t0104. %s\n"
+			"\t0105. %s\x3""c\n"
+			"\n"
+			"‚ ª ª®© £®à®¤ (1-5)\n"
+			"\n";
+	}
+
+	const char *TOWN_PORTAL_SWORDS() {
+		return "\x3"
+			   "cTown Portal\x3l\n"
+			   "\n"
+			   "\t0101. %s\n"
+			   "\t0102. %s\n"
+			   "\t0103. %s\x3"
+			   "c\n"
+			   "\n"
+			   "To which Town (1-3)\n"
+			   "\n";
+	}
+
+	const char *MONSTER_DETAILS() {
+		return "\x3l\n"
+			   "%s\x3"
+			   "c\t100%s\t140%u\t180%u\x3r\t000%s";
+	}
+
+	const char **MONSTER_SPECIAL_ATTACKS() {
+		delete[] _monsterSpecialAttacks;
+		_monsterSpecialAttacks = new const char *[23] {
+			"¥â", "Œ £¨ï", "Ž£­ï", "ƒà®¬ ", "•®«®¤ ", "Žâà ¢«¥­¨¥", "­¥à£¨¨",
+			"®«¥§­ì", "¥§ã¬¨¥", "‘®­", "àª«à¤¬", "‚«î¡«", "Žáã臤®à", "à®ª«ï⨥",
+			" à «¨ç", "¥áá®§­", "‘¬ï⥭¨¥", "‹®¬à®­", "‘« ¡®áâì", "“­¨ç⮦",
+			"‚®§à áâ+5", "Œ¥àâ¢", "Š ¬¥­ì"
+		};
+		return _monsterSpecialAttacks;
+	}
+
+	const char *IDENTIFY_MONSTERS() {
+		return "Œ®­áâà\x3""c\t155އ\t195Ї\t233#€â ª\x3""r\t000Žá®¡®¥%s%s%s";
+	}
+
+	const char *MOONS_NOT_ALIGNED() {
+		return "\x3""c\v012\t000®ª  «ã­ë ­¥ ¢áâ ­ãâ ¢ àï¤, ¢ë ­¥ ᬮ¦¥â¥ ¯¥à¥©â¨ ­  ’ñ¬­ãî áâ®à®­ã Šá¨­ ";
+	}
+
+	const char *AWARDS_FOR() {
+		return
+			"\r\x1\fd\x3""c\v000\t000%s %s:  £à ¤ë \x3""l\x2\n"
+			"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\x1";
+	}
+
+	const char *AWARDS_TEXT() {
+		return "\r\x2\x3""c\v021\t221‚¢¥àå\t255‚­¨§\t289‚ë室";
+	}
+
+	const char *NO_AWARDS() {
+		return "\x3""c“ ¯¥àá®­ ¦  ­¥â ­ £à ¤";
+	}
+
+	const char *WARZONE_BATTLE_MASTER() {
+		return "€à¥­ \n\t125Œ áâ¥à ¡¨â¢ë";
+	}
+
+	const char *WARZONE_MAXED() {
+		return "—â®!  ޝïâì ¢ë?  ¥ ¯à¨áâ ¢ ©â¥ ª ⥬, ªâ® ­¥ ¬®¦¥â ¤ âì ᤠç¨!";
+	}
+
+	const char *WARZONE_LEVEL() {
+		return "Š ª®© ã஢¥­ì ¬®­áâ஢? (1-10)\n";
+	}
+
+	const char *WARZONE_HOW_MANY() {
+		return "‘ª®«ìª® ¬®­áâ஢? (1-20)\n";
+	}
+
+	const char *PICKS_THE_LOCK() {
+		return "\x3""c\v010%s ¢§«®¬ «%s § ¬®ª!\n ¦¬¨â¥ ª« ¢¨èã.";
+	}
+
+	const char *UNABLE_TO_PICK_LOCK() {
+		return "\x3""c\v010%s ­¥ ᬮ£%s ¢§«®¬ âì § ¬®ª!\n ¦¬¨â¥ ª« ¢¨èã.";
+	}
+
+	const char *CONTROL_PANEL_TEXT() {
+		return
+			"\x1\f00\x3""c\v000\t000 ­¥«ì ã¯à ¢«¥­¨ï\x3""r"
+			"\v022\t045‡¢\f06ã\fdª:\t124\f06‘\fd®åà:"
+			"\v041\t045\f06Œ\fdã§.:\t124‘\f06®\fdåà:\v060\t045\f06‡\fd £à:"
+			"\t124\f06‚\fdë室"
+			"\v080\t084\f06\fd®¬®éì %s\t137Œ £ \t000\x1";
+	}
+
+	const char *CONTROL_PANEL_BUTTONS() {
+		return
+			"\x3""c\f11"
+			"\v022\t062load\t141%s"
+			"\v041\t062save\t141%s"
+			"\v060\t062exit"
+			"\v079\t102Help\fd";
+	}
+
+	const char *ON() {
+		return "\f15¢ª«\f11";
+	}
+
+	const char *OFF() {
+		return "\f32¢ëª\f11";
+	}
+
+	const char *CONFIRM_QUIT() {
+		return "‚ë 㢥७ë, çâ® å®â¨â¥ ¢ë©â¨?";
+	}
+
+	const char *MR_WIZARD() {
+		return "‚ë â®ç­® å®â¨â¥ ¢®á¯®«ì§®¢ âìáï ¯®¬®éìî Œà. Œ £ ?";
+	}
+
+	const char *NO_LOADING_IN_COMBAT() {
+		return "¨ª ª¨å § £àã§®ª ¢® ¢à¥¬ï ¡¨â¢ë!";
+	}
+
+	const char *NO_SAVING_IN_COMBAT() {
+		return "¨ª ª¨å á®åà ­¥­¨© ¢® ¢à¥¬ï ¡¨â¢ë!";
+	}
+
+	const char *QUICK_FIGHT_TEXT() {
+		return
+		  "\r\fd\x3""c\v000\t000ëáâ஥ ¤¥©á⢨¥\n\n"
+		  "%s\x3""l\n\n"
+		  "’¥ªã饥\x3""r\n"
+		  "\t000%s\x2\x3""c\v122\t019\f37‘\f04«¥¤\t055‚ë室\x1";
+	}
+
+	const char **QUICK_FIGHT_OPTIONS() {
+		delete[] _quickFightOptions;
+		_quickFightOptions = new const char *[4] { "€â ª ", "‡ ª«¨­ ­¨¥", "«®ª", "¥£á⢮" };
+		return _quickFightOptions;
+	}
+
+	const char **WORLD_END_TEXT() {
+		delete[] _worldEndText;
+		_worldEndText = new const char *[9] {
+			"\n\n\n\n\n\n\n"
+			"Congratulations Adventurers!\n\n"
+			"Let the unification ceremony begin!",
+				"And so the call went out to the people throughout the lands of Xeen"
+				" that the prophecy was nearing completion.",
+				"They came in great numbers to witness the momentous occasion.",
+				"\v026The Dragon Pharoah presided over the ceremony.",
+				"\v026Queen Kalindra presented the Cube of Power.",
+				"\v026Prince Roland presented the Xeen Sceptre.",
+				"\v026Together, they placed the Cube of Power...",
+				"\v026and the Sceptre, onto the Altar of Joining.",
+				"With the prophecy complete, the two sides of Xeen were united as one",
+		};
+		return _worldEndText;
+	}
+
+	const char *WORLD_CONGRATULATIONS() {
+		return "\x3"
+			   "cCongratulations\n\n"
+			   "Your Final Score is:\n\n"
+			   "%010lu\n"
+			   "\x3l\n"
+			   "Please send this score to the Ancient's Headquarters where "
+			   "you'll be added to the Hall of Legends!\n\n"
+			   "Ancient's Headquarters\n"
+			   "New World Computing, Inc.\n"
+			   "P.O. Box 4302\n"
+			   "Hollywood, CA 90078";
+	}
+
+	const char *WORLD_CONGRATULATIONS2() {
+		return "\n\n\n\n\n\n"
+			   "But wait... there's more!\n"
+			   "\n\n"
+			   "Include the message\n"
+			   "\"%s\"\n"
+			   "with your final score and receive a special bonus.";
+	}
+
+	const char *CLOUDS_CONGRATULATIONS1() {
+		return "\f23\x3l"
+			   "\v000\t000Please send this score to the Ancient's Headquarters "
+			   "where you'll be added to the Hall of Legends!\f33\x3"
+			   "c"
+			   "\v070\t000Press a Key";
+	}
+
+	const char *CLOUDS_CONGRATULATIONS2() {
+		return "\f23\x3l"
+			   "\v000\t000Ancient's Headquarters\n"
+			   "New World Computing, Inc.\n"
+			   "P.O. Box 4302\n"
+			   "Hollywood, CA 90078-4302\f33\x3"
+			   "c"
+			   "\v070\t000Press a Key";
+	}
+
+	const char **GOOBER() {
+		delete[] _goober;
+		_goober = new const char *[3] {
+			"", "I am a Goober!", "I am a Super Goober!"
+		};
+		return _goober;
+	}
+
+	const char *DIFFICULTY_TEXT() {
+		return "\v000\t000\x3""c‚ë¡¥à¨â¥ ¨£à®¢®© ०¨¬";
+	}
+
+	const char *SAVE_OFF_LIMITS() {
+		return
+			"\x3""c\v002\t000®£¨ ‚®ááâ ­®¢«¥­¨ï ˆ£à áç¨â îâ íâ® ¬¥áâ® § ¯à¥â­ë¬!\n"
+			"“¢ë, §¤¥áì ­¥«ì§ï á®åà ­ïâìáï";
+	}
+
+	const char *CLOUDS_INTRO1() {
+		return "\f00\v082\t040\x3"
+			   "cKing Burlock\v190\t040Peasants\v082\t247"
+			   "Lord Xeen\v190\t258Xeen's Pet\v179\t150Crodo";
+	}
+
+	const char *DARKSIDE_ENDING1() {
+		return "\n\x3"
+			   "cCongratulations\n"
+			   "\n"
+			   "Your Final Score is:\n"
+			   "\n"
+			   "%010lu\n"
+			   "\x3"
+			   "l\n"
+			   "Please send this score to the Ancient's Headquarters "
+			   "where you'll be added to the Hall of Legends!\n"
+			   "\n"
+			   "Ancient's Headquarters\n"
+			   "New World Computing, Inc.\n"
+			   "P.O. Box 4302\n"
+			   "Hollywood, CA 90078";
+	}
+
+	const char *DARKSIDE_ENDING2() {
+		return "\n"
+			   "Adventurers,\n"
+			   "\n"
+			   "I will save your game in Castleview.\n"
+			   "\n"
+			   "The World of Xeen still needs you!\n"
+			   "\n"
+			   "Load your game afterwards and come visit me in the "
+			   "Great Pyramid for further instructions";
+	}
+
+	const char *PHAROAH_ENDING_TEXT1() {
+		return "\fd\v001\t001%s\x3"
+			   "c\t000\v180Press a Key!\x3"
+			   "l";
+	}
+
+	const char *PHAROAH_ENDING_TEXT2() {
+		return "\f04\v000\t000%s\x3"
+			   "c\t000\v180Press a Key!\x3"
+			   "l\fd";
+	}
 };
 
-static const char* const WHO_ACTIONS[32] = {
-  "Šâ® ®¡ëé¥â",
-  "Šâ® ®âªà®¥â",
-  "Šâ® ¢ë¯ì¥â",
-  "Šâ® ¡ã¤¥â ª®¯ âì",
-  "Šâ® ¯®âண ¥â",
-  "Šâ® ¯à®çâñâ",
-  "Š®£® ­ ãç¨âì",
-  "Šâ® ¢®§ì¬ñâ",
-  "Šâ® 㤠à¨â",
-  "Šâ® ãªà ¤ñâ",
-  "Šâ® ¤ áâ ¢§ïâªã",
-  "Šâ® § ¯« â¨â",
-  "Šâ® ¯à¨á拉â",
-  "Šâ® ¯®¯à®¡ã¥â",
-  "Šâ® ¥£® ¯®¢¥à­ñâ",
-  "Šâ® ¨áªã¯­ñâáï",
-  "Šâ® ¥£® ã­¨ç⮦¨â",
-  "Šâ® ¢ë¤¥à­¥â",
-  "Šâ® á¯ãáâ¨âáï",
-  "Šâ® ¡à®á¨â ¬®­¥âªã",
-  "pray",
-  "Šâ® áâ ­¥â ç«¥­®¬",
-  "act",
-  "Šâ® å®ç¥â áë£à âì",
-  "Šâ® ­ ¦¬ñâ",
-  "rub",
-  "pick",
-  "eat",
-  "sign",
-  "close",
-  "look",
-  "try"
-};
-
-static const char* const WHO_WILL_ACTIONS[4] = {
-  "Žâªàëâì à¥èñâªã",
-  "Žâªàëâì ¤¢¥àì",
-  " áªàëâì ᢨ⮪",
-  "‚ë¡¥à¨â¥ ¯¥àá®­ ¦ "
-};
-
-static const byte SYMBOLS[20][64] = {
-  { // 0
-    0x00, 0x00, 0xA8, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x00, 0xA8, 0x9E, 0x9C, 0x9C, 0x9E, 0x9E, 0x9E,
-    0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0x9A, 0x9A, 0x9A, 0xAC, 0x9E, 0xAC, 0xA8, 0xA8, 0xA6, 0x97, 0x98,
-    0xAC, 0xA0, 0xAC, 0xAC, 0xA4, 0xA6, 0x98, 0x99, 0x00, 0xAC, 0xA0, 0xA0, 0xA8, 0xAC, 0x9A, 0x9A,
-    0x00, 0x00, 0xAC, 0xAC, 0xAC, 0xA4, 0x9B, 0x9A, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0x9B, 0x9B,
-  },
-  { // 1
-    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
-    0x99, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97,
-    0x99, 0x98, 0x98, 0x99, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
-    0x9A, 0x9B, 0x9B, 0x9C, 0x9B, 0x9A, 0x9C, 0x9A, 0x9B, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x9A, 0x9B,
-  },
-  { // 2
-    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
-    0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x98, 0x98, 0x99, 0x98, 0x98, 0x97, 0x98, 0x98,
-    0x99, 0x98, 0x98, 0x98, 0x99, 0x99, 0x98, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
-    0x9B, 0x9B, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9B, 0x99, 0x9A, 0x9B, 0x9B, 0x9A, 0x9A, 0x99, 0x9A,
-  },
-  { // 3
-    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
-    0x99, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x98, 0x98, 0x97, 0x97, 0x98, 0x98, 0x98, 0x98,
-    0x99, 0x99, 0x98, 0x99, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
-    0x9B, 0x9C, 0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0x9C, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x9A,
-  },
-  { // 4
-    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
-    0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x99, 0x9A, 0x97, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
-    0x99, 0x99, 0x98, 0x99, 0x99, 0x98, 0x98, 0x98, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
-    0x9A, 0x9C, 0x9B, 0x9B, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x99, 0x9B, 0x9B, 0x9A, 0x99, 0x9A, 0x9A,
-  },
-  { // 5
-    0xA4, 0xA4, 0xA8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x9E, 0x9E, 0xA0, 0xA8, 0xAC, 0x00, 0x00,
-    0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9E, 0xAC, 0x00, 0x97, 0x97, 0x97, 0x98, 0x9C, 0x9C, 0xA0, 0xAC,
-    0x99, 0x98, 0x99, 0x99, 0x99, 0x9B, 0xA0, 0xAC, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9B, 0xA0, 0xAC,
-    0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x9A, 0x9A, 0x9B, 0x9B, 0xA4, 0xAC, 0x00,
-  },
-  { // 6
-    0x00, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x9B, 0x99,
-    0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x98, 0x99, 0x99,
-    0x00, 0xAC, 0xA0, 0x9C, 0x9C, 0xA0, 0x9C, 0x9A, 0x00, 0x00, 0xAC, 0xA4, 0xA0, 0x99, 0x99, 0x99,
-    0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99,
-  },
-  { // 7
-    0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-    0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x9C, 0x99, 0x99,
-    0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99,
-    0x00, 0x00, 0xAC, 0xA0, 0x9B, 0xA0, 0x9E, 0x9C, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x9C, 0x99, 0x99,
-  },
-  { // 8
-    0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x9B, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-    0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-    0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-    0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x9C, 0x99, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x9E, 0x9C, 0x99,
-  },
-  { // 9
-    0x00, 0x00, 0xAC, 0xA4, 0xA0, 0x9C, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x9C, 0xA0, 0x9C, 0x9A,
-    0xAC, 0xA4, 0x9C, 0x9A, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-    0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99,
-    0x00, 0xAC, 0xA4, 0x9C, 0x9A, 0x9C, 0x99, 0x99, 0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x9A, 0x99, 0x99,
-  },
-  { // 10
-    0x99, 0x99, 0x99, 0x9A, 0xA0, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
-    0x99, 0x99, 0x9C, 0x9E, 0xA4, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x9C, 0x99, 0x9C, 0xA4, 0xAC, 0x00,
-    0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
-    0x99, 0x99, 0x99, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x9A, 0x9B, 0x9E, 0x9C, 0x9C, 0xA4, 0xAC, 0x00,
-  },
-  { // 11
-    0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0x9E, 0xAC,
-    0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00,
-    0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
-    0x9C, 0x99, 0x99, 0x99, 0x9C, 0x9C, 0xA4, 0xAC, 0x99, 0x9E, 0x9E, 0x9C, 0x9C, 0xA0, 0xAC, 0x00,
-  },
-  { // 12
-    0x99, 0x99, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x9B, 0x9C, 0x9E, 0x9C, 0x9C, 0xA4, 0xAC, 0x00,
-    0x99, 0x99, 0x99, 0x99, 0x99, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
-    0x99, 0x99, 0x99, 0x99, 0x9C, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xA4, 0xAC, 0x00,
-    0x99, 0x99, 0x9C, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
-  },
-  { // 13
-    0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
-    0x99, 0x9B, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x9A, 0x99, 0x9C, 0xA0, 0xAC, 0x00,
-    0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
-    0x99, 0x99, 0x99, 0x99, 0x9A, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x9A, 0x9C, 0xA4, 0xAC, 0x00,
-  },
-  { // 14
-    0x00, 0x00, 0xAC, 0x9E, 0x9C, 0x9C, 0x9C, 0x9B, 0x00, 0xAC, 0x9C, 0xA0, 0x9E, 0xA4, 0xA4, 0xA4,
-    0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0xAC, 0x9C, 0x9E, 0xAC, 0xA0, 0xAC, 0xA8, 0x9E, 0xA8, 0xAC, 0x99,
-    0xAC, 0x9E, 0xAC, 0xA8, 0xAC, 0x9E, 0xA4, 0xAC, 0xAC, 0xA4, 0xA0, 0xAC, 0xAC, 0xA0, 0xA4, 0xAC,
-    0x00, 0xAC, 0xA4, 0xA0, 0xA0, 0xA4, 0xAC, 0xA4, 0x00, 0x00, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-  },
-  { // 15
-    0x9C, 0x9C, 0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
-    0x9E, 0x9E, 0x9E, 0x9C, 0x9E, 0x9E, 0x9E, 0x9E, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x99, 0x98,
-    0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0x9E, 0x9E, 0xA0,
-    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-  },
-  { // 16
-    0x9B, 0x9B, 0x9B, 0x9B, 0x9C, 0x9B, 0x9C, 0x9C, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
-    0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9E, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
-    0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xA0, 0xA0, 0xA0, 0x9E, 0xA0, 0x9E, 0x9E, 0xA0,
-    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-  },
-  { // 17
-    0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9C, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
-    0x9E, 0x9E, 0x9E, 0x9C, 0x9C, 0x9C, 0x9E, 0x9E, 0x98, 0x98, 0x98, 0x99, 0x9A, 0x9A, 0x99, 0x98,
-    0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9C, 0xA0, 0x9E, 0x9E, 0xA0, 0xA0, 0xA0, 0xA0, 0x9E,
-    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-  },
-  { // 18
-    0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
-    0x9E, 0x9E, 0x9E, 0x9E, 0x9C, 0x9C, 0x9C, 0x9E, 0x98, 0x98, 0x98, 0x98, 0x9A, 0x9A, 0x98, 0x99,
-    0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9B, 0x9C, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0xA0, 0xA0, 0xA0,
-    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-  },
-  { // 19
-    0x9C, 0x9B, 0x9C, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0x00, 0x00,
-    0x9E, 0x9E, 0x9C, 0x9C, 0x9E, 0xA0, 0xAC, 0x00, 0x99, 0x98, 0x98, 0x99, 0x9A, 0x9A, 0xA0, 0xAC,
-    0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xA0, 0xAC, 0xA0, 0xA0, 0x9E, 0xA0, 0xA0, 0xA0, 0xA0, 0xAC,
-    0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0x00, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0x00, 0x00,
-  }
-};
-
-static const byte TEXT_COLORS[40][4] = {
-  { 0x00, 0x19, 0x19, 0x19 },
-  { 0x00, 0x08, 0x08, 0x08 },
-  { 0x00, 0x0F, 0x0F, 0x0F },
-  { 0x00, 0x15, 0x15, 0x15 },
-  { 0x00, 0x01, 0x01, 0x01 },
-  { 0x00, 0x21, 0x21, 0x21 },
-  { 0x00, 0x26, 0x26, 0x26 },
-  { 0x00, 0x2B, 0x2B, 0x2B },
-  { 0x00, 0x31, 0x31, 0x31 },
-  { 0x00, 0x36, 0x36, 0x36 },
-  { 0x00, 0x3D, 0x3D, 0x3D },
-  { 0x00, 0x41, 0x41, 0x41 },
-  { 0x00, 0x46, 0x46, 0x46 },
-  { 0x00, 0x4C, 0x4C, 0x4C },
-  { 0x00, 0x50, 0x50, 0x50 },
-  { 0x00, 0x55, 0x55, 0x55 },
-  { 0x00, 0x5D, 0x5D, 0x5D },
-  { 0x00, 0x60, 0x60, 0x60 },
-  { 0x00, 0x65, 0x65, 0x65 },
-  { 0x00, 0x6C, 0x6C, 0x6C },
-  { 0x00, 0x70, 0x70, 0x70 },
-  { 0x00, 0x75, 0x75, 0x75 },
-  { 0x00, 0x7B, 0x7B, 0x7B },
-  { 0x00, 0x80, 0x80, 0x80 },
-  { 0x00, 0x85, 0x85, 0x85 },
-  { 0x00, 0x8D, 0x8D, 0x8D },
-  { 0x00, 0x90, 0x90, 0x90 },
-  { 0x00, 0x97, 0x97, 0x97 },
-  { 0x00, 0x9D, 0x9D, 0x9D },
-  { 0x00, 0xA4, 0xA4, 0xA4 },
-  { 0x00, 0xAB, 0xAB, 0xAB },
-  { 0x00, 0xB0, 0xB0, 0xB0 },
-  { 0x00, 0xB6, 0xB6, 0xB6 },
-  { 0x00, 0xBD, 0xBD, 0xBD },
-  { 0x00, 0xC0, 0xC0, 0xC0 },
-  { 0x00, 0xC6, 0xC6, 0xC6 },
-  { 0x00, 0xCD, 0xCD, 0xCD },
-  { 0x00, 0xD0, 0xD0, 0xD0 },
-  { 0x00, 0xD6, 0xD6, 0xD6 },
-  { 0x00, 0xDB, 0xDB, 0xDB },
-};
-
-static const byte TEXT_COLORS_STARTUP[40][4] = {
-  { 0x00, 0x19, 0x19, 0x19 },
-  { 0x00, 0x08, 0x08, 0x08 },
-  { 0x00, 0x0F, 0x0F, 0x0F },
-  { 0x00, 0x15, 0x15, 0x15 },
-  { 0x00, 0x01, 0x01, 0x01 },
-  { 0x00, 0x1F, 0x1F, 0x1F },
-  { 0x00, 0x26, 0x26, 0x26 },
-  { 0x00, 0x2B, 0x2B, 0x2B },
-  { 0x00, 0x31, 0x31, 0x31 },
-  { 0x00, 0x36, 0x36, 0x36 },
-  { 0x00, 0x3D, 0x3D, 0x3D },
-  { 0x00, 0x42, 0x42, 0x42 },
-  { 0x00, 0x46, 0x46, 0x46 },
-  { 0x00, 0x4C, 0x4C, 0x4C },
-  { 0x00, 0x50, 0x50, 0x50 },
-  { 0x00, 0x55, 0x55, 0x55 },
-  { 0x00, 0x5D, 0x5D, 0x5D },
-  { 0x00, 0x60, 0x60, 0x60 },
-  { 0x00, 0x65, 0x65, 0x65 },
-  { 0x00, 0x6C, 0x6C, 0x6C },
-  { 0x00, 0x70, 0x70, 0x70 },
-  { 0x00, 0x75, 0x75, 0x75 },
-  { 0x00, 0x7B, 0x7B, 0x7B },
-  { 0x00, 0x80, 0x80, 0x80 },
-  { 0x00, 0x85, 0x85, 0x85 },
-  { 0x00, 0x8D, 0x8D, 0x8D },
-  { 0x00, 0x90, 0x90, 0x90 },
-  { 0x00, 0x97, 0x97, 0x97 },
-  { 0x00, 0x9D, 0x9D, 0x9D },
-  { 0x00, 0xA4, 0xA4, 0xA4 },
-  { 0x00, 0xAB, 0xAB, 0xAB },
-  { 0x00, 0xB0, 0xB0, 0xB0 },
-  { 0x00, 0xB6, 0xB6, 0xB6 },
-  { 0x00, 0xBD, 0xBD, 0xBD },
-  { 0x00, 0xC0, 0xC0, 0xC0 },
-  { 0x00, 0xC6, 0xC6, 0xC6 },
-  { 0x00, 0xCD, 0xCD, 0xCD },
-  { 0x00, 0xD0, 0xD0, 0xD0 },
-  { 0x00, 0x19, 0x19, 0x19 },
-  { 0x00, 0x31, 0x31, 0x31 }
-};
-
-static const char* const DIRECTION_TEXT_UPPER[4] = { 
-  "NORTH", "EAST", "SOUTH", "WEST" 
-};
-
-static const char* const DIRECTION_TEXT[4] = {
-  "‘¥¢¥à",
-  "‚®á⮪",
-  "ž£",
-  "‡ ¯ ¤"
-};
-
-static const char* const RACE_NAMES[5] = {
-  "—¥«®¢¥ª",
-  "«ìä",
-  "„¢®àä",
-  "ƒ­®¬",
-  "®«ã®àª"
-};
-
-static const int RACE_HP_BONUSES[5] = { 0, -2, 1, -1, 2 };
-
-static const int RACE_SP_BONUSES[5][2] = {
-  { 0, 0 }, { 2, 0 }, { -1, -1 }, { 1, 1 }, { -2, -2 }
-};
-
-static const char* const ALIGNMENT_NAMES[3] = {
-  "•®à®è¨©",
-  "¥©âà «",
-  "‡«®©(- ï)"
-};
-
-static const char* const SEX_NAMES[2] = {
-  "Œã¦ç¨­ ",
-  "†¥­é¨­ "
-};
-
-static const char* const SKILL_NAMES[18] = {
-  "‚®à®¢á⢮\t100",
-  "Žà㦥©­¨ª",
-  "€áâ஫®£",
-  "€â«¥â",
-  "Š à⮣à ä",
-  "Šà¥áâ®­®á¥æ",
-  "—ã¢á⢮ ­ ¯à ¢«¥­¨ï",
-  "Ÿ§ëª®¢¥¤",
-  "Šã¯¥æ",
-  "‘ª «®« §",
-  "˜âãଠ­",
-  "‘«¥¤®¯ëâ",
-  "Œ £¨áâà ¬®«¨â¢ë",
-  "‹®¢ª®áâì ¯ «ì楢",
-  "«®¢¥æ",
-  "Žå®â­¨ª",
-  "‚®á¯à¨ï⨥",
-  "—ã¢á⢮ ®¯ á­®áâ¨"
-};
-
-static const char* const CLASS_NAMES[11] = {
-  "ëæ àì",
-  " « ¤¨­",
-  "‹ãç­¨ª",
-  "Š«¨à¨ª",
-  "Œ £",
-  "⨈",
-  "¨­¤§ï",
-  "‚ à¢ à",
-  "„à㨤",
-  "‘«¥¤®¯ëâ",
-  nullptr
-};
-
-static const int CLASS_EXP_LEVELS[10] = {
-  1500, 2000, 2000, 1500, 2000, 1000, 1500, 1500, 1500, 2000
-};
-
-static const char* const CONDITION_NAMES[17] = {
-  "à®ª«ï⨥",
-  "Heart Broken",
-  "‘« ¡®áâì",
-  "Žâà ¢«¥­¨¥",
-  "®«¥§­ì",
-  "¥§ã¬¨¥",
-  "‚«î¡«ñ­(- )",
-  " ¢¥á¥«¥",
-  "‘®­",
-  "‚ ã­ë­¨¨",
-  "‚ á¬ï⥭¨¨",
-  " à «¨ç",
-  ".á®§­ ­¨ï",
-  "Œ¥àâ¢",
-  "Š ¬¥­ì",
-  "“­¨ç⮦¥­",
-  "•®à®è¥¥"
-};
-
-static const int CONDITION_COLORS[17] = {
-  9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32, 32, 6, 6, 6, 6, 15
-};
-
-static const char* const GOOD = "•®à®è¥¥";
-
-static const char* const BLESSED = "\n\t014« £®á«®¢¥­¨¥\t095%+d";
-
-static const char* const POWER_SHIELD = "\n\t014‘¨«®¢®© é¨â\t095%+d";
-
-static const char* const HOLY_BONUS = "\n\t014‘¢ï⮩ ¤ à\t095%+d";
-
-static const char* const HEROISM = "\n\t014Œã¦¥á⢮\t095%+d";
-
-static const char* const IN_PARTY = "\f15‚ ®âà拉\fd";
-
-static const char* const PARTY_DETAILS = 
-  "\015\003l\002\014""00"
-  "\013""001""\011""035%s"
-  "\013""009""\011""035%s"
-  "\013""017""\011""035%s"
-  "\013""025""\011""035%s"
-  "\013""001""\011""136%s"
-  "\013""009""\011""136%s"
-  "\013""017""\011""136%s"
-  "\013""025""\011""136%s"
-  "\013""044""\011""035%s"
-  "\013""052""\011""035%s"
-  "\013""060""\011""035%s"
-  "\013""068""\011""035%s"
-  "\013""044""\011""136%s"
-  "\013""052""\011""136%s"
-  "\013""060""\011""136%s"
-  "\013""068""\011""136%s";
-
-static const char* const PARTY_DIALOG_TEXT =
-  "%s\x2\x3""c\v106\t013‚¢¥àå\t048‚­¨§\t083\f37“\fd¤ «\t118\f37‚\fd룭"
-  "\t153\f37‘\fd®§¤\t188‚\f37ë\fd室\x1";
-
-static const int FACE_CONDITION_FRAMES[17] = {
-  2, 2, 2, 1, 1, 4, 4, 4, 3, 2, 4, 3, 3, 5, 6, 7, 0
-};
-
-static const int CHAR_FACES_X[6] = { 10, 45, 81, 117, 153, 189 };
-
-static const int HP_BARS_X[6] = { 13, 50, 86, 122, 158, 194 };
-
-static const char* const NO_ONE_TO_ADVENTURE_WITH = 
-  "‚ ¬ ­¥ á ª¥¬ ¯ãâ¥è¥á⢮¢ âì";
-
-static const char* const YOUR_ROSTER_IS_FULL = "‚ è ᯨ᮪ ¯®«®­!";
-
-static const byte DARKNESS_XLAT[3][256] = {
-  {
-    0,   25,  26,  27,  28,  29,  30,  31,  0,   0,   0,   0,   0,   0,   0,   0,
-    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    44,  45,  46,  47,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    60,  61,  62,  63,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    76,  77,  78,  79,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    92,  93,  94,  95,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    108, 109, 110, 111, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    124, 125, 126, 127, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    140, 141, 142, 143, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    168, 169, 170, 171, 172, 173, 174, 175, 0,   0,   0,   0,   0,   0,   0,   0,
-    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    188, 189, 190, 191, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    204, 205, 206, 207, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    220, 221, 222, 223, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    236, 237, 238, 239, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    252, 253, 254, 255, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
-  }, {
-    0,   17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,
-    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    40,  41,  42,  43,  44,  45,  46,  47,  0,   0,   0,   0,   0,   0,   0,   0,
-    56,  57,  58,  59,  60,  61,  62,  63,  0,   0,   0,   0,   0,   0,   0,   0,
-    72,  73,  74,  75,  76,  77,  78,  79,  0,   0,   0,   0,   0,   0,   0,   0,
-    88,  89,  90,  91,  92,  93,  94,  95,  0,   0,   0,   0,   0,   0,   0,   0,
-    104, 105, 106, 107, 108, 109, 110, 111, 0,   0,   0,   0,   0,   0,   0,   0,
-    120, 121, 122, 123, 124, 125, 126, 127, 0,   0,   0,   0,   0,   0,   0,   0,
-    136, 137, 138, 139, 140, 141, 142, 143, 0,   0,   0,   0,   0,   0,   0,   0,
-    160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
-    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
-    184, 185, 186, 187, 188, 189, 190, 191, 0,   0,   0,   0,   0,   0,   0,   0,
-    200, 201, 202, 203, 204, 205, 206, 207, 0,   0,   0,   0,   0,   0,   0,   0,
-    216, 217, 218, 219, 220, 221, 222, 223, 0,   0,   0,   0,   0,   0,   0,   0,
-    232, 233, 234, 235, 236, 237, 238, 239, 0,   0,   0,   0,   0,   0,   0,   0,
-    248, 249, 250, 251, 252, 253, 254, 255, 0,   0,   0,   0,   0,   0,   0,   0
-  }, {
-    0,   9,   10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,
-    24,  25,  26,  27,  28,  29,  30,  31,  0,   0,   0,   0,   0,   0,   0,   0,
-    36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  0,   0,   0,   0,
-    52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63,  0,   0,   0,   0,
-    68,  69,  70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  0,   0,   0,   0,
-    84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  0,   0,   0,   0,
-    100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 0,   0,   0,   0,
-    116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0,   0,   0,   0,
-    132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 0,   0,   0,   0,
-    152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
-    168, 169, 170, 171, 172, 173, 174, 175, 0,   0,   0,   0,   0,   0,   0,   0,
-    180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 0,   0,   0,   0,
-    196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0,   0,   0,   0,
-    212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 0,   0,   0,   0,
-    228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 0,   0,   0,   0,
-    244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 0,   0,   0,   0
-  }
-};
-
-static const char* const PLEASE_WAIT = "\fd\x3""c\t000\v002®¤®¦¤¨â¥...";
-
-static const char* const OOPS = "\x3""c\t000\v002“¯á...";
-
-static const int SCREEN_POSITIONING_X[4][48] = {
-  {
-   -1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
-   -1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
-   -1, -1,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,
-   -3, -2, -1,  0,  0,  1,  2,  3, -4,  4,  0,  0
-  }, {
-    0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
-    2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
-    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
-    4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  0,  1
-  }, {
-    1,  0,  0,  0, -1,  1,  0,  0,  0, -1,  2,  1,
-    1,  0,  0,  0, -1, -1, -2,  4,  3,  3,  2,  2,
-    1,  1,  0,  0,  0, -1, -1, -2, -2, -3, -3, -4,
-    3,  2,  1,  0,  0, -1, -2, -3,  4, -4,  0,  0
-  }, {
-    0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -2, -2,
-   -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3,
-   -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
-   -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,  0, -1
-  }
-};
-
-static const int SCREEN_POSITIONING_Y[4][48] = {
-  {
-    0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
-    2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
-    3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
-    4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  0,  1
-  }, {
-    1,  0,  0,  0, -1,  1,  0,  0,  0, -1,  2,  1,
-    1,  0,  0,  0, -1, -1, -2,  4,  3,  3,  2,  2,
-    1,  1,  0,  0,  0, -1, -1, -2, -2, -3, -3, -4,
-    3,  2,  1,  0,  0, -1, -2, -3,  4, -4,  0,  0
-  }, {
-    0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -2, -2,
-   -2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3,
-   -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
-   -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,  0, -1
-  }, {
-   -1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
-   -1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
-   -1, -1,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,
-   -3, -2, -1,  0,  0,  1,  2,  3, -4,  4,  0,  0
-  }
-};
-
-static const int MONSTER_GRID_BITMASK[12] = {
-  0xC, 8, 4, 0, 0xF, 0xF000, 0xF00, 0xF0, 0xF00, 0xF0, 0x0F, 0xF000
-};
-
-static const int INDOOR_OBJECT_X[2][12] = {
-  { -5,  -7,  -112, 98, -8,  -65, 49, -9,  -34,  16, -58, 40 },
-  { -35, -35, -142, 68, -35, -95, 19, -35, -62, -14, -98, 16 }
-};
-
-static const int MAP_OBJECT_Y[2][12] = {
-  {   2, 25, 25, 25, 50, 50, 50, 58, 58, 58, 58, 58 },
-  { -65, -6, -6, -6, 36, 36, 36, 54, 54, 54, 54, 54 }
-};
-
-static const int INDOOR_MONSTERS_Y[4] = { 2, 34, 53, 59 };
-
-static const int OUTDOOR_OBJECT_X[2][12] = {
-  {  -5,  -7, -112, 98,  -8, -77, 61,  -9, -43,  25, -74, 56 },
-  { -35, -35, -142, 68, -35, -95, 19, -35, -62, -24, -98, 16 }
-};
-
-static const int OUTDOOR_MONSTER_INDEXES[26] = {
-  42, 43, 44, 45, 46, 47, 48, 49, 50, 51,  52,  69,  70,
-  71, 72, 73, 74, 75, 90, 91, 92, 93, 94, 112, 115, 118
-};
-
-static const int OUTDOOR_MONSTERS_Y[26] = {
-  59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 53, 53,
-  53, 53, 53, 53, 53, 34, 34, 34, 34, 34,  2,  2,  2
-};
-
-static const int DIRECTION_ANIM_POSITIONS[4][4] = {
-  { 0, 1, 2, 3 }, { 3, 0, 1, 2 }, { 2, 3, 0, 1 }, { 1, 2, 3, 0 }
-};
-
-static const byte WALL_SHIFTS[4][48] = {
-  {
-    12, 0, 12, 8, 12, 12, 0, 12, 8, 12, 12, 0,
-    12, 0, 12, 8, 12, 8,  12, 12, 0, 12, 0, 12,
-    0, 12, 0, 12, 8, 12, 8, 12, 8, 12, 8, 12,
-    0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 4, 4
-  }, {
-    8, 12, 8, 4, 8, 8, 12, 8, 4, 8, 8, 12,
-    8, 12, 8, 4, 8, 4, 8, 8, 12, 8, 12, 8,
-    12, 8, 12, 8, 4, 8, 4, 8, 4, 8, 4, 8,
-    12, 12, 12, 12, 4, 4, 4, 4, 0, 0, 0, 0
-  }, {
-    4, 8, 4, 0, 4, 4, 8, 4, 0, 4, 4, 8,
-    4, 8, 4, 0, 4, 0, 4, 4, 8, 4, 8, 4,
-    8, 4, 8, 4, 0, 4, 0, 4, 0, 4, 0, 4,
-    8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 12, 12
-  }, {
-    0, 4, 0, 12, 0, 0, 4, 0, 12, 0, 0, 4,
-    0, 4, 0, 12, 0, 12, 0, 0, 4, 0, 4, 0,
-    4, 0, 4, 0, 12, 0, 12, 0, 12, 0, 12, 0,
-    4, 4, 4, 4, 12, 12, 12, 12, 0, 0, 8, 8
-  }
-};
-
-static const int DRAW_NUMBERS[25] = {
-  36, 37, 38, 43, 42, 41,
-  39, 20, 22, 24, 33, 31,
-  29, 26, 10, 11, 18, 16,
-  13, 5, 9, 6, 0, 4, 1
-};
-
-static const int DRAW_FRAMES[25][2] = {
-  { 18, 24 }, { 19, 23 }, { 20, 22 }, { 24, 18 }, { 23, 19 }, { 22, 20 },
-  { 21, 21 }, { 11, 17 }, { 12, 16 }, { 13, 15 }, { 17, 11 }, { 16, 12 },
-  { 15, 13 }, { 14, 14 }, { 6, 10 }, { 7, 9 }, { 10, 6 }, { 9, 7 },
-  { 8, 8 }, { 3, 5 }, { 5, 3 }, { 4, 4 }, { 0, 2 }, { 2, 0 },
-  { 1, 1 }
-};
-
-static const int COMBAT_FLOAT_X[8] = { -2, -1, 0, 1, 2, 1, 0, -1 };
-
-static const int COMBAT_FLOAT_Y[8] = { -2, 0, 2, 0, -1, 0, 2, 0 };
-
-static const int MONSTER_EFFECT_FLAGS[15][8] = {
-  { 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10A, 0x10B },
-  { 0x10C, 0x10D, 0x10E, 0x10F, 0x0, 0x0, 0x0, 0x0 },
-  { 0x110, 0x111, 0x112, 0x113, 0x0, 0x0, 0x0, 0x0 },
-  { 0x114, 0x115, 0x116, 0x117, 0x0, 0x0, 0x0, 0x0 },
-  { 0x200, 0x201, 0x202, 0x203, 0x0, 0x0, 0x0, 0x0 },
-  { 0x300, 0x301, 0x302, 0x303, 0x400, 0x401, 0x402, 0x403 },
-  { 0x500, 0x501, 0x502, 0x503, 0x0, 0x0, 0x0, 0x0 },
-  { 0x600, 0x601, 0x602, 0x603, 0x0, 0x0, 0x0, 0x0 },
-  { 0x604, 0x605, 0x606, 0x607, 0x608, 0x609, 0x60A, 0x60B },
-  { 0x60C, 0x60D, 0x60E, 0x60F, 0x0, 0x0, 0x0, 0x0 },
-  { 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100 },
-  { 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101 },
-  { 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102 },
-  { 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103 },
-  { 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108 }
-};
-
-static const int SPELLS_ALLOWED[3][40] = {
-  {
-    0,  1,  2,  3,  5,  6, 7, 8, 9, 10,
-    12, 14, 16, 23, 26, 27, 28, 30, 31, 32,
-    33, 42, 46, 48, 49, 50, 52, 55, 56, 58,
-    59, 62, 64, 65, 67, 68, 71, 73, 74, 76
-  }, {
-    1, 4, 11, 13, 15, 17, 18, 19, 20, 21,
-    22, 24, 25, 29, 34, 35, 36, 37, 38, 39,
-    40, 41, 42, 43, 44, 45, 47, 51, 53, 54,
-    57, 60, 61, 63, 66, 69, 70, 72, 75, 76
-  }, {
-    0, 1, 2, 3, 4, 5, 7, 9, 10, 20,
-    25, 26, 27, 28, 30, 31, 34, 38, 40, 41,
-    42, 43, 44, 45, 49, 50, 52, 53, 55, 59,
-    60, 61, 62, 67, 68, 72, 73, 74, 75, 76
-  }
-};
-
-static const int BASE_HP_BY_CLASS[10] = { 10, 8, 7, 5, 4, 8, 7, 12, 6, 9 };
-
-static const int AGE_RANGES[10] = 
-  { 1, 6, 11, 18, 36, 51, 76, 101, 201, 0xffff };
-
-static const int AGE_RANGES_ADJUST[2][10] = {
-  { -250, -50, -20, -10, 0, -2, -5, -10, -20, -50 },
-  { -250, -50, -20, -10, 0, 2, 5, 10, 20, 50 }
-};
-
-static const int STAT_VALUES[24] = {
-  3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 25, 30, 35, 40,
-  50, 75, 100, 125, 150, 175, 200, 225, 250, 65535
-};
-
-static const int STAT_BONUSES[24] = {
-  -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6,
-  7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20
-};
-
-static const int ELEMENTAL_CATEGORIES[6] = { 8, 15, 20, 25, 33, 36 };
-
-static const int ATTRIBUTE_CATEGORIES[10] = 
-  { 9, 17, 25, 33, 39, 45, 50, 56, 61, 72 };
-
-static const int ATTRIBUTE_BONUSES[72] = {
-  2, 3, 5, 8, 12, 17, 23, 30, 38, 47, // Might bonus
-  2, 3, 5, 8, 12, 17, 23, 30,         // INT bonus
-  2, 3, 5, 8, 12, 17, 23, 30,         // PER bonus
-  2, 3, 5, 8, 12, 17, 23, 30,         // SPD bonus
-  3, 5, 10, 15, 20, 30,               // ACC bonus
-  5, 10, 15, 20, 25, 30,              // LUC bonus
-  4, 6, 10, 20, 50,                   // HP bonus
-  4, 8, 12, 16, 20, 25,               // SP bonus
-  2, 4, 6, 10, 16,                    // AC bonus
-  4, 6, 8, 10, 12, 14, 16, 18, 20, 25 // Thievery bonus
-};
-
-static const int ELEMENTAL_RESISTENCES[37] = {
-  0, 5, 7, 9, 12, 15, 20, 25, 30, 5, 7, 9, 12, 15, 20, 25,
-  5, 10, 15, 20, 25, 10, 15, 20, 25, 40, 5, 7, 9, 11, 13, 15, 20, 25,
-  5, 10, 20
-};
-
-static const int ELEMENTAL_DAMAGE[37] = {
-  0, 2, 3, 4, 5, 10, 15, 20, 30, 2, 3, 4, 5, 10, 15, 20, 2, 4, 5, 10, 20,
-  2, 4, 8, 16, 32, 2, 3, 4, 5, 10, 15, 20, 30, 5, 10, 25
-};
-
-static const int WEAPON_DAMAGE_BASE[35] = {
-  0, 3, 2, 3, 2, 2, 4, 1, 2, 4, 2, 3,
-  2, 2, 1, 1, 1, 1, 4, 4, 3, 2, 4, 2,
-  2, 2, 5, 3, 3, 3, 3, 5, 4, 2, 6
-};
-
-static const int WEAPON_DAMAGE_MULTIPLIER[35] = {
-  0, 3, 3, 4, 5, 4, 2, 3, 3, 3, 3, 3,
-  2, 4, 10, 6, 8, 9, 4, 3, 6, 8, 5, 6,
-  4, 5, 3, 5, 6, 7, 2, 2, 2, 2, 4
-};
-
-static const int METAL_DAMAGE[22] = {
-  -3, -6, -4, -2, 2, 4, 6, 8, 10, 0, 1,
-  1, 2, 2, 3, 4, 5, 12, 15, 20, 30, 50
-};
-
-static const int METAL_DAMAGE_PERCENT[22] = {
-  253, 252, 3, 2, 1, 2, 3, 4, 6, 0, 1,
-  1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10
-};
-
-static const int METAL_LAC[22] = {
-  -3, 0, -2, -1, 1, 2, 4, 6, 8, 0, 1,
-  1, 2, 2, 3, 4, 5, 10, 12, 14, 16, 20
-};
-
-static const int ARMOR_STRENGTHS[14] = { 0, 2, 4, 5, 6, 7, 8, 10, 4, 2, 1, 1, 1, 1 };
-
-static const int MAKE_ITEM_ARR1[6] = { 0, 8, 15, 20, 25, 33 };
-
-static const int MAKE_ITEM_ARR2[6][7][2] = {
-  { { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
-  { { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 7 }, { 7, 7 } },
-  { { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 5 }, { 5, 5 } },
-  { { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
-  { { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
-  { { 0, 0 }, { 1, 1 }, { 1, 1 }, { 1, 2 }, { 2, 2 }, { 2, 3 }, { 3, 3 } }
-};
-
-static const int MAKE_ITEM_ARR3[10][7][2] = {
-  { { 0, 0 }, { 1, 4 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 10 }, { 10, 10 } },
-  { { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 },  { 8,  8  } },
-  { { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 },  { 8,  8  } },
-  { { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 },  { 8,  8  } },
-  { { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 6 },  { 6,  6  } },
-  { { 0, 0 }, { 1, 2 }, { 2, 3 }, { 3, 4 }, { 4, 5 }, { 5, 6 },  { 6,  6  } },
-  { { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 },  { 5,  5  } },
-  { { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 6 },  { 6,  6  } },
-  { { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 },  { 5,  5  } },
-  { { 0, 0 }, { 1, 2 }, { 1, 4 }, { 3, 6 }, { 5, 8 }, { 7, 10 }, { 10, 10 } }
-};
-
-static const int MAKE_ITEM_ARR4[2][7][2] = {
-  { { 0, 0 }, { 1, 4 }, { 3, 7 }, { 4, 8 }, { 5, 9 },  { 8, 9 },  { 9,  9  } },
-  { { 0, 0 }, { 1, 4 }, { 2, 6 }, { 4, 7 }, { 6, 10 }, { 9, 13 }, { 13, 13 } }
-};
-
-static const int MAKE_ITEM_ARR5[8][2] = {
-  { 0, 0 },   { 1,  15 }, { 16, 30 }, { 31, 40 }, { 41, 50 },
-  { 51, 60 }, { 61, 73 }, { 61, 73 }
-};
-
-static const int OUTDOOR_DRAWSTRUCT_INDEXES[44] = {
-  37, 38, 39, 40, 41, 44, 42, 43, 47, 45, 46,
-  48, 49, 52, 50, 51, 66, 67, 68, 69, 70, 71,
-  72, 75, 73, 74, 87, 88, 89, 90, 91, 94, 92,
-  93, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
-};
-
-static const int TOWN_MAXES[2][11] = {
-  { 23, 13, 32, 16, 26, 16, 16, 16, 16, 16, 16 },
-  { 26, 19, 48, 27, 26, 37, 16, 16, 16, 16, 16 }
-};
-
-static const char* const TOWN_ACTION_MUSIC[2][7] = {
-  { "bank.m", "smith.m", "guild.m", "tavern.m",
-  "temple.m", "grounds.m", "endgame.m" },
-  { "bank.m", "sf09.m", "guild.m", "tavern.m",
-  "temple.m", "smith.m", "endgame.m" }
-};
-
-static const char* const TOWN_ACTION_SHAPES[7] = {
-  "bnkr", "blck", "gild", "tvrn", "tmpl", "trng", "eface08"
-};
-
-static const int TOWN_ACTION_FILES[2][7] = {
-  { 3, 2, 4, 2, 4, 2, 1 }, { 5, 3, 7, 5, 4, 6, 1 }
-};
-
-static const char* const BANK_TEXT =
-  "\r\x2\x3""c\v122\t013"
-  "\f37‚\fdª«\t040\f37‘\fd­\t067ESC"
-  "\x1\t000\v000 ­ª Šá¨­ \v015\n"
-  " ­ª\x3""l\n"
-  "‡®«\x3""r\t000%s\x3""l\n"
-  "€«¬§\x3""r\t000%s\x3""c\n"
-  "\n"
-  "Žâàï¤\x3""l\n"
-  "‡®«\x3""r\t000%s\x3""l\n"
-  "€«¬§\x3""r\t000%s";
-
-static const char* const BLACKSMITH_TEXT =
-  "\x1\r\x3""c\v000\t000"
-  "‹ ¢ª \t039\v027%s\x3""l\v046\n"
-  "\t011\f37‘\fd¬®âà¥âì\n"
-  "\t000\v090‡®«\x3""r\t000%s"
-  "\x2\x3""c\v122\t040ESC\x1";
-
-static const char* const GUILD_NOT_MEMBER_TEXT =
-  "\n‚ë ¤®«¦­ë ¡ëâì ç«¥­®¬ £¨«ì¤¨¨, çâ®¡ë ¯®ªã¯ âì § ª«¨­ ­¨ï.";
-
-static const char* const GUILD_TEXT =
-  "\x3""c\v027\t039%s"
-  "\x3""l\v046\n"
-  "\t012\f37Š\fd㯨âì\n"
-  "\t012\f37Ž\fd¯¨á ­¨ï";
-
-static const char* const TAVERN_TEXT =
-  "\r\x3""c\v000\t000’ ¢¥à­ \t039"
-  "\v027%s%s\x3""l\t000"
-  "\v090‡®«\x3""r\t000%s\x2\x3""c\v122"
-  "\t021\f37Ž\fdâ¤ëå\t060ESC\x1";
-
-static const char* const FOOD_AND_DRINK =
-  "\x3""l\t017\v046\f37‚\fd믨âì\n"
-  "\t017\f37…\fd¤ \n"
-  "\t017\f37—\fd ¥¢ë¥\n"
-  "\t017\f37‘\fd«ãå¨";
-
-static const char* const GOOD_STUFF =
-  "\n"
-  "\n"
-  "¥¤ãà­®\n"
-  "\n"
-  " ¦¬¨â¥ ª« ¢¨èã!";
-
-static const char* const HAVE_A_DRINK = "\n‘¯¥à¢  ¢ë¯¥©â¥\n\n ¦¬¨â¥ ª« ¢¨èã!";
-
-static const char* const YOURE_DRUNK = "\n\n‚ë ¯ìï­ë\n\n ¦¬¨â¥ ª« ¢¨èã!";
-
-static const int TAVERN_EXIT_LIST[2][6][5][2] = {
-  {
-    { { 21, 17 }, { 0,  0 }, { 20, 3  }, { 0, 0 }, { 0,  0  } },
-    { { 13, 4  }, { 0,  0 }, { 19, 9  }, { 0, 0 }, { 0,  0  } },
-    { { 20, 10 }, { 12, 8 }, { 5,  26 }, { 3, 4 }, { 7,  5  } },
-    { { 18, 4  }, { 0,  0 }, { 19, 16 }, { 0, 0 }, { 11, 12 } },
-    { { 15, 21 }, { 0,  0 }, { 13, 21 }, { 0, 0 }, { 0,  0  } },
-    { { 10, 8  }, { 0,  0 }, { 15, 12 }, { 0, 0 }, { 0,  0  } },
-  }, {
-    { { 21, 17 }, { 0,  0  }, { 20, 3  }, { 0, 0 }, { 0, 0 } },
-    { { 13, 4  }, { 0,  0  }, { 19, 9  }, { 0, 0 }, { 0, 0 } },
-    { { 20, 10 }, { 12, 8  }, { 5,  26 }, { 3, 4 }, { 7, 5 } },
-    { { 17, 24 }, { 14, 13 }, { 0,  0  }, { 0, 0 }, { 9, 4 } },
-    { { 15, 21 }, { 0,  0  }, { 13, 21 }, { 0, 0 }, { 0, 0 } },
-    { { 10, 8  }, { 0,  0  }, { 15, 12 }, { 0, 0 }, { 0, 0 } }
-  }
-};
-
-static const char* const TEMPLE_TEXT =
-  "\r\x3""c\v000\t000•à ¬"
-  "\t039\v027%s\x3""l\t000\v046"
-  "\f37‹\fd¥ç¨âì\x3""r\t000%lu\x3""l\n"
-  "\f37„\fd à\x3""r\t000%lu\x3""l\n"
-  "\f37‘\fd­à®ª«\x3""r\t000%s"
-  "\x3""l\t000\v090‡®«\x3""r\t000%s"
-  "\x2\x3""c\v122\t040ESC\x1";
-
-static const char* const EXPERIENCE_FOR_LEVEL =
-  "%s\nã¦­® %lu ®çª®¢ ®¯ëâ  ¤«ï ã஢­ï %u.";
-
-static const char* const TRAINING_LEARNED_ALL =
-  "%s\n‚ë 㦥 §­ ¥â¥ ¢áñ, ç¥¬ã ¬ë ¬®¦¥¬ ¢ á ­ ãç¨âì!";
-
-static const char* const ELIGIBLE_FOR_LEVEL =
-  "%s ¬®¦¥â ®¡ãç âìáï ¤® ã஢­ï %d.\x3""l\n"
-  "\v081–¥­ \x3""r\t000%lu";
-
-static const char* const TRAINING_TEXT =
-  "\r\x3""cŽ¡ã祭¨¥\n"
-  "\n"
-  "%s\x3""l\v090\t000‡®«\x3""r\t000%s\x2\x3""c\v122\t021"
-  "\f37Ž\fd¡ã祭¨¥\t060ESC\x1";
-
-static const char* const GOLD_GEMS =
-  "\x3""c\v000\t000%s\x3""l\n"
-  "\n"
-  "‡®«\x3""r\t000%s\x3""l\n"
-  "€«¬§\x3""r\t000%s\x2\x3""c\v096\t007\f37€\fd«¬§\t035\f37‡\fd®«\t067ESC\x1";
-
-static const char* const GOLD_GEMS_2 =
-  "\t000\v000\x3""c%s\x3""l\n"
-  "\n"
-  "\x4""077‡®«\x3""r\t000%s\x3""l\n"
-  "\x4""077€«¬§\x3""r\t000%s\x3""l\t000\v051\x4""077\n"
-  "\x4""077";
-
-static const char* const DEPOSIT_WITHDRAWL[2] = 
-  { "®«®¦¨âì ­  áçñâ", "‘­ïâì á® áçñâ " };
-
-static const char* const NOT_ENOUGH_X_IN_THE_Y =
-  "\x3""c\v012¥¤®áâ â®ç­® %s %s!\x3""l";
-
-static const char* const NO_X_IN_THE_Y = "\x3""c\v012¥â %s %s!\x3""l";
-
-static const char* const STAT_NAMES[16] = {
-  "‘¨« ", "ˆ­â¥««¥ªâ", "‘¨«  ¤ãå ", "‘«®¦¥­¨¥", "‘ª®à®áâì", 
-  "Œ¥âª®áâì", "“¤ ç ", "‚®§à áâ", "“஢¥­ì", "Š« áá § é¨âë", "‡¤®à®¢ì¥",
-  "Žçª¨ ¬ £¨¨", "“á⮩稢®áâ¨", " ¢ëª¨", " £à ¤ë", "ޝëâ"
-};
-
-static const char* const CONSUMABLE_NAMES[4] = 
-  { "‡®«®â®", "€«¬ §ë", "¨é ", "‘®áâ®ï­¨¥" };
-
-static const char* const WHERE_NAMES[2] = { "ã ®âà鸞", "¢ ¡ ­ª¥" };
-
-static const char* const AMOUNT = "\x3""c\t000\v051‘ª®«ìª®\x3""l\n";
-
-static const char* const FOOD_PACKS_FULL = "\v007‚ è¨ à ª¨ 㦥 ­ ¯®«­¥­ë!";
-
-static const char* const BUY_SPELLS =
-  "\x3""c\v027\t039%s\x3""l\v046\n"
-  "\t012\f37Š\fd㯨âì\n"
-  "\t012\f37Ž\fd¯¨á ­¨ï";
-
-static const char* const GUILD_OPTIONS =
-  "\x1\r\f00\x3""c\v000\t000ƒ¨«ì¤¨ï\n"
-  "%s\x3""l\t000\v090‡®«"
-  "\x3""r\t000%s\x2\x3""c\v122\t040ESC\x1";
-
-static const int MISC_SPELL_INDEX[74] = {
-  NO_SPELL, MS_Light, MS_Awaken, MS_MagicArrow,
-  MS_FirstAid, MS_FlyingFist, MS_EnergyBlast, MS_Sleep,
-  MS_Revitalize, MS_CureWounds, MS_Sparks, MS_Shrapmetal,
-  MS_InsectSpray, MS_ToxicCloud, MS_ProtFromElements, MS_Pain,
-  MS_Jump, MS_BeastMaster, MS_Clairvoyance, MS_TurnUndead,
-  MS_Levitate, MS_WizardEye, MS_Bless, MS_IdentifyMonster,
-  MS_LightningBolt, MS_HolyBonus, MS_PowerCure, MS_NaturesCure,
-  MS_LloydsBeacon, MS_PowerShield, MS_Heroism, MS_Hynotize,
-  MS_WalkOnWater, MS_FrostBite, MS_DetectMonster, MS_Fireball,
-  MS_ColdRay, MS_CurePoison, MS_AcidSpray, MS_TimeDistortion,
-  MS_DragonSleep, MS_CureDisease, MS_Teleport, MS_FingerOfDeath,
-  MS_CureParalysis, MS_GolemStopper, MS_PoisonVolley, MS_DeadlySwarm,
-  MS_SuperShelter, MS_DayOfProtection, MS_DayOfSorcery, MS_CreateFood,
-  MS_FieryFlail, MS_RechargeItem, MS_FantasticFreeze, MS_TownPortal,
-  MS_StoneToFlesh, MS_RaiseDead, MS_Etheralize, MS_DancingSword,
-  MS_MoonRay, MS_MassDistortion, MS_PrismaticLight, MS_EnchantItem,
-  MS_Incinerate, MS_HolyWord, MS_Resurrection, MS_ElementalStorm,
-  MS_MegaVolts, MS_Inferno, MS_SunRay, MS_Implosion,
-  MS_StarBurst, MS_DivineIntervention
-};
-
-static const int SPELL_COSTS[77] = {
-  8, 1, 5, -2, 5, -2, 20, 10, 12, 8, 3,
-  -3, 75, 40, 12, 6, 200, 10, 100, 30, -1, 30,
-  15, 25, 10, -2, 1, 2, 7, 20, -2, -2, 100,
-  15, 5, 100, 35, 75, 5, 20, 4, 5, 1, -2,
-  6, 2, 75, 40, 60, 6, 4, 25, -2, -2, 60,
-  -1, 50, 15, 125, 2, -1, 3, -1, 200, 35, 150,
-  15, 5, 4, 10, 8, 30, 4, 5, 7, 5, 0
-};
-
-static const int DARK_SPELL_RANGES[12][2] = {
-  { 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 },
-  { 0, 17 }, { 14, 34 }, { 26, 37 }, { 29, 39 },
-  { 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 }
-};
-
-static const int SWORDS_SPELL_RANGES[12][2] = {
-  { 0, 20 },{ 16, 35 },{ 27, 39 },{ 29, 39 },
-  { 0, 17 },{ 14, 34 },{ 26, 39 },{ 29, 39 },
-  { 0, 20 },{ 16, 35 },{ 27, 39 },{ 29, 39 }
-};
-
-static const int CLOUDS_GUILD_SPELLS[5][20] = {
-  {
-    1, 10, 20, 26, 27, 38, 40, 42, 45, 50,
-    55, 59, 60, 61, 62, 68, 72, 75, 77, 77
-  }, {
-    3, 4, 5, 14, 15, 25, 30, 31, 34, 41,
-    49, 51, 53, 67, 73, 75, -1, -1, -1, -1
-  }, {
-    4, 8, 9, 12, 13, 22, 23, 24, 28, 34,
-    41, 44, 52, 70, 73, 74, -1, -1, -1, -1
-  }, {
-    6, 7, 9, 11, 12, 13, 17, 21, 22, 24,
-    29, 36, 56, 58, 64, 71, -1, -1, -1, -1
-  }, {
-    6, 7, 9, 11, 12, 13, 18, 21, 29, 32,
-    36, 37, 46, 51, 56, 58, 69, -1, -1, -1
-  }
-};
-
-static const int DARK_SPELL_OFFSETS[3][39] = {
-  {
-    42, 1, 26, 59, 27, 10, 50, 68, 55, 62, 67, 73, 2,
-    5, 3, 31, 30, 52, 49, 28, 74, 0, 9, 7, 14, 8,
-    33, 6, 23, 71, 64, 56, 48, 46, 12, 32, 58, 65, 16
-  }, {
-    42, 1, 45, 61, 72, 40, 20, 60, 38, 41, 75, 34, 4,
-    43, 25, 53, 44, 15, 70, 17, 24, 69, 22, 66, 57, 11,
-    29, 39, 51, 21, 19, 36, 47, 13, 54, 37, 18, 35, 63
-  }, {
-    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
-    13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-    26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38
-  }
-};
-
-static const int SPELL_GEM_COST[77] = {
-  0, 0, 2, 1, 2, 4, 5, 0, 0, 0, 0, 10, 10, 10, 0, 0, 20, 4, 10, 20, 1, 10,
-  5, 5, 4, 2, 0, 0, 0, 10, 3, 1, 20, 4, 0, 20, 10, 10, 1, 10, 0, 0, 0, 2,
-  2, 0, 10, 10, 10, 0, 0, 10, 3, 2, 10, 1, 10, 10, 20, 0, 0, 1, 1, 20, 5, 20,
-  5, 0, 0, 0, 0, 5, 1, 2, 0, 2, 0
-};
-
-static const char* const NOT_A_SPELL_CASTER = "‚ë ­¥ § ª«¨­ â¥«ì...";
-
-static const char* const SPELLS_LEARNED_ALL =
-  "‚ë 㦥 §­ ¥â¥ ¢áñ,\n"
-  "\t010ç¥¬ã ¬ë ¬®¦¥¬ ¢ á\n"
-  "\t010­ ãç¨âì!\n"
-  "\n"
-  "\n"
-  "\n"
-  "\n"
-  "\n"
-  "\n"
-  "\n"
-  "\n"
-  "\n";
-
-static const char* const SPELLS_FOR = "\r\fd%s\x2\x3""c\t000\v002‡ ª«¨­ ­¨ï";
-
-static const char* const SPELL_LINES_0_TO_9 =
-  "\x2\x3l\v015\t0011\n2\n3\n4\n5\n6\n7\n8\n9\n0";
-
-static const char* const SPELLS_DIALOG_SPELLS = 
-  "\x3l\v015"
-  "\t010\f%2u%s\fd\x3l\n"
-  "\t010\f%2u%s\fd\x3l\n"
-  "\t010\f%2u%s\fd\x3l\n"
-  "\t010\f%2u%s\fd\x3l\n"
-  "\t010\f%2u%s\fd\x3l\n"
-  "\t010\f%2u%s\fd\x3l\n"
-  "\t010\f%2u%s\fd\x3l\n"
-  "\t010\f%2u%s\fd\x3l\n"
-  "\t010\f%2u%s\fd\x3l\n"
-  "\t010\f%2u%s\fd\x3l"
-  "\t004\v110%s - %u\x1";
-
-static const char* const SPELL_PTS = "Œ ­ ";
-
-static const char* const GOLD = "‡®«";
-
-static const char* const SPELL_INFO =
-  "\x3""c\f09%s\fd\x3""l\n"
-  "\n"
-  "%s\x3""c\t000\v110. ª« ¢¨èã!";
-
-static const char* const SPELL_PURCHASE =
-  "\x3""l\v000\t000\fd%s  †¥« ¥â¥ ¯à¨®¡à¥á⨠"
-  "\f09%s\fd §  %u?";
-
-static const char* const MAP_TEXT =
-  "\x3""c\v000\t000%s\x3l\v139"
-  "\t000X = %d\x3r\t000Y = %d\x3""c\t000%s";
-
-static const char* const LIGHT_COUNT_TEXT = "\x3""l\n\n\t024‘¢¥â\x3""r\t124%u";
-
-static const char* const FIRE_RESISTENCE_TEXT = "%c%sŽ£®­ì%s%u";
-
-static const char* const ELECRICITY_RESISTENCE_TEXT = "%c%sƒà®¬%s%u";
-
-static const char* const COLD_RESISTENCE_TEXT = "%c%s•®«®¤%s%u";
-
-static const char* const POISON_RESISTENCE_TEXT = "%c%sŸ¤/Š¨á«®â %s%u";
-
-static const char* const CLAIRVOYANCE_TEXT = "%c%sŸá­®¢¨¤¥­¨¥%s";
-
-static const char* const LEVITATE_TEXT = "%c%s‹¥¢¨â æ¨ï%s";
-
-static const char* const WALK_ON_WATER_TEXT = "%c%s•®¦¤¥­¨¥ ¯® ¢®¤¥";
-
-static const char* const GAME_INFORMATION =
-  "\r\x3""c\t000\v001\f37%s Šá¨­ \fd\n"
-  "ˆ£à®¢ ï ¨­ä®à¬ æ¨ï\n"
-  "\n"
-  "‘¥£®¤­ï \f37%s\fd\n"
-  "\n"
-  "\t032‚६ï\t072„¥­ì\t112ƒ®¤\n"
-  "\t032\f37%d:%02d%c\t072%u\t112%u\fd%s";
-
-static const char* const WORLD_GAME_TEXT = "World";
-static const char* const DARKSIDE_GAME_TEXT = "Darkside";
-static const char* const CLOUDS_GAME_TEXT = "Ž¡« ª ";
-static const char* const SWORDS_GAME_TEXT = "Swords";
-
-static const char* const WEEK_DAY_STRINGS[10] = {
-  "¤¥áï⨤¥­ì", "¯¥à¢®¤¥­ì", "¢â®à®¤¥­ì", "âà¥â쥤¥­ì", "ç¥â¢¥à®¤¥­ì", 
-  "¯ï⨤¥­ì",   "è¥á⨤¥­ì", "ᥬ¨¤¥­ì",  "¢®á쬨¤¥­ì", "¤¥¢ï⨤¥­ì"
-};
-
-static const char* const CHARACTER_DETAILS =
-  "\x3""l\v041\t196%s\t000\v002%s : %s %s %s"
-  "\x3""r\t053\v028\f%02u%u\fd\t103\f%02u%u\fd"
-  "\x3""l\t131\f%02u%d\fd\t196\f15%lu\fd\x3""r"
-  "\t053\v051\f%02u%u\fd\t103\f%02u%u\fd"
-  "\x3""l\t131\f%02u%u\fd\t196\f15%lu\fd"
-  "\x3""r\t053\v074\f%02u%u\fd\t103\f%02u%u\fd"
-  "\x3""l\t131\f15%u\fd\t196\f15%lu\fd"
-  "\x3""r\t053\v097\f%02u%u\fd\t103\f%02u%u\fd"
-  "\x3""l\t131\f15%u\fd\t196\f15%u %s\fd"
-  "\x3""r\t053\v120\f%02u%u\fd\t103\f%02u%u\fd"
-  "\x3""l\t131\f15%u\fd\t196\f%02u%s\fd"
-  "\t245%s%s%s%s\fd";
-
-static const char *const RU_DAYS[3] = { "¤¥­ì", "¤­ï", "¤­¥©" };
-
-static const char* const PARTY_GOLD = "‡®«®â®";
-
-static const char* const PLUS_14 = "\f14+";
-
-static const char* const CHARACTER_TEMPLATE =
-  "\x1\f00\r\x3""l\t029\v018‘¨«\t080Œâª\t131‡¤®à\t196ޝëâ"
-  "\t029\v041ˆ­â\t080“¤ç\t131ŽŒ\t029\v064„ãå\t080‚§à"
-  "\t131“áâ\t196€«¬ §ë\t029\v087‘«¦\t080“à¢\t131¢ª"
-  "\t196¨é \t029\v110‘ªà\t080Ї\t131 £à\t196‘®áâ®ï­¨¥"
-  "\x3""c\t290\v025\f37‚\fd¥é¨\t290\v057\f37"
-  "\fdáâà\t290\v089\f37‘\fd¬¥­\t290\v121‚ë室\x3""l%s";
-
-static const char* const EXCHANGING_IN_COMBAT =
-  "\x3""c\v007\t000‚® ¢à¥¬ï ¡¨â¢ë § ¯à¥é¥­® ¬¥­ïâìáï ¬¥áâ ¬¨!";
-
-static const char* const CURRENT_MAXIMUM_RATING_TEXT =
-  "\x2\x3""c%s\n"
-  "‘¥©ç á / Œ ªá¨¬ã¬\n"
-  "\x3""r\t054%lu\x3""l\t058/ %lu\n"
-  "\x3""c ­£: %s\x1";
-
-static const char* const CURRENT_MAXIMUM_TEXT =
-  "\x2\x3""c%s\n"
-  "‘¥©ç á / Œ ªá¨¬ã¬\n"
-  "\x3""r\t054%d\x3""l\t058/ %lu";
-
-static const char* const RATING_TEXT[24] = {
-  "¥â", "Œ¨§¥à­ë©", "† «ª¨©", "Žç.­¨§ª¨©", "¨§ª¨©", "‘।­¨©", "•®à®è¨©", 
-  "Žâ«¨ç­ë©", "‚ë᮪¨©", "‚ëá®ç¥­­ë©", "®«ì让", "Ž£à®¬­ë©", "“¤¨¢¨â¥«ì­ë©", 
-  "¥¢¥à®ïâ­ë©", "ƒ¨£ ­â᪨©", "” ­â áâ¨ç­ë©", "ˆ§ã¬¨â¥«ì­ë©", "®à §¨â¥«ì­ë©", 
-  "ƒà ­¤¨®§­ë©", "ƒà®¬ ¤­ë©", "Š®«®áá «ì­ë©", "®âàïá î騩", "—㤮¢¨é­ë©", 
-  "‚ëá®ç ©è¨©"
-};
-
-static const char* const AGE_TEXT =
-  "\x2\x3""c%s\n"
-  "’¥ªã騩 /  áâ®ï騩\n"
-  "\x3""r\t057%u\x3""l\t061/ %u\n"
-  "\x3""c®¤¨«%s: %u / %u\x1";
-
-static const char* const LEVEL_TEXT =
-  "\x2\x3""c%s\n"
-  "’¥ªã騩 / Œ ªá¨¬ã¬\n"
-  "\x3""r\t054%u\x3""l\t058/ %u\n"
-  "\x3""c%u €â ª%s/ ã­¤\x1";
-
-static const char* const RESISTENCES_TEXT =
-  "\x2\x3""c%s\x3""l\n"
-  "\t020Ž£®­ì\t100%u\n"
-  "\t020•®«®¤\t100%u\n"
-  "\t020ƒà®¬\t100%u\n"
-  "\t020Ÿ¤\t100%u\n"
-  "\t020­¥à£¨ï\t100%u\n"
-  "\t020Œ £¨ï\t100%u";
-
-static const char* const NONE = "\n\t012¥â";
-
-static const char* const EXPERIENCE_TEXT =
-  "\x2\x3""c%s\x3""l\n"
-  "\t005’¥ªã騩:\t070%lu\n"
-  "\t005‘«. ã஢¥­ì:\t070%s\x1";
-
-static const char* const ELIGIBLE = "\f12„®áâ㯥­\fd";
-
-static const char* const IN_PARTY_IN_BANK =
-  "\x2\x3""c%s\n"
-  "%lu á ᮡ®©\n"
-  "%lu ¢ ¡ ­ª¥\x1\x3""l";
-
-static const char* const FOOD_TEXT =
-  "\x2\x3""c%s\n"
-  "%u ¯®àæ¨%c\n"
-  "•¢ â¨â ­  %u %s\x1\x3""l";
-
-static const char* const EXCHANGE_WITH_WHOM = "\t010\v005®¬¥­ïâìáï á ª¥¬?";
-
-static const char* const QUICK_REF_LINE =
-  "\v%3d\t007%u)\t027%s\t110%c%c%c\x3r\t160\f%02u%u\fd"
-  "\x3l\t170\f%02u%d\fd\t208\f%02u%u\fd\t247\f"
-  "%02u%u\fd\t270\f%02u%c%c%c%c\fd";
-
-static const char* const QUICK_REFERENCE =
-  "\r\x3""cëáâà ï c¯à ¢ª \v012\x3""l"
-  "\t007#\t027ˆ¬ï\t110Š«á\t147“à¢\t174‡¤®à"
-  "\t214ŽŒ\t242Ї\t270‘®áâ"
-  "%s%s%s%s%s%s%s%s"
-  "\v110\t064\x3""c‡®«®â®\t144€«¬ §ë\t224¨é \v119"
-  "\t064\f15%lu\t144%lu\t224%u %s\fd";
-
-static const int BLACKSMITH_MAP_IDS[2][4] = 
-  { { 28, 30, 73, 49 }, { 29, 31, 37, 43 } };
-
-static const char* const ITEMS_DIALOG_TEXT1 =
-  "\r\x2\x3""c\v021\t017Žàã\f37¦\fd\t051\f37\fdà®­ï\t085"
-  "\f37“\fdªà è\t119\f37\fd §­\t153%s\t187%s\t221%s\t255%s\t289‚ë室";
-
-static const char* const ITEMS_DIALOG_TEXT2 =
-  "\r\x2\x3""c\v021\t017Žàã\f37¦\fd\t051\f37\fdà®­ï\t085"
-  "\f37“\fdªà è\t119\f37\fd §­\t153\f37%s\t289‚ë室";
-
-static const char* const ITEMS_DIALOG_LINE1 = "\x3r\f%02u\t023%2d)\x3l\t028%s\n";
-static const char* const ITEMS_DIALOG_LINE2 = "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%u\n";
-
-static const char* const BTN_BUY = "\f37Š\fdã¯";
-static const char *const BTN_SELL = "\f37\fdத";
-static const char* const BTN_IDENTIFY = "\f37Ž\fd¯®§­";
-static const char* const BTN_FIX = "\f37—\fd¨­¨âì";
-static const char* const BTN_USE = "\f37ˆ\fdá¯";
-static const char* const BTN_EQUIP = "\f37\fd ¤";
-static const char* const BTN_REMOVE = "\f37‘\fd­ïâì";
-static const char* const BTN_DISCARD = "\f37‚\fdë¡à";
-static const char* const BTN_QUEST = "\f37‡\fd ¤ ­";
-static const char* const BTN_ENCHANT = "‡\fd ç à";
-static const char* const BTN_RECHARGE = "\fd¥à¥§à";
-static const char* const BTN_GOLD = "‡\fd®«®â®";
-
-static const char* const ITEM_BROKEN = "\f32á«®¬ ­® ";
-static const char* const ITEM_CURSED = "\f09¯à®ª«ïâ® ";
-static const char* const ITEM_OF = "";
-
-static const char* const BONUS_NAMES[7] = {
-  "", "“¡¨©æë ¤à ª®­®¢", "ˆ§£®­ïî饣® ¬ñàâ¢ëå", "Šàãè¨â¥«ï £®«¥¬®¢", 
-  "„ ¢¨â¥«ï ­ á¥ª®¬ëå", "“¡¨©æë ¬®­áâ஢", "“¡¨©æë §¢¥à¥©"
-};
-
-static const char* const WEAPON_NAMES[41] = {
-  nullptr, "¬¥ç ", "£« ¤¨ãá ", "¯ « è ", "ïâ £ ­ ",
-  "ª®à⨪ ", "á ¡«ï ", "¤ã¡¨­  ", "⮯®à ", "ª â ­  ", "­ã­ç ª¨ ",
-  "¢ ª¨¤§ á¨ ", "ª¨­¦ « ", "¡ã« ¢  ", "楯 ", "¦¥§« ", "¬®«®â ", "ª®¯ìñ ",
-  "¡¥à¤ëè ", "£«¥ä  ", " «¥¡ à¤  ", "¯¨ª  ", "ä« ¬¡¥à£ ", "â१㡥æ ",
-  "¯®á®å ", "¡®¥¢®© ¬®«®â ", "­ £¨­ â  ", "¡®¥¢®© ⮯®à ", "ᥪ¨à  ", 
-  "⮯®à ¯ « ç  ", "«ãª ", "¡®«ì让 «ãª ", " à¡ «¥â ", "¯à é  ", 
-  "Œ¥ç - 㡨©æ  Šá¨­  ",
-  "Elder LongSword ", "Elder Dagger ", "Elder Mace ", "Elder Spear ",
-  "Elder Staff ", "Elder LongBow "
-};
-
-static const char* const ARMOR_NAMES[14] = {
-  nullptr, "¬ ­â¨ï ", "ç¥èãï ", "¯ ­æ¨àì ", "ª®«ìç㣠 ",
-  "î謠­ ", "¡¥åâ¥à¥æ ", "« âë ", "é¨â ",
-  "è«¥¬ ", "á ¯®£¨ ", "¯« é ", "­ ª¨¤ª  ", "¯¥àç âª¨ "
-};
-
-static const char* const ACCESSORY_NAMES[11] = {
-  nullptr, "ª®«ìæ® ", "¯®ïá ", "¡à®èì ", "¬¥¤ «ì ", "â «¨á¬ ­ ", "ª ¬¥ï ", 
-  "᪠ࠡ¥© ", "ªã«®­ ", "®¦¥à¥«ì¥ ", " ¬ã«¥â "
-};
-
-static const char* const MISC_NAMES[22] = {
-  nullptr, "᪨¯¥âà ", "á ¬®æ¢¥â ", "ª ¬¥­ì ", "誠â㫪  ", "áä¥à  ", "ண ", 
-  "¬®­¥âª  ", "¦¥§« ", "ᢨá⮪ ", "§¥«ì¥ ", "ᢨ⮪ ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", 
-  "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", 
-  "¯®¤¤¥«ª ", "¯®¤¤¥«ª "
-};
-
-static const char* const SPECIAL_NAMES[74] = {
-  nullptr, "ᢥâ ", "¯à®¡ã¦¤¥­¨ï", "¢®«è¥¡­ëå áâ५", "¯¥à¢®© ¯®¬®é¨", 
-  "ªã« ª®¢", "í­¥à£¥â¨ç¥áª®£® ¢§à뢠", "ãá믫¥­¨ï", "«¥ç¥­¨ï á« ¡®áâ¨", 
-  "«¥ç¥­¨ï", "¨áªà", "èà ¯­¥«¨", "९¥««¥­â ", "冷¢¨âëå ®¡« ª®¢", 
-  "§ é¨âë ®â áâ¨å¨©", "¡®«¨", "¯à릪®¢", "ª®­âà®«ï ­ ¤ ¬®­áâà ¬¨", 
-  "ïá­®¢¨¤¥­¨ï", "¨§£­ ­¨ï ­¥¦¨â¨", "«¥¢¨â æ¨¨", "¢®«è¥¡­®£® £« § ", 
-  "¡« £®á«®¢¥­¨ï", "®¯®§­ ­¨ï ¬®­áâ஢", "¬®«­¨©", "á¢ïâëå ¤ à®¢", "¨á楫¥­¨ï", 
-  "¯à¨à®¤­®£® «¥ç¥­¨ï", "¬ ïª®¢", "é¨â ", "¬ã¦¥á⢠", "£¨¯­®§ ", 
-  "宦¤¥­¨ï ¯® ¢®¤¥", "®¡¦¨£ î饣® 宫®¤ ", "¯®¨áª  ¬®­áâ஢", 
-  "®£­¥­­ëå è à®¢", "«ã祩 宫®¤ ", "¯à®â¨¢®ï¤¨ï", "à á¯ë«¥­¨ï ª¨á«®âë", 
-  "¢à¥¬¥­­®£® ¨áª ¦¥­¨ï", "ãá믫¥­¨ï ¤à ª®­®¢", "¢ ªæ¨­ æ¨¨", "⥫¥¯®àâ æ¨¨",
-  "ᬥàâ¨", "᢮¡®¤­®£® ¤¢¨¦¥­¨ï", "®áâ ­®¢ª¨ £®«¥¬ ", "冷¢¨âëå § «¯®¢", 
-  "ᬥà⥫쭮£® à®ï", "ã¡¥¦¨é ", "¤­ï § é¨âë", "¤­ï ¬ £¨¨", "¯¨à ", 
-  "®£­¥­­®£® 楯 ", "¯¥à¥§ à浪¨", "¬®à®§ ", "£®à®¤áª¨å ¯®àâ «®¢", 
-  "á­ïâ¨ï ®ª ¬¥­¥­¨ï", "®¦¨¢«¥­¨ï ¬ñàâ¢ëå", "¤¥¬ â¥à¨ «¨§ æ¨¨", 
-  "â ­æãîé¨å ª«¨­ª®¢", "«ã­­ëå «ã祩", "¨§¬¥­¥­¨ï ¢¥á ", 
-  "¯à¨§¬ â¨ç¥áª®£® ᢥâ ", "ç à", "¨á¯¥¯¥«¥­¨ï", "á¢ïâëå á«®¢", "¢®áªà¥è¥­¨ï", 
-  "¡ãàì", "¬¥£ ¢®«ìâ", "¨­ä¥à­®", "᮫­¥ç­ëå «ã祩", "¨¬¯«®§¨©", 
-  "¢§à뢠 §¢¥§¤ë", "ŽƒŽ‚!"
-};
-
-static const char* const ELEMENTAL_NAMES[6] = {
-  "Ž£­ï", "ƒà®¬ ", "•®«®¤ ", "Š¨á«®âë/Ÿ¤ ", "­¥à£¨¨", "Œ £¨¨"
-};
-
-static const char* const ATTRIBUTE_NAMES[10] = {
-  "‘¨« ", "ˆ­â¥««¥ªâ", "‘¨«  ¤ãå ", "‘ª®à®áâì", "Œ¥âª®áâì", "“¤ ç ",
-  "‡¤®à®¢ì¥", "Žçª¨ ¬ £¨¨", "Š« áá § é¨âë", "‚®à®¢á⢮"
-};
-
-static const char* const EFFECTIVENESS_NAMES[7] = {
-  nullptr, "„à ª®­®¢", "Œñàâ¢ëå", "ƒ®«¥¬®¢", " á¥ª®¬ëå", "Œ®­áâ஢", "‡¢¥à¥©"
-};
-
-static const char* const QUEST_ITEM_NAMES[85] = {
-  "à ¢® ¢« ¤¥­¨ï ì᫮¬",
-  "•àãáâ «ì­ë© ª«îç ®â ‚¥¤ì¬¨­®© ¡ è­¨",
-  "Žâ¬ë窠 ¤«ï ¡ è­¨ „ à§®£ ",
-  "Š«îç ®â  è­¨ ¢ëá襩 ¬ £¨¨",
-  "„à £®æ¥­­ë©  ¬ã«¥â ‘¥¢¥à­®£® ‘䨭ªá ",
-  "Š ¬¥­ì ’ëáïç¨ “¦ á®¢",
-  "Žâ¯¨à î騩 ª ¬¥­ì £®«¥¬®¢",
-  "Žâ¯¨à î騩 ª ¬¥­ì Ÿª ",
-  "‘ª¨¯¥âà ‚à¥¬¥­­®£® ˆáª ¦¥­¨ï",
-  "®£ ” «¨áâë",
-  "«¨ªá¨à ‚®ááâ ­®¢«¥­¨ï",
-  "‚®«è¥¡­ë© ¦¥§« 䥩",
-  "„¨ ¤¥¬  ¯à¨­æ¥ááë ®ªá ­ë",
-  "‘¢ï饭­ ï Š­¨£  «ì䮢",
-  "‘ª à ¡¥© ‚®¯«®é¥­¨ï",
-  "Šà¨áâ ««ë ì¥§®í«¥ªâà¨ç¥á⢠",
-  "‘¢¨â®ª Œã¤à®áâ¨",
-  "Š®à¥­ì ä¨à­ë",
-  "Š®áâï­®© ᢨá⮪ Žà®ä¨­ ",
-  "‚®«è¥¡­ë© ªã«®­  à®ª ",
-  "à®¯ ¢è¨© ç¥à¥¯ ‹¨£®­®",
-  "®á«¥¤­¨© 梥⮪ «¥â ",
-  "®á«¥¤­ïï ¤®¦¤¥¢ ï ª ¯¥«ìª  ¢¥á­ë",
-  "®á«¥¤­ïï á­¥¦¨­ª  §¨¬ë",
-  "®á«¥¤­¨© «¨á⠮ᥭ¨",
-  "‚¥ç­® £®àï稩 ªã᮪ ¯¥¬§ë",
-  "Œ¥£ ªà¥¤¨â ª®à®«ï",
-  " §à¥è¥­¨¥ ­  à áª®¯ª¨",
-  "Šãª®«ª ",
-  "Šãª«  ‘¨«ë",
-  "Šãª«  ‘ª®à®áâ¨",
-  "Šãª«  ‘«®¦¥­¨ï",
-  "Šãª«  Œ¥âª®áâ¨",
-  "Šãª«  “¤ ç¨",
-  "“áâனá⢮",
-  "Pass to Castleview",
-  "Pass to Sandcaster",
-  "Pass to Lakeside",
-  "Pass to Necropolis",
-  "Pass to Olympus",
-  "Key to Great Western Tower",
-  "Key to Great Southern Tower",
-  "Key to Great Eastern Tower",
-  "Key to Great Northern Tower",
-  "Key to Ellinger's Tower",
-  "Key to Dragon Tower",
-  "Key to Darkstone Tower",
-  "Key to Temple of Bark",
-  "Key to Dungeon of Lost Souls",
-  "Key to Ancient Pyramid",
-  "Key to Dungeon of Death",
-  "Amulet of the Southern Sphinx",
-  "Dragon Pharoah's Orb",
-  "Cube of Power",
-  "Chime of Opening",
-  "Gold ID Card",
-  "Silver ID Card",
-  "Vulture Repellant",
-  "Bridle",
-  "Enchanted Bridle",
-  "Treasure Map (Goto E1 x1, y11)",
-  "",
-  "Fake Map",
-  "Onyx Necklace",
-  "Dragon Egg",
-  "Tribble",
-  "Golden Pegasus Statuette",
-  "Golden Dragon Statuette",
-  "Golden Griffin Statuette",
-  "Chalice of Protection",
-  "Jewel of Ages",
-  "Songbird of Serenity",
-  "Sandro's Heart",
-  "Ector's Ring",
-  "Vespar's Emerald Handle",
-  "Queen Kalindra's Crown",
-  "Caleb's Magnifying Glass",
-  "Soul Box",
-  "Soul Box with Corak inside",
-  "Ruby Rock",
-  "Emerald Rock",
-  "Sapphire Rock",
-  "Diamond Rock",
-  "Monga Melon",
-  "Energy Disk"
-};
-
-static const char* QUEST_ITEM_NAMES_SWORDS[51] = {
-  "Pass to Hart", "Pass to Impery", "Pass to town3", "Pass to town4", "Pass to town5",
-  "Key to Hart Sewers", "Key to Rettig's Pyramid", "Key to the Old Temple",
-  "Key to Canegtut's Pyramid", "Key to Ascihep's Pyramid", "Key to Dragon Tower",
-  "Key to Darkstone Tower", "Key to Temple of Bark", "Key to Dungeon of Lost Souls",
-  "Key to Ancient Pyramid", "Key to Dungeon of Death", "Red Magic Hammer",
-  "Green Magic Hammer", "Golden Magic Wand", "Silver Magic Hammer", "Magic Coin",
-  "Ruby", "Diamond Mineral", "Emerald", "Sapphire", "Treasure Map (Goto E1 x1, y11)",
-  "NOTUSED", "Melon", "Princess Crown", "Emerald Wand", "Druid Carving", "High Sign",
-  "Holy Wheel", "Double Cross", "Sky Hook", "Sacred Cow", "Staff of the Mountain",
-  "Hard Rock", "Soft Rock", "Rock Candy", "Ivy Plant", "Spirit Gem", "Temple of Sun holy lamp oil",
-  "Noams Hammer", "Positive Orb", "Negative Orb", "FireBane Staff", "Diamond Edged Pick",
-  "Monga Melon", "Energy Disk", "Old XEEN Quest Item"
-};
-
-static const int WEAPON_BASE_COSTS[35] = {
-  0, 50, 15, 100, 80, 40, 60, 1, 10, 150, 30, 60, 8, 50,
-  100, 15, 30, 15, 200, 80, 250, 150, 400, 100, 40, 120,
-  300, 100, 200, 300, 25, 100, 50, 15, 0
-};
-static const int ARMOR_BASE_COSTS[14] = {
-  0, 20, 100, 200, 400, 600, 1000, 2000, 100, 60, 40, 250, 200, 100
-};
-static const int ACCESSORY_BASE_COSTS[11] = {
-  0, 100, 100, 250, 100, 50, 300, 200, 500, 1000, 2000
-};
-static const int MISC_MATERIAL_COSTS[22] = {
-  0, 50, 1000, 500, 10, 100, 20, 10, 50, 10, 10, 100,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1
-};
-static const int MISC_BASE_COSTS[76] = {
-  0, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
-  100, 100, 100, 100, 200, 200, 200, 200, 200, 200, 200, 200,
-  200, 200, 200, 200, 200, 200, 200, 300, 300, 300, 300, 300,
-  300, 300, 300, 300, 300, 400, 400, 400, 400, 400, 400, 400,
-  400, 400, 400, 500, 500, 500, 500, 500, 500, 500, 500, 500,
-  500, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,
-  600, 600, 600, 600
-};
-static const int METAL_BASE_MULTIPLIERS[22] = {
-  10, 25, 5, 75, 2, 5, 10, 20, 50, 2, 3, 5, 10, 20, 30, 40,
-  50, 60, 70, 80, 90, 100
-};
-static const int ITEM_SKILL_DIVISORS[4] = { 1, 2, 100, 10 };
-
-static const int RESTRICTION_OFFSETS[4] = { 0, 35, 49, 60 };
-
-static const int ITEM_RESTRICTIONS[86] = {
-  0, 86, 86, 86, 86, 86, 86, 0, 6, 239, 239, 239, 2, 4, 4, 4, 4,
-  6, 70, 70, 70, 70, 94, 70, 0, 4, 239, 86, 86, 86, 70, 70, 70, 70,
-  0, 0, 0, 68, 100, 116, 125, 255, 255, 85, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-static const char* const NOT_PROFICIENT =
-  "\t000\v007\x3""c%s ­¥ ¬®¦¥â ¨á¯®«ì§®¢ âì %s!";
-
-static const char* const NO_ITEMS_AVAILABLE = "\x3""c\n\t000¥â ¢¥é¥©.";
-
-static const char* const CATEGORY_NAMES[4] = { 
-  "Žà㦨¥", "à®­ï", "“ªà è¥­¨ï", " §­®¥"
-};
-
-static const char* const X_FOR_THE_Y =
-  "\x1\fd\r%s\v000\t000%s - %s %s%s\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-
-static const char* const X_FOR_Y =
-  "\x1\fd\r\x3""l\v000\t000%s - %s\x3""r\t000%s\x3""l\v011"
-  "\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-
-static const char* const X_FOR_Y_GOLD =
-  "\x1\fd\r\x3""l\v000\t000%s - %s\t150‡®«®â® - %lu%s\x3""l\v011"
-  "\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-
-static const char* const FMT_CHARGES = "\x3""r\t000‡ à冷¢\x3""l";
-
-static const char* const AVAILABLE_GOLD_COST =
-  "\x1\fd\r\x3""l\v000\t000%s\t150‡®«®â® - %lu\x3""r\t000–¥­ "
-  "\x3""l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-
-static const char* const CHARGES = "‡ à冷¢";
-
-static const char* const COST = "–¥­ ";
-
-static const char* const ITEM_ACTIONS[7] = {
-  "­ ¤¥âì", "á­ïâì", "¨á¯®«ì§®¢ âì", "¢ëª¨­ãâì", "§ ç à®¢ âì", "¯¥à¥§ à廊âì",
-  "à¥¢à â¨âì ¢ §®«®â®"
-};
-
-static const char* const WHICH_ITEM = "\v000Š ª®© ¯à¥¤¬¥â ¢ë ¦¥« ¥â¥ %s?";
-
-static const char* const WHATS_YOUR_HURRY =
-  "\v007—¥£® â®à®¯¨èìáï?\n"
-  "®¤®¦¤¨, ¯®ª  ­¥ ¢ë¡¥à¥èìáï ®âá!";
-
-static const char* const USE_ITEM_IN_COMBAT =
-  "\v007—â®¡ë ¨á¯®«ì§®¢ âì ¯à¥¤¬¥â ¢ ¡¨â¢¥, ­ ¦¬¨â¥ ­  ª­®¯ªã 'ˆá¯' ­  ¡®ª®¢®© ¯ ­¥«¨.";
-
-static const char* const NO_SPECIAL_ABILITIES = 
-  "\v005\x3""c%s\fd­¥ ¨¬¥¥â ®á®¡ëå ᢮©áâ¢!";
-
-static const char* const CANT_CAST_WHILE_ENGAGED = 
-  "\x3""c\v007‡ ª«¨­ ­¨¥ %s ­¥«ì§ï ¨á¯®«ì§®¢ âì ¢ ¡¨â¢¥!";
-
-static const char* const EQUIPPED_ALL_YOU_CAN =
-  "\x3""c\v007‚ë ­¥ ¬®¦¥â¥ ­ ¤¥âì ¡®«ìè¥ ¤¢ãå %s!";
-
-static const char* const REMOVE_X_TO_EQUIP_Y =
-  "\x3""c\v007‚ ¬ ­ã¦­® á­ïâì %sçâ®¡ë ­ ¤¥âì %s\b!";
-
-static const char* const RING = "ª®«¥æ";
-static const char* const MEDAL = "¬¥¤ «¥©";
-
-static const char* const CANNOT_REMOVE_CURSED_ITEM =
-  "\x3""c‚ë ­¥ ¬®¦¥â¥ á­ïâì ¯à®ª«ïâãî ¢¥éì!";
-
-static const char* const CANNOT_DISCARD_CURSED_ITEM =
-  "\x3""c‚ë ­¥ ¬®¦¥â¥ ¢ëª¨­ãâì ¯à®ª«ïâãî ¢¥éì!";
-
-static const char* const PERMANENTLY_DISCARD =
-  "\v000\t000\x3""l‚모­ãâì ­ ¢á¥£¤ ? %s";
-
-static const char* const BACKPACK_IS_FULL =
-  "\v005\x3""c\fd%s! ‚ è à ª ¯®«®­.";
-
-static const char* const CATEGORY_BACKPACK_IS_FULL[4] = {
-  "\v010\t000\x3""c%s! ‚ è à ª ¯®«®­.",
-  "\v010\t000\x3""c%s! ‚ è à ª ¯®«®­.",
-  "\v010\t000\x3""c%s! ‚ è à ª ¯®«®­.",
-  "\v010\t000\x3""c%s! ‚ è à ª ¯®«®­."
-};
-
-static const char* const BUY_X_FOR_Y_GOLD =
-  "\x3""l\v000\t000\fdŠã¯¨âì %s\fd §  %lu §®«®â%s?";
-
-static const char* const SELL_X_FOR_Y_GOLD =
-  "\x3""l\v000\t000\fdà®¤ âì %s\fd §  %lu §®«®â%s?";
-
-static const char *const RU_SELL_X_FOR_Y_GOLD_ENDINGS[2] = { "®©", "ëå" };
-
-static const char* const NO_NEED_OF_THIS =
-  "\v005\x3""c\fd á ­¥ ¨­â¥à¥áã¥â %s\fd!";
-
-static const char* const NOT_RECHARGABLE =
-  "\v007\x3""c\fd¥¢®§¬®¦­® ¯¥à¥§ à廊âì.\n%s";
-
-static const char* const NOT_ENCHANTABLE =
-  "\v007\t000\x3""c¥¢®§¬®¦­® § ç à®¢ âì.\n%s";
-
-static const char* const SPELL_FAILED = "‡ ª«¨­ ­¨¥ ­¥ áà ¡®â «®!";
-
-static const char* const ITEM_NOT_BROKEN = "\fdâ®â ¯à¥¤¬¥â ­¥ á«®¬ ­!";
-
-static const char* const FIX_IDENTIFY[2] = { "®ç¨­¨âì", "ޝ®§­ âì" };
-
-static const char* const FIX_IDENTIFY_GOLD =
-  "\x3""l\v000\t000%s %s\fd §  %lu §®«®â%s?";
-
-static const char* const IDENTIFY_ITEM_MSG =
-  "\fd\v000\t000\x3""cޝ®§­ âì ¯à¥¤¬¥â\x3""l\n"
-  "\n"
-  "\v012%s\fd\n"
-  "\n"
-  "%s";
-
-static const char* const ITEM_DETAILS =
-  "ˆá¯®«ì§ãîâ ª« ááë\t132:\t140%s\n"
-  "Œ®¤¨ä¨ª â®à ãà®­ \t132:\t140%s\n"
-  "”¨§¨ç¥áª¨© ãà®­\t132:\t140%s\n"
-  "“à®­ ®â ‘â¨å¨©\t132:\t140%s\n"
-  "‡ é¨â  ®â ‘â¨å¨©\t132:\t140%s\n"
-  "Š« áá § é¨âë\t132:\t140%s\n"
-  "®­ãá ᢮©á⢠\t132:\t140%s\n"
-  "Žá®¡®¥ ᢮©á⢮\t132:\t140%s";
-
-static const char* const ALL = "⇴";
-static const char* const FIELD_NONE = "¥â";
-static const char* const DAMAGE_X_TO_Y = "%d-%d";
-static const char* const ELEMENTAL_XY_DAMAGE = "%+d ãà®­  ®â %s";
-static const char* const ATTR_XY_BONUS = "%+d %s";
-static const char* const EFFECTIVE_AGAINST = "x3 ¯à®â¨¢ %s";
-
-static const char* const QUESTS_DIALOG_TEXT =
-  "\r\x2\x3""c\v021\t017\f37‚\fd¥é¨\t085\f37‡\fd ¤ ­¨ï\t153"
-  "‡\f37 \fd¬¥âª¨\t221‚¢¥àå\t255‚­¨§"
-  "\t289‚ë室";
-
-static const char* const CLOUDS_OF_XEEN_LINE = 
-  "\b \b*-- \f04Ž¡« ª  Šá¨­ \fd --";
-static const char* const DARKSIDE_OF_XEEN_LINE = 
-  "\b \b*-- \f04Darkside of Xeen\fd --";
-static const char* const SWORDS_OF_XEEN_LINE = 
-  "\b \b*-- \f04Swords of Xeen\fd --";
-
-static const char* const NO_QUEST_ITEMS =
-  "\r\x1\fd\x3""c\v000\t000à¥¤¬¥âë § ¤ ­¨©\x3""l\x2\n"
-  "\n"
-  "\x3""c¥â ¯à¥¤¬¥â®¢";
-
-static const char* const NO_CURRENT_QUESTS =
-  "\x3""c\v000\t000\n"
-  "\n"
-  "¥â § ¤ ­¨©";
-
-static const char* const NO_AUTO_NOTES = "\x3""c‡ ¬¥â®ª ­¥â";
-
-static const char* const QUEST_ITEMS_DATA =
-  "\r\x1\fd\x3""c\v000\t000à¥¤¬¥âë § ¤ ­¨©\x3""l\x2\n"
-  "\f04 * \fd%s\n"
-  "\f04 * \fd%s\n"
-  "\f04 * \fd%s\n"
-  "\f04 * \fd%s\n"
-  "\f04 * \fd%s\n"
-  "\f04 * \fd%s\n"
-  "\f04 * \fd%s\n"
-  "\f04 * \fd%s\n"
-  "\f04 * \fd%s";
-
-static const char* const CURRENT_QUESTS_DATA =
-  "\r\x1\fd\x3""c\t000\v000‡ ¤ ­¨ï\x3""l\x2\n"
-  "%s\n"
-  "\n"
-  "%s\n"
-  "\n"
-  "%s";
-
-static const char* const AUTO_NOTES_DATA =
-  "\r\x1\fd\x3""c\t000\v000‡ ¬¥âª¨\x3""l\x2\n"
-  "%s\x3""l\n"
-  "%s\x3""l\n"
-  "%s\x3""l\n"
-  "%s\x3""l\n"
-  "%s\x3""l\n"
-  "%s\x3""l\n"
-  "%s\x3""l\n"
-  "%s\x3""l\n"
-  "%s\x3""l";
-
-static const char* const REST_COMPLETE =
-  "\v000\t000à®è«® 8 ç á®¢. Žâ¤ëå § ª®­ç¥­\n"
-  "%s\n"
-  "ë«® áꥤ¥­® %d ¯¨é¨.";
-
-static const char* const PARTY_IS_STARVING = "\f07Žâàï¤ £®«®¤ ¥â!\fd";
-
-static const char* const HIT_SPELL_POINTS_RESTORED = 
-  "‡¤®à®¢ì¥ ¨ ¬ ­  ¢®ááâ ­®¢«¥­ë";
-
-static const char* const TOO_DANGEROUS_TO_REST = 
-  "‡¤¥áì ᫨誮¬ ®¯ á­® ®â¤ëå âì!";
-
-static const char* const SOME_CHARS_MAY_DIE = 
-  "Šâ®-â® ¨§ ®âà鸞 ¬®¦¥â 㬥à¥âì. ‚ë ¢áñ à ¢­® ¦¥« ¥â¥ ®â¤®å­ãâì?";
-
-static const char* const DISMISS_WHOM = "\r\t010\v005Š®£® ¢ë£­ âì?";
-
-static const char* const CANT_DISMISS_LAST_CHAR = 
-  "‚ë ­¥ ¬®¦¥â¥ ¢ë£­ âì ᢮¥£® ¯®á«¥¤­¥£® ¯¥àá®­ ¦ !";
-
-static const char* const DELETE_CHAR_WITH_ELDER_WEAPON = "\v000\t000This character has an Elder Weapon and cannot be deleted!";
-
-static const char* const REMOVE_DELETE[2] = { "‚룭 âì", "㤠«¨âì" };
-
-static const char* const REMOVE_OR_DELETE_WHICH = "\x3""l\t010\v005Š®£® %s?";
-
-static const char* const YOUR_PARTY_IS_FULL = "\v007‚ è ®âàï¤ ¯®«®­!";
-
-static const char* const HAS_SLAYER_SWORD =
-  "\v000\t000â®â ¯¥àá®­ ¦ ­¥ ¬®¦¥â ¡ëâì 㤠«ñ­, â ª ª ª ã ­¥£® Œ¥ç-㡨©æ  Šá¨­ !";
-  
-static const char* const SURE_TO_DELETE_CHAR =
-  "%s %s. ‚ë 㢥७ë, çâ® å®â¨â¥ 㤠«¨âì í⮣® £¥à®ï?";
-
-static const char* const CREATE_CHAR_DETAILS =
-  "\f04\x3""c\x2\t144\v119\f37\f04à®á®ª\t144\v149\f37‘\f04®§¤"
-  "\t144\v179\f37ESC\f04\x3""l\x1\t195\v021‘¨\f37«\f04"
-  "\t195\v045\f37ˆ\f04­â\t195\v069\f37„\f04ãå\t195\v093‘«\f37¦\f04"
-  "\t195\v116‘\f37ª\f04à\t195\v140\f37Œ\f04âª\t195\v164\f37“\f04¤ç%s";
-
-static const char* const NEW_CHAR_STATS =
-"\f04\x3""l\t017\v148 á \t055: %s\n"
-"\t017®«\t055: %s\n"
-"\t017Š« áá\t055:\n"
-"\x3""r\t215\v031%d\t215\v055%d\t215\v079%d\t215\v103%d\t215\v127%d"
-"\t215\v151%d\t215\v175%d\x3""l\t242\v020\f%2dëæ àì\t242\v031\f%2d"
-" « ¤¨­\t242\v042\f%2d‹ãç­¨ª\t242\v053\f%2dŠ«¨à¨ª\t242\v064\f%2d"
-"Œ £\t242\v075\f%2d‚®à\t242\v086\f%2d¨­¤§ï\t242\v097\f%2d"
-"‚ à¢ à\t242\v108\f%2d„à㨤\t242\v119\f%2d‘«¥¤®¯ëâ\f04\x3""c"
-"\t265\v142 ¢ëª¨\x2\x3""l\t223\v155%s\t223\v170%s%s\x1";
-
-static const char* const NAME_FOR_NEW_CHARACTER =
-  "\x3""c‚¢¥¤¨â¥ ¨¬ï ¯¥àá®­ ¦ \n\n";
-
-static const char* const SELECT_CLASS_BEFORE_SAVING =
-  "\v003\x3""c¥à¥¤ á®åà ­¥­¨¥¬ ¢ë¡¥à¨â¥ ª« áá.\x3""l";
-
-static const char* const EXCHANGE_ATTR_WITH = "®¬¥­ïâì %s á...";
-
-static const int NEW_CHAR_SKILLS[10] = { 1, 5, -1, -1, 4, 0, 0, -1, 6, 11 };
-static const int NEW_CHAR_SKILLS_OFFSET[10] = { 0, 0, 0, 5, 0, 0, 0, 0, 0, 0 };
-static const int NEW_CHAR_SKILLS_LEN[10] = { 11, 8, 0, 0, 12, 8, 8, 0, 9, 11 };
-static const int NEW_CHAR_RACE_SKILLS[10] = { 14, -1, 17, 16, -1, 0, 0, 0, 0, 0 };
-
-static const int RACE_MAGIC_RESISTENCES[5] = { 7, 5, 20, 0, 0 };
-static const int RACE_FIRE_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
-static const int RACE_ELECTRIC_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
-static const int RACE_COLD_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
-static const int RACE_ENERGY_RESISTENCES[5] = { 7, 5, 2, 5, 0 };
-static const int RACE_POISON_RESISTENCES[5] = { 7, 0, 2, 20, 0 };
-static const int NEW_CHARACTER_SPELLS[10][4] = {
-  { -1, -1, -1, -1 },
-  { 21, -1, -1, -1 },
-  { 22, -1, -1, -1 },
-  { 21, 1, 14, -1 },
-  { 22, 0, 25, -1 },
-  { -1, -1, -1, -1 },
-  { -1, -1, -1, -1 },
-  { -1, -1, -1, -1 },
-  { 20, 1, 11, 23 },
-  { 20, 1, -1, -1 }
-};
-
-static const char* const COMBAT_DETAILS = "\r\f00\x3""c\v000\t000\x2%s%s%s\x1";
-
-static const char* NOT_ENOUGH_TO_CAST =
-  "\x3""c\v000¥¤®áâ â®ç­® %s, çâ®¡ë § ª«¨­ âì %s";
-
-static const char* SPELL_CAST_COMPONENTS[2] = { "®çª®¢ ¬ £¨¨", " «¬ §®¢" };
-
-static const char* const CAST_SPELL_DETAILS =
-  "\r\x2\x3""c\v122\t013\f37‡\fd ª«\t040\f37\fd®¢"
-  "\t067ESC\x1\t000\v000\x3""c‡ ª«¨­ ­¨¥\n"
-  "\n"
-  "%s\x3""c\n"
-  "\n"
-  "     ƒ®â®¢®¥:\x3""c\n"
-  "\n"
-  "\f09%s\fd\x2\x3""l\n"
-  "\v082–¥­ \x3""r\t000%u/%u\x3""l\n"
-  "’¥ª ŽŒ\x3""r\t000%u\x1";
-
-static const char* const PARTY_FOUND =
-  "\x3""c ©¤¥­®:\n"
-  "\n"
-  "\x3""r\t000%lu ‡®«\n"
-  "%lu €«¬§";
-
-static const char* const BACKPACKS_FULL_PRESS_KEY =
-  "\v007\f12‚­¨¬ ­¨¥! îª§ ª¨ ¯¥à¥¯®«­¥­ë!\fd\n"
-  " ¦¬¨â¥ ª« ¢¨èã";
-
-static const char* const HIT_A_KEY =
-  "\x3""l\v120\t000\x4""077\x3""c\f37. ª« ¢¨èã\fd";
-
-static const char* const GIVE_TREASURE_FORMATTING =
-  "\x3l\v060\t000\x4""077\n"
-  "\x4""077\n"
-  "\x4""077\n"
-  "\x4""077\n"
-  "\x4""077\n"
-  "\x4""077";
-
-static const char* const X_FOUND_Y = "\v060\t000\x3""c%s ­ è%s: %s";
-
-static const char* const ON_WHO = "\x3""c\v009Š®£®?";
-
-static const char* const WHICH_ELEMENT1 =
-  "\r\x3""c\x1Š ª ï ‘â¨å¨ï?\x2\v034\t014\f15Ž\fd£®­ì\t044"
-  "\f15ƒ\fd஬\t074\f15•\fd®«®¤\t104\f15Ÿ\fd¤\x1";
-
-static const char* const WHICH_ELEMENT2 =
-  "\r\x3""cŠ ª ï ‘â¨å¨ï?\x2\v034\t014\f15Ž\fd£®­ì\t044"
-  "\f15ƒ\fd஬\t074\f15•\fd®«®¤\t104\f15Ÿ\fd¤\x1";
-
-static const char* const DETECT_MONSTERS = "\x3""c®¨áª ¬®­áâ஢";
-
-static const char* const LLOYDS_BEACON =
-  "\r\x3""c\v000\t000\x1Œ ïª ‹«®©¤ \n"
-  "\n"
-  "®á«¥¤­¥¥ ¬¥áâ®\n"
-  "\n"
-  "%s\x3""l\n"
-  "x = %d\x3""r\t000y = %d\x3""c\x2\v122\t021\f15“\fdáâ ­\t060\f15‚\fd¥à­\x1";
-
-static const char* const HOW_MANY_SQUARES =
-  "\x3""c’¥«¥¯®àâ\n‘ª®«ìª® ª«¥â®ª ­  %s (1-9)\n";
-
-static const char* const TOWN_PORTAL =
-  "\x3""cƒ®à®¤áª®© ¯®àâ «\x3""l\n"
-  "\n"
-  "\t0101. %s\n"
-  "\t0102. %s\n"
-  "\t0103. %s\n"
-  "\t0104. %s\n"
-  "\t0105. %s\x3""c\n"
-  "\n"
-  "‚ ª ª®© £®à®¤ (1-5)\n"
-  "\n";
-
-static const char* const TOWN_PORTAL_SWORDS =
-"\x3""cTown Portal\x3l\n"
-"\n"
-"\t0101. %s\n"
-"\t0102. %s\n"
-"\t0103. %s\x3""c\n"
-"\n"
-"To which Town (1-3)\n"
-"\n";
-
-static const int TOWN_MAP_NUMBERS[3][5] = {
-  { 28, 29, 30, 31, 32 }, { 29, 31, 33, 35, 37 }, { 53, 92, 63, 0, 0 }
-};
-
-static const char* const MONSTER_DETAILS =
-"\x3l\n"
-"%s\x3""c\t100%s\t140%u\t180%u\x3r\t000%s";
-
-static const char* const MONSTER_SPECIAL_ATTACKS[23] = {
-  "¥â", "Œ £¨ï", "Ž£­ï", "ƒà®¬ ", "•®«®¤ ", "Žâà ¢«¥­¨¥", "­¥à£¨¨", 
-  "®«¥§­ì", "¥§ã¬¨¥", "‘®­", "àª«à¤¬", "‚«î¡«", "Žáã臤®à", "à®ª«ï⨥", 
-  " à «¨ç", "¥áá®§­", "‘¬ï⥭¨¥", "‹®¬à®­", "‘« ¡®áâì", "“­¨ç⮦", 
-  "‚®§à áâ+5", "Œ¥àâ¢", "Š ¬¥­ì"
-};
-
-static const char* const IDENTIFY_MONSTERS =
-  "Œ®­áâà\x3""c\t155އ\t195Ї\t233#€â ª\x3""r\t000Žá®¡®¥%s%s%s";
-
-static const char* const EVENT_SAMPLES[6] = {
-  "ahh.voc", "whereto.voc", "gulp.voc", "null.voc", "scream.voc", "laff1.voc"
-};
-
-static const char* const MOONS_NOT_ALIGNED =
-  "\x3""c\v012\t000®ª  «ã­ë ­¥ ¢áâ ­ãâ ¢ àï¤, ¢ë ­¥ ᬮ¦¥â¥ ¯¥à¥©â¨ ­  ’ñ¬­ãî áâ®à®­ã Šá¨­ ";
-
-static const char* const AWARDS_FOR =
-  "\r\x1\fd\x3""c\v000\t000%s %s:  £à ¤ë \x3""l\x2\n"
-  "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\x1";
-
-static const char* const AWARDS_TEXT =
-  "\r\x2\x3""c\v021\t221‚¢¥àå\t255‚­¨§\t289‚ë室";
-
-static const char* const NO_AWARDS = "\x3""c“ ¯¥àá®­ ¦  ­¥â ­ £à ¤";
-
-
-static const char* const WARZONE_BATTLE_MASTER = "€à¥­ \n\t125Œ áâ¥à ¡¨â¢ë";
-
-static const char* const WARZONE_MAXED = 
-  "—â®!  ޝïâì ¢ë?  ¥ ¯à¨áâ ¢ ©â¥ ª ⥬, ªâ® ­¥ ¬®¦¥â ¤ âì ᤠç¨!";
-
-static const char* const WARZONE_LEVEL = "Š ª®© ã஢¥­ì ¬®­áâ஢? (1-10)\n";
-
-static const char* const WARZONE_HOW_MANY = "‘ª®«ìª® ¬®­áâ஢? (1-20)\n";
-
-static const char* const PICKS_THE_LOCK =
-  "\x3""c\v010%s ¢§«®¬ «%s § ¬®ª!\n ¦¬¨â¥ ª« ¢¨èã.";
-
-static const char* const UNABLE_TO_PICK_LOCK =
-  "\x3""c\v010%s ­¥ ᬮ£%s ¢§«®¬ âì § ¬®ª!\n ¦¬¨â¥ ª« ¢¨èã.";
-
-static const char* const CONTROL_PANEL_TEXT =
-  "\x1\f00\x3""c\v000\t000 ­¥«ì ã¯à ¢«¥­¨ï\x3""r"
-  "\v022\t045‡¢\f06ã\fdª:\t124\f06‘\fd®åà:"
-  "\v041\t045\f06Œ\fdã§.:\t124‘\f06®\fdåà:\v060\t045\f06‡\fd £à:"
-  "\t124\f06‚\fdë室"
-  "\v080\t084\f06\fd®¬®éì %s\t137Œ £ \t000\x1";
-
-static const char* const CONTROL_PANEL_BUTTONS =
-"\x3""c\f11"
-"\v022\t062load\t141%s"
-"\v041\t062save\t141%s"
-"\v060\t062exit"
-"\v079\t102Help\fd";
-
-static const char* const ON = "\f15¢ª«\f11";
-
-static const char* const OFF = "\f32¢ëª\f11";
-
-static const char* const CONFIRM_QUIT = "‚ë 㢥७ë, çâ® å®â¨â¥ ¢ë©â¨?";
-
-static const char* const MR_WIZARD =
-  "‚ë â®ç­® å®â¨â¥ ¢®á¯®«ì§®¢ âìáï ¯®¬®éìî Œà. Œ £ ?";
-
-static const char* const NO_LOADING_IN_COMBAT =
-  "¨ª ª¨å § £àã§®ª ¢® ¢à¥¬ï ¡¨â¢ë!";
-
-static const char* const NO_SAVING_IN_COMBAT =
-  "¨ª ª¨å á®åà ­¥­¨© ¢® ¢à¥¬ï ¡¨â¢ë!";
-
-static const char* const QUICK_FIGHT_TEXT =
-  "\r\fd\x3""c\v000\t000ëáâ஥ ¤¥©á⢨¥\n\n"
-  "%s\x3""l\n\n"
-  "’¥ªã饥\x3""r\n"
-  "\t000%s\x2\x3""c\v122\t019\f37‘\f04«¥¤\t055‚ë室\x1";
-
-static const char* const QUICK_FIGHT_OPTIONS[4] = { 
-  "€â ª ", "‡ ª«¨­ ­¨¥", "«®ª", "¥£á⢮" 
-};
-
-static const char* const WORLD_END_TEXT[9] = {
-  "\n\n\n\n\n\n\n"
-  "Congratulations Adventurers!\n\n"
-  "Let the unification ceremony begin!",
-  "And so the call went out to the people throughout the lands of Xeen"
-  " that the prophecy was nearing completion.",
-  "They came in great numbers to witness the momentous occasion.",
-  "\v026The Dragon Pharoah presided over the ceremony.",
-  "\v026Queen Kalindra presented the Cube of Power.",
-  "\v026Prince Roland presented the Xeen Sceptre.",
-  "\v026Together, they placed the Cube of Power...",
-  "\v026and the Sceptre, onto the Altar of Joining.",
-  "With the prophecy complete, the two sides of Xeen were united as one",
-};
-
-static const char* const WORLD_CONGRATULATIONS =
-  "\x3""cCongratulations\n\n"
-  "Your Final Score is:\n\n"
-  "%010lu\n"
-  "\x3l\n"
-  "Please send this score to the Ancient's Headquarters where "
-  "you'll be added to the Hall of Legends!\n\n"
-  "Ancient's Headquarters\n"
-  "New World Computing, Inc.\n"
-  "P.O. Box 4302\n"
-  "Hollywood, CA 90078";
-
-static const char* const WORLD_CONGRATULATIONS2 =
-  "\n\n\n\n\n\n"
-  "But wait... there's more!\n"
-  "\n\n"
-  "Include the message\n"
-  "\"%s\"\n"
-  "with your final score and receive a special bonus.";
-  static const char* const CLOUDS_CONGRATULATIONS1 =
-  "\f23\x3l"
-  "\v000\t000Please send this score to the Ancient's Headquarters "
-  "where you'll be added to the Hall of Legends!\f33\x3""c"
-  "\v070\t000Press a Key";
-
-static const char* const CLOUDS_CONGRATULATIONS2 =
-  "\f23\x3l"
-  "\v000\t000Ancient's Headquarters\n"
-  "New World Computing, Inc.\n"
-  "P.O. Box 4302\n"
-  "Hollywood, CA 90078-4302\f33\x3""c"
-  "\v070\t000Press a Key";
-
-static const char* const GOOBER[3] = {
-  "", "I am a Goober!", "I am a Super Goober!"
-};
-
-static const char* const MUSIC_FILES1[5] = {
-  "outdoors.m", "town.m", "cavern.m", "dungeon.m", "castle.m"
-};
-
-static const char* const MUSIC_FILES2[6][7] = {
-  { "outday1.m", "outday2.m", "outday4.m", "outnght1.m",
-  "outnght2.m", "outnght4.m", "daydesrt.m" },
-  { "townday1.m", "twnwlk.m", "newbrigh.m", "twnnitea.m",
-  "twnniteb.m", "twnwlk.m", "townday1.m" },
-  { "cavern1.m", "cavern2.m", "cavern3a.m", "cavern1.m",
-  "cavern2.m", "cavern3a.m", "cavern1.m" },
-  { "dngon1.m", "dngon2.m", "dngon3.m", "dngon1.m",
-  "dngon2.m", "dngon3.m", "dngon1.m" },
-  { "cstl1rev.m", "cstl2rev.m", "cstl3rev.m", "cstl1rev.m",
-  "cstl2rev.m", "cstl3rev.m", "cstl1rev.m" },
-  { "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m" }
-};
-
-static const char* const DIFFICULTY_TEXT =
-  "\v000\t000\x3""c‚ë¡¥à¨â¥ ¨£à®¢®© ०¨¬";
-
-static const char* const SAVE_OFF_LIMITS =
-"\x3""c\v002\t000®£¨ ‚®ááâ ­®¢«¥­¨ï ˆ£à áç¨â îâ íâ® ¬¥áâ® § ¯à¥â­ë¬!\n"
-"“¢ë, §¤¥áì ­¥«ì§ï á®åà ­ïâìáï";
-
-static const char* const CLOUDS_INTRO1 = 
-  "\f00\v082\t040\x3"
-  "cKing Burlock\v190\t040Peasants\v082\t247"
-  "Lord Xeen\v190\t258Xeen's Pet\v179\t150Crodo";
-
-static const char* const DARKSIDE_ENDING1 = 
-  "\n\x3" "cCongratulations\n"
-  "\n"
-  "Your Final Score is:\n"
-  "\n"
-  "%010lu\n"
-  "\x3" "l\n"
-  "Please send this score to the Ancient's Headquarters "
-  "where you'll be added to the Hall of Legends!\n"
-  "\n"
-  "Ancient's Headquarters\n"
-  "New World Computing, Inc.\n"
-  "P.O. Box 4302\n"
-  "Hollywood, CA 90078";
-
-static const char* const DARKSIDE_ENDING2 = "\n"
-  "Adventurers,\n"
-  "\n"
-  "I will save your game in Castleview.\n"
-  "\n"
-  "The World of Xeen still needs you!\n"
-  "\n"
-  "Load your game afterwards and come visit me in the "
-  "Great Pyramid for further instructions";
-
-static const char* const PHAROAH_ENDING_TEXT1 = 
-  "\fd\v001\t001%s\x3" "c\t000\v180Press a Key!\x3" "l";
-static const char* const PHAROAH_ENDING_TEXT2 = 
-  "\f04\v000\t000%s\x3" "c\t000\v180Press a Key!\x3" "l\fd";
-
-
-void writeConstants(CCArchive& cc) {
-  Common::MemFile file;
-  file.syncString(CLOUDS_CREDITS);
-  file.syncString(DARK_SIDE_CREDITS);
-  file.syncString(SWORDS_CREDITS1);
-  file.syncString(SWORDS_CREDITS2);
-  file.syncString(OPTIONS_MENU);
-  file.syncStrings(GAME_NAMES, 3);
-  file.syncString(THE_PARTY_NEEDS_REST);
-  file.syncString(WHO_WILL);
-  file.syncString(HOW_MUCH);
-  file.syncString(WHATS_THE_PASSWORD);
-  file.syncString(PASSWORD_INCORRECT);
-  file.syncString(IN_NO_CONDITION);
-  file.syncString(NOTHING_HERE);
-  file.syncStrings(TERRAIN_TYPES, 6);
-  file.syncStrings(OUTDOORS_WALL_TYPES, 16);
-  file.syncStrings(SURFACE_NAMES, 16);
-  file.syncStrings(WHO_ACTIONS, 32);
-  file.syncStrings(WHO_WILL_ACTIONS, 4);
-  file.syncBytes2D((const byte*)SYMBOLS, 20, 64);
-  file.syncBytes2D((const byte*)TEXT_COLORS, 40, 4);
-  file.syncBytes2D((const byte*)TEXT_COLORS_STARTUP, 40, 4);
-  file.syncStrings(DIRECTION_TEXT_UPPER, 4);
-  file.syncStrings(DIRECTION_TEXT, 4);
-  file.syncStrings(RACE_NAMES, 5);
-  file.syncNumbers(RACE_HP_BONUSES, 5);
-  file.syncNumbers2D((const int*)RACE_SP_BONUSES, 5, 2);
-  file.syncStrings(CLASS_NAMES, 11);
-  file.syncNumbers(CLASS_EXP_LEVELS, 10);
-  file.syncStrings(ALIGNMENT_NAMES, 3);
-  file.syncStrings(SEX_NAMES, 2);
-  file.syncStrings(SKILL_NAMES, 18);
-  file.syncStrings(CONDITION_NAMES, 17);
-  file.syncNumbers(CONDITION_COLORS, 17);
-  file.syncString(GOOD);
-  file.syncString(BLESSED);
-  file.syncString(POWER_SHIELD);
-  file.syncString(HOLY_BONUS);
-  file.syncString(HEROISM);
-  file.syncString(IN_PARTY);
-  file.syncString(PARTY_DETAILS);
-  file.syncString(PARTY_DIALOG_TEXT);
-  file.syncNumbers(FACE_CONDITION_FRAMES, 17);
-  file.syncNumbers(CHAR_FACES_X, 6);
-  file.syncNumbers(HP_BARS_X, 6);
-  file.syncString(NO_ONE_TO_ADVENTURE_WITH);
-  file.syncBytes2D((const byte*)DARKNESS_XLAT, 3, 256);
-  file.syncString(YOUR_ROSTER_IS_FULL);
-  file.syncString(PLEASE_WAIT);
-  file.syncString(OOPS);
-  file.syncNumbers2D((const int*)SCREEN_POSITIONING_X, 4, 48);
-  file.syncNumbers2D((const int*)SCREEN_POSITIONING_Y, 4, 48);
-  file.syncNumbers(MONSTER_GRID_BITMASK, 12);
-  file.syncNumbers2D((const int*)INDOOR_OBJECT_X, 2, 12);
-  file.syncNumbers2D((const int*)MAP_OBJECT_Y, 2, 12);
-  file.syncNumbers(INDOOR_MONSTERS_Y, 4);
-  file.syncNumbers2D((const int*)OUTDOOR_OBJECT_X, 2, 12);
-  file.syncNumbers(OUTDOOR_MONSTER_INDEXES, 26);
-  file.syncNumbers(OUTDOOR_MONSTERS_Y, 26);
-  file.syncNumbers2D((const int*)DIRECTION_ANIM_POSITIONS, 4, 4);
-  file.syncBytes2D((const byte*)WALL_SHIFTS, 4, 48);
-  file.syncNumbers(DRAW_NUMBERS, 25);
-  file.syncNumbers2D((const int*)DRAW_FRAMES, 25, 2);
-  file.syncNumbers(COMBAT_FLOAT_X, 8);
-  file.syncNumbers(COMBAT_FLOAT_Y, 8);
-  file.syncNumbers2D((const int*)MONSTER_EFFECT_FLAGS, 15, 8);
-  file.syncNumbers2D((const int*)SPELLS_ALLOWED, 3, 40);
-  file.syncNumbers(BASE_HP_BY_CLASS, 10);
-  file.syncNumbers(AGE_RANGES, 10);
-  file.syncNumbers2D((const int*)AGE_RANGES_ADJUST, 2, 10);
-  file.syncNumbers(STAT_VALUES, 24);
-  file.syncNumbers(STAT_BONUSES, 24);
-  file.syncNumbers(ELEMENTAL_CATEGORIES, 6);
-  file.syncNumbers(ATTRIBUTE_CATEGORIES, 10);
-  file.syncNumbers(ATTRIBUTE_BONUSES, 72);
-  file.syncNumbers(ELEMENTAL_RESISTENCES, 37);
-  file.syncNumbers(ELEMENTAL_DAMAGE, 37);
-  file.syncNumbers(WEAPON_DAMAGE_BASE, 35);
-  file.syncNumbers(WEAPON_DAMAGE_MULTIPLIER, 35);
-  file.syncNumbers(METAL_DAMAGE, 22);
-  file.syncNumbers(METAL_DAMAGE_PERCENT, 22);
-  file.syncNumbers(METAL_LAC, 22);
-  file.syncNumbers(ARMOR_STRENGTHS, 14);
-  file.syncNumbers(MAKE_ITEM_ARR1, 6);
-  file.syncNumbers3D((const int*)MAKE_ITEM_ARR2, 6, 7, 2);
-  file.syncNumbers3D((const int*)MAKE_ITEM_ARR3, 10, 7, 2);
-  file.syncNumbers3D((const int*)MAKE_ITEM_ARR4, 2, 7, 2);
-  file.syncNumbers2D((const int*)MAKE_ITEM_ARR5, 8, 2);
-  file.syncNumbers(OUTDOOR_DRAWSTRUCT_INDEXES, 44);
-  file.syncNumbers2D((const int*)TOWN_MAXES, 2, 11);
-  file.syncStrings2D((const char* const*)TOWN_ACTION_MUSIC, 2, 7);
-  file.syncStrings(TOWN_ACTION_SHAPES, 7);
-  file.syncNumbers2D((const int*)TOWN_ACTION_FILES, 2, 7);
-  file.syncString(BANK_TEXT);
-  file.syncString(BLACKSMITH_TEXT);
-  file.syncString(GUILD_NOT_MEMBER_TEXT);
-  file.syncString(GUILD_TEXT);
-  file.syncString(TAVERN_TEXT);
-  file.syncString(GOOD_STUFF);
-  file.syncString(HAVE_A_DRINK);
-  file.syncString(YOURE_DRUNK);
-  file.syncNumbers4D((const int*)TAVERN_EXIT_LIST, 2, 6, 5, 2);
-  file.syncString(FOOD_AND_DRINK);
-  file.syncString(TEMPLE_TEXT);
-  file.syncString(EXPERIENCE_FOR_LEVEL);
-  file.syncString(TRAINING_LEARNED_ALL);
-  file.syncString(ELIGIBLE_FOR_LEVEL);
-  file.syncString(TRAINING_TEXT);
-  file.syncString(GOLD_GEMS);
-  file.syncString(GOLD_GEMS_2);
-  file.syncStrings(DEPOSIT_WITHDRAWL, 2);
-  file.syncString(NOT_ENOUGH_X_IN_THE_Y);
-  file.syncString(NO_X_IN_THE_Y);
-  file.syncStrings(STAT_NAMES, 16);
-  file.syncStrings(CONSUMABLE_NAMES, 4);
-  file.syncStrings(WHERE_NAMES, 2);
-  file.syncString(AMOUNT);
-  file.syncString(FOOD_PACKS_FULL);
-  file.syncString(BUY_SPELLS);
-  file.syncString(GUILD_OPTIONS);
-  file.syncNumbers((const int*)MISC_SPELL_INDEX, 74);
-  file.syncNumbers((const int*)SPELL_COSTS, 77);
-  file.syncNumbers2D((const int*)CLOUDS_GUILD_SPELLS, 5, 20);
-  file.syncNumbers2D((const int*)DARK_SPELL_OFFSETS, 3, 39);
-  file.syncNumbers2D((const int*)DARK_SPELL_RANGES, 12, 2);
-  file.syncNumbers2D((const int*)SWORDS_SPELL_RANGES, 12, 2);
-  file.syncNumbers((const int*)SPELL_GEM_COST, 77);
-  file.syncString(NOT_A_SPELL_CASTER);
-  file.syncString(SPELLS_LEARNED_ALL);
-  file.syncString(SPELLS_FOR);
-  file.syncString(SPELL_LINES_0_TO_9);
-  file.syncString(SPELLS_DIALOG_SPELLS);
-  file.syncString(SPELL_PTS);
-  file.syncString(GOLD);
-  file.syncString(SPELL_INFO);
-  file.syncString(SPELL_PURCHASE);
-  file.syncString(MAP_TEXT);
-  file.syncString(LIGHT_COUNT_TEXT);
-  file.syncString(FIRE_RESISTENCE_TEXT);
-  file.syncString(ELECRICITY_RESISTENCE_TEXT);
-  file.syncString(COLD_RESISTENCE_TEXT);
-  file.syncString(POISON_RESISTENCE_TEXT);
-  file.syncString(CLAIRVOYANCE_TEXT);
-  file.syncString(LEVITATE_TEXT);
-  file.syncString(WALK_ON_WATER_TEXT);
-  file.syncString(GAME_INFORMATION);
-  file.syncString(WORLD_GAME_TEXT);
-  file.syncString(DARKSIDE_GAME_TEXT);
-  file.syncString(CLOUDS_GAME_TEXT);
-  file.syncString(SWORDS_GAME_TEXT);
-  file.syncStrings(WEEK_DAY_STRINGS, 10);
-  file.syncString(CHARACTER_DETAILS);
-  file.syncStrings(RU_DAYS, 3);
-  file.syncString(PARTY_GOLD);
-  file.syncString(PLUS_14);
-  file.syncString(CHARACTER_TEMPLATE);
-  file.syncString(EXCHANGING_IN_COMBAT);
-  file.syncString(CURRENT_MAXIMUM_RATING_TEXT);
-  file.syncString(CURRENT_MAXIMUM_TEXT);
-  file.syncStrings(RATING_TEXT, 24);
-  file.syncString(AGE_TEXT);
-  file.syncString(LEVEL_TEXT);
-  file.syncString(RESISTENCES_TEXT);
-  file.syncString(NONE);
-  file.syncString(EXPERIENCE_TEXT);
-  file.syncString(ELIGIBLE);
-  file.syncString(IN_PARTY_IN_BANK);
-  file.syncString(FOOD_TEXT);
-  file.syncString(EXCHANGE_WITH_WHOM);
-  file.syncString(QUICK_REF_LINE);
-  file.syncString(QUICK_REFERENCE);
-  file.syncNumbers2D((const int*)BLACKSMITH_MAP_IDS, 2, 4);
-  file.syncString(ITEMS_DIALOG_TEXT1);
-  file.syncString(ITEMS_DIALOG_TEXT2);
-  file.syncString(ITEMS_DIALOG_LINE1);
-  file.syncString(ITEMS_DIALOG_LINE2);
-  file.syncString(BTN_BUY);
-  file.syncString(BTN_SELL);
-  file.syncString(BTN_IDENTIFY);
-  file.syncString(BTN_FIX);
-  file.syncString(BTN_USE);
-  file.syncString(BTN_EQUIP);
-  file.syncString(BTN_REMOVE);
-  file.syncString(BTN_DISCARD);
-  file.syncString(BTN_QUEST);
-  file.syncString(BTN_ENCHANT);
-  file.syncString(BTN_RECHARGE);
-  file.syncString(BTN_GOLD);
-  file.syncString(ITEM_BROKEN);
-  file.syncString(ITEM_CURSED);
-  file.syncString(ITEM_OF);
-  file.syncStrings(BONUS_NAMES, 7);
-  file.syncStrings(WEAPON_NAMES, 41);
-  file.syncStrings(ARMOR_NAMES, 14);
-  file.syncStrings(ACCESSORY_NAMES, 11);
-  file.syncStrings(MISC_NAMES, 22);
-  file.syncStrings(SPECIAL_NAMES, 74);
-  file.syncStrings(ELEMENTAL_NAMES, 6);
-  file.syncStrings(ATTRIBUTE_NAMES, 10);
-  file.syncStrings(EFFECTIVENESS_NAMES, 7);
-  file.syncStrings(QUEST_ITEM_NAMES, 85);
-  file.syncStrings(QUEST_ITEM_NAMES_SWORDS, 51);
-  file.syncNumbers((const int*)WEAPON_BASE_COSTS, 35);
-  file.syncNumbers((const int*)ARMOR_BASE_COSTS, 14);
-  file.syncNumbers((const int*)ACCESSORY_BASE_COSTS, 11);
-  file.syncNumbers((const int*)MISC_MATERIAL_COSTS, 22);
-  file.syncNumbers((const int*)MISC_BASE_COSTS, 76);
-  file.syncNumbers((const int*)METAL_BASE_MULTIPLIERS, 22);
-  file.syncNumbers((const int*)ITEM_SKILL_DIVISORS, 4);
-  file.syncNumbers((const int*)RESTRICTION_OFFSETS, 4);
-  file.syncNumbers((const int*)ITEM_RESTRICTIONS, 86);
-  file.syncString(NOT_PROFICIENT);
-  file.syncString(NO_ITEMS_AVAILABLE);
-  file.syncStrings(CATEGORY_NAMES, 4);
-  file.syncString(X_FOR_THE_Y);
-  file.syncString(X_FOR_Y);
-  file.syncString(X_FOR_Y_GOLD);
-  file.syncString(FMT_CHARGES);
-  file.syncString(AVAILABLE_GOLD_COST);
-  file.syncString(CHARGES);
-  file.syncString(COST);
-  file.syncStrings(ITEM_ACTIONS, 7);
-  file.syncString(WHICH_ITEM);
-  file.syncString(WHATS_YOUR_HURRY);
-  file.syncString(USE_ITEM_IN_COMBAT);
-  file.syncString(NO_SPECIAL_ABILITIES);
-  file.syncString(CANT_CAST_WHILE_ENGAGED);
-  file.syncString(EQUIPPED_ALL_YOU_CAN);
-  file.syncString(REMOVE_X_TO_EQUIP_Y);
-  file.syncString(RING);
-  file.syncString(MEDAL);
-  file.syncString(CANNOT_REMOVE_CURSED_ITEM);
-  file.syncString(CANNOT_DISCARD_CURSED_ITEM);
-  file.syncString(PERMANENTLY_DISCARD);
-  file.syncString(BACKPACK_IS_FULL);
-  file.syncStrings(CATEGORY_BACKPACK_IS_FULL, 4);
-  file.syncString(BUY_X_FOR_Y_GOLD);
-  file.syncString(SELL_X_FOR_Y_GOLD);
-  file.syncStrings(RU_SELL_X_FOR_Y_GOLD_ENDINGS, 2);
-  file.syncString(NO_NEED_OF_THIS);
-  file.syncString(NOT_RECHARGABLE);
-  file.syncString(SPELL_FAILED);
-  file.syncString(NOT_ENCHANTABLE);
-  file.syncString(ITEM_NOT_BROKEN);
-  file.syncStrings(FIX_IDENTIFY, 2);
-  file.syncString(FIX_IDENTIFY_GOLD);
-  file.syncString(IDENTIFY_ITEM_MSG);
-  file.syncString(ITEM_DETAILS);
-  file.syncString(ALL);
-  file.syncString(FIELD_NONE);
-  file.syncString(DAMAGE_X_TO_Y);
-  file.syncString(ELEMENTAL_XY_DAMAGE);
-  file.syncString(ATTR_XY_BONUS);
-  file.syncString(EFFECTIVE_AGAINST);
-  file.syncString(QUESTS_DIALOG_TEXT);
-  file.syncString(CLOUDS_OF_XEEN_LINE);
-  file.syncString(DARKSIDE_OF_XEEN_LINE);
-  file.syncString(SWORDS_OF_XEEN_LINE);
-  file.syncString(NO_QUEST_ITEMS);
-  file.syncString(NO_CURRENT_QUESTS);
-  file.syncString(NO_AUTO_NOTES);
-  file.syncString(QUEST_ITEMS_DATA);
-  file.syncString(CURRENT_QUESTS_DATA);
-  file.syncString(AUTO_NOTES_DATA);
-  file.syncString(REST_COMPLETE);
-  file.syncString(PARTY_IS_STARVING);
-  file.syncString(HIT_SPELL_POINTS_RESTORED);
-  file.syncString(TOO_DANGEROUS_TO_REST);
-  file.syncString(SOME_CHARS_MAY_DIE);
-  file.syncString(DISMISS_WHOM);
-  file.syncString(CANT_DISMISS_LAST_CHAR);
-  file.syncString(DELETE_CHAR_WITH_ELDER_WEAPON);
-  file.syncStrings(REMOVE_DELETE, 2);
-  file.syncString(REMOVE_OR_DELETE_WHICH);
-  file.syncString(YOUR_PARTY_IS_FULL);
-  file.syncString(HAS_SLAYER_SWORD);
-  file.syncString(SURE_TO_DELETE_CHAR);
-  file.syncString(CREATE_CHAR_DETAILS);
-  file.syncString(NEW_CHAR_STATS);
-  file.syncString(NAME_FOR_NEW_CHARACTER);
-  file.syncString(SELECT_CLASS_BEFORE_SAVING);
-  file.syncString(EXCHANGE_ATTR_WITH);
-  file.syncNumbers((const int*)NEW_CHAR_SKILLS, 10);
-  file.syncNumbers((const int*)NEW_CHAR_SKILLS_OFFSET, 10);
-  file.syncNumbers((const int*)NEW_CHAR_SKILLS_LEN, 10);
-  file.syncNumbers((const int*)NEW_CHAR_RACE_SKILLS, 10);
-  file.syncNumbers((const int*)RACE_MAGIC_RESISTENCES, 5);
-  file.syncNumbers((const int*)RACE_FIRE_RESISTENCES, 5);
-  file.syncNumbers((const int*)RACE_ELECTRIC_RESISTENCES, 5);
-  file.syncNumbers((const int*)RACE_COLD_RESISTENCES, 5);
-  file.syncNumbers((const int*)RACE_ENERGY_RESISTENCES, 5);
-  file.syncNumbers((const int*)RACE_POISON_RESISTENCES, 5);
-  file.syncNumbers2D((const int*)NEW_CHARACTER_SPELLS, 10, 4);
-  file.syncString(COMBAT_DETAILS);
-  file.syncString(NOT_ENOUGH_TO_CAST);
-  file.syncStrings(SPELL_CAST_COMPONENTS, 2);
-  file.syncString(CAST_SPELL_DETAILS);
-  file.syncString(PARTY_FOUND);
-  file.syncString(BACKPACKS_FULL_PRESS_KEY);
-  file.syncString(HIT_A_KEY);
-  file.syncString(GIVE_TREASURE_FORMATTING);
-  file.syncString(X_FOUND_Y);
-  file.syncString(ON_WHO);
-  file.syncString(WHICH_ELEMENT1);
-  file.syncString(WHICH_ELEMENT2);
-  file.syncString(DETECT_MONSTERS);
-  file.syncString(LLOYDS_BEACON);
-  file.syncString(HOW_MANY_SQUARES);
-  file.syncString(TOWN_PORTAL);
-  file.syncString(TOWN_PORTAL_SWORDS);
-  file.syncNumbers2D((const int*)TOWN_MAP_NUMBERS, 3, 5);
-  file.syncString(MONSTER_DETAILS);
-  file.syncStrings(MONSTER_SPECIAL_ATTACKS, 23);
-  file.syncString(IDENTIFY_MONSTERS);
-  file.syncStrings(EVENT_SAMPLES, 6);
-  file.syncString(MOONS_NOT_ALIGNED);
-  file.syncString(AWARDS_FOR);
-  file.syncString(AWARDS_TEXT);
-  file.syncString(NO_AWARDS);
-  file.syncString(WARZONE_BATTLE_MASTER);
-  file.syncString(WARZONE_MAXED);
-  file.syncString(WARZONE_LEVEL);
-  file.syncString(WARZONE_HOW_MANY);
-  file.syncString(PICKS_THE_LOCK);
-  file.syncString(UNABLE_TO_PICK_LOCK);
-  file.syncString(CONTROL_PANEL_TEXT);
-  file.syncString(CONTROL_PANEL_BUTTONS);
-  file.syncString(ON);
-  file.syncString(OFF);
-  file.syncString(CONFIRM_QUIT);
-  file.syncString(MR_WIZARD);
-  file.syncString(NO_LOADING_IN_COMBAT);
-  file.syncString(NO_SAVING_IN_COMBAT);
-  file.syncString(QUICK_FIGHT_TEXT);
-  file.syncStrings(QUICK_FIGHT_OPTIONS, 4);
-  file.syncStrings(WORLD_END_TEXT, 9);
-  file.syncString(WORLD_CONGRATULATIONS);
-  file.syncString(WORLD_CONGRATULATIONS2);
-  file.syncString(CLOUDS_CONGRATULATIONS1);
-  file.syncString(CLOUDS_CONGRATULATIONS2);
-  file.syncStrings(GOOBER, 3);
-  file.syncStrings(MUSIC_FILES1, 5);
-  file.syncStrings2D((const char* const*)MUSIC_FILES2, 6, 7);
-  file.syncString(DIFFICULTY_TEXT);
-  file.syncString(SAVE_OFF_LIMITS);
-  file.syncString(CLOUDS_INTRO1);
-  file.syncString(DARKSIDE_ENDING1);
-  file.syncString(DARKSIDE_ENDING2);
-  file.syncString(PHAROAH_ENDING_TEXT1);
-  file.syncString(PHAROAH_ENDING_TEXT2);
-
-  cc.add("CONSTANTS", file);
+void writeConstants(CCArchive &cc) {
+	EN eng;
+	eng.writeConstants(Common::String::format("_%i", Common::Language::EN_ANY), cc);
+	RU ru;
+	ru.writeConstants(Common::String::format("_%i", Common::Language::RU_RUS), cc);
 }
diff --git a/devtools/create_xeen/create_xeen.cpp b/devtools/create_xeen/create_xeen.cpp
index d18ba178f5..d15689e6c9 100644
--- a/devtools/create_xeen/create_xeen.cpp
+++ b/devtools/create_xeen/create_xeen.cpp
@@ -39,7 +39,7 @@
 #include "constants.h"
 #include "map.h"
 
-#define VERSION_NUMBER 4
+#define VERSION_NUMBER 5
 
 void NORETURN_PRE error(const char *s, ...) {
 	va_list ap;
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index 1aeeeeda89..7f7dc12d25 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/dialogs/dialogs_char_info.cpp b/engines/xeen/dialogs/dialogs_char_info.cpp
index fe64ce8aed..7d83106598 100644
--- a/engines/xeen/dialogs/dialogs_char_info.cpp
+++ b/engines/xeen/dialogs/dialogs_char_info.cpp
@@ -278,15 +278,23 @@ void CharacterInfo::addButtons() {
 	addPartyButtons(_vm);
 }
 
-int CharacterInfo::getRuDays(int val) {
-	int i = val % 100;
-	if (i < 5 || i > 20) switch (val % 10) {
-	case 1: return 0;
-	case 2: 
-	case 3: 
-	case 4: return 1;
+Common::String CharacterInfo::getDaysPlurals(int val) {
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		int i = val % 100;
+		if (i < 5 || i > 20)
+			switch (val % 10) {
+			case 1:
+				return Res.DAYS[0];
+			case 2:
+			case 3:
+			case 4:
+				return Res.DAYS[1];
+			}
+		return Res.DAYS[2];
+	} else {
+		return Res.DAYS[val == 1 ? 0 : 1];
 	}
-	return 2;
+
 }
 
 Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
@@ -302,39 +310,7 @@ Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
 		c._energyResistence._permanent + c.itemScan(15) + c._energyResistence._temporary +
 		c._magicResistence._permanent + c.itemScan(16) + c._magicResistence._temporary;
 
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
-		return Common::String::format(Res.CHARACTER_DETAILS,
-			Res.PARTY_GOLD, c._name.c_str(), Res.SEX_NAMES[c._sex],
-			Res.RACE_NAMES[c._race], Res.CLASS_NAMES[c._class],
-			c.statColor(c.getStat(MIGHT), c.getStat(MIGHT, true)), c.getStat(MIGHT),
-			c.statColor(c.getStat(ACCURACY), c.getStat(ACCURACY, true)), c.getStat(ACCURACY),
-			c.statColor(c._currentHp, c.getMaxHP()), c._currentHp,
-			c.getCurrentExperience(),
-			c.statColor(c.getStat(INTELLECT), c.getStat(INTELLECT, true)), c.getStat(INTELLECT),
-			c.statColor(c.getStat(LUCK), c.getStat(LUCK, true)), c.getStat(LUCK),
-			c.statColor(c._currentSp, c.getMaxSP()), c._currentSp,
-			party._gold,
-			c.statColor(c.getStat(PERSONALITY), c.getStat(PERSONALITY, true)), c.getStat(PERSONALITY),
-			c.statColor(c.getAge(), c.getAge(true)), c.getAge(),
-			totalResist,
-			party._gems,
-			c.statColor(c.getStat(ENDURANCE), c.getStat(ENDURANCE, true)), c.getStat(ENDURANCE),
-			c.statColor(c.getCurrentLevel(), c._level._permanent), c.getCurrentLevel(),
-			c.getNumSkills(),
-			foodVal,
-			Res.RU_DAYS[getRuDays(foodVal)],
-			c.statColor(c.getStat(SPEED), c.getStat(SPEED, true)), c.getStat(SPEED),
-			c.statColor(c.getArmorClass(), c.getArmorClass(true)), c.getArmorClass(),
-			c.getNumAwards(),
-			Res.CONDITION_COLORS[condition], Res.CONDITION_NAMES[condition],
-			condition == NO_CONDITION && party._blessed ? Res.PLUS_14 : "",
-			condition == NO_CONDITION && party._powerShield ? Res.PLUS_14 : "",
-			condition == NO_CONDITION && party._holyBonus ? Res.PLUS_14 : "",
-			condition == NO_CONDITION && party._heroism ? Res.PLUS_14 : ""
-		);
-	}
-
-	return  Common::String::format(Res.CHARACTER_DETAILS,
+	return Common::String::format(Res.CHARACTER_DETAILS,
 		Res.PARTY_GOLD, c._name.c_str(), Res.SEX_NAMES[c._sex],
 		Res.RACE_NAMES[c._race], Res.CLASS_NAMES[c._class],
 		c.statColor(c.getStat(MIGHT), c.getStat(MIGHT, true)), c.getStat(MIGHT),
@@ -352,7 +328,8 @@ Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
 		c.statColor(c.getStat(ENDURANCE), c.getStat(ENDURANCE, true)), c.getStat(ENDURANCE),
 		c.statColor(c.getCurrentLevel(), c._level._permanent), c.getCurrentLevel(),
 		c.getNumSkills(),
-		foodVal, (foodVal == 1) ? ' ' : 's',
+		foodVal,
+		getDaysPlurals(foodVal).c_str(),
 		c.statColor(c.getStat(SPEED), c.getStat(SPEED, true)), c.getStat(SPEED),
 		c.statColor(c.getArmorClass(), c.getArmorClass(true)), c.getArmorClass(),
 		c.getNumAwards(),
@@ -360,8 +337,7 @@ Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
 		condition == NO_CONDITION && party._blessed ? Res.PLUS_14 : "",
 		condition == NO_CONDITION && party._powerShield ? Res.PLUS_14 : "",
 		condition == NO_CONDITION && party._holyBonus ? Res.PLUS_14 : "",
-		condition == NO_CONDITION && party._heroism ? Res.PLUS_14 : ""
-	);
+		condition == NO_CONDITION && party._heroism ? Res.PLUS_14 : "");
 }
 
 void CharacterInfo::showCursor(bool flag) {
diff --git a/engines/xeen/dialogs/dialogs_char_info.h b/engines/xeen/dialogs/dialogs_char_info.h
index 8abbb5d4bd..d1b3580600 100644
--- a/engines/xeen/dialogs/dialogs_char_info.h
+++ b/engines/xeen/dialogs/dialogs_char_info.h
@@ -50,9 +50,9 @@ private:
 	void addButtons();
 
 	/**
-	 * Get russian day/days form id
+	 * Get plural day/days form
 	 */
-	int getRuDays(int val);
+	Common::String getDaysPlurals(int val);
 
 	/**
 	 * Return a string containing the details of the character
diff --git a/engines/xeen/files.cpp b/engines/xeen/files.cpp
index 2ae5052499..5d8e3b7e4f 100644
--- a/engines/xeen/files.cpp
+++ b/engines/xeen/files.cpp
@@ -272,7 +272,7 @@ bool FileManager::setup() {
 
 	// Verify the version of the CC is correct
 	CCArchive *dataCc = new CCArchive("xeen.ccs", "data", true);
-	if (!f.open("VERSION", *dataCc) || f.readUint32LE() != 4) {
+	if (!f.open("VERSION", *dataCc) || f.readUint32LE() != 5) {
 		GUIErrorMessage("xeen.ccs is out of date");
 		return false;
 	}
diff --git a/engines/xeen/font.cpp b/engines/xeen/font.cpp
index 6f471e8fa7..676904b2d5 100644
--- a/engines/xeen/font.cpp
+++ b/engines/xeen/font.cpp
@@ -35,36 +35,25 @@ byte FontData::_bgColor;
 bool FontData::_fontReduced;
 Justify FontData::_fontJustify;
 
-Common::Language lang;
-int offset_fntEn;
-int offset_fntEnReduced;
-int offset_fntNonEn;
-int offset_fntNonEnReduced;
-int offset_fntEnW;
-int offset_fntEnReducedW;
-int offset_fntNonEnW;
-int offset_fntNonEnReducedW;
-
-
 FontSurface::FontSurface() : XSurface(), _msgWraps(false), _displayString(nullptr),
 		_writePos(*FontData::_fontWritePos) {
 	setTextColor(0);
 
 	lang = Common::parseLanguage(ConfMan.get("language"));
 	if (Common::RU_RUS == lang) {
-		offset_fntEn            = 0x0000;
-		offset_fntNonEn         = 0x0800;
-		offset_fntEnReduced     = 0x1000;
-		offset_fntNonEnReduced  = 0x1800;
-		offset_fntEnW           = 0x2000;
-		offset_fntNonEnW        = 0x2080;
-		offset_fntEnReducedW    = 0x2100;
-		offset_fntNonEnReducedW = 0x2180;
+		_fntEnOffset            = 0x0000;
+		_fntNonEnOffset         = 0x0800;
+		_fntEnReducedOffset     = 0x1000;
+		_fntNonEnReducedOffset  = 0x1800;
+		_fntEnWOffset           = 0x2000;
+		_fntNonEnWOffset        = 0x2080;
+		_fntEnReducedWOffset    = 0x2100;
+		_fntNonEnReducedWOffset = 0x2180;
 	} else {
-		offset_fntEn            = 0x0000;
-		offset_fntEnReduced     = 0x0800;
-		offset_fntEnW           = 0x1000;
-		offset_fntEnReducedW    = 0x1080;
+		_fntEnOffset            = 0x0000;
+		_fntEnReducedOffset     = 0x0800;
+		_fntEnWOffset           = 0x1000;
+		_fntEnReducedWOffset    = 0x1080;
 	}
 }
 
@@ -75,19 +64,19 @@ FontSurface::FontSurface(int wv, int hv) : XSurface(wv, hv),
 
 	lang = Common::parseLanguage(ConfMan.get("language"));
 	if (Common::RU_RUS == lang) {
-		offset_fntEn            = 0x0000;
-		offset_fntNonEn         = 0x0800;
-		offset_fntEnReduced     = 0x1000;
-		offset_fntNonEnReduced  = 0x1800;
-		offset_fntEnW           = 0x2000;
-		offset_fntNonEnW        = 0x2080;
-		offset_fntEnReducedW    = 0x2100;
-		offset_fntNonEnReducedW = 0x2180;
+		_fntEnOffset            = 0x0000;
+		_fntNonEnOffset         = 0x0800;
+		_fntEnReducedOffset     = 0x1000;
+		_fntNonEnReducedOffset  = 0x1800;
+		_fntEnWOffset           = 0x2000;
+		_fntNonEnWOffset        = 0x2080;
+		_fntEnReducedWOffset    = 0x2100;
+		_fntNonEnReducedWOffset = 0x2180;
 	} else {
-		offset_fntEn            = 0x0000;
-		offset_fntEnReduced     = 0x0800;
-		offset_fntEnW           = 0x1000;
-		offset_fntEnReducedW    = 0x1080;
+		_fntEnOffset            = 0x0000;
+		_fntEnReducedOffset     = 0x0800;
+		_fntEnWOffset           = 0x1000;
+		_fntEnReducedWOffset    = 0x1080;
 	}
 }
 
@@ -240,8 +229,8 @@ const char *FontSurface::writeString(const Common::String &s, const Common::Rect
 					if (c == 6)
 						c = ' ';
 					int offset_charW = c < 0 ?
-						(_fontReduced ? offset_fntNonEnReducedW : offset_fntNonEnW) + (int)(0x80 + c) :
-						(_fontReduced ? offset_fntEnReducedW : offset_fntEnW) + (int)c;
+						(_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (int)(0x80 + c) :
+						(_fontReduced ? _fntEnReducedWOffset : _fntEnWOffset) + (int)c;
 					byte charSize = _fontData[offset_charW];
 
 					_writePos.x -= charSize;
@@ -316,10 +305,10 @@ char FontSurface::getNextChar() {
 }
 
 bool FontSurface::getNextCharWidth(int &total) {
- 	char c = getNextChar();
+	char c = getNextChar();
 
 	if (c > ' ') {
-		total += _fontData[(_fontReduced ? offset_fntEnReducedW : offset_fntEnW) + (int)c];
+		total += _fontData[(_fontReduced ? _fntEnReducedWOffset : _fntEnWOffset) + (int)c];
 		return false;
 	} else if (c == ' ') {
 		total += 4;
@@ -339,7 +328,7 @@ bool FontSurface::getNextCharWidth(int &total) {
 			getNextChar();
 		return false;
 	} else if (Common::RU_RUS == lang && c < 0) {
-		total += _fontData[(_fontReduced ? offset_fntNonEnReducedW : offset_fntNonEnW) + (int)(0x80 + c)];
+		total += _fontData[(_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (int)(0x80 + c)];
 		return false;
 	} else {
 		--_displayString;
@@ -394,11 +383,11 @@ void FontSurface::writeChar(char c, const Common::Rect &clipRect) {
 	int offset_charData;
 	int offset_charW;
 	if (Common::RU_RUS == lang && c < 0) {
-		offset_charData = (_fontReduced ? offset_fntNonEnReduced : offset_fntNonEn) + (int)(0x80 + c) * 16;
-		offset_charW = (_fontReduced ? offset_fntNonEnReducedW : offset_fntNonEnW) + (int)(0x80 + c);
+		offset_charData = (_fontReduced ? _fntNonEnReducedOffset : _fntNonEnOffset) + (int)(0x80 + c) * 16;
+		offset_charW = (_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (int)(0x80 + c);
 	} else {
-		offset_charData = (_fontReduced ? offset_fntEnReduced : offset_fntEn) + (int)c * 16;
-		offset_charW = (_fontReduced ? offset_fntEnReducedW : offset_fntEnW) + (int)c;
+		offset_charData = (_fontReduced ? _fntEnReducedOffset : _fntEnOffset) + (int)c * 16;
+		offset_charW = (_fontReduced ? _fntEnReducedWOffset : _fntEnWOffset) + (int)c;
 	}
 	const byte *srcP = &_fontData[offset_charData];
 
diff --git a/engines/xeen/font.h b/engines/xeen/font.h
index a317a626a1..bc84e09c64 100644
--- a/engines/xeen/font.h
+++ b/engines/xeen/font.h
@@ -23,6 +23,7 @@
 #ifndef XEEN_FONT_H
 #define XEEN_FONT_H
 
+#include "common/language.h"
 #include "xeen/xsurface.h"
 
 namespace Xeen {
@@ -47,6 +48,19 @@ private:
 	const char *_displayString;
 	bool _msgWraps;
 
+	Common::Language lang;
+	/**
+	 * fnt file offsets
+	 */
+	int _fntEnOffset;               // English characters
+	int _fntEnReducedOffset;		// English characters (reduced)
+	int _fntNonEnOffset;			// Non-English characters
+	int _fntNonEnReducedOffset;     // Non-English characters (reduced)
+	int _fntEnWOffset;				// English characters Width
+	int _fntEnReducedWOffset;       // English characters (reduced) Width
+	int _fntNonEnWOffset;			// Non-English characters Width
+	int _fntNonEnReducedWOffset;    // Non-English characters (reduced) Width
+
 	/**
 	 * Return the next pending character to display
 	 */
diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp
index a14198736f..fc500ad1ce 100644
--- a/engines/xeen/resources.cpp
+++ b/engines/xeen/resources.cpp
@@ -20,6 +20,7 @@
  *
  */
 
+#include "common/config-manager.h"
 #include "common/scummsys.h"
 #include "xeen/resources.h"
 #include "xeen/files.h"
@@ -60,7 +61,8 @@ Resources::Resources() {
 }
 
 void Resources::loadData() {
-	ResFile file(_buffer);
+	Common::Language lang = Common::parseLanguage(ConfMan.get("language"));
+	ResFile file(_buffer, lang);
 	file.syncString(CLOUDS_CREDITS);
 	file.syncString(DARK_SIDE_CREDITS);
 	file.syncString(SWORDS_CREDITS1);
@@ -212,7 +214,7 @@ void Resources::loadData() {
 	file.syncString(SWORDS_GAME_TEXT);
 	file.syncStrings(WEEK_DAY_STRINGS, 10);
 	file.syncString(CHARACTER_DETAILS);
-	file.syncStrings(RU_DAYS, 3);
+	file.syncStrings(DAYS, 3);
 	file.syncString(PARTY_GOLD);
 	file.syncString(PLUS_14);
 	file.syncString(CHARACTER_TEMPLATE);
diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h
index 6785d43fae..decad4cf03 100644
--- a/engines/xeen/resources.h
+++ b/engines/xeen/resources.h
@@ -48,7 +48,7 @@ class Resources {
 		char *_buffer;
 		char *_buffStart;
 	public:
-		ResFile(char *buffer) : File("CONSTANTS"), _buffer(buffer), _buffStart(buffer) {}
+		ResFile(char *buffer, int num) : File("CONSTANTS_" + Common::String::format("%i", num)), _buffer(buffer), _buffStart(buffer) {}
 
 		void syncString(const char *&str) {
 			str = _buffer;
@@ -116,6 +116,7 @@ public:
 	const char **ITEM_NAMES[4];
 
 	// Data loaded from xeen.ccs
+	int RES_LANGUAGE;
 	const char *CLOUDS_CREDITS;
 	const char *DARK_SIDE_CREDITS;
 	const char *SWORDS_CREDITS1;
@@ -267,7 +268,7 @@ public:
 	const char *SWORDS_GAME_TEXT;
 	const char *WEEK_DAY_STRINGS[10];
 	const char *CHARACTER_DETAILS;
-	const char *RU_DAYS[3];
+	const char *DAYS[3];
 	const char *PARTY_GOLD;
 	const char *PLUS_14;
 	const char *CHARACTER_TEMPLATE;


Commit: d18f2bb2196c183fa9648eabfd141fe8ffd8994f
    https://github.com/scummvm/scummvm/commit/d18f2bb2196c183fa9648eabfd141fe8ffd8994f
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Split language constants
Further sharpening ru translation

Changed paths:
  A devtools/create_xeen/en_constants.h
  A devtools/create_xeen/ru_constants.h
    devtools/create_xeen/clouds.cpp
    devtools/create_xeen/constants.cpp
    devtools/create_xeen/constants.h
    engines/xeen/resources.h


diff --git a/devtools/create_xeen/clouds.cpp b/devtools/create_xeen/clouds.cpp
index ee3051614e..f8aba7b7d6 100644
--- a/devtools/create_xeen/clouds.cpp
+++ b/devtools/create_xeen/clouds.cpp
@@ -32,7 +32,6 @@
 #include "file.h"
 #include "clouds.h"
 
-
 static const char *const MAP_NAMES[86] = {
 	"", "Area A1", "Area A2", "Area A3", "Area A4", "Area B1", "Area B2",
 	"Area B3", "Area B4", "Area C1", "Area C2", "Area C3", "Area C4",
diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index 0d89a09c42..59b6af13af 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -20,7 +20,7 @@
  *
  */
 
- // Disable symbol overrides so that we can use system headers.
+// Disable symbol overrides so that we can use system headers.
 #define FORBIDDEN_SYMBOL_ALLOW_ALL
 
 // HACK to allow building with the SDL backend on MinGW
@@ -30,5205 +30,441 @@
 #endif // main
 
 #include "common/language.h"
-#include "file.h"
 #include "constants.h"
 
-enum MagicSpell {
-  MS_AcidSpray = 0, MS_Awaken = 1, MS_BeastMaster = 2, MS_Bless = 3,
-  MS_Clairvoyance = 4, MS_ColdRay = 5, MS_CreateFood = 6,
-  MS_CureDisease = 7, MS_CureParalysis = 8, MS_CurePoison = 9,
-  MS_CureWounds = 10, MS_DancingSword = 11, MS_DayOfProtection = 12,
-  MS_DayOfSorcery = 13, MS_DeadlySwarm = 14, MS_DetectMonster = 15,
-  MS_DivineIntervention = 16, MS_DragonSleep = 17, MS_ElementalStorm = 18,
-  MS_EnchantItem = 19, MS_EnergyBlast = 20, MS_Etheralize = 21,
-  MS_FantasticFreeze = 22, MS_FieryFlail = 23, MS_FingerOfDeath = 24,
-  MS_Fireball = 25, MS_FirstAid = 26, MS_FlyingFist = 27,
-  MS_FrostBite = 28, MS_GolemStopper = 29, MS_Heroism = 30,
-  MS_HolyBonus = 31, MS_HolyWord = 32, MS_Hynotize = 33,
-  MS_IdentifyMonster = 34, MS_Implosion = 35, MS_Incinerate = 36,
-  MS_Inferno = 37, MS_InsectSpray = 38, MS_ItemToGold = 39,
-  MS_Jump = 40, MS_Levitate = 41, MS_Light = 42, MS_LightningBolt = 43,
-  MS_LloydsBeacon = 44, MS_MagicArrow = 45, MS_MassDistortion = 46,
-  MS_MegaVolts = 47, MS_MoonRay = 48, MS_NaturesCure = 49, MS_Pain = 50,
-  MS_PoisonVolley = 51, MS_PowerCure = 52, MS_PowerShield = 53,
-  MS_PrismaticLight = 54, MS_ProtFromElements = 55, MS_RaiseDead = 56,
-  MS_RechargeItem = 57, MS_Resurrection = 58, MS_Revitalize = 59,
-  MS_Shrapmetal = 60, MS_Sleep = 61, MS_Sparks = 62, MS_StarBurst = 63,
-  MS_StoneToFlesh = 64, MS_SunRay = 65, MS_SuperShelter = 66,
-  MS_SuppressDisease = 67, MS_SuppressPoison = 68, MS_Teleport = 69,
-  MS_TimeDistortion = 70, MS_TownPortal = 71, MS_ToxicCloud = 72,
-  MS_TurnUndead = 73, MS_WalkOnWater = 74, MS_WizardEye = 75,
-  NO_SPELL = 76
-};
-
-class LangConstants {
-protected:
-	const char **_gameNames = NULL;
-	const char **_whoWillActions = NULL;
-	const char **_whoActions = NULL;
-	const char **_directionText = NULL;
-	const char **_directionTextUpper = NULL;
-	const char **_raceNames = NULL;
-	const char **_sexNames = NULL;
-	const char **_alignmentNames = NULL;
-	const char **_skillNames = NULL;
-	const char **_classNames = NULL;
-	const char **_conditionNames = NULL;
-	const char **_depositWithdrawl = NULL;
-	const char **_statNames = NULL;
-	const char **_whereNames = NULL;
-	const char **_consumableNames = NULL;
-	const char **_weekDayStrings = NULL;
-	const char **_ratingText = NULL;
-	const char **_bonusNames = NULL;
-	const char **_weaponNames = NULL;
-	const char **_armorNames = NULL;
-	const char **_accessoryNames = NULL;
-	const char **_miscNames = NULL;
-	const char **_elementalNames = NULL;
-	const char **_specialNames = NULL;
-	const char **_attributeNames = NULL;
-	const char **_effectivenessNames = NULL;
-	const char **_questItemNamesSwords = NULL;
-	const char **_questItemNames = NULL;
-	const char **_categoryNames = NULL;
-	const char **_itemActions = NULL;
-	const char **_categoryBackpackIsFull = NULL;
-	const char **_fixIdentify = NULL;
-	const char **_removeDelete = NULL;
-	const char **_spellCastComponents = NULL;
-	const char **_monsterSpecialAttacks = NULL;
-	const char **_quickFightOptions = NULL;
-	const char **_goober = NULL;
-	const char **_worldEndText = NULL;
-	const char **_days = NULL;
-	const char **_sellXForYGoldEndings = NULL;
-	
-
-public:
-	virtual const char  *CLOUDS_CREDITS() = 0;
-	virtual const char  *DARK_SIDE_CREDITS() = 0;
-	virtual const char  *SWORDS_CREDITS1() = 0;
-	virtual const char  *SWORDS_CREDITS2() = 0;
-	virtual const char  *OPTIONS_MENU() = 0;
-	virtual const char **GAME_NAMES() = 0;
-	virtual const char  *THE_PARTY_NEEDS_REST() = 0;
-	virtual const char  *WHO_WILL() = 0;
-	virtual const char  *HOW_MUCH() = 0;
-	virtual const char  *WHATS_THE_PASSWORD() = 0;
-	virtual const char  *PASSWORD_INCORRECT() = 0;
-	virtual const char  *IN_NO_CONDITION() = 0;
-	virtual const char  *NOTHING_HERE() = 0;
-
-	const char *const TERRAIN_TYPES[6] = {
-		"town", "cave", "towr", "cstl", "dung", "scfi"
-	};
-
-	const char *const OUTDOORS_WALL_TYPES[16] = {
-		nullptr, "mount", "ltree", "dtree", "grass", "snotree", "dsnotree",
-		"snomnt", "dedltree", "mount", "lavamnt", "palm", "dmount", "dedltree",
-		"dedltree", "dedltree"
-	};
-
-	const char *const SURFACE_NAMES[16] = {
-		"water.srf", "dirt.srf", "grass.srf", "snow.srf", "swamp.srf",
-		"lava.srf", "desert.srf", "road.srf", "dwater.srf", "tflr.srf",
-		"sky.srf", "croad.srf", "sewer.srf", "cloud.srf", "scortch.srf",
-		"space.srf"
-	};
-
-	virtual const char **WHO_ACTIONS() = 0;
-	virtual const char **WHO_WILL_ACTIONS() = 0;
-
-	const byte SYMBOLS[20][64] = {
-		{ // 0
-			0x00, 0x00, 0xA8, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x00, 0xA8, 0x9E, 0x9C, 0x9C, 0x9E, 0x9E, 0x9E,
-			0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0x9A, 0x9A, 0x9A, 0xAC, 0x9E, 0xAC, 0xA8, 0xA8, 0xA6, 0x97, 0x98,
-			0xAC, 0xA0, 0xAC, 0xAC, 0xA4, 0xA6, 0x98, 0x99, 0x00, 0xAC, 0xA0, 0xA0, 0xA8, 0xAC, 0x9A, 0x9A,
-			0x00, 0x00, 0xAC, 0xAC, 0xAC, 0xA4, 0x9B, 0x9A, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0x9B, 0x9B,
-		},
-		{ // 1
-			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
-			0x99, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97,
-			0x99, 0x98, 0x98, 0x99, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
-			0x9A, 0x9B, 0x9B, 0x9C, 0x9B, 0x9A, 0x9C, 0x9A, 0x9B, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x9A, 0x9B,
-		},
-		{ // 2
-			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
-			0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x98, 0x98, 0x99, 0x98, 0x98, 0x97, 0x98, 0x98,
-			0x99, 0x98, 0x98, 0x98, 0x99, 0x99, 0x98, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
-			0x9B, 0x9B, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9B, 0x99, 0x9A, 0x9B, 0x9B, 0x9A, 0x9A, 0x99, 0x9A,
-		},
-		{ // 3
-			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
-			0x99, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x98, 0x98, 0x97, 0x97, 0x98, 0x98, 0x98, 0x98,
-			0x99, 0x99, 0x98, 0x99, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
-			0x9B, 0x9C, 0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0x9C, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x9A,
-		},
-		{ // 4
-			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
-			0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x99, 0x9A, 0x97, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
-			0x99, 0x99, 0x98, 0x99, 0x99, 0x98, 0x98, 0x98, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
-			0x9A, 0x9C, 0x9B, 0x9B, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x99, 0x9B, 0x9B, 0x9A, 0x99, 0x9A, 0x9A,
-		},
-		{ // 5
-			0xA4, 0xA4, 0xA8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x9E, 0x9E, 0xA0, 0xA8, 0xAC, 0x00, 0x00,
-			0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9E, 0xAC, 0x00, 0x97, 0x97, 0x97, 0x98, 0x9C, 0x9C, 0xA0, 0xAC,
-			0x99, 0x98, 0x99, 0x99, 0x99, 0x9B, 0xA0, 0xAC, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9B, 0xA0, 0xAC,
-			0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x9A, 0x9A, 0x9B, 0x9B, 0xA4, 0xAC, 0x00,
-		},
-		{ // 6
-			0x00, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x9B, 0x99,
-			0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x98, 0x99, 0x99,
-			0x00, 0xAC, 0xA0, 0x9C, 0x9C, 0xA0, 0x9C, 0x9A, 0x00, 0x00, 0xAC, 0xA4, 0xA0, 0x99, 0x99, 0x99,
-			0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99,
-		},
-		{ // 7
-			0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-			0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x9C, 0x99, 0x99,
-			0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99,
-			0x00, 0x00, 0xAC, 0xA0, 0x9B, 0xA0, 0x9E, 0x9C, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x9C, 0x99, 0x99,
-		},
-		{ // 8
-			0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x9B, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-			0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-			0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-			0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x9C, 0x99, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x9E, 0x9C, 0x99,
-		},
-		{ // 9
-			0x00, 0x00, 0xAC, 0xA4, 0xA0, 0x9C, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x9C, 0xA0, 0x9C, 0x9A,
-			0xAC, 0xA4, 0x9C, 0x9A, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
-			0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99,
-			0x00, 0xAC, 0xA4, 0x9C, 0x9A, 0x9C, 0x99, 0x99, 0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x9A, 0x99, 0x99,
-		},
-		{ // 10
-			0x99, 0x99, 0x99, 0x9A, 0xA0, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
-			0x99, 0x99, 0x9C, 0x9E, 0xA4, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x9C, 0x99, 0x9C, 0xA4, 0xAC, 0x00,
-			0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
-			0x99, 0x99, 0x99, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x9A, 0x9B, 0x9E, 0x9C, 0x9C, 0xA4, 0xAC, 0x00,
-		},
-		{ // 11
-			0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0x9E, 0xAC,
-			0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00,
-			0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
-			0x9C, 0x99, 0x99, 0x99, 0x9C, 0x9C, 0xA4, 0xAC, 0x99, 0x9E, 0x9E, 0x9C, 0x9C, 0xA0, 0xAC, 0x00,
-		},
-		{ // 12
-			0x99, 0x99, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x9B, 0x9C, 0x9E, 0x9C, 0x9C, 0xA4, 0xAC, 0x00,
-			0x99, 0x99, 0x99, 0x99, 0x99, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
-			0x99, 0x99, 0x99, 0x99, 0x9C, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xA4, 0xAC, 0x00,
-			0x99, 0x99, 0x9C, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
-		},
-		{ // 13
-			0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
-			0x99, 0x9B, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x9A, 0x99, 0x9C, 0xA0, 0xAC, 0x00,
-			0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
-			0x99, 0x99, 0x99, 0x99, 0x9A, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x9A, 0x9C, 0xA4, 0xAC, 0x00,
-		},
-		{ // 14
-			0x00, 0x00, 0xAC, 0x9E, 0x9C, 0x9C, 0x9C, 0x9B, 0x00, 0xAC, 0x9C, 0xA0, 0x9E, 0xA4, 0xA4, 0xA4,
-			0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0xAC, 0x9C, 0x9E, 0xAC, 0xA0, 0xAC, 0xA8, 0x9E, 0xA8, 0xAC, 0x99,
-			0xAC, 0x9E, 0xAC, 0xA8, 0xAC, 0x9E, 0xA4, 0xAC, 0xAC, 0xA4, 0xA0, 0xAC, 0xAC, 0xA0, 0xA4, 0xAC,
-			0x00, 0xAC, 0xA4, 0xA0, 0xA0, 0xA4, 0xAC, 0xA4, 0x00, 0x00, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-		},
-		{ // 15
-			0x9C, 0x9C, 0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
-			0x9E, 0x9E, 0x9E, 0x9C, 0x9E, 0x9E, 0x9E, 0x9E, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x99, 0x98,
-			0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0x9E, 0x9E, 0xA0,
-			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-		},
-		{ // 16
-			0x9B, 0x9B, 0x9B, 0x9B, 0x9C, 0x9B, 0x9C, 0x9C, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
-			0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9E, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
-			0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xA0, 0xA0, 0xA0, 0x9E, 0xA0, 0x9E, 0x9E, 0xA0,
-			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-		},
-		{ // 17
-			0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9C, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
-			0x9E, 0x9E, 0x9E, 0x9C, 0x9C, 0x9C, 0x9E, 0x9E, 0x98, 0x98, 0x98, 0x99, 0x9A, 0x9A, 0x99, 0x98,
-			0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9C, 0xA0, 0x9E, 0x9E, 0xA0, 0xA0, 0xA0, 0xA0, 0x9E,
-			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-		},
-		{ // 18
-			0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
-			0x9E, 0x9E, 0x9E, 0x9E, 0x9C, 0x9C, 0x9C, 0x9E, 0x98, 0x98, 0x98, 0x98, 0x9A, 0x9A, 0x98, 0x99,
-			0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9B, 0x9C, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0xA0, 0xA0, 0xA0,
-			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
-		},
-		{ // 19
-			0x9C, 0x9B, 0x9C, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0x00, 0x00,
-			0x9E, 0x9E, 0x9C, 0x9C, 0x9E, 0xA0, 0xAC, 0x00, 0x99, 0x98, 0x98, 0x99, 0x9A, 0x9A, 0xA0, 0xAC,
-			0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xA0, 0xAC, 0xA0, 0xA0, 0x9E, 0xA0, 0xA0, 0xA0, 0xA0, 0xAC,
-			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0x00, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0x00, 0x00,
-		}
-	};
-
-	const byte TEXT_COLORS[40][4] = {
-		{0x00, 0x19, 0x19, 0x19},
-		{0x00, 0x08, 0x08, 0x08},
-		{0x00, 0x0F, 0x0F, 0x0F},
-		{0x00, 0x15, 0x15, 0x15},
-		{0x00, 0x01, 0x01, 0x01},
-		{0x00, 0x21, 0x21, 0x21},
-		{0x00, 0x26, 0x26, 0x26},
-		{0x00, 0x2B, 0x2B, 0x2B},
-		{0x00, 0x31, 0x31, 0x31},
-		{0x00, 0x36, 0x36, 0x36},
-		{0x00, 0x3D, 0x3D, 0x3D},
-		{0x00, 0x41, 0x41, 0x41},
-		{0x00, 0x46, 0x46, 0x46},
-		{0x00, 0x4C, 0x4C, 0x4C},
-		{0x00, 0x50, 0x50, 0x50},
-		{0x00, 0x55, 0x55, 0x55},
-		{0x00, 0x5D, 0x5D, 0x5D},
-		{0x00, 0x60, 0x60, 0x60},
-		{0x00, 0x65, 0x65, 0x65},
-		{0x00, 0x6C, 0x6C, 0x6C},
-		{0x00, 0x70, 0x70, 0x70},
-		{0x00, 0x75, 0x75, 0x75},
-		{0x00, 0x7B, 0x7B, 0x7B},
-		{0x00, 0x80, 0x80, 0x80},
-		{0x00, 0x85, 0x85, 0x85},
-		{0x00, 0x8D, 0x8D, 0x8D},
-		{0x00, 0x90, 0x90, 0x90},
-		{0x00, 0x97, 0x97, 0x97},
-		{0x00, 0x9D, 0x9D, 0x9D},
-		{0x00, 0xA4, 0xA4, 0xA4},
-		{0x00, 0xAB, 0xAB, 0xAB},
-		{0x00, 0xB0, 0xB0, 0xB0},
-		{0x00, 0xB6, 0xB6, 0xB6},
-		{0x00, 0xBD, 0xBD, 0xBD},
-		{0x00, 0xC0, 0xC0, 0xC0},
-		{0x00, 0xC6, 0xC6, 0xC6},
-		{0x00, 0xCD, 0xCD, 0xCD},
-		{0x00, 0xD0, 0xD0, 0xD0},
-		{0x00, 0xD6, 0xD6, 0xD6},
-		{0x00, 0xDB, 0xDB, 0xDB},
-	};
-
-	const byte TEXT_COLORS_STARTUP[40][4] = {
-		{0x00, 0x19, 0x19, 0x19},
-		{0x00, 0x08, 0x08, 0x08},
-		{0x00, 0x0F, 0x0F, 0x0F},
-		{0x00, 0x15, 0x15, 0x15},
-		{0x00, 0x01, 0x01, 0x01},
-		{0x00, 0x1F, 0x1F, 0x1F},
-		{0x00, 0x26, 0x26, 0x26},
-		{0x00, 0x2B, 0x2B, 0x2B},
-		{0x00, 0x31, 0x31, 0x31},
-		{0x00, 0x36, 0x36, 0x36},
-		{0x00, 0x3D, 0x3D, 0x3D},
-		{0x00, 0x42, 0x42, 0x42},
-		{0x00, 0x46, 0x46, 0x46},
-		{0x00, 0x4C, 0x4C, 0x4C},
-		{0x00, 0x50, 0x50, 0x50},
-		{0x00, 0x55, 0x55, 0x55},
-		{0x00, 0x5D, 0x5D, 0x5D},
-		{0x00, 0x60, 0x60, 0x60},
-		{0x00, 0x65, 0x65, 0x65},
-		{0x00, 0x6C, 0x6C, 0x6C},
-		{0x00, 0x70, 0x70, 0x70},
-		{0x00, 0x75, 0x75, 0x75},
-		{0x00, 0x7B, 0x7B, 0x7B},
-		{0x00, 0x80, 0x80, 0x80},
-		{0x00, 0x85, 0x85, 0x85},
-		{0x00, 0x8D, 0x8D, 0x8D},
-		{0x00, 0x90, 0x90, 0x90},
-		{0x00, 0x97, 0x97, 0x97},
-		{0x00, 0x9D, 0x9D, 0x9D},
-		{0x00, 0xA4, 0xA4, 0xA4},
-		{0x00, 0xAB, 0xAB, 0xAB},
-		{0x00, 0xB0, 0xB0, 0xB0},
-		{0x00, 0xB6, 0xB6, 0xB6},
-		{0x00, 0xBD, 0xBD, 0xBD},
-		{0x00, 0xC0, 0xC0, 0xC0},
-		{0x00, 0xC6, 0xC6, 0xC6},
-		{0x00, 0xCD, 0xCD, 0xCD},
-		{0x00, 0xD0, 0xD0, 0xD0},
-		{0x00, 0x19, 0x19, 0x19},
-		{0x00, 0x31, 0x31, 0x31}
-	};
-
-	virtual const char **DIRECTION_TEXT_UPPER() = 0;
-	virtual const char **DIRECTION_TEXT() = 0;
-	virtual const char **RACE_NAMES() = 0;
-
-	const int RACE_HP_BONUSES[5] = {0, -2, 1, -1, 2};
-
-	const int RACE_SP_BONUSES[5][2] = {
-		{0, 0}, {2, 0}, {-1, -1}, {1, 1}, {-2, -2}
-	};
-
-	virtual const char **ALIGNMENT_NAMES() = 0;
-	virtual const char **SEX_NAMES() = 0;
-	virtual const char **SKILL_NAMES() = 0;
-	virtual const char **CLASS_NAMES() = 0;
-
-	const int CLASS_EXP_LEVELS[10] = {
-		1500, 2000, 2000, 1500, 2000, 1000, 1500, 1500, 1500, 2000
-	};
-
-	virtual const char **CONDITION_NAMES() = 0;
-
-	const int CONDITION_COLORS[17] = {
-		9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32, 32, 6, 6, 6, 6, 15
-	};
-
-	virtual const char *GOOD() = 0;
-	virtual const char *BLESSED() = 0;
-	virtual const char *POWER_SHIELD() = 0;
-	virtual const char *HOLY_BONUS() = 0;
-	virtual const char *HEROISM() = 0;
-	virtual const char *IN_PARTY() = 0;
-	virtual const char *PARTY_DETAILS() = 0;
-	virtual const char *PARTY_DIALOG_TEXT() = 0;
-
-	const int FACE_CONDITION_FRAMES[17] = {
-		2, 2, 2, 1, 1, 4, 4, 4, 3, 2, 4, 3, 3, 5, 6, 7, 0
-	};
-
-	const int CHAR_FACES_X[6] = {10, 45, 81, 117, 153, 189};
-
-	const int HP_BARS_X[6] = {13, 50, 86, 122, 158, 194};
-
-	virtual const char *NO_ONE_TO_ADVENTURE_WITH() = 0;
-	virtual const char *YOUR_ROSTER_IS_FULL() = 0;
-
-	const byte DARKNESS_XLAT[3][256] = {
-		{
-		0, 25, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		60, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		76, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		92, 93, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		108, 109, 110, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		124, 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		140, 141, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		168, 169, 170, 171, 172, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		204, 205, 206, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		220, 221, 222, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		236, 237, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		252, 253, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-		}, {
-		0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
-		56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
-		72, 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0,
-		88, 89, 90, 91, 92, 93, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0,
-		104, 105, 106, 107, 108, 109, 110, 111, 0, 0, 0, 0, 0, 0, 0, 0,
-		120, 121, 122, 123, 124, 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0,
-		136, 137, 138, 139, 140, 141, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0,
-		160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		184, 185, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0,
-		200, 201, 202, 203, 204, 205, 206, 207, 0, 0, 0, 0, 0, 0, 0, 0,
-		216, 217, 218, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 0, 0, 0,
-		232, 233, 234, 235, 236, 237, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0,
-		248, 249, 250, 251, 252, 253, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0
-		}, {
-		0, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
-		24, 25, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0,
-		36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
-		52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0,
-		68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, 0,
-		84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 0, 0, 0, 0,
-		100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 0, 0, 0, 0,
-		116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0, 0, 0, 0,
-		132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 0, 0, 0, 0,
-		152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
-		168, 169, 170, 171, 172, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0,
-		180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0,
-		196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 0, 0, 0,
-		212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 0, 0, 0, 0,
-		228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 0, 0, 0, 0,
-		244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 0, 0, 0, 0
-		}
-	};
-
-	virtual const char *PLEASE_WAIT() = 0;
-	virtual const char *OOPS() = 0;
-
-	const int SCREEN_POSITIONING_X[4][48] = {
-		{
-		-1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
-		-1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
-		-1, -1,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,
-		-3, -2, -1,  0,  0,  1,  2,  3, -4,  4,  0,  0
-		}, {
-		 0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
-		 2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
-		 3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
-		 4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  0,  1
-		}, {
-		 1,  0,  0,  0, -1,  1,  0,  0,  0, -1,  2,  1,
-		 1,  0,  0,  0, -1, -1, -2,  4,  3,  3,  2,  2,
-		 1,  1,  0,  0,  0, -1, -1, -2, -2, -3, -3, -4,
-		 3,  2,  1,  0,  0, -1, -2, -3,  4, -4,  0,  0
-		}, {
-		 0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -2, -2,
-		-2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3,
-		-3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
-		-4, -4, -4, -4, -4, -4, -4, -4, -4, -4,  0, -1
-		}
-	};
-
-	const int SCREEN_POSITIONING_Y[4][48] = {
-		{
-		 0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
-		 2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
-		 3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
-		 4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  0,  1
-		}, {
-		 1,  0,  0,  0, -1,  1,  0,  0,  0, -1,  2,  1,
-		 1,  0,  0,  0, -1, -1, -2,  4,  3,  3,  2,  2,
-		 1,  1,  0,  0,  0, -1, -1, -2, -2, -3, -3, -4,
-		 3,  2,  1,  0,  0, -1, -2, -3,  4, -4,  0,  0
-		}, {
-		 0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -2, -2,
-		-2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3,
-		-3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
-		-4, -4, -4, -4, -4, -4, -4, -4, -4, -4,  0, -1
-		}, {
-		-1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
-		-1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
-		-1, -1,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,
-		-3, -2, -1,  0,  0,  1,  2,  3, -4,  4,  0,  0
-		}
-	};
-
-	const int MONSTER_GRID_BITMASK[12] = {
-		0xC, 8, 4, 0, 0xF, 0xF000, 0xF00, 0xF0, 0xF00, 0xF0, 0x0F, 0xF000
-	};
-
-	const int INDOOR_OBJECT_X[2][12] = {
-		{ -5, -7, -112, 98, -8, -65, 49, -9, -34, 16, -58, 40 },
-		{ -35, -35, -142, 68, -35, -95, 19, -35, -62, -14, -98, 16 }
-	};
-
-	const int MAP_OBJECT_Y[2][12] = {
-		{ 2, 25, 25, 25, 50, 50, 50, 58, 58, 58, 58, 58 },
-		{ -65, -6, -6, -6, 36, 36, 36, 54, 54, 54, 54, 54 }
-	};
-
-	const int INDOOR_MONSTERS_Y[4] = { 2, 34, 53, 59 };
-
-	const int OUTDOOR_OBJECT_X[2][12] = {
-		{ -5, -7, -112, 98, -8, -77, 61, -9, -43, 25, -74, 56 },
-		{ -35, -35, -142, 68, -35, -95, 19, -35, -62, -24, -98, 16 }
-	};
-
-	const int OUTDOOR_MONSTER_INDEXES[26] = {
-		42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 69, 70,
-		71, 72, 73, 74, 75, 90, 91, 92, 93, 94, 112, 115, 118
-	};
-
-	const int OUTDOOR_MONSTERS_Y[26] = {
-		59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 53, 53,
-		53, 53, 53, 53, 53, 34, 34, 34, 34, 34, 2, 2, 2
-	};
-
-	const int DIRECTION_ANIM_POSITIONS[4][4] = {
-		{ 0, 1, 2, 3 }, { 3, 0, 1, 2 }, { 2, 3, 0, 1 }, { 1, 2, 3, 0 }
-	};
-
-	const byte WALL_SHIFTS[4][48] = {
-		{
-			12, 0, 12, 8, 12, 12, 0, 12, 8, 12, 12, 0,
-			12, 0, 12, 8, 12, 8, 12, 12, 0, 12, 0, 12,
-			0, 12, 0, 12, 8, 12, 8, 12, 8, 12, 8, 12,
-			0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 4, 4
-		}, {
-			8, 12, 8, 4, 8, 8, 12, 8, 4, 8, 8, 12,
-			8, 12, 8, 4, 8, 4, 8, 8, 12, 8, 12, 8,
-			12, 8, 12, 8, 4, 8, 4, 8, 4, 8, 4, 8,
-			12, 12, 12, 12, 4, 4, 4, 4, 0, 0, 0, 0
-		}, {
-			4, 8, 4, 0, 4, 4, 8, 4, 0, 4, 4, 8,
-			4, 8, 4, 0, 4, 0, 4, 4, 8, 4, 8, 4,
-			8, 4, 8, 4, 0, 4, 0, 4, 0, 4, 0, 4,
-			8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 12, 12
-		}, {
-			0, 4, 0, 12, 0, 0, 4, 0, 12, 0, 0, 4,
-			0, 4, 0, 12, 0, 12, 0, 0, 4, 0, 4, 0,
-			4, 0, 4, 0, 12, 0, 12, 0, 12, 0, 12, 0,
-			4, 4, 4, 4, 12, 12, 12, 12, 0, 0, 8, 8
-		}
-	};
-
-	const int DRAW_NUMBERS[25] = {
-		36, 37, 38, 43, 42, 41,
-		39, 20, 22, 24, 33, 31,
-		29, 26, 10, 11, 18, 16,
-		13, 5, 9, 6, 0, 4, 1
-	};
-
-	const int DRAW_FRAMES[25][2] = {
-		{ 18, 24 }, { 19, 23 }, { 20, 22 }, { 24, 18 }, { 23, 19 }, { 22, 20 },
-		{ 21, 21 }, { 11, 17 }, { 12, 16 }, { 13, 15 }, { 17, 11 }, { 16, 12 },
-		{ 15, 13 }, { 14, 14 }, { 6, 10 }, { 7, 9 }, { 10, 6 }, { 9, 7 },
-		{ 8, 8 }, { 3, 5 }, { 5, 3 }, { 4, 4 }, { 0, 2 }, { 2, 0 },
-		{ 1, 1 }
-	};
-
-	const int COMBAT_FLOAT_X[8] = { -2, -1, 0, 1, 2, 1, 0, -1 };
-
-	const int COMBAT_FLOAT_Y[8] = { -2, 0, 2, 0, -1, 0, 2, 0 };
-
-	const int MONSTER_EFFECT_FLAGS[15][8] = {
-		{ 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10A, 0x10B },
-		{ 0x10C, 0x10D, 0x10E, 0x10F, 0x0, 0x0, 0x0, 0x0 },
-		{ 0x110, 0x111, 0x112, 0x113, 0x0, 0x0, 0x0, 0x0 },
-		{ 0x114, 0x115, 0x116, 0x117, 0x0, 0x0, 0x0, 0x0 },
-		{ 0x200, 0x201, 0x202, 0x203, 0x0, 0x0, 0x0, 0x0 },
-		{ 0x300, 0x301, 0x302, 0x303, 0x400, 0x401, 0x402, 0x403 },
-		{ 0x500, 0x501, 0x502, 0x503, 0x0, 0x0, 0x0, 0x0 },
-		{ 0x600, 0x601, 0x602, 0x603, 0x0, 0x0, 0x0, 0x0 },
-		{ 0x604, 0x605, 0x606, 0x607, 0x608, 0x609, 0x60A, 0x60B },
-		{ 0x60C, 0x60D, 0x60E, 0x60F, 0x0, 0x0, 0x0, 0x0 },
-		{ 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100 },
-		{ 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101 },
-		{ 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102 },
-		{ 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103 },
-		{ 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108 }
-	};
-
-	const int SPELLS_ALLOWED[3][40] = {
-		{
-			0, 1, 2, 3, 5, 6, 7, 8, 9, 10,
-			12, 14, 16, 23, 26, 27, 28, 30, 31, 32,
-			33, 42, 46, 48, 49, 50, 52, 55, 56, 58,
-			59, 62, 64, 65, 67, 68, 71, 73, 74, 76
-		}, {
-			1, 4, 11, 13, 15, 17, 18, 19, 20, 21,
-			22, 24, 25, 29, 34, 35, 36, 37, 38, 39,
-			40, 41, 42, 43, 44, 45, 47, 51, 53, 54,
-			57, 60, 61, 63, 66, 69, 70, 72, 75, 76
-		}, {
-			0, 1, 2, 3, 4, 5, 7, 9, 10, 20,
-			25, 26, 27, 28, 30, 31, 34, 38, 40, 41,
-			42, 43, 44, 45, 49, 50, 52, 53, 55, 59,
-			60, 61, 62, 67, 68, 72, 73, 74, 75, 76
-		}
-	};
-
-	const int BASE_HP_BY_CLASS[10] = { 10, 8, 7, 5, 4, 8, 7, 12, 6, 9 };
-
-	const int AGE_RANGES[10] = { 1, 6, 11, 18, 36, 51, 76, 101, 201, 0xffff };
-
-	const int AGE_RANGES_ADJUST[2][10] = {
-		{ -250, -50, -20, -10, 0, -2, -5, -10, -20, -50 },
-		{ -250, -50, -20, -10, 0, 2, 5, 10, 20, 50 }
-	};
-
-	const int STAT_VALUES[24] = {
-		3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 25, 30, 35, 40,
-		50, 75, 100, 125, 150, 175, 200, 225, 250, 65535
-	};
-
-	const int STAT_BONUSES[24] = {
-		-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6,
-		7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20
-	};
-
-	const int ELEMENTAL_CATEGORIES[6] = { 8, 15, 20, 25, 33, 36 };
-
-	const int ATTRIBUTE_CATEGORIES[10] = {
-		9, 17, 25, 33, 39, 45, 50, 56, 61, 72
-	};
-
-	const int ATTRIBUTE_BONUSES[72] = {
-		2, 3, 5, 8, 12, 17, 23, 30, 38, 47,	// Might bonus
-		2, 3, 5, 8, 12, 17, 23, 30,			// INT bonus
-		2, 3, 5, 8, 12, 17, 23, 30,			// PER bonus
-		2, 3, 5, 8, 12, 17, 23, 30,			// SPD bonus
-		3, 5, 10, 15, 20, 30,				// ACC bonus
-		5, 10, 15, 20, 25, 30,				// LUC bonus
-		4, 6, 10, 20, 50,					// HP bonus
-		4, 8, 12, 16, 20, 25,				// SP bonus
-		2, 4, 6, 10, 16,					// AC bonus
-		4, 6, 8, 10, 12, 14, 16, 18, 20, 25	// Thievery bonus
-	};
-
-	const int ELEMENTAL_RESISTENCES[37] = {
-		0, 5, 7, 9, 12, 15, 20, 25, 30, 5, 7, 9, 12, 15, 20, 25,
-		5, 10, 15, 20, 25, 10, 15, 20, 25, 40, 5, 7, 9, 11, 13, 15, 20, 25,
-		5, 10, 20
-	};
-
-	const int ELEMENTAL_DAMAGE[37] = {
-		0, 2, 3, 4, 5, 10, 15, 20, 30, 2, 3, 4, 5, 10, 15, 20, 2, 4, 5, 10, 20,
-		2, 4, 8, 16, 32, 2, 3, 4, 5, 10, 15, 20, 30, 5, 10, 25
-	};
-
-	const int WEAPON_DAMAGE_BASE[35] = {
-		0, 3, 2, 3, 2, 2, 4, 1, 2, 4, 2, 3,
-		2, 2, 1, 1, 1, 1, 4, 4, 3, 2, 4, 2,
-		2, 2, 5, 3, 3, 3, 3, 5, 4, 2, 6
-	};
-
-	const int WEAPON_DAMAGE_MULTIPLIER[35] = {
-		0, 3, 3, 4, 5, 4, 2, 3, 3, 3, 3, 3,
-		2, 4, 10, 6, 8, 9, 4, 3, 6, 8, 5, 6,
-		4, 5, 3, 5, 6, 7, 2, 2, 2, 2, 4
-	};
-
-	const int METAL_DAMAGE[22] = {
-		-3, -6, -4, -2, 2, 4, 6, 8, 10, 0, 1,
-		1, 2, 2, 3, 4, 5, 12, 15, 20, 30, 50
-	};
-
-	const int METAL_DAMAGE_PERCENT[22] = {
-		253, 252, 3, 2, 1, 2, 3, 4, 6, 0, 1,
-		1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10
-	};
-
-	const int METAL_LAC[22] = {
-		-3, 0, -2, -1, 1, 2, 4, 6, 8, 0, 1,
-		1, 2, 2, 3, 4, 5, 10, 12, 14, 16, 20
-	};
-
-	const int ARMOR_STRENGTHS[14] = { 0, 2, 4, 5, 6, 7, 8, 10, 4, 2, 1, 1, 1, 1 };
-
-	const int MAKE_ITEM_ARR1[6] = { 0, 8, 15, 20, 25, 33 };
-
-	const int MAKE_ITEM_ARR2[6][7][2] = {
-		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
-		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 7 }, { 7, 7 } },
-		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 5 }, { 5, 5 } },
-		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
-		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
-		{ { 0, 0 }, { 1, 1 }, { 1, 1 }, { 1, 2 }, { 2, 2 }, { 2, 3 }, { 3, 3 } }
-	};
-
-	const int MAKE_ITEM_ARR3[10][7][2] = {
-		{ { 0, 0 }, { 1, 4 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 10 }, { 10, 10 } },
-		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
-		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
-		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
-		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 6 }, { 6, 6 } },
-		{ { 0, 0 }, { 1, 2 }, { 2, 3 }, { 3, 4 }, { 4, 5 }, { 5, 6 }, { 6, 6 } },
-		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
-		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 6 }, { 6, 6 } },
-		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
-		{ { 0, 0 }, { 1, 2 }, { 1, 4 }, { 3, 6 }, { 5, 8 }, { 7, 10 }, { 10, 10 } }
-	};
-
-	const int MAKE_ITEM_ARR4[2][7][2] = {
-		{ { 0, 0 }, { 1, 4 }, { 3, 7 }, { 4, 8 }, { 5, 9 }, { 8, 9 }, { 9, 9 } },
-		{ { 0, 0 }, { 1, 4 }, { 2, 6 }, { 4, 7 }, { 6, 10 }, { 9, 13 }, { 13, 13 } }
-	};
-
-	const int MAKE_ITEM_ARR5[8][2] = {
-		{ 0, 0 }, { 1, 15 }, { 16, 30 }, { 31, 40 }, { 41, 50 },
-		{ 51, 60 }, { 61, 73 }, { 61, 73 }
-	};
-
-	const int OUTDOOR_DRAWSTRUCT_INDEXES[44] = {
-		37, 38, 39, 40, 41, 44, 42, 43, 47, 45, 46,
-		48, 49, 52, 50, 51, 66, 67, 68, 69, 70, 71,
-		72, 75, 73, 74, 87, 88, 89, 90, 91, 94, 92,
-		93, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
-	};
-
-	const int TOWN_MAXES[2][11] = {
-		{ 23, 13, 32, 16, 26, 16, 16, 16, 16, 16, 16 },
-		{ 26, 19, 48, 27, 26, 37, 16, 16, 16, 16, 16 }
-	};
-
-	const char *const TOWN_ACTION_MUSIC[2][7] = {
-		{ "bank.m", "smith.m", "guild.m", "tavern.m",
-		"temple.m", "grounds.m", "endgame.m" },
-		{ "bank.m", "sf09.m", "guild.m", "tavern.m",
-		"temple.m", "smith.m", "endgame.m" }
-	};
-
-	const char *const TOWN_ACTION_SHAPES[7] = {
-		"bnkr", "blck", "gild", "tvrn", "tmpl", "trng", "eface08"
-	};
-
-	const int TOWN_ACTION_FILES[2][7] = {
-		{ 3, 2, 4, 2, 4, 2, 1 }, { 5, 3, 7, 5, 4, 6, 1 }
-	};
-
-	virtual const char *BANK_TEXT() = 0;
-	virtual const char *BLACKSMITH_TEXT() = 0;
-	virtual const char *GUILD_NOT_MEMBER_TEXT() = 0;
-	virtual const char *GUILD_TEXT() = 0;
-	virtual const char *TAVERN_TEXT() = 0;
-	virtual const char *FOOD_AND_DRINK() = 0;
-	virtual const char *GOOD_STUFF() = 0;
-	virtual const char *HAVE_A_DRINK() = 0;
-	virtual const char *YOURE_DRUNK() = 0;
-
-	const int TAVERN_EXIT_LIST[2][6][5][2] = {
-		{
-			{ { 21, 17 }, { 0, 0 }, { 20, 3 }, { 0, 0 }, { 0, 0 } },
-			{ { 13, 4 }, { 0, 0 }, { 19, 9 }, { 0, 0 }, { 0, 0 } },
-			{ { 20, 10 }, { 12, 8 }, { 5, 26 }, { 3, 4 }, { 7, 5 } },
-			{ { 18, 4 }, { 0, 0 }, { 19, 16 }, { 0, 0 }, { 11, 12 } },
-			{ { 15, 21 }, { 0, 0 }, { 13, 21 }, { 0, 0 }, { 0, 0 } },
-			{ { 10, 8 }, { 0, 0 }, { 15, 12 }, { 0, 0 }, { 0, 0 } },
-		}, {
-			{ { 21, 17 }, { 0, 0 }, { 20, 3 }, { 0, 0 }, { 0, 0 } },
-			{ { 13, 4 }, { 0, 0 }, { 19, 9 }, { 0, 0 }, { 0, 0 } },
-			{ { 20, 10 }, { 12, 8 }, { 5, 26 }, { 3, 4 }, { 7, 5 } },
-			{ { 17, 24 }, { 14, 13 }, { 0, 0 }, { 0, 0 }, { 9, 4 } },
-			{ { 15, 21 }, { 0, 0 }, { 13, 21 }, { 0, 0 }, { 0, 0 } },
-			{ { 10, 8 }, { 0, 0 }, { 15, 12 }, { 0, 0 }, { 0, 0 } }
-		}
-	};
-
-	virtual const char  *TEMPLE_TEXT() = 0;
-	virtual const char  *EXPERIENCE_FOR_LEVEL() = 0;
-	virtual const char  *TRAINING_LEARNED_ALL() = 0;
-	virtual const char  *ELIGIBLE_FOR_LEVEL() = 0;
-	virtual const char  *TRAINING_TEXT() = 0;
-	virtual const char  *GOLD_GEMS() = 0;
-	virtual const char  *GOLD_GEMS_2() = 0;
-	virtual const char **DEPOSIT_WITHDRAWL() = 0;
-	virtual const char  *NOT_ENOUGH_X_IN_THE_Y() = 0;
-	virtual const char  *NO_X_IN_THE_Y() = 0;
-	virtual const char **STAT_NAMES() = 0;
-	virtual const char **CONSUMABLE_NAMES() = 0;
-	virtual const char **WHERE_NAMES() = 0;
-	virtual const char  *AMOUNT() = 0;
-	virtual const char  *FOOD_PACKS_FULL() = 0;
-	virtual const char  *BUY_SPELLS() = 0;
-	virtual const char  *GUILD_OPTIONS() = 0;
-
-	const int MISC_SPELL_INDEX[74] = {
-		NO_SPELL, MS_Light, MS_Awaken, MS_MagicArrow,
-		MS_FirstAid, MS_FlyingFist, MS_EnergyBlast, MS_Sleep,
-		MS_Revitalize, MS_CureWounds, MS_Sparks, MS_Shrapmetal,
-		MS_InsectSpray, MS_ToxicCloud, MS_ProtFromElements, MS_Pain,
-		MS_Jump, MS_BeastMaster, MS_Clairvoyance, MS_TurnUndead,
-		MS_Levitate, MS_WizardEye, MS_Bless, MS_IdentifyMonster,
-		MS_LightningBolt, MS_HolyBonus, MS_PowerCure, MS_NaturesCure,
-		MS_LloydsBeacon, MS_PowerShield, MS_Heroism, MS_Hynotize,
-		MS_WalkOnWater, MS_FrostBite, MS_DetectMonster, MS_Fireball,
-		MS_ColdRay, MS_CurePoison, MS_AcidSpray, MS_TimeDistortion,
-		MS_DragonSleep, MS_CureDisease, MS_Teleport, MS_FingerOfDeath,
-		MS_CureParalysis, MS_GolemStopper, MS_PoisonVolley, MS_DeadlySwarm,
-		MS_SuperShelter, MS_DayOfProtection, MS_DayOfSorcery, MS_CreateFood,
-		MS_FieryFlail, MS_RechargeItem, MS_FantasticFreeze, MS_TownPortal,
-		MS_StoneToFlesh, MS_RaiseDead, MS_Etheralize, MS_DancingSword,
-		MS_MoonRay, MS_MassDistortion, MS_PrismaticLight, MS_EnchantItem,
-		MS_Incinerate, MS_HolyWord, MS_Resurrection, MS_ElementalStorm,
-		MS_MegaVolts, MS_Inferno, MS_SunRay, MS_Implosion,
-		MS_StarBurst, MS_DivineIntervention
-	};
-
-	const int SPELL_COSTS[77] = {
-		8, 1, 5, -2, 5, -2, 20, 10, 12, 8, 3,
-		- 3, 75, 40, 12, 6, 200, 10, 100, 30, -1, 30,
-		15, 25, 10, -2, 1, 2, 7, 20, -2, -2, 100,
-		15, 5, 100, 35, 75, 5, 20, 4, 5, 1, -2,
-		6, 2, 75, 40, 60, 6, 4, 25, -2, -2, 60,
-		- 1, 50, 15, 125, 2, -1, 3, -1, 200, 35, 150,
-		15, 5, 4, 10, 8, 30, 4, 5, 7, 5, 0
-	};
-
-	const int DARK_SPELL_RANGES[12][2] = {
-		{ 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 },
-		{ 0, 17 }, { 14, 34 }, { 26, 37 }, { 29, 39 },
-		{ 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 }
-	};
-
-	const int SWORDS_SPELL_RANGES[12][2] = {
-		{ 0, 20 },{ 16, 35 },{ 27, 39 },{ 29, 39 },
-		{ 0, 17 },{ 14, 34 },{ 26, 39 },{ 29, 39 },
-		{ 0, 20 },{ 16, 35 },{ 27, 39 },{ 29, 39 }
-	};
-
-	const int CLOUDS_GUILD_SPELLS[5][20] = {
-		{
-			1, 10, 20, 26, 27, 38, 40, 42, 45, 50,
-			55, 59, 60, 61, 62, 68, 72, 75, 77, 77
-		}, {
-			3, 4, 5, 14, 15, 25, 30, 31, 34, 41,
-			49, 51, 53, 67, 73, 75, -1, -1, -1, -1
-		}, {
-			4, 8, 9, 12, 13, 22, 23, 24, 28, 34,
-			41, 44, 52, 70, 73, 74, -1, -1, -1, -1
-		}, {
-			6, 7, 9, 11, 12, 13, 17, 21, 22, 24,
-			29, 36, 56, 58, 64, 71, -1, -1, -1, -1
-		}, {
-			6, 7, 9, 11, 12, 13, 18, 21, 29, 32,
-			36, 37, 46, 51, 56, 58, 69, -1, -1, -1
-		}
-	};
-
-	const int DARK_SPELL_OFFSETS[3][39] = {
-		{
-			42, 1, 26, 59, 27, 10, 50, 68, 55, 62, 67, 73, 2,
-			5, 3, 31, 30, 52, 49, 28, 74, 0, 9, 7, 14, 8,
-			33, 6, 23, 71, 64, 56, 48, 46, 12, 32, 58, 65, 16
-		}, {
-			42, 1, 45, 61, 72, 40, 20, 60, 38, 41, 75, 34, 4,
-			43, 25, 53, 44, 15, 70, 17, 24, 69, 22, 66, 57, 11,
-			29, 39, 51, 21, 19, 36, 47, 13, 54, 37, 18, 35, 63
-		}, {
-			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
-			13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
-			26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38
-		}
-	};
-
-	const int SPELL_GEM_COST[77] = {
-		0, 0, 2, 1, 2, 4, 5, 0, 0, 0, 0, 10, 10, 10, 0, 0, 20, 4, 10, 20, 1, 10,
-		5, 5, 4, 2, 0, 0, 0, 10, 3, 1, 20, 4, 0, 20, 10, 10, 1, 10, 0, 0, 0, 2,
-		2, 0, 10, 10, 10, 0, 0, 10, 3, 2, 10, 1, 10, 10, 20, 0, 0, 1, 1, 20, 5, 20,
-		5, 0, 0, 0, 0, 5, 1, 2, 0, 2, 0
-	};
-
-	virtual const char  *NOT_A_SPELL_CASTER() = 0;
-	virtual const char  *SPELLS_LEARNED_ALL() = 0;
-	virtual const char  *SPELLS_FOR() = 0;
-	virtual const char  *SPELL_LINES_0_TO_9() = 0;
-	virtual const char  *SPELLS_DIALOG_SPELLS() = 0;
-	virtual const char  *SPELL_PTS() = 0;
-	virtual const char  *GOLD() = 0;
-	virtual const char  *SPELL_INFO() = 0;
-	virtual const char  *SPELL_PURCHASE() = 0;
-	virtual const char  *MAP_TEXT() = 0;
-	virtual const char  *LIGHT_COUNT_TEXT() = 0;
-	virtual const char  *FIRE_RESISTENCE_TEXT() = 0;
-	virtual const char  *ELECRICITY_RESISTENCE_TEXT() = 0;
-	virtual const char  *COLD_RESISTENCE_TEXT() = 0;
-	virtual const char  *POISON_RESISTENCE_TEXT() = 0;
-	virtual const char  *CLAIRVOYANCE_TEXT() = 0;
-	virtual const char  *LEVITATE_TEXT() = 0;
-	virtual const char  *WALK_ON_WATER_TEXT() = 0;
-	virtual const char  *GAME_INFORMATION() = 0;
-	virtual const char  *WORLD_GAME_TEXT() = 0;
-	virtual const char  *DARKSIDE_GAME_TEXT() = 0;
-	virtual const char  *CLOUDS_GAME_TEXT() = 0;
-	virtual const char  *SWORDS_GAME_TEXT() = 0;
-	virtual const char **WEEK_DAY_STRINGS() = 0;
-	virtual const char  *CHARACTER_DETAILS() = 0;
-	virtual const char **DAYS() = 0;
-	virtual const char  *PARTY_GOLD() = 0;
-	virtual const char  *PLUS_14() = 0;
-	virtual const char  *CHARACTER_TEMPLATE() = 0;
-	virtual const char  *EXCHANGING_IN_COMBAT() = 0;
-	virtual const char  *CURRENT_MAXIMUM_RATING_TEXT() = 0;
-	virtual const char  *CURRENT_MAXIMUM_TEXT() = 0;
-	virtual const char **RATING_TEXT() = 0;
-	virtual const char  *AGE_TEXT() = 0;
-	virtual const char  *LEVEL_TEXT() = 0;
-	virtual const char  *RESISTENCES_TEXT() = 0;
-	virtual const char  *NONE() = 0;
-	virtual const char  *EXPERIENCE_TEXT() = 0;
-	virtual const char  *ELIGIBLE() = 0;
-	virtual const char  *IN_PARTY_IN_BANK() = 0;
-	virtual const char  *FOOD_TEXT() = 0;
-	virtual const char  *EXCHANGE_WITH_WHOM() = 0;
-	virtual const char  *QUICK_REF_LINE() = 0;
-	virtual const char  *QUICK_REFERENCE() = 0;
-
-	const int BLACKSMITH_MAP_IDS[2][4] = { { 28, 30, 73, 49 }, { 29, 31, 37, 43 } };
-
-	virtual const char  *ITEMS_DIALOG_TEXT1() = 0;
-	virtual const char  *ITEMS_DIALOG_TEXT2() = 0;
-	virtual const char  *ITEMS_DIALOG_LINE1() = 0;
-	virtual const char  *ITEMS_DIALOG_LINE2() = 0;
-	virtual const char  *BTN_BUY() = 0;
-	virtual const char  *BTN_SELL() = 0;
-	virtual const char  *BTN_IDENTIFY() = 0;
-	virtual const char  *BTN_FIX() = 0;
-	virtual const char  *BTN_USE() = 0;
-	virtual const char  *BTN_EQUIP() = 0;
-	virtual const char  *BTN_REMOVE() = 0;
-	virtual const char  *BTN_DISCARD() = 0;
-	virtual const char  *BTN_QUEST() = 0;
-	virtual const char  *BTN_ENCHANT() = 0;
-	virtual const char  *BTN_RECHARGE() = 0;
-	virtual const char  *BTN_GOLD() = 0;
-	virtual const char  *ITEM_BROKEN() = 0;
-	virtual const char  *ITEM_CURSED() = 0;
-	virtual const char  *ITEM_OF() = 0;
-	virtual const char **BONUS_NAMES() = 0;
-	virtual const char **WEAPON_NAMES() = 0;
-	virtual const char **ARMOR_NAMES() = 0;
-	virtual const char **ACCESSORY_NAMES() = 0;
-	virtual const char **MISC_NAMES() = 0;
-	virtual const char **SPECIAL_NAMES() = 0;
-	virtual const char **ELEMENTAL_NAMES() = 0;
-	virtual const char **ATTRIBUTE_NAMES() = 0;
-	virtual const char **EFFECTIVENESS_NAMES() = 0;
-	virtual const char **QUEST_ITEM_NAMES() = 0;
-	virtual const char **QUEST_ITEM_NAMES_SWORDS() = 0;
-
-	const int WEAPON_BASE_COSTS[35] = {
-		0, 50, 15, 100, 80, 40, 60, 1, 10, 150, 30, 60, 8, 50,
-		100, 15, 30, 15, 200, 80, 250, 150, 400, 100, 40, 120,
-		300, 100, 200, 300, 25, 100, 50, 15, 0
-	};
-	const int ARMOR_BASE_COSTS[14] = {
-		0, 20, 100, 200, 400, 600, 1000, 2000, 100, 60, 40, 250, 200, 100
-	};
-	const int ACCESSORY_BASE_COSTS[11] = {
-		0, 100, 100, 250, 100, 50, 300, 200, 500, 1000, 2000
-	};
-	const int MISC_MATERIAL_COSTS[22] = {
-		0, 50, 1000, 500, 10, 100, 20, 10, 50, 10, 10, 100,
-		1, 1, 1, 1, 1, 1, 1, 1, 1, 1
-	};
-	const int MISC_BASE_COSTS[76] = {
-		0, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
-		100, 100, 100, 100, 200, 200, 200, 200, 200, 200, 200, 200,
-		200, 200, 200, 200, 200, 200, 200, 300, 300, 300, 300, 300,
-		300, 300, 300, 300, 300, 400, 400, 400, 400, 400, 400, 400,
-		400, 400, 400, 500, 500, 500, 500, 500, 500, 500, 500, 500,
-		500, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,
-		600, 600, 600, 600
-	};
-	const int METAL_BASE_MULTIPLIERS[22] = {
-		10, 25, 5, 75, 2, 5, 10, 20, 50, 2, 3, 5, 10, 20, 30, 40,
-		50, 60, 70, 80, 90, 100
-	};
-	const int ITEM_SKILL_DIVISORS[4] = { 1, 2, 100, 10 };
-
-	const int RESTRICTION_OFFSETS[4] = { 0, 35, 49, 60 };
-
-	const int ITEM_RESTRICTIONS[86] = {
-		0, 86, 86, 86, 86, 86, 86, 0, 6, 239, 239, 239, 2, 4, 4, 4, 4,
-		6, 70, 70, 70, 70, 94, 70, 0, 4, 239, 86, 86, 86, 70, 70, 70, 70,
-		0, 0, 0, 68, 100, 116, 125, 255, 255, 85, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-	};
-
-	virtual const char  *NOT_PROFICIENT() = 0;
-	virtual const char  *NO_ITEMS_AVAILABLE() = 0;
-	virtual const char **CATEGORY_NAMES() = 0;
-	virtual const char  *X_FOR_THE_Y() = 0;
-	virtual const char  *X_FOR_Y() = 0;
-	virtual const char  *X_FOR_Y_GOLD() = 0;
-	virtual const char  *FMT_CHARGES() = 0;
-	virtual const char  *AVAILABLE_GOLD_COST() = 0;
-	virtual const char  *CHARGES() = 0;
-	virtual const char  *COST() = 0;
-	virtual const char **ITEM_ACTIONS() = 0;
-	virtual const char  *WHICH_ITEM() = 0;
-	virtual const char  *WHATS_YOUR_HURRY() = 0;
-	virtual const char  *USE_ITEM_IN_COMBAT() = 0;
-	virtual const char  *NO_SPECIAL_ABILITIES() = 0;
-	virtual const char  *CANT_CAST_WHILE_ENGAGED() = 0;
-	virtual const char  *EQUIPPED_ALL_YOU_CAN() = 0;
-	virtual const char  *REMOVE_X_TO_EQUIP_Y() = 0;
-	virtual const char  *RING() = 0;
-	virtual const char  *MEDAL() = 0;
-	virtual const char  *CANNOT_REMOVE_CURSED_ITEM() = 0;
-	virtual const char  *CANNOT_DISCARD_CURSED_ITEM() = 0;
-	virtual const char  *PERMANENTLY_DISCARD() = 0;
-	virtual const char  *BACKPACK_IS_FULL() = 0;
-	virtual const char **CATEGORY_BACKPACK_IS_FULL() = 0;
-	virtual const char  *BUY_X_FOR_Y_GOLD() = 0;
-	virtual const char  *SELL_X_FOR_Y_GOLD() = 0;
-	virtual const char **SELL_X_FOR_Y_GOLD_ENDINGS() = 0;
-	virtual const char  *NO_NEED_OF_THIS() = 0;
-	virtual const char  *NOT_RECHARGABLE() = 0;
-	virtual const char  *NOT_ENCHANTABLE() = 0;
-	virtual const char  *SPELL_FAILED() = 0;
-	virtual const char  *ITEM_NOT_BROKEN() = 0;
-	virtual const char **FIX_IDENTIFY() = 0;
-	virtual const char  *FIX_IDENTIFY_GOLD() = 0;
-	virtual const char  *IDENTIFY_ITEM_MSG() = 0;
-	virtual const char  *ITEM_DETAILS() = 0;
-	virtual const char  *ALL() = 0;
-	virtual const char  *FIELD_NONE() = 0;
-	virtual const char  *DAMAGE_X_TO_Y() = 0;
-	virtual const char  *ELEMENTAL_XY_DAMAGE() = 0;
-	virtual const char  *ATTR_XY_BONUS() = 0;
-	virtual const char  *EFFECTIVE_AGAINST() = 0;
-	virtual const char  *QUESTS_DIALOG_TEXT() = 0;
-	virtual const char  *CLOUDS_OF_XEEN_LINE() = 0;
-	virtual const char  *DARKSIDE_OF_XEEN_LINE() = 0;
-	virtual const char  *SWORDS_OF_XEEN_LINE() = 0;
-	virtual const char  *NO_QUEST_ITEMS() = 0;
-	virtual const char  *NO_CURRENT_QUESTS() = 0;
-	virtual const char  *NO_AUTO_NOTES() = 0;
-	virtual const char  *QUEST_ITEMS_DATA() = 0;
-	virtual const char  *CURRENT_QUESTS_DATA() = 0;
-	virtual const char  *AUTO_NOTES_DATA() = 0;
-	virtual const char  *REST_COMPLETE() = 0;
-	virtual const char  *PARTY_IS_STARVING() = 0;
-	virtual const char  *HIT_SPELL_POINTS_RESTORED() = 0;
-	virtual const char  *TOO_DANGEROUS_TO_REST() = 0;
-	virtual const char  *SOME_CHARS_MAY_DIE() = 0;
-	virtual const char  *DISMISS_WHOM() = 0;
-	virtual const char  *CANT_DISMISS_LAST_CHAR() = 0;
-	virtual const char  *DELETE_CHAR_WITH_ELDER_WEAPON() = 0;
-	virtual const char **REMOVE_DELETE() = 0;
-	virtual const char  *REMOVE_OR_DELETE_WHICH() = 0;
-	virtual const char  *YOUR_PARTY_IS_FULL() = 0;
-	virtual const char  *HAS_SLAYER_SWORD() = 0;
-	virtual const char  *SURE_TO_DELETE_CHAR() = 0;
-	virtual const char  *CREATE_CHAR_DETAILS() = 0;
-	virtual const char  *NEW_CHAR_STATS() = 0;
-	virtual const char  *NAME_FOR_NEW_CHARACTER() = 0;
-	virtual const char  *SELECT_CLASS_BEFORE_SAVING() = 0;
-	virtual const char  *EXCHANGE_ATTR_WITH() = 0;
-
-	const int NEW_CHAR_SKILLS[10] = { 1, 5, -1, -1, 4, 0, 0, -1, 6, 11 };
-	const int NEW_CHAR_SKILLS_OFFSET[10] = { 0, 0, 0, 5, 0, 0, 0, 0, 0, 0 };
-	const int NEW_CHAR_SKILLS_LEN[10] = { 11, 8, 0, 0, 12, 8, 8, 0, 9, 11 };
-	const int NEW_CHAR_RACE_SKILLS[10] = { 14, -1, 17, 16, -1, 0, 0, 0, 0, 0 };
-
-	const int RACE_MAGIC_RESISTENCES[5] = { 7, 5, 20, 0, 0 };
-	const int RACE_FIRE_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
-	const int RACE_ELECTRIC_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
-	const int RACE_COLD_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
-	const int RACE_ENERGY_RESISTENCES[5] = { 7, 5, 2, 5, 0 };
-	const int RACE_POISON_RESISTENCES[5] = { 7, 0, 2, 20, 0 };
-	const int NEW_CHARACTER_SPELLS[10][4] = {
-		{ -1, -1, -1, -1 },
-		{ 21, -1, -1, -1 },
-		{ 22, -1, -1, -1 },
-		{ 21, 1, 14, -1 },
-		{ 22, 0, 25, -1 },
-		{ -1, -1, -1, -1 },
-		{ -1, -1, -1, -1 },
-		{ -1, -1, -1, -1 },
-		{ 20, 1, 11, 23 },
-		{ 20, 1, -1, -1 }
-	};
-
-	virtual const char  *COMBAT_DETAILS() = 0;
-	virtual const char  *NOT_ENOUGH_TO_CAST() = 0;
-	virtual const char **SPELL_CAST_COMPONENTS() = 0;
-	virtual const char  *CAST_SPELL_DETAILS() = 0;
-	virtual const char  *PARTY_FOUND() = 0;
-	virtual const char  *BACKPACKS_FULL_PRESS_KEY() = 0;
-	virtual const char  *HIT_A_KEY() = 0;
-	virtual const char  *GIVE_TREASURE_FORMATTING() = 0;
-	virtual const char  *X_FOUND_Y() = 0;
-	virtual const char  *ON_WHO() = 0;
-	virtual const char  *WHICH_ELEMENT1() = 0;
-	virtual const char  *WHICH_ELEMENT2() = 0;
-	virtual const char  *DETECT_MONSTERS() = 0;
-	virtual const char  *LLOYDS_BEACON() = 0;
-	virtual const char  *HOW_MANY_SQUARES() = 0;
-	virtual const char  *TOWN_PORTAL() = 0;
-	virtual const char  *TOWN_PORTAL_SWORDS() = 0;
-
-	const int TOWN_MAP_NUMBERS[3][5] = {
-		{ 28, 29, 30, 31, 32 }, { 29, 31, 33, 35, 37 }, { 53, 92, 63, 0, 0 }
-	};
-
-	virtual const char  *MONSTER_DETAILS() = 0;
-	virtual const char **MONSTER_SPECIAL_ATTACKS() = 0;
-	virtual const char  *IDENTIFY_MONSTERS() = 0;
-
-	const char *const EVENT_SAMPLES[6] = {
-		"ahh.voc", "whereto.voc", "gulp.voc", "null.voc", "scream.voc", "laff1.voc"
-	};
-
-	virtual const char  *MOONS_NOT_ALIGNED() = 0;
-	virtual const char  *AWARDS_FOR() = 0;
-	virtual const char  *AWARDS_TEXT() = 0;
-	virtual const char  *NO_AWARDS() = 0;
-	virtual const char  *WARZONE_BATTLE_MASTER() = 0;
-	virtual const char  *WARZONE_MAXED() = 0;
-	virtual const char  *WARZONE_LEVEL() = 0;
-	virtual const char  *WARZONE_HOW_MANY() = 0;
-	virtual const char  *PICKS_THE_LOCK() = 0;
-	virtual const char  *UNABLE_TO_PICK_LOCK() = 0;
-	virtual const char  *CONTROL_PANEL_TEXT() = 0;
-	virtual const char  *CONTROL_PANEL_BUTTONS() = 0;
-	virtual const char  *ON() = 0;
-	virtual const char  *OFF() = 0;
-	virtual const char  *CONFIRM_QUIT() = 0;
-	virtual const char  *MR_WIZARD() = 0;
-	virtual const char  *NO_LOADING_IN_COMBAT() = 0;
-	virtual const char  *NO_SAVING_IN_COMBAT() = 0;
-	virtual const char  *QUICK_FIGHT_TEXT() = 0;
-	virtual const char **QUICK_FIGHT_OPTIONS() = 0;
-	virtual const char **WORLD_END_TEXT() = 0;
-	virtual const char  *WORLD_CONGRATULATIONS() = 0;
-	virtual const char  *WORLD_CONGRATULATIONS2() = 0;
-	virtual const char  *CLOUDS_CONGRATULATIONS1() = 0;
-	virtual const char  *CLOUDS_CONGRATULATIONS2() = 0;
-	virtual const char **GOOBER() = 0;
-
-	const char *const MUSIC_FILES1[5] = {
-		"outdoors.m", "town.m", "cavern.m", "dungeon.m", "castle.m"
-	};
-
-	const char *const MUSIC_FILES2[6][7] = {
-		{ "outday1.m", "outday2.m", "outday4.m", "outnght1.m",
-		"outnght2.m", "outnght4.m", "daydesrt.m" },
-		{ "townday1.m", "twnwlk.m", "newbrigh.m", "twnnitea.m",
-		"twnniteb.m", "twnwlk.m", "townday1.m" },
-		{ "cavern1.m", "cavern2.m", "cavern3a.m", "cavern1.m",
-		"cavern2.m", "cavern3a.m", "cavern1.m" },
-		{ "dngon1.m", "dngon2.m", "dngon3.m", "dngon1.m",
-		"dngon2.m", "dngon3.m", "dngon1.m" },
-		{ "cstl1rev.m", "cstl2rev.m", "cstl3rev.m", "cstl1rev.m",
-		"cstl2rev.m", "cstl3rev.m", "cstl1rev.m" },
-		{ "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m" }
-	};
-
-	virtual const char *DIFFICULTY_TEXT() = 0;
-	virtual const char *SAVE_OFF_LIMITS() = 0;
-	virtual const char *CLOUDS_INTRO1() = 0;
-	virtual const char *DARKSIDE_ENDING1() = 0;
-	virtual const char *DARKSIDE_ENDING2() = 0;
-	virtual const char *PHAROAH_ENDING_TEXT1() = 0;
-	virtual const char *PHAROAH_ENDING_TEXT2() = 0;
-
-	void writeConstants(Common::String num, CCArchive &cc) {
-		Common::MemFile file;
-		file.syncString(CLOUDS_CREDITS());
-		file.syncString(DARK_SIDE_CREDITS());
-		file.syncString(SWORDS_CREDITS1());
-		file.syncString(SWORDS_CREDITS2());
-		file.syncString(OPTIONS_MENU());
-		file.syncStrings(GAME_NAMES(), 3);
-		delete[] _gameNames;
-		_gameNames = NULL;
-		file.syncString(THE_PARTY_NEEDS_REST());
-		file.syncString(WHO_WILL());
-		file.syncString(HOW_MUCH());
-		file.syncString(WHATS_THE_PASSWORD());
-		file.syncString(PASSWORD_INCORRECT());
-		file.syncString(IN_NO_CONDITION());
-		file.syncString(NOTHING_HERE());
-		file.syncStrings(TERRAIN_TYPES, 6);
-		file.syncStrings(OUTDOORS_WALL_TYPES, 16);
-		file.syncStrings(SURFACE_NAMES, 16);
-		file.syncStrings(WHO_ACTIONS(), 32);
-		delete[] _whoActions;
-		_whoActions = NULL;
-		file.syncStrings(WHO_WILL_ACTIONS(), 4);
-		delete[] _whoWillActions;
-		_whoWillActions = NULL;
-		file.syncBytes2D((const byte *)SYMBOLS, 20, 64);
-		file.syncBytes2D((const byte *)TEXT_COLORS, 40, 4);
-		file.syncBytes2D((const byte *)TEXT_COLORS_STARTUP, 40, 4);
-		file.syncStrings(DIRECTION_TEXT_UPPER(), 4);
-		delete[] _directionTextUpper;
-		_directionTextUpper = NULL;
-		file.syncStrings(DIRECTION_TEXT(), 4);
-		delete[] _directionText;
-		_directionText = NULL;
-		file.syncStrings(RACE_NAMES(), 5);
-		delete[] _raceNames;
-		_raceNames = NULL;
-		file.syncNumbers(RACE_HP_BONUSES, 5);
-		file.syncNumbers2D((const int *)RACE_SP_BONUSES, 5, 2);
-		file.syncStrings(CLASS_NAMES(), 11);
-		delete[] _classNames;
-		_classNames = NULL;
-		file.syncNumbers(CLASS_EXP_LEVELS, 10);
-		file.syncStrings(ALIGNMENT_NAMES(), 3);
-		delete[] _alignmentNames;
-		_alignmentNames = NULL;
-		file.syncStrings(SEX_NAMES(), 2);
-		delete[] _sexNames;
-		_sexNames = NULL;
-		file.syncStrings(SKILL_NAMES(), 18);
-		delete[] _skillNames;
-		_skillNames = NULL;
-		file.syncStrings(CONDITION_NAMES(), 17);
-		delete[] _conditionNames;
-		_conditionNames = NULL;
-		file.syncNumbers(CONDITION_COLORS, 17);
-		file.syncString(GOOD());
-		file.syncString(BLESSED());
-		file.syncString(POWER_SHIELD());
-		file.syncString(HOLY_BONUS());
-		file.syncString(HEROISM());
-		file.syncString(IN_PARTY());
-		file.syncString(PARTY_DETAILS());
-		file.syncString(PARTY_DIALOG_TEXT());
-		file.syncNumbers(FACE_CONDITION_FRAMES, 17);
-		file.syncNumbers(CHAR_FACES_X, 6);
-		file.syncNumbers(HP_BARS_X, 6);
-		file.syncString(NO_ONE_TO_ADVENTURE_WITH());
-		file.syncBytes2D((const byte *)DARKNESS_XLAT, 3, 256);
-		file.syncString(YOUR_ROSTER_IS_FULL());
-		file.syncString(PLEASE_WAIT());
-		file.syncString(OOPS());
-		file.syncNumbers2D((const int *)SCREEN_POSITIONING_X, 4, 48);
-		file.syncNumbers2D((const int *)SCREEN_POSITIONING_Y, 4, 48);
-		file.syncNumbers(MONSTER_GRID_BITMASK, 12);
-		file.syncNumbers2D((const int *)INDOOR_OBJECT_X, 2, 12);
-		file.syncNumbers2D((const int *)MAP_OBJECT_Y, 2, 12);
-		file.syncNumbers(INDOOR_MONSTERS_Y, 4);
-		file.syncNumbers2D((const int *)OUTDOOR_OBJECT_X, 2, 12);
-		file.syncNumbers(OUTDOOR_MONSTER_INDEXES, 26);
-		file.syncNumbers(OUTDOOR_MONSTERS_Y, 26);
-		file.syncNumbers2D((const int *)DIRECTION_ANIM_POSITIONS, 4, 4);
-		file.syncBytes2D((const byte *)WALL_SHIFTS, 4, 48);
-		file.syncNumbers(DRAW_NUMBERS, 25);
-		file.syncNumbers2D((const int *)DRAW_FRAMES, 25, 2);
-		file.syncNumbers(COMBAT_FLOAT_X, 8);
-		file.syncNumbers(COMBAT_FLOAT_Y, 8);
-		file.syncNumbers2D((const int *)MONSTER_EFFECT_FLAGS, 15, 8);
-		file.syncNumbers2D((const int *)SPELLS_ALLOWED, 3, 40);
-		file.syncNumbers(BASE_HP_BY_CLASS, 10);
-		file.syncNumbers(AGE_RANGES, 10);
-		file.syncNumbers2D((const int *)AGE_RANGES_ADJUST, 2, 10);
-		file.syncNumbers(STAT_VALUES, 24);
-		file.syncNumbers(STAT_BONUSES, 24);
-		file.syncNumbers(ELEMENTAL_CATEGORIES, 6);
-		file.syncNumbers(ATTRIBUTE_CATEGORIES, 10);
-		file.syncNumbers(ATTRIBUTE_BONUSES, 72);
-		file.syncNumbers(ELEMENTAL_RESISTENCES, 37);
-		file.syncNumbers(ELEMENTAL_DAMAGE, 37);
-		file.syncNumbers(WEAPON_DAMAGE_BASE, 35);
-		file.syncNumbers(WEAPON_DAMAGE_MULTIPLIER, 35);
-		file.syncNumbers(METAL_DAMAGE, 22);
-		file.syncNumbers(METAL_DAMAGE_PERCENT, 22);
-		file.syncNumbers(METAL_LAC, 22);
-		file.syncNumbers(ARMOR_STRENGTHS, 14);
-		file.syncNumbers(MAKE_ITEM_ARR1, 6);
-		file.syncNumbers3D((const int *)MAKE_ITEM_ARR2, 6, 7, 2);
-		file.syncNumbers3D((const int *)MAKE_ITEM_ARR3, 10, 7, 2);
-		file.syncNumbers3D((const int *)MAKE_ITEM_ARR4, 2, 7, 2);
-		file.syncNumbers2D((const int *)MAKE_ITEM_ARR5, 8, 2);
-		file.syncNumbers(OUTDOOR_DRAWSTRUCT_INDEXES, 44);
-		file.syncNumbers2D((const int *)TOWN_MAXES, 2, 11);
-		file.syncStrings2D((const char *const *)TOWN_ACTION_MUSIC, 2, 7);
-		file.syncStrings(TOWN_ACTION_SHAPES, 7);
-		file.syncNumbers2D((const int *)TOWN_ACTION_FILES, 2, 7);
-		file.syncString(BANK_TEXT());
-		file.syncString(BLACKSMITH_TEXT());
-		file.syncString(GUILD_NOT_MEMBER_TEXT());
-		file.syncString(GUILD_TEXT());
-		file.syncString(TAVERN_TEXT());
-		file.syncString(GOOD_STUFF());
-		file.syncString(HAVE_A_DRINK());
-		file.syncString(YOURE_DRUNK());
-		file.syncNumbers4D((const int *)TAVERN_EXIT_LIST, 2, 6, 5, 2);
-		file.syncString(FOOD_AND_DRINK());
-		file.syncString(TEMPLE_TEXT());
-		file.syncString(EXPERIENCE_FOR_LEVEL());
-		file.syncString(TRAINING_LEARNED_ALL());
-		file.syncString(ELIGIBLE_FOR_LEVEL());
-		file.syncString(TRAINING_TEXT());
-		file.syncString(GOLD_GEMS());
-		file.syncString(GOLD_GEMS_2());
-		file.syncStrings(DEPOSIT_WITHDRAWL(), 2);
-		delete[] _depositWithdrawl;
-		_depositWithdrawl = NULL;
-		file.syncString(NOT_ENOUGH_X_IN_THE_Y());
-		file.syncString(NO_X_IN_THE_Y());
-		file.syncStrings(STAT_NAMES(), 16);
-		delete[] _statNames;
-		_statNames = NULL;
-		file.syncStrings(CONSUMABLE_NAMES(), 4);
-		delete[] _consumableNames;
-		_consumableNames = NULL;
-		file.syncStrings(WHERE_NAMES(), 2);
-		delete[] _whereNames;
-		_whereNames = NULL;
-		file.syncString(AMOUNT());
-		file.syncString(FOOD_PACKS_FULL());
-		file.syncString(BUY_SPELLS());
-		file.syncString(GUILD_OPTIONS());
-		file.syncNumbers((const int *)MISC_SPELL_INDEX, 74);
-		file.syncNumbers((const int *)SPELL_COSTS, 77);
-		file.syncNumbers2D((const int *)CLOUDS_GUILD_SPELLS, 5, 20);
-		file.syncNumbers2D((const int *)DARK_SPELL_OFFSETS, 3, 39);
-		file.syncNumbers2D((const int *)DARK_SPELL_RANGES, 12, 2);
-		file.syncNumbers2D((const int *)SWORDS_SPELL_RANGES, 12, 2);
-		file.syncNumbers((const int *)SPELL_GEM_COST, 77);
-		file.syncString(NOT_A_SPELL_CASTER());
-		file.syncString(SPELLS_LEARNED_ALL());
-		file.syncString(SPELLS_FOR());
-		file.syncString(SPELL_LINES_0_TO_9());
-		file.syncString(SPELLS_DIALOG_SPELLS());
-		file.syncString(SPELL_PTS());
-		file.syncString(GOLD());
-		file.syncString(SPELL_INFO());
-		file.syncString(SPELL_PURCHASE());
-		file.syncString(MAP_TEXT());
-		file.syncString(LIGHT_COUNT_TEXT());
-		file.syncString(FIRE_RESISTENCE_TEXT());
-		file.syncString(ELECRICITY_RESISTENCE_TEXT());
-		file.syncString(COLD_RESISTENCE_TEXT());
-		file.syncString(POISON_RESISTENCE_TEXT());
-		file.syncString(CLAIRVOYANCE_TEXT());
-		file.syncString(LEVITATE_TEXT());
-		file.syncString(WALK_ON_WATER_TEXT());
-		file.syncString(GAME_INFORMATION());
-		file.syncString(WORLD_GAME_TEXT());
-		file.syncString(DARKSIDE_GAME_TEXT());
-		file.syncString(CLOUDS_GAME_TEXT());
-		file.syncString(SWORDS_GAME_TEXT());
-		file.syncStrings(WEEK_DAY_STRINGS(), 10);
-		delete[] _weekDayStrings;
-		_weekDayStrings = NULL;
-		file.syncString(CHARACTER_DETAILS());
-		file.syncStrings(DAYS(), 3);
-		file.syncString(PARTY_GOLD());
-		file.syncString(PLUS_14());
-		file.syncString(CHARACTER_TEMPLATE());
-		file.syncString(EXCHANGING_IN_COMBAT());
-		file.syncString(CURRENT_MAXIMUM_RATING_TEXT());
-		file.syncString(CURRENT_MAXIMUM_TEXT());
-		file.syncStrings(RATING_TEXT(), 24);
-		delete[] _ratingText;
-		_ratingText = NULL;
-		file.syncString(AGE_TEXT());
-		file.syncString(LEVEL_TEXT());
-		file.syncString(RESISTENCES_TEXT());
-		file.syncString(NONE());
-		file.syncString(EXPERIENCE_TEXT());
-		file.syncString(ELIGIBLE());
-		file.syncString(IN_PARTY_IN_BANK());
-		file.syncString(FOOD_TEXT());
-		file.syncString(EXCHANGE_WITH_WHOM());
-		file.syncString(QUICK_REF_LINE());
-		file.syncString(QUICK_REFERENCE());
-		file.syncNumbers2D((const int *)BLACKSMITH_MAP_IDS, 2, 4);
-		file.syncString(ITEMS_DIALOG_TEXT1());
-		file.syncString(ITEMS_DIALOG_TEXT2());
-		file.syncString(ITEMS_DIALOG_LINE1());
-		file.syncString(ITEMS_DIALOG_LINE2());
-		file.syncString(BTN_BUY());
-		file.syncString(BTN_SELL());
-		file.syncString(BTN_IDENTIFY());
-		file.syncString(BTN_FIX());
-		file.syncString(BTN_USE());
-		file.syncString(BTN_EQUIP());
-		file.syncString(BTN_REMOVE());
-		file.syncString(BTN_DISCARD());
-		file.syncString(BTN_QUEST());
-		file.syncString(BTN_ENCHANT());
-		file.syncString(BTN_RECHARGE());
-		file.syncString(BTN_GOLD());
-		file.syncString(ITEM_BROKEN());
-		file.syncString(ITEM_CURSED());
-		file.syncString(ITEM_OF());
-		file.syncStrings(BONUS_NAMES(), 7);
-		delete[] _bonusNames;
-		_bonusNames = NULL;
-		file.syncStrings(WEAPON_NAMES(), 41);
-		delete[] _weaponNames;
-		_weaponNames = NULL;
-		file.syncStrings(ARMOR_NAMES(), 14);
-		delete[] _armorNames;
-		_armorNames = NULL;
-		file.syncStrings(ACCESSORY_NAMES(), 11);
-		delete[] _accessoryNames;
-		_accessoryNames = NULL;
-		file.syncStrings(MISC_NAMES(), 22);
-		delete[] _miscNames;
-		_miscNames = NULL;
-		file.syncStrings(SPECIAL_NAMES(), 74);
-		delete[] _specialNames;
-		_specialNames = NULL;
-		file.syncStrings(ELEMENTAL_NAMES(), 6);
-		delete[] _elementalNames;
-		_elementalNames = NULL;
-		file.syncStrings(ATTRIBUTE_NAMES(), 10);
-		delete[] _attributeNames;
-		_attributeNames = NULL;
-		file.syncStrings(EFFECTIVENESS_NAMES(), 7);
-		delete[] _effectivenessNames;
-		_effectivenessNames = NULL;
-		file.syncStrings(QUEST_ITEM_NAMES(), 85);
-		delete[] _questItemNames;
-		_questItemNames = NULL;
-		file.syncStrings(QUEST_ITEM_NAMES_SWORDS(), 51);
-		delete[] _questItemNamesSwords;
-		_questItemNamesSwords = NULL;
-		file.syncNumbers((const int *)WEAPON_BASE_COSTS, 35);
-		file.syncNumbers((const int *)ARMOR_BASE_COSTS, 14);
-		file.syncNumbers((const int *)ACCESSORY_BASE_COSTS, 11);
-		file.syncNumbers((const int *)MISC_MATERIAL_COSTS, 22);
-		file.syncNumbers((const int *)MISC_BASE_COSTS, 76);
-		file.syncNumbers((const int *)METAL_BASE_MULTIPLIERS, 22);
-		file.syncNumbers((const int *)ITEM_SKILL_DIVISORS, 4);
-		file.syncNumbers((const int *)RESTRICTION_OFFSETS, 4);
-		file.syncNumbers((const int *)ITEM_RESTRICTIONS, 86);
-		file.syncString(NOT_PROFICIENT());
-		file.syncString(NO_ITEMS_AVAILABLE());
-		file.syncStrings(CATEGORY_NAMES(), 4);
-		delete[] _categoryNames;
-		_categoryNames = NULL;
-		file.syncString(X_FOR_THE_Y());
-		file.syncString(X_FOR_Y());
-		file.syncString(X_FOR_Y_GOLD());
-		file.syncString(FMT_CHARGES());
-		file.syncString(AVAILABLE_GOLD_COST());
-		file.syncString(CHARGES());
-		file.syncString(COST());
-		file.syncStrings(ITEM_ACTIONS(), 7);
-		delete[] _itemActions;
-		_itemActions = NULL;
-		file.syncString(WHICH_ITEM());
-		file.syncString(WHATS_YOUR_HURRY());
-		file.syncString(USE_ITEM_IN_COMBAT());
-		file.syncString(NO_SPECIAL_ABILITIES());
-		file.syncString(CANT_CAST_WHILE_ENGAGED());
-		file.syncString(EQUIPPED_ALL_YOU_CAN());
-		file.syncString(REMOVE_X_TO_EQUIP_Y());
-		file.syncString(RING());
-		file.syncString(MEDAL());
-		file.syncString(CANNOT_REMOVE_CURSED_ITEM());
-		file.syncString(CANNOT_DISCARD_CURSED_ITEM());
-		file.syncString(PERMANENTLY_DISCARD());
-		file.syncString(BACKPACK_IS_FULL());
-		file.syncStrings(CATEGORY_BACKPACK_IS_FULL(), 4);
-		file.syncString(BUY_X_FOR_Y_GOLD());
-		file.syncString(SELL_X_FOR_Y_GOLD());
-		file.syncStrings(SELL_X_FOR_Y_GOLD_ENDINGS(), 2);
-		delete[] _sellXForYGoldEndings;
-		_sellXForYGoldEndings = NULL;
-		file.syncString(NO_NEED_OF_THIS());
-		file.syncString(NOT_RECHARGABLE());
-		file.syncString(SPELL_FAILED());
-		file.syncString(NOT_ENCHANTABLE());
-		file.syncString(ITEM_NOT_BROKEN());
-		file.syncStrings(FIX_IDENTIFY(), 2);
-		delete[] _fixIdentify;
-		_fixIdentify = NULL;
-		file.syncString(FIX_IDENTIFY_GOLD());
-		file.syncString(IDENTIFY_ITEM_MSG());
-		file.syncString(ITEM_DETAILS());
-		file.syncString(ALL());
-		file.syncString(FIELD_NONE());
-		file.syncString(DAMAGE_X_TO_Y());
-		file.syncString(ELEMENTAL_XY_DAMAGE());
-		file.syncString(ATTR_XY_BONUS());
-		file.syncString(EFFECTIVE_AGAINST());
-		file.syncString(QUESTS_DIALOG_TEXT());
-		file.syncString(CLOUDS_OF_XEEN_LINE());
-		file.syncString(DARKSIDE_OF_XEEN_LINE());
-		file.syncString(SWORDS_OF_XEEN_LINE());
-		file.syncString(NO_QUEST_ITEMS());
-		file.syncString(NO_CURRENT_QUESTS());
-		file.syncString(NO_AUTO_NOTES());
-		file.syncString(QUEST_ITEMS_DATA());
-		file.syncString(CURRENT_QUESTS_DATA());
-		file.syncString(AUTO_NOTES_DATA());
-		file.syncString(REST_COMPLETE());
-		file.syncString(PARTY_IS_STARVING());
-		file.syncString(HIT_SPELL_POINTS_RESTORED());
-		file.syncString(TOO_DANGEROUS_TO_REST());
-		file.syncString(SOME_CHARS_MAY_DIE());
-		file.syncString(DISMISS_WHOM());
-		file.syncString(CANT_DISMISS_LAST_CHAR());
-		file.syncString(DELETE_CHAR_WITH_ELDER_WEAPON());
-		file.syncStrings(REMOVE_DELETE(), 2);
-		delete[] _removeDelete;
-		_removeDelete = NULL;
-		file.syncString(REMOVE_OR_DELETE_WHICH());
-		file.syncString(YOUR_PARTY_IS_FULL());
-		file.syncString(HAS_SLAYER_SWORD());
-		file.syncString(SURE_TO_DELETE_CHAR());
-		file.syncString(CREATE_CHAR_DETAILS());
-		file.syncString(NEW_CHAR_STATS());
-		file.syncString(NAME_FOR_NEW_CHARACTER());
-		file.syncString(SELECT_CLASS_BEFORE_SAVING());
-		file.syncString(EXCHANGE_ATTR_WITH());
-		file.syncNumbers((const int *)NEW_CHAR_SKILLS, 10);
-		file.syncNumbers((const int *)NEW_CHAR_SKILLS_OFFSET, 10);
-		file.syncNumbers((const int *)NEW_CHAR_SKILLS_LEN, 10);
-		file.syncNumbers((const int *)NEW_CHAR_RACE_SKILLS, 10);
-		file.syncNumbers((const int *)RACE_MAGIC_RESISTENCES, 5);
-		file.syncNumbers((const int *)RACE_FIRE_RESISTENCES, 5);
-		file.syncNumbers((const int *)RACE_ELECTRIC_RESISTENCES, 5);
-		file.syncNumbers((const int *)RACE_COLD_RESISTENCES, 5);
-		file.syncNumbers((const int *)RACE_ENERGY_RESISTENCES, 5);
-		file.syncNumbers((const int *)RACE_POISON_RESISTENCES, 5);
-		file.syncNumbers2D((const int *)NEW_CHARACTER_SPELLS, 10, 4);
-		file.syncString(COMBAT_DETAILS());
-		file.syncString(NOT_ENOUGH_TO_CAST());
-		file.syncStrings(SPELL_CAST_COMPONENTS(), 2);
-		delete[] _spellCastComponents;
-		_spellCastComponents = NULL;
-		file.syncString(CAST_SPELL_DETAILS());
-		file.syncString(PARTY_FOUND());
-		file.syncString(BACKPACKS_FULL_PRESS_KEY());
-		file.syncString(HIT_A_KEY());
-		file.syncString(GIVE_TREASURE_FORMATTING());
-		file.syncString(X_FOUND_Y());
-		file.syncString(ON_WHO());
-		file.syncString(WHICH_ELEMENT1());
-		file.syncString(WHICH_ELEMENT2());
-		file.syncString(DETECT_MONSTERS());
-		file.syncString(LLOYDS_BEACON());
-		file.syncString(HOW_MANY_SQUARES());
-		file.syncString(TOWN_PORTAL());
-		file.syncString(TOWN_PORTAL_SWORDS());
-		file.syncNumbers2D((const int *)TOWN_MAP_NUMBERS, 3, 5);
-		file.syncString(MONSTER_DETAILS());
-		file.syncStrings(MONSTER_SPECIAL_ATTACKS(), 23);
-		delete[] _monsterSpecialAttacks;
-		_monsterSpecialAttacks = NULL;
-		file.syncString(IDENTIFY_MONSTERS());
-		file.syncStrings(EVENT_SAMPLES, 6);
-		file.syncString(MOONS_NOT_ALIGNED());
-		file.syncString(AWARDS_FOR());
-		file.syncString(AWARDS_TEXT());
-		file.syncString(NO_AWARDS());
-		file.syncString(WARZONE_BATTLE_MASTER());
-		file.syncString(WARZONE_MAXED());
-		file.syncString(WARZONE_LEVEL());
-		file.syncString(WARZONE_HOW_MANY());
-		file.syncString(PICKS_THE_LOCK());
-		file.syncString(UNABLE_TO_PICK_LOCK());
-		file.syncString(CONTROL_PANEL_TEXT());
-		file.syncString(CONTROL_PANEL_BUTTONS());
-		file.syncString(ON());
-		file.syncString(OFF());
-		file.syncString(CONFIRM_QUIT());
-		file.syncString(MR_WIZARD());
-		file.syncString(NO_LOADING_IN_COMBAT());
-		file.syncString(NO_SAVING_IN_COMBAT());
-		file.syncString(QUICK_FIGHT_TEXT());
-		file.syncStrings(QUICK_FIGHT_OPTIONS(), 4);
-		delete[] _quickFightOptions;
-		_quickFightOptions = NULL;
-		file.syncStrings(WORLD_END_TEXT(), 9);
-		delete[] _worldEndText;
-		_worldEndText = NULL;
-		file.syncString(WORLD_CONGRATULATIONS());
-		file.syncString(WORLD_CONGRATULATIONS2());
-		file.syncString(CLOUDS_CONGRATULATIONS1());
-		file.syncString(CLOUDS_CONGRATULATIONS2());
-		file.syncStrings(GOOBER(), 3);
-		delete[] _goober;
-		_goober = NULL;
-		file.syncStrings(MUSIC_FILES1, 5);
-		file.syncStrings2D((const char* const *)MUSIC_FILES2, 6, 7);
-		file.syncString(DIFFICULTY_TEXT());
-		file.syncString(SAVE_OFF_LIMITS());
-		file.syncString(CLOUDS_INTRO1());
-		file.syncString(DARKSIDE_ENDING1());
-		file.syncString(DARKSIDE_ENDING2());
-		file.syncString(PHAROAH_ENDING_TEXT1());
-		file.syncString(PHAROAH_ENDING_TEXT2());
-
-		cc.add("CONSTANTS" + num, file);
-	}
-};
-
-class EN : public LangConstants {
-public:
-	const char *CLOUDS_CREDITS() {
-		return "\v012\t000\x3"
-			   "c\f35Designed and Directed By:\n"
-			   "\f17Jon Van Caneghem\x3l\n"
-			   "\n"
-			   "\t025\f35Programming:\n"
-			   "\t035\f17Mark Caldwell\n"
-			   "\t035Dave Hathaway\n"
-			   "\n"
-			   "\t025\f35Sound System & FX:\n"
-			   "\t035\f17Todd Hendrix\n"
-			   "\n"
-			   "\t025\f35Music & Speech:\n"
-			   "\t035\f17Tim Tully\n"
-			   "\n"
-			   "\t025\f35Writing:\n"
-			   "\t035\f17Paul Rattner\n"
-			   "\t035Debbie Murphy\n"
-			   "\t035Jon Van Caneghem\v012\n"
-			   "\n"
-			   "\n"
-			   "\t180\f35Graphics:\n"
-			   "\t190\f17Louis Johnson\n"
-			   "\t190Jonathan P. Gwyn\n"
-			   "\t190Bonita Long-Hemsath\n"
-			   "\t190Julia Ulano\n"
-			   "\t190Ricardo Barrera\n"
-			   "\n"
-			   "\t180\f35Testing:\n"
-			   "\t190\f17Benjamin Bent\n"
-			   "\t190Mario Escamilla\n"
-			   "\t190Richard Espy\n"
-			   "\t190Scott McDaniel\n"
-			   "\t190Clayton Retzer\n"
-			   "\t190Michael Suarez\x3"
-			   "c";
-	}
-
-	const char *DARK_SIDE_CREDITS() {
-		return "\v012\t000\x3"
-			   "c\f35Designed and Directed By:\n"
-			   "\f17Jon Van Caneghem\x3l\n"
-			   "\n"
-			   "\t025\f35Programming:\n"
-			   "\t035\f17Mark Caldwell\n"
-			   "\t035Dave Hathaway\n"
-			   "\n"
-			   "\t025\f35Sound System & FX:\n"
-			   "\t035\f17Mike Heilemann\n"
-			   "\n"
-			   "\t025\f35Music & Speech:\n"
-			   "\t035\f17Tim Tully\n"
-			   "\n"
-			   "\t025\f35Writing:\n"
-			   "\t035\f17Paul Rattner\n"
-			   "\t035Debbie Van Caneghem\n"
-			   "\t035Jon Van Caneghem\v012\n"
-			   "\n"
-			   "\n"
-			   "\t180\f35Graphics:\n"
-			   "\t190\f17Jonathan P. Gwyn\n"
-			   "\t190Bonita Long-Hemsath\n"
-			   "\t190Julia Ulano\n"
-			   "\t190Ricardo Barrera\n"
-			   "\n"
-			   "\t180\f35Testing:\n"
-			   "\t190\f17Benjamin Bent\n"
-			   "\t190Christian Dailey\n"
-			   "\t190Mario Escamilla\n"
-			   "\t190Marco Hunter\n"
-			   "\t190Robert J. Lupo\n"
-			   "\t190Clayton Retzer\n"
-			   "\t190David Vela\x3"
-			   "c";
-	}
-
-	const char *SWORDS_CREDITS1() {
-		return "\v012\x3"
-			   "c\f35Published By New World Computing, Inc.\f17\n"
-			   "Developed By CATware, Inc.\x3l\n"
-			   "\f01Design and Direction\t180Series Created by\n"
-			   "\t020Bill Fawcett\t190John Van Caneghem\n"
-			   "\n"
-			   "\t010Story Contributions\t180Producer & Manual\n"
-			   "\t020Ellen Guon\t190Dean Rettig\n"
-			   "\n"
-			   "\t010Programming & Ideas\t180Original Programming\n"
-			   "\t020David Potter\t190Mark Caldwell\n"
-			   "\t020Rod Retterath\t190Dave Hathaway\n"
-			   "\n"
-			   "\t010Manual Illustrations\t180Graphic Artists\n"
-			   "\t020Todd Cameron Hamilton\t190Jonathan P. Gwyn\n"
-			   "\t020James Clouse\t190Bonnie Long-Hemsath\n"
-			   "\t190Julia Ulano\n"
-			   "\t190Ricardo Barrera\n";
-	}
-
-	const char *SWORDS_CREDITS2() {
-		return "\f05\v012\t000\x3l\n"
-			   "\t100Sound Programming\n"
-			   "\t110Todd Hendrix\n"
-			   "\n"
-			   "\t100Music\n"
-			   "\t110Tim Tully\n"
-			   "\t110Quality Assurance Manager\n"
-			   "\t110Peter Ryu\n"
-			   "\t100Testers\n"
-			   "\t110Walter Johnson\n"
-			   "\t110Bryan Farina\n"
-			   "\t110David Baton\n"
-			   "\t110Jack Nalls\n";
-	}
-
-	const char *OPTIONS_MENU() {
-		return "\r\x1\x3"
-			   "c\fdMight and Magic Options\n"
-			   "%s of Xeen\x2\n"
-			   "\v%.3dCopyright (c) %d NWC, Inc.\n"
-			   "All Rights Reserved\x1";
-	}
-
-	const char **GAME_NAMES() {
-		delete[] _gameNames;
-		_gameNames = new const char *[3] { "Clouds", "Darkside", "World" };
-		return _gameNames;
-	}
-
-	const char *THE_PARTY_NEEDS_REST() {
-		return "\v012The Party needs rest!";
-	}
-
-	const char *WHO_WILL() {
-		return "\x3""c\v000\t000%s\n\n"
-			   "Who will\n%s?\n\v055F1 - F%d";
-	}
-
-	const char *HOW_MUCH() {
-		return "\x3""cHow Much\n\n";
-	}
-
-	const char *WHATS_THE_PASSWORD() {
-		return "\x3""cWhat's the Password?\n"
-			   "\n"
-			   "Please turn to page %u, go to\n"
-			   "line %u, and type in word %u.\v067\t000Spaces are not counted as words or lines.  "
-			   "Hyphenated words are treated as one word.  Any line that has any text is considered a line."
-			   "\x3""c\v040\t000\n";
-	}
-	
-	const char *PASSWORD_INCORRECT() {
-		return "\x3""c\v040\n"
-			   "\f32Incorrect!\fd";
-	}
-	
-	const char *IN_NO_CONDITION() {
-		return "\v007%s is not in any condition to perform actions!";
-	}
-
-	const char *NOTHING_HERE() {
-		return "\x3""c\v010Nothing here.";
-	}
-
-	const char **WHO_ACTIONS() {
-		delete[] _whoActions;
-		_whoActions = new const char *[32] {
-			"search", "open", "drink", "mine", "touch", "read", "learn", "take",
-			"bang", "steal", "bribe", "pay", "sit", "try", "turn", "bathe",
-			"destroy", "pull", "descend", "toss a coin", "pray", "join", "act",
-			"play", "push", "rub", "pick", "eat", "sign", "close", "look", "try"
-		};
-		return _whoActions;
-	}
-
-	const char **WHO_WILL_ACTIONS() {
-		delete[] _whoWillActions;
-		_whoWillActions = new const char *[4] {
-			"Open Grate", "Open Door", "Open Scroll", "Select Char"
-		};
-		return _whoWillActions;
-	}
-
-	const char **DIRECTION_TEXT_UPPER() {
-		delete[] _directionTextUpper;
-		_directionTextUpper = new const char *[4] {"NORTH", "EAST", "SOUTH", "WEST"};
-		return _directionTextUpper;
-	}
-
-	const char **DIRECTION_TEXT() {
-		delete[] _directionText;
-		_directionText = new const char *[4] {"North", "East", "South", "West"};
-		return _directionText;
-	}
-
-	const char **RACE_NAMES() {
-		delete[] _raceNames;
-		_raceNames = new const char *[5] { "Human", "Elf", "Dwarf", "Gnome", "H-Orc" };
-		return _raceNames;
-	}
-
-	const char **ALIGNMENT_NAMES() {
-		delete[] _alignmentNames;
-		_alignmentNames = new const char *[3] { "Good", "Neutral", "Evil" };
-		return _alignmentNames;
-	}
-
-	const char **SEX_NAMES() {
-		delete[] _sexNames;
-		_sexNames = new const char *[2] { "Male", "Female" };
-		return _sexNames;
-	}
-
-	const char **SKILL_NAMES() {
-		delete[] _skillNames;
-		_skillNames = new const char *[18] {
-			"Thievery\t100", "Arms Master", "Astrologer", "Body Builder", "Cartographer",
-			"Crusader", "Direction Sense", "Linguist", "Merchant", "Mountaineer",
-			"Navigator", "Path Finder", "Prayer Master", "Prestidigitator",
-			"Swimmer", "Tracker", "Spot Secret Door", "Danger Sense"
-		};
-		return _skillNames;
-	}
-
-	const char **CLASS_NAMES() {
-		delete[] _classNames;
-		_classNames = new const char *[11] {
-			"Knight", "Paladin", "Archer", "Cleric", "Sorcerer", "Robber",
-			"Ninja", "Barbarian", "Druid", "Ranger", nullptr
-		};
-		return _classNames;
-	}
-
-	const char **CONDITION_NAMES() {
-		delete[] _conditionNames;
-		_conditionNames = new const char *[17] {
-			"Cursed", "Heart Broken", "Weak", "Poisoned", "Diseased",
-			"Insane", "In Love", "Drunk", "Asleep", "Depressed", "Confused",
-			"Paralyzed", "Unconscious", "Dead", "Stone", "Eradicated", "Good"
-		};
-		return _conditionNames;
-	}
-
-	const char *GOOD() {
-		return "Good";
-	}
-
-	const char *BLESSED() {
-		return "\n\t020Blessed\t095%+d";
-	}
-
-	const char *POWER_SHIELD() {
-		return "\n\t020Power Shield\t095%+d";
-	}
-
-	const char *HOLY_BONUS() {
-		return "\n\t020Holy Bonus\t095%+d";
-	}
-
-	const char *HEROISM() {
-		return "\n\t020Heroism\t095%+d";
-	}
-
-	const char *IN_PARTY() {
-		return "\014""15In Party\014""d";
-	}
-
-	const char *PARTY_DETAILS() {
-		return "\015\003l\002\014""00"
-			   "\013""001""\011""035%s"
-			   "\013""009""\011""035%s"
-			   "\013""017""\011""035%s"
-			   "\013""025""\011""035%s"
-			   "\013""001""\011""136%s"
-			   "\013""009""\011""136%s"
-			   "\013""017""\011""136%s"
-			   "\013""025""\011""136%s"
-			   "\013""044""\011""035%s"
-			   "\013""052""\011""035%s"
-			   "\013""060""\011""035%s"
-			   "\013""068""\011""035%s"
-			   "\013""044""\011""136%s"
-			   "\013""052""\011""136%s"
-			   "\013""060""\011""136%s"
-			   "\013""068""\011""136%s";
-	}
-
-	const char *PARTY_DIALOG_TEXT() {
-		return "%s\x2\x3""c\v106\t013Up\t048Down\t083\f37D\fdel\t118\f37R\fdem"
-			   "\t153\f37C\fdreate\t188E\f37x\fdit\x1";
-	}
-
-	const char *NO_ONE_TO_ADVENTURE_WITH() {
-		return "You have no one to adventure with";
-	}
-
-	const char *YOUR_ROSTER_IS_FULL() {
-		return "Your Roster is full!";
-	}
-
-	const char *PLEASE_WAIT() {
-		return "\014""d\003""c\011""000"
-			   "\013""002Please Wait...";
-	}
-
-	const char *OOPS() {
-		return "\003""c\011""000\013""002Oops...";
-	}
-
-	const char *BANK_TEXT() {
-		return "\r\x2\x3""c\v122\t013"
-			   "\f37D\fdep\t040\f37W\fdith\t067ESC"
-			   "\x1\t000\v000Bank of Xeen\v015\n"
-			   "Bank\x3l\n"
-			   "Gold\x3r\t000%s\x3l\n"
-			   "Gems\x3r\t000%s\x3""c\n"
-			   "\n"
-			   "Party\x3l\n"
-			   "Gold\x3r\t000%s\x3l\n"
-			   "Gems\x3r\t000%s";
-	}
-
-	const char *BLACKSMITH_TEXT() {
-		return "\x1\r\x3""c\v000\t000"
-			   "store options for\t039\v027%s\x3l\v046\n"
-			   "\t011\f37b\fdrowse\n"
-			   "\t000\v090gold\x3r\t000%s"
-			   "\x2\x3""c\v122\t040esc\x1";
-	}
-
-	const char *GUILD_NOT_MEMBER_TEXT() {
-		return "\n\nYou have to be a member to shop here.";
-	}
-
-	const char *GUILD_TEXT() {
-		return "\x3""c\v027\t039%s"
-			   "\x3l\v046\n"
-			   "\t012\f37B\fduy Spells\n"
-			   "\t012\f37S\fdpell Info";
-	}
-
-	const char *TAVERN_TEXT() {
-		return "\r\x3""c\v000\t000Tavern Options for\t039"
-			   "\v027%s%s\x3l\t000"
-			   "\v090Gold\x3r\t000%s\x2\x3""c\v122"
-			   "\t021\f37S\fdign in\t060ESC\x1";
-
-	}
-
-	const char *FOOD_AND_DRINK() {
-		return "\x3l\t017\v046\f37D\fdrink\n"
-			   "\t017\f37F\fdood\n"
-			   "\t017\f37T\fdip\n"
-			   "\t017\f37R\fdumors";
-	}
-
-	const char *GOOD_STUFF() {
-		return "\n"
-			   "\n"
-			   "Good Stuff\n"
-			   "\n"
-			   "Hit a key!";
-	}
-
-	const char *HAVE_A_DRINK() {
-		return "\n\nHave a Drink\n\nHit a key!";
-	}
-
-	const char *YOURE_DRUNK() {
-		return "\n\nYou're Drunk\n\nHit a key!";
-	}
-
-	const char *TEMPLE_TEXT() {
-		return "\r\x3""c\v000\t000Temple Options for"
-			   "\t039\v027%s\x3l\t000\v046"
-			   "\f37H\fdeal\x3r\t000%u\x3l\n"
-			   "\f37D\fdonation\x3r\t000%u\x3l\n"
-			   "\f37U\fdnCurse\x3r\t000%s"
-			   "\x3l\t000\v090Gold\x3r\t000%s"
-			   "\x2\x3""c\v122\t040ESC\x1";
-	}
-
-	const char *EXPERIENCE_FOR_LEVEL() {
-		return "%s needs %u experience for level %u.";
-	}
-
-	const char *TRAINING_LEARNED_ALL() {
-		return "%s has learned all we can teach!";
-	}
-
-	const char *ELIGIBLE_FOR_LEVEL() {
-		return "%s is eligible for level %u.\x3l\n"
-			   "\v081Cost\x3r\t000%u";
-	}
-
-	const char *TRAINING_TEXT() {
-		return "\r\x3""cTraining Options\n"
-			   "\n"
-			   "%s\x3l\v090\t000Gold\x3r\t000%s\x2\x3""c\v122\t021"
-			   "\f37T\fdrain\t060ESC\x1";
-	}
-
-	const char *GOLD_GEMS() {
-		return "\x3""c\v000\t000%s\x3l\n"
-			   "\n"
-			   "Gold\x3r\t000%s\x3l\n"
-			   "Gems\x3r\t000%s\x2\x3""c\v096\t013G\f37o\fdld\t040G\f37e\fdms\t067ESC\x1";
-	}
-
-	const char *GOLD_GEMS_2() {
-		return "\x3""c\v000\t000%s\x3l\n"
-			   "\n"
-			   "\x4""077Gold\x3r\t000%s\x3l\n"
-			   "\x4""077Gems\x3r\t000%s\x3l\t000\v051\x4""077\n"
-			   "\x4""077";
-	}
-
-	const char **DEPOSIT_WITHDRAWL() {
-		delete[] _depositWithdrawl;
-		_depositWithdrawl = new const char *[2] { "Deposit", "Withdrawl" };
-		return _depositWithdrawl;
-	}
-
-	const char *NOT_ENOUGH_X_IN_THE_Y() {
-		return "\x3""c\v012Not enough %s in the %s!\x3l";
-	}
-
-	const char *NO_X_IN_THE_Y() {
-		return "\x3""c\v012No %s in the %s!\x3l";
-	}
-
-	const char **STAT_NAMES() {
-		delete[] _statNames;
-		_statNames = new const char *[16] {
-			"Might", "Intellect", "Personality", "Endurance", "Speed",
-			"Accuracy", "Luck", "Age", "Level", "Armor Class", "Hit Points",
-			"Spell Points", "Resistances", "Skills", "Awards", "Experience"
-		};
-		return _statNames;
-	}
-
-	const char **CONSUMABLE_NAMES() {
-		delete[] _consumableNames;
-		_consumableNames = new const char *[4] { "Gold", "Gems", "Food", "Condition" };
-		return _consumableNames;
-	}
-
-	const char **WHERE_NAMES() {
-		delete[] _whereNames;
-		_whereNames = new const char *[2] { "Party", "Bank" };
-		return _whereNames;
-	}
-
-	const char *AMOUNT() {
-		return "\x3""c\t000\v051Amount\x3l\n";
-	}
-
-	const char *FOOD_PACKS_FULL() {
-		return "\v007Your food packs are already full!";
-	}
-
-	const char *BUY_SPELLS() {
-		return "\x3""c\v027\t039%s\x3l\v046\n"
-			   "\t012\f37B\fduy Spells\n"
-			   "\t012\f37S\fdpell Info";
-	}
-
-	const char *GUILD_OPTIONS() {
-		return "\r\f00\x3""c\v000\t000Guild Options for%s"
-			   "\x3l\t000\v090Gold"
-			   "\x3r\t000%s\x2\x3""c\v122\t040ESC\x1";
-	}
-
-	const char *NOT_A_SPELL_CASTER() {
-		return "Not a spell caster...";
-	}
-
-	const char *SPELLS_LEARNED_ALL() {
-		return "You have learned all we\n"
-			   "\t010can teach you.";
-	}
-
-	const char *SPELLS_FOR() {
-		return "\r\fd%s\x2\x3""c\t000\v002Spells for %s";
-	}
-
-	const char *SPELL_LINES_0_TO_9() {
-		return "\x2\x3l\v015\t0011\n2\n3\n4\n5\n6\n7\n8\n9\n0";
-	}
-
-	const char *SPELLS_DIALOG_SPELLS() {
-		return "\x3l\v015"
-			   "\t010\f%2u%s\fd\x3l\n"
-			   "\t010\f%2u%s\fd\x3l\n"
-			   "\t010\f%2u%s\fd\x3l\n"
-			   "\t010\f%2u%s\fd\x3l\n"
-			   "\t010\f%2u%s\fd\x3l\n"
-			   "\t010\f%2u%s\fd\x3l\n"
-			   "\t010\f%2u%s\fd\x3l\n"
-			   "\t010\f%2u%s\fd\x3l\n"
-			   "\t010\f%2u%s\fd\x3l\n"
-			   "\t010\f%2u%s\fd\x3l"
-			   "\t004\v110%s - %u\x1";
-	}
-
-	const char *SPELL_PTS() {
-		return "Spell Pts";
-	}
-
-	const char *GOLD() {
-		return "Gold";
-	}
-
-	const char *SPELL_INFO() {
-		return "\x3""c\f09%s\fd\x3l\n"
-			   "\n"
-			   "%s\x3""c\t000\v100Press a Key!";
-	}
-
-	const char *SPELL_PURCHASE() {
-		return "\x3l\v000\t000\fd%s  Do you wish to purchase "
-			   "\f09%s\fd for %u?";
-	}
-
-	const char *MAP_TEXT() {
-		return "\x3""c\v000\t000%s\x3l\v139"
-			   "\t000X = %d\x3r\t000Y = %d\x3""c\t000%s";
-	}
-
-	const char *LIGHT_COUNT_TEXT() {
-		return "\x3l\n\n\t024Light\x3r\t124%d";
-	}
-
-	const char *FIRE_RESISTENCE_TEXT() {
-		return "%c%sFire%s%u";
-	}
-
-	const char *ELECRICITY_RESISTENCE_TEXT() {
-		return "%c%sElectricity%s%u";
-	}
-
-	const char *COLD_RESISTENCE_TEXT() {
-		return "%c%sCold%s%u";
-	}
-
-	const char *POISON_RESISTENCE_TEXT() {
-		return "%c%sPoison/Acid%s%u";
-	}
-
-	const char *CLAIRVOYANCE_TEXT() {
-		return "%c%sClairvoyance%s";
-	}
-
-	const char *LEVITATE_TEXT() {
-		return "%c%sLevitate%s";
-	}
-
-	const char *WALK_ON_WATER_TEXT() {
-		return "%c%sWalk on Water";
-	}
-
-	const char *GAME_INFORMATION() {
-		return "\r\x3""c\t000\v001\f37%s of Xeen\fd\n"
-			   "Game Information\n"
-			   "\n"
-			   "Today is \f37%ssday\fd\n"
-			   "\n"
-			   "\t032Time\t072Day\t112Year\n"
-			   "\t032\f37%d:%02d%c\t072%u\t112%u\fd%s";
-	}
-
-	const char *WORLD_GAME_TEXT() {
-		return "World";
-	}
-
-	const char *DARKSIDE_GAME_TEXT() {
-		return "Darkside";
-	}
-
-	const char *CLOUDS_GAME_TEXT() {
-		return "Clouds";
-	}
-
-	const char *SWORDS_GAME_TEXT() {
-		return "Swords";
-	}
-
-	const char **WEEK_DAY_STRINGS() {
-		delete[] _weekDayStrings;
-		_weekDayStrings = new const char *[10] {
-			"Ten", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"
-		};
-		return _weekDayStrings;
-	}
-
-	const char *CHARACTER_DETAILS() {
-		return "\x3l\v041\t196%s\t000\v002%s : %s %s %s"
-			   "\x3r\t053\v028\f%02u%u\fd\t103\f%02u%u\fd"
-			   "\x3l\t131\f%02u%d\fd\t196\f15%u\fd\x3r"
-			   "\t053\v051\f%02u%u\fd\t103\f%02u%u\fd"
-			   "\x3l\t131\f%02u%u\fd\t196\f15%u\fd"
-			   "\x3r\t053\v074\f%02u%u\fd\t103\f%02u%u\fd"
-			   "\x3l\t131\f15%u\fd\t196\f15%u\fd"
-			   "\x3r\t053\v097\f%02u%u\fd\t103\f%02u%u\fd"
-			   "\x3l\t131\f15%u\fd\t196\f15%u day%s\fd"
-			   "\x3r\t053\v120\f%02u%u\fd\t103\f%02u%u\fd"
-			   "\x3l\t131\f15%u\fd\t196\f%02u%s\fd"
-			   "\t230%s%s%s%s\fd";
-	}
-
-	const char **DAYS() {
-		delete[] _days;
-		_days = new const char *[3] { "", "s", "" };
-		return _days;
-	}
-
-	const char *PARTY_GOLD() {
-		return "Party Gold";
-	}
-
-	const char *PLUS_14() {
-		return "\f14+";
-	}
-
-	const char *CHARACTER_TEMPLATE() {
-		return "\x1\f00\r\x3l\t029\v018Mgt\t080Acy\t131H.P.\t196Experience"
-			   "\t029\v041Int\t080Lck\t131S.P.\t029\v064Per\t080Age"
-			   "\t131Resis\t196Party Gems\t029\v087End\t080Lvl\t131Skills"
-			   "\t196Party Food\t029\v110Spd\t080AC\t131Awrds\t196Condition\x3""c"
-			   "\t290\v025\f37I\fdtem\t290\v057\f37Q"
-			   "\fduick\t290\v089\f37E\fdxch\t290\v121Exit\x3l%s";
-	}
-
-	const char *EXCHANGING_IN_COMBAT() {
-		return "\x3""c\v007\t000Exchanging in combat is not allowed!";
-	}
-
-	const char *CURRENT_MAXIMUM_RATING_TEXT() {
-		return "\x2\x3""c%s\n"
-			   "Current / Maximum\n"
-			   "\x3r\t054%u\x3l\t058/ %u\n"
-			   "\x3""cRating: %s";
-	}
-
-	const char *CURRENT_MAXIMUM_TEXT() {
-		return "\x2\x3""c%s\n"
-			   "Current / Maximum\n"
-			   "\x3r\t054%u\x3l\t058/ %u";
-	}
-
-	const char **RATING_TEXT() {
-		delete[] _ratingText;
-		_ratingText = new const char *[24] {
-			"Nonexistant", "Very Poor", "Poor", "Very Low", "Low", "Average", "Good",
-			"Very Good", "High", "Very High", "Great", "Super", "Amazing", "Incredible",
-			"Gigantic", "Fantastic", "Astoundig", "Astonishing", "Monumental", "Tremendous",
-			"Collosal", "Awesome", "Awe Inspiring", "Ultimate"
-		};
-		return _ratingText;
-	}
-
-	const char *AGE_TEXT() {
-		return "\x2\x3""c%s\n"
-			   "Current / Natural\n"
-			   "\x3r\t057%u\x3l\t061/ %u\n"
-			   "\x3""cBorn: %u / %u\x1";
-	}
-
-	const char *LEVEL_TEXT() {
-		return "\x2\x3""c%s\n"
-			   "Current / Maximum\n"
-			   "\x3r\t054%u\x3l\t058/ %u\n"
-			   "\x3""c%u Attack%s/Round\x1";
-	}
-
-	const char *RESISTENCES_TEXT() {
-		return "\x2\x3""c%s\x3l\n"
-			   "\t020Fire\t100%u\n"
-			   "\t020Cold\t100%u\n"
-			   "\t020Electricity\t100%u\n"
-			   "\t020Poison\t100%u\n"
-			   "\t020Energy\t100%u\n"
-			   "\t020Magic\t100%u";
-	}
-
-	const char *NONE() {
-		return "\n\t020None";
-	}
-
-	const char *EXPERIENCE_TEXT() {
-		return "\x2\x3""c%s\x3l\n"
-			   "\t010Current:\t070%u\n"
-			   "\t010Next Level:\t070%s\x1";
-	}
-
-	const char *ELIGIBLE() {
-		return "\f12Eligible\fd";
-	}
-
-	const char *IN_PARTY_IN_BANK() {
-		return "\x2\x3""cParty %s\n"
-			   "%u on hand\n"
-			   "%u in bank\x1\x3l";
-	}
-
-	const char *FOOD_TEXT() {
-		return "\x2\x3""cParty %s\n"
-			   "%u on hand\n"
-			   "Enough for %u day%s\x3l";
-	}
-
-	const char *EXCHANGE_WITH_WHOM() {
-		return "\t010\v005Exchange with whom?";
-	}
-
-	const char *QUICK_REF_LINE() {
-		return "\v%3d\t007%u)\t027%s\t110%c%c%c\x3r\t160\f%02u%u\fd"
-			   "\x3l\t170\f%02u%d\fd\t208\f%02u%u\fd\t247\f"
-			   "%02u%u\fd\t270\f%02u%c%c%c%c\fd";
-	}
-
-	const char *QUICK_REFERENCE() {
-		return "\r\x3""cQuick Reference Chart\v012\x3l"
-			   "\t007#\t027Name\t110Cls\t140Lvl\t176H.P."
-			   "\t212S.P.\t241A.C.\t270Cond"
-			   "%s%s%s%s%s%s%s%s"
-			   "\v110\t064\x3""cGold\t144Gems\t224Food\v119"
-			   "\t064\f15%u\t144%u\t224%u day%s\fd";
-	}
-
-	const char *ITEMS_DIALOG_TEXT1() {
-		return "\r\x2\x3""c\v021\t017\f37W\fdeap\t051\f37A\fdrmor\t085A"
-			   "\f37c\fdces\t119\f37M\fdisc\t153%s\t187%s\t221%s"
-			   "\t255%s\t289Exit";
-	}
-
-	const char *ITEMS_DIALOG_TEXT2() {
-		return "\r\x2\x3""c\v021\t017\f37W\fdeap\t051\f37A\fdrmor\t085A"
-			   "\f37c\fdces\t119\f37M\fdisc\t153\f37%s\t289Exit";
-	}
-
-	const char *ITEMS_DIALOG_LINE1() {
-		return "\x3r\f%02u\t023%2d)\x3l\t028%s\n";
-	}
-
-	const char *ITEMS_DIALOG_LINE2() {
-		return "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%u\n";
-	}
-
-	const char *BTN_BUY() {
-		return "\f37B\fduy";
-	}
-
-	const char *BTN_SELL() {
-		return "\f37S\fdell";
-	}
-
-	const char *BTN_IDENTIFY() {
-		return "\f37I\fddentify";
-	}
-
-	const char *BTN_FIX() {
-		return "\f37F\fdix";
-	}
-
-	const char *BTN_USE() {
-		return "\f37U\fdse";
-	}
-
-	const char *BTN_EQUIP() {
-		return "\f37E\fdquip";
-	}
-
-	const char *BTN_REMOVE() {
-		return "\f37R\fdem";
-	}
-
-	const char *BTN_DISCARD() {
-		return "\f37D\fdisc";
-	}
-
-	const char *BTN_QUEST() {
-		return "\f37Q\fduest";
-	}
-
-	const char *BTN_ENCHANT() {
-		return "E\fdnchant";
-	}
-
-	const char *BTN_RECHARGE() {
-		return "R\fdechrg";
-	}
-
-	const char *BTN_GOLD() {
-		return "G\fdold";
-	}
-
-	const char *ITEM_BROKEN() {
-		return "\f32broken ";
-	}
-
-	const char *ITEM_CURSED() {
-		return "\f09cursed ";
-	}
-
-	const char *ITEM_OF() {
-		return "of ";
-	}
-
-	const char **BONUS_NAMES() {
-		delete[] _bonusNames;
-		_bonusNames = new const char *[7] {
-			"", "Dragon Slayer", "Undead Eater", "Golem Smasher",
-			"Bug Zapper", "Monster Masher", "Beast Bopper"
-		};
-		return _bonusNames;
-	}
-
-	const char **WEAPON_NAMES() {
-		delete[] _weaponNames;
-		_weaponNames = new const char *[41] {
-			nullptr, "long sword ", "short sword ", "broad sword ", "scimitar ",
-			"cutlass ", "sabre ", "club ", "hand axe ", "katana ", "nunchakas ",
-			"wakazashi ", "dagger ", "mace ", "flail ", "cudgel ", "maul ", "spear ",
-			"bardiche ", "glaive ", "halberd ", "pike ", "flamberge ", "trident ",
-			"staff ", "hammer ", "naginata ", "battle axe ", "grand axe ", "great axe ",
-			"short bow ", "long bow ", "crossbow ", "sling ", "Xeen Slayer Sword ",
-			"Elder LongSword ", "Elder Dagger ", "Elder Mace ", "Elder Spear ",
-			"Elder Staff ", "Elder LongBow "
-		};
-		return _weaponNames;
-	}
-
-	const char **ARMOR_NAMES() {
-		delete[] _armorNames;
-		_armorNames = new const char *[14] {
-			nullptr, "robes ", "scale armor ", "ring mail ", "chain mail ",
-			"splint mail ", "plate mail ", "plate armor ", "shield ",
-			"helm ", "boots ", "cloak ", "cape ", "gauntlets "
-		};
-		return _armorNames;
-	}
-
-	const char **ACCESSORY_NAMES() {
-		delete[] _accessoryNames;
-		_accessoryNames = new const char *[11] {
-			nullptr, "ring ", "belt ", "brooch ", "medal ", "charm ", "cameo ",
-			"scarab ", "pendant ", "necklace ", "amulet "
-		};
-		return _accessoryNames;
-	}
-
-	const char **MISC_NAMES() {
-		delete[] _miscNames;
-		_miscNames = new const char *[22] {
-			nullptr, "rod ", "jewel ", "gem ", "box ", "orb ", "horn ", "coin ",
-			"wand ", "whistle ", "potion ", "scroll ", "bogus", "bogus", "bogus",
-			"bogus", "bogus", "bogus", "bogus", "bogus", "bogus", "bogus"
-		};
-		return _miscNames;
-	}
-
-	const char **SPECIAL_NAMES() {
-		delete[] _specialNames;
-		_specialNames = new const char *[74] {
-			nullptr, "light", "awakening", "magic arrows", "first aid", "fists", "energy blasts", "sleeping",
-			"revitalization", "curing", "sparking", "shrapmetal", "insect repellent", "toxic clouds", "elemental protection",
-			"pain", "jumping", "beast control", "clairvoyance", "undead turning", "levitation", "wizard eyes", "blessing",
-			"monster identification",  "lightning", "holy bonuses", "power curing", "nature's cures", "beacons",
-			"shielding", "heroism", "hypnotism", "water walking", "frost biting", "monster finding", "fireballs",
-			"cold rays", "antidotes", "acid spraying", "time distortion", "dragon sleep", "vaccination", "teleportation",
-			"death", "free movement", "golem stopping", "poison volleys", "deadly swarms", "shelter", "daily protection",
-			"daily sorcerery", "feasting", "fiery flails", "recharging", "freezing", "town portals", "stone to flesh",
-			"raising the dead", "etherealization", "dancing swords", "moon rays", "mass distortion", "prismatic light",
-			"enchant item", "incinerating", "holy words", "resurrection", "storms", "megavoltage", "infernos",
-			"sun rays", "implosions", "star bursts", "the GODS!"
-		};
-		return _specialNames;
-	}
-
-	const char **ELEMENTAL_NAMES() {
-		delete[] _elementalNames;
-		_elementalNames = new const char *[6] {
-			"Fire", "Elec", "Cold", "Acid/Poison", "Energy", "Magic"
-		};
-		return _elementalNames;
-	}
-
-	const char **ATTRIBUTE_NAMES() {
-		delete[] _attributeNames;
-		_attributeNames = new const char *[10] {
-			"might", "Intellect", "Personality", "Speed", "accuracy", "Luck",
-			"Hit Points", "Spell Points", "Armor Class", "Thievery"
-		};
-		return _attributeNames;
-	}
-
-	const char **EFFECTIVENESS_NAMES() {
-		delete[] _effectivenessNames;
-		_effectivenessNames = new const char *[7] {
-			nullptr, "Dragons", "Undead", "Golems", "Bugs", "Monsters", "Beasts"
-		};
-		return _effectivenessNames;
-	}
-
-	const char **QUEST_ITEM_NAMES() {
-		delete[] _questItemNames;
-		_questItemNames = new const char *[85] {
-			"Deed to New Castle",
-			"Crystal Key to Witch Tower",
-			"Skeleton Key to Darzog's Tower",
-			"Enchanted Key to Tower of High Magic",
-			"Jeweled Amulet of the Northern Sphinx",
-			"Stone of a Thousand Terrors",
-			"Golem Stone of Admittance",
-			"Yak Stone of Opening",
-			"Xeen's Scepter of Temporal Distortion",
-			"Alacorn of Falista",
-			"Elixir of Restoration",
-			"Wand of Faery Magic",
-			"Princess Roxanne's Tiara",
-			"Holy Book of Elvenkind",
-			"Scarab of Imaging",
-			"Crystals of Piezoelectricity",
-			"Scroll of Insight",
-			"Phirna Root",
-			"Orothin's Bone Whistle",
-			"Barok's Magic Pendant",
-			"Ligono's Missing Skull",
-			"Last Flower of Summer",
-			"Last Raindrop of Spring",
-			"Last Snowflake of Winter",
-			"Last Leaf of Autumn",
-			"Ever Hot Lava Rock",
-			"King's Mega Credit",
-			"Excavation Permit",
-			"Cupie Doll",
-			"Might Doll",
-			"Speed Doll",
-			"Endurance Doll",
-			"Accuracy Doll",
-			"Luck Doll",
-			"Widget",
-			"Pass to Castleview",
-			"Pass to Sandcaster",
-			"Pass to Lakeside",
-			"Pass to Necropolis",
-			"Pass to Olympus",
-			"Key to Great Western Tower",
-			"Key to Great Southern Tower",
-			"Key to Great Eastern Tower",
-			"Key to Great Northern Tower",
-			"Key to Ellinger's Tower",
-			"Key to Dragon Tower",
-			"Key to Darkstone Tower",
-			"Key to Temple of Bark",
-			"Key to Dungeon of Lost Souls",
-			"Key to Ancient Pyramid",
-			"Key to Dungeon of Death",
-			"Amulet of the Southern Sphinx",
-			"Dragon Pharoah's Orb",
-			"Cube of Power",
-			"Chime of Opening",
-			"Gold ID Card",
-			"Silver ID Card",
-			"Vulture Repellant",
-			"Bridle",
-			"Enchanted Bridle",
-			"Treasure Map (Goto E1 x1, y11)",
-			"",
-			"Fake Map",
-			"Onyx Necklace",
-			"Dragon Egg",
-			"Tribble",
-			"Golden Pegasus Statuette",
-			"Golden Dragon Statuette",
-			"Golden Griffin Statuette",
-			"Chalice of Protection",
-			"Jewel of Ages",
-			"Songbird of Serenity",
-			"Sandro's Heart",
-			"Ector's Ring",
-			"Vespar's Emerald Handle",
-			"Queen Kalindra's Crown",
-			"Caleb's Magnifying Glass",
-			"Soul Box",
-			"Soul Box with Corak inside",
-			"Ruby Rock",
-			"Emerald Rock",
-			"Sapphire Rock",
-			"Diamond Rock",
-			"Monga Melon",
-			"Energy Disk"
-		};
-		return _questItemNames;
-	}
-
-	const char **QUEST_ITEM_NAMES_SWORDS() {
-		delete[] _questItemNamesSwords;
-		_questItemNamesSwords = new const char *[51] {
-			"Pass to Hart", "Pass to Impery", "Pass to town3", "Pass to town4", "Pass to town5",
-			"Key to Hart Sewers", "Key to Rettig's Pyramid", "Key to the Old Temple",
-			"Key to Canegtut's Pyramid", "Key to Ascihep's Pyramid", "Key to Dragon Tower",
-			"Key to Darkstone Tower", "Key to Temple of Bark", "Key to Dungeon of Lost Souls",
-			"Key to Ancient Pyramid", "Key to Dungeon of Death", "Red Magic Hammer",
-			"Green Magic Hammer", "Golden Magic Wand", "Silver Magic Hammer", "Magic Coin",
-			"Ruby", "Diamond Mineral", "Emerald", "Sapphire", "Treasure Map (Goto E1 x1, y11)",
-			"NOTUSED", "Melon", "Princess Crown", "Emerald Wand", "Druid Carving", "High Sign",
-			"Holy Wheel", "Double Cross", "Sky Hook", "Sacred Cow", "Staff of the Mountain",
-			"Hard Rock", "Soft Rock", "Rock Candy", "Ivy Plant", "Spirit Gem", "Temple of Sun holy lamp oil",
-			"Noams Hammer", "Positive Orb", "Negative Orb", "FireBane Staff", "Diamond Edged Pick",
-			"Monga Melon", "Energy Disk", "Old XEEN Quest Item"
-		};
-		return _questItemNamesSwords;
-	}
-
-	const char *NOT_PROFICIENT() {
-		return "\t000\v007\x3""c%ss are not proficient with a %s!";
-	}
-	
-	const char *NO_ITEMS_AVAILABLE() {
-		return "\x3""c\n"
-			   "\t000No items available.";
-	}
-
-	const char **CATEGORY_NAMES() {
-		delete[] _categoryNames;
-		_categoryNames = new const char *[4] { "Weapons", "Armor", "Accessories", "Miscellaneous" };
-		return _categoryNames;
-	}
-
-	const char *X_FOR_THE_Y() {
-		return "\x1\fd\r%s\v000\t000%s for %s the %s%s\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-	}
-
-	const char *X_FOR_Y() {
-		return "\x1\fd\r\x3l\v000\t000%s for %s\x3r\t000%s\x3l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-	}
-
-	const char *X_FOR_Y_GOLD() {
-		return "\x1\fd\r\x3l\v000\t000%s for %s\t150Gold - %u%s\x3l\v011"
-			   "\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-	}
-
-	const char *FMT_CHARGES() {
-		return "\x3rr\t000Charges\x3l";
-	}
-
-	const char *AVAILABLE_GOLD_COST() {
-		return "\x1\fd\r\x3l\v000\t000Available %s\t150Gold - %u\x3r\t000Cost"
-			   "\x3l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-	}
-
-	const char *CHARGES() {
-		return "Charges";
-	}
-
-	const char *COST() {
-		return "Cost";
-	}
-
-	const char **ITEM_ACTIONS() {
-		delete[] _itemActions;
-		_itemActions = new const char *[7] {
-			"Equip", "Remove", "Use", "Discard", "Enchant", "Recharge", "Gold"
-		};
-		return _itemActions;
-	}
-
-	const char *WHICH_ITEM() {
-		return "\t010\v005%s which item?";
-	}
-
-	const char *WHATS_YOUR_HURRY() {
-		return "\v007What's your hurry?\n"
-			   "Wait till you get out of here!";
-	}
-
-	const char *USE_ITEM_IN_COMBAT() {
-		return "\v007To use an item in Combat, invoke the Use command on your turn!";
-	}
-
-	const char *NO_SPECIAL_ABILITIES() {
-		return "\v005\x3""c%s\fdhas no special abilities!";
-	}
-
-	const char *CANT_CAST_WHILE_ENGAGED() {
-		return "\x3""c\v007Can't cast %s while engaged!";
-	}
-
-	const char *EQUIPPED_ALL_YOU_CAN() {
-		return "\x3""c\v007You have equipped all the %ss you can!";
-	}
-
-	const char *REMOVE_X_TO_EQUIP_Y() {
-		return "\x3""c\v007You must remove %sto equip %s\b!";
-	}
-
-	const char *RING() {
-		return "ring";
-	}
-
-	const char *MEDAL() {
-		return "medal";
-	}
-
-	const char *CANNOT_REMOVE_CURSED_ITEM() {
-		return "\x3""You cannot remove a cursed item!";
-	}
-
-	const char *CANNOT_DISCARD_CURSED_ITEM() {
-		return "\3x""cYou cannot discard a cursed item!";
-	}
-
-	const char *PERMANENTLY_DISCARD() {
-		return "\v000\t000\x3lPermanently discard %s\fd?";
-	}
-
-	const char *BACKPACK_IS_FULL() {
-		return "\v005\x3""c\fd%s's backpack is full.";
-	}
-
-	const char **CATEGORY_BACKPACK_IS_FULL() {
-		delete[] _categoryBackpackIsFull;
-		_categoryBackpackIsFull = new const char *[4] {
-			"\v010\t000\x3""c%s's weapons backpack is full.",
-			"\v010\t000\x3""c%s's armor backpack is full.",
-			"\v010\t000\x3""c%s's accessories backpack is full.",
-			"\v010\t000\x3""c%s's miscellaneous backpack is full."
-		};
-		return _categoryBackpackIsFull;
-	}
-
-	const char *BUY_X_FOR_Y_GOLD() {
-		return "\x3l\v000\t000\fdBuy %s\fd for %u gold?";
-	}
-
-	const char *SELL_X_FOR_Y_GOLD() {
-		return "\x3l\v000\t000\fdSell %s\fd for %u gold?";
-	}
-
-	const char **SELL_X_FOR_Y_GOLD_ENDINGS() {
-		delete[] _sellXForYGoldEndings;
-		_sellXForYGoldEndings = new const char *[2] { "", "" };
-		return _sellXForYGoldEndings;
-	}
-
-	const char *NO_NEED_OF_THIS() {
-		return "\v005\x3""c\fdWe have no need of this %s\f!";
-	}
-
-	const char *NOT_RECHARGABLE() {
-		return "\v012\x3""c\fdNot Rechargeable.  %s";
-	}
-
-	const char *NOT_ENCHANTABLE() {
-		return "\v012\t000\x3""cNot Enchantable.  %s";
-	}
-
-	const char *SPELL_FAILED() {
-		return "Spell Failed!";
-	}
-
-	const char *ITEM_NOT_BROKEN() {
-		return "\fdThat item is not broken!";
-	}
-
-	const char **FIX_IDENTIFY() {
-		delete[] _fixIdentify;
-		_fixIdentify = new const char *[2] { "Fix", "Identify" };
-		return _fixIdentify;
-	}
-
-	const char *FIX_IDENTIFY_GOLD() {
-		return "\x3l\v000\t000%s %s\fd for %u gold?";
-	}
-
-	const char *IDENTIFY_ITEM_MSG() {
-		return "\fd\v000\t000\x3""cIdentify Item\x3l\n"
-			   "\n"
-			   "\v012%s\fd\n"
-			   "\n"
-			   "%s";
-	}
-
-	const char *ITEM_DETAILS() {
-		return "Proficient Classes\t132:\t140%s\n"
-			   "to Hit Modifier\t132:\t140%s\n"
-			   "Physical Damage\t132:\t140%s\n"
-			   "Elemental Damage\t132:\t140%s\n"
-			   "Elemental Resistance\t132:\t140%s\n"
-			   "Armor Class Bonus\t132:\t140%s\n"
-			   "Attribute Bonus\t132:\t140%s\n"
-			   "Special Power\t132:\t140%s";
-	}
-
-	const char *ALL() {
-		return "All";
-	}
-
-	const char *FIELD_NONE() {
-		return "None";
-	}
-
-	const char *DAMAGE_X_TO_Y() {
-		return "%d to %d";
-	}
-
-	const char *ELEMENTAL_XY_DAMAGE() {
-		return "%+d %s Damage";
-	}
-
-	const char *ATTR_XY_BONUS() {
-		return "%+d %s";
-	}
-
-	const char *EFFECTIVE_AGAINST() {
-		return "x3 vs %s";
-	}
-
-	const char *QUESTS_DIALOG_TEXT() {
-		return "\r\x2\x3""c\v021\t017\f37I\fdtems\t085\f37Q\fduests\t153"
-			   "\f37A\fduto Notes	221\f37U\fdp\t255\f37D\fdown"
-			   "\t289Exit";
-	}
-
-	const char *CLOUDS_OF_XEEN_LINE() {
-		return "\b \b*-- \f04Clouds of Xeen\fd --";
-	}
-
-	const char *DARKSIDE_OF_XEEN_LINE() {
-		return "\b \b*-- \f04Darkside of Xeen\fd --";
-	}
-
-	const char *SWORDS_OF_XEEN_LINE() {
-		return "\b \b*-- \f04Swords of Xeen\fd --";
-	}
-
-	const char *NO_QUEST_ITEMS() {
-		return "\r\x3""c\v000	000Quest Items\x3l\x2\n"
-			   "\n"
-			   "\x3""cNo Quest Items";
-	}
-
-	const char *NO_CURRENT_QUESTS() {
-		return "\x3""c\v000\t000\n"
-			   "\n"
-			   "No Current Quests";
-	}
-
-	const char *NO_AUTO_NOTES() {
-		return "\x3""cNo Auto Notes";
-	}
-
-	const char *QUEST_ITEMS_DATA() {
-		return "\r\x1\fd\x3""c\v000\t000Quest Items\x3l\x2\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s";
-	}
-
-	const char *CURRENT_QUESTS_DATA() {
-		return "\r\x1\fd\x3""c\t000\v000Current Quests\x3l\x2\n"
-			   "%s\n"
-			   "\n"
-			   "%s\n"
-			   "\n"
-			   "%s";
-	}
-
-	const char *AUTO_NOTES_DATA() {
-		return "\r\x1\fd\x3""c\t000\v000Auto Notes\x3l\x2\n"
-			   "%s\x3l\n"
-			   "%s\x3l\n"
-			   "%s\x3l\n"
-			   "%s\x3l\n"
-			   "%s\x3l\n"
-			   "%s\x3l\n"
-			   "%s\x3l\n"
-			   "%s\x3l\n"
-			   "%s\x3l";
-	}
-
-	const char *REST_COMPLETE() {
-		return "\v000\t0008 hours pass.  Rest complete.\n"
-			   "%s\n"
-			   "%d food consumed.";
-	}
-
-	const char *PARTY_IS_STARVING() {
-		return "\f07The Party is Starving!\fd";
-	}
-
-	const char *HIT_SPELL_POINTS_RESTORED() {
-		return "Hit Pts and Spell Pts restored.";
-	}
-
-	const char *TOO_DANGEROUS_TO_REST() {
-		return "Too dangerous to rest here!";
-	}
-
-	const char *SOME_CHARS_MAY_DIE() {
-		return "Some Chars may die. Rest anyway?";
-	}
-
-	const char *DISMISS_WHOM() {
-		return "\t010\v005Dismiss whom?";
-	}
-
-	const char *CANT_DISMISS_LAST_CHAR() {
-		return "You cannot dismiss your last character!";
-	}
-
-	const char *DELETE_CHAR_WITH_ELDER_WEAPON() {
-		return "\v000\t000This character has an Elder Weapon and cannot be deleted!";
-	}
-
-	const char **REMOVE_DELETE() {
-		delete[] _removeDelete;
-		_removeDelete = new const char *[2] { "Remove", "Delete" };
-		return _removeDelete;
-	}
-
-	const char *REMOVE_OR_DELETE_WHICH() {
-		return "\x3l\t010\v005%s which character?";
-	}
-
-	const char *YOUR_PARTY_IS_FULL() {
-		return "\v007Your party is full!";
-	}
-
-	const char *HAS_SLAYER_SWORD() {
-		return "\v000\t000This character has the Xeen Slayer Sword and cannot be deleted!";
-	}
-
-	const char *SURE_TO_DELETE_CHAR() {
-		return "Are you sure you want to delete %s the %s?";
-	}
-
-	const char *CREATE_CHAR_DETAILS() {
-		return "\f04\x3""c\x2\t144\v119\f37R\f04oll\t144\v149\f37C\f04reate"
-			   "\t144\v179\f37ESC\f04\x3l\x1\t195\v021\f37M\f04gt"
-			   "\t195\v045\f37I\f04nt\t195\v069\f37P\f04er\t195\v093\f37E\f04nd"
-			   "\t195\v116\f37S\f04pd\t195\v140\f37A\f04cy\t195\v164\f37L\f04ck%s";
-	}
-
-	const char *NEW_CHAR_STATS() {
-		return "\f04\x3l\t022\v148Race\t055: %s\n"
-			   "\t022Sex\t055: %s\n"
-			   "\t022Class\t055:\n"
-			   "\x3r\t215\v031%d\t215\v055%d\t215\v079%d\t215\v103%d\t215\v127%d"
-			   "\t215\v151%d\t215\v175%d\x3l\t242\v020\f%.2dKnight\t242\v031\f%.2d"
-			   "Paladin\t242\v042\f%.2dArcher\t242\v053\f%.2dCleric\t242\v064\f%.2d"
-			   "Sorcerer\t242\v075\f%.2dRobber\t242\v086\f%.2dNinja\t242\v097\f%.2d"
-			   "Barbarian\t242\v108\f%.2dDruid\t242\v119\f%.2dRanger\f04\x3""c"
-			   "\t265\v142Skills\x3l\t223\v155%s\t223\v170%s%s";
-	}
-
-	const char *NAME_FOR_NEW_CHARACTER() {
-		return "\x3""cEnter a Name for this Character\n\n";
-	}
-
-	const char *SELECT_CLASS_BEFORE_SAVING() {
-		return "\v006\x3""cSelect a Class before saving.\x3l";
-	}
-
-	const char *EXCHANGE_ATTR_WITH() {
-		return "Exchange %s with...";
-	}
-
-	const char *COMBAT_DETAILS() {
-		return "\r\f00\x3""c\v000\t000\x2""Combat%s%s%s\x1";
-	}
-
-	const char *NOT_ENOUGH_TO_CAST() {
-		return "\x3""c\v010Not enough %s to Cast %s";
-	}
-
-	const char **SPELL_CAST_COMPONENTS() {
-		delete[] _spellCastComponents;
-		_spellCastComponents = new const char *[2] { "Spell Points", "Gems" };
-		return _spellCastComponents;
-	}
-
-	const char *CAST_SPELL_DETAILS() {
-		return "\r\x2\x3""c\v122\t013\f37C\fdast\t040\f37N\fdew"
-			   "\t067ESC\x1\t000\v000\x3""cCast Spell\n"
-			   "\n"
-			   "%s\x3l\n"
-			   "\n"
-			   "Spell Ready:\x3""c\n"
-			   "\n"
-			   "\f09%s\fd\x2\x3l\n"
-			   "\v082Cost\x3r\t000%u/%u\x3l\n"
-			   "Cur SP\x3r\t000%u\x1";
-	}
-
-	const char *PARTY_FOUND() {
-		return "\x3""cThe Party Found:\n"
-			   "\n"
-			   "\x3r\t000%u Gold\n"
-			   "%u Gems";
-	}
-
-	const char *BACKPACKS_FULL_PRESS_KEY() {
-		return "\v007\f12Warning!  BackPacks Full!\fd\n"
-			   "Press a Key";
-	}
-
-	const char *HIT_A_KEY() {
-		return "\x3l\v120\t000\x4""077\x3""c\f37Hit a key\fd";
-	}
-
-	const char *GIVE_TREASURE_FORMATTING() {
-		return "\x3l\v060\t000\x4""077\n"
-			   "\x4""077\n"
-			   "\x4""077\n"
-			   "\x4""077\n"
-			   "\x4""077\n"
-			   "\x4""077";
-	}
-
-	const char *X_FOUND_Y() {
-		return "\v060\t000\x3""c%s found: %s";
-	}
-
-	const char *ON_WHO() {
-		return "\x3""c\v009On Who?";
-	}
-
-	const char *WHICH_ELEMENT1() {
-		return "\r\x3""c\x1Which Element?\x2\v034\t014\f15F\fdire\t044"
-			   "\f15E\fdlec\t074\f15C\fdold\t104\f15A\fdcid\x1";
-	}
-
-	const char *WHICH_ELEMENT2() {
-		return "\r\x3""cWhich Element?\x2\v034\t014\f15F\fdire\t044"
-			   "\f15E\fdlec\t074\f15C\fdold\t104\f15A\fdcid\x1";
-	}
-
-	const char *DETECT_MONSTERS() {
-		return "\x3""cDetect Monsters";
-	}
-
-	const char *LLOYDS_BEACON() {
-		return "\r\x3""c\v000\t000\x1Lloyd's Beacon\n"
-			   "\n"
-			   "Last Location\n"
-			   "\n"
-			   "%s\x3l\n"
-			   "x = %d\x3r\t000y = %d\x3""c\x2\v122\t021\f15S\fdet\t060\f15R\fdeturn\x1";
-	}
-
-	const char *HOW_MANY_SQUARES() {
-		return "\x3""cTeleport\nHow many squares %s (1-9)\n";
-	}
-
-	const char *TOWN_PORTAL() {
-		return "\x3""cTown Portal\x3l\n"
-			   "\n"
-			   "\t0101. %s\n"
-			   "\t0102. %s\n"
-			   "\t0103. %s\n"
-			   "\t0104. %s\n"
-			   "\t0105. %s\x3""c\n"
-			   "\n"
-			   "To which Town (1-5)\n"
-			   "\n";
-	}
-
-	const char *TOWN_PORTAL_SWORDS() {
-		return "\x3""cTown Portal\x3l\n"
-			   "\n"
-			   "\t0101. %s\n"
-			   "\t0102. %s\n"
-			   "\t0103. %s\x3""c\n"
-			   "\n"
-			   "To which Town (1-3)\n"
-			   "\n";
-	}
-
-	const char *MONSTER_DETAILS() {
-		return "\x3l\n"
-			   "%s\x3""c\t100%s\t140%u\t180%u\x3r\t000%s";
-	}
-
-	const char **MONSTER_SPECIAL_ATTACKS() {
-		delete[] _monsterSpecialAttacks;
-		_monsterSpecialAttacks = new const char *[23] {
-			"None", "Magic", "Fire", "Elec", "Cold", "Poison", "Energy", "Disease",
-			"Insane", "Asleep", "CurseItm", "InLove", "DrnSPts", "Curse", "Paralys",
-			"Uncons", "Confuse", "BrkWpn", "Weak", "Erad", "Age+5", "Dead", "Stone"
-		};
-		return _monsterSpecialAttacks;
-	}
-
-	const char *IDENTIFY_MONSTERS() {
-		return "Name\x3""c\t100HP\t140AC\t177#Atks\x3r\t000Special%s%s%s";
-	}
-
-	const char *MOONS_NOT_ALIGNED() {
-		return "\x3""c\v012\t000The moons are not aligned. Passage to the %s is unavailable";
-	}
-
-	const char *AWARDS_FOR() {
-		return "\r\x1\fd\x3""c\v000\t000Awards for %s the %s\x3l\x2\n"
-			   "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\x1";
-	}
-
-	const char *AWARDS_TEXT() {
-		return "\r\x2\x3""c\v021\t221\f37U\fdp\t255\f37D\fdown\t289Exit";
-	}
-
-	const char *NO_AWARDS() {
-		return "\x3""cNo Awards";
-	}
-
-	const char *WARZONE_BATTLE_MASTER() {
-		return "The Warzone\n\t125Battle Master";
-	}
-
-	const char *WARZONE_MAXED() {
-		return "What!  You again?  Go pick on someone your own size!";
-	}
-
-	const char *WARZONE_LEVEL() {
-		return "What level of monsters? (1-10)\n";
-	}
-
-	const char *WARZONE_HOW_MANY() {
-		return "How many monsters? (1-20)\n";
-	}
-
-	const char *PICKS_THE_LOCK() {
-		return "\x3""c\v010%s picks the lock!\nPress any key.";
-	}
-
-	const char *UNABLE_TO_PICK_LOCK() {
-		return "\x3""c\v010%s was unable to pick the lock!\nPress any key.";
-	}
-
-	const char *CONTROL_PANEL_TEXT() {
-		return "\x1\f00\x3""c\v000\t000Control Panel\x3r"
-			   "\v022\t045\f06L\fdoad:\t124\f06E\fdfx:"
-			   "\v041\t045\f06S\fdave:\t124\f06M\fdusic:"
-			   "\v060\t045\f06Q\fduit:"
-			   "\v080\t084Mr \f06W\fdizard:%s\t000\x1";
-	}
-
-	const char *CONTROL_PANEL_BUTTONS() {
-		return "\x3""c\f11"
-			   "\v022\t062load\t141%s"
-			   "\v041\t062save\t141%s"
-			   "\v060\t062exit"
-			   "\v079\t102Help\fd";
-	}
-
-	const char *ON() {
-		return "\f15on\f11";
-	}
-
-	const char *OFF() {
-		return "\f32off\f11";
-	}
-
-	const char *CONFIRM_QUIT() {
-		return "Are you sure you want to quit?";
-	}
-
-	const char *MR_WIZARD() {
-		return "Are you sure you want Mr.Wizard's Help ?";
-	}
-
-	const char *NO_LOADING_IN_COMBAT() {
-		return "No Loading Allowed in Combat!";
-	}
-
-	const char *NO_SAVING_IN_COMBAT() {
-		return "No Saving Allowed in Combat!";
-	}
-
-	const char *QUICK_FIGHT_TEXT() {
-		return "\r\fd\x3""c\v000\t000QuickFight Options\n\n"
-			   "%s\x3l\n\n"
-			   "Current\x3r\n"
-			   "\t000%s\x2\x3""c\v122\t021\f37N\f04ext\t060Exit\x1";
-	}
-
-	const char **QUICK_FIGHT_OPTIONS() {
-		delete[] _quickFightOptions;
-		_quickFightOptions = new const char *[4] { "Attack", "Cast", "Block", "Run" };
-		return _quickFightOptions;
-	}
-
-	const char **WORLD_END_TEXT() {
-		delete[] _worldEndText;
-		_worldEndText = new const char *[9] {
-			"\n\n\n\n\n\n\n"
-			"Congratulations Adventurers!\n\n"
-			"Let the unification ceremony begin!",
-			"And so the call went out to the people throughout the lands of Xeen"
-			" that the prophecy was nearing completion.",
-			"They came in great numbers to witness the momentous occasion.",
-			"\v026The Dragon Pharoah presided over the ceremony.",
-			"\v026Queen Kalindra presented the Cube of Power.",
-			"\v026Prince Roland presented the Xeen Sceptre.",
-			"\v026Together, they placed the Cube of Power...",
-			"\v026and the Sceptre, onto the Altar of Joining.",
-			"With the prophecy complete, the two sides of Xeen were united as one",
-		};
-		return _worldEndText;
-	}
-
-	const char *WORLD_CONGRATULATIONS() {
-		return "\x3""cCongratulations\n\n"
-			   "Your Final Score is:\n\n"
-			   "%010lu\n"
-			   "\x3l\n"
-			   "Please send this score to the Ancient's Headquarters where "
-			   "you'll be added to the Hall of Legends!\n\n"
-			   "Ancient's Headquarters\n"
-			   "New World Computing, Inc.\n"
-			   "P.O. Box 4302\n"
-			   "Hollywood, CA 90078";
-	}
-
-	const char *WORLD_CONGRATULATIONS2() {
-		return "\n\n\n\n\n\n"
-			   "But wait... there's more!\n"
-			   "\n\n"
-			   "Include the message\n"
-			   "\"%s\"\n"
-			   "with your final score and receive a special bonus.";
-	}
-
-	const char *CLOUDS_CONGRATULATIONS1() {
-		return "\f23\x3l"
-			   "\v000\t000Please send this score to the Ancient's Headquarters "
-			   "where you'll be added to the Hall of Legends!\f33\x3""c"
-			   "\v070\t000Press a Key";
-	}
-
-	const char *CLOUDS_CONGRATULATIONS2() {
-		return "\f23\x3l"
-			   "\v000\t000Ancient's Headquarters\n"
-			   "New World Computing, Inc.\n"
-			   "P.O. Box 4302\n"
-			   "Hollywood, CA 90078-4302\f33\x3""c"
-			   "\v070\t000Press a Key";
-	}
-
-	const char **GOOBER() {
-		delete[] _goober;
-		_goober = new const char *[3] {
-			"", "I am a Goober!", "I am a Super Goober!"
-		};
-		return _goober;
-	}
-
-	const char *DIFFICULTY_TEXT() {
-		return "\v000\t000\x3""cSelect Game Preference";
-	}
-
-	const char *SAVE_OFF_LIMITS() {
-		return "\x3""c\v002\t000The Gods of Game Restoration deem this area off limits!\n"
-			   "Sorry, no saving in this maze.";
-	}
-
-	const char *CLOUDS_INTRO1() {
-		return "\f00\v082\t040\x3"
-			   "cKing Burlock\v190\t040Peasants\v082\t247"
-			   "Lord Xeen\v190\t258Xeen's Pet\v179\t150Crodo";
-	}
-
-	const char *DARKSIDE_ENDING1() {
-		return "\n\x3" "cCongratulations\n"
-			   "\n"
-			   "Your Final Score is:\n"
-			   "\n"
-			   "%010lu\n"
-			   "\x3" "l\n"
-			   "Please send this score to the Ancient's Headquarters "
-			   "where you'll be added to the Hall of Legends!\n"
-			   "\n"
-			   "Ancient's Headquarters\n"
-			   "New World Computing, Inc.\n"
-			   "P.O. Box 4302\n"
-			   "Hollywood, CA 90078";
-	}
-
-	const char *DARKSIDE_ENDING2() {
-		return "\n"
-			   "Adventurers,\n"
-			   "\n"
-			   "I will save your game in Castleview.\n"
-			   "\n"
-			   "The World of Xeen still needs you!\n"
-			   "\n"
-			   "Load your game afterwards and come visit me in the "
-			   "Great Pyramid for further instructions";
-	}
-
-	const char *PHAROAH_ENDING_TEXT1() {
-		return "\fd\v001\t001%s\x3" "c\t000\v180Press a Key!\x3" "l";
-	}
-
-	const char *PHAROAH_ENDING_TEXT2() {
-		return "\f04\v000\t000%s\x3" "c\t000\v180Press a Key!\x3" "l\fd";
-	}
-};
-
-class RU : public LangConstants {
-public:
-	const char *CLOUDS_CREDITS() {
-		return
-			"\v012\t000\x3""c\f35ˆ¤¥ï ¨ à㪮¢®¤á⢮ ¯à®¥ªâ®¬:\n"
-			"\f17„¦®­ ‚ ­ Š ­¥£¥¬\x3""l\n"
-			"\n"
-			"\t025\f35à®£à ¬¬¨áâë:\n"
-			"\t035\f17Œ àª Š®«¤ãí««\n"
-			"\t035„¥©¢ •íâíãí©\n"
-			"\n"
-			"\t025\f35€ã¤¨®á¨á⥬  ¨ §¢ãª:\n"
-			"\t035\f17’®¤¤ •¥­¤à¨ªá\n"
-			"\n"
-			"\t025\f35Œã§ëª  ¨ à¥çì:\n"
-			"\t035\f17’¨¬ ’ ««¨\n"
-			"\n"
-			"\t025\f35‘業 à¨©:\n"
-			"\t035\f17®«  â­¥à\n"
-			"\t035„¥¡¡¨ Œñàä¨\n"
-			"\t035„¦®­ ‚ ­ Š ­¥£¥¬\v012\n"
-			"\n"
-			"\n"
-			"\t180\f35•㤮¦­¨ª¨:\n"
-			"\t190\f17‹ã¨ „¦®­á®­\n"
-			"\t190„¦®­ â ­ . ƒ¢¨­\n"
-			"\t190®­¨â  ‹®­£-•¥¬á â\n"
-			"\t190„¦ã«¨ï “« ­®\n"
-			"\t190¨ª à¤®  àà¥à \n"
-			"\n"
-			"\t180\f35’¥áâ¥àë:\n"
-			"\t190\f17¥­¤¦ ¬¨­ ¥­â\n"
-			"\t190Œ à¨® áª ¬¨«« \n"
-			"\t190¨ç à¤ á¯¨\n"
-			"\t190‘ª®ââ Œ ª¤í­¨¥«\n"
-			"\t190Š«¥©â®­ ¥â§¥à\n"
-			"\t190Œ ©ª« ‘ã à¥á\x3""c";
-	}
-
-	const char *DARK_SIDE_CREDITS() {
-		return 
-		  "\v012\t000\x3""c\f35Designed and Directed By:\n"
-		  "\f17Jon Van Caneghem\x3l\n"
-		  "\n"
-		  "\t025\f35Programming:\n"
-		  "\t035\f17Mark Caldwell\n"
-		  "\t035Dave Hathaway\n"
-		  "\n"
-		  "\t025\f35Sound System & FX:\n"
-		  "\t035\f17Mike Heilemann\n"
-		  "\n"
-		  "\t025\f35Music & Speech:\n"
-		  "\t035\f17Tim Tully\n"
-		  "\n"
-		  "\t025\f35Writing:\n"
-		  "\t035\f17Paul Rattner\n"
-		  "\t035Debbie Van Caneghem\n"
-		  "\t035Jon Van Caneghem\v012\n"
-		  "\n"
-		  "\n"
-		  "\t180\f35Graphics:\n"
-		  "\t190\f17Jonathan P. Gwyn\n"
-		  "\t190Bonita Long-Hemsath\n"
-		  "\t190Julia Ulano\n"
-		  "\t190Ricardo Barrera\n"
-		  "\n"
-		  "\t180\f35Testing:\n"
-		  "\t190\f17Benjamin Bent\n"
-		  "\t190Christian Dailey\n"
-		  "\t190Mario Escamilla\n"
-		  "\t190Marco Hunter\n"
-		  "\t190Robert J. Lupo\n"
-		  "\t190Clayton Retzer\n"
-		  "\t190David Vela\x3""c";
-	}
-
-	const char *SWORDS_CREDITS1() {
-		return "\v012\x3"
-			   "c\f35Published By New World Computing, Inc.\f17\n"
-			   "Developed By CATware, Inc.\x3l\n"
-			   "\f01Design and Direction\t180Series Created by\n"
-			   "\t020Bill Fawcett\t190John Van Caneghem\n"
-			   "\n"
-			   "\t010Story Contributions\t180Producer & Manual\n"
-			   "\t020Ellen Guon\t190Dean Rettig\n"
-			   "\n"
-			   "\t010Programming & Ideas\t180Original Programming\n"
-			   "\t020David Potter\t190Mark Caldwell\n"
-			   "\t020Rod Retterath\t190Dave Hathaway\n"
-			   "\n"
-			   "\t010Manual Illustrations\t180Graphic Artists\n"
-			   "\t020Todd Cameron Hamilton\t190Jonathan P. Gwyn\n"
-			   "\t020James Clouse\t190Bonnie Long-Hemsath\n"
-			   "\t190Julia Ulano\n"
-			   "\t190Ricardo Barrera\n";
-	}
-
-	const char *SWORDS_CREDITS2() {
-		return "\f05\v012\t000\x3l\n"
-			   "\t100Sound Programming\n"
-			   "\t110Todd Hendrix\n"
-			   "\n"
-			   "\t100Music\n"
-			   "\t110Tim Tully\n"
-			   "\t110Quality Assurance Manager\n"
-			   "\t110Peter Ryu\n"
-			   "\t100Testers\n"
-			   "\t110Walter Johnson\n"
-			   "\t110Bryan Farina\n"
-			   "\t110David Baton\n"
-			   "\t110Jack Nalls\n";
-	}
-
-	const char *OPTIONS_MENU() {
-		return
-		  "\r\x1\x3""c\fdŒ¥ç ¨ Œ £¨ï\n"
-		  "%s Šá¨­ \x2\n"
-		  "\v%.3dCopyright (c) %d NWC, Inc.\n"
-		  "All Rights Reserved\x1";
-	}
-
-	const char **GAME_NAMES() {
-		delete[] _gameNames;
-		_gameNames = new const char *[3] { "Ž¡« ª ", "Darkside", "World" };
-		return _gameNames;
-	}
-
-	const char *THE_PARTY_NEEDS_REST() {
-		return "\v012Žâàï¤ ­ã¦¤ ¥âáï ¢ ®â¤ëå¥!";
-	}
-
-	const char *WHO_WILL() {
-		return "\x3""c\v000\t000%s\n\n%s?\n\v055F1 - F%d";
-	}
-
-	const char *HOW_MUCH() {
-		return "\x3""c‘ª®«ìª®\n\n";
-	}
-
-	const char *WHATS_THE_PASSWORD() {
-		return "\x3"
-			   "cWhat's the Password?\n"
-			   "\n"
-			   "Please turn to page %u, go to\n"
-			   "line %u, and type in word %u.\v067\t000Spaces are not counted as words or lines.  "
-			   "Hyphenated words are treated as one word.  Any line that has any text is considered a line."
-			   "\x3"
-			   "c\v040\t000\n";
-	}
-
-	const char *PASSWORD_INCORRECT() {
-		return "\x3"
-			   "c\v040\n"
-			   "\f32Incorrect!\fd";
-	}
-
-	const char *IN_NO_CONDITION() {
-		return "\v007%s ­¥ ¢ á®áâ®ï­¨¨ çâ®-«¨¡® ᤥ« âì!";
-	}
-
-	const char *NOTHING_HERE() {
-		return "\x3""c\v010‡¤¥áì ­¨ç¥£® ­¥â.";
-	}
-
-	const char **WHO_ACTIONS() {
-		delete[] _whoActions;
-		_whoActions = new const char *[32] {
-			"Šâ® ®¡ëé¥â",
-			"Šâ® ®âªà®¥â",
-			"Šâ® ¢ë¯ì¥â",
-			"Šâ® ¡ã¤¥â ª®¯ âì",
-			"Šâ® ¯®âண ¥â",
-			"Šâ® ¯à®çâñâ",
-			"Š®£® ­ ãç¨âì",
-			"Šâ® ¢®§ì¬ñâ",
-			"Šâ® 㤠à¨â",
-			"Šâ® ãªà ¤ñâ",
-			"Šâ® ¤ áâ ¢§ïâªã",
-			"Šâ® § ¯« â¨â",
-			"Šâ® ¯à¨á拉â",
-			"Šâ® ¯®¯à®¡ã¥â",
-			"Šâ® ¥£® ¯®¢¥à­ñâ",
-			"Šâ® ¨áªã¯­ñâáï",
-			"Šâ® ¥£® ã­¨ç⮦¨â",
-			"Šâ® ¢ë¤¥à­¥â",
-			"Šâ® á¯ãáâ¨âáï",
-			"Šâ® ¡à®á¨â ¬®­¥âªã",
-			"pray",
-			"Šâ® áâ ­¥â ç«¥­®¬",
-			"act",
-			"Šâ® å®ç¥â áë£à âì",
-			"Šâ® ­ ¦¬ñâ",
-			"rub",
-			"pick",
-			"eat",
-			"sign",
-			"close",
-			"look",
-			"try"
-		};
-		return _whoActions;
-	}
-
-	const char **WHO_WILL_ACTIONS() {
-		delete[] _whoWillActions;
-		_whoWillActions = new const char *[4] {
-			"Žâªàëâì à¥èñâªã",
-			"Žâªàëâì ¤¢¥àì",
-			" áªàëâì ᢨ⮪",
-			"‚ë¡¥à¨â¥ ¯¥àá®­ ¦ "
-		};
-		return _whoWillActions;
-	}
-
-	const char **DIRECTION_TEXT_UPPER() {
-		delete[] _directionTextUpper;
-		_directionTextUpper = new const char *[4] { "NORTH", "EAST", "SOUTH", "WEST" };
-		return _directionTextUpper;
-	}
-
-	const char **DIRECTION_TEXT() {
-		delete[] _directionText;
-		_directionText = new const char *[4] {
-			"‘¥¢¥à",
-			"‚®á⮪",
-			"ž£",
-			"‡ ¯ ¤"
-		};
-		return _directionText;
-	}
-
-	const char **RACE_NAMES() {
-		delete[] _raceNames;
-		_raceNames = new const char *[5] {
-			"—¥«®¢¥ª",
-			"«ìä",
-			"„¢®àä",
-			"ƒ­®¬",
-			"®«ã®àª"
-		};
-		return _raceNames;
-	}
-
-	const char **ALIGNMENT_NAMES() {
-		delete[] _alignmentNames;
-		_alignmentNames = new const char *[3] {
-			"•®à®è¨©",
-			"¥©âà «",
-			"‡«®©(- ï)"
-		};
-		return _alignmentNames;
-	}
-
-	const char **SEX_NAMES() {
-		delete[] _sexNames;
-		_sexNames = new const char *[2] {
-			"Œã¦ç¨­ ",
-			"†¥­é¨­ "
-		};
-		return _sexNames;
-	}
-
-	const char **SKILL_NAMES() {
-		delete[] _skillNames;
-		_skillNames = new const char *[18] {
-			"‚®à®¢á⢮\t100",
-			"Žà㦥©­¨ª",
-			"€áâ஫®£",
-			"€â«¥â",
-			"Š à⮣à ä",
-			"Šà¥áâ®­®á¥æ",
-			"—ã¢á⢮ ­ ¯à ¢«¥­¨ï",
-			"Ÿ§ëª®¢¥¤",
-			"Šã¯¥æ",
-			"‘ª «®« §",
-			"˜âãଠ­",
-			"‘«¥¤®¯ëâ",
-			"Œ £¨áâà ¬®«¨â¢ë",
-			"‹®¢ª®áâì ¯ «ì楢",
-			"«®¢¥æ",
-			"Žå®â­¨ª",
-			"‚®á¯à¨ï⨥",
-			"—ã¢á⢮ ®¯ á­®áâ¨"
-		};
-		return _skillNames;
-	}
-
-	const char **CLASS_NAMES() {
-		delete[] _classNames;
-		_classNames = new const char *[11] {
-			"ëæ àì",
-			" « ¤¨­",
-			"‹ãç­¨ª",
-			"Š«¨à¨ª",
-			"Œ £",
-			"⨈",
-			"¨­¤§ï",
-			"‚ à¢ à",
-			"„à㨤",
-			"‘«¥¤®¯ëâ",
-			nullptr
-		};
-		return _classNames;
-	}
-
-	const char **CONDITION_NAMES() {
-		delete[] _conditionNames;
-		_conditionNames = new const char *[17] {
-			"à®ª«ï⨥",
-			"Heart Broken",
-			"‘« ¡®áâì",
-			"Žâà ¢«¥­¨¥",
-			"®«¥§­ì",
-			"¥§ã¬¨¥",
-			"‚«î¡«ñ­(- )",
-			" ¢¥á¥«¥",
-			"‘®­",
-			"‚ ã­ë­¨¨",
-			"‚ á¬ï⥭¨¨",
-			" à «¨ç",
-			".á®§­ ­¨ï",
-			"Œ¥àâ¢",
-			"Š ¬¥­ì",
-			"“­¨ç⮦¥­",
-			"•®à®è¥¥"
-		};
-		return _conditionNames;
-	}
-
-	const char *GOOD() {
-		return "•®à®è¥¥";
-	}
-
-	const char *BLESSED() {
-		return "\n\t014« £®á«®¢¥­¨¥\t095%+d";
-	}
-
-	const char *POWER_SHIELD() {
-		return "\n\t014‘¨«®¢®© é¨â\t095%+d";
-	}
-
-	const char *HOLY_BONUS() {
-		return "\n\t014‘¢ï⮩ ¤ à\t095%+d";
-	}
-
-	const char *HEROISM() {
-		return "\n\t014Œã¦¥á⢮\t095%+d";
-	}
-
-	const char *IN_PARTY() {
-		return "\f15‚ ®âà拉\fd";
-	}
-
-	const char *PARTY_DETAILS() {
-		return
-			"\015\003l\002\014""00"
-			"\013""001""\011""035%s"
-			"\013""009""\011""035%s"
-			"\013""017""\011""035%s"
-			"\013""025""\011""035%s"
-			"\013""001""\011""136%s"
-			"\013""009""\011""136%s"
-			"\013""017""\011""136%s"
-			"\013""025""\011""136%s"
-			"\013""044""\011""035%s"
-			"\013""052""\011""035%s"
-			"\013""060""\011""035%s"
-			"\013""068""\011""035%s"
-			"\013""044""\011""136%s"
-			"\013""052""\011""136%s"
-			"\013""060""\011""136%s"
-			"\013""068""\011""136%s";
-	}
-
-	const char *PARTY_DIALOG_TEXT() {
-		return
-			"%s\x2\x3""c\v106\t013‚¢¥àå\t048‚­¨§\t083\f37“\fd¤ «\t118\f37‚\fd룭"
-			"\t153\f37‘\fd®§¤\t188‚\f37ë\fd室\x1";
-	}
-
-	const char *NO_ONE_TO_ADVENTURE_WITH() {
-		return "‚ ¬ ­¥ á ª¥¬ ¯ãâ¥è¥á⢮¢ âì";
-	}
-
-	const char *YOUR_ROSTER_IS_FULL() {
-		return "‚ è ᯨ᮪ ¯®«®­!";
-	}
-
-	const char *PLEASE_WAIT() {
-		return "\fd\x3""c\t000\v002®¤®¦¤¨â¥...";
-	}
-
-	const char *OOPS() {
-		return "\x3""c\t000\v002“¯á...";
-	}
-
-	const char *BANK_TEXT() {
-		return
-			"\r\x2\x3""c\v122\t013"
-			"\f37‚\fdª«\t040\f37‘\fd­\t067ESC"
-			"\x1\t000\v000 ­ª Šá¨­ \v015\n"
-			" ­ª\x3""l\n"
-			"‡®«\x3""r\t000%s\x3""l\n"
-			"€«¬§\x3""r\t000%s\x3""c\n"
-			"\n"
-			"Žâàï¤\x3""l\n"
-			"‡®«\x3""r\t000%s\x3""l\n"
-			"€«¬§\x3""r\t000%s";
-	}
-
-	const char *BLACKSMITH_TEXT() {
-		return
-			"\x1\r\x3""c\v000\t000"
-			"‹ ¢ª \t039\v027%s\x3""l\v046\n"
-			"\t011\f37‘\fd¬®âà¥âì\n"
-			"\t000\v090‡®«\x3""r\t000%s"
-			"\x2\x3""c\v122\t040ESC\x1";
-	}
-
-	const char *GUILD_NOT_MEMBER_TEXT() {
-		return "\n‚ë ¤®«¦­ë ¡ëâì ç«¥­®¬ £¨«ì¤¨¨, çâ®¡ë ¯®ªã¯ âì § ª«¨­ ­¨ï.";
-	}
-
-	const char *GUILD_TEXT() {
-		return
-			"\x3""c\v027\t039%s"
-			"\x3""l\v046\n"
-			"\t012\f37Š\fd㯨âì\n"
-			"\t012\f37Ž\fd¯¨á ­¨ï";
-	}
-
-	const char *TAVERN_TEXT() {
-		return
-			"\r\x3""c\v000\t000’ ¢¥à­ \t039"
-			"\v027%s%s\x3""l\t000"
-			"\v090‡®«\x3""r\t000%s\x2\x3""c\v122"
-			"\t021\f37Ž\fdâ¤ëå\t060ESC\x1";
-	}
-
-	const char *FOOD_AND_DRINK() {
-		return
-			"\x3""l\t017\v046\f37‚\fd믨âì\n"
-			"\t017\f37…\fd¤ \n"
-			"\t017\f37—\fd ¥¢ë¥\n"
-			"\t017\f37‘\fd«ãå¨";
-	}
-
-	const char *GOOD_STUFF() {
-		return
-			"\n"
-			"\n"
-			"¥¤ãà­®\n"
-			"\n"
-			" ¦¬¨â¥ ª« ¢¨èã!";
-	}
-
-	const char *HAVE_A_DRINK() {
-		return "\n‘¯¥à¢  ¢ë¯¥©â¥\n\n ¦¬¨â¥ ª« ¢¨èã!";
-	}
-
-	const char *YOURE_DRUNK() {
-		return "\n\n‚ë ¯ìï­ë\n\n ¦¬¨â¥ ª« ¢¨èã!";
-	}
-
-	const char *TEMPLE_TEXT() {
-		return
-			"\r\x3""c\v000\t000•à ¬"
-			"\t039\v027%s\x3""l\t000\v046"
-			"\f37‹\fd¥ç¨âì\x3""r\t000%lu\x3""l\n"
-			"\f37„\fd à\x3""r\t000%lu\x3""l\n"
-			"\f37‘\fd­à®ª«\x3""r\t000%s"
-			"\x3""l\t000\v090‡®«\x3""r\t000%s"
-			"\x2\x3""c\v122\t040ESC\x1";
-	}
-
-	const char *EXPERIENCE_FOR_LEVEL() {
-		return "%s\nã¦­® %lu ®çª®¢ ®¯ëâ  ¤«ï ã஢­ï %u.";
-	}
-
-	const char *TRAINING_LEARNED_ALL() {
-		return "%s\n‚ë 㦥 §­ ¥â¥ ¢áñ, ç¥¬ã ¬ë ¬®¦¥¬ ¢ á ­ ãç¨âì!";
-	}
-
-	const char *ELIGIBLE_FOR_LEVEL() {
-		return
-			"%s ¬®¦¥â ®¡ãç âìáï ¤® ã஢­ï %d.\x3""l\n"
-			"\v081–¥­ \x3""r\t000%lu";
-	}
-
-	const char *TRAINING_TEXT() {
-		return
-			"\r\x3""cŽ¡ã祭¨¥\n"
-			"\n"
-			"%s\x3""l\v090\t000‡®«\x3""r\t000%s\x2\x3""c\v122\t021"
-			"\f37Ž\fd¡ã祭¨¥\t060ESC\x1";
-	}
-
-	const char *GOLD_GEMS() {
-		return
-			"\x3""c\v000\t000%s\x3""l\n"
-			"\n"
-			"‡®«\x3""r\t000%s\x3""l\n"
-			"€«¬§\x3""r\t000%s\x2\x3""c\v096\t007\f37€\fd«¬§\t035\f37‡\fd®«\t067ESC\x1";
-	}
-
-	const char *GOLD_GEMS_2() {
-		return
-			"\t000\v000\x3""c%s\x3""l\n"
-			"\n"
-			"\x4""077‡®«\x3""r\t000%s\x3""l\n"
-			"\x4""077€«¬§\x3""r\t000%s\x3""l\t000\v051\x4""077\n"
-			"\x4""077";
-	}
-
-	const char **DEPOSIT_WITHDRAWL() {
-		delete[] _depositWithdrawl;
-		_depositWithdrawl = new const char *[2] { "®«®¦¨âì ­  áçñâ", "‘­ïâì á® áçñâ " };
-		return _depositWithdrawl;
-	}
-
-	const char *NOT_ENOUGH_X_IN_THE_Y() {
-		return "\x3""c\v012¥¤®áâ â®ç­® %s %s!\x3""l";
-	}
-
-	const char *NO_X_IN_THE_Y() {
-		return "\x3""c\v012¥â %s %s!\x3""l";
-	}
-
-	const char **STAT_NAMES() {
-		delete[] _statNames;
-		_statNames = new const char *[16] {
-			"‘¨« ", "ˆ­â¥««¥ªâ", "‘¨«  ¤ãå ", "‘«®¦¥­¨¥", "‘ª®à®áâì",
-			"Œ¥âª®áâì", "“¤ ç ", "‚®§à áâ", "“஢¥­ì", "Š« áá § é¨âë", "‡¤®à®¢ì¥",
-			"Žçª¨ ¬ £¨¨", "“á⮩稢®áâ¨", " ¢ëª¨", " £à ¤ë", "ޝëâ"
-		};
-		return _statNames;
-	}
-
-	const char **CONSUMABLE_NAMES() {
-		delete[] _consumableNames;
-		_consumableNames = new const char *[4] { "‡®«®â®", "€«¬ §ë", "¨é ", "‘®áâ®ï­¨¥" };
-		return _consumableNames;
-	}
-
-	const char **WHERE_NAMES() {
-		delete[] _whereNames;
-		_whereNames = new const char *[2] { "ã ®âà鸞", "¢ ¡ ­ª¥" };
-		return _whereNames;
-	}
-
-	const char *AMOUNT() {
-		return "\x3""c\t000\v051‘ª®«ìª®\x3""l\n";
-	}
-
-	const char *FOOD_PACKS_FULL() {
-		return "\v007‚ è¨ à ª¨ 㦥 ­ ¯®«­¥­ë!";
-	}
-
-	const char *BUY_SPELLS() {
-		return
-			"\x3""c\v027\t039%s\x3""l\v046\n"
-			"\t012\f37Š\fd㯨âì\n"
-			"\t012\f37Ž\fd¯¨á ­¨ï";
-	}
-
-	const char *GUILD_OPTIONS() {
-		return
-			"\x1\r\f00\x3""c\v000\t000ƒ¨«ì¤¨ï\n"
-			"%s\x3""l\t000\v090‡®«"
-			"\x3""r\t000%s\x2\x3""c\v122\t040ESC\x1";
-	}
-
-	const char *NOT_A_SPELL_CASTER() {
-		return "‚ë ­¥ § ª«¨­ â¥«ì...";
-	}
-
-	const char *SPELLS_LEARNED_ALL() {
-		return
-			"‚ë 㦥 §­ ¥â¥ ¢áñ,\n"
-			"\t010ç¥¬ã ¬ë ¬®¦¥¬ ¢ á\n"
-			"\t010­ ãç¨âì!\n"
-			"\n"
-			"\n"
-			"\n"
-			"\n"
-			"\n"
-			"\n"
-			"\n"
-			"\n"
-			"\n";
-	}
-
-	const char *SPELLS_FOR() {
-		return "\r\fd%s\x2\x3""c\t000\v002‡ ª«¨­ ­¨ï";
-	}
-
-	const char *SPELL_LINES_0_TO_9() {
-		return "\x2\x3l\v015\t0011\n2\n3\n4\n5\n6\n7\n8\n9\n0";
-	}
-
-	const char *SPELLS_DIALOG_SPELLS() {
-		return 
-			"\x3l\v015"
-			"\t010\f%2u%s\fd\x3l\n"
-			"\t010\f%2u%s\fd\x3l\n"
-			"\t010\f%2u%s\fd\x3l\n"
-			"\t010\f%2u%s\fd\x3l\n"
-			"\t010\f%2u%s\fd\x3l\n"
-			"\t010\f%2u%s\fd\x3l\n"
-			"\t010\f%2u%s\fd\x3l\n"
-			"\t010\f%2u%s\fd\x3l\n"
-			"\t010\f%2u%s\fd\x3l\n"
-			"\t010\f%2u%s\fd\x3l"
-			"\t004\v110%s - %u\x1";
-	}
-
-	const char *SPELL_PTS() {
-		return "Œ ­ ";
-	}
-
-	const char *GOLD() {
-		return "‡®«";
-	}
-
-	const char *SPELL_INFO() {
-		return
-			"\x3""c\f09%s\fd\x3""l\n"
-			"\n"
-			"%s\x3""c\t000\v110. ª« ¢¨èã!";
-	}
-
-	const char *SPELL_PURCHASE() {
-		return
-			"\x3""l\v000\t000\fd%s  †¥« ¥â¥ ¯à¨®¡à¥á⨠"
-			"\f09%s\fd §  %u?";
-	}
-
-	const char *MAP_TEXT() {
-		return
-			"\x3""c\v000\t000%s\x3l\v139"
-			"\t000X = %d\x3r\t000Y = %d\x3""c\t000%s";
-	}
-
-	const char *LIGHT_COUNT_TEXT() {
-		return "\x3""l\n\n\t024‘¢¥â\x3""r\t124%u";
-	}
-
-	const char *FIRE_RESISTENCE_TEXT() {
-		return "%c%sŽ£®­ì%s%u";
-	}
-
-	const char *ELECRICITY_RESISTENCE_TEXT() {
-		return "%c%sƒà®¬%s%u";
-	}
-
-	const char *COLD_RESISTENCE_TEXT() {
-		return "%c%s•®«®¤%s%u";
-	}
-
-	const char *POISON_RESISTENCE_TEXT() {
-		return "%c%sŸ¤/Š¨á«®â %s%u";
-	}
-
-	const char *CLAIRVOYANCE_TEXT() {
-		return "%c%sŸá­®¢¨¤¥­¨¥%s";
-	}
-
-	const char *LEVITATE_TEXT() {
-		return "%c%s‹¥¢¨â æ¨ï%s";
-	}
-
-	const char *WALK_ON_WATER_TEXT() {
-		return "%c%s•®¦¤¥­¨¥ ¯® ¢®¤¥";
-	}
-
-	const char *GAME_INFORMATION() {
-		return
-			"\r\x3""c\t000\v001\f37%s Šá¨­ \fd\n"
-			"ˆ£à®¢ ï ¨­ä®à¬ æ¨ï\n"
-			"\n"
-			"‘¥£®¤­ï \f37%s\fd\n"
-			"\n"
-			"\t032‚६ï\t072„¥­ì\t112ƒ®¤\n"
-			"\t032\f37%d:%02d%c\t072%u\t112%u\fd%s";
-	}
-
-	const char *WORLD_GAME_TEXT() {
-		return "World";
-	}
-
-	const char *DARKSIDE_GAME_TEXT() {
-		return "Darkside";
-	}
-
-	const char *CLOUDS_GAME_TEXT() {
-		return "Ž¡« ª ";
-	}
-
-	const char *SWORDS_GAME_TEXT() {
-		return "Swords";
-	}
-
-	const char **WEEK_DAY_STRINGS() {
-		delete[] _weekDayStrings;
-		_weekDayStrings = new const char *[10] {
-			"¤¥áï⨤¥­ì", "¯¥à¢®¤¥­ì", "¢â®à®¤¥­ì", "âà¥â쥤¥­ì", "ç¥â¢¥à®¤¥­ì",
-			"¯ï⨤¥­ì",   "è¥á⨤¥­ì", "ᥬ¨¤¥­ì",  "¢®á쬨¤¥­ì", "¤¥¢ï⨤¥­ì"
-		};
-		return _weekDayStrings;
-	}
-
-	const char *CHARACTER_DETAILS() {
-		return
-			"\x3""l\v041\t196%s\t000\v002%s : %s %s %s"
-			"\x3""r\t053\v028\f%02u%u\fd\t103\f%02u%u\fd"
-			"\x3""l\t131\f%02u%d\fd\t196\f15%lu\fd\x3""r"
-			"\t053\v051\f%02u%u\fd\t103\f%02u%u\fd"
-			"\x3""l\t131\f%02u%u\fd\t196\f15%lu\fd"
-			"\x3""r\t053\v074\f%02u%u\fd\t103\f%02u%u\fd"
-			"\x3""l\t131\f15%u\fd\t196\f15%lu\fd"
-			"\x3""r\t053\v097\f%02u%u\fd\t103\f%02u%u\fd"
-			"\x3""l\t131\f15%u\fd\t196\f15%u %s\fd"
-			"\x3""r\t053\v120\f%02u%u\fd\t103\f%02u%u\fd"
-			"\x3""l\t131\f15%u\fd\t196\f%02u%s\fd"
-			"\t245%s%s%s%s\fd";
-	}
-
-	const char **DAYS() {
-		delete[] _days;
-		_days = new const char *[3] { "¤¥­ì", "¤­ï", "¤­¥©" };
-		return _days;
-	}
-
-	const char *PARTY_GOLD() {
-		return "‡®«®â®";
-	}
-
-	const char *PLUS_14() {
-		return "\f14+";
-	}
-
-	const char *CHARACTER_TEMPLATE() {
-		return
-			"\x1\f00\r\x3""l\t029\v018‘¨«\t080Œâª\t131‡¤®à\t196ޝëâ"
-			"\t029\v041ˆ­â\t080“¤ç\t131ŽŒ\t029\v064„ãå\t080‚§à"
-			"\t131“áâ\t196€«¬ §ë\t029\v087‘«¦\t080“à¢\t131¢ª"
-			"\t196¨é \t029\v110‘ªà\t080Ї\t131 £à\t196‘®áâ®ï­¨¥"
-			"\x3""c\t290\v025\f37‚\fd¥é¨\t290\v057\f37"
-			"\fdáâà\t290\v089\f37‘\fd¬¥­\t290\v121‚ë室\x3""l%s";
-	}
-
-	const char *EXCHANGING_IN_COMBAT() {
-		return "\x3""c\v007\t000‚® ¢à¥¬ï ¡¨â¢ë § ¯à¥é¥­® ¬¥­ïâìáï ¬¥áâ ¬¨!";
-	}
-
-	const char *CURRENT_MAXIMUM_RATING_TEXT() {
-		return
-			"\x2\x3""c%s\n"
-			"‘¥©ç á / Œ ªá¨¬ã¬\n"
-			"\x3""r\t054%lu\x3""l\t058/ %lu\n"
-			"\x3""c ­£: %s\x1";
-	}
-
-	const char *CURRENT_MAXIMUM_TEXT() {
-		return
-			"\x2\x3""c%s\n"
-			"‘¥©ç á / Œ ªá¨¬ã¬\n"
-			"\x3""r\t054%d\x3""l\t058/ %lu";
-	}
-
-	const char **RATING_TEXT() {
-		delete[] _ratingText;
-		_ratingText = new const char *[24] {
-			"¥â", "Œ¨§¥à­ë©", "† «ª¨©", "Žç.­¨§ª¨©", "¨§ª¨©", "‘।­¨©", "•®à®è¨©",
-			"Žâ«¨ç­ë©", "‚ë᮪¨©", "‚ëá®ç¥­­ë©", "®«ì让", "Ž£à®¬­ë©", "“¤¨¢¨â¥«ì­ë©",
-			"¥¢¥à®ïâ­ë©", "ƒ¨£ ­â᪨©", "” ­â áâ¨ç­ë©", "ˆ§ã¬¨â¥«ì­ë©", "®à §¨â¥«ì­ë©",
-			"ƒà ­¤¨®§­ë©", "ƒà®¬ ¤­ë©", "Š®«®áá «ì­ë©", "®âàïá î騩", "—㤮¢¨é­ë©",
-			"‚ëá®ç ©è¨©"
-		};
-		return _ratingText;
-	}
-
-	const char *AGE_TEXT() {
-		return
-			"\x2\x3""c%s\n"
-			"’¥ªã騩 /  áâ®ï騩\n"
-			"\x3""r\t057%u\x3""l\t061/ %u\n"
-			"\x3""c®¤¨«%s: %u / %u\x1";
-	}
-
-	const char *LEVEL_TEXT() {
-		return
-			"\x2\x3""c%s\n"
-			"’¥ªã騩 / Œ ªá¨¬ã¬\n"
-			"\x3""r\t054%u\x3""l\t058/ %u\n"
-			"\x3""c%u €â ª%s/ ã­¤\x1";
-	}
-
-	const char *RESISTENCES_TEXT() {
-		return
-			"\x2\x3""c%s\x3""l\n"
-			"\t020Ž£®­ì\t100%u\n"
-			"\t020•®«®¤\t100%u\n"
-			"\t020ƒà®¬\t100%u\n"
-			"\t020Ÿ¤\t100%u\n"
-			"\t020­¥à£¨ï\t100%u\n"
-			"\t020Œ £¨ï\t100%u";
-	}
-
-	const char *NONE() {
-		return "\n\t012¥â";
-	}
-
-	const char *EXPERIENCE_TEXT() {
-		return
-			"\x2\x3""c%s\x3""l\n"
-			"\t005’¥ªã騩:\t070%lu\n"
-			"\t005‘«. ã஢¥­ì:\t070%s\x1";
-	}
-
-	const char *ELIGIBLE() {
-		return "\f12„®áâ㯥­\fd";
-	}
-
-	const char *IN_PARTY_IN_BANK() {
-		return
-			"\x2\x3""c%s\n"
-			"%lu á ᮡ®©\n"
-			"%lu ¢ ¡ ­ª¥\x1\x3""l";
-	}
-
-	const char *FOOD_TEXT() {
-		return
-			"\x2\x3""c%s\n"
-			"%u ¯®àæ¨%c\n"
-			"•¢ â¨â ­  %u %s\x1\x3""l";
-	}
-
-	const char *EXCHANGE_WITH_WHOM() {
-		return "\t010\v005®¬¥­ïâìáï á ª¥¬?";
-	}
-
-	const char *QUICK_REF_LINE() {
-		return
-			"\v%3d\t007%u)\t027%s\t110%c%c%c\x3r\t160\f%02u%u\fd"
-			"\x3l\t170\f%02u%d\fd\t208\f%02u%u\fd\t247\f"
-			"%02u%u\fd\t270\f%02u%c%c%c%c\fd";
-	}
-
-	const char *QUICK_REFERENCE() {
-		return
-			"\r\x3""cëáâà ï c¯à ¢ª \v012\x3""l"
-			"\t007#\t027ˆ¬ï\t110Š«á\t147“à¢\t174‡¤®à"
-			"\t214ŽŒ\t242Ї\t270‘®áâ"
-			"%s%s%s%s%s%s%s%s"
-			"\v110\t064\x3""c‡®«®â®\t144€«¬ §ë\t224¨é \v119"
-			"\t064\f15%lu\t144%lu\t224%u %s\fd";
-	}
-
-	const char *ITEMS_DIALOG_TEXT1() {
-		return
-			"\r\x2\x3""c\v021\t017Žàã\f37¦\fd\t051\f37\fdà®­ï\t085"
-			"\f37“\fdªà è\t119\f37\fd §­\t153%s\t187%s\t221%s\t255%s\t289‚ë室";
-	}
-
-	const char *ITEMS_DIALOG_TEXT2() {
-		return
-			"\r\x2\x3""c\v021\t017Žàã\f37¦\fd\t051\f37\fdà®­ï\t085"
-			"\f37“\fdªà è\t119\f37\fd §­\t153\f37%s\t289‚ë室";
-	}
-
-	const char *ITEMS_DIALOG_LINE1() {
-		return "\x3r\f%02u\t023%2d)\x3l\t028%s\n";
-	}
-
-	const char *ITEMS_DIALOG_LINE2() {
-		return "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%u\n";
-	}
-
-	const char *BTN_BUY() {
-		return "\f37Š\fdã¯";
-	}
-
-	const char *BTN_SELL() {
-		return "\f37\fdத";
-	}
-
-	const char *BTN_IDENTIFY() {
-		return "\f37Ž\fd¯®§­";
-	}
-
-	const char *BTN_FIX() {
-		return "\f37—\fd¨­¨âì";
-	}
-
-	const char *BTN_USE() {
-		return "\f37ˆ\fdá¯";
-	}
-
-	const char *BTN_EQUIP() {
-		return "\f37\fd ¤";
-	}
-
-	const char *BTN_REMOVE() {
-		return "\f37‘\fd­ïâì";
-	}
-
-	const char *BTN_DISCARD() {
-		return "\f37‚\fdë¡à";
-	}
-
-	const char *BTN_QUEST() {
-		return "\f37‡\fd ¤ ­";
-	}
-
-	const char *BTN_ENCHANT() {
-		return "‡\fd ç à";
-	}
-
-	const char *BTN_RECHARGE() {
-		return "\fd¥à¥§à";
-	}
-
-	const char *BTN_GOLD() {
-		return "‡\fd®«®â®";
-	}
-
-	const char *ITEM_BROKEN() {
-		return "\f32á«®¬ ­® ";
-	}
-
-	const char *ITEM_CURSED() {
-		return "\f09¯à®ª«ïâ® ";
-	}
-
-	const char *ITEM_OF() {
-		return "";
-	}
-
-	const char **BONUS_NAMES() {
-		delete[] _bonusNames;
-		_bonusNames = new const char *[7] {
-			"", "“¡¨©æë ¤à ª®­®¢", "ˆ§£®­ïî饣® ¬ñàâ¢ëå", "Šàãè¨â¥«ï £®«¥¬®¢",
-			"„ ¢¨â¥«ï ­ á¥ª®¬ëå", "“¡¨©æë ¬®­áâ஢", "“¡¨©æë §¢¥à¥©"
-		};
-		return _bonusNames;
-	}
-
-	const char **WEAPON_NAMES() {
-		delete[] _weaponNames;
-		_weaponNames = new const char *[41] {
-			nullptr, "¬¥ç ", "£« ¤¨ãá ", "¯ « è ", "ïâ £ ­ ",
-			"ª®à⨪ ", "á ¡«ï ", "¤ã¡¨­  ", "⮯®à ", "ª â ­  ", "­ã­ç ª¨ ",
-			"¢ ª¨¤§ á¨ ", "ª¨­¦ « ", "¡ã« ¢  ", "楯 ", "¦¥§« ", "¬®«®â ", "ª®¯ìñ ",
-			"¡¥à¤ëè ", "£«¥ä  ", " «¥¡ à¤  ", "¯¨ª  ", "ä« ¬¡¥à£ ", "â१㡥æ ",
-			"¯®á®å ", "¡®¥¢®© ¬®«®â ", "­ £¨­ â  ", "¡®¥¢®© ⮯®à ", "ᥪ¨à  ",
-			"⮯®à ¯ « ç  ", "«ãª ", "¡®«ì让 «ãª ", " à¡ «¥â ", "¯à é  ",
-			"Œ¥ç - 㡨©æ  Šá¨­  ",
-			"Elder LongSword ", "Elder Dagger ", "Elder Mace ", "Elder Spear ",
-			"Elder Staff ", "Elder LongBow "
-		};
-		return _weaponNames;
-	}
-
-	const char **ARMOR_NAMES() {
-		delete[] _armorNames;
-		_armorNames = new const char *[14] {
-			nullptr, "¬ ­â¨ï ", "ç¥èãï ", "¯ ­æ¨àì ", "ª®«ìç㣠 ",
-			"î謠­ ", "¡¥åâ¥à¥æ ", "« âë ", "é¨â ",
-			"è«¥¬ ", "á ¯®£¨ ", "¯« é ", "­ ª¨¤ª  ", "¯¥àç âª¨ "
-		};
-		return _armorNames;
-	}
-
-	const char **ACCESSORY_NAMES() {
-		delete[] _accessoryNames;
-		_accessoryNames = new const char *[11] {
-			nullptr, "ª®«ìæ® ", "¯®ïá ", "¡à®èì ", "¬¥¤ «ì ", "â «¨á¬ ­ ", "ª ¬¥ï ",
-			"᪠ࠡ¥© ", "ªã«®­ ", "®¦¥à¥«ì¥ ", " ¬ã«¥â "
-		};
-		return _accessoryNames;
-	}
-
-	const char **MISC_NAMES() {
-		delete[] _miscNames;
-		_miscNames = new const char *[22] {
-			nullptr, "᪨¯¥âà ", "á ¬®æ¢¥â ", "ª ¬¥­ì ", "誠â㫪  ", "áä¥à  ", "ண ",
-			"¬®­¥âª  ", "¦¥§« ", "ᢨá⮪ ", "§¥«ì¥ ", "ᢨ⮪ ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ",
-			"¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ", "¯®¤¤¥«ª ",
-			"¯®¤¤¥«ª ", "¯®¤¤¥«ª "
-		};
-		return _miscNames;
-	}
-
-	const char **SPECIAL_NAMES() {
-		delete[] _specialNames;
-		_specialNames = new const char *[74] {
-			nullptr, "ᢥâ ", "¯à®¡ã¦¤¥­¨ï", "¢®«è¥¡­ëå áâ५", "¯¥à¢®© ¯®¬®é¨",
-			"ªã« ª®¢", "í­¥à£¥â¨ç¥áª®£® ¢§à뢠", "ãá믫¥­¨ï", "«¥ç¥­¨ï á« ¡®áâ¨",
-			"«¥ç¥­¨ï", "¨áªà", "èà ¯­¥«¨", "९¥««¥­â ", "冷¢¨âëå ®¡« ª®¢",
-			"§ é¨âë ®â áâ¨å¨©", "¡®«¨", "¯à릪®¢", "ª®­âà®«ï ­ ¤ ¬®­áâà ¬¨",
-			"ïá­®¢¨¤¥­¨ï", "¨§£­ ­¨ï ­¥¦¨â¨", "«¥¢¨â æ¨¨", "¢®«è¥¡­®£® £« § ",
-			"¡« £®á«®¢¥­¨ï", "®¯®§­ ­¨ï ¬®­áâ஢", "¬®«­¨©", "á¢ïâëå ¤ à®¢", "¨á楫¥­¨ï",
-			"¯à¨à®¤­®£® «¥ç¥­¨ï", "¬ ïª®¢", "é¨â ", "¬ã¦¥á⢠", "£¨¯­®§ ",
-			"宦¤¥­¨ï ¯® ¢®¤¥", "®¡¦¨£ î饣® 宫®¤ ", "¯®¨áª  ¬®­áâ஢",
-			"®£­¥­­ëå è à®¢", "«ã祩 宫®¤ ", "¯à®â¨¢®ï¤¨ï", "à á¯ë«¥­¨ï ª¨á«®âë",
-			"¢à¥¬¥­­®£® ¨áª ¦¥­¨ï", "ãá믫¥­¨ï ¤à ª®­®¢", "¢ ªæ¨­ æ¨¨", "⥫¥¯®àâ æ¨¨",
-			"ᬥàâ¨", "᢮¡®¤­®£® ¤¢¨¦¥­¨ï", "®áâ ­®¢ª¨ £®«¥¬ ", "冷¢¨âëå § «¯®¢",
-			"ᬥà⥫쭮£® à®ï", "ã¡¥¦¨é ", "¤­ï § é¨âë", "¤­ï ¬ £¨¨", "¯¨à ",
-			"®£­¥­­®£® 楯 ", "¯¥à¥§ à浪¨", "¬®à®§ ", "£®à®¤áª¨å ¯®àâ «®¢",
-			"á­ïâ¨ï ®ª ¬¥­¥­¨ï", "®¦¨¢«¥­¨ï ¬ñàâ¢ëå", "¤¥¬ â¥à¨ «¨§ æ¨¨",
-			"â ­æãîé¨å ª«¨­ª®¢", "«ã­­ëå «ã祩", "¨§¬¥­¥­¨ï ¢¥á ",
-			"¯à¨§¬ â¨ç¥áª®£® ᢥâ ", "ç à", "¨á¯¥¯¥«¥­¨ï", "á¢ïâëå á«®¢", "¢®áªà¥è¥­¨ï",
-			"¡ãàì", "¬¥£ ¢®«ìâ", "¨­ä¥à­®", "᮫­¥ç­ëå «ã祩", "¨¬¯«®§¨©",
-			"¢§à뢠 §¢¥§¤ë", "ŽƒŽ‚!"
-		};
-		return _specialNames;
-	}
-
-	const char **ELEMENTAL_NAMES() {
-		delete[] _elementalNames;
-		_elementalNames = new const char *[6] {
-			"Ž£­ï", "ƒà®¬ ", "•®«®¤ ", "Š¨á«®âë/Ÿ¤ ", "­¥à£¨¨", "Œ £¨¨"
-		};
-		return _elementalNames;
-	}
-
-	const char **ATTRIBUTE_NAMES() {
-		delete[] _attributeNames;
-		_attributeNames = new const char *[10] {
-			"‘¨« ", "ˆ­â¥««¥ªâ", "‘¨«  ¤ãå ", "‘ª®à®áâì", "Œ¥âª®áâì", "“¤ ç ",
-			"‡¤®à®¢ì¥", "Žçª¨ ¬ £¨¨", "Š« áá § é¨âë", "‚®à®¢á⢮"
-		};
-		return _attributeNames;
-	}
-
-	const char **EFFECTIVENESS_NAMES() {
-		delete[] _effectivenessNames;
-		_effectivenessNames = new const char *[7] {
-			nullptr, "„à ª®­®¢", "Œñàâ¢ëå", "ƒ®«¥¬®¢", " á¥ª®¬ëå", "Œ®­áâ஢", "‡¢¥à¥©"
-		};
-		return _effectivenessNames;
-	}
-
-	const char **QUEST_ITEM_NAMES() {
-		delete[] _questItemNames;
-		_questItemNames = new const char *[85] {
-			"à ¢® ¢« ¤¥­¨ï ì᫮¬",
-			"•àãáâ «ì­ë© ª«îç ®â ‚¥¤ì¬¨­®© ¡ è­¨",
-			"Žâ¬ë窠 ¤«ï ¡ è­¨ „ à§®£ ",
-			"Š«îç ®â  è­¨ ¢ëá襩 ¬ £¨¨",
-			"„à £®æ¥­­ë©  ¬ã«¥â ‘¥¢¥à­®£® ‘䨭ªá ",
-			"Š ¬¥­ì ’ëáïç¨ “¦ á®¢",
-			"Žâ¯¨à î騩 ª ¬¥­ì £®«¥¬®¢",
-			"Žâ¯¨à î騩 ª ¬¥­ì Ÿª ",
-			"‘ª¨¯¥âà ‚à¥¬¥­­®£® ˆáª ¦¥­¨ï",
-			"®£ ” «¨áâë",
-			"«¨ªá¨à ‚®ááâ ­®¢«¥­¨ï",
-			"‚®«è¥¡­ë© ¦¥§« 䥩",
-			"„¨ ¤¥¬  ¯à¨­æ¥ááë ®ªá ­ë",
-			"‘¢ï饭­ ï Š­¨£  «ì䮢",
-			"‘ª à ¡¥© ‚®¯«®é¥­¨ï",
-			"Šà¨áâ ««ë ì¥§®í«¥ªâà¨ç¥á⢠",
-			"‘¢¨â®ª Œã¤à®áâ¨",
-			"Š®à¥­ì ä¨à­ë",
-			"Š®áâï­®© ᢨá⮪ Žà®ä¨­ ",
-			"‚®«è¥¡­ë© ªã«®­  à®ª ",
-			"à®¯ ¢è¨© ç¥à¥¯ ‹¨£®­®",
-			"®á«¥¤­¨© 梥⮪ «¥â ",
-			"®á«¥¤­ïï ¤®¦¤¥¢ ï ª ¯¥«ìª  ¢¥á­ë",
-			"®á«¥¤­ïï á­¥¦¨­ª  §¨¬ë",
-			"®á«¥¤­¨© «¨á⠮ᥭ¨",
-			"‚¥ç­® £®àï稩 ªã᮪ ¯¥¬§ë",
-			"Œ¥£ ªà¥¤¨â ª®à®«ï",
-			" §à¥è¥­¨¥ ­  à áª®¯ª¨",
-			"Šãª®«ª ",
-			"Šãª«  ‘¨«ë",
-			"Šãª«  ‘ª®à®áâ¨",
-			"Šãª«  ‘«®¦¥­¨ï",
-			"Šãª«  Œ¥âª®áâ¨",
-			"Šãª«  “¤ ç¨",
-			"“áâனá⢮",
-			"Pass to Castleview",
-			"Pass to Sandcaster",
-			"Pass to Lakeside",
-			"Pass to Necropolis",
-			"Pass to Olympus",
-			"Key to Great Western Tower",
-			"Key to Great Southern Tower",
-			"Key to Great Eastern Tower",
-			"Key to Great Northern Tower",
-			"Key to Ellinger's Tower",
-			"Key to Dragon Tower",
-			"Key to Darkstone Tower",
-			"Key to Temple of Bark",
-			"Key to Dungeon of Lost Souls",
-			"Key to Ancient Pyramid",
-			"Key to Dungeon of Death",
-			"Amulet of the Southern Sphinx",
-			"Dragon Pharoah's Orb",
-			"Cube of Power",
-			"Chime of Opening",
-			"Gold ID Card",
-			"Silver ID Card",
-			"Vulture Repellant",
-			"Bridle",
-			"Enchanted Bridle",
-			"Treasure Map (Goto E1 x1, y11)",
-			"",
-			"Fake Map",
-			"Onyx Necklace",
-			"Dragon Egg",
-			"Tribble",
-			"Golden Pegasus Statuette",
-			"Golden Dragon Statuette",
-			"Golden Griffin Statuette",
-			"Chalice of Protection",
-			"Jewel of Ages",
-			"Songbird of Serenity",
-			"Sandro's Heart",
-			"Ector's Ring",
-			"Vespar's Emerald Handle",
-			"Queen Kalindra's Crown",
-			"Caleb's Magnifying Glass",
-			"Soul Box",
-			"Soul Box with Corak inside",
-			"Ruby Rock",
-			"Emerald Rock",
-			"Sapphire Rock",
-			"Diamond Rock",
-			"Monga Melon",
-			"Energy Disk"
-		};
-		return _questItemNames;
-	}
-
-	const char **QUEST_ITEM_NAMES_SWORDS() {
-		delete[] _questItemNamesSwords;
-		_questItemNamesSwords = new const char *[51] {
-			"Pass to Hart", "Pass to Impery", "Pass to town3", "Pass to town4", "Pass to town5",
-				"Key to Hart Sewers", "Key to Rettig's Pyramid", "Key to the Old Temple",
-				"Key to Canegtut's Pyramid", "Key to Ascihep's Pyramid", "Key to Dragon Tower",
-				"Key to Darkstone Tower", "Key to Temple of Bark", "Key to Dungeon of Lost Souls",
-				"Key to Ancient Pyramid", "Key to Dungeon of Death", "Red Magic Hammer",
-				"Green Magic Hammer", "Golden Magic Wand", "Silver Magic Hammer", "Magic Coin",
-				"Ruby", "Diamond Mineral", "Emerald", "Sapphire", "Treasure Map (Goto E1 x1, y11)",
-				"NOTUSED", "Melon", "Princess Crown", "Emerald Wand", "Druid Carving", "High Sign",
-				"Holy Wheel", "Double Cross", "Sky Hook", "Sacred Cow", "Staff of the Mountain",
-				"Hard Rock", "Soft Rock", "Rock Candy", "Ivy Plant", "Spirit Gem", "Temple of Sun holy lamp oil",
-				"Noams Hammer", "Positive Orb", "Negative Orb", "FireBane Staff", "Diamond Edged Pick",
-				"Monga Melon", "Energy Disk", "Old XEEN Quest Item"
-		};
-		return _questItemNamesSwords;
-	}
-
-	const char *NOT_PROFICIENT() {
-		return "\t000\v007\x3""c%s ­¥ ¬®¦¥â ¨á¯®«ì§®¢ âì %s!";
-	}
-
-	const char *NO_ITEMS_AVAILABLE() {
-		return "\x3""c\n\t000¥â ¢¥é¥©.";
-	}
-
-	const char **CATEGORY_NAMES() {
-		delete[] _categoryNames;
-		_categoryNames = new const char *[4] { "Žà㦨¥", "à®­ï", "“ªà è¥­¨ï", " §­®¥" };
-		return _categoryNames;
-	}
-
-	const char *X_FOR_THE_Y() {
-		return "\x1\fd\r%s\v000\t000%s - %s %s%s\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-	}
-
-	const char *X_FOR_Y() {
-		return
-		"\x1\fd\r\x3""l\v000\t000%s - %s\x3""r\t000%s\x3""l\v011"
-		"\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-	}
-
-	const char *X_FOR_Y_GOLD() {
-		return
-			"\x1\fd\r\x3""l\v000\t000%s - %s\t150‡®«®â® - %lu%s\x3""l\v011"
-			"\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-	}
-
-	const char *FMT_CHARGES() {
-		return "\x3""r\t000‡ à冷¢\x3""l";
-	}
-
-	const char *AVAILABLE_GOLD_COST() {
-		return
-		"\x1\fd\r\x3""l\v000\t000%s\t150‡®«®â® - %lu\x3""r\t000–¥­ "
-		"\x3""l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-	}
-
-	const char *CHARGES() {
-		return "‡ à冷¢";
-	}
-
-	const char *COST() {
-		return "–¥­ ";
-	}
-
-	const char **ITEM_ACTIONS() {
-		delete[] _itemActions;
-		_itemActions = new const char *[7] {
-			"­ ¤¥âì", "á­ïâì", "¨á¯®«ì§®¢ âì", "¢ëª¨­ãâì", "§ ç à®¢ âì", "¯¥à¥§ à廊âì",
-			"à¥¢à â¨âì ¢ §®«®â®"
-		};
-		return _itemActions;
-	}
-
-	const char *WHICH_ITEM() {
-		return "\v000Š ª®© ¯à¥¤¬¥â ¢ë ¦¥« ¥â¥ %s?";
-	}
-
-	const char *WHATS_YOUR_HURRY() {
-		return
-			"\v007—¥£® â®à®¯¨èìáï?\n"
-			"®¤®¦¤¨, ¯®ª  ­¥ ¢ë¡¥à¥èìáï ®âá!";
-	}
-
-	const char *USE_ITEM_IN_COMBAT() {
-		return "\v007—â®¡ë ¨á¯®«ì§®¢ âì ¯à¥¤¬¥â ¢ ¡¨â¢¥, ­ ¦¬¨â¥ ­  ª­®¯ªã 'ˆá¯' ­  ¡®ª®¢®© ¯ ­¥«¨.";
-	}
-
-	const char *NO_SPECIAL_ABILITIES() {
-		return "\v005\x3""c%s\fd­¥ ¨¬¥¥â ®á®¡ëå ᢮©áâ¢!";
-	}
-
-	const char *CANT_CAST_WHILE_ENGAGED() {
-		return "\x3""c\v007‡ ª«¨­ ­¨¥ %s ­¥«ì§ï ¨á¯®«ì§®¢ âì ¢ ¡¨â¢¥!";
-	}
-
-	const char *EQUIPPED_ALL_YOU_CAN() {
-		return "\x3""c\v007‚ë ­¥ ¬®¦¥â¥ ­ ¤¥âì ¡®«ìè¥ ¤¢ãå %s!";
-	}
-
-	const char *REMOVE_X_TO_EQUIP_Y() {
-		return "\x3""c\v007‚ ¬ ­ã¦­® á­ïâì %sçâ®¡ë ­ ¤¥âì %s\b!";
-	}
-
-	const char *RING() {
-		return "ª®«¥æ";
-	}
-
-	const char *MEDAL() {
-		return "¬¥¤ «¥©";
-	}
-
-	const char *CANNOT_REMOVE_CURSED_ITEM() {
-		return "\x3""c‚ë ­¥ ¬®¦¥â¥ á­ïâì ¯à®ª«ïâãî ¢¥éì!";
-	}
-
-	const char *CANNOT_DISCARD_CURSED_ITEM() {
-		return "\x3""c‚ë ­¥ ¬®¦¥â¥ ¢ëª¨­ãâì ¯à®ª«ïâãî ¢¥éì!";
-	}
-
-	const char *PERMANENTLY_DISCARD() {
-		return "\v000\t000\x3""l‚모­ãâì ­ ¢á¥£¤ ? %s";
-	}
-
-	const char *BACKPACK_IS_FULL() {
-		return "\v005\x3""c\fd%s! ‚ è à ª ¯®«®­.";
-	}
-
-	const char **CATEGORY_BACKPACK_IS_FULL() {
-		delete[] _categoryBackpackIsFull;
-		_categoryBackpackIsFull = new const char *[4] {
-			"\v010\t000\x3""c%s! ‚ è à ª ¯®«®­.",
-			"\v010\t000\x3""c%s! ‚ è à ª ¯®«®­.",
-			"\v010\t000\x3""c%s! ‚ è à ª ¯®«®­.",
-			"\v010\t000\x3""c%s! ‚ è à ª ¯®«®­."
-		};
-		return _categoryBackpackIsFull;
-	}
-
-	const char *BUY_X_FOR_Y_GOLD() {
-		return "\x3""l\v000\t000\fdŠã¯¨âì %s\fd §  %lu §®«®â%s?";
-	}
-
-	const char *SELL_X_FOR_Y_GOLD() {
-		return "\x3""l\v000\t000\fdà®¤ âì %s\fd §  %lu §®«®â%s?";
-	}
-
-	const char **SELL_X_FOR_Y_GOLD_ENDINGS() {
-		delete[] _sellXForYGoldEndings;
-		_sellXForYGoldEndings = new const char *[2] { "®©", "ëå" };
-		return _sellXForYGoldEndings;
-	}
-
-	const char *NO_NEED_OF_THIS() {
-		return "\v005\x3""c\fd á ­¥ ¨­â¥à¥áã¥â %s\fd!";
-	}
-
-	const char *NOT_RECHARGABLE() {
-		return "\v007\x3""c\fd¥¢®§¬®¦­® ¯¥à¥§ à廊âì.\n%s";
-	}
-
-	const char *NOT_ENCHANTABLE() {
-		return "\v007\t000\x3""c¥¢®§¬®¦­® § ç à®¢ âì.\n%s";
-	}
-
-	const char *SPELL_FAILED() {
-		return "‡ ª«¨­ ­¨¥ ­¥ áà ¡®â «®!";
-	}
-
-	const char *ITEM_NOT_BROKEN() {
-		return "\fdâ®â ¯à¥¤¬¥â ­¥ á«®¬ ­!";
-	}
-
-	const char **FIX_IDENTIFY() {
-		delete[] _fixIdentify;
-		_fixIdentify = new const char *[2] { "®ç¨­¨âì", "ޝ®§­ âì" };
-		return _fixIdentify;
-	}
-
-	const char *FIX_IDENTIFY_GOLD() {
-		return "\x3""l\v000\t000%s %s\fd §  %lu §®«®â%s?";
-	}
-
-	const char *IDENTIFY_ITEM_MSG() {
-		return
-			"\fd\v000\t000\x3""cޝ®§­ âì ¯à¥¤¬¥â\x3""l\n"
-			"\n"
-			"\v012%s\fd\n"
-			"\n"
-			"%s";
-	}
-
-	const char *ITEM_DETAILS() {
-		return
-			"ˆá¯®«ì§ãîâ ª« ááë\t132:\t140%s\n"
-			"Œ®¤¨ä¨ª â®à ãà®­ \t132:\t140%s\n"
-			"”¨§¨ç¥áª¨© ãà®­\t132:\t140%s\n"
-			"“à®­ ®â ‘â¨å¨©\t132:\t140%s\n"
-			"‡ é¨â  ®â ‘â¨å¨©\t132:\t140%s\n"
-			"Š« áá § é¨âë\t132:\t140%s\n"
-			"®­ãá ᢮©á⢠\t132:\t140%s\n"
-			"Žá®¡®¥ ᢮©á⢮\t132:\t140%s";
-	}
-
-	const char *ALL() {
-		return "⇴";
-	}
-
-	const char *FIELD_NONE() {
-		return "¥â";
-	}
-
-	const char *DAMAGE_X_TO_Y() {
-		return "%d-%d";
-	}
-
-	const char *ELEMENTAL_XY_DAMAGE() {
-		return "%+d ãà®­  ®â %s";
-	}
-
-	const char *ATTR_XY_BONUS() {
-		return "%+d %s";
-	}
-
-	const char *EFFECTIVE_AGAINST() {
-		return "x3 ¯à®â¨¢ %s";
-	}
-
-	const char *QUESTS_DIALOG_TEXT() {
-		return
-			"\r\x2\x3""c\v021\t017\f37‚\fd¥é¨\t085\f37‡\fd ¤ ­¨ï\t153"
-			"‡\f37 \fd¬¥âª¨\t221‚¢¥àå\t255‚­¨§"
-			"\t289‚ë室";
-	}
-
-	const char *CLOUDS_OF_XEEN_LINE() {
-		return "\b \b*-- \f04Ž¡« ª  Šá¨­ \fd --";
-	}
-
-	const char *DARKSIDE_OF_XEEN_LINE() {
-		return "\b \b*-- \f04Darkside of Xeen\fd --";
-	}
-
-	const char *SWORDS_OF_XEEN_LINE() {
-		return "\b \b*-- \f04Swords of Xeen\fd --";
-	}
-
-	const char *NO_QUEST_ITEMS() {
-		return
-			"\r\x1\fd\x3""c\v000\t000à¥¤¬¥âë § ¤ ­¨©\x3""l\x2\n"
-			"\n"
-			"\x3""c¥â ¯à¥¤¬¥â®¢";
-	}
-
-	const char *NO_CURRENT_QUESTS() {
-		return
-			"\x3""c\v000\t000\n"
-			"\n"
-			"¥â § ¤ ­¨©";
-	}
-
-	const char *NO_AUTO_NOTES() {
-		return "\x3""c‡ ¬¥â®ª ­¥â";
-	}
-
-	const char *QUEST_ITEMS_DATA() {
-		return
-			"\r\x1\fd\x3""c\v000\t000à¥¤¬¥âë § ¤ ­¨©\x3""l\x2\n"
-			"\f04 * \fd%s\n"
-			"\f04 * \fd%s\n"
-			"\f04 * \fd%s\n"
-			"\f04 * \fd%s\n"
-			"\f04 * \fd%s\n"
-			"\f04 * \fd%s\n"
-			"\f04 * \fd%s\n"
-			"\f04 * \fd%s\n"
-			"\f04 * \fd%s";
-	}
-
-	const char *CURRENT_QUESTS_DATA() {
-		return
-			"\r\x1\fd\x3""c\t000\v000‡ ¤ ­¨ï\x3""l\x2\n"
-			"%s\n"
-			"\n"
-			"%s\n"
-			"\n"
-			"%s";
-	}
-
-	const char *AUTO_NOTES_DATA() {
-		return
-			"\r\x1\fd\x3""c\t000\v000‡ ¬¥âª¨\x3""l\x2\n"
-			"%s\x3""l\n"
-			"%s\x3""l\n"
-			"%s\x3""l\n"
-			"%s\x3""l\n"
-			"%s\x3""l\n"
-			"%s\x3""l\n"
-			"%s\x3""l\n"
-			"%s\x3""l\n"
-			"%s\x3""l";
-	}
-
-	const char *REST_COMPLETE() {
-		return
-			"\v000\t000à®è«® 8 ç á®¢. Žâ¤ëå § ª®­ç¥­\n"
-			"%s\n"
-			"ë«® áꥤ¥­® %d ¯¨é¨.";
-	}
-
-	const char *PARTY_IS_STARVING() {
-		return "\f07Žâàï¤ £®«®¤ ¥â!\fd";
-	}
-
-	const char *HIT_SPELL_POINTS_RESTORED() {
-		return "‡¤®à®¢ì¥ ¨ ¬ ­  ¢®ááâ ­®¢«¥­ë";
-	}
-
-	const char *TOO_DANGEROUS_TO_REST() {
-		return "‡¤¥áì ᫨誮¬ ®¯ á­® ®â¤ëå âì!";
-	}
-
-	const char *SOME_CHARS_MAY_DIE() {
-		return "Šâ®-â® ¨§ ®âà鸞 ¬®¦¥â 㬥à¥âì. ‚ë ¢áñ à ¢­® ¦¥« ¥â¥ ®â¤®å­ãâì?";
-	}
-
-	const char *DISMISS_WHOM() {
-		return "\r\t010\v005Š®£® ¢ë£­ âì?";
-	}
-
-	const char *CANT_DISMISS_LAST_CHAR() {
-		return "‚ë ­¥ ¬®¦¥â¥ ¢ë£­ âì ᢮¥£® ¯®á«¥¤­¥£® ¯¥àá®­ ¦ !";
-	}
-
-	const char *DELETE_CHAR_WITH_ELDER_WEAPON() {
-		return "\v000\t000This character has an Elder Weapon and cannot be deleted!";
-	}
-
-	const char **REMOVE_DELETE() {
-		delete[] _removeDelete;
-		_removeDelete = new const char *[2] { "‚룭 âì", "㤠«¨âì" };
-		return _removeDelete;
-	}
-
-	const char *REMOVE_OR_DELETE_WHICH() {
-		return "\x3""l\t010\v005Š®£® %s?";
-	}
-
-	const char *YOUR_PARTY_IS_FULL() {
-		return "\v007‚ è ®âàï¤ ¯®«®­!";
-	}
-
-	const char *HAS_SLAYER_SWORD() {
-		return "\v000\t000â®â ¯¥àá®­ ¦ ­¥ ¬®¦¥â ¡ëâì 㤠«ñ­, â ª ª ª ã ­¥£® Œ¥ç-㡨©æ  Šá¨­ !";
-	}
-
-	const char *SURE_TO_DELETE_CHAR() {
-		return "%s %s. ‚ë 㢥७ë, çâ® å®â¨â¥ 㤠«¨âì í⮣® £¥à®ï?";
-	}
-
-	const char *CREATE_CHAR_DETAILS() {
-		return
-			"\f04\x3""c\x2\t144\v119\f37\f04à®á®ª\t144\v149\f37‘\f04®§¤"
-			"\t144\v179\f37ESC\f04\x3""l\x1\t195\v021‘¨\f37«\f04"
-			"\t195\v045\f37ˆ\f04­â\t195\v069\f37„\f04ãå\t195\v093‘«\f37¦\f04"
-			"\t195\v116‘\f37ª\f04à\t195\v140\f37Œ\f04âª\t195\v164\f37“\f04¤ç%s";
-	}
-
-	const char *NEW_CHAR_STATS() {
-		return
-			"\f04\x3""l\t017\v148 á \t055: %s\n"
-			"\t017®«\t055: %s\n"
-			"\t017Š« áá\t055:\n"
-			"\x3""r\t215\v031%d\t215\v055%d\t215\v079%d\t215\v103%d\t215\v127%d"
-			"\t215\v151%d\t215\v175%d\x3""l\t242\v020\f%2dëæ àì\t242\v031\f%2d"
-			" « ¤¨­\t242\v042\f%2d‹ãç­¨ª\t242\v053\f%2dŠ«¨à¨ª\t242\v064\f%2d"
-			"Œ £\t242\v075\f%2d‚®à\t242\v086\f%2d¨­¤§ï\t242\v097\f%2d"
-			"‚ à¢ à\t242\v108\f%2d„à㨤\t242\v119\f%2d‘«¥¤®¯ëâ\f04\x3""c"
-			"\t265\v142 ¢ëª¨\x2\x3""l\t223\v155%s\t223\v170%s%s\x1";
-	}
-
-	const char *NAME_FOR_NEW_CHARACTER() {
-		return "\x3""c‚¢¥¤¨â¥ ¨¬ï ¯¥àá®­ ¦ \n\n";
-	}
-
-	const char *SELECT_CLASS_BEFORE_SAVING() {
-		return "\v003\x3""c¥à¥¤ á®åà ­¥­¨¥¬ ¢ë¡¥à¨â¥ ª« áá.\x3""l";
-	}
-
-	const char *EXCHANGE_ATTR_WITH() {
-		return "®¬¥­ïâì %s á...";
-	}
-
-	const char *COMBAT_DETAILS() {
-		return "\r\f00\x3""c\v000\t000\x2%s%s%s\x1";
-	}
-
-	const char *NOT_ENOUGH_TO_CAST() {
-		return "\x3""c\v000¥¤®áâ â®ç­® %s, çâ®¡ë § ª«¨­ âì %s";
-	}
-
-	const char **SPELL_CAST_COMPONENTS() {
-		delete[] _spellCastComponents;
-		_spellCastComponents = new const char *[2] { "®çª®¢ ¬ £¨¨", " «¬ §®¢" };
-		return _spellCastComponents;
-	}
-
-	const char *CAST_SPELL_DETAILS() {
-		return
-			"\r\x2\x3""c\v122\t013\f37‡\fd ª«\t040\f37\fd®¢"
-			"\t067ESC\x1\t000\v000\x3""c‡ ª«¨­ ­¨¥\n"
-			"\n"
-			"%s\x3""c\n"
-			"\n"
-			"     ƒ®â®¢®¥:\x3""c\n"
-			"\n"
-			"\f09%s\fd\x2\x3""l\n"
-			"\v082–¥­ \x3""r\t000%u/%u\x3""l\n"
-			"’¥ª ŽŒ\x3""r\t000%u\x1";
-	}
-
-	const char *PARTY_FOUND() {
-		return
-			"\x3""c ©¤¥­®:\n"
-			"\n"
-			"\x3""r\t000%lu ‡®«\n"
-			"%lu €«¬§";
-	}
-
-	const char *BACKPACKS_FULL_PRESS_KEY() {
-		return
-			"\v007\f12‚­¨¬ ­¨¥! îª§ ª¨ ¯¥à¥¯®«­¥­ë!\fd\n"
-			" ¦¬¨â¥ ª« ¢¨èã";
-	}
-
-	const char *HIT_A_KEY() {
-		return "\x3""l\v120\t000\x4""077\x3""c\f37. ª« ¢¨èã\fd";
-	}
-
-	const char *GIVE_TREASURE_FORMATTING() {
-		return
-			"\x3l\v060\t000\x4""077\n"
-			"\x4""077\n"
-			"\x4""077\n"
-			"\x4""077\n"
-			"\x4""077\n"
-			"\x4""077";
-	}
-
-	const char *X_FOUND_Y() {
-		return "\v060\t000\x3""c%s ­ è%s: %s";
-	}
-
-	const char *ON_WHO() {
-		return "\x3""c\v009Š®£®?";
-	}
-
-	const char *WHICH_ELEMENT1() {
-		return
-			"\r\x3""c\x1Š ª ï ‘â¨å¨ï?\x2\v034\t014\f15Ž\fd£®­ì\t044"
-			"\f15ƒ\fd஬\t074\f15•\fd®«®¤\t104\f15Ÿ\fd¤\x1";
-	}
-
-	const char *WHICH_ELEMENT2() {
-		return
-			"\r\x3""cŠ ª ï ‘â¨å¨ï?\x2\v034\t014\f15Ž\fd£®­ì\t044"
-			"\f15ƒ\fd஬\t074\f15•\fd®«®¤\t104\f15Ÿ\fd¤\x1";
-	}
-
-	const char *DETECT_MONSTERS() {
-		return "\x3""c®¨áª ¬®­áâ஢";
-	}
-
-	const char *LLOYDS_BEACON() {
-		return
-			"\r\x3""c\v000\t000\x1Œ ïª ‹«®©¤ \n"
-			"\n"
-			"®á«¥¤­¥¥ ¬¥áâ®\n"
-			"\n"
-			"%s\x3""l\n"
-			"x = %d\x3""r\t000y = %d\x3""c\x2\v122\t021\f15“\fdáâ ­\t060\f15‚\fd¥à­\x1";
-	}
-
-	const char *HOW_MANY_SQUARES() {
-		return "\x3""c’¥«¥¯®àâ\n‘ª®«ìª® ª«¥â®ª ­  %s (1-9)\n";
-	}
-
-	const char *TOWN_PORTAL() {
-		return
-			"\x3""cƒ®à®¤áª®© ¯®àâ «\x3""l\n"
-			"\n"
-			"\t0101. %s\n"
-			"\t0102. %s\n"
-			"\t0103. %s\n"
-			"\t0104. %s\n"
-			"\t0105. %s\x3""c\n"
-			"\n"
-			"‚ ª ª®© £®à®¤ (1-5)\n"
-			"\n";
-	}
-
-	const char *TOWN_PORTAL_SWORDS() {
-		return "\x3"
-			   "cTown Portal\x3l\n"
-			   "\n"
-			   "\t0101. %s\n"
-			   "\t0102. %s\n"
-			   "\t0103. %s\x3"
-			   "c\n"
-			   "\n"
-			   "To which Town (1-3)\n"
-			   "\n";
-	}
-
-	const char *MONSTER_DETAILS() {
-		return "\x3l\n"
-			   "%s\x3"
-			   "c\t100%s\t140%u\t180%u\x3r\t000%s";
-	}
-
-	const char **MONSTER_SPECIAL_ATTACKS() {
-		delete[] _monsterSpecialAttacks;
-		_monsterSpecialAttacks = new const char *[23] {
-			"¥â", "Œ £¨ï", "Ž£­ï", "ƒà®¬ ", "•®«®¤ ", "Žâà ¢«¥­¨¥", "­¥à£¨¨",
-			"®«¥§­ì", "¥§ã¬¨¥", "‘®­", "àª«à¤¬", "‚«î¡«", "Žáã臤®à", "à®ª«ï⨥",
-			" à «¨ç", "¥áá®§­", "‘¬ï⥭¨¥", "‹®¬à®­", "‘« ¡®áâì", "“­¨ç⮦",
-			"‚®§à áâ+5", "Œ¥àâ¢", "Š ¬¥­ì"
-		};
-		return _monsterSpecialAttacks;
-	}
-
-	const char *IDENTIFY_MONSTERS() {
-		return "Œ®­áâà\x3""c\t155އ\t195Ї\t233#€â ª\x3""r\t000Žá®¡®¥%s%s%s";
-	}
-
-	const char *MOONS_NOT_ALIGNED() {
-		return "\x3""c\v012\t000®ª  «ã­ë ­¥ ¢áâ ­ãâ ¢ àï¤, ¢ë ­¥ ᬮ¦¥â¥ ¯¥à¥©â¨ ­  ’ñ¬­ãî áâ®à®­ã Šá¨­ ";
-	}
-
-	const char *AWARDS_FOR() {
-		return
-			"\r\x1\fd\x3""c\v000\t000%s %s:  £à ¤ë \x3""l\x2\n"
-			"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\x1";
-	}
-
-	const char *AWARDS_TEXT() {
-		return "\r\x2\x3""c\v021\t221‚¢¥àå\t255‚­¨§\t289‚ë室";
-	}
-
-	const char *NO_AWARDS() {
-		return "\x3""c“ ¯¥àá®­ ¦  ­¥â ­ £à ¤";
-	}
-
-	const char *WARZONE_BATTLE_MASTER() {
-		return "€à¥­ \n\t125Œ áâ¥à ¡¨â¢ë";
-	}
-
-	const char *WARZONE_MAXED() {
-		return "—â®!  ޝïâì ¢ë?  ¥ ¯à¨áâ ¢ ©â¥ ª ⥬, ªâ® ­¥ ¬®¦¥â ¤ âì ᤠç¨!";
-	}
-
-	const char *WARZONE_LEVEL() {
-		return "Š ª®© ã஢¥­ì ¬®­áâ஢? (1-10)\n";
-	}
-
-	const char *WARZONE_HOW_MANY() {
-		return "‘ª®«ìª® ¬®­áâ஢? (1-20)\n";
-	}
-
-	const char *PICKS_THE_LOCK() {
-		return "\x3""c\v010%s ¢§«®¬ «%s § ¬®ª!\n ¦¬¨â¥ ª« ¢¨èã.";
-	}
-
-	const char *UNABLE_TO_PICK_LOCK() {
-		return "\x3""c\v010%s ­¥ ᬮ£%s ¢§«®¬ âì § ¬®ª!\n ¦¬¨â¥ ª« ¢¨èã.";
-	}
-
-	const char *CONTROL_PANEL_TEXT() {
-		return
-			"\x1\f00\x3""c\v000\t000 ­¥«ì ã¯à ¢«¥­¨ï\x3""r"
-			"\v022\t045‡¢\f06ã\fdª:\t124\f06‘\fd®åà:"
-			"\v041\t045\f06Œ\fdã§.:\t124‘\f06®\fdåà:\v060\t045\f06‡\fd £à:"
-			"\t124\f06‚\fdë室"
-			"\v080\t084\f06\fd®¬®éì %s\t137Œ £ \t000\x1";
-	}
-
-	const char *CONTROL_PANEL_BUTTONS() {
-		return
-			"\x3""c\f11"
-			"\v022\t062load\t141%s"
-			"\v041\t062save\t141%s"
-			"\v060\t062exit"
-			"\v079\t102Help\fd";
-	}
-
-	const char *ON() {
-		return "\f15¢ª«\f11";
-	}
-
-	const char *OFF() {
-		return "\f32¢ëª\f11";
-	}
-
-	const char *CONFIRM_QUIT() {
-		return "‚ë 㢥७ë, çâ® å®â¨â¥ ¢ë©â¨?";
-	}
-
-	const char *MR_WIZARD() {
-		return "‚ë â®ç­® å®â¨â¥ ¢®á¯®«ì§®¢ âìáï ¯®¬®éìî Œà. Œ £ ?";
-	}
-
-	const char *NO_LOADING_IN_COMBAT() {
-		return "¨ª ª¨å § £àã§®ª ¢® ¢à¥¬ï ¡¨â¢ë!";
-	}
-
-	const char *NO_SAVING_IN_COMBAT() {
-		return "¨ª ª¨å á®åà ­¥­¨© ¢® ¢à¥¬ï ¡¨â¢ë!";
-	}
-
-	const char *QUICK_FIGHT_TEXT() {
-		return
-		  "\r\fd\x3""c\v000\t000ëáâ஥ ¤¥©á⢨¥\n\n"
-		  "%s\x3""l\n\n"
-		  "’¥ªã饥\x3""r\n"
-		  "\t000%s\x2\x3""c\v122\t019\f37‘\f04«¥¤\t055‚ë室\x1";
-	}
-
-	const char **QUICK_FIGHT_OPTIONS() {
-		delete[] _quickFightOptions;
-		_quickFightOptions = new const char *[4] { "€â ª ", "‡ ª«¨­ ­¨¥", "«®ª", "¥£á⢮" };
-		return _quickFightOptions;
-	}
-
-	const char **WORLD_END_TEXT() {
-		delete[] _worldEndText;
-		_worldEndText = new const char *[9] {
-			"\n\n\n\n\n\n\n"
-			"Congratulations Adventurers!\n\n"
-			"Let the unification ceremony begin!",
-				"And so the call went out to the people throughout the lands of Xeen"
-				" that the prophecy was nearing completion.",
-				"They came in great numbers to witness the momentous occasion.",
-				"\v026The Dragon Pharoah presided over the ceremony.",
-				"\v026Queen Kalindra presented the Cube of Power.",
-				"\v026Prince Roland presented the Xeen Sceptre.",
-				"\v026Together, they placed the Cube of Power...",
-				"\v026and the Sceptre, onto the Altar of Joining.",
-				"With the prophecy complete, the two sides of Xeen were united as one",
-		};
-		return _worldEndText;
-	}
-
-	const char *WORLD_CONGRATULATIONS() {
-		return "\x3"
-			   "cCongratulations\n\n"
-			   "Your Final Score is:\n\n"
-			   "%010lu\n"
-			   "\x3l\n"
-			   "Please send this score to the Ancient's Headquarters where "
-			   "you'll be added to the Hall of Legends!\n\n"
-			   "Ancient's Headquarters\n"
-			   "New World Computing, Inc.\n"
-			   "P.O. Box 4302\n"
-			   "Hollywood, CA 90078";
-	}
-
-	const char *WORLD_CONGRATULATIONS2() {
-		return "\n\n\n\n\n\n"
-			   "But wait... there's more!\n"
-			   "\n\n"
-			   "Include the message\n"
-			   "\"%s\"\n"
-			   "with your final score and receive a special bonus.";
-	}
-
-	const char *CLOUDS_CONGRATULATIONS1() {
-		return "\f23\x3l"
-			   "\v000\t000Please send this score to the Ancient's Headquarters "
-			   "where you'll be added to the Hall of Legends!\f33\x3"
-			   "c"
-			   "\v070\t000Press a Key";
-	}
-
-	const char *CLOUDS_CONGRATULATIONS2() {
-		return "\f23\x3l"
-			   "\v000\t000Ancient's Headquarters\n"
-			   "New World Computing, Inc.\n"
-			   "P.O. Box 4302\n"
-			   "Hollywood, CA 90078-4302\f33\x3"
-			   "c"
-			   "\v070\t000Press a Key";
-	}
-
-	const char **GOOBER() {
-		delete[] _goober;
-		_goober = new const char *[3] {
-			"", "I am a Goober!", "I am a Super Goober!"
-		};
-		return _goober;
-	}
-
-	const char *DIFFICULTY_TEXT() {
-		return "\v000\t000\x3""c‚ë¡¥à¨â¥ ¨£à®¢®© ०¨¬";
-	}
-
-	const char *SAVE_OFF_LIMITS() {
-		return
-			"\x3""c\v002\t000®£¨ ‚®ááâ ­®¢«¥­¨ï ˆ£à áç¨â îâ íâ® ¬¥áâ® § ¯à¥â­ë¬!\n"
-			"“¢ë, §¤¥áì ­¥«ì§ï á®åà ­ïâìáï";
-	}
-
-	const char *CLOUDS_INTRO1() {
-		return "\f00\v082\t040\x3"
-			   "cKing Burlock\v190\t040Peasants\v082\t247"
-			   "Lord Xeen\v190\t258Xeen's Pet\v179\t150Crodo";
-	}
-
-	const char *DARKSIDE_ENDING1() {
-		return "\n\x3"
-			   "cCongratulations\n"
-			   "\n"
-			   "Your Final Score is:\n"
-			   "\n"
-			   "%010lu\n"
-			   "\x3"
-			   "l\n"
-			   "Please send this score to the Ancient's Headquarters "
-			   "where you'll be added to the Hall of Legends!\n"
-			   "\n"
-			   "Ancient's Headquarters\n"
-			   "New World Computing, Inc.\n"
-			   "P.O. Box 4302\n"
-			   "Hollywood, CA 90078";
-	}
-
-	const char *DARKSIDE_ENDING2() {
-		return "\n"
-			   "Adventurers,\n"
-			   "\n"
-			   "I will save your game in Castleview.\n"
-			   "\n"
-			   "The World of Xeen still needs you!\n"
-			   "\n"
-			   "Load your game afterwards and come visit me in the "
-			   "Great Pyramid for further instructions";
-	}
-
-	const char *PHAROAH_ENDING_TEXT1() {
-		return "\fd\v001\t001%s\x3"
-			   "c\t000\v180Press a Key!\x3"
-			   "l";
-	}
-
-	const char *PHAROAH_ENDING_TEXT2() {
-		return "\f04\v000\t000%s\x3"
-			   "c\t000\v180Press a Key!\x3"
-			   "l\fd";
-	}
-};
+#include "en_constants.h"
+#include "ru_constants.h"
+
+void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
+	Common::MemFile file;
+	file.syncString(CLOUDS_CREDITS());
+	file.syncString(DARK_SIDE_CREDITS());
+	file.syncString(SWORDS_CREDITS1());
+	file.syncString(SWORDS_CREDITS2());
+	file.syncString(OPTIONS_MENU());
+	file.syncStrings(GAME_NAMES(), 3);
+	delete[] _gameNames;
+	_gameNames = NULL;
+	file.syncString(THE_PARTY_NEEDS_REST());
+	file.syncString(WHO_WILL());
+	file.syncString(HOW_MUCH());
+	file.syncString(WHATS_THE_PASSWORD());
+	file.syncString(PASSWORD_INCORRECT());
+	file.syncString(IN_NO_CONDITION());
+	file.syncString(NOTHING_HERE());
+	file.syncStrings(TERRAIN_TYPES, 6);
+	file.syncStrings(OUTDOORS_WALL_TYPES, 16);
+	file.syncStrings(SURFACE_NAMES, 16);
+	file.syncStrings(WHO_ACTIONS(), 32);
+	delete[] _whoActions;
+	_whoActions = NULL;
+	file.syncStrings(WHO_WILL_ACTIONS(), 4);
+	delete[] _whoWillActions;
+	_whoWillActions = NULL;
+	file.syncBytes2D((const byte *)SYMBOLS, 20, 64);
+	file.syncBytes2D((const byte *)TEXT_COLORS, 40, 4);
+	file.syncBytes2D((const byte *)TEXT_COLORS_STARTUP, 40, 4);
+	file.syncStrings(DIRECTION_TEXT_UPPER(), 4);
+	delete[] _directionTextUpper;
+	_directionTextUpper = NULL;
+	file.syncStrings(DIRECTION_TEXT(), 4);
+	delete[] _directionText;
+	_directionText = NULL;
+	file.syncStrings(RACE_NAMES(), 5);
+	delete[] _raceNames;
+	_raceNames = NULL;
+	file.syncNumbers(RACE_HP_BONUSES, 5);
+	file.syncNumbers2D((const int *)RACE_SP_BONUSES, 5, 2);
+	file.syncStrings(CLASS_NAMES(), 11);
+	delete[] _classNames;
+	_classNames = NULL;
+	file.syncNumbers(CLASS_EXP_LEVELS, 10);
+	file.syncStrings(ALIGNMENT_NAMES(), 3);
+	delete[] _alignmentNames;
+	_alignmentNames = NULL;
+	file.syncStrings(SEX_NAMES(), 2);
+	delete[] _sexNames;
+	_sexNames = NULL;
+	file.syncStrings(SKILL_NAMES(), 18);
+	delete[] _skillNames;
+	_skillNames = NULL;
+	file.syncStrings(CONDITION_NAMES(), 17);
+	delete[] _conditionNames;
+	_conditionNames = NULL;
+	file.syncNumbers(CONDITION_COLORS, 17);
+	file.syncString(GOOD());
+	file.syncString(BLESSED());
+	file.syncString(POWER_SHIELD());
+	file.syncString(HOLY_BONUS());
+	file.syncString(HEROISM());
+	file.syncString(IN_PARTY());
+	file.syncString(PARTY_DETAILS());
+	file.syncString(PARTY_DIALOG_TEXT());
+	file.syncNumbers(FACE_CONDITION_FRAMES, 17);
+	file.syncNumbers(CHAR_FACES_X, 6);
+	file.syncNumbers(HP_BARS_X, 6);
+	file.syncString(NO_ONE_TO_ADVENTURE_WITH());
+	file.syncBytes2D((const byte *)DARKNESS_XLAT, 3, 256);
+	file.syncString(YOUR_ROSTER_IS_FULL());
+	file.syncString(PLEASE_WAIT());
+	file.syncString(OOPS());
+	file.syncNumbers2D((const int *)SCREEN_POSITIONING_X, 4, 48);
+	file.syncNumbers2D((const int *)SCREEN_POSITIONING_Y, 4, 48);
+	file.syncNumbers(MONSTER_GRID_BITMASK, 12);
+	file.syncNumbers2D((const int *)INDOOR_OBJECT_X, 2, 12);
+	file.syncNumbers2D((const int *)MAP_OBJECT_Y, 2, 12);
+	file.syncNumbers(INDOOR_MONSTERS_Y, 4);
+	file.syncNumbers2D((const int *)OUTDOOR_OBJECT_X, 2, 12);
+	file.syncNumbers(OUTDOOR_MONSTER_INDEXES, 26);
+	file.syncNumbers(OUTDOOR_MONSTERS_Y, 26);
+	file.syncNumbers2D((const int *)DIRECTION_ANIM_POSITIONS, 4, 4);
+	file.syncBytes2D((const byte *)WALL_SHIFTS, 4, 48);
+	file.syncNumbers(DRAW_NUMBERS, 25);
+	file.syncNumbers2D((const int *)DRAW_FRAMES, 25, 2);
+	file.syncNumbers(COMBAT_FLOAT_X, 8);
+	file.syncNumbers(COMBAT_FLOAT_Y, 8);
+	file.syncNumbers2D((const int *)MONSTER_EFFECT_FLAGS, 15, 8);
+	file.syncNumbers2D((const int *)SPELLS_ALLOWED, 3, 40);
+	file.syncNumbers(BASE_HP_BY_CLASS, 10);
+	file.syncNumbers(AGE_RANGES, 10);
+	file.syncNumbers2D((const int *)AGE_RANGES_ADJUST, 2, 10);
+	file.syncNumbers(STAT_VALUES, 24);
+	file.syncNumbers(STAT_BONUSES, 24);
+	file.syncNumbers(ELEMENTAL_CATEGORIES, 6);
+	file.syncNumbers(ATTRIBUTE_CATEGORIES, 10);
+	file.syncNumbers(ATTRIBUTE_BONUSES, 72);
+	file.syncNumbers(ELEMENTAL_RESISTENCES, 37);
+	file.syncNumbers(ELEMENTAL_DAMAGE, 37);
+	file.syncNumbers(WEAPON_DAMAGE_BASE, 35);
+	file.syncNumbers(WEAPON_DAMAGE_MULTIPLIER, 35);
+	file.syncNumbers(METAL_DAMAGE, 22);
+	file.syncNumbers(METAL_DAMAGE_PERCENT, 22);
+	file.syncNumbers(METAL_LAC, 22);
+	file.syncNumbers(ARMOR_STRENGTHS, 14);
+	file.syncNumbers(MAKE_ITEM_ARR1, 6);
+	file.syncNumbers3D((const int *)MAKE_ITEM_ARR2, 6, 7, 2);
+	file.syncNumbers3D((const int *)MAKE_ITEM_ARR3, 10, 7, 2);
+	file.syncNumbers3D((const int *)MAKE_ITEM_ARR4, 2, 7, 2);
+	file.syncNumbers2D((const int *)MAKE_ITEM_ARR5, 8, 2);
+	file.syncNumbers(OUTDOOR_DRAWSTRUCT_INDEXES, 44);
+	file.syncNumbers2D((const int *)TOWN_MAXES, 2, 11);
+	file.syncStrings2D((const char *const *)TOWN_ACTION_MUSIC, 2, 7);
+	file.syncStrings(TOWN_ACTION_SHAPES, 7);
+	file.syncNumbers2D((const int *)TOWN_ACTION_FILES, 2, 7);
+	file.syncString(BANK_TEXT());
+	file.syncString(BLACKSMITH_TEXT());
+	file.syncString(GUILD_NOT_MEMBER_TEXT());
+	file.syncString(GUILD_TEXT());
+	file.syncString(TAVERN_TEXT());
+	file.syncString(GOOD_STUFF());
+	file.syncString(HAVE_A_DRINK());
+	file.syncString(YOURE_DRUNK());
+	file.syncNumbers4D((const int *)TAVERN_EXIT_LIST, 2, 6, 5, 2);
+	file.syncString(FOOD_AND_DRINK());
+	file.syncString(TEMPLE_TEXT());
+	file.syncString(EXPERIENCE_FOR_LEVEL());
+	file.syncString(TRAINING_LEARNED_ALL());
+	file.syncString(ELIGIBLE_FOR_LEVEL());
+	file.syncString(TRAINING_TEXT());
+	file.syncString(GOLD_GEMS());
+	file.syncString(GOLD_GEMS_2());
+	file.syncStrings(DEPOSIT_WITHDRAWL(), 2);
+	delete[] _depositWithdrawl;
+	_depositWithdrawl = NULL;
+	file.syncString(NOT_ENOUGH_X_IN_THE_Y());
+	file.syncString(NO_X_IN_THE_Y());
+	file.syncStrings(STAT_NAMES(), 16);
+	delete[] _statNames;
+	_statNames = NULL;
+	file.syncStrings(CONSUMABLE_NAMES(), 4);
+	delete[] _consumableNames;
+	_consumableNames = NULL;
+	file.syncStrings(WHERE_NAMES(), 2);
+	delete[] _whereNames;
+	_whereNames = NULL;
+	file.syncString(AMOUNT());
+	file.syncString(FOOD_PACKS_FULL());
+	file.syncString(BUY_SPELLS());
+	file.syncString(GUILD_OPTIONS());
+	file.syncNumbers((const int *)MISC_SPELL_INDEX, 74);
+	file.syncNumbers((const int *)SPELL_COSTS, 77);
+	file.syncNumbers2D((const int *)CLOUDS_GUILD_SPELLS, 5, 20);
+	file.syncNumbers2D((const int *)DARK_SPELL_OFFSETS, 3, 39);
+	file.syncNumbers2D((const int *)DARK_SPELL_RANGES, 12, 2);
+	file.syncNumbers2D((const int *)SWORDS_SPELL_RANGES, 12, 2);
+	file.syncNumbers((const int *)SPELL_GEM_COST, 77);
+	file.syncString(NOT_A_SPELL_CASTER());
+	file.syncString(SPELLS_LEARNED_ALL());
+	file.syncString(SPELLS_FOR());
+	file.syncString(SPELL_LINES_0_TO_9());
+	file.syncString(SPELLS_DIALOG_SPELLS());
+	file.syncString(SPELL_PTS());
+	file.syncString(GOLD());
+	file.syncString(SPELL_INFO());
+	file.syncString(SPELL_PURCHASE());
+	file.syncString(MAP_TEXT());
+	file.syncString(LIGHT_COUNT_TEXT());
+	file.syncString(FIRE_RESISTENCE_TEXT());
+	file.syncString(ELECRICITY_RESISTENCE_TEXT());
+	file.syncString(COLD_RESISTENCE_TEXT());
+	file.syncString(POISON_RESISTENCE_TEXT());
+	file.syncString(CLAIRVOYANCE_TEXT());
+	file.syncString(LEVITATE_TEXT());
+	file.syncString(WALK_ON_WATER_TEXT());
+	file.syncString(GAME_INFORMATION());
+	file.syncString(WORLD_GAME_TEXT());
+	file.syncString(DARKSIDE_GAME_TEXT());
+	file.syncString(CLOUDS_GAME_TEXT());
+	file.syncString(SWORDS_GAME_TEXT());
+	file.syncStrings(WEEK_DAY_STRINGS(), 10);
+	delete[] _weekDayStrings;
+	_weekDayStrings = NULL;
+	file.syncString(CHARACTER_DETAILS());
+	file.syncStrings(DAYS(), 3);
+	file.syncString(PARTY_GOLD());
+	file.syncString(PLUS_14());
+	file.syncString(CHARACTER_TEMPLATE());
+	file.syncString(EXCHANGING_IN_COMBAT());
+	file.syncString(CURRENT_MAXIMUM_RATING_TEXT());
+	file.syncString(CURRENT_MAXIMUM_TEXT());
+	file.syncStrings(RATING_TEXT(), 24);
+	delete[] _ratingText;
+	_ratingText = NULL;
+	file.syncString(AGE_TEXT());
+	file.syncString(LEVEL_TEXT());
+	file.syncString(RESISTENCES_TEXT());
+	file.syncString(NONE());
+	file.syncString(EXPERIENCE_TEXT());
+	file.syncString(ELIGIBLE());
+	file.syncString(IN_PARTY_IN_BANK());
+	file.syncString(FOOD_TEXT());
+	file.syncString(EXCHANGE_WITH_WHOM());
+	file.syncString(QUICK_REF_LINE());
+	file.syncString(QUICK_REFERENCE());
+	file.syncNumbers2D((const int *)BLACKSMITH_MAP_IDS, 2, 4);
+	file.syncString(ITEMS_DIALOG_TEXT1());
+	file.syncString(ITEMS_DIALOG_TEXT2());
+	file.syncString(ITEMS_DIALOG_LINE1());
+	file.syncString(ITEMS_DIALOG_LINE2());
+	file.syncString(BTN_BUY());
+	file.syncString(BTN_SELL());
+	file.syncString(BTN_IDENTIFY());
+	file.syncString(BTN_FIX());
+	file.syncString(BTN_USE());
+	file.syncString(BTN_EQUIP());
+	file.syncString(BTN_REMOVE());
+	file.syncString(BTN_DISCARD());
+	file.syncString(BTN_QUEST());
+	file.syncString(BTN_ENCHANT());
+	file.syncString(BTN_RECHARGE());
+	file.syncString(BTN_GOLD());
+	file.syncString(ITEM_BROKEN());
+	file.syncString(ITEM_CURSED());
+	file.syncString(ITEM_OF());
+	file.syncStrings(BONUS_NAMES(), 7);
+	delete[] _bonusNames;
+	_bonusNames = NULL;
+	file.syncStrings(WEAPON_NAMES(), 41);
+	delete[] _weaponNames;
+	_weaponNames = NULL;
+	file.syncStrings(ARMOR_NAMES(), 14);
+	delete[] _armorNames;
+	_armorNames = NULL;
+	file.syncStrings(ACCESSORY_NAMES(), 11);
+	delete[] _accessoryNames;
+	_accessoryNames = NULL;
+	file.syncStrings(MISC_NAMES(), 22);
+	delete[] _miscNames;
+	_miscNames = NULL;
+	file.syncStrings(SPECIAL_NAMES(), 74);
+	delete[] _specialNames;
+	_specialNames = NULL;
+	file.syncStrings(ELEMENTAL_NAMES(), 6);
+	delete[] _elementalNames;
+	_elementalNames = NULL;
+	file.syncStrings(ATTRIBUTE_NAMES(), 10);
+	delete[] _attributeNames;
+	_attributeNames = NULL;
+	file.syncStrings(EFFECTIVENESS_NAMES(), 7);
+	delete[] _effectivenessNames;
+	_effectivenessNames = NULL;
+	file.syncStrings(QUEST_ITEM_NAMES(), 85);
+	delete[] _questItemNames;
+	_questItemNames = NULL;
+	file.syncStrings(QUEST_ITEM_NAMES_SWORDS(), 51);
+	delete[] _questItemNamesSwords;
+	_questItemNamesSwords = NULL;
+	file.syncNumbers((const int *)WEAPON_BASE_COSTS, 35);
+	file.syncNumbers((const int *)ARMOR_BASE_COSTS, 14);
+	file.syncNumbers((const int *)ACCESSORY_BASE_COSTS, 11);
+	file.syncNumbers((const int *)MISC_MATERIAL_COSTS, 22);
+	file.syncNumbers((const int *)MISC_BASE_COSTS, 76);
+	file.syncNumbers((const int *)METAL_BASE_MULTIPLIERS, 22);
+	file.syncNumbers((const int *)ITEM_SKILL_DIVISORS, 4);
+	file.syncNumbers((const int *)RESTRICTION_OFFSETS, 4);
+	file.syncNumbers((const int *)ITEM_RESTRICTIONS, 86);
+	file.syncString(NOT_PROFICIENT());
+	file.syncString(NO_ITEMS_AVAILABLE());
+	file.syncStrings(CATEGORY_NAMES(), 4);
+	delete[] _categoryNames;
+	_categoryNames = NULL;
+	file.syncString(X_FOR_THE_Y());
+	file.syncString(X_FOR_Y());
+	file.syncString(X_FOR_Y_GOLD());
+	file.syncString(FMT_CHARGES());
+	file.syncString(AVAILABLE_GOLD_COST());
+	file.syncString(CHARGES());
+	file.syncString(COST());
+	file.syncStrings(ITEM_ACTIONS(), 7);
+	delete[] _itemActions;
+	_itemActions = NULL;
+	file.syncString(WHICH_ITEM());
+	file.syncString(WHATS_YOUR_HURRY());
+	file.syncString(USE_ITEM_IN_COMBAT());
+	file.syncString(NO_SPECIAL_ABILITIES());
+	file.syncString(CANT_CAST_WHILE_ENGAGED());
+	file.syncString(EQUIPPED_ALL_YOU_CAN());
+	file.syncString(REMOVE_X_TO_EQUIP_Y());
+	file.syncString(RING());
+	file.syncString(MEDAL());
+	file.syncString(CANNOT_REMOVE_CURSED_ITEM());
+	file.syncString(CANNOT_DISCARD_CURSED_ITEM());
+	file.syncString(PERMANENTLY_DISCARD());
+	file.syncString(BACKPACK_IS_FULL());
+	file.syncStrings(CATEGORY_BACKPACK_IS_FULL(), 4);
+	file.syncString(BUY_X_FOR_Y_GOLD());
+	file.syncString(SELL_X_FOR_Y_GOLD());
+	file.syncStrings(SELL_X_FOR_Y_GOLD_ENDINGS(), 2);
+	delete[] _sellXForYGoldEndings;
+	_sellXForYGoldEndings = NULL;
+	file.syncString(NO_NEED_OF_THIS());
+	file.syncString(NOT_RECHARGABLE());
+	file.syncString(SPELL_FAILED());
+	file.syncString(NOT_ENCHANTABLE());
+	file.syncString(ITEM_NOT_BROKEN());
+	file.syncStrings(FIX_IDENTIFY(), 2);
+	delete[] _fixIdentify;
+	_fixIdentify = NULL;
+	file.syncString(FIX_IDENTIFY_GOLD());
+	file.syncString(IDENTIFY_ITEM_MSG());
+	file.syncString(ITEM_DETAILS());
+	file.syncString(ALL());
+	file.syncString(FIELD_NONE());
+	file.syncString(DAMAGE_X_TO_Y());
+	file.syncString(ELEMENTAL_XY_DAMAGE());
+	file.syncString(ATTR_XY_BONUS());
+	file.syncString(EFFECTIVE_AGAINST());
+	file.syncString(QUESTS_DIALOG_TEXT());
+	file.syncString(CLOUDS_OF_XEEN_LINE());
+	file.syncString(DARKSIDE_OF_XEEN_LINE());
+	file.syncString(SWORDS_OF_XEEN_LINE());
+	file.syncString(NO_QUEST_ITEMS());
+	file.syncString(NO_CURRENT_QUESTS());
+	file.syncString(NO_AUTO_NOTES());
+	file.syncString(QUEST_ITEMS_DATA());
+	file.syncString(CURRENT_QUESTS_DATA());
+	file.syncString(AUTO_NOTES_DATA());
+	file.syncString(REST_COMPLETE());
+	file.syncString(PARTY_IS_STARVING());
+	file.syncString(HIT_SPELL_POINTS_RESTORED());
+	file.syncString(TOO_DANGEROUS_TO_REST());
+	file.syncString(SOME_CHARS_MAY_DIE());
+	file.syncString(DISMISS_WHOM());
+	file.syncString(CANT_DISMISS_LAST_CHAR());
+	file.syncString(DELETE_CHAR_WITH_ELDER_WEAPON());
+	file.syncStrings(REMOVE_DELETE(), 2);
+	delete[] _removeDelete;
+	_removeDelete = NULL;
+	file.syncString(REMOVE_OR_DELETE_WHICH());
+	file.syncString(YOUR_PARTY_IS_FULL());
+	file.syncString(HAS_SLAYER_SWORD());
+	file.syncString(SURE_TO_DELETE_CHAR());
+	file.syncString(CREATE_CHAR_DETAILS());
+	file.syncString(NEW_CHAR_STATS());
+	file.syncString(NAME_FOR_NEW_CHARACTER());
+	file.syncString(SELECT_CLASS_BEFORE_SAVING());
+	file.syncString(EXCHANGE_ATTR_WITH());
+	file.syncNumbers((const int *)NEW_CHAR_SKILLS, 10);
+	file.syncNumbers((const int *)NEW_CHAR_SKILLS_OFFSET, 10);
+	file.syncNumbers((const int *)NEW_CHAR_SKILLS_LEN, 10);
+	file.syncNumbers((const int *)NEW_CHAR_RACE_SKILLS, 10);
+	file.syncNumbers((const int *)RACE_MAGIC_RESISTENCES, 5);
+	file.syncNumbers((const int *)RACE_FIRE_RESISTENCES, 5);
+	file.syncNumbers((const int *)RACE_ELECTRIC_RESISTENCES, 5);
+	file.syncNumbers((const int *)RACE_COLD_RESISTENCES, 5);
+	file.syncNumbers((const int *)RACE_ENERGY_RESISTENCES, 5);
+	file.syncNumbers((const int *)RACE_POISON_RESISTENCES, 5);
+	file.syncNumbers2D((const int *)NEW_CHARACTER_SPELLS, 10, 4);
+	file.syncString(COMBAT_DETAILS());
+	file.syncString(NOT_ENOUGH_TO_CAST());
+	file.syncStrings(SPELL_CAST_COMPONENTS(), 2);
+	delete[] _spellCastComponents;
+	_spellCastComponents = NULL;
+	file.syncString(CAST_SPELL_DETAILS());
+	file.syncString(PARTY_FOUND());
+	file.syncString(BACKPACKS_FULL_PRESS_KEY());
+	file.syncString(HIT_A_KEY());
+	file.syncString(GIVE_TREASURE_FORMATTING());
+	file.syncString(X_FOUND_Y());
+	file.syncString(ON_WHO());
+	file.syncString(WHICH_ELEMENT1());
+	file.syncString(WHICH_ELEMENT2());
+	file.syncString(DETECT_MONSTERS());
+	file.syncString(LLOYDS_BEACON());
+	file.syncString(HOW_MANY_SQUARES());
+	file.syncString(TOWN_PORTAL());
+	file.syncString(TOWN_PORTAL_SWORDS());
+	file.syncNumbers2D((const int *)TOWN_MAP_NUMBERS, 3, 5);
+	file.syncString(MONSTER_DETAILS());
+	file.syncStrings(MONSTER_SPECIAL_ATTACKS(), 23);
+	delete[] _monsterSpecialAttacks;
+	_monsterSpecialAttacks = NULL;
+	file.syncString(IDENTIFY_MONSTERS());
+	file.syncStrings(EVENT_SAMPLES, 6);
+	file.syncString(MOONS_NOT_ALIGNED());
+	file.syncString(AWARDS_FOR());
+	file.syncString(AWARDS_TEXT());
+	file.syncString(NO_AWARDS());
+	file.syncString(WARZONE_BATTLE_MASTER());
+	file.syncString(WARZONE_MAXED());
+	file.syncString(WARZONE_LEVEL());
+	file.syncString(WARZONE_HOW_MANY());
+	file.syncString(PICKS_THE_LOCK());
+	file.syncString(UNABLE_TO_PICK_LOCK());
+	file.syncString(CONTROL_PANEL_TEXT());
+	file.syncString(CONTROL_PANEL_BUTTONS());
+	file.syncString(ON());
+	file.syncString(OFF());
+	file.syncString(CONFIRM_QUIT());
+	file.syncString(MR_WIZARD());
+	file.syncString(NO_LOADING_IN_COMBAT());
+	file.syncString(NO_SAVING_IN_COMBAT());
+	file.syncString(QUICK_FIGHT_TEXT());
+	file.syncStrings(QUICK_FIGHT_OPTIONS(), 4);
+	delete[] _quickFightOptions;
+	_quickFightOptions = NULL;
+	file.syncStrings(WORLD_END_TEXT(), 9);
+	delete[] _worldEndText;
+	_worldEndText = NULL;
+	file.syncString(WORLD_CONGRATULATIONS());
+	file.syncString(WORLD_CONGRATULATIONS2());
+	file.syncString(CLOUDS_CONGRATULATIONS1());
+	file.syncString(CLOUDS_CONGRATULATIONS2());
+	file.syncStrings(GOOBER(), 3);
+	delete[] _goober;
+	_goober = NULL;
+	file.syncStrings(MUSIC_FILES1, 5);
+	file.syncStrings2D((const char *const *)MUSIC_FILES2, 6, 7);
+	file.syncString(DIFFICULTY_TEXT());
+	file.syncString(SAVE_OFF_LIMITS());
+	file.syncString(CLOUDS_INTRO1());
+	file.syncString(DARKSIDE_ENDING1());
+	file.syncString(DARKSIDE_ENDING2());
+	file.syncString(PHAROAH_ENDING_TEXT1());
+	file.syncString(PHAROAH_ENDING_TEXT2());
+
+	cc.add("CONSTANTS" + num, file);
+}
 
 void writeConstants(CCArchive &cc) {
 	EN eng;
diff --git a/devtools/create_xeen/constants.h b/devtools/create_xeen/constants.h
index 32177e80ac..2159b6c30f 100644
--- a/devtools/create_xeen/constants.h
+++ b/devtools/create_xeen/constants.h
@@ -26,6 +26,1210 @@
 #include "common/scummsys.h"
 #include "cc.h"
 
+enum MagicSpell {
+	MS_AcidSpray = 0,
+	MS_Awaken = 1,
+	MS_BeastMaster = 2,
+	MS_Bless = 3,
+	MS_Clairvoyance = 4,
+	MS_ColdRay = 5,
+	MS_CreateFood = 6,
+	MS_CureDisease = 7,
+	MS_CureParalysis = 8,
+	MS_CurePoison = 9,
+	MS_CureWounds = 10,
+	MS_DancingSword = 11,
+	MS_DayOfProtection = 12,
+	MS_DayOfSorcery = 13,
+	MS_DeadlySwarm = 14,
+	MS_DetectMonster = 15,
+	MS_DivineIntervention = 16,
+	MS_DragonSleep = 17,
+	MS_ElementalStorm = 18,
+	MS_EnchantItem = 19,
+	MS_EnergyBlast = 20,
+	MS_Etheralize = 21,
+	MS_FantasticFreeze = 22,
+	MS_FieryFlail = 23,
+	MS_FingerOfDeath = 24,
+	MS_Fireball = 25,
+	MS_FirstAid = 26,
+	MS_FlyingFist = 27,
+	MS_FrostBite = 28,
+	MS_GolemStopper = 29,
+	MS_Heroism = 30,
+	MS_HolyBonus = 31,
+	MS_HolyWord = 32,
+	MS_Hynotize = 33,
+	MS_IdentifyMonster = 34,
+	MS_Implosion = 35,
+	MS_Incinerate = 36,
+	MS_Inferno = 37,
+	MS_InsectSpray = 38,
+	MS_ItemToGold = 39,
+	MS_Jump = 40,
+	MS_Levitate = 41,
+	MS_Light = 42,
+	MS_LightningBolt = 43,
+	MS_LloydsBeacon = 44,
+	MS_MagicArrow = 45,
+	MS_MassDistortion = 46,
+	MS_MegaVolts = 47,
+	MS_MoonRay = 48,
+	MS_NaturesCure = 49,
+	MS_Pain = 50,
+	MS_PoisonVolley = 51,
+	MS_PowerCure = 52,
+	MS_PowerShield = 53,
+	MS_PrismaticLight = 54,
+	MS_ProtFromElements = 55,
+	MS_RaiseDead = 56,
+	MS_RechargeItem = 57,
+	MS_Resurrection = 58,
+	MS_Revitalize = 59,
+	MS_Shrapmetal = 60,
+	MS_Sleep = 61,
+	MS_Sparks = 62,
+	MS_StarBurst = 63,
+	MS_StoneToFlesh = 64,
+	MS_SunRay = 65,
+	MS_SuperShelter = 66,
+	MS_SuppressDisease = 67,
+	MS_SuppressPoison = 68,
+	MS_Teleport = 69,
+	MS_TimeDistortion = 70,
+	MS_TownPortal = 71,
+	MS_ToxicCloud = 72,
+	MS_TurnUndead = 73,
+	MS_WalkOnWater = 74,
+	MS_WizardEye = 75,
+	NO_SPELL = 76
+};
+
+class LangConstants {
+protected:
+	const char **_gameNames = NULL;
+	const char **_whoWillActions = NULL;
+	const char **_whoActions = NULL;
+	const char **_directionText = NULL;
+	const char **_directionTextUpper = NULL;
+	const char **_raceNames = NULL;
+	const char **_sexNames = NULL;
+	const char **_alignmentNames = NULL;
+	const char **_skillNames = NULL;
+	const char **_classNames = NULL;
+	const char **_conditionNames = NULL;
+	const char **_depositWithdrawl = NULL;
+	const char **_statNames = NULL;
+	const char **_whereNames = NULL;
+	const char **_consumableNames = NULL;
+	const char **_weekDayStrings = NULL;
+	const char **_ratingText = NULL;
+	const char **_bonusNames = NULL;
+	const char **_weaponNames = NULL;
+	const char **_armorNames = NULL;
+	const char **_accessoryNames = NULL;
+	const char **_miscNames = NULL;
+	const char **_elementalNames = NULL;
+	const char **_specialNames = NULL;
+	const char **_attributeNames = NULL;
+	const char **_effectivenessNames = NULL;
+	const char **_questItemNamesSwords = NULL;
+	const char **_questItemNames = NULL;
+	const char **_categoryNames = NULL;
+	const char **_itemActions = NULL;
+	const char **_categoryBackpackIsFull = NULL;
+	const char **_fixIdentify = NULL;
+	const char **_removeDelete = NULL;
+	const char **_spellCastComponents = NULL;
+	const char **_monsterSpecialAttacks = NULL;
+	const char **_quickFightOptions = NULL;
+	const char **_goober = NULL;
+	const char **_worldEndText = NULL;
+	const char **_days = NULL;
+	const char **_sellXForYGoldEndings = NULL;
+
+public:
+	virtual const char  *CLOUDS_CREDITS() = 0;
+	virtual const char  *DARK_SIDE_CREDITS() = 0;
+	virtual const char  *SWORDS_CREDITS1() = 0;
+	virtual const char  *SWORDS_CREDITS2() = 0;
+	virtual const char  *OPTIONS_MENU() = 0;
+	virtual const char **GAME_NAMES() = 0;
+	virtual const char  *THE_PARTY_NEEDS_REST() = 0;
+	virtual const char  *WHO_WILL() = 0;
+	virtual const char  *HOW_MUCH() = 0;
+	virtual const char  *WHATS_THE_PASSWORD() = 0;
+	virtual const char  *PASSWORD_INCORRECT() = 0;
+	virtual const char  *IN_NO_CONDITION() = 0;
+	virtual const char  *NOTHING_HERE() = 0;
+
+	const char *const TERRAIN_TYPES[6] = {
+		"town", "cave", "towr", "cstl", "dung", "scfi"
+	};
+
+	const char *const OUTDOORS_WALL_TYPES[16] = {
+		nullptr, "mount", "ltree", "dtree", "grass", "snotree", "dsnotree",
+		"snomnt", "dedltree", "mount", "lavamnt", "palm", "dmount", "dedltree",
+		"dedltree", "dedltree"
+	};
+
+	const char *const SURFACE_NAMES[16] = {
+		"water.srf", "dirt.srf", "grass.srf", "snow.srf", "swamp.srf",
+		"lava.srf", "desert.srf", "road.srf", "dwater.srf", "tflr.srf",
+		"sky.srf", "croad.srf", "sewer.srf", "cloud.srf", "scortch.srf",
+		"space.srf"
+	};
+
+	virtual const char **WHO_ACTIONS() = 0;
+	virtual const char **WHO_WILL_ACTIONS() = 0;
+
+	const byte SYMBOLS[20][64] = {
+		{ // 0
+			0x00, 0x00, 0xA8, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x00, 0xA8, 0x9E, 0x9C, 0x9C, 0x9E, 0x9E, 0x9E,
+			0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0x9A, 0x9A, 0x9A, 0xAC, 0x9E, 0xAC, 0xA8, 0xA8, 0xA6, 0x97, 0x98,
+			0xAC, 0xA0, 0xAC, 0xAC, 0xA4, 0xA6, 0x98, 0x99, 0x00, 0xAC, 0xA0, 0xA0, 0xA8, 0xAC, 0x9A, 0x9A,
+			0x00, 0x00, 0xAC, 0xAC, 0xAC, 0xA4, 0x9B, 0x9A, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0x9B, 0x9B,
+		},
+		{ // 1
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+			0x99, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x99, 0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97,
+			0x99, 0x98, 0x98, 0x99, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+			0x9A, 0x9B, 0x9B, 0x9C, 0x9B, 0x9A, 0x9C, 0x9A, 0x9B, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x9A, 0x9B,
+		},
+		{ // 2
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+			0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x98, 0x98, 0x99, 0x98, 0x98, 0x97, 0x98, 0x98,
+			0x99, 0x98, 0x98, 0x98, 0x99, 0x99, 0x98, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+			0x9B, 0x9B, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9B, 0x99, 0x9A, 0x9B, 0x9B, 0x9A, 0x9A, 0x99, 0x9A,
+		},
+		{ // 3
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+			0x99, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x9A, 0x98, 0x98, 0x97, 0x97, 0x98, 0x98, 0x98, 0x98,
+			0x99, 0x99, 0x98, 0x99, 0x98, 0x98, 0x99, 0x99, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+			0x9B, 0x9C, 0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0x9C, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x9A,
+		},
+		{ // 4
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+			0x9A, 0x9A, 0x9A, 0x99, 0x99, 0x99, 0x99, 0x9A, 0x97, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
+			0x99, 0x99, 0x98, 0x99, 0x99, 0x98, 0x98, 0x98, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+			0x9A, 0x9C, 0x9B, 0x9B, 0x9C, 0x9B, 0x9B, 0x9B, 0x9A, 0x99, 0x9B, 0x9B, 0x9A, 0x99, 0x9A, 0x9A,
+		},
+		{ // 5
+			0xA4, 0xA4, 0xA8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x9E, 0x9E, 0xA0, 0xA8, 0xAC, 0x00, 0x00,
+			0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9E, 0xAC, 0x00, 0x97, 0x97, 0x97, 0x98, 0x9C, 0x9C, 0xA0, 0xAC,
+			0x99, 0x98, 0x99, 0x99, 0x99, 0x9B, 0xA0, 0xAC, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9B, 0xA0, 0xAC,
+			0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x9A, 0x9A, 0x9B, 0x9B, 0xA4, 0xAC, 0x00,
+		},
+		{ // 6
+			0x00, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x00, 0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x9B, 0x99,
+			0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x98, 0x99, 0x99,
+			0x00, 0xAC, 0xA0, 0x9C, 0x9C, 0xA0, 0x9C, 0x9A, 0x00, 0x00, 0xAC, 0xA4, 0xA0, 0x99, 0x99, 0x99,
+			0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99,
+		},
+		{ // 7
+			0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+			0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x9C, 0x99, 0x99,
+			0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x00, 0x00, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99,
+			0x00, 0x00, 0xAC, 0xA0, 0x9B, 0xA0, 0x9E, 0x9C, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x9C, 0x99, 0x99,
+		},
+		{ // 8
+			0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x9B, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+			0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+			0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+			0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x9C, 0x99, 0x00, 0xAC, 0xA4, 0x9C, 0x99, 0x9E, 0x9C, 0x99,
+		},
+		{ // 9
+			0x00, 0x00, 0xAC, 0xA4, 0xA0, 0x9C, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x9C, 0xA0, 0x9C, 0x9A,
+			0xAC, 0xA4, 0x9C, 0x9A, 0x99, 0x99, 0x99, 0x99, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99,
+			0xAC, 0xA4, 0x9C, 0x99, 0x99, 0x99, 0x99, 0x99, 0x00, 0xAC, 0xA0, 0x9C, 0x99, 0x99, 0x99, 0x99,
+			0x00, 0xAC, 0xA4, 0x9C, 0x9A, 0x9C, 0x99, 0x99, 0x00, 0x00, 0xAC, 0xA0, 0x9C, 0x9A, 0x99, 0x99,
+		},
+		{ // 10
+			0x99, 0x99, 0x99, 0x9A, 0xA0, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
+			0x99, 0x99, 0x9C, 0x9E, 0xA4, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x9C, 0x99, 0x9C, 0xA4, 0xAC, 0x00,
+			0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
+			0x99, 0x99, 0x99, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x9A, 0x9B, 0x9E, 0x9C, 0x9C, 0xA4, 0xAC, 0x00,
+		},
+		{ // 11
+			0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0x9E, 0xAC,
+			0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00,
+			0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
+			0x9C, 0x99, 0x99, 0x99, 0x9C, 0x9C, 0xA4, 0xAC, 0x99, 0x9E, 0x9E, 0x9C, 0x9C, 0xA0, 0xAC, 0x00,
+		},
+		{ // 12
+			0x99, 0x99, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x9B, 0x9C, 0x9E, 0x9C, 0x9C, 0xA4, 0xAC, 0x00,
+			0x99, 0x99, 0x99, 0x99, 0x99, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
+			0x99, 0x99, 0x99, 0x99, 0x9C, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xA4, 0xAC, 0x00,
+			0x99, 0x99, 0x9C, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
+		},
+		{ // 13
+			0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC, 0x00, 0x00,
+			0x99, 0x9B, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0x00, 0x99, 0x99, 0x9A, 0x99, 0x9C, 0xA0, 0xAC, 0x00,
+			0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9C, 0xA0, 0xAC,
+			0x99, 0x99, 0x99, 0x99, 0x9A, 0x9C, 0xA4, 0xAC, 0x99, 0x99, 0x99, 0x9A, 0x9C, 0xA4, 0xAC, 0x00,
+		},
+		{ // 14
+			0x00, 0x00, 0xAC, 0x9E, 0x9C, 0x9C, 0x9C, 0x9B, 0x00, 0xAC, 0x9C, 0xA0, 0x9E, 0xA4, 0xA4, 0xA4,
+			0xAC, 0x9C, 0xA4, 0xAC, 0xAC, 0xAC, 0x9C, 0x9E, 0xAC, 0xA0, 0xAC, 0xA8, 0x9E, 0xA8, 0xAC, 0x99,
+			0xAC, 0x9E, 0xAC, 0xA8, 0xAC, 0x9E, 0xA4, 0xAC, 0xAC, 0xA4, 0xA0, 0xAC, 0xAC, 0xA0, 0xA4, 0xAC,
+			0x00, 0xAC, 0xA4, 0xA0, 0xA0, 0xA4, 0xAC, 0xA4, 0x00, 0x00, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+		},
+		{ // 15
+			0x9C, 0x9C, 0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+			0x9E, 0x9E, 0x9E, 0x9C, 0x9E, 0x9E, 0x9E, 0x9E, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x99, 0x98,
+			0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0x9E, 0x9E, 0xA0,
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+		},
+		{ // 16
+			0x9B, 0x9B, 0x9B, 0x9B, 0x9C, 0x9B, 0x9C, 0x9C, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+			0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9E, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
+			0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xA0, 0xA0, 0xA0, 0x9E, 0xA0, 0x9E, 0x9E, 0xA0,
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+		},
+		{ // 17
+			0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9C, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+			0x9E, 0x9E, 0x9E, 0x9C, 0x9C, 0x9C, 0x9E, 0x9E, 0x98, 0x98, 0x98, 0x99, 0x9A, 0x9A, 0x99, 0x98,
+			0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9C, 0xA0, 0x9E, 0x9E, 0xA0, 0xA0, 0xA0, 0xA0, 0x9E,
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+		},
+		{ // 18
+			0x9B, 0x9B, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+			0x9E, 0x9E, 0x9E, 0x9E, 0x9C, 0x9C, 0x9C, 0x9E, 0x98, 0x98, 0x98, 0x98, 0x9A, 0x9A, 0x98, 0x99,
+			0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9B, 0x9C, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0xA0, 0xA0, 0xA0,
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+		},
+		{ // 19
+			0x9C, 0x9B, 0x9C, 0x9C, 0xA0, 0xA4, 0xAC, 0x00, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0x00, 0x00,
+			0x9E, 0x9E, 0x9C, 0x9C, 0x9E, 0xA0, 0xAC, 0x00, 0x99, 0x98, 0x98, 0x99, 0x9A, 0x9A, 0xA0, 0xAC,
+			0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0xA0, 0xAC, 0xA0, 0xA0, 0x9E, 0xA0, 0xA0, 0xA0, 0xA0, 0xAC,
+			0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xAC, 0x00, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0x00, 0x00,
+		}
+	};
+
+	const byte TEXT_COLORS[40][4] = {
+		{0x00, 0x19, 0x19, 0x19},
+		{0x00, 0x08, 0x08, 0x08},
+		{0x00, 0x0F, 0x0F, 0x0F},
+		{0x00, 0x15, 0x15, 0x15},
+		{0x00, 0x01, 0x01, 0x01},
+		{0x00, 0x21, 0x21, 0x21},
+		{0x00, 0x26, 0x26, 0x26},
+		{0x00, 0x2B, 0x2B, 0x2B},
+		{0x00, 0x31, 0x31, 0x31},
+		{0x00, 0x36, 0x36, 0x36},
+		{0x00, 0x3D, 0x3D, 0x3D},
+		{0x00, 0x41, 0x41, 0x41},
+		{0x00, 0x46, 0x46, 0x46},
+		{0x00, 0x4C, 0x4C, 0x4C},
+		{0x00, 0x50, 0x50, 0x50},
+		{0x00, 0x55, 0x55, 0x55},
+		{0x00, 0x5D, 0x5D, 0x5D},
+		{0x00, 0x60, 0x60, 0x60},
+		{0x00, 0x65, 0x65, 0x65},
+		{0x00, 0x6C, 0x6C, 0x6C},
+		{0x00, 0x70, 0x70, 0x70},
+		{0x00, 0x75, 0x75, 0x75},
+		{0x00, 0x7B, 0x7B, 0x7B},
+		{0x00, 0x80, 0x80, 0x80},
+		{0x00, 0x85, 0x85, 0x85},
+		{0x00, 0x8D, 0x8D, 0x8D},
+		{0x00, 0x90, 0x90, 0x90},
+		{0x00, 0x97, 0x97, 0x97},
+		{0x00, 0x9D, 0x9D, 0x9D},
+		{0x00, 0xA4, 0xA4, 0xA4},
+		{0x00, 0xAB, 0xAB, 0xAB},
+		{0x00, 0xB0, 0xB0, 0xB0},
+		{0x00, 0xB6, 0xB6, 0xB6},
+		{0x00, 0xBD, 0xBD, 0xBD},
+		{0x00, 0xC0, 0xC0, 0xC0},
+		{0x00, 0xC6, 0xC6, 0xC6},
+		{0x00, 0xCD, 0xCD, 0xCD},
+		{0x00, 0xD0, 0xD0, 0xD0},
+		{0x00, 0xD6, 0xD6, 0xD6},
+		{0x00, 0xDB, 0xDB, 0xDB},
+	};
+
+	const byte TEXT_COLORS_STARTUP[40][4] = {
+		{0x00, 0x19, 0x19, 0x19},
+		{0x00, 0x08, 0x08, 0x08},
+		{0x00, 0x0F, 0x0F, 0x0F},
+		{0x00, 0x15, 0x15, 0x15},
+		{0x00, 0x01, 0x01, 0x01},
+		{0x00, 0x1F, 0x1F, 0x1F},
+		{0x00, 0x26, 0x26, 0x26},
+		{0x00, 0x2B, 0x2B, 0x2B},
+		{0x00, 0x31, 0x31, 0x31},
+		{0x00, 0x36, 0x36, 0x36},
+		{0x00, 0x3D, 0x3D, 0x3D},
+		{0x00, 0x42, 0x42, 0x42},
+		{0x00, 0x46, 0x46, 0x46},
+		{0x00, 0x4C, 0x4C, 0x4C},
+		{0x00, 0x50, 0x50, 0x50},
+		{0x00, 0x55, 0x55, 0x55},
+		{0x00, 0x5D, 0x5D, 0x5D},
+		{0x00, 0x60, 0x60, 0x60},
+		{0x00, 0x65, 0x65, 0x65},
+		{0x00, 0x6C, 0x6C, 0x6C},
+		{0x00, 0x70, 0x70, 0x70},
+		{0x00, 0x75, 0x75, 0x75},
+		{0x00, 0x7B, 0x7B, 0x7B},
+		{0x00, 0x80, 0x80, 0x80},
+		{0x00, 0x85, 0x85, 0x85},
+		{0x00, 0x8D, 0x8D, 0x8D},
+		{0x00, 0x90, 0x90, 0x90},
+		{0x00, 0x97, 0x97, 0x97},
+		{0x00, 0x9D, 0x9D, 0x9D},
+		{0x00, 0xA4, 0xA4, 0xA4},
+		{0x00, 0xAB, 0xAB, 0xAB},
+		{0x00, 0xB0, 0xB0, 0xB0},
+		{0x00, 0xB6, 0xB6, 0xB6},
+		{0x00, 0xBD, 0xBD, 0xBD},
+		{0x00, 0xC0, 0xC0, 0xC0},
+		{0x00, 0xC6, 0xC6, 0xC6},
+		{0x00, 0xCD, 0xCD, 0xCD},
+		{0x00, 0xD0, 0xD0, 0xD0},
+		{0x00, 0x19, 0x19, 0x19},
+		{0x00, 0x31, 0x31, 0x31}
+	};
+
+	virtual const char **DIRECTION_TEXT_UPPER() = 0;
+	virtual const char **DIRECTION_TEXT() = 0;
+	virtual const char **RACE_NAMES() = 0;
+
+	const int RACE_HP_BONUSES[5] = {0, -2, 1, -1, 2};
+
+	const int RACE_SP_BONUSES[5][2] = {
+		{0, 0}, {2, 0}, {-1, -1}, {1, 1}, {-2, -2}
+	};
+
+	virtual const char **ALIGNMENT_NAMES() = 0;
+	virtual const char **SEX_NAMES() = 0;
+	virtual const char **SKILL_NAMES() = 0;
+	virtual const char **CLASS_NAMES() = 0;
+
+	const int CLASS_EXP_LEVELS[10] = {
+		1500, 2000, 2000, 1500, 2000, 1000, 1500, 1500, 1500, 2000
+	};
+
+	virtual const char **CONDITION_NAMES() = 0;
+
+	const int CONDITION_COLORS[17] = {
+		9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32, 32, 6, 6, 6, 6, 15
+	};
+
+	virtual const char *GOOD() = 0;
+	virtual const char *BLESSED() = 0;
+	virtual const char *POWER_SHIELD() = 0;
+	virtual const char *HOLY_BONUS() = 0;
+	virtual const char *HEROISM() = 0;
+	virtual const char *IN_PARTY() = 0;
+	virtual const char *PARTY_DETAILS() = 0;
+	virtual const char *PARTY_DIALOG_TEXT() = 0;
+
+	const int FACE_CONDITION_FRAMES[17] = {
+		2, 2, 2, 1, 1, 4, 4, 4, 3, 2, 4, 3, 3, 5, 6, 7, 0
+	};
+
+	const int CHAR_FACES_X[6] = {10, 45, 81, 117, 153, 189};
+
+	const int HP_BARS_X[6] = {13, 50, 86, 122, 158, 194};
+
+	virtual const char *NO_ONE_TO_ADVENTURE_WITH() = 0;
+	virtual const char *YOUR_ROSTER_IS_FULL() = 0;
+
+	const byte DARKNESS_XLAT[3][256] = {
+		{
+		0, 25, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		60, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		76, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		92, 93, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		108, 109, 110, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		124, 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		140, 141, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		168, 169, 170, 171, 172, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		204, 205, 206, 207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		220, 221, 222, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		236, 237, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		252, 253, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+		}, {
+		0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
+		56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+		72, 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, 0,
+		88, 89, 90, 91, 92, 93, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0,
+		104, 105, 106, 107, 108, 109, 110, 111, 0, 0, 0, 0, 0, 0, 0, 0,
+		120, 121, 122, 123, 124, 125, 126, 127, 0, 0, 0, 0, 0, 0, 0, 0,
+		136, 137, 138, 139, 140, 141, 142, 143, 0, 0, 0, 0, 0, 0, 0, 0,
+		160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		184, 185, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0, 0, 0, 0, 0,
+		200, 201, 202, 203, 204, 205, 206, 207, 0, 0, 0, 0, 0, 0, 0, 0,
+		216, 217, 218, 219, 220, 221, 222, 223, 0, 0, 0, 0, 0, 0, 0, 0,
+		232, 233, 234, 235, 236, 237, 238, 239, 0, 0, 0, 0, 0, 0, 0, 0,
+		248, 249, 250, 251, 252, 253, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0
+		}, {
+		0, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+		24, 25, 26, 27, 28, 29, 30, 31, 0, 0, 0, 0, 0, 0, 0, 0,
+		36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
+		52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 0, 0, 0,
+		68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 0, 0, 0, 0,
+		84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 0, 0, 0, 0,
+		100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 0, 0, 0, 0,
+		116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0, 0, 0, 0,
+		132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 0, 0, 0, 0,
+		152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+		168, 169, 170, 171, 172, 173, 174, 175, 0, 0, 0, 0, 0, 0, 0, 0,
+		180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 0, 0, 0, 0,
+		196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 0, 0, 0, 0,
+		212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 0, 0, 0, 0,
+		228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 0, 0, 0, 0,
+		244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 0, 0, 0, 0
+		}
+	};
+
+	virtual const char *PLEASE_WAIT() = 0;
+	virtual const char *OOPS() = 0;
+
+	const int SCREEN_POSITIONING_X[4][48] = {
+		{
+		-1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
+		-1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
+		-1, -1,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,
+		-3, -2, -1,  0,  0,  1,  2,  3, -4,  4,  0,  0
+		}, {
+		 0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
+		 2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
+		 3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
+		 4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  0,  1
+		}, {
+		 1,  0,  0,  0, -1,  1,  0,  0,  0, -1,  2,  1,
+		 1,  0,  0,  0, -1, -1, -2,  4,  3,  3,  2,  2,
+		 1,  1,  0,  0,  0, -1, -1, -2, -2, -3, -3, -4,
+		 3,  2,  1,  0,  0, -1, -2, -3,  4, -4,  0,  0
+		}, {
+		 0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -2, -2,
+		-2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3,
+		-3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
+		-4, -4, -4, -4, -4, -4, -4, -4, -4, -4,  0, -1
+		}
+	};
+
+	const int SCREEN_POSITIONING_Y[4][48] = {
+		{
+		 0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  2,  2,
+		 2,  2,  2,  2,  2,  2,  2,  3,  3,  3,  3,  3,
+		 3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,
+		 4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  0,  1
+		}, {
+		 1,  0,  0,  0, -1,  1,  0,  0,  0, -1,  2,  1,
+		 1,  0,  0,  0, -1, -1, -2,  4,  3,  3,  2,  2,
+		 1,  1,  0,  0,  0, -1, -1, -2, -2, -3, -3, -4,
+		 3,  2,  1,  0,  0, -1, -2, -3,  4, -4,  0,  0
+		}, {
+		 0,  0,  0,  0,  0, -1, -1, -1, -1, -1, -2, -2,
+		-2, -2, -2, -2, -2, -2, -2, -3, -3, -3, -3, -3,
+		-3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
+		-4, -4, -4, -4, -4, -4, -4, -4, -4, -4,  0, -1
+		}, {
+		-1,  0,  0,  0,  1, -1,  0,  0,  0,  1, -2, -1,
+		-1,  0,  0,  0,  1,  1,  2, -4, -3, -3, -2, -2,
+		-1, -1,  0,  0,  0,  1,  1,  2,  2,  3,  3,  4,
+		-3, -2, -1,  0,  0,  1,  2,  3, -4,  4,  0,  0
+		}
+	};
+
+	const int MONSTER_GRID_BITMASK[12] = {
+		0xC, 8, 4, 0, 0xF, 0xF000, 0xF00, 0xF0, 0xF00, 0xF0, 0x0F, 0xF000
+	};
+
+	const int INDOOR_OBJECT_X[2][12] = {
+		{ -5, -7, -112, 98, -8, -65, 49, -9, -34, 16, -58, 40 },
+		{ -35, -35, -142, 68, -35, -95, 19, -35, -62, -14, -98, 16 }
+	};
+
+	const int MAP_OBJECT_Y[2][12] = {
+		{ 2, 25, 25, 25, 50, 50, 50, 58, 58, 58, 58, 58 },
+		{ -65, -6, -6, -6, 36, 36, 36, 54, 54, 54, 54, 54 }
+	};
+
+	const int INDOOR_MONSTERS_Y[4] = { 2, 34, 53, 59 };
+
+	const int OUTDOOR_OBJECT_X[2][12] = {
+		{ -5, -7, -112, 98, -8, -77, 61, -9, -43, 25, -74, 56 },
+		{ -35, -35, -142, 68, -35, -95, 19, -35, -62, -24, -98, 16 }
+	};
+
+	const int OUTDOOR_MONSTER_INDEXES[26] = {
+		42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 69, 70,
+		71, 72, 73, 74, 75, 90, 91, 92, 93, 94, 112, 115, 118
+	};
+
+	const int OUTDOOR_MONSTERS_Y[26] = {
+		59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 53, 53,
+		53, 53, 53, 53, 53, 34, 34, 34, 34, 34, 2, 2, 2
+	};
+
+	const int DIRECTION_ANIM_POSITIONS[4][4] = {
+		{ 0, 1, 2, 3 }, { 3, 0, 1, 2 }, { 2, 3, 0, 1 }, { 1, 2, 3, 0 }
+	};
+
+	const byte WALL_SHIFTS[4][48] = {
+		{
+			12, 0, 12, 8, 12, 12, 0, 12, 8, 12, 12, 0,
+			12, 0, 12, 8, 12, 8, 12, 12, 0, 12, 0, 12,
+			0, 12, 0, 12, 8, 12, 8, 12, 8, 12, 8, 12,
+			0, 0, 0, 0, 8, 8, 8, 8, 0, 0, 4, 4
+		}, {
+			8, 12, 8, 4, 8, 8, 12, 8, 4, 8, 8, 12,
+			8, 12, 8, 4, 8, 4, 8, 8, 12, 8, 12, 8,
+			12, 8, 12, 8, 4, 8, 4, 8, 4, 8, 4, 8,
+			12, 12, 12, 12, 4, 4, 4, 4, 0, 0, 0, 0
+		}, {
+			4, 8, 4, 0, 4, 4, 8, 4, 0, 4, 4, 8,
+			4, 8, 4, 0, 4, 0, 4, 4, 8, 4, 8, 4,
+			8, 4, 8, 4, 0, 4, 0, 4, 0, 4, 0, 4,
+			8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 12, 12
+		}, {
+			0, 4, 0, 12, 0, 0, 4, 0, 12, 0, 0, 4,
+			0, 4, 0, 12, 0, 12, 0, 0, 4, 0, 4, 0,
+			4, 0, 4, 0, 12, 0, 12, 0, 12, 0, 12, 0,
+			4, 4, 4, 4, 12, 12, 12, 12, 0, 0, 8, 8
+		}
+	};
+
+	const int DRAW_NUMBERS[25] = {
+		36, 37, 38, 43, 42, 41,
+		39, 20, 22, 24, 33, 31,
+		29, 26, 10, 11, 18, 16,
+		13, 5, 9, 6, 0, 4, 1
+	};
+
+	const int DRAW_FRAMES[25][2] = {
+		{ 18, 24 }, { 19, 23 }, { 20, 22 }, { 24, 18 }, { 23, 19 }, { 22, 20 },
+		{ 21, 21 }, { 11, 17 }, { 12, 16 }, { 13, 15 }, { 17, 11 }, { 16, 12 },
+		{ 15, 13 }, { 14, 14 }, { 6, 10 }, { 7, 9 }, { 10, 6 }, { 9, 7 },
+		{ 8, 8 }, { 3, 5 }, { 5, 3 }, { 4, 4 }, { 0, 2 }, { 2, 0 },
+		{ 1, 1 }
+	};
+
+	const int COMBAT_FLOAT_X[8] = { -2, -1, 0, 1, 2, 1, 0, -1 };
+
+	const int COMBAT_FLOAT_Y[8] = { -2, 0, 2, 0, -1, 0, 2, 0 };
+
+	const int MONSTER_EFFECT_FLAGS[15][8] = {
+		{ 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10A, 0x10B },
+		{ 0x10C, 0x10D, 0x10E, 0x10F, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x110, 0x111, 0x112, 0x113, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x114, 0x115, 0x116, 0x117, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x200, 0x201, 0x202, 0x203, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x300, 0x301, 0x302, 0x303, 0x400, 0x401, 0x402, 0x403 },
+		{ 0x500, 0x501, 0x502, 0x503, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x600, 0x601, 0x602, 0x603, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x604, 0x605, 0x606, 0x607, 0x608, 0x609, 0x60A, 0x60B },
+		{ 0x60C, 0x60D, 0x60E, 0x60F, 0x0, 0x0, 0x0, 0x0 },
+		{ 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100 },
+		{ 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101 },
+		{ 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102 },
+		{ 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103 },
+		{ 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108 }
+	};
+
+	const int SPELLS_ALLOWED[3][40] = {
+		{
+			0, 1, 2, 3, 5, 6, 7, 8, 9, 10,
+			12, 14, 16, 23, 26, 27, 28, 30, 31, 32,
+			33, 42, 46, 48, 49, 50, 52, 55, 56, 58,
+			59, 62, 64, 65, 67, 68, 71, 73, 74, 76
+		}, {
+			1, 4, 11, 13, 15, 17, 18, 19, 20, 21,
+			22, 24, 25, 29, 34, 35, 36, 37, 38, 39,
+			40, 41, 42, 43, 44, 45, 47, 51, 53, 54,
+			57, 60, 61, 63, 66, 69, 70, 72, 75, 76
+		}, {
+			0, 1, 2, 3, 4, 5, 7, 9, 10, 20,
+			25, 26, 27, 28, 30, 31, 34, 38, 40, 41,
+			42, 43, 44, 45, 49, 50, 52, 53, 55, 59,
+			60, 61, 62, 67, 68, 72, 73, 74, 75, 76
+		}
+	};
+
+	const int BASE_HP_BY_CLASS[10] = { 10, 8, 7, 5, 4, 8, 7, 12, 6, 9 };
+
+	const int AGE_RANGES[10] = { 1, 6, 11, 18, 36, 51, 76, 101, 201, 0xffff };
+
+	const int AGE_RANGES_ADJUST[2][10] = {
+		{ -250, -50, -20, -10, 0, -2, -5, -10, -20, -50 },
+		{ -250, -50, -20, -10, 0, 2, 5, 10, 20, 50 }
+	};
+
+	const int STAT_VALUES[24] = {
+		3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 25, 30, 35, 40,
+		50, 75, 100, 125, 150, 175, 200, 225, 250, 65535
+	};
+
+	const int STAT_BONUSES[24] = {
+		-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6,
+		7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20
+	};
+
+	const int ELEMENTAL_CATEGORIES[6] = { 8, 15, 20, 25, 33, 36 };
+
+	const int ATTRIBUTE_CATEGORIES[10] = {
+		9, 17, 25, 33, 39, 45, 50, 56, 61, 72
+	};
+
+	const int ATTRIBUTE_BONUSES[72] = {
+		2, 3, 5, 8, 12, 17, 23, 30, 38, 47,	// Might bonus
+		2, 3, 5, 8, 12, 17, 23, 30,			// INT bonus
+		2, 3, 5, 8, 12, 17, 23, 30,			// PER bonus
+		2, 3, 5, 8, 12, 17, 23, 30,			// SPD bonus
+		3, 5, 10, 15, 20, 30,				// ACC bonus
+		5, 10, 15, 20, 25, 30,				// LUC bonus
+		4, 6, 10, 20, 50,					// HP bonus
+		4, 8, 12, 16, 20, 25,				// SP bonus
+		2, 4, 6, 10, 16,					// AC bonus
+		4, 6, 8, 10, 12, 14, 16, 18, 20, 25	// Thievery bonus
+	};
+
+	const int ELEMENTAL_RESISTENCES[37] = {
+		0, 5, 7, 9, 12, 15, 20, 25, 30, 5, 7, 9, 12, 15, 20, 25,
+		5, 10, 15, 20, 25, 10, 15, 20, 25, 40, 5, 7, 9, 11, 13, 15, 20, 25,
+		5, 10, 20
+	};
+
+	const int ELEMENTAL_DAMAGE[37] = {
+		0, 2, 3, 4, 5, 10, 15, 20, 30, 2, 3, 4, 5, 10, 15, 20, 2, 4, 5, 10, 20,
+		2, 4, 8, 16, 32, 2, 3, 4, 5, 10, 15, 20, 30, 5, 10, 25
+	};
+
+	const int WEAPON_DAMAGE_BASE[35] = {
+		0, 3, 2, 3, 2, 2, 4, 1, 2, 4, 2, 3,
+		2, 2, 1, 1, 1, 1, 4, 4, 3, 2, 4, 2,
+		2, 2, 5, 3, 3, 3, 3, 5, 4, 2, 6
+	};
+
+	const int WEAPON_DAMAGE_MULTIPLIER[35] = {
+		0, 3, 3, 4, 5, 4, 2, 3, 3, 3, 3, 3,
+		2, 4, 10, 6, 8, 9, 4, 3, 6, 8, 5, 6,
+		4, 5, 3, 5, 6, 7, 2, 2, 2, 2, 4
+	};
+
+	const int METAL_DAMAGE[22] = {
+		-3, -6, -4, -2, 2, 4, 6, 8, 10, 0, 1,
+		1, 2, 2, 3, 4, 5, 12, 15, 20, 30, 50
+	};
+
+	const int METAL_DAMAGE_PERCENT[22] = {
+		253, 252, 3, 2, 1, 2, 3, 4, 6, 0, 1,
+		1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10
+	};
+
+	const int METAL_LAC[22] = {
+		-3, 0, -2, -1, 1, 2, 4, 6, 8, 0, 1,
+		1, 2, 2, 3, 4, 5, 10, 12, 14, 16, 20
+	};
+
+	const int ARMOR_STRENGTHS[14] = { 0, 2, 4, 5, 6, 7, 8, 10, 4, 2, 1, 1, 1, 1 };
+
+	const int MAKE_ITEM_ARR1[6] = { 0, 8, 15, 20, 25, 33 };
+
+	const int MAKE_ITEM_ARR2[6][7][2] = {
+		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
+		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 7 }, { 7, 7 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 5 }, { 5, 5 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
+		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
+		{ { 0, 0 }, { 1, 1 }, { 1, 1 }, { 1, 2 }, { 2, 2 }, { 2, 3 }, { 3, 3 } }
+	};
+
+	const int MAKE_ITEM_ARR3[10][7][2] = {
+		{ { 0, 0 }, { 1, 4 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 6, 10 }, { 10, 10 } },
+		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
+		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
+		{ { 0, 0 }, { 1, 3 }, { 2, 5 }, { 3, 6 }, { 4, 7 }, { 5, 8 }, { 8, 8 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 6 }, { 6, 6 } },
+		{ { 0, 0 }, { 1, 2 }, { 2, 3 }, { 3, 4 }, { 4, 5 }, { 5, 6 }, { 6, 6 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 5 }, { 4, 6 }, { 6, 6 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 3 }, { 2, 4 }, { 3, 4 }, { 4, 5 }, { 5, 5 } },
+		{ { 0, 0 }, { 1, 2 }, { 1, 4 }, { 3, 6 }, { 5, 8 }, { 7, 10 }, { 10, 10 } }
+	};
+
+	const int MAKE_ITEM_ARR4[2][7][2] = {
+		{ { 0, 0 }, { 1, 4 }, { 3, 7 }, { 4, 8 }, { 5, 9 }, { 8, 9 }, { 9, 9 } },
+		{ { 0, 0 }, { 1, 4 }, { 2, 6 }, { 4, 7 }, { 6, 10 }, { 9, 13 }, { 13, 13 } }
+	};
+
+	const int MAKE_ITEM_ARR5[8][2] = {
+		{ 0, 0 }, { 1, 15 }, { 16, 30 }, { 31, 40 }, { 41, 50 },
+		{ 51, 60 }, { 61, 73 }, { 61, 73 }
+	};
+
+	const int OUTDOOR_DRAWSTRUCT_INDEXES[44] = {
+		37, 38, 39, 40, 41, 44, 42, 43, 47, 45, 46,
+		48, 49, 52, 50, 51, 66, 67, 68, 69, 70, 71,
+		72, 75, 73, 74, 87, 88, 89, 90, 91, 94, 92,
+		93, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120
+	};
+
+	const int TOWN_MAXES[2][11] = {
+		{ 23, 13, 32, 16, 26, 16, 16, 16, 16, 16, 16 },
+		{ 26, 19, 48, 27, 26, 37, 16, 16, 16, 16, 16 }
+	};
+
+	const char *const TOWN_ACTION_MUSIC[2][7] = {
+		{ "bank.m", "smith.m", "guild.m", "tavern.m",
+		"temple.m", "grounds.m", "endgame.m" },
+		{ "bank.m", "sf09.m", "guild.m", "tavern.m",
+		"temple.m", "smith.m", "endgame.m" }
+	};
+
+	const char *const TOWN_ACTION_SHAPES[7] = {
+		"bnkr", "blck", "gild", "tvrn", "tmpl", "trng", "eface08"
+	};
+
+	const int TOWN_ACTION_FILES[2][7] = {
+		{ 3, 2, 4, 2, 4, 2, 1 }, { 5, 3, 7, 5, 4, 6, 1 }
+	};
+
+	virtual const char *BANK_TEXT() = 0;
+	virtual const char *BLACKSMITH_TEXT() = 0;
+	virtual const char *GUILD_NOT_MEMBER_TEXT() = 0;
+	virtual const char *GUILD_TEXT() = 0;
+	virtual const char *TAVERN_TEXT() = 0;
+	virtual const char *FOOD_AND_DRINK() = 0;
+	virtual const char *GOOD_STUFF() = 0;
+	virtual const char *HAVE_A_DRINK() = 0;
+	virtual const char *YOURE_DRUNK() = 0;
+
+	const int TAVERN_EXIT_LIST[2][6][5][2] = {
+		{
+			{ { 21, 17 }, { 0, 0 }, { 20, 3 }, { 0, 0 }, { 0, 0 } },
+			{ { 13, 4 }, { 0, 0 }, { 19, 9 }, { 0, 0 }, { 0, 0 } },
+			{ { 20, 10 }, { 12, 8 }, { 5, 26 }, { 3, 4 }, { 7, 5 } },
+			{ { 18, 4 }, { 0, 0 }, { 19, 16 }, { 0, 0 }, { 11, 12 } },
+			{ { 15, 21 }, { 0, 0 }, { 13, 21 }, { 0, 0 }, { 0, 0 } },
+			{ { 10, 8 }, { 0, 0 }, { 15, 12 }, { 0, 0 }, { 0, 0 } },
+		}, {
+			{ { 21, 17 }, { 0, 0 }, { 20, 3 }, { 0, 0 }, { 0, 0 } },
+			{ { 13, 4 }, { 0, 0 }, { 19, 9 }, { 0, 0 }, { 0, 0 } },
+			{ { 20, 10 }, { 12, 8 }, { 5, 26 }, { 3, 4 }, { 7, 5 } },
+			{ { 17, 24 }, { 14, 13 }, { 0, 0 }, { 0, 0 }, { 9, 4 } },
+			{ { 15, 21 }, { 0, 0 }, { 13, 21 }, { 0, 0 }, { 0, 0 } },
+			{ { 10, 8 }, { 0, 0 }, { 15, 12 }, { 0, 0 }, { 0, 0 } }
+		}
+	};
+
+	virtual const char  *TEMPLE_TEXT() = 0;
+	virtual const char  *EXPERIENCE_FOR_LEVEL() = 0;
+	virtual const char  *TRAINING_LEARNED_ALL() = 0;
+	virtual const char  *ELIGIBLE_FOR_LEVEL() = 0;
+	virtual const char  *TRAINING_TEXT() = 0;
+	virtual const char  *GOLD_GEMS() = 0;
+	virtual const char  *GOLD_GEMS_2() = 0;
+	virtual const char **DEPOSIT_WITHDRAWL() = 0;
+	virtual const char  *NOT_ENOUGH_X_IN_THE_Y() = 0;
+	virtual const char  *NO_X_IN_THE_Y() = 0;
+	virtual const char **STAT_NAMES() = 0;
+	virtual const char **CONSUMABLE_NAMES() = 0;
+	virtual const char **WHERE_NAMES() = 0;
+	virtual const char  *AMOUNT() = 0;
+	virtual const char  *FOOD_PACKS_FULL() = 0;
+	virtual const char  *BUY_SPELLS() = 0;
+	virtual const char  *GUILD_OPTIONS() = 0;
+
+	const int MISC_SPELL_INDEX[74] = {
+		NO_SPELL, MS_Light, MS_Awaken, MS_MagicArrow,
+		MS_FirstAid, MS_FlyingFist, MS_EnergyBlast, MS_Sleep,
+		MS_Revitalize, MS_CureWounds, MS_Sparks, MS_Shrapmetal,
+		MS_InsectSpray, MS_ToxicCloud, MS_ProtFromElements, MS_Pain,
+		MS_Jump, MS_BeastMaster, MS_Clairvoyance, MS_TurnUndead,
+		MS_Levitate, MS_WizardEye, MS_Bless, MS_IdentifyMonster,
+		MS_LightningBolt, MS_HolyBonus, MS_PowerCure, MS_NaturesCure,
+		MS_LloydsBeacon, MS_PowerShield, MS_Heroism, MS_Hynotize,
+		MS_WalkOnWater, MS_FrostBite, MS_DetectMonster, MS_Fireball,
+		MS_ColdRay, MS_CurePoison, MS_AcidSpray, MS_TimeDistortion,
+		MS_DragonSleep, MS_CureDisease, MS_Teleport, MS_FingerOfDeath,
+		MS_CureParalysis, MS_GolemStopper, MS_PoisonVolley, MS_DeadlySwarm,
+		MS_SuperShelter, MS_DayOfProtection, MS_DayOfSorcery, MS_CreateFood,
+		MS_FieryFlail, MS_RechargeItem, MS_FantasticFreeze, MS_TownPortal,
+		MS_StoneToFlesh, MS_RaiseDead, MS_Etheralize, MS_DancingSword,
+		MS_MoonRay, MS_MassDistortion, MS_PrismaticLight, MS_EnchantItem,
+		MS_Incinerate, MS_HolyWord, MS_Resurrection, MS_ElementalStorm,
+		MS_MegaVolts, MS_Inferno, MS_SunRay, MS_Implosion,
+		MS_StarBurst, MS_DivineIntervention
+	};
+
+	const int SPELL_COSTS[77] = {
+		8, 1, 5, -2, 5, -2, 20, 10, 12, 8, 3,
+		- 3, 75, 40, 12, 6, 200, 10, 100, 30, -1, 30,
+		15, 25, 10, -2, 1, 2, 7, 20, -2, -2, 100,
+		15, 5, 100, 35, 75, 5, 20, 4, 5, 1, -2,
+		6, 2, 75, 40, 60, 6, 4, 25, -2, -2, 60,
+		- 1, 50, 15, 125, 2, -1, 3, -1, 200, 35, 150,
+		15, 5, 4, 10, 8, 30, 4, 5, 7, 5, 0
+	};
+
+	const int DARK_SPELL_RANGES[12][2] = {
+		{ 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 },
+		{ 0, 17 }, { 14, 34 }, { 26, 37 }, { 29, 39 },
+		{ 0, 20 }, { 16, 35 }, { 27, 37 }, { 29, 39 }
+	};
+
+	const int SWORDS_SPELL_RANGES[12][2] = {
+		{ 0, 20 },{ 16, 35 },{ 27, 39 },{ 29, 39 },
+		{ 0, 17 },{ 14, 34 },{ 26, 39 },{ 29, 39 },
+		{ 0, 20 },{ 16, 35 },{ 27, 39 },{ 29, 39 }
+	};
+
+	const int CLOUDS_GUILD_SPELLS[5][20] = {
+		{
+			1, 10, 20, 26, 27, 38, 40, 42, 45, 50,
+			55, 59, 60, 61, 62, 68, 72, 75, 77, 77
+		}, {
+			3, 4, 5, 14, 15, 25, 30, 31, 34, 41,
+			49, 51, 53, 67, 73, 75, -1, -1, -1, -1
+		}, {
+			4, 8, 9, 12, 13, 22, 23, 24, 28, 34,
+			41, 44, 52, 70, 73, 74, -1, -1, -1, -1
+		}, {
+			6, 7, 9, 11, 12, 13, 17, 21, 22, 24,
+			29, 36, 56, 58, 64, 71, -1, -1, -1, -1
+		}, {
+			6, 7, 9, 11, 12, 13, 18, 21, 29, 32,
+			36, 37, 46, 51, 56, 58, 69, -1, -1, -1
+		}
+	};
+
+	const int DARK_SPELL_OFFSETS[3][39] = {
+		{
+			42, 1, 26, 59, 27, 10, 50, 68, 55, 62, 67, 73, 2,
+			5, 3, 31, 30, 52, 49, 28, 74, 0, 9, 7, 14, 8,
+			33, 6, 23, 71, 64, 56, 48, 46, 12, 32, 58, 65, 16
+		}, {
+			42, 1, 45, 61, 72, 40, 20, 60, 38, 41, 75, 34, 4,
+			43, 25, 53, 44, 15, 70, 17, 24, 69, 22, 66, 57, 11,
+			29, 39, 51, 21, 19, 36, 47, 13, 54, 37, 18, 35, 63
+		}, {
+			0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+			13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+			26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38
+		}
+	};
+
+	const int SPELL_GEM_COST[77] = {
+		0, 0, 2, 1, 2, 4, 5, 0, 0, 0, 0, 10, 10, 10, 0, 0, 20, 4, 10, 20, 1, 10,
+		5, 5, 4, 2, 0, 0, 0, 10, 3, 1, 20, 4, 0, 20, 10, 10, 1, 10, 0, 0, 0, 2,
+		2, 0, 10, 10, 10, 0, 0, 10, 3, 2, 10, 1, 10, 10, 20, 0, 0, 1, 1, 20, 5, 20,
+		5, 0, 0, 0, 0, 5, 1, 2, 0, 2, 0
+	};
+
+	virtual const char  *NOT_A_SPELL_CASTER() = 0;
+	virtual const char  *SPELLS_LEARNED_ALL() = 0;
+	virtual const char  *SPELLS_FOR() = 0;
+	virtual const char  *SPELL_LINES_0_TO_9() = 0;
+	virtual const char  *SPELLS_DIALOG_SPELLS() = 0;
+	virtual const char  *SPELL_PTS() = 0;
+	virtual const char  *GOLD() = 0;
+	virtual const char  *SPELL_INFO() = 0;
+	virtual const char  *SPELL_PURCHASE() = 0;
+	virtual const char  *MAP_TEXT() = 0;
+	virtual const char  *LIGHT_COUNT_TEXT() = 0;
+	virtual const char  *FIRE_RESISTENCE_TEXT() = 0;
+	virtual const char  *ELECRICITY_RESISTENCE_TEXT() = 0;
+	virtual const char  *COLD_RESISTENCE_TEXT() = 0;
+	virtual const char  *POISON_RESISTENCE_TEXT() = 0;
+	virtual const char  *CLAIRVOYANCE_TEXT() = 0;
+	virtual const char  *LEVITATE_TEXT() = 0;
+	virtual const char  *WALK_ON_WATER_TEXT() = 0;
+	virtual const char  *GAME_INFORMATION() = 0;
+	virtual const char  *WORLD_GAME_TEXT() = 0;
+	virtual const char  *DARKSIDE_GAME_TEXT() = 0;
+	virtual const char  *CLOUDS_GAME_TEXT() = 0;
+	virtual const char  *SWORDS_GAME_TEXT() = 0;
+	virtual const char **WEEK_DAY_STRINGS() = 0;
+	virtual const char  *CHARACTER_DETAILS() = 0;
+	virtual const char **DAYS() = 0;
+	virtual const char  *PARTY_GOLD() = 0;
+	virtual const char  *PLUS_14() = 0;
+	virtual const char  *CHARACTER_TEMPLATE() = 0;
+	virtual const char  *EXCHANGING_IN_COMBAT() = 0;
+	virtual const char  *CURRENT_MAXIMUM_RATING_TEXT() = 0;
+	virtual const char  *CURRENT_MAXIMUM_TEXT() = 0;
+	virtual const char **RATING_TEXT() = 0;
+	virtual const char  *AGE_TEXT() = 0;
+	virtual const char  *LEVEL_TEXT() = 0;
+	virtual const char  *RESISTENCES_TEXT() = 0;
+	virtual const char  *NONE() = 0;
+	virtual const char  *EXPERIENCE_TEXT() = 0;
+	virtual const char  *ELIGIBLE() = 0;
+	virtual const char  *IN_PARTY_IN_BANK() = 0;
+	virtual const char  *FOOD_TEXT() = 0;
+	virtual const char  *EXCHANGE_WITH_WHOM() = 0;
+	virtual const char  *QUICK_REF_LINE() = 0;
+	virtual const char  *QUICK_REFERENCE() = 0;
+
+	const int BLACKSMITH_MAP_IDS[2][4] = { { 28, 30, 73, 49 }, { 29, 31, 37, 43 } };
+
+	virtual const char  *ITEMS_DIALOG_TEXT1() = 0;
+	virtual const char  *ITEMS_DIALOG_TEXT2() = 0;
+	virtual const char  *ITEMS_DIALOG_LINE1() = 0;
+	virtual const char  *ITEMS_DIALOG_LINE2() = 0;
+	virtual const char  *BTN_BUY() = 0;
+	virtual const char  *BTN_SELL() = 0;
+	virtual const char  *BTN_IDENTIFY() = 0;
+	virtual const char  *BTN_FIX() = 0;
+	virtual const char  *BTN_USE() = 0;
+	virtual const char  *BTN_EQUIP() = 0;
+	virtual const char  *BTN_REMOVE() = 0;
+	virtual const char  *BTN_DISCARD() = 0;
+	virtual const char  *BTN_QUEST() = 0;
+	virtual const char  *BTN_ENCHANT() = 0;
+	virtual const char  *BTN_RECHARGE() = 0;
+	virtual const char  *BTN_GOLD() = 0;
+	virtual const char  *ITEM_BROKEN() = 0;
+	virtual const char  *ITEM_CURSED() = 0;
+	virtual const char  *ITEM_OF() = 0;
+	virtual const char **BONUS_NAMES() = 0;
+	virtual const char **WEAPON_NAMES() = 0;
+	virtual const char **ARMOR_NAMES() = 0;
+	virtual const char **ACCESSORY_NAMES() = 0;
+	virtual const char **MISC_NAMES() = 0;
+	virtual const char **SPECIAL_NAMES() = 0;
+	virtual const char **ELEMENTAL_NAMES() = 0;
+	virtual const char **ATTRIBUTE_NAMES() = 0;
+	virtual const char **EFFECTIVENESS_NAMES() = 0;
+	virtual const char **QUEST_ITEM_NAMES() = 0;
+	virtual const char **QUEST_ITEM_NAMES_SWORDS() = 0;
+
+	const int WEAPON_BASE_COSTS[35] = {
+		0, 50, 15, 100, 80, 40, 60, 1, 10, 150, 30, 60, 8, 50,
+		100, 15, 30, 15, 200, 80, 250, 150, 400, 100, 40, 120,
+		300, 100, 200, 300, 25, 100, 50, 15, 0
+	};
+	const int ARMOR_BASE_COSTS[14] = {
+		0, 20, 100, 200, 400, 600, 1000, 2000, 100, 60, 40, 250, 200, 100
+	};
+	const int ACCESSORY_BASE_COSTS[11] = {
+		0, 100, 100, 250, 100, 50, 300, 200, 500, 1000, 2000
+	};
+	const int MISC_MATERIAL_COSTS[22] = {
+		0, 50, 1000, 500, 10, 100, 20, 10, 50, 10, 10, 100,
+		1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+	};
+	const int MISC_BASE_COSTS[76] = {
+		0, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+		100, 100, 100, 100, 200, 200, 200, 200, 200, 200, 200, 200,
+		200, 200, 200, 200, 200, 200, 200, 300, 300, 300, 300, 300,
+		300, 300, 300, 300, 300, 400, 400, 400, 400, 400, 400, 400,
+		400, 400, 400, 500, 500, 500, 500, 500, 500, 500, 500, 500,
+		500, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,
+		600, 600, 600, 600
+	};
+	const int METAL_BASE_MULTIPLIERS[22] = {
+		10, 25, 5, 75, 2, 5, 10, 20, 50, 2, 3, 5, 10, 20, 30, 40,
+		50, 60, 70, 80, 90, 100
+	};
+	const int ITEM_SKILL_DIVISORS[4] = { 1, 2, 100, 10 };
+
+	const int RESTRICTION_OFFSETS[4] = { 0, 35, 49, 60 };
+
+	const int ITEM_RESTRICTIONS[86] = {
+		0, 86, 86, 86, 86, 86, 86, 0, 6, 239, 239, 239, 2, 4, 4, 4, 4,
+		6, 70, 70, 70, 70, 94, 70, 0, 4, 239, 86, 86, 86, 70, 70, 70, 70,
+		0, 0, 0, 68, 100, 116, 125, 255, 255, 85, 0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+	};
+
+	virtual const char  *NOT_PROFICIENT() = 0;
+	virtual const char  *NO_ITEMS_AVAILABLE() = 0;
+	virtual const char **CATEGORY_NAMES() = 0;
+	virtual const char  *X_FOR_THE_Y() = 0;
+	virtual const char  *X_FOR_Y() = 0;
+	virtual const char  *X_FOR_Y_GOLD() = 0;
+	virtual const char  *FMT_CHARGES() = 0;
+	virtual const char  *AVAILABLE_GOLD_COST() = 0;
+	virtual const char  *CHARGES() = 0;
+	virtual const char  *COST() = 0;
+	virtual const char **ITEM_ACTIONS() = 0;
+	virtual const char  *WHICH_ITEM() = 0;
+	virtual const char  *WHATS_YOUR_HURRY() = 0;
+	virtual const char  *USE_ITEM_IN_COMBAT() = 0;
+	virtual const char  *NO_SPECIAL_ABILITIES() = 0;
+	virtual const char  *CANT_CAST_WHILE_ENGAGED() = 0;
+	virtual const char  *EQUIPPED_ALL_YOU_CAN() = 0;
+	virtual const char  *REMOVE_X_TO_EQUIP_Y() = 0;
+	virtual const char  *RING() = 0;
+	virtual const char  *MEDAL() = 0;
+	virtual const char  *CANNOT_REMOVE_CURSED_ITEM() = 0;
+	virtual const char  *CANNOT_DISCARD_CURSED_ITEM() = 0;
+	virtual const char  *PERMANENTLY_DISCARD() = 0;
+	virtual const char  *BACKPACK_IS_FULL() = 0;
+	virtual const char **CATEGORY_BACKPACK_IS_FULL() = 0;
+	virtual const char  *BUY_X_FOR_Y_GOLD() = 0;
+	virtual const char  *SELL_X_FOR_Y_GOLD() = 0;
+	virtual const char **SELL_X_FOR_Y_GOLD_ENDINGS() = 0;
+	virtual const char  *NO_NEED_OF_THIS() = 0;
+	virtual const char  *NOT_RECHARGABLE() = 0;
+	virtual const char  *NOT_ENCHANTABLE() = 0;
+	virtual const char  *SPELL_FAILED() = 0;
+	virtual const char  *ITEM_NOT_BROKEN() = 0;
+	virtual const char **FIX_IDENTIFY() = 0;
+	virtual const char  *FIX_IDENTIFY_GOLD() = 0;
+	virtual const char  *IDENTIFY_ITEM_MSG() = 0;
+	virtual const char  *ITEM_DETAILS() = 0;
+	virtual const char  *ALL() = 0;
+	virtual const char  *FIELD_NONE() = 0;
+	virtual const char  *DAMAGE_X_TO_Y() = 0;
+	virtual const char  *ELEMENTAL_XY_DAMAGE() = 0;
+	virtual const char  *ATTR_XY_BONUS() = 0;
+	virtual const char  *EFFECTIVE_AGAINST() = 0;
+	virtual const char  *QUESTS_DIALOG_TEXT() = 0;
+	virtual const char  *CLOUDS_OF_XEEN_LINE() = 0;
+	virtual const char  *DARKSIDE_OF_XEEN_LINE() = 0;
+	virtual const char  *SWORDS_OF_XEEN_LINE() = 0;
+	virtual const char  *NO_QUEST_ITEMS() = 0;
+	virtual const char  *NO_CURRENT_QUESTS() = 0;
+	virtual const char  *NO_AUTO_NOTES() = 0;
+	virtual const char  *QUEST_ITEMS_DATA() = 0;
+	virtual const char  *CURRENT_QUESTS_DATA() = 0;
+	virtual const char  *AUTO_NOTES_DATA() = 0;
+	virtual const char  *REST_COMPLETE() = 0;
+	virtual const char  *PARTY_IS_STARVING() = 0;
+	virtual const char  *HIT_SPELL_POINTS_RESTORED() = 0;
+	virtual const char  *TOO_DANGEROUS_TO_REST() = 0;
+	virtual const char  *SOME_CHARS_MAY_DIE() = 0;
+	virtual const char  *DISMISS_WHOM() = 0;
+	virtual const char  *CANT_DISMISS_LAST_CHAR() = 0;
+	virtual const char  *DELETE_CHAR_WITH_ELDER_WEAPON() = 0;
+	virtual const char **REMOVE_DELETE() = 0;
+	virtual const char  *REMOVE_OR_DELETE_WHICH() = 0;
+	virtual const char  *YOUR_PARTY_IS_FULL() = 0;
+	virtual const char  *HAS_SLAYER_SWORD() = 0;
+	virtual const char  *SURE_TO_DELETE_CHAR() = 0;
+	virtual const char  *CREATE_CHAR_DETAILS() = 0;
+	virtual const char  *NEW_CHAR_STATS() = 0;
+	virtual const char  *NAME_FOR_NEW_CHARACTER() = 0;
+	virtual const char  *SELECT_CLASS_BEFORE_SAVING() = 0;
+	virtual const char  *EXCHANGE_ATTR_WITH() = 0;
+
+	const int NEW_CHAR_SKILLS[10] = { 1, 5, -1, -1, 4, 0, 0, -1, 6, 11 };
+	const int NEW_CHAR_SKILLS_OFFSET[10] = { 0, 0, 0, 5, 0, 0, 0, 0, 0, 0 };
+	const int NEW_CHAR_SKILLS_LEN[10] = { 11, 8, 0, 0, 12, 8, 8, 0, 9, 11 };
+	const int NEW_CHAR_RACE_SKILLS[10] = { 14, -1, 17, 16, -1, 0, 0, 0, 0, 0 };
+
+	const int RACE_MAGIC_RESISTENCES[5] = { 7, 5, 20, 0, 0 };
+	const int RACE_FIRE_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
+	const int RACE_ELECTRIC_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
+	const int RACE_COLD_RESISTENCES[5] = { 7, 0, 2, 5, 10 };
+	const int RACE_ENERGY_RESISTENCES[5] = { 7, 5, 2, 5, 0 };
+	const int RACE_POISON_RESISTENCES[5] = { 7, 0, 2, 20, 0 };
+	const int NEW_CHARACTER_SPELLS[10][4] = {
+		{ -1, -1, -1, -1 },
+		{ 21, -1, -1, -1 },
+		{ 22, -1, -1, -1 },
+		{ 21, 1, 14, -1 },
+		{ 22, 0, 25, -1 },
+		{ -1, -1, -1, -1 },
+		{ -1, -1, -1, -1 },
+		{ -1, -1, -1, -1 },
+		{ 20, 1, 11, 23 },
+		{ 20, 1, -1, -1 }
+	};
+
+	virtual const char  *COMBAT_DETAILS() = 0;
+	virtual const char  *NOT_ENOUGH_TO_CAST() = 0;
+	virtual const char **SPELL_CAST_COMPONENTS() = 0;
+	virtual const char  *CAST_SPELL_DETAILS() = 0;
+	virtual const char  *PARTY_FOUND() = 0;
+	virtual const char  *BACKPACKS_FULL_PRESS_KEY() = 0;
+	virtual const char  *HIT_A_KEY() = 0;
+	virtual const char  *GIVE_TREASURE_FORMATTING() = 0;
+	virtual const char  *X_FOUND_Y() = 0;
+	virtual const char  *ON_WHO() = 0;
+	virtual const char  *WHICH_ELEMENT1() = 0;
+	virtual const char  *WHICH_ELEMENT2() = 0;
+	virtual const char  *DETECT_MONSTERS() = 0;
+	virtual const char  *LLOYDS_BEACON() = 0;
+	virtual const char  *HOW_MANY_SQUARES() = 0;
+	virtual const char  *TOWN_PORTAL() = 0;
+	virtual const char  *TOWN_PORTAL_SWORDS() = 0;
+
+	const int TOWN_MAP_NUMBERS[3][5] = {
+		{ 28, 29, 30, 31, 32 }, { 29, 31, 33, 35, 37 }, { 53, 92, 63, 0, 0 }
+	};
+
+	virtual const char  *MONSTER_DETAILS() = 0;
+	virtual const char **MONSTER_SPECIAL_ATTACKS() = 0;
+	virtual const char  *IDENTIFY_MONSTERS() = 0;
+
+	const char *const EVENT_SAMPLES[6] = {
+		"ahh.voc", "whereto.voc", "gulp.voc", "null.voc", "scream.voc", "laff1.voc"
+	};
+
+	virtual const char  *MOONS_NOT_ALIGNED() = 0;
+	virtual const char  *AWARDS_FOR() = 0;
+	virtual const char  *AWARDS_TEXT() = 0;
+	virtual const char  *NO_AWARDS() = 0;
+	virtual const char  *WARZONE_BATTLE_MASTER() = 0;
+	virtual const char  *WARZONE_MAXED() = 0;
+	virtual const char  *WARZONE_LEVEL() = 0;
+	virtual const char  *WARZONE_HOW_MANY() = 0;
+	virtual const char  *PICKS_THE_LOCK() = 0;
+	virtual const char  *UNABLE_TO_PICK_LOCK() = 0;
+	virtual const char  *CONTROL_PANEL_TEXT() = 0;
+	virtual const char  *CONTROL_PANEL_BUTTONS() = 0;
+	virtual const char  *ON() = 0;
+	virtual const char  *OFF() = 0;
+	virtual const char  *CONFIRM_QUIT() = 0;
+	virtual const char  *MR_WIZARD() = 0;
+	virtual const char  *NO_LOADING_IN_COMBAT() = 0;
+	virtual const char  *NO_SAVING_IN_COMBAT() = 0;
+	virtual const char  *QUICK_FIGHT_TEXT() = 0;
+	virtual const char **QUICK_FIGHT_OPTIONS() = 0;
+	virtual const char **WORLD_END_TEXT() = 0;
+	virtual const char  *WORLD_CONGRATULATIONS() = 0;
+	virtual const char  *WORLD_CONGRATULATIONS2() = 0;
+	virtual const char  *CLOUDS_CONGRATULATIONS1() = 0;
+	virtual const char  *CLOUDS_CONGRATULATIONS2() = 0;
+	virtual const char **GOOBER() = 0;
+
+	const char *const MUSIC_FILES1[5] = {
+		"outdoors.m", "town.m", "cavern.m", "dungeon.m", "castle.m"
+	};
+
+	const char *const MUSIC_FILES2[6][7] = {
+		{ "outday1.m", "outday2.m", "outday4.m", "outnght1.m",
+		"outnght2.m", "outnght4.m", "daydesrt.m" },
+		{ "townday1.m", "twnwlk.m", "newbrigh.m", "twnnitea.m",
+		"twnniteb.m", "twnwlk.m", "townday1.m" },
+		{ "cavern1.m", "cavern2.m", "cavern3a.m", "cavern1.m",
+		"cavern2.m", "cavern3a.m", "cavern1.m" },
+		{ "dngon1.m", "dngon2.m", "dngon3.m", "dngon1.m",
+		"dngon2.m", "dngon3.m", "dngon1.m" },
+		{ "cstl1rev.m", "cstl2rev.m", "cstl3rev.m", "cstl1rev.m",
+		"cstl2rev.m", "cstl3rev.m", "cstl1rev.m" },
+		{ "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m" }
+	};
+
+	virtual const char *DIFFICULTY_TEXT() = 0;
+	virtual const char *SAVE_OFF_LIMITS() = 0;
+	virtual const char *CLOUDS_INTRO1() = 0;
+	virtual const char *DARKSIDE_ENDING1() = 0;
+	virtual const char *DARKSIDE_ENDING2() = 0;
+	virtual const char *PHAROAH_ENDING_TEXT1() = 0;
+	virtual const char *PHAROAH_ENDING_TEXT2() = 0;
+
+	void writeConstants(Common::String num, CCArchive &cc);
+};
+
 extern void writeConstants(CCArchive &cc);
 
 #endif
diff --git a/devtools/create_xeen/en_constants.h b/devtools/create_xeen/en_constants.h
new file mode 100644
index 0000000000..469d81b60e
--- /dev/null
+++ b/devtools/create_xeen/en_constants.h
@@ -0,0 +1,1932 @@
+/* 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.
+ *
+ */
+
+#pragma once
+
+#include "constants.h"
+
+class EN : public LangConstants {
+public:
+	const char *CLOUDS_CREDITS() {
+		return "\v012\t000\x3"
+			   "c\f35Designed and Directed By:\n"
+			   "\f17Jon Van Caneghem\x3l\n"
+			   "\n"
+			   "\t025\f35Programming:\n"
+			   "\t035\f17Mark Caldwell\n"
+			   "\t035Dave Hathaway\n"
+			   "\n"
+			   "\t025\f35Sound System & FX:\n"
+			   "\t035\f17Todd Hendrix\n"
+			   "\n"
+			   "\t025\f35Music & Speech:\n"
+			   "\t035\f17Tim Tully\n"
+			   "\n"
+			   "\t025\f35Writing:\n"
+			   "\t035\f17Paul Rattner\n"
+			   "\t035Debbie Murphy\n"
+			   "\t035Jon Van Caneghem\v012\n"
+			   "\n"
+			   "\n"
+			   "\t180\f35Graphics:\n"
+			   "\t190\f17Louis Johnson\n"
+			   "\t190Jonathan P. Gwyn\n"
+			   "\t190Bonita Long-Hemsath\n"
+			   "\t190Julia Ulano\n"
+			   "\t190Ricardo Barrera\n"
+			   "\n"
+			   "\t180\f35Testing:\n"
+			   "\t190\f17Benjamin Bent\n"
+			   "\t190Mario Escamilla\n"
+			   "\t190Richard Espy\n"
+			   "\t190Scott McDaniel\n"
+			   "\t190Clayton Retzer\n"
+			   "\t190Michael Suarez\x3"
+			   "c";
+	}
+
+	const char *DARK_SIDE_CREDITS() {
+		return "\v012\t000\x3"
+			   "c\f35Designed and Directed By:\n"
+			   "\f17Jon Van Caneghem\x3l\n"
+			   "\n"
+			   "\t025\f35Programming:\n"
+			   "\t035\f17Mark Caldwell\n"
+			   "\t035Dave Hathaway\n"
+			   "\n"
+			   "\t025\f35Sound System & FX:\n"
+			   "\t035\f17Mike Heilemann\n"
+			   "\n"
+			   "\t025\f35Music & Speech:\n"
+			   "\t035\f17Tim Tully\n"
+			   "\n"
+			   "\t025\f35Writing:\n"
+			   "\t035\f17Paul Rattner\n"
+			   "\t035Debbie Van Caneghem\n"
+			   "\t035Jon Van Caneghem\v012\n"
+			   "\n"
+			   "\n"
+			   "\t180\f35Graphics:\n"
+			   "\t190\f17Jonathan P. Gwyn\n"
+			   "\t190Bonita Long-Hemsath\n"
+			   "\t190Julia Ulano\n"
+			   "\t190Ricardo Barrera\n"
+			   "\n"
+			   "\t180\f35Testing:\n"
+			   "\t190\f17Benjamin Bent\n"
+			   "\t190Christian Dailey\n"
+			   "\t190Mario Escamilla\n"
+			   "\t190Marco Hunter\n"
+			   "\t190Robert J. Lupo\n"
+			   "\t190Clayton Retzer\n"
+			   "\t190David Vela\x3"
+			   "c";
+	}
+
+	const char *SWORDS_CREDITS1() {
+		return "\v012\x3"
+			   "c\f35Published By New World Computing, Inc.\f17\n"
+			   "Developed By CATware, Inc.\x3l\n"
+			   "\f01Design and Direction\t180Series Created by\n"
+			   "\t020Bill Fawcett\t190John Van Caneghem\n"
+			   "\n"
+			   "\t010Story Contributions\t180Producer & Manual\n"
+			   "\t020Ellen Guon\t190Dean Rettig\n"
+			   "\n"
+			   "\t010Programming & Ideas\t180Original Programming\n"
+			   "\t020David Potter\t190Mark Caldwell\n"
+			   "\t020Rod Retterath\t190Dave Hathaway\n"
+			   "\n"
+			   "\t010Manual Illustrations\t180Graphic Artists\n"
+			   "\t020Todd Cameron Hamilton\t190Jonathan P. Gwyn\n"
+			   "\t020James Clouse\t190Bonnie Long-Hemsath\n"
+			   "\t190Julia Ulano\n"
+			   "\t190Ricardo Barrera\n";
+	}
+
+	const char *SWORDS_CREDITS2() {
+		return "\f05\v012\t000\x3l\n"
+			   "\t100Sound Programming\n"
+			   "\t110Todd Hendrix\n"
+			   "\n"
+			   "\t100Music\n"
+			   "\t110Tim Tully\n"
+			   "\t110Quality Assurance Manager\n"
+			   "\t110Peter Ryu\n"
+			   "\t100Testers\n"
+			   "\t110Walter Johnson\n"
+			   "\t110Bryan Farina\n"
+			   "\t110David Baton\n"
+			   "\t110Jack Nalls\n";
+	}
+
+	const char *OPTIONS_MENU() {
+		return "\r\x1\x3"
+			   "c\fdMight and Magic Options\n"
+			   "%s of Xeen\x2\n"
+			   "\v%.3dCopyright (c) %d NWC, Inc.\n"
+			   "All Rights Reserved\x1";
+	}
+
+	const char **GAME_NAMES() {
+		delete[] _gameNames;
+		_gameNames = new const char *[3] { "Clouds", "Darkside", "World" };
+		return _gameNames;
+	}
+
+	const char *THE_PARTY_NEEDS_REST() {
+		return "\v012The Party needs rest!";
+	}
+
+	const char *WHO_WILL() {
+		return "\x3"
+			   "c\v000\t000%s\n\n"
+			   "Who will\n%s?\n\v055F1 - F%d";
+	}
+
+	const char *HOW_MUCH() {
+		return "\x3"
+			   "cHow Much\n\n";
+	}
+
+	const char *WHATS_THE_PASSWORD() {
+		return "\x3"
+			   "cWhat's the Password?\n"
+			   "\n"
+			   "Please turn to page %u, go to\n"
+			   "line %u, and type in word %u.\v067\t000Spaces are not counted as words or lines.  "
+			   "Hyphenated words are treated as one word.  Any line that has any text is considered a line."
+			   "\x3"
+			   "c\v040\t000\n";
+	}
+
+	const char *PASSWORD_INCORRECT() {
+		return "\x3"
+			   "c\v040\n"
+			   "\f32Incorrect!\fd";
+	}
+
+	const char *IN_NO_CONDITION() {
+		return "\v007%s is not in any condition to perform actions!";
+	}
+
+	const char *NOTHING_HERE() {
+		return "\x3"
+			   "c\v010Nothing here.";
+	}
+
+	const char **WHO_ACTIONS() {
+		delete[] _whoActions;
+		_whoActions = new const char *[32] {
+			"search", "open", "drink", "mine", "touch", "read", "learn", "take",
+				"bang", "steal", "bribe", "pay", "sit", "try", "turn", "bathe",
+				"destroy", "pull", "descend", "toss a coin", "pray", "join", "act",
+				"play", "push", "rub", "pick", "eat", "sign", "close", "look", "try"
+		};
+		return _whoActions;
+	}
+
+	const char **WHO_WILL_ACTIONS() {
+		delete[] _whoWillActions;
+		_whoWillActions = new const char *[4] {
+			"Open Grate", "Open Door", "Open Scroll", "Select Char"
+		};
+		return _whoWillActions;
+	}
+
+	const char **DIRECTION_TEXT_UPPER() {
+		delete[] _directionTextUpper;
+		_directionTextUpper = new const char *[4] { "NORTH", "EAST", "SOUTH", "WEST" };
+		return _directionTextUpper;
+	}
+
+	const char **DIRECTION_TEXT() {
+		delete[] _directionText;
+		_directionText = new const char *[4] { "North", "East", "South", "West" };
+		return _directionText;
+	}
+
+	const char **RACE_NAMES() {
+		delete[] _raceNames;
+		_raceNames = new const char *[5] { "Human", "Elf", "Dwarf", "Gnome", "H-Orc" };
+		return _raceNames;
+	}
+
+	const char **ALIGNMENT_NAMES() {
+		delete[] _alignmentNames;
+		_alignmentNames = new const char *[3] { "Good", "Neutral", "Evil" };
+		return _alignmentNames;
+	}
+
+	const char **SEX_NAMES() {
+		delete[] _sexNames;
+		_sexNames = new const char *[2] { "Male", "Female" };
+		return _sexNames;
+	}
+
+	const char **SKILL_NAMES() {
+		delete[] _skillNames;
+		_skillNames = new const char *[18] {
+			"Thievery\t100", "Arms Master", "Astrologer", "Body Builder", "Cartographer",
+				"Crusader", "Direction Sense", "Linguist", "Merchant", "Mountaineer",
+				"Navigator", "Path Finder", "Prayer Master", "Prestidigitator",
+				"Swimmer", "Tracker", "Spot Secret Door", "Danger Sense"
+		};
+		return _skillNames;
+	}
+
+	const char **CLASS_NAMES() {
+		delete[] _classNames;
+		_classNames = new const char *[11] {
+			"Knight", "Paladin", "Archer", "Cleric", "Sorcerer", "Robber",
+				"Ninja", "Barbarian", "Druid", "Ranger", nullptr
+		};
+		return _classNames;
+	}
+
+	const char **CONDITION_NAMES() {
+		delete[] _conditionNames;
+		_conditionNames = new const char *[17] {
+			"Cursed", "Heart Broken", "Weak", "Poisoned", "Diseased",
+				"Insane", "In Love", "Drunk", "Asleep", "Depressed", "Confused",
+				"Paralyzed", "Unconscious", "Dead", "Stone", "Eradicated", "Good"
+		};
+		return _conditionNames;
+	}
+
+	const char *GOOD() {
+		return "Good";
+	}
+
+	const char *BLESSED() {
+		return "\n\t020Blessed\t095%+d";
+	}
+
+	const char *POWER_SHIELD() {
+		return "\n\t020Power Shield\t095%+d";
+	}
+
+	const char *HOLY_BONUS() {
+		return "\n\t020Holy Bonus\t095%+d";
+	}
+
+	const char *HEROISM() {
+		return "\n\t020Heroism\t095%+d";
+	}
+
+	const char *IN_PARTY() {
+		return "\014"
+			   "15In Party\014"
+			   "d";
+	}
+
+	const char *PARTY_DETAILS() {
+		return "\015\003l\002\014"
+			   "00"
+			   "\013"
+			   "001"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "009"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "017"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "025"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "001"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "009"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "017"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "025"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "044"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "052"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "060"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "068"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "044"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "052"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "060"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "068"
+			   "\011"
+			   "136%s";
+	}
+
+	const char *PARTY_DIALOG_TEXT() {
+		return "%s\x2\x3"
+			   "c\v106\t013Up\t048Down\t083\f37D\fdel\t118\f37R\fdem"
+			   "\t153\f37C\fdreate\t188E\f37x\fdit\x1";
+	}
+
+	const char *NO_ONE_TO_ADVENTURE_WITH() {
+		return "You have no one to adventure with";
+	}
+
+	const char *YOUR_ROSTER_IS_FULL() {
+		return "Your Roster is full!";
+	}
+
+	const char *PLEASE_WAIT() {
+		return "\014"
+			   "d\003"
+			   "c\011"
+			   "000"
+			   "\013"
+			   "002Please Wait...";
+	}
+
+	const char *OOPS() {
+		return "\003"
+			   "c\011"
+			   "000\013"
+			   "002Oops...";
+	}
+
+	const char *BANK_TEXT() {
+		return "\r\x2\x3"
+			   "c\v122\t013"
+			   "\f37D\fdep\t040\f37W\fdith\t067ESC"
+			   "\x1\t000\v000Bank of Xeen\v015\n"
+			   "Bank\x3l\n"
+			   "Gold\x3r\t000%s\x3l\n"
+			   "Gems\x3r\t000%s\x3"
+			   "c\n"
+			   "\n"
+			   "Party\x3l\n"
+			   "Gold\x3r\t000%s\x3l\n"
+			   "Gems\x3r\t000%s";
+	}
+
+	const char *BLACKSMITH_TEXT() {
+		return "\x1\r\x3"
+			   "c\v000\t000"
+			   "store options for\t039\v027%s\x3l\v046\n"
+			   "\t011\f37b\fdrowse\n"
+			   "\t000\v090gold\x3r\t000%s"
+			   "\x2\x3"
+			   "c\v122\t040esc\x1";
+	}
+
+	const char *GUILD_NOT_MEMBER_TEXT() {
+		return "\n\nYou have to be a member to shop here.";
+	}
+
+	const char *GUILD_TEXT() {
+		return "\x3"
+			   "c\v027\t039%s"
+			   "\x3l\v046\n"
+			   "\t012\f37B\fduy Spells\n"
+			   "\t012\f37S\fdpell Info";
+	}
+
+	const char *TAVERN_TEXT() {
+		return "\r\x3"
+			   "c\v000\t000Tavern Options for\t039"
+			   "\v027%s%s\x3l\t000"
+			   "\v090Gold\x3r\t000%s\x2\x3"
+			   "c\v122"
+			   "\t021\f37S\fdign in\t060ESC\x1";
+	}
+
+	const char *FOOD_AND_DRINK() {
+		return "\x3l\t017\v046\f37D\fdrink\n"
+			   "\t017\f37F\fdood\n"
+			   "\t017\f37T\fdip\n"
+			   "\t017\f37R\fdumors";
+	}
+
+	const char *GOOD_STUFF() {
+		return "\n"
+			   "\n"
+			   "Good Stuff\n"
+			   "\n"
+			   "Hit a key!";
+	}
+
+	const char *HAVE_A_DRINK() {
+		return "\n\nHave a Drink\n\nHit a key!";
+	}
+
+	const char *YOURE_DRUNK() {
+		return "\n\nYou're Drunk\n\nHit a key!";
+	}
+
+	const char *TEMPLE_TEXT() {
+		return "\r\x3"
+			   "c\v000\t000Temple Options for"
+			   "\t039\v027%s\x3l\t000\v046"
+			   "\f37H\fdeal\x3r\t000%u\x3l\n"
+			   "\f37D\fdonation\x3r\t000%u\x3l\n"
+			   "\f37U\fdnCurse\x3r\t000%s"
+			   "\x3l\t000\v090Gold\x3r\t000%s"
+			   "\x2\x3"
+			   "c\v122\t040ESC\x1";
+	}
+
+	const char *EXPERIENCE_FOR_LEVEL() {
+		return "%s needs %u experience for level %u.";
+	}
+
+	const char *TRAINING_LEARNED_ALL() {
+		return "%s has learned all we can teach!";
+	}
+
+	const char *ELIGIBLE_FOR_LEVEL() {
+		return "%s is eligible for level %u.\x3l\n"
+			   "\v081Cost\x3r\t000%u";
+	}
+
+	const char *TRAINING_TEXT() {
+		return "\r\x3"
+			   "cTraining Options\n"
+			   "\n"
+			   "%s\x3l\v090\t000Gold\x3r\t000%s\x2\x3"
+			   "c\v122\t021"
+			   "\f37T\fdrain\t060ESC\x1";
+	}
+
+	const char *GOLD_GEMS() {
+		return "\x3"
+			   "c\v000\t000%s\x3l\n"
+			   "\n"
+			   "Gold\x3r\t000%s\x3l\n"
+			   "Gems\x3r\t000%s\x2\x3"
+			   "c\v096\t013G\f37o\fdld\t040G\f37e\fdms\t067ESC\x1";
+	}
+
+	const char *GOLD_GEMS_2() {
+		return "\x3"
+			   "c\v000\t000%s\x3l\n"
+			   "\n"
+			   "\x4"
+			   "077Gold\x3r\t000%s\x3l\n"
+			   "\x4"
+			   "077Gems\x3r\t000%s\x3l\t000\v051\x4"
+			   "077\n"
+			   "\x4"
+			   "077";
+	}
+
+	const char **DEPOSIT_WITHDRAWL() {
+		delete[] _depositWithdrawl;
+		_depositWithdrawl = new const char *[2] { "Deposit", "Withdrawl" };
+		return _depositWithdrawl;
+	}
+
+	const char *NOT_ENOUGH_X_IN_THE_Y() {
+		return "\x3"
+			   "c\v012Not enough %s in the %s!\x3l";
+	}
+
+	const char *NO_X_IN_THE_Y() {
+		return "\x3"
+			   "c\v012No %s in the %s!\x3l";
+	}
+
+	const char **STAT_NAMES() {
+		delete[] _statNames;
+		_statNames = new const char *[16] {
+			"Might", "Intellect", "Personality", "Endurance", "Speed",
+				"Accuracy", "Luck", "Age", "Level", "Armor Class", "Hit Points",
+				"Spell Points", "Resistances", "Skills", "Awards", "Experience"
+		};
+		return _statNames;
+	}
+
+	const char **CONSUMABLE_NAMES() {
+		delete[] _consumableNames;
+		_consumableNames = new const char *[4] { "Gold", "Gems", "Food", "Condition" };
+		return _consumableNames;
+	}
+
+	const char **WHERE_NAMES() {
+		delete[] _whereNames;
+		_whereNames = new const char *[2] { "Party", "Bank" };
+		return _whereNames;
+	}
+
+	const char *AMOUNT() {
+		return "\x3"
+			   "c\t000\v051Amount\x3l\n";
+	}
+
+	const char *FOOD_PACKS_FULL() {
+		return "\v007Your food packs are already full!";
+	}
+
+	const char *BUY_SPELLS() {
+		return "\x3"
+			   "c\v027\t039%s\x3l\v046\n"
+			   "\t012\f37B\fduy Spells\n"
+			   "\t012\f37S\fdpell Info";
+	}
+
+	const char *GUILD_OPTIONS() {
+		return "\r\f00\x3"
+			   "c\v000\t000Guild Options for%s"
+			   "\x3l\t000\v090Gold"
+			   "\x3r\t000%s\x2\x3"
+			   "c\v122\t040ESC\x1";
+	}
+
+	const char *NOT_A_SPELL_CASTER() {
+		return "Not a spell caster...";
+	}
+
+	const char *SPELLS_LEARNED_ALL() {
+		return "You have learned all we\n"
+			   "\t010can teach you.";
+	}
+
+	const char *SPELLS_FOR() {
+		return "\r\fd%s\x2\x3"
+			   "c\t000\v002Spells for %s";
+	}
+
+	const char *SPELL_LINES_0_TO_9() {
+		return "\x2\x3l\v015\t0011\n2\n3\n4\n5\n6\n7\n8\n9\n0";
+	}
+
+	const char *SPELLS_DIALOG_SPELLS() {
+		return "\x3l\v015"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l"
+			   "\t004\v110%s - %u\x1";
+	}
+
+	const char *SPELL_PTS() {
+		return "Spell Pts";
+	}
+
+	const char *GOLD() {
+		return "Gold";
+	}
+
+	const char *SPELL_INFO() {
+		return "\x3"
+			   "c\f09%s\fd\x3l\n"
+			   "\n"
+			   "%s\x3"
+			   "c\t000\v100Press a Key!";
+	}
+
+	const char *SPELL_PURCHASE() {
+		return "\x3l\v000\t000\fd%s  Do you wish to purchase "
+			   "\f09%s\fd for %u?";
+	}
+
+	const char *MAP_TEXT() {
+		return "\x3"
+			   "c\v000\t000%s\x3l\v139"
+			   "\t000X = %d\x3r\t000Y = %d\x3"
+			   "c\t000%s";
+	}
+
+	const char *LIGHT_COUNT_TEXT() {
+		return "\x3l\n\n\t024Light\x3r\t124%d";
+	}
+
+	const char *FIRE_RESISTENCE_TEXT() {
+		return "%c%sFire%s%u";
+	}
+
+	const char *ELECRICITY_RESISTENCE_TEXT() {
+		return "%c%sElectricity%s%u";
+	}
+
+	const char *COLD_RESISTENCE_TEXT() {
+		return "%c%sCold%s%u";
+	}
+
+	const char *POISON_RESISTENCE_TEXT() {
+		return "%c%sPoison/Acid%s%u";
+	}
+
+	const char *CLAIRVOYANCE_TEXT() {
+		return "%c%sClairvoyance%s";
+	}
+
+	const char *LEVITATE_TEXT() {
+		return "%c%sLevitate%s";
+	}
+
+	const char *WALK_ON_WATER_TEXT() {
+		return "%c%sWalk on Water";
+	}
+
+	const char *GAME_INFORMATION() {
+		return "\r\x3"
+			   "c\t000\v001\f37%s of Xeen\fd\n"
+			   "Game Information\n"
+			   "\n"
+			   "Today is \f37%ssday\fd\n"
+			   "\n"
+			   "\t032Time\t072Day\t112Year\n"
+			   "\t032\f37%d:%02d%c\t072%u\t112%u\fd%s";
+	}
+
+	const char *WORLD_GAME_TEXT() {
+		return "World";
+	}
+
+	const char *DARKSIDE_GAME_TEXT() {
+		return "Darkside";
+	}
+
+	const char *CLOUDS_GAME_TEXT() {
+		return "Clouds";
+	}
+
+	const char *SWORDS_GAME_TEXT() {
+		return "Swords";
+	}
+
+	const char **WEEK_DAY_STRINGS() {
+		delete[] _weekDayStrings;
+		_weekDayStrings = new const char *[10] {
+			"Ten", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"
+		};
+		return _weekDayStrings;
+	}
+
+	const char *CHARACTER_DETAILS() {
+		return "\x3l\v041\t196%s\t000\v002%s : %s %s %s"
+			   "\x3r\t053\v028\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3l\t131\f%02u%d\fd\t196\f15%u\fd\x3r"
+			   "\t053\v051\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3l\t131\f%02u%u\fd\t196\f15%u\fd"
+			   "\x3r\t053\v074\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3l\t131\f15%u\fd\t196\f15%u\fd"
+			   "\x3r\t053\v097\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3l\t131\f15%u\fd\t196\f15%u day%s\fd"
+			   "\x3r\t053\v120\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3l\t131\f15%u\fd\t196\f%02u%s\fd"
+			   "\t230%s%s%s%s\fd";
+	}
+
+	const char **DAYS() {
+		delete[] _days;
+		_days = new const char *[3] { "", "s", "" };
+		return _days;
+	}
+
+	const char *PARTY_GOLD() {
+		return "Party Gold";
+	}
+
+	const char *PLUS_14() {
+		return "\f14+";
+	}
+
+	const char *CHARACTER_TEMPLATE() {
+		return "\x1\f00\r\x3l\t029\v018Mgt\t080Acy\t131H.P.\t196Experience"
+			   "\t029\v041Int\t080Lck\t131S.P.\t029\v064Per\t080Age"
+			   "\t131Resis\t196Party Gems\t029\v087End\t080Lvl\t131Skills"
+			   "\t196Party Food\t029\v110Spd\t080AC\t131Awrds\t196Condition\x3"
+			   "c"
+			   "\t290\v025\f37I\fdtem\t290\v057\f37Q"
+			   "\fduick\t290\v089\f37E\fdxch\t290\v121Exit\x3l%s";
+	}
+
+	const char *EXCHANGING_IN_COMBAT() {
+		return "\x3"
+			   "c\v007\t000Exchanging in combat is not allowed!";
+	}
+
+	const char *CURRENT_MAXIMUM_RATING_TEXT() {
+		return "\x2\x3"
+			   "c%s\n"
+			   "Current / Maximum\n"
+			   "\x3r\t054%u\x3l\t058/ %u\n"
+			   "\x3"
+			   "cRating: %s";
+	}
+
+	const char *CURRENT_MAXIMUM_TEXT() {
+		return "\x2\x3"
+			   "c%s\n"
+			   "Current / Maximum\n"
+			   "\x3r\t054%u\x3l\t058/ %u";
+	}
+
+	const char **RATING_TEXT() {
+		delete[] _ratingText;
+		_ratingText = new const char *[24] {
+			"Nonexistant", "Very Poor", "Poor", "Very Low", "Low", "Average", "Good",
+				"Very Good", "High", "Very High", "Great", "Super", "Amazing", "Incredible",
+				"Gigantic", "Fantastic", "Astoundig", "Astonishing", "Monumental", "Tremendous",
+				"Collosal", "Awesome", "Awe Inspiring", "Ultimate"
+		};
+		return _ratingText;
+	}
+
+	const char *AGE_TEXT() {
+		return "\x2\x3"
+			   "c%s\n"
+			   "Current / Natural\n"
+			   "\x3r\t057%u\x3l\t061/ %u\n"
+			   "\x3"
+			   "cBorn: %u / %u\x1";
+	}
+
+	const char *LEVEL_TEXT() {
+		return "\x2\x3"
+			   "c%s\n"
+			   "Current / Maximum\n"
+			   "\x3r\t054%u\x3l\t058/ %u\n"
+			   "\x3"
+			   "c%u Attack%s/Round\x1";
+	}
+
+	const char *RESISTENCES_TEXT() {
+		return "\x2\x3"
+			   "c%s\x3l\n"
+			   "\t020Fire\t100%u\n"
+			   "\t020Cold\t100%u\n"
+			   "\t020Electricity\t100%u\n"
+			   "\t020Poison\t100%u\n"
+			   "\t020Energy\t100%u\n"
+			   "\t020Magic\t100%u";
+	}
+
+	const char *NONE() {
+		return "\n\t020None";
+	}
+
+	const char *EXPERIENCE_TEXT() {
+		return "\x2\x3"
+			   "c%s\x3l\n"
+			   "\t010Current:\t070%u\n"
+			   "\t010Next Level:\t070%s\x1";
+	}
+
+	const char *ELIGIBLE() {
+		return "\f12Eligible\fd";
+	}
+
+	const char *IN_PARTY_IN_BANK() {
+		return "\x2\x3"
+			   "cParty %s\n"
+			   "%u on hand\n"
+			   "%u in bank\x1\x3l";
+	}
+
+	const char *FOOD_TEXT() {
+		return "\x2\x3"
+			   "cParty %s\n"
+			   "%u on hand\n"
+			   "Enough for %u day%s\x3l";
+	}
+
+	const char *EXCHANGE_WITH_WHOM() {
+		return "\t010\v005Exchange with whom?";
+	}
+
+	const char *QUICK_REF_LINE() {
+		return "\v%3d\t007%u)\t027%s\t110%c%c%c\x3r\t160\f%02u%u\fd"
+			   "\x3l\t170\f%02u%d\fd\t208\f%02u%u\fd\t247\f"
+			   "%02u%u\fd\t270\f%02u%c%c%c%c\fd";
+	}
+
+	const char *QUICK_REFERENCE() {
+		return "\r\x3"
+			   "cQuick Reference Chart\v012\x3l"
+			   "\t007#\t027Name\t110Cls\t140Lvl\t176H.P."
+			   "\t212S.P.\t241A.C.\t270Cond"
+			   "%s%s%s%s%s%s%s%s"
+			   "\v110\t064\x3"
+			   "cGold\t144Gems\t224Food\v119"
+			   "\t064\f15%u\t144%u\t224%u day%s\fd";
+	}
+
+	const char *ITEMS_DIALOG_TEXT1() {
+		return "\r\x2\x3"
+			   "c\v021\t017\f37W\fdeap\t051\f37A\fdrmor\t085A"
+			   "\f37c\fdces\t119\f37M\fdisc\t153%s\t187%s\t221%s"
+			   "\t255%s\t289Exit";
+	}
+
+	const char *ITEMS_DIALOG_TEXT2() {
+		return "\r\x2\x3"
+			   "c\v021\t017\f37W\fdeap\t051\f37A\fdrmor\t085A"
+			   "\f37c\fdces\t119\f37M\fdisc\t153\f37%s\t289Exit";
+	}
+
+	const char *ITEMS_DIALOG_LINE1() {
+		return "\x3r\f%02u\t023%2d)\x3l\t028%s\n";
+	}
+
+	const char *ITEMS_DIALOG_LINE2() {
+		return "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%u\n";
+	}
+
+	const char *BTN_BUY() {
+		return "\f37B\fduy";
+	}
+
+	const char *BTN_SELL() {
+		return "\f37S\fdell";
+	}
+
+	const char *BTN_IDENTIFY() {
+		return "\f37I\fddentify";
+	}
+
+	const char *BTN_FIX() {
+		return "\f37F\fdix";
+	}
+
+	const char *BTN_USE() {
+		return "\f37U\fdse";
+	}
+
+	const char *BTN_EQUIP() {
+		return "\f37E\fdquip";
+	}
+
+	const char *BTN_REMOVE() {
+		return "\f37R\fdem";
+	}
+
+	const char *BTN_DISCARD() {
+		return "\f37D\fdisc";
+	}
+
+	const char *BTN_QUEST() {
+		return "\f37Q\fduest";
+	}
+
+	const char *BTN_ENCHANT() {
+		return "E\fdnchant";
+	}
+
+	const char *BTN_RECHARGE() {
+		return "R\fdechrg";
+	}
+
+	const char *BTN_GOLD() {
+		return "G\fdold";
+	}
+
+	const char *ITEM_BROKEN() {
+		return "\f32broken ";
+	}
+
+	const char *ITEM_CURSED() {
+		return "\f09cursed ";
+	}
+
+	const char *ITEM_OF() {
+		return "of ";
+	}
+
+	const char **BONUS_NAMES() {
+		delete[] _bonusNames;
+		_bonusNames = new const char *[7] {
+			"", "Dragon Slayer", "Undead Eater", "Golem Smasher",
+				"Bug Zapper", "Monster Masher", "Beast Bopper"
+		};
+		return _bonusNames;
+	}
+
+	const char **WEAPON_NAMES() {
+		delete[] _weaponNames;
+		_weaponNames = new const char *[41] {
+			nullptr, "long sword ", "short sword ", "broad sword ", "scimitar ",
+				"cutlass ", "sabre ", "club ", "hand axe ", "katana ", "nunchakas ",
+				"wakazashi ", "dagger ", "mace ", "flail ", "cudgel ", "maul ", "spear ",
+				"bardiche ", "glaive ", "halberd ", "pike ", "flamberge ", "trident ",
+				"staff ", "hammer ", "naginata ", "battle axe ", "grand axe ", "great axe ",
+				"short bow ", "long bow ", "crossbow ", "sling ", "Xeen Slayer Sword ",
+				"Elder LongSword ", "Elder Dagger ", "Elder Mace ", "Elder Spear ",
+				"Elder Staff ", "Elder LongBow "
+		};
+		return _weaponNames;
+	}
+
+	const char **ARMOR_NAMES() {
+		delete[] _armorNames;
+		_armorNames = new const char *[14] {
+			nullptr, "robes ", "scale armor ", "ring mail ", "chain mail ",
+				"splint mail ", "plate mail ", "plate armor ", "shield ",
+				"helm ", "boots ", "cloak ", "cape ", "gauntlets "
+		};
+		return _armorNames;
+	}
+
+	const char **ACCESSORY_NAMES() {
+		delete[] _accessoryNames;
+		_accessoryNames = new const char *[11] {
+			nullptr, "ring ", "belt ", "brooch ", "medal ", "charm ", "cameo ",
+				"scarab ", "pendant ", "necklace ", "amulet "
+		};
+		return _accessoryNames;
+	}
+
+	const char **MISC_NAMES() {
+		delete[] _miscNames;
+		_miscNames = new const char *[22] {
+			nullptr, "rod ", "jewel ", "gem ", "box ", "orb ", "horn ", "coin ",
+				"wand ", "whistle ", "potion ", "scroll ", "bogus", "bogus", "bogus",
+				"bogus", "bogus", "bogus", "bogus", "bogus", "bogus", "bogus"
+		};
+		return _miscNames;
+	}
+
+	const char **SPECIAL_NAMES() {
+		delete[] _specialNames;
+		_specialNames = new const char *[74] {
+			nullptr, "light", "awakening", "magic arrows", "first aid", "fists", "energy blasts", "sleeping",
+				"revitalization", "curing", "sparking", "shrapmetal", "insect repellent", "toxic clouds", "elemental protection",
+				"pain", "jumping", "beast control", "clairvoyance", "undead turning", "levitation", "wizard eyes", "blessing",
+				"monster identification", "lightning", "holy bonuses", "power curing", "nature's cures", "beacons",
+				"shielding", "heroism", "hypnotism", "water walking", "frost biting", "monster finding", "fireballs",
+				"cold rays", "antidotes", "acid spraying", "time distortion", "dragon sleep", "vaccination", "teleportation",
+				"death", "free movement", "golem stopping", "poison volleys", "deadly swarms", "shelter", "daily protection",
+				"daily sorcerery", "feasting", "fiery flails", "recharging", "freezing", "town portals", "stone to flesh",
+				"raising the dead", "etherealization", "dancing swords", "moon rays", "mass distortion", "prismatic light",
+				"enchant item", "incinerating", "holy words", "resurrection", "storms", "megavoltage", "infernos",
+				"sun rays", "implosions", "star bursts", "the GODS!"
+		};
+		return _specialNames;
+	}
+
+	const char **ELEMENTAL_NAMES() {
+		delete[] _elementalNames;
+		_elementalNames = new const char *[6] {
+			"Fire", "Elec", "Cold", "Acid/Poison", "Energy", "Magic"
+		};
+		return _elementalNames;
+	}
+
+	const char **ATTRIBUTE_NAMES() {
+		delete[] _attributeNames;
+		_attributeNames = new const char *[10] {
+			"might", "Intellect", "Personality", "Speed", "accuracy", "Luck",
+				"Hit Points", "Spell Points", "Armor Class", "Thievery"
+		};
+		return _attributeNames;
+	}
+
+	const char **EFFECTIVENESS_NAMES() {
+		delete[] _effectivenessNames;
+		_effectivenessNames = new const char *[7] {
+			nullptr, "Dragons", "Undead", "Golems", "Bugs", "Monsters", "Beasts"
+		};
+		return _effectivenessNames;
+	}
+
+	const char **QUEST_ITEM_NAMES() {
+		delete[] _questItemNames;
+		_questItemNames = new const char *[85] {
+			"Deed to New Castle",
+				"Crystal Key to Witch Tower",
+				"Skeleton Key to Darzog's Tower",
+				"Enchanted Key to Tower of High Magic",
+				"Jeweled Amulet of the Northern Sphinx",
+				"Stone of a Thousand Terrors",
+				"Golem Stone of Admittance",
+				"Yak Stone of Opening",
+				"Xeen's Scepter of Temporal Distortion",
+				"Alacorn of Falista",
+				"Elixir of Restoration",
+				"Wand of Faery Magic",
+				"Princess Roxanne's Tiara",
+				"Holy Book of Elvenkind",
+				"Scarab of Imaging",
+				"Crystals of Piezoelectricity",
+				"Scroll of Insight",
+				"Phirna Root",
+				"Orothin's Bone Whistle",
+				"Barok's Magic Pendant",
+				"Ligono's Missing Skull",
+				"Last Flower of Summer",
+				"Last Raindrop of Spring",
+				"Last Snowflake of Winter",
+				"Last Leaf of Autumn",
+				"Ever Hot Lava Rock",
+				"King's Mega Credit",
+				"Excavation Permit",
+				"Cupie Doll",
+				"Might Doll",
+				"Speed Doll",
+				"Endurance Doll",
+				"Accuracy Doll",
+				"Luck Doll",
+				"Widget",
+				"Pass to Castleview",
+				"Pass to Sandcaster",
+				"Pass to Lakeside",
+				"Pass to Necropolis",
+				"Pass to Olympus",
+				"Key to Great Western Tower",
+				"Key to Great Southern Tower",
+				"Key to Great Eastern Tower",
+				"Key to Great Northern Tower",
+				"Key to Ellinger's Tower",
+				"Key to Dragon Tower",
+				"Key to Darkstone Tower",
+				"Key to Temple of Bark",
+				"Key to Dungeon of Lost Souls",
+				"Key to Ancient Pyramid",
+				"Key to Dungeon of Death",
+				"Amulet of the Southern Sphinx",
+				"Dragon Pharoah's Orb",
+				"Cube of Power",
+				"Chime of Opening",
+				"Gold ID Card",
+				"Silver ID Card",
+				"Vulture Repellant",
+				"Bridle",
+				"Enchanted Bridle",
+				"Treasure Map (Goto E1 x1, y11)",
+				"",
+				"Fake Map",
+				"Onyx Necklace",
+				"Dragon Egg",
+				"Tribble",
+				"Golden Pegasus Statuette",
+				"Golden Dragon Statuette",
+				"Golden Griffin Statuette",
+				"Chalice of Protection",
+				"Jewel of Ages",
+				"Songbird of Serenity",
+				"Sandro's Heart",
+				"Ector's Ring",
+				"Vespar's Emerald Handle",
+				"Queen Kalindra's Crown",
+				"Caleb's Magnifying Glass",
+				"Soul Box",
+				"Soul Box with Corak inside",
+				"Ruby Rock",
+				"Emerald Rock",
+				"Sapphire Rock",
+				"Diamond Rock",
+				"Monga Melon",
+				"Energy Disk"
+		};
+		return _questItemNames;
+	}
+
+	const char **QUEST_ITEM_NAMES_SWORDS() {
+		delete[] _questItemNamesSwords;
+		_questItemNamesSwords = new const char *[51] {
+			"Pass to Hart", "Pass to Impery", "Pass to town3", "Pass to town4", "Pass to town5",
+				"Key to Hart Sewers", "Key to Rettig's Pyramid", "Key to the Old Temple",
+				"Key to Canegtut's Pyramid", "Key to Ascihep's Pyramid", "Key to Dragon Tower",
+				"Key to Darkstone Tower", "Key to Temple of Bark", "Key to Dungeon of Lost Souls",
+				"Key to Ancient Pyramid", "Key to Dungeon of Death", "Red Magic Hammer",
+				"Green Magic Hammer", "Golden Magic Wand", "Silver Magic Hammer", "Magic Coin",
+				"Ruby", "Diamond Mineral", "Emerald", "Sapphire", "Treasure Map (Goto E1 x1, y11)",
+				"NOTUSED", "Melon", "Princess Crown", "Emerald Wand", "Druid Carving", "High Sign",
+				"Holy Wheel", "Double Cross", "Sky Hook", "Sacred Cow", "Staff of the Mountain",
+				"Hard Rock", "Soft Rock", "Rock Candy", "Ivy Plant", "Spirit Gem", "Temple of Sun holy lamp oil",
+				"Noams Hammer", "Positive Orb", "Negative Orb", "FireBane Staff", "Diamond Edged Pick",
+				"Monga Melon", "Energy Disk", "Old XEEN Quest Item"
+		};
+		return _questItemNamesSwords;
+	}
+
+	const char *NOT_PROFICIENT() {
+		return "\t000\v007\x3"
+			   "c%ss are not proficient with a %s!";
+	}
+
+	const char *NO_ITEMS_AVAILABLE() {
+		return "\x3"
+			   "c\n"
+			   "\t000No items available.";
+	}
+
+	const char **CATEGORY_NAMES() {
+		delete[] _categoryNames;
+		_categoryNames = new const char *[4] { "Weapons", "Armor", "Accessories", "Miscellaneous" };
+		return _categoryNames;
+	}
+
+	const char *X_FOR_THE_Y() {
+		return "\x1\fd\r%s\v000\t000%s for %s the %s%s\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+	}
+
+	const char *X_FOR_Y() {
+		return "\x1\fd\r\x3l\v000\t000%s for %s\x3r\t000%s\x3l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+	}
+
+	const char *X_FOR_Y_GOLD() {
+		return "\x1\fd\r\x3l\v000\t000%s for %s\t150Gold - %u%s\x3l\v011"
+			   "\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+	}
+
+	const char *FMT_CHARGES() {
+		return "\x3rr\t000Charges\x3l";
+	}
+
+	const char *AVAILABLE_GOLD_COST() {
+		return "\x1\fd\r\x3l\v000\t000Available %s\t150Gold - %u\x3r\t000Cost"
+			   "\x3l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+	}
+
+	const char *CHARGES() {
+		return "Charges";
+	}
+
+	const char *COST() {
+		return "Cost";
+	}
+
+	const char **ITEM_ACTIONS() {
+		delete[] _itemActions;
+		_itemActions = new const char *[7] {
+			"Equip", "Remove", "Use", "Discard", "Enchant", "Recharge", "Gold"
+		};
+		return _itemActions;
+	}
+
+	const char *WHICH_ITEM() {
+		return "\t010\v005%s which item?";
+	}
+
+	const char *WHATS_YOUR_HURRY() {
+		return "\v007What's your hurry?\n"
+			   "Wait till you get out of here!";
+	}
+
+	const char *USE_ITEM_IN_COMBAT() {
+		return "\v007To use an item in Combat, invoke the Use command on your turn!";
+	}
+
+	const char *NO_SPECIAL_ABILITIES() {
+		return "\v005\x3"
+			   "c%s\fdhas no special abilities!";
+	}
+
+	const char *CANT_CAST_WHILE_ENGAGED() {
+		return "\x3"
+			   "c\v007Can't cast %s while engaged!";
+	}
+
+	const char *EQUIPPED_ALL_YOU_CAN() {
+		return "\x3"
+			   "c\v007You have equipped all the %ss you can!";
+	}
+
+	const char *REMOVE_X_TO_EQUIP_Y() {
+		return "\x3"
+			   "c\v007You must remove %sto equip %s\b!";
+	}
+
+	const char *RING() {
+		return "ring";
+	}
+
+	const char *MEDAL() {
+		return "medal";
+	}
+
+	const char *CANNOT_REMOVE_CURSED_ITEM() {
+		return "\x3"
+			   "You cannot remove a cursed item!";
+	}
+
+	const char *CANNOT_DISCARD_CURSED_ITEM() {
+		return "\3x"
+			   "cYou cannot discard a cursed item!";
+	}
+
+	const char *PERMANENTLY_DISCARD() {
+		return "\v000\t000\x3lPermanently discard %s\fd?";
+	}
+
+	const char *BACKPACK_IS_FULL() {
+		return "\v005\x3"
+			   "c\fd%s's backpack is full.";
+	}
+
+	const char **CATEGORY_BACKPACK_IS_FULL() {
+		delete[] _categoryBackpackIsFull;
+		_categoryBackpackIsFull = new const char *[4] {
+			"\v010\t000\x3"
+			"c%s's weapons backpack is full.",
+				"\v010\t000\x3"
+				"c%s's armor backpack is full.",
+				"\v010\t000\x3"
+				"c%s's accessories backpack is full.",
+				"\v010\t000\x3"
+				"c%s's miscellaneous backpack is full."
+		};
+		return _categoryBackpackIsFull;
+	}
+
+	const char *BUY_X_FOR_Y_GOLD() {
+		return "\x3l\v000\t000\fdBuy %s\fd for %u gold?";
+	}
+
+	const char *SELL_X_FOR_Y_GOLD() {
+		return "\x3l\v000\t000\fdSell %s\fd for %u gold?";
+	}
+
+	const char **SELL_X_FOR_Y_GOLD_ENDINGS() {
+		delete[] _sellXForYGoldEndings;
+		_sellXForYGoldEndings = new const char *[2] { "", "" };
+		return _sellXForYGoldEndings;
+	}
+
+	const char *NO_NEED_OF_THIS() {
+		return "\v005\x3"
+			   "c\fdWe have no need of this %s\f!";
+	}
+
+	const char *NOT_RECHARGABLE() {
+		return "\v012\x3"
+			   "c\fdNot Rechargeable.  %s";
+	}
+
+	const char *NOT_ENCHANTABLE() {
+		return "\v012\t000\x3"
+			   "cNot Enchantable.  %s";
+	}
+
+	const char *SPELL_FAILED() {
+		return "Spell Failed!";
+	}
+
+	const char *ITEM_NOT_BROKEN() {
+		return "\fdThat item is not broken!";
+	}
+
+	const char **FIX_IDENTIFY() {
+		delete[] _fixIdentify;
+		_fixIdentify = new const char *[2] { "Fix", "Identify" };
+		return _fixIdentify;
+	}
+
+	const char *FIX_IDENTIFY_GOLD() {
+		return "\x3l\v000\t000%s %s\fd for %u gold?";
+	}
+
+	const char *IDENTIFY_ITEM_MSG() {
+		return "\fd\v000\t000\x3"
+			   "cIdentify Item\x3l\n"
+			   "\n"
+			   "\v012%s\fd\n"
+			   "\n"
+			   "%s";
+	}
+
+	const char *ITEM_DETAILS() {
+		return "Proficient Classes\t132:\t140%s\n"
+			   "to Hit Modifier\t132:\t140%s\n"
+			   "Physical Damage\t132:\t140%s\n"
+			   "Elemental Damage\t132:\t140%s\n"
+			   "Elemental Resistance\t132:\t140%s\n"
+			   "Armor Class Bonus\t132:\t140%s\n"
+			   "Attribute Bonus\t132:\t140%s\n"
+			   "Special Power\t132:\t140%s";
+	}
+
+	const char *ALL() {
+		return "All";
+	}
+
+	const char *FIELD_NONE() {
+		return "None";
+	}
+
+	const char *DAMAGE_X_TO_Y() {
+		return "%d to %d";
+	}
+
+	const char *ELEMENTAL_XY_DAMAGE() {
+		return "%+d %s Damage";
+	}
+
+	const char *ATTR_XY_BONUS() {
+		return "%+d %s";
+	}
+
+	const char *EFFECTIVE_AGAINST() {
+		return "x3 vs %s";
+	}
+
+	const char *QUESTS_DIALOG_TEXT() {
+		return "\r\x2\x3"
+			   "c\v021\t017\f37I\fdtems\t085\f37Q\fduests\t153"
+			   "\f37A\fduto Notes	221\f37U\fdp\t255\f37D\fdown"
+			   "\t289Exit";
+	}
+
+	const char *CLOUDS_OF_XEEN_LINE() {
+		return "\b \b*-- \f04Clouds of Xeen\fd --";
+	}
+
+	const char *DARKSIDE_OF_XEEN_LINE() {
+		return "\b \b*-- \f04Darkside of Xeen\fd --";
+	}
+
+	const char *SWORDS_OF_XEEN_LINE() {
+		return "\b \b*-- \f04Swords of Xeen\fd --";
+	}
+
+	const char *NO_QUEST_ITEMS() {
+		return "\r\x3"
+			   "c\v000	000Quest Items\x3l\x2\n"
+			   "\n"
+			   "\x3"
+			   "cNo Quest Items";
+	}
+
+	const char *NO_CURRENT_QUESTS() {
+		return "\x3"
+			   "c\v000\t000\n"
+			   "\n"
+			   "No Current Quests";
+	}
+
+	const char *NO_AUTO_NOTES() {
+		return "\x3"
+			   "cNo Auto Notes";
+	}
+
+	const char *QUEST_ITEMS_DATA() {
+		return "\r\x1\fd\x3"
+			   "c\v000\t000Quest Items\x3l\x2\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"
+			   "\f04 * \fd%s";
+	}
+
+	const char *CURRENT_QUESTS_DATA() {
+		return "\r\x1\fd\x3"
+			   "c\t000\v000Current Quests\x3l\x2\n"
+			   "%s\n"
+			   "\n"
+			   "%s\n"
+			   "\n"
+			   "%s";
+	}
+
+	const char *AUTO_NOTES_DATA() {
+		return "\r\x1\fd\x3"
+			   "c\t000\v000Auto Notes\x3l\x2\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l\n"
+			   "%s\x3l";
+	}
+
+	const char *REST_COMPLETE() {
+		return "\v000\t0008 hours pass.  Rest complete.\n"
+			   "%s\n"
+			   "%d food consumed.";
+	}
+
+	const char *PARTY_IS_STARVING() {
+		return "\f07The Party is Starving!\fd";
+	}
+
+	const char *HIT_SPELL_POINTS_RESTORED() {
+		return "Hit Pts and Spell Pts restored.";
+	}
+
+	const char *TOO_DANGEROUS_TO_REST() {
+		return "Too dangerous to rest here!";
+	}
+
+	const char *SOME_CHARS_MAY_DIE() {
+		return "Some Chars may die. Rest anyway?";
+	}
+
+	const char *DISMISS_WHOM() {
+		return "\t010\v005Dismiss whom?";
+	}
+
+	const char *CANT_DISMISS_LAST_CHAR() {
+		return "You cannot dismiss your last character!";
+	}
+
+	const char *DELETE_CHAR_WITH_ELDER_WEAPON() {
+		return "\v000\t000This character has an Elder Weapon and cannot be deleted!";
+	}
+
+	const char **REMOVE_DELETE() {
+		delete[] _removeDelete;
+		_removeDelete = new const char *[2] { "Remove", "Delete" };
+		return _removeDelete;
+	}
+
+	const char *REMOVE_OR_DELETE_WHICH() {
+		return "\x3l\t010\v005%s which character?";
+	}
+
+	const char *YOUR_PARTY_IS_FULL() {
+		return "\v007Your party is full!";
+	}
+
+	const char *HAS_SLAYER_SWORD() {
+		return "\v000\t000This character has the Xeen Slayer Sword and cannot be deleted!";
+	}
+
+	const char *SURE_TO_DELETE_CHAR() {
+		return "Are you sure you want to delete %s the %s?";
+	}
+
+	const char *CREATE_CHAR_DETAILS() {
+		return "\f04\x3"
+			   "c\x2\t144\v119\f37R\f04oll\t144\v149\f37C\f04reate"
+			   "\t144\v179\f37ESC\f04\x3l\x1\t195\v021\f37M\f04gt"
+			   "\t195\v045\f37I\f04nt\t195\v069\f37P\f04er\t195\v093\f37E\f04nd"
+			   "\t195\v116\f37S\f04pd\t195\v140\f37A\f04cy\t195\v164\f37L\f04ck%s";
+	}
+
+	const char *NEW_CHAR_STATS() {
+		return "\f04\x3l\t022\v148Race\t055: %s\n"
+			   "\t022Sex\t055: %s\n"
+			   "\t022Class\t055:\n"
+			   "\x3r\t215\v031%d\t215\v055%d\t215\v079%d\t215\v103%d\t215\v127%d"
+			   "\t215\v151%d\t215\v175%d\x3l\t242\v020\f%.2dKnight\t242\v031\f%.2d"
+			   "Paladin\t242\v042\f%.2dArcher\t242\v053\f%.2dCleric\t242\v064\f%.2d"
+			   "Sorcerer\t242\v075\f%.2dRobber\t242\v086\f%.2dNinja\t242\v097\f%.2d"
+			   "Barbarian\t242\v108\f%.2dDruid\t242\v119\f%.2dRanger\f04\x3"
+			   "c"
+			   "\t265\v142Skills\x3l\t223\v155%s\t223\v170%s%s";
+	}
+
+	const char *NAME_FOR_NEW_CHARACTER() {
+		return "\x3"
+			   "cEnter a Name for this Character\n\n";
+	}
+
+	const char *SELECT_CLASS_BEFORE_SAVING() {
+		return "\v006\x3"
+			   "cSelect a Class before saving.\x3l";
+	}
+
+	const char *EXCHANGE_ATTR_WITH() {
+		return "Exchange %s with...";
+	}
+
+	const char *COMBAT_DETAILS() {
+		return "\r\f00\x3"
+			   "c\v000\t000\x2"
+			   "Combat%s%s%s\x1";
+	}
+
+	const char *NOT_ENOUGH_TO_CAST() {
+		return "\x3"
+			   "c\v010Not enough %s to Cast %s";
+	}
+
+	const char **SPELL_CAST_COMPONENTS() {
+		delete[] _spellCastComponents;
+		_spellCastComponents = new const char *[2] { "Spell Points", "Gems" };
+		return _spellCastComponents;
+	}
+
+	const char *CAST_SPELL_DETAILS() {
+		return "\r\x2\x3"
+			   "c\v122\t013\f37C\fdast\t040\f37N\fdew"
+			   "\t067ESC\x1\t000\v000\x3"
+			   "cCast Spell\n"
+			   "\n"
+			   "%s\x3l\n"
+			   "\n"
+			   "Spell Ready:\x3"
+			   "c\n"
+			   "\n"
+			   "\f09%s\fd\x2\x3l\n"
+			   "\v082Cost\x3r\t000%u/%u\x3l\n"
+			   "Cur SP\x3r\t000%u\x1";
+	}
+
+	const char *PARTY_FOUND() {
+		return "\x3"
+			   "cThe Party Found:\n"
+			   "\n"
+			   "\x3r\t000%u Gold\n"
+			   "%u Gems";
+	}
+
+	const char *BACKPACKS_FULL_PRESS_KEY() {
+		return "\v007\f12Warning!  BackPacks Full!\fd\n"
+			   "Press a Key";
+	}
+
+	const char *HIT_A_KEY() {
+		return "\x3l\v120\t000\x4"
+			   "077\x3"
+			   "c\f37Hit a key\fd";
+	}
+
+	const char *GIVE_TREASURE_FORMATTING() {
+		return "\x3l\v060\t000\x4"
+			   "077\n"
+			   "\x4"
+			   "077\n"
+			   "\x4"
+			   "077\n"
+			   "\x4"
+			   "077\n"
+			   "\x4"
+			   "077\n"
+			   "\x4"
+			   "077";
+	}
+
+	const char *X_FOUND_Y() {
+		return "\v060\t000\x3"
+			   "c%s found: %s";
+	}
+
+	const char *ON_WHO() {
+		return "\x3"
+			   "c\v009On Who?";
+	}
+
+	const char *WHICH_ELEMENT1() {
+		return "\r\x3"
+			   "c\x1Which Element?\x2\v034\t014\f15F\fdire\t044"
+			   "\f15E\fdlec\t074\f15C\fdold\t104\f15A\fdcid\x1";
+	}
+
+	const char *WHICH_ELEMENT2() {
+		return "\r\x3"
+			   "cWhich Element?\x2\v034\t014\f15F\fdire\t044"
+			   "\f15E\fdlec\t074\f15C\fdold\t104\f15A\fdcid\x1";
+	}
+
+	const char *DETECT_MONSTERS() {
+		return "\x3"
+			   "cDetect Monsters";
+	}
+
+	const char *LLOYDS_BEACON() {
+		return "\r\x3"
+			   "c\v000\t000\x1Lloyd's Beacon\n"
+			   "\n"
+			   "Last Location\n"
+			   "\n"
+			   "%s\x3l\n"
+			   "x = %d\x3r\t000y = %d\x3"
+			   "c\x2\v122\t021\f15S\fdet\t060\f15R\fdeturn\x1";
+	}
+
+	const char *HOW_MANY_SQUARES() {
+		return "\x3"
+			   "cTeleport\nHow many squares %s (1-9)\n";
+	}
+
+	const char *TOWN_PORTAL() {
+		return "\x3"
+			   "cTown Portal\x3l\n"
+			   "\n"
+			   "\t0101. %s\n"
+			   "\t0102. %s\n"
+			   "\t0103. %s\n"
+			   "\t0104. %s\n"
+			   "\t0105. %s\x3"
+			   "c\n"
+			   "\n"
+			   "To which Town (1-5)\n"
+			   "\n";
+	}
+
+	const char *TOWN_PORTAL_SWORDS() {
+		return "\x3"
+			   "cTown Portal\x3l\n"
+			   "\n"
+			   "\t0101. %s\n"
+			   "\t0102. %s\n"
+			   "\t0103. %s\x3"
+			   "c\n"
+			   "\n"
+			   "To which Town (1-3)\n"
+			   "\n";
+	}
+
+	const char *MONSTER_DETAILS() {
+		return "\x3l\n"
+			   "%s\x3"
+			   "c\t100%s\t140%u\t180%u\x3r\t000%s";
+	}
+
+	const char **MONSTER_SPECIAL_ATTACKS() {
+		delete[] _monsterSpecialAttacks;
+		_monsterSpecialAttacks = new const char *[23] {
+			"None", "Magic", "Fire", "Elec", "Cold", "Poison", "Energy", "Disease",
+				"Insane", "Asleep", "CurseItm", "InLove", "DrnSPts", "Curse", "Paralys",
+				"Uncons", "Confuse", "BrkWpn", "Weak", "Erad", "Age+5", "Dead", "Stone"
+		};
+		return _monsterSpecialAttacks;
+	}
+
+	const char *IDENTIFY_MONSTERS() {
+		return "Name\x3"
+			   "c\t100HP\t140AC\t177#Atks\x3r\t000Special%s%s%s";
+	}
+
+	const char *MOONS_NOT_ALIGNED() {
+		return "\x3"
+			   "c\v012\t000The moons are not aligned. Passage to the %s is unavailable";
+	}
+
+	const char *AWARDS_FOR() {
+		return "\r\x1\fd\x3"
+			   "c\v000\t000Awards for %s the %s\x3l\x2\n"
+			   "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\x1";
+	}
+
+	const char *AWARDS_TEXT() {
+		return "\r\x2\x3"
+			   "c\v021\t221\f37U\fdp\t255\f37D\fdown\t289Exit";
+	}
+
+	const char *NO_AWARDS() {
+		return "\x3"
+			   "cNo Awards";
+	}
+
+	const char *WARZONE_BATTLE_MASTER() {
+		return "The Warzone\n\t125Battle Master";
+	}
+
+	const char *WARZONE_MAXED() {
+		return "What!  You again?  Go pick on someone your own size!";
+	}
+
+	const char *WARZONE_LEVEL() {
+		return "What level of monsters? (1-10)\n";
+	}
+
+	const char *WARZONE_HOW_MANY() {
+		return "How many monsters? (1-20)\n";
+	}
+
+	const char *PICKS_THE_LOCK() {
+		return "\x3"
+			   "c\v010%s picks the lock!\nPress any key.";
+	}
+
+	const char *UNABLE_TO_PICK_LOCK() {
+		return "\x3"
+			   "c\v010%s was unable to pick the lock!\nPress any key.";
+	}
+
+	const char *CONTROL_PANEL_TEXT() {
+		return "\x1\f00\x3"
+			   "c\v000\t000Control Panel\x3r"
+			   "\v022\t045\f06L\fdoad:\t124\f06E\fdfx:"
+			   "\v041\t045\f06S\fdave:\t124\f06M\fdusic:"
+			   "\v060\t045\f06Q\fduit:"
+			   "\v080\t084Mr \f06W\fdizard:%s\t000\x1";
+	}
+
+	const char *CONTROL_PANEL_BUTTONS() {
+		return "\x3"
+			   "c\f11"
+			   "\v022\t062load\t141%s"
+			   "\v041\t062save\t141%s"
+			   "\v060\t062exit"
+			   "\v079\t102Help\fd";
+	}
+
+	const char *ON() {
+		return "\f15on\f11";
+	}
+
+	const char *OFF() {
+		return "\f32off\f11";
+	}
+
+	const char *CONFIRM_QUIT() {
+		return "Are you sure you want to quit?";
+	}
+
+	const char *MR_WIZARD() {
+		return "Are you sure you want Mr.Wizard's Help ?";
+	}
+
+	const char *NO_LOADING_IN_COMBAT() {
+		return "No Loading Allowed in Combat!";
+	}
+
+	const char *NO_SAVING_IN_COMBAT() {
+		return "No Saving Allowed in Combat!";
+	}
+
+	const char *QUICK_FIGHT_TEXT() {
+		return "\r\fd\x3"
+			   "c\v000\t000QuickFight Options\n\n"
+			   "%s\x3l\n\n"
+			   "Current\x3r\n"
+			   "\t000%s\x2\x3"
+			   "c\v122\t021\f37N\f04ext\t060Exit\x1";
+	}
+
+	const char **QUICK_FIGHT_OPTIONS() {
+		delete[] _quickFightOptions;
+		_quickFightOptions = new const char *[4] { "Attack", "Cast", "Block", "Run" };
+		return _quickFightOptions;
+	}
+
+	const char **WORLD_END_TEXT() {
+		delete[] _worldEndText;
+		_worldEndText = new const char *[9] {
+			"\n\n\n\n\n\n\n"
+			"Congratulations Adventurers!\n\n"
+			"Let the unification ceremony begin!",
+				"And so the call went out to the people throughout the lands of Xeen"
+				" that the prophecy was nearing completion.",
+				"They came in great numbers to witness the momentous occasion.",
+				"\v026The Dragon Pharoah presided over the ceremony.",
+				"\v026Queen Kalindra presented the Cube of Power.",
+				"\v026Prince Roland presented the Xeen Sceptre.",
+				"\v026Together, they placed the Cube of Power...",
+				"\v026and the Sceptre, onto the Altar of Joining.",
+				"With the prophecy complete, the two sides of Xeen were united as one",
+		};
+		return _worldEndText;
+	}
+
+	const char *WORLD_CONGRATULATIONS() {
+		return "\x3"
+			   "cCongratulations\n\n"
+			   "Your Final Score is:\n\n"
+			   "%010lu\n"
+			   "\x3l\n"
+			   "Please send this score to the Ancient's Headquarters where "
+			   "you'll be added to the Hall of Legends!\n\n"
+			   "Ancient's Headquarters\n"
+			   "New World Computing, Inc.\n"
+			   "P.O. Box 4302\n"
+			   "Hollywood, CA 90078";
+	}
+
+	const char *WORLD_CONGRATULATIONS2() {
+		return "\n\n\n\n\n\n"
+			   "But wait... there's more!\n"
+			   "\n\n"
+			   "Include the message\n"
+			   "\"%s\"\n"
+			   "with your final score and receive a special bonus.";
+	}
+
+	const char *CLOUDS_CONGRATULATIONS1() {
+		return "\f23\x3l"
+			   "\v000\t000Please send this score to the Ancient's Headquarters "
+			   "where you'll be added to the Hall of Legends!\f33\x3"
+			   "c"
+			   "\v070\t000Press a Key";
+	}
+
+	const char *CLOUDS_CONGRATULATIONS2() {
+		return "\f23\x3l"
+			   "\v000\t000Ancient's Headquarters\n"
+			   "New World Computing, Inc.\n"
+			   "P.O. Box 4302\n"
+			   "Hollywood, CA 90078-4302\f33\x3"
+			   "c"
+			   "\v070\t000Press a Key";
+	}
+
+	const char **GOOBER() {
+		delete[] _goober;
+		_goober = new const char *[3] {
+			"", "I am a Goober!", "I am a Super Goober!"
+		};
+		return _goober;
+	}
+
+	const char *DIFFICULTY_TEXT() {
+		return "\v000\t000\x3"
+			   "cSelect Game Preference";
+	}
+
+	const char *SAVE_OFF_LIMITS() {
+		return "\x3"
+			   "c\v002\t000The Gods of Game Restoration deem this area off limits!\n"
+			   "Sorry, no saving in this maze.";
+	}
+
+	const char *CLOUDS_INTRO1() {
+		return "\f00\v082\t040\x3"
+			   "cKing Burlock\v190\t040Peasants\v082\t247"
+			   "Lord Xeen\v190\t258Xeen's Pet\v179\t150Crodo";
+	}
+
+	const char *DARKSIDE_ENDING1() {
+		return "\n\x3"
+			   "cCongratulations\n"
+			   "\n"
+			   "Your Final Score is:\n"
+			   "\n"
+			   "%010lu\n"
+			   "\x3"
+			   "l\n"
+			   "Please send this score to the Ancient's Headquarters "
+			   "where you'll be added to the Hall of Legends!\n"
+			   "\n"
+			   "Ancient's Headquarters\n"
+			   "New World Computing, Inc.\n"
+			   "P.O. Box 4302\n"
+			   "Hollywood, CA 90078";
+	}
+
+	const char *DARKSIDE_ENDING2() {
+		return "\n"
+			   "Adventurers,\n"
+			   "\n"
+			   "I will save your game in Castleview.\n"
+			   "\n"
+			   "The World of Xeen still needs you!\n"
+			   "\n"
+			   "Load your game afterwards and come visit me in the "
+			   "Great Pyramid for further instructions";
+	}
+
+	const char *PHAROAH_ENDING_TEXT1() {
+		return "\fd\v001\t001%s\x3"
+			   "c\t000\v180Press a Key!\x3"
+			   "l";
+	}
+
+	const char *PHAROAH_ENDING_TEXT2() {
+		return "\f04\v000\t000%s\x3"
+			   "c\t000\v180Press a Key!\x3"
+			   "l\fd";
+	}
+};
diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
new file mode 100644
index 0000000000..9343ad33e3
--- /dev/null
+++ b/devtools/create_xeen/ru_constants.h
@@ -0,0 +1,3265 @@
+/* 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.
+ *
+ */
+
+#pragma once
+
+#include "constants.h"
+
+class RU : public LangConstants {
+public:
+	/*
+	"\v012\t000\x3"
+	"c\f35Èäåÿ è ðóêîâîäñòâî ïðîåêòîì:\n"
+	"\f17Äæîí Âàí Êàíåãåì\x3"
+	"l\n"
+	"\n"
+	"\t025\f35Ïðîãðàììèñòû:\n"
+	"\t035\f17Ìàðê Êîëäóýëë\n"
+	"\t035Äåéâ Õýòýóýé\n"
+	"\n"
+	"\t025\f35Àóäèîñèñòåìà è çâóê:\n"
+	"\t035\f17Òîää Õåíäðèêñ\n"
+	"\n"
+	"\t025\f35Ìóçûêà è ðå÷ü:\n"
+	"\t035\f17Òèì Òàëëè\n"
+	"\n"
+	"\t025\f35Ñöåíàðèé:\n"
+	"\t035\f17Ïîë Ðàòíåð\n"
+	"\t035Äåááè ̸ðôè\n"
+	"\t035Äæîí Âàí Êàíåãåì\v012\n"
+	"\n"
+	"\n"
+	"\t180\f35Õóäîæíèêè:\n"
+	"\t190\f17Ëóè Äæîíñîí\n"
+	"\t190Äæîíàòàí Ï. Ãâèí\n"
+	"\t190Áîíèòà Ëîíã-Õåìñàò\n"
+	"\t190Äæóëèÿ Óëàíî\n"
+	"\t190Ðèêàðäî Áàððåðà\n"
+	"\n"
+	"\t180\f35Òåñòåðû:\n"
+	"\t190\f17Áåíäæàìèí Áåíò\n"
+	"\t190Ìàðèî Ýñêàìèëëà\n"
+	"\t190Ðè÷àðä Ýñïè\n"
+	"\t190Ñêîòò Ìàêäýíèåë\n"
+	"\t190Êëåéòîí Ðåòçåð\n"
+	"\t190Ìàéêë Ñóàðåñ\x3"
+	"c";
+	*/
+	const char *CLOUDS_CREDITS() {
+		return "\v012\t000\x3"
+			   "c\f35\x88\xA4\xA5\xEF \xA8 \xE0\xE3\xAA\xAE\xA2\xAE\xA4\xE1\xE2\xA2\xAE \xAF\xE0\xAE\xA5\xAA\xE2\xAE\xAC:\n"
+			   "\f17\x84\xA6\xAE\xAD \x82\xA0\xAD \x8A\xA0\xAD\xA5\xA3\xA5\xAC\x3"
+			   "l\n"
+			   "\n"
+			   "\t025\f35\x8F\xE0\xAE\xA3\xE0\xA0\xAC\xAC\xA8\xE1\xE2\xEB:\n"
+			   "\t035\f17\x8C\xA0\xE0\xAA \x8A\xAE\xAB\xA4\xE3\xED\xAB\xAB\n"
+			   "\t035\x84\xA5\xA9\xA2 \x95\xED\xE2\xED\xE3\xED\xA9\n"
+			   "\n"
+			   "\t025\f35\x80\xE3\xA4\xA8\xAE\xE1\xA8\xE1\xE2\xA5\xAC\xA0 \xA8 \xA7\xA2\xE3\xAA:\n"
+			   "\t035\f17\x92\xAE\xA4\xA4 \x95\xA5\xAD\xA4\xE0\xA8\xAA\xE1\n"
+			   "\n"
+			   "\t025\f35\x8C\xE3\xA7\xEB\xAA\xA0 \xA8 \xE0\xA5\xE7\xEC:\n"
+			   "\t035\f17\x92\xA8\xAC \x92\xA0\xAB\xAB\xA8\n"
+			   "\n"
+			   "\t025\f35\x91\xE6\xA5\xAD\xA0\xE0\xA8\xA9:\n"
+			   "\t035\f17\x8F\xAE\xAB \x90\xA0\xE2\xAD\xA5\xE0\n"
+			   "\t035\x84\xA5\xA1\xA1\xA8 \x8C\xF1\xE0\xE4\xA8\n"
+			   "\t035\x84\xA6\xAE\xAD \x82\xA0\xAD \x8A\xA0\xAD\xA5\xA3\xA5\xAC\v012\n"
+			   "\n"
+			   "\n"
+			   "\t180\f35\x95\xE3\xA4\xAE\xA6\xAD\xA8\xAA\xA8:\n"
+			   "\t190\f17\x8B\xE3\xA8 \x84\xA6\xAE\xAD\xE1\xAE\xAD\n"
+			   "\t190\x84\xA6\xAE\xAD\xA0\xE2\xA0\xAD \x8F. \x83\xA2\xA8\xAD\n"
+			   "\t190\x81\xAE\xAD\xA8\xE2\xA0 \x8B\xAE\xAD\xA3-\x95\xA5\xAC\xE1\xA0\xE2\n"
+			   "\t190\x84\xA6\xE3\xAB\xA8\xEF \x93\xAB\xA0\xAD\xAE\n"
+			   "\t190\x90\xA8\xAA\xA0\xE0\xA4\xAE \x81\xA0\xE0\xE0\xA5\xE0\xA0\n"
+			   "\n"
+			   "\t180\f35\x92\xA5\xE1\xE2\xA5\xE0\xEB:\n"
+			   "\t190\f17\x81\xA5\xAD\xA4\xA6\xA0\xAC\xA8\xAD \x81\xA5\xAD\xE2\n"
+			   "\t190\x8C\xA0\xE0\xA8\xAE \x9D\xE1\xAA\xA0\xAC\xA8\xAB\xAB\xA0\n"
+			   "\t190\x90\xA8\xE7\xA0\xE0\xA4 \x9D\xE1\xAF\xA8\n"
+			   "\t190\x91\xAA\xAE\xE2\xE2 \x8C\xA0\xAA\xA4\xED\xAD\xA8\xA5\xAB\n"
+			   "\t190\x8A\xAB\xA5\xA9\xE2\xAE\xAD \x90\xA5\xE2\xA7\xA5\xE0\n"
+			   "\t190\x8C\xA0\xA9\xAA\xAB \x91\xE3\xA0\xE0\xA5\xE1\x3"
+			   "c";
+	}
+
+	const char *DARK_SIDE_CREDITS() {
+		return "\v012\t000\x3"
+			   "c\f35Designed and Directed By:\n"
+			   "\f17Jon Van Caneghem\x3l\n"
+			   "\n"
+			   "\t025\f35Programming:\n"
+			   "\t035\f17Mark Caldwell\n"
+			   "\t035Dave Hathaway\n"
+			   "\n"
+			   "\t025\f35Sound System & FX:\n"
+			   "\t035\f17Mike Heilemann\n"
+			   "\n"
+			   "\t025\f35Music & Speech:\n"
+			   "\t035\f17Tim Tully\n"
+			   "\n"
+			   "\t025\f35Writing:\n"
+			   "\t035\f17Paul Rattner\n"
+			   "\t035Debbie Van Caneghem\n"
+			   "\t035Jon Van Caneghem\v012\n"
+			   "\n"
+			   "\n"
+			   "\t180\f35Graphics:\n"
+			   "\t190\f17Jonathan P. Gwyn\n"
+			   "\t190Bonita Long-Hemsath\n"
+			   "\t190Julia Ulano\n"
+			   "\t190Ricardo Barrera\n"
+			   "\n"
+			   "\t180\f35Testing:\n"
+			   "\t190\f17Benjamin Bent\n"
+			   "\t190Christian Dailey\n"
+			   "\t190Mario Escamilla\n"
+			   "\t190Marco Hunter\n"
+			   "\t190Robert J. Lupo\n"
+			   "\t190Clayton Retzer\n"
+			   "\t190David Vela\x3"
+			   "c";
+	}
+
+	const char *SWORDS_CREDITS1() {
+		return "\v012\x3"
+			   "c\f35Published By New World Computing, Inc.\f17\n"
+			   "Developed By CATware, Inc.\x3l\n"
+			   "\f01Design and Direction\t180Series Created by\n"
+			   "\t020Bill Fawcett\t190John Van Caneghem\n"
+			   "\n"
+			   "\t010Story Contributions\t180Producer & Manual\n"
+			   "\t020Ellen Guon\t190Dean Rettig\n"
+			   "\n"
+			   "\t010Programming & Ideas\t180Original Programming\n"
+			   "\t020David Potter\t190Mark Caldwell\n"
+			   "\t020Rod Retterath\t190Dave Hathaway\n"
+			   "\n"
+			   "\t010Manual Illustrations\t180Graphic Artists\n"
+			   "\t020Todd Cameron Hamilton\t190Jonathan P. Gwyn\n"
+			   "\t020James Clouse\t190Bonnie Long-Hemsath\n"
+			   "\t190Julia Ulano\n"
+			   "\t190Ricardo Barrera\n";
+	}
+
+	const char *SWORDS_CREDITS2() {
+		return "\f05\v012\t000\x3l\n"
+			   "\t100Sound Programming\n"
+			   "\t110Todd Hendrix\n"
+			   "\n"
+			   "\t100Music\n"
+			   "\t110Tim Tully\n"
+			   "\t110Quality Assurance Manager\n"
+			   "\t110Peter Ryu\n"
+			   "\t100Testers\n"
+			   "\t110Walter Johnson\n"
+			   "\t110Bryan Farina\n"
+			   "\t110David Baton\n"
+			   "\t110Jack Nalls\n";
+	}
+
+	/*
+	"\r\x1\x3"
+	"c\fdÌå÷ è Ìàãèÿ\n"
+	"%s Êñèíà\x2\n"
+	"\v%.3dCopyright (c) %d NWC, Inc.\n"
+	"All Rights Reserved\x1";
+	*/
+	const char *OPTIONS_MENU() {
+		return "\r\x1\x3"
+			   "c\fd\x8C\xA5\xE7 \xA8 \x8C\xA0\xA3\xA8\xEF\n"
+			   "%s \x8A\xE1\xA8\xAD\xA0\x2\n"
+			   "\v%.3dCopyright (c) %d NWC, Inc.\n"
+			   "All Rights Reserved\x1";
+	}
+	/*
+	"Îáëàêà", "Darkside", "World"
+	*/
+	const char **GAME_NAMES() {
+		delete[] _gameNames;
+		_gameNames = new const char *[3] { "\x8E\xA1\xAB\xA0\xAA\xA0", "Darkside", "World" };
+		return _gameNames;
+	}
+
+	/*
+	"\v012Îòðÿä íóæäàåòñÿ â îòäûõå!"
+	*/
+	const char *THE_PARTY_NEEDS_REST() {
+		return "\v012\x8E\xE2\xE0\xEF\xA4 \xAD\xE3\xA6\xA4\xA0\xA5\xE2\xE1\xEF \xA2 \xAE\xE2\xA4\xEB\xE5\xA5!";
+	}
+
+	const char *WHO_WILL() {
+		return "\x3"
+			   "c\v000\t000%s\n\n%s?\n\v055F1 - F%d";
+	}
+
+	/*
+	"\x3""cÑêîëüêî\n\n"
+	*/
+	const char *HOW_MUCH() {
+		return "\x3"
+			   "c\x91\xAA\xAE\xAB\xEC\xAA\xAE\n\n";
+	}
+
+	const char *WHATS_THE_PASSWORD() {
+		return "\x3"
+			   "cWhat's the Password?\n"
+			   "\n"
+			   "Please turn to page %u, go to\n"
+			   "line %u, and type in word %u.\v067\t000Spaces are not counted as words or lines.  "
+			   "Hyphenated words are treated as one word.  Any line that has any text is considered a line."
+			   "\x3"
+			   "c\v040\t000\n";
+	}
+
+	const char *PASSWORD_INCORRECT() {
+		return "\x3"
+			   "c\v040\n"
+			   "\f32Incorrect!\fd";
+	}
+
+	/*
+	"\v007%s íå â ñîñòîÿíèè ÷òî-ëèáî ñäåëàòü!"
+	*/
+	const char *IN_NO_CONDITION() {
+		return "\v007%s \xAD\xA5 \xA2 \xE1\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA8 \xE7\xE2\xAE-\xAB\xA8\xA1\xAE \xE1\xA4\xA5\xAB\xA0\xE2\xEC!";
+	}
+
+	/*
+	"\x3""c\v010Çäåñü íè÷åãî íåò."
+	*/
+	const char *NOTHING_HERE() {
+		return "\x3"
+			   "c\v010\x87\xA4\xA5\xE1\xEC \xAD\xA8\xE7\xA5\xA3\xAE \xAD\xA5\xE2.";
+	}
+
+	/*
+	"Êòî îáûùåò",
+	"Êòî îòêðîåò",
+	"Êòî âûïüåò",
+	"Êòî áóäåò êîïàòü",
+	"Êòî ïîòðîãàåò",
+	"Êòî ïðî÷ò¸ò",
+	"Êîãî íàó÷èòü",
+	"Êòî âîçüì¸ò",
+	"Êòî óäàðèò",
+	"Êòî óêðàä¸ò",
+	"Êòî äàñò âçÿòêó",
+	"Êòî çàïëàòèò",
+	"Êòî ïðèñÿäåò",
+	"Êòî ïîïðîáóåò",
+	"Êòî åãî ïîâåðí¸ò",
+	"Êòî èñêóïí¸òñÿ",
+	"Êòî åãî óíè÷òîæèò",
+	"Êòî âûäåðíåò",
+	"Êòî ñïóñòèòñÿ",
+	"Êòî áðîñèò ìîíåòêó",
+	"pray",
+	"Êòî ñòàíåò ÷ëåíîì",
+	"act",
+	"Êòî õî÷åò ñûãðàòü",
+	"Êòî íàæì¸ò",
+	"rub",
+	"pick",
+	"eat",
+	"sign",
+	"close",
+	"look",
+	"try"
+	*/
+	const char **WHO_ACTIONS() {
+		delete[] _whoActions;
+		_whoActions = new const char *[32] {
+			"\x8A\xE2\xAE \xAE\xA1\xEB\xE9\xA5\xE2",
+				"\x8A\xE2\xAE \xAE\xE2\xAA\xE0\xAE\xA5\xE2",
+				"\x8A\xE2\xAE \xA2\xEB\xAF\xEC\xA5\xE2",
+				"\x8A\xE2\xAE \xA1\xE3\xA4\xA5\xE2 \xAA\xAE\xAF\xA0\xE2\xEC",
+				"\x8A\xE2\xAE \xAF\xAE\xE2\xE0\xAE\xA3\xA0\xA5\xE2",
+				"\x8A\xE2\xAE \xAF\xE0\xAE\xE7\xE2\xF1\xE2",
+				"\x8A\xAE\xA3\xAE \xAD\xA0\xE3\xE7\xA8\xE2\xEC",
+				"\x8A\xE2\xAE \xA2\xAE\xA7\xEC\xAC\xF1\xE2",
+				"\x8A\xE2\xAE \xE3\xA4\xA0\xE0\xA8\xE2",
+				"\x8A\xE2\xAE \xE3\xAA\xE0\xA0\xA4\xF1\xE2",
+				"\x8A\xE2\xAE \xA4\xA0\xE1\xE2 \xA2\xA7\xEF\xE2\xAA\xE3",
+				"\x8A\xE2\xAE \xA7\xA0\xAF\xAB\xA0\xE2\xA8\xE2",
+				"\x8A\xE2\xAE \xAF\xE0\xA8\xE1\xEF\xA4\xA5\xE2",
+				"\x8A\xE2\xAE \xAF\xAE\xAF\xE0\xAE\xA1\xE3\xA5\xE2",
+				"\x8A\xE2\xAE \xA5\xA3\xAE \xAF\xAE\xA2\xA5\xE0\xAD\xF1\xE2",
+				"\x8A\xE2\xAE \xA8\xE1\xAA\xE3\xAF\xAD\xF1\xE2\xE1\xEF",
+				"\x8A\xE2\xAE \xA5\xA3\xAE \xE3\xAD\xA8\xE7\xE2\xAE\xA6\xA8\xE2",
+				"\x8A\xE2\xAE \xA2\xEB\xA4\xA5\xE0\xAD\xA5\xE2",
+				"\x8A\xE2\xAE \xE1\xAF\xE3\xE1\xE2\xA8\xE2\xE1\xEF",
+				"\x8A\xE2\xAE \xA1\xE0\xAE\xE1\xA8\xE2 \xAC\xAE\xAD\xA5\xE2\xAA\xE3",
+				"pray",
+				"\x8A\xE2\xAE \xE1\xE2\xA0\xAD\xA5\xE2 \xE7\xAB\xA5\xAD\xAE\xAC",
+				"act",
+				"\x8A\xE2\xAE \xE5\xAE\xE7\xA5\xE2 \xE1\xEB\xA3\xE0\xA0\xE2\xEC",
+				"\x8A\xE2\xAE \xAD\xA0\xA6\xAC\xF1\xE2",
+				"rub",
+				"pick",
+				"eat",
+				"sign",
+				"close",
+				"look",
+				"try"
+		};
+		return _whoActions;
+	}
+
+	/*
+	"Îòêðûòü ðåø¸òêó",
+	"Îòêðûòü äâåðü",
+	"Ðàñêðûòü ñâèòîê",
+	"Âûáåðèòå ïåðñîíàæà"
+	*/
+	const char **WHO_WILL_ACTIONS() {
+		delete[] _whoWillActions;
+		_whoWillActions = new const char *[4] {
+			"\x8E\xE2\xAA\xE0\xEB\xE2\xEC \xE0\xA5\xE8\xF1\xE2\xAA\xE3",
+				"\x8E\xE2\xAA\xE0\xEB\xE2\xEC \xA4\xA2\xA5\xE0\xEC",
+				"\x90\xA0\xE1\xAA\xE0\xEB\xE2\xEC \xE1\xA2\xA8\xE2\xAE\xAA",
+				"\x82\xEB\xA1\xA5\xE0\xA8\xE2\xA5 \xAF\xA5\xE0\xE1\xAE\xAD\xA0\xA6\xA0"
+		};
+		return _whoWillActions;
+	}
+
+	const char **DIRECTION_TEXT_UPPER() {
+		delete[] _directionTextUpper;
+		_directionTextUpper = new const char *[4] { "NORTH", "EAST", "SOUTH", "WEST" };
+		return _directionTextUpper;
+	}
+
+	/*
+	"Ñåâåð",
+	"Âîñòîê",
+	"Þã",
+	"Çàïàä"
+	*/
+	const char **DIRECTION_TEXT() {
+		delete[] _directionText;
+		_directionText = new const char *[4] {
+			"\x91\xA5\xA2\xA5\xE0",
+				"\x82\xAE\xE1\xE2\xAE\xAA",
+				"\x9E\xA3",
+				"\x87\xA0\xAF\xA0\xA4"
+		};
+		return _directionText;
+	}
+
+	/*
+	"×åëîâåê",
+	"Ýëüô",
+	"Äâîðô",
+	"Ãíîì",
+	"Ïîëóîðê"
+	*/
+	const char **RACE_NAMES() {
+		delete[] _raceNames;
+		_raceNames = new const char *[5] {
+			"\x97\xA5\xAB\xAE\xA2\xA5\xAA",
+				"\x9D\xAB\xEC\xE4",
+				"\x84\xA2\xAE\xE0\xE4",
+				"\x83\xAD\xAE\xAC",
+				"\x8F\xAE\xAB\xE3\xAE\xE0\xAA"
+		};
+		return _raceNames;
+	}
+
+	/*
+	"Õîðîøèé",
+	"Íåéòðàë",
+	"Çëîé(-àÿ)"
+	*/
+	const char **ALIGNMENT_NAMES() {
+		delete[] _alignmentNames;
+		_alignmentNames = new const char *[3] {
+			"\x95\xAE\xE0\xAE\xE8\xA8\xA9",
+				"\x8D\xA5\xA9\xE2\xE0\xA0\xAB",
+				"\x87\xAB\xAE\xA9(-\xA0\xEF)"
+		};
+		return _alignmentNames;
+	}
+
+	/*
+	"Ìóæ÷èíà",
+	"Æåíùèíà"
+	*/
+	const char **SEX_NAMES() {
+		delete[] _sexNames;
+		_sexNames = new const char *[2] {
+			"\x8C\xE3\xA6\xE7\xA8\xAD\xA0",
+				"\x86\xA5\xAD\xE9\xA8\xAD\xA0"
+		};
+		return _sexNames;
+	}
+
+	/*
+	"Âîðîâñòâî\t100",
+	"Îðóæåéíèê",
+	"Àñòðîëîã",
+	"Àòëåò",
+	"Êàðòîãðàô",
+	"Êðåñòîíîñåö",
+	"×óâñòâî íàïðàâëåíèÿ",
+	"ßçûêîâåä",
+	"Êóïåö",
+	"Ñêàëîëàç",
+	"Øòóðìàí",
+	"Ñëåäîïûò",
+	"Ìàãèñòð ìîëèòâû",
+	"Ëîâêîñòü ïàëüöåâ",
+	"Ïëîâåö",
+	"Îõîòíèê",
+	"Âîñïðèÿòèå",
+	"×óâñòâî îïàñíîñòè"
+	*/
+	const char **SKILL_NAMES() {
+		delete[] _skillNames;
+		_skillNames = new const char *[18] {
+			"\x82\xAE\xE0\xAE\xA2\xE1\xE2\xA2\xAE\t100",
+				"\x8E\xE0\xE3\xA6\xA5\xA9\xAD\xA8\xAA",
+				"\x80\xE1\xE2\xE0\xAE\xAB\xAE\xA3",
+				"\x80\xE2\xAB\xA5\xE2",
+				"\x8A\xA0\xE0\xE2\xAE\xA3\xE0\xA0\xE4",
+				"\x8A\xE0\xA5\xE1\xE2\xAE\xAD\xAE\xE1\xA5\xE6",
+				"\x97\xE3\xA2\xE1\xE2\xA2\xAE \xAD\xA0\xAF\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xEF",
+				"\x9F\xA7\xEB\xAA\xAE\xA2\xA5\xA4",
+				"\x8A\xE3\xAF\xA5\xE6",
+				"\x91\xAA\xA0\xAB\xAE\xAB\xA0\xA7",
+				"\x98\xE2\xE3\xE0\xAC\xA0\xAD",
+				"\x91\xAB\xA5\xA4\xAE\xAF\xEB\xE2",
+				"\x8C\xA0\xA3\xA8\xE1\xE2\xE0 \xAC\xAE\xAB\xA8\xE2\xA2\xEB",
+				"\x8B\xAE\xA2\xAA\xAE\xE1\xE2\xEC \xAF\xA0\xAB\xEC\xE6\xA5\xA2",
+				"\x8F\xAB\xAE\xA2\xA5\xE6",
+				"\x8E\xE5\xAE\xE2\xAD\xA8\xAA",
+				"\x82\xAE\xE1\xAF\xE0\xA8\xEF\xE2\xA8\xA5",
+				"\x97\xE3\xA2\xE1\xE2\xA2\xAE \xAE\xAF\xA0\xE1\xAD\xAE\xE1\xE2\xA8"
+		};
+		return _skillNames;
+	}
+
+	/*
+	"Ðûöàðü",
+	"Ïàëàäèí",
+	"Ëó÷íèê",
+	"Êëèðèê",
+	"Ìàã",
+	"Âîð",
+	"Íèíäçÿ",
+	"Âàðâàð",
+	"Äðóèä",
+	"Ñëåäîïûò",
+	nullptr
+	*/
+	const char **CLASS_NAMES() {
+		delete[] _classNames;
+		_classNames = new const char *[11] {
+			"\x90\xEB\xE6\xA0\xE0\xEC",
+				"\x8F\xA0\xAB\xA0\xA4\xA8\xAD",
+				"\x8B\xE3\xE7\xAD\xA8\xAA",
+				"\x8A\xAB\xA8\xE0\xA8\xAA",
+				"\x8C\xA0\xA3",
+				"\x82\xAE\xE0",
+				"\x8D\xA8\xAD\xA4\xA7\xEF",
+				"\x82\xA0\xE0\xA2\xA0\xE0",
+				"\x84\xE0\xE3\xA8\xA4",
+				"\x91\xAB\xA5\xA4\xAE\xAF\xEB\xE2",
+				nullptr
+		};
+		return _classNames;
+	}
+
+	/*
+	"Ïðîêëÿòèå",
+	"Heart Broken",
+	"Ñëàáîñòü",
+	"Îòðàâëåíèå",
+	"Áîëåçíü",
+	"Áåçóìèå",
+	"Âëþáë¸í(-à)",
+	"Íàâåñåëå",
+	"Ñîí",
+	"Â óíûíèè",
+	"Â ñìÿòåíèè",
+	"Ïàðàëè÷",
+	"Á.ñîçíàíèÿ",
+	"Ìåðòâ",
+	"Êàìåíü",
+	"Óíè÷òîæåí",
+	"Õîðîøåå"
+	*/
+	const char **CONDITION_NAMES() {
+		delete[] _conditionNames;
+		_conditionNames = new const char *[17] {
+			"\x8F\xE0\xAE\xAA\xAB\xEF\xE2\xA8\xA5",
+				"Heart Broken",
+				"\x91\xAB\xA0\xA1\xAE\xE1\xE2\xEC",
+				"\x8E\xE2\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xA5",
+				"\x81\xAE\xAB\xA5\xA7\xAD\xEC",
+				"\x81\xA5\xA7\xE3\xAC\xA8\xA5",
+				"\x82\xAB\xEE\xA1\xAB\xF1\xAD(-\xA0)",
+				"\x8D\xA0\xA2\xA5\xE1\xA5\xAB\xA5",
+				"\x91\xAE\xAD",
+				"\x82 \xE3\xAD\xEB\xAD\xA8\xA8",
+				"\x82 \xE1\xAC\xEF\xE2\xA5\xAD\xA8\xA8",
+				"\x8F\xA0\xE0\xA0\xAB\xA8\xE7",
+				"\x81.\xE1\xAE\xA7\xAD\xA0\xAD\xA8\xEF",
+				"\x8C\xA5\xE0\xE2\xA2",
+				"\x8A\xA0\xAC\xA5\xAD\xEC",
+				"\x93\xAD\xA8\xE7\xE2\xAE\xA6\xA5\xAD",
+				"\x95\xAE\xE0\xAE\xE8\xA5\xA5"
+		};
+		return _conditionNames;
+	}
+
+	/*
+	"Õîðîøåå"
+	*/
+	const char *GOOD() {
+		return "\x95\xAE\xE0\xAE\xE8\xA5\xA5";
+	}
+
+	/*
+	"\n\t014Áëàãîñëîâåíèå\t095%+d"
+	*/
+	const char *BLESSED() {
+		return "\n\t014\x81\xAB\xA0\xA3\xAE\xE1\xAB\xAE\xA2\xA5\xAD\xA8\xA5\t095%+d";
+	}
+
+	/*
+	"\n\t014Ñèëîâîé ùèò\t095%+d";
+	*/
+	const char *POWER_SHIELD() {
+		return "\n\t014\x91\xA8\xAB\xAE\xA2\xAE\xA9 \xE9\xA8\xE2\t095%+d";
+	}
+
+	/*
+	"\n\t014Ñâÿòîé äàð\t095%+d"
+	*/
+	const char *HOLY_BONUS() {
+		return "\n\t014\x91\xA2\xEF\xE2\xAE\xA9 \xA4\xA0\xE0\t095%+d";
+	}
+
+	/*
+	"\n\t014Ìóæåñòâî\t095%+d"
+	*/
+	const char *HEROISM() {
+		return "\n\t014\x8C\xE3\xA6\xA5\xE1\xE2\xA2\xAE\t095%+d";
+	}
+
+	/*
+	"\f15Â îòðÿäå\fd"
+	*/
+	const char *IN_PARTY() {
+		return "\f15\x82 \xAE\xE2\xE0\xEF\xA4\xA5\fd";
+	}
+
+	const char *PARTY_DETAILS() {
+		return "\015\003l\002\014"
+			   "00"
+			   "\013"
+			   "001"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "009"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "017"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "025"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "001"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "009"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "017"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "025"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "044"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "052"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "060"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "068"
+			   "\011"
+			   "035%s"
+			   "\013"
+			   "044"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "052"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "060"
+			   "\011"
+			   "136%s"
+			   "\013"
+			   "068"
+			   "\011"
+			   "136%s";
+	}
+
+	/*
+	"%s\x2\x3""c\v106\t013Ââåðõ\t048Âíèç\t083\f37Ó\fdäàë\t118\f37Â\fdûãí"
+	"\t153\f37Ñ\fdîçä\t188Â\f37û\fdõîä\x1";
+	*/
+	const char *PARTY_DIALOG_TEXT() {
+		return "%s\x2\x3"
+			   "c\v106\t013\x82\xA2\xA5\xE0\xE5\t048\x82\xAD\xA8\xA7\t083\f37\x93\fd\xA4\xA0\xAB\t118\f37\x82\fd\xEB\xA3\xAD"
+			   "\t153\f37\x91\fd\xAE\xA7\xA4\t188\x82\f37\xEB\fd\xE5\xAE\xA4\x1";
+	}
+
+	/*
+	"Âàì íå ñ êåì ïóòåøåñòâîâàòü"
+	*/
+	const char *NO_ONE_TO_ADVENTURE_WITH() {
+		return "\x82\xA0\xAC \xAD\xA5 \xE1 \xAA\xA5\xAC \xAF\xE3\xE2\xA5\xE8\xA5\xE1\xE2\xA2\xAE\xA2\xA0\xE2\xEC";
+	}
+
+	/*
+	"Âàø ñïèñîê ïîëîí!"
+	*/
+	const char *YOUR_ROSTER_IS_FULL() {
+		return "\x82\xA0\xE8 \xE1\xAF\xA8\xE1\xAE\xAA \xAF\xAE\xAB\xAE\xAD!";
+	}
+
+	/*
+	"\fd\x3""c\t000\v002Ïîäîæäèòå..."
+	*/
+	const char *PLEASE_WAIT() {
+		return "\fd\x3"
+			   "c\t000\v002\x8F\xAE\xA4\xAE\xA6\xA4\xA8\xE2\xA5...";
+	}
+
+	/*
+	"\x3""c\t000\v002Óïñ..."
+	*/
+	const char *OOPS() {
+		return "\x3"
+			   "c\t000\v002\x93\xAF\xE1...";
+	}
+
+	/*
+	"\r\x2\x3""c\v122\t013"
+	"\f37Â\fdêë\t040\f37Ñ\fdí\t067ESC"
+	"\x1\t000\v000Áàíê Êñèíà\v015\n"
+	"Áàíê\x3""l\n"
+	"Çîë\x3""r\t000%s\x3""l\n"
+	"Àëìç\x3""r\t000%s\x3""c\n"
+	"\n"
+	"Îòðÿä\x3""l\n"
+	"Çîë\x3""r\t000%s\x3""l\n"
+	"Àëìç\x3""r\t000%s";
+	*/
+	const char *BANK_TEXT() {
+		return "\r\x2\x3"
+			   "c\v122\t013"
+			   "\f37\x82\fd\xAA\xAB\t040\f37\x91\fd\xAD\t067ESC"
+			   "\x1\t000\v000\x81\xA0\xAD\xAA \x8A\xE1\xA8\xAD\xA0\v015\n"
+			   "\x81\xA0\xAD\xAA\x3"
+			   "l\n"
+			   "\x87\xAE\xAB\x3"
+			   "r\t000%s\x3"
+			   "l\n"
+			   "\x80\xAB\xAC\xA7\x3"
+			   "r\t000%s\x3"
+			   "c\n"
+			   "\n"
+			   "\x8E\xE2\xE0\xEF\xA4\x3"
+			   "l\n"
+			   "\x87\xAE\xAB\x3"
+			   "r\t000%s\x3"
+			   "l\n"
+			   "\x80\xAB\xAC\xA7\x3"
+			   "r\t000%s";
+	}
+
+	/*
+	"\x1\r\x3""c\v000\t000"
+	"Ëàâêà\t039\v027%s\x3""l\v046\n"
+	"\t011\f37Ñ\fdìîòðåòü\n"
+	"\t000\v090Çîë\x3""r\t000%s"
+	"\x2\x3""c\v122\t040ESC\x1";
+	*/
+	const char *BLACKSMITH_TEXT() {
+		return "\x1\r\x3"
+			   "c\v000\t000"
+			   "\x8B\xA0\xA2\xAA\xA0\t039\v027%s\x3"
+			   "l\v046\n"
+			   "\t011\f37\x91\fd\xAC\xAE\xE2\xE0\xA5\xE2\xEC\n"
+			   "\t000\v090\x87\xAE\xAB\x3"
+			   "r\t000%s"
+			   "\x2\x3"
+			   "c\v122\t040ESC\x1";
+	}
+
+	/*
+	"\nÂû äîëæíû áûòü ÷ëåíîì ãèëüäèè, ÷òîáû ïîêóïàòü çàêëèíàíèÿ."
+	*/
+	const char *GUILD_NOT_MEMBER_TEXT() {
+		return "\n\x82\xEB \xA4\xAE\xAB\xA6\xAD\xEB \xA1\xEB\xE2\xEC \xE7\xAB\xA5\xAD\xAE\xAC \xA3\xA8\xAB\xEC\xA4\xA8\xA8, \xE7\xE2\xAE\xA1\xEB \xAF\xAE\xAA\xE3\xAF\xA0\xE2\xEC \xA7\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xEF.";
+	}
+
+	/*
+	"\x3""c\v027\t039%s"
+	"\x3""l\v046\n"
+	"\t012\f37Ê\fdóïèòü\n"
+	"\t012\f37Î\fdïèñàíèÿ";
+	*/
+	const char *GUILD_TEXT() {
+		return "\x3"
+			   "c\v027\t039%s"
+			   "\x3"
+			   "l\v046\n"
+			   "\t012\f37\x8A\fd\xE3\xAF\xA8\xE2\xEC\n"
+			   "\t012\f37\x8E\fd\xAF\xA8\xE1\xA0\xAD\xA8\xEF";
+	}
+
+	/*
+	"\r\x3""c\v000\t000Òàâåðíà\t039"
+	"\v027%s%s\x3""l\t000"
+	"\v090Çîë\x3""r\t000%s\x2\x3""c\v122"
+	"\t021\f37Î\fdòäûõ\t060ESC\x1";
+	*/
+	const char *TAVERN_TEXT() {
+		return "\r\x3"
+			   "c\v000\t000\x92\xA0\xA2\xA5\xE0\xAD\xA0\t039"
+			   "\v027%s%s\x3"
+			   "l\t000"
+			   "\v090\x87\xAE\xAB\x3"
+			   "r\t000%s\x2\x3"
+			   "c\v122"
+			   "\t021\f37\x8E\fd\xE2\xA4\xEB\xE5\t060ESC\x1";
+	}
+
+	/*
+	"\x3""l\t017\v046\f37Â\fdûïèòü\n"
+	"\t017\f37Å\fdäà\n"
+	"\t017\f37×\fdàåâûå\n"
+	"\t017\f37Ñ\fdëóõè";
+	*/
+	const char *FOOD_AND_DRINK() {
+		return "\x3"
+			   "l\t017\v046\f37\x82\fd\xEB\xAF\xA8\xE2\xEC\n"
+			   "\t017\f37\x85\fd\xA4\xA0\n"
+			   "\t017\f37\x97\fd\xA0\xA5\xA2\xEB\xA5\n"
+			   "\t017\f37\x91\fd\xAB\xE3\xE5\xA8";
+	}
+
+	/*
+	"\n"
+	"\n"
+	"Íåäóðíî\n"
+	"\n"
+	"Íàæìèòå êëàâèøó!";
+	*/
+	const char *GOOD_STUFF() {
+		return "\n"
+			   "\n"
+			   "\x8D\xA5\xA4\xE3\xE0\xAD\xAE\n"
+			   "\n"
+			   "\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3!";
+	}
+
+	/*
+	"\nÑïåðâà âûïåéòå\n\nÍàæìèòå êëàâèøó!"
+	*/
+	const char *HAVE_A_DRINK() {
+		return "\n\x91\xAF\xA5\xE0\xA2\xA0 \xA2\xEB\xAF\xA5\xA9\xE2\xA5\n\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3!";
+	}
+
+	/*
+	"\n\nÂû ïüÿíû\n\nÍàæìèòå êëàâèøó!"
+	*/
+	const char *YOURE_DRUNK() {
+		return "\n\n\x82\xEB \xAF\xEC\xEF\xAD\xEB\n\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3!";
+	}
+
+	/*
+	"\r\x3""c\v000\t000Õðàì"
+	"\t039\v027%s\x3""l\t000\v046"
+	"\f37Ë\fdå÷èòü\x3""r\t000%lu\x3""l\n"
+	"\f37Ä\fdàð\x3""r\t000%lu\x3""l\n"
+	"\f37Ñ\fdíÏðîêë\x3""r\t000%s"
+	"\x3""l\t000\v090Çîë\x3""r\t000%s"
+	"\x2\x3""c\v122\t040ESC\x1";
+	*/
+	const char *TEMPLE_TEXT() {
+		return "\r\x3"
+			   "c\v000\t000\x95\xE0\xA0\xAC"
+			   "\t039\v027%s\x3"
+			   "l\t000\v046"
+			   "\f37\x8B\fd\xA5\xE7\xA8\xE2\xEC\x3"
+			   "r\t000%lu\x3"
+			   "l\n"
+			   "\f37\x84\fd\xA0\xE0\x3"
+			   "r\t000%lu\x3"
+			   "l\n"
+			   "\f37\x91\fd\xAD\x8F\xE0\xAE\xAA\xAB\x3"
+			   "r\t000%s"
+			   "\x3"
+			   "l\t000\v090\x87\xAE\xAB\x3"
+			   "r\t000%s"
+			   "\x2\x3"
+			   "c\v122\t040ESC\x1";
+	}
+
+	/*
+	"%s\nÍóæíî %lu î÷êîâ îïûòà äëÿ óðîâíÿ %u."
+	*/
+	const char *EXPERIENCE_FOR_LEVEL() {
+		return "%s\n\x8D\xE3\xA6\xAD\xAE %lu \xAE\xE7\xAA\xAE\xA2 \xAE\xAF\xEB\xE2\xA0 \xA4\xAB\xEF \xE3\xE0\xAE\xA2\xAD\xEF %u.";
+	}
+
+	/*
+	"%s\nÂû óæå çíàåòå âñ¸, ÷åìó ìû ìîæåì âàñ íàó÷èòü!"
+	*/
+	const char *TRAINING_LEARNED_ALL() {
+		return "%s\n\x82\xEB \xE3\xA6\xA5 \xA7\xAD\xA0\xA5\xE2\xA5 \xA2\xE1\xF1, \xE7\xA5\xAC\xE3 \xAC\xEB \xAC\xAE\xA6\xA5\xAC \xA2\xA0\xE1 \xAD\xA0\xE3\xE7\xA8\xE2\xEC!";
+	}
+
+	/*
+	"%s ìîæåò îáó÷àòüñÿ äî óðîâíÿ %d.\x3""l\n"
+	"\v081Öåíà\x3""r\t000%lu";
+	*/
+	const char *ELIGIBLE_FOR_LEVEL() {
+		return "%s \xAC\xAE\xA6\xA5\xE2 \xAE\xA1\xE3\xE7\xA0\xE2\xEC\xE1\xEF \xA4\xAE \xE3\xE0\xAE\xA2\xAD\xEF %d.\x3"
+			   "l\n"
+			   "\v081\x96\xA5\xAD\xA0\x3"
+			   "r\t000%lu";
+	}
+
+	/*
+	"\r\x3""cÎáó÷åíèå\n"
+	"\n"
+	"%s\x3""l\v090\t000Çîë\x3""r\t000%s\x2\x3""c\v122\t021"
+	"\f37Î\fdáó÷åíèå\t060ESC\x1";
+	*/
+	const char *TRAINING_TEXT() {
+		return "\r\x3"
+			   "c\x8E\xA1\xE3\xE7\xA5\xAD\xA8\xA5\n"
+			   "\n"
+			   "%s\x3"
+			   "l\v090\t000\x87\xAE\xAB\x3"
+			   "r\t000%s\x2\x3"
+			   "c\v122\t021"
+			   "\f37\x8E\fd\xA1\xE3\xE7\xA5\xAD\xA8\xA5\t060ESC\x1";
+	}
+
+	/*
+	"\x3""c\v000\t000%s\x3""l\n"
+	"\n"
+	"Çîë\x3""r\t000%s\x3""l\n"
+	"Àëìç\x3""r\t000%s\x2\x3""c\v096\t007\f37À\fdëìç\t035\f37Ç\fdîë\t067ESC\x1";
+	*/
+	const char *GOLD_GEMS() {
+		return "\x3"
+			   "c\v000\t000%s\x3"
+			   "l\n"
+			   "\n"
+			   "\x87\xAE\xAB\x3"
+			   "r\t000%s\x3"
+			   "l\n"
+			   "\x80\xAB\xAC\xA7\x3"
+			   "r\t000%s\x2\x3"
+			   "c\v096\t007\f37\x80\fd\xAB\xAC\xA7\t035\f37\x87\fd\xAE\xAB\t067ESC\x1";
+	}
+
+	/*
+	"\t000\v000\x3""c%s\x3""l\n"
+	"\n"
+	"\x4""077Çîë\x3""r\t000%s\x3""l\n"
+	"\x4""077Àëìç\x3""r\t000%s\x3""l\t000\v051\x4""077\n"
+	"\x4""077";
+	*/
+	const char *GOLD_GEMS_2() {
+		return "\t000\v000\x3"
+			   "c%s\x3"
+			   "l\n"
+			   "\n"
+			   "\x4"
+			   "077\x87\xAE\xAB\x3"
+			   "r\t000%s\x3"
+			   "l\n"
+			   "\x4"
+			   "077\x80\xAB\xAC\xA7\x3"
+			   "r\t000%s\x3"
+			   "l\t000\v051\x4"
+			   "077\n"
+			   "\x4"
+			   "077";
+	}
+
+	/*
+	"Ïîëîæèòü íà ñ÷¸ò", "Ñíÿòü ñî ñ÷¸òà"
+	*/
+	const char **DEPOSIT_WITHDRAWL() {
+		delete[] _depositWithdrawl;
+		_depositWithdrawl = new const char *[2] { "\x8F\xAE\xAB\xAE\xA6\xA8\xE2\xEC \xAD\xA0 \xE1\xE7\xF1\xE2", "\x91\xAD\xEF\xE2\xEC \xE1\xAE \xE1\xE7\xF1\xE2\xA0" };
+		return _depositWithdrawl;
+	}
+
+	/*
+	"\x3""c\v012Íåäîñòàòî÷íî %s %s!\x3""l"
+	*/
+	const char *NOT_ENOUGH_X_IN_THE_Y() {
+		return "\x3"
+			   "c\v012\x8D\xA5\xA4\xAE\xE1\xE2\xA0\xE2\xAE\xE7\xAD\xAE %s %s!\x3"
+			   "l";
+	}
+
+	/*
+	"\x3""c\v012Íåò %s %s!\x3""l"
+	*/
+	const char *NO_X_IN_THE_Y() {
+		return "\x3"
+			   "c\v012\x8D\xA5\xE2 %s %s!\x3"
+			   "l";
+	}
+
+	/*
+	"Ñèëà", "Èíòåëëåêò", "Ñèëà äóõà", "Ñëîæåíèå", "Ñêîðîñòü",
+	"Ìåòêîñòü", "Óäà÷à", "Âîçðàñò", "Óðîâåíü", "Êëàññ çàùèòû", "Çäîðîâüå",
+	"Î÷êè ìàãèè", "Óñòîé÷èâîñòè", "Íàâûêè", "Íàãðàäû", "Îïûò"
+	*/
+	const char **STAT_NAMES() {
+		delete[] _statNames;
+		_statNames = new const char *[16] {
+			"\x91\xA8\xAB\xA0", "\x88\xAD\xE2\xA5\xAB\xAB\xA5\xAA\xE2", "\x91\xA8\xAB\xA0 \xA4\xE3\xE5\xA0", "\x91\xAB\xAE\xA6\xA5\xAD\xA8\xA5", "\x91\xAA\xAE\xE0\xAE\xE1\xE2\xEC",
+				"\x8C\xA5\xE2\xAA\xAE\xE1\xE2\xEC", "\x93\xA4\xA0\xE7\xA0", "\x82\xAE\xA7\xE0\xA0\xE1\xE2", "\x93\xE0\xAE\xA2\xA5\xAD\xEC", "\x8A\xAB\xA0\xE1\xE1 \xA7\xA0\xE9\xA8\xE2\xEB", "\x87\xA4\xAE\xE0\xAE\xA2\xEC\xA5",
+				"\x8E\xE7\xAA\xA8 \xAC\xA0\xA3\xA8\xA8", "\x93\xE1\xE2\xAE\xA9\xE7\xA8\xA2\xAE\xE1\xE2\xA8", "\x8D\xA0\xA2\xEB\xAA\xA8", "\x8D\xA0\xA3\xE0\xA0\xA4\xEB", "\x8E\xAF\xEB\xE2"
+		};
+		return _statNames;
+	}
+
+	/*
+	"Çîëîòî", "Àëìàçû", "Ïèùà", "Ñîñòîÿíèå"
+	*/
+	const char **CONSUMABLE_NAMES() {
+		delete[] _consumableNames;
+		_consumableNames = new const char *[4] { "\x87\xAE\xAB\xAE\xE2\xAE", "\x80\xAB\xAC\xA0\xA7\xEB", "\x8F\xA8\xE9\xA0", "\x91\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA5" };
+		return _consumableNames;
+	}
+
+	/*
+	"ó îòðÿäà", "â áàíêå"
+	*/
+	const char **WHERE_NAMES() {
+		delete[] _whereNames;
+		_whereNames = new const char *[2] { "\xE3 \xAE\xE2\xE0\xEF\xA4\xA0", "\xA2 \xA1\xA0\xAD\xAA\xA5" };
+		return _whereNames;
+	}
+
+	/*
+	"\x3""c\t000\v051Ñêîëüêî\x3""l\n"
+	*/
+	const char *AMOUNT() {
+		return "\x3"
+			   "c\t000\v051\x91\xAA\xAE\xAB\xEC\xAA\xAE\x3"
+			   "l\n";
+	}
+
+	/*
+	"\v007Âàøè ðþêçàêè óæå íàïîëíåíû!"
+	*/
+	const char *FOOD_PACKS_FULL() {
+		return "\v007\x82\xA0\xE8\xA8 \xE0\xEE\xAA\xA7\xA0\xAA\xA8 \xE3\xA6\xA5 \xAD\xA0\xAF\xAE\xAB\xAD\xA5\xAD\xEB!";
+	}
+
+	/*
+	"\x3""c\v027\t039%s\x3""l\v046\n"
+	"\t012\f37Ê\fdóïèòü\n"
+	"\t012\f37Î\fdïèñàíèÿ";
+	*/
+	const char *BUY_SPELLS() {
+		return "\x3"
+			   "c\v027\t039%s\x3"
+			   "l\v046\n"
+			   "\t012\f37\x8A\fd\xE3\xAF\xA8\xE2\xEC\n"
+			   "\t012\f37\x8E\fd\xAF\xA8\xE1\xA0\xAD\xA8\xEF";
+	}
+
+	/*
+	"\x1\r\f00\x3""c\v000\t000Ãèëüäèÿ\n"
+	"%s\x3""l\t000\v090Çîë"
+	"\x3""r\t000%s\x2\x3""c\v122\t040ESC\x1";
+	*/
+	const char *GUILD_OPTIONS() {
+		return "\x1\r\f00\x3"
+			   "c\v000\t000\x83\xA8\xAB\xEC\xA4\xA8\xEF\n"
+			   "%s\x3"
+			   "l\t000\v090\x87\xAE\xAB"
+			   "\x3"
+			   "r\t000%s\x2\x3"
+			   "c\v122\t040ESC\x1";
+	}
+
+	/*
+	"Âû íå çàêëèíàòåëü..."
+	*/
+	const char *NOT_A_SPELL_CASTER() {
+		return "\x82\xEB \xAD\xA5 \xA7\xA0\xAA\xAB\xA8\xAD\xA0\xE2\xA5\xAB\xEC...";
+	}
+
+	/*
+	"Âû óæå çíàåòå âñ¸,\n"
+	"\t010÷åìó ìû ìîæåì âàñ\n"
+	"\t010íàó÷èòü!\n"
+	"\n"
+	"\n"
+	"\n"
+	"\n"
+	"\n"
+	"\n"
+	"\n"
+	"\n"
+	"\n";
+	*/
+	const char *SPELLS_LEARNED_ALL() {
+		return "\x82\xEB \xE3\xA6\xA5 \xA7\xAD\xA0\xA5\xE2\xA5 \xA2\xE1\xF1,\n"
+			   "\t010\xE7\xA5\xAC\xE3 \xAC\xEB \xAC\xAE\xA6\xA5\xAC \xA2\xA0\xE1\n"
+			   "\t010\xAD\xA0\xE3\xE7\xA8\xE2\xEC!\n"
+			   "\n"
+			   "\n"
+			   "\n"
+			   "\n"
+			   "\n"
+			   "\n"
+			   "\n"
+			   "\n"
+			   "\n";
+	}
+
+	/*
+	"\r\fd%s\x2\x3""c\t000\v002Çàêëèíàíèÿ"
+	*/
+	const char *SPELLS_FOR() {
+		return "\r\fd%s\x2\x3"
+			   "c\t000\v002\x87\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xEF";
+	}
+
+	const char *SPELL_LINES_0_TO_9() {
+		return "\x2\x3l\v015\t0011\n2\n3\n4\n5\n6\n7\n8\n9\n0";
+	}
+
+	const char *SPELLS_DIALOG_SPELLS() {
+		return "\x3l\v015"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l\n"
+			   "\t010\f%2u%s\fd\x3l"
+			   "\t004\v110%s - %u\x1";
+	}
+
+	/*
+	"Ìàíà"
+	*/
+	const char *SPELL_PTS() {
+		return "\x8C\xA0\xAD\xA0";
+	}
+
+	/*
+	"Çîë"
+	*/
+	const char *GOLD() {
+		return "\x87\xAE\xAB";
+	}
+
+	/*
+	"\x3""c\f09%s\fd\x3""l\n"
+	"\n"
+	"%s\x3""c\t000\v110Í. êëàâèøó!";
+	*/
+	const char *SPELL_INFO() {
+		return "\x3"
+			   "c\f09%s\fd\x3"
+			   "l\n"
+			   "\n"
+			   "%s\x3"
+			   "c\t000\v110\x8D. \xAA\xAB\xA0\xA2\xA8\xE8\xE3!";
+	}
+
+	/*
+	"\x3""l\v000\t000\fd%s  Æåëàåòå ïðèîáðåñòè "
+	"\f09%s\fd çà %u?";
+	*/
+	const char *SPELL_PURCHASE() {
+		return "\x3"
+			   "l\v000\t000\fd%s  \x86\xA5\xAB\xA0\xA5\xE2\xA5 \xAF\xE0\xA8\xAE\xA1\xE0\xA5\xE1\xE2\xA8 "
+			   "\f09%s\fd \xA7\xA0 %u?";
+	}
+
+	/*
+	"\x3""c\v000\t000%s\x3l\v139"
+	"\t000X = %d\x3r\t000Y = %d\x3""c\t000%s";
+	*/
+	const char *MAP_TEXT() {
+		return "\x3"
+			   "c\v000\t000%s\x3l\v139"
+			   "\t000X = %d\x3r\t000Y = %d\x3"
+			   "c\t000%s";
+	}
+
+	/*
+	"\x3""l\n\n\t024Ñâåò\x3""r\t124%u";
+	*/
+	const char *LIGHT_COUNT_TEXT() {
+		return "\x3"
+			   "l\n\n\t024\x91\xA2\xA5\xE2\x3"
+			   "r\t124%u";
+	}
+
+	/*
+	"%c%sÎãîíü%s%u"
+	*/
+	const char *FIRE_RESISTENCE_TEXT() {
+		return "%c%s\x8E\xA3\xAE\xAD\xEC%s%u";
+	}
+
+	/*
+	"%c%sÃðîì%s%u"
+	*/
+	const char *ELECRICITY_RESISTENCE_TEXT() {
+		return "%c%s\x83\xE0\xAE\xAC%s%u";
+	}
+
+	/*
+	"%c%sÕîëîä%s%u"


Commit: 84ad41f685ba02470db8ffc2cdf268664ef125e1
    https://github.com/scummvm/scummvm/commit/84ad41f685ba02470db8ffc2cdf268664ef125e1
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Further sharpening ru translation

Changed paths:
    devtools/create_xeen/ru_constants.h


diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index 9343ad33e3..8526c737ff 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -26,81 +26,43 @@
 
 class RU : public LangConstants {
 public:
-	/*
-	"\v012\t000\x3"
-	"c\f35Èäåÿ è ðóêîâîäñòâî ïðîåêòîì:\n"
-	"\f17Äæîí Âàí Êàíåãåì\x3"
-	"l\n"
-	"\n"
-	"\t025\f35Ïðîãðàììèñòû:\n"
-	"\t035\f17Ìàðê Êîëäóýëë\n"
-	"\t035Äåéâ Õýòýóýé\n"
-	"\n"
-	"\t025\f35Àóäèîñèñòåìà è çâóê:\n"
-	"\t035\f17Òîää Õåíäðèêñ\n"
-	"\n"
-	"\t025\f35Ìóçûêà è ðå÷ü:\n"
-	"\t035\f17Òèì Òàëëè\n"
-	"\n"
-	"\t025\f35Ñöåíàðèé:\n"
-	"\t035\f17Ïîë Ðàòíåð\n"
-	"\t035Äåááè ̸ðôè\n"
-	"\t035Äæîí Âàí Êàíåãåì\v012\n"
-	"\n"
-	"\n"
-	"\t180\f35Õóäîæíèêè:\n"
-	"\t190\f17Ëóè Äæîíñîí\n"
-	"\t190Äæîíàòàí Ï. Ãâèí\n"
-	"\t190Áîíèòà Ëîíã-Õåìñàò\n"
-	"\t190Äæóëèÿ Óëàíî\n"
-	"\t190Ðèêàðäî Áàððåðà\n"
-	"\n"
-	"\t180\f35Òåñòåðû:\n"
-	"\t190\f17Áåíäæàìèí Áåíò\n"
-	"\t190Ìàðèî Ýñêàìèëëà\n"
-	"\t190Ðè÷àðä Ýñïè\n"
-	"\t190Ñêîòò Ìàêäýíèåë\n"
-	"\t190Êëåéòîí Ðåòçåð\n"
-	"\t190Ìàéêë Ñóàðåñ\x3"
-	"c";
-	*/
 	const char *CLOUDS_CREDITS() {
-		return "\v012\t000\x3"
-			   "c\f35\x88\xA4\xA5\xEF \xA8 \xE0\xE3\xAA\xAE\xA2\xAE\xA4\xE1\xE2\xA2\xAE \xAF\xE0\xAE\xA5\xAA\xE2\xAE\xAC:\n"
-			   "\f17\x84\xA6\xAE\xAD \x82\xA0\xAD \x8A\xA0\xAD\xA5\xA3\xA5\xAC\x3"
-			   "l\n"
-			   "\n"
-			   "\t025\f35\x8F\xE0\xAE\xA3\xE0\xA0\xAC\xAC\xA8\xE1\xE2\xEB:\n"
-			   "\t035\f17\x8C\xA0\xE0\xAA \x8A\xAE\xAB\xA4\xE3\xED\xAB\xAB\n"
-			   "\t035\x84\xA5\xA9\xA2 \x95\xED\xE2\xED\xE3\xED\xA9\n"
-			   "\n"
-			   "\t025\f35\x80\xE3\xA4\xA8\xAE\xE1\xA8\xE1\xE2\xA5\xAC\xA0 \xA8 \xA7\xA2\xE3\xAA:\n"
-			   "\t035\f17\x92\xAE\xA4\xA4 \x95\xA5\xAD\xA4\xE0\xA8\xAA\xE1\n"
-			   "\n"
-			   "\t025\f35\x8C\xE3\xA7\xEB\xAA\xA0 \xA8 \xE0\xA5\xE7\xEC:\n"
-			   "\t035\f17\x92\xA8\xAC \x92\xA0\xAB\xAB\xA8\n"
-			   "\n"
-			   "\t025\f35\x91\xE6\xA5\xAD\xA0\xE0\xA8\xA9:\n"
-			   "\t035\f17\x8F\xAE\xAB \x90\xA0\xE2\xAD\xA5\xE0\n"
-			   "\t035\x84\xA5\xA1\xA1\xA8 \x8C\xF1\xE0\xE4\xA8\n"
-			   "\t035\x84\xA6\xAE\xAD \x82\xA0\xAD \x8A\xA0\xAD\xA5\xA3\xA5\xAC\v012\n"
-			   "\n"
-			   "\n"
-			   "\t180\f35\x95\xE3\xA4\xAE\xA6\xAD\xA8\xAA\xA8:\n"
-			   "\t190\f17\x8B\xE3\xA8 \x84\xA6\xAE\xAD\xE1\xAE\xAD\n"
-			   "\t190\x84\xA6\xAE\xAD\xA0\xE2\xA0\xAD \x8F. \x83\xA2\xA8\xAD\n"
-			   "\t190\x81\xAE\xAD\xA8\xE2\xA0 \x8B\xAE\xAD\xA3-\x95\xA5\xAC\xE1\xA0\xE2\n"
-			   "\t190\x84\xA6\xE3\xAB\xA8\xEF \x93\xAB\xA0\xAD\xAE\n"
-			   "\t190\x90\xA8\xAA\xA0\xE0\xA4\xAE \x81\xA0\xE0\xE0\xA5\xE0\xA0\n"
-			   "\n"
-			   "\t180\f35\x92\xA5\xE1\xE2\xA5\xE0\xEB:\n"
-			   "\t190\f17\x81\xA5\xAD\xA4\xA6\xA0\xAC\xA8\xAD \x81\xA5\xAD\xE2\n"
-			   "\t190\x8C\xA0\xE0\xA8\xAE \x9D\xE1\xAA\xA0\xAC\xA8\xAB\xAB\xA0\n"
-			   "\t190\x90\xA8\xE7\xA0\xE0\xA4 \x9D\xE1\xAF\xA8\n"
-			   "\t190\x91\xAA\xAE\xE2\xE2 \x8C\xA0\xAA\xA4\xED\xAD\xA8\xA5\xAB\n"
-			   "\t190\x8A\xAB\xA5\xA9\xE2\xAE\xAD \x90\xA5\xE2\xA7\xA5\xE0\n"
-			   "\t190\x8C\xA0\xA9\xAA\xAB \x91\xE3\xA0\xE0\xA5\xE1\x3"
-			   "c";
+		return "\v012\t000\x3"																								 // "\v012\t000\x3"  
+			   "c\f35\x88\xA4\xA5\xEF \xA8 \xE0\xE3\xAA\xAE\xA2\xAE\xA4\xE1\xE2\xA2\xAE \xAF\xE0\xAE\xA5\xAA\xE2\xAE\xAC:\n" // "c\f35Идея и руководство проектом:\n"
+			   "\f17\x84\xA6\xAE\xAD \x82\xA0\xAD \x8A\xA0\xAD\xA5\xA3\xA5\xAC\x3"                                           // "\f17Джон Ван Канегем\x3"
+			   "l\n"                                                                                                         // "l\n"
+			   "\n"                                                                                                          // "\n"
+			   "\t025\f35\x8F\xE0\xAE\xA3\xE0\xA0\xAC\xAC\xA8\xE1\xE2\xEB:\n"                                                // "\t025\f35Программисты:\n"
+			   "\t035\f17\x8C\xA0\xE0\xAA \x8A\xAE\xAB\xA4\xE3\xED\xAB\xAB\n"                                                // "\t035\f17Марк Колдуэлл\n"
+			   "\t035\x84\xA5\xA9\xA2 \x95\xED\xE2\xED\xE3\xED\xA9\n"                                                        // "\t035Дейв Хэтэуэй\n"
+			   "\n"                                                                                                          // "\n"
+			   "\t025\f35\x80\xE3\xA4\xA8\xAE\xE1\xA8\xE1\xE2\xA5\xAC\xA0 \xA8 \xA7\xA2\xE3\xAA:\n"                          // "\t025\f35Аудиосистема и звук:\n"
+			   "\t035\f17\x92\xAE\xA4\xA4 \x95\xA5\xAD\xA4\xE0\xA8\xAA\xE1\n"                                                // "\t035\f17Тодд Хендрикс\n"
+			   "\n"                                                                                                          // "\n"
+			   "\t025\f35\x8C\xE3\xA7\xEB\xAA\xA0 \xA8 \xE0\xA5\xE7\xEC:\n"                                                  // "\t025\f35Музыка и речь:\n"
+			   "\t035\f17\x92\xA8\xAC \x92\xA0\xAB\xAB\xA8\n"                                                                // "\t035\f17Тим Талли\n"
+			   "\n"                                                                                                          // "\n"
+			   "\t025\f35\x91\xE6\xA5\xAD\xA0\xE0\xA8\xA9:\n"                                                                // "\t025\f35Сценарий:\n"
+			   "\t035\f17\x8F\xAE\xAB \x90\xA0\xE2\xAD\xA5\xE0\n"                                                            // "\t035\f17Пол Ратнер\n"
+			   "\t035\x84\xA5\xA1\xA1\xA8 \x8C\xF1\xE0\xE4\xA8\n"                                                            // "\t035Дебби Мёрфи\n"
+			   "\t035\x84\xA6\xAE\xAD \x82\xA0\xAD \x8A\xA0\xAD\xA5\xA3\xA5\xAC\v012\n"                                      // "\t035Джон Ван Канегем\v012\n"
+			   "\n"                                                                                                          // "\n"
+			   "\n"                                                                                                          // "\n"
+			   "\t180\f35\x95\xE3\xA4\xAE\xA6\xAD\xA8\xAA\xA8:\n"                                                            // "\t180\f35Художники:\n"
+			   "\t190\f17\x8B\xE3\xA8 \x84\xA6\xAE\xAD\xE1\xAE\xAD\n"                                                        // "\t190\f17Луи Джонсон\n"
+			   "\t190\x84\xA6\xAE\xAD\xA0\xE2\xA0\xAD \x8F. \x83\xA2\xA8\xAD\n"                                              // "\t190Джонатан П. Гвин\n"
+			   "\t190\x81\xAE\xAD\xA8\xE2\xA0 \x8B\xAE\xAD\xA3-\x95\xA5\xAC\xE1\xA0\xE2\n"                                   // "\t190Бонита Лонг-Хемсат\n"
+			   "\t190\x84\xA6\xE3\xAB\xA8\xEF \x93\xAB\xA0\xAD\xAE\n"                                                        // "\t190Джулия Улано\n"
+			   "\t190\x90\xA8\xAA\xA0\xE0\xA4\xAE \x81\xA0\xE0\xE0\xA5\xE0\xA0\n"                                            // "\t190Рикардо Баррера\n"
+			   "\n"                                                                                                          // "\n"
+			   "\t180\f35\x92\xA5\xE1\xE2\xA5\xE0\xEB:\n"                                                                    // "\t180\f35Тестеры:\n"
+			   "\t190\f17\x81\xA5\xAD\xA4\xA6\xA0\xAC\xA8\xAD \x81\xA5\xAD\xE2\n"                                            // "\t190\f17Бенджамин Бент\n"
+			   "\t190\x8C\xA0\xE0\xA8\xAE \x9D\xE1\xAA\xA0\xAC\xA8\xAB\xAB\xA0\n"                                            // "\t190Марио Эскамилла\n"
+			   "\t190\x90\xA8\xE7\xA0\xE0\xA4 \x9D\xE1\xAF\xA8\n"                                                            // "\t190Ричард Эспи\n"
+			   "\t190\x91\xAA\xAE\xE2\xE2 \x8C\xA0\xAA\xA4\xED\xAD\xA8\xA5\xAB\n"                                            // "\t190Скотт Макдэниел\n"
+			   "\t190\x8A\xAB\xA5\xA9\xE2\xAE\xAD \x90\xA5\xE2\xA7\xA5\xE0\n"                                                // "\t190Клейтон Ретзер\n"
+			   "\t190\x8C\xA0\xA9\xAA\xAB \x91\xE3\xA0\xE0\xA5\xE1\x3"                                                       // "\t190Майкл Суарес\x3"
+			   "c";                                                                                                          // "c"
 	}
 
 	const char *DARK_SIDE_CREDITS() {
@@ -178,34 +140,22 @@ public:
 			   "\t110Jack Nalls\n";
 	}
 
-	/*
-	"\r\x1\x3"
-	"c\fdÌå÷ è Ìàãèÿ\n"
-	"%s Êñèíà\x2\n"
-	"\v%.3dCopyright (c) %d NWC, Inc.\n"
-	"All Rights Reserved\x1";
-	*/
 	const char *OPTIONS_MENU() {
-		return "\r\x1\x3"
-			   "c\fd\x8C\xA5\xE7 \xA8 \x8C\xA0\xA3\xA8\xEF\n"
-			   "%s \x8A\xE1\xA8\xAD\xA0\x2\n"
-			   "\v%.3dCopyright (c) %d NWC, Inc.\n"
-			   "All Rights Reserved\x1";
-	}
-	/*
-	"Îáëàêà", "Darkside", "World"
-	*/
+		return "\r\x1\x3"									  // "\r\x1\x3"
+			   "c\fd\x8C\xA5\xE7 \xA8 \x8C\xA0\xA3\xA8\xEF\n" // "c\fdМеч и Магия\n"
+			   "%s \x8A\xE1\xA8\xAD\xA0\x2\n"                 // "%s Ксина\x2\n"
+			   "\v%.3dCopyright (c) %d NWC, Inc.\n"           // "\v%.3dCopyright (c) %d NWC, Inc.\n"
+			   "All Rights Reserved\x1";                      // "All Rights Reserved\x1"
+	}
+
 	const char **GAME_NAMES() {
 		delete[] _gameNames;
-		_gameNames = new const char *[3] { "\x8E\xA1\xAB\xA0\xAA\xA0", "Darkside", "World" };
+		_gameNames = new const char *[3] { "\x8E\xA1\xAB\xA0\xAA\xA0", "Darkside", "World" }; // "Облака", "Darkside", "World"
 		return _gameNames;
 	}
 
-	/*
-	"\v012Îòðÿä íóæäàåòñÿ â îòäûõå!"
-	*/
 	const char *THE_PARTY_NEEDS_REST() {
-		return "\v012\x8E\xE2\xE0\xEF\xA4 \xAD\xE3\xA6\xA4\xA0\xA5\xE2\xE1\xEF \xA2 \xAE\xE2\xA4\xEB\xE5\xA5!";
+		return "\v012\x8E\xE2\xE0\xEF\xA4 \xAD\xE3\xA6\xA4\xA0\xA5\xE2\xE1\xEF \xA2 \xAE\xE2\xA4\xEB\xE5\xA5!"; // "\v012Отряд нуждается в отдыхе!"
 	}
 
 	const char *WHO_WILL() {
@@ -213,12 +163,8 @@ public:
 			   "c\v000\t000%s\n\n%s?\n\v055F1 - F%d";
 	}
 
-	/*
-	"\x3""cÑêîëüêî\n\n"
-	*/
 	const char *HOW_MUCH() {
-		return "\x3"
-			   "c\x91\xAA\xAE\xAB\xEC\xAA\xAE\n\n";
+		return "\x3""c\x91\xAA\xAE\xAB\xEC\xAA\xAE\n\n"; // "\x3""cСколько\n\n"
 	}
 
 	const char *WHATS_THE_PASSWORD() {
@@ -238,107 +184,60 @@ public:
 			   "\f32Incorrect!\fd";
 	}
 
-	/*
-	"\v007%s íå â ñîñòîÿíèè ÷òî-ëèáî ñäåëàòü!"
-	*/
 	const char *IN_NO_CONDITION() {
-		return "\v007%s \xAD\xA5 \xA2 \xE1\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA8 \xE7\xE2\xAE-\xAB\xA8\xA1\xAE \xE1\xA4\xA5\xAB\xA0\xE2\xEC!";
+		return "\v007%s \xAD\xA5 \xA2 \xE1\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA8 \xE7\xE2\xAE-\xAB\xA8\xA1\xAE \xE1\xA4\xA5\xAB\xA0\xE2\xEC!"; // "\v007%s не в состоянии что-либо сделать!"
 	}
 
-	/*
-	"\x3""c\v010Çäåñü íè÷åãî íåò."
-	*/
 	const char *NOTHING_HERE() {
-		return "\x3"
-			   "c\v010\x87\xA4\xA5\xE1\xEC \xAD\xA8\xE7\xA5\xA3\xAE \xAD\xA5\xE2.";
-	}
-
-	/*
-	"Êòî îáûùåò",
-	"Êòî îòêðîåò",
-	"Êòî âûïüåò",
-	"Êòî áóäåò êîïàòü",
-	"Êòî ïîòðîãàåò",
-	"Êòî ïðî÷ò¸ò",
-	"Êîãî íàó÷èòü",
-	"Êòî âîçüì¸ò",
-	"Êòî óäàðèò",
-	"Êòî óêðàä¸ò",
-	"Êòî äàñò âçÿòêó",
-	"Êòî çàïëàòèò",
-	"Êòî ïðèñÿäåò",
-	"Êòî ïîïðîáóåò",
-	"Êòî åãî ïîâåðí¸ò",
-	"Êòî èñêóïí¸òñÿ",
-	"Êòî åãî óíè÷òîæèò",
-	"Êòî âûäåðíåò",
-	"Êòî ñïóñòèòñÿ",
-	"Êòî áðîñèò ìîíåòêó",
-	"pray",
-	"Êòî ñòàíåò ÷ëåíîì",
-	"act",
-	"Êòî õî÷åò ñûãðàòü",
-	"Êòî íàæì¸ò",
-	"rub",
-	"pick",
-	"eat",
-	"sign",
-	"close",
-	"look",
-	"try"
-	*/
+		return "\x3""c\v010\x87\xA4\xA5\xE1\xEC \xAD\xA8\xE7\xA5\xA3\xAE \xAD\xA5\xE2."; // "\x3""c\v010Здесь ничего нет."
+	}
+
 	const char **WHO_ACTIONS() {
 		delete[] _whoActions;
 		_whoActions = new const char *[32] {
-			"\x8A\xE2\xAE \xAE\xA1\xEB\xE9\xA5\xE2",
-				"\x8A\xE2\xAE \xAE\xE2\xAA\xE0\xAE\xA5\xE2",
-				"\x8A\xE2\xAE \xA2\xEB\xAF\xEC\xA5\xE2",
-				"\x8A\xE2\xAE \xA1\xE3\xA4\xA5\xE2 \xAA\xAE\xAF\xA0\xE2\xEC",
-				"\x8A\xE2\xAE \xAF\xAE\xE2\xE0\xAE\xA3\xA0\xA5\xE2",
-				"\x8A\xE2\xAE \xAF\xE0\xAE\xE7\xE2\xF1\xE2",
-				"\x8A\xAE\xA3\xAE \xAD\xA0\xE3\xE7\xA8\xE2\xEC",
-				"\x8A\xE2\xAE \xA2\xAE\xA7\xEC\xAC\xF1\xE2",
-				"\x8A\xE2\xAE \xE3\xA4\xA0\xE0\xA8\xE2",
-				"\x8A\xE2\xAE \xE3\xAA\xE0\xA0\xA4\xF1\xE2",
-				"\x8A\xE2\xAE \xA4\xA0\xE1\xE2 \xA2\xA7\xEF\xE2\xAA\xE3",
-				"\x8A\xE2\xAE \xA7\xA0\xAF\xAB\xA0\xE2\xA8\xE2",
-				"\x8A\xE2\xAE \xAF\xE0\xA8\xE1\xEF\xA4\xA5\xE2",
-				"\x8A\xE2\xAE \xAF\xAE\xAF\xE0\xAE\xA1\xE3\xA5\xE2",
-				"\x8A\xE2\xAE \xA5\xA3\xAE \xAF\xAE\xA2\xA5\xE0\xAD\xF1\xE2",
-				"\x8A\xE2\xAE \xA8\xE1\xAA\xE3\xAF\xAD\xF1\xE2\xE1\xEF",
-				"\x8A\xE2\xAE \xA5\xA3\xAE \xE3\xAD\xA8\xE7\xE2\xAE\xA6\xA8\xE2",
-				"\x8A\xE2\xAE \xA2\xEB\xA4\xA5\xE0\xAD\xA5\xE2",
-				"\x8A\xE2\xAE \xE1\xAF\xE3\xE1\xE2\xA8\xE2\xE1\xEF",
-				"\x8A\xE2\xAE \xA1\xE0\xAE\xE1\xA8\xE2 \xAC\xAE\xAD\xA5\xE2\xAA\xE3",
-				"pray",
-				"\x8A\xE2\xAE \xE1\xE2\xA0\xAD\xA5\xE2 \xE7\xAB\xA5\xAD\xAE\xAC",
-				"act",
-				"\x8A\xE2\xAE \xE5\xAE\xE7\xA5\xE2 \xE1\xEB\xA3\xE0\xA0\xE2\xEC",
-				"\x8A\xE2\xAE \xAD\xA0\xA6\xAC\xF1\xE2",
-				"rub",
-				"pick",
-				"eat",
-				"sign",
-				"close",
-				"look",
-				"try"
+			"\x8A\xE2\xAE \xAE\xA1\xEB\xE9\xA5\xE2",                              // "Кто обыщет",
+			"\x8A\xE2\xAE \xAE\xE2\xAA\xE0\xAE\xA5\xE2",						  // "Кто откроет",
+			"\x8A\xE2\xAE \xA2\xEB\xAF\xEC\xA5\xE2",							  // "Кто выпьет",
+			"\x8A\xE2\xAE \xA1\xE3\xA4\xA5\xE2 \xAA\xAE\xAF\xA0\xE2\xEC",		  // "Кто будет копать",
+			"\x8A\xE2\xAE \xAF\xAE\xE2\xE0\xAE\xA3\xA0\xA5\xE2",				  // "Кто потрогает",
+			"\x8A\xE2\xAE \xAF\xE0\xAE\xE7\xE2\xF1\xE2",						  // "Кто прочтёт",
+			"\x8A\xAE\xA3\xAE \xAD\xA0\xE3\xE7\xA8\xE2\xEC",					  // "Кого научить",
+			"\x8A\xE2\xAE \xA2\xAE\xA7\xEC\xAC\xF1\xE2",						  // "Кто возьмёт",
+			"\x8A\xE2\xAE \xE3\xA4\xA0\xE0\xA8\xE2",							  // "Кто ударит",
+			"\x8A\xE2\xAE \xE3\xAA\xE0\xA0\xA4\xF1\xE2",						  // "Кто украдёт",
+			"\x8A\xE2\xAE \xA4\xA0\xE1\xE2 \xA2\xA7\xEF\xE2\xAA\xE3",			  // "Кто даст взятку",
+			"\x8A\xE2\xAE \xA7\xA0\xAF\xAB\xA0\xE2\xA8\xE2",					  // "Кто заплатит",
+			"\x8A\xE2\xAE \xAF\xE0\xA8\xE1\xEF\xA4\xA5\xE2",					  // "Кто присядет",
+			"\x8A\xE2\xAE \xAF\xAE\xAF\xE0\xAE\xA1\xE3\xA5\xE2",				  // "Кто попробует",
+			"\x8A\xE2\xAE \xA5\xA3\xAE \xAF\xAE\xA2\xA5\xE0\xAD\xF1\xE2",		  // "Кто его повернёт",
+			"\x8A\xE2\xAE \xA8\xE1\xAA\xE3\xAF\xAD\xF1\xE2\xE1\xEF",			  // "Кто искупнётся",
+			"\x8A\xE2\xAE \xA5\xA3\xAE \xE3\xAD\xA8\xE7\xE2\xAE\xA6\xA8\xE2",	  // "Кто его уничтожит",
+			"\x8A\xE2\xAE \xA2\xEB\xA4\xA5\xE0\xAD\xA5\xE2",					  // "Кто выдернет",
+			"\x8A\xE2\xAE \xE1\xAF\xE3\xE1\xE2\xA8\xE2\xE1\xEF",				  // "Кто спустится",
+			"\x8A\xE2\xAE \xA1\xE0\xAE\xE1\xA8\xE2 \xAC\xAE\xAD\xA5\xE2\xAA\xE3", // "Кто бросит монетку",
+			"pray",																  // "pray",
+			"\x8A\xE2\xAE \xE1\xE2\xA0\xAD\xA5\xE2 \xE7\xAB\xA5\xAD\xAE\xAC",	  // "Кто станет членом",
+			"act",																  // "act",
+			"\x8A\xE2\xAE \xE5\xAE\xE7\xA5\xE2 \xE1\xEB\xA3\xE0\xA0\xE2\xEC",	  // "Кто хочет сыграть",
+			"\x8A\xE2\xAE \xAD\xA0\xA6\xAC\xF1\xE2",							  // "Кто нажмёт",
+			"rub",																  // "rub",
+			"pick",																  // "pick",
+			"eat",																  // "eat",
+			"sign",																  // "sign",
+			"close",															  // "close",
+			"look",																  // "look",
+			"try"																  // "try"
 		};
 		return _whoActions;
 	}
 
-	/*
-	"Îòêðûòü ðåø¸òêó",
-	"Îòêðûòü äâåðü",
-	"Ðàñêðûòü ñâèòîê",
-	"Âûáåðèòå ïåðñîíàæà"
-	*/
 	const char **WHO_WILL_ACTIONS() {
 		delete[] _whoWillActions;
 		_whoWillActions = new const char *[4] {
-			"\x8E\xE2\xAA\xE0\xEB\xE2\xEC \xE0\xA5\xE8\xF1\xE2\xAA\xE3",
-				"\x8E\xE2\xAA\xE0\xEB\xE2\xEC \xA4\xA2\xA5\xE0\xEC",
-				"\x90\xA0\xE1\xAA\xE0\xEB\xE2\xEC \xE1\xA2\xA8\xE2\xAE\xAA",
-				"\x82\xEB\xA1\xA5\xE0\xA8\xE2\xA5 \xAF\xA5\xE0\xE1\xAE\xAD\xA0\xA6\xA0"
+			"\x8E\xE2\xAA\xE0\xEB\xE2\xEC \xE0\xA5\xE8\xF1\xE2\xAA\xE3",			// "Открыть решётку",
+			"\x8E\xE2\xAA\xE0\xEB\xE2\xEC \xA4\xA2\xA5\xE0\xEC",                    // "Открыть дверь",
+			"\x90\xA0\xE1\xAA\xE0\xEB\xE2\xEC \xE1\xA2\xA8\xE2\xAE\xAA",            // "Раскрыть свиток",
+			"\x82\xEB\xA1\xA5\xE0\xA8\xE2\xA5 \xAF\xA5\xE0\xE1\xAE\xAD\xA0\xA6\xA0" // "Выберите персонажа"
 		};
 		return _whoWillActions;
 	}
@@ -349,229 +248,137 @@ public:
 		return _directionTextUpper;
 	}
 
-	/*
-	"Ñåâåð",
-	"Âîñòîê",
-	"Þã",
-	"Çàïàä"
-	*/
 	const char **DIRECTION_TEXT() {
 		delete[] _directionText;
 		_directionText = new const char *[4] {
-			"\x91\xA5\xA2\xA5\xE0",
-				"\x82\xAE\xE1\xE2\xAE\xAA",
-				"\x9E\xA3",
-				"\x87\xA0\xAF\xA0\xA4"
+			"\x91\xA5\xA2\xA5\xE0",		// "Север",
+			"\x82\xAE\xE1\xE2\xAE\xAA", // "Восток",
+			"\x9E\xA3",                 // "Юг",
+			"\x87\xA0\xAF\xA0\xA4"      // "Запад"
 		};
 		return _directionText;
 	}
 
-	/*
-	"×åëîâåê",
-	"Ýëüô",
-	"Äâîðô",
-	"Ãíîì",
-	"Ïîëóîðê"
-	*/
 	const char **RACE_NAMES() {
 		delete[] _raceNames;
 		_raceNames = new const char *[5] {
-			"\x97\xA5\xAB\xAE\xA2\xA5\xAA",
-				"\x9D\xAB\xEC\xE4",
-				"\x84\xA2\xAE\xE0\xE4",
-				"\x83\xAD\xAE\xAC",
-				"\x8F\xAE\xAB\xE3\xAE\xE0\xAA"
+			"\x97\xA5\xAB\xAE\xA2\xA5\xAA", // "Человек",
+			"\x9D\xAB\xEC\xE4",				// "Эльф",
+			"\x84\xA2\xAE\xE0\xE4",			// "Дворф",
+			"\x83\xAD\xAE\xAC",				// "Гном",
+			"\x8F\xAE\xAB\xE3\xAE\xE0\xAA"	// "Полуорк"
 		};
 		return _raceNames;
 	}
 
-	/*
-	"Õîðîøèé",
-	"Íåéòðàë",
-	"Çëîé(-àÿ)"
-	*/
 	const char **ALIGNMENT_NAMES() {
 		delete[] _alignmentNames;
 		_alignmentNames = new const char *[3] {
-			"\x95\xAE\xE0\xAE\xE8\xA8\xA9",
-				"\x8D\xA5\xA9\xE2\xE0\xA0\xAB",
-				"\x87\xAB\xAE\xA9(-\xA0\xEF)"
+			"\x95\xAE\xE0\xAE\xE8\xA8\xA9", // "Хороший",
+			"\x8D\xA5\xA9\xE2\xE0\xA0\xAB",	// "Нейтрал",
+			"\x87\xAB\xAE\xA9(-\xA0\xEF)"	// "Злой(-ая)"
 		};
 		return _alignmentNames;
 	}
 
-	/*
-	"Ìóæ÷èíà",
-	"Æåíùèíà"
-	*/
 	const char **SEX_NAMES() {
 		delete[] _sexNames;
 		_sexNames = new const char *[2] {
-			"\x8C\xE3\xA6\xE7\xA8\xAD\xA0",
-				"\x86\xA5\xAD\xE9\xA8\xAD\xA0"
+			"\x8C\xE3\xA6\xE7\xA8\xAD\xA0", // "Мужчина",
+			"\x86\xA5\xAD\xE9\xA8\xAD\xA0"  // "Женщина"
 		};
 		return _sexNames;
 	}
 
-	/*
-	"Âîðîâñòâî\t100",
-	"Îðóæåéíèê",
-	"Àñòðîëîã",
-	"Àòëåò",
-	"Êàðòîãðàô",
-	"Êðåñòîíîñåö",
-	"×óâñòâî íàïðàâëåíèÿ",
-	"ßçûêîâåä",
-	"Êóïåö",
-	"Ñêàëîëàç",
-	"Øòóðìàí",
-	"Ñëåäîïûò",
-	"Ìàãèñòð ìîëèòâû",
-	"Ëîâêîñòü ïàëüöåâ",
-	"Ïëîâåö",
-	"Îõîòíèê",
-	"Âîñïðèÿòèå",
-	"×óâñòâî îïàñíîñòè"
-	*/
 	const char **SKILL_NAMES() {
 		delete[] _skillNames;
 		_skillNames = new const char *[18] {
-			"\x82\xAE\xE0\xAE\xA2\xE1\xE2\xA2\xAE\t100",
-				"\x8E\xE0\xE3\xA6\xA5\xA9\xAD\xA8\xAA",
-				"\x80\xE1\xE2\xE0\xAE\xAB\xAE\xA3",
-				"\x80\xE2\xAB\xA5\xE2",
-				"\x8A\xA0\xE0\xE2\xAE\xA3\xE0\xA0\xE4",
-				"\x8A\xE0\xA5\xE1\xE2\xAE\xAD\xAE\xE1\xA5\xE6",
-				"\x97\xE3\xA2\xE1\xE2\xA2\xAE \xAD\xA0\xAF\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xEF",
-				"\x9F\xA7\xEB\xAA\xAE\xA2\xA5\xA4",
-				"\x8A\xE3\xAF\xA5\xE6",
-				"\x91\xAA\xA0\xAB\xAE\xAB\xA0\xA7",
-				"\x98\xE2\xE3\xE0\xAC\xA0\xAD",
-				"\x91\xAB\xA5\xA4\xAE\xAF\xEB\xE2",
-				"\x8C\xA0\xA3\xA8\xE1\xE2\xE0 \xAC\xAE\xAB\xA8\xE2\xA2\xEB",
-				"\x8B\xAE\xA2\xAA\xAE\xE1\xE2\xEC \xAF\xA0\xAB\xEC\xE6\xA5\xA2",
-				"\x8F\xAB\xAE\xA2\xA5\xE6",
-				"\x8E\xE5\xAE\xE2\xAD\xA8\xAA",
-				"\x82\xAE\xE1\xAF\xE0\xA8\xEF\xE2\xA8\xA5",
-				"\x97\xE3\xA2\xE1\xE2\xA2\xAE \xAE\xAF\xA0\xE1\xAD\xAE\xE1\xE2\xA8"
+			"\x82\xAE\xE0\xAE\xA2\xE1\xE2\xA2\xAE\t100",								// "Воровство\t100",
+			"\x8E\xE0\xE3\xA6\xA5\xA9\xAD\xA8\xAA",                                      // "Оружейник",
+			"\x80\xE1\xE2\xE0\xAE\xAB\xAE\xA3",                                          // "Астролог",
+			"\x80\xE2\xAB\xA5\xE2",                                                      // "Атлет",
+			"\x8A\xA0\xE0\xE2\xAE\xA3\xE0\xA0\xE4",                                      // "Картограф",
+			"\x8A\xE0\xA5\xE1\xE2\xAE\xAD\xAE\xE1\xA5\xE6",                              // "Крестоносец",
+			"\x97\xE3\xA2\xE1\xE2\xA2\xAE \xAD\xA0\xAF\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xEF", // "Чувство направления",
+			"\x9F\xA7\xEB\xAA\xAE\xA2\xA5\xA4",                                          // "Языковед",
+			"\x8A\xE3\xAF\xA5\xE6",                                                      // "Купец",
+			"\x91\xAA\xA0\xAB\xAE\xAB\xA0\xA7",                                          // "Скалолаз",
+			"\x98\xE2\xE3\xE0\xAC\xA0\xAD",                                              // "Штурман",
+			"\x91\xAB\xA5\xA4\xAE\xAF\xEB\xE2",                                          // "Следопыт",
+			"\x8C\xA0\xA3\xA8\xE1\xE2\xE0 \xAC\xAE\xAB\xA8\xE2\xA2\xEB",                 // "Магистр молитвы",
+			"\x8B\xAE\xA2\xAA\xAE\xE1\xE2\xEC \xAF\xA0\xAB\xEC\xE6\xA5\xA2",             // "Ловкость пальцев",
+			"\x8F\xAB\xAE\xA2\xA5\xE6",                                                  // "Пловец",
+			"\x8E\xE5\xAE\xE2\xAD\xA8\xAA",                                              // "Охотник",
+			"\x82\xAE\xE1\xAF\xE0\xA8\xEF\xE2\xA8\xA5",                                  // "Восприятие",
+			"\x97\xE3\xA2\xE1\xE2\xA2\xAE \xAE\xAF\xA0\xE1\xAD\xAE\xE1\xE2\xA8"          // "Чувство опасности"
 		};
 		return _skillNames;
 	}
 
-	/*
-	"Ðûöàðü",
-	"Ïàëàäèí",
-	"Ëó÷íèê",
-	"Êëèðèê",
-	"Ìàã",
-	"Âîð",
-	"Íèíäçÿ",
-	"Âàðâàð",
-	"Äðóèä",
-	"Ñëåäîïûò",
-	nullptr
-	*/
 	const char **CLASS_NAMES() {
 		delete[] _classNames;
 		_classNames = new const char *[11] {
-			"\x90\xEB\xE6\xA0\xE0\xEC",
-				"\x8F\xA0\xAB\xA0\xA4\xA8\xAD",
-				"\x8B\xE3\xE7\xAD\xA8\xAA",
-				"\x8A\xAB\xA8\xE0\xA8\xAA",
-				"\x8C\xA0\xA3",
-				"\x82\xAE\xE0",
-				"\x8D\xA8\xAD\xA4\xA7\xEF",
-				"\x82\xA0\xE0\xA2\xA0\xE0",
-				"\x84\xE0\xE3\xA8\xA4",
-				"\x91\xAB\xA5\xA4\xAE\xAF\xEB\xE2",
-				nullptr
+			"\x90\xEB\xE6\xA0\xE0\xEC",			// "Рыцарь",
+			"\x8F\xA0\xAB\xA0\xA4\xA8\xAD",     // "Паладин",
+			"\x8B\xE3\xE7\xAD\xA8\xAA",         // "Лучник",
+			"\x8A\xAB\xA8\xE0\xA8\xAA",         // "Клирик",
+			"\x8C\xA0\xA3",                     // "Маг",
+			"\x82\xAE\xE0",                     // "Вор",
+			"\x8D\xA8\xAD\xA4\xA7\xEF",         // "Ниндзя",
+			"\x82\xA0\xE0\xA2\xA0\xE0",         // "Варвар",
+			"\x84\xE0\xE3\xA8\xA4",             // "Друид",
+			"\x91\xAB\xA5\xA4\xAE\xAF\xEB\xE2", // "Следопыт",
+			nullptr                             // nullptr
 		};
 		return _classNames;
 	}
 
-	/*
-	"Ïðîêëÿòèå",
-	"Heart Broken",
-	"Ñëàáîñòü",
-	"Îòðàâëåíèå",
-	"Áîëåçíü",
-	"Áåçóìèå",
-	"Âëþáë¸í(-à)",
-	"Íàâåñåëå",
-	"Ñîí",
-	"Â óíûíèè",
-	"Â ñìÿòåíèè",
-	"Ïàðàëè÷",
-	"Á.ñîçíàíèÿ",
-	"Ìåðòâ",
-	"Êàìåíü",
-	"Óíè÷òîæåí",
-	"Õîðîøåå"
-	*/
 	const char **CONDITION_NAMES() {
 		delete[] _conditionNames;
 		_conditionNames = new const char *[17] {
-			"\x8F\xE0\xAE\xAA\xAB\xEF\xE2\xA8\xA5",
-				"Heart Broken",
-				"\x91\xAB\xA0\xA1\xAE\xE1\xE2\xEC",
-				"\x8E\xE2\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xA5",
-				"\x81\xAE\xAB\xA5\xA7\xAD\xEC",
-				"\x81\xA5\xA7\xE3\xAC\xA8\xA5",
-				"\x82\xAB\xEE\xA1\xAB\xF1\xAD(-\xA0)",
-				"\x8D\xA0\xA2\xA5\xE1\xA5\xAB\xA5",
-				"\x91\xAE\xAD",
-				"\x82 \xE3\xAD\xEB\xAD\xA8\xA8",
-				"\x82 \xE1\xAC\xEF\xE2\xA5\xAD\xA8\xA8",
-				"\x8F\xA0\xE0\xA0\xAB\xA8\xE7",
-				"\x81.\xE1\xAE\xA7\xAD\xA0\xAD\xA8\xEF",
-				"\x8C\xA5\xE0\xE2\xA2",
-				"\x8A\xA0\xAC\xA5\xAD\xEC",
-				"\x93\xAD\xA8\xE7\xE2\xAE\xA6\xA5\xAD",
-				"\x95\xAE\xE0\xAE\xE8\xA5\xA5"
+			"\x8F\xE0\xAE\xAA\xAB\xEF\xE2\xA8\xA5",		// "Проклятие",
+			"Heart Broken",                             // "Heart Broken",
+			"\x91\xAB\xA0\xA1\xAE\xE1\xE2\xEC",         // "Слабость",
+			"\x8E\xE2\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xA5", // "Отравление",
+			"\x81\xAE\xAB\xA5\xA7\xAD\xEC",             // "Болезнь",
+			"\x81\xA5\xA7\xE3\xAC\xA8\xA5",             // "Безумие",
+			"\x82\xAB\xEE\xA1\xAB\xF1\xAD(-\xA0)",      // "Влюблён(-а)",
+			"\x8D\xA0\xA2\xA5\xE1\xA5\xAB\xA5",         // "Навеселе",
+			"\x91\xAE\xAD",                             // "Сон",
+			"\x82 \xE3\xAD\xEB\xAD\xA8\xA8",            // "В унынии",
+			"\x82 \xE1\xAC\xEF\xE2\xA5\xAD\xA8\xA8",    // "В смятении",
+			"\x8F\xA0\xE0\xA0\xAB\xA8\xE7",             // "Паралич",
+			"\x81.\xE1\xAE\xA7\xAD\xA0\xAD\xA8\xEF",    // "Б.сознания",
+			"\x8C\xA5\xE0\xE2\xA2",                     // "Мертв",
+			"\x8A\xA0\xAC\xA5\xAD\xEC",                 // "Камень",
+			"\x93\xAD\xA8\xE7\xE2\xAE\xA6\xA5\xAD",     // "Уничтожен",
+			"\x95\xAE\xE0\xAE\xE8\xA5\xA5"              // "Хорошее"
 		};
 		return _conditionNames;
 	}
 
-	/*
-	"Õîðîøåå"
-	*/
 	const char *GOOD() {
-		return "\x95\xAE\xE0\xAE\xE8\xA5\xA5";
+		return "\x95\xAE\xE0\xAE\xE8\xA5\xA5"; // "Хорошее"
 	}
 
-	/*
-	"\n\t014Áëàãîñëîâåíèå\t095%+d"
-	*/
 	const char *BLESSED() {
-		return "\n\t014\x81\xAB\xA0\xA3\xAE\xE1\xAB\xAE\xA2\xA5\xAD\xA8\xA5\t095%+d";
+		return "\n\t014\x81\xAB\xA0\xA3\xAE\xE1\xAB\xAE\xA2\xA5\xAD\xA8\xA5\t095%+d"; // "\n\t014Благословение\t095%+d"
 	}
 
-	/*
-	"\n\t014Ñèëîâîé ùèò\t095%+d";
-	*/
 	const char *POWER_SHIELD() {
-		return "\n\t014\x91\xA8\xAB\xAE\xA2\xAE\xA9 \xE9\xA8\xE2\t095%+d";
+		return "\n\t014\x91\xA8\xAB\xAE\xA2\xAE\xA9 \xE9\xA8\xE2\t095%+d"; // "\n\t014Силовой щит\t095%+d";
 	}
 
-	/*
-	"\n\t014Ñâÿòîé äàð\t095%+d"
-	*/
 	const char *HOLY_BONUS() {
-		return "\n\t014\x91\xA2\xEF\xE2\xAE\xA9 \xA4\xA0\xE0\t095%+d";
+		return "\n\t014\x91\xA2\xEF\xE2\xAE\xA9 \xA4\xA0\xE0\t095%+d"; // "\n\t014Святой дар\t095%+d"
 	}
 
-	/*
-	"\n\t014Ìóæåñòâî\t095%+d"
-	*/
 	const char *HEROISM() {
-		return "\n\t014\x8C\xE3\xA6\xA5\xE1\xE2\xA2\xAE\t095%+d";
+		return "\n\t014\x8C\xE3\xA6\xA5\xE1\xE2\xA2\xAE\t095%+d"; // "\n\t014Мужество\t095%+d"
 	}
 
-	/*
-	"\f15Â îòðÿäå\fd"
-	*/
 	const char *IN_PARTY() {
-		return "\f15\x82 \xAE\xE2\xE0\xEF\xA4\xA5\fd";
+		return "\f15\x82 \xAE\xE2\xE0\xEF\xA4\xA5\fd"; // "\f15В отряде\fd"
 	}
 
 	const char *PARTY_DETAILS() {
@@ -643,443 +450,211 @@ public:
 			   "136%s";
 	}
 
-	/*
-	"%s\x2\x3""c\v106\t013Ââåðõ\t048Âíèç\t083\f37Ó\fdäàë\t118\f37Â\fdûãí"
-	"\t153\f37Ñ\fdîçä\t188Â\f37û\fdõîä\x1";
-	*/
 	const char *PARTY_DIALOG_TEXT() {
-		return "%s\x2\x3"
-			   "c\v106\t013\x82\xA2\xA5\xE0\xE5\t048\x82\xAD\xA8\xA7\t083\f37\x93\fd\xA4\xA0\xAB\t118\f37\x82\fd\xEB\xA3\xAD"
-			   "\t153\f37\x91\fd\xAE\xA7\xA4\t188\x82\f37\xEB\fd\xE5\xAE\xA4\x1";
+		return "%s\x2\x3""c\v106\t013\x82\xA2\xA5\xE0\xE5\t048\x82\xAD\xA8\xA7\t083\f37\x93\fd\xA4\xA0\xAB\t118\f37\x82\fd\xEB\xA3\xAD" // "%s\x2\x3""c\v106\t013Вверх\t048Вниз\t083\f37У\fdдал\t118\f37В\fdыгн"
+			   "\t153\f37\x91\fd\xAE\xA7\xA4\t188\x82\f37\xEB\fd\xE5\xAE\xA4\x1";                                                       // "\t153\f37С\fdозд\t188В\f37ы\fdход\x1";
 	}
 
-	/*
-	"Âàì íå ñ êåì ïóòåøåñòâîâàòü"
-	*/
 	const char *NO_ONE_TO_ADVENTURE_WITH() {
-		return "\x82\xA0\xAC \xAD\xA5 \xE1 \xAA\xA5\xAC \xAF\xE3\xE2\xA5\xE8\xA5\xE1\xE2\xA2\xAE\xA2\xA0\xE2\xEC";
+		return "\x82\xA0\xAC \xAD\xA5 \xE1 \xAA\xA5\xAC \xAF\xE3\xE2\xA5\xE8\xA5\xE1\xE2\xA2\xAE\xA2\xA0\xE2\xEC"; // "Вам не с кем путешествовать"
 	}
 
-	/*
-	"Âàø ñïèñîê ïîëîí!"
-	*/
 	const char *YOUR_ROSTER_IS_FULL() {
-		return "\x82\xA0\xE8 \xE1\xAF\xA8\xE1\xAE\xAA \xAF\xAE\xAB\xAE\xAD!";
+		return "\x82\xA0\xE8 \xE1\xAF\xA8\xE1\xAE\xAA \xAF\xAE\xAB\xAE\xAD!"; // "Ваш список полон!"
 	}
 
-	/*
-	"\fd\x3""c\t000\v002Ïîäîæäèòå..."
-	*/
 	const char *PLEASE_WAIT() {
-		return "\fd\x3"
-			   "c\t000\v002\x8F\xAE\xA4\xAE\xA6\xA4\xA8\xE2\xA5...";
+		return "\fd\x3""c\t000\v002\x8F\xAE\xA4\xAE\xA6\xA4\xA8\xE2\xA5..."; // "\fd\x3""c\t000\v002Подождите..."
 	}
 
-	/*
-	"\x3""c\t000\v002Óïñ..."
-	*/
 	const char *OOPS() {
-		return "\x3"
-			   "c\t000\v002\x93\xAF\xE1...";
-	}
-
-	/*
-	"\r\x2\x3""c\v122\t013"
-	"\f37Â\fdêë\t040\f37Ñ\fdí\t067ESC"
-	"\x1\t000\v000Áàíê Êñèíà\v015\n"
-	"Áàíê\x3""l\n"
-	"Çîë\x3""r\t000%s\x3""l\n"
-	"Àëìç\x3""r\t000%s\x3""c\n"
-	"\n"
-	"Îòðÿä\x3""l\n"
-	"Çîë\x3""r\t000%s\x3""l\n"
-	"Àëìç\x3""r\t000%s";
-	*/
+		return "\x3""c\t000\v002\x93\xAF\xE1..."; // "\x3""c\t000\v002Упс..."
+	}
+
 	const char *BANK_TEXT() {
-		return "\r\x2\x3"
-			   "c\v122\t013"
-			   "\f37\x82\fd\xAA\xAB\t040\f37\x91\fd\xAD\t067ESC"
-			   "\x1\t000\v000\x81\xA0\xAD\xAA \x8A\xE1\xA8\xAD\xA0\v015\n"
-			   "\x81\xA0\xAD\xAA\x3"
-			   "l\n"
-			   "\x87\xAE\xAB\x3"
-			   "r\t000%s\x3"
-			   "l\n"
-			   "\x80\xAB\xAC\xA7\x3"
-			   "r\t000%s\x3"
-			   "c\n"
-			   "\n"
-			   "\x8E\xE2\xE0\xEF\xA4\x3"
-			   "l\n"
-			   "\x87\xAE\xAB\x3"
-			   "r\t000%s\x3"
-			   "l\n"
-			   "\x80\xAB\xAC\xA7\x3"
-			   "r\t000%s";
+		return "\r\x2\x3""c\v122\t013"									   // "\r\x2\x3""c\v122\t013"
+			   "\f37\x82\fd\xAA\xAB\t040\f37\x91\fd\xAD\t067ESC"		   // "\f37В\fdкл\t040\f37С\fdн\t067ESC"
+			   "\x1\t000\v000\x81\xA0\xAD\xAA \x8A\xE1\xA8\xAD\xA0\v015\n" // "\x1\t000\v000Банк Ксина\v015\n"
+			   "\x81\xA0\xAD\xAA\x3""l\n"								   // "Банк\x3""l\n"
+			   "\x87\xAE\xAB\x3""r\t000%s\x3""l\n"						   // "Зол\x3""r\t000%s\x3""l\n"
+			   "\x80\xAB\xAC\xA7\x3""r\t000%s\x3""c\n"					   // "Алмз\x3""r\t000%s\x3""c\n"
+			   "\n"														   // "\n"
+			   "\x8E\xE2\xE0\xEF\xA4\x3""l\n"							   // "Отряд\x3""l\n"
+			   "\x87\xAE\xAB\x3""r\t000%s\x3""l\n"						   // "Зол\x3""r\t000%s\x3""l\n"
+			   "\x80\xAB\xAC\xA7\x3""r\t000%s";							   // "Алмз\x3""r\t000%s";
 	}
 
-	/*
-	"\x1\r\x3""c\v000\t000"
-	"Ëàâêà\t039\v027%s\x3""l\v046\n"
-	"\t011\f37Ñ\fdìîòðåòü\n"
-	"\t000\v090Çîë\x3""r\t000%s"
-	"\x2\x3""c\v122\t040ESC\x1";
-	*/
 	const char *BLACKSMITH_TEXT() {
-		return "\x1\r\x3"
-			   "c\v000\t000"
-			   "\x8B\xA0\xA2\xAA\xA0\t039\v027%s\x3"
-			   "l\v046\n"
-			   "\t011\f37\x91\fd\xAC\xAE\xE2\xE0\xA5\xE2\xEC\n"
-			   "\t000\v090\x87\xAE\xAB\x3"
-			   "r\t000%s"
-			   "\x2\x3"
-			   "c\v122\t040ESC\x1";
-	}
-
-	/*
-	"\nÂû äîëæíû áûòü ÷ëåíîì ãèëüäèè, ÷òîáû ïîêóïàòü çàêëèíàíèÿ."
-	*/
+		return "\x1\r\x3""c\v000\t000"							// "\x1\r\x3""c\v000\t000"
+			   "\x8B\xA0\xA2\xAA\xA0\t039\v027%s\x3""l\v046\n"  // "Лавка\t039\v027%s\x3""l\v046\n"
+			   "\t011\f37\x91\fd\xAC\xAE\xE2\xE0\xA5\xE2\xEC\n" // "\t011\f37С\fdмотреть\n"
+			   "\t000\v090\x87\xAE\xAB\x3""r\t000%s"            // "\t000\v090Зол\x3""r\t000%s"
+			   "\x2\x3""c\v122\t040ESC\x1";                     // "\x2\x3""c\v122\t040ESC\x1";
+	}
+
 	const char *GUILD_NOT_MEMBER_TEXT() {
-		return "\n\x82\xEB \xA4\xAE\xAB\xA6\xAD\xEB \xA1\xEB\xE2\xEC \xE7\xAB\xA5\xAD\xAE\xAC \xA3\xA8\xAB\xEC\xA4\xA8\xA8, \xE7\xE2\xAE\xA1\xEB \xAF\xAE\xAA\xE3\xAF\xA0\xE2\xEC \xA7\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xEF.";
+		return "\n\x82\xEB \xA4\xAE\xAB\xA6\xAD\xEB \xA1\xEB\xE2\xEC \xE7\xAB\xA5\xAD\xAE\xAC \xA3\xA8\xAB\xEC\xA4\xA8\xA8, \xE7\xE2\xAE\xA1\xEB \xAF\xAE\xAA\xE3\xAF\xA0\xE2\xEC \xA7\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xEF."; // "\nВы должны быть членом гильдии, чтобы покупать заклинания."
 	}
 
-	/*
-	"\x3""c\v027\t039%s"
-	"\x3""l\v046\n"
-	"\t012\f37Ê\fdóïèòü\n"
-	"\t012\f37Î\fdïèñàíèÿ";
-	*/
 	const char *GUILD_TEXT() {
-		return "\x3"
-			   "c\v027\t039%s"
-			   "\x3"
-			   "l\v046\n"
-			   "\t012\f37\x8A\fd\xE3\xAF\xA8\xE2\xEC\n"
-			   "\t012\f37\x8E\fd\xAF\xA8\xE1\xA0\xAD\xA8\xEF";
+		return "\x3""c\v027\t039%s"							   // "\x3""c\v027\t039%s"
+			   "\x3""l\v046\n"                                 // "\x3""l\v046\n"
+			   "\t012\f37\x8A\fd\xE3\xAF\xA8\xE2\xEC\n"        // "\t012\f37К\fdупить\n"
+			   "\t012\f37\x8E\fd\xAF\xA8\xE1\xA0\xAD\xA8\xEF"; // "\t012\f37О\fdписания";
 	}
 
-	/*
-	"\r\x3""c\v000\t000Òàâåðíà\t039"
-	"\v027%s%s\x3""l\t000"
-	"\v090Çîë\x3""r\t000%s\x2\x3""c\v122"
-	"\t021\f37Î\fdòäûõ\t060ESC\x1";
-	*/
 	const char *TAVERN_TEXT() {
-		return "\r\x3"
-			   "c\v000\t000\x92\xA0\xA2\xA5\xE0\xAD\xA0\t039"
-			   "\v027%s%s\x3"
-			   "l\t000"
-			   "\v090\x87\xAE\xAB\x3"
-			   "r\t000%s\x2\x3"
-			   "c\v122"
-			   "\t021\f37\x8E\fd\xE2\xA4\xEB\xE5\t060ESC\x1";
-	}
-
-	/*
-	"\x3""l\t017\v046\f37Â\fdûïèòü\n"
-	"\t017\f37Å\fdäà\n"
-	"\t017\f37×\fdàåâûå\n"
-	"\t017\f37Ñ\fdëóõè";
-	*/
+		return "\r\x3""c\v000\t000\x92\xA0\xA2\xA5\xE0\xAD\xA0\t039" // "\r\x3""c\v000\t000Таверна\t039"
+			   "\v027%s%s\x3""l\t000"                                // "\v027%s%s\x3""l\t000"
+			   "\v090\x87\xAE\xAB\x3""r\t000%s\x2\x3""c\v122"        // "\v090Зол\x3""r\t000%s\x2\x3""c\v122"
+			   "\t021\f37\x8E\fd\xE2\xA4\xEB\xE5\t060ESC\x1";        // "\t021\f37О\fdтдых\t060ESC\x1";
+	}
+
 	const char *FOOD_AND_DRINK() {
-		return "\x3"
-			   "l\t017\v046\f37\x82\fd\xEB\xAF\xA8\xE2\xEC\n"
-			   "\t017\f37\x85\fd\xA4\xA0\n"
-			   "\t017\f37\x97\fd\xA0\xA5\xA2\xEB\xA5\n"
-			   "\t017\f37\x91\fd\xAB\xE3\xE5\xA8";
-	}
-
-	/*
-	"\n"
-	"\n"
-	"Íåäóðíî\n"
-	"\n"
-	"Íàæìèòå êëàâèøó!";
-	*/
+		return "\x3""l\t017\v046\f37\x82\fd\xEB\xAF\xA8\xE2\xEC\n" // "\x3""l\t017\v046\f37В\fdыпить\n"
+			   "\t017\f37\x85\fd\xA4\xA0\n"                        // "\t017\f37Е\fdда\n"
+			   "\t017\f37\x97\fd\xA0\xA5\xA2\xEB\xA5\n"            // "\t017\f37Ч\fdаевые\n"
+			   "\t017\f37\x91\fd\xAB\xE3\xE5\xA8";                 // "\t017\f37С\fdлухи";
+	}
+
 	const char *GOOD_STUFF() {
-		return "\n"
-			   "\n"
-			   "\x8D\xA5\xA4\xE3\xE0\xAD\xAE\n"
-			   "\n"
-			   "\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3!";
+		return "\n"															 // "\n"
+			   "\n"                                                          // "\n"
+			   "\x8D\xA5\xA4\xE3\xE0\xAD\xAE\n"                              // "Недурно\n"
+			   "\n"                                                          // "\n"
+			   "\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3!"; // "Нажмите клавишу!";
 	}
 
-	/*
-	"\nÑïåðâà âûïåéòå\n\nÍàæìèòå êëàâèøó!"
-	*/
 	const char *HAVE_A_DRINK() {
-		return "\n\x91\xAF\xA5\xE0\xA2\xA0 \xA2\xEB\xAF\xA5\xA9\xE2\xA5\n\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3!";
+		return "\n\x91\xAF\xA5\xE0\xA2\xA0 \xA2\xEB\xAF\xA5\xA9\xE2\xA5\n\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3!"; // "\nСперва выпейте\n\nНажмите клавишу!"
 	}
 
-	/*
-	"\n\nÂû ïüÿíû\n\nÍàæìèòå êëàâèøó!"
-	*/
 	const char *YOURE_DRUNK() {
-		return "\n\n\x82\xEB \xAF\xEC\xEF\xAD\xEB\n\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3!";
-	}
-
-	/*
-	"\r\x3""c\v000\t000Õðàì"
-	"\t039\v027%s\x3""l\t000\v046"
-	"\f37Ë\fdå÷èòü\x3""r\t000%lu\x3""l\n"
-	"\f37Ä\fdàð\x3""r\t000%lu\x3""l\n"
-	"\f37Ñ\fdíÏðîêë\x3""r\t000%s"
-	"\x3""l\t000\v090Çîë\x3""r\t000%s"
-	"\x2\x3""c\v122\t040ESC\x1";
-	*/
+		return "\n\n\x82\xEB \xAF\xEC\xEF\xAD\xEB\n\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3!"; // "\n\nВы пьяны\n\nНажмите клавишу!"
+	}
+
 	const char *TEMPLE_TEXT() {
-		return "\r\x3"
-			   "c\v000\t000\x95\xE0\xA0\xAC"
-			   "\t039\v027%s\x3"
-			   "l\t000\v046"
-			   "\f37\x8B\fd\xA5\xE7\xA8\xE2\xEC\x3"
-			   "r\t000%lu\x3"
-			   "l\n"
-			   "\f37\x84\fd\xA0\xE0\x3"
-			   "r\t000%lu\x3"
-			   "l\n"
-			   "\f37\x91\fd\xAD\x8F\xE0\xAE\xAA\xAB\x3"
-			   "r\t000%s"
-			   "\x3"
-			   "l\t000\v090\x87\xAE\xAB\x3"
-			   "r\t000%s"
-			   "\x2\x3"
-			   "c\v122\t040ESC\x1";
+		return "\r\x3""c\v000\t000\x95\xE0\xA0\xAC"					   // "\r\x3""c\v000\t000Храм"
+			   "\t039\v027%s\x3""l\t000\v046"                          // "\t039\v027%s\x3""l\t000\v046"
+			   "\f37\x8B\fd\xA5\xE7\xA8\xE2\xEC\x3""r\t000%lu\x3""l\n" // "\f37Л\fdечить\x3""r\t000%lu\x3""l\n"
+			   "\f37\x84\fd\xA0\xE0\x3""r\t000%lu\x3""l\n"             // "\f37Д\fdар\x3""r\t000%lu\x3""l\n"
+			   "\f37\x91\fd\xAD\x8F\xE0\xAE\xAA\xAB\x3""r\t000%s"      // "\f37С\fdнПрокл\x3""r\t000%s"
+			   "\x3""l\t000\v090\x87\xAE\xAB\x3""r\t000%s"             // "\x3""l\t000\v090Зол\x3""r\t000%s"
+			   "\x2\x3""c\v122\t040ESC\x1";                            // "\x2\x3""c\v122\t040ESC\x1";
 	}
 
-	/*
-	"%s\nÍóæíî %lu î÷êîâ îïûòà äëÿ óðîâíÿ %u."
-	*/
 	const char *EXPERIENCE_FOR_LEVEL() {
-		return "%s\n\x8D\xE3\xA6\xAD\xAE %lu \xAE\xE7\xAA\xAE\xA2 \xAE\xAF\xEB\xE2\xA0 \xA4\xAB\xEF \xE3\xE0\xAE\xA2\xAD\xEF %u.";
+		return "%s\n\x8D\xE3\xA6\xAD\xAE %lu \xAE\xE7\xAA\xAE\xA2 \xAE\xAF\xEB\xE2\xA0 \xA4\xAB\xEF \xE3\xE0\xAE\xA2\xAD\xEF %u."; // "%s\nНужно %lu очков опыта для уровня %u."
 	}
 
-	/*
-	"%s\nÂû óæå çíàåòå âñ¸, ÷åìó ìû ìîæåì âàñ íàó÷èòü!"
-	*/
 	const char *TRAINING_LEARNED_ALL() {
-		return "%s\n\x82\xEB \xE3\xA6\xA5 \xA7\xAD\xA0\xA5\xE2\xA5 \xA2\xE1\xF1, \xE7\xA5\xAC\xE3 \xAC\xEB \xAC\xAE\xA6\xA5\xAC \xA2\xA0\xE1 \xAD\xA0\xE3\xE7\xA8\xE2\xEC!";
+		return "%s\n\x82\xEB \xE3\xA6\xA5 \xA7\xAD\xA0\xA5\xE2\xA5 \xA2\xE1\xF1, \xE7\xA5\xAC\xE3 \xAC\xEB \xAC\xAE\xA6\xA5\xAC \xA2\xA0\xE1 \xAD\xA0\xE3\xE7\xA8\xE2\xEC!"; // "%s\nВы уже знаете всё, чему мы можем вас научить!"
 	}
 
-	/*
-	"%s ìîæåò îáó÷àòüñÿ äî óðîâíÿ %d.\x3""l\n"
-	"\v081Öåíà\x3""r\t000%lu";
-	*/
 	const char *ELIGIBLE_FOR_LEVEL() {
-		return "%s \xAC\xAE\xA6\xA5\xE2 \xAE\xA1\xE3\xE7\xA0\xE2\xEC\xE1\xEF \xA4\xAE \xE3\xE0\xAE\xA2\xAD\xEF %d.\x3"
-			   "l\n"
-			   "\v081\x96\xA5\xAD\xA0\x3"
-			   "r\t000%lu";
+		return "%s \xAC\xAE\xA6\xA5\xE2 \xAE\xA1\xE3\xE7\xA0\xE2\xEC\xE1\xEF \xA4\xAE \xE3\xE0\xAE\xA2\xAD\xEF %d.\x3" // "%s может обучаться до уровня %d.\x3""l\n"
+			   "l\n""\v081\x96\xA5\xAD\xA0\x3""r\t000%lu";                                                             // "\v081Цена\x3""r\t000%lu";
 	}
 
-	/*
-	"\r\x3""cÎáó÷åíèå\n"
-	"\n"
-	"%s\x3""l\v090\t000Çîë\x3""r\t000%s\x2\x3""c\v122\t021"
-	"\f37Î\fdáó÷åíèå\t060ESC\x1";
-	*/
 	const char *TRAINING_TEXT() {
-		return "\r\x3"
-			   "c\x8E\xA1\xE3\xE7\xA5\xAD\xA8\xA5\n"
-			   "\n"
-			   "%s\x3"
-			   "l\v090\t000\x87\xAE\xAB\x3"
-			   "r\t000%s\x2\x3"
-			   "c\v122\t021"
-			   "\f37\x8E\fd\xA1\xE3\xE7\xA5\xAD\xA8\xA5\t060ESC\x1";
-	}
-
-	/*
-	"\x3""c\v000\t000%s\x3""l\n"
-	"\n"
-	"Çîë\x3""r\t000%s\x3""l\n"
-	"Àëìç\x3""r\t000%s\x2\x3""c\v096\t007\f37À\fdëìç\t035\f37Ç\fdîë\t067ESC\x1";
-	*/
+		return "\r\x3""c\x8E\xA1\xE3\xE7\xA5\xAD\xA8\xA5\n"						// "\r\x3""cОбучение\n"
+			   "\n"                                                             // "\n"
+			   "%s\x3""l\v090\t000\x87\xAE\xAB\x3""r\t000%s\x2\x3""c\v122\t021" // "%s\x3""l\v090\t000Зол\x3""r\t000%s\x2\x3""c\v122\t021"
+			   "\f37\x8E\fd\xA1\xE3\xE7\xA5\xAD\xA8\xA5\t060ESC\x1";            // "\f37О\fdбучение\t060ESC\x1";
+	}
+
 	const char *GOLD_GEMS() {
-		return "\x3"
-			   "c\v000\t000%s\x3"
-			   "l\n"
-			   "\n"
-			   "\x87\xAE\xAB\x3"
-			   "r\t000%s\x3"
-			   "l\n"
-			   "\x80\xAB\xAC\xA7\x3"
-			   "r\t000%s\x2\x3"
-			   "c\v096\t007\f37\x80\fd\xAB\xAC\xA7\t035\f37\x87\fd\xAE\xAB\t067ESC\x1";
-	}
-
-	/*
-	"\t000\v000\x3""c%s\x3""l\n"
-	"\n"
-	"\x4""077Çîë\x3""r\t000%s\x3""l\n"
-	"\x4""077Àëìç\x3""r\t000%s\x3""l\t000\v051\x4""077\n"
-	"\x4""077";
-	*/
+		return "\x3""c\v000\t000%s\x3""l\n"																					 // "\x3""c\v000\t000%s\x3""l\n"
+			   "\n"																											 // "\n"
+			   "\x87\xAE\xAB\x3""r\t000%s\x3""l\n"																			 // "Зол\x3""r\t000%s\x3""l\n"
+			   "\x80\xAB\xAC\xA7\x3""r\t000%s\x2\x3""c\v096\t007\f37\x80\fd\xAB\xAC\xA7\t035\f37\x87\fd\xAE\xAB\t067ESC\x1"; // "Алмз\x3""r\t000%s\x2\x3""c\v096\t007\f37А\fdлмз\t035\f37З\fdол\t067ESC\x1";
+	}
+
 	const char *GOLD_GEMS_2() {
-		return "\t000\v000\x3"
-			   "c%s\x3"
-			   "l\n"
-			   "\n"
-			   "\x4"
-			   "077\x87\xAE\xAB\x3"
-			   "r\t000%s\x3"
-			   "l\n"
-			   "\x4"
-			   "077\x80\xAB\xAC\xA7\x3"
-			   "r\t000%s\x3"
-			   "l\t000\v051\x4"
-			   "077\n"
-			   "\x4"
-			   "077";
+		return "\t000\v000\x3""c%s\x3""l\n"										 // "\t000\v000\x3""c%s\x3""l\n"
+			   "\n"                                                              // "\n"
+			   "\x4""077\x87\xAE\xAB\x3""r\t000%s\x3""l\n"                       // "\x4""077Зол\x3""r\t000%s\x3""l\n"
+			   "\x4""077\x80\xAB\xAC\xA7\x3""r\t000%s\x3""l\t000\v051\x4""077\n" // "\x4""077Алмз\x3""r\t000%s\x3""l\t000\v051\x4""077\n"
+			   "\x4""077";                                                       // "\x4""077";
 	}
 
-	/*
-	"Ïîëîæèòü íà ñ÷¸ò", "Ñíÿòü ñî ñ÷¸òà"
-	*/
 	const char **DEPOSIT_WITHDRAWL() {
 		delete[] _depositWithdrawl;
-		_depositWithdrawl = new const char *[2] { "\x8F\xAE\xAB\xAE\xA6\xA8\xE2\xEC \xAD\xA0 \xE1\xE7\xF1\xE2", "\x91\xAD\xEF\xE2\xEC \xE1\xAE \xE1\xE7\xF1\xE2\xA0" };
+		_depositWithdrawl = new const char *[2] { "\x8F\xAE\xAB\xAE\xA6\xA8\xE2\xEC \xAD\xA0 \xE1\xE7\xF1\xE2", "\x91\xAD\xEF\xE2\xEC \xE1\xAE \xE1\xE7\xF1\xE2\xA0" }; // "Положить на счёт", "Снять со счёта"
 		return _depositWithdrawl;
 	}
 
-	/*
-	"\x3""c\v012Íåäîñòàòî÷íî %s %s!\x3""l"
-	*/
 	const char *NOT_ENOUGH_X_IN_THE_Y() {
-		return "\x3"
-			   "c\v012\x8D\xA5\xA4\xAE\xE1\xE2\xA0\xE2\xAE\xE7\xAD\xAE %s %s!\x3"
-			   "l";
+		return "\x3""c\v012\x8D\xA5\xA4\xAE\xE1\xE2\xA0\xE2\xAE\xE7\xAD\xAE %s %s!\x3""l"; // "\x3""c\v012Недостаточно %s %s!\x3""l"
 	}
 
-	/*
-	"\x3""c\v012Íåò %s %s!\x3""l"
-	*/
 	const char *NO_X_IN_THE_Y() {
-		return "\x3"
-			   "c\v012\x8D\xA5\xE2 %s %s!\x3"
-			   "l";
+		return "\x3""c\v012\x8D\xA5\xE2 %s %s!\x3""l"; // "\x3""c\v012Нет %s %s!\x3""l"
 	}
 
-	/*
-	"Ñèëà", "Èíòåëëåêò", "Ñèëà äóõà", "Ñëîæåíèå", "Ñêîðîñòü",
-	"Ìåòêîñòü", "Óäà÷à", "Âîçðàñò", "Óðîâåíü", "Êëàññ çàùèòû", "Çäîðîâüå",
-	"Î÷êè ìàãèè", "Óñòîé÷èâîñòè", "Íàâûêè", "Íàãðàäû", "Îïûò"
-	*/
 	const char **STAT_NAMES() {
 		delete[] _statNames;
 		_statNames = new const char *[16] {
-			"\x91\xA8\xAB\xA0", "\x88\xAD\xE2\xA5\xAB\xAB\xA5\xAA\xE2", "\x91\xA8\xAB\xA0 \xA4\xE3\xE5\xA0", "\x91\xAB\xAE\xA6\xA5\xAD\xA8\xA5", "\x91\xAA\xAE\xE0\xAE\xE1\xE2\xEC",
-				"\x8C\xA5\xE2\xAA\xAE\xE1\xE2\xEC", "\x93\xA4\xA0\xE7\xA0", "\x82\xAE\xA7\xE0\xA0\xE1\xE2", "\x93\xE0\xAE\xA2\xA5\xAD\xEC", "\x8A\xAB\xA0\xE1\xE1 \xA7\xA0\xE9\xA8\xE2\xEB", "\x87\xA4\xAE\xE0\xAE\xA2\xEC\xA5",
-				"\x8E\xE7\xAA\xA8 \xAC\xA0\xA3\xA8\xA8", "\x93\xE1\xE2\xAE\xA9\xE7\xA8\xA2\xAE\xE1\xE2\xA8", "\x8D\xA0\xA2\xEB\xAA\xA8", "\x8D\xA0\xA3\xE0\xA0\xA4\xEB", "\x8E\xAF\xEB\xE2"
+			"\x91\xA8\xAB\xA0", "\x88\xAD\xE2\xA5\xAB\xAB\xA5\xAA\xE2", "\x91\xA8\xAB\xA0 \xA4\xE3\xE5\xA0", "\x91\xAB\xAE\xA6\xA5\xAD\xA8\xA5", "\x91\xAA\xAE\xE0\xAE\xE1\xE2\xEC",	 // "Сила", "Интеллект", "Сила духа", "Сложение", "Скорость",
+			"\x8C\xA5\xE2\xAA\xAE\xE1\xE2\xEC", "\x93\xA4\xA0\xE7\xA0", "\x82\xAE\xA7\xE0\xA0\xE1\xE2", "\x93\xE0\xAE\xA2\xA5\xAD\xEC", "\x8A\xAB\xA0\xE1\xE1 \xA7\xA0\xE9\xA8\xE2\xEB", // "Меткость", "Удача", "Возраст", "Уровень", "Класс защиты", "Здоровье", "\x87\xA4\xAE\xE0\xAE\xA2\xEC\xA5",
+			"\x8E\xE7\xAA\xA8 \xAC\xA0\xA3\xA8\xA8", "\x93\xE1\xE2\xAE\xA9\xE7\xA8\xA2\xAE\xE1\xE2\xA8", "\x8D\xA0\xA2\xEB\xAA\xA8", "\x8D\xA0\xA3\xE0\xA0\xA4\xEB", "\x8E\xAF\xEB\xE2"  // "Очки магии", "Устойчивости", "Навыки", "Награды", "Опыт"
 		};
 		return _statNames;
 	}
 
-	/*
-	"Çîëîòî", "Àëìàçû", "Ïèùà", "Ñîñòîÿíèå"
-	*/
 	const char **CONSUMABLE_NAMES() {
 		delete[] _consumableNames;
-		_consumableNames = new const char *[4] { "\x87\xAE\xAB\xAE\xE2\xAE", "\x80\xAB\xAC\xA0\xA7\xEB", "\x8F\xA8\xE9\xA0", "\x91\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA5" };
+		_consumableNames = new const char *[4] { "\x87\xAE\xAB\xAE\xE2\xAE", "\x80\xAB\xAC\xA0\xA7\xEB", "\x8F\xA8\xE9\xA0", "\x91\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA5" }; // "Золото", "Алмазы", "Пища", "Состояние"
 		return _consumableNames;
 	}
 
-	/*
-	"ó îòðÿäà", "â áàíêå"
-	*/
 	const char **WHERE_NAMES() {
 		delete[] _whereNames;
-		_whereNames = new const char *[2] { "\xE3 \xAE\xE2\xE0\xEF\xA4\xA0", "\xA2 \xA1\xA0\xAD\xAA\xA5" };
+		_whereNames = new const char *[2] { "\xE3 \xAE\xE2\xE0\xEF\xA4\xA0", "\xA2 \xA1\xA0\xAD\xAA\xA5" }; // "у отряда", "в банке"
 		return _whereNames;
 	}
 
-	/*
-	"\x3""c\t000\v051Ñêîëüêî\x3""l\n"
-	*/
 	const char *AMOUNT() {
-		return "\x3"
-			   "c\t000\v051\x91\xAA\xAE\xAB\xEC\xAA\xAE\x3"
-			   "l\n";
+		return "\x3""c\t000\v051\x91\xAA\xAE\xAB\xEC\xAA\xAE\x3""l\n"; // "\x3""c\t000\v051Сколько\x3""l\n"
 	}
 
-	/*
-	"\v007Âàøè ðþêçàêè óæå íàïîëíåíû!"
-	*/
 	const char *FOOD_PACKS_FULL() {
-		return "\v007\x82\xA0\xE8\xA8 \xE0\xEE\xAA\xA7\xA0\xAA\xA8 \xE3\xA6\xA5 \xAD\xA0\xAF\xAE\xAB\xAD\xA5\xAD\xEB!";
+		return "\v007\x82\xA0\xE8\xA8 \xE0\xEE\xAA\xA7\xA0\xAA\xA8 \xE3\xA6\xA5 \xAD\xA0\xAF\xAE\xAB\xAD\xA5\xAD\xEB!"; // "\v007Ваши рюкзаки уже наполнены!"
 	}
 
-	/*
-	"\x3""c\v027\t039%s\x3""l\v046\n"
-	"\t012\f37Ê\fdóïèòü\n"
-	"\t012\f37Î\fdïèñàíèÿ";
-	*/
 	const char *BUY_SPELLS() {
-		return "\x3"
-			   "c\v027\t039%s\x3"
-			   "l\v046\n"
-			   "\t012\f37\x8A\fd\xE3\xAF\xA8\xE2\xEC\n"
-			   "\t012\f37\x8E\fd\xAF\xA8\xE1\xA0\xAD\xA8\xEF";
+		return "\x3""c\v027\t039%s\x3""l\v046\n"			   // "\x3""c\v027\t039%s\x3""l\v046\n"
+			   "\t012\f37\x8A\fd\xE3\xAF\xA8\xE2\xEC\n"        // "\t012\f37К\fdупить\n"
+			   "\t012\f37\x8E\fd\xAF\xA8\xE1\xA0\xAD\xA8\xEF"; // "\t012\f37О\fdписания";
 	}
 
-	/*
-	"\x1\r\f00\x3""c\v000\t000Ãèëüäèÿ\n"
-	"%s\x3""l\t000\v090Çîë"
-	"\x3""r\t000%s\x2\x3""c\v122\t040ESC\x1";
-	*/
 	const char *GUILD_OPTIONS() {
-		return "\x1\r\f00\x3"
-			   "c\v000\t000\x83\xA8\xAB\xEC\xA4\xA8\xEF\n"
-			   "%s\x3"
-			   "l\t000\v090\x87\xAE\xAB"
-			   "\x3"
-			   "r\t000%s\x2\x3"
-			   "c\v122\t040ESC\x1";
+		return "\x1\r\f00\x3""c\v000\t000\x83\xA8\xAB\xEC\xA4\xA8\xEF\n" // "\x1\r\f00\x3""c\v000\t000Гильдия\n"
+			   "%s\x3""l\t000\v090\x87\xAE\xAB"							 // "%s\x3""l\t000\v090Зол"
+			   "\x3""r\t000%s\x2\x3""c\v122\t040ESC\x1";				 // "\x3""r\t000%s\x2\x3""c\v122\t040ESC\x1";
 	}
 
-	/*
-	"Âû íå çàêëèíàòåëü..."
-	*/
 	const char *NOT_A_SPELL_CASTER() {
-		return "\x82\xEB \xAD\xA5 \xA7\xA0\xAA\xAB\xA8\xAD\xA0\xE2\xA5\xAB\xEC...";
-	}
-
-	/*
-	"Âû óæå çíàåòå âñ¸,\n"
-	"\t010÷åìó ìû ìîæåì âàñ\n"
-	"\t010íàó÷èòü!\n"
-	"\n"
-	"\n"
-	"\n"
-	"\n"
-	"\n"
-	"\n"
-	"\n"
-	"\n"
-	"\n";
-	*/
+		return "\x82\xEB \xAD\xA5 \xA7\xA0\xAA\xAB\xA8\xAD\xA0\xE2\xA5\xAB\xEC..."; // "Вы не заклинатель..."
+	}
+
 	const char *SPELLS_LEARNED_ALL() {
-		return "\x82\xEB \xE3\xA6\xA5 \xA7\xAD\xA0\xA5\xE2\xA5 \xA2\xE1\xF1,\n"
-			   "\t010\xE7\xA5\xAC\xE3 \xAC\xEB \xAC\xAE\xA6\xA5\xAC \xA2\xA0\xE1\n"
-			   "\t010\xAD\xA0\xE3\xE7\xA8\xE2\xEC!\n"
-			   "\n"
-			   "\n"
-			   "\n"
-			   "\n"
-			   "\n"
-			   "\n"
-			   "\n"
-			   "\n"
-			   "\n";
+		return "\x82\xEB \xE3\xA6\xA5 \xA7\xAD\xA0\xA5\xE2\xA5 \xA2\xE1\xF1,\n"		// "Вы уже знаете всё,\n"
+			   "\t010\xE7\xA5\xAC\xE3 \xAC\xEB \xAC\xAE\xA6\xA5\xAC \xA2\xA0\xE1\n" // "\t010чему мы можем вас\n"
+			   "\t010\xAD\xA0\xE3\xE7\xA8\xE2\xEC!\n"                               // "\t010научить!\n"
+			   "\n"                                                                 // "\n"
+			   "\n"                                                                 // "\n"
+			   "\n"                                                                 // "\n"
+			   "\n"                                                                 // "\n"
+			   "\n"                                                                 // "\n"
+			   "\n"                                                                 // "\n"
+			   "\n"                                                                 // "\n"
+			   "\n"                                                                 // "\n"
+			   "\n";                                                                // "\n";
 	}
 
-	/*
-	"\r\fd%s\x2\x3""c\t000\v002Çàêëèíàíèÿ"
-	*/
 	const char *SPELLS_FOR() {
-		return "\r\fd%s\x2\x3"
-			   "c\t000\v002\x87\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xEF";
+		return "\r\fd%s\x2\x3""c\t000\v002\x87\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xEF"; // "\r\fd%s\x2\x3""c\t000\v002Заклинания"
 	}
 
 	const char *SPELL_LINES_0_TO_9() {
@@ -1101,131 +676,70 @@ public:
 			   "\t004\v110%s - %u\x1";
 	}
 
-	/*
-	"Ìàíà"
-	*/
 	const char *SPELL_PTS() {
-		return "\x8C\xA0\xAD\xA0";
+		return "\x8C\xA0\xAD\xA0"; // "Мана"
 	}
 
-	/*
-	"Çîë"
-	*/
 	const char *GOLD() {
-		return "\x87\xAE\xAB";
+		return "\x87\xAE\xAB"; // "Зол"
 	}
 
-	/*
-	"\x3""c\f09%s\fd\x3""l\n"
-	"\n"
-	"%s\x3""c\t000\v110Í. êëàâèøó!";
-	*/
 	const char *SPELL_INFO() {
-		return "\x3"
-			   "c\f09%s\fd\x3"
-			   "l\n"
-			   "\n"
-			   "%s\x3"
-			   "c\t000\v110\x8D. \xAA\xAB\xA0\xA2\xA8\xE8\xE3!";
+		return "\x3""c\f09%s\fd\x3""l\n"								// "\x3""c\f09%s\fd\x3""l\n"
+			   "\n"                                                     // "\n"
+			   "%s\x3""c\t000\v110\x8D. \xAA\xAB\xA0\xA2\xA8\xE8\xE3!"; // "%s\x3""c\t000\v110Н. клавишу!";
 	}
 
-	/*
-	"\x3""l\v000\t000\fd%s  Æåëàåòå ïðèîáðåñòè "
-	"\f09%s\fd çà %u?";
-	*/
 	const char *SPELL_PURCHASE() {
-		return "\x3"
-			   "l\v000\t000\fd%s  \x86\xA5\xAB\xA0\xA5\xE2\xA5 \xAF\xE0\xA8\xAE\xA1\xE0\xA5\xE1\xE2\xA8 "
-			   "\f09%s\fd \xA7\xA0 %u?";
+		return "\x3""l\v000\t000\fd%s  \x86\xA5\xAB\xA0\xA5\xE2\xA5 \xAF\xE0\xA8\xAE\xA1\xE0\xA5\xE1\xE2\xA8 " // "\x3""l\v000\t000\fd%s  Желаете приобрести "
+			   "\f09%s\fd \xA7\xA0 %u?";                                                                       // "\f09%s\fd за %u?";
 	}
 
-	/*
-	"\x3""c\v000\t000%s\x3l\v139"
-	"\t000X = %d\x3r\t000Y = %d\x3""c\t000%s";
-	*/
 	const char *MAP_TEXT() {
-		return "\x3"
-			   "c\v000\t000%s\x3l\v139"
-			   "\t000X = %d\x3r\t000Y = %d\x3"
-			   "c\t000%s";
+		return "\x3""c\v000\t000%s\x3l\v139"			  // "\x3""c\v000\t000%s\x3l\v139"
+			   "\t000X = %d\x3r\t000Y = %d\x3""c\t000%s"; // "\t000X = %d\x3r\t000Y = %d\x3""c\t000%s";
 	}
 
-	/*
-	"\x3""l\n\n\t024Ñâåò\x3""r\t124%u";
-	*/
 	const char *LIGHT_COUNT_TEXT() {
-		return "\x3"
-			   "l\n\n\t024\x91\xA2\xA5\xE2\x3"
-			   "r\t124%u";
+		return "\x3""l\n\n\t024\x91\xA2\xA5\xE2\x3""r\t124%u"; // "\x3""l\n\n\t024Свет\x3""r\t124%u";
 	}
 
-	/*
-	"%c%sÎãîíü%s%u"
-	*/
 	const char *FIRE_RESISTENCE_TEXT() {
-		return "%c%s\x8E\xA3\xAE\xAD\xEC%s%u";
+		return "%c%s\x8E\xA3\xAE\xAD\xEC%s%u"; // "%c%sОгонь%s%u"
 	}
 
-	/*
-	"%c%sÃðîì%s%u"
-	*/
 	const char *ELECRICITY_RESISTENCE_TEXT() {
-		return "%c%s\x83\xE0\xAE\xAC%s%u";
+		return "%c%s\x83\xE0\xAE\xAC%s%u"; // "%c%sГром%s%u"
 	}
 
-	/*
-	"%c%sÕîëîä%s%u"
-	*/
 	const char *COLD_RESISTENCE_TEXT() {
-		return "%c%s\x95\xAE\xAB\xAE\xA4%s%u";
+		return "%c%s\x95\xAE\xAB\xAE\xA4%s%u"; // "%c%sХолод%s%u"
 	}
 
-	/*
-	"%c%sßä/Êèñëîòà%s%u"
-	*/
 	const char *POISON_RESISTENCE_TEXT() {
-		return "%c%s\x9F\xA4/\x8A\xA8\xE1\xAB\xAE\xE2\xA0%s%u";
+		return "%c%s\x9F\xA4/\x8A\xA8\xE1\xAB\xAE\xE2\xA0%s%u"; // "%c%sЯд/Кислота%s%u"
 	}
 
-	/*
-	"%c%sßñíîâèäåíèå%s"
-	*/
 	const char *CLAIRVOYANCE_TEXT() {
-		return "%c%s\x9F\xE1\xAD\xAE\xA2\xA8\xA4\xA5\xAD\xA8\xA5%s";
+		return "%c%s\x9F\xE1\xAD\xAE\xA2\xA8\xA4\xA5\xAD\xA8\xA5%s"; // "%c%sЯсновидение%s"
 	}
 
-	/*
-	"%c%sËåâèòàöèÿ%s"
-	*/
 	const char *LEVITATE_TEXT() {
-		return "%c%s\x8B\xA5\xA2\xA8\xE2\xA0\xE6\xA8\xEF%s";
+		return "%c%s\x8B\xA5\xA2\xA8\xE2\xA0\xE6\xA8\xEF%s"; // "%c%sЛевитация%s"
 	}
 
-	/*
-	"%c%sÕîæäåíèå ïî âîäå"
-	*/
 	const char *WALK_ON_WATER_TEXT() {
-		return "%c%s\x95\xAE\xA6\xA4\xA5\xAD\xA8\xA5 \xAF\xAE \xA2\xAE\xA4\xA5";
-	}
-
-	/*
-	"\r\x3""c\t000\v001\f37%s Êñèíà\fd\n"
-	"Èãðîâàÿ èíôîðìàöèÿ\n"
-	"\n"
-	"Ñåãîäíÿ \f37%s\fd\n"
-	"\n"
-	"\t032Âðåìÿ\t072Äåíü\t112Ãîä\n"
-	"\t032\f37%d:%02d%c\t072%u\t112%u\fd%s";
-	*/
+		return "%c%s\x95\xAE\xA6\xA4\xA5\xAD\xA8\xA5 \xAF\xAE \xA2\xAE\xA4\xA5"; // "%c%sХождение по воде"
+	}
+
 	const char *GAME_INFORMATION() {
-		return "\r\x3"
-			   "c\t000\v001\f37%s \x8A\xE1\xA8\xAD\xA0\fd\n"
-			   "\x88\xA3\xE0\xAE\xA2\xA0\xEF \xA8\xAD\xE4\xAE\xE0\xAC\xA0\xE6\xA8\xEF\n"
-			   "\n"
-			   "\x91\xA5\xA3\xAE\xA4\xAD\xEF \f37%s\fd\n"
-			   "\n"
-			   "\t032\x82\xE0\xA5\xAC\xEF\t072\x84\xA5\xAD\xEC\t112\x83\xAE\xA4\n"
-			   "\t032\f37%d:%02d%c\t072%u\t112%u\fd%s";
+		return "\r\x3""c\t000\v001\f37%s \x8A\xE1\xA8\xAD\xA0\fd\n"						 // "\r\x3""c\t000\v001\f37%s Ксина\fd\n"
+			   "\x88\xA3\xE0\xAE\xA2\xA0\xEF \xA8\xAD\xE4\xAE\xE0\xAC\xA0\xE6\xA8\xEF\n" // "Игровая информация\n"
+			   "\n"                                                                      // "\n"
+			   "\x91\xA5\xA3\xAE\xA4\xAD\xEF \f37%s\fd\n"                                // "Сегодня \f37%s\fd\n"
+			   "\n"                                                                      // "\n"
+			   "\t032\x82\xE0\xA5\xAC\xEF\t072\x84\xA5\xAD\xEC\t112\x83\xAE\xA4\n"       // "\t032Время\t072День\t112Год\n"
+			   "\t032\f37%d:%02d%c\t072%u\t112%u\fd%s";                                  // "\t032\f37%d:%02d%c\t072%u\t112%u\fd%s";
 	}
 
 	const char *WORLD_GAME_TEXT() {
@@ -1236,26 +750,19 @@ public:
 		return "Darkside";
 	}
 
-	/*
-	"Îáëàêà"
-	*/
 	const char *CLOUDS_GAME_TEXT() {
-		return "\x8E\xA1\xAB\xA0\xAA\xA0";
+		return "\x8E\xA1\xAB\xA0\xAA\xA0"; // "Облака"
 	}
 
 	const char *SWORDS_GAME_TEXT() {
 		return "Swords";
 	}
 
-	/*
-	"äåñÿòèäåíü", "ïåðâîäåíü", "âòîðîäåíü", "òðåòüåäåíü", "÷åòâåðîäåíü",
-	"ïÿòèäåíü",   "øåñòèäåíü", "ñåìèäåíü",  "âîñüìèäåíü", "äåâÿòèäåíü"
-	*/
 	const char **WEEK_DAY_STRINGS() {
 		delete[] _weekDayStrings;
 		_weekDayStrings = new const char *[10] {
-			"\xA4\xA5\xE1\xEF\xE2\xA8\xA4\xA5\xAD\xEC", "\xAF\xA5\xE0\xA2\xAE\xA4\xA5\xAD\xEC", "\xA2\xE2\xAE\xE0\xAE\xA4\xA5\xAD\xEC", "\xE2\xE0\xA5\xE2\xEC\xA5\xA4\xA5\xAD\xEC", "\xE7\xA5\xE2\xA2\xA5\xE0\xAE\xA4\xA5\xAD\xEC",
-				"\xAF\xEF\xE2\xA8\xA4\xA5\xAD\xEC", "\xE8\xA5\xE1\xE2\xA8\xA4\xA5\xAD\xEC", "\xE1\xA5\xAC\xA8\xA4\xA5\xAD\xEC", "\xA2\xAE\xE1\xEC\xAC\xA8\xA4\xA5\xAD\xEC", "\xA4\xA5\xA2\xEF\xE2\xA8\xA4\xA5\xAD\xEC"
+			"\xA4\xA5\xE1\xEF\xE2\xA8\xA4\xA5\xAD\xEC", "\xAF\xA5\xE0\xA2\xAE\xA4\xA5\xAD\xEC", "\xA2\xE2\xAE\xE0\xAE\xA4\xA5\xAD\xEC", "\xE2\xE0\xA5\xE2\xEC\xA5\xA4\xA5\xAD\xEC", "\xE7\xA5\xE2\xA2\xA5\xE0\xAE\xA4\xA5\xAD\xEC", // "десятидень", "перводень", "втородень", "третьедень", "четверодень",
+			"\xAF\xEF\xE2\xA8\xA4\xA5\xAD\xEC", "\xE8\xA5\xE1\xE2\xA8\xA4\xA5\xAD\xEC", "\xE1\xA5\xAC\xA8\xA4\xA5\xAD\xEC", "\xA2\xAE\xE1\xEC\xAC\xA8\xA4\xA5\xAD\xEC", "\xA4\xA5\xA2\xEF\xE2\xA8\xA4\xA5\xAD\xEC"                  // "пятидень",   "шестидень", "семидень",  "восьмидень", "девятидень"
 		};
 		return _weekDayStrings;
 	}
@@ -1286,217 +793,110 @@ public:
 			   "\t245%s%s%s%s\fd";
 	}
 
-	/*
-	"äåíü", "äíÿ", "äíåé"
-	*/
 	const char **DAYS() {
 		delete[] _days;
-		_days = new const char *[3] { "\xA4\xA5\xAD\xEC", "\xA4\xAD\xEF", "\xA4\xAD\xA5\xA9" };
+		_days = new const char *[3] { "\xA4\xA5\xAD\xEC", "\xA4\xAD\xEF", "\xA4\xAD\xA5\xA9" }; // "день", "дня", "дней"
 		return _days;
 	}
 
-	/*
-	"Çîëîòî"
-	*/
 	const char *PARTY_GOLD() {
-		return "\x87\xAE\xAB\xAE\xE2\xAE";
+		return "\x87\xAE\xAB\xAE\xE2\xAE"; // "Золото"
 	}
 
 	const char *PLUS_14() {
 		return "\f14+";
 	}
 
-	/*
-	"\x1\f00\r\x3""l\t029\v018Ñèë\t080Ìòê\t131Çäîð\t196Îïûò"
-	"\t029\v041Èíò\t080Óä÷\t131ÎÌ\t029\v064Äóõ\t080Âçð"
-	"\t131Óñò\t196Àëìàçû\t029\v087Ñëæ\t080Óðâ\t131Íâê"
-	"\t196Ïèùà\t029\v110Ñêð\t080ÊÇ\t131Íàãð\t196Ñîñòîÿíèå"
-	"\x3""c\t290\v025\f37Â\fdåùè\t290\v057\f37Á"
-	"\fdñòð\t290\v089\f37Ñ\fdìåí\t290\v121Âûõîä\x3""l%s";
-	*/
 	const char *CHARACTER_TEMPLATE() {
-		return "\x1\f00\r\x3"
-			   "l\t029\v018\x91\xA8\xAB\t080\x8C\xE2\xAA\t131\x87\xA4\xAE\xE0\t196\x8E\xAF\xEB\xE2"
-			   "\t029\v041\x88\xAD\xE2\t080\x93\xA4\xE7\t131\x8E\x8C\t029\v064\x84\xE3\xE5\t080\x82\xA7\xE0"
-			   "\t131\x93\xE1\xE2\t196\x80\xAB\xAC\xA0\xA7\xEB\t029\v087\x91\xAB\xA6\t080\x93\xE0\xA2\t131\x8D\xA2\xAA"
-			   "\t196\x8F\xA8\xE9\xA0\t029\v110\x91\xAA\xE0\t080\x8A\x87\t131\x8D\xA0\xA3\xE0\t196\x91\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA5"
-			   "\x3"
-			   "c\t290\v025\f37\x82\fd\xA5\xE9\xA8\t290\v057\f37\x81"
-			   "\fd\xE1\xE2\xE0\t290\v089\f37\x91\fd\xAC\xA5\xAD\t290\v121\x82\xEB\xE5\xAE\xA4\x3"
-			   "l%s";
+		return "\x1\f00\r\x3""l\t029\v018\x91\xA8\xAB\t080\x8C\xE2\xAA\t131\x87\xA4\xAE\xE0\t196\x8E\xAF\xEB\xE2"						// "\x1\f00\r\x3""l\t029\v018Сил\t080Мтк\t131Здор\t196Опыт"
+			   "\t029\v041\x88\xAD\xE2\t080\x93\xA4\xE7\t131\x8E\x8C\t029\v064\x84\xE3\xE5\t080\x82\xA7\xE0"                            // "\t029\v041Инт\t080Удч\t131ОМ\t029\v064Дух\t080Взр"
+			   "\t131\x93\xE1\xE2\t196\x80\xAB\xAC\xA0\xA7\xEB\t029\v087\x91\xAB\xA6\t080\x93\xE0\xA2\t131\x8D\xA2\xAA"                 // "\t131Уст\t196Алмазы\t029\v087Слж\t080Урв\t131Нвк"
+			   "\t196\x8F\xA8\xE9\xA0\t029\v110\x91\xAA\xE0\t080\x8A\x87\t131\x8D\xA0\xA3\xE0\t196\x91\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA5" // "\t196Пища\t029\v110Скр\t080КЗ\t131Нагр\t196Состояние"
+			   "\x3""c\t290\v025\f37\x82\fd\xA5\xE9\xA8\t290\v057\f37\x81"                                                              // "\x3""c\t290\v025\f37В\fdещи\t290\v057\f37Б"
+			   "\fd\xE1\xE2\xE0\t290\v089\f37\x91\fd\xAC\xA5\xAD\t290\v121\x82\xEB\xE5\xAE\xA4\x3""l%s";                                // "\fdстр\t290\v089\f37С\fdмен\t290\v121Выход\x3""l%s";
 	}
 
-	/*
-	"\x3""c\v007\t000Âî âðåìÿ áèòâû çàïðåùåíî ìåíÿòüñÿ ìåñòàìè!"
-	*/
 	const char *EXCHANGING_IN_COMBAT() {
-		return "\x3"
-			   "c\v007\t000\x82\xAE \xA2\xE0\xA5\xAC\xEF \xA1\xA8\xE2\xA2\xEB \xA7\xA0\xAF\xE0\xA5\xE9\xA5\xAD\xAE \xAC\xA5\xAD\xEF\xE2\xEC\xE1\xEF \xAC\xA5\xE1\xE2\xA0\xAC\xA8!";
+		return "\x3""c\v007\t000\x82\xAE \xA2\xE0\xA5\xAC\xEF \xA1\xA8\xE2\xA2\xEB \xA7\xA0\xAF\xE0\xA5\xE9\xA5\xAD\xAE \xAC\xA5\xAD\xEF\xE2\xEC\xE1\xEF \xAC\xA5\xE1\xE2\xA0\xAC\xA8!"; // "\x3""c\v007\t000Во время битвы запрещено меняться местами!"
 	}
 
-	/*
-	"\x2\x3""c%s\n"
-	"Ñåé÷àñ / Ìàêñèìóì\n"
-	"\x3""r\t054%lu\x3""l\t058/ %lu\n"
-	"\x3""cÐàíã: %s\x1";
-	*/
 	const char *CURRENT_MAXIMUM_RATING_TEXT() {
-		return "\x2\x3"
-			   "c%s\n"
-			   "\x91\xA5\xA9\xE7\xA0\xE1 / \x8C\xA0\xAA\xE1\xA8\xAC\xE3\xAC\n"
-			   "\x3"
-			   "r\t054%lu\x3"
-			   "l\t058/ %lu\n"
-			   "\x3"
-			   "c\x90\xA0\xAD\xA3: %s\x1";
+		return "\x2\x3""c%s\n"												   // "\x2\x3""c%s\n"
+			   "\x91\xA5\xA9\xE7\xA0\xE1 / \x8C\xA0\xAA\xE1\xA8\xAC\xE3\xAC\n" // "Сейчас / Максимум\n"
+			   "\x3" "r\t054%lu\x3""l\t058/ %lu\n"                             // "\x3""r\t054%lu\x3""l\t058/ %lu\n"
+			   "\x3""c\x90\xA0\xAD\xA3: %s\x1";                                // "\x3""cРанг: %s\x1";
 	}
 
-	/*
-	"\x2\x3""c%s\n"
-	"Ñåé÷àñ / Ìàêñèìóì\n"
-	"\x3""r\t054%d\x3""l\t058/ %lu";
-	*/
 	const char *CURRENT_MAXIMUM_TEXT() {
-		return "\x2\x3"
-			   "c%s\n"
-			   "\x91\xA5\xA9\xE7\xA0\xE1 / \x8C\xA0\xAA\xE1\xA8\xAC\xE3\xAC\n"
-			   "\x3"
-			   "r\t054%d\x3"
-			   "l\t058/ %lu";
+		return "\x2\x3""c%s\n"                                                 // "\x2\x3""c%s\n"
+			   "\x91\xA5\xA9\xE7\xA0\xE1 / \x8C\xA0\xAA\xE1\xA8\xAC\xE3\xAC\n" // "Сейчас / Максимум\n"
+			   "\x3""r\t054%d\x3""l\t058/ %lu";                                // "\x3""r\t054%d\x3""l\t058/ %lu";
 	}
 
-	/*
-	"Íåò", "Ìèçåðíûé", "Æàëêèé", "Î÷.íèçêèé", "Íèçêèé", "Ñðåäíèé", "Õîðîøèé",
-	"Îòëè÷íûé", "Âûñîêèé", "Âûñî÷åííûé", "Áîëüøîé", "Îãðîìíûé", "Óäèâèòåëüíûé",
-	"Íåâåðîÿòíûé", "Ãèãàíòñêèé", "Ôàíòàñòè÷íûé", "Èçóìèòåëüíûé", "Ïîðàçèòåëüíûé",
-	"Ãðàíäèîçíûé", "Ãðîìàäíûé", "Êîëîññàëüíûé", "Ïîòðÿñàþùèé", "×óäîâèùíûé",
-	"Âûñî÷àéøèé"
-	*/
 	const char **RATING_TEXT() {
 		delete[] _ratingText;
 		_ratingText = new const char *[24] {
-			"\x8D\xA5\xE2", "\x8C\xA8\xA7\xA5\xE0\xAD\xEB\xA9", "\x86\xA0\xAB\xAA\xA8\xA9", "\x8E\xE7.\xAD\xA8\xA7\xAA\xA8\xA9", "\x8D\xA8\xA7\xAA\xA8\xA9", "\x91\xE0\xA5\xA4\xAD\xA8\xA9", "\x95\xAE\xE0\xAE\xE8\xA8\xA9",
-				"\x8E\xE2\xAB\xA8\xE7\xAD\xEB\xA9", "\x82\xEB\xE1\xAE\xAA\xA8\xA9", "\x82\xEB\xE1\xAE\xE7\xA5\xAD\xAD\xEB\xA9", "\x81\xAE\xAB\xEC\xE8\xAE\xA9", "\x8E\xA3\xE0\xAE\xAC\xAD\xEB\xA9", "\x93\xA4\xA8\xA2\xA8\xE2\xA5\xAB\xEC\xAD\xEB\xA9",
-				"\x8D\xA5\xA2\xA5\xE0\xAE\xEF\xE2\xAD\xEB\xA9", "\x83\xA8\xA3\xA0\xAD\xE2\xE1\xAA\xA8\xA9", "\x94\xA0\xAD\xE2\xA0\xE1\xE2\xA8\xE7\xAD\xEB\xA9", "\x88\xA7\xE3\xAC\xA8\xE2\xA5\xAB\xEC\xAD\xEB\xA9", "\x8F\xAE\xE0\xA0\xA7\xA8\xE2\xA5\xAB\xEC\xAD\xEB\xA9",
-				"\x83\xE0\xA0\xAD\xA4\xA8\xAE\xA7\xAD\xEB\xA9", "\x83\xE0\xAE\xAC\xA0\xA4\xAD\xEB\xA9", "\x8A\xAE\xAB\xAE\xE1\xE1\xA0\xAB\xEC\xAD\xEB\xA9", "\x8F\xAE\xE2\xE0\xEF\xE1\xA0\xEE\xE9\xA8\xA9", "\x97\xE3\xA4\xAE\xA2\xA8\xE9\xAD\xEB\xA9",
-				"\x82\xEB\xE1\xAE\xE7\xA0\xA9\xE8\xA8\xA9"
+			"\x8D\xA5\xE2", "\x8C\xA8\xA7\xA5\xE0\xAD\xEB\xA9", "\x86\xA0\xAB\xAA\xA8\xA9", "\x8E\xE7.\xAD\xA8\xA7\xAA\xA8\xA9", "\x8D\xA8\xA7\xAA\xA8\xA9", "\x91\xE0\xA5\xA4\xAD\xA8\xA9", "\x95\xAE\xE0\xAE\xE8\xA8\xA9",											// "Нет", "Мизерный", "Жалкий", "Оч.низкий", "Низкий", "Средний", "Хороший",
+			"\x8E\xE2\xAB\xA8\xE7\xAD\xEB\xA9", "\x82\xEB\xE1\xAE\xAA\xA8\xA9", "\x82\xEB\xE1\xAE\xE7\xA5\xAD\xAD\xEB\xA9", "\x81\xAE\xAB\xEC\xE8\xAE\xA9", "\x8E\xA3\xE0\xAE\xAC\xAD\xEB\xA9", "\x93\xA4\xA8\xA2\xA8\xE2\xA5\xAB\xEC\xAD\xEB\xA9",                     // "Отличный", "Высокий", "Высоченный", "Большой", "Огромный", "Удивительный",
+			"\x8D\xA5\xA2\xA5\xE0\xAE\xEF\xE2\xAD\xEB\xA9", "\x83\xA8\xA3\xA0\xAD\xE2\xE1\xAA\xA8\xA9", "\x94\xA0\xAD\xE2\xA0\xE1\xE2\xA8\xE7\xAD\xEB\xA9", "\x88\xA7\xE3\xAC\xA8\xE2\xA5\xAB\xEC\xAD\xEB\xA9", "\x8F\xAE\xE0\xA0\xA7\xA8\xE2\xA5\xAB\xEC\xAD\xEB\xA9", // "Невероятный", "Гигантский", "Фантастичный", "Изумительный", "Поразительный",
+			"\x83\xE0\xA0\xAD\xA4\xA8\xAE\xA7\xAD\xEB\xA9", "\x83\xE0\xAE\xAC\xA0\xA4\xAD\xEB\xA9", "\x8A\xAE\xAB\xAE\xE1\xE1\xA0\xAB\xEC\xAD\xEB\xA9", "\x8F\xAE\xE2\xE0\xEF\xE1\xA0\xEE\xE9\xA8\xA9", "\x97\xE3\xA4\xAE\xA2\xA8\xE9\xAD\xEB\xA9",                     // "Грандиозный", "Громадный", "Колоссальный", "Потрясающий", "Чудовищный",
+			"\x82\xEB\xE1\xAE\xE7\xA0\xA9\xE8\xA8\xA9"                                                                                                                                                                                                                  // "Высочайший"
 		};
 		return _ratingText;
 	}
 
-	/*
-	"\x2\x3""c%s\n"
-	"Òåêóùèé / Íàñòîÿùèé\n"
-	"\x3""r\t057%u\x3""l\t061/ %u\n"
-	"\x3""cÐîäèë%s: %u / %u\x1";
-	*/
 	const char *AGE_TEXT() {
-		return "\x2\x3"
-			   "c%s\n"
-			   "\x92\xA5\xAA\xE3\xE9\xA8\xA9 / \x8D\xA0\xE1\xE2\xAE\xEF\xE9\xA8\xA9\n"
-			   "\x3"
-			   "r\t057%u\x3"
-			   "l\t061/ %u\n"
-			   "\x3"
-			   "c\x90\xAE\xA4\xA8\xAB%s: %u / %u\x1";
+		return "\x2\x3""c%s\n"														   // "\x2\x3""c%s\n"
+			   "\x92\xA5\xAA\xE3\xE9\xA8\xA9 / \x8D\xA0\xE1\xE2\xAE\xEF\xE9\xA8\xA9\n" // "Текущий / Настоящий\n"
+			   "\x3""r\t057%u\x3""l\t061/ %u\n"                                        // "\x3""r\t057%u\x3""l\t061/ %u\n"
+			   "\x3""c\x90\xAE\xA4\xA8\xAB%s: %u / %u\x1";                             // "\x3""cРодил%s: %u / %u\x1";
 	}
 
-	/*
-	"\x2\x3""c%s\n"
-	"Òåêóùèé / Ìàêñèìóì\n"
-	"\x3""r\t054%u\x3""l\t058/ %u\n"
-	"\x3""c%u Àòàê%s/Ðàóíä\x1";
-	*/
 	const char *LEVEL_TEXT() {
-		return "\x2\x3"
-			   "c%s\n"
-			   "\x92\xA5\xAA\xE3\xE9\xA8\xA9 / \x8C\xA0\xAA\xE1\xA8\xAC\xE3\xAC\n"
-			   "\x3"
-			   "r\t054%u\x3"
-			   "l\t058/ %u\n"
-			   "\x3"
-			   "c%u \x80\xE2\xA0\xAA%s/\x90\xA0\xE3\xAD\xA4\x1";
-	}
-
-	/*
-	"\x2\x3""c%s\x3""l\n"
-	"\t020Îãîíü\t100%u\n"
-	"\t020Õîëîä\t100%u\n"
-	"\t020Ãðîì\t100%u\n"
-	"\t020ßä\t100%u\n"
-	"\t020Ýíåðãèÿ\t100%u\n"
-	"\t020Ìàãèÿ\t100%u";
-	*/
+		return "\x2\x3""c%s\n"													   // "\x2\x3""c%s\n"
+			   "\x92\xA5\xAA\xE3\xE9\xA8\xA9 / \x8C\xA0\xAA\xE1\xA8\xAC\xE3\xAC\n" // "Текущий / Максимум\n"
+			   "\x3""r\t054%u\x3""l\t058/ %u\n"                                    // "\x3""r\t054%u\x3""l\t058/ %u\n"
+			   "\x3""c%u \x80\xE2\xA0\xAA%s/\x90\xA0\xE3\xAD\xA4\x1";              // "\x3""c%u Атак%s/Раунд\x1";
+	}
+
 	const char *RESISTENCES_TEXT() {
-		return "\x2\x3"
-			   "c%s\x3"
-			   "l\n"
-			   "\t020\x8E\xA3\xAE\xAD\xEC\t100%u\n"
-			   "\t020\x95\xAE\xAB\xAE\xA4\t100%u\n"
-			   "\t020\x83\xE0\xAE\xAC\t100%u\n"
-			   "\t020\x9F\xA4\t100%u\n"
-			   "\t020\x9D\xAD\xA5\xE0\xA3\xA8\xEF\t100%u\n"
-			   "\t020\x8C\xA0\xA3\xA8\xEF\t100%u";
+		return "\x2\x3""c%s\x3""l\n"						// "\x2\x3""c%s\x3""l\n"
+			   "\t020\x8E\xA3\xAE\xAD\xEC\t100%u\n"         // "\t020Огонь\t100%u\n"
+			   "\t020\x95\xAE\xAB\xAE\xA4\t100%u\n"         // "\t020Холод\t100%u\n"
+			   "\t020\x83\xE0\xAE\xAC\t100%u\n"             // "\t020Гром\t100%u\n"
+			   "\t020\x9F\xA4\t100%u\n"                     // "\t020Яд\t100%u\n"
+			   "\t020\x9D\xAD\xA5\xE0\xA3\xA8\xEF\t100%u\n" // "\t020Энергия\t100%u\n"
+			   "\t020\x8C\xA0\xA3\xA8\xEF\t100%u";          // "\t020Магия\t100%u";
 	}
 
-	/*
-	"\n\t012Íåò"
-	*/
 	const char *NONE() {
-		return "\n\t012\x8D\xA5\xE2";
+		return "\n\t012\x8D\xA5\xE2"; // "\n\t012Нет"
 	}
 
-	/*
-	"\x2\x3""c%s\x3""l\n"
-	"\t005Òåêóùèé:\t070%lu\n"
-	"\t005Ñë. óðîâåíü:\t070%s\x1";
-	*/
 	const char *EXPERIENCE_TEXT() {
-		return "\x2\x3"
-			   "c%s\x3"
-			   "l\n"
-			   "\t005\x92\xA5\xAA\xE3\xE9\xA8\xA9:\t070%lu\n"
-			   "\t005\x91\xAB. \xE3\xE0\xAE\xA2\xA5\xAD\xEC:\t070%s\x1";
+		return "\x2\x3""c%s\x3""l\n"									 // "\x2\x3""c%s\x3""l\n"
+			   "\t005\x92\xA5\xAA\xE3\xE9\xA8\xA9:\t070%lu\n"            // "\t005Текущий:\t070%lu\n"
+			   "\t005\x91\xAB. \xE3\xE0\xAE\xA2\xA5\xAD\xEC:\t070%s\x1"; // "\t005Сл. уровень:\t070%s\x1";
 	}
 
-	/*
-	"\f12Äîñòóïåí\fd"
-	*/
 	const char *ELIGIBLE() {
-		return "\f12\x84\xAE\xE1\xE2\xE3\xAF\xA5\xAD\fd";
+		return "\f12\x84\xAE\xE1\xE2\xE3\xAF\xA5\xAD\fd"; // "\f12Доступен\fd"
 	}
 
-	/*
-	"\x2\x3""c%s\n"
-	"%lu ñ ñîáîé\n"
-	"%lu â áàíêå\x1\x3""l";
-	*/
 	const char *IN_PARTY_IN_BANK() {
-		return "\x2\x3"
-			   "c%s\n"
-			   "%lu \xE1 \xE1\xAE\xA1\xAE\xA9\n"
-			   "%lu \xA2 \xA1\xA0\xAD\xAA\xA5\x1\x3"
-			   "l";
+		return "\x2\x3""c%s\n"							 // "\x2\x3""c%s\n"
+			   "%lu \xE1 \xE1\xAE\xA1\xAE\xA9\n"         // "%lu с собой\n"
+			   "%lu \xA2 \xA1\xA0\xAD\xAA\xA5\x1\x3""l"; // "%lu в банке\x1\x3""l";
 	}
 
-	/*
-	"\x2\x3""c%s\n"
-	"%u ïîðöè%c\n"
-	"Õâàòèò íà %u %s\x1\x3""l";
-	*/
 	const char *FOOD_TEXT() {
-		return "\x2\x3"
-			   "c%s\n"
-			   "%u \xAF\xAE\xE0\xE6\xA8%c\n"
-			   "\x95\xA2\xA0\xE2\xA8\xE2 \xAD\xA0 %u %s\x1\x3"
-			   "l";
+		return "\x2\x3""c%s\n"									   // "\x2\x3""c%s\n"
+			   "%u \xAF\xAE\xE0\xE6\xA8%c\n"                       // "%u порци%c\n"
+			   "\x95\xA2\xA0\xE2\xA8\xE2 \xAD\xA0 %u %s\x1\x3""l"; // "Хватит на %u %s\x1\x3""l";
 	}
 
-	/*
-	"\t010\v005Ïîìåíÿòüñÿ ñ êåì?"
-	*/
 	const char *EXCHANGE_WITH_WHOM() {
-		return "\t010\v005\x8F\xAE\xAC\xA5\xAD\xEF\xE2\xEC\xE1\xEF \xE1 \xAA\xA5\xAC?";
+		return "\t010\v005\x8F\xAE\xAC\xA5\xAD\xEF\xE2\xEC\xE1\xEF \xE1 \xAA\xA5\xAC?"; // "\t010\v005Поменяться с кем?"
 	}
 
 	const char *QUICK_REF_LINE() {
@@ -1505,502 +905,286 @@ public:
 			   "%02u%u\fd\t270\f%02u%c%c%c%c\fd";
 	}
 
-	/*
-	"\r\x3""cÁûñòðàÿ cïðàâêà\v012\x3""l"
-	"\t007#\t027Èìÿ\t110Êëñ\t147Óðâ\t174Çäîð"
-	"\t214ÎÌ\t242ÊÇ\t270Ñîñò"
-	"%s%s%s%s%s%s%s%s"
-	"\v110\t064\x3""cÇîëîòî\t144Àëìàçû\t224Ïèùà\v119"
-	"\t064\f15%lu\t144%lu\t224%u %s\fd";
-	*/
 	const char *QUICK_REFERENCE() {
-		return "\r\x3"
-			   "c\x81\xEB\xE1\xE2\xE0\xA0\xEF c\xAF\xE0\xA0\xA2\xAA\xA0\v012\x3"
-			   "l"
-			   "\t007#\t027\x88\xAC\xEF\t110\x8A\xAB\xE1\t147\x93\xE0\xA2\t174\x87\xA4\xAE\xE0"
-			   "\t214\x8E\x8C\t242\x8A\x87\t270\x91\xAE\xE1\xE2"
-			   "%s%s%s%s%s%s%s%s"
-			   "\v110\t064\x3"
-			   "c\x87\xAE\xAB\xAE\xE2\xAE\t144\x80\xAB\xAC\xA0\xA7\xEB\t224\x8F\xA8\xE9\xA0\v119"
-			   "\t064\f15%lu\t144%lu\t224%u %s\fd";
-	}
-
-	/*
-	"\r\x2\x3""c\v021\t017Îðó\f37æ\fd\t051\f37Á\fdðîíÿ\t085"
-	"\f37Ó\fdêðàø\t119\f37Ð\fdàçí\t153%s\t187%s\t221%s\t255%s\t289Âûõîä";
-	*/
+		return "\r\x3""c\x81\xEB\xE1\xE2\xE0\xA0\xEF c\xAF\xE0\xA0\xA2\xAA\xA0\v012\x3""l"						 // "\r\x3""cБыстрая cправка\v012\x3""l"
+			   "\t007#\t027\x88\xAC\xEF\t110\x8A\xAB\xE1\t147\x93\xE0\xA2\t174\x87\xA4\xAE\xE0"                  // "\t007#\t027Имя\t110Клс\t147Урв\t174Здор"
+			   "\t214\x8E\x8C\t242\x8A\x87\t270\x91\xAE\xE1\xE2"                                                 // "\t214ОМ\t242КЗ\t270Сост"
+			   "%s%s%s%s%s%s%s%s"                                                                                // "%s%s%s%s%s%s%s%s"
+			   "\v110\t064\x3""c\x87\xAE\xAB\xAE\xE2\xAE\t144\x80\xAB\xAC\xA0\xA7\xEB\t224\x8F\xA8\xE9\xA0\v119" // "\v110\t064\x3""cЗолото\t144Алмазы\t224Пища\v119"
+			   "\t064\f15%lu\t144%lu\t224%u %s\fd";                                                              //"\t064\f15%lu\t144%lu\t224%u %s\fd";
+	}
+
 	const char *ITEMS_DIALOG_TEXT1() {
-		return "\r\x2\x3"
-			   "c\v021\t017\x8E\xE0\xE3\f37\xA6\fd\t051\f37\x81\fd\xE0\xAE\xAD\xEF\t085"
-			   "\f37\x93\fd\xAA\xE0\xA0\xE8\t119\f37\x90\fd\xA0\xA7\xAD\t153%s\t187%s\t221%s\t255%s\t289\x82\xEB\xE5\xAE\xA4";
+		return "\r\x2\x3""c\v021\t017\x8E\xE0\xE3\f37\xA6\fd\t051\f37\x81\fd\xE0\xAE\xAD\xEF\t085"							   // "\r\x2\x3""c\v021\t017Ору\f37ж\fd\t051\f37Б\fdроня\t085"
+			   "\f37\x93\fd\xAA\xE0\xA0\xE8\t119\f37\x90\fd\xA0\xA7\xAD\t153%s\t187%s\t221%s\t255%s\t289\x82\xEB\xE5\xAE\xA4"; // "\f37У\fdкраш\t119\f37Р\fdазн\t153%s\t187%s\t221%s\t255%s\t289Выход";
 	}
 
-	/*
-	"\r\x2\x3""c\v021\t017Îðó\f37æ\fd\t051\f37Á\fdðîíÿ\t085"
-	"\f37Ó\fdêðàø\t119\f37Ð\fdàçí\t153\f37%s\t289Âûõîä";
-	*/
 	const char *ITEMS_DIALOG_TEXT2() {
-		return "\r\x2\x3"
-			   "c\v021\t017\x8E\xE0\xE3\f37\xA6\fd\t051\f37\x81\fd\xE0\xAE\xAD\xEF\t085"
-			   "\f37\x93\fd\xAA\xE0\xA0\xE8\t119\f37\x90\fd\xA0\xA7\xAD\t153\f37%s\t289\x82\xEB\xE5\xAE\xA4";
+		return "\r\x2\x3""c\v021\t017\x8E\xE0\xE3\f37\xA6\fd\t051\f37\x81\fd\xE0\xAE\xAD\xEF\t085"			  // "\r\x2\x3""c\v021\t017Ору\f37ж\fd\t051\f37Б\fdроня\t085"
+			   "\f37\x93\fd\xAA\xE0\xA0\xE8\t119\f37\x90\fd\xA0\xA7\xAD\t153\f37%s\t289\x82\xEB\xE5\xAE\xA4"; // "\f37У\fdкраш\t119\f37Р\fdазн\t153\f37%s\t289Выход";
 	}
 
-	/*
-	"\x3r\f%02u\t023%2d)\x3l\t028%s\n"
-	*/
 	const char *ITEMS_DIALOG_LINE1() {
-		return "\x3r\f%02u\t023%2d)\x3l\t028%s\n";
+		return "\x3r\f%02u\t023%2d)\x3l\t028%s\n"; // "\x3r\f%02u\t023%2d)\x3l\t028%s\n"
 	}
 
-	/*
-	"\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%u\n"
-	*/
 	const char *ITEMS_DIALOG_LINE2() {
-		return "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%u\n";
+		return "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%u\n"; // "\x3r\f%02u\t023%2d)\x3l\t028%s\x3r\t000%u\n"
 	}
 
-	/*
-	"\f37Ê\fdóï"
-	*/
 	const char *BTN_BUY() {
-		return "\f37\x8A\fd\xE3\xAF";
+		return "\f37\x8A\fd\xE3\xAF"; // "\f37К\fdуп"
 	}
 
-	/*
-	"\f37Ï\fdðîä"
-	*/
 	const char *BTN_SELL() {
-		return "\f37\x8F\fd\xE0\xAE\xA4";
+		return "\f37\x8F\fd\xE0\xAE\xA4"; // "\f37П\fdрод"
 	}
 
-	/*
-	"\f37Î\fdïîçí"
-	*/
 	const char *BTN_IDENTIFY() {
-		return "\f37\x8E\fd\xAF\xAE\xA7\xAD";
+		return "\f37\x8E\fd\xAF\xAE\xA7\xAD"; // "\f37О\fdпозн"
 	}
 
-	/*
-	"\f37×\fdèíèòü"
-	*/
 	const char *BTN_FIX() {
-		return "\f37\x97\fd\xA8\xAD\xA8\xE2\xEC";
+		return "\f37\x97\fd\xA8\xAD\xA8\xE2\xEC"; // "\f37Ч\fdинить"
 	}
 
-	/*
-	"\f37È\fdñï"
-	*/
 	const char *BTN_USE() {
-		return "\f37\x88\fd\xE1\xAF";
+		return "\f37\x88\fd\xE1\xAF"; // "\f37И\fdсп"
 	}
 
-	/*
-	"\f37Í\fdàä"
-	*/
 	const char *BTN_EQUIP() {
-		return "\f37\x8D\fd\xA0\xA4";
+		return "\f37\x8D\fd\xA0\xA4"; // "\f37Н\fdад"
 	}
 
-	/*
-	"\f37Ñ\fdíÿòü"
-	*/
 	const char *BTN_REMOVE() {
-		return "\f37\x91\fd\xAD\xEF\xE2\xEC";
+		return "\f37\x91\fd\xAD\xEF\xE2\xEC"; // "\f37С\fdнять"
 	}
 
-	/*
-	"\f37Â\fdûáð"
-	*/
 	const char *BTN_DISCARD() {
-		return "\f37\x82\fd\xEB\xA1\xE0";
+		return "\f37\x82\fd\xEB\xA1\xE0"; // "\f37В\fdыбр"
 	}
 
-	/*
-	"\f37Ç\fdàäàí"
-	*/
 	const char *BTN_QUEST() {
-		return "\f37\x87\fd\xA0\xA4\xA0\xAD";
+		return "\f37\x87\fd\xA0\xA4\xA0\xAD"; // "\f37З\fdадан"
 	}
 
-	/*
-	"Ç\fdà÷àð"
-	*/
 	const char *BTN_ENCHANT() {
-		return "\x87\fd\xA0\xE7\xA0\xE0";
+		return "\x87\fd\xA0\xE7\xA0\xE0"; // "З\fdачар"
 	}
 
-	/*
-	"Ï\fdåðåçð"
-	*/
 	const char *BTN_RECHARGE() {
-		return "\x8F\fd\xA5\xE0\xA5\xA7\xE0";
+		return "\x8F\fd\xA5\xE0\xA5\xA7\xE0"; // "П\fdерезр"
 	}
 
-	/*
-	"Ç\fdîëîòî"
-	*/
 	const char *BTN_GOLD() {
-		return "\x87\fd\xAE\xAB\xAE\xE2\xAE";
+		return "\x87\fd\xAE\xAB\xAE\xE2\xAE"; // "З\fdолото"
 	}
 
-	/*
-	"\f32ñëîìàíî "
-	*/
 	const char *ITEM_BROKEN() {
-		return "\f32\xE1\xAB\xAE\xAC\xA0\xAD\xAE ";
+		return "\f32\xE1\xAB\xAE\xAC\xA0\xAD\xAE "; // "\f32сломано "
 	}
 
-	/*
-	"\f09ïðîêëÿòî "
-	*/
 	const char *ITEM_CURSED() {
-		return "\f09\xAF\xE0\xAE\xAA\xAB\xEF\xE2\xAE ";
+		return "\f09\xAF\xE0\xAE\xAA\xAB\xEF\xE2\xAE "; // "\f09проклято "
 	}
 
 	const char *ITEM_OF() {
 		return "";
 	}
 
-	/*
-	"", "Óáèéöû äðàêîíîâ", "Èçãîíÿþùåãî ì¸ðòâûõ", "Êðóøèòåëÿ ãîëåìîâ",
-	"Äàâèòåëÿ íàñåêîìûõ", "Óáèéöû ìîíñòðîâ", "Óáèéöû çâåðåé"
-	*/
 	const char **BONUS_NAMES() {
 		delete[] _bonusNames;
 		_bonusNames = new const char *[7] {
-			"", "\x93\xA1\xA8\xA9\xE6\xEB \xA4\xE0\xA0\xAA\xAE\xAD\xAE\xA2", "\x88\xA7\xA3\xAE\xAD\xEF\xEE\xE9\xA5\xA3\xAE \xAC\xF1\xE0\xE2\xA2\xEB\xE5", "\x8A\xE0\xE3\xE8\xA8\xE2\xA5\xAB\xEF \xA3\xAE\xAB\xA5\xAC\xAE\xA2",
-				"\x84\xA0\xA2\xA8\xE2\xA5\xAB\xEF \xAD\xA0\xE1\xA5\xAA\xAE\xAC\xEB\xE5", "\x93\xA1\xA8\xA9\xE6\xEB \xAC\xAE\xAD\xE1\xE2\xE0\xAE\xA2", "\x93\xA1\xA8\xA9\xE6\xEB \xA7\xA2\xA5\xE0\xA5\xA9"
+			"", "\x93\xA1\xA8\xA9\xE6\xEB \xA4\xE0\xA0\xAA\xAE\xAD\xAE\xA2", "\x88\xA7\xA3\xAE\xAD\xEF\xEE\xE9\xA5\xA3\xAE \xAC\xF1\xE0\xE2\xA2\xEB\xE5", "\x8A\xE0\xE3\xE8\xA8\xE2\xA5\xAB\xEF \xA3\xAE\xAB\xA5\xAC\xAE\xA2", // "", "Убийцы драконов", "Изгоняющего мёртвых", "Крушителя големов",
+			"\x84\xA0\xA2\xA8\xE2\xA5\xAB\xEF \xAD\xA0\xE1\xA5\xAA\xAE\xAC\xEB\xE5", "\x93\xA1\xA8\xA9\xE6\xEB \xAC\xAE\xAD\xE1\xE2\xE0\xAE\xA2", "\x93\xA1\xA8\xA9\xE6\xEB \xA7\xA2\xA5\xE0\xA5\xA9"                          // "Давителя насекомых", "Убийцы монстров", "Убийцы зверей"
 		};
 		return _bonusNames;
 	}
 
-	/*
-	nullptr, "ìå÷ ", "ãëàäèóñ ", "ïàëàø ", "ÿòàãàí ",
-	"êîðòèê ", "ñàáëÿ ", "äóáèíà ", "òîïîð ", "êàòàíà ", "íóí÷àêè ",
-	"âàêèäçàñè ", "êèíæàë ", "áóëàâà ", "öåï ", "æåçë ", "ìîëîò ", "êîïü¸ ",
-	"áåðäûø ", "ãëåôà ", "àëåáàðäà ", "ïèêà ", "ôëàìáåðã ", "òðåçóáåö ",
-	"ïîñîõ ", "áîåâîé ìîëîò ", "íàãèíàòà ", "áîåâîé òîïîð ", "ñåêèðà ",
-	"òîïîð ïàëà÷à ", "ëóê ", "áîëüøîé ëóê ", "àðáàëåò ", "ïðàùà ",
-	"Ìå÷ - óáèéöà Êñèíà ",
-	"Elder LongSword ", "Elder Dagger ", "Elder Mace ", "Elder Spear ",
-	"Elder Staff ", "Elder LongBow "
-	*/
 	const char **WEAPON_NAMES() {
 		delete[] _weaponNames;
 		_weaponNames = new const char *[41] {
-			nullptr, "\xAC\xA5\xE7 ", "\xA3\xAB\xA0\xA4\xA8\xE3\xE1 ", "\xAF\xA0\xAB\xA0\xE8 ", "\xEF\xE2\xA0\xA3\xA0\xAD ",
-				"\xAA\xAE\xE0\xE2\xA8\xAA ", "\xE1\xA0\xA1\xAB\xEF ", "\xA4\xE3\xA1\xA8\xAD\xA0 ", "\xE2\xAE\xAF\xAE\xE0 ", "\xAA\xA0\xE2\xA0\xAD\xA0 ", "\xAD\xE3\xAD\xE7\xA0\xAA\xA8 ",
-				"\xA2\xA0\xAA\xA8\xA4\xA7\xA0\xE1\xA8 ", "\xAA\xA8\xAD\xA6\xA0\xAB ", "\xA1\xE3\xAB\xA0\xA2\xA0 ", "\xE6\xA5\xAF ", "\xA6\xA5\xA7\xAB ", "\xAC\xAE\xAB\xAE\xE2 ", "\xAA\xAE\xAF\xEC\xF1 ",
-				"\xA1\xA5\xE0\xA4\xEB\xE8 ", "\xA3\xAB\xA5\xE4\xA0 ", "\xA0\xAB\xA5\xA1\xA0\xE0\xA4\xA0 ", "\xAF\xA8\xAA\xA0 ", "\xE4\xAB\xA0\xAC\xA1\xA5\xE0\xA3 ", "\xE2\xE0\xA5\xA7\xE3\xA1\xA5\xE6 ",
-				"\xAF\xAE\xE1\xAE\xE5 ", "\xA1\xAE\xA5\xA2\xAE\xA9 \xAC\xAE\xAB\xAE\xE2 ", "\xAD\xA0\xA3\xA8\xAD\xA0\xE2\xA0 ", "\xA1\xAE\xA5\xA2\xAE\xA9 \xE2\xAE\xAF\xAE\xE0 ", "\xE1\xA5\xAA\xA8\xE0\xA0 ",
-				"\xE2\xAE\xAF\xAE\xE0 \xAF\xA0\xAB\xA0\xE7\xA0 ", "\xAB\xE3\xAA ", "\xA1\xAE\xAB\xEC\xE8\xAE\xA9 \xAB\xE3\xAA ", "\xA0\xE0\xA1\xA0\xAB\xA5\xE2 ", "\xAF\xE0\xA0\xE9\xA0 ",
-				"\x8C\xA5\xE7 - \xE3\xA1\xA8\xA9\xE6\xA0 \x8A\xE1\xA8\xAD\xA0 ",
-				"Elder LongSword ", "Elder Dagger ", "Elder Mace ", "Elder Spear ",
-				"Elder Staff ", "Elder LongBow "
+			nullptr, "\xAC\xA5\xE7 ", "\xA3\xAB\xA0\xA4\xA8\xE3\xE1 ", "\xAF\xA0\xAB\xA0\xE8 ", "\xEF\xE2\xA0\xA3\xA0\xAD ",																			   // nullptr, "меч ", "гладиус ", "палаш ", "ятаган ",
+			"\xAA\xAE\xE0\xE2\xA8\xAA ", "\xE1\xA0\xA1\xAB\xEF ", "\xA4\xE3\xA1\xA8\xAD\xA0 ", "\xE2\xAE\xAF\xAE\xE0 ", "\xAA\xA0\xE2\xA0\xAD\xA0 ", "\xAD\xE3\xAD\xE7\xA0\xAA\xA8 ",                      // "кортик ", "сабля ", "дубина ", "топор ", "катана ", "нунчаки ",
+			"\xA2\xA0\xAA\xA8\xA4\xA7\xA0\xE1\xA8 ", "\xAA\xA8\xAD\xA6\xA0\xAB ", "\xA1\xE3\xAB\xA0\xA2\xA0 ", "\xE6\xA5\xAF ", "\xA6\xA5\xA7\xAB ", "\xAC\xAE\xAB\xAE\xE2 ", "\xAA\xAE\xAF\xEC\xF1 ",     // "вакидзаси ", "кинжал ", "булава ", "цеп ", "жезл ", "молот ", "копьё ",
+			"\xA1\xA5\xE0\xA4\xEB\xE8 ", "\xA3\xAB\xA5\xE4\xA0 ", "\xA0\xAB\xA5\xA1\xA0\xE0\xA4\xA0 ", "\xAF\xA8\xAA\xA0 ", "\xE4\xAB\xA0\xAC\xA1\xA5\xE0\xA3 ", "\xE2\xE0\xA5\xA7\xE3\xA1\xA5\xE6 ",      // "бердыш ", "глефа ", "алебарда ", "пика ", "фламберг ", "трезубец ",
+			"\xAF\xAE\xE1\xAE\xE5 ", "\xA1\xAE\xA5\xA2\xAE\xA9 \xAC\xAE\xAB\xAE\xE2 ", "\xAD\xA0\xA3\xA8\xAD\xA0\xE2\xA0 ", "\xA1\xAE\xA5\xA2\xAE\xA9 \xE2\xAE\xAF\xAE\xE0 ", "\xE1\xA5\xAA\xA8\xE0\xA0 ", // "посох ", "боевой молот ", "нагината ", "боевой топор ", "секира ",
+			"\xE2\xAE\xAF\xAE\xE0 \xAF\xA0\xAB\xA0\xE7\xA0 ", "\xAB\xE3\xAA ", "\xA1\xAE\xAB\xEC\xE8\xAE\xA9 \xAB\xE3\xAA ", "\xA0\xE0\xA1\xA0\xAB\xA5\xE2 ", "\xAF\xE0\xA0\xE9\xA0 ",                     // "топор палача ", "лук ", "большой лук ", "арбалет ", "праща ",
+			"\x8C\xA5\xE7 - \xE3\xA1\xA8\xA9\xE6\xA0 \x8A\xE1\xA8\xAD\xA0 ",                                                                                                                               // "Меч - убийца Ксина ",
+			"Elder LongSword ", "Elder Dagger ", "Elder Mace ", "Elder Spear ",                                                                                                                            // "Elder LongSword ", "Elder Dagger ", "Elder Mace ", "Elder Spear ",
+			"Elder Staff ", "Elder LongBow "                                                                                                                                                               // "Elder Staff ", "Elder LongBow "
 		};
 		return _weaponNames;
 	}
 
-	/*
-	nullptr, "ìàíòèÿ ", "÷åøóÿ ", "ïàíöèðü ", "êîëü÷óãà ",
-	"þøìàí ", "áåõòåðåö ", "ëàòû ", "ùèò ",
-	"øëåì ", "ñàïîãè ", "ïëàù ", "íàêèäêà ", "ïåð÷àòêè "
-	*/
 	const char **ARMOR_NAMES() {
 		delete[] _armorNames;
 		_armorNames = new const char *[14] {
-			nullptr, "\xAC\xA0\xAD\xE2\xA8\xEF ", "\xE7\xA5\xE8\xE3\xEF ", "\xAF\xA0\xAD\xE6\xA8\xE0\xEC ", "\xAA\xAE\xAB\xEC\xE7\xE3\xA3\xA0 ",
-				"\xEE\xE8\xAC\xA0\xAD ", "\xA1\xA5\xE5\xE2\xA5\xE0\xA5\xE6 ", "\xAB\xA0\xE2\xEB ", "\xE9\xA8\xE2 ",
-				"\xE8\xAB\xA5\xAC ", "\xE1\xA0\xAF\xAE\xA3\xA8 ", "\xAF\xAB\xA0\xE9 ", "\xAD\xA0\xAA\xA8\xA4\xAA\xA0 ", "\xAF\xA5\xE0\xE7\xA0\xE2\xAA\xA8 "
+			nullptr, "\xAC\xA0\xAD\xE2\xA8\xEF ", "\xE7\xA5\xE8\xE3\xEF ", "\xAF\xA0\xAD\xE6\xA8\xE0\xEC ", "\xAA\xAE\xAB\xEC\xE7\xE3\xA3\xA0 ",		// nullptr, "мантия ", "чешуя ", "панцирь ", "кольчуга ",
+			"\xEE\xE8\xAC\xA0\xAD ", "\xA1\xA5\xE5\xE2\xA5\xE0\xA5\xE6 ", "\xAB\xA0\xE2\xEB ", "\xE9\xA8\xE2 ",                                         // "юшман ", "бехтерец ", "латы ", "щит ",
+			"\xE8\xAB\xA5\xAC ", "\xE1\xA0\xAF\xAE\xA3\xA8 ", "\xAF\xAB\xA0\xE9 ", "\xAD\xA0\xAA\xA8\xA4\xAA\xA0 ", "\xAF\xA5\xE0\xE7\xA0\xE2\xAA\xA8 " // "шлем ", "сапоги ", "плащ ", "накидка ", "перчатки "
 		};
 		return _armorNames;
 	}
 
-	/*
-	nullptr, "êîëüöî ", "ïîÿñ ", "áðîøü ", "ìåäàëü ", "òàëèñìàí ", "êàìåÿ ",
-	"ñêàðàáåé ", "êóëîí ", "îæåðåëüå ", "àìóëåò "
-	*/
 	const char **ACCESSORY_NAMES() {
 		delete[] _accessoryNames;
 		_accessoryNames = new const char *[11] {
-			nullptr, "\xAA\xAE\xAB\xEC\xE6\xAE ", "\xAF\xAE\xEF\xE1 ", "\xA1\xE0\xAE\xE8\xEC ", "\xAC\xA5\xA4\xA0\xAB\xEC ", "\xE2\xA0\xAB\xA8\xE1\xAC\xA0\xAD ", "\xAA\xA0\xAC\xA5\xEF ",
-				"\xE1\xAA\xA0\xE0\xA0\xA1\xA5\xA9 ", "\xAA\xE3\xAB\xAE\xAD ", "\xAE\xA6\xA5\xE0\xA5\xAB\xEC\xA5 ", "\xA0\xAC\xE3\xAB\xA5\xE2 "
+			nullptr, "\xAA\xAE\xAB\xEC\xE6\xAE ", "\xAF\xAE\xEF\xE1 ", "\xA1\xE0\xAE\xE8\xEC ", "\xAC\xA5\xA4\xA0\xAB\xEC ", "\xE2\xA0\xAB\xA8\xE1\xAC\xA0\xAD ", "\xAA\xA0\xAC\xA5\xEF ", // nullptr, "кольцо ", "пояс ", "брошь ", "медаль ", "талисман ", "камея ",
+			"\xE1\xAA\xA0\xE0\xA0\xA1\xA5\xA9 ", "\xAA\xE3\xAB\xAE\xAD ", "\xAE\xA6\xA5\xE0\xA5\xAB\xEC\xA5 ", "\xA0\xAC\xE3\xAB\xA5\xE2 "                                                 // "скарабей ", "кулон ", "ожерелье ", "амулет "
 		};
 		return _accessoryNames;
 	}
 
-	/*
-	nullptr, "ñêèïåòð ", "ñàìîöâåò ", "êàìåíü ", "øêàòóëêà ", "ñôåðà ", "ðîã ",
-	"ìîíåòêà ", "æåçë ", "ñâèñòîê ", "çåëüå ", "ñâèòîê ", "ïîääåëêà", "ïîääåëêà",
-	"ïîääåëêà", "ïîääåëêà", "ïîääåëêà", "ïîääåëêà", "ïîääåëêà", "ïîääåëêà",
-	"ïîääåëêà", "ïîääåëêà"
-	*/
 	const char **MISC_NAMES() {
 		delete[] _miscNames;
 		_miscNames = new const char *[22] {
-			nullptr, "\xE1\xAA\xA8\xAF\xA5\xE2\xE0 ", "\xE1\xA0\xAC\xAE\xE6\xA2\xA5\xE2 ", "\xAA\xA0\xAC\xA5\xAD\xEC ", "\xE8\xAA\xA0\xE2\xE3\xAB\xAA\xA0 ", "\xE1\xE4\xA5\xE0\xA0 ", "\xE0\xAE\xA3 ",
-				"\xAC\xAE\xAD\xA5\xE2\xAA\xA0 ", "\xA6\xA5\xA7\xAB ", "\xE1\xA2\xA8\xE1\xE2\xAE\xAA ", "\xA7\xA5\xAB\xEC\xA5 ", "\xE1\xA2\xA8\xE2\xAE\xAA ", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0",
-				"\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0",
-				"\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0"
+			nullptr, "\xE1\xAA\xA8\xAF\xA5\xE2\xE0 ", "\xE1\xA0\xAC\xAE\xE6\xA2\xA5\xE2 ", "\xAA\xA0\xAC\xA5\xAD\xEC ", "\xE8\xAA\xA0\xE2\xE3\xAB\xAA\xA0 ", "\xE1\xE4\xA5\xE0\xA0 ", "\xE0\xAE\xA3 ",								// nullptr, "скипетр ", "самоцвет ", "камень ", "шкатулка ", "сфера ", "рог ",
+			"\xAC\xAE\xAD\xA5\xE2\xAA\xA0 ", "\xA6\xA5\xA7\xAB ", "\xE1\xA2\xA8\xE1\xE2\xAE\xAA ", "\xA7\xA5\xAB\xEC\xA5 ", "\xE1\xA2\xA8\xE2\xAE\xAA ", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0",    // "монетка ", "жезл ", "свисток ", "зелье ", "свиток ", "подделка", "подделка",
+			"\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", // "подделка", "подделка", "подделка", "подделка", "подделка", "подделка",
+			"\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0", "\xAF\xAE\xA4\xA4\xA5\xAB\xAA\xA0"                                                                                                                                                  // "подделка", "подделка"
 		};
 		return _miscNames;
 	}
 
-	/*
-	nullptr, "ñâåòà", "ïðîáóæäåíèÿ", "âîëøåáíûõ ñòðåë", "ïåðâîé ïîìîùè",
-	"êóëàêîâ", "ýíåðãåòè÷åñêîãî âçðûâà", "óñûïëåíèÿ", "ëå÷åíèÿ ñëàáîñòè",
-	"ëå÷åíèÿ", "èñêð", "øðàïíåëè", "ðåïåëëåíòà", "ÿäîâèòûõ îáëàêîâ",
-	"çàùèòû îò ñòèõèé", "áîëè", "ïðûæêîâ", "êîíòðîëÿ íàä ìîíñòðàìè",
-	"ÿñíîâèäåíèÿ", "èçãíàíèÿ íåæèòè", "ëåâèòàöèè", "âîëøåáíîãî ãëàçà",
-	"áëàãîñëîâåíèÿ", "îïîçíàíèÿ ìîíñòðîâ", "ìîëíèé", "ñâÿòûõ äàðîâ", "èñöåëåíèÿ",
-	"ïðèðîäíîãî ëå÷åíèÿ", "ìàÿêîâ", "ùèòà", "ìóæåñòâà", "ãèïíîçà",
-	"õîæäåíèÿ ïî âîäå", "îáæèãàþùåãî õîëîäà", "ïîèñêà ìîíñòðîâ",
-	"îãíåííûõ øàðîâ", "ëó÷åé õîëîäà", "ïðîòèâîÿäèÿ", "ðàñïûëåíèÿ êèñëîòû",
-	"âðåìåííîãî èñêàæåíèÿ", "óñûïëåíèÿ äðàêîíîâ", "âàêöèíàöèè", "òåëåïîðòàöèè",
-	"ñìåðòè", "ñâîáîäíîãî äâèæåíèÿ", "îñòàíîâêè ãîëåìà", "ÿäîâèòûõ çàëïîâ",
-	"ñìåðòåëüíîãî ðîÿ", "óáåæèùà", "äíÿ çàùèòû", "äíÿ ìàãèè", "ïèðà",
-	"îãíåííîãî öåïà", "ïåðåçàðÿäêè", "ìîðîçà", "ãîðîäñêèõ ïîðòàëîâ",
-	"ñíÿòèÿ îêàìåíåíèÿ", "îæèâëåíèÿ ì¸ðòâûõ", "äåìàòåðèàëèçàöèè",
-	"òàíöóþùèõ êëèíêîâ", "ëóííûõ ëó÷åé", "èçìåíåíèÿ âåñà",
-	"ïðèçìàòè÷åñêîãî ñâåòà", "÷àð", "èñïåïåëåíèÿ", "ñâÿòûõ ñëîâ", "âîñêðåøåíèÿ",
-	"áóðü", "ìåãàâîëüò", "èíôåðíî", "ñîëíå÷íûõ ëó÷åé", "èìïëîçèé",
-	"âçðûâà çâåçäû", "ÁÎÃÎÂ!"
-	*/
 	const char **SPECIAL_NAMES() {
 		delete[] _specialNames;
 		_specialNames = new const char *[74] {
-			nullptr, "\xE1\xA2\xA5\xE2\xA0", "\xAF\xE0\xAE\xA1\xE3\xA6\xA4\xA5\xAD\xA8\xEF", "\xA2\xAE\xAB\xE8\xA5\xA1\xAD\xEB\xE5 \xE1\xE2\xE0\xA5\xAB", "\xAF\xA5\xE0\xA2\xAE\xA9 \xAF\xAE\xAC\xAE\xE9\xA8",
-				"\xAA\xE3\xAB\xA0\xAA\xAE\xA2", "\xED\xAD\xA5\xE0\xA3\xA5\xE2\xA8\xE7\xA5\xE1\xAA\xAE\xA3\xAE \xA2\xA7\xE0\xEB\xA2\xA0", "\xE3\xE1\xEB\xAF\xAB\xA5\xAD\xA8\xEF", "\xAB\xA5\xE7\xA5\xAD\xA8\xEF \xE1\xAB\xA0\xA1\xAE\xE1\xE2\xA8",
-				"\xAB\xA5\xE7\xA5\xAD\xA8\xEF", "\xA8\xE1\xAA\xE0", "\xE8\xE0\xA0\xAF\xAD\xA5\xAB\xA8", "\xE0\xA5\xAF\xA5\xAB\xAB\xA5\xAD\xE2\xA0", "\xEF\xA4\xAE\xA2\xA8\xE2\xEB\xE5 \xAE\xA1\xAB\xA0\xAA\xAE\xA2",
-				"\xA7\xA0\xE9\xA8\xE2\xEB \xAE\xE2 \xE1\xE2\xA8\xE5\xA8\xA9", "\xA1\xAE\xAB\xA8", "\xAF\xE0\xEB\xA6\xAA\xAE\xA2", "\xAA\xAE\xAD\xE2\xE0\xAE\xAB\xEF \xAD\xA0\xA4 \xAC\xAE\xAD\xE1\xE2\xE0\xA0\xAC\xA8",
-				"\xEF\xE1\xAD\xAE\xA2\xA8\xA4\xA5\xAD\xA8\xEF", "\xA8\xA7\xA3\xAD\xA0\xAD\xA8\xEF \xAD\xA5\xA6\xA8\xE2\xA8", "\xAB\xA5\xA2\xA8\xE2\xA0\xE6\xA8\xA8", "\xA2\xAE\xAB\xE8\xA5\xA1\xAD\xAE\xA3\xAE \xA3\xAB\xA0\xA7\xA0",
-				"\xA1\xAB\xA0\xA3\xAE\xE1\xAB\xAE\xA2\xA5\xAD\xA8\xEF", "\xAE\xAF\xAE\xA7\xAD\xA0\xAD\xA8\xEF \xAC\xAE\xAD\xE1\xE2\xE0\xAE\xA2", "\xAC\xAE\xAB\xAD\xA8\xA9", "\xE1\xA2\xEF\xE2\xEB\xE5 \xA4\xA0\xE0\xAE\xA2", "\xA8\xE1\xE6\xA5\xAB\xA5\xAD\xA8\xEF",
-				"\xAF\xE0\xA8\xE0\xAE\xA4\xAD\xAE\xA3\xAE \xAB\xA5\xE7\xA5\xAD\xA8\xEF", "\xAC\xA0\xEF\xAA\xAE\xA2", "\xE9\xA8\xE2\xA0", "\xAC\xE3\xA6\xA5\xE1\xE2\xA2\xA0", "\xA3\xA8\xAF\xAD\xAE\xA7\xA0",
-				"\xE5\xAE\xA6\xA4\xA5\xAD\xA8\xEF \xAF\xAE \xA2\xAE\xA4\xA5", "\xAE\xA1\xA6\xA8\xA3\xA0\xEE\xE9\xA5\xA3\xAE \xE5\xAE\xAB\xAE\xA4\xA0", "\xAF\xAE\xA8\xE1\xAA\xA0 \xAC\xAE\xAD\xE1\xE2\xE0\xAE\xA2",
-				"\xAE\xA3\xAD\xA5\xAD\xAD\xEB\xE5 \xE8\xA0\xE0\xAE\xA2", "\xAB\xE3\xE7\xA5\xA9 \xE5\xAE\xAB\xAE\xA4\xA0", "\xAF\xE0\xAE\xE2\xA8\xA2\xAE\xEF\xA4\xA8\xEF", "\xE0\xA0\xE1\xAF\xEB\xAB\xA5\xAD\xA8\xEF \xAA\xA8\xE1\xAB\xAE\xE2\xEB",
-				"\xA2\xE0\xA5\xAC\xA5\xAD\xAD\xAE\xA3\xAE \xA8\xE1\xAA\xA0\xA6\xA5\xAD\xA8\xEF", "\xE3\xE1\xEB\xAF\xAB\xA5\xAD\xA8\xEF \xA4\xE0\xA0\xAA\xAE\xAD\xAE\xA2", "\xA2\xA0\xAA\xE6\xA8\xAD\xA0\xE6\xA8\xA8", "\xE2\xA5\xAB\xA5\xAF\xAE\xE0\xE2\xA0\xE6\xA8\xA8",
-				"\xE1\xAC\xA5\xE0\xE2\xA8", "\xE1\xA2\xAE\xA1\xAE\xA4\xAD\xAE\xA3\xAE \xA4\xA2\xA8\xA6\xA5\xAD\xA8\xEF", "\xAE\xE1\xE2\xA0\xAD\xAE\xA2\xAA\xA8 \xA3\xAE\xAB\xA5\xAC\xA0", "\xEF\xA4\xAE\xA2\xA8\xE2\xEB\xE5 \xA7\xA0\xAB\xAF\xAE\xA2",
-				"\xE1\xAC\xA5\xE0\xE2\xA5\xAB\xEC\xAD\xAE\xA3\xAE \xE0\xAE\xEF", "\xE3\xA1\xA5\xA6\xA8\xE9\xA0", "\xA4\xAD\xEF \xA7\xA0\xE9\xA8\xE2\xEB", "\xA4\xAD\xEF \xAC\xA0\xA3\xA8\xA8", "\xAF\xA8\xE0\xA0",
-				"\xAE\xA3\xAD\xA5\xAD\xAD\xAE\xA3\xAE \xE6\xA5\xAF\xA0", "\xAF\xA5\xE0\xA5\xA7\xA0\xE0\xEF\xA4\xAA\xA8", "\xAC\xAE\xE0\xAE\xA7\xA0", "\xA3\xAE\xE0\xAE\xA4\xE1\xAA\xA8\xE5 \xAF\xAE\xE0\xE2\xA0\xAB\xAE\xA2",
-				"\xE1\xAD\xEF\xE2\xA8\xEF \xAE\xAA\xA0\xAC\xA5\xAD\xA5\xAD\xA8\xEF", "\xAE\xA6\xA8\xA2\xAB\xA5\xAD\xA8\xEF \xAC\xF1\xE0\xE2\xA2\xEB\xE5", "\xA4\xA5\xAC\xA0\xE2\xA5\xE0\xA8\xA0\xAB\xA8\xA7\xA0\xE6\xA8\xA8",
-				"\xE2\xA0\xAD\xE6\xE3\xEE\xE9\xA8\xE5 \xAA\xAB\xA8\xAD\xAA\xAE\xA2", "\xAB\xE3\xAD\xAD\xEB\xE5 \xAB\xE3\xE7\xA5\xA9", "\xA8\xA7\xAC\xA5\xAD\xA5\xAD\xA8\xEF \xA2\xA5\xE1\xA0",
-				"\xAF\xE0\xA8\xA7\xAC\xA0\xE2\xA8\xE7\xA5\xE1\xAA\xAE\xA3\xAE \xE1\xA2\xA5\xE2\xA0", "\xE7\xA0\xE0", "\xA8\xE1\xAF\xA5\xAF\xA5\xAB\xA5\xAD\xA8\xEF", "\xE1\xA2\xEF\xE2\xEB\xE5 \xE1\xAB\xAE\xA2", "\xA2\xAE\xE1\xAA\xE0\xA5\xE8\xA5\xAD\xA8\xEF",
-				"\xA1\xE3\xE0\xEC", "\xAC\xA5\xA3\xA0\xA2\xAE\xAB\xEC\xE2", "\xA8\xAD\xE4\xA5\xE0\xAD\xAE", "\xE1\xAE\xAB\xAD\xA5\xE7\xAD\xEB\xE5 \xAB\xE3\xE7\xA5\xA9", "\xA8\xAC\xAF\xAB\xAE\xA7\xA8\xA9",
-				"\xA2\xA7\xE0\xEB\xA2\xA0 \xA7\xA2\xA5\xA7\xA4\xEB", "\x81\x8E\x83\x8E\x82!"
+			nullptr, "\xE1\xA2\xA5\xE2\xA0", "\xAF\xE0\xAE\xA1\xE3\xA6\xA4\xA5\xAD\xA8\xEF", "\xA2\xAE\xAB\xE8\xA5\xA1\xAD\xEB\xE5 \xE1\xE2\xE0\xA5\xAB", "\xAF\xA5\xE0\xA2\xAE\xA9 \xAF\xAE\xAC\xAE\xE9\xA8",														  // nullptr, "света", "пробуждения", "волшебных стрел", "первой помощи",
+			"\xAA\xE3\xAB\xA0\xAA\xAE\xA2", "\xED\xAD\xA5\xE0\xA3\xA5\xE2\xA8\xE7\xA5\xE1\xAA\xAE\xA3\xAE \xA2\xA7\xE0\xEB\xA2\xA0", "\xE3\xE1\xEB\xAF\xAB\xA5\xAD\xA8\xEF", "\xAB\xA5\xE7\xA5\xAD\xA8\xEF \xE1\xAB\xA0\xA1\xAE\xE1\xE2\xA8",                         // "кулаков", "энергетического взрыва", "усыпления", "лечения слабости",
+			"\xAB\xA5\xE7\xA5\xAD\xA8\xEF", "\xA8\xE1\xAA\xE0", "\xE8\xE0\xA0\xAF\xAD\xA5\xAB\xA8", "\xE0\xA5\xAF\xA5\xAB\xAB\xA5\xAD\xE2\xA0", "\xEF\xA4\xAE\xA2\xA8\xE2\xEB\xE5 \xAE\xA1\xAB\xA0\xAA\xAE\xA2",                                                      // "лечения", "искр", "шрапнели", "репеллента", "ядовитых облаков",
+			"\xA7\xA0\xE9\xA8\xE2\xEB \xAE\xE2 \xE1\xE2\xA8\xE5\xA8\xA9", "\xA1\xAE\xAB\xA8", "\xAF\xE0\xEB\xA6\xAA\xAE\xA2", "\xAA\xAE\xAD\xE2\xE0\xAE\xAB\xEF \xAD\xA0\xA4 \xAC\xAE\xAD\xE1\xE2\xE0\xA0\xAC\xA8",                                                   // "защиты от стихий", "боли", "прыжков", "контроля над монстрами",
+			"\xEF\xE1\xAD\xAE\xA2\xA8\xA4\xA5\xAD\xA8\xEF", "\xA8\xA7\xA3\xAD\xA0\xAD\xA8\xEF \xAD\xA5\xA6\xA8\xE2\xA8", "\xAB\xA5\xA2\xA8\xE2\xA0\xE6\xA8\xA8", "\xA2\xAE\xAB\xE8\xA5\xA1\xAD\xAE\xA3\xAE \xA3\xAB\xA0\xA7\xA0",                                     // "ясновидения", "изгнания нежити", "левитации", "волшебного глаза",
+			"\xA1\xAB\xA0\xA3\xAE\xE1\xAB\xAE\xA2\xA5\xAD\xA8\xEF", "\xAE\xAF\xAE\xA7\xAD\xA0\xAD\xA8\xEF \xAC\xAE\xAD\xE1\xE2\xE0\xAE\xA2", "\xAC\xAE\xAB\xAD\xA8\xA9", "\xE1\xA2\xEF\xE2\xEB\xE5 \xA4\xA0\xE0\xAE\xA2", "\xA8\xE1\xE6\xA5\xAB\xA5\xAD\xA8\xEF",     // "благословения", "опознания монстров", "молний", "святых даров", "исцеления",
+			"\xAF\xE0\xA8\xE0\xAE\xA4\xAD\xAE\xA3\xAE \xAB\xA5\xE7\xA5\xAD\xA8\xEF", "\xAC\xA0\xEF\xAA\xAE\xA2", "\xE9\xA8\xE2\xA0", "\xAC\xE3\xA6\xA5\xE1\xE2\xA2\xA0", "\xA3\xA8\xAF\xAD\xAE\xA7\xA0",                                                              // "природного лечения", "маяков", "щита", "мужества", "гипноза",
+			"\xE5\xAE\xA6\xA4\xA5\xAD\xA8\xEF \xAF\xAE \xA2\xAE\xA4\xA5", "\xAE\xA1\xA6\xA8\xA3\xA0\xEE\xE9\xA5\xA3\xAE \xE5\xAE\xAB\xAE\xA4\xA0", "\xAF\xAE\xA8\xE1\xAA\xA0 \xAC\xAE\xAD\xE1\xE2\xE0\xAE\xA2",                                                       // "хождения по воде", "обжигающего холода", "поиска монстров",
+			"\xAE\xA3\xAD\xA5\xAD\xAD\xEB\xE5 \xE8\xA0\xE0\xAE\xA2", "\xAB\xE3\xE7\xA5\xA9 \xE5\xAE\xAB\xAE\xA4\xA0", "\xAF\xE0\xAE\xE2\xA8\xA2\xAE\xEF\xA4\xA8\xEF", "\xE0\xA0\xE1\xAF\xEB\xAB\xA5\xAD\xA8\xEF \xAA\xA8\xE1\xAB\xAE\xE2\xEB",                        // "огненных шаров", "лучей холода", "противоядия", "распыления кислоты",
+			"\xA2\xE0\xA5\xAC\xA5\xAD\xAD\xAE\xA3\xAE \xA8\xE1\xAA\xA0\xA6\xA5\xAD\xA8\xEF", "\xE3\xE1\xEB\xAF\xAB\xA5\xAD\xA8\xEF \xA4\xE0\xA0\xAA\xAE\xAD\xAE\xA2", "\xA2\xA0\xAA\xE6\xA8\xAD\xA0\xE6\xA8\xA8", "\xE2\xA5\xAB\xA5\xAF\xAE\xE0\xE2\xA0\xE6\xA8\xA8", // "временного искажения", "усыпления драконов", "вакцинации", "телепортации",
+			"\xE1\xAC\xA5\xE0\xE2\xA8", "\xE1\xA2\xAE\xA1\xAE\xA4\xAD\xAE\xA3\xAE \xA4\xA2\xA8\xA6\xA5\xAD\xA8\xEF", "\xAE\xE1\xE2\xA0\xAD\xAE\xA2\xAA\xA8 \xA3\xAE\xAB\xA5\xAC\xA0", "\xEF\xA4\xAE\xA2\xA8\xE2\xEB\xE5 \xA7\xA0\xAB\xAF\xAE\xA2",                    // "смерти", "свободного движения", "остановки голема", "ядовитых залпов",
+			"\xE1\xAC\xA5\xE0\xE2\xA5\xAB\xEC\xAD\xAE\xA3\xAE \xE0\xAE\xEF", "\xE3\xA1\xA5\xA6\xA8\xE9\xA0", "\xA4\xAD\xEF \xA7\xA0\xE9\xA8\xE2\xEB", "\xA4\xAD\xEF \xAC\xA0\xA3\xA8\xA8", "\xAF\xA8\xE0\xA0",                                                        // "смертельного роя", "убежища", "дня защиты", "дня магии", "пира",
+			"\xAE\xA3\xAD\xA5\xAD\xAD\xAE\xA3\xAE \xE6\xA5\xAF\xA0", "\xAF\xA5\xE0\xA5\xA7\xA0\xE0\xEF\xA4\xAA\xA8", "\xAC\xAE\xE0\xAE\xA7\xA0", "\xA3\xAE\xE0\xAE\xA4\xE1\xAA\xA8\xE5 \xAF\xAE\xE0\xE2\xA0\xAB\xAE\xA2",                                             // "огненного цепа", "перезарядки", "мороза", "городских порталов",
+			"\xE1\xAD\xEF\xE2\xA8\xEF \xAE\xAA\xA0\xAC\xA5\xAD\xA5\xAD\xA8\xEF", "\xAE\xA6\xA8\xA2\xAB\xA5\xAD\xA8\xEF \xAC\xF1\xE0\xE2\xA2\xEB\xE5", "\xA4\xA5\xAC\xA0\xE2\xA5\xE0\xA8\xA0\xAB\xA8\xA7\xA0\xE6\xA8\xA8",                                             // "снятия окаменения", "оживления мёртвых", "дематериализации",
+			"\xE2\xA0\xAD\xE6\xE3\xEE\xE9\xA8\xE5 \xAA\xAB\xA8\xAD\xAA\xAE\xA2", "\xAB\xE3\xAD\xAD\xEB\xE5 \xAB\xE3\xE7\xA5\xA9", "\xA8\xA7\xAC\xA5\xAD\xA5\xAD\xA8\xEF \xA2\xA5\xE1\xA0",                                                                            // "танцующих клинков", "лунных лучей", "изменения веса",
+			"\xAF\xE0\xA8\xA7\xAC\xA0\xE2\xA8\xE7\xA5\xE1\xAA\xAE\xA3\xAE \xE1\xA2\xA5\xE2\xA0", "\xE7\xA0\xE0", "\xA8\xE1\xAF\xA5\xAF\xA5\xAB\xA5\xAD\xA8\xEF", "\xE1\xA2\xEF\xE2\xEB\xE5 \xE1\xAB\xAE\xA2", "\xA2\xAE\xE1\xAA\xE0\xA5\xE8\xA5\xAD\xA8\xEF",         // "призматического света", "чар", "испепеления", "святых слов", "воскрешения",
+			"\xA1\xE3\xE0\xEC", "\xAC\xA5\xA3\xA0\xA2\xAE\xAB\xEC\xE2", "\xA8\xAD\xE4\xA5\xE0\xAD\xAE", "\xE1\xAE\xAB\xAD\xA5\xE7\xAD\xEB\xE5 \xAB\xE3\xE7\xA5\xA9", "\xA8\xAC\xAF\xAB\xAE\xA7\xA8\xA9",                                                              // "бурь", "мегавольт", "инферно", "солнечных лучей", "имплозий",
+			"\xA2\xA7\xE0\xEB\xA2\xA0 \xA7\xA2\xA5\xA7\xA4\xEB", "\x81\x8E\x83\x8E\x82!"                                                                                                                                                                              // "взрыва звезды", "БОГОВ!"
 		};
 		return _specialNames;
 	}
 
-	/*
-	"Îãíÿ", "Ãðîìà", "Õîëîäà", "Êèñëîòû/ßäà", "Ýíåðãèè", "Ìàãèè"
-	*/
 	const char **ELEMENTAL_NAMES() {
 		delete[] _elementalNames;
 		_elementalNames = new const char *[6] {
-			"\x8E\xA3\xAD\xEF", "\x83\xE0\xAE\xAC\xA0", "\x95\xAE\xAB\xAE\xA4\xA0", "\x8A\xA8\xE1\xAB\xAE\xE2\xEB/\x9F\xA4\xA0", "\x9D\xAD\xA5\xE0\xA3\xA8\xA8", "\x8C\xA0\xA3\xA8\xA8"
+			"\x8E\xA3\xAD\xEF", "\x83\xE0\xAE\xAC\xA0", "\x95\xAE\xAB\xAE\xA4\xA0", "\x8A\xA8\xE1\xAB\xAE\xE2\xEB/\x9F\xA4\xA0", "\x9D\xAD\xA5\xE0\xA3\xA8\xA8", "\x8C\xA0\xA3\xA8\xA8" // "Огня", "Грома", "Холода", "Кислоты/Яда", "Энергии", "Магии"
 		};
 		return _elementalNames;
 	}
 
-	/*
-	"Ñèëà", "Èíòåëëåêò", "Ñèëà äóõà", "Ñêîðîñòü", "Ìåòêîñòü", "Óäà÷à",
-	"Çäîðîâüå", "Î÷êè ìàãèè", "Êëàññ çàùèòû", "Âîðîâñòâî"
-	*/
 	const char **ATTRIBUTE_NAMES() {
 		delete[] _attributeNames;
 		_attributeNames = new const char *[10] {
-			"\x91\xA8\xAB\xA0", "\x88\xAD\xE2\xA5\xAB\xAB\xA5\xAA\xE2", "\x91\xA8\xAB\xA0 \xA4\xE3\xE5\xA0", "\x91\xAA\xAE\xE0\xAE\xE1\xE2\xEC", "\x8C\xA5\xE2\xAA\xAE\xE1\xE2\xEC", "\x93\xA4\xA0\xE7\xA0",
-				"\x87\xA4\xAE\xE0\xAE\xA2\xEC\xA5", "\x8E\xE7\xAA\xA8 \xAC\xA0\xA3\xA8\xA8", "\x8A\xAB\xA0\xE1\xE1 \xA7\xA0\xE9\xA8\xE2\xEB", "\x82\xAE\xE0\xAE\xA2\xE1\xE2\xA2\xAE"
+			"\x91\xA8\xAB\xA0", "\x88\xAD\xE2\xA5\xAB\xAB\xA5\xAA\xE2", "\x91\xA8\xAB\xA0 \xA4\xE3\xE5\xA0", "\x91\xAA\xAE\xE0\xAE\xE1\xE2\xEC", "\x8C\xA5\xE2\xAA\xAE\xE1\xE2\xEC", "\x93\xA4\xA0\xE7\xA0", // "Сила", "Интеллект", "Сила духа", "Скорость", "Меткость", "Удача",
+			"\x87\xA4\xAE\xE0\xAE\xA2\xEC\xA5", "\x8E\xE7\xAA\xA8 \xAC\xA0\xA3\xA8\xA8", "\x8A\xAB\xA0\xE1\xE1 \xA7\xA0\xE9\xA8\xE2\xEB", "\x82\xAE\xE0\xAE\xA2\xE1\xE2\xA2\xAE"                             // "Здоровье", "Очки магии", "Класс защиты", "Воровство"
 		};
 		return _attributeNames;
 	}
 
-	/*
-	nullptr, "Äðàêîíîâ", "̸ðòâûõ", "Ãîëåìîâ", "Íàñåêîìûõ", "Ìîíñòðîâ", "Çâåðåé"
-	*/
 	const char **EFFECTIVENESS_NAMES() {
 		delete[] _effectivenessNames;
 		_effectivenessNames = new const char *[7] {
-			nullptr, "\x84\xE0\xA0\xAA\xAE\xAD\xAE\xA2", "\x8C\xF1\xE0\xE2\xA2\xEB\xE5", "\x83\xAE\xAB\xA5\xAC\xAE\xA2", "\x8D\xA0\xE1\xA5\xAA\xAE\xAC\xEB\xE5", "\x8C\xAE\xAD\xE1\xE2\xE0\xAE\xA2", "\x87\xA2\xA5\xE0\xA5\xA9"
+			nullptr, "\x84\xE0\xA0\xAA\xAE\xAD\xAE\xA2", "\x8C\xF1\xE0\xE2\xA2\xEB\xE5", "\x83\xAE\xAB\xA5\xAC\xAE\xA2", "\x8D\xA0\xE1\xA5\xAA\xAE\xAC\xEB\xE5", "\x8C\xAE\xAD\xE1\xE2\xE0\xAE\xA2", "\x87\xA2\xA5\xE0\xA5\xA9" // nullptr, "Драконов", "Мёртвых", "Големов", "Насекомых", "Монстров", "Зверей"
 		};
 		return _effectivenessNames;
 	}
 
-	/*
-	"Ïðàâî âëàäåíèÿ Íüþêàñëîì",
-	"Õðóñòàëüíûé êëþ÷ îò Âåäüìèíîé áàøíè",
-	"Îòìû÷êà äëÿ áàøíè Äàðçîãà",
-	"Êëþ÷ îò Áàøíè âûñøåé ìàãèè",
-	"Äðàãîöåííûé àìóëåò Ñåâåðíîãî Ñôèíêñà",
-	"Êàìåíü Òûñÿ÷è Óæàñîâ",
-	"Îòïèðàþùèé êàìåíü ãîëåìîâ",
-	"Îòïèðàþùèé êàìåíü ßêà",
-	"Ñêèïåòð Âðåìåííîãî Èñêàæåíèÿ",
-	"Ðîã Ôàëèñòû",
-	"Ýëèêñèð Âîññòàíîâëåíèÿ",
-	"Âîëøåáíûé æåçë ôåé",
-	"Äèàäåìà ïðèíöåññû Ðîêñàíû",
-	"Ñâÿùåííàÿ Êíèãà Ýëüôîâ",
-	"Ñêàðàáåé Âîïëîùåíèÿ",
-	"Êðèñòàëëû Ïüåçîýëåêòðè÷åñòâà",
-	"Ñâèòîê Ìóäðîñòè",
-	"Êîðåíü ôèðíû",
-	"Êîñòÿíîé ñâèñòîê Îðîôèíà",
-	"Âîëøåáíûé êóëîí Áàðîêà",
-	"Ïðîïàâøèé ÷åðåï Ëèãîíî",
-	"Ïîñëåäíèé öâåòîê ëåòà",
-	"Ïîñëåäíÿÿ äîæäåâàÿ êàïåëüêà âåñíû",
-	"Ïîñëåäíÿÿ ñíåæèíêà çèìû",
-	"Ïîñëåäíèé ëèñò îñåíè",
-	"Âå÷íî ãîðÿ÷èé êóñîê ïåìçû",
-	"Ìåãàêðåäèò êîðîëÿ",
-	"Ðàçðåøåíèå íà ðàñêîïêè",
-	"Êóêîëêà",
-	"Êóêëà Ñèëû",
-	"Êóêëà Ñêîðîñòè",
-	"Êóêëà Ñëîæåíèÿ",
-	"Êóêëà Ìåòêîñòè",
-	"Êóêëà Óäà÷è",
-	"Óñòðîéñòâî",
-	"Pass to Castleview",
-	"Pass to Sandcaster",
-	"Pass to Lakeside",
-	"Pass to Necropolis",
-	"Pass to Olympus",
-	"Key to Great Western Tower",
-	"Key to Great Southern Tower",
-	"Key to Great Eastern Tower",
-	"Key to Great Northern Tower",
-	"Key to Ellinger's Tower",
-	"Key to Dragon Tower",
-	"Key to Darkstone Tower",
-	"Key to Temple of Bark",
-	"Key to Dungeon of Lost Souls",
-	"Key to Ancient Pyramid",
-	"Key to Dungeon of Death",
-	"Amulet of the Southern Sphinx",
-	"Dragon Pharoah's Orb",
-	"Cube of Power",
-	"Chime of Opening",
-	"Gold ID Card",
-	"Silver ID Card",
-	"Vulture Repellant",
-	"Bridle",
-	"Enchanted Bridle",
-	"Treasure Map (Goto E1 x1, y11)",
-	"",
-	"Fake Map",
-	"Onyx Necklace",
-	"Dragon Egg",
-	"Tribble",
-	"Golden Pegasus Statuette",
-	"Golden Dragon Statuette",
-	"Golden Griffin Statuette",
-	"Chalice of Protection",
-	"Jewel of Ages",
-	"Songbird of Serenity",
-	"Sandro's Heart",
-	"Ector's Ring",
-	"Vespar's Emerald Handle",
-	"Queen Kalindra's Crown",
-	"Caleb's Magnifying Glass",
-	"Soul Box",
-	"Soul Box with Corak inside",
-	"Ruby Rock",
-	"Emerald Rock",
-	"Sapphire Rock",
-	"Diamond Rock",
-	"Monga Melon",
-	"Energy Disk"
-	*/
 	const char **QUEST_ITEM_NAMES() {
 		delete[] _questItemNames;
 		_questItemNames = new const char *[85] {
-			"\x8F\xE0\xA0\xA2\xAE \xA2\xAB\xA0\xA4\xA5\xAD\xA8\xEF \x8D\xEC\xEE\xAA\xA0\xE1\xAB\xAE\xAC",
-				"\x95\xE0\xE3\xE1\xE2\xA0\xAB\xEC\xAD\xEB\xA9 \xAA\xAB\xEE\xE7 \xAE\xE2 \x82\xA5\xA4\xEC\xAC\xA8\xAD\xAE\xA9 \xA1\xA0\xE8\xAD\xA8",
-				"\x8E\xE2\xAC\xEB\xE7\xAA\xA0 \xA4\xAB\xEF \xA1\xA0\xE8\xAD\xA8 \x84\xA0\xE0\xA7\xAE\xA3\xA0",
-				"\x8A\xAB\xEE\xE7 \xAE\xE2 \x81\xA0\xE8\xAD\xA8 \xA2\xEB\xE1\xE8\xA5\xA9 \xAC\xA0\xA3\xA8\xA8",
-				"\x84\xE0\xA0\xA3\xAE\xE6\xA5\xAD\xAD\xEB\xA9 \xA0\xAC\xE3\xAB\xA5\xE2 \x91\xA5\xA2\xA5\xE0\xAD\xAE\xA3\xAE \x91\xE4\xA8\xAD\xAA\xE1\xA0",
-				"\x8A\xA0\xAC\xA5\xAD\xEC \x92\xEB\xE1\xEF\xE7\xA8 \x93\xA6\xA0\xE1\xAE\xA2",
-				"\x8E\xE2\xAF\xA8\xE0\xA0\xEE\xE9\xA8\xA9 \xAA\xA0\xAC\xA5\xAD\xEC \xA3\xAE\xAB\xA5\xAC\xAE\xA2",
-				"\x8E\xE2\xAF\xA8\xE0\xA0\xEE\xE9\xA8\xA9 \xAA\xA0\xAC\xA5\xAD\xEC \x9F\xAA\xA0",
-				"\x91\xAA\xA8\xAF\xA5\xE2\xE0 \x82\xE0\xA5\xAC\xA5\xAD\xAD\xAE\xA3\xAE \x88\xE1\xAA\xA0\xA6\xA5\xAD\xA8\xEF",
-				"\x90\xAE\xA3 \x94\xA0\xAB\xA8\xE1\xE2\xEB",
-				"\x9D\xAB\xA8\xAA\xE1\xA8\xE0 \x82\xAE\xE1\xE1\xE2\xA0\xAD\xAE\xA2\xAB\xA5\xAD\xA8\xEF",
-				"\x82\xAE\xAB\xE8\xA5\xA1\xAD\xEB\xA9 \xA6\xA5\xA7\xAB \xE4\xA5\xA9",
-				"\x84\xA8\xA0\xA4\xA5\xAC\xA0 \xAF\xE0\xA8\xAD\xE6\xA5\xE1\xE1\xEB \x90\xAE\xAA\xE1\xA0\xAD\xEB",
-				"\x91\xA2\xEF\xE9\xA5\xAD\xAD\xA0\xEF \x8A\xAD\xA8\xA3\xA0 \x9D\xAB\xEC\xE4\xAE\xA2",
-				"\x91\xAA\xA0\xE0\xA0\xA1\xA5\xA9 \x82\xAE\xAF\xAB\xAE\xE9\xA5\xAD\xA8\xEF",
-				"\x8A\xE0\xA8\xE1\xE2\xA0\xAB\xAB\xEB \x8F\xEC\xA5\xA7\xAE\xED\xAB\xA5\xAA\xE2\xE0\xA8\xE7\xA5\xE1\xE2\xA2\xA0",
-				"\x91\xA2\xA8\xE2\xAE\xAA \x8C\xE3\xA4\xE0\xAE\xE1\xE2\xA8",
-				"\x8A\xAE\xE0\xA5\xAD\xEC \xE4\xA8\xE0\xAD\xEB",
-				"\x8A\xAE\xE1\xE2\xEF\xAD\xAE\xA9 \xE1\xA2\xA8\xE1\xE2\xAE\xAA \x8E\xE0\xAE\xE4\xA8\xAD\xA0",
-				"\x82\xAE\xAB\xE8\xA5\xA1\xAD\xEB\xA9 \xAA\xE3\xAB\xAE\xAD \x81\xA0\xE0\xAE\xAA\xA0",
-				"\x8F\xE0\xAE\xAF\xA0\xA2\xE8\xA8\xA9 \xE7\xA5\xE0\xA5\xAF \x8B\xA8\xA3\xAE\xAD\xAE",
-				"\x8F\xAE\xE1\xAB\xA5\xA4\xAD\xA8\xA9 \xE6\xA2\xA5\xE2\xAE\xAA \xAB\xA5\xE2\xA0",
-				"\x8F\xAE\xE1\xAB\xA5\xA4\xAD\xEF\xEF \xA4\xAE\xA6\xA4\xA5\xA2\xA0\xEF \xAA\xA0\xAF\xA5\xAB\xEC\xAA\xA0 \xA2\xA5\xE1\xAD\xEB",
-				"\x8F\xAE\xE1\xAB\xA5\xA4\xAD\xEF\xEF \xE1\xAD\xA5\xA6\xA8\xAD\xAA\xA0 \xA7\xA8\xAC\xEB",
-				"\x8F\xAE\xE1\xAB\xA5\xA4\xAD\xA8\xA9 \xAB\xA8\xE1\xE2 \xAE\xE1\xA5\xAD\xA8",
-				"\x82\xA5\xE7\xAD\xAE \xA3\xAE\xE0\xEF\xE7\xA8\xA9 \xAA\xE3\xE1\xAE\xAA \xAF\xA5\xAC\xA7\xEB",
-				"\x8C\xA5\xA3\xA0\xAA\xE0\xA5\xA4\xA8\xE2 \xAA\xAE\xE0\xAE\xAB\xEF",
-				"\x90\xA0\xA7\xE0\xA5\xE8\xA5\xAD\xA8\xA5 \xAD\xA0 \xE0\xA0\xE1\xAA\xAE\xAF\xAA\xA8",
-				"\x8A\xE3\xAA\xAE\xAB\xAA\xA0",
-				"\x8A\xE3\xAA\xAB\xA0 \x91\xA8\xAB\xEB",
-				"\x8A\xE3\xAA\xAB\xA0 \x91\xAA\xAE\xE0\xAE\xE1\xE2\xA8",
-				"\x8A\xE3\xAA\xAB\xA0 \x91\xAB\xAE\xA6\xA5\xAD\xA8\xEF",
-				"\x8A\xE3\xAA\xAB\xA0 \x8C\xA5\xE2\xAA\xAE\xE1\xE2\xA8",
-				"\x8A\xE3\xAA\xAB\xA0 \x93\xA4\xA0\xE7\xA8",
-				"\x93\xE1\xE2\xE0\xAE\xA9\xE1\xE2\xA2\xAE",
-				"Pass to Castleview",
-				"Pass to Sandcaster",
-				"Pass to Lakeside",
-				"Pass to Necropolis",
-				"Pass to Olympus",
-				"Key to Great Western Tower",
-				"Key to Great Southern Tower",
-				"Key to Great Eastern Tower",
-				"Key to Great Northern Tower",
-				"Key to Ellinger's Tower",
-				"Key to Dragon Tower",
-				"Key to Darkstone Tower",
-				"Key to Temple of Bark",
-				"Key to Dungeon of Lost Souls",
-				"Key to Ancient Pyramid",
-				"Key to Dungeon of Death",
-				"Amulet of the Southern Sphinx",
-				"Dragon Pharoah's Orb",
-				"Cube of Power",
-				"Chime of Opening",
-				"Gold ID Card",
-				"Silver ID Card",
-				"Vulture Repellant",
-				"Bridle",
-				"Enchanted Bridle",
-				"Treasure Map (Goto E1 x1, y11)",
-				"",
-				"Fake Map",
-				"Onyx Necklace",
-				"Dragon Egg",
-				"Tribble",
-				"Golden Pegasus Statuette",
-				"Golden Dragon Statuette",
-				"Golden Griffin Statuette",
-				"Chalice of Protection",
-				"Jewel of Ages",
-				"Songbird of Serenity",
-				"Sandro's Heart",
-				"Ector's Ring",
-				"Vespar's Emerald Handle",
-				"Queen Kalindra's Crown",
-				"Caleb's Magnifying Glass",
-				"Soul Box",
-				"Soul Box with Corak inside",
-				"Ruby Rock",
-				"Emerald Rock",
-				"Sapphire Rock",
-				"Diamond Rock",
-				"Monga Melon",
-				"Energy Disk"
+			"\x8F\xE0\xA0\xA2\xAE \xA2\xAB\xA0\xA4\xA5\xAD\xA8\xEF \x8D\xEC\xEE\xAA\xA0\xE1\xAB\xAE\xAC",											   // "Право владения Ньюкаслом",
+			"\x95\xE0\xE3\xE1\xE2\xA0\xAB\xEC\xAD\xEB\xA9 \xAA\xAB\xEE\xE7 \xAE\xE2 \x82\xA5\xA4\xEC\xAC\xA8\xAD\xAE\xA9 \xA1\xA0\xE8\xAD\xA8",        // "Хрустальный ключ от Ведьминой башни",
+			"\x8E\xE2\xAC\xEB\xE7\xAA\xA0 \xA4\xAB\xEF \xA1\xA0\xE8\xAD\xA8 \x84\xA0\xE0\xA7\xAE\xA3\xA0",                                             // "Отмычка для башни Дарзога",
+			"\x8A\xAB\xEE\xE7 \xAE\xE2 \x81\xA0\xE8\xAD\xA8 \xA2\xEB\xE1\xE8\xA5\xA9 \xAC\xA0\xA3\xA8\xA8",                                            // "Ключ от Башни высшей магии",
+			"\x84\xE0\xA0\xA3\xAE\xE6\xA5\xAD\xAD\xEB\xA9 \xA0\xAC\xE3\xAB\xA5\xE2 \x91\xA5\xA2\xA5\xE0\xAD\xAE\xA3\xAE \x91\xE4\xA8\xAD\xAA\xE1\xA0", // "Драгоценный амулет Северного Сфинкса",
+			"\x8A\xA0\xAC\xA5\xAD\xEC \x92\xEB\xE1\xEF\xE7\xA8 \x93\xA6\xA0\xE1\xAE\xA2",                                                              // "Камень Тысячи Ужасов",
+			"\x8E\xE2\xAF\xA8\xE0\xA0\xEE\xE9\xA8\xA9 \xAA\xA0\xAC\xA5\xAD\xEC \xA3\xAE\xAB\xA5\xAC\xAE\xA2",                                          // "Отпирающий камень големов",
+			"\x8E\xE2\xAF\xA8\xE0\xA0\xEE\xE9\xA8\xA9 \xAA\xA0\xAC\xA5\xAD\xEC \x9F\xAA\xA0",                                                          // "Отпирающий камень Яка",
+			"\x91\xAA\xA8\xAF\xA5\xE2\xE0 \x82\xE0\xA5\xAC\xA5\xAD\xAD\xAE\xA3\xAE \x88\xE1\xAA\xA0\xA6\xA5\xAD\xA8\xEF",                              // "Скипетр Временного Искажения",
+			"\x90\xAE\xA3 \x94\xA0\xAB\xA8\xE1\xE2\xEB",                                                                                               // "Рог Фалисты",
+			"\x9D\xAB\xA8\xAA\xE1\xA8\xE0 \x82\xAE\xE1\xE1\xE2\xA0\xAD\xAE\xA2\xAB\xA5\xAD\xA8\xEF",                                                   // "Эликсир Восстановления",
+			"\x82\xAE\xAB\xE8\xA5\xA1\xAD\xEB\xA9 \xA6\xA5\xA7\xAB \xE4\xA5\xA9",                                                                      // "Волшебный жезл фей",
+			"\x84\xA8\xA0\xA4\xA5\xAC\xA0 \xAF\xE0\xA8\xAD\xE6\xA5\xE1\xE1\xEB \x90\xAE\xAA\xE1\xA0\xAD\xEB",                                          // "Диадема принцессы Роксаны",
+			"\x91\xA2\xEF\xE9\xA5\xAD\xAD\xA0\xEF \x8A\xAD\xA8\xA3\xA0 \x9D\xAB\xEC\xE4\xAE\xA2",                                                      // "Священная Книга Эльфов",
+			"\x91\xAA\xA0\xE0\xA0\xA1\xA5\xA9 \x82\xAE\xAF\xAB\xAE\xE9\xA5\xAD\xA8\xEF",                                                               // "Скарабей Воплощения",
+			"\x8A\xE0\xA8\xE1\xE2\xA0\xAB\xAB\xEB \x8F\xEC\xA5\xA7\xAE\xED\xAB\xA5\xAA\xE2\xE0\xA8\xE7\xA5\xE1\xE2\xA2\xA0",                           // "Кристаллы Пьезоэлектричества",
+			"\x91\xA2\xA8\xE2\xAE\xAA \x8C\xE3\xA4\xE0\xAE\xE1\xE2\xA8",                                                                               // "Свиток Мудрости",
+			"\x8A\xAE\xE0\xA5\xAD\xEC \xE4\xA8\xE0\xAD\xEB",                                                                                           // "Корень фирны",
+			"\x8A\xAE\xE1\xE2\xEF\xAD\xAE\xA9 \xE1\xA2\xA8\xE1\xE2\xAE\xAA \x8E\xE0\xAE\xE4\xA8\xAD\xA0",                                              // "Костяной свисток Орофина",
+			"\x82\xAE\xAB\xE8\xA5\xA1\xAD\xEB\xA9 \xAA\xE3\xAB\xAE\xAD \x81\xA0\xE0\xAE\xAA\xA0",                                                      // "Волшебный кулон Барока",
+			"\x8F\xE0\xAE\xAF\xA0\xA2\xE8\xA8\xA9 \xE7\xA5\xE0\xA5\xAF \x8B\xA8\xA3\xAE\xAD\xAE",                                                      // "Пропавший череп Лигоно",
+			"\x8F\xAE\xE1\xAB\xA5\xA4\xAD\xA8\xA9 \xE6\xA2\xA5\xE2\xAE\xAA \xAB\xA5\xE2\xA0",                                                          // "Последний цветок лета",
+			"\x8F\xAE\xE1\xAB\xA5\xA4\xAD\xEF\xEF \xA4\xAE\xA6\xA4\xA5\xA2\xA0\xEF \xAA\xA0\xAF\xA5\xAB\xEC\xAA\xA0 \xA2\xA5\xE1\xAD\xEB",             // "Последняя дождевая капелька весны",
+			"\x8F\xAE\xE1\xAB\xA5\xA4\xAD\xEF\xEF \xE1\xAD\xA5\xA6\xA8\xAD\xAA\xA0 \xA7\xA8\xAC\xEB",                                                  // "Последняя снежинка зимы",
+			"\x8F\xAE\xE1\xAB\xA5\xA4\xAD\xA8\xA9 \xAB\xA8\xE1\xE2 \xAE\xE1\xA5\xAD\xA8",                                                              // "Последний лист осени",
+			"\x82\xA5\xE7\xAD\xAE \xA3\xAE\xE0\xEF\xE7\xA8\xA9 \xAA\xE3\xE1\xAE\xAA \xAF\xA5\xAC\xA7\xEB",                                             // "Вечно горячий кусок пемзы",
+			"\x8C\xA5\xA3\xA0\xAA\xE0\xA5\xA4\xA8\xE2 \xAA\xAE\xE0\xAE\xAB\xEF",                                                                       // "Мегакредит короля",
+			"\x90\xA0\xA7\xE0\xA5\xE8\xA5\xAD\xA8\xA5 \xAD\xA0 \xE0\xA0\xE1\xAA\xAE\xAF\xAA\xA8",                                                      // "Разрешение на раскопки",
+			"\x8A\xE3\xAA\xAE\xAB\xAA\xA0",                                                                                                            // "Куколка",
+			"\x8A\xE3\xAA\xAB\xA0 \x91\xA8\xAB\xEB",                                                                                                   // "Кукла Силы",
+			"\x8A\xE3\xAA\xAB\xA0 \x91\xAA\xAE\xE0\xAE\xE1\xE2\xA8",                                                                                   // "Кукла Скорости",
+			"\x8A\xE3\xAA\xAB\xA0 \x91\xAB\xAE\xA6\xA5\xAD\xA8\xEF",                                                                                   // "Кукла Сложения",
+			"\x8A\xE3\xAA\xAB\xA0 \x8C\xA5\xE2\xAA\xAE\xE1\xE2\xA8",                                                                                   // "Кукла Меткости",
+			"\x8A\xE3\xAA\xAB\xA0 \x93\xA4\xA0\xE7\xA8",                                                                                               // "Кукла Удачи",
+			"\x93\xE1\xE2\xE0\xAE\xA9\xE1\xE2\xA2\xAE",                                                                                                // "Устройство",
+			"Pass to Castleview",                                                                                                                      // "Pass to Castleview",
+			"Pass to Sandcaster",                                                                                                                      // "Pass to Sandcaster",
+			"Pass to Lakeside",                                                                                                                        // "Pass to Lakeside",
+			"Pass to Necropolis",                                                                                                                      // "Pass to Necropolis",
+			"Pass to Olympus",                                                                                                                         // "Pass to Olympus",
+			"Key to Great Western Tower",                                                                                                              // "Key to Great Western Tower",
+			"Key to Great Southern Tower",                                                                                                             // "Key to Great Southern Tower",
+			"Key to Great Eastern Tower",                                                                                                              // "Key to Great Eastern Tower",
+			"Key to Great Northern Tower",                                                                                                             // "Key to Great Northern Tower",
+			"Key to Ellinger's Tower",                                                                                                                 // "Key to Ellinger's Tower",
+			"Key to Dragon Tower",                                                                                                                     // "Key to Dragon Tower",
+			"Key to Darkstone Tower",                                                                                                                  // "Key to Darkstone Tower",
+			"Key to Temple of Bark",                                                                                                                   // "Key to Temple of Bark",
+			"Key to Dungeon of Lost Souls",                                                                                                            // "Key to Dungeon of Lost Souls",
+			"Key to Ancient Pyramid",                                                                                                                  // "Key to Ancient Pyramid",
+			"Key to Dungeon of Death",                                                                                                                 // "Key to Dungeon of Death",
+			"Amulet of the Southern Sphinx",                                                                                                           // "Amulet of the Southern Sphinx",
+			"Dragon Pharoah's Orb",                                                                                                                    // "Dragon Pharoah's Orb",
+			"Cube of Power",                                                                                                                           // "Cube of Power",
+			"Chime of Opening",                                                                                                                        // "Chime of Opening",
+			"Gold ID Card",                                                                                                                            // "Gold ID Card",
+			"Silver ID Card",                                                                                                                          // "Silver ID Card",
+			"Vulture Repellant",                                                                                                                       // "Vulture Repellant",
+			"Bridle",                                                                                                                                  // "Bridle",
+			"Enchanted Bridle",                                                                                                                        // "Enchanted Bridle",
+			"Treasure Map (Goto E1 x1, y11)",                                                                                                          // "Treasure Map (Goto E1 x1, y11)",
+			"",                                                                                                                                        // "",
+			"Fake Map",                                                                                                                                // "Fake Map",
+			"Onyx Necklace",                                                                                                                           // "Onyx Necklace",
+			"Dragon Egg",                                                                                                                              // "Dragon Egg",
+			"Tribble",                                                                                                                                 // "Tribble",
+			"Golden Pegasus Statuette",                                                                                                                // "Golden Pegasus Statuette",
+			"Golden Dragon Statuette",                                                                                                                 // "Golden Dragon Statuette",
+			"Golden Griffin Statuette",                                                                                                                // "Golden Griffin Statuette",
+			"Chalice of Protection",                                                                                                                   // "Chalice of Protection",
+			"Jewel of Ages",                                                                                                                           // "Jewel of Ages",
+			"Songbird of Serenity",                                                                                                                    // "Songbird of Serenity",
+			"Sandro's Heart",                                                                                                                          // "Sandro's Heart",
+			"Ector's Ring",                                                                                                                            // "Ector's Ring",
+			"Vespar's Emerald Handle",                                                                                                                 // "Vespar's Emerald Handle",
+			"Queen Kalindra's Crown",                                                                                                                  // "Queen Kalindra's Crown",
+			"Caleb's Magnifying Glass",                                                                                                                // "Caleb's Magnifying Glass",
+			"Soul Box",                                                                                                                                // "Soul Box",
+			"Soul Box with Corak inside",                                                                                                              // "Soul Box with Corak inside",
+			"Ruby Rock",                                                                                                                               // "Ruby Rock",
+			"Emerald Rock",                                                                                                                            // "Emerald Rock",
+			"Sapphire Rock",                                                                                                                           // "Sapphire Rock",
+			"Diamond Rock",                                                                                                                            // "Diamond Rock",
+			"Monga Melon",                                                                                                                             // "Monga Melon",
+			"Energy Disk"                                                                                                                              // "Energy Disk"
 		};
 		return _questItemNames;
 	}
@@ -2024,28 +1208,17 @@ public:
 		return _questItemNamesSwords;
 	}
 
-	/*
-	"\t000\v007\x3""c%s íå ìîæåò èñïîëüçîâàòü %s!"
-	*/
 	const char *NOT_PROFICIENT() {
-		return "\t000\v007\x3"
-			   "c%s \xAD\xA5 \xAC\xAE\xA6\xA5\xE2 \xA8\xE1\xAF\xAE\xAB\xEC\xA7\xAE\xA2\xA0\xE2\xEC %s!";
+		return "\t000\v007\x3""c%s \xAD\xA5 \xAC\xAE\xA6\xA5\xE2 \xA8\xE1\xAF\xAE\xAB\xEC\xA7\xAE\xA2\xA0\xE2\xEC %s!"; // "\t000\v007\x3""c%s не может использовать %s!"
 	}
 
-	/*
-	"\x3""c\n\t000Íåò âåùåé."
-	*/
 	const char *NO_ITEMS_AVAILABLE() {
-		return "\x3"
-			   "c\n\t000\x8D\xA5\xE2 \xA2\xA5\xE9\xA5\xA9.";
+		return "\x3""c\n\t000\x8D\xA5\xE2 \xA2\xA5\xE9\xA5\xA9."; // "\x3""c\n\t000Нет вещей."
 	}
 
-	/*
-	"Îðóæèå", "Áðîíÿ", "Óêðàøåíèÿ", "Ðàçíîå"
-	*/
 	const char **CATEGORY_NAMES() {
 		delete[] _categoryNames;
-		_categoryNames = new const char *[4] { "\x8E\xE0\xE3\xA6\xA8\xA5", "\x81\xE0\xAE\xAD\xEF", "\x93\xAA\xE0\xA0\xE8\xA5\xAD\xA8\xEF", "\x90\xA0\xA7\xAD\xAE\xA5" };
+		_categoryNames = new const char *[4] { "\x8E\xE0\xE3\xA6\xA8\xA5", "\x81\xE0\xAE\xAD\xEF", "\x93\xAA\xE0\xA0\xE8\xA5\xAD\xA8\xEF", "\x90\xA0\xA7\xAD\xAE\xA5" }; // "Оружие", "Броня", "Украшения", "Разное"
 		return _categoryNames;
 	}
 
@@ -2061,358 +1234,196 @@ public:
 			   "\x2%s%s%s%s%s%s%s%s%s\x1\fd";
 	}
 
-	/*
-	"\x1\fd\r\x3""l\v000\t000%s - %s\t150Çîëîòî - %lu%s\x3""l\v011"
-	"\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-	*/
 	const char *X_FOR_Y_GOLD() {
-		return "\x1\fd\r\x3"
-			   "l\v000\t000%s - %s\t150\x87\xAE\xAB\xAE\xE2\xAE - %lu%s\x3"
-			   "l\v011"
-			   "\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+		return "\x1\fd\r\x3""l\v000\t000%s - %s\t150\x87\xAE\xAB\xAE\xE2\xAE - %lu%s\x3""l\v011" // "\x1\fd\r\x3""l\v000\t000%s - %s\t150Золото - %lu%s\x3""l\v011"
+			   "\x2%s%s%s%s%s%s%s%s%s\x1\fd";                                                    // "\x2%s%s%s%s%s%s%s%s%s\x1\fd";
 	}
 
-	/*
-	"\x3""r\t000Çàðÿäîâ\x3""l"
-	*/
 	const char *FMT_CHARGES() {
-		return "\x3"
-			   "r\t000\x87\xA0\xE0\xEF\xA4\xAE\xA2\x3"
-			   "l";
+		return "\x3""r\t000\x87\xA0\xE0\xEF\xA4\xAE\xA2\x3""l"; // "\x3""r\t000Зарядов\x3""l"
 	}
 
-	/*
-	"\x1\fd\r\x3""l\v000\t000%s\t150Çîëîòî - %lu\x3""r\t000Öåíà"
-	"\x3""l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
-	*/
 	const char *AVAILABLE_GOLD_COST() {
-		return "\x1\fd\r\x3"
-			   "l\v000\t000%s\t150\x87\xAE\xAB\xAE\xE2\xAE - %lu\x3"
-			   "r\t000\x96\xA5\xAD\xA0"
-			   "\x3"
-			   "l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
+		return "\x1\fd\r\x3""l\v000\t000%s\t150\x87\xAE\xAB\xAE\xE2\xAE - %lu\x3""r\t000\x96\xA5\xAD\xA0" // "\x1\fd\r\x3""l\v000\t000%s\t150Золото - %lu\x3""r\t000Цена"
+			   "\x3""l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";												  // "\x3""l\v011\x2%s%s%s%s%s%s%s%s%s\x1\fd";
 	}
 
-	/*
-	"Çàðÿäîâ"
-	*/
 	const char *CHARGES() {
-		return "\x87\xA0\xE0\xEF\xA4\xAE\xA2";
+		return "\x87\xA0\xE0\xEF\xA4\xAE\xA2"; // "Зарядов"
 	}
 
-	/*
-	"Öåíà"
-	*/
 	const char *COST() {
-		return "\x96\xA5\xAD\xA0";
+		return "\x96\xA5\xAD\xA0"; // "Цена"
 	}
 
-	/*
-	"íàäåòü", "ñíÿòü", "èñïîëüçîâàòü", "âûêèíóòü", "çà÷àðîâàòü", "ïåðåçàðÿäèòü",
-	"Ïðåâðàòèòü â çîëîòî"
-	*/
 	const char **ITEM_ACTIONS() {
 		delete[] _itemActions;
 		_itemActions = new const char *[7] {
-			"\xAD\xA0\xA4\xA5\xE2\xEC", "\xE1\xAD\xEF\xE2\xEC", "\xA8\xE1\xAF\xAE\xAB\xEC\xA7\xAE\xA2\xA0\xE2\xEC", "\xA2\xEB\xAA\xA8\xAD\xE3\xE2\xEC", "\xA7\xA0\xE7\xA0\xE0\xAE\xA2\xA0\xE2\xEC", "\xAF\xA5\xE0\xA5\xA7\xA0\xE0\xEF\xA4\xA8\xE2\xEC",
-				"\x8F\xE0\xA5\xA2\xE0\xA0\xE2\xA8\xE2\xEC \xA2 \xA7\xAE\xAB\xAE\xE2\xAE"
+			"\xAD\xA0\xA4\xA5\xE2\xEC", "\xE1\xAD\xEF\xE2\xEC", "\xA8\xE1\xAF\xAE\xAB\xEC\xA7\xAE\xA2\xA0\xE2\xEC", "\xA2\xEB\xAA\xA8\xAD\xE3\xE2\xEC", "\xA7\xA0\xE7\xA0\xE0\xAE\xA2\xA0\xE2\xEC", "\xAF\xA5\xE0\xA5\xA7\xA0\xE0\xEF\xA4\xA8\xE2\xEC", // "надеть", "снять", "использовать", "выкинуть", "зачаровать", "перезарядить",
+			"\x8F\xE0\xA5\xA2\xE0\xA0\xE2\xA8\xE2\xEC \xA2 \xA7\xAE\xAB\xAE\xE2\xAE"                                                                                                                                                                    // "Превратить в золото"
 		};
 		return _itemActions;
 	}
 
-	/*
-	"\v000Êàêîé ïðåäìåò âû æåëàåòå %s?"
-	*/
 	const char *WHICH_ITEM() {
-		return "\v000\x8A\xA0\xAA\xAE\xA9 \xAF\xE0\xA5\xA4\xAC\xA5\xE2 \xA2\xEB \xA6\xA5\xAB\xA0\xA5\xE2\xA5 %s?";
+		return "\v000\x8A\xA0\xAA\xAE\xA9 \xAF\xE0\xA5\xA4\xAC\xA5\xE2 \xA2\xEB \xA6\xA5\xAB\xA0\xA5\xE2\xA5 %s?"; // "\v000Какой предмет вы желаете %s?"
 	}
 
-	/*
-	"\v007×åãî òîðîïèøüñÿ?\n"
-	"Ïîäîæäè, ïîêà íå âûáåðåøüñÿ îòñþäà!";
-	*/
 	const char *WHATS_YOUR_HURRY() {
-		return "\v007\x97\xA5\xA3\xAE \xE2\xAE\xE0\xAE\xAF\xA8\xE8\xEC\xE1\xEF?\n"
-			   "\x8F\xAE\xA4\xAE\xA6\xA4\xA8, \xAF\xAE\xAA\xA0 \xAD\xA5 \xA2\xEB\xA1\xA5\xE0\xA5\xE8\xEC\xE1\xEF ®âá!";
+		return "\v007\x97\xA5\xA3\xAE \xE2\xAE\xE0\xAE\xAF\xA8\xE8\xEC\xE1\xEF?\n"															 // "\v007Чего торопишься?\n"
+			   "\x8F\xAE\xA4\xAE\xA6\xA4\xA8, \xAF\xAE\xAA\xA0 \xAD\xA5 \xA2\xEB\xA1\xA5\xE0\xA5\xE8\xEC\xE1\xEF \xA2\xE2\xE1\xEE\xA4\xA0!"; // "Подожди, пока не выберешься отсюда!";
 	}
 
-	/*
-	"\v007×òîáû èñïîëüçîâàòü ïðåäìåò â áèòâå, íàæìèòå íà êíîïêó 'Èñï' íà áîêîâîé ïàíåëè."
-	*/
 	const char *USE_ITEM_IN_COMBAT() {
-		return "\v007\x97\xE2\xAE\xA1\xEB \xA8\xE1\xAF\xAE\xAB\xEC\xA7\xAE\xA2\xA0\xE2\xEC \xAF\xE0\xA5\xA4\xAC\xA5\xE2 \xA2 \xA1\xA8\xE2\xA2\xA5, \xAD\xA0\xA6\xAC\xA8\xE2\xA5 \xAD\xA0 \xAA\xAD\xAE\xAF\xAA\xE3 '\x88\xE1\xAF' \xAD\xA0 \xA1\xAE\xAA\xAE\xA2\xAE\xA9 \xAF\xA0\xAD\xA5\xAB\xA8.";
+		return "\v007\x97\xE2\xAE\xA1\xEB \xA8\xE1\xAF\xAE\xAB\xEC\xA7\xAE\xA2\xA0\xE2\xEC \xAF\xE0\xA5\xA4\xAC\xA5\xE2 \xA2 \xA1\xA8\xE2\xA2\xA5, \xAD\xA0\xA6\xAC\xA8\xE2\xA5 \xAD\xA0 \xAA\xAD\xAE\xAF\xAA\xE3 '\x88\xE1\xAF' \xAD\xA0 \xA1\xAE\xAA\xAE\xA2\xAE\xA9 \xAF\xA0\xAD\xA5\xAB\xA8."; // "\v007Чтобы использовать предмет в битве, нажмите на кнопку 'Исп' на боковой панели."
 	}
 
-	/*
-	"\v005\x3""c%s\fdíå èìååò îñîáûõ ñâîéñòâ!"
-	*/
 	const char *NO_SPECIAL_ABILITIES() {
-		return "\v005\x3"
-			   "c%s\fd\xAD\xA5 \xA8\xAC\xA5\xA5\xE2 \xAE\xE1\xAE\xA1\xEB\xE5 \xE1\xA2\xAE\xA9\xE1\xE2\xA2!";
+		return "\v005\x3""c%s\fd\xAD\xA5 \xA8\xAC\xA5\xA5\xE2 \xAE\xE1\xAE\xA1\xEB\xE5 \xE1\xA2\xAE\xA9\xE1\xE2\xA2!"; // "\v005\x3""c%s\fdне имеет особых свойств!"
 	}
 
-	/*
-	"\x3""c\v007Çàêëèíàíèå %s íåëüçÿ èñïîëüçîâàòü â áèòâå!"
-	*/
 	const char *CANT_CAST_WHILE_ENGAGED() {
-		return "\x3"
-			   "c\v007\x87\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xA5 %s \xAD\xA5\xAB\xEC\xA7\xEF \xA8\xE1\xAF\xAE\xAB\xEC\xA7\xAE\xA2\xA0\xE2\xEC \xA2 \xA1\xA8\xE2\xA2\xA5!";
+		return "\x3""c\v007\x87\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xA5 %s \xAD\xA5\xAB\xEC\xA7\xEF \xA8\xE1\xAF\xAE\xAB\xEC\xA7\xAE\xA2\xA0\xE2\xEC \xA2 \xA1\xA8\xE2\xA2\xA5!"; // "\x3""c\v007Заклинание %s нельзя использовать в битве!"
 	}
 
-	/*
-	"\x3""c\v007Âû íå ìîæåòå íàäåòü áîëüøå äâóõ %s!"
-	*/
 	const char *EQUIPPED_ALL_YOU_CAN() {
-		return "\x3"
-			   "c\v007\x82\xEB \xAD\xA5 \xAC\xAE\xA6\xA5\xE2\xA5 \xAD\xA0\xA4\xA5\xE2\xEC \xA1\xAE\xAB\xEC\xE8\xA5 \xA4\xA2\xE3\xE5 %s!";
+		return "\x3""c\v007\x82\xEB \xAD\xA5 \xAC\xAE\xA6\xA5\xE2\xA5 \xAD\xA0\xA4\xA5\xE2\xEC \xA1\xAE\xAB\xEC\xE8\xA5 \xA4\xA2\xE3\xE5 %s!"; // "\x3""c\v007Вы не можете надеть больше двух %s!"
 	}
 
-	/*
-	"\x3""c\v007Âàì íóæíî ñíÿòü %s÷òîáû íàäåòü %s\b!"
-	*/
 	const char *REMOVE_X_TO_EQUIP_Y() {
-		return "\x3"
-			   "c\v007\x82\xA0\xAC \xAD\xE3\xA6\xAD\xAE \xE1\xAD\xEF\xE2\xEC %s\xE7\xE2\xAE\xA1\xEB \xAD\xA0\xA4\xA5\xE2\xEC %s\b!";
+		return "\x3""c\v007\x82\xA0\xAC \xAD\xE3\xA6\xAD\xAE \xE1\xAD\xEF\xE2\xEC %s\xE7\xE2\xAE\xA1\xEB \xAD\xA0\xA4\xA5\xE2\xEC %s\b!"; // "\x3""c\v007Вам нужно снять %sчтобы надеть %s\b!"
 	}
 
-	/*
-	"êîëåö"
-	*/
 	const char *RING() {
-		return "\xAA\xAE\xAB\xA5\xE6";
+		return "\xAA\xAE\xAB\xA5\xE6"; // "колец"
 	}
 
-	/*
-	"ìåäàëåé"
-	*/
 	const char *MEDAL() {
-		return "\xAC\xA5\xA4\xA0\xAB\xA5\xA9";
+		return "\xAC\xA5\xA4\xA0\xAB\xA5\xA9"; // "медалей"
 	}
 
-	/*
-	"\x3""cÂû íå ìîæåòå ñíÿòü ïðîêëÿòóþ âåùü!"
-	*/
 	const char *CANNOT_REMOVE_CURSED_ITEM() {
-		return "\x3"
-			   "c\x82\xEB \xAD\xA5 \xAC\xAE\xA6\xA5\xE2\xA5 \xE1\xAD\xEF\xE2\xEC \xAF\xE0\xAE\xAA\xAB\xEF\xE2\xE3\xEE \xA2\xA5\xE9\xEC!";
+		return "\x3""c\x82\xEB \xAD\xA5 \xAC\xAE\xA6\xA5\xE2\xA5 \xE1\xAD\xEF\xE2\xEC \xAF\xE0\xAE\xAA\xAB\xEF\xE2\xE3\xEE \xA2\xA5\xE9\xEC!"; // "\x3""cВы не можете снять проклятую вещь!"
 	}
 
-	/*
-	"\x3""cÂû íå ìîæåòå âûêèíóòü ïðîêëÿòóþ âåùü!"
-	*/
 	const char *CANNOT_DISCARD_CURSED_ITEM() {
-		return "\x3"
-			   "c\x82\xEB \xAD\xA5 \xAC\xAE\xA6\xA5\xE2\xA5 \xA2\xEB\xAA\xA8\xAD\xE3\xE2\xEC \xAF\xE0\xAE\xAA\xAB\xEF\xE2\xE3\xEE \xA2\xA5\xE9\xEC!";
+		return "\x3""c\x82\xEB \xAD\xA5 \xAC\xAE\xA6\xA5\xE2\xA5 \xA2\xEB\xAA\xA8\xAD\xE3\xE2\xEC \xAF\xE0\xAE\xAA\xAB\xEF\xE2\xE3\xEE \xA2\xA5\xE9\xEC!"; // "\x3""cВы не можете выкинуть проклятую вещь!"
 	}
 
-	/*
-	"\v000\t000\x3""lÂûêèíóòü íàâñåãäà? %s"
-	*/
 	const char *PERMANENTLY_DISCARD() {
-		return "\v000\t000\x3"
-			   "l\x82\xEB\xAA\xA8\xAD\xE3\xE2\xEC \xAD\xA0\xA2\xE1\xA5\xA3\xA4\xA0? %s";
+		return "\v000\t000\x3""l\x82\xEB\xAA\xA8\xAD\xE3\xE2\xEC \xAD\xA0\xA2\xE1\xA5\xA3\xA4\xA0? %s"; // "\v000\t000\x3""lВыкинуть навсегда? %s"
 	}
 
-	/*
-	"\v005\x3""c\fd%s! Âàø ðþêçàê ïîëîí."
-	*/
 	const char *BACKPACK_IS_FULL() {
-		return "\v005\x3"
-			   "c\fd%s! \x82\xA0\xE8 \xE0\xEE\xAA\xA7\xA0\xAA \xAF\xAE\xAB\xAE\xAD.";
+		return "\v005\x3""c\fd%s! \x82\xA0\xE8 \xE0\xEE\xAA\xA7\xA0\xAA \xAF\xAE\xAB\xAE\xAD."; // "\v005\x3""c\fd%s! Ваш рюкзак полон."
 	}
 
-	/*
-	"\v010\t000\x3""c%s! Âàø ðþêçàê ïîëîí.",
-	"\v010\t000\x3""c%s! Âàø ðþêçàê ïîëîí.",
-	"\v010\t000\x3""c%s! Âàø ðþêçàê ïîëîí.",
-	"\v010\t000\x3""c%s! Âàø ðþêçàê ïîëîí."
-	*/
 	const char **CATEGORY_BACKPACK_IS_FULL() {
 		delete[] _categoryBackpackIsFull;
 		_categoryBackpackIsFull = new const char *[4] {
-			"\v010\t000\x3"
-			"c%s! \x82\xA0\xE8 \xE0\xEE\xAA\xA7\xA0\xAA \xAF\xAE\xAB\xAE\xAD.",
-				"\v010\t000\x3"
-				"c%s! \x82\xA0\xE8 \xE0\xEE\xAA\xA7\xA0\xAA \xAF\xAE\xAB\xAE\xAD.",
-				"\v010\t000\x3"
-				"c%s! \x82\xA0\xE8 \xE0\xEE\xAA\xA7\xA0\xAA \xAF\xAE\xAB\xAE\xAD.",
-				"\v010\t000\x3"
-				"c%s! \x82\xA0\xE8 \xE0\xEE\xAA\xA7\xA0\xAA \xAF\xAE\xAB\xAE\xAD."
+			"\v010\t000\x3""c%s! \x82\xA0\xE8 \xE0\xEE\xAA\xA7\xA0\xAA \xAF\xAE\xAB\xAE\xAD.", // "\v010\t000\x3""c%s! Ваш рюкзак полон.",
+			"\v010\t000\x3""c%s! \x82\xA0\xE8 \xE0\xEE\xAA\xA7\xA0\xAA \xAF\xAE\xAB\xAE\xAD.", // "\v010\t000\x3""c%s! Ваш рюкзак полон.",
+			"\v010\t000\x3""c%s! \x82\xA0\xE8 \xE0\xEE\xAA\xA7\xA0\xAA \xAF\xAE\xAB\xAE\xAD.", // "\v010\t000\x3""c%s! Ваш рюкзак полон.",
+			"\v010\t000\x3""c%s! \x82\xA0\xE8 \xE0\xEE\xAA\xA7\xA0\xAA \xAF\xAE\xAB\xAE\xAD."  // "\v010\t000\x3""c%s! Ваш рюкзак полон."
 		};
 		return _categoryBackpackIsFull;
 	}
 
-	/*
-	"\x3""l\v000\t000\fdÊóïèòü %s\fd çà %lu çîëîò%s?"
-	*/
 	const char *BUY_X_FOR_Y_GOLD() {
-		return "\x3"
-			   "l\v000\t000\fd\x8A\xE3\xAF\xA8\xE2\xEC %s\fd \xA7\xA0 %lu \xA7\xAE\xAB\xAE\xE2%s?";
+		return "\x3""l\v000\t000\fd\x8A\xE3\xAF\xA8\xE2\xEC %s\fd \xA7\xA0 %lu \xA7\xAE\xAB\xAE\xE2%s?"; // "\x3""l\v000\t000\fdКупить %s\fd за %lu золот%s?"
 	}
 
-	/*
-	"\x3""l\v000\t000\fdÏðîäàòü %s\fd çà %lu çîëîò%s?"
-	*/
 	const char *SELL_X_FOR_Y_GOLD() {
-		return "\x3"
-			   "l\v000\t000\fd\x8F\xE0\xAE\xA4\xA0\xE2\xEC %s\fd \xA7\xA0 %lu \xA7\xAE\xAB\xAE\xE2%s?";
+		return "\x3""l\v000\t000\fd\x8F\xE0\xAE\xA4\xA0\xE2\xEC %s\fd \xA7\xA0 %lu \xA7\xAE\xAB\xAE\xE2%s?"; // "\x3""l\v000\t000\fdПродать %s\fd за %lu золот%s?"
 	}
 
-	/*
-	"îé", "ûõ"
-	*/
 	const char **SELL_X_FOR_Y_GOLD_ENDINGS() {
 		delete[] _sellXForYGoldEndings;
-		_sellXForYGoldEndings = new const char *[2] { "\xAE\xA9", "\xEB\xE5" };
+		_sellXForYGoldEndings = new const char *[2] { "\xAE\xA9", "\xEB\xE5" }; // "ой", "ых"
 		return _sellXForYGoldEndings;
 	}
 
-	/*
-	"\v005\x3""c\fdÍàñ íå èíòåðåñóåò %s\fd!"
-	*/
 	const char *NO_NEED_OF_THIS() {
-		return "\v005\x3"
-			   "c\fd\x8D\xA0\xE1 \xAD\xA5 \xA8\xAD\xE2\xA5\xE0\xA5\xE1\xE3\xA5\xE2 %s\fd!";
+		return "\v005\x3""c\fd\x8D\xA0\xE1 \xAD\xA5 \xA8\xAD\xE2\xA5\xE0\xA5\xE1\xE3\xA5\xE2 %s\fd!"; // "\v005\x3""c\fdНас не интересует %s\fd!"
 	}
 
-	/*
-	"\v007\x3""c\fdÍåâîçìîæíî ïåðåçàðÿäèòü.\n%s"
-	*/
 	const char *NOT_RECHARGABLE() {
-		return "\v007\x3"
-			   "c\fd\x8D\xA5\xA2\xAE\xA7\xAC\xAE\xA6\xAD\xAE \xAF\xA5\xE0\xA5\xA7\xA0\xE0\xEF\xA4\xA8\xE2\xEC.\n%s";
+		return "\v007\x3""c\fd\x8D\xA5\xA2\xAE\xA7\xAC\xAE\xA6\xAD\xAE \xAF\xA5\xE0\xA5\xA7\xA0\xE0\xEF\xA4\xA8\xE2\xEC.\n%s"; // "\v007\x3""c\fdНевозможно перезарядить.\n%s"
 	}
 
-	/*
-	"\v007\t000\x3""cÍåâîçìîæíî çà÷àðîâàòü.\n%s"
-	*/
 	const char *NOT_ENCHANTABLE() {
-		return "\v007\t000\x3"
-			   "c\x8D\xA5\xA2\xAE\xA7\xAC\xAE\xA6\xAD\xAE \xA7\xA0\xE7\xA0\xE0\xAE\xA2\xA0\xE2\xEC.\n%s";
+		return "\v007\t000\x3""c\x8D\xA5\xA2\xAE\xA7\xAC\xAE\xA6\xAD\xAE \xA7\xA0\xE7\xA0\xE0\xAE\xA2\xA0\xE2\xEC.\n%s"; // "\v007\t000\x3""cНевозможно зачаровать.\n%s"
 	}
 
-	/*
-	"Çàêëèíàíèå íå ñðàáîòàëî!"
-	*/
 	const char *SPELL_FAILED() {
-		return "\x87\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xA5 \xAD\xA5 \xE1\xE0\xA0\xA1\xAE\xE2\xA0\xAB\xAE!";
+		return "\x87\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xA5 \xAD\xA5 \xE1\xE0\xA0\xA1\xAE\xE2\xA0\xAB\xAE!"; // "Заклинание не сработало!"
 	}
 
-	/*
-	"\fdÝòîò ïðåäìåò íå ñëîìàí!"
-	*/
 	const char *ITEM_NOT_BROKEN() {
-		return "\fd\x9D\xE2\xAE\xE2 \xAF\xE0\xA5\xA4\xAC\xA5\xE2 \xAD\xA5 \xE1\xAB\xAE\xAC\xA0\xAD!";
+		return "\fd\x9D\xE2\xAE\xE2 \xAF\xE0\xA5\xA4\xAC\xA5\xE2 \xAD\xA5 \xE1\xAB\xAE\xAC\xA0\xAD!"; // "\fdЭтот предмет не сломан!"
 	}
 
-	/*
-	"Ïî÷èíèòü", "Îïîçíàòü"
-	*/
 	const char **FIX_IDENTIFY() {
 		delete[] _fixIdentify;
-		_fixIdentify = new const char *[2] { "\x8F\xAE\xE7\xA8\xAD\xA8\xE2\xEC", "\x8E\xAF\xAE\xA7\xAD\xA0\xE2\xEC" };
+		_fixIdentify = new const char *[2] { "\x8F\xAE\xE7\xA8\xAD\xA8\xE2\xEC", "\x8E\xAF\xAE\xA7\xAD\xA0\xE2\xEC" }; // "Починить", "Опознать"
 		return _fixIdentify;
 	}
 
-	/*
-	"\x3""l\v000\t000%s %s\fd çà %lu çîëîò%s?"
-	*/
 	const char *FIX_IDENTIFY_GOLD() {
-		return "\x3"
-			   "l\v000\t000%s %s\fd \xA7\xA0 %lu \xA7\xAE\xAB\xAE\xE2%s?";
+		return "\x3""l\v000\t000%s %s\fd \xA7\xA0 %lu \xA7\xAE\xAB\xAE\xE2%s?"; // "\x3""l\v000\t000%s %s\fd за %lu золот%s?"
 	}
 
-	/*
-	"\fd\v000\t000\x3""cÎïîçíàòü ïðåäìåò\x3""l\n"
-	"\n"
-	"\v012%s\fd\n"
-	"\n"
-	"%s";
-	*/
 	const char *IDENTIFY_ITEM_MSG() {
-		return "\fd\v000\t000\x3"
-			   "c\x8E\xAF\xAE\xA7\xAD\xA0\xE2\xEC \xAF\xE0\xA5\xA4\xAC\xA5\xE2\x3"
-			   "l\n"
-			   "\n"
-			   "\v012%s\fd\n"
-			   "\n"
-			   "%s";
-	}
-
-	/*
-	"Èñïîëüçóþò êëàññû\t132:\t140%s\n"
-	"Ìîäèôèêàòîð óðîíà\t132:\t140%s\n"
-	"Ôèçè÷åñêèé óðîí\t132:\t140%s\n"
-	"Óðîí îò Ñòèõèé\t132:\t140%s\n"
-	"Çàùèòà îò Ñòèõèé\t132:\t140%s\n"
-	"Êëàññ çàùèòû\t132:\t140%s\n"
-	"Áîíóñ ñâîéñòâà\t132:\t140%s\n"
-	"Îñîáîå ñâîéñòâî\t132:\t140%s";
-	*/
+		return "\fd\v000\t000\x3""c\x8E\xAF\xAE\xA7\xAD\xA0\xE2\xEC \xAF\xE0\xA5\xA4\xAC\xA5\xE2\x3""l\n" // "\fd\v000\t000\x3""cОпознать предмет\x3""l\n"
+			   "\n"                                                                                       // "\n"
+			   "\v012%s\fd\n"                                                                             // "\v012%s\fd\n"
+			   "\n"                                                                                       // "\n"
+			   "%s";                                                                                      // "%s";
+	}
+
 	const char *ITEM_DETAILS() {
-		return "\x88\xE1\xAF\xAE\xAB\xEC\xA7\xE3\xEE\xE2 \xAA\xAB\xA0\xE1\xE1\xEB\t132:\t140%s\n"
-			   "\x8C\xAE\xA4\xA8\xE4\xA8\xAA\xA0\xE2\xAE\xE0 \xE3\xE0\xAE\xAD\xA0\t132:\t140%s\n"
-			   "\x94\xA8\xA7\xA8\xE7\xA5\xE1\xAA\xA8\xA9 \xE3\xE0\xAE\xAD\t132:\t140%s\n"
-			   "\x93\xE0\xAE\xAD \xAE\xE2 \x91\xE2\xA8\xE5\xA8\xA9\t132:\t140%s\n"
-			   "\x87\xA0\xE9\xA8\xE2\xA0 \xAE\xE2 \x91\xE2\xA8\xE5\xA8\xA9\t132:\t140%s\n"
-			   "\x8A\xAB\xA0\xE1\xE1 \xA7\xA0\xE9\xA8\xE2\xEB\t132:\t140%s\n"
-			   "\x81\xAE\xAD\xE3\xE1 \xE1\xA2\xAE\xA9\xE1\xE2\xA2\xA0\t132:\t140%s\n"
-			   "\x8E\xE1\xAE\xA1\xAE\xA5 \xE1\xA2\xAE\xA9\xE1\xE2\xA2\xAE\t132:\t140%s";
-	}
-
-	/*
-	"Âñå"
-	*/
+		return "\x88\xE1\xAF\xAE\xAB\xEC\xA7\xE3\xEE\xE2 \xAA\xAB\xA0\xE1\xE1\xEB\t132:\t140%s\n" // "Используют классы\t132:\t140%s\n"
+			   "\x8C\xAE\xA4\xA8\xE4\xA8\xAA\xA0\xE2\xAE\xE0 \xE3\xE0\xAE\xAD\xA0\t132:\t140%s\n" // "Модификатор урона\t132:\t140%s\n"
+			   "\x94\xA8\xA7\xA8\xE7\xA5\xE1\xAA\xA8\xA9 \xE3\xE0\xAE\xAD\t132:\t140%s\n"         // "Физический урон\t132:\t140%s\n"
+			   "\x93\xE0\xAE\xAD \xAE\xE2 \x91\xE2\xA8\xE5\xA8\xA9\t132:\t140%s\n"                // "Урон от Стихий\t132:\t140%s\n"
+			   "\x87\xA0\xE9\xA8\xE2\xA0 \xAE\xE2 \x91\xE2\xA8\xE5\xA8\xA9\t132:\t140%s\n"        // "Защита от Стихий\t132:\t140%s\n"
+			   "\x8A\xAB\xA0\xE1\xE1 \xA7\xA0\xE9\xA8\xE2\xEB\t132:\t140%s\n"                     // "Класс защиты\t132:\t140%s\n"
+			   "\x81\xAE\xAD\xE3\xE1 \xE1\xA2\xAE\xA9\xE1\xE2\xA2\xA0\t132:\t140%s\n"             // "Бонус свойства\t132:\t140%s\n"
+			   "\x8E\xE1\xAE\xA1\xAE\xA5 \xE1\xA2\xAE\xA9\xE1\xE2\xA2\xAE\t132:\t140%s";          // "Особое свойство\t132:\t140%s";
+	}
+
 	const char *ALL() {
-		return "\x82\xE1\xA5";
+		return "\x82\xE1\xA5"; // "Все"
 	}
 
-	/*
-	"Íåò"
-	*/
 	const char *FIELD_NONE() {
-		return "\x8D\xA5\xE2";
+		return "\x8D\xA5\xE2"; // "Нет"
 	}
 
 	const char *DAMAGE_X_TO_Y() {
 		return "%d-%d";
 	}
 
-	/*
-	%+d óðîíà îò %s"
-	*/
 	const char *ELEMENTAL_XY_DAMAGE() {
-		return "%+d \xE3\xE0\xAE\xAD\xA0 \xAE\xE2 %s";
+		return "%+d \xE3\xE0\xAE\xAD\xA0 \xAE\xE2 %s"; // %+d урона от %s"
 	}
 
 	const char *ATTR_XY_BONUS() {
 		return "%+d %s";
 	}
 
-	/*
-	"x3 ïðîòèâ %s"
-	*/
 	const char *EFFECTIVE_AGAINST() {
-		return "x3 \xAF\xE0\xAE\xE2\xA8\xA2 %s";
+		return "x3 \xAF\xE0\xAE\xE2\xA8\xA2 %s"; // "x3 против %s"
 	}
 
-	/*
-	"\r\x2\x3""c\v021\t017\f37Â\fdåùè\t085\f37Ç\fdàäàíèÿ\t153"
-	"Ç\f37à\fdìåòêè\t221Ââåðõ\t255Âíèç"
-	"\t289Âûõîä";
-	*/
 	const char *QUESTS_DIALOG_TEXT() {
-		return "\r\x2\x3"
-			   "c\v021\t017\f37\x82\fd\xA5\xE9\xA8\t085\f37\x87\fd\xA0\xA4\xA0\xAD\xA8\xEF\t153"
-			   "\x87\f37\xA0\fd\xAC\xA5\xE2\xAA\xA8\t221\x82\xA2\xA5\xE0\xE5\t255\x82\xAD\xA8\xA7"
-			   "\t289\x82\xEB\xE5\xAE\xA4";
+		return "\r\x2\x3""c\v021\t017\f37\x82\fd\xA5\xE9\xA8\t085\f37\x87\fd\xA0\xA4\xA0\xAD\xA8\xEF\t153" // "\r\x2\x3""c\v021\t017\f37В\fdещи\t085\f37З\fdадания\t153"
+			   "\x87\f37\xA0\fd\xAC\xA5\xE2\xAA\xA8\t221\x82\xA2\xA5\xE0\xE5\t255\x82\xAD\xA8\xA7"         // "З\f37а\fdметки\t221Вверх\t255Вниз"
+			   "\t289\x82\xEB\xE5\xAE\xA4";                                                                // "\t289Выход";
 	}
 
-	/*
-	"\b \b*-- \f04Îáëàêà Êñèíà\fd --"
-	*/
 	const char *CLOUDS_OF_XEEN_LINE() {
-		return "\b \b*-- \f04\x8E\xA1\xAB\xA0\xAA\xA0 \x8A\xE1\xA8\xAD\xA0\fd --";
+		return "\b \b*-- \f04\x8E\xA1\xAB\xA0\xAA\xA0 \x8A\xE1\xA8\xAD\xA0\fd --"; // "\b \b*-- \f04Облака Ксина\fd --"
 	}
 
 	const char *DARKSIDE_OF_XEEN_LINE() {
@@ -2423,374 +1434,185 @@ public:
 		return "\b \b*-- \f04Swords of Xeen\fd --";
 	}
 
-	/*
-	"\r\x1\fd\x3""c\v000\t000Ïðåäìåòû çàäàíèé\x3""l\x2\n"
-	"\n"
-	"\x3""cÍåò ïðåäìåòîâ";
-	*/
 	const char *NO_QUEST_ITEMS() {
-		return "\r\x1\fd\x3"
-			   "c\v000\t000\x8F\xE0\xA5\xA4\xAC\xA5\xE2\xEB \xA7\xA0\xA4\xA0\xAD\xA8\xA9\x3"
-			   "l\x2\n"
-			   "\n"
-			   "\x3"
-			   "c\x8D\xA5\xE2 \xAF\xE0\xA5\xA4\xAC\xA5\xE2\xAE\xA2";
+		return "\r\x1\fd\x3""c\v000\t000\x8F\xE0\xA5\xA4\xAC\xA5\xE2\xEB \xA7\xA0\xA4\xA0\xAD\xA8\xA9\x3""l\x2\n" // "\r\x1\fd\x3""c\v000\t000Предметы заданий\x3""l\x2\n"
+			   "\n"                                                                                               // "\n"
+			   "\x3""c\x8D\xA5\xE2 \xAF\xE0\xA5\xA4\xAC\xA5\xE2\xAE\xA2";                                         // "\x3""cНет предметов";
 	}
 
-	/*
-	"\x3""c\v000\t000\n"
-	"\n"
-	"Íåò çàäàíèé";
-	*/
 	const char *NO_CURRENT_QUESTS() {
-		return "\x3"
-			   "c\v000\t000\n"
-			   "\n"
-			   "\x8D\xA5\xE2 \xA7\xA0\xA4\xA0\xAD\xA8\xA9";
+		return "\x3""c\v000\t000\n"							// "\x3""c\v000\t000\n"
+			   "\n"                                         // "\n"
+			   "\x8D\xA5\xE2 \xA7\xA0\xA4\xA0\xAD\xA8\xA9"; // "Нет заданий";
 	}
 
-	/*
-	"\x3""cÇàìåòîê íåò"
-	*/
 	const char *NO_AUTO_NOTES() {
-		return "\x3"
-			   "c\x87\xA0\xAC\xA5\xE2\xAE\xAA \xAD\xA5\xE2";
-	}
-
-	/*
-	"\r\x1\fd\x3""c\v000\t000Ïðåäìåòû çàäàíèé\x3""l\x2\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s\n"
-	"\f04 * \fd%s";
-	*/
+		return "\x3""c\x87\xA0\xAC\xA5\xE2\xAE\xAA \xAD\xA5\xE2"; // "\x3""cЗаметок нет"
+	}
+
 	const char *QUEST_ITEMS_DATA() {
-		return "\r\x1\fd\x3"
-			   "c\v000\t000\x8F\xE0\xA5\xA4\xAC\xA5\xE2\xEB \xA7\xA0\xA4\xA0\xAD\xA8\xA9\x3"
-			   "l\x2\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s\n"
-			   "\f04 * \fd%s";
-	}
-
-	/*
-	"\r\x1\fd\x3""c\t000\v000Çàäàíèÿ\x3""l\x2\n"
-	"%s\n"
-	"\n"
-	"%s\n"
-	"\n"
-	"%s";
-	*/
+		return "\r\x1\fd\x3""c\v000\t000\x8F\xE0\xA5\xA4\xAC\xA5\xE2\xEB \xA7\xA0\xA4\xA0\xAD\xA8\xA9\x3""l\x2\n" // "\r\x1\fd\x3""c\v000\t000Предметы заданий\x3""l\x2\n"
+			   "\f04 * \fd%s\n"                                                                                   // "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"                                                                                   // "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"                                                                                   // "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"                                                                                   // "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"                                                                                   // "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"                                                                                   // "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"                                                                                   // "\f04 * \fd%s\n"
+			   "\f04 * \fd%s\n"                                                                                   // "\f04 * \fd%s\n"
+			   "\f04 * \fd%s";                                                                                    // "\f04 * \fd%s";
+	}
+
 	const char *CURRENT_QUESTS_DATA() {
-		return "\r\x1\fd\x3"
-			   "c\t000\v000\x87\xA0\xA4\xA0\xAD\xA8\xEF\x3"
-			   "l\x2\n"
-			   "%s\n"
-			   "\n"
-			   "%s\n"
-			   "\n"
-			   "%s";
-	}
-
-	/*
-	"\r\x1\fd\x3""c\t000\v000Çàìåòêè\x3""l\x2\n"
-	"%s\x3""l\n"
-	"%s\x3""l\n"
-	"%s\x3""l\n"
-	"%s\x3""l\n"
-	"%s\x3""l\n"
-	"%s\x3""l\n"
-	"%s\x3""l\n"
-	"%s\x3""l\n"
-	"%s\x3""l";
-	*/
+		return "\r\x1\fd\x3""c\t000\v000\x87\xA0\xA4\xA0\xAD\xA8\xEF\x3""l\x2\n" // "\r\x1\fd\x3""c\t000\v000Задания\x3""l\x2\n"
+			   "%s\n"                                                            // "%s\n"
+			   "\n"                                                              // "\n"
+			   "%s\n"                                                            // "%s\n"
+			   "\n"                                                              // "\n"
+			   "%s";                                                             // "%s";
+	}
+
 	const char *AUTO_NOTES_DATA() {
-		return "\r\x1\fd\x3"
-			   "c\t000\v000\x87\xA0\xAC\xA5\xE2\xAA\xA8\x3"
-			   "l\x2\n"
-			   "%s\x3"
-			   "l\n"
-			   "%s\x3"
-			   "l\n"
-			   "%s\x3"
-			   "l\n"
-			   "%s\x3"
-			   "l\n"
-			   "%s\x3"
-			   "l\n"
-			   "%s\x3"
-			   "l\n"
-			   "%s\x3"
-			   "l\n"
-			   "%s\x3"
-			   "l\n"
-			   "%s\x3"
-			   "l";
+		return "\r\x1\fd\x3""c\t000\v000\x87\xA0\xAC\xA5\xE2\xAA\xA8\x3""l\x2\n" // "\r\x1\fd\x3""c\t000\v000Заметки\x3""l\x2\n"
+			   "%s\x3""l\n"														 // "%s\x3""l\n"
+			   "%s\x3""l\n"														 // "%s\x3""l\n"
+			   "%s\x3""l\n"														 // "%s\x3""l\n"
+			   "%s\x3""l\n"														 // "%s\x3""l\n"
+			   "%s\x3""l\n"														 // "%s\x3""l\n"
+			   "%s\x3""l\n"														 // "%s\x3""l\n"
+			   "%s\x3""l\n"														 // "%s\x3""l\n"
+			   "%s\x3""l\n"														 // "%s\x3""l\n"
+			   "%s\x3""l";														 // "%s\x3""l";
 	}
 
-	/*
-	"\v000\t000Ïðîøëî 8 ÷àñîâ. Îòäûõ çàêîí÷åí\n"
-	"%s\n"
-	"Áûëî ñúåäåíî %d ïèùè.";
-	*/
 	const char *REST_COMPLETE() {
-		return "\v000\t000\x8F\xE0\xAE\xE8\xAB\xAE 8 \xE7\xA0\xE1\xAE\xA2. \x8E\xE2\xA4\xEB\xE5 \xA7\xA0\xAA\xAE\xAD\xE7\xA5\xAD\n"
-			   "%s\n"
-			   "\x81\xEB\xAB\xAE \xE1\xEA\xA5\xA4\xA5\xAD\xAE %d \xAF\xA8\xE9\xA8.";
+		return "\v000\t000\x8F\xE0\xAE\xE8\xAB\xAE 8 \xE7\xA0\xE1\xAE\xA2. \x8E\xE2\xA4\xEB\xE5 \xA7\xA0\xAA\xAE\xAD\xE7\xA5\xAD\n" // "\v000\t000Прошло 8 часов. Отдых закончен\n"
+			   "%s\n"                                                                                                               // "%s\n"
+			   "\x81\xEB\xAB\xAE \xE1\xEA\xA5\xA4\xA5\xAD\xAE %d \xAF\xA8\xE9\xA8.";                                                // "Было съедено %d пищи.";
 	}
 
-	/*
-	"\f07Îòðÿä ãîëîäàåò!\fd"
-	*/
 	const char *PARTY_IS_STARVING() {
-		return "\f07\x8E\xE2\xE0\xEF\xA4 \xA3\xAE\xAB\xAE\xA4\xA0\xA5\xE2!\fd";
+		return "\f07\x8E\xE2\xE0\xEF\xA4 \xA3\xAE\xAB\xAE\xA4\xA0\xA5\xE2!\fd"; // "\f07Отряд голодает!\fd"
 	}
 
-	/*
-	"Çäîðîâüå è ìàíà âîññòàíîâëåíû"
-	*/
 	const char *HIT_SPELL_POINTS_RESTORED() {
-		return "\x87\xA4\xAE\xE0\xAE\xA2\xEC\xA5 \xA8 \xAC\xA0\xAD\xA0 \xA2\xAE\xE1\xE1\xE2\xA0\xAD\xAE\xA2\xAB\xA5\xAD\xEB";
+		return "\x87\xA4\xAE\xE0\xAE\xA2\xEC\xA5 \xA8 \xAC\xA0\xAD\xA0 \xA2\xAE\xE1\xE1\xE2\xA0\xAD\xAE\xA2\xAB\xA5\xAD\xEB"; // "Здоровье и мана восстановлены"
 	}
 
-	/*
-	"Çäåñü ñëèøêîì îïàñíî îòäûõàòü!"
-	*/
 	const char *TOO_DANGEROUS_TO_REST() {
-		return "\x87\xA4\xA5\xE1\xEC \xE1\xAB\xA8\xE8\xAA\xAE\xAC \xAE\xAF\xA0\xE1\xAD\xAE \xAE\xE2\xA4\xEB\xE5\xA0\xE2\xEC!";
+		return "\x87\xA4\xA5\xE1\xEC \xE1\xAB\xA8\xE8\xAA\xAE\xAC \xAE\xAF\xA0\xE1\xAD\xAE \xAE\xE2\xA4\xEB\xE5\xA0\xE2\xEC!"; // "Здесь слишком опасно отдыхать!"
 	}
 
-	/*
-	"Êòî-òî èç îòðÿäà ìîæåò óìåðåòü. Âû âñ¸ ðàâíî æåëàåòå îòäîõíóòü?"
-	*/
 	const char *SOME_CHARS_MAY_DIE() {
-		return "\x8A\xE2\xAE-\xE2\xAE \xA8\xA7 \xAE\xE2\xE0\xEF\xA4\xA0 \xAC\xAE\xA6\xA5\xE2 \xE3\xAC\xA5\xE0\xA5\xE2\xEC. \x82\xEB \xA2\xE1\xF1 \xE0\xA0\xA2\xAD\xAE \xA6\xA5\xAB\xA0\xA5\xE2\xA5 \xAE\xE2\xA4\xAE\xE5\xAD\xE3\xE2\xEC?";
+		return "\x8A\xE2\xAE-\xE2\xAE \xA8\xA7 \xAE\xE2\xE0\xEF\xA4\xA0 \xAC\xAE\xA6\xA5\xE2 \xE3\xAC\xA5\xE0\xA5\xE2\xEC. \x82\xEB \xA2\xE1\xF1 \xE0\xA0\xA2\xAD\xAE \xA6\xA5\xAB\xA0\xA5\xE2\xA5 \xAE\xE2\xA4\xAE\xE5\xAD\xE3\xE2\xEC?"; // "Кто-то из отряда может умереть. Вы всё равно желаете отдохнуть?"
 	}
 
-	/*
-	"\r\t010\v005Êîãî âûãíàòü?"
-	*/
 	const char *DISMISS_WHOM() {
-		return "\r\t010\v005\x8A\xAE\xA3\xAE \xA2\xEB\xA3\xAD\xA0\xE2\xEC?";
+		return "\r\t010\v005\x8A\xAE\xA3\xAE \xA2\xEB\xA3\xAD\xA0\xE2\xEC?"; // "\r\t010\v005Кого выгнать?"
 	}
 
-	/*
-	"Âû íå ìîæåòå âûãíàòü ñâîåãî ïîñëåäíåãî ïåðñîíàæà!"
-	*/
 	const char *CANT_DISMISS_LAST_CHAR() {
-		return "\x82\xEB \xAD\xA5 \xAC\xAE\xA6\xA5\xE2\xA5 \xA2\xEB\xA3\xAD\xA0\xE2\xEC \xE1\xA2\xAE\xA5\xA3\xAE \xAF\xAE\xE1\xAB\xA5\xA4\xAD\xA5\xA3\xAE \xAF\xA5\xE0\xE1\xAE\xAD\xA0\xA6\xA0!";
+		return "\x82\xEB \xAD\xA5 \xAC\xAE\xA6\xA5\xE2\xA5 \xA2\xEB\xA3\xAD\xA0\xE2\xEC \xE1\xA2\xAE\xA5\xA3\xAE \xAF\xAE\xE1\xAB\xA5\xA4\xAD\xA5\xA3\xAE \xAF\xA5\xE0\xE1\xAE\xAD\xA0\xA6\xA0!"; // "Вы не можете выгнать своего последнего персонажа!"
 	}
 
 	const char *DELETE_CHAR_WITH_ELDER_WEAPON() {
 		return "\v000\t000This character has an Elder Weapon and cannot be deleted!";
 	}
 
-	/*
-	"Âûãíàòü", "óäàëèòü"
-	*/
 	const char **REMOVE_DELETE() {
 		delete[] _removeDelete;
-		_removeDelete = new const char *[2] { "\x82\xEB\xA3\xAD\xA0\xE2\xEC", "\xE3\xA4\xA0\xAB\xA8\xE2\xEC" };
+		_removeDelete = new const char *[2] { "\x82\xEB\xA3\xAD\xA0\xE2\xEC", "\xE3\xA4\xA0\xAB\xA8\xE2\xEC" }; // "Выгнать", "удалить"
 		return _removeDelete;
 	}
 
-	/*
-	"\x3""l\t010\v005Êîãî %s?"
-	*/
 	const char *REMOVE_OR_DELETE_WHICH() {
-		return "\x3"
-			   "l\t010\v005\x8A\xAE\xA3\xAE %s?";
+		return "\x3""l\t010\v005\x8A\xAE\xA3\xAE %s?"; // "\x3""l\t010\v005Кого %s?"
 	}
 
-	/*
-	"\v007Âàø îòðÿä ïîëîí!"
-	*/
 	const char *YOUR_PARTY_IS_FULL() {
-		return "\v007\x82\xA0\xE8 \xAE\xE2\xE0\xEF\xA4 \xAF\xAE\xAB\xAE\xAD!";
+		return "\v007\x82\xA0\xE8 \xAE\xE2\xE0\xEF\xA4 \xAF\xAE\xAB\xAE\xAD!"; // "\v007Ваш отряд полон!"
 	}
 
-	/*
-	"\v000\t000Ýòîò ïåðñîíàæ íå ìîæåò áûòü óäàë¸í, òàê êàê ó íåãî Ìå÷-óáèéöà Êñèíà!"
-	*/
 	const char *HAS_SLAYER_SWORD() {
-		return "\v000\t000\x9D\xE2\xAE\xE2 \xAF\xA5\xE0\xE1\xAE\xAD\xA0\xA6 \xAD\xA5 \xAC\xAE\xA6\xA5\xE2 \xA1\xEB\xE2\xEC \xE3\xA4\xA0\xAB\xF1\xAD, \xE2\xA0\xAA \xAA\xA0\xAA \xE3 \xAD\xA5\xA3\xAE \x8C\xA5\xE7-\xE3\xA1\xA8\xA9\xE6\xA0 \x8A\xE1\xA8\xAD\xA0!";
+		return "\v000\t000\x9D\xE2\xAE\xE2 \xAF\xA5\xE0\xE1\xAE\xAD\xA0\xA6 \xAD\xA5 \xAC\xAE\xA6\xA5\xE2 \xA1\xEB\xE2\xEC \xE3\xA4\xA0\xAB\xF1\xAD, \xE2\xA0\xAA \xAA\xA0\xAA \xE3 \xAD\xA5\xA3\xAE \x8C\xA5\xE7-\xE3\xA1\xA8\xA9\xE6\xA0 \x8A\xE1\xA8\xAD\xA0!"; // "\v000\t000Этот персонаж не может быть удалён, так как у него Меч-убийца Ксина!"
 	}
 
-	/*
-	"%s %s. Âû óâåðåíû, ÷òî õîòèòå óäàëèòü ýòîãî ãåðîÿ?"
-	*/
 	const char *SURE_TO_DELETE_CHAR() {
-		return "%s %s. \x82\xEB \xE3\xA2\xA5\xE0\xA5\xAD\xEB, \xE7\xE2\xAE \xE5\xAE\xE2\xA8\xE2\xA5 \xE3\xA4\xA0\xAB\xA8\xE2\xEC \xED\xE2\xAE\xA3\xAE \xA3\xA5\xE0\xAE\xEF?";
+		return "%s %s. \x82\xEB \xE3\xA2\xA5\xE0\xA5\xAD\xEB, \xE7\xE2\xAE \xE5\xAE\xE2\xA8\xE2\xA5 \xE3\xA4\xA0\xAB\xA8\xE2\xEC \xED\xE2\xAE\xA3\xAE \xA3\xA5\xE0\xAE\xEF?"; // "%s %s. Вы уверены, что хотите удалить этого героя?"
 	}
 
-	/*
-	"\f04\x3""c\x2\t144\v119\f37Á\f04ðîñîê\t144\v149\f37Ñ\f04îçä"
-	"\t144\v179\f37ESC\f04\x3""l\x1\t195\v021Ñè\f37ë\f04"
-	"\t195\v045\f37È\f04íò\t195\v069\f37Ä\f04óõ\t195\v093Ñë\f37æ\f04"
-	"\t195\v116Ñ\f37ê\f04ð\t195\v140\f37Ì\f04òê\t195\v164\f37Ó\f04ä÷%s";
-	*/
 	const char *CREATE_CHAR_DETAILS() {
-		return "\f04\x3"
-			   "c\x2\t144\v119\f37\x81\f04\xE0\xAE\xE1\xAE\xAA\t144\v149\f37\x91\f04\xAE\xA7\xA4"
-			   "\t144\v179\f37ESC\f04\x3"
-			   "l\x1\t195\v021\x91\xA8\f37\xAB\f04"
-			   "\t195\v045\f37\x88\f04\xAD\xE2\t195\v069\f37\x84\f04\xE3\xE5\t195\v093\x91\xAB\f37\xA6\f04"
-			   "\t195\v116\x91\f37\xAA\f04\xE0\t195\v140\f37\x8C\f04\xE2\xAA\t195\v164\f37\x93\f04\xA4\xE7%s";
-	}
-
-	/*
-	"\f04\x3""l\t017\v148Ðàñà\t055: %s\n"
-	"\t017Ïîë\t055: %s\n"
-	"\t017Êëàññ\t055:\n"
-	"\x3""r\t215\v031%d\t215\v055%d\t215\v079%d\t215\v103%d\t215\v127%d"
-	"\t215\v151%d\t215\v175%d\x3""l\t242\v020\f%2dÐûöàðü\t242\v031\f%2d"
-	"Ïàëàäèí\t242\v042\f%2dËó÷íèê\t242\v053\f%2dÊëèðèê\t242\v064\f%2d"
-	"Ìàã\t242\v075\f%2dÂîð\t242\v086\f%2dÍèíäçÿ\t242\v097\f%2d"
-	"Âàðâàð\t242\v108\f%2dÄðóèä\t242\v119\f%2dÑëåäîïûò\f04\x3""c"
-	"\t265\v142Íàâûêè\x2\x3""l\t223\v155%s\t223\v170%s%s\x1";
-	*/
+		return "\f04\x3""c\x2\t144\v119\f37\x81\f04\xE0\xAE\xE1\xAE\xAA\t144\v149\f37\x91\f04\xAE\xA7\xA4"		// "\f04\x3""c\x2\t144\v119\f37Б\f04росок\t144\v149\f37С\f04озд"
+			   "\t144\v179\f37ESC\f04\x3""l\x1\t195\v021\x91\xA8\f37\xAB\f04"									// "\t144\v179\f37ESC\f04\x3""l\x1\t195\v021Си\f37л\f04"
+			   "\t195\v045\f37\x88\f04\xAD\xE2\t195\v069\f37\x84\f04\xE3\xE5\t195\v093\x91\xAB\f37\xA6\f04"		// "\t195\v045\f37И\f04нт\t195\v069\f37Д\f04ух\t195\v093Сл\f37ж\f04"
+			   "\t195\v116\x91\f37\xAA\f04\xE0\t195\v140\f37\x8C\f04\xE2\xAA\t195\v164\f37\x93\f04\xA4\xE7%s";	// "\t195\v116С\f37к\f04р\t195\v140\f37М\f04тк\t195\v164\f37У\f04дч%s";
+	}
+
 	const char *NEW_CHAR_STATS() {
-		return "\f04\x3"
-			   "l\t017\v148\x90\xA0\xE1\xA0\t055: %s\n"
-			   "\t017\x8F\xAE\xAB\t055: %s\n"
-			   "\t017\x8A\xAB\xA0\xE1\xE1\t055:\n"
-			   "\x3"
-			   "r\t215\v031%d\t215\v055%d\t215\v079%d\t215\v103%d\t215\v127%d"
-			   "\t215\v151%d\t215\v175%d\x3"
-			   "l\t242\v020\f%2d\x90\xEB\xE6\xA0\xE0\xEC\t242\v031\f%2d"
-			   "\x8F\xA0\xAB\xA0\xA4\xA8\xAD\t242\v042\f%2d\x8B\xE3\xE7\xAD\xA8\xAA\t242\v053\f%2d\x8A\xAB\xA8\xE0\xA8\xAA\t242\v064\f%2d"
-			   "\x8C\xA0\xA3\t242\v075\f%2d\x82\xAE\xE0\t242\v086\f%2d\x8D\xA8\xAD\xA4\xA7\xEF\t242\v097\f%2d"
-			   "\x82\xA0\xE0\xA2\xA0\xE0\t242\v108\f%2d\x84\xE0\xE3\xA8\xA4\t242\v119\f%2d\x91\xAB\xA5\xA4\xAE\xAF\xEB\xE2\f04\x3"
-			   "c"
-			   "\t265\v142\x8D\xA0\xA2\xEB\xAA\xA8\x2\x3"
-			   "l\t223\v155%s\t223\v170%s%s\x1";
+		return "\f04\x3""l\t017\v148\x90\xA0\xE1\xA0\t055: %s\n"																			// "\f04\x3""l\t017\v148Раса\t055: %s\n"
+			   "\t017\x8F\xAE\xAB\t055: %s\n"																								// "\t017Пол\t055: %s\n"
+			   "\t017\x8A\xAB\xA0\xE1\xE1\t055:\n"																							// "\t017Класс\t055:\n"
+			   "\x3""r\t215\v031%d\t215\v055%d\t215\v079%d\t215\v103%d\t215\v127%d"															// "\x3""r\t215\v031%d\t215\v055%d\t215\v079%d\t215\v103%d\t215\v127%d"
+			   "\t215\v151%d\t215\v175%d\x3""l\t242\v020\f%2d\x90\xEB\xE6\xA0\xE0\xEC\t242\v031\f%2d"										// "\t215\v151%d\t215\v175%d\x3""l\t242\v020\f%2dРыцарь\t242\v031\f%2d"
+			   "\x8F\xA0\xAB\xA0\xA4\xA8\xAD\t242\v042\f%2d\x8B\xE3\xE7\xAD\xA8\xAA\t242\v053\f%2d\x8A\xAB\xA8\xE0\xA8\xAA\t242\v064\f%2d"	// "Паладин\t242\v042\f%2dЛучник\t242\v053\f%2dКлирик\t242\v064\f%2d"
+			   "\x8C\xA0\xA3\t242\v075\f%2d\x82\xAE\xE0\t242\v086\f%2d\x8D\xA8\xAD\xA4\xA7\xEF\t242\v097\f%2d"								// "Маг\t242\v075\f%2dВор\t242\v086\f%2dНиндзя\t242\v097\f%2d"
+			   "\x82\xA0\xE0\xA2\xA0\xE0\t242\v108\f%2d\x84\xE0\xE3\xA8\xA4\t242\v119\f%2d\x91\xAB\xA5\xA4\xAE\xAF\xEB\xE2\f04\x3""c"		// "Варвар\t242\v108\f%2dДруид\t242\v119\f%2dСледопыт\f04\x3""c"
+			   "\t265\v142\x8D\xA0\xA2\xEB\xAA\xA8\x2\x3""l\t223\v155%s\t223\v170%s%s\x1";													// "\t265\v142Навыки\x2\x3""l\t223\v155%s\t223\v170%s%s\x1";
 	}
 
-	/*
-	"\x3""cÂâåäèòå èìÿ ïåðñîíàæà\n\n"
-	*/
 	const char *NAME_FOR_NEW_CHARACTER() {
-		return "\x3"
-			   "c\x82\xA2\xA5\xA4\xA8\xE2\xA5 \xA8\xAC\xEF \xAF\xA5\xE0\xE1\xAE\xAD\xA0\xA6\xA0\n\n";
+		return "\x3""c\x82\xA2\xA5\xA4\xA8\xE2\xA5 \xA8\xAC\xEF \xAF\xA5\xE0\xE1\xAE\xAD\xA0\xA6\xA0\n\n"; // "\x3""cВведите имя персонажа\n\n"
 	}
 
-	/*
-	"\v003\x3""cÏåðåä ñîõðàíåíèåì âûáåðèòå êëàññ.\x3""l"
-	*/
 	const char *SELECT_CLASS_BEFORE_SAVING() {
-		return "\v003\x3"
-			   "c\x8F\xA5\xE0\xA5\xA4 \xE1\xAE\xE5\xE0\xA0\xAD\xA5\xAD\xA8\xA5\xAC \xA2\xEB\xA1\xA5\xE0\xA8\xE2\xA5 \xAA\xAB\xA0\xE1\xE1.\x3"
-			   "l";
+		return "\v003\x3""c\x8F\xA5\xE0\xA5\xA4 \xE1\xAE\xE5\xE0\xA0\xAD\xA5\xAD\xA8\xA5\xAC \xA2\xEB\xA1\xA5\xE0\xA8\xE2\xA5 \xAA\xAB\xA0\xE1\xE1.\x3""l"; // "\v003\x3""cПеред сохранением выберите класс.\x3""l"
 	}
 
-	/*
-	"Ïîìåíÿòü %s ñ..."
-	*/
 	const char *EXCHANGE_ATTR_WITH() {
-		return "\x8F\xAE\xAC\xA5\xAD\xEF\xE2\xEC %s \xE1...";
+		return "\x8F\xAE\xAC\xA5\xAD\xEF\xE2\xEC %s \xE1..."; // "Поменять %s с..."
 	}
 
-	/*
-	"\r\f00\x3""c\v000\t000\x2%s%s%s\x1"
-	*/
 	const char *COMBAT_DETAILS() {
-		return "\r\f00\x3"
-			   "c\v000\t000\x2%s%s%s\x1";
+		return "\r\f00\x3""c\v000\t000\x2%s%s%s\x1"; // "\r\f00\x3""c\v000\t000\x2%s%s%s\x1"
 	}
 
-	/*
-	"\x3""c\v000Íåäîñòàòî÷íî %s, ÷òîáû çàêëèíàòü %s"
-	*/
 	const char *NOT_ENOUGH_TO_CAST() {
-		return "\x3"
-			   "c\v000\x8D\xA5\xA4\xAE\xE1\xE2\xA0\xE2\xAE\xE7\xAD\xAE %s, \xE7\xE2\xAE\xA1\xEB \xA7\xA0\xAA\xAB\xA8\xAD\xA0\xE2\xEC %s";
+		return "\x3""c\v000\x8D\xA5\xA4\xAE\xE1\xE2\xA0\xE2\xAE\xE7\xAD\xAE %s, \xE7\xE2\xAE\xA1\xEB \xA7\xA0\xAA\xAB\xA8\xAD\xA0\xE2\xEC %s"; // "\x3""c\v000Недостаточно %s, чтобы заклинать %s"
 	}
 
-	/*
-	"î÷êîâ ìàãèè", "àëìàçîâ"
-	*/
 	const char **SPELL_CAST_COMPONENTS() {
 		delete[] _spellCastComponents;
-		_spellCastComponents = new const char *[2] { "\xAE\xE7\xAA\xAE\xA2 \xAC\xA0\xA3\xA8\xA8", "\xA0\xAB\xAC\xA0\xA7\xAE\xA2" };
+		_spellCastComponents = new const char *[2] { "\xAE\xE7\xAA\xAE\xA2 \xAC\xA0\xA3\xA8\xA8", "\xA0\xAB\xAC\xA0\xA7\xAE\xA2" }; // "очков магии", "алмазов"
 		return _spellCastComponents;
 	}
 
-	/*
-	"\r\x2\x3""c\v122\t013\f37Ç\fdàêë\t040\f37Í\fdîâ"
-	"\t067ESC\x1\t000\v000\x3""cÇàêëèíàíèå\n"
-	"\n"
-	"%s\x3""c\n"
-	"\n"
-	"     Ãîòîâîå:\x3""c\n"
-	"\n"
-	"\f09%s\fd\x2\x3""l\n"
-	"\v082Öåíà\x3""r\t000%u/%u\x3""l\n"
-	"Òåê ÎÌ\x3""r\t000%u\x1";
-	*/
 	const char *CAST_SPELL_DETAILS() {
-		return "\r\x2\x3"
-			   "c\v122\t013\f37\x87\fd\xA0\xAA\xAB\t040\f37\x8D\fd\xAE\xA2"
-			   "\t067ESC\x1\t000\v000\x3"
-			   "c\x87\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xA5\n"
-			   "\n"
-			   "%s\x3"
-			   "c\n"
-			   "\n"
-			   "     \x83\xAE\xE2\xAE\xA2\xAE\xA5:\x3"
-			   "c\n"
-			   "\n"
-			   "\f09%s\fd\x2\x3"
-			   "l\n"
-			   "\v082\x96\xA5\xAD\xA0\x3"
-			   "r\t000%u/%u\x3"
-			   "l\n"
-			   "\x92\xA5\xAA \x8E\x8C\x3"
-			   "r\t000%u\x1";
+		return "\r\x2\x3""c\v122\t013\f37\x87\fd\xA0\xAA\xAB\t040\f37\x8D\fd\xAE\xA2"  // "\r\x2\x3""c\v122\t013\f37З\fdакл\t040\f37Н\fdов"
+			   "\t067ESC\x1\t000\v000\x3""c\x87\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xA5\n" // "\t067ESC\x1\t000\v000\x3""cЗаклинание\n"
+			   "\n"																	   // "\n"
+			   "%s\x3""c\n"															   // "%s\x3""c\n"
+			   "\n"																	   // "\n"
+			   "     \x83\xAE\xE2\xAE\xA2\xAE\xA5:\x3""c\n"							   // "     Готовое:\x3""c\n"
+			   "\n"																	   // "\n"
+			   "\f09%s\fd\x2\x3""l\n"												   // "\f09%s\fd\x2\x3""l\n"
+			   "\v082\x96\xA5\xAD\xA0\x3""r\t000%u/%u\x3""l\n"						   // "\v082Цена\x3""r\t000%u/%u\x3""l\n"
+			   "\x92\xA5\xAA \x8E\x8C\x3""r\t000%u\x1";								   // "Тек ОМ\x3""r\t000%u\x1";
 	}
 
-	/*
-	"\x3""cÍàéäåíî:\n"
-	"\n"
-	"\x3""r\t000%lu Çîë\n"
-	"%lu Àëìç";
-	*/
 	const char *PARTY_FOUND() {
-		return "\x3"
-			   "c\x8D\xA0\xA9\xA4\xA5\xAD\xAE:\n"
-			   "\n"
-			   "\x3"
-			   "r\t000%lu \x87\xAE\xAB\n"
-			   "%lu \x80\xAB\xAC\xA7";
+		return "\x3""c\x8D\xA0\xA9\xA4\xA5\xAD\xAE:\n" // "\x3""cНайдено:\n"
+			   "\n"									   // "\n"
+			   "\x3""r\t000%lu \x87\xAE\xAB\n"		   // "\x3""r\t000%lu Зол\n"
+			   "%lu \x80\xAB\xAC\xA7";				   // "%lu Алмз";
 	}
 
-	/*
-	"\v007\f12Âíèìàíèå! Ðþêçàêè ïåðåïîëíåíû!\fd\n"
-	"Íàæìèòå êëàâèøó";
-	*/
 	const char *BACKPACKS_FULL_PRESS_KEY() {
-		return "\v007\f12\x82\xAD\xA8\xAC\xA0\xAD\xA8\xA5! \x90\xEE\xAA\xA7\xA0\xAA\xA8 \xAF\xA5\xE0\xA5\xAF\xAE\xAB\xAD\xA5\xAD\xEB!\fd\n"
-			   "\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3";
+		return "\v007\f12\x82\xAD\xA8\xAC\xA0\xAD\xA8\xA5! \x90\xEE\xAA\xA7\xA0\xAA\xA8 \xAF\xA5\xE0\xA5\xAF\xAE\xAB\xAD\xA5\xAD\xEB!\fd\n" // "\v007\f12Внимание! Рюкзаки переполнены!\fd\n"
+			   "\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3";                                                                 // "Нажмите клавишу";
 	}
 
-	/*
-	"\x3""l\v120\t000\x4""077\x3""c\f37Í. êëàâèøó\fd"
-	*/
 	const char *HIT_A_KEY() {
-		return "\x3"
-			   "l\v120\t000\x4"
-			   "077\x3"
-			   "c\f37\x8D. \xAA\xAB\xA0\xA2\xA8\xE8\xE3\fd";
+		return "\x3""l\v120\t000\x4""077\x3""c\f37\x8D. \xAA\xAB\xA0\xA2\xA8\xE8\xE3\fd"; // "\x3""l\v120\t000\x4""077\x3""c\f37Н. клавишу\fd"
 	}
 
 	const char *GIVE_TREASURE_FORMATTING() {
@@ -2808,105 +1630,53 @@ public:
 			   "077";
 	}
 
-	/*
-	"\v060\t000\x3""c%s íàø%s: %s"
-	*/
 	const char *X_FOUND_Y() {
-		return "\v060\t000\x3"
-			   "c%s \xAD\xA0\xE8%s: %s";
+		return "\v060\t000\x3""c%s \xAD\xA0\xE8%s: %s"; // "\v060\t000\x3""c%s наш%s: %s"
 	}
 
-	/*
-	"\x3""c\v009Êîãî?"
-	*/
 	const char *ON_WHO() {
-		return "\x3"
-			   "c\v009\x8A\xAE\xA3\xAE?";
+		return "\x3""c\v009\x8A\xAE\xA3\xAE?"; // "\x3""c\v009Кого?"
 	}
 
-	/*
-	"\r\x3""c\x1Êàêàÿ Ñòèõèÿ?\x2\v034\t014\f15Î\fdãîíü\t044"
-	"\f15Ã\fdðîì\t074\f15Õ\fdîëîä\t104\f15ß\fdä\x1";
-	*/
 	const char *WHICH_ELEMENT1() {
-		return "\r\x3"
-			   "c\x1\x8A\xA0\xAA\xA0\xEF \x91\xE2\xA8\xE5\xA8\xEF?\x2\v034\t014\f15\x8E\fd\xA3\xAE\xAD\xEC\t044"
-			   "\f15\x83\fd\xE0\xAE\xAC\t074\f15\x95\fd\xAE\xAB\xAE\xA4\t104\f15\x9F\fd\xA4\x1";
+		return "\r\x3""c\x1\x8A\xA0\xAA\xA0\xEF \x91\xE2\xA8\xE5\xA8\xEF?\x2\v034\t014\f15\x8E\fd\xA3\xAE\xAD\xEC\t044" // "\r\x3""c\x1Какая Стихия?\x2\v034\t014\f15О\fdгонь\t044"
+			   "\f15\x83\fd\xE0\xAE\xAC\t074\f15\x95\fd\xAE\xAB\xAE\xA4\t104\f15\x9F\fd\xA4\x1";					    // "\f15Г\fdром\t074\f15Х\fdолод\t104\f15Я\fdд\x1";
 	}
 
-	/*
-	"\r\x3""cÊàêàÿ Ñòèõèÿ?\x2\v034\t014\f15Î\fdãîíü\t044"
-	"\f15Ã\fdðîì\t074\f15Õ\fdîëîä\t104\f15ß\fdä\x1";
-	*/
 	const char *WHICH_ELEMENT2() {
-		return "\r\x3"
-			   "c\x8A\xA0\xAA\xA0\xEF \x91\xE2\xA8\xE5\xA8\xEF?\x2\v034\t014\f15\x8E\fd\xA3\xAE\xAD\xEC\t044"
-			   "\f15\x83\fd\xE0\xAE\xAC\t074\f15\x95\fd\xAE\xAB\xAE\xA4\t104\f15\x9F\fd\xA4\x1";
+		return "\r\x3""c\x8A\xA0\xAA\xA0\xEF \x91\xE2\xA8\xE5\xA8\xEF?\x2\v034\t014\f15\x8E\fd\xA3\xAE\xAD\xEC\t044" // "\r\x3""cКакая Стихия?\x2\v034\t014\f15О\fdгонь\t044"
+			   "\f15\x83\fd\xE0\xAE\xAC\t074\f15\x95\fd\xAE\xAB\xAE\xA4\t104\f15\x9F\fd\xA4\x1";					 // "\f15Г\fdром\t074\f15Х\fdолод\t104\f15Я\fdд\x1";
 	}
 
-	/*
-	"\x3""cÏîèñê ìîíñòðîâ"
-	*/
 	const char *DETECT_MONSTERS() {
-		return "\x3"
-			   "c\x8F\xAE\xA8\xE1\xAA \xAC\xAE\xAD\xE1\xE2\xE0\xAE\xA2";
+		return "\x3""c\x8F\xAE\xA8\xE1\xAA \xAC\xAE\xAD\xE1\xE2\xE0\xAE\xA2"; // "\x3""cПоиск монстров"
 	}
 
-	/*
-	"\r\x3""c\v000\t000\x1Ìàÿê Ëëîéäà\n"
-	"\n"
-	"Ïîñëåäíåå ìåñòî\n"
-	"\n"
-	"%s\x3""l\n"
-	"x = %d\x3""r\t000y = %d\x3""c\x2\v122\t021\f15Ó\fdñòàí\t060\f15Â\fdåðí\x1";
-	*/
 	const char *LLOYDS_BEACON() {
-		return "\r\x3"
-			   "c\v000\t000\x1\x8C\xA0\xEF\xAA \x8B\xAB\xAE\xA9\xA4\xA0\n"
-			   "\n"
-			   "\x8F\xAE\xE1\xAB\xA5\xA4\xAD\xA5\xA5 \xAC\xA5\xE1\xE2\xAE\n"
-			   "\n"
-			   "%s\x3"
-			   "l\n"
-			   "x = %d\x3"
-			   "r\t000y = %d\x3"
-			   "c\x2\v122\t021\f15\x93\fd\xE1\xE2\xA0\xAD\t060\f15\x82\fd\xA5\xE0\xAD\x1";
+		return "\r\x3""c\v000\t000\x1\x8C\xA0\xEF\xAA \x8B\xAB\xAE\xA9\xA4\xA0\n"									   // "\r\x3""c\v000\t000\x1Маяк Ллойда\n"
+			   "\n"																									   // "\n"
+			   "\x8F\xAE\xE1\xAB\xA5\xA4\xAD\xA5\xA5 \xAC\xA5\xE1\xE2\xAE\n"										   // "Последнее место\n"
+			   "\n"																									   // "\n"
+			   "%s\x3""l\n"																							   // "%s\x3""l\n"
+			   "x = %d\x3""r\t000y = %d\x3""c\x2\v122\t021\f15\x93\fd\xE1\xE2\xA0\xAD\t060\f15\x82\fd\xA5\xE0\xAD\x1"; // "x = %d\x3""r\t000y = %d\x3""c\x2\v122\t021\f15У\fdстан\t060\f15В\fdерн\x1";
 	}
 
-	/*
-	"\x3""cÒåëåïîðò\nÑêîëüêî êëåòîê íà %s (1-9)\n"
-	*/
 	const char *HOW_MANY_SQUARES() {
-		return "\x3"
-			   "c\x92\xA5\xAB\xA5\xAF\xAE\xE0\xE2\n\x91\xAA\xAE\xAB\xEC\xAA\xAE \xAA\xAB\xA5\xE2\xAE\xAA \xAD\xA0 %s (1-9)\n";
-	}
-
-	/*
-	"\x3""cÃîðîäñêîé ïîðòàë\x3""l\n"
-	"\n"
-	"\t0101. %s\n"
-	"\t0102. %s\n"
-	"\t0103. %s\n"
-	"\t0104. %s\n"
-	"\t0105. %s\x3""c\n"
-	"\n"
-	"Â êàêîé ãîðîä (1-5)\n"
-	"\n";
-	*/
+		return "\x3""c\x92\xA5\xAB\xA5\xAF\xAE\xE0\xE2\n\x91\xAA\xAE\xAB\xEC\xAA\xAE \xAA\xAB\xA5\xE2\xAE\xAA \xAD\xA0 %s (1-9)\n"; // "\x3""cТелепорт\nСколько клеток на %s (1-9)\n"
+	}
+
 	const char *TOWN_PORTAL() {
-		return "\x3"
-			   "c\x83\xAE\xE0\xAE\xA4\xE1\xAA\xAE\xA9 \xAF\xAE\xE0\xE2\xA0\xAB\x3"
-			   "l\n"
-			   "\n"
-			   "\t0101. %s\n"
-			   "\t0102. %s\n"
-			   "\t0103. %s\n"
-			   "\t0104. %s\n"
-			   "\t0105. %s\x3"
-			   "c\n"
-			   "\n"
-			   "\x82 \xAA\xA0\xAA\xAE\xA9 \xA3\xAE\xE0\xAE\xA4 (1-5)\n"
-			   "\n";
+		return "\x3""c\x83\xAE\xE0\xAE\xA4\xE1\xAA\xAE\xA9 \xAF\xAE\xE0\xE2\xA0\xAB\x3""l\n" // "\x3""cГородской портал\x3""l\n"
+			   "\n"																			 // "\n"
+			   "\t0101. %s\n"																 // "\t0101. %s\n"
+			   "\t0102. %s\n"																 // "\t0102. %s\n"
+			   "\t0103. %s\n"																 // "\t0103. %s\n"
+			   "\t0104. %s\n"																 // "\t0104. %s\n"
+			   "\t0105. %s\x3"																 // "\t0105. %s\x3""c\n"
+			   "c\n"																		 // "\n"
+			   "\n"																			 // "В какой город (1-5)\n"
+			   "\x82 \xAA\xA0\xAA\xAE\xA9 \xA3\xAE\xE0\xAE\xA4 (1-5)\n"						 // "\n";
+			   "\n";																		 // 
 	}
 
 	const char *TOWN_PORTAL_SWORDS() {
@@ -2928,126 +1698,68 @@ public:
 			   "c\t100%s\t140%u\t180%u\x3r\t000%s";
 	}
 
-	/*
-	"Íåò", "Ìàãèÿ", "Îãíÿ", "Ãðîìà", "Õîëîäà", "Îòðàâëåíèå", "Ýíåðãèè",
-	"Áîëåçíü", "Áåçóìèå", "Ñîí", "ÏðêëÏðäì", "Âëþáë", "ÎñóøÇäîð", "Ïðîêëÿòèå",
-	"Ïàðàëè÷", "Áåññîçí", "Ñìÿòåíèå", "ËîìÁðîí", "Ñëàáîñòü", "Óíè÷òîæ",
-	"Âîçðàñò+5", "Ìåðòâ", "Êàìåíü"
-	*/
 	const char **MONSTER_SPECIAL_ATTACKS() {
 		delete[] _monsterSpecialAttacks;
 		_monsterSpecialAttacks = new const char *[23] {
-			"\x8D\xA5\xE2", "\x8C\xA0\xA3\xA8\xEF", "\x8E\xA3\xAD\xEF", "\x83\xE0\xAE\xAC\xA0", "\x95\xAE\xAB\xAE\xA4\xA0", "\x8E\xE2\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xA5", "\x9D\xAD\xA5\xE0\xA3\xA8\xA8",
-				"\x81\xAE\xAB\xA5\xA7\xAD\xEC", "\x81\xA5\xA7\xE3\xAC\xA8\xA5", "\x91\xAE\xAD", "\x8F\xE0\xAA\xAB\x8F\xE0\xA4\xAC", "\x82\xAB\xEE\xA1\xAB", "\x8E\xE1\xE3\xE8\x87\xA4\xAE\xE0", "\x8F\xE0\xAE\xAA\xAB\xEF\xE2\xA8\xA5",
-				"\x8F\xA0\xE0\xA0\xAB\xA8\xE7", "\x81\xA5\xE1\xE1\xAE\xA7\xAD", "\x91\xAC\xEF\xE2\xA5\xAD\xA8\xA5", "\x8B\xAE\xAC\x81\xE0\xAE\xAD", "\x91\xAB\xA0\xA1\xAE\xE1\xE2\xEC", "\x93\xAD\xA8\xE7\xE2\xAE\xA6",
-				"\x82\xAE\xA7\xE0\xA0\xE1\xE2+5", "\x8C\xA5\xE0\xE2\xA2", "\x8A\xA0\xAC\xA5\xAD\xEC"
+			"\x8D\xA5\xE2", "\x8C\xA0\xA3\xA8\xEF", "\x8E\xA3\xAD\xEF", "\x83\xE0\xAE\xAC\xA0", "\x95\xAE\xAB\xAE\xA4\xA0", "\x8E\xE2\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xA5", "\x9D\xAD\xA5\xE0\xA3\xA8\xA8",								// "Нет", "Магия", "Огня", "Грома", "Холода", "Отравление", "Энергии",
+			"\x81\xAE\xAB\xA5\xA7\xAD\xEC", "\x81\xA5\xA7\xE3\xAC\xA8\xA5", "\x91\xAE\xAD", "\x8F\xE0\xAA\xAB\x8F\xE0\xA4\xAC", "\x82\xAB\xEE\xA1\xAB", "\x8E\xE1\xE3\xE8\x87\xA4\xAE\xE0", "\x8F\xE0\xAE\xAA\xAB\xEF\xE2\xA8\xA5",	// "Болезнь", "Безумие", "Сон", "ПрклПрдм", "Влюбл", "ОсушЗдор", "Проклятие",
+			"\x8F\xA0\xE0\xA0\xAB\xA8\xE7", "\x81\xA5\xE1\xE1\xAE\xA7\xAD", "\x91\xAC\xEF\xE2\xA5\xAD\xA8\xA5", "\x8B\xAE\xAC\x81\xE0\xAE\xAD", "\x91\xAB\xA0\xA1\xAE\xE1\xE2\xEC", "\x93\xAD\xA8\xE7\xE2\xAE\xA6",					// "Паралич", "Бессозн", "Смятение", "ЛомБрон", "Слабость", "Уничтож",
+			"\x82\xAE\xA7\xE0\xA0\xE1\xE2+5", "\x8C\xA5\xE0\xE2\xA2", "\x8A\xA0\xAC\xA5\xAD\xEC"																																	// "Возраст+5", "Мертв", "Камень"
 		};
 		return _monsterSpecialAttacks;
 	}
 
-	/*
-	"Ìîíñòð\x3""c\t155ÎÇ\t195ÊÇ\t233#Àòàê\x3""r\t000Îñîáîå%s%s%s"
-	*/
 	const char *IDENTIFY_MONSTERS() {
-		return "\x8C\xAE\xAD\xE1\xE2\xE0\x3"
-			   "c\t155\x8E\x87\t195\x8A\x87\t233#\x80\xE2\xA0\xAA\x3"
-			   "r\t000\x8E\xE1\xAE\xA1\xAE\xA5%s%s%s";
+		return "\x8C\xAE\xAD\xE1\xE2\xE0\x3""c\t155\x8E\x87\t195\x8A\x87\t233#\x80\xE2\xA0\xAA\x3""r\t000\x8E\xE1\xAE\xA1\xAE\xA5%s%s%s"; // "Монстр\x3""c\t155ОЗ\t195КЗ\t233#Атак\x3""r\t000Особое%s%s%s"
 	}
 
-	/*
-	"\x3""c\v012\t000Ïîêà ëóíû íå âñòàíóò â ðÿä, âû íå ñìîæåòå ïåðåéòè íà Ò¸ìíóþ ñòîðîíó Êñèíà"
-	*/
 	const char *MOONS_NOT_ALIGNED() {
-		return "\x3"
-			   "c\v012\t000\x8F\xAE\xAA\xA0 \xAB\xE3\xAD\xEB \xAD\xA5 \xA2\xE1\xE2\xA0\xAD\xE3\xE2 \xA2 \xE0\xEF\xA4, \xA2\xEB \xAD\xA5 \xE1\xAC\xAE\xA6\xA5\xE2\xA5 \xAF\xA5\xE0\xA5\xA9\xE2\xA8 \xAD\xA0 \x92\xF1\xAC\xAD\xE3\xEE \xE1\xE2\xAE\xE0\xAE\xAD\xE3 \x8A\xE1\xA8\xAD\xA0";
+		return "\x3""c\v012\t000\x8F\xAE\xAA\xA0 \xAB\xE3\xAD\xEB \xAD\xA5 \xA2\xE1\xE2\xA0\xAD\xE3\xE2 \xA2 \xE0\xEF\xA4, \xA2\xEB \xAD\xA5 \xE1\xAC\xAE\xA6\xA5\xE2\xA5 \xAF\xA5\xE0\xA5\xA9\xE2\xA8 \xAD\xA0 \x92\xF1\xAC\xAD\xE3\xEE \xE1\xE2\xAE\xE0\xAE\xAD\xE3 \x8A\xE1\xA8\xAD\xA0"; // "\x3""c\v012\t000Пока луны не встанут в ряд, вы не сможете перейти на Тёмную сторону Ксина"
 	}
 
-	/*
-	"\r\x1\fd\x3""c\v000\t000%s %s: Íàãðàäû \x3""l\x2\n"
-	"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\x1";
-	*/
 	const char *AWARDS_FOR() {
-		return "\r\x1\fd\x3"
-			   "c\v000\t000%s %s: \x8D\xA0\xA3\xE0\xA0\xA4\xEB \x3"
-			   "l\x2\n"
-			   "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\x1";
+		return "\r\x1\fd\x3""c\v000\t000%s %s: \x8D\xA0\xA3\xE0\xA0\xA4\xEB \x3""l\x2\n" // "\r\x1\fd\x3""c\v000\t000%s %s: Награды \x3""l\x2\n"
+			   "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\x1";									 // "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\x1";
 	}
 
-	/*
-	"\r\x2\x3""c\v021\t221Ââåðõ\t255Âíèç\t289Âûõîä"
-	*/
 	const char *AWARDS_TEXT() {
-		return "\r\x2\x3"
-			   "c\v021\t221\x82\xA2\xA5\xE0\xE5\t255\x82\xAD\xA8\xA7\t289\x82\xEB\xE5\xAE\xA4";
+		return "\r\x2\x3""c\v021\t221\x82\xA2\xA5\xE0\xE5\t255\x82\xAD\xA8\xA7\t289\x82\xEB\xE5\xAE\xA4"; // "\r\x2\x3""c\v021\t221Вверх\t255Вниз\t289Выход"
 	}
 
-	/*
-	"\x3""cÓ ïåðñîíàæà íåò íàãðàä"
-	*/
 	const char *NO_AWARDS() {
-		return "\x3"
-			   "c\x93 \xAF\xA5\xE0\xE1\xAE\xAD\xA0\xA6\xA0 \xAD\xA5\xE2 \xAD\xA0\xA3\xE0\xA0\xA4";
+		return "\x3""c\x93 \xAF\xA5\xE0\xE1\xAE\xAD\xA0\xA6\xA0 \xAD\xA5\xE2 \xAD\xA0\xA3\xE0\xA0\xA4"; // "\x3""cУ персонажа нет наград"
 	}
 
-	/*
-	"Àðåíà\n\t125Ìàñòåð áèòâû"
-	*/
 	const char *WARZONE_BATTLE_MASTER() {
-		return "\x80\xE0\xA5\xAD\xA0\n\t125\x8C\xA0\xE1\xE2\xA5\xE0 \xA1\xA8\xE2\xA2\xEB";
+		return "\x80\xE0\xA5\xAD\xA0\n\t125\x8C\xA0\xE1\xE2\xA5\xE0 \xA1\xA8\xE2\xA2\xEB"; // "Арена\n\t125Мастер битвы"
 	}
 
-	/*
-	"×òî!  Îïÿòü âû?  Íå ïðèñòàâàéòå ê òåì, êòî íå ìîæåò äàòü ñäà÷è!"
-	*/
 	const char *WARZONE_MAXED() {
-		return "\x97\xE2\xAE!  \x8E\xAF\xEF\xE2\xEC \xA2\xEB?  \x8D\xA5 \xAF\xE0\xA8\xE1\xE2\xA0\xA2\xA0\xA9\xE2\xA5 \xAA \xE2\xA5\xAC, \xAA\xE2\xAE \xAD\xA5 \xAC\xAE\xA6\xA5\xE2 \xA4\xA0\xE2\xEC \xE1\xA4\xA0\xE7\xA8!";
+		return "\x97\xE2\xAE!  \x8E\xAF\xEF\xE2\xEC \xA2\xEB?  \x8D\xA5 \xAF\xE0\xA8\xE1\xE2\xA0\xA2\xA0\xA9\xE2\xA5 \xAA \xE2\xA5\xAC, \xAA\xE2\xAE \xAD\xA5 \xAC\xAE\xA6\xA5\xE2 \xA4\xA0\xE2\xEC \xE1\xA4\xA0\xE7\xA8!"; // "Что!  Опять вы?  Не приставайте к тем, кто не может дать сдачи!"
 	}
 
-	/*
-	"Êàêîé óðîâåíü ìîíñòðîâ? (1-10)\n"
-	*/
 	const char *WARZONE_LEVEL() {
-		return "\x8A\xA0\xAA\xAE\xA9 \xE3\xE0\xAE\xA2\xA5\xAD\xEC \xAC\xAE\xAD\xE1\xE2\xE0\xAE\xA2? (1-10)\n";
+		return "\x8A\xA0\xAA\xAE\xA9 \xE3\xE0\xAE\xA2\xA5\xAD\xEC \xAC\xAE\xAD\xE1\xE2\xE0\xAE\xA2? (1-10)\n"; // "Какой уровень монстров? (1-10)\n"
 	}
 
-	/*
-	"Ñêîëüêî ìîíñòðîâ? (1-20)\n"
-	*/
 	const char *WARZONE_HOW_MANY() {
-		return "\x91\xAA\xAE\xAB\xEC\xAA\xAE \xAC\xAE\xAD\xE1\xE2\xE0\xAE\xA2? (1-20)\n";
+		return "\x91\xAA\xAE\xAB\xEC\xAA\xAE \xAC\xAE\xAD\xE1\xE2\xE0\xAE\xA2? (1-20)\n"; // "Сколько монстров? (1-20)\n"
 	}
 
-	/*
-	"\x3""c\v010%s âçëîìàë%s çàìîê!\nÍàæìèòå êëàâèøó."
-	*/
 	const char *PICKS_THE_LOCK() {
-		return "\x3"
-			   "c\v010%s \xA2\xA7\xAB\xAE\xAC\xA0\xAB%s \xA7\xA0\xAC\xAE\xAA!\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3.";
+		return "\x3""c\v010%s \xA2\xA7\xAB\xAE\xAC\xA0\xAB%s \xA7\xA0\xAC\xAE\xAA!\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3."; // "\x3""c\v010%s взломал%s замок!\nНажмите клавишу."
 	}
 
-	/*
-	"\x3""c\v010%s íå ñìîã%s âçëîìàòü çàìîê!\nÍàæìèòå êëàâèøó."
-	*/
 	const char *UNABLE_TO_PICK_LOCK() {
-		return "\x3"
-			   "c\v010%s \xAD\xA5 \xE1\xAC\xAE\xA3%s \xA2\xA7\xAB\xAE\xAC\xA0\xE2\xEC \xA7\xA0\xAC\xAE\xAA!\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3.";
+		return "\x3""c\v010%s \xAD\xA5 \xE1\xAC\xAE\xA3%s \xA2\xA7\xAB\xAE\xAC\xA0\xE2\xEC \xA7\xA0\xAC\xAE\xAA!\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3."; // "\x3""c\v010%s не смог%s взломать замок!\nНажмите клавишу."
 	}
 
-	/*
-	"\x1\f00\x3""c\v000\t000Ïàíåëü óïðàâëåíèÿ\x3""r"
-	"\v022\t045Çâ\f06ó\fdê:\t124\f06Ñ\fdîõð:"
-	"\v041\t045\f06Ì\fdóç.:\t124Ñ\f06î\fdõð:\v060\t045\f06Ç\fdàãð:"
-	"\t124\f06Â\fdûõîä"
-	"\v080\t084\f06Ï\fdîìîùü %s\t137Ìàãà\t000\x1";
-	*/
 	const char *CONTROL_PANEL_TEXT() {
-		return "\x1\f00\x3"
-			   "c\v000\t000\x8F\xA0\xAD\xA5\xAB\xEC \xE3\xAF\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xEF\x3"
-			   "r"
-			   "\v022\t045\x87\xA2\f06\xE3\fd\xAA:\t124\f06\x91\fd\xAE\xE5\xE0:"
-			   "\v041\t045\f06\x8C\fd\xE3\xA7.:\t124\x91\f06\xAE\fd\xE5\xE0:\v060\t045\f06\x87\fd\xA0\xA3\xE0:"
-			   "\t124\f06\x82\fd\xEB\xE5\xAE\xA4"
-			   "\v080\t084\f06\x8F\fd\xAE\xAC\xAE\xE9\xEC %s\t137\x8C\xA0\xA3\xA0\t000\x1";
+		return "\x1\f00\x3""c\v000\t000\x8F\xA0\xAD\xA5\xAB\xEC \xE3\xAF\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xEF\x3""r" // "\x1\f00\x3""c\v000\t000Панель управления\x3""r"
+			   "\v022\t045\x87\xA2\f06\xE3\fd\xAA:\t124\f06\x91\fd\xAE\xE5\xE0:"                                // "\v022\t045Зв\f06у\fdк:\t124\f06С\fdохр:"
+			   "\v041\t045\f06\x8C\fd\xE3\xA7.:\t124\x91\f06\xAE\fd\xE5\xE0:\v060\t045\f06\x87\fd\xA0\xA3\xE0:" // "\v041\t045\f06М\fdуз.:\t124С\f06о\fdхр:\v060\t045\f06З\fdагр:"
+			   "\t124\f06\x82\fd\xEB\xE5\xAE\xA4"                                                               // "\t124\f06В\fdыход"
+			   "\v080\t084\f06\x8F\fd\xAE\xAC\xAE\xE9\xEC %s\t137\x8C\xA0\xA3\xA0\t000\x1";                     // "\v080\t084\f06П\fdомощь %s\t137Мага\t000\x1";
 	}
 
 	const char *CONTROL_PANEL_BUTTONS() {
@@ -3059,71 +1771,40 @@ public:
 			   "\v079\t102Help\fd";
 	}
 
-	/*
-	"\f15âêë\f11"
-	*/
 	const char *ON() {
-		return "\f15\xA2\xAA\xAB\f11";
+		return "\f15\xA2\xAA\xAB\f11"; // "\f15вкл\f11"
 	}
 
-	/*
-	"\f32âûê\f11"
-	*/
 	const char *OFF() {
-		return "\f32\xA2\xEB\xAA\f11";
+		return "\f32\xA2\xEB\xAA\f11"; // "\f32вык\f11"
 	}
 
-	/*
-	"Âû óâåðåíû, ÷òî õîòèòå âûéòè?"
-	*/
 	const char *CONFIRM_QUIT() {
-		return "\x82\xEB \xE3\xA2\xA5\xE0\xA5\xAD\xEB, \xE7\xE2\xAE \xE5\xAE\xE2\xA8\xE2\xA5 \xA2\xEB\xA9\xE2\xA8?";
+		return "\x82\xEB \xE3\xA2\xA5\xE0\xA5\xAD\xEB, \xE7\xE2\xAE \xE5\xAE\xE2\xA8\xE2\xA5 \xA2\xEB\xA9\xE2\xA8?"; // "Вы уверены, что хотите выйти?"
 	}
 
-	/*
-	"Âû òî÷íî õîòèòå âîñïîëüçîâàòüñÿ ïîìîùüþ Ìð. Ìàãà?"
-	*/
 	const char *MR_WIZARD() {
-		return "\x82\xEB \xE2\xAE\xE7\xAD\xAE \xE5\xAE\xE2\xA8\xE2\xA5 \xA2\xAE\xE1\xAF\xAE\xAB\xEC\xA7\xAE\xA2\xA0\xE2\xEC\xE1\xEF \xAF\xAE\xAC\xAE\xE9\xEC\xEE \x8C\xE0. \x8C\xA0\xA3\xA0?";
+		return "\x82\xEB \xE2\xAE\xE7\xAD\xAE \xE5\xAE\xE2\xA8\xE2\xA5 \xA2\xAE\xE1\xAF\xAE\xAB\xEC\xA7\xAE\xA2\xA0\xE2\xEC\xE1\xEF \xAF\xAE\xAC\xAE\xE9\xEC\xEE \x8C\xE0. \x8C\xA0\xA3\xA0?"; // "Вы точно хотите воспользоваться помощью Мр. Мага?"
 	}
 
-	/*
-	"Íèêàêèõ çàãðóçîê âî âðåìÿ áèòâû!"
-	*/
 	const char *NO_LOADING_IN_COMBAT() {
-		return "\x8D\xA8\xAA\xA0\xAA\xA8\xE5 \xA7\xA0\xA3\xE0\xE3\xA7\xAE\xAA \xA2\xAE \xA2\xE0\xA5\xAC\xEF \xA1\xA8\xE2\xA2\xEB!";
+		return "\x8D\xA8\xAA\xA0\xAA\xA8\xE5 \xA7\xA0\xA3\xE0\xE3\xA7\xAE\xAA \xA2\xAE \xA2\xE0\xA5\xAC\xEF \xA1\xA8\xE2\xA2\xEB!"; // "Никаких загрузок во время битвы!"
 	}
 
-	/*
-	"Íèêàêèõ ñîõðàíåíèé âî âðåìÿ áèòâû!"
-	*/
 	const char *NO_SAVING_IN_COMBAT() {
-		return "\x8D\xA8\xAA\xA0\xAA\xA8\xE5 \xE1\xAE\xE5\xE0\xA0\xAD\xA5\xAD\xA8\xA9 \xA2\xAE \xA2\xE0\xA5\xAC\xEF \xA1\xA8\xE2\xA2\xEB!";
+		return "\x8D\xA8\xAA\xA0\xAA\xA8\xE5 \xE1\xAE\xE5\xE0\xA0\xAD\xA5\xAD\xA8\xA9 \xA2\xAE \xA2\xE0\xA5\xAC\xEF \xA1\xA8\xE2\xA2\xEB!"; // "Никаких сохранений во время битвы!"
 	}
 
-	/*
-	"\r\fd\x3""c\v000\t000Áûñòðîå äåéñòâèå\n\n"
-	"%s\x3""l\n\n"
-	"Òåêóùåå\x3""r\n"
-	"\t000%s\x2\x3""c\v122\t019\f37Ñ\f04ëåä\t055Âûõîä\x1";
-	*/
 	const char *QUICK_FIGHT_TEXT() {
-		return "\r\fd\x3"
-			   "c\v000\t000\x81\xEB\xE1\xE2\xE0\xAE\xA5 \xA4\xA5\xA9\xE1\xE2\xA2\xA8\xA5\n\n"
-			   "%s\x3"
-			   "l\n\n"
-			   "\x92\xA5\xAA\xE3\xE9\xA5\xA5\x3"
-			   "r\n"
-			   "\t000%s\x2\x3"
-			   "c\v122\t019\f37\x91\f04\xAB\xA5\xA4\t055\x82\xEB\xE5\xAE\xA4\x1";
+		return "\r\fd\x3""c\v000\t000\x81\xEB\xE1\xE2\xE0\xAE\xA5 \xA4\xA5\xA9\xE1\xE2\xA2\xA8\xA5\n\n" // "\r\fd\x3""c\v000\t000Быстрое действие\n\n"
+			   "%s\x3""l\n\n"																		    // "%s\x3""l\n\n"
+			   "\x92\xA5\xAA\xE3\xE9\xA5\xA5\x3""r\n"												    // "Текущее\x3""r\n"
+			   "\t000%s\x2\x3""c\v122\t019\f37\x91\f04\xAB\xA5\xA4\t055\x82\xEB\xE5\xAE\xA4\x1";	    // "\t000%s\x2\x3""c\v122\t019\f37С\f04лед\t055Выход\x1";
 	}
 
-	/*
-	"Àòàêà", "Çàêëèíàíèå", "Áëîê", "Áåãñòâî"
-	*/
 	const char **QUICK_FIGHT_OPTIONS() {
 		delete[] _quickFightOptions;
-		_quickFightOptions = new const char *[4] { "\x80\xE2\xA0\xAA\xA0", "\x87\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xA5", "\x81\xAB\xAE\xAA", "\x81\xA5\xA3\xE1\xE2\xA2\xAE" };
+		_quickFightOptions = new const char *[4] { "\x80\xE2\xA0\xAA\xA0", "\x87\xA0\xAA\xAB\xA8\xAD\xA0\xAD\xA8\xA5", "\x81\xAB\xAE\xAA", "\x81\xA5\xA3\xE1\xE2\xA2\xAE" }; // "Атака", "Заклинание", "Блок", "Бегство"
 		return _quickFightOptions;
 	}
 
@@ -3195,22 +1876,13 @@ public:
 		return _goober;
 	}
 
-	/*
-	"\v000\t000\x3""cÂûáåðèòå èãðîâîé ðåæèì"
-	*/
 	const char *DIFFICULTY_TEXT() {
-		return "\v000\t000\x3"
-			   "c\x82\xEB\xA1\xA5\xE0\xA8\xE2\xA5 \xA8\xA3\xE0\xAE\xA2\xAE\xA9 \xE0\xA5\xA6\xA8\xAC";
+		return "\v000\t000\x3""c\x82\xEB\xA1\xA5\xE0\xA8\xE2\xA5 \xA8\xA3\xE0\xAE\xA2\xAE\xA9 \xE0\xA5\xA6\xA8\xAC"; // "\v000\t000\x3""cВыберите игровой режим"
 	}
 
-	/*
-	"\x3""c\v002\t000Áîãè Âîññòàíîâëåíèÿ Èãð ñ÷èòàþò ýòî ìåñòî çàïðåòíûì!\n"
-	"Óâû, çäåñü íåëüçÿ ñîõðàíÿòüñÿ";
-	*/
 	const char *SAVE_OFF_LIMITS() {
-		return "\x3"
-			   "c\v002\t000\x81\xAE\xA3\xA8 \x82\xAE\xE1\xE1\xE2\xA0\xAD\xAE\xA2\xAB\xA5\xAD\xA8\xEF \x88\xA3\xE0 \xE1\xE7\xA8\xE2\xA0\xEE\xE2 \xED\xE2\xAE \xAC\xA5\xE1\xE2\xAE \xA7\xA0\xAF\xE0\xA5\xE2\xAD\xEB\xAC!\n"
-			   "\x93\xA2\xEB, \xA7\xA4\xA5\xE1\xEC \xAD\xA5\xAB\xEC\xA7\xEF \xE1\xAE\xE5\xE0\xA0\xAD\xEF\xE2\xEC\xE1\xEF";
+		return "\x3""c\v002\t000\x81\xAE\xA3\xA8 \x82\xAE\xE1\xE1\xE2\xA0\xAD\xAE\xA2\xAB\xA5\xAD\xA8\xEF \x88\xA3\xE0 \xE1\xE7\xA8\xE2\xA0\xEE\xE2 \xED\xE2\xAE \xAC\xA5\xE1\xE2\xAE \xA7\xA0\xAF\xE0\xA5\xE2\xAD\xEB\xAC!\n" // "\x3""c\v002\t000Боги Восстановления Игр считают это место запретным!\n"
+			   "\x93\xA2\xEB, \xA7\xA4\xA5\xE1\xEC \xAD\xA5\xAB\xEC\xA7\xEF \xE1\xAE\xE5\xE0\xA0\xAD\xEF\xE2\xEC\xE1\xEF";																									   // "Увы, здесь нельзя сохраняться";
 	}
 
 	const char *CLOUDS_INTRO1() {
@@ -3261,5 +1933,3 @@ public:
 			   "l\fd";
 	}
 };
-
-


Commit: d3624575a703617be9d2d9b82113a8492f61afe9
    https://github.com/scummvm/scummvm/commit/d3624575a703617be9d2d9b82113a8492f61afe9
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Working on gender and plural forms

Changed paths:
    devtools/create_xeen/constants.cpp
    devtools/create_xeen/constants.h
    devtools/create_xeen/en_constants.h
    devtools/create_xeen/ru_constants.h
    dists/engine-data/xeen.ccs
    engines/xeen/dialogs/dialogs_char_info.cpp
    engines/xeen/dialogs/dialogs_items.cpp
    engines/xeen/dialogs/dialogs_items.h
    engines/xeen/dialogs/dialogs_quick_ref.cpp
    engines/xeen/font.cpp
    engines/xeen/font.h
    engines/xeen/party.cpp
    engines/xeen/party.h
    engines/xeen/resources.cpp
    engines/xeen/resources.h


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index 59b6af13af..0d1e80a768 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -88,9 +88,12 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	file.syncStrings(SKILL_NAMES(), 18);
 	delete[] _skillNames;
 	_skillNames = NULL;
-	file.syncStrings(CONDITION_NAMES(), 17);
-	delete[] _conditionNames;
-	_conditionNames = NULL;
+	file.syncStrings(CONDITION_NAMES_M(), 17);
+	delete[] _conditionNamesM;
+	_conditionNamesM = NULL;
+	file.syncStrings(CONDITION_NAMES_F(), 17);
+	delete[] _conditionNamesF;
+	_conditionNamesF = NULL;
 	file.syncNumbers(CONDITION_COLORS, 17);
 	file.syncString(GOOD());
 	file.syncString(BLESSED());
@@ -176,7 +179,7 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	file.syncStrings(STAT_NAMES(), 16);
 	delete[] _statNames;
 	_statNames = NULL;
-	file.syncStrings(CONSUMABLE_NAMES(), 4);
+	file.syncStrings(CONSUMABLE_NAMES(), 6);
 	delete[] _consumableNames;
 	_consumableNames = NULL;
 	file.syncStrings(WHERE_NAMES(), 2);
@@ -334,7 +337,7 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	file.syncStrings(CATEGORY_BACKPACK_IS_FULL(), 4);
 	file.syncString(BUY_X_FOR_Y_GOLD());
 	file.syncString(SELL_X_FOR_Y_GOLD());
-	file.syncStrings(SELL_X_FOR_Y_GOLD_ENDINGS(), 2);
+	file.syncStrings(GOLDS(), 2);
 	delete[] _sellXForYGoldEndings;
 	_sellXForYGoldEndings = NULL;
 	file.syncString(NO_NEED_OF_THIS());
diff --git a/devtools/create_xeen/constants.h b/devtools/create_xeen/constants.h
index 2159b6c30f..7bfcc25195 100644
--- a/devtools/create_xeen/constants.h
+++ b/devtools/create_xeen/constants.h
@@ -118,7 +118,8 @@ protected:
 	const char **_alignmentNames = NULL;
 	const char **_skillNames = NULL;
 	const char **_classNames = NULL;
-	const char **_conditionNames = NULL;
+	const char **_conditionNamesM = NULL;
+	const char **_conditionNamesF = NULL;
 	const char **_depositWithdrawl = NULL;
 	const char **_statNames = NULL;
 	const char **_whereNames = NULL;
@@ -412,7 +413,8 @@ public:
 		1500, 2000, 2000, 1500, 2000, 1000, 1500, 1500, 1500, 2000
 	};
 
-	virtual const char **CONDITION_NAMES() = 0;
+	virtual const char **CONDITION_NAMES_M() = 0;
+	virtual const char **CONDITION_NAMES_F() = 0;
 
 	const int CONDITION_COLORS[17] = {
 		9, 9, 9, 9, 9, 9, 9, 9, 32, 32, 32, 32, 6, 6, 6, 6, 15
@@ -1075,7 +1077,7 @@ public:
 	virtual const char **CATEGORY_BACKPACK_IS_FULL() = 0;
 	virtual const char  *BUY_X_FOR_Y_GOLD() = 0;
 	virtual const char  *SELL_X_FOR_Y_GOLD() = 0;
-	virtual const char **SELL_X_FOR_Y_GOLD_ENDINGS() = 0;
+	virtual const char **GOLDS() = 0;
 	virtual const char  *NO_NEED_OF_THIS() = 0;
 	virtual const char  *NOT_RECHARGABLE() = 0;
 	virtual const char  *NOT_ENCHANTABLE() = 0;
diff --git a/devtools/create_xeen/en_constants.h b/devtools/create_xeen/en_constants.h
index 469d81b60e..e4ac9a7688 100644
--- a/devtools/create_xeen/en_constants.h
+++ b/devtools/create_xeen/en_constants.h
@@ -263,14 +263,24 @@ public:
 		return _classNames;
 	}
 
-	const char **CONDITION_NAMES() {
-		delete[] _conditionNames;
-		_conditionNames = new const char *[17] {
+	const char **CONDITION_NAMES_M() {
+		delete[] _conditionNamesM;
+		_conditionNamesM = new const char *[17] {
 			"Cursed", "Heart Broken", "Weak", "Poisoned", "Diseased",
 				"Insane", "In Love", "Drunk", "Asleep", "Depressed", "Confused",
 				"Paralyzed", "Unconscious", "Dead", "Stone", "Eradicated", "Good"
 		};
-		return _conditionNames;
+		return _conditionNamesM;
+	}
+
+	const char **CONDITION_NAMES_F() {
+		delete[] _conditionNamesF;
+		_conditionNamesF = new const char *[17] {
+			"Cursed", "Heart Broken", "Weak", "Poisoned", "Diseased",
+				"Insane", "In Love", "Drunk", "Asleep", "Depressed", "Confused",
+				"Paralyzed", "Unconscious", "Dead", "Stone", "Eradicated", "Good"
+		};
+		return _conditionNamesF;
 	}
 
 	const char *GOOD() {
@@ -551,7 +561,7 @@ public:
 
 	const char **CONSUMABLE_NAMES() {
 		delete[] _consumableNames;
-		_consumableNames = new const char *[4] { "Gold", "Gems", "Food", "Condition" };
+		_consumableNames = new const char *[6] { "Gold", "Gems", "Food", "Condition", "", "" };
 		return _consumableNames;
 	}
 
@@ -1282,16 +1292,16 @@ public:
 	}
 
 	const char *BUY_X_FOR_Y_GOLD() {
-		return "\x3l\v000\t000\fdBuy %s\fd for %u gold?";
+		return "\x3l\v000\t000\fdBuy %s\fd for %u %s?";
 	}
 
 	const char *SELL_X_FOR_Y_GOLD() {
-		return "\x3l\v000\t000\fdSell %s\fd for %u gold?";
+		return "\x3l\v000\t000\fdSell %s\fd for %u %s?";
 	}
 
-	const char **SELL_X_FOR_Y_GOLD_ENDINGS() {
+	const char **GOLDS() {
 		delete[] _sellXForYGoldEndings;
-		_sellXForYGoldEndings = new const char *[2] { "", "" };
+		_sellXForYGoldEndings = new const char *[2] { "gold", "" };
 		return _sellXForYGoldEndings;
 	}
 
diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index 8526c737ff..468b1e9c2f 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -333,16 +333,16 @@ public:
 		return _classNames;
 	}
 
-	const char **CONDITION_NAMES() {
-		delete[] _conditionNames;
-		_conditionNames = new const char *[17] {
+	const char **CONDITION_NAMES_M() {
+		delete[] _conditionNamesM;
+		_conditionNamesM = new const char *[17] {
 			"\x8F\xE0\xAE\xAA\xAB\xEF\xE2\xA8\xA5",		// "Проклятие",
 			"Heart Broken",                             // "Heart Broken",
 			"\x91\xAB\xA0\xA1\xAE\xE1\xE2\xEC",         // "Слабость",
 			"\x8E\xE2\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xA5", // "Отравление",
 			"\x81\xAE\xAB\xA5\xA7\xAD\xEC",             // "Болезнь",
 			"\x81\xA5\xA7\xE3\xAC\xA8\xA5",             // "Безумие",
-			"\x82\xAB\xEE\xA1\xAB\xF1\xAD(-\xA0)",      // "Влюблён(-а)",
+			"\x82\xAB\xEE\xA1\xAB\xF1\xAD",             // "Влюблён",
 			"\x8D\xA0\xA2\xA5\xE1\xA5\xAB\xA5",         // "Навеселе",
 			"\x91\xAE\xAD",                             // "Сон",
 			"\x82 \xE3\xAD\xEB\xAD\xA8\xA8",            // "В унынии",
@@ -354,7 +354,31 @@ public:
 			"\x93\xAD\xA8\xE7\xE2\xAE\xA6\xA5\xAD",     // "Уничтожен",
 			"\x95\xAE\xE0\xAE\xE8\xA5\xA5"              // "Хорошее"
 		};
-		return _conditionNames;
+		return _conditionNamesM;
+	}
+
+	const char **CONDITION_NAMES_F() {
+		delete[] _conditionNamesF;
+		_conditionNamesF = new const char *[17] {
+			"\x8F\xE0\xAE\xAA\xAB\xEF\xE2\xA8\xA5",         // "Проклятие",
+				"Heart Broken",                             // "Heart Broken",
+				"\x91\xAB\xA0\xA1\xAE\xE1\xE2\xEC",         // "Слабость",
+				"\x8E\xE2\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xA5", // "Отравление",
+				"\x81\xAE\xAB\xA5\xA7\xAD\xEC",             // "Болезнь",
+				"\x81\xA5\xA7\xE3\xAC\xA8\xA5",             // "Безумие",
+				"\x82\xAB\xEE\xA1\xAB\xF1\xAD\xA0",         // "Влюблёна",
+				"\x8D\xA0\xA2\xA5\xE1\xA5\xAB\xA5",         // "Навеселе",
+				"\x91\xAE\xAD",                             // "Сон",
+				"\x82 \xE3\xAD\xEB\xAD\xA8\xA8",            // "В унынии",
+				"\x82 \xE1\xAC\xEF\xE2\xA5\xAD\xA8\xA8",    // "В смятении",
+				"\x8F\xA0\xE0\xA0\xAB\xA8\xE7",             // "Паралич",
+				"\x81.\xE1\xAE\xA7\xAD\xA0\xAD\xA8\xEF",    // "Б.сознания",
+				"\x8C\xA5\xE0\xE2\xA2\xA0",                 // "Мертва",
+				"\x8A\xA0\xAC\xA5\xAD\xEC",                 // "Камень",
+				"\x93\xAD\xA8\xE7\xE2\xAE\xA6\xA5\xAD\xA0", // "Уничтожена",
+				"\x95\xAE\xE0\xAE\xE8\xA5\xA5"              // "Хорошее"
+		};
+		return _conditionNamesF;
 	}
 
 	const char *GOOD() {
@@ -604,7 +628,7 @@ public:
 
 	const char **CONSUMABLE_NAMES() {
 		delete[] _consumableNames;
-		_consumableNames = new const char *[4] { "\x87\xAE\xAB\xAE\xE2\xAE", "\x80\xAB\xAC\xA0\xA7\xEB", "\x8F\xA8\xE9\xA0", "\x91\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA5" }; // "Золото", "Алмазы", "Пища", "Состояние"
+		_consumableNames = new const char *[6] { "\x87\xAE\xAB\xAE\xE2\xAE", "\x80\xAB\xAC\xA0\xA7\xEB", "\x8F\xA8\xE9\xA0", "\x91\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA5", "\x87\xAE\xAB\xAE\xE2\xA0", "\x80\xAB\xAC\xA0\xA7\xAE\xA2" }; // "Золото", "Алмазы", "Пища", "Состояние", "Золота", "Алмазов"
 		return _consumableNames;
 	}
 
@@ -1330,16 +1354,16 @@ public:
 	}
 
 	const char *BUY_X_FOR_Y_GOLD() {
-		return "\x3""l\v000\t000\fd\x8A\xE3\xAF\xA8\xE2\xEC %s\fd \xA7\xA0 %lu \xA7\xAE\xAB\xAE\xE2%s?"; // "\x3""l\v000\t000\fdКупить %s\fd за %lu золот%s?"
+		return "\x3""l\v000\t000\fd\x8A\xE3\xAF\xA8\xE2\xEC %s\fd\n\xA7\xA0 %lu %s?"; // "\x3""l\v000\t000\fdКупить %s\fd\nза %lu %s?"
 	}
 
 	const char *SELL_X_FOR_Y_GOLD() {
-		return "\x3""l\v000\t000\fd\x8F\xE0\xAE\xA4\xA0\xE2\xEC %s\fd \xA7\xA0 %lu \xA7\xAE\xAB\xAE\xE2%s?"; // "\x3""l\v000\t000\fdПродать %s\fd за %lu золот%s?"
+		return "\x3""l\v000\t000\fd\x8F\xE0\xAE\xA4\xA0\xE2\xEC %s\fd\n\xA7\xA0 %lu %s?"; // "\x3""l\v000\t000\fdПродать %s\fd\nза %lu %s?"
 	}
 
-	const char **SELL_X_FOR_Y_GOLD_ENDINGS() {
+	const char **GOLDS() {
 		delete[] _sellXForYGoldEndings;
-		_sellXForYGoldEndings = new const char *[2] { "\xAE\xA9", "\xEB\xE5" }; // "ой", "ых"
+		_sellXForYGoldEndings = new const char *[2] { "\xA7\xAE\xAB\xAE\xE2\xAE\xA9", "\xA7\xAE\xAB\xAE\xE2\xEB\xE5" }; // "золотой", "золотых"
 		return _sellXForYGoldEndings;
 	}
 
@@ -1756,19 +1780,18 @@ public:
 
 	const char *CONTROL_PANEL_TEXT() {
 		return "\x1\f00\x3""c\v000\t000\x8F\xA0\xAD\xA5\xAB\xEC \xE3\xAF\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xEF\x3""r" // "\x1\f00\x3""c\v000\t000Панель управления\x3""r"
-			   "\v022\t045\x87\xA2\f06\xE3\fd\xAA:\t124\f06\x91\fd\xAE\xE5\xE0:"                                // "\v022\t045Зв\f06у\fdк:\t124\f06С\fdохр:"
-			   "\v041\t045\f06\x8C\fd\xE3\xA7.:\t124\x91\f06\xAE\fd\xE5\xE0:\v060\t045\f06\x87\fd\xA0\xA3\xE0:" // "\v041\t045\f06М\fdуз.:\t124С\f06о\fdхр:\v060\t045\f06З\fdагр:"
-			   "\t124\f06\x82\fd\xEB\xE5\xAE\xA4"                                                               // "\t124\f06В\fdыход"
+			   "\v022\t045\f06\x87\fd\xA0\xA3\xE0:\t124\x87\xA2\f06\xE3\fd\xAA:"                                // "\v022\t045\f06З\fdагр:\t124Зв\f06у\fdк:"
+			   "\v041\t045\f06\x91\fd\xAE\xE5\xE0:\t124\f06\x8C\fd\xE3\xA7.:"									// "\v041\t045\f06С\fdохр:\t124М\fdуз.:
+			   "\v060\t045\f06\x82\fd\xEB\xE5\xAE\xA4"                                                          // "\v060\t045\f06В\fdыход"
 			   "\v080\t084\f06\x8F\fd\xAE\xAC\xAE\xE9\xEC %s\t137\x8C\xA0\xA3\xA0\t000\x1";                     // "\v080\t084\f06П\fdомощь %s\t137Мага\t000\x1";
 	}
 
 	const char *CONTROL_PANEL_BUTTONS() {
-		return "\x3"
-			   "c\f11"
-			   "\v022\t062load\t141%s"
-			   "\v041\t062save\t141%s"
-			   "\v060\t062exit"
-			   "\v079\t102Help\fd";
+		return "\x3""c\f11"			               // "\x3""c\f11"
+			   "\v022\t062\xA8\xA3\xE0\xE3\t141%s" // "\v022\t062игру\t141%s"
+			   "\v041\t062\xA8\xA3\xE0\xE3\t141%s" // "\v041\t062игру\t141%s"
+			   "\v060\t062DOS"                     // "\v060\t062DOS"
+			   "\v079\t102\x8C\xE0.\fd";           // "\v079\t102Мр.\fd";
 	}
 
 	const char *ON() {
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index 7f7dc12d25..b72c8061ce 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/dialogs/dialogs_char_info.cpp b/engines/xeen/dialogs/dialogs_char_info.cpp
index 7d83106598..24fa595d39 100644
--- a/engines/xeen/dialogs/dialogs_char_info.cpp
+++ b/engines/xeen/dialogs/dialogs_char_info.cpp
@@ -309,6 +309,7 @@ Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
 		c._poisonResistence._permanent + c.itemScan(14) + c._poisonResistence._temporary +
 		c._energyResistence._permanent + c.itemScan(15) + c._energyResistence._temporary +
 		c._magicResistence._permanent + c.itemScan(16) + c._magicResistence._temporary;
+	const char **_tmpConditions = c._sex == FEMALE ? (const char **)Res.CONDITION_NAMES_F : (const char **)Res.CONDITION_NAMES_M;
 
 	return Common::String::format(Res.CHARACTER_DETAILS,
 		Res.PARTY_GOLD, c._name.c_str(), Res.SEX_NAMES[c._sex],
@@ -333,7 +334,7 @@ Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
 		c.statColor(c.getStat(SPEED), c.getStat(SPEED, true)), c.getStat(SPEED),
 		c.statColor(c.getArmorClass(), c.getArmorClass(true)), c.getArmorClass(),
 		c.getNumAwards(),
-		Res.CONDITION_COLORS[condition], Res.CONDITION_NAMES[condition],
+		Res.CONDITION_COLORS[condition], _tmpConditions[condition],
 		condition == NO_CONDITION && party._blessed ? Res.PLUS_14 : "",
 		condition == NO_CONDITION && party._powerShield ? Res.PLUS_14 : "",
 		condition == NO_CONDITION && party._holyBonus ? Res.PLUS_14 : "",
@@ -526,15 +527,16 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 	case 19: {
 		// Conditions
 		Common::String lines[20];
+		const char **_tmpConditions = c._sex == FEMALE ? (const char **)Res.CONDITION_NAMES_F : (const char **)Res.CONDITION_NAMES_M;
 		int total = 0;
 		for (int condition = CURSED; condition <= ERADICATED; ++condition) {
 			if (c._conditions[condition]) {
 				if (condition >= UNCONSCIOUS) {
 					lines[condition] = Common::String::format("\n\t020%s",
-						Res.CONDITION_NAMES[condition]);
+					_tmpConditions[condition]);
 				} else {
 					lines[condition] = Common::String::format("\n\t020%s\t095-%d",
-						Res.CONDITION_NAMES[condition], c._conditions[condition]);
+					_tmpConditions[condition], c._conditions[condition]);
 				}
 
 				++total;
diff --git a/engines/xeen/dialogs/dialogs_items.cpp b/engines/xeen/dialogs/dialogs_items.cpp
index 454af251be..02cf8f311d 100644
--- a/engines/xeen/dialogs/dialogs_items.cpp
+++ b/engines/xeen/dialogs/dialogs_items.cpp
@@ -752,6 +752,12 @@ int ItemsDialog::calcItemCost(Character *c, int itemIndex, ItemsMode mode,
 	return (mode == ITEMMODE_CHAR_INFO) ? 0 : result;
 }
 
+Common::String ItemsDialog::getGoldPlurals(int cost) {
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language")))
+		return Res.GOLDS[cost % 10 == 1 ? 0 : 1];
+	return Res.GOLDS[0];
+}
+
 int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, ItemCategory category,
 		ItemsMode mode) {
 	Combat &combat = *_vm->_combat;
@@ -849,7 +855,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 				int cost = calcItemCost(&c, itemIndex, mode, 0, category);
 				Common::String desc = c._items[category].getFullDescription(itemIndex);
 				if (Confirm::show(_vm, Common::String::format(Res.BUY_X_FOR_Y_GOLD,
-						desc.c_str(), cost))) {
+						desc.c_str(), cost, getGoldPlurals(cost).c_str()))) {
 					if (party.subtract(CONS_GOLD, cost, WHERE_PARTY, WT_FREEZE_WAIT)) {
 						if (ccNum) {
 							sound.stopSound();
@@ -889,9 +895,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 				int cost = calcItemCost(&c, itemIndex, mode, c._skills[MERCHANT], category);
 				Common::String desc = c._items[category].getFullDescription(itemIndex);
 				Common::String msg = Common::String::format(Res.SELL_X_FOR_Y_GOLD,
-					desc.c_str(), cost);
-				if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) 
-					msg += Res.RU_SELL_X_FOR_Y_GOLD_ENDINGS[cost % 10 == 1 ? 0 : 1];
+					desc.c_str(), cost, getGoldPlurals(cost).c_str());
 
 				if (Confirm::show(_vm, msg)) {
 					// Remove the sold item and add gold to the party's total
diff --git a/engines/xeen/dialogs/dialogs_items.h b/engines/xeen/dialogs/dialogs_items.h
index d3632dc8dc..ce9d258ad5 100644
--- a/engines/xeen/dialogs/dialogs_items.h
+++ b/engines/xeen/dialogs/dialogs_items.h
@@ -64,6 +64,11 @@ private:
 	int calcItemCost(Character *c, int itemIndex, ItemsMode mode, int skillLevel,
 		ItemCategory category);
 
+	/**
+	 * Get plural gold form
+	*/
+	Common::String getGoldPlurals(int val);
+
 	int doItemOptions(Character &c, int actionIndex, int itemIndex,
 		ItemCategory category, ItemsMode mode);
 
diff --git a/engines/xeen/dialogs/dialogs_quick_ref.cpp b/engines/xeen/dialogs/dialogs_quick_ref.cpp
index 7f453d9df8..329f74f3aa 100644
--- a/engines/xeen/dialogs/dialogs_quick_ref.cpp
+++ b/engines/xeen/dialogs/dialogs_quick_ref.cpp
@@ -40,11 +40,11 @@ void QuickReferenceDialog::execute() {
 	Common::String lines[8];
 
 	events.setCursor(0);
-
 	for (uint idx = 0; idx < (combat._globalCombat == 2 ? combat._combatParty.size() :
 			party._activeParty.size()); ++idx) {
 		Character &c = combat._globalCombat == 2 ? *combat._combatParty[idx] :
 			party._activeParty[idx];
+		const char **_tmpConditions = c._sex == FEMALE ? (const char **)Res.CONDITION_NAMES_F : (const char **)Res.CONDITION_NAMES_M;
 		Condition condition = c.worstCondition();
 		lines[idx] = Common::String::format(Res.QUICK_REF_LINE,
 			idx * 10 + 24, idx + 1, c._name.c_str(),
@@ -54,8 +54,8 @@ void QuickReferenceDialog::execute() {
 			c.statColor(c._currentSp, c.getMaxSP()), c._currentSp,
 			c.statColor(c.getArmorClass(), c.getArmorClass(true)), c.getArmorClass(),
 			Res.CONDITION_COLORS[condition],
-			Res.CONDITION_NAMES[condition][0], Res.CONDITION_NAMES[condition][1],
-			Res.CONDITION_NAMES[condition][2], Res.CONDITION_NAMES[condition][3]
+			_tmpConditions[condition][0], _tmpConditions[condition][1],
+			_tmpConditions[condition][2], _tmpConditions[condition][3]
 		);
 	}
 
diff --git a/engines/xeen/font.cpp b/engines/xeen/font.cpp
index 676904b2d5..b155322b8b 100644
--- a/engines/xeen/font.cpp
+++ b/engines/xeen/font.cpp
@@ -96,6 +96,12 @@ void FontSurface::writeSymbol(int symbolId) {
 	_writePos.x += 8;
 }
 
+bool FontSurface::isSpace(char c) {
+	if (Common::RU_RUS == lang) 
+		return c == ' ';
+	return (c & 0x7f) == ' ';
+}
+
 const char *FontSurface::writeString(const Common::String &s, const Common::Rect &bounds) {
 	_displayString = s.c_str();
 	assert(_fontData);
@@ -123,7 +129,7 @@ const char *FontSurface::writeString(const Common::String &s, const Common::Rect
 			// First, move backwards to find the end of the previous word
 			// for a convenient point to break the line at
 			const char *endP = displayEnd;
-			while (endP > _displayString && (*endP & 0x7f) != ' ')
+			while (endP > _displayString && !isSpace(*endP))
 				--endP;
 
 			if (endP == _displayString) {
@@ -138,7 +144,7 @@ const char *FontSurface::writeString(const Common::String &s, const Common::Rect
 				}
 			} else {
 				// Found word break, find end of previous word
-				while (endP > _displayString && (*endP & 0x7f) == ' ')
+				while (endP > _displayString && !isSpace(*endP))
 					--endP;
 
 				displayEnd = endP;
@@ -328,7 +334,9 @@ bool FontSurface::getNextCharWidth(int &total) {
 			getNextChar();
 		return false;
 	} else if (Common::RU_RUS == lang && c < 0) {
-		total += _fontData[(_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (int)(0x80 + c)];
+		int iii = (_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (char)(0x80 + c);
+		//int iii = _fontData[(_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (int)(0x80 + c)];
+		total += _fontData[(_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (char)(0x80 + c)];
 		return false;
 	} else {
 		--_displayString;
@@ -338,7 +346,7 @@ bool FontSurface::getNextCharWidth(int &total) {
 
 bool FontSurface::newLine(const Common::Rect &bounds) {
 	// Move past any spaces currently being pointed to
-	while ((*_displayString & 0x7f) == ' ')
+	while (isSpace(*_displayString))
 		++_displayString;
 
 	_msgWraps = false;
diff --git a/engines/xeen/font.h b/engines/xeen/font.h
index bc84e09c64..5315e84507 100644
--- a/engines/xeen/font.h
+++ b/engines/xeen/font.h
@@ -112,7 +112,7 @@ public:
 	 *		justification is set, the message will be written at _writePos
 	 */
 	const char *writeString(const Common::String &s, const Common::Rect &clipRect);
-
+	bool isSpace(char c);
 	/**
 	 * Write a charcter to the window
 	 * @param c			Character
diff --git a/engines/xeen/party.cpp b/engines/xeen/party.cpp
index 69b0ed7745..645100a55a 100644
--- a/engines/xeen/party.cpp
+++ b/engines/xeen/party.cpp
@@ -661,10 +661,19 @@ int Party::subtract(ConsumableType consumableId, uint amount, PartyBank whereId,
 	return true;
 }
 
+int Party::getConsumableForm(ConsumableType consumableId) {
+	switch (consumableId) {
+	case CONS_GOLD: return 4;
+	case CONS_GEMS: return 5;
+	}
+	return consumableId;
+}
+
 void Party::notEnough(ConsumableType consumableId, PartyBank whereId, bool mode, MessageWaitType wait) {
+	int _tmpConsumableId = getConsumableForm(consumableId);
 	Common::String msg = Common::String::format(
 		mode ? Res.NO_X_IN_THE_Y : Res.NOT_ENOUGH_X_IN_THE_Y,
-		Res.CONSUMABLE_NAMES[consumableId], Res.WHERE_NAMES[whereId]);
+		Res.CONSUMABLE_NAMES[_tmpConsumableId], Res.WHERE_NAMES[whereId]);
 	ErrorScroll::show(_vm, msg, wait);
 }
 
diff --git a/engines/xeen/party.h b/engines/xeen/party.h
index 2cecd93c6c..c0a3be5ef7 100644
--- a/engines/xeen/party.h
+++ b/engines/xeen/party.h
@@ -269,6 +269,8 @@ public:
 
 	int subtract(ConsumableType consumableId, uint amount, PartyBank whereId, MessageWaitType wait = WT_FREEZE_WAIT);
 
+	int getConsumableForm(ConsumableType consumableId);
+
 	void notEnough(ConsumableType consumableId, PartyBank whereId, bool mode, MessageWaitType wait);
 
 	void checkPartyDead();
diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp
index fc500ad1ce..03a308d454 100644
--- a/engines/xeen/resources.cpp
+++ b/engines/xeen/resources.cpp
@@ -94,7 +94,8 @@ void Resources::loadData() {
 	file.syncStrings(ALIGNMENT_NAMES, 3);
 	file.syncStrings(SEX_NAMES, 2);
 	file.syncStrings(SKILL_NAMES, 18);
-	file.syncStrings(CONDITION_NAMES, 17);
+	file.syncStrings(CONDITION_NAMES_M, 17);
+	file.syncStrings(CONDITION_NAMES_F, 17);
 	file.syncNumbers(CONDITION_COLORS, 17);
 	file.syncString(GOOD);
 	file.syncString(BLESSED);
@@ -176,7 +177,7 @@ void Resources::loadData() {
 	file.syncString(NOT_ENOUGH_X_IN_THE_Y);
 	file.syncString(NO_X_IN_THE_Y);
 	file.syncStrings(STAT_NAMES, 16);
-	file.syncStrings(CONSUMABLE_NAMES, 4);
+	file.syncStrings(CONSUMABLE_NAMES, 6);
 	file.syncStrings(WHERE_NAMES, 2);
 	file.syncString(AMOUNT);
 	file.syncString(FOOD_PACKS_FULL);
@@ -300,7 +301,7 @@ void Resources::loadData() {
 	file.syncStrings(CATEGORY_BACKPACK_IS_FULL, 4);
 	file.syncString(BUY_X_FOR_Y_GOLD);
 	file.syncString(SELL_X_FOR_Y_GOLD);
-	file.syncStrings(RU_SELL_X_FOR_Y_GOLD_ENDINGS, 2);
+	file.syncStrings(GOLDS, 2);
 	file.syncString(NO_NEED_OF_THIS);
 	file.syncString(NOT_RECHARGABLE);
 	file.syncString(SPELL_FAILED);
diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h
index 6d4beffbfb..02e5f2dd39 100644
--- a/engines/xeen/resources.h
+++ b/engines/xeen/resources.h
@@ -147,7 +147,8 @@ public:
 	const char *ALIGNMENT_NAMES[3];
 	const char *SEX_NAMES[2];
 	const char *SKILL_NAMES[18];
-	const char *CONDITION_NAMES[17];
+	const char *CONDITION_NAMES_M[17];
+	const char *CONDITION_NAMES_F[17];
 	int CONDITION_COLORS[17];
 	const char *GOOD;
 	const char *BLESSED;
@@ -229,7 +230,7 @@ public:
 	const char *NOT_ENOUGH_X_IN_THE_Y;
 	const char *NO_X_IN_THE_Y;
 	const char *STAT_NAMES[16];
-	const char *CONSUMABLE_NAMES[4];
+	const char *CONSUMABLE_NAMES[6];
 	const char *WHERE_NAMES[2];
 	const char *AMOUNT;
 	const char *FOOD_PACKS_FULL;
@@ -353,7 +354,7 @@ public:
 	const char *CATEGORY_BACKPACK_IS_FULL[4];
 	const char *BUY_X_FOR_Y_GOLD;
 	const char *SELL_X_FOR_Y_GOLD;
-	const char *RU_SELL_X_FOR_Y_GOLD_ENDINGS[2];
+	const char *GOLDS[2];
 	const char *NO_NEED_OF_THIS;
 	const char *NOT_RECHARGABLE;
 	const char *SPELL_FAILED;


Commit: 325eb338fed89c3172579b3fdfdac42bdac00f26
    https://github.com/scummvm/scummvm/commit/325eb338fed89c3172579b3fdfdac42bdac00f26
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Further sharpening
Added 'Born' gender form and plural form for food

Changed paths:
    devtools/create_xeen/constants.cpp
    devtools/create_xeen/constants.h
    devtools/create_xeen/en_constants.h
    devtools/create_xeen/ru_constants.h
    dists/engine-data/xeen.ccs
    engines/xeen/dialogs/dialogs_char_info.cpp
    engines/xeen/dialogs/dialogs_char_info.h
    engines/xeen/dialogs/dialogs_items.cpp
    engines/xeen/dialogs/dialogs_items.h
    engines/xeen/party.cpp
    engines/xeen/party.h
    engines/xeen/resources.cpp
    engines/xeen/resources.h


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index 0d1e80a768..14cc5007eb 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -179,9 +179,15 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	file.syncStrings(STAT_NAMES(), 16);
 	delete[] _statNames;
 	_statNames = NULL;
-	file.syncStrings(CONSUMABLE_NAMES(), 6);
+	file.syncStrings(CONSUMABLE_NAMES(), 4);
 	delete[] _consumableNames;
 	_consumableNames = NULL;
+	file.syncStrings(CONSUMABLE_GOLD_FORMS(), 1);
+	delete[] _consumableGoldForms;
+	_consumableGoldForms = NULL;
+	file.syncStrings(CONSUMABLE_GEM_FORMS(), 1);
+	delete[] _consumableGemForms;
+	_consumableGemForms = NULL;
 	file.syncStrings(WHERE_NAMES(), 2);
 	delete[] _whereNames;
 	_whereNames = NULL;
@@ -233,6 +239,9 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	file.syncStrings(RATING_TEXT(), 24);
 	delete[] _ratingText;
 	_ratingText = NULL;
+	file.syncStrings(BORN(), 2);
+	delete[] _born;
+	_born = NULL;
 	file.syncString(AGE_TEXT());
 	file.syncString(LEVEL_TEXT());
 	file.syncString(RESISTENCES_TEXT());
@@ -240,6 +249,9 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	file.syncString(EXPERIENCE_TEXT());
 	file.syncString(ELIGIBLE());
 	file.syncString(IN_PARTY_IN_BANK());
+	file.syncStrings(FOOD_ON_HAND(), 3);
+	delete[] _onHand;
+	_onHand = NULL;
 	file.syncString(FOOD_TEXT());
 	file.syncString(EXCHANGE_WITH_WHOM());
 	file.syncString(QUICK_REF_LINE());
@@ -408,6 +420,9 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	file.syncString(BACKPACKS_FULL_PRESS_KEY());
 	file.syncString(HIT_A_KEY());
 	file.syncString(GIVE_TREASURE_FORMATTING());
+	file.syncStrings(FOUND(), 2);
+	delete[] _found;
+	_found = NULL;
 	file.syncString(X_FOUND_Y());
 	file.syncString(ON_WHO());
 	file.syncString(WHICH_ELEMENT1());
@@ -433,7 +448,13 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	file.syncString(WARZONE_LEVEL());
 	file.syncString(WARZONE_HOW_MANY());
 	file.syncString(PICKS_THE_LOCK());
+	file.syncStrings(PICK_FORM(), 2);
+	delete[] _pickForm;
+	_pickForm = NULL;
 	file.syncString(UNABLE_TO_PICK_LOCK());
+	file.syncStrings(UNABLE_TO_PICK_FORM(), 2);
+	delete[] _unableToPickForm;
+	_unableToPickForm = NULL;
 	file.syncString(CONTROL_PANEL_TEXT());
 	file.syncString(CONTROL_PANEL_BUTTONS());
 	file.syncString(ON());
diff --git a/devtools/create_xeen/constants.h b/devtools/create_xeen/constants.h
index 7bfcc25195..8997555d1e 100644
--- a/devtools/create_xeen/constants.h
+++ b/devtools/create_xeen/constants.h
@@ -124,6 +124,8 @@ protected:
 	const char **_statNames = NULL;
 	const char **_whereNames = NULL;
 	const char **_consumableNames = NULL;
+	const char **_consumableGoldForms = NULL;
+	const char **_consumableGemForms = NULL;
 	const char **_weekDayStrings = NULL;
 	const char **_ratingText = NULL;
 	const char **_bonusNames = NULL;
@@ -144,11 +146,16 @@ protected:
 	const char **_removeDelete = NULL;
 	const char **_spellCastComponents = NULL;
 	const char **_monsterSpecialAttacks = NULL;
+	const char **_pickForm = NULL;
+	const char **_unableToPickForm = NULL;
 	const char **_quickFightOptions = NULL;
 	const char **_goober = NULL;
 	const char **_worldEndText = NULL;
 	const char **_days = NULL;
 	const char **_sellXForYGoldEndings = NULL;
+	const char **_found = NULL;
+	const char **_born = NULL;
+	const char **_onHand = NULL;
 
 public:
 	virtual const char  *CLOUDS_CREDITS() = 0;
@@ -840,6 +847,8 @@ public:
 	virtual const char  *NO_X_IN_THE_Y() = 0;
 	virtual const char **STAT_NAMES() = 0;
 	virtual const char **CONSUMABLE_NAMES() = 0;
+	virtual const char **CONSUMABLE_GOLD_FORMS() = 0;
+	virtual const char **CONSUMABLE_GEM_FORMS() = 0;
 	virtual const char **WHERE_NAMES() = 0;
 	virtual const char  *AMOUNT() = 0;
 	virtual const char  *FOOD_PACKS_FULL() = 0;
@@ -965,6 +974,7 @@ public:
 	virtual const char  *CURRENT_MAXIMUM_RATING_TEXT() = 0;
 	virtual const char  *CURRENT_MAXIMUM_TEXT() = 0;
 	virtual const char **RATING_TEXT() = 0;
+	virtual const char **BORN() = 0;
 	virtual const char  *AGE_TEXT() = 0;
 	virtual const char  *LEVEL_TEXT() = 0;
 	virtual const char  *RESISTENCES_TEXT() = 0;
@@ -972,6 +982,7 @@ public:
 	virtual const char  *EXPERIENCE_TEXT() = 0;
 	virtual const char  *ELIGIBLE() = 0;
 	virtual const char  *IN_PARTY_IN_BANK() = 0;
+	virtual const char **FOOD_ON_HAND() = 0;
 	virtual const char  *FOOD_TEXT() = 0;
 	virtual const char  *EXCHANGE_WITH_WHOM() = 0;
 	virtual const char  *QUICK_REF_LINE() = 0;
@@ -1154,6 +1165,7 @@ public:
 	virtual const char  *BACKPACKS_FULL_PRESS_KEY() = 0;
 	virtual const char  *HIT_A_KEY() = 0;
 	virtual const char  *GIVE_TREASURE_FORMATTING() = 0;
+	virtual const char **FOUND() = 0;
 	virtual const char  *X_FOUND_Y() = 0;
 	virtual const char  *ON_WHO() = 0;
 	virtual const char  *WHICH_ELEMENT1() = 0;
@@ -1185,7 +1197,9 @@ public:
 	virtual const char  *WARZONE_LEVEL() = 0;
 	virtual const char  *WARZONE_HOW_MANY() = 0;
 	virtual const char  *PICKS_THE_LOCK() = 0;
+	virtual const char **PICK_FORM() = 0;
 	virtual const char  *UNABLE_TO_PICK_LOCK() = 0;
+	virtual const char **UNABLE_TO_PICK_FORM() = 0;
 	virtual const char  *CONTROL_PANEL_TEXT() = 0;
 	virtual const char  *CONTROL_PANEL_BUTTONS() = 0;
 	virtual const char  *ON() = 0;
diff --git a/devtools/create_xeen/en_constants.h b/devtools/create_xeen/en_constants.h
index e4ac9a7688..867d306aaa 100644
--- a/devtools/create_xeen/en_constants.h
+++ b/devtools/create_xeen/en_constants.h
@@ -561,10 +561,22 @@ public:
 
 	const char **CONSUMABLE_NAMES() {
 		delete[] _consumableNames;
-		_consumableNames = new const char *[6] { "Gold", "Gems", "Food", "Condition", "", "" };
+		_consumableNames = new const char *[4] { "Gold", "Gems", "Food", "Condition" };
 		return _consumableNames;
 	}
 
+	const char **CONSUMABLE_GOLD_FORMS() {
+		delete[] _consumableGoldForms;
+		_consumableGoldForms = new const char *[1] { "" };
+		return _consumableGoldForms;
+	}
+
+	const char **CONSUMABLE_GEM_FORMS() {
+		delete[] _consumableGemForms;
+		_consumableGemForms = new const char *[1] { "" };
+		return _consumableGemForms;
+	}
+
 	const char **WHERE_NAMES() {
 		delete[] _whereNames;
 		_whereNames = new const char *[2] { "Party", "Bank" };
@@ -794,13 +806,19 @@ public:
 		return _ratingText;
 	}
 
+	const char **BORN() {
+		delete[] _born;
+		_born = new const char *[2] { "Born", "" };
+		return _born;
+	}
+
 	const char *AGE_TEXT() {
 		return "\x2\x3"
 			   "c%s\n"
 			   "Current / Natural\n"
 			   "\x3r\t057%u\x3l\t061/ %u\n"
 			   "\x3"
-			   "cBorn: %u / %u\x1";
+			   "c%s: %u / %u\x1";
 	}
 
 	const char *LEVEL_TEXT() {
@@ -845,10 +863,16 @@ public:
 			   "%u in bank\x1\x3l";
 	}
 
+	const char **FOOD_ON_HAND() {
+		delete[] _onHand;
+		_onHand = new const char *[3] { "on hand", "", "" };
+		return _onHand;
+	}
+
 	const char *FOOD_TEXT() {
 		return "\x2\x3"
 			   "cParty %s\n"
-			   "%u on hand\n"
+			   "%u %s\n"
 			   "Enough for %u day%s\x3l";
 	}
 
@@ -1617,9 +1641,15 @@ public:
 			   "077";
 	}
 
+	const char **FOUND() {
+		delete[] _found;
+		_found = new const char *[2] { "found", "" };
+		return _found;
+	}
+
 	const char *X_FOUND_Y() {
 		return "\v060\t000\x3"
-			   "c%s found: %s";
+			   "c%s %s: %s";
 	}
 
 	const char *ON_WHO() {
@@ -1748,12 +1778,24 @@ public:
 
 	const char *PICKS_THE_LOCK() {
 		return "\x3"
-			   "c\v010%s picks the lock!\nPress any key.";
+			   "c\v010%s %s the lock!\nPress any key.";
+	}
+
+	const char **PICK_FORM() {
+		delete[] _pickForm;
+		_pickForm = new const char *[2] { "picks", "" };
+		return _pickForm;
 	}
 
 	const char *UNABLE_TO_PICK_LOCK() {
 		return "\x3"
-			   "c\v010%s was unable to pick the lock!\nPress any key.";
+			   "c\v010%s was %s the lock!\nPress any key.";
+	}
+
+	const char **UNABLE_TO_PICK_FORM() {
+		delete[] _unableToPickForm;
+		_unableToPickForm = new const char *[2] { "unable to pick", "" }; 
+		return _unableToPickForm;
 	}
 
 	const char *CONTROL_PANEL_TEXT() {
diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index 468b1e9c2f..74cd49f4e0 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -628,10 +628,22 @@ public:
 
 	const char **CONSUMABLE_NAMES() {
 		delete[] _consumableNames;
-		_consumableNames = new const char *[6] { "\x87\xAE\xAB\xAE\xE2\xAE", "\x80\xAB\xAC\xA0\xA7\xEB", "\x8F\xA8\xE9\xA0", "\x91\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA5", "\x87\xAE\xAB\xAE\xE2\xA0", "\x80\xAB\xAC\xA0\xA7\xAE\xA2" }; // "Золото", "Алмазы", "Пища", "Состояние", "Золота", "Алмазов"
+		_consumableNames = new const char *[4] { "\x87\xAE\xAB\xAE\xE2\xAE", "\x80\xAB\xAC\xA0\xA7\xEB", "\x8F\xA8\xE9\xA0", "\x91\xAE\xE1\xE2\xAE\xEF\xAD\xA8\xA5" }; // "Золото", "Алмазы", "Пища", "Состояние"
 		return _consumableNames;
 	}
 
+	const char **CONSUMABLE_GOLD_FORMS() {
+		delete[] _consumableGoldForms;
+		_consumableGoldForms = new const char *[1] { "\x87\xAE\xAB\xAE\xE2\xA0" }; // "Золота"
+		return _consumableGoldForms;
+	}
+
+	const char **CONSUMABLE_GEM_FORMS() {
+		delete[] _consumableGemForms;
+		_consumableGemForms = new const char *[1] { "\x80\xAB\xAC\xA0\xA7\xAE\xA2" }; // "Алмазов"
+		return _consumableGemForms;
+	}
+
 	const char **WHERE_NAMES() {
 		delete[] _whereNames;
 		_whereNames = new const char *[2] { "\xE3 \xAE\xE2\xE0\xEF\xA4\xA0", "\xA2 \xA1\xA0\xAD\xAA\xA5" }; // "у отряда", "в банке"
@@ -869,11 +881,17 @@ public:
 		return _ratingText;
 	}
 
+	const char **BORN() {
+		delete[] _born;
+		_born = new const char *[2] { "\x90\xAE\xA4\xA8\xAB\xE1\xEF", "\x90\xAE\xA4\xA8\xAB\xA0\xE1\xEC" }; // "Родился", "Родилась"
+		return _born;
+	}
+
 	const char *AGE_TEXT() {
 		return "\x2\x3""c%s\n"														   // "\x2\x3""c%s\n"
 			   "\x92\xA5\xAA\xE3\xE9\xA8\xA9 / \x8D\xA0\xE1\xE2\xAE\xEF\xE9\xA8\xA9\n" // "Текущий / Настоящий\n"
 			   "\x3""r\t057%u\x3""l\t061/ %u\n"                                        // "\x3""r\t057%u\x3""l\t061/ %u\n"
-			   "\x3""c\x90\xAE\xA4\xA8\xAB%s: %u / %u\x1";                             // "\x3""cРодил%s: %u / %u\x1";
+			   "\x3""c%s: %u / %u\x1";                             // "\x3""cРодил%s: %u / %u\x1";
 	}
 
 	const char *LEVEL_TEXT() {
@@ -913,9 +931,15 @@ public:
 			   "%lu \xA2 \xA1\xA0\xAD\xAA\xA5\x1\x3""l"; // "%lu в банке\x1\x3""l";
 	}
 
+	const char **FOOD_ON_HAND() {
+		delete[] _onHand;
+		_onHand = new const char *[3] { "\xAF\xAE\xE0\xE6\xA8\xEF", "\xAF\xAE\xE0\xE6\xA8\xA8", "\xAF\xAE\xE0\xE6\xA8\xA9" }; // "порция", "порции", "порций"
+		return _onHand;
+	}
+
 	const char *FOOD_TEXT() {
 		return "\x2\x3""c%s\n"									   // "\x2\x3""c%s\n"
-			   "%u \xAF\xAE\xE0\xE6\xA8%c\n"                       // "%u порци%c\n"
+			   "%u %s\n"										   // "%u %s\n"
 			   "\x95\xA2\xA0\xE2\xA8\xE2 \xAD\xA0 %u %s\x1\x3""l"; // "Хватит на %u %s\x1\x3""l";
 	}
 
@@ -1654,8 +1678,14 @@ public:
 			   "077";
 	}
 
+	const char **FOUND() {
+		delete[] _found;
+		_found = new const char *[2] { "\xAD\xA0\xE8\xF1\xAB", "\xAD\xA0\xE8\xAB\xA0" }; // "нашёл", "нашла"
+		return _found;
+	}
+
 	const char *X_FOUND_Y() {
-		return "\v060\t000\x3""c%s \xAD\xA0\xE8%s: %s"; // "\v060\t000\x3""c%s наш%s: %s"
+		return "\v060\t000\x3""c%s %s: %s"; // "\v060\t000\x3""c%s %s: %s"
 	}
 
 	const char *ON_WHO() {
@@ -1771,11 +1801,23 @@ public:
 	}
 
 	const char *PICKS_THE_LOCK() {
-		return "\x3""c\v010%s \xA2\xA7\xAB\xAE\xAC\xA0\xAB%s \xA7\xA0\xAC\xAE\xAA!\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3."; // "\x3""c\v010%s взломал%s замок!\nНажмите клавишу."
+		return "\x3""c\v010%s %s \xA7\xA0\xAC\xAE\xAA!\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3."; // "\x3""c\v010%s %s замок!\nНажмите клавишу."
+	}
+
+	const char **PICK_FORM() {
+		delete[] _pickForm;
+		_pickForm = new const char *[2] { "\xA2\xA7\xAB\xAE\xAC\xA0\xAB", "\xA2\xA7\xAB\xAE\xAC\xA0\xAB\xA0" }; // "взломал", "взломала"
+		return _pickForm;
 	}
 
 	const char *UNABLE_TO_PICK_LOCK() {
-		return "\x3""c\v010%s \xAD\xA5 \xE1\xAC\xAE\xA3%s \xA2\xA7\xAB\xAE\xAC\xA0\xE2\xEC \xA7\xA0\xAC\xAE\xAA!\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3."; // "\x3""c\v010%s не смог%s взломать замок!\nНажмите клавишу."
+		return "\x3""c\v010%s %s \xA2\xA7\xAB\xAE\xAC\xA0\xE2\xEC \xA7\xA0\xAC\xAE\xAA!\n\x8D\xA0\xA6\xAC\xA8\xE2\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xE3."; // "\x3""c\v010%s %s взломать замок!\nНажмите клавишу."
+	}
+
+	const char **UNABLE_TO_PICK_FORM() {
+		delete[] _unableToPickForm;
+		_unableToPickForm = new const char *[2] { "\xAD\xA5 \xE1\xAC\xAE\xA3", "\xAD\xA5 \xE1\xAC\xAE\xA3\xAB\xA0" }; // "не смог", "не смогла"
+		return _unableToPickForm;
 	}
 
 	const char *CONTROL_PANEL_TEXT() {
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index b72c8061ce..495a65cc83 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/dialogs/dialogs_char_info.cpp b/engines/xeen/dialogs/dialogs_char_info.cpp
index 24fa595d39..ff631b5d60 100644
--- a/engines/xeen/dialogs/dialogs_char_info.cpp
+++ b/engines/xeen/dialogs/dialogs_char_info.cpp
@@ -278,7 +278,7 @@ void CharacterInfo::addButtons() {
 	addPartyButtons(_vm);
 }
 
-Common::String CharacterInfo::getDaysPlurals(int val) {
+const char* CharacterInfo::getDaysPlurals(int val) {
 	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
 		int i = val % 100;
 		if (i < 5 || i > 20)
@@ -294,7 +294,6 @@ Common::String CharacterInfo::getDaysPlurals(int val) {
 	} else {
 		return Res.DAYS[val == 1 ? 0 : 1];
 	}
-
 }
 
 Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
@@ -330,7 +329,7 @@ Common::String CharacterInfo::loadCharacterDetails(const Character &c) {
 		c.statColor(c.getCurrentLevel(), c._level._permanent), c.getCurrentLevel(),
 		c.getNumSkills(),
 		foodVal,
-		getDaysPlurals(foodVal).c_str(),
+		getDaysPlurals(foodVal),
 		c.statColor(c.getStat(SPEED), c.getStat(SPEED, true)), c.getStat(SPEED),
 		c.statColor(c.getArmorClass(), c.getArmorClass(true)), c.getArmorClass(),
 		c.getNumAwards(),
@@ -351,6 +350,35 @@ void CharacterInfo::showCursor(bool flag) {
 	}
 }
 
+const char *CharacterInfo::getBornForm(const Character &c) {
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		switch (c._sex) {
+		case MALE:
+			return Res.BORN[0];
+		case FEMALE:
+			return Res.BORN[1];
+		}
+	}
+	return Res.BORN[0];
+}
+
+const char *CharacterInfo::getFoodOnHandPlurals(int food) {
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		int i = food % 100;
+		if (i < 5 || i > 20)
+			switch (food % 10) {
+			case 1:
+				return Res.FOOD_ON_HAND[0];
+			case 2:
+			case 3:
+			case 4:
+				return Res.FOOD_ON_HAND[1];
+			}
+		return Res.FOOD_ON_HAND[2];
+	}
+	return Res.FOOD_ON_HAND[0];
+}
+
 bool CharacterInfo::expandStat(int attrib, const Character &c) {
 	const int STAT_POS[2][20] = {
 		{
@@ -394,7 +422,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 		stat1 = c.getAge(false);
 		stat2 = c.getAge(true);
 		msg = Common::String::format(Res.AGE_TEXT, Res.STAT_NAMES[attrib],
-			stat1, stat2, c._birthDay, c._birthYear);
+			stat1, stat2, getBornForm(c), c._birthDay, c._birthYear);
 		break;
 
 	case 8: {
@@ -520,7 +548,7 @@ bool CharacterInfo::expandStat(int attrib, const Character &c) {
 		// Food
 		int food = (party._food / party._activeParty.size()) / 3;
 		msg = Common::String::format(Res.FOOD_TEXT, Res.CONSUMABLE_NAMES[2],
-			party._food, food, food != 1 ? "s" : "");
+			party._food, getFoodOnHandPlurals(food), food, getDaysPlurals(food));
 		break;
 	}
 
diff --git a/engines/xeen/dialogs/dialogs_char_info.h b/engines/xeen/dialogs/dialogs_char_info.h
index d1b3580600..e34c803d2e 100644
--- a/engines/xeen/dialogs/dialogs_char_info.h
+++ b/engines/xeen/dialogs/dialogs_char_info.h
@@ -52,7 +52,7 @@ private:
 	/**
 	 * Get plural day/days form
 	 */
-	Common::String getDaysPlurals(int val);
+	const char* getDaysPlurals(int val);
 
 	/**
 	 * Return a string containing the details of the character
@@ -64,6 +64,16 @@ private:
 	 */
 	void showCursor(bool flag);
 
+	/**
+	 * Get gender form 'born'
+	 */
+	const char *getBornForm(const Character &c);
+
+	/**
+	 * Get plural form 'on hand' for food
+	*/
+	const char *getFoodOnHandPlurals(int food);
+
 	bool expandStat(int attrib, const Character &c);
 public:
 	static void show(XeenEngine *vm, int charIndex);
diff --git a/engines/xeen/dialogs/dialogs_items.cpp b/engines/xeen/dialogs/dialogs_items.cpp
index 02cf8f311d..8dacd25ed6 100644
--- a/engines/xeen/dialogs/dialogs_items.cpp
+++ b/engines/xeen/dialogs/dialogs_items.cpp
@@ -752,7 +752,7 @@ int ItemsDialog::calcItemCost(Character *c, int itemIndex, ItemsMode mode,
 	return (mode == ITEMMODE_CHAR_INFO) ? 0 : result;
 }
 
-Common::String ItemsDialog::getGoldPlurals(int cost) {
+const char* ItemsDialog::getGoldPlurals(int cost) {
 	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language")))
 		return Res.GOLDS[cost % 10 == 1 ? 0 : 1];
 	return Res.GOLDS[0];
@@ -855,7 +855,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 				int cost = calcItemCost(&c, itemIndex, mode, 0, category);
 				Common::String desc = c._items[category].getFullDescription(itemIndex);
 				if (Confirm::show(_vm, Common::String::format(Res.BUY_X_FOR_Y_GOLD,
-						desc.c_str(), cost, getGoldPlurals(cost).c_str()))) {
+						desc.c_str(), cost, getGoldPlurals(cost)))) {
 					if (party.subtract(CONS_GOLD, cost, WHERE_PARTY, WT_FREEZE_WAIT)) {
 						if (ccNum) {
 							sound.stopSound();
@@ -895,7 +895,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 				int cost = calcItemCost(&c, itemIndex, mode, c._skills[MERCHANT], category);
 				Common::String desc = c._items[category].getFullDescription(itemIndex);
 				Common::String msg = Common::String::format(Res.SELL_X_FOR_Y_GOLD,
-					desc.c_str(), cost, getGoldPlurals(cost).c_str());
+					desc.c_str(), cost, getGoldPlurals(cost));
 
 				if (Confirm::show(_vm, msg)) {
 					// Remove the sold item and add gold to the party's total
diff --git a/engines/xeen/dialogs/dialogs_items.h b/engines/xeen/dialogs/dialogs_items.h
index ce9d258ad5..3429d9fff8 100644
--- a/engines/xeen/dialogs/dialogs_items.h
+++ b/engines/xeen/dialogs/dialogs_items.h
@@ -67,7 +67,7 @@ private:
 	/**
 	 * Get plural gold form
 	*/
-	Common::String getGoldPlurals(int val);
+	const char* getGoldPlurals(int val);
 
 	int doItemOptions(Character &c, int actionIndex, int itemIndex,
 		ItemCategory category, ItemsMode mode);
diff --git a/engines/xeen/party.cpp b/engines/xeen/party.cpp
index 645100a55a..38e5b8a141 100644
--- a/engines/xeen/party.cpp
+++ b/engines/xeen/party.cpp
@@ -20,6 +20,7 @@
  *
  */
 
+#include "common/config-manager.h"
 #include "common/scummsys.h"
 #include "common/algorithm.h"
 #include "xeen/party.h"
@@ -661,19 +662,18 @@ int Party::subtract(ConsumableType consumableId, uint amount, PartyBank whereId,
 	return true;
 }
 
-int Party::getConsumableForm(ConsumableType consumableId) {
+const char* Party::getConsumableForm(ConsumableType consumableId) {
 	switch (consumableId) {
-	case CONS_GOLD: return 4;
-	case CONS_GEMS: return 5;
+	case CONS_GOLD: return Res.CONSUMABLE_GOLD_FORMS[0];
+	case CONS_GEMS: return Res.CONSUMABLE_GEM_FORMS[0];
 	}
-	return consumableId;
+	return Res.CONSUMABLE_NAMES[consumableId];
 }
 
 void Party::notEnough(ConsumableType consumableId, PartyBank whereId, bool mode, MessageWaitType wait) {
-	int _tmpConsumableId = getConsumableForm(consumableId);
 	Common::String msg = Common::String::format(
 		mode ? Res.NO_X_IN_THE_Y : Res.NOT_ENOUGH_X_IN_THE_Y,
-		Res.CONSUMABLE_NAMES[_tmpConsumableId], Res.WHERE_NAMES[whereId]);
+		getConsumableForm(consumableId), Res.WHERE_NAMES[whereId]);
 	ErrorScroll::show(_vm, msg, wait);
 }
 
@@ -821,6 +821,18 @@ bool Party::arePacksFull() const {
 	return total == (_activeParty.size() * NUM_ITEM_CATEGORIES);
 }
 
+const char* Party::getFoundForm(const Character& c) {
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		switch (c._sex) {
+		case MALE:
+			return Res.FOUND[0];
+		case FEMALE:
+			return Res.FOUND[1];
+		}
+	}
+	return Res.FOUND[0];
+}
+
 void Party::giveTreasureToCharacter(Character &c, ItemCategory category, int itemIndex) {
 	EventsManager &events = *_vm->_events;
 	Sound &sound = *_vm->_sound;
@@ -844,9 +856,9 @@ void Party::giveTreasureToCharacter(Character &c, ItemCategory category, int ite
 	if (index >= (_vm->getGameID() == GType_Swords ? 88 : 82)) {
 		// Quest item, give an extra '*' prefix
 		Common::String format = Common::String::format("\f04 * \fd%s", itemName);
-		w.writeString(Common::String::format(Res.X_FOUND_Y, c._name.c_str(), format.c_str()));
+		w.writeString(Common::String::format(Res.X_FOUND_Y, c._name.c_str(), getFoundForm(c), format.c_str()));
 	} else {
-		w.writeString(Common::String::format(Res.X_FOUND_Y, c._name.c_str(), itemName));
+		w.writeString(Common::String::format(Res.X_FOUND_Y, c._name.c_str(), getFoundForm(c), itemName));
 	}
 
 	w.update();
@@ -1471,6 +1483,30 @@ bool Party::giveTake(int takeMode, uint takeVal, int giveMode, uint giveVal, int
 	return false;
 }
 
+const char* Party::getPickLockForm(const Character &c) {
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		switch (c._sex) {
+		case MALE:
+			return Res.PICK_FORM[0];
+		case FEMALE:
+			return Res.PICK_FORM[1];
+		}
+	}
+	return Res.PICK_FORM[0];
+}
+
+const char* Party::getUnablePickLockForm(const Character &c) {
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		switch (c._sex) {
+		case MALE:
+			return Res.UNABLE_TO_PICK_FORM[0];
+		case FEMALE:
+			return Res.UNABLE_TO_PICK_FORM[1];
+		}
+	}
+	return Res.UNABLE_TO_PICK_FORM[0];
+}
+
 bool Party::giveExt(int mode1, uint val1, int mode2, uint val2, int mode3, uint val3, int charId) {
 	Combat &combat = *g_vm->_combat;
 	FileManager &files = *g_vm->_files;
@@ -1509,14 +1545,14 @@ bool Party::giveExt(int mode1, uint val1, int mode2, uint val2, int mode3, uint
 
 					sound.playFX(10);
 					intf.draw3d(true, false);
-					Common::String msg = Common::String::format(Res.PICKS_THE_LOCK, c._name.c_str());
+					Common::String msg = Common::String::format(Res.PICKS_THE_LOCK, c._name.c_str(), getPickLockForm(c));
 					ErrorScroll::show(g_vm, msg, WT_NONFREEZED_WAIT);
 				} else {
 					sound.playFX(21);
 
 					obj._frame = 0;
 					scripts._animCounter = 0;
-					Common::String msg = Common::String::format(Res.UNABLE_TO_PICK_LOCK, c._name.c_str());
+					Common::String msg = Common::String::format(Res.UNABLE_TO_PICK_LOCK, c._name.c_str(), getUnablePickLockForm(c));
 					ErrorScroll::show(g_vm, msg, WT_NONFREEZED_WAIT);
 
 					scripts._animCounter = 255;
diff --git a/engines/xeen/party.h b/engines/xeen/party.h
index c0a3be5ef7..44753a76d6 100644
--- a/engines/xeen/party.h
+++ b/engines/xeen/party.h
@@ -157,6 +157,11 @@ private:
 	static XeenEngine *_vm;
 	Character _itemsCharacter;
 
+	/**
+	 * Get gender form 'found'
+	 */
+	const char* getFoundForm(const Character &c);
+
 	/**
 	 * Give a treasure item to the given character's inventory
 	 */
@@ -269,7 +274,7 @@ public:
 
 	int subtract(ConsumableType consumableId, uint amount, PartyBank whereId, MessageWaitType wait = WT_FREEZE_WAIT);
 
-	int getConsumableForm(ConsumableType consumableId);
+	const char* getConsumableForm(ConsumableType consumableId);
 
 	void notEnough(ConsumableType consumableId, PartyBank whereId, bool mode, MessageWaitType wait);
 
@@ -297,6 +302,16 @@ public:
 	 */
 	bool giveTake(int takeMode, uint takeVal, int giveMode, uint giveVal, int charIdx);
 
+	/*
+	 * Get gender form 'picks'
+	 */
+	const char* getPickLockForm(const Character &c);
+
+	/*
+	 *  Get gender form 'unable to pick'
+	 */
+	const char* getUnablePickLockForm(const Character &c);
+
 	/**
 	 * Gives up to three different item/amounts to various character and/or party properties
 	 */
diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp
index 03a308d454..7a17d0180c 100644
--- a/engines/xeen/resources.cpp
+++ b/engines/xeen/resources.cpp
@@ -177,7 +177,9 @@ void Resources::loadData() {
 	file.syncString(NOT_ENOUGH_X_IN_THE_Y);
 	file.syncString(NO_X_IN_THE_Y);
 	file.syncStrings(STAT_NAMES, 16);
-	file.syncStrings(CONSUMABLE_NAMES, 6);
+	file.syncStrings(CONSUMABLE_NAMES, 4);
+	file.syncStrings(CONSUMABLE_GOLD_FORMS, 1);
+	file.syncStrings(CONSUMABLE_GEM_FORMS, 1);
 	file.syncStrings(WHERE_NAMES, 2);
 	file.syncString(AMOUNT);
 	file.syncString(FOOD_PACKS_FULL);
@@ -223,6 +225,7 @@ void Resources::loadData() {
 	file.syncString(CURRENT_MAXIMUM_RATING_TEXT);
 	file.syncString(CURRENT_MAXIMUM_TEXT);
 	file.syncStrings(RATING_TEXT, 24);
+	file.syncStrings(BORN, 2);
 	file.syncString(AGE_TEXT);
 	file.syncString(LEVEL_TEXT);
 	file.syncString(RESISTENCES_TEXT);
@@ -230,6 +233,7 @@ void Resources::loadData() {
 	file.syncString(EXPERIENCE_TEXT);
 	file.syncString(ELIGIBLE);
 	file.syncString(IN_PARTY_IN_BANK);
+	file.syncStrings(FOOD_ON_HAND, 3);
 	file.syncString(FOOD_TEXT);
 	file.syncString(EXCHANGE_WITH_WHOM);
 	file.syncString(QUICK_REF_LINE);
@@ -364,6 +368,7 @@ void Resources::loadData() {
 	file.syncString(BACKPACKS_FULL_PRESS_KEY);
 	file.syncString(HIT_A_KEY);
 	file.syncString(GIVE_TREASURE_FORMATTING);
+	file.syncStrings(FOUND, 2);
 	file.syncString(X_FOUND_Y);
 	file.syncString(ON_WHO);
 	file.syncString(WHICH_ELEMENT1);
@@ -387,7 +392,9 @@ void Resources::loadData() {
 	file.syncString(WARZONE_LEVEL);
 	file.syncString(WARZONE_HOW_MANY);
 	file.syncString(PICKS_THE_LOCK);
+	file.syncStrings(PICK_FORM, 2);
 	file.syncString(UNABLE_TO_PICK_LOCK);
+	file.syncStrings(UNABLE_TO_PICK_FORM, 2);
 	file.syncString(CONTROL_PANEL_TEXT);
 	file.syncString(CONTROL_PANEL_BUTTONS);
 	file.syncString(ON);
diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h
index 02e5f2dd39..378647c5a3 100644
--- a/engines/xeen/resources.h
+++ b/engines/xeen/resources.h
@@ -230,7 +230,9 @@ public:
 	const char *NOT_ENOUGH_X_IN_THE_Y;
 	const char *NO_X_IN_THE_Y;
 	const char *STAT_NAMES[16];
-	const char *CONSUMABLE_NAMES[6];
+	const char *CONSUMABLE_NAMES[4];
+	const char *CONSUMABLE_GOLD_FORMS[1];
+	const char *CONSUMABLE_GEM_FORMS[1];
 	const char *WHERE_NAMES[2];
 	const char *AMOUNT;
 	const char *FOOD_PACKS_FULL;
@@ -276,6 +278,7 @@ public:
 	const char *CURRENT_MAXIMUM_RATING_TEXT;
 	const char *CURRENT_MAXIMUM_TEXT;
 	const char *RATING_TEXT[24];
+	const char *BORN[2];
 	const char *AGE_TEXT;
 	const char *LEVEL_TEXT;
 	const char *RESISTENCES_TEXT;
@@ -283,6 +286,7 @@ public:
 	const char *EXPERIENCE_TEXT;
 	const char *ELIGIBLE;
 	const char *IN_PARTY_IN_BANK;
+	const char *FOOD_ON_HAND[3];
 	const char *FOOD_TEXT;
 	const char *EXCHANGE_WITH_WHOM;
 	const char *QUICK_REF_LINE;
@@ -417,6 +421,7 @@ public:
 	const char *BACKPACKS_FULL_PRESS_KEY;
 	const char *HIT_A_KEY;
 	const char *GIVE_TREASURE_FORMATTING;
+	const char *FOUND[2];
 	const char *X_FOUND_Y;
 	const char *ON_WHO;
 	const char *WHICH_ELEMENT1;
@@ -440,7 +445,9 @@ public:
 	const char *WARZONE_LEVEL;
 	const char *WARZONE_HOW_MANY;
 	const char *PICKS_THE_LOCK;
+	const char *PICK_FORM[2];
 	const char *UNABLE_TO_PICK_LOCK;
+	const char *UNABLE_TO_PICK_FORM[2];
 	const char *CONTROL_PANEL_TEXT;
 	const char *CONTROL_PANEL_BUTTONS;
 	const char *ON;


Commit: 9f80f452e4fecfd985b8d3e25d6e97bda34ce4bf
    https://github.com/scummvm/scummvm/commit/9f80f452e4fecfd985b8d3e25d6e97bda34ce4bf
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Translated all constants.h strings for Clouds. Ready for test.

Changed paths:
    devtools/create_xeen/en_constants.h
    devtools/create_xeen/ru_constants.h
    dists/engine-data/xeen.ccs
    engines/xeen/dialogs/dialogs_char_info.cpp
    engines/xeen/dialogs/dialogs_char_info.h
    engines/xeen/dialogs/dialogs_items.cpp
    engines/xeen/dialogs/dialogs_items.h
    engines/xeen/dialogs/dialogs_quick_ref.cpp
    engines/xeen/dialogs/dialogs_quick_ref.h
    engines/xeen/party.cpp
    engines/xeen/party.h


diff --git a/devtools/create_xeen/en_constants.h b/devtools/create_xeen/en_constants.h
index 867d306aaa..2e01886ad2 100644
--- a/devtools/create_xeen/en_constants.h
+++ b/devtools/create_xeen/en_constants.h
@@ -1359,7 +1359,7 @@ public:
 	}
 
 	const char *FIX_IDENTIFY_GOLD() {
-		return "\x3l\v000\t000%s %s\fd for %u gold?";
+		return "\x3l\v000\t000%s %s\fd for %u %s?";
 	}
 
 	const char *IDENTIFY_ITEM_MSG() {
diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index 74cd49f4e0..e22dd56aca 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -804,28 +804,17 @@ public:
 	}
 
 	const char *CHARACTER_DETAILS() {
-		return "\x3"
-			   "l\v041\t196%s\t000\v002%s : %s %s %s"
-			   "\x3"
-			   "r\t053\v028\f%02u%u\fd\t103\f%02u%u\fd"
-			   "\x3"
-			   "l\t131\f%02u%d\fd\t196\f15%lu\fd\x3"
-			   "r"
+		return "\x3""l\v041\t196%s\t000\v002%s : %s %s %s"
+			   "\x3""r\t053\v028\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3""l\t131\f%02u%d\fd\t196\f15%lu\fd\x3""r"
 			   "\t053\v051\f%02u%u\fd\t103\f%02u%u\fd"
-			   "\x3"
-			   "l\t131\f%02u%u\fd\t196\f15%lu\fd"
-			   "\x3"
-			   "r\t053\v074\f%02u%u\fd\t103\f%02u%u\fd"
-			   "\x3"
-			   "l\t131\f15%u\fd\t196\f15%lu\fd"
-			   "\x3"
-			   "r\t053\v097\f%02u%u\fd\t103\f%02u%u\fd"
-			   "\x3"
-			   "l\t131\f15%u\fd\t196\f15%u %s\fd"
-			   "\x3"
-			   "r\t053\v120\f%02u%u\fd\t103\f%02u%u\fd"
-			   "\x3"
-			   "l\t131\f15%u\fd\t196\f%02u%s\fd"
+			   "\x3""l\t131\f%02u%u\fd\t196\f15%lu\fd"
+			   "\x3""r\t053\v074\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3""l\t131\f15%u\fd\t196\f15%lu\fd"
+			   "\x3""r\t053\v097\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3""l\t131\f15%u\fd\t196\f15%u %s\fd"
+			   "\x3""r\t053\v120\f%02u%u\fd\t103\f%02u%u\fd"
+			   "\x3""l\t131\f15%u\fd\t196\f%02u%s\fd"
 			   "\t245%s%s%s%s\fd";
 	}
 
@@ -1418,7 +1407,7 @@ public:
 	}
 
 	const char *FIX_IDENTIFY_GOLD() {
-		return "\x3""l\v000\t000%s %s\fd \xA7\xA0 %lu \xA7\xAE\xAB\xAE\xE2%s?"; // "\x3""l\v000\t000%s %s\fd за %lu золот%s?"
+		return "\x3""l\v000\t000%s %s\fd \xA7\xA0 %lu %s?"; // "\x3""l\v000\t000%s %s\fd за %lu %s?"
 	}
 
 	const char *IDENTIFY_ITEM_MSG() {
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index 495a65cc83..56acb55a00 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/dialogs/dialogs_char_info.cpp b/engines/xeen/dialogs/dialogs_char_info.cpp
index ff631b5d60..c719962bd1 100644
--- a/engines/xeen/dialogs/dialogs_char_info.cpp
+++ b/engines/xeen/dialogs/dialogs_char_info.cpp
@@ -278,7 +278,7 @@ void CharacterInfo::addButtons() {
 	addPartyButtons(_vm);
 }
 
-const char* CharacterInfo::getDaysPlurals(int val) {
+const char *CharacterInfo::getDaysPlurals(int val) {
 	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
 		int i = val % 100;
 		if (i < 5 || i > 20)
diff --git a/engines/xeen/dialogs/dialogs_char_info.h b/engines/xeen/dialogs/dialogs_char_info.h
index e34c803d2e..cde9fadda6 100644
--- a/engines/xeen/dialogs/dialogs_char_info.h
+++ b/engines/xeen/dialogs/dialogs_char_info.h
@@ -52,7 +52,7 @@ private:
 	/**
 	 * Get plural day/days form
 	 */
-	const char* getDaysPlurals(int val);
+	const char *getDaysPlurals(int val);
 
 	/**
 	 * Return a string containing the details of the character
diff --git a/engines/xeen/dialogs/dialogs_items.cpp b/engines/xeen/dialogs/dialogs_items.cpp
index 8dacd25ed6..39a694c25c 100644
--- a/engines/xeen/dialogs/dialogs_items.cpp
+++ b/engines/xeen/dialogs/dialogs_items.cpp
@@ -752,7 +752,7 @@ int ItemsDialog::calcItemCost(Character *c, int itemIndex, ItemsMode mode,
 	return (mode == ITEMMODE_CHAR_INFO) ? 0 : result;
 }
 
-const char* ItemsDialog::getGoldPlurals(int cost) {
+const char *ItemsDialog::getGoldPlurals(int cost) {
 	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language")))
 		return Res.GOLDS[cost % 10 == 1 ? 0 : 1];
 	return Res.GOLDS[0];
@@ -933,7 +933,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 				Common::String msg = Common::String::format(Res.FIX_IDENTIFY_GOLD,
 					Res.FIX_IDENTIFY[0],
 					c._items[category].getFullDescription(itemIndex).c_str(),
-					cost);
+					cost, getGoldPlurals(cost));
 
 				if (Confirm::show(_vm, msg) && party.subtract(CONS_GOLD, cost, WHERE_PARTY)) {
 					item._state._broken = false;
@@ -946,7 +946,7 @@ int ItemsDialog::doItemOptions(Character &c, int actionIndex, int itemIndex, Ite
 			Common::String msg = Common::String::format(Res.FIX_IDENTIFY_GOLD,
 				Res.FIX_IDENTIFY[1],
 				c._items[category].getFullDescription(itemIndex).c_str(),
-				cost);
+				cost, getGoldPlurals(cost));
 
 			if (Confirm::show(_vm, msg) && party.subtract(CONS_GOLD, cost, WHERE_PARTY)) {
 				Common::String details = c._items[category].getIdentifiedDetails(itemIndex);
diff --git a/engines/xeen/dialogs/dialogs_items.h b/engines/xeen/dialogs/dialogs_items.h
index 3429d9fff8..64d9fccd5e 100644
--- a/engines/xeen/dialogs/dialogs_items.h
+++ b/engines/xeen/dialogs/dialogs_items.h
@@ -67,7 +67,7 @@ private:
 	/**
 	 * Get plural gold form
 	*/
-	const char* getGoldPlurals(int val);
+	const char *getGoldPlurals(int val);
 
 	int doItemOptions(Character &c, int actionIndex, int itemIndex,
 		ItemCategory category, ItemsMode mode);
diff --git a/engines/xeen/dialogs/dialogs_quick_ref.cpp b/engines/xeen/dialogs/dialogs_quick_ref.cpp
index 329f74f3aa..096be16fd2 100644
--- a/engines/xeen/dialogs/dialogs_quick_ref.cpp
+++ b/engines/xeen/dialogs/dialogs_quick_ref.cpp
@@ -20,6 +20,7 @@
  *
  */
 
+#include "common/config-manager.h"
 #include "xeen/dialogs/dialogs_quick_ref.h"
 #include "xeen/resources.h"
 #include "xeen/xeen.h"
@@ -32,6 +33,24 @@ void QuickReferenceDialog::show(XeenEngine *vm) {
 	delete dlg;
 }
 
+const char *QuickReferenceDialog::getDaysPlurals(int val) {
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		int i = val % 100;
+		if (i < 5 || i > 20)
+			switch (val % 10) {
+			case 1:
+				return Res.DAYS[0];
+			case 2:
+			case 3:
+			case 4:
+				return Res.DAYS[1];
+			}
+		return Res.DAYS[2];
+	} else {
+		return Res.DAYS[val == 1 ? 0 : 1];
+	}
+}
+
 void QuickReferenceDialog::execute() {
 	Combat &combat = *_vm->_combat;
 	EventsManager &events = *_vm->_events;
@@ -65,7 +84,7 @@ void QuickReferenceDialog::execute() {
 		lines[3].c_str(), lines[4].c_str(), lines[5].c_str(),
 		lines[6].c_str(), lines[7].c_str(),
 		party._gold, party._gems,
-		food, food == 1 ? "" : "s"
+		food, getDaysPlurals(food)
 	);
 
 	Window &w = windows[24];
diff --git a/engines/xeen/dialogs/dialogs_quick_ref.h b/engines/xeen/dialogs/dialogs_quick_ref.h
index 4630043c3f..e320cc4ca7 100644
--- a/engines/xeen/dialogs/dialogs_quick_ref.h
+++ b/engines/xeen/dialogs/dialogs_quick_ref.h
@@ -31,6 +31,11 @@ class QuickReferenceDialog : public ButtonContainer {
 private:
 	QuickReferenceDialog(XeenEngine *vm) : ButtonContainer(vm) {}
 
+	/**
+	 * Get plural day/days form
+	 */
+	const char *getDaysPlurals(int val);
+
 	void execute();
 public:
 	static void show(XeenEngine *vm);
diff --git a/engines/xeen/party.cpp b/engines/xeen/party.cpp
index 38e5b8a141..a2c2982530 100644
--- a/engines/xeen/party.cpp
+++ b/engines/xeen/party.cpp
@@ -662,7 +662,7 @@ int Party::subtract(ConsumableType consumableId, uint amount, PartyBank whereId,
 	return true;
 }
 
-const char* Party::getConsumableForm(ConsumableType consumableId) {
+const char *Party::getConsumableForm(ConsumableType consumableId) {
 	switch (consumableId) {
 	case CONS_GOLD: return Res.CONSUMABLE_GOLD_FORMS[0];
 	case CONS_GEMS: return Res.CONSUMABLE_GEM_FORMS[0];
@@ -821,7 +821,7 @@ bool Party::arePacksFull() const {
 	return total == (_activeParty.size() * NUM_ITEM_CATEGORIES);
 }
 
-const char* Party::getFoundForm(const Character& c) {
+const char *Party::getFoundForm(const Character &c) {
 	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
 		switch (c._sex) {
 		case MALE:
@@ -1483,7 +1483,7 @@ bool Party::giveTake(int takeMode, uint takeVal, int giveMode, uint giveVal, int
 	return false;
 }
 
-const char* Party::getPickLockForm(const Character &c) {
+const char *Party::getPickLockForm(const Character &c) {
 	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
 		switch (c._sex) {
 		case MALE:
@@ -1495,7 +1495,7 @@ const char* Party::getPickLockForm(const Character &c) {
 	return Res.PICK_FORM[0];
 }
 
-const char* Party::getUnablePickLockForm(const Character &c) {
+const char *Party::getUnablePickLockForm(const Character &c) {
 	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
 		switch (c._sex) {
 		case MALE:
diff --git a/engines/xeen/party.h b/engines/xeen/party.h
index 44753a76d6..ecd6aa247e 100644
--- a/engines/xeen/party.h
+++ b/engines/xeen/party.h
@@ -160,7 +160,7 @@ private:
 	/**
 	 * Get gender form 'found'
 	 */
-	const char* getFoundForm(const Character &c);
+	const char *getFoundForm(const Character &c);
 
 	/**
 	 * Give a treasure item to the given character's inventory
@@ -274,7 +274,7 @@ public:
 
 	int subtract(ConsumableType consumableId, uint amount, PartyBank whereId, MessageWaitType wait = WT_FREEZE_WAIT);
 
-	const char* getConsumableForm(ConsumableType consumableId);
+	const char *getConsumableForm(ConsumableType consumableId);
 
 	void notEnough(ConsumableType consumableId, PartyBank whereId, bool mode, MessageWaitType wait);
 
@@ -305,12 +305,12 @@ public:
 	/*
 	 * Get gender form 'picks'
 	 */
-	const char* getPickLockForm(const Character &c);
+	const char *getPickLockForm(const Character &c);
 
 	/*
 	 *  Get gender form 'unable to pick'
 	 */
-	const char* getUnablePickLockForm(const Character &c);
+	const char *getUnablePickLockForm(const Character &c);
 
 	/**
 	 * Gives up to three different item/amounts to various character and/or party properties


Commit: 15063fb74081175ea9f9dceaef47792d65d29119
    https://github.com/scummvm/scummvm/commit/15063fb74081175ea9f9dceaef47792d65d29119
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU change hotkeys in dialogs_char_info, dialogs_control_panel

Changed paths:
    engines/xeen/dialogs/dialogs_char_info.cpp
    engines/xeen/dialogs/dialogs_control_panel.cpp


diff --git a/engines/xeen/dialogs/dialogs_char_info.cpp b/engines/xeen/dialogs/dialogs_char_info.cpp
index c719962bd1..d1daf0ced0 100644
--- a/engines/xeen/dialogs/dialogs_char_info.cpp
+++ b/engines/xeen/dialogs/dialogs_char_info.cpp
@@ -175,6 +175,10 @@ void CharacterInfo::execute(int charIndex) {
 			break;
 		}
 
+		case Common::KEYCODE_c:
+			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+				break;
+			}
 		case Common::KEYCODE_e:
 			if (oldMode == MODE_COMBAT) {
 				ErrorScroll::show(_vm, Res.EXCHANGING_IN_COMBAT, WT_FREEZE_WAIT);
@@ -186,6 +190,10 @@ void CharacterInfo::execute(int charIndex) {
 			}
 			break;
 
+		case Common::KEYCODE_d:
+			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+				break;
+			}
 		case Common::KEYCODE_i:
 			_vm->_mode = oldMode;
 			_vm->_combat->_itemFlag = _vm->_mode == MODE_COMBAT;
@@ -200,6 +208,10 @@ void CharacterInfo::execute(int charIndex) {
 			redrawFlag = true;
 			break;
 
+		case Common::KEYCODE_COMMA:
+			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+				break;
+			}
 		case Common::KEYCODE_q:
 			QuickReferenceDialog::show(_vm);
 			redrawFlag = true;
@@ -271,9 +283,15 @@ void CharacterInfo::addButtons() {
 	addButton(Common::Rect(177, 70, 201, 90), 1018, &_iconSprites);
 	addButton(Common::Rect(177, 93, 201, 113), 1019, &_iconSprites);
 	addButton(Common::Rect(177, 116, 201, 136), 1020, &_iconSprites);
-	addButton(Common::Rect(285, 11, 309, 31), Common::KEYCODE_i, &_iconSprites);
-	addButton(Common::Rect(285, 43, 309, 63), Common::KEYCODE_q, &_iconSprites);
-	addButton(Common::Rect(285, 75, 309, 95), Common::KEYCODE_e, &_iconSprites);
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		addButton(Common::Rect(285, 11, 309, 31), Common::KEYCODE_d, &_iconSprites);		// russian key Â
+		addButton(Common::Rect(285, 43, 309, 63), Common::KEYCODE_COMMA, &_iconSprites);	// russian key Á
+		addButton(Common::Rect(285, 75, 309, 95), Common::KEYCODE_c, &_iconSprites);		// russian key Ñ
+	} else {
+		addButton(Common::Rect(285, 11, 309, 31), Common::KEYCODE_i, &_iconSprites);
+		addButton(Common::Rect(285, 43, 309, 63), Common::KEYCODE_q, &_iconSprites);
+		addButton(Common::Rect(285, 75, 309, 95), Common::KEYCODE_e, &_iconSprites);
+	}
 	addButton(Common::Rect(285, 107, 309, 127), Common::KEYCODE_ESCAPE, &_iconSprites);
 	addPartyButtons(_vm);
 }
diff --git a/engines/xeen/dialogs/dialogs_control_panel.cpp b/engines/xeen/dialogs/dialogs_control_panel.cpp
index 80d1715ff7..610f53b857 100644
--- a/engines/xeen/dialogs/dialogs_control_panel.cpp
+++ b/engines/xeen/dialogs/dialogs_control_panel.cpp
@@ -20,6 +20,7 @@
  *
  */
 
+#include "common/config-manager.h"
 #include "xeen/dialogs/dialogs_control_panel.h"
 #include "xeen/dialogs/dialogs_query.h"
 #include "xeen/party.h"
@@ -84,6 +85,10 @@ int ControlPanel::execute() {
 		} while (!_buttonValue && events.timeElapsed() < 2);
 
 		switch (_buttonValue) {
+		case Common::KEYCODE_d:
+			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+				break;
+			}
 		case Common::KEYCODE_q:
 			if (Confirm::show(g_vm, Res.CONFIRM_QUIT)) {
 				g_vm->_gameMode = GMODE_QUIT;
@@ -91,6 +96,12 @@ int ControlPanel::execute() {
 			}
 			break;
 
+		case Common::KEYCODE_g:
+			// Goober cheat sequence
+			debugCtr = 1;
+			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+				break;
+			}
 		case Common::KEYCODE_w:
 			if (Confirm::show(g_vm, Res.MR_WIZARD)) {
 				w.close();
@@ -114,6 +125,10 @@ int ControlPanel::execute() {
 			}
 			break;
 
+		case Common::KEYCODE_p:
+			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+				break;
+			}
 		case Common::KEYCODE_l:
 			if (_vm->_mode == MODE_COMBAT) {
 				ErrorScroll::show(_vm, Res.NO_LOADING_IN_COMBAT);
@@ -123,6 +138,10 @@ int ControlPanel::execute() {
 			}
 			break;
 
+		case Common::KEYCODE_c:
+			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+				break;
+			}
 		case Common::KEYCODE_s:
 			if (_vm->_mode == MODE_COMBAT) {
 				ErrorScroll::show(_vm, Res.NO_SAVING_IN_COMBAT);
@@ -136,6 +155,10 @@ int ControlPanel::execute() {
 			sound.setFxOn(!sound._fxOn);
 			break;
 
+		case Common::KEYCODE_v:
+			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+				break;
+			}
 		case Common::KEYCODE_m:
 			sound.setMusicOn(!sound._musicOn);
 			break;
@@ -145,9 +168,6 @@ int ControlPanel::execute() {
 			break;
 
 		// Goober cheat sequence
-		case Common::KEYCODE_g:
-			debugCtr = 1;
-			break;
 		case Common::KEYCODE_o:
 			debugCtr = (debugCtr == 1 || debugCtr == 2) ? 2 : 0;
 			break;
@@ -181,18 +201,27 @@ int ControlPanel::execute() {
 
 void ControlPanel::loadButtons() {
 	_iconSprites.load("cpanel.icn");
-
-	addButton(Common::Rect(214, 56, 244, 69), Common::KEYCODE_e, 0, &_iconSprites);
-	addButton(Common::Rect(214, 75, 244, 88), Common::KEYCODE_m, 0, &_iconSprites);
-	addButton(Common::Rect(135, 56, 165, 69), Common::KEYCODE_l, 0, &_iconSprites);
-	addButton(Common::Rect(135, 75, 165, 88), Common::KEYCODE_s, 0, &_iconSprites);
-
-	// For ScummVM we've merged both Save and Save As into a single
-	// save item, so we don't need this one
-	addButton(Common::Rect(), 0);
-
-	addButton(Common::Rect(135, 94, 165, 107), Common::KEYCODE_q, 0, &_iconSprites);
-	addButton(Common::Rect(175, 113, 205, 126), Common::KEYCODE_w, 0, &_iconSprites);
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		addButton(Common::Rect(214, 56, 244, 69), Common::KEYCODE_e, 0, &_iconSprites);		// russian key Ó
+		addButton(Common::Rect(214, 75, 244, 88), Common::KEYCODE_v, 0, &_iconSprites);		// russian key Ì
+		addButton(Common::Rect(135, 56, 165, 69), Common::KEYCODE_p, 0, &_iconSprites);		// russian key Ç
+		addButton(Common::Rect(135, 75, 165, 88), Common::KEYCODE_c, 0, &_iconSprites);		// russian key Ñ
+		addButton(Common::Rect(135, 94, 165, 107), Common::KEYCODE_d, 0, &_iconSprites);	// russian key Â
+		addButton(Common::Rect(175, 113, 205, 126), Common::KEYCODE_g, 0, &_iconSprites);	// russian key Ï
+	} else {
+
+		addButton(Common::Rect(214, 56, 244, 69), Common::KEYCODE_e, 0, &_iconSprites);
+		addButton(Common::Rect(214, 75, 244, 88), Common::KEYCODE_m, 0, &_iconSprites);
+		addButton(Common::Rect(135, 56, 165, 69), Common::KEYCODE_l, 0, &_iconSprites);
+		addButton(Common::Rect(135, 75, 165, 88), Common::KEYCODE_s, 0, &_iconSprites);
+
+		// For ScummVM we've merged both Save and Save As into a single
+		// save item, so we don't need this one
+		addButton(Common::Rect(), 0);
+
+		addButton(Common::Rect(135, 94, 165, 107), Common::KEYCODE_q, 0, &_iconSprites);
+		addButton(Common::Rect(175, 113, 205, 126), Common::KEYCODE_w, 0, &_iconSprites);
+	}
 }
 
 Common::String ControlPanel::getButtonText() {


Commit: 587031a2e5e2721312c375ad8ea18735f601398c
    https://github.com/scummvm/scummvm/commit/587031a2e5e2721312c375ad8ea18735f601398c
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Further sharpening
change hotkeys in dialogs_create_char, dialogs_difficulty

Changed paths:
    devtools/create_xeen/constants.cpp
    devtools/create_xeen/constants.h
    devtools/create_xeen/en_constants.h
    devtools/create_xeen/ru_constants.h
    dists/engine-data/xeen.ccs
    engines/xeen/dialogs/dialogs_char_info.cpp
    engines/xeen/dialogs/dialogs_control_panel.cpp
    engines/xeen/dialogs/dialogs_create_char.cpp
    engines/xeen/dialogs/dialogs_difficulty.cpp
    engines/xeen/font.cpp


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index 14cc5007eb..bff86704bc 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -400,7 +400,7 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	file.syncString(SELECT_CLASS_BEFORE_SAVING());
 	file.syncString(EXCHANGE_ATTR_WITH());
 	file.syncNumbers((const int *)NEW_CHAR_SKILLS, 10);
-	file.syncNumbers((const int *)NEW_CHAR_SKILLS_OFFSET, 10);
+	file.syncNumbers((const int *)NEW_CHAR_SKILLS_OFFSET(), 10);
 	file.syncNumbers((const int *)NEW_CHAR_SKILLS_LEN, 10);
 	file.syncNumbers((const int *)NEW_CHAR_RACE_SKILLS, 10);
 	file.syncNumbers((const int *)RACE_MAGIC_RESISTENCES, 5);
diff --git a/devtools/create_xeen/constants.h b/devtools/create_xeen/constants.h
index 8997555d1e..c523210142 100644
--- a/devtools/create_xeen/constants.h
+++ b/devtools/create_xeen/constants.h
@@ -156,6 +156,7 @@ protected:
 	const char **_found = NULL;
 	const char **_born = NULL;
 	const char **_onHand = NULL;
+	const int   *_newCharSkillsOffset = NULL;
 
 public:
 	virtual const char  *CLOUDS_CREDITS() = 0;
@@ -1134,7 +1135,7 @@ public:
 	virtual const char  *EXCHANGE_ATTR_WITH() = 0;
 
 	const int NEW_CHAR_SKILLS[10] = { 1, 5, -1, -1, 4, 0, 0, -1, 6, 11 };
-	const int NEW_CHAR_SKILLS_OFFSET[10] = { 0, 0, 0, 5, 0, 0, 0, 0, 0, 0 };
+	virtual const int *NEW_CHAR_SKILLS_OFFSET() = 0;
 	const int NEW_CHAR_SKILLS_LEN[10] = { 11, 8, 0, 0, 12, 8, 8, 0, 9, 11 };
 	const int NEW_CHAR_RACE_SKILLS[10] = { 14, -1, 17, 16, -1, 0, 0, 0, 0, 0 };
 
diff --git a/devtools/create_xeen/en_constants.h b/devtools/create_xeen/en_constants.h
index 2e01886ad2..e20c4fdb1c 100644
--- a/devtools/create_xeen/en_constants.h
+++ b/devtools/create_xeen/en_constants.h
@@ -1574,6 +1574,12 @@ public:
 		return "Exchange %s with...";
 	}
 
+	const int *NEW_CHAR_SKILLS_OFFSET() {
+		delete[] _newCharSkillsOffset;
+		_newCharSkillsOffset = new const int [10] { 0, 0, 0, 5, 0, 0, 0, 0, 0, 0 };
+		return _newCharSkillsOffset;
+	}
+
 	const char *COMBAT_DETAILS() {
 		return "\r\f00\x3"
 			   "c\v000\t000\x2"
diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index e22dd56aca..1dfdb6a218 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -293,13 +293,14 @@ public:
 	const char **SKILL_NAMES() {
 		delete[] _skillNames;
 		_skillNames = new const char *[18] {
-			"\x82\xAE\xE0\xAE\xA2\xE1\xE2\xA2\xAE\t100",								// "Воровство\t100",
+			"\x82\xAE\xE0\xAE\xA2\xE1\xE2\xA2\xAE\t100",								 // "Воровство\t100",
 			"\x8E\xE0\xE3\xA6\xA5\xA9\xAD\xA8\xAA",                                      // "Оружейник",
 			"\x80\xE1\xE2\xE0\xAE\xAB\xAE\xA3",                                          // "Астролог",
 			"\x80\xE2\xAB\xA5\xE2",                                                      // "Атлет",
 			"\x8A\xA0\xE0\xE2\xAE\xA3\xE0\xA0\xE4",                                      // "Картограф",
 			"\x8A\xE0\xA5\xE1\xE2\xAE\xAD\xAE\xE1\xA5\xE6",                              // "Крестоносец",
-			"\x97\xE3\xA2\xE1\xE2\xA2\xAE \xAD\xA0\xAF\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xEF", // "Чувство направления",
+			"\x97\xE3\xA2\xE1\xE2\xA2\xAE \xAD\xA0\xAF\xE0.",                            // "Чувство напр.",
+			//"\x97\xE3\xA2\xE1\xE2\xA2\xAE \xAD\xA0\xAF\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xEF", // "Чувство направления",
 			"\x9F\xA7\xEB\xAA\xAE\xA2\xA5\xA4",                                          // "Языковед",
 			"\x8A\xE3\xAF\xA5\xE6",                                                      // "Купец",
 			"\x91\xAA\xA0\xAB\xAE\xAB\xA0\xA7",                                          // "Скалолаз",
@@ -310,7 +311,8 @@ public:
 			"\x8F\xAB\xAE\xA2\xA5\xE6",                                                  // "Пловец",
 			"\x8E\xE5\xAE\xE2\xAD\xA8\xAA",                                              // "Охотник",
 			"\x82\xAE\xE1\xAF\xE0\xA8\xEF\xE2\xA8\xA5",                                  // "Восприятие",
-			"\x97\xE3\xA2\xE1\xE2\xA2\xAE \xAE\xAF\xA0\xE1\xAD\xAE\xE1\xE2\xA8"          // "Чувство опасности"
+			"\x97\xE3\xA2\xE1\xE2\xA2\xAE \xAE\xAF\xA0\xE1\xAD."                         // "Чувство опасн."
+			//"\x97\xE3\xA2\xE1\xE2\xA2\xAE \xAE\xAF\xA0\xE1\xAD\xAE\xE1\xE2\xA8"          // "Чувство опасности"
 		};
 		return _skillNames;
 	}
@@ -1609,6 +1611,12 @@ public:
 		return "\x8F\xAE\xAC\xA5\xAD\xEF\xE2\xEC %s \xE1..."; // "Поменять %s с..."
 	}
 
+	const int *NEW_CHAR_SKILLS_OFFSET() {
+		delete[] _newCharSkillsOffset;
+		_newCharSkillsOffset = new const int[10]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+		return _newCharSkillsOffset;
+	}
+
 	const char *COMBAT_DETAILS() {
 		return "\r\f00\x3""c\v000\t000\x2%s%s%s\x1"; // "\r\f00\x3""c\v000\t000\x2%s%s%s\x1"
 	}
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index 56acb55a00..a42f8af76e 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/dialogs/dialogs_char_info.cpp b/engines/xeen/dialogs/dialogs_char_info.cpp
index d1daf0ced0..c17d9c4470 100644
--- a/engines/xeen/dialogs/dialogs_char_info.cpp
+++ b/engines/xeen/dialogs/dialogs_char_info.cpp
@@ -81,147 +81,271 @@ void CharacterInfo::execute(int charIndex) {
 		}
 		events.clearEvents();
 
-		switch (_buttonValue) {
-		case Common::KEYCODE_F1:
-		case Common::KEYCODE_F2:
-		case Common::KEYCODE_F3:
-		case Common::KEYCODE_F4:
-		case Common::KEYCODE_F5:
-		case Common::KEYCODE_F6:
-			_buttonValue -= Common::KEYCODE_F1;
-			if (_buttonValue < (int)(oldMode == MODE_COMBAT ? combat._combatParty.size() : party._activeParty.size())) {
-				charIndex = _buttonValue;
-				c = (oldMode != MODE_COMBAT) ? &party._activeParty[charIndex] : combat._combatParty[charIndex];
-
-				intf.highlightChar(_buttonValue);
-				redrawFlag = true;
-			} else {
-				_vm->_mode = MODE_CHARACTER_INFO;
-			}
-			break;
+		if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+			switch (_buttonValue) {
+			case Common::KEYCODE_F1:
+			case Common::KEYCODE_F2:
+			case Common::KEYCODE_F3:
+			case Common::KEYCODE_F4:
+			case Common::KEYCODE_F5:
+			case Common::KEYCODE_F6:
+				_buttonValue -= Common::KEYCODE_F1;
+				if (_buttonValue < (int)(oldMode == MODE_COMBAT ? combat._combatParty.size() : party._activeParty.size())) {
+					charIndex = _buttonValue;
+					c = (oldMode != MODE_COMBAT) ? &party._activeParty[charIndex] : combat._combatParty[charIndex];
+
+					intf.highlightChar(_buttonValue);
+					redrawFlag = true;
+				} else {
+					_vm->_mode = MODE_CHARACTER_INFO;
+				}
+				break;
 
-		case Common::KEYCODE_UP:
-		case Common::KEYCODE_KP8:
-			if (_cursorCell > 0) {
-				showCursor(false);
-				--_cursorCell;
-				showCursor(true);
-			}
-			w.update();
-			break;
+			case Common::KEYCODE_UP:
+			case Common::KEYCODE_KP8:
+				if (_cursorCell > 0) {
+					showCursor(false);
+					--_cursorCell;
+					showCursor(true);
+				}
+				w.update();
+				break;
 
-		case Common::KEYCODE_DOWN:
-		case Common::KEYCODE_KP2:
-			if (_cursorCell < 20) {
-				showCursor(false);
-				++_cursorCell;
-				showCursor(true);
-			}
-			w.update();
-			break;
+			case Common::KEYCODE_DOWN:
+			case Common::KEYCODE_KP2:
+				if (_cursorCell < 20) {
+					showCursor(false);
+					++_cursorCell;
+					showCursor(true);
+				}
+				w.update();
+				break;
 
-		case Common::KEYCODE_LEFT:
-		case Common::KEYCODE_KP4:
-			if (_cursorCell >= 5) {
-				showCursor(false);
-				_cursorCell -= 5;
-				showCursor(true);
-			}
-			w.update();
-			break;
+			case Common::KEYCODE_LEFT:
+			case Common::KEYCODE_KP4:
+				if (_cursorCell >= 5) {
+					showCursor(false);
+					_cursorCell -= 5;
+					showCursor(true);
+				}
+				w.update();
+				break;
+
+			case Common::KEYCODE_RIGHT:
+			case Common::KEYCODE_KP6:
+				if (_cursorCell <= 15) {
+					showCursor(false);
+					_cursorCell += 5;
+					showCursor(true);
+				}
+				w.update();
+				break;
 
-		case Common::KEYCODE_RIGHT:
-		case Common::KEYCODE_KP6:
-			if (_cursorCell <= 15) {
+			case 1001:
+			case 1002:
+			case 1003:
+			case 1004:
+			case 1005:
+			case 1006:
+			case 1007:
+			case 1008:
+			case 1009:
+			case 1010:
+			case 1011:
+			case 1012:
+			case 1013:
+			case 1014:
+			case 1015:
+			case 1016:
+			case 1017:
+			case 1018:
+			case 1019:
+			case 1020:
 				showCursor(false);
-				_cursorCell += 5;
+				_cursorCell = _buttonValue - 1001;
 				showCursor(true);
+				w.update();
+				// fall through
+
+			case Common::KEYCODE_RETURN:
+			case Common::KEYCODE_KP_ENTER: {
+				bool result = expandStat(_cursorCell, *c);
+				_vm->_mode = MODE_COMBAT;
+				if (result)
+					redrawFlag = true;
+				break;
 			}
-			w.update();
-			break;
-
-		case 1001:
-		case 1002:
-		case 1003:
-		case 1004:
-		case 1005:
-		case 1006:
-		case 1007:
-		case 1008:
-		case 1009:
-		case 1010:
-		case 1011:
-		case 1012:
-		case 1013:
-		case 1014:
-		case 1015:
-		case 1016:
-		case 1017:
-		case 1018:
-		case 1019:
-		case 1020:
-			showCursor(false);
-			_cursorCell = _buttonValue - 1001;
-			showCursor(true);
-			w.update();
-			// fall through
-
-		case Common::KEYCODE_RETURN:
-		case Common::KEYCODE_KP_ENTER: {
-			bool result = expandStat(_cursorCell, *c);
-			_vm->_mode = MODE_COMBAT;
-			if (result)
-				redrawFlag = true;
-			break;
-		}
 
-		case Common::KEYCODE_c:
-			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+			// Ñ ({Ñ}ìåí)
+			case Common::KEYCODE_c:	// russian key Ñ
+				if (oldMode == MODE_COMBAT) {
+					ErrorScroll::show(_vm, Res.EXCHANGING_IN_COMBAT, WT_FREEZE_WAIT);
+				} else {
+					_vm->_mode = oldMode;
+					ExchangeDialog::show(_vm, c, charIndex);
+					_vm->_mode = MODE_CHARACTER_INFO;
+					redrawFlag = true;
+				}
 				break;
-			}
-		case Common::KEYCODE_e:
-			if (oldMode == MODE_COMBAT) {
-				ErrorScroll::show(_vm, Res.EXCHANGING_IN_COMBAT, WT_FREEZE_WAIT);
-			} else {
+
+			// Â ({Â}åùè)
+			case Common::KEYCODE_d: // russian key Â
 				_vm->_mode = oldMode;
-				ExchangeDialog::show(_vm, c, charIndex);
+				_vm->_combat->_itemFlag = _vm->_mode == MODE_COMBAT;
+				c = ItemsDialog::show(_vm, c, ITEMMODE_CHAR_INFO);
+
+				if (!c) {
+					party._stepped = true;
+					goto exit;
+				}
+
 				_vm->_mode = MODE_CHARACTER_INFO;
 				redrawFlag = true;
-			}
-			break;
+				break;
 
-		case Common::KEYCODE_d:
-			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+			// Á ({Á}ñòð)
+			case Common::KEYCODE_COMMA: // russian key Á
+				QuickReferenceDialog::show(_vm);
+				redrawFlag = true;
 				break;
-			}
-		case Common::KEYCODE_i:
-			_vm->_mode = oldMode;
-			_vm->_combat->_itemFlag = _vm->_mode == MODE_COMBAT;
-			c = ItemsDialog::show(_vm, c, ITEMMODE_CHAR_INFO);
 
-			if (!c) {
-				party._stepped = true;
+			case Common::KEYCODE_ESCAPE:
 				goto exit;
+
+			default:
+				break;
 			}
+		} else {
+			switch (_buttonValue) {
+			case Common::KEYCODE_F1:
+			case Common::KEYCODE_F2:
+			case Common::KEYCODE_F3:
+			case Common::KEYCODE_F4:
+			case Common::KEYCODE_F5:
+			case Common::KEYCODE_F6:
+				_buttonValue -= Common::KEYCODE_F1;
+				if (_buttonValue < (int)(oldMode == MODE_COMBAT ? combat._combatParty.size() : party._activeParty.size())) {
+					charIndex = _buttonValue;
+					c = (oldMode != MODE_COMBAT) ? &party._activeParty[charIndex] : combat._combatParty[charIndex];
+
+					intf.highlightChar(_buttonValue);
+					redrawFlag = true;
+				} else {
+					_vm->_mode = MODE_CHARACTER_INFO;
+				}
+				break;
+
+			case Common::KEYCODE_UP:
+			case Common::KEYCODE_KP8:
+				if (_cursorCell > 0) {
+					showCursor(false);
+					--_cursorCell;
+					showCursor(true);
+				}
+				w.update();
+				break;
+
+			case Common::KEYCODE_DOWN:
+			case Common::KEYCODE_KP2:
+				if (_cursorCell < 20) {
+					showCursor(false);
+					++_cursorCell;
+					showCursor(true);
+				}
+				w.update();
+				break;
 
-			_vm->_mode = MODE_CHARACTER_INFO;
-			redrawFlag = true;
-			break;
+			case Common::KEYCODE_LEFT:
+			case Common::KEYCODE_KP4:
+				if (_cursorCell >= 5) {
+					showCursor(false);
+					_cursorCell -= 5;
+					showCursor(true);
+				}
+				w.update();
+				break;
+
+			case Common::KEYCODE_RIGHT:
+			case Common::KEYCODE_KP6:
+				if (_cursorCell <= 15) {
+					showCursor(false);
+					_cursorCell += 5;
+					showCursor(true);
+				}
+				w.update();
+				break;
 
-		case Common::KEYCODE_COMMA:
-			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+			case 1001:
+			case 1002:
+			case 1003:
+			case 1004:
+			case 1005:
+			case 1006:
+			case 1007:
+			case 1008:
+			case 1009:
+			case 1010:
+			case 1011:
+			case 1012:
+			case 1013:
+			case 1014:
+			case 1015:
+			case 1016:
+			case 1017:
+			case 1018:
+			case 1019:
+			case 1020:
+				showCursor(false);
+				_cursorCell = _buttonValue - 1001;
+				showCursor(true);
+				w.update();
+				// fall through
+
+			case Common::KEYCODE_RETURN:
+			case Common::KEYCODE_KP_ENTER: {
+				bool result = expandStat(_cursorCell, *c);
+				_vm->_mode = MODE_COMBAT;
+				if (result)
+					redrawFlag = true;
 				break;
 			}
-		case Common::KEYCODE_q:
-			QuickReferenceDialog::show(_vm);
-			redrawFlag = true;
-			break;
 
-		case Common::KEYCODE_ESCAPE:
-			goto exit;
+			case Common::KEYCODE_e:
+				if (oldMode == MODE_COMBAT) {
+					ErrorScroll::show(_vm, Res.EXCHANGING_IN_COMBAT, WT_FREEZE_WAIT);
+				} else {
+					_vm->_mode = oldMode;
+					ExchangeDialog::show(_vm, c, charIndex);
+					_vm->_mode = MODE_CHARACTER_INFO;
+					redrawFlag = true;
+				}
+				break;
+
+			case Common::KEYCODE_i:
+				_vm->_mode = oldMode;
+				_vm->_combat->_itemFlag = _vm->_mode == MODE_COMBAT;
+				c = ItemsDialog::show(_vm, c, ITEMMODE_CHAR_INFO);
+
+				if (!c) {
+					party._stepped = true;
+					goto exit;
+				}
+
+				_vm->_mode = MODE_CHARACTER_INFO;
+				redrawFlag = true;
+				break;
+
+			case Common::KEYCODE_q:
+				QuickReferenceDialog::show(_vm);
+				redrawFlag = true;
+				break;
+
+			case Common::KEYCODE_ESCAPE:
+				goto exit;
 
-		default:
-			break;
+			default:
+				break;
+			}
 		}
 	} while (!_vm->shouldExit());
 exit:
diff --git a/engines/xeen/dialogs/dialogs_control_panel.cpp b/engines/xeen/dialogs/dialogs_control_panel.cpp
index 610f53b857..84dce62c97 100644
--- a/engines/xeen/dialogs/dialogs_control_panel.cpp
+++ b/engines/xeen/dialogs/dialogs_control_panel.cpp
@@ -84,105 +84,175 @@ int ControlPanel::execute() {
 				return 0;
 		} while (!_buttonValue && events.timeElapsed() < 2);
 
-		switch (_buttonValue) {
-		case Common::KEYCODE_d:
-			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+		if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+			switch (_buttonValue) {
+			// Â ({Â}ûõîä)
+			case Common::KEYCODE_d:	// russian key Â
+				if (Confirm::show(g_vm, Res.CONFIRM_QUIT)) {
+					g_vm->_gameMode = GMODE_QUIT;
+					result = 1;
+				}
 				break;
-			}
-		case Common::KEYCODE_q:
-			if (Confirm::show(g_vm, Res.CONFIRM_QUIT)) {
-				g_vm->_gameMode = GMODE_QUIT;
+
+			// Ï ({Ï}îìîùü)
+			case Common::KEYCODE_g:	// russian key Ï
+				debugCtr = 1;	// Goober cheat sequence
+
+				if (Confirm::show(g_vm, Res.MR_WIZARD)) {
+					w.close();
+					if (!windows[2]._enabled) {
+						sound.playFX(51);
+
+						if (g_vm->getGameID() == GType_WorldOfXeen) {
+							map._loadCcNum = 0;
+							map.load(28);
+							party._mazeDirection = DIR_EAST;
+						} else {
+							map._loadCcNum = 1;
+							map.load(29);
+							party._mazeDirection = DIR_SOUTH;
+						}
+						party.moveToRunLocation();
+					}
+
+					party._gems = 0;
+					result = 2;
+				}
+				break;
+
+			// Ç ({Ç}àãðóçèòü)
+			case Common::KEYCODE_p:	// russian key Ç
+				if (_vm->_mode == MODE_COMBAT) {
+					ErrorScroll::show(_vm, Res.NO_LOADING_IN_COMBAT);
+				} else {
+					// Close dialog and show loading dialog
+					result = 3;
+				}
+				break;
+
+			// Ñ ({Ñ}îõðàíèòü)
+			case Common::KEYCODE_c:	// russian key Ñ
+				if (_vm->_mode == MODE_COMBAT) {
+					ErrorScroll::show(_vm, Res.NO_SAVING_IN_COMBAT);
+				} else {
+					// Close dialog and show saving dialog
+					result = 4;
+				}
+				break;
+
+			// Ó (Çâ{ó}ê)
+			case Common::KEYCODE_e:	// russian key Ó
+				sound.setFxOn(!sound._fxOn);
+				break;
+
+			// Ì ({Ì}óçûêà)
+			case Common::KEYCODE_v:	// russian key Ì
+				sound.setMusicOn(!sound._musicOn);
+				break;
+
+			case Common::KEYCODE_ESCAPE:
 				result = 1;
-			}
-			break;
+				break;
 
-		case Common::KEYCODE_g:
 			// Goober cheat sequence
-			debugCtr = 1;
-			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+			case Common::KEYCODE_o:
+				debugCtr = (debugCtr == 1 || debugCtr == 2) ? 2 : 0;
+				break;
+			case Common::KEYCODE_b:
+				debugCtr = (debugCtr == 2) ? 3 : 0;
+				break;
+			case Common::KEYCODE_r:
+				if (debugCtr == 3)
+					_debugFlag = true;
+				else
+					debugCtr = 0;
+				break;
+
+			default:
 				break;
 			}
-		case Common::KEYCODE_w:
-			if (Confirm::show(g_vm, Res.MR_WIZARD)) {
-				w.close();
-				if (!windows[2]._enabled) {
-					sound.playFX(51);
-
-					if (g_vm->getGameID() == GType_WorldOfXeen) {
-						map._loadCcNum = 0;
-						map.load(28);
-						party._mazeDirection = DIR_EAST;
-					} else {
-						map._loadCcNum = 1;
-						map.load(29);
-						party._mazeDirection = DIR_SOUTH;
+		} else {
+			switch (_buttonValue) {
+			case Common::KEYCODE_q:
+				if (Confirm::show(g_vm, Res.CONFIRM_QUIT)) {
+					g_vm->_gameMode = GMODE_QUIT;
+					result = 1;
+				}
+				break;
+
+			case Common::KEYCODE_w:
+				if (Confirm::show(g_vm, Res.MR_WIZARD)) {
+					w.close();
+					if (!windows[2]._enabled) {
+						sound.playFX(51);
+
+						if (g_vm->getGameID() == GType_WorldOfXeen) {
+							map._loadCcNum = 0;
+							map.load(28);
+							party._mazeDirection = DIR_EAST;
+						} else {
+							map._loadCcNum = 1;
+							map.load(29);
+							party._mazeDirection = DIR_SOUTH;
+						}
+						party.moveToRunLocation();
 					}
-					party.moveToRunLocation();
+
+					party._gems = 0;
+					result = 2;
 				}
+				break;
 
-				party._gems = 0;
-				result = 2;
-			}
-			break;
+			case Common::KEYCODE_l:
+				if (_vm->_mode == MODE_COMBAT) {
+					ErrorScroll::show(_vm, Res.NO_LOADING_IN_COMBAT);
+				} else {
+					// Close dialog and show loading dialog
+					result = 3;
+				}
+				break;
 
-		case Common::KEYCODE_p:
-			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+			case Common::KEYCODE_s:
+				if (_vm->_mode == MODE_COMBAT) {
+					ErrorScroll::show(_vm, Res.NO_SAVING_IN_COMBAT);
+				} else {
+					// Close dialog and show saving dialog
+					result = 4;
+				}
 				break;
-			}
-		case Common::KEYCODE_l:
-			if (_vm->_mode == MODE_COMBAT) {
-				ErrorScroll::show(_vm, Res.NO_LOADING_IN_COMBAT);
-			} else {
-				// Close dialog and show loading dialog
-				result = 3;
-			}
-			break;
 
-		case Common::KEYCODE_c:
-			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+			case Common::KEYCODE_e:
+				sound.setFxOn(!sound._fxOn);
+				break;
+
+			case Common::KEYCODE_m:
+				sound.setMusicOn(!sound._musicOn);
+				break;
+
+			case Common::KEYCODE_ESCAPE:
+				result = 1;
 				break;
-			}
-		case Common::KEYCODE_s:
-			if (_vm->_mode == MODE_COMBAT) {
-				ErrorScroll::show(_vm, Res.NO_SAVING_IN_COMBAT);
-			} else {
-				// Close dialog and show saving dialog
-				result = 4;
-			}
-			break;
 
-		case Common::KEYCODE_e:
-			sound.setFxOn(!sound._fxOn);
-			break;
+			// Goober cheat sequence
+			case Common::KEYCODE_g:
+				debugCtr = 1;
+				break;
+			case Common::KEYCODE_o:
+				debugCtr = (debugCtr == 1 || debugCtr == 2) ? 2 : 0;
+				break;
+			case Common::KEYCODE_b:
+				debugCtr = (debugCtr == 2) ? 3 : 0;
+				break;
+			case Common::KEYCODE_r:
+				if (debugCtr == 3)
+					_debugFlag = true;
+				else
+					debugCtr = 0;
+				break;
 
-		case Common::KEYCODE_v:
-			if (Common::RU_RUS != Common::parseLanguage(ConfMan.get("language"))) {
+			default:
 				break;
 			}
-		case Common::KEYCODE_m:
-			sound.setMusicOn(!sound._musicOn);
-			break;
-
-		case Common::KEYCODE_ESCAPE:
-			result = 1;
-			break;
-
-		// Goober cheat sequence
-		case Common::KEYCODE_o:
-			debugCtr = (debugCtr == 1 || debugCtr == 2) ? 2 : 0;
-			break;
-		case Common::KEYCODE_b:
-			debugCtr = (debugCtr == 2) ? 3 : 0;
-			break;
-		case Common::KEYCODE_r:
-			if (debugCtr == 3)
-				_debugFlag = true;
-			else
-				debugCtr = 0;
-			break;
-
-		default:
-			break;
 		}
 	} while (!result);
 
diff --git a/engines/xeen/dialogs/dialogs_create_char.cpp b/engines/xeen/dialogs/dialogs_create_char.cpp
index ab86c4939a..a13cf31c58 100644
--- a/engines/xeen/dialogs/dialogs_create_char.cpp
+++ b/engines/xeen/dialogs/dialogs_create_char.cpp
@@ -20,6 +20,7 @@
  *
  */
 
+#include "common/config-manager.h"
 #include "xeen/dialogs/dialogs_create_char.h"
 #include "xeen/dialogs/dialogs_input.h"
 #include "xeen/xeen.h"
@@ -130,96 +131,198 @@ void CreateCharacterDialog::execute() {
 		// Handling for different actions
 		if (_buttonValue == Common::KEYCODE_ESCAPE)
 			break;
+		if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+			switch (_buttonValue) {
+			case Common::KEYCODE_UP:
+				if (charIndex == 0)
+					continue;
 
-		switch (_buttonValue) {
-		case Common::KEYCODE_UP:
-			if (charIndex == 0)
+				--charIndex;
+				race = (Race)((freeCharList[charIndex] / 4) % 5);
+				sex = (Sex)(freeCharList[charIndex] & 1);
+				break;
+
+			case Common::KEYCODE_DOWN:
+				if (++charIndex == (int)freeCharList.size()) {
+					--charIndex;
+					continue;
+				} else {
+					race = (Race)((freeCharList[charIndex] / 4) % 5);
+					sex = (Sex)(freeCharList[charIndex] & 1);
+				}
+				break;
+
+			case Common::KEYCODE_PAGEUP:
+				for (int tempClass = selectedClass - 1; tempClass >= 0; --tempClass) {
+					if (_allowedClasses[tempClass]) {
+						selectedClass = tempClass;
+						break;
+					}
+				}
+
+				printSelectionArrow(selectedClass);
 				continue;
 
-			--charIndex;
-			race = (Race)((freeCharList[charIndex] / 4) % 5);
-			sex = (Sex)(freeCharList[charIndex] & 1);
-			break;
+			case Common::KEYCODE_PAGEDOWN:
+				break;
 
-		case Common::KEYCODE_DOWN:
-			if (++charIndex == (int)freeCharList.size()) {
-				--charIndex;
+			// Ë (Ñè{ë})
+			case Common::KEYCODE_k:			// russian key Ë
+			// È ({È}íò)
+			case Common::KEYCODE_b:			// russian key È
+			// Ä ({Ä}óõ)
+			case Common::KEYCODE_l:			// russian key Ä
+			// Æ (Ñë{æ})
+			case Common::KEYCODE_SEMICOLON:	// russian key Æ
+			// Ê (Ñ{ê}ð)
+			case Common::KEYCODE_r:			// russian key Ê
+			// Ì ({Ì}òê)
+			case Common::KEYCODE_v:			// russian key Ì
+			// Ó ({Ó}ä÷)
+			case Common::KEYCODE_e:			// russian key Ó
+				if (swapAttributes(_buttonValue)) {
+					checkClass();
+					classId = -1;
+					selectedClass = newCharDetails(race, sex, classId, selectedClass, msg);
+				}
+				break;
+
+			case 1000:
+			case 1001:
+			case 1002:
+			case 1003:
+			case 1004:
+			case 1005:
+			case 1006:
+			case 1007:
+			case 1008:
+			case 1009:
+				if (_allowedClasses[_buttonValue - 1000]) {
+					selectedClass = classId = _buttonValue - 1000;
+				}
+				break;
+
+			// Ñ ({Ñ}îçä)
+			case Common::KEYCODE_c:	// russian key Ñ
+			{
+				_vm->_mode = MODE_FF;
+				bool result = saveCharacter(party._roster[freeCharList[charIndex]],
+											classId, race, sex);
+				_vm->_mode = MODE_4;
+
+				if (result)
+					restartFlag = true;
 				continue;
-			} else {
+			}
+
+			case Common::KEYCODE_RETURN:
+				classId = selectedClass;
+				break;
+
+			// Á ({Á}ðîñîê)
+			case Common::KEYCODE_COMMA:	// russian key Á
+			case Common::KEYCODE_SPACE:
+				// Re-roll the attributes
+				rollAttributes();
+				classId = -1;
+				break;
+
+			default:
+				// For all other keypresses, skip the code below the switch
+				// statement, and go to wait for the next key
+				continue;
+			}
+		} else {
+			switch (_buttonValue) {
+			case Common::KEYCODE_UP:
+				if (charIndex == 0)
+					continue;
+
+				--charIndex;
 				race = (Race)((freeCharList[charIndex] / 4) % 5);
 				sex = (Sex)(freeCharList[charIndex] & 1);
-			}
-			break;
+				break;
 
-		case Common::KEYCODE_PAGEUP:
-			for (int tempClass = selectedClass - 1; tempClass >= 0; --tempClass) {
-				if (_allowedClasses[tempClass]) {
-					selectedClass = tempClass;
-					break;
+			case Common::KEYCODE_DOWN:
+				if (++charIndex == (int)freeCharList.size()) {
+					--charIndex;
+					continue;
+				} else {
+					race = (Race)((freeCharList[charIndex] / 4) % 5);
+					sex = (Sex)(freeCharList[charIndex] & 1);
 				}
-			}
+				break;
 
-			printSelectionArrow(selectedClass);
-			continue;
+			case Common::KEYCODE_PAGEUP:
+				for (int tempClass = selectedClass - 1; tempClass >= 0; --tempClass) {
+					if (_allowedClasses[tempClass]) {
+						selectedClass = tempClass;
+						break;
+					}
+				}
 
-		case Common::KEYCODE_PAGEDOWN:
-			break;
+				printSelectionArrow(selectedClass);
+				continue;
 
-		case Common::KEYCODE_m:
-		case Common::KEYCODE_i:
-		case Common::KEYCODE_p:
-		case Common::KEYCODE_e:
-		case Common::KEYCODE_s:
-		case Common::KEYCODE_a:
-		case Common::KEYCODE_l:
-			if (swapAttributes(_buttonValue)) {
-				checkClass();
-				classId = -1;
-				selectedClass = newCharDetails(race, sex, classId, selectedClass, msg);
-			}
-			break;
+			case Common::KEYCODE_PAGEDOWN:
+				break;
 
-		case 1000:
-		case 1001:
-		case 1002:
-		case 1003:
-		case 1004:
-		case 1005:
-		case 1006:
-		case 1007:
-		case 1008:
-		case 1009:
-			if (_allowedClasses[_buttonValue - 1000]) {
-				selectedClass = classId = _buttonValue - 1000;
-			}
-			break;
+			case Common::KEYCODE_m:
+			case Common::KEYCODE_i:
+			case Common::KEYCODE_p:
+			case Common::KEYCODE_e:
+			case Common::KEYCODE_s:
+			case Common::KEYCODE_a:
+			case Common::KEYCODE_l:
+				if (swapAttributes(_buttonValue)) {
+					checkClass();
+					classId = -1;
+					selectedClass = newCharDetails(race, sex, classId, selectedClass, msg);
+				}
+				break;
 
-		case Common::KEYCODE_c: {
-			_vm->_mode = MODE_FF;
-			bool result = saveCharacter(party._roster[freeCharList[charIndex]],
-				classId, race, sex);
-			_vm->_mode = MODE_4;
+			case 1000:
+			case 1001:
+			case 1002:
+			case 1003:
+			case 1004:
+			case 1005:
+			case 1006:
+			case 1007:
+			case 1008:
+			case 1009:
+				if (_allowedClasses[_buttonValue - 1000]) {
+					selectedClass = classId = _buttonValue - 1000;
+				}
+				break;
 
-			if (result)
-				restartFlag = true;
-			continue;
-		}
+			case Common::KEYCODE_c: {
+				_vm->_mode = MODE_FF;
+				bool result = saveCharacter(party._roster[freeCharList[charIndex]],
+											classId, race, sex);
+				_vm->_mode = MODE_4;
 
-		case Common::KEYCODE_RETURN:
-			classId = selectedClass;
-			break;
+				if (result)
+					restartFlag = true;
+				continue;
+			}
 
-		case Common::KEYCODE_SPACE:
-		case Common::KEYCODE_r:
-			// Re-roll the attributes
-			rollAttributes();
-			classId = -1;
-			break;
+			case Common::KEYCODE_RETURN:
+				classId = selectedClass;
+				break;
 
-		default:
-			// For all other keypresses, skip the code below the switch
-			// statement, and go to wait for the next key
-			continue;
+			case Common::KEYCODE_SPACE:
+			case Common::KEYCODE_r:
+				// Re-roll the attributes
+				rollAttributes();
+				classId = -1;
+				break;
+
+			default:
+				// For all other keypresses, skip the code below the switch
+				// statement, and go to wait for the next key
+				continue;
+			}
 		}
 
 		if (_buttonValue != Common::KEYCODE_PAGEDOWN) {
@@ -257,18 +360,30 @@ void CreateCharacterDialog::loadButtons() {
 	_icons.load("create.icn");
 
 	// Add buttons
-	addButton(Common::Rect(132, 98, 156, 118), Common::KEYCODE_r, &_icons);
-	addButton(Common::Rect(132, 128, 156, 148), Common::KEYCODE_c, &_icons);
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		addButton(Common::Rect(132, 98, 156, 118), Common::KEYCODE_COMMA, &_icons);		// russian key Á
+		addButton(Common::Rect(132, 128, 156, 148), Common::KEYCODE_c, &_icons);		// russian key Ñ
+		addButton(Common::Rect(168, 19, 192, 39), Common::KEYCODE_k, nullptr);			// russian key Ë
+		addButton(Common::Rect(168, 43, 192, 63), Common::KEYCODE_b, nullptr);			// russian key È
+		addButton(Common::Rect(168, 67, 192, 87), Common::KEYCODE_l, nullptr);			// russian key Ä
+		addButton(Common::Rect(168, 91, 192, 111), Common::KEYCODE_SEMICOLON, nullptr);	// russian key Æ
+		addButton(Common::Rect(168, 115, 192, 135), Common::KEYCODE_r, nullptr);		// russian key Ê
+		addButton(Common::Rect(168, 139, 192, 159), Common::KEYCODE_v, nullptr);		// russian key Ì
+		addButton(Common::Rect(168, 163, 192, 183), Common::KEYCODE_e, nullptr);		// russian key Ó
+	} else {
+		addButton(Common::Rect(132, 98, 156, 118), Common::KEYCODE_r, &_icons);
+		addButton(Common::Rect(132, 128, 156, 148), Common::KEYCODE_c, &_icons);
+		addButton(Common::Rect(168, 19, 192, 39), Common::KEYCODE_n, nullptr);
+		addButton(Common::Rect(168, 43, 192, 63), Common::KEYCODE_i, nullptr);
+		addButton(Common::Rect(168, 67, 192, 87), Common::KEYCODE_p, nullptr);
+		addButton(Common::Rect(168, 91, 192, 111), Common::KEYCODE_e, nullptr);
+		addButton(Common::Rect(168, 115, 192, 135), Common::KEYCODE_s, nullptr);
+		addButton(Common::Rect(168, 139, 192, 159), Common::KEYCODE_a, nullptr);
+		addButton(Common::Rect(168, 163, 192, 183), Common::KEYCODE_l, nullptr);
+	}
 	addButton(Common::Rect(132, 158, 156, 178), Common::KEYCODE_ESCAPE, &_icons);
 	addButton(Common::Rect(86, 98, 110, 118), Common::KEYCODE_UP, &_icons);
 	addButton(Common::Rect(86, 120, 110, 140), Common::KEYCODE_DOWN, &_icons);
-	addButton(Common::Rect(168, 19, 192, 39), Common::KEYCODE_n, nullptr);
-	addButton(Common::Rect(168, 43, 192, 63), Common::KEYCODE_i, nullptr);
-	addButton(Common::Rect(168, 67, 192, 87), Common::KEYCODE_p, nullptr);
-	addButton(Common::Rect(168, 91, 192, 111), Common::KEYCODE_e, nullptr);
-	addButton(Common::Rect(168, 115, 192, 135), Common::KEYCODE_s, nullptr);
-	addButton(Common::Rect(168, 139, 192, 159), Common::KEYCODE_a, nullptr);
-	addButton(Common::Rect(168, 163, 192, 183), Common::KEYCODE_l, nullptr);
 	addButton(Common::Rect(227, 19, 239, 29), 1000, nullptr);
 	addButton(Common::Rect(227, 30, 239, 40), 1001, nullptr);
 	addButton(Common::Rect(227, 41, 239, 51), 1002, nullptr);
@@ -322,8 +437,8 @@ void CreateCharacterDialog::drawIcons2() {
 	_icons.draw(0, 58, Common::Point(62, 158));
 	_icons.draw(0, 59, Common::Point(62, 168));
 	_icons.draw(0, 61, Common::Point(220, 19));
-	_icons.draw(0, 64, Common::Point(220, 155));
-	_icons.draw(0, 65, Common::Point(220, 170));
+	_icons.draw(0, 64, Common::Point(220, 155)); 
+	_icons.draw(0, 65, Common::Point(220, 170)); 
 
 	_icons.draw(0, 0, Common::Point(132, 98));
 	_icons.draw(0, 2, Common::Point(132, 128));
@@ -470,23 +585,51 @@ void CreateCharacterDialog::drawDice() {
 }
 
 int CreateCharacterDialog::getAttribFromKeycode(int keycode) const {
-	switch (keycode) {
-	case Common::KEYCODE_m:
-		return MIGHT;
-	case Common::KEYCODE_i:
-		return INTELLECT;
-	case Common::KEYCODE_p:
-		return PERSONALITY;
-	case Common::KEYCODE_e:
-		return ENDURANCE;
-	case Common::KEYCODE_s:
-		return SPEED;
-	case Common::KEYCODE_a:
-		return ACCURACY;
-	case Common::KEYCODE_l:
-		return LUCK;
-	default:
-		return -1;
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		switch (keycode) {
+		// ë (Ñè{ë})
+		case Common::KEYCODE_k:			// russian key Ë
+			return MIGHT;
+		// è ({È}íò)
+		case Common::KEYCODE_b:         // russian key È
+			return INTELLECT;
+		// ä({Ä}óõ)
+		case Common::KEYCODE_l:         // russian key Ä
+			return PERSONALITY;
+		// æ(Ñë{æ})
+		case Common::KEYCODE_SEMICOLON: // russian key Æ
+			return ENDURANCE;
+		// ê(Ñ{ê}ð)
+		case Common::KEYCODE_r:         // russian key Ê
+			return SPEED;
+		// ì({Ì}òê)
+		case Common::KEYCODE_v:			// russian key Ì
+			return ACCURACY;
+		// ó({Ó}ä÷) 
+		case Common::KEYCODE_e:			// russian key Ó
+			return LUCK;
+		default:
+			return -1;
+		}
+	} else {
+		switch (keycode) {
+		case Common::KEYCODE_m:
+			return MIGHT;
+		case Common::KEYCODE_i:
+			return INTELLECT;
+		case Common::KEYCODE_p:
+			return PERSONALITY;
+		case Common::KEYCODE_e:
+			return ENDURANCE;
+		case Common::KEYCODE_s:
+			return SPEED;
+		case Common::KEYCODE_a:
+			return ACCURACY;
+		case Common::KEYCODE_l:
+			return LUCK;
+		default:
+			return -1;
+		}
 	}
 }
 
@@ -528,15 +671,25 @@ int CreateCharacterDialog::exchangeAttribute(int srcAttr) {
 	icons.load("create2.icn");
 
 	saveButtons();
-	addButton(Common::Rect(118, 58, 142, 78), Common::KEYCODE_ESCAPE, &_icons);
-	addButton(Common::Rect(168, 19, 192, 39), Common::KEYCODE_m);
-	addButton(Common::Rect(168, 43, 192, 63), Common::KEYCODE_i);
-	addButton(Common::Rect(168, 67, 192, 87), Common::KEYCODE_p);
-	addButton(Common::Rect(168, 91, 192, 111), Common::KEYCODE_e);
-	addButton(Common::Rect(168, 115, 192, 135), Common::KEYCODE_s);
-	addButton(Common::Rect(168, 139, 192, 159), Common::KEYCODE_a);
-	addButton(Common::Rect(168, 163, 192, 183), Common::KEYCODE_l);
-
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		addButton(Common::Rect(118, 58, 142, 78), Common::KEYCODE_ESCAPE, &_icons);
+		addButton(Common::Rect(168, 19, 192, 39), Common::KEYCODE_k);			// russian key Ë
+		addButton(Common::Rect(168, 43, 192, 63), Common::KEYCODE_b);			// russian key È
+		addButton(Common::Rect(168, 67, 192, 87), Common::KEYCODE_l);			// russian key Ä
+		addButton(Common::Rect(168, 91, 192, 111), Common::KEYCODE_SEMICOLON);	// russian key Æ
+		addButton(Common::Rect(168, 115, 192, 135), Common::KEYCODE_r);			// russian key Ê
+		addButton(Common::Rect(168, 139, 192, 159), Common::KEYCODE_v);			// russian key Ì
+		addButton(Common::Rect(168, 163, 192, 183), Common::KEYCODE_e);			// russian key Ó
+	} else {
+		addButton(Common::Rect(118, 58, 142, 78), Common::KEYCODE_ESCAPE, &_icons);
+		addButton(Common::Rect(168, 19, 192, 39), Common::KEYCODE_m);
+		addButton(Common::Rect(168, 43, 192, 63), Common::KEYCODE_i);
+		addButton(Common::Rect(168, 67, 192, 87), Common::KEYCODE_p);
+		addButton(Common::Rect(168, 91, 192, 111), Common::KEYCODE_e);
+		addButton(Common::Rect(168, 115, 192, 135), Common::KEYCODE_s);
+		addButton(Common::Rect(168, 139, 192, 159), Common::KEYCODE_a);
+		addButton(Common::Rect(168, 163, 192, 183), Common::KEYCODE_l);
+	}
 	Window &w = windows[26];
 	w.open();
 	w.writeString(Common::String::format(Res.EXCHANGE_ATTR_WITH, Res.STAT_NAMES[srcAttr]));
diff --git a/engines/xeen/dialogs/dialogs_difficulty.cpp b/engines/xeen/dialogs/dialogs_difficulty.cpp
index 0b024e1857..df80941311 100644
--- a/engines/xeen/dialogs/dialogs_difficulty.cpp
+++ b/engines/xeen/dialogs/dialogs_difficulty.cpp
@@ -20,6 +20,7 @@
  *
  */
 
+#include "common/config-manager.h"
 #include "xeen/dialogs/dialogs_difficulty.h"
 #include "xeen/resources.h"
 #include "xeen/xeen.h"
@@ -51,14 +52,23 @@ int DifficultyDialog::execute() {
 	while (!_vm->shouldExit()) {
 		events.pollEventsAndWait();
 		checkEvents(_vm);
-
-		if (_buttonValue == Common::KEYCODE_a)
-			result = ADVENTURER;
-		else if (_buttonValue == Common::KEYCODE_w)
-			result = WARRIOR;
-		else if (_buttonValue != Common::KEYCODE_ESCAPE)
-			continue;
-
+		if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+			// à ({à}âàíòþðèñò)
+			if (_buttonValue == Common::KEYCODE_f)		// russian key À
+				result = ADVENTURER;
+			// â ({â}îèí)
+			else if (_buttonValue == Common::KEYCODE_d)	// russian key Â
+				result = WARRIOR;
+			else if (_buttonValue != Common::KEYCODE_ESCAPE)
+				continue;
+		} else {
+			if (_buttonValue == Common::KEYCODE_a)
+				result = ADVENTURER;
+			else if (_buttonValue == Common::KEYCODE_w)
+				result = WARRIOR;
+			else if (_buttonValue != Common::KEYCODE_ESCAPE)
+				continue;
+		}
 		break;
 	}
 
@@ -68,8 +78,13 @@ int DifficultyDialog::execute() {
 
 void DifficultyDialog::loadButtons() {
 	_sprites.load("choice.icn");
-	addButton(Common::Rect(68, 167, 158, 187), Common::KEYCODE_a, &_sprites);
-	addButton(Common::Rect(166, 167, 256, 187), Common::KEYCODE_w, &_sprites);
+	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+		addButton(Common::Rect(68, 167, 158, 187), Common::KEYCODE_f, &_sprites);	// russian key À
+		addButton(Common::Rect(166, 167, 256, 187), Common::KEYCODE_d, &_sprites);	// russian key Â
+	} else {
+		addButton(Common::Rect(68, 167, 158, 187), Common::KEYCODE_a, &_sprites);
+		addButton(Common::Rect(166, 167, 256, 187), Common::KEYCODE_w, &_sprites);
+	}
 }
 
 } // End of namespace Xeen
diff --git a/engines/xeen/font.cpp b/engines/xeen/font.cpp
index b155322b8b..b4f44fb780 100644
--- a/engines/xeen/font.cpp
+++ b/engines/xeen/font.cpp
@@ -334,8 +334,6 @@ bool FontSurface::getNextCharWidth(int &total) {
 			getNextChar();
 		return false;
 	} else if (Common::RU_RUS == lang && c < 0) {
-		int iii = (_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (char)(0x80 + c);
-		//int iii = _fontData[(_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (int)(0x80 + c)];
 		total += _fontData[(_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (char)(0x80 + c)];
 		return false;
 	} else {


Commit: b16ab4382e0f80ae5c5f7f86968a623ea701e7fe
    https://github.com/scummvm/scummvm/commit/b16ab4382e0f80ae5c5f7f86968a623ea701e7fe
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Moving translated hotkeys to resources.
Hotkeys changed in char_info, control_panel, create_char, difficulty dialogs.

Changed paths:
    devtools/create_xeen/constants.cpp
    devtools/create_xeen/constants.h
    devtools/create_xeen/en_constants.h
    devtools/create_xeen/ru_constants.h
    dists/engine-data/xeen.ccs
    engines/xeen/dialogs/dialogs_char_info.cpp
    engines/xeen/dialogs/dialogs_control_panel.cpp
    engines/xeen/dialogs/dialogs_create_char.cpp
    engines/xeen/dialogs/dialogs_difficulty.cpp
    engines/xeen/font.cpp
    engines/xeen/party.cpp
    engines/xeen/resources.cpp
    engines/xeen/resources.h


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index bff86704bc..938010520d 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -488,6 +488,30 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	file.syncString(PHAROAH_ENDING_TEXT2());
 
 	cc.add("CONSTANTS" + num, file);
+
+	Common::MemFile keys;
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CHAR_INFO()->KEY_ITEM());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CHAR_INFO()->KEY_QUICK());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CHAR_INFO()->KEY_EXCHANGE());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_FXON());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_MUSICON());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_LOAD());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_SAVE());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_QUIT());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_MRWIZARD());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_ROLL());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_CREATE());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_MGT());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_INT());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_PER());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_END());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_SPD());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_ACY());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_LCK());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_DIFFICULTY()->KEY_ADVENTURER());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_DIFFICULTY()->KEY_WARRIOR());
+
+	cc.add("CONSTKEYS" + num, keys);
 }
 
 void writeConstants(CCArchive &cc) {
diff --git a/devtools/create_xeen/constants.h b/devtools/create_xeen/constants.h
index c523210142..78b6752654 100644
--- a/devtools/create_xeen/constants.h
+++ b/devtools/create_xeen/constants.h
@@ -1245,6 +1245,50 @@ public:
 	virtual const char *PHAROAH_ENDING_TEXT2() = 0;
 
 	void writeConstants(Common::String num, CCArchive &cc);
+
+	class KeyConstants {
+	public:
+		class DialogsCharInfo {
+		public:
+			virtual const int KEY_ITEM() = 0;
+			virtual const int KEY_QUICK() = 0;
+			virtual const int KEY_EXCHANGE() = 0;
+		};
+		virtual DialogsCharInfo *DIALOGS_CHAR_INFO() = 0;
+
+		class DialogsControlPanel {
+		public:
+			virtual const int KEY_FXON() = 0;
+			virtual const int KEY_MUSICON() = 0;
+			virtual const int KEY_LOAD() = 0;
+			virtual const int KEY_SAVE() = 0;
+			virtual const int KEY_QUIT() = 0;
+			virtual const int KEY_MRWIZARD() = 0;
+		};
+		virtual DialogsControlPanel *DIALOGS_CONTROL_PANEL() = 0;
+
+		class DialogsCreateChar {
+		public:
+			virtual const int KEY_ROLL() = 0;
+			virtual const int KEY_CREATE() = 0;
+			virtual const int KEY_MGT() = 0;
+			virtual const int KEY_INT() = 0;
+			virtual const int KEY_PER() = 0;
+			virtual const int KEY_END() = 0;
+			virtual const int KEY_SPD() = 0;
+			virtual const int KEY_ACY() = 0;
+			virtual const int KEY_LCK() = 0;
+		};
+		virtual DialogsCreateChar *DIALOGS_CREATE_CHAR() = 0;
+
+		class DialogsDifficulty {
+		public:
+			virtual const int KEY_ADVENTURER() = 0;
+			virtual const int KEY_WARRIOR() = 0;
+		};
+		virtual DialogsDifficulty *DIALOGS_DIFFICULTY() = 0;
+	};
+	virtual KeyConstants *KEY_CONSTANTS() = 0;
 };
 
 extern void writeConstants(CCArchive &cc);
diff --git a/devtools/create_xeen/en_constants.h b/devtools/create_xeen/en_constants.h
index e20c4fdb1c..2984ab8b58 100644
--- a/devtools/create_xeen/en_constants.h
+++ b/devtools/create_xeen/en_constants.h
@@ -23,6 +23,7 @@
 #pragma once
 
 #include "constants.h"
+#include "../scummvm/common/keyboard.h"
 
 class EN : public LangConstants {
 public:
@@ -1987,4 +1988,76 @@ public:
 			   "c\t000\v180Press a Key!\x3"
 			   "l\fd";
 	}
+
+	class EN_KeyConstants : public KeyConstants {
+	public:
+		class EN_DialogsCharInfo : public DialogsCharInfo {
+		public:
+			const int KEY_ITEM()     { return Common::KEYCODE_i; }
+			const int KEY_QUICK()    { return Common::KEYCODE_q; }
+			const int KEY_EXCHANGE() { return Common::KEYCODE_e; }
+		};
+		EN_DialogsCharInfo *DIALOGS_CHAR_INFO() {
+			if (!_dci)_dci = new EN_DialogsCharInfo();
+			return _dci;
+		}
+
+		class EN_DialogsControlPanel : public DialogsControlPanel {
+		public:
+			const int KEY_FXON()     { return Common::KEYCODE_e; }
+			const int KEY_MUSICON()  { return Common::KEYCODE_m; }
+			const int KEY_LOAD()     { return Common::KEYCODE_l; }
+			const int KEY_SAVE()     { return Common::KEYCODE_s; }
+			const int KEY_QUIT()     { return Common::KEYCODE_q; }
+			const int KEY_MRWIZARD() { return Common::KEYCODE_w; }
+		};
+		EN_DialogsControlPanel *DIALOGS_CONTROL_PANEL() {
+			if (!_dcp) _dcp = new EN_DialogsControlPanel();
+			return _dcp;
+		}
+
+		class EN_DialogsCreateChar : public DialogsCreateChar {
+		public:
+			const int KEY_ROLL()   { return Common::KEYCODE_r; }
+			const int KEY_CREATE() { return Common::KEYCODE_c; }
+			const int KEY_MGT()    { return Common::KEYCODE_m; }
+			const int KEY_INT()    { return Common::KEYCODE_i; }
+			const int KEY_PER()    { return Common::KEYCODE_p; }
+			const int KEY_END()    { return Common::KEYCODE_e; }
+			const int KEY_SPD()    { return Common::KEYCODE_s; }
+			const int KEY_ACY()    { return Common::KEYCODE_a; }
+			const int KEY_LCK()    { return Common::KEYCODE_l; }
+		};
+		EN_DialogsCreateChar *DIALOGS_CREATE_CHAR() {
+			if (!_dcc) _dcc = new EN_DialogsCreateChar();
+			return _dcc;
+		}
+
+		class EN_DialogsDifficulty : public DialogsDifficulty {
+		public:
+			const int KEY_ADVENTURER() { return Common::KEYCODE_a; }
+			const int KEY_WARRIOR()    { return Common::KEYCODE_w; }
+		};
+		EN_DialogsDifficulty *DIALOGS_DIFFICULTY() {
+			if (!_dd)
+				_dd = new EN_DialogsDifficulty();
+			return _dd;
+		}
+
+	private:
+		EN_DialogsCharInfo     *_dci = NULL;
+		EN_DialogsControlPanel *_dcp = NULL;
+		EN_DialogsCreateChar   *_dcc = NULL;
+		EN_DialogsDifficulty   *_dd = NULL;
+	};
+
+	EN_KeyConstants *KEY_CONSTANTS() {
+		if (!_kc)_kc = new EN_KeyConstants();
+		return _kc;
+	}
+
+private:
+	EN_KeyConstants *_kc = NULL;
 };
+
+
diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index 1dfdb6a218..50d3c57f30 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -1994,4 +1994,74 @@ public:
 			   "c\t000\v180Press a Key!\x3"
 			   "l\fd";
 	}
+
+	class RU_KeyConstants : public KeyConstants {
+	public:
+		class RU_DialogsCharInfo : public DialogsCharInfo {
+		public:
+			const int KEY_ITEM()     { return Common::KEYCODE_d; }
+			const int KEY_QUICK()    { return Common::KEYCODE_COMMA; }
+			const int KEY_EXCHANGE() { return Common::KEYCODE_c; }
+		};
+		RU_DialogsCharInfo *DIALOGS_CHAR_INFO() {
+			if (!_dci) _dci = new RU_DialogsCharInfo();
+			return _dci;
+		}
+
+		class RU_DialogsControlPanel : public DialogsControlPanel {
+		public:
+			const int KEY_FXON()     { return Common::KEYCODE_e; }
+			const int KEY_MUSICON()  { return Common::KEYCODE_v; }
+			const int KEY_LOAD()     { return Common::KEYCODE_p; }
+			const int KEY_SAVE()     { return Common::KEYCODE_c; }
+			const int KEY_QUIT()     { return Common::KEYCODE_d; }
+			const int KEY_MRWIZARD() { return Common::KEYCODE_g; }
+		};
+		RU_DialogsControlPanel *DIALOGS_CONTROL_PANEL() {
+			if (!_dcp) _dcp = new RU_DialogsControlPanel();
+			return _dcp;
+		}
+
+		class RU_DialogsCreateChar : public DialogsCreateChar {
+		public:
+			const int KEY_ROLL()   { return Common::KEYCODE_COMMA; }
+			const int KEY_CREATE() { return Common::KEYCODE_c; }
+			const int KEY_MGT()    { return Common::KEYCODE_k; }
+			const int KEY_INT()    { return Common::KEYCODE_b; }
+			const int KEY_PER()    { return Common::KEYCODE_l; }
+			const int KEY_END()    { return Common::KEYCODE_SEMICOLON; }
+			const int KEY_SPD()    { return Common::KEYCODE_r; }
+			const int KEY_ACY()    { return Common::KEYCODE_v; }
+			const int KEY_LCK()    { return Common::KEYCODE_e; }
+		};
+		RU_DialogsCreateChar *DIALOGS_CREATE_CHAR() {
+			if (!_dcc) _dcc = new RU_DialogsCreateChar();
+			return _dcc;
+		}
+
+		class RU_DialogsDifficulty : public DialogsDifficulty {
+		public:
+			const int KEY_ADVENTURER() { return Common::KEYCODE_f; }
+			const int KEY_WARRIOR()    { return Common::KEYCODE_d; }
+		};
+		RU_DialogsDifficulty *DIALOGS_DIFFICULTY() {
+			if (!_dd) _dd = new RU_DialogsDifficulty();
+			return _dd;
+		}
+
+	private:
+		RU_DialogsCharInfo     *_dci = NULL;
+		RU_DialogsControlPanel *_dcp = NULL;
+		RU_DialogsCreateChar   *_dcc = NULL;
+		RU_DialogsDifficulty *_dd = NULL;
+
+	};
+
+	RU_KeyConstants *KEY_CONSTANTS() {
+		if (!_kc) _kc = new RU_KeyConstants();
+		return _kc;
+	}
+
+private:
+	RU_KeyConstants *_kc = NULL;
 };
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index a42f8af76e..68bef8d9f0 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/dialogs/dialogs_char_info.cpp b/engines/xeen/dialogs/dialogs_char_info.cpp
index c17d9c4470..d0f964a6c5 100644
--- a/engines/xeen/dialogs/dialogs_char_info.cpp
+++ b/engines/xeen/dialogs/dialogs_char_info.cpp
@@ -20,7 +20,6 @@
  *
  */
 
-#include "common/config-manager.h"
 #include "xeen/dialogs/dialogs_awards.h"
 #include "xeen/dialogs/dialogs_char_info.h"
 #include "xeen/dialogs/dialogs_exchange.h"
@@ -81,272 +80,126 @@ void CharacterInfo::execute(int charIndex) {
 		}
 		events.clearEvents();
 
-		if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
-			switch (_buttonValue) {
-			case Common::KEYCODE_F1:
-			case Common::KEYCODE_F2:
-			case Common::KEYCODE_F3:
-			case Common::KEYCODE_F4:
-			case Common::KEYCODE_F5:
-			case Common::KEYCODE_F6:
-				_buttonValue -= Common::KEYCODE_F1;
-				if (_buttonValue < (int)(oldMode == MODE_COMBAT ? combat._combatParty.size() : party._activeParty.size())) {
-					charIndex = _buttonValue;
-					c = (oldMode != MODE_COMBAT) ? &party._activeParty[charIndex] : combat._combatParty[charIndex];
-
-					intf.highlightChar(_buttonValue);
-					redrawFlag = true;
-				} else {
-					_vm->_mode = MODE_CHARACTER_INFO;
-				}
-				break;
-
-			case Common::KEYCODE_UP:
-			case Common::KEYCODE_KP8:
-				if (_cursorCell > 0) {
-					showCursor(false);
-					--_cursorCell;
-					showCursor(true);
-				}
-				w.update();
-				break;
-
-			case Common::KEYCODE_DOWN:
-			case Common::KEYCODE_KP2:
-				if (_cursorCell < 20) {
-					showCursor(false);
-					++_cursorCell;
-					showCursor(true);
-				}
-				w.update();
-				break;
-
-			case Common::KEYCODE_LEFT:
-			case Common::KEYCODE_KP4:
-				if (_cursorCell >= 5) {
-					showCursor(false);
-					_cursorCell -= 5;
-					showCursor(true);
-				}
-				w.update();
-				break;
-
-			case Common::KEYCODE_RIGHT:
-			case Common::KEYCODE_KP6:
-				if (_cursorCell <= 15) {
-					showCursor(false);
-					_cursorCell += 5;
-					showCursor(true);
-				}
-				w.update();
-				break;
+		if (Common::KEYCODE_F1 == _buttonValue ||
+			Common::KEYCODE_F2 == _buttonValue ||
+			Common::KEYCODE_F3 == _buttonValue ||
+			Common::KEYCODE_F4 == _buttonValue ||
+			Common::KEYCODE_F5 == _buttonValue ||
+			Common::KEYCODE_F6 == _buttonValue) {
+			_buttonValue -= Common::KEYCODE_F1;
+			if (_buttonValue < (int)(oldMode == MODE_COMBAT ? combat._combatParty.size() : party._activeParty.size())) {
+				charIndex = _buttonValue;
+				c = (oldMode != MODE_COMBAT) ? &party._activeParty[charIndex] : combat._combatParty[charIndex];
+
+				intf.highlightChar(_buttonValue);
+				redrawFlag = true;
+			} else {
+				_vm->_mode = MODE_CHARACTER_INFO;
+			}
 
-			case 1001:
-			case 1002:
-			case 1003:
-			case 1004:
-			case 1005:
-			case 1006:
-			case 1007:
-			case 1008:
-			case 1009:
-			case 1010:
-			case 1011:
-			case 1012:
-			case 1013:
-			case 1014:
-			case 1015:
-			case 1016:
-			case 1017:
-			case 1018:
-			case 1019:
-			case 1020:
+		} else if (Common::KEYCODE_UP  == _buttonValue ||
+				   Common::KEYCODE_KP8 == _buttonValue) {
+			if (_cursorCell > 0) {
 				showCursor(false);
-				_cursorCell = _buttonValue - 1001;
+				--_cursorCell;
 				showCursor(true);
-				w.update();
-				// fall through
-
-			case Common::KEYCODE_RETURN:
-			case Common::KEYCODE_KP_ENTER: {
-				bool result = expandStat(_cursorCell, *c);
-				_vm->_mode = MODE_COMBAT;
-				if (result)
-					redrawFlag = true;
-				break;
 			}
+			w.update();
 
-			// Ñ ({Ñ}ìåí)
-			case Common::KEYCODE_c:	// russian key Ñ
-				if (oldMode == MODE_COMBAT) {
-					ErrorScroll::show(_vm, Res.EXCHANGING_IN_COMBAT, WT_FREEZE_WAIT);
-				} else {
-					_vm->_mode = oldMode;
-					ExchangeDialog::show(_vm, c, charIndex);
-					_vm->_mode = MODE_CHARACTER_INFO;
-					redrawFlag = true;
-				}
-				break;
-
-			// Â ({Â}åùè)
-			case Common::KEYCODE_d: // russian key Â
-				_vm->_mode = oldMode;
-				_vm->_combat->_itemFlag = _vm->_mode == MODE_COMBAT;
-				c = ItemsDialog::show(_vm, c, ITEMMODE_CHAR_INFO);
-
-				if (!c) {
-					party._stepped = true;
-					goto exit;
-				}
-
-				_vm->_mode = MODE_CHARACTER_INFO;
-				redrawFlag = true;
-				break;
-
-			// Á ({Á}ñòð)
-			case Common::KEYCODE_COMMA: // russian key Á
-				QuickReferenceDialog::show(_vm);
-				redrawFlag = true;
-				break;
-
-			case Common::KEYCODE_ESCAPE:
-				goto exit;
-
-			default:
-				break;
+		} else if (Common::KEYCODE_DOWN == _buttonValue ||
+				   Common::KEYCODE_KP2  == _buttonValue) {
+			if (_cursorCell < 20) {
+				showCursor(false);
+				++_cursorCell;
+				showCursor(true);
 			}
-		} else {
-			switch (_buttonValue) {
-			case Common::KEYCODE_F1:
-			case Common::KEYCODE_F2:
-			case Common::KEYCODE_F3:
-			case Common::KEYCODE_F4:
-			case Common::KEYCODE_F5:
-			case Common::KEYCODE_F6:
-				_buttonValue -= Common::KEYCODE_F1;
-				if (_buttonValue < (int)(oldMode == MODE_COMBAT ? combat._combatParty.size() : party._activeParty.size())) {
-					charIndex = _buttonValue;
-					c = (oldMode != MODE_COMBAT) ? &party._activeParty[charIndex] : combat._combatParty[charIndex];
-
-					intf.highlightChar(_buttonValue);
-					redrawFlag = true;
-				} else {
-					_vm->_mode = MODE_CHARACTER_INFO;
-				}
-				break;
-
-			case Common::KEYCODE_UP:
-			case Common::KEYCODE_KP8:
-				if (_cursorCell > 0) {
-					showCursor(false);
-					--_cursorCell;
-					showCursor(true);
-				}
-				w.update();
-				break;
-
-			case Common::KEYCODE_DOWN:
-			case Common::KEYCODE_KP2:
-				if (_cursorCell < 20) {
-					showCursor(false);
-					++_cursorCell;
-					showCursor(true);
-				}
-				w.update();
-				break;
-
-			case Common::KEYCODE_LEFT:
-			case Common::KEYCODE_KP4:
-				if (_cursorCell >= 5) {
-					showCursor(false);
-					_cursorCell -= 5;
-					showCursor(true);
-				}
-				w.update();
-				break;
-
-			case Common::KEYCODE_RIGHT:
-			case Common::KEYCODE_KP6:
-				if (_cursorCell <= 15) {
-					showCursor(false);
-					_cursorCell += 5;
-					showCursor(true);
-				}
-				w.update();
-				break;
+			w.update();
 
-			case 1001:
-			case 1002:
-			case 1003:
-			case 1004:
-			case 1005:
-			case 1006:
-			case 1007:
-			case 1008:
-			case 1009:
-			case 1010:
-			case 1011:
-			case 1012:
-			case 1013:
-			case 1014:
-			case 1015:
-			case 1016:
-			case 1017:
-			case 1018:
-			case 1019:
-			case 1020:
+		} else if (Common::KEYCODE_LEFT == _buttonValue ||
+				   Common::KEYCODE_KP4  == _buttonValue) {
+			if (_cursorCell >= 5) {
 				showCursor(false);
-				_cursorCell = _buttonValue - 1001;
+				_cursorCell -= 5;
 				showCursor(true);
-				w.update();
-				// fall through
-
-			case Common::KEYCODE_RETURN:
-			case Common::KEYCODE_KP_ENTER: {
-				bool result = expandStat(_cursorCell, *c);
-				_vm->_mode = MODE_COMBAT;
-				if (result)
-					redrawFlag = true;
-				break;
 			}
+			w.update();
 
-			case Common::KEYCODE_e:
-				if (oldMode == MODE_COMBAT) {
-					ErrorScroll::show(_vm, Res.EXCHANGING_IN_COMBAT, WT_FREEZE_WAIT);
-				} else {
-					_vm->_mode = oldMode;
-					ExchangeDialog::show(_vm, c, charIndex);
-					_vm->_mode = MODE_CHARACTER_INFO;
-					redrawFlag = true;
-				}
-				break;
+		} else if (Common::KEYCODE_RIGHT == _buttonValue ||
+				   Common::KEYCODE_KP6   == _buttonValue) {
+			if (_cursorCell <= 15) {
+				showCursor(false);
+				_cursorCell += 5;
+				showCursor(true);
+			}
+			w.update();
 
-			case Common::KEYCODE_i:
-				_vm->_mode = oldMode;
-				_vm->_combat->_itemFlag = _vm->_mode == MODE_COMBAT;
-				c = ItemsDialog::show(_vm, c, ITEMMODE_CHAR_INFO);
+		} else if (1001 == _buttonValue ||
+				   1002 == _buttonValue ||
+				   1003 == _buttonValue ||
+				   1004 == _buttonValue ||
+				   1005 == _buttonValue ||
+				   1006 == _buttonValue ||
+				   1007 == _buttonValue ||
+				   1008 == _buttonValue ||
+				   1009 == _buttonValue ||
+				   1010 == _buttonValue ||
+				   1011 == _buttonValue ||
+				   1012 == _buttonValue ||
+				   1013 == _buttonValue ||
+				   1014 == _buttonValue ||
+				   1015 == _buttonValue ||
+				   1016 == _buttonValue ||
+				   1017 == _buttonValue ||
+				   1018 == _buttonValue ||
+				   1019 == _buttonValue ||
+				   1020 == _buttonValue) {
+			showCursor(false);
+			_cursorCell = _buttonValue - 1001;
+			showCursor(true);
+			w.update();
+			bool result = expandStat(_cursorCell, *c);
+			_vm->_mode = MODE_COMBAT;
+			if (result)
+				redrawFlag = true;
 
-				if (!c) {
-					party._stepped = true;
-					goto exit;
-				}
+		} else if (Common::KEYCODE_RETURN   == _buttonValue ||
+				   Common::KEYCODE_KP_ENTER == _buttonValue) {
+			bool result = expandStat(_cursorCell, *c);
+			_vm->_mode = MODE_COMBAT;
+			if (result)
+				redrawFlag = true;
 
+		} else if (Res.KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_EXCHANGE == _buttonValue) {
+			if (oldMode == MODE_COMBAT) {
+				ErrorScroll::show(_vm, Res.EXCHANGING_IN_COMBAT, WT_FREEZE_WAIT);
+			} else {
+				_vm->_mode = oldMode;
+				ExchangeDialog::show(_vm, c, charIndex);
 				_vm->_mode = MODE_CHARACTER_INFO;
 				redrawFlag = true;
-				break;
+			}
 
-			case Common::KEYCODE_q:
-				QuickReferenceDialog::show(_vm);
-				redrawFlag = true;
-				break;
+		} else if (Res.KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_ITEM == _buttonValue) {
+			_vm->_mode = oldMode;
+			_vm->_combat->_itemFlag = _vm->_mode == MODE_COMBAT;
+			c = ItemsDialog::show(_vm, c, ITEMMODE_CHAR_INFO);
 
-			case Common::KEYCODE_ESCAPE:
+			if (!c) {
+				party._stepped = true;
 				goto exit;
-
-			default:
-				break;
 			}
+
+			_vm->_mode = MODE_CHARACTER_INFO;
+			redrawFlag = true;
+
+		} else if (Res.KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_QUICK == _buttonValue) {
+			QuickReferenceDialog::show(_vm);
+			redrawFlag = true;
+
+		} else if (Common::KEYCODE_ESCAPE == _buttonValue) {
+			goto exit;
 		}
+
 	} while (!_vm->shouldExit());
 exit:
 	w.close();
@@ -407,21 +260,17 @@ void CharacterInfo::addButtons() {
 	addButton(Common::Rect(177, 70, 201, 90), 1018, &_iconSprites);
 	addButton(Common::Rect(177, 93, 201, 113), 1019, &_iconSprites);
 	addButton(Common::Rect(177, 116, 201, 136), 1020, &_iconSprites);
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
-		addButton(Common::Rect(285, 11, 309, 31), Common::KEYCODE_d, &_iconSprites);		// russian key Â
-		addButton(Common::Rect(285, 43, 309, 63), Common::KEYCODE_COMMA, &_iconSprites);	// russian key Á
-		addButton(Common::Rect(285, 75, 309, 95), Common::KEYCODE_c, &_iconSprites);		// russian key Ñ
-	} else {
-		addButton(Common::Rect(285, 11, 309, 31), Common::KEYCODE_i, &_iconSprites);
-		addButton(Common::Rect(285, 43, 309, 63), Common::KEYCODE_q, &_iconSprites);
-		addButton(Common::Rect(285, 75, 309, 95), Common::KEYCODE_e, &_iconSprites);
-	}
+
+	addButton(Common::Rect(285, 11, 309, 31), Res.KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_ITEM, &_iconSprites);
+	addButton(Common::Rect(285, 43, 309, 63), Res.KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_QUICK, &_iconSprites);
+	addButton(Common::Rect(285, 75, 309, 95), Res.KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_EXCHANGE, &_iconSprites);
+
 	addButton(Common::Rect(285, 107, 309, 127), Common::KEYCODE_ESCAPE, &_iconSprites);
 	addPartyButtons(_vm);
 }
 
 const char *CharacterInfo::getDaysPlurals(int val) {
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+	if (Common::RU_RUS == g_vm->getLanguage()) {
 		int i = val % 100;
 		if (i < 5 || i > 20)
 			switch (val % 10) {
@@ -493,7 +342,7 @@ void CharacterInfo::showCursor(bool flag) {
 }
 
 const char *CharacterInfo::getBornForm(const Character &c) {
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+	if (Common::RU_RUS == g_vm->getLanguage()) {
 		switch (c._sex) {
 		case MALE:
 			return Res.BORN[0];
@@ -505,7 +354,7 @@ const char *CharacterInfo::getBornForm(const Character &c) {
 }
 
 const char *CharacterInfo::getFoodOnHandPlurals(int food) {
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+	if (Common::RU_RUS == g_vm->getLanguage()) {
 		int i = food % 100;
 		if (i < 5 || i > 20)
 			switch (food % 10) {
diff --git a/engines/xeen/dialogs/dialogs_control_panel.cpp b/engines/xeen/dialogs/dialogs_control_panel.cpp
index 84dce62c97..3ed9cfd88c 100644
--- a/engines/xeen/dialogs/dialogs_control_panel.cpp
+++ b/engines/xeen/dialogs/dialogs_control_panel.cpp
@@ -20,7 +20,6 @@
  *
  */
 
-#include "common/config-manager.h"
 #include "xeen/dialogs/dialogs_control_panel.h"
 #include "xeen/dialogs/dialogs_query.h"
 #include "xeen/party.h"
@@ -84,176 +83,72 @@ int ControlPanel::execute() {
 				return 0;
 		} while (!_buttonValue && events.timeElapsed() < 2);
 
-		if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
-			switch (_buttonValue) {
-			// Â ({Â}ûõîä)
-			case Common::KEYCODE_d:	// russian key Â
-				if (Confirm::show(g_vm, Res.CONFIRM_QUIT)) {
-					g_vm->_gameMode = GMODE_QUIT;
-					result = 1;
-				}
-				break;
-
-			// Ï ({Ï}îìîùü)
-			case Common::KEYCODE_g:	// russian key Ï
-				debugCtr = 1;	// Goober cheat sequence
-
-				if (Confirm::show(g_vm, Res.MR_WIZARD)) {
-					w.close();
-					if (!windows[2]._enabled) {
-						sound.playFX(51);
-
-						if (g_vm->getGameID() == GType_WorldOfXeen) {
-							map._loadCcNum = 0;
-							map.load(28);
-							party._mazeDirection = DIR_EAST;
-						} else {
-							map._loadCcNum = 1;
-							map.load(29);
-							party._mazeDirection = DIR_SOUTH;
-						}
-						party.moveToRunLocation();
-					}
-
-					party._gems = 0;
-					result = 2;
-				}
-				break;
-
-			// Ç ({Ç}àãðóçèòü)
-			case Common::KEYCODE_p:	// russian key Ç
-				if (_vm->_mode == MODE_COMBAT) {
-					ErrorScroll::show(_vm, Res.NO_LOADING_IN_COMBAT);
-				} else {
-					// Close dialog and show loading dialog
-					result = 3;
-				}
-				break;
-
-			// Ñ ({Ñ}îõðàíèòü)
-			case Common::KEYCODE_c:	// russian key Ñ
-				if (_vm->_mode == MODE_COMBAT) {
-					ErrorScroll::show(_vm, Res.NO_SAVING_IN_COMBAT);
-				} else {
-					// Close dialog and show saving dialog
-					result = 4;
-				}
-				break;
-
-			// Ó (Çâ{ó}ê)
-			case Common::KEYCODE_e:	// russian key Ó
-				sound.setFxOn(!sound._fxOn);
-				break;
-
-			// Ì ({Ì}óçûêà)
-			case Common::KEYCODE_v:	// russian key Ì
-				sound.setMusicOn(!sound._musicOn);
-				break;
-
-			case Common::KEYCODE_ESCAPE:
+		if (Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_QUIT == _buttonValue) {
+			if (Confirm::show(g_vm, Res.CONFIRM_QUIT)) {
+				g_vm->_gameMode = GMODE_QUIT;
 				result = 1;
-				break;
-
-			// Goober cheat sequence
-			case Common::KEYCODE_o:
-				debugCtr = (debugCtr == 1 || debugCtr == 2) ? 2 : 0;
-				break;
-			case Common::KEYCODE_b:
-				debugCtr = (debugCtr == 2) ? 3 : 0;
-				break;
-			case Common::KEYCODE_r:
-				if (debugCtr == 3)
-					_debugFlag = true;
-				else
-					debugCtr = 0;
-				break;
-
-			default:
-				break;
 			}
-		} else {
-			switch (_buttonValue) {
-			case Common::KEYCODE_q:
-				if (Confirm::show(g_vm, Res.CONFIRM_QUIT)) {
-					g_vm->_gameMode = GMODE_QUIT;
-					result = 1;
-				}
-				break;
-
-			case Common::KEYCODE_w:
-				if (Confirm::show(g_vm, Res.MR_WIZARD)) {
-					w.close();
-					if (!windows[2]._enabled) {
-						sound.playFX(51);
-
-						if (g_vm->getGameID() == GType_WorldOfXeen) {
-							map._loadCcNum = 0;
-							map.load(28);
-							party._mazeDirection = DIR_EAST;
-						} else {
-							map._loadCcNum = 1;
-							map.load(29);
-							party._mazeDirection = DIR_SOUTH;
-						}
-						party.moveToRunLocation();
-					}
 
-					party._gems = 0;
-					result = 2;
-				}
-				break;
-
-			case Common::KEYCODE_l:
-				if (_vm->_mode == MODE_COMBAT) {
-					ErrorScroll::show(_vm, Res.NO_LOADING_IN_COMBAT);
-				} else {
-					// Close dialog and show loading dialog
-					result = 3;
-				}
-				break;
-
-			case Common::KEYCODE_s:
-				if (_vm->_mode == MODE_COMBAT) {
-					ErrorScroll::show(_vm, Res.NO_SAVING_IN_COMBAT);
-				} else {
-					// Close dialog and show saving dialog
-					result = 4;
+		} else if (Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_MRWIZARD == _buttonValue) {
+			if (Confirm::show(g_vm, Res.MR_WIZARD)) {
+				w.close();
+				if (!windows[2]._enabled) {
+					sound.playFX(51);
+
+					if (g_vm->getGameID() == GType_WorldOfXeen) {
+						map._loadCcNum = 0;
+						map.load(28);
+						party._mazeDirection = DIR_EAST;
+					} else {
+						map._loadCcNum = 1;
+						map.load(29);
+						party._mazeDirection = DIR_SOUTH;
+					}
+					party.moveToRunLocation();
 				}
-				break;
 
-			case Common::KEYCODE_e:
-				sound.setFxOn(!sound._fxOn);
-				break;
+				party._gems = 0;
+				result = 2;
+			}
 
-			case Common::KEYCODE_m:
-				sound.setMusicOn(!sound._musicOn);
-				break;
+		} else if (Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_LOAD == _buttonValue) {
+			if (_vm->_mode == MODE_COMBAT) {
+				ErrorScroll::show(_vm, Res.NO_LOADING_IN_COMBAT);
+			} else {
+				// Close dialog and show loading dialog
+				result = 3;
+			}
 
-			case Common::KEYCODE_ESCAPE:
-				result = 1;
-				break;
-
-			// Goober cheat sequence
-			case Common::KEYCODE_g:
-				debugCtr = 1;
-				break;
-			case Common::KEYCODE_o:
-				debugCtr = (debugCtr == 1 || debugCtr == 2) ? 2 : 0;
-				break;
-			case Common::KEYCODE_b:
-				debugCtr = (debugCtr == 2) ? 3 : 0;
-				break;
-			case Common::KEYCODE_r:
-				if (debugCtr == 3)
-					_debugFlag = true;
-				else
-					debugCtr = 0;
-				break;
-
-			default:
-				break;
+		} else if (Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_SAVE == _buttonValue) {
+			if (_vm->_mode == MODE_COMBAT) {
+				ErrorScroll::show(_vm, Res.NO_SAVING_IN_COMBAT);
+			} else {
+				// Close dialog and show saving dialog
+				result = 4;
 			}
+
+		} else if (Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_FXON == _buttonValue) {
+			sound.setFxOn(!sound._fxOn);
+
+		} else if (Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_MUSICON == _buttonValue) {
+			sound.setMusicOn(!sound._musicOn);
+
+		} else if (Common::KEYCODE_ESCAPE == _buttonValue) {
+			result = 1;
+
+		} else if (Common::KEYCODE_g == _buttonValue) { // Goober cheat sequence
+			debugCtr = 1;
+		} else if (Common::KEYCODE_o == _buttonValue) {
+			debugCtr = (debugCtr == 1 || debugCtr == 2) ? 2 : 0;
+		} else if (Common::KEYCODE_b == _buttonValue) {
+			debugCtr = (debugCtr == 2) ? 3 : 0;
+		} else if (Common::KEYCODE_r == _buttonValue) {
+			if (debugCtr == 3)
+				_debugFlag = true;
+			else
+				debugCtr = 0;
 		}
+
 	} while (!result);
 
 	w.close();
@@ -271,27 +166,17 @@ int ControlPanel::execute() {
 
 void ControlPanel::loadButtons() {
 	_iconSprites.load("cpanel.icn");
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
-		addButton(Common::Rect(214, 56, 244, 69), Common::KEYCODE_e, 0, &_iconSprites);		// russian key Ó
-		addButton(Common::Rect(214, 75, 244, 88), Common::KEYCODE_v, 0, &_iconSprites);		// russian key Ì
-		addButton(Common::Rect(135, 56, 165, 69), Common::KEYCODE_p, 0, &_iconSprites);		// russian key Ç
-		addButton(Common::Rect(135, 75, 165, 88), Common::KEYCODE_c, 0, &_iconSprites);		// russian key Ñ
-		addButton(Common::Rect(135, 94, 165, 107), Common::KEYCODE_d, 0, &_iconSprites);	// russian key Â
-		addButton(Common::Rect(175, 113, 205, 126), Common::KEYCODE_g, 0, &_iconSprites);	// russian key Ï
-	} else {
-
-		addButton(Common::Rect(214, 56, 244, 69), Common::KEYCODE_e, 0, &_iconSprites);
-		addButton(Common::Rect(214, 75, 244, 88), Common::KEYCODE_m, 0, &_iconSprites);
-		addButton(Common::Rect(135, 56, 165, 69), Common::KEYCODE_l, 0, &_iconSprites);
-		addButton(Common::Rect(135, 75, 165, 88), Common::KEYCODE_s, 0, &_iconSprites);
-
-		// For ScummVM we've merged both Save and Save As into a single
-		// save item, so we don't need this one
-		addButton(Common::Rect(), 0);
-
-		addButton(Common::Rect(135, 94, 165, 107), Common::KEYCODE_q, 0, &_iconSprites);
-		addButton(Common::Rect(175, 113, 205, 126), Common::KEYCODE_w, 0, &_iconSprites);
-	}
+	addButton(Common::Rect(214, 56, 244, 69), Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_FXON, 0, &_iconSprites);
+	addButton(Common::Rect(214, 75, 244, 88), Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_MUSICON, 0, &_iconSprites);
+	addButton(Common::Rect(135, 56, 165, 69), Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_LOAD, 0, &_iconSprites);
+	addButton(Common::Rect(135, 75, 165, 88), Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_SAVE, 0, &_iconSprites);
+
+	// For ScummVM we've merged both Save and Save As into a single
+	// save item, so we don't need this one
+	addButton(Common::Rect(), 0);
+
+	addButton(Common::Rect(135, 94, 165, 107), Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_QUIT, 0, &_iconSprites);
+	addButton(Common::Rect(175, 113, 205, 126), Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_MRWIZARD, 0, &_iconSprites);
 }
 
 Common::String ControlPanel::getButtonText() {
diff --git a/engines/xeen/dialogs/dialogs_create_char.cpp b/engines/xeen/dialogs/dialogs_create_char.cpp
index a13cf31c58..8c0a835572 100644
--- a/engines/xeen/dialogs/dialogs_create_char.cpp
+++ b/engines/xeen/dialogs/dialogs_create_char.cpp
@@ -20,7 +20,6 @@
  *
  */
 
-#include "common/config-manager.h"
 #include "xeen/dialogs/dialogs_create_char.h"
 #include "xeen/dialogs/dialogs_input.h"
 #include "xeen/xeen.h"
@@ -131,198 +130,88 @@ void CreateCharacterDialog::execute() {
 		// Handling for different actions
 		if (_buttonValue == Common::KEYCODE_ESCAPE)
 			break;
-		if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
-			switch (_buttonValue) {
-			case Common::KEYCODE_UP:
-				if (charIndex == 0)
-					continue;
 
-				--charIndex;
-				race = (Race)((freeCharList[charIndex] / 4) % 5);
-				sex = (Sex)(freeCharList[charIndex] & 1);
-				break;
-
-			case Common::KEYCODE_DOWN:
-				if (++charIndex == (int)freeCharList.size()) {
-					--charIndex;
-					continue;
-				} else {
-					race = (Race)((freeCharList[charIndex] / 4) % 5);
-					sex = (Sex)(freeCharList[charIndex] & 1);
-				}
-				break;
-
-			case Common::KEYCODE_PAGEUP:
-				for (int tempClass = selectedClass - 1; tempClass >= 0; --tempClass) {
-					if (_allowedClasses[tempClass]) {
-						selectedClass = tempClass;
-						break;
-					}
-				}
-
-				printSelectionArrow(selectedClass);
+		
+		if (Common::KEYCODE_UP == _buttonValue) {
+			if (charIndex == 0)
 				continue;
 
-			case Common::KEYCODE_PAGEDOWN:
-				break;
-
-			// Ë (Ñè{ë})
-			case Common::KEYCODE_k:			// russian key Ë
-			// È ({È}íò)
-			case Common::KEYCODE_b:			// russian key È
-			// Ä ({Ä}óõ)
-			case Common::KEYCODE_l:			// russian key Ä
-			// Æ (Ñë{æ})
-			case Common::KEYCODE_SEMICOLON:	// russian key Æ
-			// Ê (Ñ{ê}ð)
-			case Common::KEYCODE_r:			// russian key Ê
-			// Ì ({Ì}òê)
-			case Common::KEYCODE_v:			// russian key Ì
-			// Ó ({Ó}ä÷)
-			case Common::KEYCODE_e:			// russian key Ó
-				if (swapAttributes(_buttonValue)) {
-					checkClass();
-					classId = -1;
-					selectedClass = newCharDetails(race, sex, classId, selectedClass, msg);
-				}
-				break;
-
-			case 1000:
-			case 1001:
-			case 1002:
-			case 1003:
-			case 1004:
-			case 1005:
-			case 1006:
-			case 1007:
-			case 1008:
-			case 1009:
-				if (_allowedClasses[_buttonValue - 1000]) {
-					selectedClass = classId = _buttonValue - 1000;
-				}
-				break;
-
-			// Ñ ({Ñ}îçä)
-			case Common::KEYCODE_c:	// russian key Ñ
-			{
-				_vm->_mode = MODE_FF;
-				bool result = saveCharacter(party._roster[freeCharList[charIndex]],
-											classId, race, sex);
-				_vm->_mode = MODE_4;
-
-				if (result)
-					restartFlag = true;
-				continue;
-			}
-
-			case Common::KEYCODE_RETURN:
-				classId = selectedClass;
-				break;
-
-			// Á ({Á}ðîñîê)
-			case Common::KEYCODE_COMMA:	// russian key Á
-			case Common::KEYCODE_SPACE:
-				// Re-roll the attributes
-				rollAttributes();
-				classId = -1;
-				break;
-
-			default:
-				// For all other keypresses, skip the code below the switch
-				// statement, and go to wait for the next key
-				continue;
-			}
-		} else {
-			switch (_buttonValue) {
-			case Common::KEYCODE_UP:
-				if (charIndex == 0)
-					continue;
+			--charIndex;
+			race = (Race)((freeCharList[charIndex] / 4) % 5);
+			sex = (Sex)(freeCharList[charIndex] & 1);
 
+		} else if (Common::KEYCODE_DOWN == _buttonValue) {
+			if (++charIndex == (int)freeCharList.size()) {
 				--charIndex;
+				continue;
+			} else {
 				race = (Race)((freeCharList[charIndex] / 4) % 5);
 				sex = (Sex)(freeCharList[charIndex] & 1);
-				break;
+			}
 
-			case Common::KEYCODE_DOWN:
-				if (++charIndex == (int)freeCharList.size()) {
-					--charIndex;
-					continue;
-				} else {
-					race = (Race)((freeCharList[charIndex] / 4) % 5);
-					sex = (Sex)(freeCharList[charIndex] & 1);
+		} else if (Common::KEYCODE_PAGEUP == _buttonValue) {
+			for (int tempClass = selectedClass - 1; tempClass >= 0; --tempClass) {
+				if (_allowedClasses[tempClass]) {
+					selectedClass = tempClass;
+					break;
 				}
-				break;
+			}
 
-			case Common::KEYCODE_PAGEUP:
-				for (int tempClass = selectedClass - 1; tempClass >= 0; --tempClass) {
-					if (_allowedClasses[tempClass]) {
-						selectedClass = tempClass;
-						break;
-					}
-				}
+			printSelectionArrow(selectedClass);
+			continue;
 
-				printSelectionArrow(selectedClass);
-				continue;
-
-			case Common::KEYCODE_PAGEDOWN:
-				break;
+		} else if (Common::KEYCODE_PAGEDOWN == _buttonValue) {
 
-			case Common::KEYCODE_m:
-			case Common::KEYCODE_i:
-			case Common::KEYCODE_p:
-			case Common::KEYCODE_e:
-			case Common::KEYCODE_s:
-			case Common::KEYCODE_a:
-			case Common::KEYCODE_l:
-				if (swapAttributes(_buttonValue)) {
-					checkClass();
-					classId = -1;
-					selectedClass = newCharDetails(race, sex, classId, selectedClass, msg);
-				}
-				break;
+		} else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_MGT == _buttonValue ||
+				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_INT == _buttonValue ||
+				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_PER == _buttonValue ||
+				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_END == _buttonValue ||
+				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_SPD == _buttonValue ||
+				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ACY == _buttonValue ||
+				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_LCK == _buttonValue) {
+			if (swapAttributes(_buttonValue)) {
+				checkClass();
+				classId = -1;
+				selectedClass = newCharDetails(race, sex, classId, selectedClass, msg);
+			}
 
-			case 1000:
-			case 1001:
-			case 1002:
-			case 1003:
-			case 1004:
-			case 1005:
-			case 1006:
-			case 1007:
-			case 1008:
-			case 1009:
-				if (_allowedClasses[_buttonValue - 1000]) {
-					selectedClass = classId = _buttonValue - 1000;
-				}
-				break;
+		} else if (1000 == _buttonValue ||
+				   1001 == _buttonValue ||
+				   1002 == _buttonValue ||
+				   1003 == _buttonValue ||
+				   1004 == _buttonValue ||
+				   1005 == _buttonValue ||
+				   1006 == _buttonValue ||
+				   1007 == _buttonValue ||
+				   1008 == _buttonValue ||
+				   1009 == _buttonValue) {
+			if (_allowedClasses[_buttonValue - 1000]) {
+				selectedClass = classId = _buttonValue - 1000;
+			}
 
-			case Common::KEYCODE_c: {
-				_vm->_mode = MODE_FF;
-				bool result = saveCharacter(party._roster[freeCharList[charIndex]],
-											classId, race, sex);
-				_vm->_mode = MODE_4;
+		} else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_CREATE == _buttonValue) {
+			_vm->_mode = MODE_FF;
+			bool result = saveCharacter(party._roster[freeCharList[charIndex]],
+										classId, race, sex);
+			_vm->_mode = MODE_4;
 
-				if (result)
-					restartFlag = true;
-				continue;
-			}
+			if (result)
+				restartFlag = true;
+			continue;
 
-			case Common::KEYCODE_RETURN:
-				classId = selectedClass;
-				break;
+		} else if (Common::KEYCODE_RETURN == _buttonValue) {
+			classId = selectedClass;
 
-			case Common::KEYCODE_SPACE:
-			case Common::KEYCODE_r:
-				// Re-roll the attributes
-				rollAttributes();
-				classId = -1;
-				break;
+		} else if (Common::KEYCODE_SPACE == _buttonValue ||
+				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ROLL == _buttonValue) {
+			// Re-roll the attributes
+			rollAttributes();
+			classId = -1;
 
-			default:
-				// For all other keypresses, skip the code below the switch
-				// statement, and go to wait for the next key
-				continue;
-			}
+		} else {
+			// For all other keypresses, skip the code below the switch
+			// statement, and go to wait for the next key
+			continue;
 		}
 
 		if (_buttonValue != Common::KEYCODE_PAGEDOWN) {
@@ -360,27 +249,16 @@ void CreateCharacterDialog::loadButtons() {
 	_icons.load("create.icn");
 
 	// Add buttons
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
-		addButton(Common::Rect(132, 98, 156, 118), Common::KEYCODE_COMMA, &_icons);		// russian key Á
-		addButton(Common::Rect(132, 128, 156, 148), Common::KEYCODE_c, &_icons);		// russian key Ñ
-		addButton(Common::Rect(168, 19, 192, 39), Common::KEYCODE_k, nullptr);			// russian key Ë
-		addButton(Common::Rect(168, 43, 192, 63), Common::KEYCODE_b, nullptr);			// russian key È
-		addButton(Common::Rect(168, 67, 192, 87), Common::KEYCODE_l, nullptr);			// russian key Ä
-		addButton(Common::Rect(168, 91, 192, 111), Common::KEYCODE_SEMICOLON, nullptr);	// russian key Æ
-		addButton(Common::Rect(168, 115, 192, 135), Common::KEYCODE_r, nullptr);		// russian key Ê
-		addButton(Common::Rect(168, 139, 192, 159), Common::KEYCODE_v, nullptr);		// russian key Ì
-		addButton(Common::Rect(168, 163, 192, 183), Common::KEYCODE_e, nullptr);		// russian key Ó
-	} else {
-		addButton(Common::Rect(132, 98, 156, 118), Common::KEYCODE_r, &_icons);
-		addButton(Common::Rect(132, 128, 156, 148), Common::KEYCODE_c, &_icons);
-		addButton(Common::Rect(168, 19, 192, 39), Common::KEYCODE_n, nullptr);
-		addButton(Common::Rect(168, 43, 192, 63), Common::KEYCODE_i, nullptr);
-		addButton(Common::Rect(168, 67, 192, 87), Common::KEYCODE_p, nullptr);
-		addButton(Common::Rect(168, 91, 192, 111), Common::KEYCODE_e, nullptr);
-		addButton(Common::Rect(168, 115, 192, 135), Common::KEYCODE_s, nullptr);
-		addButton(Common::Rect(168, 139, 192, 159), Common::KEYCODE_a, nullptr);
-		addButton(Common::Rect(168, 163, 192, 183), Common::KEYCODE_l, nullptr);
-	}
+	addButton(Common::Rect(132, 98, 156, 118), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ROLL, &_icons);
+	addButton(Common::Rect(132, 128, 156, 148), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_CREATE, &_icons);
+	addButton(Common::Rect(168, 19, 192, 39), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_MGT, nullptr);
+	addButton(Common::Rect(168, 43, 192, 63),   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_INT, nullptr);
+	addButton(Common::Rect(168, 67, 192, 87),   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_PER, nullptr);
+	addButton(Common::Rect(168, 91, 192, 111),  Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_END, nullptr);
+	addButton(Common::Rect(168, 115, 192, 135), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_SPD, nullptr);
+	addButton(Common::Rect(168, 139, 192, 159), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ACY, nullptr);
+	addButton(Common::Rect(168, 163, 192, 183), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_LCK, nullptr);
+
 	addButton(Common::Rect(132, 158, 156, 178), Common::KEYCODE_ESCAPE, &_icons);
 	addButton(Common::Rect(86, 98, 110, 118), Common::KEYCODE_UP, &_icons);
 	addButton(Common::Rect(86, 120, 110, 140), Common::KEYCODE_DOWN, &_icons);
@@ -585,52 +463,22 @@ void CreateCharacterDialog::drawDice() {
 }
 
 int CreateCharacterDialog::getAttribFromKeycode(int keycode) const {
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
-		switch (keycode) {
-		// ë (Ñè{ë})
-		case Common::KEYCODE_k:			// russian key Ë
-			return MIGHT;
-		// è ({È}íò)
-		case Common::KEYCODE_b:         // russian key È
-			return INTELLECT;
-		// ä({Ä}óõ)
-		case Common::KEYCODE_l:         // russian key Ä
-			return PERSONALITY;
-		// æ(Ñë{æ})
-		case Common::KEYCODE_SEMICOLON: // russian key Æ
-			return ENDURANCE;
-		// ê(Ñ{ê}ð)
-		case Common::KEYCODE_r:         // russian key Ê
-			return SPEED;
-		// ì({Ì}òê)
-		case Common::KEYCODE_v:			// russian key Ì
-			return ACCURACY;
-		// ó({Ó}ä÷) 
-		case Common::KEYCODE_e:			// russian key Ó
-			return LUCK;
-		default:
-			return -1;
-		}
-	} else {
-		switch (keycode) {
-		case Common::KEYCODE_m:
-			return MIGHT;
-		case Common::KEYCODE_i:
-			return INTELLECT;
-		case Common::KEYCODE_p:
-			return PERSONALITY;
-		case Common::KEYCODE_e:
-			return ENDURANCE;
-		case Common::KEYCODE_s:
-			return SPEED;
-		case Common::KEYCODE_a:
-			return ACCURACY;
-		case Common::KEYCODE_l:
-			return LUCK;
-		default:
-			return -1;
-		}
-	}
+	if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_MGT == keycode)
+		return MIGHT;
+	else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_INT == keycode)
+		return INTELLECT;
+	else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_PER == keycode)
+		return PERSONALITY;
+	else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_END == keycode)
+		return ENDURANCE;
+	else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_SPD == keycode)
+		return SPEED;
+	else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ACY == keycode)
+		return ACCURACY;
+	else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_LCK == keycode)
+		return LUCK;
+	else
+		return -1;
 }
 
 bool CreateCharacterDialog::swapAttributes(int keycode) {
@@ -671,25 +519,16 @@ int CreateCharacterDialog::exchangeAttribute(int srcAttr) {
 	icons.load("create2.icn");
 
 	saveButtons();
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
-		addButton(Common::Rect(118, 58, 142, 78), Common::KEYCODE_ESCAPE, &_icons);
-		addButton(Common::Rect(168, 19, 192, 39), Common::KEYCODE_k);			// russian key Ë
-		addButton(Common::Rect(168, 43, 192, 63), Common::KEYCODE_b);			// russian key È
-		addButton(Common::Rect(168, 67, 192, 87), Common::KEYCODE_l);			// russian key Ä
-		addButton(Common::Rect(168, 91, 192, 111), Common::KEYCODE_SEMICOLON);	// russian key Æ
-		addButton(Common::Rect(168, 115, 192, 135), Common::KEYCODE_r);			// russian key Ê
-		addButton(Common::Rect(168, 139, 192, 159), Common::KEYCODE_v);			// russian key Ì
-		addButton(Common::Rect(168, 163, 192, 183), Common::KEYCODE_e);			// russian key Ó
-	} else {
-		addButton(Common::Rect(118, 58, 142, 78), Common::KEYCODE_ESCAPE, &_icons);
-		addButton(Common::Rect(168, 19, 192, 39), Common::KEYCODE_m);
-		addButton(Common::Rect(168, 43, 192, 63), Common::KEYCODE_i);
-		addButton(Common::Rect(168, 67, 192, 87), Common::KEYCODE_p);
-		addButton(Common::Rect(168, 91, 192, 111), Common::KEYCODE_e);
-		addButton(Common::Rect(168, 115, 192, 135), Common::KEYCODE_s);
-		addButton(Common::Rect(168, 139, 192, 159), Common::KEYCODE_a);
-		addButton(Common::Rect(168, 163, 192, 183), Common::KEYCODE_l);
-	}
+
+	addButton(Common::Rect(118, 58, 142, 78), Common::KEYCODE_ESCAPE, &_icons);
+	addButton(Common::Rect(168, 19, 192, 39),   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_MGT);
+	addButton(Common::Rect(168, 43, 192, 63),   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_INT);
+	addButton(Common::Rect(168, 67, 192, 87),   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_PER);
+	addButton(Common::Rect(168, 91, 192, 111),  Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_END);
+	addButton(Common::Rect(168, 115, 192, 135), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_SPD);
+	addButton(Common::Rect(168, 139, 192, 159), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ACY);
+	addButton(Common::Rect(168, 163, 192, 183), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_LCK);
+
 	Window &w = windows[26];
 	w.open();
 	w.writeString(Common::String::format(Res.EXCHANGE_ATTR_WITH, Res.STAT_NAMES[srcAttr]));
diff --git a/engines/xeen/dialogs/dialogs_difficulty.cpp b/engines/xeen/dialogs/dialogs_difficulty.cpp
index df80941311..566f9b2631 100644
--- a/engines/xeen/dialogs/dialogs_difficulty.cpp
+++ b/engines/xeen/dialogs/dialogs_difficulty.cpp
@@ -20,7 +20,6 @@
  *
  */
 
-#include "common/config-manager.h"
 #include "xeen/dialogs/dialogs_difficulty.h"
 #include "xeen/resources.h"
 #include "xeen/xeen.h"
@@ -52,23 +51,14 @@ int DifficultyDialog::execute() {
 	while (!_vm->shouldExit()) {
 		events.pollEventsAndWait();
 		checkEvents(_vm);
-		if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
-			// à ({à}âàíòþðèñò)
-			if (_buttonValue == Common::KEYCODE_f)		// russian key À
-				result = ADVENTURER;
-			// â ({â}îèí)
-			else if (_buttonValue == Common::KEYCODE_d)	// russian key Â
-				result = WARRIOR;
-			else if (_buttonValue != Common::KEYCODE_ESCAPE)
-				continue;
-		} else {
-			if (_buttonValue == Common::KEYCODE_a)
-				result = ADVENTURER;
-			else if (_buttonValue == Common::KEYCODE_w)
-				result = WARRIOR;
-			else if (_buttonValue != Common::KEYCODE_ESCAPE)
-				continue;
-		}
+
+		if (Res.KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_ADVENTURER == _buttonValue)
+			result = ADVENTURER;
+		else if (Res.KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_WARRIOR == _buttonValue)
+			result = WARRIOR;
+		else if (Common::KEYCODE_ESCAPE != _buttonValue)
+			continue;
+
 		break;
 	}
 
@@ -78,13 +68,9 @@ int DifficultyDialog::execute() {
 
 void DifficultyDialog::loadButtons() {
 	_sprites.load("choice.icn");
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
-		addButton(Common::Rect(68, 167, 158, 187), Common::KEYCODE_f, &_sprites);	// russian key À
-		addButton(Common::Rect(166, 167, 256, 187), Common::KEYCODE_d, &_sprites);	// russian key Â
-	} else {
-		addButton(Common::Rect(68, 167, 158, 187), Common::KEYCODE_a, &_sprites);
-		addButton(Common::Rect(166, 167, 256, 187), Common::KEYCODE_w, &_sprites);
-	}
+
+	addButton(Common::Rect(68, 167, 158, 187),  Res.KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_ADVENTURER, &_sprites);
+	addButton(Common::Rect(166, 167, 256, 187), Res.KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_WARRIOR, &_sprites);
 }
 
 } // End of namespace Xeen
diff --git a/engines/xeen/font.cpp b/engines/xeen/font.cpp
index b4f44fb780..bdf15af130 100644
--- a/engines/xeen/font.cpp
+++ b/engines/xeen/font.cpp
@@ -20,7 +20,6 @@
  *
  */
 
-#include "common/config-manager.h"
 #include "common/endian.h"
 #include "xeen/font.h"
 #include "xeen/resources.h"
@@ -39,7 +38,7 @@ FontSurface::FontSurface() : XSurface(), _msgWraps(false), _displayString(nullpt
 		_writePos(*FontData::_fontWritePos) {
 	setTextColor(0);
 
-	lang = Common::parseLanguage(ConfMan.get("language"));
+	lang = g_vm->getLanguage();
 	if (Common::RU_RUS == lang) {
 		_fntEnOffset            = 0x0000;
 		_fntNonEnOffset         = 0x0800;
@@ -62,7 +61,7 @@ FontSurface::FontSurface(int wv, int hv) : XSurface(wv, hv),
 	create(w, h);
 	setTextColor(0);
 
-	lang = Common::parseLanguage(ConfMan.get("language"));
+	lang = g_vm->getLanguage();
 	if (Common::RU_RUS == lang) {
 		_fntEnOffset            = 0x0000;
 		_fntNonEnOffset         = 0x0800;
diff --git a/engines/xeen/party.cpp b/engines/xeen/party.cpp
index a2c2982530..55d13af5a8 100644
--- a/engines/xeen/party.cpp
+++ b/engines/xeen/party.cpp
@@ -20,7 +20,6 @@
  *
  */
 
-#include "common/config-manager.h"
 #include "common/scummsys.h"
 #include "common/algorithm.h"
 #include "xeen/party.h"
@@ -822,7 +821,7 @@ bool Party::arePacksFull() const {
 }
 
 const char *Party::getFoundForm(const Character &c) {
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+	if (Common::RU_RUS == g_vm->getLanguage()) {
 		switch (c._sex) {
 		case MALE:
 			return Res.FOUND[0];
@@ -1484,7 +1483,7 @@ bool Party::giveTake(int takeMode, uint takeVal, int giveMode, uint giveVal, int
 }
 
 const char *Party::getPickLockForm(const Character &c) {
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+	if (Common::RU_RUS == g_vm->getLanguage()) {
 		switch (c._sex) {
 		case MALE:
 			return Res.PICK_FORM[0];
@@ -1496,7 +1495,7 @@ const char *Party::getPickLockForm(const Character &c) {
 }
 
 const char *Party::getUnablePickLockForm(const Character &c) {
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language"))) {
+	if (Common::RU_RUS == g_vm->getLanguage()) {
 		switch (c._sex) {
 		case MALE:
 			return Res.UNABLE_TO_PICK_FORM[0];
diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp
index 7a17d0180c..3bc06388d3 100644
--- a/engines/xeen/resources.cpp
+++ b/engines/xeen/resources.cpp
@@ -20,7 +20,6 @@
  *
  */
 
-#include "common/config-manager.h"
 #include "common/scummsys.h"
 #include "xeen/resources.h"
 #include "xeen/files.h"
@@ -61,8 +60,8 @@ Resources::Resources() {
 }
 
 void Resources::loadData() {
-	Common::Language lang = Common::parseLanguage(ConfMan.get("language"));
-	ResFile file(_buffer, lang);
+	Common::Language lang = g_vm->getLanguage();
+	ResFile file("CONSTANTS_", _buffer, lang);
 	file.syncString(CLOUDS_CREDITS);
 	file.syncString(DARK_SIDE_CREDITS);
 	file.syncString(SWORDS_CREDITS1);
@@ -420,6 +419,32 @@ void Resources::loadData() {
 	file.syncString(DARKSIDE_ENDING2);
 	file.syncString(PHAROAH_ENDING_TEXT1);
 	file.syncString(PHAROAH_ENDING_TEXT2);
+
+	ResFile keys("CONSTKEYS_", _buffer, lang);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_ITEM);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_QUICK);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_EXCHANGE);
+
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_FXON);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_MUSICON);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_LOAD);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_SAVE);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_QUIT);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_MRWIZARD);
+
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ROLL);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_CREATE);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_MGT);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_INT);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_PER);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_END);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_SPD);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ACY);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_LCK);
+
+
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_ADVENTURER);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_WARRIOR);
 }
 
 } // End of namespace Xeen
diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h
index 378647c5a3..818ee669fb 100644
--- a/engines/xeen/resources.h
+++ b/engines/xeen/resources.h
@@ -48,7 +48,7 @@ class Resources {
 		char *_buffer;
 		char *_buffStart;
 	public:
-		ResFile(char *buffer, int num) : File("CONSTANTS_" + Common::String::format("%i", num)), _buffer(buffer), _buffStart(buffer) {}
+		ResFile(const char* type, char *buffer, int num) : File(type + Common::String::format("%i", num)), _buffer(buffer), _buffStart(buffer) {}
 
 		void syncString(const char *&str) {
 			str = _buffer;
@@ -473,6 +473,45 @@ public:
 	const char *DARKSIDE_ENDING2;
 	const char *PHAROAH_ENDING_TEXT1;
 	const char *PHAROAH_ENDING_TEXT2;
+
+	struct {
+
+		struct {
+			int KEY_ITEM;
+			int KEY_QUICK;
+			int KEY_EXCHANGE;
+			int KEY_ESCAPE;
+		} DIALOGS_CHAR_INFO;
+
+		struct {
+			int KEY_FXON;
+			int KEY_MUSICON;
+			int KEY_LOAD;
+			int KEY_SAVE;
+			int KEY_QUIT;
+			int KEY_MRWIZARD;
+		} DIALOGS_CONTROL_PANEL;
+
+		struct {
+			int KEY_ROLL;
+			int KEY_CREATE;
+			int KEY_MGT;
+			int KEY_INT;
+			int KEY_PER;
+			int KEY_END;
+			int KEY_SPD;
+			int KEY_ACY;
+			int KEY_LCK;
+		} DIALOGS_CREATE_CHAR;
+
+		struct {
+			int KEY_ADVENTURER;
+			int KEY_WARRIOR;
+		} DIALOGS_DIFFICULTY;
+
+	} KEY_CONSTANTS;
+
+
 public:
 	/**
 	 * Constructor


Commit: 3bba21845dca4699bd9b8ab17d068c22cfc3319b
    https://github.com/scummvm/scummvm/commit/3bba21845dca4699bd9b8ab17d068c22cfc3319b
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Moving translated hotkeys to resources.
Hotkeys changed in items dialogs.

Changed paths:
    devtools/create_xeen/constants.cpp
    devtools/create_xeen/constants.h
    devtools/create_xeen/en_constants.h
    devtools/create_xeen/ru_constants.h
    dists/engine-data/xeen.ccs
    engines/xeen/dialogs/dialogs_items.cpp
    engines/xeen/resources.cpp
    engines/xeen/resources.h


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index 938010520d..61f4dd27ed 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -493,12 +493,14 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CHAR_INFO()->KEY_ITEM());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CHAR_INFO()->KEY_QUICK());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CHAR_INFO()->KEY_EXCHANGE());
+
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_FXON());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_MUSICON());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_LOAD());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_SAVE());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_QUIT());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_MRWIZARD());
+
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_ROLL());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_CREATE());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_MGT());
@@ -508,9 +510,27 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_SPD());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_ACY());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_LCK());
+
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_DIFFICULTY()->KEY_ADVENTURER());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_DIFFICULTY()->KEY_WARRIOR());
 
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_WEAPONS());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_ARMOR());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_ACCESSORY());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_MISC());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_ENCHANT());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_USE());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_BUY());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_SELL());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_IDENTIFY());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_FIX());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_EQUIP());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_REM());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_DISC());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_QUEST());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_RECHRG());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_GOLD());
+
 	cc.add("CONSTKEYS" + num, keys);
 }
 
diff --git a/devtools/create_xeen/constants.h b/devtools/create_xeen/constants.h
index 78b6752654..eb0a70d9e1 100644
--- a/devtools/create_xeen/constants.h
+++ b/devtools/create_xeen/constants.h
@@ -1287,6 +1287,27 @@ public:
 			virtual const int KEY_WARRIOR() = 0;
 		};
 		virtual DialogsDifficulty *DIALOGS_DIFFICULTY() = 0;
+
+		class DialogsItems {
+		public:
+			virtual const int KEY_WEAPONS() = 0;
+			virtual const int KEY_ARMOR() = 0;
+			virtual const int KEY_ACCESSORY() = 0;
+			virtual const int KEY_MISC() = 0;
+			virtual const int KEY_ENCHANT() = 0;
+			virtual const int KEY_USE() = 0;
+			virtual const int KEY_BUY() = 0;
+			virtual const int KEY_SELL() = 0;
+			virtual const int KEY_IDENTIFY() = 0;
+			virtual const int KEY_FIX() = 0;
+			virtual const int KEY_EQUIP() = 0;
+			virtual const int KEY_REM() = 0;
+			virtual const int KEY_DISC() = 0;
+			virtual const int KEY_QUEST() = 0;
+			virtual const int KEY_RECHRG() = 0;
+			virtual const int KEY_GOLD() = 0;
+		};
+		virtual DialogsItems *DIALOGS_ITEMS() = 0;
 	};
 	virtual KeyConstants *KEY_CONSTANTS() = 0;
 };
diff --git a/devtools/create_xeen/en_constants.h b/devtools/create_xeen/en_constants.h
index 2984ab8b58..741d1870ef 100644
--- a/devtools/create_xeen/en_constants.h
+++ b/devtools/create_xeen/en_constants.h
@@ -2039,16 +2039,40 @@ public:
 			const int KEY_WARRIOR()    { return Common::KEYCODE_w; }
 		};
 		EN_DialogsDifficulty *DIALOGS_DIFFICULTY() {
-			if (!_dd)
-				_dd = new EN_DialogsDifficulty();
+			if (!_dd) _dd = new EN_DialogsDifficulty();
 			return _dd;
 		}
 
+		class EN_DialogsItems : public DialogsItems {
+		public:
+			const int KEY_WEAPONS()   { return Common::KEYCODE_w; }
+			const int KEY_ARMOR()     { return Common::KEYCODE_a; }
+			const int KEY_ACCESSORY() { return Common::KEYCODE_c; }
+			const int KEY_MISC()      { return Common::KEYCODE_m; }
+			const int KEY_ENCHANT()   { return Common::KEYCODE_e; }
+			const int KEY_USE()       { return Common::KEYCODE_u; }
+			const int KEY_BUY()       { return Common::KEYCODE_b; }
+			const int KEY_SELL()      { return Common::KEYCODE_s; }
+			const int KEY_IDENTIFY()  { return Common::KEYCODE_i; }
+			const int KEY_FIX()       { return Common::KEYCODE_f; }
+			const int KEY_EQUIP()     { return Common::KEYCODE_e; }
+			const int KEY_REM()       { return Common::KEYCODE_r; }
+			const int KEY_DISC()      { return Common::KEYCODE_d; }
+			const int KEY_QUEST()     { return Common::KEYCODE_q; }
+			const int KEY_RECHRG()    { return Common::KEYCODE_r; }
+			const int KEY_GOLD()      { return Common::KEYCODE_g; }
+		};
+		EN_DialogsItems *DIALOGS_ITEMS() {
+			if (!_di) _di = new EN_DialogsItems();
+			return _di;
+		}
+
 	private:
 		EN_DialogsCharInfo     *_dci = NULL;
 		EN_DialogsControlPanel *_dcp = NULL;
 		EN_DialogsCreateChar   *_dcc = NULL;
 		EN_DialogsDifficulty   *_dd = NULL;
+		EN_DialogsItems        *_di = NULL;
 	};
 
 	EN_KeyConstants *KEY_CONSTANTS() {
diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index 50d3c57f30..1205c1cc0f 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -2049,12 +2049,36 @@ public:
 			return _dd;
 		}
 
+		class RU_DialogsItems : public DialogsItems {
+		public:
+			const int KEY_WEAPONS()   { return Common::KEYCODE_SEMICOLON; }
+			const int KEY_ARMOR()     { return Common::KEYCODE_COMMA; }
+			const int KEY_ACCESSORY() { return Common::KEYCODE_e; }
+			const int KEY_MISC()      { return Common::KEYCODE_h; }
+			const int KEY_ENCHANT()   { return Common::KEYCODE_p; }
+			const int KEY_USE()       { return Common::KEYCODE_b; }
+			const int KEY_BUY()       { return Common::KEYCODE_r; }
+			const int KEY_SELL()      { return Common::KEYCODE_g; }
+			const int KEY_IDENTIFY()  { return Common::KEYCODE_j; }
+			const int KEY_FIX()       { return Common::KEYCODE_x; }
+			const int KEY_EQUIP()     { return Common::KEYCODE_y; }
+			const int KEY_REM()       { return Common::KEYCODE_c; }
+			const int KEY_DISC()      { return Common::KEYCODE_d; }
+			const int KEY_QUEST()     { return Common::KEYCODE_p; }
+			const int KEY_RECHRG()    { return Common::KEYCODE_g; }
+			const int KEY_GOLD()      { return Common::KEYCODE_p; }
+		};
+		RU_DialogsItems *DIALOGS_ITEMS() {
+			if (!_di) _di = new RU_DialogsItems();
+			return _di;
+		}
+
 	private:
 		RU_DialogsCharInfo     *_dci = NULL;
 		RU_DialogsControlPanel *_dcp = NULL;
 		RU_DialogsCreateChar   *_dcc = NULL;
-		RU_DialogsDifficulty *_dd = NULL;
-
+		RU_DialogsDifficulty   *_dd = NULL;
+		RU_DialogsItems        *_di = NULL;
 	};
 
 	RU_KeyConstants *KEY_CONSTANTS() {
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index 68bef8d9f0..55dc601ece 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/dialogs/dialogs_items.cpp b/engines/xeen/dialogs/dialogs_items.cpp
index 39a694c25c..ba67618b65 100644
--- a/engines/xeen/dialogs/dialogs_items.cpp
+++ b/engines/xeen/dialogs/dialogs_items.cpp
@@ -20,7 +20,6 @@
  *
  */
 
-#include "common/config-manager.h"
 #include "xeen/dialogs/dialogs_items.h"
 #include "xeen/dialogs/dialogs_query.h"
 #include "xeen/dialogs/dialogs_quests.h"
@@ -296,24 +295,19 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 		}
 
 		// Handle other selections
-		switch (_buttonValue) {
-		case Common::KEYCODE_F1:
-		case Common::KEYCODE_F2:
-		case Common::KEYCODE_F3:
-		case Common::KEYCODE_F4:
-		case Common::KEYCODE_F5:
-		case Common::KEYCODE_F6:
-			if (!varA && mode != ITEMMODE_3 && mode != ITEMMODE_ENCHANT
-					&& mode != ITEMMODE_RECHARGE && mode != ITEMMODE_TO_GOLD
-					&& party._mazeId != 0) {
+		if (Common::KEYCODE_F1 == _buttonValue ||
+			Common::KEYCODE_F2 == _buttonValue ||
+			Common::KEYCODE_F3 == _buttonValue ||
+			Common::KEYCODE_F4 == _buttonValue ||
+			Common::KEYCODE_F5 == _buttonValue ||
+			Common::KEYCODE_F6 == _buttonValue) {
+			if (!varA && mode != ITEMMODE_3 && mode != ITEMMODE_ENCHANT && mode != ITEMMODE_RECHARGE && mode != ITEMMODE_TO_GOLD && party._mazeId != 0) {
 				_buttonValue -= Common::KEYCODE_F1;
 
-				if (_buttonValue < (int)(_vm->_mode == MODE_COMBAT ?
-						combat._combatParty.size() : party._activeParty.size())) {
+				if (_buttonValue < (int)(_vm->_mode == MODE_COMBAT ? combat._combatParty.size() : party._activeParty.size())) {
 					// Character number is valid
 					redrawFlag = REDRAW_FULL;
-					Character *newChar = _vm->_mode == MODE_COMBAT ?
-						combat._combatParty[_buttonValue] : &party._activeParty[_buttonValue];
+					Character *newChar = _vm->_mode == MODE_COMBAT ? combat._combatParty[_buttonValue] : &party._activeParty[_buttonValue];
 
 					if (mode == ITEMMODE_BUY) {
 						_oldCharacter = newChar;
@@ -333,7 +327,7 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 							ErrorScroll::show(_vm, Res.CANNOT_REMOVE_CURSED_ITEM);
 						else if (destItems.isFull())
 							ErrorScroll::show(_vm, Common::String::format(
-								Res.CATEGORY_BACKPACK_IS_FULL[category], c->_name.c_str()));
+													   Res.CATEGORY_BACKPACK_IS_FULL[category], c->_name.c_str()));
 						else {
 							XeenItem &destItem = destItems[INV_ITEMS_TOTAL - 1];
 							destItem = srcItem;
@@ -353,139 +347,112 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 					continue;
 				}
 			}
-			break;
 
-		case Common::KEYCODE_1:
-		case Common::KEYCODE_2:
-		case Common::KEYCODE_3:
-		case Common::KEYCODE_4:
-		case Common::KEYCODE_5:
-		case Common::KEYCODE_6:
-		case Common::KEYCODE_7:
-		case Common::KEYCODE_8:
-		case Common::KEYCODE_9:
+		} else if (Common::KEYCODE_1 == _buttonValue ||
+				   Common::KEYCODE_2 == _buttonValue ||
+				   Common::KEYCODE_3 == _buttonValue ||
+				   Common::KEYCODE_4 == _buttonValue ||
+				   Common::KEYCODE_5 == _buttonValue ||
+				   Common::KEYCODE_6 == _buttonValue ||
+				   Common::KEYCODE_7 == _buttonValue ||
+				   Common::KEYCODE_8 == _buttonValue ||
+				   Common::KEYCODE_9 == _buttonValue) {
 			// Select an item
-			if (mode == ITEMMODE_3)
-				break;
-
-			_buttonValue -= Common::KEYCODE_1;
-			if (_buttonValue != itemIndex) {
-				// Check whether the new selection has an associated item
-				if (!c->_items[category][_buttonValue].empty()) {
-					itemIndex = _buttonValue;
+			if (mode != ITEMMODE_3) {
+				_buttonValue -= Common::KEYCODE_1;
+				if (_buttonValue != itemIndex) {
+					// Check whether the new selection has an associated item
+					if (!c->_items[category][_buttonValue].empty()) {
+						itemIndex = _buttonValue;
+						Common::fill(&arr[0], &arr[40], 0);
+						arr[itemIndex] = 15;
+					}
+				} else {
 					Common::fill(&arr[0], &arr[40], 0);
-					arr[itemIndex] = 15;
+					itemIndex = -1;
 				}
-			} else {
-				Common::fill(&arr[0], &arr[40], 0);
-				itemIndex = -1;
+
+				redrawFlag = REDRAW_TEXT;
 			}
 
-			redrawFlag = REDRAW_TEXT;
-			break;
+		} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_WEAPONS == _buttonValue) {
+			// Weapons category
+			category = CATEGORY_WEAPON;
+			redrawFlag = REDRAW_FULL;
 
-		case Common::KEYCODE_a:
+		} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ARMOR == _buttonValue) {
 			// Armor category
 			category = CATEGORY_ARMOR;
 			redrawFlag = REDRAW_FULL;
-			break;
-
-		case Common::KEYCODE_b:
-			// Buy
-			if (mode != ITEMMODE_CHAR_INFO && mode != ITEMMODE_RECHARGE &&
-					mode != ITEMMODE_ENCHANT && mode != ITEMMODE_TO_GOLD) {
-				mode = ITEMMODE_BUY;
-				c = &_itemsCharacter;
-				redrawFlag = REDRAW_FULL;
-			}
-			break;
 
-		case Common::KEYCODE_c:
+		} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ACCESSORY == _buttonValue) {
 			// Accessories category
 			category = CATEGORY_ACCESSORY;
 			redrawFlag = REDRAW_FULL;
-			break;
 
-		case Common::KEYCODE_d:
-			if (mode == ITEMMODE_CHAR_INFO)
-				actionIndex = 3;
-			break;
+		} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_MISC == _buttonValue) {
+			// Misc
+			category = CATEGORY_MISC;
+			redrawFlag = REDRAW_FULL;
 
-		case Common::KEYCODE_e:
-			if (mode == ITEMMODE_CHAR_INFO || mode == ITEMMODE_ENCHANT ||
-					mode == ITEMMODE_TO_GOLD) {
-				if (category != CATEGORY_MISC) {
-					actionIndex = mode == ITEMMODE_ENCHANT ? 4 : 0;
-				}
+		} else if (mode == ITEMMODE_ENCHANT ||
+				   mode == ITEMMODE_RECHARGE ||
+				   mode == ITEMMODE_TO_GOLD) {
+			if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_USE == _buttonValue) {
+
+			} else if (mode == ITEMMODE_ENCHANT &&
+				       Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ENCHANT == _buttonValue) {
+				actionIndex = 4;
+			} else if (mode == ITEMMODE_RECHARGE &&
+				       Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_RECHRG == _buttonValue) {
+				actionIndex = 5;
+			} else if (mode == ITEMMODE_TO_GOLD &&
+				       Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_GOLD == _buttonValue) {
+				actionIndex = 6;
+			} else if (mode == ITEMMODE_TO_GOLD &&
+					   Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_EQUIP == _buttonValue) {
+				if (category != CATEGORY_MISC)
+					actionIndex = 0;
 			}
-			break;
 
-		case Common::KEYCODE_f:
-			if (mode != ITEMMODE_CHAR_INFO && mode != ITEMMODE_RECHARGE &&
-					mode != ITEMMODE_ENCHANT && mode != ITEMMODE_TO_GOLD) {
-				mode = ITEMMODE_REPAIR;
+		} else if (ITEMMODE_BUY == mode ||
+				   ITEMMODE_SELL == mode ||
+				   ITEMMODE_IDENTIFY == mode ||
+				   ITEMMODE_REPAIR == mode) {
+			if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_BUY == _buttonValue) {
+				mode = ITEMMODE_BUY;
+				c = &_itemsCharacter;
+				redrawFlag = REDRAW_FULL;
+			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_SELL == _buttonValue) {
+				mode = ITEMMODE_SELL;
 				c = startingChar;
 				redrawFlag = REDRAW_TEXT;
-			}
-			break;
-
-		case Common::KEYCODE_g:
-			if (mode == ITEMMODE_TO_GOLD)
-				actionIndex = 6;
-			break;
-
-		case Common::KEYCODE_i:
-			if (mode != ITEMMODE_CHAR_INFO && mode != ITEMMODE_RECHARGE &&
-					mode != ITEMMODE_ENCHANT && mode != ITEMMODE_TO_GOLD) {
+			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_IDENTIFY == _buttonValue) {
 				mode = ITEMMODE_IDENTIFY;
 				c = startingChar;
 				redrawFlag = REDRAW_TEXT;
+			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_FIX == _buttonValue) {
+				mode = ITEMMODE_REPAIR;
+				c = startingChar;
+				redrawFlag = REDRAW_TEXT;
 			}
-			break;
-
-		case Common::KEYCODE_m:
-			// Misc
-			category = CATEGORY_MISC;
-			redrawFlag = REDRAW_FULL;
-			break;
-
-		case Common::KEYCODE_q:
-			// Quests
-			if (mode == ITEMMODE_CHAR_INFO) {
+		} else if (ITEMMODE_CHAR_INFO == mode) {
+			if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_EQUIP == _buttonValue) {
+				if (category != CATEGORY_MISC) 
+					actionIndex = 0;
+			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_USE == _buttonValue) {
+				if (category == CATEGORY_MISC)
+					actionIndex = 2;
+			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_REM == _buttonValue) {
+				actionIndex = 1;
+			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_DISC == _buttonValue) {
+				actionIndex = 3;
+			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_QUEST == _buttonValue) {
+				// Quests
 				Quests::show(_vm);
 				redrawFlag = REDRAW_FULL;
 			}
-			break;
 
-		case Common::KEYCODE_r:
-			if (mode == ITEMMODE_CHAR_INFO)
-				actionIndex = 1;
-			else if (mode == ITEMMODE_RECHARGE)
-				actionIndex = 5;
-			break;
-
-		case Common::KEYCODE_s:
-			if (mode != ITEMMODE_CHAR_INFO && mode != ITEMMODE_RECHARGE &&
-					mode != ITEMMODE_ENCHANT && mode != ITEMMODE_TO_GOLD) {
-				mode = ITEMMODE_SELL;
-				c = startingChar;
-				redrawFlag = REDRAW_TEXT;
-			}
-			break;
-
-		case Common::KEYCODE_u:
-			if (mode == ITEMMODE_CHAR_INFO && category == CATEGORY_MISC)
-				actionIndex = 2;
-			break;
-
-		case Common::KEYCODE_w:
-			// Weapons category
-			category = CATEGORY_WEAPON;
-			redrawFlag = REDRAW_FULL;
-			break;
-
-		default:
-			break;
 		}
 	}
 
@@ -508,13 +475,13 @@ void ItemsDialog::loadButtons(ItemsMode mode, Character *&c, ItemCategory catego
 	clearButtons();
 	if (mode == ITEMMODE_ENCHANT || mode == ITEMMODE_RECHARGE || mode == ITEMMODE_TO_GOLD) {
 		// Enchant button list
-		addButton(Common::Rect(12, 109, 36, 129), Common::KEYCODE_w, &_iconSprites);
-		addButton(Common::Rect(46, 109, 70, 129), Common::KEYCODE_a, &_iconSprites);
-		addButton(Common::Rect(80, 109, 104, 129), Common::KEYCODE_c, &_iconSprites);
-		addButton(Common::Rect(114, 109, 138, 129), Common::KEYCODE_m, &_iconSprites);
-		addButton(Common::Rect(148, 109, 172, 129), Common::KEYCODE_e, &_iconSprites);
+		addButton(Common::Rect(12, 109, 36, 129),   Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_WEAPONS, &_iconSprites);
+		addButton(Common::Rect(46, 109, 70, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ARMOR, &_iconSprites);
+		addButton(Common::Rect(80, 109, 104, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ACCESSORY, &_iconSprites);
+		addButton(Common::Rect(114, 109, 138, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_MISC, &_iconSprites);
+		addButton(Common::Rect(148, 109, 172, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ENCHANT, &_iconSprites);
 		addButton(Common::Rect(284, 109, 308, 129), Common::KEYCODE_ESCAPE, &_iconSprites);
-		addButton(Common::Rect(148, 109, 172, 129), Common::KEYCODE_u, &_iconSprites);
+		addButton(Common::Rect(148, 109, 172, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_USE, &_iconSprites);
 		addButton(Common::Rect(8, 20, 263, 28), Common::KEYCODE_1);
 		addButton(Common::Rect(8, 29, 263, 37), Common::KEYCODE_2);
 		addButton(Common::Rect(8, 38, 263, 46), Common::KEYCODE_3);
@@ -527,14 +494,14 @@ void ItemsDialog::loadButtons(ItemsMode mode, Character *&c, ItemCategory catego
 	} else {
 		bool flag = mode == ITEMMODE_BUY || mode == ITEMMODE_SELL || mode == ITEMMODE_IDENTIFY
 			|| mode == ITEMMODE_REPAIR;
-		addButton(Common::Rect(12, 109, 36, 129), Common::KEYCODE_w, &_iconSprites);
-		addButton(Common::Rect(46, 109, 70, 129), Common::KEYCODE_a, &_iconSprites);
-		addButton(Common::Rect(80, 109, 104, 129), Common::KEYCODE_c, &_iconSprites);
-		addButton(Common::Rect(114, 109, 138, 129), Common::KEYCODE_m, &_iconSprites);
-		addButton(Common::Rect(148, 109, 172, 129), flag ? Common::KEYCODE_b : Common::KEYCODE_e, &_iconSprites);
-		addButton(Common::Rect(182, 109, 206, 129), flag ? Common::KEYCODE_s : Common::KEYCODE_r, &_iconSprites);
-		addButton(Common::Rect(216, 109, 240, 129), flag ? Common::KEYCODE_i : Common::KEYCODE_d, &_iconSprites);
-		addButton(Common::Rect(250, 109, 274, 129), flag ? Common::KEYCODE_f : Common::KEYCODE_q, &_iconSprites);
+		addButton(Common::Rect(12, 109, 36, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_WEAPONS, &_iconSprites);
+		addButton(Common::Rect(46, 109, 70, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ARMOR, &_iconSprites);
+		addButton(Common::Rect(80, 109, 104, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ACCESSORY, &_iconSprites);
+		addButton(Common::Rect(114, 109, 138, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_MISC, &_iconSprites);
+		addButton(Common::Rect(148, 109, 172, 129), flag ? Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_BUY : Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_EQUIP, &_iconSprites);
+		addButton(Common::Rect(182, 109, 206, 129), flag ? Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_SELL : Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_REM, &_iconSprites);
+		addButton(Common::Rect(216, 109, 240, 129), flag ? Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_IDENTIFY : Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_DISC, &_iconSprites);
+		addButton(Common::Rect(250, 109, 274, 129), flag ? Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_FIX : Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_QUEST, &_iconSprites);
 		addButton(Common::Rect(284, 109, 308, 129), Common::KEYCODE_ESCAPE, &_iconSprites);
 		addButton(Common::Rect(8, 20, 263, 28), Common::KEYCODE_1);
 		addButton(Common::Rect(8, 29, 263, 37), Common::KEYCODE_2);
@@ -550,7 +517,7 @@ void ItemsDialog::loadButtons(ItemsMode mode, Character *&c, ItemCategory catego
 
 	if (mode == ITEMMODE_CHAR_INFO && category == CATEGORY_MISC) {
 		_buttons[4].setFrame(18);
-		_buttons[4]._value = Common::KEYCODE_u;
+		_buttons[4]._value = Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_USE;
 	}
 	if (mode != ITEMMODE_ENCHANT && mode != ITEMMODE_RECHARGE && mode != ITEMMODE_TO_GOLD) {
 		_buttons[5].setFrame(10);
@@ -581,11 +548,11 @@ void ItemsDialog::loadButtons(ItemsMode mode, Character *&c, ItemCategory catego
 		_buttons[4]._bounds.moveTo(148, _buttons[4]._bounds.top);
 		_buttons[9]._draw = false;
 	} else if (mode == ITEMMODE_RECHARGE) {
-		_buttons[4]._value = Common::KEYCODE_r;
+		_buttons[4]._value = Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_RECHRG;
 	} else if (mode == ITEMMODE_ENCHANT) {
-		_buttons[4]._value = Common::KEYCODE_e;
+		_buttons[4]._value = Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ENCHANT;
 	} else if (mode == ITEMMODE_TO_GOLD) {
-		_buttons[4]._value = Common::KEYCODE_g;
+		_buttons[4]._value = Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_GOLD;
 	}
 }
 
@@ -753,7 +720,7 @@ int ItemsDialog::calcItemCost(Character *c, int itemIndex, ItemsMode mode,
 }
 
 const char *ItemsDialog::getGoldPlurals(int cost) {
-	if (Common::RU_RUS == Common::parseLanguage(ConfMan.get("language")))
+	if (Common::RU_RUS == g_vm->getLanguage())
 		return Res.GOLDS[cost % 10 == 1 ? 0 : 1];
 	return Res.GOLDS[0];
 }
diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp
index 3bc06388d3..210812e358 100644
--- a/engines/xeen/resources.cpp
+++ b/engines/xeen/resources.cpp
@@ -445,6 +445,23 @@ void Resources::loadData() {
 
 	keys.syncNumber(KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_ADVENTURER);
 	keys.syncNumber(KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_WARRIOR);
+
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_WEAPONS);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ARMOR);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ACCESSORY);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_MISC);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ENCHANT);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_USE);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_BUY);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_SELL);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_IDENTIFY);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_FIX);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_EQUIP);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_REM);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_DISC);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_QUEST);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_RECHRG);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_GOLD);
 }
 
 } // End of namespace Xeen
diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h
index 818ee669fb..b4e959283a 100644
--- a/engines/xeen/resources.h
+++ b/engines/xeen/resources.h
@@ -509,6 +509,24 @@ public:
 			int KEY_WARRIOR;
 		} DIALOGS_DIFFICULTY;
 
+		struct {
+			int KEY_WEAPONS;
+			int KEY_ARMOR;
+			int KEY_ACCESSORY;
+			int KEY_MISC;
+			int KEY_ENCHANT;
+			int KEY_USE;
+			int KEY_BUY;
+			int KEY_SELL;
+			int KEY_IDENTIFY;
+			int KEY_FIX;
+			int KEY_EQUIP;
+			int KEY_REM;
+			int KEY_DISC;
+			int KEY_QUEST;
+			int KEY_RECHRG;
+			int KEY_GOLD;
+		} DIALOGS_ITEMS;
 	} KEY_CONSTANTS;
 
 


Commit: 2da836da6c494a65daf73b32dba99ab2d6fa1845
    https://github.com/scummvm/scummvm/commit/2da836da6c494a65daf73b32dba99ab2d6fa1845
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Moving translated hotkeys to resources.
Hotkeys changed in party, quests, quick_fight, spells dialogs and bank location.

Changed paths:
    devtools/create_xeen/constants.cpp
    devtools/create_xeen/constants.h
    devtools/create_xeen/en_constants.h
    devtools/create_xeen/ru_constants.h
    dists/engine-data/xeen.ccs
    engines/xeen/dialogs/dialogs_party.cpp
    engines/xeen/dialogs/dialogs_quests.cpp
    engines/xeen/dialogs/dialogs_quick_fight.cpp
    engines/xeen/dialogs/dialogs_spells.cpp
    engines/xeen/locations.cpp
    engines/xeen/resources.cpp
    engines/xeen/resources.h
    engines/xeen/spells.cpp


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index 61f4dd27ed..bb8a773958 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -531,6 +531,31 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_RECHRG());
 	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_GOLD());
 
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_PARTY()->KEY_DELETE());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_PARTY()->KEY_REMOVE());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_PARTY()->KEY_CREATE());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_PARTY()->KEY_EXIT());
+
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_QUESTS()->KEY_QUEST_ITEMS());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_QUESTS()->KEY_CURRENT_QUESTS());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_QUESTS()->KEY_QUEST_ITEMS());
+
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_QUICK_FIGHT()->KEY_NEXT());
+
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_CAST());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_NEW());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_FIRE());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_ELEC());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_COLD());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_ACID());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_SET());
+	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_RETURN());
+
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_DEP());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_WITH());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_GOLD());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_GEMS());
+
 	cc.add("CONSTKEYS" + num, keys);
 }
 
diff --git a/devtools/create_xeen/constants.h b/devtools/create_xeen/constants.h
index eb0a70d9e1..aff8fa5a86 100644
--- a/devtools/create_xeen/constants.h
+++ b/devtools/create_xeen/constants.h
@@ -1308,6 +1308,51 @@ public:
 			virtual const int KEY_GOLD() = 0;
 		};
 		virtual DialogsItems *DIALOGS_ITEMS() = 0;
+
+		class DialogsParty {
+		public:
+			virtual const int KEY_DELETE() = 0;
+			virtual const int KEY_REMOVE() = 0;
+			virtual const int KEY_CREATE() = 0;
+			virtual const int KEY_EXIT() = 0;
+		};
+		virtual DialogsParty *DIALOGS_PARTY() = 0;
+
+		class DialogsQuests {
+		public:
+			virtual const int KEY_QUEST_ITEMS() = 0;
+			virtual const int KEY_CURRENT_QUESTS() = 0;
+			virtual const int KEY_AUTO_NOTES() = 0;
+		};
+		virtual DialogsQuests *DIALOGS_QUESTS() = 0;
+
+		class DialogsQuickFight {
+		public:
+			virtual const int KEY_NEXT() = 0;
+		};
+		virtual DialogsQuickFight *DIALOGS_QUICK_FIGHT() = 0;
+
+		class DialogsSpells {
+		public:
+			virtual const int KEY_CAST() = 0;
+			virtual const int KEY_NEW() = 0;
+			virtual const int KEY_FIRE() = 0;
+			virtual const int KEY_ELEC() = 0;
+			virtual const int KEY_COLD() = 0;
+			virtual const int KEY_ACID() = 0;
+			virtual const int KEY_SET() = 0;
+			virtual const int KEY_RETURN() = 0;
+		};
+		virtual DialogsSpells *DIALOGS_SPELLS() = 0;
+
+		class Locations {
+		public:
+			virtual const int KEY_DEP() = 0;
+			virtual const int KEY_WITH() = 0;
+			virtual const int KEY_GOLD() = 0;
+			virtual const int KEY_GEMS() = 0;
+		};
+		virtual Locations *LOCATIONS() = 0;
 	};
 	virtual KeyConstants *KEY_CONSTANTS() = 0;
 };
diff --git a/devtools/create_xeen/en_constants.h b/devtools/create_xeen/en_constants.h
index 741d1870ef..15d1b9dabf 100644
--- a/devtools/create_xeen/en_constants.h
+++ b/devtools/create_xeen/en_constants.h
@@ -2067,12 +2067,77 @@ public:
 			return _di;
 		}
 
+		class EN_DialogsParty : public DialogsParty {
+		public:
+			const int KEY_DELETE() { return Common::KEYCODE_d; }
+			const int KEY_REMOVE() { return Common::KEYCODE_r; }
+			const int KEY_CREATE() { return Common::KEYCODE_c; }
+			const int KEY_EXIT()   { return Common::KEYCODE_x; }
+		};
+		EN_DialogsParty *DIALOGS_PARTY() {
+			if (!_dp) _dp = new EN_DialogsParty();
+			return _dp;
+		}
+
+		class EN_DialogsQuests : public DialogsQuests {
+		public:
+			const int KEY_QUEST_ITEMS()    { return Common::KEYCODE_i; }
+			const int KEY_CURRENT_QUESTS() { return Common::KEYCODE_q; }
+			const int KEY_AUTO_NOTES()     { return Common::KEYCODE_a; }
+		};
+		EN_DialogsQuests *DIALOGS_QUESTS() {
+			if (!_dq) _dq = new EN_DialogsQuests();
+			return _dq;
+		}
+
+		class EN_DialogsQuickFight : public DialogsQuickFight {
+		public:
+			const int KEY_NEXT() { return Common::KEYCODE_t; }
+		};
+		EN_DialogsQuickFight *DIALOGS_QUICK_FIGHT() {
+			if (!_dqf) _dqf = new EN_DialogsQuickFight();
+			return _dqf;
+		}
+
+		class EN_DialogsSpells : public DialogsSpells {
+		public:
+			const int KEY_CAST()   { return Common::KEYCODE_c; }
+			const int KEY_NEW()    { return Common::KEYCODE_n; }
+			const int KEY_FIRE()   { return Common::KEYCODE_f; }
+			const int KEY_ELEC()   { return Common::KEYCODE_e; }
+			const int KEY_COLD()   { return Common::KEYCODE_c; }
+			const int KEY_ACID()   { return Common::KEYCODE_a; }
+			const int KEY_SET()    { return Common::KEYCODE_t; }
+			const int KEY_RETURN() { return Common::KEYCODE_r; }
+		};
+		EN_DialogsSpells *DIALOGS_SPELLS() {
+			if (!_ds) _ds = new EN_DialogsSpells();
+			return _ds;
+		}
+
+		class EN_Locations : public Locations {
+		public:
+			const int KEY_DEP()  { return Common::KEYCODE_d; }
+			const int KEY_WITH() { return Common::KEYCODE_w; }
+			const int KEY_GOLD() { return Common::KEYCODE_o; }
+			const int KEY_GEMS() { return Common::KEYCODE_e; }
+		};
+		EN_Locations *LOCATIONS() {
+			if (!_l) _l = new EN_Locations();
+			return _l;
+		}
+
 	private:
 		EN_DialogsCharInfo     *_dci = NULL;
 		EN_DialogsControlPanel *_dcp = NULL;
 		EN_DialogsCreateChar   *_dcc = NULL;
 		EN_DialogsDifficulty   *_dd = NULL;
 		EN_DialogsItems        *_di = NULL;
+		EN_DialogsParty        *_dp = NULL;
+		EN_DialogsQuests       *_dq = NULL;
+		EN_DialogsQuickFight   *_dqf = NULL;
+		EN_DialogsSpells       *_ds = NULL;
+		EN_Locations           *_l = NULL;
 	};
 
 	EN_KeyConstants *KEY_CONSTANTS() {
diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index 1205c1cc0f..4843b32207 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -593,7 +593,7 @@ public:
 		return "\x3""c\v000\t000%s\x3""l\n"																					 // "\x3""c\v000\t000%s\x3""l\n"
 			   "\n"																											 // "\n"
 			   "\x87\xAE\xAB\x3""r\t000%s\x3""l\n"																			 // "Зол\x3""r\t000%s\x3""l\n"
-			   "\x80\xAB\xAC\xA7\x3""r\t000%s\x2\x3""c\v096\t007\f37\x80\fd\xAB\xAC\xA7\t035\f37\x87\fd\xAE\xAB\t067ESC\x1"; // "Алмз\x3""r\t000%s\x2\x3""c\v096\t007\f37А\fdлмз\t035\f37З\fdол\t067ESC\x1";
+			   "\x80\xAB\xAC\xA7\x3""r\t000%s\x2\x3""c\v096\t013\f37\x80\fd\xAB\xAC\xA7\t035\f37\x87\fd\xAE\xAB\t067ESC\x1"; // "Алмз\x3""r\t000%s\x2\x3""c\v096\t013\f37А\fdлмз\t035\f37З\fdол\t067ESC\x1";
 	}
 
 	const char *GOLD_GEMS_2() {
@@ -2073,12 +2073,77 @@ public:
 			return _di;
 		}
 
+		class RU_DialogsParty : public DialogsParty {
+		public:
+			const int KEY_DELETE() { return Common::KEYCODE_e; }
+			const int KEY_REMOVE() { return Common::KEYCODE_d; }
+			const int KEY_CREATE() { return Common::KEYCODE_c; }
+			const int KEY_EXIT()   { return Common::KEYCODE_s; }
+		};
+		RU_DialogsParty *DIALOGS_PARTY() {
+			if (!_dp) _dp = new RU_DialogsParty();
+			return _dp;
+		}
+
+		class RU_DialogsQuests : public DialogsQuests {
+		public:
+			const int KEY_QUEST_ITEMS()    { return Common::KEYCODE_d; }
+			const int KEY_CURRENT_QUESTS() { return Common::KEYCODE_p; }
+			const int KEY_AUTO_NOTES()     { return Common::KEYCODE_f; }
+		};
+		RU_DialogsQuests *DIALOGS_QUESTS() {
+			if (!_dq) _dq = new RU_DialogsQuests();
+			return _dq;
+		}
+
+		class RU_DialogsQuickFight : public DialogsQuickFight {
+		public:
+			const int KEY_NEXT() { return Common::KEYCODE_c; }
+		};
+		RU_DialogsQuickFight *DIALOGS_QUICK_FIGHT() {
+			if (!_dqf) _dqf = new RU_DialogsQuickFight();
+			return _dqf;
+		}
+
+		class RU_DialogsSpells : public DialogsSpells {
+		public:
+			const int KEY_CAST()   { return Common::KEYCODE_p; }
+			const int KEY_NEW()    { return Common::KEYCODE_y; }
+			const int KEY_FIRE()   { return Common::KEYCODE_j; }
+			const int KEY_ELEC()   { return Common::KEYCODE_u; }
+			const int KEY_COLD()   { return Common::KEYCODE_LEFTBRACKET; }
+			const int KEY_ACID()   { return Common::KEYCODE_z; }
+			const int KEY_SET()    { return Common::KEYCODE_e; }
+			const int KEY_RETURN() { return Common::KEYCODE_d; }
+		};
+		RU_DialogsSpells *DIALOGS_SPELLS() {
+			if (!_ds) _ds = new RU_DialogsSpells();
+			return _ds;
+		}
+
+		class RU_Locations : public Locations {
+		public:
+			const int KEY_DEP()  { return Common::KEYCODE_d; }
+			const int KEY_WITH() { return Common::KEYCODE_c; }
+			const int KEY_GOLD() { return Common::KEYCODE_p; }
+			const int KEY_GEMS() { return Common::KEYCODE_f; }
+		};
+		RU_Locations *LOCATIONS() {
+			if (!_l) _l = new RU_Locations();
+			return _l;
+		}
+
 	private:
 		RU_DialogsCharInfo     *_dci = NULL;
 		RU_DialogsControlPanel *_dcp = NULL;
 		RU_DialogsCreateChar   *_dcc = NULL;
 		RU_DialogsDifficulty   *_dd = NULL;
 		RU_DialogsItems        *_di = NULL;
+		RU_DialogsParty        *_dp = NULL;
+		RU_DialogsQuests       *_dq = NULL;
+		RU_DialogsQuickFight   *_dqf = NULL;
+		RU_DialogsSpells       *_ds = NULL;
+		RU_Locations           *_l = NULL;
 	};
 
 	RU_KeyConstants *KEY_CONSTANTS() {
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index 55dc601ece..98f1e3528d 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/dialogs/dialogs_party.cpp b/engines/xeen/dialogs/dialogs_party.cpp
index 384edc2ee4..0267dcdd23 100644
--- a/engines/xeen/dialogs/dialogs_party.cpp
+++ b/engines/xeen/dialogs/dialogs_party.cpp
@@ -106,51 +106,20 @@ void PartyDialog::execute() {
 				events.pollEventsAndWait();
 				checkEvents(_vm);
 			} while (!_vm->shouldExit() && !_buttonValue);
-
-			switch (_buttonValue) {
-			case Common::KEYCODE_ESCAPE:
-			case Common::KEYCODE_SPACE:
-			case Common::KEYCODE_e:
-			case Common::KEYCODE_x:
-				if (party._activeParty.size() == 0) {
-					ErrorScroll::show(_vm, Res.NO_ONE_TO_ADVENTURE_WITH);
-				} else {
-					if (_vm->_mode != MODE_STARTUP) {
-						for (int idx = OBSCURITY_NONE; idx >= OBSCURITY_BLACK; --idx) {
-							events.updateGameCounter();
-							intf.obscureScene((Obscurity)idx);
-							w.update();
-
-							while (events.timeElapsed() < 1)
-								events.pollEventsAndWait();
-						}
-					}
-
-					w.close();
-					party._mazeId = party._priorMazeId;
-
-					party.copyPartyToRoster();
-					//_vm->_saves->writeCharFile();
-					return;
-				}
-				break;
-
-			case Common::KEYCODE_F1:
-			case Common::KEYCODE_F2:
-			case Common::KEYCODE_F3:
-			case Common::KEYCODE_F4:
-			case Common::KEYCODE_F5:
-			case Common::KEYCODE_F6:
+			if (Common::KEYCODE_F1 == _buttonValue ||
+				Common::KEYCODE_F2 == _buttonValue ||
+				Common::KEYCODE_F3 == _buttonValue ||
+				Common::KEYCODE_F4 == _buttonValue ||
+				Common::KEYCODE_F5 == _buttonValue ||
+				Common::KEYCODE_F6 == _buttonValue) {
 				// Show character info
 				_buttonValue -= Common::KEYCODE_F1;
 				if (_buttonValue < (int)party._activeParty.size())
 					CharacterInfo::show(_vm, _buttonValue);
-				break;
-
-			case Common::KEYCODE_1:
-			case Common::KEYCODE_2:
-			case Common::KEYCODE_3:
-			case Common::KEYCODE_4:
+			} else if (Common::KEYCODE_1 == _buttonValue ||
+					   Common::KEYCODE_2 == _buttonValue ||
+					   Common::KEYCODE_3 == _buttonValue ||
+					   Common::KEYCODE_4 == _buttonValue) {
 				_buttonValue -= Common::KEYCODE_1 - 7;
 				if ((_buttonValue - 7 + startingChar) < (int)_charList.size()) {
 					// Check if the selected character is already in the party
@@ -168,33 +137,54 @@ void PartyDialog::execute() {
 							ErrorScroll::show(_vm, Res.YOUR_PARTY_IS_FULL);
 						} else {
 							// Add the character to the active party
-							party._activeParty.push_back(party._roster[
-								_charList[_buttonValue - 7 + startingChar]]);
-								startingCharChanged(startingChar);
+							party._activeParty.push_back(party._roster[_charList[_buttonValue - 7 + startingChar]]);
+							startingCharChanged(startingChar);
 						}
 					}
 				}
-				break;
 
-			case Common::KEYCODE_UP:
-			case Common::KEYCODE_KP8:
+			} else if (Common::KEYCODE_UP == _buttonValue ||
+					   Common::KEYCODE_KP8 == _buttonValue) {
 				// Up arrow
 				if (startingChar > 0) {
 					startingChar -= 4;
 					startingCharChanged(startingChar);
 				}
-				break;
 
-			case Common::KEYCODE_DOWN:
-			case Common::KEYCODE_KP2:
+			} else if (Common::KEYCODE_DOWN == _buttonValue ||
+					   Common::KEYCODE_KP2 == _buttonValue) {
 				// Down arrow
 				if (startingChar < ((int)_charList.size() - 4)) {
 					startingChar += 4;
 					startingCharChanged(startingChar);
 				}
-				break;
 
-			case Common::KEYCODE_c:
+			} else if (Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_EXIT == _buttonValue ||
+				Common::KEYCODE_ESCAPE == _buttonValue ||
+				Common::KEYCODE_SPACE == _buttonValue) {
+				if (party._activeParty.size() == 0) {
+					ErrorScroll::show(_vm, Res.NO_ONE_TO_ADVENTURE_WITH);
+				} else {
+					if (_vm->_mode != MODE_STARTUP) {
+						for (int idx = OBSCURITY_NONE; idx >= OBSCURITY_BLACK; --idx) {
+							events.updateGameCounter();
+							intf.obscureScene((Obscurity)idx);
+							w.update();
+
+							while (events.timeElapsed() < 1)
+								events.pollEventsAndWait();
+						}
+					}
+
+					w.close();
+					party._mazeId = party._priorMazeId;
+
+					party.copyPartyToRoster();
+					//_vm->_saves->writeCharFile();
+					return;
+				}
+
+			} else if (Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_CREATE == _buttonValue) {
 				// Create
 				if (_charList.size() == XEEN_TOTAL_CHARACTERS) {
 					ErrorScroll::show(_vm, Res.YOUR_ROSTER_IS_FULL);
@@ -220,9 +210,8 @@ void PartyDialog::execute() {
 					modeFlag = true;
 					breakFlag = true;
 				}
-				break;
 
-			case Common::KEYCODE_d:
+			} else if (Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_DELETE == _buttonValue) {
 				// Delete character
 				if (_charList.size() > 0) {
 					int charButtonValue = selectCharacter(true, startingChar);
@@ -233,7 +222,7 @@ void PartyDialog::execute() {
 							ErrorScroll::show(_vm, Res.HAS_SLAYER_SWORD);
 						} else {
 							Common::String msg = Common::String::format(Res.SURE_TO_DELETE_CHAR,
-								c._name.c_str(), Res.CLASS_NAMES[c._class]);
+																		c._name.c_str(), Res.CLASS_NAMES[c._class]);
 							if (Confirm::show(_vm, msg)) {
 								// If the character is in the party, remove it
 								for (uint idx = 0; idx < party._activeParty.size(); ++idx) {
@@ -253,9 +242,8 @@ void PartyDialog::execute() {
 						}
 					}
 				}
-				break;
 
-			case Common::KEYCODE_r:
+			} else if (Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_REMOVE == _buttonValue) {
 				// Remove character
 				if (party._activeParty.size() > 0) {
 					int charButtonValue = selectCharacter(false, startingChar);
@@ -265,10 +253,6 @@ void PartyDialog::execute() {
 					}
 					startingCharChanged(startingChar);
 				}
-				break;
-
-			default:
-				break;
 			}
 		}
 	}
@@ -292,10 +276,12 @@ void PartyDialog::loadButtons() {
 	_uiSprites.load("inn.icn");
 	addButton(Common::Rect(16, 100, 40, 120), Common::KEYCODE_UP, &_uiSprites);
 	addButton(Common::Rect(52, 100, 76, 120), Common::KEYCODE_DOWN, &_uiSprites);
-	addButton(Common::Rect(87, 100, 111, 120), Common::KEYCODE_d, &_uiSprites);
-	addButton(Common::Rect(122, 100, 146, 120), Common::KEYCODE_r, &_uiSprites);
-	addButton(Common::Rect(157, 100, 181, 120), Common::KEYCODE_c, &_uiSprites);
-	addButton(Common::Rect(192, 100, 216, 120), Common::KEYCODE_x, &_uiSprites);
+
+	addButton(Common::Rect(87, 100, 111, 120), Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_DELETE, &_uiSprites);
+	addButton(Common::Rect(122, 100, 146, 120), Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_REMOVE, &_uiSprites);
+	addButton(Common::Rect(157, 100, 181, 120), Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_CREATE, &_uiSprites);
+	addButton(Common::Rect(192, 100, 216, 120), Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_EXIT, &_uiSprites);
+
 	addButton(Common::Rect(0, 0, 0, 0), Common::KEYCODE_ESCAPE);
 }
 
diff --git a/engines/xeen/dialogs/dialogs_quests.cpp b/engines/xeen/dialogs/dialogs_quests.cpp
index 08fd793391..e77c7fa0d3 100644
--- a/engines/xeen/dialogs/dialogs_quests.cpp
+++ b/engines/xeen/dialogs/dialogs_quests.cpp
@@ -222,43 +222,31 @@ void Quests::execute() {
 		if (_buttonValue == Common::KEYCODE_ESCAPE)
 			break;
 
-		switch (_buttonValue) {
-		case Common::KEYCODE_a:
-			mode = AUTO_NOTES;
-			topRow = 0;
-			break;
-		case Common::KEYCODE_i:
-			mode = QUEST_ITEMS;
-			topRow = 0;
-			break;
-		case Common::KEYCODE_q:
-			mode = CURRENT_QUESTS;
-			topRow = 0;
-			break;
-		case Common::KEYCODE_HOME:
+		if (Common::KEYCODE_HOME == _buttonValue) {
 			topRow = 0;
-			break;
-		case Common::KEYCODE_END:
+		} else if (Common::KEYCODE_END == _buttonValue) {
 			topRow = MAX(count - 1, 0);
-			break;
-		case Common::KEYCODE_PAGEUP:
+		} else if (Common::KEYCODE_PAGEUP == _buttonValue) {
 			topRow = MAX(topRow - 3, 0);
-			break;
-		case Common::KEYCODE_PAGEDOWN:
+		} else if (Common::KEYCODE_PAGEDOWN == _buttonValue) {
 			topRow = CLIP(topRow + 3, 0, MAX(count - 1, 0));
-			break;
-		case Common::KEYCODE_UP:
-		case Common::KEYCODE_KP8:
-		case Common::KEYCODE_u:
+		} else if (Common::KEYCODE_UP == _buttonValue ||
+				   Common::KEYCODE_KP8 == _buttonValue ||
+				   Common::KEYCODE_u == _buttonValue) {
 			topRow = MAX(topRow - 1, 0);
-			break;
-		case Common::KEYCODE_DOWN:
-		case Common::KEYCODE_KP2:
-		case Common::KEYCODE_d:
+		} else if (Common::KEYCODE_DOWN == _buttonValue ||
+				   Common::KEYCODE_KP2 == _buttonValue ||
+				   Common::KEYCODE_d == _buttonValue) {
 			topRow = CLIP(topRow + 1, 0, MAX(count - 1, 0));
-			break;
-		default:
-			break;
+		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_AUTO_NOTES) {
+			mode = AUTO_NOTES;
+			topRow = 0;
+		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_QUEST_ITEMS) {
+			mode = QUEST_ITEMS;
+			topRow = 0;
+		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_AUTO_NOTES) {
+			mode = CURRENT_QUESTS;
+			topRow = 0;
 		}
 	}
 
@@ -272,10 +260,10 @@ void Quests::execute() {
 void Quests::addButtons() {
 	_iconSprites.load("quest.icn");
 
+	addButton(Common::Rect(12, 109, 36, 129),   Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_QUEST_ITEMS, &_iconSprites);
+	addButton(Common::Rect(80, 109, 104, 129),  Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_CURRENT_QUESTS, &_iconSprites);
+	addButton(Common::Rect(148, 109, 172, 129), Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_AUTO_NOTES, &_iconSprites);
 
-	addButton(Common::Rect(12, 109, 36, 129), Common::KEYCODE_i, &_iconSprites);
-	addButton(Common::Rect(80, 109, 104, 129), Common::KEYCODE_q, &_iconSprites);
-	addButton(Common::Rect(148, 109, 172, 129), Common::KEYCODE_a, &_iconSprites);
 	addButton(Common::Rect(216, 109, 240, 129), Common::KEYCODE_UP, &_iconSprites);
 	addButton(Common::Rect(250, 109, 274, 129), Common::KEYCODE_DOWN, &_iconSprites);
 	addButton(Common::Rect(284, 109, 308, 129), Common::KEYCODE_ESCAPE, &_iconSprites);
diff --git a/engines/xeen/dialogs/dialogs_quick_fight.cpp b/engines/xeen/dialogs/dialogs_quick_fight.cpp
index 63acf55655..1fec1621b9 100644
--- a/engines/xeen/dialogs/dialogs_quick_fight.cpp
+++ b/engines/xeen/dialogs/dialogs_quick_fight.cpp
@@ -66,29 +66,21 @@ void QuickFight::execute() {
 				return;
 		} while (!_buttonValue && !events.timeElapsed());
 
-		switch (_buttonValue) {
-		case Common::KEYCODE_n:
-		case Common::KEYCODE_t:
-			_currentChar->_quickOption = (QuickAction)(((int)_currentChar->_quickOption + 1) % 4);
-			break;
-
-		case Common::KEYCODE_F1:
-		case Common::KEYCODE_F2:
-		case Common::KEYCODE_F3:
-		case Common::KEYCODE_F4:
-		case Common::KEYCODE_F5:
-		case Common::KEYCODE_F6: {
+		if (Common::KEYCODE_F1 == _buttonValue || 
+			Common::KEYCODE_F2 == _buttonValue || 
+			Common::KEYCODE_F3 == _buttonValue || 
+			Common::KEYCODE_F4 == _buttonValue || 
+			Common::KEYCODE_F5 == _buttonValue || 
+			Common::KEYCODE_F6 == _buttonValue) {
 			int charIdx = _buttonValue - Common::KEYCODE_F1;
 			if (charIdx < (int)combat._combatParty.size()) {
 				// Highlight new character
 				_currentChar = &party._activeParty[charIdx];
 				intf.highlightChar(charIdx);
 			}
-			break;
-		}
-
-		default:
-			break;
+		} else if (Common::KEYCODE_n == _buttonValue || 
+				   Res.KEY_CONSTANTS.DIALOGS_QUICK_FIGHT.KEY_NEXT == _buttonValue) {
+			_currentChar->_quickOption = (QuickAction)(((int)_currentChar->_quickOption + 1) % 4);
 		}
 	} while (_buttonValue != Common::KEYCODE_RETURN && _buttonValue != Common::KEYCODE_ESCAPE);
 
@@ -99,7 +91,8 @@ void QuickFight::execute() {
 void QuickFight::loadButtons() {
 	_icons.load("train.icn");
 	addButton(Common::Rect(281, 108, 305, 128), Common::KEYCODE_ESCAPE, &_icons);
-	addButton(Common::Rect(242, 108, 266, 128), Common::KEYCODE_t, &_icons);
+
+	addButton(Common::Rect(242, 108, 266, 128), Res.KEY_CONSTANTS.DIALOGS_QUICK_FIGHT.KEY_NEXT, &_icons);
 }
 
 } // End of namespace Xeen
diff --git a/engines/xeen/dialogs/dialogs_spells.cpp b/engines/xeen/dialogs/dialogs_spells.cpp
index 2c92203622..3da87d428e 100644
--- a/engines/xeen/dialogs/dialogs_spells.cpp
+++ b/engines/xeen/dialogs/dialogs_spells.cpp
@@ -383,6 +383,10 @@ const char *SpellsDialog::setSpellText(Character *c, int mode) {
 		if (c->getMaxSP() == 0) {
 			return Res.NOT_A_SPELL_CASTER;
 		} else {
+			// Debug cheat "open all spells"
+			//for (int spellIndex = 0; spellIndex < SPELLS_PER_CLASS; ++spellIndex){
+			//	c->_spells[spellIndex] = true;
+			//}
 			for (int spellIndex = 0; spellIndex < SPELLS_PER_CLASS; ++spellIndex) {
 				if (c->_spells[spellIndex]) {
 					int spellId = Res.SPELLS_ALLOWED[category][spellIndex];
@@ -501,13 +505,12 @@ int CastSpell::execute(Character *&c) {
 			checkEvents(_vm);
 		} while (!_vm->shouldExit() && events.timeElapsed() < 1 && !_buttonValue);
 
-		switch (_buttonValue) {
-		case Common::KEYCODE_F1:
-		case Common::KEYCODE_F2:
-		case Common::KEYCODE_F3:
-		case Common::KEYCODE_F4:
-		case Common::KEYCODE_F5:
-		case Common::KEYCODE_F6:
+		if (Common::KEYCODE_F1 == _buttonValue ||
+			Common::KEYCODE_F2 == _buttonValue ||
+			Common::KEYCODE_F3 == _buttonValue ||
+			Common::KEYCODE_F4 == _buttonValue ||
+			Common::KEYCODE_F5 == _buttonValue ||
+			Common::KEYCODE_F6 == _buttonValue) {
 			// Only allow changing character if the party is not in combat
 			if (_oldMode != MODE_COMBAT) {
 				_vm->_mode = (Mode)_oldMode;
@@ -521,27 +524,19 @@ int CastSpell::execute(Character *&c) {
 					break;
 				}
 			}
-			break;
 
-		case Common::KEYCODE_ESCAPE:
+		} else if (Common::KEYCODE_ESCAPE == _buttonValue) {
 			spellId = -1;
-			break;
 
-		case Common::KEYCODE_c:
+		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_CAST == _buttonValue) {
 			// Cast spell - return the selected spell Id to be cast
 			if (c->_currentSpell != -1 && !c->noActions())
 				_buttonValue = Common::KEYCODE_ESCAPE;
-			break;
-
-		case Common::KEYCODE_n:
+		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_NEW == _buttonValue) {
 			// Select new spell
 			_vm->_mode = (Mode)_oldMode;
 			c = SpellsDialog::show(_vm, this, c, SPELLS_DIALOG_SELECT);
 			redrawFlag = true;
-			break;
-
-		default:
-			break;
 		}
 	} while (!_vm->shouldExit() && _buttonValue != Common::KEYCODE_ESCAPE);
 
@@ -552,8 +547,10 @@ int CastSpell::execute(Character *&c) {
 
 void CastSpell::loadButtons() {
 	_iconSprites.load("cast.icn");
-	addButton(Common::Rect(234, 108, 259, 128), Common::KEYCODE_c, &_iconSprites);
-	addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_n, &_iconSprites);
+
+	addButton(Common::Rect(234, 108, 259, 128), Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_CAST, &_iconSprites);
+	addButton(Common::Rect(261, 108, 285, 128), Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_NEW, &_iconSprites);
+
 	addButton(Common::Rect(288, 108, 312, 128), Common::KEYCODE_ESCAPE, &_iconSprites);
 	addPartyButtons(_vm);
 }
@@ -680,26 +677,17 @@ int SelectElement::execute(int spellId) {
 			} while (!_buttonValue && events.timeElapsed() < 1);
 		} while (!_buttonValue);
 
-		switch (_buttonValue) {
-		case Common::KEYCODE_ESCAPE:
+		if (Common::KEYCODE_ESCAPE == _buttonValue) {
 			result = -1;
 			spells.addSpellCost(*combat._oldCharacter, spellId);
-			break;
-
-		case Common::KEYCODE_a:
+		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_ACID == _buttonValue) {
 			result = DT_POISON;
-			break;
-		case Common::KEYCODE_c:
+		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_COLD == _buttonValue) {
 			result = DT_COLD;
-			break;
-		case Common::KEYCODE_e:
+		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_ELEC == _buttonValue) {
 			result = DT_ELECTRICAL;
-			break;
-		case Common::KEYCODE_f:
+		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_FIRE == _buttonValue) {
 			result = DT_FIRE;
-			break;
-		default:
-			break;
 		}
 	}
 
@@ -710,10 +698,11 @@ int SelectElement::execute(int spellId) {
 
 void SelectElement::loadButtons() {
 	_iconSprites.load("element.icn");
-	addButton(Common::Rect(60, 92, 84, 112), Common::KEYCODE_f, &_iconSprites);
-	addButton(Common::Rect(90, 92, 114, 112), Common::KEYCODE_e, &_iconSprites);
-	addButton(Common::Rect(120, 92, 144, 112), Common::KEYCODE_c, &_iconSprites);
-	addButton(Common::Rect(150, 92, 174, 112), Common::KEYCODE_a, &_iconSprites);
+
+	addButton(Common::Rect(60, 92, 84, 112),   Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_FIRE, &_iconSprites);
+	addButton(Common::Rect(90, 92, 114, 112),  Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_ELEC, &_iconSprites);
+	addButton(Common::Rect(120, 92, 144, 112), Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_COLD, &_iconSprites);
+	addButton(Common::Rect(150, 92, 174, 112), Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_ACID, &_iconSprites);
 }
 
 /*------------------------------------------------------------------------*/
@@ -807,8 +796,7 @@ bool LloydsBeacon::execute() {
 			} while (!_buttonValue && events.timeElapsed() < 1);
 		} while (!_buttonValue);
 
-		switch (_buttonValue) {
-		case Common::KEYCODE_r:
+		if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_RETURN == _buttonValue) {
 			if (!ccNum && c._lloydMap >= XEEN_CASTLE1 && c._lloydMap <= XEEN_CASTLE4 && party._cloudsCompleted) {
 				// Xeen's Castle has already been destroyed
 				result = false;
@@ -823,21 +811,16 @@ bool LloydsBeacon::execute() {
 			}
 
 			_buttonValue = Common::KEYCODE_ESCAPE;
-			break;
-
-		case Common::KEYCODE_s:
-		case Common::KEYCODE_t:
+		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_SET == _buttonValue ||
+				   Common::KEYCODE_s == _buttonValue) {
 			sound.playFX(20);
 			c._lloydMap = party._mazeId;
 			c._lloydPosition = party._mazePosition;
 			c._lloydSide = ccNum;
 
 			_buttonValue = Common::KEYCODE_ESCAPE;
-			break;
-
-		default:
-			break;
 		}
+
 	} while (_buttonValue != Common::KEYCODE_ESCAPE);
 
 	w.close();
@@ -847,8 +830,8 @@ bool LloydsBeacon::execute() {
 void LloydsBeacon::loadButtons() {
 	_iconSprites.load("lloyds.icn");
 
-	addButton(Common::Rect(281, 108, 305, 128), Common::KEYCODE_r, &_iconSprites);
-	addButton(Common::Rect(242, 108, 266, 128), Common::KEYCODE_t, &_iconSprites);
+	addButton(Common::Rect(281, 108, 305, 128), Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_RETURN, &_iconSprites);
+	addButton(Common::Rect(242, 108, 266, 128), Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_SET, &_iconSprites);
 }
 
 /*------------------------------------------------------------------------*/
diff --git a/engines/xeen/locations.cpp b/engines/xeen/locations.cpp
index 71aec14737..89e14cab64 100644
--- a/engines/xeen/locations.cpp
+++ b/engines/xeen/locations.cpp
@@ -303,8 +303,8 @@ int BaseLocation::wait() {
 BankLocation::BankLocation() : BaseLocation(BANK) {
 	_icons1.load("bank.icn");
 	_icons2.load("bank2.icn");
-	addButton(Common::Rect(234, 108, 259, 128), Common::KEYCODE_d, &_icons1);
-	addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_w, &_icons1);
+	addButton(Common::Rect(234, 108, 259, 128), Res.KEY_CONSTANTS.LOCATIONS.KEY_DEP, &_icons1);
+	addButton(Common::Rect(261, 108, 285, 128), Res.KEY_CONSTANTS.LOCATIONS.KEY_WITH, &_icons1);
 	addButton(Common::Rect(288, 108, 312, 128), Common::KEYCODE_ESCAPE, &_icons1);
 	_animFrame = 1;
 
@@ -328,9 +328,9 @@ void BankLocation::drawBackground() {
 }
 
 Character *BankLocation::doOptions(Character *c) {
-	if (_buttonValue == Common::KEYCODE_d)
+	if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_DEP)
 		_buttonValue = (int)WHERE_PARTY;
-	else if (_buttonValue == Common::KEYCODE_w)
+	else if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_WITH)
 		_buttonValue = (int)WHERE_BANK;
 	else
 		return c;
@@ -353,11 +353,17 @@ void BankLocation::depositWithdrawl(PartyBank whereId) {
 		gold = party._gold;
 		gems = party._gems;
 	}
-
 	for (uint idx = 0; idx < _buttons.size(); ++idx)
 		_buttons[idx]._sprites = &_icons2;
-	_buttons[0]._value = Common::KEYCODE_o;
-	_buttons[1]._value = Common::KEYCODE_e;
+
+	if (g_vm->getLanguage() == Common::RU_RUS) {
+		// In RU version sprites in wrong order
+		_buttons[1]._value = Res.KEY_CONSTANTS.LOCATIONS.KEY_GOLD;
+		_buttons[0]._value = Res.KEY_CONSTANTS.LOCATIONS.KEY_GEMS;
+	} else {
+		_buttons[0]._value = Res.KEY_CONSTANTS.LOCATIONS.KEY_GOLD;
+		_buttons[1]._value = Res.KEY_CONSTANTS.LOCATIONS.KEY_GEMS;
+	}
 	_buttons[2]._value = Common::KEYCODE_ESCAPE;
 
 	Common::String msg = Common::String::format(Res.GOLD_GEMS,
@@ -376,9 +382,9 @@ void BankLocation::depositWithdrawl(PartyBank whereId) {
 
 	do {
 		wait();
-		if (_buttonValue == Common::KEYCODE_o) {
+		if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_GOLD) {
 			consType = CONS_GOLD;
-		} else if (_buttonValue == Common::KEYCODE_e) {
+		} else if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_GEMS) {
 			consType = CONS_GEMS;
 		} else if (_buttonValue == Common::KEYCODE_ESCAPE) {
 			break;
@@ -433,8 +439,8 @@ void BankLocation::depositWithdrawl(PartyBank whereId) {
 
 	for (uint idx = 0; idx < _buttons.size(); ++idx)
 		_buttons[idx]._sprites = &_icons1;
-	_buttons[0]._value = Common::KEYCODE_d;
-	_buttons[1]._value = Common::KEYCODE_w;
+	_buttons[0]._value = Res.KEY_CONSTANTS.LOCATIONS.KEY_DEP;
+	_buttons[1]._value = Res.KEY_CONSTANTS.LOCATIONS.KEY_WITH;
 	_buttons[2]._value = Common::KEYCODE_ESCAPE;
 
 	w.close();
diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp
index 210812e358..89a76ede3c 100644
--- a/engines/xeen/resources.cpp
+++ b/engines/xeen/resources.cpp
@@ -462,6 +462,31 @@ void Resources::loadData() {
 	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_QUEST);
 	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_RECHRG);
 	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_GOLD);
+
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_PARTY.KEY_DELETE);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_PARTY.KEY_REMOVE);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_PARTY.KEY_CREATE);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_PARTY.KEY_EXIT);
+
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_QUESTS.KEY_QUEST_ITEMS);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_QUESTS.KEY_CURRENT_QUESTS);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_QUESTS.KEY_AUTO_NOTES);
+
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_QUICK_FIGHT.KEY_NEXT);
+
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_CAST);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_NEW);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_FIRE);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_ELEC);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_COLD);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_ACID);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_SET);
+	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_RETURN);
+
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_DEP);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_WITH);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_GOLD);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_GEMS);
 }
 
 } // End of namespace Xeen
diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h
index b4e959283a..f831270d4a 100644
--- a/engines/xeen/resources.h
+++ b/engines/xeen/resources.h
@@ -527,6 +527,41 @@ public:
 			int KEY_RECHRG;
 			int KEY_GOLD;
 		} DIALOGS_ITEMS;
+
+		struct {
+			int KEY_DELETE;
+			int KEY_REMOVE;
+			int KEY_CREATE;
+			int KEY_EXIT;
+		} DIALOGS_PARTY;
+
+		struct {
+			int KEY_QUEST_ITEMS;
+			int KEY_CURRENT_QUESTS;
+			int KEY_AUTO_NOTES;
+		} DIALOGS_QUESTS;
+
+		struct {
+			int KEY_NEXT;
+		} DIALOGS_QUICK_FIGHT;
+
+		struct {
+			int KEY_CAST;
+			int KEY_NEW;
+			int KEY_FIRE;
+			int KEY_ELEC;
+			int KEY_COLD;
+			int KEY_ACID;
+			int KEY_SET;
+			int KEY_RETURN;
+		} DIALOGS_SPELLS;
+
+		struct {
+			int KEY_DEP;
+			int KEY_WITH;
+			int KEY_GOLD;
+			int KEY_GEMS;
+		} LOCATIONS;
 	} KEY_CONSTANTS;
 
 
diff --git a/engines/xeen/spells.cpp b/engines/xeen/spells.cpp
index 04d77e1f66..b5cdceaf43 100644
--- a/engines/xeen/spells.cpp
+++ b/engines/xeen/spells.cpp
@@ -85,7 +85,8 @@ void Spells::executeSpell(MagicSpell spellId) {
 		&Spells::wizardEye
 	};
 
-	(this->*SPELL_LIST[spellId])();
+	if (spellId < 76)
+		(this->*SPELL_LIST[spellId])();
 }
 
 void Spells::spellFailed() {


Commit: b655cfc03eb8e490d2ffc131ee488df3391898cf
    https://github.com/scummvm/scummvm/commit/b655cfc03eb8e490d2ffc131ee488df3391898cf
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Moving translated hotkeys to resources.
Hotkeys changed in locations, CoX Menu.
Margin fix

Changed paths:
    devtools/create_xeen/constants.cpp
    devtools/create_xeen/constants.h
    devtools/create_xeen/en_constants.h
    devtools/create_xeen/ru_constants.h
    dists/engine-data/xeen.ccs
    engines/xeen/locations.cpp
    engines/xeen/resources.cpp
    engines/xeen/resources.h
    engines/xeen/worldofxeen/worldofxeen_menu.cpp


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index bb8a773958..d60de566f2 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -555,6 +555,23 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_WITH());
 	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_GOLD());
 	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_GEMS());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_BROWSE());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_BUY_SPELLS());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_SPELL_INFO());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_SIGN_IN());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_DRINK());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_FOOD());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_TIP());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_RUMORS());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_HEAL());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_DONATION());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_UNCURSE());
+	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_TRAIN());
+
+	keys.syncNumber(KEY_CONSTANTS()->CLOUDSOFXEENMENU()->KEY_START_NEW_GAME());
+	keys.syncNumber(KEY_CONSTANTS()->CLOUDSOFXEENMENU()->KEY_LOAD_GAME());
+	keys.syncNumber(KEY_CONSTANTS()->CLOUDSOFXEENMENU()->KEY_SHOW_CREDITS());
+	keys.syncNumber(KEY_CONSTANTS()->CLOUDSOFXEENMENU()->KEY_VIEW_ENDGAME());
 
 	cc.add("CONSTKEYS" + num, keys);
 }
diff --git a/devtools/create_xeen/constants.h b/devtools/create_xeen/constants.h
index aff8fa5a86..1faaaca205 100644
--- a/devtools/create_xeen/constants.h
+++ b/devtools/create_xeen/constants.h
@@ -1351,8 +1351,29 @@ public:
 			virtual const int KEY_WITH() = 0;
 			virtual const int KEY_GOLD() = 0;
 			virtual const int KEY_GEMS() = 0;
+			virtual const int KEY_BROWSE() = 0;
+			virtual const int KEY_BUY_SPELLS() = 0;
+			virtual const int KEY_SPELL_INFO() = 0;
+			virtual const int KEY_SIGN_IN() = 0;
+			virtual const int KEY_DRINK() = 0;
+			virtual const int KEY_FOOD() = 0;
+			virtual const int KEY_TIP() = 0;
+			virtual const int KEY_RUMORS() = 0;
+			virtual const int KEY_HEAL() = 0;
+			virtual const int KEY_DONATION() = 0;
+			virtual const int KEY_UNCURSE() = 0;
+			virtual const int KEY_TRAIN() = 0;
 		};
 		virtual Locations *LOCATIONS() = 0;
+
+		class CloudsOfXeenMenu {
+		public:
+			virtual const int KEY_START_NEW_GAME() = 0;
+			virtual const int KEY_LOAD_GAME() = 0;
+			virtual const int KEY_SHOW_CREDITS() = 0;
+			virtual const int KEY_VIEW_ENDGAME() = 0;
+		};
+		virtual CloudsOfXeenMenu *CLOUDSOFXEENMENU() = 0;
 	};
 	virtual KeyConstants *KEY_CONSTANTS() = 0;
 };
diff --git a/devtools/create_xeen/en_constants.h b/devtools/create_xeen/en_constants.h
index 15d1b9dabf..ee3f3ce235 100644
--- a/devtools/create_xeen/en_constants.h
+++ b/devtools/create_xeen/en_constants.h
@@ -2117,16 +2117,41 @@ public:
 
 		class EN_Locations : public Locations {
 		public:
-			const int KEY_DEP()  { return Common::KEYCODE_d; }
-			const int KEY_WITH() { return Common::KEYCODE_w; }
-			const int KEY_GOLD() { return Common::KEYCODE_o; }
-			const int KEY_GEMS() { return Common::KEYCODE_e; }
+			const int KEY_DEP()        { return Common::KEYCODE_d; }
+			const int KEY_WITH()       { return Common::KEYCODE_w; }
+			const int KEY_GOLD()       { return Common::KEYCODE_o; }
+			const int KEY_GEMS()       { return Common::KEYCODE_e; }
+			const int KEY_BROWSE()     { return Common::KEYCODE_b; }
+			const int KEY_BUY_SPELLS() { return Common::KEYCODE_b; }
+			const int KEY_SPELL_INFO() { return Common::KEYCODE_s; }
+			const int KEY_SIGN_IN()    { return Common::KEYCODE_s; }
+			const int KEY_DRINK()      { return Common::KEYCODE_d; }
+			const int KEY_FOOD()       { return Common::KEYCODE_f; }
+			const int KEY_TIP()        { return Common::KEYCODE_t; }
+			const int KEY_RUMORS()     { return Common::KEYCODE_r; }
+			const int KEY_HEAL()       { return Common::KEYCODE_h; }
+			const int KEY_DONATION()   { return Common::KEYCODE_d; }
+			const int KEY_UNCURSE()    { return Common::KEYCODE_u; }
+			const int KEY_TRAIN()      { return Common::KEYCODE_t; }
 		};
 		EN_Locations *LOCATIONS() {
 			if (!_l) _l = new EN_Locations();
 			return _l;
 		}
 
+		class EN_CloudsOfXeenMenu : public CloudsOfXeenMenu {
+		public:
+			const int KEY_START_NEW_GAME() { return Common::KEYCODE_s; }
+			const int KEY_LOAD_GAME()      { return Common::KEYCODE_l; }
+			const int KEY_SHOW_CREDITS()   { return Common::KEYCODE_c; }
+			const int KEY_VIEW_ENDGAME()   { return Common::KEYCODE_e; }
+		};
+		EN_CloudsOfXeenMenu *CLOUDSOFXEENMENU() {
+			if (!_soxm)
+				_soxm = new EN_CloudsOfXeenMenu();
+			return _soxm;
+		}
+
 	private:
 		EN_DialogsCharInfo     *_dci = NULL;
 		EN_DialogsControlPanel *_dcp = NULL;
@@ -2138,6 +2163,7 @@ public:
 		EN_DialogsQuickFight   *_dqf = NULL;
 		EN_DialogsSpells       *_ds = NULL;
 		EN_Locations           *_l = NULL;
+		EN_CloudsOfXeenMenu    *_soxm = NULL;
 	};
 
 	EN_KeyConstants *KEY_CONSTANTS() {
diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index 4843b32207..3e57d5d87e 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -585,7 +585,7 @@ public:
 	const char *TRAINING_TEXT() {
 		return "\r\x3""c\x8E\xA1\xE3\xE7\xA5\xAD\xA8\xA5\n"						// "\r\x3""cОбучение\n"
 			   "\n"                                                             // "\n"
-			   "%s\x3""l\v090\t000\x87\xAE\xAB\x3""r\t000%s\x2\x3""c\v122\t021" // "%s\x3""l\v090\t000Зол\x3""r\t000%s\x2\x3""c\v122\t021"
+			   "%s\x3""l\v090\t000\x87\xAE\xAB\x3""r\t000%s\x2\x3""c\v122\t025" // "%s\x3""l\v090\t000Зол\x3""r\t000%s\x2\x3""c\v122\t025"
 			   "\f37\x8E\fd\xA1\xE3\xE7\xA5\xAD\xA8\xA5\t060ESC\x1";            // "\f37О\fdбучение\t060ESC\x1";
 	}
 
@@ -2123,16 +2123,40 @@ public:
 
 		class RU_Locations : public Locations {
 		public:
-			const int KEY_DEP()  { return Common::KEYCODE_d; }
-			const int KEY_WITH() { return Common::KEYCODE_c; }
-			const int KEY_GOLD() { return Common::KEYCODE_p; }
-			const int KEY_GEMS() { return Common::KEYCODE_f; }
+			const int KEY_DEP()        { return Common::KEYCODE_d; }
+			const int KEY_WITH()       { return Common::KEYCODE_c; }
+			const int KEY_GOLD()       { return Common::KEYCODE_p; }
+			const int KEY_GEMS()       { return Common::KEYCODE_f; }
+			const int KEY_BROWSE()     { return Common::KEYCODE_c; }
+			const int KEY_BUY_SPELLS() { return Common::KEYCODE_r; }
+			const int KEY_SPELL_INFO() { return Common::KEYCODE_j; }
+			const int KEY_SIGN_IN()    { return Common::KEYCODE_j; }
+			const int KEY_DRINK()      { return Common::KEYCODE_d; }
+			const int KEY_FOOD()       { return Common::KEYCODE_t; }
+			const int KEY_TIP()        { return Common::KEYCODE_x; }
+			const int KEY_RUMORS()     { return Common::KEYCODE_c; }
+			const int KEY_HEAL()       { return Common::KEYCODE_k; }
+			const int KEY_DONATION()   { return Common::KEYCODE_l; }
+			const int KEY_UNCURSE()    { return Common::KEYCODE_c; }
+			const int KEY_TRAIN()      { return Common::KEYCODE_j; }
 		};
 		RU_Locations *LOCATIONS() {
 			if (!_l) _l = new RU_Locations();
 			return _l;
 		}
 
+		class RU_CloudsOfXeenMenu : public CloudsOfXeenMenu {
+		public:
+			const int KEY_START_NEW_GAME() { return Common::KEYCODE_y; }
+			const int KEY_LOAD_GAME()      { return Common::KEYCODE_p; }
+			const int KEY_SHOW_CREDITS()   { return Common::KEYCODE_c; }
+			const int KEY_VIEW_ENDGAME()   { return Common::KEYCODE_a; }
+		};
+		RU_CloudsOfXeenMenu *CLOUDSOFXEENMENU() {
+			if (!_soxm)
+				_soxm = new RU_CloudsOfXeenMenu();
+			return _soxm;
+		}
 	private:
 		RU_DialogsCharInfo     *_dci = NULL;
 		RU_DialogsControlPanel *_dcp = NULL;
@@ -2144,6 +2168,7 @@ public:
 		RU_DialogsQuickFight   *_dqf = NULL;
 		RU_DialogsSpells       *_ds = NULL;
 		RU_Locations           *_l = NULL;
+		RU_CloudsOfXeenMenu    *_soxm = NULL;
 	};
 
 	RU_KeyConstants *KEY_CONSTANTS() {
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index 98f1e3528d..9737dcf0e2 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/locations.cpp b/engines/xeen/locations.cpp
index 89e14cab64..35d5c94473 100644
--- a/engines/xeen/locations.cpp
+++ b/engines/xeen/locations.cpp
@@ -453,7 +453,7 @@ BlacksmithLocation::BlacksmithLocation() : BaseLocation(BLACKSMITH) {
 	_icons1.load("esc.icn");
 	addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1);
 	addButton(Common::Rect(234, 54, 308, 62), 0);
-	addButton(Common::Rect(234, 64, 308, 72), Common::KEYCODE_b);
+	addButton(Common::Rect(234, 64, 308, 72), Res.KEY_CONSTANTS.LOCATIONS.KEY_BROWSE);
 	addButton(Common::Rect(234, 74, 308, 82), 0);
 	addButton(Common::Rect(234, 84, 308, 92), 0);
 
@@ -477,7 +477,7 @@ Character *BlacksmithLocation::doOptions(Character *c) {
 			c = &party._activeParty[_buttonValue];
 			intf.highlightChar(_buttonValue);
 		}
-	} else if (_buttonValue == Common::KEYCODE_b) {
+	} else if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_BROWSE) {
 		c = ItemsDialog::show(_vm, c, ITEMMODE_BUY);
 		_buttonValue = 0;
 	}
@@ -501,8 +501,8 @@ GuildLocation::GuildLocation() : BaseLocation(GUILD) {
 	_icons1.load("esc.icn");
 	addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1);
 	addButton(Common::Rect(234, 54, 308, 62), 0);
-	addButton(Common::Rect(234, 64, 308, 72), Common::KEYCODE_b);
-	addButton(Common::Rect(234, 74, 308, 82), Common::KEYCODE_s);
+	addButton(Common::Rect(234, 64, 308, 72), Res.KEY_CONSTANTS.LOCATIONS.KEY_BUY_SPELLS);
+	addButton(Common::Rect(234, 74, 308, 82), Res.KEY_CONSTANTS.LOCATIONS.KEY_SPELL_INFO);
 	addButton(Common::Rect(234, 84, 308, 92), 0);
 	g_vm->_mode = MODE_INTERACTIVE7;
 
@@ -536,11 +536,11 @@ Character *GuildLocation::doOptions(Character *c) {
 				sound.playSound(_ccNum ? "skull1.voc" : "guild11.voc", 1);
 			}
 		}
-	} else if (_buttonValue == Common::KEYCODE_s) {
+	} else if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_SPELL_INFO) {
 		if (c->guildMember())
 			c = SpellsDialog::show(_vm, this, c, SPELLS_DIALOG_INFO);
 		_buttonValue = 0;
-	} else if (_buttonValue == Common::KEYCODE_b) {
+	} else if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_BUY_SPELLS) {
 		if (!c->noActions()) {
 			if (c->guildMember())
 				c = SpellsDialog::show(_vm, this, c, SPELLS_DIALOG_BUY);
@@ -562,11 +562,11 @@ TavernLocation::TavernLocation() : BaseLocation(TAVERN) {
 	loadStrings("tavern.bin");
 	_icons1.load("tavern.icn");
 	addButton(Common::Rect(281, 108, 305, 128), Common::KEYCODE_ESCAPE, &_icons1);
-	addButton(Common::Rect(242, 108, 266, 128), Common::KEYCODE_s, &_icons1);
-	addButton(Common::Rect(234, 54, 308, 62), Common::KEYCODE_d);
-	addButton(Common::Rect(234, 64, 308, 72), Common::KEYCODE_f);
-	addButton(Common::Rect(234, 74, 308, 82), Common::KEYCODE_t);
-	addButton(Common::Rect(234, 84, 308, 92), Common::KEYCODE_r);
+	addButton(Common::Rect(242, 108, 266, 128), Res.KEY_CONSTANTS.LOCATIONS.KEY_SIGN_IN, &_icons1);
+	addButton(Common::Rect(234, 54, 308, 62), Res.KEY_CONSTANTS.LOCATIONS.KEY_DRINK);
+	addButton(Common::Rect(234, 64, 308, 72), Res.KEY_CONSTANTS.LOCATIONS.KEY_FOOD);
+	addButton(Common::Rect(234, 74, 308, 82), Res.KEY_CONSTANTS.LOCATIONS.KEY_TIP);
+	addButton(Common::Rect(234, 84, 308, 92), Res.KEY_CONSTANTS.LOCATIONS.KEY_RUMORS);
 	g_vm->_mode = MODE_INTERACTIVE7;
 
 	_vocName = _ccNum ? "hello1.voc" : "hello.voc";
@@ -587,13 +587,13 @@ Character *TavernLocation::doOptions(Character *c) {
 	Windows &windows = *g_vm->_windows;
 	int idx = 0;
 
-	switch (_buttonValue) {
-	case Common::KEYCODE_F1:
-	case Common::KEYCODE_F2:
-	case Common::KEYCODE_F3:
-	case Common::KEYCODE_F4:
-	case Common::KEYCODE_F5:
-	case Common::KEYCODE_F6:
+	if (
+		Common::KEYCODE_F1 == _buttonValue ||
+		Common::KEYCODE_F2 == _buttonValue ||
+		Common::KEYCODE_F3 == _buttonValue ||
+		Common::KEYCODE_F4 == _buttonValue ||
+		Common::KEYCODE_F5 == _buttonValue ||
+		Common::KEYCODE_F6 == _buttonValue) {
 		// Switch character
 		_buttonValue -= Common::KEYCODE_F1;
 		if (_buttonValue < (int)party._activeParty.size()) {
@@ -601,9 +601,7 @@ Character *TavernLocation::doOptions(Character *c) {
 			intf.highlightChar(_buttonValue);
 			_v21 = 0;
 		}
-		break;
-
-	case Common::KEYCODE_d:
+	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_DRINK == _buttonValue) {
 		// Drink
 		if (!c->noActions()) {
 			if (party.subtract(CONS_GOLD, 1, WHERE_PARTY, WT_LOC_WAIT)) {
@@ -626,9 +624,7 @@ Character *TavernLocation::doOptions(Character *c) {
 				wait();
 			}
 		}
-		break;
-
-	case Common::KEYCODE_f: {
+	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_FOOD == _buttonValue) {
 		// Food
 		if (party._mazeId == (_ccNum ? 29 : 28)) {
 			_v22 = party._activeParty.size() * 15;
@@ -675,10 +671,7 @@ Character *TavernLocation::doOptions(Character *c) {
 		windows[12].close();
 		windows[10].open();
 		_buttonValue = 0;
-		break;
-	}
-
-	case Common::KEYCODE_r: {
+	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_RUMORS == _buttonValue) {
 		// Rumors
 		if (party._mazeId == (_ccNum ? 29 : 28)) {
 			idx = 0;
@@ -697,10 +690,7 @@ Character *TavernLocation::doOptions(Character *c) {
 
 		wait();
 		w.close();
-		break;
-	}
-
-	case Common::KEYCODE_s: {
+	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_SIGN_IN == _buttonValue) {
 		// Sign In
 		// Set location and position for afterwards
 		if (g_vm->getGameID() == GType_Swords) {
@@ -763,10 +753,7 @@ Character *TavernLocation::doOptions(Character *c) {
 		if (party._mazeId != 0)
 			map.load(party._mazeId);
 		_exitToUi = true;
-		break;
-	}
-
-	case Common::KEYCODE_t:
+	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_TIP == _buttonValue) {
 		if (!c->noActions()) {
 			if (!_v21) {
 				windows[10].writeString(Common::String::format(Res.TAVERN_TEXT,
@@ -813,10 +800,6 @@ Character *TavernLocation::doOptions(Character *c) {
 				}
 			}
 		}
-		break;
-
-	default:
-		break;
 	}
 
 	return c;
@@ -849,9 +832,9 @@ TempleLocation::TempleLocation() : BaseLocation(TEMPLE) {
 
 	_icons1.load("esc.icn");
 	addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1);
-	addButton(Common::Rect(234, 54, 308, 62), Common::KEYCODE_h);
-	addButton(Common::Rect(234, 64, 308, 72), Common::KEYCODE_d);
-	addButton(Common::Rect(234, 74, 308, 82), Common::KEYCODE_u);
+	addButton(Common::Rect(234, 54, 308, 62), Res.KEY_CONSTANTS.LOCATIONS.KEY_HEAL);
+	addButton(Common::Rect(234, 64, 308, 72), Res.KEY_CONSTANTS.LOCATIONS.KEY_DONATION);
+	addButton(Common::Rect(234, 74, 308, 82), Res.KEY_CONSTANTS.LOCATIONS.KEY_UNCURSE);
 	addButton(Common::Rect(234, 84, 308, 92), 0);
 
 	_vocName = _ccNum ? "help2.voc" : "maywe2.voc";
@@ -925,13 +908,12 @@ Character *TempleLocation::doOptions(Character *c) {
 	Party &party = *g_vm->_party;
 	Sound &sound = *g_vm->_sound;
 
-	switch (_buttonValue) {
-	case Common::KEYCODE_F1:
-	case Common::KEYCODE_F2:
-	case Common::KEYCODE_F3:
-	case Common::KEYCODE_F4:
-	case Common::KEYCODE_F5:
-	case Common::KEYCODE_F6:
+	if (Common::KEYCODE_F1 == _buttonValue ||
+		Common::KEYCODE_F2 == _buttonValue ||
+		Common::KEYCODE_F3 == _buttonValue ||
+		Common::KEYCODE_F4 == _buttonValue ||
+		Common::KEYCODE_F5 == _buttonValue ||
+		Common::KEYCODE_F6 == _buttonValue) {
 		// Switch character
 		_buttonValue -= Common::KEYCODE_F1;
 		if (_buttonValue < (int)party._activeParty.size()) {
@@ -939,9 +921,7 @@ Character *TempleLocation::doOptions(Character *c) {
 			intf.highlightChar(_buttonValue);
 			_dayOfWeek = 0;
 		}
-		break;
-
-	case Common::KEYCODE_d:
+	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_DONATION == _buttonValue) {
 		if (_donation && party.subtract(CONS_GOLD, _donation, WHERE_PARTY, WT_LOC_WAIT)) {
 			sound.stopSound();
 			sound.playSound("coina.voc", 1);
@@ -964,9 +944,7 @@ Character *TempleLocation::doOptions(Character *c) {
 				_donation = 0;
 			}
 		}
-		break;
-
-	case Common::KEYCODE_h:
+	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_HEAL == _buttonValue) {
 		if (_healCost && party.subtract(CONS_GOLD, _healCost, WHERE_PARTY, WT_LOC_WAIT)) {
 			c->_magicResistence._temporary = 0;
 			c->_energyResistence._temporary = 0;
@@ -991,9 +969,7 @@ Character *TempleLocation::doOptions(Character *c) {
 			sound.stopSound();
 			sound.playSound("ahh.voc", 1);
 		}
-		break;
-
-	case Common::KEYCODE_u:
+	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_UNCURSE == _buttonValue) {
 		if (_uncurseCost && party.subtract(CONS_GOLD, _uncurseCost, WHERE_PARTY, WT_LOC_WAIT)) {
 			c->_items.curseUncurse(false);
 			c->_conditions[CURSED] = 0;
@@ -1002,10 +978,6 @@ Character *TempleLocation::doOptions(Character *c) {
 			sound.stopSound();
 			sound.playSound("ahh.voc", 1);
 		}
-		break;
-
-	default:
-		break;
 	}
 
 	return c;
@@ -1020,7 +992,7 @@ TrainingLocation::TrainingLocation() : BaseLocation(TRAINING) {
 
 	_icons1.load("train.icn");
 	addButton(Common::Rect(281, 108, 305, 128), Common::KEYCODE_ESCAPE, &_icons1);
-	addButton(Common::Rect(242, 108, 266, 128), Common::KEYCODE_t, &_icons1);
+	addButton(Common::Rect(242, 108, 266, 128), Res.KEY_CONSTANTS.LOCATIONS.KEY_TRAIN, &_icons1);
 
 	_vocName = _ccNum ? "youtrn1.voc" : "training.voc";
 }
@@ -1088,13 +1060,12 @@ Character *TrainingLocation::doOptions(Character *c) {
 	Party &party = *g_vm->_party;
 	Sound &sound = *g_vm->_sound;
 
-	switch (_buttonValue) {
-	case Common::KEYCODE_F1:
-	case Common::KEYCODE_F2:
-	case Common::KEYCODE_F3:
-	case Common::KEYCODE_F4:
-	case Common::KEYCODE_F5:
-	case Common::KEYCODE_F6:
+	if (Common::KEYCODE_F1 == _buttonValue ||
+		Common::KEYCODE_F2 == _buttonValue ||
+		Common::KEYCODE_F3 == _buttonValue ||
+		Common::KEYCODE_F4 == _buttonValue ||
+		Common::KEYCODE_F5 == _buttonValue ||
+		Common::KEYCODE_F6 == _buttonValue) {
 		// Switch character
 		_buttonValue -= Common::KEYCODE_F1;
 		if (_buttonValue < (int)party._activeParty.size()) {
@@ -1102,9 +1073,7 @@ Character *TrainingLocation::doOptions(Character *c) {
 			c = &party._activeParty[_buttonValue];
 			intf.highlightChar(_buttonValue);
 		}
-		break;
-
-	case Common::KEYCODE_t:
+	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_TRAIN == _buttonValue) {
 		if (_experienceToNextLevel) {
 			sound.stopSound();
 			_drawFrameIndex = 0;
@@ -1139,10 +1108,6 @@ Character *TrainingLocation::doOptions(Character *c) {
 				intf.drawParty(true);
 			}
 		}
-		break;
-
-	default:
-		break;
 	}
 
 	return c;
diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp
index 89a76ede3c..9fbdbb51f5 100644
--- a/engines/xeen/resources.cpp
+++ b/engines/xeen/resources.cpp
@@ -487,6 +487,23 @@ void Resources::loadData() {
 	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_WITH);
 	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_GOLD);
 	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_GEMS);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_BROWSE);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_BUY_SPELLS);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_SPELL_INFO);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_SIGN_IN);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_DRINK);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_FOOD);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_TIP);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_RUMORS);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_HEAL);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_DONATION);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_UNCURSE);
+	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_TRAIN);
+
+	keys.syncNumber(KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_START_NEW_GAME);
+	keys.syncNumber(KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_LOAD_GAME);
+	keys.syncNumber(KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_SHOW_CREDITS);
+	keys.syncNumber(KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_VIEW_ENDGAME);
 }
 
 } // End of namespace Xeen
diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h
index f831270d4a..cac2e33b12 100644
--- a/engines/xeen/resources.h
+++ b/engines/xeen/resources.h
@@ -561,7 +561,26 @@ public:
 			int KEY_WITH;
 			int KEY_GOLD;
 			int KEY_GEMS;
+			int KEY_BROWSE;
+			int KEY_BUY_SPELLS;
+			int KEY_SPELL_INFO;
+			int KEY_SIGN_IN;
+			int KEY_DRINK;
+			int KEY_FOOD;
+			int KEY_TIP;
+			int KEY_RUMORS;
+			int KEY_HEAL;
+			int KEY_DONATION;
+			int KEY_UNCURSE;
+			int KEY_TRAIN;
 		} LOCATIONS;
+
+		struct {
+			int KEY_START_NEW_GAME;
+			int KEY_LOAD_GAME;
+			int KEY_SHOW_CREDITS;
+			int KEY_VIEW_ENDGAME;
+		} CLOUDSOFXEENMENU;
 	} KEY_CONSTANTS;
 
 
diff --git a/engines/xeen/worldofxeen/worldofxeen_menu.cpp b/engines/xeen/worldofxeen/worldofxeen_menu.cpp
index 7b4e540d10..7c025b4fbd 100644
--- a/engines/xeen/worldofxeen/worldofxeen_menu.cpp
+++ b/engines/xeen/worldofxeen/worldofxeen_menu.cpp
@@ -262,8 +262,7 @@ bool MainMenuDialog::handleEvents() {
 	checkEvents(g_vm);
 	int difficulty;
 
-	switch (_buttonValue) {
-	case Common::KEYCODE_s:
+	if (Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_START_NEW_GAME == _buttonValue) {
 		// Start new game
 		difficulty = DifficultyDialog::show(g_vm);
 		if (difficulty == -1)
@@ -273,9 +272,7 @@ bool MainMenuDialog::handleEvents() {
 		g_vm->_saves->newGame();
 		g_vm->_party->_difficulty = (Difficulty)difficulty;
 		g_vm->_gameMode = GMODE_PLAY_GAME;
-		break;
-
-	case Common::KEYCODE_l: {
+	} else if (Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_LOAD_GAME == _buttonValue) {
 		// Load existing game
 		int ccNum = files._ccNum;
 		g_vm->_saves->newGame();
@@ -285,20 +282,12 @@ bool MainMenuDialog::handleEvents() {
 		}
 
 		g_vm->_gameMode = GMODE_PLAY_GAME;
-		break;
-	}
-
-	case Common::KEYCODE_c:
-	case Common::KEYCODE_v:
+	} else if (Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_SHOW_CREDITS == _buttonValue) {
 		// Show credits
 		CreditsScreen::show(g_vm);
-		break;
-
-	case Common::KEYCODE_ESCAPE:
+	} else if (Common::KEYCODE_ESCAPE == _buttonValue) {
 		// Exit dialog (returning to just the animated background)
-		break;
-
-	default:
+	} else {
 		return false;
 	}
 
@@ -327,11 +316,11 @@ CloudsMenuDialog::~CloudsMenuDialog() {
 
 void CloudsMenuDialog::loadButtons() {
 	_buttonSprites.load("start.icn");
-	addButton(Common::Rect(93, 53, 227, 73), Common::KEYCODE_s, &_buttonSprites);
-	addButton(Common::Rect(93, 78, 227, 98), Common::KEYCODE_l, &_buttonSprites);
-	addButton(Common::Rect(93, 103, 227, 123), Common::KEYCODE_c, &_buttonSprites);
+	addButton(Common::Rect(93, 53, 227, 73), Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_START_NEW_GAME, &_buttonSprites);
+	addButton(Common::Rect(93, 78, 227, 98), Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_LOAD_GAME, &_buttonSprites);
+	addButton(Common::Rect(93, 103, 227, 123), Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_SHOW_CREDITS, &_buttonSprites);
 	if (g_vm->_gameWon[0])
-		addButton(Common::Rect(93, 128, 227, 148), Common::KEYCODE_e, &_buttonSprites);
+		addButton(Common::Rect(93, 128, 227, 148), Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_VIEW_ENDGAME, &_buttonSprites);
 }
 
 void CloudsMenuDialog::draw() {
@@ -347,8 +336,7 @@ bool CloudsMenuDialog::handleEvents() {
 	if (MainMenuDialog::handleEvents())
 		return true;
 
-	switch (_buttonValue) {
-	case Common::KEYCODE_e:
+	if (Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_VIEW_ENDGAME == _buttonValue) {
 		if (g_vm->_gameWon[0]) {
 			// Close the window
 			delete this;
@@ -358,10 +346,6 @@ bool CloudsMenuDialog::handleEvents() {
 			WOX_VM.showCloudsEnding(g_vm->_finalScore);
 			return true;
 		}
-		break;
-
-	default:
-		break;
 	}
 
 	return false;


Commit: 33fb7a9284f68707f3cfea0abda73e6e9cc787c2
    https://github.com/scummvm/scummvm/commit/33fb7a9284f68707f3cfea0abda73e6e9cc787c2
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Fix some errors

Changed paths:
    engines/xeen/dialogs/dialogs_quests.cpp


diff --git a/engines/xeen/dialogs/dialogs_quests.cpp b/engines/xeen/dialogs/dialogs_quests.cpp
index e77c7fa0d3..aaf35a7926 100644
--- a/engines/xeen/dialogs/dialogs_quests.cpp
+++ b/engines/xeen/dialogs/dialogs_quests.cpp
@@ -238,13 +238,13 @@ void Quests::execute() {
 				   Common::KEYCODE_KP2 == _buttonValue ||
 				   Common::KEYCODE_d == _buttonValue) {
 			topRow = CLIP(topRow + 1, 0, MAX(count - 1, 0));
-		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_AUTO_NOTES) {
+		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_AUTO_NOTES == _buttonValue) {
 			mode = AUTO_NOTES;
 			topRow = 0;
-		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_QUEST_ITEMS) {
+		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_QUEST_ITEMS == _buttonValue) {
 			mode = QUEST_ITEMS;
 			topRow = 0;
-		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_AUTO_NOTES) {
+		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_AUTO_NOTES == _buttonValue) {
 			mode = CURRENT_QUESTS;
 			topRow = 0;
 		}


Commit: 6fd4f3ba2efbc1d50171a76efda4ca82f79335ed
    https://github.com/scummvm/scummvm/commit/6fd4f3ba2efbc1d50171a76efda4ca82f79335ed
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Fix some errors

Changed paths:
    engines/xeen/dialogs/dialogs_quests.cpp


diff --git a/engines/xeen/dialogs/dialogs_quests.cpp b/engines/xeen/dialogs/dialogs_quests.cpp
index aaf35a7926..459e9868b7 100644
--- a/engines/xeen/dialogs/dialogs_quests.cpp
+++ b/engines/xeen/dialogs/dialogs_quests.cpp
@@ -244,7 +244,7 @@ void Quests::execute() {
 		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_QUEST_ITEMS == _buttonValue) {
 			mode = QUEST_ITEMS;
 			topRow = 0;
-		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_AUTO_NOTES == _buttonValue) {
+		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_CURRENT_QUESTS == _buttonValue) {
 			mode = CURRENT_QUESTS;
 			topRow = 0;
 		}


Commit: 21c727b2c7bd12b80415532c508c402b8ea1eabc
    https://github.com/scummvm/scummvm/commit/21c727b2c7bd12b80415532c508c402b8ea1eabc
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Fixed names according to conventions

Changed paths:
    devtools/create_xeen/constants.cpp
    devtools/create_xeen/constants.h
    devtools/create_xeen/en_constants.h
    devtools/create_xeen/ru_constants.h
    engines/xeen/dialogs/dialogs_char_info.cpp
    engines/xeen/dialogs/dialogs_control_panel.cpp
    engines/xeen/dialogs/dialogs_create_char.cpp
    engines/xeen/dialogs/dialogs_difficulty.cpp
    engines/xeen/dialogs/dialogs_items.cpp
    engines/xeen/dialogs/dialogs_party.cpp
    engines/xeen/dialogs/dialogs_quests.cpp
    engines/xeen/dialogs/dialogs_quick_fight.cpp
    engines/xeen/dialogs/dialogs_quick_ref.cpp
    engines/xeen/dialogs/dialogs_spells.cpp
    engines/xeen/locations.cpp
    engines/xeen/party.cpp
    engines/xeen/resources.cpp
    engines/xeen/resources.h
    engines/xeen/worldofxeen/worldofxeen_menu.cpp


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index d60de566f2..fbd690df40 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -490,88 +490,88 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	cc.add("CONSTANTS" + num, file);
 
 	Common::MemFile keys;
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CHAR_INFO()->KEY_ITEM());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CHAR_INFO()->KEY_QUICK());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CHAR_INFO()->KEY_EXCHANGE());
+	keys.syncNumber(keyConstants()->dialogsCharInfo()->KEY_ITEM());
+	keys.syncNumber(keyConstants()->dialogsCharInfo()->KEY_QUICK());
+	keys.syncNumber(keyConstants()->dialogsCharInfo()->KEY_EXCHANGE());
 
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_FXON());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_MUSICON());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_LOAD());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_SAVE());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_QUIT());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CONTROL_PANEL()->KEY_MRWIZARD());
+	keys.syncNumber(keyConstants()->dialogsControlPanel()->KEY_FXON());
+	keys.syncNumber(keyConstants()->dialogsControlPanel()->KEY_MUSICON());
+	keys.syncNumber(keyConstants()->dialogsControlPanel()->KEY_LOAD());
+	keys.syncNumber(keyConstants()->dialogsControlPanel()->KEY_SAVE());
+	keys.syncNumber(keyConstants()->dialogsControlPanel()->KEY_QUIT());
+	keys.syncNumber(keyConstants()->dialogsControlPanel()->KEY_MRWIZARD());
 
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_ROLL());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_CREATE());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_MGT());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_INT());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_PER());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_END());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_SPD());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_ACY());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_CREATE_CHAR()->KEY_LCK());
+	keys.syncNumber(keyConstants()->dialogsCreateChar()->KEY_ROLL());
+	keys.syncNumber(keyConstants()->dialogsCreateChar()->KEY_CREATE());
+	keys.syncNumber(keyConstants()->dialogsCreateChar()->KEY_MGT());
+	keys.syncNumber(keyConstants()->dialogsCreateChar()->KEY_INT());
+	keys.syncNumber(keyConstants()->dialogsCreateChar()->KEY_PER());
+	keys.syncNumber(keyConstants()->dialogsCreateChar()->KEY_END());
+	keys.syncNumber(keyConstants()->dialogsCreateChar()->KEY_SPD());
+	keys.syncNumber(keyConstants()->dialogsCreateChar()->KEY_ACY());
+	keys.syncNumber(keyConstants()->dialogsCreateChar()->KEY_LCK());
 
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_DIFFICULTY()->KEY_ADVENTURER());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_DIFFICULTY()->KEY_WARRIOR());
+	keys.syncNumber(keyConstants()->dialogsDifficulty()->KEY_ADVENTURER());
+	keys.syncNumber(keyConstants()->dialogsDifficulty()->KEY_WARRIOR());
 
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_WEAPONS());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_ARMOR());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_ACCESSORY());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_MISC());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_ENCHANT());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_USE());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_BUY());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_SELL());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_IDENTIFY());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_FIX());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_EQUIP());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_REM());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_DISC());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_QUEST());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_RECHRG());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_ITEMS()->KEY_GOLD());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_WEAPONS());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_ARMOR());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_ACCESSORY());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_MISC());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_ENCHANT());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_USE());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_BUY());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_SELL());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_IDENTIFY());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_FIX());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_EQUIP());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_REM());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_DISC());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_QUEST());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_RECHRG());
+	keys.syncNumber(keyConstants()->dialogsItems()->KEY_GOLD());
 
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_PARTY()->KEY_DELETE());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_PARTY()->KEY_REMOVE());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_PARTY()->KEY_CREATE());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_PARTY()->KEY_EXIT());
+	keys.syncNumber(keyConstants()->dialogsParty()->KEY_DELETE());
+	keys.syncNumber(keyConstants()->dialogsParty()->KEY_REMOVE());
+	keys.syncNumber(keyConstants()->dialogsParty()->KEY_CREATE());
+	keys.syncNumber(keyConstants()->dialogsParty()->KEY_EXIT());
 
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_QUESTS()->KEY_QUEST_ITEMS());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_QUESTS()->KEY_CURRENT_QUESTS());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_QUESTS()->KEY_QUEST_ITEMS());
+	keys.syncNumber(keyConstants()->dialogsQuests()->KEY_QUEST_ITEMS());
+	keys.syncNumber(keyConstants()->dialogsQuests()->KEY_CURRENT_QUESTS());
+	keys.syncNumber(keyConstants()->dialogsQuests()->KEY_QUEST_ITEMS());
 
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_QUICK_FIGHT()->KEY_NEXT());
+	keys.syncNumber(keyConstants()->dialogsQuickFight()->KEY_NEXT());
 
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_CAST());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_NEW());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_FIRE());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_ELEC());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_COLD());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_ACID());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_SET());
-	keys.syncNumber(KEY_CONSTANTS()->DIALOGS_SPELLS()->KEY_RETURN());
+	keys.syncNumber(keyConstants()->dialogsSpells()->KEY_CAST());
+	keys.syncNumber(keyConstants()->dialogsSpells()->KEY_NEW());
+	keys.syncNumber(keyConstants()->dialogsSpells()->KEY_FIRE());
+	keys.syncNumber(keyConstants()->dialogsSpells()->KEY_ELEC());
+	keys.syncNumber(keyConstants()->dialogsSpells()->KEY_COLD());
+	keys.syncNumber(keyConstants()->dialogsSpells()->KEY_ACID());
+	keys.syncNumber(keyConstants()->dialogsSpells()->KEY_SET());
+	keys.syncNumber(keyConstants()->dialogsSpells()->KEY_RETURN());
 
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_DEP());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_WITH());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_GOLD());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_GEMS());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_BROWSE());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_BUY_SPELLS());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_SPELL_INFO());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_SIGN_IN());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_DRINK());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_FOOD());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_TIP());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_RUMORS());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_HEAL());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_DONATION());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_UNCURSE());
-	keys.syncNumber(KEY_CONSTANTS()->LOCATIONS()->KEY_TRAIN());
+	keys.syncNumber(keyConstants()->locations()->KEY_DEP());
+	keys.syncNumber(keyConstants()->locations()->KEY_WITH());
+	keys.syncNumber(keyConstants()->locations()->KEY_GOLD());
+	keys.syncNumber(keyConstants()->locations()->KEY_GEMS());
+	keys.syncNumber(keyConstants()->locations()->KEY_BROWSE());
+	keys.syncNumber(keyConstants()->locations()->KEY_BUY_SPELLS());
+	keys.syncNumber(keyConstants()->locations()->KEY_SPELL_INFO());
+	keys.syncNumber(keyConstants()->locations()->KEY_SIGN_IN());
+	keys.syncNumber(keyConstants()->locations()->KEY_DRINK());
+	keys.syncNumber(keyConstants()->locations()->KEY_FOOD());
+	keys.syncNumber(keyConstants()->locations()->KEY_TIP());
+	keys.syncNumber(keyConstants()->locations()->KEY_RUMORS());
+	keys.syncNumber(keyConstants()->locations()->KEY_HEAL());
+	keys.syncNumber(keyConstants()->locations()->KEY_DONATION());
+	keys.syncNumber(keyConstants()->locations()->KEY_UNCURSE());
+	keys.syncNumber(keyConstants()->locations()->KEY_TRAIN());
 
-	keys.syncNumber(KEY_CONSTANTS()->CLOUDSOFXEENMENU()->KEY_START_NEW_GAME());
-	keys.syncNumber(KEY_CONSTANTS()->CLOUDSOFXEENMENU()->KEY_LOAD_GAME());
-	keys.syncNumber(KEY_CONSTANTS()->CLOUDSOFXEENMENU()->KEY_SHOW_CREDITS());
-	keys.syncNumber(KEY_CONSTANTS()->CLOUDSOFXEENMENU()->KEY_VIEW_ENDGAME());
+	keys.syncNumber(keyConstants()->cloudsOfXeenMenu()->KEY_START_NEW_GAME());
+	keys.syncNumber(keyConstants()->cloudsOfXeenMenu()->KEY_LOAD_GAME());
+	keys.syncNumber(keyConstants()->cloudsOfXeenMenu()->KEY_SHOW_CREDITS());
+	keys.syncNumber(keyConstants()->cloudsOfXeenMenu()->KEY_VIEW_ENDGAME());
 
 	cc.add("CONSTKEYS" + num, keys);
 }
diff --git a/devtools/create_xeen/constants.h b/devtools/create_xeen/constants.h
index 1faaaca205..81752fb17b 100644
--- a/devtools/create_xeen/constants.h
+++ b/devtools/create_xeen/constants.h
@@ -1254,7 +1254,7 @@ public:
 			virtual const int KEY_QUICK() = 0;
 			virtual const int KEY_EXCHANGE() = 0;
 		};
-		virtual DialogsCharInfo *DIALOGS_CHAR_INFO() = 0;
+		virtual DialogsCharInfo *dialogsCharInfo() = 0;
 
 		class DialogsControlPanel {
 		public:
@@ -1265,7 +1265,7 @@ public:
 			virtual const int KEY_QUIT() = 0;
 			virtual const int KEY_MRWIZARD() = 0;
 		};
-		virtual DialogsControlPanel *DIALOGS_CONTROL_PANEL() = 0;
+		virtual DialogsControlPanel *dialogsControlPanel() = 0;
 
 		class DialogsCreateChar {
 		public:
@@ -1279,14 +1279,14 @@ public:
 			virtual const int KEY_ACY() = 0;
 			virtual const int KEY_LCK() = 0;
 		};
-		virtual DialogsCreateChar *DIALOGS_CREATE_CHAR() = 0;
+		virtual DialogsCreateChar *dialogsCreateChar() = 0;
 
 		class DialogsDifficulty {
 		public:
 			virtual const int KEY_ADVENTURER() = 0;
 			virtual const int KEY_WARRIOR() = 0;
 		};
-		virtual DialogsDifficulty *DIALOGS_DIFFICULTY() = 0;
+		virtual DialogsDifficulty *dialogsDifficulty() = 0;
 
 		class DialogsItems {
 		public:
@@ -1307,7 +1307,7 @@ public:
 			virtual const int KEY_RECHRG() = 0;
 			virtual const int KEY_GOLD() = 0;
 		};
-		virtual DialogsItems *DIALOGS_ITEMS() = 0;
+		virtual DialogsItems *dialogsItems() = 0;
 
 		class DialogsParty {
 		public:
@@ -1316,7 +1316,7 @@ public:
 			virtual const int KEY_CREATE() = 0;
 			virtual const int KEY_EXIT() = 0;
 		};
-		virtual DialogsParty *DIALOGS_PARTY() = 0;
+		virtual DialogsParty *dialogsParty() = 0;
 
 		class DialogsQuests {
 		public:
@@ -1324,13 +1324,13 @@ public:
 			virtual const int KEY_CURRENT_QUESTS() = 0;
 			virtual const int KEY_AUTO_NOTES() = 0;
 		};
-		virtual DialogsQuests *DIALOGS_QUESTS() = 0;
+		virtual DialogsQuests *dialogsQuests() = 0;
 
 		class DialogsQuickFight {
 		public:
 			virtual const int KEY_NEXT() = 0;
 		};
-		virtual DialogsQuickFight *DIALOGS_QUICK_FIGHT() = 0;
+		virtual DialogsQuickFight *dialogsQuickFight() = 0;
 
 		class DialogsSpells {
 		public:
@@ -1343,7 +1343,7 @@ public:
 			virtual const int KEY_SET() = 0;
 			virtual const int KEY_RETURN() = 0;
 		};
-		virtual DialogsSpells *DIALOGS_SPELLS() = 0;
+		virtual DialogsSpells *dialogsSpells() = 0;
 
 		class Locations {
 		public:
@@ -1364,7 +1364,7 @@ public:
 			virtual const int KEY_UNCURSE() = 0;
 			virtual const int KEY_TRAIN() = 0;
 		};
-		virtual Locations *LOCATIONS() = 0;
+		virtual Locations *locations() = 0;
 
 		class CloudsOfXeenMenu {
 		public:
@@ -1373,9 +1373,9 @@ public:
 			virtual const int KEY_SHOW_CREDITS() = 0;
 			virtual const int KEY_VIEW_ENDGAME() = 0;
 		};
-		virtual CloudsOfXeenMenu *CLOUDSOFXEENMENU() = 0;
+		virtual CloudsOfXeenMenu *cloudsOfXeenMenu() = 0;
 	};
-	virtual KeyConstants *KEY_CONSTANTS() = 0;
+	virtual KeyConstants *keyConstants() = 0;
 };
 
 extern void writeConstants(CCArchive &cc);
diff --git a/devtools/create_xeen/en_constants.h b/devtools/create_xeen/en_constants.h
index ee3f3ce235..722d73a817 100644
--- a/devtools/create_xeen/en_constants.h
+++ b/devtools/create_xeen/en_constants.h
@@ -1997,7 +1997,7 @@ public:
 			const int KEY_QUICK()    { return Common::KEYCODE_q; }
 			const int KEY_EXCHANGE() { return Common::KEYCODE_e; }
 		};
-		EN_DialogsCharInfo *DIALOGS_CHAR_INFO() {
+		EN_DialogsCharInfo *dialogsCharInfo() {
 			if (!_dci)_dci = new EN_DialogsCharInfo();
 			return _dci;
 		}
@@ -2011,7 +2011,7 @@ public:
 			const int KEY_QUIT()     { return Common::KEYCODE_q; }
 			const int KEY_MRWIZARD() { return Common::KEYCODE_w; }
 		};
-		EN_DialogsControlPanel *DIALOGS_CONTROL_PANEL() {
+		EN_DialogsControlPanel *dialogsControlPanel() {
 			if (!_dcp) _dcp = new EN_DialogsControlPanel();
 			return _dcp;
 		}
@@ -2028,7 +2028,7 @@ public:
 			const int KEY_ACY()    { return Common::KEYCODE_a; }
 			const int KEY_LCK()    { return Common::KEYCODE_l; }
 		};
-		EN_DialogsCreateChar *DIALOGS_CREATE_CHAR() {
+		EN_DialogsCreateChar *dialogsCreateChar() {
 			if (!_dcc) _dcc = new EN_DialogsCreateChar();
 			return _dcc;
 		}
@@ -2038,7 +2038,7 @@ public:
 			const int KEY_ADVENTURER() { return Common::KEYCODE_a; }
 			const int KEY_WARRIOR()    { return Common::KEYCODE_w; }
 		};
-		EN_DialogsDifficulty *DIALOGS_DIFFICULTY() {
+		EN_DialogsDifficulty *dialogsDifficulty() {
 			if (!_dd) _dd = new EN_DialogsDifficulty();
 			return _dd;
 		}
@@ -2062,7 +2062,7 @@ public:
 			const int KEY_RECHRG()    { return Common::KEYCODE_r; }
 			const int KEY_GOLD()      { return Common::KEYCODE_g; }
 		};
-		EN_DialogsItems *DIALOGS_ITEMS() {
+		EN_DialogsItems *dialogsItems() {
 			if (!_di) _di = new EN_DialogsItems();
 			return _di;
 		}
@@ -2074,7 +2074,7 @@ public:
 			const int KEY_CREATE() { return Common::KEYCODE_c; }
 			const int KEY_EXIT()   { return Common::KEYCODE_x; }
 		};
-		EN_DialogsParty *DIALOGS_PARTY() {
+		EN_DialogsParty *dialogsParty() {
 			if (!_dp) _dp = new EN_DialogsParty();
 			return _dp;
 		}
@@ -2085,7 +2085,7 @@ public:
 			const int KEY_CURRENT_QUESTS() { return Common::KEYCODE_q; }
 			const int KEY_AUTO_NOTES()     { return Common::KEYCODE_a; }
 		};
-		EN_DialogsQuests *DIALOGS_QUESTS() {
+		EN_DialogsQuests *dialogsQuests() {
 			if (!_dq) _dq = new EN_DialogsQuests();
 			return _dq;
 		}
@@ -2094,7 +2094,7 @@ public:
 		public:
 			const int KEY_NEXT() { return Common::KEYCODE_t; }
 		};
-		EN_DialogsQuickFight *DIALOGS_QUICK_FIGHT() {
+		EN_DialogsQuickFight *dialogsQuickFight() {
 			if (!_dqf) _dqf = new EN_DialogsQuickFight();
 			return _dqf;
 		}
@@ -2110,7 +2110,7 @@ public:
 			const int KEY_SET()    { return Common::KEYCODE_t; }
 			const int KEY_RETURN() { return Common::KEYCODE_r; }
 		};
-		EN_DialogsSpells *DIALOGS_SPELLS() {
+		EN_DialogsSpells *dialogsSpells() {
 			if (!_ds) _ds = new EN_DialogsSpells();
 			return _ds;
 		}
@@ -2134,7 +2134,7 @@ public:
 			const int KEY_UNCURSE()    { return Common::KEYCODE_u; }
 			const int KEY_TRAIN()      { return Common::KEYCODE_t; }
 		};
-		EN_Locations *LOCATIONS() {
+		EN_Locations *locations() {
 			if (!_l) _l = new EN_Locations();
 			return _l;
 		}
@@ -2146,7 +2146,7 @@ public:
 			const int KEY_SHOW_CREDITS()   { return Common::KEYCODE_c; }
 			const int KEY_VIEW_ENDGAME()   { return Common::KEYCODE_e; }
 		};
-		EN_CloudsOfXeenMenu *CLOUDSOFXEENMENU() {
+		EN_CloudsOfXeenMenu *cloudsOfXeenMenu() {
 			if (!_soxm)
 				_soxm = new EN_CloudsOfXeenMenu();
 			return _soxm;
@@ -2166,7 +2166,7 @@ public:
 		EN_CloudsOfXeenMenu    *_soxm = NULL;
 	};
 
-	EN_KeyConstants *KEY_CONSTANTS() {
+	EN_KeyConstants *keyConstants() {
 		if (!_kc)_kc = new EN_KeyConstants();
 		return _kc;
 	}
diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index 3e57d5d87e..f5916882c5 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -2003,7 +2003,7 @@ public:
 			const int KEY_QUICK()    { return Common::KEYCODE_COMMA; }
 			const int KEY_EXCHANGE() { return Common::KEYCODE_c; }
 		};
-		RU_DialogsCharInfo *DIALOGS_CHAR_INFO() {
+		RU_DialogsCharInfo *dialogsCharInfo() {
 			if (!_dci) _dci = new RU_DialogsCharInfo();
 			return _dci;
 		}
@@ -2017,7 +2017,7 @@ public:
 			const int KEY_QUIT()     { return Common::KEYCODE_d; }
 			const int KEY_MRWIZARD() { return Common::KEYCODE_g; }
 		};
-		RU_DialogsControlPanel *DIALOGS_CONTROL_PANEL() {
+		RU_DialogsControlPanel *dialogsControlPanel() {
 			if (!_dcp) _dcp = new RU_DialogsControlPanel();
 			return _dcp;
 		}
@@ -2034,7 +2034,7 @@ public:
 			const int KEY_ACY()    { return Common::KEYCODE_v; }
 			const int KEY_LCK()    { return Common::KEYCODE_e; }
 		};
-		RU_DialogsCreateChar *DIALOGS_CREATE_CHAR() {
+		RU_DialogsCreateChar *dialogsCreateChar() {
 			if (!_dcc) _dcc = new RU_DialogsCreateChar();
 			return _dcc;
 		}
@@ -2044,7 +2044,7 @@ public:
 			const int KEY_ADVENTURER() { return Common::KEYCODE_f; }
 			const int KEY_WARRIOR()    { return Common::KEYCODE_d; }
 		};
-		RU_DialogsDifficulty *DIALOGS_DIFFICULTY() {
+		RU_DialogsDifficulty *dialogsDifficulty() {
 			if (!_dd) _dd = new RU_DialogsDifficulty();
 			return _dd;
 		}
@@ -2068,7 +2068,7 @@ public:
 			const int KEY_RECHRG()    { return Common::KEYCODE_g; }
 			const int KEY_GOLD()      { return Common::KEYCODE_p; }
 		};
-		RU_DialogsItems *DIALOGS_ITEMS() {
+		RU_DialogsItems *dialogsItems() {
 			if (!_di) _di = new RU_DialogsItems();
 			return _di;
 		}
@@ -2080,7 +2080,7 @@ public:
 			const int KEY_CREATE() { return Common::KEYCODE_c; }
 			const int KEY_EXIT()   { return Common::KEYCODE_s; }
 		};
-		RU_DialogsParty *DIALOGS_PARTY() {
+		RU_DialogsParty *dialogsParty() {
 			if (!_dp) _dp = new RU_DialogsParty();
 			return _dp;
 		}
@@ -2091,7 +2091,7 @@ public:
 			const int KEY_CURRENT_QUESTS() { return Common::KEYCODE_p; }
 			const int KEY_AUTO_NOTES()     { return Common::KEYCODE_f; }
 		};
-		RU_DialogsQuests *DIALOGS_QUESTS() {
+		RU_DialogsQuests *dialogsQuests() {
 			if (!_dq) _dq = new RU_DialogsQuests();
 			return _dq;
 		}
@@ -2100,7 +2100,7 @@ public:
 		public:
 			const int KEY_NEXT() { return Common::KEYCODE_c; }
 		};
-		RU_DialogsQuickFight *DIALOGS_QUICK_FIGHT() {
+		RU_DialogsQuickFight *dialogsQuickFight() {
 			if (!_dqf) _dqf = new RU_DialogsQuickFight();
 			return _dqf;
 		}
@@ -2116,7 +2116,7 @@ public:
 			const int KEY_SET()    { return Common::KEYCODE_e; }
 			const int KEY_RETURN() { return Common::KEYCODE_d; }
 		};
-		RU_DialogsSpells *DIALOGS_SPELLS() {
+		RU_DialogsSpells *dialogsSpells() {
 			if (!_ds) _ds = new RU_DialogsSpells();
 			return _ds;
 		}
@@ -2140,7 +2140,7 @@ public:
 			const int KEY_UNCURSE()    { return Common::KEYCODE_c; }
 			const int KEY_TRAIN()      { return Common::KEYCODE_j; }
 		};
-		RU_Locations *LOCATIONS() {
+		RU_Locations *locations() {
 			if (!_l) _l = new RU_Locations();
 			return _l;
 		}
@@ -2152,7 +2152,7 @@ public:
 			const int KEY_SHOW_CREDITS()   { return Common::KEYCODE_c; }
 			const int KEY_VIEW_ENDGAME()   { return Common::KEYCODE_a; }
 		};
-		RU_CloudsOfXeenMenu *CLOUDSOFXEENMENU() {
+		RU_CloudsOfXeenMenu *cloudsOfXeenMenu() {
 			if (!_soxm)
 				_soxm = new RU_CloudsOfXeenMenu();
 			return _soxm;
@@ -2171,7 +2171,7 @@ public:
 		RU_CloudsOfXeenMenu    *_soxm = NULL;
 	};
 
-	RU_KeyConstants *KEY_CONSTANTS() {
+	RU_KeyConstants *keyConstants() {
 		if (!_kc) _kc = new RU_KeyConstants();
 		return _kc;
 	}
diff --git a/engines/xeen/dialogs/dialogs_char_info.cpp b/engines/xeen/dialogs/dialogs_char_info.cpp
index d0f964a6c5..ed04b185c6 100644
--- a/engines/xeen/dialogs/dialogs_char_info.cpp
+++ b/engines/xeen/dialogs/dialogs_char_info.cpp
@@ -169,7 +169,7 @@ void CharacterInfo::execute(int charIndex) {
 			if (result)
 				redrawFlag = true;
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_EXCHANGE == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsCharInfo.KEY_EXCHANGE == _buttonValue) {
 			if (oldMode == MODE_COMBAT) {
 				ErrorScroll::show(_vm, Res.EXCHANGING_IN_COMBAT, WT_FREEZE_WAIT);
 			} else {
@@ -179,7 +179,7 @@ void CharacterInfo::execute(int charIndex) {
 				redrawFlag = true;
 			}
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_ITEM == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsCharInfo.KEY_ITEM == _buttonValue) {
 			_vm->_mode = oldMode;
 			_vm->_combat->_itemFlag = _vm->_mode == MODE_COMBAT;
 			c = ItemsDialog::show(_vm, c, ITEMMODE_CHAR_INFO);
@@ -192,7 +192,7 @@ void CharacterInfo::execute(int charIndex) {
 			_vm->_mode = MODE_CHARACTER_INFO;
 			redrawFlag = true;
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_QUICK == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsCharInfo.KEY_QUICK == _buttonValue) {
 			QuickReferenceDialog::show(_vm);
 			redrawFlag = true;
 
@@ -261,9 +261,9 @@ void CharacterInfo::addButtons() {
 	addButton(Common::Rect(177, 93, 201, 113), 1019, &_iconSprites);
 	addButton(Common::Rect(177, 116, 201, 136), 1020, &_iconSprites);
 
-	addButton(Common::Rect(285, 11, 309, 31), Res.KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_ITEM, &_iconSprites);
-	addButton(Common::Rect(285, 43, 309, 63), Res.KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_QUICK, &_iconSprites);
-	addButton(Common::Rect(285, 75, 309, 95), Res.KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_EXCHANGE, &_iconSprites);
+	addButton(Common::Rect(285, 11, 309, 31), Res.KeyConstants.DialogsCharInfo.KEY_ITEM, &_iconSprites);
+	addButton(Common::Rect(285, 43, 309, 63), Res.KeyConstants.DialogsCharInfo.KEY_QUICK, &_iconSprites);
+	addButton(Common::Rect(285, 75, 309, 95), Res.KeyConstants.DialogsCharInfo.KEY_EXCHANGE, &_iconSprites);
 
 	addButton(Common::Rect(285, 107, 309, 127), Common::KEYCODE_ESCAPE, &_iconSprites);
 	addPartyButtons(_vm);
diff --git a/engines/xeen/dialogs/dialogs_control_panel.cpp b/engines/xeen/dialogs/dialogs_control_panel.cpp
index 3ed9cfd88c..13aa3a8adf 100644
--- a/engines/xeen/dialogs/dialogs_control_panel.cpp
+++ b/engines/xeen/dialogs/dialogs_control_panel.cpp
@@ -83,13 +83,13 @@ int ControlPanel::execute() {
 				return 0;
 		} while (!_buttonValue && events.timeElapsed() < 2);
 
-		if (Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_QUIT == _buttonValue) {
+		if (Res.KeyConstants.DialogsControlPanel.KEY_QUIT == _buttonValue) {
 			if (Confirm::show(g_vm, Res.CONFIRM_QUIT)) {
 				g_vm->_gameMode = GMODE_QUIT;
 				result = 1;
 			}
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_MRWIZARD == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsControlPanel.KEY_MRWIZARD == _buttonValue) {
 			if (Confirm::show(g_vm, Res.MR_WIZARD)) {
 				w.close();
 				if (!windows[2]._enabled) {
@@ -111,7 +111,7 @@ int ControlPanel::execute() {
 				result = 2;
 			}
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_LOAD == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsControlPanel.KEY_LOAD == _buttonValue) {
 			if (_vm->_mode == MODE_COMBAT) {
 				ErrorScroll::show(_vm, Res.NO_LOADING_IN_COMBAT);
 			} else {
@@ -119,7 +119,7 @@ int ControlPanel::execute() {
 				result = 3;
 			}
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_SAVE == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsControlPanel.KEY_SAVE == _buttonValue) {
 			if (_vm->_mode == MODE_COMBAT) {
 				ErrorScroll::show(_vm, Res.NO_SAVING_IN_COMBAT);
 			} else {
@@ -127,10 +127,10 @@ int ControlPanel::execute() {
 				result = 4;
 			}
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_FXON == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsControlPanel.KEY_FXON == _buttonValue) {
 			sound.setFxOn(!sound._fxOn);
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_MUSICON == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsControlPanel.KEY_MUSICON == _buttonValue) {
 			sound.setMusicOn(!sound._musicOn);
 
 		} else if (Common::KEYCODE_ESCAPE == _buttonValue) {
@@ -166,17 +166,17 @@ int ControlPanel::execute() {
 
 void ControlPanel::loadButtons() {
 	_iconSprites.load("cpanel.icn");
-	addButton(Common::Rect(214, 56, 244, 69), Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_FXON, 0, &_iconSprites);
-	addButton(Common::Rect(214, 75, 244, 88), Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_MUSICON, 0, &_iconSprites);
-	addButton(Common::Rect(135, 56, 165, 69), Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_LOAD, 0, &_iconSprites);
-	addButton(Common::Rect(135, 75, 165, 88), Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_SAVE, 0, &_iconSprites);
+	addButton(Common::Rect(214, 56, 244, 69), Res.KeyConstants.DialogsControlPanel.KEY_FXON, 0, &_iconSprites);
+	addButton(Common::Rect(214, 75, 244, 88), Res.KeyConstants.DialogsControlPanel.KEY_MUSICON, 0, &_iconSprites);
+	addButton(Common::Rect(135, 56, 165, 69), Res.KeyConstants.DialogsControlPanel.KEY_LOAD, 0, &_iconSprites);
+	addButton(Common::Rect(135, 75, 165, 88), Res.KeyConstants.DialogsControlPanel.KEY_SAVE, 0, &_iconSprites);
 
 	// For ScummVM we've merged both Save and Save As into a single
 	// save item, so we don't need this one
 	addButton(Common::Rect(), 0);
 
-	addButton(Common::Rect(135, 94, 165, 107), Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_QUIT, 0, &_iconSprites);
-	addButton(Common::Rect(175, 113, 205, 126), Res.KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_MRWIZARD, 0, &_iconSprites);
+	addButton(Common::Rect(135, 94, 165, 107), Res.KeyConstants.DialogsControlPanel.KEY_QUIT, 0, &_iconSprites);
+	addButton(Common::Rect(175, 113, 205, 126), Res.KeyConstants.DialogsControlPanel.KEY_MRWIZARD, 0, &_iconSprites);
 }
 
 Common::String ControlPanel::getButtonText() {
diff --git a/engines/xeen/dialogs/dialogs_create_char.cpp b/engines/xeen/dialogs/dialogs_create_char.cpp
index 8c0a835572..ae97d4bcf3 100644
--- a/engines/xeen/dialogs/dialogs_create_char.cpp
+++ b/engines/xeen/dialogs/dialogs_create_char.cpp
@@ -162,13 +162,13 @@ void CreateCharacterDialog::execute() {
 
 		} else if (Common::KEYCODE_PAGEDOWN == _buttonValue) {
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_MGT == _buttonValue ||
-				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_INT == _buttonValue ||
-				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_PER == _buttonValue ||
-				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_END == _buttonValue ||
-				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_SPD == _buttonValue ||
-				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ACY == _buttonValue ||
-				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_LCK == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsCreateChar.KEY_MGT == _buttonValue ||
+				   Res.KeyConstants.DialogsCreateChar.KEY_INT == _buttonValue ||
+				   Res.KeyConstants.DialogsCreateChar.KEY_PER == _buttonValue ||
+				   Res.KeyConstants.DialogsCreateChar.KEY_END == _buttonValue ||
+				   Res.KeyConstants.DialogsCreateChar.KEY_SPD == _buttonValue ||
+				   Res.KeyConstants.DialogsCreateChar.KEY_ACY == _buttonValue ||
+				   Res.KeyConstants.DialogsCreateChar.KEY_LCK == _buttonValue) {
 			if (swapAttributes(_buttonValue)) {
 				checkClass();
 				classId = -1;
@@ -189,7 +189,7 @@ void CreateCharacterDialog::execute() {
 				selectedClass = classId = _buttonValue - 1000;
 			}
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_CREATE == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsCreateChar.KEY_CREATE == _buttonValue) {
 			_vm->_mode = MODE_FF;
 			bool result = saveCharacter(party._roster[freeCharList[charIndex]],
 										classId, race, sex);
@@ -203,7 +203,7 @@ void CreateCharacterDialog::execute() {
 			classId = selectedClass;
 
 		} else if (Common::KEYCODE_SPACE == _buttonValue ||
-				   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ROLL == _buttonValue) {
+				   Res.KeyConstants.DialogsCreateChar.KEY_ROLL == _buttonValue) {
 			// Re-roll the attributes
 			rollAttributes();
 			classId = -1;
@@ -249,15 +249,15 @@ void CreateCharacterDialog::loadButtons() {
 	_icons.load("create.icn");
 
 	// Add buttons
-	addButton(Common::Rect(132, 98, 156, 118), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ROLL, &_icons);
-	addButton(Common::Rect(132, 128, 156, 148), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_CREATE, &_icons);
-	addButton(Common::Rect(168, 19, 192, 39), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_MGT, nullptr);
-	addButton(Common::Rect(168, 43, 192, 63),   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_INT, nullptr);
-	addButton(Common::Rect(168, 67, 192, 87),   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_PER, nullptr);
-	addButton(Common::Rect(168, 91, 192, 111),  Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_END, nullptr);
-	addButton(Common::Rect(168, 115, 192, 135), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_SPD, nullptr);
-	addButton(Common::Rect(168, 139, 192, 159), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ACY, nullptr);
-	addButton(Common::Rect(168, 163, 192, 183), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_LCK, nullptr);
+	addButton(Common::Rect(132, 98, 156, 118), Res.KeyConstants.DialogsCreateChar.KEY_ROLL, &_icons);
+	addButton(Common::Rect(132, 128, 156, 148), Res.KeyConstants.DialogsCreateChar.KEY_CREATE, &_icons);
+	addButton(Common::Rect(168, 19, 192, 39), Res.KeyConstants.DialogsCreateChar.KEY_MGT, nullptr);
+	addButton(Common::Rect(168, 43, 192, 63),   Res.KeyConstants.DialogsCreateChar.KEY_INT, nullptr);
+	addButton(Common::Rect(168, 67, 192, 87),   Res.KeyConstants.DialogsCreateChar.KEY_PER, nullptr);
+	addButton(Common::Rect(168, 91, 192, 111),  Res.KeyConstants.DialogsCreateChar.KEY_END, nullptr);
+	addButton(Common::Rect(168, 115, 192, 135), Res.KeyConstants.DialogsCreateChar.KEY_SPD, nullptr);
+	addButton(Common::Rect(168, 139, 192, 159), Res.KeyConstants.DialogsCreateChar.KEY_ACY, nullptr);
+	addButton(Common::Rect(168, 163, 192, 183), Res.KeyConstants.DialogsCreateChar.KEY_LCK, nullptr);
 
 	addButton(Common::Rect(132, 158, 156, 178), Common::KEYCODE_ESCAPE, &_icons);
 	addButton(Common::Rect(86, 98, 110, 118), Common::KEYCODE_UP, &_icons);
@@ -463,19 +463,19 @@ void CreateCharacterDialog::drawDice() {
 }
 
 int CreateCharacterDialog::getAttribFromKeycode(int keycode) const {
-	if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_MGT == keycode)
+	if (Res.KeyConstants.DialogsCreateChar.KEY_MGT == keycode)
 		return MIGHT;
-	else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_INT == keycode)
+	else if (Res.KeyConstants.DialogsCreateChar.KEY_INT == keycode)
 		return INTELLECT;
-	else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_PER == keycode)
+	else if (Res.KeyConstants.DialogsCreateChar.KEY_PER == keycode)
 		return PERSONALITY;
-	else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_END == keycode)
+	else if (Res.KeyConstants.DialogsCreateChar.KEY_END == keycode)
 		return ENDURANCE;
-	else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_SPD == keycode)
+	else if (Res.KeyConstants.DialogsCreateChar.KEY_SPD == keycode)
 		return SPEED;
-	else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ACY == keycode)
+	else if (Res.KeyConstants.DialogsCreateChar.KEY_ACY == keycode)
 		return ACCURACY;
-	else if (Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_LCK == keycode)
+	else if (Res.KeyConstants.DialogsCreateChar.KEY_LCK == keycode)
 		return LUCK;
 	else
 		return -1;
@@ -521,13 +521,13 @@ int CreateCharacterDialog::exchangeAttribute(int srcAttr) {
 	saveButtons();
 
 	addButton(Common::Rect(118, 58, 142, 78), Common::KEYCODE_ESCAPE, &_icons);
-	addButton(Common::Rect(168, 19, 192, 39),   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_MGT);
-	addButton(Common::Rect(168, 43, 192, 63),   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_INT);
-	addButton(Common::Rect(168, 67, 192, 87),   Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_PER);
-	addButton(Common::Rect(168, 91, 192, 111),  Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_END);
-	addButton(Common::Rect(168, 115, 192, 135), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_SPD);
-	addButton(Common::Rect(168, 139, 192, 159), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ACY);
-	addButton(Common::Rect(168, 163, 192, 183), Res.KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_LCK);
+	addButton(Common::Rect(168, 19, 192, 39),   Res.KeyConstants.DialogsCreateChar.KEY_MGT);
+	addButton(Common::Rect(168, 43, 192, 63),   Res.KeyConstants.DialogsCreateChar.KEY_INT);
+	addButton(Common::Rect(168, 67, 192, 87),   Res.KeyConstants.DialogsCreateChar.KEY_PER);
+	addButton(Common::Rect(168, 91, 192, 111),  Res.KeyConstants.DialogsCreateChar.KEY_END);
+	addButton(Common::Rect(168, 115, 192, 135), Res.KeyConstants.DialogsCreateChar.KEY_SPD);
+	addButton(Common::Rect(168, 139, 192, 159), Res.KeyConstants.DialogsCreateChar.KEY_ACY);
+	addButton(Common::Rect(168, 163, 192, 183), Res.KeyConstants.DialogsCreateChar.KEY_LCK);
 
 	Window &w = windows[26];
 	w.open();
diff --git a/engines/xeen/dialogs/dialogs_difficulty.cpp b/engines/xeen/dialogs/dialogs_difficulty.cpp
index 566f9b2631..f6fe3d771f 100644
--- a/engines/xeen/dialogs/dialogs_difficulty.cpp
+++ b/engines/xeen/dialogs/dialogs_difficulty.cpp
@@ -52,9 +52,9 @@ int DifficultyDialog::execute() {
 		events.pollEventsAndWait();
 		checkEvents(_vm);
 
-		if (Res.KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_ADVENTURER == _buttonValue)
+		if (Res.KeyConstants.DialogsDifficulty.KEY_ADVENTURER == _buttonValue)
 			result = ADVENTURER;
-		else if (Res.KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_WARRIOR == _buttonValue)
+		else if (Res.KeyConstants.DialogsDifficulty.KEY_WARRIOR == _buttonValue)
 			result = WARRIOR;
 		else if (Common::KEYCODE_ESCAPE != _buttonValue)
 			continue;
@@ -69,8 +69,8 @@ int DifficultyDialog::execute() {
 void DifficultyDialog::loadButtons() {
 	_sprites.load("choice.icn");
 
-	addButton(Common::Rect(68, 167, 158, 187),  Res.KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_ADVENTURER, &_sprites);
-	addButton(Common::Rect(166, 167, 256, 187), Res.KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_WARRIOR, &_sprites);
+	addButton(Common::Rect(68, 167, 158, 187),  Res.KeyConstants.DialogsDifficulty.KEY_ADVENTURER, &_sprites);
+	addButton(Common::Rect(166, 167, 256, 187), Res.KeyConstants.DialogsDifficulty.KEY_WARRIOR, &_sprites);
 }
 
 } // End of namespace Xeen
diff --git a/engines/xeen/dialogs/dialogs_items.cpp b/engines/xeen/dialogs/dialogs_items.cpp
index ba67618b65..95aaf14a6b 100644
--- a/engines/xeen/dialogs/dialogs_items.cpp
+++ b/engines/xeen/dialogs/dialogs_items.cpp
@@ -375,22 +375,22 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 				redrawFlag = REDRAW_TEXT;
 			}
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_WEAPONS == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsItems.KEY_WEAPONS == _buttonValue) {
 			// Weapons category
 			category = CATEGORY_WEAPON;
 			redrawFlag = REDRAW_FULL;
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ARMOR == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsItems.KEY_ARMOR == _buttonValue) {
 			// Armor category
 			category = CATEGORY_ARMOR;
 			redrawFlag = REDRAW_FULL;
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ACCESSORY == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsItems.KEY_ACCESSORY == _buttonValue) {
 			// Accessories category
 			category = CATEGORY_ACCESSORY;
 			redrawFlag = REDRAW_FULL;
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_MISC == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsItems.KEY_MISC == _buttonValue) {
 			// Misc
 			category = CATEGORY_MISC;
 			redrawFlag = REDRAW_FULL;
@@ -398,19 +398,19 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 		} else if (mode == ITEMMODE_ENCHANT ||
 				   mode == ITEMMODE_RECHARGE ||
 				   mode == ITEMMODE_TO_GOLD) {
-			if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_USE == _buttonValue) {
+			if (Res.KeyConstants.DialogsItems.KEY_USE == _buttonValue) {
 
 			} else if (mode == ITEMMODE_ENCHANT &&
-				       Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ENCHANT == _buttonValue) {
+				       Res.KeyConstants.DialogsItems.KEY_ENCHANT == _buttonValue) {
 				actionIndex = 4;
 			} else if (mode == ITEMMODE_RECHARGE &&
-				       Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_RECHRG == _buttonValue) {
+				       Res.KeyConstants.DialogsItems.KEY_RECHRG == _buttonValue) {
 				actionIndex = 5;
 			} else if (mode == ITEMMODE_TO_GOLD &&
-				       Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_GOLD == _buttonValue) {
+				       Res.KeyConstants.DialogsItems.KEY_GOLD == _buttonValue) {
 				actionIndex = 6;
 			} else if (mode == ITEMMODE_TO_GOLD &&
-					   Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_EQUIP == _buttonValue) {
+					   Res.KeyConstants.DialogsItems.KEY_EQUIP == _buttonValue) {
 				if (category != CATEGORY_MISC)
 					actionIndex = 0;
 			}
@@ -419,35 +419,35 @@ Character *ItemsDialog::execute(Character *c, ItemsMode mode) {
 				   ITEMMODE_SELL == mode ||
 				   ITEMMODE_IDENTIFY == mode ||
 				   ITEMMODE_REPAIR == mode) {
-			if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_BUY == _buttonValue) {
+			if (Res.KeyConstants.DialogsItems.KEY_BUY == _buttonValue) {
 				mode = ITEMMODE_BUY;
 				c = &_itemsCharacter;
 				redrawFlag = REDRAW_FULL;
-			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_SELL == _buttonValue) {
+			} else if (Res.KeyConstants.DialogsItems.KEY_SELL == _buttonValue) {
 				mode = ITEMMODE_SELL;
 				c = startingChar;
 				redrawFlag = REDRAW_TEXT;
-			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_IDENTIFY == _buttonValue) {
+			} else if (Res.KeyConstants.DialogsItems.KEY_IDENTIFY == _buttonValue) {
 				mode = ITEMMODE_IDENTIFY;
 				c = startingChar;
 				redrawFlag = REDRAW_TEXT;
-			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_FIX == _buttonValue) {
+			} else if (Res.KeyConstants.DialogsItems.KEY_FIX == _buttonValue) {
 				mode = ITEMMODE_REPAIR;
 				c = startingChar;
 				redrawFlag = REDRAW_TEXT;
 			}
 		} else if (ITEMMODE_CHAR_INFO == mode) {
-			if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_EQUIP == _buttonValue) {
+			if (Res.KeyConstants.DialogsItems.KEY_EQUIP == _buttonValue) {
 				if (category != CATEGORY_MISC) 
 					actionIndex = 0;
-			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_USE == _buttonValue) {
+			} else if (Res.KeyConstants.DialogsItems.KEY_USE == _buttonValue) {
 				if (category == CATEGORY_MISC)
 					actionIndex = 2;
-			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_REM == _buttonValue) {
+			} else if (Res.KeyConstants.DialogsItems.KEY_REM == _buttonValue) {
 				actionIndex = 1;
-			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_DISC == _buttonValue) {
+			} else if (Res.KeyConstants.DialogsItems.KEY_DISC == _buttonValue) {
 				actionIndex = 3;
-			} else if (Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_QUEST == _buttonValue) {
+			} else if (Res.KeyConstants.DialogsItems.KEY_QUEST == _buttonValue) {
 				// Quests
 				Quests::show(_vm);
 				redrawFlag = REDRAW_FULL;
@@ -475,13 +475,13 @@ void ItemsDialog::loadButtons(ItemsMode mode, Character *&c, ItemCategory catego
 	clearButtons();
 	if (mode == ITEMMODE_ENCHANT || mode == ITEMMODE_RECHARGE || mode == ITEMMODE_TO_GOLD) {
 		// Enchant button list
-		addButton(Common::Rect(12, 109, 36, 129),   Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_WEAPONS, &_iconSprites);
-		addButton(Common::Rect(46, 109, 70, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ARMOR, &_iconSprites);
-		addButton(Common::Rect(80, 109, 104, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ACCESSORY, &_iconSprites);
-		addButton(Common::Rect(114, 109, 138, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_MISC, &_iconSprites);
-		addButton(Common::Rect(148, 109, 172, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ENCHANT, &_iconSprites);
+		addButton(Common::Rect(12, 109, 36, 129),   Res.KeyConstants.DialogsItems.KEY_WEAPONS, &_iconSprites);
+		addButton(Common::Rect(46, 109, 70, 129), Res.KeyConstants.DialogsItems.KEY_ARMOR, &_iconSprites);
+		addButton(Common::Rect(80, 109, 104, 129), Res.KeyConstants.DialogsItems.KEY_ACCESSORY, &_iconSprites);
+		addButton(Common::Rect(114, 109, 138, 129), Res.KeyConstants.DialogsItems.KEY_MISC, &_iconSprites);
+		addButton(Common::Rect(148, 109, 172, 129), Res.KeyConstants.DialogsItems.KEY_ENCHANT, &_iconSprites);
 		addButton(Common::Rect(284, 109, 308, 129), Common::KEYCODE_ESCAPE, &_iconSprites);
-		addButton(Common::Rect(148, 109, 172, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_USE, &_iconSprites);
+		addButton(Common::Rect(148, 109, 172, 129), Res.KeyConstants.DialogsItems.KEY_USE, &_iconSprites);
 		addButton(Common::Rect(8, 20, 263, 28), Common::KEYCODE_1);
 		addButton(Common::Rect(8, 29, 263, 37), Common::KEYCODE_2);
 		addButton(Common::Rect(8, 38, 263, 46), Common::KEYCODE_3);
@@ -494,14 +494,14 @@ void ItemsDialog::loadButtons(ItemsMode mode, Character *&c, ItemCategory catego
 	} else {
 		bool flag = mode == ITEMMODE_BUY || mode == ITEMMODE_SELL || mode == ITEMMODE_IDENTIFY
 			|| mode == ITEMMODE_REPAIR;
-		addButton(Common::Rect(12, 109, 36, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_WEAPONS, &_iconSprites);
-		addButton(Common::Rect(46, 109, 70, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ARMOR, &_iconSprites);
-		addButton(Common::Rect(80, 109, 104, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ACCESSORY, &_iconSprites);
-		addButton(Common::Rect(114, 109, 138, 129), Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_MISC, &_iconSprites);
-		addButton(Common::Rect(148, 109, 172, 129), flag ? Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_BUY : Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_EQUIP, &_iconSprites);
-		addButton(Common::Rect(182, 109, 206, 129), flag ? Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_SELL : Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_REM, &_iconSprites);
-		addButton(Common::Rect(216, 109, 240, 129), flag ? Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_IDENTIFY : Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_DISC, &_iconSprites);
-		addButton(Common::Rect(250, 109, 274, 129), flag ? Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_FIX : Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_QUEST, &_iconSprites);
+		addButton(Common::Rect(12, 109, 36, 129), Res.KeyConstants.DialogsItems.KEY_WEAPONS, &_iconSprites);
+		addButton(Common::Rect(46, 109, 70, 129), Res.KeyConstants.DialogsItems.KEY_ARMOR, &_iconSprites);
+		addButton(Common::Rect(80, 109, 104, 129), Res.KeyConstants.DialogsItems.KEY_ACCESSORY, &_iconSprites);
+		addButton(Common::Rect(114, 109, 138, 129), Res.KeyConstants.DialogsItems.KEY_MISC, &_iconSprites);
+		addButton(Common::Rect(148, 109, 172, 129), flag ? Res.KeyConstants.DialogsItems.KEY_BUY : Res.KeyConstants.DialogsItems.KEY_EQUIP, &_iconSprites);
+		addButton(Common::Rect(182, 109, 206, 129), flag ? Res.KeyConstants.DialogsItems.KEY_SELL : Res.KeyConstants.DialogsItems.KEY_REM, &_iconSprites);
+		addButton(Common::Rect(216, 109, 240, 129), flag ? Res.KeyConstants.DialogsItems.KEY_IDENTIFY : Res.KeyConstants.DialogsItems.KEY_DISC, &_iconSprites);
+		addButton(Common::Rect(250, 109, 274, 129), flag ? Res.KeyConstants.DialogsItems.KEY_FIX : Res.KeyConstants.DialogsItems.KEY_QUEST, &_iconSprites);
 		addButton(Common::Rect(284, 109, 308, 129), Common::KEYCODE_ESCAPE, &_iconSprites);
 		addButton(Common::Rect(8, 20, 263, 28), Common::KEYCODE_1);
 		addButton(Common::Rect(8, 29, 263, 37), Common::KEYCODE_2);
@@ -517,7 +517,7 @@ void ItemsDialog::loadButtons(ItemsMode mode, Character *&c, ItemCategory catego
 
 	if (mode == ITEMMODE_CHAR_INFO && category == CATEGORY_MISC) {
 		_buttons[4].setFrame(18);
-		_buttons[4]._value = Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_USE;
+		_buttons[4]._value = Res.KeyConstants.DialogsItems.KEY_USE;
 	}
 	if (mode != ITEMMODE_ENCHANT && mode != ITEMMODE_RECHARGE && mode != ITEMMODE_TO_GOLD) {
 		_buttons[5].setFrame(10);
@@ -548,11 +548,11 @@ void ItemsDialog::loadButtons(ItemsMode mode, Character *&c, ItemCategory catego
 		_buttons[4]._bounds.moveTo(148, _buttons[4]._bounds.top);
 		_buttons[9]._draw = false;
 	} else if (mode == ITEMMODE_RECHARGE) {
-		_buttons[4]._value = Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_RECHRG;
+		_buttons[4]._value = Res.KeyConstants.DialogsItems.KEY_RECHRG;
 	} else if (mode == ITEMMODE_ENCHANT) {
-		_buttons[4]._value = Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ENCHANT;
+		_buttons[4]._value = Res.KeyConstants.DialogsItems.KEY_ENCHANT;
 	} else if (mode == ITEMMODE_TO_GOLD) {
-		_buttons[4]._value = Res.KEY_CONSTANTS.DIALOGS_ITEMS.KEY_GOLD;
+		_buttons[4]._value = Res.KeyConstants.DialogsItems.KEY_GOLD;
 	}
 }
 
diff --git a/engines/xeen/dialogs/dialogs_party.cpp b/engines/xeen/dialogs/dialogs_party.cpp
index 0267dcdd23..6b76ef236a 100644
--- a/engines/xeen/dialogs/dialogs_party.cpp
+++ b/engines/xeen/dialogs/dialogs_party.cpp
@@ -159,7 +159,7 @@ void PartyDialog::execute() {
 					startingCharChanged(startingChar);
 				}
 
-			} else if (Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_EXIT == _buttonValue ||
+			} else if (Res.KeyConstants.DialogsParty.KEY_EXIT == _buttonValue ||
 				Common::KEYCODE_ESCAPE == _buttonValue ||
 				Common::KEYCODE_SPACE == _buttonValue) {
 				if (party._activeParty.size() == 0) {
@@ -184,7 +184,7 @@ void PartyDialog::execute() {
 					return;
 				}
 
-			} else if (Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_CREATE == _buttonValue) {
+			} else if (Res.KeyConstants.DialogsParty.KEY_CREATE == _buttonValue) {
 				// Create
 				if (_charList.size() == XEEN_TOTAL_CHARACTERS) {
 					ErrorScroll::show(_vm, Res.YOUR_ROSTER_IS_FULL);
@@ -211,7 +211,7 @@ void PartyDialog::execute() {
 					breakFlag = true;
 				}
 
-			} else if (Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_DELETE == _buttonValue) {
+			} else if (Res.KeyConstants.DialogsParty.KEY_DELETE == _buttonValue) {
 				// Delete character
 				if (_charList.size() > 0) {
 					int charButtonValue = selectCharacter(true, startingChar);
@@ -243,7 +243,7 @@ void PartyDialog::execute() {
 					}
 				}
 
-			} else if (Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_REMOVE == _buttonValue) {
+			} else if (Res.KeyConstants.DialogsParty.KEY_REMOVE == _buttonValue) {
 				// Remove character
 				if (party._activeParty.size() > 0) {
 					int charButtonValue = selectCharacter(false, startingChar);
@@ -277,10 +277,10 @@ void PartyDialog::loadButtons() {
 	addButton(Common::Rect(16, 100, 40, 120), Common::KEYCODE_UP, &_uiSprites);
 	addButton(Common::Rect(52, 100, 76, 120), Common::KEYCODE_DOWN, &_uiSprites);
 
-	addButton(Common::Rect(87, 100, 111, 120), Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_DELETE, &_uiSprites);
-	addButton(Common::Rect(122, 100, 146, 120), Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_REMOVE, &_uiSprites);
-	addButton(Common::Rect(157, 100, 181, 120), Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_CREATE, &_uiSprites);
-	addButton(Common::Rect(192, 100, 216, 120), Res.KEY_CONSTANTS.DIALOGS_PARTY.KEY_EXIT, &_uiSprites);
+	addButton(Common::Rect(87, 100, 111, 120), Res.KeyConstants.DialogsParty.KEY_DELETE, &_uiSprites);
+	addButton(Common::Rect(122, 100, 146, 120), Res.KeyConstants.DialogsParty.KEY_REMOVE, &_uiSprites);
+	addButton(Common::Rect(157, 100, 181, 120), Res.KeyConstants.DialogsParty.KEY_CREATE, &_uiSprites);
+	addButton(Common::Rect(192, 100, 216, 120), Res.KeyConstants.DialogsParty.KEY_EXIT, &_uiSprites);
 
 	addButton(Common::Rect(0, 0, 0, 0), Common::KEYCODE_ESCAPE);
 }
diff --git a/engines/xeen/dialogs/dialogs_quests.cpp b/engines/xeen/dialogs/dialogs_quests.cpp
index 459e9868b7..7c6feb6e90 100644
--- a/engines/xeen/dialogs/dialogs_quests.cpp
+++ b/engines/xeen/dialogs/dialogs_quests.cpp
@@ -238,13 +238,13 @@ void Quests::execute() {
 				   Common::KEYCODE_KP2 == _buttonValue ||
 				   Common::KEYCODE_d == _buttonValue) {
 			topRow = CLIP(topRow + 1, 0, MAX(count - 1, 0));
-		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_AUTO_NOTES == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsQuests.KEY_AUTO_NOTES == _buttonValue) {
 			mode = AUTO_NOTES;
 			topRow = 0;
-		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_QUEST_ITEMS == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsQuests.KEY_QUEST_ITEMS == _buttonValue) {
 			mode = QUEST_ITEMS;
 			topRow = 0;
-		} else if (Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_CURRENT_QUESTS == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsQuests.KEY_CURRENT_QUESTS == _buttonValue) {
 			mode = CURRENT_QUESTS;
 			topRow = 0;
 		}
@@ -260,9 +260,9 @@ void Quests::execute() {
 void Quests::addButtons() {
 	_iconSprites.load("quest.icn");
 
-	addButton(Common::Rect(12, 109, 36, 129),   Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_QUEST_ITEMS, &_iconSprites);
-	addButton(Common::Rect(80, 109, 104, 129),  Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_CURRENT_QUESTS, &_iconSprites);
-	addButton(Common::Rect(148, 109, 172, 129), Res.KEY_CONSTANTS.DIALOGS_QUESTS.KEY_AUTO_NOTES, &_iconSprites);
+	addButton(Common::Rect(12, 109, 36, 129),   Res.KeyConstants.DialogsQuests.KEY_QUEST_ITEMS, &_iconSprites);
+	addButton(Common::Rect(80, 109, 104, 129),  Res.KeyConstants.DialogsQuests.KEY_CURRENT_QUESTS, &_iconSprites);
+	addButton(Common::Rect(148, 109, 172, 129), Res.KeyConstants.DialogsQuests.KEY_AUTO_NOTES, &_iconSprites);
 
 	addButton(Common::Rect(216, 109, 240, 129), Common::KEYCODE_UP, &_iconSprites);
 	addButton(Common::Rect(250, 109, 274, 129), Common::KEYCODE_DOWN, &_iconSprites);
diff --git a/engines/xeen/dialogs/dialogs_quick_fight.cpp b/engines/xeen/dialogs/dialogs_quick_fight.cpp
index 1fec1621b9..ba9dc4956e 100644
--- a/engines/xeen/dialogs/dialogs_quick_fight.cpp
+++ b/engines/xeen/dialogs/dialogs_quick_fight.cpp
@@ -79,7 +79,7 @@ void QuickFight::execute() {
 				intf.highlightChar(charIdx);
 			}
 		} else if (Common::KEYCODE_n == _buttonValue || 
-				   Res.KEY_CONSTANTS.DIALOGS_QUICK_FIGHT.KEY_NEXT == _buttonValue) {
+				   Res.KeyConstants.DialogsQuickFight.KEY_NEXT == _buttonValue) {
 			_currentChar->_quickOption = (QuickAction)(((int)_currentChar->_quickOption + 1) % 4);
 		}
 	} while (_buttonValue != Common::KEYCODE_RETURN && _buttonValue != Common::KEYCODE_ESCAPE);
@@ -92,7 +92,7 @@ void QuickFight::loadButtons() {
 	_icons.load("train.icn");
 	addButton(Common::Rect(281, 108, 305, 128), Common::KEYCODE_ESCAPE, &_icons);
 
-	addButton(Common::Rect(242, 108, 266, 128), Res.KEY_CONSTANTS.DIALOGS_QUICK_FIGHT.KEY_NEXT, &_icons);
+	addButton(Common::Rect(242, 108, 266, 128), Res.KeyConstants.DialogsQuickFight.KEY_NEXT, &_icons);
 }
 
 } // End of namespace Xeen
diff --git a/engines/xeen/dialogs/dialogs_quick_ref.cpp b/engines/xeen/dialogs/dialogs_quick_ref.cpp
index 096be16fd2..54e0315520 100644
--- a/engines/xeen/dialogs/dialogs_quick_ref.cpp
+++ b/engines/xeen/dialogs/dialogs_quick_ref.cpp
@@ -63,7 +63,7 @@ void QuickReferenceDialog::execute() {
 			party._activeParty.size()); ++idx) {
 		Character &c = combat._globalCombat == 2 ? *combat._combatParty[idx] :
 			party._activeParty[idx];
-		const char **_tmpConditions = c._sex == FEMALE ? (const char **)Res.CONDITION_NAMES_F : (const char **)Res.CONDITION_NAMES_M;
+		const char **tmpConditions = c._sex == FEMALE ? (const char **)Res.CONDITION_NAMES_F : (const char **)Res.CONDITION_NAMES_M;
 		Condition condition = c.worstCondition();
 		lines[idx] = Common::String::format(Res.QUICK_REF_LINE,
 			idx * 10 + 24, idx + 1, c._name.c_str(),
@@ -73,8 +73,8 @@ void QuickReferenceDialog::execute() {
 			c.statColor(c._currentSp, c.getMaxSP()), c._currentSp,
 			c.statColor(c.getArmorClass(), c.getArmorClass(true)), c.getArmorClass(),
 			Res.CONDITION_COLORS[condition],
-			_tmpConditions[condition][0], _tmpConditions[condition][1],
-			_tmpConditions[condition][2], _tmpConditions[condition][3]
+			tmpConditions[condition][0], tmpConditions[condition][1],
+			tmpConditions[condition][2], tmpConditions[condition][3]
 		);
 	}
 
diff --git a/engines/xeen/dialogs/dialogs_spells.cpp b/engines/xeen/dialogs/dialogs_spells.cpp
index 3da87d428e..4f6819e724 100644
--- a/engines/xeen/dialogs/dialogs_spells.cpp
+++ b/engines/xeen/dialogs/dialogs_spells.cpp
@@ -528,11 +528,11 @@ int CastSpell::execute(Character *&c) {
 		} else if (Common::KEYCODE_ESCAPE == _buttonValue) {
 			spellId = -1;
 
-		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_CAST == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsSpells.KEY_CAST == _buttonValue) {
 			// Cast spell - return the selected spell Id to be cast
 			if (c->_currentSpell != -1 && !c->noActions())
 				_buttonValue = Common::KEYCODE_ESCAPE;
-		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_NEW == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsSpells.KEY_NEW == _buttonValue) {
 			// Select new spell
 			_vm->_mode = (Mode)_oldMode;
 			c = SpellsDialog::show(_vm, this, c, SPELLS_DIALOG_SELECT);
@@ -548,8 +548,8 @@ int CastSpell::execute(Character *&c) {
 void CastSpell::loadButtons() {
 	_iconSprites.load("cast.icn");
 
-	addButton(Common::Rect(234, 108, 259, 128), Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_CAST, &_iconSprites);
-	addButton(Common::Rect(261, 108, 285, 128), Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_NEW, &_iconSprites);
+	addButton(Common::Rect(234, 108, 259, 128), Res.KeyConstants.DialogsSpells.KEY_CAST, &_iconSprites);
+	addButton(Common::Rect(261, 108, 285, 128), Res.KeyConstants.DialogsSpells.KEY_NEW, &_iconSprites);
 
 	addButton(Common::Rect(288, 108, 312, 128), Common::KEYCODE_ESCAPE, &_iconSprites);
 	addPartyButtons(_vm);
@@ -680,13 +680,13 @@ int SelectElement::execute(int spellId) {
 		if (Common::KEYCODE_ESCAPE == _buttonValue) {
 			result = -1;
 			spells.addSpellCost(*combat._oldCharacter, spellId);
-		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_ACID == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsSpells.KEY_ACID == _buttonValue) {
 			result = DT_POISON;
-		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_COLD == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsSpells.KEY_COLD == _buttonValue) {
 			result = DT_COLD;
-		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_ELEC == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsSpells.KEY_ELEC == _buttonValue) {
 			result = DT_ELECTRICAL;
-		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_FIRE == _buttonValue) {
+		} else if (Res.KeyConstants.DialogsSpells.KEY_FIRE == _buttonValue) {
 			result = DT_FIRE;
 		}
 	}
@@ -699,10 +699,10 @@ int SelectElement::execute(int spellId) {
 void SelectElement::loadButtons() {
 	_iconSprites.load("element.icn");
 
-	addButton(Common::Rect(60, 92, 84, 112),   Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_FIRE, &_iconSprites);
-	addButton(Common::Rect(90, 92, 114, 112),  Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_ELEC, &_iconSprites);
-	addButton(Common::Rect(120, 92, 144, 112), Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_COLD, &_iconSprites);
-	addButton(Common::Rect(150, 92, 174, 112), Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_ACID, &_iconSprites);
+	addButton(Common::Rect(60, 92, 84, 112),   Res.KeyConstants.DialogsSpells.KEY_FIRE, &_iconSprites);
+	addButton(Common::Rect(90, 92, 114, 112),  Res.KeyConstants.DialogsSpells.KEY_ELEC, &_iconSprites);
+	addButton(Common::Rect(120, 92, 144, 112), Res.KeyConstants.DialogsSpells.KEY_COLD, &_iconSprites);
+	addButton(Common::Rect(150, 92, 174, 112), Res.KeyConstants.DialogsSpells.KEY_ACID, &_iconSprites);
 }
 
 /*------------------------------------------------------------------------*/
@@ -796,7 +796,7 @@ bool LloydsBeacon::execute() {
 			} while (!_buttonValue && events.timeElapsed() < 1);
 		} while (!_buttonValue);
 
-		if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_RETURN == _buttonValue) {
+		if (Res.KeyConstants.DialogsSpells.KEY_RETURN == _buttonValue) {
 			if (!ccNum && c._lloydMap >= XEEN_CASTLE1 && c._lloydMap <= XEEN_CASTLE4 && party._cloudsCompleted) {
 				// Xeen's Castle has already been destroyed
 				result = false;
@@ -811,7 +811,7 @@ bool LloydsBeacon::execute() {
 			}
 
 			_buttonValue = Common::KEYCODE_ESCAPE;
-		} else if (Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_SET == _buttonValue ||
+		} else if (Res.KeyConstants.DialogsSpells.KEY_SET == _buttonValue ||
 				   Common::KEYCODE_s == _buttonValue) {
 			sound.playFX(20);
 			c._lloydMap = party._mazeId;
@@ -830,8 +830,8 @@ bool LloydsBeacon::execute() {
 void LloydsBeacon::loadButtons() {
 	_iconSprites.load("lloyds.icn");
 
-	addButton(Common::Rect(281, 108, 305, 128), Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_RETURN, &_iconSprites);
-	addButton(Common::Rect(242, 108, 266, 128), Res.KEY_CONSTANTS.DIALOGS_SPELLS.KEY_SET, &_iconSprites);
+	addButton(Common::Rect(281, 108, 305, 128), Res.KeyConstants.DialogsSpells.KEY_RETURN, &_iconSprites);
+	addButton(Common::Rect(242, 108, 266, 128), Res.KeyConstants.DialogsSpells.KEY_SET, &_iconSprites);
 }
 
 /*------------------------------------------------------------------------*/
diff --git a/engines/xeen/locations.cpp b/engines/xeen/locations.cpp
index 35d5c94473..d565eedaec 100644
--- a/engines/xeen/locations.cpp
+++ b/engines/xeen/locations.cpp
@@ -303,8 +303,8 @@ int BaseLocation::wait() {
 BankLocation::BankLocation() : BaseLocation(BANK) {
 	_icons1.load("bank.icn");
 	_icons2.load("bank2.icn");
-	addButton(Common::Rect(234, 108, 259, 128), Res.KEY_CONSTANTS.LOCATIONS.KEY_DEP, &_icons1);
-	addButton(Common::Rect(261, 108, 285, 128), Res.KEY_CONSTANTS.LOCATIONS.KEY_WITH, &_icons1);
+	addButton(Common::Rect(234, 108, 259, 128), Res.KeyConstants.Locations.KEY_DEP, &_icons1);
+	addButton(Common::Rect(261, 108, 285, 128), Res.KeyConstants.Locations.KEY_WITH, &_icons1);
 	addButton(Common::Rect(288, 108, 312, 128), Common::KEYCODE_ESCAPE, &_icons1);
 	_animFrame = 1;
 
@@ -328,9 +328,9 @@ void BankLocation::drawBackground() {
 }
 
 Character *BankLocation::doOptions(Character *c) {
-	if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_DEP)
+	if (_buttonValue == Res.KeyConstants.Locations.KEY_DEP)
 		_buttonValue = (int)WHERE_PARTY;
-	else if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_WITH)
+	else if (_buttonValue == Res.KeyConstants.Locations.KEY_WITH)
 		_buttonValue = (int)WHERE_BANK;
 	else
 		return c;
@@ -358,11 +358,11 @@ void BankLocation::depositWithdrawl(PartyBank whereId) {
 
 	if (g_vm->getLanguage() == Common::RU_RUS) {
 		// In RU version sprites in wrong order
-		_buttons[1]._value = Res.KEY_CONSTANTS.LOCATIONS.KEY_GOLD;
-		_buttons[0]._value = Res.KEY_CONSTANTS.LOCATIONS.KEY_GEMS;
+		_buttons[1]._value = Res.KeyConstants.Locations.KEY_GOLD;
+		_buttons[0]._value = Res.KeyConstants.Locations.KEY_GEMS;
 	} else {
-		_buttons[0]._value = Res.KEY_CONSTANTS.LOCATIONS.KEY_GOLD;
-		_buttons[1]._value = Res.KEY_CONSTANTS.LOCATIONS.KEY_GEMS;
+		_buttons[0]._value = Res.KeyConstants.Locations.KEY_GOLD;
+		_buttons[1]._value = Res.KeyConstants.Locations.KEY_GEMS;
 	}
 	_buttons[2]._value = Common::KEYCODE_ESCAPE;
 
@@ -382,9 +382,9 @@ void BankLocation::depositWithdrawl(PartyBank whereId) {
 
 	do {
 		wait();
-		if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_GOLD) {
+		if (_buttonValue == Res.KeyConstants.Locations.KEY_GOLD) {
 			consType = CONS_GOLD;
-		} else if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_GEMS) {
+		} else if (_buttonValue == Res.KeyConstants.Locations.KEY_GEMS) {
 			consType = CONS_GEMS;
 		} else if (_buttonValue == Common::KEYCODE_ESCAPE) {
 			break;
@@ -439,8 +439,8 @@ void BankLocation::depositWithdrawl(PartyBank whereId) {
 
 	for (uint idx = 0; idx < _buttons.size(); ++idx)
 		_buttons[idx]._sprites = &_icons1;
-	_buttons[0]._value = Res.KEY_CONSTANTS.LOCATIONS.KEY_DEP;
-	_buttons[1]._value = Res.KEY_CONSTANTS.LOCATIONS.KEY_WITH;
+	_buttons[0]._value = Res.KeyConstants.Locations.KEY_DEP;
+	_buttons[1]._value = Res.KeyConstants.Locations.KEY_WITH;
 	_buttons[2]._value = Common::KEYCODE_ESCAPE;
 
 	w.close();
@@ -453,7 +453,7 @@ BlacksmithLocation::BlacksmithLocation() : BaseLocation(BLACKSMITH) {
 	_icons1.load("esc.icn");
 	addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1);
 	addButton(Common::Rect(234, 54, 308, 62), 0);
-	addButton(Common::Rect(234, 64, 308, 72), Res.KEY_CONSTANTS.LOCATIONS.KEY_BROWSE);
+	addButton(Common::Rect(234, 64, 308, 72), Res.KeyConstants.Locations.KEY_BROWSE);
 	addButton(Common::Rect(234, 74, 308, 82), 0);
 	addButton(Common::Rect(234, 84, 308, 92), 0);
 
@@ -477,7 +477,7 @@ Character *BlacksmithLocation::doOptions(Character *c) {
 			c = &party._activeParty[_buttonValue];
 			intf.highlightChar(_buttonValue);
 		}
-	} else if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_BROWSE) {
+	} else if (_buttonValue == Res.KeyConstants.Locations.KEY_BROWSE) {
 		c = ItemsDialog::show(_vm, c, ITEMMODE_BUY);
 		_buttonValue = 0;
 	}
@@ -501,8 +501,8 @@ GuildLocation::GuildLocation() : BaseLocation(GUILD) {
 	_icons1.load("esc.icn");
 	addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1);
 	addButton(Common::Rect(234, 54, 308, 62), 0);
-	addButton(Common::Rect(234, 64, 308, 72), Res.KEY_CONSTANTS.LOCATIONS.KEY_BUY_SPELLS);
-	addButton(Common::Rect(234, 74, 308, 82), Res.KEY_CONSTANTS.LOCATIONS.KEY_SPELL_INFO);
+	addButton(Common::Rect(234, 64, 308, 72), Res.KeyConstants.Locations.KEY_BUY_SPELLS);
+	addButton(Common::Rect(234, 74, 308, 82), Res.KeyConstants.Locations.KEY_SPELL_INFO);
 	addButton(Common::Rect(234, 84, 308, 92), 0);
 	g_vm->_mode = MODE_INTERACTIVE7;
 
@@ -536,11 +536,11 @@ Character *GuildLocation::doOptions(Character *c) {
 				sound.playSound(_ccNum ? "skull1.voc" : "guild11.voc", 1);
 			}
 		}
-	} else if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_SPELL_INFO) {
+	} else if (_buttonValue == Res.KeyConstants.Locations.KEY_SPELL_INFO) {
 		if (c->guildMember())
 			c = SpellsDialog::show(_vm, this, c, SPELLS_DIALOG_INFO);
 		_buttonValue = 0;
-	} else if (_buttonValue == Res.KEY_CONSTANTS.LOCATIONS.KEY_BUY_SPELLS) {
+	} else if (_buttonValue == Res.KeyConstants.Locations.KEY_BUY_SPELLS) {
 		if (!c->noActions()) {
 			if (c->guildMember())
 				c = SpellsDialog::show(_vm, this, c, SPELLS_DIALOG_BUY);
@@ -562,11 +562,11 @@ TavernLocation::TavernLocation() : BaseLocation(TAVERN) {
 	loadStrings("tavern.bin");
 	_icons1.load("tavern.icn");
 	addButton(Common::Rect(281, 108, 305, 128), Common::KEYCODE_ESCAPE, &_icons1);
-	addButton(Common::Rect(242, 108, 266, 128), Res.KEY_CONSTANTS.LOCATIONS.KEY_SIGN_IN, &_icons1);
-	addButton(Common::Rect(234, 54, 308, 62), Res.KEY_CONSTANTS.LOCATIONS.KEY_DRINK);
-	addButton(Common::Rect(234, 64, 308, 72), Res.KEY_CONSTANTS.LOCATIONS.KEY_FOOD);
-	addButton(Common::Rect(234, 74, 308, 82), Res.KEY_CONSTANTS.LOCATIONS.KEY_TIP);
-	addButton(Common::Rect(234, 84, 308, 92), Res.KEY_CONSTANTS.LOCATIONS.KEY_RUMORS);
+	addButton(Common::Rect(242, 108, 266, 128), Res.KeyConstants.Locations.KEY_SIGN_IN, &_icons1);
+	addButton(Common::Rect(234, 54, 308, 62), Res.KeyConstants.Locations.KEY_DRINK);
+	addButton(Common::Rect(234, 64, 308, 72), Res.KeyConstants.Locations.KEY_FOOD);
+	addButton(Common::Rect(234, 74, 308, 82), Res.KeyConstants.Locations.KEY_TIP);
+	addButton(Common::Rect(234, 84, 308, 92), Res.KeyConstants.Locations.KEY_RUMORS);
 	g_vm->_mode = MODE_INTERACTIVE7;
 
 	_vocName = _ccNum ? "hello1.voc" : "hello.voc";
@@ -601,7 +601,7 @@ Character *TavernLocation::doOptions(Character *c) {
 			intf.highlightChar(_buttonValue);
 			_v21 = 0;
 		}
-	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_DRINK == _buttonValue) {
+	} else if (Res.KeyConstants.Locations.KEY_DRINK == _buttonValue) {
 		// Drink
 		if (!c->noActions()) {
 			if (party.subtract(CONS_GOLD, 1, WHERE_PARTY, WT_LOC_WAIT)) {
@@ -624,7 +624,7 @@ Character *TavernLocation::doOptions(Character *c) {
 				wait();
 			}
 		}
-	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_FOOD == _buttonValue) {
+	} else if (Res.KeyConstants.Locations.KEY_FOOD == _buttonValue) {
 		// Food
 		if (party._mazeId == (_ccNum ? 29 : 28)) {
 			_v22 = party._activeParty.size() * 15;
@@ -671,7 +671,7 @@ Character *TavernLocation::doOptions(Character *c) {
 		windows[12].close();
 		windows[10].open();
 		_buttonValue = 0;
-	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_RUMORS == _buttonValue) {
+	} else if (Res.KeyConstants.Locations.KEY_RUMORS == _buttonValue) {
 		// Rumors
 		if (party._mazeId == (_ccNum ? 29 : 28)) {
 			idx = 0;
@@ -690,7 +690,7 @@ Character *TavernLocation::doOptions(Character *c) {
 
 		wait();
 		w.close();
-	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_SIGN_IN == _buttonValue) {
+	} else if (Res.KeyConstants.Locations.KEY_SIGN_IN == _buttonValue) {
 		// Sign In
 		// Set location and position for afterwards
 		if (g_vm->getGameID() == GType_Swords) {
@@ -753,7 +753,7 @@ Character *TavernLocation::doOptions(Character *c) {
 		if (party._mazeId != 0)
 			map.load(party._mazeId);
 		_exitToUi = true;
-	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_TIP == _buttonValue) {
+	} else if (Res.KeyConstants.Locations.KEY_TIP == _buttonValue) {
 		if (!c->noActions()) {
 			if (!_v21) {
 				windows[10].writeString(Common::String::format(Res.TAVERN_TEXT,
@@ -832,9 +832,9 @@ TempleLocation::TempleLocation() : BaseLocation(TEMPLE) {
 
 	_icons1.load("esc.icn");
 	addButton(Common::Rect(261, 108, 285, 128), Common::KEYCODE_ESCAPE, &_icons1);
-	addButton(Common::Rect(234, 54, 308, 62), Res.KEY_CONSTANTS.LOCATIONS.KEY_HEAL);
-	addButton(Common::Rect(234, 64, 308, 72), Res.KEY_CONSTANTS.LOCATIONS.KEY_DONATION);
-	addButton(Common::Rect(234, 74, 308, 82), Res.KEY_CONSTANTS.LOCATIONS.KEY_UNCURSE);
+	addButton(Common::Rect(234, 54, 308, 62), Res.KeyConstants.Locations.KEY_HEAL);
+	addButton(Common::Rect(234, 64, 308, 72), Res.KeyConstants.Locations.KEY_DONATION);
+	addButton(Common::Rect(234, 74, 308, 82), Res.KeyConstants.Locations.KEY_UNCURSE);
 	addButton(Common::Rect(234, 84, 308, 92), 0);
 
 	_vocName = _ccNum ? "help2.voc" : "maywe2.voc";
@@ -921,7 +921,7 @@ Character *TempleLocation::doOptions(Character *c) {
 			intf.highlightChar(_buttonValue);
 			_dayOfWeek = 0;
 		}
-	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_DONATION == _buttonValue) {
+	} else if (Res.KeyConstants.Locations.KEY_DONATION == _buttonValue) {
 		if (_donation && party.subtract(CONS_GOLD, _donation, WHERE_PARTY, WT_LOC_WAIT)) {
 			sound.stopSound();
 			sound.playSound("coina.voc", 1);
@@ -944,7 +944,7 @@ Character *TempleLocation::doOptions(Character *c) {
 				_donation = 0;
 			}
 		}
-	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_HEAL == _buttonValue) {
+	} else if (Res.KeyConstants.Locations.KEY_HEAL == _buttonValue) {
 		if (_healCost && party.subtract(CONS_GOLD, _healCost, WHERE_PARTY, WT_LOC_WAIT)) {
 			c->_magicResistence._temporary = 0;
 			c->_energyResistence._temporary = 0;
@@ -969,7 +969,7 @@ Character *TempleLocation::doOptions(Character *c) {
 			sound.stopSound();
 			sound.playSound("ahh.voc", 1);
 		}
-	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_UNCURSE == _buttonValue) {
+	} else if (Res.KeyConstants.Locations.KEY_UNCURSE == _buttonValue) {
 		if (_uncurseCost && party.subtract(CONS_GOLD, _uncurseCost, WHERE_PARTY, WT_LOC_WAIT)) {
 			c->_items.curseUncurse(false);
 			c->_conditions[CURSED] = 0;
@@ -992,7 +992,7 @@ TrainingLocation::TrainingLocation() : BaseLocation(TRAINING) {
 
 	_icons1.load("train.icn");
 	addButton(Common::Rect(281, 108, 305, 128), Common::KEYCODE_ESCAPE, &_icons1);
-	addButton(Common::Rect(242, 108, 266, 128), Res.KEY_CONSTANTS.LOCATIONS.KEY_TRAIN, &_icons1);
+	addButton(Common::Rect(242, 108, 266, 128), Res.KeyConstants.Locations.KEY_TRAIN, &_icons1);
 
 	_vocName = _ccNum ? "youtrn1.voc" : "training.voc";
 }
@@ -1073,7 +1073,7 @@ Character *TrainingLocation::doOptions(Character *c) {
 			c = &party._activeParty[_buttonValue];
 			intf.highlightChar(_buttonValue);
 		}
-	} else if (Res.KEY_CONSTANTS.LOCATIONS.KEY_TRAIN == _buttonValue) {
+	} else if (Res.KeyConstants.Locations.KEY_TRAIN == _buttonValue) {
 		if (_experienceToNextLevel) {
 			sound.stopSound();
 			_drawFrameIndex = 0;
diff --git a/engines/xeen/party.cpp b/engines/xeen/party.cpp
index 55d13af5a8..e3184d9b7b 100644
--- a/engines/xeen/party.cpp
+++ b/engines/xeen/party.cpp
@@ -665,8 +665,8 @@ const char *Party::getConsumableForm(ConsumableType consumableId) {
 	switch (consumableId) {
 	case CONS_GOLD: return Res.CONSUMABLE_GOLD_FORMS[0];
 	case CONS_GEMS: return Res.CONSUMABLE_GEM_FORMS[0];
+	default:        return Res.CONSUMABLE_NAMES[consumableId];
 	}
-	return Res.CONSUMABLE_NAMES[consumableId];
 }
 
 void Party::notEnough(ConsumableType consumableId, PartyBank whereId, bool mode, MessageWaitType wait) {
@@ -821,15 +821,10 @@ bool Party::arePacksFull() const {
 }
 
 const char *Party::getFoundForm(const Character &c) {
-	if (Common::RU_RUS == g_vm->getLanguage()) {
-		switch (c._sex) {
-		case MALE:
-			return Res.FOUND[0];
-		case FEMALE:
-			return Res.FOUND[1];
-		}
-	}
-	return Res.FOUND[0];
+	if (Common::RU_RUS == g_vm->getLanguage()) 
+		return Res.FOUND[FEMALE == c._sex ? 1 : 0];
+	else 
+		return Res.FOUND[0];
 }
 
 void Party::giveTreasureToCharacter(Character &c, ItemCategory category, int itemIndex) {
@@ -1483,27 +1478,17 @@ bool Party::giveTake(int takeMode, uint takeVal, int giveMode, uint giveVal, int
 }
 
 const char *Party::getPickLockForm(const Character &c) {
-	if (Common::RU_RUS == g_vm->getLanguage()) {
-		switch (c._sex) {
-		case MALE:
-			return Res.PICK_FORM[0];
-		case FEMALE:
-			return Res.PICK_FORM[1];
-		}
-	}
-	return Res.PICK_FORM[0];
+	if (Common::RU_RUS == g_vm->getLanguage())
+		return Res.PICK_FORM[FEMALE == c._sex ? 1 : 0];
+	else
+		return Res.PICK_FORM[0];
 }
 
 const char *Party::getUnablePickLockForm(const Character &c) {
-	if (Common::RU_RUS == g_vm->getLanguage()) {
-		switch (c._sex) {
-		case MALE:
-			return Res.UNABLE_TO_PICK_FORM[0];
-		case FEMALE:
-			return Res.UNABLE_TO_PICK_FORM[1];
-		}
-	}
-	return Res.UNABLE_TO_PICK_FORM[0];
+	if (Common::RU_RUS == g_vm->getLanguage())
+		return Res.UNABLE_TO_PICK_FORM[FEMALE == c._sex ? 1 : 0];
+	else
+		return Res.UNABLE_TO_PICK_FORM[0];
 }
 
 bool Party::giveExt(int mode1, uint val1, int mode2, uint val2, int mode3, uint val3, int charId) {
diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp
index 9fbdbb51f5..53d90e2e24 100644
--- a/engines/xeen/resources.cpp
+++ b/engines/xeen/resources.cpp
@@ -421,89 +421,89 @@ void Resources::loadData() {
 	file.syncString(PHAROAH_ENDING_TEXT2);
 
 	ResFile keys("CONSTKEYS_", _buffer, lang);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_ITEM);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_QUICK);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CHAR_INFO.KEY_EXCHANGE);
+	keys.syncNumber(KeyConstants.DialogsCharInfo.KEY_ITEM);
+	keys.syncNumber(KeyConstants.DialogsCharInfo.KEY_QUICK);
+	keys.syncNumber(KeyConstants.DialogsCharInfo.KEY_EXCHANGE);
 
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_FXON);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_MUSICON);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_LOAD);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_SAVE);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_QUIT);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CONTROL_PANEL.KEY_MRWIZARD);
+	keys.syncNumber(KeyConstants.DialogsControlPanel.KEY_FXON);
+	keys.syncNumber(KeyConstants.DialogsControlPanel.KEY_MUSICON);
+	keys.syncNumber(KeyConstants.DialogsControlPanel.KEY_LOAD);
+	keys.syncNumber(KeyConstants.DialogsControlPanel.KEY_SAVE);
+	keys.syncNumber(KeyConstants.DialogsControlPanel.KEY_QUIT);
+	keys.syncNumber(KeyConstants.DialogsControlPanel.KEY_MRWIZARD);
 
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ROLL);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_CREATE);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_MGT);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_INT);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_PER);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_END);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_SPD);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_ACY);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_CREATE_CHAR.KEY_LCK);
+	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_ROLL);
+	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_CREATE);
+	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_MGT);
+	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_INT);
+	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_PER);
+	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_END);
+	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_SPD);
+	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_ACY);
+	keys.syncNumber(KeyConstants.DialogsCreateChar.KEY_LCK);
 
 
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_ADVENTURER);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_DIFFICULTY.KEY_WARRIOR);
+	keys.syncNumber(KeyConstants.DialogsDifficulty.KEY_ADVENTURER);
+	keys.syncNumber(KeyConstants.DialogsDifficulty.KEY_WARRIOR);
 
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_WEAPONS);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ARMOR);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ACCESSORY);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_MISC);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_ENCHANT);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_USE);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_BUY);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_SELL);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_IDENTIFY);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_FIX);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_EQUIP);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_REM);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_DISC);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_QUEST);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_RECHRG);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_ITEMS.KEY_GOLD);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_WEAPONS);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_ARMOR);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_ACCESSORY);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_MISC);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_ENCHANT);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_USE);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_BUY);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_SELL);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_IDENTIFY);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_FIX);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_EQUIP);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_REM);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_DISC);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_QUEST);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_RECHRG);
+	keys.syncNumber(KeyConstants.DialogsItems.KEY_GOLD);
 
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_PARTY.KEY_DELETE);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_PARTY.KEY_REMOVE);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_PARTY.KEY_CREATE);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_PARTY.KEY_EXIT);
+	keys.syncNumber(KeyConstants.DialogsParty.KEY_DELETE);
+	keys.syncNumber(KeyConstants.DialogsParty.KEY_REMOVE);
+	keys.syncNumber(KeyConstants.DialogsParty.KEY_CREATE);
+	keys.syncNumber(KeyConstants.DialogsParty.KEY_EXIT);
 
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_QUESTS.KEY_QUEST_ITEMS);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_QUESTS.KEY_CURRENT_QUESTS);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_QUESTS.KEY_AUTO_NOTES);
+	keys.syncNumber(KeyConstants.DialogsQuests.KEY_QUEST_ITEMS);
+	keys.syncNumber(KeyConstants.DialogsQuests.KEY_CURRENT_QUESTS);
+	keys.syncNumber(KeyConstants.DialogsQuests.KEY_AUTO_NOTES);
 
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_QUICK_FIGHT.KEY_NEXT);
+	keys.syncNumber(KeyConstants.DialogsQuickFight.KEY_NEXT);
 
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_CAST);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_NEW);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_FIRE);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_ELEC);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_COLD);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_ACID);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_SET);
-	keys.syncNumber(KEY_CONSTANTS.DIALOGS_SPELLS.KEY_RETURN);
+	keys.syncNumber(KeyConstants.DialogsSpells.KEY_CAST);
+	keys.syncNumber(KeyConstants.DialogsSpells.KEY_NEW);
+	keys.syncNumber(KeyConstants.DialogsSpells.KEY_FIRE);
+	keys.syncNumber(KeyConstants.DialogsSpells.KEY_ELEC);
+	keys.syncNumber(KeyConstants.DialogsSpells.KEY_COLD);
+	keys.syncNumber(KeyConstants.DialogsSpells.KEY_ACID);
+	keys.syncNumber(KeyConstants.DialogsSpells.KEY_SET);
+	keys.syncNumber(KeyConstants.DialogsSpells.KEY_RETURN);
 
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_DEP);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_WITH);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_GOLD);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_GEMS);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_BROWSE);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_BUY_SPELLS);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_SPELL_INFO);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_SIGN_IN);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_DRINK);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_FOOD);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_TIP);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_RUMORS);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_HEAL);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_DONATION);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_UNCURSE);
-	keys.syncNumber(KEY_CONSTANTS.LOCATIONS.KEY_TRAIN);
+	keys.syncNumber(KeyConstants.Locations.KEY_DEP);
+	keys.syncNumber(KeyConstants.Locations.KEY_WITH);
+	keys.syncNumber(KeyConstants.Locations.KEY_GOLD);
+	keys.syncNumber(KeyConstants.Locations.KEY_GEMS);
+	keys.syncNumber(KeyConstants.Locations.KEY_BROWSE);
+	keys.syncNumber(KeyConstants.Locations.KEY_BUY_SPELLS);
+	keys.syncNumber(KeyConstants.Locations.KEY_SPELL_INFO);
+	keys.syncNumber(KeyConstants.Locations.KEY_SIGN_IN);
+	keys.syncNumber(KeyConstants.Locations.KEY_DRINK);
+	keys.syncNumber(KeyConstants.Locations.KEY_FOOD);
+	keys.syncNumber(KeyConstants.Locations.KEY_TIP);
+	keys.syncNumber(KeyConstants.Locations.KEY_RUMORS);
+	keys.syncNumber(KeyConstants.Locations.KEY_HEAL);
+	keys.syncNumber(KeyConstants.Locations.KEY_DONATION);
+	keys.syncNumber(KeyConstants.Locations.KEY_UNCURSE);
+	keys.syncNumber(KeyConstants.Locations.KEY_TRAIN);
 
-	keys.syncNumber(KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_START_NEW_GAME);
-	keys.syncNumber(KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_LOAD_GAME);
-	keys.syncNumber(KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_SHOW_CREDITS);
-	keys.syncNumber(KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_VIEW_ENDGAME);
+	keys.syncNumber(KeyConstants.CloudsOfXeenMenu.KEY_START_NEW_GAME);
+	keys.syncNumber(KeyConstants.CloudsOfXeenMenu.KEY_LOAD_GAME);
+	keys.syncNumber(KeyConstants.CloudsOfXeenMenu.KEY_SHOW_CREDITS);
+	keys.syncNumber(KeyConstants.CloudsOfXeenMenu.KEY_VIEW_ENDGAME);
 }
 
 } // End of namespace Xeen
diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h
index cac2e33b12..a73b98e26b 100644
--- a/engines/xeen/resources.h
+++ b/engines/xeen/resources.h
@@ -481,7 +481,7 @@ public:
 			int KEY_QUICK;
 			int KEY_EXCHANGE;
 			int KEY_ESCAPE;
-		} DIALOGS_CHAR_INFO;
+		} DialogsCharInfo;
 
 		struct {
 			int KEY_FXON;
@@ -490,7 +490,7 @@ public:
 			int KEY_SAVE;
 			int KEY_QUIT;
 			int KEY_MRWIZARD;
-		} DIALOGS_CONTROL_PANEL;
+		} DialogsControlPanel;
 
 		struct {
 			int KEY_ROLL;
@@ -502,12 +502,12 @@ public:
 			int KEY_SPD;
 			int KEY_ACY;
 			int KEY_LCK;
-		} DIALOGS_CREATE_CHAR;
+		} DialogsCreateChar;
 
 		struct {
 			int KEY_ADVENTURER;
 			int KEY_WARRIOR;
-		} DIALOGS_DIFFICULTY;
+		} DialogsDifficulty;
 
 		struct {
 			int KEY_WEAPONS;
@@ -526,24 +526,24 @@ public:
 			int KEY_QUEST;
 			int KEY_RECHRG;
 			int KEY_GOLD;
-		} DIALOGS_ITEMS;
+		} DialogsItems;
 
 		struct {
 			int KEY_DELETE;
 			int KEY_REMOVE;
 			int KEY_CREATE;
 			int KEY_EXIT;
-		} DIALOGS_PARTY;
+		} DialogsParty;
 
 		struct {
 			int KEY_QUEST_ITEMS;
 			int KEY_CURRENT_QUESTS;
 			int KEY_AUTO_NOTES;
-		} DIALOGS_QUESTS;
+		} DialogsQuests;
 
 		struct {
 			int KEY_NEXT;
-		} DIALOGS_QUICK_FIGHT;
+		} DialogsQuickFight;
 
 		struct {
 			int KEY_CAST;
@@ -554,7 +554,7 @@ public:
 			int KEY_ACID;
 			int KEY_SET;
 			int KEY_RETURN;
-		} DIALOGS_SPELLS;
+		} DialogsSpells;
 
 		struct {
 			int KEY_DEP;
@@ -573,15 +573,15 @@ public:
 			int KEY_DONATION;
 			int KEY_UNCURSE;
 			int KEY_TRAIN;
-		} LOCATIONS;
+		} Locations;
 
 		struct {
 			int KEY_START_NEW_GAME;
 			int KEY_LOAD_GAME;
 			int KEY_SHOW_CREDITS;
 			int KEY_VIEW_ENDGAME;
-		} CLOUDSOFXEENMENU;
-	} KEY_CONSTANTS;
+		} CloudsOfXeenMenu;
+	} KeyConstants;
 
 
 public:
diff --git a/engines/xeen/worldofxeen/worldofxeen_menu.cpp b/engines/xeen/worldofxeen/worldofxeen_menu.cpp
index 7c025b4fbd..bdf86f7f96 100644
--- a/engines/xeen/worldofxeen/worldofxeen_menu.cpp
+++ b/engines/xeen/worldofxeen/worldofxeen_menu.cpp
@@ -262,7 +262,7 @@ bool MainMenuDialog::handleEvents() {
 	checkEvents(g_vm);
 	int difficulty;
 
-	if (Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_START_NEW_GAME == _buttonValue) {
+	if (Res.KeyConstants.CloudsOfXeenMenu.KEY_START_NEW_GAME == _buttonValue) {
 		// Start new game
 		difficulty = DifficultyDialog::show(g_vm);
 		if (difficulty == -1)
@@ -272,7 +272,7 @@ bool MainMenuDialog::handleEvents() {
 		g_vm->_saves->newGame();
 		g_vm->_party->_difficulty = (Difficulty)difficulty;
 		g_vm->_gameMode = GMODE_PLAY_GAME;
-	} else if (Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_LOAD_GAME == _buttonValue) {
+	} else if (Res.KeyConstants.CloudsOfXeenMenu.KEY_LOAD_GAME == _buttonValue) {
 		// Load existing game
 		int ccNum = files._ccNum;
 		g_vm->_saves->newGame();
@@ -282,7 +282,7 @@ bool MainMenuDialog::handleEvents() {
 		}
 
 		g_vm->_gameMode = GMODE_PLAY_GAME;
-	} else if (Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_SHOW_CREDITS == _buttonValue) {
+	} else if (Res.KeyConstants.CloudsOfXeenMenu.KEY_SHOW_CREDITS == _buttonValue) {
 		// Show credits
 		CreditsScreen::show(g_vm);
 	} else if (Common::KEYCODE_ESCAPE == _buttonValue) {
@@ -316,11 +316,11 @@ CloudsMenuDialog::~CloudsMenuDialog() {
 
 void CloudsMenuDialog::loadButtons() {
 	_buttonSprites.load("start.icn");
-	addButton(Common::Rect(93, 53, 227, 73), Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_START_NEW_GAME, &_buttonSprites);
-	addButton(Common::Rect(93, 78, 227, 98), Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_LOAD_GAME, &_buttonSprites);
-	addButton(Common::Rect(93, 103, 227, 123), Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_SHOW_CREDITS, &_buttonSprites);
+	addButton(Common::Rect(93, 53, 227, 73), Res.KeyConstants.CloudsOfXeenMenu.KEY_START_NEW_GAME, &_buttonSprites);
+	addButton(Common::Rect(93, 78, 227, 98), Res.KeyConstants.CloudsOfXeenMenu.KEY_LOAD_GAME, &_buttonSprites);
+	addButton(Common::Rect(93, 103, 227, 123), Res.KeyConstants.CloudsOfXeenMenu.KEY_SHOW_CREDITS, &_buttonSprites);
 	if (g_vm->_gameWon[0])
-		addButton(Common::Rect(93, 128, 227, 148), Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_VIEW_ENDGAME, &_buttonSprites);
+		addButton(Common::Rect(93, 128, 227, 148), Res.KeyConstants.CloudsOfXeenMenu.KEY_VIEW_ENDGAME, &_buttonSprites);
 }
 
 void CloudsMenuDialog::draw() {
@@ -336,7 +336,7 @@ bool CloudsMenuDialog::handleEvents() {
 	if (MainMenuDialog::handleEvents())
 		return true;
 
-	if (Res.KEY_CONSTANTS.CLOUDSOFXEENMENU.KEY_VIEW_ENDGAME == _buttonValue) {
+	if (Res.KeyConstants.CloudsOfXeenMenu.KEY_VIEW_ENDGAME == _buttonValue) {
 		if (g_vm->_gameWon[0]) {
 			// Close the window
 			delete this;


Commit: 805f55f1cdb1c54740bdac7d607c5bae578d36df
    https://github.com/scummvm/scummvm/commit/805f55f1cdb1c54740bdac7d607c5bae578d36df
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Fixed some localized strings. Fixed intro subtitles.
Fixed optimizer issues

Changed paths:
    devtools/create_xeen/ru_constants.h
    dists/engine-data/xeen.ccs
    engines/xeen/font.cpp
    engines/xeen/subtitles.cpp


diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index f5916882c5..28e94ad274 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -622,8 +622,9 @@ public:
 		delete[] _statNames;
 		_statNames = new const char *[16] {
 			"\x91\xA8\xAB\xA0", "\x88\xAD\xE2\xA5\xAB\xAB\xA5\xAA\xE2", "\x91\xA8\xAB\xA0 \xA4\xE3\xE5\xA0", "\x91\xAB\xAE\xA6\xA5\xAD\xA8\xA5", "\x91\xAA\xAE\xE0\xAE\xE1\xE2\xEC",	 // "Сила", "Интеллект", "Сила духа", "Сложение", "Скорость",
-			"\x8C\xA5\xE2\xAA\xAE\xE1\xE2\xEC", "\x93\xA4\xA0\xE7\xA0", "\x82\xAE\xA7\xE0\xA0\xE1\xE2", "\x93\xE0\xAE\xA2\xA5\xAD\xEC", "\x8A\xAB\xA0\xE1\xE1 \xA7\xA0\xE9\xA8\xE2\xEB", // "Меткость", "Удача", "Возраст", "Уровень", "Класс защиты", "Здоровье", "\x87\xA4\xAE\xE0\xAE\xA2\xEC\xA5",
-			"\x8E\xE7\xAA\xA8 \xAC\xA0\xA3\xA8\xA8", "\x93\xE1\xE2\xAE\xA9\xE7\xA8\xA2\xAE\xE1\xE2\xA8", "\x8D\xA0\xA2\xEB\xAA\xA8", "\x8D\xA0\xA3\xE0\xA0\xA4\xEB", "\x8E\xAF\xEB\xE2"  // "Очки магии", "Устойчивости", "Навыки", "Награды", "Опыт"
+			"\x8C\xA5\xE2\xAA\xAE\xE1\xE2\xEC", "\x93\xA4\xA0\xE7\xA0", "\x82\xAE\xA7\xE0\xA0\xE1\xE2", "\x93\xE0\xAE\xA2\xA5\xAD\xEC", "\x8A\xAB\xA0\xE1\xE1 \xA7\xA0\xE9\xA8\xE2\xEB", // "Меткость", "Удача", "Возраст", "Уровень", "Класс защиты",
+			"\x87\xA4\xAE\xE0\xAE\xA2\xEC\xA5", "\x8E\xE7\xAA\xA8 \xAC\xA0\xA3\xA8\xA8", "\x93\xE1\xE2\xAE\xA9\xE7\xA8\xA2\xAE\xE1\xE2\xA8", "\x8D\xA0\xA2\xEB\xAA\xA8",				 // "Здоровье", "Очки магии", "Устойчивости", "Навыки",
+			"\x8D\xA0\xA3\xE0\xA0\xA4\xEB", "\x8E\xAF\xEB\xE2"																															 // "Награды", "Опыт"
 		};
 		return _statNames;
 	}
@@ -1948,9 +1949,9 @@ public:
 	}
 
 	const char *CLOUDS_INTRO1() {
-		return "\f00\v082\t040\x3"
-			   "cKing Burlock\v190\t040Peasants\v082\t247"
-			   "Lord Xeen\v190\t258Xeen's Pet\v179\t150Crodo";
+		return "\f00\v082\t047\x3"																													// "\f00\v082\t040\x3"
+			   "c\x8A\xAE\xE0\xAE\xAB\xEC \x81\xA0\xE0\xAB\xAE\xAA\v190\t040\x8A\xE0\xA5\xE1\xE2\xEC\xEF\xAD\xA5\v082\t247"							// "cКороль Барлок\v190\t040Крестьяне\v082\t247"
+			   "\x8B\xAE\xE0\xA4 \x8A\xE1\xA8\xAD\v190\t258\x87\xA2\xA5\xE0\xE3\xE8\xAA\xA0 \x8A\xE1\xA8\xAD\xA0\v179\t150\x8A\xE0\xAE\xA4\xAE";	// "Лорд Ксин\v190\t258Зверушка Ксина\v179\t150Кродо"
 	}
 
 	const char *DARKSIDE_ENDING1() {
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index 9737dcf0e2..fa36599e49 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/font.cpp b/engines/xeen/font.cpp
index bdf15af130..d69d089fec 100644
--- a/engines/xeen/font.cpp
+++ b/engines/xeen/font.cpp
@@ -234,7 +234,7 @@ const char *FontSurface::writeString(const Common::String &s, const Common::Rect
 					if (c == 6)
 						c = ' ';
 					int offset_charW = c < 0 ?
-						(_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (int)(0x80 + c) :
+						(_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (int)(c & 0x7F) :
 						(_fontReduced ? _fntEnReducedWOffset : _fntEnWOffset) + (int)c;
 					byte charSize = _fontData[offset_charW];
 
@@ -305,8 +305,10 @@ void FontSurface::writeCharacter(char c, const Common::Rect &clipRect) {
 }
 
 char FontSurface::getNextChar() {
-	if (Common::RU_RUS == lang) return *_displayString++;
-	return *_displayString++ & 0x7f;
+	if (Common::RU_RUS == lang)
+		return *_displayString++;
+	else
+		return *_displayString++ & 0x7f;
 }
 
 bool FontSurface::getNextCharWidth(int &total) {
@@ -333,7 +335,7 @@ bool FontSurface::getNextCharWidth(int &total) {
 			getNextChar();
 		return false;
 	} else if (Common::RU_RUS == lang && c < 0) {
-		total += _fontData[(_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (char)(0x80 + c)];
+		total += _fontData[(_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (int)(c & 0x7F)];
 		return false;
 	} else {
 		--_displayString;
@@ -388,8 +390,8 @@ void FontSurface::writeChar(char c, const Common::Rect &clipRect) {
 	int offset_charData;
 	int offset_charW;
 	if (Common::RU_RUS == lang && c < 0) {
-		offset_charData = (_fontReduced ? _fntNonEnReducedOffset : _fntNonEnOffset) + (int)(0x80 + c) * 16;
-		offset_charW = (_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (int)(0x80 + c);
+		offset_charData = (_fontReduced ? _fntNonEnReducedOffset : _fntNonEnOffset) + (int)(c & 0x7F) * 16;
+		offset_charW = (_fontReduced ? _fntNonEnReducedWOffset : _fntNonEnWOffset) + (int)(c & 0x7F);
 	} else {
 		offset_charData = (_fontReduced ? _fntEnReducedOffset : _fntEnOffset) + (int)c * 16;
 		offset_charW = (_fontReduced ? _fntEnReducedWOffset : _fntEnWOffset) + (int)c;
diff --git a/engines/xeen/subtitles.cpp b/engines/xeen/subtitles.cpp
index 168ed1d4ea..3cfa475be0 100644
--- a/engines/xeen/subtitles.cpp
+++ b/engines/xeen/subtitles.cpp
@@ -46,12 +46,19 @@ void Subtitles::loadSubtitles() {
 		// first subtitle into separate lines to allow them to better interleave with the voice
 		Common::String line = f.readString();
 		for (;;) {
-			const char *lineSep = strstr(line.c_str(), "   ");
-			if (!lineSep)
-				break;
-
-			_lines.push_back(Common::String(line.c_str(), lineSep));
-			line = Common::String(lineSep + 3);
+			const char *lineSep;
+
+			if (Common::RU_RUS == g_vm->getLanguage()) {
+				lineSep = strstr(line.c_str(), ".");
+				if (!lineSep) break;
+				_lines.push_back(Common::String(line.c_str(), lineSep + 1) + "   ");
+				line = Common::String(lineSep + 1);
+			} else {
+				lineSep = strstr(line.c_str(), "   ");
+				if (!lineSep) break;
+				_lines.push_back(Common::String(line.c_str(), lineSep));
+				line = Common::String(lineSep + 3);
+			}
 			while (line.hasPrefix(" "))
 				line.deleteChar(0);
 		}
@@ -129,7 +136,11 @@ void Subtitles::show() {
 	} else {
 		if (timeElapsed()) {
 			_lineEnd = (_lineEnd + 1) % _lineSize;
-			int count = MAX(_lineEnd - 40, 0);
+			int count;
+			if (Common::RU_RUS == g_vm->getLanguage())
+				count = MAX(_lineEnd - 36, 0);
+			else
+				count = MAX(_lineEnd - 40, 0);
 
 			// Get the portion of the line to display
 			char buffer[1000];


Commit: 4ea20488ccd48b68f5ef1384544090a0c7b3f315
    https://github.com/scummvm/scummvm/commit/4ea20488ccd48b68f5ef1384544090a0c7b3f315
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU create_xeen removed const in int return

Changed paths:
    devtools/create_xeen/constants.h
    devtools/create_xeen/en_constants.h
    devtools/create_xeen/ru_constants.h


diff --git a/devtools/create_xeen/constants.h b/devtools/create_xeen/constants.h
index 81752fb17b..2fb1a0dd0a 100644
--- a/devtools/create_xeen/constants.h
+++ b/devtools/create_xeen/constants.h
@@ -1250,128 +1250,128 @@ public:
 	public:
 		class DialogsCharInfo {
 		public:
-			virtual const int KEY_ITEM() = 0;
-			virtual const int KEY_QUICK() = 0;
-			virtual const int KEY_EXCHANGE() = 0;
+			virtual int KEY_ITEM() = 0;
+			virtual int KEY_QUICK() = 0;
+			virtual int KEY_EXCHANGE() = 0;
 		};
 		virtual DialogsCharInfo *dialogsCharInfo() = 0;
 
 		class DialogsControlPanel {
 		public:
-			virtual const int KEY_FXON() = 0;
-			virtual const int KEY_MUSICON() = 0;
-			virtual const int KEY_LOAD() = 0;
-			virtual const int KEY_SAVE() = 0;
-			virtual const int KEY_QUIT() = 0;
-			virtual const int KEY_MRWIZARD() = 0;
+			virtual int KEY_FXON() = 0;
+			virtual int KEY_MUSICON() = 0;
+			virtual int KEY_LOAD() = 0;
+			virtual int KEY_SAVE() = 0;
+			virtual int KEY_QUIT() = 0;
+			virtual int KEY_MRWIZARD() = 0;
 		};
 		virtual DialogsControlPanel *dialogsControlPanel() = 0;
 
 		class DialogsCreateChar {
 		public:
-			virtual const int KEY_ROLL() = 0;
-			virtual const int KEY_CREATE() = 0;
-			virtual const int KEY_MGT() = 0;
-			virtual const int KEY_INT() = 0;
-			virtual const int KEY_PER() = 0;
-			virtual const int KEY_END() = 0;
-			virtual const int KEY_SPD() = 0;
-			virtual const int KEY_ACY() = 0;
-			virtual const int KEY_LCK() = 0;
+			virtual int KEY_ROLL() = 0;
+			virtual int KEY_CREATE() = 0;
+			virtual int KEY_MGT() = 0;
+			virtual int KEY_INT() = 0;
+			virtual int KEY_PER() = 0;
+			virtual int KEY_END() = 0;
+			virtual int KEY_SPD() = 0;
+			virtual int KEY_ACY() = 0;
+			virtual int KEY_LCK() = 0;
 		};
 		virtual DialogsCreateChar *dialogsCreateChar() = 0;
 
 		class DialogsDifficulty {
 		public:
-			virtual const int KEY_ADVENTURER() = 0;
-			virtual const int KEY_WARRIOR() = 0;
+			virtual int KEY_ADVENTURER() = 0;
+			virtual int KEY_WARRIOR() = 0;
 		};
 		virtual DialogsDifficulty *dialogsDifficulty() = 0;
 
 		class DialogsItems {
 		public:
-			virtual const int KEY_WEAPONS() = 0;
-			virtual const int KEY_ARMOR() = 0;
-			virtual const int KEY_ACCESSORY() = 0;
-			virtual const int KEY_MISC() = 0;
-			virtual const int KEY_ENCHANT() = 0;
-			virtual const int KEY_USE() = 0;
-			virtual const int KEY_BUY() = 0;
-			virtual const int KEY_SELL() = 0;
-			virtual const int KEY_IDENTIFY() = 0;
-			virtual const int KEY_FIX() = 0;
-			virtual const int KEY_EQUIP() = 0;
-			virtual const int KEY_REM() = 0;
-			virtual const int KEY_DISC() = 0;
-			virtual const int KEY_QUEST() = 0;
-			virtual const int KEY_RECHRG() = 0;
-			virtual const int KEY_GOLD() = 0;
+			virtual int KEY_WEAPONS() = 0;
+			virtual int KEY_ARMOR() = 0;
+			virtual int KEY_ACCESSORY() = 0;
+			virtual int KEY_MISC() = 0;
+			virtual int KEY_ENCHANT() = 0;
+			virtual int KEY_USE() = 0;
+			virtual int KEY_BUY() = 0;
+			virtual int KEY_SELL() = 0;
+			virtual int KEY_IDENTIFY() = 0;
+			virtual int KEY_FIX() = 0;
+			virtual int KEY_EQUIP() = 0;
+			virtual int KEY_REM() = 0;
+			virtual int KEY_DISC() = 0;
+			virtual int KEY_QUEST() = 0;
+			virtual int KEY_RECHRG() = 0;
+			virtual int KEY_GOLD() = 0;
 		};
 		virtual DialogsItems *dialogsItems() = 0;
 
 		class DialogsParty {
 		public:
-			virtual const int KEY_DELETE() = 0;
-			virtual const int KEY_REMOVE() = 0;
-			virtual const int KEY_CREATE() = 0;
-			virtual const int KEY_EXIT() = 0;
+			virtual int KEY_DELETE() = 0;
+			virtual int KEY_REMOVE() = 0;
+			virtual int KEY_CREATE() = 0;
+			virtual int KEY_EXIT() = 0;
 		};
 		virtual DialogsParty *dialogsParty() = 0;
 
 		class DialogsQuests {
 		public:
-			virtual const int KEY_QUEST_ITEMS() = 0;
-			virtual const int KEY_CURRENT_QUESTS() = 0;
-			virtual const int KEY_AUTO_NOTES() = 0;
+			virtual int KEY_QUEST_ITEMS() = 0;
+			virtual int KEY_CURRENT_QUESTS() = 0;
+			virtual int KEY_AUTO_NOTES() = 0;
 		};
 		virtual DialogsQuests *dialogsQuests() = 0;
 
 		class DialogsQuickFight {
 		public:
-			virtual const int KEY_NEXT() = 0;
+			virtual int KEY_NEXT() = 0;
 		};
 		virtual DialogsQuickFight *dialogsQuickFight() = 0;
 
 		class DialogsSpells {
 		public:
-			virtual const int KEY_CAST() = 0;
-			virtual const int KEY_NEW() = 0;
-			virtual const int KEY_FIRE() = 0;
-			virtual const int KEY_ELEC() = 0;
-			virtual const int KEY_COLD() = 0;
-			virtual const int KEY_ACID() = 0;
-			virtual const int KEY_SET() = 0;
-			virtual const int KEY_RETURN() = 0;
+			virtual int KEY_CAST() = 0;
+			virtual int KEY_NEW() = 0;
+			virtual int KEY_FIRE() = 0;
+			virtual int KEY_ELEC() = 0;
+			virtual int KEY_COLD() = 0;
+			virtual int KEY_ACID() = 0;
+			virtual int KEY_SET() = 0;
+			virtual int KEY_RETURN() = 0;
 		};
 		virtual DialogsSpells *dialogsSpells() = 0;
 
 		class Locations {
 		public:
-			virtual const int KEY_DEP() = 0;
-			virtual const int KEY_WITH() = 0;
-			virtual const int KEY_GOLD() = 0;
-			virtual const int KEY_GEMS() = 0;
-			virtual const int KEY_BROWSE() = 0;
-			virtual const int KEY_BUY_SPELLS() = 0;
-			virtual const int KEY_SPELL_INFO() = 0;
-			virtual const int KEY_SIGN_IN() = 0;
-			virtual const int KEY_DRINK() = 0;
-			virtual const int KEY_FOOD() = 0;
-			virtual const int KEY_TIP() = 0;
-			virtual const int KEY_RUMORS() = 0;
-			virtual const int KEY_HEAL() = 0;
-			virtual const int KEY_DONATION() = 0;
-			virtual const int KEY_UNCURSE() = 0;
-			virtual const int KEY_TRAIN() = 0;
+			virtual int KEY_DEP() = 0;
+			virtual int KEY_WITH() = 0;
+			virtual int KEY_GOLD() = 0;
+			virtual int KEY_GEMS() = 0;
+			virtual int KEY_BROWSE() = 0;
+			virtual int KEY_BUY_SPELLS() = 0;
+			virtual int KEY_SPELL_INFO() = 0;
+			virtual int KEY_SIGN_IN() = 0;
+			virtual int KEY_DRINK() = 0;
+			virtual int KEY_FOOD() = 0;
+			virtual int KEY_TIP() = 0;
+			virtual int KEY_RUMORS() = 0;
+			virtual int KEY_HEAL() = 0;
+			virtual int KEY_DONATION() = 0;
+			virtual int KEY_UNCURSE() = 0;
+			virtual int KEY_TRAIN() = 0;
 		};
 		virtual Locations *locations() = 0;
 
 		class CloudsOfXeenMenu {
 		public:
-			virtual const int KEY_START_NEW_GAME() = 0;
-			virtual const int KEY_LOAD_GAME() = 0;
-			virtual const int KEY_SHOW_CREDITS() = 0;
-			virtual const int KEY_VIEW_ENDGAME() = 0;
+			virtual int KEY_START_NEW_GAME() = 0;
+			virtual int KEY_LOAD_GAME() = 0;
+			virtual int KEY_SHOW_CREDITS() = 0;
+			virtual int KEY_VIEW_ENDGAME() = 0;
 		};
 		virtual CloudsOfXeenMenu *cloudsOfXeenMenu() = 0;
 	};
diff --git a/devtools/create_xeen/en_constants.h b/devtools/create_xeen/en_constants.h
index 722d73a817..61b339d0a5 100644
--- a/devtools/create_xeen/en_constants.h
+++ b/devtools/create_xeen/en_constants.h
@@ -1993,9 +1993,9 @@ public:
 	public:
 		class EN_DialogsCharInfo : public DialogsCharInfo {
 		public:
-			const int KEY_ITEM()     { return Common::KEYCODE_i; }
-			const int KEY_QUICK()    { return Common::KEYCODE_q; }
-			const int KEY_EXCHANGE() { return Common::KEYCODE_e; }
+			int KEY_ITEM()     { return Common::KEYCODE_i; }
+			int KEY_QUICK()    { return Common::KEYCODE_q; }
+			int KEY_EXCHANGE() { return Common::KEYCODE_e; }
 		};
 		EN_DialogsCharInfo *dialogsCharInfo() {
 			if (!_dci)_dci = new EN_DialogsCharInfo();
@@ -2004,12 +2004,12 @@ public:
 
 		class EN_DialogsControlPanel : public DialogsControlPanel {
 		public:
-			const int KEY_FXON()     { return Common::KEYCODE_e; }
-			const int KEY_MUSICON()  { return Common::KEYCODE_m; }
-			const int KEY_LOAD()     { return Common::KEYCODE_l; }
-			const int KEY_SAVE()     { return Common::KEYCODE_s; }
-			const int KEY_QUIT()     { return Common::KEYCODE_q; }
-			const int KEY_MRWIZARD() { return Common::KEYCODE_w; }
+			int KEY_FXON()     { return Common::KEYCODE_e; }
+			int KEY_MUSICON()  { return Common::KEYCODE_m; }
+			int KEY_LOAD()     { return Common::KEYCODE_l; }
+			int KEY_SAVE()     { return Common::KEYCODE_s; }
+			int KEY_QUIT()     { return Common::KEYCODE_q; }
+			int KEY_MRWIZARD() { return Common::KEYCODE_w; }
 		};
 		EN_DialogsControlPanel *dialogsControlPanel() {
 			if (!_dcp) _dcp = new EN_DialogsControlPanel();
@@ -2018,15 +2018,15 @@ public:
 
 		class EN_DialogsCreateChar : public DialogsCreateChar {
 		public:
-			const int KEY_ROLL()   { return Common::KEYCODE_r; }
-			const int KEY_CREATE() { return Common::KEYCODE_c; }
-			const int KEY_MGT()    { return Common::KEYCODE_m; }
-			const int KEY_INT()    { return Common::KEYCODE_i; }
-			const int KEY_PER()    { return Common::KEYCODE_p; }
-			const int KEY_END()    { return Common::KEYCODE_e; }
-			const int KEY_SPD()    { return Common::KEYCODE_s; }
-			const int KEY_ACY()    { return Common::KEYCODE_a; }
-			const int KEY_LCK()    { return Common::KEYCODE_l; }
+			int KEY_ROLL()   { return Common::KEYCODE_r; }
+			int KEY_CREATE() { return Common::KEYCODE_c; }
+			int KEY_MGT()    { return Common::KEYCODE_m; }
+			int KEY_INT()    { return Common::KEYCODE_i; }
+			int KEY_PER()    { return Common::KEYCODE_p; }
+			int KEY_END()    { return Common::KEYCODE_e; }
+			int KEY_SPD()    { return Common::KEYCODE_s; }
+			int KEY_ACY()    { return Common::KEYCODE_a; }
+			int KEY_LCK()    { return Common::KEYCODE_l; }
 		};
 		EN_DialogsCreateChar *dialogsCreateChar() {
 			if (!_dcc) _dcc = new EN_DialogsCreateChar();
@@ -2035,8 +2035,8 @@ public:
 
 		class EN_DialogsDifficulty : public DialogsDifficulty {
 		public:
-			const int KEY_ADVENTURER() { return Common::KEYCODE_a; }
-			const int KEY_WARRIOR()    { return Common::KEYCODE_w; }
+			int KEY_ADVENTURER() { return Common::KEYCODE_a; }
+			int KEY_WARRIOR()    { return Common::KEYCODE_w; }
 		};
 		EN_DialogsDifficulty *dialogsDifficulty() {
 			if (!_dd) _dd = new EN_DialogsDifficulty();
@@ -2045,22 +2045,22 @@ public:
 
 		class EN_DialogsItems : public DialogsItems {
 		public:
-			const int KEY_WEAPONS()   { return Common::KEYCODE_w; }
-			const int KEY_ARMOR()     { return Common::KEYCODE_a; }
-			const int KEY_ACCESSORY() { return Common::KEYCODE_c; }
-			const int KEY_MISC()      { return Common::KEYCODE_m; }
-			const int KEY_ENCHANT()   { return Common::KEYCODE_e; }
-			const int KEY_USE()       { return Common::KEYCODE_u; }
-			const int KEY_BUY()       { return Common::KEYCODE_b; }
-			const int KEY_SELL()      { return Common::KEYCODE_s; }
-			const int KEY_IDENTIFY()  { return Common::KEYCODE_i; }
-			const int KEY_FIX()       { return Common::KEYCODE_f; }
-			const int KEY_EQUIP()     { return Common::KEYCODE_e; }
-			const int KEY_REM()       { return Common::KEYCODE_r; }
-			const int KEY_DISC()      { return Common::KEYCODE_d; }
-			const int KEY_QUEST()     { return Common::KEYCODE_q; }
-			const int KEY_RECHRG()    { return Common::KEYCODE_r; }
-			const int KEY_GOLD()      { return Common::KEYCODE_g; }
+			int KEY_WEAPONS()   { return Common::KEYCODE_w; }
+			int KEY_ARMOR()     { return Common::KEYCODE_a; }
+			int KEY_ACCESSORY() { return Common::KEYCODE_c; }
+			int KEY_MISC()      { return Common::KEYCODE_m; }
+			int KEY_ENCHANT()   { return Common::KEYCODE_e; }
+			int KEY_USE()       { return Common::KEYCODE_u; }
+			int KEY_BUY()       { return Common::KEYCODE_b; }
+			int KEY_SELL()      { return Common::KEYCODE_s; }
+			int KEY_IDENTIFY()  { return Common::KEYCODE_i; }
+			int KEY_FIX()       { return Common::KEYCODE_f; }
+			int KEY_EQUIP()     { return Common::KEYCODE_e; }
+			int KEY_REM()       { return Common::KEYCODE_r; }
+			int KEY_DISC()      { return Common::KEYCODE_d; }
+			int KEY_QUEST()     { return Common::KEYCODE_q; }
+			int KEY_RECHRG()    { return Common::KEYCODE_r; }
+			int KEY_GOLD()      { return Common::KEYCODE_g; }
 		};
 		EN_DialogsItems *dialogsItems() {
 			if (!_di) _di = new EN_DialogsItems();
@@ -2069,10 +2069,10 @@ public:
 
 		class EN_DialogsParty : public DialogsParty {
 		public:
-			const int KEY_DELETE() { return Common::KEYCODE_d; }
-			const int KEY_REMOVE() { return Common::KEYCODE_r; }
-			const int KEY_CREATE() { return Common::KEYCODE_c; }
-			const int KEY_EXIT()   { return Common::KEYCODE_x; }
+			int KEY_DELETE() { return Common::KEYCODE_d; }
+			int KEY_REMOVE() { return Common::KEYCODE_r; }
+			int KEY_CREATE() { return Common::KEYCODE_c; }
+			int KEY_EXIT()   { return Common::KEYCODE_x; }
 		};
 		EN_DialogsParty *dialogsParty() {
 			if (!_dp) _dp = new EN_DialogsParty();
@@ -2081,9 +2081,9 @@ public:
 
 		class EN_DialogsQuests : public DialogsQuests {
 		public:
-			const int KEY_QUEST_ITEMS()    { return Common::KEYCODE_i; }
-			const int KEY_CURRENT_QUESTS() { return Common::KEYCODE_q; }
-			const int KEY_AUTO_NOTES()     { return Common::KEYCODE_a; }
+			int KEY_QUEST_ITEMS()    { return Common::KEYCODE_i; }
+			int KEY_CURRENT_QUESTS() { return Common::KEYCODE_q; }
+			int KEY_AUTO_NOTES()     { return Common::KEYCODE_a; }
 		};
 		EN_DialogsQuests *dialogsQuests() {
 			if (!_dq) _dq = new EN_DialogsQuests();
@@ -2092,7 +2092,7 @@ public:
 
 		class EN_DialogsQuickFight : public DialogsQuickFight {
 		public:
-			const int KEY_NEXT() { return Common::KEYCODE_t; }
+			int KEY_NEXT() { return Common::KEYCODE_t; }
 		};
 		EN_DialogsQuickFight *dialogsQuickFight() {
 			if (!_dqf) _dqf = new EN_DialogsQuickFight();
@@ -2101,14 +2101,14 @@ public:
 
 		class EN_DialogsSpells : public DialogsSpells {
 		public:
-			const int KEY_CAST()   { return Common::KEYCODE_c; }
-			const int KEY_NEW()    { return Common::KEYCODE_n; }
-			const int KEY_FIRE()   { return Common::KEYCODE_f; }
-			const int KEY_ELEC()   { return Common::KEYCODE_e; }
-			const int KEY_COLD()   { return Common::KEYCODE_c; }
-			const int KEY_ACID()   { return Common::KEYCODE_a; }
-			const int KEY_SET()    { return Common::KEYCODE_t; }
-			const int KEY_RETURN() { return Common::KEYCODE_r; }
+			int KEY_CAST()   { return Common::KEYCODE_c; }
+			int KEY_NEW()    { return Common::KEYCODE_n; }
+			int KEY_FIRE()   { return Common::KEYCODE_f; }
+			int KEY_ELEC()   { return Common::KEYCODE_e; }
+			int KEY_COLD()   { return Common::KEYCODE_c; }
+			int KEY_ACID()   { return Common::KEYCODE_a; }
+			int KEY_SET()    { return Common::KEYCODE_t; }
+			int KEY_RETURN() { return Common::KEYCODE_r; }
 		};
 		EN_DialogsSpells *dialogsSpells() {
 			if (!_ds) _ds = new EN_DialogsSpells();
@@ -2117,22 +2117,22 @@ public:
 
 		class EN_Locations : public Locations {
 		public:
-			const int KEY_DEP()        { return Common::KEYCODE_d; }
-			const int KEY_WITH()       { return Common::KEYCODE_w; }
-			const int KEY_GOLD()       { return Common::KEYCODE_o; }
-			const int KEY_GEMS()       { return Common::KEYCODE_e; }
-			const int KEY_BROWSE()     { return Common::KEYCODE_b; }
-			const int KEY_BUY_SPELLS() { return Common::KEYCODE_b; }
-			const int KEY_SPELL_INFO() { return Common::KEYCODE_s; }
-			const int KEY_SIGN_IN()    { return Common::KEYCODE_s; }
-			const int KEY_DRINK()      { return Common::KEYCODE_d; }
-			const int KEY_FOOD()       { return Common::KEYCODE_f; }
-			const int KEY_TIP()        { return Common::KEYCODE_t; }
-			const int KEY_RUMORS()     { return Common::KEYCODE_r; }
-			const int KEY_HEAL()       { return Common::KEYCODE_h; }
-			const int KEY_DONATION()   { return Common::KEYCODE_d; }
-			const int KEY_UNCURSE()    { return Common::KEYCODE_u; }
-			const int KEY_TRAIN()      { return Common::KEYCODE_t; }
+			int KEY_DEP()        { return Common::KEYCODE_d; }
+			int KEY_WITH()       { return Common::KEYCODE_w; }
+			int KEY_GOLD()       { return Common::KEYCODE_o; }
+			int KEY_GEMS()       { return Common::KEYCODE_e; }
+			int KEY_BROWSE()     { return Common::KEYCODE_b; }
+			int KEY_BUY_SPELLS() { return Common::KEYCODE_b; }
+			int KEY_SPELL_INFO() { return Common::KEYCODE_s; }
+			int KEY_SIGN_IN()    { return Common::KEYCODE_s; }
+			int KEY_DRINK()      { return Common::KEYCODE_d; }
+			int KEY_FOOD()       { return Common::KEYCODE_f; }
+			int KEY_TIP()        { return Common::KEYCODE_t; }
+			int KEY_RUMORS()     { return Common::KEYCODE_r; }
+			int KEY_HEAL()       { return Common::KEYCODE_h; }
+			int KEY_DONATION()   { return Common::KEYCODE_d; }
+			int KEY_UNCURSE()    { return Common::KEYCODE_u; }
+			int KEY_TRAIN()      { return Common::KEYCODE_t; }
 		};
 		EN_Locations *locations() {
 			if (!_l) _l = new EN_Locations();
@@ -2141,10 +2141,10 @@ public:
 
 		class EN_CloudsOfXeenMenu : public CloudsOfXeenMenu {
 		public:
-			const int KEY_START_NEW_GAME() { return Common::KEYCODE_s; }
-			const int KEY_LOAD_GAME()      { return Common::KEYCODE_l; }
-			const int KEY_SHOW_CREDITS()   { return Common::KEYCODE_c; }
-			const int KEY_VIEW_ENDGAME()   { return Common::KEYCODE_e; }
+			int KEY_START_NEW_GAME() { return Common::KEYCODE_s; }
+			int KEY_LOAD_GAME()      { return Common::KEYCODE_l; }
+			int KEY_SHOW_CREDITS()   { return Common::KEYCODE_c; }
+			int KEY_VIEW_ENDGAME()   { return Common::KEYCODE_e; }
 		};
 		EN_CloudsOfXeenMenu *cloudsOfXeenMenu() {
 			if (!_soxm)
diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index 28e94ad274..776529dcfe 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -2000,9 +2000,9 @@ public:
 	public:
 		class RU_DialogsCharInfo : public DialogsCharInfo {
 		public:
-			const int KEY_ITEM()     { return Common::KEYCODE_d; }
-			const int KEY_QUICK()    { return Common::KEYCODE_COMMA; }
-			const int KEY_EXCHANGE() { return Common::KEYCODE_c; }
+			int KEY_ITEM()     { return Common::KEYCODE_d; }
+			int KEY_QUICK()    { return Common::KEYCODE_COMMA; }
+			int KEY_EXCHANGE() { return Common::KEYCODE_c; }
 		};
 		RU_DialogsCharInfo *dialogsCharInfo() {
 			if (!_dci) _dci = new RU_DialogsCharInfo();
@@ -2011,12 +2011,12 @@ public:
 
 		class RU_DialogsControlPanel : public DialogsControlPanel {
 		public:
-			const int KEY_FXON()     { return Common::KEYCODE_e; }
-			const int KEY_MUSICON()  { return Common::KEYCODE_v; }
-			const int KEY_LOAD()     { return Common::KEYCODE_p; }
-			const int KEY_SAVE()     { return Common::KEYCODE_c; }
-			const int KEY_QUIT()     { return Common::KEYCODE_d; }
-			const int KEY_MRWIZARD() { return Common::KEYCODE_g; }
+			int KEY_FXON()     { return Common::KEYCODE_e; }
+			int KEY_MUSICON()  { return Common::KEYCODE_v; }
+			int KEY_LOAD()     { return Common::KEYCODE_p; }
+			int KEY_SAVE()     { return Common::KEYCODE_c; }
+			int KEY_QUIT()     { return Common::KEYCODE_d; }
+			int KEY_MRWIZARD() { return Common::KEYCODE_g; }
 		};
 		RU_DialogsControlPanel *dialogsControlPanel() {
 			if (!_dcp) _dcp = new RU_DialogsControlPanel();
@@ -2025,15 +2025,15 @@ public:
 
 		class RU_DialogsCreateChar : public DialogsCreateChar {
 		public:
-			const int KEY_ROLL()   { return Common::KEYCODE_COMMA; }
-			const int KEY_CREATE() { return Common::KEYCODE_c; }
-			const int KEY_MGT()    { return Common::KEYCODE_k; }
-			const int KEY_INT()    { return Common::KEYCODE_b; }
-			const int KEY_PER()    { return Common::KEYCODE_l; }
-			const int KEY_END()    { return Common::KEYCODE_SEMICOLON; }
-			const int KEY_SPD()    { return Common::KEYCODE_r; }
-			const int KEY_ACY()    { return Common::KEYCODE_v; }
-			const int KEY_LCK()    { return Common::KEYCODE_e; }
+			int KEY_ROLL()   { return Common::KEYCODE_COMMA; }
+			int KEY_CREATE() { return Common::KEYCODE_c; }
+			int KEY_MGT()    { return Common::KEYCODE_k; }
+			int KEY_INT()    { return Common::KEYCODE_b; }
+			int KEY_PER()    { return Common::KEYCODE_l; }
+			int KEY_END()    { return Common::KEYCODE_SEMICOLON; }
+			int KEY_SPD()    { return Common::KEYCODE_r; }
+			int KEY_ACY()    { return Common::KEYCODE_v; }
+			int KEY_LCK()    { return Common::KEYCODE_e; }
 		};
 		RU_DialogsCreateChar *dialogsCreateChar() {
 			if (!_dcc) _dcc = new RU_DialogsCreateChar();
@@ -2042,8 +2042,8 @@ public:
 
 		class RU_DialogsDifficulty : public DialogsDifficulty {
 		public:
-			const int KEY_ADVENTURER() { return Common::KEYCODE_f; }
-			const int KEY_WARRIOR()    { return Common::KEYCODE_d; }
+			int KEY_ADVENTURER() { return Common::KEYCODE_f; }
+			int KEY_WARRIOR()    { return Common::KEYCODE_d; }
 		};
 		RU_DialogsDifficulty *dialogsDifficulty() {
 			if (!_dd) _dd = new RU_DialogsDifficulty();
@@ -2052,22 +2052,22 @@ public:
 
 		class RU_DialogsItems : public DialogsItems {
 		public:
-			const int KEY_WEAPONS()   { return Common::KEYCODE_SEMICOLON; }
-			const int KEY_ARMOR()     { return Common::KEYCODE_COMMA; }
-			const int KEY_ACCESSORY() { return Common::KEYCODE_e; }
-			const int KEY_MISC()      { return Common::KEYCODE_h; }
-			const int KEY_ENCHANT()   { return Common::KEYCODE_p; }
-			const int KEY_USE()       { return Common::KEYCODE_b; }
-			const int KEY_BUY()       { return Common::KEYCODE_r; }
-			const int KEY_SELL()      { return Common::KEYCODE_g; }
-			const int KEY_IDENTIFY()  { return Common::KEYCODE_j; }
-			const int KEY_FIX()       { return Common::KEYCODE_x; }
-			const int KEY_EQUIP()     { return Common::KEYCODE_y; }
-			const int KEY_REM()       { return Common::KEYCODE_c; }
-			const int KEY_DISC()      { return Common::KEYCODE_d; }
-			const int KEY_QUEST()     { return Common::KEYCODE_p; }
-			const int KEY_RECHRG()    { return Common::KEYCODE_g; }
-			const int KEY_GOLD()      { return Common::KEYCODE_p; }
+			int KEY_WEAPONS()   { return Common::KEYCODE_SEMICOLON; }
+			int KEY_ARMOR()     { return Common::KEYCODE_COMMA; }
+			int KEY_ACCESSORY() { return Common::KEYCODE_e; }
+			int KEY_MISC()      { return Common::KEYCODE_h; }
+			int KEY_ENCHANT()   { return Common::KEYCODE_p; }
+			int KEY_USE()       { return Common::KEYCODE_b; }
+			int KEY_BUY()       { return Common::KEYCODE_r; }
+			int KEY_SELL()      { return Common::KEYCODE_g; }
+			int KEY_IDENTIFY()  { return Common::KEYCODE_j; }
+			int KEY_FIX()       { return Common::KEYCODE_x; }
+			int KEY_EQUIP()     { return Common::KEYCODE_y; }
+			int KEY_REM()       { return Common::KEYCODE_c; }
+			int KEY_DISC()      { return Common::KEYCODE_d; }
+			int KEY_QUEST()     { return Common::KEYCODE_p; }
+			int KEY_RECHRG()    { return Common::KEYCODE_g; }
+			int KEY_GOLD()      { return Common::KEYCODE_p; }
 		};
 		RU_DialogsItems *dialogsItems() {
 			if (!_di) _di = new RU_DialogsItems();
@@ -2076,10 +2076,10 @@ public:
 
 		class RU_DialogsParty : public DialogsParty {
 		public:
-			const int KEY_DELETE() { return Common::KEYCODE_e; }
-			const int KEY_REMOVE() { return Common::KEYCODE_d; }
-			const int KEY_CREATE() { return Common::KEYCODE_c; }
-			const int KEY_EXIT()   { return Common::KEYCODE_s; }
+			int KEY_DELETE() { return Common::KEYCODE_e; }
+			int KEY_REMOVE() { return Common::KEYCODE_d; }
+			int KEY_CREATE() { return Common::KEYCODE_c; }
+			int KEY_EXIT()   { return Common::KEYCODE_s; }
 		};
 		RU_DialogsParty *dialogsParty() {
 			if (!_dp) _dp = new RU_DialogsParty();
@@ -2088,9 +2088,9 @@ public:
 
 		class RU_DialogsQuests : public DialogsQuests {
 		public:
-			const int KEY_QUEST_ITEMS()    { return Common::KEYCODE_d; }
-			const int KEY_CURRENT_QUESTS() { return Common::KEYCODE_p; }
-			const int KEY_AUTO_NOTES()     { return Common::KEYCODE_f; }
+			int KEY_QUEST_ITEMS()    { return Common::KEYCODE_d; }
+			int KEY_CURRENT_QUESTS() { return Common::KEYCODE_p; }
+			int KEY_AUTO_NOTES()     { return Common::KEYCODE_f; }
 		};
 		RU_DialogsQuests *dialogsQuests() {
 			if (!_dq) _dq = new RU_DialogsQuests();
@@ -2099,7 +2099,7 @@ public:
 
 		class RU_DialogsQuickFight : public DialogsQuickFight {
 		public:
-			const int KEY_NEXT() { return Common::KEYCODE_c; }
+			int KEY_NEXT() { return Common::KEYCODE_c; }
 		};
 		RU_DialogsQuickFight *dialogsQuickFight() {
 			if (!_dqf) _dqf = new RU_DialogsQuickFight();
@@ -2108,14 +2108,14 @@ public:
 
 		class RU_DialogsSpells : public DialogsSpells {
 		public:
-			const int KEY_CAST()   { return Common::KEYCODE_p; }
-			const int KEY_NEW()    { return Common::KEYCODE_y; }
-			const int KEY_FIRE()   { return Common::KEYCODE_j; }
-			const int KEY_ELEC()   { return Common::KEYCODE_u; }
-			const int KEY_COLD()   { return Common::KEYCODE_LEFTBRACKET; }
-			const int KEY_ACID()   { return Common::KEYCODE_z; }
-			const int KEY_SET()    { return Common::KEYCODE_e; }
-			const int KEY_RETURN() { return Common::KEYCODE_d; }
+			int KEY_CAST()   { return Common::KEYCODE_p; }
+			int KEY_NEW()    { return Common::KEYCODE_y; }
+			int KEY_FIRE()   { return Common::KEYCODE_j; }
+			int KEY_ELEC()   { return Common::KEYCODE_u; }
+			int KEY_COLD()   { return Common::KEYCODE_LEFTBRACKET; }
+			int KEY_ACID()   { return Common::KEYCODE_z; }
+			int KEY_SET()    { return Common::KEYCODE_e; }
+			int KEY_RETURN() { return Common::KEYCODE_d; }
 		};
 		RU_DialogsSpells *dialogsSpells() {
 			if (!_ds) _ds = new RU_DialogsSpells();
@@ -2124,22 +2124,22 @@ public:
 
 		class RU_Locations : public Locations {
 		public:
-			const int KEY_DEP()        { return Common::KEYCODE_d; }
-			const int KEY_WITH()       { return Common::KEYCODE_c; }
-			const int KEY_GOLD()       { return Common::KEYCODE_p; }
-			const int KEY_GEMS()       { return Common::KEYCODE_f; }
-			const int KEY_BROWSE()     { return Common::KEYCODE_c; }
-			const int KEY_BUY_SPELLS() { return Common::KEYCODE_r; }
-			const int KEY_SPELL_INFO() { return Common::KEYCODE_j; }
-			const int KEY_SIGN_IN()    { return Common::KEYCODE_j; }
-			const int KEY_DRINK()      { return Common::KEYCODE_d; }
-			const int KEY_FOOD()       { return Common::KEYCODE_t; }
-			const int KEY_TIP()        { return Common::KEYCODE_x; }
-			const int KEY_RUMORS()     { return Common::KEYCODE_c; }
-			const int KEY_HEAL()       { return Common::KEYCODE_k; }
-			const int KEY_DONATION()   { return Common::KEYCODE_l; }
-			const int KEY_UNCURSE()    { return Common::KEYCODE_c; }
-			const int KEY_TRAIN()      { return Common::KEYCODE_j; }
+			int KEY_DEP()        { return Common::KEYCODE_d; }
+			int KEY_WITH()       { return Common::KEYCODE_c; }
+			int KEY_GOLD()       { return Common::KEYCODE_p; }
+			int KEY_GEMS()       { return Common::KEYCODE_f; }
+			int KEY_BROWSE()     { return Common::KEYCODE_c; }
+			int KEY_BUY_SPELLS() { return Common::KEYCODE_r; }
+			int KEY_SPELL_INFO() { return Common::KEYCODE_j; }
+			int KEY_SIGN_IN()    { return Common::KEYCODE_j; }
+			int KEY_DRINK()      { return Common::KEYCODE_d; }
+			int KEY_FOOD()       { return Common::KEYCODE_t; }
+			int KEY_TIP()        { return Common::KEYCODE_x; }
+			int KEY_RUMORS()     { return Common::KEYCODE_c; }
+			int KEY_HEAL()       { return Common::KEYCODE_k; }
+			int KEY_DONATION()   { return Common::KEYCODE_l; }
+			int KEY_UNCURSE()    { return Common::KEYCODE_c; }
+			int KEY_TRAIN()      { return Common::KEYCODE_j; }
 		};
 		RU_Locations *locations() {
 			if (!_l) _l = new RU_Locations();
@@ -2148,10 +2148,10 @@ public:
 
 		class RU_CloudsOfXeenMenu : public CloudsOfXeenMenu {
 		public:
-			const int KEY_START_NEW_GAME() { return Common::KEYCODE_y; }
-			const int KEY_LOAD_GAME()      { return Common::KEYCODE_p; }
-			const int KEY_SHOW_CREDITS()   { return Common::KEYCODE_c; }
-			const int KEY_VIEW_ENDGAME()   { return Common::KEYCODE_a; }
+			int KEY_START_NEW_GAME() { return Common::KEYCODE_y; }
+			int KEY_LOAD_GAME()      { return Common::KEYCODE_p; }
+			int KEY_SHOW_CREDITS()   { return Common::KEYCODE_c; }
+			int KEY_VIEW_ENDGAME()   { return Common::KEYCODE_a; }
 		};
 		RU_CloudsOfXeenMenu *cloudsOfXeenMenu() {
 			if (!_soxm)


Commit: 0b038463ffc9d7222ca8f9e2b45adc79254d4c37
    https://github.com/scummvm/scummvm/commit/0b038463ffc9d7222ca8f9e2b45adc79254d4c37
Author: Maxim Kovalenko (ardash1100 at gmail.com)
Date: 2021-08-02T17:35:18+02:00

Commit Message:
XEEN: RU Fixed item materials

Changed paths:
    devtools/create_xeen/constants.cpp
    devtools/create_xeen/constants.h
    devtools/create_xeen/en_constants.h
    devtools/create_xeen/ru_constants.h
    dists/engine-data/xeen.ccs
    engines/xeen/item.cpp
    engines/xeen/item.h
    engines/xeen/resources.cpp
    engines/xeen/resources.h


diff --git a/devtools/create_xeen/constants.cpp b/devtools/create_xeen/constants.cpp
index fbd690df40..5db1a62674 100644
--- a/devtools/create_xeen/constants.cpp
+++ b/devtools/create_xeen/constants.cpp
@@ -486,6 +486,9 @@ void LangConstants::writeConstants(Common::String num, CCArchive &cc) {
 	file.syncString(DARKSIDE_ENDING2());
 	file.syncString(PHAROAH_ENDING_TEXT1());
 	file.syncString(PHAROAH_ENDING_TEXT2());
+	file.syncStrings(MAE_NAMES(), 131);
+	delete[] _maeNames;
+	_maeNames = NULL;
 
 	cc.add("CONSTANTS" + num, file);
 
diff --git a/devtools/create_xeen/constants.h b/devtools/create_xeen/constants.h
index 2fb1a0dd0a..f6c4cfa2dd 100644
--- a/devtools/create_xeen/constants.h
+++ b/devtools/create_xeen/constants.h
@@ -156,6 +156,7 @@ protected:
 	const char **_found = NULL;
 	const char **_born = NULL;
 	const char **_onHand = NULL;
+	const char **_maeNames = NULL;
 	const int   *_newCharSkillsOffset = NULL;
 
 public:
@@ -1236,13 +1237,14 @@ public:
 		{ "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m", "sf05.m" }
 	};
 
-	virtual const char *DIFFICULTY_TEXT() = 0;
-	virtual const char *SAVE_OFF_LIMITS() = 0;
-	virtual const char *CLOUDS_INTRO1() = 0;
-	virtual const char *DARKSIDE_ENDING1() = 0;
-	virtual const char *DARKSIDE_ENDING2() = 0;
-	virtual const char *PHAROAH_ENDING_TEXT1() = 0;
-	virtual const char *PHAROAH_ENDING_TEXT2() = 0;
+	virtual const char  *DIFFICULTY_TEXT() = 0;
+	virtual const char  *SAVE_OFF_LIMITS() = 0;
+	virtual const char  *CLOUDS_INTRO1() = 0;
+	virtual const char  *DARKSIDE_ENDING1() = 0;
+	virtual const char  *DARKSIDE_ENDING2() = 0;
+	virtual const char  *PHAROAH_ENDING_TEXT1() = 0;
+	virtual const char  *PHAROAH_ENDING_TEXT2() = 0;
+	virtual const char **MAE_NAMES() = 0;
 
 	void writeConstants(Common::String num, CCArchive &cc);
 
diff --git a/devtools/create_xeen/en_constants.h b/devtools/create_xeen/en_constants.h
index 61b339d0a5..93245c4f0c 100644
--- a/devtools/create_xeen/en_constants.h
+++ b/devtools/create_xeen/en_constants.h
@@ -1989,6 +1989,15 @@ public:
 			   "l\fd";
 	}
 
+
+	const char **MAE_NAMES() {
+		delete[] _maeNames;
+		_maeNames = new const char *[131] {
+			"",
+		};
+		return _maeNames;
+	}
+
 	class EN_KeyConstants : public KeyConstants {
 	public:
 		class EN_DialogsCharInfo : public DialogsCharInfo {
diff --git a/devtools/create_xeen/ru_constants.h b/devtools/create_xeen/ru_constants.h
index 776529dcfe..f515966f70 100644
--- a/devtools/create_xeen/ru_constants.h
+++ b/devtools/create_xeen/ru_constants.h
@@ -1996,6 +1996,144 @@ public:
 			   "l\fd";
 	}
 
+	const char **MAE_NAMES() {
+		delete[] _maeNames;
+		_maeNames = new const char *[131] {
+			"",
+			"\xA6\xA0\xE0\xA0",                                             //жара
+			"\xAE\xA3\xAD\xA5\xA9",                                         //огней
+			"\xAE\xA3\xAD\xEF",                                             //огня
+			"\xA4\xEB\xAC\xA0",                                             //дыма
+			"\xAF\xAB\xA0\xAC\xA5\xAD\xA8",                                 //пламени
+			"\xAA\xA8\xAF\xA5\xAD\xA8\xEF",                                 //кипения
+			"\xA2\xE1\xAF\xEB\xE8\xAA\xA8",                                 //вспышки
+			"\xA0\xA4\xA0",                                                 //ада
+			"\xAC\xA5\xE0\xE6\xA0\xAD\xA8\xEF",                             //мерцания
+			"\xA8\xE1\xAA\xE0",                                             //искр
+			"\xE1\xE2\xA0\xE2\xA8\xAA\xA8",                                 //статики
+			"\xA3\xE0\xAE\xAC\xA0",                                         //грома
+			"\xE8\xAE\xAA\xA0",                                             //шока
+			"\xED\xAB\xA5\xAA\xE2\xE0\xA8\xE7\xA5\xE1\xE2\xA2\xA0",         //электричества
+			"\xAC\xAE\xAB\xAD\xA8\xA8",                                     //молнии
+			"\xAB\xEC\xA4\xA0",                                             //льда
+			"\xAC\xAE\xE0\xAE\xA7\xA0",                                     //мороза
+			"\xE1\xE2\xE3\xA6\xA8",                                         //стужи
+			"\xE5\xAE\xAB\xAE\xA4\xA0",                                     //холода
+			"\xAA\xE0\xA8\xAE",                                             //крио
+			"\xAA\xA8\xE1\xAB\xAE\xE2\xEB",                                 //кислоты
+			"\xA7\xA5\xAB\xEC\xEF",                                         //зелья
+			"\xEF\xA4\xA0",                                                 //яда
+			"\xE2\xAE\xAA\xE1\xA8\xAD\xA0",                                 //токсина
+			"\xAE\xE2\xE0\xA0\xA2\xEB",                                     //отравы
+			"\xE1\xA2\xA5\xE2\xA0",                                         //света
+			"\xAD\xA0\xAA\xA0\xAB\xA0",                                     //накала
+			"\xAF\xAB\xAE\xE2\xAD\xAE\xE1\xE2\xA8",                         //плотности
+			"\xA7\xA2\xE3\xAA\xA0",                                         //звука
+			"\xED\xAD\xA5\xE0\xA3\xA8\xA8",                                 //энергии
+			"\xE2\xA5\xAF\xAB\xA0",                                         //тепла
+			"\xE1\xA8\xEF\xAD\xA8\xEF",                                     //сияния
+			"\xAA\xA8\xAD\xA5\xE2\xA8\xAA\xA8",                             //кинетики
+			"\xAC\xA8\xE1\xE2\xA8\xAA\xA8",                                 //мистики
+			"\xAC\xA0\xA3\xA8\xA8",                                         //магии
+			"\xED\xAA\xE2\xAE\xAF\xAB\xA0\xA7\xAC\xEB",                     //эктоплазмы
+			"\xA8\xA7 \xA4\xA5\xE0\xA5\xA2\xA0",                            //из дерева
+			"\xA8\xA7 \xAA\xAE\xA6\xA8",                                    //из кожи
+			"\xA8\xA7 \xAC\xA5\xA4\xA8",                                    //из меди
+			"\xA8\xA7 \xA1\xE0\xAE\xAD\xA7\xEB",                            //из бронзы
+			"\xA8\xA7 \xA6\xA5\xAB\xA5\xA7\xA0",                            //из железа
+			"\xA8\xA7 \xE1\xA5\xE0\xA5\xA1\xE0\xA0",                        //из серебра
+			"\xA8\xA7 \xE1\xE2\xA0\xAB\xA8",                                //из стали
+			"\xA8\xA7 \xA7\xAE\xAB\xAE\xE2\xA0",                            //из золота
+			"\xA8\xA7 \xAF\xAB\xA0\xE2\xA8\xAD\xEB",                        //из платины
+			"\xA8\xA7 \xE1\xE2\xA5\xAA\xAB\xA0",                            //из стекла
+			"\xA8\xA7 \xAA\xAE\xE0\xA0\xAB\xAB\xAE\xA2",                    //из кораллов
+			"\xA8\xA7 \xE5\xE0\xE3\xE1\xE2\xA0\xAB\xEF",                    //из хрусталя
+			"\xA8\xA7 \xAB\xA0\xA7\xE3\xE0\xA8\xE2\xA0",                    //из лазурита
+			"\xA8\xA7 \xAF\xA5\xE0\xAB\xA0\xAC\xE3\xE2\xE0\xA0",            //из перламутра
+			"\xA8\xA7 \xEF\xAD\xE2\xA0\xE0\xEF",                            //из янтаря
+			"\xA8\xA7 \xED\xA1\xA5\xAD\xA0",                                //из эбена
+			"\xA8\xA7 \xAA\xA2\xA0\xE0\xE6\xA0",                            //из кварца
+			"\xA8\xA7 \xE0\xE3\xA1\xA8\xAD\xA0",                            //из рубина
+			"\xA8\xA7 \xA8\xA7\xE3\xAC\xE0\xE3\xA4\xA0",                    //из изумруда
+			"\xA8\xA7 \xE1\xA0\xAF\xE4\xA8\xE0\xA0",                        //из сапфира
+			"\xA8\xA7 \xA0\xAB\xAC\xA0\xA7\xA0",                            //из алмаза
+			"\xA8\xA7 \xAE\xA1\xE1\xA8\xA4\xA8\xA0\xAD\xA0",                //из обсидиана
+			"\xE1\xA8\xAB\xEB",                                             //силы
+			"\xAA\xE0\xA5\xAF\xAE\xE1\xE2\xA8",                             //крепости
+			"\xA2\xAE\xA8\xAD\xA0",                                         //воина
+			"\xAE\xA3\xE0\xA0",                                             //огра
+			"\xA3\xA8\xA3\xA0\xAD\xE2\xA0",                                 //гиганта
+			"\xA3\xE0\xAE\xAC\xA0",                                         //грома
+			"\xAC\xAE\xE9\xA8",                                             //мощи
+			"\xA4\xE0\xA0\xAA\xAE\xAD\xA0",                                 //дракона
+			"\xE4\xAE\xE2\xAE\xAD\xA0",                                     //фотона
+			"\xE3\xAC\xA0",                                                 //ума
+			"\xE0\xA0\xA7\xE3\xAC\xA0",                                     //разума
+			"\xA2\xAE\xAB\xE5\xA2\xA0",                                     //волхва
+			"\xAC\xEB\xE1\xAB\xA8",                                         //мысли
+			"\xA7\xAD\xA0\xAD\xA8\xEF",                                     //знания
+			"\xA8\xAD\xE2\xA5\xAB\xAB\xA5\xAA\xE2\xA0",                     //интеллекта
+			"\xAC\xE3\xA4\xE0\xAE\xE1\xE2\xA8",                             //мудрости
+			"\xA3\xA5\xAD\xA8\xEF",                                         //гения
+			"\xE1\xA8\xAC\xAF\xA0\xE2\xA8\xA8",                             //симпатии
+			"\xA4\xE0\xE3\xA6\xA1\xEB",                                     //дружбы
+			"\xAE\xA1\xA0\xEF\xAD\xA8\xEF",                                 //обаяния
+			"\xE2\xA0\xAB\xA8\xE1\xAC\xA0\xAD",                             //талисман
+			"\xE1\xA8\xAB\xEB \xA4\xE3\xE5\xA0",                            //силы духа
+			"\xE5\xA0\xE0\xA8\xA7\xAC\xEB",                                 //харизмы
+			"\xAB\xA8\xA4\xA5\xE0\xE1\xE2\xA2\xA0",                         //лидерства
+			"\xED\xA3\xAE",                                                 //эго
+			"\xE1\xA2\xEF\xE2\xAE\xE1\xE2\xA8",                             //святости
+			"\xAF\xE0\xEB\xE2\xAA\xAE\xE1\xE2\xA8",                         //прыткости
+			"\xE0\xA5\xA7\xA2\xAE\xE1\xE2\xA8",                             //резвости
+			"\xA1\xEB\xE1\xE2\xE0\xAE\xE2\xEB",                             //быстроты
+			"\xE1\xE2\xE0\xA5\xAC\xA8\xE2\xA5\xAB\xEC\xAD\xAE\xE1\xE2\xA8", //стремительности
+			"\xE1\xAA\xAE\xE0\xAE\xE1\xE2\xA8",                             //скорости
+			"\xA2\xA5\xE2\xE0\xA0",                                         //ветра
+			"\xE3\xE1\xAA\xAE\xE0\xA5\xAD\xA8\xEF",                         //ускорения
+			"\xE3\xE0\xA0\xA3\xA0\xAD\xA0",                                 //урагана
+			"\xE2\xAE\xE7\xAD\xAE\xE1\xE2\xA8",                             //точности
+			"\xAC\xA5\xE2\xAA\xAE\xE1\xE2\xA8",                             //меткости
+			"\xE1\xE2\xE0\xA5\xAB\xAA\xA0",                                 //стрелка
+			"\xAF\xE0\xA8\xE6\xA5\xAB\xEC\xAD\xAE\xE1\xE2\xA8",             //прицельности
+			"\xAD\xA0\xE6\xA5\xAB\xA5\xAD\xAD\xAE\xE1\xE2\xA8",             //нацеленности
+			"\xEF\xE1\xE2\xE0\xA5\xA1\xA0",                                 //ястреба
+			"\xAA\xAB\xA5\xA2\xA5\xE0\xA0",                                 //клевера
+			"\xE8\xA0\xAD\xE1\xA0",                                         //шанса
+			"\xAF\xAE\xA1\xA5\xA4\xA8\xE2\xA5\xAB\xEF",                     //победителя
+			"\xE3\xA4\xA0\xE7\xA8",                                         //удачи
+			"\xA8\xA3\xE0\xAE\xAA\xA0",                                     //игрока
+			"\xAB\xA5\xAF\xE0\xA5\xAA\xAE\xAD\xA0",                         //лепрекона
+			"\xA1\xAE\xA4\xE0\xAE\xE1\xE2\xA8",                             //бодрости
+			"\xA7\xA4\xAE\xE0\xAE\xA2\xEC\xEF",                             //здоровья
+			"\xA6\xA8\xA7\xAD\xA8",                                         //жизни
+			"\xE2\xE0\xAE\xAB\xAB\xEF",                                     //тролля
+			"\xA2\xA0\xAC\xAF\xA8\xE0\xA0",                                 //вампира
+			"\xE7\xA0\xE0",                                                 //чар
+			"\xA7\xA0\xAA\xAB\xA8\xAD\xA0\xE2\xA5\xAB\xEF",                 //заклинателя
+			"\xA2\xA5\xA4\xEC\xAC\xEB",                                     //ведьмы
+			"\xAC\xA0\xA3\xA0",                                             //мага
+			"\xA0\xE0\xE5\xA8\xAC\xA0\xA3\xA0",                             //архимага
+			"\xE2\xA0\xA9\xAD\xEB\xE5 \xA7\xAD\xA0\xAD\xA8\xA9",            //тайных знаний
+			"\xA7\xA0\xE9\xA8\xE2\xEB",                                     //защиты
+			"\xA1\xE0\xAE\xAD\xA8",                                         //брони
+			"\xA7\xA0\xE9\xA8\xE2\xAD\xA8\xAA\xA0",                         //защитника
+			"\xAB\xAE\xA2\xAA\xAE\xE1\xE2\xA8",                             //ловкости
+			"\xAF\xE0\xA5\xA4\xE1\xAA\xA0\xA7\xA0\xE2\xA5\xAB\xEF",         //предсказателя
+			"\xAC\xAE\xE8\xA5\xAD\xAD\xA8\xAA\xA0",                         //мошенника
+			"\xA2\xA7\xAB\xAE\xAC\xE9\xA8\xAA\xA0",                         //взломщика
+			"\xAC\xA0\xE0\xAE\xA4\xF1\xE0\xA0",                             //мародёра
+			"\xA1\xA0\xAD\xA4\xA8\xE2\xA0",                                 //бандита
+			"\xAA\xA0\xE0\xAC\xA0\xAD\xAD\xA8\xAA\xA0",                     //карманника
+			"\xA2\xAE\xE0\xA0",                                             //вора
+			"\xE0\xA0\xA7\xA1\xAE\xA9\xAD\xA8\xAA\xA0",                     //разбойника
+			"\xA3\xE0\xA0\xA1\xA8\xE2\xA5\xAB\xEF",                         //грабителя
+			"\xAF\xE0\xA5\xE1\xE2\xE3\xAF\xAD\xA8\xAA\xA0",                 //преступника
+			"\xAF\xA8\xE0\xA0\xE2\xA0"                                      //пирата 
+		};
+		return _maeNames;
+	}
+
 	class RU_KeyConstants : public KeyConstants {
 	public:
 		class RU_DialogsCharInfo : public DialogsCharInfo {
diff --git a/dists/engine-data/xeen.ccs b/dists/engine-data/xeen.ccs
index fa36599e49..4eddc3c5a6 100644
Binary files a/dists/engine-data/xeen.ccs and b/dists/engine-data/xeen.ccs differ
diff --git a/engines/xeen/item.cpp b/engines/xeen/item.cpp
index bd08dcd494..dd81a7133c 100644
--- a/engines/xeen/item.cpp
+++ b/engines/xeen/item.cpp
@@ -288,6 +288,15 @@ void InventoryItems::capitalizeItem(Common::String &name) {
 		name.setChar(toupper(name[3]), 3);
 }
 
+const char *InventoryItems::getMaeName(int material) {
+	if (Common::RU_RUS == g_vm->getLanguage()) {
+		return Res.MAE_NAMES[material];
+	} else {
+		Resources &res = *getVm()->_resources;
+		return res._maeNames[material].c_str();
+	}
+}
+
 /*------------------------------------------------------------------------*/
 
 void WeaponItems::equipItem(int itemIndex) {
@@ -342,17 +351,27 @@ void WeaponItems::equipItem(int itemIndex) {
 
 Common::String WeaponItems::getFullDescription(int itemIndex, int displayNum) {
 	XeenItem &i = operator[](itemIndex);
-	Resources &res = *getVm()->_resources;
-
-	Common::String desc = Common::String::format("\f%02u%s%s%s\f%02u%s%s%s", displayNum,
-		i._state._cursed || i._state._broken ? "" : res._maeNames[i._material].c_str(),
-		i._state._broken ? Res.ITEM_BROKEN : "",
-		i._state._cursed ? Res.ITEM_CURSED : "",
-		displayNum,
-		Res.WEAPON_NAMES[i._id],
-		!i._state._counter ? "" : Res.BONUS_NAMES[i._state._counter],
-		(i._state._cursed || i._state._broken) || !i._id ? "\b " : ""
-	);
+	Common::String desc;
+	if (Common::RU_RUS == g_vm->getLanguage())
+		 desc = Common::String::format("\f%02u%s%s\f%02u%s%s%s%s", displayNum,
+			i._state._broken ? Res.ITEM_BROKEN : "",
+			i._state._cursed ? Res.ITEM_CURSED : "",
+			displayNum,
+			Res.WEAPON_NAMES[i._id],
+			i._state._cursed || i._state._broken ? "" : getMaeName(i._material),
+			!i._state._counter ? "" : Res.BONUS_NAMES[i._state._counter],
+			(i._state._cursed || i._state._broken) || !i._id ? "\b " : ""
+		);
+	else
+		desc = Common::String::format("\f%02u%s%s%s\f%02u%s%s%s", displayNum,
+			i._state._cursed || i._state._broken ? "" : getMaeName(i._material),
+			i._state._broken ? Res.ITEM_BROKEN : "",
+			i._state._cursed ? Res.ITEM_CURSED : "",
+			displayNum,
+			Res.WEAPON_NAMES[i._id],
+			!i._state._counter ? "" : Res.BONUS_NAMES[i._state._counter],
+			(i._state._cursed || i._state._broken) || !i._id ? "\b " : ""
+		);
 	capitalizeItem(desc);
 	return desc;
 }
@@ -515,16 +534,26 @@ void ArmorItems::equipItem(int itemIndex) {
 
 Common::String ArmorItems::getFullDescription(int itemIndex, int displayNum) {
 	XeenItem &i = operator[](itemIndex);
-	Resources &res = *getVm()->_resources;
-
-	Common::String desc = Common::String::format("\f%02u%s%s%s\f%02u%s%s", displayNum,
-		i._state._cursed || i._state._broken ? "" : res._maeNames[i._material].c_str(),
-		i._state._broken ? Res.ITEM_BROKEN : "",
-		i._state._cursed ? Res.ITEM_CURSED : "",
-		displayNum,
-		Res.ARMOR_NAMES[i._id],
-		(i._state._cursed || i._state._broken) || !i._id ? "\b " : ""
-	);
+	Common::String desc;
+
+	if (Common::RU_RUS == g_vm->getLanguage()) 
+		desc = Common::String::format("\f%02u%s%s\f%02u%s%s%s", displayNum,
+			i._state._broken ? Res.ITEM_BROKEN : "",
+			i._state._cursed ? Res.ITEM_CURSED : "",
+			displayNum,
+			Res.ARMOR_NAMES[i._id],
+			i._state._cursed || i._state._broken ? "" : getMaeName(i._material),
+			(i._state._cursed || i._state._broken) || !i._id ? "\b " : ""
+		);
+	else
+		desc = Common::String::format("\f%02u%s%s%s\f%02u%s%s", displayNum,
+			i._state._cursed || i._state._broken ? "" : getMaeName(i._material),
+			i._state._broken ? Res.ITEM_BROKEN : "",
+			i._state._cursed ? Res.ITEM_CURSED : "",
+			displayNum,
+			Res.ARMOR_NAMES[i._id],
+			(i._state._cursed || i._state._broken) || !i._id ? "\b " : ""
+		);
 	capitalizeItem(desc);
 	return desc;
 }
@@ -635,16 +664,26 @@ void AccessoryItems::equipItem(int itemIndex) {
 
 Common::String AccessoryItems::getFullDescription(int itemIndex, int displayNum) {
 	XeenItem &i = operator[](itemIndex);
-	Resources &res = *getVm()->_resources;
-
-	Common::String desc = Common::String::format("\f%02u%s%s%s\f%02u%s%s", displayNum,
-		i._state._cursed || i._state._broken ? "" : res._maeNames[i._material].c_str(),
-		i._state._broken ? Res.ITEM_BROKEN : "",
-		i._state._cursed ? Res.ITEM_CURSED : "",
-		displayNum,
-		Res.ACCESSORY_NAMES[i._id],
-		(i._state._cursed || i._state._broken) || !i._id ? "\b " : ""
-	);
+	Common::String desc;
+
+	if (Common::RU_RUS == g_vm->getLanguage()) 
+		desc = Common::String::format("\f%02u%s%s\f%02u%s%s%s", displayNum,
+			i._state._broken ? Res.ITEM_BROKEN : "",
+			i._state._cursed ? Res.ITEM_CURSED : "",
+			displayNum,
+			Res.ACCESSORY_NAMES[i._id],
+			i._state._cursed || i._state._broken ? "" : getMaeName(i._material),
+			(i._state._cursed || i._state._broken) || !i._id ? "\b " : ""
+		);
+	else
+		desc = Common::String::format("\f%02u%s%s%s\f%02u%s%s", displayNum,
+			i._state._cursed || i._state._broken ? "" : getMaeName(i._material),
+			i._state._broken ? Res.ITEM_BROKEN : "",
+			i._state._cursed ? Res.ITEM_CURSED : "",
+			displayNum,
+			Res.ACCESSORY_NAMES[i._id],
+			(i._state._cursed || i._state._broken) || !i._id ? "\b " : ""
+		);
 	capitalizeItem(desc);
 	return desc;
 }
diff --git a/engines/xeen/item.h b/engines/xeen/item.h
index 87ae29acce..859ec75c8e 100644
--- a/engines/xeen/item.h
+++ b/engines/xeen/item.h
@@ -172,6 +172,12 @@ protected:
 	 * Capitalizes a passed description string that includes embedded formatting for the Items dialog
 	 */
 	void capitalizeItem(Common::String &name);
+
+	/**
+	 * Get Material Name
+	 */
+	const char *getMaeName(int material);
+
 public:
 	InventoryItems(Character *character, ItemCategory category);
 	virtual ~InventoryItems() {}
diff --git a/engines/xeen/resources.cpp b/engines/xeen/resources.cpp
index 53d90e2e24..e1c73921ca 100644
--- a/engines/xeen/resources.cpp
+++ b/engines/xeen/resources.cpp
@@ -419,6 +419,7 @@ void Resources::loadData() {
 	file.syncString(DARKSIDE_ENDING2);
 	file.syncString(PHAROAH_ENDING_TEXT1);
 	file.syncString(PHAROAH_ENDING_TEXT2);
+	file.syncStrings(MAE_NAMES, 131);
 
 	ResFile keys("CONSTKEYS_", _buffer, lang);
 	keys.syncNumber(KeyConstants.DialogsCharInfo.KEY_ITEM);
diff --git a/engines/xeen/resources.h b/engines/xeen/resources.h
index a73b98e26b..d44ae843ad 100644
--- a/engines/xeen/resources.h
+++ b/engines/xeen/resources.h
@@ -473,6 +473,7 @@ public:
 	const char *DARKSIDE_ENDING2;
 	const char *PHAROAH_ENDING_TEXT1;
 	const char *PHAROAH_ENDING_TEXT2;
+	const char *MAE_NAMES[131];
 
 	struct {
 




More information about the Scummvm-git-logs mailing list