Connect printed Diplomat defenses and Ecaz Tanked Duke Cunning
This commit is contained in:
1 parent
039fe4e87f
commit
be8703dc51
17 files changed
+811
-182
No files matched your search
@@ -1,7 +1,8 @@
|
||||
'use client';
|
||||
|
||||
import type { Action, GameView } from '@/game/engine';
|
||||
import { battleCardLabel } from '@/game/battle-cards';
|
||||
import { isPortableSnooper } from '@/game/battle-cards';
|
||||
import { copiedDefenseKind, diplomatDefenseLabel } from '@/game/diplomat-defense';
|
||||
import { Button } from './ui/button';
|
||||
|
||||
export function DiplomatDefense({
|
||||
@@ -20,7 +21,16 @@ export function DiplomatDefense({
|
||||
const visibleCards = [...(game.battle?.cards ?? []), ...(me?.hand ?? [])];
|
||||
const card = (id: string) => visibleCards.find((entry) => entry.id === id);
|
||||
const source = card(decision.source);
|
||||
const copiedDefense = source ? battleCardLabel(source.kind) : 'defense';
|
||||
const copiedKind =
|
||||
game.battle?.diplomatDefense?.kind ?? copiedDefenseKind(source);
|
||||
const copiedDefense = copiedKind
|
||||
? diplomatDefenseLabel(copiedKind)
|
||||
: 'defense';
|
||||
const interpretedRole =
|
||||
copiedKind === 'shieldSnooper' ||
|
||||
copiedKind === 'weirdingWay' ||
|
||||
copiedKind === 'chemistry' ||
|
||||
isPortableSnooper(source);
|
||||
return (
|
||||
<div className="flex flex-col gap-3" aria-label="Diplomat defense choice">
|
||||
<p>
|
||||
@@ -34,6 +44,13 @@ export function DiplomatDefense({
|
||||
must be discarded after this battle. Decline to proceed without a copied
|
||||
defense.
|
||||
</p>
|
||||
{interpretedRole && (
|
||||
<p className="fine" data-copied-role-interpretation="true">
|
||||
First-version interpretation: copy the defense role already used by
|
||||
the opponent, not its activation, late-play opportunity or requirement
|
||||
for another card in your own plan.
|
||||
</p>
|
||||
)}
|
||||
{decision.cards.map((id) => (
|
||||
<Button
|
||||
key={id}
|
||||
|
||||
@@ -16,8 +16,8 @@ export function NexusEcazDuke({ game, act, busy }: Props) {
|
||||
<section aria-label="Your Ecaz Nexus Duke Cunning" className="space-y-3 rounded-lg border border-[#a88b60]/50 p-3">
|
||||
<h3>Ecaz Nexus · Cunning · Duke Prad Vidal</h3>
|
||||
<p>Current public controller: {offer.dukeController ? controller?.name ?? 'another player' : 'none'}.</p>
|
||||
<p>Spend and discard your physical Ecaz Nexus card to take the living, uncaptured, non-Ghola Duke for this turn, even from Moritani. If unused, this temporary control expires at turn end; using him in battle consumes the shared Duke.</p>
|
||||
<p className="fine">The printed Tanks revival, capture, and Ghola effects are not supported by this Cunning action.</p>
|
||||
<p>Spend and discard your physical Ecaz Nexus card to take the uncaptured, non-Ghola Duke for this turn, even from Moritani or the Tanks. A Tanked acquisition revives the same shared disc without a separate paid revival and preserves his death history. If unused, this temporary control expires at turn end; using him in battle sets the shared Duke aside.</p>
|
||||
<p className="fine">This independent resurrection clears his prior battle-use stamp and permits a new battle use. Taking a living Duke does not clear a battle-use stamp. That use composition is provisional; capture and Ghola acquisition/return destinations remain unsupported, as does Duke battle use with Advanced Harkonnen.</p>
|
||||
{offer.blocked && <p className="notice">{offer.blocked}</p>}
|
||||
<Button className="game-action min-h-11 whitespace-normal" disabled={busy || !action}
|
||||
onClick={() => { if (!busy && action) act(action); }}>
|
||||
|
||||
Reference in new issue
Block a user