From 0f458d2c0cedecccec8e6e5ac004cf205e61d9b3 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Tue, 19 Aug 2008 21:44:56 -0400 Subject: [PATCH] Fix pathrange() for paths spanning whole world (with border) pathrange() screwed up when the result should have been as wide or as high as the whole world. This made the path command show a broken map. --- src/lib/subs/paths.c | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/lib/subs/paths.c b/src/lib/subs/paths.c index 79b680305..92ab8d171 100644 --- a/src/lib/subs/paths.c +++ b/src/lib/subs/paths.c @@ -34,6 +34,7 @@ #include #include "file.h" +#include "optlist.h" #include "path.h" #include "player.h" #include "prototypes.h" @@ -237,30 +238,34 @@ pathtoxy(char *path, coord *xp, coord *yp, void pathrange(coord cx, coord cy, char *pp, int border, struct range *range) { - int dir; + int dir, lx, ly, hx, hy; - range->lx = cx; - range->hx = cx; - range->ly = cy; - range->hy = cy; + lx = hx = cx; + ly = hy = cy; for (; *pp; pp++) { dir = diridx(*pp); if (dir == DIR_STOP) break; cx += diroff[dir][0]; cy += diroff[dir][1]; - if (cx < range->lx) - range->lx = cx; - if (cx > range->hx) - range->hx = cx; - if (cy < range->ly) - range->ly = cy; - if (cy > range->hy) - range->hy = cy; + if (cx < lx) + lx = cx; + if (cx > hx) + hx = cx; + if (cy < ly) + ly = cy; + if (cy > hy) + hy = cy; } - range->lx = xnorm(range->lx - border * 2); - range->ly = ynorm(range->ly - border); - range->hx = xnorm(range->hx + border * 2); - range->hy = ynorm(range->hy + border); + + lx -= border * 2; + hx += border * 2; + ly -= border; + hy += border; + + range->lx = xnorm(lx); + range->hx = ynorm(hx - lx < WORLD_X ? hx : lx - 1); + range->ly = ynorm(ly); + range->hy = ynorm(hy - ly < WORLD_Y ? hy : ly - 1); xysize_range(range); } -- 2.43.0