Features
Every major system in Ages of Dominion, in detail.
Fully Data-Driven Config
Every game constant is tunable via a GameConfig struct with 80+ parameters.
Load configs from JSON files during development, or from PostgreSQL in production —
the Facade + Adapter architecture means zero changes to game code.
Configurable areas include: city economics, combat balance, AI behavior, hero costs, faith generation, espionage rates, diplomacy timing, trade routes, victory thresholds, mage AI (mana reserves, spell tiers, ritual gates), and much more.
Content versioning via SHA-256 hashes ensures idempotent uploads. A CLI tool uploads config files directly to the database with a single command. The entire game is tunable without recompiling — perfect for live ops balancing and modding.
Six Doctrine Trees
Doctrines are the defining strategic choice. Each player invests in one or more of six doctrine trees, unlocking unique buildings, units, abilities, and victory conditions. Hybrid cross-doctrine builds unlock capstone effects available nowhere else.
Industry
Production speed, trade networks, siege weapons, and economic domination.
Science
Research rate, vision range, observatories, and technological supremacy.
Faith
Temples, crusaders, sanctified territory, and divine victory.
Arcane
Mana fonts, spell circles, portals, and arcane apotheosis.
Nature
Herbalism, treants, regeneration, and the World Tree victory.
Chaos
Dark shrines, necromancy, chaos lords, and apocalyptic victory.
Procedural Hex World
Maps are procedurally generated with 9 biomes — plains, forest, desert, mountain, hills, tundra, ocean, coast, and river. Each biome affects movement costs, combat modifiers, resource yields, and building eligibility.
Mines spawn on mountain tiles with specific resource deposits (iron, silver, gold, crystals). Harbours can only be built on coastal tiles. Roads and bridges connect your empire — infrastructure is visible on the map and affects movement speed.
Fog of war and visibility are tile-based. Units, cities, and terrain features extend your vision range. The minimap shows explored territory, unit positions, and player borders.
Combat System
39 unit kinds across 3 tiers (basic, elite, faith), plus a legends tier of its own. Combat resolves with: attack/defense stats, unit-class counters (cavalry beats light infantry, magic beats siege), morale (units break and flee), flanking bonuses, terrain modifiers (forest defense, river penalty), siege mechanics (walls, towers, moats), and naval units (warships, galleons, transport ships) that fight under the same combat rules as land units.
Guard units garrison in cities for defense. Supply wagons extend army range. Engineers build roads, bridges, and tile improvements. Heroes attached to armies provide leadership bonuses and unique combat abilities.
Magic & Faith
Arcane: Mages draw power from mana fonts and dark shrines. Spells include fireballs, teleportation, summoning, and terrain manipulation. Rituals are multi-turn grand spells requiring multiple mages. Portals of light and darkness enable instant army teleportation across the map.
Five domains, 36 spells. Arcane and Divine are the ones you cast directly. Nature (entangle, call the wild, storm, earthquake), Chaos (fear, doom, dark pact, rift) and Necromantic (bone shield, drain life, raise dead) are live in the simulation, and the AI casts across all five.
Faith: Temples and churches generate faith. Sanctified territory provides combat bonuses to faithful units. Crusaders and inquisitors suppress enemy religions in conquered cities. The Faith victory path asks for a large accumulated faith (2,000 at the base game length) held for five empire ticks — a slow build, not a single decisive moment.
Heroes & Champions
Recruit unique hero units — paladins, archmages, death knights, warlords, chaos lords. Heroes level from 1 to 20 through battle, gaining a new ability pick every second level, and can install artifacts found in the world into their cities.
Hero abilities include: rally (restore army morale), steel_wall and champion_aura (aura buffs that affect all friendly units in range), sacred_heal, coordinated_strike and charge, plus espionage and diplomatic picks like plant_whispers, counter_spy, envoy and charm. A high-level hero can turn the tide of an entire war.
A house can also give a hero an order — slay a number of foes, or hunt a named enemy hero — and the hero is paid in gold, experience and fame when the order is met. You can give the order yourself, or leave it to the house.
Economic Depth
10 resource types — iron, stone, wood, food, silver, gold, mana, crystal, crystals and crystal mines. Cities generate base yields modified by terrain, buildings, population, and doctrines.
Buildings: 42 types across production (workshop, forge, siege workshop), economy (market, bank, granary), resource extraction (5 mine types, mana font), military (barracks, walls 1-3, towers 1-3, moat), faith (temple, church, dark shrine), arcane (mana font, portals), naval (harbour, shipyard, grand shipyard), and unique buildings (grand forge, observatory).
Trade networks connect cities and generate passive gold. Supply wagons extend army operational range. Food surplus drives population growth. Resource scarcity creates natural strategic bottlenecks — control the only crystal mine on the map to dominate arcane production.
The Sea Market
In the Seafarers preset your ships sail, dock and trade. A harbour needs a coast, a shipyard builds the hulls, and a trade ship loads cargo at your own port and sells it at a foreign one. Ships cross open sea and coast only; a land unit never does.
Every few minutes a foreign merchant house sails in from beyond the map and docks at your harbour with terms. Accept, and the route pays gold and grain every tick; decline, and the house sails on. Each house has its own colours on the sail and the deck.
Merchants are fair game — but they remember. Every attack costs standing: at -3 they take twice as long to arrive and pay a quarter less, at -6 they stop calling for a while, and a house you sink pays its hold to you. Pirate bands raid laden trade ships, and a flagship with escorts can sail as one fleet (in the engine; orders and combat are coming).
Treaties & Royal Houses
The Diplomacy tab shows where you stand with every house and the next step on the ladder: peace, a non-aggression pact, an alliance. An offer costs diplomacy points and the other house answers by its own temperament — a faithful house is far likelier to say yes. Break a pact or an alliance and it is a betrayal: honor is lost, and the game shows the price before you pay it. An offer toast fades after about ten seconds, but the offer does not: it stays on the Diplomacy tab, with Accept and Decline, until you answer it or it lapses.
With the Royal Houses preset every house keeps a court of two, a princess and a prince, each with a painted portrait that is never repeated in a match. Houses that hold a treaty — a pact or an alliance, either way round — can offer each other a marriage; the marriage binds the two houses together, and it can seal a pact into an alliance. The AI weighs an offer and now and then makes one of its own. Breaking the alliance voids the marriage and costs more honor.
In the engine, a royal travels to their spouse's court by caravan or by ship, and a house at war with either of the two may take the convoy standing on its tile — then choose ransom, hold, execute or release, and a captive royal comes free by spy, by a raiding party, or on their own legs. The captor's choice is in the client; the convoy itself is still a ledger entry, so you do not see it on the map yet.
Generations
A house is more than a colour on a map. In the Royal Houses preset every royal is a person: they are born, they grow through child, young, middle and old, they die of age, and the house mourns them. Their portraits are drawn for their stage of life, so a court visibly ages.
When a head of house dies, the eldest of them succeeds, the house mourns, and its allies gain honour. When a line dies out the dynasty does not: a cousin arrives and adopts into the house. A court that has no child of its own can adopt too — a line with no future — so a house is never simply gone.
The calendar sets the pace. A game year is a few real minutes, and the births, the deaths and the mourning all run in game years, so a long game is a long history rather than a longer war.
Espionage
A spy can be ordered to watch a named city, and reports on that city — not the nearest one. The Missions panel shows your posts, the intelligence they bring, the captives you are holding and the captives taken from you.
Wars take people hostage. The captor chooses: ransom, hold, execute or release — and a captive royal comes free by spy, by a raiding party, or on their own legs.
And a house can turn. Sabotage a building, poison a well or a granary, assassinate a royal within reach — and blame another house for it. On the defence, post counter-spies, sweep for hidden agents, catch them, and see through a frame.
Online Multiplayer
The game plays online, against other people. Three ways in: a ranked queue where your rating moves when you win and falls when you lose, quickplay for an unranked match, and a custom lobby where you choose the format and the seats. Ranked needs an account; the other two play anonymously.
The match is authoritative: the server owns the simulation and the clients send it intents, so both players are looking at the same world. Two-team modes are supported — pick the sides in the lobby — and the victory path that decides a team game is team power.
A lobby match can also be watched. The spectator view opens from a link, runs a few seconds behind the match, and carries the chat.
A lobby host can fill a seat with an AI player and give it a role — Commander, Military, Diplomacy, Economy, Mage or Religious. An outside agent that holds that seat's own session token can drive it over HTTP through a catalogue of 34 named functions, from reading the board to moving a unit or setting a city's doctrine: a read comes back at once, an order rides the next lockstep frame so every client applies it on the same tick. A human seat is never served this way. The MCP server that fronts the catalogue is not hosted yet.
Readable, Announced, Translated
The interface ships in English and Spanish, in a light theme and a dark one. Treaty, marriage and merchant offers are announced to screen readers through a polite live region, and each Accept and Decline button names the offer it answers. Panels that fade by themselves skip the fade when your system asks for reduced motion.
We run an automated accessibility audit over the game client and fix what it finds: the last pass cleared every critical finding. A handful of smaller ones are still open, the size of the dock grip among them.
Victory Conditions
Seven victory paths. Each sustained-progress path must hold its
condition for sustain_empire_ticks consecutive
empire ticks before victory fires — no last-second flips.
- Conquest: Eliminate all opponents. The default fallback — games resolve this way if no other path completes.
- Economy: Accumulate the configured gold reserve and trade-route count. A trade-and-build victory, not a conquest in disguise.
- Science: Reach the configured knowledge threshold. Rewards sustained research investment and observatory play.
- Faith: Accumulate the configured total faith and temple count. Sanctified territory, crusaders, and inquisitors drive this path.
- Diplomacy: Reach the configured honor threshold. Reward for trade deals, alliances, and keeping the peace.
- Milestones: Be the first seat to complete the realm's great milestones — founding cities, raising heroes, winning battles. Milestone counts only grow, so reaching the target is permanent. The Explorer preset is built around it.
- Team Power (team games):
In 2-team formats, the first team to hold
team_power_threshold_pctof combined power score forsustain_empire_tickswins as a team.