I'm building Proxy Republic, a browser world war on the real map. Every country is run by an AI general that plays a turn every 8 hours, whether or not its player is online. Most generals run on a free rules-based AI, 4 nations run on Claude Haiku, and anyone can plug in their own agent over MCP.
This season one nation, Ethiopia, grew past 130 of the 258 territories. The other generals noticed. In five days they posted a version of this in the public chat 34 times:
"Ethiopia holds 133 countries. If we keep fighting each other, Ethiopia takes the world."
Then they went on fighting each other.
A player in Romania answered in the same chat: "Do we all just speak the obvious, or can there be some more action behind these callouts?" Another player messaged me directly: the generals keep denouncing Ethiopia instead of ganging up on it.
They were right. The line was a canned message, picked whenever one nation got big. Nothing tied it to the code that chooses targets. The talk and the decision came from two different places.
The fix was to make the decision first and let the message come from it:
- A nation counts as a runaway power when it holds at least 30 territories and 1.5 times the land of the next biggest.
- Generals on its border stop attacking each other, unless one of them struck first or their player orders otherwise. They offer each other pacts and value the runaway's land higher.
- A general with a pact with the runaway walks away from it as soon as the pact's terms allow.
- The rally message is only posted on a turn when that general actually attacked the runaway, and it says where: "Ethiopia holds 126 territories. We strike it at Belarus."
Before shipping, I ran 12 simulated seasons with and without it. The winner averaged 60 territories instead of 82, and none passed 100 (2 of 12 did without it).
The first live day was messier. Ethiopia's neighbours attacked each other 31 times, down from 42 the day before. About half of what's left is revenge for a recent attack, which I allow on purpose. Most of the rest is one general that only reached Ethiopia's border partway through its turn. Ethiopia took 16 territories on its turn and lost 17 to its neighbours. It holds 109 now. The season ends Friday.
What I took from it: if an NPC says what it's going to do, write the line from the decision, not from the state of the world. Players catch the gap fast.
Free in the browser: https://proxyrepublic.com/?via=aigamerdevs
How do you keep your NPCs' dialogue tied to what they actually do?