[Scummvm-git-logs] scummvm master -> 4c0191c22d8ad19493b77a6282ec649f81b1059c

OMGPizzaGuy noreply at scummvm.org
Wed Dec 21 04:42:56 UTC 2022


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:
4c0191c22d ULTIMA8: Fix attacking backwards by turning to direction first


Commit: 4c0191c22d8ad19493b77a6282ec649f81b1059c
    https://github.com/scummvm/scummvm/commit/4c0191c22d8ad19493b77a6282ec649f81b1059c
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2022-12-20T22:42:15-06:00

Commit Message:
ULTIMA8: Fix attacking backwards by turning to direction first

Changed paths:
    engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
    engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp


diff --git a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
index 0285039471e..5c90621dcab 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
@@ -81,34 +81,38 @@ void AvatarMoverProcess::run() {
 bool AvatarMoverProcess::checkTurn(Direction direction, bool moving) {
 	Actor *avatar = getControlledActor();
 	Direction curdir = avatar->getDir();
+	if (direction == curdir)
+		return false;
+
+	if (!moving) {
+		turnToDirection(direction);
+		return true;
+	}
+
+	// Do not turn if moving backward in combat stance
 	bool combat = avatar->isInCombat() && !avatar->hasActorFlags(Actor::ACT_COMBATRUN);
+	if (combat && Direction_Invert(direction) == curdir)
+		return false;
 
-	// Note: don't need to turn if moving backward in combat stance
-	// CHECKME: currently, first turn in the right direction
-	if (direction != curdir && !(combat && Direction_Invert(direction) == curdir)) {
-		Animation::Sequence lastanim = avatar->getLastAnim();
-
-		if (moving &&
-				(lastanim == Animation::walk || lastanim == Animation::run ||
-				 lastanim == Animation::combatStand ||
-				 (GAME_IS_CRUSADER && (lastanim == Animation::startRunSmallWeapon ||
-				 lastanim == Animation::combatRunSmallWeapon))) &&
-				(ABS(direction - curdir) + 2) % 16 <= 4) {
-			// don't need to explicitly do a turn animation
-			return false;
-		}
+	Animation::Sequence lastanim = avatar->getLastAnim();
 
-		if (moving && lastanim == Animation::run) {
-			// slow down to a walk first
-			waitFor(avatar->doAnim(Animation::walk, curdir));
-			return true;
-		}
+	// Check if we don't need to explicitly do a turn animation
+	if ((lastanim == Animation::walk || lastanim == Animation::run ||
+		 lastanim == Animation::combatStand ||
+		 (GAME_IS_CRUSADER && (lastanim == Animation::startRunSmallWeapon ||
+							   lastanim == Animation::combatRunSmallWeapon))) &&
+		(ABS(direction - curdir) + 2) % 16 <= 4) {
+		return false;
+	}
 
-		turnToDirection(direction);
+	if (lastanim == Animation::run) {
+		// slow down to a walk first
+		waitFor(avatar->doAnim(Animation::walk, curdir));
 		return true;
 	}
 
-	return false;
+	turnToDirection(direction);
+	return true;
 }
 
 void AvatarMoverProcess::turnToDirection(Direction direction) {
diff --git a/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
index f2902a62c1e..12ef395bddc 100644
--- a/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
@@ -150,7 +150,7 @@ void U8AvatarMoverProcess::handleCombatMode() {
 			// double left click = attack
 //			pout << "AvatarMover: combat attack" << Std::endl;
 
-			if (checkTurn(mousedir, true))
+			if (checkTurn(mousedir, false))
 				return;
 
 			waitFor(avatar->doAnim(Animation::attack, mousedir));




More information about the Scummvm-git-logs mailing list