A small browser FPS in three.js: an arena with obstacles, waves of enemies that path around cover, recoil, muzzle flash, hit feedback, HUD, start and game-over screens. Every model, texture and sound generated in code.
Measured, not judged. Nothing here is a score.
| Measure | Claude Opus 5.5 | Claude Fable 5.1 | GPT-6 Astra | GPT-6.1 Sol |
|---|---|---|---|---|
| Time to build | 2h 30m | 1h 14m | 19m 43s | 13m 19s |
| AttemptsOnly an infrastructure failure (a rate limit or an outage) earns a retry. Every interrupted attempt is listed, and nothing from it is published. | 1Attempt 1: stopped at the 150-minute limit; the files on disk at that moment are what is published. | 2Attempt 1: The account's Claude session limit was reached (HTTP 429) after 13 turns and 28 minutes. The agent had written five JavaScript modules but no index.html yet. Nothing from this attempt was published; the model got a fresh attempt once the limit had reset. | 1 | 1 |
| Delivered source | 251 KB | 165 KB | 63 KB | 65 KB |
| Files | 11 | 9 | 2 | 3 |
| Tokens in / outAs reported by each CLI. Tokenizers differ between vendors, so compare within a vendor. | 71.4M / — | 11.0M / 239k | 1.7M / 64k | 2.5M / 61k |
| Errors during recording | 0 | 0 | 0 | 0 |
| Video lengthUI recordings scroll at a fixed speed, so a longer page makes a longer video. | 40s | 40s | 40s | 40s |
Questions, not answers. The call is yours.
The same scripted input for every model: press Play, move, strafe, turn and fire for 40 seconds.
The same script runs on every build. Open any build live to judge sound, feel and anything a video can't show. Full method
Sent word for word to every model. Try it on your own favourite.
Build a small first-person shooter that runs in the browser. TECHNOLOGY - three.js r186 is provided in this folder as an ES module: ./three.module.js (it imports ./three.core.js; keep both files and do not modify or rename them). Load it from a <script type="module"> with: import * as THREE from './three.module.js'; - No other libraries and no network requests. There are no asset files: every model, texture and sound must be generated in code (procedural geometry, textures drawn on canvas, sound synthesised with the Web Audio API). THE GAME - A 3D arena, indoor or outdoor, with walls and obstacles that the player collides with. - Enemies arrive in waves, move toward the player, find their way around obstacles instead of getting stuck, and attack when they are close. - Shooting has clear feedback: muzzle flash, weapon recoil, a hit marker or hit reaction on the enemy, and a death effect. - HUD with a crosshair, health, ammo with reloading, score and the current wave. - A start screen with a button labeled "Play", and a game-over screen that shows the score and has a button labeled "Restart". - Controls: W A S D to move, the mouse to look around (pointer lock after clicking Play), left mouse button or F to shoot, R to reload. The left and right arrow keys must also turn the view, for players without a mouse. - The game must remain playable if pointer lock is unavailable (keyboard turning still works). - Aim for 60 frames per second on a laptop, and adapt to any window size. It will be played at 1440x900. - Art direction, atmosphere, lighting and sound design are up to you. Make it look good and feel good to play. DELIVERY RULES - Work autonomously. Nobody will answer questions, so make reasonable assumptions and keep going until the game is finished. - Deliver ./index.html (JavaScript may be inline or in additional .js files in this folder, loaded with relative paths). No build step. - The game must work when this folder is served over HTTP and opened in a current version of Chrome.