A.R.M.: Alien Research Mission (A Post-Mortem)

Posted by (twitter: @justinbowes)
December 17th, 2012 9:51 am

Sometimes, games are as fun to write as they are to play.Source code includes Goats

What follows is an hour by hour breakdown of why writing this game was awesome.

[stextbox id=”warning” caption=”TL;DR”]

Box2D.

Go play the game. Do a lot of barrel rolls.

[/stextbox]

T -4:00

I am pretty discouraged. Lately I code in C++ and C, but my sound library wouldn’t link and the source won’t build. I need an alternative.

T -3:30

I take a break and write an “I’m In” post that rambles into reminiscing about how convenient my LD23 project skeleton was. I decide to use it.

T -3:00

I discover that (1) the skeleton only builds applets and (2) LWJGL applets no longer work in OSX. I write a new Application entry point and wonder if the math classes are missing as much as I remember.

T -2:00

The math classes are missing more than I remember. If I want an orthographic camera matrix, I’ll be rolling my own. I could just go back to GL 1.2, but I’m not sure I remember how. I try replacing my Kenji math classes with OpenMALI.

T -1:00

This sucks. C++ has spoiled me. I start looking for something like GLM.

T +0:00

The competition has started. I don’t know what programming language or tools I’m using. I’m screwed.

T +1:00

My searches are hitting the online libgdx javadoc. The API looks pretty good. I start reading tutorials.

T +2:00

I successfully glClear(). I draw a UFO sprite and rotate in 15 degree increments. At 60 degrees I decide that this sucks. I write a basic Entity System for the comfort of the routine. I go to bed.

T +11:00

Morning. I’m adding TrueType support to my GDX workspace. I’m going render something, even if it’s just an FPS counter. I stumble across the Box2D classes. I still don’t have a game idea, so I might as well build a sandbox. I find this tutorial and create a ground box in my own game.

T +12:00

Inevitably, I add a spaceship. This Box2D debug renderer is an awesome time saver for prototyping.

T +13:00

I’m ustreaming a flying UFO with rotate/thrust controls. I add cubes because physics. I crash the UFO into the cubes, which fly everywhere. I am laughing a lot. I decide that this game really needs flying cubes.

T +15:00

The cubes are arranged in a way that approximates buildings, in stacked rows. At first.

My UFO has a tractor beam that pulls objects up. Then they hit the UFO. I learn about collision masks.

30% of the way through the competition, I have some idea of what I’m doing. I throw away all the game object classes and move everything into the entity system.

T +19:00

The tractor beam logic is done. It opens doors if there’s something “edible” in the beam; otherwise the beam releases at the UFO and the object continues upwards. I can’t see the doors opening, because the graphics still consist of (1) FPS counter and (2) the Box2D debug renderer.

T +21:00

I add a stats component and render stats in the ground. They’re boring. I have no idea what the instruments in a UFO would look like, but A: 320 N: 16 isn’t cutting it. On the plus side, I now have a command-queue based renderer.

T +22:00

My body feels like crap because all my windows were on the wrong monitors for livestreaming, and it screwed up my posture. I have shooting pains down my arms and my left forearm has an egg-shaped welt on it from leaning against the desk. I call it a night.

T +36:00

Good morning! I fly the UFO again. This needs to be a side-scroller.

T +36:15

This is a side-scroller.

T +37:00

The humans are smaller boxes that keep the bigger boxes company. The humans need an AI that makes them run away from the UFO. The rules for when certain things collide with other things are getting complicated.

T +41:00

I have spent the last two hours throwing humans. There is a callback that fires when they hit the ground, but the impact force is always registering as zero, so the humans aren’t killed by the impact. I tamper with the FixtureDefs involved and eventually see some improvement.

T +43:00

I recreate some old music and copy the .ogg file into my assets. It plays with zero hassle. It’s also six minutes long. I won’t need any other music. I will probably get sick of this. I disable the music.

This game needs sound effects. I fire up CFXR and create a couple of wub-wub-wub-type sounds.

Unless I am serious about my game using only the Box2D debug renderer, I’d better start drawing sprites.

I write a collision damage processor for the UFO instead.

T +44:15

I start drawing sprites.

T +44:35

That will do for now.

T +45:30

I have spent too much time looking for a monospaced pixel font. On the other hand, the stats on the results screen now line up. I feel like these aliens are probably not on a plum assignment with top of the line gear. I add PONG burn-in to their briefing monitor.

The humans aren’t getting a flee AI.

T +46:00

I sprite the crap out of the main game screen. I don’t think I’ll have time for backgrounds.

T +47:00

I don’t have time to draw a proper title screen. I recreate the briefing screen with a sort of title/instructions thing.

T +47:30

I tune the levels. I feel like this isn’t really a game, except for the fact that there’s a goal and you can die. It’s still fun though. Wait, what’s a game?

T +47:45

I create sound effects for humans and buildings tearing loose and UFO damage. I scream twice and scare the crap out of my wife. I drop a dinner plate and fork on my desk while I stomp my feet. The cat runs away. I realize I missed my chance to add a cat sound effect.

T +48:00

Deep breaths. I play the game. It…well, somehow, it’s a game. I upload it and try it again. And again.

It’s not much, but it’s the game I want to play right now.

I am so excited I forget to have my victory beer.

Tags: , , , , ,


Leave a Reply

You must be logged in to post a comment.

[cache: storing page]