I built a satirical browser game to share with friends (Hormuz Havoc: you play an American president managing a crisis in the Middle East, only "loosely" inspired by current events). I had good fun making this, but that's not necessarily the interesting part.

The interesting part was that within a few hours of sharing it with my friends, some of them set about trying to overrun the leaderboard by launching a swarm of AI bots to learn the game and figure out how to get the highest score. This set off a game of cat-and-mouse as they found vulnerabilities and I tried patching them.

Within hours of sharing, someone used the Claude browser extension to read game.js directly. Large parts of the scoring formula, action effect values, and bonus thresholds were sitting in client-side JavaScript - this was a trivial thing even a human could've found, but a human would've still had to play the game, whereas the AI bot just optimised directly against the scoring formula. It meant that the first AI already scored 2.5x higher than the best human player by optimising directly against the source code rather than playing the game.

Straightforward fix: moved the entire game engine server-side. The client is now a dumb terminal, it sends an action ID, receives a rendered state. No scoring logic, no bonus thresholds, no action effects exist in the browser. The live score display uses a deliberately different formula as misdirection.

This increased the difficulty in finding bot-enabled hacks, so the subsequent bots tried brute-forcing the game, trying to game the RNG functions, and other methods.

But the next winning bot found a vulnerability where the same signed session token could be replayed. It would play turn N, observe a bad random event, replay the same token for turn N, get a different RNG outcome, keep the best one. Effectively branching from a single game state to cherry-pick lucky outcomes across 30 turns. Managed to 1.5x the previous bot's high score.

The bot's own description: "The key optimisation was token replay. Because the backend let the same signed state be replayed, I could branch from one exact game state repeatedly and continue from the luckiest high-value outcome each turn."

Fix here: consume a turn nonce atomically before any randomness is generated.

The current state is that the leaderboard is now split into human and AI-assisted. I think the capability of AI bots has flatlined a bit now. Perhaps Claude Mythos might be able to discover the next hackable exploit ¯\_(ツ)_/¯

Happy to go deeper on any of the above - or just enjoy the game! Feel free to try your own AI-powered leaderboard attempt too!

> If your approval rating gets too low, your party will impeach you.

I like how in this game, the approval rating actually means something.

Some fiction is just more realistic than reality

Perhaps a next iteration would include a "Call the polling agencies 'fake news'" action card? Although I'd need to figure out whether using it would boost or reduce his approval ratings...

That’s how you know it’s loosely inspired by current events.

The approval rating works the exact same way it does for the current administration.

If it goes to actually 0%, there are problems. Otherwise it's a resource that can be traded against to grift personal funds.

The fact that it got overrun in 24 hours is almost more interesting than the game itself. Says a lot about how cheap and easy it is to deploy agents at scale now — the interesting question is what happens when that hits products that actually matter.

The variety of methods each agent tried was also interesting IMO - some going brute-force, others trying to methodically guess the next move. The nice thing about moving the game logic server-side is having some basic logs on how long each game attempt took, and some of the bots were incredibly easy to identify as they selected turns in under a second, while others were harder to spot since they seemed to be reasoning between turns.

If it had been delivered as WASM, the bots would have decompiled that and optimised against it. Fun times.

Can you explain how I can invade Kharg Island more than once? It seems to indicate that it is possible but the card says it is a one-time thing.

Also, the press shield + Fox News boosts don't seem to do anything with regards to subsequent events. Are they supposed to do something or are they just for show / humor?

Invading Kharg Island is definitely a one-time event, I think there may just be a copy bug in the game over screen where it indicates that the final action was done N times even if it's a one-time action. Will fix it!

Also the Press Shield + Fox News boosts alter the RNG probabilities with regards to the random events for negative press events and/or positive Fox News puff pieces.

[deleted]

Will you be releasing more such funny scenario based games. I laughed a lot reaching the end.

Perhaps a sequel, where you play a bumbling Vice President trying to negotiate a durable ceasefire and peace deal whilst your regional allies try to continuously torpedo your efforts..?

Again, only loosely inspired by current events.

Interesting, a careful read can reveal some serious implications for the future of the web.

[deleted]

[dead]

Weak gameplay. It’s a turn-by-turn war strategy game where all the levers are “Go on FOX and friends”. What’s particularly strange is how backward the critique is. How about this— for your encore, write the same game from the IRGC perspective. It goes— the US seeks peace; fund foreign militias, try to assassinate a former President. Said former president is reelected and after being unable to close a peace deal, attacks you. You— demonstrate your strategic deterrence by bombing a half-dozen neutral nations and mining an international waterway. Etc.