[Scummvm-git-logs] scummvm master -> 8057ccd93d42d3ae4832bbc0a81177dd27c1dfb8

sev- sev at scummvm.org
Wed Apr 29 08:31:46 UTC 2020


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

Summary:
c0e05b1421 COMMON: Add achievements helpers
b1ddd940ae ENGINES: Add achievements info API
bc87a75f00 WINTERMUTE: Fill extra detection field for JULIA games
2e8c064186 WINTERMUTE: Add known Steam achievements lists
7ff02045c4 WINTERMUTE: Implement Steam & Galaxy plugins
4a0cec37b6 WINTERMUTE: Move keymapper tables to separate file
73f1da2773 GUI: View checked inactive checkbox as grey, not invisible
11ea016121 GUI: Define achievement tab widget at theme files
8b96a6b719 GUI: Recompile GUI files
c09abee01c GUI: Add GUI for per-game achievements tab
8057ccd93d COMMON: Switch AchMan to use INIFile instead of ConfMan section


Commit: c0e05b14218e2f6a47bf02a4acf0c6aae7c7ca89
    https://github.com/scummvm/scummvm/commit/c0e05b14218e2f6a47bf02a4acf0c6aae7c7ca89
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-04-29T10:31:36+02:00

Commit Message:
COMMON: Add achievements helpers

Changed paths:
  A common/achievements.cpp
  A common/achievements.h
    common/module.mk


diff --git a/common/achievements.cpp b/common/achievements.cpp
new file mode 100644
index 0000000000..abe4c3cb73
--- /dev/null
+++ b/common/achievements.cpp
@@ -0,0 +1,188 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+
+#include "common/achievements.h"
+#include "common/config-manager.h"
+#include "common/debug.h"
+#include "common/system.h"
+#include "common/translation.h"
+
+namespace Common {
+
+DECLARE_SINGLETON(AchievementsManager);
+
+
+AchievementsManager::AchievementsManager() {
+	unsetActiveDomain();
+}
+
+
+AchievementsManager::~AchievementsManager() {
+}
+
+bool AchievementsManager::setActiveDomain(AchievementsPlatform platform, const String &appId) {
+	String suffix = platform == STEAM_ACHIEVEMENTS ? "steam-" + appId :
+					platform == GALAXY_ACHIEVEMENTS ? "galaxy-" + appId :
+					appId;
+
+	String achDomainId = "achievements-" + suffix;
+	String statDomainId = "statistics-" + suffix;
+
+	if (_achDomainId == achDomainId && _statDomainId == statDomainId) {
+		return true;
+	}
+
+	if (isReady()) {
+		unsetActiveDomain();
+	}
+
+	ConfMan.addMiscDomain(achDomainId);
+	ConfMan.addMiscDomain(statDomainId);
+
+	_achDomainId = achDomainId;
+	_statDomainId = statDomainId;
+	return true;
+}
+
+
+bool AchievementsManager::unsetActiveDomain() {
+	if (!isReady()) {
+		return true;
+	}
+
+	ConfMan.flushToDisk();
+
+	_achDomainId = "";
+	_statDomainId = "";
+	return true;
+}
+
+
+bool AchievementsManager::setAchievement(const String &id, const String &displayedMessage) {
+	if (!isReady()) {
+		return false;
+	}
+	if (isAchieved(id)) {
+		return true;
+	}
+
+	debug("AchievementsManager::setAchievement('%s'): Achievement unlocked!", id.c_str());
+
+	ConfMan.setBool(id, true, _achDomainId);
+	ConfMan.flushToDisk();
+
+	if (!displayedMessage.empty() && g_system) {
+		String msg;
+		msg = Common::String::format("%s\n%s", _("Achievement unlocked!"), displayedMessage.c_str());
+		g_system->displayMessageOnOSD(msg.c_str());
+	}
+
+	return true;
+}
+
+
+bool AchievementsManager::isAchieved(const String &id) {
+	if (!isReady()) {
+		return false;
+	}
+
+	return ConfMan.hasKey(id, _achDomainId) && ConfMan.getBool(id, _achDomainId);
+}
+
+
+bool AchievementsManager::clearAchievement(const String &id) {
+	if (!isReady()) {
+		return false;
+	}
+
+	ConfMan.removeKey(id, _achDomainId);
+	ConfMan.flushToDisk();
+	return true;
+}
+
+
+bool AchievementsManager::setStatFloat(const String &id, float value) {
+	if (!isReady()) {
+		return false;
+	}
+
+	String tmp = Common::String::format("%8.8f", value);
+	ConfMan.set(id, tmp, _statDomainId);
+	ConfMan.flushToDisk();
+	return 0;
+}
+
+
+float AchievementsManager::getStatFloat(const String &id) {
+	if (!isReady()) {
+		return 0.0;
+	}
+
+	String tmp = ConfMan.get(id, _statDomainId);
+	return atof(tmp.c_str());
+}
+
+
+bool AchievementsManager::setStatInt(String const &id, int value) {
+	if (!isReady()) {
+		return false;
+	}
+
+	ConfMan.setInt(id, value, _statDomainId);
+	ConfMan.flushToDisk();
+	return 0;
+}
+
+
+int AchievementsManager::getStatInt(String const &id) {
+	if (!isReady()) {
+		return 0;
+	}
+
+	return ConfMan.getInt(id, _statDomainId);
+}
+
+
+bool AchievementsManager::resetAllAchievements() {
+	if (!isReady()) {
+		return false;
+	}
+
+	ConfMan.removeMiscDomain(_achDomainId);
+	ConfMan.flushToDisk();
+	return 0;
+}
+
+
+bool AchievementsManager::resetAllStats() {
+	if (!isReady()) {
+		return false;
+	}
+
+	ConfMan.removeMiscDomain(_statDomainId);
+	ConfMan.flushToDisk();
+	return 0;
+}
+
+
+} // End of namespace Common
diff --git a/common/achievements.h b/common/achievements.h
new file mode 100644
index 0000000000..986c2111ad
--- /dev/null
+++ b/common/achievements.h
@@ -0,0 +1,101 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef COMMON_ACHIEVEMENTS_H
+#define COMMON_ACHIEVEMENTS_H
+
+#include "common/array.h"
+#include "common/singleton.h"
+#include "common/str.h"
+
+namespace Common {
+
+/**
+ * List of game achievements provider platforms.
+ * Possible candidates are XBOX Gamerscore, PSN Trophies, Kongregate Badges, etc...
+ */
+enum AchievementsPlatform {
+	STEAM_ACHIEVEMENTS,
+	GALAXY_ACHIEVEMENTS,
+	UNK_ACHIEVEMENTS = -1
+};
+
+
+/**
+ * Per-game achievements information structure item.
+ */
+struct AchievementDescription {
+	const char *id;            // achievement internal id, e.g. "ACHIEVEMENT_TIMING"
+	bool isHidden;             // achievement is hidden
+	const char *title;         // achievement displayed text, e.g. "Marathon Runner"
+	const char *comment;       // optional achievement hint / comment, e.g. "Finish the game in less than 4 hours"
+};
+
+
+/**
+ * Per-game achievements information structure item.
+ */
+struct AchievementsInfo {
+	Common::AchievementsPlatform platform;              // achievements platform, e.g. STEAM_ACHIEVEMENTS
+	Common::String appId;                               // achievements application ID of given platform
+	Common::Array<AchievementDescription> descriptions; // descriptions of all game achievements
+
+	AchievementsInfo() {platform = Common::UNK_ACHIEVEMENTS;}
+};
+
+
+class AchievementsManager : public Singleton<AchievementsManager> {
+public:
+	AchievementsManager();
+	~AchievementsManager();
+
+	bool setActiveDomain(AchievementsPlatform platform, const String &appId);
+	bool unsetActiveDomain();
+	bool isReady() { return _achDomainId.size() > 0 && _statDomainId.size() > 0; }
+
+	// Methods to manipulate individual achievements 
+	bool setAchievement(const String &id, const String &displayedMessage);
+	bool isAchieved(const String &id);
+	bool clearAchievement(const String &id);
+
+	// Methods to manipulate individual statistics 
+	int getStatInt(const String &id);
+	bool setStatInt(const String &id, int value);
+	float getStatFloat(const String &id);
+	bool setStatFloat(const String &id, float value);
+
+	// Methods to reset everything 
+	bool resetAllAchievements();
+	bool resetAllStats();
+
+private:
+	String _achDomainId;
+	String _statDomainId;
+};
+
+/** Shortcut for accessing the achievements manager. */
+#define AchMan Common::AchievementsManager::instance()
+
+
+} // End of namespace Common
+
+#endif // #ifndef COMMON_ACHIEVEMENTS_MANAGER_H
\ No newline at end of file
diff --git a/common/module.mk b/common/module.mk
index 6769ce3f3b..aed1f9abc4 100644
--- a/common/module.mk
+++ b/common/module.mk
@@ -1,6 +1,7 @@
 MODULE := common
 
 MODULE_OBJS := \
+	achievements.o \
 	archive.o \
 	config-manager.o \
 	coroutines.o \


Commit: b1ddd940ae65d1dddc8f3db8a4cc8a0eaacd3503
    https://github.com/scummvm/scummvm/commit/b1ddd940ae65d1dddc8f3db8a4cc8a0eaacd3503
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-04-29T10:31:36+02:00

Commit Message:
ENGINES: Add achievements info API

Changed paths:
    engines/metaengine.h


diff --git a/engines/metaengine.h b/engines/metaengine.h
index 5775a67c6a..dabc3ce289 100644
--- a/engines/metaengine.h
+++ b/engines/metaengine.h
@@ -23,6 +23,7 @@
 #ifndef ENGINES_METAENGINE_H
 #define ENGINES_METAENGINE_H
 
+#include "common/achievements.h"
 #include "common/scummsys.h"
 #include "common/error.h"
 #include "common/array.h"
@@ -219,6 +220,19 @@ public:
 	 */
 	virtual GUI::OptionsContainerWidget *buildEngineOptionsWidget(GUI::GuiObject *boss, const Common::String &name, const Common::String &target) const;
 
+	/**
+	 * Return a list of achievement descriptions for the specified target.
+	 *
+	 * The default implementation returns an empty list.
+	 *
+	 * @param target    name of a config manager target
+	 * @return          a list of achievement descriptions for an engine plugin
+	 *                  and target
+	 */
+	virtual const Common::AchievementsInfo getAchievementsInfo(const Common::String &target) const {
+		return Common::AchievementsInfo();
+	}
+
 	/**
 	 * Return the maximum save slot that the engine supports.
 	 *


Commit: bc87a75f00934b538a2945027466e3cd9268f61b
    https://github.com/scummvm/scummvm/commit/bc87a75f00934b538a2945027466e3cd9268f61b
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-04-29T10:31:36+02:00

Commit Message:
WINTERMUTE: Fill extra detection field for JULIA games

Changed paths:
    engines/wintermute/detection_tables.h


diff --git a/engines/wintermute/detection_tables.h b/engines/wintermute/detection_tables.h
index 081d2c9d3c..24874bbd4a 100644
--- a/engines/wintermute/detection_tables.h
+++ b/engines/wintermute/detection_tables.h
@@ -1215,82 +1215,82 @@ static const WMEGameDescription gameDescriptions[] = {
 
 	// J.U.L.I.A.: Among the Stars (HD Ready Version) (Steam, January 2017) (English)
 	// NOTE: This is a 2.5D game that is out of ScummVM scope
-	WME_WINENTRY("juliastars", "HD Ready Version",
+	WME_WINENTRY("juliastars", "HD Ready Version/Steam",
 		WME_ENTRY2s("data_sd.dcp", "9949302dfaea943113e2f0ee0dd468be", 4249680,
 					"data_sd.dcp", "9949302dfaea943113e2f0ee0dd468be", 4249680), Common::EN_ANY, ADGF_UNSTABLE | GF_IGNORE_HD_FILES, WME_LITE),
 
 	// J.U.L.I.A.: Among the Stars (Full HD Version) (Steam, January 2017) (English)
 	// NOTE: This is a 2.5D game that is out of ScummVM scope
-	WME_WINENTRY("juliastars", "Full HD Version",
+	WME_WINENTRY("juliastars", "Full HD Version/Steam",
 		WME_ENTRY2s("data_hd.dcp", "fd579fa333f117882190993ea4f3bba5", 5164463,
 					"data_hd.dcp", "fd579fa333f117882190993ea4f3bba5", 5164463), Common::EN_ANY, ADGF_UNSTABLE | GF_IGNORE_SD_FILES, WME_LITE),
 
 	// J.U.L.I.A.: Among the Stars (HD Ready Version) (Steam, November 2016) (German)
 	// NOTE: This is a 2.5D game that is out of ScummVM scope
-	WME_WINENTRY("juliastars", "HD Ready Version",
+	WME_WINENTRY("juliastars", "HD Ready Version/Steam",
 		WME_ENTRY2s("data_sd.dcp", "dfaf7e730a66412f68d11cddb0c8737d", 4505667,
 					"german_sd.dcp", "23ceb8625cebfe32aaa5950e89ac68ba", 123326075), Common::DE_DEU, ADGF_UNSTABLE | GF_IGNORE_HD_FILES, WME_LITE),
 
 	// J.U.L.I.A.: Among the Stars (Full HD Version) (Steam, November 2016) (German)
 	// NOTE: This is a 2.5D game that is out of ScummVM scope
-	WME_WINENTRY("juliastars", "Full HD Version",
+	WME_WINENTRY("juliastars", "Full HD Version/Steam",
 		WME_ENTRY2s("data_hd.dcp", "f40b3d0778e37c61cf309d214446d233", 5264780,
 					"german_hd.dcp", "8d85f83a3fc8f1bec4e5ba2158b05b1e", 152499998), Common::DE_DEU, ADGF_UNSTABLE | GF_IGNORE_SD_FILES, WME_LITE),
 
 	// J.U.L.I.A.: Among the Stars (HD Ready Version) (Steam) (Spanish fanmade translation)
 	// NOTE: This is a 2.5D game that is out of ScummVM scope
-	WME_WINENTRY("juliastars", "HD Ready Version",
+	WME_WINENTRY("juliastars", "HD Ready Version/Steam",
 		WME_ENTRY2s("data_sd.dcp", "da3508bd60025bac35211fb6fc959d88", 5655554,
 					"data_sd.dcp", "da3508bd60025bac35211fb6fc959d88", 5655554), Common::ES_ESP, ADGF_UNSTABLE | GF_IGNORE_HD_FILES, WME_LITE),
 
 	// J.U.L.I.A.: Among the Stars (Full HD Version) (Steam) (Spanish fanmade translation)
 	// NOTE: This is a 2.5D game that is out of ScummVM scope
-	WME_WINENTRY("juliastars", "Full HD Version",
+	WME_WINENTRY("juliastars", "Full HD Version/Steam",
 		WME_ENTRY2s("data_hd.dcp", "da3508bd60025bac35211fb6fc959d88", 5655554,
 					"data_hd.dcp", "da3508bd60025bac35211fb6fc959d88", 5655554), Common::ES_ESP, ADGF_UNSTABLE | GF_IGNORE_SD_FILES, WME_LITE),
 
-	// J.U.L.I.A.: Among the Stars (HD Ready Version) (GoG) (English)
+	// J.U.L.I.A.: Among the Stars (HD Ready Version) (GOG) (English)
 	// NOTE: This is a 2.5D game that is out of ScummVM scope
-	WME_WINENTRY("juliastars", "HD Ready Version",
+	WME_WINENTRY("juliastars", "HD Ready Version/GOG",
 		WME_ENTRY2s("data_sd.dcp", "da1f147a5f2ee6eb0750678a8b955c93", 4526792,
 					"data_sd.dcp", "da1f147a5f2ee6eb0750678a8b955c93", 4526792), Common::EN_ANY, ADGF_UNSTABLE | GF_IGNORE_HD_FILES, WME_LITE),
 
-	// J.U.L.I.A.: Among the Stars (Full HD Version) (GoG) (English)
+	// J.U.L.I.A.: Among the Stars (Full HD Version) (GOG) (English)
 	// NOTE: This is a 2.5D game that is out of ScummVM scope
-	WME_WINENTRY("juliastars", "Full HD Version",
+	WME_WINENTRY("juliastars", "Full HD Version/GOG",
 		WME_ENTRY2s("data_hd.dcp", "91dcb65523da943f22fca0c025a2ce8e", 5281911,
 					"data_hd.dcp", "91dcb65523da943f22fca0c025a2ce8e", 5281911), Common::EN_ANY, ADGF_UNSTABLE | GF_IGNORE_SD_FILES, WME_LITE),
 
-	// J.U.L.I.A.: Among the Stars (HD Ready Version) (GoG) (German)
+	// J.U.L.I.A.: Among the Stars (HD Ready Version) (GOG) (German)
 	// NOTE: This is a 2.5D game that is out of ScummVM scope
-	WME_WINENTRY("juliastars", "HD Ready Version",
+	WME_WINENTRY("juliastars", "HD Ready Version/GOG",
 		WME_ENTRY2s("data_sd.dcp", "070d13b70e35cd95855ddc1687446631", 4526795,
 					"german_sd.dcp", "85eb39225083465225c30261a6bcd63e", 123326134), Common::DE_DEU, ADGF_UNSTABLE | GF_IGNORE_HD_FILES, WME_LITE),
 
-	// J.U.L.I.A.: Among the Stars (Full HD Version) (GoG) (German)
+	// J.U.L.I.A.: Among the Stars (Full HD Version) (GOG) (German)
 	// NOTE: This is a 2.5D game that is out of ScummVM scope
-	WME_WINENTRY("juliastars", "Full HD Version",
+	WME_WINENTRY("juliastars", "Full HD Version/GOG",
 		WME_ENTRY2s("data_hd.dcp", "7973ca635255d3791123fd750cb848f2", 5281925,
 					"german_hd.dcp", "19a771b1a933b71b889026d53734b0c0", 152500044), Common::DE_DEU, ADGF_UNSTABLE | GF_IGNORE_SD_FILES, WME_LITE),
 
-	// J.U.L.I.A.: Among the Stars (HD Ready Version) (GoG) (Spanish fanmade translation)
+	// J.U.L.I.A.: Among the Stars (HD Ready Version) (GOG) (Spanish fanmade translation)
 	// NOTE: This is a 2.5D game that is out of ScummVM scope
-	WME_WINENTRY("juliastars", "HD Ready Version",
+	WME_WINENTRY("juliastars", "HD Ready Version/GOG",
 		WME_ENTRY2s("data_sd.dcp", "29f4856cc1514bdb86d3b19a39d86d76", 5877935,
 					"data_sd.dcp", "29f4856cc1514bdb86d3b19a39d86d76", 5877935), Common::ES_ESP, ADGF_UNSTABLE | GF_IGNORE_HD_FILES, WME_LITE),
 
-	// J.U.L.I.A.: Among the Stars (Full HD Version) (GoG) (Spanish fanmade translation)
+	// J.U.L.I.A.: Among the Stars (Full HD Version) (GOG) (Spanish fanmade translation)
 	// NOTE: This is a 2.5D game that is out of ScummVM scope
-	WME_WINENTRY("juliastars", "Full HD Version",
+	WME_WINENTRY("juliastars", "Full HD Version/GOG",
 		WME_ENTRY2s("data_hd.dcp", "29f4856cc1514bdb86d3b19a39d86d76", 5877935,
 					"data_hd.dcp", "29f4856cc1514bdb86d3b19a39d86d76", 5877935), Common::ES_ESP, ADGF_UNSTABLE | GF_IGNORE_SD_FILES, WME_LITE),
 
 	// J.U.L.I.A.: Untold (Steam, January 2016)
-	WME_WINENTRY("juliauntold", "",
+	WME_WINENTRY("juliauntold", "Steam",
 		WME_ENTRY1s("data.dcp", "fe995e26253f6e0a925dd7850fce17a9", 26459827), Common::EN_ANY, ADGF_UNSTABLE, WME_LITE),
 
-	// J.U.L.I.A.: Untold (GoG)
-	WME_WINENTRY("juliauntold", "",
+	// J.U.L.I.A.: Untold (GOG)
+	WME_WINENTRY("juliauntold", "GOG",
 		WME_ENTRY1s("data.dcp", "b0aefd82647a26425fe3ee21aabb6283", 26462676), Common::EN_ANY, ADGF_UNSTABLE, WME_LITE),
 
 	// K'NOSSOS


Commit: 2e8c064186c96642b3a1d8fc8afc823558586d44
    https://github.com/scummvm/scummvm/commit/2e8c064186c96642b3a1d8fc8afc823558586d44
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-04-29T10:31:36+02:00

Commit Message:
WINTERMUTE: Add known Steam achievements lists

Changed paths:
  A engines/wintermute/achievements_tables.h
    engines/wintermute/detection.cpp


diff --git a/engines/wintermute/achievements_tables.h b/engines/wintermute/achievements_tables.h
new file mode 100644
index 0000000000..3460eea419
--- /dev/null
+++ b/engines/wintermute/achievements_tables.h
@@ -0,0 +1,422 @@
+/* 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.
+ *
+ */
+
+namespace Wintermute {
+
+struct AchievementDescriptionList {
+	const char *gameId;
+	Common::AchievementsPlatform platform;
+	const char *appId;
+	const Common::AchievementDescription descriptions[64];
+};
+
+#define ACHIEVEMENT_SIMPLE_ENTRY(id, title, comment) {id, false, title, comment}
+#define ACHIEVEMENT_NODESC_ENTRY(id, title) {id, false, title, ""}
+#define ACHIEVEMENT_HIDDEN_ENTRY(id, title) {id, true, title, ""}
+#define ACHIEVEMENTS_LISTEND {0,0,0,0}
+
+static const AchievementDescriptionList achievementDescriptionList[] = {
+	{
+		"juliastars",
+		Common::GALAXY_ACHIEVEMENTS,
+		"48891696681534931",
+		{
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_LAND", "Good morning Xenophon!", "You've managed to land on a planet."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_MIND", "Observant player", "You've obtained your first Mind'o'Matic."),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_JUNGLE", "Explorer"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_HACKER", "Hacker", "You have hacked into all datapads."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_MEMORY", "Sweet memories", "You have recovered some of J.U.L.I.A.'s erased memory clusters."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_TRAVEL", "Traveller", "You have visited all the planets."),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_LUDITE", "Luddite"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_SCIENTIST", "Real scientist", "You've analyzed every single object in the game."),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_PLAT1", "Pacifist"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_PLAT2", "Science over all"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_PLAT3", "Apathy"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_FIRST", "First contact", "You encountered your first sentient extraterrestrial being."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_UPGRADE", "Constructor Jr.", "You built your first upgrade."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_MEGABOT", "Megabot", "You've fully upgraded Mobot."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_REPAIR", "Plumber", "You repaired the probe. The result is that you won't probably die."),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_XIR1", "Deadly Xir"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_XIR2", "Xir Destroyer"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_XIR3", "Xir the Invincible"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_XIR4", "Jaeger"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_SCHI", "Dreamer"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_NIBIRU", "Artificial planet"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_FULLMIND", "Great mind", "You solved all Mind'o'Matics."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_COMPL", "Completist", "You have completed everything, the game had to offer."),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_END1", "Homesick"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_END2", "Adventurous"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_TRAPPER", "Trapper"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_DECRYPT", "Cryptoanalyst"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_CREDITS", "Voyeur"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_SCAN", "Methodical", "You scanned all the planets."),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_CORDES", "Unexpected visitor"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_START", "Untold: Hungry for more?"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_BLUE", "Untold: Blue solved"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_RED", "Untold: Red solved"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_PURPLE", "Untold: Purple solved"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_GREEN", "Untold: Green solved"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_YELLOW", "Untold: Yellow solved"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_WIRELESS", "Untold: Go wireless"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_BLINDER", "Untold: Blinder"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_AMPLIFIER", "Untold: Amplifier"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_FINISHED", "Untold: You know the story"),
+			ACHIEVEMENTS_LISTEND
+		}
+	},
+
+	{
+		"juliastars",
+		Common::STEAM_ACHIEVEMENTS,
+		"257690",
+		{
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_LAND", "Good morning Xenophon!", "You've managed to land on a planet."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_MIND", "Observant player", "You've obtained your first Mind'o'Matic."),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_JUNGLE", "Explorer"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_HACKER", "Hacker", "You have hacked into all datapads."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_MEMORY", "Sweet memories", "You have recovered some of J.U.L.I.A.'s erased memory clusters."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_TRAVEL", "Traveller", "You have visited all the planets."),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_LUDITE", "Luddite"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_SCIENTIST", "Real scientist", "You've analyzed every single object in the game."),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_PLAT1", "Pacifist"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_PLAT2", "Science over all"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_PLAT3", "Apathy"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_FIRST", "First contact", "You encountered your first sentient extraterrestrial being."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_UPGRADE", "Constructor Jr.", "You built your first upgrade."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_MEGABOT", "Megabot", "You've fully upgraded Mobot."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_REPAIR", "Plumber", "You repaired the probe. The result is that you won't probably die."),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_XIR1", "Deadly Xir"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_XIR2", "Xir Destroyer"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_XIR3", "Xir the Invincible"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_XIR4", "Jaeger"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_SCHI", "Dreamer"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_NIBIRU", "Artificial planet"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_FULLMIND", "Great mind", "You solved all Mind'o'Matics."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_COMPL", "Completist", "You have completed everything, the game had to offer."),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_END1", "Homesick"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_END2", "Adventurous"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_TRAPPER", "Trapper"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_DECRYPT", "Cryptoanalyst"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_CREDITS", "Voyeur"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHI_SCAN", "Methodical", "You scanned all the planets."),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_CORDES", "Unexpected visitor"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_START", "Untold: Hungry for more?"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_BLUE", "Untold: Blue solved"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_RED", "Untold: Red solved"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_PURPLE", "Untold: Purple solved"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_GREEN", "Untold: Green solved"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_YELLOW", "Untold: Yellow solved"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_WIRELESS", "Untold: Go wireless"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_BLINDER", "Untold: Blinder"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_AMPLIFIER", "Untold: Amplifier"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHI_UNT_FINISHED", "Untold: You know the story"),
+			ACHIEVEMENTS_LISTEND
+		}
+	},
+
+	{
+		"reversion1",
+		Common::STEAM_ACHIEVEMENTS,
+		"270570",
+		{
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_INTRODUCCION", "Introduction", "Start a new game"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_HABLAR_CON_CHICA_ANTES_DE_DARLE_LA_FOTO", "Lady Killer", "Talk to the girl"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_SEDANTE", "Sweet Dreams"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_GUARDIA_ENCINTADO", "The Caterpillar"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_PALO_GUARDIA", "Big Stick", "Grab the baseball bat"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_INSISTENTE", "Nuisance guy"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_LLAVE_DEPOSITO", "GateKeeper"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_HACER_FUEGO", "Incendiary"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_DESMAYAR_GUARDIA_MATAFUEGOS", "Off down!"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_ENGANCHA_SOGA", "Perfect escape"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_CHISTOSO", "Funny Man", "Read all the jokes in the graffiti"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_HABLAR_RATA", "The Piper", "Hypnotize a rat"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_TERMINAR_JUEGO", "The Escapist", "Escape from the hospital and finish the game"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_TIMING", "Marathon Runner", "Finish the game in less than 4 hours"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_TERMINAR_SIN_PISTAS", "The Riddle", "Finish the game without using the hint system"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_GANAR_2_VECES", "The perfect escapist", "Finish the game for a second time"),
+			ACHIEVEMENTS_LISTEND
+		}
+	},
+
+	{
+		"reversion2",
+		Common::STEAM_ACHIEVEMENTS,
+		"281060",
+		{
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_INTRODUCCION2", "Introduction", "Start a new game"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_PABLO", "Mystery man"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_ESTACIONES_SUBTE", "Subway Maraude", "Take a stroll through the subway"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_PUERTA_SECRETA", "Secret Door"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_BULLSEYE", "Bullseye", "Resolve the subway puzzle on your first attempt"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_MECANICO", "The Mechanic"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_ELECTRISISTA", "The Electrician"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_CARPINTERO", "The Carpenter"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_TOMB_RAIDER", "Tomb Raider"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_INFORMANTE", "The Informant"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_PASTELITO_EXPLOSIVO", "Exploding Candy"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_PASTELITO_SEDANTE", "Sleeping Candy"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_RECORDANDO", "Remembering"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_ESPANTA_MOSCAS", "Flier Shoosh"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_ESTUDIANTE", "The Student", "Visit the house of knowledge"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_ACOMODADOR", "Usher"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_BAJANDO_AGUA", "Lowering Water", "Find the right combination"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_PUERTA_LABORATORIO", "The final door"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_FINAL", "Winner", "Finish the game"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_CONOCEDOR_SUBTE", "Subway Erudite", "You know all the stations by heart"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_LADRON", "Thief"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_PALA_FRAGIL", "Broken Shovel", "You can't dig with a broken shovel"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_TIMING2", "Marathon Runner", "Finish the game in less than 4 hours"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_TERMINAR_SIN_PISTAS2", "Riddle Guy", "Finish the game without using the hint system"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACHIEVEMENT_GANAR_2_VECES2", "Double Winner", "Finish the game for a second time"),
+			ACHIEVEMENTS_LISTEND
+		}
+	},
+
+	{
+		"reversion3",
+		Common::STEAM_ACHIEVEMENTS,
+		"281080",
+		{
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_INTRODUCCION3", "Introduction"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_HISTORIA_VICTORIA", "The orphan"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_CUPIDO", "Cupid"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_BORRACHO", "Drinking buddy"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_OSO_PELUCHE", "Teddy"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_HIT_THOSE_MOLES_2", "The fast and the furious"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_HIT_THOSE_MOLES_5", "Addict"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_RATON_GOMA", "The elephant"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_MONO_ATACANDO", "Don't feed the animals"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_MONO_ASUSTADO", "The planet of the apes"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_RESCATE_PABLO", "Rescuing Pablo"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_HOME_SWEET_HOME", "Home sweet home"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_LOCKSMITH", "Locksmith"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_FLUX_CAPACITOR", "Back to the future"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_VICTORIA_OCUPADA", "A very busy girl"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_FOTO_FLORENCIA", "Where there was fire"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_CRYSTAL_DISC", "Things to remember"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_CENTRAL_COMUNICACIONES_SIN_CREDENCIAL_CORRECTA", "Admission rights"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_TANGO_CON_FLORENCIA", "To the rhythm of tango"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_TURISTA", "Tourist"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_TANGO01", "Presidential plane"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_PUERTO_MADERO_FLORENCIA", "Until death do us part"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_CASA_ROSADA_MAIN_GATE", "The main gate"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_PARTES_ESTABILIZADOR", "The Pulse Stabilizer"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_NICOLAS_TIENE_TODO", "Back to the past"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_VIRUS_INSTALADO", "Phone home"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_ATRAPADO", "This is going to leave a mark"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_ESCAPAMOS", "A new hope"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_ESCAPE_SERGIO", "No turning back"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_CHOCOLATE", "Condor Chocolate"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_ATRAPAMOS_SERGIO", "Evil always pays"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_SAN_MARTIN", "The Liberator"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_TIMING_R3", "Marathon Runner"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_TERMINAR_SIN_PISTAS_R3", "Riddle Guy"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_TERMINAR_JUEGO_R3", "Winner"),
+			ACHIEVEMENT_HIDDEN_ENTRY("ACHIEVEMENT_GANAR_2_VECES_R3", "Double Winner"),
+			ACHIEVEMENTS_LISTEND
+		}
+	},
+
+	{
+		"oknytt",
+		Common::STEAM_ACHIEVEMENTS,
+		"286320",
+		{
+			ACHIEVEMENT_SIMPLE_ENTRY("ach_chapter_1", "Awakening", "Finish chapter 1"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ach_chapter_2", "An extended hand", "Finish chapter 2"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ach_chapter_2_boss", "Into the darkness", "Escape the eyrie"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ach_chapter_3", "Beneath the surface", "Finish chapter 3"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ach_chapter_4", "A winding path", "Finish chapter 4"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ach_chapter_5", "Gate of promises", "Finish chapter 5"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ach_chapter_5_boss", "Dawn", "Escape the cavern"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ach_lore_library", "Folklorist", "Complete the lore library"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ach_grave", "A final resting place", "Find the nattramn's grave"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ach_mystery_carving", "Mystery carving", "It's a secret to everybody"),
+			ACHIEVEMENTS_LISTEND
+		}
+	},
+
+	{
+		"thelostcrowngha",
+		Common::STEAM_ACHIEVEMENTS,
+		"291710",
+		{
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_HEDGE_WYTCH", "Hedge Wych", "Pick all available plants and flowers in the country lane."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_GOOD_LISTENER", "Good Listener", "Listen to the story on the Harbour Cottage telephone every day or night."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_FEARLESS", "Ghostbuster", "Vanquish the train tracks ghosts on the first attempt."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_GRAVE_DWELLER", "Grave Dweller", "Defeat the Darkness on the first attempt at Northfield."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_CAIRANS_FRIEND", "My Porcine Friend", "Feed Cairan the pig over 20 times."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_SWOT", "Swot", "Thoroughly explore the Saxton Museum."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_FILM_BUFF", "Film Buff", "Watch the films in Saxton Museum in their entirety."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_BOOKWORM", "Bookworm", "Read the books in Saxton Museum's Library and Celtic Corner."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_DETECTIVE", "True Detective", "Study all of the photographs on the wall in the Nightmare Room."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_LOBSTER_POTTY", "Lobster Potty", "Visit the lobster in The Bear."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_CAT_WATCHER", "Cat Watcher", "Provide Cat Watch with the names of 6 Saxton citizens."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_CRIME_LINE", "Saxton Sherlock", "Successfully identify the Saxton Skelton."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_PUNCH_JUDY_FAN", "That's the way to do it", "Keep watching the Punch and Judy show on Saxton Shore."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_RETRO_HORROR", "Retro Horror", "Travel on the Ghost Train 5 times."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_LUCKY_DIPPER", "Lucky Dipper", "See all items in the Lucky Dip."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_ENVIRONMENTALIST", "Environmentalist", "Photograph the rare Natterjack Toad."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_TWITCHER", "Bird Watcher", "Successfully photograph the Heron in Saxon Fens."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_CAT_SNAPPER", "Cat Snapper", "Photograph Mr Tibbs at Ulcombe."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_WE_THREE_KINGS", "We Three Kings", "Successfully photograph the statue of the three Saxon Kings."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_SAXTON_SNAPPER", "Paparazzi", "Win 1st place in the Saxton Snappers photography competition."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_EVP_MASTER", "Spirit Voices", "Collected all EVP's in the game."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_GHOST_PHOTOGRAPHER", "Phantom Photomaster", "Capture all possible Ghost Photos in the game."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_PEOPLE_PERSON", "Name Dropper", "Name all the figures seen in Ganwulfs tomb."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_ENVIRONMETER", "Ghosthunter", "Detect over 20 paranormal events in Harbour Cottage on the Environmeter."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_TO_THE_FUTURE", "To The Future", "Complete the Game."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_WARNING_CURIOUS", "A Warning to the Curious", "Listen to All of Hardachre's dire warnings."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_MIRROR_MIRROR", "Mirror Mirror", "Successfully call up the ghost in the Mirror."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_IN_DEEP", "Holistic Detective", "Study the documents and photos stolen from Hadden."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_CHECK_IN", "Home Sweet Home", "Find new accommodation in Saxton."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_SPY_GLASS", "Spy Glass", "Use the Telescope on May Day to see All views from the Little Lighthouse."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_ISOLATION", "Intrinsic Isolation", "Call out to sea more than once in the Fens."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_UNDERCURRENTS", "Undying Undercurrents", "Fix the warning sign near the Fenland Eye."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_CHATTER_BOX", "Chatter Box", "Fully talk with Nanny Noah on Saxton Shore."),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_NARCISSIST", "Narcissist", "Look in the Harbour Cottage mirror 5 times on Day 1"),
+			ACHIEVEMENTS_LISTEND
+		}
+	},
+
+	{
+		"corrosion",
+		Common::STEAM_ACHIEVEMENTS,
+		"349140",
+		{
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_0", "Cadet"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_1", "Recruit Officer"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_2", "Police Officer"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_3", "Investigator"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_4", "Detective 3rd Grade"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_5", "Detective 2nd Grade"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_6", "Detective 1st Grade"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_7", "Specialist"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_8", "Sergeant"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_9", "Lieutenant"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_10", "Captain"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_11", "Deputy Inspector"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_12", "Inspector"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_13", "Deputy Chief"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_14", "Assistant Chief"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_15", "Chief"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_16", "Deputy Commissioner"),
+			ACHIEVEMENT_NODESC_ENTRY("corrosion_achievement_17", "Commissioner"),
+			ACHIEVEMENTS_LISTEND
+		}
+	},
+
+	{
+		"alphapolaris",
+		Common::STEAM_ACHIEVEMENTS,
+		"405780",
+		{
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_POLARBEAR", "Vetenarian", "Treat a polar bear"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_DAY1", "A Day in the Arctic", "Survive the first day"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_SANDWICH", "Munchies", "Observe a nourishing treat"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_NOVA_TALK", "A Shoulder to Lean on", "Check on Nova in the first evening"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_THE_END", "The End", "Finish the game"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_BRA", "True Gentleman", "Discover something intimate"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_BOMBE_PERFECT", "Chef de Cuisine", "Create a perfect Bombe Alaska"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_BOMBE_OK", "Sous-Chef", "Create an OK Bombe Alaska"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_BOMBE_BAD", "Butcher", "Create a lousy Bombe Alaska"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_BOMBE_GASOLINE", "Chef le Octane", "Create a Bombe Alaska with gasoline"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_MCGUYVER", "You are not MacGyver", "Use the multitool way too much"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_SHOOTBLANKS", "Shootin' Blanks", "Jokingly try to shoot Tully"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_FRIEND_OF_THE_YEAR", "Friend of the Year", "Try to shoot Tully"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_TRIANGULATE", "Everyday I'm Calculatin'", "Successfully use triangulation on the first try"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_WEATHERMAN", "Weatherman", "Always check the temperature first thing in the morning"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_POTTYMOUTH", "Potty Mouth", "Use parser impropriately"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_GENERATOR", "Very Strong With Machines", "Start the generator on the first try"),
+			ACHIEVEMENT_SIMPLE_ENTRY("ACH_PARSER", "Parser Hero", "Make no mistakes in any of the parser puzzles"),
+			ACHIEVEMENTS_LISTEND
+		}
+	},
+
+	{
+		"drdoylemotch",
+		Common::STEAM_ACHIEVEMENTS,
+		"574420",
+		{
+			ACHIEVEMENT_NODESC_ENTRY("ACT_1", "Act 1 Completed"),
+			ACHIEVEMENT_NODESC_ENTRY("ACT_2", "Act 2 Completed"),
+			ACHIEVEMENT_NODESC_ENTRY("ACT_3", "Act 3 Completed"),
+			ACHIEVEMENT_NODESC_ENTRY("ACT_4", "Act 4 Completed"),
+			ACHIEVEMENT_NODESC_ENTRY("ACT_5", "Act 5 Completed"),
+			ACHIEVEMENT_NODESC_ENTRY("CHAPMANS_LODGINGS", "The Missing Tenant"),
+			ACHIEVEMENT_NODESC_ENTRY("CONSTABULARY", "The Borough's Finest"),
+			ACHIEVEMENT_NODESC_ENTRY("CRIME_SCENE", "An Ugly Beating"),
+			ACHIEVEMENT_NODESC_ENTRY("FEATHERSTONE", "A Walk To The Shops"),
+			ACHIEVEMENT_NODESC_ENTRY("GRAND_HOTEL", "Luxurious Stay"),
+			ACHIEVEMENT_NODESC_ENTRY("HAT_WORKSHOP", "Revelations"),
+			ACHIEVEMENT_NODESC_ENTRY("HOSPITAL", "Home Sweet Home"),
+			ACHIEVEMENT_NODESC_ENTRY("PEMBERTON_EMPORIUM", "\"Fair\" Exchanges"),
+			ACHIEVEMENT_NODESC_ENTRY("PRESCOTT_LANE", "Breaking & Entering"),
+			ACHIEVEMENT_NODESC_ENTRY("THE_MARQUIS", "Dinner Is Served"),
+			ACHIEVEMENT_NODESC_ENTRY("WHITEHAVEN_HALL", "A Grand E\"state\" Of Affairs"),
+			ACHIEVEMENT_NODESC_ENTRY("DUBOIS_SMALLTALK", "The Man In Black"),
+			ACHIEVEMENT_NODESC_ENTRY("FEATHERSTONE_SMALLTALK", "Suited With Enthusiasm"),
+			ACHIEVEMENT_NODESC_ENTRY("HOBBS_SMALLTALK", "Gardening & Nasty Quarrels"),
+			ACHIEVEMENT_NODESC_ENTRY("INSPECTOR_SMALLTALK", "Friends In High Places"),
+			ACHIEVEMENT_NODESC_ENTRY("SHAW_SMALLTALK", "The Timid Suspect"),
+			ACHIEVEMENT_NODESC_ENTRY("LAWSON_SMALLTALK", "A Lady's Whims"),
+			ACHIEVEMENT_NODESC_ENTRY("MAID_SMALLTALK", "A Maid's Sadness"),
+			ACHIEVEMENT_NODESC_ENTRY("GIBBS_SMALLTALK", "The Landlady's Avarice"),
+			ACHIEVEMENT_NODESC_ENTRY("PIKE_SMALLTALK", "An Obstinate 'Old Dear'"),
+			ACHIEVEMENT_NODESC_ENTRY("PEMBERTON_SMALLTALK", "Shady Dealings"),
+			ACHIEVEMENT_NODESC_ENTRY("ROBERT_SMALLTALK", "Eager To Serve"),
+			ACHIEVEMENT_NODESC_ENTRY("1919_POISONING_CASE", "Solved The 1919 Case"),
+			ACHIEVEMENT_NODESC_ENTRY("ASHBERG_HEIST", "Solved The Ashberg Heist"),
+			ACHIEVEMENT_NODESC_ENTRY("CLOCHE_HAT", "Solved The Mystery of the Cloche Hat"),
+			ACHIEVEMENT_NODESC_ENTRY("BODYSLASHER", "Bodyslasher"),
+			ACHIEVEMENT_NODESC_ENTRY("CHEMISTRY_101", "Chemistry 101"),
+			ACHIEVEMENT_NODESC_ENTRY("BOOKWORM", "Bookworm"),
+			ACHIEVEMENT_NODESC_ENTRY("TABLE_FOR_ONE", "Table for one"),
+			ACHIEVEMENT_NODESC_ENTRY("COUPLES_CONSULTANT", "Couples consultant"),
+			ACHIEVEMENTS_LISTEND
+		}
+	},
+
+	{
+		"erinmyers",
+		Common::STEAM_ACHIEVEMENTS,
+		"1064660",
+		{
+			ACHIEVEMENT_SIMPLE_ENTRY("erin_myers_achieve_art", "Not An Art Lover", "More important things to be doing."),
+			ACHIEVEMENT_SIMPLE_ENTRY("erin_myers_achieve_chalk", "Chalk It Up To Experience", "A strange obsession with the chalkboard."),
+			ACHIEVEMENT_SIMPLE_ENTRY("erin_myers_achieve_coffee", "Coffee Connoisseur", "Coffee is nice. But not that coffee."),
+			ACHIEVEMENT_SIMPLE_ENTRY("erin_myers_achieve_hammer", "Hammering The Point", "Don't break down."),
+			ACHIEVEMENT_SIMPLE_ENTRY("erin_myers_achieve_wait", "Try Try Again", "Don't give up."),
+			ACHIEVEMENTS_LISTEND
+		}
+	},
+	
+	{0, Common::UNK_ACHIEVEMENTS, 0, {ACHIEVEMENTS_LISTEND}}
+};
+
+} // End of namespace Wintermute
+
+#undef ACHIEVEMENT_SIMPLE_ENTRY
+#undef ACHIEVEMENT_NODESC_ENTRY
+#undef ACHIEVEMENT_HIDDEN_ENTRY
+#undef ACHIEVEMENTS_LISTEND
diff --git a/engines/wintermute/detection.cpp b/engines/wintermute/detection.cpp
index 4f888fd3f7..8ba132fa0e 100644
--- a/engines/wintermute/detection.cpp
+++ b/engines/wintermute/detection.cpp
@@ -29,6 +29,7 @@
 #include "backends/keymapper/keymapper.h"
 #include "backends/keymapper/standard-actions.h"
 
+#include "common/achievements.h"
 #include "common/config-manager.h"
 #include "common/error.h"
 #include "common/fs.h"
@@ -37,6 +38,7 @@
 
 #include "engines/metaengine.h"
 
+#include "engines/wintermute/achievements_tables.h"
 #include "engines/wintermute/detection_tables.h"
 
 namespace Wintermute {
@@ -215,6 +217,34 @@ public:
 		return retVal;
 	}
 
+	const Common::AchievementsInfo getAchievementsInfo(const Common::String &target) const override {
+		Common::String gameId = ConfMan.get("gameid", target);
+
+		// HACK: "juliauntold" is a DLC of "juliastars", they share the same achievements list
+		if (gameId == "juliauntold") {
+			gameId = "juliastars";
+		}
+
+		Common::AchievementsPlatform platform = Common::STEAM_ACHIEVEMENTS;
+		if (ConfMan.get("extra", target).contains("GOG")) {
+			platform = Common::GALAXY_ACHIEVEMENTS;
+		}
+
+		// "(gameId, platform) -> result" search
+		Common::AchievementsInfo result;
+		for (const AchievementDescriptionList *i = achievementDescriptionList; i->gameId; i++) {
+			if (i->gameId == gameId && i->platform == platform) {
+				result.platform = i->platform;
+				result.appId = i->appId;
+				for (const Common::AchievementDescription *it = i->descriptions; it->id; it++) {
+					result.descriptions.push_back(*it);
+				}
+				break;
+			}
+		}
+		return result;
+	}
+	
 	Common::KeymapArray initKeymaps(const char *target) const override {
 		using namespace Common;
 


Commit: 7ff02045c4776d7512bfc83887e5e4e2464990d9
    https://github.com/scummvm/scummvm/commit/7ff02045c4776d7512bfc83887e5e4e2464990d9
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-04-29T10:31:36+02:00

Commit Message:
WINTERMUTE: Implement Steam & Galaxy plugins

Changed paths:
  A engines/wintermute/base/scriptables/script_ext_steam_api.cpp
  A engines/wintermute/base/scriptables/script_ext_steam_api.h
  A engines/wintermute/base/scriptables/script_ext_wme_galaxy_api.cpp
  A engines/wintermute/base/scriptables/script_ext_wme_galaxy_api.h
    engines/wintermute/base/base_game.cpp
    engines/wintermute/base/base_scriptable.h
    engines/wintermute/module.mk
    engines/wintermute/persistent.cpp


diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index c69356fb3b..668351f18d 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -3146,6 +3146,26 @@ bool BaseGame::externalCall(ScScript *script, ScStack *stack, ScStack *thisStack
 		stack->pushNULL();
 	}
 
+	//////////////////////////////////////////////////////////////////////////
+	// SteamAPI
+	//////////////////////////////////////////////////////////////////////////
+	else if (strcmp(name, "SteamAPI") == 0) {
+		thisObj = thisStack->getTop();
+
+		thisObj->setNative(makeSXSteamAPI(_gameRef,  stack));
+		stack->pushNULL();
+	}
+
+	//////////////////////////////////////////////////////////////////////////
+	// WMEGalaxyAPI
+	//////////////////////////////////////////////////////////////////////////
+	else if (strcmp(name, "WMEGalaxyAPI") == 0) {
+		thisObj = thisStack->getTop();
+
+		thisObj->setNative(makeSXWMEGalaxyAPI(_gameRef,  stack));
+		stack->pushNULL();
+	}
+
 	//////////////////////////////////////////////////////////////////////////
 	// Object
 	//////////////////////////////////////////////////////////////////////////
diff --git a/engines/wintermute/base/base_scriptable.h b/engines/wintermute/base/base_scriptable.h
index ef61d7c7af..02ea854d3a 100644
--- a/engines/wintermute/base/base_scriptable.h
+++ b/engines/wintermute/base/base_scriptable.h
@@ -79,6 +79,8 @@ BaseScriptable *makeSXMemBuffer(BaseGame *inGame, ScStack *stack);
 BaseScriptable *makeSXObject(BaseGame *inGame, ScStack *stack);
 BaseScriptable *makeSXStore(BaseGame *inGame);
 BaseScriptable *makeSXString(BaseGame *inGame, ScStack *stack);
+BaseScriptable *makeSXSteamAPI(BaseGame *inGame, ScStack *stack);
+BaseScriptable *makeSXWMEGalaxyAPI(BaseGame *inGame, ScStack *stack);
 
 } // End of namespace Wintermute
 
diff --git a/engines/wintermute/base/scriptables/script_ext_steam_api.cpp b/engines/wintermute/base/scriptables/script_ext_steam_api.cpp
new file mode 100644
index 0000000000..01bb937879
--- /dev/null
+++ b/engines/wintermute/base/scriptables/script_ext_steam_api.cpp
@@ -0,0 +1,258 @@
+/* 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.
+ *
+ */
+
+/*
+ * This file is based on WME Steam Plugin.
+ * https://bitbucket.org/MnemonicWME/wme_steam_plugin
+ * Copyright (c) 2013 Jan Nedoma
+ */
+
+#include "engines/metaengine.h"
+#include "engines/wintermute/wintermute.h"
+#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_engine.h"
+#include "engines/wintermute/base/scriptables/script_stack.h"
+#include "engines/wintermute/base/scriptables/script_value.h"
+#include "engines/wintermute/base/scriptables/script_ext_steam_api.h"
+
+namespace Wintermute {
+
+IMPLEMENT_PERSISTENT(SXSteamAPI, false)
+
+BaseScriptable *makeSXSteamAPI(BaseGame *inGame, ScStack *stack) {
+	return new SXSteamAPI(inGame,  stack);
+}
+
+//////////////////////////////////////////////////////////////////////////
+SXSteamAPI::SXSteamAPI(BaseGame *inGame, ScStack *stack) : BaseScriptable(inGame) {
+	stack->correctParams(0);
+	init();
+}
+
+//////////////////////////////////////////////////////////////////////////
+void SXSteamAPI::init() {
+	MetaEngine &meta = ((WintermuteEngine *)g_engine)->getMetaEngine();
+	const Common::String target = BaseEngine::instance().getGameTargetName();
+	_achievementsInfo = meta.getAchievementsInfo(target);
+
+	if (!_achievementsInfo.appId.empty()) {
+		AchMan.setActiveDomain(Common::STEAM_ACHIEVEMENTS, _achievementsInfo.appId);
+	} else {
+		warning("Unknown game accessing SteamAPI. All achievements will be ignored.");
+		AchMan.unsetActiveDomain();
+	}
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+SXSteamAPI::~SXSteamAPI() {
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+const char *SXSteamAPI::scToString() {
+	return "[steamapi object]";
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+bool SXSteamAPI::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) {
+	//////////////////////////////////////////////////////////////////////////
+	// RequestStats()
+	// There are currently no known games that are using this
+	// So, all the initialization should be done at the constructor instead
+	//////////////////////////////////////////////////////////////////////////
+	if (strcmp(name, "RequestStats") == 0) {
+		stack->correctParams(0);
+		stack->pushBool(AchMan.isReady());
+		return STATUS_OK;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// SetAchievement(string id)
+	//////////////////////////////////////////////////////////////////////////
+	else if (strcmp(name, "SetAchievement") == 0) {
+		stack->correctParams(1);
+		const char *id = stack->pop()->getString();
+
+		Common::String msg = id;
+		for (uint32 i = 0; i < _achievementsInfo.descriptions.size(); i++) {
+			if (strcmp(_achievementsInfo.descriptions[i].id, id) == 0) {
+				msg = _achievementsInfo.descriptions[i].title;
+			}
+		}
+
+		stack->pushBool(AchMan.setAchievement(id, msg));
+		return STATUS_OK;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// IsAchieved(string id)
+	//////////////////////////////////////////////////////////////////////////
+	else if (strcmp(name, "IsAchieved") == 0) {
+		stack->correctParams(1);
+		const char *id = stack->pop()->getString();
+		stack->pushBool(AchMan.isAchieved(id));
+		return STATUS_OK;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// ClearAchievement(string id)
+	//////////////////////////////////////////////////////////////////////////
+	else if (strcmp(name, "ClearAchievement") == 0) {
+		stack->correctParams(1);
+		const char *id = stack->pop()->getString();
+		stack->pushBool(AchMan.clearAchievement(id));
+		return STATUS_OK;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// GetAchievementId(int index)
+	//////////////////////////////////////////////////////////////////////////
+	else if (strcmp(name, "GetAchievementId") == 0) {
+		stack->correctParams(1);
+		uint32 index = (uint32) stack->pop()->getInt();
+
+		if (index < _achievementsInfo.descriptions.size()) {
+			stack->pushString(_achievementsInfo.descriptions[index].id);
+		} else {
+			stack->pushNULL();
+		}
+
+		return STATUS_OK;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// SetStat(string id, int|float value)
+	//////////////////////////////////////////////////////////////////////////
+	else if (strcmp(name, "SetStat") == 0) {
+		stack->correctParams(2);
+		const char *id = stack->pop()->getString();
+		ScValue *val = stack->pop();
+
+		if (val->isFloat()) {
+			stack->pushBool(AchMan.setStatFloat(id, val->getFloat()));
+		} else {
+			stack->pushBool(AchMan.setStatInt(id, val->getInt()));
+		}
+
+		return STATUS_OK;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// GetStatInt(string id)
+	//////////////////////////////////////////////////////////////////////////
+	else if (strcmp(name, "GetStatInt") == 0) {
+		stack->correctParams(1);
+		const char *id = stack->pop()->getString();
+		stack->pushInt(AchMan.getStatInt(id));
+		return STATUS_OK;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// GetStatFloat(string id)
+	//////////////////////////////////////////////////////////////////////////
+	else if (strcmp(name, "GetStatFloat") == 0) {
+		stack->correctParams(1);
+		const char *id = stack->pop()->getString();
+		stack->pushFloat(AchMan.getStatFloat(id));
+		return STATUS_OK;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// ResetAllStats(bool includingAchievements)
+	//////////////////////////////////////////////////////////////////////////
+	else if (strcmp(name, "ResetAllStats") == 0) {
+		stack->correctParams(1);
+		bool includingAchievements = stack->pop()->getBool();
+
+		bool result = AchMan.resetAllStats();
+		if (includingAchievements) {
+			result = result && AchMan.resetAllAchievements();
+		}
+
+		stack->pushBool(result);
+		return STATUS_OK;
+	}
+
+	else {
+		return STATUS_FAILED;
+	}
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+ScValue *SXSteamAPI::scGetProperty(const Common::String &name) {
+	_scValue->setNULL();
+
+	//////////////////////////////////////////////////////////////////////////
+	// Type (RO)
+	//////////////////////////////////////////////////////////////////////////
+	if (name == "Type") {
+		_scValue->setString("steamapi");
+		return _scValue;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// SteamAvailable (RO)
+	//////////////////////////////////////////////////////////////////////////
+	else if (name == "SteamAvailable") {
+		_scValue->setBool(AchMan.isReady());
+		return _scValue;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// StatsAvailable (RO)
+	//////////////////////////////////////////////////////////////////////////
+	else if (name == "StatsAvailable") {
+		_scValue->setBool(AchMan.isReady());
+		return _scValue;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// NumAchievements (RO)
+	//////////////////////////////////////////////////////////////////////////
+	else if (name == "NumAchievements") {
+		_scValue->setInt(_achievementsInfo.descriptions.size());
+		return _scValue;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// AppId (RO)
+	//////////////////////////////////////////////////////////////////////////
+	else if (name == "AppId") {
+		_scValue->setInt(atoi(_achievementsInfo.appId.c_str()));
+		return _scValue;
+	}
+
+	else {
+		return _scValue;
+	}
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+bool SXSteamAPI::scSetProperty(const char *name, ScValue *value) {
+	return STATUS_FAILED;
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+bool SXSteamAPI::persist(BasePersistenceManager *persistMgr) {
+	BaseScriptable::persist(persistMgr);
+
+	if (!persistMgr->getIsSaving()) {
+		init();
+	}
+
+	return STATUS_OK;
+}
+
+} // End of namespace Wintermute
diff --git a/engines/wintermute/base/scriptables/script_ext_steam_api.h b/engines/wintermute/base/scriptables/script_ext_steam_api.h
new file mode 100644
index 0000000000..d09aecf406
--- /dev/null
+++ b/engines/wintermute/base/scriptables/script_ext_steam_api.h
@@ -0,0 +1,55 @@
+/* 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.
+ *
+ */
+
+/*
+ * This file is based on WME Lite.
+ * http://dead-code.org/redir.php?target=wmelite
+ * Copyright (c) 2011 Jan Nedoma
+ */
+
+#ifndef WINTERMUTE_SXSTEAMAPI_H
+#define WINTERMUTE_SXSTEAMAPI_H
+
+#include "common/achievements.h"
+#include "engines/wintermute/base/base_scriptable.h"
+
+namespace Wintermute {
+
+class SXSteamAPI : public BaseScriptable {
+public:
+	DECLARE_PERSISTENT(SXSteamAPI, BaseScriptable)
+	ScValue *scGetProperty(const Common::String &name) override;
+	bool scSetProperty(const char *name, ScValue *value) override;
+	bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+	const char *scToString() override;
+	SXSteamAPI(BaseGame *inGame, ScStack *stack);
+	~SXSteamAPI() override;
+
+private:
+	void init();
+
+	Common::AchievementsInfo _achievementsInfo;
+};
+
+} // End of namespace Wintermute
+
+#endif
diff --git a/engines/wintermute/base/scriptables/script_ext_wme_galaxy_api.cpp b/engines/wintermute/base/scriptables/script_ext_wme_galaxy_api.cpp
new file mode 100644
index 0000000000..5b9f3ee1cf
--- /dev/null
+++ b/engines/wintermute/base/scriptables/script_ext_wme_galaxy_api.cpp
@@ -0,0 +1,151 @@
+/* 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.
+ *
+ */
+
+/*
+ * This file is based on WME Lite.
+ * http://dead-code.org/redir.php?target=wmelite
+ * Copyright (c) 2011 Jan Nedoma
+ */
+
+#include "engines/metaengine.h"
+#include "engines/wintermute/wintermute.h"
+#include "engines/wintermute/base/base_game.h"
+#include "engines/wintermute/base/base_engine.h"
+#include "engines/wintermute/base/scriptables/script_stack.h"
+#include "engines/wintermute/base/scriptables/script_value.h"
+#include "engines/wintermute/base/scriptables/script_ext_wme_galaxy_api.h"
+
+namespace Wintermute {
+
+IMPLEMENT_PERSISTENT(SXWMEGalaxyAPI, false)
+
+BaseScriptable *makeSXWMEGalaxyAPI(BaseGame *inGame, ScStack *stack) {
+	return new SXWMEGalaxyAPI(inGame,  stack);
+}
+
+//////////////////////////////////////////////////////////////////////////
+SXWMEGalaxyAPI::SXWMEGalaxyAPI(BaseGame *inGame, ScStack *stack) : BaseScriptable(inGame) {
+	stack->correctParams(0);
+	init();
+}
+
+//////////////////////////////////////////////////////////////////////////
+void SXWMEGalaxyAPI::init() {
+	MetaEngine &meta = ((WintermuteEngine *)g_engine)->getMetaEngine();
+	const Common::String target = BaseEngine::instance().getGameTargetName();
+	_achievementsInfo = meta.getAchievementsInfo(target);
+
+	if (!_achievementsInfo.appId.empty()) {
+		AchMan.setActiveDomain(Common::GALAXY_ACHIEVEMENTS, _achievementsInfo.appId);
+	} else {
+		warning("Unknown game accessing WMEGalaxyAPI. All achievements will be ignored.");
+		AchMan.unsetActiveDomain();
+	}
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+SXWMEGalaxyAPI::~SXWMEGalaxyAPI() {
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+const char *SXWMEGalaxyAPI::scToString() {
+	return "[wmegalaxyapi object]";
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+bool SXWMEGalaxyAPI::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) {
+	//////////////////////////////////////////////////////////////////////////
+	// InitGalaxy()
+	// Initialization is already done at the constructor instead
+	//////////////////////////////////////////////////////////////////////////
+	if (strcmp(name, "InitGalaxy") == 0) {
+		stack->correctParams(2);
+		const char *clientId = stack->pop()->getString();
+		const char *clientSecret = stack->pop()->getString();
+		_gameRef->LOG(0, "InitGalaxy(%s, %s)", clientId, clientSecret);
+
+		stack->pushNULL();
+		return STATUS_OK;
+	}
+	//////////////////////////////////////////////////////////////////////////
+	// SetAchievement(string id)
+	//////////////////////////////////////////////////////////////////////////
+	else if (strcmp(name, "SetAchievement") == 0) {
+		stack->correctParams(1);
+		const char *id = stack->pop()->getString();
+
+		Common::String msg = id;
+		for (uint32 i = 0; i < _achievementsInfo.descriptions.size(); i++) {
+			if (strcmp(_achievementsInfo.descriptions[i].id, id) == 0) {
+				msg = _achievementsInfo.descriptions[i].title;
+			}
+		}
+
+		stack->pushBool(AchMan.setAchievement(id, msg));
+		return STATUS_OK;
+	}
+
+	else {
+		return STATUS_FAILED;
+	}
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+ScValue *SXWMEGalaxyAPI::scGetProperty(const Common::String &name) {
+	_scValue->setNULL();
+
+	//////////////////////////////////////////////////////////////////////////
+	// Type (RO)
+	//////////////////////////////////////////////////////////////////////////
+	if (name == "Type") {
+		_scValue->setString("wmegalaxyapi");
+		return _scValue;
+	}
+
+	else {
+		return _scValue;
+	}
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+bool SXWMEGalaxyAPI::scSetProperty(const char *name, ScValue *value) {
+	return STATUS_FAILED;
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+bool SXWMEGalaxyAPI::persist(BasePersistenceManager *persistMgr) {
+	BaseScriptable::persist(persistMgr);
+
+	if (!persistMgr->getIsSaving()) {
+		init();
+	}
+
+	return STATUS_OK;
+}
+
+} // End of namespace Wintermute
diff --git a/engines/wintermute/base/scriptables/script_ext_wme_galaxy_api.h b/engines/wintermute/base/scriptables/script_ext_wme_galaxy_api.h
new file mode 100644
index 0000000000..4d898ed225
--- /dev/null
+++ b/engines/wintermute/base/scriptables/script_ext_wme_galaxy_api.h
@@ -0,0 +1,55 @@
+/* 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.
+ *
+ */
+
+/*
+ * This file is based on WME Lite.
+ * http://dead-code.org/redir.php?target=wmelite
+ * Copyright (c) 2011 Jan Nedoma
+ */
+
+#ifndef WINTERMUTE_SXWMEGALAXYAPI_H
+#define WINTERMUTE_SXWMEGALAXYAPI_H
+
+#include "common/achievements.h"
+#include "engines/wintermute/base/base_scriptable.h"
+
+namespace Wintermute {
+
+class SXWMEGalaxyAPI : public BaseScriptable {
+public:
+	DECLARE_PERSISTENT(SXWMEGalaxyAPI, BaseScriptable)
+	ScValue *scGetProperty(const Common::String &name) override;
+	bool scSetProperty(const char *name, ScValue *value) override;
+	bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override;
+	const char *scToString() override;
+	SXWMEGalaxyAPI(BaseGame *inGame, ScStack *stack);
+	~SXWMEGalaxyAPI() override;
+
+private:
+	void init();
+
+	Common::AchievementsInfo _achievementsInfo;
+};
+
+} // End of namespace Wintermute
+
+#endif
diff --git a/engines/wintermute/module.mk b/engines/wintermute/module.mk
index 6dcaa3e828..e45703775a 100644
--- a/engines/wintermute/module.mk
+++ b/engines/wintermute/module.mk
@@ -41,6 +41,8 @@ MODULE_OBJS := \
 	base/scriptables/script_ext_object.o \
 	base/scriptables/script_ext_mem_buffer.o \
 	base/scriptables/script_ext_string.o \
+	base/scriptables/script_ext_steam_api.o \
+	base/scriptables/script_ext_wme_galaxy_api.o \
 	base/file/base_disk_file.o \
 	base/file/base_file.o \
 	base/file/base_file_entry.o \
diff --git a/engines/wintermute/persistent.cpp b/engines/wintermute/persistent.cpp
index af36ff49d2..23356ace9b 100644
--- a/engines/wintermute/persistent.cpp
+++ b/engines/wintermute/persistent.cpp
@@ -81,6 +81,8 @@
 #include "engines/wintermute/base/scriptables/script_ext_mem_buffer.h"
 #include "engines/wintermute/base/scriptables/script_ext_object.h"
 #include "engines/wintermute/base/scriptables/script_ext_string.h"
+#include "engines/wintermute/base/scriptables/script_ext_steam_api.h"
+#include "engines/wintermute/base/scriptables/script_ext_wme_galaxy_api.h"
 #include "engines/wintermute/ui/ui_button.h"
 #include "engines/wintermute/ui/ui_edit.h"
 #include "engines/wintermute/ui/ui_entity.h"
@@ -156,6 +158,8 @@ void SystemClassRegistry::registerClasses() {
 	REGISTER_CLASS(SXMemBuffer, false)
 	REGISTER_CLASS(SXObject, false)
 	REGISTER_CLASS(SXString, false)
+	REGISTER_CLASS(SXSteamAPI, false)
+	REGISTER_CLASS(SXWMEGalaxyAPI, false)
 
 	REGISTER_CLASS(UIButton, false)
 	REGISTER_CLASS(UIEdit, false)


Commit: 4a0cec37b69fe5594259ec3115e0e07e3481683d
    https://github.com/scummvm/scummvm/commit/4a0cec37b69fe5594259ec3115e0e07e3481683d
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-04-29T10:31:36+02:00

Commit Message:
WINTERMUTE: Move keymapper tables to separate file

Changed paths:
  A engines/wintermute/keymapper_tables.h
    engines/wintermute/detection.cpp


diff --git a/engines/wintermute/detection.cpp b/engines/wintermute/detection.cpp
index 8ba132fa0e..ebd5487973 100644
--- a/engines/wintermute/detection.cpp
+++ b/engines/wintermute/detection.cpp
@@ -25,10 +25,6 @@
 #include "engines/wintermute/game_description.h"
 #include "engines/wintermute/base/base_persistence_manager.h"
 
-#include "backends/keymapper/action.h"
-#include "backends/keymapper/keymapper.h"
-#include "backends/keymapper/standard-actions.h"
-
 #include "common/achievements.h"
 #include "common/config-manager.h"
 #include "common/error.h"
@@ -40,6 +36,7 @@
 
 #include "engines/wintermute/achievements_tables.h"
 #include "engines/wintermute/detection_tables.h"
+#include "engines/wintermute/keymapper_tables.h"
 
 namespace Wintermute {
 
@@ -246,38 +243,6 @@ public:
 	}
 	
 	Common::KeymapArray initKeymaps(const char *target) const override {
-		using namespace Common;
-
-		Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "wintermute", "Wintermute engine");
-
-		Action *act;
-
-		act = new Action("LCLK", _("Left Click"));
-		act->setLeftClickEvent();
-		act->addDefaultInputMapping("MOUSE_LEFT"); // original mouse
-		act->addDefaultInputMapping("JOY_A"); // extra joy
-		engineKeyMap->addAction(act);
-
-		act = new Action("RCLK", _("Right Click"));
-		act->setRightClickEvent();
-		act->addDefaultInputMapping("MOUSE_RIGHT"); // original mouse
-		act->addDefaultInputMapping("JOY_B"); // extra joy
-		engineKeyMap->addAction(act);
-
-		act = new Action("RETURN", _("Confirm"));
-		act->setKeyEvent(KeyState(KEYCODE_RETURN, ASCII_RETURN));
-		act->addDefaultInputMapping("RETURN"); // original keyboard
-		//TODO: extra joy control, e.g. "JOY_R+JOY_X"
-		engineKeyMap->addAction(act);
-
-		act = new Action("ESCAPE", _("Escape"));
-		act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
-		act->addDefaultInputMapping("ESCAPE"); // original keyboard
-		act->addDefaultInputMapping("JOY_X"); // extra joy
-		engineKeyMap->addAction(act);
-
-		Common::KeymapArray result = Keymap::arrayOf(engineKeyMap);
-
 		Common::String gameId = ConfMan.get("gameid", target);
 		const char *gameDescr = "Unknown WME game";
 		for (const PlainGameDescriptor *it = Wintermute::wintermuteGames; it->gameId ; it++ ) {
@@ -285,1408 +250,7 @@ public:
 				gameDescr = it->description;
 			}
 		}
-
-		if (gameId == "actualdest" ||
-			gameId == "artofmurder1" ||
-			gameId == "agustin" ||
-			gameId == "bickadoodle" ||
-			gameId == "bthreshold" ||
-			gameId == "colorsoncanvas" ||
-			gameId == "corrosion" ||
-			gameId == "deadcity" ||
-			gameId == "darkfallls" ||
-			gameId == "drbohus" ||
-			gameId == "dreaming" ||
-			gameId == "dreamscape" ||
-			gameId == "driller" ||
-			gameId == "everydaygray" ||
-			gameId == "findinghope" ||
-			gameId == "four" ||
-			gameId == "framed" ||
-			gameId == "hamlet" ||
-			gameId == "hor" ||
-			gameId == "juliauntold" ||
-			gameId == "lonelyrobot" ||
-			gameId == "machumayu" ||
-			gameId == "mirage" ||
-			gameId == "nighttrain" ||
-			gameId == "projectdoom" ||
-			gameId == "rosemary" ||
-			gameId == "satanandsons" ||
-			gameId == "sofiasdebt" ||
-			gameId == "spaceinvaders" ||
-			gameId == "spacemadness" ||
-			gameId == "tanya1" ||
-			gameId == "tanya2" ||
-			gameId == "theancientmark1" ||
-			gameId == "thebox" ||
-			gameId == "thekite" ||
-			gameId == "tradestory" ||
-			gameId == "wmedemo"
-		) {
-			return Keymap::arrayOf(engineKeyMap);
-		}
-
-		Keymap *gameKeyMap = new Keymap(Keymap::kKeymapTypeGame, gameId, gameDescr);
-
-		if (gameId == "dfafadventure" ||
-			gameId == "dreamcat" ||
-			gameId == "openquest"
-		) {
-			act = new Action("LOOK", _("Look At"));
-			act->setKeyEvent(KeyState(KEYCODE_l, 'l'));
-			act->addDefaultInputMapping("l"); // original keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("TALK", _("Talk to"));
-			act->setKeyEvent(KeyState(KEYCODE_t, 't'));
-			act->addDefaultInputMapping("t"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PICK", _("Pick up"));
-			act->setKeyEvent(KeyState(KEYCODE_p, 'p'));
-			act->addDefaultInputMapping("p"); // original keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("USE", _("Use"));
-			act->setKeyEvent(KeyState(KEYCODE_u, 'u'));
-			act->addDefaultInputMapping("u"); // original keyboard
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "basisoctavus" ||
-			gameId == "lovmamuta" ||
-			gameId == "wmedemo3d"
-		) {
-			act = new Action(kStandardActionMoveUp, _("Walk forward"));
-			act->setKeyEvent(KEYCODE_UP);
-			act->addDefaultInputMapping("UP"); // original keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveDown, _("Walk backward"));
-			act->setKeyEvent(KEYCODE_DOWN);
-			act->addDefaultInputMapping("DOWN"); // original keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveLeft, _("Turn left"));
-			act->setKeyEvent(KEYCODE_LEFT);
-			act->addDefaultInputMapping("LEFT"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveRight, _("Turn right"));
-			act->setKeyEvent(KEYCODE_RIGHT);
-			act->addDefaultInputMapping("RIGHT"); // original keyboard
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("GEOM", _("Show scene geometry"));
-			act->setKeyEvent(KEYCODE_F1);
-			act->addDefaultInputMapping("F1"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "5ld" ||
-			gameId == "projectjoe"
-		) {
-			act = new Action("PAGEUP", _("Previous page"));
-			act->setKeyEvent(KEYCODE_PAGEUP);
-			act->addDefaultInputMapping("PAGEUP"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PAGEDN", _("Next page"));
-			act->setKeyEvent(KEYCODE_PAGEDOWN);
-			act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "5ma" ||
-			gameId == "dirtysplit"
-		) {
-			act = new Action("PAGEUP", _("Previous page"));
-			act->setKeyEvent(KEYCODE_PAGEUP);
-			act->addDefaultInputMapping("PAGEUP"); // original keyboard
-			act->addDefaultInputMapping("LEFT"); // original keyboard for 5ma & dirtysplit
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PAGEDN", _("Next page"));
-			act->setKeyEvent(KEYCODE_PAGEDOWN);
-			act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
-			act->addDefaultInputMapping("RIGHT"); // original keyboard for 5ma & dirtysplit
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "chivalry" ||
-			gameId == "paintaria" ||
-			gameId == "pigeons" ||
-			gameId == "rhiannon" ||
-			gameId == "shinestar"
-		) {
-			act = new Action(kStandardActionSkip, _("Skip"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "drdoylemotch" ||
-			gameId == "kulivocko" ||
-			gameId == "rebeccacarlson1"
-		) {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "goldencalf" ||
-			gameId == "msos" ||
-			gameId == "one"
-		) {
-			act = new Action("INV", _("Show inventory"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "bookofgron") {
-			act = new Action("MCLK", _("Middle Click"));
-			act->setMiddleClickEvent();
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			engineKeyMap->addAction(act);
-		} else if (gameId == "alimardan1") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("GUIA", _("GUI variant A"));
-			act->setKeyEvent(KEYCODE_F10);
-			act->addDefaultInputMapping("F10"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("GUIB", _("GUI variant B"));
-			act->setKeyEvent(KEYCODE_F11);
-			act->addDefaultInputMapping("F11"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("WTF", _("???"));
-			act->setKeyEvent(KEYCODE_HOME);
-			act->addDefaultInputMapping("HOME"); // original keyboard
-			//TODO: extra joy control, e.g. "JOY_R+JOY_B"
-			gameKeyMap->addAction(act);
-		} else if (gameId == "alimardan2") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("GUIA", _("GUI variant A"));
-			act->setKeyEvent(KEYCODE_F10);
-			act->addDefaultInputMapping("F10"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("GUIB", _("GUI variant B"));
-			act->setKeyEvent(KEYCODE_F11);
-			act->addDefaultInputMapping("F11"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONEX", _("Phone cancel button"));
-			act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
-			act->addDefaultInputMapping("BACKSPACE"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONEU", _("Phone up button"));
-			act->setKeyEvent(KEYCODE_UP);
-			act->addDefaultInputMapping("UP"); // original keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONED", _("Phone down button"));
-			act->setKeyEvent(KEYCODE_DOWN);
-			act->addDefaultInputMapping("DOWN"); // original keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE0", _("Phone 0 button"));
-			act->setKeyEvent(KeyState(KEYCODE_0, '0'));
-			act->addDefaultInputMapping("0"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE1", _("Phone 1 button"));
-			act->setKeyEvent(KeyState(KEYCODE_1, '1'));
-			act->addDefaultInputMapping("1"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE2", _("Phone 2 button"));
-			act->setKeyEvent(KeyState(KEYCODE_2, '2'));
-			act->addDefaultInputMapping("2"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE3", _("Phone 3 button"));
-			act->setKeyEvent(KeyState(KEYCODE_3, '3'));
-			act->addDefaultInputMapping("3"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE4", _("Phone 4 button"));
-			act->setKeyEvent(KeyState(KEYCODE_4, '4'));
-			act->addDefaultInputMapping("4"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE5", _("Phone 5 button"));
-			act->setKeyEvent(KeyState(KEYCODE_5, '5'));
-			act->addDefaultInputMapping("5"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE6", _("Phone 6 button"));
-			act->setKeyEvent(KeyState(KEYCODE_6, '6'));
-			act->addDefaultInputMapping("6"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE7", _("Phone 7 button"));
-			act->setKeyEvent(KeyState(KEYCODE_7, '7'));
-			act->addDefaultInputMapping("7"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE8", _("Phone 8 button"));
-			act->setKeyEvent(KeyState(KEYCODE_8, '8'));
-			act->addDefaultInputMapping("8"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE9", _("Phone 9 button"));
-			act->setKeyEvent(KeyState(KEYCODE_9, '9'));
-			act->addDefaultInputMapping("9"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONEA", _("Phone * button"));
-			act->setKeyEvent(KeyState(KEYCODE_ASTERISK, '*'));
-			act->addDefaultInputMapping("ASTERISK"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONEH", _("Phone # button"));
-			act->setKeyEvent(KeyState(KEYCODE_HASH, '#'));
-			act->addDefaultInputMapping("HASH"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("WTF", _("???"));
-			act->setKeyEvent(KEYCODE_HOME);
-			act->addDefaultInputMapping("HOME"); // original keyboard
-			//TODO: extra joy control, e.g. "JOY_R+JOY_B"
-			gameKeyMap->addAction(act);
-		} else if (gameId == "alphapolaris") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("INV", _("Show inventory"));
-			act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
-			act->addDefaultInputMapping("i"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("HELP", _("Show help"));
-			act->setKeyEvent(KEYCODE_F1);
-			act->addDefaultInputMapping("F1"); // original keyboard
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLUP", _("Scroll up"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("PAGEUP"); // extra keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLDN", _("Scroll down"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			act->addDefaultInputMapping("PAGEDOWN"); // extra keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("GEOM", _("Show scene geometry"));
-			act->setKeyEvent(KeyState(KEYCODE_F2, 0, KBD_CTRL));
-			act->addDefaultInputMapping("C+F2"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("SHADOW", _("Change shadow type"));
-			act->setKeyEvent(KeyState(KEYCODE_F3, 0, KBD_CTRL));
-			act->addDefaultInputMapping("C+F3"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRS", _("Save screenshot"));
-			act->setKeyEvent(KeyState(KEYCODE_F5, 0, KBD_CTRL));
-			act->addDefaultInputMapping("C+F5"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("VOLMAX", _("Volume max"));
-			act->setKeyEvent(KeyState(KEYCODE_F6, 0, KBD_CTRL));
-			act->addDefaultInputMapping("C+F6"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("DBGCLI", _("Show debug parser"));
-			act->setKeyEvent(KeyState(KEYCODE_F7, 0, KBD_CTRL));
-			act->addDefaultInputMapping("C+F7"); // original keyboard
-			act->addDefaultInputMapping("C+F10"); // original keyboard
-			//TODO: extra joy control, e.g. "JOY_R+JOY_B"
-			gameKeyMap->addAction(act);
-
-			act = new Action("DBGTXT", _("Debug print"));
-			act->setKeyEvent(KeyState(KEYCODE_F8, 0, KBD_CTRL));
-			act->addDefaultInputMapping("C+F8"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("EXIT", _("Exit"));
-			act->setKeyEvent(KeyState(KEYCODE_F9, 0, KBD_CTRL));
-			act->addDefaultInputMapping("C+F9"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("LIGHT", _("Light helper window"));
-			act->setKeyEvent(KeyState(KEYCODE_F11, 0, KBD_CTRL));
-			act->addDefaultInputMapping("C+F11"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveUp, _("Walk forward"));
-			act->setKeyEvent(KEYCODE_UP);
-			act->addDefaultInputMapping("UP"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveDown, _("Walk backward"));
-			act->setKeyEvent(KEYCODE_DOWN);
-			act->addDefaultInputMapping("DOWN"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveLeft, _("Turn left"));
-			act->setKeyEvent(KEYCODE_LEFT);
-			act->addDefaultInputMapping("LEFT"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveRight, _("Turn right"));
-			act->setKeyEvent(KEYCODE_RIGHT);
-			act->addDefaultInputMapping("RIGHT"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("FASTU", _("Run forward"));
-			act->setKeyEvent(KeyState(KEYCODE_UP, 0, KBD_SHIFT));
-			act->addDefaultInputMapping("S+UP"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("FASTD", _("Run backward"));
-			act->setKeyEvent(KeyState(KEYCODE_DOWN, 0, KBD_SHIFT));
-			act->addDefaultInputMapping("S+DOWN"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("FASTL", _("Turn left fast"));
-			act->setKeyEvent(KeyState(KEYCODE_LEFT, 0, KBD_SHIFT));
-			act->addDefaultInputMapping("S+LEFT"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("FASTR", _("Turn right fast"));
-			act->setKeyEvent(KeyState(KEYCODE_RIGHT, 0, KBD_SHIFT));
-			act->addDefaultInputMapping("S+RIGHT"); // original keyboard
-			gameKeyMap->addAction(act);
-		} else if (gameId == "apeiron") {
-			act = new Action("BLUE", _("Show blueprint"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("WTF", _("???"));
-			act->setKeyEvent(KeyState(KEYCODE_n, 'n'));
-			act->addDefaultInputMapping("n"); // original keyboard
-			//TODO: extra joy control, e.g. "JOY_R+JOY_B"
-			gameKeyMap->addAction(act);
-		} else if (gameId == "carolreed4") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
-			act->addDefaultInputMapping("TAB"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("VOLMAX", _("Volume max"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("UP"); // extra keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("VOLOFF", _("Volume off"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			act->addDefaultInputMapping("DOWN"); // extra keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "erinmyers") {
-			act = new Action("GUIB", _("Change font size"));
-			act->setKeyEvent(KEYCODE_END);
-			act->addDefaultInputMapping("END"); // original keyboard
-			//TODO: extra joy control, e.g. "JOY_R+JOY_B"
-			gameKeyMap->addAction(act);
-		} else if (gameId == "escapemansion") {
-			act = new Action("WTF", _("???"));
-			act->setKeyEvent(KEYCODE_F1);
-			act->addDefaultInputMapping("F1"); // original keyboard
-			//TODO: extra joy control, e.g. "JOY_R+JOY_B"
-			gameKeyMap->addAction(act);
-
-			act = new Action("DBGTXT", _("Debug print"));
-			act->setKeyEvent(KEYCODE_F2);
-			act->addDefaultInputMapping("F2"); // original keyboard
-			gameKeyMap->addAction(act);
-		} else if (gameId == "facenoir") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KEYCODE_F1);
-			act->addDefaultInputMapping("F1"); // original keyboard
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("INV", _("Show inventory"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLUP", _("Scroll up"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("UP"); // extra keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLDN", _("Scroll down"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			act->addDefaultInputMapping("DOWN"); // extra keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "foxtail") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLUP", _("Scroll up"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("UP"); // original keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLDN", _("Scroll down"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			act->addDefaultInputMapping("DOWN"); // original keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PAGEUP", _("Previous page"));
-			act->setKeyEvent(KEYCODE_PAGEUP);
-			act->addDefaultInputMapping("LEFT"); // original keyboard
-			act->addDefaultInputMapping("PAGEUP"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PAGEDN", _("Next page"));
-			act->setKeyEvent(KEYCODE_PAGEDOWN);
-			act->addDefaultInputMapping("RIGHT"); // original keyboard
-			act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionSave, _("Save game"));
-			act->setKeyEvent(KEYCODE_F2);
-			act->addDefaultInputMapping("F2"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionLoad, _("Load game"));
-			act->setKeyEvent(KEYCODE_F3);
-			act->addDefaultInputMapping("F3"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("QSAVE", _("Quick save"));
-			act->setKeyEvent(KEYCODE_F5);
-			act->addDefaultInputMapping("F5"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("SPD1", _("Walking speed: Low"));
-			act->setKeyEvent(KEYCODE_F6);
-			act->addDefaultInputMapping("F6"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("SPD2", _("Walking speed: Medium"));
-			act->setKeyEvent(KEYCODE_F7);
-			act->addDefaultInputMapping("F7"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("SPD3", _("Walking speed: High"));
-			act->setKeyEvent(KEYCODE_F8);
-			act->addDefaultInputMapping("F8"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("QLOAD", _("Quick load"));
-			act->setKeyEvent(KEYCODE_F9);
-			act->addDefaultInputMapping("F9"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("NOWAIT", _("Cancel waiting"));
-			act->setKeyEvent(KEYCODE_F10);
-			act->addDefaultInputMapping("F10"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("CAPT", _("Toggle mouse capture"));
-			act->setKeyEvent(KEYCODE_F11);
-			act->addDefaultInputMapping("F11"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("HOME", _("First page"));
-			act->setKeyEvent(KEYCODE_HOME);
-			act->addDefaultInputMapping("HOME"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("END", _("Last page"));
-			act->setKeyEvent(KEYCODE_END);
-			act->addDefaultInputMapping("END"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			Common::String extra = ConfMan.get("extra", target);
-			if (extra.hasPrefix("1.2.230.") || extra.hasPrefix("1.2.304.") || extra.hasPrefix("1.2.362.")) {
-				act = new Action("SPDMAX", _("Walking speed: Ultra Super Mega Fast"));
-				act->setKeyEvent(KeyState(KEYCODE_s, 's', KBD_CTRL|KBD_ALT|KBD_SHIFT));
-				act->addDefaultInputMapping("C+A+S+s"); // original keyboard
-				//TODO: extra joy control, e.g. "JOY_R+JOY_A"
-				gameKeyMap->addAction(act);
-			}
-
-			if (extra.hasPrefix("1.2.362.")) {
-				act = new Action("WTF", _("???"));
-				act->setKeyEvent(KeyState(KEYCODE_z, 'z'));
-				act->addDefaultInputMapping("z"); // original keyboard
-				//TODO: extra joy control, e.g. "JOY_R+JOY_B"
-				gameKeyMap->addAction(act);
-			}
-		} else if (gameId == "ghostsheet") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
-			act->addDefaultInputMapping("TAB"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("ABLT1", _("Ability: Telekinesis"));
-			act->setKeyEvent(KEYCODE_F1);
-			act->addDefaultInputMapping("F1"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("ABLT2", _("Ability: Push"));
-			act->setKeyEvent(KEYCODE_F2);
-			act->addDefaultInputMapping("F2"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("ABLT3", _("Ability: Lightning"));
-			act->setKeyEvent(KEYCODE_F3);
-			act->addDefaultInputMapping("F3"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("ABLT4", _("Ability: Light"));
-			act->setKeyEvent(KEYCODE_F4);
-			act->addDefaultInputMapping("F4"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("ABLT5", _("Ability: Wind"));
-			act->setKeyEvent(KEYCODE_F5);
-			act->addDefaultInputMapping("F5"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("ABLT6", _("Ability: Sound"));
-			act->setKeyEvent(KEYCODE_F6);
-			act->addDefaultInputMapping("F6"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("ABLT7", _("Ability: Esence"));
-			act->setKeyEvent(KEYCODE_F7);
-			act->addDefaultInputMapping("F7"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("ABLT8", _("Ability: Exorcist"));
-			act->setKeyEvent(KEYCODE_F8);
-			act->addDefaultInputMapping("F8"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("SKIPMG", _("Skip minigame"));
-			act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
-			act->addDefaultInputMapping("BACKSPACE"); // original keyboard
-			//TODO: extra joy control, e.g. "JOY_R+JOY_B"
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRS", _("Save screenshot"));
-			act->setKeyEvent(KEYCODE_F10);
-			act->addDefaultInputMapping("F10"); // original keyboard
-			gameKeyMap->addAction(act);
-		} else if (gameId == "helga") {
-			act = new Action("PAGEUP", _("Previous page"));
-			act->setKeyEvent(KEYCODE_PAGEUP);
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("PAGEUP"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PAGEDN", _("Next page"));
-			act->setKeyEvent(KEYCODE_PAGEDOWN);
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONEX", _("Phone cancel button"));
-			act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
-			act->addDefaultInputMapping("BACKSPACE"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONEU", _("Phone up button"));
-			act->setKeyEvent(KEYCODE_UP);
-			act->addDefaultInputMapping("UP"); // original keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONED", _("Phone down button"));
-			act->setKeyEvent(KEYCODE_DOWN);
-			act->addDefaultInputMapping("DOWN"); // original keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE0", _("Phone 0 button"));
-			act->setKeyEvent(KeyState(KEYCODE_0, '0'));
-			act->addDefaultInputMapping("0"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE1", _("Phone 1 button"));
-			act->setKeyEvent(KeyState(KEYCODE_1, '1'));
-			act->addDefaultInputMapping("1"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE2", _("Phone 2 button"));
-			act->setKeyEvent(KeyState(KEYCODE_2, '2'));
-			act->addDefaultInputMapping("2"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE3", _("Phone 3 button"));
-			act->setKeyEvent(KeyState(KEYCODE_3, '3'));
-			act->addDefaultInputMapping("3"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE4", _("Phone 4 button"));
-			act->setKeyEvent(KeyState(KEYCODE_4, '4'));
-			act->addDefaultInputMapping("4"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE5", _("Phone 5 button"));
-			act->setKeyEvent(KeyState(KEYCODE_5, '5'));
-			act->addDefaultInputMapping("5"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE6", _("Phone 6 button"));
-			act->setKeyEvent(KeyState(KEYCODE_6, '6'));
-			act->addDefaultInputMapping("6"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE7", _("Phone 7 button"));
-			act->setKeyEvent(KeyState(KEYCODE_7, '7'));
-			act->addDefaultInputMapping("7"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE8", _("Phone 8 button"));
-			act->setKeyEvent(KeyState(KEYCODE_8, '8'));
-			act->addDefaultInputMapping("8"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONE9", _("Phone 9 button"));
-			act->setKeyEvent(KeyState(KEYCODE_9, '9'));
-			act->addDefaultInputMapping("9"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONEA", _("Phone * button"));
-			act->setKeyEvent(KeyState(KEYCODE_ASTERISK, '*'));
-			act->addDefaultInputMapping("ASTERISK"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("PHONEH", _("Phone # button"));
-			act->setKeyEvent(KeyState(KEYCODE_HASH, '#'));
-			act->addDefaultInputMapping("HASH"); // original keyboard
-			gameKeyMap->addAction(act);
-		} else if (gameId == "knossos") {
-			act = new Action("WTF", _("???"));
-			act->setKeyEvent(KeyState(KEYCODE_a, 'a', KBD_SHIFT));
-			act->addDefaultInputMapping("S+a"); // original keyboard
-			//TODO: extra joy control, e.g. "JOY_R+JOY_B"
-			gameKeyMap->addAction(act);
-		} else if (gameId == "jamesperis") {
-			act = new Action("HINT", _("Show hints / Dance move"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveUp, _("Dance move up"));
-			act->setKeyEvent(KEYCODE_UP);
-			act->addDefaultInputMapping("UP"); // original keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveDown, _("Dance move down"));
-			act->setKeyEvent(KEYCODE_DOWN);
-			act->addDefaultInputMapping("DOWN"); // original keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveLeft, _("Dance move left"));
-			act->setKeyEvent(KEYCODE_LEFT);
-			act->addDefaultInputMapping("LEFT"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveRight, _("Dance move right"));
-			act->setKeyEvent(KEYCODE_RIGHT);
-			act->addDefaultInputMapping("RIGHT"); // original keyboard
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PAGEUP", _("Previous page"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			gameKeyMap->addAction(act);
-
-			act = new Action("PAGEDN", _("Next page"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			gameKeyMap->addAction(act);
-
-			act = new Action("WTF", _("???"));
-			act->setKeyEvent(KEYCODE_F10);
-			act->addDefaultInputMapping("F10"); // original keyboard
-			act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
-			//TODO: extra joy control, e.g. "JOY_R+JOY_B"
-			gameKeyMap->addAction(act);
-		} else if (gameId == "julia") {
-			act = new Action(kStandardActionSkip, _("Skip"));
-			act->setKeyEvent(KEYCODE_F12);
-			act->addDefaultInputMapping("F12"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "juliastars") {
-			act = new Action("CANCEL", _("Cancel input"));
-			act->setKeyEvent(KEYCODE_BACKSPACE);
-			act->addDefaultInputMapping("BACKSPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveUp, _("Up"));
-			act->setKeyEvent(KEYCODE_UP);
-			act->addDefaultInputMapping("UP"); // original keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveDown, _("Down"));
-			act->setKeyEvent(KEYCODE_DOWN);
-			act->addDefaultInputMapping("DOWN"); // original keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveLeft, _("Left"));
-			act->setKeyEvent(KEYCODE_LEFT);
-			act->addDefaultInputMapping("LEFT"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveRight, _("Right"));
-			act->setKeyEvent(KEYCODE_RIGHT);
-			act->addDefaultInputMapping("RIGHT"); // original keyboard
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("NOWAIT", _("Cancel waiting"));
-			act->setKeyEvent(KEYCODE_F11);
-			act->addDefaultInputMapping("F11"); // original keyboard
-			gameKeyMap->addAction(act);
-		} else if (gameId == "looky") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLUP", _("Scroll up"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("UP"); // extra keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLDN", _("Scroll down"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			act->addDefaultInputMapping("DOWN"); // extra keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRS", _("Save screenshot"));
-			act->setKeyEvent(KEYCODE_F12);
-			act->addDefaultInputMapping("F12"); // original keyboard
-			gameKeyMap->addAction(act);
-		} else if (gameId == "mentalrepairs") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("HELP", _("Show help"));
-			act->setKeyEvent(KEYCODE_F1);
-			act->addDefaultInputMapping("F1"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "mythguff") {
-			act = new Action("SCRLUP", _("Scroll up"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("UP"); // extra keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLDN", _("Scroll down"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			act->addDefaultInputMapping("DOWN"); // extra keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "oknytt") {
-			act = new Action("INV", _("Show inventory"));
-			act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
-			act->addDefaultInputMapping("TAB"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "onehelluvaday") {
-			act = new Action(kStandardActionMoveUp, _("Up"));
-			act->setKeyEvent(KEYCODE_UP);
-			act->addDefaultInputMapping("UP"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveDown, _("Down"));
-			act->setKeyEvent(KEYCODE_DOWN);
-			act->addDefaultInputMapping("DOWN"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SHIFT", _("Shift"));
-			act->setKeyEvent(KEYCODE_RSHIFT);
-			act->addDefaultInputMapping("LSHIFT"); // original keyboard control
-			act->addDefaultInputMapping("RSHIFT"); // original keyboard control
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "palladion") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRS", _("Save screenshot"));
-			act->setKeyEvent(KEYCODE_F12);
-			act->addDefaultInputMapping("F12"); // original keyboard
-			gameKeyMap->addAction(act);
-		} else if (gameId == "papasdaughters1") {
-			act = new Action("SCRLUP", _("Scroll up"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("UP"); // extra keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLDN", _("Scroll down"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			act->addDefaultInputMapping("DOWN"); // extra keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "papasdaughters2") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KEYCODE_F1);
-			act->addDefaultInputMapping("F1"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLUP", _("Scroll up"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("UP"); // extra keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLDN", _("Scroll down"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			act->addDefaultInputMapping("DOWN"); // extra keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "pizzamorgana") {
-			act = new Action("ACTNXT", _("Next action"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_RIGHT"); // original mouse
-			act->addDefaultInputMapping("RIGHTBRACKET"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("JOY_B"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("ACTPRV", _("Previous action"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("LEFTBRACKET"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionSkip, _("Skip"));
-			act->setKeyEvent(KeyState(KEYCODE_PERIOD, '.'));
-			act->addDefaultInputMapping("PERIOD"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("PAUSE", _("Pause"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("p"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionOpenSettings, _("Settings"));
-			act->setKeyEvent(KeyState(KEYCODE_s, 's'));
-			act->addDefaultInputMapping("s"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("ANSWR1", _("Dialogue answer 1"));
-			act->setKeyEvent(KeyState(KEYCODE_1, '1'));
-			act->addDefaultInputMapping("1"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("ANSWR2", _("Dialogue answer 2"));
-			act->setKeyEvent(KeyState(KEYCODE_2, '2'));
-			act->addDefaultInputMapping("2"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("ANSWR3", _("Dialogue answer 3"));
-			act->setKeyEvent(KeyState(KEYCODE_3, '3'));
-			act->addDefaultInputMapping("3"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("ANSWR4", _("Dialogue answer 4"));
-			act->setKeyEvent(KeyState(KEYCODE_4, '4'));
-			act->addDefaultInputMapping("4"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRS", _("Save screenshot"));
-			act->setKeyEvent(KeyState(KEYCODE_p, 'p', KBD_SHIFT));
-			act->addDefaultInputMapping("S+p"); // original keyboard
-			gameKeyMap->addAction(act);
-		} else if (gameId == "polechudes") {
-			act = new Action("SLOW", _("Spin slower"));
-			act->setKeyEvent(KEYCODE_F1);
-			act->addDefaultInputMapping("F1"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("FAST", _("Spin faster"));
-			act->setKeyEvent(KEYCODE_F2);
-			act->addDefaultInputMapping("F2"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "reptilesquest") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_x, 'x'));
-			act->addDefaultInputMapping("x"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("INV", _("Show inventory"));
-			act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
-			act->addDefaultInputMapping("i"); // original keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("MAP", _("Show map"));
-			act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
-			act->addDefaultInputMapping("m"); // original keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "reversion1") {
-			act = new Action("INV", _("Show inventory"));
-			act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
-			act->addDefaultInputMapping("i"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "reversion2" ||
-			gameId == "reversion3"
-		) {
-			act = new Action("INV", _("Show inventory"));
-			act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
-			act->addDefaultInputMapping("i"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveUp, _("Scroll up"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("UP"); // extra keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveDown, _("Scroll down"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			act->addDefaultInputMapping("DOWN"); // extra keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "ritter") {
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionSkip, _("Skip"));
-			act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
-			act->addDefaultInputMapping("BACKSPACE"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "shaban") {
-			act = new Action("MAP", _("Show map"));
-			act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
-			act->addDefaultInputMapping("m"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "tib") {
-			act = new Action("SCRS", _("Save screenshot"));
-			act->setKeyEvent(KEYCODE_F9);
-			act->addDefaultInputMapping("F9"); // original keyboard
-			gameKeyMap->addAction(act);
-		} else if (gameId == "thelastcrownmh") {
-			act = new Action("EXIT", _("Exit"));
-			act->setKeyEvent(KEYCODE_F1);
-			act->addDefaultInputMapping("F1"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("GEOM", _("Show scene geometry"));
-			act->setKeyEvent(KEYCODE_F2);
-			act->addDefaultInputMapping("F2"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRS", _("Save screenshot"));
-			act->setKeyEvent(KEYCODE_F3);
-			act->addDefaultInputMapping("F3"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionOpenSettings, _("Settings"));
-			act->setKeyEvent(KEYCODE_F4);
-			act->addDefaultInputMapping("F4"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("NOWAIT", _("Cancel waiting"));
-			act->setKeyEvent(KEYCODE_F5);
-			act->addDefaultInputMapping("F5"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("DBGTXT", _("Debug print"));
-			act->setKeyEvent(KEYCODE_F6);
-			act->addDefaultInputMapping("F6"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("BEZIER", _("Bezier window"));
-			act->setKeyEvent(KEYCODE_F7);
-			act->addDefaultInputMapping("F7"); // original keyboard
-			gameKeyMap->addAction(act);
-		} else if (gameId == "thelostcrowngha") {
-			act = new Action("WTF", _("???"));
-			act->setKeyEvent(KEYCODE_F1);
-			act->addDefaultInputMapping("F1"); // original keyboard
-			//TODO: extra joy control, e.g. "JOY_R+JOY_B"
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRS", _("Save screenshot"));
-			act->setKeyEvent(KEYCODE_F3);
-			act->addDefaultInputMapping("F3"); // original keyboard
-			gameKeyMap->addAction(act);
-		} else if (gameId == "twc") {
-			act = new Action("ACT", _("Droid action"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveLeft, _("Left"));
-			act->setKeyEvent(KEYCODE_LEFT);
-			act->addDefaultInputMapping("LEFT"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveRight, _("Right"));
-			act->setKeyEvent(KEYCODE_RIGHT);
-			act->addDefaultInputMapping("RIGHT"); // original keyboard
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveUp, _("Up"));
-			act->setKeyEvent(KEYCODE_UP);
-			act->addDefaultInputMapping("UP"); // original keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveDown, _("Down"));
-			act->setKeyEvent(KEYCODE_DOWN);
-			act->addDefaultInputMapping("DOWN"); // original keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("GUIA", _("GUI variant A"));
-			act->setKeyEvent(KEYCODE_F10);
-			act->addDefaultInputMapping("F10"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
-			gameKeyMap->addAction(act);
-
-			act = new Action("GUIB", _("GUI variant B"));
-			act->setKeyEvent(KEYCODE_F11);
-			act->addDefaultInputMapping("F11"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
-			gameKeyMap->addAction(act);
-
-			act = new Action("WTF", _("???"));
-			act->setKeyEvent(KEYCODE_HOME);
-			act->addDefaultInputMapping("HOME"); // original keyboard
-			//TODO: extra joy control, e.g. "JOY_R+JOY_B"
-			gameKeyMap->addAction(act);
-		} else if (gameId == "vsevolod") {
-			act = new Action("INV", _("Show inventory"));
-			act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
-			act->addDefaultInputMapping("i"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("JRNL", _("Show journal"));
-			act->setKeyEvent(KeyState(KEYCODE_j, 'j'));
-			act->addDefaultInputMapping("j"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionOpenSettings, _("Music menu"));
-			act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
-			act->addDefaultInputMapping("m"); // original keyboard
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLUP", _("Scroll up"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("UP"); // extra keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLDN", _("Scroll down"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			act->addDefaultInputMapping("DOWN"); // extra keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "wtetris") {
-			act = new Action("ROTATE", _("Rotate"));
-			act->setKeyEvent(KEYCODE_UP);
-			act->addDefaultInputMapping("UP"); // original keyboard
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_RIGHT"); // extra mouse
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveLeft, _("Left"));
-			act->setKeyEvent(KEYCODE_LEFT);
-			act->addDefaultInputMapping("LEFT"); // original keyboard
-			act->addDefaultInputMapping("KP4"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveRight, _("Right"));
-			act->setKeyEvent(KEYCODE_RIGHT);
-			act->addDefaultInputMapping("RIGHT"); // original keyboard
-			act->addDefaultInputMapping("KP6"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("DROP", _("Drop"));
-			act->setKeyEvent(KEYCODE_DOWN);
-			act->addDefaultInputMapping("DOWN"); // original keyboard
-			act->addDefaultInputMapping("KP2"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-		} else if (gameId == "zbang") {
-			act = new Action("ACTNXT", _("Next action"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_RIGHT"); // original mouse
-			act->addDefaultInputMapping("RIGHTBRACKET"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			act->addDefaultInputMapping("JOY_B"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("ACTPRV", _("Previous action"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("LEFTBRACKET"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			gameKeyMap->addAction(act);
-
-			act = new Action("HINT", _("Show hints"));
-			act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
-			act->addDefaultInputMapping("TAB"); // original keyboard
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionSkip, _("Skip"));
-			act->setKeyEvent(KeyState(KEYCODE_PERIOD, '.'));
-			act->addDefaultInputMapping("PERIOD"); // original keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveUp, _("Walk forward"));
-			act->setKeyEvent(KEYCODE_UP);
-			act->addDefaultInputMapping("UP"); // original keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveLeft, _("Turn left"));
-			act->setKeyEvent(KEYCODE_LEFT);
-			act->addDefaultInputMapping("LEFT"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveRight, _("Turn right"));
-			act->setKeyEvent(KEYCODE_RIGHT);
-			act->addDefaultInputMapping("RIGHT"); // original keyboard
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-		} else {
-			warning("Autogenerated keymap for unknown WME game, id '%s', target '%s'", gameId.c_str(), target);
-
-			act = new Action("SPACE", _("Space"));
-			act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
-			act->addDefaultInputMapping("SPACE"); // original keyboard
-			act->addDefaultInputMapping("JOY_Y"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveLeft, _("Left"));
-			act->setKeyEvent(KEYCODE_LEFT);
-			act->addDefaultInputMapping("LEFT"); // original keyboard
-			act->addDefaultInputMapping("JOY_LEFT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveRight, _("Right"));
-			act->setKeyEvent(KEYCODE_RIGHT);
-			act->addDefaultInputMapping("RIGHT"); // original keyboard
-			act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveUp, _("Up"));
-			act->setKeyEvent(KEYCODE_UP);
-			act->addDefaultInputMapping("UP"); // original keyboard
-			act->addDefaultInputMapping("JOY_UP"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action(kStandardActionMoveDown, _("Down"));
-			act->setKeyEvent(KEYCODE_DOWN);
-			act->addDefaultInputMapping("DOWN"); // original keyboard
-			act->addDefaultInputMapping("JOY_DOWN"); // extra joy
-			gameKeyMap->addAction(act);
-
-			act = new Action("MCLK", _("Middle Click"));
-			act->setMiddleClickEvent();
-			act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
-			engineKeyMap->addAction(act);
-
-			act = new Action("SCRLUP", _("Scroll up"));
-			act->setMouseWheelUpEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
-			gameKeyMap->addAction(act);
-
-			act = new Action("SCRLDN", _("Scroll down"));
-			act->setMouseWheelDownEvent();
-			act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
-			gameKeyMap->addAction(act);
-
-			act = new Action("KEYF1", _("F1"));
-			act->setKeyEvent(KEYCODE_F1);
-			act->addDefaultInputMapping("F1"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("KEYI", _("Key i"));
-			act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
-			act->addDefaultInputMapping("i"); // original keyboard
-			gameKeyMap->addAction(act);
-
-			act = new Action("TAB", _("Tab"));
-			act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
-			act->addDefaultInputMapping("TAB"); // original keyboard
-			gameKeyMap->addAction(act);
-		}
-
-		result.push_back(gameKeyMap);
-		return result;
+		return getWintermuteKeymaps(target, gameId, gameDescr);
 	}
 
 };
diff --git a/engines/wintermute/keymapper_tables.h b/engines/wintermute/keymapper_tables.h
new file mode 100644
index 0000000000..66154104cc
--- /dev/null
+++ b/engines/wintermute/keymapper_tables.h
@@ -0,0 +1,1469 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
+#include "common/translation.h"
+
+namespace Wintermute {
+
+inline Common::KeymapArray getWintermuteKeymaps(const char *target, const Common::String &gameId, const char *gameDescr) {
+
+	using namespace Common;
+
+	Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "wintermute", "Wintermute engine");
+
+	Action *act;
+
+	act = new Action("LCLK", _("Left Click"));
+	act->setLeftClickEvent();
+	act->addDefaultInputMapping("MOUSE_LEFT"); // original mouse
+	act->addDefaultInputMapping("JOY_A"); // extra joy
+	engineKeyMap->addAction(act);
+
+	act = new Action("RCLK", _("Right Click"));
+	act->setRightClickEvent();
+	act->addDefaultInputMapping("MOUSE_RIGHT"); // original mouse
+	act->addDefaultInputMapping("JOY_B"); // extra joy
+	engineKeyMap->addAction(act);
+
+	act = new Action("RETURN", _("Confirm"));
+	act->setKeyEvent(KeyState(KEYCODE_RETURN, ASCII_RETURN));
+	act->addDefaultInputMapping("RETURN"); // original keyboard
+	//TODO: extra joy control, e.g. "JOY_R+JOY_X"
+	engineKeyMap->addAction(act);
+
+	act = new Action("ESCAPE", _("Escape"));
+	act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+	act->addDefaultInputMapping("ESCAPE"); // original keyboard
+	act->addDefaultInputMapping("JOY_X"); // extra joy
+	engineKeyMap->addAction(act);
+
+	Common::KeymapArray result = Keymap::arrayOf(engineKeyMap);
+
+	if (gameId == "actualdest" ||
+		gameId == "artofmurder1" ||
+		gameId == "agustin" ||
+		gameId == "bickadoodle" ||
+		gameId == "bthreshold" ||
+		gameId == "colorsoncanvas" ||
+		gameId == "corrosion" ||
+		gameId == "deadcity" ||
+		gameId == "darkfallls" ||
+		gameId == "drbohus" ||
+		gameId == "dreaming" ||
+		gameId == "dreamscape" ||
+		gameId == "driller" ||
+		gameId == "everydaygray" ||
+		gameId == "findinghope" ||
+		gameId == "four" ||
+		gameId == "framed" ||
+		gameId == "hamlet" ||
+		gameId == "hor" ||
+		gameId == "juliauntold" ||
+		gameId == "lonelyrobot" ||
+		gameId == "machumayu" ||
+		gameId == "mirage" ||
+		gameId == "nighttrain" ||
+		gameId == "projectdoom" ||
+		gameId == "rosemary" ||
+		gameId == "satanandsons" ||
+		gameId == "sofiasdebt" ||
+		gameId == "spaceinvaders" ||
+		gameId == "spacemadness" ||
+		gameId == "tanya1" ||
+		gameId == "tanya2" ||
+		gameId == "theancientmark1" ||
+		gameId == "thebox" ||
+		gameId == "thekite" ||
+		gameId == "tradestory" ||
+		gameId == "wmedemo"
+	) {
+		return Keymap::arrayOf(engineKeyMap);
+	}
+
+	Keymap *gameKeyMap = new Keymap(Keymap::kKeymapTypeGame, gameId, gameDescr);
+
+	if (gameId == "dfafadventure" ||
+		gameId == "dreamcat" ||
+		gameId == "openquest"
+	) {
+		act = new Action("LOOK", _("Look At"));
+		act->setKeyEvent(KeyState(KEYCODE_l, 'l'));
+		act->addDefaultInputMapping("l"); // original keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("TALK", _("Talk to"));
+		act->setKeyEvent(KeyState(KEYCODE_t, 't'));
+		act->addDefaultInputMapping("t"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PICK", _("Pick up"));
+		act->setKeyEvent(KeyState(KEYCODE_p, 'p'));
+		act->addDefaultInputMapping("p"); // original keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("USE", _("Use"));
+		act->setKeyEvent(KeyState(KEYCODE_u, 'u'));
+		act->addDefaultInputMapping("u"); // original keyboard
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "basisoctavus" ||
+		gameId == "lovmamuta" ||
+		gameId == "wmedemo3d"
+	) {
+		act = new Action(kStandardActionMoveUp, _("Walk forward"));
+		act->setKeyEvent(KEYCODE_UP);
+		act->addDefaultInputMapping("UP"); // original keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveDown, _("Walk backward"));
+		act->setKeyEvent(KEYCODE_DOWN);
+		act->addDefaultInputMapping("DOWN"); // original keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveLeft, _("Turn left"));
+		act->setKeyEvent(KEYCODE_LEFT);
+		act->addDefaultInputMapping("LEFT"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveRight, _("Turn right"));
+		act->setKeyEvent(KEYCODE_RIGHT);
+		act->addDefaultInputMapping("RIGHT"); // original keyboard
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("GEOM", _("Show scene geometry"));
+		act->setKeyEvent(KEYCODE_F1);
+		act->addDefaultInputMapping("F1"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "5ld" ||
+		gameId == "projectjoe"
+	) {
+		act = new Action("PAGEUP", _("Previous page"));
+		act->setKeyEvent(KEYCODE_PAGEUP);
+		act->addDefaultInputMapping("PAGEUP"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PAGEDN", _("Next page"));
+		act->setKeyEvent(KEYCODE_PAGEDOWN);
+		act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "5ma" ||
+		gameId == "dirtysplit"
+	) {
+		act = new Action("PAGEUP", _("Previous page"));
+		act->setKeyEvent(KEYCODE_PAGEUP);
+		act->addDefaultInputMapping("PAGEUP"); // original keyboard
+		act->addDefaultInputMapping("LEFT"); // original keyboard for 5ma & dirtysplit
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PAGEDN", _("Next page"));
+		act->setKeyEvent(KEYCODE_PAGEDOWN);
+		act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
+		act->addDefaultInputMapping("RIGHT"); // original keyboard for 5ma & dirtysplit
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "chivalry" ||
+		gameId == "paintaria" ||
+		gameId == "pigeons" ||
+		gameId == "rhiannon" ||
+		gameId == "shinestar"
+	) {
+		act = new Action(kStandardActionSkip, _("Skip"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "drdoylemotch" ||
+		gameId == "kulivocko" ||
+		gameId == "rebeccacarlson1"
+	) {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "goldencalf" ||
+		gameId == "msos" ||
+		gameId == "one"
+	) {
+		act = new Action("INV", _("Show inventory"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "bookofgron") {
+		act = new Action("MCLK", _("Middle Click"));
+		act->setMiddleClickEvent();
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		engineKeyMap->addAction(act);
+	} else if (gameId == "alimardan1") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("GUIA", _("GUI variant A"));
+		act->setKeyEvent(KEYCODE_F10);
+		act->addDefaultInputMapping("F10"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("GUIB", _("GUI variant B"));
+		act->setKeyEvent(KEYCODE_F11);
+		act->addDefaultInputMapping("F11"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("WTF", _("???"));
+		act->setKeyEvent(KEYCODE_HOME);
+		act->addDefaultInputMapping("HOME"); // original keyboard
+		//TODO: extra joy control, e.g. "JOY_R+JOY_B"
+		gameKeyMap->addAction(act);
+	} else if (gameId == "alimardan2") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("GUIA", _("GUI variant A"));
+		act->setKeyEvent(KEYCODE_F10);
+		act->addDefaultInputMapping("F10"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("GUIB", _("GUI variant B"));
+		act->setKeyEvent(KEYCODE_F11);
+		act->addDefaultInputMapping("F11"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONEX", _("Phone cancel button"));
+		act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
+		act->addDefaultInputMapping("BACKSPACE"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONEU", _("Phone up button"));
+		act->setKeyEvent(KEYCODE_UP);
+		act->addDefaultInputMapping("UP"); // original keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONED", _("Phone down button"));
+		act->setKeyEvent(KEYCODE_DOWN);
+		act->addDefaultInputMapping("DOWN"); // original keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE0", _("Phone 0 button"));
+		act->setKeyEvent(KeyState(KEYCODE_0, '0'));
+		act->addDefaultInputMapping("0"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE1", _("Phone 1 button"));
+		act->setKeyEvent(KeyState(KEYCODE_1, '1'));
+		act->addDefaultInputMapping("1"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE2", _("Phone 2 button"));
+		act->setKeyEvent(KeyState(KEYCODE_2, '2'));
+		act->addDefaultInputMapping("2"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE3", _("Phone 3 button"));
+		act->setKeyEvent(KeyState(KEYCODE_3, '3'));
+		act->addDefaultInputMapping("3"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE4", _("Phone 4 button"));
+		act->setKeyEvent(KeyState(KEYCODE_4, '4'));
+		act->addDefaultInputMapping("4"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE5", _("Phone 5 button"));
+		act->setKeyEvent(KeyState(KEYCODE_5, '5'));
+		act->addDefaultInputMapping("5"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE6", _("Phone 6 button"));
+		act->setKeyEvent(KeyState(KEYCODE_6, '6'));
+		act->addDefaultInputMapping("6"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE7", _("Phone 7 button"));
+		act->setKeyEvent(KeyState(KEYCODE_7, '7'));
+		act->addDefaultInputMapping("7"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE8", _("Phone 8 button"));
+		act->setKeyEvent(KeyState(KEYCODE_8, '8'));
+		act->addDefaultInputMapping("8"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE9", _("Phone 9 button"));
+		act->setKeyEvent(KeyState(KEYCODE_9, '9'));
+		act->addDefaultInputMapping("9"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONEA", _("Phone * button"));
+		act->setKeyEvent(KeyState(KEYCODE_ASTERISK, '*'));
+		act->addDefaultInputMapping("ASTERISK"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONEH", _("Phone # button"));
+		act->setKeyEvent(KeyState(KEYCODE_HASH, '#'));
+		act->addDefaultInputMapping("HASH"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("WTF", _("???"));
+		act->setKeyEvent(KEYCODE_HOME);
+		act->addDefaultInputMapping("HOME"); // original keyboard
+		//TODO: extra joy control, e.g. "JOY_R+JOY_B"
+		gameKeyMap->addAction(act);
+	} else if (gameId == "alphapolaris") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("INV", _("Show inventory"));
+		act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
+		act->addDefaultInputMapping("i"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("HELP", _("Show help"));
+		act->setKeyEvent(KEYCODE_F1);
+		act->addDefaultInputMapping("F1"); // original keyboard
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLUP", _("Scroll up"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("PAGEUP"); // extra keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLDN", _("Scroll down"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		act->addDefaultInputMapping("PAGEDOWN"); // extra keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("GEOM", _("Show scene geometry"));
+		act->setKeyEvent(KeyState(KEYCODE_F2, 0, KBD_CTRL));
+		act->addDefaultInputMapping("C+F2"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("SHADOW", _("Change shadow type"));
+		act->setKeyEvent(KeyState(KEYCODE_F3, 0, KBD_CTRL));
+		act->addDefaultInputMapping("C+F3"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRS", _("Save screenshot"));
+		act->setKeyEvent(KeyState(KEYCODE_F5, 0, KBD_CTRL));
+		act->addDefaultInputMapping("C+F5"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("VOLMAX", _("Volume max"));
+		act->setKeyEvent(KeyState(KEYCODE_F6, 0, KBD_CTRL));
+		act->addDefaultInputMapping("C+F6"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("DBGCLI", _("Show debug parser"));
+		act->setKeyEvent(KeyState(KEYCODE_F7, 0, KBD_CTRL));
+		act->addDefaultInputMapping("C+F7"); // original keyboard
+		act->addDefaultInputMapping("C+F10"); // original keyboard
+		//TODO: extra joy control, e.g. "JOY_R+JOY_B"
+		gameKeyMap->addAction(act);
+
+		act = new Action("DBGTXT", _("Debug print"));
+		act->setKeyEvent(KeyState(KEYCODE_F8, 0, KBD_CTRL));
+		act->addDefaultInputMapping("C+F8"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("EXIT", _("Exit"));
+		act->setKeyEvent(KeyState(KEYCODE_F9, 0, KBD_CTRL));
+		act->addDefaultInputMapping("C+F9"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("LIGHT", _("Light helper window"));
+		act->setKeyEvent(KeyState(KEYCODE_F11, 0, KBD_CTRL));
+		act->addDefaultInputMapping("C+F11"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveUp, _("Walk forward"));
+		act->setKeyEvent(KEYCODE_UP);
+		act->addDefaultInputMapping("UP"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveDown, _("Walk backward"));
+		act->setKeyEvent(KEYCODE_DOWN);
+		act->addDefaultInputMapping("DOWN"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveLeft, _("Turn left"));
+		act->setKeyEvent(KEYCODE_LEFT);
+		act->addDefaultInputMapping("LEFT"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveRight, _("Turn right"));
+		act->setKeyEvent(KEYCODE_RIGHT);
+		act->addDefaultInputMapping("RIGHT"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("FASTU", _("Run forward"));
+		act->setKeyEvent(KeyState(KEYCODE_UP, 0, KBD_SHIFT));
+		act->addDefaultInputMapping("S+UP"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("FASTD", _("Run backward"));
+		act->setKeyEvent(KeyState(KEYCODE_DOWN, 0, KBD_SHIFT));
+		act->addDefaultInputMapping("S+DOWN"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("FASTL", _("Turn left fast"));
+		act->setKeyEvent(KeyState(KEYCODE_LEFT, 0, KBD_SHIFT));
+		act->addDefaultInputMapping("S+LEFT"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("FASTR", _("Turn right fast"));
+		act->setKeyEvent(KeyState(KEYCODE_RIGHT, 0, KBD_SHIFT));
+		act->addDefaultInputMapping("S+RIGHT"); // original keyboard
+		gameKeyMap->addAction(act);
+	} else if (gameId == "apeiron") {
+		act = new Action("BLUE", _("Show blueprint"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("WTF", _("???"));
+		act->setKeyEvent(KeyState(KEYCODE_n, 'n'));
+		act->addDefaultInputMapping("n"); // original keyboard
+		//TODO: extra joy control, e.g. "JOY_R+JOY_B"
+		gameKeyMap->addAction(act);
+	} else if (gameId == "carolreed4") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
+		act->addDefaultInputMapping("TAB"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("VOLMAX", _("Volume max"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("UP"); // extra keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("VOLOFF", _("Volume off"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		act->addDefaultInputMapping("DOWN"); // extra keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "erinmyers") {
+		act = new Action("GUIB", _("Change font size"));
+		act->setKeyEvent(KEYCODE_END);
+		act->addDefaultInputMapping("END"); // original keyboard
+		//TODO: extra joy control, e.g. "JOY_R+JOY_B"
+		gameKeyMap->addAction(act);
+	} else if (gameId == "escapemansion") {
+		act = new Action("WTF", _("???"));
+		act->setKeyEvent(KEYCODE_F1);
+		act->addDefaultInputMapping("F1"); // original keyboard
+		//TODO: extra joy control, e.g. "JOY_R+JOY_B"
+		gameKeyMap->addAction(act);
+
+		act = new Action("DBGTXT", _("Debug print"));
+		act->setKeyEvent(KEYCODE_F2);
+		act->addDefaultInputMapping("F2"); // original keyboard
+		gameKeyMap->addAction(act);
+	} else if (gameId == "facenoir") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KEYCODE_F1);
+		act->addDefaultInputMapping("F1"); // original keyboard
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("INV", _("Show inventory"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLUP", _("Scroll up"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("UP"); // extra keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLDN", _("Scroll down"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		act->addDefaultInputMapping("DOWN"); // extra keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "foxtail") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLUP", _("Scroll up"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("UP"); // original keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLDN", _("Scroll down"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		act->addDefaultInputMapping("DOWN"); // original keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PAGEUP", _("Previous page"));
+		act->setKeyEvent(KEYCODE_PAGEUP);
+		act->addDefaultInputMapping("LEFT"); // original keyboard
+		act->addDefaultInputMapping("PAGEUP"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PAGEDN", _("Next page"));
+		act->setKeyEvent(KEYCODE_PAGEDOWN);
+		act->addDefaultInputMapping("RIGHT"); // original keyboard
+		act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionSave, _("Save game"));
+		act->setKeyEvent(KEYCODE_F2);
+		act->addDefaultInputMapping("F2"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionLoad, _("Load game"));
+		act->setKeyEvent(KEYCODE_F3);
+		act->addDefaultInputMapping("F3"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("QSAVE", _("Quick save"));
+		act->setKeyEvent(KEYCODE_F5);
+		act->addDefaultInputMapping("F5"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("SPD1", _("Walking speed: Low"));
+		act->setKeyEvent(KEYCODE_F6);
+		act->addDefaultInputMapping("F6"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("SPD2", _("Walking speed: Medium"));
+		act->setKeyEvent(KEYCODE_F7);
+		act->addDefaultInputMapping("F7"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("SPD3", _("Walking speed: High"));
+		act->setKeyEvent(KEYCODE_F8);
+		act->addDefaultInputMapping("F8"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("QLOAD", _("Quick load"));
+		act->setKeyEvent(KEYCODE_F9);
+		act->addDefaultInputMapping("F9"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("NOWAIT", _("Cancel waiting"));
+		act->setKeyEvent(KEYCODE_F10);
+		act->addDefaultInputMapping("F10"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("CAPT", _("Toggle mouse capture"));
+		act->setKeyEvent(KEYCODE_F11);
+		act->addDefaultInputMapping("F11"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("HOME", _("First page"));
+		act->setKeyEvent(KEYCODE_HOME);
+		act->addDefaultInputMapping("HOME"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("END", _("Last page"));
+		act->setKeyEvent(KEYCODE_END);
+		act->addDefaultInputMapping("END"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		Common::String extra = ConfMan.get("extra", target);
+		if (extra.hasPrefix("1.2.230.") || extra.hasPrefix("1.2.304.") || extra.hasPrefix("1.2.362.")) {
+			act = new Action("SPDMAX", _("Walking speed: Ultra Super Mega Fast"));
+			act->setKeyEvent(KeyState(KEYCODE_s, 's', KBD_CTRL|KBD_ALT|KBD_SHIFT));
+			act->addDefaultInputMapping("C+A+S+s"); // original keyboard
+			//TODO: extra joy control, e.g. "JOY_R+JOY_A"
+			gameKeyMap->addAction(act);
+		}
+
+		if (extra.hasPrefix("1.2.362.")) {
+			act = new Action("WTF", _("???"));
+			act->setKeyEvent(KeyState(KEYCODE_z, 'z'));
+			act->addDefaultInputMapping("z"); // original keyboard
+			//TODO: extra joy control, e.g. "JOY_R+JOY_B"
+			gameKeyMap->addAction(act);
+		}
+	} else if (gameId == "ghostsheet") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
+		act->addDefaultInputMapping("TAB"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("ABLT1", _("Ability: Telekinesis"));
+		act->setKeyEvent(KEYCODE_F1);
+		act->addDefaultInputMapping("F1"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("ABLT2", _("Ability: Push"));
+		act->setKeyEvent(KEYCODE_F2);
+		act->addDefaultInputMapping("F2"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("ABLT3", _("Ability: Lightning"));
+		act->setKeyEvent(KEYCODE_F3);
+		act->addDefaultInputMapping("F3"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("ABLT4", _("Ability: Light"));
+		act->setKeyEvent(KEYCODE_F4);
+		act->addDefaultInputMapping("F4"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("ABLT5", _("Ability: Wind"));
+		act->setKeyEvent(KEYCODE_F5);
+		act->addDefaultInputMapping("F5"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("ABLT6", _("Ability: Sound"));
+		act->setKeyEvent(KEYCODE_F6);
+		act->addDefaultInputMapping("F6"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("ABLT7", _("Ability: Esence"));
+		act->setKeyEvent(KEYCODE_F7);
+		act->addDefaultInputMapping("F7"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("ABLT8", _("Ability: Exorcist"));
+		act->setKeyEvent(KEYCODE_F8);
+		act->addDefaultInputMapping("F8"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("SKIPMG", _("Skip minigame"));
+		act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
+		act->addDefaultInputMapping("BACKSPACE"); // original keyboard
+		//TODO: extra joy control, e.g. "JOY_R+JOY_B"
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRS", _("Save screenshot"));
+		act->setKeyEvent(KEYCODE_F10);
+		act->addDefaultInputMapping("F10"); // original keyboard
+		gameKeyMap->addAction(act);
+	} else if (gameId == "helga") {
+		act = new Action("PAGEUP", _("Previous page"));
+		act->setKeyEvent(KEYCODE_PAGEUP);
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("PAGEUP"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PAGEDN", _("Next page"));
+		act->setKeyEvent(KEYCODE_PAGEDOWN);
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONEX", _("Phone cancel button"));
+		act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
+		act->addDefaultInputMapping("BACKSPACE"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONEU", _("Phone up button"));
+		act->setKeyEvent(KEYCODE_UP);
+		act->addDefaultInputMapping("UP"); // original keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONED", _("Phone down button"));
+		act->setKeyEvent(KEYCODE_DOWN);
+		act->addDefaultInputMapping("DOWN"); // original keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE0", _("Phone 0 button"));
+		act->setKeyEvent(KeyState(KEYCODE_0, '0'));
+		act->addDefaultInputMapping("0"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE1", _("Phone 1 button"));
+		act->setKeyEvent(KeyState(KEYCODE_1, '1'));
+		act->addDefaultInputMapping("1"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE2", _("Phone 2 button"));
+		act->setKeyEvent(KeyState(KEYCODE_2, '2'));
+		act->addDefaultInputMapping("2"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE3", _("Phone 3 button"));
+		act->setKeyEvent(KeyState(KEYCODE_3, '3'));
+		act->addDefaultInputMapping("3"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE4", _("Phone 4 button"));
+		act->setKeyEvent(KeyState(KEYCODE_4, '4'));
+		act->addDefaultInputMapping("4"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE5", _("Phone 5 button"));
+		act->setKeyEvent(KeyState(KEYCODE_5, '5'));
+		act->addDefaultInputMapping("5"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE6", _("Phone 6 button"));
+		act->setKeyEvent(KeyState(KEYCODE_6, '6'));
+		act->addDefaultInputMapping("6"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE7", _("Phone 7 button"));
+		act->setKeyEvent(KeyState(KEYCODE_7, '7'));
+		act->addDefaultInputMapping("7"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE8", _("Phone 8 button"));
+		act->setKeyEvent(KeyState(KEYCODE_8, '8'));
+		act->addDefaultInputMapping("8"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONE9", _("Phone 9 button"));
+		act->setKeyEvent(KeyState(KEYCODE_9, '9'));
+		act->addDefaultInputMapping("9"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONEA", _("Phone * button"));
+		act->setKeyEvent(KeyState(KEYCODE_ASTERISK, '*'));
+		act->addDefaultInputMapping("ASTERISK"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("PHONEH", _("Phone # button"));
+		act->setKeyEvent(KeyState(KEYCODE_HASH, '#'));
+		act->addDefaultInputMapping("HASH"); // original keyboard
+		gameKeyMap->addAction(act);
+	} else if (gameId == "knossos") {
+		act = new Action("WTF", _("???"));
+		act->setKeyEvent(KeyState(KEYCODE_a, 'a', KBD_SHIFT));
+		act->addDefaultInputMapping("S+a"); // original keyboard
+		//TODO: extra joy control, e.g. "JOY_R+JOY_B"
+		gameKeyMap->addAction(act);
+	} else if (gameId == "jamesperis") {
+		act = new Action("HINT", _("Show hints / Dance move"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveUp, _("Dance move up"));
+		act->setKeyEvent(KEYCODE_UP);
+		act->addDefaultInputMapping("UP"); // original keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveDown, _("Dance move down"));
+		act->setKeyEvent(KEYCODE_DOWN);
+		act->addDefaultInputMapping("DOWN"); // original keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveLeft, _("Dance move left"));
+		act->setKeyEvent(KEYCODE_LEFT);
+		act->addDefaultInputMapping("LEFT"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveRight, _("Dance move right"));
+		act->setKeyEvent(KEYCODE_RIGHT);
+		act->addDefaultInputMapping("RIGHT"); // original keyboard
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PAGEUP", _("Previous page"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		gameKeyMap->addAction(act);
+
+		act = new Action("PAGEDN", _("Next page"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		gameKeyMap->addAction(act);
+
+		act = new Action("WTF", _("???"));
+		act->setKeyEvent(KEYCODE_F10);
+		act->addDefaultInputMapping("F10"); // original keyboard
+		act->addDefaultInputMapping("PAGEDOWN"); // original keyboard
+		//TODO: extra joy control, e.g. "JOY_R+JOY_B"
+		gameKeyMap->addAction(act);
+	} else if (gameId == "julia") {
+		act = new Action(kStandardActionSkip, _("Skip"));
+		act->setKeyEvent(KEYCODE_F12);
+		act->addDefaultInputMapping("F12"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "juliastars") {
+		act = new Action("CANCEL", _("Cancel input"));
+		act->setKeyEvent(KEYCODE_BACKSPACE);
+		act->addDefaultInputMapping("BACKSPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveUp, _("Up"));
+		act->setKeyEvent(KEYCODE_UP);
+		act->addDefaultInputMapping("UP"); // original keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveDown, _("Down"));
+		act->setKeyEvent(KEYCODE_DOWN);
+		act->addDefaultInputMapping("DOWN"); // original keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveLeft, _("Left"));
+		act->setKeyEvent(KEYCODE_LEFT);
+		act->addDefaultInputMapping("LEFT"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveRight, _("Right"));
+		act->setKeyEvent(KEYCODE_RIGHT);
+		act->addDefaultInputMapping("RIGHT"); // original keyboard
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("NOWAIT", _("Cancel waiting"));
+		act->setKeyEvent(KEYCODE_F11);
+		act->addDefaultInputMapping("F11"); // original keyboard
+		gameKeyMap->addAction(act);
+	} else if (gameId == "looky") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLUP", _("Scroll up"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("UP"); // extra keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLDN", _("Scroll down"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		act->addDefaultInputMapping("DOWN"); // extra keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRS", _("Save screenshot"));
+		act->setKeyEvent(KEYCODE_F12);
+		act->addDefaultInputMapping("F12"); // original keyboard
+		gameKeyMap->addAction(act);
+	} else if (gameId == "mentalrepairs") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("HELP", _("Show help"));
+		act->setKeyEvent(KEYCODE_F1);
+		act->addDefaultInputMapping("F1"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "mythguff") {
+		act = new Action("SCRLUP", _("Scroll up"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("UP"); // extra keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLDN", _("Scroll down"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		act->addDefaultInputMapping("DOWN"); // extra keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "oknytt") {
+		act = new Action("INV", _("Show inventory"));
+		act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
+		act->addDefaultInputMapping("TAB"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "onehelluvaday") {
+		act = new Action(kStandardActionMoveUp, _("Up"));
+		act->setKeyEvent(KEYCODE_UP);
+		act->addDefaultInputMapping("UP"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveDown, _("Down"));
+		act->setKeyEvent(KEYCODE_DOWN);
+		act->addDefaultInputMapping("DOWN"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SHIFT", _("Shift"));
+		act->setKeyEvent(KEYCODE_RSHIFT);
+		act->addDefaultInputMapping("LSHIFT"); // original keyboard control
+		act->addDefaultInputMapping("RSHIFT"); // original keyboard control
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "palladion") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRS", _("Save screenshot"));
+		act->setKeyEvent(KEYCODE_F12);
+		act->addDefaultInputMapping("F12"); // original keyboard
+		gameKeyMap->addAction(act);
+	} else if (gameId == "papasdaughters1") {
+		act = new Action("SCRLUP", _("Scroll up"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("UP"); // extra keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLDN", _("Scroll down"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		act->addDefaultInputMapping("DOWN"); // extra keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "papasdaughters2") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KEYCODE_F1);
+		act->addDefaultInputMapping("F1"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLUP", _("Scroll up"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("UP"); // extra keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLDN", _("Scroll down"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		act->addDefaultInputMapping("DOWN"); // extra keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "pizzamorgana") {
+		act = new Action("ACTNXT", _("Next action"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_RIGHT"); // original mouse
+		act->addDefaultInputMapping("RIGHTBRACKET"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("JOY_B"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("ACTPRV", _("Previous action"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("LEFTBRACKET"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionSkip, _("Skip"));
+		act->setKeyEvent(KeyState(KEYCODE_PERIOD, '.'));
+		act->addDefaultInputMapping("PERIOD"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("PAUSE", _("Pause"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("p"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionOpenSettings, _("Settings"));
+		act->setKeyEvent(KeyState(KEYCODE_s, 's'));
+		act->addDefaultInputMapping("s"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("ANSWR1", _("Dialogue answer 1"));
+		act->setKeyEvent(KeyState(KEYCODE_1, '1'));
+		act->addDefaultInputMapping("1"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("ANSWR2", _("Dialogue answer 2"));
+		act->setKeyEvent(KeyState(KEYCODE_2, '2'));
+		act->addDefaultInputMapping("2"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("ANSWR3", _("Dialogue answer 3"));
+		act->setKeyEvent(KeyState(KEYCODE_3, '3'));
+		act->addDefaultInputMapping("3"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("ANSWR4", _("Dialogue answer 4"));
+		act->setKeyEvent(KeyState(KEYCODE_4, '4'));
+		act->addDefaultInputMapping("4"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRS", _("Save screenshot"));
+		act->setKeyEvent(KeyState(KEYCODE_p, 'p', KBD_SHIFT));
+		act->addDefaultInputMapping("S+p"); // original keyboard
+		gameKeyMap->addAction(act);
+	} else if (gameId == "polechudes") {
+		act = new Action("SLOW", _("Spin slower"));
+		act->setKeyEvent(KEYCODE_F1);
+		act->addDefaultInputMapping("F1"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("FAST", _("Spin faster"));
+		act->setKeyEvent(KEYCODE_F2);
+		act->addDefaultInputMapping("F2"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "reptilesquest") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_x, 'x'));
+		act->addDefaultInputMapping("x"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("INV", _("Show inventory"));
+		act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
+		act->addDefaultInputMapping("i"); // original keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("MAP", _("Show map"));
+		act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
+		act->addDefaultInputMapping("m"); // original keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "reversion1") {
+		act = new Action("INV", _("Show inventory"));
+		act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
+		act->addDefaultInputMapping("i"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "reversion2" ||
+		gameId == "reversion3"
+	) {
+		act = new Action("INV", _("Show inventory"));
+		act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
+		act->addDefaultInputMapping("i"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveUp, _("Scroll up"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("UP"); // extra keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveDown, _("Scroll down"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		act->addDefaultInputMapping("DOWN"); // extra keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "ritter") {
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionSkip, _("Skip"));
+		act->setKeyEvent(KeyState(KEYCODE_BACKSPACE, ASCII_BACKSPACE));
+		act->addDefaultInputMapping("BACKSPACE"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "shaban") {
+		act = new Action("MAP", _("Show map"));
+		act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
+		act->addDefaultInputMapping("m"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "tib") {
+		act = new Action("SCRS", _("Save screenshot"));
+		act->setKeyEvent(KEYCODE_F9);
+		act->addDefaultInputMapping("F9"); // original keyboard
+		gameKeyMap->addAction(act);
+	} else if (gameId == "thelastcrownmh") {
+		act = new Action("EXIT", _("Exit"));
+		act->setKeyEvent(KEYCODE_F1);
+		act->addDefaultInputMapping("F1"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("GEOM", _("Show scene geometry"));
+		act->setKeyEvent(KEYCODE_F2);
+		act->addDefaultInputMapping("F2"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRS", _("Save screenshot"));
+		act->setKeyEvent(KEYCODE_F3);
+		act->addDefaultInputMapping("F3"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionOpenSettings, _("Settings"));
+		act->setKeyEvent(KEYCODE_F4);
+		act->addDefaultInputMapping("F4"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("NOWAIT", _("Cancel waiting"));
+		act->setKeyEvent(KEYCODE_F5);
+		act->addDefaultInputMapping("F5"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("DBGTXT", _("Debug print"));
+		act->setKeyEvent(KEYCODE_F6);
+		act->addDefaultInputMapping("F6"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("BEZIER", _("Bezier window"));
+		act->setKeyEvent(KEYCODE_F7);
+		act->addDefaultInputMapping("F7"); // original keyboard
+		gameKeyMap->addAction(act);
+	} else if (gameId == "thelostcrowngha") {
+		act = new Action("WTF", _("???"));
+		act->setKeyEvent(KEYCODE_F1);
+		act->addDefaultInputMapping("F1"); // original keyboard
+		//TODO: extra joy control, e.g. "JOY_R+JOY_B"
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRS", _("Save screenshot"));
+		act->setKeyEvent(KEYCODE_F3);
+		act->addDefaultInputMapping("F3"); // original keyboard
+		gameKeyMap->addAction(act);
+	} else if (gameId == "twc") {
+		act = new Action("ACT", _("Droid action"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveLeft, _("Left"));
+		act->setKeyEvent(KEYCODE_LEFT);
+		act->addDefaultInputMapping("LEFT"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveRight, _("Right"));
+		act->setKeyEvent(KEYCODE_RIGHT);
+		act->addDefaultInputMapping("RIGHT"); // original keyboard
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveUp, _("Up"));
+		act->setKeyEvent(KEYCODE_UP);
+		act->addDefaultInputMapping("UP"); // original keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveDown, _("Down"));
+		act->setKeyEvent(KEYCODE_DOWN);
+		act->addDefaultInputMapping("DOWN"); // original keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("GUIA", _("GUI variant A"));
+		act->setKeyEvent(KEYCODE_F10);
+		act->addDefaultInputMapping("F10"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
+		gameKeyMap->addAction(act);
+
+		act = new Action("GUIB", _("GUI variant B"));
+		act->setKeyEvent(KEYCODE_F11);
+		act->addDefaultInputMapping("F11"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
+		gameKeyMap->addAction(act);
+
+		act = new Action("WTF", _("???"));
+		act->setKeyEvent(KEYCODE_HOME);
+		act->addDefaultInputMapping("HOME"); // original keyboard
+		//TODO: extra joy control, e.g. "JOY_R+JOY_B"
+		gameKeyMap->addAction(act);
+	} else if (gameId == "vsevolod") {
+		act = new Action("INV", _("Show inventory"));
+		act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
+		act->addDefaultInputMapping("i"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("JRNL", _("Show journal"));
+		act->setKeyEvent(KeyState(KEYCODE_j, 'j'));
+		act->addDefaultInputMapping("j"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionOpenSettings, _("Music menu"));
+		act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
+		act->addDefaultInputMapping("m"); // original keyboard
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLUP", _("Scroll up"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("UP"); // extra keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLDN", _("Scroll down"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		act->addDefaultInputMapping("DOWN"); // extra keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "wtetris") {
+		act = new Action("ROTATE", _("Rotate"));
+		act->setKeyEvent(KEYCODE_UP);
+		act->addDefaultInputMapping("UP"); // original keyboard
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_RIGHT"); // extra mouse
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveLeft, _("Left"));
+		act->setKeyEvent(KEYCODE_LEFT);
+		act->addDefaultInputMapping("LEFT"); // original keyboard
+		act->addDefaultInputMapping("KP4"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // extra mouse
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveRight, _("Right"));
+		act->setKeyEvent(KEYCODE_RIGHT);
+		act->addDefaultInputMapping("RIGHT"); // original keyboard
+		act->addDefaultInputMapping("KP6"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // extra mouse
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("DROP", _("Drop"));
+		act->setKeyEvent(KEYCODE_DOWN);
+		act->addDefaultInputMapping("DOWN"); // original keyboard
+		act->addDefaultInputMapping("KP2"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+	} else if (gameId == "zbang") {
+		act = new Action("ACTNXT", _("Next action"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_RIGHT"); // original mouse
+		act->addDefaultInputMapping("RIGHTBRACKET"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		act->addDefaultInputMapping("JOY_B"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("ACTPRV", _("Previous action"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("LEFTBRACKET"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		gameKeyMap->addAction(act);
+
+		act = new Action("HINT", _("Show hints"));
+		act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
+		act->addDefaultInputMapping("TAB"); // original keyboard
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // extra mouse
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionSkip, _("Skip"));
+		act->setKeyEvent(KeyState(KEYCODE_PERIOD, '.'));
+		act->addDefaultInputMapping("PERIOD"); // original keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveUp, _("Walk forward"));
+		act->setKeyEvent(KEYCODE_UP);
+		act->addDefaultInputMapping("UP"); // original keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveLeft, _("Turn left"));
+		act->setKeyEvent(KEYCODE_LEFT);
+		act->addDefaultInputMapping("LEFT"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveRight, _("Turn right"));
+		act->setKeyEvent(KEYCODE_RIGHT);
+		act->addDefaultInputMapping("RIGHT"); // original keyboard
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+	} else {
+		warning("Autogenerated keymap for unknown WME game, id '%s', target '%s'", gameId.c_str(), target);
+
+		act = new Action("SPACE", _("Space"));
+		act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+		act->addDefaultInputMapping("SPACE"); // original keyboard
+		act->addDefaultInputMapping("JOY_Y"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveLeft, _("Left"));
+		act->setKeyEvent(KEYCODE_LEFT);
+		act->addDefaultInputMapping("LEFT"); // original keyboard
+		act->addDefaultInputMapping("JOY_LEFT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveRight, _("Right"));
+		act->setKeyEvent(KEYCODE_RIGHT);
+		act->addDefaultInputMapping("RIGHT"); // original keyboard
+		act->addDefaultInputMapping("JOY_RIGHT"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveUp, _("Up"));
+		act->setKeyEvent(KEYCODE_UP);
+		act->addDefaultInputMapping("UP"); // original keyboard
+		act->addDefaultInputMapping("JOY_UP"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action(kStandardActionMoveDown, _("Down"));
+		act->setKeyEvent(KEYCODE_DOWN);
+		act->addDefaultInputMapping("DOWN"); // original keyboard
+		act->addDefaultInputMapping("JOY_DOWN"); // extra joy
+		gameKeyMap->addAction(act);
+
+		act = new Action("MCLK", _("Middle Click"));
+		act->setMiddleClickEvent();
+		act->addDefaultInputMapping("MOUSE_MIDDLE"); // original mouse
+		engineKeyMap->addAction(act);
+
+		act = new Action("SCRLUP", _("Scroll up"));
+		act->setMouseWheelUpEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_UP"); // original mouse
+		gameKeyMap->addAction(act);
+
+		act = new Action("SCRLDN", _("Scroll down"));
+		act->setMouseWheelDownEvent();
+		act->addDefaultInputMapping("MOUSE_WHEEL_DOWN"); // original mouse
+		gameKeyMap->addAction(act);
+
+		act = new Action("KEYF1", _("F1"));
+		act->setKeyEvent(KEYCODE_F1);
+		act->addDefaultInputMapping("F1"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("KEYI", _("Key i"));
+		act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
+		act->addDefaultInputMapping("i"); // original keyboard
+		gameKeyMap->addAction(act);
+
+		act = new Action("TAB", _("Tab"));
+		act->setKeyEvent(KeyState(KEYCODE_TAB, ASCII_TAB));
+		act->addDefaultInputMapping("TAB"); // original keyboard
+		gameKeyMap->addAction(act);
+	}
+
+	result.push_back(gameKeyMap);
+	return result;
+
+}
+
+} // End of namespace Wintermute


Commit: 73f1da277329583bc5d66a7dc3293fb2c80fe9de
    https://github.com/scummvm/scummvm/commit/73f1da277329583bc5d66a7dc3293fb2c80fe9de
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-04-29T10:31:36+02:00

Commit Message:
GUI: View checked inactive checkbox as grey, not invisible

Changed paths:
  A gui/themes/scummmodern/checkbox_disabled.bmp
  A gui/themes/scummremastered/checkbox_disabled.bmp
    gui/ThemeEngine.cpp
    gui/ThemeEngine.h
    gui/themes/scummclassic/classic_gfx.stx
    gui/themes/scummmodern/scummmodern_gfx.stx
    gui/themes/scummremastered/remastered_gfx.stx


diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp
index b5f5c3d9cd..7aec42309c 100644
--- a/gui/ThemeEngine.cpp
+++ b/gui/ThemeEngine.cpp
@@ -141,9 +141,10 @@ static const DrawDataInfo kDrawDataDefaults[] = {
 	{kDDSliderHover,                "slider_hover",     kDrawLayerForeground,  kDDNone},
 	{kDDSliderDisabled,             "slider_disabled",  kDrawLayerForeground,  kDDNone},
 
-	{kDDCheckboxDefault,            "checkbox_default",         kDrawLayerBackground,   kDDNone},
-	{kDDCheckboxDisabled,           "checkbox_disabled",        kDrawLayerBackground,   kDDNone},
-	{kDDCheckboxSelected,           "checkbox_selected",        kDrawLayerForeground,  kDDCheckboxDefault},
+	{kDDCheckboxDefault,            "checkbox_default",           kDrawLayerBackground,   kDDNone},
+	{kDDCheckboxDisabled,           "checkbox_disabled",          kDrawLayerBackground,   kDDNone},
+	{kDDCheckboxSelected,           "checkbox_selected",          kDrawLayerForeground,  kDDCheckboxDefault},
+	{kDDCheckboxDisabledSelected,   "checkbox_disabled_selected", kDrawLayerForeground,  kDDCheckboxDisabled},
 
 	{kDDRadiobuttonDefault,         "radiobutton_default",      kDrawLayerBackground,   kDDNone},
 	{kDDRadiobuttonDisabled,        "radiobutton_disabled",     kDrawLayerBackground,   kDDNone},
@@ -994,7 +995,7 @@ void ThemeEngine::drawCheckbox(const Common::Rect &r, const Common::String &str,
 		dd = kDDCheckboxSelected;
 
 	if (state == kStateDisabled)
-		dd = kDDCheckboxDisabled;
+		dd = checked ? kDDCheckboxDisabledSelected : kDDCheckboxDisabled;
 
 	const int checkBoxSize = MIN((int)r.height(), getFontHeight());
 
diff --git a/gui/ThemeEngine.h b/gui/ThemeEngine.h
index a852bfcbe1..668fa4b9cf 100644
--- a/gui/ThemeEngine.h
+++ b/gui/ThemeEngine.h
@@ -94,6 +94,7 @@ enum DrawData {
 	kDDCheckboxDefault,
 	kDDCheckboxDisabled,
 	kDDCheckboxSelected,
+	kDDCheckboxDisabledSelected,
 
 	kDDRadiobuttonDefault,
 	kDDRadiobuttonDisabled,
diff --git a/gui/themes/scummclassic/classic_gfx.stx b/gui/themes/scummclassic/classic_gfx.stx
index a5fa994e89..8ccf72e94e 100644
--- a/gui/themes/scummclassic/classic_gfx.stx
+++ b/gui/themes/scummclassic/classic_gfx.stx
@@ -898,6 +898,23 @@
 		/>
 	</drawdata>
 
+	<drawdata id = 'checkbox_disabled_selected' cache = 'false'>
+		<text	font = 'text_default'
+				text_color = 'color_normal_disabled'
+				vertical_align = 'top'
+				horizontal_align = 'left'
+		/>
+		<drawstep	func = 'bevelsq'
+					bevel = '2'
+					fill = 'none'
+		/>
+		<drawstep	func = 'cross'
+					fill = 'foreground'
+					stroke = '2'
+					fg_color = 'lightgrey'
+		/>
+	</drawdata>
+
 	<drawdata id = 'checkbox_disabled' cache = 'false'>
 		<text	font = 'text_default'
 				text_color = 'color_normal_disabled'
diff --git a/gui/themes/scummmodern/checkbox_disabled.bmp b/gui/themes/scummmodern/checkbox_disabled.bmp
new file mode 100644
index 0000000000..fd85b0f7ed
Binary files /dev/null and b/gui/themes/scummmodern/checkbox_disabled.bmp differ
diff --git a/gui/themes/scummmodern/scummmodern_gfx.stx b/gui/themes/scummmodern/scummmodern_gfx.stx
index c449c1a30e..0e8758c73b 100644
--- a/gui/themes/scummmodern/scummmodern_gfx.stx
+++ b/gui/themes/scummmodern/scummmodern_gfx.stx
@@ -106,6 +106,7 @@
 		<bitmap filename = 'cursor_small.bmp'/>
 		<bitmap filename = 'checkbox.bmp'/>
 		<bitmap filename = 'checkbox_empty.bmp'/>
+		<bitmap filename = 'checkbox_disabled.bmp'/>
 		<bitmap filename = 'radiobutton.bmp'/>
 		<bitmap filename = 'radiobutton_empty.bmp'/>
 		<bitmap filename = 'logo_small.bmp'/>
@@ -1214,6 +1215,18 @@
 		/>
 	</drawdata>
 
+	<!-- Disabled selected checkbox -->
+	<drawdata id = 'checkbox_disabled_selected' cache = 'false'>
+		<text	font = 'text_default'
+				text_color = 'color_normal_disabled'
+				vertical_align = 'top'
+				horizontal_align = 'left'
+		/>
+		<drawstep	func = 'bitmap'
+					file = 'checkbox_disabled.bmp'
+		/>
+	</drawdata>
+
 	<!-- Disabled checkbox -->
 	<drawdata id = 'checkbox_disabled' cache = 'false'>
 		<text	font = 'text_default'
diff --git a/gui/themes/scummremastered/checkbox_disabled.bmp b/gui/themes/scummremastered/checkbox_disabled.bmp
new file mode 100644
index 0000000000..fd85b0f7ed
Binary files /dev/null and b/gui/themes/scummremastered/checkbox_disabled.bmp differ
diff --git a/gui/themes/scummremastered/remastered_gfx.stx b/gui/themes/scummremastered/remastered_gfx.stx
index c18a8bf358..5f7cbd572c 100644
--- a/gui/themes/scummremastered/remastered_gfx.stx
+++ b/gui/themes/scummremastered/remastered_gfx.stx
@@ -107,6 +107,7 @@
 		<bitmap filename = 'cursor_small.bmp'/>
 		<bitmap filename = 'checkbox.bmp'/>
 		<bitmap filename = 'checkbox_empty.bmp'/>
+		<bitmap filename = 'checkbox_disabled.bmp'/>
 		<bitmap filename = 'radiobutton.bmp'/>
 		<bitmap filename = 'radiobutton_empty.bmp'/>
 		<bitmap filename = 'logo_small.bmp'/>
@@ -1136,6 +1137,18 @@
 		/>
 	</drawdata>
 
+	<!-- Disabled selected checkbox -->
+	<drawdata id = 'checkbox_disabled_selected' cache = 'false'>
+		<text	font = 'text_default'
+				text_color = 'color_normal_disabled'
+				vertical_align = 'top'
+				horizontal_align = 'left'
+		/>
+		<drawstep	func = 'bitmap'
+					file = 'checkbox_disabled.bmp'
+		/>
+	</drawdata>
+
 	<!-- Disabled checkbox -->
 	<drawdata id = 'checkbox_disabled' cache = 'false'>
 		<text	font = 'text_default'


Commit: 11ea01612145762946a1c9a10a4bae0622323d12
    https://github.com/scummvm/scummvm/commit/11ea01612145762946a1c9a10a4bae0622323d12
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-04-29T10:31:36+02:00

Commit Message:
GUI: Define achievement tab widget at theme files

Changed paths:
    gui/themes/scummclassic/classic_layout.stx
    gui/themes/scummclassic/classic_layout_lowres.stx
    gui/themes/scummmodern/scummmodern_layout.stx
    gui/themes/scummmodern/scummmodern_layout_lowres.stx
    gui/themes/scummremastered/remastered_layout.stx
    gui/themes/scummremastered/remastered_layout_lowres.stx


diff --git a/gui/themes/scummclassic/classic_layout.stx b/gui/themes/scummclassic/classic_layout.stx
index 31193b6206..4c81dbed50 100644
--- a/gui/themes/scummclassic/classic_layout.stx
+++ b/gui/themes/scummclassic/classic_layout.stx
@@ -991,6 +991,12 @@
 		</layout>
 	</dialog>
 
+	<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
+		<layout type = 'vertical' padding = '0, 0, 0, 0'>
+			<widget name = 'Container'/>
+		</layout>
+	</dialog>
+
 	<dialog name = 'GameOptions_Graphics' overlays = 'Dialog.GameOptions.TabWidget'>
 		<layout type = 'vertical' padding = '0, 0, 0, 0'>
 			<widget name = 'Container'/>
@@ -1319,6 +1325,12 @@
 		</layout>
 	</dialog>
 
+	<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
+		<layout type = 'vertical' padding = '0, 0, 0, 0'>
+			<widget name = 'Container'/>
+		</layout>
+	</dialog>
+
 	<dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
 		<layout type = 'vertical' padding = '0, 0, 0, 0'>
 			<widget name = 'TabWidget' type = 'TabWidget'/>
diff --git a/gui/themes/scummclassic/classic_layout_lowres.stx b/gui/themes/scummclassic/classic_layout_lowres.stx
index 0516162449..69f3c53079 100644
--- a/gui/themes/scummclassic/classic_layout_lowres.stx
+++ b/gui/themes/scummclassic/classic_layout_lowres.stx
@@ -992,6 +992,12 @@
 		</layout>
 	</dialog>
 
+	<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
+		<layout type = 'vertical' padding = '0, 0, 0, 0'>
+			<widget name = 'Container'/>
+		</layout>
+	</dialog>
+
 	<dialog name = 'GameOptions_Graphics' overlays = 'Dialog.GameOptions.TabWidget'>
 		<layout type = 'vertical' padding = '0, 0, 0, 0'>
 			<widget name = 'Container'/>
@@ -1328,6 +1334,12 @@
 		</layout>
 	</dialog>
 
+	<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
+		<layout type = 'vertical' padding = '0, 0, 0, 0'>
+			<widget name = 'Container'/>
+		</layout>
+	</dialog>
+
 	<dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
 		<layout type = 'vertical' padding = '0, 0, 0, 0'>
 			<widget name = 'TabWidget' type = 'TabWidget'/>
diff --git a/gui/themes/scummmodern/scummmodern_layout.stx b/gui/themes/scummmodern/scummmodern_layout.stx
index f1d18251f2..c0da709324 100644
--- a/gui/themes/scummmodern/scummmodern_layout.stx
+++ b/gui/themes/scummmodern/scummmodern_layout.stx
@@ -1004,6 +1004,12 @@
 		</layout>
 	</dialog>
 
+	<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
+		<layout type = 'vertical' padding = '0, 0, 0, 0'>
+			<widget name = 'Container'/>
+		</layout>
+	</dialog>
+
 	<dialog name = 'GameOptions_Graphics' overlays = 'Dialog.GameOptions.TabWidget'>
 		<layout type = 'vertical' padding = '0, 0, 0, 0'>
 			<widget name = 'Container'/>
@@ -1332,6 +1338,12 @@
 		</layout>
 	</dialog>
 
+	<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
+		<layout type = 'vertical' padding = '0, 0, 0, 0'>
+			<widget name = 'Container'/>
+		</layout>
+	</dialog>
+
 	<dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
 		<layout type = 'vertical' padding = '0, 0, 0, 0'>
 			<widget name = 'TabWidget' type = 'TabWidget'/>
diff --git a/gui/themes/scummmodern/scummmodern_layout_lowres.stx b/gui/themes/scummmodern/scummmodern_layout_lowres.stx
index 854e673136..8584741681 100644
--- a/gui/themes/scummmodern/scummmodern_layout_lowres.stx
+++ b/gui/themes/scummmodern/scummmodern_layout_lowres.stx
@@ -991,6 +991,12 @@
 		</layout>
 	</dialog>
 
+	<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
+		<layout type = 'vertical' padding = '0, 0, 0, 0'>
+			<widget name = 'Container'/>
+		</layout>
+	</dialog>
+
 	<dialog name = 'GameOptions_Graphics' overlays = 'Dialog.GameOptions.TabWidget'>
 		<layout type = 'vertical' padding = '0, 0, 0, 0'>
 			<widget name = 'Container'/>
@@ -1328,6 +1334,12 @@
 		</layout>
 	</dialog>
 
+	<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
+		<layout type = 'vertical' padding = '0, 0, 0, 0'>
+			<widget name = 'Container'/>
+		</layout>
+	</dialog>
+
 	<dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
 		<layout type = 'vertical' padding = '0, 0, 0, 0'>
 			<widget name = 'TabWidget' type = 'TabWidget'/>
diff --git a/gui/themes/scummremastered/remastered_layout.stx b/gui/themes/scummremastered/remastered_layout.stx
index eff0392a63..c26c06da7e 100644
--- a/gui/themes/scummremastered/remastered_layout.stx
+++ b/gui/themes/scummremastered/remastered_layout.stx
@@ -1004,6 +1004,12 @@
 		</layout>
 	</dialog>
 
+	<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
+		<layout type = 'vertical' padding = '0, 0, 0, 0'>
+			<widget name = 'Container'/>
+		</layout>
+	</dialog>
+
 	<dialog name = 'GameOptions_Graphics' overlays = 'Dialog.GameOptions.TabWidget'>
 		<layout type = 'vertical' padding = '0, 0, 0, 0'>
 			<widget name = 'Container'/>
@@ -1332,6 +1338,12 @@
 		</layout>
 	</dialog>
 
+	<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
+		<layout type = 'vertical' padding = '0, 0, 0, 0'>
+			<widget name = 'Container'/>
+		</layout>
+	</dialog>
+
 	<dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
 		<layout type = 'vertical' padding = '0, 0, 0, 0'>
 			<widget name = 'TabWidget' type = 'TabWidget'/>
diff --git a/gui/themes/scummremastered/remastered_layout_lowres.stx b/gui/themes/scummremastered/remastered_layout_lowres.stx
index f1ab411db5..3432ca853c 100644
--- a/gui/themes/scummremastered/remastered_layout_lowres.stx
+++ b/gui/themes/scummremastered/remastered_layout_lowres.stx
@@ -991,6 +991,12 @@
 		</layout>
 	</dialog>
 
+	<dialog name = 'GameOptions_Achievements' overlays = 'Dialog.GameOptions.TabWidget'>
+		<layout type = 'vertical' padding = '0, 0, 0, 0'>
+			<widget name = 'Container'/>
+		</layout>
+	</dialog>
+
 	<dialog name = 'GameOptions_Graphics' overlays = 'Dialog.GameOptions.TabWidget'>
 		<layout type = 'vertical' padding = '0, 0, 0, 0'>
 			<widget name = 'Container'/>
@@ -1328,6 +1334,12 @@
 		</layout>
 	</dialog>
 
+	<dialog name = 'GlobalConfig_Achievements' overlays = 'Dialog.GlobalConfig.TabWidget'>
+		<layout type = 'vertical' padding = '0, 0, 0, 0'>
+			<widget name = 'Container'/>
+		</layout>
+	</dialog>
+
 	<dialog name = 'FluidSynthSettings' overlays = 'GlobalOptions' shading = 'dim'>
 		<layout type = 'vertical' padding = '0, 0, 0, 0'>
 			<widget name = 'TabWidget' type = 'TabWidget'/>


Commit: 8b96a6b7198e0b4b5bbb866a3e1a87bdd4b0051d
    https://github.com/scummvm/scummvm/commit/8b96a6b7198e0b4b5bbb866a3e1a87bdd4b0051d
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-04-29T10:31:36+02:00

Commit Message:
GUI: Recompile GUI files

Changed paths:
    gui/themes/default.inc
    gui/themes/scummclassic.zip
    gui/themes/scummmodern.zip
    gui/themes/scummremastered.zip


diff --git a/gui/themes/default.inc b/gui/themes/default.inc
index 4f831dd7ae..386f44e151 100644
--- a/gui/themes/default.inc
+++ b/gui/themes/default.inc
@@ -1,4500 +1,4536 @@
-const char *defaultXML1 = "<?xml version = '1.0'?>"
-;
- const char *defaultXML2 = "<render_info>"
-"<palette>"
-"<color name='black' "
-"rgb='0,0,0' "
-"/>"
-"<color name='lightgrey' "
-"rgb='104,104,104' "
-"/>"
-"<color name='darkgrey' "
-"rgb='64,64,64' "
-"/>"
-"<color name='green' "
-"rgb='32,160,32' "
-"/>"
-"<color name='green2' "
-"rgb='0,255,0' "
-"/>"
-"<color name='white' "
-"rgb='255,255,255' "
-"/>"
-"</palette>"
-"<fonts>"
-"<font id='text_default' "
-"file='helvb12.bdf' "
-"/>"
-"<font resolution='y<400' "
-"id='text_default' "
-"file='clR6x12.bdf' "
-"/>"
-"<font id='text_button' "
-"file='helvb12.bdf' "
-"/>"
-"<font resolution='y<400' "
-"id='text_button' "
-"file='clR6x12.bdf' "
-"/>"
-"<font id='text_normal' "
-"file='helvb12.bdf' "
-"/>"
-"<font resolution='y<400' "
-"id='text_normal' "
-"file='clR6x12.bdf' "
-"/>"
-"<font id='tooltip_normal' "
-"file='fixed5x8.bdf' "
-"/>"
-"<font id='console' "
-"file='builtinConsole' "
-"/>"
-"<text_color id='color_normal' "
-"color='green' "
-"/>"
-"<text_color id='color_normal_inverted' "
-"color='black' "
-"/>"
-"<text_color id='color_normal_hover' "
-"color='green2' "
-"/>"
-"<text_color id='color_normal_disabled' "
-"color='lightgrey' "
-"/>"
-"<text_color id='color_alternative' "
-"color='lightgrey' "
-"/>"
-"<text_color id='color_alternative_inverted' "
-"color='white' "
-"/>"
-"<text_color id='color_alternative_hover' "
-"color='176,176,176' "
-"/>"
-"<text_color id='color_alternative_disabled' "
-"color='darkgrey' "
-"/>"
-"<text_color id='color_button' "
-"color='green' "
-"/>"
-"<text_color id='color_button_hover' "
-"color='green2' "
-"/>"
-"<text_color id='color_button_disabled' "
-"color='lightgrey' "
-"/>"
-"</fonts>"
-"<defaults fill='foreground' fg_color='darkgrey' bg_color='black' shadow='0' bevel_color='lightgrey'/>"
-"<drawdata id='text_selection' cache='false'>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='lightgrey' "
-"/>"
-"</drawdata>"
-"<drawdata id='text_selection_focus' cache='false'>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='green' "
-"/>"
-"</drawdata>"
-"<drawdata id='mainmenu_bg' cache='false'>"
-"<drawstep func='fill' "
-"fill='foreground' "
-"fg_color='black' "
-"/>"
-"</drawdata>"
-"<drawdata id='special_bg' cache='false'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"/>"
-"</drawdata>"
-"<drawdata id='tooltip_bg' cache='false'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='foreground' "
-"fg_color='black' "
-"/>"
-"</drawdata>"
-"<drawdata id='separator' cache='false'>"
-"<drawstep func='square' "
-"fill='foreground' "
-"height='2' "
-"ypos='center' "
-"fg_color='lightgrey' "
-"/>"
-"</drawdata>"
-"<drawdata id='scrollbar_base' cache='false'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"/>"
-"</drawdata>"
-"<drawdata id='scrollbar_handle_hover' cache='false'>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='green2' "
-"/>"
-"</drawdata>"
-"<drawdata id='scrollbar_handle_idle' cache='false'>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='green' "
-"/>"
-"</drawdata>"
-"<drawdata id='scrollbar_button_idle' cache='false' resolution='y>399'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='10' "
-"height='10' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,3,0' "
-"orientation='top' "
-"/>"
-"</drawdata>"
-"<drawdata id='scrollbar_button_idle' cache='false' resolution='y<400'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='5' "
-"height='5' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,2,0' "
-"orientation='top' "
-"/>"
-"</drawdata>"
-"<drawdata id='scrollbar_button_hover' cache='false' resolution='y>399'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='10' "
-"height='10' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,3,0' "
-"orientation='top' "
-"/>"
-"</drawdata>"
-"<drawdata id='scrollbar_button_hover' cache='false' resolution='y<400'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='5' "
-"height='5' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,2,0' "
-"orientation='top' "
-"/>"
-"</drawdata>"
-"<drawdata id='tab_active' cache='false'>"
-"<text font='text_default' "
-"text_color='color_normal_hover' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='tab' "
-"bevel='2' "
-"radius='0' "
-"fill='none' "
-"/>"
-"</drawdata>"
-"<drawdata id='tab_inactive' cache='false'>"
-"<text font='text_default' "
-"text_color='color_normal' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='tab' "
-"bevel='2' "
-"radius='0' "
-"fill='none' "
-"/>"
-"</drawdata>"
-"<drawdata id='tab_background' cache='false'>"
-"</drawdata>"
-"<drawdata id='widget_slider' cache='false'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"</drawdata>"
-"<drawdata id='slider_disabled' cache='false'>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='lightgrey' "
-"/>"
-"</drawdata>"
-"<drawdata id='slider_full' cache='false'>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='green' "
-"/>"
-"</drawdata>"
-"<drawdata id='slider_hover' cache='false'>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='green2' "
-"/>"
-"</drawdata>"
-"<drawdata id='widget_small' cache='false'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"</drawdata>"
-"<drawdata id='popup_idle' cache='false' resolution='y>399'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='10' "
-"height='5' "
-"xpos='right' "
-"ypos='10' "
-"padding='0,0,7,0' "
-"orientation='bottom' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='10' "
-"height='5' "
-"xpos='right' "
-"ypos='4' "
-"padding='0,0,7,0' "
-"orientation='top' "
-"/>"
-"<text font='text_default' "
-"text_color='color_normal' "
-"vertical_align='center' "
-"horizontal_align='left' "
-"/>"
-"</drawdata>"
-"<drawdata id='popup_idle' cache='false' resolution='y<400'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='7' "
-"height='4' "
-"xpos='right' "
-"ypos='9' "
-"padding='0,0,3,0' "
-"orientation='bottom' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='7' "
-"height='4' "
-"xpos='right' "
-"ypos='4' "
-"padding='0,0,3,0' "
-"orientation='top' "
-"/>"
-"<text font='text_default' "
-"text_color='color_normal' "
-"vertical_align='center' "
-"horizontal_align='left' "
-"/>"
-"</drawdata>"
-"<drawdata id='popup_disabled' cache='false' resolution='y>399'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='10' "
-"height='5' "
-"xpos='right' "
-"ypos='10' "
-"padding='0,0,7,0' "
-"orientation='bottom' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='10' "
-"height='5' "
-"xpos='right' "
-"ypos='4' "
-"padding='0,0,7,0' "
-"orientation='top' "
-"/>"
-"<text font='text_default' "
-"text_color='color_normal_disabled' "
-"vertical_align='center' "
-"horizontal_align='left' "
-"/>"
-"</drawdata>"
-"<drawdata id='popup_disabled' cache='false' resolution='y<400'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='7' "
-"height='4' "
-"xpos='right' "
-"ypos='9' "
-"padding='0,0,3,0' "
-"orientation='bottom' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='7' "
-"height='4' "
-"xpos='right' "
-"ypos='4' "
-"padding='0,0,3,0' "
-"orientation='top' "
-"/>"
-"<text font='text_default' "
-"text_color='color_normal' "
-"vertical_align='center' "
-"horizontal_align='left' "
-"/>"
-"</drawdata>"
-"<drawdata id='popup_hover' cache='false' resolution='y>399'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='10' "
-"height='5' "
-"xpos='right' "
-"ypos='10' "
-"padding='0,0,7,0' "
-"orientation='bottom' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='10' "
-"height='5' "
-"xpos='right' "
-"ypos='4' "
-"padding='0,0,7,0' "
-"orientation='top' "
-"/>"
-"<text font='text_default' "
-"text_color='color_normal_hover' "
-"vertical_align='center' "
-"horizontal_align='left' "
-"/>"
-"</drawdata>"
-"<drawdata id='popup_hover' cache='false' resolution='y<400'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='7' "
-"height='4' "
-"xpos='right' "
-"ypos='9' "
-"padding='0,0,3,0' "
-"orientation='bottom' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='7' "
-"height='4' "
-"xpos='right' "
-"ypos='4' "
-"padding='0,0,3,0' "
-"orientation='top' "
-"/>"
-"<text font='text_default' "
-"text_color='color_normal' "
-"vertical_align='center' "
-"horizontal_align='left' "
-"/>"
-"</drawdata>"
-"<drawdata id='widget_textedit' cache='false'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"</drawdata>"
-"<drawdata id='plain_bg' cache='false'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"/>"
-"</drawdata>"
-"<drawdata id='caret' cache='false'>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='lightgrey' "
-"/>"
-"</drawdata>"
-"<drawdata id='default_bg' cache='false'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"/>"
-"</drawdata>"
-"<drawdata id='button_pressed' cache='false'>"
-"<text font='text_button' "
-"text_color='color_alternative_inverted' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='green' "
-"/>"
-"</drawdata>"
-"<drawdata id='button_idle' cache='false'>"
-"<text font='text_button' "
-"text_color='color_button' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"</drawdata>"
-"<drawdata id='button_hover' cache='false'>"
-"<text font='text_button' "
-"text_color='color_button_hover' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"</drawdata>"
-"<drawdata id='button_disabled' cache='false'>"
-"<text font='text_button' "
-"text_color='color_button_disabled' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"</drawdata>"
-"<drawdata id='dropdown_button_idle' cache='false' resolution='y>399'>"
-"<text font='text_button' "
-"text_color='color_button' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='8' "
-"height='6' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,4,0' "
-"orientation='bottom' "
-"/>"
-"<drawstep func='line' "
-"fg_color='lightgrey' "
-"stroke='2' "
-"fill='foreground' "
-"width='0' "
-"height='auto' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,17,1' "
-"/>"
-"</drawdata>"
-"<drawdata id='dropdown_button_idle' cache='false' resolution='y<400'>"
-"<text font='text_button' "
-"text_color='color_button' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='6' "
-"height='6' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,0,0' "
-"orientation='bottom' "
-"/>"
-"</drawdata>"
-"<drawdata id='dropdown_button_hover_left' cache='false' resolution='y>399'>"
-"<text font='text_button' "
-"text_color='color_button_hover' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='8' "
-"height='6' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,4,0' "
-"orientation='bottom' "
-"/>"
-"<drawstep func='line' "
-"fg_color='lightgrey' "
-"stroke='2' "
-"fill='foreground' "
-"width='0' "
-"height='auto' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,17,1' "
-"/>"
-"</drawdata>"
-"<drawdata id='dropdown_button_hover_left' cache='false' resolution='y<400'>"
-"<text font='text_button' "
-"text_color='color_button_hover' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='6' "
-"height='6' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,0,0' "
-"orientation='bottom' "
-"/>"
-"</drawdata>"
-"<drawdata id='dropdown_button_hover_right' cache='false' resolution='y>399'>"
-"<text font='text_button' "
-"text_color='color_button' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green2' "
-"fill='foreground' "
-"width='8' "
-"height='6' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,4,0' "
-"orientation='bottom' "
-"/>"
-"<drawstep func='line' "
-"fg_color='lightgrey' "
-"stroke='2' "
-"fill='foreground' "
-"width='0' "
-"height='auto' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,17,1' "
-"/>"
-"</drawdata>"
-"<drawdata id='dropdown_button_hover_right' cache='false' resolution='y<400'>"
-"<text font='text_button' "
-"text_color='color_button' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green2' "
-"fill='foreground' "
-"width='6' "
-"height='6' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,0,0' "
-"orientation='bottom' "
-"/>"
-"</drawdata>"
-"<drawdata id='dropdown_button_disabled' cache='false' resolution='y>399'>"
-"<text font='text_button' "
-"text_color='color_button_disabled' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='lightgrey' "
-"fill='foreground' "
-"width='8' "
-"height='6' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,4,0' "
-"orientation='bottom' "
-"/>"
-"<drawstep func='line' "
-"fg_color='lightgrey' "
-"stroke='2' "
-"fill='foreground' "
-"width='0' "
-"height='auto' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,17,1' "
-"/>"
-"</drawdata>"
-"<drawdata id='dropdown_button_disabled' cache='false' resolution='y<400'>"
-"<text font='text_button' "
-"text_color='color_button_disabled' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='lightgrey' "
-"fill='foreground' "
-"width='6' "
-"height='6' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,0,0' "
-"orientation='bottom' "
-"/>"
-"</drawdata>"
-"<drawdata id='dropdown_button_pressed_left' cache='false' resolution='y>399'>"
-"<text font='text_button' "
-"text_color='color_alternative_inverted' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='green' "
-"clip='0,0,-18,0' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='8' "
-"height='6' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,4,0' "
-"orientation='bottom' "
-"/>"
-"</drawdata>"
-"<drawdata id='dropdown_button_pressed_left' cache='false' resolution='y<400'>"
-"<text font='text_button' "
-"text_color='color_alternative_inverted' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='green' "
-"clip='0,0,-7,0' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='green' "
-"fill='foreground' "
-"width='6' "
-"height='6' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,0,0' "
-"orientation='bottom' "
-"/>"
-"</drawdata>"
-"<drawdata id='dropdown_button_pressed_right' cache='false' resolution='y>399'>"
-"<text font='text_button' "
-"text_color='color_button' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='green' "
-"clip='-16,0,0,0' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='white' "
-"fill='foreground' "
-"width='8' "
-"height='6' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,4,0' "
-"orientation='bottom' "
-"/>"
-"</drawdata>"
-"<drawdata id='dropdown_button_pressed_right' cache='false' resolution='y<400'>"
-"<text font='text_button' "
-"text_color='color_button' "
-"vertical_align='center' "
-"horizontal_align='center' "
-"/>"
-"<drawstep func='square' "
-"fill='foreground' "
-"fg_color='green' "
-"clip='-7,0,0,0' "
-"/>"
-"<drawstep func='triangle' "
-"fg_color='white' "
-"fill='foreground' "
-"width='6' "
-"height='6' "
-"xpos='right' "
-"ypos='center' "
-"padding='0,0,0,0' "
-"orientation='bottom' "
-"/>"
-"</drawdata>"
-"<drawdata id='checkbox_disabled' cache='false'>"
-"<text font='text_default' "
-"text_color='color_normal_disabled' "
-"vertical_align='top' "
-"horizontal_align='left' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"</drawdata>"
-"<drawdata id='checkbox_selected' cache='false'>"
-"<text font='text_default' "
-"text_color='color_normal' "
-"vertical_align='top' "
-"horizontal_align='left' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"<drawstep func='cross' "
-"fill='foreground' "
-"stroke='2' "
-"fg_color='green' "
-"/>"
-"</drawdata>"
-"<drawdata id='checkbox_default' cache='false'>"
-"<text font='text_default' "
-"text_color='color_normal' "
-"vertical_align='top' "
-"horizontal_align='left' "
-"/>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"fill='none' "
-"/>"
-"</drawdata>"
-"<drawdata id='radiobutton_default' cache='false'>"
-"<text font='text_default' "
-"text_color='color_normal' "
-"vertical_align='center' "
-"horizontal_align='left' "
-"/>"
-"<drawstep func='circle' "
-"width='7' "
-"height='7' "
-"radius='7' "
-"fill='background' "
-"bg_color='darkgrey' "
-"xpos='0' "
-"ypos='0' "
-"/>"
-"</drawdata>"
-"<drawdata id='radiobutton_selected' cache='false'>"
-"<text font='text_default' "
-"text_color='color_normal' "
-"vertical_align='center' "
-"horizontal_align='left' "
-"/>"
-"<drawstep func='circle' "
-"width='7' "
-"height='7' "
-"radius='7' "
-"fg_color='darkgrey' "
-"fill='none' "
-"xpos='0' "
-"ypos='0' "
-"/>"
-"<drawstep func='circle' "
-"width='7' "
-"height='7' "
-"radius='5' "
-"fg_color='green' "
-"fill='foreground' "
-"xpos='2' "
-"ypos='2' "
-"/>"
-"</drawdata>"
-"<drawdata id='radiobutton_disabled' cache='false'>"
-"<text font='text_default' "
-"text_color='color_normal_disabled' "
-"vertical_align='center' "
-"horizontal_align='left' "
-"/>"
-"<drawstep func='circle' "
-"width='7' "
-"height='7' "
-"radius='7' "
-"bg_color='lightgrey' "
-"fill='background' "
-"xpos='0' "
-"ypos='0' "
-"/>"
-"</drawdata>"
-"<drawdata id='widget_default' cache='false'>"
-"<drawstep func='bevelsq' "
-"bevel='2' "
-"/>"
-"</drawdata>"
-"<drawdata id='widget_small' cache='false'>"
-"<drawstep func='square' "
-"stroke='0' "
-"/>"
-"</drawdata>"
-"</render_info>"
-;
- const char *defaultXML3 = "<layout_info resolution='y>399'>"
-"<globals>"
-"<def var='Line.Height' value='16' />"
-"<def var='Font.Height' value='16' />"
-"<def var='About.OuterBorder' value='80'/>"
-"<def var='Layout.Spacing' value='8' />"
-"<def var='ShowLauncherLogo' value='0'/>"
-"<def var='ShowGlobalMenuLogo' value='0'/>"
-"<def var='ShowSearchPic' value='0'/>"
-"<def var='ShowChooserPics' value='0'/>"
-"<def var='ShowChooserPageDisplay' value='1'/>"
-"<def var='SaveLoadChooser.ExtInfo.Visible' value='1'/>"
-"<def var='RecorderDialog.ExtInfo.Visible' value='1'/>"
-"<def var='OnScreenDialog.ShowPics' value='0'/>"
-"<def var='KeyMapper.Spacing' value='10'/>"
-"<def var='KeyMapper.ButtonWidth' value='140'/>"
-"<def var='KeyMapper.ResetWidth' value='80'/>"
-"<def var='Tooltip.MaxWidth' value='200'/>"
-"<def var='Tooltip.XDelta' value='16'/> "
-"<def var='Tooltip.YDelta' value='16'/>"
-"<def var='Predictive.Button.Width' value='60' />"
-"<def var='Predictive.ShowDeletePic' value='0'/>"
-"<def var='DropdownButton.Width' value='17'/>"
-"<widget name='OptionsLabel' "
-"size='110,Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='SmallLabel' "
-"size='24,Globals.Line.Height' "
-"/>"
-"<widget name='CloudTabLabel' "
-"size='200,Globals.Line.Height' "
-"/>"
-"<widget name='CloudTabLabelValue' "
-"size='200,Globals.Line.Height' "
-"/>"
-"<widget name='ShortOptionsLabel' "
-"size='60,Globals.Line.Height' "
-"/>"
-"<widget name='Button' "
-"size='108,24' "
-"/>"
-"<widget name='WideButton' "
-"size='216,24' "
-"/>"
-"<widget name='Slider' "
-"size='128,18' "
-"/>"
-"<widget name='PopUp' "
-"size='-1,19' "
-"/>"
-"<widget name='Checkbox' "
-"size='-1,14' "
-"/>"
-"<widget name='Radiobutton' "
-"size='-1,Globals.Line.Height' "
-"/>"
-"<widget name='ListWidget' "
-"padding='5,0,8,0' "
-"/>"
-"<widget name='PopUpWidget' "
-"padding='7,5,0,0' "
-"/>"
-"<widget name='EditTextWidget' "
-"padding='5,5,0,0' "
-"/>"
-"<widget name='Console' "
-"padding='7,5,5,5' "
-"/>"
-"<widget name='Scrollbar' "
-"size='15,0' "
-"/>"
-"<widget name='TabWidget.Tab' "
-"size='40,27' "
-"padding='0,0,8,0' "
-"/>"
-"<widget name='TabWidget.Body' "
-"padding='0,0,0,0' "
-"/>"
-"<widget name='TabWidget.NavButton' "
-"size='15,18' "
-"padding='0,3,4,0' "
-"/>"
-"<widget name='EditRecordLabel' "
-"size='60,25' "
-"/>"
-"<widget name='EditRecord' "
-"size='240,25' "
-"/>"
-"</globals>"
-"<dialog name='Launcher' overlays='screen'>"
-"<layout type='vertical' align='center' padding='16,16,8,8'>"
-"<widget name='Version' "
-"height='Globals.Line.Height' "
-"textalign='center' "
-"/>"
-"<layout type='horizontal' spacing='5' padding='10,0,0,0'>"
-"<widget name='SearchDesc' "
-"width='60' "
-"height='Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='Search' "
-"width='150' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='SearchClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"<space />"
-"</layout>"
-"<widget name='GameList'/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
-"<widget name='LoadGameButton' "
-"height='20' "
-"/>"
-"<widget name='AddGameButton' "
-"height='20' "
-"/>"
-"<widget name='EditGameButton' "
-"height='20' "
-"/>"
-"<widget name='RemoveGameButton' "
-"height='20' "
-"/>"
-"</layout>"
-"<space size='4'/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
-"<widget name='QuitButton' "
-"height='20' "
-"/>"
-"<widget name='AboutButton' "
-"height='20' "
-"/>"
-"<widget name='OptionsButton' "
-"height='20' "
-"/>"
-"<widget name='StartButton' "
-"height='20' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='Browser' overlays='Dialog.Launcher.GameList' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,8'>"
-"<widget name='Headline' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Path' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='List'/>"
-"<layout type='vertical' padding='0,0,16,0'>"
-"<widget name='Hidden' "
-"type='Checkbox' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='Up' "
-"type='Button' "
-"/>"
-"<space/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Choose' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='FileBrowser' overlays='screen' inset='32' shading='dim'>"
-"<layout type='vertical' padding='16,16,16,16'>"
-"<widget name='Headline' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Filename' "
-"height='Globals.Line.Height' "
-"/>"
-"<space size='10' />"
-"<widget name='List'/>"
-"<layout type='vertical' padding='0,0,16,0'>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Choose' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions' overlays='Dialog.Launcher.GameList' shading='dim'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='TabWidget' type='TabWidget'/>"
-"<layout type='horizontal' padding='16,16,16,16'>"
-"<space/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Apply' "
-"type='Button' "
-"/>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Control' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<widget name='grOnScreenCheckbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='grTouchpadCheckbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='grSwapMenuAndBackBtnsCheckbox' "
-"type='Checkbox' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
-"<widget name='grKbdMouseSpeedDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='grKbdMouseSpeedSlider' "
-"type='Slider' "
-"/>"
-"<widget name='grKbdMouseSpeedLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='grJoystickDeadzoneDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='grJoystickDeadzoneSlider' "
-"type='Slider' "
-"/>"
-"<widget name='grJoystickDeadzoneLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_KeyMapper' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Graphics' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Graphics_Container' overlays='GlobalOptions_Graphics.Container'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='grModePopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='grModePopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='grRenderPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='grRenderPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='grStretchModePopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='grStretchModePopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<widget name='grAspectCheckbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='grFullscreenCheckbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='grFilteringCheckbox' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Shader' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='grShaderPopUpDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='grShaderPopUp' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Audio' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='auMidiPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='auMidiPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='auOPLPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='auOPLPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
-"<widget name='subToggleDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='subToggleSpeechOnly' "
-"type='Radiobutton' "
-"/>"
-"<widget name='subToggleSubOnly' "
-"type='Radiobutton' "
-"/>"
-"<widget name='subToggleSubBoth' "
-"type='Radiobutton' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
-"<widget name='subSubtitleSpeedDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='subSubtitleSpeedSlider' "
-"type='Slider' "
-"/>"
-"<widget name='subSubtitleSpeedLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Volume' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='horizontal' padding='16,16,16,16' spacing='8'>"
-"<layout type='vertical' padding='0,0,0,0' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='vcMusicText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='vcMusicSlider' "
-"type='Slider' "
-"/>"
-"<widget name='vcMusicLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='vcSfxText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='vcSfxSlider' "
-"type='Slider' "
-"/>"
-"<widget name='vcSfxLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='vcSpeechText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='vcSpeechSlider' "
-"type='Slider' "
-"/>"
-"<widget name='vcSpeechLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='vertical' padding='24,0,24,0' align='center'>"
-"<widget name='vcMuteCheckbox' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_MIDI' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='auPrefGmPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='auPrefGmPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='mcFontButton' "
-"type='Button' "
-"/>"
-"<widget name='mcFontPath' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='mcFontClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<widget name='mcMixedCheckbox' "
-"type='Checkbox' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='mcMidiGainText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='mcMidiGainSlider' "
-"type='Slider' "
-"/>"
-"<widget name='mcMidiGainLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<widget name='mcFluidSynthSettings' "
-"width='200' "
-"height='Globals.Button.Height' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_MT32' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='auPrefMt32PopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='auPrefMt32Popup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<widget name='mcMt32Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='mcGSCheckbox' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Paths' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='SaveButton' "
-"type='Button' "
-"/>"
-"<widget name='SavePath' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='SavePathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='ThemeButton' "
-"type='Button' "
-"/>"
-"<widget name='ThemePath' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='ThemePathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='ExtraButton' "
-"type='Button' "
-"/>"
-"<widget name='ExtraPath' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='ExtraPathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='16'>"
-"<widget name='PluginsButton' "
-"type='Button' "
-"/>"
-"<widget name='PluginsPath' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='PluginsPathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Misc' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Misc_Container' overlays='GlobalOptions_Misc.Container'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='ThemeButton' "
-"type='Button' "
-"/>"
-"<widget name='CurTheme' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='RendererPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='RendererPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='AutosavePeriodPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='AutosavePeriodPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='GuiLanguagePopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='GuiLanguagePopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='GuiLanguageUseGameLanguage' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='UseSystemDialogs' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='UpdatesPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='UpdatesPopup' "
-"type='PopUp' "
-"/>"
-"<widget name='UpdatesCheckManuallyButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"<widget name='KeysButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Cloud' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Cloud_Container' overlays='GlobalOptions_Cloud.Container'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='-19,7,0,0' spacing='10'>"
-"<layout type='vertical' padding='0,0,2,0' spacing='2'>"
-"<widget name='StoragePopupDesc' "
-"type='OptionsLabel' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,0,0' spacing='2'>"
-"<widget name='StoragePopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<layout type='vertical' padding='0,0,8,0' spacing='4'>"
-"<widget name='StorageDisabledHint' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='StorageEnableButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<layout type='vertical' padding='0,0,6,0' spacing='2'>"
-"<widget name='StorageUsernameDesc' "
-"type='CloudTabLabel' "
-"/>"
-"<widget name='StorageUsernameLabel' "
-"type='CloudTabLabelValue' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,6,0' spacing='2'>"
-"<widget name='StorageUsedSpaceDesc' "
-"type='CloudTabLabel' "
-"/>"
-"<widget name='StorageUsedSpaceLabel' "
-"type='CloudTabLabelValue' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<layout type='vertical' padding='0,0,6,0' spacing='2'>"
-"<widget name='StorageLastSyncDesc' "
-"type='CloudTabLabel' "
-"/>"
-"<widget name='StorageLastSyncLabel' "
-"type='CloudTabLabelValue' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,7,0' spacing='2'>"
-"<widget name='SyncSavesButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,-4,0' spacing='10' align='center'>"
-"<widget name='StorageSyncHint' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<layout type='vertical' padding='0,0,6,0' spacing='4'>"
-"<widget name='StorageDownloadHint' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='DownloadButton' "
-"type='WideButton' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<layout type='vertical' padding='0,0,8,0' spacing='4'>"
-"<widget name='StorageDisconnectHint' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='DisconnectButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='vertical' padding='0,0,6,0' spacing='2'>"
-"<widget name='StorageWizardNotConnectedHint' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,-2,0' spacing='10' align='center'>"
-"<layout type='vertical' padding='0,0,2,0' spacing='4'>"
-"<widget name='StorageWizardOpenLinkHint' "
-"width='106' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,1,0' spacing='4'>"
-"<widget name='StorageWizardLink' "
-"width='192' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,-2,0' spacing='10' align='center'>"
-"<widget name='StorageWizardCodeHint' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<layout type='vertical' padding='0,0,-2,0' spacing='2'>"
-"<widget name='StorageWizardCodeBox' "
-"width='108' "
-"height='24' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,-2,0' spacing='2'>"
-"<widget name='StorageWizardPasteButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,-2,0' spacing='10' align='center'>"
-"<widget name='StorageWizardConnectButton' "
-"type='Button' "
-"/>"
-"<widget name='StorageWizardConnectionStatusHint' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Network' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='RunServerButton' "
-"type='Button' "
-"/>"
-"<widget name='ServerInfoLabel' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='RootPathButton' "
-"type='Button' "
-"/>"
-"<widget name='RootPath' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='RootPathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='ServerPortDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='ServerPortEditText' "
-"width='70' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='ServerPortClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,0,0' spacing='4' align='center'>"
-"<widget name='FeatureDescriptionLine1' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='FeatureDescriptionLine2' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Cloud_DownloadDialog' overlays='Dialog.GlobalOptions'>"
-"<layout type='vertical' padding='16,16,16,8' spacing='8'>"
-"<widget name='RemoteDirectory' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='LocalDirectory' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='ProgressBar' "
-"height='Globals.Button.Height' "
-"/>"
-"<space size='1'/>"
-"<widget name='PercentText' "
-"height='Globals.Line.Height' "
-"textalign='center' "
-"/>"
-"<widget name='DownloadSize' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='DownloadSpeed' "
-"height='Globals.Line.Height' "
-"/>"
-"<space/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
-"<widget name='MainButton' "
-"type='Button' "
-"/>"
-"<space/>"
-"<widget name='CloseButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Cloud_ConnectionWizard' overlays='Dialog.GlobalOptions'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Cloud_ConnectionWizard_Container' overlays='GlobalOptions_Cloud_ConnectionWizard.Container'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='0'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<layout type='vertical' padding='0,0,0,0' spacing='6'>"
-"<widget name='Picture' "
-"width='109' "
-"height='109' "
-"/>"
-"<widget name='OpenUrlButton' "
-"type='Button' "
-"/>"
-"<widget name='PasteCodeButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,0,0' spacing='6'>"
-"<widget name='Headline' "
-"height='Globals.Line.Height' "
-"/>"
-"<space size='4' />"
-"<widget name='NavigateLine' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='URLLine' "
-"height='Globals.Line.Height' "
-"/>"
-"<space size='4' />"
-"<widget name='ReturnLine1' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='ReturnLine2' "
-"height='Globals.Line.Height' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='4' align='center'>"
-"<widget name='CodeBox1' "
-"width='70' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='CodeBox2' "
-"width='70' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='CodeBox3' "
-"width='70' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='CodeBox4' "
-"width='70' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='4' align='center'>"
-"<widget name='CodeBox5' "
-"width='70' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='CodeBox6' "
-"width='70' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='CodeBox7' "
-"width='70' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='CodeBox8' "
-"width='70' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<widget name='MessageLine' "
-"height='Globals.Line.Height' "
-"/>"
-"<space size='6' />"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='CancelButton' "
-"type='Button' "
-"/>"
-"<space />"
-"<widget name='ConnectButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Accessibility' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='16'>"
-"<widget name='TTSCheckbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='TTSVoiceSelection' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='KeysDialog' overlays='Dialog.GlobalOptions' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,8' align='center'>"
-"<widget name='Action' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='List'/>"
-"<widget name='Mapping' "
-"height='Globals.Line.Height' "
-"/>"
-"<space size='Globals.Line.Height'/>"
-"<layout type='horizontal'>"
-"<widget name='Map' "
-"type='Button' "
-"/>"
-"<space/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions' overlays='Dialog.Launcher.GameList' shading='dim'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='TabWidget' type='TabWidget'/>"
-"<layout type='horizontal' padding='16,16,16,16'>"
-"<space/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_KeyMapper' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Graphics' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Graphics_Container' overlays='GameOptions_Graphics.Container'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<import layout='Dialog.GlobalOptions_Graphics_Container' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Shader' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<import layout='Dialog.GlobalOptions_Shader' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Audio' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<import layout='Dialog.GlobalOptions_Audio' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_MIDI' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<import layout='Dialog.GlobalOptions_MIDI' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_MT32' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<import layout='Dialog.GlobalOptions_MT32' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Volume' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<import layout='Dialog.GlobalOptions_Volume' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Game' overlays='Dialog.GameOptions.TabWidget' shading='dim'>"
-"<layout type='vertical' padding='16,16,16,16'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='Id' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='Domain' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='Name' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='Desc' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='LangPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='LangPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='PlatformPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='PlatformPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Paths' overlays='Dialog.GameOptions.TabWidget' shading='dim'>"
-"<layout type='vertical' padding='16,16,16,16'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='Savepath' "
-"type='Button' "
-"/>"
-"<widget name='SavepathText' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='SavePathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='Extrapath' "
-"type='Button' "
-"/>"
-"<widget name='ExtrapathText' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='ExtraPathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='Gamepath' "
-"type='Button' "
-"/>"
-"<widget name='GamepathText' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Engine' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Engine_Container' overlays='GameOptions_Engine.Container'>"
-"<layout type='vertical' padding='16,16,16,16'>"
-"<widget name='customOption1Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='customOption2Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='customOption3Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='customOption4Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='customOption5Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='customOption6Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='customOption7Checkbox' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalMenu' overlays='screen_center'>"
-"<layout type='vertical' padding='16,16,16,16' align='center'>"
-"<widget name='Title' "
-"width='210' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Version' "
-"width='210' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Resume' "
-"width='150' "
-"height='Globals.Button.Height' "
-"/>"
-"<space size='10'/>"
-"<widget name='Load' "
-"width='150' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Save' "
-"width='150' "
-"height='Globals.Button.Height' "
-"/>"
-"<space size='10'/>"
-"<widget name='Options' "
-"width='150' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Help' "
-"width='150' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='About' "
-"width='150' "
-"height='Globals.Button.Height' "
-"/>"
-"<space size='10'/>"
-"<widget name='RTL' "
-"width='150' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Quit' "
-"width='150' "
-"height='Globals.Button.Height' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalConfig' overlays='screen_center' size='500,350' inset='8'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='TabWidget' type='TabWidget' "
-"/>"
-"<layout type='horizontal' padding='16,16,16,16'>"
-"<space />"
-"<widget name='Keys' "
-"type='Button' "
-"/>"
-"<space />"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalConfig_Engine' overlays='Dialog.GlobalConfig.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalConfig_Engine_Container' overlays='Dialog.GlobalConfig_Engine.Container'>"
-"<layout type='vertical' padding='16,16,16,16'>"
-"<import layout='Dialog.GameOptions_Engine_Container' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalConfig_Audio' overlays='Dialog.GlobalConfig.TabWidget'>"
-"<layout type='vertical' padding='8,8,8,8' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<layout type='vertical' padding='0,0,0,0' align='center'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='8'>"
-"<widget name='vcMusicText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='vcMusicSlider' "
-"type='Slider' "
-"/>"
-"<widget name='vcMusicLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='8'>"
-"<widget name='vcSfxText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='vcSfxSlider' "
-"type='Slider' "
-"/>"
-"<widget name='vcSfxLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='8'>"
-"<widget name='vcSpeechText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='vcSpeechSlider' "
-"type='Slider' "
-"/>"
-"<widget name='vcSpeechLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='vertical' padding='24,24,24,24' align='center'>"
-"<widget name='vcMuteCheckbox' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"</layout>"
-"<space size='8' />"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
-"<widget name='subToggleDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='subToggleSpeechOnly' "
-"type='Radiobutton' "
-"width='100' "
-"/>"
-"<widget name='subToggleSubOnly' "
-"type='Radiobutton' "
-"width='100' "
-"/>"
-"<widget name='subToggleSubBoth' "
-"type='Radiobutton' "
-"width='100' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
-"<widget name='subSubtitleSpeedDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='subSubtitleSpeedSlider' "
-"type='Slider' "
-"/>"
-"<widget name='subSubtitleSpeedLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalConfig_KeyMapper' overlays='Dialog.GlobalConfig.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='FluidSynthSettings' overlays='GlobalOptions' shading='dim'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='TabWidget' type='TabWidget'/>"
-"<layout type='horizontal' padding='16,16,16,16'>"
-"<space/>"
-"<widget name='ResetSettings' "
-"type='Button' "
-"/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='FluidSynthSettings_Chorus' overlays='Dialog.FluidSynthSettings.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='VoiceCountText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='VoiceCountSlider' "
-"type='Slider' "
-"/>"
-"<widget name='VoiceCountLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='LevelText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='LevelSlider' "
-"type='Slider' "
-"/>"
-"<widget name='LevelLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='SpeedText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='SpeedSlider' "
-"type='Slider' "
-"/>"
-"<widget name='SpeedLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='DepthText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='DepthSlider' "
-"type='Slider' "
-"/>"
-"<widget name='DepthLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='WaveFormTypeText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='WaveFormType' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='FluidSynthSettings_Reverb' overlays='Dialog.FluidSynthSettings.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='RoomSizeText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='RoomSizeSlider' "
-"type='Slider' "
-"/>"
-"<widget name='RoomSizeLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='DampingText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='DampingSlider' "
-"type='Slider' "
-"/>"
-"<widget name='DampingLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='WidthText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='WidthSlider' "
-"type='Slider' "
-"/>"
-"<widget name='WidthLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='LevelText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='LevelSlider' "
-"type='Slider' "
-"/>"
-"<widget name='LevelLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='FluidSynthSettings_Misc' overlays='Dialog.FluidSynthSettings.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='InterpolationText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='Interpolation' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='SaveLoadChooser' overlays='screen' inset='8' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,32' align='center'>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='Title' "
-"height='Globals.Line.Height' "
-"/>"
-"<space/>"
-"<widget name='PageDisplay' "
-"width='200' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,6' spacing='16'>"
-"<widget name='List' />"
-"<widget name='Thumbnail' "
-"width='180' "
-"height='155' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='ListSwitch' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"<widget name='GridSwitch' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"<space/>"
-"<widget name='Delete' "
-"type='Button' "
-"/>"
-"<space size='32'/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Choose' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='SaveLoadCloudSyncProgress' overlays='screen_center' inset='8' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,8' align='center'>"
-"<widget name='TitleText' "
-"width='496' "
-"height='Globals.Line.Height' "
-"textalign='center' "
-"/>"
-"<space size='1'/>"
-"<widget name='ProgressBar' "
-"width='496' "
-"height='Globals.Button.Height' "
-"/>"
-"<space size='1'/>"
-"<widget name='PercentText' "
-"width='496' "
-"height='Globals.Line.Height' "
-"textalign='center' "
-"/>"
-"<space size='1'/>"
-"<layout type='horizontal' padding='0,0,0,0' align='center' spacing='10'>"
-"<widget name='Cancel' "
-"width='150' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Background' "
-"width='150' "
-"height='Globals.Button.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='SavenameDialog' overlays='screen_center'>"
-"<layout type='vertical' padding='8,8,8,8'>"
-"<widget name='DescriptionText' "
-"width='320' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Description' "
-"height='19' "
-"/>"
-"<layout type='horizontal' padding='0,0,16,0'>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<space size='96'/>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='RecorderDialog' overlays='screen' inset='8' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,32' align='center'>"
-"<widget name='Title' "
-"height='Globals.Line.Height' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,16' spacing='16'>"
-"<widget name='List' />"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Thumbnail' "
-"width='180' "
-"height='170' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='NextScreenShotButton' "
-"width='25' "
-"height='25' "
-"/>"
-"<widget name='currentScreenshot' "
-"width='125' "
-"height='25' "
-"textalign='center' "
-"/>"
-"<widget name='PreviousScreenShotButton' "
-"width='25' "
-"height='25' "
-"/>"
-"</layout>"
-"<widget name='Author' height='Globals.Line.Height' />"
-"<widget name='Notes' height='Globals.Line.Height' />"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='Delete' "
-"type='Button' "
-"/>"
-"<space size='16'/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<space size='16'/>"
-"<widget name='Edit' "
-"type='Button' "
-"/>"
-"<widget name='Record' "
-"type='Button' "
-"/>"
-"<widget name='Playback' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='OnScreenDialog' overlays='screen_center'>"
-"<layout type='horizontal' spacing='5' padding='5,3,5,3' align='center'>"
-"<widget name='StopButton' "
-"width='32' "
-"height='32' "
-"/>"
-"<widget name='EditButton' "
-"width='32' "
-"height='32' "
-"/>"
-"<widget name='SwitchModeButton' "
-"width='32' "
-"height='32' "
-"/>"
-"<widget name='FastReplayButton' "
-"width='32' "
-"height='32' "
-"/>"
-"<widget name='TimeLabel' "
-"width='50' "
-"height='30' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='EditRecordDialog' overlays='screen_center'>"
-"<layout type='vertical' padding='8,8,8,8' align='center'>"
-"<widget name='Title' "
-"width='320' "
-"height='Globals.Line.Height' "
-"/>"
-"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
-"<widget name='AuthorLabel' "
-"type='EditRecordLabel' "
-"/>"
-"<widget name='AuthorEdit' "
-"type='EditRecord' "
-"/>"
-"</layout>"
-"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
-"<widget name='NameLabel' "
-"type='EditRecordLabel' "
-"/>"
-"<widget name='NameEdit' "
-"type='EditRecord' "
-"/>"
-"</layout>"
-"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
-"<widget name='NotesLabel' "
-"type='EditRecordLabel' "
-"/>"
-"<widget name='NotesEdit' "
-"type='EditRecord' "
-"/>"
-"</layout>"
-"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='OK' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='ScummHelp' overlays='screen_center'>"
-"<layout type='vertical' padding='8,8,8,8' align='center'>"
-"<widget name='Title' "
-"width='320' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='HelpText' "
-"height='200' "
-"/>"
-"<layout type='horizontal' padding='0,0,16,0'>"
-"<widget name='Prev' "
-"type='Button' "
-"/>"
-"<widget name='Next' "
-"type='Button' "
-"/>"
-"<space size='32'/>"
-"<widget name='Close' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='LoomTownsDifficultyDialog' overlays='screen_center'>"
-"<layout type='vertical' padding='8,8,8,8' align='center'>"
-"<widget name='Description1' "
-"width='320' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Description2' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Standard' "
-"type='Button' "
-"/>"
-"<widget name='Practice' "
-"type='Button' "
-"/>"
-"<widget name='Expert' "
-"type='Button' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='MassAdd' overlays='screen_center' shading='dim'>"
-"<layout type='vertical' padding='8,8,32,8' align='center'>"
-"<widget name='DirProgressText' "
-"width='480' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='GameProgressText' "
-"width='480' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='GameList' "
-"width='480' "
-"height='250' "
-"/>"
-"<layout type='horizontal' padding='8,8,8,8'>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='Predictive' overlays='screen_center'>"
-"<layout type='vertical' padding='5,5,5,5' align='center'>"
-"<widget name='Headline' "
-"height='Globals.Line.Height' "
-"width='210' "
-"textalign='center' "
-"/>"
-"<layout type='horizontal' padding='5,5,5,5'>"
-"<widget name='Word' "
-"width='190' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Delete' "
-"width='20' "
-"height='Globals.Button.Height' "
-"/>"
-"</layout>"
-"<space size='5' />"
-"<layout type='horizontal' padding='3,3,3,3'>"
-"<widget name='Button1' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Button2' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Button3' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='3,3,3,3'>"
-"<widget name='Button4' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Button5' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Button6' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='3,3,3,3'>"
-"<widget name='Button7' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Button8' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Button9' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='3,3,3,3'>"
-"<widget name='Pre' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Button0' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Next' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"</layout>"
-"<space size='5' />"
-"<layout type='horizontal' padding='3,3,3,3'>"
-"<widget name='Add' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"<space size='22'/>"
-"<widget name='Cancel' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='OK' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Button.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='DropdownDialog' overlays='screen_center' shading='luminance'>"
-"</dialog>"
-"<dialog name='UnknownGameDialog' overlays='Dialog.Launcher.GameList' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,0'>"
-"<widget name='TextContainer' "
-"/>"
-"<layout type='horizontal' padding='0,0,16,16'>"
-"<space/>"
-"<widget name='Report' "
-"type='Button' "
-"/>"
-"<widget name='Copy' "
-"type='Button' "
-"/>"
-"<widget name='Close' "
-"type='Button' "
-"/>"
-"<widget name='Add' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='TestbedOptions' overlays='screen_center' size='400,300'>"
-"<layout type='vertical' padding='8,8,8,8'>"
-"<widget name='Headline' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Info' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='List' "
-"/>"
-"<layout type='vertical' padding='0,0,16,0'>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='SelectAll' "
-"type='Button' "
-"/>"
-"<space/>"
-"<widget name='RunTests' "
-"type='Button' "
-"/>"
-"<widget name='Quit' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"</layout_info>"
-;
- const char *defaultXML4 = "<layout_info resolution='y<400'>"
-"<globals>"
-"<def var='Line.Height' value='12' />"
-"<def var='Font.Height' value='10' />"
-"<def var='About.OuterBorder' value='10'/>"
-"<def var='Layout.Spacing' value='8'/>"
-"<def var='ShowLauncherLogo' value='0'/>"
-"<def var='ShowGlobalMenuLogo' value='0'/>"
-"<def var='ShowSearchPic' value='0'/>"
-"<def var='ShowChooserPics' value='0'/>"
-"<def var='ShowChooserPageDisplay' value='0'/>"
-"<def var='SaveLoadChooser.ExtInfo.Visible' value='0'/>"
-"<def var='RecorderDialog.ExtInfo.Visible' value='0'/>"
-"<def var='OnScreenDialog.ShowPics' value='0'/>"
-"<def var='KeyMapper.Spacing' value='5'/>"
-"<def var='KeyMapper.ButtonWidth' value='100'/>"
-"<def var='KeyMapper.ResetWidth' value='60'/>"
-"<def var='Tooltip.MaxWidth' value='70'/>"
-"<def var='Tooltip.XDelta' value='8'/> "
-"<def var='Tooltip.YDelta' value='8'/>"
-"<def var='Predictive.Button.Width' value='45' />"
-"<def var='Predictive.Button.Height' value='15' />"
-"<def var='Predictive.ShowDeletePic' value='0'/>"
-"<def var='DropdownButton.Width' value='7'/>"
-"<widget name='Button' "
-"size='72,16' "
-"/>"
-"<widget name='WideButton' "
-"size='144,16' "
-"/>"
-"<widget name='Slider' "
-"size='85,12' "
-"/>"
-"<widget name='OptionsLabel' "
-"size='110,Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='SmallLabel' "
-"size='18,Globals.Line.Height' "
-"/>"
-"<widget name='CloudTabLabel' "
-"size='180,Globals.Line.Height' "
-"/>"
-"<widget name='CloudTabLabelValue' "
-"size='180,Globals.Line.Height' "
-"/>"
-"<widget name='PopUp' "
-"size='-1,15' "
-"/>"
-"<widget name='Checkbox' "
-"size='-1,Globals.Line.Height' "
-"/>"
-"<widget name='Radiobutton' "
-"size='-1,Globals.Line.Height' "
-"/>"
-"<widget name='ListWidget' "
-"padding='5,0,0,0' "
-"/>"
-"<widget name='PopUpWidget' "
-"padding='7,5,0,0' "
-"/>"
-"<widget name='EditTextWidget' "
-"padding='5,5,0,0' "
-"/>"
-"<widget name='Console' "
-"padding='7,5,5,5' "
-"/>"
-"<widget name='Scrollbar' "
-"size='9,0' "
-"/>"
-"<widget name='TabWidget.Tab' "
-"size='40,16' "
-"padding='0,0,2,0' "
-"/>"
-"<widget name='TabWidget.Body' "
-"padding='0,0,0,0' "
-"/>"
-"<widget name='TabWidget.NavButton' "
-"size='32,14' "
-"padding='0,0,1,0' "
-"/>"
-"<widget name='EditRecordLabel' "
-"size='60,Globals.Line.Height' "
-"/>"
-"<widget name='EditRecord' "
-"size='120,15' "
-"/>"
-"</globals>"
-"<dialog name='Launcher' overlays='screen'>"
-"<layout type='vertical' align='center' padding='6,6,2,2'>"
-"<widget name='Version' "
-"height='Globals.Line.Height' "
-"textalign='center' "
-"/>"
-"<layout type='horizontal' spacing='5' padding='0,0,0,0'>"
-"<widget name='SearchDesc' "
-"width='50' "
-"height='Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='Search' "
-"width='150' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='SearchClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"<space />"
-"</layout>"
-"<widget name='GameList'/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='8'>"
-"<widget name='LoadGameButton' "
-"height='12' "
-"/>"
-"<widget name='AddGameButton' "
-"height='12' "
-"/>"
-"<widget name='EditGameButton' "
-"height='12' "
-"/>"
-"<widget name='RemoveGameButton' "
-"height='12' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='8'>"
-"<widget name='QuitButton' "
-"height='12' "
-"/>"
-"<widget name='AboutButton' "
-"height='12' "
-"/>"
-"<widget name='OptionsButton' "
-"height='12' "
-"/>"
-"<widget name='StartButton' "
-"height='12' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='Browser' overlays='screen' inset='8' shading='dim'>"
-"<layout type='vertical' padding='8,8,0,4'>"
-"<widget name='Headline' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Path' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='List'/>"
-"<layout type='vertical' padding='0,0,8,0'>"
-"<widget name='Hidden' "
-"type='Checkbox' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='Up' "
-"type='Button' "
-"/>"
-"<space/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Choose' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='FileBrowser' overlays='screen' inset='16' shading='dim'>"
-"<layout type='vertical' padding='16,16,16,16'>"
-"<widget name='Headline' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Filename' "
-"height='Globals.Line.Height' "
-"/>"
-"<space size='5' />"
-"<widget name='List'/>"
-"<layout type='vertical' padding='0,0,16,0'>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Choose' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions' overlays='screen' inset='16' shading='dim'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='TabWidget' type='TabWidget'/>"
-"<layout type='horizontal' padding='8,8,8,8'>"
-"<space/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Apply' "
-"type='Button' "
-"/>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Control' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<widget name='grOnScreenCheckbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='grTouchpadCheckbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='grSwapMenuAndBackBtnsCheckbox' "
-"type='Checkbox' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
-"<widget name='grKbdMouseSpeedDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='grKbdMouseSpeedSlider' "
-"type='Slider' "
-"/>"
-"<widget name='grKbdMouseSpeedLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='grJoystickDeadzoneDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='grJoystickDeadzoneSlider' "
-"type='Slider' "
-"/>"
-"<widget name='grJoystickDeadzoneLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_KeyMapper' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Graphics' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Graphics_Container' overlays='GlobalOptions_Graphics.Container'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='grModePopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='grModePopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='grRenderPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='grRenderPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='grStretchModePopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='grStretchModePopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<widget name='grAspectCheckbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='grFullscreenCheckbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='grFilteringCheckbox' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Shader' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='grShaderPopUpDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='grShaderPopUp' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Audio' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='auMidiPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='auMidiPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='auOPLPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='auOPLPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='3' align='center'>"
-"<widget name='subToggleDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='subToggleSpeechOnly' "
-"type='Radiobutton' "
-"/>"
-"<widget name='subToggleSubOnly' "
-"type='Radiobutton' "
-"/>"
-"<widget name='subToggleSubBoth' "
-"type='Radiobutton' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='subSubtitleSpeedDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='subSubtitleSpeedSlider' "
-"type='Slider' "
-"/>"
-"<widget name='subSubtitleSpeedLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Volume' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='vcMusicText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='vcMusicSlider' "
-"type='Slider' "
-"/>"
-"<widget name='vcMusicLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='vcSfxText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='vcSfxSlider' "
-"type='Slider' "
-"/>"
-"<widget name='vcSfxLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='vcSpeechText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='vcSpeechSlider' "
-"type='Slider' "
-"/>"
-"<widget name='vcSpeechLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<space size='110' />"
-"<widget name='vcMuteCheckbox' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_MIDI' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='6'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='auPrefGmPopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='auPrefGmPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='16' align='center'>"
-"<widget name='mcFontButton' "
-"type='Button' "
-"/>"
-"<widget name='mcFontPath' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='mcFontClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<widget name='mcMixedCheckbox' "
-"type='Checkbox' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='mcMidiGainText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='mcMidiGainSlider' "
-"type='Slider' "
-"/>"
-"<widget name='mcMidiGainLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<widget name='mcFluidSynthSettings' "
-"width='150' "
-"height='Globals.Button.Height' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_MT32' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='auPrefMt32PopupDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='auPrefMt32Popup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<widget name='mcMt32Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='mcGSCheckbox' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Paths' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='16'>"
-"<widget name='SaveButton' "
-"type='Button' "
-"/>"
-"<widget name='SavePath' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='SavePathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='16'>"
-"<widget name='ThemeButton' "
-"type='Button' "
-"/>"
-"<widget name='ThemePath' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='ThemePathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='16'>"
-"<widget name='ExtraButton' "
-"type='Button' "
-"/>"
-"<widget name='ExtraPath' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='ExtraPathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='16'>"
-"<widget name='PluginsButton' "
-"type='Button' "
-"/>"
-"<widget name='PluginsPath' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='PluginsPathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Misc' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Misc_Container' overlays='GlobalOptions_Misc.Container'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='16'>"
-"<widget name='ThemeButton' "
-"type='Button' "
-"/>"
-"<widget name='CurTheme' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='RendererPopupDesc' "
-"width='80' "
-"height='Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='RendererPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='AutosavePeriodPopupDesc' "
-"width='80' "
-"height='Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='AutosavePeriodPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='GuiLanguagePopupDesc' "
-"width='80' "
-"height='Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='GuiLanguagePopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='GuiLanguageUseGameLanguage' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='UseSystemDialogs' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='UpdatesPopupDesc' "
-"width='80' "
-"height='Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='UpdatesPopup' "
-"type='PopUp' "
-"/>"
-"<widget name='UpdatesCheckManuallyButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"<widget name='KeysButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Cloud' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Cloud_Container' overlays='GlobalOptions_Cloud.Container'>"
-"<layout type='vertical' padding='10,13,10,10' spacing='8'>"
-"<layout type='horizontal' padding='-10,1,0,0' spacing='6'>"
-"<layout type='vertical' padding='0,0,1,0' spacing='1'>"
-"<widget name='StoragePopupDesc' "
-"width='100' "
-"height='Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,0,0' spacing='1'>"
-"<widget name='StoragePopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<layout type='vertical' padding='0,0,3,0' spacing='4'>"
-"<widget name='StorageDisabledHint' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='StorageEnableButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<layout type='vertical' padding='0,0,3,0' spacing='1'>"
-"<widget name='StorageUsernameDesc' "
-"type='CloudTabLabel' "
-"/>"
-"<widget name='StorageUsernameLabel' "
-"type='CloudTabLabelValue' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,3,0' spacing='1'>"
-"<widget name='StorageUsedSpaceDesc' "
-"type='CloudTabLabel' "
-"/>"
-"<widget name='StorageUsedSpaceLabel' "
-"type='CloudTabLabelValue' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<layout type='vertical' padding='0,0,3,0' spacing='1'>"
-"<widget name='StorageLastSyncDesc' "
-"type='CloudTabLabel' "
-"/>"
-"<widget name='StorageLastSyncLabel' "
-"type='CloudTabLabelValue' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,5,0' spacing='1'>"
-"<widget name='SyncSavesButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,-3,0' spacing='6' align='center'>"
-"<widget name='StorageSyncHint' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<layout type='vertical' padding='0,0,3,0' spacing='4'>"
-"<widget name='StorageDownloadHint' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='DownloadButton' "
-"type='WideButton' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<layout type='vertical' padding='0,0,3,0' spacing='4'>"
-"<widget name='StorageDisconnectHint' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='DisconnectButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='vertical' padding='0,0,3,0' spacing='1'>"
-"<widget name='StorageWizardNotConnectedHint' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,-3,0' spacing='6' align='center'>"
-"<layout type='vertical' padding='0,0,1,0' spacing='2'>"
-"<widget name='StorageWizardOpenLinkHint' "
-"width='90' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,1,0' spacing='4'>"
-"<widget name='StorageWizardLink' "
-"width='150' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,-2,0' spacing='6' align='center'>"
-"<widget name='StorageWizardCodeHint' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<layout type='vertical' padding='0,0,-2,0' spacing='2'>"
-"<widget name='StorageWizardCodeBox' "
-"width='72' "
-"height='16' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,-2,0' spacing='2'>"
-"<widget name='StorageWizardPasteButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,-2,0' spacing='6' align='center'>"
-"<widget name='StorageWizardConnectButton' "
-"type='Button' "
-"/>"
-"<widget name='StorageWizardConnectionStatusHint' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Network' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='RunServerButton' "
-"type='Button' "
-"/>"
-"<widget name='ServerInfoLabel' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='16' align='center'>"
-"<widget name='RootPathButton' "
-"type='Button' "
-"/>"
-"<widget name='RootPath' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='RootPathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='ServerPortDesc' "
-"width='80' "
-"height='Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='ServerPortEditText' "
-"width='60' "
-"height='16' "
-"/>"
-"<widget name='ServerPortClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,0,0' spacing='2' align='center'>"
-"<widget name='FeatureDescriptionLine1' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='FeatureDescriptionLine2' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Cloud_DownloadDialog' overlays='Dialog.GlobalOptions'>"
-"<layout type='vertical' padding='8,8,8,4' spacing='8'>"
-"<widget name='RemoteDirectory' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='LocalDirectory' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='ProgressBar' "
-"height='Globals.Button.Height' "
-"/>"
-"<space size='1'/>"
-"<widget name='PercentText' "
-"height='Globals.Line.Height' "
-"textalign='center' "
-"/>"
-"<widget name='DownloadSize' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='DownloadSpeed' "
-"height='Globals.Line.Height' "
-"/>"
-"<space/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6'>"
-"<widget name='MainButton' "
-"type='Button' "
-"/>"
-"<space/>"
-"<widget name='CloseButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Cloud_ConnectionWizard' overlays='Dialog.GlobalOptions'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Cloud_ConnectionWizard_Container' overlays='GlobalOptions_Cloud_ConnectionWizard.Container'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
-"<layout type='vertical' padding='0,0,0,0' spacing='4'>"
-"<widget name='Headline' "
-"height='Globals.Line.Height' "
-"/>"
-"<space size='2' />"
-"<widget name='NavigateLine' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='URLLine' "
-"height='Globals.Line.Height' "
-"/>"
-"<space size='2' />"
-"<widget name='ReturnLine1' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='ReturnLine2' "
-"height='Globals.Line.Height' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='4' align='center'>"
-"<widget name='CodeBox1' "
-"width='60' "
-"height='16' "
-"/>"
-"<widget name='CodeBox2' "
-"width='60' "
-"height='16' "
-"/>"
-"<widget name='CodeBox3' "
-"width='60' "
-"height='16' "
-"/>"
-"<widget name='CodeBox4' "
-"width='60' "
-"height='16' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='4' align='center'>"
-"<widget name='CodeBox5' "
-"width='60' "
-"height='16' "
-"/>"
-"<widget name='CodeBox6' "
-"width='60' "
-"height='16' "
-"/>"
-"<widget name='CodeBox7' "
-"width='60' "
-"height='16' "
-"/>"
-"<widget name='CodeBox8' "
-"width='60' "
-"height='16' "
-"/>"
-"</layout>"
-"<widget name='MessageLine' "
-"height='Globals.Line.Height' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='4' align='center'>"
-"<widget name='OpenUrlButton' "
-"type='Button' "
-"/>"
-"<widget name='PasteCodeButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='4' align='center'>"
-"<widget name='CancelButton' "
-"type='Button' "
-"/>"
-"<space />"
-"<widget name='ConnectButton' "
-"type='Button' "
-"/>"
-"</layout>"
-"<space size='6' />"
-"<widget name='Picture' width='1' height='1' />"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalOptions_Accessibility' overlays='Dialog.GlobalOptions.TabWidget'>"
-"<layout type='vertical' padding='16,16,16,16' spacing='16'>"
-"<widget name='TTSCheckbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='TTSVoiceSelection' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='KeysDialog' overlays='Dialog.GlobalOptions' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,8' align='center'>"
-"<widget name='Action' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='List'/>"
-"<widget name='Mapping' "
-"height='Globals.Line.Height' "
-"/>"
-"<space size='Globals.Line.Height'/>"
-"<layout type='horizontal'>"
-"<widget name='Map' "
-"type='Button' "
-"/>"
-"<space/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions' overlays='screen' inset='16' shading='dim'>"
-"<layout type='vertical' padding='0,0,0,0' spacing='16'>"
-"<widget name='TabWidget' type='TabWidget'/>"
-"<layout type='horizontal' padding='8,8,8,8'>"
-"<space/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_KeyMapper' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Graphics' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Graphics_Container' overlays='GameOptions_Graphics.Container'>"
-"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<import layout='Dialog.GlobalOptions_Graphics_Container' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Shader' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<import layout='Dialog.GlobalOptions_Shader' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Audio' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<import layout='Dialog.GlobalOptions_Audio' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_MIDI' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<import layout='Dialog.GlobalOptions_MIDI' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_MT32' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<import layout='Dialog.GlobalOptions_MT32' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Volume' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<import layout='Dialog.GlobalOptions_Volume' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Game' overlays='Dialog.GameOptions.TabWidget' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='Id' "
-"width='35' "
-"height='Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='Domain' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='Name' "
-"width='35' "
-"height='Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='Desc' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<space size='8'/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='LangPopupDesc' "
-"width='60' "
-"height='Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='LangPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='PlatformPopupDesc' "
-"width='60' "
-"height='Globals.Line.Height' "
-"textalign='right' "
-"/>"
-"<widget name='PlatformPopup' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Paths' overlays='Dialog.GameOptions.TabWidget' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='16' align='center'>"
-"<widget name='Savepath' "
-"type='Button' "
-"/>"
-"<widget name='SavepathText' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='SavePathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='16' align='center'>"
-"<widget name='Extrapath' "
-"type='Button' "
-"/>"
-"<widget name='ExtrapathText' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='ExtraPathClearButton' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='16' align='center'>"
-"<widget name='Gamepath' "
-"type='Button' "
-"/>"
-"<widget name='GamepathText' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Engine' overlays='Dialog.GameOptions.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GameOptions_Engine_Container' overlays='GameOptions_Engine.Container'>"
-"<layout type='vertical' padding='8,8,8,8'>"
-"<widget name='customOption1Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='customOption2Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='customOption3Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='customOption4Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='customOption5Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='customOption6Checkbox' "
-"type='Checkbox' "
-"/>"
-"<widget name='customOption7Checkbox' "
-"type='Checkbox' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalMenu' overlays='screen_center'>"
-"<layout type='vertical' padding='2,2,2,6' align='center' spacing='0'>"
-"<widget name='Title' "
-"width='160' "
-"height='12' "
-"/>"
-"<widget name='Version' "
-"width='160' "
-"height='14' "
-"/>"
-"<layout type='vertical' padding='0,0,3,0' align='center' spacing='6'>"
-"<widget name='Load' "
-"width='120' "
-"height='12' "
-"/>"
-"<widget name='Save' "
-"width='120' "
-"height='12' "
-"/>"
-"<space size='1'/>"
-"<widget name='Options' "
-"width='120' "
-"height='12' "
-"/>"
-"<widget name='Help' "
-"width='120' "
-"height='12' "
-"/>"
-"<widget name='About' "
-"width='120' "
-"height='12' "
-"/>"
-"<space size='1'/>"
-"<widget name='Resume' "
-"width='120' "
-"height='12' "
-"/>"
-"<widget name='RTL' "
-"width='120' "
-"height='12' "
-"/>"
-"<widget name='Quit' "
-"width='120' "
-"height='12' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalConfig' overlays='screen_center' size='300,220' inset='5' >"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='TabWidget' type='TabWidget' "
-"/>"
-"<layout type='horizontal' padding='8,8,0,8'>"
-"<space />"
-"<widget name='Keys' "
-"type='Button' "
-"/>"
-"<space />"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalConfig_Engine' overlays='Dialog.GlobalConfig.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalConfig_Engine_Container' overlays='Dialog.GlobalConfig_Engine.Container'>"
-"<layout type='vertical' padding='8,8,8,8'>"
-"<import layout='Dialog.GameOptions_Engine_Container' />"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalConfig_Audio' overlays='Dialog.GlobalConfig.TabWidget'>"
-"<layout type='vertical' padding='8,8,8,8'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='vcMusicText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='vcMusicSlider' "
-"type='Slider' "
-"/>"
-"<widget name='vcMusicLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='vcSfxText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='vcSfxSlider' "
-"type='Slider' "
-"/>"
-"<widget name='vcSfxLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='vcSpeechText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='vcSpeechSlider' "
-"type='Slider' "
-"/>"
-"<widget name='vcSpeechLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<space size='110' />"
-"<widget name='vcMuteCheckbox' "
-"type='Checkbox' "
-"width='80' "
-"/>"
-"</layout>"
-"<layout type='vertical' padding='0,0,0,0' spacing='1' align='center'>"
-"<widget name='subToggleDesc' "
-"type='OptionsLabel' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='subToggleSpeechOnly' "
-"type='Radiobutton' "
-"width='90' "
-"/>"
-"<widget name='subToggleSubOnly' "
-"type='Radiobutton' "
-"width='90' "
-"/>"
-"<widget name='subToggleSubBoth' "
-"type='Radiobutton' "
-"width='90' "
-"/>"
-"</layout>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
-"<widget name='subSubtitleSpeedDesc' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='subSubtitleSpeedSlider' "
-"type='Slider' "
-"/>"
-"<widget name='subSubtitleSpeedLabel' "
-"type='SmallLabel' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='GlobalConfig_KeyMapper' overlays='Dialog.GlobalConfig.TabWidget'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='Container'/>"
-"</layout>"
-"</dialog>"
-"<dialog name='FluidSynthSettings' overlays='GlobalOptions' shading='dim'>"
-"<layout type='vertical' padding='0,0,0,0'>"
-"<widget name='TabWidget' type='TabWidget'/>"
-"<layout type='horizontal' padding='8,8,8,8'>"
-"<space/>"
-"<widget name='ResetSettings' "
-"type='Button' "
-"/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='FluidSynthSettings_Chorus' overlays='Dialog.FluidSynthSettings.TabWidget'>"
-"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='VoiceCountText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='VoiceCountSlider' "
-"type='Slider' "
-"/>"
-"<widget name='VoiceCountLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='LevelText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='LevelSlider' "
-"type='Slider' "
-"/>"
-"<widget name='LevelLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='SpeedText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='SpeedSlider' "
-"type='Slider' "
-"/>"
-"<widget name='SpeedLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='DepthText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='DepthSlider' "
-"type='Slider' "
-"/>"
-"<widget name='DepthLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='WaveFormTypeText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='WaveFormType' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='FluidSynthSettings_Reverb' overlays='Dialog.FluidSynthSettings.TabWidget'>"
-"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
-"<widget name='EnableTabCheckbox' "
-"type='Checkbox' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='RoomSizeText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='RoomSizeSlider' "
-"type='Slider' "
-"/>"
-"<widget name='RoomSizeLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='DampingText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='DampingSlider' "
-"type='Slider' "
-"/>"
-"<widget name='DampingLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='WidthText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='WidthSlider' "
-"type='Slider' "
-"/>"
-"<widget name='WidthLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='LevelText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='LevelSlider' "
-"type='Slider' "
-"/>"
-"<widget name='LevelLabel' "
-"width='32' "
-"height='Globals.Line.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='FluidSynthSettings_Misc' overlays='Dialog.FluidSynthSettings.TabWidget'>"
-"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
-"<widget name='InterpolationText' "
-"type='OptionsLabel' "
-"/>"
-"<widget name='Interpolation' "
-"type='PopUp' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='SaveLoadChooser' overlays='screen' inset='8' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,8' align='center'>"
-"<widget name='Title' height='Globals.Line.Height'/>"
-"<widget name='List' />"
-"<layout type='horizontal' padding='0,0,16,0'>"
-"<widget name='ListSwitch' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"<widget name='GridSwitch' "
-"height='Globals.Line.Height' "
-"width='Globals.Line.Height' "
-"/>"
-"<space/>"
-"<widget name='Delete' "
-"type='Button' "
-"/>"
-"<space size='16'/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Choose' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='SaveLoadCloudSyncProgress' overlays='screen_center' inset='8' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,8' align='center'>"
-"<widget name='TitleText' "
-"width='240' "
-"height='Globals.Line.Height' "
-"textalign='center' "
-"/>"
-"<space size='1'/>"
-"<widget name='ProgressBar' "
-"width='240' "
-"height='Globals.Button.Height' "
-"/>"
-"<space size='1'/>"
-"<widget name='PercentText' "
-"width='240' "
-"height='Globals.Line.Height' "
-"textalign='center' "
-"/>"
-"<space size='1'/>"
-"<layout type='horizontal' padding='0,0,0,0' align='center' spacing='10'>"
-"<widget name='Cancel' "
-"width='100' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Background' "
-"width='100' "
-"height='Globals.Button.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='SavenameDialog' overlays='screen_center'>"
-"<layout type='vertical' padding='8,8,8,8'>"
-"<widget name='DescriptionText' "
-"width='180' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Description' "
-"height='19' "
-"/>"
-"<layout type='horizontal' padding='0,0,16,0'>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='RecorderDialog' overlays='screen' inset='8' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,4' align='center'>"
-"<widget name='Title' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='List' />"
-"<layout type='horizontal' padding='0,0,0,0' spacing='2'>"
-"<widget name='Edit' "
-"type='Button' "
-"/>"
-"<space />"
-"<widget name='Record' "
-"type='Button' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='0,0,0,0' spacing='2'>"
-"<widget name='Delete' "
-"type='Button' "
-"/>"
-"<space />"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='Playback' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='OnScreenDialog' overlays='screen_center'>"
-"<layout type='horizontal' spacing='5' padding='3,2,3,2' align='center'>"
-"<widget name='StopButton' "
-"width='16' "
-"height='16' "
-"/>"
-"<widget name='EditButton' "
-"width='16' "
-"height='16' "
-"/>"
-"<widget name='SwitchModeButton' "
-"width='16' "
-"height='16' "
-"/>"
-"<widget name='FastReplayButton' "
-"width='16' "
-"height='16' "
-"/>"
-"<widget name='TimeLabel' "
-"width='50' "
-"height='16' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='EditRecordDialog' overlays='screen_center'>"
-"<layout type='vertical' padding='8,8,8,8' align='center'>"
-"<widget name='Title' "
-"height='Globals.Line.Height' "
-"/>"
-"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
-"<widget name='AuthorLabel' "
-"type='EditRecordLabel' "
-"/>"
-"<widget name='AuthorEdit' "
-"type='EditRecord' "
-"/>"
-"</layout>"
-"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
-"<widget name='NameLabel' "
-"type='EditRecordLabel' "
-"/>"
-"<widget name='NameEdit' "
-"type='EditRecord' "
-"/>"
-"</layout>"
-"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
-"<widget name='NotesLabel' "
-"type='EditRecordLabel' "
-"/>"
-"<widget name='NotesEdit' "
-"type='EditRecord' "
-"/>"
-"</layout>"
-"<layout type='horizontal' spacing='5' padding='0,0,0,0'>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"<widget name='OK' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='ScummHelp' overlays='screen'>"
-"<layout type='vertical' padding='8,8,8,8'>"
-"<widget name='Title' "
-"width='180' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='HelpText' "
-"height='140' "
-"/>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='Prev' "
-"type='Button' "
-"/>"
-"<widget name='Next' "
-"type='Button' "
-"/>"
-"<space size='32'/>"
-"<widget name='Close' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='LoomTownsDifficultyDialog' overlays='screen_center'>"
-"<layout type='vertical' padding='8,8,8,8' align='center'>"
-"<widget name='Description1' "
-"width='280' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Description2' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Standard' "
-"type='Button' "
-"/>"
-"<widget name='Practice' "
-"type='Button' "
-"/>"
-"<widget name='Expert' "
-"type='Button' "
-"/>"
-"</layout>"
-"</dialog>"
-"<dialog name='MassAdd' overlays='screen_center' shading='dim'>"
-"<layout type='vertical' padding='4,4,16,4' align='center'>"
-"<widget name='DirProgressText' "
-"width='280' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='GameProgressText' "
-"width='280' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='GameList' "
-"width='280' "
-"height='100' "
-"/>"
-"<layout type='horizontal' padding='4,4,4,4'>"
-"<widget name='Ok' "
-"type='Button' "
-"/>"
-"<widget name='Cancel' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='Predictive' overlays='screen_center'>"
-"<layout type='vertical' padding='1,1,1,1' align='center'>"
-"<widget name='Headline' "
-"height='Globals.Line.Height' "
-"width='150' "
-"textalign='center' "
-"/>"
-"<layout type='horizontal' padding='3,3,3,3'>"
-"<widget name='Word' "
-"width='120' "
-"height='Globals.Button.Height' "
-"/>"
-"<widget name='Delete' "
-"width='20' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='3,3,3,3'>"
-"<widget name='Button1' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"<widget name='Button2' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"<widget name='Button3' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='3,3,3,3'>"
-"<widget name='Button4' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"<widget name='Button5' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"<widget name='Button6' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='3,3,3,3'>"
-"<widget name='Button7' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"<widget name='Button8' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"<widget name='Button9' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"</layout>"
-"<layout type='horizontal' padding='3,3,3,0'>"
-"<widget name='Pre' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"<widget name='Button0' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"<widget name='Next' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"</layout>"
-"<space size='3' />"
-"<layout type='horizontal' padding='3,3,0,3'>"
-"<widget name='Add' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"<widget name='Cancel' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"<widget name='OK' "
-"width='Globals.Predictive.Button.Width' "
-"height='Globals.Predictive.Button.Height' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='DropdownDialog' overlays='screen_center' shading='luminance'>"
-"</dialog>"
-"<dialog name='UnknownGameDialog' overlays='screen' inset='8' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,0'>"
-"<widget name='TextContainer' "
-"/>"
-"<layout type='horizontal' padding='0,0,8,8'>"
-"<space/>"
-"<widget name='Report' "
-"type='Button' "
-"/>"
-"<widget name='Copy' "
-"type='Button' "
-"/>"
-"<widget name='Close' "
-"type='Button' "
-"/>"
-"<widget name='Add' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"<dialog name='TestbedOptions' overlays='screen' inset='8' shading='dim'>"
-"<layout type='vertical' padding='8,8,8,8'>"
-"<widget name='Headline' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='Info' "
-"height='Globals.Line.Height' "
-"/>"
-"<widget name='List' "
-"/>"
-"<layout type='vertical' padding='0,0,8,0'>"
-"<layout type='horizontal' padding='0,0,0,0'>"
-"<widget name='SelectAll' "
-"type='Button' "
-"/>"
-"<space/>"
-"<widget name='RunTests' "
-"type='Button' "
-"/>"
-"<widget name='Quit' "
-"type='Button' "
-"/>"
-"</layout>"
-"</layout>"
-"</layout>"
-"</dialog>"
-"</layout_info>"
-;
-const char *defaultXML[] = { defaultXML1, defaultXML2, defaultXML3, defaultXML4 };
+const char *defaultXML1 = "<?xml version = '1.0'?>"
+;
+ const char *defaultXML2 = "<render_info>"
+"<palette>"
+"<color name='black' "
+"rgb='0,0,0' "
+"/>"
+"<color name='lightgrey' "
+"rgb='104,104,104' "
+"/>"
+"<color name='darkgrey' "
+"rgb='64,64,64' "
+"/>"
+"<color name='green' "
+"rgb='32,160,32' "
+"/>"
+"<color name='green2' "
+"rgb='0,255,0' "
+"/>"
+"<color name='white' "
+"rgb='255,255,255' "
+"/>"
+"</palette>"
+"<fonts>"
+"<font id='text_default' "
+"file='helvb12.bdf' "
+"/>"
+"<font resolution='y<400' "
+"id='text_default' "
+"file='clR6x12.bdf' "
+"/>"
+"<font id='text_button' "
+"file='helvb12.bdf' "
+"/>"
+"<font resolution='y<400' "
+"id='text_button' "
+"file='clR6x12.bdf' "
+"/>"
+"<font id='text_normal' "
+"file='helvb12.bdf' "
+"/>"
+"<font resolution='y<400' "
+"id='text_normal' "
+"file='clR6x12.bdf' "
+"/>"
+"<font id='tooltip_normal' "
+"file='fixed5x8.bdf' "
+"/>"
+"<font id='console' "
+"file='builtinConsole' "
+"/>"
+"<text_color id='color_normal' "
+"color='green' "
+"/>"
+"<text_color id='color_normal_inverted' "
+"color='black' "
+"/>"
+"<text_color id='color_normal_hover' "
+"color='green2' "
+"/>"
+"<text_color id='color_normal_disabled' "
+"color='lightgrey' "
+"/>"
+"<text_color id='color_alternative' "
+"color='lightgrey' "
+"/>"
+"<text_color id='color_alternative_inverted' "
+"color='white' "
+"/>"
+"<text_color id='color_alternative_hover' "
+"color='176,176,176' "
+"/>"
+"<text_color id='color_alternative_disabled' "
+"color='darkgrey' "
+"/>"
+"<text_color id='color_button' "
+"color='green' "
+"/>"
+"<text_color id='color_button_hover' "
+"color='green2' "
+"/>"
+"<text_color id='color_button_disabled' "
+"color='lightgrey' "
+"/>"
+"</fonts>"
+"<defaults fill='foreground' fg_color='darkgrey' bg_color='black' shadow='0' bevel_color='lightgrey'/>"
+"<drawdata id='text_selection' cache='false'>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='lightgrey' "
+"/>"
+"</drawdata>"
+"<drawdata id='text_selection_focus' cache='false'>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='green' "
+"/>"
+"</drawdata>"
+"<drawdata id='mainmenu_bg' cache='false'>"
+"<drawstep func='fill' "
+"fill='foreground' "
+"fg_color='black' "
+"/>"
+"</drawdata>"
+"<drawdata id='special_bg' cache='false'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"/>"
+"</drawdata>"
+"<drawdata id='tooltip_bg' cache='false'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='foreground' "
+"fg_color='black' "
+"/>"
+"</drawdata>"
+"<drawdata id='separator' cache='false'>"
+"<drawstep func='square' "
+"fill='foreground' "
+"height='2' "
+"ypos='center' "
+"fg_color='lightgrey' "
+"/>"
+"</drawdata>"
+"<drawdata id='scrollbar_base' cache='false'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"/>"
+"</drawdata>"
+"<drawdata id='scrollbar_handle_hover' cache='false'>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='green2' "
+"/>"
+"</drawdata>"
+"<drawdata id='scrollbar_handle_idle' cache='false'>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='green' "
+"/>"
+"</drawdata>"
+"<drawdata id='scrollbar_button_idle' cache='false' resolution='y>399'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='10' "
+"height='10' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,3,0' "
+"orientation='top' "
+"/>"
+"</drawdata>"
+"<drawdata id='scrollbar_button_idle' cache='false' resolution='y<400'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='5' "
+"height='5' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,2,0' "
+"orientation='top' "
+"/>"
+"</drawdata>"
+"<drawdata id='scrollbar_button_hover' cache='false' resolution='y>399'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='10' "
+"height='10' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,3,0' "
+"orientation='top' "
+"/>"
+"</drawdata>"
+"<drawdata id='scrollbar_button_hover' cache='false' resolution='y<400'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='5' "
+"height='5' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,2,0' "
+"orientation='top' "
+"/>"
+"</drawdata>"
+"<drawdata id='tab_active' cache='false'>"
+"<text font='text_default' "
+"text_color='color_normal_hover' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='tab' "
+"bevel='2' "
+"radius='0' "
+"fill='none' "
+"/>"
+"</drawdata>"
+"<drawdata id='tab_inactive' cache='false'>"
+"<text font='text_default' "
+"text_color='color_normal' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='tab' "
+"bevel='2' "
+"radius='0' "
+"fill='none' "
+"/>"
+"</drawdata>"
+"<drawdata id='tab_background' cache='false'>"
+"</drawdata>"
+"<drawdata id='widget_slider' cache='false'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"</drawdata>"
+"<drawdata id='slider_disabled' cache='false'>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='lightgrey' "
+"/>"
+"</drawdata>"
+"<drawdata id='slider_full' cache='false'>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='green' "
+"/>"
+"</drawdata>"
+"<drawdata id='slider_hover' cache='false'>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='green2' "
+"/>"
+"</drawdata>"
+"<drawdata id='widget_small' cache='false'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"</drawdata>"
+"<drawdata id='popup_idle' cache='false' resolution='y>399'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='10' "
+"height='5' "
+"xpos='right' "
+"ypos='10' "
+"padding='0,0,7,0' "
+"orientation='bottom' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='10' "
+"height='5' "
+"xpos='right' "
+"ypos='4' "
+"padding='0,0,7,0' "
+"orientation='top' "
+"/>"
+"<text font='text_default' "
+"text_color='color_normal' "
+"vertical_align='center' "
+"horizontal_align='left' "
+"/>"
+"</drawdata>"
+"<drawdata id='popup_idle' cache='false' resolution='y<400'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='7' "
+"height='4' "
+"xpos='right' "
+"ypos='9' "
+"padding='0,0,3,0' "
+"orientation='bottom' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='7' "
+"height='4' "
+"xpos='right' "
+"ypos='4' "
+"padding='0,0,3,0' "
+"orientation='top' "
+"/>"
+"<text font='text_default' "
+"text_color='color_normal' "
+"vertical_align='center' "
+"horizontal_align='left' "
+"/>"
+"</drawdata>"
+"<drawdata id='popup_disabled' cache='false' resolution='y>399'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='10' "
+"height='5' "
+"xpos='right' "
+"ypos='10' "
+"padding='0,0,7,0' "
+"orientation='bottom' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='10' "
+"height='5' "
+"xpos='right' "
+"ypos='4' "
+"padding='0,0,7,0' "
+"orientation='top' "
+"/>"
+"<text font='text_default' "
+"text_color='color_normal_disabled' "
+"vertical_align='center' "
+"horizontal_align='left' "
+"/>"
+"</drawdata>"
+"<drawdata id='popup_disabled' cache='false' resolution='y<400'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='7' "
+"height='4' "
+"xpos='right' "
+"ypos='9' "
+"padding='0,0,3,0' "
+"orientation='bottom' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='7' "
+"height='4' "
+"xpos='right' "
+"ypos='4' "
+"padding='0,0,3,0' "
+"orientation='top' "
+"/>"
+"<text font='text_default' "
+"text_color='color_normal' "
+"vertical_align='center' "
+"horizontal_align='left' "
+"/>"
+"</drawdata>"
+"<drawdata id='popup_hover' cache='false' resolution='y>399'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='10' "
+"height='5' "
+"xpos='right' "
+"ypos='10' "
+"padding='0,0,7,0' "
+"orientation='bottom' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='10' "
+"height='5' "
+"xpos='right' "
+"ypos='4' "
+"padding='0,0,7,0' "
+"orientation='top' "
+"/>"
+"<text font='text_default' "
+"text_color='color_normal_hover' "
+"vertical_align='center' "
+"horizontal_align='left' "
+"/>"
+"</drawdata>"
+"<drawdata id='popup_hover' cache='false' resolution='y<400'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='7' "
+"height='4' "
+"xpos='right' "
+"ypos='9' "
+"padding='0,0,3,0' "
+"orientation='bottom' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='7' "
+"height='4' "
+"xpos='right' "
+"ypos='4' "
+"padding='0,0,3,0' "
+"orientation='top' "
+"/>"
+"<text font='text_default' "
+"text_color='color_normal' "
+"vertical_align='center' "
+"horizontal_align='left' "
+"/>"
+"</drawdata>"
+"<drawdata id='widget_textedit' cache='false'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"</drawdata>"
+"<drawdata id='plain_bg' cache='false'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"/>"
+"</drawdata>"
+"<drawdata id='caret' cache='false'>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='lightgrey' "
+"/>"
+"</drawdata>"
+"<drawdata id='default_bg' cache='false'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"/>"
+"</drawdata>"
+"<drawdata id='button_pressed' cache='false'>"
+"<text font='text_button' "
+"text_color='color_alternative_inverted' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='green' "
+"/>"
+"</drawdata>"
+"<drawdata id='button_idle' cache='false'>"
+"<text font='text_button' "
+"text_color='color_button' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"</drawdata>"
+"<drawdata id='button_hover' cache='false'>"
+"<text font='text_button' "
+"text_color='color_button_hover' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"</drawdata>"
+"<drawdata id='button_disabled' cache='false'>"
+"<text font='text_button' "
+"text_color='color_button_disabled' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"</drawdata>"
+"<drawdata id='dropdown_button_idle' cache='false' resolution='y>399'>"
+"<text font='text_button' "
+"text_color='color_button' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='8' "
+"height='6' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,4,0' "
+"orientation='bottom' "
+"/>"
+"<drawstep func='line' "
+"fg_color='lightgrey' "
+"stroke='2' "
+"fill='foreground' "
+"width='0' "
+"height='auto' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,17,1' "
+"/>"
+"</drawdata>"
+"<drawdata id='dropdown_button_idle' cache='false' resolution='y<400'>"
+"<text font='text_button' "
+"text_color='color_button' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='6' "
+"height='6' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,0,0' "
+"orientation='bottom' "
+"/>"
+"</drawdata>"
+"<drawdata id='dropdown_button_hover_left' cache='false' resolution='y>399'>"
+"<text font='text_button' "
+"text_color='color_button_hover' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='8' "
+"height='6' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,4,0' "
+"orientation='bottom' "
+"/>"
+"<drawstep func='line' "
+"fg_color='lightgrey' "
+"stroke='2' "
+"fill='foreground' "
+"width='0' "
+"height='auto' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,17,1' "
+"/>"
+"</drawdata>"
+"<drawdata id='dropdown_button_hover_left' cache='false' resolution='y<400'>"
+"<text font='text_button' "
+"text_color='color_button_hover' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='6' "
+"height='6' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,0,0' "
+"orientation='bottom' "
+"/>"
+"</drawdata>"
+"<drawdata id='dropdown_button_hover_right' cache='false' resolution='y>399'>"
+"<text font='text_button' "
+"text_color='color_button' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green2' "
+"fill='foreground' "
+"width='8' "
+"height='6' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,4,0' "
+"orientation='bottom' "
+"/>"
+"<drawstep func='line' "
+"fg_color='lightgrey' "
+"stroke='2' "
+"fill='foreground' "
+"width='0' "
+"height='auto' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,17,1' "
+"/>"
+"</drawdata>"
+"<drawdata id='dropdown_button_hover_right' cache='false' resolution='y<400'>"
+"<text font='text_button' "
+"text_color='color_button' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green2' "
+"fill='foreground' "
+"width='6' "
+"height='6' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,0,0' "
+"orientation='bottom' "
+"/>"
+"</drawdata>"
+"<drawdata id='dropdown_button_disabled' cache='false' resolution='y>399'>"
+"<text font='text_button' "
+"text_color='color_button_disabled' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='lightgrey' "
+"fill='foreground' "
+"width='8' "
+"height='6' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,4,0' "
+"orientation='bottom' "
+"/>"
+"<drawstep func='line' "
+"fg_color='lightgrey' "
+"stroke='2' "
+"fill='foreground' "
+"width='0' "
+"height='auto' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,17,1' "
+"/>"
+"</drawdata>"
+"<drawdata id='dropdown_button_disabled' cache='false' resolution='y<400'>"
+"<text font='text_button' "
+"text_color='color_button_disabled' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='lightgrey' "
+"fill='foreground' "
+"width='6' "
+"height='6' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,0,0' "
+"orientation='bottom' "
+"/>"
+"</drawdata>"
+"<drawdata id='dropdown_button_pressed_left' cache='false' resolution='y>399'>"
+"<text font='text_button' "
+"text_color='color_alternative_inverted' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='green' "
+"clip='0,0,-18,0' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='8' "
+"height='6' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,4,0' "
+"orientation='bottom' "
+"/>"
+"</drawdata>"
+"<drawdata id='dropdown_button_pressed_left' cache='false' resolution='y<400'>"
+"<text font='text_button' "
+"text_color='color_alternative_inverted' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='green' "
+"clip='0,0,-7,0' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='green' "
+"fill='foreground' "
+"width='6' "
+"height='6' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,0,0' "
+"orientation='bottom' "
+"/>"
+"</drawdata>"
+"<drawdata id='dropdown_button_pressed_right' cache='false' resolution='y>399'>"
+"<text font='text_button' "
+"text_color='color_button' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='green' "
+"clip='-16,0,0,0' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='white' "
+"fill='foreground' "
+"width='8' "
+"height='6' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,4,0' "
+"orientation='bottom' "
+"/>"
+"</drawdata>"
+"<drawdata id='dropdown_button_pressed_right' cache='false' resolution='y<400'>"
+"<text font='text_button' "
+"text_color='color_button' "
+"vertical_align='center' "
+"horizontal_align='center' "
+"/>"
+"<drawstep func='square' "
+"fill='foreground' "
+"fg_color='green' "
+"clip='-7,0,0,0' "
+"/>"
+"<drawstep func='triangle' "
+"fg_color='white' "
+"fill='foreground' "
+"width='6' "
+"height='6' "
+"xpos='right' "
+"ypos='center' "
+"padding='0,0,0,0' "
+"orientation='bottom' "
+"/>"
+"</drawdata>"
+"<drawdata id='checkbox_disabled_selected' cache='false'>"
+"<text font='text_default' "
+"text_color='color_normal_disabled' "
+"vertical_align='top' "
+"horizontal_align='left' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='cross' "
+"fill='foreground' "
+"stroke='2' "
+"fg_color='lightgrey' "
+"/>"
+"</drawdata>"
+"<drawdata id='checkbox_disabled' cache='false'>"
+"<text font='text_default' "
+"text_color='color_normal_disabled' "
+"vertical_align='top' "
+"horizontal_align='left' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"</drawdata>"
+"<drawdata id='checkbox_selected' cache='false'>"
+"<text font='text_default' "
+"text_color='color_normal' "
+"vertical_align='top' "
+"horizontal_align='left' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"<drawstep func='cross' "
+"fill='foreground' "
+"stroke='2' "
+"fg_color='green' "
+"/>"
+"</drawdata>"
+"<drawdata id='checkbox_default' cache='false'>"
+"<text font='text_default' "
+"text_color='color_normal' "
+"vertical_align='top' "
+"horizontal_align='left' "
+"/>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"fill='none' "
+"/>"
+"</drawdata>"
+"<drawdata id='radiobutton_default' cache='false'>"
+"<text font='text_default' "
+"text_color='color_normal' "
+"vertical_align='center' "
+"horizontal_align='left' "
+"/>"
+"<drawstep func='circle' "
+"width='7' "
+"height='7' "
+"radius='7' "
+"fill='background' "
+"bg_color='darkgrey' "
+"xpos='0' "
+"ypos='0' "
+"/>"
+"</drawdata>"
+"<drawdata id='radiobutton_selected' cache='false'>"
+"<text font='text_default' "
+"text_color='color_normal' "
+"vertical_align='center' "
+"horizontal_align='left' "
+"/>"
+"<drawstep func='circle' "
+"width='7' "
+"height='7' "
+"radius='7' "
+"fg_color='darkgrey' "
+"fill='none' "
+"xpos='0' "
+"ypos='0' "
+"/>"
+"<drawstep func='circle' "
+"width='7' "
+"height='7' "
+"radius='5' "
+"fg_color='green' "
+"fill='foreground' "
+"xpos='2' "
+"ypos='2' "
+"/>"
+"</drawdata>"
+"<drawdata id='radiobutton_disabled' cache='false'>"
+"<text font='text_default' "
+"text_color='color_normal_disabled' "
+"vertical_align='center' "
+"horizontal_align='left' "
+"/>"
+"<drawstep func='circle' "
+"width='7' "
+"height='7' "
+"radius='7' "
+"bg_color='lightgrey' "
+"fill='background' "
+"xpos='0' "
+"ypos='0' "
+"/>"
+"</drawdata>"
+"<drawdata id='widget_default' cache='false'>"
+"<drawstep func='bevelsq' "
+"bevel='2' "
+"/>"
+"</drawdata>"
+"<drawdata id='widget_small' cache='false'>"
+"<drawstep func='square' "
+"stroke='0' "
+"/>"
+"</drawdata>"
+"</render_info>"
+;
+ const char *defaultXML3 = "<layout_info resolution='y>399'>"
+"<globals>"
+"<def var='Line.Height' value='16' />"
+"<def var='Font.Height' value='16' />"
+"<def var='About.OuterBorder' value='80'/>"
+"<def var='Layout.Spacing' value='8' />"
+"<def var='ShowLauncherLogo' value='0'/>"
+"<def var='ShowGlobalMenuLogo' value='0'/>"
+"<def var='ShowSearchPic' value='0'/>"
+"<def var='ShowChooserPics' value='0'/>"
+"<def var='ShowChooserPageDisplay' value='1'/>"
+"<def var='SaveLoadChooser.ExtInfo.Visible' value='1'/>"
+"<def var='RecorderDialog.ExtInfo.Visible' value='1'/>"
+"<def var='OnScreenDialog.ShowPics' value='0'/>"
+"<def var='KeyMapper.Spacing' value='10'/>"
+"<def var='KeyMapper.ButtonWidth' value='140'/>"
+"<def var='KeyMapper.ResetWidth' value='80'/>"
+"<def var='Tooltip.MaxWidth' value='200'/>"
+"<def var='Tooltip.XDelta' value='16'/> "
+"<def var='Tooltip.YDelta' value='16'/>"
+"<def var='Predictive.Button.Width' value='60' />"
+"<def var='Predictive.ShowDeletePic' value='0'/>"
+"<def var='DropdownButton.Width' value='17'/>"
+"<widget name='OptionsLabel' "
+"size='110,Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='SmallLabel' "
+"size='24,Globals.Line.Height' "
+"/>"
+"<widget name='CloudTabLabel' "
+"size='200,Globals.Line.Height' "
+"/>"
+"<widget name='CloudTabLabelValue' "
+"size='200,Globals.Line.Height' "
+"/>"
+"<widget name='ShortOptionsLabel' "
+"size='60,Globals.Line.Height' "
+"/>"
+"<widget name='Button' "
+"size='108,24' "
+"/>"
+"<widget name='WideButton' "
+"size='216,24' "
+"/>"
+"<widget name='Slider' "
+"size='128,18' "
+"/>"
+"<widget name='PopUp' "
+"size='-1,19' "
+"/>"
+"<widget name='Checkbox' "
+"size='-1,14' "
+"/>"
+"<widget name='Radiobutton' "
+"size='-1,Globals.Line.Height' "
+"/>"
+"<widget name='ListWidget' "
+"padding='5,0,8,0' "
+"/>"
+"<widget name='PopUpWidget' "
+"padding='7,5,0,0' "
+"/>"
+"<widget name='EditTextWidget' "
+"padding='5,5,0,0' "
+"/>"
+"<widget name='Console' "
+"padding='7,5,5,5' "
+"/>"
+"<widget name='Scrollbar' "
+"size='15,0' "
+"/>"
+"<widget name='TabWidget.Tab' "
+"size='40,27' "
+"padding='0,0,8,0' "
+"/>"
+"<widget name='TabWidget.Body' "
+"padding='0,0,0,0' "
+"/>"
+"<widget name='TabWidget.NavButton' "
+"size='15,18' "
+"padding='0,3,4,0' "
+"/>"
+"<widget name='EditRecordLabel' "
+"size='60,25' "
+"/>"
+"<widget name='EditRecord' "
+"size='240,25' "
+"/>"
+"</globals>"
+"<dialog name='Launcher' overlays='screen'>"
+"<layout type='vertical' align='center' padding='16,16,8,8'>"
+"<widget name='Version' "
+"height='Globals.Line.Height' "
+"textalign='center' "
+"/>"
+"<layout type='horizontal' spacing='5' padding='10,0,0,0'>"
+"<widget name='SearchDesc' "
+"width='60' "
+"height='Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='Search' "
+"width='150' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='SearchClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"<space />"
+"</layout>"
+"<widget name='GameList'/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
+"<widget name='LoadGameButton' "
+"height='20' "
+"/>"
+"<widget name='AddGameButton' "
+"height='20' "
+"/>"
+"<widget name='EditGameButton' "
+"height='20' "
+"/>"
+"<widget name='RemoveGameButton' "
+"height='20' "
+"/>"
+"</layout>"
+"<space size='4'/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
+"<widget name='QuitButton' "
+"height='20' "
+"/>"
+"<widget name='AboutButton' "
+"height='20' "
+"/>"
+"<widget name='OptionsButton' "
+"height='20' "
+"/>"
+"<widget name='StartButton' "
+"height='20' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='Browser' overlays='Dialog.Launcher.GameList' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,8'>"
+"<widget name='Headline' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Path' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='List'/>"
+"<layout type='vertical' padding='0,0,16,0'>"
+"<widget name='Hidden' "
+"type='Checkbox' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='Up' "
+"type='Button' "
+"/>"
+"<space/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Choose' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='FileBrowser' overlays='screen' inset='32' shading='dim'>"
+"<layout type='vertical' padding='16,16,16,16'>"
+"<widget name='Headline' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Filename' "
+"height='Globals.Line.Height' "
+"/>"
+"<space size='10' />"
+"<widget name='List'/>"
+"<layout type='vertical' padding='0,0,16,0'>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Choose' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions' overlays='Dialog.Launcher.GameList' shading='dim'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='TabWidget' type='TabWidget'/>"
+"<layout type='horizontal' padding='16,16,16,16'>"
+"<space/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Apply' "
+"type='Button' "
+"/>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Control' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<widget name='grOnScreenCheckbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='grTouchpadCheckbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='grSwapMenuAndBackBtnsCheckbox' "
+"type='Checkbox' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
+"<widget name='grKbdMouseSpeedDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='grKbdMouseSpeedSlider' "
+"type='Slider' "
+"/>"
+"<widget name='grKbdMouseSpeedLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='grJoystickDeadzoneDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='grJoystickDeadzoneSlider' "
+"type='Slider' "
+"/>"
+"<widget name='grJoystickDeadzoneLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_KeyMapper' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Graphics' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Graphics_Container' overlays='GlobalOptions_Graphics.Container'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='grModePopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='grModePopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='grRenderPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='grRenderPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='grStretchModePopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='grStretchModePopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<widget name='grAspectCheckbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='grFullscreenCheckbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='grFilteringCheckbox' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Shader' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='grShaderPopUpDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='grShaderPopUp' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Audio' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='auMidiPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='auMidiPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='auOPLPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='auOPLPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
+"<widget name='subToggleDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='subToggleSpeechOnly' "
+"type='Radiobutton' "
+"/>"
+"<widget name='subToggleSubOnly' "
+"type='Radiobutton' "
+"/>"
+"<widget name='subToggleSubBoth' "
+"type='Radiobutton' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
+"<widget name='subSubtitleSpeedDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='subSubtitleSpeedSlider' "
+"type='Slider' "
+"/>"
+"<widget name='subSubtitleSpeedLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Volume' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='horizontal' padding='16,16,16,16' spacing='8'>"
+"<layout type='vertical' padding='0,0,0,0' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='vcMusicText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='vcMusicSlider' "
+"type='Slider' "
+"/>"
+"<widget name='vcMusicLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='vcSfxText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='vcSfxSlider' "
+"type='Slider' "
+"/>"
+"<widget name='vcSfxLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='vcSpeechText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='vcSpeechSlider' "
+"type='Slider' "
+"/>"
+"<widget name='vcSpeechLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='vertical' padding='24,0,24,0' align='center'>"
+"<widget name='vcMuteCheckbox' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_MIDI' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='auPrefGmPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='auPrefGmPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='mcFontButton' "
+"type='Button' "
+"/>"
+"<widget name='mcFontPath' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='mcFontClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<widget name='mcMixedCheckbox' "
+"type='Checkbox' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='mcMidiGainText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='mcMidiGainSlider' "
+"type='Slider' "
+"/>"
+"<widget name='mcMidiGainLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<widget name='mcFluidSynthSettings' "
+"width='200' "
+"height='Globals.Button.Height' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_MT32' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='auPrefMt32PopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='auPrefMt32Popup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<widget name='mcMt32Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='mcGSCheckbox' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Paths' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='SaveButton' "
+"type='Button' "
+"/>"
+"<widget name='SavePath' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='SavePathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='ThemeButton' "
+"type='Button' "
+"/>"
+"<widget name='ThemePath' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='ThemePathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='ExtraButton' "
+"type='Button' "
+"/>"
+"<widget name='ExtraPath' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='ExtraPathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='16'>"
+"<widget name='PluginsButton' "
+"type='Button' "
+"/>"
+"<widget name='PluginsPath' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='PluginsPathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Misc' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Misc_Container' overlays='GlobalOptions_Misc.Container'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='ThemeButton' "
+"type='Button' "
+"/>"
+"<widget name='CurTheme' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='RendererPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='RendererPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='AutosavePeriodPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='AutosavePeriodPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='GuiLanguagePopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='GuiLanguagePopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='GuiLanguageUseGameLanguage' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='UseSystemDialogs' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='UpdatesPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='UpdatesPopup' "
+"type='PopUp' "
+"/>"
+"<widget name='UpdatesCheckManuallyButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"<widget name='KeysButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Cloud' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Cloud_Container' overlays='GlobalOptions_Cloud.Container'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='-19,7,0,0' spacing='10'>"
+"<layout type='vertical' padding='0,0,2,0' spacing='2'>"
+"<widget name='StoragePopupDesc' "
+"type='OptionsLabel' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,0,0' spacing='2'>"
+"<widget name='StoragePopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<layout type='vertical' padding='0,0,8,0' spacing='4'>"
+"<widget name='StorageDisabledHint' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='StorageEnableButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<layout type='vertical' padding='0,0,6,0' spacing='2'>"
+"<widget name='StorageUsernameDesc' "
+"type='CloudTabLabel' "
+"/>"
+"<widget name='StorageUsernameLabel' "
+"type='CloudTabLabelValue' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,6,0' spacing='2'>"
+"<widget name='StorageUsedSpaceDesc' "
+"type='CloudTabLabel' "
+"/>"
+"<widget name='StorageUsedSpaceLabel' "
+"type='CloudTabLabelValue' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<layout type='vertical' padding='0,0,6,0' spacing='2'>"
+"<widget name='StorageLastSyncDesc' "
+"type='CloudTabLabel' "
+"/>"
+"<widget name='StorageLastSyncLabel' "
+"type='CloudTabLabelValue' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,7,0' spacing='2'>"
+"<widget name='SyncSavesButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,-4,0' spacing='10' align='center'>"
+"<widget name='StorageSyncHint' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<layout type='vertical' padding='0,0,6,0' spacing='4'>"
+"<widget name='StorageDownloadHint' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='DownloadButton' "
+"type='WideButton' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<layout type='vertical' padding='0,0,8,0' spacing='4'>"
+"<widget name='StorageDisconnectHint' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='DisconnectButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='vertical' padding='0,0,6,0' spacing='2'>"
+"<widget name='StorageWizardNotConnectedHint' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,-2,0' spacing='10' align='center'>"
+"<layout type='vertical' padding='0,0,2,0' spacing='4'>"
+"<widget name='StorageWizardOpenLinkHint' "
+"width='106' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,1,0' spacing='4'>"
+"<widget name='StorageWizardLink' "
+"width='192' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,-2,0' spacing='10' align='center'>"
+"<widget name='StorageWizardCodeHint' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<layout type='vertical' padding='0,0,-2,0' spacing='2'>"
+"<widget name='StorageWizardCodeBox' "
+"width='108' "
+"height='24' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,-2,0' spacing='2'>"
+"<widget name='StorageWizardPasteButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,-2,0' spacing='10' align='center'>"
+"<widget name='StorageWizardConnectButton' "
+"type='Button' "
+"/>"
+"<widget name='StorageWizardConnectionStatusHint' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Network' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='RunServerButton' "
+"type='Button' "
+"/>"
+"<widget name='ServerInfoLabel' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='RootPathButton' "
+"type='Button' "
+"/>"
+"<widget name='RootPath' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='RootPathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='ServerPortDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='ServerPortEditText' "
+"width='70' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='ServerPortClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,0,0' spacing='4' align='center'>"
+"<widget name='FeatureDescriptionLine1' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='FeatureDescriptionLine2' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Cloud_DownloadDialog' overlays='Dialog.GlobalOptions'>"
+"<layout type='vertical' padding='16,16,16,8' spacing='8'>"
+"<widget name='RemoteDirectory' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='LocalDirectory' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='ProgressBar' "
+"height='Globals.Button.Height' "
+"/>"
+"<space size='1'/>"
+"<widget name='PercentText' "
+"height='Globals.Line.Height' "
+"textalign='center' "
+"/>"
+"<widget name='DownloadSize' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='DownloadSpeed' "
+"height='Globals.Line.Height' "
+"/>"
+"<space/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
+"<widget name='MainButton' "
+"type='Button' "
+"/>"
+"<space/>"
+"<widget name='CloseButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Cloud_ConnectionWizard' overlays='Dialog.GlobalOptions'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Cloud_ConnectionWizard_Container' overlays='GlobalOptions_Cloud_ConnectionWizard.Container'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='0'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<layout type='vertical' padding='0,0,0,0' spacing='6'>"
+"<widget name='Picture' "
+"width='109' "
+"height='109' "
+"/>"
+"<widget name='OpenUrlButton' "
+"type='Button' "
+"/>"
+"<widget name='PasteCodeButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,0,0' spacing='6'>"
+"<widget name='Headline' "
+"height='Globals.Line.Height' "
+"/>"
+"<space size='4' />"
+"<widget name='NavigateLine' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='URLLine' "
+"height='Globals.Line.Height' "
+"/>"
+"<space size='4' />"
+"<widget name='ReturnLine1' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='ReturnLine2' "
+"height='Globals.Line.Height' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='4' align='center'>"
+"<widget name='CodeBox1' "
+"width='70' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='CodeBox2' "
+"width='70' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='CodeBox3' "
+"width='70' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='CodeBox4' "
+"width='70' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='4' align='center'>"
+"<widget name='CodeBox5' "
+"width='70' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='CodeBox6' "
+"width='70' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='CodeBox7' "
+"width='70' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='CodeBox8' "
+"width='70' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<widget name='MessageLine' "
+"height='Globals.Line.Height' "
+"/>"
+"<space size='6' />"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='CancelButton' "
+"type='Button' "
+"/>"
+"<space />"
+"<widget name='ConnectButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Accessibility' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='16'>"
+"<widget name='TTSCheckbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='TTSVoiceSelection' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='KeysDialog' overlays='Dialog.GlobalOptions' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,8' align='center'>"
+"<widget name='Action' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='List'/>"
+"<widget name='Mapping' "
+"height='Globals.Line.Height' "
+"/>"
+"<space size='Globals.Line.Height'/>"
+"<layout type='horizontal'>"
+"<widget name='Map' "
+"type='Button' "
+"/>"
+"<space/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions' overlays='Dialog.Launcher.GameList' shading='dim'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='TabWidget' type='TabWidget'/>"
+"<layout type='horizontal' padding='16,16,16,16'>"
+"<space/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_KeyMapper' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Achievements' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Graphics' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Graphics_Container' overlays='GameOptions_Graphics.Container'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<import layout='Dialog.GlobalOptions_Graphics_Container' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Shader' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<import layout='Dialog.GlobalOptions_Shader' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Audio' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<import layout='Dialog.GlobalOptions_Audio' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_MIDI' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<import layout='Dialog.GlobalOptions_MIDI' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_MT32' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<import layout='Dialog.GlobalOptions_MT32' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Volume' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<import layout='Dialog.GlobalOptions_Volume' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Game' overlays='Dialog.GameOptions.TabWidget' shading='dim'>"
+"<layout type='vertical' padding='16,16,16,16'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='Id' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='Domain' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='Name' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='Desc' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='LangPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='LangPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='PlatformPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='PlatformPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Paths' overlays='Dialog.GameOptions.TabWidget' shading='dim'>"
+"<layout type='vertical' padding='16,16,16,16'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='Savepath' "
+"type='Button' "
+"/>"
+"<widget name='SavepathText' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='SavePathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='Extrapath' "
+"type='Button' "
+"/>"
+"<widget name='ExtrapathText' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='ExtraPathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='Gamepath' "
+"type='Button' "
+"/>"
+"<widget name='GamepathText' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Engine' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Engine_Container' overlays='GameOptions_Engine.Container'>"
+"<layout type='vertical' padding='16,16,16,16'>"
+"<widget name='customOption1Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='customOption2Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='customOption3Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='customOption4Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='customOption5Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='customOption6Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='customOption7Checkbox' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalMenu' overlays='screen_center'>"
+"<layout type='vertical' padding='16,16,16,16' align='center'>"
+"<widget name='Title' "
+"width='210' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Version' "
+"width='210' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Resume' "
+"width='150' "
+"height='Globals.Button.Height' "
+"/>"
+"<space size='10'/>"
+"<widget name='Load' "
+"width='150' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Save' "
+"width='150' "
+"height='Globals.Button.Height' "
+"/>"
+"<space size='10'/>"
+"<widget name='Options' "
+"width='150' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Help' "
+"width='150' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='About' "
+"width='150' "
+"height='Globals.Button.Height' "
+"/>"
+"<space size='10'/>"
+"<widget name='RTL' "
+"width='150' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Quit' "
+"width='150' "
+"height='Globals.Button.Height' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalConfig' overlays='screen_center' size='500,350' inset='8'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='TabWidget' type='TabWidget' "
+"/>"
+"<layout type='horizontal' padding='16,16,16,16'>"
+"<space />"
+"<widget name='Keys' "
+"type='Button' "
+"/>"
+"<space />"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalConfig_Engine' overlays='Dialog.GlobalConfig.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalConfig_Engine_Container' overlays='Dialog.GlobalConfig_Engine.Container'>"
+"<layout type='vertical' padding='16,16,16,16'>"
+"<import layout='Dialog.GameOptions_Engine_Container' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalConfig_Audio' overlays='Dialog.GlobalConfig.TabWidget'>"
+"<layout type='vertical' padding='8,8,8,8' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<layout type='vertical' padding='0,0,0,0' align='center'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='8'>"
+"<widget name='vcMusicText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='vcMusicSlider' "
+"type='Slider' "
+"/>"
+"<widget name='vcMusicLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='8'>"
+"<widget name='vcSfxText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='vcSfxSlider' "
+"type='Slider' "
+"/>"
+"<widget name='vcSfxLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='8'>"
+"<widget name='vcSpeechText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='vcSpeechSlider' "
+"type='Slider' "
+"/>"
+"<widget name='vcSpeechLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='vertical' padding='24,24,24,24' align='center'>"
+"<widget name='vcMuteCheckbox' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"</layout>"
+"<space size='8' />"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
+"<widget name='subToggleDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='subToggleSpeechOnly' "
+"type='Radiobutton' "
+"width='100' "
+"/>"
+"<widget name='subToggleSubOnly' "
+"type='Radiobutton' "
+"width='100' "
+"/>"
+"<widget name='subToggleSubBoth' "
+"type='Radiobutton' "
+"width='100' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
+"<widget name='subSubtitleSpeedDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='subSubtitleSpeedSlider' "
+"type='Slider' "
+"/>"
+"<widget name='subSubtitleSpeedLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalConfig_KeyMapper' overlays='Dialog.GlobalConfig.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalConfig_Achievements' overlays='Dialog.GlobalConfig.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='FluidSynthSettings' overlays='GlobalOptions' shading='dim'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='TabWidget' type='TabWidget'/>"
+"<layout type='horizontal' padding='16,16,16,16'>"
+"<space/>"
+"<widget name='ResetSettings' "
+"type='Button' "
+"/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='FluidSynthSettings_Chorus' overlays='Dialog.FluidSynthSettings.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='VoiceCountText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='VoiceCountSlider' "
+"type='Slider' "
+"/>"
+"<widget name='VoiceCountLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='LevelText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='LevelSlider' "
+"type='Slider' "
+"/>"
+"<widget name='LevelLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='SpeedText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='SpeedSlider' "
+"type='Slider' "
+"/>"
+"<widget name='SpeedLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='DepthText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='DepthSlider' "
+"type='Slider' "
+"/>"
+"<widget name='DepthLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='WaveFormTypeText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='WaveFormType' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='FluidSynthSettings_Reverb' overlays='Dialog.FluidSynthSettings.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='RoomSizeText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='RoomSizeSlider' "
+"type='Slider' "
+"/>"
+"<widget name='RoomSizeLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='DampingText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='DampingSlider' "
+"type='Slider' "
+"/>"
+"<widget name='DampingLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='WidthText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='WidthSlider' "
+"type='Slider' "
+"/>"
+"<widget name='WidthLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='LevelText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='LevelSlider' "
+"type='Slider' "
+"/>"
+"<widget name='LevelLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='FluidSynthSettings_Misc' overlays='Dialog.FluidSynthSettings.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='InterpolationText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='Interpolation' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='SaveLoadChooser' overlays='screen' inset='8' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,32' align='center'>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='Title' "
+"height='Globals.Line.Height' "
+"/>"
+"<space/>"
+"<widget name='PageDisplay' "
+"width='200' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,6' spacing='16'>"
+"<widget name='List' />"
+"<widget name='Thumbnail' "
+"width='180' "
+"height='155' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='ListSwitch' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"<widget name='GridSwitch' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"<space/>"
+"<widget name='Delete' "
+"type='Button' "
+"/>"
+"<space size='32'/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Choose' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='SaveLoadCloudSyncProgress' overlays='screen_center' inset='8' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,8' align='center'>"
+"<widget name='TitleText' "
+"width='496' "
+"height='Globals.Line.Height' "
+"textalign='center' "
+"/>"
+"<space size='1'/>"
+"<widget name='ProgressBar' "
+"width='496' "
+"height='Globals.Button.Height' "
+"/>"
+"<space size='1'/>"
+"<widget name='PercentText' "
+"width='496' "
+"height='Globals.Line.Height' "
+"textalign='center' "
+"/>"
+"<space size='1'/>"
+"<layout type='horizontal' padding='0,0,0,0' align='center' spacing='10'>"
+"<widget name='Cancel' "
+"width='150' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Background' "
+"width='150' "
+"height='Globals.Button.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='SavenameDialog' overlays='screen_center'>"
+"<layout type='vertical' padding='8,8,8,8'>"
+"<widget name='DescriptionText' "
+"width='320' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Description' "
+"height='19' "
+"/>"
+"<layout type='horizontal' padding='0,0,16,0'>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<space size='96'/>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='RecorderDialog' overlays='screen' inset='8' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,32' align='center'>"
+"<widget name='Title' "
+"height='Globals.Line.Height' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,16' spacing='16'>"
+"<widget name='List' />"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Thumbnail' "
+"width='180' "
+"height='170' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='NextScreenShotButton' "
+"width='25' "
+"height='25' "
+"/>"
+"<widget name='currentScreenshot' "
+"width='125' "
+"height='25' "
+"textalign='center' "
+"/>"
+"<widget name='PreviousScreenShotButton' "
+"width='25' "
+"height='25' "
+"/>"
+"</layout>"
+"<widget name='Author' height='Globals.Line.Height' />"
+"<widget name='Notes' height='Globals.Line.Height' />"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='Delete' "
+"type='Button' "
+"/>"
+"<space size='16'/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<space size='16'/>"
+"<widget name='Edit' "
+"type='Button' "
+"/>"
+"<widget name='Record' "
+"type='Button' "
+"/>"
+"<widget name='Playback' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='OnScreenDialog' overlays='screen_center'>"
+"<layout type='horizontal' spacing='5' padding='5,3,5,3' align='center'>"
+"<widget name='StopButton' "
+"width='32' "
+"height='32' "
+"/>"
+"<widget name='EditButton' "
+"width='32' "
+"height='32' "
+"/>"
+"<widget name='SwitchModeButton' "
+"width='32' "
+"height='32' "
+"/>"
+"<widget name='FastReplayButton' "
+"width='32' "
+"height='32' "
+"/>"
+"<widget name='TimeLabel' "
+"width='50' "
+"height='30' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='EditRecordDialog' overlays='screen_center'>"
+"<layout type='vertical' padding='8,8,8,8' align='center'>"
+"<widget name='Title' "
+"width='320' "
+"height='Globals.Line.Height' "
+"/>"
+"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
+"<widget name='AuthorLabel' "
+"type='EditRecordLabel' "
+"/>"
+"<widget name='AuthorEdit' "
+"type='EditRecord' "
+"/>"
+"</layout>"
+"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
+"<widget name='NameLabel' "
+"type='EditRecordLabel' "
+"/>"
+"<widget name='NameEdit' "
+"type='EditRecord' "
+"/>"
+"</layout>"
+"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
+"<widget name='NotesLabel' "
+"type='EditRecordLabel' "
+"/>"
+"<widget name='NotesEdit' "
+"type='EditRecord' "
+"/>"
+"</layout>"
+"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='OK' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='ScummHelp' overlays='screen_center'>"
+"<layout type='vertical' padding='8,8,8,8' align='center'>"
+"<widget name='Title' "
+"width='320' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='HelpText' "
+"height='200' "
+"/>"
+"<layout type='horizontal' padding='0,0,16,0'>"
+"<widget name='Prev' "
+"type='Button' "
+"/>"
+"<widget name='Next' "
+"type='Button' "
+"/>"
+"<space size='32'/>"
+"<widget name='Close' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='LoomTownsDifficultyDialog' overlays='screen_center'>"
+"<layout type='vertical' padding='8,8,8,8' align='center'>"
+"<widget name='Description1' "
+"width='320' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Description2' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Standard' "
+"type='Button' "
+"/>"
+"<widget name='Practice' "
+"type='Button' "
+"/>"
+"<widget name='Expert' "
+"type='Button' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='MassAdd' overlays='screen_center' shading='dim'>"
+"<layout type='vertical' padding='8,8,32,8' align='center'>"
+"<widget name='DirProgressText' "
+"width='480' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='GameProgressText' "
+"width='480' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='GameList' "
+"width='480' "
+"height='250' "
+"/>"
+"<layout type='horizontal' padding='8,8,8,8'>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='Predictive' overlays='screen_center'>"
+"<layout type='vertical' padding='5,5,5,5' align='center'>"
+"<widget name='Headline' "
+"height='Globals.Line.Height' "
+"width='210' "
+"textalign='center' "
+"/>"
+"<layout type='horizontal' padding='5,5,5,5'>"
+"<widget name='Word' "
+"width='190' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Delete' "
+"width='20' "
+"height='Globals.Button.Height' "
+"/>"
+"</layout>"
+"<space size='5' />"
+"<layout type='horizontal' padding='3,3,3,3'>"
+"<widget name='Button1' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Button2' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Button3' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='3,3,3,3'>"
+"<widget name='Button4' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Button5' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Button6' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='3,3,3,3'>"
+"<widget name='Button7' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Button8' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Button9' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='3,3,3,3'>"
+"<widget name='Pre' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Button0' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Next' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"</layout>"
+"<space size='5' />"
+"<layout type='horizontal' padding='3,3,3,3'>"
+"<widget name='Add' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"<space size='22'/>"
+"<widget name='Cancel' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='OK' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Button.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='DropdownDialog' overlays='screen_center' shading='luminance'>"
+"</dialog>"
+"<dialog name='UnknownGameDialog' overlays='Dialog.Launcher.GameList' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,0'>"
+"<widget name='TextContainer' "
+"/>"
+"<layout type='horizontal' padding='0,0,16,16'>"
+"<space/>"
+"<widget name='Report' "
+"type='Button' "
+"/>"
+"<widget name='Copy' "
+"type='Button' "
+"/>"
+"<widget name='Close' "
+"type='Button' "
+"/>"
+"<widget name='Add' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='TestbedOptions' overlays='screen_center' size='400,300'>"
+"<layout type='vertical' padding='8,8,8,8'>"
+"<widget name='Headline' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Info' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='List' "
+"/>"
+"<layout type='vertical' padding='0,0,16,0'>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='SelectAll' "
+"type='Button' "
+"/>"
+"<space/>"
+"<widget name='RunTests' "
+"type='Button' "
+"/>"
+"<widget name='Quit' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"</layout_info>"
+;
+ const char *defaultXML4 = "<layout_info resolution='y<400'>"
+"<globals>"
+"<def var='Line.Height' value='12' />"
+"<def var='Font.Height' value='10' />"
+"<def var='About.OuterBorder' value='10'/>"
+"<def var='Layout.Spacing' value='8'/>"
+"<def var='ShowLauncherLogo' value='0'/>"
+"<def var='ShowGlobalMenuLogo' value='0'/>"
+"<def var='ShowSearchPic' value='0'/>"
+"<def var='ShowChooserPics' value='0'/>"
+"<def var='ShowChooserPageDisplay' value='0'/>"
+"<def var='SaveLoadChooser.ExtInfo.Visible' value='0'/>"
+"<def var='RecorderDialog.ExtInfo.Visible' value='0'/>"
+"<def var='OnScreenDialog.ShowPics' value='0'/>"
+"<def var='KeyMapper.Spacing' value='5'/>"
+"<def var='KeyMapper.ButtonWidth' value='100'/>"
+"<def var='KeyMapper.ResetWidth' value='60'/>"
+"<def var='Tooltip.MaxWidth' value='70'/>"
+"<def var='Tooltip.XDelta' value='8'/> "
+"<def var='Tooltip.YDelta' value='8'/>"
+"<def var='Predictive.Button.Width' value='45' />"
+"<def var='Predictive.Button.Height' value='15' />"
+"<def var='Predictive.ShowDeletePic' value='0'/>"
+"<def var='DropdownButton.Width' value='7'/>"
+"<widget name='Button' "
+"size='72,16' "
+"/>"
+"<widget name='WideButton' "
+"size='144,16' "
+"/>"
+"<widget name='Slider' "
+"size='85,12' "
+"/>"
+"<widget name='OptionsLabel' "
+"size='110,Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='SmallLabel' "
+"size='18,Globals.Line.Height' "
+"/>"
+"<widget name='CloudTabLabel' "
+"size='180,Globals.Line.Height' "
+"/>"
+"<widget name='CloudTabLabelValue' "
+"size='180,Globals.Line.Height' "
+"/>"
+"<widget name='PopUp' "
+"size='-1,15' "
+"/>"
+"<widget name='Checkbox' "
+"size='-1,Globals.Line.Height' "
+"/>"
+"<widget name='Radiobutton' "
+"size='-1,Globals.Line.Height' "
+"/>"
+"<widget name='ListWidget' "
+"padding='5,0,0,0' "
+"/>"
+"<widget name='PopUpWidget' "
+"padding='7,5,0,0' "
+"/>"
+"<widget name='EditTextWidget' "
+"padding='5,5,0,0' "
+"/>"
+"<widget name='Console' "
+"padding='7,5,5,5' "
+"/>"
+"<widget name='Scrollbar' "
+"size='9,0' "
+"/>"
+"<widget name='TabWidget.Tab' "
+"size='40,16' "
+"padding='0,0,2,0' "
+"/>"
+"<widget name='TabWidget.Body' "
+"padding='0,0,0,0' "
+"/>"
+"<widget name='TabWidget.NavButton' "
+"size='32,14' "
+"padding='0,0,1,0' "
+"/>"
+"<widget name='EditRecordLabel' "
+"size='60,Globals.Line.Height' "
+"/>"
+"<widget name='EditRecord' "
+"size='120,15' "
+"/>"
+"</globals>"
+"<dialog name='Launcher' overlays='screen'>"
+"<layout type='vertical' align='center' padding='6,6,2,2'>"
+"<widget name='Version' "
+"height='Globals.Line.Height' "
+"textalign='center' "
+"/>"
+"<layout type='horizontal' spacing='5' padding='0,0,0,0'>"
+"<widget name='SearchDesc' "
+"width='50' "
+"height='Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='Search' "
+"width='150' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='SearchClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"<space />"
+"</layout>"
+"<widget name='GameList'/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='8'>"
+"<widget name='LoadGameButton' "
+"height='12' "
+"/>"
+"<widget name='AddGameButton' "
+"height='12' "
+"/>"
+"<widget name='EditGameButton' "
+"height='12' "
+"/>"
+"<widget name='RemoveGameButton' "
+"height='12' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='8'>"
+"<widget name='QuitButton' "
+"height='12' "
+"/>"
+"<widget name='AboutButton' "
+"height='12' "
+"/>"
+"<widget name='OptionsButton' "
+"height='12' "
+"/>"
+"<widget name='StartButton' "
+"height='12' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='Browser' overlays='screen' inset='8' shading='dim'>"
+"<layout type='vertical' padding='8,8,0,4'>"
+"<widget name='Headline' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Path' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='List'/>"
+"<layout type='vertical' padding='0,0,8,0'>"
+"<widget name='Hidden' "
+"type='Checkbox' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='Up' "
+"type='Button' "
+"/>"
+"<space/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Choose' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='FileBrowser' overlays='screen' inset='16' shading='dim'>"
+"<layout type='vertical' padding='16,16,16,16'>"
+"<widget name='Headline' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Filename' "
+"height='Globals.Line.Height' "
+"/>"
+"<space size='5' />"
+"<widget name='List'/>"
+"<layout type='vertical' padding='0,0,16,0'>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Choose' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions' overlays='screen' inset='16' shading='dim'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='TabWidget' type='TabWidget'/>"
+"<layout type='horizontal' padding='8,8,8,8'>"
+"<space/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Apply' "
+"type='Button' "
+"/>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Control' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<widget name='grOnScreenCheckbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='grTouchpadCheckbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='grSwapMenuAndBackBtnsCheckbox' "
+"type='Checkbox' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10'>"
+"<widget name='grKbdMouseSpeedDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='grKbdMouseSpeedSlider' "
+"type='Slider' "
+"/>"
+"<widget name='grKbdMouseSpeedLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='grJoystickDeadzoneDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='grJoystickDeadzoneSlider' "
+"type='Slider' "
+"/>"
+"<widget name='grJoystickDeadzoneLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_KeyMapper' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Graphics' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Graphics_Container' overlays='GlobalOptions_Graphics.Container'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='grModePopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='grModePopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='grRenderPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='grRenderPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='grStretchModePopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='grStretchModePopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<widget name='grAspectCheckbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='grFullscreenCheckbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='grFilteringCheckbox' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Shader' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='grShaderPopUpDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='grShaderPopUp' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Audio' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='auMidiPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='auMidiPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='auOPLPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='auOPLPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='3' align='center'>"
+"<widget name='subToggleDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='subToggleSpeechOnly' "
+"type='Radiobutton' "
+"/>"
+"<widget name='subToggleSubOnly' "
+"type='Radiobutton' "
+"/>"
+"<widget name='subToggleSubBoth' "
+"type='Radiobutton' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='subSubtitleSpeedDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='subSubtitleSpeedSlider' "
+"type='Slider' "
+"/>"
+"<widget name='subSubtitleSpeedLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Volume' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='vcMusicText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='vcMusicSlider' "
+"type='Slider' "
+"/>"
+"<widget name='vcMusicLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='vcSfxText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='vcSfxSlider' "
+"type='Slider' "
+"/>"
+"<widget name='vcSfxLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='vcSpeechText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='vcSpeechSlider' "
+"type='Slider' "
+"/>"
+"<widget name='vcSpeechLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<space size='110' />"
+"<widget name='vcMuteCheckbox' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_MIDI' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='6'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='auPrefGmPopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='auPrefGmPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='16' align='center'>"
+"<widget name='mcFontButton' "
+"type='Button' "
+"/>"
+"<widget name='mcFontPath' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='mcFontClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<widget name='mcMixedCheckbox' "
+"type='Checkbox' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='mcMidiGainText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='mcMidiGainSlider' "
+"type='Slider' "
+"/>"
+"<widget name='mcMidiGainLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<widget name='mcFluidSynthSettings' "
+"width='150' "
+"height='Globals.Button.Height' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_MT32' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='auPrefMt32PopupDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='auPrefMt32Popup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<widget name='mcMt32Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='mcGSCheckbox' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Paths' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='16'>"
+"<widget name='SaveButton' "
+"type='Button' "
+"/>"
+"<widget name='SavePath' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='SavePathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='16'>"
+"<widget name='ThemeButton' "
+"type='Button' "
+"/>"
+"<widget name='ThemePath' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='ThemePathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='16'>"
+"<widget name='ExtraButton' "
+"type='Button' "
+"/>"
+"<widget name='ExtraPath' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='ExtraPathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='16'>"
+"<widget name='PluginsButton' "
+"type='Button' "
+"/>"
+"<widget name='PluginsPath' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='PluginsPathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Misc' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Misc_Container' overlays='GlobalOptions_Misc.Container'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='16'>"
+"<widget name='ThemeButton' "
+"type='Button' "
+"/>"
+"<widget name='CurTheme' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='RendererPopupDesc' "
+"width='80' "
+"height='Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='RendererPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='AutosavePeriodPopupDesc' "
+"width='80' "
+"height='Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='AutosavePeriodPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='GuiLanguagePopupDesc' "
+"width='80' "
+"height='Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='GuiLanguagePopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='GuiLanguageUseGameLanguage' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='UseSystemDialogs' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='UpdatesPopupDesc' "
+"width='80' "
+"height='Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='UpdatesPopup' "
+"type='PopUp' "
+"/>"
+"<widget name='UpdatesCheckManuallyButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"<widget name='KeysButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Cloud' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Cloud_Container' overlays='GlobalOptions_Cloud.Container'>"
+"<layout type='vertical' padding='10,13,10,10' spacing='8'>"
+"<layout type='horizontal' padding='-10,1,0,0' spacing='6'>"
+"<layout type='vertical' padding='0,0,1,0' spacing='1'>"
+"<widget name='StoragePopupDesc' "
+"width='100' "
+"height='Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,0,0' spacing='1'>"
+"<widget name='StoragePopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<layout type='vertical' padding='0,0,3,0' spacing='4'>"
+"<widget name='StorageDisabledHint' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='StorageEnableButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<layout type='vertical' padding='0,0,3,0' spacing='1'>"
+"<widget name='StorageUsernameDesc' "
+"type='CloudTabLabel' "
+"/>"
+"<widget name='StorageUsernameLabel' "
+"type='CloudTabLabelValue' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,3,0' spacing='1'>"
+"<widget name='StorageUsedSpaceDesc' "
+"type='CloudTabLabel' "
+"/>"
+"<widget name='StorageUsedSpaceLabel' "
+"type='CloudTabLabelValue' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<layout type='vertical' padding='0,0,3,0' spacing='1'>"
+"<widget name='StorageLastSyncDesc' "
+"type='CloudTabLabel' "
+"/>"
+"<widget name='StorageLastSyncLabel' "
+"type='CloudTabLabelValue' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,5,0' spacing='1'>"
+"<widget name='SyncSavesButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,-3,0' spacing='6' align='center'>"
+"<widget name='StorageSyncHint' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<layout type='vertical' padding='0,0,3,0' spacing='4'>"
+"<widget name='StorageDownloadHint' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='DownloadButton' "
+"type='WideButton' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<layout type='vertical' padding='0,0,3,0' spacing='4'>"
+"<widget name='StorageDisconnectHint' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='DisconnectButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='vertical' padding='0,0,3,0' spacing='1'>"
+"<widget name='StorageWizardNotConnectedHint' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,-3,0' spacing='6' align='center'>"
+"<layout type='vertical' padding='0,0,1,0' spacing='2'>"
+"<widget name='StorageWizardOpenLinkHint' "
+"width='90' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,1,0' spacing='4'>"
+"<widget name='StorageWizardLink' "
+"width='150' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,-2,0' spacing='6' align='center'>"
+"<widget name='StorageWizardCodeHint' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<layout type='vertical' padding='0,0,-2,0' spacing='2'>"
+"<widget name='StorageWizardCodeBox' "
+"width='72' "
+"height='16' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,-2,0' spacing='2'>"
+"<widget name='StorageWizardPasteButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,-2,0' spacing='6' align='center'>"
+"<widget name='StorageWizardConnectButton' "
+"type='Button' "
+"/>"
+"<widget name='StorageWizardConnectionStatusHint' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Network' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='RunServerButton' "
+"type='Button' "
+"/>"
+"<widget name='ServerInfoLabel' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='16' align='center'>"
+"<widget name='RootPathButton' "
+"type='Button' "
+"/>"
+"<widget name='RootPath' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='RootPathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='ServerPortDesc' "
+"width='80' "
+"height='Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='ServerPortEditText' "
+"width='60' "
+"height='16' "
+"/>"
+"<widget name='ServerPortClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,0,0' spacing='2' align='center'>"
+"<widget name='FeatureDescriptionLine1' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='FeatureDescriptionLine2' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Cloud_DownloadDialog' overlays='Dialog.GlobalOptions'>"
+"<layout type='vertical' padding='8,8,8,4' spacing='8'>"
+"<widget name='RemoteDirectory' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='LocalDirectory' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='ProgressBar' "
+"height='Globals.Button.Height' "
+"/>"
+"<space size='1'/>"
+"<widget name='PercentText' "
+"height='Globals.Line.Height' "
+"textalign='center' "
+"/>"
+"<widget name='DownloadSize' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='DownloadSpeed' "
+"height='Globals.Line.Height' "
+"/>"
+"<space/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6'>"
+"<widget name='MainButton' "
+"type='Button' "
+"/>"
+"<space/>"
+"<widget name='CloseButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Cloud_ConnectionWizard' overlays='Dialog.GlobalOptions'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Cloud_ConnectionWizard_Container' overlays='GlobalOptions_Cloud_ConnectionWizard.Container'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='8'>"
+"<layout type='vertical' padding='0,0,0,0' spacing='4'>"
+"<widget name='Headline' "
+"height='Globals.Line.Height' "
+"/>"
+"<space size='2' />"
+"<widget name='NavigateLine' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='URLLine' "
+"height='Globals.Line.Height' "
+"/>"
+"<space size='2' />"
+"<widget name='ReturnLine1' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='ReturnLine2' "
+"height='Globals.Line.Height' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='4' align='center'>"
+"<widget name='CodeBox1' "
+"width='60' "
+"height='16' "
+"/>"
+"<widget name='CodeBox2' "
+"width='60' "
+"height='16' "
+"/>"
+"<widget name='CodeBox3' "
+"width='60' "
+"height='16' "
+"/>"
+"<widget name='CodeBox4' "
+"width='60' "
+"height='16' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='4' align='center'>"
+"<widget name='CodeBox5' "
+"width='60' "
+"height='16' "
+"/>"
+"<widget name='CodeBox6' "
+"width='60' "
+"height='16' "
+"/>"
+"<widget name='CodeBox7' "
+"width='60' "
+"height='16' "
+"/>"
+"<widget name='CodeBox8' "
+"width='60' "
+"height='16' "
+"/>"
+"</layout>"
+"<widget name='MessageLine' "
+"height='Globals.Line.Height' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='4' align='center'>"
+"<widget name='OpenUrlButton' "
+"type='Button' "
+"/>"
+"<widget name='PasteCodeButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='4' align='center'>"
+"<widget name='CancelButton' "
+"type='Button' "
+"/>"
+"<space />"
+"<widget name='ConnectButton' "
+"type='Button' "
+"/>"
+"</layout>"
+"<space size='6' />"
+"<widget name='Picture' width='1' height='1' />"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalOptions_Accessibility' overlays='Dialog.GlobalOptions.TabWidget'>"
+"<layout type='vertical' padding='16,16,16,16' spacing='16'>"
+"<widget name='TTSCheckbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='TTSVoiceSelection' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='KeysDialog' overlays='Dialog.GlobalOptions' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,8' align='center'>"
+"<widget name='Action' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='List'/>"
+"<widget name='Mapping' "
+"height='Globals.Line.Height' "
+"/>"
+"<space size='Globals.Line.Height'/>"
+"<layout type='horizontal'>"
+"<widget name='Map' "
+"type='Button' "
+"/>"
+"<space/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions' overlays='screen' inset='16' shading='dim'>"
+"<layout type='vertical' padding='0,0,0,0' spacing='16'>"
+"<widget name='TabWidget' type='TabWidget'/>"
+"<layout type='horizontal' padding='8,8,8,8'>"
+"<space/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_KeyMapper' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Achievements' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Graphics' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Graphics_Container' overlays='GameOptions_Graphics.Container'>"
+"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<import layout='Dialog.GlobalOptions_Graphics_Container' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Shader' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<import layout='Dialog.GlobalOptions_Shader' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Audio' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<import layout='Dialog.GlobalOptions_Audio' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_MIDI' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<import layout='Dialog.GlobalOptions_MIDI' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_MT32' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<import layout='Dialog.GlobalOptions_MT32' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Volume' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<import layout='Dialog.GlobalOptions_Volume' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Game' overlays='Dialog.GameOptions.TabWidget' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='Id' "
+"width='35' "
+"height='Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='Domain' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='Name' "
+"width='35' "
+"height='Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='Desc' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<space size='8'/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='LangPopupDesc' "
+"width='60' "
+"height='Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='LangPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='PlatformPopupDesc' "
+"width='60' "
+"height='Globals.Line.Height' "
+"textalign='right' "
+"/>"
+"<widget name='PlatformPopup' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Paths' overlays='Dialog.GameOptions.TabWidget' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='16' align='center'>"
+"<widget name='Savepath' "
+"type='Button' "
+"/>"
+"<widget name='SavepathText' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='SavePathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='16' align='center'>"
+"<widget name='Extrapath' "
+"type='Button' "
+"/>"
+"<widget name='ExtrapathText' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='ExtraPathClearButton' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='16' align='center'>"
+"<widget name='Gamepath' "
+"type='Button' "
+"/>"
+"<widget name='GamepathText' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Engine' overlays='Dialog.GameOptions.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GameOptions_Engine_Container' overlays='GameOptions_Engine.Container'>"
+"<layout type='vertical' padding='8,8,8,8'>"
+"<widget name='customOption1Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='customOption2Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='customOption3Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='customOption4Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='customOption5Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='customOption6Checkbox' "
+"type='Checkbox' "
+"/>"
+"<widget name='customOption7Checkbox' "
+"type='Checkbox' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalMenu' overlays='screen_center'>"
+"<layout type='vertical' padding='2,2,2,6' align='center' spacing='0'>"
+"<widget name='Title' "
+"width='160' "
+"height='12' "
+"/>"
+"<widget name='Version' "
+"width='160' "
+"height='14' "
+"/>"
+"<layout type='vertical' padding='0,0,3,0' align='center' spacing='6'>"
+"<widget name='Load' "
+"width='120' "
+"height='12' "
+"/>"
+"<widget name='Save' "
+"width='120' "
+"height='12' "
+"/>"
+"<space size='1'/>"
+"<widget name='Options' "
+"width='120' "
+"height='12' "
+"/>"
+"<widget name='Help' "
+"width='120' "
+"height='12' "
+"/>"
+"<widget name='About' "
+"width='120' "
+"height='12' "
+"/>"
+"<space size='1'/>"
+"<widget name='Resume' "
+"width='120' "
+"height='12' "
+"/>"
+"<widget name='RTL' "
+"width='120' "
+"height='12' "
+"/>"
+"<widget name='Quit' "
+"width='120' "
+"height='12' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalConfig' overlays='screen_center' size='300,220' inset='5' >"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='TabWidget' type='TabWidget' "
+"/>"
+"<layout type='horizontal' padding='8,8,0,8'>"
+"<space />"
+"<widget name='Keys' "
+"type='Button' "
+"/>"
+"<space />"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalConfig_Engine' overlays='Dialog.GlobalConfig.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalConfig_Engine_Container' overlays='Dialog.GlobalConfig_Engine.Container'>"
+"<layout type='vertical' padding='8,8,8,8'>"
+"<import layout='Dialog.GameOptions_Engine_Container' />"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalConfig_Audio' overlays='Dialog.GlobalConfig.TabWidget'>"
+"<layout type='vertical' padding='8,8,8,8'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='vcMusicText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='vcMusicSlider' "
+"type='Slider' "
+"/>"
+"<widget name='vcMusicLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='vcSfxText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='vcSfxSlider' "
+"type='Slider' "
+"/>"
+"<widget name='vcSfxLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='vcSpeechText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='vcSpeechSlider' "
+"type='Slider' "
+"/>"
+"<widget name='vcSpeechLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<space size='110' />"
+"<widget name='vcMuteCheckbox' "
+"type='Checkbox' "
+"width='80' "
+"/>"
+"</layout>"
+"<layout type='vertical' padding='0,0,0,0' spacing='1' align='center'>"
+"<widget name='subToggleDesc' "
+"type='OptionsLabel' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='subToggleSpeechOnly' "
+"type='Radiobutton' "
+"width='90' "
+"/>"
+"<widget name='subToggleSubOnly' "
+"type='Radiobutton' "
+"width='90' "
+"/>"
+"<widget name='subToggleSubBoth' "
+"type='Radiobutton' "
+"width='90' "
+"/>"
+"</layout>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='6' align='center'>"
+"<widget name='subSubtitleSpeedDesc' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='subSubtitleSpeedSlider' "
+"type='Slider' "
+"/>"
+"<widget name='subSubtitleSpeedLabel' "
+"type='SmallLabel' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalConfig_KeyMapper' overlays='Dialog.GlobalConfig.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='GlobalConfig_Achievements' overlays='Dialog.GlobalConfig.TabWidget'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='Container'/>"
+"</layout>"
+"</dialog>"
+"<dialog name='FluidSynthSettings' overlays='GlobalOptions' shading='dim'>"
+"<layout type='vertical' padding='0,0,0,0'>"
+"<widget name='TabWidget' type='TabWidget'/>"
+"<layout type='horizontal' padding='8,8,8,8'>"
+"<space/>"
+"<widget name='ResetSettings' "
+"type='Button' "
+"/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='FluidSynthSettings_Chorus' overlays='Dialog.FluidSynthSettings.TabWidget'>"
+"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='VoiceCountText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='VoiceCountSlider' "
+"type='Slider' "
+"/>"
+"<widget name='VoiceCountLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='LevelText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='LevelSlider' "
+"type='Slider' "
+"/>"
+"<widget name='LevelLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='SpeedText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='SpeedSlider' "
+"type='Slider' "
+"/>"
+"<widget name='SpeedLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='DepthText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='DepthSlider' "
+"type='Slider' "
+"/>"
+"<widget name='DepthLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='WaveFormTypeText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='WaveFormType' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='FluidSynthSettings_Reverb' overlays='Dialog.FluidSynthSettings.TabWidget'>"
+"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
+"<widget name='EnableTabCheckbox' "
+"type='Checkbox' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='RoomSizeText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='RoomSizeSlider' "
+"type='Slider' "
+"/>"
+"<widget name='RoomSizeLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='DampingText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='DampingSlider' "
+"type='Slider' "
+"/>"
+"<widget name='DampingLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='WidthText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='WidthSlider' "
+"type='Slider' "
+"/>"
+"<widget name='WidthLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='LevelText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='LevelSlider' "
+"type='Slider' "
+"/>"
+"<widget name='LevelLabel' "
+"width='32' "
+"height='Globals.Line.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='FluidSynthSettings_Misc' overlays='Dialog.FluidSynthSettings.TabWidget'>"
+"<layout type='vertical' padding='8,8,8,8' spacing='6'>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='10' align='center'>"
+"<widget name='InterpolationText' "
+"type='OptionsLabel' "
+"/>"
+"<widget name='Interpolation' "
+"type='PopUp' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='SaveLoadChooser' overlays='screen' inset='8' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,8' align='center'>"
+"<widget name='Title' height='Globals.Line.Height'/>"
+"<widget name='List' />"
+"<layout type='horizontal' padding='0,0,16,0'>"
+"<widget name='ListSwitch' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"<widget name='GridSwitch' "
+"height='Globals.Line.Height' "
+"width='Globals.Line.Height' "
+"/>"
+"<space/>"
+"<widget name='Delete' "
+"type='Button' "
+"/>"
+"<space size='16'/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Choose' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='SaveLoadCloudSyncProgress' overlays='screen_center' inset='8' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,8' align='center'>"
+"<widget name='TitleText' "
+"width='240' "
+"height='Globals.Line.Height' "
+"textalign='center' "
+"/>"
+"<space size='1'/>"
+"<widget name='ProgressBar' "
+"width='240' "
+"height='Globals.Button.Height' "
+"/>"
+"<space size='1'/>"
+"<widget name='PercentText' "
+"width='240' "
+"height='Globals.Line.Height' "
+"textalign='center' "
+"/>"
+"<space size='1'/>"
+"<layout type='horizontal' padding='0,0,0,0' align='center' spacing='10'>"
+"<widget name='Cancel' "
+"width='100' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Background' "
+"width='100' "
+"height='Globals.Button.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='SavenameDialog' overlays='screen_center'>"
+"<layout type='vertical' padding='8,8,8,8'>"
+"<widget name='DescriptionText' "
+"width='180' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Description' "
+"height='19' "
+"/>"
+"<layout type='horizontal' padding='0,0,16,0'>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='RecorderDialog' overlays='screen' inset='8' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,4' align='center'>"
+"<widget name='Title' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='List' />"
+"<layout type='horizontal' padding='0,0,0,0' spacing='2'>"
+"<widget name='Edit' "
+"type='Button' "
+"/>"
+"<space />"
+"<widget name='Record' "
+"type='Button' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='0,0,0,0' spacing='2'>"
+"<widget name='Delete' "
+"type='Button' "
+"/>"
+"<space />"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='Playback' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='OnScreenDialog' overlays='screen_center'>"
+"<layout type='horizontal' spacing='5' padding='3,2,3,2' align='center'>"
+"<widget name='StopButton' "
+"width='16' "
+"height='16' "
+"/>"
+"<widget name='EditButton' "
+"width='16' "
+"height='16' "
+"/>"
+"<widget name='SwitchModeButton' "
+"width='16' "
+"height='16' "
+"/>"
+"<widget name='FastReplayButton' "
+"width='16' "
+"height='16' "
+"/>"
+"<widget name='TimeLabel' "
+"width='50' "
+"height='16' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='EditRecordDialog' overlays='screen_center'>"
+"<layout type='vertical' padding='8,8,8,8' align='center'>"
+"<widget name='Title' "
+"height='Globals.Line.Height' "
+"/>"
+"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
+"<widget name='AuthorLabel' "
+"type='EditRecordLabel' "
+"/>"
+"<widget name='AuthorEdit' "
+"type='EditRecord' "
+"/>"
+"</layout>"
+"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
+"<widget name='NameLabel' "
+"type='EditRecordLabel' "
+"/>"
+"<widget name='NameEdit' "
+"type='EditRecord' "
+"/>"
+"</layout>"
+"<layout type='horizontal' spacing='5' padding='0,0,0,10'>"
+"<widget name='NotesLabel' "
+"type='EditRecordLabel' "
+"/>"
+"<widget name='NotesEdit' "
+"type='EditRecord' "
+"/>"
+"</layout>"
+"<layout type='horizontal' spacing='5' padding='0,0,0,0'>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"<widget name='OK' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='ScummHelp' overlays='screen'>"
+"<layout type='vertical' padding='8,8,8,8'>"
+"<widget name='Title' "
+"width='180' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='HelpText' "
+"height='140' "
+"/>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='Prev' "
+"type='Button' "
+"/>"
+"<widget name='Next' "
+"type='Button' "
+"/>"
+"<space size='32'/>"
+"<widget name='Close' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='LoomTownsDifficultyDialog' overlays='screen_center'>"
+"<layout type='vertical' padding='8,8,8,8' align='center'>"
+"<widget name='Description1' "
+"width='280' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Description2' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Standard' "
+"type='Button' "
+"/>"
+"<widget name='Practice' "
+"type='Button' "
+"/>"
+"<widget name='Expert' "
+"type='Button' "
+"/>"
+"</layout>"
+"</dialog>"
+"<dialog name='MassAdd' overlays='screen_center' shading='dim'>"
+"<layout type='vertical' padding='4,4,16,4' align='center'>"
+"<widget name='DirProgressText' "
+"width='280' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='GameProgressText' "
+"width='280' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='GameList' "
+"width='280' "
+"height='100' "
+"/>"
+"<layout type='horizontal' padding='4,4,4,4'>"
+"<widget name='Ok' "
+"type='Button' "
+"/>"
+"<widget name='Cancel' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='Predictive' overlays='screen_center'>"
+"<layout type='vertical' padding='1,1,1,1' align='center'>"
+"<widget name='Headline' "
+"height='Globals.Line.Height' "
+"width='150' "
+"textalign='center' "
+"/>"
+"<layout type='horizontal' padding='3,3,3,3'>"
+"<widget name='Word' "
+"width='120' "
+"height='Globals.Button.Height' "
+"/>"
+"<widget name='Delete' "
+"width='20' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='3,3,3,3'>"
+"<widget name='Button1' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"<widget name='Button2' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"<widget name='Button3' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='3,3,3,3'>"
+"<widget name='Button4' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"<widget name='Button5' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"<widget name='Button6' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='3,3,3,3'>"
+"<widget name='Button7' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"<widget name='Button8' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"<widget name='Button9' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"</layout>"
+"<layout type='horizontal' padding='3,3,3,0'>"
+"<widget name='Pre' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"<widget name='Button0' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"<widget name='Next' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"</layout>"
+"<space size='3' />"
+"<layout type='horizontal' padding='3,3,0,3'>"
+"<widget name='Add' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"<widget name='Cancel' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"<widget name='OK' "
+"width='Globals.Predictive.Button.Width' "
+"height='Globals.Predictive.Button.Height' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='DropdownDialog' overlays='screen_center' shading='luminance'>"
+"</dialog>"
+"<dialog name='UnknownGameDialog' overlays='screen' inset='8' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,0'>"
+"<widget name='TextContainer' "
+"/>"
+"<layout type='horizontal' padding='0,0,8,8'>"
+"<space/>"
+"<widget name='Report' "
+"type='Button' "
+"/>"
+"<widget name='Copy' "
+"type='Button' "
+"/>"
+"<widget name='Close' "
+"type='Button' "
+"/>"
+"<widget name='Add' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"<dialog name='TestbedOptions' overlays='screen' inset='8' shading='dim'>"
+"<layout type='vertical' padding='8,8,8,8'>"
+"<widget name='Headline' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='Info' "
+"height='Globals.Line.Height' "
+"/>"
+"<widget name='List' "
+"/>"
+"<layout type='vertical' padding='0,0,8,0'>"
+"<layout type='horizontal' padding='0,0,0,0'>"
+"<widget name='SelectAll' "
+"type='Button' "
+"/>"
+"<space/>"
+"<widget name='RunTests' "
+"type='Button' "
+"/>"
+"<widget name='Quit' "
+"type='Button' "
+"/>"
+"</layout>"
+"</layout>"
+"</layout>"
+"</dialog>"
+"</layout_info>"
+;
+const char *defaultXML[] = { defaultXML1, defaultXML2, defaultXML3, defaultXML4 };
diff --git a/gui/themes/scummclassic.zip b/gui/themes/scummclassic.zip
index f51df566aa..b8b9c6aadc 100644
Binary files a/gui/themes/scummclassic.zip and b/gui/themes/scummclassic.zip differ
diff --git a/gui/themes/scummmodern.zip b/gui/themes/scummmodern.zip
index b015aa9b90..95f4fe7626 100644
Binary files a/gui/themes/scummmodern.zip and b/gui/themes/scummmodern.zip differ
diff --git a/gui/themes/scummremastered.zip b/gui/themes/scummremastered.zip
index 2e795a9578..481fa0e8ae 100644
Binary files a/gui/themes/scummremastered.zip and b/gui/themes/scummremastered.zip differ


Commit: c09abee01cbbcbe3c85bbaa5a96ebbf38b6b45f6
    https://github.com/scummvm/scummvm/commit/c09abee01cbbcbe3c85bbaa5a96ebbf38b6b45f6
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-04-29T10:31:36+02:00

Commit Message:
GUI: Add GUI for per-game achievements tab

Changed paths:
    engines/dialogs.cpp
    gui/editgamedialog.cpp
    gui/options.cpp
    gui/options.h


diff --git a/engines/dialogs.cpp b/engines/dialogs.cpp
index 7f85bebe8b..9dab997833 100644
--- a/engines/dialogs.cpp
+++ b/engines/dialogs.cpp
@@ -330,6 +330,15 @@ ConfigDialog::ConfigDialog() :
 		addKeyMapperControls(tab, "GlobalConfig_KeyMapper.", keymaps, gameDomain);
 	}
 
+	//
+	// The Achievements tab
+	//
+	Common::AchievementsInfo achievementsInfo = metaEngine.getAchievementsInfo(gameDomain);
+	if (achievementsInfo.descriptions.size() > 0) {
+		tab->addTab(_("Achievements"), "GlobalConfig_Achievements");
+		addAchievementsControls(tab, "GlobalConfig_Achievements.", achievementsInfo);
+	}
+
 	// Activate the first tab
 	tab->setActiveTab(0);
 
diff --git a/gui/editgamedialog.cpp b/gui/editgamedialog.cpp
index 78219a51c9..b3ee5509b1 100644
--- a/gui/editgamedialog.cpp
+++ b/gui/editgamedialog.cpp
@@ -330,6 +330,18 @@ EditGameDialog::EditGameDialog(const String &domain)
 
 	_savePathClearButton = addClearButton(tab, "GameOptions_Paths.SavePathClearButton", kCmdSavePathClear);
 
+	//
+	// 9) The Achievements tab
+	//
+	if (plugin) {
+		const MetaEngine &metaEngine = plugin->get<MetaEngine>();
+		Common::AchievementsInfo achievementsInfo = metaEngine.getAchievementsInfo(domain);
+		if (achievementsInfo.descriptions.size() > 0) {
+			tab->addTab(_("Achievements"), "GameOptions_Achievements");
+			addAchievementsControls(tab, "GameOptions_Achievements.", achievementsInfo);
+		}
+	}
+
 	// Activate the first tab
 	tab->setActiveTab(0);
 	_tabWidget = tab;
diff --git a/gui/options.cpp b/gui/options.cpp
index 7ce11c557c..ad3905a25c 100644
--- a/gui/options.cpp
+++ b/gui/options.cpp
@@ -33,6 +33,7 @@
 #include "backends/keymapper/keymapper.h"
 #include "backends/keymapper/remap-widget.h"
 
+#include "common/achievements.h"
 #include "common/fs.h"
 #include "common/config-manager.h"
 #include "common/gui_options.h"
@@ -1110,6 +1111,78 @@ void OptionsDialog::addKeyMapperControls(GuiObject *boss, const Common::String &
 	_keymapperWidget = new Common::RemapWidget(boss, prefix + "Container", keymaps);
 }
 
+void OptionsDialog::addAchievementsControls(GuiObject *boss, const Common::String &prefix, const Common::AchievementsInfo &info) {
+	Common::String achDomainId = ConfMan.get("achievements", _domain);
+	AchMan.setActiveDomain(info.platform, info.appId);
+
+	GUI::ScrollContainerWidget *scrollContainer;
+	scrollContainer = new GUI::ScrollContainerWidget(boss, prefix + "Container", "");
+	scrollContainer->setBackgroundType(GUI::ThemeEngine::kWidgetBackgroundNo);
+
+	uint16 nAchieved = 0;
+	uint16 nHidden = 0;
+	uint16 nMax = info.descriptions.size();
+
+	uint16 lineHeight = g_gui.xmlEval()->getVar("Globals.Line.Height");
+	uint16 yStep = lineHeight;
+	uint16 ySmallStep = yStep/3;
+	uint16 yPos = lineHeight + yStep*3;
+	uint16 progressBarWidth = 240;
+	uint16 width = g_system->getOverlayWidth() <= 320 ? 240 : 410;
+	uint16 descrDelta = g_system->getOverlayWidth() <= 320 ? 25 : 30;
+
+	for (int16 viewAchieved = 1; viewAchieved >= 0; viewAchieved--) {
+		// run this twice, first view all achieved, then view all non-hidden & non-achieved
+	
+		for (uint16 idx = 0; idx < nMax ; idx++) {
+			bool isAchieved = AchMan.isAchieved(info.descriptions[idx].id);
+
+			if (isAchieved != viewAchieved) {
+				continue;
+			}
+
+			if (isAchieved) {
+				nAchieved++;
+			}
+			
+			if (!isAchieved && info.descriptions[idx].isHidden) {
+				nHidden++;
+				continue;
+			}
+
+			CheckboxWidget *checkBox;
+			checkBox = new CheckboxWidget(scrollContainer, lineHeight, yPos, width, yStep, info.descriptions[idx].title);
+			checkBox->setEnabled(false);
+			checkBox->setState(isAchieved);
+			yPos += yStep;
+
+	        if (info.descriptions[idx].comment && strlen(info.descriptions[idx].comment) > 0) {
+				new StaticTextWidget(scrollContainer, lineHeight + descrDelta, yPos, width - descrDelta, yStep, info.descriptions[idx].comment, Graphics::kTextAlignLeft, "", ThemeEngine::kFontStyleNormal);
+				yPos += yStep;
+			}
+
+			yPos += ySmallStep;
+		}
+	}
+
+	if (nHidden) {
+		Common::String hiddenStr = Common::String::format(_("%d hidden achievements remaining"), nHidden);
+		new StaticTextWidget(scrollContainer, lineHeight, yPos, width, yStep, hiddenStr.c_str(), Graphics::kTextAlignLeft);
+	}
+
+	if (nMax) {
+		Common::String totalStr = Common::String::format(_("Achievements unlocked: %d/%d"), nAchieved, nMax);
+		new StaticTextWidget(scrollContainer, lineHeight, lineHeight, width, yStep, totalStr.c_str(), Graphics::kTextAlignLeft);
+
+		SliderWidget *progressBar;
+		progressBar = new SliderWidget(scrollContainer, lineHeight, lineHeight*2, progressBarWidth, lineHeight);
+		progressBar->setMinValue(0);
+		progressBar->setValue(nAchieved);
+		progressBar->setMaxValue(nMax);
+		progressBar->setEnabled(false);
+	}
+}
+
 void OptionsDialog::addShaderControls(GuiObject *boss, const Common::String &prefix) {
 	Common::String context;
 	if (g_system->getOverlayWidth() <= 320)
diff --git a/gui/options.h b/gui/options.h
index 0d97bd7a9d..4759d0f405 100644
--- a/gui/options.h
+++ b/gui/options.h
@@ -94,6 +94,7 @@ protected:
 
 	void addControlControls(GuiObject *boss, const Common::String &prefix);
 	void addKeyMapperControls(GuiObject *boss, const Common::String &prefix, const Common::Array<Common::Keymap *> &keymaps, const Common::String &domain);
+	void addAchievementsControls(GuiObject *boss, const Common::String &prefix, const Common::AchievementsInfo &info);
 	void addGraphicControls(GuiObject *boss, const Common::String &prefix);
 	void addShaderControls(GuiObject *boss, const Common::String &prefix);
 	void addAudioControls(GuiObject *boss, const Common::String &prefix);


Commit: 8057ccd93d42d3ae4832bbc0a81177dd27c1dfb8
    https://github.com/scummvm/scummvm/commit/8057ccd93d42d3ae4832bbc0a81177dd27c1dfb8
Author: lolbot-iichan (lolbot_iichan at mail.ru)
Date: 2020-04-29T10:31:36+02:00

Commit Message:
COMMON: Switch AchMan to use INIFile instead of ConfMan section

Changed paths:
    common/achievements.cpp
    common/achievements.h


diff --git a/common/achievements.cpp b/common/achievements.cpp
index abe4c3cb73..dc16ec2c5d 100644
--- a/common/achievements.cpp
+++ b/common/achievements.cpp
@@ -22,7 +22,6 @@
 
 
 #include "common/achievements.h"
-#include "common/config-manager.h"
 #include "common/debug.h"
 #include "common/system.h"
 #include "common/translation.h"
@@ -33,6 +32,7 @@ DECLARE_SINGLETON(AchievementsManager);
 
 
 AchievementsManager::AchievementsManager() {
+	_iniFile = nullptr;
 	unsetActiveDomain();
 }
 
@@ -41,14 +41,13 @@ AchievementsManager::~AchievementsManager() {
 }
 
 bool AchievementsManager::setActiveDomain(AchievementsPlatform platform, const String &appId) {
-	String suffix = platform == STEAM_ACHIEVEMENTS ? "steam-" + appId :
+	String prefix = platform == STEAM_ACHIEVEMENTS ? "steam-" + appId :
 					platform == GALAXY_ACHIEVEMENTS ? "galaxy-" + appId :
 					appId;
 
-	String achDomainId = "achievements-" + suffix;
-	String statDomainId = "statistics-" + suffix;
+	String iniFileName = prefix + ".dat";
 
-	if (_achDomainId == achDomainId && _statDomainId == statDomainId) {
+	if (_iniFileName == iniFileName) {
 		return true;
 	}
 
@@ -56,24 +55,21 @@ bool AchievementsManager::setActiveDomain(AchievementsPlatform platform, const S
 		unsetActiveDomain();
 	}
 
-	ConfMan.addMiscDomain(achDomainId);
-	ConfMan.addMiscDomain(statDomainId);
+	_iniFileName = iniFileName;
+
+	_iniFile = new Common::INIFile();
+	_iniFile->loadFromSaveFile(_iniFileName); // missing file is OK
 
-	_achDomainId = achDomainId;
-	_statDomainId = statDomainId;
 	return true;
 }
 
 
 bool AchievementsManager::unsetActiveDomain() {
-	if (!isReady()) {
-		return true;
-	}
+	_iniFileName = "";
 
-	ConfMan.flushToDisk();
+	delete _iniFile;
+	_iniFile = nullptr;
 
-	_achDomainId = "";
-	_statDomainId = "";
 	return true;
 }
 
@@ -88,8 +84,8 @@ bool AchievementsManager::setAchievement(const String &id, const String &display
 
 	debug("AchievementsManager::setAchievement('%s'): Achievement unlocked!", id.c_str());
 
-	ConfMan.setBool(id, true, _achDomainId);
-	ConfMan.flushToDisk();
+	_iniFile->setKey(id, "achievements", "true");
+	_iniFile->saveToSaveFile(_iniFileName);
 
 	if (!displayedMessage.empty() && g_system) {
 		String msg;
@@ -106,7 +102,7 @@ bool AchievementsManager::isAchieved(const String &id) {
 		return false;
 	}
 
-	return ConfMan.hasKey(id, _achDomainId) && ConfMan.getBool(id, _achDomainId);
+	return _iniFile->hasKey(id, "achievements");
 }
 
 
@@ -115,8 +111,8 @@ bool AchievementsManager::clearAchievement(const String &id) {
 		return false;
 	}
 
-	ConfMan.removeKey(id, _achDomainId);
-	ConfMan.flushToDisk();
+	_iniFile->removeKey(id, "achievements");
+	_iniFile->saveToSaveFile(_iniFileName);
 	return true;
 }
 
@@ -127,8 +123,8 @@ bool AchievementsManager::setStatFloat(const String &id, float value) {
 	}
 
 	String tmp = Common::String::format("%8.8f", value);
-	ConfMan.set(id, tmp, _statDomainId);
-	ConfMan.flushToDisk();
+	_iniFile->setKey(id, "statistics", tmp);
+	_iniFile->saveToSaveFile(_iniFileName);
 	return 0;
 }
 
@@ -138,7 +134,8 @@ float AchievementsManager::getStatFloat(const String &id) {
 		return 0.0;
 	}
 
-	String tmp = ConfMan.get(id, _statDomainId);
+	String tmp;
+	_iniFile->getKey(id, "statistics", tmp);
 	return atof(tmp.c_str());
 }
 
@@ -148,8 +145,9 @@ bool AchievementsManager::setStatInt(String const &id, int value) {
 		return false;
 	}
 
-	ConfMan.setInt(id, value, _statDomainId);
-	ConfMan.flushToDisk();
+	String tmp = Common::String::format("%d", value);
+	_iniFile->setKey(id, "statistics", tmp);
+	_iniFile->saveToSaveFile(_iniFileName);
 	return 0;
 }
 
@@ -159,7 +157,9 @@ int AchievementsManager::getStatInt(String const &id) {
 		return 0;
 	}
 
-	return ConfMan.getInt(id, _statDomainId);
+	String tmp;
+	_iniFile->getKey(id, "statistics", tmp);
+	return atol(tmp.c_str());
 }
 
 
@@ -168,8 +168,8 @@ bool AchievementsManager::resetAllAchievements() {
 		return false;
 	}
 
-	ConfMan.removeMiscDomain(_achDomainId);
-	ConfMan.flushToDisk();
+	_iniFile->removeSection("achievements");
+	_iniFile->saveToSaveFile(_iniFileName);
 	return 0;
 }
 
@@ -179,8 +179,8 @@ bool AchievementsManager::resetAllStats() {
 		return false;
 	}
 
-	ConfMan.removeMiscDomain(_statDomainId);
-	ConfMan.flushToDisk();
+	_iniFile->removeSection("statistics");
+	_iniFile->saveToSaveFile(_iniFileName);
 	return 0;
 }
 
diff --git a/common/achievements.h b/common/achievements.h
index 986c2111ad..59ed057f27 100644
--- a/common/achievements.h
+++ b/common/achievements.h
@@ -24,6 +24,7 @@
 #define COMMON_ACHIEVEMENTS_H
 
 #include "common/array.h"
+#include "common/ini-file.h"
 #include "common/singleton.h"
 #include "common/str.h"
 
@@ -70,7 +71,7 @@ public:
 
 	bool setActiveDomain(AchievementsPlatform platform, const String &appId);
 	bool unsetActiveDomain();
-	bool isReady() { return _achDomainId.size() > 0 && _statDomainId.size() > 0; }
+	bool isReady() { return _iniFile != nullptr; }
 
 	// Methods to manipulate individual achievements 
 	bool setAchievement(const String &id, const String &displayedMessage);
@@ -88,8 +89,8 @@ public:
 	bool resetAllStats();
 
 private:
-	String _achDomainId;
-	String _statDomainId;
+	INIFile* _iniFile;
+	String _iniFileName;
 };
 
 /** Shortcut for accessing the achievements manager. */




More information about the Scummvm-git-logs mailing list