ldtk

Modern, lightweight and efficient 2D level editor

MIT License

Downloads
6
Stars
3.4K
Committers
25
ldtk - 1.1.0

Published by deepnight over 2 years ago

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
ldtk - 1.0.0 - Gone gold!

Published by deepnight over 2 years ago

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: https://github.com/deepnight/ldtk/issues/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: https://github.com/deepnight/ldtk/issues/358
  • IntGridValues array index should no longer be used to guess IntGrid values, since the array can be manually sorted by users. See https://github.com/deepnight/ldtk/issues/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 of tiles for their representation instead of just single tiles.
  • Added support for 9-slice scaling mode for Entity tiles (how it works: https://en.wikipedia.org/wiki/9-slice_scaling).
  • New dialog to configure auto-layer Rules modulo, with support for X/Y offsets.
  • You can now use up/down arrow keys to quickly increment/decrement an input value
  • You can now freely adjust fill/outline/tile opacities of Entities.
  • Current Level properties can now be edited directly from world view.
  • Entity and Level custom fields that are not using default value are now much more visible in forms.
  • Added a new optional "guide" grid per layer. This customizable grid is not used for snapping, and only serves as a visual guide.
  • Better display of entities that have error(s) in their field values.
  • Grid lines in levels are now truly 1 screen pixel thick.
  • Added a new option (CTRL-H) to hide everything except Tiles in layers (entities, labels, intGrids etc.)
  • Added an "App Settings" button to the main panel in editor
  • Added a "*" near level names if they were modified but not saved.
  • Added an error message when exporting to Tiled while having unsupported Aseprite images.
  • Added PAGEUP/PAGEDOWN keyboard shortcuts to zoom in/out
  • Added a unit selector (pixels/cells) near coordinates/size fields of entity instances
  • Tiles that overflow outisde of a level are now properly visually cropped.
  • Hold SPACE + Right mouse click to zoom in/out
  • Better support of trackpad pinch gestures to zoom in/out
  • Added a "Rename project" button in Project panel
  • Added Youtube video tutorials to the Help panel
  • Added "Release notes" button in Help panel
  • Added a "click trap" to prevent miss-clicks while the app is not focused. Previously, if you clicked on the LDtk window to re-focus it, you would edit some layer or click a UI element accidentally.
  • Changed T shortcut to SHIFT-T for "Tile stacking"
  • Changed E shortcut to SHIFT-E for "Select empty spaces"
  • Reworked the Enum panel and fixed many UX issues
  • Removed the "CPU throttling" option from the app settings. The CPU throttling has been reworked and should not longer be noticeable at all. Therefore, it is now always enabled to reduce battery usage on laptops and energy consumption in general.
  • Removed the "Tile Flickering Fix" option from the app settings: it was costly and inefficient.
  • Replaced the dashed lines used to connect points by a smoother zig-zag line
  • Entity fields and related visuals will now be faded away when not working in their layer.
  • Entity fields width will now be limited by their entity width (this greatly reduces screen clutter when having many fields displayed)
  • Custom fields of type Integer or Float can now have an optional text prefix/suffix to display in editor. Useful to display a unit near a value, like "0.5sec" or "$17".
  • Added more values for App UI scaling setting.
  • Added a Layer option to fade it away when it's not currently selected
  • Added a Layer option to hide it from the layers list
  • Moving mouse over UI components no longer interrupt view panning (Middle mouse click or Space+click)
  • The "collapsed/expanded" status of a group of auto-layer rules is no longer saved in the project file: all rule groups will now be collapsed by default when loading a project.
  • You can now manually reload any image asset (tileset, background etc.) using their "↻" button.
  • Tool tips are now larger and easier to read.
  • Mouse-overing entire rule blocks in the panel will no longer preview affected cells in the level. Now, to preview affected cells, you have to move your mouse over either the group name, or the "pattern" block.
  • You can now manually edit X,Y coords and width,height values of an existing Entity.
  • If you open a Backup copy of a project, all panels will be locked, preventing any edit. You may only Restore the backup.
  • Level identifiers are now displayed in the top-left corner of levels in World view
  • Better Level identifiers rendering in World view (they should now be easier to read in general)
  • Clicking on the "New Tileset" button immediately invokes the "Pick image file" dialog.
  • Creating a new Rule group will now immediately offer to rename it.
  • Changed the "Help" button color in the main editor bar.
  • Changed the aspect of various help-related elements.
  • Zooming out a lot now has a subtle dimming effect.
  • Added scrollbars to dialogs that are larger than app window (this could happen for example when using excessively big App UI scaling settings)
  • Reorganized the debug menu (CTRL-SHIFT-D)

Bug fixes & misc

  • Fixed a crash that could happen during reloading of an image, if it was being used by another app.
  • Fixed "Locate file" buttons opening Windows explorer in the background
  • Fixed tile picker centering animation when picking a tile from a level (using ALT-click)
  • Fixed unnecessary re-rendering of all project layers when enabling/disabling optional group of layers
  • Fixed "Smart CPU throttling" slowing down long operations (eg. saving a large project, or updating many auto-layer rules) while the app isn't focused.
  • Fixed "hollow" entity selection which was kind of... erratic.
  • Fixed entity "resizing handles" not updating properly when duplicating/moving an Entity
  • Fixed the progress bar when saving large projects
  • Fixed TAB key behavior when an Entity instance panel is open
  • Fixed weird behaviors when clicking on overlapped levels.
  • Fixed a crash when clicking on a partial tile in the Tilesets panel
  • Fixed a crash when deleting the last level
  • Fixed a crash when moving an Entity with a null "point" field value
  • Fixed a rare crash when loading Aseprite files
  • Fixed a crash related to Regular Expressions in String fields (thanks to Clement Duranti)
  • Fixed a bug when reloading a tileset while its width changed.
  • Fixed layers list not being properly updated when leaving world mode.
  • Fixed a crash when using a field containing an array of null enums.
  • Fixed various Quicktype generation issues.
  • Fixed opacity of layers when exporting PNGs
  • Added "Type" value for entities in Tiled exported files
  • Updated sample maps
  • Fixed project assets path resolution when starting LDtk from command line and providing just the project file name as an argument (eg. /path/to/app/LDtk myProject.ldtk)
  • Many minor bug fixes.
ldtk - 0.9.3

Published by deepnight over 3 years ago

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
ldtk - 0.9.2

Published by deepnight over 3 years ago

  • 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
ldtk - 0.9.1

Published by deepnight over 3 years ago

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.
ldtk - 0.9.0 - Biomes and tags

Published by deepnight over 3 years ago

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
ldtk - 0.8.1

Published by deepnight over 3 years ago

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
ldtk - 0.8.0

Published by deepnight over 3 years ago

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: https://github.com/deepnight/ldtk/issues/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".
ldtk - 0.7.2

Published by deepnight over 3 years ago

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
ldtk - 0.7.1

Published by deepnight almost 4 years ago

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.
ldtk - 0.7.0

Published by deepnight almost 4 years ago

0.7.0 -- Getting serious

App changes

This update features many important changes to make LDtk production ready and future proof. These changes will allow better support for large projects, better API creation and maintenance, and smoother user adoption.

We are getting really close to 1.0!

Changes

  • New home layout: the app home screen has been re-organized to focus on what's really important.

  • Separate level files: when enabled, LDtk will save separately the project JSON and one file per level. A much needed feature to reduce JSON size and optimize parsing times! The option is in Project settings (press F1): "Separate level files".

    When enabled, all the project settings and definitions will still be stored in the *.ldtk file, and all level data will now be saved to separate files (one per level) in a sub-folder, in *.ldtkl files (notice the extra l letter at the end of the extension).

    Important notes: this new feature might not be supported in all current existing APIs and loaders. Also, this option isn't enabled by default, but this might change on 1.0.

  • Save layers as PNG: if you really don't want to bother with the LDtk JSON, you can check this new option in your project settings to export all your layers as PNG images (note: only supported layers will be exported, that is those with tiles).

  • Backups: automatically keep extra copies of your project in a sub-folder every time you save (enable backups in your project settings). Important: LDtk only keeps up to 10 backup files per project.

  • Crash backups: if, for some reasons, LDtk crashes, it will try to backup your unsaved work automatically. Obviously, this works even if the backup setting isn't enabled.

  • Level background image: each level can now have a custom background image (PNG, GIF or JPEG) that can be resized and aligned in various ways.

  • New font: replaced the often hard-to-read pixel font with a sleeker "Roboto" font (this change affects entity fields and floating level informations).

  • New APIs: LDtk JSON files can now be easily parsed in many languages, including C#, Python, Rust, C++, Javascript, using QuickType.io generator. These parsers are based on latest JSON schema file (see below) and are super easy to keep updated. You can check existing APIs on the LDtk website.

  • JSON Schema: a schema file is now directly generated from source code (ie. a JSON that describes the LDtk project file format). It's available on LDtk.io/json and contains a schema following Draft 7 standard from Json-schema.org. This file describes all fields from LDtk json files (value types and descriptions). The great thing about JSON schema is that it allows JSON "parser" generation using QuickType. That's right: you can now generate Rust, C#, JS or Python parsers easily, right from the file format.

  • HaxeFlixel support: the HaxeFlixel game framework has been added to the official LDtk Haxe API. You can now easily load and display a LDtk project in your game.

  • Moving your mouse cursor over a Rule group in an auto-layer will now reveal all layer cells affected by the rules in this group.

  • If the auto-layer rule panel is open, moving your mouse over the level will now also highlight rules affecting the current coordinate.

  • The JSON documentation now shows clearly what parts are useful for game devs and what parts aren't (trying to make your dev life even easier!).

  • The app home now shows a list of recently opened folders along with recently opened project files.

  • Optimized the rule pattern editor to update less UI stuff when being edited.

  • Tiled TMX files are now exported in a sub folder (along with other optional external files, like levels or layer PNGs)

  • Better organized world panel (shortcut W)

  • Better level name display in Linear world layouts.

  • Fixed reloading of tileset images.

  • Fixed Electron related security policy.

  • Fixed "Lost external enum file" dialog when loading a project.

  • Many UI tweaks

  • Bug fixes

ldtk - 0.6.2

Published by deepnight almost 4 years ago

0.6.2

App changes

  • Added an optional Regular Expression that can be tested against a String field in an Entity. Any unmatched character in a string value will just be discarded. This allows the creation of custom field type (that needs to follow some specific pattern), while still having a safety net (the editor cleans up invalid parts).
  • Fixed missing "world grid size" inputs in Grid Vania layouts. They should now appear in the World panel.
  • Fixed level creation in "Linear" world layouts that only contain 1 level
  • Fixed loading of null multiline fields
  • Fixed a crash on layer removal
  • Added "internal" (ie. "only for editor use") indicator for undocumented fields in Json
  • Fixed Json doc typo
  • Fixed Travis unit tests
  • Fixed new level creation in "Linear" layouts that only contained 1 level
  • Minor changes & fixes on Home and Support pages
ldtk - 0.6.1

Published by deepnight almost 4 years ago

0.6.1

App changes

  • New website URL: LDtk.io
  • New Json schema URL: LDtk.io/json
  • Updated in-app URLs
  • Fixed a crash when editing Entity points and switching layer
  • Fixed a crash in Tiled TMX exporter caused by tilesets without image
  • Fixed macOS build (didn't start properly).
  • Fixed long auto-update error message on Linux and macOS versions.
  • Fixed entities being destroyed when dragged near level limits
  • Fixed samples folder location on macOS
  • Updated buttons on app home page
  • Minor update to app logo
ldtk - 0.6.0

Published by deepnight almost 4 years ago

0.6.0 -- Take over the world!

App changes

💬 Discord

We now have an official Discord! Come join us, we have cookies 🤗 Feel free to share the invite URL: https://deepnight.net/go/ldtk-discord

🌍 World map

Levels in your project can now be organized in various ways:

  • freely on a vast 2D map,
  • in a large grid system (aka "grid-vania"),
  • horizontally,
  • vertically.

Just hit the W or F2 key to switch to world view, and start re-arranging your creations as you wish! While in world mode, you can right click to reveal a context menu.

📑 Other changes

  • New splash screen: to reduce screen flickering and dirty window flashes on startup, a new splash screen was added, among other minor changes. The app window should now feel a little more "stable".
  • Smooth zooming/panning: automatic zooming and panning (eg. when pressing F key) are now animated and smoother.
  • New rule editor window: this UI component really needed some love, so it now features a more streamlined interface and a much better integrated help.
  • User settings are now stored in AppData OS folder to prevent from losing them on each future update. Unfortunately, this will only apply starting from this version, so settings will be reset one last time :) Sorry!
  • End of beta: LDtk is no longer considered Beta as it's now stable & mature enough to be used in production.
  • "File path" field: this new field type allow you to refer to an external file directly from an Entity instance (many thanks to Yanrishatum!)
  • Many under-the-hood optimizations to support the new World map feature.
  • Removed the "double" Fit mode when pressing F. Now pressing this key just fits the whole level in the viewport.
  • Unified R & Shift-R shortcuts: just press R to toggle all auto-layers rendering.
  • Fixed loading of files with spaces in name, when using file association on Windows
  • Better "invalid value" error display in entity fields (previously, you only had <error>).
  • Application samples will now display a warning if you try to save them (not recommended as they will be overwritten by future app updates).
  • Better Entity panel layout
  • Better default entity Field naming when creating a new one
  • Fixed a bug in Entity panel that went crazy when containing too many entities.
  • Sample maps are no longer added to "recent projects" list
  • Updated the Enum panel icon.
  • Better display of samples in recent files list on app Home.
  • Added a "Close" button to Project panel
  • Removed "Loaded" useless notification
  • You can now right-click external URL links in LDtk to copy them.
  • Fixed middle clicks on URL links.
  • Fixed many many issues with rules that didn't update properly after some specific changes (eg. perlin, checker mode, modulos etc.)
  • Added a "locate project" button to Project panel
  • Fixed an infinite loop when resizing a level
  • Fixed a bug with files stored in a path containing some special characters (eg. ~ or %)
  • Updated the LDtk website
  • Updated all sample maps
ldtk - 0.5.2-beta

Published by deepnight almost 4 years ago

0.5.2-beta

App changes

  • Fixed a crash when loading a project with a "lost" tileset image (ie. path not found).
  • Fixed crash window that looped forever
  • Better crash report window
ldtk - 0.5.1-beta

Published by deepnight almost 4 years ago

0.5.1-beta

App changes

  • Added "top-down" sample map
  • Fixed "File not found" message at startup
  • Fixed a potential crash at startup
  • Fixed auto-reloading of modified tileset images
  • Minor bug fixes
  • Updated external libs used by LDtk (Electron, NodeJS etc.)
ldtk - 0.5.0-beta

Published by deepnight almost 4 years ago

0.5.0-beta -- LDtk: it's about tile!

App changes

Level Designer Toolkit (LDtk) is now the new app name :) I hope you'll like it! The logo was updated, as well as source code, GitHub repo and various other things.

Because of the renaming, users of the Haxe API will have to run the following commands:

haxelib remove led-haxe-api
haxelib install ldtk-haxe-api

You might also need to manually uninstall any previous installation of LEd.

  • Tiles flipping: in Tile Layers, you can mirror tiles before painting them by pressing X or Y (or Z). This also works from group of tiles.
  • Tiles stacking: you can now optionaly stack multiple tiles in a single cell of a Tile layer, reducing the need for multiple layers. For example, you could paint a brick wall, then enable stack mode (T), and add details like cracks or vines over the same wall. Be careful though: erasing of stacked elements can be tricky, so you should use a mix of multiple layers and stacking to get the best results.
  • New editing options bar: Grid locking, Single layer mode and Empty space selection moved to a new more streamlined button bar.
  • File association: project files now use the extension *.ldtk instead of *.json. Therefore, on Windows, double-clicking such files will open the app accordingly. If you prefer the .json extension, you can force it in each project settings (but will lose benefit of the file association).
  • Auto-layer rule preview: when you move your mouse over a rule, you will now see which cells in the current layer are affected, making their testing MUCH easier.
  • Tiled (TMX) export: this optional export now generates proper standard tile layers. However, to support LDtk stacked tiles feature (see above), multiple Tiled layers might be generated per single LDtk layer. Also, IntGrid layers are now properly exported to Tiled (as standard tile layers, with an auto-generated tileset image).
  • New color picker: it supports copy/paste, manual hex value editing and a much better UI (thanks to simple-color-picker).
  • Flood-fill fixes: if you hold SHIFT while clicking in a Tile layer, it will flood-fill the area using currently selected tiles (randomly, or by stamping group of tiles, depending on the current mode).
  • Flood-fill erasing: just use SHIFT+Right click to erase a whole contiguous area.
  • The layer Rule editor now overlaps left panel and allows level editing while being open (makes rule testing much easier). Press Escape to close it.
  • In Tile layers, you can press L to load a saved tileset selection (using S key)
  • Renamed the Level panel to World (for the 0.6.x future update).
  • It's now possible to change the tileset or even the source layer of an Auto-Layer without loosing your rules.
  • Auto-layer baking: turn a complex Auto-Layer into a standard Tile layer (think of it as the flatten feature in Photoshop). Be careful, it's a one-way operation.
  • Unified "Show/hide grid" and "Grid locking" options. You can now just press G to toggle grid (which also implies "grid locking" in supported layer types).
  • All options (such as "Grid on/off", or "Compact panel mode") are now saved to a JSON file in your app folder, in userSettings/.
  • Help window is now a side panel.
  • Opaque tiles are detected in tilesets for use in various optimizations (mostly related to the new tile stacking feature).
  • Fixed a crash when deleting IntGrid layer while an AutoLayer uses it as source.
  • Added some colors to UI buttons
  • New exit button icon.

Json format changes

  • The pixel coordinates of AutoLayer tiles no longer include the layer pxOffsetX/Y values. They should be added manually on display.
  • In auto-layers, all tiles that are hidden (ie. behind an opaque tile) are discarded from the autoLayerTiles array.
ldtk - 0.4.1-beta

Published by deepnight about 4 years ago

0.4.1-beta

App changes

  • Fixed a jQuery related crash
  • Smarter extern Enum file update (ie. silent if changes don't break anything).
  • Better logging in case of crash
  • Open/save dialogs are now modal to the application
  • Fixed distorted left panel in new projects
ldtk - 0.4.0-beta

Published by deepnight about 4 years ago

0.4.0-beta

App changes

  • Experimental Ubuntu and MacOS versions (thanks to the community!)

  • Selections: you can now select any element in a level by using ALT + left click. You can move it around by holding left click. To select a rectangle area, use ALT + SHIFT + left click.

  • Duplicate: you can duplicate any element in the level by drag it with CTRL+ALT keys.

    NOTE: For now, "undoing" a selection move or duplication will require multiple undos (one per affected layer). Undo/Redo features need a major rework, but this will only happen in a future update (see #151). Sorry for the inconvenience until this update!

  • Duplicate definitions: you can duplicate any Definition (layers, enums, entities etc.) by using the new context menu (right click or use "3-dots" buttons) in all panels.

  • Duplicate rules or rule groups: another much needed addition.

  • Multi-lines texts added to Entity custom field types.

  • Type conversions: Entity fields can now be converted to different types (like turning an Integer value to a Float, or into an Array). Some conversions might not be lossless.

  • Renamed the old Enhance active layer option to Single layer mode

  • Alt+left click now picks elements in all layers. If you have the Single layer mode activated (A key), it will pick in current layer only.

  • Added an option to allow selection of empty spaces

  • Better mouse coordinates display in editor footer

  • Added rectangle selection size to editor footer

  • Use DELETE key to delete selected elements

  • Use CTRL+A shortcut to select everything (limited to current layer in Single Layer Mode).

  • Optimized the JSON format to reduce its size (should be approximately 40-50% smaller).

  • Added the up-to-date JSON format doc to the app Home page.

  • Added fullscreen button to view Home changelogs

  • Pressing ENTER on the Home screen now opens last edited map.

  • Side bar is now more compact

  • Better "Enum sync" window

  • Fixed "Enum value in use" detection

  • Removed duplicate sample map file

  • Fixed mouse wheel zoom limits

  • Fixed "color" field size in Entity instance editor when the value wasn't default.

  • Updated help window

  • Pressing Escape key now leaves focused inputs first instead of closing panels.

  • Many bug fixes & minor enhancements

Json format changes

The JSON format was optimized to reduce its size (should be approximately 40-50% smaller). See changes below, or check the JSON_DOC.md.

Auto-layer tiles

  • Removed layerInstance.autoTiles
  • Added layerInstance.autoLayerTiles which is a more compact version of the tiles data generated by Auto-layer rules. It contains the following fields:
    • px: [x,y]: an array of 2 values representing the level [x,y] pixel coordinates of the tile.
    • src: [x,y]: an array of 2 values representing the tileset [x,y] pixel coordinates of the tile.
    • f: a 2-bits integer to represent the mirror transformations of the tile: Bit 0 = X flip, Bit 1 = Y flip
    • d: this field contains internal data used by the Editor.

Entity instances

  • Removed entityInstance.x/y
  • Removed entityInstance.__cx/__cy
  • Added entityInstance.px: an array of 2 values representing [x,y] pixel coordinates of the entity.
  • Added entityInstance.__grid: an array of 2 values representing [cx,cy] grid-based coordinates of the entity.

Tile layers

  • The format of tile-layer tiles was unified with auto-layer tiles.
  • layerInstance.gridTiles is now an array of:
    • px: [x,y]: an array of 2 values representing the level [x,y] pixel coordinates of the tile.
    • src: [x,y]: an array of 2 values representing the tileset [x,y] pixel coordinates of the tile.
    • f: a 2-bits integer to represent the mirror transformations of the tile: Bit 0 = X flip, Bit 1 = Y flip
    • d: this field contains internal data used by the Editor.
ldtk - 0.3.2-beta

Published by deepnight about 4 years ago

0.3.2-beta

App changes

  • Fixed a crash when resizing level with an Entity having a null Point value
  • Added button icons in Help window
Package Rankings
Top 17.19% on Npmjs.org
Badges
Extracted from project README
GitHub Repo stars GitHub All Releases GitHub Workflow Status GitHub Workflow Status
Related Projects