Putting together tilemaps in godot is painful. Mainly because there's simply not enough tools to do it quickly and efficiently. I'll just give some ideas:
Automatic tileset from a texture - relying on addons for such basic functionality isn't great. Besides, tile cutting addons don't have a lot of features (like tile naming or setting up collision) that should be there. Right now making a tileset in godot with it's default functionality should be considered a torture.
Randomizer - If user selects more than one tile from the set, randomizer should kick in and randomly place one of the selected tiles on click. A lot of games use several variations of one tile so it's common to need some kind of randomization. In additional options it would be nice to have rotated and flipped tiles to appear randomly.
Tile Animation - this is the big HUGE one. Some tiles are just supposed to be animated. Water, for example. Right now doing animation requires either setting up timer to go through each tile and update it, or making a shader for animating those. Neither of those is good and a lot of times more costly than it should be. Having some sort of mechanism for tile animation without a huge fuss would be great.
TileMap collision to NavMap - a lot of the times, if you do collisions on your tiles, you might want to have a navmap from those collisions.
_These ones are not as important but still would be a nice addition:_
Brush size - maybe tiles are small. Maybe map is big. Maybe someone wants to do big strokes before making a more detailed map. Without brush size option you either put one tile at a time or bucket fill it all.
Less whitespace between tiles - tiles don't need to take up so much space in tile picker and have huge margins. The more tiles you have on screen the easier it's to find the one you need.
For me the tilemap is the smallest part off the pain. The biggest is creating tilesets.
Tileset should not be a transformed scene it should be the original scene with all the godot goodies.
Tile with:
Tilemap should have a paint and a select mode.
When selecting a tile in tilemap it should show in the inspector his properties like selecting a node(instanced scene).
The tilemap could then not only be a place to paint the tiles, it could be a place to create maps.
@puppetmaster I think it's not that way at the moment because Tilemap is actually an optimized version of "just instance a bunch of nodes in a grid". It doesn't makes sense to have all that on tiles because you would loose performance. Imagine Terraria with a script and animations on EVERY single little tile, or the same thing on all cubes of a Minecraft world. Optimized? I don't think so.
Aside from that, I agree the Tilemap editor can be improved, and for most features I would take Tiled as an example :)
@Zylann For our LudumDare 31 game we have used tiled together with libgdx (java game engine).
Every tile in tiled have had his own properties , animation, logic data and collision information.
To draw the tilemap Libgdx read the sprites from the tilemap and draw it. (same in godot)
To create the game logic Libgdx has all the time access to the tile properties.
In godot I need to build the logic around tile numbers and replace the tiles with scene to have the full advantage seen in this project Topdown shooter prototype.
It's like you have everything in front off you but you cant use it!
About the Tilemap itself:
@puppetmaster- well, not all games require tiles to be accessed like regular nodes. If I had to code a tilemap engine, I would not use nodes because it doesn't scales well (=huge tilemaps). I don't think instancing all nodes instead of using a Tilemap is better either, because you loose Tilemap's CPU, GPU and memory optimizations. Well, basically the reasons why it exists.
However I agree that animating tiles and put logic on them is tedious, and it could be supported better.
It's a problem of API and tradeoffs.
Iterating every single tile in the tilemap just to animate them is inefficient (unless you do it every frame in C++). You could simply update the texture on the GPU like Minecraft does, or perform a shader trick in the material. It's a bit tedious to do at the moment AFAIK, so I would expect Godot to be able to handle animations in tiles in a simpler way.
Putting logic on tiles is not straightforward, but it basically boils down to shifting paradigms:
tilemap.get_tile_set().get_tile_manager(tile_id)
This would return a unique instance of the script you set on the tile in the tileset. This is good if you only need logic for any tiles (not vars). This way you could paint 1000 tiles and handle all their logic with a single script when needed. This is what Minecraft does: instead of instancing thousands of Cube classes, it wires bytes to managers for each block type. This is the same reasoning for tiles, and it is very efficient.
If every tile instances have an independent behaviour, you could indeed make them nodes. This is fine for simple games. But this doesn't scales very well if you have an extremely large tilemap (or worse, an infinite one), so you can ask yourself this question:
How many of them will be active?
If they change only when the player touches them, then there is no point in instancing 1000 nodes. Better use the previous technique, but when the tile becomes "active", make it so it becomes a full node, and make it a tile back when it's finished.
Long story short: in order to paint nodes like tiles, what you need then is not a tilemap, but something that works like a tilemap, with similar underlying data but a different, simpler implementation. This can be achieved with a plugin, but we should be able to re-use the Tilemap parts instead of re-implementing it from scratch... or you can just do what you did in your project :)
As long as we can all agree that tilemaps in their current state are not good, we can think about better solution.
But yeah, better tileset importing and tile animation are probably the most important things to improve in engine right now.
I think the tilemap tile placement editor also needs some love
Here are some ideas:
Anybody else got any good ideas?
@spookdogg You can select a rectangle of tiles and use Ctrl+D to duplicate it, although Tiled's approach handles your last two issues very nicely at once.
It would be nice if Tiled importer actually worked. It doesn't.
I've created this plugin as possibility to easy create/change multiple tiles for the tileset scene before saving it as a tileset resource.

I updated the plugin. You can now create tiles from loaded Images.

I think that finally it's time to start rewrite of the TileMap node and maintain as much backwards compatibility that can be maintained and finally used in future Godot versions.
Current TileMap implementation is the biggest, if not the most deciding feature that drove me away from Godot for some time.
Auto-tileset creator, auto-tiling and all those features awesome features that might break backwards compatibility should be implemented.
Something that directly uses rendering engine and not instances nodes.
I recommend using Tiled as a reference for the features that should be added. And Auto-tile can be changed with Terrain Editor and have multiple terrains from the same tile-sheet. And so on...
So when we convert a scene of nodes to a tile set the scripts attached to those nodes won't trigger? Shouldn't we allow scripts to be run for specific tiles?
For example, maybe I have a box like in Mario that spawns items above it when the player enters the area below it. Or maybe we want a script on a lava tile to damage the player when they enter the area that we set up for the tile?
EDIT:
Also why can't we put multiple tiles from the same tile set on top of each other? Shouldn't we be able to put a background tile behind a foreground tile without having to duplicate the tile set and go back and forth? We have Z-indexes for a reason.
This issue is very old. Half of the features mentioned here all already implemented, the remaining ones are mostly covered by my new proposal: https://github.com/godotengine/godot-proposals/issues/896
Also we are moving proposals to proposals repo, so closing this.
Most helpful comment
For me the tilemap is the smallest part off the pain. The biggest is creating tilesets.
Tileset should not be a transformed scene it should be the original scene with all the godot goodies.
Tile with:
Tilemap should have a paint and a select mode.
When selecting a tile in tilemap it should show in the inspector his properties like selecting a node(instanced scene).
The tilemap could then not only be a place to paint the tiles, it could be a place to create maps.