docsReading time: 14 minutes

LITIENGINE Release notes

0.6.0 - "Trick or Treat!"

LITIENGINE 0.6.0 banner

Surprise! After a quiet period of not releasing a new engine version since January 2022, we proudly present LITIENGINE 0.6.0. This is a release packed mostly with invisible infrastructure changes and refactorings, but also enhanced documentation, tests, and important bugfixes.

There had been some crucial problems in our build and deploy toolchain, which prevented us from releasing new versions for quite a while, but these problems have been resolved and now we are even releasing nightly snapshot builds for you to test out the latest changes!

You may have noticed the versioning of LITIENGINE has changed too. Instead of e.g. v0.5.2-beta, we are now using plain semantic versions for stable releases (starting with this release 0.6.0) and a modified git describe variant (e.g. 0.5.2-166-gb2e597fe-SNAPSHOT/) for snapshot versions.

Since the last release, we have updated to a more recent Java version several times, and recently we have finally moved to the new LTS version Java 21. That means you can now use all the new cutting-edge Java features in your LITIENGINE games!

Of course, we want to thank all our contributors, sponsors, users, and community members for keeping LITIENGINE alive even when we maintainers get lazy. You are the heart of this project!

Here's a quick overview of the changes in this release:

Build Infrastructure:

  • Updated project to Java 21
  • Restored releasability through GitHub actions
  • Introduced nightly snapshot builds
  • Switched versioning to Semantic Versions (assisted bySemVerGuru Gradle plugin.)
  • Cleaned up Gradle dependency management and updateddependencies
  • Rename master branch to main.
  • Restored SonarQube analysis
  • Cleaned up and refactored Gradle project structure


  • Implemented multi-target ForceEffects.
  • Implemented StateEvents to register actions when a State isentered/exited.
  • Implemented 9-sliced image scaling.
  • Added 9-slice scaling option for ImageComponent backgrounds.
  • Added shortcut methods to determine a GuiComponent's centerpoint.
  • Added color interpolation helper.
  • Turned AntiAliasing on for rendering object boxes in utiLITI
  • Added image scaling overloads for bilinear and bicubicinterpolation.
  • Separated emitter saving in utiLITI from blueprint definition.


  • Fixed EntityEmitter location jittering.
  • Fixed Particle opacity calculation.
  • Fixed SoundPlaybacks. (contributed by @Gamebuster19901)
  • Fixed Ability impact area calculation.
  • Fixed particle spritesheet assignment dropdown in utiLITI.
  • Fixed an issue with sticky forces
  • Fixed a bug that prevented the utiLITI asset panel fromrefreshing.
  • Fixed threading issues in GameTests by introducingGameTestSuite (contributed by @Gamebuster19901)
  • Fixed duplicate attribute modification in GuiComponentlocation setters. (contributed by @ecchilds)

API changes:

  • Renamed Effect.canAttackEntity to canAffectEntity.

Removals / Deprecations:

  • Removed CompressionUtilities (and tests). There were vulnerabilities in our implementation and the utilities have never actually been used. End users will have a much better experience using libraries such as zip4j.

Documentation and Miscellaneous:

  • Updated license.
  • Updated contribution guide.
  • Added star history to readme.
  • Removed individual developers' funding links.
  • Added .cff citation file.
  • Improved JavaDocs
  • Added more projects to LITIENGINE showcase

v0.5.2-beta - "Java 17 Migration"

LITIENGINE v0.5.1-beta featureimage

Just in time for making your new year's resolution of creating amazing games with LITIENGINE, we proudly present our latest update, packed with 250 commits over the last ten months!

Let's talk about the elephant in the room: LITIENGINE is now fully running on Java 17! In the future, we plan to keep the library updated to the latest stable jdk versions for you to utilize all the juicy new features Java has to offer.

To make building ingame UI more pleasant, the Slider, TextFieldComponent, and SpeechBubble components have seen massive updates.

Bugfixes and UX improvements for utiLITI will ensure a more smooth experience when handling the editor.

Apart from that, a lot has changed in our build and deployment pipeline and the repository is now utilizing GitHub actions instead of Travis CI. This goes along with a completely revised directory structure and proper separation of submodules. The way we bundle native libraries has been adapted and the dependency on steamworks4j has been removed. Please also take note of our changed contribution guidelines: it is now required to comply with the Java code style conventions we provide in the repository (see

Finally, a huge THANK YOU is in order: To all our new code contributors, to the community involved in discussing issues, to everyone providing help in our forum and on Discord, and lastly: Thank you to our new Sponsors RajBet, Trust My Paper, CasinoHex Canada, and ej-technologies (in chronological order of sponsorships)!

What are you waiting for? Start the new year the right way: making games with LITIENGINE.

✅ Fixes

  • #373 Fixed ArrayIndexOutOfBoundsException (contributed by @Gamebuster19901)

  • #378 Fixed deadlock in StatusBar (contributed by @Gamebuster19901)

  • #394 Fixed endless recursion for ResourcesContainer::getAsync(String) (contributed by @EagleoutIce)

  • 847c523, 5fffe4f Prevented two NullPointerExceptions in SoundSources

  • 87085d7 Crucially improved robustness and usability of slider GuiComponents

  • 1f27427 Removed final modifiers from serializable Tmx properties in Triggers

  • 01da7e0 Ensured animation caching

  • 7beda04 Fixed Polygon particle rounding errors.

  • #441 Fixed wrong type of EntityController being removed with clearControllers() (contributed by @Gamebuster19901)

    ⭐ Features/Improvements

  • #376, #377, #381, #382, #383, #385, #386, #388, #389, #390, #396, #397, #398, #403 Vastly improved test coverage (contributed by @DanielH4, @nwessman, @jluech, @ddreimane, @niels89)

  • c42dc23 Added gamepad mapping for DualShock4 controller

  • 8469c67 Guess type of connected gamepads from the most probable variants.

  • d6449ee, 0cac85a Add TweenType OPACITY and implement opacity Tweening on GuiComponents.

  • d930a8b Added EntityNavigator overload for using an uninitialized PathFinder.

  • 7047c83 Disable collision just before firing death events.

  • f4fa77b Added support for setting int and double array fields via ReflectionUtilities

  • 5e126bf, 5227848, 350c137, 4a24304 TextFieldComponent improvements:

    • Made blinking cursor configurable
    • Enabled automatic line breaks
    • Ensured input termination on mouse clicks outside an active text field
  • 1bcdf2a Excluded entities that cannot collide with a Trigger from activating it

  • bfc8d2f Added events for GuiComponent rendering

  • 0ee92fa, 634ba28, bd81b76 Performance optimizations

  • 09bccf3 Made VAlign xml names consistent with enum names

  • b3c47f9 Ensured that event registrations are passed through to the current gamepad

  • 2e055a2 Set default color for particles on initialization

  • 64ea5c8 Reimplemented SpeechBubble as a GuiComponent for more configurabiLITI

🔀 Changes

  • Migrated project to Java 17
  • Migrated deployment pipeline from Travis to GitHub actions
  • Updated Gradle Wrapper from 6.8 -> 7.2
  • Established Java code style conventions and enforced them via spotless Gradle plugin.
  • Introduced workflow to build nightly snapshots
  • bc869ef Defined Google Java code style as a convention for the repository
  • #413, #423, #424 Major refactorings to build scripts, project layout, and Sonar scan configuration(contributed by @weisJ)
  • c9d2e4e Reduced unit test visibility to default due to JUnit 5 migration
  • df8cf8b Replaced Gradle Natives plugin with a manual approach
  • c31fffd Retrieve gamepads by ID instead of index
  • 6ce69b5 Removed steamworks4j as a required library
  • ae42e12 Included native libraries in the litiengine jar

🔧 utiLITI Editor

  • #409 UI updates. (contributed by @weisJ)
  • 49a299e Changed visibility of GuiComponent.getCurrentAppearance() to public. Made text align, antialiasing, and shadows available as GuiProperties.
  • b802ae7, #420 Resource panel improvements. (contributed by @jdeblander)
  • 52d100c Fixed creature sprite names in CreaturePanel
  • f052c5d Fixed issue that prevented utiLITI from shutting down properly
  • #387, #391, #395, #399 Enhanced crash handling and added debug functionality. (contributed by @Gamebuster19901)
  • 73d9fa1 Added some basic sanity checks around editing emitters
  • a1571c1 Improved GridRenderer memory usage
  • 21e56de Increased available heap space
  • d299c54 Set year in the help menu dynamically
  • 61aa52c Set panel focus globally to prevent unnecessary UI updates
  • a9be599 Fixed a potential NullReference
  • ad969f4 Ensured that the game resource file is saved right after creating a new project
  • be0132e Ensured that only affected nodes in the entity list get updated when entities change
  • 1e7b4ff Skipped unnecessary UI updates and data binding
  • f3ce2ca Prevented UndoManager from updating the same object multiple times
  • 8306abd Prevented entity list from completely rebuilding upon entity deletion

👩‍💻 New Contributors 👨‍💻

💵 New Sponsors

v0.5.1-beta - "No more Netcode"

LITIENGINE v0.5.1-beta featureimage

This release brings tons of bugfixes and quality-of-life improvements. Feature-wise, the highlight of this version is the addition of a Tweening framework that lets you interpolate values over time, e.g. to let your GuiComponents bounce or your Entities wiggle. As the engine's networking code had been an unmaintained, untested, and even unsafe mess, we have decided to remove the networking package entirely.

Our Discord server has seen some upgrades and we gladly welcome our first community moderator, Conifer! In order to give back some of your love, we have introduced some special roles for our forum and the Discord server:

  • @Supporter : Members that have supported us with donations.
  • @Contributor : Members that have contributed to our open source code repositories
  • @Early Bird : Members that have been part of our community since the Alpha days of LITIENGINE.

We try to assign these roles to the best of our knowledge, but if we forgot you - please don't hesitate to complain. 🙂

Apart from that, we've updated the sponsoring tiers in the LITIENGINE Open Collective, allowing you to support our work financially and with full transparency. We have also started a spreadshirt shop where you can buy all kinds of LITIENGINE related swag and promote the cause (feel free to suggest additional motives)!

As always, huge thanks to all contributors and fans! This is an exciting journey for us and we are grateful to share it with you.

✅ Fixes

  • 5bce248 Fixed unsupported Javadoc tags
  • ab5529a Fixed keyframe durations for automatically flipped animations in CreatureAnimationControllers
  • 1ca3997 Fixed flickering particle opacity when fading
  • 9a5c829 Fixed ImageComponent image scaling
  • 0d4cbec Fixed URLAdapter initialization in XmlUtilities
  • 71aa62d Fixed ImageLayer rendering for unbound maps
  • eddb149 Added a collision box update right after unmarshalling CollisionEntities
  • #355 Fixed diagonal Entity movement speed
  • f2bfbbb Fixed Text alignment for GuiComponents with text outlines
  • #365 Fixed threading issue with Swing tests
  • 10673e2 Fixed vertical alignment for GuiComponent text with outlines
  • 63fb8cf Fixed issue where CombatEntityListeners would not fire hit and death events
  • #367 Improved precision of rotation angle calculations
  • 21a7171 Fixed the first Animation frame being skipped
  • 4512029 Ensured that the first Animation in an AnimationController is used as default
  • a29e62d Ensured that the PhysicsEngine is cleared when the game world is cleared
  • 94acb5b Fixed threading issue when drawing maps
  • 07eec17 Fixed a long-standing shape rendering issue (#275)

⭐ Features/Improvements

  • 1296cfa Enabled single-value ParticleParameter initialization
  • 2840217 Implemented SoundSource entities. Added individual falloff ranges for SFXPlaybacks
  • 973d78a Added individual volume modifiers for SFXPlaybacks
  • ec49e60 Added CopyConstructor for Tiles
  • #352 Added Tweening framework
  • 3e604fc Enabled automatic font resizing when resizing GuiComponents
  • 9a5c829 Enabled setting rowHeight and columnWidth in ImageComponentList externally
  • c6fb37b Enabled automatically attaching / detaching IEntityControllers to the Game loop when adding / removing.
  • 57d0394 Added reflection helper method to recursively retrieve methods.
  • 2a0e41d Added possibility to extend MapObject unmarshalling behaviour
  • b721dc9 Check inheritance by default when retrieving fields via reflection
  • c9076fd Enabled getting gamepads by index
  • 75a3ff0 Added method overload for modifying Attribute values
  • 5e0fe1d 2e042e7 Added event listeners for Animation keyframes
  • #357 Added Tests for Attribute, RangeAttribute and AttributeModifier
  • fc42199 Added optional automatic line breaks to GuiComponents
  • 0f39631 Added Image scaling and alignment defaults to ImageComponents
  • bf8087f Added shortcuts to distinguish left/right mouse click events
  • 2afebd4 Added Material support for setting values via reflection
  • a319301 Cache AnimationController instance on Entities
  • 63fb8cf Added resurrection listener for CombatEntities
  • 853eefd Added time attribute to hit events
  • 38d9238 Added fading and anti aliasing for TextParticles
  • bad4b34 Extended environment API to get entities by tag.
  • 10298b0 Unified game shutdowns
  • 7df8c11 Improved GameMetrics java version output

🔀 Changes

  • 9775b9c Set Trigger collision box size implicitly
  • 1ca3997 Removed distinction between particle color alpha and opacity
  • 3b88928 Made VolumeControl public
  • cdaa903 and others: Enforce capitalization of the LITIENGINE brand.
  • c9076fd Renamed gamepad index to id to better reflect its purpose
  • #355 Merged the InputLoop into the GameLoop. The SoundEngine will now also be updated by the GameLoop.
  • 7a5a553 5a5b666 a36cce6 Made MovementController velocity and angle available publicly
  • 0da9f5a fde640a Centered Ability impact area
  • 649ceea Made retrieving flipped Animations from AnimationControllers available as a static method
  • 179f192 Pulled GuiComponent text anti aliasing out of the Appearance
  • c68821f f4a2233 Changed tag serialization behaviour
  • 63fb8cf Renamed instances of removeChangedListener to removeListener
  • 366ed6b Don't set custom RenderType for all Particle instances.
  • 33d588b Made Effect target evaluations protected
  • c7c1deb Made Ability effects available publicly
  • #368 Removed the networking package
  • c8288e5 Set moved events on Creatures to be fired implicitly

🔧 utiLITI Editor

  • 6ba6af3 269a495 Bumped Darklaf version
  • #362 Added "clear" and "scroll to bottom" buttons to console view
  • 66b4051 Fixed Mouse Wheel scrolling bug
  • b6c5e58 Bumped JUnit version
  • 912ecd2 Improved map id rendering
  • a87fee9 Removed redundant lighting updates when setting control values
  • 4e909ac Changed MapObject refresh behaviour for undoing / redoing operations
  • cf79b6e c9146ed Adjusted threading behaviour for arrow key presses
  • 10298b0 Made GridRenderer more robust when no camera is set.
  • 54b8163 Improved tag visualizations
  • 09d7a0e Fixed issue where the wrong Tree nodes in EntityList would be focused
  • d3dfd67 Improved GridRenderer performance
  • 0905394 Ensured that the grid cache is cleared when deleting and importing maps
  • 49708b4 Improved focus renderer
  • 34b183f Ensured there is enough space for all components in the spritesheet import panel

💬 Misc

  • The LITIENGINE Open Collective now lets you support our work financially. A warm welcome to our first sponsors!
  • 193bde3 Updated readme banner to be visible in both light and dark GitHub themes.
  • 37ca653 Arrived in the year 2021
  • 1d6a691 Bumped Gradle wrapper version
  • ddc1caf (and others): Removed redundant modifiers from interfaces
  • 0af1561 Added Java version to bug report template

v0.5.0-beta - "Farewell, Alpha!"

LITIENGINE v0.5.0-beta featureimage

This release marks the beginning of a new era for the LITIENGINE. We consider most of the API to be stable and we pretty much settled on the current API design. With the release of our new Website, the documentation and other information about the engine are easier to use and everything can be found in one place.

It's been a long journey but, finally, we're leaving the Alpha status and are looking forward to even more fruitful experiences with the LITIENGINE in the future. A big thank you to all members of this community. Without your feedback and contributions we wouldn't be here today. You're awesome!

✅ Fixes

  • 00178dd Fixed NullPointerException when rendering Shapes
  • 00178dd Fixed vertical position when rendering Text with Alignment.
  • 2c55195 Fixed NullPointerException when setting opacity on an image.
  • 7c46a6f Fixed issue with collision dimension <= 0
  • 0deffc4 Zoom changed event is now fired after changing the zoom
  • eb1ca1e Fixed issue with "stuttering" PositionLockCamera
  • afe8639 Fixed EntityEmitters to update their position correctly once the corresponding entity moves.

⭐ Features/Improvements

  • 3455fa6 Make TileData constructor visibility being non public.
  • 1c9642a Allow comma separated parameters for random methods.
  • #139 Add API that supports generating maps from code
  • #332 Improved GeometricUtilities
  • 14eb43c Extended Game.random() API with support for choosing a random string
  • 8d3f564 Extended Environment with the possibility to retrieve entities by a specified Predicate
  • e756f53 Extended SoundEffect with the possibility to provide sounds by name
  • 6da1d94 Trigger entity moved event from the EntityNavigator
  • c09c1ca Extended the TextRenderer with several new method overloads
  • 714dd6e Extended TilesetEntry with support for collision info

🔀 Changes

  • 7909f05 Adjusted the handling of the anim controller affine transform
  • 30093d7 Renamed events to suit the naming conventions
  • #336 Fixed inconsistent Entity Hierarchy by removing MobileEntity
  • bfa2d98 Make the local ID sequence unique globally (over all Environments)

🔧 utiLITI Editor

  • 06b8d0e Improved scrollbar granularity
  • 24cd048 Added Spawnpoint pivot fields to the editor
  • 3af2988 Fixed potential exception when removing custom properties
  • #312 Added a Zoom Combobox
  • a5436f3 Fixed capitalization on many UI strings
  • b20fbdd Added support for custom properties for MapArea
  • 18a7735 Clear map list when opening another game project
  • 160e563 Added right-click shortcut menu to the map list
Added Dark Theme and overhauled Light Theme #340

With this version, we've introduced theming support for the utiLITI editor with the DarkLaf library. The theme can be switch at runtime

Dark Theme utiLITI utiLITI: Dark Theme

Light Theme utiLITI utiLITI: Light Theme

Revamped the Emitter UI (make it actually usable)

With this version, we revamped the Emitter UI in the utiLITI editor such that changes to the emitter are instantly applied. The different parameters have been categorized and the overall usability has been drastically improved. In addition, we've also added the possibility to configure particle rotation for even more vivid visual effects.

See the related implementations on GitHub: #346 #298 #345

Example: Emitter Panel overhaul

💬 Misc

  • Added PR templates
  • Added issue templates

nightm4re94Last updated 8 months ago
On this page