[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