The Velan Codex

Story

Quests

(Idea) Written like Data/Quests/prologue.json. Flags are integers; a missing flag reads as 0. The conditions use the flag, all, any and not forms the quest code already parses, and startWhen.

Main quest: Act 3

{
  "id": "act3",
  "title": "Corran",
  "description": "The warps have reached Sallowbank, and they come down the Sallow from Corran. Go upstream. Aske is coming with you, to the town she froze twenty years ago.",
  "startWhen": { "flag": "act2.done", "op": "!=", "value": 0 },
  "stages": [
    {
      "id": "glints_by_day",
      "text": "Glints are in Sallowbank by daylight. Help hold the village.",
      "completeWhen": { "flag": "act3.stage", "op": ">=", "value": 1 }
    },
    {
      "id": "aske_comes",
      "text": "Ask Aske to come upstream with you.",
      "completeWhen": { "flag": "act3.stage", "op": ">=", "value": 2 }
    },
    {
      "id": "sallow_warp",
      "text": "Look at the Sallow warp on the way upstream.",
      "completeWhen": { "flag": "act3.stage", "op": ">=", "value": 3 }
    },
    {
      "id": "reach_corran",
      "text": "Go to Corran; Aske comes with you.",
      "completeWhen": { "flag": "act3.stage", "op": ">=", "value": 4 }
    },
    {
      "id": "glass_remembers",
      "text": "Look into the glass of Corran.",
      "completeWhen": { "flag": "act3.stage", "op": ">=", "value": 5 }
    },
    {
      "id": "the_girl",
      "text": "Find the girl at the well.",
      "completeWhen": { "flag": "act3.stage", "op": ">=", "value": 6 }
    },
    {
      "id": "hour_stair",
      "text": "Climb the Hour Stair and find Keeper Hale.",
      "completeWhen": { "flag": "act3.stage", "op": ">=", "value": 7 }
    },
    {
      "id": "keep_the_hour",
      "text": "Get into the Keepers' archive.",
      "completeWhen": { "flag": "act3.stage", "op": ">=", "value": 8 }
    },
    {
      "id": "sealed_records",
      "text": "Read the sealed records, and decide who else reads them.",
      "completeWhen": {
        "all": [
          { "flag": "act3.stage", "op": ">=", "value": 9 },
          { "flag": "act3.records", "op": "!=", "value": 0 }
        ]
      }
    },
    {
      "id": "back_to_corran",
      "text": "Get back to Corran before the menders seal it again.",
      "completeWhen": { "flag": "act3.stage", "op": ">=", "value": 10 }
    },
    {
      "id": "colossus",
      "text": "Bring down the glint colossus at Corran's warp.",
      "completeWhen": { "flag": "act3.stage", "op": ">=", "value": 11 }
    },
    {
      "id": "two_halves",
      "text": "Trace the two halves of the Corran glyph together.",
      "completeWhen": {
        "all": [
          { "flag": "act3.stage", "op": ">=", "value": 12 },
          { "flag": "spell.learned.pavilion_wake", "op": "!=", "value": 0 }
        ]
      }
    },
    {
      "id": "unstill",
      "text": "Thread the door-mark into the Corran glyph.",
      "completeWhen": { "flag": "act3.stage", "op": ">=", "value": 13 }
    },
    {
      "id": "corran_wakes",
      "text": "See Corran wake.",
      "completeWhen": { "flag": "act3.done", "op": "!=", "value": 0 }
    }
  ]
}

The Undermere (fallen players)

{
  "id": "act3_undermere",
  "title": "The Undermere",
  "description": "The gates have started closing on you. There's a ladder under the Shardfield for people the gates close on.",
  "startWhen": {
    "all": [
      { "flag": "morality", "op": "<=", "value": -20 },
      { "flag": "act3.stage", "op": ">=", "value": 4 }
    ]
  },
  "stages": [
    {
      "id": "way_down",
      "text": "Find the way down near Corran.",
      "completeWhen": { "flag": "undermere.stage", "op": ">=", "value": 1 }
    },
    {
      "id": "smugglers_climb",
      "text": "The Hour Stair gate won't open for you. Take the smugglers' climb.",
      "completeWhen": {
        "any": [
          { "flag": "undermere.stage", "op": ">=", "value": 2 },
          { "flag": "act3.stage", "op": ">=", "value": 8 }
        ]
      }
    },
    {
      "id": "under_the_warp",
      "text": "See what is being dug out from under Corran's warp.",
      "completeWhen": { "flag": "undermere.stage", "op": ">=", "value": 3 }
    }
  ]
}

The long way up (redemption)

The stages read the same morality flag, so a player who fell only a little starts near the top: the first incomplete stage is the one they are on.

{
  "id": "long_way_up",
  "title": "The Long Way Up",
  "description": "Nobody takes the Atonement board. That's why it's still up. Every deed counts the same; the deeper you are, the more of them it takes.",
  "startWhen": { "flag": "morality", "op": "<=", "value": -20 },
  "stages": [
    {
      "id": "out_of_the_depths",
      "text": "Climb out of the depths: do one deed from the Atonement board, and one more for every 5 below -80.",
      "completeWhen": { "flag": "morality", "op": ">", "value": -80 }
    },
    {
      "id": "out_of_the_dark",
      "text": "Climb out of the dark: do 8 deeds from the Atonement board.",
      "completeWhen": { "flag": "morality", "op": ">", "value": -40 }
    },
    {
      "id": "back_to_the_gates",
      "text": "Earn your way back through the gates: do 4 deeds from the Atonement board.",
      "completeWhen": { "flag": "morality", "op": ">", "value": -20 }
    },
    {
      "id": "trusted_again",
      "text": "Be trusted again: two more deeds.",
      "completeWhen": { "flag": "morality", "op": ">", "value": -10 }
    }
  ]
}

Morality only moves in steps of 5, so the bottom of each band is −15 (Wary), −35 (Fallen) and −75 (Dark). The deed counts in the stage text are for a player at the bottom of the band that stage climbs out of: 8 deeds from −75 to −35, 4 from −35 to −15, 2 from −15 to −5. The log should show the real number left (floor((threshold − morality) / 5) + 1, since each stage needs morality strictly above its threshold), which needs the quest log to support a computed count (section 17).

Side quest: the bell-ringer

{
  "id": "side_bell_ringer",
  "title": "The Third Bell",
  "description": "Old Pim has rung the third bell of the Hour Stair for sixty years. His knees have stopped agreeing to it.",
  "startWhen": { "flag": "side.ringer.asked", "op": "!=", "value": 0 },
  "stages": [
    {
      "id": "ring_three",
      "text": "Ring the third bell on the hour, three times.",
      "completeWhen": { "flag": "side.ringer.rings", "op": ">=", "value": 3 }
    },
    {
      "id": "learn_toll",
      "text": "Let Pim show you the bell's glyph.",
      "completeWhen": { "flag": "spell.learned.toll", "op": "!=", "value": 0 }
    }
  ]
}

From Walkthrough: Act 3 › Quests