anchor.diff:    for k:=max(aPosition.X-aRadius,Ins) to min(aPosition.X+aRadius,MapX-Ins) do
       if (KMLength(aPosition,KMPoint(k,i))<=aRadius) then
         if ObjectIsChopableTree(KMPoint(k,i),4)and(Land[i,k].TreeAge>=TreeAgeFull) then //Grownup tree
  -        if Route_CanBeMadeToVertex(aPosition,KMPoint(k,i),canWalk,0) then
  +        if Route_CanBeMadeToVertex(aPosition,KMPoint(k,i),canWalk) then
             List.AddEntry(KMPoint(k,i));
   
     TreeLoc := List.GetRandom; //Choose our tree
  
positive.code:     function GetOutOfTheWay(Loc, Loc2:TKMPoint; aPass:TPassability):TKMPoint;
      function FindSideStepPosition(Loc,Loc2,Loc3:TKMPoint; OnlyTakeBest: boolean=false):TKMPoint;
      function Route_CanBeMade(LocA, LocB:TKMPoint; aPass:TPassability; aWalkToSpot:byte):boolean;
      function Route_CanBeMadeToVertex(LocA, LocB:TKMPoint; aPass:TPassability; aWalkToSpot:byte):boolean;
      function Route_MakeAvoid(LocA, LocB, Avoid:TKMPoint; aPass:TPassability; WalkToSpot:byte; out NodeList:TKMPointList):boolean;
      procedure Route_Make(LocA, LocB, Avoid:TKMPoint; aPass:TPassability; WalkToSpot:byte; out NodeList:TKMPointList);
      procedure Route_ReturnToRoad(LocA, LocB:TKMPoint; TargetRoadNetworkID:byte; out NodeList:TKMPointList);
  
negative.code:   if aPass <> canWalkAvoid then //As canWalkAvoid is never set as a passability there is no need to check it
    begin
      Result := Result and CheckPassability(LocA,aPass);
      TestRadius := false;
      for i:=max(LocB.Y-aWalkToSpot,1) to min(LocB.Y+aWalkToSpot,MapY-1) do
      for k:=max(LocB.X-aWalkToSpot,1) to min(LocB.X+aWalkToSpot,MapX-1) do
      if GetLength(LocB,KMPoint(k,i))<=aWalkToSpot then
        TestRadius := TestRadius or CheckPassability(KMPoint(k,i),aPass);
      Result := Result and TestRadius;
    end;
  
    //There's a walkable way between A and B (which is proved by FloodFill test on map init)
    if aPass=canWalk then
    begin
      TestRadius := false;
      for i:=max(LocB.Y-aWalkToSpot,1) to min(LocB.Y+aWalkToSpot,MapY-1) do
      for k:=max(LocB.X-aWalkToSpot,1) to min(LocB.X+aWalkToSpot,MapX-1) do
      if GetLength(LocB,KMPoint(k,i))<=aWalkToSpot then
        TestRadius := TestRadius or (Land[LocA.Y,LocA.X].WalkConnect[1] = Land[i,k].WalkConnect[1]);
      Result := Result and TestRadius;
    end;
  
    if aPass=canWalkRoad then
    begin
      TestRadius := false;
      for i:=max(LocB.Y-aWalkToSpot,1) to min(LocB.Y+aWalkToSpot,MapY-1) do
      for k:=max(LocB.X-aWalkToSpot,1) to min(LocB.X+aWalkToSpot,MapX-1) do
      if GetLength(LocB,KMPoint(k,i))<=aWalkToSpot then
        TestRadius := TestRadius or (Land[LocA.Y,LocA.X].WalkConnect[2] = Land[i,k].WalkConnect[2]);
      Result := Result and TestRadius;
    end;
  
    if aPass=canFish then
      Result := Result and (Land[LocA.Y,LocA.X].WalkConnect[3] = Land[LocB.Y,LocB.X].WalkConnect[3]);
  
    if aPass=canWalkAvoid then
    begin
      TestRadius := false;
      for i:=max(LocB.Y-aWalkToSpot,1) to min(LocB.Y+aWalkToSpot,MapY-1) do
      for k:=max(LocB.X-aWalkToSpot,1) to min(LocB.X+aWalkToSpot,MapX-1) do
      if GetLength(LocB,KMPoint(k,i))<=aWalkToSpot then
        TestRadius := TestRadius or (Land[LocA.Y,LocA.X].WalkConnect[4] = Land[i,k].WalkConnect[4]);
      Result := Result and TestRadius;
    end;
  end;
  
  
  function TTerrain.Route_CanBeMadeToVertex(LocA, LocB:TKMPoint; aPass:TPassability):boolean;
  var i,k:integer;
  begin
    //Check if a route can be made to this vertex, from any direction (used for woodcutter cutting trees)
  