All posts

Games

Game development

Stories

Happiness

Personal

Music

TV

Film

TOM FRANCIS
REGRETS THIS ALREADY

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.

Theme

By me. Uses Adaptive Images by Matt Wilcox.

Projects

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

Murder, She Wrote

The Formula For An Episode Of Murder, She Wrote

Heat Signature Wide 2

Heat Signature Needs An Artist And A Composer

Heat Signature Floorplans Header

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

Gunpoint Steam Workshop

Gunpoint Patch: New Engine, Steam Workshop, And More

Distance Header

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

The Magic Circle

Raising An Army Of Flying Dogs In The Magic Circle

Floating Point Blog Launch

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

Floating Sine

Drawing With Gravity In Floating Point

Fault

What’s Your Fault?

Hoplite banner

The Randomised Tactical Elegance Of Hoplite

Gone Point

Here I Am Being Interviewed By Steve Gaynor For Tone Control

Heat Signature Thumbnail

Heat Signature: A Game About Sneaking Aboard Randomly Generated Spaceships

GRappling Hook Thumbnail

The Grappling Hook Game, Dev Log 6: The Accomplice

Alien Swarm Heroics

A Story Of Heroism In Alien Swarm

FTL Story

One Desperate Battle In FTL

Spelunky Banner

To Hell And Back In Spelunky

Game vs story graph

Games Vs Story 2

Gunpoint Breakdown

Gunpoint Development Breakdown

Max Payne 3

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

This is how you die

My Short Story For The Second Machine Of Death Collection

Clouds

Not Being An Asshole In An Argument

Skyrim Diary - Frostmere

Playing Skyrim With Nothing But Illusion

Mainstream Games

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

A-Rock-and-a-Hard-Place-Trio-Jan

A Short Script For An Animated 60s Heist Movie

Dark Messiah

The Magical Logic Of Dark Messiah’s Boot

Arguing

Arguing On The Internet

Stealth Games

Why Are Stealth Games Cool?

Violence

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

Suspicious Manifesto

The Suspicious Developments manifesto

GDC

GDC Talk: How To Explain Your Game To An Asshole

Crosslink

Listening To Your Sound Effects For Gunpoint

Happiness

Understanding Your Brain

What Makes Games Good

What Makes Games Good

Seat Quest

A Story Of Plane Seats And Class

Beneath Suspicion

Avoiding Suspicion At The US Embassy

Open Worlds

An Idea For A Better Open World Game

Level Up

A Different Way To Level Up

BioShock Ending

How I Would Have Ended BioShock

Meet the Spy

My Script For A Team Fortress 2 Short About The Spy

Team Fortress 2

Team Fortress 2 Unlockable Weapon Ideas

Football Manager

Don’t Make Me Play Football Manager

EVE Assassins

EVE’s Assassins And The Kill That Shocked A Galaxy

GalCiv 2

My Galactic Civilizations 2 War Diary

Gnome

I Played Through Episode Two Holding A Goddamn Gnome

Machine of Death

My Short Story For The Machine Of Death Collection

AOL

A Woman’s Life In Search Queries

Second Life

First Night, Second Life

SWAT 4

SWAT 4: The Movie Script

Heat Signature, A Stealth Space Game About Temperature

Here’s the first video of Heat Signature, a temperature-based space stealth game I’ve been making the last two days. It’s about sneaking up on ships while keeping your ship cool enough to fool their sensors.

So you can jet around an infinite galaxy super fast, but your thrusters generate heat, and enemies can detect that from far away. The closer you want to get to them, the cooler you have to stay, and the more precise you have to be with your thrusters. And to take them out, you have to physically clamp onto their hull and shut down their systems.

GHGC is still my main project, I’m just taking a break from the brutal process of learning Unity to make something quick in Game Maker, where I already speak the language. How far I take this depends on how the next few features work out.

More

Marc Forrester: Name: Tom Francis
Occupation: Massive Nerd

Keep living the dream, Sir. So very envious.

Jason L: Looking good. Osmos, I-War, Starfarer, Torchships, Orbiter/KSP and Through a Scanner Darkly Soup Stock.

My next move would be an interstellar medium which generates an impact heat signature of its own with high velocities; make it vary in density, and suddenly you've got areas where you can't just out-G everyone and sail along invisibly.

If you wanted to throw in some Silent Hunter and cross-pollinate with GHGC, you could de-twitch the player ship and make the goal to artillery-game launch a grappling torpedo rather than collide yourself. The problem with that is it probably doesn't add much to the interception problem, which is already trivialised in any game where the avatar is fixed to the center of the screen.

Daniel H: This looks super fun. However, science-nerd glasses on: space, being a near-perfect vacuum, is an incredibly good insulator. This means that a hot ship in space will stay hot, taking much much longer to cool down than for example a hot ship in air or water. One of the big barriers for interstellar travel, in fact, is trying to figure out how to radiate heat away faster than your engines are generating it to stop from cooking yourself.

So just make sure you reference some scifi mumbo jumbo device to account for that.

John Ruble: This already looks quite fun! cough cough secret beta access list cough cough

As Daniel H said, heat dissipation in space is hard. Have you considered a maximum heat level beyond which the thrusters won't fire? It could be an upgradeable attribute. Then again, that might not be fun at all.

Micael: The problem that happens when you move to far, is likely a float imprecision problem, it's easily fixable by moving the world instead of the player, since the player stays always in the center (or very close to it), by doing that the float imprecision only happens when very far from the player view, as such it does not affect the player experience in anyway (depending on what you're doing there OFC).

Jason L: If one were aware that heat dissipation in space is slow and requires the scifi mumbo-jumbo known as 'radiators', one might make a videogame based around it as a primary mechanic and called, perhaps, Heat Signature.

So there's this long part in the video where he explains how he fixed the float imprecision problem by moving the world instead of the player...?

Pod: I get the feeling that you've talked about this idea in the past?

floatman: >So there's this long part in the video where he explains how he fixed the float imprecision problem by moving the world instead of the player...?


Even after making the 'game' move around the 'player', you will still have the problem with float imprecision. However now you will not see it on screen. e.g. The game will still need to track the velocities and positions of the enemies far away (assuming Tom wants any kind of persistence). Before this float imprecision was visible with the stars being "bands" the further you get from the middle. The off-screen problem will be that an enemy a billion meters from the player wanting to move 1m/frame in some direction won't actually move at all. Not in a gamemaker "not simulated in spelunky" kind of way, but a "big float + tiny float = exact same big float".

It's the same reason for the badlands in Minecraft.

Tom, do something like this in the monsters movement code
if (magnitute(move_vec) != 0.0f)
{
assert(position + magnitute(move_vec) != position)
}

and observe if it hits as you thrust far away.

A float only has 24 bits of precision at any 'detail' level.

16777216.0f = 16777216
16777216.0f + 0.2f = 16777216
16777216.0f + 1.0f = 16777216
16777216.0f + 2.0f = 16777218

As that number gets bigger the 'minimum increment' starts to get bigger

1125899906842624.0f = float 1.125899907e+015


(1125899906842624.0f + 40000000f) == 1125899906842624.0f
is true

(1125899906842624.0f + 4000000000f) == 1125899906842624.0f
is false

Scary, right?


1.0f + 0.00000003f = 1.0f
1.0f + 0.00000002f = 1.0f
1.0f + 0.00000001f = 1.0f

0.0002f + 0.00000002f = 0.0002000199893f
0.0002f + 0.00000001f =
0.0002000099921f
0.0002f + 0.00000003f =
0.000200030001f



If you want to know more read something like
http://floating-poin... ...t-gui.de/
or
http://docs.oracle.c... ...dberg.html



What can you do to solve this?
a) A "quick fix" is to simply use doubles instead of float, though that simply moves the problem from 2^24 to 2^53. That might be enough for you, but the problem will still exist. Will gamemaker allow you to do that?
b) Not have persistence on those really-far-away things / place a limit on your galaxy
c) avoid adding really small and really big numbers
d) perhaps used fixed point numbers, if you can? (i.e. do everything with integers). You need to decide what your "minimum" increment is. i.e. a 32bit int can represent 0 to 2^(30-1) with 1/4 increments.

Anonymous: Well yes it never really fixes the problem, float precision is always a problem, which is the reason why floats can't be compared the same way a integer can (not correcting BTW, just sort of adding to what you said).

The guys from kerbal space program did a talk on the solutions they used for the problems they had related to this (which were quite a few), if anyone is interested to see the talk http://www.youtube.c... ...XTxQko-JH0 .

Adding to the number of solutions, you can benefit from having a 2d game, and divide the world in "tiles", you would "line" this tiles on the unused dimension.
So if you were using X, Y for movement, then the tiles could be lined on the Z axis.
This solution would basically give you volume which OFC adds a whole lot of space to your space, and should be fairly simple to implement.

Micael: Ok, for some weird reason this didn't put my name like it usually does.

Gene Reyva: Gunpoint was fucking ace! Glad to see the next project is under way.

John H: Sir, we have the enemy's heat signature. It's just that we, we don't have one. Some Adventure Time for ya, now that's out of my system. I like how the momentum works, we don't get to a a lot of space games that follow Newton's Laws. Definitely a good start for a space game.

a teen who dreams about being an indie developer some day..: That is just so cool.. I love roguelikes and space and stealth! Never, ever thought the combination of those three would be so awesome.

I have been doing some little game projects by myself on LÖVE game engine, but I gotta ask - Where do you get your ideas and inspiration from? How did you come up with such a brilliant idea? I never have those ideas.. Can you give some tips about game designing? Finding that one mechanic the game could be based around?

Anonymous: This is a really neat idea. I'm not a fan of soft-serve scifi, so I could see the player clamping asteroids/debris to dissipate heat. Have you considered making the player's viewport similar to that of an actual radar?

Ben: This looks really interesting and totally unique. I would play it, keep at it sir!
Thanks

CannedLizard: Loving the looks of this. You nailed the sounds, especially the shutting-enemy-ship-down sound. Brilliant idea too, having to dock.

Any game ideas I work on hit idea-bloat way too fast, and I lack the mental discipline to keep them small. This idea seems really tight, however. Can't wait to see a final product!

Tom Francis: Cheers everyone!

The star-banding bug in the first few prototypes is fixed in the final one I show - it was just a bias in the way I was choosing new locations to spawn stars in new territory.

Tracking the motion of extremely distant objects isn't going to be important for the kind of game I have in mind, so I'm not worried about floating point stuff grinding them to a halt (if that is indeed how Game Maker stores co-ordinates - you don't choose or see data types).

A teen: this one came from thinking about the cool moment in sci-fi movies where the outnumbered ship has to land on an asteroid or similar and switch off its engines to avoid detection by more powerful pursuers. It seems like a lot of tension and drama in space stories comes from stealth, but there aren't many space stealth games.

CannedLizard: heh, this might be a little more bloated than the first video suggests, if the feature I'm working on pans out.

Michael Straight: I think this is a great idea for a game. Real-life physics, sadly, make the idea of stealth in space via heat management more fantastical than Gunpoint's robo-trousers:

http://www.projectrh... ...detect.php

Michael Straight: "As of 2013, the Voyager 1 space probe is about 18 billion kilometers away from Terra and its radio signal is a pathetic 20 watts (or about as dim as the light bulb in your refrigerator). But as faint as it is, the Green Bank telescope can pick it out from the background noise in one second flat."

But you should, of course, never let real-world physics objections scuttle a fun game mechanic.

Jason L: That's radio not heat, on a frequency carefully selected to be free from background noise, if it's pointed in exactly the right direction already, and the Green Bank Radio Telescope is not mounted on a spaceship.

I've read that article before, and many of the objections to it are unfounded, but it carries its own freight of sleazy question-begging.

AbeFM: I'm sure it was covered in the discussions over and Kerbal (as I have little-to-no programming experience, take it with a grain of salt) - but if you really cared, you could easily keep your small float "on the side", when it adds up enough to be significant, ie when
small_float + big_float != big-float
then you could increment big_float, That said, they'd have to be pretty far away before it matters. How many times the maximum view field do they need to get before they get wiggy?

Anyway, to combine some of the complaints above, and as a way to overcomplicate things, you could have radiators which are large compared to the ship (and therefore an easy target) which could get shot off without killing you.
Those could repair over time.

And of course, that leaves the option for 'flak', perhaps sacrificing super-heated bits of radiator - meaning you'll cool more slowly but you'll get out of one sticky situation. Then you could have thermal batteries (massive weights built into radiator structure which take a long time to cool but also are good for short bursts (basically this is already there except that they would make great "flak"), and let's not use the term "phase change" unless you just want to sound techy. :-)

Anyway, raiding other ships for their cooling fins gives me a reason to want to attack them. And I've overstayed my welcome. Cheers!

John: Dude, your last game just made third place!

http://www.youtube.c... ...C9cpC3q1NA

Chris Reeve: Out of the grappling hook game and this one, this one excites me more with the possibilities of how it could end up. But I love my space stuff.

Having to propel yourself at full speed then cut engines as you make your way into an enemy base to steal some secret space documents from evil space guys. Then totally Han Solo'ing it on the back of a Star Destroyer to escape again.

Marc: Has a similar kind of feel in the video as Captain Forever, albeit with a very different core mechanic. Looks good!

Gunpoint problem? Check for a solution or tell us about it on the Windows, Mac or Linux forum as appropriate!

For questions about what tools I used and when things are out and what platforms they're coming to, see here.

URLs get turned into links automatically. You can use <i>HTML</i> but not [b]forum[/b] code. If your comment doesn't show up, e-mail me - the spam filter's just detained it for questioning.