[Scummvm-git-logs] scummvm master -> a98eb7b3074e5d113efe6fff2db075735b78d1ab

alxpnv noreply at scummvm.org
Wed Jun 26 07:28:15 UTC 2024


This automated email contains information about 7 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
3e4640a7ed ASYLUM: Use the actor constants in more places
fe9dabec20 ASYLUM: Simplify the console code
7e9ed82d68 ASYLUM: Use the keymapper for binding the middle mouse button
bdc07c126d ASYLUM: Implement moving with the arrow keys
3922c71287 ASYLUM: Use keymapper actions for the resource viewer
c08d7e3193 ASYLUM: Unify cancel event handling for puzzles and encounters
a98eb7b307 ASYLUM: Allow skipping cutscenes with any key or joystick button


Commit: 3e4640a7ed4134b4a7095ba65e4246de3ebd5223
    https://github.com/scummvm/scummvm/commit/3e4640a7ed4134b4a7095ba65e4246de3ebd5223
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2024-06-26T10:28:09+03:00

Commit Message:
ASYLUM: Use the actor constants in more places

Changed paths:
    engines/asylum/resources/actor.cpp
    engines/asylum/resources/worldstats.cpp
    engines/asylum/staticres.h
    engines/asylum/views/scene.cpp


diff --git a/engines/asylum/resources/actor.cpp b/engines/asylum/resources/actor.cpp
index 12e6ad66b19..77cbba1c675 100644
--- a/engines/asylum/resources/actor.cpp
+++ b/engines/asylum/resources/actor.cpp
@@ -2246,7 +2246,7 @@ void Actor::updateStatusEnabledProcessStatus(int16 testX, int16 testY, uint32 co
 void Actor::updateStatusBored() {
 	if (_index == getSharedData()->getPlayerIndex()
 	 && getWorld()->chapter != kChapter9
-	 && getWorld()->actorType == 0
+	 && getWorld()->actorType == kActorMax
 	 && _frameIndex == 0
 	 && checkBoredStatus()) {
 		if (!getSpeech()->getSoundResourceId() || !getSound()->isPlaying(getSpeech()->getSoundResourceId()))
diff --git a/engines/asylum/resources/worldstats.cpp b/engines/asylum/resources/worldstats.cpp
index 5a03147cfa0..5e6e22068a1 100644
--- a/engines/asylum/resources/worldstats.cpp
+++ b/engines/asylum/resources/worldstats.cpp
@@ -63,7 +63,7 @@ WorldStats::WorldStats(AsylumEngine *engine) : _vm(engine) {
 	memset(&graphicResourceIds, kResourceNone, sizeof(graphicResourceIds));
 	sceneTitleGraphicResourceId = kResourceNone;
 	sceneTitlePaletteResourceId = kResourceNone;
-	actorType = 0;
+	actorType = kActorMax;
 	memset(&soundResourceIds, kResourceNone, sizeof(soundResourceIds));
 
 	numAmbientSounds = 0;
diff --git a/engines/asylum/staticres.h b/engines/asylum/staticres.h
index e843b530ebe..02cc7728fe7 100644
--- a/engines/asylum/staticres.h
+++ b/engines/asylum/staticres.h
@@ -51,7 +51,10 @@ const int moviesCd[49] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 const int chapterIndexes[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 4, 4, 8, 9, 0, 0};
 
 /** Default Actor Indices by Scene */
-const int actorType[16] = {0, 0, 0, 0, 1, 0, 2, 0, 3, 0, 1, 1, 3, 0, 0, 0};
+const ActorIndexes actorType[16] = {kActorMax,   kActorMax, kActorMax,     kActorMax,
+                                    kActorSarah, kActorMax, kActorCyclops, kActorMax,
+                                    kActorAztec, kActorMax, kActorSarah,   kActorSarah,
+                                    kActorAztec, kActorMax, kActorMax,     kActorMax};
 
 /** Speech indexes */
 const uint speechIndex[20]       = {17, 22, 27, 37, 45, 12, 16, 19, 25, 29, 14, 18, 23, 29, 35,  6,  9, 13, 19, 27};
diff --git a/engines/asylum/views/scene.cpp b/engines/asylum/views/scene.cpp
index ab7b7e41a79..8809de3997a 100644
--- a/engines/asylum/views/scene.cpp
+++ b/engines/asylum/views/scene.cpp
@@ -1878,13 +1878,13 @@ bool Scene::speak(Common::KeyCode code) {
 		default:
 			break;
 
-		case 0:
+		case kActorMax:
 			index = GET_INDEX();
 			break;
 
-		case 1:
-		case 2:
-		case 3:
+		case kActorSarah:
+		case kActorCyclops:
+		case kActorAztec:
 			index = 1;
 			break;
 		}
@@ -1895,13 +1895,13 @@ bool Scene::speak(Common::KeyCode code) {
 		default:
 			break;
 
-		case 0:
+		case kActorMax:
 			index = 3 - GET_INDEX();
 			break;
 
-		case 1:
-		case 2:
-		case 3:
+		case kActorSarah:
+		case kActorCyclops:
+		case kActorAztec:
 			index = 2;
 			break;
 		}
@@ -1912,13 +1912,13 @@ bool Scene::speak(Common::KeyCode code) {
 		default:
 			break;
 
-		case 0:
+		case kActorMax:
 			index = 2;
 			break;
 
-		case 1:
-		case 2:
-		case 3:
+		case kActorSarah:
+		case kActorCyclops:
+		case kActorAztec:
 			index = 4;
 			break;
 		}
@@ -1929,13 +1929,13 @@ bool Scene::speak(Common::KeyCode code) {
 		default:
 			break;
 
-		case 0:
+		case kActorMax:
 			index = 5;
 			break;
 
-		case 1:
-		case 2:
-		case 3:
+		case kActorSarah:
+		case kActorCyclops:
+		case kActorAztec:
 			index = 3;
 			break;
 		}
@@ -1946,13 +1946,13 @@ bool Scene::speak(Common::KeyCode code) {
 		default:
 			break;
 
-		case 0:
+		case kActorMax:
 			index = 6;
 			break;
 
-		case 1:
-		case 2:
-		case 3:
+		case kActorSarah:
+		case kActorCyclops:
+		case kActorAztec:
 			index = 4;
 			break;
 		}
@@ -1963,12 +1963,12 @@ bool Scene::speak(Common::KeyCode code) {
 		default:
 			break;
 
-		case 0:
+		case kActorMax:
 			index = 7;
 			break;
 
-		case 1:
-		case 2:
+		case kActorSarah:
+		case kActorCyclops:
 			index = 5;
 			break;
 		}
@@ -1979,12 +1979,12 @@ bool Scene::speak(Common::KeyCode code) {
 		default:
 			break;
 
-		case 0:
+		case kActorMax:
 			index = 8;
 			break;
 
-		case 1:
-		case 2:
+		case kActorSarah:
+		case kActorCyclops:
 			index = 6;
 			break;
 		}
@@ -1995,12 +1995,12 @@ bool Scene::speak(Common::KeyCode code) {
 		default:
 			break;
 
-		case 0:
+		case kActorMax:
 			index = 9;
 			break;
 
-		case 1:
-		case 2:
+		case kActorSarah:
+		case kActorCyclops:
 			index = 7;
 			break;
 		}
@@ -2011,12 +2011,12 @@ bool Scene::speak(Common::KeyCode code) {
 		default:
 			break;
 
-		case 0:
+		case kActorMax:
 			index = 10;
 			break;
 
-		case 1:
-		case 2:
+		case kActorSarah:
+		case kActorCyclops:
 			index = 8;
 			break;
 		}
@@ -2027,12 +2027,12 @@ bool Scene::speak(Common::KeyCode code) {
 		default:
 			break;
 
-		case 0:
+		case kActorMax:
 			index = 11;
 			break;
 
-		case 1:
-		case 2:
+		case kActorSarah:
+		case kActorCyclops:
 			index = 9;
 			break;
 		}
@@ -2043,12 +2043,12 @@ bool Scene::speak(Common::KeyCode code) {
 		default:
 			break;
 
-		case 0:
+		case kActorMax:
 			index = 13 - GET_INDEX();
 			break;
 
-		case 1:
-		case 2:
+		case kActorSarah:
+		case kActorCyclops:
 			index = 10;
 			break;
 		}
@@ -2059,11 +2059,11 @@ bool Scene::speak(Common::KeyCode code) {
 		default:
 			break;
 
-		case 0:
+		case kActorMax:
 			index = 15 - GET_INDEX();
 			break;
 
-		case 2:
+		case kActorCyclops:
 			index = 12 - GET_INDEX();
 			break;
 		}


Commit: fe9dabec2076e9cf2bfc025eba7d5d27fc5bfda3
    https://github.com/scummvm/scummvm/commit/fe9dabec2076e9cf2bfc025eba7d5d27fc5bfda3
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2024-06-26T10:28:09+03:00

Commit Message:
ASYLUM: Simplify the console code

Changed paths:
  A engines/asylum/detection.h
    engines/asylum/asylum.cpp
    engines/asylum/asylum.h
    engines/asylum/console.h
    engines/asylum/detection.cpp
    engines/asylum/puzzles/puzzles.h
    engines/asylum/resources/data.cpp


diff --git a/engines/asylum/asylum.cpp b/engines/asylum/asylum.cpp
index fc906601ca1..81a76d23016 100644
--- a/engines/asylum/asylum.cpp
+++ b/engines/asylum/asylum.cpp
@@ -50,12 +50,13 @@
 #include "asylum/views/menu.h"
 #include "asylum/views/video.h"
 
+#include "asylum/console.h"
 #include "asylum/respack.h"
 
 namespace Asylum {
 
 AsylumEngine::AsylumEngine(OSystem *system, const ADGameDescription *gd) : Engine(system), _gameDescription(gd),
-	_console(nullptr), _cursor(nullptr), _encounter(nullptr), _menu(nullptr), _resource(nullptr), _savegame(nullptr),
+	_cursor(nullptr), _encounter(nullptr), _menu(nullptr), _resource(nullptr), _savegame(nullptr),
 	_scene(nullptr), _screen(nullptr), _script(nullptr), _special(nullptr), _speech(nullptr), _sound(nullptr), _text(nullptr),
 	_video(nullptr), _handler(nullptr), _puzzles(nullptr) {
 
@@ -112,8 +113,7 @@ Common::Error AsylumEngine::run() {
 	initGraphics(640, 480);
 
 	// Create debugger. It requires GFX to be initialized
-	_console   = new Console(this);
-	setDebugger(_console);
+	setDebugger(new Console(this));
 
 	// Create resource manager
 	_resource  = new ResourceManager(this);
@@ -392,12 +392,9 @@ void AsylumEngine::playIntro() {
 }
 
 void AsylumEngine::handleEvents() {
-	if (!_console || !_video || !_screen || !_sound || !_menu || !_cursor)
+	if (!_video || !_screen || !_sound || !_menu || !_cursor)
 		error("[AsylumEngine::handleEvents] Subsystems not initialized properly!");
 
-	// Show the debugger if required
-	_console->onFrame();
-
 	AsylumEvent ev;
 	Common::Keymapper *const keymapper = _eventMan->getKeymapper();
 
@@ -414,11 +411,6 @@ void AsylumEngine::handleEvents() {
 			break;
 
 		case Common::EVENT_KEYDOWN:
-			if ((ev.kbd.flags & Common::KBD_CTRL) && ev.kbd.keycode == Common::KEYCODE_d) {
-				_console->attach();
-				break;
-			}
-
 			// Handle key events
 			if (_handler)
 				_handler->handleEvent(ev);
diff --git a/engines/asylum/asylum.h b/engines/asylum/asylum.h
index b5a5678c12a..14aabbb74df 100644
--- a/engines/asylum/asylum.h
+++ b/engines/asylum/asylum.h
@@ -35,7 +35,7 @@
 
 #include "asylum/resources/data.h"
 
-#include "asylum/console.h"
+#include "asylum/detection.h"
 #include "asylum/eventhandler.h"
 #include "asylum/shared.h"
 
@@ -209,7 +209,6 @@ private:
 	const ADGameDescription *_gameDescription;
 
 	// Misc
-	Console              *_console;
 	Common::RandomSource *_rnd;
 
 	// Game
diff --git a/engines/asylum/console.h b/engines/asylum/console.h
index b4d6ff11d95..2a6097450b5 100644
--- a/engines/asylum/console.h
+++ b/engines/asylum/console.h
@@ -31,23 +31,6 @@
 
 namespace Asylum {
 
-enum kDebugLevels {
-	kDebugLevelMain      = 1 << 0,
-	kDebugLevelResources = 1 << 1,
-	kDebugLevelSprites   = 1 << 2,
-	kDebugLevelInput     = 1 << 3,
-	kDebugLevelMenu      = 1 << 4,
-	kDebugLevelScripts   = 1 << 5,
-	kDebugLevelSound     = 1 << 6,
-	kDebugLevelSavegame  = 1 << 7,
-	kDebugLevelScene     = 1 << 8,
-	kDebugLevelObjects   = 1 << 9,
-	kDebugLevelActor     = 1 << 10,
-	kDebugLevelEncounter = 1 << 11,
-	kDebugLevelVideo     = 1 << 12,
-	kDebugLevelCommands  = 1 << 13
-};
-
 class AsylumEngine;
 
 struct ActionArea;
diff --git a/engines/asylum/detection.cpp b/engines/asylum/detection.cpp
index 73e22b0e0c9..5fb70461fc3 100644
--- a/engines/asylum/detection.cpp
+++ b/engines/asylum/detection.cpp
@@ -22,8 +22,8 @@
 #include "engines/advancedDetector.h"
 #include "base/plugins.h"
 
+#include "asylum/detection.h"
 #include "asylum/detection_tables.h"
-#include "asylum/console.h"
 
 static const DebugChannelDef debugFlagList[] = {
 	{Asylum::kDebugLevelMain,      "Main",      "Generic debug level"},
diff --git a/engines/asylum/detection.h b/engines/asylum/detection.h
new file mode 100644
index 00000000000..add204c40b9
--- /dev/null
+++ b/engines/asylum/detection.h
@@ -0,0 +1,46 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef ASYLUM_DETECTION_H
+#define ASYLUM_DETECTION_H
+
+namespace Asylum {
+
+enum kDebugLevels {
+	kDebugLevelMain      = 1 << 0,
+	kDebugLevelResources = 1 << 1,
+	kDebugLevelSprites   = 1 << 2,
+	kDebugLevelInput     = 1 << 3,
+	kDebugLevelMenu      = 1 << 4,
+	kDebugLevelScripts   = 1 << 5,
+	kDebugLevelSound     = 1 << 6,
+	kDebugLevelSavegame  = 1 << 7,
+	kDebugLevelScene     = 1 << 8,
+	kDebugLevelObjects   = 1 << 9,
+	kDebugLevelActor     = 1 << 10,
+	kDebugLevelEncounter = 1 << 11,
+	kDebugLevelVideo     = 1 << 12,
+	kDebugLevelCommands  = 1 << 13
+};
+
+} // End of namespace Asylum
+
+#endif // ASYLUM_DETECTION_H
diff --git a/engines/asylum/puzzles/puzzles.h b/engines/asylum/puzzles/puzzles.h
index e360d988f88..07b6fab1cf4 100644
--- a/engines/asylum/puzzles/puzzles.h
+++ b/engines/asylum/puzzles/puzzles.h
@@ -24,11 +24,11 @@
 
 #include "common/serializer.h"
 
-#include "asylum/console.h"
 #include "asylum/shared.h"
 
 namespace Asylum {
 
+class AsylumEngine;
 class EventHandler;
 class Puzzle;
 
diff --git a/engines/asylum/resources/data.cpp b/engines/asylum/resources/data.cpp
index 74736839d9c..9501a15d3ac 100644
--- a/engines/asylum/resources/data.cpp
+++ b/engines/asylum/resources/data.cpp
@@ -21,7 +21,7 @@
 
 #include "common/textconsole.h"
 
-#include "engines/asylum/console.h"
+#include "engines/asylum/detection.h"
 
 #include "engines/asylum/resources/data.h"
 


Commit: 7e9ed82d68222ae5293e40fea11900008c7b753e
    https://github.com/scummvm/scummvm/commit/7e9ed82d68222ae5293e40fea11900008c7b753e
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2024-06-26T10:28:09+03:00

Commit Message:
ASYLUM: Use the keymapper for binding the middle mouse button

Changed paths:
    engines/asylum/asylum.cpp
    engines/asylum/metaengine.cpp
    engines/asylum/system/cursor.cpp
    engines/asylum/system/cursor.h
    engines/asylum/views/scene.cpp


diff --git a/engines/asylum/asylum.cpp b/engines/asylum/asylum.cpp
index 81a76d23016..01793115e9f 100644
--- a/engines/asylum/asylum.cpp
+++ b/engines/asylum/asylum.cpp
@@ -427,8 +427,6 @@ void AsylumEngine::handleEvents() {
 		case Common::EVENT_LBUTTONUP:
 		case Common::EVENT_RBUTTONDOWN:
 		case Common::EVENT_RBUTTONUP:
-		case Common::EVENT_MBUTTONUP:
-		case Common::EVENT_MBUTTONDOWN:
 			// Handle mouse events
 			_cursor->setState(ev);
 
diff --git a/engines/asylum/metaengine.cpp b/engines/asylum/metaengine.cpp
index 00ec93dfce7..56bb158843e 100644
--- a/engines/asylum/metaengine.cpp
+++ b/engines/asylum/metaengine.cpp
@@ -152,6 +152,7 @@ Common::KeymapArray AsylumMetaEngine::initKeymaps(const char *target) const {
 	act = new Action("INVENTORY", _("Open character inventory"));
 	act->setCustomEngineActionEvent(kAsylumActionOpenInventory);
 	act->addDefaultInputMapping("i");
+	act->addDefaultInputMapping("MOUSE_MIDDLE");
 	act->addDefaultInputMapping("JOY_X");
 	engineKeyMap->addAction(act);
 
diff --git a/engines/asylum/system/cursor.cpp b/engines/asylum/system/cursor.cpp
index 7b9ee482d13..88f0609174d 100644
--- a/engines/asylum/system/cursor.cpp
+++ b/engines/asylum/system/cursor.cpp
@@ -111,10 +111,6 @@ void Cursor::setState(const Common::Event &evt) {
 		_state |= kCursorStateRight;
 		break;
 
-	case Common::EVENT_MBUTTONDOWN:
-		_state |= kCursorMiddle;
-		break;
-
 	case Common::EVENT_LBUTTONUP:
 		_state &= ~kCursorStateLeft;
 		break;
@@ -122,10 +118,6 @@ void Cursor::setState(const Common::Event &evt) {
 	case Common::EVENT_RBUTTONUP:
 		_state &= ~kCursorStateRight;
 		break;
-
-	case Common::EVENT_MBUTTONUP:
-		_state &= ~kCursorMiddle;
-		break;
 	}
 }
 
diff --git a/engines/asylum/system/cursor.h b/engines/asylum/system/cursor.h
index a98d92c75ff..45ce74fc97e 100644
--- a/engines/asylum/system/cursor.h
+++ b/engines/asylum/system/cursor.h
@@ -35,7 +35,6 @@ class GraphicResource;
 enum CursorState {
 	kCursorStateLeft = 1,
 	kCursorStateRight = 2,
-	kCursorMiddle = 3
 };
 
 enum CursorAnimation {
diff --git a/engines/asylum/views/scene.cpp b/engines/asylum/views/scene.cpp
index 8809de3997a..25c684e2fc0 100644
--- a/engines/asylum/views/scene.cpp
+++ b/engines/asylum/views/scene.cpp
@@ -337,7 +337,6 @@ bool Scene::handleEvent(const AsylumEvent &evt) {
 
 	case Common::EVENT_LBUTTONDOWN:
 	case Common::EVENT_RBUTTONDOWN:
-	case Common::EVENT_MBUTTONDOWN:
 		return getCursor()->isHidden() ? false : clickDown(evt);
 	}
 
@@ -554,15 +553,6 @@ bool Scene::clickDown(const AsylumEvent &evt) {
 		}
 		break;
 
-	case Common::EVENT_MBUTTONDOWN:
-		if (player->getStatus() != kActorStatusDisabled) {
-			if (player->getStatus() == kActorStatusShowingInventory || player->getStatus() == kActorStatus10)
-				player->changeStatus(kActorStatusEnabled);
-			else
-				player->changeStatus(kActorStatusShowingInventory);
-		}
-		break;
-
 	case Common::EVENT_LBUTTONDOWN:
 		if (getCursor()->getState() & kCursorStateRight)
 			break;


Commit: bdc07c126d30a9aa1a6263bb94127dea393fe48e
    https://github.com/scummvm/scummvm/commit/bdc07c126d30a9aa1a6263bb94127dea393fe48e
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2024-06-26T10:28:09+03:00

Commit Message:
ASYLUM: Implement moving with the arrow keys

Changed paths:
    engines/asylum/asylum.cpp
    engines/asylum/metaengine.cpp
    engines/asylum/shared.h
    engines/asylum/system/cursor.cpp
    engines/asylum/system/cursor.h
    engines/asylum/views/scene.cpp
    engines/asylum/views/scene.h


diff --git a/engines/asylum/asylum.cpp b/engines/asylum/asylum.cpp
index 01793115e9f..dbc3d21c493 100644
--- a/engines/asylum/asylum.cpp
+++ b/engines/asylum/asylum.cpp
@@ -405,6 +405,7 @@ void AsylumEngine::handleEvents() {
 			break;
 
 		case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
 			// Handle custom actions
 			if (_handler)
 				_handler->handleEvent(ev);
@@ -428,8 +429,6 @@ void AsylumEngine::handleEvents() {
 		case Common::EVENT_RBUTTONDOWN:
 		case Common::EVENT_RBUTTONUP:
 			// Handle mouse events
-			_cursor->setState(ev);
-
 			if (_handler)
 				_handler->handleEvent(ev);
 			break;
diff --git a/engines/asylum/metaengine.cpp b/engines/asylum/metaengine.cpp
index 56bb158843e..e8860f55bbb 100644
--- a/engines/asylum/metaengine.cpp
+++ b/engines/asylum/metaengine.cpp
@@ -168,6 +168,30 @@ Common::KeymapArray AsylumMetaEngine::initKeymaps(const char *target) const {
 	act->addDefaultInputMapping("JOY_B");
 	engineKeyMap->addAction(act);
 
+	act = new Action(kStandardActionMoveUp, _("Move up"));
+	act->setCustomEngineActionEvent(kAsylumActionMoveUp);
+	act->addDefaultInputMapping("UP");
+	act->addDefaultInputMapping("JOY_UP");
+	engineKeyMap->addAction(act);
+
+	act = new Action(kStandardActionMoveDown, _("Move down"));
+	act->setCustomEngineActionEvent(kAsylumActionMoveDown);
+	act->addDefaultInputMapping("DOWN");
+	act->addDefaultInputMapping("JOY_DOWN");
+	engineKeyMap->addAction(act);
+
+	act = new Action(kStandardActionMoveLeft, _("Move left"));
+	act->setCustomEngineActionEvent(kAsylumActionMoveLeft);
+	act->addDefaultInputMapping("LEFT");
+	act->addDefaultInputMapping("JOY_LEFT");
+	engineKeyMap->addAction(act);
+
+	act = new Action(kStandardActionMoveRight, _("Move right"));
+	act->setCustomEngineActionEvent(kAsylumActionMoveRight);
+	act->addDefaultInputMapping("RIGHT");
+	act->addDefaultInputMapping("JOY_RIGHT");
+	engineKeyMap->addAction(act);
+
 	return Keymap::arrayOf(engineKeyMap);
 }
 
diff --git a/engines/asylum/shared.h b/engines/asylum/shared.h
index af2eb35acea..11302ce5540 100644
--- a/engines/asylum/shared.h
+++ b/engines/asylum/shared.h
@@ -880,7 +880,11 @@ enum AsylumAction {
 	kAsylumActionSwitchToGrimwall,
 	kAsylumActionSwitchToOlmec,
 	kAsylumActionOpenInventory,
-	kAsylumActionShowMenu
+	kAsylumActionShowMenu,
+	kAsylumActionMoveUp,
+	kAsylumActionMoveDown,
+	kAsylumActionMoveRight,
+	kAsylumActionMoveLeft
 };
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/engines/asylum/system/cursor.cpp b/engines/asylum/system/cursor.cpp
index 88f0609174d..2b8e4fbd394 100644
--- a/engines/asylum/system/cursor.cpp
+++ b/engines/asylum/system/cursor.cpp
@@ -32,7 +32,7 @@ namespace Asylum {
 const uint32 CURSOR_UPDATE_TICKS = 100;
 
 Cursor::Cursor(AsylumEngine *engine) : _vm(engine),
-	_state(0), _cursorRes(nullptr), _nextTick(0), _frameStep(0),
+	_cursorRes(nullptr), _nextTick(0), _frameStep(0),
 	_graphicResourceId(kResourceNone), _currentFrame(0), _lastFrameIndex(0), _counter(0), _animation(kCursorAnimationNone),
 	_forceHide(false) {
 }
@@ -98,29 +98,6 @@ void Cursor::update() {
 	CursorMan.replaceCursor(frame->surface, hotspot.x, hotspot.y, 0);
 }
 
-void Cursor::setState(const Common::Event &evt) {
-	switch (evt.type) {
-	default:
-		break;
-
-	case Common::EVENT_LBUTTONDOWN:
-		_state |= kCursorStateLeft;
-		break;
-
-	case Common::EVENT_RBUTTONDOWN:
-		_state |= kCursorStateRight;
-		break;
-
-	case Common::EVENT_LBUTTONUP:
-		_state &= ~kCursorStateLeft;
-		break;
-
-	case Common::EVENT_RBUTTONUP:
-		_state &= ~kCursorStateRight;
-		break;
-	}
-}
-
 void Cursor::animate() {
 	if (isHidden() || !_animation || _nextTick > _vm->getTick())
 		return;
diff --git a/engines/asylum/system/cursor.h b/engines/asylum/system/cursor.h
index 45ce74fc97e..7d4fa5d590e 100644
--- a/engines/asylum/system/cursor.h
+++ b/engines/asylum/system/cursor.h
@@ -32,11 +32,6 @@ namespace Asylum {
 class AsylumEngine;
 class GraphicResource;
 
-enum CursorState {
-	kCursorStateLeft = 1,
-	kCursorStateRight = 2,
-};
-
 enum CursorAnimation {
 	kCursorAnimationNone   = 0,
 	kCursorAnimationLinear = 1,
@@ -87,8 +82,6 @@ public:
 	void animate();
 
 	// Accessors
-	void setState(const Common::Event &evt);
-	byte getState() { return _state; }
 	void setForceHide(bool state) { _forceHide = state; }
 	ResourceId getResourceId() { return _graphicResourceId; }
 	CursorAnimation getAnimation() { return _animation; }
@@ -101,8 +94,6 @@ public:
 private:
 	AsylumEngine *_vm;
 
-	byte _state;
-
 	// Cursor resource
 	GraphicResource *_cursorRes;
 
diff --git a/engines/asylum/views/scene.cpp b/engines/asylum/views/scene.cpp
index 25c684e2fc0..e3e56be1b51 100644
--- a/engines/asylum/views/scene.cpp
+++ b/engines/asylum/views/scene.cpp
@@ -314,7 +314,6 @@ bool Scene::handleEvent(const AsylumEvent &evt) {
 		return init();
 
 	case EVENT_ASYLUM_ACTIVATE:
-	case Common::EVENT_RBUTTONUP:
 		activate();
 		break;
 
@@ -322,7 +321,10 @@ bool Scene::handleEvent(const AsylumEvent &evt) {
 		return update();
 
 	case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
-		return action((AsylumAction)evt.customType);
+		return actionDown((AsylumAction)evt.customType);
+
+	case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+		return actionUp((AsylumAction)evt.customType);
 
 	case Common::EVENT_KEYDOWN:
 		if (evt.kbd.flags & Common::KBD_CTRL)
@@ -338,6 +340,11 @@ bool Scene::handleEvent(const AsylumEvent &evt) {
 	case Common::EVENT_LBUTTONDOWN:
 	case Common::EVENT_RBUTTONDOWN:
 		return getCursor()->isHidden() ? false : clickDown(evt);
+
+	case Common::EVENT_RBUTTONUP:
+		_rightButtonDown = false;
+		activate();
+		break;
 	}
 
 	return false;
@@ -420,7 +427,9 @@ bool Scene::update() {
 	return true;
 }
 
-bool Scene::action(AsylumAction a) {
+bool Scene::actionDown(AsylumAction a) {
+	Actor *player = getActor();
+
 	switch (a) {
 	case kAsylumActionShowVersion:
 		_debugShowVersion = !_debugShowVersion;
@@ -470,11 +479,70 @@ bool Scene::action(AsylumAction a) {
 			}
 		}
 		break;
+
+	case kAsylumActionMoveUp:
+		if (player->getStatus() != kActorStatusDisabled) {
+			player->changeStatus(kActorStatusWalking);
+		}
+		_keyState |= kWalkUp;
+		break;
+
+	case kAsylumActionMoveDown:
+		if (player->getStatus() != kActorStatusDisabled) {
+			player->changeStatus(kActorStatusWalking);
+		}
+		_keyState |= kWalkDown;
+		break;
+
+	case kAsylumActionMoveLeft:
+		if (player->getStatus() != kActorStatusDisabled) {
+			player->changeStatus(kActorStatusWalking);
+		}
+		_keyState |= kWalkLeft;
+		break;
+
+	case kAsylumActionMoveRight:
+		if (player->getStatus() != kActorStatusDisabled) {
+			player->changeStatus(kActorStatusWalking);
+		}
+		_keyState |= kWalkRight;
+		break;
+
 	}
 
 	return true;
 }
 
+bool Scene::actionUp(AsylumAction a) {
+	byte lastKeyState = _keyState;
+
+	switch (a) {
+	case kAsylumActionMoveUp:
+		_keyState &= ~kWalkUp;
+		break;
+
+	case kAsylumActionMoveDown:
+		_keyState &= ~kWalkDown;
+		break;
+
+	case kAsylumActionMoveLeft:
+		_keyState &= ~kWalkLeft;
+		break;
+
+	case kAsylumActionMoveRight:
+		_keyState &= ~kWalkRight;
+		break;
+
+	default:
+		break;
+	}
+
+	if (lastKeyState && !_keyState)
+		activate();
+
+	return true;
+}
+
 bool Scene::key(const AsylumEvent &evt) {
 	if (!_ws)
 		error("[Scene::key] WorldStats not initialized properly");
@@ -551,10 +619,12 @@ bool Scene::clickDown(const AsylumEvent &evt) {
 		} else if (player->getStatus() != kActorStatusDisabled) {
 			player->changeStatus(kActorStatusWalking);
 		}
+
+		_rightButtonDown = true;
 		break;
 
 	case Common::EVENT_LBUTTONDOWN:
-		if (getCursor()->getState() & kCursorStateRight)
+		if (_rightButtonDown || _keyState)
 			break;
 
 		if (getSpeech()->getSoundResourceId())
@@ -713,6 +783,37 @@ void Scene::updateMouse() {
 
 	ActorDirection newDirection = kDirectionInvalid;
 
+	if (_keyState) {
+		if (_keyState & kWalkLeft) {
+			if (_keyState & kWalkUp) {
+				newDirection = kDirectionNW;
+			} else if (_keyState & kWalkDown) {
+				newDirection = kDirectionSW;
+			} else {
+				newDirection = kDirectionW;
+			}
+		} else if (_keyState & kWalkRight) {
+			if (_keyState & kWalkUp) {
+				newDirection = kDirectionNE;
+			} else if (_keyState & kWalkDown) {
+				newDirection = kDirectionSE;
+			} else {
+				newDirection = kDirectionE;
+			}
+		} else if (_keyState & kWalkUp) {
+			newDirection = kDirectionN;
+		} else if (_keyState & kWalkDown) {
+			newDirection = kDirectionS;
+		}
+
+		updateCursor(newDirection, actorRect);
+
+		if (newDirection >= kDirectionN)
+			if (player->getStatus() == kActorStatusWalking || player->getStatus() == kActorStatusWalking2)
+				player->changeDirection(newDirection);
+		return;
+	}
+
 	if (mouse.x < actorRect.left) {
 		if (mouse.y >= actorRect.top) {
 			if (mouse.y > actorRect.bottom) {
@@ -1158,7 +1259,7 @@ void Scene::updateCursor(ActorDirection direction, const Common::Rect &rect) {
 		return;
 	}
 
-	if (getCursor()->getState() & kCursorStateRight) {
+	if (_rightButtonDown || _keyState) {
 		if (player->getStatus() == kActorStatusWalking || player->getStatus() == kActorStatusWalking2) {
 
 			if (direction >= kDirectionN) {
diff --git a/engines/asylum/views/scene.h b/engines/asylum/views/scene.h
index f769066ccdc..e6112bfafef 100644
--- a/engines/asylum/views/scene.h
+++ b/engines/asylum/views/scene.h
@@ -75,6 +75,13 @@ enum ActionAreaType {
 	kActionAreaType2 = 2
 };
 
+enum KeyDirection {
+	kWalkUp = 1,
+	kWalkDown = 2,
+	kWalkLeft = 4,
+	kWalkRight = 8
+};
+
 class Scene : public EventHandler {
 public:
 	Scene(AsylumEngine *engine);
@@ -224,12 +231,16 @@ private:
 
 	bool _debugShowVersion;
 
+	byte _keyState;
+	bool _rightButtonDown;
+
 	//////////////////////////////////////////////////////////////////////////
 	// Message handling
 	void activate();
 	bool init();
 	bool update();
-	bool action(AsylumAction a);
+	bool actionDown(AsylumAction a);
+	bool actionUp(AsylumAction a);
 	bool key(const AsylumEvent &evt);
 	bool clickDown(const AsylumEvent &evt);
 


Commit: 3922c71287657ca9f5d9dbd21964e2e4c677c87d
    https://github.com/scummvm/scummvm/commit/3922c71287657ca9f5d9dbd21964e2e4c677c87d
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2024-06-26T10:28:09+03:00

Commit Message:
ASYLUM: Use keymapper actions for the resource viewer

Changed paths:
    engines/asylum/asylum.cpp
    engines/asylum/asylum.h
    engines/asylum/metaengine.cpp
    engines/asylum/shared.h
    engines/asylum/views/resviewer.cpp
    engines/asylum/views/resviewer.h
    engines/asylum/views/scene.cpp


diff --git a/engines/asylum/asylum.cpp b/engines/asylum/asylum.cpp
index dbc3d21c493..7dcf7b9627d 100644
--- a/engines/asylum/asylum.cpp
+++ b/engines/asylum/asylum.cpp
@@ -55,6 +55,9 @@
 
 namespace Asylum {
 
+const char *const engineKeyMapId = "asylum";
+const char *const resviewerKeyMapId = "asylum-resviewer";
+
 AsylumEngine::AsylumEngine(OSystem *system, const ADGameDescription *gd) : Engine(system), _gameDescription(gd),
 	_cursor(nullptr), _encounter(nullptr), _menu(nullptr), _resource(nullptr), _savegame(nullptr),
 	_scene(nullptr), _screen(nullptr), _script(nullptr), _special(nullptr), _speech(nullptr), _sound(nullptr), _text(nullptr),
diff --git a/engines/asylum/asylum.h b/engines/asylum/asylum.h
index 14aabbb74df..57f674cf8b4 100644
--- a/engines/asylum/asylum.h
+++ b/engines/asylum/asylum.h
@@ -67,6 +67,9 @@ class Sound;
 class Text;
 class VideoPlayer;
 
+extern const char *const engineKeyMapId;
+extern const char *const resviewerKeyMapId;
+
 class AsylumEngine: public Engine, public Common::Serializable {
 protected:
 	// Engine APIs
diff --git a/engines/asylum/metaengine.cpp b/engines/asylum/metaengine.cpp
index e8860f55bbb..833a72d7ab3 100644
--- a/engines/asylum/metaengine.cpp
+++ b/engines/asylum/metaengine.cpp
@@ -192,7 +192,82 @@ Common::KeymapArray AsylumMetaEngine::initKeymaps(const char *target) const {
 	act->addDefaultInputMapping("JOY_RIGHT");
 	engineKeyMap->addAction(act);
 
-	return Keymap::arrayOf(engineKeyMap);
+	Keymap *resviewerKeyMap = new Keymap(Keymap::kKeymapTypeGame, "asylum-resviewer", "Sanitarium - Resource viewer");
+	resviewerKeyMap->setEnabled(false);
+
+	act = new Action(kStandardActionMoveUp, _("Move up"));
+	act->setCustomEngineActionEvent(kAsylumActionMoveUp);
+	act->addDefaultInputMapping("UP");
+	act->addDefaultInputMapping("JOY_UP");
+	act->allowKbdRepeats();
+	resviewerKeyMap->addAction(act);
+
+	act = new Action(kStandardActionMoveDown, _("Move down"));
+	act->setCustomEngineActionEvent(kAsylumActionMoveDown);
+	act->addDefaultInputMapping("DOWN");
+	act->addDefaultInputMapping("JOY_DOWN");
+	act->allowKbdRepeats();
+	resviewerKeyMap->addAction(act);
+
+	act = new Action(kStandardActionMoveLeft, _("Move left"));
+	act->setCustomEngineActionEvent(kAsylumActionMoveLeft);
+	act->addDefaultInputMapping("LEFT");
+	act->addDefaultInputMapping("JOY_LEFT");
+	act->allowKbdRepeats();
+	resviewerKeyMap->addAction(act);
+
+	act = new Action(kStandardActionMoveRight, _("Move right"));
+	act->setCustomEngineActionEvent(kAsylumActionMoveRight);
+	act->addDefaultInputMapping("RIGHT");
+	act->addDefaultInputMapping("JOY_RIGHT");
+	act->allowKbdRepeats();
+	resviewerKeyMap->addAction(act);
+
+	act = new Action("ANIMATE", _("Toggle animation on/off"));
+	act->setCustomEngineActionEvent(kAsylumActionAnimate);
+	act->addDefaultInputMapping("RETURN");
+	act->addDefaultInputMapping("JOY_A");
+	resviewerKeyMap->addAction(act);
+
+	act = new Action("CANCEL", _("Return to gameplay"));
+	act->setCustomEngineActionEvent(kAsylumActionShowMenu);
+	act->addDefaultInputMapping("ESCAPE");
+	act->addDefaultInputMapping("JOY_B");
+	resviewerKeyMap->addAction(act);
+
+	act = new Action("PREVRESOURCE", _("Previous resource"));
+	act->setCustomEngineActionEvent(kAsylumActionPreviousResource);
+	act->addDefaultInputMapping("BACKSPACE");
+	act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+	act->allowKbdRepeats();
+	resviewerKeyMap->addAction(act);
+
+	act = new Action("NEXTRESOURCE", _("Next resource"));
+	act->setCustomEngineActionEvent(kAsylumActionNextResource);
+	act->addDefaultInputMapping("SPACE");
+	act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+	act->allowKbdRepeats();
+	resviewerKeyMap->addAction(act);
+
+	act = new Action("PREVPALETTE", _("Previous palette"));
+	act->setCustomEngineActionEvent(kAsylumActionPreviousPalette);
+	act->addDefaultInputMapping("PAGEUP");
+	act->addDefaultInputMapping("JOY_LEFT_TRIGGER");
+	act->allowKbdRepeats();
+	resviewerKeyMap->addAction(act);
+
+	act = new Action("NEXTPALETTE", _("Next palette"));
+	act->setCustomEngineActionEvent(kAsylumActionNextPalette);
+	act->addDefaultInputMapping("PAGEDOWN");
+	act->addDefaultInputMapping("JOY_RIGHT_TRIGGER");
+	act->allowKbdRepeats();
+	resviewerKeyMap->addAction(act);
+
+	KeymapArray keymaps(2);
+	keymaps[0] = engineKeyMap;
+	keymaps[1] = resviewerKeyMap;
+
+	return keymaps;
 }
 
 const Common::AchievementDescriptionList *AsylumMetaEngine::getAchievementDescriptionList() const {
diff --git a/engines/asylum/shared.h b/engines/asylum/shared.h
index 11302ce5540..65d69795776 100644
--- a/engines/asylum/shared.h
+++ b/engines/asylum/shared.h
@@ -884,7 +884,12 @@ enum AsylumAction {
 	kAsylumActionMoveUp,
 	kAsylumActionMoveDown,
 	kAsylumActionMoveRight,
-	kAsylumActionMoveLeft
+	kAsylumActionMoveLeft,
+	kAsylumActionNextResource,
+	kAsylumActionPreviousResource,
+	kAsylumActionNextPalette,
+	kAsylumActionPreviousPalette,
+	kAsylumActionAnimate
 };
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/engines/asylum/views/resviewer.cpp b/engines/asylum/views/resviewer.cpp
index 102973b065d..792a239a596 100644
--- a/engines/asylum/views/resviewer.cpp
+++ b/engines/asylum/views/resviewer.cpp
@@ -28,6 +28,9 @@
 #include "asylum/asylum.h"
 #include "asylum/respack.h"
 
+#include "backends/keymapper/keymap.h"
+#include "backends/keymapper/keymapper.h"
+
 namespace Asylum {
 
 #define SCROLL_STEP 10
@@ -70,6 +73,9 @@ ResourceViewer::ResourceViewer(AsylumEngine *engine) : _vm(engine), _resource(_v
 	_resPack = -1;
 	_paletteIndex = 0;
 	_animate = true;
+
+	Common::Keymapper *keymapper = g_system->getEventManager()->getKeymapper();
+	_keymap = keymapper->getKeymap(resviewerKeyMapId);
 }
 
 bool ResourceViewer::setResourceId(ResourceId resourceId) {
@@ -162,12 +168,16 @@ void ResourceViewer::update() {
 	getScreen()->copyBackBufferToScreen();
 }
 
-void ResourceViewer::key(const AsylumEvent &evt) {
-	switch (evt.kbd.keycode) {
+void ResourceViewer::action(const AsylumEvent &evt) {
+	switch ((AsylumAction)evt.customType) {
 	default:
 		break;
 
-	case Common::KEYCODE_SPACE:
+	case kAsylumActionShowMenu:
+		_vm->switchEventHandler(_handler);
+		break;
+
+	case kAsylumActionNextResource:
 		if (RESOURCE_INDEX(_resourceId) < resPackSizes[_resPack] - 1) {
 			int i = 1;
 			do {
@@ -178,7 +188,7 @@ void ResourceViewer::key(const AsylumEvent &evt) {
 		}
 		break;
 
-	case Common::KEYCODE_BACKSPACE:
+	case kAsylumActionPreviousResource:
 		if (RESOURCE_INDEX(_resourceId)) {
 			int i = 0;
 			do {
@@ -189,17 +199,17 @@ void ResourceViewer::key(const AsylumEvent &evt) {
 		}
 		break;
 
-	case Common::KEYCODE_RETURN:
+	case kAsylumActionAnimate:
 		_animate = !_animate;
 		break;
 
-	case Common::KEYCODE_UP:
-	case Common::KEYCODE_DOWN:
-	case Common::KEYCODE_RIGHT:
-	case Common::KEYCODE_LEFT:
+	case kAsylumActionMoveUp:
+	case kAsylumActionMoveDown:
+	case kAsylumActionMoveRight:
+	case kAsylumActionMoveLeft:
 		if (_scroll) {
 			int16 x = _x, y = _y;
-			int dir = (int)(evt.kbd.keycode - Common::KEYCODE_UP);
+			int dir = (int)(evt.customType - kAsylumActionMoveUp);
 
 			if (dir < 2)
 				y -= SCROLL_STEP * (2 * dir - 1);
@@ -213,12 +223,12 @@ void ResourceViewer::key(const AsylumEvent &evt) {
 		}
 		break;
 
-	case Common::KEYCODE_PAGEUP:
+	case kAsylumActionPreviousPalette:
 		if (_paletteIndex)
 			_paletteIndex = _paletteIndex - 1;
 		break;
 
-	case Common::KEYCODE_PAGEDOWN:
+	case kAsylumActionNextPalette:
 		if (_paletteIndex < 8 && paletteIds[_resPack][_paletteIndex + 1])
 			_paletteIndex = _paletteIndex + 1;
 		break;
@@ -230,17 +240,20 @@ bool ResourceViewer::handleEvent(const AsylumEvent &evt) {
 	default:
 		break;
 
-	case EVENT_ASYLUM_UPDATE:
-		update();
+	case EVENT_ASYLUM_INIT:
+		_keymap->setEnabled(true);
+		return true;
+
+	case EVENT_ASYLUM_DEINIT:
+		_keymap->setEnabled(false);
 		return true;
 
-	case Common::EVENT_KEYDOWN:
-		key(evt);
+	case EVENT_ASYLUM_UPDATE:
+		update();
 		return true;
 
 	case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
-		if ((AsylumAction)evt.customType == kAsylumActionShowMenu)
-			_vm->switchEventHandler(_handler);
+		action(evt);
 		return true;
 	}
 
diff --git a/engines/asylum/views/resviewer.h b/engines/asylum/views/resviewer.h
index a5a39512079..5af60b01931 100644
--- a/engines/asylum/views/resviewer.h
+++ b/engines/asylum/views/resviewer.h
@@ -27,6 +27,10 @@
 #include "asylum/eventhandler.h"
 #include "asylum/shared.h"
 
+namespace Common {
+class Keymap;
+}
+
 namespace Asylum {
 
 class AsylumEngine;
@@ -43,6 +47,7 @@ public:
 private:
 	AsylumEngine *_vm;
 	EventHandler *_handler;
+	Common::Keymap *_keymap;
 	ResourceId _resourceId;
 	GraphicResource _resource;
 	int  _frameIndex;
@@ -59,7 +64,7 @@ private:
 	void drawPalette();
 	void drawResource();
 
-	void key(const AsylumEvent &evt);
+	void action(const AsylumEvent &evt);
 	void update();
 };
 
diff --git a/engines/asylum/views/scene.cpp b/engines/asylum/views/scene.cpp
index e3e56be1b51..df5a6df6531 100644
--- a/engines/asylum/views/scene.cpp
+++ b/engines/asylum/views/scene.cpp
@@ -508,6 +508,8 @@ bool Scene::actionDown(AsylumAction a) {
 		_keyState |= kWalkRight;
 		break;
 
+	default:
+		break;
 	}
 
 	return true;


Commit: c08d7e31935c590ae345cba7aa08723f8d7adb70
    https://github.com/scummvm/scummvm/commit/c08d7e31935c590ae345cba7aa08723f8d7adb70
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2024-06-26T10:28:09+03:00

Commit Message:
ASYLUM: Unify cancel event handling for puzzles and encounters

Changed paths:
    engines/asylum/puzzles/board.cpp
    engines/asylum/puzzles/board.h
    engines/asylum/puzzles/boardsalvation.cpp
    engines/asylum/puzzles/boardsalvation.h
    engines/asylum/puzzles/clock.cpp
    engines/asylum/puzzles/clock.h
    engines/asylum/puzzles/fisherman.cpp
    engines/asylum/puzzles/fisherman.h
    engines/asylum/puzzles/hivecontrol.cpp
    engines/asylum/puzzles/hivecontrol.h
    engines/asylum/puzzles/hivemachine.cpp
    engines/asylum/puzzles/hivemachine.h
    engines/asylum/puzzles/lock.cpp
    engines/asylum/puzzles/lock.h
    engines/asylum/puzzles/morguedoor.cpp
    engines/asylum/puzzles/morguedoor.h
    engines/asylum/puzzles/pipes.cpp
    engines/asylum/puzzles/pipes.h
    engines/asylum/puzzles/puzzle.cpp
    engines/asylum/puzzles/puzzle.h
    engines/asylum/puzzles/tictactoe.cpp
    engines/asylum/puzzles/tictactoe.h
    engines/asylum/puzzles/timemachine.cpp
    engines/asylum/puzzles/timemachine.h
    engines/asylum/puzzles/vcr.cpp
    engines/asylum/puzzles/vcr.h
    engines/asylum/puzzles/wheel.cpp
    engines/asylum/puzzles/wheel.h
    engines/asylum/puzzles/writings.cpp
    engines/asylum/puzzles/writings.h
    engines/asylum/resources/encounters.cpp
    engines/asylum/resources/encounters.h


diff --git a/engines/asylum/puzzles/board.cpp b/engines/asylum/puzzles/board.cpp
index 75e257cace8..9a8f382b62c 100644
--- a/engines/asylum/puzzles/board.cpp
+++ b/engines/asylum/puzzles/board.cpp
@@ -136,7 +136,7 @@ void PuzzleBoard::updateScreen()  {
 	}
 }
 
-bool PuzzleBoard::mouseRightDown(const AsylumEvent &) {
+bool PuzzleBoard::exitPuzzle() {
 	if (!stopSound()) {
 		getScreen()->clear();
 		_vm->switchEventHandler(getScene());
diff --git a/engines/asylum/puzzles/board.h b/engines/asylum/puzzles/board.h
index 27bb487db80..78bf9657b46 100644
--- a/engines/asylum/puzzles/board.h
+++ b/engines/asylum/puzzles/board.h
@@ -78,14 +78,14 @@ protected:
 	bool stopSound();
 	void checkSlots();
 
-private:
 	//////////////////////////////////////////////////////////////////////////
 	// Event Handling
 	//////////////////////////////////////////////////////////////////////////
 	bool init(const AsylumEvent &evt);
 	bool activate(const AsylumEvent &evt) { return updateScreen(), true; }
-	virtual bool mouseRightDown(const AsylumEvent &evt);
+	bool exitPuzzle();
 
+private:
 	//////////////////////////////////////////////////////////////////////////
 	// Helpers
 	//////////////////////////////////////////////////////////////////////////
diff --git a/engines/asylum/puzzles/boardsalvation.cpp b/engines/asylum/puzzles/boardsalvation.cpp
index 0af99ade72f..a31699df64b 100644
--- a/engines/asylum/puzzles/boardsalvation.cpp
+++ b/engines/asylum/puzzles/boardsalvation.cpp
@@ -203,11 +203,10 @@ bool PuzzleBoardSalvation::mouseLeftDown(const AsylumEvent &) {
 	return true;
 }
 
-bool PuzzleBoardSalvation::mouseRightDown(const AsylumEvent &) {
+bool PuzzleBoardSalvation::exitPuzzle() {
 	if (!stopSound()) {
 		checkANALText();
-		getScreen()->clear();
-		_vm->switchEventHandler(getScene());
+		return PuzzleBoard::exitPuzzle();
 	}
 
 	return true;
diff --git a/engines/asylum/puzzles/boardsalvation.h b/engines/asylum/puzzles/boardsalvation.h
index 6161b219de5..47ea97aeb10 100644
--- a/engines/asylum/puzzles/boardsalvation.h
+++ b/engines/asylum/puzzles/boardsalvation.h
@@ -40,7 +40,7 @@ private:
 	// Event Handling
 	//////////////////////////////////////////////////////////////////////////
 	bool mouseLeftDown(const AsylumEvent &evt);
-	bool mouseRightDown(const AsylumEvent &evt);
+	bool exitPuzzle();
 
 	//////////////////////////////////////////////////////////////////////////
 	// Helpers
diff --git a/engines/asylum/puzzles/clock.cpp b/engines/asylum/puzzles/clock.cpp
index 561c8417cf5..f57964d47d6 100644
--- a/engines/asylum/puzzles/clock.cpp
+++ b/engines/asylum/puzzles/clock.cpp
@@ -112,8 +112,7 @@ void PuzzleClock::updateScreen() {
 		_vm->switchEventHandler(getScene());
 	} else {
 		if (_vm->isGameFlagSet(kGameFlag511)) {
-			AsylumEvent evt;
-			mouseRightDown(evt);
+			exitPuzzle();
 		}
 	}
 }
@@ -134,7 +133,7 @@ bool PuzzleClock::mouseLeftDown(const AsylumEvent &) {
 	return true;
 }
 
-bool PuzzleClock::mouseRightDown(const AsylumEvent &) {
+bool PuzzleClock::exitPuzzle() {
 	setFlag();
 	_rightButtonClicked = true;
 
diff --git a/engines/asylum/puzzles/clock.h b/engines/asylum/puzzles/clock.h
index be4e1fd6e68..b0909821910 100644
--- a/engines/asylum/puzzles/clock.h
+++ b/engines/asylum/puzzles/clock.h
@@ -49,7 +49,7 @@ private:
 	bool init(const AsylumEvent &evt);
 	void updateScreen();
 	bool mouseLeftDown(const AsylumEvent &evt);
-	bool mouseRightDown(const AsylumEvent &evt);
+	bool exitPuzzle();
 
 	//////////////////////////////////////////////////////////////////////////
 	// Helpers
diff --git a/engines/asylum/puzzles/fisherman.cpp b/engines/asylum/puzzles/fisherman.cpp
index 12081ef5c2f..596e068211d 100644
--- a/engines/asylum/puzzles/fisherman.cpp
+++ b/engines/asylum/puzzles/fisherman.cpp
@@ -165,7 +165,7 @@ bool PuzzleFisherman::mouseLeftDown(const AsylumEvent &evt) {
 	return true;
 }
 
-bool PuzzleFisherman::mouseRightDown(const AsylumEvent &) {
+bool PuzzleFisherman::exitPuzzle() {
 	getCursor()->hide();
 	getSharedData()->setFlag(kFlag1, true);
 	getScreen()->stopPaletteFade(0, 0, 0);
diff --git a/engines/asylum/puzzles/fisherman.h b/engines/asylum/puzzles/fisherman.h
index 81e6e6baec2..2ef87fba4f7 100644
--- a/engines/asylum/puzzles/fisherman.h
+++ b/engines/asylum/puzzles/fisherman.h
@@ -49,9 +49,8 @@ private:
 	//////////////////////////////////////////////////////////////////////////
 	bool init(const AsylumEvent &evt);
 	void updateScreen();
-	bool key(const AsylumEvent &evt) { return keyExit(evt); }
 	bool mouseLeftDown(const AsylumEvent &evt);
-	bool mouseRightDown(const AsylumEvent &evt);
+	bool exitPuzzle();
 
 	//////////////////////////////////////////////////////////////////////////
 	// Helpers
diff --git a/engines/asylum/puzzles/hivecontrol.cpp b/engines/asylum/puzzles/hivecontrol.cpp
index 29634c50bbf..f58f111b408 100644
--- a/engines/asylum/puzzles/hivecontrol.cpp
+++ b/engines/asylum/puzzles/hivecontrol.cpp
@@ -274,7 +274,7 @@ bool PuzzleHiveControl::mouseLeftDown(const AsylumEvent &) {
 	return true;
 }
 
-bool PuzzleHiveControl::mouseRightDown(const AsylumEvent &) {
+bool PuzzleHiveControl::exitPuzzle() {
 	if (_leverDelta) {
 		_leverDelta = 0;
 		_prevLeverPosition = _leverPosition;
@@ -451,8 +451,7 @@ void PuzzleHiveControl::updateScreen() {
 		if (_counter < 30 || getSound()->isPlaying(getWorld()->graphicResourceIds[83])) {
 			++_counter;
 		} else {
-			AsylumEvent evt;
-			mouseRightDown(evt);
+			exitPuzzle();
 			getCursor()->show();
 		}
 	}
diff --git a/engines/asylum/puzzles/hivecontrol.h b/engines/asylum/puzzles/hivecontrol.h
index e2a96eebf4b..5f42e673025 100644
--- a/engines/asylum/puzzles/hivecontrol.h
+++ b/engines/asylum/puzzles/hivecontrol.h
@@ -104,7 +104,7 @@ private:
 	bool init(const AsylumEvent &evt);
 	void updateScreen();
 	bool mouseLeftDown(const AsylumEvent &evt);
-	bool mouseRightDown(const AsylumEvent &evt);
+	bool exitPuzzle();
 
 	//////////////////////////////////////////////////////////////////////////
 	// Helpers
diff --git a/engines/asylum/puzzles/hivemachine.cpp b/engines/asylum/puzzles/hivemachine.cpp
index 1e6dff0f5b8..65f5843605e 100644
--- a/engines/asylum/puzzles/hivemachine.cpp
+++ b/engines/asylum/puzzles/hivemachine.cpp
@@ -94,7 +94,7 @@ bool PuzzleHiveMachine::mouseLeftDown(const AsylumEvent &) {
 	return true;
 }
 
-bool PuzzleHiveMachine::mouseRightDown(const AsylumEvent &) {
+bool PuzzleHiveMachine::exitPuzzle() {
 	_notesNumber = 0;
 	_melody.clear();
 
diff --git a/engines/asylum/puzzles/hivemachine.h b/engines/asylum/puzzles/hivemachine.h
index 0c8ff7e05a6..43516aa115f 100644
--- a/engines/asylum/puzzles/hivemachine.h
+++ b/engines/asylum/puzzles/hivemachine.h
@@ -58,7 +58,7 @@ private:
 	//////////////////////////////////////////////////////////////////////////
 	bool init(const AsylumEvent &evt);
 	bool mouseLeftDown(const AsylumEvent &evt);
-	bool mouseRightDown(const AsylumEvent &evt);
+	bool exitPuzzle();
 
 	//////////////////////////////////////////////////////////////////////////
 	// Helpers
diff --git a/engines/asylum/puzzles/lock.cpp b/engines/asylum/puzzles/lock.cpp
index a1262a38243..54ad0d19ccd 100644
--- a/engines/asylum/puzzles/lock.cpp
+++ b/engines/asylum/puzzles/lock.cpp
@@ -220,8 +220,10 @@ bool PuzzleLock::mouseLeftDown(const AsylumEvent &evt) {
 	return true;
 }
 
-bool PuzzleLock::mouseRightDown(const AsylumEvent &) {
-	exitPuzzle();
+bool PuzzleLock::exitPuzzle() {
+	getScreen()->clear();
+
+	_vm->switchEventHandler(getScene());
 
 	return true;
 }
diff --git a/engines/asylum/puzzles/lock.h b/engines/asylum/puzzles/lock.h
index 39f5286f597..b874bc47b4b 100644
--- a/engines/asylum/puzzles/lock.h
+++ b/engines/asylum/puzzles/lock.h
@@ -47,9 +47,8 @@ private:
 	//////////////////////////////////////////////////////////////////////////
 	bool init(const AsylumEvent &evt);
 	bool update(const AsylumEvent &evt);
-	bool key(const AsylumEvent &evt) { return keyExit(evt); }
 	bool mouseLeftDown(const AsylumEvent &evt);
-	bool mouseRightDown(const AsylumEvent &evt);
+	bool exitPuzzle();
 
 	//////////////////////////////////////////////////////////////////////////
 	// Helpers
diff --git a/engines/asylum/puzzles/morguedoor.cpp b/engines/asylum/puzzles/morguedoor.cpp
index 3c54a16013d..8bfdcc27076 100644
--- a/engines/asylum/puzzles/morguedoor.cpp
+++ b/engines/asylum/puzzles/morguedoor.cpp
@@ -205,7 +205,7 @@ bool PuzzleMorgueDoor::mouseLeftDown(const AsylumEvent &evt) {
 	return true;
 }
 
-bool PuzzleMorgueDoor::mouseRightUp(const AsylumEvent &) {
+bool PuzzleMorgueDoor::exitPuzzle() {
 	getCursor()->hide();
 	getSharedData()->setFlag(kFlag1, true);
 	getScreen()->stopPaletteFade(0, 0, 0);
diff --git a/engines/asylum/puzzles/morguedoor.h b/engines/asylum/puzzles/morguedoor.h
index 1796dad596f..97251f76a33 100644
--- a/engines/asylum/puzzles/morguedoor.h
+++ b/engines/asylum/puzzles/morguedoor.h
@@ -75,9 +75,8 @@ private:
 	//////////////////////////////////////////////////////////////////////////
 	bool init(const AsylumEvent &evt);
 	void updateScreen();
-	bool key(const AsylumEvent &evt) { return keyExit(evt); }
 	bool mouseLeftDown(const AsylumEvent &evt);
-	bool mouseRightUp(const AsylumEvent &evt);
+	bool exitPuzzle();
 
 	//////////////////////////////////////////////////////////////////////////
 	// Helpers
diff --git a/engines/asylum/puzzles/pipes.cpp b/engines/asylum/puzzles/pipes.cpp
index 43b93614e7b..8df08830ac7 100644
--- a/engines/asylum/puzzles/pipes.cpp
+++ b/engines/asylum/puzzles/pipes.cpp
@@ -462,7 +462,7 @@ bool PuzzlePipes::mouseLeftDown(const AsylumEvent &) {
 	return true;
 }
 
-bool PuzzlePipes::mouseRightDown(const AsylumEvent &) {
+bool PuzzlePipes::exitPuzzle() {
 	getScreen()->clear();
 	getSound()->stop(getWorld()->graphicResourceIds[41]);
 	getSound()->setMusicVolume(_previousMusicVolume);
diff --git a/engines/asylum/puzzles/pipes.h b/engines/asylum/puzzles/pipes.h
index ef0407c74b9..1db54e0c005 100644
--- a/engines/asylum/puzzles/pipes.h
+++ b/engines/asylum/puzzles/pipes.h
@@ -187,7 +187,7 @@ private:
 	bool init(const AsylumEvent &evt);
 	void updateScreen();
 	bool mouseLeftDown(const AsylumEvent &evt);
-	bool mouseRightDown(const AsylumEvent &evt);
+	bool exitPuzzle();
 
 	//////////////////////////////////////////////////////////////////////////
 	// Helpers
diff --git a/engines/asylum/puzzles/puzzle.cpp b/engines/asylum/puzzles/puzzle.cpp
index a2bad5d7267..09bb58a2a32 100644
--- a/engines/asylum/puzzles/puzzle.cpp
+++ b/engines/asylum/puzzles/puzzle.cpp
@@ -58,9 +58,6 @@ bool Puzzle::handleEvent(const AsylumEvent &evt) {
 	case EVENT_ASYLUM_UPDATE:
 		return update(evt);
 
-	case Common::EVENT_KEYDOWN:
-		return key(evt);
-
 	case Common::EVENT_LBUTTONDOWN:
 		return mouseLeftDown(evt);
 
@@ -68,13 +65,8 @@ bool Puzzle::handleEvent(const AsylumEvent &evt) {
 		return mouseLeftUp(evt);
 
 	case Common::EVENT_RBUTTONDOWN:
-		return mouseRightDown(evt);
-
-	case Common::EVENT_RBUTTONUP:
-		return mouseRightUp(evt);
-
 	case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
-		return keyExit(evt);
+		return exitPuzzle();
 	}
 
 	return false;
@@ -107,19 +99,6 @@ bool Puzzle::update(const AsylumEvent &evt) {
 	return true;
 }
 
-bool Puzzle::keyExit(const AsylumEvent &evt) {
-	_vm->switchEventHandler(getScene());
-
-	return true;
-}
-
-
-void Puzzle::exitPuzzle() {
-	getScreen()->clear();
-
-	_vm->switchEventHandler(getScene());
-}
-
 //////////////////////////////////////////////////////////////////////////
 // Hit test functions
 //////////////////////////////////////////////////////////////////////////
diff --git a/engines/asylum/puzzles/puzzle.h b/engines/asylum/puzzles/puzzle.h
index a98716f610e..74e36c1de12 100644
--- a/engines/asylum/puzzles/puzzle.h
+++ b/engines/asylum/puzzles/puzzle.h
@@ -59,14 +59,10 @@ protected:
 	virtual void updateScreen() {};
 	virtual void updateCursor() {};
 	virtual bool activate(const AsylumEvent &evt) { return true; }
-	virtual bool key(const AsylumEvent &evt) { return true; }
 	virtual bool mouseLeftUp(const AsylumEvent &evt) { return true; }
 	virtual bool mouseLeftDown(const AsylumEvent &evt) { return true; }
-	virtual bool mouseRightUp(const AsylumEvent &evt) { return true; }
-	virtual bool mouseRightDown(const AsylumEvent &evt) { return true; }
 
-	bool keyExit(const AsylumEvent &evt);
-	void exitPuzzle();
+	virtual bool exitPuzzle() = 0;
 
 	//////////////////////////////////////////////////////////////////////////
 	// Hit test functions
diff --git a/engines/asylum/puzzles/tictactoe.cpp b/engines/asylum/puzzles/tictactoe.cpp
index b98d217c2d0..787f2d095a6 100644
--- a/engines/asylum/puzzles/tictactoe.cpp
+++ b/engines/asylum/puzzles/tictactoe.cpp
@@ -171,8 +171,10 @@ bool PuzzleTicTacToe::mouseLeftDown(const AsylumEvent &evt) {
 	return true;
 }
 
-bool PuzzleTicTacToe::mouseRightDown(const AsylumEvent &) {
-	exitPuzzle();
+bool PuzzleTicTacToe::exitPuzzle() {
+	getScreen()->clear();
+
+	_vm->switchEventHandler(getScene());
 
 	return true;
 }
diff --git a/engines/asylum/puzzles/tictactoe.h b/engines/asylum/puzzles/tictactoe.h
index e026061f716..9a2df725018 100644
--- a/engines/asylum/puzzles/tictactoe.h
+++ b/engines/asylum/puzzles/tictactoe.h
@@ -59,9 +59,8 @@ private:
 	//////////////////////////////////////////////////////////////////////////
 	bool init(const AsylumEvent &evt);
 	void updateScreen();
-	bool key(const AsylumEvent &evt) { return keyExit(evt); }
 	bool mouseLeftDown(const AsylumEvent &evt);
-	bool mouseRightDown(const AsylumEvent &evt);
+	bool exitPuzzle();
 
 	//////////////////////////////////////////////////////////////////////////
 	// Init & update
diff --git a/engines/asylum/puzzles/timemachine.cpp b/engines/asylum/puzzles/timemachine.cpp
index d9669854561..0e0517ca4e3 100644
--- a/engines/asylum/puzzles/timemachine.cpp
+++ b/engines/asylum/puzzles/timemachine.cpp
@@ -231,7 +231,7 @@ bool PuzzleTimeMachine::mouseLeftDown(const AsylumEvent &evt) {
 	return true;
 }
 
-bool PuzzleTimeMachine::mouseRightDown(const AsylumEvent &) {
+bool PuzzleTimeMachine::exitPuzzle() {
 	getCursor()->hide();
 	getSharedData()->setFlag(kFlag1, true);
 	getScreen()->stopPaletteFade(0, 0, 0);
diff --git a/engines/asylum/puzzles/timemachine.h b/engines/asylum/puzzles/timemachine.h
index 712ec7596d8..78e37b50ae7 100644
--- a/engines/asylum/puzzles/timemachine.h
+++ b/engines/asylum/puzzles/timemachine.h
@@ -60,9 +60,8 @@ private:
 	//////////////////////////////////////////////////////////////////////////
 	bool init(const AsylumEvent &evt);
 	void updateScreen();
-	bool key(const AsylumEvent &evt) { return keyExit(evt); }
 	bool mouseLeftDown(const AsylumEvent &evt);
-	bool mouseRightDown(const AsylumEvent &evt);
+	bool exitPuzzle();
 
 	//////////////////////////////////////////////////////////////////////////
 	// Helpers
diff --git a/engines/asylum/puzzles/vcr.cpp b/engines/asylum/puzzles/vcr.cpp
index 4dd62f21ce3..a30cd68d263 100644
--- a/engines/asylum/puzzles/vcr.cpp
+++ b/engines/asylum/puzzles/vcr.cpp
@@ -85,16 +85,6 @@ bool PuzzleVCR::init(const AsylumEvent &)  {
 	return true;
 }
 
-bool PuzzleVCR::key(const AsylumEvent &evt) {
-	getSound()->stop(getWorld()->graphicResourceIds[47]);
-	getScreen()->clearGraphicsInQueue();
-	getScreen()->clear();
-
-	_vm->switchEventHandler(getScene());
-
-	return true;
-}
-
 bool PuzzleVCR::mouseLeftDown(const AsylumEvent &evt) {
 	if (_isAccomplished)
 		return true;
@@ -259,12 +249,11 @@ bool PuzzleVCR::mouseLeftUp(const AsylumEvent &) {
 	return true;
 }
 
-bool PuzzleVCR::mouseRightDown(const AsylumEvent &) {
+bool PuzzleVCR::exitPuzzle() {
+	getSound()->stop(getWorld()->graphicResourceIds[47]);
 	getScreen()->clearGraphicsInQueue();
 	getScreen()->clear();
 
-	getSound()->stop(getWorld()->graphicResourceIds[47]);
-
 	_vm->switchEventHandler(getScene());
 
 	return true;
diff --git a/engines/asylum/puzzles/vcr.h b/engines/asylum/puzzles/vcr.h
index fc36cc38d65..96c95ba7747 100644
--- a/engines/asylum/puzzles/vcr.h
+++ b/engines/asylum/puzzles/vcr.h
@@ -105,10 +105,9 @@ private:
 	// Event Handling
 	//////////////////////////////////////////////////////////////////////////
 	bool init(const AsylumEvent &evt);
-	bool key(const AsylumEvent &evt);
 	bool mouseLeftDown(const AsylumEvent &evt);
 	bool mouseLeftUp(const AsylumEvent &evt);
-	bool mouseRightDown(const AsylumEvent &evt);
+	bool exitPuzzle();
 
 	//////////////////////////////////////////////////////////////////////////
 	// Drawing
diff --git a/engines/asylum/puzzles/wheel.cpp b/engines/asylum/puzzles/wheel.cpp
index 6578e70d174..1f1b78826ad 100644
--- a/engines/asylum/puzzles/wheel.cpp
+++ b/engines/asylum/puzzles/wheel.cpp
@@ -286,7 +286,7 @@ bool PuzzleWheel::mouseLeftDown(const AsylumEvent &) {
 	return true;
 }
 
-bool PuzzleWheel::mouseRightDown(const AsylumEvent &) {
+bool PuzzleWheel::exitPuzzle() {
 	getScreen()->clear();
 	_vm->switchEventHandler(getScene());
 
diff --git a/engines/asylum/puzzles/wheel.h b/engines/asylum/puzzles/wheel.h
index a9bd110015e..dc479f0deaa 100644
--- a/engines/asylum/puzzles/wheel.h
+++ b/engines/asylum/puzzles/wheel.h
@@ -56,7 +56,7 @@ private:
 	bool init(const AsylumEvent &evt);
 	void updateScreen();
 	bool mouseLeftDown(const AsylumEvent &evt);
-	bool mouseRightDown(const AsylumEvent &evt);
+	bool exitPuzzle();
 
 	//////////////////////////////////////////////////////////////////////////
 	// Helpers
diff --git a/engines/asylum/puzzles/writings.cpp b/engines/asylum/puzzles/writings.cpp
index 1f4f985841f..9c69cd34630 100644
--- a/engines/asylum/puzzles/writings.cpp
+++ b/engines/asylum/puzzles/writings.cpp
@@ -154,7 +154,7 @@ bool PuzzleWritings::update(const AsylumEvent &)  {
 	return true;
 }
 
-bool PuzzleWritings::mouseRightUp(const AsylumEvent &) {
+bool PuzzleWritings::exitPuzzle() {
 	getCursor()->hide();
 	getSharedData()->setFlag(kFlag1, true);
 	getScreen()->stopPaletteFade(0, 0, 0);
diff --git a/engines/asylum/puzzles/writings.h b/engines/asylum/puzzles/writings.h
index ef2f11eaab8..511e4745368 100644
--- a/engines/asylum/puzzles/writings.h
+++ b/engines/asylum/puzzles/writings.h
@@ -45,8 +45,7 @@ private:
 	//////////////////////////////////////////////////////////////////////////
 	bool init(const AsylumEvent &evt);
 	bool update(const AsylumEvent &evt);
-	bool key(const AsylumEvent &evt) { return keyExit(evt); }
-	bool mouseRightUp(const AsylumEvent &evt);
+	bool exitPuzzle();
 };
 
 } // End of namespace Asylum
diff --git a/engines/asylum/resources/encounters.cpp b/engines/asylum/resources/encounters.cpp
index b0ac812bda4..40b01f94cad 100644
--- a/engines/asylum/resources/encounters.cpp
+++ b/engines/asylum/resources/encounters.cpp
@@ -366,22 +366,16 @@ bool Encounter::handleEvent(const AsylumEvent &evt) {
 	case EVENT_ASYLUM_UPDATE:
 		return update();
 
-	case Common::EVENT_KEYDOWN:
-		return key(evt);
-
 	case Common::EVENT_LBUTTONDOWN:
 	case Common::EVENT_LBUTTONUP:
-	case Common::EVENT_RBUTTONDOWN:
-	case Common::EVENT_RBUTTONUP:
 		return mouse(evt);
 
+	case Common::EVENT_RBUTTONDOWN:
+		return cancel(evt);
+
 	case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
 		if ((AsylumAction)evt.customType == kAsylumActionShowMenu) {
-			if (!isSpeaking()
-			 && _isDialogOpen
-			 && !getSpeech()->getTextData()
-			 && !getSpeech()->getTextDataPos())
-				_shouldCloseDialog = true;
+			return cancel(evt);
 		}
 		return true;
 	}
@@ -553,20 +547,20 @@ bool Encounter::mouse(const AsylumEvent &evt) {
 			_data_455BD8 = false;
 		}
 		break;
-
-
-	case Common::EVENT_RBUTTONDOWN:
-		if (!isSpeaking()
-		 && _isDialogOpen
-		 && !getSpeech()->getTextData()
-		 && !getSpeech()->getTextDataPos())
-			_shouldCloseDialog = true;
-		break;
 	}
 
 	return true;
 }
 
+bool Encounter::cancel(const AsylumEvent &evt) {
+	if (!isSpeaking()
+	 && _isDialogOpen
+	 && !getSpeech()->getTextData()
+	 && !getSpeech()->getTextDataPos())
+		_shouldCloseDialog = true;
+
+	return true;
+}
 //////////////////////////////////////////////////////////////////////////
 // Variables
 //////////////////////////////////////////////////////////////////////////
diff --git a/engines/asylum/resources/encounters.h b/engines/asylum/resources/encounters.h
index 57a030d7d32..070d6a5a425 100644
--- a/engines/asylum/resources/encounters.h
+++ b/engines/asylum/resources/encounters.h
@@ -212,8 +212,8 @@ private:
 	// Message handling
 	bool init();
 	bool update();
-	bool key(const AsylumEvent &evt) { return true; }
 	bool mouse(const AsylumEvent &evt);
+	bool cancel(const AsylumEvent &evt);
 
 	//////////////////////////////////////////////////////////////////////////
 	// Variables


Commit: a98eb7b3074e5d113efe6fff2db075735b78d1ab
    https://github.com/scummvm/scummvm/commit/a98eb7b3074e5d113efe6fff2db075735b78d1ab
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2024-06-26T10:28:09+03:00

Commit Message:
ASYLUM: Allow skipping cutscenes with any key or joystick button

Changed paths:
    engines/asylum/asylum.cpp
    engines/asylum/views/insertdisc.cpp
    engines/asylum/views/video.cpp


diff --git a/engines/asylum/asylum.cpp b/engines/asylum/asylum.cpp
index 7dcf7b9627d..36bc05d28be 100644
--- a/engines/asylum/asylum.cpp
+++ b/engines/asylum/asylum.cpp
@@ -366,6 +366,8 @@ void AsylumEngine::playIntro() {
 					switch (ev.type) {
 					case Common::EVENT_LBUTTONDOWN:
 					case Common::EVENT_KEYDOWN:
+					case Common::EVENT_JOYBUTTON_DOWN:
+					case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
 						skip = true;
 						break;
 					default:
@@ -409,29 +411,16 @@ void AsylumEngine::handleEvents() {
 
 		case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
 		case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
-			// Handle custom actions
-			if (_handler)
-				_handler->handleEvent(ev);
-			break;
-
+		case Common::EVENT_JOYBUTTON_DOWN:
+		case Common::EVENT_JOYBUTTON_UP:
 		case Common::EVENT_KEYDOWN:
-			// Handle key events
-			if (_handler)
-				_handler->handleEvent(ev);
-			break;
-
 		case Common::EVENT_KEYUP:
-			// Handle key events
-			if (_handler)
-				_handler->handleEvent(ev);
-			break;
-
 		case Common::EVENT_MOUSEMOVE:
 		case Common::EVENT_LBUTTONDOWN:
 		case Common::EVENT_LBUTTONUP:
 		case Common::EVENT_RBUTTONDOWN:
 		case Common::EVENT_RBUTTONUP:
-			// Handle mouse events
+			// Handle events
 			if (_handler)
 				_handler->handleEvent(ev);
 			break;
diff --git a/engines/asylum/views/insertdisc.cpp b/engines/asylum/views/insertdisc.cpp
index 4a3a520f99f..7ddcd0ca4ab 100644
--- a/engines/asylum/views/insertdisc.cpp
+++ b/engines/asylum/views/insertdisc.cpp
@@ -68,7 +68,10 @@ bool InsertDisc::handleEvent(const AsylumEvent &evt) {
 		update();
 		return true;
 
+	case Common::EVENT_LBUTTONDOWN:
 	case Common::EVENT_KEYDOWN:
+	case Common::EVENT_JOYBUTTON_DOWN:
+	case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
 		_vm->switchEventHandler(_handler);
 		return true;
 	}
diff --git a/engines/asylum/views/video.cpp b/engines/asylum/views/video.cpp
index f44e9264702..013c71dd026 100644
--- a/engines/asylum/views/video.cpp
+++ b/engines/asylum/views/video.cpp
@@ -124,6 +124,7 @@ bool VideoPlayer::handleEvent(const AsylumEvent &evt) {
 
 	case Common::EVENT_LBUTTONDOWN:
 	case Common::EVENT_KEYDOWN:
+	case Common::EVENT_JOYBUTTON_DOWN:
 	case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
 		_done = true;
 		if (!_vm->checkGameVersion("Steam") && !_vm->isAltDemo())




More information about the Scummvm-git-logs mailing list