Tuesday, 17 November 2015

OK, Lets get Fat Owl With A Jetpack finished...

Fat Owl With A Jetpack, development continues...

Over two years ago I posted this blog about the new game I was working on. It was supposed to be a 'quick game' but it hasn't proved to be. What's the delay? Hard to say exactly. Since then we've ported Topia to Android, Windows, Mac and Linux. I spent a lot of time making the UI system work with all sorts of controller. Fat Owl With A Jetpack is also based on this tech.

The new UI is pretty neat, it uses distance fields for the edges of UI elements and fonts, this means that it looks good at any resolution. Caring about resolution at all is a thing of the past! The entire thing can be rescaled to compensate for different physical screen sizes, which of course do still matter. The UI is also navigable from joypad, mouse and keyboard as well as touch. I'm very proud of it but now have to get it into some games. The first of these will be Fat Owl With A Jetpack.

Too old to learn?

I've found myself rewriting the code several times. I'm not entirely sure why because it was pretty clean to start with. I've recently been adding C++11 features, partly just so I can learn them in case I ever need a new job and find myself claiming to be a C++ programmer. Learning C++11 features proved a little difficult at first because a lot of the new features are based around a closer integration of STL. I'd never really used STL because, having my roots an assembler coding, I never trusted it to be fast enough. That's not to say I hadn't made my own similar templated container classes* or even used bits of what was effectively STL wrapped up and renamed by other control freak coders. I just hadn't touched it for the six years or so I'd been working for myself. It turns out STL is like a lot of things in coding, much easier to just dive in and start using it than to waste too much time trying to read dry documentation. Anyway, switching to STL is already making the editor much easier to maintain and extend without any impact on performance. Lambdas and enum class make certain things much easier and neater than before. Learning new stuff always makes coding more exciting for a while, I should do it more often.

In game editor

I've always been a fan of games with built in editors. In fact I've worked on a few** which either had built in editors or editing was part of the game itself. 

If I was a better bullshitter I would claim that we did it on all of those games because I believe passionately in optimising the edit/play cycle but there is another good reason. Building the editor into the game is usually a little less work. OK, it's not as little work as using the editor that comes with Unity or Unreal but the one in Fat Owl With A Jetpack is only a few hundred lines of code*** and it runs on everything the game runs on including phones. All of the current test levels were created on an iPad mini. Now that the game is running on Mac and Windows level design will probably move to there as the new UI system makes it incredibly easy to add keyboard shortcuts. 

What next?

Fat Owl With A Jetpack has already taken over a year longer than I planned it to. The game is pretty playable, everyone I've handed a device to has been able to play it and seems to love the two button control system. The game currently has about 25 unfinished levels spread across several unfinished game modes (race, endless, puzzle...). It's time to get it onto Testflight and into the hands of more people.

Anyway, not much more to say in this blog. I'm not even going to promise to write more of the bloody things again though I think it'd be good if I could. Maybe I will...

* If this means nothing to you, don't worry about it, code talk stops at the end of the paragraph.
**  Populous, Dungeon Keeper, Ground Effect, Topia and the Stunt Car Racer remake that we were making at Lost Toys.
*** Now featuring exciting new C++11 features and STL!
**** Thanks to Alex (@BulkPaint) for pointing out that using footnotes in a blog helps to eliminate at least a few of the countless diversions in parenthesis I'd otherwise use (****), am I doing it wrong though?


  1. Rvalue references, move semantics, threads, atomics, smart pointers, constexpr, non static initialisers, auto, what's not to like? Stick with it:-)

  2. Rvalue references, move semantics, threads, atomics, smart pointers, constexpr, non static initialisers, auto, what's not to like? Stick with it:-)