Agent skill

phaser-gamedev

Build 2D browser games with Phaser 3 (JS/TS): scenes (Boot/Menu/Game/UI), sprites/animations, input, Arcade/Matter physics, tilemaps (Tiled), asset loading, and performance patterns. Use for prompts like 'Phaser scene', 'Arcade physics', 'tilemap', 'Phaser 3 game architecture'.

Stars 32
Forks 5

Install this agent skill to your Project

npx add-skill https://github.com/chongdashu/phaserjs-tinyswords/tree/main/.codex/skills/phaser-gamedev

SKILL.md

Phaser Game Development

Build fast, polished 2D browser games using Phaser 3’s scene-based architecture and physics systems.

Philosophy: Games as Living Systems

Games are not static UIs—they are dynamic systems where entities interact, state evolves, and player input drives everything.

Before building, ask:

  • What scenes does this game need? (Boot, Menu, Game, Pause, GameOver, UI overlay)
  • What are the core entities and how do they interact?
  • What state must persist across scenes (and what must not)?
  • What physics model fits? (Arcade for speed, Matter for realism)
  • What input methods will players use? (keyboard/gamepad/touch)

Core principles:

  1. Scene-first architecture: Organize code around scene lifecycle and transitions.
  2. Composition over inheritance: Build entities from sprite/body/controllers, not deep class trees.
  3. Physics-aware design: Choose collision model early; don’t retrofit physics late.
  4. Asset pipeline discipline: Preload everything; reference by keys; keep loading deterministic.
  5. Frame-rate independence: Use delta for motion and timers; avoid frame counting.

Workflow: Build the Spine First

  • Define the minimal playable loop (movement + win/lose + restart) before content/polish.
  • Decide scene graph and transitions (including UI overlay scene if needed).
  • Choose physics system early:
    • Arcade for most games (platformers/top-down/shooters).
    • Matter for realistic collision/constraints/ragdolls.
    • None for non-physics scenes (menus, VN, card games).
  • Implement a reliable asset-loading path (Boot scene), then scale out content.
  • Add debug toggles/profiling early so performance doesn’t become a late surprise.

Use References (Progressive Disclosure)

  • references/core-patterns.md: config, scene lifecycle, objects, input, animations, asset loading, project structure.
  • references/arcade-physics.md: Arcade physics deep dive (including pooling patterns).
  • references/tilemaps.md: Tiled tilemap workflows, collision setup, object layers.
  • references/performance.md: optimization strategies (pooling, batching, culling, camera, texture atlases).
  • references/spritesheets-nineslice.md: spritesheet loading (spacing/margin), nine-slice UI panels, asset inspection protocol.

Anti-Patterns to Avoid

Global state soup: Storing game state on window or module globals
Why bad: scene transitions become fragile; debugging becomes chaotic
Better: scene data, registries, or a dedicated state manager

Loading in create(): Loading assets in create() instead of preload()
Why bad: assets may not be ready when referenced
Better: load in preload(); use a Boot scene for all assets

Frame-dependent logic: Using frame count instead of delta
Why bad: game speed varies with frame rate
Better: scale by (delta / 1000) for consistent movement/timers

Physics overkill: Using Matter for simple platformer collisions
Why bad: unnecessary complexity + perf cost
Better: Arcade covers most 2D collision needs

Monolithic scenes: One giant scene with all game logic
Why bad: hard to extend; UI/menus/pause become hacks
Better: separate gameplay vs UI overlay vs menus

Magic numbers everywhere: Hardcoded tuning values scattered in code
Why bad: balancing becomes painful; changes cause regressions
Better: config objects/constants and centralized tuning

No pooling for spammy objects: Creating/destroying bullets/particles constantly Why bad: GC spikes → stutters Better: object pooling with groups + setActive(false) / setVisible(false)

Assuming spritesheet frame dimensions: Using guessed frame sizes without verifying source asset Why bad: wrong dimensions cause silent frame corruption; off-by-pixels compounds into broken visuals Better: open asset file, measure frames, calculate with spacing/margin, verify math adds up

Ignoring spritesheet spacing: Not specifying spacing for gapped spritesheets Why bad: frames shift progressively; later frames read wrong pixel regions Better: check source asset for gaps between frames; use spacing: N in loader config

Hardcoding nine-slice colors: Using single background color for all UI panel variants Why bad: transparent frame edges reveal wrong color for different asset color schemes Better: per-asset background color config; sample from center frame (frame 4)

Nine-slice with padded frames: Treating the full frame as the slice region when the art is centered/padded inside each tile Why bad: edge tiles contribute interior fill, showing up as opaque “side bars” inside the panel Better: trim tiles to their effective content bounds (alpha bbox) and composite/cache a texture; add ~1px overlap + disable smoothing to avoid seams

Scaling discontinuous UI art: Scaling a cropped banner/ribbon row that contains internal transparent gaps Why bad: the transparent gutters scale too, making the UI look “broken” or segmented Better: slice into left/center/right (or similar), stretch only the center, and stitch into a cached texture at the target size

Variation Guidance

Outputs should vary based on:

  • Genre (platformer vs top-down vs shmup changes physics/input/camera)
  • Target platform (mobile touch, desktop keyboard, gamepad support)
  • Art style (pixel art scaling vs HD smoothing; atlas usage)
  • Performance envelope (many sprites → pooling/culling; few sprites → simpler code)
  • Team size / complexity (prototype vs production architecture)

Avoid converging on:

  • One “default” resolution and scale mode
  • Always defaulting to Arcade (or always defaulting to Matter)
  • Copy-pasting boilerplate without adapting to the game’s needs

Remember

Phaser gives powerful primitives—scenes, sprites, physics, input—but architecture is your responsibility.

Think in systems: define the scenes, define the entities, define their interactions—then implement.

Codex is capable of building complete, polished Phaser games. These guidelines illuminate the path—they don't fence it.

Expand your agent's capabilities with these related and highly-rated skills.

chongdashu/phaserjs-tinyswords

tinyswords-tilemap

Build tilemaps using Tiny Swords asset pack. Handles 64x64 tile grid, elevation layers, water foam animation, shadow positioning, and terrain color variants. Use when creating game maps, level editors, or rendering terrain with the Tiny Swords tileset.

32 5
Explore
chongdashu/phaserjs-tinyswords

phaser-gamedev

Build 2D games with Phaser 3 framework. Covers scene lifecycle, sprites, physics (Arcade/Matter), tilemaps, animations, input handling, and game architecture. Trigger: "create phaser game", "add phaser scene", "phaser sprite", "phaser physics", "game development with phaser".

32 5
Explore
chongdashu/phaserjs-tinyswords

frontend-testing

Plan, implement, and debug frontend tests: unit/integration/E2E/visual/a11y. Use for Playwright/Cypress/Vitest/Jest/RTL, flaky test triage, CI stabilization, and canvas/WebGL games (Phaser) needing deterministic input + screenshot/state assertions.

32 5
Explore
mattpocock/skills

handoff

Compact the current conversation into a handoff document for another agent to pick up.

111,310 9,758
Explore
mattpocock/skills

setup-pre-commit

Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing.

111,310 9,758
Explore
mattpocock/skills

obsidian-vault

Search, create, and manage notes in the Obsidian vault with wikilinks and index notes. Use when user wants to find, create, or organize notes in Obsidian.

111,310 9,758
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results