[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