anchor.diff:    StartPolygons: TKMWordArray;
   begin
     Result := False;
  +  // Get center city points
     CityCenterPoints := gAIFields.Eye.GetCityCenterPoints(True);
     if (Length(CityCenterPoints) < 1) then
       Exit;
  +  // Transform it to polygons
     SetLength(StartPolygons, Length(CityCenterPoints));
     for I := Low(StartPolygons) to High(StartPolygons) do
  -    StartPolygons[I] := gAIFields.NavMesh.Point2Polygon[ CityCenterPoints[I].Y,CityCenterPoints[I].X ];
  -
  +    StartPolygons[I] := gAIFields.NavMesh.KMPoint2Polygon[ CityCenterPoints[I] ];
  +  // Flood fill
     Result := FillPolygons(Length(StartPolygons), StartPolygons);
   end;
   
   
  +// Find best defensive lines (for watchtowers)
   function TForwardFF.FindDefenceLines(aOwner: TKMHandIndex; var aDefLines: TKMDefenceLines): Boolean;
   begin
     Result := False;
     fOwner := aOwner;
   
  -  gAIFields.Eye.OwnerUpdate(aOwner); // DEBUG
  +  gAIFields.Eye.OwnerUpdate(aOwner); // Make sure that Eye is set to the right Owner (Old AI does not shift it)
   
     Result := ForwardFF();
     if Result then
  
positive.code:     procedure NewQueue(aVisitedIdx: Byte);
      procedure AddPolygon(aIdx: Word);
      function FindDefenceLines(aOwner: TKMHandIndex): TKMDefenceLines;
      function FindDefensivePolygons(aOwner: TKMHandIndex; var aBaseCnt: Word; aMinDefeces: Boolean): TKMDefencePosArr;
  
      procedure DEBUG();
    end;
  
    TForwardFF = class(TNavMeshFloodFill)
  
negative.code:     end;
    SetLength(D_INIT_FLOOD, cnt);
  end;
  //}
  
  
  end.
  