This release got a little out of hand. After reaching the 1.0 milestone, I really wanted to make smaller incremental updates. For several reasons, not the least our successful participation in the Google Summer of Code, the amount of changes in this release is huge! Below I’ll try to highlight some of the most significant ones.
Mapping Without Boundaries
When you start a new map, you may not know in advance how large it will need to be. Of course, that’s why we had the Resize Map action. Now though, you can just select “Infinite” in the New Map dialog. This is possible, because tile layers now only allocate memory for the parts you’re actually using. All the tools have been adjusted to work on infinite maps.
On large maps, zooming in and out is an efficient way of navigating. From now on the wheel zooms by default, without the need to hold Control.
Long ago, Hao Wang introduced the concept of Wang tiles. A Wang tile has a color associated with each of its four sides, such that in a set of Wang tiles those colors determine which side fits to which other sides. While mathematically interesting, we use this concept to automate certain editing operations, like drawing of roads and advanced random filling.
The existing Terrain Brush already provided similar features, but the Wang tiles take the functionality a little further. When you define the colors of your tile, you can choose to work with either the corners or the sides (or both). This makes Wang tiles suitable for roads and fences. In addition, all tile painting tools now have a Wang fill- mode, which is like the random mode but takes into account the sides of the tiles.
On the other hand, this feature is still new and the Wang Brush is not yet as convenient as it could. Your feedback is welcome!
If your game is like most games, then your maps are filled with repeating objects. Usually directly placing tiles from a tileset works fine, but sometimes the objects carry a lot of custom properties or they may have specific polygon shapes, such that your workflow may include a lot of copy/pasting. And then what if later on you want to change a property in all those copies? For this use-case, Tiled now supports object templates.
An object template is stored in its own file and each instance of that template on a map just refers to it. Instances can override properties of the template, at which point that aspect is no longer affected by changes to the template. Templates can be edited in a dedicated window in the Templates view.
Related to objects, a new point object type was added that is different from all other types in that it can’t be rotated or resized. This is useful for marking locations.
Context Sensitive Toolbar
Most tools have additional options that are not immediately obvious. To help with this, a context-sensitive tool bar was introduced that can display tool-specific options and actions. It is currently implemented for the tile painting and selection tools, hosting the drawing modes, stamp transformation actions and selection operations.
The left version is shown when the new Shape Fill tool is selected, which provides a quick way to fill rectangles or ellipses. Noteworthy is also that you can now capture a stamp from the map while using any of the tile painting tools.
New Exporting Options
Tilesets can now be exported as well, which allows them to be saved in Lua format.
The GameMaker: Studio 1.4 export was improved. It is now possible to set the scale, origin and creation code for instances. Also views can now be defined in Tiled. Finally the default depth for tile layers now matches the default of GameMaker.
Major Updates to the Manual
The last thing I’ll mention here is not a change to Tiled, but regards the User Manual. Since the last release, the manual has transitioned to Read the Docs, was translated from Markdown to reStructuredText (now using Sphinx) and was vastly expanded.
As you may have already noticed many of the links in this post went to the manual. Apart from pages covering all the new features, new sections have also been added about editing tilesets, the user preferences, the export formats and about writing Python import/export scripts. Also the pages about Automapping and the JSON format have been ported over from the wiki.
Going forward, we’ll host multiple versions of the manual, so that you’re not confused by features developed for Tiled 1.2 while using 1.1. Read the Docs also makes it easy to host translations of the manual. You can help translate the manual (and Tiled itself) on Weblate. But that’s quite a lot of text to translate!
Many improvements could not be mentioned, so here is the full list:
- Added support for infinite maps (by Ketan Gupta, #260)
- Added support for Wang tiles and related tools (by Benjamin Trotter)
- Added support for reusable object templates (by Mohamed Thabet)
- Added working directory setting for custom commands (by Ketan Gupta, #1580)
- Added output of custom commands in Debug Console (by Ketan Gupta, #1552)
- Added autocrop action based on tile layers (by Ketan Gupta, #642)
- Added tool bar with tool-specific actions and settings (by Ketan Gupta, #1084)
- Added shape fill tool for filling rectangles or circles (by Benjamin Trotter, #1272)
- Added option to lock/unlock a layer (by Ketan Gupta, #734)
- Added .xml as possible file extension for TMX files
- Added keyboard shortcut for Save All (by Thomas ten Cate)
- Added actions to remove a segment from polygon or to split a polyline (by Ketan Gupta, #1685)
- Added icon for animation editor in the tileset editor (by Ketan Gupta, #1706)
- Added display of flip bits for hovered tile in status bar (#1707)
- Added ability to capture tiles while using fill tools (#790)
- Added option to have mouse wheel zoom by default (#1472)
- Added tab closing actions to context menu, and close by middle-click (by Justin Jacobs, #1720)
- Added ability to reorder terrain types (by Justin Jacobs, #1603)
- Added a point object for marking locations (by Antoine Gersant, #1325)
- Added ‘New Tileset’ button when no tileset is opened (by Rhenaud Dubois, #1789)
- Added ‘Open File’ button when no file opened (by Rhenaud Dubois, #1818)
- Added support for custom input formats and TMX output to the –export-map command-line option
- Added island RPG example based on Beach tileset by finalbossblues
- Added file-related context menu actions to tileset tabs
- Added action to reset to default window layout (by Keshav Sharma, #1794)
- Added support for exporting tilesets, including to Lua format (by Conrad Mercer, #1213)
- Keep object types sorted alphabetically (by Antoine Gersant, #1679)
- Improved polygon node handles and drag behavior
- Fixed %executablepath variable for executables found in PATH (#1648)
- Fixed Delete key to delete selected polygon nodes when appropriate (by Ketan Gupta, #1555)
- Fixed Terrain Brush going wild in some scenarios (#1632)
- Fixed the “Embed in Map” checkbox to be persistent (#1664)
- Fixed crash when saving two new maps using the same file name (#1734)
- Fixed issues caused by paths not being cleaned (#1713)
- Fixed suggested file name for tilesets to match the tileset name (by killerasus, #1783)
- Fixed selection rectangle’s shadow offset when zooming (by Antoine Gersant, #1796)
- Fixed save dialog to reopen after heeding the file extension warning (by Antoine Gersant, #1782)
- Fixed potential crash when zooming out too much (#1824)
- Fixed potential crash after deleting object or group layers
- Fixed Object Selection tool clearing selection on double-click
- Enabled building with Qbs on macOS, including the Python plugin (by Jake Petroules)
- Automapping: Don’t fail if an input/inputnot layer isn’t found
- Automapping: Added a “StrictEmpty” flag to input layers
- GMX plugin: Added support for defining views with objects (by William Taylor, #1621)
- GMX plugin: Added support for setting scale and origin for instances (#1427)
- GMX plugin: Added support for setting the creation code for instances and the map
- GMX plugin: Start counting default tile layer depth from 1000000 (#1814)
- tBIN plugin: Added read/write support for the tBIN map format (by Chase Warrington, #1560)
- libtiled-java: Generate classes from XSD, some fixes and build with Maven (by Mike Thomas, #1637)
- libtiled-java: Added support for manipulating non-consecutive tile IDs in a tileset (by Stéphane Seng)
- Python plugin: Adjusted example scripts to API changes (by spiiin, #1769)
- Flare plugin: Various changes (by Justin Jacobs, #1781)
- TMW plugin: Removed since it is no longer needed
- Updated Dutch, Bulgarian, English, French, German, Korean, Norwegian Bokmål, Spanish and Turkish translations
Thanks to everybody who contributed to this release with bug reports, suggestions or patches!
A Look Ahead
While doing the final preparations for this release, I’ve already been busy working on several highly requested features for the next release, Tiled 1.2. These include:
- Ability to edit multiple tile layers at the same time (see this demonstration video)
- Option to show multiple maps in the same view (see screenshot)
- Polygon editing improvements (some slipped into 1.1)
What else should be done? Help us decide by voicing your opinion or maybe even contributing to the development!
Support Tiled Development
Making all these improvements (and guiding others to contribute) was only possible thanks to over 200 patrons supporting me on a monthly basis as well as many people choosing to pay for Tiled on itch.io and some who donate through Liberapay. To ensure I will be able to keep developing Tiled at this pace, please chip in!
Your donation primarily enables me to work 2 full days/week on Tiled. With additional funds I can place bounties on BountySource to encourage other contributors, and I would like to rent a small office room so I can concentrate better on my work.