Combat
Combat in Orbitarion is not about who clicks fastest. It's about preparation, intelligence, and timing. Battles resolve automatically at the tick — you set everything up in advance, and the engine does the rest.
Understanding how combat works lets you build better fleets, pick better targets, and survive attacks that would wipe out less prepared players.
How a battle starts
Send a fleet to an enemy planet with mission type Attack. When your fleet arrives — when its ETA reaches zero at a tick — the battle resolves immediately as part of that tick's calculations.
The defender doesn't have to do anything. Any ships on their planet automatically defend. Any allied defend fleets that have also arrived at the planet that tick join the defense.
You cannot stop a battle once fleets are in position. You can recall an outbound fleet before it arrives, but once it has landed, the fight happens.
Home fleet defense
When your planet is attacked, every ship you have at home defends automatically — not just the loose ships in your shipyard, but every ship in every fleet with "home" status as well.
This matters because organizing your ships into named fleets is part of normal play. You might have a fleet prepared for an upcoming attack, or a defend fleet staged for a neighbor, or ships grouped by role. As long as those fleets haven't departed, they're still physically at your planet. The moment an enemy arrives, those ships consolidate with your general defense and fight alongside everything else.
You do not need to "deploy" them manually. You do not lose the fleet organization afterwards — the consolidation happens under the hood, only for the purpose of the battle. Surviving ships end up pooled in your main planet inventory after the fight, and you can reorganize them into fleets again as needed.
The rule to remember: a fleet is only "away" when it has actually departed on a mission. Attack, defend-elsewhere, return trip, or a scheduled launch still queuing — any of these leave your planet's defense until the ships come back. Everything else at home fights when needed.
A planet that has sent all its ships out on a distant attack is extremely vulnerable. Good attackers watch for exactly this moment.
The 3-round system
Every battle plays out in exactly three combat rounds.
| Round | Targeting priority |
|---|---|
| Round 1 | T1 → T2 → T3 (primary target first) |
| Round 2 | T2 → T1 → T3 (rotates) |
| Round 3 | T3 → T2 → T1 (rotates again) |
If a ship's preferred target class has been completely destroyed, it falls back to the next available target. Losses are applied between rounds — ships killed in Round 1 don't fire in Round 2.
Within each round, ships fire in initiative order. Lower initiative number fires first. The Aetherians have the lowest initiative values in the game — they always act before everyone else.
PDS — stationary defender units
A defending planet's Planetary Defense Systems participate in combat as stationary defender units alongside any ships at home. They are not "pre-battle damage" — they fight in all three combat rounds, fire first every round (initiative 1), and take exact, proportional damage when attackers target their class.
| PDS | Class | Targets | Damage | Armor |
|---|---|---|---|---|
| Pulse Laser Array | Fi | Fi → Co | 30 | 100 |
| Plasma Turret | Fr | Fr → De | 80 | 200 |
| Ion Cannon | De | De → Cr | 150 | 350 |
| Orbital Strike Platform | Cr | Cr → Bs | 300 | 500 |
| Planetary Shield Generator | Bs | — (no damage) | 0 | 1 000 |
PDS is immune to EMP freeze, STC ship-stealing, and commander buffs. PDS units fight at base stats regardless of what the attacker brings.
For full PDS mechanics — class roles, build costs, Shield Generator orbital theft reduction, targeting punch-up principle, and tactical advice — see Planetary Defense Systems.
Initiative and firing order
Initiative determines who shoots first within a round. This matters enormously.
A ship that fires before its target can kill some of those ships before they get to shoot back. At the extreme end, The Aetherians' Celestial battleship has initiative 3 — it fires before every other battleship in the game. UEC's Titan has initiative 4 and fires afterward, but it has more armor and higher DPS.
The tradeoff between firing first and surviving longer is one of the core strategic tensions of the game.
Commander Tactician traits modify initiative directly. Coordinated Strike (T2) gives −1 initiative. Master Tactician (T4) gives another −1. A fully-built Tactician fires 2 initiative tiers earlier than they otherwise would. Defender's T2 trait gives +5 agility, not initiative.
Hit chance
Every shot rolls a hit chance based on the firing ship's weapon speed and the target's agility:
hit_chance = (25 + weapon_speed − target_agility) / 100
Clamped between 5% and 95%. A Stinger (agility 4) attacked by a Vanguard (weapon_speed 5) gets hit at 26%. A Titan (agility 1) attacked by the same Vanguard gets hit at 29%. The math is small per-ship but compounds across hundreds of attackers.
STC steal-ships get a +5% agility bonus that applies during battle setup. This makes them harder to hit. Defender's T2 trait adds another +5 agility to your fleet.
Luck multiplier
After hit chance is calculated, the entire battle gets a single luck roll: 0.85 + random() × 0.30. This means kill outputs vary by ±15% per battle. You can lose a battle you "should" have won by 7-8% on a bad luck roll, or vice versa. Build fleet margins above the deciding threshold, not at it.
Damage and armor
Damage per attacking ship type per round:
damage = guns × active_ships × damage × hit_chance × share × buff_mult × luck
kills = floor(damage / max(target_armor, 1))
Kills are capped at the target's surviving quantity. A frigate that hits a fleet of 100 destroyers can kill at most 100 destroyers per round.
The share factor means a fleet with multiple ship types in the targeted class divides damage proportionally between them. If the target side has 60 Falcons and 40 Stingers (both Fighters), 60% of fighter-targeted damage goes to Falcons.
Commander damage buffs
Commander traits that affect combat are applied during battle setup:
| Trait stat | Effect |
|---|---|
damage_pct |
Multiplies damage output (Tactician traits, Defender T3 Last Stand) |
armor_pct |
Multiplies armor (Defender traits) |
agility_bonus |
Flat +agility (Defender T2) |
init_bonus |
Subtracted from initiative — fires earlier (Tactician T2, T4) |
crit_chance |
Doubles a single kill roll per attack |
low_hp_damage_bonus |
Bonus damage when fleet drops below 30% value |
first_hit_survive_chance |
Once per battle, 50% chance to cancel first kill (Defender T4) |
For PvP battles, only the attacker's commander buffs apply to the attacker side, and only the defender's commander buffs apply to the defender side. In Dominion battles, the top contributor per slot (Phase 1) or per side (Phase 2) provides the buffs. See Orbital Dominion for details.
EMP — freeze, don't destroy
The Aetherians' Pulse, Arc, and Volt ships carry EMP weapons instead of standard guns. EMP doesn't deal damage — it freezes enemy ships for the remainder of the round.
A frozen ship can't fire. It can still be killed normally by other attackers. A successful EMP volley creates a free kill window for the EMP race's heavier ships (Tempest, Aether, Celestial) and any allies.
| Stat | Effect on EMP |
|---|---|
weapon_speed |
Used for EMP "hit chance" — same formula as damage |
emp_resistance |
Reduces the EMP's freeze rate against this ship (0.0 = fully vulnerable, 1.0 = immune) |
ATH heavy ships (Tempest 30%, Aether 35%, Celestial 40%) have high EMP resistance — they can fight through other ATH fleets. The Void has 0 EMP resistance across all ships — ATH is The Void's worst nightmare.
STC ship-stealing
The Sytherian Cartel replaces damage with ship capture on its Cutlass (Fi), Raider (Co), and Black Frigate (Fr).
When a steal-ship hits a target, the target isn't destroyed — it's captured. The captured ship immediately joins the STC side in _bu (the active battle pool) and fights for STC for the remainder of the battle. Surviving captured ships are added to the STC player's fleet permanently after the battle.
| Detail | Behavior |
|---|---|
| Capture attempts per round | Each steal-ship attempts one capture per round — guns is ignored |
| Hit chance | Standard (25 + weapon_speed − target_agility) / 100 formula |
| Distribution | Captures distributed proportionally across enemy ship types in the target class |
| Captured ship stats | Captured ships fight with their original stats — armor, damage, initiative all unchanged |
| NPC immunity | The Void cannot be stolen from. Steal-ships behave as low-damage kill-ships against NPCs |
| Capture-ship immunity | Other races' capture-ships (Orbital Pods, etc.) cannot be stolen |
| Surviving captures | Added to STC fleet permanently as new entries in fleet_ships |
Steal-ships also get a permanent +5% agility bonus during battle setup, making them slightly harder to kill than the same hull on another race.
See Sytherian Cartel for full details on each ship's targeting and strategy.
Determining the winner
After three rounds, the engine compares surviving fleet value between both sides:
dominance = attacker_value_after / (attacker_value_after + defender_value_after)
This is the attacker's share of the surviving total. High dominance = attacker still holds most of the value on the field = attacker dominated.
| Dominance | Result |
|---|---|
| > 0.55 | attacker_won (attacker holds majority of surviving value) |
| 0.45 – 0.55 | draw |
| < 0.45 | defender_won (defender holds majority of surviving value) |
A perfect attacker win approaches dominance 1.0; a perfect defender win approaches 0.0. The 0.45–0.55 buffer around 50% creates the draw band — when both sides took similar losses relative to their starting strength.
Edge case: if both sides took zero ship losses AND the defender had zero combat presence (empty planet), the result is forced to attacker_won so capture-only raids on undefended planets read correctly.
Draws are real outcomes
A draw isn't "nothing happened" — both sides take real losses, and the attacker still earns partial orbital theft. See the next section.
Orbital theft
The attacker's surviving capture ships (special_type = 'capture') determine how many orbitals are stolen. Each capture ship class contributes differently:
orbitals_stolen = floor((Fi_alive × 0.5 + Fr_alive × 1.25) × score_ratio × outcome_mult)
capped at 40% of the defender's total orbitals (75% vs The Void)
| Class | Ships | Contribution |
|---|---|---|
| Fi | Orbital Pod | 0.5 orbs per surviving ship |
| Fr | Atlas Transport, Brood Carrier, Conduit, Infiltrator | 1.25 orbs per surviving ship |
| Result | outcome_mult |
|---|---|
attacker_won |
1.00× |
draw |
0.60× |
defender_won |
0.25× |
Yes — draws give orbital theft. Even losses give some, if you have surviving capture ships. Sending more capture ships — especially Fr-class — directly increases your take. A capture-only fleet with zero survivors steals nothing regardless of outcome.
The 40% cap means a single raid can never take more than 40% of the defender’s total orbitals per raid (75% vs The Void).
Score ratio scaling
The score_ratio modifier scales theft based on size matchup:
score_ratio = clamp(defender_score / attacker_score, 0.5, 2.0)
Attacking a planet twice your size doubles potential theft (score_ratio = 2.0).
Attacking a planet half your size halves it (score_ratio = 0.5).
Equal-sized planets: no modifier (score_ratio = 1.0).
This is the main scaling mechanism. Punching up is rewarded, farming weaker targets is throttled.
Shield Generators reduce theft
Surviving Planetary Shield Generators reduce stolen orbitals linearly by 5% each, capped at 10 Shields (50% maximum reduction):
orbitals_after_shields = orbitals_stolen × (1 − min(surviving_shields, 10) × 0.05)
| Surviving Shields | Reduction |
|---|---|
| 0 | 0% |
| 1 | 5% |
| 2 | 10% |
| 5 | 25% |
| 8 | 40% |
| 10 (hard cap) | 50% |
Only surviving Shields count. A Shield Generator destroyed during the battle provides no reduction. Shield max quantity is enforced at 10 per planet. See Planetary Defense Systems for the full mechanic.
Raid recovery protection
If the attacker steals 30% or more of the defender's total orbitals in a single raid, the defender's planet automatically receives a 24-tick protection period — the same P status that new planets start with. No one can attack the planet during this window.
The timer uses GREATEST(existing_protection, current_tick + 24), so an active new-player protection is never shortened — the later of the two values applies.
This fires automatically in the same tick as the battle resolves. The defender doesn't need to do anything.
Resource distribution of stolen orbitals
Stolen orbitals are split proportionally across the defender's three resources:
steal_titanium = orbitals_stolen × (target_ti_orbs / total_orbs)
steal_silicon = orbitals_stolen × (target_si_orbs / total_orbs)
steal_uranium = orbitals_stolen − steal_ti − steal_si
If the defender has more Titanium orbitals than Silicon, you steal more Titanium. The numbers always sum to the total stolen amount.
Stolen orbitals arrive pre-initiated
The orbitals you steal land in your dock pre-initiated in the same per-resource breakdown they were on the defender's side. You don't pay any initiation cost on them — they start producing on the next tick.
This is a meaningful buff to raiding play: a winning attack against a defender with 50 mixed orbitals doesn't just give you raw uninitiated wreckage to slowly activate, it transfers working production into your economy immediately.
This rule applies to all races (not just STC). Every race with capture ships benefits.
STC resource raid removed in v2
In the v1 game design, STC had no orbital capture and instead raided resource stockpiles directly after a winning battle. This entire mechanic was removed from the engine on 2026-05-20.
In v2, STC has:
- Full orbital capture (Orbital Pod, Infiltrator) — same as every other playable race
- The unique ship-stealing mechanic via Cutlass, Raider, and Black Frigate
There is no fallback. The legacy resource-raid block in resolve_battle has been deleted. STC players cannot raid resources under any circumstances — capture orbitals and steal ships are the only ways STC gains value from combat.
If you've played v1 (Season 1 or earlier Beta rounds), this is the most significant STC redesign in v2.
PDS losses
PDS units are destroyed exactly during combat — there is no flat percentage destruction. When attackers target a PDS class, hits land, armor is overcome, and unit count drops by exactly that many. A battle that focuses on Fighter targeting can leave heavy PDS completely intact. Conversely, a heavy capital-ship attack can rip through Orbital Strike Platforms without scratching Pulse Lasers.
Destroyed PDS does not regenerate automatically — you rebuild from the defense queue. See Planetary Defense Systems.
Panic Retreat & Scatter (PvP only)
A fleet that loses a battle in v2 doesn't get wiped out — it panics, retreats, and scatters. This is one of the largest design changes in v2 and applies to both sides of any PvP engagement.
The 50% survival floor
For every ship type involved in a PvP battle (attacker or defender), the engine enforces a minimum 50% survival:
v_survival_pct := GREATEST(actual_survival, 0.50)
If a Falcon stack would have been wiped to 0%, it lands at 50% instead. If it would have lost only 20%, it loses 20% — the floor is a minimum, not a fixed value. The math only kicks in for catastrophic losses.
This means you can never lose 100% of any ship type in a single PvP engagement. The worst possible outcome is a 50/50 split between the casualty pile and the survivors.
Scatter trigger
When a fleet loses at least 50% of its committed ships (counting all ship types together), the survivors don't return cleanly. They scatter into the surrounding galaxy and limp back home over a randomized interval:
return_eta = 8 + random() × 5 → 8 to 12 ticks
The fleet's status flips to 'scattered', its mission becomes 'return', and it shows up in the news feed as fleet_scattered. During the scatter window, the fleet cannot be acted upon — no recalling, no redirecting, no new orders. You wait for it to limp home.
PvP only
The scatter floor and Panic Retreat only apply to player-vs-player battles:
v_is_pvp := (attacker_race != 'npc' AND defender_race != 'npc')
Attacks involving The Void (NPCs) — whether as attacker or defender — use normal combat with no floor. This is intentional design:
- The Void is the farm pool everyone uses to recover after losses
- Without a floor on Void engagements, players recovering from a loss could grind Void garrisons reliably
- With the floor active on Void, the recovery loop would feel artificial — your fleet would always come back at 50% minimum and skipping turns waiting for scatter would defeat the purpose
So: against another player, you keep at least 50% of every ship type. Against The Void, you can still lose your whole fleet to bad luck.
Tactical implications
- You can't be wiped. A massively outgunned fleet still leaves you 50% to rebuild from. The era of "one bad attack and your season is over" is over.
- Scatter is a soft penalty. 8-12 ticks of fleet downtime is non-trivial in a regular season (4-6 hours) but devastating in a Speed Round (40-60 minutes). Losing badly costs you tempo, not stock.
- Defenders also scatter. If your home fleet loses ≥50% in a defense, it scatters too. Sometimes a defender returning from scatter arrives late to a follow-up attack window.
- Aggressive vs careful play. Aggressive players can take more risks knowing they'll never zero out. Careful players still want to minimize losses — scattered fleets are still wasted ticks.
- Void farming feels real. Practiced players cycling fleets through Void garrisons get the actual win/loss experience without scatter cushioning. Pick your fights.
Tactics
Fleet diversity matters. A pure-Fighter fleet can be hard-countered by a fleet built to target Fighters. Mix Corvettes and Frigates so your fleet has answers to multiple target classes.
Punch up, not down. Score ratio rewards attacking larger targets (up to 2x) and penalizes attacking smaller ones (down to 0.5x). The same fleet investment goes much further against bigger targets — but they have to be ones you can actually beat.
Bring escorts for capture ships. Capture ships have no guns. They die first if your fleet is overrun. A capture-only fleet against light defenses can work, but adding even a few escorts dramatically improves survival.
Fr-class capture ships are worth the investment. An Atlas Transport, Brood Carrier, Conduit, or Infiltrator contributes 2.5× more orbs per ship than an Orbital Pod. A fleet of 10 Fr-class capture ships steals as much as 25 Orbital Pods. If you raid regularly, prioritise the Fr-class hulls.
Raid hard enough to trigger recovery protection — or don't. If you steal ≥30% or more of their orbitals, the defender gets a 24-tick P-status and you can't follow up. If your haul will be under 30%, you can re-raid sooner. Plan your fleet size around this threshold.
Use intel before committing. The Aetherians' EMP only works if you know what you're hitting. A Spymaster T2 (Deep Recon) reveals incoming enemy fleet composition — letting you build the perfect counter.
Watch dominance, not casualties. A battle isn't decided by absolute kills — it's decided by which side has more surviving value. Two 90%-loss sides is a draw; a 30%-attacker-loss vs 60%-defender-loss is an attacker win. The engine compares ratios.
Shield Generators stack hard but cap at 10. Each surviving Shield reduces theft by 5%. Going from 0 to 5 Shields is a 25% reduction; going from 5 to 10 is the same 25% gain but doubles the resource investment. Most defenders find 5-7 Shields the sweet spot.
Plan for scatter, not wipeout. In PvP, a catastrophic loss costs you 8-12 ticks of fleet downtime via scatter — not your entire fleet. Aggressive plays can survive a bad outcome. But scattered fleets can't defend or strike, so chaining losses is still painful.
The Void is your recovery farm. No scatter floor against NPCs means you can experience the full win/loss against Void garrisons, and your fleet either returns clean or doesn't return at all. Practiced raiders use this for rebuild cycles.
Build for the worst luck roll. A fleet that wins by exactly the right margin in math will lose 15% of the time to a bad luck roll. Build past the threshold.
Battle logs
Every battle generates a detailed JSON log stored in battles.log (current schema: version: 10). The log contains:
- Pre-battle state: starting fleet composition both sides, with
is_pdsflag distinguishing PDS units from ships - Per-round events: who fired at what class, hits, kills, EMP freezes, ship captures (STC steals), with
is_pds_shooterflag marking PDS contributions separately - Dominance value: the final surviving-value share that determines the result
- Luck multiplier: the random 0.85–1.15 roll for this battle
- Score ratio: clamped defender/attacker ratio (0.5–2.0) used in orbital theft scaling
- Buff manifests: which commander traits were active on each side —
attacker_buffs,defender_buffs, and per-eventbuff_eventsfor crits, low_hp_rage activations, and first_hit_save activations - Steal events: per-round per-ship records of any captures made by STC steal-ships
- PDS manifest: pre-battle quantities of each PDS class on the defender side
- Final survivors: ending ship and PDS counts both sides
- Orbitals stolen + breakdown: per-resource (Ti / Si / Ur) split of stolen orbitals
- Steal mode flag: whether the battle had STC steal-ships active
Separately from the battle log, a fleet that scatters fires a fleet_scattered news event into the attacker's news feed, with the return ETA.
Battle logs are visible in-game through the Private News feed. Premium players can view full replays of any battle.
Attack range — score-based punch-up rule
You cannot attack planets too far below your score. The v2 engine enforces a sliding floor that scales with your size:
min_target_score = attacker.score × GREATEST(0.20, LEAST(0.60,
0.20 + GREATEST(0, attacker.score − 20_000_000) / 180_000_000.0 × 0.40))
In plain terms: the bigger you are, the bigger the smallest target you can attack. Small players have free range; whales are isolated from punching down on mid-tier.
| Attacker score | Floor | Smallest legal target |
|---|---|---|
| ≤ 20M | 20% | 20% of your score |
| 50M | ~27% | 13.5M |
| 100M | ~38% | 38M |
| 150M | ~49% | 73.5M |
| 200M+ | 60% (cap) | 60% of your score |
There is no upper limit. You can always punch up — there's no rule preventing you from attacking a planet 100× your score (other than the obvious fact that you'll get crushed). Score-based protection only stops downward punching.
The Void exception
The Void (NPC race) is always attackable, regardless of score gap. Their planets, garrisons, and dominion sectors ignore the floor entirely. This is the design release valve — after a bad loss, you can always farm The Void to claw back ships and orbitals without score-protection blocking you.
Other exceptions
- Nebula and Dominion battles ignore score protection — those are alliance vs NPC or alliance vs alliance, with their own balance constraints.
- Terminated planets bypass the check. If a planet's status is anything other than
active(abandoned, banned, deleted), the score check is skipped because score is effectively 0. The engine validatesstatus = 'active'separately to prevent attacks on terminated planets.
Why the sliding floor matters
The v1 system had a fixed 20% floor (and a 5× upper cap that didn't matter much). This let large players still farm new players in their score band. In v2, the floor scales — a 200M-score player can only attack targets at 120M+, which protects the entire mid-tier from being farmed by endgame whales.
The cap at 60% (for 200M+ players) means whales fight each other or punch up further into Dominion. They cannot reach below 60% of their own score except via The Void.
Quick reference
| Concept | Detail |
|---|---|
| Rounds per battle | 3 |
| PDS in battle | Stationary defender units, init 1, all 3 rounds |
| Hit chance formula | (25 + weapon_speed − target_agility) / 100 |
| Hit chance range | 5% – 95% |
| Luck multiplier | 0.85 + random() × 0.30 per battle (±15%) |
| Damage formula | guns × active × damage × hit × share × buff × luck |
| Kills formula | floor(damage / armor) capped at target quantity |
| Dominance | attacker_value_after / (attacker_value_after + defender_value_after) |
| Attacker win threshold | dominance > 0.55 |
| Defender win threshold | dominance < 0.45 |
| Draw range | 0.45 – 0.55 |
| Orbital theft formula | floor((Fi×0.5 + Fr×1.25) × score_ratio × mult); mult = 1.0 / 0.6 / 0.25 (win/draw/loss) |
| Orbital theft cap | 40% of defender’s total orbitals per raid (75% vs The Void) |
| Raid recovery protection | 24-tick P-status triggered if ≥30% of orbitals stolen in one raid |
| Score ratio range | clamp(defender/attacker, 0.5, 2.0) |
| Shield generator effect | × (1 − min(shields, 10) × 0.05), cap 50% |
| Shield max per planet | 10 |
| Stolen orbitals state | Pre-initiated (same Ti/Si/Ur breakdown as defender) |
| PDS destruction | Exact, proportional to incoming damage |
| Survival floor (PvP only) | 50% per ship type — no ship type can be wiped |
| Scatter trigger (PvP only) | Fleet loses ≥50% of committed ships |
| Scatter return ETA | 8–12 ticks (random) |
| Scatter status | 'scattered' — no orders accepted during scatter |
| Void exception | No survival floor, no scatter, always attackable |
| Attack range floor | 20% (≤20M) sliding to 60% (200M+ whales) |
| Attack upper limit | None — punch up freely |
| STC resource raid | Removed in v2 (2026-05-20) |
| Battle log version | 10 |
Documentation reflects Orbitarion v2.0. Last updated: 2026-06-07.