Prototype Emperor Nexus battle betrayal response

This commit is contained in:
Quintine committed 2026-09-27 19:29:50 +10:00
1 parent 361a1def43
commit 22a81c6f7a
10 files changed
+329 -6

No files matched your search

+12 -2
View File
@@ -2155,6 +2155,14 @@ export function GameTable({
using this power. Another faction may play Karama to cancel this
use.
</p>
{g.response.kind === 'eliteStrength' &&
g.nexusCards &&
g.players.some((player) => player.id === g.response?.owner && player.faction === 'emperor') && (
<p className="notice">
Every seat may respond before the Emperor’s Sardaukar strength is locked.
A private Emperor Nexus Betrayal may suppress it without moving starred forces.
</p>
)}
{g.response.kind === 'revivalIncome' &&
g.response.amount !== undefined && (
<p className="notice">
@@ -2205,8 +2213,10 @@ export function GameTable({
: 'Cancel with Karama'}
</Button>
))}
{g.responseControls?.cancelCards.length &&
!g.responseControls.hasPassed ? (
{(g.responseControls?.cancelCards.length ||
(g.response.kind === 'eliteStrength' && g.nexusCards &&
g.players.some((player) => player.id === g.response?.owner && player.faction === 'emperor'))) &&
!g.responseControls?.hasPassed ? (
actionButton('Allow this power', { type: 'passResponse' })
) : (
<p className="muted">
+13
View File
@@ -145,6 +145,19 @@ export function NexusCards({ game, act, busy }: { game: GameView; act: (action:
)}
</div>
)}
{game.nexusEmperorBetrayal && offer.card === 'emperor' && (
<div aria-label="Emperor Nexus Betrayal" className="space-y-2">
<h4>Emperor Betrayal · Sardaukar</h4>
<p className="fine">
Spend your Nexus card during this battle response to prevent the Emperor’s
Sardaukar strength advantage. Its starred forces remain physical Sardaukar.
</p>
<Button className="game-action min-h-11 whitespace-normal" disabled={busy}
onClick={() => act({ type: 'nexusEmperorBetrayal', event: game.nexusEmperorBetrayal!.event })}>
Suppress Sardaukar with Betrayal
</Button>
</div>
)}
<NexusEmperorSecretAlly game={game} act={act} busy={busy} />
<NexusFremenRevival game={game} act={act} busy={busy} />
<div aria-label="Your private Nexus card" className="max-w-xl">