Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Clarifies game design requirements and produces a Game Design Document (GDD). Use this skill BEFORE writing any game code. Triggers when the user describes a game idea, says "make a game", "build a {genre}", "I want a platformer", "create a tower defense", or provides any game concept — even vague ones like "make something fun" or "I have a game idea". Also triggers on "plan a game", "design a game", "game design document", "GDD". ALWAYS run game-planner before starting implementation. If the us
.claude/skills/randallliuxin-game-planner/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 229% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 210% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 26% | 0% |
$ARGUMENTS
You are conducting a Socratic game design interview. Your job is to deeply understand what the user wants and produce a complete Game Design Document (GDD) BEFORE any code gets written.
The core rule: ASK before you ACT. Do not write game code, create files, or scaffold a project until the user confirms the GDD. The only output of this skill is a structured GDD document.
Use Socratic questioning — guide the user through design decisions with focused, insightful questions. Don't just collect answers; help the user think through implications:
Key principles:
When /gm-gdd provides an Initial User Concept, treat it as the user's freeform pre-brief. Extract concrete decisions before asking Round 1 questions:
Do not re-ask anything the concept already answers. Start Round 1 by briefly stating the assumptions you extracted, then ask only the remaining high-leverage gaps.
The flow has two phases:
gdd-auditor subagent) scoped to the current tag. Pass 1 (Round 6) always runs. Pass 2 (Round 7) runs only when Pass 1 meets the trigger in that round. Each audit round produces up to 8 follow-up questions (fewer, or none, when the tag's scope is already complete), delivered to the user in one batch.Round 8 is the user's final review (Ask Maker mode). Pass 1 is mandatory; do not skip it.
Goal: Establish what the game IS and what the player DOES.
Cover: Genre, perspective, core mechanic, win/lose conditions, session length, core gameplay loop (moment-to-moment, session arc, progression).
GodotMaker currently targets 2D games. Choose the appropriate 2D perspective for the genre; do not ask the user to choose a project dimension.
Before asking, load smart defaults for the genre:
| Genre | Perspective | Camera | Input | Physics | Typical Scope | |-------|------------|--------|-------|---------|--------------| | Platformer | 2D side-view | Horizontal follow | Keyboard + Gamepad | Gravity, ground/wall collision | 5-10 levels | | Top-down shooter | 2D top-down | Follow player | WASD + Mouse | Projectile collision, no gravity | Wave-based or level-based | | Puzzle | 2D | Fixed or grid-based | Mouse / Touch | Minimal or grid-snap | 20-50 levels | | Tower defense | 2D top-down | Fixed or zoomable | Mouse / Touch | Path following, range detection | 10-20 waves | | RPG | 2D top-down | Follow player | Keyboard + Mouse | Tile collision | Overworld + dungeons | | Bullet hell | 2D top-down | Fixed on player | Keyboard / Gamepad | Projectile collision, no gravity | Stage-based | | Endless runner | 2D side-view | Auto-scroll | One-button / Tap | Gravity, obstacle collision | Infinite, score-based | | Fighting game | 2D side-view | Fixed arena | Gamepad + Keyboard | Hitbox/hurtbox, gravity | Character roster | | RTS | 2D top-down | Free pan + zoom | Mouse + Keyboard | Pathfinding, unit collision | Campaign or skirmish | | Survival | 2D top-down or side-view | Follow player | WASD + Mouse | World collision, resource interaction | Open-ended |
How to present Round 1: State what you already know (from user's input + genre defaults), then ask only the gaps. Example:
> "Got it — 2D side-scrolling platformer with gravity physics. The core loop is > run-and-jump through levels. A few things to nail down: > 1. What's the core mechanic beyond basic movement — wall-jump, dash, combat, grapple? > 2. How does a level end — reach a goal, defeat a boss, or time-based? > 3. Roughly how long should one session feel — 5 minutes or 30 minutes?"
Wait for answer before proceeding.
Goal: Detail the mechanics and the things that exist in the game world.
Cover: Core mechanics table (mechanic → player action → feedback), secondary/stretch mechanics, player character abilities/constraints, enemies/NPCs, interactive objects.
Skip §5 (Characters & Entities) for abstract games without characters.
Ask about the relationship between mechanics and entities:
For gameplay actors, record target screen presence as viewport-height percent and target pixels at the chosen viewport:
| Game shape | Default actor height | |------------|----------------------| | Top-down exploration / RPG | 8% viewport height | | Survivor / twin-stick / bullet hell | 6% viewport height | | Side-view platformer | 12% viewport height | | Action platformer / brawler | 16% viewport height | | Fighting / duel arena | 45% viewport height |
For pixel art, snap target actor heights to common source sizes such as 16, 24, 32, 48, 64, or 96 px.
Goal: Define the visual/emotional identity and structural design.
Cover: Theme/setting, art style, visual mode, target viewport, mood, level/scene design, difficulty progression, UI elements (HUD, menus), juice/feedback (particles, screen shake, hit flash).
Record display specs in GDD §4:
pixel art or non-pixel 2D.1280x720 for non-pixel 2D when unspecified.480x270 for pixel art when unspecified.For games with environments/levels (platformer, tower defense, RPG, top-down): ask what terrain, paths, blockers, hazards, exits, build pads, and landmarks the player should see and use. Plan current playable units with sprite-based placement, collision shapes, and scene-object metadata. Record TileMap requests as deferred scope.
Skip §4 (Game World) for abstract games. Skip §6 (Level Design) for endless/procedural games — instead ask about generation rules.
Goal: Define what assets are needed and group scope into playable units.
Cover: Music needs per scene (mood/style), SFX list, art asset requirements, playable unit candidates, deferred features, content volume.
Focus on WHAT the game needs (design perspective), not whether the user HAS files. Asset collection happens later in /gm-asset — game-planner only defines requirements.
Example questions:
Only start this after Rounds 1-4 are complete (with appropriate sections skipped).
Compile everything into the GDD using the template at .claude/templates/GDD.md. The draft GDD stays internal across Rounds 5-7 — do NOT show any version to the user until v3 is ready in Round 8.
Rules for synthesis:
Spawn the gdd-auditor subagent with a fresh context. Pass it the full GDD v1, the iteration number 1, and the current tag's scope.
Agent({
subagent_type: "gdd-auditor",
description: "Audit GDD draft (pass 1)",
model: "{auditor_model from .godotmaker/config.yaml, default: sonnet}",
prompt: "{audit brief below}"
})Audit brief:
## Audit: GDD draft, iteration 1
### GDD Path
{absolute path to GDD.md}
### Iteration
1
### Current Tag
{current tag id — always v0.1.0 in initial mode; the current tag from /gm-gdd in subsequent mode}
### Current Tag Scope
{initial mode: the v0.1.0 first-playable-unit definition from Round 4.
subsequent mode: the current tag's ROADMAP bullets passed in by /gm-gdd.}
### Shipped Tags (out of scope)
{subsequent mode only: list prior tags already shipped; omit in initial mode}
### Game Genre Hint
{genre from Round 1}The auditor returns up to 8 follow-up questions (possibly none). Two outcomes:
complete / no questions — tell the user the audit found nothing to fill in for {tag}, keep the GDD as v2 = v1, and skip straight to Round 8 (do not run Pass 2).> "I've drafted the GDD, but before showing it to you I had an independent reviewer audit it for {tag}. They flagged {N} gaps worth filling in. Please answer these in one go — anything you don't have a strong opinion on, just say 'your call': > > 1. State & Lifecycle] Can the player pause? If so, does pausing freeze audio too? (default: yes to both) > 2. Failure & Recovery] When the player dies, do they restart the level or hit a checkpoint? > 3. ..." > > "Reply with answers (or 'your call' for any item) and I'll fold them into v2."
Wait for the user's batched answers, then update the GDD → v2.
Run Pass 2 only if Pass 1 met the trigger: Pass 1 returned ≥3 follow-up questions OR its verdict flagged any contradiction. Otherwise skip Pass 2 and go to Round 8.
When the trigger is met, spawn the auditor again with iteration 2. You MUST populate the Previously Asked field with the exact questions asked in Round 6 — otherwise the auditor will re-ask the same gaps.
Agent({
subagent_type: "gdd-auditor",
description: "Audit GDD draft (pass 2)",
model: "{auditor_model from .godotmaker/config.yaml, default: sonnet}",
prompt: "{audit brief below}"
})Audit brief:
## Audit: GDD draft, iteration 2
### GDD Path
{absolute path to GDD.md}
### Iteration
2
### Current Tag
{same current tag as Pass 1}
### Current Tag Scope
{same scope as Pass 1}
### Shipped Tags (out of scope)
{subsequent mode only: same list as Pass 1; omit in initial mode}
### Previously Asked (do not repeat)
- {Round 6 question 1, verbatim}
- {Round 6 question 2, verbatim}
- ...
### Game Genre Hint
{genre from Round 1}The second pass typically finds finer-grained issues: contradictions introduced by the v2 edits, balance numbers still vague, mechanic interactions still undefined.
Present the second batch to the user the same way:
> "Second and final audit pass — {N} more questions. Same rule: 'your call' is fine for anything you don't care about."
Fold the answers into the GDD → v3. This is the version the user reviews in Round 8.
Present the complete GDD to the user for review.
> "Here's the complete Game Design Document. Please review it — you can: > 1. Confirm it as-is to proceed > 2. Point out specific sections to change (e.g., 'change Section 3 to add a dash mechanic') > 3. Ask Maker — describe what you want changed in natural language and I'll update the GDD > (e.g., 'I think the difficulty ramps too fast' or 'add a shield mechanic')"
Ask Maker mode: When the user requests modifications:
Repeat until the user confirms. Do NOT proceed to implementation until confirmed.
Once confirmed, the GDD becomes the source of truth for all downstream stages.
When the GDD is being decomposed into PLAN.md (by /gm-gdd), the Characters & Entities section maps directly to ECS components:
| Genre | Typical Components | |-------|-------------------| | Platformer | C_Velocity, C_Gravity, C_Grounded, C_JumpState, C_PlayerInput, C_Health | | Top-down shooter | C_Velocity, C_Aim, C_Weapon, C_Health, C_EnemyAI, C_BulletEmitter | | Puzzle | C_GridPosition, C_PuzzlePiece, C_Selectable, C_MatchGroup | | Tower defense | C_PathFollow, C_Tower, C_Range, C_Projectile, C_WaveSpawner | | RPG | C_Stats, C_Inventory, C_DialogTrigger, C_QuestState, C_TurnOrder |
These are starting points — /gm-gdd adapts the choice based on the specific GDD.
/gm-gdd's own synthesis step)/gm-asset)| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 8,430 | 5,351 | -37% | 1 | 1 | 0% | 1,393 | 4,583 | +229% | 0 | 0 | — |
case-02 | fail→fail | 8,507 | 6,331 | -26% | 1 | 1 | 0% | 1,375 | 4,695 | +241% | 0 | 0 | — |
case-03 | fail→pass | 10,235 | 5,916 | -42% | 1 | 1 | 0% | 1,528 | 4,744 | +210% | 0 | 0 | — |
case-20 | fail→pass | 18,668 | 4,659 | -75% | 1 | 1 | 0% | 4,082 | 4,579 | +12% | 0 | 0 | — |
case-21 | fail→pass | 23,270 | 7,303 | -69% | 1 | 1 | 0% | 4,487 | 5,079 | +13% | 0 | 0 | — |
case-22 | fail→pass | 16,533 | 4,185 | -75% | 1 | 1 | 0% | 3,489 | 4,403 | +26% | 0 | 0 | — |
case-04 | pass→pass | 12,968 | 3,187 | -75% | 1 | 1 | 0% | 2,058 | 4,284 | +108% | 0 | 0 | — |
case-05 | fail→pass | 15,822 | 3,538 | -78% | 1 | 1 | 0% | 2,453 | 4,346 | +77% | 0 | 0 | — |
case-06 | fail→pass | 10,840 | 2,553 | -76% | 1 | 1 | 0% | 1,742 | 4,149 | +138% | 0 | 0 | — |
case-07 | fail→pass | 9,975 | 1,661 | -83% | 1 | 1 | 0% | 1,809 | 4,021 | +122% | 0 | 0 | — |
case-08 | fail→pass | 9,950 | 1,993 | -80% | 1 | 1 | 0% | 1,617 | 4,091 | +153% | 0 | 0 | — |
case-09 | pass→pass | 12,102 | 9,213 | -24% | 1 | 1 | 0% | 1,837 | 5,271 | +187% | 0 | 0 | — |
case-10 | pass→pass | 14,477 | 9,411 | -35% | 1 | 1 | 0% | 2,319 | 5,323 | +130% | 0 | 0 | — |
case-11 | fail→pass | 15,255 | 6,542 | -57% | 1 | 1 | 0% | 2,188 | 4,871 | +123% | 0 | 0 | — |
case-12 | pass→pass | 8,663 | 2,680 | -69% | 1 | 1 | 0% | 1,329 | 4,208 | +217% | 0 | 0 | — |
case-13 | fail→fail | 6,657 | 2,252 | -66% | 1 | 1 | 0% | 967 | 4,068 | +321% | 0 | 0 | — |
case-14 | pass→pass | 12,741 | 4,505 | -65% | 1 | 1 | 0% | 1,951 | 4,509 | +131% | 0 | 0 | — |
case-15 | fail→pass | 11,827 | 7,089 | -40% | 1 | 1 | 0% | 1,720 | 4,936 | +187% | 0 | 0 | — |
case-16 | pass→pass | 14,760 | 2,402 | -84% | 1 | 1 | 0% | 2,228 | 4,164 | +87% | 0 | 0 | — |
case-17 | fail→pass | 13,581 | 10,425 | -23% | 1 | 1 | 0% | 2,205 | 5,405 | +145% | 0 | 0 | — |
case-18 | pass→pass | 17,664 | 11,306 | -36% | 1 | 1 | 0% | 2,801 | 5,742 | +105% | 0 | 0 | — |
case-19 | pass→pass | 14,378 | 3,482 | -76% | 1 | 1 | 0% | 2,560 | 4,336 | +69% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +55 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.