Apparatus decompilation

(Avatar)
ROllerozxa
Posted on 2026-01-18 11:25 Link

Yesterday I gave another go at doing a decompilation of Apparatus. My previous attempt was almost five years ago now and didn't go particularly well, but now I feel like I am much more experienced.

After some quick fixing of decompilation quirks I managed to get it to rebuild, and after some more work I managed to get dialogs to work, levels to load and objects to render! There are still some issues remaining however, most glaring issue being some GUI elements not being drawn, but this is already way further than the last attempt.

This will likely be another slow burn type of project but maybe it can generate some interest from others in helping out. First priority would be getting the game fully working again, and then I would like to see if the game's version of libGDX can be updated from the ancient 0.9.9 to something newer. Or maybe that would be too much work (especially considering Apparatus' old GLES 1.1 code). Either way refactoring, bugfixes and any other QoL improvements are also accepted, this should become the ultimate Apparatus experience.

A decompilation usually also means being able to run it on more platforms, and libGDX is able to run on desktop with its LWJGL backend. I managed to just about get that to run in the previous decompilation, but the amount of issues in that decompilation did not really make it usable. This one should be more viable to get Apparatus running natively on desktop, no Android system emulation required.

The decompilation project is available on GitHub here: https://github.com/rollerozxa/apparatus-decomp

(Avatar)
ROllerozxa
Posted on 2026-01-18 20:35 Link

So today I got the game to run on desktop after splitting up the codebase into an Android-specific project and a common project, and then brought in some code from my previous desktop port attempt putting that into a new desktop project, and it works spectacularly, much better than my last attempt. Sandbox works, you can play through challenge levels, and everything.

However one limitation with this desktop version is of course that the dialogs that are implemented as Android native dialogs are unimplemented. To follow Principia's footsteps in choosing the worst GUI toolkit that makes the least amount of sense for a game, I guess these could be reimplemented in Swing. However there are a lot of undocumented keybindings that can be used to e.g. save and load sandbox levels, which I would assume is how the desktop version was used during development.