game-dev — build a playable game from scratch
What this sub-skill is for
Standing up a new game built from nothing: a real engine project with a playable core loop,
art/audio pipeline, and a build that runs on the target platform. Loaded by new-project for any
"make a game / prototype this idea / build a playable demo" request. This is distinct from
game-mod (modding an existing game's install). The whole skill is organized around one idea:
ship a small, playable slice before scaling scope — a game you can actually play beats a
beautiful engine project that never reaches a loop.
Mandatory grill-questions (fold into the Definition of Ready)
Lock these before opening the engine:
- Engine + why — Godot (open, fast 2D/3D, default), Unity (asset ecosystem/mobile), Unreal
(high-end 3D), or web (Phaser for 2D, Three.js/Babylon for 3D, ships in a browser). Pick from
scope + target, not familiarity alone; justify it.
- 2D vs 3D — decides art pipeline, physics, and team-of-one feasibility. 3D triples scope.
- Genre + the core loop — name the genre and the one verb-loop the player repeats (move-shoot,
match-clear, build-defend). Everything else is decoration until the loop is fun.
- Scope / MVP — what the vertical slice is: one level, one mechanic, one enemy, win+lose.
Cut everything not in the slice. What's explicitly out of v1?
- Target platform — PC (Win/Linux/macOS), web, mobile (iOS/Android), or console? Drives the
engine export and input model. Pick one to ship first.
- Art pipeline — own art, asset-store/licensed, or AI-generated (higgsfield)? Resolution,
style, and whether sprites/models are placeholder-now / final-later.
- Audio — music + SFX source (own, licensed, higgsfield
generate_audio)? Even placeholder.
- Multiplayer? — single-player first almost always; if multiplayer is core, name the model
(local, P2P, authoritative server) — it is a scope multiplier, flag it loudly.
- Save/progression + monetization — needed for v1 or deferred? Don't build economy before loop.
Project sub-agents to generate (into <project>/.claude/agents/)
gameplay-loop-builder (delegate-by-default) — implements and tunes the core loop
(input → state → feedback), keeps the slice playable every commit, resists feature creep.
asset-pipeline (delegate-by-default) — generates/imports/optimizes sprites, models,
audio, and atlases into the engine's import settings; chains the higgsfield skills; tracks
asset provenance/licensing.
level-designer — builds the slice's level(s)/scenes, tuning pacing, difficulty, and
spawn/encounter layout against the loop.
playtest-runner — builds for the target platform, launches the game, plays the loop, and
reports crashes, soft-locks, and broken interactions honestly (this is the verifier role).
- Plus the kit default
reviewer (diff/PR correctness).
Tools / CLIs / MCP / skills needed
Check in environment-readiness; offer install, never auto-install:
- The engine — Godot (single binary, easiest on Linux), Unity Hub + editor, Unreal (heavy),
or Node + a web bundler (Vite) for Phaser/Three.js. Verify it launches and can export.
- Export/build toolchain — Godot export templates; platform SDKs for mobile/console; for web,
a static bundle. Confirm a build for the target platform actually produces a runnable artifact.
- CHAIN the higgsfield MCP + skills for the asset pipeline:
higgsfield-generate
(generate_image for sprites/textures/concept art, generate_video for cutscenes/trailers,
generate_audio for music/SFX), higgsfield-soul-id for a consistent character face, and for a
browser game the game-creation flow — get_game_creation_instructions then
get_game_creation_bundle_file, with deploy_game / publish_game to ship it.
- CHAIN the magic MCP (21st.dev) for menus, HUD, and UI screens;
framer-inspiration /
design-harvest for the marketing/landing page if the game ships with a site.
- CHAIN global skills:
deep-research (engine/genre patterns), verify (launch + play the
build), code-review, cli-anything (wrap a GUI art tool headlessly), pptx (a pitch deck) —
for the deck itself, run it through document-design first (2026-07-29 addition) to decide the
layout properly (Touying if a PDF is fine, PPTX if the recipient must edit it — document-design
now generates PPTX/DOCX with its own decision-gate too, not just Typst/Touying) instead of
typesetting straight into a shipped template.
File / asset nudges (on top of the base set)
Beyond CLAUDE.md, PROJEKT_.md, TASKS.md, DONE.md, README, .claude/:
GAMEDESIGN.md — the one-page design doc: core loop, win/lose, controls, the v1 slice scope,
and the explicit out-of-scope list. The anti-scope-creep contract.
src/ (or engine project dir) — game code/scenes; assets/ split into art/, audio/,
fonts/ with a provenance note per source (own / licensed / AI-generated).
assets/LICENSES.md — every asset's source + license + redistribution right. Non-optional.
builds/ — .gitignored platform builds; large binaries via Git LFS or kept out of the repo.
playtests/ — short logged notes per playtest (what broke, what felt good).
Stack defaults & done-bar
Default stack: Godot 4 (2D or 3D) with GDScript, exporting to the chosen platform; web games on
Phaser 3 (2D) or Three.js (3D) bundled with Vite; assets AI-generated via higgsfield as
placeholders, replaced as the slice firms up; audio via generate_audio; UI via magic. Version the
project in git, keep big binaries out or in LFS.
Done-bar (all true): the core loop runs end-to-end — start, play the loop, reach win and
lose states — in a build for the target platform (not just the editor); it launches and plays
without crashing or soft-locking, confirmed by playtest-runner actually playing it; the vertical
slice is feature-complete to GAMEDESIGN.md; every shipped asset has a recorded license/right.
Guardrails
- Scope discipline is the top rule — ship the small loop first. If a feature isn't in the v1
slice in
GAMEDESIGN.md, it waits. A playable tiny game beats an unfinished big one.
- Honesty about "it's playable": don't claim the loop works until
playtest-runner has built
for the target and actually played start→win/lose. Report crashes and soft-locks plainly.
- Own or licensed assets only — never ship art/audio/models you can't redistribute; record
every source's license in
assets/LICENSES.md. AI-generated assets: confirm the platform's
commercial-use terms.
- Multiplayer/online is a scope multiplier — call out the cost before committing; default to
single-player for v1 unless multiplayer is the whole point.
- No emojis in any in-game UI, menu, or HUD text (user's standing rule) — typographic symbols
or drawn glyphs only.
- Never commit secrets / store keys / signing certs.
- Commits under the user's own name only (Skryx-L-A); never add Claude as a co-author.
1---2name: game-dev3description: Build/set up a game project FROM SCRATCH — a 2D or 3D game in Godot, Unity, Unreal, or the web (Phaser/Three.js) — from the user's grilled answers. Project-kit sub-skill loaded by new-project routing whenever someone wants to build, make, or prototype a game, a playable demo, or a game loop. Chains higgsfield for assets/audio/browser-game generation and magic for menus/UI, and bakes in a playable-vertical-slice done-bar.4---56# game-dev — build a playable game from scratch78## What this sub-skill is for9Standing up a **new game built from nothing**: a real engine project with a playable core loop,10art/audio pipeline, and a build that runs on the target platform. Loaded by `new-project` for any11"make a game / prototype this idea / build a playable demo" request. This is distinct from12`game-mod` (modding an *existing* game's install). The whole skill is organized around one idea:13**ship a small, playable slice before scaling scope** — a game you can actually play beats a14beautiful engine project that never reaches a loop.1516## Mandatory grill-questions (fold into the Definition of Ready)17Lock these before opening the engine:18- **Engine + why** — Godot (open, fast 2D/3D, default), Unity (asset ecosystem/mobile), Unreal19 (high-end 3D), or web (Phaser for 2D, Three.js/Babylon for 3D, ships in a browser). Pick from20 scope + target, not familiarity alone; justify it.21- **2D vs 3D** — decides art pipeline, physics, and team-of-one feasibility. 3D triples scope.22- **Genre + the core loop** — name the genre and the one verb-loop the player repeats (move-shoot,23 match-clear, build-defend). Everything else is decoration until the loop is fun.24- **Scope / MVP** — what the **vertical slice** is: one level, one mechanic, one enemy, win+lose.25 Cut everything not in the slice. What's explicitly out of v1?26- **Target platform** — PC (Win/Linux/macOS), web, mobile (iOS/Android), or console? Drives the27 engine export and input model. Pick one to ship first.28- **Art pipeline** — own art, asset-store/licensed, or AI-generated (higgsfield)? Resolution,29 style, and whether sprites/models are placeholder-now / final-later.30- **Audio** — music + SFX source (own, licensed, higgsfield `generate_audio`)? Even placeholder.31- **Multiplayer?** — single-player first almost always; if multiplayer is core, name the model32 (local, P2P, authoritative server) — it is a scope multiplier, flag it loudly.33- **Save/progression + monetization** — needed for v1 or deferred? Don't build economy before loop.3435## Project sub-agents to generate (into `<project>/.claude/agents/`)36- **`gameplay-loop-builder`** *(delegate-by-default)* — implements and tunes the core loop37 (input → state → feedback), keeps the slice playable every commit, resists feature creep.38- **`asset-pipeline`** *(delegate-by-default)* — generates/imports/optimizes sprites, models,39 audio, and atlases into the engine's import settings; chains the higgsfield skills; tracks40 asset provenance/licensing.41- **`level-designer`** — builds the slice's level(s)/scenes, tuning pacing, difficulty, and42 spawn/encounter layout against the loop.43- **`playtest-runner`** — builds for the target platform, launches the game, plays the loop, and44 reports crashes, soft-locks, and broken interactions honestly (this is the `verifier` role).45- Plus the kit default `reviewer` (diff/PR correctness).4647## Tools / CLIs / MCP / skills needed48Check in environment-readiness; offer install, never auto-install:49- **The engine** — Godot (single binary, easiest on Linux), Unity Hub + editor, Unreal (heavy),50 or Node + a web bundler (Vite) for Phaser/Three.js. Verify it launches and can export.51- **Export/build toolchain** — Godot export templates; platform SDKs for mobile/console; for web,52 a static bundle. Confirm a build for the *target* platform actually produces a runnable artifact.53- **CHAIN the higgsfield MCP + skills** for the asset pipeline: `higgsfield-generate`54 (`generate_image` for sprites/textures/concept art, `generate_video` for cutscenes/trailers,55 `generate_audio` for music/SFX), `higgsfield-soul-id` for a consistent character face, and for a56 *browser* game the game-creation flow — `get_game_creation_instructions` then57 `get_game_creation_bundle_file`, with `deploy_game` / `publish_game` to ship it.58- **CHAIN the magic MCP** (21st.dev) for menus, HUD, and UI screens; `framer-inspiration` /59 `design-harvest` for the marketing/landing page if the game ships with a site.60- **CHAIN global skills:** `deep-research` (engine/genre patterns), `verify` (launch + play the61 build), `code-review`, `cli-anything` (wrap a GUI art tool headlessly), `pptx` (a pitch deck) —62 for the deck itself, run it through `document-design` first (2026-07-29 addition) to decide the63 layout properly (Touying if a PDF is fine, PPTX if the recipient must edit it — `document-design`64 now generates PPTX/DOCX with its own decision-gate too, not just Typst/Touying) instead of65 typesetting straight into a shipped template.6667## File / asset nudges (on top of the base set)68Beyond CLAUDE.md, PROJEKT_<NAME>.md, TASKS.md, DONE.md, README, `.claude/`:69- `GAMEDESIGN.md` — the one-page design doc: core loop, win/lose, controls, the v1 slice scope,70 and the explicit out-of-scope list. The anti-scope-creep contract.71- `src/` (or engine project dir) — game code/scenes; `assets/` split into `art/`, `audio/`,72 `fonts/` with a provenance note per source (own / licensed / AI-generated).73- `assets/LICENSES.md` — every asset's source + license + redistribution right. Non-optional.74- `builds/` — `.gitignore`d platform builds; large binaries via Git LFS or kept out of the repo.75- `playtests/` — short logged notes per playtest (what broke, what felt good).7677## Stack defaults & done-bar78**Default stack:** Godot 4 (2D or 3D) with GDScript, exporting to the chosen platform; web games on79Phaser 3 (2D) or Three.js (3D) bundled with Vite; assets AI-generated via higgsfield as80placeholders, replaced as the slice firms up; audio via `generate_audio`; UI via magic. Version the81project in git, keep big binaries out or in LFS.82**Done-bar (all true):** the **core loop runs end-to-end** — start, play the loop, reach win *and*83lose states — in a **build for the target platform** (not just the editor); it **launches and plays84without crashing or soft-locking**, confirmed by `playtest-runner` actually playing it; the vertical85slice is feature-complete to `GAMEDESIGN.md`; every shipped asset has a recorded license/right.8687## Guardrails88- **Scope discipline is the top rule** — ship the small loop first. If a feature isn't in the v189 slice in `GAMEDESIGN.md`, it waits. A playable tiny game beats an unfinished big one.90- **Honesty about "it's playable":** don't claim the loop works until `playtest-runner` has built91 for the target and actually played start→win/lose. Report crashes and soft-locks plainly.92- **Own or licensed assets only** — never ship art/audio/models you can't redistribute; record93 every source's license in `assets/LICENSES.md`. AI-generated assets: confirm the platform's94 commercial-use terms.95- **Multiplayer/online is a scope multiplier** — call out the cost before committing; default to96 single-player for v1 unless multiplayer is the whole point.97- **No emojis in any in-game UI, menu, or HUD text** (user's standing rule) — typographic symbols98 or drawn glyphs only.99- **Never commit secrets / store keys / signing certs.**100- **Commits under the user's own name only (Skryx-L-A); never add Claude as a co-author.**