ai-behavior-trees-util…
Build a production behavior-tree runtime (Blackboard, action/condition leaves, sequence/selector/parallel composites, decorators)…
Design and build playable levels — the blockout/whitebox-to-playable workflow, player metrics and grid layout, pacing and flow (tension/rest curve), gating and the critical path, and encounter design. Engine-neutral practice. Use when the user mentions level design,
Claude Code
$ npx -y skills add gamedev-skills/awesome-gamedev-agent-skills --skill level-design --agent claude-code
Codex
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill level-design -a codex -y
Cursor
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill level-design -a cursor -y
Gemini CLI
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill level-design -a gemini-cli -y
GitHub Copilot
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill level-design -a github-copilot -y
OpenCode
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill level-design -a opencode -y
Windsurf
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill level-design -a windsurf -y
name: level-design description: > Design and build playable levels — the blockout/whitebox-to-playable workflow, player metrics and grid layout, pacing and flow (tension/rest curve), gating and the critical path, and encounter design. Engine-neutral practice. Use when the user mentions level design, blockout/whitebox/greybox, level layout, level pacing, encounter design, or the critical path through a level.
A level is a **sequence of intentional experiences** delivered through space. Good level design is a *process*: define the metrics movement is built on, block out geometry with primitives, play it, then dress it — never the reverse. This skill is the engine-neutral practice; use `godot-tilemap`/`unity-tilemap-2d` to lay out 2D grids and gridmaps for 3D.
and where the player learns vs is tested.
plays well before any art exists.
reachable and fair.
**When *not* to use:** to *generate* levels algorithmically, use `procedural-gen` (authored and procedural design are complementary). For the engine's tile/grid painting tools, use `godot-tilemap` / `unity-tilemap-2d`. For the movement abilities the metrics come from, that's the engine movement skill + `input-systems`.
1. **Derive metrics first.** Measure the character: max jump height and distance, run speed, reach, camera range. Every gap, ledge, and corridor is sized in these units. Lock them before building geometry. 2. **Blockout (whitebox/greybox).** Build the whole level from untextured primitives at correct scale. Validate flow, sightlines, and reachability while changes are cheap. No art yet. Tools: Godot `CSGBox3D` and friends with `use_collision` on (prototype only: the docs flag their CPU cost, so bake to static meshes later), Unity's ProBuilder package (`com.unity.probuilder`), Unreal's Modeling Mode (Cube Grid), and a plain grey tileset for 2D. 3. **Define the critical path** (start → goal) and the **golden path** you expect most players to take. Layer optional/secret paths off it. 4. **Pace the experience.** Alternate tension and rest in a deliberate curve; don't run combat-combat-combat. Give the player room to breathe and to anticipate. 5. **Teach, then test.** Introduce each mechanic in a safe space, let the player practice, then test it under pressure. Difficulty rises in a sawtooth, not a straight line. 6. **Gate with intent.** Use locks/keys, abilities, and one-way drops to control order and pacing; guide with light, lines, and landmarks rather than walls. 7. **Playtest and iterate.** Watch real players: where do they get lost, stuck, bored, or killed unfairly? Fix the blockout; only dress when it plays well.
# Derive the metrics from the SAME constants the character controller uses, then # size geometry in these units. If the jump changes, the numbers follow. const RUN_SPEED := 240.0 # px/s (or m/s in 3D) const JUMP_VELOCITY := 420.0 # initial upward speed of a full jump const GRAVITY := 980.0 # px/s², the value the controller applies const MAX_JUMP_H := JUMP_VELOCITY * JUMP_VELOCITY / (2.0 * GRAVITY) # 90: peak height const AIR_TIME := 2.0 * JUMP_VELOCITY / GRAVITY # ~0.86 s, take-off to same height const MAX_JUMP_DIST := RUN_SPEED * AIR_TIME # ~206: running jump, level ground const SAFE_GAP := MAX_JUMP_DIST * 0.7 # comfortable, not pixel-perfect const HARD_GAP := MAX_JUMP_DIST * 0.95 # a deliberate skill check # Build platforms so required jumps use SAFE_GAP; reserve HARD_GAP for optional reward.
The formulas are the ideal arc. Variable jump height, a separate fall gravity, air acceleration, the fixed physics step and the collider's width all move the real numbers, and landing higher shortens the reach. Confirm them once in a test room with a measured gap ladder, then treat the measured values as the truth. A platform placed `MAX_JUMP_DIST + 1` away is impossible; one at `SAFE_GAP` is fair. Keep these constants beside the level data so designers and code agree.
# Author the level as a sequence of beats with an intended intensity (0..1).
# This makes the pacing curve explicit and reviewable before you build rooms.
const BEATS := [
{ "room": "entry", "type": "teach", "intensity": 0.1 },
{ "room": "hall_1", "type": "combat", "intensity": 0.5 },
{ "room": "vista", "type": "rest", "intensity": 0.1 }, # breather + reward
{ "room": "gauntlet", "type": "combat", "intensity": 0.8 },
{ "room": "save_room", "type": "rest", "intensity": 0.2 }, # before the boss
{ "room": "boss", "type": "climax", "intensity": 1.0 },
]
# Read the intensity column top-to-bottom: it should rise overall but dip for rests
# (a sawtooth), never flatline high. Drive spawns/music intensity from this.# Model the level as rooms + gated connections. Validate that the goal is
# reachable with the keys/abilities the player can actually obtain in order.
const ROOMS := {
"entry": { "exits": [ { "to": "hall_1" } ] },
"hall_1": { "exits": [ { "to": "vista", "needs": "double_jump" },
{ "to": "side_room" } ] }, # optional branch
"side_room": { "exits": [ { "to": "hall_1" } ], "grants": "double_jump" },
"vista": { "exits": [ { "to": "boss", "needs": "red_key" } ] },
}
# Search (room, held keys) states: keys from mutually exclusive one-way branches
# must not be combined. Keys are never consumed and doors never re-lock; model
# c<img src="docs/assets/awesome-gamedev-agent-skills-banner.png" width="820" alt="awesome-gamedev-agent-skills — game-dev skills for AI coding agents.
Build a production behavior-tree runtime (Blackboard, action/condition leaves, sequence/selector/parallel composites, decorators)…
Implement game audio practice — bus/mixer architecture and gain in decibels, ducking (sidechain), adaptive/dynamic music via…
Build game cameras that feel good — 2D follow with a deadzone, look-ahead, smoothing, and level-bounds clamping; 3D third-person…
Plan, generate, source, normalize, and validate cohesive visual game assets. Use for art direction, style bibles, sprites,…
Build branching dialogue and narrative — a node/choice graph with conditions, variables, and localization hooks — and choose…
Design NPC and enemy decision-making with finite state machines, behavior trees, steering behaviors, and A* pathfinding —…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.