top | item 27570556

LDtk: A modern and open-source 2D level editor

296 points| polm23 | 4 years ago |deepnight.itch.io | reply

54 comments

order
[+] Buttons840|4 years ago|reply
I want to talk about Haxe. Haxe is a small niche language. But I almost fell out of my chair when I saw the showcase of games written with Haxe. Quality indie games I have played myself, like Dead Cells, and this level editor is another very polished example. Even things like Pokemon Sword and Shield. What's going on here? I need to learn me some Haxe.

Are all of these using Kha - so called "SDL but super-charged"? Or are there even more great graphics libraries for Haxe?

(Also, I found LDtk on a four month old HN post less than three hours ago, and now it's front page. I'm not the one who submitted it. My connection to the hive mind must be a good one.)

[+] flxy|4 years ago|reply
As far as I can remember, Dead Cells specifically was made using Heaps[1], which the creator of Haxe himself made. Paper's Please uses OpenFL[2] instead. I'd say the Language has quite a few good libraries and frameworks to work with. The Haxe site itself lists a few others too [3] at the very bottom of the page. My advice would be to look at some sample code or documentation and see which one strikes you as either the most interesting or the most practical.

[1] - https://heaps.io/ [2] - https://www.openfl.org/ [3] - https://haxe.org/use-cases/games/

[+] JoeyJoJoJr|4 years ago|reply
There aren’t many games using Kha, but I am using it for my game and think it’s absolutely awesome! I used to use the Flash display list, OpenFl, Heaps, but since learning React I have a developed a complete distain for the Object Oriented approaches for game development. Like the HTML canvas api, Kha allows me to build my own state structure, and then the visuals are just a functional expression of that structure. Combining this approach with Haxe’s extremely powerful Enum and pattern matching capabilities has been such an eye opening experience, and make it difficult for me to go back to just about any other language. Haxe is just so clean and well designed.
[+] hawski|4 years ago|reply
Haxe is one of the very few languages in which a perfect cross-platform widget toolkit could be made. A toolkit that would produce platform-native binaries (no pesky FFI like JNI) using platform specific libraries: targeting Java (maybe even JVM?) for Android, targeting C# for Windows/the-current-Windows-toolkit, targeting Hashlink for Gnome/Gtk, targeting C++ for KDE/Qt, targeting C++ with Objective-C++ for MacOS/Cocoa and iOS/Cocoa Touch. Probably even a web target is viable.

Other language, that it is possible to do with is Scheme, but it is quite a different beast all together.

That's my little dream. I intend to do gobject-introspection bindings one day for it as my first step.

[+] megameter|4 years ago|reply
Haxe is a great piece of technology on its own, and I am often working in it as a default, but I always caution potential users that it is more like a building block than a comprehensive package: if you want to do complex cross-platform things using Haxe, you will still want an full-time engineering team working with you to build out the full solution, since you will probably need to leverage the strengths and tooling of the target environments too. Haxe tries hard to get out of the way and give you the access you need, but builds and debugging always introduce challenges that depend on platform-specific behaviors. The quality of the results is more suggestive of the quality of the average Haxe user than the language itself doing anything magic(though it is a very sensible design).

That said, you can make some great things just sticking within the available frameworks. OpenFL is good, as is Kha. HaxeUI is definitely worth checking out(it can use multiple backends). For editing tools there's still going to be a bias towards working with Electron because of the combined set of I/O features.

[+] 542458|4 years ago|reply
From my limited experience, Haxe seems like a really neat language but good grief the documentation and learning resources are awful. It’s possible that I was going about it wrong, but there was very little by way of “here’s where everything is and how you’re supposed to do things” resources. I feel if that issue was better handled the language would see much more use than it currently does.
[+] koonsolo|4 years ago|reply
Haxe is awesome! I'm using that and Kha for my https://rpgplayground.com

I think most games use Heaps, which is also written by the Haxe developer.

Some other libraries such as OpenFL were ported from ActionScript to Haxe. (Basically Haxe took in a lot of Flash refugees :)).

Definitely recommended technologies!

[+] markus_zhang|4 years ago|reply
Thanks, this looks really cool. I wonder what kind of algorithm and tilesets are needed to achieve what we see in the first two animated gifs on right side.

The second gif seems to be sort of 2D LOD -- once the designer zooms out a different layer is shown instead of the tiles. I think this can be achieved by preparing one set of tileset for detail editing and one for zoomed out views and switch between them.

However I'm not sure how to do things in the first gif. Looks like you have to prepare a few different (but visually close) tiles for one "group" (say grass/dirt/sky/etc.) and when the designer drag the mouse the editor randomly chooses one tile from each group. Still I think it's a lot more complicated than I thought.

I think "Tiled" does a lot of those cool things too, just wondering where we can find tutorials on those algorithms (I don't even know their names)

[+] pkaye|4 years ago|reply
> However I'm not sure how to do things in the first gif. Looks like you have to prepare a few different (but visually close) tiles for one "group" (say grass/dirt/sky/etc.) and when the designer drag the mouse the editor randomly chooses one tile from each group. Still I think it's a lot more complicated than I thought.

The algorithm is called Wang Tiles. I think you identify a set of tiles which have edges compatible with each other by coloring them. Every time you place a tile, it will pick a random tile that meets all edge constraints.

https://en.wikipedia.org/wiki/Wang_tile

[+] kowlo|4 years ago|reply
From the "lead dev and game designer on Dead Cells"! I started off watching the GIFs for LDtk, ended up playing this https://deepnight.itch.io/petit-tracteur-bleu!

EDIT: finished the tractor game, now onto https://deepnight.itch.io/fort-loop which I think uses some early version of the level designer called LEd? There's a tabletop rpg map editor too https://deepnight.itch.io/tabletop-rpg-map-editor

[+] scrame|4 years ago|reply
Thanks for posting these. I saw it was the guy from Dead Cells, but didn't think to look through his other projects. The tractor game is polished enough that I would have kept playing if there were more than one level. The RPG Map Editor reminds me of an ancient project where I was trying to draw and export Dragon Warrior style tile maps in javascript, but about a million times better.

Between this and 0x72: https://0x72.itch.io/ there's really enough nice looking assets and tools to get something nice looking off the ground.

[+] samhain|4 years ago|reply
This is absolutely fantastic work.

I’ve been tinkering with Unity’s hex grid trying to automate some top down level building under this alternate grid system. It has some interesting challenges surrounding height/cliffs and water. Quite a useful tool here, even in a traditional square grid space.

[+] ensiferum|4 years ago|reply
Been also working on a 2D game engine and editor. Still a few features missing but getting there! http://github.com/ensisoft/gamestudio
[+] lattay|4 years ago|reply
That's pretty impressive for a single dev ! Maybe you should try to find amore distinctive name though.
[+] markus_zhang|4 years ago|reply
Hi this is really cool! Looks like you roll your own UI system? That's impressive~~
[+] tomc1985|4 years ago|reply
Cool. Though I wish the installer would let me choose my own path (what's up with software installing into the horribly inaccessible path of %HOME%\AppData\Local\Programs anyway?)
[+] lattay|4 years ago|reply
That's user space install. It’s actually nice when you don't have admin rights
[+] whateveracct|4 years ago|reply
With this and tiled - I really don't understand how you hook them into your game without a bunch of code managing the boundary between level editor and real code.
[+] markus_zhang|4 years ago|reply
I think you just load the generated file into the game. One part I don't know is how to handle entities. Each game has its own entites and maybe even completely different treatment (architecture) of entites. I'm not sure how flexible they are.

I'm building a simple 2d RPG that is a Ultima spin off and a map editor. In my game I could put different components into entities (not ecs but more oldschooled way) and call each component's update(). Since I'm building my own editor, it's a lot easy to integrate all those into it. For example I could even have a dedicated entity tab that designers can enter some values. I wonder how tiled treat this kind of questions. I browsed through the manual and didn't see anything related so I think it's a pure map editor.

[+] detaro|4 years ago|reply
The level editor exports a file. You need to write code that parses that level file into a format your game can use.
[+] davidscolgan|4 years ago|reply
Oh hey it's deepnight - I remember your awesome Ludum Dare games. Thank you for sharing this tool with the gamedev community!
[+] app4soft|4 years ago|reply
> Linux Ubuntu (experimental) 76 MB

> HTML5: LDtk is built around modern web standards.

Why its size is so huge? Is it Electron-based?

Size of Tiled[0] app binaries for each of MacOS/Win/Linux platform is 3 time smaller than LDtk's binaries.

What is "modern" in differnce between LDtk and Tiled?

[0] https://github.com/mapeditor/tiled/releases

[+] CJefferson|4 years ago|reply
Why does it matter? At all? Is anyone really pushed for 76MB?
[+] markus_zhang|4 years ago|reply
Regarding Tiled, I think it is probably the de facto editor for 2D game level editing. I'm trying to look into the first release and learn from the source code, as I'm also using C++ and QT.
[+] Shadonototro|4 years ago|reply
windows release contains both 32 and 64bit versions, it's indeed a waste to ship both in a single file..