Add ten new games (18 in total) and the engine features they need. Story: Dead Air, The Masquerade at Montague House, The Kalahari Expedition, The Alchemist's Vault, Submerged: Deep Lab Nereid, The Kestrel Bank Job. Games can now set their own hint penalty and a hard time limit, shown as a countdown; running out ends the game with the fail ending. Defuse: Tick Tock: Overtime. Manuals are now rulesets, so each game has its own solver. Adds indicator lights, per-level strike limits, and the Passwords, Morse Light and Say It Back modules. Sync: In Sync: Deep Cuts. Adds telepathy (typed word) and ranking rounds, and a per-round bar for the key. Labyrinth: The Drowned Catacombs and The Mirror Maze. Adds one-way gates, a relative (no compass) Explorer, a mirrored Navigator map, and mazes with a lantern count other than three. Validation now rejects a maze where a gate can leave the Explorer stuck. Difficulty runs from 1 to 5. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
310 lines
12 KiB
YAML
310 lines
12 KiB
YAML
id: kestrel-heist
|
|
engine: story
|
|
category: escape-room
|
|
title: The Kestrel Bank Job
|
|
tagline: A crooked banker stole Gran's necklace. Tonight you're taking it back. In and out. No mistakes.
|
|
estimatedMinutes: 50
|
|
difficulty: 5
|
|
players: { min: 2, max: 2 }
|
|
theme: { primary: "#1b1b1e", accent: "#00e5a0", background: "#050506", headingFont: "JetBrains Mono" }
|
|
rules:
|
|
hintPenaltySeconds: 240
|
|
timeLimitMinutes: 55
|
|
timeLimitLabel: "Until the morning shift"
|
|
roles:
|
|
A:
|
|
name: The Inside Man
|
|
blurb: You're in the building. You see the doors, panels, lasers and guards. You don't have the plans.
|
|
B:
|
|
name: The Wheel
|
|
blurb: You're in the van outside with the laptop, the blueprints, and everything you've dug up on the banker.
|
|
intro: |
|
|
Six months ago, banker **Vincent Kestrel** "held" your gran's emerald necklace as security
|
|
on a loan, then forged the paperwork and kept it. The police shrugged. The lawyers shrugged.
|
|
|
|
So tonight, you're getting it back. **Kestrel Private Bank, 21:58.**
|
|
One of you is inside in a cleaner's uniform with an earpiece. The other is in the van with a laptop.
|
|
|
|
Get to his private box. Get the necklace. Get out before the morning shift.
|
|
|
|
☠️ *Nightmare tier. Longer hint penalty. A hard time limit. Trust each other.*
|
|
|
|
chapters:
|
|
- id: ch1
|
|
title: The Staff Door
|
|
narrative: |
|
|
The staff entrance has a four-digit keypad. Kestrel uses it himself every morning.
|
|
The Inside Man dusts the keypad with the cleaner's talc.
|
|
clues:
|
|
A:
|
|
- id: a1-keypad
|
|
title: Dusted keypad
|
|
type: diagram
|
|
body: |
|
|
```
|
|
[1] [2] [3] Worn, greasy keys: 0, 2, 6
|
|
[4] [5] [6] The 0 is the MOST worn.
|
|
[7] [8] [9] Every other key is clean.
|
|
[0]
|
|
```
|
|
Code length: 4 digits.
|
|
B:
|
|
- id: b1-assistant
|
|
title: Message from Kestrel's ex-assistant
|
|
type: transcript
|
|
body: |
|
|
"Every code he has is a date, **day then month**, two digits each.
|
|
Always someone in his family. He's not as clever as he thinks."
|
|
- id: b1-social
|
|
title: Kestrel's social media, a few posts
|
|
type: document
|
|
body: |
|
|
- *14 Feb:* "Happy Valentine's to the wife. ❤️" *(deleted a week later)*
|
|
- *20 Jun:* "Happy birthday to my princess Mia! 🎂 Daddy loves you."
|
|
- *03 Sep:* "Proud dad. Liam made the first XV!"
|
|
- *11 Nov:* "Happy birthday Noah, my little man!"
|
|
lock:
|
|
id: lock-door
|
|
prompt: Enter the staff door code.
|
|
inputType: code
|
|
format: 4 digits (DDMM)
|
|
answers: ["2006"]
|
|
hints:
|
|
- The code uses only the digits 0, 2 and 6, with one of them used twice.
|
|
- Which family date uses exactly 0, 2 and 6, with 0 twice?
|
|
- Mia's birthday, 20 June = 2006.
|
|
successText: |
|
|
**2006.** Green light. You're in. Mop bucket rolling, cap pulled low.
|
|
Ahead: the long marble corridor to the vault, criss-crossed with red light.
|
|
keyName: Staff Door Key
|
|
|
|
- id: ch2
|
|
title: The Laser Hall
|
|
narrative: |
|
|
Five columns of floor tiles. Five rows of laser beams across them.
|
|
Exactly one column of tiles is never crossed by a beam.
|
|
clues:
|
|
A:
|
|
- id: a2-hall
|
|
title: What the Inside Man sees
|
|
type: diagram
|
|
body: |
|
|
```
|
|
col1 col2 col3 col4 col5
|
|
row1 ▢ ▢ ▢ ▢ ▢
|
|
row2 ▢ ▢ ▢ ▢ ▢
|
|
row3 ▢ ▢ ▢ ▢ ▢
|
|
row4 ▢ ▢ ▢ ▢ ▢
|
|
row5 ▢ ▢ ▢ ▢ ▢
|
|
```
|
|
The beams are too faint to see by eye in this light.
|
|
Sticker on the laser control box: **"MASK BITS: col1 = 16, col2 = 8, col3 = 4, col4 = 2, col5 = 1"**
|
|
B:
|
|
- id: b2-config
|
|
title: Hacked security config (laptop)
|
|
type: log
|
|
body: |
|
|
```
|
|
[LASER_HALL]
|
|
ROW_MASK_1 = 21
|
|
ROW_MASK_2 = 12
|
|
ROW_MASK_3 = 25
|
|
ROW_MASK_4 = 17
|
|
ROW_MASK_5 = 8
|
|
; a set bit means the beam crosses that tile
|
|
```
|
|
lock:
|
|
id: lock-lasers
|
|
prompt: Which column is safe to walk?
|
|
inputType: code
|
|
format: Column number
|
|
answers: ["4"]
|
|
hints:
|
|
- Each row mask is a sum of the column values its beam crosses. Break each number into 16, 8, 4, 2, 1.
|
|
- "21 = 16 + 4 + 1 → columns 1, 3, 5."
|
|
- "Rows cross: (1,3,5), (2,3), (1,2,5), (1,5), (2). Column 4 is never crossed."
|
|
successText: |
|
|
**Column 4.** Tile by tile, heel to toe. Not a single alarm. Halfway there.
|
|
keyName: Laser Key
|
|
|
|
- id: ch3
|
|
title: The Guards
|
|
narrative: |
|
|
Past the hall, the vault corridor. Three guards walk through it on fixed loops.
|
|
Crossing it to the vault door takes **4 full minutes** of picking the outer lock.
|
|
clues:
|
|
A:
|
|
- id: a3-watching
|
|
title: What the Inside Man has clocked from the vent
|
|
type: log
|
|
body: |
|
|
```
|
|
Guard 1 (big guy, whistles): passes at 22:03, then every 7 minutes
|
|
Guard 2 (torch, limps): passes at 22:05, then every 11 minutes
|
|
```
|
|
It's 22:00 now.
|
|
B:
|
|
- id: b3-roster
|
|
title: Security rota (hacked)
|
|
type: document
|
|
body: |
|
|
**Guard 3 (Dlamini):** corridor sweep at **22:02**, then **every 6 minutes**.
|
|
*A guard occupies the corridor for the whole minute they pass through it.*
|
|
You need **4 clear minutes in a row** with no guard passing.
|
|
lock:
|
|
id: lock-guards
|
|
prompt: At what time does the first safe 4-minute window start?
|
|
inputType: code
|
|
format: "HH:MM"
|
|
answers: ["2233", "1033", "1033PM"]
|
|
hints:
|
|
- "List the busy minutes: Guard 1 → :03, :10, :17, :24, :31, :38..."
|
|
- "Guard 2 → :05, :16, :27, :38. Guard 3 → :02, :08, :14, :20, :26, :32, :38."
|
|
- "Gaps before :33 are at most 3 minutes long. :33, :34, :35, :36 are all clear."
|
|
successText: |
|
|
**22:33.** You slip in behind Guard 3, pick the outer lock in three minutes fifty, and close the door
|
|
a breath before Guard 1 whistles past. You're in the vault anteroom. One huge dial.
|
|
keyName: Shadow Key
|
|
|
|
- id: ch4
|
|
title: The Vault Dial
|
|
narrative: |
|
|
Three-number combination dial. Kestrel left himself a reminder taped under the anteroom desk.
|
|
It's not in any language you know.
|
|
clues:
|
|
A:
|
|
- id: a4-photo
|
|
title: Photo on the anteroom desk
|
|
type: photo
|
|
body: |
|
|
*Kestrel with his three sons, a joint birthday party this year. Each boy holds a cake
|
|
with candles shaped like numerals: Noah's says **VII**, Liam's says **XIX**, Ben's says **XII**.
|
|
Frame engraved: "My boys."*
|
|
B:
|
|
- id: b4-note
|
|
title: Note taped under the desk (Inside Man reads it out letter by letter)
|
|
type: note
|
|
body: |
|
|
## XLNYRMZGRLM: NB HLMH ZTVH, VOWVHG URIHG
|
|
|
|
*Your laptop's notes on Kestrel: "Ancient-cipher nerd. Favourite: the mirror alphabet. A↔Z, B↔Y, C↔X..."*
|
|
lock:
|
|
id: lock-dial
|
|
prompt: Dial the combination.
|
|
inputType: code
|
|
format: "NN-NN-NN"
|
|
answers: ["191207", "19127"]
|
|
hints:
|
|
- "Mirror alphabet: A↔Z, B↔Y, C↔X. X → C, L → O, N → M..."
|
|
- "The note says: COMBINATION: MY SONS AGES, ELDEST FIRST."
|
|
- "Ages are XIX = 19, XII = 12, VII = 7. Eldest first: 19-12-07."
|
|
successText: |
|
|
**19-12-07.** Twelve tons of steel swing open on silent hinges.
|
|
A wall of safe deposit boxes. Hundreds of them. **Which one is his?**
|
|
keyName: Vault Key
|
|
|
|
- id: ch5
|
|
title: Box Number
|
|
narrative: |
|
|
Kestrel doesn't keep stolen goods under his own name. He uses aliases, all birds of prey.
|
|
On the anteroom terminal, a sticky note with a database query in his handwriting.
|
|
clues:
|
|
A:
|
|
- id: a5-query
|
|
title: Sticky note on the terminal
|
|
type: note
|
|
body: |
|
|
```sql
|
|
SELECT b.box_no
|
|
FROM boxes b
|
|
JOIN clients c ON c.client_id = b.client_id
|
|
WHERE c.alias LIKE 'K%'
|
|
AND b.size = 'L'
|
|
AND b.last_opened >= '2026-06-01';
|
|
```
|
|
- id: a5-clients
|
|
title: Terminal screen, CLIENTS table
|
|
type: table
|
|
body: |
|
|
| client_id | alias |
|
|
|-----------|------------|
|
|
| 101 | Kestrel |
|
|
| 102 | Heron |
|
|
| 103 | Kite |
|
|
| 104 | Kingfisher |
|
|
| 105 | Osprey |
|
|
B:
|
|
- id: b5-boxes
|
|
title: Downloaded BOXES table (laptop)
|
|
type: table
|
|
body: |
|
|
| box_no | client_id | size | last_opened |
|
|
|--------|-----------|------|-------------|
|
|
| 214 | 101 | M | 2026-07-14 |
|
|
| 233 | 103 | L | 2026-05-31 |
|
|
| 309 | 103 | L | 2026-03-02 |
|
|
| 317 | 104 | L | 2026-08-30 |
|
|
| 402 | 102 | L | 2026-09-01 |
|
|
| 411 | 101 | L | 2026-05-29 |
|
|
| 518 | 105 | L | 2026-09-10 |
|
|
| 520 | 104 | S | 2026-09-11 |
|
|
lock:
|
|
id: lock-box
|
|
prompt: Which box do you open?
|
|
inputType: code
|
|
format: Box number
|
|
answers: ["317"]
|
|
hints:
|
|
- "Aliases starting with K: Kestrel (101), Kite (103), Kingfisher (104)."
|
|
- "Large boxes for those clients: 233, 309, 317, 411."
|
|
- Only 317 was opened on or after 1 June 2026.
|
|
successText: |
|
|
**Box 317.** Inside, wrapped in a bank cloth: Gran's emerald necklace. And a stack of other
|
|
"held as security" jewellery with little tags. You photograph every tag for the police.
|
|
keyName: Emerald Key
|
|
|
|
finale:
|
|
type: escape
|
|
prompt: Alarms trip as you leave the vault. The getaway meet point is in a coded text from your driver.
|
|
clues:
|
|
A:
|
|
- id: af-text
|
|
title: Text from the driver (on the Inside Man's burner)
|
|
type: transcript
|
|
body: |
|
|
```
|
|
MUTLEETSTHODIREAEP
|
|
```
|
|
*"Zig-zag it. Rails = floors in that building. You know the rest."*
|
|
B:
|
|
- id: bf-blueprint
|
|
title: Kestrel Private Bank blueprint, cover sheet
|
|
type: document
|
|
body: |
|
|
**Floors:** Ground (banking hall), First (offices), Second (vault and anteroom).
|
|
*Basement: none. The vault is upstairs, which is why the lift is reinforced.*
|
|
- id: bf-railfence
|
|
title: Your notes on zig-zag (rail fence) ciphers
|
|
type: note
|
|
body: |
|
|
Write the message in a zig-zag down and up across N rails, then read each rail left to right.
|
|
To decode: work out how many letters sit on each rail, split the text, then zig-zag back through.
|
|
lock:
|
|
id: lock-getaway
|
|
prompt: Where's the meet point?
|
|
inputType: text
|
|
format: The place (a few words)
|
|
answers: ["OLDPIER", "THEOLDPIER", "MEETUSATTHEOLDPIER"]
|
|
hints:
|
|
- The building has 3 floors, so 3 rails.
|
|
- "18 letters on 3 rails split 5 / 9 / 4: MUTLE · ETSTHODIR · EAEP."
|
|
- Zig-zag back through and it reads MEET US AT THE OLD PIER.
|
|
successEnding: |
|
|
**The old pier.** You sprint out the loading dock as sirens wake up three blocks away. The van's door
|
|
is already open. Gran's necklace is in your pocket, and Kestrel's box of stolen tags is on its way to a
|
|
journalist who's been waiting six months for exactly this.
|
|
|
|
**You got out!** 💎🔑
|
|
failEnding: |
|
|
The morning shift arrives. You're still inside, holding a mop. (It's a game. Run it back?)
|