feat: add cs-dust2 React case with two model takes + react kind support

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>
This commit is contained in:
Jesse ZhangandClaude Opus 4.8 committed 2026-07-14 00:08:28 +01:00
1 parent c4cc293748
commit cbfce3b7cc
62 files changed
+13583 -43

No files matched your search

@@ -0,0 +1,64 @@
# 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
```bash
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
```