[Scummvm-git-logs] scummvm master -> d004929c57d57c25dd80db929cb3f4172fb2fe98

mduggan mgithub at guarana.org
Sat Mar 6 06:15:07 UTC 2021


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:
d004929c57 ULTIMA8: Lots of improvements to Crusader mover process.


Commit: d004929c57d57c25dd80db929cb3f4172fb2fe98
    https://github.com/scummvm/scummvm/commit/d004929c57d57c25dd80db929cb3f4172fb2fe98
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-03-06T15:14:44+09:00

Commit Message:
ULTIMA8: Lots of improvements to Crusader mover process.

Makes it more like original.  Probably still some work to do.

Changed paths:
    engines/ultima/ultima8/graphics/anim_dat.cpp
    engines/ultima/ultima8/world/actors/actor.cpp
    engines/ultima/ultima8/world/actors/actor_anim_process.cpp
    engines/ultima/ultima8/world/actors/animation.cpp
    engines/ultima/ultima8/world/actors/animation.h
    engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
    engines/ultima/ultima8/world/gravity_process.cpp
    engines/ultima/ultima8/world/item.cpp


diff --git a/engines/ultima/ultima8/graphics/anim_dat.cpp b/engines/ultima/ultima8/graphics/anim_dat.cpp
index ab9b81f14d..4a6bd4a4cd 100644
--- a/engines/ultima/ultima8/graphics/anim_dat.cpp
+++ b/engines/ultima/ultima8/graphics/anim_dat.cpp
@@ -88,55 +88,57 @@ uint32 AnimDat::getActionNumberForSequence(Animation::Sequence action, const Act
 
 		switch (action) {
 		case Animation::stand:
-			return 0;
+			return Animation::standCru;
 		case Animation::step:
-			return 1; // Same as walk in crusader.
+			return Animation::walkCru; // Same as walk in crusader.
 		case Animation::walk:
-			return 1;
+			return Animation::walkCru;
 		case Animation::retreat:
-			return (smallwpn ? 2 : 45);
+			return (smallwpn ? Animation::retreatSmallWeapon : Animation::retreatLargeWeapon);
 		case Animation::run:
-			return (smallwpn ? 3 : 49);
-		case Animation::combatRun:
-			return (smallwpn ? 48 : 49);
+			return Animation::runCru;
+		case Animation::combatRunSmallWeapon:
+			return (smallwpn ? Animation::combatRunSmallWeapon : Animation::combatRunLargeWeapon);
 		case Animation::combatStand:
-			return (smallwpn ? 4 : 37);
-		// Note: 5, 6, 9, 10 == nothing (for avatar)?
+			return (smallwpn ? Animation::combatStandSmallWeapon : Animation::combatStandLargeWeapon);
 		case Animation::unreadyWeapon:
-			return (smallwpn ? 11: 16);
+				return (smallwpn ? Animation::unreadySmallWeapon :  Animation::unreadyLargeWeapon);
 		case Animation::readyWeapon:
-			return (smallwpn ? 7 : 12);
+			return (smallwpn ? Animation::readySmallWeapon : Animation::readyLargeWeapon);
 		case Animation::attack: {
 			if (smallwpn)
-				return 8;
-			return (altfire ? 54 : 13);
+				return Animation::fireSmallWeapon;
+			return (altfire ? Animation::brightFireLargeWpn : Animation::fireLargeWeapon);
 		}
 		// Note: 14, 17, 21, 22, 29 == nothing for avatar
 		case Animation::fallBackwards:
-			return 18;
+			return Animation::fallBackwardsCru;
 		case Animation::die:
-			return 18; // by default fall over backwards. TODO: randomly use 20 for some deaths - fall forwards.
+			return Animation::fallBackwardsCru; // by default fall over backwards. TODO: randomly use Animation::fallForwardsCru for some deaths.
 		case Animation::advance:
-			return (smallwpn ? 36 : 44);
-		case Animation::startKneeling:
-			return 40;
+			return (smallwpn ? Animation::advanceSmallWeapon : Animation::advanceLargeWeapon);
+		// Kneel start/end never used in code - mover process uses correct ones.
+		/*case Animation::startKneeling:
+			return Animation::kneelStartCru;
 		case Animation::stopKneeling:
-			return 41;
+			return Animation::kneelEndCru;*/
 		case Animation::kneel:
-			return (smallwpn ? 46 : 47);
+			return (smallwpn ? Animation::kneelingWithSmallWeapon : Animation::kneelingWithLargeWeapon);
 		case Animation::kneelAndFire: {
 			if (smallwpn)
-				return 42;
-			return (altfire ? 50 : 43);
+				return Animation::kneelAndFireSmallWeapon;
+			return (altfire ? Animation::brightKneelAndFireLargeWeapon : Animation::kneelAndFireLargeWeapon);
 		}
 		case Animation::lookLeft:
 			return 0;
 		case Animation::lookRight:
 			return 0;
 		case Animation::jump:
-			return 58; // 58 is a shorter jump?
-		case Animation::startRunWithLargeWeapon:
-			return (smallwpn ? 34 : 35);
+			return Animation::quickJumpCru;
+		case Animation::startRunLargeWeapon:
+			return (smallwpn ? Animation::startRunSmallWeapon : Animation::startRunLargeWeapon2);
+		case Animation::stopRunningAndDrawSmallWeapon:
+			return (smallwpn ? Animation::stopRunningAndDrawSmallWeapon : Animation::stopRunningAndDrawLargeWeapon);
 		default:
 			return action_int;
 		}
diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index e6d544ac28..30924a6933 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -479,23 +479,24 @@ uint16 Actor::doAnim(Animation::Sequence anim, Direction dir, unsigned int steps
 		if (animDirMode(anim) == dirmode_8dirs)
 			dir = static_cast<Direction>(dir - (static_cast<uint32>(dir) % 2));
 
-		if (anim == Animation::readyWeapon || anim == Animation::stopRunningAndDrawWeapon ||
+		if (anim == Animation::readyWeapon || anim == Animation::stopRunningAndDrawSmallWeapon ||
 				anim == Animation::combatStand || anim == Animation::attack || anim == Animation::kneel ||
 				anim == Animation::kneelAndFire)
 			setActorFlag(ACT_WEAPONREADY);
 		else
 			clearActorFlag(ACT_WEAPONREADY);
 
-		if (anim == Animation::startKneeling || anim == Animation::kneelAndFire ||
+		if (anim == Animation::kneelStartCru || anim == Animation::kneelAndFire ||
 				anim == Animation::kneelAndFireSmallWeapon ||
 				anim == Animation::kneelAndFireLargeWeapon ||
-				anim == Animation::kneel)
+				anim == Animation::kneelingAdvance ||
+				anim == Animation::kneelingRetreat)
 			setActorFlag(ACT_KNEELING);
 		else
 			clearActorFlag(ACT_KNEELING);
 	}
 
-#if 0
+#if 1
 	if (_objId == 1) {
 		int32 x, y, z;
 		getLocation(x, y, z);
@@ -942,7 +943,7 @@ void Actor::receiveHitCru(uint16 other, Direction dir, int damage, uint16 damage
 
 void Actor::tookHitCru() {
 	Animation::Sequence lastanim = getLastAnim();
-	if (lastanim == Animation::unknownAnim30 || lastanim == Animation::startRunWithLargeWeapon) {
+	if (lastanim == Animation::unknownAnim30 || lastanim == Animation::startRunLargeWeapon) {
 		//uint16 controllednpc = World::get_instance()->getControlledNPCNum();
 		bool canseecontrolled = true; //this->canSee(controllednpc);
 		if (canseecontrolled) {
diff --git a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
index c83077c914..70d664a1f5 100644
--- a/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
+++ b/engines/ultima/ultima8/world/actors/actor_anim_process.cpp
@@ -115,7 +115,7 @@ bool ActorAnimProcess::init() {
 	if (_itemNum == watchactor)
 		pout << "Animation [" << Kernel::get_instance()->getFrameNum()
 		     << "] ActorAnimProcess " << getPid() << " created ("
-		     << _action << "," << _dir << ") _steps " << _steps << Std::endl;
+		     << _action << "," << _dir << ") steps " << _steps << Std::endl;
 #endif
 
 	return true;
diff --git a/engines/ultima/ultima8/world/actors/animation.cpp b/engines/ultima/ultima8/world/actors/animation.cpp
index 44e053dfd1..fa5572ce0b 100644
--- a/engines/ultima/ultima8/world/actors/animation.cpp
+++ b/engines/ultima/ultima8/world/actors/animation.cpp
@@ -60,18 +60,18 @@ bool isCombatAnimCru(const Sequence anim) {
 	case attack:
 	case kick:
 	case kneel:
-	case startKneeling:
-	case stopKneeling:
+	case kneelStartCru:
+	case kneelEndCru:
 	case kneelAndFire:
-	case fire2:
+	case brightFireLargeWpn:
 	case combatRollLeft:
 	case combatRollRight:
 	case slideLeft:
 	case slideRight:
 	case startRun:
-	case startRunWithLargeWeapon:
+	case startRunLargeWeapon:
 	case run:
-	case stopRunningAndDrawWeapon:
+	case stopRunningAndDrawSmallWeapon:
 		return true;
 	default:
 		return false;
diff --git a/engines/ultima/ultima8/world/actors/animation.h b/engines/ultima/ultima8/world/actors/animation.h
index dea6764120..741830c0c3 100644
--- a/engines/ultima/ultima8/world/actors/animation.h
+++ b/engines/ultima/ultima8/world/actors/animation.h
@@ -94,43 +94,57 @@ enum Sequence {
 	            //61: unused in u8
 	            //62: unused in u8
 	            //63: unused in u8
-	// Some crusader-specific animations (some use the same IDs as above)
-	reload = 15,
+
+	// All belowa are crusader-specific animations (some use the same IDs as above)
+	standCru = 0,
+	walkCru = 1,
+	retreatSmallWeapon = 2,
+	runCru = 3,
+	combatStandSmallWeapon = 4,
+	readySmallWeapon = 7,
+	fireSmallWeapon = 8,
+	unreadySmallWeapon = 11,
+	readyLargeWeapon = 12,
+	fireLargeWeapon = 13,
+	reload = 14,
+	unreadyLargeWeapon = 16,
+	fallBackwardsCru = 18,
+	fallForwardsCru = 20,
 	combatRollLeft = 23,
 	combatRollRight = 24,
-	walkWithGun = 25,
+	stopRunningAndDrawLargeWeapon = 25,
 	kneelAndFire = 26,
 	slideLeft = 28,
 	slideRight = 29,
 	unknownAnim30 = 30,
-	startRunWithLargeWeapon = 31,
+	startRunLargeWeapon = 31,
 	teleportIn = 32,
 	teleportOut = 33,
-	startRunWithSmallWeapon = 34,
-	startRunWithLargeWeapon2 = 35,
-	advanceWithSmallWeapon = 36,
-	halfStep = 37,
+	startRunSmallWeapon = 34,
+	startRunLargeWeapon2 = 35,
+	advanceSmallWeapon = 36,
+	combatStandLargeWeapon = 37,
 	startRun = 38,
-	stopRunningAndDrawWeapon = 39,
+	stopRunningAndDrawSmallWeapon = 39,
 	kneelStartCru = 40,
 	kneelEndCru = 41,
 	kneelAndFireSmallWeapon = 42,
 	kneelAndFireLargeWeapon = 43,
-	advanceWithLargeWeapon = 44,
-	quickRetreat = 45,
+	advanceLargeWeapon = 44,
+	retreatLargeWeapon = 45,
 	kneelingWithSmallWeapon = 46,
 	kneelingWithLargeWeapon = 47,
-	combatRun = 48,
-	runWithLargeWeapon = 49,
-	runWithLargeWeapon2 = 50,
+	combatRunSmallWeapon = 48,
+	combatRunLargeWeapon = 49,
+	brightKneelAndFireLargeWeapon = 50,
 	kneelingRetreat = 51,
 	kneelingAdvance = 52,
 	kneelingSlowRetreat = 53,
-	fire2 = 54,
+	brightFireLargeWpn = 54,
 	electrocuted = 55,
 	jumpForward = 56,
 	surrender = 57,
-	anotherJump = 58,
+	quickJumpCru = 58,
 	jumpLanding = 59,
 	surrenderStand = 60,
 	slowCombatRollLeft = 61,
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 de378b5139..fc195f2f91 100644
--- a/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/cru_avatar_mover_process.cpp
@@ -47,7 +47,7 @@ void CruAvatarMoverProcess::run() {
 	// Even when we are not doing anything (because we're waiting for an anim)
 	// we check if the combat angle needs updating - this keeps it smooth.
 
-	const MainActor *avatar = getMainActor();
+	const Actor *avatar = getControlledActor();
 	assert(avatar);
 
 	// When not in combat the angle is kept as -1
@@ -89,8 +89,19 @@ void CruAvatarMoverProcess::handleHangingMode() {
 	assert(false);
 }
 
+static bool _isAnimRunningJumping(Animation::Sequence anim) {
+	return (anim == Animation::run || anim == Animation::combatRunSmallWeapon ||
+			anim == Animation::combatRunLargeWeapon || anim == Animation::jumpForward);
+}
+
+static bool _isAnimStartRunning(Animation::Sequence anim) {
+	return (anim == Animation::startRun || anim == Animation::startRunSmallWeapon ||
+			anim == Animation::startRunLargeWeapon);
+}
+
 void CruAvatarMoverProcess::handleCombatMode() {
-	MainActor *avatar = getMainActor();
+	Actor *avatar = getControlledActor();
+	MainActor *mainactor = dynamic_cast<MainActor *>(avatar);
 	const Animation::Sequence lastanim = avatar->getLastAnim();
 	Direction direction = (_avatarAngle >= 0 ? Direction_FromCentidegrees(_avatarAngle) : avatar->getDir());
 	const Direction curdir = avatar->getDir();
@@ -99,36 +110,35 @@ void CruAvatarMoverProcess::handleCombatMode() {
 	// never idle when in combat
 	_idleTime = 0;
 
-	// If Avatar has fallen down, stand up
-	if (standUpIfNeeded(direction)) {
-		return;
-	} else if (stasis) {
+	if (stasis)
 		return;
-	} else if (hasMovementFlags(MOVE_FORWARD)) {
+
+	if (hasMovementFlags(MOVE_FORWARD)) {
 		Animation::Sequence nextanim;
 		if (hasMovementFlags(MOVE_STEP)) {
 			nextanim = avatar->isKneeling() ?
 							Animation::kneelingAdvance : Animation::advance;
 		} else if (hasMovementFlags(MOVE_RUN)) {
 			// Take a step before running
-			if (lastanim != Animation::startRunWithLargeWeapon && lastanim != Animation::run)
-				nextanim = Animation::startRunWithLargeWeapon;
+			if (lastanim == Animation::walk || _isAnimRunningJumping(lastanim) || _isAnimStartRunning(lastanim))
+				nextanim = Animation::combatRunSmallWeapon;
 			else
-				nextanim = Animation::run;
+				nextanim = Animation::startRunSmallWeapon;
 		} else if (hasMovementFlags(MOVE_JUMP)) {
-			if (lastanim == Animation::walk || lastanim == Animation::run)
+			if (lastanim == Animation::walk || lastanim == Animation::run || lastanim == Animation::combatRunSmallWeapon)
 				nextanim = Animation::jumpForward;
 			else
 				nextanim = Animation::jump;
 			// Jump always ends out of combat
 			avatar->clearInCombat();
 		} else if (avatar->isKneeling()) {
-			nextanim = Animation::stopKneeling;
+			nextanim = Animation::kneelEndCru;
 			avatar->clearActorFlag(Actor::ACT_KNEELING);
 		} else {
 			// moving forward from combat stows weapon
 			nextanim = Animation::walk;
-			avatar->toggleInCombat();
+			if (mainactor)
+				mainactor->toggleInCombat();
 		}
 
 		// don't check weapon here, Avatar can go straight from drawn-weapon to
@@ -139,7 +149,7 @@ void CruAvatarMoverProcess::handleCombatMode() {
 		Animation::Sequence nextanim;
 		if (hasMovementFlags(MOVE_JUMP)) {
 			if (!avatar->isKneeling()) {
-				nextanim = Animation::startKneeling;
+				nextanim = Animation::kneelStartCru;
 				avatar->setActorFlag(Actor::ACT_KNEELING);
 			} else {
 				// Do nothing if already kneeling
@@ -152,7 +162,7 @@ void CruAvatarMoverProcess::handleCombatMode() {
 		return;
 	} else if (hasMovementFlags(MOVE_STEP)) {
 		if (avatar->isKneeling()) {
-			avatar->doAnim(Animation::stopKneeling, direction);
+			avatar->doAnim(Animation::kneelEndCru, direction);
 			return;
 		} else {
 			if (hasMovementFlags(MOVE_TURN_LEFT)) {
@@ -188,18 +198,16 @@ void CruAvatarMoverProcess::handleCombatMode() {
 			return;
 
 		Animation::Sequence nextanim = Animation::combatStand;
-		if (lastanim == Animation::run && !hasMovementFlags(MOVE_RUN)) {
-			// want to go back to combat mode from run
-			nextanim = Animation::stopRunningAndDrawWeapon;
+		if ((lastanim == Animation::run || lastanim == Animation::combatRunSmallWeapon) && !hasMovementFlags(MOVE_RUN)) {
+			// want to go back to combat mode  from run
+			nextanim = Animation::stopRunningAndDrawSmallWeapon;
 		} else if (hasMovementFlags(MOVE_BACK)) {
 			nextanim = Animation::retreat;
 			nextdir = Direction_Invert(direction);
 		}
 
 		if (hasMovementFlags(MOVE_RUN)) {
-			// Take a step before running.  Don't clear combat mode in Cruasder
-			// - running always finishes with drawing weapon
-			nextanim = Animation::run;
+			nextanim = Animation::combatRunSmallWeapon;
 		}
 
 		nextanim = Animation::checkWeapon(nextanim, lastanim);
@@ -218,6 +226,10 @@ void CruAvatarMoverProcess::handleCombatMode() {
 		return;
 	}
 
+	if (_isAnimRunningJumping(lastanim) || _isAnimStartRunning(idleanim)) {
+		idleanim = Animation::stopRunningAndDrawSmallWeapon;
+	}
+
 	// not doing anything in particular? stand
 	if (lastanim != idleanim) {
 		Animation::Sequence nextanim = Animation::checkWeapon(idleanim, lastanim);
@@ -226,7 +238,8 @@ void CruAvatarMoverProcess::handleCombatMode() {
 }
 
 void CruAvatarMoverProcess::handleNormalMode() {
-	MainActor *avatar = getMainActor();
+	Actor *avatar = getControlledActor();
+	MainActor *mainactor = dynamic_cast<MainActor *>(avatar);
 	const Animation::Sequence lastanim = avatar->getLastAnim();
 	Direction direction = avatar->getDir();
 	const bool stasis = Ultima8Engine::get_instance()->isAvatarInStasis();
@@ -246,17 +259,14 @@ void CruAvatarMoverProcess::handleNormalMode() {
 	// User toggled combat while in combatRun
 	if (avatar->isInCombat()) {
 		avatar->clearActorFlag(Actor::ACT_COMBATRUN);
-		avatar->toggleInCombat();
+		if (mainactor)
+			mainactor->toggleInCombat();
 	}
 
-	// If Avatar has fallen down and not dead, get up!
-	if (standUpIfNeeded(direction))
-		return;
-
 	if (!hasMovementFlags(MOVE_ANY_DIRECTION) && lastanim == Animation::run) {
 		// if we were running, slow to a walk before stopping
 		// (even in stasis)
-		waitFor(avatar->doAnim(Animation::stopRunningAndDrawWeapon, direction));
+		waitFor(avatar->doAnim(Animation::stopRunningAndDrawSmallWeapon, direction));
 		avatar->setInCombat(0);
 		avatar->clearActorFlag(Actor::ACT_COMBATRUN);
 		return;
@@ -280,7 +290,8 @@ void CruAvatarMoverProcess::handleNormalMode() {
 	if (hasMovementFlags(MOVE_RUN)) {
 		if (lastanim == Animation::run
 			|| lastanim == Animation::startRun
-			|| lastanim == Animation::startRunWithLargeWeapon
+			|| lastanim == Animation::startRunSmallWeapon
+			|| lastanim == Animation::combatRunSmallWeapon
 			|| lastanim == Animation::walk) {
 			// keep running
 			nextanim = Animation::run;
@@ -298,7 +309,8 @@ void CruAvatarMoverProcess::handleNormalMode() {
 	}
 
 	if (hasMovementFlags(MOVE_BACK)) {
-		avatar->toggleInCombat();
+		if (mainactor)
+			mainactor->toggleInCombat();
 		step(Animation::retreat, direction);
 		return;
 	}
@@ -331,9 +343,12 @@ void CruAvatarMoverProcess::handleNormalMode() {
 
 void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction,
                               bool adjusted) {
-	MainActor *avatar = getMainActor();
+	Actor *avatar = getControlledActor();
+
+	// For "start run" animations, don't call it a success unless we can actually run
+	Animation::Sequence testaction = _isAnimStartRunning(action) ? Animation::run : action;
 
-	Animation::Result res = avatar->tryAnim(action, direction);
+	Animation::Result res = avatar->tryAnim(testaction, direction);
 	Animation::Result initialres = res;
 
 	if (res != Animation::SUCCESS) {
@@ -360,7 +375,7 @@ void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction
 			if (currentmap->isValidPosition(x, y, z, avatar->getShape(), avatar->getObjId(),
 											nullptr, nullptr, &blocker)) {
 				avatar->setLocation(x, y, z);
-				res = avatar->tryAnim(action, direction);
+				res = avatar->tryAnim(testaction, direction);
 				if (res == Animation::SUCCESS) {
 					// move to starting point for real (trigger fast area updates etc)
 					avatar->setLocation(origpt.x, origpt.y, origpt.z);
@@ -378,13 +393,17 @@ void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction
 		}
 	}
 
-	if ((action == Animation::step || action == Animation::advance ||
-		 action == Animation::retreat || action == Animation::run ||
-		 action == Animation::startRunWithLargeWeapon ||
+	if ((action == Animation::step || action == Animation::run ||
 		 action == Animation::startRun || action == Animation::walk)
 		&& res == Animation::FAILURE) {
 		action = Animation::stand;
 	}
+	else if ((action == Animation::advance || action == Animation::retreat ||
+		 action == Animation::combatRunSmallWeapon ||
+		 action == Animation::startRunSmallWeapon)
+		&& res == Animation::FAILURE) {
+		action = Animation::combatStand;
+	}
 
 	bool moving = (action == Animation::run || action == Animation::walk);
 
@@ -396,7 +415,7 @@ void CruAvatarMoverProcess::step(Animation::Sequence action, Direction direction
 }
 
 void CruAvatarMoverProcess::tryAttack() {
-	MainActor *avatar = getMainActor();
+	Actor *avatar = getControlledActor();
 	Direction dir = avatar->getDir();
 	if (!avatar->isInCombat()) {
 		avatar->setInCombat(0);
diff --git a/engines/ultima/ultima8/world/gravity_process.cpp b/engines/ultima/ultima8/world/gravity_process.cpp
index 8401a3b45d..e7c71053e2 100644
--- a/engines/ultima/ultima8/world/gravity_process.cpp
+++ b/engines/ultima/ultima8/world/gravity_process.cpp
@@ -349,7 +349,7 @@ void GravityProcess::actorFallStoppedCru(Actor *actor, int height) {
 	Kernel *kernel = Kernel::get_instance();
 
 	if (height / 8 > 2 &&
-		(lastanim != Animation::anotherJump &&
+		(lastanim != Animation::quickJumpCru &&
 		 lastanim != Animation::slowCombatRollLeft &&
 		 lastanim != Animation::slowCombatRollRight &&
 		 lastanim != Animation::combatRollLeft &&
@@ -357,7 +357,7 @@ void GravityProcess::actorFallStoppedCru(Actor *actor, int height) {
 		 lastanim != Animation::run &&
 		 lastanim != Animation::jumpForward &&
 		 lastanim != Animation::unknownAnim30 &&
-		 lastanim != Animation::runWithLargeWeapon)) {
+		 lastanim != Animation::brightKneelAndFireLargeWeapon)) {
 		// play land animation, overriding other animations
 		kernel->killProcesses(_itemNum, ActorAnimProcess::ACTOR_ANIM_PROC_TYPE, false); // CONSTANT!
 		ProcId lpid = actor->doAnim(Animation::jumpLanding, dir_current);
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index bcf68dd903..56bb6fb5e9 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -1327,11 +1327,11 @@ uint16 Item::fireDistance(Item *other, Direction dir, int16 xoff, int16 yoff, in
 			else
 				anim = Animation::kneelAndFireLargeWeapon;
 		} else {
-			// TODO: fire2 seems to be different in Regret, check me.
+			// TODO: fireLarge seems to be different ID in Regret, check me.
 			if (ma || smallwpn)
-				anim = Animation::attack;
+				anim = Animation::fireSmallWeapon;
 			else
-				anim = Animation::fire2;
+				anim = Animation::fireLargeWeapon;
 		}
 
 		bool first_offsets = false;




More information about the Scummvm-git-logs mailing list