Skip to content

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_pds flag distinguishing PDS units from ships
  • Per-round events: who fired at what class, hits, kills, EMP freezes, ship captures (STC steals), with is_pds_shooter flag 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-event buff_events for 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 validates status = '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.