I suppose I can add a “Merge” function so you can combine multiple tilesets (of the same size), from within the program itself. At first it would just be a simple merge (all the same tiles of set A overwrite all of B, or all of B overwrite all of the same of A). But I could see a complex merge screen where you can selectively choose which tiles from each to use.
But that is probably a good bit further down the road.
Oh my god, you did not just suggest a code fix based off the appearance of the GUI.
This irks me so much I am going to explain the reason why it is the way it is. First the container format that is eventually saved is twice removed from the UI. First the UI writes to an InternalTile when a value is changed, which keeps track of references to images and checkbox states. This is then converted into the actual BaseTile that will be saved, when you go to save. Which looks up the image ids, and converts everything to the proper format for output. This prevents additional lookups when the program is running and makes sure the UI stays nice and snappy, regardless of how large of Tileset you are working with.
Now the reason why “rotates” appears first in the JSON, is because the JSON library I am using to output it uses a HashMap rather then a LinkedHashMap when constructing a JSON Object. This means the output is actually whatever the internal order of the binary tree the HashMap ended up as after adding all the values. Which is almost never the same order they are added.
Got all that? I do know a little bit more about the internal mechanisms of the program. I was not just talking out my ass when I said “I have no direct control over that. I could write a custom encoder for that class, but it seems like a lot of work for little gain.”
Optimize removes unused tiles from the Tile Chooser, and reorders them to match your id list.
Add missing tiles is just a stub, it doesn’t do anything yet. But will do what it says on the tin.