Posted by Daniel Ludwig,
Disclaimer: This is a rather technical blog post, and a testimonial about Excelsior JET.
The Halfway game code is written in Java using libGDX, a Java game development framework. Both the game itself and libGDX utilise a number of additional Java libraries which interface with system-dependent native libraries on Windows, Linux and Mac OS.
Writing a game in Java can be very convenient, as Java is a pretty powerful language, with an ecosystem driven by a very large community. The libGDX community for example is a very active and friendly crowd of game developers.
Publishing a desktop game written in Java is a different beast though. To our knowledge there aren’t that many libGDX games yet which got released on all three major PC operating systems simultaneously. We’ve had a couple of issues related to that. Properly bundling a Java runtime environment and interfacing it with e.g. Steam, while not interfering with the user system which might or might not (or doesn’t want to) have Java installed isn’t as easy as we hoped. It nicely works for most users, but resolving the few arising issues can be pretty time-consuming.
Enter Excelsior JET, a commercial software product by Excelsior LLC. Excelsior JET translates Java byte code into an executable which runs native code on Windows, MacOS and Linux platforms.
Excelsior kindly asked us if we are interested to try out JET and provide feedback, especially about their relatively new OS X version. We went on and created native builds for Windows (32 bit), OS X (64 bit) and Linux (32/64 bit, tested on Ubuntu and Mint).
Using JET to compile a native version has been enjoyably straightforward. Once set up, creating a build is a matter of pointing it to the game code & assets, and have it spit out an archive or installer with a native executable a few minutes later. Shell scripts are provided too which can be used to conveniently automate follow-up builds.
We’ve had to adjust one or two minor issues (read: wrong assumptions done by coder) in the Halfway code. There have been some questions about build configurations which were quickly resolved by the Excelsior documentation and their responsive support team. Besides that, the resulting native build just worked. Out of the box.
In theory, native code might run faster, though Halfway isn’t as computational intensive as other games. We didn’t do a more detailed performance analysis yet, but the native version runs at least as smooth as the Java version on our test systems.
Today we’ve released a public beta branch on Steam which provides a native build of the recent game version, Halfway v1.2.3. With this beta we want to gather feedback on a wide range of user system configurations. If you are interested to give it a try, please head over to the Steam community forum discussion.
Regarding Halfway we are not sure yet if we are going to switch to native builds in future updates. The game is released since a couple of months now, and the system requirements are slightly different to our Java version. We strongly consider use of JET as a valid option for future projects though, where we can integrate native builds much earlier in the development and release process.
The price of $3000 per seat and platform will certainly be a non-trivial issue for indie game developers. Excelsior is offering discounts for micro-businesses and free versions for non-commercial use.