[Scummvm-git-logs] scummvm master -> d7d54f745af7b02807e402a019b204683b60b628

bluegr noreply at scummvm.org
Thu Aug 21 19:35:11 UTC 2025


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

Summary:
d7d54f745a CHAMBER: Add keymapper support


Commit: d7d54f745af7b02807e402a019b204683b60b628
    https://github.com/scummvm/scummvm/commit/d7d54f745af7b02807e402a019b204683b60b628
Author: aunnoman1 (aunnoman123 at outlook.com)
Date: 2025-08-21T22:35:07+03:00

Commit Message:
CHAMBER: Add keymapper support

Changed paths:
  A engines/chamber/POTFILES
    engines/chamber/chamber.h
    engines/chamber/input.cpp
    engines/chamber/metaengine.cpp


diff --git a/engines/chamber/POTFILES b/engines/chamber/POTFILES
new file mode 100644
index 00000000000..e9895993fec
--- /dev/null
+++ b/engines/chamber/POTFILES
@@ -0,0 +1 @@
+engines/chamber/metaengine.cpp
diff --git a/engines/chamber/chamber.h b/engines/chamber/chamber.h
index 59f21177d36..b8dcfe53a56 100644
--- a/engines/chamber/chamber.h
+++ b/engines/chamber/chamber.h
@@ -38,6 +38,14 @@ struct ADGameDescription;
 
 namespace Chamber {
 
+enum CHAMBERActions {
+	kActionNone,
+	kActionInteract,
+	kActionQuit,
+	kActionYes,
+	kActionNo,
+};
+
 class ChamberEngine : public Engine {
 private:
 	// We need random numbers
diff --git a/engines/chamber/input.cpp b/engines/chamber/input.cpp
index da5ff89d743..c017331df65 100644
--- a/engines/chamber/input.cpp
+++ b/engines/chamber/input.cpp
@@ -33,6 +33,8 @@
 #include "chamber/timer.h"
 #include "chamber/ifgm.h"
 
+#include "backends/keymapper/keymapper.h"
+
 namespace Chamber {
 
 byte have_mouse = 0;
@@ -59,10 +61,17 @@ void pollDiscrete(void);
 byte ChamberEngine::readKeyboardChar() {
 	Common::Event event;
 
+	Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+	keymapper->disableAllGameKeymaps();
+	g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
+
 	while (true) {
 		while (g_system->getEventManager()->pollEvent(event)) {
 			switch (event.type) {
 			case Common::EVENT_KEYDOWN:
+				g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
+				keymapper->getKeymap("chamber-default")->setEnabled(true);
+				keymapper->getKeymap("game-shortcuts")->setEnabled(true);
 				return event.kbd.ascii;
 
 			case Common::EVENT_RETURN_TO_LAUNCHER:
@@ -156,13 +165,18 @@ int16 askQuitGame(void) {
 
 	Common::Event event;
 
+	Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+	keymapper->getKeymap("chamber-default")->setEnabled(false);
+	keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+	keymapper->getKeymap("quit-dialog")->setEnabled(true);
+
 	while (quit == -1) {
 		while (g_system->getEventManager()->pollEvent(event)) {
 			switch (event.type) {
-			case Common::EVENT_KEYDOWN:
-				if (event.kbd.keycode == Common::KEYCODE_y)
+			case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+				if (event.customType == kActionYes)
 					quit = 1;
-				else if (event.kbd.keycode == Common::KEYCODE_n)
+				else if (event.customType == kActionNo)
 					quit = 0;
 				break;
 
@@ -177,6 +191,10 @@ int16 askQuitGame(void) {
 	}
 	cga_CopyScreenBlock(backbuffer, char_draw_max_width + 2, char_draw_coords_y - draw_y + 8, frontbuffer, CalcXY_p(draw_x, draw_y));
 
+	keymapper->getKeymap("quit-dialog")->setEnabled(false);
+	keymapper->getKeymap("chamber-default")->setEnabled(true);
+	keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+
 	return quit;
 }
 
@@ -188,10 +206,10 @@ void pollInput(void) {
 	Common::Event event;
 	while (g_system->getEventManager()->pollEvent(event)) {
 		switch (event.type) {
-		case Common::EVENT_KEYDOWN:
-			if (event.kbd.keycode == Common::KEYCODE_SPACE)
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+			if (event.customType == kActionInteract)
 				mouseButtons |= 1;
-			else if (event.kbd.keycode == Common::KEYCODE_ESCAPE) {
+			else if (event.customType == kActionQuit) {
 				if (g_vm->getLanguage() == Common::EN_USA) {
 					if (askQuitGame() != 0)
 						g_vm->_shouldQuit = true;
@@ -199,8 +217,8 @@ void pollInput(void) {
 			}
 			break;
 
-		case Common::EVENT_KEYUP:
-			if (event.kbd.keycode == Common::KEYCODE_SPACE)
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+			if (event.customType == kActionInteract)
 				mouseButtons &= ~1;
 			break;
 
diff --git a/engines/chamber/metaengine.cpp b/engines/chamber/metaengine.cpp
index 13eeb7b14b6..0148c1daff0 100644
--- a/engines/chamber/metaengine.cpp
+++ b/engines/chamber/metaengine.cpp
@@ -22,6 +22,12 @@
 #include "chamber/chamber.h"
 #include "engines/advancedDetector.h"
 
+#include "common/translation.h"
+
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
 namespace Chamber {
 
 Common::Language ChamberEngine::getLanguage() const {
@@ -37,6 +43,7 @@ public:
 	}
 
 	Common::Error createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const override;
+	Common::KeymapArray initKeymaps(const char *target) const override;
 };
 
 Common::Error ChamberMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
@@ -44,6 +51,66 @@ Common::Error ChamberMetaEngine::createInstance(OSystem *syst, Engine **engine,
 	return Common::kNoError;
 }
 
+
+Common::KeymapArray ChamberMetaEngine::initKeymaps(const char *target) const {
+	using namespace Common;
+	using namespace Chamber;
+
+	Keymap *engineKeymap = new Keymap(Keymap::kKeymapTypeGame, "chamber-default", _("Default keymappings"));
+	Keymap *gameKeymap = new Keymap(Keymap::kKeymapTypeGame, "game-shortcuts", _("Game keymappings"));
+	Keymap *quitDialogKeymap = new Keymap(Keymap::kKeymapTypeGame, "quit-dialog", _("Quit dialog keymappings"));
+
+	Action *act;
+
+	act = new Action(kStandardActionLeftClick, _("Select / Interact"));
+	act->setLeftClickEvent();
+	act->addDefaultInputMapping("MOUSE_LEFT");
+	act->addDefaultInputMapping("JOY_A");
+	engineKeymap->addAction(act);
+
+	act = new Action(kStandardActionRightClick, _("Select / Interact"));
+	act->setRightClickEvent();
+	act->addDefaultInputMapping("MOUSE_RIGHT");
+	act->addDefaultInputMapping("JOY_B");
+	engineKeymap->addAction(act);
+
+	act = new Action("INTERACT", _("Select / Interact"));
+	act->setCustomEngineActionEvent(kActionInteract);
+	act->addDefaultInputMapping("SPACE");
+	gameKeymap->addAction(act);
+
+	// Only the EN_USA version has a quit dialog. Input handling does a similar check.
+	if (parseLanguage(ConfMan.get("language")) == EN_USA) {
+		act = new Action("QUIT", _("Quit"));
+		act->setCustomEngineActionEvent(kActionQuit);
+		act->addDefaultInputMapping("ESCAPE");
+		act->addDefaultInputMapping("JOY_X");
+		gameKeymap->addAction(act);
+	}
+
+	act = new Action("YES", _("Yes"));
+	act->setCustomEngineActionEvent(kActionYes);
+	act->addDefaultInputMapping("y");
+	act->addDefaultInputMapping("JOY_A");
+	quitDialogKeymap->addAction(act);
+
+	act = new Action("NO", _("No"));
+	act->setCustomEngineActionEvent(kActionNo);
+	act->addDefaultInputMapping("n");
+	act->addDefaultInputMapping("JOY_B");
+	quitDialogKeymap->addAction(act);
+
+	Common::KeymapArray keymaps(3);
+
+	keymaps[0] = engineKeymap;
+	keymaps[1] = gameKeymap;
+	keymaps[2] = quitDialogKeymap;
+
+	quitDialogKeymap->setEnabled(false);
+
+	return keymaps;
+}
+
 #if PLUGIN_ENABLED_DYNAMIC(CHAMBER)
 REGISTER_PLUGIN_DYNAMIC(CHAMBER, PLUGIN_TYPE_ENGINE, ChamberMetaEngine);
 #else




More information about the Scummvm-git-logs mailing list