anchor.diff:    KM_CommonClasses, KM_CommonTypes, KM_Defaults, KM_FogOfWar, KM_Pics, KM_ResSprites, KM_Points, KM_Terrain;
   
   type
  +  TVBOArrayType = (vat_None, vat_Tile, vat_AnimTile);
  +
     TUVRect = array [1 .. 4, 1 .. 2] of Single; // Texture UV coordinates
  +
     TTileVertice = record
       X, Y, Z, UTile, VTile, ULit, UShd, UFow: Single;
     end;
  -  TFOWVertice = record
  -    X, Y, Z, UFow: Single;
  +
  +  TAnimTileVertice = record
  +    X, Y, Z, UAnim, VAnim: Single;
     end;
   
     //Render terrain without sprites
  
positive.code:   pData[3] := $00000000;
    fTextB := TRender.GenTexture(4, 1, @pData[0], tf_RGBA8);
  
    fUseVBO := VBOSupported;
  
    if fUseVBO then
    begin
      glGenBuffers(1, @fVtxShd);
      glGenBuffers(1, @fIndShd);
    end;
  end;
  
  
  destructor TRenderTerrain.Destroy;
  begin
    fUseVBO := VBOSupported; //Could have been set to false if 3D rendering is enabled, so reset it
    if fUseVBO then
    begin
      //Since RenderTerrain is created fresh everytime fGame is created, we should clear
      //the buffers to avoid memory leaks.
      glDeleteBuffers(1, @fVtxShd);
      glDeleteBuffers(1, @fIndShd);
    end;
    inherited;
  end;
  
negative.code: uses
    KM_Render;
  
  type
    TAnimLayer = (alWater, alFalls, alSwamp);
  
  
  constructor TRenderTerrain.Create;
  var
  