[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