[Scummvm-git-logs] scummvm master -> b7d0ffad607a093f2b3cf4464b3c8f5fd66e2c33
sev-
noreply at scummvm.org
Mon Sep 1 14:53:09 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:
b7d0ffad60 HYPNO: Add keymapper support
Commit: b7d0ffad607a093f2b3cf4464b3c8f5fd66e2c33
https://github.com/scummvm/scummvm/commit/b7d0ffad607a093f2b3cf4464b3c8f5fd66e2c33
Author: aunnoman1 (aunnoman123 at outlook.com)
Date: 2025-09-01T16:53:06+02:00
Commit Message:
HYPNO: Add keymapper support
Changed paths:
engines/hypno/arcade.cpp
engines/hypno/boyz/arcade.cpp
engines/hypno/boyz/hard.cpp
engines/hypno/hypno.cpp
engines/hypno/hypno.h
engines/hypno/metaengine.cpp
engines/hypno/scene.cpp
engines/hypno/spider/arcade.cpp
engines/hypno/wet/arcade.cpp
engines/hypno/wet/hard.cpp
diff --git a/engines/hypno/arcade.cpp b/engines/hypno/arcade.cpp
index 5fdc38cacec..7442ab01329 100644
--- a/engines/hypno/arcade.cpp
+++ b/engines/hypno/arcade.cpp
@@ -27,6 +27,8 @@
#include "hypno/grammar.h"
#include "hypno/hypno.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Hypno {
extern int parse_arc(const char *);
@@ -309,12 +311,15 @@ void HypnoEngine::runArcade(ArcadeShooting *arc) {
case Common::EVENT_QUIT:
case Common::EVENT_RETURN_TO_LAUNCHER:
break;
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ pressedKey(event.customType);
+ if (event.customType == kActionPrimaryShoot)
+ if (clickedPrimaryShoot(mousePos))
+ shootingPrimary = true;
+ break;
case Common::EVENT_KEYDOWN:
pressedKey(event.kbd.keycode);
- if (event.kbd.keycode == Common::KEYCODE_LCTRL)
- if (clickedPrimaryShoot(mousePos))
- shootingPrimary = true;
break;
case Common::EVENT_LBUTTONDOWN:
@@ -823,5 +828,16 @@ bool HypnoEngine::checkRButtonUp() {
void HypnoEngine::setRButtonUp(const bool val) {
return;
}
+
+void HypnoEngine::disableGameKeymaps() {
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+}
+
+void HypnoEngine::enableGameKeymaps() {
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+}
+
} // End of namespace Hypno
diff --git a/engines/hypno/boyz/arcade.cpp b/engines/hypno/boyz/arcade.cpp
index 4650fb7f4c5..0d8fac6d7a9 100644
--- a/engines/hypno/boyz/arcade.cpp
+++ b/engines/hypno/boyz/arcade.cpp
@@ -24,6 +24,8 @@
#include "common/events.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Hypno {
void BoyzEngine::runBeforeArcade(ArcadeShooting *arc) {
@@ -187,14 +189,12 @@ void BoyzEngine::showArcadeStats(int territory, const ArcadeStats &data) {
}
void BoyzEngine::pressedKey(const int keycode) {
- if (keycode == Common::KEYCODE_c) {
- if (_cheatsEnabled) {
- _skipLevel = true;
- return;
- }
- } else if (keycode == Common::KEYCODE_k) { // Added for testing
+ if (keycode == kActionSkipLevel) {
+ _skipLevel = true;
+ return;
+ } else if (keycode == kActionKillPlayer) { // Added for testing
_health = 0;
- } else if (keycode == Common::KEYCODE_ESCAPE) {
+ } else if (keycode == kActionPause) {
openMainMenuDialog();
}
}
@@ -907,4 +907,4 @@ bool BoyzEngine::clickedSecondaryShoot(const Common::Point &mousePos) {
return true;
}
-} // namespace Hypno
\ No newline at end of file
+} // namespace Hypno
diff --git a/engines/hypno/boyz/hard.cpp b/engines/hypno/boyz/hard.cpp
index 445e93ca7d0..f50aa4f9914 100644
--- a/engines/hypno/boyz/hard.cpp
+++ b/engines/hypno/boyz/hard.cpp
@@ -27,6 +27,8 @@
#include "hypno/hypno.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Hypno {
void BoyzEngine::runCode(Code *code) {
@@ -74,6 +76,8 @@ void BoyzEngine::runMainMenu(Code *code) {
if (posY >= 185)
break;
}
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
while (!shouldQuit() && cont) {
while (g_system->getEventManager()->pollEvent(event)) {
@@ -120,6 +124,7 @@ void BoyzEngine::runMainMenu(Code *code) {
g_system->delayMillis(10);
}
g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
menu->free();
delete menu;
@@ -152,6 +157,8 @@ bool BoyzEngine::runExitMenu() {
Common::Rect yesBox(142, 87, 179, 102);
Common::Rect noBox(142, 104, 179, 119);
bool cont = true;
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("exit-menu")->setEnabled(true);
while (!shouldQuit() && cont) {
while (g_system->getEventManager()->pollEvent(event)) {
Common::Point mousePos = g_system->getEventManager()->getMousePos();
@@ -162,12 +169,12 @@ bool BoyzEngine::runExitMenu() {
case Common::EVENT_RETURN_TO_LAUNCHER:
break;
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_y) {
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ if (event.customType == kActionYes) {
quit = true;
cont = false;
- } else if (event.kbd.keycode == Common::KEYCODE_n) {
+ } else if (event.customType == kActionNo) {
quit = false;
cont = false;
break;
@@ -194,6 +201,7 @@ bool BoyzEngine::runExitMenu() {
drawScreen();
g_system->delayMillis(10);
}
+ keymapper->getKeymap("exit-menu")->setEnabled(false);
menu->free();
delete menu;
return quit;
@@ -215,6 +223,9 @@ void BoyzEngine::runDifficultyMenu(Code *code) {
free(palette);
drawImage(*menu, 0, 0, false);
bool cont = true;
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+ keymapper->getKeymap("difficulty-menu")->setEnabled(true);
while (!shouldQuit() && cont) {
while (g_system->getEventManager()->pollEvent(event)) {
mousePos = g_system->getEventManager()->getMousePos();
@@ -241,17 +252,17 @@ void BoyzEngine::runDifficultyMenu(Code *code) {
}
break;
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_c) {
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ if (event.customType == kActionDifficultyChump) {
_difficulty = "chump";
cont = false;
- } else if (event.kbd.keycode == Common::KEYCODE_p) {
+ } else if (event.customType == kActionDifficultyPunk) {
_difficulty = "punk";
cont = false;
- } else if (event.kbd.keycode == Common::KEYCODE_b) {
+ } else if (event.customType == kActionDifficultyBadass) {
_difficulty = "bad ass";
cont = false;
- } else if (event.kbd.keycode == Common::KEYCODE_a) {
+ } else if (event.customType == kActionDifficultExit) {
cont = false;
}
break;
@@ -264,6 +275,8 @@ void BoyzEngine::runDifficultyMenu(Code *code) {
drawScreen();
g_system->delayMillis(10);
}
+ keymapper->getKeymap("difficulty-menu")->setEnabled(false);
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
if (_difficulty.empty())
_nextLevel = "<main_menu>";
@@ -303,6 +316,9 @@ void BoyzEngine::runRetryMenu(Code *code) {
free(palette);
drawImage(*menu, 0, 0, false);
bool cont = true;
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+ keymapper->getKeymap("retry-menu")->setEnabled(true);
while (!shouldQuit() && cont) {
while (g_system->getEventManager()->pollEvent(event)) {
mousePos = g_system->getEventManager()->getMousePos();
@@ -331,20 +347,20 @@ void BoyzEngine::runRetryMenu(Code *code) {
quitGame();
break;
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_s) {
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ if (event.customType == kActionRetry) {
_nextLevel = _checkpoint;
cont = false;
- } else if (event.kbd.keycode == Common::KEYCODE_n) {
+ } else if (event.customType == kActionNewMission) {
_nextLevel = "<main_menu>";
cont = false;
- } else if (event.kbd.keycode == Common::KEYCODE_t) {
+ } else if (event.customType == kActionRestart) {
// Restore initial health for the team
_health = _maxHealth;
_stats = _globalStats;
_nextLevel = firstLevelTerritory(_checkpoint);
cont = false;
- } else if (event.kbd.keycode == Common::KEYCODE_q)
+ } else if (event.customType == kActionQuit)
quitGame();
break;
@@ -356,6 +372,8 @@ void BoyzEngine::runRetryMenu(Code *code) {
drawScreen();
g_system->delayMillis(10);
}
+ keymapper->getKeymap("retry-menu")->setEnabled(false);
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
menu->free();
delete menu;
diff --git a/engines/hypno/hypno.cpp b/engines/hypno/hypno.cpp
index b9c6d21f16f..87431bfbc45 100644
--- a/engines/hypno/hypno.cpp
+++ b/engines/hypno/hypno.cpp
@@ -42,6 +42,8 @@
#include "hypno/grammar.h"
#include "hypno/hypno.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Hypno {
Hotspots *g_parsedHots;
@@ -233,12 +235,16 @@ void HypnoEngine::runIntros(Videos &videos) {
playVideo(*it);
}
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ disableGameKeymaps();
+ keymapper->getKeymap("intro")->setEnabled(true);
+
while (!shouldQuit()) {
while (g_system->getEventManager()->pollEvent(event)) {
// Events
switch (event.type) {
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_ESCAPE)
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ if (event.customType == kActionSkipIntro)
skip = true;
break;
case Common::EVENT_LBUTTONDOWN:
@@ -290,6 +296,8 @@ void HypnoEngine::runIntros(Videos &videos) {
g_system->updateScreen();
g_system->delayMillis(10);
}
+ keymapper->getKeymap("intro")->setEnabled(false);
+ enableGameKeymaps();
}
void HypnoEngine::runIntro(MVideo &video) {
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 6dc1c2fa609..acd0808e774 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -78,6 +78,32 @@ enum SpiderColors {
kSpiderColorBlue = 252,
};
+enum HYPNOActions {
+ kActionNone,
+ kActionSkipIntro,
+ kActionSkipCutscene,
+ kActionPrimaryShoot,
+ kActionSkipLevel,
+ kActionKillPlayer,
+ kActionPause,
+ kActionLeft,
+ kActionDown,
+ kActionRight,
+ kActionUp,
+ kActionYes,
+ kActionNo,
+ kActionDifficultyChump,
+ kActionDifficultyPunk,
+ kActionDifficultyBadass,
+ kActionDifficultExit,
+ kActionRetry,
+ kActionRestart,
+ kActionNewMission,
+ kActionQuit,
+ kActionCredits,
+ kActionSelect,
+};
+
class HypnoEngine;
class CursorCache {
@@ -287,6 +313,8 @@ public:
virtual byte *getTargetColor(Common::String name, int levelId);
virtual bool checkRButtonUp();
virtual void setRButtonUp(const bool val);
+ virtual void disableGameKeymaps();
+ virtual void enableGameKeymaps();
// Segments
Segments _segments;
@@ -455,6 +483,8 @@ public:
byte *getTargetColor(Common::String name, int levelId) override;
bool checkRButtonUp() override;
void setRButtonUp(const bool val) override;
+ void disableGameKeymaps() override;
+ void enableGameKeymaps() override;
bool hasFeature(EngineFeature f) const override {
diff --git a/engines/hypno/metaengine.cpp b/engines/hypno/metaengine.cpp
index ebb0a36df4e..4b3ce6f641a 100644
--- a/engines/hypno/metaengine.cpp
+++ b/engines/hypno/metaengine.cpp
@@ -26,6 +26,10 @@
#include "hypno/hypno.h"
#include "hypno/detection.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
static const ADExtraGuiOptionsMap optionsList[] = {
{
GAMEOPTION_ORIGINAL_CHEATS,
@@ -96,6 +100,7 @@ public:
}
Common::Error createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const override;
+ Common::KeymapArray initKeymaps(const char *target) const override;
};
Common::Error HypnoMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
@@ -111,6 +116,273 @@ Common::Error HypnoMetaEngine::createInstance(OSystem *syst, Engine **engine, co
return Common::kNoError;
}
+
+Common::KeymapArray HypnoMetaEngine::initKeymaps(const char *target) const {
+ using namespace Common;
+ using namespace Hypno;
+
+ Common::String gameId = ConfMan.get("gameid", target);
+
+ KeymapArray keymaps;
+
+ Keymap *engineKeymap = new Keymap(Keymap::kKeymapTypeGame, "hypno-default", _("Default keymappings"));
+ Keymap *introKeymap = new Keymap(Keymap::kKeymapTypeGame, "intro", _("Intro keymappings"));
+ Keymap *cutsceneKeymap = new Keymap(Keymap::kKeymapTypeGame, "cutscene", _("Cutscene keymappings"));
+
+ Common::Action *act;
+
+ act = new Common::Action(kStandardActionLeftClick, _("Primary shoot"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ engineKeymap->addAction(act);
+
+ act = new Common::Action(kStandardActionRightClick, _("Secondary shoot"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ engineKeymap->addAction(act);
+
+ act = new Common::Action("SKIPINTRO", _("Skip intro"));
+ act->setCustomEngineActionEvent(kActionSkipIntro);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_Y");
+ introKeymap->addAction(act);
+
+ act = new Common::Action("SKIPCUTSCENE", _("Skip cutscene"));
+ act->setCustomEngineActionEvent(kActionSkipCutscene);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_Y");
+ cutsceneKeymap->addAction(act);
+
+ keymaps.push_back(engineKeymap);
+ keymaps.push_back(introKeymap);
+ keymaps.push_back(cutsceneKeymap);
+
+ introKeymap->setEnabled(false);
+ cutsceneKeymap->setEnabled(false);
+
+ if (gameId == "soldierboyz") {
+ Keymap *gameKeymap = new Keymap(Keymap::kKeymapTypeGame, "game-shortcuts", _("Game keymappings"));
+ Keymap *exitMenuKeymap = new Keymap(Keymap::kKeymapTypeGame, "exit-menu", _("Exit menu keymappings"));
+ Keymap *difficulyMenuKeymap = new Keymap(Keymap::kKeymapTypeGame, "difficulty-menu", _("Difficulty selection menu keymappings"));
+ Keymap *retryMenuKeymap = new Keymap(Keymap::kKeymapTypeGame, "retry-menu", _("Retry menu keymappings"));
+
+ if (ConfMan.getBool("cheats",target)) {
+ act = new Common::Action("SKIPLEVEL", _("Skip level (cheat)"));
+ act->setCustomEngineActionEvent(kActionSkipLevel);
+ act->addDefaultInputMapping("c");
+ act->addDefaultInputMapping("JOY_X");
+ gameKeymap->addAction(act);
+ }
+
+ // I18N: (Game name: Soldier Boyz) player refers to the users own character.
+ act = new Common::Action("KILLPLAYER", _("Kill player"));
+ act->setCustomEngineActionEvent(kActionKillPlayer);
+ act->addDefaultInputMapping("k");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeymap->addAction(act);
+
+ act = new Common::Action("PAUSE", _("Pause"));
+ act->setCustomEngineActionEvent(kActionPause);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_UP");
+ gameKeymap->addAction(act);
+
+ act = new Common::Action("YES", _("Yes"));
+ act->setCustomEngineActionEvent(kActionYes);
+ act->addDefaultInputMapping("y");
+ act->addDefaultInputMapping("JOY_A");
+ exitMenuKeymap->addAction(act);
+
+ act = new Common::Action("NO", _("No"));
+ act->setCustomEngineActionEvent(kActionNo);
+ act->addDefaultInputMapping("n");
+ act->addDefaultInputMapping("JOY_B");
+ exitMenuKeymap->addAction(act);
+
+ // I18N: (Game name: Soldier Boyz) the game has 3 difficulty levels: Chump, Punk and Badass. Chump is the easy mode.
+ act = new Common::Action("CHUMP", _("Chump"));
+ act->setCustomEngineActionEvent(kActionDifficultyChump);
+ act->addDefaultInputMapping("c");
+ act->addDefaultInputMapping("JOY_LEFT");
+ difficulyMenuKeymap->addAction(act);
+
+ // I18N: (Game name: Soldier Boyz) the game has 3 difficulty levels: Chump, Punk and Badass. Punk is the medium mode.
+ act = new Common::Action("PUNK", _("Punk"));
+ act->setCustomEngineActionEvent(kActionDifficultyPunk);
+ act->addDefaultInputMapping("p");
+ act->addDefaultInputMapping("JOY_UP");
+ difficulyMenuKeymap->addAction(act);
+
+ // I18N: (Game name: Soldier Boyz) the game has 3 difficulty levels: Chump, Punk and Badass. Badass is the hard mode.
+ act = new Common::Action("BADASS", _("Badass"));
+ act->setCustomEngineActionEvent(kActionDifficultyBadass);
+ act->addDefaultInputMapping("b");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ difficulyMenuKeymap->addAction(act);
+
+ act = new Common::Action("CANCEL", _("Cancel"));
+ act->setCustomEngineActionEvent(kActionDifficultExit);
+ act->addDefaultInputMapping("a");
+ act->addDefaultInputMapping("JOY_DOWN");
+ difficulyMenuKeymap->addAction(act);
+
+ // I18N: (Game name: Soldier Boyz) This makes the player restart from the last checkpoint.
+ act = new Common::Action("RETRY", _("Retry sector"));
+ act->setCustomEngineActionEvent(kActionRetry);
+ act->addDefaultInputMapping("s");
+ act->addDefaultInputMapping("JOY_LEFT");
+ retryMenuKeymap->addAction(act);
+
+ // I18N: (Game name: Soldier Boyz) This makes the player restart the current mission / level.
+ act = new Common::Action("RESTART", _("Restart territory"));
+ act->setCustomEngineActionEvent(kActionRestart);
+ act->addDefaultInputMapping("t");
+ act->addDefaultInputMapping("JOY_UP");
+ retryMenuKeymap->addAction(act);
+
+ act = new Common::Action("EXIT", _("Begin new mission"));
+ act->setCustomEngineActionEvent(kActionNewMission);
+ act->addDefaultInputMapping("n");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ retryMenuKeymap->addAction(act);
+
+ act = new Common::Action("QUIT", _("Quit"));
+ act->setCustomEngineActionEvent(kActionQuit);
+ act->addDefaultInputMapping("q");
+ act->addDefaultInputMapping("JOY_DOWN");
+ retryMenuKeymap->addAction(act);
+
+ keymaps.push_back(gameKeymap);
+ keymaps.push_back(exitMenuKeymap);
+ keymaps.push_back(difficulyMenuKeymap);
+ keymaps.push_back(retryMenuKeymap);
+
+ exitMenuKeymap->setEnabled(false);
+ difficulyMenuKeymap->setEnabled(false);
+ retryMenuKeymap->setEnabled(false);
+
+ } else if (gameId == "sinistersix") {
+ Keymap *gameKeymap = new Keymap(Keymap::kKeymapTypeGame, "game-shortcuts", _("Game keymappings"));
+
+ if (ConfMan.getBool("cheats", target)) {
+ act = new Common::Action("SKIPLEVEL", _("Skip level (cheat)"));
+ act->setCustomEngineActionEvent(kActionSkipLevel);
+ act->addDefaultInputMapping("c");
+ act->addDefaultInputMapping("JOY_X");
+ gameKeymap->addAction(act);
+ }
+
+ // I18N: (Game name: Marvel Comics Spider-Man: The Sinister Six) player refers to the users own character.
+ act = new Common::Action("KILLPLAYER", _("Kill player"));
+ act->setCustomEngineActionEvent(kActionKillPlayer);
+ act->addDefaultInputMapping("k");
+ act->addDefaultInputMapping("JOY_Y");
+ gameKeymap->addAction(act);
+
+ act = new Common::Action("LEFT", _("Move left"));
+ act->setCustomEngineActionEvent(kActionLeft);
+ act->addDefaultInputMapping("LEFT");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeymap->addAction(act);
+
+ act = new Common::Action("DOWN", _("Move down"));
+ act->setCustomEngineActionEvent(kActionDown);
+ act->addDefaultInputMapping("DOWN");
+ act->addDefaultInputMapping("JOY_DOWN");
+ gameKeymap->addAction(act);
+
+ act = new Common::Action("RIGHT", _("Move right"));
+ act->setCustomEngineActionEvent(kActionRight);
+ act->addDefaultInputMapping("RIGHT");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeymap->addAction(act);
+
+ act = new Common::Action("UP", _("Move up"));
+ act->setCustomEngineActionEvent(kActionUp);
+ act->addDefaultInputMapping("UP");
+ act->addDefaultInputMapping("JOY_UP");
+ gameKeymap->addAction(act);
+
+ keymaps.push_back(gameKeymap);
+
+ } else if (gameId == "wetlands") {
+ Keymap *gameKeymap = new Keymap(Keymap::kKeymapTypeGame, "game-shortcuts", _("Game keymappings"));
+ Keymap *menuKeymap = new Keymap(Keymap::kKeymapTypeGame, "menu", _("Menu keymappings"));
+ Keymap *pauseKeymap = new Keymap(Keymap::kKeymapTypeGame, "pause", _("Pause keymappings"));
+ Keymap *directionKeymap = new Keymap(Keymap::kKeymapTypeGame, "direction", _("Direction keymappings"));
+
+ act = new Common::Action("CREDITS", _("Show credits"));
+ act->setCustomEngineActionEvent(kActionCredits);
+ act->addDefaultInputMapping("c");
+ act->addDefaultInputMapping("JOY_LEFT_TRIGGER");
+ gameKeymap->addAction(act);
+
+ act = new Common::Action("SKIPLEVEL", _("Skip level (cheat)"));
+ act->setCustomEngineActionEvent(kActionSkipLevel);
+ act->addDefaultInputMapping("s");
+ act->addDefaultInputMapping("JOY_X");
+ gameKeymap->addAction(act);
+
+ // I18N: (Game name: Wetlands) player refers to the users own character.
+ act = new Common::Action("KILLPLAYER", _("Kill player"));
+ act->setCustomEngineActionEvent(kActionKillPlayer);
+ act->addDefaultInputMapping("k");
+ act->addDefaultInputMapping("JOY_RIGHT_TRIGGER");
+ gameKeymap->addAction(act);
+
+ act = new Common::Action("LEFT", _("Move left"));
+ act->setCustomEngineActionEvent(kActionLeft);
+ act->allowKbdRepeats();
+ act->addDefaultInputMapping("LEFT");
+ act->addDefaultInputMapping("JOY_LEFT");
+ directionKeymap->addAction(act);
+
+ act = new Common::Action("DOWN", _("Move down"));
+ act->setCustomEngineActionEvent(kActionDown);
+ act->allowKbdRepeats();
+ act->addDefaultInputMapping("DOWN");
+ act->addDefaultInputMapping("JOY_DOWN");
+ directionKeymap->addAction(act);
+
+ act = new Common::Action("RIGHT", _("Move right"));
+ act->setCustomEngineActionEvent(kActionRight);
+ act->allowKbdRepeats();
+ act->addDefaultInputMapping("RIGHT");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ directionKeymap->addAction(act);
+
+ act = new Common::Action("UP", _("Move up"));
+ act->setCustomEngineActionEvent(kActionUp);
+ act->allowKbdRepeats();
+ act->addDefaultInputMapping("UP");
+ act->addDefaultInputMapping("JOY_UP");
+ directionKeymap->addAction(act);
+
+ act = new Common::Action("SELECT", _("Select"));
+ act->setCustomEngineActionEvent(kActionSelect);
+ act->addDefaultInputMapping("RETURN");
+ act->addDefaultInputMapping("JOY_X");
+ menuKeymap->addAction(act);
+
+ act = new Common::Action("PAUSE", _("Pause"));
+ act->setCustomEngineActionEvent(kActionPause);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_Y");
+ pauseKeymap->addAction(act);
+
+ keymaps.push_back(gameKeymap);
+ keymaps.push_back(menuKeymap);
+ keymaps.push_back(pauseKeymap);
+ keymaps.push_back(directionKeymap);
+
+ menuKeymap->setEnabled(false);
+ }
+
+ return keymaps;
+}
+
namespace Hypno {
bool HypnoEngine::isDemo() const {
diff --git a/engines/hypno/scene.cpp b/engines/hypno/scene.cpp
index 00740e37455..dfcb4b2a5f8 100644
--- a/engines/hypno/scene.cpp
+++ b/engines/hypno/scene.cpp
@@ -24,6 +24,8 @@
#include "hypno/grammar.h"
#include "hypno/hypno.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Hypno {
extern int parse_mis(const char *);
@@ -279,6 +281,7 @@ void HypnoEngine::runScene(Scene *scene) {
_refreshConversation = false;
Common::Event event;
Common::Point mousePos;
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
Common::List<uint32> videosToRemove;
bool enableLoopingVideos = true;
int32 lastCountdown = 0;
@@ -315,12 +318,15 @@ void HypnoEngine::runScene(Scene *scene) {
lastCountdown = _countdown;
}
+ disableGameKeymaps();
+ keymapper->getKeymap("cutscene")->setEnabled(true);
+
while (g_system->getEventManager()->pollEvent(event)) {
mousePos = g_system->getEventManager()->getMousePos();
// Events
switch (event.type) {
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_ESCAPE) {
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ if (event.customType == kActionSkipCutscene) {
for (Videos::iterator it = _videosPlaying.begin(); it != _videosPlaying.end(); ++it) {
if (it->decoder) {
skipVideo(*it);
@@ -385,6 +391,9 @@ void HypnoEngine::runScene(Scene *scene) {
}
}
+ keymapper->getKeymap("cutscene")->setEnabled(false);
+ enableGameKeymaps();
+
if (_refreshConversation && !_conversation.empty() &&
_nextSequentialVideoToPlay.empty() &&
_nextParallelVideoToPlay.empty() &&
diff --git a/engines/hypno/spider/arcade.cpp b/engines/hypno/spider/arcade.cpp
index 55e19ffd708..736ae2b4424 100644
--- a/engines/hypno/spider/arcade.cpp
+++ b/engines/hypno/spider/arcade.cpp
@@ -101,23 +101,21 @@ void SpiderEngine::findNextSegment(ArcadeShooting *arc) {
void SpiderEngine::pressedKey(const int keycode) {
- if (keycode == Common::KEYCODE_c) {
- if (_cheatsEnabled) {
- _skipLevel = true;
- return;
- }
- } else if (keycode == Common::KEYCODE_k) { // Added for testing
+ if (keycode == kActionSkipLevel) {
+ _skipLevel = true;
+ return;
+ } else if (keycode == kActionKillPlayer) { // Added for testing
_health = 0;
- } else if (keycode == Common::KEYCODE_LEFT) {
+ } else if (keycode == kActionLeft) {
_lastPlayerPosition = _currentPlayerPosition;
_currentPlayerPosition = kPlayerLeft;
- } else if (keycode == Common::KEYCODE_DOWN) {
+ } else if (keycode == kActionDown) {
_lastPlayerPosition = _currentPlayerPosition;
_currentPlayerPosition = kPlayerBottom;
- } else if (keycode == Common::KEYCODE_RIGHT) {
+ } else if (keycode == kActionRight) {
_lastPlayerPosition = _currentPlayerPosition;
_currentPlayerPosition = kPlayerRight;
- } else if (keycode == Common::KEYCODE_UP) {
+ } else if (keycode == kActionUp) {
_lastPlayerPosition = _currentPlayerPosition;
_currentPlayerPosition = kPlayerTop;
}
diff --git a/engines/hypno/wet/arcade.cpp b/engines/hypno/wet/arcade.cpp
index f39de2a14b2..f58b8e9ea6c 100644
--- a/engines/hypno/wet/arcade.cpp
+++ b/engines/hypno/wet/arcade.cpp
@@ -26,6 +26,8 @@
#include "gui/message.h"
#include "graphics/cursorman.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Hypno {
void WetEngine::initSegment(ArcadeShooting *arc) {
@@ -730,7 +732,7 @@ void WetEngine::runBeforeArcade(ArcadeShooting *arc) {
}
void WetEngine::pressedKey(const int keycode) {
- if (keycode == Common::KEYCODE_c) {
+ if (keycode == kActionCredits) {
_background->decoder->pauseVideo(true);
showCredits();
loadPalette(_currentPalette);
@@ -740,33 +742,31 @@ void WetEngine::pressedKey(const int keycode) {
drawScreen();
if (!_music.empty())
playSound(_music, 0, _musicRate); // restore music
- } else if (keycode == Common::KEYCODE_s) { // Added for testing
- if (_cheatsEnabled) {
- _skipLevel = true;
- }
- } else if (keycode == Common::KEYCODE_k) { // Added for testing
+ } else if (keycode == kActionSkipLevel) { // Added for testing
+ _skipLevel = true;
+ } else if (keycode == kActionKillPlayer) { // Added for testing
_health = 0;
- } else if (keycode == Common::KEYCODE_ESCAPE) {
+ } else if (keycode == kActionPause) {
openMainMenuDialog();
- } else if (keycode == Common::KEYCODE_LEFT) {
+ } else if (keycode == kActionLeft) {
if (_arcadeMode == "YT" && _c33PlayerPosition.x > 0) {
_c33UseMouse = false;
if (_c33PlayerDirection.size() < 3)
_c33PlayerDirection.push_back(kPlayerLeft);
}
- } else if (keycode == Common::KEYCODE_DOWN) {
+ } else if (keycode == kActionDown) {
if (_arcadeMode == "YT" && _c33PlayerPosition.y < 130) { // Viewport value minus 30
_c33UseMouse = false;
if (_c33PlayerDirection.size() < 3)
_c33PlayerDirection.push_back(kPlayerBottom);
}
- } else if (keycode == Common::KEYCODE_RIGHT) {
+ } else if (keycode == kActionRight) {
if (_arcadeMode == "YT" && _c33PlayerPosition.x < _screenW) {
_c33UseMouse = false;
if (_c33PlayerDirection.size() < 3)
_c33PlayerDirection.push_back(kPlayerRight);
}
- } else if (keycode == Common::KEYCODE_UP) {
+ } else if (keycode == kActionUp) {
if (_arcadeMode == "YT" && _c33PlayerPosition.y > 0) {
_c33UseMouse = false;
if (_c33PlayerDirection.size() < 3)
@@ -1184,4 +1184,18 @@ void WetEngine::setRButtonUp(const bool val) {
_rButtonUp = val;
}
+void WetEngine::disableGameKeymaps() {
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+ keymapper->getKeymap("pause")->setEnabled(false);
+ keymapper->getKeymap("direction")->setEnabled(false);
+}
+
+void WetEngine::enableGameKeymaps() {
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+ keymapper->getKeymap("pause")->setEnabled(true);
+ keymapper->getKeymap("direction")->setEnabled(true);
+}
+
} // End of namespace Hypno
diff --git a/engines/hypno/wet/hard.cpp b/engines/hypno/wet/hard.cpp
index 9c27378ec75..1a5580d3b0f 100644
--- a/engines/hypno/wet/hard.cpp
+++ b/engines/hypno/wet/hard.cpp
@@ -27,6 +27,8 @@
#include "hypno/hypno.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Hypno {
void WetEngine::endCredits(Code *code) {
@@ -85,6 +87,11 @@ void WetEngine::runLevelMenu(Code *code) {
drawImage(*menu, 0, 0, false);
bool cont = true;
playSound("sound/bub01.raw", 0, 22050);
+
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+ keymapper->getKeymap("menu")->setEnabled(true);
+
while (!shouldQuit() && cont) {
while (g_system->getEventManager()->pollEvent(event)) {
// Events
@@ -94,18 +101,18 @@ void WetEngine::runLevelMenu(Code *code) {
case Common::EVENT_RETURN_TO_LAUNCHER:
break;
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_DOWN && currentLevel < _lastLevel) {
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ if (event.customType == kActionDown && currentLevel < _lastLevel) {
playSound("sound/m_hilite.raw", 1, 11025);
currentLevel++;
- } else if (event.kbd.keycode == Common::KEYCODE_UP && currentLevel > 0) {
+ } else if (event.customType == kActionUp && currentLevel > 0) {
playSound("sound/m_hilite.raw", 1, 11025);
currentLevel--;
- } else if (event.kbd.keycode == Common::KEYCODE_RETURN ) {
+ } else if (event.customType == kActionSelect ) {
playSound("sound/m_choice.raw", 1, 11025);
_nextLevel = Common::String::format("c%d", _ids[currentLevel]);
cont = false;
- } else if (event.kbd.keycode == Common::KEYCODE_ESCAPE) {
+ } else if (event.customType == kActionPause) {
openMainMenuDialog();
}
@@ -127,6 +134,10 @@ void WetEngine::runLevelMenu(Code *code) {
drawScreen();
g_system->delayMillis(10);
}
+
+ keymapper->getKeymap("menu")->setEnabled(false);
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+
menu->free();
delete menu;
}
@@ -146,7 +157,13 @@ void WetEngine::runMainMenu(Code *code) {
drawImage(surName, subName.left, subName.top, true);
drawString("scifi08.fgx", _enterNameString, 48, 50, 100, c);
_name.clear();
+
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+ keymapper->getKeymap("pause")->setEnabled(false);
+ keymapper->getKeymap("direction")->setEnabled(false);
g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
+
bool cont = true;
while (!shouldQuit() && cont) {
while (g_system->getEventManager()->pollEvent(event)) {
@@ -213,6 +230,10 @@ void WetEngine::runMainMenu(Code *code) {
bool found = loadProfile(_name);
g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+ keymapper->getKeymap("pause")->setEnabled(true);
+ keymapper->getKeymap("direction")->setEnabled(true);
+
if (found || _name.empty()) {
menu->free();
delete menu;
@@ -251,6 +272,11 @@ void WetEngine::runMainMenu(Code *code) {
drawString("scifi08.fgx", _name, 140, 50, 170, c);
cont = true;
+
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+ keymapper->getKeymap("pause")->setEnabled(false);
+ keymapper->getKeymap("menu")->setEnabled(true);
+
while (!shouldQuit() && cont) {
while (g_system->getEventManager()->pollEvent(event)) {
// Events
@@ -261,7 +287,7 @@ void WetEngine::runMainMenu(Code *code) {
break;
case Common::EVENT_LBUTTONDOWN:
- case Common::EVENT_KEYDOWN:
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
if (!g_system->hasFeature(OSystem::kFeatureTouchscreen))
event.mouse = Common::Point(0, 0);
@@ -275,13 +301,13 @@ void WetEngine::runMainMenu(Code *code) {
}
} else if (idx == 1 && subWet.contains(event.mouse)) {
// Nothing
- } else if ((subWet.contains(event.mouse) || subDamp.contains(event.mouse) || event.kbd.keycode == Common::KEYCODE_LEFT) && idx > 0) {
+ } else if ((subWet.contains(event.mouse) || subDamp.contains(event.mouse) || event.customType == kActionLeft) && idx > 0) {
playSound("sound/no_rapid.raw", 1, 11025);
idx--;
- } else if ((subWet.contains(event.mouse) || subSoaked.contains(event.mouse) || event.kbd.keycode == Common::KEYCODE_RIGHT) && idx < 2) {
+ } else if ((subWet.contains(event.mouse) || subSoaked.contains(event.mouse) || event.customType == kActionRight) && idx < 2) {
playSound("sound/no_rapid.raw", 1, 11025);
idx++;
- } else if (event.kbd.keycode == Common::KEYCODE_RETURN)
+ } else if (event.customType == kActionSelect)
cont = false;
drawImage(*menu, 0, 0, false);
@@ -307,6 +333,11 @@ void WetEngine::runMainMenu(Code *code) {
drawScreen();
g_system->delayMillis(10);
}
+
+ keymapper->getKeymap("menu")->setEnabled(false);
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+ keymapper->getKeymap("pause")->setEnabled(true);
+
_name.toLowercase(); // make sure it is lowercase when we finish
_difficulty = difficulties[idx];
_nextLevel = code->levelIfWin;
More information about the Scummvm-git-logs
mailing list