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.
Pentadact: Dan – replied! Duncan – it’s the...
Zekiel: Bloody hell Tom. Just came across this post while...
Blaithik: Hey, what OSX does the game need minimum?
The way Heat Signature randomly generates its ships at the moment is very basic – I’m new to random generation, and I don’t polish or improve things until all the other systems are in.
Its process for the ship’s shapes is probably obvious from the video:
So they’re all symmetrical, and contain no gaps, holes or curves – conventional. You still get some interesting oddities – like the rare very wide ship that’s only one module long – but the pattern is pretty obvious.
For the layout of the internal rooms and corridors, I tried the same approach: just the simplest thing I could think of that would always work. But I think it’s harder to see the pattern in the results. Even knowing the rules, I still find layouts that surprise me.
Curious about this, I asked from the game’s Twitter account if anyone could guess what the rules were from the video. I got lots of good suggestions, and one or two got an individual rule right, but none that I saw got the whole process. Here’s what it does:
This ensures every room is connected to every other room, so it’s never impossible to get somewhere, but also makes it unlikely that the route will be direct. It makes a lot of wildly unrealistic corridor layouts, but I was surprised at how varied they felt.
I didn’t plan it this way, but it’s also quite similar to a Spelunky level laid down flat: a Spelunky level is a series of floors made up of chunks, and a randomly selected chunk will lead down to the next floor. It doesn’t guarantee every chunk is connected to every other, though, only the ‘leading down’ chunks.
I’ll change this a fair bit as I go – once guards are harder to get past, and there’s more incentive for stealth, I’ll open up multiple routes between rooms to give you more options.
I’ll also make the ship generation itself more varied, possibly by faction. At the very least I want ‘junk’ type ships that are cobbled together from old wrecks and not at all symmetrical. It’d also be interesting to have a type that are rotationally symmetric, or have a width-wise axis of symmetry instead. And I can vary module width and length independently, which’ll change the whole shape, look and feel both inside and out.
But it’s not worth tinkering with that stuff yet – after IndieCade, my next job will be to put ship systems in, so that rooms relate to ship capabilities and you can sabotage them. Once ship functions are tied to their layouts, there may be implications for ship generation I haven’t seen coming. More importantly, it’ll be a lot more fun to mess around with.
More Heat Signature
TylerFunk: I was gonna say that the ships reminded me of Spelunkys level generation. This looks really awesome already! Have you got an idea of the graphics yet, or has that not come up yet? What are you using to make this btw, GameMaker, Unity, or something else?
TylerFunk: Haha yeah just saw that about 5 minutes after I posted. Good luck on your games!
Robson: Very excited about this game and it's interesting to read the behind-the-scenes explanations of how it's being built. So-much-so that I converted your rules into code to make a spaceship generator. Here's an output from it:
I Ain't: That's rather interesting. I had to re-read your room-generating rules a few times before I realized that the space in the next row not being empty meant there was physically part of the spaceship there, and not that there was already a room there. Are there any rules on where the airlock is placed, besides the obvious "next to a room"?
Tom Francis: Ah, yeah. I guess I consider every module of the ship 'non empty' since the game treats a corridor as a type of room.
Airlocks: heh, they're... always on the left. The row is randomly selected, but they're always on the same side because it was sliiightly less code. Right now I can't foresee a problem with that, but it's easy to change if it does cause some unwanted trend.
superslug: looking at the top picture I am reminded of captain forever, was that in your head at all when you were making this?