[Scummvm-git-logs] scummvm master -> 7eb82b4a2faed379ec0906e8a68873843bd2d32c

OMGPizzaGuy noreply at scummvm.org
Sun Jun 15 23:55:08 UTC 2025


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

Summary:
bfc574ee4f ULTIMA8: Move keybind action handling out of debugger.
001379cf05 ULTIMA8: Remove console method association from keybind records.
c464f5da3d ULTIMA8: Remove debugger commands no longer needed for keybinding.
7eb82b4a2f ULTIMA8: Remove executeCommand from debugger.


Commit: bfc574ee4f4b722b7dc254a5101530031703199c
    https://github.com/scummvm/scummvm/commit/bfc574ee4f4b722b7dc254a5101530031703199c
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2025-06-15T18:32:29-05:00

Commit Message:
ULTIMA8: Move keybind action handling out of debugger.

Changed paths:
    engines/ultima/ultima8/gumps/container_gump.cpp
    engines/ultima/ultima8/gumps/game_map_gump.cpp
    engines/ultima/ultima8/metaengine.cpp
    engines/ultima/ultima8/metaengine.h
    engines/ultima/ultima8/misc/debugger.cpp
    engines/ultima/ultima8/ultima8.cpp
    engines/ultima/ultima8/ultima8.h
    engines/ultima/ultima8/world/actors/main_actor.h


diff --git a/engines/ultima/ultima8/gumps/container_gump.cpp b/engines/ultima/ultima8/gumps/container_gump.cpp
index a60f0b3022b..cd25b25ccea 100644
--- a/engines/ultima/ultima8/gumps/container_gump.cpp
+++ b/engines/ultima/ultima8/gumps/container_gump.cpp
@@ -163,12 +163,12 @@ void ContainerGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scale
 	int32 gameframeno = Kernel::get_instance()->getFrameNum();
 
 	//!! TODO: check these painting commands (flipped? translucent?)
-	bool paintEditorItems = Ultima8Engine::get_instance()->isPaintEditorItems();
+	bool showEditorItems = Ultima8Engine::get_instance()->isShowEditorItems();
 
 	for (auto *item : c->_contents) {
 		item->setupLerp(gameframeno);
 
-		if (!paintEditorItems && item->getShapeInfo()->is_editor())
+		if (!showEditorItems && item->getShapeInfo()->is_editor())
 			continue;
 
 		int32 itemx, itemy;
@@ -204,7 +204,7 @@ uint16 ContainerGump::TraceObjId(int32 mx, int32 my) {
 	if (!c)
 		return 0; // Container gone!?
 
-	bool paintEditorItems = Ultima8Engine::get_instance()->isPaintEditorItems();
+	bool showEditorItems = Ultima8Engine::get_instance()->isShowEditorItems();
 
 	Std::list<Item *> &contents = c->_contents;
 	Std::list<Item *>::reverse_iterator iter;
@@ -212,7 +212,7 @@ uint16 ContainerGump::TraceObjId(int32 mx, int32 my) {
 	// iterate backwards, since we're painting from begin() to end()
 	for (iter = contents.rbegin(); iter != contents.rend(); ++iter) {
 		Item *item = *iter;
-		if (!paintEditorItems && item->getShapeInfo()->is_editor())
+		if (!showEditorItems && item->getShapeInfo()->is_editor())
 			continue;
 
 		int32 itemx, itemy;
diff --git a/engines/ultima/ultima8/gumps/game_map_gump.cpp b/engines/ultima/ultima8/gumps/game_map_gump.cpp
index 7badfd0a980..459ab35b754 100644
--- a/engines/ultima/ultima8/gumps/game_map_gump.cpp
+++ b/engines/ultima/ultima8/gumps/game_map_gump.cpp
@@ -111,7 +111,7 @@ void GameMapGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
 
 	uint32 gametick = Kernel::get_instance()->getFrameNum();
 
-	bool paintEditorItems = Ultima8Engine::get_instance()->isPaintEditorItems();
+	bool showEditorItems = Ultima8Engine::get_instance()->isShowEditorItems();
 
 	// Get all the required items
 	for (int cy = 0; cy < MAP_NUM_CHUNKS; cy++) {
@@ -134,7 +134,7 @@ void GameMapGump::PaintThis(RenderSurface *surf, int32 lerp_factor, bool scaled)
 
 				if (item->getZ() >= zlimit && !item->getShapeInfo()->is_draw())
 					continue;
-				if (!paintEditorItems && item->getShapeInfo()->is_editor())
+				if (!showEditorItems && item->getShapeInfo()->is_editor())
 					continue;
 				if (item->hasFlags(Item::FLG_INVISIBLE)) {
 					// special case: invisible avatar _is_ drawn
diff --git a/engines/ultima/ultima8/metaengine.cpp b/engines/ultima/ultima8/metaengine.cpp
index d3eb91a1b2a..9d4d3c770b2 100644
--- a/engines/ultima/ultima8/metaengine.cpp
+++ b/engines/ultima/ultima8/metaengine.cpp
@@ -43,11 +43,11 @@ struct KeybindingRecord {
 };
 
 static const KeybindingRecord COMMON_KEYS[] = {
-	{ ACTION_QUICKSAVE, "QUICKSAVE", "Quick Save", "GUIApp::saveGame QuickSave", nullptr, "F1", nullptr },
-	{ ACTION_SAVE, "SAVE", "Save Game", "GUIApp::saveGame", nullptr, "F5", nullptr },
-	{ ACTION_LOAD, "LOAD", "Load Game", "GUIApp::loadGame", nullptr, "F7", nullptr },
-	{ ACTION_COMBAT, "COMBAT", "Combat", "MainActor::toggleCombat", nullptr, "c", "JOY_X" },
-	{ ACTION_MENU, "MENU", "Game Menu", "MenuGump::showMenu", nullptr, "ESCAPE", "JOY_Y" },
+	{ ACTION_QUICKSAVE, "QUICKSAVE", "Quick Save", nullptr, nullptr, "F1", nullptr },
+	{ ACTION_SAVE, "SAVE", "Save Game", nullptr, nullptr, "F5", nullptr },
+	{ ACTION_LOAD, "LOAD", "Load Game", nullptr, nullptr, "F7", nullptr },
+	{ ACTION_COMBAT, "COMBAT", "Combat", nullptr, nullptr, "c", "JOY_X" },
+	{ ACTION_MENU, "MENU", "Game Menu", nullptr, nullptr, "ESCAPE", "JOY_Y" },
 	{ ACTION_TURN_LEFT, "TURN_LEFT", "Turn Left", nullptr, nullptr, "LEFT", "KP4" },
 	{ ACTION_TURN_RIGHT, "TURN_RIGHT", "Turn Right", nullptr, nullptr, "RIGHT", "KP6" },
 	{ ACTION_MOVE_FORWARD, "MOVE_FORWARD", "Move Forward", nullptr, nullptr, "UP", "KP8" },
@@ -57,19 +57,19 @@ static const KeybindingRecord COMMON_KEYS[] = {
 	{ ACTION_MOVE_LEFT, "MOVE_LEFT", "Move Left", nullptr, nullptr, nullptr, "JOY_LEFT" },
 	{ ACTION_MOVE_RIGHT, "MOVE_RIGHT", "Move Right", nullptr, nullptr, nullptr, "JOY_RIGHT" },
 	{ ACTION_MOVE_RUN, "MOVE_RUN", "Run", nullptr, nullptr, "LSHIFT", "JOY_RIGHT_TRIGGER" },
-	{ ACTION_HIGHLIGHT_ITEMS, "HIGHLIGHT_ITEMS", "Highlight Items", "GameMapGump::startHighlightItems", "GameMapGump::stopHighlightItems", "h", nullptr },
+	{ ACTION_HIGHLIGHT_ITEMS, "HIGHLIGHT_ITEMS", "Highlight Items", nullptr, nullptr, "h", nullptr },
 
 	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }
 };
 
 static const KeybindingRecord U8_KEYS[] = {
-	{ ACTION_BEDROLL, "BEDROLL", "Bedroll", "MainActor::useBedroll", nullptr, "b", nullptr },
-	{ ACTION_BACKPACK, "BACKPACK", "Use Backpack", "MainActor::useBackpack", nullptr, "i", "JOY_LEFT_SHOULDER" },
-	{ ACTION_KEYRING, "KEYRING", "Keyring", "MainActor::useKeyring", nullptr, "k", "JOY_RIGHT_STICK" },
-	{ ACTION_MINIMAP, "MINIMAP", "Toggle Minimap", "MiniMapGump::toggle", nullptr, "m", "JOY_BACK" },
-	{ ACTION_RECALL, "RECALL", "Use Recall", "MainActor::useRecall", nullptr, "r", nullptr },
-	{ ACTION_INVENTORY, "INVENTORY", "Inventory", "MainActor::useInventory", nullptr, "z", "JOY_LEFT_STICK" },
-	{ ACTION_CLOSE_GUMPS, "CLOSE_GUMPS", "Close Gumps", "GUIApp::closeItemGumps", nullptr, "BACKSPACE", nullptr },
+	{ ACTION_BEDROLL, "BEDROLL", "Bedroll", nullptr, nullptr, "b", nullptr },
+	{ ACTION_BACKPACK, "BACKPACK", "Use Backpack", nullptr, nullptr, "i", "JOY_LEFT_SHOULDER" },
+	{ ACTION_KEYRING, "KEYRING", "Keyring", nullptr, nullptr, "k", "JOY_RIGHT_STICK" },
+	{ ACTION_MINIMAP, "MINIMAP", "Toggle Minimap", nullptr, nullptr, "m", "JOY_BACK" },
+	{ ACTION_RECALL, "RECALL", "Use Recall", nullptr, nullptr, "r", nullptr },
+	{ ACTION_INVENTORY, "INVENTORY", "Inventory", nullptr, nullptr, "z", "JOY_LEFT_STICK" },
+	{ ACTION_CLOSE_GUMPS, "CLOSE_GUMPS", "Close Gumps", nullptr, nullptr, "BACKSPACE", nullptr },
 	{ ACTION_JUMP, "JUMP", "Jump (fake both-button-click)", nullptr, nullptr, "SPACE", nullptr },
 	{ ACTION_MOVE_STEP, "MOVE_STEP", "Step", nullptr, nullptr, "LCTRL", "JOY_LEFT_TRIGGER" },
 
@@ -77,19 +77,19 @@ static const KeybindingRecord U8_KEYS[] = {
 };
 
 static const KeybindingRecord CRUSADER_KEYS[] = {
-	{ ACTION_NEXT_WEAPON, "NEXT_WEAPON", "Next Weapon", "MainActor::nextWeapon", nullptr, "w", "KP_MULTIPLY" },
-	{ ACTION_NEXT_INVENTORY, "NEXT_INVENTORY", "Next Inventory Item", "MainActor::nextInvItem", nullptr, "i", "KP_MINUS" },
-	{ ACTION_USE_INVENTORY, "USE_INVENTORY", "Use Inventroy Item", "MainActor::useInventoryItem", nullptr, "u", "KP_PERIOD" },
-	{ ACTION_USE_MEDIKIT, "USE_MEDIKIT", "Use Medical Kit", "MainActor::useMedikit", nullptr, "m", nullptr },
-	{ ACTION_USE_ENERGYCUBE, "USE_ENERGYCUBE", "Use Energy Cube", "MainActor::useEnergyCube", nullptr, "e", nullptr },
-	{ ACTION_DETONATE_BOMB, "DETONATE_BOMB", "Detonate Bomb", "MainActor::detonateBomb", nullptr, "b", nullptr },
+	{ ACTION_NEXT_WEAPON, "NEXT_WEAPON", "Next Weapon", nullptr, nullptr, "w", "KP_MULTIPLY" },
+	{ ACTION_NEXT_INVENTORY, "NEXT_INVENTORY", "Next Inventory Item", nullptr, nullptr, "i", "KP_MINUS" },
+	{ ACTION_USE_INVENTORY, "USE_INVENTORY", "Use Inventroy Item", nullptr, nullptr, "u", "KP_PERIOD" },
+	{ ACTION_USE_MEDIKIT, "USE_MEDIKIT", "Use Medical Kit", nullptr, nullptr, "m", nullptr },
+	{ ACTION_USE_ENERGYCUBE, "USE_ENERGYCUBE", "Use Energy Cube", nullptr, nullptr, "e", nullptr },
+	{ ACTION_DETONATE_BOMB, "DETONATE_BOMB", "Detonate Bomb", nullptr, nullptr, "b", nullptr },
 	// TODO: The same key should be "use datalink" in no regret.
-	{ ACTION_DROP_WEAPON, "DROP_WEAPON", "Drop Weapon", "MainActor::dropWeapon", nullptr, "C+d", nullptr },
-	{ ACTION_SELECT_ITEMS, "SELECT_ITEM", "Select Item", "ItemSelectionProcess::startSelection", nullptr, "s", "KP_PLUS" },
-	{ ACTION_USE_SELECTION, "USE_SELECTION", "Use Selection", "ItemSelectionProcess::useSelectedItem", nullptr, "RETURN", "KP_ENTER" },
-	{ ACTION_GRAB_ITEMS, "GRAB_ITEM", "Grab Items", "ItemSelectionProcess::grabItems", nullptr, "g", nullptr },
+	{ ACTION_DROP_WEAPON, "DROP_WEAPON", "Drop Weapon", nullptr, nullptr, "C+d", nullptr },
+	{ ACTION_SELECT_ITEMS, "SELECT_ITEM", "Select Item", nullptr, nullptr, "s", "KP_PLUS" },
+	{ ACTION_USE_SELECTION, "USE_SELECTION", "Use Selection", nullptr, nullptr, "RETURN", "KP_ENTER" },
+	{ ACTION_GRAB_ITEMS, "GRAB_ITEM", "Grab Items", nullptr, nullptr, "g", nullptr },
 	{ ACTION_ATTACK, "ATTACK", "Attack", nullptr, nullptr, "SPACE", "KP0" },
-	{ ACTION_CAMERA_AVATAR, "CAMERA_AVATAR", "Focus Camera on Silencer", "CameraProcess::moveToAvatar", nullptr, "z", nullptr },
+	{ ACTION_CAMERA_AVATAR, "CAMERA_AVATAR", "Focus Camera on Silencer", nullptr, nullptr, "z", nullptr },
 	{ ACTION_JUMP, "JUMP", "Jump / Roll / Crouch", nullptr, nullptr, "LCTRL", nullptr },
 	{ ACTION_SHORT_JUMP, "SHORT_JUMP", "Short Jump", nullptr, nullptr, "TAB", "j" },
 	{ ACTION_STEP_LEFT, "STEP_LEFT", "Sidestep Left", nullptr, nullptr, "DELETE", "KP7" },
@@ -104,28 +104,27 @@ static const KeybindingRecord CRUSADER_KEYS[] = {
 };
 
 static const KeybindingRecord CHEAT_KEYS[] = {
-	{ ACTION_CLIPPING, "CLIPPING", "Toggle Clipping", "QuickAvatarMoverProcess::toggleClipping", nullptr, "M+INSERT", nullptr },
-	{ ACTION_QUICK_MOVE_ASCEND, "ASCEND", "Ascend", "QuickAvatarMoverProcess::startAscend", "QuickAvatarMoverProcess::stopAscend", "M+HOME", nullptr },
-	{ ACTION_QUICK_MOVE_DESCEND, "DESCEND", "Descend", "QuickAvatarMoverProcess::startDescend", "QuickAvatarMoverProcess::stopDescend", "M+END", nullptr },
-	{ ACTION_QUICK_MOVE_UP, "MOVE_UP", "Move Up", "QuickAvatarMoverProcess::startMoveUp", "QuickAvatarMoverProcess::stopMoveUp", "M+UP", nullptr },
-	{ ACTION_QUICK_MOVE_DOWN, "MOVE_DOWN", "Move Down", "QuickAvatarMoverProcess::startMoveDown", "QuickAvatarMoverProcess::stopMoveDown", "M+DOWN", nullptr },
-	{ ACTION_QUICK_MOVE_LEFT, "MOVE_LEFT", "Move Left", "QuickAvatarMoverProcess::startMoveLeft", "QuickAvatarMoverProcess::stopMoveLeft", "M+LEFT", nullptr },
-	{ ACTION_QUICK_MOVE_RIGHT, "MOVE_RIGHT", "Move Right", "QuickAvatarMoverProcess::startMoveRight", "QuickAvatarMoverProcess::stopMoveRight", "M+RIGHT", nullptr },
+	{ ACTION_CLIPPING, "CLIPPING", "Toggle Clipping", nullptr, nullptr, "M+INSERT", nullptr },
+	{ ACTION_QUICK_MOVE_ASCEND, "ASCEND", "Ascend", nullptr, nullptr, "M+HOME", nullptr },
+	{ ACTION_QUICK_MOVE_DESCEND, "DESCEND", "Descend", nullptr, nullptr, "M+END", nullptr },
+	{ ACTION_QUICK_MOVE_UP, "MOVE_UP", "Move Up", nullptr, nullptr, "M+UP", nullptr },
+	{ ACTION_QUICK_MOVE_DOWN, "MOVE_DOWN", "Move Down", nullptr, nullptr, "M+DOWN", nullptr },
+	{ ACTION_QUICK_MOVE_LEFT, "MOVE_LEFT", "Move Left", nullptr, nullptr, "M+LEFT", nullptr },
+	{ ACTION_QUICK_MOVE_RIGHT, "MOVE_RIGHT", "Move Right", nullptr, nullptr, "M+RIGHT", nullptr },
 
 	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }
 };
 
 #ifndef RELEASE_BUILD
 static const KeybindingRecord DEBUG_KEYS[] = {
-	{ ACTION_TOGGLE_TOUCHING, "TOUCHING", "Show Touching Items", "GUIApp::toggleShowTouchingItems", nullptr, "C+h", nullptr },
-	{ ACTION_TOGGLE_PAINT, "TOGGLE_PAINT", "Toggle Paint Editor Items", "GUIApp::togglePaintEditorItems", nullptr, "F9", nullptr },
-	{ ACTION_DEC_SORT_ORDER, "DEC_SORT_ORDER", "Decrement Map Sort Order", "GameMapGump::decrementSortOrder", nullptr, "LEFTBRACKET", nullptr },
-	{ ACTION_INC_SORT_ORDER, "INC_SORT_ORDER", "Increment Map Sort Order", "GameMapGump::incrementSortOrder", nullptr, "RIGHTBRACKET", nullptr },
-	{ ACTION_ENGINE_STATS, "STATS", "List engine stats", "GUIApp::engineStats", nullptr, "t", nullptr },
-	{ ACTION_FRAME_BY_FRAME, "FRAME_BY_FRAME", "Toggle Frame By Frame", "Kernel::toggleFrameByFrame", nullptr, "F12", nullptr },
-	{ ACTION_ADVANCE_FRAME, "ADVANCE_FRAME", "Advance Frame", "Kernel::advanceFrame", nullptr, "f", nullptr },
-	{ ACTION_TOGGLE_STASIS, "TOGGLE_STASIS", "Toggle Avatar In Stasis", "GUIApp::toggleAvatarInStasis", nullptr, "F10", nullptr },
-	{ ACTION_SHAPE_VIEWER, "SHAPE_VIEWER", "Show Shape Viewer", "ShapeViewerGump::U8ShapeViewer", nullptr, "F11", nullptr },
+	{ ACTION_TOGGLE_TOUCHING, "TOUCHING", "Show Touching Items", nullptr, nullptr, "C+h", nullptr },
+	{ ACTION_TOGGLE_PAINT, "TOGGLE_PAINT", "Show Editor Items", nullptr, nullptr, "F9", nullptr },
+	{ ACTION_DEC_SORT_ORDER, "DEC_SORT_ORDER", "Decrement Map Sort Order", nullptr, nullptr, "LEFTBRACKET", nullptr },
+	{ ACTION_INC_SORT_ORDER, "INC_SORT_ORDER", "Increment Map Sort Order", nullptr, nullptr, "RIGHTBRACKET", nullptr },
+	{ ACTION_FRAME_BY_FRAME, "FRAME_BY_FRAME", "Toggle Frame By Frame", nullptr, nullptr, "F12", nullptr },
+	{ ACTION_ADVANCE_FRAME, "ADVANCE_FRAME", "Advance Frame", nullptr, nullptr, "f", nullptr },
+	{ ACTION_TOGGLE_STASIS, "TOGGLE_STASIS", "Toggle Avatar In Stasis", nullptr, nullptr, "F10", nullptr },
+	{ ACTION_SHAPE_VIEWER, "SHAPE_VIEWER", "Show Shape Viewer", nullptr, nullptr, "F11", nullptr },
 
 	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }
 };
diff --git a/engines/ultima/ultima8/metaengine.h b/engines/ultima/ultima8/metaengine.h
index bd0469d121b..3a8c162aa04 100644
--- a/engines/ultima/ultima8/metaengine.h
+++ b/engines/ultima/ultima8/metaengine.h
@@ -48,10 +48,8 @@ enum KeybindingAction {
 	ACTION_QUICK_MOVE_UP, ACTION_QUICK_MOVE_DOWN, ACTION_QUICK_MOVE_LEFT,
 	ACTION_QUICK_MOVE_RIGHT,
 
-#ifndef RELEASE_BUILD
-	ACTION_TOGGLE_PAINT, ACTION_ENGINE_STATS, ACTION_FRAME_BY_FRAME,
+	ACTION_TOGGLE_PAINT, ACTION_FRAME_BY_FRAME,
 	ACTION_ADVANCE_FRAME, ACTION_TOGGLE_STASIS, ACTION_SHAPE_VIEWER,
-#endif
 
 	ACTION_NONE
 };
diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index c6b07c832b3..7822f0bc2f1 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -274,21 +274,21 @@ bool Debugger::cmdSetVideoMode(int argc, const char **argv) {
 
 bool Debugger::cmdToggleAvatarInStasis(int argc, const char **argv) {
 	Ultima8Engine *g = Ultima8Engine::get_instance();
-	g->toggleAvatarInStasis();
+	g->setAvatarInStasis(!g->isAvatarInStasis());
 	debugPrintf("avatarInStasis = %s\n", strBool(g->isAvatarInStasis()));
 	return true;
 }
 
 bool Debugger::cmdTogglePaintEditorItems(int argc, const char **argv) {
 	Ultima8Engine *g = Ultima8Engine::get_instance();
-	g->togglePaintEditorItems();
-	debugPrintf("paintEditorItems = %s\n", strBool(g->isPaintEditorItems()));
+	g->setShowEditorItems(!g->isShowEditorItems());
+	debugPrintf("showEditorItems = %s\n", strBool(g->isShowEditorItems()));
 	return false;
 }
 
 bool Debugger::cmdToggleShowTouchingItems(int argc, const char **argv) {
 	Ultima8Engine *g = Ultima8Engine::get_instance();
-	g->toggleShowTouchingItems();
+	g->setShowTouchingItems(!g->isShowTouchingItems());
 	debugPrintf("ShowTouchingItems = %s\n", strBool(g->isShowTouchingItems()));
 	return false;
 }
@@ -1039,19 +1039,13 @@ bool Debugger::cmdUseBackpack(int argc, const char **argv) {
 	return false;
 }
 
-static bool _isAvatarControlled() {
-	World *world = World::get_instance();
-	return (world && world->getControlledNPCNum() == 1);
-}
-
 bool Debugger::cmdNextInventory(int argc, const char **argv) {
 	if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
 		debugPrintf("Can't use inventory: avatarInStasis");
 		return false;
 	}
 
-	// Only if controlling avatar.
-	if (!_isAvatarControlled()) {
+	if (!Ultima8Engine::get_instance()->isAvatarControlled()) {
 		return false;
 	}
 
@@ -1066,8 +1060,7 @@ bool Debugger::cmdNextWeapon(int argc, const char **argv) {
 		return false;
 	}
 
-	// Only if controlling avatar.
-	if (!_isAvatarControlled()) {
+	if (!Ultima8Engine::get_instance()->isAvatarControlled()) {
 		return false;
 	}
 
@@ -1082,8 +1075,7 @@ bool Debugger::cmdUseInventoryItem(int argc, const char **argv) {
 		return false;
 	}
 
-	// Only if controlling avatar.
-	if (!_isAvatarControlled()) {
+	if (!Ultima8Engine::get_instance()->isAvatarControlled()) {
 		return false;
 	}
 
@@ -1104,8 +1096,7 @@ bool Debugger::cmdUseMedikit(int argc, const char **argv) {
 		return false;
 	}
 
-	// Only if controlling avatar.
-	if (!_isAvatarControlled()) {
+	if (!Ultima8Engine::get_instance()->isAvatarControlled()) {
 		return false;
 	}
 
@@ -1120,8 +1111,7 @@ bool Debugger::cmdUseEnergyCube(int argc, const char **argv) {
 		return false;
 	}
 
-	// Only if controlling avatar.
-	if (!_isAvatarControlled()) {
+	if (!Ultima8Engine::get_instance()->isAvatarControlled()) {
 		return false;
 	}
 
@@ -1136,8 +1126,7 @@ bool Debugger::cmdDetonateBomb(int argc, const char **argv) {
 		return false;
 	}
 
-	// Only if controlling avatar.
-	if (!_isAvatarControlled()) {
+	if (!Ultima8Engine::get_instance()->isAvatarControlled()) {
 		return false;
 	}
 
@@ -1152,8 +1141,7 @@ bool Debugger::cmdDropWeapon(int argc, const char **argv) {
 		return false;
 	}
 
-	// Only if controlling avatar.
-	if (!_isAvatarControlled()) {
+	if (!Ultima8Engine::get_instance()->isAvatarControlled()) {
 		return false;
 	}
 
@@ -1228,8 +1216,7 @@ bool Debugger::cmdStartSelection(int argc, const char **argv) {
 		return false;
 	}
 
-	// Only if controlling avatar.
-	if (!_isAvatarControlled()) {
+	if (!Ultima8Engine::get_instance()->isAvatarControlled()) {
 		return false;
 	}
 
@@ -1248,8 +1235,7 @@ bool Debugger::cmdUseSelection(int argc, const char **argv) {
 		return false;
 	}
 
-	// Only if controlling avatar.
-	if (!_isAvatarControlled()) {
+	if (!Ultima8Engine::get_instance()->isAvatarControlled()) {
 		return false;
 	}
 
@@ -1265,8 +1251,7 @@ bool Debugger::cmdGrabItems(int argc, const char **argv) {
 		return false;
 	}
 
-	// Only if controlling avatar.
-	if (!_isAvatarControlled()) {
+	if (!Ultima8Engine::get_instance()->isAvatarControlled()) {
 		return false;
 	}
 
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 91132b5bf6c..a4905e21d03 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -29,7 +29,7 @@
 #include "engines/util.h"
 #include "ultima/ultima.h"
 
- // TODO: !! a lot of these includes are just for some hacks... clean up sometime
+// TODO: !! a lot of these includes are just for some hacks... clean up sometime
 #include "ultima/ultima8/conf/config_file_manager.h"
 #include "ultima/ultima8/kernel/object_manager.h"
 #include "ultima/ultima8/games/start_u8_process.h"
@@ -42,6 +42,7 @@
 #include "ultima/ultima8/filesys/savegame.h"
 #include "ultima/ultima8/gumps/game_map_gump.h"
 #include "ultima/ultima8/gumps/inverter_gump.h"
+#include "ultima/ultima8/gumps/menu_gump.h"
 #include "ultima/ultima8/gumps/minimap_gump.h"
 #include "ultima/ultima8/gumps/cru_status_gump.h"
 #include "ultima/ultima8/gumps/movie_gump.h"
@@ -137,10 +138,10 @@ Ultima8Engine::Ultima8Engine(OSystem *syst, const Ultima::UltimaGameDescription
 		_screen(nullptr), _fontManager(nullptr), _paletteManager(nullptr), _gameData(nullptr),
 		_world(nullptr), _desktopGump(nullptr), _gameMapGump(nullptr), _avatarMoverProcess(nullptr),
 		_frameSkip(false), _frameLimit(true), _interpolate(true), _animationRate(100),
-		_avatarInStasis(false), _cruStasis(false), _paintEditorItems(false), _inversion(0),
+		_avatarInStasis(false), _cruStasis(false), _showEditorItems(false), _inversion(0),
 		_showTouching(false), _timeOffset(0), _hasCheated(false), _cheatsEnabled(false),
 		_fontOverride(false), _fontAntialiasing(false), _audioMixer(0), _inverterGump(nullptr),
-	    _lerpFactor(256), _inBetweenFrame(false), _crusaderTeleporting(false), _moveKeyFrame(0),
+		_lerpFactor(256), _inBetweenFrame(false), _crusaderTeleporting(false), _moveKeyFrame(0),
 		_highRes(false), _priorFrameCounterTime(0) {
 	_instance = this;
 }
@@ -416,10 +417,10 @@ void Ultima8Engine::pauseEngineIntern(bool pause) {
 bool Ultima8Engine::hasFeature(EngineFeature f) const {
 	return
 		(f == kSupportsSubtitleOptions) ||
-		(f == kSupportsReturnToLauncher) ||
-		(f == kSupportsLoadingDuringRuntime) ||
-		(f == kSupportsSavingDuringRuntime) ||
-		(f == kSupportsChangingOptionsDuringRuntime);
+		   (f == kSupportsReturnToLauncher) ||
+		   (f == kSupportsLoadingDuringRuntime) ||
+		   (f == kSupportsSavingDuringRuntime) ||
+		   (f == kSupportsChangingOptionsDuringRuntime);
 }
 
 Common::Language Ultima8Engine::getLanguage() const {
@@ -827,7 +828,7 @@ void Ultima8Engine::handleEvent(const Common::Event &event) {
 			if (event.kbd.ascii >= ' ' &&
 				event.kbd.ascii <= 255 &&
 				!(event.kbd.ascii >= 0x7F && // control chars
-					event.kbd.ascii <= 0x9F)) {
+				  event.kbd.ascii <= 0x9F)) {
 				modal->OnTextInput(event.kbd.ascii);
 			}
 
@@ -904,9 +905,276 @@ void Ultima8Engine::handleActionDown(KeybindingAction action) {
 		}
 	}
 
-	Common::String methodName = MetaEngine::getMethod(action, true);
-	if (!methodName.empty())
-		g_debugger->executeCommand(methodName);
+	switch (action) {
+	case ACTION_QUICKSAVE:
+		if (canSaveGameStateCurrently()) {
+			Common::Error result = saveGameState(1, "QuickSave");
+			if (result.getCode() != Common::kNoError) {
+				GUIErrorMessageFormat("Saving game failed: %s\n", result.getDesc().c_str());
+			}
+		} else {
+			Mouse::get_instance()->flashCrossCursor();
+		}
+		break;
+	case ACTION_SAVE:
+		saveGameDialog();
+		break;
+	case ACTION_LOAD:
+		loadGameDialog();
+		break;
+	case ACTION_BEDROLL:
+		if (!isAvatarInStasis()) {
+			MainActor *av = getMainActor();
+			av->useInventoryItem(534);
+		}
+		break;
+	case ACTION_COMBAT:
+		if (!isAvatarInStasis()) {
+			MainActor *av = getMainActor();
+			av->toggleInCombat();
+		}
+		break;
+	case ACTION_BACKPACK:
+		if (!isAvatarInStasis()) {
+			MainActor *av = getMainActor();
+			Item *backpack = getItem(av->getEquip(ShapeInfo::SE_BACKPACK));
+			if (backpack)
+				backpack->callUsecodeEvent_use();
+		}
+		break;
+	case ACTION_KEYRING:
+		if (!isAvatarInStasis()) {
+			MainActor *av = getMainActor();
+			av->useInventoryItem(79);
+		}
+		break;
+	case ACTION_MINIMAP: {
+		Gump *desktop = getDesktopGump();
+		Gump *mmg = desktop->FindGump<MiniMapGump>();
+		if (!mmg) {
+			mmg = new MiniMapGump(4, 4);
+			mmg->InitGump(0);
+			mmg->setRelativePosition(Gump::TOP_LEFT, 4, 4);
+		} else if (mmg->IsHidden()) {
+			mmg->UnhideGump();
+		} else {
+			mmg->HideGump();
+		}
+	} break;
+	case ACTION_RECALL:
+		if (!isAvatarInStasis()) {
+			MainActor *av = getMainActor();
+			av->useInventoryItem(833);
+		}
+		break;
+	case ACTION_INVENTORY:
+		if (!isAvatarInStasis()) {
+			MainActor *av = getMainActor();
+			av->callUsecodeEvent_use();
+		}
+		break;
+	case ACTION_NEXT_WEAPON:
+		if (!isAvatarInStasis() && isAvatarControlled()) {
+			MainActor *av = getMainActor();
+			av->nextWeapon();
+		}
+		break;
+	case ACTION_NEXT_INVENTORY:
+		if (!isAvatarInStasis() && isAvatarControlled()) {
+			MainActor *av = getMainActor();
+			av->nextInvItem();
+		}
+		break;
+	case ACTION_USE_INVENTORY:
+		if (!isAvatarInStasis() && isAvatarControlled()) {
+			MainActor *av = getMainActor();
+			ObjId activeitemid = av->getActiveInvItem();
+			if (activeitemid) {
+				Item *item = getItem(activeitemid);
+				if (item) {
+					av->useInventoryItem(item);
+				}
+			}
+		}
+		break;
+	case ACTION_USE_MEDIKIT:
+		if (!isAvatarInStasis() && isAvatarControlled()) {
+			MainActor *av = getMainActor();
+			av->useInventoryItem(0x351);
+		}
+		break;
+	case ACTION_USE_ENERGYCUBE:
+		if (!isAvatarInStasis() && isAvatarControlled()) {
+			MainActor *av = getMainActor();
+			av->useInventoryItem(0x582);
+		}
+		break;
+	case ACTION_SELECT_ITEMS:
+		if (!isAvatarInStasis() && isAvatarControlled()) {
+			// Clear this flag on selection to match original behavior.
+			setCrusaderTeleporting(false);
+
+			ItemSelectionProcess *proc = ItemSelectionProcess::get_instance();
+			if (proc)
+				proc->selectNextItem(false);
+		}
+		break;
+	case ACTION_DETONATE_BOMB:
+		if (!isAvatarInStasis() && isAvatarControlled()) {
+			MainActor *av = getMainActor();
+			av->detonateBomb();
+		}
+		break;
+	case ACTION_DROP_WEAPON:
+		if (!isAvatarInStasis() && isAvatarControlled()) {
+			MainActor *av = getMainActor();
+			av->dropWeapon();
+		}
+		break;
+	case ACTION_USE_SELECTION:
+		if (!isAvatarInStasis() && isAvatarControlled()) {
+			ItemSelectionProcess *proc = ItemSelectionProcess::get_instance();
+			if (proc)
+				proc->useSelectedItem();
+		}
+		break;
+	case ACTION_GRAB_ITEMS:
+		if (!isAvatarInStasis() && isAvatarControlled()) {
+			// Clear this flag on selection to match original behavior.
+			setCrusaderTeleporting(false);
+
+			ItemSelectionProcess *proc = ItemSelectionProcess::get_instance();
+			if (proc)
+				proc->selectNextItem(true);
+		}
+		break;
+	case ACTION_MENU:
+		// In Crusader escape is also used to stop controlling another NPC
+		if (_world && _world->getControlledNPCNum() != kMainActorId) {
+			_world->setControlledNPCNum(kMainActorId);
+		} else if (isCruStasis()) {
+			moveKeyEvent();
+		} else {
+			Gump *gump = getDesktopGump()->FindGump<ModalGump>();
+			if (gump) {
+				// ensure any modal gump gets the message to close before we open the menu.
+				gump->Close();
+			} else {
+				MenuGump::showMenu();
+			}
+		}
+		break;
+	case ACTION_CLOSE_GUMPS:
+		getDesktopGump()->CloseItemDependents();
+		break;
+	case ACTION_CAMERA_AVATAR:
+		if (!isCruStasis()) {
+			Actor *actor = getControlledActor();
+			if (actor) {
+				Point3 pt = actor->getCentre();
+				if (pt.x > 0 || pt.y > 0)
+					CameraProcess::SetCameraProcess(new CameraProcess(pt));
+			}
+		}
+		break;
+	case ACTION_HIGHLIGHT_ITEMS:
+		GameMapGump::Set_highlightItems(true);
+		break;
+	case ACTION_DEC_SORT_ORDER:
+		if (_gameMapGump)
+			_gameMapGump->IncSortOrder(-1);
+		break;
+	case ACTION_INC_SORT_ORDER:
+		if (_gameMapGump)
+			_gameMapGump->IncSortOrder(1);
+		break;
+	case ACTION_FRAME_BY_FRAME:
+		if (_kernel) {
+			bool fbf = !_kernel->isFrameByFrame();
+			_kernel->setFrameByFrame(fbf);
+			if (fbf)
+				_kernel->pause();
+			else
+				_kernel->unpause();
+		}
+		break;
+	case ACTION_ADVANCE_FRAME:
+		if (_kernel) {
+			if (_kernel->isFrameByFrame())
+				_kernel->unpause();
+		}
+		break;
+	case ACTION_SHAPE_VIEWER:
+		ShapeViewerGump::U8ShapeViewer();
+		break;
+	case ACTION_TOGGLE_TOUCHING:
+		_showTouching = !_showTouching;
+		break;
+	case ACTION_TOGGLE_PAINT:
+		_showEditorItems = !_showEditorItems;
+		break;
+	case ACTION_TOGGLE_STASIS:
+		_avatarInStasis = !_avatarInStasis;
+		break;
+	case ACTION_CLIPPING:
+		if (areCheatsEnabled()) {
+			QuickAvatarMoverProcess::toggleClipping();
+		}
+		break;
+	case ACTION_QUICK_MOVE_ASCEND:
+		if (!isAvatarInStasis() && areCheatsEnabled()) {
+			QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
+			if (proc) {
+				proc->setMovementFlag(QuickAvatarMoverProcess::MOVE_ASCEND);
+			}
+		}
+		break;
+	case ACTION_QUICK_MOVE_DESCEND:
+		if (!isAvatarInStasis() && areCheatsEnabled()) {
+			QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
+			if (proc) {
+				proc->setMovementFlag(QuickAvatarMoverProcess::MOVE_DESCEND);
+			}
+		}
+		break;
+	case ACTION_QUICK_MOVE_UP:
+		if (!isAvatarInStasis() && areCheatsEnabled()) {
+			QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
+			if (proc) {
+				proc->setMovementFlag(QuickAvatarMoverProcess::MOVE_UP);
+			}
+		}
+		break;
+	case ACTION_QUICK_MOVE_DOWN:
+		if (!isAvatarInStasis() && areCheatsEnabled()) {
+			QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
+			if (proc) {
+				proc->setMovementFlag(QuickAvatarMoverProcess::MOVE_DOWN);
+			}
+		}
+		break;
+	case ACTION_QUICK_MOVE_LEFT:
+		if (!isAvatarInStasis() && areCheatsEnabled()) {
+			QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
+			if (proc) {
+				proc->setMovementFlag(QuickAvatarMoverProcess::MOVE_LEFT);
+			}
+		}
+		break;
+	case ACTION_QUICK_MOVE_RIGHT:
+		if (!isAvatarInStasis() && areCheatsEnabled()) {
+			QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
+			if (proc) {
+				proc->setMovementFlag(QuickAvatarMoverProcess::MOVE_RIGHT);
+			}
+		}
+		break;
+	default:
+		Common::String methodName = MetaEngine::getMethod(action, true);
+		if (!methodName.empty())
+			g_debugger->executeCommand(methodName);
+		break;
+	}
 }
 
 void Ultima8Engine::handleActionUp(KeybindingAction action) {
@@ -915,9 +1183,64 @@ void Ultima8Engine::handleActionUp(KeybindingAction action) {
 		return;
 	}
 
-	Common::String methodName = MetaEngine::getMethod(action, false);
-	if (!methodName.empty())
-		g_debugger->executeCommand(methodName);
+	switch (action) {
+	case ACTION_HIGHLIGHT_ITEMS:
+		GameMapGump::Set_highlightItems(false);
+		break;
+	case ACTION_QUICK_MOVE_ASCEND:
+		if (!isAvatarInStasis() && areCheatsEnabled()) {
+			QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
+			if (proc) {
+				proc->clearMovementFlag(QuickAvatarMoverProcess::MOVE_ASCEND);
+			}
+		}
+		break;
+	case ACTION_QUICK_MOVE_DESCEND:
+		if (!isAvatarInStasis() && areCheatsEnabled()) {
+			QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
+			if (proc) {
+				proc->clearMovementFlag(QuickAvatarMoverProcess::MOVE_DESCEND);
+			}
+		}
+		break;
+	case ACTION_QUICK_MOVE_UP:
+		if (!isAvatarInStasis() && areCheatsEnabled()) {
+			QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
+			if (proc) {
+				proc->clearMovementFlag(QuickAvatarMoverProcess::MOVE_UP);
+			}
+		}
+		break;
+	case ACTION_QUICK_MOVE_DOWN:
+		if (!isAvatarInStasis() && areCheatsEnabled()) {
+			QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
+			if (proc) {
+				proc->clearMovementFlag(QuickAvatarMoverProcess::MOVE_DOWN);
+			}
+		}
+		break;
+	case ACTION_QUICK_MOVE_LEFT:
+		if (!isAvatarInStasis() && areCheatsEnabled()) {
+			QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
+			if (proc) {
+				proc->clearMovementFlag(QuickAvatarMoverProcess::MOVE_LEFT);
+			}
+		}
+		break;
+	case ACTION_QUICK_MOVE_RIGHT:
+		if (!isAvatarInStasis() && areCheatsEnabled()) {
+			QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
+			if (proc) {
+				proc->clearMovementFlag(QuickAvatarMoverProcess::MOVE_RIGHT);
+			}
+		}
+		break;
+	default:
+		Common::String methodName = MetaEngine::getMethod(action, false);
+		if (!methodName.empty())
+			g_debugger->executeCommand(methodName);
+		break;
+	}
 }
 
 void Ultima8Engine::writeSaveInfo(Common::WriteStream *ws) {
@@ -1425,7 +1748,7 @@ void Ultima8Engine::addGump(Gump *gump) {
 		dynamic_cast<MessageBoxGump *>(gump)// ||
 		//(_fontOverrides && (dynamic_cast<BarkGump *>(gump) ||
 		//                dynamic_cast<AskGump *>(gump)))
-		) {
+	) {
 		_desktopGump->AddChild(gump);
 	} else if (dynamic_cast<GameMapGump *>(gump)) {
 		if (GAME_IS_U8)
@@ -1440,6 +1763,10 @@ void Ultima8Engine::addGump(Gump *gump) {
 	}
 }
 
+bool Ultima8Engine::isAvatarControlled() const {
+	return (_world && _world->getControlledNPCNum() == kMainActorId);
+}
+
 uint32 Ultima8Engine::getGameTimeInSeconds() {
 	// 1 second per every 30 frames
 	return (Kernel::get_instance()->getFrameNum() + _timeOffset) / Kernel::FRAMES_PER_SECOND; // constant!
@@ -1521,19 +1848,19 @@ bool Ultima8Engine::load(Common::ReadStream *rs, uint32 version) {
 //
 
 uint32 Ultima8Engine::I_avatarCanCheat(const uint8 * /*args*/,
-	unsigned int /*argsize*/) {
+									   unsigned int /*argsize*/) {
 	return Ultima8Engine::get_instance()->areCheatsEnabled() ? 1 : 0;
 }
 
 
 uint32 Ultima8Engine::I_makeAvatarACheater(const uint8 * /*args*/,
-	unsigned int /*argsize*/) {
+										   unsigned int /*argsize*/) {
 	Ultima8Engine::get_instance()->makeCheater();
 	return 0;
 }
 
 uint32 Ultima8Engine::I_getCurrentTimerTick(const uint8 * /*args*/,
-	unsigned int /*argsize*/) {
+											unsigned int /*argsize*/) {
 	// number of ticks of a 60Hz timer, with the default animrate of 30Hz
 	return Kernel::get_instance()->getTickNum();
 }
@@ -1562,41 +1889,41 @@ uint32 Ultima8Engine::I_clrCruStasis(const uint8 *args, unsigned int argsize) {
 }
 
 uint32 Ultima8Engine::I_getTimeInGameHours(const uint8 * /*args*/,
-	unsigned int /*argsize*/) {
+										   unsigned int /*argsize*/) {
 	// 900 seconds per _game hour
 	return get_instance()->getGameTimeInSeconds() / 900;
 }
 
 uint32 Ultima8Engine::I_getCrusaderTeleporting(const uint8 * /*args*/,
-	unsigned int /*argsize*/) {
+											   unsigned int /*argsize*/) {
 	return get_instance()->isCrusaderTeleporting() ? 1 : 0;
 }
 
 uint32 Ultima8Engine::I_setCrusaderTeleporting(const uint8 * /*args*/,
-	unsigned int /*argsize*/) {
+											   unsigned int /*argsize*/) {
 	get_instance()->setCrusaderTeleporting(true);
 	return 0;
 }
 
 uint32 Ultima8Engine::I_clrCrusaderTeleporting(const uint8 * /*args*/,
-	unsigned int /*argsize*/) {
+											   unsigned int /*argsize*/) {
 	get_instance()->setCrusaderTeleporting(false);
 	return 0;
 }
 
 uint32 Ultima8Engine::I_getTimeInMinutes(const uint8 * /*args*/,
-	unsigned int /*argsize*/) {
+										 unsigned int /*argsize*/) {
 	// 60 seconds per minute
 	return get_instance()->getGameTimeInSeconds() / 60;
 }
 
 uint32 Ultima8Engine::I_getTimeInSeconds(const uint8 * /*args*/,
-	unsigned int /*argsize*/) {
+										 unsigned int /*argsize*/) {
 	return get_instance()->getGameTimeInSeconds();
 }
 
 uint32 Ultima8Engine::I_setTimeInGameHours(const uint8 *args,
-	unsigned int /*argsize*/) {
+										   unsigned int /*argsize*/) {
 	ARG_UINT16(newhour);
 
 	// 1 _game hour per every 27000 frames
diff --git a/engines/ultima/ultima8/ultima8.h b/engines/ultima/ultima8/ultima8.h
index 608e54f972c..197a8dc55e2 100644
--- a/engines/ultima/ultima8/ultima8.h
+++ b/engines/ultima/ultima8/ultima8.h
@@ -120,8 +120,8 @@ private:
 
 	bool _avatarInStasis;    //!< If this is set to true, Avatar can't move,
 	//!< nor can Avatar start more usecode
-	bool _paintEditorItems;  //!< If true, paint items with the SI_EDITOR flag
-	bool _showTouching;          //!< If true, highlight items touching Avatar
+	bool _showEditorItems;   //!< If true, paint items with the SI_EDITOR flag
+	bool _showTouching;      //!< If true, highlight items touching Avatar
 	int32 _timeOffset;
 	bool _hasCheated;
 	bool _cheatsEnabled;
@@ -236,20 +236,18 @@ public:
 	bool isAvatarInStasis() const {
 		return _avatarInStasis;
 	}
-	void toggleAvatarInStasis() {
-		_avatarInStasis = !_avatarInStasis;
+	bool isAvatarControlled() const;
+	bool isShowEditorItems() const {
+		return _showEditorItems;
 	}
-	bool isPaintEditorItems() const {
-		return _paintEditorItems;
-	}
-	void togglePaintEditorItems() {
-		_paintEditorItems = !_paintEditorItems;
+	void setShowEditorItems(bool flag) {
+		_showEditorItems = flag;
 	}
 	bool isShowTouchingItems() const {
 		return _showTouching;
 	}
-	void toggleShowTouchingItems() {
-		_showTouching = !_showTouching;
+	void setShowTouchingItems(bool flag) {
+		_showTouching = flag;
 	}
 
 	bool isCrusaderTeleporting() const {
diff --git a/engines/ultima/ultima8/world/actors/main_actor.h b/engines/ultima/ultima8/world/actors/main_actor.h
index bbf4c955053..c2e3d996aac 100644
--- a/engines/ultima/ultima8/world/actors/main_actor.h
+++ b/engines/ultima/ultima8/world/actors/main_actor.h
@@ -32,6 +32,7 @@ struct WeaponOverlayFrame;
 
 class MainActor : public Actor {
 	friend class Debugger;
+	friend class Ultima8Engine;
 public:
 	enum CruBatteryType {
 		NoBattery = 0,


Commit: 001379cf05dfc0cb0fdc18e78b7b216d664dad8d
    https://github.com/scummvm/scummvm/commit/001379cf05dfc0cb0fdc18e78b7b216d664dad8d
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2025-06-15T18:32:30-05:00

Commit Message:
ULTIMA8: Remove console method association from keybind records.
Additionally, the keybind descriptions were not properly marked for translation in the past.

Changed paths:
    engines/ultima/ultima8/metaengine.cpp
    engines/ultima/ultima8/metaengine.h
    engines/ultima/ultima8/ultima8.cpp


diff --git a/engines/ultima/ultima8/metaengine.cpp b/engines/ultima/ultima8/metaengine.cpp
index 9d4d3c770b2..13622e0b2a3 100644
--- a/engines/ultima/ultima8/metaengine.cpp
+++ b/engines/ultima/ultima8/metaengine.cpp
@@ -36,97 +36,95 @@ struct KeybindingRecord {
 	KeybindingAction _action;
 	const char *_id;
 	const char *_desc;
-	const char *_pressMethod;
-	const char *_releaseMethod;
 	const char *_input1;
 	const char *_input2;
 };
 
 static const KeybindingRecord COMMON_KEYS[] = {
-	{ ACTION_QUICKSAVE, "QUICKSAVE", "Quick Save", nullptr, nullptr, "F1", nullptr },
-	{ ACTION_SAVE, "SAVE", "Save Game", nullptr, nullptr, "F5", nullptr },
-	{ ACTION_LOAD, "LOAD", "Load Game", nullptr, nullptr, "F7", nullptr },
-	{ ACTION_COMBAT, "COMBAT", "Combat", nullptr, nullptr, "c", "JOY_X" },
-	{ ACTION_MENU, "MENU", "Game Menu", nullptr, nullptr, "ESCAPE", "JOY_Y" },
-	{ ACTION_TURN_LEFT, "TURN_LEFT", "Turn Left", nullptr, nullptr, "LEFT", "KP4" },
-	{ ACTION_TURN_RIGHT, "TURN_RIGHT", "Turn Right", nullptr, nullptr, "RIGHT", "KP6" },
-	{ ACTION_MOVE_FORWARD, "MOVE_FORWARD", "Move Forward", nullptr, nullptr, "UP", "KP8" },
-	{ ACTION_MOVE_BACK, "MOVE_BACK", "Move Back", nullptr, nullptr, "DOWN", "KP2" },
-	{ ACTION_MOVE_UP, "MOVE_UP", "Move Up", nullptr, nullptr, nullptr, "JOY_UP" },
-	{ ACTION_MOVE_DOWN, "MOVE_DOWN", "Move Down", nullptr, nullptr, nullptr, "JOY_DOWN" },
-	{ ACTION_MOVE_LEFT, "MOVE_LEFT", "Move Left", nullptr, nullptr, nullptr, "JOY_LEFT" },
-	{ ACTION_MOVE_RIGHT, "MOVE_RIGHT", "Move Right", nullptr, nullptr, nullptr, "JOY_RIGHT" },
-	{ ACTION_MOVE_RUN, "MOVE_RUN", "Run", nullptr, nullptr, "LSHIFT", "JOY_RIGHT_TRIGGER" },
-	{ ACTION_HIGHLIGHT_ITEMS, "HIGHLIGHT_ITEMS", "Highlight Items", nullptr, nullptr, "h", nullptr },
-
-	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }
+	{ ACTION_QUICKSAVE, "QUICKSAVE", _s("Quick Save"), "F1", nullptr },
+	{ ACTION_SAVE, "SAVE", _s("Save Game"), "F5", nullptr },
+	{ ACTION_LOAD, "LOAD", _s("Load Game"), "F7", nullptr },
+	{ ACTION_COMBAT, "COMBAT", _s("Combat"), "c", "JOY_X" },
+	{ ACTION_MENU, "MENU", _s("Game Menu"), "ESCAPE", "JOY_Y" },
+	{ ACTION_TURN_LEFT, "TURN_LEFT", _s("Turn Left"), "LEFT", "KP4" },
+	{ ACTION_TURN_RIGHT, "TURN_RIGHT", _s("Turn Right"), "RIGHT", "KP6" },
+	{ ACTION_MOVE_FORWARD, "MOVE_FORWARD", _s("Move Forward"), "UP", "KP8" },
+	{ ACTION_MOVE_BACK, "MOVE_BACK", _s("Move Back"), "DOWN", "KP2" },
+	{ ACTION_MOVE_UP, "MOVE_UP", _s("Move Up"), nullptr, "JOY_UP" },
+	{ ACTION_MOVE_DOWN, "MOVE_DOWN", _s("Move Down"), nullptr, "JOY_DOWN" },
+	{ ACTION_MOVE_LEFT, "MOVE_LEFT", _s("Move Left"), nullptr, "JOY_LEFT" },
+	{ ACTION_MOVE_RIGHT, "MOVE_RIGHT", _s("Move Right"), nullptr, "JOY_RIGHT" },
+	{ ACTION_MOVE_RUN, "MOVE_RUN", _s("Run"), "LSHIFT", "JOY_RIGHT_TRIGGER" },
+	{ ACTION_HIGHLIGHT_ITEMS, "HIGHLIGHT_ITEMS", _s("Highlight Items"), "h", nullptr },
+
+	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr }
 };
 
 static const KeybindingRecord U8_KEYS[] = {
-	{ ACTION_BEDROLL, "BEDROLL", "Bedroll", nullptr, nullptr, "b", nullptr },
-	{ ACTION_BACKPACK, "BACKPACK", "Use Backpack", nullptr, nullptr, "i", "JOY_LEFT_SHOULDER" },
-	{ ACTION_KEYRING, "KEYRING", "Keyring", nullptr, nullptr, "k", "JOY_RIGHT_STICK" },
-	{ ACTION_MINIMAP, "MINIMAP", "Toggle Minimap", nullptr, nullptr, "m", "JOY_BACK" },
-	{ ACTION_RECALL, "RECALL", "Use Recall", nullptr, nullptr, "r", nullptr },
-	{ ACTION_INVENTORY, "INVENTORY", "Inventory", nullptr, nullptr, "z", "JOY_LEFT_STICK" },
-	{ ACTION_CLOSE_GUMPS, "CLOSE_GUMPS", "Close Gumps", nullptr, nullptr, "BACKSPACE", nullptr },
-	{ ACTION_JUMP, "JUMP", "Jump (fake both-button-click)", nullptr, nullptr, "SPACE", nullptr },
-	{ ACTION_MOVE_STEP, "MOVE_STEP", "Step", nullptr, nullptr, "LCTRL", "JOY_LEFT_TRIGGER" },
-
-	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }
+	{ ACTION_BEDROLL, "BEDROLL", _s("Use Bedroll"), "b", nullptr },
+	{ ACTION_BACKPACK, "BACKPACK", _s("Use Backpack"), "i", "JOY_LEFT_SHOULDER" },
+	{ ACTION_KEYRING, "KEYRING", _s("Use Keyring"), "k", "JOY_RIGHT_STICK" },
+	{ ACTION_MINIMAP, "MINIMAP", _s("Open Minimap"), "m", "JOY_BACK" },
+	{ ACTION_RECALL, "RECALL", _s("Use Recall"), "r", nullptr },
+	{ ACTION_INVENTORY, "INVENTORY", _s("Open Inventory"), "z", "JOY_LEFT_STICK" },
+	{ ACTION_CLOSE_GUMPS, "CLOSE_GUMPS", _s("Close Gumps"), "BACKSPACE", nullptr },
+	{ ACTION_JUMP, "JUMP", _s("Jump (fake both-button-click)"), "SPACE", nullptr },
+	{ ACTION_MOVE_STEP, "MOVE_STEP", _s("Step"), "LCTRL", "JOY_LEFT_TRIGGER" },
+
+	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr }
 };
 
 static const KeybindingRecord CRUSADER_KEYS[] = {
-	{ ACTION_NEXT_WEAPON, "NEXT_WEAPON", "Next Weapon", nullptr, nullptr, "w", "KP_MULTIPLY" },
-	{ ACTION_NEXT_INVENTORY, "NEXT_INVENTORY", "Next Inventory Item", nullptr, nullptr, "i", "KP_MINUS" },
-	{ ACTION_USE_INVENTORY, "USE_INVENTORY", "Use Inventroy Item", nullptr, nullptr, "u", "KP_PERIOD" },
-	{ ACTION_USE_MEDIKIT, "USE_MEDIKIT", "Use Medical Kit", nullptr, nullptr, "m", nullptr },
-	{ ACTION_USE_ENERGYCUBE, "USE_ENERGYCUBE", "Use Energy Cube", nullptr, nullptr, "e", nullptr },
-	{ ACTION_DETONATE_BOMB, "DETONATE_BOMB", "Detonate Bomb", nullptr, nullptr, "b", nullptr },
+	{ ACTION_NEXT_WEAPON, "NEXT_WEAPON", _s("Next Weapon"), "w", "KP_MULTIPLY" },
+	{ ACTION_NEXT_INVENTORY, "NEXT_INVENTORY", _s("Next Inventory Item"), "i", "KP_MINUS" },
+	{ ACTION_USE_INVENTORY, "USE_INVENTORY", _s("Use Inventory Item"), "u", "KP_PERIOD" },
+	{ ACTION_USE_MEDIKIT, "USE_MEDIKIT", _s("Use Medical Kit"), "m", nullptr },
+	{ ACTION_USE_ENERGYCUBE, "USE_ENERGYCUBE", _s("Use Energy Cube"), "e", nullptr },
+	{ ACTION_DETONATE_BOMB, "DETONATE_BOMB", _s("Detonate Bomb"), "b", nullptr },
 	// TODO: The same key should be "use datalink" in no regret.
-	{ ACTION_DROP_WEAPON, "DROP_WEAPON", "Drop Weapon", nullptr, nullptr, "C+d", nullptr },
-	{ ACTION_SELECT_ITEMS, "SELECT_ITEM", "Select Item", nullptr, nullptr, "s", "KP_PLUS" },
-	{ ACTION_USE_SELECTION, "USE_SELECTION", "Use Selection", nullptr, nullptr, "RETURN", "KP_ENTER" },
-	{ ACTION_GRAB_ITEMS, "GRAB_ITEM", "Grab Items", nullptr, nullptr, "g", nullptr },
-	{ ACTION_ATTACK, "ATTACK", "Attack", nullptr, nullptr, "SPACE", "KP0" },
-	{ ACTION_CAMERA_AVATAR, "CAMERA_AVATAR", "Focus Camera on Silencer", nullptr, nullptr, "z", nullptr },
-	{ ACTION_JUMP, "JUMP", "Jump / Roll / Crouch", nullptr, nullptr, "LCTRL", nullptr },
-	{ ACTION_SHORT_JUMP, "SHORT_JUMP", "Short Jump", nullptr, nullptr, "TAB", "j" },
-	{ ACTION_STEP_LEFT, "STEP_LEFT", "Sidestep Left", nullptr, nullptr, "DELETE", "KP7" },
-	{ ACTION_STEP_RIGHT, "STEP_RIGHT", "Sidestep Rgiht", nullptr, nullptr, "PAGEDOWN", "KP9" },
-	{ ACTION_STEP_FORWARD, "STEP_FORWARD", "Step Forward", nullptr, nullptr, "HOME", "KP_DIVIDE" },
-	{ ACTION_STEP_BACK, "STEP_BACK", "Step Back", nullptr, nullptr, "END", "KP2" },
-	{ ACTION_ROLL_LEFT, "ROLL_LEFT", "Roll Left", nullptr, nullptr, "INSERT", "KP1" },
-	{ ACTION_ROLL_RIGHT, "ROLL_RIGHT", "Roll Right", nullptr, nullptr, "PAGEUP", "KP3" },
-	{ ACTION_TOGGLE_CROUCH, "TOGGLE_CROUCH", "Toggle Crouch", nullptr, nullptr, "KP5", nullptr },
-	{ ACTION_MOVE_STEP, "MOVE_STEP", "Side Step / Advance / Retreat", nullptr, nullptr, "LALT", "JOY_RIGHT_SHOULDER" },
-	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }
+	{ ACTION_DROP_WEAPON, "DROP_WEAPON", _s("Drop Weapon"), "C+d", nullptr },
+	{ ACTION_SELECT_ITEMS, "SELECT_ITEM", _s("Select Item"), "s", "KP_PLUS" },
+	{ ACTION_USE_SELECTION, "USE_SELECTION", _s("Use Selection"), "RETURN", "KP_ENTER" },
+	{ ACTION_GRAB_ITEMS, "GRAB_ITEM", _s("Grab Items"), "g", nullptr },
+	{ ACTION_ATTACK, "ATTACK", _s("Attack"), "SPACE", "KP0" },
+	{ ACTION_CAMERA_AVATAR, "CAMERA_AVATAR", _s("Focus Camera on Silencer"), "z", nullptr },
+	{ ACTION_JUMP, "JUMP", _s("Jump / Roll / Crouch"), "LCTRL", nullptr },
+	{ ACTION_SHORT_JUMP, "SHORT_JUMP", _s("Short Jump"), "TAB", "j" },
+	{ ACTION_STEP_LEFT, "STEP_LEFT", _s("Sidestep Left"), "DELETE", "KP7" },
+	{ ACTION_STEP_RIGHT, "STEP_RIGHT", _s("Sidestep Right"), "PAGEDOWN", "KP9" },
+	{ ACTION_STEP_FORWARD, "STEP_FORWARD", _s("Step Forward"), "HOME", "KP_DIVIDE" },
+	{ ACTION_STEP_BACK, "STEP_BACK", _s("Step Back"), "END", "KP2" },
+	{ ACTION_ROLL_LEFT, "ROLL_LEFT", _s("Roll Left"), "INSERT", "KP1" },
+	{ ACTION_ROLL_RIGHT, "ROLL_RIGHT", _s("Roll Right"), "PAGEUP", "KP3" },
+	{ ACTION_TOGGLE_CROUCH, "TOGGLE_CROUCH", _s("Toggle Crouch"), "KP5", nullptr },
+	{ ACTION_MOVE_STEP, "MOVE_STEP", _s("Side Step / Advance / Retreat"), "LALT", "JOY_RIGHT_SHOULDER" },
+	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr }
 };
 
 static const KeybindingRecord CHEAT_KEYS[] = {
-	{ ACTION_CLIPPING, "CLIPPING", "Toggle Clipping", nullptr, nullptr, "M+INSERT", nullptr },
-	{ ACTION_QUICK_MOVE_ASCEND, "ASCEND", "Ascend", nullptr, nullptr, "M+HOME", nullptr },
-	{ ACTION_QUICK_MOVE_DESCEND, "DESCEND", "Descend", nullptr, nullptr, "M+END", nullptr },
-	{ ACTION_QUICK_MOVE_UP, "MOVE_UP", "Move Up", nullptr, nullptr, "M+UP", nullptr },
-	{ ACTION_QUICK_MOVE_DOWN, "MOVE_DOWN", "Move Down", nullptr, nullptr, "M+DOWN", nullptr },
-	{ ACTION_QUICK_MOVE_LEFT, "MOVE_LEFT", "Move Left", nullptr, nullptr, "M+LEFT", nullptr },
-	{ ACTION_QUICK_MOVE_RIGHT, "MOVE_RIGHT", "Move Right", nullptr, nullptr, "M+RIGHT", nullptr },
-
-	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }
+	{ ACTION_CLIPPING, "CLIPPING", _s("Toggle Clipping"), "M+INSERT", nullptr },
+	{ ACTION_QUICK_MOVE_ASCEND, "ASCEND", _s("Ascend"), "M+HOME", nullptr },
+	{ ACTION_QUICK_MOVE_DESCEND, "DESCEND", _s("Descend"), "M+END", nullptr },
+	{ ACTION_QUICK_MOVE_UP, "MOVE_UP", _s("Move Up"), "M+UP", nullptr },
+	{ ACTION_QUICK_MOVE_DOWN, "MOVE_DOWN", _s("Move Down"), "M+DOWN", nullptr },
+	{ ACTION_QUICK_MOVE_LEFT, "MOVE_LEFT", _s("Move Left"), "M+LEFT", nullptr },
+	{ ACTION_QUICK_MOVE_RIGHT, "MOVE_RIGHT", _s("Move Right"), "M+RIGHT", nullptr },
+
+	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr }
 };
 
 #ifndef RELEASE_BUILD
 static const KeybindingRecord DEBUG_KEYS[] = {
-	{ ACTION_TOGGLE_TOUCHING, "TOUCHING", "Show Touching Items", nullptr, nullptr, "C+h", nullptr },
-	{ ACTION_TOGGLE_PAINT, "TOGGLE_PAINT", "Show Editor Items", nullptr, nullptr, "F9", nullptr },
-	{ ACTION_DEC_SORT_ORDER, "DEC_SORT_ORDER", "Decrement Map Sort Order", nullptr, nullptr, "LEFTBRACKET", nullptr },
-	{ ACTION_INC_SORT_ORDER, "INC_SORT_ORDER", "Increment Map Sort Order", nullptr, nullptr, "RIGHTBRACKET", nullptr },
-	{ ACTION_FRAME_BY_FRAME, "FRAME_BY_FRAME", "Toggle Frame By Frame", nullptr, nullptr, "F12", nullptr },
-	{ ACTION_ADVANCE_FRAME, "ADVANCE_FRAME", "Advance Frame", nullptr, nullptr, "f", nullptr },
-	{ ACTION_TOGGLE_STASIS, "TOGGLE_STASIS", "Toggle Avatar In Stasis", nullptr, nullptr, "F10", nullptr },
-	{ ACTION_SHAPE_VIEWER, "SHAPE_VIEWER", "Show Shape Viewer", nullptr, nullptr, "F11", nullptr },
-
-	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }
+	{ ACTION_TOGGLE_TOUCHING, "TOUCHING", _s("Show Touching Items"), "C+h", nullptr },
+	{ ACTION_TOGGLE_PAINT, "TOGGLE_PAINT", _s("Show Editor Items"), "F9", nullptr },
+	{ ACTION_DEC_SORT_ORDER, "DEC_SORT_ORDER", _s("Decrement Map Sort Order"), "LEFTBRACKET", nullptr },
+	{ ACTION_INC_SORT_ORDER, "INC_SORT_ORDER", _s("Increment Map Sort Order"), "RIGHTBRACKET", nullptr },
+	{ ACTION_FRAME_BY_FRAME, "FRAME_BY_FRAME", _s("Toggle Frame By Frame"), "F12", nullptr },
+	{ ACTION_ADVANCE_FRAME, "ADVANCE_FRAME", _s("Advance Frame"), "f", nullptr },
+	{ ACTION_TOGGLE_STASIS, "TOGGLE_STASIS", _s("Toggle Avatar In Stasis"), "F10", nullptr },
+	{ ACTION_SHAPE_VIEWER, "SHAPE_VIEWER", _s("Show Shape Viewer"), "F11", nullptr },
+
+	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr }
 };
 #endif
 
@@ -209,24 +207,6 @@ Common::KeymapArray MetaEngine::initKeymaps(const Common::String &gameId) {
 	return keymapArray;
 }
 
-Common::String MetaEngine::getMethod(KeybindingAction keyAction, bool isPress) {
-#ifdef RELEASE_BUILD
-	const KeybindingRecord *KEY_ARRAYS[] = { COMMON_KEYS, U8_KEYS, CRUSADER_KEYS, CHEAT_KEYS, nullptr };
-#else
-	const KeybindingRecord *KEY_ARRAYS[] = { COMMON_KEYS, U8_KEYS, CRUSADER_KEYS, CHEAT_KEYS, DEBUG_KEYS, nullptr };
-#endif
-
-	for (const KeybindingRecord **arr = KEY_ARRAYS; *arr; ++arr) {
-		for (const KeybindingRecord *r = *arr; r->_id; ++r) {
-			if (r->_action == keyAction) {
-				return Common::String(isPress ? r->_pressMethod : r->_releaseMethod);
-			}
-		}
-	}
-
-	return Common::String();
-}
-
 bool MetaEngine::querySaveMetaInfos(const Common::String &filename, SaveStateDescriptor& desc) {
 	Common::ScopedPtr<Common::InSaveFile> f(g_system->getSavefileManager()->openForLoading(filename));
 
diff --git a/engines/ultima/ultima8/metaengine.h b/engines/ultima/ultima8/metaengine.h
index 3a8c162aa04..33ffcae7e90 100644
--- a/engines/ultima/ultima8/metaengine.h
+++ b/engines/ultima/ultima8/metaengine.h
@@ -61,11 +61,6 @@ public:
 	 */
 	static Common::KeymapArray initKeymaps(const Common::String &gameId);
 
-	/**
-	 * Get the method to execute
-	 */
-	static Common::String getMethod(KeybindingAction keyAction, bool isPress);
-
 	/**
 	 * Return meta information from the specified save state for saves that do not have ExtendedSavegameHeader
 	 */
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index a4905e21d03..bf62c439b01 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -1170,9 +1170,6 @@ void Ultima8Engine::handleActionDown(KeybindingAction action) {
 		}
 		break;
 	default:
-		Common::String methodName = MetaEngine::getMethod(action, true);
-		if (!methodName.empty())
-			g_debugger->executeCommand(methodName);
 		break;
 	}
 }
@@ -1236,9 +1233,6 @@ void Ultima8Engine::handleActionUp(KeybindingAction action) {
 		}
 		break;
 	default:
-		Common::String methodName = MetaEngine::getMethod(action, false);
-		if (!methodName.empty())
-			g_debugger->executeCommand(methodName);
 		break;
 	}
 }


Commit: c464f5da3d8235d566effe77ae311801929e58fe
    https://github.com/scummvm/scummvm/commit/c464f5da3d8235d566effe77ae311801929e58fe
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2025-06-15T18:32:30-05:00

Commit Message:
ULTIMA8: Remove debugger commands no longer needed for keybinding.
Many more commands may not be as useful now that there are not tied to keybinding, but reamain as they did not depend on a key press & release to function fully.

Changed paths:
    engines/ultima/ultima8/misc/debugger.cpp
    engines/ultima/ultima8/misc/debugger.h


diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index 7822f0bc2f1..61b43edf056 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -65,8 +65,6 @@ Debugger *g_debugger;
 Debugger::Debugger() : GUI::Debugger() {
 	g_debugger = this;
 
-	// WARNING: Not only can the methods below be executed directly in the debugger,
-	// they also act as the methods keybindings are made to. So be wary of changing names
 	registerCmd("quit", WRAP_METHOD(Debugger, cmdQuit));
 	registerCmd("Ultima8Engine::quit", WRAP_METHOD(Debugger, cmdQuit));
 	registerCmd("Ultima8Engine::saveGame", WRAP_METHOD(Debugger, cmdSaveGame));
@@ -92,8 +90,6 @@ Debugger::Debugger() : GUI::Debugger() {
 	registerCmd("Cheat::items", WRAP_METHOD(Debugger, cmdCheatItems));
 	registerCmd("Cheat::equip", WRAP_METHOD(Debugger, cmdCheatEquip));
 
-	registerCmd("GameMapGump::startHighlightItems", WRAP_METHOD(Debugger, cmdStartHighlightItems));
-	registerCmd("GameMapGump::stopHighlightItems", WRAP_METHOD(Debugger, cmdStopHighlightItems));
 	registerCmd("GameMapGump::toggleHighlightItems", WRAP_METHOD(Debugger, cmdToggleHighlightItems));
 	registerCmd("GameMapGump::toggleFootpads", WRAP_METHOD(Debugger, cmdToggleFootpads));
 	registerCmd("GameMapGump::gridlines", WRAP_METHOD(Debugger, cmdGridlines));	
@@ -133,18 +129,6 @@ Debugger::Debugger() : GUI::Debugger() {
 	registerCmd("ObjectManager::objectTypes", WRAP_METHOD(Debugger, cmdObjectTypes));
 	registerCmd("ObjectManager::objectInfo", WRAP_METHOD(Debugger, cmdObjectInfo));
 
-	registerCmd("QuickAvatarMoverProcess::startMoveUp", WRAP_METHOD(Debugger, cmdStartQuickMoveUp));
-	registerCmd("QuickAvatarMoverProcess::startMoveDown", WRAP_METHOD(Debugger, cmdStartQuickMoveDown));
-	registerCmd("QuickAvatarMoverProcess::startMoveLeft", WRAP_METHOD(Debugger, cmdStartQuickMoveLeft));
-	registerCmd("QuickAvatarMoverProcess::startMoveRight", WRAP_METHOD(Debugger, cmdStartQuickMoveRight));
-	registerCmd("QuickAvatarMoverProcess::startAscend", WRAP_METHOD(Debugger, cmdStartQuickMoveAscend));
-	registerCmd("QuickAvatarMoverProcess::startDescend", WRAP_METHOD(Debugger, cmdStartQuickMoveDescend));
-	registerCmd("QuickAvatarMoverProcess::stopMoveUp", WRAP_METHOD(Debugger, cmdStopQuickMoveUp));
-	registerCmd("QuickAvatarMoverProcess::stopMoveDown", WRAP_METHOD(Debugger, cmdStopQuickMoveDown));
-	registerCmd("QuickAvatarMoverProcess::stopMoveLeft", WRAP_METHOD(Debugger, cmdStopQuickMoveLeft));
-	registerCmd("QuickAvatarMoverProcess::stopMoveRight", WRAP_METHOD(Debugger, cmdStopQuickMoveRight));
-	registerCmd("QuickAvatarMoverProcess::stopAscend", WRAP_METHOD(Debugger, cmdStopQuickMoveAscend));
-	registerCmd("QuickAvatarMoverProcess::stopDescend", WRAP_METHOD(Debugger, cmdStopQuickMoveDescend));
 	registerCmd("QuickAvatarMoverProcess::toggleQuarterSpeed", WRAP_METHOD(Debugger, cmdToggleQuarterSpeed));
 	registerCmd("QuickAvatarMoverProcess::toggleClipping", WRAP_METHOD(Debugger, cmdToggleClipping));
 
@@ -613,15 +597,6 @@ bool Debugger::cmdToggleInvincibility(int argc, const char **argv) {
 	return true;
 }
 
-
-bool Debugger::cmdStartHighlightItems(int argc, const char **argv) {
-	GameMapGump::Set_highlightItems(true);
-	return false;
-}
-bool Debugger::cmdStopHighlightItems(int argc, const char **argv) {
-	GameMapGump::Set_highlightItems(false);
-	return false;
-}
 bool Debugger::cmdToggleHighlightItems(int argc, const char **argv) {
 	GameMapGump::Set_highlightItems(!GameMapGump::is_highlightItems());
 	return false;
@@ -1296,88 +1271,6 @@ bool Debugger::cmdObjectInfo(int argc, const char **argv) {
 	return true;
 }
 
-static bool _quickMoveKey(uint32 flag, const char *debugname) {
-	Ultima8Engine *engine = Ultima8Engine::get_instance();
-	if (engine->isAvatarInStasis()) {
-		g_debugger->debugPrintf("Can't %s: avatarInStasis", debugname);
-		return true;
-	}
-	if (!engine->areCheatsEnabled()) {
-		g_debugger->debugPrintf("Can't %s: Cheats aren't enabled", debugname);
-		return true;
-	}
-
-	QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
-	if (proc) {
-		proc->setMovementFlag(flag);
-	}
-	return false;
-}
-
-static bool _quickMoveKeyEnd(uint32 flag) {
-	Ultima8Engine *engine = Ultima8Engine::get_instance();
-	if (engine->isAvatarInStasis()) {
-		return false;
-	}
-	if (!engine->areCheatsEnabled()) {
-		return false;
-	}
-
-	QuickAvatarMoverProcess *proc = QuickAvatarMoverProcess::get_instance();
-	if (proc) {
-		proc->clearMovementFlag(flag);
-	}
-	return false;
-}
-
-bool Debugger::cmdStartQuickMoveUp(int argc, const char **argv) {
-	return _quickMoveKey(QuickAvatarMoverProcess::MOVE_UP, "move up");
-}
-
-bool Debugger::cmdStartQuickMoveDown(int argc, const char **argv) {
-	return _quickMoveKey(QuickAvatarMoverProcess::MOVE_DOWN, "move down");
-}
-
-bool Debugger::cmdStartQuickMoveLeft(int argc, const char **argv) {
-	return _quickMoveKey(QuickAvatarMoverProcess::MOVE_LEFT, "move left");
-}
-
-bool Debugger::cmdStartQuickMoveRight(int argc, const char **argv) {
-	return _quickMoveKey(QuickAvatarMoverProcess::MOVE_RIGHT, "move right");
-}
-
-bool Debugger::cmdStartQuickMoveAscend(int argc, const char **argv) {
-	return _quickMoveKey(QuickAvatarMoverProcess::MOVE_ASCEND, "move ascend");
-}
-
-bool Debugger::cmdStartQuickMoveDescend(int argc, const char **argv) {
-	return _quickMoveKey(QuickAvatarMoverProcess::MOVE_DESCEND, "move descend");
-}
-
-bool Debugger::cmdStopQuickMoveUp(int argc, const char **argv) {
-	return _quickMoveKeyEnd(QuickAvatarMoverProcess::MOVE_UP);
-}
-
-bool Debugger::cmdStopQuickMoveDown(int argc, const char **argv) {
-	return _quickMoveKeyEnd(QuickAvatarMoverProcess::MOVE_DOWN);
-}
-
-bool Debugger::cmdStopQuickMoveLeft(int argc, const char **argv) {
-	return _quickMoveKeyEnd(QuickAvatarMoverProcess::MOVE_LEFT);
-}
-
-bool Debugger::cmdStopQuickMoveRight(int argc, const char **argv) {
-	return _quickMoveKeyEnd(QuickAvatarMoverProcess::MOVE_RIGHT);
-}
-
-bool Debugger::cmdStopQuickMoveAscend(int argc, const char **argv) {
-	return _quickMoveKeyEnd(QuickAvatarMoverProcess::MOVE_ASCEND);
-}
-
-bool Debugger::cmdStopQuickMoveDescend(int argc, const char **argv) {
-	return _quickMoveKeyEnd(QuickAvatarMoverProcess::MOVE_DESCEND);
-}
-
 bool Debugger::cmdToggleQuarterSpeed(int argc, const char **argv) {
 	QuickAvatarMoverProcess::setQuarterSpeed(!QuickAvatarMoverProcess::isQuarterSpeed());
 	return false;
diff --git a/engines/ultima/ultima8/misc/debugger.h b/engines/ultima/ultima8/misc/debugger.h
index 8ceff0d41a0..528b811cac3 100644
--- a/engines/ultima/ultima8/misc/debugger.h
+++ b/engines/ultima/ultima8/misc/debugger.h
@@ -68,8 +68,6 @@ private:
 	bool cmdToggleInvincibility(int argc, const char **argv);
 
 	// Game Map Gump
-	bool cmdStartHighlightItems(int argc, const char **argv);
-	bool cmdStopHighlightItems(int argc, const char **argv);
 	bool cmdToggleHighlightItems(int argc, const char **argv);
 	bool cmdToggleFootpads(int argc, const char **argv);
 	bool cmdGridlines(int argc, const char **argv);
@@ -113,18 +111,6 @@ private:
 	bool cmdObjectInfo(int argc, const char **argv);
 
 	// Quick Avatar Mover Process
-	bool cmdStartQuickMoveUp(int argc, const char **argv);
-	bool cmdStartQuickMoveDown(int argc, const char **argv);
-	bool cmdStartQuickMoveLeft(int argc, const char **argv);
-	bool cmdStartQuickMoveRight(int argc, const char **argv);
-	bool cmdStartQuickMoveAscend(int argc, const char **argv);
-	bool cmdStartQuickMoveDescend(int argc, const char **argv);
-	bool cmdStopQuickMoveUp(int argc, const char **argv);
-	bool cmdStopQuickMoveDown(int argc, const char **argv);
-	bool cmdStopQuickMoveLeft(int argc, const char **argv);
-	bool cmdStopQuickMoveRight(int argc, const char **argv);
-	bool cmdStopQuickMoveAscend(int argc, const char **argv);
-	bool cmdStopQuickMoveDescend(int argc, const char **argv);
 	bool cmdToggleQuarterSpeed(int argc, const char **argv);
 	bool cmdToggleClipping(int argc, const char **argv);
 


Commit: 7eb82b4a2faed379ec0906e8a68873843bd2d32c
    https://github.com/scummvm/scummvm/commit/7eb82b4a2faed379ec0906e8a68873843bd2d32c
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2025-06-15T18:32:30-05:00

Commit Message:
ULTIMA8: Remove executeCommand from debugger.
This method existed only to tie keybindings to console commands and is no longer needed.

Changed paths:
    engines/ultima/ultima8/misc/debugger.cpp
    engines/ultima/ultima8/misc/debugger.h


diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index 61b43edf056..57a128fab47 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -161,39 +161,6 @@ Debugger::~Debugger() {
 	g_debugger = nullptr;
 }
 
-
-void Debugger::executeCommand(const Common::String &args) {
-	Common::Array<Common::String> argv;
-	StringToArgv(args, argv);
-
-	executeCommand(argv);
-}
-
-void Debugger::executeCommand(const Common::Array<Common::String> &argv) {
-	if (argv.empty())
-		return;
-
-	Common::String commandName = argv[0];
-	if (commandName.hasPrefix("GUIApp::"))
-		commandName = "Ultima8Engine::" + Common::String(commandName.c_str() + 8);
-
-	Common::Array<const char *> cArgs;
-	cArgs.push_back(commandName.c_str());
-	for (uint idx = 1; idx < argv.size(); ++idx)
-		cArgs.push_back(argv[idx].c_str());
-
-	bool keepRunning = false;
-	if (!handleCommand(argv.size(), &cArgs[0], keepRunning)) {
-		debugPrintf("Unknown command - %s\n", commandName.c_str());
-		keepRunning = true;
-	}
-
-	// If any message occurred, then we need to ensure the debugger is opened if it isn't already
-	if (keepRunning)
-		attach();
-}
-
-
 bool Debugger::cmdSaveGame(int argc, const char **argv) {
 	if (argc == 2) {
 		if (!Ultima8Engine::get_instance()->canSaveGameStateCurrently()) {
diff --git a/engines/ultima/ultima8/misc/debugger.h b/engines/ultima/ultima8/misc/debugger.h
index 528b811cac3..bed48246a76 100644
--- a/engines/ultima/ultima8/misc/debugger.h
+++ b/engines/ultima/ultima8/misc/debugger.h
@@ -142,9 +142,6 @@ private:
 public:
 	Debugger();
 	~Debugger() override;
-
-	void executeCommand(const Common::String &args);
-	void executeCommand(const Common::Array<Common::String> &argv);
 };
 
 extern Debugger *g_debugger;




More information about the Scummvm-git-logs mailing list