Estimates were 2-8x longer than actual playthroughs. Base them on recorded best times, rounded up to a multiple of 5 minutes, and drop difficulties to 1-2 keys since no game warrants 3. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
152 lines
6.2 KiB
YAML
152 lines
6.2 KiB
YAML
id: tick-tock-together
|
|
engine: defuse
|
|
category: co-op
|
|
title: Tick Tock Together
|
|
tagline: One of you sees the bomb. One of you has the manual. Talk fast.
|
|
estimatedMinutes: 10
|
|
difficulty: 1
|
|
players: { min: 2, max: 2 }
|
|
theme: { primary: "#b3261e", accent: "#ffcc00", background: "#0e0e0e", headingFont: "JetBrains Mono" }
|
|
roles:
|
|
A:
|
|
name: Technician
|
|
blurb: You see the device. You can't see the manual. Describe everything.
|
|
B:
|
|
name: Expert
|
|
blurb: You have the manual. You can't see the device. Ask the right questions.
|
|
intro: |
|
|
A cartoonishly suspicious box has been left at your favourite restaurant, ticking.
|
|
It's a training device (probably). Still, let's not find out.
|
|
|
|
**Technician:** describe what you see. **Expert:** find the rule and tell them what to do.
|
|
Three strikes and it's over. Every strike makes the clock run faster.
|
|
|
|
# ---------- Device definition ----------
|
|
device:
|
|
serial:
|
|
length: 6
|
|
alphabet: "ABCDEFGHJKLMNPQRSTUVWXYZ0123456789" # last char is ALWAYS a digit
|
|
batteries: { min: 0, max: 4 }
|
|
|
|
levels:
|
|
- id: lvl1
|
|
title: Wire Warm-up
|
|
timeSeconds: 180
|
|
modules: [wires]
|
|
keyName: Red Wire Key
|
|
- id: lvl2
|
|
title: Push It
|
|
timeSeconds: 240
|
|
modules: [wires, button]
|
|
keyName: Big Button Key
|
|
- id: lvl3
|
|
title: Hearts & Symbols
|
|
timeSeconds: 300
|
|
modules: [wires, button, keypad]
|
|
keyName: Heart Key
|
|
|
|
strikes: { max: 3, speedUpPerStrike: 0.25 }
|
|
|
|
# ---------- Module generation ----------
|
|
modules:
|
|
wires:
|
|
count: { min: 3, max: 5 }
|
|
colors: [red, blue, yellow, green, white]
|
|
# Technician view: wires listed top to bottom, each with colour swatch + colour NAME label.
|
|
# Action: { type: "cut", index: 1-based }
|
|
button:
|
|
labels: [HOLD, PRESS, ABORT, LOVE]
|
|
colors: [red, blue, white, yellow]
|
|
stripColors: [blue, white, yellow, red]
|
|
# Strip colour is generated up front but only shown to the Technician WHILE holding.
|
|
# Actions: { type: "tap" } or { type: "hold" } then { type: "release", timerText }
|
|
# Server checks the release against the timer value it computes itself.
|
|
keypad:
|
|
symbols:
|
|
heart: "♥ Heart"
|
|
star: "★ Star"
|
|
moon: "☾ Moon"
|
|
sun: "☀ Sun"
|
|
club: "♣ Club"
|
|
flower: "✿ Flower"
|
|
umbrella: "☂ Umbrella"
|
|
plane: "✈ Plane"
|
|
music: "♫ Music note"
|
|
anchor: "⚓ Anchor"
|
|
diamond: "♦ Diamond"
|
|
spade: "♠ Spade"
|
|
columns:
|
|
- [heart, star, moon, sun, club, flower]
|
|
- [umbrella, heart, plane, music, star, anchor]
|
|
- [diamond, sun, spade, umbrella, flower, music]
|
|
- [anchor, spade, club, plane, moon, diamond]
|
|
# Generator: pick a column at random, pick 4 symbols from it, shuffle.
|
|
# Columns share at most 2 symbols, so every 4-symbol set matches exactly one column.
|
|
# Action: { type: "press", symbol } one at a time.
|
|
|
|
# ---------- The manual (shown ONLY to the Expert) ----------
|
|
manual: |
|
|
# Bomb Defusal Manual (Couples' Edition)
|
|
|
|
**Ask your Technician for the serial number and battery count first. You'll need both.**
|
|
|
|
---
|
|
|
|
## Module: Wires
|
|
Wires are numbered **top to bottom**, starting at 1. Cut exactly one.
|
|
Check these rules **in order**. Use the **first** one that applies.
|
|
|
|
1. If there are **exactly two red** wires → cut the **second red** wire.
|
|
2. If the serial number's **last digit is even** and there is **any yellow** wire → cut the **first yellow** wire.
|
|
3. If there are **no blue** wires → cut the **last** wire.
|
|
4. If there are **exactly five** wires → cut the **fourth** wire.
|
|
5. Otherwise → cut the **first** wire.
|
|
|
|
---
|
|
|
|
## Module: The Button
|
|
Check these rules **in order**. Use the **first** one that applies.
|
|
|
|
1. If the button says **LOVE** → **tap** it. (Obviously.)
|
|
2. If the button is **red** and says **HOLD** → **tap** it.
|
|
3. If there are **2 or more batteries** and the button says **PRESS** → **tap** it.
|
|
4. Otherwise → **hold** the button. A coloured strip lights up beside it. Release when the timer shows:
|
|
- **Blue** strip → a **4** anywhere on the timer
|
|
- **Yellow** strip → a **5** anywhere on the timer
|
|
- **Any other colour** → a **1** anywhere on the timer
|
|
|
|
---
|
|
|
|
## Module: Hearts & Symbols
|
|
The keypad shows four symbols. Exactly **one** column below contains all four.
|
|
Press the four symbols in the order they appear **from top to bottom** in that column.
|
|
|
|
| Column 1 | Column 2 | Column 3 | Column 4 |
|
|
|----------|----------|----------|----------|
|
|
| ♥ Heart | ☂ Umbrella | ♦ Diamond | ⚓ Anchor |
|
|
| ★ Star | ♥ Heart | ☀ Sun | ♠ Spade |
|
|
| ☾ Moon | ✈ Plane | ♠ Spade | ♣ Club |
|
|
| ☀ Sun | ♫ Music note | ☂ Umbrella | ✈ Plane |
|
|
| ♣ Club | ★ Star | ✿ Flower | ☾ Moon |
|
|
| ✿ Flower | ⚓ Anchor | ♫ Music note | ♦ Diamond |
|
|
|
|
# ---------- Solver fixtures (MUST pass as unit tests) ----------
|
|
fixtures:
|
|
wires:
|
|
- { serial: "TK4L82", batteries: 1, wires: [red, blue, red, white], expect: { type: cut, index: 3 } }
|
|
- { serial: "QX7M35", batteries: 0, wires: [yellow, blue, white], expect: { type: cut, index: 1 } }
|
|
- { serial: "ZP2R44", batteries: 2, wires: [green, yellow, white, yellow, red], expect: { type: cut, index: 2 } }
|
|
- { serial: "AB9C11", batteries: 3, wires: [red, green, white, yellow], expect: { type: cut, index: 4 } }
|
|
- { serial: "LM3N07", batteries: 1, wires: [blue, green, white, red, yellow], expect: { type: cut, index: 4 } }
|
|
button:
|
|
- { batteries: 0, label: LOVE, color: red, strip: blue, expect: { type: tap } }
|
|
- { batteries: 0, label: HOLD, color: red, strip: white, expect: { type: tap } }
|
|
- { batteries: 3, label: PRESS, color: blue, strip: yellow, expect: { type: tap } }
|
|
- { batteries: 1, label: PRESS, color: white, strip: blue, expect: { type: hold, releaseDigit: 4 } }
|
|
- { batteries: 2, label: ABORT, color: yellow, strip: yellow, expect: { type: hold, releaseDigit: 5 } }
|
|
- { batteries: 4, label: HOLD, color: blue, strip: red, expect: { type: hold, releaseDigit: 1 } }
|
|
keypad:
|
|
- { symbols: [star, flower, heart, sun], expect: [heart, star, sun, flower] }
|
|
- { symbols: [spade, plane, anchor, moon], expect: [anchor, spade, plane, moon] }
|
|
- { symbols: [music, umbrella, diamond, sun], expect: [diamond, sun, umbrella, music] }
|