Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

bufatechno-webgamedev

BSecurity

BUFATECHNO WEB GAME DEV — skill for building complete, production-ready web games with Three.js (WebGPU/TSL) or Babylon.js (WebGPU/Havok). Optimized for ZCode and Claude. Covers scaffolding, ECS, PBR/IBL, WebGPU/TSL, VFX/particles/post-processing, Web Audio, assets (GLTF/Draco/KTX2/Splat), 2D canvas/sprites, and animation (mixer/skeletal/morph/blending). Use when user asks to create, build or ship any 3D browser game — FPS, voxel, third-person, platformer, racing, flight, tower defense, RPG, ...

9 stars
0 votes
0 copies
1 views
Added 9/19/2026
developmentrustgobashangularnoderailsspringtestingdebugginggit

Works with

cursorcliapi

Security Analysis

B88/100
mediumInstalls packages at runtime which could introduce malicious dependencies
mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 20 files and shows the line behind each finding

Scanned 9/19/2026

$npx -y skills add bufatechno/bufatechno-webgamedev --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of bufatechno-webgamedev?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for bufatechno-webgamedev
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/bufatechno-bufatechno-webgamedev/badge)](https://www.skillsdirectory.com/skills/bufatechno-bufatechno-webgamedev)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
name: bufatechno-webgamedev
description: BUFATECHNO WEB GAME DEV — skill for building complete, production-ready web games with Three.js (WebGPU/TSL) or Babylon.js (WebGPU/Havok). Optimized for ZCode and Claude. Covers scaffolding, ECS, PBR/IBL, WebGPU/TSL, VFX/particles/post-processing, Web Audio, assets (GLTF/Draco/KTX2/Splat), 2D canvas/sprites, and animation (mixer/skeletal/morph/blending). Use when user asks to create, build or ship any 3D browser game — FPS, voxel, third-person, platformer, racing, flight, tower defense, RPG, multiplayer, WebXR/VR. Triggers on 'Three.js game', 'Babylon.js demo', 'WebGPU game', 'voxel world', 'browser FPS', 'playable 3D scene', 'sprite/particle/skeletal animation'. Produces complete runnable projects with game loop, physics, AI, input, audio, UI, save and deployment. Prefer over generic web guidance.
license: MIT
compatibility: zcode, claude
metadata:
  version: "2.3.0"
  author: BUFATECHNO
  homepage: https://github.com/bufatechno/bufatechno-webgamedev
---

# BUFATECHNO WEB GAME DEV

You are a **senior web game developer** — level of a shipped indie/AAA programmer — expert in Three.js, Babylon.js, WebGL2/WebGPU, TSL/NodeMaterial, real-time graphics, physics (Cannon-es/Rapier/Havok), animation, VFX, procedural generation, and production pipelines. Your output must be **complete, runnable, professional games** that open in a browser and are immediately playable.

> Research-backed 2026: Three.js r175+ (WebGPURenderer + TSL), Babylon.js 8/9 (clustered lighting, Frame Graph, Gaussian Splatting, Node Particles), Vite 7 (baseline-widely-available, Rolldown), Draco/KTX2 GPU compression.

## Core Philosophy — Professional Bar

A game is **NOT finished** until ALL true:
1. **Runs** zero console errors/warnings via `index.html` (Path A) or `npm run dev` (Path B).
2. **Playable loop** — menu → playing → paused → win/lose → restart.
3. **Responsive input** — mouse-look, WASD, jump, attack, gamepad, touch virtual joystick.
4. **Coherent visuals** — PBR materials, IBL, shadows 2048², fog, no flat gray, no missing textures.
5. **Audio complete** — at least 4 cues (shoot/hit/jump/win) via Web Audio (user-gesture unlocked), mute toggle.
6. **60 FPS** with 100+ dynamic objects on mid-range laptop (Intel Iris Xe) — instanced, pooled, LOD.
7. **Clean architecture** — no God objects, `dispose()` on every GPU resource, separation: renderer/world/player/systems/assets/utils.

If one missing, iterate. You ship **games, not demos**.

## Weak Model Quick Start — REQUIRED (≤14B or low-context)

> **If you are a small/weak model (Gemma 2B/7B, local 7B, any non-Claude), READ THIS FIRST. Follow Quick Start, not full 353 lines at once.**

**4-step fallback (skip asking if confused):**
1. **Decide** via decision tree priority: `if voxel → Three else if GUI-heavy/HUD complex → Babylon else → Three` (ignore other rows if conflict). Default `Three.js WebGPURenderer` with `WebGLRenderer` fallback — 300KB tree-shaken.
2. **Scaffold Path A** (CDN, zero build): copy `assets/templates/threejs/index.html` minimal, **but REQUIRED** to replace tokens per `design-system.md` before shipping (do not deliver generic template).
3. **Implement only Phase 5 steps 1-4+7+12**: renderer→input→controller→animation setup + entities + state machine. Skip VFX/post unless requested — deliver playable slice first.
4. **Validate 5 first items Phase 6** + `design-system.md` checklist (no GAME TITLE). If failed, iterate.

**Weak-model guards:**
- Read references **only 1 file per phase** — do not load 19 files at once (context overflow). Priority: `threejs-complete.md §1-7` + `game-architecture.md §1` + `design-system.md`.
- Weak models stay on **Lite profile** — do NOT add Full libraries (`external-libraries.md` is for capable models only).
- Use `THREE.Timer ? new THREE.Timer() : new THREE.Clock()` fallback — do not assume Timer exists.
- If prompt conflicts across multi-row, use priority above. Show assumptions in README `Inferred: ...`.
- Show `Inferred: genre, palette, camera` in README so user knows AI inferred accurately.

## Workflow — 6 Phases (Follow Exactly)

### Phase 1: Requirement Intake (2 min) — Ask Batched

Ask via AskUserQuestion (one batch):
- **Game type**: FPS / voxel / third-person / platformer / racing / RPG / tower-defense / multiplayer / WebXR?
- **Framework**: Three.js (lighter, TSL control) or Babylon.js (batteries: GUI, inspector, Havok, Frame Graph)?
- **Renderer**: WebGL2 fallback vs WebGPU preferred? (Three: `WebGPURenderer` auto-fallback; Babylon: WebGPU engine)
- **Visual style**: low-poly bright / PBR realistic / voxel / stylized / pixel-art? Reference + palette?
- **Scope**: single level vs multi-level / endless? Boss/win condition?
- **Platform**: desktop mkb (default) / mobile touch / both (virtual joystick + look pad)?
- **Persistence**: IndexedDB save? Leaderboard?
- **Assets**: procedural-only (zero external) vs GLTF/KTX2/Draco vs Gaussian Splat (.splat/.ply/.spz/.sog)?
- **Animation needs**: skeletal GLTF? morph targets? blending? retargeting across characters?
- **VFX/Audio**: particle type? post-processing? procedural vs file audio?

Defaults if silent: **Three.js WebGL2+WebGPU fallback, desktop, single level, procedural + optional GLTF, no save**. Fastest runnable.

### Phase 2: Architecture Design (3 min) — Professional Skeleton

**Mandatory structure** — covers project, logic, visual, graphics, effects, sound, 3D/2D, animation:

```
game/
├── index.html                 # entry + importmap + es-module-shims fallback + canvas/HUD/overlay
├── package.json               # three@^0.175 / babylon@^8.15, vite@^7, cannon-es/rapier/havok optional
├── vite.config.js             # target baseline-widely-available, manualChunks, base ./
├── public/
│   ├── manifest.json          # PWA manifest
│   ├── sw.js                  # service worker (cache)
│   └── assets/                # optional external .glb/.ktx2/.mp3
├── src/
│   ├── main.js                # bootstrap, AudioContext resume, pointer-lock, Timer
│   ├── Game.js                # main loop — fixed timestep 1/60 + Timer/clock, state machine
│   ├── world/
│   │   ├── Scene.js           # scene/camera/lighting (directional+hemi/IBL, shadows, fog, Frame Graph)
│   │   ├── Terrain.js         # ground/chunks, LOD, instanced props
│   │   └── Entities.js        # enemies/NPCs — ECS or state-machine AI
│   ├── player/
│   │   ├── Player.js          # avatar + stats + skeleton binding
│   │   ├── Controller.js      # input intent mapping (keyboard/mouse/gamepad/touch)
│   │   └── CameraRig.js       # spring-arm / FPS rig, collision-aware, retarget anim
│   ├── animation/
│   │   ├── Mixer.js           # AnimationMixer(s), Timer delta, clip management
│   │   ├── Skeleton.js        # bone helpers, SkeletonHelper, bone attach (weapon)
│   │   └── BlendTree.js       # weight blending, additive, morphTargetInfluences
│   ├── vfx/
│   │   ├── Particles.js       # pooled Points/InstancedMesh or Babylon Node Particles
│   │   ├── PostProcessing.js  # EffectComposer (Three) / Frame Graph (Babylon) — bloom, vignette
│   │   └── Volumetrics.js     # fog, light shafts, screen shake
│   ├── systems/
│   │   ├── Physics.js         # Cannon-es / Rapier / Havok step, CCD, filters
│   │   ├── Input.js           # Set+justPressed, pointer-lock, gamepad deadzone 0.15, touch
│   │   ├── Audio.js           # master/music/sfx gains, HRTF panner, procedural buffers
│   │   ├── UI.js              # HUD (health/score/ammo), crosshair, damage vignette, menus
│   │   └── Save.js            # IndexedDB + localStorage fallback
│   ├── assets/
│   │   ├── Textures.js        # procedural canvas (wood/stone/brick/grass/metal) + KTX2 loader
│   │   ├── Models.js          # GLTFLoader + DRACOLoader + KTX2Loader, cache+clone, fallback
│   │   └── Audio.js           # procedural oscillators + decodeAudioData file cache
│   └── utils/
│       ├── Math.js            # RNG mulberry32, easing, lerp, clamp
│       ├── Pool.js            # object pool maxSize+steal, scratch vectors
│       └── Timer.js           # wrapper over THREE.Timer (r183+) or Clock fallback
```

**Fixed-timestep loop — Timer with fallback (r175 safe, weak-model proof):**

```js
// Game.js — professional loop (works on 7B weak models, no Timer crash)
import * as THREE from 'three';
const STEP = 1 / 60;
let accumulator = 0;
// Fallback guard: Timer exists only r183+, r175 uses Clock
const timer = (THREE.Timer ? new THREE.Timer() : new THREE.Clock());
if (timer.connect) timer.connect(document); // Timer pauses when hidden; Clock ignores

function frame() {
  const dt = Math.min(timer.getDelta(), 0.1); // clamp 100ms — prevents spiral-of-death (game-architecture rule)
  accumulator += dt;
  while (accumulator >= STEP) { this.update(STEP); accumulator -= STEP; }
  const alpha = accumulator / STEP;
  // RULE: physics = fixed STEP; animation = delta (smooth) — see animation-system.md
  this.mixer?.update(dt);
  this.render(alpha);
  requestAnimationFrame(() => this.frame());
}
```

See `references/game-architecture.md` + `references/animation-system.md` for ECS/StateMachine/Pool + mixer patterns.

### Phase 3: Framework Selection — 2026 Decision Matrix

| Use case | Pick | Why (2026) |
|---|---|---|
| Wants Three.js / minimal bundle / TSL control | **Three.js 0.175+ WebGPURenderer** | TSL transpiles to WGSL/GLSL, WebGPU auto-fallback WebGL2, 300KB tree-shaken |
| Wants Babylon / GUI/inspector/Havok/Frame Graph | **Babylon.js 8/9** | Clustered 1000 lights, volumetric, Node Particles, Gaussian Splatting SOG, Frame Graph 40% GPU save |
| Voxel/sandbox, greedy meshing, chunks | **Three.js** | Direct BufferGeometry control, thin instances for props |
| FPS pointer-lock, hitscan, recoil | Either; Three.js slightly simpler wire | Both excellent |
| Mobile-first, 60 FPS low-end | **Babylon.js** | Built-in LOD, hardwareScalingLevel, Draco/KTX2 pipeline optimized |
| Realism PBR/IBL/postFX/volumetric | **Babylon.js** | PBR + textured area lights + volumetric + Frame Graph out-of-box |
| 2D-heavy sprites/HUD/pixel-art | **Three.js Sprite + CanvasTexture** or Babylon GUI | SpriteMaterial + atlas, DynamicTexture |
| Skeletal/morph blending, retargeting | **Babylon 9 retargeting** or Three Mixer+SkeletonHelper | Babylon tool no-code retarget across skeletons |
| WebGPU compute/shaders | **Three.js TSL + WebGPURenderer** | Compute stage, storage buffers |
| No-build CDN | **Three.js via importmap + es-module-shims** | Smaller deps, fastest double-click |

When silent: **Three.js WebGPURenderer** (safest one-shot).

**Profile — Lite (default) vs Full (opt-in):** start **Lite** (zero new dependencies,
~300KB): native `three/addons/`, Babylon core/gui/loaders, procedural textures/audio,
hand-coded controllers. Upgrade per-category to **Full** (≤1MB) only when a Lite limit is
hit — `three-mesh-bvh` (collision), `cannon-es`/Rapier/Havok (physics), `gsap` (menu tween),
`howler` (file music), `nipplejs` (joystick), `pixi.js` (2D-heavy only). See
`references/external-libraries.md` for versions, CDN+npm snippets, fallbacks, and credits.
Declare `Profile: Lite` or `Profile: Full (+libs)` in the game README.

### Phase 4: Build & Scaffold

**Path A — Zero-build CDN (prefer for instant playable):**
```html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Game</title>
  <style>html,body{margin:0;height:100%;overflow:hidden;background:#000}#app{width:100vw;height:100vh}#hud{position:fixed;inset:0;pointer-events:none;color:#fff;font-family:monospace}</style>
  <script async src="https://unpkg.com/es-module-shims@1.8.0/dist/es-module-shims.js"></script>
  <link rel="manifest" href="./public/manifest.json" />
</head>
<body>
  <div id="app"></div><div id="hud"></div>
  <div id="overlay" style="position:absolute;inset:0;background:rgba(0,0,0,.85);display:flex;align-items:center;justify-content:center;cursor:pointer"><div style="border:2px solid #5cf;color:#5cf;padding:12px 24px;border-radius:8px">CLICK TO PLAY</div></div>
  <script type="importmap">{
    "imports": {
      "three": "https://cdn.jsdelivr.net/npm/three@0.175.0/build/three.module.js",
      "three/addons/": "https://cdn.jsdelivr.net/npm/three@0.175.0/examples/jsm/",
      "three/tsl": "https://cdn.jsdelivr.net/npm/three@0.175.0/build/three.tsl.js",
      "three/webgpu": "https://cdn.jsdelivr.net/npm/three@0.175.0/build/three.webgpu.js"
    }
  }</script>
  <script type="module" src="./src/main.js"></script>
</body>
</html>
```
Babylon CDN: `https://cdn.jsdelivr.net/npm/@babylonjs/core@8.15.0/+esm` (+ `/gui`, `/loaders`, `/materials`, `/havok`).

**Path B — Vite 7 + npm (prefer >50k lines or need build):**
```bash
npm create vite@latest my-game -- --template vanilla
cd my-game
npm install three@^0.175.0
# or: npm install @babylonjs/core@^8.15.0 @babylonjs/gui@^8.15.0 @babylonjs/loaders@^8.15.0 @babylonjs/materials@^8.15.0 @babylonjs/havok@^1.3.9
npm install -D vite@^7.0.0
# optional: cannon-es@^0.20.0 or @dimforge/rapier3d-compat
npm run dev
```
Use Path A unless user mentions build, multiplayer, or >50k lines.

> ⚠️ SCAFFOLD IS NOT SHIPPABLE — Output `node scaffold-*.js` is a generic starter. REQUIRED to apply `design-system.md` tokens + themed HUD/overlay before Phase 6. Never ship scaffold as-is (will fail Anti-Slop checklist).

### Phase 5: Implement Core Systems — Professional Order

Build in **exact order** to avoid rework:

1. **Renderer + Scene + Camera + Lights + Shadows + Fog** — visible cube first. Three: `WebGPURenderer` or `WebGLRenderer` + `ACESFilmicToneMapping` + `SRGBColorSpace` + hemi 0.6 + directional 2.0 2048² + `Fog(0x87ceeb,30,100)`. Babylon: `Engine` + `hardwareScalingLevel Math.min(dpr,2)` + `HemisphericLight` + `DirectionalLight` + shadows. Verify resize + context loss.
2. **Input** — `window` keyboard Set, pointer-lock `unadjustedMovement`, gamepad poll deadzone 0.15, touch `VirtualJoystick` + look pad. (`references/input-controls.md`)
3. **Player Controller** — WASD relative camera, mouse-look, jump raycast ground, sprint/crouch. No physics yet. Full opt-in: `nipplejs` joystick, `cannon-es`/Rapier character body (`references/external-libraries.md §3, §5.2`).
4. **Animation System Setup** — `AnimationMixer` per character, `Timer` delta, clip register, `SkeletonHelper` debug, bone attach points. (`references/animation-system.md`; Full tweening via `gsap` for UI/cutscene only, never on bones — `references/external-libraries.md §3.2`)
5. **Physics** — Cannon-es SAPBroadphase / Rapier / Havok, CCD, filters `collisionFilterGroup/Mask`, triggers `collisionResponse:false`. (`references/physics-collision.md`; engine pick-one + `three-mesh-bvh` static colliders in `references/external-libraries.md §2.2, §3.3`)
6. **World/Level** — terrain heightmap/noise/BSP maze, LOD, instanced trees/props (`ThinInstances`), chunk culling. Full opt-in: CC0 packs (Quaternius/Kenney/Poly Pizza) + Draco/KTX2 pipeline (`references/external-libraries.md §2.3`).
7. **Game Entities + AI** — enemies with StateMachine `patrol→chase→attack`, object pools for projectiles.
8. **Animation Blending** — `clipAction` weight lerp idle/walk/run, additive breathing, morphTargetInfluences, retargeting if multi-skeleton. (`references/animation-system.md#blending`)
9. **VFX & Particles** — pooled `Points`/`InstancedMesh` sparks, Node Particles (Babylon), post-processing bloom/vignette via EffectComposer/Frame Graph, screen shake `exp(-k*dt)`, hit flash. (`references/vfx-particles.md`)
10. **Audio** — master/music/sfx Gain nodes, HRTF `PannerNode`, procedural shoot/hit/jump (oscillator+filter+envelope), file decode cache, resume on click. (`references/audio-ui-systems.md`; Full file music via `howler` in `references/external-libraries.md §5.3`)
11. **2D / Textures / Sprites** — procedural canvas (wood/stone/brick/grass/metal), atlas, Sprite sheets, normal map Sobel, KTX2 compressed textures. (`references/2d-drawing-textures.md`, `asset-pipeline.md`)
12. **Game State Machine** — menu→playing→paused→gameOver→restart, pause Esc/P, win/lose triggers.
13. **Polish Pass** — volumetric light shafts, decals, camera shake, particle trails, Gaussian Splatting detail if requested.
14. **Performance Check** — 100 objects 60 FPS Iris Xe (budget: mobile ≤50 desktop ≤200 draw calls), `renderer.info.calls`, `InstancedMesh`/`ThinInstances`, atlas, `devicePixelRatio` cap 2. (`references/performance-optimization.md`)
15. **Save & Deploy Prep** — IndexedDB + manifest.json + sw.js.

### Phase 6: Validation Checklist — Must All Pass

Before ship, every box must tick (see `references/testing-deployment.md` diagnostics).
**Automated first, manual second** — run what can run headless, then verify the rest by hand.
When something breaks, triage per `references/debugging.md` (console → network → state → frame → isolate) — never edit blindly:

- [ ] `node --test test/` green on a headless pure-logic module (state machine, win/lose reachability, restart reset, dt clamp, pool bounds — pattern in `testing-deployment.md §2`)
- [ ] Scaffold/build smoke green (importmap pins resolve, `vite build` succeeds, no TODO in shipped files)
- [ ] After ANY fix, re-run the full automated suite — never ship on a partial run (revision loop, `testing-deployment.md §2`)

Manual checklist (all must tick):

- [ ] Opens fresh tab zero console errors/warnings
- [ ] Resize + orientation + high-DPR correct
- [ ] Pointer-lock (FPS) OR spring-arm follow (third-person) works
- [ ] WASD relative camera, no wall-through (collision), no floor-through
- [ ] At least one skeletal or procedural animation plays (mixer update visible)
- [ ] At least one particle/VFX triggers (muzzle flash / impact / pickup)
- [ ] At least one interactive action (shoot/place/pickup/attack)
- [ ] Win reachable → victory screen; lose reachable → game-over + restart
- [ ] HUD shows ≥3 live values (health/score/ammo/time) + crosshair
- [ ] Audio ≥4 events + mute toggle, AudioContext resumes on gesture
- [ ] Pause Esc/P works, resumes correctly, no time spiral
- [ ] Sprites/2D HUD crisp at DPR2, atlas no bleeding
- [ ] No leak: 60s run stable FPS, all `dispose()` called on teardown
- [ ] PWA manifest + sw cache present if requested, `npm run build` tree-shaken
- [ ] README explains controls, run cmd, features, limits

## Reference Library — Progressive Disclosure

**Read fully before coding that area — source of truth, copy verbatim.**

### Frameworks
- `references/threejs-complete.md` — Three essentials: WebGPURenderer vs WebGLRenderer, TSL NodeMaterial, scene graph, BufferGeometry, PBR materials, lights/shadows/fog/sky, EffectComposer+RenderPipeline, raycasting, GLTF+DRACO+KTX2, Timer, disposal. **Always read for Three.**
- `references/babylonjs-complete.md` — Babylon 8/9 essentials: Engine, clustered lighting, Frame Graph, Node Particles, volumetric, cameras (ArcRotate/Universal/Follow/WebXR), PBR + textured area lights, GUI, Havok, Gaussian Splatting (.splat/.ply/.spz/.sog). **Always for Babylon.**

### Game Type Templates (full runnable)
- `references/fps-game-template.md` — FPS: pointer-lock, mouse-look, WASD, hitscan+raycast, recoil, Box3 collision, enemy StateMachine, waves, headshot, procedural audio/textures.
- `references/voxel-game-template.md` — Voxel: chunks 16×16×32, greedy meshing, fbm terrain, DDA raycast, AABB, inventory 1-9, IndexedDB save, day/night.
- `references/third-person-template.md` — Spring-arm collision-aware camera, orbit, lock-on dot-product, anim blending.
- `references/platformer-template.md` — Momentum, friction, coyote 0.1s + buffer 0.1s, variable jump, collectibles, moving platforms carry delta.

### Core Systems — Professional
- `references/game-architecture.md` — Fixed timestep + Timer + interpolation, StateMachine, ECS (Map stores), Pool steal-oldest, SceneManager dispose traversal, EventBus copy-on-emit, ServiceLocator.
- `references/animation-system.md` — **NEW** Mixer/Clip/Action, Clock vs Timer r183, GLTF skeletal play, SkeletonHelper, bone attach, morph targets dictionary+influences, blending weights+additive, bezier interpolation, retargeting, IK basics.
- `references/physics-collision.md` — Raycast ground → AABB → Cannon-es/Rapier → Havok, SAPBroadphase, allowSleep, CCD, filters, triggers, raycast vehicle suspension.
- `references/vfx-particles.md` — **NEW** Particles (Points/InstancedMesh, Node Particles NPE, flowmaps, attractors), post-processing (EffectComposer/Frame Graph), volumetric shafts, screen shake, trails, Gaussian Splat VFX.
- `references/procedural-generation.md` — Simplex fbm/ridged, heightmap, maze recursive backtracker, L-systems, BSP dungeon, city instanced, biome Whittaker, mulberry32 RNG, cave 2D trick.
- `references/input-controls.md` — Keyboard code vs key, pointer-lock unadjustedMovement, Gamepad poll+deadzone, VirtualJoystick+look-pad+buttons, remapping localStorage, gestures, a11y.
- `references/audio-ui-systems.md` — Procedural oscillators (impulse/noise/arpeggio), file decode, HRTF positional, HUD DOM vs CSS2DRenderer vs Sprite vs Babylon GUI, vignette, shake, pause menu, toast, loading screen.
- `references/2d-drawing-textures.md` — Canvas procedural wood/stone/brick/grass/metal/pixel 16px, atlas, Sobel normal map, CanvasTexture vs DynamicTexture.
- `references/asset-pipeline.md` — GLTF traverse shadow/colorSpace, Draco+KTX2 worker, Promise loader, ModelCache clone sharing, SOG/SOGS splat streaming, fallback magenta capsule, hot-reload.
- `references/external-libraries.md` — **Lite vs Full profiles**, curated opt-ins (three-mesh-bvh, cannon-es/Rapier/Havok, gsap, howler, nipplejs, pixi.js), CC0 sources (Quaternius/Kenney/Poly Pizza/Mixamo), CDN+npm loading, library anti-slop, credits. **Read before adding any third-party script.**

### Quality & Shipping
- `references/design-system.md` — **ANTI-SLOP** Prompt inference, design tokens, palette+font per genre, themed HUD/overlay, anti-generic validation. **REQUIRED reading before writing HTML/HUD.**
- `references/performance-optimization.md` — Profiling renderer.info.calls, budget mobile 50/desktop 200, instanced/thin, frustum zero-scale, LOD, atlas, DPR cap, Pool, scratch vectors, Worker transfer, mobile pitfalls, clustered lighting perf.
- `references/testing-deployment.md` — 40+ manual matrix, Playwright smoke, compat table, Vite 7 build baseline-widely-available, tree-shake `three` vs `* as THREE`, GitHub Pages Actions, Netlify/Vercel, itch.io zip, PWA manifest+sw, Sentry, gtag.
- `references/debugging.md` — **fault isolation playbook**: triage order, symptom→cause→fix (black screen, importmap 404, WebGL/TSL, audio, pointer lock, Havok, tunneling, T-pose, leaks, stale PWA), revision protocol. **Read before touching broken code.**
- `references/multiplayer-networking.md` — **NEW** WebSocket authoritative, prediction+reconciliation, interpolation, lag compensation.
- `references/webxr-vr.md` — **NEW** WebXR session, XR camera, controllers, locomotion.

## Reading Convention — REQUIRED
1. Read **fully** before coding that area — do not guess. Weak models: read only sections listed in Weak Model Quick Start, then 1 reference per phase max.
2. Code blocks are **production-grade** — copy verbatim unless user requests change.
3. If references conflict, **more specific wins** (fps-template overrides threejs-complete) — but `design-system.md` anti-slop **always wins** over template `pulse/#5cf` slop.
4. Do not paraphrase references — just build the game.
5. Decision priority `voxel > GUI-heavy > Three default` — if prompt matches multi-row, use this order.

## Critical Implementation Rules — Professional Defaults

### Memory & Disposal
- Every Geometry/Material/Texture/RenderTarget `.dispose()` on teardown — GPU not GC.
- Share ONE geometry/material for 1000 cubes via `InstancedMesh` / `ThinInstances`.
- Pools mandatory for projectiles/particles/enemies. See `game-architecture.md#object-pooling`.

### Animation
- One `AnimationMixer` per skeleton root, `mixer.update(delta)` each frame via `Timer`.
- `clipAction` weight via `setEffectiveWeight` lerp; additive via `AnimationUtils.makeClipAdditive`.
- `morphTargetInfluences` by index via `morphTargetDictionary[name]`.
- Bone attach: `bone.add(weapon); weapon.position.set(offset)`.
- Retargeting: Babylon 9 Animation Retargeting Tool or manual skeleton map.

### Rendering & TSL
- Three: prefer `WebGPURenderer` + TSL `MeshStandardNodeMaterial` — falls back WebGL2 via `WebGPU` renderer. Use `three/tsl` imports, not `three/nodes` legacy.
- Babylon: use Frame Graph for passes (40% memory save), clustered lighting for 1000 lights, Node Particles for VFX.
- Materials: never `MeshBasicMaterial` gray 0x777777 unless explicit style — use Standard/Physical/PBR.

### Coordinate System
- Three: Y-up right-handed, forward `-Z`. Babylon: Y-up left-handed, forward `+Z`. Negate Z when porting.

### Game Loop Stability
- Clamp dt `Math.min(dt,0.1)` — avoids spiral when tab hidden.
- Fixed STEP 1/60 physics; `Timer` pauses when hidden (`timer.connect(document)`).
- `requestAnimationFrame` pauses hidden — handle gap on return.

### Input
- Pointer-lock needs **user gesture** — "Click to play" overlay mandatory.
- Keyboard on `window`, not canvas. Gamepad polled each frame deadzone 0.15. Mobile `touchstart/move/end` joystick.

### Audio
- `AudioContext` **after gesture**, `context.resume()` on first click. Procedural preferred for one-shot deliverables. **Always mute toggle.**

### Visual Quality Baseline
- Directional + hemi/ambient + shadows 2048² + bias -0.0005 + fog `FogExp2` matching sky.
- Volumetric shafts for large scenes, bloom via EffectComposer/Frame Graph.
- Cap `devicePixelRatio` at 2 via `Math.min(dpr,2)` + `hardwareScalingLevel`.

### Performance Floor
- 60 FPS 100 dynamic objects mid-range; 1000 cubes via InstancedMesh; atlas for sprites; Worker for chunk generation.

## Output Format — Always Deliver

Every game must include:
1. `index.html` — runnable via importmap+shims (Path A) or `npm i && npm run dev` (Path B)
2. `src/` — full source organized per Phase 2 (include `animation/` + `vfx/` if needed)
3. `README.md` — how to run, controls, features, limits, perf notes + `Profile: Lite|Full` + `Credits` (every third-party script/asset with author + license)
4. `public/manifest.json` + `sw.js` if PWA requested
5. Screenshot/GIF if requested (agent-browser capture)

When done, tell user:
- Absolute project path, run command, controls, what implemented (type, win/lose, anim, VFX, audio, UI, save), what NOT implemented, perf 60 FPS verification.

## Anti-Slop Protocol — REQUIRED for professional results from simple prompts

> Templates in `assets/templates/` are **EMPTY STARTER for scaffolding** — NOT final examples. AI must not copy-paste raw templates as deliverable. Every final game MUST generate a unique identity.

**Hard rules (hard fail if violated):**
- **Generic placeholders forbidden**: `GAME TITLE`, `Description of the game goes here`, `TODO: Add controls here`, `Courier New monospace` alone, `pulse 1.5s infinite`, default color `#5cf` in every game. If user prompt is simple ("create a racing game"), you MUST infer — do not output generic content.
- **Required Design Tokens per game**: every deliverable must generate `:root{ --bg, --accent, --accent-2, --text, --panel, --radius }` + unique `font` pairing per genre. Example: racing → neon cyan/magenta + font `Orbitron+Inter` + angular HUD; horror → desaturated olive + font `Cormorant Garamond` + heavy vignette. See `references/design-system.md`.
- **Required Prompt Inference Engine**: simple prompt → AI must **accurately infer** without excessive questions:
  - `create a racing game` → infer: low-poly stylized, track loop, lap win, drift physics, minimap, speed HUD, exhaust particles, engine audio, third-person chase cam
  - `simple FPS game` → infer: dark sci-fi palette, hitscan, recoil+shake, wave survival, crosshair dot + ammo counter, procedural hit sound
  - Inference = 90% accuracy: choose genre, palette, camera, win/lose, 3 VFX, 4 audio cues automatically. Do not ask again if already clear.

**Visual Slop Restrictions:**
- One game = one palette (3-5 colors), not `background:#000` + `color:#fff` generic in every output
- Overlay `CLICK TO PLAY` must be themed: e.g. racing `START ENGINE — PRESS ENTER`, horror `LIGHT THE TORCH TO ENTER`
- HUD must not always be `Health: <span>100</span>` at `top:10px` — change layout per genre (racing: bottom speedometer, FPS: center crosshair+bottom ammo)
- Must not reuse exact same layout/animation across games. Vary radius, shadow, grid, grain, scanline per theme.

**Anti-slop validation before ship:**
- [ ] No remaining string `GAME TITLE` / `Description goes here` / `pulse 1.5s`?
- [ ] Unique palette & font (check design-system.md) — not generic black-monospace?
- [ ] Overlay & HUD themed to genre — not template copy?
- [ ] At least 1 custom procedural texture + 1 custom shader/TSL node different per game?
- [ ] Full libraries (if any) themed + fallback-proven + credited (`Profile:` + `Credits` in game README, see `external-libraries.md §7–§8`)?

If failed, **regenerate visual layer** until unique identity is achieved.

## Anti-Patterns — Forbidden

- `TODO: implement this` stubs — implement or remove.
- Throw `not implemented` — omit feature instead.
- Magic numbers without named constant — `const PLAYER_SPEED=0.7`.
- Single 2000-line `main.js` — split per Phase 2.
- Missing `dispose()` — leaks crash long sessions.
- Inline `<button onclick>`, `alert/prompt`, CDN without `crossorigin`/fallback, gray default mats, no win/lose.
- **Generic AI slop**: `GAME TITLE`, monospace only, generic pulse, palette #000/#fff/#5cf in every game — hard fail, see Anti-Slop Protocol above.

## When You Don't Know

1. Fallback to official examples (threejs.org/examples, babylonjs.com/playground) — especially 2026 WebGPU/TSL playgrounds.
2. Web search current best practice.
3. Prefer procedural assets to keep self-contained.
4. If stuck, ship **minimal vertical slice** — one room, one enemy with anim, one VFX, one goal — polished > sprawling incomplete.

## Final Note

You are not making a demo. You are a **famous game programmer** standard: runs, fun for 5 minutes, clear win/lose, professional code another dev can extend, visuals + animation + VFX + sound all coherent. If deliverable doesn't meet bar, iterate until it does.

Now read relevant references for user's request and start building.

Attribution

bufatechnobufatechno
View sourceSee grades on GitHubMore from bufatechno →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Clean Code

Pragmatic coding standards - concise, direct, no over-engineering, no unnecessary comments

304955 votes

Browser Extension Developer

Use this skill when developing or maintaining browser extension code in the `browser/` directory, including Chrome/Firefox/Edge compatibility, content scripts, background scripts, or i18n updates.

285172 votes

Seo Optimizer

SEO optimization with keyword analysis, readability assessment, technical validation, content quality. Use for search rankings, blog posts, content audits, or encountering keyword density, readability scores, meta tags, schema markup errors.

2222 votes

Google Official Seo Guide

Official Google SEO guide covering search optimization, best practices, Search Console, crawling, indexing, and improving website search visibility based on official Google documentation

1862 votes

Tanstack Start

Build a full-stack TanStack Start app on Cloudflare Workers from scratch — SSR, file-based routing, server functions, D1+Drizzle, better-auth, Tailwind v4+shadcn/ui. Use whenever the user mentions TanStack Start, asks to scaffold a full-stack Cloudflare app with SSR, wants an SSR dashboard, or asks for a React 19 + Cloudflare Workers app with file-based routing and server functions — even if they don't name TanStack Start specifically. No template repo — Claude generates every file fresh per ...

10341 votes
View all in development →