[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