Investigation Quest Example

A mystery campaign demonstrating DC checks, clue gathering, branching investigation paths, and consequences for failed skill checks. Every field below is one the app actually reads.

Verified against reality: uses name (not title), levelRange as an object, episodeNumber + title on the episode, quests live in questTemplates (no top-level quests array or status field), and every readAloud uses the real <div class='read-aloud'> wrapper.

Campaign Overview

The Missing Merchant

Level: 2-4

Duration: 3-4 sessions

Synopsis: A wealthy merchant has vanished. The party must investigate witnesses, search for clues, and solve the mystery before it's too late.

Features Demonstrated:

  • DC checks gating progression
  • Multiple investigation paths
  • Clue gathering mechanics
  • Success and failure branches
  • Time-sensitive objectives
  • Multiple suspect system

Complete Campaign JSON (Excerpt)

{ "id": "missing-merchant", "name": "The Missing Merchant", "description": "A mystery investigation where the party must find a missing merchant before time runs out.", "levelRange": { "min": 2, "max": 4 }, "episodes": [ { "id": 1, "episodeNumber": 1, "title": "The Investigation Begins", "questTemplates": [ { "name": "Find the Missing Merchant", "type": "investigation", "description": "Locate Aldric the merchant before it's too late", "rewards": { "gold": 200, "xp": 500 } } ], "scenes": [ { "sceneId": "ep1-scene1", "title": "A Worried Wife", "readAloud": "<div class='read-aloud'><p>Lady Mira bursts into the tavern in {nearestBurg}, her face pale with worry.</p><p>'My husband, Aldric, left for {randomBurg:maxPopulation=300} three days ago. He should have returned yesterday. Please - you must help me find him!'</p></div>", "choices": [ { "text": "Accept the quest to find Aldric", "nextScene": "ep1-scene2", "questActions": ["accept:Find the Missing Merchant"] }, { "text": "Decline politely", "nextScene": "ep1-scene1-decline" } ] }, { "sceneId": "ep1-scene1-decline", "title": "Not Your Concern", "readAloud": "<div class='read-aloud'><p>Lady Mira's shoulders sag with disappointment, but she nods and leaves to seek help elsewhere.</p></div>", "choices": [] }, { "sceneId": "ep1-scene2", "title": "Gathering Information", "readAloud": "<div class='read-aloud'><p>Lady Mira provides what details she knows: Aldric left {nearestBurg} three days ago, traveling to {randomBurg:maxPopulation=300} to buy silk. He took the main road and traveled alone. He's never been this late before.</p><p>Where do you begin your investigation?</p></div>", "dmNotes": { "information": { "readily_available": ["Aldric left three days ago", "He was headed to buy silk", "He traveled alone by the main road"] } }, "choices": [ { "text": "Search Aldric's home for clues (Investigation)", "nextScene": "ep1-scene3-home" }, { "text": "Question the gate guards (Persuasion)", "nextScene": "ep1-scene3-guards" }, { "text": "Visit the tavern to gather rumors (Insight)", "nextScene": "ep1-scene3-tavern" } ] }, { "sceneId": "ep1-scene3-home", "title": "Searching the Home", "readAloud": "<div class='read-aloud'><p>You search Aldric's study.</p></div>", "dmNotes": { "skillChecks": { "investigation_dc_13": "Success finds a threatening letter; failure finds nothing useful." } }, "choices": [ { "text": "DC 13 Investigation - Success: Find a threatening letter", "nextScene": "ep1-scene4-clue1" }, { "text": "DC 13 Investigation - Failure: Find nothing useful", "nextScene": "ep1-scene4-noclue" } ] }, { "sceneId": "ep1-scene3-guards", "title": "Questioning the Guards", "readAloud": "<div class='read-aloud'><p>You approach the gate guards. They're reluctant to talk.</p></div>", "choices": [ { "text": "DC 12 Persuasion - Success: Learn about a suspicious stranger", "nextScene": "ep1-scene4-clue2" }, { "text": "DC 12 Persuasion - Failure: Guards refuse to cooperate", "nextScene": "ep1-scene4-noclue" } ] }, { "sceneId": "ep1-scene3-tavern", "title": "Tavern Rumors", "readAloud": "<div class='read-aloud'><p>You listen to the tavern gossip.</p></div>", "choices": [ { "text": "DC 11 Insight - Success: Hear about recent bandit activity", "nextScene": "ep1-scene4-clue3" }, { "text": "DC 11 Insight - Failure: Only hear useless gossip", "nextScene": "ep1-scene4-noclue" } ] }, { "sceneId": "ep1-scene4-clue1", "title": "The Threatening Letter", "readAloud": "<div class='read-aloud'><p>Hidden in Aldric's desk, you find a crumpled letter: 'Your debts will be paid, one way or another. Meet me at the old mill outside {randomBurg:maxPopulation=300} if you value your life.' It's unsigned, but the handwriting is distinctive.</p></div>", "choices": [ { "text": "Travel to {randomBurg:maxPopulation=300}", "nextScene": "ep1-scene5-travel" } ] }, { "sceneId": "ep1-scene4-clue2", "title": "The Suspicious Stranger", "readAloud": "<div class='read-aloud'><p>The guard recalls: 'Three days ago, a cloaked figure asked about Aldric. Wanted to know when he'd be leaving town. Had a scar across his left eye.' This sounds like someone was tracking Aldric's movements.</p></div>", "choices": [ { "text": "Follow Aldric's planned route", "nextScene": "ep1-scene5-travel" } ] }, { "sceneId": "ep1-scene4-clue3", "title": "Bandit Activity", "readAloud": "<div class='read-aloud'><p>A merchant tells you: 'Bandits have been hitting the road to {randomBurg:maxPopulation=300}. They're holed up in {nearestDungeon:type=Cave}, I hear.' Could Aldric have been ambushed?</p></div>", "choices": [ { "text": "Head straight to {nearestDungeon:type=Cave}", "nextScene": "ep1-scene7-rescue" } ] }, { "sceneId": "ep1-scene4-noclue", "title": "Dead End", "readAloud": "<div class='read-aloud'><p>Your investigation yields no useful information. You've wasted valuable time. You'll need to try a different approach.</p></div>", "choices": [ { "text": "Try another investigation method", "nextScene": "ep1-scene2" }, { "text": "Just follow the road to {randomBurg:maxPopulation=300}", "nextScene": "ep1-scene5-travel" } ] }, { "sceneId": "ep1-scene5-travel", "title": "On the Road", "readAloud": "<div class='read-aloud'><p>You travel the road toward {randomBurg:maxPopulation=300}.</p></div>", "choices": [ { "text": "DC 14 Perception - Success: Spot signs of a struggle", "nextScene": "ep1-scene6-ambushsite" }, { "text": "DC 14 Perception - Failure: Miss the clues and arrive at {randomBurg:maxPopulation=300}", "nextScene": "ep1-scene4-noclue" } ] }, { "sceneId": "ep1-scene6-ambushsite", "title": "The Ambush Site", "readAloud": "<div class='read-aloud'><p>You find an overturned cart, bloodstains, and tracks leading toward {nearestDungeon:type=Cave}. Aldric was taken alive - the tracks show him being dragged, not carried.</p></div>", "choices": [ { "text": "Follow the tracks to {nearestDungeon:type=Cave}", "nextScene": "ep1-scene7-rescue" }, { "text": "Return to {nearestBurg} for reinforcements (takes time)", "nextScene": "ep1-scene7-toolate", "questActions": ["fail:Find the Missing Merchant"] } ] }, { "sceneId": "ep1-scene7-toolate", "title": "Too Late", "readAloud": "<div class='read-aloud'><p>By the time you return with reinforcements, the trail has gone cold. Lady Mira's hope fades with each passing day.</p></div>", "choices": [] }, { "sceneId": "ep1-scene7-rescue", "title": "The Rescue", "readAloud": "<div class='read-aloud'><p>You infiltrate {nearestDungeon:type=Cave} and find Aldric tied up in a back chamber. The bandits are counting his stolen goods.</p><p>After defeating the bandits, you free Aldric. He's weak but alive.</p></div>", "dmNotes": { "enemies": { "bandits": { "count": 6, "hp": 11, "ac": 12, "tactics": "Fight to protect their captive and loot" }, "bandit_captain": { "count": 1, "hp": 65, "ac": 15, "tactics": "Focuses the biggest apparent threat" } } }, "choices": [ { "text": "Return Aldric to {nearestBurg}", "nextScene": "ep1-scene8-success", "questActions": ["complete:Find the Missing Merchant"] } ] }, { "sceneId": "ep1-scene8-success", "title": "Mission Accomplished", "readAloud": "<div class='read-aloud'><p>Lady Mira weeps with joy as you return her husband safely.</p><p>'I don't know how to thank you,' she says, pressing a pouch of gold into your hands. 'You've saved his life.'</p></div>", "choices": [] } ] } ] }

Key Features Explained

1. Multiple Investigation Paths

Scene 2 offers three different starting paths:

Each path provides a different clue, creating replayability.

2. Success vs Failure Branches

Every DC check has two paths:

Success → Gain clue → Progress forward
Failure → No clue → Return to Scene 2 or continue blind

3. Time Pressure

Some choices waste time, triggering failure:

4. Dynamic Location Network

Notice the placeholder pattern:

{nearestBurg} // Home base
{randomBurg:maxPopulation=300} // Destination
{nearestDungeon:type=Cave} // Bandit hideout

Creates a believable geography: home → road → destination → dungeon.

Design Patterns

Pattern 1: Clue Convergence

All clue paths eventually lead to the same location (the dungeon):

Home search → Threatening letter → Dungeon
Guards → Scarred man → Dungeon
Tavern → Bandit rumors → Dungeon

Pattern 2: Skill Check Gating

Use DC checks to create branching without blocking progression:

Success → Easy path (found ambush site)
Failure → Hard path (arrive at town, more investigation needed)

Pattern 3: Time as Resource

Make certain choices cost time:

Quick decision → Rescue in time
Cautious decision → Too late, quest fails

Customization Ideas

Add Red Herrings

Create false leads that waste time:

{ "text": "Investigate the rival merchant", "nextScene": "ep1-scene4-redherring" }

Add Multiple Suspects

Create competing theories:

Add Moral Choice

Let players choose the villain's fate:

{ "text": "Execute the bandit leader", "nextScene": "ep1-scene8-justice" }, { "text": "Turn him over to authorities", "nextScene": "ep1-scene8-mercy" }

See Also