Structs Combat

Combat exists to move ore. Raiding is how you take another player’s mined ore; attacks soften defenses and kill structs; defense keeps your own ore and infrastructure alive. The single most important v0.18.0 fact: a planet can only be raided to completion while the defender’s Command Ship is offline, destroyed, or non-existent. Keep your Command Ship online and you are effectively unraidable; to raid someone, you must catch theirs down.

Conventions (TX_FLAGS, -- rule, -D 3 PoW, the per-player charge bar, one-tx-at-a-time) come from conventions.md.

When to use it

Decisions

Raid go/no-go (the most important decision)

A raid is only worth launching when all of these hold. Use scripts/scout.sh [planet-id] to get this as a structured go/no-go, or check manually:

  1. Defender’s Command Ship is offline / destroyed / absent. If it’s online, the planet’s shields are up and planet-raid-complete is rejected (shields_active) no matter how long you grind. This is the gate.
  2. There is ore to take — defender’s storedOre > 0 (ideally a lot; a successful raid seizes all of it, not a share).
  3. The shield is low enough that the raid PoW is feasible in the time you have (shield raises raid difficulty; base 25, +contributions of online defense structs).
  4. The defender’s fleet is away / weak so your fleet survives the resolution.

When NOT to raid: defender CMD ship online; little/no stored ore; a shield so high the PoW outlasts your window; or the target’s guild will retaliate as a bloc for less ore than you’d lose. Raiding is an expedition — it costs you a fleet locked away and your home undefended by fleet. Expected ore must beat that cost.

Defense doctrine

Decisions live in playbooks/situations/under-attack, guild-war, and playbooks/meta/counter-strategies.

How a raid actually resolves (v0.18.0)

blockStartRaid is the defender’s Command-Ship vulnerability clock, and raid PoW age is measured from it:

So a raid is a race against the defender noticing and restoring their Command Ship. Scout the CMD ship first; don’t move your fleet until it’s down.

Procedure — raid

  1. Scoutscripts/scout.sh [planet-id] (or structsd query structs planet [id] + struct/player queries). Confirm the four go conditions above, especially the defender’s Command Ship status.
  2. Optional stealth — stealth a unit before approach (struct-stealth-activate, 2 charge); attacking later auto-drops it.
  3. Move fleet to the target (instant). Your fleet (and your Command Ship) is now away; you can’t build/mine at home while away.
    structsd tx structs fleet-move TX_FLAGS -- [fleet-id] [destination-location-id]
    
  4. Approval Block — fleet is your raider and now at the target; defender’s CMD ship is down (verified); your home ore is refined or below your theft tolerance; you accept an auto-submitted completion landing minutes-to-hours out.
  5. Raid compute (expedition, auto-submits completion — the documented -y exception):
    nohup structsd tx structs planet-raid-compute -D 3 --from [key] --gas auto --gas-adjustment 1.5 -y -- [fleet-id] \
      > memory/jobs/raid-[fleet-id].log 2>&1 & echo $! > memory/jobs/raid-[fleet-id].pid
    
  6. Move fleet home and refine the stolen ore immediately — it’s stealable in your hands now too.

If the defender restores their Command Ship mid-raid, the clock resets — withdraw or wait for it to drop again.

Procedure — direct attack

Scout the target’s ambit and defense type, position (Command Ship only) into range, then fire. The CLI prompts; verify target IDs and that you aren’t crossing guild lines you didn’t intend to (multi-target across guilds is a Tier 2 act of war).

structsd tx structs struct-attack TX_FLAGS -- [operating-struct-id] [target-id,target-id2,...] [weapon-system]

Attacks cost 3-5 charge from your per-player bar; space repeated attacks accordingly.

Procedure — defense setup

structsd tx structs struct-defense-set TX_FLAGS -- [defender-struct-id] [protected-struct-id]
structsd tx structs struct-defense-clear TX_FLAGS -- [defender-struct-id]

Defenders must be in the same ambit as the protected struct to block (1 charge each; stagger ~6 s on one key). Minimum viable defense: at least one combat struct per ambit guarding the Command Ship (6 HP; most fleet structs are 3 HP).

Tactical reference

Targeting (which struct hits which ambit)

Struct Lives In Primary Secondary
Command Ship Any (movable) current ambit only
Battleship Space Land, Water (armour-piercing) Space
Starfighter Space Space Space (Attack Run, ≥1 hit)
Frigate Space Space, Air
Pursuit Fighter Air Air
Stealth Bomber Air Land, Water
High Alt Interceptor Air Space, Air
Mobile Artillery Land Land, Water
Tank Land Land
SAM Launcher Land Space, Air
Cruiser Water Land, Water Air
Destroyer Water Air, Water
Submersible Water Space, Water

The Command Ship is the only struct that can change ambits (struct-move); it attacks only its current ambit. Reposition it into range to attack, or out of range to hide.

Weapon control vs defense (evasion + armour-piercing)

Target Defense vs Guided vs Unguided
Signal Jamming (Battleship, Pursuit Fighter, Cruiser) 66% miss full hit
Defensive Maneuver (High Alt Interceptor) full hit 66% miss
Armour (Tank, Field Generator, Continental Power Plant, World Engine) full hit, −1 dmg full hit, −1 dmg
Stealth Mode (Stealth Bomber, Submersible) same-ambit only same-ambit only
Indirect Combat (Mobile Artillery) full hit full hit
None full hit full hit

Use unguided vs Signal Jamming, guided vs Defensive Maneuver. Armour reduces damage by 1 — except against armour-piercing weapons (the Battleship primary), which ignore it. The Battleship is the dedicated answer to Tanks and to the (now armoured) power generators. Minimum damage after reduction is always 1.

Combat resolution notes

Commands reference

Action CLI Command
Attack structsd tx structs struct-attack TX_FLAGS -- [struct-id] [target-ids] [weapon-system]
Raid compute (PoW + auto-complete) structsd tx structs planet-raid-compute -D 3 TX_FLAGS_APPROVED -- [fleet-id]
Raid complete (manual, rare) structsd tx structs planet-raid-complete TX_FLAGS -- [fleet-id]
Fleet move structsd tx structs fleet-move TX_FLAGS -- [fleet-id] [destination-location-id]
Defense set / clear structsd tx structs struct-defense-set \| struct-defense-clear TX_FLAGS -- [defender-id] [protected-id]
Stealth on / off structsd tx structs struct-stealth-activate \| struct-stealth-deactivate TX_FLAGS -- [struct-id]
Move Command Ship (ambit) structsd tx structs struct-move TX_FLAGS -- [cmd-ship-id] [ambit] [slot] [location]

Raid flow: scout → (CMD ship down?) → fleet-move → raid-compute → fleet-move home → refine. planet-raid-compute is the documented -y exception; your Approval Block is the gate. planet-raid-complete does not consume charge.

Requires: structsd on PATH and a signing key.

Verification

Errors

See also