Woot! My teammates and I at
Rotten Mage have finally launched our action shooter and tower defense hybrid game called
Spacejacked! It's currently available on
Steam for Windows, OS X and Linux.
In Spacejacked, you play as space engineer Dave Paprovsky, who has to defend his ship's multiple rooms all at the same time against an alien attack. Expect fast-paced action with bits of tower defense thrown into the mix.
Some technical stuff
We built Spacejacked with
Haxe, using the
HaxeFlixel 2D game engine, deploying it to Windows and OS X via compilation to Flash then wrapping with Adobe AIR. (Actually, we had an issue with the OS X build on launch day, and had to deploy a native build instead.) The Linux build was a native build using
hxcpp.
Steam integration was done through the
FRESteamWorks Steam API wrapper for AIR. I hacked out a Haxe wrapper around the C++
CSteam class of
FRESteamWorks for the native build. Steam integration was surprisingly easy to do with the help of
FRESteamWorks. The people who worked on it have my gratitude.
We did a lot of tweening in Spacejacked, most of the time using either
TweenX or Flixel's own
FlxTween. I love
TweenX's chainable syntax and feature set, which made tweening extremely simple. Something we should have done, but didn't, would be to make all the tweens run at the same rate (
FlxTween uses a constant time-step per frame, while
TweenX uses real-world time). In fact, we probably should have used only one tweening library, but oh well.
Problems
We started using Haxe in the beginning of 2014.
Flixel was at 3.2.2, and its dependencies were
OpenFL 1.4.0 and
Lime 0.9.7. These library versions are sorely outdated today, but because upgrading these libraries sometimes broke our builds, we decided to stick to the versions above.
Using outdated libraries has caused us some problems, though. For instance, I had to recompile the SDL dependency of
Lime to include
udev support just to enable in-game gamepad connect/disconnect detection. This, in turn, led to recompiling the
Lime NDLLs.
Another problem we encountered was in the native builds, where we were running out of OpenAL audio sources because they weren't getting released fast enough. We wrote some hacks in
Lime to fix this.
We also had to write our own gamepad handler code because Flixel back then didn't have gamepad support in Flash. Thankfully, jdpalmer's ActionScript 3
gamepad library took care of that for us.
Final thoughts
Overall, I enjoyed developing Spacejacked in Haxe, though using some of the libraries in their early stages caused a bit of grief. Things are much better today, and I look forward to developing another project in Haxe. I like that Haxe has a powerful macro system, and would love to harness it more.
I learnt a lot through this project, and did a lot of manual work that could have been avoided just by writing a little more Haxe. Here's hoping that I don't commit the same mistakes in the next project!
Lastly, I would like to express my appreciation of the Haxe and HaxeFlixel communities, as well as the developers of all the libraries we rely on. Many thanks!