Files
Jander_Semester2/Semesterprojekt/src/main/resources/world/rooms.yaml
Jean-Luc Makiola 1ae464dfe4 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>
2026-06-02 09:06:28 +02:00

200 lines
5.7 KiB
YAML

# 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, 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:
west: grand_hall
south: cellar_stairs
items: [matches, letter]
npcs: []
- id: library
name: Library
description: |
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: 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: conservatory
name: Conservatory
description: |
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:
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: []
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.
# ── Cellar (dark — needs a carried light source) ────────────────────────────
- id: cellar_stairs
name: Cellar Landing
description: |
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.