Ancient General — Godot 4.3 RTS with persistent backend. Developed by Enki's Kairós Co.
THE CAMPAIGN BEGINS BEFORE COMBAT
Reconnaissance is not a preliminary animation. The battlefield contains elevation, water, forests, marsh, roads, resources, choke points, and deployment boundaries generated from a reproducible seed. Scouting changes what each side is entitled to know and what preparations remain credible. Traps, ambushes, and routes acquire meaning because terrain and knowledge precede contact.
Recruitment asks the player to compose a force from eighteen historically themed troop types rather than purchase a single ascending power score. Infantry, cavalry, archers, siege units, specialists, and elite escorts carry different movement, range, formation, and terrain implications. Deployment converts that composition into geometry. A strong unit placed outside command, behind blocked sight, or against the wrong approach can be less useful than an ordinary unit whose standing order matches the ground.
The general is both a protected piece and a source of command. The elite escort changes the cost of reaching that piece; command radius and line of sight change which formations can act coherently. Standing orders such as advance, hold, harass, charge, fall back, retreat, engage, rout, and fire let the player express doctrine before resolution. Traps depend upon placement, discovery, and triggering circumstances rather than acting as free damage icons.
The Django server owns authenticated players, catalogue data, maps, plans, and battle authorization. The browser and Godot clients are different views over the same rules rather than separate games that happen to share a title. Catalogue and map endpoints prevent troop and terrain definitions from drifting between Python, JavaScript, and Godot. Replacement synchronization ensures that removing or changing a preparation locally removes or changes it on the server rather than leaving an invisible old army behind.
The battle service resolves a plan only for its owner. Combat logs preserve clashes, movement, trap effects, morale, command, and victory conditions as events that can be inspected rather than a single unexplained winner. Ancient General is less interested in reflex than foresight: where the river mattered, whether scouting justified the cost, whether an order survived enemy movement, and whether the general prepared an army or merely collected units.
The catalogue makes the sequence inspectable. Scouting exposes terrain before the treasury is committed. Recruitment spends coins on named troop records whose strengths and weaknesses differ: pikes deny cavalry but fare poorly on broken ground; light infantry can move through rough terrain but does not hold a direct engagement like heavy infantry; ranged formations exchange close defense for reach. Deployment then binds purchased formations to coordinates on the generated map. The player cannot recover a bad composition merely by placing every unit in the same favorable tile.
Trap preparation is likewise conditional. Inundated ground slows movement and weakens cavalry charges. Pits damage and disrupt charging cavalry. Stockpiled ammunition changes nearby ranged reserves. Oil becomes a delayed fire hazard only when the necessary attack reaches it. An ambush conceals nearby troops until contact or detection. Their prices compete with the army and with one another, so fortifying every approach is not a free precaution.
A standing order stores a command, formation, speed, delay, destination, and sequence position. Line, column, square, and wedge are not labels pasted onto the same instruction. The order enters a battlefield whose routes, sight lines, engagement state, and command relationship can change before its turn arrives. A formation must remain within the general's command conditions to receive direction. Delay can create coordination or leave an order obsolete. Hold, advance, charge, fall back, retreat, harass, engage, rout, and fire therefore express different commitments rather than alternate button captions.
The persistent campaign record stores state with an integrity digest. That permits a browser or Godot client to resume a preparation without inventing missing troops, traps, or orders, while malformed or unauthorized state remains rejectable. The saved plan is not merely a screenshot of the board: it is the set of decisions from which later resolution can be reproduced.