Patient
One of the people still breathing behind a shuttered door in Ashcross.
Patient
One of the people still breathing behind a shuttered door in Ashcross.
A patient is a nook, not a sprite: a straw pallet, a figure huddled on it, a quarantine sheet nailed across the front and drawn to one side, and a lantern on a hook beside the door. All four are children of the entity carrying this component, so moving the entity moves the whole doorway.
game.rounds places these; nothing else spawns one.
The moment, and the hold
Reaching one is a moment: come within reachRadius and they speak, once,
through NB.say — which means the line is heard if the audio slice has a voice
for it and printed on screen either way.
Treating one is a hold. Stand within treatRadius and move slower than
stillSpeed for NB.RULES.treatSeconds. The lantern's wick catches the moment
work starts and gutters back out if the physician steps away, so the progress is
readable off the street rather than off a bar. When the hold completes the sheet
falls in a heap, the figure sits up bandaged, and the lantern burns.
The lit lanterns are the progress display. Five of them lit is the round.
Fields
| Field | |
|---|---|
pid | stable id, carried in every event |
who | the name the field kit prints when they speak |
kind | 1..3 — which of the three painted figures |
reachLine / treatLine | what they say, coming and going |
reachRadius / treatRadius / stillSpeed | the geometry of the hold |
reached / treated / progress | live state; progress is 0..1 |
Methods
local c = entity.find("patient_vetch").component.get("Patient")
c:status() -- this patient
c:round() -- the whole round's blackboard
c:treatNow() -- finish the hold now
c:setPhase("play") -- drive NB.setPhase
c:raise("gate.reached", { x = 0, y = 0 }) -- raise an event on the live bus
round, setPhase and raise are the round's external control surface: a
scripted beat, a tool, or a test drives the round through them without reaching
into game.nb and without having to know which slice owns what.
Where the doctor is
Read off the doctor entity's transform — the local player's avatar where
there is one — rather than off NB.state.doctor. The world is always
multiplayer and the doctor is a PlayerPrototype the engine clones, so the
avatar is the body actually standing there; the speed the hold checks is
differenced from that same transform, which means the hold reads true whoever is
driving the body.
Scoped to this part · feeds back into the world's score.