What? He’s reading a health and safety poster.
I had a chance to work on my game in my week off, the one I was going to call Private Dick. That name is increasingly pissing me off, so I’m calling it Gunpoint for now. How relevant that title becomes will depend a bit on how much fun it really is to be at gunpoint, or have other people there, and what kind of options I can reasonably code for those situations. Currently everyone with a gun shoots you in the face the instant they see you, and there’s a certain comforting reliability in that.
I’m almost at Milestone 2 – they’re really yard stones, these things, because I can’t have spent much more than ten hours on this thing since Milestone 1. Here’s the plan:
Milestone 1: movement fully working, however horrible it looks and shitty it feels.
Milestone 2: one hostile who shoots on sight, and can be pounced on and beaten unconscious.
Milestone 3: two devices that are interactible. I’ll talk about devices once I’ve got them working.
Milestone 4: one fully working level that’s fun.
Milestone 5: a dialogue system why not?
Milestone 6: narrative reduces grown men to hopeless fits of sobbing.
Milestone 7: the Citizen Kane of games.
So I’m not really thinking clearly more than two or three milestones ahead – my plans change too much with each one for that to be worthwhile, and anyway it’s kind of daunting.
About ten of the people who signed up to test my game played Milestone 1 and told me what they thought of it. This was awesome. Not least because most thought it was a lot less horrible-looking and shitty-feeling than I was expecting.
It’s also a really exciting and eye-opening thing to have people interact with something you created, and have reactions you didn’t expect. People overwhelmingly wanted a certain move added that I’d intentionally left out. And they were right: I’ve added it now and it profoundly improves the feel of the game.

That milestone was all about the jump: the tiny freelance agent you play can leap preposterous distances in any direction, and cling to anything he hits. This milestone, number 2, is about using that jump to pounce on angry gunmen while they’re not looking, then punching them in the face while you have them pinned to the ground.
That part took minutes, really, and is immediately and profoundly enjoyable. I hadn’t really thought about it before I coded it, but there’s no reason to force the player to let the gunman go after he’s hit him in the face once. I just made the mouse click smack him in the face, then return to the about-to-smack-him-in-the-face pose. You can jump off if you like, but in a survey of playtesters called me, 100% felt the need to beat him again and again and again, sometimes tapping out semi-musical rhythms with their facebeatings.
What was trickier was making the jump good enough that you could bet your life on it. One of the biggest complaints from the first test, even without any threats, was that people had trouble judging where their jump would go. I hadn’t even put a charge-meter in, and the strength of your jump increased quadratically as you held the button. A player’s instinctive grasp of basic movement mechanics doesn’t necessarily model quadratics effectively.

This was not a surprise. I knew what I wanted, ideally: a visual projection of the exact arc your jump will take. But like most of my plans, I had a few much easier back ups that wouldn’t work as well. Any kind of charge meter, I thought, would probably do.
The reason I’ve only spent ten hours working on this since the last milestone 5 weeks ago is not actually free time. It’s guts. Doing everything yourself is sometimes daunting.
The fun stuff: design, requires some less fun and harder stuff: coding. And the still quite fun stuff: coding, requires some much less fun, much harder and miserably unsatisfying stuff: art. When I’m not working on my game, it’s because I’m exhausted or distracted or just not in the mood to take on something that may, at any time, kick my ass.

What I’ve learnt from the whole process is this: guts. I’m not accustomed to putting time and effort into something and having it turn out shit, but I’ve found that when I actually get down and do it, it doesn’t take that much time and effort and not everyone thinks it’s shit. Just do it. Accept that not everything you do is going to be met with a steady stream of praise, venture outside your comfort zone and grow up.
That’s true enough for art, but it’s particularly true for coding. Predicting the arc of a player’s jump meant simulating the engine’s own internal vector analysis precisely, so that I could do all the calculations involved with it in a single frame. In other words, the game would have to play the jump out in its head thirty times a second, exactly the same way it would happen at normal speed. It seemed like it would involve an awful lot of trigonometry, which is tricky to code and tricky to compute. Having the game do it thirty times a second seemed like it would destroy performance.

Long story short, it was easy. If you’re smart about it, no sines, cosines or tangents are needed, just basic multiplications. It’s high school mathematics to model a rigid body under acceleration and derive a generalised formula for its position. And once you’ve got that, you just plug increasing values of time into it and create a dot at that position until you hit something. There are ways to make it more precise and reliable, but it already works so well that it’s completely changed the way I play.
I still don’t have a charge meter – I changed the system so that if you want to go further, you just click further away. It means you can make small, precise jumps without time pressure, and great long arcing ones without delay. And it feels great to leap six stories, through a window, and into the back of someone’s head. Then punch them to the beat of Seven Nation Army.

I whined a while ago about wanting to get to the point where the question is “Is this fun?” rather than “Why doesn’t this fucking, fucking work?” I’m there now, and from here until I’m done with the game or give up on it, there’ll always be “Is this fun?” questions to answer. There’ll still be many more things that don’t fucking, fucking work, but I’m tantalisingly close to having most of the building blocks to make real levels out of. Once I’m there, it gets really interesting.
Edit: just as I finish this, Sophie Houlden posts the text of her talk at World of Love, and it’s basically telling me to realise what I just realised.
“When you were born you shit yourself all the time, couldn’t talk and your hands were too small to shoryuken. in other words you really sucked at being a person, but thats ok, when you start out at anything you will suck. the same is true for making games.“
Edit 2: Once I’ve tweaked it a bit, I could use some more testers to help me figure out if this iteration is fun yet. Any more volunteers? Mail me if so.
Edit 3: Now with animated gif.
Comment
More Gunpoint
|
(And a big hello to Echelon who just joined the conversation.)