Fixing doubled inventory rows and a body that never stood up
Quest rows in the Godot item list drew their name twice, and the vat's body kept its head hung after the first juice. Both are fixed.
Two faults in the inventory screen are fixed. Rows for keys, notes and quest items drew their name twice, one copy under the other, so neither could be read. And the body in the inventory’s vat hung its head for good, even after the party had used the juice ampoule. I drew a note in the game about each.
Why did the quest rows overlap?
My note said the text on notes and quest items overlapped and was unreadable. Every row in the item list is a strip drawn over a Godot ItemList. The list keeps its own text but draws it in a clear font color, so only the strip shows. Quest items, notes and keys had been given a custom color on their list item so that the amber would show.
A custom item color is drawn in place of the list’s font color, so the clear color no longer applied to those rows. Their own text, “Facility Key [Keys]”, showed through under the strip’s FACILITY KEY. Gear rows had no custom color, which is why only these rows broke.
The fix removes the custom color and moves the amber into the strip. The strip’s name color used to be an inline expression in the draw function. It is now name_color(row): hot when chosen, amber for anything that cannot be given up, silk for the rest. The tests can ask it too.

Contact sheet of the film, each frame captioned.
Why did the body keep its head hung?
My second note said: “After using the juice ampule from carl the default animation should be ‘idle’ instead of this one with the head hanging”. The vat doll had always set its member view to the vat idle, where the body is asleep on its feet. That is right for a party newly woken in the vat, and wrong afterwards.
The doll now asks rest_now(). It answers with the vat idle only while the party still has vat legs, which last from the first waking until the first juice, and with the plain idle otherwise.
func rest_now() -> StringName:
var legs := VatLegs.of(self)
return MemberFigure.VAT if legs != null and legs.on else MemberFigure.IDLE
A second function, _stand(), applies the answer when a member is shown and on each 0.25 second sway tick. If the body is already standing and in its idle mood, it changes the figure’s rest animation and replays it. A body in the middle of a gesture is left alone. So a doll that is on the screen when the ampoule is used straightens up there and then, and everyone else in the party does too.
How were the fixes tested?
tests/inventory_screen now goes through every category tab, with and without a text filter, and fails on any row that has a custom foreground color. It also checks that the list font color is clear. It passes with 580 checks, and 6 fail with the row fix off. tests/member_pictures starts the vat legs and checks the vat idle, gives a member 40 XP, which is juice, and checks the plain idle after 0.6 seconds with the screen open. It passes with 141 checks, and 2 fail with the doll fix off.