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?

Thursday, 10 July 2014

Topia for Android and future updates

Topia for Android and future updates

      A few weeks ago Topia was quietly released on Android. The conversion was handled by madmunki who aren't just another porting company, they're the guys behind the wonderfully weird Spunland and also, people I worked with in various places back before I 'went indie'.

     We didn't make a big deal of the launch because, as a lot of people have pointed out, Topia isn't really much more of a game than it was when we released the iOS version in late 2012. 

Why isn't there more of a game in Topia already?

        Ever since I wrote the graphic engine and landscape system of Populous over 25 years ago, I'd always wanted to create a smooth, more organic version. I started on this with the Powermonger engine but the Amiga and ST just couldn't draw enough polygons to make it work and dynamic modification wasn't part of the design anyway. The idea did surface in a few places later. Magic Carpet had a dynamic landscape (though only  indirectly through spells and weapons) which also showed up in Gene Wars. When Populous 3 (released as Populous The Beginning) started development it seemed like the idea suddenly made sense but by then none of us who had worked on the previous Populous games were directly involved and were unable to steer the project in a more 'Populousy' direction. Direct control of the landscape wasn't part of the game. Sorry to all of those who think of Populous the Beginning when they hear the word Populous but some of us consider it more of a weird RTS than a true sequel (OK, I know it was released as a prequel but you get my point). I did like the way it faked a spherical world though...

    So, basically, in 2010 I was talking to Josh from Crescent Moon and he had an idea for a god game that seemed like the perfect fit for the landscape system I'd been itching to try for over two decades. I set about doing what I'd done many times before. Creating a landscape system and the means to render it. The cool thing about Topia was that when I finally got round to making that organic sculpting system, the iPad was the perfect platform. The tactile controls make the landscape moulding feel even better than it does on a mouse.

   There was a big problem though. I was doing what I'd done many times before: Creating the underlying world management, the control system and rendering. This is basically exactly what I had done for Populous, Powermonger, Populous II, Magic Carpet, Dungeon Keeper etc. The big difference was that with all of those games there were other talented programmers involved who went on to turn my groundwork into an actual game, or handled the hundreds of more mundane programming tasks. With Topia, I had none of that and, to be brutally honest, I just didn't have the time or money to finish it so we were forced to release it with just the tutorials and 'sandbox' mode.

Now, things are changing. Topia will be getting more gameplay, more creatures, more landscape modification effects. The exact details haven't been completely decided but more information will be coming soon.
The next version may well feature shoals of these guys...

Running on a Linux Laptop (long story...)

Tuesday, 25 February 2014

If games are still "the new rock and roll", Is Flappy Bird Punk?

Flappy Bird has been everywhere for weeks, not just everywhere where developers talk and gamers abuse each other online but normal people have read about it in the papers or seen an item on the news.

The reality is of course that Flappy Bird is just a game stripped down to the absolute basics, something that i'm going to, in this totally boat-missing blog, try to equate to Punk, specifically to God Save The Queen by the Sex Pistols.

Some gamers got angry about it, they'd been playing overblown, epic prog-rock AAA bullshit for too long to appreciate the simplicity. Refusing to even acknowledge it as a game.

Other more casual gamers, fans of being spoon-fed evil, Simon Cowell style, manufactured, free to play pop shite were similarly unimpressed and even intimidated by the inaccessibility of this new phenomenon.

Even old people have an opinion, they'd heard on mainstream news that it had 'been banned' and pulled from the app store. OK, I'll admit, this isn't quite the equivalent of saying "fuck" on a live news show or getting banned while number one on the silver jubilee but no analogy is perfect.

Kids of course, genuinely love it. I thought the first few I spoke to were just being ironic and of course they were. Sort of. But that doesn't mean they weren't playing it, into it both as a game AND just because it was cooler to be into than Abba or Genesis. 

Now that Flappy Bird is unavailable, Dong Nguyen's other games sit there on the app store like a couple of bad tracks off Never Mind The Bollocks, he doesn't have an Anarchy In The UK equivalent (the only place where my analogy falls down) but i'm looking forward to playing his 'Pretty Vacant'.

Meanwhile hundreds, if not thousands of developers have been inspired to pick up whatever instrument they are prepared to spend five minutes learning (Unity has to be the guitar in this analogy, maybe Photoshop is the drums...) and are making games for themselves.

This has of course pissed off some older game developers who can 'read music' (write low level code, am I stretching this analogy to breaking point yet?) and are now moaning to whoever will listen about how it's all too easy these days.

One thing that those new developers need to realise though is that back in the late '70s, those people inspired to pick up a guitar for the first time by God Save The Queen didn't just form Pistols covers bands.

Of course, I'm being a bit of a wanker to suggest it would mean that. If you look beyond the Flappy Birds clones in the charts to the Flappy Jam entries it is clearly inspiring far more than just clones. The fact that most of them are as unplayable as a 1979 John Peel show was unlistenable only backs up my original, totally non-spurious point.

I'm more interested in seeing where it goes next. In my mind Punk was actually less important than the music it has influenced since.

Tuesday, 10 December 2013

Fat Owl With A Jetpack enemy AI

After a lot of time spent designing, implementing and rewriting Fat Owl's entity system I have the editor working and was able to get this simple enemy together in about 20 minutes. He is basically a clone of the player's owl but with about eight lines of 'AI' code deciding when to press his thrusters to get to you. It seems unlikely that his AI will mutate into self awareness and eventually become Skynet but a swarm of these will be a fun challenge. Even now with no attack logic they are a lot of fun to dance with.

The graphics are very obviously placeholders but the automatic shadows are doing their job. The owl graphic is getting pretty old now and is the only thing in the game with a shadow made in Photoshop.

Friday, 23 August 2013

The magical story of Fat Owl With A JetPack

Fat Owl With A Jetpack is the game i've always wanted to make, It's the story of Ollie the owl who got so fat he couldn't fly until professor squirrel invented a special magical jetpack.

Sorry, I can't keep this up. I've been 'advised' that I should try to talk about my next game in fun, non-techie terms but I just can't do it...

 Fat Owl With A Jetpack is a game, or at least will be soon. What it isn't is a fucking story. As i've moaned about at length before games aren't stories.

The real story is that Fat Owl With A Jetpack is based on an idea I had a few minutes after playing the Palm Pilot version of SFCave back in the late '90s. I was impressed with how much fun a single button game could be. Obviously developers have taken this idea and run with it. Many of the best action games on iOS are played with a single button.

But being the point missing twat that I am, my instant reaction to the fact that you could get so much gameplay from a single button was to imagine what could be done with two:

One controlling vertical and one horizontal. No, that wouldn't work... SFCave only worked because gravity works against the thruster, I couldn't have horizontal gravity could I?... No, of course not but what if the thrusters were at 45 degrees?, press one to move left, the other to move right, both to move up and let go to drop down. Yes, that'd work, I could make a super simple lunar lander type game that worked on two digital buttons...

But why would anyone want to play something like that? People were getting excited about a new wave of consoles with controllers bristling with multiple analog pads and triggers. The time for neat two button control ideas had long gone and was, I thought, extremely unlikely to ever come back.

I was also playing a lot of Elastomania (the game that inspired a million Trials Bike games) and the idea that rolling round the walls should be part of it struck me. The Lunar Lander/Thrust/Gravitar convention of your ship exploding as soon as a wing tip touches a wall isn't actually a law is it? At this point the spaceship stopped making sense. It would need to roll while it's thrusters remained locked at 45 degrees. I started seeing it as some sort of abstract ball thing. The idea was getting messy and went on the back burner for a very long time.

So late one night last spring, in a slightly, erm, meditative mood, I was thinking:

I really want to do that two button lunar lander thing next as visualising it in my head for over a decade might be starting to drive me mad.

But can I really do it next? Sure, it seems like it might be a nice feeling physics based game mechanic but how would a game where you played some sort of abstract ball thing bouncing off the walls be able to compete with the cute characters on the app store?

Depressed, I pulled out my phone and started absent-mindedly playing Tiny Wings for the eighth time that day, "If only there was some way of turning a nice abstract physics mechanic into a cute game by simply sticking a cute character in it" I thought as I played before going to sleep...

The next morning I woke up and for some completely inexplicable reason, i'd come up with the answer in a dream. Fat Owl With A Jetpack was born.

Monday, 29 April 2013

Importing worlds into Topia

OK, I admit it, this post is a little hacked together. There is a message carved into the preset world 'creator's message' that points at this page as being the source of info for importing worlds and I haven't actually managed to write it yet...

I'll edit this with pictures and examples but for now I'm just going to dump the info needed, hope it helps...

A valid import file is a 1024x1024 uncompressed .tga file. 8, 24, and 32 bit variants all work.
The file must be called heightmap.tga.

As of V1.3, you can now drag these files into Topia via iTunes file sharing, just drag the file into Topia. You can still use software like iFunBox or iExplorer to get the file onto your device, simply drag heightmap.tga into Topia's documents folder.

Run the game and now, while editing your world, an 'import' button will appear in the Edit menu.

In 8 bit monochrome mode the colour of the greyscale image corresponds to the height above sea level, in a colour image the red channel is the height above sea level.

The simple 'import' button reads the file in. Everything will be above sea level but can be adjusted to be more interesting in the Scale/Offset/Smooth tools.

The 'Import & Make Seabed' does more and is designed to work with some heightmap files I found while experimenting. In this mode anything with a height of 0 is the sea. Rather than have a world with oceans that are only puddle-deep this mode generates an 'interesting' seabed automatically. 

With colour files the green channel is a 'grassiness' map, the blue is a 'potential grassiness' map, it's easiest to make these the same at the moment.

Sorry about the rushed guide, I will be updating this page with examples as soon as possible.

Topia V1.2 released

Suddenly, after an insanely long delay, V1.2 of Topia is out. This release has taken a while and is mostly focused on the editing tools and being able to finally save the levels in a non-insane way.

New features are:

  • Completely rewritten save system, level edits are no longer stored as a weird, confusing timeline, they are now saved completely as they appear. This was the bulk of the update and I spent a lot of time ensuring the save and load were as quick as possible and don't use an insane amount of space. Storage requirements for a level are variable but tend to use somewhere between 1 and 2 megabytes for each slot
  • There is now the concept of 'grass' and 'potential grass'. This basically means that you can now paint down paths and patterns in 'dirt' and the grass, as it grows, will not cover them. areas of 'dirt' can be reclaimed as grass with the grass painting tool as long as they aren't too near the sea, too steep and rocky or above the snowline.
  • The painting tools have been hugely optimised, this means that people on slow devices (iPhone4 and older + the original iPad) will see much less of a slowdown than before.
  • New lighting: Lighting calculations have been optimised for better performance while the resolution of the lightmap has been enhanced.
  • Better water animation: The way the water refracts the seabed under it is much more realistic and looks cooler.
  • Tree planting. Players can now plant trees anywhere flat enough for trees to grow.
  • Importing levels from graphic files: More info on this coming later...
  • Preset worlds: Players can start from a selection of preset worlds, 7 in the current version.
  • Scale/Offset/Smooth tools, used to make world scale changes to the level.
  • Advanced tools: Some silly effects to tweak your world
  • Life editing in edit mode: Wipe out all trees and creatures, plant random trees.
  • Updated landscape tutorial
  • Vine camera loop mode: The camera travels and rotates over the world and is back to where it started exactly six and a half seconds later. Film this from Vine on another device and it's fairly simple to make seamless looping videos.
Now I have to post another blog detailing how the import works in case anyone tries to follow the link painted as a path in the Creator's Message world!