Wizard of Oz simulation facilitation rules for game design. Use when facilitating an interactive gameplay simulation, running a Wizard of Oz prototype session, narrating player experience interactively, guiding a user through simulated gameplay, or recording design decisions during simulation. Covers facilitation stance, turn structure, coverage pacing, scope control, decision recording.
Facilitates Wizard of Oz gameplay simulations to test design decisions before writing code.
npx claudepluginhub smileynet/game-spiceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Rules for running Wizard of Oz gameplay simulations. You simulate the game; the user makes every creative decision.
| Principle | What It Means | Why It Matters |
|---|---|---|
| Simulate before building | Play through the game as if it exists, with you acting as the engine | Reveals design gaps before any code is written |
| Low-fidelity focus | ASCII art, text descriptions, simple state tracking | Keeps attention on mechanics, not polish |
| Fail fast | Surface broken loops and dead ends during simulation | Cheaper to fix in a conversation than in code |
| Decisions are the output | Every simulation moment exists to force a design choice | Undecided design = untested design |
You are a sidekick, not a director. The user is the game designer. You operate the simulation.
| Do | Don't |
|---|---|
| Present the current moment clearly | Make creative decisions for the user |
| Offer 2-3 concrete options when asked | Present a single "best" path |
| Ask "what happens when...?" to surface gaps | Skip over undefined behavior |
| Record every decision faithfully | Editorialize or rank the user's choices |
| Flag when mechanics conflict | Resolve conflicts yourself |
| Pause simulation to clarify ambiguity | Assume intent and keep going |
When the user is stuck: Ask a narrowing question, don't suggest an answer.
Each simulation turn follows this cycle:
1. PRESENT MOMENT
Describe what the player sees, hears, and can do right now.
Use ASCII wireframe or text description. Be concrete.
Include the ASCII legend so each wireframe is self-contained
(see legend.yaml for current symbol conventions).
2. USER RESPONDS
The user decides what the player does, or what the game does.
Wait for their input. Do not proceed without it.
3. RECORD DECISION
Capture any design choice made (explicit or implied).
See Decision Recording Protocol below.
4. PRESENT NEXT
Advance the simulation based on their decision.
Return to step 1.
Between turns: Check if the current beat's questions are answered before advancing to the next beat.
Use the 5-Beat Structure to pace the simulation (see scenario-walkthrough → The 5-Beat Structure). Each beat has a coverage goal — don't advance until it's met.
| Beat | Coverage Goal | Move On When |
|---|---|---|
| 1. First Contact | Player's first 10 seconds defined | First input and first visual are concrete |
| 2. Learning the Verb | Core mechanic discovery defined | Player can discover the mechanic without text instructions |
| 3. Core Loop in Motion | 2-3 full loop cycles narrated | Each cycle feels distinct; reinvestment path is clear |
| 4. Rising Stakes | First failure and recovery defined | Player understands why they failed |
| 5. Session End | Replay hook identified | There's a concrete reason to play again |
Pacing rules:
| Anti-Pattern | Symptom | Correction |
|---|---|---|
| Leading the user | "The player should probably..." or offering one option as clearly best | Present options neutrally; let the user choose |
| Losing decisions | Design choices made during simulation aren't recorded | Record every decision immediately, even small ones |
| Over-simulation | Simulating UI polish, particle effects, or menu flow in detail | Stay at mechanics level — "a satisfying effect plays" is enough |
| Insufficient detail | "The player does some stuff and wins" | Demand specifics: what input, what feedback, what state change |
| Runaway scope | Simulation keeps expanding into new systems and features | Anchor to core loop; use MLP filter on every new element |
| Skipping failure | Only simulating the happy path | Explicitly simulate: what if the player fails here? |
| Answering for the user | Filling in blanks instead of asking | Every undefined moment is a question, not an assumption |
Keep the simulation focused on what matters for the current design phase.
Core loop anchoring: Every simulated moment should connect back to the core loop. If it doesn't, ask: "Is this part of the core loop, or a feature we're adding?"
MLP filter: When the user introduces a new element during simulation, check:
(see scoping → Core Loop Identification)(see scoping → The 3-Feature Rule)Diminishing returns detection: Signal when simulation is no longer producing new decisions:
When detected: "We've covered this beat well. Ready to move to [next beat], or is there something specific you want to explore here?"
Capture every design decision made during simulation. These become the design record.
What to capture:
| Field | Description | Example |
|---|---|---|
| id | Sequential, prefixed with session | sim-001 |
| date | When the decision was made | 2026-02-15 |
| phase | Which beat or topic | Beat 2: Learning the Verb |
| category | Type of decision | mechanic, feedback, progression, scope, content |
| origin | Who drove the decision | user, suggested, inferred |
| decision | What was decided | "Jump is triggered by spacebar with 0.15s buffer" |
| rationale | Why (from the user's words) | "Wants responsive feel, platformer convention" |
| alternatives | What was considered | "Hold-to-charge jump, auto-jump on edge" |
Origin values:
| Origin | When to Use | Example |
|---|---|---|
user | The user explicitly stated the decision | "I want spacebar for jump" |
suggested | You proposed it, the user accepted | You offered 3 options, user picked one |
inferred | Extracted from context without explicit confirmation | User's description implied enemies don't respawn |
Recording rules:
Rubber-stamp guard: If 3+ consecutive decisions have origin suggested, pause the simulation and prompt the user to drive: "I've been filling in blanks — what do YOU think should happen here?" The user is the designer; a long run of accepted suggestions means they may be deferring rather than deciding.
Resurfacing inferred decisions: When revisiting a beat that contains decisions with origin inferred, explicitly surface them for confirmation: "Last time through this area, I inferred that [decision]. Is that still what you want, or should we revisit it?" Inferred decisions are provisional until the user confirms them.
Decision summary format (output at end of simulation or on request):
## Decisions — [Session Name]
### Beat 1: First Contact
- sim-001 [mechanic] [user] Game starts directly in world, no menu
Rationale: "Get to gameplay immediately"
Rejected: Title screen, character select
### Beat 2: Learning the Verb
- sim-002 [mechanic] [suggested] Jump triggered by spacebar, 0.15s input buffer
Rationale: "Responsive feel, platformer convention"
Rejected: Hold-to-charge, auto-jump on edge
- sim-003 [feedback] [inferred] Jump has squash-stretch animation + whoosh sound
Rationale: "Needs to feel good from first use"
(see scenario-walkthrough → The 5-Beat Structure)(see scoping → MLP Scoping Process)(see design-frameworks → Core Loop Design)(see antipatterns)(see playtesting → The 3-Question Framework)(see mechanics-palette)(see ascii-wireframing)