anchor.diff:  
   
   function TKMTerrain.TileHasParameter(X,Y: Word; aCheckTileFunc: TBooleanWordFunc; aAllow2CornerTiles: Boolean = True): Boolean;
  -var
  -  K, Cnt: Integer;
  -  Corners: TKMWordArray;
  +const
  +  PROHIBIT_TERKINDS: array[0..1] of TKMTerrainKind = (tkLava, tkAbyss);
  +var
  +  I, K, Cnt: Integer;
  +  Corners: TKMTerrainKindsArray;
   begin
     Result := False;
   
  
positive.code: function TKMTerrain.TileGoodForIronMine(X,Y: Word): Boolean;
  var
    CornersTKinds: TKMTerrainKindsArray;
    CornersTerrains: TKMWordArray;
  begin
    Result :=
      (fTileset.TileIsGoodForIronMine(Land[Y,X].BaseLayer.Terrain)
        and (Land[Y,X].BaseLayer.Rotation mod 4 = 0)); //only horizontal mountain edges allowed
    if not Result then
    begin
      CornersTerrains := TileCornersTerrains(X, Y);
      CornersTKinds := TileCornersTerKinds(X, Y);
      Result :=
            (CornersTKinds[0] in [tkIron, tkIronMount])
        and (CornersTKinds[1] in [tkIron, tkIronMount])
        and fTileset.TileIsRoadable(CornersTerrains[2])
        and fTileset.TileIsRoadable(CornersTerrains[3]);
    end;
  end;
  
  
negative.code: 
  //Get tile corners terrain id
  function TKMTerrain.TileCornersTerrains(aX, aY: Word): TKMWordArray;
  var
    K: Integer;
    TKinds: TKMTerrainKindsArray;
  begin
    SetLength(Result, 4);
    TKinds := TileCornersTerKinds(aX, aY);
    for K := 0 to 3 do
      Result[K] := BASE_TERRAIN[TKinds[K]];
  end;
  
  
  