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...
(Screenshot by player QBAEY)
Floating Point is based on some grappling hook code I made for a game that I still plan to continue with some day. Since I was using version control for that, and hence for this, I have a log of every ‘commit’ I made during development: basically, all the times I felt my progress was worth backing up, and what that progress was.
With a bit of hackery, I’ve pulled out a list of those in chronological order to make a sort of diary of the game’s development, showing which days I worked on it and what I did. Obviously this contains some references to things only I’ll understand, but most of it’s in English, and it gives you an idea of how the game evolved and how long it took. I’ll highlight major developments or revelations, and add in when I tested and with how many people.
Floating Point was made in Unity, using Visual C# 2010 Express for code.
Generally the days when there are only a few commits, I probably only worked on it for an hour or two. The ones with about ten commits were probably full days.
Laugh! As I declare it basically finished on day 6.
Cry! As I fail to get a low pass filter working on a non-looping AudioSource!
Marvel! As I flounder to figure out how to ‘revert’ a crazy change, and have to revert my own revert before I can revert.
If you want a bit more context, I talk through most of this stuff in the Floating Point dev log videos I did as I went along.
Added water level, buoyancy works, kinda fun!
New arena, slightly reduced buoyancy.
Splash sounds and levelling out on surface.
Sound selection fixed
All sounds done.
Random level generation, looking nice and chunky and glitchy.
Colours, bounciness, bigger levels, density.
Velocity Points system working, feels great!
Linerenderer and help text both in.
Sounds added, ready to show.
Bar graphs working, feels nice.
Buttons to adjust density and decay. Music imported but not added yet.
Dynamic music in, no permission yet.
Quieter music, now with permission!
Prototype 3 – full credits, help text, adjustable density and decay.
Trying to get line to shade, abandoning
Rope now glows.
Fixed the jerky jounce exploit! Everything’s super smooth and nice now (if a little easy)
Background level and fog done, working on switching it in.
Level shuffling working beautifully, currently increases Decay.
Level transitions now beautiful, with sound.
Prototype 5, plus density starts low and builds.
Starts much easier
Filter is on audio listener now, splash restored.
Put grapple impact sound on its own audiosource and it STILL RANDOMLY FUCKING FAILS to apply the low pass filter.
Reinstated custom grpaple sound because fuck Unity’s ability to apply filters. Restored slack. Given music a minimum volume to come back from.
Variable cutoff with depth. Everything except difficulty choice and score bar in.
Easier and Harder switching working.
Boundary bouncing, everything kinda working now. Just need score readout/reset, maybe make sparse levels easier and less dark?
Fixed fog, better boundaries, level transitions look lovely, minimum rope length, took slack out again.
Score font in, now pauses on run?
Prototype 5 candidate: just needs integer pickup value and better help text presentation.
Actually we’re on Prototype 7. Tweaked some text and made decay rate kinder.
Bar values pop up, fade out nicely.
Awesome new font, regrettably named Dots All Folks.
Buttons coming along.
Menus working and looking nice
That’s it, I think we might be basically done. Release candidate?
Forgot to tidy up controls for launcher. Also I should credit the font creators.
Patch 1: custom cursor shows where you can grapple, much faster retract, much nice retract noise, much more reliable collision.
Whoops, cursor fixed.
Experimenting with left-click always casts grapple, disconnecting if nec.
Left click retracts but never disconnects, prefer this.
Massive cleanup, level transitions fixed, grapple never misses.
Credits in and control text tweaked, just needs a bit of rebalancing now.
Release Candidate 2 – balance tweaked, input menu tidied.
Restored points penalty for collisions – it got lost when we separated Accumulatedpoints from Velocitypoints.
Tweaks menu, with rope and bar stats.
Version released to SusDev beta list: saves and loads tweak files.
High score tracking and overlapping bars working, feels great.
Tinkering with level end GUI layout
High scores and bars working as fully as I intend to make them for now.
Version 11 (input stuff cleaned up, all warnings fixed)
Player is round, glow is much nicer, physics feel a bit better? Menu button width glitch fixed.
Adjustable level width and height, now saves to file.
Saves to file and resets defaults.
Level size tweaks complete, level regens as you cahnge them, score resets, etc.
Floor scales with water, but now I’m getting lighting glitches again.
Fixed glitchy lighting by making them ‘important’. Floor and water extend outwards, barrier is more generous, feels less claustrophobic.
130 height now default
Level height UI change, regen level on load custom tweaks file.
Shorter pickup sound seems to fix the crackling.
LEvel gen parameter tweaks, more space underwater, no tiny blocks.
Version 12: slightly taller levels, shorter underwater sound.
Trail is now dynamic and basically perfect.
Dimmed background lights, stopped rope from glowing.
Nutty idea – hitting blocks destroys them and their points bar. Needs to also destroy thier light, not destroy the floor, and ungrapple you if you’re attached.
Reverting breaking-blocks idea.
Revert “Reverting breaking-blocks idea.”
Revert “Nutty idea – hitting blocks destroys them and their points bar. Needs to also destroy thier light, not destroy the floor, and ungrapple you if you’re attached.”
Put the colour back in the rope, it makes it easier to see.
Floor removed, bouyancy increased, level boundaries more generous, feels lovely.
Limited bars per level, makes huge levels awesome, sparse levels great too.
Fills more of the underwater space.
Trails revealed at end of level – needs some tweaks though.
Tweaking trail reveal, but still no good solution – probably need two trail renderers. Take it out for now and do more important stuff first.
HUD-less screenshot function added, bars left display finished.
This time without committing the screenshots themselves.
Blerg, hadn’t saved Scene.
Control page tweaks, nicer score bar, surely some more important stuff. Bigger water. Less music cutoff.
First stab at random level configs. Some sure suck! Add debug stuff to tell you what the settings are on each.
Regen key in, density and size ranges tweaked, not really having a huge amount of fun.
30 bars per level, trailwidth correctly reset.
Level width fixed, fail-grapple crash fixed, lighting fixed, variables rebalanced, ‘next level’ key, thicker rope, bigger zoom.
Version 16 (input menu cleaned, fixed scores file startup recognition)
Sparser first level, Easier key removed, always-red rope is easier to see.
Fixed parameters not getting randomised, made rope clearer, made enter work on macs.
Heat Vision trails on end of level!
Lovely fadey outy whole-path trail at end of level.
Changed main trail to use white material and colour it red – bit brighter, smoother fade out, dunno if better?
Cool blue trace when complete level, looks super cool. Change your light and rope to match?
All colours go cool after completing a level, plus score loading is fixed.
Restored the old triple-transparent trail.
Tweaks now adjust average and variance of level height and density.
More consistently easy first level, code cleaned up to avoid public nuisance, level competion sound.
Credited Toyoto correclty.
Removed colordivisor warning, renamed mantissascollected.
Icon, beginnings of a tutorial level.
Refined tutorial level.
Reverted density tweak, player spawns a little higher
Dynamic retract speed working and feels really nice.
Lower max speed, no water impact penalty.
SteamCloud build: customise retract bonus, tweaked retract defaults, no water impact penalty, closer zoom level, dot always orange, probably some other stuff.
25 bonus retract kicks in linearly under barheight*2.
Minor cleanup to remove unused variables. This build deployed to Steam.
So in all, I worked on it 21 different days spread over about 5 weeks.
Lots of people have asked about how you get a free game on Steam. I can’t speak to Valve’s policy’s in general, I just asked them if they wanted it and they said yes. My understanding is that if you don’t already have a game on Steam, you need to go through Greenlight, as Zoe did with Depression Quest.
Lastly, CannonFodder_ on Twitter asked for tips on random level generation in Unity, so I pasted a cleaned-up version of Floating Point’s very simple level generator.
Hope some of that is of interest!
More Floating Point
VoidedWarranty: Just an opinion, but I feel when grappling is implemented in the as-yet-unnamed grappling game I feel that your grappling hook should be allowed to miss, to add a skill requirement. I quite like it's current state in FP, but I feel that a less zen game might benefit from having to be able to keep your head in a fall to maintain momentum.
Urthman: In your video diaries you talk about giving the player the option to either move on to a harder level or back to an easier one, but it look like you took that out on Day 15? Why? Is it possible to go back to the easier levels without messing with the parameters?
Tom Francis: Back then I thought of 'density' as the same thing as 'difficulty' - it is harder to move freely on dense levels.
The problem with that system was that past a certain point, denser levels just make the game less and less fun. I thought people would go denser and denser until they found their challenge level, then go back and forth in that comfort zone. But people saw it more as a series of levels they had to get through, so kept going denser until the game was just bad.
I tried renaming it to 'denser' instead of 'harder', but people didn't know what to do with that. With the Tweaks menu in, we already had a way for people to tune density to their preference, if they have one, so it was confusing and redundant to be asking them to change it at the end of every level.
So I just picked a density I thought the game was best at, and let the levels randomise it a little from there. So now you 'progress' to the next level, but the game doesn't get harder. Getting higher scores is the difficulty component, really, density should just be set to whatever the game feels good at.
Riley: Have you considered patching or updating the game at all since release?
I'm the creator of Steamworks.NET which is a Steamworks wrapper for Unity. I love the game and I love the general initiative that you've taken with it being free. I do a fair amount of freelance work implementing Steamworks in Unity games. Let me know if you would like the MonoBehaviors that I use for Achievements & Leaderboards for free.
Send me an email if you're interested in anything (It's on my github.)
What I’m Working On And What I’ve Done - a post on Tom Francis' blog: […] designer Made in: Unity Out on: Windows, Mac and Linux (2014) More info: trailer, dev log videos, development breakdown Get it: free on […]
funnygameboy: could you make this game multiplayer? :D
or just a local competitave game like giving it split screen.
i just feel that it would be awsome if we could test our skills against each other and the game would be much more interesting trying to snag the points from the other player :D
but this is just my humble suggestion :D
Thanks for listening :D
and i think your game is awsome just the way it is im like addicted to it :D