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:
- Search home (Investigation DC 13)
- Question guards (Persuasion DC 12)
- Tavern rumors (Insight DC 11)
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:
- Returning for reinforcements → Too late, quest fails
- Multiple failed checks → Lose time, harder rescue
4. Dynamic Location Network
Notice the placeholder pattern:
{nearestBurg}
{randomBurg:maxPopulation=300}
{nearestDungeon:type=Cave}
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:
- Bandits (correct)
- Business rival (red herring)
- Secret lover (red herring)
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