Building the first wave of a 390-prop catalogue
A catalogue of 390 prop ideas became 169 roots on 27 makers, and the first 34 are in the game: furnished bathrooms, rugs, paintings and themed chests.
The rooms on the first floor of the Breakout Site have furniture now. The two bathrooms, the fitness room and the security room used to be empty, and the chief scientist’s room had the same desk as every office. Floor 1 went from 123 pieces of 11 kinds to 339 pieces of 43 kinds, and the rooms have rugs under the furniture, paintings on the walls and chests made for the dungeon.
It isn’t finished. This is the first of seven planned waves, and I’ll say what’s left at the end.
Why did the rooms look so empty?
I drew a few notes in the game while walking around. The bathrooms, the fitness room and the security room were bare because the prop kit had no toilet, weights or console to put in them. One room just didn’t have enough props, so I asked for twice the density and twice the variety. I meant both the number of pieces in a room and the number of kinds, and I told it so when it asked. The chief scientist’s room needed to feel grander, with paintings and carpets. And the chests were a stock box with a lid, which I didn’t want in a dungeon with its own look.
At the same time I gave an agent a list of 390 prop concepts and asked for a plan before any building, because I didn’t want to build all of it at once.
Planning 390 ideas as 169 roots
The plan is a JSON file with one row per root. A root is one kind of thing, like a toilet or a rug, built once and then made in every theme and every state. Each row names the maker that builds it, where it goes (floor, wall or on a surface), its wave, and the room kinds that use it. A small Python script checks the file. It fails if any concept from my list isn’t in exactly one row, or one of the lists of things that aren’t props.
The counts come out as 317 of the 390 concepts in a root, and 73 that aren’t props at all. Those 73 are machines, creatures, traps, decals and the like, each sent to the part of the game that owns them. The roots sit on 27 makers, 10 that already existed and 17 new ones, in 7 waves.
I made a few rulings along the way. Clutter on a desk or shelf is separate small models the room-filling code places, so the desk is built bare. A new prop is made in all five themes and four states at once. There are no vehicles. The toys and the instruments of execution stay.
Building the makers
A maker is a function in the Blender kit that turns a set of numbers into a model. Wave 1 is 34 members. The first 19 use makers that already existed, and the other 15 use five new ones.
- The basin maker builds a pedestal and a hollow bowl as one lathe, with a profile that goes up the outside and down the inside. An oval bowl is a non-uniform scale.
- The chest maker builds a hollow box from four walls and an inside floor. The lid is flat or arched, and an open chest turns the lid about its back top edge.
- The rack maker builds end posts on feet with rails by the number of shelves, each tier stepped forward, and a load of weights or arms.
- The soft maker is a sheet 2 cm thick with a border, a field, a mark and a fringe. It makes the rugs.
- The panel maker is a frame, a ground and a picture of flat shapes. It makes the paintings.
For the first 19 I added 28 numbers to the kit’s table and set every default to what the piece already was. Then I checked that the 30 old members came out as the same bytes as the ones installed.
Every variant goes through the whole model pipeline: built, checked, built twice to confirm the bytes match, sheets made and looked at, and loaded in Godot. The install step goes through a gate that refuses a record that is incomplete.
Installing all five themes and four states of every prop would have meant 380 models for the first 19 alone. I decided only what a place uses gets installed. The install step reads the room-filling table, works out which pieces, themes and states it draws, and takes out the rest. That left 294 variants of wave 1 installed and 209 taken out.
Putting things on a wall and under a table
The room filler already placed furniture in a grid of 0.5 m cells, and every piece was a solid box on the floor. A rug and a painting aren’t. So at the end of laying a room it makes one more call, which adds pieces that take no floor.
A rug is placed as near the middle of the room as floor allows, with its long side along the room’s long side. It can’t overlap another rug, and furniture can stand on it. A painting goes on a bare span of wall where no piece stands and no doorway opens, never two within two cells of each other, at a per-piece mount height. Its back sits 0.1 m off the wall plane, because the wall panels have relief that stands into the square.
Neither marks any cells, and each gets its own random seed, built from the plan, the room and the word “under” or “wall”. So the furniture stands in the same places as before, and the rugs and paintings are added on top. Both are in the list of pieces the party can walk through. A few old tests assumed every piece was a solid box on the floor, so I had to teach them about a new key that says a piece is “under” or on a “wall”.
Steampunk pieces gave me one problem. Their relief dents went through the thin walls of the basin and the chest. I cut the dent scale to 0.35 for those two makers, and anything fixed to a wall is sunk 16 mm instead of 10.
Swapping two models for a chest
The game’s chest was never a model. The chest script builds a box, a lid that a tween swings, a tier strip and a latch lamp in code. A single imported model can’t swing its lid, so I chose to use two: one shut and one with the lid up. A small script stands both in the dungeon’s theme, hides the plain box and lid, and shows one or the other when the chest is opened. The lid snaps, and the loot screen covers the moment. Loot, keys and what opening does are exactly as they were.
If a chest has no theme, or its theme’s two models aren’t installed, it’s the plain box as before, and the second case logs a warning once.
What is still undone
Waves 2 to 7 aren’t built. A chest in a world scene, outside a dungeon made from a sheet, is still the plain box. The first eleven pieces of the old kit are outside the install rule. And some pieces don’t look right yet, which I’ve filed to look at again. A full build of all the variants takes about 25 minutes, so I build only what I change.
I tested the changes by running part of the test suite, 15 tests with 0 failed, plus the 11 checks in the film. I haven’t run the whole suite.