[Scummvm-git-logs] scummvm master -> a84f448f3032a46188b92b2b4c954bbfc846e1f6
sev-
noreply at scummvm.org
Mon Sep 1 14:48:26 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:
a84f448f30 PETKA: Add keymapper support
Commit: a84f448f3032a46188b92b2b4c954bbfc846e1f6
https://github.com/scummvm/scummvm/commit/a84f448f3032a46188b92b2b4c954bbfc846e1f6
Author: aunnoman1 (aunnoman123 at outlook.com)
Date: 2025-09-01T16:48:22+02:00
Commit Message:
PETKA: Add keymapper support
Changed paths:
engines/petka/metaengine.cpp
engines/petka/petka.cpp
engines/petka/petka.h
engines/petka/q_system.cpp
diff --git a/engines/petka/metaengine.cpp b/engines/petka/metaengine.cpp
index 6e451ecbc12..b6068b47723 100644
--- a/engines/petka/metaengine.cpp
+++ b/engines/petka/metaengine.cpp
@@ -26,6 +26,11 @@
#include "petka/petka.h"
+#include "common/translation.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
class PetkaMetaEngine : public AdvancedMetaEngine<ADGameDescription> {
public:
const char *getName() const override {
@@ -38,6 +43,7 @@ public:
bool removeSaveState(const char *target, int slot) const override;
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
Common::Error createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const override;
+ Common::KeymapArray initKeymaps(const char *target) const override;
};
bool PetkaMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -100,6 +106,108 @@ Common::Error PetkaMetaEngine::createInstance(OSystem *syst, Engine **engine, co
return Common::kNoError;
}
+Common::KeymapArray PetkaMetaEngine::initKeymaps(const char *target) const {
+ using namespace Common;
+ using namespace Petka;
+
+ Keymap *engineKeymap = new Keymap(Keymap::kKeymapTypeGame, "petka-default", _("Default keymappings"));
+
+ Action *act;
+
+ act = new Action(kStandardActionLeftClick, _("Interact / Skip dialog"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ engineKeymap->addAction(act);
+
+ // I18N: (Game Name: Red Comrades 1: Save the Galaxy) The game has multiple actions that you can perform(take, use, etc.), the action menu allows you to select one of them.
+ act = new Action(kStandardActionRightClick, _("Open action menu / Close current interface"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ engineKeymap->addAction(act);
+
+ act = new Action("LOOK", _("Look"));
+ act->setCustomEngineActionEvent(kActionCursorLook);
+ act->addDefaultInputMapping("1");
+ act->addDefaultInputMapping("l");
+ act->addDefaultInputMapping("JOY_DOWN");
+ engineKeymap->addAction(act);
+
+ act = new Action("WALK", _("Walk"));
+ act->setCustomEngineActionEvent(kActionCursorWalk);
+ act->addDefaultInputMapping("2");
+ act->addDefaultInputMapping("w");
+ act->addDefaultInputMapping("JOY_LEFT");
+ engineKeymap->addAction(act);
+
+ act = new Action("TAKE", _("Take"));
+ act->setCustomEngineActionEvent(kActionCursorTake);
+ act->addDefaultInputMapping("3");
+ act->addDefaultInputMapping("g");
+ act->addDefaultInputMapping("JOY_UP");
+ engineKeymap->addAction(act);
+
+ act = new Action("USE", _("Use"));
+ act->setCustomEngineActionEvent(kActionCursorUse);
+ act->addDefaultInputMapping("4");
+ act->addDefaultInputMapping("u");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ engineKeymap->addAction(act);
+
+ act = new Action("TALK", _("Talk"));
+ act->setCustomEngineActionEvent(kActionCursorTalk);
+ act->addDefaultInputMapping("5");
+ act->addDefaultInputMapping("t");
+ act->addDefaultInputMapping("JOY_X");
+ engineKeymap->addAction(act);
+
+ // I18N: (Game Name: Red Comrades 1: Save the Galaxy) The game features two characters, but all actions are normally performed by Petka. This action allows you to "use" an object specifically with Chapayev instead.
+ act = new Action("CHAPAYEV", _("Chapayev use object"));
+ act->setCustomEngineActionEvent(kActionCursorChapayev);
+ act->addDefaultInputMapping("6");
+ act->addDefaultInputMapping("c");
+ act->addDefaultInputMapping("JOY_RIGHT_TRIGGER");
+ engineKeymap->addAction(act);
+
+ act = new Action("INVENTORY", _("Inventory"));
+ act->setCustomEngineActionEvent(kActionInventory);
+ act->addDefaultInputMapping("i");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ engineKeymap->addAction(act);
+
+ act = new Action("MAP", _("Map"));
+ act->setCustomEngineActionEvent(kActionMap);
+ act->addDefaultInputMapping("TAB");
+ act->addDefaultInputMapping("m");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ engineKeymap->addAction(act);
+
+ act = new Action("OPTIONS", _("Show / Hide options screen"));
+ act->setCustomEngineActionEvent(kActionOptions);
+ act->addDefaultInputMapping("o");
+ act->addDefaultInputMapping("JOY_LEFT_TRIGGER");
+ engineKeymap->addAction(act);
+
+ act = new Action("PREVIOUS_INTERFACE", _("Close current interface"));
+ act->setCustomEngineActionEvent(kActionPrevInterface);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_Y");
+ engineKeymap->addAction(act);
+
+ act = new Action("SAVE", _("Save game"));
+ act->setCustomEngineActionEvent(kActionSave);
+ act->addDefaultInputMapping("F2");
+ engineKeymap->addAction(act);
+
+ act = new Action("LOAD", _("Load game"));
+ act->setCustomEngineActionEvent(kActionLoad);
+ act->addDefaultInputMapping("F3");
+ engineKeymap->addAction(act);
+
+ return Keymap::arrayOf(engineKeymap);
+}
+
#if PLUGIN_ENABLED_DYNAMIC(PETKA)
REGISTER_PLUGIN_DYNAMIC(PETKA, PLUGIN_TYPE_ENGINE, PetkaMetaEngine);
#else
diff --git a/engines/petka/petka.cpp b/engines/petka/petka.cpp
index ea99e9e2dd5..e1d3a58b415 100644
--- a/engines/petka/petka.cpp
+++ b/engines/petka/petka.cpp
@@ -249,6 +249,7 @@ void PetkaEngine::playVideo(Common::SeekableReadStream *stream) {
case Common::EVENT_LBUTTONDOWN:
case Common::EVENT_RBUTTONDOWN:
case Common::EVENT_KEYDOWN:
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
goto end;
default:
break;
diff --git a/engines/petka/petka.h b/engines/petka/petka.h
index 89f61f3523b..6dadd90fc09 100644
--- a/engines/petka/petka.h
+++ b/engines/petka/petka.h
@@ -80,6 +80,23 @@ enum {
GF_COMPRESSED = (1 << 0),
};
+enum PETKAActions {
+ kActionNone,
+ kActionCursorLook,
+ kActionCursorWalk,
+ kActionCursorTake,
+ kActionCursorUse,
+ kActionCursorTalk,
+ kActionCursorChapayev,
+ kActionInventory,
+ kActionMap,
+ kActionOptions,
+ kActionPrevInterface,
+ kActionSave,
+ kActionLoad,
+ kActionSkip,
+};
+
class PetkaEngine : public Engine {
public:
PetkaEngine(OSystem *syst, const ADGameDescription *desc);
diff --git a/engines/petka/q_system.cpp b/engines/petka/q_system.cpp
index 90dbcfed2f6..84498dce01f 100644
--- a/engines/petka/q_system.cpp
+++ b/engines/petka/q_system.cpp
@@ -376,61 +376,55 @@ void QSystem::onEvent(const Common::Event &event) {
_currInterface->onRightButtonDown(p);
break;
}
- case Common::EVENT_KEYDOWN:
- switch (event.kbd.keycode) {
- case Common::KEYCODE_1:
- case Common::KEYCODE_l:
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ switch (event.customType) {
+ case kActionCursorLook:
setCursorAction(kActionLook);
break;
- case Common::KEYCODE_2:
- case Common::KEYCODE_w:
+ case kActionCursorWalk:
setCursorAction(kActionWalk);
break;
- case Common::KEYCODE_3:
- case Common::KEYCODE_g:
+ case kActionCursorTake:
setCursorAction(kActionTake);
break;
- case Common::KEYCODE_4:
- case Common::KEYCODE_u:
+ case kActionCursorUse:
setCursorAction(kActionUse);
break;
- case Common::KEYCODE_5:
- case Common::KEYCODE_t:
+ case kActionCursorTalk:
setCursorAction(kActionTalk);
break;
- case Common::KEYCODE_6:
- case Common::KEYCODE_c:
+ case kActionCursorChapayev:
setCursorAction(kActionObjUseChapayev);
break;
- case Common::KEYCODE_i:
+ case kActionInventory:
toggleCase();
break;
- case Common::KEYCODE_TAB:
- case Common::KEYCODE_m:
+ case kActionMap:
toggleMapInterface();
break;
- case Common::KEYCODE_o:
+ case kActionOptions:
togglePanelInterface();
break;
- case Common::KEYCODE_ESCAPE:
+ case kActionPrevInterface:
goPrevInterface();
break;
- case Common::KEYCODE_F2: {
+ case kActionSave: {
InterfaceSaveLoad::saveScreen();
startSaveLoad(kSaveMode);
break;
}
- case Common::KEYCODE_F3:
+ case kActionLoad:
startSaveLoad(kLoadMode);
break;
- case Common::KEYCODE_r:
- if (event.kbd.flags & Common::KBD_ALT) {
- _mainInterface->_dialog.fixCursor(); // Buggy in original
- }
- break;
default:
break;
}
+ case Common::EVENT_KEYDOWN:
+ if (event.kbd.keycode == Common::KEYCODE_r)
+ if (event.kbd.flags & Common::KBD_ALT) {
+ _mainInterface->_dialog.fixCursor(); // Buggy in original
+ }
+ break;
default:
break;
}
More information about the Scummvm-git-logs
mailing list