[Scummvm-git-logs] scummvm master -> 36ef10ffe61035b92b473fecc3909f2c4473ad34

dreammaster paulfgilbert at gmail.com
Wed Apr 15 03:20:47 UTC 2020


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

Summary:
1d43f7a132 ULTIMA4: Descend to keybinder
4afd52df8f ULTIMA4: Music toggle to keybinder
fda93e493b ULTIMA4: Speed keys to keybinder
36ef10ffe6 ULTIMA4: Party character selection keybindings


Commit: 1d43f7a1324ccb688672cab05174ff575395c001
    https://github.com/scummvm/scummvm/commit/1d43f7a1324ccb688672cab05174ff575395c001
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-14T20:19:35-07:00

Commit Message:
ULTIMA4: Descend to keybinder

Changed paths:
    engines/ultima/ultima4/core/debugger.cpp
    engines/ultima/ultima4/core/debugger.h
    engines/ultima/ultima4/game/game.cpp
    engines/ultima/ultima4/meta_engine.cpp
    engines/ultima/ultima4/meta_engine.h


diff --git a/engines/ultima/ultima4/core/debugger.cpp b/engines/ultima/ultima4/core/debugger.cpp
index 12263bdf00..1eb76bb11a 100644
--- a/engines/ultima/ultima4/core/debugger.cpp
+++ b/engines/ultima/ultima4/core/debugger.cpp
@@ -431,6 +431,34 @@ bool Debugger::cmdClimb(int argc, const char **argv) {
 	return isDebuggerActive();
 }
 
+bool Debugger::cmdDescend(int argc, const char **argv) {
+	// unload the map for the second level of Lord British's Castle. The reason
+	// why is that Lord British's farewell is dependent on the number of party members.
+	// Instead of just redoing the dialog, it's a bit severe, but easier to unload the
+	// whole level.
+	bool cleanMap = (g_context->_party->size() == 1 && g_context->_location->_map->_id == 100);
+	if (!usePortalAt(g_context->_location, g_context->_location->_coords, ACTION_DESCEND)) {
+		if (g_context->_transportContext == TRANSPORT_BALLOON) {
+			print("Land Balloon");
+			if (!g_context->_party->isFlying())
+				print("%cAlready Landed!%c", FG_GREY, FG_WHITE);
+			else if (g_context->_location->_map->tileTypeAt(g_context->_location->_coords, WITH_OBJECTS)->canLandBalloon()) {
+				g_ultima->_saveGame->_balloonState = 0;
+				g_context->_opacity = 1;
+			} else {
+				print("%cNot Here!%c", FG_GREY, FG_WHITE);
+			}
+		} else {
+			print("%cDescend what?%c", FG_GREY, FG_WHITE);
+		}
+	} else {
+		if (cleanMap)
+			mapMgr->unloadMap(100);
+	}
+
+	return isDebuggerActive();
+}
+
 bool Debugger::cmdEnter(int argc, const char **argv) {
 	if (!usePortalAt(g_context->_location, g_context->_location->_coords, ACTION_ENTER)) {
 		if (!g_context->_location->_map->portalAt(g_context->_location->_coords, ACTION_ENTER))
diff --git a/engines/ultima/ultima4/core/debugger.h b/engines/ultima/ultima4/core/debugger.h
index b35e513a20..e9d82c2115 100644
--- a/engines/ultima/ultima4/core/debugger.h
+++ b/engines/ultima/ultima4/core/debugger.h
@@ -103,6 +103,11 @@ private:
 	 */
 	bool cmdClimb(int argc, const char **argv);
 
+	/**
+	 * Descend
+	 */
+	bool cmdDescend(int argc, const char **argv);
+
 	/**
 	 * Enter location
 	 */
diff --git a/engines/ultima/ultima4/game/game.cpp b/engines/ultima/ultima4/game/game.cpp
index 69c45c44ef..2dc4d78acf 100644
--- a/engines/ultima/ultima4/game/game.cpp
+++ b/engines/ultima/ultima4/game/game.cpp
@@ -659,29 +659,6 @@ bool GameController::keyPressed(int key) {
 			endTurn = false;
 			break;
 
-		case 'd': {
-			// unload the map for the second level of Lord British's Castle. The reason
-			// why is that Lord British's farewell is dependent on the number of party members.
-			// Instead of just redoing the dialog, it's a bit severe, but easier to unload the
-			// whole level.
-			bool cleanMap = (g_context->_party->size() == 1 && g_context->_location->_map->_id == 100);
-			if (!usePortalAt(g_context->_location, g_context->_location->_coords, ACTION_DESCEND)) {
-				if (g_context->_transportContext == TRANSPORT_BALLOON) {
-					screenMessage("Land Balloon\n");
-					if (!g_context->_party->isFlying())
-						screenMessage("%cAlready Landed!%c\n", FG_GREY, FG_WHITE);
-					else if (g_context->_location->_map->tileTypeAt(g_context->_location->_coords, WITH_OBJECTS)->canLandBalloon()) {
-						g_ultima->_saveGame->_balloonState = 0;
-						g_context->_opacity = 1;
-					} else screenMessage("%cNot Here!%c\n", FG_GREY, FG_WHITE);
-				} else screenMessage("%cDescend what?%c\n", FG_GREY, FG_WHITE);
-			} else {
-				if (cleanMap)
-					mapMgr->unloadMap(100);
-			}
-			break;
-		}
-
 		case 'v':
 			if (g_music->toggle())
 				screenMessage("Volume On!\n");
diff --git a/engines/ultima/ultima4/meta_engine.cpp b/engines/ultima/ultima4/meta_engine.cpp
index ee7825c7a7..1660cfdebf 100644
--- a/engines/ultima/ultima4/meta_engine.cpp
+++ b/engines/ultima/ultima4/meta_engine.cpp
@@ -47,6 +47,7 @@ static const KeybindingRecord KEYS[] = {
 	{ KEYBIND_BOARD, "BOARD", "Board", "board", "b", nullptr },
 	{ KEYBIND_CAST, "CAST", "Cast", "cast", "c", nullptr },
 	{ KEYBIND_CLIMB, "CLIMB", "Climb", "climb", "k", nullptr },
+	{ KEYBIND_DESCEND, "DESCEND", "Descend", "descend", "d", nullptr },
 	{ KEYBIND_ENTER, "ENTER", "Enter", "enter", "e", nullptr },
 	{ KEYBIND_EXIT, "EXIT", "Exit", "exit", "x", nullptr },
 	{ KEYBIND_FIRE, "FIRE", "Fire", "fire", "f", nullptr },
diff --git a/engines/ultima/ultima4/meta_engine.h b/engines/ultima/ultima4/meta_engine.h
index 44ddc026be..b439be1791 100644
--- a/engines/ultima/ultima4/meta_engine.h
+++ b/engines/ultima/ultima4/meta_engine.h
@@ -31,12 +31,13 @@ namespace Ultima4 {
 enum KeybindingAction {
 	KEYBIND_UP, KEYBIND_DOWN, KEYBIND_LEFT, KEYBIND_RIGHT,
 	KEYBIND_ATTACK, KEYBIND_BOARD, KEYBIND_CAST, KEYBIND_CLIMB,
-	KEYBIND_ENTER, KEYBIND_EXIT, KEYBIND_FIRE, KEYBIND_GET,
-	KEYBIND_HOLE_UP, KEYBIND_IGNITE, KEYBIND_JIMMY, KEYBIND_LOCATE,
-	KEYBIND_MIX, KEYBIND_NEW_ORDER, KEYBIND_OPEN_DOOR, KEYBIND_PASS,
-	KEYBIND_PEER, KEYBIND_QUIT_SAVE, KEYBIND_READY_WEAPON,
-	KEYBIND_SEARCH, KEYBIND_STATS, KEYBIND_TALK, KEYBIND_USE,
-	KEYBIND_WEAR, KEYBIND_YELL,
+	KEYBIND_DESCEND, KEYBIND_ENTER, KEYBIND_EXIT, KEYBIND_FIRE,
+	KEYBIND_GET, KEYBIND_HOLE_UP, KEYBIND_IGNITE, KEYBIND_JIMMY,
+	KEYBIND_LOCATE, KEYBIND_MIX, KEYBIND_NEW_ORDER,
+	KEYBIND_OPEN_DOOR, KEYBIND_PASS, KEYBIND_PEER,
+	KEYBIND_QUIT_SAVE, KEYBIND_READY_WEAPON, KEYBIND_SEARCH,
+	KEYBIND_STATS, KEYBIND_TALK, KEYBIND_USE, KEYBIND_WEAR,
+	KEYBIND_YELL,
 
 	KEYBIND_NONE
 };


Commit: 4afd52df8fabb355c9d284f97963eb074262113e
    https://github.com/scummvm/scummvm/commit/4afd52df8fabb355c9d284f97963eb074262113e
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-14T20:19:35-07:00

Commit Message:
ULTIMA4: Music toggle to keybinder

Changed paths:
    engines/ultima/ultima4/core/debugger.cpp
    engines/ultima/ultima4/core/debugger.h
    engines/ultima/ultima4/game/game.cpp
    engines/ultima/ultima4/meta_engine.cpp
    engines/ultima/ultima4/meta_engine.h


diff --git a/engines/ultima/ultima4/core/debugger.cpp b/engines/ultima/ultima4/core/debugger.cpp
index 1eb76bb11a..935e0327be 100644
--- a/engines/ultima/ultima4/core/debugger.cpp
+++ b/engines/ultima/ultima4/core/debugger.cpp
@@ -63,6 +63,7 @@ Debugger::Debugger() : Shared::Debugger() {
 	registerCmd("jimmy", WRAP_METHOD(Debugger, cmdJimmy));
 	registerCmd("locate", WRAP_METHOD(Debugger, cmdLocate));
 	registerCmd("mix", WRAP_METHOD(Debugger, cmdMixReagents));
+	registerCmd("musicToggle", WRAP_METHOD(Debugger, cmdMusicToggle));
 	registerCmd("open", WRAP_METHOD(Debugger, cmdOpenDoor));
 	registerCmd("order", WRAP_METHOD(Debugger, cmdNewOrder));
 	registerCmd("pass", WRAP_METHOD(Debugger, cmdPass));
@@ -702,6 +703,16 @@ bool Debugger::cmdMixReagents(int argc, const char **argv) {
 	return isDebuggerActive();
 }
 
+bool Debugger::cmdMusicToggle(int argc, const char **argv) {
+	if (g_music->toggle())
+		print("Volume On!");
+	else
+		print("Volume Off!");
+
+	dontEndTurn();
+	return isDebuggerActive();
+}
+
 bool Debugger::cmdNewOrder(int argc, const char **argv) {
 	printN("New Order!\nExchange # ");
 
diff --git a/engines/ultima/ultima4/core/debugger.h b/engines/ultima/ultima4/core/debugger.h
index e9d82c2115..ae71406f06 100644
--- a/engines/ultima/ultima4/core/debugger.h
+++ b/engines/ultima/ultima4/core/debugger.h
@@ -153,6 +153,11 @@ private:
 	 */
 	bool cmdMixReagents(int argc, const char **argv);
 
+	/**
+	 * Toggles music
+	 */
+	bool cmdMusicToggle(int argc, const char **argv);
+
 	/**
 	 * Exchanges the position of two players in the party.  Prompts the
 	 * user for the player numbers.
diff --git a/engines/ultima/ultima4/game/game.cpp b/engines/ultima/ultima4/game/game.cpp
index 2dc4d78acf..005eae0146 100644
--- a/engines/ultima/ultima4/game/game.cpp
+++ b/engines/ultima/ultima4/game/game.cpp
@@ -659,14 +659,6 @@ bool GameController::keyPressed(int key) {
 			endTurn = false;
 			break;
 
-		case 'v':
-			if (g_music->toggle())
-				screenMessage("Volume On!\n");
-			else
-				screenMessage("Volume Off!\n");
-			endTurn = false;
-			break;
-
 		case 'c' + U4_ALT:
 			if (settings._debug && g_context->_location->_map->isWorldMap()) {
 				/* first teleport to the abyss */
diff --git a/engines/ultima/ultima4/meta_engine.cpp b/engines/ultima/ultima4/meta_engine.cpp
index 1660cfdebf..9c2159ece8 100644
--- a/engines/ultima/ultima4/meta_engine.cpp
+++ b/engines/ultima/ultima4/meta_engine.cpp
@@ -66,6 +66,7 @@ static const KeybindingRecord KEYS[] = {
 	{ KEYBIND_SEARCH, "SEARCH", "Search", "search", "s", nullptr },
 	{ KEYBIND_STATS, "STATS", "Stats", "stats", "z", nullptr },
 	{ KEYBIND_TALK, "TALK", "Talk", "talk", "t", nullptr },
+	{ KEYBIND_TOGGLE_MUSIC, "TOGGLE-MUSIC", "Toggle Music", "musicToggle", "v", nullptr },
 	{ KEYBIND_USE, "USE", "Use", "use", "u", nullptr },
 	{ KEYBIND_WEAR, "WEAR", "Wear Armor", "wear", "w", nullptr },
 	{ KEYBIND_YELL, "YELL", "Yell", "yell", "y", nullptr },
diff --git a/engines/ultima/ultima4/meta_engine.h b/engines/ultima/ultima4/meta_engine.h
index b439be1791..cd56702d31 100644
--- a/engines/ultima/ultima4/meta_engine.h
+++ b/engines/ultima/ultima4/meta_engine.h
@@ -36,8 +36,8 @@ enum KeybindingAction {
 	KEYBIND_LOCATE, KEYBIND_MIX, KEYBIND_NEW_ORDER,
 	KEYBIND_OPEN_DOOR, KEYBIND_PASS, KEYBIND_PEER,
 	KEYBIND_QUIT_SAVE, KEYBIND_READY_WEAPON, KEYBIND_SEARCH,
-	KEYBIND_STATS, KEYBIND_TALK, KEYBIND_USE, KEYBIND_WEAR,
-	KEYBIND_YELL,
+	KEYBIND_STATS, KEYBIND_TALK, KEYBIND_TOGGLE_MUSIC,
+	KEYBIND_USE, KEYBIND_WEAR, KEYBIND_YELL,
 
 	KEYBIND_NONE
 };


Commit: fda93e493b53b124e829c3930e8cbb24951dd06d
    https://github.com/scummvm/scummvm/commit/fda93e493b53b124e829c3930e8cbb24951dd06d
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-14T20:19:35-07:00

Commit Message:
ULTIMA4: Speed keys to keybinder

Changed paths:
    engines/ultima/ultima4/core/debugger.cpp
    engines/ultima/ultima4/core/debugger.h
    engines/ultima/ultima4/game/game.cpp
    engines/ultima/ultima4/meta_engine.cpp
    engines/ultima/ultima4/meta_engine.h


diff --git a/engines/ultima/ultima4/core/debugger.cpp b/engines/ultima/ultima4/core/debugger.cpp
index 935e0327be..11302c9444 100644
--- a/engines/ultima/ultima4/core/debugger.cpp
+++ b/engines/ultima/ultima4/core/debugger.cpp
@@ -890,6 +890,38 @@ bool Debugger::cmdSearch(int argc, const char **argv) {
 	return isDebuggerActive();
 }
 
+bool Debugger::cmdSpeed(int argc, const char **argv) {
+	Common::String action = argv[1];
+	int old_cycles = settings._gameCyclesPerSecond;
+
+	if (action == "up") {
+		if (++settings._gameCyclesPerSecond > MAX_CYCLES_PER_SECOND)
+			settings._gameCyclesPerSecond = MAX_CYCLES_PER_SECOND;
+	} else if (action == "down") {
+		if (--settings._gameCyclesPerSecond == 0)
+			settings._gameCyclesPerSecond = 1;
+	} else if (action == "normal") {
+		settings._gameCyclesPerSecond = DEFAULT_CYCLES_PER_SECOND;
+	}
+
+	if (old_cycles != settings._gameCyclesPerSecond) {
+		settings._eventTimerGranularity = (1000 / settings._gameCyclesPerSecond);
+		eventHandler->getTimer()->reset(settings._eventTimerGranularity);
+
+		if (settings._gameCyclesPerSecond == DEFAULT_CYCLES_PER_SECOND)
+			print("Speed: Normal");
+		else if (action == "up")
+			print("Speed Up (%d)", settings._gameCyclesPerSecond);
+		else
+			print("Speed Down (%d)", settings._gameCyclesPerSecond);
+	} else if (settings._gameCyclesPerSecond == DEFAULT_CYCLES_PER_SECOND) {
+		print("Speed: Normal");
+	}
+
+	dontEndTurn();
+	return isDebuggerActive();
+}
+
 bool Debugger::cmdStats(int argc, const char **argv) {
 	int player = -1;
 	if (argc == 2)
diff --git a/engines/ultima/ultima4/core/debugger.h b/engines/ultima/ultima4/core/debugger.h
index ae71406f06..1906c477a8 100644
--- a/engines/ultima/ultima4/core/debugger.h
+++ b/engines/ultima/ultima4/core/debugger.h
@@ -195,6 +195,11 @@ private:
 	 */
 	bool cmdSearch(int argc, const char **argv);
 
+	/**
+	 * Speed up, down, or normal
+	 */
+	bool cmdSpeed(int argc, const char **argv);
+
 	/**
 	 * Show character stats
 	 */
diff --git a/engines/ultima/ultima4/game/game.cpp b/engines/ultima/ultima4/game/game.cpp
index 005eae0146..f1da64d623 100644
--- a/engines/ultima/ultima4/game/game.cpp
+++ b/engines/ultima/ultima4/game/game.cpp
@@ -602,63 +602,6 @@ bool GameController::keyPressed(int key) {
 		screenMessage("%cNot here!%c\n", FG_GREY, FG_WHITE);
 	else
 		switch (key) {
-		case ' ':
-			screenMessage("Pass\n");
-			break;
-
-		case '+':
-		case '-':
-		case U4_KEYPAD_ENTER: {
-			int old_cycles = settings._gameCyclesPerSecond;
-			if (key == '+' && ++settings._gameCyclesPerSecond > MAX_CYCLES_PER_SECOND)
-				settings._gameCyclesPerSecond = MAX_CYCLES_PER_SECOND;
-			else if (key == '-' && --settings._gameCyclesPerSecond == 0)
-				settings._gameCyclesPerSecond = 1;
-			else if (key == U4_KEYPAD_ENTER)
-				settings._gameCyclesPerSecond = DEFAULT_CYCLES_PER_SECOND;
-
-			if (old_cycles != settings._gameCyclesPerSecond) {
-				settings._eventTimerGranularity = (1000 / settings._gameCyclesPerSecond);
-				eventHandler->getTimer()->reset(settings._eventTimerGranularity);
-
-				if (settings._gameCyclesPerSecond == DEFAULT_CYCLES_PER_SECOND)
-					screenMessage("Speed: Normal\n");
-				else if (key == '+')
-					screenMessage("Speed Up (%d)\n", settings._gameCyclesPerSecond);
-				else screenMessage("Speed Down (%d)\n", settings._gameCyclesPerSecond);
-			} else if (settings._gameCyclesPerSecond == DEFAULT_CYCLES_PER_SECOND)
-				screenMessage("Speed: Normal\n");
-		}
-
-		endTurn = false;
-		break;
-
-		/* handle music volume adjustments */
-		case ',':
-			// decrease the volume if possible
-			screenMessage("Music: %d%s\n", g_music->decreaseMusicVolume(), "%");
-			endTurn = false;
-			break;
-		case '.':
-			// increase the volume if possible
-			screenMessage("Music: %d%s\n", g_music->increaseMusicVolume(), "%");
-			endTurn = false;
-			break;
-
-		/* handle sound volume adjustments */
-		case '<':
-			// decrease the volume if possible
-			screenMessage("Sound: %d%s\n", g_music->decreaseSoundVolume(), "%");
-			soundPlay(SOUND_FLEE);
-			endTurn = false;
-			break;
-		case '>':
-			// increase the volume if possible
-			screenMessage("Sound: %d%s\n", g_music->increaseSoundVolume(), "%");
-			soundPlay(SOUND_FLEE);
-			endTurn = false;
-			break;
-
 		case 'c' + U4_ALT:
 			if (settings._debug && g_context->_location->_map->isWorldMap()) {
 				/* first teleport to the abyss */
diff --git a/engines/ultima/ultima4/meta_engine.cpp b/engines/ultima/ultima4/meta_engine.cpp
index 9c2159ece8..3f1a10be89 100644
--- a/engines/ultima/ultima4/meta_engine.cpp
+++ b/engines/ultima/ultima4/meta_engine.cpp
@@ -62,8 +62,11 @@ static const KeybindingRecord KEYS[] = {
 	{ KEYBIND_PASS, "PASS", "Pass", "pass", "SPACE", nullptr },
 	{ KEYBIND_PEER, "PEER", "Peer", "peer", "p", nullptr },
 	{ KEYBIND_QUIT_SAVE, "QUIT-SAVE", "Quit and Save", "quitAndSave", "q", nullptr },
-	{ KEYBIND_READY_WEAPON, "READY-WEAPON", "Ready Weapon", "ready", nullptr },
+	{ KEYBIND_READY_WEAPON, "READY-WEAPON", "Ready Weapon", "ready", "r", nullptr },
 	{ KEYBIND_SEARCH, "SEARCH", "Search", "search", "s", nullptr },
+	{ KEYBIND_SPEED_UP, "SPEED-UP", "Speed Up", "speed up", "PLUS", nullptr },
+	{ KEYBIND_SPEED_DOWN, "SPEED-DOWN", "Speed Down", "speed down", "MINUS", nullptr },
+	{ KEYBIND_SPEED_NORMAL, "SPEED-NORMAL", "Speed Normal", "speed normal", "KP_ENTER", nullptr },
 	{ KEYBIND_STATS, "STATS", "Stats", "stats", "z", nullptr },
 	{ KEYBIND_TALK, "TALK", "Talk", "talk", "t", nullptr },
 	{ KEYBIND_TOGGLE_MUSIC, "TOGGLE-MUSIC", "Toggle Music", "musicToggle", "v", nullptr },
diff --git a/engines/ultima/ultima4/meta_engine.h b/engines/ultima/ultima4/meta_engine.h
index cd56702d31..1d2efe7943 100644
--- a/engines/ultima/ultima4/meta_engine.h
+++ b/engines/ultima/ultima4/meta_engine.h
@@ -35,9 +35,10 @@ enum KeybindingAction {
 	KEYBIND_GET, KEYBIND_HOLE_UP, KEYBIND_IGNITE, KEYBIND_JIMMY,
 	KEYBIND_LOCATE, KEYBIND_MIX, KEYBIND_NEW_ORDER,
 	KEYBIND_OPEN_DOOR, KEYBIND_PASS, KEYBIND_PEER,
-	KEYBIND_QUIT_SAVE, KEYBIND_READY_WEAPON, KEYBIND_SEARCH,
-	KEYBIND_STATS, KEYBIND_TALK, KEYBIND_TOGGLE_MUSIC,
-	KEYBIND_USE, KEYBIND_WEAR, KEYBIND_YELL,
+	KEYBIND_QUIT_SAVE, KEYBIND_SPEED_UP, KEYBIND_SPEED_DOWN,
+	KEYBIND_SPEED_NORMAL, KEYBIND_READY_WEAPON, KEYBIND_SEARCH,
+	KEYBIND_STATS, KEYBIND_TALK, KEYBIND_TOGGLE_MUSIC, KEYBIND_USE,
+	KEYBIND_WEAR, KEYBIND_YELL,
 
 	KEYBIND_NONE
 };


Commit: 36ef10ffe61035b92b473fecc3909f2c4473ad34
    https://github.com/scummvm/scummvm/commit/36ef10ffe61035b92b473fecc3909f2c4473ad34
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-14T20:19:35-07:00

Commit Message:
ULTIMA4: Party character selection keybindings

Changed paths:
    engines/ultima/ultima4/core/debugger.cpp
    engines/ultima/ultima4/core/debugger.h
    engines/ultima/ultima4/game/game.cpp
    engines/ultima/ultima4/meta_engine.cpp
    engines/ultima/ultima4/meta_engine.h


diff --git a/engines/ultima/ultima4/core/debugger.cpp b/engines/ultima/ultima4/core/debugger.cpp
index 11302c9444..3643a0bccc 100644
--- a/engines/ultima/ultima4/core/debugger.cpp
+++ b/engines/ultima/ultima4/core/debugger.cpp
@@ -66,6 +66,7 @@ Debugger::Debugger() : Shared::Debugger() {
 	registerCmd("musicToggle", WRAP_METHOD(Debugger, cmdMusicToggle));
 	registerCmd("open", WRAP_METHOD(Debugger, cmdOpenDoor));
 	registerCmd("order", WRAP_METHOD(Debugger, cmdNewOrder));
+	registerCmd("party", WRAP_METHOD(Debugger, cmdParty));
 	registerCmd("pass", WRAP_METHOD(Debugger, cmdPass));
 	registerCmd("peer", WRAP_METHOD(Debugger, cmdPeer));
 	registerCmd("quitAndSave", WRAP_METHOD(Debugger, cmdQuitAndSave));
@@ -130,7 +131,7 @@ void Debugger::printN(const char *fmt, ...) {
 		// relevant for showing the text in the debugger
 		Common::String s;
 		for (Common::String::iterator it = str.begin(); it != str.end(); ++it) {
-			if (*it <= ' ' && *it != '\n')
+			if (*it >= ' ' || *it == '\n')
 				s += *it;
 		}
 
@@ -143,9 +144,11 @@ void Debugger::printN(const char *fmt, ...) {
 bool Debugger::handleCommand(int argc, const char **argv, bool &keepRunning) {
 	bool result = Shared::Debugger::handleCommand(argc, argv, keepRunning);
 
-	if (result && !isActive()) {
-		if (!_dontEndTurn)
+	if (result) {
+		if (!isActive() && !_dontEndTurn)
 			g_game->finishTurn();
+		else if (_dontEndTurn && eventHandler->getController() == g_game)
+			g_context->_location->_turnCompleter->finishTurn();
 	}
 
 	_dontEndTurn = false;
@@ -773,6 +776,18 @@ bool Debugger::cmdOpenDoor(int argc, const char **argv) {
 	return isDebuggerActive();
 }
 
+bool Debugger::cmdParty(int argc, const char **argv) {
+	if (settings._enhancements && settings._enhancementsOptions._activePlayer) {
+		int player = (argc == 2) ? strToInt(argv[1]) - 1 : -1;
+		gameSetActivePlayer(player);
+	} else {
+		print("%cBad command!%c", FG_GREY, FG_WHITE);
+	}
+
+	dontEndTurn();
+	return isDebuggerActive();
+}
+
 bool Debugger::cmdPass(int argc, const char **argv) {
 	print("Pass");
 	return isDebuggerActive();
@@ -1069,8 +1084,6 @@ bool Debugger::cmdCollisions(int argc, const char **argv) {
 
 bool Debugger::cmdCompanions(int argc, const char **argv) {
 	for (int m = g_ultima->_saveGame->_members; m < 8; m++) {
-		debug("m = %d\n", m);
-		debug("n = %s\n", g_ultima->_saveGame->_players[m].name);
 		if (g_context->_party->canPersonJoin(g_ultima->_saveGame->_players[m].name, NULL)) {
 			g_context->_party->join(g_ultima->_saveGame->_players[m].name);
 		}
diff --git a/engines/ultima/ultima4/core/debugger.h b/engines/ultima/ultima4/core/debugger.h
index 1906c477a8..e1cddf4f6a 100644
--- a/engines/ultima/ultima4/core/debugger.h
+++ b/engines/ultima/ultima4/core/debugger.h
@@ -169,6 +169,11 @@ private:
 	 */
 	bool cmdOpenDoor(int argc, const char **argv);
 
+	/**
+	 * Specifies a particular party number
+	 */
+	bool cmdParty(int argc, const char **argv);
+
 	/**
 	 * Pass turn
 	 */
diff --git a/engines/ultima/ultima4/game/game.cpp b/engines/ultima/ultima4/game/game.cpp
index f1da64d623..fdfa57eb0f 100644
--- a/engines/ultima/ultima4/game/game.cpp
+++ b/engines/ultima/ultima4/game/game.cpp
@@ -615,154 +615,6 @@ bool GameController::keyPressed(int key) {
 			}
 			break;
 
-		case 'h' + U4_ALT: {
-#ifdef IOS
-			U4IOS::IOSHideActionKeysHelper hideActionKeys;
-#endif
-			ReadChoiceController pauseController("");
-
-			screenMessage("Key Reference:\n"
-			              "Arrow Keys: Move\n"
-			              "a: Attack\n"
-			              "b: Board\n"
-			              "c: Cast Spell\n"
-			              "d: Descend\n"
-			              "e: Enter\n"
-			              "f: Fire Cannons\n"
-			              "g: Get Chest\n"
-			              "h: Hole up\n"
-			              "i: Ignite torch\n"
-			              "(more)");
-
-			eventHandler->pushController(&pauseController);
-			pauseController.waitFor();
-
-			screenMessage("\n"
-			              "j: Jimmy lock\n"
-			              "k: Klimb\n"
-			              "l: Locate\n"
-			              "m: Mix reagents\n"
-			              "n: New Order\n"
-			              "o: Open door\n"
-			              "p: Peer at Gem\n"
-			              "q: Quit & Save\n"
-			              "r: Ready weapon\n"
-			              "s: Search\n"
-			              "t: Talk\n"
-			              "(more)");
-
-			eventHandler->pushController(&pauseController);
-			pauseController.waitFor();
-
-			screenMessage("\n"
-			              "u: Use Item\n"
-			              "v: Volume On/Off\n"
-			              "w: Wear armour\n"
-			              "x: eXit\n"
-			              "y: Yell\n"
-			              "z: Ztats\n"
-			              "Space: Pass\n"
-			              ",: - Music Vol\n"
-			              ".: + Music Vol\n"
-			              "<: - Sound Vol\n"
-			              ">: + Sound Vol\n"
-			              "(more)");
-
-			eventHandler->pushController(&pauseController);
-			pauseController.waitFor();
-
-			screenMessage("\n"
-			              "Alt-Q: Main Menu\n"
-			              "Alt-V: Version\n"
-			              "Alt-X: Quit\n"
-			              "\n"
-			              "\n"
-			              "\n"
-			              "\n"
-			              "\n"
-			              "\n"
-			              "\n"
-			              "\n"
-			             );
-			screenPrompt();
-			break;
-		}
-
-		case 'q' + U4_ALT: {
-			// TODO - implement loop in main() and let quit fall back to there
-			// Quit to the main menu
-			endTurn = false;
-
-			screenMessage("Quit to menu?");
-			char choice = ReadChoiceController::get("yn \n\033");
-			screenMessage("%c", choice);
-			if (choice != 'y') {
-				screenMessage("\n");
-				break;
-			}
-
-			eventHandler->setScreenUpdate(NULL);
-			eventHandler->popController();
-
-			eventHandler->pushController(intro);
-
-			// Fade out the music and hide the cursor
-			//before returning to the menu.
-			g_music->fadeOut(1000);
-			screenHideCursor();
-
-			intro->init();
-			eventHandler->run();
-
-
-			if (!g_ultima->shouldQuit()) {
-				eventHandler->setControllerDone(false);
-				eventHandler->popController();
-				eventHandler->pushController(this);
-
-
-				if (intro->hasInitiatedNewGame()) {
-					//Loads current savegame
-					init();
-				} else {
-					//Inits screen stuff without renewing game
-					initScreen();
-					initScreenWithoutReloadingState();
-				}
-
-				this->_mapArea.reinit();
-
-				intro->deleteIntro();
-				eventHandler->run();
-			}
-		}
-		break;
-
-		// Turn sound effects on/off
-		case 's' + U4_ALT:
-			// FIXME: there's probably a more intuitive key combination for this
-			settings._soundVol = !settings._soundVol;
-			screenMessage("Sound FX %s!\n", settings._soundVol ? "on" : "off");
-			endTurn = false;
-			break;
-
-		case '0':
-		case '1':
-		case '2':
-		case '3':
-		case '4':
-		case '5':
-		case '6':
-		case '7':
-		case '8':
-		case '9':
-			if (settings._enhancements && settings._enhancementsOptions._activePlayer)
-				gameSetActivePlayer(key - '1');
-			else screenMessage("%cBad command!%c\n", FG_GREY, FG_WHITE);
-
-			endTurn = 0;
-			break;
-
 		default:
 			valid = false;
 			break;
diff --git a/engines/ultima/ultima4/meta_engine.cpp b/engines/ultima/ultima4/meta_engine.cpp
index 3f1a10be89..cee8d0af2e 100644
--- a/engines/ultima/ultima4/meta_engine.cpp
+++ b/engines/ultima/ultima4/meta_engine.cpp
@@ -77,39 +77,68 @@ static const KeybindingRecord KEYS[] = {
 	{ KEYBIND_NONE, nullptr, nullptr, nullptr, nullptr, nullptr }
 };
 
+static const KeybindingRecord PARTY_KEYS[] = {
+	{ KEYBIND_PARTY0, "PARTY0", "Party - None", "party 0", "0", nullptr },
+	{ KEYBIND_PARTY1, "PARTY1", "Party - Character #1", "party 1", "1", nullptr },
+	{ KEYBIND_PARTY2, "PARTY2", "Party - Character #2", "party 2", "2", nullptr },
+	{ KEYBIND_PARTY3, "PARTY3", "Party - Character #3", "party 3", "3", nullptr },
+	{ KEYBIND_PARTY4, "PARTY4", "Party - Character #4", "party 4", "4", nullptr },
+	{ KEYBIND_PARTY5, "PARTY5", "Party - Character #5", "party 5", "5", nullptr },
+	{ KEYBIND_PARTY6, "PARTY6", "Party - Character #6", "party 6", "6", nullptr },
+	{ KEYBIND_PARTY7, "PARTY7", "Party - Character #7", "party 7", "7", nullptr },
+	{ KEYBIND_PARTY8, "PARTY8", "Party - Character #8", "party 8", "8", nullptr },
+
+	{ KEYBIND_NONE, nullptr, nullptr, nullptr, nullptr, nullptr }
+};
+
 static const KeybindingRecord CHEAT_KEYS[] = {
 	{ KEYBIND_NONE, nullptr, nullptr, nullptr, nullptr, nullptr }
 };
 
+struct KeysRecord {
+	const char *_id;
+	const char *_desc;
+	const KeybindingRecord *_keys;
+};
+static const KeysRecord KEYS_RECORDS[3] = {
+	{ "ultima4", "Ultima IV", KEYS },
+	{ "ultima4_party", "Ultima IV - Party", PARTY_KEYS },
+	{ "ultima4_cheats", "Ultima IV - Cheats", CHEAT_KEYS },
+};
 
 Common::KeymapArray MetaEngine::initKeymaps() {
 	Common::KeymapArray keymapArray;
-
-	// Core keymaps
-	Common::Keymap *keyMap = new Common::Keymap(Common::Keymap::kKeymapTypeGame, "ultima4", _("Ultima IV"));
-	keymapArray.push_back(keyMap);
-
+	Common::Keymap *keyMap;
 	Common::Action *act;
 
-	act = new Common::Action("LCLK", _("Interact via Left Click"));
-	act->setLeftClickEvent();
-	act->addDefaultInputMapping("MOUSE_LEFT");
-	act->addDefaultInputMapping("JOY_A");
-	keyMap->addAction(act);
-
-	act = new Common::Action("RCLK", _("Interact via Right Click"));
-	act->setRightClickEvent();
-	act->addDefaultInputMapping("MOUSE_RIGHT");
-	act->addDefaultInputMapping("JOY_B");
-	keyMap->addAction(act);
-
-	for (const KeybindingRecord *r = KEYS; r->_id; ++r) {
-		act = new Common::Action(r->_id, _(r->_desc));
-		act->setCustomEngineActionEvent(r->_action);
-		act->addDefaultInputMapping(r->_key);
-		if (r->_joy)
-			act->addDefaultInputMapping(r->_joy);
-		keyMap->addAction(act);
+	for (int kCtr = 0; kCtr < 3; ++kCtr) {
+		// Core keymaps
+		keyMap = new Common::Keymap(Common::Keymap::kKeymapTypeGame,
+			KEYS_RECORDS[kCtr]._id, _(KEYS_RECORDS[kCtr]._desc));
+		keymapArray.push_back(keyMap);
+
+		if (kCtr == 0) {
+			act = new Common::Action("LCLK", _("Interact via Left Click"));
+			act->setLeftClickEvent();
+			act->addDefaultInputMapping("MOUSE_LEFT");
+			act->addDefaultInputMapping("JOY_A");
+			keyMap->addAction(act);
+
+			act = new Common::Action("RCLK", _("Interact via Right Click"));
+			act->setRightClickEvent();
+			act->addDefaultInputMapping("MOUSE_RIGHT");
+			act->addDefaultInputMapping("JOY_B");
+			keyMap->addAction(act);
+		}
+
+		for (const KeybindingRecord *r = KEYS_RECORDS[kCtr]._keys; r->_id; ++r) {
+			act = new Common::Action(r->_id, _(r->_desc));
+			act->setCustomEngineActionEvent(r->_action);
+			act->addDefaultInputMapping(r->_key);
+			if (r->_joy)
+				act->addDefaultInputMapping(r->_joy);
+			keyMap->addAction(act);
+		}
 	}
 
 	return keymapArray;
@@ -127,10 +156,8 @@ void MetaEngine::executeAction(KeybindingAction keyAction) {
 }
 
 Common::String MetaEngine::getMethod(KeybindingAction keyAction) {
-	const KeybindingRecord *KEY_ARRAYS[] = { KEYS, CHEAT_KEYS, nullptr };
-
-	for (const KeybindingRecord **arr = KEY_ARRAYS; *arr; ++arr) {
-		for (const KeybindingRecord *r = *arr; r->_id; ++r) {
+	for (int kCtr = 0; kCtr < 3; ++kCtr) {
+		for (const KeybindingRecord *r = KEYS_RECORDS[kCtr]._keys; r->_id; ++r) {
 			if (r->_action == keyAction)
 				return r->_method;
 		}
diff --git a/engines/ultima/ultima4/meta_engine.h b/engines/ultima/ultima4/meta_engine.h
index 1d2efe7943..46f711a306 100644
--- a/engines/ultima/ultima4/meta_engine.h
+++ b/engines/ultima/ultima4/meta_engine.h
@@ -40,6 +40,10 @@ enum KeybindingAction {
 	KEYBIND_STATS, KEYBIND_TALK, KEYBIND_TOGGLE_MUSIC, KEYBIND_USE,
 	KEYBIND_WEAR, KEYBIND_YELL,
 
+	KEYBIND_PARTY0, KEYBIND_PARTY1, KEYBIND_PARTY2, KEYBIND_PARTY3,
+	KEYBIND_PARTY4, KEYBIND_PARTY5, KEYBIND_PARTY6, KEYBIND_PARTY7,
+	KEYBIND_PARTY8,
+
 	KEYBIND_NONE
 };
 




More information about the Scummvm-git-logs mailing list