I use tilemap for its initial purpose: build all parts of the world that are tiled so it's more efficient to edit and more efficient for the engine to render. It's like a terrain of static things.
If I ever need to add something that can move, rotate or mark a trigger position, I would do that with a node, not a tile (or use a script, read below).
Sometimes I use another layer of Tilemap for marking areas, but mostly because they are bound to tiles as well with the same constraints.
For the same reason the Particles
node exists instead of a bunch of Sprites
flying around, I see Tilemap
as both a tool and engine optimizations technique. Optimizing requires constraints (using a grid is one) but that doesn't mean you are limited to what Tilemap
provides. You can think differently to add new features to it.
For example, in my game I needed to make some tiles emit particles. The "node" way would be to add a Particles
node to every tile, but it's tedious and wastes a huge amount of time and resources the bigger your map is. So instead, I've gone through the "tile" way: I created a script that picks a random position one time per frame on the visible world rectangle, and if this lies into a specific type of tile, I draw a particle from the script (no need for nodes). It is surprisingly cheap for a pure GDScript technique :)
Another example: I need to make a tile "bump", so it really creates a moving sprite for a brief instant. Tilemap doesn't allow that. So what I did is to spawn an animated sprite only at the required position, then hide it when the animation is finished. If the whole tile was moving, I would have removed the tile and spawned its animated version as a node, and when it's done I would place again the static tile.
The games you listed can perfectly use the tilemap, although I'm not sure yet how performant it would be for Conway's game of Life or the tiny tiles of Terraria (maybe it is? would be worth trying, always test before optimizing stuff).
You can implement techniques like I described to get the extra effects.
The only bit I'm not sure of is frame-by-frame animated tiles. Sure you can script that too, but I'm surprised Godot doesn't have support for it.