Skip to content

Releases: gurkenlabs/litiengine

0.9.0

15 Sep 21:40
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 0.8.0...0.9.0

0.8.0

28 Dec 22:31
Compare
Choose a tag to compare

You might wonder why we've skipped version 0.7.x. This has been due to tests on our automated release pipeline that have created some release versions with 0.6.x and 0.7.x tags. We wanted to make sure that these test versions remain as hidden as possible and thus have decided to continue with 0.8.0.

What's Changed

New Contributors

Full Changelog: 0.6.1...0.8.0

0.6.0 - "Trick or Treat!"

31 Oct 17:10
Compare
Choose a tag to compare

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!

The LITIENGINE library 0.6.0 is ready for consumption already, please stand by while we get the utiLITI packages for windows, mac, and linux ready.

The LITIENGINE library is available through Maven Central:

Gradle (Groovy)
implementation 'de.gurkenlabs:litiengine:0.6.0'
Gradle (Kotlin)
implementation("de.gurkenlabs:litiengine:0.6.0")
Maven
<dependency>
  <groupId>de.gurkenlabs</groupId>
  <artifactId>litiengine</artifactId>
  <version>0.6.0</version>
</dependency>

"Java 17 Migration" Release v0.5.2-beta

06 Jan 17:28
03c8407
Compare
Choose a tag to compare

LITIENGINE v0.5.2-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 CONTRIBUTING.md).

Finally, a huge THANK YOU is in order: To all our tireless 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.

Visit litiengine.com

Download LITIENGINE v0.5.2-beta

Read the full Changelog

LITIENGINE is available through Maven Central:

Gradle (Groovy)
implementation 'de.gurkenlabs:litiengine:0.5.2'
Gradle (Kotlin)
implementation("de.gurkenlabs:litiengine:0.5.2")
Maven
<dependency>
  <groupId>de.gurkenlabs</groupId>
  <artifactId>litiengine</artifactId>
  <version>0.5.2</version>
</dependency>

"No more Netcode" Release v0.5.1-beta

09 Feb 22:08
402bafa
Compare
Choose a tag to compare

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.

Visit litiengine.com

Download LITIENGINE v0.5.1-beta

Read the Changelog

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

16 Aug 23:58
25ebc6e
Compare
Choose a tag to compare

Finally!

As of today, we end the four year-long LITIENGINE alpha, spanning a total of 17 feature-packed releases. Simultaneously, LITIENGINE hits its first beta release v0.5.0-beta, marking a magnificent milestone for us.

What once started as an overly ambitious hobby project of two naive brothers seeking to create their own video game, is now one of the most successful Java 2D game engines on the market - despite being in early access! Our hearts are filled with joy seeing how popular LITIENGINE has become and we want to thank you from the bottom of our heart.

To celebrate the prosperity of LITIENGINE and as a big thank you to our supporters, we have completely remade the LITIENGINE website from scratch. It is now a well-designed, streamlined experience that guides users to the most important points of interest more naturally. With everything designed to be maximally self-contained, we are also no longer hosting the documentation, JavaDocs, and Download page externally: The LITIENGINE website thus has become a purposeful and holistic hub for everything related to our favourite software.

We are convinced that LITIENGINE's user base and relevance will keep growing and there are some thrilling years ahead of us. If you're not already part of the LITIENGINE family, join our lovely community and explore the exciting features of our new website and LITIENGINE's first beta release.

Visit litiengine.com

Download LITIENGINE v0.5.0-beta

Read the Changelog

"Stay-At-Home-And-Code" Release v0.4.20-alpha

29 Mar 09:36
Compare
Choose a tag to compare

Fixes

  • 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(...)
  • ...

Changes

  • 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

utiLITI

  • #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

Misc

  • 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

@Phlosioneer
@Gamebuster19901
@YannikSchoeberl
@hyler

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.

"Docs moar docs, throw more docs!!!" Release v0.4.19-alpha

07 Feb 20:56
Compare
Choose a tag to compare

Fixes

  • bf31e15 Fixed ArgumentNullException that could be thrown if an entity hit event was not related to an Ability.
  • 7c25cb2 Fixed bug that made XmlUtilities.read not work for files within a jar.
  • 69afe69 Don't ignore minimal location updates on entities
  • 680ce0b Fixed issue which caused the Camera hotfix for certain renderscales not to work.
  • ca5cfa2 Fixed null pointer check in TmxMap
  • 59360c4 Fixed issue with the GameWorld.reset overload

Features / Improvements

  • Added and improve the Javadocs of many APIs
  • aeccaa4 Added possibility to remove timed actions.
  • #301 28f1036 Added entity render events for individual entities.
  • adb2bfc Extend the ReflectionUtilities with a few helpful methods
  • 9fde70d Added events for changes on ConfigurationGroups
  • c8ca4b1 Added events for layer rendering on the MapRenderer
  • 70c598a Added onMoved event for IMobileEntity
  • 41679ed Added spawned event for Spawnpoint
  • 87c339d Added updatable count to the GameMetrics
  • a7a7637 Don't modify layer visibility when serializing maps.
  • #297 Re-Added shortcut API for finding tile bounds

Changes

  • 5ddf044 Drop the Game.loop().getUpdateRate() method in favor of Game.loop().getTickRate().
  • 30cd2c1 Improve visibility modifies of the SoundEngine
  • 6d92e25 Rework the default mouse cursor behavior
    • Use the default cursor if no virtual cursor is set and the mouse is not being grabbed by the window.
    • Move the debug cursor handling to the MouseCursor implementation
    • Don't grab the mouse by default.
  • c950d55 Replace some explicitly thrown exceptions by log messages.
  • d715f2f Drop the de.gurkenlabs.litiengine.annotation package.
  • 39f365e Change Entity collections from the Environment to be immutable

Revamp of several event methods and listeners

  • 3747d8c 080afea Streamline rendering events and API
  • 59b4b3d Reworked the ScreenManager events
  • 1c41e83 Reworked the Mouse events
  • 537b5d7 Reworked the Keyboard events
  • 480a259 Reworked the Gamepad and GamepadManager events
  • 111d81d Reworked the Camera events
  • 4204d8a Reworked the Emitter events
  • e438fc8 Reworked the Ability events
  • Marked many listeners as FunctionalInterface

utiLITI

  • 60c0466 Fixed initial error when no game file is loaded.
  • #299 Fixed Reassigning map IDs

Misc

  • Updated SonarQube plugin 2.7 -> 2.8
  • Updated Gradle 5.3.1 -> 6.0.1
    • d4d35a7 Print Gradle warnings in the build log.
  • 7340f5b Prevent duplicated resources in the .jar files.
  • 94b46dc Exclude duplicate files from the jar.

Contributors in this release

@TheRamenChef
@Phlosioneer

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.

"New Decade" Release v0.4.18-alpha

01 Jan 22:00
Compare
Choose a tag to compare

Fixes

  • f3b0e52 Fixed a possible StackOverflowException in ImageFormat.isSupported(...)
  • 479e484 Fixed mapID assignment for Blueprints
  • 52f80e1 Fixed concurrency issues in TmxMap by using thread-safe containers for Tilesets and Layers
  • 9ac68d1 Removed redundant call to Creature.updateAnimationController()
  • 6bed9f1 Replaced RenderingHints.KEY_ANTIALIASING with RenderingHints.KEY_TEXT_ANTIALIASING in the TextRenderer
  • 5aa2313 Fixed Trigger to adopt changing activation conditions while relevant Entities are in the trigger area
  • #266 Fixed the way AnimationRules are added to EntityAnimationController
  • afc1997 c39d441 Fixed some graphics issues in the Camera and Environment
  • 4cfe6ed Fixed Concurrency issue in TileLayers.
  • #264 Fixed wrong tileset locations in exported maps.
  • fa573c9 Fixed possible NullPointerException when a Tileset's image was null
  • 217d41b Fixed UpdateLoop interruption behaviour
  • f152d52 Made sure Entities cannot have negative width or height.
  • #271 Fixed wrong argument in Spritesheet.setSpriteHeight(...)
  • #283 Fixed potential null reference when CustomProperty value is undefined.
  • c53b036 Fixed potential null reference in DecimalFloatAdapter.
  • 4956e23 Fixed potential text outline bug when using certain RenderScales.
  • 65317ef Fixed entity debug rendering being cancelled when current animation frame is null.
  • 64b1de4 Set default font for all ImageComponents containing text, not only the ones with a background spritesheet.
  • #295 Fixed issue with virtual mouse and grabMouse setting.
  • 25f60bf Encoded spaces in file paths.
  • cfbe31d Prevent potential null reference when trying to scale images that are null.
  • #284 Fixed map serialization being distúrbed by handling paths as URL fragments.
  • 1d4ad94 Fixed an issue when combining paths with whitespaces.

Features / Improvements

  • 8996fd4 Throw ResourceLoadExceptions when failing to load resources
  • 9bc1f2b Added renderWithLayer property to @EntityInfo
  • f93a191 Set default RenderType for TileLayer to GROUND
  • 6876143 Set default RenderType for all Layers to GROUND
  • de2c7a0 Added util method to extrude rectangles
  • eba3d49 Added getter EntityAnimationController.getAnimationRules()
  • 816715a Added method overload for EntityAnimationController.addAnimationRule(...)
  • #224 Added Appearance properties for borders
  • dc550f0 Added SpeechBubbleListener
  • 7674c6c Allow setting SpeechBubble text display time
  • 61dbc65 Allow hiding Speechbubble
  • e067ef1 63d4fb2 ca714b7 f6db03d 077b525 Minor overhaul of the Sound Engine
  • 98255f9 Allow an Entity to be removed by an EnvironmentEntityListener it triggers
  • c188504 Replaced some CopyOnWriteArrayList instances with the faster ConcurrentHashMap.newKeySet()
  • #265 Added ImageScaleMode.FIT to strech ImageComponent images with the correct aspect ratio
  • 5abf10a c5391ae Improved generic type handling in EntityAnimationController
  • 9c41b51 Overhauled version checking for TmxMaps
  • 102c48b Added Unit tests
  • a538528 #268 Implemented more performant Collections for keyboard listeners.
  • 3d41a91 Added method overload for ResourcesContainer.getAsync(...)
  • d8236a9 0d55b7a Switched to more specialized function interfaces in some places.
  • bcfc753 Made sure the miscVolume of a SoundPlayback is updated automatically.
  • 511d0b8 Instead of explicitly setting RenderingHints in the TextRenderer, toggle AntiAliasing with a boolean argument.
  • e2675a1 Removed some unnecessary wildcards in EntityAnimationController and AnimationRule.
  • 90737bb Added active flag to exclude IUpdateables from the update mechanism, where desired.
  • 9da3822 Set mouse Cursor to be visible by default.
  • e043ae5 Added multiple collision handling to PhysicsEngine.getIntersection(...)
  • b57df91 Improved logging on the entity action framework.
  • a26a993 Added attribute to CreatureAnimationState to remember its string representation. Cancelled MovementController.handleForces() if no forces are present.
  • bfa6d81 0fc383d 6f3f2dd 95bc61d Changed some SonarQube project settings.
  • c46632a Improved Resolution implementation.
  • d6c976f 7278da5 Switched to CollectionUtilities and ArrayUtilities for random access. Switched to ThreadLocalRandom instead of individual Random objects. Added method overloads to pass random instance as argument.
  • d452fda Enabled null values in CustomProperties declared as enum.
  • 16f0929 Simplified and improved entity debug rendering.
  • eb6924b Added some additional API to allow map generation from code.
  • 24df305 Added util method to get a random point within a circle.
  • 477eddf Added overload to MapUtilities.getTile(...) with map argument.
  • 10a233f Removed redundant call of ByteArrayOutputStream.flush()
  • c0c001e Added util method to replace colors in an image according to a Map with source and target colors.
  • f62e23c Made sure the GamepadManager updates the gamepads once it is initialized.
  • 3128eb0 f124186 Enabled clearing registered event consumers from Input API.
  • 63c9b8d Added reflection util method to retrieve values of static fields.
  • 47c4ddc Added Gamepad.isPressed(...) to check if a button is pressed on a gamepad.
  • c67bf33 Enhanced Gamepad.toString().
  • 8e5ed73 Enabled gamepad polling via component name instead of JInput specific identifier.
  • 4e5a108 Added possibility to parse a given resource file into a string.
  • c4b40a9 Added mouse pressing event.
  • 44a765d Added missing setters for some Ability properties.
  • #290 Implemented borderless display mode. There are now three modes:
    • WINDOWED = Resizable Window with decoration (otherwise it would not be resizable)
    • BORDERLESS = Basically windowed but without decoration and scaled to the entire screen
    • FULLSCREEN = Native Fullscreen; locked to the framerate of the Monitor
  • 564ea96 Stored a string attribute as lower cased so that it doesn't always have to be converted.
  • ac0b11b Made XML format more compatible to the TMX tiled format.
  • 949be86 14175b6 Added overload method to set mouse cursor location with Align and Valign parameters instead of absolute offset values. Set default pivot to TOP LEFT
  • f12df41 Implemented human-like alphanumeric string comparison using the Alphanum algorithm by dave koelle. Switched to alphanum comparison for IMap and Resource names ([map1, map2, map10] instead of [map1, map10, map2]).
  • #259 Made the CreatureAnimationController only display the death animation as the last fallback if no other animation is present.
  • 406adc5 Slightly improved CombatEntity events.
  • 504ccd4 Added append and distinct util methods to ArrayUtilities.
  • d14fa49 Added collision event to CollisionEntity
  • 6310fd2 Improved logging for unsupported tmx version.
  • 5a13edd Improved exceptions when an XML file is not found.
  • 2cab4c6 Reset the logmanager before config to avoid redundant logs.
  • cbd947e...
Read more

"LDJAM 44" Release v0.4.17-alpha

25 Apr 20:18
Compare
Choose a tag to compare

This release comes with a ton of improvements for the utiLITI editor which have been implemented in preparation for LDJAM 44.

Fixes

  • #249 Fixed an issue that caused the terminating callbacks to be executed after the system was already terminated
  • 7ff4062 5e284be 83e7da3 Fixed rendering of StaticShadows
  • 4cba2a4 Fixed an issue with the SpeechBubble implementation

Features / Improvements

  • 91a81fb Improved the delay() of the loop tick by accounting for the delay error that is inevitably caused by the fact that Thread.sleep uses long instead of double values
  • 012b75d Minor version numbers of Tiled map format releases are no longer considered when checking for version support because they are only used for bugfix releases and have no effect on the .tmx format.
  • b1ca5de Implemented possibility to retrieve a layer by name and ID
  • c7af38a Added methods for text and shape rendering with antialiasing

Changes

#243 TMX Overhaul, Part 2

  • All resources except spritesheets are now cached using URLs as keys (they still work with strings)
  • Resources can now be loaded asynchronously
  • Most entities loaded from map objects are now rendered as part of their respective layers
  • Tilesets that use individual images for each tile are now supported
  • Tile types are now supported
  • File custom properties are now supported, though only tentatively
  • Light sources now use an enum for their type
  • Various refinements for several features

Other changes

  • 4fe0e81 Rename collisionboxHeightFactor and collisionboxWidthFactor MapObjectProperties to collisionboxHeight and collisionboxWidth. This might require you to adjust maps created with previous versions of the engine.
  • 4fe0e81 Entities that have a duplicate or invalid ID now get a local map ID
  • 21d2bbc Moved some time related methods from the GameLoop class to the GameTime class (use Game.time()...)
    • 91a81fb Game.loop().getDeltaTime(long tick) has been moved and is now Game.time().since(long tick)
    • 91a81fb Game.loop().execute(...) has been renamed to Game.loop().perform(...) to be consistent with the EntityAction terminology
    • 91a81fb The input loop is no longer a GameLoop and instead "just" a plain UpdateLoop. -> There should only be one GameLoop (that provides enhanced functionality like TimedActions)
  • 4a37838 Renamed the Map class to TmxMap to avoid collisions with java.util.Map
  • d2cb9ba Cleaned up "render entity with layer" feature

utiLITI

Fixes

  • Fixed a potential exception in the asset tree after closing
  • #240 Fixed issue with cached states of imported maps
  • #246 Fixed issue with the cursor that stopped moving when a menu was open
  • #247 Fixed issue that caused the paste command not to be enabled.
  • #253 Fixed custom panel table cell editor issue.
  • 369056e Fixed issue that caused inconsistent move edit mode
  • 4890d15 Fixed an issue that caused the transform controls not to be rendered properly upon undoing a move command.
  • b673262 Fixed broken map snapshot functionality.

a7d981d Improved utiLITI menus

  • #246 Replaced the AWT menu with a Swing menu.
  • Added a close button
  • Added clear history button
  • Disabled menus and entries that are not available
  • Cleared the entity tree upon closing
  • Reorganized some menu items
  • 628c9f6 Add menu that allows moving entities to other layers.
  • ac84517 Added an "edit" menu.
  • 7818047 Added menu item to center the camera on the current focus
  • 7818047 Added shortcuts to all "Add-Entity" commands. (CRTL-1 -CTRL-9)
  • 4890d15 Removed the toolbar
    The buttons on the toolbar are not really required and can be accessed elsewhere in a more convenient way.

Other Changes

  • Some huge internal code refactorings and improvements
  • 4890d15 Reworked the "MOVE" edit-mode which can now be triggered by clicking the mouse button within the bound of a map object instead of having to press CTRL or manually activate it.
  • 628c9f6 Added option to toggle rendering of entity names.
  • b94433a Improved displaying of severe log messages
  • 34582a8 Added possibility to focus the map center with the camera.
  • 628c9f6 The entity's layer is now displayed in the UI
  • 1d9dc34 Implemented "selectAll" and "deselect" commands
  • 4266a76 Implemented possibility to revert all changes on a project
  • f9370bc Update mapobject list when ids are reassigned
  • ad265eb Implemented the possibility to set the RenderType of an entity

Misc

  • The source code of the LITIengine is now citable for academic use via zenodo:

DOI