[Scummvm-git-logs] scummvm master -> 2137c0b213898cbd79720aeab9dfdeaa464b616d

mduggan mgithub at guarana.org
Fri May 29 22:58:42 UTC 2020


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

Summary:
2137c0b213 ULTIMA8: Add directional movement controls in addition to tank movement


Commit: 2137c0b213898cbd79720aeab9dfdeaa464b616d
    https://github.com/scummvm/scummvm/commit/2137c0b213898cbd79720aeab9dfdeaa464b616d
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2020-05-30T07:58:39+09:00

Commit Message:
ULTIMA8: Add directional movement controls in addition to tank movement

Changed paths:
    engines/ultima/ultima8/meta_engine.cpp
    engines/ultima/ultima8/meta_engine.h
    engines/ultima/ultima8/misc/debugger.cpp
    engines/ultima/ultima8/misc/debugger.h
    engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
    engines/ultima/ultima8/world/actors/avatar_mover_process.h


diff --git a/engines/ultima/ultima8/meta_engine.cpp b/engines/ultima/ultima8/meta_engine.cpp
index d57572ac54..c9dbdfe272 100644
--- a/engines/ultima/ultima8/meta_engine.cpp
+++ b/engines/ultima/ultima8/meta_engine.cpp
@@ -60,6 +60,10 @@ static const KeybindingRecord KEYS[] = {
 	{ ACTION_TURN_RIGHT, "TURN_RIGHT", "Turn Right", "AvatarMoverProcess::startTurnRight", "AvatarMoverProcess::stopTurnRight", "RIGHT", nullptr },
 	{ ACTION_MOVE_FORWARD, "MOVE_FORWARD", "Move Forward", "AvatarMoverProcess::startMoveForward", "AvatarMoverProcess::stopMoveForward", "UP", nullptr },
 	{ ACTION_MOVE_BACK, "MOVE_BACK", "Move Back", "AvatarMoverProcess::startMoveBack", "AvatarMoverProcess::stopMoveBack", "DOWN", nullptr },
+	{ ACTION_MOVE_UP, "MOVE_UP", "Move Up", "AvatarMoverProcess::startMoveUp", "AvatarMoverProcess::stopMoveUp", "JOY_UP", nullptr },
+	{ ACTION_MOVE_DOWN, "MOVE_DOWN", "Move Down", "AvatarMoverProcess::startMoveDown", "AvatarMoverProcess::stopMoveDown", "JOY_DOWN", nullptr },
+	{ ACTION_MOVE_LEFT, "MOVE_LEFT", "Move Left", "AvatarMoverProcess::startMoveLeft", "AvatarMoverProcess::stopMoveLeft", "JOY_LEFT", nullptr },
+	{ ACTION_MOVE_RIGHT, "MOVE_RIGHT", "Move Right", "AvatarMoverProcess::startMoveRight", "AvatarMoverProcess::stopMoveRight", "JOY_RIGHT", nullptr },
 
 	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }
 };
@@ -69,12 +73,12 @@ static const KeybindingRecord CHEAT_KEYS[] = {
 	{ ACTION_CLIPPING, "CLIPPING", "Toggle Clipping", "QuickAvatarMoverProcess::toggleClipping", nullptr, "INSERT", 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_ASCEND, "ASCEND", "Ascend", "QuickAvatarMoverProcess::startAscend", "QuickAvatarMoverProcess::stopAscend", "HOME", nullptr },
-	{ ACTION_DESCEND, "DESCEND", "Descend", "QuickAvatarMoverProcess::startDescend", "QuickAvatarMoverProcess::stopDescend", "END", nullptr },
-	{ ACTION_MOVE_UP, "MOVE_UP", "Move Up", "QuickAvatarMoverProcess::startMoveUp", "QuickAvatarMoverProcess::stopMoveUp", "A+UP", nullptr },
-	{ ACTION_MOVE_DOWN, "MOVE_DOWN", "Move Down", "QuickAvatarMoverProcess::startMoveDown", "QuickAvatarMoverProcess::stopMoveDown", "A+DOWN", nullptr },
-	{ ACTION_MOVE_LEFT, "MOVE_LEFT", "Move Left", "QuickAvatarMoverProcess::startMoveLeft", "QuickAvatarMoverProcess::stopMoveLeft", "A+LEFT", nullptr },
-	{ ACTION_MOVE_RIGHT, "MOVE_RIGHT", "Move Right", "QuickAvatarMoverProcess::startMoveRight", "QuickAvatarMoverProcess::stopMoveRight", "A+RIGHT", nullptr },
+	{ ACTION_QUICK_MOVE_ASCEND, "ASCEND", "Ascend", "QuickAvatarMoverProcess::startAscend", "QuickAvatarMoverProcess::stopAscend", "HOME", nullptr },
+	{ ACTION_QUICK_MOVE_DESCEND, "DESCEND", "Descend", "QuickAvatarMoverProcess::startDescend", "QuickAvatarMoverProcess::stopDescend", "END", nullptr },
+	{ ACTION_QUICK_MOVE_UP, "MOVE_UP", "Move Up", "QuickAvatarMoverProcess::startMoveUp", "QuickAvatarMoverProcess::stopMoveUp", "A+UP", nullptr },
+	{ ACTION_QUICK_MOVE_DOWN, "MOVE_DOWN", "Move Down", "QuickAvatarMoverProcess::startMoveDown", "QuickAvatarMoverProcess::stopMoveDown", "A+DOWN", nullptr },
+	{ ACTION_QUICK_MOVE_LEFT, "MOVE_LEFT", "Move Left", "QuickAvatarMoverProcess::startMoveLeft", "QuickAvatarMoverProcess::stopMoveLeft", "A+LEFT", nullptr },
+	{ ACTION_QUICK_MOVE_RIGHT, "MOVE_RIGHT", "Move Right", "QuickAvatarMoverProcess::startMoveRight", "QuickAvatarMoverProcess::stopMoveRight", "A+RIGHT", nullptr },
 
 	{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }
 };
diff --git a/engines/ultima/ultima8/meta_engine.h b/engines/ultima/ultima8/meta_engine.h
index 0bd0344d58..d29cdeb4e9 100644
--- a/engines/ultima/ultima8/meta_engine.h
+++ b/engines/ultima/ultima8/meta_engine.h
@@ -33,9 +33,11 @@ enum KeybindingAction {
 	ACTION_KEYRING, ACTION_MINIMAP, ACTION_RECALL, ACTION_INVENTORY, ACTION_MENU,
 	ACTION_CLOSE_GUMPS, ACTION_HIGHLIGHT_ITEMS, ACTION_TOGGLE_TOUCHING, ACTION_JUMP,
 	ACTION_TURN_LEFT, ACTION_TURN_RIGHT, ACTION_MOVE_FORWARD, ACTION_MOVE_BACK,
+	ACTION_MOVE_UP, ACTION_MOVE_DOWN, ACTION_MOVE_LEFT, ACTION_MOVE_RIGHT,
 
-	ACTION_CHEAT_MODE, ACTION_CLIPPING, ACTION_DEC_SORT_ORDER, ACTION_INC_SORT_ORDER, ACTION_ASCEND,
-	ACTION_DESCEND, ACTION_MOVE_UP, ACTION_MOVE_DOWN, ACTION_MOVE_LEFT, ACTION_MOVE_RIGHT,
+	ACTION_CHEAT_MODE, ACTION_CLIPPING, ACTION_DEC_SORT_ORDER, ACTION_INC_SORT_ORDER,
+	ACTION_QUICK_MOVE_ASCEND, ACTION_QUICK_MOVE_DESCEND,
+	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,
diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index 7267e808e3..71e0fa6854 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -92,6 +92,15 @@ Debugger::Debugger() : Shared::Debugger() {
 	registerCmd("AvatarMoverProcess::stopMoveForward", WRAP_METHOD(Debugger, cmdStopMoveForward));
 	registerCmd("AvatarMoverProcess::stopMoveBack", WRAP_METHOD(Debugger, cmdStopMoveBack));
 
+	registerCmd("AvatarMoverProcess::startMoveLeft", WRAP_METHOD(Debugger, cmdStartMoveLeft));
+	registerCmd("AvatarMoverProcess::startMoveRight", WRAP_METHOD(Debugger, cmdStartMoveRight));
+	registerCmd("AvatarMoverProcess::startMoveUp", WRAP_METHOD(Debugger, cmdStartMoveUp));
+	registerCmd("AvatarMoverProcess::startMoveDown", WRAP_METHOD(Debugger, cmdStartMoveDown));
+	registerCmd("AvatarMoverProcess::stopMoveLeft", WRAP_METHOD(Debugger, cmdStopMoveLeft));
+	registerCmd("AvatarMoverProcess::stopMoveRight", WRAP_METHOD(Debugger, cmdStopMoveRight));
+	registerCmd("AvatarMoverProcess::stopMoveUp", WRAP_METHOD(Debugger, cmdStopMoveUp));
+	registerCmd("AvatarMoverProcess::stopMoveDown", WRAP_METHOD(Debugger, cmdStopMoveDown));
+
 	registerCmd("AudioProcess::listSFX", WRAP_METHOD(Debugger, cmdListSFX));
 	registerCmd("AudioProcess::playSFX", WRAP_METHOD(Debugger, cmdPlaySFX));
 	registerCmd("AudioProcess::stopSFX", WRAP_METHOD(Debugger, cmdStopSFX));
@@ -129,18 +138,18 @@ Debugger::Debugger() : Shared::Debugger() {
 	registerCmd("ObjectManager::objectTypes", WRAP_METHOD(Debugger, cmdObjectTypes));
 	registerCmd("ObjectManager::objectInfo", WRAP_METHOD(Debugger, cmdObjectInfo));
 
-	registerCmd("QuickAvatarMoverProcess::startMoveUp", WRAP_METHOD(Debugger, cmdStartMoveUp));
-	registerCmd("QuickAvatarMoverProcess::startMoveDown", WRAP_METHOD(Debugger, cmdStartMoveDown));
-	registerCmd("QuickAvatarMoverProcess::startMoveLeft", WRAP_METHOD(Debugger, cmdStartMoveLeft));
-	registerCmd("QuickAvatarMoverProcess::startMoveRight", WRAP_METHOD(Debugger, cmdStartMoveRight));
-	registerCmd("QuickAvatarMoverProcess::startAscend", WRAP_METHOD(Debugger, cmdStartAscend));
-	registerCmd("QuickAvatarMoverProcess::startDescend", WRAP_METHOD(Debugger, cmdStartDescend));
-	registerCmd("QuickAvatarMoverProcess::stopMoveUp", WRAP_METHOD(Debugger, cmdStopMoveUp));
-	registerCmd("QuickAvatarMoverProcess::stopMoveDown", WRAP_METHOD(Debugger, cmdStopMoveDown));
-	registerCmd("QuickAvatarMoverProcess::stopMoveLeft", WRAP_METHOD(Debugger, cmdStopMoveLeft));
-	registerCmd("QuickAvatarMoverProcess::stopMoveRight", WRAP_METHOD(Debugger, cmdStopMoveRight));
-	registerCmd("QuickAvatarMoverProcess::stopAscend", WRAP_METHOD(Debugger, cmdStopAscend));
-	registerCmd("QuickAvatarMoverProcess::stopDescend", WRAP_METHOD(Debugger, cmdStopDescend));
+	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));
 
@@ -1167,6 +1176,58 @@ bool Debugger::cmdStartMoveBack(int argc, const char **argv) {
 	return false;
 }
 
+bool Debugger::cmdStartMoveLeft(int argc, const char **argv) {
+	if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
+		debugPrintf("Can't move back: avatarInStasis\n");
+		return false;
+	}
+	AvatarMoverProcess *proc = Ultima8Engine::get_instance()->getAvatarMoverProcess();
+
+	if (proc) {
+		proc->tryMoveLeft(true);
+	}
+	return false;
+}
+
+bool Debugger::cmdStartMoveRight(int argc, const char **argv) {
+	if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
+		debugPrintf("Can't move back: avatarInStasis\n");
+		return false;
+	}
+	AvatarMoverProcess *proc = Ultima8Engine::get_instance()->getAvatarMoverProcess();
+
+	if (proc) {
+		proc->tryMoveRight(true);
+	}
+	return false;
+}
+
+bool Debugger::cmdStartMoveUp(int argc, const char **argv) {
+	if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
+		debugPrintf("Can't move back: avatarInStasis\n");
+		return false;
+	}
+	AvatarMoverProcess *proc = Ultima8Engine::get_instance()->getAvatarMoverProcess();
+
+	if (proc) {
+		proc->tryMoveUp(true);
+	}
+	return false;
+}
+
+bool Debugger::cmdStartMoveDown(int argc, const char **argv) {
+	if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
+		debugPrintf("Can't move back: avatarInStasis\n");
+		return false;
+	}
+	AvatarMoverProcess *proc = Ultima8Engine::get_instance()->getAvatarMoverProcess();
+
+	if (proc) {
+		proc->tryMoveDown(true);
+	}
+	return false;
+}
+
 bool Debugger::cmdStopTurnLeft(int argc, const char **argv) {
 	if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
 		debugPrintf("Can't turn left: avatarInStasis\n");
@@ -1219,6 +1280,58 @@ bool Debugger::cmdStopMoveBack(int argc, const char **argv) {
 	return false;
 }
 
+bool Debugger::cmdStopMoveLeft(int argc, const char **argv) {
+	if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
+		debugPrintf("Can't move back: avatarInStasis\n");
+		return false;
+	}
+	AvatarMoverProcess *proc = Ultima8Engine::get_instance()->getAvatarMoverProcess();
+
+	if (proc) {
+		proc->tryMoveLeft(false);
+	}
+	return false;
+}
+
+bool Debugger::cmdStopMoveRight(int argc, const char **argv) {
+	if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
+		debugPrintf("Can't move back: avatarInStasis\n");
+		return false;
+	}
+	AvatarMoverProcess *proc = Ultima8Engine::get_instance()->getAvatarMoverProcess();
+
+	if (proc) {
+		proc->tryMoveRight(false);
+	}
+	return false;
+}
+
+bool Debugger::cmdStopMoveUp(int argc, const char **argv) {
+	if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
+		debugPrintf("Can't move back: avatarInStasis\n");
+		return false;
+	}
+	AvatarMoverProcess *proc = Ultima8Engine::get_instance()->getAvatarMoverProcess();
+
+	if (proc) {
+		proc->tryMoveUp(false);
+	}
+	return false;
+}
+
+bool Debugger::cmdStopMoveDown(int argc, const char **argv) {
+	if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
+		debugPrintf("Can't move back: avatarInStasis\n");
+		return false;
+	}
+	AvatarMoverProcess *proc = Ultima8Engine::get_instance()->getAvatarMoverProcess();
+
+	if (proc) {
+		proc->tryMoveDown(false);
+	}
+	return false;
+}
+
 bool Debugger::cmdToggleCombat(int argc, const char **argv) {
 	if (Ultima8Engine::get_instance()->isAvatarInStasis()) {
 		debugPrintf("Can't toggle combat: avatarInStasis\n");
@@ -1262,8 +1375,7 @@ bool Debugger::cmdObjectInfo(int argc, const char **argv) {
 	return true;
 }
 
-
-bool Debugger::cmdStartMoveUp(int argc, const char **argv) {
+bool Debugger::cmdStartQuickMoveUp(int argc, const char **argv) {
 	if (Ultima8Engine::get_instance()->areCheatsEnabled()) {
 		QuickAvatarMoverProcess::startMover(-64, -64, 0, 0);
 		return false;
@@ -1273,7 +1385,7 @@ bool Debugger::cmdStartMoveUp(int argc, const char **argv) {
 	}
 }
 
-bool Debugger::cmdStartMoveDown(int argc, const char **argv) {
+bool Debugger::cmdStartQuickMoveDown(int argc, const char **argv) {
 	if (Ultima8Engine::get_instance()->areCheatsEnabled()) {
 		QuickAvatarMoverProcess::startMover(+64, +64, 0, 1);
 		return false;
@@ -1283,7 +1395,7 @@ bool Debugger::cmdStartMoveDown(int argc, const char **argv) {
 	}
 }
 
-bool Debugger::cmdStartMoveLeft(int argc, const char **argv) {
+bool Debugger::cmdStartQuickMoveLeft(int argc, const char **argv) {
 	if (Ultima8Engine::get_instance()->areCheatsEnabled()) {
 		QuickAvatarMoverProcess::startMover(-64, +64, 0, 2);
 		return false;
@@ -1293,7 +1405,7 @@ bool Debugger::cmdStartMoveLeft(int argc, const char **argv) {
 	}
 }
 
-bool Debugger::cmdStartMoveRight(int argc, const char **argv) {
+bool Debugger::cmdStartQuickMoveRight(int argc, const char **argv) {
 	if (Ultima8Engine::get_instance()->areCheatsEnabled()) {
 		QuickAvatarMoverProcess::startMover(+64, -64, 0, 3);
 		return false;
@@ -1303,7 +1415,7 @@ bool Debugger::cmdStartMoveRight(int argc, const char **argv) {
 	}
 }
 
-bool Debugger::cmdStartAscend(int argc, const char **argv) {
+bool Debugger::cmdStartQuickMoveAscend(int argc, const char **argv) {
 	if (Ultima8Engine::get_instance()->areCheatsEnabled()) {
 		QuickAvatarMoverProcess::startMover(0, 0, 8, 4);
 		return false;
@@ -1313,7 +1425,7 @@ bool Debugger::cmdStartAscend(int argc, const char **argv) {
 	}
 }
 
-bool Debugger::cmdStartDescend(int argc, const char **argv) {
+bool Debugger::cmdStartQuickMoveDescend(int argc, const char **argv) {
 	if (Ultima8Engine::get_instance()->areCheatsEnabled()) {
 		QuickAvatarMoverProcess::startMover(0, 0, -8, 5);
 		return false;
@@ -1323,32 +1435,32 @@ bool Debugger::cmdStartDescend(int argc, const char **argv) {
 	}
 }
 
-bool Debugger::cmdStopMoveUp(int argc, const char **argv) {
+bool Debugger::cmdStopQuickMoveUp(int argc, const char **argv) {
 	QuickAvatarMoverProcess::terminateMover(0);
 	return false;
 }
 
-bool Debugger::cmdStopMoveDown(int argc, const char **argv) {
+bool Debugger::cmdStopQuickMoveDown(int argc, const char **argv) {
 	QuickAvatarMoverProcess::terminateMover(1);
 	return false;
 }
 
-bool Debugger::cmdStopMoveLeft(int argc, const char **argv) {
+bool Debugger::cmdStopQuickMoveLeft(int argc, const char **argv) {
 	QuickAvatarMoverProcess::terminateMover(2);
 	return false;
 }
 
-bool Debugger::cmdStopMoveRight(int argc, const char **argv) {
+bool Debugger::cmdStopQuickMoveRight(int argc, const char **argv) {
 	QuickAvatarMoverProcess::terminateMover(3);
 	return false;
 }
 
-bool Debugger::cmdStopAscend(int argc, const char **argv) {
+bool Debugger::cmdStopQuickMoveAscend(int argc, const char **argv) {
 	QuickAvatarMoverProcess::terminateMover(4);
 	return false;
 }
 
-bool Debugger::cmdStopDescend(int argc, const char **argv) {
+bool Debugger::cmdStopQuickMoveDescend(int argc, const char **argv) {
 	QuickAvatarMoverProcess::terminateMover(5);
 	return false;
 }
diff --git a/engines/ultima/ultima8/misc/debugger.h b/engines/ultima/ultima8/misc/debugger.h
index 965758bd07..f39e971f4b 100644
--- a/engines/ultima/ultima8/misc/debugger.h
+++ b/engines/ultima/ultima8/misc/debugger.h
@@ -162,6 +162,14 @@ private:
 	bool cmdStopTurnRight(int argc, const char **argv);
 	bool cmdStopMoveForward(int argc, const char **argv);
 	bool cmdStopMoveBack(int argc, const char **argv);
+	bool cmdStartMoveUp(int argc, const char **argv);
+	bool cmdStartMoveDown(int argc, const char **argv);
+	bool cmdStartMoveLeft(int argc, const char **argv);
+	bool cmdStartMoveRight(int argc, const char **argv);
+	bool cmdStopMoveUp(int argc, const char **argv);
+	bool cmdStopMoveDown(int argc, const char **argv);
+	bool cmdStopMoveLeft(int argc, const char **argv);
+	bool cmdStopMoveRight(int argc, const char **argv);
 
 	// Audio Process
 	bool cmdListSFX(int argc, const char **argv);
@@ -207,18 +215,18 @@ private:
 	bool cmdObjectInfo(int argc, const char **argv);
 
 	// Quick Avatar Mover Process
-	bool cmdStartMoveUp(int argc, const char **argv);
-	bool cmdStartMoveDown(int argc, const char **argv);
-	bool cmdStartMoveLeft(int argc, const char **argv);
-	bool cmdStartMoveRight(int argc, const char **argv);
-	bool cmdStartAscend(int argc, const char **argv);
-	bool cmdStartDescend(int argc, const char **argv);
-	bool cmdStopMoveUp(int argc, const char **argv);
-	bool cmdStopMoveDown(int argc, const char **argv);
-	bool cmdStopMoveLeft(int argc, const char **argv);
-	bool cmdStopMoveRight(int argc, const char **argv);
-	bool cmdStopAscend(int argc, const char **argv);
-	bool cmdStopDescend(int argc, const char **argv);
+	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);
 
diff --git a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
index a8ceb36e48..992c59127a 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
@@ -34,6 +34,7 @@
 #include "ultima/ultima8/conf/setting_manager.h"
 #include "ultima/ultima8/audio/music_process.h"
 #include "ultima/ultima8/world/get_object.h"
+#include "ultima/ultima8/misc/direction.h"
 
 namespace Ultima {
 namespace Ultima8 {
@@ -45,7 +46,9 @@ AvatarMoverProcess::AvatarMoverProcess() : Process(),
 		_lastFrame(0), _lastAttack(0), _idleTime(0),
 		_lastHeadShakeAnim(Animation::lookLeft), _fakeBothButtonClick(false),
 		_tryTurnLeft(false), _tryTurnRight(false),
-		_tryMoveForward(false), _tryMoveBack(false) {
+		_tryMoveForward(false), _tryMoveBack(false),
+		_tryMoveLeft(false), _tryMoveRight(false),
+		_tryMoveUp(false), _tryMoveDown(false) {
 	_type = 1; // CONSTANT! (type 1 = persistent)
 }
 
@@ -314,6 +317,44 @@ void AvatarMoverProcess::handleCombatMode() {
 		return;
 	}
 
+	int y = 0;
+	int x = 0;
+	if (_tryMoveUp) {
+		y++;
+	}
+	if (_tryMoveDown) {
+		y--;
+	}
+	if (_tryMoveLeft) {
+		x--;
+	}
+	if (_tryMoveRight) {
+		x++;
+	}
+
+	if (x != 0 || y != 0) {
+		int32 nextdir =  Get_direction(y, x);
+
+		if (checkTurn(nextdir, true))
+			return;
+
+		Animation::Sequence nextanim;
+		if (lastanim == Animation::run) {
+			// want to run while in combat mode?
+			// first sheath weapon
+			nextanim = Animation::readyWeapon;
+		} else if (ABS(direction - nextdir) == 4) {
+			nextanim = Animation::retreat;
+			nextdir = direction;
+		} else {
+			nextanim = Animation::advance;
+		}
+
+		nextanim = Animation::checkWeapon(nextanim, lastanim);
+		waitFor(avatar->doAnim(nextanim, nextdir));
+		return;
+	}
+
 	if (checkTurn(direction, false))
 		return;
 
@@ -577,6 +618,28 @@ void AvatarMoverProcess::handleNormalMode() {
 		return;
 	}
 
+	int y = 0;
+	int x = 0;
+
+	if (_tryMoveUp) {
+		y++;
+	}
+	if (_tryMoveDown) {
+		y--;
+	}
+	if (_tryMoveLeft) {
+		x--;
+	}
+	if (_tryMoveRight) {
+		x++;
+	}
+
+	if (x != 0 || y != 0) {
+		direction = Get_direction(y, x);
+		step(Animation::walk, direction);
+		return;
+	}
+
 	if (checkTurn(direction, moving))
 		return;
 
@@ -767,6 +830,22 @@ void AvatarMoverProcess::tryMoveBack(bool b) {
 	}
 }
 
+void AvatarMoverProcess::tryMoveLeft(bool b) {
+	_tryMoveLeft = b;
+}
+
+void AvatarMoverProcess::tryMoveRight(bool b) {
+	_tryMoveRight = b;
+}
+
+void AvatarMoverProcess::tryMoveUp(bool b) {
+	_tryMoveUp = b;
+}
+
+void AvatarMoverProcess::tryMoveDown(bool b) {
+	_tryMoveDown = b;
+}
+
 void AvatarMoverProcess::turnToDirection(int direction) {
 	MainActor *avatar = getMainActor();
 	bool combatRun = avatar->hasActorFlags(Actor::ACT_COMBATRUN);
diff --git a/engines/ultima/ultima8/world/actors/avatar_mover_process.h b/engines/ultima/ultima8/world/actors/avatar_mover_process.h
index d687e819f1..5eaedc1a01 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.h
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.h
@@ -58,6 +58,10 @@ public:
 	void tryTurnRight(bool b);
 	void tryMoveForward(bool b);
 	void tryMoveBack(bool b);
+	void tryMoveLeft(bool b);
+	void tryMoveRight(bool b);
+	void tryMoveUp(bool b);
+	void tryMoveDown(bool b);
 
 private:
 	void handleHangingMode();
@@ -88,6 +92,10 @@ private:
 	bool _tryTurnRight;
 	bool _tryMoveForward;
 	bool _tryMoveBack;
+	bool _tryMoveLeft;
+	bool _tryMoveRight;
+	bool _tryMoveUp;
+	bool _tryMoveDown;
 };
 
 } // End of namespace Ultima8




More information about the Scummvm-git-logs mailing list