anchor.diff:      function FindOre(aLoc: TKMPoint; aRes: TKMWareType; out OrePoint: TKMPoint): Boolean;
       procedure FindOrePoints(aLoc: TKMPoint; aRes: TKMWareType; var aPoints: TKMPointListArray);
       procedure FindOrePointsByDistance(aLoc: TKMPoint; aRes: TKMWareType; var aPoints: TKMPointListArray);
  -    function CanFindTree(aLoc: TKMPoint; aRadius: Word):Boolean;
  +    function CanFindTree(aLoc: TKMPoint; aRadius: Word; aOnlyAgeFull: Boolean = False):Boolean; 
       procedure FindTree(aLoc: TKMPoint; aRadius: Word; aAvoidLoc: TKMPoint; aPlantAct: TKMPlantAct; Trees: TKMPointDirList; BestToPlant,SecondBestToPlant: TKMPointList);
       function FindFishWater(aLoc: TKMPoint; aRadius:integer; aAvoidLoc: TKMPoint; aIgnoreWorkingUnits:Boolean; out FishPoint: TKMPointDir): Boolean;
       function CanFindFishingWater(aLoc: TKMPoint; aRadius:integer): Boolean;
  
positive.code: end;
  
  
  function TKMTerrain.CanFindTree(aLoc: TKMPoint; aRadius: Word): Boolean;
  var
    ValidTiles: TKMPointList;
    I: Integer;
  
negative.code:     T := ValidTiles[I];
  
      if (KMLengthDiag(aLoc, T) <= aRadius)
      // Only full age
      and ( (aOnlyAgeFull and ObjectIsChopableTree(T, caAgeFull))
      // Any age tree will do
            or (not aOnlyAgeFull and (
              ObjectIsChopableTree(T, caAge1) or ObjectIsChopableTree(T, caAge2) or
              ObjectIsChopableTree(T, caAge3) or ObjectIsChopableTree(T, caAgeFull) )
            )
          )
      and Route_CanBeMadeToVertex(aLoc, T, tpWalk)
      and ChooseCuttingDirection(aLoc, T, CuttingPoint) then
      begin
  