[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