[Scummvm-git-logs] scummvm master -> 727d0745544ab6dca65d2a641b96841eb12426dc

mduggan mgithub at guarana.org
Fri Apr 30 07:56:38 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:
727d074554 ULTIMA8: Don't stand when casting a spell


Commit: 727d0745544ab6dca65d2a641b96841eb12426dc
    https://github.com/scummvm/scummvm/commit/727d0745544ab6dca65d2a641b96841eb12426dc
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2021-04-30T16:47:48+09:00

Commit Message:
ULTIMA8: Don't stand when casting a spell

Fixes #12093, the avatar keeps standing when casting a spell.  This is because
there are breaks between the animations, and the mover kept resetting to
standing.  Don't reset if the last animation was a cast.

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


diff --git a/engines/ultima/ultima8/world/actors/animation.cpp b/engines/ultima/ultima8/world/actors/animation.cpp
index 77e7a8ac20..dc153407d3 100644
--- a/engines/ultima/ultima8/world/actors/animation.cpp
+++ b/engines/ultima/ultima8/world/actors/animation.cpp
@@ -51,6 +51,19 @@ bool isCombatAnimU8(const Sequence anim) {
 	}
 }
 
+bool isCastAnimU8(const Sequence anim) {
+	switch (anim) {
+	case cast1:
+	case cast2:
+	case cast3:
+	case cast4:
+	case cast5:
+		return true;
+	default:
+		return false;
+	}
+}
+
 bool isCombatAnimCru(const Sequence anim) {
 	switch (anim) {
 	case combatStand:
diff --git a/engines/ultima/ultima8/world/actors/animation.h b/engines/ultima/ultima8/world/actors/animation.h
index b36a136cd1..3a5add382f 100644
--- a/engines/ultima/ultima8/world/actors/animation.h
+++ b/engines/ultima/ultima8/world/actors/animation.h
@@ -167,6 +167,7 @@ enum Result {
 bool isCombatAnim(const Sequence anim);
 bool isCombatAnimU8(const Sequence anim);
 bool isCombatAnimCru(const Sequence anim);
+bool isCastAnimU8(const Sequence anim);
 Sequence checkWeapon(const Sequence nextanim, const Sequence lastanim);
 
 } // End of namespace Animation
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 9d15308ba2..b80cb95fa4 100644
--- a/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
@@ -581,7 +581,7 @@ void U8AvatarMoverProcess::handleNormalMode() {
 		return;
 
 	// doing another animation?
-	if (Kernel::get_instance()->getNumProcesses(1, ActorAnimProcess::ACTOR_ANIM_PROC_TYPE))
+	if (avatar->isBusy())
 		return;
 
 	// if we were running, slow to a walk before stopping
@@ -591,7 +591,9 @@ void U8AvatarMoverProcess::handleNormalMode() {
 	}
 
 	// not doing anything in particular? stand
-	if (lastanim != Animation::stand && currentIdleTime == 0) {
+	// don't interrupt spells though.
+	if (lastanim != Animation::stand && !Animation::isCastAnimU8(lastanim)
+		&& currentIdleTime == 0) {
 		waitFor(avatar->doAnim(Animation::stand, direction));
 		return;
 	}




More information about the Scummvm-git-logs mailing list