I've been working on a custom tile-based map editor for a while now, and everything works as expected, or so I thought until I've tried rendering the actual map including the dynamic objects as well.
As it currently works, it's saving data into a buffer in a format of:
[ground layer]
[on-ground layer] (flowers/rocks)
[wall layer]
[on-wall layer] (windows/torches/bookshelves)
So basically there's a total of 4 layers.
The tiles are rendered from top left corner to bottom right corner in the following order:
[ground layer] -> All tiles
[on-ground layer] -> All tiles
[wall layer] Does an instance exists on that spot? in case it does the instance gets rendered first, and then the tile itself.
[on-wall layer] renders normally right after that.
This system seems perfectly fine it the game has a grid-based movement, as well as if all the dynamic sprites are the same size like the tile size. Why? Well, you'd just walk anywhere and get covered with a certain tile or be drawn over a certain tile. On the other hand, if any of the dynamic instances has let's say a sprite height which is bigger than the actual tile size the depth sorting issues appear.
Example:
We've got a pillar which is 16x48 in size. The very bottom of the pillar has a collider of 16x16 and it can't be stepped on, but the mid and top part don't have any colliders. Now if a player for example steps on the topmost tile of the pillar everything gets rendered normally. On the other hand if the steps on the mid tile, the "player's head" would be rendered over the topmost tile..
I'm wondering if there's an actual solution for depth ordering in a case like this.