New case cs-dust2 (kind:react): a from-scratch React + three.js 5v5 Dust2 FPS. Two takes registered: Claude Fable 5 / Claude Code / High (with a hand fix for a 64Hz fixed-step firing bug on high-refresh displays) and Claude Opus 4.8 / Claude Code / Max (dust2-arena, one-shot). React cases commit source only; the single file is built from source at deploy time. validate-data.ts now accepts a React project directory as the declared artifact. AGENTS.md rewritten English-only with React-case, bare-harness (no skills/plugins) and artifact-anonymity rules. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Dust II Arena
A from-scratch 5v5 first-person shooter prototype recreating the core areas of
Dust2, built with React 18 + TypeScript + three.js. No external assets: the map,
characters and weapons are procedural geometry, and every sound is synthesized with
the Web Audio API. The only third-party libraries are three, react and
react-dom — pathfinding, physics, the AI state machine, the render loop and the
round/economy logic are all hand-written.
Run
bun install
bun run dev # http://localhost:5173 — click the arena to lock the mouse
Build a static bundle with bun run build (output in dist/). A prebuilt,
fully self-contained single file is also included as dust2-arena.html.
Controls
| Action | Key |
|---|---|
| Move / Jump / Walk | WASD / Space / Shift |
| Fire / Scope (AWP) / Reload | Mouse1 / Mouse2 / R |
| Primary / Secondary / Knife | 1 / 2 / 3 (or wheel) |
| Swap primary ⇄ AWP | B |
| Plant / Defuse / Pick up C4 | hold E |
| (dead) Switch spectated teammate | Mouse1 / A / D |
| (dead) Take control of teammate | F / Space |
What it includes
- Map — T / CT spawns, A Long, A site, Mid (with passable doors), Catwalk, B tunnels and B site, laid out on a connected tile grid with full wall + crate collision.
- Characters — box-built humanoids (separate head, torso, arms, legs), CT blue vs T tan, in a weapon-holding pose.
- Weapons — AK-47, M4A4, AWP (right-click scope), Glock / USP / Desert Eagle, and a knife, each with distinct damage, recoil, spread, magazine and reload. Hitscan with per-zone hitboxes (head = 2× body) and armor mitigation.
- Rounds — pistol-round opening, then rifle buys; C4 carry / drop / plant / defuse and full round resolution (elimination, detonation, defuse, time).
- AI — 9 bots navigate with grid A*, spot enemies through line-of-sight, fight, and push the plant / rotate to defuse.
- Death spectating — when you die you watch a living teammate in first person, cycle between teammates, and can take control of one (it stops being AI-driven).
- HUD — dynamic crosshair, health / armor, ammo, killfeed, round + bomb timers, and a live Dust2 minimap. Procedural audio for guns, reloads, footsteps, scope, hits, C4 and kills.
Layout
src/
main.tsx, App.tsx, styles.css
components/ GameCanvas, Hud, Minimap, Menu
engine/
grid.ts dust2.ts navmesh.ts collision.ts # map + spatial systems
weapons.ts combat.ts # weapon data + hitboxes
world.ts ai.ts player.ts input.ts # simulation + control
scene.ts effects.ts entities/ # three.js geometry
audio.ts store.ts constants.ts types.ts # sound, HUD bridge, config