# Proposed Ship Changes

Three changes, each defended on multiple independent axes. Reasoning in
[Ship-Balance-Analysis.md](Ship-Balance-Analysis.md), mechanics in
[Races/](Races/).

`BR` = build rate (`reqturn`), `ppt` = PR × BR. Full in-game names.

---

## Method

An earlier version of this file proposed 16 changes off averaged per-ship
metrics. Nearly all were withdrawn once two corrections landed: `class` is a
display label with no balance meaning, and build rate was missing entirely.

**The primary metric is now net PR swing per turn** — enemy PR removed minus own
PR lost, per turn invested to field and sustain the fleet — measured with the
`eye-of-sauron` campaign simulator over a full 87-hull round robin. It is
capture-aware, dummy-padded to ten stacks, posture-averaged, and rebuilds losses
at each hull's own velocity. Turns are the binding currency in GC, not PR.

| | net PR swing / turn |
|---|---|
| Best hull (K.Hun-Zen) | +20,900 |
| p75 | +7,678 |
| **Median** | **+382** |
| p25 | −6,827 |
| Worst valid attacker | −27,590 |

Every proposal is sized to land **near the median**. Nothing here is meant to
create a new best hull.

### Three corrections that shaped this list

1. **Starbases can never attack.** `f_com_attack3.cfm` RR2 excludes
   `class IN (8,21)` from the attacker's fleet; RR1 (defender) has no such
   filter. Ranking them by attack campaign is meaningless.
2. **Starbases are the only hulls buildable without dropping damage
   protection** — see §2. They are excluded from this list entirely.
3. **Capture is enormous and earlier metrics ignored it.** Measured directly:
   `H.Suzerain` attacking a Tiger fleet takes **100.0M PR of ships — the entire
   defending fleet**. `H.Galleon` takes 67.6M (100% of its kill), `V.Triton`
   47.5M (75%). This is why reality places Collective near the top while
   damage-per-PR metrics put it last.

---

## 1. The three changes

| Hull | Race | Change | Campaign net/turn |
|---|---|---|---|
| **C.Cancer** | Neutral | Attack 350 → 525 (×1.50) | −8,972 → **+489** |
| **F.Spear** | Neutral | Attack 400 → 660 (×1.65) | −14,004 → **+98** |
| **G.Livid (r)** | A.Miner | Attack 7,500 → 12,375 (×1.65) | −14,117 → **−189** |

Measured effect on race capability (top-5 hulls per race, the realistic measure
since nobody fields their median hull):

| Race | top5 before → after |
|---|---|
| Guardian | 14,938 → 14,395 |
| Marauder | 12,334 → 11,983 |
| Terran | 8,276 → 7,929 |
| Collective | 8,006 → 7,758 |
| A.Miner | 7,892 → 7,332 |
| Viral | 2,982 → 2,539 |
| Neutral | 754 → **1,361** |
| **spread** | **14,184 → 13,034** |

The top of the table is undisturbed, spread tightens slightly, and all three
hulls move from bottom-decile to roughly median. That is what a floor raise
should look like.

---

## 2. Why no starbase changes — and a correction

Scorpion was in an earlier draft of this list, cut on PR from 43,681 to 26,200.
**That was wrong**, and the reason is worth recording because it is the clearest
case of a metric inverting reality.

I first ranked starbases by defensive trade (attacker PR lost per defender PR
lost), which put Chimaera best at 27,880 value/turn and Scorpion worst at 10,446
— a 2.7× gap inside one race, apparently damning.

**But that measures the wrong thing.** From `Modules/Ships/Builder.cfm:250-297`:

```cfml
<cfif class IS NOT 8 AND class IS NOT 21>
    <cfset Query2 = "Go Daddy">
</cfif>
...
<cfif Query2 IS NOT FALSE>, protection = CURRENT_TIMESTAMP(), planetlost = 0</cfif>
```

Damage protection is gated on **`planetlost >= 3`** (`s_com_attack_req.cfm:207`).
Building any hull of class other than 8 or 21 sets **`planetlost = 0`**, which
drops you out of protection immediately. Building a starbase does not.

So a player under DP — invulnerable for 24–48 hours depending on server — can
spend the entire window converting turns into starbases. Every other hull forces
the choice: stay protected and build nothing, or build and become attackable.
**Starbases are the only way to convert turns into fleet while untouchable.**

During that window defensive trade is irrelevant, because nobody can attack you.
What matters is PR banked per turn:

| Starbase | Race | PR | BR | **ppt** | PR per 90-turn bank |
|---|---|---|---|---|---|
| G.Diamond | Guardian | 101,858 | 1 | **101,858** | 9.2M |
| A.Kryo | A.Miner | 87,781 | 1 | 87,781 | 7.9M |
| **Scorpion** | **Terran** | 43,681 | 2 | **87,362** | **7.9M** |
| M.Lakko | A.Miner | 24,444 | 3 | 73,332 | 6.6M |
| B.Chiron | Viral | 18,482 | 3 | 55,446 | 5.0M |
| **Chimaera** | **Terran** | 21,393 | 2 | 42,786 | 3.9M |
| H.Man-O-war | Collective | 450 | 90 | 40,500 | 3.6M |
| A.Hoko | A.Miner | 9,945 | 3 | 29,835 | 2.7M |

**Scorpion is third-best in the game at the one thing starbases uniquely do, and
banks 2.0× more PR per turn than Chimaera.** My ranking had it last and Chimaera
first — exactly backwards. Cutting its PR to 26,200 would have halved its ppt to
52,400 and destroyed the role.

The same reasoning clears **G.Diamond** and **A.Kryo**, which sat at the bottom
of the attack round robin purely because they were being simulated doing
something they cannot do. G.Diamond has the highest ppt in the game.

**No starbase is a change candidate.** Their low combat efficiency is paid for
by a privilege no other hull has.

---

## 3. C.Cancer — Neutral Cruiser

* **Attack: 350 → 525 (×1.50)**, still pure energy (.1940 → .2910 attack/PR)

**The worst damage per PR of any player hull in the game**, and bad on every
independent axis:

| Axis | Reading | Context |
|---|---|---|
| Damage per 1k PR | **193** | lowest of 95 armed hulls; median 552 |
| Damage per turn | 5,580 | bottom 3; roster median 22,694 |
| Campaign net/turn | **−8,972** | bottom decile |
| Observed within-race delta | **−10.8** (n=330) | worst measured; −6.7 low band and −6.6 mid, so not noise |

**The reality check is the strongest part.** Across twelve real high-PR fleets,
C.Cancer appears exactly **once — as a one-ship dummy** in Teerak's fleet.
High-PR players already treat it as padding, never a real stack.

It is also the cleanest proof that durability per PR buys nothing: 3,352 EHP per
1k PR, third highest in the game, and still the worst hull in the game.

**Screened for a hidden role:** not a starbase, not `is_flanker`, not fez,
`capture = 0`, `long_range = 0`. Nothing protected to misread.

| Weapon | Campaign net/turn |
|---|---|
| 350 (now) | −8,972 |
| 490 (×1.40) | −575 |
| **525 (×1.50)** | **+489** |
| 647 (×1.85) | +5,480 |

×1.50 is a floor raise, not a promotion — it remains well below the cruiser
field. Its dummy role is unaffected: at 1,804 PR it is just as usable as padding.

---

## 4. F.Spear — Neutral Cruiser

* **Attack: 400 → 660 (×1.65)**, still pure kinetic (.2646 → .4365 attack/PR)

| Axis | Reading |
|---|---|
| Damage per 1k PR | **244** — third worst in the game |
| Damage per turn | 8,838 — bottom 8 |
| Campaign net/turn | **−14,004** — rank 78 of 87 |
| Observed within-race delta | **−7.9** |

Same shape as C.Cancer and same screen: no flanker flag, no fez membership, no
capture stat, not a starbase. It is simply a bad cruiser with no compensating
role.

| Weapon | Campaign net/turn |
|---|---|
| 400 (now) | −14,004 |
| 600 (×1.50) | −2,363 |
| **660 (×1.65)** | **+98** |
| 800 (×2.00) | +5,836 |

### The two-neutral risk, stated plainly

Neutral changes are **not race-neutral**: buffing six neutral hulls previously
moved Viral +8.5 and Marauder −5.8 at equal PR, because races lean on the
neutral pool in inverse proportion to their own roster strength. That is why the
earlier list's neutral buffs were withdrawn, and taking two here needs
justification.

Two things make it survivable. First, both hulls are currently **non-options** —
C.Cancer is fielded only as padding and F.Spear barely at all — so raising them
adds choices rather than transferring power. Second, it was measured: the
combined change moves Neutral's top-5 from 754 to 1,361 while every other race
moves by less than 600, and overall top-5 spread **tightens** from 14,184 to
13,034.

If either hull starts appearing as a real stack in Viral fleets afterwards, that
is the signal to revert.

---

## 5. G.Livid (r) — Aspha Miners Fighter

* **Attack: 7,500 → 12,375 (×1.65)**, still pure kinetic (.5994 → .9890 attack/PR)

This one matters because **the paper stats look fine and two independent methods
both say it is not.**

| Axis | Reading |
|---|---|
| Damage per 1k PR | 525 — mid-table |
| EHP per 1k PR | 1,533 — mid-table |
| ppt | 50,052 — above median |
| **Campaign net/turn** | **−14,117 — rank 79 of 87** |
| **Observed within-race delta** | **−9.1 native, −12.9 pooled** (worst pooled of any hull) |

No summary metric predicts that. The campaign simulator and the battle record
share no assumptions and both put it in the bottom decile.

**The mechanism:** it is priced like a capital hull and fights like a fighter. At
12,513 PR per unit it absorbs flank fire at capital cost while contributing
fighter-tier damage. Miner already has the weakest median damage per PR of any
race (457); its fighter slot should not be what drags that down.

**Screened for a hidden role:** `capture = −100`, so it is capture-immune — a
genuine niche against Collective and Viral. But four other Miner `G.*` hulls
share that immunity, so it is not unique, and immunity does not compensate for
bottom-decile output.

| Weapon | Campaign net/turn |
|---|---|
| 7,500 (now) | −14,117 |
| 11,250 (×1.50) | −2,154 |
| **12,375 (×1.65)** | **−189** |
| 13,500 (×1.80) | +3,103 |

A PR reduction was tested and rejected: ×0.60 PR gives +14,794, roughly
top-quartile, which overshoots badly.

---

## 6. Why not others

**No Marauder and no Collective changes.** Both sit at the top once turns and
capture are priced in — Marauder leads the attack round robin on race mean, and
Collective's `H.*` line converts 100% of eligible kills into its own fleet. That
matches where reality puts them and nothing here should touch it.

| Hull | Why not |
|---|---|
| **Scorpion, G.Diamond, A.Kryo** | Starbases. Bottom of the *attack* round robin only because starbases cannot attack. All three are top-half at DP-window accumulation. See §2. |
| **A.Hoko** | My earlier sole "Dead weight" pick. Third best starbase by defensive trade (0.603), and a starbase besides. Case collapsed. |
| **Small/Large Strafez Runner** | Bottom two of the round robin, but 1–2 hull specialist flankers never fielded as mono fleets. The test misdescribes them. |
| **Tourmaline, P.Apollo** | Poor campaign scores, but both are `is_flanker` — never lead stacks. Same misdescription. |
| **L.Emerald, G.Quartz** | Bottom five on campaign, but Guardian leads the race table and L.Emerald has the 6th-best dpt in the game. Mixed signals, no clean case. |
| **C.Aries, C.Gemini** | Worst build economy in the game (ppt 5,100 and 9,720) — but C.Aries is the most-fielded ship in the game because it is an accumulation, not a build. A BR-only fix left equal-PR balance unmoved yet worsened averaged race balance. |

---

## 7. Code defects (not balance)

### Reverse eligibility is a name substring

`app/f_com_ship_r.cfm` blocks any name *containing* `P.`, `D.` or `G.`. A new
Marauder hull named "Reaper" would be Viral-eligible; "D.Reaper" would not.
Should be an explicit `ship_type` flag — **converted as a no-op first**, flagging
exactly the ships the substring currently blocks.

**The prefixes are two systems, not one.** Capture immunity comes from
`capture = −100`, covering `D.` and `G.` but **not** `P.` — so `P.` hulls are
capturable while still reverse-blocked. Keep the concerns separate.

### The class block can never fire

```cfml
",9,21," contains "#...classname#"
```

`_classname` resolves to a display name tested against numeric ids, so it never
matches and starbases/scouts are not reverse-blocked despite the help text.
Fixing it is a **behaviour change** — it removes five hulls from Viral's pool —
so treat it as a balance decision, not a bug fix.

---

## 8. Flagged, not proposed

**Aggressive attitude is strictly dominated.** It hands the *defender* the larger
multiplier (1.99 vs 1.75) into a loss-ratio win condition, losing to Careful by
23 points at parity and 34 at 1.30. Largest live imbalance found, and nothing to
do with ships. No number proposed because the intended design is unclear.

---

## 9. What is not priced in

Stated plainly, because it bounds how far these three changes can be trusted:

1. **Capture does not compound in the model.** The campaign simulator credits
   only the final battle's haul, deliberately. In the real game captured ships
   join your fleet permanently, so Collective and Viral are **stronger** than
   even the corrected numbers show.
2. **Per-ship metrics have almost no explanatory power at high PR.** On twelve
   real 90M–270M fleets, a stack's own stats correlate with its survival at
   r ≈ 0.07; the PR of the stack it is paired against correlates at −0.56. None
   of these three changes would alter any of those battles. See
   [Races/High-PR-Dynamics.md](Races/High-PR-Dynamics.md).
3. **Outcome swing is large.** Re-running one real matchup 200 times gives a
   **46% win rate with a 36.2M PR swing** between best and worst case — on
   identical fleets, from flank-target RNG alone.
4. **The DP window is not modelled numerically.** §2 establishes that starbases
   own a unique build privilege, but how much a full 24–48 hour protected build
   window is worth in PR terms has not been quantified against the cost of
   staying out of the fight.

These are floor raises for hulls dead on every axis measured. They are not
expected to move race balance and should not be judged on it.

---

### References

- `app/f_com_attack3.cfm` — resolution, win condition, capture, RR1/RR2 queries
- `app/Modules/Ships/Builder.cfm:250-297` — starbase damage-protection privilege
- `app/s_com_attack_req.cfm:207` — DP gate (`planetlost >= 3`)
- `app/f_com_ship_r.cfm` — reverse-engineering rules
- `H:\Coding\eye-of-sauron` — authoritative battle engine and campaign simulator
  (stable checkout backing a running Docker service). Two non-GC items:
  `spam_penalty` is a hook for theorising future changes, and `_game_victor` is
  wiki-derived and ~5 points less accurate than the live CFML predicate.
- [Ship-Balance-Analysis.md](Ship-Balance-Analysis.md), [Races/](Races/)
