A huge army. Plenty of firepower. More than 3,000 turns without a decision.
That battle sent us digging into TinyGenerals AI. One side had assembled a wall of artillery. The other kept feeding tanks into its guns. Units fought, replacements arrived, and the map barely changed. That stalemate showed us where to look next.
There was room to maneuver and ground worth taking. The bot could win exchanges, but it struggled to turn that advantage into a plan that finished the battle.
Coordinated Strike is the next update we’re working towards. It also marks a culmination of months of work: a series of improvements to how the AI builds, plans, and fights, focused on making its units work together.
From individual moves to a shared purpose
A good move depends on what the rest of the army needs.
Taking an easy kill might waste the shot needed to save a base. Sending infantry towards an enemy might pull it away from the building it should capture. Gathering a powerful force might leave another part of the front exposed.
We’ve followed those connections through real decisions, replaying the same situations with different versions of the bot. That work began with the stalled army and grew into a closer look at how an order becomes an outcome.
| The situation | What we’re improving |
|---|---|
| A large army has nobody able to capture buildings. | Production responds to the missing capability. |
| A useful mission disappears between turns. | Plans retain the right player’s assignments. |
| A unit keeps heading towards an enemy already destroyed. | Obsolete orders are released so it can choose again. |
| Two units can save a base, but one chases an easy kill. | The bot preserves the actions needed to finish the job. |
| An attack reaches the front one unit at a time. | Coordinated preparation and a workable route into the objective are the next step. |
The first production and planning-memory fixes are already part of the foundation. From there, the latest development work makes the bot more aware of competing threats and whether its chosen response can succeed.
Finish the job
Consider a capturer standing on your base, one turn from taking it. One defender can reach a firing position and wound it. Two defenders can remove it.
The bot used to treat reaching that position as enough. Now it checks the actions needed to stop the capture, including movement, available attacks, and where each unit can stand. If it cannot commit enough force, the threat remains unresolved.
It also protects those actions. A nearby easy kill should not steal the shot that the whole rescue depends on. In prepared tests with real Alliance and Federation units, this is the difference between losing the base and holding it.
The same attention to changing circumstances runs through the other fixes. For example:
- A capturer threatening two buildings no longer makes one of them disappear from consideration.
- An existing assignment can give way to a more urgent threat.
- A unit stops following an order aimed at a dead enemy.
- A bot with no income checks the money and production options it still has before giving up.
More movement isn’t enough
Some promising ideas did not earn their place in the update.
Letting units step sideways reduced congestion in one crowded battle. Encouraging more tanks changed the army’s composition. Neither consistently delivered better results across the situations we tested, so those experimental rules remain disabled.
The aim is to take useful ground, weaken the opponent’s ability to replace losses, and follow through to victory. More movement and more kills can help, but neither tells the whole story.
That also changed how we test. We now look at what was captured, what could still produce units, what the attack cost, and why a match ended. We record a surrender separately from an army being destroyed.
Small artificial scenarios still help isolate a rule, but we now require another layer: checking the behavior with the production ruleset and actual faction units. We want improvements that survive contact with the game players actually play.
Next: a breakthrough that holds together
An experimental assault planner can already keep a group focused on a defended production building across turns. The remaining challenge is making that coordination worth the wait, because simply gathering everyone can be harmful.
Units may wait under enemy fire, the capturer may arrive too late, or the group may take support away from another useful mission.
Our next step is safer preparation: finding a less exposed place to gather when one is available, opening the route the capturer needs, and choosing when the force is ready to commit. Taking the building also needs a plan for what happens afterward.
This is still a work in progress. The latest decision fixes are tested in development, and coordinated assault remains disabled while we work through those risks. General flanking is a later goal, not part of this update.
There is no release date yet. What we want you to notice is this: an opponent whose moves connect, builds what it needs, changes plans when the battlefield changes, and brings its force to bear on a position instead of feeding units into it.
For the battle that started this work, see Teaching the AI to Break Through.
TinyGenerals is developed independently. Financial support lets me spend more time on development.
Discussion, feedback and development updates can be found on Discord and Reddit.