Skip to content

Combat ​

Status: draft v0.1, 2026-11-09. Hangs off GAME-DESIGN.md §7. Numbers are shapes, not balance.


1. Constraints ​

Combat has to satisfy three things that normally fight each other:

  • Nobody must need to be online at a particular moment (anti-pillar: no daily-login jail, pillar: asynchronous by design).
  • Reflexes must never decide an outcome (anti-pillar: no twitch skill).
  • It has to be watchable, because a 3D space game where you never see a battle is a spreadsheet with a wallpaper.

The resolution: deterministic server-side simulation with a client-rendered replay.

2. How a fight happens ​

  1. A fleet is committed with a doctrine — standing orders, set before departure (§4).
  2. On arrival, the server resolves the engagement: a seeded, deterministic simulation over a fixed number of rounds. No player input required, no connection required.
  3. Both sides receive a combat log. The client replays it in 3D from the seed and the order list — the server never ships a video, just the handful of bytes needed to reproduce the fight exactly.
  4. Losses, salvage and loot are applied according to the state of the system — Imperial Core, taxed, or untaxed (SECURITY-AND-SOVEREIGNTY.md §2.3).

Everything expensive about MMO combat — persistent connections, tick servers, lag compensation, cheat detection — simply does not exist in this model. A fight costs one short CPU burst and a few kilobytes.

The server never ships a video or a position stream. The client reproduces the fight exactly from the same deterministic function the server used — which also means a desync is a bug the player can see.

Live layer (optional, later): if both commanders happen to be online when the engagement opens, they may issue orders between rounds, with a generous timer. This is a bonus for presence, never a requirement, and it must not produce outcomes unreachable by a good doctrine.

3. What makes composition matter ​

Three interlocking triangles. Nothing more, because this must be learnable.

Size classes — Light / Medium / Heavy. Big guns struggle to track small hulls; small hulls cannot break heavy armour. A fleet of only one size class is always exploitable. This is the single most important rule: it is what prevents the doomstack, which is what kills eternal-universe games.

Damage vs defence — three damage types against three defence profiles, with a straightforward matrix. Knowing what the enemy flies is worth more than having more ships, which feeds the information pillar.

Range bands — Close / Standard / Long. Doctrines choose a preferred band; closing or holding range is resolved by relative speed and tackle (§5).

Power curves flatten deliberately. The best hull in the game is meaningfully better than a starter hull, not categorically better. A well-composed, well-informed force of cheap ships beating an expensive badly-composed one is the intended outcome, not an upset.

4. Doctrine ​

A doctrine is the player's entire tactical expression, set in advance. Kept small enough to configure on a phone:

SettingOptions
Engagement rangeClose / Standard / Long
Target priorityLargest / Smallest / Support first / Haulers first
Withdraw atNever / 25% / 50% / 75% fleet damage
TackleHold the enemy / Let them run
ReserveCommit everything / Hold a screen

Doctrines are saved and named, shared within a corporation, and copied. A veteran's library of doctrines for different intel situations is their skill.

5. Escape, and why most fights are indecisive ​

Tackle is a module whose only job is to stop another ship from leaving — to hold it in place. It is specialised, it is fragile, and a fleet has to deliberately bring it.

The rule: you can always run, unless someone is actively holding you.

One exception, and the player chooses it: a ship running a scan sweep is stopped, locked in and uninterruptible (SECURITY-AND-SOVEREIGNTY.md §7.3). It has tackled itself.

What that looks like. You jump in with six ships and find twelve. Nobody has tackle on you, so you break off: the two slowest ships at the back die, the rest limp home. You are hurt, you are not finished, and you will be back with better intel. That is an indecisive fight, and under this rule it is what most fights are.

This is correct for a universe that never resets. If fleets routinely died in full, one bad ambush would cost a month of work, people would stop undocking, and the map would go quiet. Indecisive-by-default keeps everyone willing to fight.

Killing someone properly therefore requires having planned it: bringing tackle, cutting the roads so there is nowhere to run (SECURITY-AND-SOVEREIGNTY.md §5), catching a fleet deep in free burn far from any road, or simply knowing they would be there when they did not know you would. Information, again.

The risk, stated plainly: this can tip into toothless, where nobody ever dies and violence has no weight. The dial is the cost and fragility of tackle. Cheap, plentiful tackle makes fights decisive and frightening; expensive, fragile tackle makes them soft. That is a number for the balance simulator, and it is one of the first things to tune.

6. Losses ​

Categorical, by the state of the system the fight is resolved in (SECURITY-AND-SOVEREIGNTY.md §2.3):

StateOutcome
Imperial CoreConsensual only. Duels and declared wars. Hull repair cost, no destruction.
TaxedCargo and stored resources can be taken. Hulls are disabled, recoverable for a repair bill.
UntaxedFull destruction. Wrecks, salvage, podding. Everything you brought can be gone.

Insurance (a credit sink) softens hull loss, never cargo. Cargo risk is the thing that makes hauling a real decision.

7. Bases and sieges ​

A player base is very tough. Cracking one is a project, not an opportunity: it costs real resources, real time and usually real friends. This is deliberate — a base is the thing a player has invested months in, and it must not evaporate because someone wandered past with a fleet. Expensive but possible is the target; impossible is not.

Structures cannot be killed in one pass. Attacking one puts it into reinforcement: a timer, after which it becomes vulnerable inside a defence window the owner chose when they built it — a few hours a day, in their own time zone. The standard solution to time-zone warfare, and it works.

Defence does not require the owner to be awake ​

An offline base defends at full strength. No penalty for sleeping, no daily-login jail. A player who misses a weekend can lose ground; they cannot lose everything because of when they live.

But presence has to matter ​

A defender who is there must defend meaningfully better than one who is not — otherwise there is no reason to show up for your own siege, and the best moment of the game never happens.

The shape is settled, the mechanism is not. Candidates, none chosen:

  • Command boost — the owner's presence raises the base's effectiveness while they are online.
  • Active fire control — the player takes over targeting, out-thinking the base's standing orders.
  • Emergency repair — spending materials in the moment to hold a structure that would otherwise fall.
  • Fighting in person — the owner's own fleet joins the defence, which is just normal combat on top.

Multiple defenders must scale. Ten defenders present should be meaningfully stronger than one, without becoming an auto-win that makes attacking a well-populated alliance pointless. Diminishing returns are the obvious tool; the curve is a balance question.

This is the one place in the game where being online is rewarded. It is rewarded with advantage, never with survival — and the owner picks the window.

The siege that needs nobody awake ​

The economic siege is usually the better weapon anyway: cut the gate chain, watch the tax bill rise, wait for the lapse flag (SECURITY-AND-SOVEREIGNTY.md §3). Patient, asynchronous, and it kills empires rather than buildings.

8. NPCs ​

  • Pirates — they are everywhere outside the Core, and densest where nobody is paying for the system's security. They are the reason unprotected space is genuinely unsafe even when no player is interested in you, and they are the main credit faucet.
  • Imperial navy — instant and overwhelming in the Core; in a taxed frontier system they come, but late and under-strength; in an untaxed system they do not come at all.
  • Menaces — periodic galaxy-scale PvE invasions that destroy infrastructure and force cooperation across political lines. Also an emergency sink for materials and credits. Designed later; noted here so the combat model stays compatible with large cooperative fights.

9. Implementation notes ​

  • The simulation is a pure function: (fleets, doctrines, environment, seed) → log. No I/O, no randomness outside the seed, no wall-clock.
  • That purity buys: server-side resolution, client-side replay, trivial unit testing, balance simulation at scale, and the ability to move it to another language later if it ever becomes hot. This is one of the few places in the codebase that genuinely deserves tests — it is both easy to break and silently wrong when broken.
  • Cost per engagement must stay in the low milliseconds. Round count fixed and small (order of 20).
  • The client needs the ship positions; it derives them from the same deterministic log rather than receiving a position stream.

10. Proposal — the fight is decided before it starts ​

Status: proposal, not decided. Jonathan asked for a suggestion; this is it. Everything above is settled; this section is the part still open.

The problem ​

We have ruled out everything that normally carries a combat system. No reflexes, no presence requirement, no positioning, no real-time. So what is the player actually good at, and what does the resolver actually compute?

The wrong answer is "whoever brought more ships". That is what a pure attrition model degenerates into once players have solved the maths, and it makes an eternal universe a numbers race that nobody can re-enter.

The proposal, in one line ​

You fight the battle you planned, and the surprise is the quality of your information.

Combat stops pretending to be a test of tactics and becomes a test of intelligence — which is already the fourth pillar, already has a whole mechanic behind it (SECURITY-AND-SOVEREIGNTY.md §7), and is the one thing a solo player can out-do an alliance at.

How it works ​

1. The engine is attrition with hard counters. Rounds of mutual fire, resolved deterministically. Three interlocking triangles as in §3 — size class, damage versus defence, range band. No positioning, no grid. Composition is a portfolio, not a single throw: you choose proportions, so there is no coin-flip rock-paper-scissors.

2. Counters shift efficiency, never flip outcomes. Having the right hull against theirs changes how much damage you trade per round. It does not produce an automatic win. Being wrong costs you a worse exchange rate, not the battle.

3. Before committing, the player sees a forecast — expected outcome, as a range, computed from what they actually know. Not from the truth.

This is the whole idea. If your intel is good, the forecast is accurate and you can commit with confidence. If your intel is thin or stale, the forecast is confidently wrong, and you find out in the replay. We never hide the maths; we let the player be certain about a picture that happens to be incomplete.

The information system already generates exactly the right asymmetry: charts perish, scans cost exposure, free burn hides fleets, gates log transits. All of it now pays out in combat instead of being flavour.

4. Mass is loud. A fleet's detectability scales with its size. A doomstack can exist — it simply cannot arrive anywhere unannounced. Numbers stay powerful and stop being sneaky, which is the part that actually ruins games like this. It also means the counter to a blob is intel and roads, not a damage nerf, so we never have to balance numbers against themselves.

This is the same pattern as the public lapse flag (SECURITY-AND-SOVEREIGNTY.md §3) and the scan signature (§7.3): in this game, commitment announces itself. Three systems, one rule. It should be applied deliberately from here on.

What the player is good at ​

In order of how much it decides a fight:

  1. Knowing what is there — fresh intel versus a week-old chart.
  2. Composition — bringing a portfolio that counters what you believe is there.
  3. Commitment — choosing to fight, to withdraw, or to never show up. Declining a fight you would lose is a skill, and the escape rule (§5) makes it a real option.
  4. Logistics — being in range and repaired, which is the quiet half of every war.

Notably absent: execution. That is deliberate and it is the point.

Alternatives considered ​

ModelWhy not
Pure attrition, no forecastSolvable. Once the community publishes the maths, the bigger stack always wins and there is nothing left to be good at.
Sealed-bid posture game (both sides secretly pick aggressive/cautious/evasive, a matrix resolves it)Genuinely interesting, and it reads as arbitrary without repeated play against known opponents. Worth revisiting once corporations and reputations exist — it is a better fit for a mature game than a new one.
Phased engagement with live adjustment between roundsPresence advantage, consistent with base defence (§7). But it risks making the offline player strictly worse at ordinary combat, which the anti-pillars forbid. Keep as the optional live layer (§2), not the core.
Turn-based tactical gridToo slow, too much UI for a phone, requires presence. Rejected outright.

What would need proving ​

  • That a forecast computed from imperfect intel reads as exciting rather than unfair. This is the whole bet and it needs a playable prototype, not an argument.
  • That counter efficiency can be tuned so composition matters more than headcount at realistic fleet sizes.
  • That "mass is loud" does not simply mean large alliances never fight, because they can always see each other coming. A fight both sides can see coming should still be worth having.

11. Open questions ​

  • [ ] How many ships can be in one engagement before the replay stops being legible on a phone? That number may be a hard fleet cap, and a hard fleet cap has large political consequences.
  • [ ] Do modules have ammunition as a consumable, or is ammo folded into a flat cost? Ammo is a great sink and a logistics burden; it may be one system too many at launch.
  • [ ] Is there a boarding/capture mechanic? Capturing hulls instead of destroying them is thematically excellent and an economic nightmare.
  • [ ] Should drones (Act II) fight, or only work? If they fight, the early game has combat before the player owns a real warship.
  • [ ] Live orders: in or out of the first playable? Leaning out.

Changelog ​

  • 2026-11-09 — v0.1. Deterministic asynchronous resolution with client-side replay, three-triangle composition model, doctrine as tactical expression, tackle-gated escape producing indecisive fights by default, security-scaled losses, defender-chosen siege windows.
  • 2026-11-09 — v0.2. §5 rewritten in plain terms: what tackle is, what an indecisive fight looks like, and an explicit statement of the risk that it tips into toothless, with the balance dial named.
  • 2026-11-09 — v0.3. §7 bases: offline defence at full strength, presence grants advantage only, multiple defenders scale. §10 proposal for the engagement model: attrition with hard counters, a forecast computed from the player's own intel rather than the truth, and mass being loud. Awaiting Jonathan's call.
  • 2026-11-09 — v0.4. §6 losses collapsed from four interpolated bands to the three states of SECURITY-AND-SOVEREIGNTY.md §2.3 — Imperial Core, Taxed, Untaxed — with no purchased gradient and no partial-to-full scaling. §2 diagram and §8 pirate density reworded to match: there is no continuous security quantity to interpolate against.

Galaxy design documentation. Nothing here is implemented yet.