8. Add the Dungeon and Boss
Quest 2 now has a companion and a reason to travel north. This chapter creates the destination: a two-level crypt beneath the ruined belfry, a funerary inscription on the first level, and the Echo Warden in the final chamber.
Start from Checkpoint 7 or download Checkpoint 8.
What you will learn
Section titled “What you will learn”- How an overworld dungeon record defines theme and level count
- How quest markers reference a dungeon and a custom monster
- How dungeon-relative placement uses verified levels and anchors
- How conditional monster placement keeps a boss tied to campaign state
- Why a monster needs authored sprite data even though an NPC may use appearance fallback
- How to preserve an intentional curriculum boundary before event wiring
Add the Drowned Belfry
Section titled “Add the Drowned Belfry”Replace the empty dungeons object with:
"dungeons": { "tutorial_codex:drowned_belfry": { "id": "tutorial_codex:drowned_belfry", "name": "The Drowned Belfry", "x": 124, "y": 84, "mainLandMass": true, "theme": "crypt", "maxLevels": 2, "levelNames": { "1": "The Drowned Belfry - The Sunken Steps", "2": "The Drowned Belfry - The Bell Chamber" } }}Overworld location
Section titled “Overworld location”The dungeon requests an overworld location at x: 124, y: 84 on the main landmass. Coordinate validity and practical reachability still require a runtime playtest.
Theme and levels
Section titled “Theme and levels”theme: "crypt" selects a supported dungeon theme. maxLevels: 2 creates two levels, and levelNames provides player-facing names for each one.
The object keys in levelNames are JSON strings:
"1": "...","2": "..."Do not add a third name when maxLevels is two.
Expand Quest 2
Section titled “Expand Quest 2”Replace the Chapter 7 version of tutorial_codex:silence_drowned_bell with:
"tutorial_codex:silence_drowned_bell": { "id": "tutorial_codex:silence_drowned_bell", "title": "Silence the Drowned Bell", "summary": "Recruit Lysa Fen, descend into the Drowned Belfry, defeat the Echo Warden, and return to Brother Oren.", "objectives": [ { "id": "recruit_lysa", "text": "Ask Lysa Fen to join you.", "detail": "Lysa is waiting in Greyhaven's tavern. Her knowledge of the bell may help in the crypt.", "marker": { "targetId": "tutorial_codex:lysa_fen" }, "completeWhen": { "hasFlag": "tutorial_codex:lysa_recruited" } }, { "id": "enter_belfry", "text": "Enter the Drowned Belfry.", "detail": "Travel north of Greyhaven and descend into the ruined belfry.", "marker": { "targetId": "tutorial_codex:drowned_belfry" } }, { "id": "defeat_warden", "text": "Defeat the Echo Warden.", "detail": "Reach the Bell Chamber on the final level and put the drowned guardian to rest.", "marker": { "targetId": "tutorial_codex:echo_warden" } }, { "id": "return_to_oren", "text": "Return to Brother Oren.", "detail": "Tell Oren that the Echo Warden has fallen so he can finish the shrine's rite.", "marker": { "targetId": "tutorial_codex:brother_oren" } } ]}All four marker targets now exist by the end of this chapter.
Only recruit_lysa has automatic completion in Checkpoint 8. Chapter 9 will add targeted event producers for dungeon entry and boss victory, then connect those durable flags to the remaining objective completions.
Add the Echo Warden
Section titled “Add the Echo Warden”Replace the empty monsters object with:
"monsters": { "tutorial_codex:echo_warden": { "id": "tutorial_codex:echo_warden", "type": "tutorial_codex:echo_warden", "name": "Echo Warden", "hp": 85, "maxHp": 85, "attack": 11, "defense": 5, "speed": 4, "vision": 8, "xp": 125, "lootValue": 50, "lootTags": [ "QUEST" ], "terrain": [ "DUNGEON" ], "placement": { "type": "dungeon", "dungeonId": "tutorial_codex:drowned_belfry", "level": "final", "anchor": "final_room", "role": "dungeon_boss", "when": { "questActive": "tutorial_codex:silence_drowned_bell" }, "revealEffect": "shimmer" }, "preCombatMessage": "The figure beneath the bell arch raises its head. Water runs from an empty helm, and every memory you have of mourning speaks at once.", "sprite": [ " ", " ssss ", " sDssDs ", " sssssss ", " bbbb ", " ddddddd ", " dd ddd dd ", " ddddddd ", " HHHH ", " H HH H ", " H H ", " " ] }}Keep identity fields aligned
Section titled “Keep identity fields aligned”The collection key, id, and custom type all use:
tutorial_codex:echo_wardenThis gives the campaign a stable target for placement, quest markers, and the victory event added in Chapter 9.
Place the boss in a verified context
Section titled “Place the boss in a verified context”The placement means:
- use the Drowned Belfry,
- use its final level,
- use the
final_roomanchor, - treat the monster as the dungeon boss,
- spawn it only while Quest 2 is active,
- reveal it with the supported
shimmereffect.
These are contract values, not descriptive prose. Keep their spelling exact.
Why the boss includes a sprite
Section titled “Why the boss includes a sprite”NPCs can use the new generic appearance fallback. Custom monsters do not use that NPC path.
The compact 12×12 sprite is therefore functional presentation data: it gives the Echo Warden a drawable map and combat image without burying the chapter under a 40×40 character array. A later sprite recipe can replace or refine the art while preserving the monster’s IDs and progression references.
Add the Sunken Steps inscription
Section titled “Add the Sunken Steps inscription”Append this entry to worldPlacements after the courier satchel scene:
{ "id": "tutorial_codex:sunken_steps_scene", "placement": { "type": "dungeon", "dungeonId": "tutorial_codex:drowned_belfry", "level": 1, "anchor": "stairs_up" }, "contents": [ { "type": "feature", "id": "tutorial_codex:cracked_inscription", "name": "Cracked Funerary Inscription", "featureType": "inscription", "text": "The stone reads: “Ring once for the lost. Ring twice for the remembered. Never ring a fourth time.”", "actions": [ { "setFlag": "tutorial_codex:inscription_read" }, { "showMessage": "The inscription suggests the bell was meant to guide the dead home, not call them back." } ] } ]}level: 1 and anchor: "stairs_up" place the feature in a verified first-level context. Do not invent an atmospheric anchor name merely because it sounds appropriate.
The feature’s actions record that it was read and provide a concise interpretation. The flag is optional story memory at this checkpoint; it does not gate the main quest.
Validate the reference graph
Section titled “Validate the reference graph”The validator should resolve:
enter_belfry marker → drowned_belfry dungeondefeat_warden marker → echo_warden monsterreturn_to_oren marker → Brother OrenEcho Warden dungeonId → drowned_belfryEcho Warden questActive → silence_drowned_bellSunken Steps dungeonId → drowned_belfryAlso confirm the exact registry values:
theme: cryptterrain: DUNGEONlevel: finalanchor: final_roomrole: dungeon_bossrevealEffect: shimmerValidation does not prove that the dungeon generated at a reachable location, the anchor was populated as expected, or the boss is fair for the intended party.
Playtest the location and encounter
Section titled “Playtest the location and encounter”Use a fresh game, complete Quest 1, and recruit Lysa.
Verify:
- The Drowned Belfry appears north of Greyhaven and can be reached.
- Entering it produces a two-level crypt.
- The first level uses the Sunken Steps name.
- The inscription appears near the first-level
stairs_upcontext. - Interacting with it shows its text and records
tutorial_codex:inscription_read. - The second level uses the Bell Chamber name.
- The Echo Warden appears in the final room only while Quest 2 is active.
- The Warden is visible and its pre-combat message appears.
- The encounter can be completed by the intended early-game party.
Checkpoint 8
Section titled “Checkpoint 8”The campaign now includes:
- a two-level crypt-themed dungeon,
- all four Quest 2 objectives and valid marker targets,
- a first-level story feature,
- a conditionally placed custom boss,
- compact authored boss art,
- a deliberate boundary before victory-event wiring.
Continue to Chapter 9: Add Victory and the Ending.