From 533c651b07994d7a90d65d8163da8ba04ee3c987 Mon Sep 17 00:00:00 2001 From: Quintine <15965533+Quintine@users.noreply.github.com> Date: Tue, 27 Oct 2026 23:01:54 +1100 Subject: [PATCH] Enforce Salusa free Sardaukar revival penalty --- components/ecaz-entry.tsx | 7 +- components/game-table.tsx | 13 +- docs/CURRENT_STATUS.md | 9 + docs/HOMEWORLD_BENEFITS_RULES.md | 38 ++++ docs/HOMEWORLD_COMBAT_IMPLEMENTATION.md | 15 +- docs/IMPLEMENTATION_STATUS.md | 13 ++ docs/RULE_DECISIONS.md | 32 +++- game/bots.ts | 11 +- game/engine.ts | 36 +++- game/faction-reference.ts | 2 +- game/homeworld-benefits.ts | 42 +++++ game/reference.ts | 2 +- game/revival-cancellation.ts | 11 +- game/revival-resume.ts | 15 +- game/revival.ts | 26 ++- tests/homeworld-salusa-engine.test.ts | 83 ++++---- tests/salusa-ambassador-revival.test.ts | 122 ++++++++++++ tests/salusa-free-sardaukar-controls.test.tsx | 135 +++++++++++++ tests/salusa-free-sardaukar-runtime.test.ts | 178 ++++++++++++++++++ tests/salusa-ghola-inspection.test.ts | 81 ++++---- tests/salusa-ghola-runtime.test.ts | 75 ++++---- tests/salusa-ghola-truth-controls.test.ts | 32 ++-- tests/salusa-ghola-truth.test.ts | 62 +++--- tests/salusa-revival-pending-compat.test.ts | 135 +++++++++++++ 24 files changed, 962 insertions(+), 213 deletions(-) create mode 100644 tests/salusa-ambassador-revival.test.ts create mode 100644 tests/salusa-free-sardaukar-controls.test.tsx create mode 100644 tests/salusa-free-sardaukar-runtime.test.ts create mode 100644 tests/salusa-revival-pending-compat.test.ts diff --git a/components/ecaz-entry.tsx b/components/ecaz-entry.tsx index 787f6270..2ab85070 100644 --- a/components/ecaz-entry.tsx +++ b/components/ecaz-entry.tsx @@ -299,11 +299,7 @@ export function EcazEntry({ onClick={() => send({ forces: count, - elite: Math.min( - entry.revival!.eliteTanks, - Math.max(0, 1 - entry.revival!.eliteRevived), - count, - ), + elite: Math.min(entry.revival!.eliteMaximum, count), }) } > @@ -312,6 +308,7 @@ export function EcazEntry({ ))} )} + {entry.revival?.eliteBlock &&

{entry.revival.eliteBlock}

}