[Scummvm-git-logs] scummvm master -> 4f3db682762091146389a2553717b5a03bd59b64
sev-
noreply at scummvm.org
Sun Jun 15 20:19:11 UTC 2025
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
7338155681 SLUDGE: Move game descriptor table to detection_tables.h
4f3db68276 SLUDGE: Add keymapper support
Commit: 73381556815640d4c7f1f920a8abf9f50ffe6a42
https://github.com/scummvm/scummvm/commit/73381556815640d4c7f1f920a8abf9f50ffe6a42
Author: aunnoman1 (aunnoman123 at outlook.com)
Date: 2025-06-15T22:19:07+02:00
Commit Message:
SLUDGE: Move game descriptor table to detection_tables.h
Changed paths:
engines/sludge/detection.cpp
engines/sludge/detection_tables.h
diff --git a/engines/sludge/detection.cpp b/engines/sludge/detection.cpp
index 95cb92f8be7..59f4c990586 100644
--- a/engines/sludge/detection.cpp
+++ b/engines/sludge/detection.cpp
@@ -36,27 +36,6 @@ static const DebugChannelDef debugFlagList[] = {
{Sludge::kSludgeDebugSound, "sound", "Sound debug level"},
DEBUG_CHANNEL_END
};
-static const PlainGameDescriptor sludgeGames[] = {
- { "sludge", "Sludge Game" },
- { "welcome", "Welcome Example" },
- { "verbcoin", "Verb Coin" },
- { "verbcoin2", "Verb Coin 2"},
- { "parallax", "Parallax Demo" },
- { "robinsrescue", "Robin's Rescue" },
- { "outoforder", "Out Of Order" },
- { "frasse", "Frasse and the Peas of Kejick" },
- { "interview", "The Interview" },
- { "life", "Life Flashes By" },
- { "tgttpoacs", "The Game That Takes Place on a Cruise Ship" },
- { "mandy", "Mandy Christmas Adventure" },
- { "cubert", "Cubert Badbone, P.I." },
- { "gjgagsas", "The Game Jam Game About Games, Secrets and Stuff" },
- { "tsotc", "The Secret of Tremendous Corporation" },
- { "nsc", "Nathan's Second Chance" },
- { "atw", "Above The Waves" },
- { "leptonsquest", "Lepton's Quest" },
- { 0, 0 }
-};
#include "sludge/detection_tables.h"
@@ -78,7 +57,7 @@ static char s_fallbackFileNameBuffer[51];
class SludgeMetaEngineDetection : public AdvancedMetaEngineDetection<Sludge::SludgeGameDescription> {
public:
- SludgeMetaEngineDetection() : AdvancedMetaEngineDetection(Sludge::gameDescriptions, sludgeGames) {
+ SludgeMetaEngineDetection() : AdvancedMetaEngineDetection(Sludge::gameDescriptions, Sludge::sludgeGames) {
_maxScanDepth = 1;
}
diff --git a/engines/sludge/detection_tables.h b/engines/sludge/detection_tables.h
index d45e75f9dc0..79c8d2fe734 100644
--- a/engines/sludge/detection_tables.h
+++ b/engines/sludge/detection_tables.h
@@ -21,6 +21,28 @@
namespace Sludge {
+static const PlainGameDescriptor sludgeGames[] = {
+ { "sludge", "Sludge Game" },
+ { "welcome", "Welcome Example" },
+ { "verbcoin", "Verb Coin" },
+ { "verbcoin2", "Verb Coin 2"},
+ { "parallax", "Parallax Demo" },
+ { "robinsrescue", "Robin's Rescue" },
+ { "outoforder", "Out Of Order" },
+ { "frasse", "Frasse and the Peas of Kejick" },
+ { "interview", "The Interview" },
+ { "life", "Life Flashes By" },
+ { "tgttpoacs", "The Game That Takes Place on a Cruise Ship" },
+ { "mandy", "Mandy Christmas Adventure" },
+ { "cubert", "Cubert Badbone, P.I." },
+ { "gjgagsas", "The Game Jam Game About Games, Secrets and Stuff" },
+ { "tsotc", "The Secret of Tremendous Corporation" },
+ { "nsc", "Nathan's Second Chance" },
+ { "atw", "Above The Waves" },
+ { "leptonsquest", "Lepton's Quest" },
+ { 0, 0 }
+};
+
#define GAME1l(t, e, f1, m1, s1, lang, pl, langId) { { t, e, AD_ENTRY1s(f1, m1, s1), lang, pl, ADGF_UNSTABLE, GUIO1(GUIO_NOMIDI) }, langId }
#define GAME1(t, e, f1, m1, s1) GAME1l(t, e, f1, m1, s1, Common::EN_ANY, Common::kPlatformUnknown, 0)
#define GAME2l(t, e, f1, m1, s1, f2, m2, s2, lang, pl, langId) { { t, e, AD_ENTRY2s(f1, m1, s1, f2, m2, s2), lang, pl, ADGF_UNSTABLE, GUIO1(GUIO_NOMIDI) }, langId }
Commit: 4f3db682762091146389a2553717b5a03bd59b64
https://github.com/scummvm/scummvm/commit/4f3db682762091146389a2553717b5a03bd59b64
Author: aunnoman1 (aunnoman123 at outlook.com)
Date: 2025-06-15T22:19:07+02:00
Commit Message:
SLUDGE: Add keymapper support
Changed paths:
A engines/sludge/POTFILES
A engines/sludge/keymapper_tables.h
engines/sludge/builtin.cpp
engines/sludge/event.cpp
engines/sludge/metaengine.cpp
diff --git a/engines/sludge/POTFILES b/engines/sludge/POTFILES
new file mode 100644
index 00000000000..04fdda0fd3b
--- /dev/null
+++ b/engines/sludge/POTFILES
@@ -0,0 +1,2 @@
+engines/sludge/detection_tables.h
+engines/sludge/keymapper_tables.h
diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp
index 90f57934b33..5f8cbdfe03f 100644
--- a/engines/sludge/builtin.cpp
+++ b/engines/sludge/builtin.cpp
@@ -26,6 +26,8 @@
#include "engines/metaengine.h"
+#include "backends/keymapper/keymapper.h"
+
#include "sludge/builtin.h"
#include "sludge/cursors.h"
#include "sludge/event.h"
@@ -145,6 +147,11 @@ builtIn(freeze) {
g_sludge->_gfxMan->freeze();
freezeSubs();
fun->freezerLevel = 0;
+ Common::Keymapper *keymapper = g_sludge->getEventManager()->getKeymapper();
+ // Turn off keymapper in menus
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+ // Turn on keymapper for controller
+ keymapper->getKeymap("menu")->setEnabled(true);
return BR_CONTINUE;
}
@@ -152,6 +159,11 @@ builtIn(unfreeze) {
UNUSEDALL
g_sludge->_gfxMan->unfreeze();
unfreezeSubs();
+ Common::Keymapper *keymapper = g_sludge->getEventManager()->getKeymapper();
+ // Turn on keymapper in menus
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+ // Turn off keymapper for controller
+ keymapper->getKeymap("menu")->setEnabled(false);
return BR_CONTINUE;
}
diff --git a/engines/sludge/event.cpp b/engines/sludge/event.cpp
index 4ae54f9da4e..9dd57251495 100644
--- a/engines/sludge/event.cpp
+++ b/engines/sludge/event.cpp
@@ -201,16 +201,16 @@ bool EventManager::handleInput() {
if (_input.keyPressed && _currentEvents->func[kSpace]) {
Common::String tempString = "";
switch (_input.keyPressed) {
- case 127:
+ case Common::KEYCODE_DELETE:
tempString = "BACKSPACE";
break;
- case 9:
+ case Common::KEYCODE_TAB:
tempString = "TAB";
break;
- case 13:
+ case Common::KEYCODE_RETURN:
tempString = "ENTER";
break;
- case 27:
+ case Common::KEYCODE_ESCAPE:
tempString = "ESCAPE";
break;
/*
@@ -229,68 +229,68 @@ bool EventManager::handleInput() {
case 2019: tempString = copyString ("PAUSE"); break;
*/
- case 63276:
+ case Common::KEYCODE_PAGEUP:
tempString = "PAGE UP";
break;
- case 63277:
+ case Common::KEYCODE_PAGEDOWN:
tempString = "PAGE DOWN";
break;
- case 63275:
+ case Common::KEYCODE_END:
tempString = "END";
break;
- case 63273:
+ case Common::KEYCODE_HOME:
tempString = "HOME";
break;
- case 63234:
+ case Common::KEYCODE_LEFT:
tempString = "LEFT";
break;
- case 63232:
+ case Common::KEYCODE_UP:
tempString = "UP";
break;
- case 63235:
+ case Common::KEYCODE_RIGHT:
tempString = "RIGHT";
break;
- case 63233:
+ case Common::KEYCODE_DOWN:
tempString = "DOWN";
break;
/*
case 2045: tempString = copyString ("INSERT"); break;
case 2046: tempString = copyString ("DELETE"); break;
*/
- case 63236:
+ case Common::KEYCODE_F1:
tempString = "F1";
break;
- case 63237:
+ case Common::KEYCODE_F2:
tempString = "F2";
break;
- case 63238:
+ case Common::KEYCODE_F3:
tempString = "F3";
break;
- case 63239:
+ case Common::KEYCODE_F4:
tempString = "F4";
break;
- case 63240:
+ case Common::KEYCODE_F5:
tempString = "F5";
break;
- case 63241:
+ case Common::KEYCODE_F6:
tempString = "F6";
break;
- case 63242:
+ case Common::KEYCODE_F7:
tempString = "F7";
break;
- case 63243:
+ case Common::KEYCODE_F8:
tempString = "F8";
break;
- case 63244:
+ case Common::KEYCODE_F9:
tempString = "F9";
break;
- case 63245:
+ case Common::KEYCODE_F10:
tempString = "F10";
break;
- case 63246:
+ case Common::KEYCODE_F11:
tempString = "F11";
break;
- case 63247:
+ case Common::KEYCODE_F12:
tempString = "F12";
break;
diff --git a/engines/sludge/keymapper_tables.h b/engines/sludge/keymapper_tables.h
new file mode 100644
index 00000000000..a26640b46c3
--- /dev/null
+++ b/engines/sludge/keymapper_tables.h
@@ -0,0 +1,603 @@
+/* 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 3 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, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
+#include "common/translation.h"
+
+namespace Sludge {
+inline Common::KeymapArray getSludgeKeymaps(const char *target, const Common::String &gameId) {
+
+ using namespace Common;
+
+ Keymap *gameKeyMap = new Keymap(Keymap::kKeymapTypeGame, "game-shortcuts", _("Game keymappings"));
+ Keymap *debugKeyMap = new Keymap(Keymap::kKeymapTypeGame, "debug", _("Debug keymappings"));
+ Keymap *menuKeymap = new Keymap(Keymap::kKeymapTypeGame, "menu", _("Menu keymappings"));
+ Keymap *minigameKeymap = new Keymap(Keymap::kKeymapTypeGame, "minigame", _("Minigame keymappings"));
+ Action *act;
+
+ if (gameId == "outoforder") {
+ act = new Action(kStandardActionLeftClick, _("Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Change action"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionPause, _("Pause"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("INVENTORY", _("Inventory"));
+ act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+ act->addDefaultInputMapping("SPACE");
+ act->addDefaultInputMapping("JOY_Y");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SAVE", _("Quick save"));
+ act->setKeyEvent(KeyState(KEYCODE_s, 's'));
+ act->addDefaultInputMapping("s");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SPEEDUP", _("Speed up dialogue"));
+ act->setKeyEvent(KeyState(KEYCODE_PLUS, '+'));
+ act->addDefaultInputMapping("PLUS");
+ act->addDefaultInputMapping("JOY_UP");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SPEEDDOWN", _("Slow down dialogue"));
+ act->setKeyEvent(KeyState(KEYCODE_MINUS, '-'));
+ act->addDefaultInputMapping("MINUS");
+ act->addDefaultInputMapping("JOY_DOWN");
+ gameKeyMap->addAction(act);
+
+ } else if (gameId == "tsotc") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Skip dialogue"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action("QUIT", _("Quit"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("LOADAUTOSAVE", _("Load auto save"));
+ act->setKeyEvent(KeyState(KEYCODE_a, 'a'));
+ act->addDefaultInputMapping("a");
+ act->addDefaultInputMapping("JOY_X");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SAVE", _("Save game"));
+ act->setKeyEvent(KeyState(KEYCODE_s, 's'));
+ act->addDefaultInputMapping("s");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("LOAD", _("Load save"));
+ act->setKeyEvent(KeyState(KEYCODE_l, 'l'));
+ act->addDefaultInputMapping("l");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("INVENTORY", _("Inventory"));
+ act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
+ act->addDefaultInputMapping("i");
+ act->addDefaultInputMapping("JOY_Y");
+ gameKeyMap->addAction(act);
+
+ act = new Action("PAUSE", _("Pause"));
+ act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+ act->addDefaultInputMapping("SPACE");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+
+ } else if (gameId == "gjgagsas") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Skip dialogue"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action("QUIT", _("Quit"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("LOADAUTOSAVE", _("Load auto save"));
+ act->setKeyEvent(KeyState(KEYCODE_a, 'a'));
+ act->addDefaultInputMapping("a");
+ act->addDefaultInputMapping("JOY_X");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SAVE", _("Save game"));
+ act->setKeyEvent(KeyState(KEYCODE_s, 's'));
+ act->addDefaultInputMapping("s");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("LOAD", _("Load save"));
+ act->setKeyEvent(KeyState(KEYCODE_l, 'l'));
+ act->addDefaultInputMapping("l");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("INVENTORY", _("Inventory"));
+ act->setKeyEvent(KeyState(KEYCODE_i, 'i'));
+ act->addDefaultInputMapping("i");
+ act->addDefaultInputMapping("JOY_Y");
+ gameKeyMap->addAction(act);
+
+ } else if (gameId == "robinsrescue") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Inventory"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionPause, _("Pause"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("q");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SKIPDLG", _("Skip dialogue"));
+ act->setKeyEvent(KeyState(KEYCODE_PERIOD, '.'));
+ act->addDefaultInputMapping("PERIOD");
+ act->addDefaultInputMapping("JOY_X");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SHOWFLOOR", _("DEBUG: Show floor"));
+ act->setKeyEvent(KeyState(KEYCODE_f, 'f'));
+ act->addDefaultInputMapping("f");
+ debugKeyMap->addAction(act);
+
+ act = new Action("SHOWBOXES", _("DEBUG: Show boxes"));
+ act->setKeyEvent(KeyState(KEYCODE_b, 'b'));
+ act->addDefaultInputMapping("b");
+ debugKeyMap->addAction(act);
+
+ } else if (gameId == "atw") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Inventory"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action("QUIT", _("Quit"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("q");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeyMap->addAction(act);
+
+ } else if (gameId == "cubert") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Inventory / Examine"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionPause, _("Pause"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+
+ } else if (gameId == "frasse") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Inventory"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionPause, _("Pause"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SKIPDLG", _("Skip dialogue"));
+ act->setKeyEvent(KeyState(KEYCODE_PERIOD, '.'));
+ act->addDefaultInputMapping("PERIOD");
+ act->addDefaultInputMapping("JOY_X");
+ gameKeyMap->addAction(act);
+
+ } else if (gameId == "tgttpoacs") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Examine / Skip dialogue"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionPause, _("Pause / Skip cutscene"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SPEEDUP", _("Speed up dialogue"));
+ act->setKeyEvent(KeyState(KEYCODE_PLUS, '+'));
+ act->addDefaultInputMapping("PLUS");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SPEEDDOWN", _("Slow down dialogue"));
+ act->setKeyEvent(KeyState(KEYCODE_MINUS, '-'));
+ act->addDefaultInputMapping("MINUS");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SAVE", _("Quick save"));
+ act->setKeyEvent(KeyState(KEYCODE_s, 's'));
+ act->addDefaultInputMapping("s");
+ gameKeyMap->addAction(act);
+
+ act = new Action("LOAD", _("Quick load"));
+ act->setKeyEvent(KeyState(KEYCODE_l, 'l'));
+ act->addDefaultInputMapping("l");
+ gameKeyMap->addAction(act);
+
+ act = new Action("EXAMINE", _("Examine"));
+ act->setKeyEvent(KeyState(KEYCODE_e, 'e'));
+ act->addDefaultInputMapping("e");
+ gameKeyMap->addAction(act);
+
+ act = new Action("PICKUP", _("Pick up"));
+ act->setKeyEvent(KeyState(KEYCODE_p, 'p'));
+ act->addDefaultInputMapping("p");
+ gameKeyMap->addAction(act);
+
+ act = new Action("TALK", _("Talk to"));
+ act->setKeyEvent(KeyState(KEYCODE_t, 't'));
+ act->addDefaultInputMapping("t");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SMELL", _("Smell"));
+ act->setKeyEvent(KeyState(KEYCODE_m, 'm'));
+ act->addDefaultInputMapping("m");
+ gameKeyMap->addAction(act);
+
+ act = new Action("USE", _("Use"));
+ act->setKeyEvent(KeyState(KEYCODE_u, 'u'));
+ act->addDefaultInputMapping("u");
+ gameKeyMap->addAction(act);
+
+ act = new Action("CONSUME", _("Consume"));
+ act->setKeyEvent(KeyState(KEYCODE_c, 'c'));
+ act->addDefaultInputMapping("c");
+ gameKeyMap->addAction(act);
+
+ act = new Action("QUIT", _("Quit"));
+ act->setKeyEvent(KeyState(KEYCODE_q, 'q'));
+ act->addDefaultInputMapping("q");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("START", _("Start"));
+ act->setKeyEvent(KeyState(KEYCODE_RETURN, ASCII_RETURN));
+ act->addDefaultInputMapping("RETURN");
+ act->addDefaultInputMapping("JOY_Y");
+ minigameKeymap->addAction(act);
+
+ act = new Action("QUIT", _("Quit"));
+ act->setKeyEvent(KeyState(KEYCODE_q, 'q'));
+ act->addDefaultInputMapping("q");
+ act->addDefaultInputMapping("JOY_X");
+ minigameKeymap->addAction(act);
+
+ act = new Action("CASTEARTH", _("Cast earth spell"));
+ act->setKeyEvent(KeyState(KEYCODE_z, 'z'));
+ act->addDefaultInputMapping("z");
+ act->addDefaultInputMapping("JOY_LEFT");
+ minigameKeymap->addAction(act);
+
+ act = new Action("CASTAIR", _("Cast air spell"));
+ act->setKeyEvent(KeyState(KEYCODE_x, 'x'));
+ act->addDefaultInputMapping("x");
+ act->addDefaultInputMapping("JOY_UP");
+ minigameKeymap->addAction(act);
+
+ act = new Action("CASTFIRE", _("Cast fire spell"));
+ act->setKeyEvent(KeyState(KEYCODE_c, 'c'));
+ act->addDefaultInputMapping("c");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ minigameKeymap->addAction(act);
+
+ act = new Action("CASTWATER", _("Cast water spell"));
+ act->setKeyEvent(KeyState(KEYCODE_v, 'v'));
+ act->addDefaultInputMapping("v");
+ act->addDefaultInputMapping("JOY_DOWN");
+ minigameKeymap->addAction(act);
+
+ } else if (gameId == "interview") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Skip dialogue"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionPause, _("Pause / Skip cutscene"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("LOAD", _("Quick Load"));
+ act->setKeyEvent(KeyState(KEYCODE_l, 'l'));
+ act->addDefaultInputMapping("l");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SAVE", _("Quick Save"));
+ act->setKeyEvent(KeyState(KEYCODE_s, 's'));
+ act->addDefaultInputMapping("s");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("QUIT", _("Quit"));
+ act->setKeyEvent(KeyState(KEYCODE_q, 'q'));
+ act->addDefaultInputMapping("q");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeyMap->addAction(act);
+
+ } else if (gameId == "leptonsquest") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact / Skip dialogue"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action("QUIT", _("Quit"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SHOWFLOOR", _("DEBUG: Show floor"));
+ act->setKeyEvent(KeyState(KEYCODE_f, 'f'));
+ act->addDefaultInputMapping("f");
+ debugKeyMap->addAction(act);
+
+ act = new Action("SHOWBOXES", _("DEBUG: Show boxes"));
+ act->setKeyEvent(KeyState(KEYCODE_b, 'b'));
+ act->addDefaultInputMapping("b");
+ debugKeyMap->addAction(act);
+
+ } else if (gameId == "life") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SKIPDLG", _("Skip dialogue"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping(".");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionPause, _("Pause"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SAVE", _("Quick save"));
+ act->setKeyEvent(KeyState(KEYCODE_s, 's'));
+ act->addDefaultInputMapping("s");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("LOAD", _("Quick load"));
+ act->setKeyEvent(KeyState(KEYCODE_l, 'l'));
+ act->addDefaultInputMapping("l");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ } else if (gameId == "mandy") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Skip dialogue"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionPause, _("Pause"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SAVE", _("Quick save"));
+ act->setKeyEvent(KeyState(KEYCODE_s, 's'));
+ act->addDefaultInputMapping("s");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("LOAD", _("Quick load"));
+ act->setKeyEvent(KeyState(KEYCODE_l, 'l'));
+ act->addDefaultInputMapping("l");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+
+ } else if (gameId == "nsc") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact / Skip dialogue"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Inventory / Skip dialogue"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionPause, _("Pause / Skip cutscene"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+
+ } else if (gameId == "verbcoin") {
+ act = new Action(kStandardActionLeftClick, _("Move / Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Skip dialogue"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action("QUIT", _("Quit"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SHOWBOXES", _("DEBUG: Show boxes"));
+ act->setKeyEvent(KeyState(KEYCODE_SPACE, ASCII_SPACE));
+ act->addDefaultInputMapping("SPACE");
+ debugKeyMap->addAction(act);
+
+ act = new Action("SHOWFLOOR", _("DEBUG: Show floor"));
+ act->setKeyEvent(KeyState(KEYCODE_f, 'f'));
+ act->addDefaultInputMapping("f");
+ debugKeyMap->addAction(act);
+
+ } else {
+ // Default keymap for other games
+ warning("Game-specific keymap is not defined. Using default SLUDGE engine keymap");
+
+ act = new Action(kStandardActionLeftClick, _("Left Click"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Right Click"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action(kStandardActionPause, _("Pause Game"));
+ act->setKeyEvent(KeyState(KEYCODE_ESCAPE, ASCII_ESCAPE));
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+ }
+
+ act = new Action(kStandardActionLeftClick, _("Left Click"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ menuKeymap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Right Click"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ menuKeymap->addAction(act);
+
+ KeymapArray keyMaps(4);
+ keyMaps[0] = gameKeyMap;
+ keyMaps[1] = debugKeyMap;
+ keyMaps[2] = menuKeymap;
+ keyMaps[3] = minigameKeymap;
+
+ menuKeymap->setEnabled(false);
+
+ return keyMaps;
+}
+
+} // End of namespace Sludge
diff --git a/engines/sludge/metaengine.cpp b/engines/sludge/metaengine.cpp
index bd7d98525e2..9d044358df5 100644
--- a/engines/sludge/metaengine.cpp
+++ b/engines/sludge/metaengine.cpp
@@ -23,6 +23,7 @@
#include "sludge/sludge.h"
#include "sludge/detection.h"
+#include "sludge/keymapper_tables.h"
namespace Sludge {
@@ -48,12 +49,19 @@ public:
*engine = new Sludge::SludgeEngine(syst, desc);
return Common::kNoError;
}
+
+ Common::KeymapArray initKeymaps(const char *target) const override;
};
bool SludgeMetaEngine::hasFeature(MetaEngineFeature f) const {
return checkExtendedSaves(f) || (f == kSupportsLoadingDuringStartup);
}
+Common::KeymapArray SludgeMetaEngine::initKeymaps(const char *target) const {
+ Common::String gameId = ConfMan.get("gameid", target);
+ return Sludge::getSludgeKeymaps(target, gameId);
+}
+
#if PLUGIN_ENABLED_DYNAMIC(SLUDGE)
REGISTER_PLUGIN_DYNAMIC(SLUDGE, PLUGIN_TYPE_ENGINE, SludgeMetaEngine);
#else
More information about the Scummvm-git-logs
mailing list