Birdoggydog's Builds

Hiding a locker's code on a dead NPC's body in Godot

A dead assayist now carries the code to the Breakout Site's wet locker on a slip, and two doors went back to the pick difficulties I drew.

The Waterlogged Locker in the Breakout Site has a code, 1205, and until now nothing in the world told you what it was. A dead assayist named Pell lies in the vat room where the party wakes, and searching him gives you a slip with the code on the back.

50 seconds in first person on floor 1. The body by the west wall, the slip read, the narrow way to the locker, the locker opening to 1205, then the security door at difficulty 20 opened by its code and by the Facility Key. The party is placed in front of each scene.

Putting the code on a body

I wanted the code said somewhere in the world, and I’d decided it should be on the corpse of a scientist who was slightly touched by the eldritch. The locker’s own note was already written by the assayist who weighed the meat, so he was the obvious one to carry it.

He’s a new NPC file with dead: true, so there’s no live character and no dialog. The schema still asks for a dialog, so he has one dummy line. He carries the slip the same way any NPC carries an item, which is what makes searching the body hand it over. The dungeon file seats him by adding an npc thing at (14,3), at the mouth of the narrow way, and a refinement that names him:

"added": [{"t": "npc", "x": 14, "y": 3, "name": "Assayist Pell"}],
"refinements": {
  "npc@14,3": {"npc": "breakout_assayist"}
}

The slip is a quest item with a read text, and an on_read action sets a flag, read_assayists_slip. The front is a weighing result of 40 g and a remainder that weighs nothing. The back, in pencil, names the locker and the code, and says the numbers have stopped staying where he put them. He counted 1205 steps to the bunks and there are eleven.

One test checks the walk. The party can get from where it wakes to his body, and on from there to the locker, with no door in the way, and nothing else sits on his square.

Why is the body purple?

I wanted him to look wrong without a line of dialog saying so. Every body in the game was washed with the same dark gray pallor, so I added two optional NPC fields, body_tint and body_tint_strength. A body without them gets the old pallor, which is 0.7 of (0.3, 0.29, 0.3). His is (0.33, 0.28, 0.4) at 0.72, which leans violet.

In npc_fates.gd, where a body is laid, the code reads the array and sets wash and wash_strength on the body, and npc_body.gd passes those to the tint call instead of the constants. It’s about five lines. A texture would have looked better, but bodies are still the NPC’s own model laid down and darkened, so a color override is the cheap version. After I saw the film I said the tints are fine for now, and that these alien stand-ins will be replaced with real bodies eventually.

Putting two doors back at the sheet’s numbers

When I worked out what a fresh party can pick last time, no party could do better than rank 1, so I’d set the two hard doors to difficulty 1 as a placeholder. I said yes to putting them back, so the security door on floor 1 is 20 again and floor 2’s cage is 10. I did it by deleting the difficulty refinement from each door, so they fall back to what the map drew. The other key doors stay at 1.

The default party’s best picker is still rank 1. At difficulty 20 that’s one try in ten, and the film shows it. The locker also stays pickable, so a party can skip the slip.

What I checked

The new test, slice_locks, has 77 checks and passed alone. It covers the party’s pick ranks, the body, the locker and the doors. On the merged branch, the nine tests with breakout, slice_story, lock, key or slice_locks in their names passed with 0 failures. I haven’t run the whole suite for this change.

Eight captioned frames from the film in two columns: the body in a violet cast, the slip read twice, the narrow way, the locked locker, its contents, the difficulty-20 door and the same door opened.
The film's frames in order, each with its caption.