A stealth puzzle game that lets you rewire its levels to trick people.
Out now! $10!
Windows, Mac and Linux.
Tell us about it! Literally do tell us about it, or nothing will happen.
Here's the formal permission bit.
Find out when I release a new game, and when there are opportunities to test them.
By Tom Francis. Uses Adaptive Images by Matt Wilcox.
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.
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.
Jethro: Memememe! me splat iamjethro.com :D
The_B: I'm still in, but currently as my hotmail seems to being going wonky you'll have to push it to my gmail addy. Which is the same my usual one but with a gmail.com suffix.
Nonomu198: Wasn't this supposed to be a game about detective work and infrequent acts of violence?
I see you've changed your goal to a Batman sort of detective (see the bat-signal, kick butts).
Also, now that the character design is finished, it's a good time to name the protagonist. How about Batman?
Devenger: I'd like to test this punching. It sounds punchy, and thus enjoyable. My email is devenger (odd 'at' symbol) gmail (dot) com.
Auspex: I'd be happy to test if you still need people.
Try jpcampbell (fearsome 'at' symbol) gmx.com
Tom Francis: Awesome, cheers. If you tested the last version, I'll include you in the future ones. If not, drop me a mail, it's easier to add you to the list that way: firstname.lastname@example.org
Nonomu: nah, it was never going to be about detective work. The frequency of violence is yet to be determined.
JohnArr: I'm sure you've seen/someone has probably mentioned this already, but this game has an ace pounce attack, it might give you some cool ideas about impact and feedback (eg. I love the slide after collision) http://www.kongregat... ...f-thriller
Tom Francis: That *is* a great pounce. I forgot all about that game because of how impossibly bastard hard it gets as soon as the werewolves can fight back. Tragically misjudged level.
Slides are definitely good. I'm planning on having a little skid when you land fast at a low angle, too, but I'll save all that stuff for when I know how for sure what kind of levels it's going to have.
The_B: I've no idea how you did it, but kudos in actually making that gif go to the beat of Seven Nation Army. Man!
Bret: Ah, the werewolf game. Was fun pouncing, yeah.
And chin music looks entertaining. So, that's good.
verendus: It's stuff like this and spelunky that really make me regret buying a Mac...
Matt: Just sent you an email to get in on the testing. Let me know! :)
Andrew Zalotocky: If it's about guns and detectives why not call it "Gunshoe"?
As for milestones 5-7, relationship management should be the next frontier for game design. There are games like "Half-Life 2: Episode 1" and "2" where a companion NPC follows you around and tries to help you. But the next stage of game evolution is to turn them into autonomous individuals with their own goals. Instead of taking them for granted you would have to negotiate with them to get what you wanted, and this negotiation would be based on an implicit understanding of what your friend/colleague/ally/relative/lover/whatever will want/tolerate/refuse rather than the NPC offering the player an explicit "do this and X will happen" choice. In doing so you are forced to make a choice about what kind of person the player character will be, and therefore how the NPCs you have yet to meet will react to you.
This means that the single player game has to be treated as a multi-player game with AI participants rather than the scripted movie experience that it tends to be at the moment. Some people see a similarity between games and movies because so many action movies rely on spectacular special effects. But the essence of gaming is in the spontaneous events and interactions that arise from the player(s) situation rather than the set pieces. It's about individual agency rather than the passive consumption of someone else's vision.
Consider real life. You constantly have to interact with the people around you, and decide how to treat them on the basis of what relationship you have with them now and how you want them to relate to you in future. But you have to decide immediately what to do or say.
So a UI for relationship management must be context-sensitive, real time, and persistent. When you meet an NPC it should present you with a list of things that you can say to them which would be relevant to your current situation. It should require you to make a choice (and no choice = choosing to be silent) in as many seconds as you would have in real life. The way that NPCs react to you in future should depend on how you've treated them in the past, even to the point of the game becoming impossible to complete if you alienate the people you need as allies.
But if you have established the habit of treating a particular person in a particular way you are likely to continue it in future so the relationship management UI would have to reflect that. For example, if you treat a particular NPC with hostility when you first meet them then on subsequent meetings the user interface should make the hostile interaction options more prominent than the non-hostile responses. The degree of bias in the interface should reflect your past history with that character (and/or that class of character). It should also change according to the plot points you uncover in the course of the game, e.g. if you discover that an NPC you thought was a villain was really working for your side or vice versa.
Sometimes the opportunity to respond will be so fleeting that you fail to say anything or say the wrong thing by accident, as happens in real life. This exposes a tension between realism and player satisfaction that is as unavoidable as the eternal conflict between frame rate and jaggies. In a strictly realistic game you could condemn your whole campaign to failure in the first minute by making enemies of the characters you will need to have as allies, but only find this out a few hours later. Result: one unhappy player. In a game that is biased towards player satisfaction the NPCs will be unnaturally forgiving and the relationship UI will give you obvious prompts about what you should do.
The conflict can be partially resolved by representing other aspects of the human decision making process. For example, the relationship UI might offer you hints like "Your training says it's usually best to do X", or "Your mission briefing said to do Y", or "Character A has promised to give you B if you do C". The player is reminded of what his or her choices mean without being pressed into taking any particular one.
I'm not suggesting that you build all this stuff into your game Tom, but it's where games need to go. Just imagine how radically different the next "Half-Life" game would be if you had to manage your relationship with an angry, grief-stricken Alyx. You would actually have to become a character instead of a walking gun platform.
Would it be art? Would it be fun? I don't know, but I think we need to find out.
Matt: Also, the idea of a dialogue system brings to mind those horrendous assassination scenes in Assassin's Creed.
Just picture it! Your little dude leaps, crashing down onto that dude with a gun, and then they launch into a full-on discussion of each character's motives and desires. The player, stunned (and a little hurt) by the sudden injection of verbosity, interrupts the dialogue with a mouse click, commencing the face punching.
You should do it at the very beginning of the game. If that's not an intuitive way to introduce the face-punching, I frankly don't want to know what is.
Bret: So, every conversation turns into extended facepunchery?
Best dialog system ever?
LeSwordfish: I was in the first test, but must have been left out of the sceond. It's ok, i dont think i said anything helpful.
Tom Francis: The_B: Yep, that took about half an hour, so I'm glad someone noticed.
Lack_26: It's sounding better and better. I have to say, the jump prediction is almost exactly how I imagined it being, and perpetually punching people's parietal bone looks like excellent fun. Can't wait till you get the next play test out.
Quasar: It's looking more and more fun with each iteration - glad the feedback from the first batch was helpful!
Looking forward to the second round.
LaZodiac: @Matt: I don't know, those scenes were actually pretty cool. I liked knowing the motives of why they did things. Admitidly the way they told you about it was a little pretentious, and they shortened it with the sequel, but dangit I did generaly enjoy them.
At any rate, this update mentions useage of a mouse. I know that on keyboards, platforming games are not that good, by why use the mouse?
Plumberduck: Awesome to see work continue on the game, Tom! Even more awesome to see the change of name... There was something slightly disconcerting about getting an e-mail with the subject 'Private Dick movement."
Looking at the pounce makes me think about the Hunter in Left 4 Dead, and imagine a Gang-Garrison-style side-scrolling remake of that venerable Valvism.
DoctorDisaster: I love Matt's idea. Your first pounce opens up a little dialogue prompt:
[Space]: (friendly line)
[Enter]: (aloof line)
[Shift]: (aggressive line)
[Left-Click]: Punch him
If the player tries to pursue the conversation, the spoken options slowly fade away as he does so, while the "punch him" option grows larger and bolder. Eventually the pouncee's speech is just "wah wah wah, wah wah wahh" and LEFT CLICK TO PUNCH is covering most of the screen and flashing on and off.
Itantor: I think you should take a step back a bit with that idea, DoctorDisaster, and have the dialogue prompt be:
[Space]: (friendly punch)
[Enter]: (aloof punch)
[Shift]: (aggressive punch)
[Left-Click]: Context-sensitive Punch
Tom Francis: Heh. Bet on 'pinned' dialogue, and probably even post-punch dialogue for some characters. This one set of circumstances has so much potential to play around with, and I'm sick of game dialogue being reserved for people standing around doing their hand-wavy DIGITAL ACTING!
TooNu: To test, do I need to have some sort of computer savvy brain or can I double click a shortcut and get the latest version to run and then I can do monotonous tasks to test things in the game and give awesome feedback? Because if I need a computer savvy brain requiring coding knowledge or some "intelligence" than I can't apply.
My point is, if it's simple to start up I would like to test the game as and when needed as often as needed.
Oh and don't stop making it by choice.If you HAVE to stop for medical reasons and it's left uncompleted, I still want a game semi-finished by Tom Francis than no games by Tom Francis.
TooNu: that is, I mean medical reasons could also be personal reasons, time reasons, girlfriend reasons, suprise Cambodian lovechild reasons etc
Tom Francis: Nope, it's just an .exe you double-click to play, doesn't even need to be installed.
Ludo: Looking forward to the next play test. I'm compiling a list of punchtastic basslines in order to create the most finely honed and funky facepunching experience possible.
Phydaux: This game sounds, and seems like it's starting to play out like, a 2D version of Crackdown.
Mookae: @phydaux Or maybe like l4d's hunter. Except more bada$$. And he can talk. And doesn't have to worry about getting shot as much.
And dialogue options FTW. Also if you can, try to throw in other punches. Say, for some insane reason, you pounce a guy with a helmet. Then you would have to choose to punch him in the gut instead, or maybe the classic knee to the groin. And so on. EX.
[Right click]:Select target
Tom Francis: Thanks for the feedback, I've added it to the list but I'm removing it here. The alpha's not public and I'd rather the feedback wasn't either.
dual_barrel: Pentadact, do you have a degree in Computer Science or something related? Just wondering.
Tom Francis: Maths and philosophy, actually. You'd think maths would help, but so far coding has only ever called for high school level stuff.
dual_barrel: Cool and thanks!
Jason L: The thought occurs: Who said The Invincibles had to be 3D?
It’s Time I Did Something About This ‘Gunpoint Ripoff’ – a post on Tom Francis’ blog: […] I wrote about my process for coming up with that jumping system back when I built it in 2010, if you’re interested. […]
Don't post them here, I'm a useless idiot! E-mail tech support with as much detail about your system and the problem as possible, and they can actually do something.
URLs get turned into links automatically. You can use <i>HTML</i> but not [b]forum[/b] code.