# HG changeset patch # User Michael Pavone # Date 1389593112 28800 # Node ID 08f2bcf3447f118ac1bdd09e6b420e6e1969997a # Parent 60bb690233cf333423a43f18b8abd502760a68bf Skip diagonals when calculating distance diff -r 60bb690233cf -r 08f2bcf3447f src/creep.c --- a/src/creep.c Sun Jan 12 19:11:54 2014 -0800 +++ b/src/creep.c Sun Jan 12 22:05:12 2014 -0800 @@ -41,34 +41,34 @@ s16 explore(mpoint * points, s16 num_points, u16 src, u16 srcx, u16 srcy) { - u16 x,y,index,cindex,xmax,ymax,ystrt,dist; - dist = distances[src]+1; - xmax = srcx < 19 ? srcx+1 : srcx; - ymax = srcy < 13 ? srcy+1 : srcy; - if (srcy) + u16 dist = distances[src]+1; + if (srcx < 19 && distances[src + 1] > dist && !tilemap[(srcx+1)*2+srcy*2*40]) { - ystrt = srcy-1; - cindex = srcx ? src - 21 : src - 20; - } else { - ystrt = srcy; - cindex = srcx ? src - 1 : src; + distances[src + 1] = dist; + points[num_points].index = src + 1; + points[num_points].x = srcx+1; + points[num_points++].y = srcy; } - for (x = srcx ? srcx-1 : srcx; x <= xmax; x++, cindex++) + if (srcx && distances[src - 1] > dist && !tilemap[(srcx-1)*2 + srcy*2*40]) { - for (y = ystrt, index=cindex; y<=ymax; y++,index+=20) - { - if (distances[index] > dist && !tilemap[x*2+y*2*40]) - { - distances[index] = dist; - if (dist == 0xFFFF) - { - tilemap[x*2 + y*2*40] = TILE_ATTR_FULL(2, 0, 0, 0, 'E' - 32 + TILE_FONTINDEX); - } - points[num_points].index = index; - points[num_points].x = x; - points[num_points++].y = y; - } - } + distances[src - 1] = dist; + points[num_points].index = src - 1; + points[num_points].x = srcx-1; + points[num_points++].y = srcy; + } + if (srcy < 13 && distances[src + 20] > dist && !tilemap[srcx*2+(srcy+1)*2*40]) + { + distances[src + 20] = dist; + points[num_points].index = src + 20; + points[num_points].x = srcx; + points[num_points++].y = srcy+1; + } + if (srcy && distances[src - 20] > dist && !tilemap[srcx*2 + (srcy-1)*2*40]) + { + distances[src - 20] = dist; + points[num_points].index = src - 20; + points[num_points].x = srcx; + points[num_points++].y = srcy-1; } return num_points; }