• Register

LITIengine Logo

LITIengine is the ultimate 2D free java game engine. Written in plain Java 8 it provides all the infrastructure to create a 2D tile based java game, be it a platformer or a top-down adventure.

Find out more on litiengine.com.

  • View media
  • View media
  • View media
  • View media
  • View media
  • View media
Post article RSS Articles

Changelog for v0.4.9-alpha


  • Fixed issue with the SoundPlayback not being properly closed
  • Fixed the hover sound event of a GuiComponent to not be hooked up every time the component is prepared
  • The ScreenManager is now updating the size when the render component gets resized
  • The PropAnimationController now properly passes in the keyframe durations for a prop
  • Fixed a possible null reference exception in the TextParticle

Features / Improvements

  • Implemented methods that allow getting strongly typed custom properties from ICustomPropertyProvider
    • Provide methods to directly get enum and color values from ICustomPropertyProvider
  • Extended and improved IEnvironment interface
    • Implemented an event for when an entity gets removed from the environment
    • Extended the IEnvironment with methods to easily access props.
    • Entities with RenderType.NONE are now also contained by the environment
    • Extended the environment with getters for emitters.
  • #47 Implemented support for external .tsx tilesets.
  • Provided a default toString for entities
  • Extended IMap to allow retrieving a map object by id.
  • Added a size() method to the ImageCache.
  • The SoundSource implementation is now using a cached thread pool to handle the sound playbacks instead of spawning a new thread for every single sound playback
  • Improved performance of MouseEvent handling: The ScreenManager now saves its location on screen because evaluating this every time is actually fairly resource consuming
  • Improved performance of rendering Particles: No need to create new Point2D instances
  • Extended the mouse to provide direct access to the current tile.
  • Implemented an ImageFormat enum and made the engine independent of .png
  • Extended the ImageCache with a clearAll method.
  • #45 Implemented the possibility to block lights with a collision box.
  • Extended the CustomPropertyProvider to allow specifying default values for retrieving string properties
  • #61 Implemented possibility to rotate and flip prop spritesheetName
  • #49 Replace GameLoop that was used for supporting controller hot-plug by a thread
  • #40 Implemented support to register message actions on an Entity
  • #43 Unified update loop implementations
  • #46 Extended Trigger implementation by an internal cooldown.
  • Introduced a new graphics option to control whether the frames should be reduced when the game window has lost focus
  • Extended the Resources implementation to support args for MessageFormat
  • Extracted static shadow logic from the environment
  • Improved the general process of creating and loading a game project
  • #44 Implemented callbacks for SoundPlayback
  • Implemented the possibility to cancel/pause and resume the SoundPlayback
  • Improved the disposing of the SoundEngine


  • Refactored the SoundSource implementation to implement Runnable itself instead of having the PlayRunnable implementation
  • The sprites.info SpriteSheet file is no longer the default way to manage sprite resources
  • #33 Refactored MapArea and StaticShadow to inherit from Entity
  • Renamed MapObjectType.LANE to MapObjectType.PATH because this is a more general term for it
  • #55 Removed support for MapObjectType.CUSTOM and replace it by MapObjectType.AREA
  • Major overhaul on the resource management : It is no longer necessary to have a sprites.info file; It is still possible though to import sprites from such a file.
    Spritesheets can now just be imported to the editor and will be serialized in the game file. The spritesheet files are no longer kept in the game file. You need to re-import the file in case, you've been using it
  • MapObjectLoaders now provide a collection of entities instead of just one IEntity object.
  • #54 Moved RenderEngine.getImage to Resources.getImage
  • #18 Removed unnecessary noise from configuration file
  • Cleaned up static shadow implementation
    • It is now possible to set the offset for a static shadow
    • It is now possible to set the color for static shadows on the map
  • Unified MapObjectProperty naming and clean up unused constants
  • Reused JAXB class contexts because they're performance crucial
  • Removed unused and meanwhile deprecated GameDirectories.
  • Removed the concept of IVision from the engine because the implementation is very specific for certain types of games (like rts/moba).
    • Replaced the logic on the RenderEngine by the possibility to provide a render clip for the rendering process
  • Cleaned up IRenderEngine interface
    • All methods that depend on the current camera (render the respective object relative to the viewport) are now provided directly on the IRenderEngine interface instead of being static methods on the RenderEngine class.This way, it is easier to determine which methods take the camera into account internally and which don't.


  • Updated the editor project to gradle
  • Added split panels to allow individual positioning of panels
    • All splitter positions are now saved in the configuration file
  • The editor now only synchronizes maps that were actually modified
  • Replaced System.out calls by logger calls
  • Implemented an entity tree
  • Implemented an entity search box that allows to search by id/name
  • Extended the editor by a console.
  • Extended the editor with a view that displays the assets of a project
  • Extended the editor with a dialog that allows to edit emitters
  • Extended the editor with a dialog to edit a SpriteSheet
  • Reorganized the namespaces of the utiliti editor.
  • Improved the editor by providing a parent component for all modal dialogs
  • Updated editor icons by new modern icons.
  • Added popup menu to the render canvas.
  • #65 Implemented general possibility to select multiple mapobjects
    • Allow multi-selection of MapObjects for positioning / deleting
    • Extended the UndoManager to support reverting/restoring operations with multiple MapObjects
    • Implemented possibility to move multiple objects via drag & drop
    • Implemented possibility to delete multiple objects
    • #70 Implement the possibility to copy/cut & paste multiple objects
  • Implemented the possibility to define and add Blueprints that consist of multiple MapObjects
  • Added marching ants for the focused MapObject
  • Improved usability of transform cursors and updated cursor images
  • Fixed an issue with the default rendering scale
  • Fixed performance for the tile grid (Drawing dashed lines just has a very poor performance in java)
  • Fixed an issue with mouse/keyboard controls being set up every time when the environment was loaded
  • Fixed an issue with the editor closing when using escape on the confirm dialog
  • Fixed an issue with the UndoManager not restoring deleted elements properly.
  • Fixed an issue with the enabled state of the paste command


  • #36 Added the utiLITI editor to the repository
  • #79 Migrated to JUnit 5.1.+
  • Updated steamworks version to 1.7.0
  • Provided a ton more unit tests (mostly for the environment)
  • Add the utiLITI editor to sonarqube
Add game Games


Real Time Strategy

GoIn -Behave or GET LOST! - the 2D bouncer simulator.

Naughty Elves

Naughty Elves


Naughty Elves is a Christmas themed 2D pixelart puzzle game. Your goal is to help Santa Claus to get back the presents from the naughty elves who want...

Naughty Gnomes

Naughty Gnomes


Naughty Gnomes is a 2D Puzzle game. Your nose has been stolen by damn gnomes and they brought it to their small living places. Since you are a large and...

Post a comment
Sign in or join with:

Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.