structs-combat
# Structs Combat
**Important**: Entity IDs containing dashes (like `5-10`, `9-3`) are misinterpreted as flags by the CLI parser. All transaction commands in this skill use `--` before positional arguments to prevent this.
## Procedure
1. **Scout** — `structsd query structs planet [id]`, `structsd query structs struct [id]` for targets, shield, defenses.
2. **Optional stealth** — `structsd tx structs struct-stealth-activate --from [key-name] --gas auto --gas-adjustment 1.5 -y -- [struct-id]` before attack.
3. **Attack structs** — `structsd tx structs struct-attack --from [key-name] --gas auto --gas-adjustment 1.5 -y -- [operating-struct-id] [target-struct-id,target-id2,...] [weapon-system]`. Can target multiple structs.
4. **Raid flow** — Move fleet to target: `structsd tx structs fleet-move --from [key-name] --gas auto --gas-adjustment 1.5 -y -- [fleet-id] [destination-location-id]`. Then `structsd tx structs planet-raid-compute -D 3 --from [key-name] --gas auto --gas-adjustment 1.5 -y -- [fleet-id]`. Compute auto-submits the complete transaction. Move fleet home. Refine stolen ore immediately.
5. **Defense setup** — `structsd tx structs struct-defense-set --from [key] --gas auto -y -- [defender-struct-id] [protected-struct-id]` to assign; `structsd tx structs struct-defense-clear --from [key] --gas auto -y -- [defender-struct-id]` to remove.
## Commands Reference
| Action | CLI Command |
|--------|-------------|
| Attack | `structsd tx structs struct-attack -- [operating-struct-id] [target-ids] [weapon-system]` |
| Raid compute (PoW + auto-complete) | `structsd tx structs planet-raid-compute -D 3 -- [fleet-id]` |
| Raid complete (manual, rarely needed) | `structsd tx structs planet-raid-complete -- [fleet-id]` |
| Fleet move | `structsd tx structs fleet-move -- [fleet-id] [destination-location-id]` |
| Set defense | `structsd tx structs struct-defense-set -- [defender-id] [protected-id]` |
| Clear defense | `structsd tx structs struct-defense-clear -- [defender-id]` |
| Stealth on | `structsd tx structs struct-stealth-activate -- [struct-id]` |
| Stealth off | `structsd tx structs struct-stealth-deactivate -- [struct-id]` |
| Move Command Ship (ambit) | `structsd tx structs struct-move -- [struct-id] [new-ambit] [new-slot] [new-location]` |
Raid flow: fleet-move → planet-raid-compute (auto-submits complete) → fleet-move home → refine stolen ore. Common tx flags: `--from [key-name] --gas auto --gas-adjustment 1.5 -y`.
## Raid Timing
Fleet movement (`fleet-move`) is instant — no transit time. The only time cost in a raid cycle is the PoW compute.
`planet-raid-compute` uses `-D` flag (range 1-64) to wait until difficulty drops before hashing. Raid PoW difficulty depends on the target planet's properties. Launch raid compute in a background terminal — it may take minutes to hours depending on difficulty. Use `-D 3` for zero wasted CPU. Compute auto-submits the complete transaction.
**Important**: Your fleet is locked "away" during the raid compute. You cannot build on your planet while your fleet is away. Plan accordingly — complete all planet builds before moving fleet for a raid.
## Ambit Targeting
Each weapon can only hit specific ambits. Before attacking, verify your struct's weapon can reach the target's ambit.
| Struct | Lives In | Primary Targets | Secondary Targets |
|--------|----------|-----------------|-------------------|
| Command Ship | Any (movable) | Current ambit only | — |
| Battleship | Space | Space, Land, Water | — |
| Starfighter | Space | Space | Space |
| Frigate | Space | Space, Air | — |
| Pursuit Fighter | Air | Air | — |
| Stealth Bomber | Air | Land, Water | — |
| High Altitude 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 | — |
**Command Ship positioning**: The Command Ship is the only struct that can change ambits via `struct-move`. It can only attack structs in its current ambit (ambit flag `32` = "Local"). Move it to the target's ambit before attacking. Move it away from enemy weapon ranges as a defensive tactic.
## Weapon Control vs Defense Type
The interaction between weapon control (guided/unguided) and target defense determines evasion. This is the core of combat tactics:
| 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) | 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 |
**Tactics**: Use unguided weapons vs Signal Jamming, guided vs Defensive Maneuver. Armour always reduces by 1.
**Stealth rules**:
- Stealthed structs can still be attacked from the **same ambit** -- stealth only blocks cross-ambit targeting
- Attacking **instantly deactivates** stealth (firing reveals position)
- Re-activation costs 1 charge (`struct-stealth-activate`)
## Strategic Positioning
**Offensive**: Move your Command Ship to the ambit where you want to deal damage. Use cross-ambit attackers (Battleship, Stealth Bomber, SAM Launcher, Submersible) for coverage without repositioning.
**Defensive**: If the enemy fleet can only target specific ambits, move your Command Ship to an ambit they cannot reach. Diversify defenders across ambits so you can block attacks from any direction.
**High-value cross-ambit units**: Battleship (Space→Space/Land/Water), SAM Launcher (Land→Space/Air), Stealth Bomber (Air→Land/Water), Submersible (Water→Space/Water), Cruiser (Water→Land/Water + Air secondary). These structs threaten multiple ambits and are the foundation of flexible fleet composition.
## Verification
- Query planet shield, struct health
- Query fleet location (onStation vs away)
- Stolen ore: refine immediately; verify with struct/player queries
- Attack results include health values (remaining health after attack) -- use to assess damage dealt
- Raid `seized_ore` is tracked on `planet_raid` record -- query to see total ore stolen
## Combat Notes
- Minimum damage after reduction is 1 -- attacks always deal at least 1 damage
- Offline/destroyed structs cannot counter-attack
- Each struct can counter-attack **at most once per `struct-attack` invocation** -- not per target, not per shot
- **Defender counter-attack fires before block**, and fires even on evaded shots
- **Target counter-attack fires after all shots resolve** -- destroyed targets cannot counter
- **Block does NOT fire on evaded shots** -- only counter-attacks happen on evasion
- Evasion is per-target (entire volley evaded), while shot accuracy is per-projectile
- Each projectile gets its own EventAttackShotDetail -- `targetPlayerId` is on EventAttackShotDetail (not EventAttackDetail)
- PDC does not counter-attack -- it only auto-fires after all targets are resolved
- Multiple players' PDCs on the same planet stack correctly
- Target struct existence is validated before attack proceeds
- Hashing for raid-compute is open by default -- any valid proof accepted
- Successful raids seize ALL of the target's storedOre -- one raid takes everything
- Destroyed structs are gone forever but can be replaced by building a new struct of the same type (full PoW required)
- Protect your Command Ship -- losing it disables your entire fleet until a replacement is built
## Combat Readiness Checklist
Before engaging in combat, verify all conditions:
- [ ] **Command Ship online** — `structsd query structs struct [cmd-ship-id]`, status = Online
- [ ] **Fleet on station** (for defense) or **fleet away** (for raids) — `structsd query structs fleet [fleet-id]`
- [ ] **Sufficient charge** — Weapons cost 1-20 charge. At ~6 sec/block, 20 charge = 2 minutes
- [ ] **Power capacity headroom** — Total load must stay below capacity during combat
- [ ] **Defense structs assigned** — PDC, Orbital Shield, defenders set via `struct-defense-set`
- [ ] **Available struct slot** — If building combat structs, check planet slots (0-3 per ambit)
- [ ] **Ore refined or secured** — Unrefined ore is stealable. Refine before engaging in raids that may invite retaliation
## Defense Formations
Assign defenders to protect high-value structs. Defenders absorb incoming attacks before the protected struct takes damage.
**Minimum viable defense**: Assign at least one combat struct per ambit to defend your Command Ship. Command Ship has 6 HP; most fleet structs have 3 HP. Without defenders, a Command Ship can be destroyed in just a few attacks.
**Example formation** (4 Starfighters defending Command Ship):
```
structsd tx structs struct-defense-set --from [key] --gas auto -y -- [starfighter-1-id] [command-ship-id]
structsd tx structs struct-defense-set --from [key] --gas auto -y -- [starfighter-2-id] [command-ship-id]
structsd tx structs struct-defense-set --from [key] --gas auto -y -- [starfighter-3-id] [command-ship-id]
structsd tx structs struct-defense-set --from [key] --gas auto -y -- [starfighter-4-id] [command-ship-id]
```
**Rules**:
- Defenders must be in the **same ambit as the target being defended** to block (not the attacker's ambit)
- A struct cannot block for a friendly in a different ambit
- Defenders counter-attack **once per `struct-attack` invocation** (before block, even on evaded shots) -- for multi-shot weapons (Attack Run with 3 projectiles), the defender counters on the first shot only but can attempt to block all 3 shots
- Counter-attacks are ambit-independent from the defended target (a space defender can counter a space attacker while defending a land struct)
- Attacking Signal Jamming targets (Battleship, Pursuit Fighter, Cruiser) with guided weapons is riskier -- you miss AND get countered
- Each defender assignment costs 1 charge -- stagger 6s apart (same account)
- Build defense BEFORE economy or offense -- always
- Defense protects structs from destruction but does **NOT** prevent ore seizure -- the only defense for ore is immediate refining
## Error Handling
- **"insufficient charge"** — Weapon needs charge; check struct state.
- **"target invalid"** — Target may be destroyed, stealthed, or out of range.
- **"unreachable" / "out_of_range"** — Your weapon cannot target that ambit. Check the targeting matrix above and reposition your Command Ship or use a different struct.
- **"fleet not away"** — Raids require fleet away; move fleet first.
- **"proof invalid"** — Re-run raid-compute with correct difficulty.
- **Stolen ore** — Refine immediately; ore is stealable until refined.
## See Also
- [knowledge/mechanics/combat](https://structs.ai/knowledge/mechanics/combat) — Damage, evasion, raids, defense
- [knowledge/mechanics/fleet](https://structs.ai/knowledge/mechanics/fleet) — Fleet movement, on-station rules
- [knowledge/mechanics/resources](https://structs.ai/knowledge/mechanics/resources) — Ore vulnerability, Alpha Matter
标签
skill
ai