[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