This page is the single source of truth for every minigame. Each section lists the export, the player mechanic, and every option with its valid range and per-difficulty default.
All options are optional. The numbers shown are clamped at runtime — passing values outside the range does not error; they get clamped to the nearest endpoint. Per-difficulty defaults are picked up automatically when an option is omitted.
Reference table
| Game | Export | Variants | Mechanic |
|---|
| Pattern | Pattern(opts) | terminal, bare | Repeat a flashing sequence on a grid. |
| Circuit | Circuit(opts) | terminal, bare | Rotate pipes to connect endpoints. |
| Sequence | Sequence(opts) | terminal, bare | Greek letters appear, hide, then re-enter. |
| Verbal | Verbal(opts) | terminal, bare | Mark words as SEEN or NEW. |
| Memory | Memory(opts) | terminal, bare | Memorize lit tiles, click them all. |
| Crack | Crack(opts) | terminal, bare | Mastermind-style code deduction. |
| Sniffer | Sniffer(opts) | terminal, bare | Click matching packets in a live stream. |
| ColorCount | ColorCount(opts) | terminal, bare | Count colored cells, answer questions. |
| Drill | Drill(opts) | bare-only | Manage drill heat vs depth. |
| Lockpick | Lockpick(opts) | strip-only | Sweep timing on a moving cursor. |
| Fishing | Fishing(opts) | strip-only | Park a moving zone on a fish. |
| Path | Path(opts) | terminal, bare | Click points in nearest-neighbor order. |
| Untangle | Untangle(opts) | terminal, bare | Drag nodes until no edges cross. |
| Hotkey | Hotkey(opts) | terminal, bare | Hit each shown key inside a window. |
| Tracer | Tracer(opts) | terminal, bare | Hold cursor inside a moving target. |
| Aim | Aim(opts) | terminal, bare | Click shrinking targets before they expire. |
| Cadence | Cadence(opts) | terminal, bare | Hold a key for the right duration. |
| Flick | Flick(opts) | strip-only | Tap arrow keys in sequence. |
| Cut | Cut(opts) | strip-only | Steer a cursor along a wavy line. |
| Shell | Shell(opts) | terminal, bare | Complete shell-style typed goals. |
| Outrun | Outrun(opts) | terminal, bare | Type characters before the trace fills. |
| Balance | Balance(opts) | strip-only | Inverted-pendulum hold with Q/E. |
| Masher | Masher(opts) | strip-only | Mash one or more keys to fill an arc. |
| Minesweeper | Minesweeper(opts) | terminal, bare | Classic Minesweeper. |
| Rhythm | Rhythm(opts) | terminal, bare | 4-lane note hits. |
| LightsOut | LightsOut(opts) | terminal, bare | Toggle every cell on. |
| Towers | Towers(opts) | terminal, bare | Stack-and-slice timing game. |
| Safe | Safe(opts) | terminal, bare | Audio-clue dial safecracker. |
| Frequency | Frequency(opts) | bare, screen-4x3 | Multiplayer tuning game (see its own page). |
Pattern
NxN grid flashes a growing sequence; player repeats it by clicking.
exports.cc_minigames:Pattern({ difficulty = 'hard', rounds = 6 })
| Option | Range | Default (medium) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
rounds | 1–12 | 4 |
gridSize | 3–6 | 4 |
Circuit
Grid of rotatable pipes; connect the start endpoint to the end before time runs out.
| Option | Range | Default (medium) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
gridSize | 3–7 | 5 |
timeLimit | seconds, 0 = none | 60 |
Sequence
Greek letters appear one at a time, the full sequence holds, then hides. Player re-enters it on the keypad.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
length | 3–9 | 4 / 5 / 6 |
revealMs | ≥ 250 | 900 / 750 / 600 |
holdMs | ≥ 1000 | 4500 / 3500 / 2500 |
Verbal
One word at a time. Click SEEN (Q) or NEW (E). Lose on too many mistakes; win on a streak.
| Option | Range | Default (medium) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
lives | 1–5 | 3 |
winStreak | 5–40 | 15 |
Memory
Random tiles light up on a grid, then hide. Click all of them.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
gridSize | 3–6 | 4 |
tiles | 2–16 | 4 / 6 / 8 |
mistakes | 0–10 | 0 (instant-fail) |
showTime | ≥ 600 ms | 1800 |
Crack
Mastermind. Deduce the hidden color combo from per-slot feedback pegs.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
codeLength | 3–6 | 3 / 4 / 4 |
paletteSize | 3–8 | 5 / 6 / 7 |
attempts | 3–15 | 6 / 5 / 5 |
duplicates | true | false | false (medium) / true (hard) |
timeLimit | seconds, 0 = none | 0 |
Sniffer
A live packet stream scrolls past. Click every packet matching the target signature (proto + IP + port + flag). Missed or false clicks cost a life.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
targets | 1–10 | 3 / 4 / 5 |
spawnMs | 200–2000 | 1200 / 950 / 700 |
misses | 0–10 | 3 / 2 / 1 |
ColorCount
A grid of colored cells flashes. Hide it, then ask “how many of color X were on the board”. Multiple rounds.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
gridSize | 3–7 | 7 / 8 / 9 |
showTime | ≥ 1000 ms | 10000 / 9000 / 9000 |
rounds | 1–10 | 2 / 3 / 3 |
questionsPerRound | 1–5 | 1 |
paletteSize | 2–6 | 2 / 3 / 4 |
maxPerColor | 1–30 | 4 / 5 / 6 |
zeroChance | 0–1 | 0.10 / 0.18 / 0.25 |
mistakes | 0–10 | 1 / 1 / 0 |
gridSize is clamped to a max of 7 by the normalizer even though the medium and hard defaults reference 8 and 9. The defaults table is read first, then the clamp applies — meaning all three difficulties currently render at gridSize 7 unless you pass an explicit override below 7. Worth knowing if you’re tuning.
Drill
Manage drill power: heat rises with applied power, cools when idle. Strikes cost lives; depth is the goal.
Drill is bare-only. The terminal chrome reads thematically wrong against an industrial drill panel.
| Option | Range | Default (easy / medium / hard) |
|---|
difficulty | easy | medium | hard | medium |
depth | 20–400 | 100 / 130 / 160 |
heatRate | 5–200 (heat/sec at 100% power) | 24 / 32 / 46 |
coolRate | 5–200 (heat/sec at 0% power) | 26 / 20 / 16 |
strikes | 0–10 | 3 / 3 / 2 |
timeLimit | 0–600 seconds | 60 / 55 / 45 |
Lockpick
A cursor sweeps a horizontal track. Tap when the cursor is over the (hidden) zone to set a pin. Misses cost strikes.
| Option | Range | Default (easy / medium / hard) |
|---|
difficulty | easy | medium | hard | medium |
pins | 1–12 | 4 / 5 / 6 |
sweepMs | 200–5000 | 1300 / 950 / 700 |
zoneFrac | 0.02–0.5 | 0.13 / 0.09 / 0.06 |
strikes | 0–10 | 2 / 1 / 1 |
timeLimit | 0–600 seconds | 0 (none) |
Fishing
Direct port of the cc-fishgame mechanic — keep a moving zone over a fish until the bar fills. Uses rarity instead of difficulty.
| Option | Range | Default per rarity |
|---|
rarity | common | uncommon | rare | epic | legendary | common |
zoneFrac | 0.05–0.6 | scales down by rarity (≈ 0.38 common → 0.21 legendary) |
noiseMag | 0.5–30 | 1.5 / 2.0 / 3.0 / 4.0 / 4.5 |
timeLimit | 2–120 seconds | 30 / 27 / 24 / 20 / 17 |
Path
A field of points appears with one highlighted as the start. Click the nearest unvisited point. Wrong-click instant-fails. Multiple rounds.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
pointsBase | 2–20 | 5 / 6 / 8 |
pointsStep | 0–8 | 1 / 2 / 2 |
rounds | 1–10 | 3 |
timeLimit | 2–600 seconds | 30 / 25 / 20 |
Untangle
A planar-by-construction graph spawns with edges visibly intersecting. Drag points until no two edges cross.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
points | 3–20 | 6 / 8 / 10 |
density | 1.0–3.0 (edges = round(points × density)) | 1.4 / 1.6 / 1.7 |
timeLimit | 5–600 seconds | 35 / 30 / 25 |
showIntersections | boolean | true (easy/medium) / false (hard) |
Hotkey
Each prompt shows a key and a window. Hit it inside the window or eat a miss.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
targets | 1–40 | 8 / 10 / 12 |
windowMs | ≥ 150 | 1300 / 950 / 700 |
gapMs | ≥ 0 | 350 / 250 / 180 |
misses | 0–10 | 2 / 1 / 0 |
Tracer
Hold the cursor inside a moving target circle for a duration.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
holdMs | ≥ 1000 | 4000 / 5000 / 6000 |
tolerance | 12–120 px | 60 / 45 / 32 |
speed | 0.3–4.0 | 1.0 / 1.4 / 1.9 |
volatility | 0.0–4.0 | 0.5 / 1.0 / 1.6 |
timeLimit | 0–180 seconds | 25 |
Aim
Click shrinking circles before they vanish.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
targets | 1–100 | 12 / 15 / 20 |
lifetimeMs | ≥ 200 | 2100 / 1500 / 1050 |
startRadius | 8–60 px | 28 / 24 / 20 |
endRadius | 2–40 px | 6 / 4 / 3 |
misses | 0–20 | 4 / 2 / 1 |
timeLimit | 0–300 seconds | 60 |
Cadence
Hold a key for a target duration with a percentage tolerance (and a floor for short targets).
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
holds | 1–12 | 3 / 4 / 5 |
tolerancePct | 0.01–0.5 | 0.18 / 0.12 / 0.07 |
toleranceFloorMs | 40–2000 | 600 / 450 / 300 |
minDurationMs | 1000–20000 | 5000 |
maxDurationMs | 1000–30000 | 15000 |
misses | 0–10 | 2 / 1 / 0 |
Flick
A row of arrow keys. Tap them in order before time runs out.
| Option | Range | Default (easy / medium / hard) |
|---|
difficulty | easy | medium | hard | medium |
length | 2–40 | 5 / 8 / 12 |
timeMs | 1000–30000 | 6000 / 5500 / 5000 |
Cut
Steer a cursor along a wavy guideline without slipping off.
| Option | Range | Default (easy / medium / hard) |
|---|
difficulty | easy | medium | hard | medium |
widthFrac | 0.04–0.6 | 0.32 / 0.22 / 0.14 |
amplitudeFrac | 0.0–0.45 | 0.30 / 0.40 / 0.40 |
bumps | 1–8 | 2 / 3 / 4 |
timeMs | 0–60000 | 8000 / 7000 / 6000 |
Shell
Type-through goals on a fake shell. Difficulty scales the goal count; the timer is shared across all goals.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
timeMs | 10000–600000 | 150000 |
goals | 1–8 | 1 / 2 / 3 |
Outrun
Type characters before a “trace” bar fills. Higher difficulty = less time, more chars, harsher lines.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
traceMs | 10000–300000 | 65000 / 55000 / 45000 |
chars | 40–2000 | 160 / 220 / 300 |
Balance
Inverted-pendulum dial. Q/E apply held-counter-torque (which ramps up). Stay in the green wedge for holdSeconds.
| Option | Range | Default (easy / medium / hard) |
|---|
difficulty | easy | medium | hard | medium |
holdSeconds | 2–60 | 8 / 10 / 12 |
gravity | 0.5–20 | 2.5 / 3.0 / 3.4 |
driftForce | 0–20 | 1.2 / 1.8 / 2.0 |
pushStrength | 0.5–20 | 7.0 / 7.5 / 8.0 |
pushRampMs | 50–5000 | 700 / 600 / 450 |
greenFrac | 0.05–0.95 | 0.55 / 0.45 / 0.35 |
yellowFrac | (greenFrac+0.05)–0.98 | 0.85 / 0.72 / 0.66 |
Masher
Mash a key to fill an arc faster than it drains. Optionally split into multiple keys.
| Option | Range | Default (easy / medium / hard) |
|---|
difficulty | easy | medium | hard | medium |
gainPerPress | 0.001–0.5 (arc % per press) | 0.040 / 0.030 / 0.025 |
drainPerSec | 0–1.0 | 0.015 / 0.025 / 0.040 |
timeMs | 2000–60000 | 12000 / 10000 / 8000 |
keys | string (e.g. "ADK") or array (e.g. {'A','D','K'}) | nil — single random key |
When keys is supplied each key gets a 1/N slice of timeMs and must reach 100% within its slice.
Minesweeper
Classic Minesweeper.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
cols | 3–16 | 6 / 8 / 10 |
rows | 3–16 | 6 / 8 / 10 |
mines | 1 to (cols × rows − 9) | 6 / 10 / 18 |
timeMs | 10000–600000 | 120000 |
Rhythm
4-lane note-hit. Hit % over the chart length must clear the threshold.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
lengthMs | 5000–120000 | 25000 / 30000 / 35000 |
threshold | 0.10–1.00 | 0.60 / 0.70 / 0.80 |
notesPerSec | 0.5–8.0 | 0.7 / 1.0 / 1.5 |
chordChance | 0.0–0.5 | 0.05 / 0.08 / 0.12 |
LightsOut
Click a cell to toggle it and its 4-neighbours. Goal: turn ALL lights ON. Generated solvable.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
size | 3–8 | 3 / 5 / 5 |
toggles | 1–40 | 4 / 12 / 18 |
timeMs | 10000–300000 | 60000 / 60000 / 45000 |
Towers
Block slides side-to-side; press SPACE to drop. Overhang is sliced. Reach targetStacks to win. Speed escalates +5% per block.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
targetStacks | 2–40 | 8 / 12 / 16 |
baseSpeedPxSec | 60–900 | 220 / 320 / 440 |
perfectPx | 1–20 | 6 / 5 / 4 |
Safe
Safecracker dial. A/D rotate, W locks. The dial plays a tumbler-fall sound at the right tick — stop on it, lock, then reverse for the next pin.
| Option | Range | Default (easy / medium / hard) |
|---|
variant | terminal | bare | terminal |
difficulty | easy | medium | hard | medium |
pinCount | 1–8 | 2 / 3 / 4 |
toleranceTicks | 0–10 | 1 |
ticks | 20–360 | 100 |
spinSpeed | 0.5–120 ticks/sec | 2.5 / 3.5 / 5 |
code | string | nil — no reward sticky |
skipToCode | boolean | false |
When code is supplied and the safe is cracked, a sticky-note overlay shows the code and waits for the player to dismiss it before the export resolves.
Frequency (solo-only on this page)
A two-player tuning game. The “viewer” reads a target waveform, the “tuner” adjusts probe frequency and amplitude until both axes are within tolerance, then both players hold for holdSeconds to win. The server is authoritative.
For the two-player setup, see the dedicated Frequency multiplayer page. The export below covers solo debug usage and the per-client invocation that the server triggers behind the scenes.
| Option | Range | Default (easy / medium / hard) |
|---|
difficulty | easy | medium | hard | medium |
role | viewer | tuner | both | viewer |
variant | bare (always for tuner / both); bare | screen-4x3 (viewer only) | bare |
tolerance | 1–40 (% of axis range) | 12 / 8 / 5 |
holdSeconds | 0.5–15 | 2.5 / 3.0 / 3.5 |
drift | 0–5 | 0 / 0.6 / 1.4 |
timeLimit | 0–600 seconds | 90 / 75 / 60 |
solo | boolean | false |
sessionToken | string | nil — required for networked sessions |
code | string ≤ 32 chars (printable ASCII) | nil |
skipToCode | boolean | false (only honored when code is set) |
-- Solo debug: render both halves locally, no server session
exports.cc_minigames:Frequency({ solo = true, role = 'both', difficulty = 'medium' })