anchor.diff:      function TileCornerTerrain(aX, aY: Word; aCorner: Byte): Word;
       function TileCornersTerrains(aX, aY: Word): TKMWordArray;
       function TileCornerTerKind(aX, aY: Word; aCorner: Byte): TKMTerrainKind;
  -    function TileCornersTerKinds(aX, aY: Word): TKMTerrainKindsArray;
  +    procedure GetTileCornersTerKinds(aX, aY: Word; out aCornerTerKinds: TKMTerrainKindCorners);
   
       procedure GetVerticeTerKinds(const aLoc: TKMPoint; out aVerticeTerKinds: TKMTerrainKindCorners);
   
  
positive.code: function TKMTerrain.TileHasOnlyTerrainKind(X, Y: Word; const aTerKind: TKMTerrainKind): Boolean;
  var
    I: Integer;
    CornersTerKinds: TKMTerrainKindsArray;
  begin
    Result := True;
    CornersTerKinds := TileCornersTerKinds(X,Y);
    for I := 0 to 3 do
      if CornersTerKinds[I] <> aTerKind then
        Exit(False);
  end;
  
  
negative.code:   else
    begin
      Cnt := 0;
      GetTileCornersTerKinds(X, Y, corners);
      for K := 0 to 3 do
      begin
        for I := 0 to High(PROHIBIT_TERKINDS) do
          if corners[K] = PROHIBIT_TERKINDS[I] then
            Exit(False);
  
        if aStrictCheck then
          for I := 0 to High(STRICT_TERKINDS) do
            if corners[K] = STRICT_TERKINDS[I] then
              Exit(False);
  
        if aCheckTileFunc(BASE_TERRAIN[corners[K]]) then
          Inc(Cnt);
      end;
  
  