Two separated brothers, Marlon (conservatory) and Malte (boiler room), can be reunited as optional content. Carry each twin's marble to the other as proof he's alive and that twin follows you; lead both to the foyer and they escape together, granting a Brass Compass keepsake and unlocking a new top-priority "No One Left Behind" ending. Purely optional — no main win condition depends on it. The new EscortEngine drives following and the foyer reunion from flags alone, so save/load needs no format change (it reconciles follower placement on the first tick after loading). Adds Room.removeNpc, one tick call in the game loop, and a follower note appended by LookCommand. descriptionStates swap the twins' home-room prose once they leave. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
81 lines
3.3 KiB
YAML
81 lines
3.3 KiB
YAML
- id: old_man
|
|
name: Old Caretaker
|
|
description: A stooped old man with a grey beard, watching from among the shelves.
|
|
greeting: |
|
|
"Another lost soul in this house. Get the power running and tend to what
|
|
waits upstairs — that is the only way out that's worth taking."
|
|
# First matching line wins; otherwise the greeting is used.
|
|
dialogue:
|
|
- when: [{ flag: ghost_banished }]
|
|
text: |
|
|
"You laid the poor thing to rest. Bless you. Go now — the night is
|
|
clear and the house will hold its peace."
|
|
- when: [{ flag: power_on }, { notFlag: ghost_banished }]
|
|
text: |
|
|
"The lights are back — feel how the house has quieted? Climb the stair.
|
|
In the chapel there's a shrine: give it the locket, then the photograph,
|
|
in that order."
|
|
- when: [{ notFlag: cellar_drained }]
|
|
text: |
|
|
"Cold down there, isn't it? The cellar's flooded over the fuse. Find the
|
|
valve wheel — the conservatory, I think — and drain it."
|
|
reactions:
|
|
- onReceive: letter
|
|
response: |
|
|
"Ah... that letter. I wrote it, long ago, for whoever came after. So
|
|
someone finally read it. Keep going — you're closer than they ever got."
|
|
consumes: letter
|
|
effects:
|
|
- { setFlag: heard_tale }
|
|
|
|
# ── The lost twins (optional escort side-quest) ──────────────────────────────
|
|
# Marlon (conservatory) and Malte (boiler room) were separated in the manor.
|
|
# Give each the other's marble as proof his brother lives, and he follows you;
|
|
# lead both to the foyer and they escape together. See EscortEngine.
|
|
|
|
- id: marlon
|
|
name: Marlon
|
|
description: |
|
|
A frightened young man pressed into the corner, knuckles white around a
|
|
blue glass marble. He has his brother's face — minus the brother.
|
|
greeting: |
|
|
"Please — have you seen Malte? My twin. We were exploring and the dark
|
|
just... took him. I can't leave this house without him. I can't."
|
|
dialogue:
|
|
- when: [{ hasItem: malte_keepsake }]
|
|
text: |
|
|
"That red marble — that's MALTE'S! He's alive? Here, quick: give it to
|
|
me so I know it's real. Then I'll follow you to him."
|
|
reactions:
|
|
- onReceive: malte_keepsake
|
|
response: |
|
|
"His marble. His actual marble. Then he's alive — and you've seen him.
|
|
Lead the way. I'm right behind you, I won't lose him again."
|
|
consumes: malte_keepsake
|
|
effects:
|
|
- { setFlag: marlon_following }
|
|
- { startQuest: reunite_twins }
|
|
|
|
- id: malte
|
|
name: Malte
|
|
description: |
|
|
A shivering young man clutching a red glass marble in the furnace-dark.
|
|
The image of his brother, alone.
|
|
greeting: |
|
|
"Who's there? Marlon? No... Please, have you seen him — my twin, Marlon?
|
|
We got split up and I can't find my way back in this dark."
|
|
dialogue:
|
|
- when: [{ hasItem: marlon_keepsake }]
|
|
text: |
|
|
"A blue marble — Marlon's! You've found him! Give it here so I know
|
|
it's real, then take me to him, please, before I lose my nerve."
|
|
reactions:
|
|
- onReceive: marlon_keepsake
|
|
response: |
|
|
"Marlon's marble. He's really here. Don't let go of me — wherever
|
|
you're going, I'm following. Take me to my brother."
|
|
consumes: marlon_keepsake
|
|
effects:
|
|
- { setFlag: malte_following }
|
|
- { startQuest: reunite_twins }
|