anchor.diff:      procedure Load(LoadStream: TKMemoryStream);
   
       property HousesMapping: THouseMappingArray read fHousesMapping write fHousesMapping;
  -    property ArmyPresence: TKMArmyPresence read fArmyPresence write fArmyPresence;
  +    property ArmyEvaluation: TKMArmyEvaluation read fArmyEvaluation;
  +    property Pathfinding: TNavMeshPathFinding read fPathfinding write fPathfinding;
  +    property Positioning: TNavMeshFloodPositioning read fPositioning write fPositioning;
   
       procedure AfterMissionInit();
       procedure UpdateState(aTick: Cardinal);
  
positive.code:   if not CanPlaceHouse(aLoc, aHT, aIgnoreTrees) then
      Exit;
  
    // Scan tiles inside house plan
    for I := Low(fHousesMapping[aHT].Tiles) to High(fHousesMapping[aHT].Tiles) do
    begin
  
negative.code: // Cluster algorithm (inspired by DBSCAN but clusters may overlap)
  function TKMEye.GetForests(): TKMPointTagList;
  const
    OWNERSHIP_LIMIT = 50;
    RADIUS = 5;
    MAX_DIST = RADIUS+1; // When is max radius = 5 and max distance = 6 and use KMDistanceAbs it will give area similar to circle (without need to calculate euclidean distance!)
    VISIT_MARK = RADIUS+1;
    MIN_POINTS_CNT = 3;
    UNVISITED_TREE = 1;
    VISITED_TREE = 2;
  var
    X,X2,Y,Y2, Distance: Integer;
    Cnt: Single;
    Point, sumPoint, newPoint: TKMPoint;
    VisitArr: TKMByte2Array;
    Forests: TKMPointTagList;
  begin
    setLength(VisitArr, gTerrain.MapY, gTerrain.MapX);
    for Y := 1 to gTerrain.MapY - 1 do
    for X := 1 to gTerrain.MapX - 1 do
      if (gAIFields.Influences.Ownership[fOwner, Y, X] > OWNERSHIP_LIMIT) AND gTerrain.ObjectIsChopableTree(X, Y) then
        VisitArr[Y,X] := UNVISITED_TREE
      else
        VisitArr[Y,X] := 0;
  