proc pathfinding (unitX, unitY, destX, destY : int) % Variables passed in Grid format! var openList : array 1 .. 20 of string var closedList : array 1 .. 20 of string var tempX, tempY, count, closedCount : int := 1 var bestSquare : int := 0 var F, G, H : real tempX := unitX tempY := unitY % Search for valid tiles, and calculate the F values from G and H for x : 1 .. 3 for y : 1 .. 3 if isPassable (tempX + (-2 + x), tempY + (-2 + y)) then for a : 1 .. upper (openList) if index (openList (a), intstr (tempX + (-2 + x)) + intstr (tempY + (-2 + y))) = 0 then % Is this tile already in the open list? if (x = 1 and y = 1) or (x = 3 and y = 3) or (x = 1 and y = 3) or (x = 3 and y = 1) then % Diagonal or Orthogonal? G := 1.4 else G := 1 end if % Calculate H H := abs ((destX - tempX)) + abs ((destY - tempY)) F := G + H openList (count) := realstr (F, 2) + " " + intstr (tempX + (-2 + x)) + intstr (tempY + (-2 + y)) count += 1 F := 0 G := 0 H := 0 end if end for end if end for end for % Find the 'cheapest' tile to move to for i : 1 .. 20 F := strreal (openList (i) (1 .. findCharInString (openList (i), " ") - 1)) if F < bestSquare then bestSquare := i end if end for % Add to closed list closedList(closedCount) := openList(i) closedCount += 1 end pathfinding