Talking and focus
Lives in: character packs (drive on layers / pack root) and the story’s speakers
While text types, the player can drive mouth (and similar) layers. Focus can emphasise who the line is about. Speakers and (silent): Lines and speakers.
Drive reacts to live UI state (typing, focus, open choices). It is not the same as a bind, which follows a story flag — Reacting to flags live.
Mouth layers
"default": [
{ "path": "base.png" },
{ "path": "mouth_closed.png", "drive": "!typing" },
{
"frames": ["m1.png", "m2.png"],
"fps": 10,
"loop": true,
"drive": "typing"
}
]
Layer drive | When that layer shows |
|---|---|
"typing" | While the typing mouth driver is on for this character |
"!typing" | While it is off |
"focus" / "!focus" | While this character is / is not in the current focus set |
"choice_open" / "!choice_open" | While an enabled choice menu is waiting |
Text still types either way. (silent) on a speaker (or on one name in a joint line) turns that character’s typing driver off — mouths stay on the closed layer.
Voice beep is separate (game.json sounds) — Text speed and voice beeps.
Pack-root drive (focus and more)
At the pack root, drive can change the whole look while a driver is on — swap expression, tint, scale, nudge:
"drive": {
"focus": {
"use": "happy",
"priority": 10,
"scale": 1.05
},
"choice_open": {
"modulate": "#ddddff",
"priority": 5
}
}
| Field | Effect |
|---|---|
use | Switch to another expression while the predicate holds |
modulate / scale | Tint / size while active |
offset / rotation_degrees | Nudge / rotate while active |
priority | When several root rules match, higher wins for use; modulate/scale multiply; offsets sum |
transition (optional) | How the drive look eases in/out |
| You want… | Prefer |
|---|---|
| Mouth open/closed while typing | Layer "drive": "typing" / "!typing" |
| Slight “I’m the focus” scale / tint | Root drive.focus with scale / modulate (same expression) |
| Different art while focused / choosing | Root drive with "use": "other_expression" |
| A lasting expression for the scene | Story char / HANA [happy]: (command wins until you change it) |
Drivers are recomputed after load or Back — they are not stored in the save. Flag overlays stay on bind.
Joint lines
HANA [happy] & SORA (silent): — both in the group; only non-silent names get the typing mouth. One name plate for the group — Lines and speakers.
Usually you need
| Want | Do |
|---|---|
| Talking mouth | Layer with "drive": "typing" (+ closed with "!typing") |
| No mouth this line | NAME (silent): |
| Only one mouth in a group | Mark the others (silent) |
| Focus pop | Root "drive": { "focus": { "scale": 1.05 } } |