Photo by Amsterdam City Archives on Unsplash
I spent a happy week furnishing the next game. The colony you fight through used to be a working place — people lived and worked there before the swarm came — and empty rooms read as exactly what they are: empty test boxes. So I filled them. Bunks against the walls, steel lockers beside them, desks with dead terminals still flickering, oil drums in the corners, recharge panels on the walls. The rooms went from ‘level geometry’ to ‘somewhere’ almost overnight. I was thrilled.
And it was all a lie, because you could walk straight through every single piece of it.
This is the dirty secret of set-dressing: by default it’s a picture of furniture, not furniture. A drum that looks like four hundred solid pounds of steel is, to the game, nothing at all — you stroll through it like a ghost, and so do the monsters. It looks superb right up until the first time your shoulder passes through a locker, and then the spell breaks completely. Suddenly the whole world is cardboard. You can’t un-see it.
So the furniture had to become solid — properly solid, for you and for the things hunting you, so a drum is cover you can hide behind and a bunk is something a drone has to go around.
Here’s why I’d been putting it off. As I wrote about the other day, this game draws its entire world — walls, creatures, furniture and all — as maths on the graphics card, and that card is already working hard. The machine runs warm as it is. The obvious way to make things solid — hand all that geometry to a full physics engine — felt like exactly the wrong thing to bolt onto a renderer that was already at the edge.
I didn’t want a physics engine. I wanted the cheapest possible honesty.
The thing that saved me is that the furniture’s shape already exists. The renderer has to know precisely how big a bunk is in order to draw it. So rather than build a second, separate collision shape — the classic route, and the classic source of bugs — I derived a dead-simple box from the exact same description the renderer draws from, once, when the level loads.
After that, ‘is the player touching the furniture?’ is a few lines of schoolbook arithmetic: is this circle overlapping that box? It runs on the ordinary processor, costs effectively nothing, and never goes anywhere near the graphics card. Solid furniture, zero rendering cost. The fans didn’t even notice.
The part I’m quietly proud of is the one source of truth. The thing you see and the thing you bump into are generated from the same description. They physically cannot disagree. There’s a whole genre of game bug — the invisible wall, the hitbox that doesn’t match the model, the bullet that hits thin air — that comes entirely from the picture and the collision being two separate things that have drifted apart. If they’re the same thing, that bug can’t exist.
‘Make it all solid’ would be lazy, mind. Solidity is a design choice, not a default. The drums and bunks and lockers are solid because cover and obstacles make the fight better. The proximity mines you drop are deliberately not — you step over your own mines; the monsters have to blunder onto them, which is the entire point of a mine. So the rule isn’t ‘everything is solid’. It’s ‘everything is solid on purpose, and the exceptions are exceptions on purpose.’
Nobody is ever going to praise a game for having solid furniture. It’s not a feature; it’s an absence of a problem, and the best you can hope for is that no one notices. But they’d notice instantly if it were missing — the moment they walked through a wardrobe, some quiet part of their brain would file the whole game under ‘fake’.
That’s the job, really. The details are the software. A locker you can’t walk through is a tiny detail. It’s also the difference between a place and a backdrop.