Compose native Advanced Moritani skills with skill-first assassination

This commit is contained in:
Quintine committed 2026-10-03 15:34:12 +10:00
1 parent cb1f81977e
commit d41a7e03a9
18 files changed
+1122 -88

No files matched your search

+4 -4
View File
@@ -9,7 +9,7 @@ export type MoritaniAssassinateReceipt = {
opponent: string;
faction: FactionId;
opposingLeader: string;
stage: 'choice' | 'declined' | 'revealed' | 'replaced';
stage: 'skills' | 'choice' | 'declined' | 'revealed' | 'replaced';
card: string | null;
bounty: number;
replacement: string | null;
@@ -211,17 +211,17 @@ export function validateMoritaniAssassinate(
(index === 0 || r.turn >= state.opportunities[index - 1].turn) &&
identifier(r.opposingLeader) &&
!!printed(r.faction, r.opposingLeader) &&
['choice', 'declined', 'revealed', 'replaced'].includes(r.stage) &&
['skills', 'choice', 'declined', 'revealed', 'replaced'].includes(r.stage) &&
r.signature === moritaniAssassinateSignature(r),
'Assassinate has a changed, duplicated or malformed battle opportunity.',
);
events.add(r.event);
if (r.stage === 'choice' || r.stage === 'declined') {
if (r.stage === 'skills' || r.stage === 'choice' || r.stage === 'declined') {
requireAssassinate(
r.card === null &&
r.bounty === 0 &&
r.replacement === null &&
(r.stage !== 'choice' ||
((r.stage !== 'skills' && r.stage !== 'choice') ||
(index === state.opportunities.length - 1 &&
(!custody || r.turn === custody.turn))),
'An unspent Assassinate choice cannot contain a reveal, bounty or replacement.',