Making the party at a juice vat on a new game
A new game now opens in the dark inside a vat and brings up the creation screen by itself. A new node and five small hooks in the level do it.
A new game now starts in the dark inside the Breakout Site’s juice vat, with a readout on the black screen. After 2.5 seconds the party creation screen opens by itself. Once I pick four, they climb out of a basin on the start square with nothing, and the corner of the screen tells them what to do next.
Why couldn’t a new game make a party?
I was playing the build and found a new game had no way to make one. It started in the Breakout Site on the island with an empty party, but the creation screen only opened from the Meat Machine in the old vat bay. That machine sits in the old hall at the island’s origin, about 2.8 km from the site, and it’s dead until a character in the old opening wakes it. So I walked around the birthing chamber with no party bar and no crosshair.
Tracing it showed the rest. The old wake-up still played its “VAT 07” text for 5 seconds, and the site’s start square was set by a deferred call from DungeonSites. No vat stood in the site at all. The game also refuses to save without a party, so there was no way to save my way around it.
Adding a VatBirth node to the level
I left the old opening alone, because a new game that isn’t started inside a dungeon still plays it. The creation screen is the level’s existing one, with its rules and default party. All the new node, VatBirth, decides is when the screen opens and what happens around it.
It’s a single node with five states: idle, dark, choosing, put off and climbing. The level, vat_bay.gd, got five small hooks:
_ready()asksbegin()before it plays the old wake-up.begin()says no unless the game was started inside a dungeon, so every other start is the same._objective()asks the node first, so the top-left line is the site’s._close_builder()asksput_off()first. A cancel only hides the screen and leaves the controls off._on_party_built()asksdeliver()first, so the Meat Machine doesn’t also hand over a party._build_vat_birth()creates the node and connects it to the save’sloadedsignal.
What happens between the dark and the climb
begin() stops the game clock, turns off input, and puts the camera low (0.45 m up, rolled 32 degrees, pitched down 6 degrees) so it looks like I’m slumped in juice. The overlay goes black with the vat’s words. A tween waits 2.5 seconds, then calls open(), which opens the creation screen and fades the black out over 1.2 seconds.
If I cancel, the black goes, the controls stay off, and a line says to press interact to choose. The party stays in the vat until four are chosen, and the interact key opens the screen again.
When I confirm, the screen fades to black over half a second with a second readout, “DECANT”. Then deliver() calls the level’s usual hand-over, so the default party is the same as the old path makes. A test checks that, field by field, against the development start. The dungeon’s start_with_nothing setting strips the gear, the Meat Machine is marked spent so it can’t make another party, and the clock starts. Then Party.wake_up(4.0) hauls the four upright over 4 seconds and gives the controls back. No game time passes at the vat, while the Meat Machine skips six hours.
Where do the words come from?
They’re a new opening field in the dungeon’s JSON file, with four texts: waking, decant, unmade and made. The schema got a dungeon_opening shape for it. A dungeon without one gets plain words from the script. The first readout in the Breakout Site’s file starts:
"waking": "BREAKOUT SITE // BIRTHING CHAMBER\nJUICE VAT 01 // FOUR VESSELS, WARM\n\noccupant: one. memory: none"
The two objectives are “Wake. Choose the four you will be.” while nobody is made, and “Climb out of the juice. Someone by the vat is still breathing.” afterward.
The vat is a stand-in
No vat stood on the start square, so VatBirth.stand_in() makes one in code, and it’s the one place a real model goes later. It’s a steel cylinder 2.2 m across and 0.45 m high with a thin disc of orange juice and an OmniLight3D in the same color (energy 1.3, range 6 m). It has no collision, because the new game and a wipe both put the party on that square. The real vat’s rim is 2.35 m, so a solid one would stand around the party.
The world’s streamer can build the dungeon again, so every half second the node checks whether the dungeon still has a child called JuiceVat and adds one if not.
What’s left?
- The vat has no collision and a low rim. I need to decide whether the real vat is solid and the party is placed beside it, or whether it stays something you walk through.
- The words are placeholders, and the creation screen’s title is still “MEAT MACHINE // CULTURE SELECTION”.
- The scientists have no part. Nobody stands at the vat, nothing is said aloud, and the waking has no sound. The hand-over plays the same hit sound the Meat Machine did.
- A game saved before its party exists can’t be made, so the node only handles a loaded one for safety.
The test for this, tests/new_game_party, has 63 checks and none failed when I ran it alone. I didn’t run the whole suite.