Deadly exits and deadly rooms
<direction> is deadly: <phrase> marks one fatal direction,
mirroring is blocked:. The fatal direction is deliberately not an exit
at all. Typing north (or n) never runs the going action: the command
is rewritten before validation into the internal death action, so
the player sees the death text and nothing else, no movement prose, no
refusal.
deadly: <phrase> on a room is the rarer, harsher form: every verb
except a safe allowlist (look and examine by default) is fatal,
including objectless ones like WAIT and INVENTORY that no per-entity
clause could catch. In TypeScript the underlying trait adds two more
dials: safeVerbs (verb names or full action ids, matched tolerantly)
and chance (0–1) for probabilistic hazards à la grue, rolled on the
engine's seeded RNG; a survived roll simply lets the verb run normally,
with no message. Neither dial is expressible from Chord today.
The author writes:
create the Basalt Ledge
a room
down to the Steam Vault
north is deadly: geyser-death
Black rock, slick with spray. The geyser mutters somewhere north;
a crevice drops away underfoot.
create the Steam Vault
a room
deadly: steam-death
Scalding fog, wall to wall. There is no air to spare in here.
create the player
starts in the Basalt Ledge
define phrases en-US
geyser-death:
The geyser chooses that moment. The column of boiling water makes
the question of footing irrelevant.
steam-death:
The steam finds your lungs.
The player who walks north sees no movement prose and no refusal, only the death text:
> north
The geyser chooses that moment. The column of boiling water makes the question of footing irrelevant.
The player who climbs down (a fresh game) arrives safely (looking is on the allowlist) and dies to the first verb that is not:
> down
Steam Vault
Scalding fog, wall to wall. There is no air to spare in here.
> look
Steam Vault
Scalding fog, wall to wall. There is no air to spare in here.
> inventory
The steam finds your lungs.
The deadly exit killed without going ever running; the deadly room let
LOOK repeat but made INVENTORY (an objectless verb no on clause could
catch) fatal.
One gap: the conditional form is deadly while <condition>: parses but
is not wired yet. This compiles clean:
create the Dam Top
a room
states: holding, burst
east is deadly while it is burst: flood-death
The dam hums underfoot.
The loader then refuses the story with: `is deadly while <condition>` is not wired yet — the conditional deadly exit is post-scope (mirror: role-bound trait clauses). Use an unconditional `is deadly:` or an `on going` clause with `kill the player when <condition>`. The
suggested kill the player when … clause is the kill the player pattern.