CONTENT CONTRACT · VERSION 1
cutscene
A personal cutscene with a declarative timeline.
Signature
{ camera_script: (ScriptId)?, cast: {CastMember}, duration_ticks: PositiveTicks, id: ContentId, kind: "cutscene", name: TextKey, places: {ScenePlace}, skip: CutsceneSkip, staging: {SceneStep}, timeline: {VisualStep} }Fields
| Name | Type | Meaning |
|---|---|---|
camera_script | ScriptId | Presentation script evaluated per frame of a viewer's cutscene (`VisualFrame -> VisualResult`); the timeline stands in wherever it cannot run. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: script |
cast | {CastMember} | NPCs that must be present, by unique role. Items: 0…16; Unique entries |
duration_ticks | PositiveTicks | Host duration of the cutscene. Range: 1…2147483647; Unit: tick |
id | ContentId | Package-qualified identity; unique within its declaring namespace. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$ |
kind | "cutscene" | Discriminant |
name | TextKey | Localization key for the displayed name. Length: 1…129; Pattern: ^[a-z][a-z0-9_]{0,31}:[a-z][a-z0-9_]{0,95}$; Reference: text |
places | {ScenePlace} | Places its staging uses. Items: 0…64; Unique entries |
skip | CutsceneSkip | Whether the player may skip it. |
staging | {SceneStep} | Staging of the cast and camera shots, played with the timeline. Items: 0…256 |
timeline | {VisualStep} | Camera, subtitle and fade steps; camera spans never overlap. The complete fallback of a camera script. Items: 0…256 |
Validated example
{
"cast": [],
"duration_ticks": 150,
"id": "core:hill_golem_coming",
"kind": "cutscene",
"name": "core:hill_golem_rises_name",
"places": [],
"skip": "allowed",
"staging": [],
"timeline": [
{
"at_ticks": 0,
"duration_ticks": 20,
"from_permille": 1000,
"kind": "fade",
"to_permille": 0
},
{
"at_ticks": 0,
"duration_ticks": 110,
"easing": "smooth",
"from": "core:valley/hill_golem_overlook",
"kind": "camera",
"to": "core:valley/hill_golem_arena"
},
{
"at_ticks": 15,
"duration_ticks": 60,
"kind": "subtitle",
"text": "core:hill_golem_rises_text"
},
{
"at_ticks": 78,
"duration_ticks": 60,
"kind": "subtitle",
"text": "core:hill_golem_rises_arena"
},
{
"at_ticks": 135,
"duration_ticks": 15,
"from_permille": 0,
"kind": "fade",
"to_permille": 1000
}
]
}