[Scummvm-git-logs] scummvm master -> 5fe1c35fe0878a5b7a4170db5ebd646463f7096a
mduggan
noreply at scummvm.org
Mon Jan 3 10:17:41 UTC 2022
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
99261d855e ULTIMA8: Add Crusader single-key steps and rolls
5fe1c35fe0 ULTIMA8: Add No Regret easteregg ini option
Commit: 99261d855ef2ec7693f272a33afd2be1bdf76ffc
https://github.com/scummvm/scummvm/commit/99261d855ef2ec7693f272a33afd2be1bdf76ffc
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2022-01-03T19:02:53+09:00
Commit Message:
ULTIMA8: Add Crusader single-key steps and rolls
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.h
engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
engines/ultima/ultima8/world/actors/cru_avatar_mover_process.h
diff --git a/engines/ultima/ultima8/meta_engine.cpp b/engines/ultima/ultima8/meta_engine.cpp
index e3d05b81209..26610d1000d 100644
--- a/engines/ultima/ultima8/meta_engine.cpp
+++ b/engines/ultima/ultima8/meta_engine.cpp
@@ -89,16 +89,21 @@ static const KeybindingRecord CRUSADER_KEYS[] = {
{ ACTION_ATTACK, "ATTACK", "Attack", "AvatarMoverProcess::startAttack", "AvatarMoverProcess::stopAttack", "SPACE", "KP0" },
{ ACTION_CAMERA_AVATAR, "CAMERA_AVATAR", "Focus Camera on Silencer", "CameraProcess::moveToAvatar", nullptr, "z", nullptr },
{ ACTION_JUMP, "JUMP", "Jump / Roll / Crouch", "AvatarMoverProcess::startJump", "AvatarMoverProcess::stopJump", "LCTRL", nullptr },
- { ACTION_SHORT_JUMP, "SHORT_JUMP", "Short Jump", "AvatarMoverProcess::shortJump", nullptr, "TAB", nullptr },
- // TODO: MOVE_STEP should also be mapped to KP_DIVIDE?? Actually original key was advance, slightly different
+ { ACTION_SHORT_JUMP, "SHORT_JUMP", "Short Jump", "AvatarMoverProcess::shortJump", nullptr, "TAB", "j" },
+ { ACTION_STEP_LEFT, "STEP_LEFT", "Sidestep Left", "AvatarMoverProcess::stepLeft", nullptr, "DELETE", "KP7" },
+ { ACTION_STEP_RIGHT, "STEP_RIGHT", "Sidestep Rgiht", "AvatarMoverProcess::stepRight", nullptr, "PAGEDOWN", "KP9" },
+ { ACTION_STEP_FORWARD, "STEP_FORWARD", "Step Forward", "AvatarMoverProcess::stepForward", nullptr, "HOME", "KP_DIVIDE" },
+ { ACTION_STEP_BACK, "STEP_BACK", "Step Back", "AvatarMoverProcess::stepBack", nullptr, "END", "KP2" },
+ { ACTION_ROLL_LEFT, "ROLL_LEFT", "Roll Left", "AvatarMoverProcess::rollLeft", nullptr, "INSERT", "KP1" },
+ { ACTION_ROLL_RIGHT, "ROLL_RIGHT", "Roll Right", "AvatarMoverProcess::rollRight", nullptr, "PAGEUP", "KP3" },
{ ACTION_MOVE_STEP, "MOVE_STEP", "Side Step / Advance / Retreat", "AvatarMoverProcess::startMoveStep", "AvatarMoverProcess::stopMoveStep", "LALT", "JOY_RIGHT_SHOULDER" },
{ ACTION_NONE, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }
};
static const KeybindingRecord CHEAT_KEYS[] = {
- { ACTION_CLIPPING, "CLIPPING", "Toggle Clipping", "QuickAvatarMoverProcess::toggleClipping", nullptr, "INSERT", 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_CLIPPING, "CLIPPING", "Toggle Clipping", "QuickAvatarMoverProcess::toggleClipping", nullptr, "M+INSERT", nullptr },
+ { ACTION_QUICK_MOVE_ASCEND, "ASCEND", "Ascend", "QuickAvatarMoverProcess::startAscend", "QuickAvatarMoverProcess::stopAscend", "M+HOME", nullptr },
+ { ACTION_QUICK_MOVE_DESCEND, "DESCEND", "Descend", "QuickAvatarMoverProcess::startDescend", "QuickAvatarMoverProcess::stopDescend", "M+END", nullptr },
{ ACTION_QUICK_MOVE_UP, "MOVE_UP", "Move Up", "QuickAvatarMoverProcess::startMoveUp", "QuickAvatarMoverProcess::stopMoveUp", "M+UP", nullptr },
{ ACTION_QUICK_MOVE_DOWN, "MOVE_DOWN", "Move Down", "QuickAvatarMoverProcess::startMoveDown", "QuickAvatarMoverProcess::stopMoveDown", "M+DOWN", nullptr },
{ ACTION_QUICK_MOVE_LEFT, "MOVE_LEFT", "Move Left", "QuickAvatarMoverProcess::startMoveLeft", "QuickAvatarMoverProcess::stopMoveLeft", "M+LEFT", nullptr },
diff --git a/engines/ultima/ultima8/meta_engine.h b/engines/ultima/ultima8/meta_engine.h
index 5b6c5e00314..d862588e9d8 100644
--- a/engines/ultima/ultima8/meta_engine.h
+++ b/engines/ultima/ultima8/meta_engine.h
@@ -39,7 +39,8 @@ enum KeybindingAction {
ACTION_SHORT_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_MOVE_RUN, ACTION_MOVE_STEP, ACTION_ATTACK,
- ACTION_CAMERA_AVATAR,
+ ACTION_STEP_LEFT, ACTION_STEP_RIGHT, ACTION_STEP_FORWARD,
+ ACTION_STEP_BACK, ACTION_ROLL_LEFT, ACTION_ROLL_RIGHT, ACTION_CAMERA_AVATAR,
ACTION_CLIPPING, ACTION_DEC_SORT_ORDER,
ACTION_INC_SORT_ORDER, ACTION_QUICK_MOVE_ASCEND, ACTION_QUICK_MOVE_DESCEND,
diff --git a/engines/ultima/ultima8/misc/debugger.cpp b/engines/ultima/ultima8/misc/debugger.cpp
index b9d8cf2df48..4883092ca20 100644
--- a/engines/ultima/ultima8/misc/debugger.cpp
+++ b/engines/ultima/ultima8/misc/debugger.cpp
@@ -89,7 +89,6 @@ Debugger::Debugger() : Shared::Debugger() {
registerCmd("AvatarMoverProcess::startJump", WRAP_METHOD(Debugger, cmdStartJump));
registerCmd("AvatarMoverProcess::stopJump", WRAP_METHOD(Debugger, cmdStopJump));
- registerCmd("AvatarMoverProcess::shortJump", WRAP_METHOD(Debugger, cmdShortJump));
registerCmd("AvatarMoverProcess::startTurnLeft", WRAP_METHOD(Debugger, cmdStartTurnLeft));
registerCmd("AvatarMoverProcess::startTurnRight", WRAP_METHOD(Debugger, cmdStartTurnRight));
registerCmd("AvatarMoverProcess::startMoveForward", WRAP_METHOD(Debugger, cmdStartMoveForward));
@@ -115,6 +114,14 @@ Debugger::Debugger() : Shared::Debugger() {
registerCmd("AvatarMoverProcess::startAttack", WRAP_METHOD(Debugger, cmdStartAttack));
registerCmd("AvatarMoverProcess::stopAttack", WRAP_METHOD(Debugger, cmdStopAttack));
+ registerCmd("AvatarMoverProcess::shortJump", WRAP_METHOD(Debugger, cmdShortJump));
+ registerCmd("AvatarMoverProcess::stepLeft", WRAP_METHOD(Debugger, cmdStepLeft));
+ registerCmd("AvatarMoverProcess::stepRight", WRAP_METHOD(Debugger, cmdStepRight));
+ registerCmd("AvatarMoverProcess::stepForward", WRAP_METHOD(Debugger, cmdStepForward));
+ registerCmd("AvatarMoverProcess::stepBack", WRAP_METHOD(Debugger, cmdStepBack));
+ registerCmd("AvatarMoverProcess::rollLeft", WRAP_METHOD(Debugger, cmdRollLeft));
+ registerCmd("AvatarMoverProcess::rollRight", WRAP_METHOD(Debugger, cmdRollRight));
+
registerCmd("CameraProcess::moveToAvatar", WRAP_METHOD(Debugger, cmdCameraOnAvatar));
registerCmd("AudioProcess::listSFX", WRAP_METHOD(Debugger, cmdListSFX));
@@ -1201,28 +1208,6 @@ bool Debugger::cmdUseKeyring(int argc, const char **argv) {
return false;
}
-bool Debugger::cmdStartAttack(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- if (engine->isAvatarInStasis()) {
- debugPrintf("Can't attack: avatarInStasis\n");
- return false;
- }
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_ATTACKING);
- }
- return false;
-}
-
-bool Debugger::cmdStopAttack(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- proc->clearMovementFlag(AvatarMoverProcess::MOVE_ATTACKING);
- }
- return false;
-}
-
bool Debugger::cmdCameraOnAvatar(int argc, const char **argv) {
if (Ultima8Engine::get_instance()->isCruStasis()) {
debugPrintf("Can't move camera: cruStasis\n");
@@ -1238,302 +1223,155 @@ bool Debugger::cmdCameraOnAvatar(int argc, const char **argv) {
return false;
}
-bool Debugger::cmdStartJump(int argc, const char **argv) {
+static bool _avatarMoveKey(uint32 flag, const char *debugname) {
Ultima8Engine *engine = Ultima8Engine::get_instance();
engine->moveKeyEvent();
if (engine->isAvatarInStasis()) {
- debugPrintf("Can't jump: avatarInStasis\n");
+ debug("Can't %s: avatarInStasis\n", debugname);
return false;
}
AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_JUMP);
+ proc->setMovementFlag(flag);
}
return false;
}
-
-bool Debugger::cmdStopJump(int argc, const char **argv) {
+static bool _avatarMoveKeyEnd(uint32 flag) {
Ultima8Engine *engine = Ultima8Engine::get_instance();
+ engine->moveKeyEvent();
AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
if (proc) {
- proc->clearMovementFlag(AvatarMoverProcess::MOVE_JUMP);
+ proc->clearMovementFlag(flag);
}
return false;
}
-bool Debugger::cmdShortJump(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
+bool Debugger::cmdStartAttack(int argc, const char **argv) {
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_ATTACKING, "attack");
+}
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_SHORT_JUMP);
- }
- return false;
+bool Debugger::cmdStopAttack(int argc, const char **argv) {
+ return _avatarMoveKeyEnd(AvatarMoverProcess::MOVE_ATTACKING);
}
+bool Debugger::cmdStartJump(int argc, const char **argv) {
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_JUMP, "jump");
+}
-bool Debugger::cmdStartTurnLeft(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
- if (engine->isAvatarInStasis()) {
- debugPrintf("Can't turn left: avatarInStasis\n");
- return false;
- }
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
+bool Debugger::cmdStopJump(int argc, const char **argv) {
+ return _avatarMoveKeyEnd(AvatarMoverProcess::MOVE_JUMP);
+}
- if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_TURN_LEFT);
- }
- return false;
+bool Debugger::cmdStartTurnLeft(int argc, const char **argv) {
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_TURN_LEFT, "turn left");
}
bool Debugger::cmdStartTurnRight(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
- if (engine->isAvatarInStasis()) {
- debugPrintf("Can't turn right: avatarInStasis\n");
- return false;
- }
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
-
- if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_TURN_RIGHT);
- }
- return false;
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_TURN_RIGHT, "turn right");
}
bool Debugger::cmdStartMoveForward(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
- if (engine->isAvatarInStasis()) {
- debugPrintf("Can't move forward: avatarInStasis\n");
- return false;
- }
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
-
- if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_FORWARD);
- }
- return false;
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_FORWARD, "move forward");
}
bool Debugger::cmdStartMoveBack(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
- if (engine->isAvatarInStasis()) {
- debugPrintf("Can't move back: avatarInStasis\n");
- return false;
- }
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
-
- if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_BACK);
- }
- return false;
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_BACK, "move back");
}
bool Debugger::cmdStartMoveLeft(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
- if (engine->isAvatarInStasis()) {
- debugPrintf("Can't move left: avatarInStasis\n");
- return false;
- }
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
-
- if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_LEFT);
- }
- return false;
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_LEFT, "move left");
}
bool Debugger::cmdStartMoveRight(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
- if (engine->isAvatarInStasis()) {
- debugPrintf("Can't move right: avatarInStasis\n");
- return false;
- }
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
-
- if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_RIGHT);
- }
- return false;
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_RIGHT, "move right");
}
bool Debugger::cmdStartMoveUp(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
- if (engine->isAvatarInStasis()) {
- debugPrintf("Can't move up: avatarInStasis\n");
- return false;
- }
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
-
- if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_UP);
- }
- return false;
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_UP, "move up");
}
bool Debugger::cmdStartMoveDown(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
- if (engine->isAvatarInStasis()) {
- debugPrintf("Can't move down: avatarInStasis\n");
- return false;
- }
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
-
- if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_DOWN);
- }
- return false;
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_DOWN, "move down");
}
bool Debugger::cmdStopTurnLeft(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
-
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- proc->clearMovementFlag(AvatarMoverProcess::MOVE_TURN_LEFT);
- }
- return false;
+ return _avatarMoveKeyEnd(AvatarMoverProcess::MOVE_TURN_LEFT);
}
bool Debugger::cmdStopTurnRight(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
-
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- proc->clearMovementFlag(AvatarMoverProcess::MOVE_TURN_RIGHT);
- }
- return false;
+ return _avatarMoveKeyEnd(AvatarMoverProcess::MOVE_TURN_RIGHT);
}
bool Debugger::cmdStopMoveForward(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
-
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- proc->clearMovementFlag(AvatarMoverProcess::MOVE_FORWARD);
- }
- return false;
+ return _avatarMoveKeyEnd(AvatarMoverProcess::MOVE_FORWARD);
}
bool Debugger::cmdStopMoveBack(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
-
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- // Clear both back and forward as avatar turns then moves forward when not in combat
- proc->clearMovementFlag(AvatarMoverProcess::MOVE_BACK | AvatarMoverProcess::MOVE_FORWARD);
- }
- return false;
+ // Clear both back and forward as avatar turns then moves forward when not in combat
+ return _avatarMoveKeyEnd(AvatarMoverProcess::MOVE_BACK | AvatarMoverProcess::MOVE_FORWARD);
}
bool Debugger::cmdStopMoveLeft(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
-
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- proc->clearMovementFlag(AvatarMoverProcess::MOVE_LEFT);
- }
- return false;
+ return _avatarMoveKeyEnd(AvatarMoverProcess::MOVE_LEFT);
}
bool Debugger::cmdStopMoveRight(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
-
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- proc->clearMovementFlag(AvatarMoverProcess::MOVE_RIGHT);
- }
- return false;
+ return _avatarMoveKeyEnd(AvatarMoverProcess::MOVE_RIGHT);
}
bool Debugger::cmdStopMoveUp(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
-
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- proc->clearMovementFlag(AvatarMoverProcess::MOVE_UP);
- }
- return false;
+ return _avatarMoveKeyEnd(AvatarMoverProcess::MOVE_UP);
}
bool Debugger::cmdStopMoveDown(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
-
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- proc->clearMovementFlag(AvatarMoverProcess::MOVE_DOWN);
- }
- return false;
+ return _avatarMoveKeyEnd(AvatarMoverProcess::MOVE_DOWN);
}
bool Debugger::cmdStartMoveRun(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
- if (engine->isAvatarInStasis()) {
- debugPrintf("Can't run: avatarInStasis\n");
- return false;
- }
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
-
- if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_RUN);
- }
- return false;
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_RUN, "run");
}
bool Debugger::cmdStopMoveRun(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
-
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- proc->clearMovementFlag(AvatarMoverProcess::MOVE_RUN);
- }
- return false;
+ return _avatarMoveKeyEnd(AvatarMoverProcess::MOVE_RUN);
}
bool Debugger::cmdStartMoveStep(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
- if (engine->isAvatarInStasis()) {
- debugPrintf("Can't step: avatarInStasis\n");
- return false;
- }
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
-
- if (proc) {
- proc->setMovementFlag(AvatarMoverProcess::MOVE_STEP);
- }
- return false;
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_STEP, "step");
}
bool Debugger::cmdStopMoveStep(int argc, const char **argv) {
- Ultima8Engine *engine = Ultima8Engine::get_instance();
- engine->moveKeyEvent();
+ return _avatarMoveKeyEnd(AvatarMoverProcess::MOVE_STEP);
+}
- AvatarMoverProcess *proc = engine->getAvatarMoverProcess();
- if (proc) {
- proc->clearMovementFlag(AvatarMoverProcess::MOVE_STEP);
- }
- return false;
+bool Debugger::cmdShortJump(int argc, const char **argv) {
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_SHORT_JUMP, "short jump");
+}
+
+bool Debugger::cmdStepLeft(int argc, const char **argv) {
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_STEP_LEFT, "step left");
+}
+
+bool Debugger::cmdStepRight(int argc, const char **argv) {
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_STEP_RIGHT, "step right");
+}
+
+bool Debugger::cmdStepForward(int argc, const char **argv) {
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_STEP_FORWARD, "step forward");
+}
+
+bool Debugger::cmdStepBack(int argc, const char **argv) {
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_STEP_BACK, "step back");
+}
+
+bool Debugger::cmdRollLeft(int argc, const char **argv) {
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_ROLL_LEFT, "roll left");
+}
+
+bool Debugger::cmdRollRight(int argc, const char **argv) {
+ return _avatarMoveKey(AvatarMoverProcess::MOVE_ROLL_RIGHT, "roll right");
}
bool Debugger::cmdToggleCombat(int argc, const char **argv) {
diff --git a/engines/ultima/ultima8/misc/debugger.h b/engines/ultima/ultima8/misc/debugger.h
index b2d541c4b1d..1f7c4a8fd97 100644
--- a/engines/ultima/ultima8/misc/debugger.h
+++ b/engines/ultima/ultima8/misc/debugger.h
@@ -149,7 +149,6 @@ private:
// Avatar mover
bool cmdStartJump(int argc, const char **argv);
bool cmdStopJump(int argc, const char **argv);
- bool cmdShortJump(int argc, const char **argv);
bool cmdStartTurnLeft(int argc, const char **argv);
bool cmdStartTurnRight(int argc, const char **argv);
bool cmdStartMoveForward(int argc, const char **argv);
@@ -174,6 +173,15 @@ private:
bool cmdStartAttack(int argc, const char **argv);
bool cmdStopAttack(int argc, const char **argv);
+ // One-shot Avatar mover commands
+ bool cmdShortJump(int argc, const char **argv);
+ bool cmdStepLeft(int argc, const char **argv);
+ bool cmdStepRight(int argc, const char **argv);
+ bool cmdStepForward(int argc, const char **argv);
+ bool cmdStepBack(int argc, const char **argv);
+ bool cmdRollLeft(int argc, const char **argv);
+ bool cmdRollRight(int argc, const char **argv);
+
bool cmdCameraOnAvatar(int argc, const char **argv);
// Audio Process
diff --git a/engines/ultima/ultima8/world/actors/avatar_mover_process.h b/engines/ultima/ultima8/world/actors/avatar_mover_process.h
index bc880fc84ee..44917b24dc5 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.h
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.h
@@ -86,7 +86,14 @@ public:
MOVE_PENDING_TURN_LEFT = 0x2000,
MOVE_PENDING_TURN_RIGHT = 0x4000,
- MOVE_SHORT_JUMP = 0x8000, // Crusader only
+ // Single-button moves (Crusader only)
+ MOVE_SHORT_JUMP = 0x008000,
+ MOVE_ROLL_LEFT = 0x010000,
+ MOVE_ROLL_RIGHT = 0x020000,
+ MOVE_STEP_LEFT = 0x040000,
+ MOVE_STEP_RIGHT = 0x080000,
+ MOVE_STEP_FORWARD = 0x100000,
+ MOVE_STEP_BACK = 0x200000,
MOVE_ANY_DIRECTION = MOVE_MOUSE_DIRECTION | MOVE_FORWARD | MOVE_BACK | MOVE_LEFT | MOVE_RIGHT | MOVE_UP | MOVE_DOWN
};
diff --git a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
index 254e4050c4c..1ae8f6c21c3 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
@@ -142,6 +142,50 @@ static bool _isAnimStartRunning(Animation::Sequence anim) {
anim == Animation::startRunLargeWeapon*/);
}
+bool CruAvatarMoverProcess::checkOneShotMove(Direction direction) {
+ Actor *avatar = getControlledActor();
+
+ static const MovementFlags oneShotFlags[] = {
+ MOVE_ROLL_LEFT, MOVE_ROLL_RIGHT,
+ MOVE_STEP_LEFT, MOVE_STEP_RIGHT,
+ MOVE_STEP_FORWARD, MOVE_STEP_BACK,
+ MOVE_SHORT_JUMP
+ };
+
+ static const Animation::Sequence oneShotAnims[] = {
+ Animation::combatRollLeft, Animation::combatRollRight,
+ Animation::slideLeft, Animation::slideRight,
+ Animation::advance, Animation::retreat,
+ Animation::jumpForward
+ };
+
+ for (int i = 0; i < ARRAYSIZE(oneShotFlags); i++) {
+ if (hasMovementFlags(oneShotFlags[i])) {
+ clearMovementFlag(oneShotFlags[i]);
+ Animation::Sequence anim = oneShotAnims[i];
+ if (avatar->isKneeling()) {
+ // TODO: check what should advance/retreat do here?
+ if (anim == Animation::combatRollLeft)
+ avatar->doAnim(Animation::kneelCombatRollLeft, direction);
+ else if (anim == Animation::combatRollLeft)
+ avatar->doAnim(Animation::kneelCombatRollRight, direction);
+ else if (anim == Animation::advance)
+ step(Animation::kneelingAdvance, direction);
+ else if (anim == Animation::retreat)
+ step(Animation::kneelingRetreat, direction);
+ } else {
+ if (anim == Animation::advance || anim == Animation::retreat)
+ step(anim, direction);
+ else
+ avatar->doAnim(anim, direction);
+ }
+ return true;
+ }
+ }
+
+ return false;
+}
+
void CruAvatarMoverProcess::handleCombatMode() {
Actor *avatar = getControlledActor();
MainActor *mainactor = dynamic_cast<MainActor *>(avatar);
@@ -161,11 +205,10 @@ void CruAvatarMoverProcess::handleCombatMode() {
if (stasis)
return;
- if (hasMovementFlags(MOVE_SHORT_JUMP)) {
- clearMovementFlag(MOVE_SHORT_JUMP);
- avatar->doAnim(Animation::jumpForward, direction);
+ if (checkOneShotMove(direction))
return;
- } else if (hasMovementFlags(MOVE_FORWARD)) {
+
+ if (hasMovementFlags(MOVE_FORWARD)) {
Animation::Sequence nextanim;
if (hasMovementFlags(MOVE_STEP)) {
nextanim = avatar->isKneeling() ?
@@ -325,12 +368,6 @@ void CruAvatarMoverProcess::handleNormalMode() {
mainactor->toggleInCombat();
}
- if (hasMovementFlags(MOVE_SHORT_JUMP)) {
- clearMovementFlag(MOVE_SHORT_JUMP);
- avatar->doAnim(Animation::jumpForward, direction);
- return;
- }
-
if (!hasMovementFlags(MOVE_ANY_DIRECTION) && lastanim == Animation::run) {
// if we were running, slow to a walk before stopping
// (even in stasis)
@@ -352,6 +389,9 @@ void CruAvatarMoverProcess::handleNormalMode() {
if (stasis)
return;
+ if (checkOneShotMove(direction))
+ return;
+
bool moving = (lastanim == Animation::step || lastanim == Animation::run || lastanim == Animation::walk);
DirectionMode dirmode = avatar->animDirMode(Animation::step);
diff --git a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.h b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.h
index 55219b76424..8f97d8843db 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.h
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.h
@@ -87,6 +87,7 @@ private:
void step(Animation::Sequence action, Direction direction, bool adjusted = false);
+ bool checkOneShotMove(Direction direction);
};
} // End of namespace Ultima8
Commit: 5fe1c35fe0878a5b7a4170db5ebd646463f7096a
https://github.com/scummvm/scummvm/commit/5fe1c35fe0878a5b7a4170db5ebd646463f7096a
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2022-01-03T19:15:49+09:00
Commit Message:
ULTIMA8: Add No Regret easteregg ini option
Gives players a ways to enjoy festive music at any time of year.
Changed paths:
engines/ultima/ultima8/audio/cru_music_process.cpp
diff --git a/engines/ultima/ultima8/audio/cru_music_process.cpp b/engines/ultima/ultima8/audio/cru_music_process.cpp
index b25310ad2f8..c0f8a515dbc 100644
--- a/engines/ultima/ultima8/audio/cru_music_process.cpp
+++ b/engines/ultima/ultima8/audio/cru_music_process.cpp
@@ -20,6 +20,8 @@
*/
#include "common/system.h"
+#include "common/config-manager.h"
+
#include "ultima/ultima8/ultima8.h"
#include "ultima/ultima8/audio/cru_music_process.h"
#include "ultima/ultima8/filesys/file_system.h"
@@ -119,7 +121,7 @@ void CruMusicProcess::playMusic(int track) {
// Regret has a Christmas music easter egg.
TimeDate t;
g_system->getTimeAndDate(t);
- if (t.tm_mon == 11 && t.tm_mday >= 24) {
+ if ((t.tm_mon == 11 && t.tm_mday >= 24) || ConfMan.getBool("always_christmas")) {
track = 22;
}
}
More information about the Scummvm-git-logs
mailing list