Safe-Room Ambience

The key words MUST, MUST NOT, SHOULD, and MAY are used as in RFC 2119.

This page governs the ambient creatures and heal pads of the safe rooms — the start (sa1) and goal (ga1) rooms that never carry an enemy wave — plus one boss-arena flourish. It says which rooms get fauna, where the creatures stand, what they are forbidden to touch, and what the goal room's heal pad does.

The rule, from psz-re

The original authors its ambient creatures into exactly the rooms that terminate a section, per the decoded object tables (data/re_reference/room_objects.json, cross-checked against room_reference.json; psz-re data/object_placement_per_room.json, docs/godot-field-parity.md §8):

ObjectInstancesWhere
o0c_butterfly16valley (s01) sa1 + ga1, a+b — 2–8 per room, groups 0 and 4
o0c_dragonfly8wetlands (s02) sa1 + ga1, a+b — 2 per room
o0c_bird1paru's boss arena (s05z_na1) — a one-off
o0c_healhp14every area's ga1 carries exactly one (s01–s07, a+b)

So each area's safe rooms carry the area's creature instead of a wave: butterflies are the valley's, dragonflies the wetlands'. s03–s07 author no creatures in the decoded table (snowfield reads as ambient through weather instead) — and psz-godot MUST NOT invent fauna for them. Faithful means the barren areas stay barren; the heal pad, not invented animals, is what those rooms gain.

Placement

Inertness

An ambient critter is scenery that moves. It MUST NOT collide, interact, appear on the minimap, join the enemy or box counts, enter the cell save, or wedge the autopilot's nav backbone. There is deliberately no PSZ_AUTOPILOT_NO_* gate for it: nothing about it can obstruct, so there is nothing to gate.

The models are unlit single-frame billboards with no embedded animation — the original animates them in runtime code, and psz-re publishes positions and facings only. The motion is psz-godot's own and deliberately near-stationary (kion's playtest of the original: the butterflies "mostly stuck to one place") — a slight drift around the anchor and a gentle bob, never a path. The quads render as true camera-facing billboards, like the original's JIT sprites — the GLB bind poses are tilted planes that read tipped (or upside down) under any yaw-only facing — so the material carries BILLBOARD_ENABLED and the authored facing is not applied. The wing beat is, for now, a deliberately simple vertical squash — all faces visible, texture untouched — a placeholder by decision after prototyping the real mechanics (the mesh is two crossed quads; pose swaps, UV windows, and hinge folds were all tried) in the Flap Lab, which stays the workbench for the eventual fidelity pass. The quads are ~30 cm tall and centred on their origin, so an authored y of 0 would sink half the billboard under the floor — butterflies and the bird lift their anchor by 1 m, while the dragonflies are authored at 1.5 and keep it. Taste here is ours and labelled as such in ambient_critter.gd.

The goal-room heal pad

Since the goal-room terminal work, ga1 ends every generated a/b section — which is what makes its heal pad worth porting: a pad in every section's terminal, before the next one begins.