Arcs

arcs

arcs is a keyed section that Voyage describes in one line: "Authored narrative arc definitions keyed by stable arc id." It has no authoring reference and no editor surface. This page records the fields the schema defines and the two things the engine is observed to do with them, and marks everything else as undocumented.

Size limits

No character-length caps for this section.

Schema

json
{
  "arcs": {
    "<key>": {
      "id": "string",
      "theme": "string",
      "surfacePremise": "string",
      "expectedConclusion": "string",
      "status": "active | resolved | dormant",
      "minQuestsForConclusion": "number",
      "title": "string",
      "secrets": [
        "string"
      ]
    }
  }
}

Example

json
{
  "arcs": {
    "the_drowned_bell": {
      "id": "the_drowned_bell",
      "title": "The Drowned Bell",
      "theme": "A sunken shrine is waking, and the tide answers it",
      "surfacePremise": "the bell beneath the harbour still rings on some nights",
      "expectedConclusion": "The shrine is either sealed for good or allowed to finish waking.",
      "minQuestsForConclusion": 3,
      "status": "active",
      "secrets": [
        "The harbourmaster has been muffling the bell for years."
      ]
    }
  }
}

Warning (undocumented and not exposed): Voyage documents this section with one line, Authored narrative arc definitions keyed by stable arc id. There is no template, no record schema, and no authoring reference for the fields, and the section is not reachable through the editor's menus. Everything else on this page is read from the extracted schema and from the shipped engine, and describes only what can be observed there.

This page exists so the section is not a blank space that gets filled in with guesses. What arcs are intended for is not stated anywhere, so this page does not say, and the fields nothing is seen to read are marked as such rather than given a plausible purpose.

Fields

id

The arc's identifier.

Two places use it. The generated trigger described below is named arcSurfacing_ followed by this value. And a quest's runtime arc id is used as a key into arcs, so the value a quest carries is matched against this one.

theme

A string. When surfacePremise is absent, the engine substitutes theme in its place before building the trigger, so theme becomes the text read into the condition described below.

What theme does when surfacePremise is present is not documented.

surfacePremise

A string, read verbatim into the generated condition described below as It is mentioned or revealed that <surfacePremise>. The value is placed into that sentence unchanged, so the bell beneath the harbour still rings on some nights produces a readable condition and The Drowned Bell arc does not.

The value is trimmed first. If nothing remains, no trigger is produced.

expectedConclusion

A string. Nothing that reads it appears in the schema or the engine, and no authoring reference describes it. It is part of the section and accepted, but what it changes is undocumented.

minQuestsForConclusion

A number. Nothing that reads it appears in the schema or the engine, and no authoring reference describes it. It is part of the section and accepted, but what it changes is undocumented.

title

A string. It appears in the quest label described below. When the label is produced and title is absent, the text used is Storyline.

secrets

Array<string>. Nothing that reads it appears in the schema or the engine, and no authoring reference describes it. It is part of the section and accepted, but what it changes is undocumented.

status

One of active, resolved, or dormant. Nothing that reads it appears in the schema or the engine, and no authoring reference describes it. It is part of the section and accepted, but what it changes is undocumented.

The generated trigger

An arc produces a trigger, built from its id and its premise:

  • its name is arcSurfacing_ followed by the arc's id
  • recurring is false
  • it holds one condition, of type story, whose query is It is mentioned or revealed that followed by the premise
  • its effects list is empty

The premise is trimmed before the trigger is built, and if nothing remains the trigger is not produced at all. surfacePremise supplies the text, or theme when surfacePremise is absent.

A story condition is one of the two semantic condition types. Whether this generated trigger is counted alongside authored triggers is not documented.

The quest label

A quest carries an arc id, a position within the arc, and the arc's escalation as it stood when the quest was created. None of the three is an authored field: they are absent from the quest fields an author writes, and are set during play.

When a quest has an arc id, and the arc that id resolves to has recorded a surfacing time, a label is produced from the arc's title and the quest's position. Where title is absent, Storyline is used instead.

What the engine records

An arc gains six fields during play that are not authored: a creation time, a surfacing start time, a surfacing time, a resolved time, an escalation level, and a last-update time.

The surfacing time is the one with an observable use, in the quest label above. What sets any of the six, and what the escalation level counts, is not documented.

Authoring notes

These follow from the behaviour above and nothing further.

  • Write surfacePremise to complete the sentence it is placed in. The text is inserted unchanged after It is mentioned or revealed that .
  • A blank premise produces no trigger. If surfacePremise and theme are both empty, nothing is generated for the arc.
  • title is player-facing wherever the quest label is shown, and Storyline stands in when it is missing.

The remaining fields are accepted and stored. Because nothing describes what reads them, this page cannot say what writing them achieves.