Skip to content

Releases: deepnight/ldtk

1.1.0

01 Apr 13:47
Compare
Choose a tag to compare

1.1.0 -- Introducing the Super Simple export

Super Simple export

I know: for every new tool out there, there is this moment when you need to write the importer for your favorite game engine.

I’ve been there too, so LDtk offers a Super simple export option. You can enable it from the Project settings panel.

You will get:

  • One PNG per layer in each level
  • A composite” PNG per level (ie. all layers merged together)
  • A very simple, straightforward and optional JSON file per level, if you want to access your Entities data or other information.

Other changes

  • Updated the look of notifications in the bottom right corner. Errors and Warnings will now also blink once to catch more user's attention, as needed.
  • Added a shortcut link to previous major version notes in "Release Notes" window
  • If you have "Open last project" enabled, but close current project, then re-opening LDtk will now bring you back to Home screen.
  • Removed recommendation to enable "External levels" in Project Settings panel.
  • Fixed missing coordinates display after going to World view.
  • Fixed intGridValue presence in JSON for non-IntGrid layers

1.0.0 - Gone gold!

29 Mar 11:41
Compare
Choose a tag to compare

1.0.0 -- Gone gold!

A few words from the author

When I started working on LDtk about 1 year ago (which was known as LEd back then), I would not have imagined how far and how big this would get. LDtk was a critical part of my personal game dev plan, because I knew I needed a modern, fast and user-friendly level editor for my future projects.

Along the way, a passionate community of level designers, aspiring game devs and tech enthousiasts gathered around the project, providing an incredible support and lots of precious feedback.

To all of you, thank you.

This 1.0 step is obviously a major milestone. It is the biggest update so far and it pushes LDtk to the next level (pun intended):

  • New entity reference system
  • Great performance boost for large projects
  • Integrated icons and many quality-of-life changes
  • New world layers
  • User interface reworks

I hope you will like it, as much as I enjoyed making it :)

Entity references

This new "field" type is available to all Entities and is used to store a reference to another Entity.

A typical example is a Button entity with a Reference field pointing to another Entity, like a Door.

You can create arrays of References, or define restrictions to which kind of Entity they can point at. This new powerful feature unlocks lots of new exciting possibilities in a very user-friendly interface.

Integrated icons

LDtk now has an integrated icon tileset to make your Entities easier to read in the editor.

Please note that these icons were provided courtesy of their author, FinalBossBlues, and are to be used only in the editor environment.

If you want to use them in your game directly, you will need to license it from its author FinalBossBlue (itch.io). He's a nice person, feel free to send an e-mail to get in touch :)

General performances

Thanks to major optimizations, general performances will see a big boost, while reducing CPU usage, especially on large projects.

Loading and Saving operations were also vastly improved:

  • Saving time for large projects is much faster (approx. 8-15 times!) by caching elements that weren't modified.
  • Progress bars provide better feedback when working on large projects.
  • Backup system are faster and more reliable.

Editing performances

The way auto-layer rules are calculated was reworked (and a few bugs were fixed), making their rendering significantly faster, especially in large levels.

Undo/redo

The undo/redo engine was complitely rewritten in a much more simple and optimized fashion. This results in a huge performance boost for large levels, while also fixing some existing issues when undoing a Selection move.

Rectangle of tiles for Entities

Entities (and levels too, actually) can use a new Custom Field type which can store a rectangle of tiles from any Tileset. This can be used as an alternative skin, an array of animation frames, an "opened" visual state for a a chest etc.

Copy and paste (work in progress)

For now, this crazy futuristic feature is only available for interface panels (eg. Layer definitions, Auto-layer rules etc.) but will be soon expanded to data in levels, such as entities or large chunks of layer elements.

You can right click on an element with a context menu to copy/cut/paste/duplicate definitions! LDtk just entered modern era.

Simplified world layers

Levels can now be organized in "depth" to support stacked levels.

Reworked toolbar and shortcuts

The main editor toolbar was reorganized to be a little bit more logical:

  • Level button is now near the World button. They also share the same color.
  • The Project button is now brown and near the four Definition buttons.
  • The keyboard shortcuts for the various panels are now:
    • P: project settings panel
    • L: layers panel
    • E: entities panel (replacing the previous "Select empty spaces" option)
    • U: enums panel
    • T: tilesets panel (replacing the previous "Toggle tile stacking" option)
  • F1 to F10 keys are now associated with layers selection (replacing the previous 0-9 keys shortcuts)

User interface improvements

The Space key now fulfills various roles:

  • Hit SPACE once to recenter view on current level or on the whole world (depends on where you are).
  • Hold SPACE and drag with Left mouse button to scroll the view.
  • Hold SPACE and drag with Right mouse button to zoom in/out.

The editor UI font nows uses Noto which offers better readability. While I was at it, I also fixed various font size issues with 2K and 4K monitors.

Enums and Tilesets can now be organized using user defined tags:

Errors in entities, such as a "null" custom field while being defined as "required", are now much more visible in the level view.

Contextual help tips were also reworked and streamlined in every existing panels. You now have a single small "?" indicator that gives all useful info you need for pretty much every editor options.

Code signing on Windows

LDtk executable is now properly signed on Windows, which should ultimately get rid of "This application could destroy your computer" warning.

Other major changes

  • IntGrid values sorting: that's right, you can now sort your IntGrid values. Please note that re-organizing values will not remap them: so moving value "1" down, for example, will not modify it ("1" value stays "1"), only values order changes.
  • Image reloading bug fixes:
    • Reloading of images (tilesets, backgrounds etc.) will no longer occur if the app is not focused. As soon as LDtk is focused, images are updated.
    • Fixed a critical crash when reloading an image which has a different width/height.
    • You are no longer limited to deleting the last IntGrid value.
  • Project colors: when you pick a color, a list of all colors used in this project will be displayed, to make consistent color usage easier.
  • "Identifier" format policy: you can now pick your prefered "Identifier case policy" (default is "1st letter uppercased").

File format changes

Worlds

  • Added worlds array and World JSON structure to the docs. This was added as a preview for the upcoming new feature "Multiple Worlds in a single project". Learn more about that here: #231

JSON changes

  • All new projects will now discard by default the deprecated data of IntGrid layers (ie. the pre-"CSV format" data). More informations here: #358
  • IntGridValues array index should no longer be used to guess IntGrid values, since the array can be manually sorted by users. See #553
  • To avoid unnecessary file changes and renamings (bad for versioning systems), the following changes have been made:
    • Irrelevant worldX/worldY values are now "-1" for all levels if the world layout is Horizontal or Vertical
    • Irrelevant __neighbours array is now empty for all levels if the world layout is Horizontal or Vertical
  • tileId in Entity Definitions has been replaced by tileRect to support multiple tiles instead of just single ones. The tileId will still be exported for now, but will be removed completely soon.
  • levelUid in Neighbours arrays has been replaced by levelIid (new string based IID). The levelUid will still be exported for now, but will be removed completely soon.
  • Merged the autoTilesetDefUid into tilesetDefUid for all Layer Definitions. This should have no impact if you properly used the __tilesetDefUid found in Layer Instances, as recommended in the docs. The autoTilesetDefUid will be dropped completely in a later update.
  • Added __smartColor to Entity instance JSON.
  • Fixed format of value "type" in JSON (now, it's always a String)
  • Fixed unexpected intGridValues in JSON for non-IntGrid layers
  • Fixed nullable Floats fields to now be really null in JSON.

Multi-worlds experimental preview

You can try multi-worlds using debug menu. Please note that this feature is highly experimental and will probably evolve a lot in upcoming updates. Don't use for production.

  • Open an existing project,
  • Open debug menu (CTRL+SHIFT+D),
  • Create a new world,
  • Navigate through worlds using the context menu in empty spaces between levels.
  • Right click on an existing level in World view to move it between worlds.

Other changes

  • External level files will no longer be prefixed with their index in array to avoid unnecessary renamings when inserting new levels. This can be re-enabled in Project panel, using an Advanced Option at the bottom.
  • Fixed enumTags and customTileData typing in QuickTypes files.
  • LDtk logs are now stored in a more legitimate location, depending on your OS. To locate your log file, just open settings (F12 key) and look for the Log File line.

UI

  • Entities can now use rectangle...
Read more

0.9.3

23 Apr 11:51
Compare
Choose a tag to compare

0.9.3 -- Ludum Dare 48 edition

  • Aseprite support: you can now load an Aseprite image directly as a tileset or as a level background. It will be automatically reloaded if it changes on the disk, just like any another image.
  • Level PNG export: it's now possible to export a single flattened PNG per level, making the "Easy to integrate with your game engine"-thing even easier. You can still export one PNG per layer per level if you prefer.
  • Fixed offseted "Close project" button
  • Fixed "textLanguageMode" typo in JSON
  • Minor bug & doc fixes

0.9.2

20 Apr 10:43
Compare
Choose a tag to compare
  • Added a tiny "(...)" above entities with fields when they are hidden
  • Fixed "re-open last project" that could sometime reset app settings
  • Fixed rule editor not updating when changing pivot
  • Fixed incorrect "Perlin noise" preview when right click on the Perlin option in Rules panel.
  • Fixed "shrinking" tileset view when panning it
  • Fixed discarded "levelPaths" array when importing OGMO projects

0.9.1

16 Apr 21:18
Compare
Choose a tag to compare

0.9.1

  • Fixed broken "New project" button. Sorry!
  • Added an option to re-open last project when starting LDtk (open Settings with F12)
  • Hold CTRL to disable preview when moving mouse over auto-layer rules.
  • Fixed missing tooltips in rules panel.
  • Fixed tooltips staying on screen in rules panel.

0.9.0 - Biomes and tags

16 Apr 09:45
Compare
Choose a tag to compare

New features

  • Optional auto-layer rules: this new key feature allows to create "biome" and "variations" by defining group of rules that only apply to specific levels. Please check the new sample "AutoLayers_5_OptionalRules". How it works: simply right click on a group of rules in the Rules panel to mark it as Optional. This group will then be disabled by default everywhere, and you'll be able to manually enable it in some specific levels only.
  • Tile tags: you can now associate an Enum to a Tileset, then "paint" values from this Enum freely on each tiles in the tileset. This could be useful to mark collisions, water tiles, surface sounds or whatever tag you could think of. To use this new feature, just open the Tileset panel, select an existing Enum for a tileset, and start tagging directly.
  • Tile custom data: you can add totally custom text values to each tile in any tileset. This could be plain text, JSON, XML, etc.
  • Auto level naming: you can let LDtk name your level identifiers automatically using a custom pattern, as defined from the Project settings panel. Some examples:
    • default pattern "Level_%idx" will name levels "Level_0", "Level_1" etc, based on their order of creation (or order in array, in Horizontal/Vertical world layouts)
    • with the pattern MyLevel_%gx_%gy, each level will be named using the world grid X/Y coordinates (only applies to GridVania world layouts).
  • Auto-layers tileset switching: in each level and for each layer, you can now switch the tileset on-the-fly.
  • Added "Isolated points" as new display option for points in Entities (thanks to Stuart Adams)
  • Each enum value can now be associated with a custom color for easier reading in the UI.
  • Re-worked the Rules panel to have less buttons and lost space. Some actions where moved to the context menu (eg. renaming a group of rules)
  • Array of Points in Entities can now be displayed as "looping paths".

JSON format

  • WARNING: last call before the removal of the deprecated value intGrid in Layer instances! If not done yet, please switch to the intGridCsv value. The old value will be removed on 0.9.1 update.
  • Added tileset tags: new array enumTags in Tileset definition JSON (see https://ldtk.io/json/)

Other

  • Completely reworked the way the "Auto-layer rules" panel was updated. This should reduce UI flickering and slow-downs while editing rules.
  • Tilesets can now be manually sorted in Tilesets panel
  • Added a new "Optional rules" sample map.
  • Double click on Entities to automatically select all their connected Points.
  • Added a one-time "enable backup" recommendation popup for medium/large projects.
  • Added a "Create level" button in world panel.
  • Added an error message when trying to create a new project in an invalid folder.
  • Added a warning notification when moving an Entity or a Point out of level bounds
  • Added a "close" button on Home screen, when in fullscreen mode
  • Added a popup with various options when project saving goes wrong.
  • Increased max width/height for Entities
  • The keyboard shortcut to toggle auto-layers rendering is now SHIFT-R.
  • Reduced tile flickering while zooming in/out (this reduction can be disabled from the app settings)
  • Adjusted custom fields scaling policy (especially for multi-lines fields).
  • Disabled level dimming while editing an auto-layer Rule.
  • Extended app logging limit (from 500 to 5000 lines)
  • Fixed default "smart" color of entities. It uses the first color value found among fields, in order of appearance, otherwise it defaults to entity main color.
  • Fixed fullscreen not applying at startup on Debian (not tested, hope it'll work!)
  • Fixed entity handles not disappearing when movin a resizable entity out of level bounds
  • Fixed a rare crash when saving a project without providing file extension.
  • Fixed various rare minor errors while saving.
  • Fixed "Create group" button in Auto-layer Rules panel
  • Fixed a crash when adding a single entity point
  • Fixed Enum value renaming in Level fields
  • Fixed Enum value renaming in Entity fields
  • Fixed button color in extern enums list
  • Fixed Save or Update operations going super slow while the app wasn't focused
  • Fixed incorrect values listed in the "out-of-bounds policy" select in pure auto-layers rules
  • Fixed email address on contact links
  • Fixed auto-layers baking giving different results if they contained any stacked tiles.
  • Updated various internal libs

0.8.1

01 Mar 15:38
Compare
Choose a tag to compare

0.8.1

App changes

  • Fullscreen mode: just press F11 to toggle this mode.
  • New entity tile display modes: entity tile can now be displayed in more ways: Repeat (ie. repeat tile to cover entity bounds), Cover (ie. covers the full entity bounds), Fit Inside (stretched to fit inside entity bounds).
  • Removed deprecated "Crop" from Entity tile render modes
  • Added an option in LDtk settings to start the app in fullscreen mode
  • Fixed cursor position while zooming
  • Fixed "close" button in Rules panel
  • Fixed scrollbar in Help panel
  • Updated README

0.8.0

26 Feb 15:42
Compare
Choose a tag to compare

0.8.0 -- Level custom fields, resizable entities and more!

App changes

Note for developers: IntGrid layers JSON format changed in this update. For now, retro-compatibility is maintained with old importers, but this will be dropped after update 0.9.0, breaking outdated importers. Please read all the details here: #358

  • UI rework: many interface elements were reworked and cleaned up (less lines, less gutters). This includes panels, main side-bar, custom fields editor, etc. Also, the world panel is now separated from the "current level" panel, so it's no longer mandatory to go to "world view" to edit your active level settings. I hope you'll enjoy the changes :)
  • Level custom fields: just like Entities, you can now add custom properties to your levels and edit values per-level. For example, add some FilePath field, name it "music", filter allowed files with "mp3 ogg" and you get a custom music picker in each of your levels.
  • Custom fields have been visually re-organized to be easier to read in-editor. Labels and background are now aligned, and various minor display bugs were fixed.
  • Resizable entities: Entities can now be marked as resizable horizontally and/or vertically. This new feature opens the possibility of creating "Region" entities (ie. a custom rectangle or ellipses), with fully customizable properties.
  • Entity tags: tags are labels that can be freely added to any Entity definition. They can be used to group entities in the editor (ie. actors, regions, interactives etc.) and to filter allowed entities per layers (eg. a "Region" layer that can only contain "region" tagged entities).
  • CPU optimizations: the app CPU usage should now be close to 0% while its window is minimized or not focused. Also, a new setting "Smart CPU throttling" (enabled by default, recommended) will also reduce CPU usage while doing "not too demanding" actions in the editor. All these should greatly reduce battery drain on laptops.
  • Ogmo 3 import: you can now import Ogmo 3 projects to LDtk. Most features are supported, but feel free to drop a message on GitHub issues if you have any specific needs :)
  • The UI scaling has been fixed for 4K and 8K displays. You can now adjust the general application scale factor from the app settings (press F12).
  • CodeMirror: editing of "multi-lines" fields in entities (and levels) is now done using an almost fullscreen text editor based on CodeMirror library. This allows syntax highlighting, basic completion and various quality of life features. Supported types include XML, JSON, Markdown, LUA, JS, C# etc. Feel free to ask for more languages on GitHub issues.
  • Debug menu: you can now open a debug menu by pressing Ctrl+Shift+D. It will contain some commands that could be useful if you encountered some specific bug types. Commands inside this debug menu are harmless, so you can use them without any risk (unless some in-app message says the opposite).
  • Tileset can now be changed on-the-fly in each Tile layer.
  • The Windows setup file is now twice bigger. Yeah, I know this isn't an actual feature, nor a great change. But this opens support for both 32 and 64bits environments. Please note that the installed version size hasn't increased, only the Setup executable.
  • Moved buttons to the top of project Panels.
  • Removed all "Delete" buttons in project panels
  • It's now possible to associate icons with external enum values from a Haxe HX file.
  • Added a Preset button to quickly create a "Region" entity.
  • Entities can now be marked as "Hollow", which will allow editor mouse clicks to pass through, except on edges.
  • You can now show/hide multiple layers at once by holding left mouse button over visibility icons (Photoshop style).
  • Use Shift + left click on a visibility icon to Show or hide all other layers except the current one.
  • Added a button to access previous changelogs in "Update" window, on Home screen.
  • An Entity count can now limited per world or per layer. This is especially useful for elements like Player start position, which should be unique in the world.
  • A suggestion to enable Backups will now appear when opening a large project file.
  • The visibility status of a layer is now saved with the project.
  • When baking an Auto-layer (ie. flattening it), you are now given choices on what to do with the original baked auto-layer (delete, empty or keep).
  • Level background is now faded away in "Single layer mode".
  • Smarter auto-naming when duplicating something (ie. a copy of an Entity named "foo50" will now be "foo51", "foo52" etc.)
  • Each Entity field type now has an associated color, making field list easier to read.
  • The default size of a new level can now be customized from the World settings (press W, then open settings).
  • Mouse wheel can now be used to switch to world mode (and vice versa) automatically. A new related option has been to app settings (F12).
  • Fixed zoom speed using mouse wheel.
  • Fixed Point fields in entities where clicking the same coordinate twice added multiple identical points.
  • Fixed Rule "pink" preview being stuck when moving mouse over a level
  • Fixed incorrect default tile when creating a new Enum value.
  • Fixed "New project" dialog opening twice on Home screen
  • Disabled "New level" context menu when holding Shift or Alt
  • Fixed layer order for "simplified" level render in World view
  • Entity fields are now slightly faded out when not currently on an Entity layer
  • Fixed a "pink square" on Entities when reloading a texture modified outside of LDtk
  • Fixed entity instance editor not closing when switching level
  • Fixed a bug when adding new Entity fields, where some existing entity instances were not properly updated in the JSON file.
  • Fixed sorting of arrays in entity fields
  • The default behaviour when limiting an entity count is now to "Move the last one" instead "Discard the oldest one".

0.7.2

27 Jan 09:29
Compare
Choose a tag to compare

0.7.2

App changes

  • Added a setting to change font size in Editor UI.
  • You can now press F12 to open app settings from almost anywhere.
  • Added a button to delete crash recovery files on Home screen
  • Added file naming customization for layers exported as PNG
  • Fixed selection color (when using ALT+SHIFT)
  • More robust JSON parsing with invalid integer numbers
  • Fixed a crash with empty tilesets
  • Fixed a crash loop on Home screen
  • Minor visual fix on splash screen

0.7.1

25 Jan 10:59
Compare
Choose a tag to compare

0.7.1

App changes

  • Fixed a crash when saving separate level files.
  • Fixed a crash with FilePath fields in Tiled export.
  • Fixed removal of empty dirs when saving a project.
  • Added a new "settings" button to LDtk home screen.
  • Fixed useless autoRuleGroups array in JSON
  • Added an option to force the app to always use the best GPU.