anchor.diff:                              + GetPotentialTreeTiles(Forests.Items[I]) * GA_PLANNER_FindPlaceForWoodcutter_CanPlaceTreeCnt
                               + GetEdgeTiles(Forests.Items[I]) * GA_PLANNER_FindPlaceForWoodcutter_SnapToEdge
                               - FindPlansAround(Forests.Items[I]) * GA_PLANNER_FindPlaceForWoodcutter_PlansAround
  -                            - gAIFields.Influences.OtherOwnerships(fOwner, Forests.Items[I].X, Forests.Items[I].Y) * ManTune_PLANNER_FindPlaceForWoodcutter_Influence
  +                            - gAIFields.Influences.GetOtherOwnerships(fOwner, Forests.Items[I].X, Forests.Items[I].Y) * ManTune_PLANNER_FindPlaceForWoodcutter_Influence
                             ))
         else
           Forests.Delete(I);
  
positive.code: constructor TKMCityPlanner.Create(aPlayer: TKMHandIndex);
  begin
    fOwner := aPlayer;
    fRoadPlanner := TPathFindingCityPlanner.Create(fOwner);
    fRoadShortcutPlanner := TPathFindingShortcutsCityPlanner.Create(fOwner);
  end;
  
negative.code:     UID: Integer;
      Loc, SpecPoint: TKMPoint;
    end;
    THousePlanArray = record
      Count: Word;
      Plans: array of THousePlan;
    end;
    TPlannedHousesArray = array [HOUSE_MIN..HOUSE_MAX] of THousePlanArray;
  
  
    TPathFindingCityPlanner = class(TPathFindingRoad)
    private
    protected
      function IsWalkableTile(aX, aY: Word): Boolean; override;
      function MovementCost(aFromX, aFromY, aToX, aToY: Word): Word; override;
    public
    end;
  