# 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:

1. **Codex Max 5.1**: [https://cscodex.vercel.app/](https://cscodex.vercel.app/)
2. **Claude Opus 4.5**: [https://csclaude.vercel.app/](https://csclaude.vercel.app/)
3. **Gemini 3 Pro**: [https://csgemini.vercel.app/](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\]](/content/essays/agents_building_counterstrike#user-content-fn-1/index.html) 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.
