Phaser 3 2D game dev: scenes, physics, tilemaps, sprites, polish.
npx skills add https://github.com/notque/vexjoy-agent --skill phaser-gamedev
This skill builds complete Phaser 3 2D games using a Phased Construction pattern: DESIGN (plan game type, physics, scenes) → BUILD (scene lifecycle, sprites, tilemaps) → ANIMATE (physics, animation state machines, input) → POLISH (camera effects, particles, tweens, sound, mobile). Targets Phaser 3.60+ throughout.
Scope: Platformers, arcade shooters, top-down RPGs, puzzle games, and side-scrollers — anything 2D in Phaser 3. Use threejs-builder for 3D games, native mobile games, and non-Phaser canvas work.
| Signal | Load These Files | Why |
|---|---|---|
| references/core-patterns.md | core-patterns.md | Always |
| references/build-scaffolds.md | build-scaffolds.md | Phase 2 BUILD |
| references/animate-scaffolds.md | animate-scaffolds.md | Phase 3 ANIMATE |
| references/polish-scaffolds.md | polish-scaffolds.md | Phase 4 POLISH |
| references/errors.md | errors.md | Error Handling |
| references/arcade-physics.md | arcade-physics.md | Arcade physics |
| references/tilemaps.md | tilemaps.md | Tilemap / Tiled |
| references/spritesheets.md | spritesheets.md | Sprites / animation |
| references/performance.md | performance.md | Performance concern |
| references/game-feel-patterns.md | game-feel-patterns.md | Polish / juice signal |
| references/tilemaps-and-physics.md | tilemaps-and-physics.md | Complex maps / Matter.js |
Goal: Understand what to build, select the physics system, and plan the scene graph before writing any code.
Core constraints:
Step 1: Identify the game type
From the user's request, determine: game genre (platformer, shooter, RPG, puzzle, side-scroller), primary physics need, number of scenes, tilemap or procedural world, spritesheet or texture atlas.
Step 2: Select the physics system
| Physics | Use When | When Not to Use |
|---------|----------|------------|
| Arcade | Platformers, shooters, simple AABB | Rotating bodies, non-rectangular shapes |
| Matter.js | Physics puzzles, destructible terrain | Performance-critical (100+ bodies) |
| None | Puzzles, card games, UI-only | Any meaningful collision detection |
Step 3: Document the scene plan and load references
Write a short markdown scene plan covering: Boot, Game, UI, Physics choice, World, Sprites (measured frame dimensions).
Load these references based on the plan:
references/core-patterns.md (scene lifecycle, transitions, input)references/tilemaps.mdreferences/spritesheets.mdreferences/arcade-physics.mdreferences/performance.mdreferences/game-feel-patterns.mdreferences/tilemaps-and-physics.mdGate: Scene plan documented. Physics system selected. References loaded. Proceed only when gate passes.
Goal: Implement the scene lifecycle skeleton, load assets, place sprites, wire up tilemaps.
Core constraints:
frameWidth/frameHeight is the #1 Phaser bug; open the PNG, count pixels per frame before writing this.load.spritesheet()preload() — never load assets in create() or update()Full TypeScript scaffolds (entry point, BootScene with progress bar, GameScene skeleton): references/build-scaffolds.md.
Gate: Boot and Game scenes compile. Assets load without console errors. Scene transitions work. Proceed only when gate passes.
Goal: Add physics-driven movement, animation state machines, and player input.
Core constraints:
update() — no new Phaser.Math.Vector2(), no this.physics.add.sprite(), no array creation per frame; allocate in create(), reuse in update()delta for frame-rate-independent movement — velocity = speed * (delta / 1000) ensures consistent feel at any FPS'idle' | 'walk' | 'jump' | 'attack' | 'dead' prevents impossible states like isJumping && isAttackingAnimation definitions (anims.create), the Player state machine, and input handling scaffolds: references/animate-scaffolds.md. Collision groups, overlap callbacks, and physics tuning: references/arcade-physics.md.
Gate: Player moves. Animations transition correctly. State machine has no impossible state combinations. No per-frame allocations. Proceed only when gate passes.
Goal: Add camera work, particles, tweens, sound, and mobile controls. Verify performance.
Core constraints:
debug: true from physics config before shippingconsole.log calls unless the user explicitly requested loggingFull scaffolds for camera effects, particles (Phaser 3.60+ API), tweens, sound, mobile virtual controls, and final verification steps: references/polish-scaffolds.md.
Gate: Polish checks pass. Performance within budget. Debug config removed. Game is shippable.
Common errors and fixes (spritesheet frame mismatches, undefined body access, tilemap collision no-ops, animation failures, mobile slowdowns): references/errors.md.
| Reference | When to Load | Content |
|-----------|-------------|---------|
| references/core-patterns.md | Always | Scene lifecycle, transitions, input, state machines |
| references/build-scaffolds.md | Phase 2 BUILD | TypeScript entry point, BootScene with progress bar, GameScene skeleton |
| references/animate-scaffolds.md | Phase 3 ANIMATE | Animation definitions, Player state machine, input handling |
| references/polish-scaffolds.md | Phase 4 POLISH | Camera, particles, tweens, sound, mobile controls, verification |
| references/errors.md | Error Handling | Common Phaser error scenarios and fixes |
| references/arcade-physics.md | Arcade physics | Groups, colliders, velocity, physics tuning, pitfalls |
| references/tilemaps.md | Tilemap / Tiled | Layer system, collision, animated tiles, object layers |
| references/spritesheets.md | Sprites / animation | Frame measurement, loading, atlases, nine-slice |
| references/performance.md | Performance concern | Object pooling, GC avoidance, texture atlases, mobile |
| references/game-feel-patterns.md | Polish / juice signal | Screen shake, particle bursts, hit-stop, scale punch, tween chains, sound timing |
| references/tilemaps-and-physics.md | Complex maps / Matter.js | Tiled integration pipeline, Matter.js vs Arcade decision table, collision categories, slopes, object layer spawning |
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take notque/phaser-gamedev from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.