Allow Tleilaxu revival prevention for Low Homeworlds

This commit is contained in:
Quintine committed 2026-10-25 20:08:43 +11:00
1 parent 5bcf5bab48
commit ce676f0e54
13 files changed
+501 -46

No files matched your search

+1 -7
View File
@@ -154,7 +154,6 @@ import { GuildAmbassadorMarkerError, markerDestinations, markerOwner, quoteGuild
type GuildAmbassadorMarker, type GuildAmbassadorMarkerQuote } from './guild-ambassador-no-field';
import {
homeworldLowBonus,
homeworldRevivalKaramaBlock,
homeworldSardaukarFreeSupport,
homeworldSardaukarGholaBlock,
snapshotHomeworldRevival,
@@ -32160,8 +32159,6 @@ function tleilaxuSpecialKaramaQuote(g: Game, p: Player) {
(g.pendingRevival && !ownStop) || g.phaseOpening || g.pendingKarama ||
g.choamMarket || g.pendingTreacheryDiscard || g.pendingNullentropy || g.pendingKull
? 'Resolve the current response, decision or card effect before declaring revival prevention.' : null,
targetBlocks: Object.fromEntries(g.players.map(player =>
[player.id, homeworldRevivalKaramaBlock(g, player.id)])),
});
}
function tleilaxuSpecialKaramaView(g: Game, p: Player) {
@@ -38367,10 +38364,7 @@ export function viewGame(state: Game, id: string) {
),
revival: {
pending: !!g.pendingRevival,
specialKaramaBlock:
g.decision?.kind === 'revivalStop'
? homeworldRevivalKaramaBlock(g, g.decision.recipient)
: null,
specialKaramaBlock: null,
leaders: leaderRevivals.leaders,
kwisatz: leaderRevivals.kwisatz,
...(leaderRevivals.auditorCyclePolicy ? { auditorCyclePolicy: leaderRevivals.auditorCyclePolicy } : {}),
-11
View File
@@ -37,17 +37,6 @@ export function homeworldLowBonus(
: 0;
}
/** Keep the unresolved special-Karama overlap consistent in validation and
* the public controls. This is a release boundary, not a rules exception. */
export function homeworldRevivalKaramaBlock(
context: HomeworldBenefitContext,
target: string,
): string | null {
return homeworldLowBonus(context, target)
? 'Special Karama against a low-population Homeworld awaits the revival-overlap ruling.'
: null;
}
/** Salusa's threshold counts Sardaukar at Salusa, not all Imperial reserves.
* Its high advantage affects the faction's Sardaukar wherever they fight. */
export function homeworldSardaukarFreeSupport(
+2 -2
View File
@@ -3824,13 +3824,13 @@ export const RULE_TOPICS: RuleTopic[] = [
'Resume any interrupted spice draw, fresh-blow window or worm response after the summoned worm resolves. Its Nexus occurs at the end of the blow, followed by eligible Fremen rides. During an open Nexus, the new ride joins the existing queue. Destroyed fresh spice cannot later be doubled by Harvester.',
'During a quiet Revival boundary, Tleilaxu may spend its once-per-game special Karama to select any one player, including itself, an ally or a ready faction. It also retains the original decision before another faction’s normal revival completes, independently of card holdings. Declining that decision continues the original return and preserves later quiet use. A pending decision can select only its original recipient.',
'Prevention stops further force and leader returns in this Revival, including negotiated leaders, KH and Emperor-funded extra forces. It does not undo completed returns, payments or used allowances. A stopped pending request spends no spice or revival quota. Hidden leader identities and negotiated prices remain outside the public decision. Emperor’s special Karama is immune.',
'Provisional scope includes Ghola Treachery returns during the affected Revival and ends when that phase ends; Ghola is available afterward. This composes the revised prevention wording with Ghola’s free-return rule, rather than quoting a combined publisher ruling. Low-population Homeworld overlap retains its existing guard. Full expansion and combination acceptance remains open.',
'Provisional scope includes Ghola Treachery returns during the affected Revival and ends when that phase ends; Ghola is available afterward. This composes the revised prevention wording with Ghola’s free-return rule, rather than quoting a combined publisher ruling. Low Homeworlds provisionally retain their printed free rate while the whole qualifying return is prevented; no independent bonus-only return is created. Full expansion and combination acceptance remains open.',
'CHOAM cash-in, Richese acquisition and Ixian HMS relocation also have connected special-use paths. Ecaz’s supplied p30 unarmed disc difference and Moritani’s supplied p35 post-loss winner-card disposal now have owned controls and native cost/once-use, with explicit provisional numeric/disposal interpretations. Advanced preview remains six-classic only; broader timing and combinations are not certified.',
'Richese’s special purchase is available in development tables: spend a Karama and three spice to choose privately from the cache, with separate Emperor income and explicit full-hand/final-cache guards. See its acquisition guide for current controls and limits.',
'See Ecaz special Karama and Moritani special Karama for their source-bound first versions. Their declarations do not create a normal faction-cancellation window; existing Kull/BG handling remains in the shared special-intent pipeline.',
],
checklist: [
{ area: 'Implementation', status: 'Partial', detail: 'Tleilaxu proactive Revival is prototyped: quiet any-player selection and original target-bound interruption share current physical-cost validation; completed returns stay intact. Ghola inclusion and phase expiry are provisional; Emperor special immunity and the low-Homeworld overlap guard remain.', evidence: ['game/tleilaxu-special-karama.ts', 'game/engine.ts', 'game/card-availability.ts', 'game/revival.ts'] },
{ area: 'Implementation', status: 'Partial', detail: 'Tleilaxu proactive Revival is prototyped: quiet any-player selection and original target-bound interruption share current physical-cost validation; completed returns stay intact. Ghola inclusion and phase expiry are provisional; Emperor special immunity remains. Low Homeworld target eligibility now follows explicit event prevention while leaving its printed rate intact.', evidence: ['game/tleilaxu-special-karama.ts', 'game/engine.ts', 'game/card-availability.ts', 'game/revival.ts', 'tests/fixture-homeworld-revival-prevention.ts', 'tests/homeworld-revival-prevention-runtime.test.ts', 'docs/HOMEWORLD_BENEFITS_RULES.md'] },
{ area: 'Player controls', status: 'Partial', detail: 'Native Advanced owner has persistent card/target controls before a request and in the pending decision, including self, ally, ready and prior-return choices. Enclosing priorities and target restrictions retain readable reasons.', evidence: ['components/tleilaxu-special-karama.tsx', 'components/game-table.tsx', 'tests/tleilaxu-special-karama-controls.test.tsx'] },
{ area: 'AI', status: 'Partial', detail: 'Four existing profiles reuse public-Tanks thresholds through the shared current quote; no strategic refinement or difficulty calibration.', evidence: ['game/bots.ts', 'tests/tleilaxu-special-karama-window.test.ts', 'tests/ghola-bots.test.ts'] },
{ area: 'Documentation', status: 'Partial', detail: 'Proactive source cutover, provisional Ghola/phase scope, printed Special Karama immunity and remaining Homeworld/combination limits are explicit.', evidence: ['docs/TLEILAXU_SPECIAL_KARAMA.md', 'docs/RULE_DECISIONS.md'] },