Files
two-keys/content/games/til-death-do-us-part.yaml
T
joshuaandClaude Opus 5.5 52745935ee V1.3.0
Game pack 3: 22 new games (19-40), 40 in total.

- New engines: dial (Wavelength / Mind Meld), twin (Twin Rooms /
  Spot the Difference, incl. mirror mode) and blueprint (Describe &
  Draw, incl. peeks, overlap scoring and a rotated Builder canvas)
- Labyrinth: items and doors (Hedge Maze)
- Defuse: manualFrom, roles swapping every level behind a Ready card,
  and duplicate wire modules (Tick Tock: Switch)
- Generic time limits for the new engines; sync/defuse successEnding
- Library: engine-label chips and filters; Noto Color Emoji font
- Validation: Appendix A checks ported, with a per-game summary
- Quote comma/colon-split labels in five new YAMLs (wording unchanged)
- Tests for all new engines and sanitized payloads of all 22 games
- Docs: CLAUDE.md, GAMES.md (pack 3 spoiler guide), How to Play

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 10:21:24 +02:00

280 lines
12 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
id: til-death-do-us-part
engine: story
category: murder-mystery
title: "'Til Death Do Us Part"
tagline: A Stellenbosch wedding. A perfect first dance. A best man at the bottom of the garden stairs.
estimatedMinutes: 30
difficulty: 3
players: { min: 2, max: 2 }
theme: { primary: "#b5838d", accent: "#ffcdb2", background: "#140c0e", headingFont: "Playfair Display" }
rules:
hintPenaltySeconds: 180
roles:
A:
name: The Detective
blurb: You're a wedding guest who happens to be a detective. Statements, the seating rules, the police notes.
B:
name: The Photographer's Assistant
blurb: You worked the wedding. Camera files, the planner's folders, and the best man's phone.
intro: |
**A wine estate outside Stellenbosch. Saturday, 21:30.**
Thabo and Lize are married. The speeches went well, the lights dim, and the couple step out for their first dance.
At 21:50, a waiter finds **Jason Pike**, the best man, at the bottom of the stone garden stairs. Everyone assumes
champagne and a missed step. The doctor at table 6 doesn't.
Don't let a murder ruin a perfectly good wedding. **Solve it before the cake is cut.**
⚠️ *Hard case: the locks give you facts. You'll connect them in the accusation.*
suspects:
- id: kayla
name: Kayla Daniels
role: Maid of honour
description: Jason's ex. They broke up badly six months ago and had to share a head table tonight.
- id: sipho
name: Sipho Ndlovu
role: Groom's brother
description: Owes Jason money. Was seen arguing with him by the bar.
- id: johan
name: Johan Marais
role: Father of the bride
description: Paid for everything. Jason's speech joked about his "dodgy property deals". He didn't laugh.
- id: celeste
name: Celeste Moreau
role: Wedding planner
description: Elegant, efficient, everywhere at once. Wears the planner team's navy dress.
- id: marco
name: Marco Russo
role: The bride's ex
description: Not invited. Turned up anyway, "just to say congratulations". Security walked him out at 21:00.
chapters:
- id: ch1
title: The Empty Chair
narrative: |
The videographer filmed the first dance, 21:32 to 21:42, with the head table behind the couple.
Two chairs at the head table are empty in every frame. One is Jason's. Whose is the other?
clues:
A:
- id: a1-rules
title: The planner's seating notes (police copy)
type: note
body: |
Head table, seats **1–5 from the guests' left** (the couple's own seats in the middle don't count).
1. Johan sits directly next to his wife, Anita.
2. The maid of honour is not on either end.
3. The best man sits at the groom's end: **seat 5**.
4. Johan is **not** in the middle seat (3). "He hates being in the middle of photos."
B:
- id: b1-planner
title: More seating notes (from the planner's folder)
type: note
body: |
5. The groom's brother sits directly next to the maid of honour.
6. Anita sits somewhere to Johan's **left** (guests' view).
7. Jason and Johan must **not** sit next to each other. Long story.
8. The groom's brother sits to the maid of honour's **left**.
- id: b1-video
title: Videographer's note
type: log
body: |
First dance 21:32–21:42. Head table visible throughout.
**Seats 3 and 5 empty the entire time.** Seats 1, 2 and 4 occupied.
lock:
id: lock-chair
prompt: Who should have been in seat 3?
inputType: choice
options:
- { id: anita, label: Anita Marais (mother of the bride) }
- { id: johan, label: Johan Marais }
- { id: kayla, label: Kayla Daniels }
- { id: sipho, label: Sipho Ndlovu }
answers: ["sipho"]
hints:
- Jason is in seat 5. Johan can't be next to him, so Johan isn't in seat 4.
- Johan isn't in 3 or 4, and Anita is to his left and next to him. So Anita 1, Johan 2.
- "Seats 3 and 4 are Sipho and Kayla, with Sipho on Kayla's left: Sipho is seat 3."
successText: |
**Sipho**, the groom's brother. He wasn't at the table during the first dance.
(Sipho, cornered: *"I was in the car park on the phone to my bank. Ask them."* His call log
shows a call from 21:30 to 21:47. Inconvenient for a killer.)
keyName: Place Card Key
- id: ch2
title: The Last Photo
narrative: |
The photographer took hundreds of shots. One shows Jason at the top of the garden stairs with someone.
But the camera's clock was never set properly.
clues:
A:
- id: a2-photos
title: Photo files near the garden stairs (camera timestamps)
type: log
body: |
| File | Camera time | What it shows |
|------|-------------|---------------|
| IMG_2207 | 23:41 | Jason laughing on the terrace, champagne in hand |
| IMG_2219 | **23:45** | Jason at the **top of the garden stairs**, talking to a woman in a **navy dress**, her back to the camera |
| IMG_2231 | 23:47 | The first dance, wide shot |
| IMG_2246 | 23:52 | Garden stairs, empty |
B:
- id: b2-camera
title: Photographer's voice note
type: transcript
body: |
"Ugh, I never changed the camera clock after the Dubai job. It's **two hours ahead**.
And it was already running **seven minutes fast** before that. Sorry!"
- id: b2-dresscode
title: Planner's colour plan
type: table
body: |
| Group | Colour |
|-------|--------|
| Bridesmaids (incl. maid of honour) | Sage green |
| Mothers of the couple | Blush pink |
| **Planner team** | **Navy** |
| Guests | "Anything but white, navy or sage" |
lock:
id: lock-photo
prompt: What was the real time of IMG_2219?
inputType: code
format: "HH:MM"
answers: ["2138", "938", "938PM"]
hints:
- The camera is ahead by 2 hours plus 7 minutes.
- Take 2:07 off the camera time.
- 23:45 − 2:07 = 21:38.
successText: |
**21:38**, during the first dance. Jason was alive at the top of the garden stairs, talking to a woman in **navy**.
By 21:45 the stairs were empty. Navy is the **planner team's** colour, and only one planner was working tonight.
keyName: Camera Key
- id: ch3
title: The Toast Card
narrative: |
In Jason's jacket: his speech card. One line on the back looks oddly printed, with some letters bold and some not.
Jason's friends say he loved "old spy stuff".
clues:
A:
- id: a3-card
title: Back of Jason's speech card
type: note
body: |
**H**e**re**'s t**o** the bri**de** a**nd** **g**r**o**o**m**, **m**ay every day feel like this one
*(Pencilled: "Final toast. 5 by 5. Thin = a, fat = b.")*
B:
- id: b3-bacon
title: Jason's phone, a saved note "Bacon's cipher"
type: table
body: |
Read letters in groups of five: thin letter = **a**, bold letter = **b**. Ignore spaces and punctuation.
| Group | Letter | Group | Letter | Group | Letter |
|-------|--------|-------|--------|-------|--------|
| aaaaa | A | ababa | K | baaab | R |
| aaaab | B | ababb | L | baaba | S |
| aaaba | C | abbaa | M | baabb | T |
| aaabb | D | abbab | N | babaa | U |
| aabaa | E | abbba | O | babab | V |
| aabab | F | abbbb | P | babba | W |
| aabba | G | baaaa | Q | babbb | X |
| aabbb | H | | | bbaaa | Y |
| abaaa | I | | | bbaab | Z |
| abaab | J | | | | |
*This version has 26 separate letters (I and J, U and V are different).*
lock:
id: lock-bacon
prompt: What did Jason hide on his toast card?
inputType: text
format: One word
answers: ["WIDOW", "BLACKWIDOW"]
hints:
- "Write each letter as a (normal) or b (bold), then split into groups of five: H-e-r-e-s = b a b b a."
- babba = W. The next group, t-o-t-h-e, is a b a a a.
- W-I-D-O-W.
successText: |
**"WIDOW."** Jason's final toast was going to name someone as a **widow**. And not a sad one.
keyName: Toast Key
- id: ch4
title: Uncle Leon's Wedding
narrative: |
Jason's phone has an album called "UNCLE LEON". His uncle married in 2019, died eight months later,
and his new wife vanished with his savings.
clues:
A:
- id: a4-police
title: Police description of Celeste Moreau (taken tonight)
type: report
body: |
Female, about 40. Dark hair in a chignon. Navy planner's dress.
Small tattoo on the **inside of her left wrist: a swallow**. Says she's "been planning weddings for six years".
B:
- id: b4-album
title: Jason's album "UNCLE LEON", wedding photo, 2019
type: photo
body: |
*Leon Pike, beaming, beside his bride "Claire". She's raising a glass with her left hand.
On the inside of her wrist: a small **swallow** tattoo.*
*Jason's caption, written last week: "Found her. She's planning Thabo's wedding."*
lock:
id: lock-tattoo
prompt: What links the planner to Uncle Leon's bride?
inputType: text
format: One word
answers: ["SWALLOW", "TATTOO", "SWALLOWTATTOO", "ASWALLOW", "THESWALLOW"]
hints:
- Compare the police description with the old wedding photo.
- Look at the left wrist.
- The swallow tattoo.
successText: |
**The swallow tattoo.** "Claire Pike" and Celeste Moreau are the same woman: she married Jason's uncle,
and when he died she disappeared with everything. Jason recognised her and was going to say so in his final toast.
keyName: Swallow Key
finale:
type: accusation
prompt: The cake is coming out. Make your accusation before anyone cuts it.
maxAttempts: 2
questions:
- id: who
label: Who killed Jason Pike?
options:
- { id: kayla, label: Kayla Daniels }
- { id: sipho, label: Sipho Ndlovu }
- { id: johan, label: Johan Marais }
- { id: celeste, label: Celeste Moreau }
- { id: marco, label: Marco Russo }
answer: celeste
- id: how
label: How?
options:
- { id: fell, label: "He fell, drunk, nobody did anything" }
- { id: pushed, label: Lured to the top of the garden stairs during the first dance at 21:38 and pushed }
- { id: poison, label: Poison in his champagne }
- { id: carpark, label: Attacked in the car park }
answer: pushed
- id: why
label: Why?
options:
- { id: ex, label: A bitter break-up }
- { id: money, label: An unpaid debt }
- { id: speech, label: Humiliation in the speeches }
- { id: widow, label: "He'd recognised her as the woman who married and robbed his uncle, and was about to expose her" }
answer: widow
successEnding: |
Celeste straightens a centrepiece that doesn't need straightening.
"Six weddings a month. Nobody looks at the planner. And then the best man looks at my wrist and goes pale."
At 21:38, while everyone watched the first dance, she asked Jason to "help with the sparklers" at the top
of the garden stairs. He told her he knew. She pushed.
**Case closed.** The cake gets cut. Lize says it's the most memorable wedding in family history. 💍🔑
failEnding: |
The wrong person is led out past the dessert table. "Claire" collects her fee and moves on to the next wedding.
reveal: |
**Celeste Moreau** pushed Jason down the garden stairs at **21:38 during the first dance**, because he'd recognised her
(the **swallow tattoo**) as the **"widow" who married and robbed his uncle** and was about to expose her in his toast.