
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:
Improvements:
Bugfixes:
API changes:
Effect.canAttackEntity to canAffectEntity.Removals / Deprecations:
Documentation and Miscellaneous:

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 CONTRIBUTING.md).
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.
#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)
#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:
1bcdf2a Excluded entities that cannot collide with a Trigger from activating it
bfc8d2f Added events for GuiComponent rendering
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
default due to JUnit 5 migrationGridRenderer memory usageJProfiler.)
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:
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.
CreatureAnimationControllersURLAdapter initialization in XmlUtilitiesImageLayer rendering for unbound mapsCollisionEntitiesGuiComponents with text outlinesGuiComponent text with outlinesCombatEntityListeners would not fire hit and death eventsAnimation frame being skippedAnimation in an AnimationController is used as defaultPhysicsEngine is cleared when the game world is clearedSoundSource entities. Added individual falloff ranges for SFXPlaybacksSFXPlaybacksTilesGuiComponentsImageComponentList externallyIEntityControllers to the Game loop when adding / removing.MapObject unmarshalling behaviourAttribute valuesAnimation keyframesGuiComponentsImageComponentsMaterial support for setting values via reflectionAnimationController instance on EntitiesCombatEntitiesTextParticlesGameMetrics java version outputVolumeControl publicInputLoop into the GameLoop. The SoundEngine will now also be updated by the GameLoop.MovementController velocity and angle available publiclyAbility impact areaAnimations from AnimationControllers available as a static methodGuiComponent text anti aliasing out of the AppearanceremoveChangedListener to removeListenerRenderType for all Particle instances.Effect target evaluations protectedAbility effects available publiclyCreatures to be fired implicitlyGridRenderer more robust when no camera is set.EntityList would be focusedGridRenderer performance
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!
PositionLockCameraEntityEmitters to update their position correctly once the corresponding entity moves.GeometricUtilitiesGame.random() API with support for choosing a random stringEnvironment with the possibility to retrieve entities by a specified PredicateSoundEffect with the possibility to provide sounds by nameEntityNavigatorTextRenderer with several new method overloadsTilesetEntry with support for collision infoMobileEntityEnvironments)MapAreaWith 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 
Light Theme utiLITI 
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
