anchor.diff:  end;
   
   
  +// Backward flood fill -> flood fill from enemy influence area to owner city
  +// BackwardFF will find the best possible defences
   procedure TBackwardFF.BackwardFlood();
   var
     PolyArr: TPolygonArray;
  +  // Prepare init polygons for backward flood fill (polygons near enemy)
     procedure CreateBorders();
     var
       I, K, QueueIdx, NearbyIdx: Word;
     begin
       QueueIdx := fStartQueue;
  -    for I := 1 to fQueueCnt do
  +    for I := 1 to fQueueCnt do // Enemy polygons are prepared in Queue
       begin
         for K := 0 to PolyArr[QueueIdx].NearbyCount-1 do
         begin
  
positive.code: end;
  
  
  procedure TForwardFF.MakeNewQueue();
  begin
    fVisitedIdx := fVisitedIdx + 3; // There is 1 FF forward, 1 FF backward and 1 FF for positioning in 1 round
  
    if (Length(fQueueArray) < Length(gAIFields.NavMesh.Polygons)) then
    begin
      SetLength(fQueueArray, Length(gAIFields.NavMesh.Polygons));
  
negative.code: begin
    fQueueCnt := 0;
    fVisitedIdx := aVisitedIdx;
    fBestEvaluation := 1000000000;
  end;
  
  
  procedure TBackwardFF.AddPolygon(aIdx: Word);
  begin
    fQueueArray[aIdx].Visited := fVisitedIdx; // Polygon is marked from ForwardFF
    fDefInfo[aIdx].Distance := fQueueArray[aIdx].Distance; // Save distance for future calculation of defensive lines
    fQueueArray[aIdx].Distance := High(Word) - fQueueArray[aIdx].Distance; // NavMesh Flood fill class can sort only in increased order -> distances must be inverted when we want to start with the farthest
    InsertAndSort(aIdx);
  end;
  
  
  // Evaluation of actual defensive line
  procedure TBackwardFF.EvaluateDefence(const aIdx: Word);
  var
    PolyArr: TPolygonArray;
    // Get second defensive polygon (2 neighboring polygons in NavMesh have common 1 line)
    function GetSecondDefencePolygon(const aDefIdx: Word): Word;
    var
      I, NearbyIdx, VisitedCnt, VisitedIdx, UnVisitedIdx: Word;
  