feat(world): Haunted Manor content expansion (14 rooms, one world)
Replace the 5-room demo with a condensed 14-room manor on one spine (restore power -> escape) that stacks all five mechanics, plus an optional spirit thread feeding 3 prioritized endings (no hard-fail). Pure YAML on the existing engines: 14 rooms across 3 levels, ~16 items, 5 combinations, the old_man hint NPC, restore_power + lay_to_rest quests, and 3 endings. Consolidate to one world: remove the toy "Test Manor" test fixture so the loader tests exercise the real shipped world. Adapt WorldLoaderTest and TutorialLoaderTest to form-invariants of the real world, and add WorldSolvableTest, which walks the critical path (light/lock gating + Combinations.tryUse + flags) to guarantee power_on, ghost_banished, and a victory ending are reachable — an unsolvable world now fails the build. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,64 +1,199 @@
|
||||
# Haunted Manor — 14 rooms across three levels, wired over compass exits.
|
||||
# Ground floor (manor-theme), cellar (cellar-drone, dark), upper floor
|
||||
# (musicbox / lament). The upward stair is power-locked; everything else is open.
|
||||
|
||||
# ── Ground floor ──────────────────────────────────────────────────────────
|
||||
|
||||
- id: foyer
|
||||
name: Entrance Foyer
|
||||
description: |
|
||||
A grand, decaying foyer. The heavy front door stands at your back; an
|
||||
oil lamp waits on a side table. A wide archway opens north into the hall.
|
||||
music: manor-theme.ogg
|
||||
exits:
|
||||
north: grand_hall
|
||||
items: [front_door, lamp]
|
||||
npcs: []
|
||||
|
||||
- id: grand_hall
|
||||
name: Grand Hall
|
||||
description: |
|
||||
A cavernous hall, the hub of the house. Passages branch in every
|
||||
direction: the foyer to the south, a dining room north, the kitchen
|
||||
east, and the library west.
|
||||
music: manor-theme.ogg
|
||||
exits:
|
||||
south: foyer
|
||||
north: dining_room
|
||||
east: kitchen
|
||||
west: library
|
||||
items: []
|
||||
npcs: []
|
||||
|
||||
- id: kitchen
|
||||
name: Old Kitchen
|
||||
description: |
|
||||
A dusty kitchen. Cobwebs hang from the rafters
|
||||
and a letter lies on the table.
|
||||
A dusty kitchen. Cobwebs hang from the rafters, a box of matches sits
|
||||
by the stove, and a letter lies on the table. A narrow stair descends
|
||||
south into darkness.
|
||||
music: manor-theme.ogg
|
||||
exits:
|
||||
north: hallway
|
||||
east: cellar
|
||||
south: dungeon
|
||||
items: [letter, lamp, front_door]
|
||||
npcs: [old_man]
|
||||
exitLocks:
|
||||
- direction: east
|
||||
requires: [{ flag: power_on }]
|
||||
blocked: |
|
||||
The cellar door is held shut by a magnetic lock — dead without power.
|
||||
|
||||
- id: hallway
|
||||
name: Dark Hallway
|
||||
description: |
|
||||
A long, dimly lit hallway. It smells musty.
|
||||
Faint footsteps echo somewhere far away.
|
||||
exits:
|
||||
south: kitchen
|
||||
west: library
|
||||
items: [torch]
|
||||
west: grand_hall
|
||||
south: cellar_stairs
|
||||
items: [matches, letter]
|
||||
npcs: []
|
||||
|
||||
- id: library
|
||||
name: Library
|
||||
description: |
|
||||
Tall shelves crammed with mouldering books.
|
||||
An old chest stands in the corner.
|
||||
Tall shelves crammed with mouldering books. A rusty shovel leans in one
|
||||
corner and a leather journal lies open on a reading stand. A stooped old
|
||||
man keeps watch among the stacks.
|
||||
music: manor-theme.ogg
|
||||
exits:
|
||||
east: hallway
|
||||
items: [shovel, matches]
|
||||
east: grand_hall
|
||||
items: [shovel, journal]
|
||||
npcs: [old_man]
|
||||
|
||||
- id: dining_room
|
||||
name: Dining Room
|
||||
description: |
|
||||
A long banquet table under a sheet of dust. An unlit torch rests in a
|
||||
wall bracket and a faded portrait hangs above the hearth. A conservatory
|
||||
lies north; a grand staircase rises to the east.
|
||||
music: manor-theme.ogg
|
||||
exits:
|
||||
south: grand_hall
|
||||
north: conservatory
|
||||
east: grand_staircase
|
||||
items: [torch, portrait]
|
||||
npcs: []
|
||||
|
||||
- id: cellar
|
||||
name: Damp Cellar
|
||||
- id: conservatory
|
||||
name: Conservatory
|
||||
description: |
|
||||
Cold, damp, and very dark. You can barely
|
||||
make out shapes against the far wall.
|
||||
A glass-roofed room choked with dead ferns. Rusted plumbing lines the
|
||||
walls, and a heavy iron valve wheel has been left on a potting bench.
|
||||
music: manor-theme.ogg
|
||||
exits:
|
||||
west: kitchen
|
||||
south: dining_room
|
||||
items: [valve_wheel]
|
||||
npcs: []
|
||||
|
||||
- id: grand_staircase
|
||||
name: Grand Staircase
|
||||
description: |
|
||||
A sweeping staircase climbs into the gloom of the upper floor. The dining
|
||||
room lies west. Without power, the lift gate at the top is sealed shut.
|
||||
music: manor-theme.ogg
|
||||
exits:
|
||||
west: dining_room
|
||||
north: landing
|
||||
items: []
|
||||
npcs: []
|
||||
descriptionStates:
|
||||
- when: [{ flag: power_on }]
|
||||
text: |
|
||||
With the power back, a bare bulb buzzes overhead, revealing
|
||||
shelves of dusty jars along the far wall.
|
||||
exitLocks:
|
||||
- direction: north
|
||||
requires: [{ flag: power_on }]
|
||||
blocked: |
|
||||
The lift gate at the head of the stairs is bolted by a dead electric
|
||||
lock. Until the manor has power, the upper floor stays out of reach.
|
||||
|
||||
- id: dungeon
|
||||
name: Dungeon
|
||||
# ── Cellar (dark — needs a carried light source) ────────────────────────────
|
||||
|
||||
- id: cellar_stairs
|
||||
name: Cellar Landing
|
||||
description: |
|
||||
A cramped stone room, black as pitch. A rusty generator squats in the corner.
|
||||
music: dungeon-drone.ogg
|
||||
The bottom of the kitchen stair. The air is wet and close. Passages lead
|
||||
east toward the sound of standing water and west toward a cold furnace.
|
||||
music: cellar-drone.ogg
|
||||
dark: true
|
||||
exits:
|
||||
north: kitchen
|
||||
east: flooded_cellar
|
||||
west: boiler_room
|
||||
items: []
|
||||
npcs: []
|
||||
|
||||
- id: flooded_cellar
|
||||
name: Flooded Cellar
|
||||
description: |
|
||||
You stand knee-deep in black, freezing water. A drainage valve juts from
|
||||
the wall, its wheel long since removed.
|
||||
music: cellar-drone.ogg
|
||||
dark: true
|
||||
exits:
|
||||
west: cellar_stairs
|
||||
items: [valve]
|
||||
npcs: []
|
||||
descriptionStates:
|
||||
- when: [{ flag: cellar_drained }]
|
||||
text: |
|
||||
The drained basin has given up its muddy floor. The valve still
|
||||
stands open against the wall, water trickling away below.
|
||||
|
||||
- id: boiler_room
|
||||
name: Boiler Room
|
||||
description: |
|
||||
A cramped stone room behind the furnace. A rusty generator squats in the
|
||||
corner, an empty fuse socket gaping in its housing.
|
||||
music: cellar-drone.ogg
|
||||
dark: true
|
||||
exits:
|
||||
east: cellar_stairs
|
||||
items: [generator]
|
||||
npcs: []
|
||||
|
||||
# ── Upper floor (reachable only once the power is on) ───────────────────────
|
||||
|
||||
- id: landing
|
||||
name: Upper Landing
|
||||
description: |
|
||||
A railed landing above the hall, lit now by the restored lights. Doors
|
||||
open north to the master bedroom, east to a study, and west to a small
|
||||
chapel. The staircase falls away to the south.
|
||||
music: musicbox.ogg
|
||||
exits:
|
||||
south: grand_staircase
|
||||
north: master_bedroom
|
||||
east: study
|
||||
west: chapel
|
||||
items: []
|
||||
npcs: []
|
||||
|
||||
- id: master_bedroom
|
||||
name: Master Bedroom
|
||||
description: |
|
||||
A grand four-poster bed, its drapes rotted to lace. On the nightstand,
|
||||
catching the light, lies a silver locket.
|
||||
music: musicbox.ogg
|
||||
exits:
|
||||
south: landing
|
||||
items: [locket]
|
||||
npcs: []
|
||||
|
||||
- id: study
|
||||
name: Study
|
||||
description: |
|
||||
A cluttered writing study. Papers lie scattered across the desk, and a
|
||||
framed photograph has fallen face-up among them.
|
||||
music: musicbox.ogg
|
||||
exits:
|
||||
west: landing
|
||||
items: [photograph]
|
||||
npcs: []
|
||||
|
||||
- id: chapel
|
||||
name: Manor Chapel
|
||||
description: |
|
||||
A tiny private chapel. A stone shrine stands at the far end beneath a
|
||||
narrow window. A cold presence presses against you here.
|
||||
music: lament.ogg
|
||||
exits:
|
||||
east: landing
|
||||
items: [shrine]
|
||||
npcs: []
|
||||
descriptionStates:
|
||||
- when: [{ flag: ghost_banished }]
|
||||
text: |
|
||||
A tiny private chapel. The shrine stands quiet beneath the window,
|
||||
and only still moonlight remains. The cold presence is gone.
|
||||
|
||||
Reference in New Issue
Block a user