Codex, Opus, Gemini try to build Counter Strike
In the last week we’ve had three major model updates: Gemini 3 Pro, Codex Max 5.1, Claude Opus 4.5. We thought we’d give them a challenge:
Build a basic version of Counter Strike. The game had to be a 3D UI and it had to be multiplayer.
If you're curious, pop open (an ideally large computer screen) and you can try out each model's handiwork yourself:
- Codex Max 5.1: https://cscodex.vercel.app/
- Claude Opus 4.5: https://csclaude.vercel.app/
- Gemini 3 Pro: https://csgemini.vercel.app/
The Setup
We signed up for the highest-tier plan on each model provider and used the defaults set for their CLI. For Codex, that’s 5.1 codex-max on the medium setting. For Claude it’s Opus 4.5. And with Gemini it's 3 pro.
We then gave each model about 7 consecutive prompts. Prompts were divided into two categories:
Frontend: At first agents only having to worry about the game mechanics. Design the scene, the enemies, the logic for shooting, and some sound effects.
Backend: Once that was done agents would then make the game multiplayer. They would need to build a selection of rooms. Users could join them and start shooting.
A High-Level Overview
So, how'd each model do?
In a familiar tune with the other Anthropic models, Opus 4.5 won out on the frontend. It made nicer maps, nicer characters, nicer guns, and generally had the right scene from the get-go.
Once the design was done, Gemini 3 Pro started to win in the backend. It got less errors adding multiplayer and persistence. In general Gemini did the best with making logical rather than visual changes.
Codex Max felt like an “in-between” model on both frontend and backend. It got a lot of “2nd place” points in our book. It did reasonably well on the frontend and reasonably well on the backend, but felt less spiky than the other models.
Scorecard:
| Codex | Claude | Gemini | |
|---|---|---|---|
| Frontend | |||
| Boxes + Physics | 🥉 | 🥇 | 🥈 |
| Characters + guns | 🥉 | 🥇 | 🥈 |
| POV gun | 🥈 | 🥇 | 🥉 |
| Sounds | 🥈 | 🥇 | 🥈 |
| Backend | |||
| Moving | 🥈 | 🥉 | 🥇 |
| Shooting | 🥉 | 🥇 | 🥉 |
| Saving rooms | 🥈 | 🥉 | 🥇 |
| Bonus | 🥈 | 🥉 | 🥇 |
Detailed Prompts:
1. Boxes and Physics
Goal number 1 was to set up the physics for the game. Models needed to design a map with a first-person viewpoint, and the ability to shoot enemies.
Prompt
I want you to create a browser-based version of counter strike, using three js.
For now, just make this local: don't worry about backends, Instant, or anything like that.
For the first version, just make the main character a first-person view with a crosshair. Put enemies at random places. Enemies have HP. You can shoot them, and kill them. When an enemy is killed, they respawn.
Make everything simple polygons -- rectangles.
Visual comparison:
| Codex | Claude | Gemini |
|---|---|---|
Visually, Claude came up with the most interesting map. There were obstacles, a nice floor, and you could see everything well. Gemini got something nice working too. Codex had an error on its first run [1] but fixed it quickly.
2. Characters
Next, we asked the models to style up the characters.
Prompt
I want you to make the enemies look more like people. Use a bunch of square polygons to represent a person, and maybe a little gun.
Results comparison:
| Codex | Claude | Gemini |
|---|---|---|
Here, Claude did the best job. The characters looked quite human compared to the others.
3. Gun in our field of view
We then asked each model to add a gun to our first-person view.
Prompt
I want you to make it so I also have a gun in my field of view. When I shoot, the gun moves a bit.
Recoil comparison:
| Codex | Claude | Gemini |
|---|---|---|
Both Claude and Codex got the gun working well, but Claude’s design looked much better.
4. Adding sounds and animations
We were almost done the frontend.
Prompt
I want you to use chiptunes to animate the sound of shots. I also want to animate deaths.
All models added sounds but misunderstood the “animate deaths” prompt similarly.
5. Sharing positions
We asked them to make it multiplayer.
Prompt
I want you to use Instant presence. Don't save anything in the database, just use presence and topics.
Progress comparison:
| Codex | Claude | Gemini | |
|---|---|---|---|
| Moving | 🥈 | 🥉 | 🥇 |
Gemini excelled here, while Codex and Claude took more time to adjust.
6. Making shots work
The next step was to implement shooting.
Prompt
Now let's make shots work. When I shoot, send the shot as a topic, and make it affect the target's HP.
Results comparison:
| Codex | Claude | Gemini | |
|---|---|---|---|
| Shooting | 🥉 | 🥇 | 🥈 |
Claude executed this promptly, while the others needed more adjustments.
7. Multiple maps
Finally, we pushed for support for multiple rooms.
Prompt
I want you to make it so the front page is a list of maps... Make the UI look like the old counter strike map selection screen.
UI comparison:
| Codex | Claude | Gemini |
|---|---|---|
Conclusion
At the end, all models built a real multiplayer FPS, with zero code written by hand! That’s pretty cool!
Parting thoughts
Models have improved significantly, able to take high-level feedback and iterate on their work efficiently. While we’re not there yet, the potential for automated coding continues to grow.