[Scummvm-git-logs] scummvm master -> 4221134e9f35efa09c94cd882f65585b4380dc86

OMGPizzaGuy noreply at scummvm.org
Fri Oct 13 20:48:56 UTC 2023


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:
4221134e9f ULTIMA8: Always mark position supported at or below zero Z coordinate.


Commit: 4221134e9f35efa09c94cd882f65585b4380dc86
    https://github.com/scummvm/scummvm/commit/4221134e9f35efa09c94cd882f65585b4380dc86
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2023-10-13T15:48:31-05:00

Commit Message:
ULTIMA8: Always mark position supported at or below zero Z coordinate.
This eliminates the need to check starting off land in movement process and fixes some freezing that could occur when moving outside map bounds

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


diff --git a/engines/ultima/ultima8/world/actors/animation_tracker.cpp b/engines/ultima/ultima8/world/actors/animation_tracker.cpp
index 818b3375bc9..63d8a45316f 100644
--- a/engines/ultima/ultima8/world/actors/animation_tracker.cpp
+++ b/engines/ultima/ultima8/world/actors/animation_tracker.cpp
@@ -311,7 +311,7 @@ bool AnimationTracker::step() {
 	Box start(_startX, _startY, _startZ, xd, yd, zd);
 	PositionInfo info = cm->getPositionInfo(target, start, a->getShapeInfo()->_flags, _actor);
 
-	if (is_u8 && info.valid && info.supported) {
+	if (is_u8 && info.valid && info.supported && info.land) {
 		// Might need to check for bridge traversal adjustments
 		uint32 supportshape = info.land->getShape();
 		if (supportshape >= 675 && supportshape <= 681) {
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 3e96a13eb8c..5beb7e097e4 100644
--- a/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
+++ b/engines/ultima/ultima8/world/actors/u8_avatar_mover_process.cpp
@@ -640,14 +640,6 @@ void U8AvatarMoverProcess::step(Animation::Sequence action, Direction direction,
 	Animation::Result res = avatar->tryAnim(action, direction);
 	Direction stepdir = direction;
 
-	// Ignore end off land if starting off land
-	if (res == Animation::END_OFF_LAND) {
-		int32 ax, ay, az;
-		avatar->getLocation(ax, ay, az);
-		if (!avatar->canExistAt(ax, ay, az, true))
-			res = Animation::SUCCESS;
-	}
-
 	if (res == Animation::FAILURE ||
 	        (action == Animation::step && res == Animation::END_OFF_LAND)) {
 		debug(6, "Step: end off land dir %d, try other dir", stepdir);
diff --git a/engines/ultima/ultima8/world/current_map.cpp b/engines/ultima/ultima8/world/current_map.cpp
index 6491c499320..29341dc7f2e 100644
--- a/engines/ultima/ultima8/world/current_map.cpp
+++ b/engines/ultima/ultima8/world/current_map.cpp
@@ -817,7 +817,13 @@ PositionInfo CurrentMap::getPositionInfo(const Box &target, const Box &start, ui
 
 	info.valid = info.blocker == nullptr;
 	// Partial support allowed if land is close
-	info.supported = supportz == target._z && landz + 8 >= target._z;
+	if (supportz == target._z && landz + 8 >= target._z)
+		info.supported = true;
+
+	// Mark supported at minimum z
+	if (target._z <= 0)
+		info.supported = true;
+
 	return info;
 }
 




More information about the Scummvm-git-logs mailing list