A browser-based, single-player Overwatch-style Practice Range (연습장) featuring a fully playable Soldier: 76 hero.
Built with TypeScript 7 (tsgo), Three.js, Biome, Vite, and Bun.
- Lobby with hero selection and Practice Range launch
- First-person WASD + mouse look with pointer lock
- Soldier: 76 hero kit:
- Heavy Pulse Rifle (hitscan, 30 rounds, reload, falloff)
- Sprint
- Helix Rockets
- Biotic Field
- Tactical Visor (ultimate)
- Animated first-person weapon and VFX
- Procedural audio SFX and generative background music
- 60 FPS performance target with in-frame instrumentation
Measured on Apple M5 Max at 1920x1080 for 60 seconds:
- p50 frame time: 13.0 ms (76.9 FPS)
- p95 frame time: 15.1 ms (66.2 FPS)
- p99 frame time: 17.9 ms (55.9 FPS)
- max spike: 62.2 ms
Run the benchmark yourself with bun run script/qa/perf-benchmark.mjs.
bun install
bun run devOpen http://localhost:5173 in Chrome.
| Command | Description |
|---|---|
bun run dev |
Start Vite dev server |
bun run build |
Type-check and build for production |
bun run typecheck |
Run tsgo --noEmit |
bun run check |
Run Biome lint + format check |
bun run test |
Run Vitest |
W/A/S/D— MoveShift— SprintSpace— JumpMouse— AimLMB— FireR— ReloadE— Helix RocketsQ— Tactical VisorLShiftorF— Biotic Field
MIT


