anchor.diff:      procedure Load(LoadStream: TKMemoryStream);
   
       property HousesMapping: THouseMappingArray read fHousesMapping write fHousesMapping;
  -    property ArmyPresence: TKMArmyPresence read fArmyPresence write fArmyPresence;
  +    property ArmyEvaluation: TKMArmyEvaluation read fArmyEvaluation;
  +    property Pathfinding: TNavMeshPathFinding read fPathfinding write fPathfinding;
  +    property Positioning: TNavMeshFloodPositioning read fPositioning write fPositioning;
   
       procedure AfterMissionInit();
       procedure UpdateState(aTick: Cardinal);
  
positive.code:   fGoldMines.Free;
    fIronMines.Free;
    fStoneMiningTiles.Free;
    fCoalClusters.Free;
  
    fArmyPresence.Free;
  
    POM.Free;
    inherited;
  end;
  
  
  procedure TKMEye.Save(SaveStream: TKMemoryStream);
  begin
    fGoldMines.SaveToStream(SaveStream);
    fIronMines.SaveToStream(SaveStream);
    fStoneMiningTiles.SaveToStream(SaveStream);
    fArmyPresence.Save(SaveStream);
  // SAVE LIST
  end;
  
  procedure TKMEye.Load(LoadStream: TKMemoryStream);
  begin
    fGoldMines.LoadFromStream(LoadStream);
    fIronMines.LoadFromStream(LoadStream);
    fStoneMiningTiles.LoadFromStream(LoadStream);
    fArmyPresence.Load(LoadStream);
    // LOAD LIST
    InitHousesMapping();
  end;
  
  
  
negative.code: function TKMEye.GetCoalLocs(): TKMPointTagList;
  var
    I,K,Own: Integer;
    Loc: TKMPoint;
    Output: TKMPointTagList;
  begin
    Output := TKMPointTagList.Create();
    for I := 0 to fCoalMiningTiles.Count - 1 do
    begin
      Loc := fCoalMiningTiles.Items[I];
      Own := gAIFields.Influences.Ownership[fOwner, Loc.Y, Loc.X];
      if (Own = 0) then
        continue;
      if (tpBuild in gTerrain.Land[Loc.Y,Loc.X].Passability) then
        Output.Add(Loc, Own)
      else
        fCoalMiningTiles.Delete(I);
    end;
    Result := Output;
  end;
  
  
  function TKMEye.GetCityCenterPoints(aMultiplePoints: Boolean = False): TKMPointArray;
  const
    SCANNED_HOUSES = [ht_Store, ht_School, ht_Barracks];
  var
    I, Cnt: Integer;
    HT: THouseType;
    H: TKMHouse;
  begin
    // Find required house cnt
    Cnt := 0;
    for HT in SCANNED_HOUSES do
      Cnt := Cnt + gHands[fOwner].Stats.GetHouseQty(HT);
    SetLength(Result, 1 + (Cnt-1) * Byte(aMultiplePoints));
    // Exit if we have 0 houses
    if (Cnt = 0) then
      Exit;
  
    Cnt := 0;
    for I := 0 to gHands[fOwner].Houses.Count - 1 do
    begin
      H := gHands[fOwner].Houses[I];
      if (H.HouseType in SCANNED_HOUSES) AND not H.IsDestroyed AND H.IsComplete then
      begin
        Result[Cnt] := KMPointBelow(H.Entrance);
        Cnt := Cnt + 1;
        if (Length(Result) <= Cnt) then // in case of not aMultiplePoints
          Exit;
      end;
    end;
    SetLength(Result, Cnt); // Just to be sure ...
  end;
  
  
  