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

OMGPizzaGuy noreply at scummvm.org
Tue May 14 03:03:37 UTC 2024


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:
d784f5db75 ULTIMA8: Fix player falling over when taking fall damage.


Commit: d784f5db75f99553f577696bf6f086588f3c25ab
    https://github.com/scummvm/scummvm/commit/d784f5db75f99553f577696bf6f086588f3c25ab
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2024-05-13T22:03:04-05:00

Commit Message:
ULTIMA8: Fix player falling over when taking fall damage.
Make use of stunned flag to indicate a significant fall occurred and use it to queue head shaking reaction. Fixes #14036

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


diff --git a/engines/ultima/ultima8/world/actors/actor.cpp b/engines/ultima/ultima8/world/actors/actor.cpp
index 2be600484e3..31976713a84 100644
--- a/engines/ultima/ultima8/world/actors/actor.cpp
+++ b/engines/ultima/ultima8/world/actors/actor.cpp
@@ -1235,8 +1235,7 @@ void Actor::receiveHitU8(uint16 other, Direction dir, int damage, uint16 damage_
 		if ((damage_type & WeaponInfo::DMG_FALLING) && damage >= 6) {
 			// high falling damage knocks you down
 			doAnim(Animation::fallBackwards, dir_current);
-
-			// TODO: shake head after getting back up when not in combat
+			setActorFlag(ACT_STUNNED);
 			return;
 		}
 
diff --git a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
index a984ecf12a1..f569f8c610f 100644
--- a/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/avatar_mover_process.cpp
@@ -143,7 +143,12 @@ bool AvatarMoverProcess::standUpIfNeeded(Direction direction) {
 
 	if (lastanim == Animation::die || lastanim == Animation::fallBackwards) {
 		if (!stasis) {
-			waitFor(avatar->doAnim(Animation::standUp, direction));
+			ProcId pid = avatar->doAnim(Animation::standUp, direction);
+			if (avatar->hasActorFlags(Actor::ACT_STUNNED)) {
+				avatar->clearActorFlag(Actor::ACT_STUNNED);
+				pid = avatar->doAnimAfter(Animation::shakeHead, direction, pid);
+			}
+			waitFor(pid);
 		}
 		return true;
 	}
diff --git a/engines/ultima/ultima8/world/gravity_process.cpp b/engines/ultima/ultima8/world/gravity_process.cpp
index 68584d77c54..94b9139b8d7 100644
--- a/engines/ultima/ultima8/world/gravity_process.cpp
+++ b/engines/ultima/ultima8/world/gravity_process.cpp
@@ -340,7 +340,7 @@ void GravityProcess::actorFallStoppedU8(Actor *actor, int height) {
 		if (audioproc) audioproc->playSFX(51, 250, _itemNum, 0); // CONSTANT!
 	}
 
-	if (!actor->isDead() && actor->getLastAnim() != Animation::die) {
+	if (!actor->isDead() && actor->getLastAnim() != Animation::die && !actor->hasActorFlags(Actor::ACT_STUNNED)) {
 		Kernel *kernel = Kernel::get_instance();
 
 		// play land animation, overriding other animations




More information about the Scummvm-git-logs mailing list