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}
}