Basically my 1) suggestion consist of only 1 layer that is ground level terrain. After that draw players, trees, rocks, walls as sprites, spell effects on top of it. Simple quads for which you can use vertex arrays or whatever to optimize. These sprites are sorted by their Y-coordinate, but only sort visible sprites so calculation isn't going slow. Maybe a entirely separate list for visible objects that is updated as screen and objects move.