mcpField
P
pixel-art-game-builder

pixel-art-game-builder

github.com/cooksawDevelopment095 installsUpdated 40w ago
Repository

About pixel-art-game-builder

A guide and template set for building pixel-art idle games with procedural sprites. It is for developers and covers rendering, game loops, progression, state, and low-pressure design patterns.

Key features

  1. 01Pixel-perfect sprite rendering guidance
  2. 0212-color palette and sprite constraints
  3. 03Game loop and save templates
  4. 04Progression and resource patterns
  5. 05Example idle game implementation

Use cases

  1. 01Starting a React idle-game project
  2. 02Implementing pixel-perfect canvas sprites
  3. 03Designing resource and prestige systems

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/cooksaw/claude-skills --skill pixel-art-game-builder

After installing, type/pixel-art-game-builderin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

assets/
index.css
tailwind.config.js
examples/
minimal-idle-game.tsx
README.md
patterns/
prestige-loop.md
procedural-sprites.md
resource-system.md
upgrade-tree.md
references/
architecture.md
content-structure.md
game-mechanics.md
sprite-system.md
ui-patterns.md
templates/
game-loop.tsx
progression.ts
README.md
save-system.ts
sprite-renderer.tsx

Details

From the project README

Pixel Art Game Builder

Expert guide for architecting and building pixel art idle/incremental games with procedural sprite generation.

Quick Navigation

NeedGo to
Start a new projectQuick Start
Copy working codetemplates/
Understand patternspatterns/
See full exampleexamples/
Deep referencereferences/
CSS/Tailwind setupassets/

Core Design Philosophy

Three pillars: Minimal. Luminous. Contemplative.

  • Constraint = Creativity: Limited palette (12 colors), low resolution (16×16 sprites)
  • Space speaks: Dark backgrounds, few elements = immensity feeling
  • Light guides: Important elements glow (higher rarities shine more)
  • Movement breathes: Slow, organic animations (minimum 500ms cycles)
  • Zero pressure: NO timers, NO deadlines, NO FOMO, NO negative messages

Quick Start

npm create vite@latest my-idle-game -- --template react-ts
cd my-idle-game
npm install zustand immer
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p

Then copy files from assets/ for CSS and Tailwind config.

Critical Implementation Rules

Pixel Art Sprites (16×16)
// MANDATORY for pixel-perfect rendering
ctx.imageSmoothingEnabled = false;
/* CSS for any sprite element */
.sprite { image-rendering: pixelated; }
  • 4 colors max per sprite: base, highlight, shadow, outline
  • 12×12 usable zone (2px margin for glow effects)
  • Scale 4× when displaying (16×16 → 64×64)
  • NO antialiasing, NO gradients
Color Palette (12 colors only)
const PALETTE = {
  deepBlack: '#0a0a0f',      // Main background
  spaceGray: '#1a1a2e',      // Panels
  borderGray: '#2d2d44',     // Borders
  neonCyan: '#00fff5',       // Primary actions, RARE
  softMagenta: '#ff6bcb',    // Notifications, EPIC
  cosmicGold: '#ffd93d',     // Rewards, LEGENDARY
  validGreen: '#39ff14',     // Success, UNCOMMON
  alertRed: '#ff4757',       // Alerts (rare use)
  mysteryPurple: '#6c5ce7',  // Hidden/secret
  mainWhite: '#e8e8e8',      // Body text, COMMON
  secondaryGray: '#a0a0a0',  // Disabled
  interactiveCyan: '#7fefef' // Links
};

const RARITY_COLORS = {
  common: PALETTE.secondaryGray,
  uncommon: PALETTE.validGreen,
  rare: PALETTE.neonCyan,
  epic: PALETTE.softMagenta,
  legendary: PALETTE.cosmicGold,
};
Game Loop Pattern (100ms tick)
useEffect(() => {
  const interval = setInterval(() => {
    const now = Date.now();
    const delta = (now - lastTick) / 1000;

    // Update resources
    addCredits(incomePerSecond * delta);
    regenerateEnergy(delta);

    setLastTick(now);
  }, 100);
  return () => clearInterval(interval);
}, [incomePerSecond, lastTick]);
State Management (Zustand + Immer)
import { create } from 'zustand';
import { persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';

const useGameStore = create<GameState>()(
  persist(
    immer((set, get) => ({
      credits: 0,
      energy: 100,
      addCredits: (amount) => set((s) => { s.credits += amount }),
    })),
    { name: 'game-save' }
  )
);

Templates (Copy & Use)

Ready-to-use code in templates/:

TemplateDescription
game-loop.tsxHook for 100ms game tick with delta time
save-system.tsZustand persist pattern with migration
progression.tsScaling formulas (exponential costs, diminishing returns)
sprite-renderer.tsxCanvas component with pixel-perfect rendering

Patterns (Understand & Adapt)

Conceptual guides in patterns/:

PatternDescription
resource-system.mdStructure currencies, caps, regeneration
upgrade-tree.mdLinear upgrades, skill trees, prestige unlocks
prestige-loop.mdReset mechanics, meta-progression, permanent bonuses
procedural-sprites.mdGenerate varied sprites from seeds

Examples

Working code in examples/:

ExampleDescription
minimal-idle-game.tsxComplete ~150 line idle game with resources, upgrades, save

Deep References

Detailed documentation in references/:

ReferenceWhen to use
architecture.mdFull project structure, types, stores
sprite-system.mdCanvas API, color derivation, caching
game-mechanics.mdEconomy, scanning, progression formulas
ui-patterns.mdComponents, layouts, animations
content-structure.mdData structure for items, sectors, upgrades

Design Pillars (Non-Negotiable)

  1. Immediate Clarity: Every button has text label, max 3 actions visible
  2. Progressive Depth: New content unlocks over time
  3. Emotional Collection: Every item has narrative description ≤140 chars
  4. Zero Pressure: NO timers, NO deadlines, NO FOMO
  5. Mobile First: Touch targets ≥44px, breakpoints 320/768/1024px

Writing Style

  • Voice: Calm, melancholic, subtle humor
  • Rules: ≤140 chars, NO "!", NO CAPS, NO imperatives

Templates:

  • Funny: "[Object]. [Absurd observation]. [Punchline]."
  • Tender: "[Object]. [Human detail]. [Universal truth]."
  • Weird: "[Object]. [Strange property]. [Acceptance]."

Performance Targets

MetricTarget
Bundle size<200KB gzipped
FPS idle≥30
Memory<100MB

DO's and DON'Ts

DO ✓

  • Pixel-perfect rendering (imageSmoothingEnabled = false)
  • 4-color sprites maximum
  • 12-color palette only
  • ≥44px touch targets
  • Cache generated sprites
  • Support reduced-motion

DON'T ✗

  • Antialiasing on sprites
  • Gradients in pixel art
  • Icon-only buttons
  • Stats in item descriptions
  • Timers or countdowns
  • Negative failure messages
  • Nested modals

Comments

Markdown supported