[Scummvm-git-logs] scummvm master -> 492e9e523b6eb3ee0c65efcbd8becb40d11b1afa

mduggan mgithub at guarana.org
Tue Jul 28 05:26:02 UTC 2020


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:
492e9e523b ULTIMA8: Fix spec of intrinsic I_getClosestDirectionInRange


Commit: 492e9e523b6eb3ee0c65efcbd8becb40d11b1afa
    https://github.com/scummvm/scummvm/commit/492e9e523b6eb3ee0c65efcbd8becb40d11b1afa
Author: Matthew Duggan (mgithub at guarana.org)
Date: 2020-07-28T14:25:23+09:00

Commit Message:
ULTIMA8: Fix spec of intrinsic I_getClosestDirectionInRange

Changed paths:
    engines/ultima/ultima8/misc/direction_util.h
    engines/ultima/ultima8/world/item.cpp


diff --git a/engines/ultima/ultima8/misc/direction_util.h b/engines/ultima/ultima8/misc/direction_util.h
index 102f33fa8d..c29600a70d 100644
--- a/engines/ultima/ultima8/misc/direction_util.h
+++ b/engines/ultima/ultima8/misc/direction_util.h
@@ -83,12 +83,10 @@ inline Direction Direction_GetWorldDir(int deltay, int deltax) {
 		return dydx >= -424 ? dir_west : dydx >= -2472 ? dir_southwest : dir_south;
 }
 
-inline Direction Direction_GetWorldDirInRange(int deltay, int deltax, uint16 ndirs, uint16 mindir, uint16 maxdir) {
-	// TODO: Implement proper 16 directions here.
-	uint32 dir = static_cast<uint32>(Direction_GetWorldDir(deltay, deltax));
-	if (ndirs == 16) {
-		dir *= 2;
-	}
+inline Direction Direction_GetWorldDirInRange(int deltay, int deltax, uint16 ndirs, Direction mindir, Direction maxdir) {
+	// TODO: Implement 16 directions here.
+	ndirs = 8;
+	Direction dir = Direction_GetWorldDir(deltay, deltax);
 
 	if ((dir < mindir) || (dir > maxdir)) {
 		int32 dmin1 = dir - mindir;
@@ -112,13 +110,13 @@ inline Direction Direction_GetWorldDirInRange(int deltay, int deltax, uint16 ndi
 		int32 dist_to_max = MIN(dmax1, dmax2);
 
 		if (dist_to_min < dist_to_max) {
-			return static_cast<Direction>(mindir);
+			return mindir;
 		} else {
-			return static_cast<Direction>(maxdir);
+			return maxdir;
 		}
 	}
 
-	return static_cast<Direction>(dir);
+	return dir;
 }
 
 inline Direction Direction_Invert(Direction dir) {
@@ -162,7 +160,7 @@ inline int Direction_GetShorterTurnDelta(Direction from, Direction to) {
 	return 1;
 }
 
-inline int Direction_ToUsecodeDir(Direction dir) {
+inline uint32 Direction_ToUsecodeDir(Direction dir) {
 	// TODO: Will need changing when we support 16 dirs
 	if (GAME_IS_U8) {
 		return static_cast<int32>(dir);
@@ -171,7 +169,7 @@ inline int Direction_ToUsecodeDir(Direction dir) {
 	}
 }
 
-inline Direction Direction_FromUsecodeDir(int dir) {
+inline Direction Direction_FromUsecodeDir(uint32 dir) {
 	// TODO: Will need changing when we support 16 dirs
 	if (GAME_IS_U8) {
 		return static_cast<Direction>(dir);
diff --git a/engines/ultima/ultima8/world/item.cpp b/engines/ultima/ultima8/world/item.cpp
index 22109dfb79..6329999d0a 100644
--- a/engines/ultima/ultima8/world/item.cpp
+++ b/engines/ultima/ultima8/world/item.cpp
@@ -3344,10 +3344,13 @@ uint32 Item::I_getClosestDirectionInRange(const uint8 *args, unsigned int /*args
 	ARG_UINT16(x2);
 	ARG_UINT16(y2);
 	ARG_UINT16(ndirs);
-	ARG_UINT16(mindir);
-	ARG_UINT16(maxdir);
+	ARG_UINT16(mind);
+	ARG_UINT16(maxd);
 
-	return Direction_ToUsecodeDir(Direction_GetWorldDirInRange(y2 - y1, x2 - x1, ndirs, mindir, maxdir));
+	Direction mindir = Direction_FromUsecodeDir(mind);
+	Direction maxdir = Direction_FromUsecodeDir(maxd);
+	Direction result = Direction_GetWorldDirInRange(y2 - y1, x2 - x1, ndirs, mindir, maxdir);
+	return Direction_ToUsecodeDir(result);
 }
 
 uint32 Item::I_hurl(const uint8 *args, unsigned int /*argsize*/) {




More information about the Scummvm-git-logs mailing list