Changelog LITIengine v0.4.20-alpha

You can access LITIengine releases via LITIengine’s Github releases page.


  • 0d269f4 Fixed importing map nested tile layers
  • #304 Excluded module-info.class from external lib from the LITIengine jar files
  • 204a153 Fixed bug when loading Resource bundles with Spritesheets missing the image format attribute.
  • 4be7ae1 Fixed issue with sprite sheets not being reloaded when replacing them at runtime
  • 1065757 Fixed image string serialization by returning a compatible image for the current GraphicsEnvironment
  • 019a410 Fixed issue with random point implementation in circles
  • b640d3e Don’t use URLs as keys for resources (this had major performance drawbacks)

Features / Improvements

  • Improved the visibility of APIs that are not intended to be used publically
  • Added test coverage to many utility classes
  • 470b402 Streamlined the ListField constructors.
  • bd6faeb Added explicit listeners for the GamepadManager’s events
  • 368669d Added a dedicated ResolutionChangedListener for the GameWindow
  • b3b5037 Add debug option to render the sprite bounds in addition to the Entity bounds
  • 3cc9187 make shadow offset configurable in the ShadowImageEffect
  • 5af6f4d Allow custom Creature implementations to override the parents controllers
  • #322 Enhanced TextRenderer API
  • a1ea04c Implemented EntitySpawner support for providing spawn points via callback
  • d4207f8 Make use of Spawnpoint.spawn in the EntitySpawner to support events
  • 5d8a575 Added pivot support to Spawnpoint to align spawning entities
  • 8ea0151 Load CustomEmitter resources from ResourceBundles
  • 8113566 Properly support resolution scaling at runtime

Added a unified Random API for the engine

4217403 Previously the extension methods were spread around the utility classes. With these changes, all additions that provide pseudo-random values have been unified and aggregated into one API: Game.random() Some prominent examples of API changes:

  • ArrayUtilities.getRandom(...) -> Game.random().choose(...)
  • CollectionUtilities.random(...) -> Game.random().choose(...)
  • MathUtilities.randomSign() -> Game.random().nextSign()
  • MathUtilities.getRandomIndex(...) -> Game.random().getIndex(...)


  • 56a123e Use java.nio.charset instead of constants strings for charsets
  • eef04d2 Consulted entity AI related namespaces under de.gurkenlabs.litiengine.entities.behavior
  • 9a78dc4 Unified some event names:
    • ICombatEntity.addHitListener -> ICombatEntity.onHit
    • ICombatEntity.addDeathListener -> ICombatEntity.onDeath


  • #314 #315 Added the possibility to export all sprite sheet information
  • #313 Added additional console feedback for common operations
  • #312 Placed status-bar directly under the map view
  • 319c32f Fixed potential exception when clearing color controls
  • 67aa299 Make components and font sizes aware of the configurable UI scale
  • #320 Fixed silent startup exception when last game file was empty
  • 7ca746f Improved the AssetPanelItem visuals


  • Added a ton of Javadoc to the public API
  • Added GitHub sponsoring button to the repository
  • Replaced deprecated Gradle configuration elements
  • 509d749 Updated Gradle wrapper 6.0.1 -> 6.2.2
  • ae8f102 Updated JUnit version 5.4.+ -> 5.6.0
  • ae8f102 Updated Mockito version 2.25.+ -> 3.3.3

Contributors in this release


Also, thanks to all the contributors to the LITIENGINE community in the forum and our discord! All your comments and thoughts help us to shape the engine towards a stable release.