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.
Jabberwok: I would say Dwarf Fortress is the closest project...
Jabberwok: I thought your observation about...
S-Guy: That looks (and sounds) absolutely fantastic! I was...
The next thing I wanna let you do in Heat Signature is take the helm of an enemy ship and fly it yourself. But right now, things go very screwy if you’re on a ship as it accelerates. So I’m redoing all the relative velocity code to make sure the contents of a ship stay stable while it’s jerking around.
I was testing the new code just now, and headed for a small ship to dock with it. It had rubbish heat sensors, so I came in pretty hot, and my ship was still cooling on its hull when I docked and snuck aboard. Unfortunately, at that exact moment, a much, much larger ship with much, much better heat sensors went past – and immediately spotted my still-warm ship latched onto the smaller one.
Ships have heat-seeking missile launchers now, of varying number, and when they attack they fire all of them. So as I’m dealing with the first guard in the small ship, four missiles slam into it. One destroys the module my ship was latched onto, sending it drifting into space. I run for the guard and knock him out, just as a missile destroys the room I was standing in a second earlier.
Two more rooms are blown off the smaller ship, leaving not much left. And once a space war starts, it doesn’t stop: the big ship might not have been aiming for the small one, but they’re enemies now, so they’ll shoot it out until one of them dies. And with four missiles per volley and only three rooms left on this ship, I don’t like our chances.
But it suddenly occurs to me that a ship doesn’t have to be obliterated to ‘die’. If you knock out the captain, its lights and sensors go out and other ships see it as defunct. The time between missile volleys is also randomised – somewhere between 3 and 6 seconds right now – so I had no idea if I had time, but I tried it anyway: I sprinted for the cockpit and smacked the captain unconscious. The lights went out, everything went quiet, and… nothing.
I zoomed out just in time to see the bigger ship’s sensor radius slip off screen as it cruised off.
I was still boned of course, stranded on this ruined ship without one of my own to leave in, but it felt like a fantastic moment. I’d never even thought of this as a tactic until I randomly found myself in a situation where it was the only way to survive.
More Heat Signature
Tom Francis: Just a note: these shots are not from this situation, I just had to find some of similar sized ships to give a rough idea.
noffle: How did you approach having bodies that are on ships? I manage to get around this on my (somewhat similar) game by having those bodies maintain their own set of coordinates relative to the ship they are on. This way ship velocity and acceleration doesn't mandate the ship's contents be recalculated and tried to be 'kept still'.
noffle: More: a quick hack that I've had great mileage with for generating interesting screenshots is having your game automatically take a screenshot every 1-2 seconds and dump it into a folder on my harddrive, sorted into folders by each play session. That way whenever really awesome gameplay moments like this happen it's a matter of perusing the session folder for a record of what happened.
Tom Francis: Things on ships keep a note of their 'Distance' and 'Direction' from the ship's center, and find their position from the ship's position. That's so that when the ship rotates, they can add their direction to the new angle to rotate smoothly with it.
The problem with the old system was that it didn't force all ships to update their position before all the ship contents did, so they wouldn't always be working from the right/same info.
I've fixed that now, so things stay nicely fixed to their ships even as they accelerate and rotate. All except the player - he's fine for movement and acceleration, but when the ship rotates he stays where he is. Obviously he shouldn't, but exactly how I adjust the position of everything else in the galaxy to compensate is tingling my brain a bit. I think I know how though.
noffle: Ah, I see. If you stored the ships' contents in local coordinates though (just an X and Y, where 0,0 is the middle of the ship, say), and computed the world coordinates on demand (e.g. when drawing), you wouldn't need an extra step to keep the contents 'in sync' with the owning ship. The nice thing here is that you can have the player and other bodies use the same movement/collision/whatever logic, being ignorant of if they're floating space or on a ship.
The prototype is looking fun! Looking forward to seeing it evolve. :)
Nicholas D.: Wow, that's bloody brilliant. I've been obsessively playing FTL lately and boarding is still my favourite way of winning fights. A game with a more involved version of it is right up my alley. You appear to be making a game tailored to my tastes. Can't wait to read more about it!
Brennan Segarra: WOW I'm so excited for this game. Seems like such a great systems set up to just generate tons of different kinds of moments like that.
Of course from this I ponder the idea of finding your ship or possibly finding a station to buy or make a new one. Even if not, still fantastically emergent game play from so early in development.
PilotDev: Awesome! I bet its really exciting to have a moment like that in a game that you created. I really like your development style and way of thinking. Keep the posts coming so us part time devs can continue living vicariously thru guys like you!
flaillomanz: Hmm... This also raises the question of what to do if you become separated from your ship.
Perhaps have your ship, presuming it didn't go "kablooie", emit a beacon that only you - as the owner/captain - can pick up? This way, you could use the ship you've just boarded to find and access your own ship.
Since docking might be a little difficult from that point on, maybe some sort of... limited space-walk feature could be planned, perhaps 10 seconds worth of fuel to jet around with... and a very limited air supply, since this could then be limited to being able to board ships nearby which have far too sensitive heat detectors.
Now look what you've made me do, I'm getting that warm and fizzy excitement just seeing these updates.
RetiredSphinx: Haha, sweet. I love moments like this in games. It's always cool to see enemies behave in ways that interact in ways you didn't expect. Especially if you're making the game yourself!
Flint: So obviously this amazing-looking game isn't near this stage, but now that you mentioned the heat seeking missiles, I was thinking about how to avoid the missiles.
I think that the player's default ship should either start out with or be able to purchase an ability that instantly freezes the engines, but locks movement and weapons for something like 5 seconds.
I don't know if you're planning on taking this game down the RPG road like Gunpoint (Which I would absolutely love), but maybe some unique abilities for the player ship might be pretty cool.
Flint: Also do you plan on an alpha or beta release?
Alex: The system is getting deeper and deeper, I like it :D
confuseddev: I find your game very cool and inspiring. One thing i can't wrap my head around is, how you do your collisions with the movement and especially the rotations involved?
Tom Francis: Cheers! Right now collision is done per-pixel against the rotated sprites, which is easy to code but insanely inefficient. At some point I'm going to write my own functions based on the knowledge that everything is a rotated regular quadrilateral - I'm told they're called oriented bounding boxes?
It's already nice and smooth with a few hundred modules zipping around. I'd expect custom scripts to be at least 10x faster, so I'm excited to see how far I can push it then.