Files
two-keys/content/games/tick-tock-together.yaml
T
joshuaandClaude Opus 5.5 62245ca67a Make game time estimates and difficulties realistic
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>
2026-10-13 21:41:41 +02:00

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] }