Also you're gonna have problems with the tile picture part of your class. By giving each individual tile it's own TBitmap you are gonna use a heck of a lot of memory for bitmaps for each indivudual tile. 5000 bitmaps takes up a of a lot of memory. Let's say each of these tiles is 32*32 with a depth of 16. 32*32*16*5000 is a whole lot of memory. It would be much better to have make the TilePicture reference another array of images that is used to store ther images for tiles. Then you would only have one bitmap for each different image as opposed to one bitmap for each individual tile.

TilePicture : ^TBitmap;

Tiles[X].TilePicture:=@TileImages[Y];