Presence and quiet panels
Lives in: panel policy on pack / panel command / node fields
The routed panel is the one receiving this moment’s text. Other panels are non-talking — policy decides whether they hide or stay as a dim reminder.
Policy fields
| Field | Values | Default | Effect |
|---|---|---|---|
presence_mode | talk_only, visible_with_char, always_visible | talk_only | How strongly a panel stays when it is not routed |
non_talking_mode | hide, readonly_last_text | hide | What a non-routed panel shows |
readonly_style_key | style name | — | Look for readonly text |
Practical recipe: keep a side box around without the speaker → always_visible + readonly_last_text. Plain hide when unused → leave defaults.
Today talk_only and visible_with_char do not differ for show/hide; prefer always_visible when you need “stay up.”
Where policy is set
Order (later wins for sticky layers as noted in the live rules):
- Built-in defaults
- Character pack
ui.panel_policy - Sticky fields from a
panelcommand (presence_mode,non_talking_mode, …) — beat the pack - Node fields
panel_presence_mode,panel_non_talking_mode,panel_readonly_style_key— this node only
policy_reset or full reset on a panel command clears sticky policy.
Show hold
show: true on an off-route panel sticks: policy cannot instantly hide it until show: false, reset, or policy_reset. Use that for a deliberate “pin this box.”
Node hide_panel hides the routed panel for that node only — different from non_talking_mode: "hide" on other panels.
Text modes
Default is replace — each line clears the panel. To stack lines in the same box, use append — full fields and sticky vs node: Appending text.
Usually you need
| Want | Do |
|---|---|
| Hide unused boxes | Defaults (hide) |
| Leave last side line visible | non_talking_mode: "readonly_last_text" (+ often always_visible) |
| Pin a box against policy | Off-route panel with show: true |