game-developer
SKILL.md
Game Developer & Designer Skill
Build complete, polished games with professional-grade mechanics, visuals, and player experience.
Core Workflow
- Analyze — Understand game type, platform, core loop, target audience
- Design — Define mechanics, progression, visual style, audio needs
- Architect — Plan component structure, state management, game loop
- Implement — Build iteratively: core → polish → juice
- Playtest — Test feel, balance, edge cases
Game Design Fundamentals
The Core Loop
Every game needs a satisfying core loop. Define it explicitly:
Action → Challenge → Reward → Progression → (repeat)
Example (Pong-style): Hit ball → Keep rally → Score point → Level up → Harder AI
Player Experience Pillars
- Agency: Player actions feel meaningful and responsive
- Challenge: Difficulty matches skill, with room to grow
- Reward: Clear feedback for success (visual, audio, progression)
- Flow: Minimize friction between player intent and game response
Platform-Specific Guidance
React Native Games: See references/react-native-games.md Web/HTML5 Games: See references/web-games.md Game Math & Physics: See references/game-physics.md
Implementation Patterns
Game Loop Architecture
// Core game loop pattern
const useGameLoop = (updateFn, isRunning) => {
const frameRef = useRef();
const lastTimeRef = useRef(0);
useEffect(() => {
if (!isRunning) return;
const loop = (timestamp) => {
const deltaTime = (timestamp - lastTimeRef.current) / 1000;
lastTimeRef.current = timestamp;
updateFn(deltaTime);
frameRef.current = requestAnimationFrame(loop);
};
frameRef.current = requestAnimationFrame(loop);
return () => cancelAnimationFrame(frameRef.current);
}, [isRunning, updateFn]);
};
State Management
Separate concerns clearly:
- Game State: Positions, scores, level, entities
- UI State: Menus, modals, settings
- Input State: Current touches, gestures, keys
- Audio State: What's playing, volume levels
Collision Detection
Start simple, optimize only if needed:
// AABB collision (rectangles)
const checkCollision = (a, b) => (
a.x < b.x + b.width &&
a.x + a.width > b.x &&
a.y < b.y + b.height &&
a.y + a.height > b.y
);
// Circle collision
const circleCollision = (a, b) => {
const dx = a.x - b.x;
const dy = a.y - b.y;
const distance = Math.sqrt(dx * dx + dy * dy);
return distance < a.radius + b.radius;
};
Game Feel ("Juice")
Good games feel responsive and alive. Add juice through:
Visual Feedback
- Screen shake on impacts (subtle: 2-5px, dramatic: 10-15px)
- Particle effects for collisions, explosions, trails
- Squash/stretch on bounces and impacts
- Flash effects on damage or scoring
- Trails behind fast-moving objects
Audio Feedback
- Vary pitch slightly on repeated sounds (±10%)
- Layer sounds for impact (hit + whoosh + bass)
- Use rising tones for positive events, falling for negative
- Add subtle ambient soundscape
Timing & Easing
- Use easing functions, never linear motion
- Add anticipation before actions (wind-up)
- Add follow-through after actions (settle)
- Hit-stop/freeze frames on important impacts (16-50ms)
AI Opponent Design
Difficulty Scaling
const AI_CONFIGS = {
easy: {
reactionDelay: 200, // ms before responding
predictionError: 0.3, // randomness in targeting
speedMultiplier: 0.7, // movement speed
mistakeChance: 0.15 // chance to miss intentionally
},
medium: {
reactionDelay: 100,
predictionError: 0.15,
speedMultiplier: 0.9,
mistakeChance: 0.05
},
hard: {
reactionDelay: 50,
predictionError: 0.05,
speedMultiplier: 1.0,
mistakeChance: 0.01
}
};
AI Behavior Patterns
- Reactive: Respond to current ball position
- Predictive: Calculate where ball will arrive
- Adaptive: Adjust strategy based on player patterns
- Personality: Add quirks (aggressive, defensive, erratic)
Level Design & Progression
Difficulty Curve
Levels 1-10: Tutorial zone — Teach mechanics gently
Levels 11-25: Learning zone — Introduce variations
Levels 26-50: Challenge zone — Test mastery
Levels 51-75: Expert zone — Combine mechanics
Levels 76-100: Mastery zone — Peak difficulty
Progression Systems
- Unlocks: New content as reward for progress
- Upgrades: Permanent improvements
- Achievements: Recognition for skill/exploration
- Leaderboards: Social competition
Level Variation Techniques
- Modify parameters (speed, size, count)
- Add/remove elements
- Change layouts
- Introduce new mechanics
- Combine existing mechanics
Visual Style Guidelines
Retro/Arcade (80s)
- Neon colors:
#ff00ff,#00ffff,#39ff14,#ff6b35 - Scanline/CRT effects
- Pixel fonts or bold geometric sans-serif
- Grid backgrounds, glow effects
- High contrast, dark backgrounds
Modern Minimal
- Limited color palette (2-3 colors)
- Clean geometric shapes
- Generous whitespace
- Subtle shadows and depth
- Smooth animations
Pixel Art
- Consistent pixel scale (don't mix sizes)
- Limited palette per sprite
- Clear silhouettes
- Animation principles still apply
Sound Design Checklist
Essential sounds for most games:
- Menu navigation (select, confirm, back)
- Core action sounds (hit, collect, shoot)
- Feedback sounds (success, failure, damage)
- Ambient/background music
- Transition sounds (level start, game over)
Implementation tips:
- Preload all sounds before gameplay
- Use audio sprites for web
- Implement volume controls (music/SFX separate)
- Support mute toggle
- Vary sounds slightly to avoid repetition fatigue
Performance Optimization
Critical for Games
- Target 60 FPS consistently
- Minimize garbage collection (object pooling)
- Use
useMemo/useCallbackfor expensive calculations - Batch state updates
- Profile before optimizing
React Native Specific
- Use
react-native-reanimatedfor animations - Avoid JS thread blocking during gameplay
- Use native driver for animations when possible
- Consider
react-native-game-enginefor complex games
Project Structure Template
game-name/
├── src/
│ ├── components/
│ │ ├── game/ # Game entities (Player, Ball, Enemy)
│ │ ├── ui/ # UI components (Button, Modal, Score)
│ │ └── effects/ # Visual effects (Particles, Glow)
│ ├── screens/ # Full screens (Menu, Game, Settings)
│ ├── hooks/ # Custom hooks (useGameLoop, useSound)
│ ├── context/ # State management
│ ├── utils/ # Helpers (physics, math, collision)
│ ├── config/ # Constants, level data, settings
│ ├── assets/
│ │ ├── sounds/
│ │ ├── images/
│ │ └── fonts/
│ └── types/ # TypeScript definitions
├── App.tsx
└── package.json
Quality Checklist
Before considering a game complete:
Gameplay
- Core loop is satisfying
- Controls feel responsive (<100ms latency)
- Difficulty curve is smooth
- Edge cases handled (pause, background, resume)
Polish
- Visual feedback for all actions
- Sound effects for key events
- Smooth transitions between states
- Loading states where needed
UX
- Clear how to play (tutorial or intuitive)
- Progress is saved
- Settings are accessible
- Pause functionality works
Technical
- Consistent 60 FPS
- No memory leaks
- Handles interruptions gracefully
- Works on target devices/browsers