[Scummvm-git-logs] scummvm master -> aada306ffee9279e0008ed3eef2bbfed3e62c033
sev-
noreply at scummvm.org
Thu Jun 19 22:00:02 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:
aada306ffe SUPERNOVA: Add keymapper support
Commit: aada306ffee9279e0008ed3eef2bbfed3e62c033
https://github.com/scummvm/scummvm/commit/aada306ffee9279e0008ed3eef2bbfed3e62c033
Author: aunnoman1 (aunnoman123 at outlook.com)
Date: 2025-06-19T23:59:59+02:00
Commit Message:
SUPERNOVA: Add keymapper support
Changed paths:
engines/supernova/game-manager.cpp
engines/supernova/game-manager.h
engines/supernova/metaengine.cpp
engines/supernova/supernova.cpp
engines/supernova/supernova.h
engines/supernova/supernova1/state.cpp
engines/supernova/supernova2/state.cpp
diff --git a/engines/supernova/game-manager.cpp b/engines/supernova/game-manager.cpp
index 0d3f8ac77f1..02435a693c7 100644
--- a/engines/supernova/game-manager.cpp
+++ b/engines/supernova/game-manager.cpp
@@ -29,6 +29,8 @@
#include "supernova/supernova.h"
#include "supernova/game-manager.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Supernova {
bool GameManager::serialize(Common::WriteStream *out) {
@@ -247,11 +249,10 @@ bool GameManager::canSaveGameStateCurrently() {
void GameManager::updateEvents() {
}
-void GameManager::processInput(Common::KeyState &state) {
- _key = state;
+void GameManager::processInput(Common::CustomEventType action) {
- switch (state.keycode) {
- case Common::KEYCODE_F1:
+ switch (action) {
+ case kActionHelp:
// help
if (!_guiEnabled)
return;
@@ -260,74 +261,72 @@ void GameManager::processInput(Common::KeyState &state) {
else if (_vm->_MSPart == 2)
_vm->showHelpScreen2();
break;
- case Common::KEYCODE_F2:
+ case kActionInstr:
// show game manual
if (!_guiEnabled)
return;
_vm->showTextReader("doc");
break;
- case Common::KEYCODE_F3:
+ case kActionInfo:
// show game info
if (!_guiEnabled)
return;
_vm->showTextReader("inf");
break;
- case Common::KEYCODE_F4:
+ case kActionSpeed:
if (!_guiEnabled)
return;
_vm->setTextSpeed();
break;
- case Common::KEYCODE_F5:
+ case kActionPause:
_vm->openMainMenuDialog();
break;
- case Common::KEYCODE_x:
- if (state.flags & Common::KBD_ALT) {
- if (_vm->quitGameDialog())
- _vm->quitGame();
- }
+ case kActionQuit:
+ if (_vm->quitGameDialog())
+ _vm->quitGame();
break;
default:
break;
}
if (_vm->_improved && _guiEnabled) {
- switch (state.keycode) {
- case Common::KEYCODE_1:
+ switch (action) {
+ case kActionGo:
resetInputState();
_inputVerb = ACTION_WALK;
break;
- case Common::KEYCODE_2:
+ case kActionLook:
resetInputState();
_inputVerb = ACTION_LOOK;
break;
- case Common::KEYCODE_3:
+ case kActionTake:
resetInputState();
_inputVerb = ACTION_TAKE;
break;
- case Common::KEYCODE_4:
+ case kActionOpen:
resetInputState();
_inputVerb = ACTION_OPEN;
break;
- case Common::KEYCODE_5:
+ case kActionClose:
resetInputState();
_inputVerb = ACTION_CLOSE;
break;
- case Common::KEYCODE_6:
+ case kActionPush:
resetInputState();
_inputVerb = ACTION_PRESS;
break;
- case Common::KEYCODE_7:
+ case kActionPull:
resetInputState();
_inputVerb = ACTION_PULL;
break;
- case Common::KEYCODE_8:
+ case kActionUse:
resetInputState();
_inputVerb = ACTION_USE;
break;
- case Common::KEYCODE_9:
+ case kActionTalk:
resetInputState();
_inputVerb = ACTION_TALK;
break;
- case Common::KEYCODE_0:
+ case kActionGive:
resetInputState();
_inputVerb = ACTION_GIVE;
break;
@@ -345,6 +344,7 @@ void GameManager::resetInputState() {
_mouseClicked = false;
_keyPressed = false;
_key.reset();
+ _action = kActionNone;
_mouseClickType = Common::EVENT_MOUSEMOVE;
processInput();
@@ -812,6 +812,10 @@ void GameManager::wait(int ticks, bool checkInput, bool waitForSpeech) {
}
bool GameManager::waitOnInput(int ticks, Common::KeyCode &keycode, bool waitForSpeech) {
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->disableAllGameKeymaps();
+ keymapper->getKeymap("cutscene")->setEnabled(true);
+
Common::TextToSpeechManager *ttsMan = nullptr;
if (waitForSpeech && ConfMan.getBool("tts_enabled"))
ttsMan = g_system->getTextToSpeechManager();
@@ -823,17 +827,31 @@ bool GameManager::waitOnInput(int ticks, Common::KeyCode &keycode, bool waitForS
updateEvents();
g_system->updateScreen();
if (_keyPressed) {
- keycode = _key.keycode;
+ if (_action == kActionSkip) {
+ keycode = Common::KEYCODE_ESCAPE;
+ } else {
+ keycode = _key.keycode;
+ }
+ _action = kActionNone;
_key.reset();
if (ttsMan)
ttsMan->stop();
+ keymapper->getKeymap("cutscene")->setEnabled(false);
+ keymapper->getKeymap("supernova-default")->setEnabled(true);
+ keymapper->getKeymap("improved-mode")->setEnabled(true);
return true;
} else if (_mouseClicked) {
if (ttsMan)
ttsMan->stop();
+ keymapper->getKeymap("cutscene")->setEnabled(false);
+ keymapper->getKeymap("supernova-default")->setEnabled(true);
+ keymapper->getKeymap("improved-mode")->setEnabled(true);
return true;
}
} while ((_time < end || (ttsMan && ttsMan->isSpeaking())) && !_vm->shouldQuit());
+ keymapper->getKeymap("cutscene")->setEnabled(false);
+ keymapper->getKeymap("supernova-default")->setEnabled(true);
+ keymapper->getKeymap("improved-mode")->setEnabled(true);
return false;
}
@@ -894,6 +912,10 @@ void GameManager::animationOn() {
}
void GameManager::edit(Common::String &input, int x, int y, uint length) {
+ // turn off keymapper to allow full text input
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->disableAllGameKeymaps();
+ g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
bool isEditing = true;
uint cursorIndex = input.size();
// NOTE: Pixels for char needed = kFontWidth + 2px left and right side bearing
@@ -969,6 +991,10 @@ void GameManager::edit(Common::String &input, int x, int y, uint length) {
break;
}
}
+ // turn on default keymapper
+ keymapper->getKeymap("supernova-default")->setEnabled(true);
+ keymapper->getKeymap("improved-mode")->setEnabled(true);
+ g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
_guiEnabled = true;
}
diff --git a/engines/supernova/game-manager.h b/engines/supernova/game-manager.h
index d029664b7ad..42ef8473299 100644
--- a/engines/supernova/game-manager.h
+++ b/engines/supernova/game-manager.h
@@ -105,7 +105,7 @@ public:
virtual ~GameManager();
virtual void updateEvents();
- void processInput(Common::KeyState &state);
+ void processInput(Common::CustomEventType action);
void processInput();
virtual void executeRoom();
virtual bool serialize(Common::WriteStream *out);
@@ -116,6 +116,7 @@ public:
SupernovaEngine *_vm;
Sound *_sound;
Common::KeyState _key;
+ Common::CustomEventType _action;
Common::EventType _mouseClickType;
bool _mouseClicked;
bool _keyPressed;
diff --git a/engines/supernova/metaengine.cpp b/engines/supernova/metaengine.cpp
index 0ea5ea3b4a6..b7f5730a6b3 100644
--- a/engines/supernova/metaengine.cpp
+++ b/engines/supernova/metaengine.cpp
@@ -30,6 +30,10 @@
#include "supernova/supernova.h"
#include "supernova/detection.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
static const ADExtraGuiOptionsMap optionsList[] = {
{
GAMEOPTION_IMPROVED,
@@ -88,6 +92,8 @@ public:
else
return Common::String::format("%s.%03d", prefix, saveGameIdx);
}
+
+ Common::KeymapArray initKeymaps(const char *target) const override;
};
bool SupernovaMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -201,6 +207,217 @@ SaveStateDescriptor SupernovaMetaEngine::querySaveMetaInfos(const char *target,
return SaveStateDescriptor();
}
+Common::KeymapArray SupernovaMetaEngine::initKeymaps(const char *target) const {
+
+ using namespace Common;
+ using namespace Supernova;
+
+ Common::String gameId = ConfMan.get("gameid", target);
+
+ Keymap *engineKeymap = new Keymap(Keymap::kKeymapTypeGame, "supernova-default", _("Default keymappings"));
+ Keymap *menuKeymap = new Keymap(Keymap::kKeymapTypeGame, "menu", _("Menu keymappings"));
+ Keymap *cutsceneKeymap = new Keymap(Keymap::kKeymapTypeGame, "cutscene", _("Cutscene keymappings"));
+ Keymap *improvedKeymap = new Keymap(Keymap::kKeymapTypeGame, "improved-mode", _("Improved mode keymappings"));
+ Keymap *textReaderKeymap = new Keymap(Keymap::kKeymapTypeGame, "text-reader", _("Text reader keymappings"));
+ Keymap *computerKeymap = new Keymap(Keymap::kKeymapTypeGame, "computer", _("Computer keymappings"));
+
+ Common::Action *act;
+
+ act = new Common::Action(kStandardActionLeftClick, _("Interact"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ engineKeymap->addAction(act);
+
+ act = new Common::Action(kStandardActionRightClick, _("Perform Default Action"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ engineKeymap->addAction(act);
+
+ act = new Common::Action("HELP", _("Help"));
+ act->setCustomEngineActionEvent(kActionHelp);
+ act->addDefaultInputMapping("F1");
+ act->addDefaultInputMapping("JOY_LEFT");
+ engineKeymap->addAction(act);
+
+ act = new Common::Action("INSTRUCTIONS", _("Instructions"));
+ act->setCustomEngineActionEvent(kActionInstr);
+ act->addDefaultInputMapping("F2");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ engineKeymap->addAction(act);
+
+ act = new Common::Action("INFORMATION", _("Information"));
+ act->setCustomEngineActionEvent(kActionInfo);
+ act->addDefaultInputMapping("F3");
+ act->addDefaultInputMapping("JOY_UP");
+ engineKeymap->addAction(act);
+
+ act = new Common::Action("TEXTSPEED", _("Text speed"));
+ act->setCustomEngineActionEvent(kActionSpeed);
+ act->addDefaultInputMapping("F4");
+ act->addDefaultInputMapping("JOY_DOWN");
+ engineKeymap->addAction(act);
+
+ act = new Common::Action("PAUSE", _("Pause"));
+ act->setCustomEngineActionEvent(kActionPause);
+ act->addDefaultInputMapping("F5");
+ engineKeymap->addAction(act);
+
+ act = new Common::Action("QUIT", _("Quit"));
+ act->setCustomEngineActionEvent(kActionQuit);
+ act->addDefaultInputMapping("A+x");
+ act->addDefaultInputMapping("JOY_Y");
+ engineKeymap->addAction(act);
+
+ act = new Common::Action("UP", _("Up"));
+ act->setCustomEngineActionEvent(kActionUp);
+ act->addDefaultInputMapping("UP");
+ act->addDefaultInputMapping("JOY_UP");
+ textReaderKeymap->addAction(act);
+
+ act = new Common::Action("DOWN", _("Down"));
+ act->setCustomEngineActionEvent(kActionDown);
+ act->addDefaultInputMapping("DOWN");
+ act->addDefaultInputMapping("JOY_DOWN");
+ textReaderKeymap->addAction(act);
+
+ act = new Common::Action("PGUP", _("Page up"));
+ act->setCustomEngineActionEvent(kActionPgUp);
+ act->addDefaultInputMapping("PAGEUP");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ textReaderKeymap->addAction(act);
+
+ act = new Common::Action("PGDOWN", _("Page down"));
+ act->setCustomEngineActionEvent(kActionPgDown);
+ act->addDefaultInputMapping("PAGEDOWN");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ textReaderKeymap->addAction(act);
+
+ act = new Common::Action("EXIT", _("Exit"));
+ act->setCustomEngineActionEvent(kActionExit);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_B");
+ textReaderKeymap->addAction(act);
+
+ act = new Common::Action("SELECT", _("Select"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ menuKeymap->addAction(act);
+
+ act = new Common::Action("SKIP", _("Skip cutscene"));
+ act->setCustomEngineActionEvent(kActionSkip);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_B");
+ cutsceneKeymap->addAction(act);
+
+ act = new Common::Action("SKPL", _("Skip line"));
+ act->setCustomEngineActionEvent(kActionSkipLine);
+ act->addDefaultInputMapping("SPACE");
+ act->addDefaultInputMapping("JOY_A");
+ cutsceneKeymap->addAction(act);
+
+ act = new Common::Action("GO", _("Go"));
+ act->setCustomEngineActionEvent(kActionGo);
+ act->addDefaultInputMapping("1");
+ improvedKeymap->addAction(act);
+
+ act = new Common::Action("LOOK", _("Look"));
+ act->setCustomEngineActionEvent(kActionLook);
+ act->addDefaultInputMapping("2");
+ improvedKeymap->addAction(act);
+
+ act = new Common::Action("TAKE", _("Take"));
+ act->setCustomEngineActionEvent(kActionTake);
+ act->addDefaultInputMapping("3");
+ improvedKeymap->addAction(act);
+
+ act = new Common::Action("OPEN", _("Open"));
+ act->setCustomEngineActionEvent(kActionOpen);
+ act->addDefaultInputMapping("4");
+ improvedKeymap->addAction(act);
+
+ act = new Common::Action("CLOSE", _("Close"));
+ act->setCustomEngineActionEvent(kActionClose);
+ act->addDefaultInputMapping("5");
+ improvedKeymap->addAction(act);
+
+ act = new Common::Action("PUSH", _("Push"));
+ act->setCustomEngineActionEvent(kActionPush);
+ act->addDefaultInputMapping("6");
+ improvedKeymap->addAction(act);
+
+ act = new Common::Action("PULL", _("Pull"));
+ act->setCustomEngineActionEvent(kActionPull);
+ act->addDefaultInputMapping("7");
+ improvedKeymap->addAction(act);
+
+ act = new Common::Action("USE", _("Use"));
+ act->setCustomEngineActionEvent(kActionUse);
+ act->addDefaultInputMapping("8");
+ improvedKeymap->addAction(act);
+
+ act = new Common::Action("TALK", _("Talk"));
+ act->setCustomEngineActionEvent(kActionTalk);
+ act->addDefaultInputMapping("9");
+ improvedKeymap->addAction(act);
+
+ act = new Common::Action("GIVE", _("Give"));
+ act->setCustomEngineActionEvent(kActionGive);
+ act->addDefaultInputMapping("0");
+ improvedKeymap->addAction(act);
+
+ if (gameId == "msn1") {
+
+ act = new Common::Action("EXIT", _("Exit"));
+ act->setCustomEngineActionEvent(kActionExit);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_B");
+ computerKeymap->addAction(act);
+
+ act = new Common::Action("OFFICE", _("Office manager"));
+ act->setCustomEngineActionEvent(kActionOfficeManager);
+ act->addDefaultInputMapping("1");
+ act->addDefaultInputMapping("JOY_LEFT");
+ computerKeymap->addAction(act);
+
+ act = new Common::Action("PHONE", _("Phone"));
+ act->setCustomEngineActionEvent(kActionPhone);
+ act->addDefaultInputMapping("2");
+ act->addDefaultInputMapping("JOY_UP");
+ computerKeymap->addAction(act);
+
+ act = new Common::Action("PROTEXT", _("ProText"));
+ act->setCustomEngineActionEvent(kActionProText);
+ act->addDefaultInputMapping("3");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ computerKeymap->addAction(act);
+
+ act = new Common::Action("CALCULATA", _("Calculata"));
+ act->setCustomEngineActionEvent(kActionCalculata);
+ act->addDefaultInputMapping("4");
+ act->addDefaultInputMapping("JOY_DOWN");
+ computerKeymap->addAction(act);
+
+ }
+
+ Common::KeymapArray keymaps(6);
+ keymaps[0] = engineKeymap;
+ keymaps[1] = menuKeymap;
+ keymaps[2] = cutsceneKeymap;
+ keymaps[3] = improvedKeymap;
+ keymaps[4] = textReaderKeymap;
+ keymaps[5] = computerKeymap;
+
+ menuKeymap->setEnabled(false);
+ cutsceneKeymap->setEnabled(false);
+ textReaderKeymap->setEnabled(false);
+ computerKeymap->setEnabled(false);
+
+ return keymaps;
+}
+
#if PLUGIN_ENABLED_DYNAMIC(SUPERNOVA)
REGISTER_PLUGIN_DYNAMIC(SUPERNOVA, PLUGIN_TYPE_ENGINE, SupernovaMetaEngine);
#else
diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp
index 3c2967d259a..53f24f2da8f 100644
--- a/engines/supernova/supernova.cpp
+++ b/engines/supernova/supernova.cpp
@@ -49,6 +49,8 @@
#include "supernova/supernova2/state.h"
#include "supernova/game-manager.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Supernova {
ObjectType operator|(ObjectType a, ObjectType b) {
@@ -349,6 +351,11 @@ void SupernovaEngine::setColor63(byte value) {
}
void SupernovaEngine::setTextSpeed() {
+ // turn off keymapper so that we can select speed using Keys 1-5
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->disableAllGameKeymaps();
+ keymapper->getKeymap("menu")->setEnabled(true);
+
const Common::String &textSpeedString = getGameString(kStringTextSpeed);
int stringWidth = Screen::textWidth(textSpeedString);
int textX = (kScreenWidth - stringWidth) / 2;
@@ -359,11 +366,6 @@ void SupernovaEngine::setTextSpeed() {
int boxWidth = stringWidth > 110 ? stringWidth : 110;
int boxHeight = 27;
- // Disable improved mode temporarilly so that Key 1-5 are received below
- // instead of being mapped to action selection.
- bool hasImprovedMode = _improved;
- _improved = false;
-
_gm->animationOff();
_gm->saveTime();
saveScreen(boxX, boxY, boxWidth, boxHeight);
@@ -406,7 +408,9 @@ void SupernovaEngine::setTextSpeed() {
_gm->loadTime();
_gm->animationOn();
- _improved = hasImprovedMode;
+ keymapper->getKeymap("menu")->setEnabled(false);
+ keymapper->getKeymap("supernova-default")->setEnabled(true);
+ keymapper->getKeymap("improved-mode")->setEnabled(true);
}
void SupernovaEngine::showHelpScreen1() {
@@ -553,6 +557,10 @@ Common::Error SupernovaEngine::showTextReader(const char *extension) {
}
paletteFadeIn();
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->disableAllGameKeymaps();
+ keymapper->getKeymap("text-reader")->setEnabled(true);
+
const int linesPerPage = 19;
int lineNumber = 0;
bool exitReader = false;
@@ -569,21 +577,21 @@ Common::Error SupernovaEngine::showTextReader(const char *extension) {
_screen->renderText(line, 6, y, kColorWhite99);
}
_gm->getInput(true);
- switch (_gm->_key.keycode) {
- case Common::KEYCODE_ESCAPE:
+ switch (_gm->_action) {
+ case kActionExit:
exitReader = true;
break;
- case Common::KEYCODE_UP:
+ case kActionUp:
lineNumber = lineNumber > 0 ? lineNumber - 1 : 0;
break;
- case Common::KEYCODE_DOWN:
+ case kActionDown:
lineNumber = lineNumber < linesInFile - (linesPerPage + 1) ? lineNumber + 1
: linesInFile - linesPerPage;
break;
- case Common::KEYCODE_PAGEUP:
+ case kActionPgUp:
lineNumber = lineNumber > linesPerPage ? lineNumber - linesPerPage : 0;
break;
- case Common::KEYCODE_PAGEDOWN:
+ case kActionPgDown:
lineNumber = lineNumber < linesInFile - (linesPerPage * 2) ? lineNumber + linesPerPage
: linesInFile - linesPerPage;
break;
@@ -596,11 +604,19 @@ Common::Error SupernovaEngine::showTextReader(const char *extension) {
_gm->loadTime();
_gm->animationOn();
+ keymapper->getKeymap("text-reader")->setEnabled(false);
+ keymapper->getKeymap("supernova-default")->setEnabled(true);
+ keymapper->getKeymap("improved-mode")->setEnabled(true);
+
return Common::kNoError;
}
bool SupernovaEngine::quitGameDialog() {
bool quit = false;
+
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->disableAllGameKeymaps();
+ keymapper->getKeymap("menu")->setEnabled(true);
GuiElement guiQuitBox;
guiQuitBox.setColor(kColorRed, kColorWhite99, kColorRed, kColorWhite99);
@@ -654,6 +670,10 @@ bool SupernovaEngine::quitGameDialog() {
restoreScreen();
_gm->animationOn();
+ keymapper->getKeymap("menu")->setEnabled(false);
+ keymapper->getKeymap("supernova-default")->setEnabled(true);
+ keymapper->getKeymap("improved-mode")->setEnabled(true);
+
return quit;
}
diff --git a/engines/supernova/supernova.h b/engines/supernova/supernova.h
index 40014661e06..6d6a6942c81 100644
--- a/engines/supernova/supernova.h
+++ b/engines/supernova/supernova.h
@@ -138,6 +138,37 @@ public:
void stopSound();
};
+enum SUPERNOVAAction {
+ kActionNone,
+ kActionPause,
+ kActionQuit,
+ kActionSkip,
+ kActionSkipLine,
+ kActionHelp,
+ kActionInstr,
+ kActionInfo,
+ kActionSpeed,
+ kActionGo,
+ kActionLook,
+ kActionTake,
+ kActionOpen,
+ kActionClose,
+ kActionPush,
+ kActionPull,
+ kActionUse,
+ kActionTalk,
+ kActionGive,
+ kActionUp,
+ kActionDown,
+ kActionPgUp,
+ kActionPgDown,
+ kActionExit,
+ kActionOfficeManager,
+ kActionPhone,
+ kActionProText,
+ kActionCalculata,
+};
+
}
#endif
diff --git a/engines/supernova/supernova1/state.cpp b/engines/supernova/supernova1/state.cpp
index 8f398f32097..afa51a263c8 100644
--- a/engines/supernova/supernova1/state.cpp
+++ b/engines/supernova/supernova1/state.cpp
@@ -29,6 +29,8 @@
#include "supernova/supernova1/state.h"
#include "supernova/supernova1/stringid.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Supernova {
bool GameManager1::serialize(Common::WriteStream *out) {
@@ -374,9 +376,14 @@ void GameManager1::updateEvents() {
Common::Event event;
while (g_system->getEventManager()->pollEvent(event)) {
switch (event.type) {
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ _keyPressed = true;
+ _action = event.customType;
+ processInput(event.customType);
+ break;
case Common::EVENT_KEYDOWN:
_keyPressed = true;
- processInput(event.kbd);
+ _key = event.kbd;
break;
case Common::EVENT_LBUTTONUP:
// fallthrough
@@ -446,11 +453,14 @@ void GameManager1::telomat(int nr) {
_vm->renderText(kStringTelomat10, 100, 103, kColorGreen);
_vm->renderText(kStringTelomat11, 100, 120, kColorDarkGreen);
Common::String input;
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->disableAllGameKeymaps();
+ keymapper->getKeymap("computer")->setEnabled(true);
do {
getInput();
- switch (_key.keycode) {
- case Common::KEYCODE_2: {
+ switch (_action) {
+ case kActionPhone: {
_vm->renderBox(0, 0, 320, 200, kColorDarkBlue);
_vm->renderText(kStringTelomat12, 50, 80, kColorGreen);
_vm->renderText(kStringTelomat13, 50, 91, kColorGreen);
@@ -464,6 +474,9 @@ void GameManager1::telomat(int nr) {
_vm->paletteBrightness();
_guiEnabled = true;
drawMapExits();
+ keymapper->getKeymap("computer")->setEnabled(false);
+ keymapper->getKeymap("supernova-default")->setEnabled(true);
+ keymapper->getKeymap("improved-mode")->setEnabled(true);
return;
}
@@ -481,6 +494,9 @@ void GameManager1::telomat(int nr) {
_vm->paletteBrightness();
_guiEnabled = true;
drawMapExits();
+ keymapper->getKeymap("computer")->setEnabled(false);
+ keymapper->getKeymap("supernova-default")->setEnabled(true);
+ keymapper->getKeymap("improved-mode")->setEnabled(true);
return;
}
@@ -492,6 +508,9 @@ void GameManager1::telomat(int nr) {
_vm->paletteBrightness();
_guiEnabled = true;
drawMapExits();
+ keymapper->getKeymap("computer")->setEnabled(false);
+ keymapper->getKeymap("supernova-default")->setEnabled(true);
+ keymapper->getKeymap("improved-mode")->setEnabled(true);
return;
}
@@ -541,11 +560,14 @@ void GameManager1::telomat(int nr) {
}
_guiEnabled = true;
drawMapExits();
+ keymapper->getKeymap("computer")->setEnabled(false);
+ keymapper->getKeymap("supernova-default")->setEnabled(true);
+ keymapper->getKeymap("improved-mode")->setEnabled(true);
return;
}
- case Common::KEYCODE_1:
- case Common::KEYCODE_3:
- case Common::KEYCODE_4:
+ case kActionOfficeManager:
+ case kActionProText:
+ case kActionCalculata:
_vm->renderBox(0, 0, 320, 200, kColorDarkBlue);
_vm->renderText(kStringTelomat21, 100, 90, kColorGreen);
input = "";
@@ -558,12 +580,15 @@ void GameManager1::telomat(int nr) {
wait(10);
}
// fallthrough
- case Common::KEYCODE_ESCAPE:
+ case kActionExit:
_vm->renderBox(0, 0, 320, 200, kColorBlack);
_vm->renderRoom(*_currentRoom);
_vm->paletteBrightness();
_guiEnabled = true;
drawMapExits();
+ keymapper->getKeymap("computer")->setEnabled(false);
+ keymapper->getKeymap("supernova-default")->setEnabled(true);
+ keymapper->getKeymap("improved-mode")->setEnabled(true);
return;
default:
break;
diff --git a/engines/supernova/supernova2/state.cpp b/engines/supernova/supernova2/state.cpp
index 673bebf5e20..4ebf054376b 100644
--- a/engines/supernova/supernova2/state.cpp
+++ b/engines/supernova/supernova2/state.cpp
@@ -387,9 +387,14 @@ void GameManager2::updateEvents() {
Common::Event event;
while (g_system->getEventManager()->pollEvent(event)) {
switch (event.type) {
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ _keyPressed = true;
+ _action = event.customType;
+ processInput(event.customType);
+ break;
case Common::EVENT_KEYDOWN:
_keyPressed = true;
- processInput(event.kbd);
+ _key = event.kbd;
break;
case Common::EVENT_LBUTTONUP:
// fallthrough
More information about the Scummvm-git-logs
mailing list