anchor.diff:                                    + 1000000 // Base price
                                     + fForestsNearby.Tag2[I] * GA_PLANNER_FindPlaceForWoodcutter_TreeCnt
                                     + Byte(PartOfForest) * GA_PLANNER_FindPlaceForWoodcutter_ExistForest
  -                                  - gAIFields.Eye.PolygonRoutes[ gAIFields.NavMesh.KMPoint2Polygon[Point] ] * GA_PLANNER_FindPlaceForWoodcutter_PolyRoute
  -                                  - gAIFields.Influences.EvalArea[Point.Y, Point.X] * GA_PLANNER_FindPlaceForWoodcutter_EvalArea
  +                                  - gAIFields.Eye.Routes[Point.Y, Point.X] * GA_PLANNER_FindPlaceForWoodcutter_PolyRoute
  +                                  - gAIFields.Eye.FlatArea[Point.Y, Point.X] * GA_PLANNER_FindPlaceForWoodcutter_FlatArea
  +                                  + gAIFields.Eye.Soil[Point.Y, Point.X] * GA_PLANNER_FindPlaceForWoodcutter_Soil
                                     - gAIFields.Eye.BuildFF.Distance[Point] * GA_PLANNER_FindPlaceForWoodcutter_DistCrit
                                     - gAIFields.Influences.GetOtherOwnerships(fOwner, Point.X, Point.Y) * GA_PLANNER_FindPlaceForWoodcutter_Influence
                                   ));
  
positive.code:   fConstructedHouses := 0;
    for HT := Low(fPlannedHouses) to High(fPlannedHouses) do
    begin
      SumCalculated := fPlannedHouses[HT].Count;
      for I := 0 to fPlannedHouses[HT].Count - 1 do
        with fPlannedHouses[HT].Plans[I] do
        begin
          Placed := ((House <> nil) AND not House.IsDestroyed) OR gHands[fOwner].BuildList.HousePlanList.ExistPlan(Loc, HT);
          if Placed then // House was placed
          begin
            fConstructedHouses := fConstructedHouses + Byte((House = nil) OR not House.IsComplete);
            if (HT = htWoodcutters) then // Another exception for woodcutters
            begin
              if ChopOnly then // Dont consider choponly woodcutters
                SumCalculated := SumCalculated - 1;
              if (House <> nil) AND (House.IsComplete) then
                CheckWoodcutter(fPlannedHouses[HT].Plans[I], CheckChopOnly);
            end;
          end
          else if (HouseReservation OR RemoveTreeInPlanProcedure) then // House was reserved
          begin
            // Do nothing
          end
          else // House was destroyed
          begin
            if (House <> nil) then
              gHands.CleanUpHousePointer(House);
            SumCalculated := SumCalculated - 1;
          end;
        end;
      fPlannedHouses[HT].Calculated := SumCalculated;
    end;
  end;
  
  
negative.code:             - KMDistanceSqr(CityCenter, aLoc) * GA_PLANNER_FindPlaceForHouse_CityCenter
              - ObstaclesInHousePlan(aHT, aLoc)
              - gAIFields.Influences.GetOtherOwnerships(fOwner, aLoc.X, aLoc.Y) * GA_PLANNER_FindPlaceForHouse_Influence
              + gAIFields.Eye.Routes[aLoc.Y, aLoc.X] * GA_PLANNER_FindPlaceForHouse_Route
              + gAIFields.Eye.FlatArea[aLoc.Y, aLoc.X] * GA_PLANNER_FindPlaceForHouse_FlatArea;
      if (aHT = htFarm) OR (aHT = htWineyard) then
        Gain := Gain + FieldCrit(aHT, aLoc)
      else if (aHT = htStore) OR (aHT = htBarracks) then
  