You just need to think carefully on how you will manage everything. A few basic questions:
How will you manage your layers and their tiles?
You can use a simple array to store them.
type tTile
x as integer
y as integer : `Position
img as integer : `Image number
endtype
dim Layer(MAX_LAYERS, WIDTH, HEIGHT) as tTile
But then you must also be aware of the limitations of this method. For example, layers can only have a fixed width and height, and swapping layers might be hard.
A possible solution might be using memblocks to store the tile data:
type tLayer
x as integer
y as integer : `Position
TilesX as integer
TilesY as integer : `Size
mem as integer : `The memblock containing the image numbers
endtype
dim Layer(nrOfLayers) as tLayer
Here the memblock contains the image numbers (a DWORD for each tile for example). This makes managing layers much easier. You can also use the array index as the layer priority order for drawing.
How will you draw tiles to the screen?
A small map of 50x50 tiles might be able to be drawn using nested for loops, but much larger maps can be supported if you only redraw the parts that need redrawing. This obviously results in more complex code.
You can choose to draw to a separate bitmap and copy that bitmap to the screen so you don't have to worry about clipping tiles, but be careful not to make bitmaps that are too large to save some RAM memory.
Misc
I consider those first two to be the basic questions you really have to ask yourself before starting this project. Pretty much all other features depend on this. Most other features, most likely won't depend on each other so you can divide those into separate groups.
Cheers!
Sven B