Dressing the surgery with pipes, vats and floating bodies
The room where a new game's four characters are made now has its real models, a pipe apparatus along one wall, spare bodies in tubes and tables that tip.
The creation room, which I call the surgery, now stands its real models in place of the boxes and drums that were holding their spots. Each of the four stations has a table, a yellow feed tube, a shredder, an operating lamp, a drip stand and a tray on a trolley. Along the north wall one apparatus runs through a small juice vat, a manifold, a pump and a reservoir, with a header pipe 3.5 m up over four body tubes. Each tube has a spare body floating in it, an elf, a goblin, a dwarf and a lizard person, bobbing. I watched the film and said to land it as it was.

The room from the ceiling camera. Yellow feed tubes come in at an angle from the four corners.
This is what I asked for after the first film of the room. I said the table should tip to dump the character, and the room needed large machinery, several vats of juice and surgical equipment. I wanted the pipes to join into one big apparatus, a few tubes to have floating bodies, and every pipe to come in at an angle from a corner, because the ones on the right side touched the laser wall. I’d also asked for the juice vat to move to the middle of the left wall.
How does a model go where a model has no box to sit in?
A prop is one joined mesh, so anything that moves or hangs off it is a separate model fitted to a named socket on another. The prop kit writes each model’s sockets into its manifest, each with a name, a position, the direction it faces, a radius and a size. A machine’s sockets are its ports. ModelSockets reads them and has a few operations that the room is built from. One picks a socket by name. One returns the transform that stands a model’s socket on another’s, facing it, which is how a pipe end goes on a port. One hangs a piece on a pivot at a socket and swings it about the socket’s direction.
The table is two models. The base has sockets called hinge and rest, the top has hinge and body, and the top hangs on a pivot at the base’s hinge. The mirrored station turns the whole base half around, so the same top tips the other way.
How is a pipe run drawn between two points?
PipeRun.lay takes a list of points and a kind, either “pipe” (0.09 m bore, the juice pipe on every machine port) or “tube” (0.46 m, the body tube). It drops repeated points and points that sit on a straight line between their neighbors. Then it looks at the turn at each point left. A turn within 1.5 degrees of 90 takes the elbow model, and within 1.5 degrees of 45 it takes the bend. Any other turn has no model, so it goes in a list of problems and is left bare.
A fitting takes room out of the straights on either side of it. Its two legs come from its own sockets a and b. With into the way the pipe enters at a, out the way it leaves at b, and c the dot product of the two, the leg after the point is the part of the a-to-b vector along out, corrected by c, divided by 1 - c * c. The leg before is what’s left of that vector along into. The fitting’s frame is laid on the run’s turn so that socket a sits that far short of the point. The straights are the 2 m model scaled along its length to fit between fittings, so the run goes through its points exactly. A straight too short for its fittings is reported too.
Where does the apparatus come from?
All of it is data. content/creation.json has a dressing block with the room’s north-west corner as origin, a list of machines with a position and a yaw, a list of body tubes with a position, a race and a turn, and a list of runs.
"machines": [{"name": "Pump", "piece": "pump", "at": [17.73, 1.45], "yaw": 0}],
"runs": [
{"how": "corner", "port": "JuiceVatSmall1.in", "corner": [0, 0]},
{"how": "link", "from": "JuiceVatSmall1.out", "to": "Manifold.in"},
{"how": "over", "from": "Manifold.out", "to": "Pump.in", "high": 3.5, "along": 0.85}
]
There are three rules for drawing a run. “link” joins two ports that face each other at different heights, with elbows and a riser or with bends and a slant. “corner” goes straight out of a port and then at 45 degrees across the floor into a corner of the room. “over” goes out of a port, up to a height, level over to the other port and down into it. The four stations’ feed tubes use the same code from corners listed in tube_from, which also keeps them off the laser walls. To add a vat I add an entry to machines and an entry to runs.
What makes a body float?
Each tube is its model, a clear green cylinder for the juice at the model’s glass socket, and a spare puppet of the right race with its animation held, standing on the body socket. Every frame, on the real clock, its height is its rest height plus a sine wave of 0.07 m with a 6 second period, and it rolls by up to 0.03 radians with a 9.6 second period. It’s only a look, so nothing in the game waits on it.

Two of the four body tubes up close, with the header pipe above.
How does the table tip?
CreationProps.tip turns the top’s pivot and remembers the angle. The shredder step of the scene tweens it up to 25 degrees over 0.39 s, holds for 0.16 s and brings it back level over 0.34 s, so it’s level again before the next body arrives. I looked at it in the film and said to keep it as it is.

Mid dump. The table’s top is tipped and an elf is sliding toward the shredder.
What broke?
The Breakout Site’s walk test failed on main after the merge. I’d moved the juice vat, which sent the party’s route through the surgery, along row 2 and then down column 19. Two things were in the way, each trolley at the foot of its table and the feed tube’s solid, a 1.0 m box under the mouth. I moved the trolleys to the side of their tables and cut the tube’s solid to a 0.7 m box under the low end of the rails. I also added a check that pushes a body the party’s size through those squares.
The vat has a similar story. I’d asked for it in the middle of the left wall, but that square is the secret door’s, so it’s one square north. I kept that.
What’s still a stand-in?
There’s no tee model, so where a tube’s riser meets the header the two pipes pass through each other. The feed tube’s foot has no tray model, so two rails of juice pipe carry the body. Two of the three small vats stand with no pipes because each has one in and one out, and the chain already uses one. Nothing but the stills checks that each table’s close camera view is clear of the new things. And I said the room’s models are the new ones for now.
How is it checked?
tests/surgery_dressing passes 195 checks, and 197 with the walk check. Its checks cover no stand-in left in a station, a yellow feed tube from each corner, no pipe within 0.5 m of a laser wall, every run whole, the apparatus joined in one chain, three or more bodies afloat and the table tipping and ending level. The suite of 8 name words I ran on the merged result was 15 tests with none failing.