I spent the whole year so far basically just making games in LÖVE with Tiled. I went all-in on it — the vast bulk of game data is crammed into Tiled one way or another — and it saved me an awful lot of time and effort, sometimes in ways I didn’t expect. Thank you for making it!
But, ah, I naturally ran into some frustrations too. So here those are, in the hopes that Tiled can become better. I’m on Arch Linux x64 using KDE.
I know some of these things are being addressed in the dev preview right now, but I haven’t had a chance to try it out yet. I also know some of these are known issues, in which case, here’s another vote for them.
Apologies for the slightly preposterous length of this list, but I’m guessing this is a nicer format than suddenly getting 200 GitHub emails.
Map canvas
I basically just want Aseprite, but for tiles instead of pixels. Tiled is close, but could stand to draw inspiration from art programs in a couple more places.
-
The mouse wheel scrolls the map vertically. This is a 2D canvas, so it ought to zoom instead.
-
Occasionally I roll the mouse wheel, and the canvas instantly jumps to some point high above the map itself.
-
Ctrl-= is ambiguous, according to Qt? I get a generic dialog that doesn’t tell me what the ambiguity is, and suggests I use Settings → Configure Shortcuts to resolve it (which of course doesn’t exist). I’m using KDE, so it might be coming from there too.
-
The shortcut for rectangular marquee is R, but I think the de facto standard is M.
-
Ctrl-Y should probably also work as Redo.
-
Switching between the eraser and brush is annoying. I’d like to just be able to pick up and “place” the empty tile with the brush. (This is how I work in Aseprite, too; I rarely use the actual eraser.)
Curiously, this is already how the terrain tool works.
-
Right-clicking with the eraser… just erases. I do this a lot when I think I have the brush selected.
-
Right-clicking with the bucket fill doesn’t select tiles.
-
The ability to draw with a selection of several tiles is great! Alas! If I select a block of off-sized tiles from a tileset, Tiled will try to draw them in adjacent map tiles, rather than spacing them out to preserve their appearance as a block.
I know this is unsolvable in the general case, but I’ve only ever wanted to do it with a tileset whose size is an integral multiple of the map’s tile size.
-
I can’t move chunks of the map around! The tile select tool always creates a new selection. This is really bad. Like, really, really bad. Even the PICO-8 map editor can do this. It made iterating on maps a lot more cumbersome. I can cut and paste, but that doesn’t paste empty tiles; “offset map” works on the selection, but it’s nearly useless here.
-
There’s no way to flip a tile selection — for example, if I want to make a room go right-to-left instead of left-to-right.
An object selection offers the deceptive “flip horizontally” and “flip vertically”, but those just flip each selected object in-place, rather than flipping their positions within the selection.
-
Ctrl-Shift-A clears a tile selection, but not an object selection. I notice that the tile selection is still visible when on an object layer, and Ctrl-Shift-A will still clear it. Odd.
-
After copying or cutting a tile selection, pasting it will set it as the current brush… centered on the mouse cursor. This seems sensible enough, but if I’m copying a large block of tiles between layers — say, moving all of a particular tile onto another layer — then I have to figure out how to align them all with where they were originally.
I think the usual image editor approach is that if the source position is still visible, then pasting will give you a floating selection in the same place; otherwise, it’s centered. Of course, Tiled doesn’t have floating tile selections, so I don’t know what the equivalent would be.
-
Selecting tiles marks the map as modified. (Perhaps because it creates an undo entry? As it should!)
-
Clicking once with the move tool marks the map as modified, despite not actually moving anything.
-
Switching to an image layer causes the move tool to be the active tool, because it’s the only one that’s valid on an image layer. Okay. Switching to any other layer then keeps the move tool as the active tool, even though I didn’t choose it myself and didn’t use it. This has caused a few surprises.
-
If I erase a tile in a spritesheet — that is, edit the image to erase the tile — but had forgotten the tile was still in use, it’s hard to notice anything’s awry. Until I draw a new tile there and something unexpected pops up in a map. Not sure if there’s any good solution for this, but I’ve done it a couple times now.
-
Occasionally a tile appears to be selected, but actually isn’t, and clicking it doesn’t select it.
I neglected to write down exactly when this happens, but I found an obvious example: with the brush selected, use right-drag to select a block of all the same tile. That tile will be the only one selected in the tileset, but clicking on it won’t change the brush to a single copy of that tile.
-
If I have the map properties open, switch to another map, and then switch back, the properties panel will now be showing a tile’s properties.
Objects
-
The tile and object select tools work totally differently. Object selection captures anything it touches, even grazes; tile selection captures (I think) only tiles that are at least halfway inside the drawn area. I frequently get these behaviors confused.
-
“Select objects” can select objects on any visible object layer, which feels very wrong to me. Simply clicking can do this, too. What’s the point of layers if not to scope edits? I don’t know what to expect the behavior to be, either — if I drag an object on another layer, should that move it to the current layer?
I ran into this an awful lot because I had one game where a single map could also have several overlaid “submaps”, for the interiors of buildings and the like, and both the main map and the building needed identical door rectangles in the same place.
-
Perhaps because of the above, I’m always a little paranoid that I don’t have the objects selected that I think I do. Perhaps the selection rectangle could be more obvious? It’s especially hard to see if you’re using “highlight current layer”, since the background is darkened.
-
Dragging a selection to the edge of the canvas doesn’t automatically pan in that direction.
-
Direly need a way to select objects behind other objects. For what it’s worth, in Inkscape, holding Alt while clicking in the same spot will cycle through possible selectables from the top down.
It seems like there’s a rather wide margin around objects that captures clicks, too, especially when zoomed in. Maybe it’s measured in map pixels when it should be measured in screen pixels?
-
Holding Shift while dragging an object selection ought to snap the movement to a “nice” angle.
-
I’ve tried to Ctrl-drag to clone an object on several occasions.
-
When the tile object tool is selected, there’s no preview of the tile being placed, unlike the tile tools.
-
I often find myself trying to drag a newly-created object around, but of course that just tries to create another object of the same type. I mostly do this with tiles, too; maybe because of the lack of preview.
-
When on an object layer, clicking a tile ought to switch to the tile object tool. (Tile layers work this way.)
-
There’s no way to change which tile a tile object uses.
-
In one game, the world was a single hand-drawn image, so I had to draw collision on top of it. Making small tweaks turned out to be tedious at times, because I need to use “select objects” to edit rectangles, but “edit polygons” to edit polygons. I wish the “edit polygons” tool worked on rectangles as well.
-
Deleting objects pans the canvas to center on where they were, for some reason?
-
A point type would be super.
Collision
-
Setting a lot of tiles to be completely solid is fairly tedious. I also can’t tell at a glance which tiles have what collision.
-
I’ve been indicating sprite “anchors” (or “offsets”, if you like) by putting a zero-radius circle on the tile and giving it a type “anchor”. This feels hacky, and is surely a common need; perhaps worth first-class support?
-
I wish I could see all the collision on the entire map, including for tile objects.
This would actually help with a common problem I have with tile objects: placing them so they’re actually on the ground! Ground tiles are usually completely solid, but most of my objects have collision that stops a pixel or two before their feet, and I’m basically placing them blind. If I put them too high, then they visibly fall when the map starts; if I put them too low, they either fall through the ground or get stuck, depending on your taste in physics.
For bonus points, let me just drag a tile object towards the ground, and stop it automatically when it collides.
For extra bonus points, show me all overlapping collision shapes in the map!
But also note that sometimes I use the collision editor to draw things that are not collision.
-
The collision editor seems to switch tools completely at random.
I frequently have “select objects” active, then I pick another tile, then I tab back to the collision editor, and I find that it’s now drawing circles or something. Sometimes it’ll draw a circle for my first click, then revert back to select. I have absolutely no idea what’s going on here.
-
Similar to the problem with pasting tiles: sometimes I want to copy/paste a collision box to several tiles, but the paste is relative to the mouse cursor rather than the tile, so I have to manually check the positioning every time. I don’t know the right answer here either, since the current behavior is also useful sometimes.
-
When looking at the collision for an external tileset, everything is disabled. I can’t select objects to see their properties. I can’t even zoom!
Animation
-
I can’t change the framerate of multiple frames at once. Similarly, I can’t change the framerate of every frame at once.
-
There’s no timeline or other indication of where in the animation we are, which can be confusing for animations that use the same frames several times with different timing.
-
If the tiles are particularly large, it’s very easy to get lost in the frame list.
-
You can’t zoom the animation preview.
-
The tile list is completely distinct from the tileset view. If you have a lot of tiles that are fairly similar — say, a detailed walk animation — it can be difficult to pick out the right frames. The tileset view has a few useful landmarks, like the filmstrip overlay for animated tiles, or the list of tile properties.
-
There’s no way to specify that an animation stops.
-
There’s no way to specify that an animation loops to a tile other than the first (or, equivalently, has a lead-in).
-
There’s no way to copy an animation’s timing, but use different tiles.
Shared tilesets
Looking forward to trying the dev builds! Having to import/export every time I wanted to make a change has been kind of a drag. I even lost a significant chunk of work once — I’d made a bunch of changes in one map, then made another small change from a second map, but the second map didn’t realize the tileset changed and “imported” a stale copy of it, which then overwrote the other changes. Oops.
-
Adding an external tileset doesn’t switch to its tab in the tileset panel, even though the very next thing I want to do is always use one of its tiles.
-
If I change the width of a spritesheet used by a tileset, Tiled asks if I want to adjust tile references. Awesome. If I do that with a shared tileset, every open map using that tileset will ask me. Again, awesome.
Of course, the tileset will still appear to be wrong until I manually import and re-export it. If I do that before I’ve fixed all the maps that use it… then Tiled won’t realize anything changed, and I’ll have to fix the tiles by hand. Auuggghhh.
I don’t know what the right answer is here. I see mention of work on a way to swap tiles, which will at least make manual fixing easier.
Terrain
I mention this almost-last because I have the least experience with it; I basically picked it up at the last minute because I realized I was running out of jam time and manually placing edge tiles was taking way too long.
-
The terrain editor should probably work by toggling, rather than needing an explicit erase mode? I can see how erase mode would be useful for deleting a terrain type no matter what it is, but if I click on a corner that’s already using the current type, surely it should just clear the type.
Also, the little quarter-circle preview under the cursor looks exactly the same whether drawing or erasing, which is probably not right.
-
If I use the terrain tool to right-click a tile that’s solidly a particular type, the terrain tool will switch to that type. Cool. But if I right-click an edge tile, the terrain tool will switch to erase mode.
-
The terrain tool does incredibly bizarre things to existing un-edged terrain. If I have a full tileset (visible here) and a block of middle tiles, then the terrain tool will propose… uh…
I don’t know what’s going on here; you can see I do have edge tiles, and the terrain tool otherwise draws them just fine.
-
Perhaps the same problem, but if I have otherwise-correct terrain that’s missing a single tile, like so:
The terrain tool can’t fix this. If I hold Ctrl while aiming at the upper-right corner of the missing tile, I get nothing at all. Aiming at other nearby quadrants gives various goofy suggestions that generally involve adding several other new tiles.
-
I have some special tiles that fit with this terrain, but should never be placed by the terrain tool. For example, sloped or stair tiles.
Trouble is, I can’t flag them with a terrain type, or the terrain tool will think they’re one of a few random choices and place them whenever it feels like it. (That might even be kind of neat, but I don’t think I can express the right constraint here; obviously these pairs of tiles should always go together.) But since they’re not flagged, if I use the terrain tool anywhere near them, it’ll try to replace them with the “correct” tiles.
-
It’s very cool that the terrain tool can choose randomly from a handful of variants. Wild pie-in-the-sky idea: flexible enough constraints that I could implement Wang tiles?
I think I’m asking for the terrain tool to evolve into a little constraint engine.
-
I have a game that has an awful lot of cave walls, so I drew a 2×2 block of tiles and floodfilled them everywhere to reduce the sameyness. (Very cool that Tiled can do this!) Unfortunately, this hamstrings me a little bit in future editing, because now the magic wand and color picker tools won’t work so well on them. Also, since I used a consistent grid pattern, moving anything around means I may have to fix the pattern.
I found myself wishing for a terrain floodfill as well, for example for filling the space around an enclosed map with solid tech tiles. Using regular floodfill would mostly work, but I’d have to also take care of all the outer edges left by the terrain tool.
-
I used the terrain tool with the above tech-y tileset to fairly great effect, and it saved me a lot of time. Unfortunately, I never got it to work very well with a dirt tileset, and I eventually figured out the problem was that several shapes of tiles were missing entirely. For example, I didn’t have inner corner tiles; I’d just been using solid dirt tiles instead. There’s no way for me to me to explain this to the terrain tool, so it tried to avoid those kinds of tiles by breaking everything into distinct rectangles.
-
The grass tile also has a “background” variant (next to the top left) that needs to go on a layer behind all regular grass. I think automapping can do this, but (a) it seems relevant to the idea of terrain and (b) I don’t know if automapping can remove the background tile when I remove the foreground tile.
-
How would I mark 1-tile-wide terrain? 1×1 tiles exist, and marking 1×n would be useful for pipes and wires and thin connections between other kinds of terrain.
I’ve got to stress that the terrain tool is a lovely concept that’s fairly well-implemented, and quite cleverly avoids bogging the actual map down with metadata. With a little TLC, it could be phenomenal.
I’ve also tried automapping in the past, but it seems very tedious to set up for similar edge cases; for example, you can’t just say that some set of 12 tiles are all “water” tiles, you’d have to actually make 12 input layers and place them all… every single time. But this is the kind of information that the terrain tool already has! I think both features would be much improved if they could use each other’s capabilities, or even were merged somehow.
Game-specific amenities
I think the last tile-based game-specific map editor I used was MegaZeux, so my inspiration might be a tad retro here.
-
I’d love to be able to say that a particular tile can only go on a particular layer (or a layer with some particular properties, or whatever). Ideally I wouldn’t even be prevented from placing it; it would just go on the nearest correct layer, whatever that means.
-
I’d also love to be able to say that a particular tile can only exist as an object, not directly on the map; or that a tile should only be placable on the map; or that a tile can never be placed at all.
I had a fun bug where I accidentally placed the “powered on” states of some wires, but only the “powered off” states were recognized specially by the engine. So the wires still appeared in-game, but didn’t actually work, and I was very confused for a few minutes.
-
Honestly, it would be nice to just have a palette of all “valid” stuff that can go on the map so I don’t have to navigate a little minefield of unused tiles and alternate states and whatnot.
-
Sometimes I have a property that’s quite important to my engine, and thus to me, and I’d like to know about it. Collision shapes, for example, can be flagged as being one-way platforms, which gives them rather different behavior. It’d be nice if this could somehow cause them to show in a different color, or with some other visual effect, without having to create a separate object type for every such variant.
I imagine I’ll want this all the more when I start messing with tile types!
-
Relatedly: there’s no way to find a tile, object, collision object, or layer by name or property or property value (or tile, in the case of tile objects).
-
Tiles can’t draw from a fixed list of properti— oh, you just fixed that. Never mind, then. And thank you.
-
I have platforms as tile objects, and I have platform tracks as polylines, but I don’t have a nice way to connect the two. I suppose this is the usual request for “link objects” or “objects as a property type”… but for a platform, I wouldn’t just want a visual link between the platform and track. I’d want the platform to be physically attached to the track.
-
Being able to view or edit the properties of several maps at a time would be useful. Perhaps something for a “project” which contains all of a game’s maps?
-
Tiled supports a lot of stuff, which is great, but I don’t support all of it. For Tiled to be appropriate for other people to use to map for an arbitrary engine, it’d have to be possible to disable (in a project settings file or something) unsupported features. For example, I’ve always treated Tiled’s rectangles as AABBs, but Tiled allows rotating them; I don’t support flipped tiles; I haven’t implemented collision with ellipses or polylines. Nothing’s stopping anyone from putting those in a map and throwing it at my game, but they’ll probably be a bit confused by the results.