97 lines
6.3 KiB
TypeScript
97 lines
6.3 KiB
TypeScript
import type { FactionId } from './catalog';
|
||
import type { NexusCardMode } from './nexus-cards';
|
||
|
||
/** Faithful English rules summaries of all 36 original printed panels, rather
|
||
* than the changed effects in tournament compilations. See NEXUS_CARD_RULES.md.
|
||
* Reference availability does not enable an effect in the runtime. */
|
||
export type NexusCardReference = {
|
||
faction: FactionId;
|
||
betrayal: string;
|
||
cunning: string;
|
||
secretAlly: string;
|
||
};
|
||
export const NEXUS_PANEL_NAMES: Record<NexusCardMode, string> = {
|
||
betrayal: 'Betrayal', cunning: 'Cunning', secretAlly: 'Secret Ally',
|
||
};
|
||
export const NEXUS_CARD_SOURCE = 'https://boardgamegeek.com/image/7767032/dune-ecaz-and-moritani';
|
||
export const NEXUS_CARD_REFERENCE: readonly NexusCardReference[] = [
|
||
{
|
||
faction: 'atreides',
|
||
betrayal: 'Stop Atreides from inspecting one element of a Battle Plan with their battle advantage.',
|
||
cunning: 'Require your battle opponent to disclose a second element of their Battle Plan.',
|
||
secretAlly: 'In your battle, inspect one opposing Battle Plan element of your choice: leader, weapon, defense or number dialed.',
|
||
},
|
||
{
|
||
faction: 'beneGesserit',
|
||
betrayal: 'Prevent the Bene Gesserit from using Voice.',
|
||
cunning: 'During your Shipment and Movement turn, you may convert any selected groups of advisors into fighters. Every territory must finish with all your forces in the same stance.',
|
||
secretAlly: 'In your battle, use Voice to require or forbid a Treachery Card in your opponent’s plan.',
|
||
},
|
||
{
|
||
faction: 'emperor',
|
||
betrayal: 'During Bidding, require Emperor to pay for the ally’s Treachery purchase, covering at least the necessary spice. Alternatively, while Battle Plans are being made, suppress Emperor’s Sardaukar advantage.',
|
||
cunning: 'Before making your Battle Plan, you may treat five of your forces as Sardaukar if you have no Sardaukar in that battle.',
|
||
secretAlly: 'On a Treachery purchase, retain your spice after showing that you hold the required amount. Alternatively, during Revival, revive three extra forces free beyond the revival limit.',
|
||
},
|
||
{
|
||
faction: 'fremen',
|
||
betrayal: 'Stop Fremen worm riding for this turn, or prevent their two-territory movement during Shipment and Movement.',
|
||
cunning: 'When a sandworm appears in a territory containing no forces, your forces from one desert territory may ride to any territory, respecting storm and occupancy restrictions.',
|
||
secretAlly: 'Avoid losing your forces to a sandworm, or revive three forces free during Revival.',
|
||
},
|
||
{
|
||
faction: 'harkonnen',
|
||
betrayal: 'Cancel a revealed Harkonnen traitor and shuffle that card into the Traitor Deck. Harkonnen draws a replacement during Mentat Pause.',
|
||
cunning: 'At any time, draw a Traitor Card into your hand, then choose one of your held Traitor Cards and shuffle it into the Traitor Deck.',
|
||
secretAlly: 'During Mentat Pause, draw two Traitor Cards into your hand, then choose two held Traitor Cards and shuffle them into the Traitor Deck.',
|
||
},
|
||
{
|
||
faction: 'guild',
|
||
betrayal: 'Take one whole shipment payment otherwise going to the Spacing Guild or Spice Bank, including your own payment. This overrides the income of a faction occupying Junction.',
|
||
cunning: 'Immediately after your Shipment and Movement, make a second shipment. Its forces cannot move unless you play Hajr.',
|
||
secretAlly: 'Use Guild shipping prices. Your shipping action may instead cross-ship on the planet or return forces to your reserves.',
|
||
},
|
||
{
|
||
faction: 'ixians',
|
||
betrayal: 'Prevent either the Ixian Bidding advantage or the Technology advantage. This card cannot prevent both.',
|
||
cunning: 'Before making your Battle Plan, you may give all your Suboids full strength without spice support in every battle for the rest of this turn.',
|
||
secretAlly: 'Discard a Treachery Card you have just purchased during Bidding, then draw the next Treachery deck card.',
|
||
},
|
||
{
|
||
faction: 'tleilaxu',
|
||
betrayal: 'Cancel a revealed Face Dancer. That card stays revealed until Tleilaxu has revealed every Face Dancer.',
|
||
cunning: 'Set your revealed Face Dancers aside and secretly draw replacements. Then shuffle the set-aside cards into the Traitor Deck.',
|
||
secretAlly: 'During Revival, revive one of your leaders free and up to five of your forces for one spice each.',
|
||
},
|
||
{
|
||
faction: 'choam',
|
||
betrayal: 'Make CHOAM discard a random card from its hand without receiving spice for that discard.',
|
||
cunning: 'Discard any Treachery Card to obtain a Worthless Card special effect of your choice.',
|
||
secretAlly: 'During Spice Collection, discard a Worthless Card for two spice. Alternatively, after winning a battle, inspect a random card in your opponent’s hand that was not used in that battle.',
|
||
},
|
||
{
|
||
faction: 'richese',
|
||
betrayal: 'Stop Richese from buying a Richese Treachery Card: discard that card without payment. Alternatively, send the payment for a card Richese sells to the Spice Bank instead.',
|
||
cunning: 'Use two No-Field tokens in a single shipment, still charged as one force. Immediately reveal one token and place it in front of your shield.',
|
||
secretAlly: 'Instead of normal shipping, send up to five forces from reserves for the shipping price of one force.',
|
||
},
|
||
{
|
||
faction: 'ecaz',
|
||
betrayal: 'Before Shipment and Movement, choose a territory shared by Ecaz and its ally. Require the ally to return its forces from that territory to reserves.',
|
||
cunning: 'Take Duke Vidal for this turn, including from capture, the Tanks or Ghola custody, overriding Moritani. Set him aside normally at the end of the turn.',
|
||
secretAlly: 'Require one player to disclose whether any of your leaders are among their traitors, without identifying which leaders.',
|
||
},
|
||
{
|
||
faction: 'moritani',
|
||
betrayal: 'Return a Terror token from the board to Moritani without revealing it.',
|
||
cunning: 'When placing a Terror token, you may choose any Arrakis territory, including one that already has a Terror token.',
|
||
secretAlly: 'After losing a battle that has a winner, keep one Treachery Card you played which you could have kept if you had won.',
|
||
},
|
||
];
|
||
|
||
export function nexusCardReference(id: FactionId): NexusCardReference {
|
||
const card = NEXUS_CARD_REFERENCE.find((candidate) => candidate.faction === id);
|
||
if (!card) throw new Error('Unknown Nexus reference card.');
|
||
return card;
|
||
}
|