[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