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 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 / attackerRetreated. attackerDefeated means your raiding Command Ship was destroyed while away. 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.
A raid steals ore. A successful raid seizes all of the defender’s storedOre and nothing more — it does not destroy the player or their structs. Killing the defender’s Command Ship opens the shieldsVulnerable window so the raid can complete; if the defender restores or rebuilds it before you finish, completion is rejected (shields_active) and you get nothing. Beware the reverse: trigger_raid_defeat_by_destruction is on the Command Ship, so if your raiding CMD ship is destroyed while away, your fleet is defeated (attackerDefeated) and sent home. Win path for ore: strip same-ambit blockers → destroy the defender’s CMD ship → complete the raid before they rebuild it (most reliable vs an offline defender).
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 (attacking another guild’s structs is a Tier 2 act of war). Note most weapons are single-target (primaryWeaponTargets = 1) — the comma list only spreads damage for weapons whose target count is > 1.
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).primaryWeaponTargets = 1 (one struct per volley) — no multi-target weapon exists. The comma-list in struct-attack doesn’t make a single-target weapon spread.evadedByPlanetaryDefenses) — hit those land/water structs from land/water instead, or expect 0s from the air/space. Guided weapons that miss come from the target’s unit-level signalJamming, not the satellite. The PDC and the interceptor network are the planetary defenses that affect combat.storedOre and nothing else — there is no player-elimination outcome (see raid section). 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, and never let your raiding CMD ship die while away (attackerDefeated).| 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.