agentleFS
frankxaifrankxai/agentic-creator-os/.claude/skills/game-development/SKILL.md

game-development

Skill10 starsChanged 7 months agoApache-2.0View on GitHub

ACOS game development intelligence for high-quality browser game design and implementation.

We split this skill into the rules it gives an agent

8 rules. 0 are common, 5 are distinctive, and 3 are very specific to this project.

  • 0

    Common

    Most of the 13 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Every game MUST pass ALL gates before deploy.

    line 82
  2. Distinctive:

    Every visual change must be animated.

    line 85
  3. Distinctive:

    Every primary player action has: anticipation (50-100ms buildup) → action (the actual change) → follow-through (100-300ms settle/overshoot).

    line 88
  4. Distinctive:

    Every collision or significant event uses layered feedback:

    line 105
  5. Very specific:

    All movement uses easing functions from effects.ts:

    line 113
  6. Very specific:

    NEVER transition: all — always specify exact properties

    line 118
  7. Very specific:

    NEVER animation: linear — always use cubic-bezier or named easings

    line 119
  8. Distinctive:

    Anti-pattern: All letters revealed simultaneously

    line 206

“Common” is measured: kept by at least 6 in 10 of the 13 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

ACOS Game Development Skill v1.0

Purpose

Intelligence layer for FrankX's Games Lab (frankx.ai/games). Encodes world-class browser game design principles — animation choreography, feedback systems, quality gates, and per-genre templates. Any agent loading this skill produces games at AAA studio quality, not "indie jam" quality.

Activation

Auto-activates when session involves: game development, Canvas2D rendering, game feel tuning, particle effects, game loop optimization, or any /games/ route work.

Triggers: game, canvas, particle, collision, sprite, dungeon, puzzle game, roguelike, game loop, game feel


Game Registry (7 Games)

1. Crystal Match

  • Slug: crystal-match
  • Engine: React DOM (CSS animations)
  • Genre: Puzzle (match-3)
  • Quality Baseline: Bejeweled 3, Candy Crush Saga
  • Key Feel: Satisfying cascades, escalating combos, gems feel alive
  • File: app/games/crystal-match/page.tsx

2. Neon Depths

  • Slug: neon-depths
  • Engine: Canvas2D
  • Genre: Roguelike (turn-based dungeon crawler)
  • Quality Baseline: Brogue, Hoplite, Into the Breach
  • Key Feel: Tense exploration, impactful combat, atmospheric dungeon
  • File: app/games/neon-depths/page.tsx

3. Neon Runner

  • Slug: neon-runner
  • Engine: Canvas2D
  • Genre: Action (endless runner)
  • Quality Baseline: Subway Surfers, Alto's Odyssey
  • Key Feel: Speed sensation, near-miss drama, fluid lane changes
  • File: app/games/neon-runner/page.tsx

4. Snake Neon

  • Slug: snake-neon
  • Engine: Canvas2D
  • Genre: Arcade (snake)
  • Quality Baseline: Snake.io, Slither.io
  • Key Feel: Fluid movement, satisfying growth, dramatic death
  • File: app/games/snake-neon/page.tsx

5. 2048 Neon

  • Slug: neon-2048
  • Engine: React DOM (CSS animations)
  • Genre: Puzzle (sliding tiles)
  • Quality Baseline: Original 2048, Threes!
  • Key Feel: Satisfying merges, tile weight, big-merge celebration
  • File: app/games/neon-2048/page.tsx

6. Word Forge

  • Slug: word-forge
  • Engine: React DOM (CSS animations)
  • Genre: Word (Wordle-style)
  • Quality Baseline: Wordle, Spelling Bee
  • Key Feel: Letter reveal drama, keyboard feedback, win celebration
  • File: app/games/word-forge/page.tsx

7. Memory Match

  • Slug: memory-match
  • Engine: React DOM (Framer Motion)
  • Genre: Puzzle (card matching)
  • Quality Baseline: Concentration, Memrise
  • Key Feel: Card flip satisfaction, match celebration, mismatch clarity
  • File: app/games/memory-match/page.tsx

10 Quality Gates (MANDATORY)

Every game MUST pass ALL gates before deploy. No exceptions.

Gate 1: No Instant State Changes

Every visual change must be animated. Position changes use eased interpolation. Color changes use transitions. Size changes use scale animations. If a value snaps from A to B without interpolation, the game fails this gate.

Gate 2: Three-Stage Feedback

Every primary player action has: anticipation (50-100ms buildup) → action (the actual change) → follow-through (100-300ms settle/overshoot). A swap in Crystal Match: gems lean toward target → cross positions → bounce into place. A move in Neon Depths: player leans → slides → settles.

Gate 3: Idle Animations

Nothing is ever static. Every visible entity has subtle movement when idle:

  • Player characters: breathing glow, gentle scale oscillation (0.97-1.03, 2-3s)
  • Items: floating hover (±2px, 2s sine), glow pulse
  • Enemies: slow sway, faint glow flicker
  • UI elements: subtle shimmer, particle drift
  • Board/background: ambient dust motes, gradient shift

Gate 4: Environmental Depth

The world feels alive beyond the player's actions:

  • Ambient particles (dust, energy motes, sparkles) — 1-3 per frame, capped at 30
  • Background has subtle movement (gradient shift, star drift, grid pulse)
  • Lighting responds to events (flash on impact, dim on death, warm on reward)

Gate 5: Impact Feedback (Hitstop + Layered Effects)

Every collision or significant event uses layered feedback:

  • Hitstop: 2-5 frame freeze to emphasize the moment
  • Particles: burst from impact point in relevant colors
  • Screen shake: intensity proportional to significance
  • Flash: brief color overlay (red=damage, gold=reward, white=hit)
  • Sound hook: even if muted, the code path exists for future audio

Gate 6: Eased Movement (NEVER Linear)

All movement uses easing functions from effects.ts:

  • Position changes: outCubic (smooth deceleration)
  • Bouncy effects: outElastic or outBounce
  • UI transitions: inOutCubic
  • Decay effects: outQuad
  • NEVER transition: all — always specify exact properties
  • NEVER animation: linear — always use cubic-bezier or named easings

Gate 7: Death/Failure Sequence

Failure is NEVER just a text overlay. Every game has a multi-stage death sequence:

  1. Freeze frame / hitstop (50-100ms)
  2. Dramatic visual (explosion, shatter, dim, collapse)
  3. Screen response (shake, flash, zoom)
  4. Particle aftermath (debris, fade, dissolve)
  5. Score/stats reveal with dramatic timing
  6. Retry prompt with clear call-to-action

Gate 8: Victory/Win Celebration

Winning is NEVER just a score display. Every game has:

  1. Moment of recognition (brief pause, glow)
  2. Celebration burst (confetti, particles, flash)
  3. Score dramatic count-up (not instant display)
  4. Achievement/stats with satisfying reveal timing
  5. Play-again prompt that feels inviting

Gate 9: Color Storytelling

Colors communicate game state consistently:

  • Cyan/Blue (#43BFE3): Player, safe, neutral, UI
  • Gold/Amber (#F59E0B): Reward, score, items, positive
  • Red/Rose (#F43F5E): Danger, damage, error, negative
  • Green/Emerald (#10B981): Health, success, growth
  • Purple/Violet (#8B5CF6): Special, rare, magic, combo
  • White/Silver (#E2E8F0): Impact, flash, emphasis Color intensity scales with significance (bigger combo = brighter).

Gate 10: Mobile-First Input

Touch controls must feel as good as keyboard:

  • Touch targets minimum 48px (WCAG)
  • Swipe dead zone 30px (prevent accidental)
  • Visual feedback on touch (ripple, press state) within 16ms
  • D-pad buttons for games needing directional input
  • Input buffering (2 frames) — never drop player input

Animation Principles (Disney's 12, Adapted)

From Disney

  1. Squash & Stretch: Gems compress on impact, tiles stretch on fast moves
  2. Anticipation: Brief windup before every action (lean, glow, scale down)
  3. Follow-Through: Overshoot + settle after movement completes
  4. Slow In, Slow Out: Ease into and out of all movement (outCubic default)
  5. Arcs: Natural curved motion paths, not straight lines
  6. Secondary Action: Supporting animations reinforce primary (particles on move, glow on select)
  7. Staging: Draw player attention to what matters (dim background during key events)
  8. Appeal: Everything should look good. Clean shapes, consistent sizes, brand colors.

Game-Specific

  1. Hitstop: 2-5 frame pause on significant impacts. Makes hits feel powerful.
  2. Juice Escalation: Effects intensify with combos/streaks. 1x normal → 2x particles → 3x shake + flash.
  3. Telegraph: Enemies/hazards signal intent before acting. Red pulse = about to attack. Glow = about to move.
  4. Weight: Heavy objects move slowly with strong follow-through. Light objects move fast with minimal overshoot.

Genre Templates

Puzzle (Crystal Match, 2048)

  • Primary loop: Select → action → cascade → score
  • Key animation: Match celebration must escalate with chain length
  • Idle: Board should ripple subtly, individual pieces shimmer
  • Signature moment: Long cascade with escalating particles + screen shake
  • Anti-pattern: Instant gem removal without pop animation

Action/Runner (Neon Runner)

  • Primary loop: Dodge → collect → speed up → survive
  • Key animation: Speed sensation through FOV, speed lines, ground acceleration
  • Idle: N/A (always moving), but player character has micro-animations
  • Signature moment: Near-miss with slow-motion + dramatic zoom
  • Anti-pattern: Flat perspective with no depth cues

Roguelike (Neon Depths)

  • Primary loop: Explore → encounter → combat → loot → descend
  • Key animation: Combat hitstop is the most important single animation
  • Idle: Dungeon atmosphere — dust, flicker, enemy sway
  • Signature moment: Room reveal with radial light expansion
  • Anti-pattern: Instant teleport between tiles, instant damage numbers

Word (Word Forge)

  • Primary loop: Type → submit → reveal → learn
  • Key animation: Sequential letter reveal with staggered timing
  • Idle: Gentle keyboard glow, submitted rows have subtle shimmer
  • Signature moment: Winning guess with all-green cascade + celebration
  • Anti-pattern: All letters revealed simultaneously

Arcade (Snake)

  • Primary loop: Move → grow → avoid → survive
  • Key animation: Fluid interpolated movement (never grid-snap)
  • Idle: Body segments sway slightly, head has directional lean
  • Signature moment: Death sequence rippling from head to tail
  • Anti-pattern: Stepped movement where snake teleports between cells

Technical Standards

Canvas Games (Neon Depths, Neon Runner, Snake)

  • Game loop: requestAnimationFrame with delta-time tracking
  • Rendering: Clear → draw background → draw entities → draw effects → draw HUD
  • Effects pipeline: ctx.save() → apply shake offset → draw scene → ctx.restore() → draw flash overlay
  • Particle budget: Mobile 100 max, desktop 200 max (enforced by ParticleSystem)
  • State: Game state in useRef (not useState) to avoid React re-renders in loop
  • Resolution: Canvas sized to container, CSS handles responsive scaling

DOM Games (Crystal Match, 2048, Word Forge, Memory Match)

  • Animations: CSS @keyframes injected via <style> tag, or Framer Motion
  • Timing: CSS cubic-bezier(0.33, 1, 0.68, 1) = outCubic, cubic-bezier(0.34, 1.56, 0.64, 1) = outBack
  • Stagger: CSS custom property --delay with animation-delay: var(--delay) for sequential reveals
  • State management: React useState for UI state, useRef for animation state
  • Performance: will-change: transform on animated elements, transform over top/left

Shared Engine (lib/games/effects.ts)

  • ParticleSystem: burst, sparkle, floatingText
  • ScreenShake: intensity decay via outQuad
  • FlashEffect: color overlay with fade
  • AnimatedValue: smooth numeric transitions
  • GameTimer: frame-based callbacks and sequences
  • Hitstop: freeze-frame for impact emphasis
  • GameAudio: Web Audio API oscillator stubs
  • Easing: outQuad, outCubic, outElastic, outBounce, inOutCubic
  • Colors: NEON brand palette, hexToRGBA, lerpColor, pulseAlpha

Anti-Patterns (NEVER DO)

Anti-PatternWhy It's BadDo This Instead
Instant state changeFeels like a bug, not a gameAnimate everything with easing
transition: all 0.3sTransitions wrong properties, looks sloppySpecify exact properties and durations
animation: linearRobotic, unnatural movementUse cubic-bezier easing curves
Static entitiesDead, lifeless worldAdd idle animations to everything
Text-only game overAnticlimactic, cheap feelingMulti-stage death sequence with effects
Score instant displayNo satisfaction, no dramaScore count-up with accelerating pace
Uniform particle burstsLooks like a default particle emitterVary size, speed, color, gravity per context
Grid-snap movementCharacters teleport, feels jarringInterpolate position over 60-80% of tick
Same shake for everythingLoses meaning, becomes noiseScale shake intensity to event significance
Ignoring mobileHalf the audience can't playTouch-first, keyboard-enhanced

Shared Resources

  • Effects Engine: lib/games/effects.ts — import { ParticleSystem, ScreenShake, FlashEffect, AnimatedValue, GameTimer, Hitstop, GameAudio, ease, NEON, NEON_BURST }
  • Game Registry: lib/games/registry.ts — GameEntry, GameQualityMetrics, getGameBySlug, getQualityReport
  • Brand Colors: NEON object (cyan, violet, purple, amber, emerald, rose, fuchsia, lime, white)
  • Production Path: .worktrees/vercel-ui-ux/app/games/

Every frame is a chance to delight. Build like Supergiant, polish like Nintendo.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.