anchor.diff:  procedure TKMayor.TryBuildDefenceTower;
   const
     SEARCH_RAD = 6;
  -  MAX_ROAD_DISTANCE = 25;
  +  MAX_ROAD_DISTANCE = 50;
   var
     P: TKMHand;
     IY, IX: Integer;
  
positive.code: 
  procedure TKMayor.PlanDefenceTowers;
  const
    DISTANCE_BETWEEN_TOWERS = 10;
  var
    P: TKMHand;
    Outline1, Outline2: TKMWeightSegments;
    I, K, DefCount: Integer;
    Loc: TKMPoint;
    SegLength, Ratio: Single;
  begin
    if fDefenceTowersPlanned then Exit;
    fDefenceTowersPlanned := True;
    P := gHands[fOwner];
    if not P.Locks.HouseCanBuild(ht_WatchTower) then Exit;
  
    //Get defence Outline with weights representing how important each segment is
    //gAIFields.NavMesh.GetDefenceOutline(fOwner, Outline1, Outline2);
    //Make list of defence positions
    for I := 0 to High(Outline2) do
    begin
      //Longer segments will get several towers
      SegLength := KMLength(Outline2[I].A, Outline2[I].B);
      DefCount := Max(Trunc(SegLength / DISTANCE_BETWEEN_TOWERS), 1);
      for K := 0 to DefCount - 1 do
      begin
        Ratio := (K + 1) / (DefCount + 1);
        Loc := KMPointRound(KMLerp(Outline2[I].A, Outline2[I].B, Ratio));
        fDefenceTowers.Add(Loc, Trunc(1000*Outline2[I].Weight));
      end;
    end;
    fDefenceTowers.SortByTag;
    fDefenceTowers.Inverse; //So highest weight is first
  end;
  
negative.code:   KM_AIMayorBalance, KM_AICityPlanner, KM_AISetup,
    KM_PathfindingRoad,
    KM_ResHouses, KM_HouseCollection,
    KM_CommonClasses, KM_Defaults, KM_Points,
    KM_NavMeshDefences;
  
  
  type
  