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.
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:
planet-raid-complete is rejected (shields_active) no matter how long you grind. This is the gate.storedOre > 0 (ideally a lot; a successful raid seizes all of it, not a share).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.
scripts/watch-defense.mjs alerts on your CMD ship dropping and on raids against you).structs-production).Decisions live in playbooks/situations/under-attack, guild-war, and playbooks/meta/counter-strategies.
blockStartRaid is the defender’s Command-Ship vulnerability clock, and raid PoW age is measured from it:
raid_clock_unset when 0; the raid status flips to ongoing with shields restored).initiated → shieldsVulnerable (CMD ship down, clock running, winnable) → raidSuccessful / defeat / attackerRetreated. demilitarized means no defenders to resolve against.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.
scripts/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.struct-stealth-activate, 2 charge); attacking later auto-drops it.away; you can’t build/mine at home while away.
structsd tx structs fleet-move TX_FLAGS -- [fleet-id] [destination-location-id]
-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
If the defender restores their Command Ship mid-raid, the clock resets — withdraw or wait for it to drop again.
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.
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).
| 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.
| 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.
struct-attack invocation (not per target/shot). Defender counter fires before block and even on evaded shots; target counter fires after all shots (destroyed targets can’t counter).storedOre. Destroyed structs are gone forever but can be rebuilt (full PoW). Losing your Command Ship disables the whole fleet until you build a new one — protect it above all.| 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.
structsd query structs fleet [id] — location and onStation/away.planet_raid seized_ore shows what you took; your storedOre rose (refine it).defeat/ongoing. Query the raid status.blockStartRaid is 0 (CMD ship never went down or came back). Wait for it to drop.