Tuesday, June 15, 2010

A Little Less Fog, a Little More Detail

So What's it All About?
It's been a while since I posted anything on the strange game I'm developing. It has grown quite a bit since the last time I posted. It now looks just like the screenshot - and better. I'm aware that I've not yet stated what the game actually is. I'll rectify that shortly, but first I should lay out what my aims were when I started.

1) Produce the best game on the iPhone... for geeks like me
I've grown rather dissatisfied over the last few months. The iPhone is such an excellent machine, but seems to be used to create nothing but 5-second twitch games (Flaboo! included). It can do so much more. So, rather than whining I decided to do something about it. I'm hoping that Incoboto will be something people can play in short spurts, but which also rewards a long afternoon of play.

I'm also bored with games that offer only a single, repetitive mechanic, or with so little content that there's nothing to discuss with friends between play-sessions. Nethack and Angband provide countless hours of content and fodder for water-cooler discussions despite their primitive appearance. Why doesn't this happen more?

I very much hope Incoboto brings this sense of depth and immersion onto the little machine.

I also want to make a game that doesn't involve killing - or at least not as a casual mechanic. This isn't some hippy vegan doctrine I'm following here. I just feel it's a bit trite and not in keeping with the childlike sense of wonder I want to evoke. More on that later.

2) Provide emotive content without resorting to (too much) dialogue
Since watching countless small animated films and seeing the efforts made by others such as Jason Rohrer (who have done marvellous things with lesser technology at their disposal) I've become increasingly interested in the emotional power of simple images and animation.

Incoboto's story is about wishes, loss, and understanding what's really important in life. Hopefully, with clearly designed characters and appropriate pieces of music, I should be able to wrench the odd tear from the audience.

As ever, David Lynch is on my mind, so along with pathos, I'm hoping to bring a sense of quiet unease into the world of Incoboto. As an example, Helios (the great, grinning sun-thing you saw in the last blog) should appear insane and menacing without ever having to say: "Hey! I'm insane and menacing!" or - god forbid - play a dialogue sample. Bleach.

Less is more. In Incoboto's case -hopefully a lot more.

3) Construct a Mythos
It's been a while since I left Lionhead now, and Fable along with it. I'm very proud that we managed to give players the sense that Albion was a real place. By the end of my time there, my job mostly consisted of being a filter for what was or was not Albiony or Fabley. I also experienced a great deal of frustration when others disagreed, or decided 'nobody would care' if we chose to do something out of character.

Incoboto is all mine. That's an enormous privilege. As such I have an opportunity to craft an entire universe of strange inhabitants, colossal machines, odd devices and mysterious planets.

It is unlikely that someone is going to say, "Helios should, you know, fart. It'll be funny."
Even then, if they do, I can ignore them rather than wishing I had a bottle of Draino to swig from.

What's in a Name?
I've had several people tell me that they don't understand the name 'Incoboto'. Others offer me the advice that nobody will remember it: "What is that... Japanese?".

Both are fair comments. At this precise point in time I don't care. The name is... what the game is. Perhaps that'll change in the next few months, but right now I can't imagine the game being called anything else. I'd be interested to hear how others feel about it - presuming anyone reads these.

Zoom and Rotate
One of the biggest things I'm battling against at the moment is the complexity of building a game with no fixed axis of movement or rotation. The whole universe can spin around you, planets rotate, satellites rotate around those, and you can stand on all of them and jump from one to the other. It's bonkers.

However - with all this fun comes potential nausea and a great deal of difficulty in maintaining a meaningful view of what's going on.

If I don't auto-rotate the camera, jumping on the leaves of a crystal-tree while upside-down feels quite... unnerving.

If I do auto-rotate the camera there's a strange sense of vertigo and a constant feeling that there's no 'up'. That's because there isn't one.

I'm thinking of allowing players to choose their own axis of movement at any time, but also leery of the fact that this adds yet another level of complexity into the controls of an already complex game.

I added zooming out/in today, and it looks fantastic. With any luck it'll go part-way toward fixing the issue.

Next Up...
The next task is to get AIs into the game. Like everything else in this game, there are no off-the-shelf solutions to navigation, and the fact that there's no clear axis of movement will make everything more difficult. So - by next blog, my aim is to have AIs wandering around and able to interact with the player-character. Then it's time for catacombs.

Never Neverland
As a final note, I'm also aware that what I'm trying to do is stupidly ambitious, and that most people fail miserably when they attempt something this big on their own. But then, if people didn't have a go the world would be so dull.

Thursday, May 20, 2010

Incoboto Teaser Screen

I know I shouldn't do this so early, but it helps keep a record of my intent, and - believe it or not - giving an image public wings keeps me motivated.

So here it is: the first teaser screen of incoboto.















I'm trying something completely different, combining physics programming, my interest in generated content, cute-yet-unsettling moods and ambient music.

Game-play is really simple to control but has a lot of complex and chaotic repercussions.

I'm also going to be exploring the space between software-toys and games. Hopefully people will have fun with this even if they don't 'win'.

I'm also going to try and maintain a 'there are no bad things, only less-good things'. It'll be a challenge, but that's part of the fun.

Wednesday, April 28, 2010

First two tracks available...

Only a minor post. This is the first pair of Kitty Genovese songs to make it out into the world.

While You Sleep

Noone Knew Kitty Like Me

I'll post more as I go on.

Tuesday, April 20, 2010

Primary and Secondary

The First

I have uploaded video of the original version of Flaboo! from 2006. I coded it during a holiday in Cornwall - that being my idea of a nice, relaxing time. I believe it's one of the first of its kind: the endless jumping game. It's odd to know you pioneered a genre long before it became popular.

[Edit: see note from Kalev about 'NS Tower' which was developed in the early '90s!]

Flaboo! often gets compared to 'Doodle Jump'. Those who consider themselves in-the-know wink archly and say, "But Ah! Papi Jump was first..." I'll have to invent some other facial tic to preface my statement: "ACK-tually, Bounce was first. And here's a video of the original code running on a really old mobile."

Link.

I'm sure the scientists among you will state, quite correctly, that this does not constitute a proof. Furthermore, I'm aware that having not publicly 'published' Bounce (only a few friends downloaded it from my site) it is hard to verify.

However, I'm not attempting a scientific proof, nor gathering legal evidence. I know my little Fat Chick was bouncing high into the sky for years before the benozzled quadruped ever left terra-firma, and that's enough for me.

The Second
In other news, I'm facing 'second album blues' trying to decide what to do next. I've now built the animation exporter for Blender, so I can get more complex movement into games. However, with my experiences from Flaboo! it becomes quite hard to decide the best way to move next. I have about 6 game ideas to choose from. Some are ambitious. Some are quite simplistic. Some are very hard-core. Some are casual.

After trawling the feedback from the Free App A Day release back in March, I realised that I wasn't quite sure who I was making games for any more, nor were my personal motivations for making them clear. Here's a selection of the reasons people usually ascribe to their development:

1) To make money
Bwa. And indeed, Hahaha.
The iPhone market is so monumentally flooded with cheap games at the moment that it's hard to make any kind of impact, no matter how good your game might be. Getting your game into the top 25 is much like winning the lottery. I assure you, Flaboo!'s profit is negligible.

This is not the reason. Case 1 fail.

2) To make people happy
I've received quite a few positive comments about Flaboo! via email. When Flaboo! first came out, it averaged as a 5-star game. All seemed well.

However, a curious thing occurred when I made Flaboo! free for a day. My rating went down to 2.5 stars. There really does seem to be an enormous conceptual link between price and perceived value. In addition, I had one chap tell me that if he purchased an app which later went free, he went to all the app stores around the world and spammed them with negative comments to vent his ire. We're talking $0.99, folks. He would have spent at least an hour doing this. That's a lot of rage for such a tiny sum.

From some of the negative feedback and comments I received you'd imagine I'd violated their favourite pet with a novelty toothbrush. For these individuals it seems I actually made the world a worse place than it was before the little Fat Chick came into their lives.

Still others spent so little time even trying to play the game that they didn't realise the game had a) sound or b) tilt controls.

Oddly, and perhaps unscientifically, I find that the energy the world uses to fashion venom and negativity far outweighs the energy used to say something nice. I think YouTube comments illustrate this perfectly.

As a result, I don't feel making small games makes the world a happier, nicer place. Case 2 fail.

3) Just 'cos I have to
If I don't work on games for a week I start to go a bit funny. Ideas start bouncing around my head like ping-pong balls and I start gathering bits of paper together and start scribbling on them like a 3-year old on a tartrazine drip.

My work on Fable 2 largely consisted of director-like duties: ensuring things 'felt' appropriate to Fable, that the story's pace moved appropriately and so on. Despite its resemblance to game creation, it didn't feel like making a game to me, and that dissonance is what started me down the path of being deeply unhappy.

Now all these cares are absent, I'm a little too free. Ideas and justifications for each idea speed through my head and vie for attention, meaning it's difficult to decide... anything. The difficulty with making a game 'just 'cos' is that every damned idea seems like it's the most appropriate - depending on when you ask me, what I'm listening to, and how much coffee I have consumed. As many old club-going friends of mine will tell you, constraint can be a good thing.

Case 3 - a tentative 'yay'. With reservations.

So What Now?
In view of the circumstances, I have decided to take a short break from actively pursuing game-creation. I'm giving myself some time to write a CD based on the events surrounding the death of Kitty Genovese. The first track is here. There's a bit more work to be done, and about six more tracks to write, but I think a break from coding is a good idea. With luck one of the ideas bubbling around inside my head will rise to the top - and stay a while.

Tuesday, March 9, 2010

The Tortoise and the Hair

I've given in. I have succumbed. I have turned up my tootsies to the sky and cried 'Uncle!'

(It's always perplexed me that one's indication of submission would be to scream out the title of a family member. Odd. Possibly Freudian?
)

I have given up writing the Android version of Flaboo! The reasons? Oh, there are many...

1) Speed.
2) Java constraints.
3) The difficulties of writing native code.
4) The un-enjoyable development environment...

...to name but four off the top of my increasingly shiny head. My remaining hair now has a tuftier appearance than usual due to my grabbing fists-full of it in frustration.

Flutterbyes
When I left Lionhead, I filled my mind with thoughts of skipping through flower-filled fields, care-free, bouncing along greeting the trees and bunnies with a latte in one hand and a tiny, portable dev-machine in the other. In these fantasies I'd sit under a tree while butterflies kindly offered me refills (strong buggers, these particular lepidopterae) and helped me with my typing.

As such, Flaboo! was largely an experiment. It was an experiment in testing out the iPhone development environment. It was an experiment in working entirely by myself. It was an experiment in changing my life.

As such, it was pretty successful. I love Flaboo! I really do. It's one of the purest and best games I've ever written. It might be simple, but it's really, really 'clean' and incredibly addictive.

As such, I thought that branching out and spreading the Flaboo! love to other platforms would be a good thing to do. After all, the game originally started out as 'Hopping Mad Simon', written in Java back in the days of the Siemens MC65. How hard could it be?

Earlier in the year I went to the Google Android developer conference in London, and the folk at Google were kind enough to give me a Nexus One. They also listened to my questions, and have a spiffing support site filled with little gems for the burgeoning android developer community to sink their little milk-teeth into.

How jolly!

Creeping Dread
In horror films (um... take 'The Shining' as an example) numerous small details of 'wrong' slowly congeal into one super-powered 'mighty-wrong'; an axe-wielding Jack Nicholson in the case of 'The Shining', and Wendy Richards in my own personal nightmares.


Look at that face. It's Evil Edna in a wig made from Dougal's carcass. Brrr.

(Youngsters should look up Will-o-the-wisp and Magic Roundabout)









In the case of the Android, the first 'wrong' came when using the device. Its battery has roughly the lifespan of a chain-smoking mayfly who's eaten polonium-sushi for breakfast, followed by a nice long sit on public transport while wearing a bushy beard and a bulky, ticking backpack. Not long at all.

However, in light of the lovely pixel resolution and the early promise of a big friendly API allowing me to do things like play multiple sounds with minimal effort (no openAL! Woohoo!), it seemed like we were going to be bestest friends forever.

Then I started coding for it.

Java
Android uses Java as its primary development language. Java?! It's a language named after coffee! That's awesome! Coffee! Yaaaay!

A warning bell should have gone off when everyone writing Android apps said: "Don't allocate an object. Ever. No, really." At the time I pulled a confused 'Father Dougal' face and moved on. It was a hint of the 'wrong' to come.

Converting projects isn't really a lot of fun as it mostly consists of copying and pasting code over to the new environment, watching a load of red lines appear, and realising that your original code was a bit poo. Slowly, day by day, you watch more and more lines (out of your 300 000 total) turn from red into black.

And then break. You see, Java is a bit 'special'... seemingly just for the sake of it.

For a start there are no unsigned types nor typesafe enums. More little bits of 'wrong'.

(Jack is now sitting at a bar drinking imaginary scotch. It's only a matter of time before the creepy eyebrowless twins make an appearance.)

Also, Java's strings and arrays do not terminate with null characters. That broke a whole bunch of my data-parsing code without me realising it. It wasted about a day; a day where I both gnashed my teeth and smacked my head on the table such that I now have bite-marks in the woodwork. More tiny helpings of 'wrong'.

(Oh no! Jack's typing 'All work and no play...'!)

iPhone Flaboo! uses openGL to maximise performance. I used big interleaved vertex buffers and manipulated them in real-time to get the rotations and scaling you see in the game. Java does things a bit differently (uh oh). You have to use ByteBuffers instead of arrays, and there's no sensible way to cast different portions of them to different types - vital if you're interleaving colours and vertex information. I wouldn't mind if ByteBuffer manipulations were fast, but they really, really aren't. Another 'wrong'.

The Slow Dance
Despite the various hiccups and a nagging feeling that this wasn't as much fun as it should be, I got all my lovely, complex, multi-layered, articulated sprite code working today. I tapped the screen a couple of times causing Fat Chick's cheery little face to appear on the screen.

By the time the game had 20 sprites on-screen it had slowed to a crawl. If you wiggled the roller-ball on the phone it ran at half of even that glacial framerate. In response I looked around once more to see if there was anything I should be doing (or not doing) that would help speed things up a bit.

After a search, the main advice seemed to be to change all my maths into fixed point. Fixed point? I've not used that since 1995! How retro does your hardware have to be to rely on the veritable 'Stonehenge' of game engineering? Big 'wrong'.

(Jack has now seized the axe and is telling all present that 'Johnny' is in the building.)

The other advice was to rewrite a majority of my code in C and compile it, along with all the android OS in a Ubuntu virtual machine or Cygwin. Yuck. As of two days ago there's better support for openGL in the NDK, but still.

Take a look at this. It's the final, capitalised Wrong to end all 'wrong-kind'. Debugging native (i.e. workably fast code) makes Lost's plot look straightforward.

(We've now seen the man in the bear suit, Jack has chased Danny around the maze, Halloran is dead and the titles have begun their roll. Oh, and Wendy screamed and cried a lot, looking much like a novelty bottle-opener with eyes.)


The Final Straw
I started Fluttermind to have fun and experiment with gameplay and graphics, not sit staring at a screen of hex for a day trying to figure out why a @&%£ing cloud isn't rendering properly.

There's no pithy afterward, I'm afraid. Eclipse/Google/Android and I part company today. It's the supermodel that turns out to be a hose-beast. It's the British Mars-probe that crashes due to a measurement error. It's the 'Avatar' that turns out to be 'Dances-with-Smurfs'.

Farewell Android. As I wander off into the distance I have absolutely no fear that you might follow me. Even at my pace you have no hope of catching up.

Thursday, February 4, 2010

'Flaboo! Lite' Now Available on the App Store

By the time you read this, Flaboo! Lite will be available on the App Store.

For those of you with the full version, this will mean naught. You already have the best version. Stop looking for greener grass on my side of the fence. I have a gun, and there's only grass over here. Move along. Wait a moment - actually, Flaboo! Achievements will be available soon, at which point the grass analogy fails more embarrassingly than a british bobsleigher's gusset.

Arse.

Anyway... for those of you reading this who do not already have Flaboo!... um... well... what can I say?

Um...

Hi.

Welcome to Fluttermind.

Nice to meet you.

You must be lost. Are you? Thought so.

Perhaps you were looking for a humorous 'fart' application, or the well-observed simulation of a pint glass, or - if I may be so risque - you sought a full screen depiction of mammary glands? If it is this last, I must say it seems bafflingly redundant considering you're reading this on the internet. The internet = Pornucopia. But I'm not one to judge. Dear me, no.

All I know for certain about you is that you are visiting the little-read blog of a game developer whose work you dont like enough to spend money on. That's fine. It's your right not to buy as part of a civilised free market economy. Without that, where would we be? Eh? Yes, that's right. Norfolk.

No, you go right ahead and read on. Make yourself comfy. Or better still, go and download Flaboo! Lite. It's free. Yes, that's right. 'Free', just like some of the beer, boobies and farts you were looking for. But better.

Go on. Download it. You know you want to! Quick! Before it's too late! Get it before all the 'Free' leaks out!

Saturday, January 30, 2010

Flaboo! 1.1.0 now available on the App Store

Finally...
So it took a little while longer than expected. The Open Feint libraries were rather cryptically and inaccurately documented in places which meant that code which appeared to work did not in fact work at all. Particular mention must go to Matt Jaques who helped me solve that particularly elusive bastardo bug.

Various other fixes are included, including one an annoying sound bug which meant that drinking too much coffee eventually made you go deaf. Perhaps the gods are trying to tell me something. Perhaps I should drown them out with a nice fresh mocha.

Overall, thanks to the patience of both folks at Aurora and my beta test team, all the problems were eventually fixed, so the new Flaboo! is bigger, tougher, more competitive, and better than ever. Long may this trend continue.

Future Plans
I now have 3 big things on my 'to do' list.

1) Investigate Android as a platform
This fills me with some fear, as it's another API to learn, and then - potentially - a whole bunch of hardware specific issues to fix. Re-writing Flaboo! so that it uses 'virtual coordinates' and thus takes account of any screen size is no trivial task. Additionally, I don't know if accelerometer tilt is standardised between hardware types... etc... etc... I hate this stuff.

2) Flaboo! will soon be part of an Open Feint promotion. Woohoo!

3) Flaboo! LITE version will be out at some point in the near future. It'll effectively be Flaboo! with no Open Feint or leaderboards. The people who have bought Flaboo! already have bought free updates for life, so I hope they'll still feel satisfied.

And in Other News
On the non-Flaboo! front, I have two other games on the drawing board at the moment.

The Clockworks is something I've been thinking of for some time. It's kind of paying a debt to all the magical books I read as a child. The pre-pro screens are looking beautiful, and will be using 3D in a really unique way. The aim is to get across the sense of a massive, evocative, magical landscape on a very small screen, and create a gentle, if elegiac experience. That's all I'm saying about it for now.

incoboto is a complete departure from my usual work; a strange crossbreed between an art-house animation and tactile fun. I'm sure a lot of people will immediately say: "WTF? That's a game?" when they first see it. When they realise how relevant it is to them, personally, that'll hopefully change to 'Cool! Let's see where this goes!'

There's a lot of Fable in it, but not in the ways people might expect. It's also a great candidate for a GDC or IGF talk. If you want a hint, I was listening to a lot of 'Mesh' when the idea came to me. Music's a huge part of visualising a game for me - the right song can define a game from the outset, which is really helpful as the months go on.

As ever, it's still just me doing this stuff, so obviously one idea will take precedence, and existing customers of Flaboo! take precedence over everything.

Regardless, I'll post some screenshots when things are a little further along, and see how people react. It should be interesting.