[Scummvm-git-logs] scummvm master -> c5422d4aab06b1e4b781d381effc96bf3d8d2462
OMGPizzaGuy
noreply at scummvm.org
Thu Jun 27 22:33:34 UTC 2024
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
c5422d4aab AGOS: Add keymapper support
Commit: c5422d4aab06b1e4b781d381effc96bf3d8d2462
https://github.com/scummvm/scummvm/commit/c5422d4aab06b1e4b781d381effc96bf3d8d2462
Author: NabeelShabbir (i210443 at nu.edu.pk)
Date: 2024-06-27T17:33:31-05:00
Commit Message:
AGOS: Add keymapper support
AGOS: Add keymapper support
commit 40359d7e9b575dbcc6233f9ba7f7454cf760c498
Author: NabeelShabbir <i210443 at nu.edu.pk>
Date: Thu May 30 02:51:09 2024 +0500
Changed paths:
engines/agos/agos.cpp
engines/agos/agos.h
engines/agos/animation.cpp
engines/agos/event.cpp
engines/agos/input.cpp
engines/agos/input_pn.cpp
engines/agos/metaengine.cpp
engines/agos/pn.cpp
engines/agos/saveload.cpp
engines/agos/script_s1.cpp
engines/agos/vga_pn.cpp
diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp
index 7200935b7c3..af27f131169 100644
--- a/engines/agos/agos.cpp
+++ b/engines/agos/agos.cpp
@@ -1012,6 +1012,7 @@ AGOSEngine::~AGOSEngine() {
void AGOSEngine::pauseEngineIntern(bool pauseIt) {
if (pauseIt) {
_keyPressed.reset();
+ _action = kActionNone;
_pause = true;
_midi->pause(true);
@@ -1029,9 +1030,10 @@ void AGOSEngine::pause() {
while (_pause && !shouldQuit()) {
delay(1);
- if (_keyPressed.keycode == Common::KEYCODE_PAUSE) {
+ if (_action == kActionPause) {
pt.clear();
_keyPressed.reset();
+ _action = kActionNone;
}
}
}
diff --git a/engines/agos/agos.h b/engines/agos/agos.h
index 23144e5d530..6a8d22375f2 100644
--- a/engines/agos/agos.h
+++ b/engines/agos/agos.h
@@ -33,6 +33,9 @@
#include "common/util.h"
#include "audio/mixer.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+
#include "agos/vga.h"
#include "agos/detection.h"
@@ -74,6 +77,33 @@ enum {
kDebugImageDump = 1 << 4
};
+enum AGOSAction {
+ kActionNone,
+ kActionWalkForward,
+ kActionTurnBack,
+ kActionTurnLeft,
+ kActionTurnRight,
+ kActionMusicDown,
+ kActionMusicUp,
+ kActionExitCutscene,
+ kActionToggleMusic,
+ kActionToggleFastMode,
+ kActionToggleSwitchCharacter,
+ kActionToggleSubtitle,
+ kActionToggleSpeech,
+ kActionToggleHitboxName,
+ kActionToggleSoundEffects,
+ kActionToggleBackgroundSound,
+ kActionShowObjects,
+ kActionTextSpeedFast,
+ kActionTextSpeedMedium,
+ kActionTextSpeedSlow,
+ kActionSpeed_GTYPEPP,
+ kActionKeyYes,
+ kActionKeyNo,
+ kActionPause
+};
+
uint fileReadItemID(Common::SeekableReadStream *in);
#define CHECK_BOUNDS(x, y) assert((uint)(x) < ARRAYSIZE(y))
@@ -283,6 +313,8 @@ protected:
const GameSpecificSettings *gss;
+ AGOSAction _action;
+ Common::JoystickState _joyaction;
Common::KeyState _keyPressed;
Common::File *_gameFile;
@@ -1487,6 +1519,8 @@ protected:
uint8 *_linebase;
uint8 *_workptr;
+ bool _keymapEnabled;
+
uint16 getptr(uint32 pos);
uint32 getlong(uint32 pos);
diff --git a/engines/agos/animation.cpp b/engines/agos/animation.cpp
index 6a762ad86c2..7b1444ab250 100644
--- a/engines/agos/animation.cpp
+++ b/engines/agos/animation.cpp
@@ -102,11 +102,11 @@ void MoviePlayer::handleNextFrame() {
Common::EventManager *eventMan = _vm->_system->getEventManager();
while (eventMan->pollEvent(event)) {
switch (event.type) {
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_ESCAPE) {
+ case Common::EVENT_CUSTOM_BACKEND_ACTION_START:
+ if (event.customType == kActionExitCutscene) {
_leftButtonDown = true;
_rightButtonDown = true;
- } else if (event.kbd.keycode == Common::KEYCODE_PAUSE) {
+ } else if (event.customType == kActionPause) {
_vm->pause();
}
break;
diff --git a/engines/agos/event.cpp b/engines/agos/event.cpp
index ffb1c8dea96..db3ba14427b 100644
--- a/engines/agos/event.cpp
+++ b/engines/agos/event.cpp
@@ -459,6 +459,23 @@ void AGOSEngine::delay(uint amount) {
while (_eventMan->pollEvent(event)) {
switch (event.type) {
+ case Common::EVENT_JOYBUTTON_DOWN:
+ _joyaction = event.joystick;
+ break;
+ case Common::EVENT_JOYBUTTON_UP:
+ _joyaction.axis = 0;
+ _joyaction.button = 0;
+ _joyaction.position = 0;
+ break;
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ _action = (AGOSAction)event.customType;
+ if (event.customType == kActionToggleFastMode) {
+ _fastMode = !_fastMode;
+ }
+ break;
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+ _action = kActionNone;
+ break;
case Common::EVENT_KEYDOWN:
if (event.kbd.keycode >= Common::KEYCODE_0 && event.kbd.keycode <= Common::KEYCODE_9
&& (event.kbd.hasFlags(Common::KBD_ALT) ||
@@ -485,8 +502,6 @@ void AGOSEngine::delay(uint amount) {
if (event.kbd.keycode == Common::KEYCODE_a) {
GUI::AboutDialog aboutDialog;
aboutDialog.runModal();
- } else if (event.kbd.keycode == Common::KEYCODE_f) {
- _fastMode = !_fastMode;
}
}
diff --git a/engines/agos/input.cpp b/engines/agos/input.cpp
index a3bf8dfc834..88d98b7fb41 100644
--- a/engines/agos/input.cpp
+++ b/engines/agos/input.cpp
@@ -193,7 +193,7 @@ void AGOSEngine::waitForInput() {
while (!shouldQuit()) {
if ((getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) &&
- _keyPressed.keycode == Common::KEYCODE_F10)
+ _action == kActionShowObjects)
displayBoxStars();
if (processSpecialKeys()) {
if (getGameId() != GID_DIMP)
@@ -573,8 +573,8 @@ bool AGOSEngine::processSpecialKeys() {
if (shouldQuit())
_exitCutscene = true;
- switch (_keyPressed.keycode) {
- case Common::KEYCODE_UP:
+ switch (_action) {
+ case kActionWalkForward:
if (getGameType() == GType_PP)
_verbHitArea = 302;
else if (getGameType() == GType_WW)
@@ -585,7 +585,7 @@ bool AGOSEngine::processSpecialKeys() {
_verbHitArea = 214;
verbCode = true;
break;
- case Common::KEYCODE_DOWN:
+ case kActionTurnBack:
if (getGameType() == GType_PP)
_verbHitArea = 304;
else if (getGameType() == GType_WW)
@@ -596,7 +596,7 @@ bool AGOSEngine::processSpecialKeys() {
_verbHitArea = 215;
verbCode = true;
break;
- case Common::KEYCODE_RIGHT:
+ case kActionTurnRight:
if (getGameType() == GType_PP)
_verbHitArea = 303;
else if (getGameType() == GType_WW)
@@ -607,7 +607,7 @@ bool AGOSEngine::processSpecialKeys() {
_verbHitArea = 216;
verbCode = true;
break;
- case Common::KEYCODE_LEFT:
+ case kActionTurnLeft:
if (getGameType() == GType_PP)
_verbHitArea = 301;
else if (getGameType() == GType_WW)
@@ -618,10 +618,10 @@ bool AGOSEngine::processSpecialKeys() {
_verbHitArea = 217;
verbCode = true;
break;
- case Common::KEYCODE_ESCAPE:
+ case kActionExitCutscene:
_exitCutscene = true;
break;
- case Common::KEYCODE_F1:
+ case kActionTextSpeedFast:
if (getGameType() == GType_SIMON2) {
vcWriteVar(5, 50);
vcWriteVar(86, 0);
@@ -630,7 +630,7 @@ bool AGOSEngine::processSpecialKeys() {
vcWriteVar(86, 0);
}
break;
- case Common::KEYCODE_F2:
+ case kActionTextSpeedMedium:
if (getGameType() == GType_SIMON2) {
vcWriteVar(5, 75);
vcWriteVar(86, 1);
@@ -639,7 +639,7 @@ bool AGOSEngine::processSpecialKeys() {
vcWriteVar(86, 1);
}
break;
- case Common::KEYCODE_F3:
+ case kActionTextSpeedSlow:
if (getGameType() == GType_SIMON2) {
vcWriteVar(5, 125);
vcWriteVar(86, 2);
@@ -648,19 +648,15 @@ bool AGOSEngine::processSpecialKeys() {
vcWriteVar(86, 2);
}
break;
- case Common::KEYCODE_F5:
- if (getGameType() == GType_SIMON2 || getGameType() == GType_FF)
- _exitCutscene = true;
- break;
- case Common::KEYCODE_F7:
+ case kActionToggleSwitchCharacter:
if (getGameType() == GType_FF && getBitFlag(76))
_variableArray[254] = 70;
break;
- case Common::KEYCODE_F9:
+ case kActionToggleHitboxName:
if (getGameType() == GType_FF)
setBitFlag(73, !getBitFlag(73));
break;
- case Common::KEYCODE_F12:
+ case kActionSpeed_GTYPEPP:
if (getGameType() == GType_PP && getGameId() != GID_DIMP) {
if (!getBitFlag(110)) {
setBitFlag(107, !getBitFlag(107));
@@ -668,22 +664,17 @@ bool AGOSEngine::processSpecialKeys() {
}
}
break;
- case Common::KEYCODE_PAUSE:
+ case kActionPause:
pause();
break;
- default:
- break;
- }
-
- switch (_keyPressed.ascii) {
- case 't':
+ case kActionToggleSubtitle:
if (getGameType() == GType_FF || (getGameType() == GType_SIMON2 && (getFeatures() & GF_TALKIE)) ||
((getFeatures() & GF_TALKIE) && _language != Common::EN_ANY && _language != Common::DE_DEU)) {
if (_speech)
_subtitles = !_subtitles;
}
break;
- case 'v':
+ case kActionToggleSpeech:
if (getGameType() == GType_FF || (getGameType() == GType_SIMON2 && (getFeatures() & GF_TALKIE))) {
if (_subtitles) {
_speech = !_speech;
@@ -691,7 +682,7 @@ bool AGOSEngine::processSpecialKeys() {
}
}
break;
- case '+':
+ case kActionMusicUp:
if (_musicMuted) {
_musicMuted = false;
_musicVolume = 16;
@@ -700,7 +691,7 @@ bool AGOSEngine::processSpecialKeys() {
}
syncSoundSettingsIntern();
break;
- case '-':
+ case kActionMusicDown:
if (!_musicMuted) {
_musicVolume = CLIP(_musicVolume - 16, 0, 256);
if (_musicVolume == 0) {
@@ -709,7 +700,7 @@ bool AGOSEngine::processSpecialKeys() {
syncSoundSettingsIntern();
}
break;
- case 'm':
+ case kActionToggleMusic:
_musicMuted = !_musicMuted;
if (!_musicMuted && _musicVolume == 0)
// If last used music volume is 0 when unmuting, use ScummVM
@@ -717,7 +708,7 @@ bool AGOSEngine::processSpecialKeys() {
_musicVolume = 192;
syncSoundSettingsIntern();
break;
- case 's':
+ case kActionToggleSoundEffects:
_effectsMuted = !_effectsMuted;
if (!_effectsMuted && _effectsVolume == 0)
// If last used SFX volume is 0 when unmuting, use ScummVM
@@ -725,7 +716,7 @@ bool AGOSEngine::processSpecialKeys() {
_effectsVolume = 192;
syncSoundSettingsIntern();
break;
- case 'b':
+ case kActionToggleBackgroundSound:
if (getGameType() == GType_SIMON2) {
_ambientMuted = !_ambientMuted;
if (!_ambientMuted && _effectsVolume == 0)
diff --git a/engines/agos/input_pn.cpp b/engines/agos/input_pn.cpp
index 026b1e837dd..cb9ab1c4b2b 100644
--- a/engines/agos/input_pn.cpp
+++ b/engines/agos/input_pn.cpp
@@ -34,6 +34,12 @@ void AGOSEngine_PN::handleKeyboard() {
if (!_inputReady)
return;
+ if (_keymapEnabled) {
+ Common::Keymapper *keymapper = AGOSEngine::getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+ _keymapEnabled = false;
+ }
+
if (_hitCalled != 0) {
mouseHit();
}
@@ -77,6 +83,11 @@ void AGOSEngine_PN::handleKeyboard() {
_mouseString1 = nullptr;
_mousePrintFG = 0;
_inputReady = false;
+ if (!_keymapEnabled) {
+ Common::Keymapper *keymapper = AGOSEngine::getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+ _keymapEnabled = true;
+ }
}
_keyPressed.reset();
@@ -145,11 +156,11 @@ bool AGOSEngine_PN::processSpecialKeys() {
if (shouldQuit())
_exitCutscene = true;
- switch (_keyPressed.keycode) {
- case Common::KEYCODE_ESCAPE:
+ switch (_action) {
+ case kActionExitCutscene:
_exitCutscene = true;
break;
- case Common::KEYCODE_PAUSE:
+ case kActionPause:
pause();
break;
default:
diff --git a/engines/agos/metaengine.cpp b/engines/agos/metaengine.cpp
index 7071c89d9c3..bb9183c4bf0 100644
--- a/engines/agos/metaengine.cpp
+++ b/engines/agos/metaengine.cpp
@@ -25,6 +25,10 @@
#include "common/compression/installshield_cab.h"
#include "common/translation.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
#include "engines/advancedDetector.h"
#include "engines/obsolete.h"
@@ -116,6 +120,8 @@ public:
SaveStateList listSaves(const char *target) const override;
int getMaximumSaveSlot() const override;
+
+ Common::KeymapArray initKeymaps(const char *target) const override;
};
bool AgosMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -207,6 +213,186 @@ SaveStateList AgosMetaEngine::listSaves(const char *target) const {
int AgosMetaEngine::getMaximumSaveSlot() const { return 999; }
+Common::KeymapArray AgosMetaEngine::initKeymaps(const char *target) const {
+ using namespace Common;
+ using namespace AGOS;
+
+ Common::String gameId = ConfMan.get("gameid", target);
+
+ Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "agos-main", _("AGOS main"));
+ Keymap *gameKeyMap = new Keymap(Keymap::kKeymapTypeGame, "game-shortcuts", _("Game Keymappings"));
+ Keymap *yesNoKeymap = new Keymap(Keymap::kKeymapTypeGame, "game-Yes/No", _("Yes/No Keymapping"));
+ Action *act;
+
+ act = new Action(kStandardActionLeftClick, _("Left Click"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ engineKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Right Click"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ engineKeyMap->addAction(act);
+
+ act = new Action("EXTCUTSCN", _("Exit cutscene"));
+ act->setCustomEngineActionEvent(kActionExitCutscene);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_Y");
+ if (gameId == "simon2" || gameId == "feeble")
+ act->addDefaultInputMapping("F5");
+ engineKeyMap->addAction(act);
+
+ act = new Action("PAUSE", _("Pause"));
+ act->setCustomEngineActionEvent(kActionPause);
+ act->addDefaultInputMapping("p");
+ gameKeyMap->addAction(act);
+
+ act = new Action("MUSICDOWN", _("Music volume down"));
+ act->setCustomEngineActionEvent(kActionMusicDown);
+ act->addDefaultInputMapping("MINUS");
+ gameKeyMap->addAction(act);
+
+ act = new Action("MUSICUP", _("Music volume up"));
+ act->setCustomEngineActionEvent(kActionMusicUp);
+ act->addDefaultInputMapping("S+EQUALS");
+ act->addDefaultInputMapping("PLUS");
+ gameKeyMap->addAction(act);
+
+ act = new Action("MUTEMSC", _("Toggle Music on/off"));
+ act->setCustomEngineActionEvent(kActionToggleMusic);
+ act->addDefaultInputMapping("m");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SNDEFFECT", _("Toggle Sound effect on/off"));
+ act->setCustomEngineActionEvent(kActionToggleSoundEffects);
+ act->addDefaultInputMapping("s");
+ gameKeyMap->addAction(act);
+
+ act = new Action("FSTMODE", _("Toggle Fast mode on/off"));
+ act->setCustomEngineActionEvent(kActionToggleFastMode);
+ act->addDefaultInputMapping("C+f");
+ gameKeyMap->addAction(act);
+
+ if (gameId == "waxworks" ||
+ gameId == "elvira1" ||
+ gameId == "elvira2" ||
+ gameId == "swampy" ||
+ gameId == "puzzle" ||
+ gameId == "jumble" ||
+ gameId == "dimp") {
+ act = new Action("WLKFORWARD", _("Walk forward")); // KEYCODE_UP
+ act->setCustomEngineActionEvent(kActionWalkForward);
+ act->addDefaultInputMapping("UP");
+ act->addDefaultInputMapping("JOY_UP");
+ gameKeyMap->addAction(act);
+
+ act = new Action("TRNBACK", _("Turn backward")); // KEYCODE_DOWN
+ act->setCustomEngineActionEvent(kActionTurnBack);
+ act->addDefaultInputMapping("DOWN");
+ act->addDefaultInputMapping("JOY_DOWN");
+ gameKeyMap->addAction(act);
+
+ act = new Action("TRNLEFT", _("Turn left")); // KEYCODE_LEFT
+ act->setCustomEngineActionEvent(kActionTurnLeft);
+ act->addDefaultInputMapping("LEFT");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("TRNRIGHT", _("Turn right")); // KEYCODE_RIGHT
+ act->setCustomEngineActionEvent(kActionTurnRight);
+ act->addDefaultInputMapping("RIGHT");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+ }
+
+ if (gameId == "simon1" || gameId == "simon2") {
+ act = new Action("TXTFAST", _("Text speed - Fast"));
+ act->setCustomEngineActionEvent(kActionTextSpeedFast);
+ act->addDefaultInputMapping("F1");
+ gameKeyMap->addAction(act);
+
+ act = new Action("TXTMEDIUM", _("Text speed - Medium"));
+ act->setCustomEngineActionEvent(kActionTextSpeedMedium);
+ act->addDefaultInputMapping("F2");
+ gameKeyMap->addAction(act);
+
+ act = new Action("TXTSLOW", _("Text speed - Slow"));
+ act->setCustomEngineActionEvent(kActionTextSpeedSlow);
+ act->addDefaultInputMapping("F3");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SHOWOBJINTERACT", _("Show objects to interact"));
+ act->setCustomEngineActionEvent(kActionShowObjects);
+ act->addDefaultInputMapping("F10");
+ act->addDefaultInputMapping("JOY_UP");
+ gameKeyMap->addAction(act);
+
+ if (gameId == "simon2") {
+ act = new Action("BACKGRNDSND", _("Toggle background sounds On/Off"));
+ act->setCustomEngineActionEvent(kActionToggleBackgroundSound);
+ act->addDefaultInputMapping("b");
+ gameKeyMap->addAction(act);
+ }
+ }
+
+ if (gameId == "feeble") {
+ // I18N: Characters are game actors
+ act = new Action("SWTCHCHARACTER", _("Switch characters"));
+ act->setCustomEngineActionEvent(kActionToggleSwitchCharacter);
+ act->addDefaultInputMapping("F7");
+ act->addDefaultInputMapping("JOY_X");
+ gameKeyMap->addAction(act);
+
+ act = new Action("TOGGLEHITBOX", _("Toggle hitbox names on/off"));
+ act->setCustomEngineActionEvent(kActionToggleHitboxName);
+ act->addDefaultInputMapping("F9");
+ gameKeyMap->addAction(act);
+ }
+
+ if (gameId == "feeble" || gameId == "simon2") {
+ act = new Action("TOGGLESUB", _("Switches between speech only and combined speech and subtitles"));
+ act->setCustomEngineActionEvent(kActionToggleSubtitle);
+ act->addDefaultInputMapping("t");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("TOGGLESPEECH", _("Switches between subtitles only and combined speech and subtitles"));
+ act->setCustomEngineActionEvent(kActionToggleSpeech);
+ act->addDefaultInputMapping("v");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+ }
+
+ if (gameId == "swampy" ||
+ gameId == "puzzle" ||
+ gameId == "jumble") {
+ act = new Action("HIGHSPEED", _("High speed mode on/off in Swampy Adventures"));
+ act->setCustomEngineActionEvent(kActionSpeed_GTYPEPP);
+ act->addDefaultInputMapping("F12");
+ gameKeyMap->addAction(act);
+ }
+
+ act = new Action("KEYYES", _("Press Yes Key"));
+ act->setCustomEngineActionEvent(kActionKeyYes);
+ act->addDefaultInputMapping("JOY_A");
+ yesNoKeymap->addAction(act);
+
+ act = new Action("KEYNO", _("Press No Key"));
+ act->setCustomEngineActionEvent(kActionKeyNo);
+ act->addDefaultInputMapping("JOY_B");
+ yesNoKeymap->addAction(act);
+
+ KeymapArray keymaps(3);
+ keymaps[0] = engineKeyMap;
+ keymaps[1] = gameKeyMap;
+ keymaps[2] = yesNoKeymap;
+
+ yesNoKeymap->setEnabled(false);
+ return keymaps;
+}
+
#if PLUGIN_ENABLED_DYNAMIC(AGOS)
REGISTER_PLUGIN_DYNAMIC(AGOS, PLUGIN_TYPE_ENGINE, AgosMetaEngine);
#else
diff --git a/engines/agos/pn.cpp b/engines/agos/pn.cpp
index c8475111cac..bb4b973c782 100644
--- a/engines/agos/pn.cpp
+++ b/engines/agos/pn.cpp
@@ -82,6 +82,8 @@ AGOSEngine_PN::AGOSEngine_PN(OSystem *system, const AGOSGameDescription *gd)
_linebase = nullptr;
_workptr = nullptr;
+
+ _keymapEnabled = true;
}
AGOSEngine_PN::~AGOSEngine_PN() {
diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp
index c0e746cb346..85204c5319e 100644
--- a/engines/agos/saveload.cpp
+++ b/engines/agos/saveload.cpp
@@ -716,6 +716,9 @@ void AGOSEngine_Simon1::userGame(bool load) {
restart:;
i = userGameGetKey(&b, maxChar);
+ Common::Keymapper *keymapper = AGOSEngine::getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+
if (i == 205)
goto get_out;
if (!load) {
@@ -835,6 +838,8 @@ get_out:;
disableFileBoxes();
_gameStoppedClock = getTime() - saveTime + _gameStoppedClock;
+
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
}
int AGOSEngine_Simon1::userGameGetKey(bool *b, uint maxChar) {
diff --git a/engines/agos/script_s1.cpp b/engines/agos/script_s1.cpp
index a1d7030b80b..b8b871a948b 100644
--- a/engines/agos/script_s1.cpp
+++ b/engines/agos/script_s1.cpp
@@ -309,14 +309,20 @@ void AGOSEngine_Simon1::os1_pauseGame() {
Common::getLanguageYesNo(_language, keyYes, keyNo);
+ Common::Keymapper *keymapper = AGOSEngine::getEventManager()->getKeymapper();
+ keymapper->getKeymap("game-Yes/No")->setEnabled(true);
+
while (!shouldQuit()) {
delay(1);
- if (_keyPressed.keycode == keyYes)
+ if (_keyPressed.keycode == keyYes || _action == kActionKeyYes)
quitGame();
- else if (_keyPressed.keycode == keyNo)
+ else if (_keyPressed.keycode == keyNo || _action == kActionKeyNo)
break;
}
+ _action = kActionNone;
+ keymapper->getKeymap("game-Yes/No")->setEnabled(false);
+
_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
}
diff --git a/engines/agos/vga_pn.cpp b/engines/agos/vga_pn.cpp
index 34d6b99d51f..ea91c51cc7d 100644
--- a/engines/agos/vga_pn.cpp
+++ b/engines/agos/vga_pn.cpp
@@ -115,12 +115,13 @@ void AGOSEngine::vc36_pause() {
windowPutChar(_windowArray[2], *message1);
while (!shouldQuit()) {
- if (_keyPressed.ascii != 0)
+ if (_keyPressed.ascii != 0 || _joyaction.button != Common::JoystickButton::JOYSTICK_BUTTON_INVALID || _action != kActionNone)
break;
delay(1);
}
_keyPressed.reset();
+ _action = kActionNone;
windowPutChar(_windowArray[2], 13);
_wiped = oldWiped;
More information about the Scummvm-git-logs
mailing list