All posts


Game development








Hello! I'm Tom. I designed a game called Gunpoint, about rewiring things and punching people, and now I'm working on a new one called Heat Signature, about sneaking aboard randomly generated spaceships. Here's some more info on all the games I've worked on, here's the podcast I do, here are the videos I make on YouTube, here are some of the articles I wrote for PC Gamer, and here are two short stories I wrote for the Machine of Death collections.


By me. Uses Adaptive Images by Matt Wilcox.

Heat Signature’s Launch, And First Player Legend

A Leftfield Solution To An XCOM Disaster

Rewarding Creative Play Styles In Hitman

Postcards From Far Cry Primal

Solving XCOM’s Snowball Problem

Kill Zone And Bladestorm

An Idea For More Flexible Indie Game Awards

Teaching Heat Signature’s Ship Generator To Think In Sectors

What Works And Why: Multiple Routes In Deus Ex

Natural Numbers In Game Design

Naming Drugs Honestly In Big Pharma

Writing vs Programming

Let Me Show You How To Make A Game

New Heat Signature Video: Galaxies, Suction And Wrench-Throwing

What Works And Why: Nonlinear Storytelling In Her Story

My Idea For An ‘Unconventional Weapon’ Game

From Gunpoint To Heat Signature: A Narrative Journey

The Cost Of Simplifying Conversations In Videogames

What Works And Why: Invisible Inc

Our Super Game Jam Episode Is Out

What Works And Why: Sauron’s Army

Showing Heat Signature At Fantastic Arcade And EGX

What I’m Working On And What I’ve Done

The Formula For An Episode Of Murder, She Wrote

Heat Signature Needs An Artist And A Composer

Improving Heat Signature’s Randomly Generated Ships, Inside And Out

Gunpoint Patch: New Engine, Steam Workshop, And More

Distance: A Visual Short Story For The Space Cowboy Game Jam

Raising An Army Of Flying Dogs In The Magic Circle

Floating Point Is Out! And Free! On Steam! Watch A Trailer!

Drawing With Gravity In Floating Point

What’s Your Fault?

The Randomised Tactical Elegance Of Hoplite

Here I Am Being Interviewed By Steve Gaynor For Tone Control

Heat Signature: A Game About Sneaking Aboard Randomly Generated Spaceships

The Grappling Hook Game, Dev Log 6: The Accomplice

A Story Of Heroism In Alien Swarm

One Desperate Battle In FTL

To Hell And Back In Spelunky

Games Vs Story 2

Gunpoint Development Breakdown

Five Things I Learned About Game Criticism In Nine Years At PC Gamer

My Short Story For The Second Machine Of Death Collection

Not Being An Asshole In An Argument

Playing Skyrim With Nothing But Illusion

How Mainstream Games Butchered Themselves, And Why It’s My Fault

A Short Script For An Animated 60s Heist Movie

The Magical Logic Of Dark Messiah’s Boot

Arguing On The Internet

Shopstorm, A Spelunky Story

Why Are Stealth Games Cool?

E3’s Violence Overload, Versus Gaming’s Usual Violence Overload

The Suspicious Developments manifesto

GDC Talk: How To Explain Your Game To An Asshole

Listening To Your Sound Effects For Gunpoint

Understanding Your Brain

What Makes Games Good

A Story Of Plane Seats And Class

Deckard: Blade Runner, Moron

Avoiding Suspicion At The US Embassy

An Idea For A Better Open World Game

A Different Way To Level Up

How I Would Have Ended BioShock

My Script For A Team Fortress 2 Short About The Spy

Team Fortress 2 Unlockable Weapon Ideas

Don’t Make Me Play Football Manager

EVE’s Assassins And The Kill That Shocked A Galaxy

My Galactic Civilizations 2 War Diary

I Played Through Episode Two Holding A Goddamn Gnome

My Short Story For The Machine Of Death Collection

Blood Money And Sex

A Woman’s Life In Search Queries

First Night, Second Life

SWAT 4: The Movie Script

James 2.5 Explained

Welcome, to the all-new James! The partly-new James! The slightly-altered James! I’m calling it 2.5 – it’s the third redesign of my fifth personal site, but it’s not exactly a generational jump. I coded my first blog when I was fourteen, so I’m littering this post with embarrassing shots and links of the older incarnations. Sadly only goes as far back as the first James, so the design marvels of, er, “Pentadact’s Site”, “Ugly Fruit”, “The Open Focus Network” and “Politics” are not on shown here.

Turns out I liked dark blue in 1999 too. And I took my tea black? Was I ever that young?

Very nearly changed the name this time – for a long time the prototype read ‘Pentadact’ at the top. There’s every reason to make that change, not least of which is that people might finally spot that it doesn’t have a ‘u’ in it. But no matter how long I left it like that it just looked wrong. This obviously isn’t Pentadact – that’s me. It would be like calling my house Tom Francis.

The smallest change is the new visual motif; that didn’t take long. In a weird way I hope making it narrower has made it look wider – when it greedily filled the whole screen, it had no shape or size of its own. Filling the screen used to be one of my design commandments – I loathe sites that cower in a column on the left-hand side of any reasonably-sized display. Now, I’m starting to see that there are readability reasons why ultra-wide isn’t always awesome, and I prefer sites with a sense of place to sites with a design philosophy.

Weird, news-style proto-meta-blog

The idea behind the stuff in the sidebars – which took all the time – is that as much as possible, it should be different each time you come. Almost everything is either automatically-updating, easy to update, or just randomised. Instead of a static set of dozens of nameless thumbnail shots of things, I wanted to actually explain what each thing is that I’m featuring. But for the number of things I want to feature, that takes a prohibitively large amount of space. So instead, the template randomly chooses two items and I attempt to explain what they are.

I also wanted to dredge up some older stuff occasionally – hence the At Random panel. Blogs are all about what’s new, my sites never were: I like to create a load of stuff and leave it all hanging there, like so much dirty laundry. I’ve read everything on this site at least twice, and I wrote all of it, but even I see things cropping up in that box that make me think “What the hell was that?” If you ever see it blank, by the way, click the Full post link and let me know where it takes you. Every post is supposed to have an excerpt, but I think one or two slipped through the cracks.

Apparently I actually had other people submit reviews and stuff to the first James. I invented Web 2.0?

It’s not supposed to hit you in the face or anything, but there is a logic to what goes in the left as opposed to right sidebar. Left is stuff by me or on this site, and right is elsewhereville, things by other people that I liked. The Favourites panel is a solution to the problem of distinguishing between the types of places I link. I don’t link anyone’s blog unless I read every post of it, but that doesn’t always mean it’s essential reading I want to push on everyone. I wanted a separate place for the stuff I truly couldn’t live without, and to give it a little love. It’s also the first thing I did, and trying to articulate why you like your favourite sites is not a bad way to start a blog redesign.

The channels at the top were supposed to be a bigger deal than they’ve ended up being. I thought that since virtually no-one is interested in everything I talk about, and since I personally stop reading a blog after one or two posts I wasn’t interested in, it’d be useful to be able to filter it by topic. Everything here does legitimately fit into one of those, and if you’re an RSS user you can subscribe to each of the ones you care about to get a sort of custom feed. Update: stats show people really like to click the word ‘Games’ up there. Knock yourselves out, chaps!

I was fond, perhaps too fond, of the left-centre-right alignment pattern.

The subscription stuff is technically not new, but I want to highlight it this time: RSS means new posts get sent to you rather than you having to check for them, which in turn makes me feel less guilty about erratic posting. Jason L’s already requested the ability to subscribe to the comments that get made here, so I’ve implemented that too. Google Reader makes the internet a single page that can be read by repeatedly pressing a single key: Space. So at last, we can start out-evolving these pointless limbs. I’m just trying to help that along.

And as you’ve probably seen, I’m embedding MP3s a lot now – I’ll also add a direct download link for them soon. I want to post more than just music, and I’m thinking of a new regular related to that. I have 1.5 terabytes of storage space now, and ten times that in bandwidth, so I might as well put it to use.

2003 – first recognisably bloggy incarnation. Hopelessly dark.

Oh yeah, the hosting: James was long overdue for its own domain, I got constant complains about the acronymic URL (good luck spelling this one, whiners!), and the real reason: my ISP now sucks so hard that I have to leave them as soon as I humanly can. A load of providers now owned by Tiscali are now getting horrible service as people are moved to cheap, shitty servers in a bid for the parent company to turn a profit for the first time ever. So that really filled me with the warm glow of consumerism.

I chose BlueHost because a hundred blog posts told me to choose AN Hosting. I don’t know if you know this, but there are no longer any objective reviews of this kind of thing – every major company offers a huge cash kickback to bloggers sending new customers their way. The most trustworthy you get are the minority who admit they’re being paid to recommend you.

Holy shit I used to write a lot.

I almost went with AN Hosting anyway, but I happened to have their page up when I closed my browser for the day. It stopped me with a flashing alert claiming that a customer service representative for AN Hosting was trying to talk to me, and even lamely generated her (of course her) introductory lines. I almost spat. When I tried to close it, it generated another alert trying to panic me about that.

If these guys invent a cure for cancer, and I actually have cancer, they will still never see a penny of my money as long as I live, in cancery pain. BlueHost feel nice. Their CEO blogs. Their website lets you try out a dummy account. In fact, I like them so much I’m not going to link them, just so you know this isn’t a pay-per-post.

That would actually violate the prime directive of James, by the way, which is never to make money or sense.


The_B: Man, you should totally start reviewing stuff such as Tescos Reduced Fat Cheese and Bacon Quiche again!

Next week, on James: Is it really M&S grilled chicken, or is it just leftover human remains? FIND OUT HERE.

SenatorPalpatine: This site is the best... even more so now. Best site evar,!!!!!!!!!


No really though, it is good site. I started reading it rather late in it's life, so I can always go back and look at older stuff which is cool. Continue the coolness.

Seniath: Have you tried the new shiny in Opera? It somewhat...explodes in a very horizontal fashion; ...264565359/

Ayan: Remind me how you managed to integrate stardates into your blog systems?

Also, I hope BlueHost paid you a sufficiently large lump sum for those paragraphs. (I may contact them.) Though I suspect your penchant for Blue may have offset part of your fee.

I approve of the new James design and specifications. If only I could find an acceptable rss reader..

Seniath: It would appear the above issue is only present on linux, it works find on my windows machine at home. Yay for standards =/

Ayan: Perhaps answering this would be a violation of the prime directive, but I am curious- do you expect people will read the posts at James or on their Readers?

Tom Francis: Oh God. The notes on your Flickr shot, Seniath, say it's zoomed out -100%. I'm not sure how that works, but does that mean at normal zoom level is much too wide to fit on the screen?

Maybe it's interpreting my column widths as percentages rather than pixels. Although I'm not sure why the center one would be so wide - that's always relative.

This might be one of those problems I just back slowly away from, whistling.

Tom Francis: Like genocide.

Ayan - I expect very few will actually use RSS instead of coming here. I use it for pretty much everything, but I have to keep reminding myself how widespread it isn't.

Are you asking because you're wondering why I put so much effort into the design of the site only to encourage people to read in a way that bypasses it entirely?

Because that would be a good question.

Tom Francis: Ayan, since you asked:

var Stardate = new Date();
var StardateZero = new Date("May 25, 2322");
var Stardate = Stardate.getTime() - StardateZero.getTime();
var Words = new Array(" zero"," one"," two"," three"," four"," five"," six"," seven"," eight"," nine");
document.write(" It's stardate");
Stardate = Stardate / 3155760;
Stardate = Math.floor(Stardate);
Stardate = Stardate / 10;
Stardate = Stardate + "";
if(Stardate.indexOf(".") == -1){
Stardate = Stardate + ".0";
for(i = 1; i < = Stardate.length; i++){
if(Stardate.substring(i-1,i) == "."){
document.write(" point");
}else if(Stardate.substring(i-1,i) == "-"){
document.write(" minus");
for(j = 0; j < = 9; j++){
if(eval(Stardate.substring(i-1,i)) == j){
document.write(", and this is the Notes section.");

Tentaculat: Did the 'kfj' part of your old URL ever mean anything, or was it just complete randomness? I had always suspected that it was something obvious but that I was too thick to figure it out.

Tom Francis: Killing For Jesus, my Action Quake 2 clan. I was the knife-thrower. My flatmate and I chose it as our ISP username since it was the only identity we could think of that we had in common.

Seniath: ...266020496/

That's how it looks on my windows machine, again zoomed out to -100%. As you zoom in, the middle section shrinks, while the side panels grow a little to accommodate, and everything looks fine. I can't recall what happened when zooming in on Linux, suffice to say it was messy.

Jason L: Given that it's Linux, you probably just need to recompile your PoM.

Tim E: Hang on.

Third redesign of your fifth personal site, and you're calling it James 2.5. And you have the gall to be rude about my podcast numbering.

Damn you.

Tom Francis: Hey, I wasn't rude. I only relayed your choice of number. If that seemed rude to you, perhaps the numbering system struck you as a crazy one only a crazy man who's crazy would think up. I don't know.

Seniath: I think I'd have to see what it does at normal zoom to work out what needs fixing, if something needs fixing.

Jason L: Miniminibug: When live bookmarked on Win32 FF, the comments RSS items all display a generic blank page icon untiil visited, at which time they pick up the James logo. Frankly, getting the logo at all is the unexpected behaviour for me. I suspect that this is just some default in Wordpress and nobody cares; certainly I don't. But if you have poured heart and soul into your RSS icons, it hasn't worked.

Tom Francis: Nah, I'm not doing anything fancy there. The most effort I've put into favicons is making the reference absolute rather than relative - in James 2, single-post pages lost the favicon because they're treated as being in a subfolder.