[Scummvm-git-logs] scummvm master -> 5de65293276750872b989ccaef46677f39d44cc3
sev-
noreply at scummvm.org
Thu Jun 19 22:02:34 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:
5de6529327 VOYEUR: Add keymapper support
Commit: 5de65293276750872b989ccaef46677f39d44cc3
https://github.com/scummvm/scummvm/commit/5de65293276750872b989ccaef46677f39d44cc3
Author: aunnoman1 (aunnoman123 at outlook.com)
Date: 2025-06-20T00:02:31+02:00
Commit Message:
VOYEUR: Add keymapper support
Changed paths:
engines/voyeur/animation.cpp
engines/voyeur/files_threads.cpp
engines/voyeur/metaengine.cpp
engines/voyeur/voyeur.cpp
engines/voyeur/voyeur.h
diff --git a/engines/voyeur/animation.cpp b/engines/voyeur/animation.cpp
index 6514d4c5e3f..4cf501aa558 100644
--- a/engines/voyeur/animation.cpp
+++ b/engines/voyeur/animation.cpp
@@ -28,6 +28,8 @@
#include "audio/decoders/raw.h"
#include "graphics/surface.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Voyeur {
// Number of audio frames to keep audio track topped up when playing back video
@@ -466,6 +468,11 @@ void RL2Decoder::play(VoyeurEngine *vm, int resourceOffset,
PictureResource videoFrame(getRL2VideoTrack()->getBackSurface());
int picCtr = 0;
+
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("voyeur-default")->setEnabled(false);
+ keymapper->getKeymap("cutscene")->setEnabled(true);
+
while (!vm->shouldQuit() && !endOfVideo() && !vm->_eventsManager->_mouseClicked) {
if (hasDirtyPalette()) {
const byte *palette = getPalette();
@@ -495,6 +502,9 @@ void RL2Decoder::play(VoyeurEngine *vm, int resourceOffset,
vm->_eventsManager->getMouseInfo();
g_system->delayMillis(10);
}
+
+ keymapper->getKeymap("cutscene")->setEnabled(false);
+ keymapper->getKeymap("voyeur-default")->setEnabled(true);
}
} // End of namespace Voyeur
diff --git a/engines/voyeur/files_threads.cpp b/engines/voyeur/files_threads.cpp
index 837b18f5826..67249bbaee1 100644
--- a/engines/voyeur/files_threads.cpp
+++ b/engines/voyeur/files_threads.cpp
@@ -25,6 +25,8 @@
#include "voyeur/staticres.h"
#include "common/config-manager.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Voyeur {
int ThreadResource::_useCount[8];
@@ -1140,6 +1142,10 @@ void ThreadResource::doRoom() {
vm._soundManager->startVOCPlay(vm._currentVocId);
voy._eventFlags &= ~EVTFLAG_TIME_DISABLED;
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("voyeur-default")->setEnabled(false);
+ keymapper->getKeymap("room")->setEnabled(true);
+
bool breakFlag = false;
while (!vm.shouldQuit() && !breakFlag) {
_vm->_voyeurArea = AREA_ROOM;
@@ -1292,6 +1298,9 @@ void ThreadResource::doRoom() {
vm._currentVocId = -1;
}
+ keymapper->getKeymap("room")->setEnabled(false);
+ keymapper->getKeymap("voyeur-default")->setEnabled(true);
+
vm._eventsManager->hideCursor();
chooseSTAMPButton(0);
}
@@ -1359,6 +1368,10 @@ int ThreadResource::doInterface() {
_vm->_eventsManager->setCursor(crosshairsCursor);
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("voyeur-default")->setEnabled(false);
+ keymapper->getKeymap("camera")->setEnabled(true);
+
// Main loop
int regionIndex = 0;
Common::Rect mansionViewBounds(MANSION_VIEW_X, MANSION_VIEW_Y,
@@ -1481,6 +1494,9 @@ int ThreadResource::doInterface() {
} while (!_vm->_eventsManager->_rightClick && !_vm->shouldQuit() &&
(!_vm->_eventsManager->_leftClick || regionIndex == -1));
+ keymapper->getKeymap("camera")->setEnabled(false);
+ keymapper->getKeymap("voyeur-default")->setEnabled(true);
+
_vm->_eventsManager->hideCursor();
_vm->_voy->_eventFlags |= EVTFLAG_TIME_DISABLED;
_vm->_bVoy->freeBoltGroup(_vm->_playStampGroupId);
diff --git a/engines/voyeur/metaengine.cpp b/engines/voyeur/metaengine.cpp
index f72f669314c..7b31cb01534 100644
--- a/engines/voyeur/metaengine.cpp
+++ b/engines/voyeur/metaengine.cpp
@@ -27,6 +27,10 @@
#include "common/system.h"
#include "common/translation.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
#include "graphics/surface.h"
#include "voyeur/detection.h"
@@ -86,6 +90,7 @@ public:
int getMaximumSaveSlot() const override;
bool removeSaveState(const char *target, int slot) const override;
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
+ Common::KeymapArray initKeymaps(const char *target) const override;
};
bool VoyeurMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -171,6 +176,85 @@ SaveStateDescriptor VoyeurMetaEngine::querySaveMetaInfos(const char *target, int
return SaveStateDescriptor();
}
+Common::KeymapArray VoyeurMetaEngine::initKeymaps(const char *target) const {
+
+ using namespace Common;
+ using namespace Voyeur;
+
+ Keymap *engineKeymap = new Keymap(Keymap::kKeymapTypeGame, "voyeur-default", _("Default keymappings"));
+ Keymap *cutsceneKeymap = new Keymap(Keymap::kKeymapTypeGame, "cutscene", _("Cutscene keymappings"));
+ Keymap *roomKeymap = new Keymap(Keymap::kKeymapTypeGame, "room", _("Room keymappings"));
+ Keymap *cameraKeymap = new Keymap(Keymap::kKeymapTypeGame, "camera", _("Camera keymappings"));
+ Keymap *introKeymap = new Keymap(Keymap::kKeymapTypeGame, "intro", _("Intro 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, _("Exit"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ engineKeymap->addAction(act);
+
+ act = new Common::Action(kStandardActionRightClick, _("Skip scene"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_A");
+ cutsceneKeymap->addAction(act);
+
+ act = new Common::Action(kStandardActionLeftClick, _("View evidence"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ roomKeymap->addAction(act);
+
+ act = new Common::Action(kStandardActionRightClick, _("Exit / Put away evidence"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ roomKeymap->addAction(act);
+
+ act = new Common::Action(kStandardActionLeftClick, _("Enter room"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ cameraKeymap->addAction(act);
+
+ act = new Common::Action(kStandardActionRightClick, _("Exit"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ cameraKeymap->addAction(act);
+
+ act = new Common::Action("SKIP", _("Skip intro"));
+ act->setCustomEngineActionEvent(kActionSkip);
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("SPACE");
+ act->addDefaultInputMapping("JOY_A");
+ introKeymap->addAction(act);
+
+ KeymapArray keymaps(5);
+ keymaps[0] = engineKeymap;
+ keymaps[1] = cutsceneKeymap;
+ keymaps[2] = roomKeymap;
+ keymaps[3] = cameraKeymap;
+ keymaps[4] = introKeymap;
+
+ cutsceneKeymap->setEnabled(false);
+ roomKeymap->setEnabled(false);
+ cameraKeymap->setEnabled(false);
+ introKeymap->setEnabled(false);
+
+ return keymaps;
+}
+
#if PLUGIN_ENABLED_DYNAMIC(VOYEUR)
REGISTER_PLUGIN_DYNAMIC(VOYEUR, PLUGIN_TYPE_ENGINE, VoyeurMetaEngine);
#else
diff --git a/engines/voyeur/voyeur.cpp b/engines/voyeur/voyeur.cpp
index 306c78756d3..1a375166bf3 100644
--- a/engines/voyeur/voyeur.cpp
+++ b/engines/voyeur/voyeur.cpp
@@ -31,6 +31,8 @@
#include "graphics/thumbnail.h"
#include "video/mve_decoder.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Voyeur {
VoyeurEngine::VoyeurEngine(OSystem *syst, const VoyeurGameDescription *gameDesc) : Engine(syst),
@@ -484,6 +486,10 @@ void VoyeurEngine::doOpening() {
decoder.loadRL2File("a2300100.rl2", false);
decoder.start();
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("voyeur-default")->setEnabled(false);
+ keymapper->getKeymap("cutscene")->setEnabled(true);
+
while (!shouldQuit() && !decoder.endOfVideo() && !_eventsManager->_mouseClicked) {
if (decoder.hasDirtyPalette()) {
const byte *palette = decoder.getPalette();
@@ -525,6 +531,9 @@ void VoyeurEngine::doOpening() {
if ((_voy->_RTVNum - _voy->_audioVisualStartTime) < 2)
_eventsManager->delay(60);
+ keymapper->getKeymap("cutscene")->setEnabled(false);
+ keymapper->getKeymap("voyeur-default")->setEnabled(true);
+
_voy->_eventFlags |= EVTFLAG_TIME_DISABLED;
_voy->addVideoEventEnd();
_voy->_eventFlags &= ~EVTFLAG_RECORDING;
@@ -537,6 +546,10 @@ void VoyeurEngine::playRL2Video(const Common::Path &filename) {
decoder.loadRL2File(filename, false);
decoder.start();
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("voyeur-default")->setEnabled(false);
+ keymapper->getKeymap("cutscene")->setEnabled(true);
+
while (!shouldQuit() && !decoder.endOfVideo() && !_eventsManager->_mouseClicked) {
if (decoder.hasDirtyPalette()) {
const byte *palette = decoder.getPalette();
@@ -551,6 +564,9 @@ void VoyeurEngine::playRL2Video(const Common::Path &filename) {
_eventsManager->getMouseInfo();
g_system->delayMillis(10);
}
+
+ keymapper->getKeymap("cutscene")->setEnabled(false);
+ keymapper->getKeymap("voyeur-default")->setEnabled(true);
}
void VoyeurEngine::playAVideo(int videoId) {
@@ -580,6 +596,10 @@ void VoyeurEngine::playAVideoDuration(int videoId, int duration) {
_eventsManager->getMouseInfo();
_eventsManager->startCursorBlink();
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("voyeur-default")->setEnabled(false);
+ keymapper->getKeymap("cutscene")->setEnabled(true);
+
while (!shouldQuit() && !decoder.endOfVideo() && !_eventsManager->_mouseClicked &&
(decoder.getCurFrame() < endFrame)) {
if (decoder.needsUpdate()) {
@@ -600,6 +620,9 @@ void VoyeurEngine::playAVideoDuration(int videoId, int duration) {
g_system->delayMillis(10);
}
+ keymapper->getKeymap("cutscene")->setEnabled(false);
+ keymapper->getKeymap("voyeur-default")->setEnabled(true);
+
// RL2 finished
_screen->screenReset();
_voy->_eventFlags &= ~EVTFLAG_RECORDING;
@@ -871,6 +894,10 @@ void VoyeurEngine::showLogo8Intro() {
// The MVE movie data is appended to the end of the EXE
file.seek(exeLength, SEEK_SET);
+ Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+ keymapper->getKeymap("voyeur-default")->setEnabled(false);
+ keymapper->getKeymap("intro")->setEnabled(true);
+
Video::MveDecoder *decoder = new Video::MveDecoder();
if (decoder->loadStream(&file)) {
decoder->setAudioTrack(0);
@@ -901,14 +928,11 @@ void VoyeurEngine::showLogo8Intro() {
Common::Event event;
while (g_system->getEventManager()->pollEvent(event)) {
switch (event.type) {
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_ESCAPE || event.kbd.keycode == Common::KEYCODE_SPACE) {
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ if (event.customType == kActionSkip) {
skipMovie = true;
}
break;
- case Common::EVENT_LBUTTONDOWN:
- skipMovie = true;
- break;
default:
break;
}
@@ -916,6 +940,9 @@ void VoyeurEngine::showLogo8Intro() {
}
}
+ keymapper->getKeymap("intro")->setEnabled(false);
+ keymapper->getKeymap("voyeur-default")->setEnabled(true);
+
file.close();
delete decoder;
}
diff --git a/engines/voyeur/voyeur.h b/engines/voyeur/voyeur.h
index bd6655d05db..0d8bce007b0 100644
--- a/engines/voyeur/voyeur.h
+++ b/engines/voyeur/voyeur.h
@@ -72,6 +72,11 @@ enum VoyeurArea { AREA_NONE, AREA_APARTMENT, AREA_INTERFACE, AREA_ROOM, AREA_EVI
struct VoyeurGameDescription;
+enum VOYEURAction {
+ kActionNone,
+ kActionSkip,
+};
+
class VoyeurEngine : public Engine {
private:
const VoyeurGameDescription *_gameDescription;
More information about the Scummvm-git-logs
mailing list