]> git.pond.sub.org Git - empserver/blobdiff - src/lib/common/bestpath.c
Indented with src/scripts/indent-emp.
[empserver] / src / lib / common / bestpath.c
index 9d4b039a98c2821df7e64056986916e2ae7a29e0..74d8332b909c763204f6d8a766179b5524a810d0 100644 (file)
@@ -53,9 +53,9 @@
 #include "common.h"
 #include "optlist.h"
 
-static int owned_and_navigable(s_char *  , int  , int  , s_char *  , int );
+static int owned_and_navigable(s_char *, int, int, s_char *, int);
 
-#define MAXROUTE       100        /* return '?' if path longer than this */
+#define MAXROUTE       100     /* return '?' if path longer than this */
 #define valid(x,y)     (((x^y)&1)==0)
 
 /* ________________________________________________________________
@@ -106,9 +106,9 @@ static int owned_and_navigable(s_char *  , int  , int  , s_char *  , int );
 ** ________________________________________________________________
 */
 
-s_char *dirchar        = "juygbn";
-int dx[6]      = { 2, 1,-1,-2,-1, 1 };
-int dy[6]      = { 0,-1,-1, 0, 1, 1 };
+s_char *dirchar = "juygbn";
+int dx[6] = { 2, 1, -1, -2, -1, 1 };
+int dy[6] = { 0, -1, -1, 0, 1, 1 };
 int tmp;
 
 /*
@@ -125,198 +125,196 @@ int tmp;
 static unsigned int *mapbuf = (unsigned int *)0;
 static unsigned int **mapindex = (unsigned int **)0;
 
-s_char *bestownedpath(s_char *bpath,
-                     s_char *bigmap,
-                     int x,
-                     int y,
-                     int ex,
-                     int ey,
-                     s_char *terrain,
-                     int own)
+s_char *
+bestownedpath(s_char *bpath,
+             s_char *bigmap,
+             int x, int y, int ex, int ey, s_char *terrain, int own)
 {
-  int i, j, tx, ty, markedsectors, restr2;
-  int minx, maxx, miny, maxy, scanx, scany;
-  unsigned int routelen;
+    int i, j, tx, ty, markedsectors, restr2;
+    int minx, maxx, miny, maxy, scanx, scany;
+    unsigned int routelen;
 
-  if (!mapbuf)
-      mapbuf = (unsigned int *)malloc((WORLD_X * WORLD_Y) *
-                                     sizeof(unsigned int));
-  if (!mapbuf)
-      return ((s_char *)0);
-  if (!mapindex) {
-      mapindex = (unsigned int **)malloc(WORLD_X * sizeof(unsigned int *));
-      if (mapindex) {
-         /* Setup the map pointers */
-         for (i = 0; i < WORLD_X; i++)
-             mapindex[i] = &mapbuf[WORLD_Y * i];
-      }
-  }
-  if (!mapindex)
-      return ((s_char *)0);
+    if (!mapbuf)
+       mapbuf = (unsigned int *)malloc((WORLD_X * WORLD_Y) *
+                                       sizeof(unsigned int));
+    if (!mapbuf)
+       return ((s_char *)0);
+    if (!mapindex) {
+       mapindex =
+           (unsigned int **)malloc(WORLD_X * sizeof(unsigned int *));
+       if (mapindex) {
+           /* Setup the map pointers */
+           for (i = 0; i < WORLD_X; i++)
+               mapindex[i] = &mapbuf[WORLD_Y * i];
+       }
+    }
+    if (!mapindex)
+       return ((s_char *)0);
 
-  bpath[0] = 0;
-  if (0 != (restr2 = (*terrain == 'R')))
-    terrain++;
+    bpath[0] = 0;
+    if (0 != (restr2 = (*terrain == 'R')))
+       terrain++;
 
-   = XNORM(x);
-   = YNORM(y);
-  ex = XNORM(ex);
-  ey = YNORM(ey);
+    x = XNORM(x);
+    y = YNORM(y);
+    ex = XNORM(ex);
+    ey = YNORM(ey);
 
-  if (x == ex && y == ey) {
-    bpath[0] = 'h';
-    bpath[1] = 0;
-    return ((s_char *)bpath);
-  }
+    if (x == ex && y == ey) {
+       bpath[0] = 'h';
+       bpath[1] = 0;
+       return ((s_char *)bpath);
+    }
 
-  if (!valid(x,y) || !valid(ex,ey))
-    return((s_char *)0);
+    if (!valid(x, y) || !valid(ex, ey))
+       return ((s_char *)0);
 
-  if (restr2 && (!owned_and_navigable(bigmap, x, y, terrain, own) ||
-                !owned_and_navigable(bigmap, x, y, terrain, own)))
-    return ((s_char *)0);
+    if (restr2 && (!owned_and_navigable(bigmap, x, y, terrain, own) ||
+                  !owned_and_navigable(bigmap, x, y, terrain, own)))
+       return ((s_char *)0);
 
-  for (i = 0; i < WORLD_X; i++)
-    for (j = 0; j < WORLD_Y; j++)
-      mapindex[i][j] = 0xFFFF; /* clear the workspace  */
+    for (i = 0; i < WORLD_X; i++)
+       for (j = 0; j < WORLD_Y; j++)
+           mapindex[i][j] = 0xFFFF;    /* clear the workspace  */
 
-  routelen = 0;                        /* path length is now 0 */
-  mapindex[x][y] = 0;          /* mark starting spot   */
-  markedsectors = 1;           /* source sector marked */
-  minx = x - 2;                 /* set X scan bounds   */
-  maxx = x + 2;
-  miny = y - 1;                 /* set Y scan bounds   */
-  maxy = y + 1;
+    routelen = 0;              /* path length is now 0 */
+    mapindex[x][y] = 0;                /* mark starting spot   */
+    markedsectors = 1;         /* source sector marked */
+    minx = x - 2;              /* set X scan bounds    */
+    maxx = x + 2;
+    miny = y - 1;              /* set Y scan bounds    */
+    maxy = y + 1;
 
-  do {
-    if (++routelen == MAXROUTE) {
-      bpath[0] = '?';
-      bpath[1] = 0;
-      return ((s_char *)bpath);
-    }
-    markedsectors = 0;
-    for (scanx = minx; scanx <= maxx; scanx++) {
-      x = XNORM(scanx);
-      for (scany = miny; scany <= maxy; scany++) {
-       y = YNORM(scany);
-       if (valid(x,y)) {
-         if ((((mapindex[x][y]) & 0x1FFF) == (routelen - 1))) {
-           for (i = 0; i < 6; i++) {
-             tx = x + dx[i];
-             ty = y + dy[i];
-             tx = XNORM(tx);
-             ty = YNORM(ty);
-             if (mapindex[tx][ty] == 0xFFFF) {
-               if (owned_and_navigable(bigmap, tx, ty, terrain, own) || 
-                   (tx == ex && ty == ey && !restr2) ) {
-                 mapindex[tx][ty] = ((i + 1) << 13) + routelen;
-                 markedsectors++;
-               }
-             }
-             if (tx == ex && ty == ey) {
-               bpath[routelen] = 0;
-               while (routelen--) {
-                 i = ((mapindex[tx][ty]) >> 13) - 1;
-                 bpath[routelen] = dirchar[i];
-                 tx = tx - dx[i];
-                 ty = ty - dy[i];
-                 tx = XNORM(tx);
-                 ty = YNORM(ty);
+    do {
+       if (++routelen == MAXROUTE) {
+           bpath[0] = '?';
+           bpath[1] = 0;
+           return ((s_char *)bpath);
+       }
+       markedsectors = 0;
+       for (scanx = minx; scanx <= maxx; scanx++) {
+           x = XNORM(scanx);
+           for (scany = miny; scany <= maxy; scany++) {
+               y = YNORM(scany);
+               if (valid(x, y)) {
+                   if ((((mapindex[x][y]) & 0x1FFF) == (routelen - 1))) {
+                       for (i = 0; i < 6; i++) {
+                           tx = x + dx[i];
+                           ty = y + dy[i];
+                           tx = XNORM(tx);
+                           ty = YNORM(ty);
+                           if (mapindex[tx][ty] == 0xFFFF) {
+                               if (owned_and_navigable
+                                   (bigmap, tx, ty, terrain, own)
+                                   || (tx == ex && ty == ey && !restr2)) {
+                                   mapindex[tx][ty] =
+                                       ((i + 1) << 13) + routelen;
+                                   markedsectors++;
+                               }
+                           }
+                           if (tx == ex && ty == ey) {
+                               bpath[routelen] = 0;
+                               while (routelen--) {
+                                   i = ((mapindex[tx][ty]) >> 13) - 1;
+                                   bpath[routelen] = dirchar[i];
+                                   tx = tx - dx[i];
+                                   ty = ty - dy[i];
+                                   tx = XNORM(tx);
+                                   ty = YNORM(ty);
+                               }
+                               return ((s_char *)bpath);
+                           }
+                       }
+                   }
                }
-               return((s_char *)bpath);
-             }
            }
-         }
        }
-      }
-    }
-    miny--;
-    maxy++;
-    minx -= 2;
-    maxx += 2;
-  } while (markedsectors);
+       miny--;
+       maxy++;
+       minx -= 2;
+       maxx += 2;
+    } while (markedsectors);
 
-  bpath[0] = 0;
-  return((s_char *)0);                 /* no route possible    */
+    bpath[0] = 0;
+    return ((s_char *)0);      /* no route possible    */
 }
 
 /* return TRUE if sector is passable */
 static int
 owned_and_navigable(s_char *map, int x, int y, s_char *terrain, int own)
 {
-       s_char c;
-       s_char *t;
-       s_char mapspot; /* What this spot on the bmap is */
-       int negate;
-       struct sctstr *sect;
-       int rel;
+    s_char c;
+    s_char *t;
+    s_char mapspot;            /* What this spot on the bmap is */
+    int negate;
+    struct sctstr *sect;
+    int rel;
 
-       /* No terrain to check?  Everything is navigable! (this
-          probably means we are flying) */
-       if (!(*terrain))
-         return (1);
+    /* No terrain to check?  Everything is navigable! (this
+       probably means we are flying) */
+    if (!(*terrain))
+       return (1);
 
-       /* Are we checking this map? */
-       if (map) {
-         /* Do we know what this sector is?  If not, we assume it's ok,
-            since otherwise we'll never venture anywhere */
-         mapspot = map[sctoff(x, y)];
-         if (mapspot == ' ' || mapspot == 0)
+    /* Are we checking this map? */
+    if (map) {
+       /* Do we know what this sector is?  If not, we assume it's ok,
+          since otherwise we'll never venture anywhere */
+       mapspot = map[sctoff(x, y)];
+       if (mapspot == ' ' || mapspot == 0)
            return (1);
-         
-         /* Now, is it marked with a 'x' or 'X'? If so, avoid it! */
-         if (mapspot == 'x' || mapspot == 'X')
+
+       /* Now, is it marked with a 'x' or 'X'? If so, avoid it! */
+       if (mapspot == 'x' || mapspot == 'X')
            return (0);
-       } else {
-         /* We don't know what it is since we have no map, so return ok! */
-         return (1);
-       }
-         
-       /* Now, check this bmap entry to see if it is one of the
-          terrain types. */
-       t = terrain;
-       if (*t == '~') {
-         negate = 1;
-         t++;
-       } else
-         negate = 0;
+    } else {
+       /* We don't know what it is since we have no map, so return ok! */
+       return (1);
+    }
+
+    /* Now, check this bmap entry to see if it is one of the
+       terrain types. */
+    t = terrain;
+    if (*t == '~') {
+       negate = 1;
+       t++;
+    } else
+       negate = 0;
 
-       while (*t) {
-         if (*t == mapspot)
+    while (*t) {
+       if (*t == mapspot)
            break;
-         t++;
-       }
-       if (negate && *t) {
-         /* We found it, so we say it's bad since we are negating */
-         return (0);
-       } else if (!negate && !*t) {
-         /* We didn't find it, so we say it's bad since we aren't negating */
-         return (0);
-       }
+       t++;
+    }
+    if (negate && *t) {
+       /* We found it, so we say it's bad since we are negating */
+       return (0);
+    } else if (!negate && !*t) {
+       /* We didn't find it, so we say it's bad since we aren't negating */
+       return (0);
+    }
 
-       /* According to our bmap, this sector is ok so far. */
+    /* According to our bmap, this sector is ok so far. */
 
-       /* Ok, we made it this far.  Now get the sector */
-       sect = getsectp(x, y);
-       c = dchr[sect->sct_type].d_mnem;
-       /* Ok, now, check the owner if needed */
-       if (own >= 0) {
-         if (sect->sct_own != own) {
+    /* Ok, we made it this far.  Now get the sector */
+    sect = getsectp(x, y);
+    c = dchr[sect->sct_type].d_mnem;
+    /* Ok, now, check the owner if needed */
+    if (own >= 0) {
+       if (sect->sct_own != own) {
            rel = getrel(getnatp(sect->sct_own), own);
            /* We can't sail through deity sectors, but we can sail
               through any ocean */
            if (rel < FRIENDLY && sect->sct_type != SCT_WATER)
-             return (0);
-         }
+               return (0);
        }
-       /* Ok, now, check these two sector types */
-       /* check for bad harbors. */ 
-       if (c == 'h' && sect->sct_effic < 2)
-         return (0);  
-       /* check for bad bridges  */ 
-       if (c == '=' && sect->sct_effic < 60)
-         return (0);
-       /* Woo-hoo, it's ok! */
-       return (1);
+    }
+    /* Ok, now, check these two sector types */
+    /* check for bad harbors. */
+    if (c == 'h' && sect->sct_effic < 2)
+       return (0);
+    /* check for bad bridges  */
+    if (c == '=' && sect->sct_effic < 60)
+       return (0);
+    /* Woo-hoo, it's ok! */
+    return (1);
 }
-