[Scummvm-git-logs] scummvm master -> 812b82e4b3ddb6ff8fb7217b07569a24b69f2294

bluegr noreply at scummvm.org
Thu Oct 31 06:52:18 UTC 2024


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

Summary:
812b82e4b3 TSAGE: Add keymapper support


Commit: 812b82e4b3ddb6ff8fb7217b07569a24b69f2294
    https://github.com/scummvm/scummvm/commit/812b82e4b3ddb6ff8fb7217b07569a24b69f2294
Author: NabeelShabbir (128056426+NabeelShabbir at users.noreply.github.com)
Date: 2024-10-31T08:52:14+02:00

Commit Message:
TSAGE: Add keymapper support

Changed paths:
    engines/tsage/blue_force/blueforce_dialogs.cpp
    engines/tsage/blue_force/blueforce_logic.cpp
    engines/tsage/blue_force/blueforce_scenes1.cpp
    engines/tsage/converse.cpp
    engines/tsage/core.cpp
    engines/tsage/events.cpp
    engines/tsage/events.h
    engines/tsage/graphics.cpp
    engines/tsage/metaengine.cpp
    engines/tsage/ringworld/ringworld_demo.cpp
    engines/tsage/ringworld/ringworld_dialogs.cpp
    engines/tsage/ringworld/ringworld_logic.cpp
    engines/tsage/ringworld/ringworld_scenes1.cpp
    engines/tsage/ringworld/ringworld_scenes5.cpp
    engines/tsage/ringworld2/ringworld2_airduct.cpp
    engines/tsage/ringworld2/ringworld2_airduct.h
    engines/tsage/ringworld2/ringworld2_dialogs.cpp
    engines/tsage/ringworld2/ringworld2_logic.cpp
    engines/tsage/ringworld2/ringworld2_outpost.cpp
    engines/tsage/ringworld2/ringworld2_scenes0.cpp
    engines/tsage/ringworld2/ringworld2_scenes1.cpp
    engines/tsage/ringworld2/ringworld2_scenes3.cpp
    engines/tsage/tsage.h


diff --git a/engines/tsage/blue_force/blueforce_dialogs.cpp b/engines/tsage/blue_force/blueforce_dialogs.cpp
index e1f28e3bc22..8d4c3ae6ce2 100644
--- a/engines/tsage/blue_force/blueforce_dialogs.cpp
+++ b/engines/tsage/blue_force/blueforce_dialogs.cpp
@@ -299,12 +299,17 @@ bool AmmoBeltDialog::process(Event &event) {
 
 		return true;
 
-	case EVENT_KEYPRESS:
-		if ((event.kbd.keycode == Common::KEYCODE_ESCAPE) || (event.kbd.keycode == Common::KEYCODE_RETURN)) {
+	case EVENT_CUSTOM_ACTIONSTART:
+		if (event.customType == kActionEscape) {
 			// Escape pressed, so flag to close dialog
 			_closeFlag = true;
 			return true;
 		}
+		if (event.customType == kActionReturn) {
+			// Return pressed, so flag to close dialog
+			_closeFlag = true;
+			return true;
+		}
 		break;
 
 	default:
diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp
index 04d3b57b17e..88c870d65d4 100644
--- a/engines/tsage/blue_force/blueforce_logic.cpp
+++ b/engines/tsage/blue_force/blueforce_logic.cpp
@@ -291,9 +291,9 @@ void BlueForceGame::rightClick() {
 }
 
 void BlueForceGame::processEvent(Event &event) {
-	if (event.eventType == EVENT_KEYPRESS) {
-		switch (event.kbd.keycode) {
-		case Common::KEYCODE_F1:
+	if (event.eventType == EVENT_CUSTOM_ACTIONSTART) {
+		switch (event.customType) {
+		case kActionHelp:
 			// F1 - Help
 			int tmp;
 			tmp = BF_GLOBALS._dialogCenter.y;
@@ -306,30 +306,30 @@ void BlueForceGame::processEvent(Event &event) {
 			BF_GLOBALS._dialogCenter.y = tmp;
 			break;
 
-		case Common::KEYCODE_F2:
+		case kActionSoundOptions:
 			// F2 - Sound Options
 			SoundDialog::execute();
 			break;
 
-		case Common::KEYCODE_F3:
+		case kActionQuitGame:
 			// F3 - Quit
 			quitGame();
 			event.handled = false;
 			break;
 
-		case Common::KEYCODE_F4:
+		case kActionRestartGame:
 			// F4 - Restart
 			restartGame();
 			g_globals->_events.setCursorFromFlag();
 			break;
 
-		case Common::KEYCODE_F7:
+		case kActionRestoreGame:
 			// F7 - Restore
 			restoreGame();
 			g_globals->_events.setCursorFromFlag();
 			break;
 
-		case Common::KEYCODE_F10:
+		case kActionPauseGame:
 			// F10 - Pause
 			GfxDialog::setPalette();
 			if (g_vm->getLanguage() == Common::ES_ESP) {
@@ -1421,7 +1421,7 @@ void SceneMessage::signal() {
 
 void SceneMessage::process(Event &event) {
 	if ((event.eventType == EVENT_BUTTON_DOWN) ||
-		((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_RETURN))) {
+		((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionReturn))) {
 		signal();
 	}
 }
diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp
index 7951cd6995d..02143f6df59 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes1.cpp
@@ -2666,7 +2666,8 @@ void Scene160::Action2::signal() {
 }
 
 void Scene160::Action2::process(Event &event) {
-	if ((event.handled) || ((event.eventType != EVENT_BUTTON_DOWN) && (event.eventType != EVENT_KEYPRESS)))
+	if ((event.handled) || ((event.eventType != EVENT_BUTTON_DOWN)
+			&& (event.eventType != EVENT_KEYPRESS || event.eventType != EVENT_CUSTOM_ACTIONSTART)))
 		return;
 
 	if (_actionIndex == 25) {
diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp
index 684bdf753f6..59e60101e20 100644
--- a/engines/tsage/converse.cpp
+++ b/engines/tsage/converse.cpp
@@ -320,7 +320,7 @@ void SequenceManager::signal() {
 }
 
 void SequenceManager::process(Event &event) {
-	if (((event.eventType == EVENT_BUTTON_DOWN) || (event.eventType == EVENT_KEYPRESS)) &&
+	if (((event.eventType == EVENT_BUTTON_DOWN) || (event.eventType == EVENT_KEYPRESS) || (event.eventType == EVENT_CUSTOM_ACTIONSTART)) &&
 		!event.handled && g_globals->_sceneObjects->contains(&_sceneText)) {
 		// Remove the text item
 		_sceneText.remove();
@@ -465,7 +465,7 @@ int ConversationChoiceDialog::execute(const Common::StringArray &choiceList) {
 	// Event handling loop
 	Event event;
 	while (!g_vm->shouldQuit()) {
-		while (!g_globals->_events.getEvent(event, EVENT_KEYPRESS | EVENT_BUTTON_DOWN | EVENT_MOUSE_MOVE) &&
+		while (!g_globals->_events.getEvent(event, EVENT_CUSTOM_ACTIONSTART | EVENT_KEYPRESS | EVENT_BUTTON_DOWN | EVENT_MOUSE_MOVE) &&
 				!g_vm->shouldQuit()) {
 			g_system->delayMillis(10);
 			GLOBALS._screen.update();
@@ -994,7 +994,7 @@ void StripManager::process(Event &event) {
 	if (event.handled)
 		return;
 
-	if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) {
+	if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionEscape)) {
 		if (_obj44ListIndex != 10000) {
 			int currIndex = _obj44ListIndex;
 			while (!_obj44List[_obj44ListIndex]._list[1]._id) {
@@ -1011,7 +1011,7 @@ void StripManager::process(Event &event) {
 		_delayFrames = 0;
 		event.handled = true;
 		signal();
-	} else if (event.eventType & (EVENT_BUTTON_DOWN | EVENT_KEYPRESS)) {
+	} else if (event.eventType & (EVENT_BUTTON_DOWN | EVENT_KEYPRESS | EVENT_CUSTOM_ACTIONSTART)) {
 		// Move to next sequence in the strip
 		_delayFrames = 0;
 		event.handled = true;
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 51a09684ceb..e3d3699598b 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -1834,7 +1834,7 @@ void SceneItem::display(int resNum, int lineNum, ...) {
 
 		// Keep event on-screen until a mouse or keypress
 		while (!g_vm->shouldQuit() && !g_globals->_events.getEvent(event,
-				EVENT_BUTTON_DOWN | EVENT_KEYPRESS)) {
+				EVENT_BUTTON_DOWN | EVENT_KEYPRESS | EVENT_CUSTOM_ACTIONSTART)) {
 			GLOBALS._screen.update();
 			g_system->delayMillis(10);
 
@@ -4419,7 +4419,7 @@ void SceneHandler::process(Event &event) {
 	if (!event.handled) {
 		g_globals->_game->processEvent(event);
 
-		if (event.eventType == EVENT_KEYPRESS)
+		if (event.eventType == EVENT_KEYPRESS || event.eventType == EVENT_CUSTOM_ACTIONSTART)
 			g_globals->_events.setCursorFromFlag();
 	}
 
@@ -4439,29 +4439,29 @@ void SceneHandler::process(Event &event) {
 
 	if (!event.handled) {
 		// Separate check for F5 - Save key
-		if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_F5)) {
+		if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionSaveGame)) {
 			// F5 - Save
 			g_globals->_game->saveGame();
 			event.handled = true;
 			g_globals->_events.setCursorFromFlag();
 		}
 
-		if ((event.eventType == EVENT_KEYPRESS) && g_globals->_player._enabled) {
+		if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && g_globals->_player._enabled) {
 			// Keyboard shortcuts for different actions
-			switch (event.kbd.keycode) {
-			case Common::KEYCODE_w:
+			switch (event.customType) {
+			case kActionWalk:
 				g_globals->_events.setCursor(GLOBALS._player._canWalk ? CURSOR_WALK : CURSOR_USE);
 				event.handled = true;
 				break;
-			case Common::KEYCODE_l:
+			case kActionLook:
 				g_globals->_events.setCursor(CURSOR_LOOK);
 				event.handled = true;
 				break;
-			case Common::KEYCODE_u:
+			case kActionUse:
 				g_globals->_events.setCursor(CURSOR_USE);
 				event.handled = true;
 				break;
-			case Common::KEYCODE_t:
+			case kActionTalk:
 				g_globals->_events.setCursor(CURSOR_TALK);
 				event.handled = true;
 				break;
diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp
index 3a579ed725a..129a184ffb8 100644
--- a/engines/tsage/events.cpp
+++ b/engines/tsage/events.cpp
@@ -118,6 +118,10 @@ bool EventsClass::getEvent(Event &evt, int eventMask) {
 			evt.eventType = EVENT_KEYPRESS;
 			evt.kbd = _event.kbd;
 			break;
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+			evt.eventType = EVENT_CUSTOM_ACTIONSTART;
+			evt.customType = _event.customType;
+			break;
 		default:
 			break;
 		}
diff --git a/engines/tsage/events.h b/engines/tsage/events.h
index f54794c31dc..9d9d8b75863 100644
--- a/engines/tsage/events.h
+++ b/engines/tsage/events.h
@@ -30,8 +30,8 @@
 
 namespace TsAGE {
 
-enum EventType {EVENT_NONE = 0, EVENT_BUTTON_DOWN = 1, EVENT_BUTTON_UP = 2, EVENT_KEYPRESS = 4,
-	EVENT_MOUSE_MOVE = 8, EVENT_UNK27 = 27};
+enum EventType {EVENT_NONE = 0, EVENT_BUTTON_DOWN = 1, EVENT_BUTTON_UP = 2, EVENT_KEYPRESS = 4, 
+	EVENT_MOUSE_MOVE = 8, EVENT_CUSTOM_ACTIONSTART = 16, EVENT_UNK27 = 27};
 
 enum ButtonShiftFlags {BTNSHIFT_LEFT = 0, BTNSHIFT_RIGHT = 3, BTNSHIFT_MIDDLE = 4};
 
@@ -50,6 +50,7 @@ public:
 	Common::Point mousePos;
 	int btnState;
 	Common::KeyState kbd;
+	Common::CustomEventType customType;
 	int ctr;
 	GfxManager *gfxMan;
 	bool handled;
@@ -142,7 +143,7 @@ public:
 	bool isCursorVisible() const;
 
 	bool pollEvent();
-	void waitForPress(int eventMask = EVENT_BUTTON_DOWN | EVENT_KEYPRESS);
+	void waitForPress(int eventMask = EVENT_BUTTON_DOWN | EVENT_CUSTOM_ACTIONSTART | EVENT_KEYPRESS);
 
 	bool getEvent(Event &evt, int eventMask = ~EVENT_MOUSE_MOVE);
 	Common::Event event() { return _event; }
diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp
index fcd348eed20..30eca3fdb5e 100644
--- a/engines/tsage/graphics.cpp
+++ b/engines/tsage/graphics.cpp
@@ -355,7 +355,7 @@ bool GfxSurface::displayText(const Common::String &msg, const Common::Point &pt)
 
 	// Wait for a mouse or keypress
 	Event event;
-	while (!g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit())
+	while (!g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_CUSTOM_ACTIONSTART | EVENT_KEYPRESS) && !g_vm->shouldQuit())
 		;
 
 	// Restore the display area
@@ -363,7 +363,7 @@ bool GfxSurface::displayText(const Common::String &msg, const Common::Point &pt)
 	delete savedArea;
 
 	gfxManager.deactivate();
-	return (event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_RETURN);
+	return (event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionReturn);
 }
 
 /**
@@ -1069,11 +1069,11 @@ GfxButton *GfxDialog::execute(GfxButton *defaultButton) {
 				breakFlag = true;
 				break;
 			} else if (!event.handled) {
-				if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) {
+				if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionEscape)) {
 					selectedButton = NULL;
 					breakFlag = true;
 					break;
-				} else if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_RETURN)) {
+				} else if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionReturn)) {
 					selectedButton = defaultButton;
 					breakFlag = true;
 					break;
diff --git a/engines/tsage/metaengine.cpp b/engines/tsage/metaengine.cpp
index a906e760949..3108bb86b3a 100644
--- a/engines/tsage/metaengine.cpp
+++ b/engines/tsage/metaengine.cpp
@@ -22,6 +22,11 @@
 #include "common/config-manager.h"
 #include "common/system.h"
 #include "common/savefile.h"
+#include "common/translation.h"
+
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
 
 #include "engines/advancedDetector.h"
 
@@ -154,10 +159,182 @@ public:
 		return SaveStateDescriptor();
 	}
 
+	Common::KeymapArray initKeymaps(const char *target) const override;
 };
 
+Common::KeymapArray TSageMetaEngine::initKeymaps(const char *target) const {
+	using namespace Common;
+	using namespace TsAGE;
+
+	Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "tsage-default", _("Default keymappings"));
+	Keymap *gameKeyMap = new Keymap(Keymap::kKeymapTypeGame, "game-shortcuts", _("Game keymappings"));
+
+	Common::Action *act;
+
+	Common::String gameId = ConfMan.get("gameid", target);
+	Common::String extra = ConfMan.get("extra", target);
+	const bool isDemo = extra.contains("Demo");
+
+	act = new Common::Action(kStandardActionLeftClick, _("Left click"));
+	act->setLeftClickEvent();
+	act->addDefaultInputMapping("MOUSE_LEFT");
+	act->addDefaultInputMapping("JOY_A");
+	engineKeyMap->addAction(act);
+
+	act = new Common::Action(kStandardActionRightClick, _("Right click"));
+	act->setRightClickEvent();
+	act->addDefaultInputMapping("MOUSE_RIGHT");
+	act->addDefaultInputMapping("JOY_B");
+	engineKeyMap->addAction(act);
+
+	act = new Common::Action("ESCAPE", _("Escape"));
+	act->setCustomEngineActionEvent(kActionEscape);
+	act->addDefaultInputMapping("ESCAPE");
+	gameKeyMap->addAction(act);
+
+	// I18N: Return refers to return/enter key
+	act = new Common::Action("RETURN", _("Return"));
+	act->setCustomEngineActionEvent(kActionReturn);
+	act->addDefaultInputMapping("RETURN");
+	gameKeyMap->addAction(act);
+
+	act = new Common::Action("WALK", _("Walk"));
+	act->setCustomEngineActionEvent(kActionWalk);
+	act->addDefaultInputMapping("w");
+	gameKeyMap->addAction(act);
+
+	act = new Common::Action("LOOK", _("Look"));
+	act->setCustomEngineActionEvent(kActionLook);
+	act->addDefaultInputMapping("l");
+	gameKeyMap->addAction(act);
+
+	act = new Common::Action("USE", _("Use"));
+	act->setCustomEngineActionEvent(kActionUse);
+	act->addDefaultInputMapping("u");
+	gameKeyMap->addAction(act);
+
+	act = new Common::Action("TALK", _("Talk"));
+	act->setCustomEngineActionEvent(kActionTalk);
+	act->addDefaultInputMapping("t");
+	gameKeyMap->addAction(act);
+
+	act = new Common::Action("HELP", _("View Help"));
+	act->setCustomEngineActionEvent(kActionHelp);
+	act->addDefaultInputMapping("F1");
+	gameKeyMap->addAction(act);
+
+	act = new Common::Action("SOUNDOPTIONS", _("Sound options"));
+	act->setCustomEngineActionEvent(kActionSoundOptions);
+	act->addDefaultInputMapping("F2");
+	gameKeyMap->addAction(act);
+
+	act = new Common::Action("QUITGAME", _("Quit game"));
+	act->setCustomEngineActionEvent(kActionQuitGame);
+	act->addDefaultInputMapping("F3");
+	gameKeyMap->addAction(act);
+
+	if (!isDemo) {
+		act = new Common::Action("RESTARTGAME", _("Restart game"));
+		act->setCustomEngineActionEvent(kActionRestartGame);
+		act->addDefaultInputMapping("F4");
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("SAVEGAME", _("Save game"));
+		act->setCustomEngineActionEvent(kActionSaveGame);
+		act->addDefaultInputMapping("F5");
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("RESTOREGAME", _("Restore game"));
+		act->setCustomEngineActionEvent(kActionRestoreGame);
+		act->addDefaultInputMapping("F7");
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("PAUSEGAME", _("Pause game"));
+		act->setCustomEngineActionEvent(kActionPauseGame);
+		act->addDefaultInputMapping("F10");
+		gameKeyMap->addAction(act);
+	}
+
+	if (gameId == "ringworld2") {
+		act = new Common::Action("CREDITS", _("Show credits"));
+		act->setCustomEngineActionEvent(kActionCredits);
+		act->addDefaultInputMapping("F8");
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("UP", _("Crawl North"));
+		act->setCustomEngineActionEvent(kActionMoveUpCrawlNorth);
+		act->addDefaultInputMapping("UP");
+		act->addDefaultInputMapping("KP8");
+		act->allowKbdRepeats();
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("DOWN", _("Crawl South"));
+		act->setCustomEngineActionEvent(kActionMoveDownCrawlSouth);
+		act->addDefaultInputMapping("DOWN");
+		act->addDefaultInputMapping("KP2");
+		act->allowKbdRepeats();
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("LEFT", _("Turn Left/Crawl West"));
+		act->setCustomEngineActionEvent(kActionMoveLeftCrawlWest);
+		act->addDefaultInputMapping("LEFT");
+		act->addDefaultInputMapping("KP4");
+		act->allowKbdRepeats();
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("RIGHT", _("Turn Right/Crawl East"));
+		act->setCustomEngineActionEvent(kActionMoveRightCrawlEast);
+		act->addDefaultInputMapping("RIGHT");
+		act->addDefaultInputMapping("KP6");
+		act->allowKbdRepeats();
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("INCREASESPEED", _("Increase speed"));
+		act->setCustomEngineActionEvent(kActionIncreaseSpeed);
+		act->addDefaultInputMapping("KP9"); 
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("DECREASESPEED", _("Decrease speed"));
+		act->setCustomEngineActionEvent(kActionDecreaseSpeed);
+		act->addDefaultInputMapping("KP3"); 
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("MINIMUMSPEED", _("Minimum speed"));
+		act->setCustomEngineActionEvent(kActionMinimumSpeed);
+		act->addDefaultInputMapping("KP1"); 
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("MAXIMUMSPEED", _("Maximum speed"));
+		act->setCustomEngineActionEvent(kActionMaximumSpeed);
+		act->addDefaultInputMapping("KP7");
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("LOWSPEED", _("Low speed"));
+		act->setCustomEngineActionEvent(kActionLowSpeed);
+		act->addDefaultInputMapping("KP_PERIOD");
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("MEDIUMSPEED", _("Medium speed"));
+		act->setCustomEngineActionEvent(kActionMediumSpeed);
+		act->addDefaultInputMapping("KP0"); 
+		gameKeyMap->addAction(act);
+
+		act = new Common::Action("DRAWCARDS", _("Draw Cards"));
+		act->setCustomEngineActionEvent(kActionDrawCards);
+		act->addDefaultInputMapping("SPACE"); 
+		gameKeyMap->addAction(act);
+	}
+
+	KeymapArray keymaps(2);
+	keymaps[0] = engineKeyMap;
+	keymaps[1] = gameKeyMap;
+
+	return keymaps;
+}
+
 #if PLUGIN_ENABLED_DYNAMIC(TSAGE)
 	REGISTER_PLUGIN_DYNAMIC(TSAGE, PLUGIN_TYPE_ENGINE, TSageMetaEngine);
 #else
 	REGISTER_PLUGIN_STATIC(TSAGE, PLUGIN_TYPE_ENGINE, TSageMetaEngine);
 #endif
+
diff --git a/engines/tsage/ringworld/ringworld_demo.cpp b/engines/tsage/ringworld/ringworld_demo.cpp
index 54104b4af8a..6ec24449141 100644
--- a/engines/tsage/ringworld/ringworld_demo.cpp
+++ b/engines/tsage/ringworld/ringworld_demo.cpp
@@ -70,20 +70,20 @@ void RingworldDemoGame::pauseGame() {
 }
 
 void RingworldDemoGame::processEvent(Event &event) {
-	if (event.eventType == EVENT_KEYPRESS) {
-		switch (event.kbd.keycode) {
-		case Common::KEYCODE_F1:
+	if (event.eventType == EVENT_CUSTOM_ACTIONSTART) {
+		switch (event.customType) {
+		case kActionHelp:
 			// F1 - Help
 			MessageDialog::show(DEMO_HELP_MSG, OK_BTN_STRING);
 			break;
 
-		case Common::KEYCODE_F2: {
+		case kActionSoundOptions: {
 			// F2 - Sound Options
 			SoundDialog::execute();
 			break;
 		}
 
-		case Common::KEYCODE_F3:
+		case kActionQuitGame:
 			// F3 - Quit
 			quitGame();
 			event.handled = false;
diff --git a/engines/tsage/ringworld/ringworld_dialogs.cpp b/engines/tsage/ringworld/ringworld_dialogs.cpp
index 1ca7f0222b4..19976bf0cf8 100644
--- a/engines/tsage/ringworld/ringworld_dialogs.cpp
+++ b/engines/tsage/ringworld/ringworld_dialogs.cpp
@@ -447,8 +447,8 @@ void InventoryDialog::execute() {
 				hiliteObj = *i;
 		}
 
-		if (!event.handled && event.eventType == EVENT_KEYPRESS) {
-			if ((event.kbd.keycode == Common::KEYCODE_RETURN) || (event.kbd.keycode == Common::KEYCODE_ESCAPE)) {
+		if (!event.handled && (event.eventType == EVENT_CUSTOM_ACTIONSTART)) {
+			if ((event.customType == kActionReturn) || (event.customType == kActionEscape)) {
 				// Exit the dialog
 				//hiliteObj = &_btnOk;
 				break;
diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp
index 8e54361896a..28b80eb2431 100644
--- a/engines/tsage/ringworld/ringworld_logic.cpp
+++ b/engines/tsage/ringworld/ringworld_logic.cpp
@@ -563,9 +563,9 @@ void RingworldGame::endGame(int resNum, int lineNum) {
 }
 
 void RingworldGame::processEvent(Event &event) {
-	if (event.eventType == EVENT_KEYPRESS) {
-		switch (event.kbd.keycode) {
-		case Common::KEYCODE_F1:
+	if (event.eventType == EVENT_CUSTOM_ACTIONSTART) {
+		switch (event.customType) {
+		case kActionHelp:
 			// F1 - Help
 			if (g_vm->getLanguage() == Common::ES_ESP) {
 				MessageDialog::show(ESP_HELP_MSG, ESP_OK_BTN_STRING);
@@ -576,30 +576,30 @@ void RingworldGame::processEvent(Event &event) {
 			}
 			break;
 
-		case Common::KEYCODE_F2:
+		case kActionSoundOptions:
 			// F2 - Sound Options
 			SoundDialog::execute();
 			break;
 
-		case Common::KEYCODE_F3:
+		case kActionQuitGame:
 			// F3 - Quit
 			quitGame();
 			event.handled = false;
 			break;
 
-		case Common::KEYCODE_F4:
+		case kActionRestartGame:
 			// F4 - Restart
 			restartGame();
 			g_globals->_events.setCursorFromFlag();
 			break;
 
-		case Common::KEYCODE_F7:
+		case kActionRestoreGame:
 			// F7 - Restore
 			restoreGame();
 			g_globals->_events.setCursorFromFlag();
 			break;
 
-		case Common::KEYCODE_F10:
+		case kActionPauseGame:
 			// F10 - Pause
 			GfxDialog::setPalette();
 			if (g_vm->getLanguage() == Common::ES_ESP) {
diff --git a/engines/tsage/ringworld/ringworld_scenes1.cpp b/engines/tsage/ringworld/ringworld_scenes1.cpp
index 882e4694ea3..16003e6fbc1 100644
--- a/engines/tsage/ringworld/ringworld_scenes1.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes1.cpp
@@ -3412,11 +3412,11 @@ void Scene6100::remove() {
 void Scene6100::process(Event &event) {
 	Scene::process(event);
 
-	if (event.eventType == EVENT_KEYPRESS) {
+	if (event.eventType == EVENT_CUSTOM_ACTIONSTART) {
 		// Handle incremental turning speeds with arrow keys
-		if ((event.kbd.keycode == Common::KEYCODE_LEFT) || (event.kbd.keycode == Common::KEYCODE_KP4)) {
+		if (event.customType == kActionMoveLeftCrawlWest) {
 			_turnAmount = MIN(_turnAmount + 1, 8);
-		} else if ((event.kbd.keycode == Common::KEYCODE_RIGHT) || (event.kbd.keycode == Common::KEYCODE_KP6)) {
+		} else if (event.customType == kActionMoveRightCrawlEast) {
 			_turnAmount = MAX(_turnAmount - 1, -8);
 		}
 	}
diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp
index 4c692f3e55a..f1e834bcb12 100644
--- a/engines/tsage/ringworld/ringworld_scenes5.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes5.cpp
@@ -4483,7 +4483,7 @@ void Scene4301::Action1::process(Event &event) {
 		}
 	}
 
-	if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) {
+	if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionEscape)) {
 		event.handled = true;
 		remove();
 	}
diff --git a/engines/tsage/ringworld2/ringworld2_airduct.cpp b/engines/tsage/ringworld2/ringworld2_airduct.cpp
index 7b4b91c099e..a51d4fc5f4e 100644
--- a/engines/tsage/ringworld2/ringworld2_airduct.cpp
+++ b/engines/tsage/ringworld2/ringworld2_airduct.cpp
@@ -623,27 +623,23 @@ void Scene1200::process(Event &event) {
 		default:
 			return;
 		}
-	} else if (event.eventType == EVENT_KEYPRESS) {
+	} else if (event.eventType == EVENT_CUSTOM_ACTIONSTART) {
 		if (_field414) {
 			event.handled = false;
 			return;
 		}
 
-		switch (event.kbd.keycode) {
-		case Common::KEYCODE_KP8:
-		case Common::KEYCODE_UP:
+		switch (event.customType) {
+		case kActionMoveUpCrawlNorth:
 			startCrawling(CRAWL_NORTH);
 			break;
-		case Common::KEYCODE_KP4:
-		case Common::KEYCODE_LEFT:
+		case kActionMoveLeftCrawlWest:
 			startCrawling(CRAWL_WEST);
 			break;
-		case Common::KEYCODE_KP6:
-		case Common::KEYCODE_RIGHT:
+		case kActionMoveRightCrawlEast:
 			startCrawling(CRAWL_EAST);
 			break;
-		case Common::KEYCODE_KP2:
-		case Common::KEYCODE_DOWN:
+		case kActionMoveDownCrawlSouth:
 			startCrawling(CRAWL_SOUTH);
 			break;
 		default:
diff --git a/engines/tsage/ringworld2/ringworld2_airduct.h b/engines/tsage/ringworld2/ringworld2_airduct.h
index 559ec888950..ad8618d3d53 100644
--- a/engines/tsage/ringworld2/ringworld2_airduct.h
+++ b/engines/tsage/ringworld2/ringworld2_airduct.h
@@ -22,6 +22,7 @@
 #ifndef TSAGE_RINGWORLD2_AIRDUCT_H
 #define TSAGE_RINGWORLD2_AIRDUCT_H
 
+#include "tsage/tsage.h"
 #include "tsage/events.h"
 #include "tsage/core.h"
 #include "tsage/scenes.h"
diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp
index a26e28b4d34..bf555429c31 100644
--- a/engines/tsage/ringworld2/ringworld2_dialogs.cpp
+++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp
@@ -366,22 +366,23 @@ void HelpDialog::show() {
 
 	// If a function button was selected, take care of it
 	Event evt;
-	evt.eventType = EVENT_KEYPRESS;
+	evt.eventType = EVENT_CUSTOM_ACTIONSTART;
 	evt.kbd.keycode = Common::KEYCODE_INVALID;
+	evt.customType = kActionNone;
 	if (btn == &dlg->_btnList[0]) {
-		evt.kbd.keycode = Common::KEYCODE_F2;
+		evt.customType = kActionSoundOptions;
 	} else if (btn == &dlg->_btnList[1]) {
-		evt.kbd.keycode = Common::KEYCODE_F3;
+		evt.customType = kActionQuitGame;
 	} else if (btn == &dlg->_btnList[2]) {
-		evt.kbd.keycode = Common::KEYCODE_F4;
+		evt.customType = kActionRestartGame;
 	} else if (btn == &dlg->_btnList[3]) {
-		evt.kbd.keycode = Common::KEYCODE_F5;
+		evt.customType = kActionSaveGame;
 	} else if (btn == &dlg->_btnList[4]) {
-		evt.kbd.keycode = Common::KEYCODE_F7;
+		evt.customType = kActionRestoreGame;
 	} else if (btn == &dlg->_btnList[5]) {
-		evt.kbd.keycode = Common::KEYCODE_F8;
+		evt.customType = kActionCredits;
 	} else if (btn == &dlg->_btnList[6]) {
-		evt.kbd.keycode = Common::KEYCODE_F10;
+		evt.customType = kActionPauseGame;
 	}
 
 	// Remove the dialog
@@ -389,7 +390,7 @@ void HelpDialog::show() {
 	delete dlg;
 
 	// If a action button was selected, dispatch to handle it
-	if (evt.kbd.keycode != Common::KEYCODE_INVALID)
+	if (evt.kbd.keycode != Common::KEYCODE_INVALID || evt.customType != kActionNone)
 		R2_GLOBALS._game->processEvent(evt);
 	else
 		R2_GLOBALS._events.setCursorFromFlag();
@@ -455,26 +456,26 @@ HelpDialog::HelpDialog() {
 }
 
 bool HelpDialog::handleKeypress(Event &event, GfxButton *&btn) {
-	switch (event.kbd.keycode) {
-	case Common::KEYCODE_F2:
+	switch (event.customType) {
+	case kActionSoundOptions:
 		btn = &_btnList[0];
 		break;
-	case Common::KEYCODE_F3:
+	case kActionQuitGame:
 		btn = &_btnList[1];
 		break;
-	case Common::KEYCODE_F4:
+	case kActionRestartGame:
 		btn = &_btnList[2];
 		break;
-	case Common::KEYCODE_F5:
+	case kActionSaveGame:
 		btn = &_btnList[3];
 		break;
-	case Common::KEYCODE_F7:
+	case kActionRestoreGame:
 		btn = &_btnList[4];
 		break;
-	case Common::KEYCODE_F8:
+	case kActionCredits:
 		btn = &_btnList[5];
 		break;
-	case Common::KEYCODE_F10:
+	case kActionPauseGame:
 		btn = &_btnList[6];
 		break;
 	default:
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index 6b091b2b9ac..1b35dedc808 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -1199,50 +1199,50 @@ void Ringworld2Game::endGame(int resNum, int lineNum) {
 }
 
 void Ringworld2Game::processEvent(Event &event) {
-	if (event.eventType == EVENT_KEYPRESS) {
-		switch (event.kbd.keycode) {
-		case Common::KEYCODE_F1:
+	if (event.eventType == EVENT_CUSTOM_ACTIONSTART) {
+		switch (event.customType) {
+		case kActionHelp:
 			// F1 - Help
 			HelpDialog::show();
 			break;
 
-		case Common::KEYCODE_F2:
+		case kActionSoundOptions:
 			// F2 - Sound Options
 			SoundDialog::execute();
 			break;
 
-		case Common::KEYCODE_F3:
+		case kActionQuitGame:
 			// F3 - Quit
 			quitGame();
 			event.handled = false;
 			break;
 
-		case Common::KEYCODE_F4:
+		case kActionRestartGame:
 			// F4 - Restart
 			restartGame();
 			R2_GLOBALS._events.setCursorFromFlag();
 			break;
 
-		case Common::KEYCODE_F5:
+		case kActionSaveGame:
 			// F5 - Save
 			saveGame();
 			R2_GLOBALS._events.setCursorFromFlag();
 			event.handled = true;
 			break;
 
-		case Common::KEYCODE_F7:
+		case kActionRestoreGame:
 			// F7 - Restore
 			restoreGame();
 			R2_GLOBALS._events.setCursorFromFlag();
 			break;
 
-		case Common::KEYCODE_F8:
+		case kActionCredits:
 			// F8 - Credits
 			if (R2_GLOBALS._sceneManager._sceneNumber != 205)
 				R2_GLOBALS._sceneManager.changeScene(205);
 			break;
 
-		case Common::KEYCODE_F10:
+		case kActionPauseGame:
 			// F10 - Pause
 			GfxDialog::setPalette();
 			MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING);
@@ -1840,7 +1840,7 @@ void AnimationPlayer::remove() {
 }
 
 void AnimationPlayer::process(Event &event) {
-	if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE) && _canSkip) {
+	if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionEscape) && _canSkip) {
 		// Move the current position to the end
 		_position = _subData._duration;
 	}
diff --git a/engines/tsage/ringworld2/ringworld2_outpost.cpp b/engines/tsage/ringworld2/ringworld2_outpost.cpp
index 360992edc39..11a0d18fae0 100644
--- a/engines/tsage/ringworld2/ringworld2_outpost.cpp
+++ b/engines/tsage/ringworld2/ringworld2_outpost.cpp
@@ -1770,7 +1770,7 @@ void Scene1337::Action10::signal() {
 
 					// Wait for a mouse or keypress
 					Event event;
-					while (!g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit()) {
+					while (!g_globals->_events.getEvent(event, EVENT_CUSTOM_ACTIONSTART | EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit()) {
 						g_globals->_scenePalette.signalListeners();
 						R2_GLOBALS._sceneObjects->draw();
 						g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks);
@@ -1967,7 +1967,7 @@ void Scene1337::Action11::signal() {
 					}
 
 					Event event;
-					while (!g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit()) {
+					while (!g_globals->_events.getEvent(event, EVENT_CUSTOM_ACTIONSTART | EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit()) {
 						g_globals->_scenePalette.signalListeners();
 						R2_GLOBALS._sceneObjects->draw();
 						g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks);
@@ -2115,7 +2115,7 @@ void Scene1337::Action12::signal() {
 					}
 
 					Event event;
-					while (!g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit()) {
+					while (!g_globals->_events.getEvent(event,EVENT_CUSTOM_ACTIONSTART | EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit()) {
 						g_globals->_scenePalette.signalListeners();
 						R2_GLOBALS._sceneObjects->draw();
 						g_globals->_events.delay(g_globals->_sceneHandler->_delayTicks);
@@ -2397,8 +2397,8 @@ void Scene1337::process(Event &event) {
 			(this->*tmpFctPtr)();
 			event.handled = true;
 		}
-	} else if (event.eventType == EVENT_KEYPRESS) {
-		if (event.kbd.keycode == Common::KEYCODE_SPACE) {
+	} else if (event.eventType == EVENT_CUSTOM_ACTIONSTART) {
+		if (event.customType == kActionDrawCards) {
 			if (_delayedFunction) {
 				FunctionPtrType tmpFctPtr = _delayedFunction;
 				_delayedFunction = nullptr;
@@ -4191,7 +4191,7 @@ void Scene1337::handlePlayer2() {
 	bool found;
 	for (;;) {
 		if ( ((g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN)) && (event.btnState == BTNSHIFT_RIGHT))
-			|| (g_globals->_events.getEvent(event, EVENT_KEYPRESS)) ){
+			|| (g_globals->_events.getEvent(event, EVENT_CUSTOM_ACTIONSTART | EVENT_KEYPRESS)) ){
 			_selectedCard._stationPos = g_globals->_events._mousePos;
 			found = false;
 
@@ -4680,7 +4680,7 @@ GfxButton *Scene1337::OptionsDialog::execute(GfxButton *defaultButton) {
 				breakFlag = true;
 				break;
 			} else if (!event.handled) {
-				if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) {
+				if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionEscape)) {
 					selectedButton = NULL;
 					breakFlag = true;
 					break;
diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp
index 6a9da378336..a0390741be3 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp
@@ -65,7 +65,8 @@ void Scene50::postInit(SceneObjectList *OwnerList) {
 }
 
 void Scene50::process(Event &event) {
-	if ((event.eventType != EVENT_BUTTON_DOWN) && (event.eventType != EVENT_KEYPRESS) && (event.eventType == EVENT_UNK27)) {
+	if ((event.eventType != EVENT_BUTTON_DOWN) && (event.eventType == EVENT_CUSTOM_ACTIONSTART)
+			&& (event.eventType != EVENT_KEYPRESS) && (event.eventType == EVENT_UNK27)) {
 		event.handled = true;
 		g_globals->_events.setCursor(CURSOR_ARROW);
 		HelpDialog::show();
@@ -1477,7 +1478,7 @@ void Scene160::remove() {
 }
 
 void Scene160::process(Event &event) {
-	if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) {
+	if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionEscape)) {
 		event.handled = true;
 		HelpDialog::show();
 	}
@@ -1911,7 +1912,7 @@ void Scene180::setSceneDelay(int v) {
 }
 
 void Scene180::process(Event &event) {
-	if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) {
+	if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionEscape)) {
 		event.handled = true;
 		if (_helpEnabled) {
 			if (R2_GLOBALS._scenePalette._listeners.size() == 0)
@@ -2408,7 +2409,7 @@ void Scene205::remove() {
 }
 
 void Scene205::process(Event &event) {
-	if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) {
+	if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionEscape)) {
 		event.handled = true;
 		R2_GLOBALS._sceneManager.changeScene(R2_GLOBALS._sceneManager._previousScene);
 	} else {
@@ -2584,7 +2585,7 @@ void Scene205Demo::remove() {
 }
 
 void Scene205Demo::process(Event &event) {
-	if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE)) {
+	if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionEscape)) {
 		event.handled = true;
 		leaveScene();
 	} else {
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
index 037186bdf32..52832f85c22 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
@@ -4717,7 +4717,7 @@ void Scene1625::signal() {
 }
 
 void Scene1625::process(Event &event) {
-	if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_ESCAPE))
+	if ((event.eventType == EVENT_CUSTOM_ACTIONSTART) && (event.customType == kActionEscape))
 		event.handled = true;
 	else
 		Scene::process(event);
diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp
index 53cf63bcdcc..1c577ca4bda 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp
@@ -3791,60 +3791,56 @@ void Scene3500::process(Event &event) {
 	if (!_directionChangesEnabled)
 		return;
 
-	if (event.eventType == EVENT_KEYPRESS) {
-		switch (event.kbd.keycode) {
-		case Common::KEYCODE_KP7:
+	if (event.eventType == EVENT_CUSTOM_ACTIONSTART) {
+		switch (event.customType) {
+		case kActionMaximumSpeed:
 			R2_GLOBALS._sound2.play(338);
 			doMovement(16);
 			event.handled = true;
 			break;
-		case Common::KEYCODE_UP:
-		case Common::KEYCODE_KP8:
+		case kActionMoveUpCrawlNorth:
 			R2_GLOBALS._sound2.play(14, NULL, 63);
 			doMovement(88);
 			event.handled = true;
 			break;
-		case Common::KEYCODE_KP9:
+		case kActionIncreaseSpeed:
 			if (_speed < 16)
 				R2_GLOBALS._sound2.play(338);
 			doMovement(1);
 			event.handled = true;
 			break;
-		case Common::KEYCODE_KP4:
-		case Common::KEYCODE_LEFT:
+		case kActionMoveLeftCrawlWest:
 			R2_GLOBALS._sound2.play(14, NULL, 63);
 			doMovement(112);
 			event.handled = true;
 			break;
-		case Common::KEYCODE_KP6:
-		case Common::KEYCODE_RIGHT:
+		case kActionMoveRightCrawlEast:
 			R2_GLOBALS._sound2.play(14, NULL, 63);
 			doMovement(96);
 			event.handled = true;
 			break;
-		case Common::KEYCODE_KP1:
+		case kActionMinimumSpeed:
 			R2_GLOBALS._sound2.play(338);
 			doMovement(0);
 			event.handled = true;
 			break;
-		case Common::KEYCODE_KP2:
-		case Common::KEYCODE_DOWN:
+		case kActionMoveDownCrawlSouth:
 			R2_GLOBALS._sound2.play(14, NULL, 63);
 			doMovement(104);
 			event.handled = true;
 			break;
-		case Common::KEYCODE_KP3:
+		case kActionDecreaseSpeed:
 			if (_speed != 0)
 				R2_GLOBALS._sound2.play(338);
 			doMovement(-1);
 			event.handled = true;
 			break;
-		case Common::KEYCODE_KP0:
+		case kActionMediumSpeed:
 			R2_GLOBALS._sound2.play(338);
 			doMovement(8);
 			event.handled = true;
 			break;
-		case Common::KEYCODE_KP_PERIOD:
+		case kActionLowSpeed:
 			R2_GLOBALS._sound2.play(338);
 			doMovement(4);
 			event.handled = true;
diff --git a/engines/tsage/tsage.h b/engines/tsage/tsage.h
index 6e4d811ee54..1aa117717be 100644
--- a/engines/tsage/tsage.h
+++ b/engines/tsage/tsage.h
@@ -34,6 +34,35 @@
 
 namespace TsAGE {
 
+enum TSAGEAction {
+	kActionNone,
+	kActionEscape,
+	kActionReturn,
+	kActionHelp,
+	kActionSoundOptions,
+	kActionQuitGame,
+	kActionRestartGame,
+	kActionSaveGame,
+	kActionRestoreGame,
+	kActionCredits,
+	kActionPauseGame,
+	kActionWalk,
+	kActionLook,
+	kActionUse,
+	kActionTalk,
+	kActionMoveUpCrawlNorth,
+	kActionMoveDownCrawlSouth,
+	kActionMoveLeftCrawlWest,
+	kActionMoveRightCrawlEast,
+	kActionIncreaseSpeed,
+	kActionDecreaseSpeed,
+	kActionMinimumSpeed,
+	kActionMaximumSpeed,
+	kActionLowSpeed,
+	kActionMediumSpeed,
+	kActionDrawCards
+};
+
 enum {
 	kRingDebugScripts = 1 << 0,
 	ktSageSound = 1 << 1,




More information about the Scummvm-git-logs mailing list