[Scummvm-git-logs] scummvm master -> 6cb8460d443849174364fdc1f7fa3366ec36a52a

dreammaster paulfgilbert at gmail.com
Fri May 1 04:25:19 UTC 2020


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

Summary:
9069ae3f8f ULTIMA4: Fix loading combat maps
b2544ee9ae ULTIMA4: Beginnings of keymapping for combat controller
6cb8460d44 ULTIMA4: Direction keys and Pass actions for combat controller


Commit: 9069ae3f8fbdcb7eb38af15f87c07d76cdef792c
    https://github.com/scummvm/scummvm/commit/9069ae3f8fbdcb7eb38af15f87c07d76cdef792c
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-30T21:23:03-07:00

Commit Message:
ULTIMA4: Fix loading combat maps

Changed paths:
    engines/ultima/ultima4/map/maploader.cpp


diff --git a/engines/ultima/ultima4/map/maploader.cpp b/engines/ultima/ultima4/map/maploader.cpp
index b77c32020f..b9fb1a5b68 100644
--- a/engines/ultima/ultima4/map/maploader.cpp
+++ b/engines/ultima/ultima4/map/maploader.cpp
@@ -55,6 +55,7 @@ MapLoaders::MapLoaders() {
 	(*this)[Map::SHRINE] = new ConMapLoader();
 	(*this)[Map::DUNGEON] = new DngMapLoader();
 	(*this)[Map::WORLD] = new WorldMapLoader();
+	(*this)[Map::COMBAT] = new WorldMapLoader();
 }
 
 MapLoaders::~MapLoaders() {


Commit: b2544ee9ae79c58a73143c929150ce5bf3df86f4
    https://github.com/scummvm/scummvm/commit/b2544ee9ae79c58a73143c929150ce5bf3df86f4
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-30T21:23:03-07:00

Commit Message:
ULTIMA4: Beginnings of keymapping for combat controller

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


diff --git a/engines/ultima/ultima4/controllers/combat_controller.cpp b/engines/ultima/ultima4/controllers/combat_controller.cpp
index 53406464ad..bd9d470a7d 100644
--- a/engines/ultima/ultima4/controllers/combat_controller.cpp
+++ b/engines/ultima/ultima4/controllers/combat_controller.cpp
@@ -54,6 +54,8 @@
 namespace Ultima {
 namespace Ultima4 {
 
+CombatController *g_combat;
+
 extern void gameDestroyAllCreatures();
 
 /**
@@ -109,9 +111,12 @@ CombatController::CombatController(MapId id) : _map(nullptr) {
 
 CombatController::~CombatController() {
 	g_context->_party->deleteObserver(this);
+	g_combat = nullptr;
 }
 
 void CombatController::init() {
+	g_combat = this;
+
 	_focus = 0;
 	Common::fill(&_creatureTable[0], &_creatureTable[AREA_CREATURES],
 		(const Creature *)nullptr);
@@ -126,6 +131,11 @@ void CombatController::init() {
 	_exitDir = DIR_NONE;
 }
 
+void CombatController::setActive() {
+	// The game controller has the keybindings enabled
+	MetaEngine::setKeybindingMode(KBMODE_COMBAT);
+}
+
 // Accessor Methods
 bool CombatController::isCamping() const {
 	return _camping;
@@ -854,7 +864,10 @@ void CombatController::movePartyMember(MoveEvent &event) {
 	}
 }
 
-// Key handlers
+void CombatController::keybinder(KeybindingAction action) {
+	MetaEngine::executeAction(action);
+}
+
 bool CombatController::keyPressed(int key) {
 	bool valid = true;
 	bool endTurn = true;
@@ -867,13 +880,6 @@ bool CombatController::keyPressed(int key) {
 		g_context->_location->move(keyToDirection(key), true);
 		break;
 
-	case Common::KEYCODE_ESCAPE:
-		if (settings._debug)
-			end(false);         /* don't adjust karma */
-		else g_screen->screenMessage("Bad command\n");
-
-		break;
-
 	case ' ':
 		g_screen->screenMessage("Pass\n");
 		break;
diff --git a/engines/ultima/ultima4/controllers/combat_controller.h b/engines/ultima/ultima4/controllers/combat_controller.h
index 07e6968705..fe5acf1e56 100644
--- a/engines/ultima/ultima4/controllers/combat_controller.h
+++ b/engines/ultima/ultima4/controllers/combat_controller.h
@@ -70,6 +70,11 @@ public:
 		return true;
 	}
 
+	/**
+	 * Called when a controller is made active
+	 */
+	void setActive() override;
+
 	bool isCamping() const;
 	bool isWinOrLose() const;
 	Direction getExitDir() const;
@@ -169,6 +174,7 @@ public:
 	static void doScreenAnimationsWhilePausing(int timeFactor);
 
 	// Key handlers
+	void keybinder(KeybindingAction action) override;
 	bool keyPressed(int key) override;
 
 	void finishTurn() override;
@@ -204,6 +210,8 @@ private:
 	void init();
 };
 
+extern CombatController *g_combat;
+
 /**
  * CombatMap class
  */
diff --git a/engines/ultima/ultima4/core/debugger.cpp b/engines/ultima/ultima4/core/debugger.cpp
index a629bd616c..694700c2c5 100644
--- a/engines/ultima/ultima4/core/debugger.cpp
+++ b/engines/ultima/ultima4/core/debugger.cpp
@@ -42,6 +42,7 @@
 #include "ultima/ultima4/map/dungeonview.h"
 #include "ultima/ultima4/map/mapmgr.h"
 #include "ultima/ultima4/ultima4.h"
+#include "common/system.h"
 
 namespace Ultima {
 namespace Ultima4 {
@@ -91,6 +92,7 @@ Debugger::Debugger() : Shared::Debugger() {
 	registerCmd("dungeon", WRAP_METHOD(Debugger, cmdDungeon));
 	registerCmd("equipment", WRAP_METHOD(Debugger, cmdEquipment));
 	registerCmd("exit", WRAP_METHOD(Debugger, cmdExit));
+	registerCmd("flee", WRAP_METHOD(Debugger, cmdFlee));
 	registerCmd("fullstats", WRAP_METHOD(Debugger, cmdFullStats));
 	registerCmd("gate", WRAP_METHOD(Debugger, cmdGate));
 	registerCmd("goto", WRAP_METHOD(Debugger, cmdGoto));
@@ -170,11 +172,17 @@ bool Debugger::handleCommand(int argc, const char **argv, bool &keepRunning) {
 	bool result = Shared::Debugger::handleCommand(argc, argv, keepRunning);
 
 	if (result) {
+		if (g_context)
+			g_context->_lastCommandTime = g_system->getMillis();
+
 		if (!isActive() && !_dontEndTurn) {
 			g_game->finishTurn();
-		} else if (_dontEndTurn && eventHandler->getController() == g_game) {
-			assert(g_context);
-			g_context->_location->_turnCompleter->finishTurn();
+		} else if (_dontEndTurn) {
+			Controller *ctl = eventHandler->getController();
+			if (ctl == g_game || ctl == g_combat) {
+				assert(g_context);
+				g_context->_location->_turnCompleter->finishTurn();
+			}
 		}
 	}
 
@@ -1273,6 +1281,17 @@ bool Debugger::cmdDungeon(int argc, const char **argv) {
 	return isDebuggerActive();
 }
 
+bool Debugger::cmdFlee(int argc, const char **argv) {
+	if (eventHandler->getController() == g_combat) {
+		// End the combat without losing karma
+		g_combat->end(false);
+	} else {
+		g_screen->screenMessage("Bad command\n");
+	}
+
+	return isDebuggerActive();
+}
+
 bool Debugger::cmdEquipment(int argc, const char **argv) {
 	int i;
 
diff --git a/engines/ultima/ultima4/core/debugger.h b/engines/ultima/ultima4/core/debugger.h
index 8c818ce01a..e4871c5307 100644
--- a/engines/ultima/ultima4/core/debugger.h
+++ b/engines/ultima/ultima4/core/debugger.h
@@ -265,6 +265,11 @@ private:
 	 */
 	bool cmdDungeon(int argc, const char **argv);
 
+	/**
+	 * Flee from combat
+	 */
+	bool cmdFlee(int argc, const char **argv);
+
 	/**
 	 * All equipement
 	 */
diff --git a/engines/ultima/ultima4/meta_engine.cpp b/engines/ultima/ultima4/meta_engine.cpp
index e8c21ef711..22b2939cf1 100644
--- a/engines/ultima/ultima4/meta_engine.cpp
+++ b/engines/ultima/ultima4/meta_engine.cpp
@@ -97,6 +97,7 @@ static const KeybindingRecord CHEAT_KEYS[] = {
 	{ KEYBIND_CHEAT_COLLISIONS, "CHEAT-COLLISIONS", "Toggle Collision Handling", "collisions", "A+c", nullptr },
 	{ KEYBIND_CHEAT_DESTROY, "CHEAT-DESTROY", "Destroy Object", "destroy", "A+d", nullptr },
 	{ KEYBIND_CHEAT_EQUIPMENT, "CHEAT-EQUIPMENT", "Full Equipment", "equipment", "A+e", nullptr },
+	{ KEYBIND_CHEAT_FLEE, "CHEAT_FLEE", "Flee Combat", "flee", "A+f", nullptr },
 	{ KEYBIND_CHEAT_GOTO, "CHEAT-GOTO", "Goto location", "goto", "A+g", nullptr },
 	{ KEYBIND_CHEAT_HELP, "CHEAT-HELP", "Help - Teleport to Lord British", "goto", "A+h", nullptr },
 	{ KEYBIND_CHEAT_ITEMS, "CHEAT-ITEMS", "Give Items", "items", "A+i", nullptr },
@@ -129,6 +130,15 @@ static const KeybindingRecord DIRECTION_KEYS[] = {
 	{ KEYBIND_NONE, nullptr, nullptr, nullptr, nullptr, nullptr }
 };
 
+static const KeybindingRecord COMBAT_KEYS[] = {
+	{ KEYBIND_ESCAPE, "ESCAPE", "Escape", nullptr, "ESCAPE", nullptr },
+	{ KEYBIND_UP, "UP", "Up", nullptr, "UP", nullptr },
+	{ KEYBIND_DOWN, "DOWN", "Down", nullptr, "DOWN", nullptr },
+	{ KEYBIND_LEFT, "LEFT", "Left", nullptr, "LEFT", nullptr },
+	{ KEYBIND_RIGHT, "RIGHT", "Right", nullptr, "RIGHT", nullptr },
+	{ KEYBIND_NONE, nullptr, nullptr, nullptr, nullptr, nullptr }
+};
+
 struct KeysRecord {
 	const char *_id;
 	const char *_desc;
@@ -142,18 +152,25 @@ static const KeysRecord NORMAL_RECORDS[] = {
 	{ nullptr, nullptr, nullptr }
 };
 
-static const KeysRecord INPUT_RECORDS[3] = {
+static const KeysRecord INPUT_RECORDS[] = {
 	{ "ultima4", "Ultima IV", INPUT_KEYS },
 	{ nullptr, nullptr, nullptr }
 };
 
-static const KeysRecord DIRECTION_RECORDS[3] = {
+static const KeysRecord DIRECTION_RECORDS[] = {
 	{ "ultima4", "Ultima IV", DIRECTION_KEYS },
 	{ nullptr, nullptr, nullptr }
 };
 
-static const KeysRecord *MODE_RECORDS[3] = {
-	NORMAL_RECORDS, INPUT_RECORDS, DIRECTION_RECORDS
+static const KeysRecord COMBAT_RECORDS[] = {
+	{ "ultima4", "Ultima IV", COMBAT_KEYS },
+	{ "ultima4_party", "Ultima IV - Party", PARTY_KEYS },
+	{ "ultima4_cheats", "Ultima IV - Cheats", CHEAT_KEYS },
+	{ nullptr, nullptr, nullptr }
+};
+
+static const KeysRecord *MODE_RECORDS[5] = {
+	NORMAL_RECORDS, INPUT_RECORDS, DIRECTION_RECORDS, COMBAT_RECORDS
 };
 
 Common::KeymapArray MetaEngine::initKeymaps(KeybindingMode mode) {
diff --git a/engines/ultima/ultima4/meta_engine.h b/engines/ultima/ultima4/meta_engine.h
index 0b92763277..0dacc157ae 100644
--- a/engines/ultima/ultima4/meta_engine.h
+++ b/engines/ultima/ultima4/meta_engine.h
@@ -44,8 +44,8 @@ enum KeybindingAction {
 	KEYBIND_PARTY4, KEYBIND_PARTY5, KEYBIND_PARTY6, KEYBIND_PARTY7,
 	KEYBIND_PARTY8,
 
-	KEYBIND_CHEAT_COLLISIONS, KEYBIND_CHEAT_DESTROY,
-	KEYBIND_CHEAT_EQUIPMENT, KEYBIND_CHEAT_GOTO, KEYBIND_CHEAT_HELP,
+	KEYBIND_CHEAT_COLLISIONS, KEYBIND_CHEAT_DESTROY, KEYBIND_CHEAT_EQUIPMENT,
+	KEYBIND_CHEAT_FLEE, KEYBIND_CHEAT_GOTO, KEYBIND_CHEAT_HELP,
 	KEYBIND_CHEAT_ITEMS, KEYBIND_CHEAT_KARMA, KEYBIND_CHEAT_LEAVE,
 	KEYBIND_CHEAT_MIXTURES, KEYBIND_CHEAT_PARTY, KEYBIND_CHEAT_REAGENTS,
 	KEYBIND_CHEAT_STATS, KEYBIND_CHEAT_TRANSPORT, KEYBIND_CHEAT_UP,
@@ -57,7 +57,8 @@ enum KeybindingAction {
 enum KeybindingMode {
 	KBMODE_NORMAL,		///< Keys available when normal in-game
 	KBMODE_MINIMAL,		///< Minimal list available when reading input
-	KBMODE_DIRECTION	///< Mode for selecting direction
+	KBMODE_DIRECTION,	///< Mode for selecting direction
+	KBMODE_COMBAT		///< Keys when in combat mode
 };
 
 class MetaEngine {


Commit: 6cb8460d443849174364fdc1f7fa3366ec36a52a
    https://github.com/scummvm/scummvm/commit/6cb8460d443849174364fdc1f7fa3366ec36a52a
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-04-30T21:23:03-07:00

Commit Message:
ULTIMA4: Direction keys and Pass actions for combat controller

Changed paths:
    engines/ultima/ultima4/controllers/combat_controller.cpp
    engines/ultima/ultima4/core/debugger.cpp
    engines/ultima/ultima4/meta_engine.cpp


diff --git a/engines/ultima/ultima4/controllers/combat_controller.cpp b/engines/ultima/ultima4/controllers/combat_controller.cpp
index bd9d470a7d..1681a792ef 100644
--- a/engines/ultima/ultima4/controllers/combat_controller.cpp
+++ b/engines/ultima/ultima4/controllers/combat_controller.cpp
@@ -873,17 +873,6 @@ bool CombatController::keyPressed(int key) {
 	bool endTurn = true;
 
 	switch (key) {
-	case Common::KEYCODE_UP:
-	case Common::KEYCODE_DOWN:
-	case Common::KEYCODE_LEFT:
-	case Common::KEYCODE_RIGHT:
-		g_context->_location->move(keyToDirection(key), true);
-		break;
-
-	case ' ':
-		g_screen->screenMessage("Pass\n");
-		break;
-
 	case Common::KEYCODE_F1: {
 		if (settings._debug)
 			gameDestroyAllCreatures();
diff --git a/engines/ultima/ultima4/core/debugger.cpp b/engines/ultima/ultima4/core/debugger.cpp
index 694700c2c5..0a9d31d85f 100644
--- a/engines/ultima/ultima4/core/debugger.cpp
+++ b/engines/ultima/ultima4/core/debugger.cpp
@@ -172,13 +172,20 @@ bool Debugger::handleCommand(int argc, const char **argv, bool &keepRunning) {
 	bool result = Shared::Debugger::handleCommand(argc, argv, keepRunning);
 
 	if (result) {
+		Controller *ctl = eventHandler->getController();
+
 		if (g_context)
 			g_context->_lastCommandTime = g_system->getMillis();
 
 		if (!isActive() && !_dontEndTurn) {
-			g_game->finishTurn();
+			GameController *gc = dynamic_cast<GameController *>(ctl);
+			CombatController *cc = dynamic_cast<CombatController *>(ctl);
+
+			if (gc)
+				gc->finishTurn();
+			else if (cc)
+				cc->finishTurn();
 		} else if (_dontEndTurn) {
-			Controller *ctl = eventHandler->getController();
 			if (ctl == g_game || ctl == g_combat) {
 				assert(g_context);
 				g_context->_location->_turnCompleter->finishTurn();
diff --git a/engines/ultima/ultima4/meta_engine.cpp b/engines/ultima/ultima4/meta_engine.cpp
index 22b2939cf1..b9d0c8651c 100644
--- a/engines/ultima/ultima4/meta_engine.cpp
+++ b/engines/ultima/ultima4/meta_engine.cpp
@@ -131,7 +131,7 @@ static const KeybindingRecord DIRECTION_KEYS[] = {
 };
 
 static const KeybindingRecord COMBAT_KEYS[] = {
-	{ KEYBIND_ESCAPE, "ESCAPE", "Escape", nullptr, "ESCAPE", nullptr },
+	{ KEYBIND_PASS, "PASS", "Pass", "pass", "SPACE", nullptr },
 	{ KEYBIND_UP, "UP", "Up", nullptr, "UP", nullptr },
 	{ KEYBIND_DOWN, "DOWN", "Down", nullptr, "DOWN", nullptr },
 	{ KEYBIND_LEFT, "LEFT", "Left", nullptr, "LEFT", nullptr },




More information about the Scummvm-git-logs mailing list