Luanti 5.12.0 released!

Written by GreenXenith

Release

Introduction

Luanti 5.12.0 is here! Perfectly on schedule, we swear! Anyway, this time Luanti is sporting new input handling and controls, new item and entity visuals, better map performance, and more.

You can download Luanti from our website, check out the code on GitHub, or read the full changelog.

Table of Contents

SDL2 Window and Input Handling

This section covers a plethora of outstanding issues, so don’t skip this one— SDL is a bigger deal than you might think! Until this release, Luanti relied on Irrlicht’s custom window and input interfaces, which (much like a lot of old Irrlicht code) was very outdated and buggy. SDL, on the other hand, has been consistently updated since 1998 and has been battle-tested by thousands of major applications over the years.

Efforts to migrate to SDL2 have been ongoing for a few years now, and 5.12.0 is the first version to finally see those efforts come to fruition. The cross-platform wrappers SDL2 brings have enabled a bunch of cool stuff:

This also brings reliability and stability to the window and input system, fixing many other long-standing bugs. It will also make it easier to upgrade to SDL3, should we choose to in the future.

Control Your Controls

Speaking of input handling, there have been a handful of control improvements.

Keybinds now live in the Settings menu, bringing with it some missing controls and keys (and now benefiting from Lua formspec features). The sneak and aux1 keys are now optionally togglable, saving you from finger strain while running along all those edges.

The new keybinding interface
The new keybinding interface

For our touchscreen users, dig and place buttons can be enabled instead of using gestures.

Touchscreen digging and placing

More Animation, Less Blur, and New Reviews

This time we’ll start with a big one: Animated node textures on the GUI! After all these years, animated node textures are finally displayed in the inventory, hotbar, and hand. Non-node animations coming soon.

Animated nodes in the inventory

Texture filtering is no longer a blurry mess, softening pixels as intended. Gone are the days of screenshots ruined by bilinear and trilinear filtering!

Trilinear filtering before and after (note corners on flowers)
Trilinear filtering before and after (note corners on flowers)

Package pages in the content browser now have a Reviews tab where you can see exactly what other users like (or dislike) about that thing you want to download. Also pictured below is the new default flat button style with the 2000s-style gradient removed.

These reviews carry a lot of weight!
These reviews carry a lot of weight!

Camera Mode, Entity Visuals, and More

Are you making a game with an exclusively 3rd-person camera? Need the player to take a good look at themselves? The new set_camera player method allows developers to set the current camera mode by force! This method will hopefully expand in the future.

The node visual type has been introduced to entities to represent any node (instead of hacking the item visual til it looks right).

initial_properties = {
    visual = "node",
    node = {
        name = "mymod:mynode",
        param2 = 42, -- It supports paramtypes too!
    }
}

Developers can now prevent the Escape key from closing their formspecs using the allow_close[true] element. The form can still be closed with an exit button or with Shift + Esc in emergencies (so don’t rely on your forms being locked open). The try_quit event field has also been introduced to watch for close attempts on locked forms.

As for notable fixes, custom hands now properly override all tool capabilities. glTF models saw various fixes, most importantly local transforms no longer affect meshes.

World and Object Performance

Alongside better world loading and generation performance, world storage has been changed to save block positions as separate integers instead of a hash. This simpler implementation is much easier to work with internally and for external tools. Please note: Worlds created with or migrated to 5.12.0 are not backward-compatible.

Objects have also seen a storage speed upgrade with a new spatial index, as well as better collision detection.

Other Highlights

What’s Next?

5.13.0 will likely be released a month sooner than normal, so expect a smaller update, but you can still track the work being done on animated items, glTF morph animations, skybox layers, and more. Coming soon to a Luanti version near you!

Questions? Ideas? Feel free to get involved!

Cover image by GreenXenith.