[Scummvm-git-logs] scummvm master -> 436d9475ca015660b02fedd4cdc0a60516c82394

sev- noreply at scummvm.org
Mon Jul 21 11:00:24 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:
436d9475ca ACCESS: Add keymapper support


Commit: 436d9475ca015660b02fedd4cdc0a60516c82394
    https://github.com/scummvm/scummvm/commit/436d9475ca015660b02fedd4cdc0a60516c82394
Author: aunnoman1 (aunnoman123 at outlook.com)
Date: 2025-07-21T13:00:20+02:00

Commit Message:
ACCESS: Add keymapper support

Changed paths:
    engines/access/POTFILES
    engines/access/access.cpp
    engines/access/access.h
    engines/access/amazon/amazon_game.cpp
    engines/access/amazon/amazon_logic.cpp
    engines/access/events.cpp
    engines/access/events.h
    engines/access/martian/martian_game.cpp
    engines/access/martian/martian_scripts.cpp
    engines/access/metaengine.cpp
    engines/access/room.cpp
    engines/access/scripts.cpp
    engines/access/video/movie_decoder.cpp


diff --git a/engines/access/POTFILES b/engines/access/POTFILES
index eafbe170562..0d4bab60d67 100644
--- a/engines/access/POTFILES
+++ b/engines/access/POTFILES
@@ -1 +1,2 @@
+engines/access/metaengine.cpp
 engines/access/resources.cpp
diff --git a/engines/access/access.cpp b/engines/access/access.cpp
index 91fc70b5591..4bed05808b3 100644
--- a/engines/access/access.cpp
+++ b/engines/access/access.cpp
@@ -249,7 +249,7 @@ void AccessEngine::speakText(BaseSurface *s, const Common::String &msg) {
 
 	while (!shouldQuit()) {
 		soundsLeft = _countTbl[curPage];
-		_events->zeroKeys();
+		_events->zeroKeysActions();
 
 		int width = 0;
 		bool lastLine = _fonts._font2->getLine(lines, s->_maxChars * 6, line, width);
@@ -275,7 +275,7 @@ void AccessEngine::speakText(BaseSurface *s, const Common::String &msg) {
 
 				_scripts->cmdFreeSound();
 
-				if (_events->isKeyMousePressed()) {
+				if (_events->isKeyActionMousePressed()) {
 					_sndSubFile += soundsLeft;
 					break;
 				} else {
@@ -312,7 +312,7 @@ void AccessEngine::speakText(BaseSurface *s, const Common::String &msg) {
 			_events->debounceLeft();
 			_sndSubFile += soundsLeft;
 			break;
-		} else if (_events->isKeyPending()) {
+		} else if (_events->isKeyActionPending()) {
 			_sndSubFile += soundsLeft;
 			break;
 		} else {
@@ -340,7 +340,7 @@ void AccessEngine::printText(BaseSurface *s, const Common::String &msg) {
 		s->_printOrg = Common::Point(s->_printStart.x, s->_printOrg.y + 9);
 
 		if (s->_printOrg.y >_printEnd && !lastLine) {
-			_events->waitKeyMouse();
+			_events->waitKeyActionMouse();
 			s->copyBuffer(&_buffer2);
 			s->_printOrg.y = s->_printStart.y;
 		}
@@ -348,7 +348,7 @@ void AccessEngine::printText(BaseSurface *s, const Common::String &msg) {
 		if (lastLine)
 			break;
 	}
-	_events->waitKeyMouse();
+	_events->waitKeyActionMouse();
 }
 
 
diff --git a/engines/access/access.h b/engines/access/access.h
index 96d79c77eec..4d353a62516 100644
--- a/engines/access/access.h
+++ b/engines/access/access.h
@@ -68,6 +68,43 @@ enum AccessDebugChannels {
 	kDebugSound,
 };
 
+enum ACCESSActions {
+	kActionNone,
+	kActionMoveUp,
+	kActionMoveDown,
+	kActionMoveLeft,
+	kActionMoveRight,
+	kActionMoveUpLeft,
+	kActionMoveUpRight,
+	kActionMoveDownLeft,
+	kActionMoveDownRight,
+	kActionLook,
+	kActionUse,
+	kActionTake,
+	kActionInventory,
+	kActionClimb,
+	kActionTalk,
+	kActionWalk,
+	kActionHelp,
+	kActionSkip,
+};
+
+struct AccessActionCode {
+	ACCESSActions _action;
+	int8 _code;
+};
+
+static const AccessActionCode _accessActionCodes[] = {
+	{ kActionLook, 1 },
+	{ kActionUse, 2 },
+	{ kActionTake, 3 },
+	{ kActionInventory, 4 },
+	{ kActionClimb, 5 },
+	{ kActionTalk, 6 },
+	{ kActionWalk, 7 },
+	{ kActionHelp, 8 },
+};
+
 extern const char *const _estTable[];
 
 #define ACCESS_SAVEGAME_VERSION 1
diff --git a/engines/access/amazon/amazon_game.cpp b/engines/access/amazon/amazon_game.cpp
index e7c7d69e21e..419fbf05935 100644
--- a/engines/access/amazon/amazon_game.cpp
+++ b/engines/access/amazon/amazon_game.cpp
@@ -524,7 +524,7 @@ void AmazonEngine::startChapter(int chapter) {
 			return;
 
 		_events->debounceLeft();
-		_events->zeroKeys();
+		_events->zeroKeysActions();
 		playVideo(_chapter, Common::Point(4, 113));
 		if (shouldQuit())
 			return;
@@ -544,14 +544,14 @@ void AmazonEngine::startChapter(int chapter) {
 		}
 
 		// Wait loop
-		while (!shouldQuit() && !_events->isKeyMousePressed() && _timers[20]._flag) {
+		while (!shouldQuit() && !_events->isKeyActionMousePressed() && _timers[20]._flag) {
 			_events->pollEventsAndWait();
 		}
 	}
 
 	_screen->forceFadeOut();
 	_events->debounceLeft();
-	_events->zeroKeys();
+	_events->zeroKeysActions();
 	_screen->clearScreen();
 
 	_screen->setPanel(3);
@@ -584,7 +584,7 @@ void AmazonEngine::startChapter(int chapter) {
 	_timers[20]._flag++;
 
 	// Wait loop
-	while (!shouldQuit() && !_events->isKeyMousePressed() && _timers[20]._flag) {
+	while (!shouldQuit() && !_events->isKeyActionMousePressed() && _timers[20]._flag) {
 		_events->pollEventsAndWait();
 	}
 	if (shouldQuit())
@@ -592,7 +592,7 @@ void AmazonEngine::startChapter(int chapter) {
 
 	_screen->forceFadeOut();
 	_events->debounceLeft();
-	_events->zeroKeys();
+	_events->zeroKeysActions();
 
 	_screen->clearBuffer();
 	_files->loadScreen(96, 16);
@@ -676,7 +676,7 @@ void AmazonEngine::dead(int deathId) {
 	_screen->forceFadeOut();
 	_scripts->cmdFreeSound();
 	_events->debounceLeft();
-	_events->zeroKeys();
+	_events->zeroKeysActions();
 
 	_sound->_soundTable.push_back(SoundEntry(_files->loadFile(98, 44), 1));
 
diff --git a/engines/access/amazon/amazon_logic.cpp b/engines/access/amazon/amazon_logic.cpp
index 5588b0c55ea..6ddaaaabbc3 100644
--- a/engines/access/amazon/amazon_logic.cpp
+++ b/engines/access/amazon/amazon_logic.cpp
@@ -158,7 +158,7 @@ void CampScene::mWhileDoOpen() {
 
 		events.pollEventsAndWait();
 
-		if (_vm->_events->isKeyMousePressed()) {
+		if (_vm->_events->isKeyActionMousePressed()) {
 			_skipStart = true;
 			_vm->_midi->newMusic(10, 1);
 			break;
@@ -167,7 +167,7 @@ void CampScene::mWhileDoOpen() {
 		if (_xCam > 680) {
 			events._vbCount = 125;
 
-			while (!_vm->shouldQuit() && !events.isKeyMousePressed() && events._vbCount > 0) {
+			while (!_vm->shouldQuit() && !events.isKeyActionMousePressed() && events._vbCount > 0) {
 				events.pollEventsAndWait();
 			}
 			break;
@@ -385,7 +385,7 @@ void Opening::doTitle() {
 		screen.forceFadeIn();
 		_vm->_midi->newMusic(1, 0);
 		_vm->_events->_vbCount = 950;
-		while (!_vm->shouldQuit() && (_vm->_events->_vbCount > 0) && !_vm->_events->isKeyMousePressed()) {
+		while (!_vm->shouldQuit() && (_vm->_events->_vbCount > 0) && !_vm->_events->isKeyActionMousePressed()) {
 			_vm->_events->pollEventsAndWait();
 		}
 
@@ -398,7 +398,7 @@ void Opening::doTitle() {
 
 		_vm->_midi->newMusic(1, 1);
 		_vm->_midi->setLoop(false);
-		_vm->_events->zeroKeys();
+		_vm->_events->zeroKeysActions();
 	}
 
 	_vm->_buffer1.create(_vm->_screen->w + TILE_WIDTH, _vm->_screen->h);
@@ -419,7 +419,7 @@ void Opening::doTitle() {
 	_pCount = 0;
 
 	while (!_vm->shouldQuit()) {
-		if (_vm->_events->isKeyMousePressed()) {
+		if (_vm->_events->isKeyActionMousePressed()) {
 			if (_vm->_events->_rightButton)
 				_skipStart = true;
 			_vm->_room->clearRoom();
@@ -678,7 +678,7 @@ void Plane::mWhileFly() {
 	_xCount = 0;
 	_position = Common::Point(20, 29);
 
-	while (!_vm->shouldQuit() && !events.isKeyMousePressed() &&
+	while (!_vm->shouldQuit() && !events.isKeyActionMousePressed() &&
 		((_vm->_scrollCol + screen._vWindowWidth) != _vm->_room->_playFieldWidth)) {
 		events._vbCount = 4;
 		_vm->_scrollX += player._scrollAmount;
@@ -728,7 +728,7 @@ void Plane::mWhileFall() {
 	_xCount = 0;
 	_planeCount = 0;
 
-	while (!_vm->shouldQuit() && !events.isKeyMousePressed() &&
+	while (!_vm->shouldQuit() && !events.isKeyActionMousePressed() &&
 		(_vm->_scrollCol + screen._vWindowWidth != _vm->_room->_playFieldWidth)) {
 		events._vbCount = 4;
 		_vm->_scrollX += _vm->_player->_scrollAmount;
@@ -901,7 +901,7 @@ void Jungle::mWhileJWalk() {
 		_pan[i]._pObjXl = _pan[i]._pObjYl = 0;
 	}
 
-	while (!_vm->shouldQuit() && !events.isKeyMousePressed() && (player._xFlag != 2)) {
+	while (!_vm->shouldQuit() && !events.isKeyActionMousePressed() && (player._xFlag != 2)) {
 		_vm->_images.clear();
 		events._vbCount = 6;
 
@@ -930,7 +930,7 @@ void Jungle::mWhileJWalk2() {
 
 	initJWalk2();
 
-	while (!_vm->shouldQuit() && !_vm->_events->isKeyMousePressed() &&
+	while (!_vm->shouldQuit() && !_vm->_events->isKeyActionMousePressed() &&
 		(_vm->_scrollCol + screen._vWindowWidth) != _vm->_room->_playFieldWidth) {
 		_vm->_images.clear();
 		_vm->_events->_vbCount = 6;
@@ -1330,10 +1330,10 @@ void Cast::doCast(int param1) {
 		_vm->copyBlocks();
 
 		for (int idx = 0; idx < 5 && !_vm->shouldQuit() &&
-				!_vm->_events->isKeyMousePressed(); ++idx)
+				!_vm->_events->isKeyActionMousePressed(); ++idx)
 			_vm->_events->pollEventsAndWait();
 
-		if (_vm->_events->isKeyMousePressed())
+		if (_vm->_events->isKeyActionMousePressed())
 			break;
 
 		if (_yCam < -7550) {
@@ -1792,7 +1792,7 @@ void River::mWhileDownRiver() {
 	_vm->_timers[4]._initTm = 350;
 	++_vm->_timers[4]._flag;
 
-	while (!_vm->shouldQuit() && !_vm->_events->isKeyMousePressed() &&
+	while (!_vm->shouldQuit() && !_vm->_events->isKeyActionMousePressed() &&
 		(_vm->_scrollCol + screen._vWindowWidth != _vm->_room->_playFieldWidth)) {
 		_vm->_images.clear();
 		_vm->_events->_vbCount = 6;
diff --git a/engines/access/events.cpp b/engines/access/events.cpp
index 323a78dbdb3..1e65ca51c6c 100644
--- a/engines/access/events.cpp
+++ b/engines/access/events.cpp
@@ -147,7 +147,12 @@ void EventsManager::pollEvents(bool skipTimers) {
 		case Common::EVENT_QUIT:
 		case Common::EVENT_RETURN_TO_LAUNCHER:
 			return;
-
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+			actionControl(event.customType, true);
+			return;
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+			actionControl(event.customType, false);
+			return;
 		case Common::EVENT_KEYDOWN:
 			// Check for debugger
 			keyControl(event.kbd.keycode, true);
@@ -202,34 +207,44 @@ void EventsManager::keyControl(Common::KeyCode keycode, bool isKeyDown) {
 	}
 
 	_keyCode = keycode;
+}
+
+void EventsManager::actionControl(Common::CustomEventType action, bool isKeyDown) {
+	Player &player = *_vm->_player;
+
+	if (!isKeyDown) {
+		if (player._move != NONE) {
+			_action = kActionNone;
+			player._move = NONE;
+		}
+		return;
+	}
+
+	_action = action;
 
-	switch (keycode) {
-	case Common::KEYCODE_UP:
-	case Common::KEYCODE_KP8:
+	switch (action) {
+	case kActionMoveUp:
 		player._move = UP;
 		break;
-	case Common::KEYCODE_DOWN:
-	case Common::KEYCODE_KP2:
+	case kActionMoveDown:
 		player._move = DOWN;
 		break;
-	case Common::KEYCODE_LEFT:
-	case Common::KEYCODE_KP4:
+	case kActionMoveLeft:
 		player._move = LEFT;
 		break;
-	case Common::KEYCODE_RIGHT:
-	case Common::KEYCODE_KP6:
+	case kActionMoveRight:
 		player._move = RIGHT;
 		break;
-	case Common::KEYCODE_KP7:
+	case kActionMoveUpLeft:
 		player._move = UPLEFT;
 		break;
-	case Common::KEYCODE_KP9:
+	case kActionMoveUpRight:
 		player._move = UPRIGHT;
 		break;
-	case Common::KEYCODE_KP1:
+	case kActionMoveDownLeft:
 		player._move = DOWNLEFT;
 		break;
-	case Common::KEYCODE_KP3:
+	case kActionMoveDownRight:
 		player._move = DOWNRIGHT;
 		break;
 	default:
@@ -281,22 +296,23 @@ void EventsManager::delay(int time) {
 	g_system->delayMillis(time);
 }
 
-void EventsManager::zeroKeys() {
+void EventsManager::zeroKeysActions() {
 	_keyCode = Common::KEYCODE_INVALID;
+	_action = kActionNone;
 }
 
-bool EventsManager::getKey(Common::KeyState &key) {
-	if (_keyCode == Common::KEYCODE_INVALID) {
+bool EventsManager::getAction(Common::CustomEventType &action) {
+	if (_action == kActionNone) {
 		return false;
 	} else {
-		key = _keyCode;
-		_keyCode = Common::KEYCODE_INVALID;
+		action = _action;
+		_action = kActionNone;
 		return true;
 	}
 }
 
-bool EventsManager::isKeyPending() const {
-	return _keyCode != Common::KEYCODE_INVALID;
+bool EventsManager::isKeyActionPending() const {
+	return (_keyCode != Common::KEYCODE_INVALID || _action != kActionNone);
 }
 
 void EventsManager::debounceLeft() {
@@ -307,11 +323,11 @@ void EventsManager::debounceLeft() {
 
 void EventsManager::clearEvents() {
 	_leftButton = _rightButton = false;
-	zeroKeys();
+	zeroKeysActions();
 }
 
-void EventsManager::waitKeyMouse() {
-	while (!_vm->shouldQuit() && !isKeyMousePressed()) {
+void EventsManager::waitKeyActionMouse() {
+	while (!_vm->shouldQuit() && !isKeyActionMousePressed()) {
 		pollEvents(true);
 		delay();
 	}
@@ -341,10 +357,10 @@ int EventsManager::checkMouseBox1(Common::Array<Common::Rect> &rects) {
 	return -1;
 }
 
-bool EventsManager::isKeyMousePressed() {
-	bool result = _leftButton || _rightButton || isKeyPending();
+bool EventsManager::isKeyActionMousePressed() {
+	bool result = _leftButton || _rightButton || isKeyActionPending();
 	debounceLeft();
-	zeroKeys();
+	zeroKeysActions();
 
 	return result;
 }
diff --git a/engines/access/events.h b/engines/access/events.h
index 75551de7fcd..0b31e32de7a 100644
--- a/engines/access/events.h
+++ b/engines/access/events.h
@@ -48,6 +48,7 @@ private:
 	uint32 _priorFrameTime;
 	uint32 _priorTimerTime;
 	Common::KeyCode _keyCode;
+	Common::CustomEventType _action;
 
 	Graphics::Surface _invCursor;
 	bool checkForNextFrameCounter();
@@ -55,6 +56,7 @@ private:
 	void nextFrame();
 	void nextTimer();
 	void keyControl(Common::KeyCode keycode, bool isKeyDown);
+	void actionControl(Common::CustomEventType action, bool isKeyDown);
 public:
 	CursorType _cursorId;
 	CursorType _normalMouse;
@@ -125,11 +127,11 @@ public:
 
 	void pollEventsAndWait();
 
-	void zeroKeys();
+	void zeroKeysActions();
 
-	bool getKey(Common::KeyState &key);
+	bool getAction(Common::CustomEventType &action);
 
-	bool isKeyPending() const;
+	bool isKeyActionPending() const;
 
 	void delay(int time = 5);
 
@@ -137,7 +139,7 @@ public:
 
 	void clearEvents();
 
-	void waitKeyMouse();
+	void waitKeyActionMouse();
 
 	Common::Point &getMousePos() { return _mousePos; }
 
@@ -145,7 +147,7 @@ public:
 
 	int checkMouseBox1(Common::Array<Common::Rect> &rects);
 
-	bool isKeyMousePressed();
+	bool isKeyActionMousePressed();
 
 	void centerMousePos();
 	void restrictMouse();
diff --git a/engines/access/martian/martian_game.cpp b/engines/access/martian/martian_game.cpp
index 741141d4662..59d20b3b73c 100644
--- a/engines/access/martian/martian_game.cpp
+++ b/engines/access/martian/martian_game.cpp
@@ -123,12 +123,12 @@ void MartianEngine::displayNote(const Common::String &msg) {
 		_screen->_printOrg = Common::Point(_screen->_printStart.x, _screen->_printOrg.y + 6);
 
 		if (_screen->_printOrg.y == 196) {
-			_events->waitKeyMouse();
+			_events->waitKeyActionMouse();
 			setNoteParams();
 			_screen->_printOrg = _screen->_printStart;
 		}
 	} while (!lastLine);
-	_events->waitKeyMouse();
+	_events->waitKeyActionMouse();
 }
 
 void MartianEngine::doSpecial5(int param1) {
@@ -236,7 +236,7 @@ bool MartianEngine::showCredits() {
 	_screen->forceFadeIn();
 	_timers[3]._timer = _timers[3]._initTm = posY;
 
-	while (!shouldQuit() && !_events->isKeyMousePressed() && _timers[3]._timer) {
+	while (!shouldQuit() && !_events->isKeyActionMousePressed() && _timers[3]._timer) {
 		_events->pollEventsAndWait();
 	}
 
@@ -271,11 +271,11 @@ void MartianEngine::doCredits() {
 		_screen->forceFadeIn();
 
 		_events->_vbCount = 550;
-		while (!shouldQuit() && !_events->isKeyMousePressed() && _events->_vbCount > 0)
+		while (!shouldQuit() && !_events->isKeyActionMousePressed() && _events->_vbCount > 0)
 			_events->pollEventsAndWait();
 
 		_screen->forceFadeOut();
-		while (!shouldQuit() && !_events->isKeyMousePressed()&& !showCredits())
+		while (!shouldQuit() && !_events->isKeyActionMousePressed()&& !showCredits())
 			_events->pollEventsAndWait();
 
 		warning("TODO: Free word_21E2B");
@@ -324,12 +324,12 @@ void MartianEngine::showDeathText(Common::String msg) {
 		_screen->_printOrg.x = _screen->_printStart.x;
 
 		if (_screen->_printOrg.y == 180) {
-			_events->waitKeyMouse();
+			_events->waitKeyActionMouse();
 			_screen->copyBuffer(&_buffer2);
 			_screen->_printOrg.y = _screen->_printStart.y;
 		}
 	} while (!lastLine);
-	_events->waitKeyMouse();
+	_events->waitKeyActionMouse();
 }
 
 void MartianEngine::dead(int deathId) {
diff --git a/engines/access/martian/martian_scripts.cpp b/engines/access/martian/martian_scripts.cpp
index 1ecc44f47db..97e92a4a135 100644
--- a/engines/access/martian/martian_scripts.cpp
+++ b/engines/access/martian/martian_scripts.cpp
@@ -289,7 +289,7 @@ void MartianScripts::cmdSpecial7() {
 	_vm->_events->showCursor();
 	_vm->_screen->forceFadeIn();
 
-	_vm->_events->waitKeyMouse();
+	_vm->_events->waitKeyActionMouse();
 	_vm->_midi->stopSong();
 	_vm->_midi->freeMusic();
 
diff --git a/engines/access/metaengine.cpp b/engines/access/metaengine.cpp
index e03a5a9fd27..a3f4fdbcd25 100644
--- a/engines/access/metaengine.cpp
+++ b/engines/access/metaengine.cpp
@@ -33,6 +33,12 @@
 
 #include "access/detection.h"
 
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
+#include "common/translation.h"
+
 #define MAX_SAVES 99
 
 namespace Access {
@@ -81,6 +87,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 AccessMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -178,6 +185,124 @@ SaveStateDescriptor AccessMetaEngine::querySaveMetaInfos(const char *target, int
 	return SaveStateDescriptor();
 }
 
+Common::KeymapArray AccessMetaEngine::initKeymaps(const char *target) const {
+	using namespace Common;
+	using namespace Access;
+
+	Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "access-default", _("Default keymappings"));
+
+	Action *act;
+
+	act = new Action(kStandardActionLeftClick, _("Move / Interact / Skip"));
+	act->setLeftClickEvent();
+	act->addDefaultInputMapping("MOUSE_LEFT");
+	act->addDefaultInputMapping("JOY_A");
+	engineKeyMap->addAction(act);
+
+	act = new Action(kStandardActionRightClick, _("Skip"));
+	act->setRightClickEvent();
+	act->addDefaultInputMapping("MOUSE_RIGHT");
+	act->addDefaultInputMapping("JOY_B");
+	engineKeyMap->addAction(act);
+
+	act = new Action("SKIP", _("Skip movie"));
+	act->setCustomEngineActionEvent(kActionSkip);
+	act->addDefaultInputMapping("ESCAPE");
+	act->addDefaultInputMapping("JOY_X");
+	engineKeyMap->addAction(act);
+
+	act = new Action("UP", _("Move up"));
+	act->setCustomEngineActionEvent(kActionMoveUp);
+	act->addDefaultInputMapping("UP");
+	act->addDefaultInputMapping("KP8");
+	act->addDefaultInputMapping("JOY_UP");
+	engineKeyMap->addAction(act);
+
+	act = new Action("DOWN", _("Move down"));
+	act->setCustomEngineActionEvent(kActionMoveDown);
+	act->addDefaultInputMapping("DOWN");
+	act->addDefaultInputMapping("KP2");
+	act->addDefaultInputMapping("JOY_DOWN");
+	engineKeyMap->addAction(act);
+
+	act = new Action("LEFT", _("Move left"));
+	act->setCustomEngineActionEvent(kActionMoveLeft);
+	act->addDefaultInputMapping("LEFT");
+	act->addDefaultInputMapping("KP4");
+	act->addDefaultInputMapping("JOY_LEFT");
+	engineKeyMap->addAction(act);
+
+	act = new Action("RIGHT", _("Move right"));
+	act->setCustomEngineActionEvent(kActionMoveRight);
+	act->addDefaultInputMapping("RIGHT");
+	act->addDefaultInputMapping("KP6");
+	act->addDefaultInputMapping("JOY_RIGHT");
+	engineKeyMap->addAction(act);
+
+	act = new Action("UPLEFT", _("Move up-left"));
+	act->setCustomEngineActionEvent(kActionMoveUpLeft);
+	act->addDefaultInputMapping("KP7");
+	engineKeyMap->addAction(act);
+
+	act = new Action("UPRIGHT", _("Move up-right"));
+	act->setCustomEngineActionEvent(kActionMoveUpRight);
+	act->addDefaultInputMapping("KP9");
+	engineKeyMap->addAction(act);
+
+	act = new Action("DOWNLEFT", _("Move down-left"));
+	act->setCustomEngineActionEvent(kActionMoveDownLeft);
+	act->addDefaultInputMapping("KP1");
+	engineKeyMap->addAction(act);
+
+	act = new Action("DOWNRIGHT", _("Move down-right"));
+	act->setCustomEngineActionEvent(kActionMoveDownRight);
+	act->addDefaultInputMapping("KP3");
+	engineKeyMap->addAction(act);
+
+	act = new Action("LOOK", _("Look"));
+	act->setCustomEngineActionEvent(kActionLook);
+	act->addDefaultInputMapping("F1");
+	act->addDefaultInputMapping("F2");
+	engineKeyMap->addAction(act);
+
+	act = new Action("USE", _("Use"));
+	act->setCustomEngineActionEvent(kActionUse);
+	act->addDefaultInputMapping("F3");
+	engineKeyMap->addAction(act);
+
+	act = new Action("TAKE", _("Take"));
+	act->setCustomEngineActionEvent(kActionTake);
+	act->addDefaultInputMapping("F4");
+	engineKeyMap->addAction(act);
+
+	act = new Action("INVENTORY", _("Inventory"));
+	act->setCustomEngineActionEvent(kActionInventory);
+	act->addDefaultInputMapping("F5");
+	engineKeyMap->addAction(act);
+
+	act = new Action("CLIMB", _("Climb"));
+	act->setCustomEngineActionEvent(kActionClimb);
+	act->addDefaultInputMapping("F6");
+	engineKeyMap->addAction(act);
+
+	act = new Action("TALK", _("Talk"));
+	act->setCustomEngineActionEvent(kActionTalk);
+	act->addDefaultInputMapping("F7");
+	engineKeyMap->addAction(act);
+
+	act = new Action("WALK", _("Walk"));
+	act->setCustomEngineActionEvent(kActionWalk);
+	act->addDefaultInputMapping("F8");
+	engineKeyMap->addAction(act);
+
+	act = new Action("HELP", _("Help"));
+	act->setCustomEngineActionEvent(kActionHelp);
+	act->addDefaultInputMapping("F9");
+	engineKeyMap->addAction(act);
+
+	return Keymap::arrayOf(engineKeyMap);
+}
+
 #if PLUGIN_ENABLED_DYNAMIC(ACCESS)
 	REGISTER_PLUGIN_DYNAMIC(ACCESS, PLUGIN_TYPE_ENGINE, AccessMetaEngine);
 #else
diff --git a/engines/access/room.cpp b/engines/access/room.cpp
index 446dda24f84..e67edf4cbab 100644
--- a/engines/access/room.cpp
+++ b/engines/access/room.cpp
@@ -540,7 +540,7 @@ void Plotter::load(Common::SeekableReadStream *stream, int wallCount, int blockC
 
 void Room::doCommands() {
 	int commandId = 0;
-	Common::KeyState keyState;
+	Common::CustomEventType action;
 
 	if (_vm->_startup != -1)
 		return;
@@ -576,11 +576,13 @@ void Room::doCommands() {
 			// Mouse click in main game area
 			mainAreaClick();
 		}
-	} else if (_vm->_events->getKey(keyState)) {
-		if (keyState.keycode == Common::KEYCODE_F1)
-			handleCommand(keyState.keycode - Common::KEYCODE_F1 + 1);
-		else if (keyState.keycode >= Common::KEYCODE_F2 && keyState.keycode <= Common::KEYCODE_F10)
-			handleCommand(keyState.keycode - Common::KEYCODE_F1);
+	} else if (_vm->_events->getAction(action)) {
+		for (int i = 0; i < ARRAYSIZE(_accessActionCodes); ++i) {
+			if (_accessActionCodes[i]._action == action) {
+				handleCommand(_accessActionCodes[i]._code);
+				break;
+			}
+		}
 	}
 }
 
diff --git a/engines/access/scripts.cpp b/engines/access/scripts.cpp
index 3cbae90c8ee..75d86c4dc7b 100644
--- a/engines/access/scripts.cpp
+++ b/engines/access/scripts.cpp
@@ -211,12 +211,12 @@ void Scripts::printWatch() {
 		_vm->_screen->_printOrg.x = _vm->_screen->_printStart.x;
 
 		if (_vm->_screen->_printOrg.y == 106) {
-			_vm->_events->waitKeyMouse();
+			_vm->_events->waitKeyActionMouse();
 			clearWatch();
 			_vm->_screen->_printOrg.y = _vm->_screen->_printStart.y;
 		}
 	} while (!lastLine);
-	_vm->_events->waitKeyMouse();
+	_vm->_events->waitKeyActionMouse();
 }
 
 void Scripts::findNull() {
@@ -314,7 +314,7 @@ void Scripts::doCmdPrint_v1(Common::String msg) {
 	_vm->_screen->_printOrg = Common::Point(20, 42);
 	_vm->_screen->_printStart = Common::Point(20, 32);
 	_vm->_bubbleBox->placeBubble(msg);
-	_vm->_events->waitKeyMouse();
+	_vm->_events->waitKeyActionMouse();
 	_vm->_events->hideCursor();
 	_vm->_screen->restoreBlock();
 	_vm->_events->showCursor();
@@ -337,7 +337,7 @@ void Scripts::printString(const Common::String &msg) {
 
 	// Display the text in a bubble, and wait for a keypress or mouse click
 	_vm->_bubbleBox->placeBubble(msg);
-	_vm->_events->waitKeyMouse();
+	_vm->_events->waitKeyActionMouse();
 
 	// Wait until the bubble display is expired
 	while (!_vm->shouldQuit() && _vm->_timers[PRINT_TIMER]._flag) {
@@ -558,7 +558,7 @@ void Scripts::cmdSetTimer() {
 	_vm->_timers[idx]._initTm = val;
 
 	_vm->_events->debounceLeft();
-	_vm->_events->zeroKeys();
+	_vm->_events->zeroKeysActions();
 }
 
 void Scripts::cmdCheckTimer() {
@@ -574,8 +574,8 @@ void Scripts::cmdCheckTimer() {
 	if (_endFlag)
 		return;
 
-	if ((idx == 9) && _vm->_events->isKeyPending()) {
-		_vm->_events->zeroKeys();
+	if ((idx == 9) && _vm->_events->isKeyActionPending()) {
+		_vm->_events->zeroKeysActions();
 		_vm->_timers[9]._timer = 0;
 		_vm->_timers[9]._flag = 0;
 	}
@@ -938,9 +938,9 @@ void Scripts::cmdWait() {
 	_vm->_timers[3]._timer = time;
 	_vm->_timers[3]._initTm = time;
 	_vm->_timers[3]._flag++;
-	_vm->_events->zeroKeys();
+	_vm->_events->zeroKeysActions();
 
-	while (!_vm->shouldQuit() && !_vm->_events->isKeyMousePressed() &&
+	while (!_vm->shouldQuit() && !_vm->_events->isKeyActionMousePressed() &&
 			_vm->_timers[3]._flag) {
 		_vm->_midi->midiRepeat();
 		charLoop();
@@ -949,7 +949,7 @@ void Scripts::cmdWait() {
 	}
 
 	_vm->_events->debounceLeft();
-	_vm->_events->zeroKeys();
+	_vm->_events->zeroKeysActions();
 }
 
 void Scripts::cmdSetConPos() {
diff --git a/engines/access/video/movie_decoder.cpp b/engines/access/video/movie_decoder.cpp
index a64b0559c9a..a9e470cad70 100644
--- a/engines/access/video/movie_decoder.cpp
+++ b/engines/access/video/movie_decoder.cpp
@@ -725,9 +725,9 @@ bool AccessEngine::playMovie(const Common::Path &filename, const Common::Point &
 
 		_events->pollEventsAndWait();
 
-		Common::KeyState keyState;
-		if (_events->getKey(keyState)) {
-			if (keyState.keycode == Common::KEYCODE_ESCAPE)
+		Common::CustomEventType action;
+		if (_events->getAction(action)) {
+			if (action == kActionSkip)
 				skipVideo = true;
 		}
 	}




More information about the Scummvm-git-logs mailing list