Sticky state and clear
Some story commands change the stage for the whole session. Others last one moment. Omitting a key often means “leave as-is”; null often means “clear.” Getting that wrong is how backgrounds and shaders “stick forever.”
Most stories
- Default: stage changes persist until you change them again (or reset / new session).
- Use
"apply": "node_local"when a panel / layout / labelplate should revert after this beat. - Use
"reset": true(or an explicit clear) when a sticky override must go away. - For shaders and similar: omit = keep current;
null= clear. - Character
modulate/opacity/scaleare not sticky — set them again on eachcharcommand when you want them to carry on — Characters on stage.
Where this lives
| Idea | Surface |
|---|---|
| Sticky vs one-moment | Command meta apply |
| Undo sticky | reset: true on that command family |
| Keep vs clear | Absent key vs null (per field) |
| Session end | New game clears sticky stage |
{ "type": "panel", "preset": "whisper", "apply": "persistent" }
{ "type": "panel", "preset": "whisper", "apply": "node_local" }
{ "type": "labelplate", "reset": true }
{ "type": "bg", "value": "street", "shader": null }
apply
| Value | Effect |
|---|---|
"persistent" (default where supported) | Sticks until reset, overridden, or new session |
"node_local" | Applies for this moment’s cycle, then reverts |
Used on (among others): panel, labelplate, char_layout, obj, screen_shader. Shape: Shared shapes.
when is separate: skip this command if the expression is falsy (JSON / Mode B only).
Absent vs null (common sticky fields)
| Field family | Omit key | Explicit null |
|---|---|---|
bg / char / sprite shader | Keep current | Clear shader |
Node panel_shader | Clear (unlike sticky stage shaders) | Clear |
bgm / typing_sfx value | — | Stop / restore default |
screen_shader value | — | Clear post-process |
Always check the command’s detail page when unsure — a few surfaces treat absent differently (panel shader on the node is the common surprise).
How to undo
| Sticky thing | Undo |
|---|---|
| Panel preset override | Another panel command, or reset where supported |
| Labelplate override | { "type": "labelplate", "reset": true } |
| Char layout profile | { "type": "char_layout", "reset": true } |
Choice pack from choice_style | { "type": "choice_style", "reset": true } |
Theme mood from theme_style | { "type": "theme_style", "reset": true } |
| Shader on stage | Same surface with "shader": null |
Save / back: sticky stage is part of cumulative save; node_local is not meant to outlive the moment. Save, Back and story end.