@alpaca-software/40kdc-data 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gen-conformance.js +63 -0
- package/dist/gen-conformance.js.map +1 -1
- package/dist/translate/condition.d.ts.map +1 -1
- package/dist/translate/condition.js +13 -6
- package/dist/translate/condition.js.map +1 -1
- package/dist/translate/effect.d.ts.map +1 -1
- package/dist/translate/effect.js +36 -13
- package/dist/translate/effect.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect.js","sourceRoot":"","sources":["../../src/translate/effect.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Humanize an Ability-DSL `effect` tree into natural English — the\n * `ability.print()` of the dataset. Output is an *approximation* generated\n * purely from the structured data (no external rules text): subject-first,\n * GW-datasheet voice, with scope range + duration woven into the sentence and\n * single-leaf conditionals inlined. ASCII-only. It is pinned byte-for-byte\n * across the TS / Rust / Python ports by the `conformance/effect-translation`\n * corpus, so any phrasing change here is a semantic corpus change (bump\n * `conformance/SPEC_VERSION`).\n *\n * Container nodes (`sequence`, `choice`, `dice-gated`, `dice-pool-allocation`,\n * and a `conditional` wrapping a container) render block-style with two-space\n * indentation; a `conditional` wrapping a single leaf inlines to one sentence.\n * Unknown leaf types degrade to a deterministic bracketed form (`[the-type]`).\n */\n\nimport { describeCondition, describeTiming, eventClause, dekebab, type Condition } from \"./condition.js\";\n\n/**\n * Minimal structural view of an effect node. Matches the ability-dsl effect\n * schema: a single effect carries `type` + `target` + `modifier`; containers\n * carry their own shape (`steps`, `options`, `condition`/`effect`, dice\n * fields).\n */\nexport interface Effect {\n type?: string;\n target?: string;\n modifier?: Record<string, unknown>;\n condition?: Condition;\n effect?: Effect;\n steps?: Effect[];\n options?: (Effect & {\n name?: string;\n // single dice-requirement or an `any_of` set; read structurally by describeRequirement.\n requirement?: unknown;\n })[];\n choice_label?: string;\n dice?: string;\n threshold?: number | string;\n comparison?: string;\n on_success?: Effect | null;\n on_fail?: Effect | null;\n pool?: { count: number; die: string };\n max_activations?: number;\n selector?: { max_count?: number; keywords?: string[]; owner?: string };\n scaling?: {\n per?: number;\n of?: string;\n within_inches?: number;\n round?: string;\n max_value?: number;\n };\n // designate-target\n designation?: string;\n select?: string | { scope?: string; count?: number; timing?: string };\n applies?: { to?: string; effect?: Effect };\n duration?: string;\n // stance-select\n mode?: string;\n scope?: string;\n // risk-reward\n reward?: Effect;\n risk?: { test?: string; on_fail?: Effect };\n // issue-orders\n count?: number;\n range?: number;\n eligible?: { keyword?: string };\n}\n\n/** Ability scope, as carried on enrichment ability entries. */\nexport interface AbilityScope {\n range?: string;\n duration?: string;\n range_inches?: number;\n}\n\n/** Curated keyword filter naming which units an ability benefits. */\nexport interface AbilityAppliesTo {\n required_keywords?: string[];\n excluded_keywords?: string[];\n}\n\n/** Usage-limit block (how often the ability may be used). */\nexport interface AbilityUsage {\n frequency?: string;\n count?: number;\n per?: string;\n}\n\n/** Reactive-trigger block: the event the ability fires on + structured guards. */\nexport interface AbilityTrigger {\n event?: string;\n subject?: string;\n proximity?: { of?: string; range?: number };\n /** Restricts a move event (e.g. enemy-unit-ended-move) to these move kinds. */\n move_types?: string[];\n condition?: Condition;\n optional?: boolean;\n cost?: { cp?: number };\n window?: string;\n}\n\n/** A trigger is one object, or an array (the ability fires on ANY listed trigger). */\nexport type AbilityTriggerSpec = AbilityTrigger | AbilityTrigger[];\n\n/** Normalize the polymorphic trigger field to a flat list (empty when absent). */\nfunction normalizeTriggers(t?: AbilityTriggerSpec | null): AbilityTrigger[] {\n if (t == null) return [];\n return Array.isArray(t) ? t : [t];\n}\n\n/** Minimal ability view for `describeAbility`. */\nexport interface AbilityLike {\n name?: string;\n effect?: Effect;\n scope?: AbilityScope;\n trigger?: AbilityTriggerSpec | null;\n usage?: AbilityUsage | null;\n applies_to?: AbilityAppliesTo | null;\n}\n\n/** Rendering context threaded down from the ability (scope info the leaf needs). */\ninterface Ctx {\n /** Aura/blast radius in inches, for `*-within-aura` targets and within-range effects. */\n rangeInches?: number;\n /** True when the ability scope is `engagement-range`, so within-aura subjects read \"within Engagement Range\". */\n engagementRange?: boolean;\n /**\n * The raw scope range slug, for the non-radius scopes (`any-visible`,\n * `any-on-battlefield`) whose within-aura subjects have a real extent the\n * generic \" nearby\" fallback would drop.\n */\n scopeRange?: string;\n}\n\nconst CONTAINER_TYPES = new Set([\n \"sequence\",\n \"choice\",\n \"dice-gated\",\n \"dice-pool-allocation\",\n \"select-units\",\n \"designate-target\",\n \"stance-select\",\n \"risk-reward\",\n \"issue-orders\",\n]);\n\n/** \"up to 3 friendly Orks Vehicle units\" — the `select-units` selector phrase. */\nfunction selectUnitsSubject(sel: Record<string, unknown> = {}): string {\n const kw = ((sel.keywords as unknown[]) ?? []).map((k) => titleCase(jstr(k))).join(\" \");\n const noun = sel.max_count === 1 ? \"unit\" : \"units\";\n return `up to ${jstr(sel.max_count)} ${jstr(sel.owner)}${kw ? ` ${kw}` : \"\"} ${noun}`;\n}\n\n/** JS-template stringification (numbers print without trailing `.0`). */\nfunction jstr(v: unknown): string {\n if (v == null) return \"?\";\n if (Array.isArray(v)) return v.map(jstr).join(\", \");\n return String(v);\n}\n\n/** Uppercase the first character (idempotent; leaves the rest untouched). */\nfunction capitalize(s: string): string {\n return s.length === 0 ? s : s[0].toUpperCase() + s.slice(1);\n}\n\n/** Small words kept lowercase mid-phrase in Title Case (`Benefit of Cover`, not `Benefit Of Cover`). */\nconst TITLE_SMALL = new Set([\"of\", \"or\", \"and\", \"the\", \"a\", \"an\", \"to\", \"in\", \"on\", \"for\", \"with\"]);\n\n/**\n * Curated display labels for granted-ability ids whose Title-Cased slug reads\n * wrong. The slug encodes the mechanic (`charge-after-advance`); the label is\n * the published name players know (`Advance & Charge`). Applied only to the\n * ability-grant describer — keyed on the resolved grant (`grant_type ??\n * ability_id`); ids absent here fall back to {@link titleCase}.\n */\nconst ABILITY_GRANT_LABELS: Record<string, string> = {\n \"charge-after-advance\": \"Advance & Charge\",\n \"charge-after-fallback\": \"Fall Back & Charge\",\n \"charge-after-disembark\": \"Charge After Disembarking\",\n \"nurgle-s-gift-aura\": \"Nurgle's Gift (Aura)\",\n};\n\n/** The display label for a granted ability id: a curated override, else Title Case. */\nfunction grantLabel(id: string): string {\n return ABILITY_GRANT_LABELS[id] ?? titleCase(id);\n}\n\n/**\n * \"(your Suppressed target)\" — a designate-target mark's parenthetical. A\n * designation slug that already ends in \"target\" keeps its own noun\n * (\"bio-stimulus-target\" → \"(your Bio Stimulus Target)\", not \"… Target target\").\n */\nfunction designationLabel(designation: unknown): string {\n const label = titleCase(jstr(designation));\n return /\\bTarget$/.test(label) ? ` (your ${label})` : ` (your ${label} target)`;\n}\n\n/** kebab/space token → Title Case (`deep-strike` → `Deep Strike`, `shoot-and-scoot` → `Shoot and Scoot`). */\nfunction titleCase(s: string): string {\n return dekebab(s)\n .split(\" \")\n .map((w, i) => {\n if (w.length === 0) return w;\n if (i > 0 && TITLE_SMALL.has(w.toLowerCase())) return w.toLowerCase();\n return w[0].toUpperCase() + w.slice(1);\n })\n .join(\" \");\n}\n\n/**\n * A GW weapon keyword token → bracketed caps (`lethal-hits` → `[LETHAL HITS]`).\n * Anti-X keywords keep their hyphen and normalize the threshold to `N+`\n * (`anti-titanic-3plus` / `anti-monster 4+` → `[ANTI-TITANIC 3+]` / `[ANTI-MONSTER 4+]`).\n */\nfunction bracketKeyword(k: unknown): string {\n const raw = jstr(k).trim();\n const anti = /^anti[\\s-]+(.*)$/i.exec(raw);\n if (anti) {\n const m = /^(.*?)[\\s-]*(\\d+)\\s*(?:\\+|plus)?$/i.exec(anti[1]);\n if (m) return `[ANTI-${dekebab(m[1]).trim().toUpperCase()} ${m[2]}+]`;\n return `[ANTI-${dekebab(anti[1]).trim().toUpperCase()}]`;\n }\n return `[${dekebab(raw).toUpperCase()}]`;\n}\n\n/** Dice tokens print with a capital `D` (`d3` → `D3`, `2d6` → `2D6`). */\nfunction diceCase(v: unknown): string {\n return jstr(v).replace(/d/gi, \"D\");\n}\n\n/** A leadership/escape test token → GW name (`battle-shock` → `Battle-shock`). */\nconst TEST_NAMES: Record<string, string> = {\n \"battle-shock\": \"Battle-shock\",\n \"desperate-escape\": \"Desperate Escape\",\n};\nfunction testName(test: unknown): string {\n const t = jstr(test);\n return TEST_NAMES[t] ?? titleCase(t);\n}\n\n/** Does a subject noun phrase take a plural verb? (`enemy units within 6\"`, `all friendly units`). */\nfunction isPlural(subj: string): boolean {\n return / units\\b/.test(subj) || /^all /.test(subj) || /^(enemy|friendly) units/.test(subj);\n}\n\n/** Subject-verb agreement: pick the plural form of a present-tense verb when the subject is plural. */\nconst PLURAL_VERBS: Record<string, string> = {\n has: \"have\",\n is: \"are\",\n gets: \"get\",\n gains: \"gain\",\n suffers: \"suffer\",\n retains: \"retain\",\n makes: \"make\",\n passes: \"pass\",\n fails: \"fail\",\n treats: \"treat\",\n};\nfunction v(subj: string, singular: string): string {\n if (!isPlural(subj)) return singular;\n return PLURAL_VERBS[singular] ?? singular.replace(/s$/, \"\");\n}\n\n/** Full characteristic name for a stat token (`Sv` → `Save`). */\nconst STAT_NAMES: Record<string, string> = {\n M: \"Move\",\n T: \"Toughness\",\n Sv: \"Save\",\n W: \"Wounds\",\n A: \"Attacks\",\n Ld: \"Leadership\",\n OC: \"Objective Control\",\n S: \"Strength\",\n WS: \"Weapon Skill\",\n BS: \"Ballistic Skill\",\n AP: \"Armour Penetration\",\n D: \"Damage\",\n Range: \"Range\",\n};\n\nfunction statName(stat: unknown): string {\n const s = jstr(stat);\n return STAT_NAMES[s] ?? titleCase(s);\n}\n\n/** Resource-pool token → display name (`cp` → `CP`, otherwise Title Case). */\nfunction poolName(pool: unknown): string {\n const p = jstr(pool);\n return p.toLowerCase() === \"cp\" ? \"CP\" : titleCase(p);\n}\n\n/** Roll noun for a roll token (`hit` → `Hit`, `attacks-characteristic` → `Attacks characteristic`). */\n// Narrowed feel-no-pain scopes -> trailing qualifier. Absent/`all` renders bare.\nconst FNP_SCOPES: Record<string, string> = {\n mortal: \" against mortal wounds\",\n psychic: \" against Psychic Attacks\",\n \"psychic-and-mortal\": \" against Psychic Attacks and mortal wounds\",\n};\n\nconst ROLL_NAMES: Record<string, string> = {\n hit: \"Hit\",\n wound: \"Wound\",\n charge: \"Charge\",\n damage: \"Damage\",\n advance: \"Advance\",\n save: \"Saving throw\",\n leadership: \"Leadership\",\n};\n\nfunction rollName(roll: unknown): string {\n const r = jstr(roll);\n return ROLL_NAMES[r] ?? titleCase(r);\n}\n\n/** `+1` / `-1` from an operation + value (a negative value flips the sign, so never `+-1`). */\nfunction signed(operation: unknown, value: unknown): string {\n const positive = operation === \"add\" || operation === \"improve\";\n let sign = positive ? 1 : -1;\n const n = Number(value);\n if (!Number.isNaN(n) && n < 0) {\n sign = -sign;\n value = Math.abs(n);\n }\n return `${sign > 0 ? \"+\" : \"-\"}${jstr(value)}`;\n}\n\n/**\n * Dice-pool success phrase → \"4+\", \"6\", \"3 or less\", etc. (for the per-die\n * threshold in a `mortal-wounds` dice pool — \"for each 4+, …\"). Unlike\n * {@link formatComparison} this carries no leading \"a\", because it follows\n * \"for each\".\n */\nfunction poolThreshold(comp: string, threshold: unknown): string {\n const th = jstr(threshold);\n switch (comp) {\n case \"lte\":\n return `${th} or less`;\n case \"gt\":\n return `more than ${th}`;\n case \"lt\":\n return `less than ${th}`;\n case \"eq\":\n return th;\n default: // gte\n return `${th}+`;\n }\n}\n\n/** Dice comparison → \"a 4+\", \"a 3 or less\", etc. (for dice-gated thresholds). */\nfunction formatComparison(comp: string, threshold: unknown): string {\n const th = jstr(threshold);\n switch (comp) {\n case \"gte\":\n return `a ${th}+`;\n case \"lte\":\n return `a ${th} or less`;\n case \"gt\":\n return `greater than ${th}`;\n case \"lt\":\n return `less than ${th}`;\n case \"eq\":\n return `exactly ${th}`;\n default:\n return `a ${th}+`;\n }\n}\n\n/**\n * Humanized subject for an effect `target`. Aura targets resolve their radius\n * from the ability scope (threaded via {@link Ctx}); everything else is a fixed\n * noun phrase in GW datasheet voice.\n */\nfunction subject(target: string | undefined, ctx: Ctx): string {\n const within =\n ctx.rangeInches != null\n ? ` within ${jstr(ctx.rangeInches)}\"`\n : ctx.engagementRange\n ? \" within Engagement Range\"\n : ctx.scopeRange === \"any-visible\"\n ? \" that are visible\"\n : ctx.scopeRange === \"any-on-battlefield\"\n ? \" anywhere on the battlefield\"\n : \" nearby\";\n switch (target) {\n case \"self\":\n case \"bearer\":\n return \"this model\";\n case \"unit\":\n return \"the unit\";\n case \"attached-unit\":\n return \"the unit this model leads\";\n case \"target\":\n return \"the target\";\n case \"attacker\":\n return \"the attacking unit\";\n case \"defender\":\n // The defending unit in an attack is the enemy from the bearer's view.\n return \"the target\";\n case \"all-friendly\":\n return \"all friendly units\";\n case \"all-enemy\":\n return \"all enemy units\";\n case \"friendly-within-aura\":\n return `friendly units${within}`;\n case \"enemy-within-aura\":\n return `enemy units${within}`;\n default:\n return \"the unit\";\n }\n}\n\n/** Possessive form of a subject noun phrase (`the unit` → `the unit's`). */\nfunction possessive(s: string): string {\n return s.endsWith(\"s\") ? `${s}'` : `${s}'s`;\n}\n\n/**\n * `<subj>'s <rest>` for a simple subject; `the <rest> of <subj>` when the subject\n * is a clause (an aura target ending in an inch mark), where a trailing possessive\n * reads as garbage (`friendly units within 6\"'s weapons`).\n */\nfunction ofOrPossessive(subj: string, rest: string): string {\n return subj.endsWith('\"') ? `the ${rest} of ${subj}` : `${possessive(subj)} ${rest}`;\n}\n\n/** Possessive pronoun agreeing with the subject (`its` / `their`). */\nfunction pronoun(subj: string): string {\n return isPlural(subj) ? \"their\" : \"its\";\n}\n\n/**\n * Duration → woven clause. `lead` sits at the very front of the sentence\n * (\"Once per battle, …\"); `trail` sits after the trigger/condition and before\n * the effect (\"…, until the end of the phase, …\"). `permanent` adds nothing.\n */\nfunction durationClauses(duration: string | undefined): { lead: string; trail: string } {\n switch (duration) {\n case \"phase\":\n return { lead: \"\", trail: \"until the end of the phase\" };\n case \"turn\":\n return { lead: \"\", trail: \"until the end of the turn\" };\n case \"battle\":\n return { lead: \"\", trail: \"for the rest of the battle\" };\n case \"battle-round\":\n return { lead: \"\", trail: \"until the end of the battle round\" };\n case \"until-next-command-phase\":\n return { lead: \"\", trail: \"until your next Command phase\" };\n case \"one-use\":\n return { lead: \"once per battle\", trail: \"\" };\n default: // permanent / absent\n return { lead: \"\", trail: \"\" };\n }\n}\n\n/** Reactive trigger → front-of-sentence lead clause (\"an enemy unit ends a move within 9\\\" of this model\"). */\nfunction describeTrigger(t: AbilityTrigger): string {\n let s = eventClause(t.event);\n // Narrow a move event to its move kinds: \"ends a move\" → \"ends a Normal,\n // Advance or Fall Back move\".\n if (t.move_types?.length) {\n const kinds = orList(t.move_types.map((mt) => (mt === \"fall-back\" ? \"Fall Back\" : capWord(mt))));\n s = s.replace(/\\bmove\\b/, `${kinds} move`);\n }\n if (t.proximity?.range != null) {\n const of =\n t.proximity.of === \"attached-unit\"\n ? \"the unit this model leads\"\n : t.proximity.of === \"self\" || t.proximity.of === \"bearer\"\n ? \"this model\"\n : \"this unit\";\n s += ` within ${jstr(t.proximity.range)}\" of ${of}`;\n }\n if (t.condition) s += `, if ${describeCondition(t.condition)}`;\n return s;\n}\n\n/** Usage limit → front-of-sentence lead clause (\"once per turn\", \"twice per battle per unit\"). */\nfunction usageClause(u: AbilityUsage): string {\n const n = Number(u.count ?? 1);\n let base: string;\n switch (u.frequency) {\n case \"once-per-turn\":\n base = \"once per turn\";\n break;\n case \"once-per-phase\":\n base = \"once per phase\";\n break;\n case \"once-per-command-phase\":\n base = \"once per Command phase\";\n break;\n case \"once-per-opponent-turn\":\n base = \"once per opponent's turn\";\n break;\n case \"first-this-battle\":\n base = \"the first time this battle\";\n break;\n case \"first-time-this-phase\":\n base = \"the first time this phase\";\n break;\n case \"n-per-battle\":\n base = n === 1 ? \"once per battle\" : n === 2 ? \"twice per battle\" : `${jstr(n)} times per battle`;\n break;\n default:\n base = dekebab(jstr(u.frequency));\n }\n return u.per != null ? `${base} per ${jstr(u.per)}` : base;\n}\n\n/** \"against a unit that is not a Monster or Vehicle\" from a run of excluded target keywords. */\nfunction negatedTargetKeywords(keywords: string[]): string {\n return `against a unit that is not a ${keywords.join(\" or \")}`;\n}\n\n/** Capitalize the first character and lowercase the rest (`MONSTER` -> `Monster`). */\nfunction capWord(s: string): string {\n return s.length === 0 ? s : s[0].toUpperCase() + s.slice(1).toLowerCase();\n}\n\n/**\n * The keyword of a `not`-wrapping-a-single-`target-has-keyword` operand, else\n * `null`. This is the aura-subject exclusion encoding (`not[target-has-keyword X]`),\n * distinct from the bare `{negated:true, type:\"target-has-keyword\"}` form.\n */\nfunction notWrappedTargetKeyword(op: Condition): string | null {\n if (op.operator !== \"not\" || !op.operands || op.operands.length !== 1) return null;\n const inner = op.operands[0];\n if (inner.type !== \"target-has-keyword\" || inner.negated) return null;\n return jstr((inner.parameters ?? {}).keyword);\n}\n\n/** \"(excluding Monster or Vehicle units)\" from a run of `not`-wrapped target-keyword exclusions. */\nfunction excludedTargetKeywords(keywords: string[]): string {\n return `(excluding ${keywords.map(capWord).join(\" or \")} units)`;\n}\n\n/**\n * Join the operands of an `and` lead-in. Two exclusion encodings collapse into a\n * single clause: a run of bare-negated `target-has-keyword` becomes \"against a\n * unit that is not a X or Y\" (attack-context voice), and a run of `not`-wrapped\n * `target-has-keyword` becomes \"(excluding X or Y units)\" (aura-subject voice,\n * matching the `applies_to` \"(excluding …)\" idiom). Either collapsed clause\n * attaches to the preceding clause with a space; all other operands join with \", \".\n */\nfunction joinAndLeadIns(operands: Condition[]): string {\n const parts: string[] = [];\n for (let i = 0; i < operands.length; ) {\n const op = operands[i];\n if (op.negated && op.type === \"target-has-keyword\") {\n const kws: string[] = [];\n while (i < operands.length && operands[i].negated && operands[i].type === \"target-has-keyword\") {\n kws.push(jstr((operands[i].parameters ?? {}).keyword));\n i++;\n }\n parts.push(negatedTargetKeywords(kws));\n continue;\n }\n if (notWrappedTargetKeyword(op) != null) {\n const kws: string[] = [];\n let kw: string | null;\n while (i < operands.length && (kw = notWrappedTargetKeyword(operands[i])) != null) {\n kws.push(kw);\n i++;\n }\n parts.push(excludedTargetKeywords(kws));\n continue;\n }\n parts.push(conditionLeadIn(op));\n i++;\n }\n return parts.reduce(\n (acc, part) =>\n acc === \"\"\n ? part\n : part.startsWith(\"against \") || part.startsWith(\"(excluding \")\n ? `${acc} ${part}`\n : `${acc}, ${part}`,\n \"\"\n );\n}\n\n/**\n * A condition rendered as a natural lead-in clause (lowercase-initial — the\n * caller capitalizes at the sentence boundary). Falls back to `if <condition>`\n * for shapes without a dedicated framing.\n */\nfunction conditionLeadIn(c: Condition): string {\n // Compound nodes recurse so each part reads in its natural framing.\n if (c.operator === \"and\" && c.operands) return joinAndLeadIns(c.operands);\n if (c.operator === \"or\" && c.operands) return c.operands.map(conditionLeadIn).join(\" or \");\n if (c.operator === \"not\" && c.operands)\n return `unless ${c.operands.map((o) => conditionLeadIn(o).replace(/^if /, \"\")).join(\" or \")}`;\n // Negated keyword gates read as an exclusion clause, not the generic \"if not …\".\n if (c.negated && c.type === \"target-has-keyword\")\n return negatedTargetKeywords([jstr((c.parameters ?? {}).keyword)]);\n if (c.negated && c.type === \"unit-has-keyword\")\n return `unless the unit has the ${jstr((c.parameters ?? {}).keyword)} keyword`;\n if (c.negated) return `if ${describeCondition(c)}`;\n\n const p = c.parameters ?? {};\n switch (c.type) {\n case \"phase-is\":\n return `during the ${titleCase(jstr(p.phase))} phase`;\n case \"is-attached\":\n return `after being attached to a ${p.keyword ? `${jstr(p.keyword)} ` : \"\"}unit`;\n case \"timing-is\":\n return describeTiming(p.timing);\n case \"player-turn-is\":\n return p.turn === \"your-turn\"\n ? \"in your turn\"\n : p.turn === \"opponent-turn\"\n ? \"in the opponent's turn\"\n : \"in either player's turn\";\n case \"model-is-leader\":\n return \"while this model leads a unit\";\n case \"charged-this-turn\":\n return \"if the unit charged this turn\";\n case \"advanced-this-turn\":\n return \"if the unit Advanced this turn\";\n case \"disembarked-from-transport\":\n return \"if the unit disembarked from a Transport this turn\";\n case \"faction-rule-active\":\n return `while the ${titleCase(jstr(p.rule))} is active`;\n case \"battle-round\": {\n const bMin = p.min != null ? Number(p.min) : undefined;\n const bMax = p.max != null ? Number(p.max) : undefined;\n const bOrd = (n: number): string =>\n [\"zeroth\", \"first\", \"second\", \"third\", \"fourth\", \"fifth\"][n] ?? `${n}th`;\n if (bMin != null && bMax != null)\n return bMin === bMax ? `during the ${bOrd(bMin)} battle round` : `during battle rounds ${bMin}-${bMax}`;\n if (bMin != null) return `from the ${bOrd(bMin)} battle round onward`;\n if (bMax != null) return `during the first ${bMax} battle rounds`;\n return \"during the battle round\";\n }\n case \"token-count-at-or-above\":\n return `while the unit has ${jstr(p.threshold)}+ ${poolName(p.pool_id)}`;\n case \"remained-stationary\":\n return \"if the unit Remained Stationary\";\n case \"target-has-keyword\":\n return `against ${jstr(p.keyword)} targets`;\n case \"unit-has-keyword\":\n return `if the unit has the ${jstr(p.keyword)} keyword`;\n case \"is-battle-shocked\":\n return \"while the unit is Battle-shocked\";\n case \"unit-below-half-strength\":\n return p.subject === \"target\"\n ? \"while the target unit is below half strength\"\n : \"while the unit is below half strength\";\n case \"unit-below-starting-strength\":\n return \"while the unit is below its starting strength\";\n case \"has-lost-wounds\":\n return \"while the model has lost wounds\";\n case \"attack-is-type\":\n if (p.comparison === \"strength-greater-than-toughness\")\n return \"when this attack's Strength is greater than the target's Toughness\";\n if (p.comparison != null) return `when ${dekebab(jstr(p.comparison))}`;\n return `while making ${jstr(p.attack_type)} attacks`;\n case \"destroyed-by-attack-type\":\n return p.attack_type === \"any\"\n ? \"when destroyed by any attack\"\n : `when destroyed by a ${jstr(p.attack_type)} attack`;\n case \"opponent-unit-within-range\": {\n let where: string;\n if (p.weapon_name != null) where = `range of ${dekebab(jstr(p.weapon_name))}`;\n else if (p.range_multiplier != null) where = \"half range of its ranged weapons\";\n else where = p.range === \"engagement\" ? \"engagement range\" : `${jstr(p.range)}\"`;\n return `while an enemy unit is within ${where}`;\n }\n case \"engagement-state\": {\n if (p.state == null) return \"while the unit is within Engagement Range\";\n const st = jstr(p.state);\n if (st === \"on-battlefield\") return \"while the unit is on the battlefield\";\n if (st === \"embarked\") return \"while the unit is embarked\";\n if (st === \"engaged\" || st === \"within-engagement-range\" || st === \"in-engagement-range\")\n return \"while the unit is within Engagement Range\";\n if (st === \"not-in-engagement-range\" || st === \"not-within-engagement-range\")\n return \"while the unit is not within Engagement Range\";\n return `while the unit is ${dekebab(st)}`;\n }\n case \"disposition-matches\": {\n const d = jstr(p.disposition);\n if (d === \"strategic-reserves\") return \"while the unit is in Strategic Reserves\";\n return `while the unit's disposition is ${dekebab(d)}`;\n }\n case \"fights-first\":\n return \"while the unit has the Fights First ability\";\n default:\n return `if ${describeCondition(c)}`;\n }\n}\n\n/** Humanized noun for a scaling `of` dimension (`enemy-models-in-range` → `enemy models`). */\nconst SCALE_OF: Record<string, string> = {\n \"enemy-models-in-range\": \"enemy models\",\n \"friendly-models-in-range\": \"friendly models\",\n \"models-in-bearer-unit\": \"models in this unit\",\n \"enemy-units-in-range\": \"enemy units\",\n \"wounds-lost\": \"wounds lost\",\n};\n\n/** A `scaling` block → trailing clause (\"for every 5 enemy models within 6\\\"\"). */\nfunction scalingClause(s: NonNullable<Effect[\"scaling\"]>): string {\n const ofText = SCALE_OF[jstr(s.of)] ?? dekebab(jstr(s.of));\n let c = `for every ${jstr(s.per)} ${ofText}`;\n if (s.within_inches != null) c += ` within ${jstr(s.within_inches)}\"`;\n if (s.round === \"up\") c += \" (rounding up)\";\n if (s.max_value != null) c += ` (to a maximum of ${jstr(s.max_value)})`;\n return c;\n}\n\n/** Movement-modifier passthrough enum → human phrase. */\nconst PASSTHROUGH_PHRASE: Record<string, string> = {\n \"non-titanic-models\": \"non-Titanic models\",\n \"friendly-vehicles\": \"friendly Vehicle models\",\n \"friendly-monsters\": \"friendly Monster models\",\n \"terrain-le-4\": 'terrain features 4\" or lower',\n \"tall-terrain\": 'terrain features over 4\"',\n \"all-terrain\": \"terrain features\",\n};\n\n/** Move-kind token → display noun (for `applies_to_moves`). */\nconst MOVE_NOUN: Record<string, string> = {\n normal: \"Normal\",\n advance: \"Advance\",\n \"fall-back\": \"Fall Back\",\n charge: \"Charge\",\n};\n\n/** Oxford-free conjunction list (\"a\", \"a and b\", \"a, b and c\"). */\nfunction andList(items: string[]): string {\n if (items.length <= 1) return items[0] ?? \"\";\n if (items.length === 2) return `${items[0]} and ${items[1]}`;\n return `${items.slice(0, -1).join(\", \")} and ${items[items.length - 1]}`;\n}\n\nfunction orList(items: string[]): string {\n if (items.length <= 1) return items[0] ?? \"\";\n if (items.length === 2) return `${items[0]} or ${items[1]}`;\n return `${items.slice(0, -1).join(\", \")} or ${items[items.length - 1]}`;\n}\n\n/** Trailing inches clause for a movement distance (int or dice string); \"\" when absent/zero. */\nfunction inchClause(dist: unknown): string {\n if (dist == null) return \"\";\n const s = diceCase(jstr(dist));\n return s === \"0\" ? \"\" : ` ${s}\"`;\n}\n\n/** Closed movement-modifier `modifier` → one lowercase-initial clause. */\nfunction movementClause(m: Record<string, unknown>, subj: string): string {\n const kind = m.move_type as string | undefined;\n const dist = m.distance;\n const inches = inchClause(dist);\n const ofUpTo = inches ? ` of up to${inches}` : \"\";\n const moveKinds = Array.isArray(m.applies_to_moves)\n ? andList((m.applies_to_moves as string[]).map((x) => MOVE_NOUN[x] ?? dekebab(x)))\n : null;\n\n // Pure traversal capability (no move kind): passthrough / vertical / ignore-vertical.\n if (kind == null) {\n const parts: string[] = [];\n if (Array.isArray(m.passthrough) && m.passthrough.length) {\n parts.push((m.passthrough as string[]).map((p) => PASSTHROUGH_PHRASE[p] ?? dekebab(p)).join(\" and \"));\n }\n let clause: string;\n if (parts.length) {\n const over = m.vertical_limit != null ? ` (up to ${jstr(m.vertical_limit)}\" high)` : \"\";\n clause = `${subj} can move over ${parts.join(\" and \")}${over} as though they were not there`;\n } else if (m.ignore_vertical) {\n clause = `${subj} ignores vertical distances when it moves`;\n } else {\n clause = `${subj} ${v(subj, \"has\")} a movement capability`;\n }\n if (m.excludes_keyword != null) clause += ` (excluding ${titleCase(jstr(m.excludes_keyword))} models)`;\n if (moveKinds) clause += `, during its ${moveKinds} moves`;\n return clause;\n }\n\n switch (kind) {\n case \"scout\":\n return `before the first battle round, ${subj} can make a Scout move${ofUpTo}`;\n case \"infiltrate\":\n return `${subj} ${v(subj, \"has\")} the Infiltrators ability`;\n case \"advance\":\n return `add ${diceCase(jstr(dist))} to ${ofOrPossessive(subj, \"Advance rolls\")}`;\n case \"pile-in\":\n return `${subj} can Pile In up to${inches || ' 3\"'}`;\n case \"consolidation\":\n return `${subj} can Consolidate up to${inches || ' 3\"'}`;\n case \"surge\":\n return `${subj} can make a Surge move${ofUpTo}`;\n case \"shoot-and-scoot\":\n return inches\n ? `${subj} can shoot and then make a Normal move${ofUpTo}`\n : `${subj} can Shoot and Scoot`;\n case \"reactive\": {\n const label = m.name != null ? ` (${jstr(m.name)})` : \"\";\n return `${subj} can make a Reactive move${ofUpTo}${label}`;\n }\n case \"redeploy\": {\n if (m.marker != null) {\n const mk = m.marker as Record<string, unknown>;\n if (mk.location != null) {\n const who = mk.unit_filter != null ? `${jstr(mk.unit_filter)} units` : \"units\";\n return `${who} can be set up on ${jstr(mk.location)}`;\n }\n const what = mk.affected != null ? jstr(mk.affected) : \"markers\";\n return `${what} can be repositioned${inches}`;\n }\n if (m.to_reserves) {\n const n = m.max_units != null ? `up to ${jstr(m.max_units)} units` : subj;\n return `${n} can be placed into Strategic Reserves`;\n }\n return `${subj} can be redeployed${inches}`;\n }\n case \"normal\":\n default: {\n const n = Number(dist);\n if (!Number.isNaN(n) && n < 0)\n return `${ofOrPossessive(subj, \"Move characteristic\")} is reduced by ${Math.abs(n)}\"`;\n if (moveKinds) return `add${inches} to ${ofOrPossessive(subj, `${moveKinds} moves`)}`;\n return `${subj} can make a Normal move${ofUpTo}`;\n }\n }\n}\n\n/** Generic aura `modifier` → one lowercase-initial clause. */\nfunction auraClause(e: Effect, m: Record<string, unknown>, ctx: Ctx): string {\n // Range-extension of a named aura (e.g. Gift of Poxes: contagion +3\").\n if (m.range_bonus != null) {\n const named = m.of != null ? `${titleCase(jstr(m.of))} ` : \"\";\n return `the range of this model's ${named}abilities is increased by ${jstr(m.range_bonus)}\"`;\n }\n const range = m.range;\n const rangeText = Array.isArray(range)\n ? `${(range as number[]).map((r) => `${r}\"`).join(\"/\")} (by battle round)`\n : range != null\n ? `${jstr(range)}\"`\n : null;\n const who = e.target === \"friendly-within-aura\" ? \"each friendly unit\" : \"each enemy unit\";\n const within = rangeText != null ? `${who} within ${rangeText}` : who;\n if (m.effect != null) {\n return `${within} ${describeEffectInline(m.effect as Effect, { ...ctx })}`;\n }\n return `${within} is affected`;\n}\n\n/**\n * Single-clause translation for leaf effects (lowercase-initial, no period),\n * with any `scaling` block woven on as a trailing \"for every …\" clause.\n */\nexport function describeEffectInline(e: Effect, ctx: Ctx = {}): string {\n const base = describeEffectInlineBase(e, ctx);\n return e.scaling ? `${base} ${scalingClause(e.scaling)}` : base;\n}\n\n/** Resurrection `placement` modifier → a \"where it is set up\" clause. */\nfunction resurrectionPlacement(placement: unknown): string {\n if (placement == null) return \"\";\n switch (jstr(placement)) {\n case \"deep-strike\":\n return \"using its Deep Strike ability\";\n case \"battlefield-edge\":\n return \"at a battlefield edge\";\n case \"closest-to-destruction\":\n return \"as close as possible to where it was destroyed\";\n case \"unengaged\":\n return \"not within Engagement Range of any enemy units\";\n default:\n return `via ${dekebab(jstr(placement))}`;\n }\n}\n\n/** Resurrection `timing` modifier → a \"when it is set up\" clause. */\nfunction resurrectionTiming(timing: unknown): string {\n if (timing == null) return \"\";\n switch (jstr(timing)) {\n case \"next-movement-phase\":\n return \"in your next Movement phase\";\n case \"end-of-phase\":\n return \"at the end of the phase\";\n default:\n return dekebab(jstr(timing));\n }\n}\n\n/** The leaf/container switch; {@link describeEffectInline} wraps it to append scaling. */\n/**\n * Render a dice-pool option requirement as a noun phrase: `pair of 4+`, or, for an\n * `any_of` set (a blessing that triggers on a double of X OR a triple of Y — World\n * Eaters Blessings of Khorne), the alternatives joined with \" or \":\n * `pair of 6+ or triple of 3+`. The single-requirement output is byte-identical to\n * the pre-`any_of` phrasing (no leading article) so existing goldens don't move.\n */\nfunction describeRequirement(req: unknown): string {\n const one = (r: { type?: unknown; min_value?: unknown } | undefined) =>\n `${jstr(r?.type)} of ${jstr(r?.min_value)}+`;\n const anyOf = (req as { any_of?: unknown } | undefined)?.any_of;\n if (Array.isArray(anyOf)) return anyOf.map(one).join(\" or \");\n return one(req as { type?: unknown; min_value?: unknown } | undefined);\n}\n\nfunction describeEffectInlineBase(e: Effect, ctx: Ctx = {}): string {\n const m = e.modifier ?? {};\n const subj = subject(e.target, ctx);\n\n switch (e.type) {\n case \"stat-modifier\": {\n const scope = m.attack_type ? ` (${jstr(m.attack_type)})` : \"\";\n if (m.stat == null) return `modify ${ofOrPossessive(subj, \"characteristics\")}${scope}`;\n if (m.operation === \"set\")\n return `modify ${ofOrPossessive(subj, `${statName(m.stat)} characteristic`)} to ${jstr(m.value)}${scope}`;\n let val = m.value;\n let verb = m.operation === \"subtract\" || m.operation === \"worsen\" ? \"subtract\" : \"add\";\n const n = Number(val); // a negative value flips the verb so we never say \"add -1\"\n if (!Number.isNaN(n) && n < 0) {\n verb = verb === \"add\" ? \"subtract\" : \"add\";\n val = Math.abs(n);\n }\n const prep = verb === \"add\" ? \"to\" : \"from\";\n return `${verb} ${jstr(val)} ${prep} ${ofOrPossessive(subj, `${statName(m.stat)} characteristic`)}${scope}`;\n }\n case \"roll-modifier\": {\n const ctxNote = m.context ? ` (${jstr(m.context)})` : \"\";\n if (m.critical_on != null) {\n const crit = m.roll === \"wound\" ? \"Critical Wounds\" : \"Critical Hits\";\n return `${subj} ${v(subj, \"scores\")} ${crit} on ${rollName(m.roll)} rolls of ${jstr(m.critical_on)}+`;\n }\n if (m.operation === \"set\")\n return `${subj} can change ${rollName(m.roll)} rolls to a ${jstr(m.value)}`;\n if (m.value == null) return `${dekebab(jstr(m.operation))} ${ofOrPossessive(subj, `${rollName(m.roll)} rolls`)}${ctxNote}`;\n return `${subj} ${v(subj, \"gets\")} ${signed(m.operation, m.value)} to ${rollName(m.roll)} rolls${ctxNote}`;\n }\n case \"re-roll\": {\n const noun = rollName(m.roll);\n const which = m.subset === \"ones\" ? `a ${noun} roll of 1` : `the ${noun} roll`;\n return `you can re-roll ${which}`;\n }\n case \"mortal-wounds\": {\n const range = m.range ?? m.range_inches ?? ctx.rangeInches;\n const subjMW =\n e.target === \"enemy-within-aura\" && range != null\n ? `each enemy unit within ${jstr(range)}\"`\n : subj;\n const verb = subjMW.startsWith(\"each \") ? \"suffers\" : v(subjMW, \"suffers\");\n // Dice-pool form (e.g. \"roll six D6: for each 4+, that unit suffers 1\n // mortal wound\"): N dice rolled, each success worth `mortal_per_success`\n // mortal wounds. Distinct from a flat count — the amount IS the pool.\n if (m.mortal_per_success != null) {\n const per = jstr(m.mortal_per_success);\n const perNoun = per === \"1\" ? \"mortal wound\" : \"mortal wounds\";\n const hit = poolThreshold(jstr(m.comparison ?? \"gte\"), m.threshold);\n // Per-model pool: one die per model in this/the target unit (e.g.\n // \"roll one D6 for each model in this unit: for each 4+, …\").\n if (m.per_model != null) {\n const where = m.per_model === \"target\" ? \"the target unit\" : \"this unit\";\n return `roll one ${diceCase(m.dice)} for each model in ${where}: for each ${hit}, ${subjMW} ${verb} ${per} ${perNoun}`;\n }\n return `roll ${diceCase(m.dice)}: for each ${hit}, ${subjMW} ${verb} ${per} ${perNoun}`;\n }\n // Escalating table (\"on a 2-3, 1 mortal wound; on a 4-5, D3 ...\"): the\n // roll decides the amount, so render the rows, not \"a number of\".\n const table = (m.amount_table ?? m.table) as { roll?: unknown; amount?: unknown }[] | undefined;\n if (Array.isArray(table) && table.length) {\n const rows = table\n .map((r, i) => {\n const amt = diceCase(r.amount);\n const noun = amt === \"1\" ? \"mortal wound\" : \"mortal wounds\";\n return i === 0\n ? `on a ${jstr(r.roll)}, ${subjMW} ${verb} ${amt} ${noun}`\n : `on a ${jstr(r.roll)}, ${amt} ${noun}`;\n })\n .join(\"; \");\n return `roll one ${diceCase(m.dice ?? \"D6\")}: ${rows}`;\n }\n const a =\n m.count != null\n ? jstr(m.count)\n : m.amount != null\n ? jstr(m.amount)\n : m.dice != null\n ? diceCase(m.dice)\n : null;\n // Deadly-Demise-style triggers carry no count here — the amount is the\n // model's Deadly Demise rating, so describe the trigger instead of \"?\".\n if (a == null && m.trigger != null)\n return `when this model is destroyed, ${subjMW} ${verb} mortal wounds (${titleCase(jstr(m.trigger))})`;\n const amt = a ?? \"?\";\n const noun = amt === \"1\" ? \"mortal wound\" : \"mortal wounds\";\n return `${subjMW} ${verb} ${amt} ${noun}`;\n }\n case \"feel-no-pain\": {\n const vs = FNP_SCOPES[jstr(m.scope)] ?? \"\";\n return `${subj} ${v(subj, \"has\")} the Feel No Pain ${jstr(m.threshold)}+ ability${vs}`;\n }\n case \"ward\":\n return `${subj} ${v(subj, \"has\")} the Ward ${jstr(m.threshold ?? m.value)}+ ability`;\n case \"invulnerable-save\":\n return `${subj} ${v(subj, \"has\")} a ${jstr(m.invuln_sv ?? m.value ?? m.threshold)}+ invulnerable save`;\n case \"keyword-grant\": {\n let kw: string;\n if (m.anti_keyword != null) {\n kw = `[ANTI-${dekebab(jstr(m.anti_keyword)).toUpperCase()} ${jstr(m.anti_threshold ?? \"?\")}+]`;\n } else if (Array.isArray(m.keywords)) {\n kw = m.keywords.map(bracketKeyword).join(\" and \");\n } else if (m.value != null) {\n // Rated keyword carried structurally (Sustained Hits N / Rapid Fire N / Melta N).\n kw = `[${dekebab(jstr(m.keyword ?? \"keywords\")).toUpperCase()} ${jstr(m.value)}]`;\n } else {\n kw = bracketKeyword(m.keyword ?? \"keywords\");\n }\n if (m.weapon_name != null) return `${ofOrPossessive(subj, jstr(m.weapon_name))} gains ${kw}`;\n if (m.weapon_type != null) return `${ofOrPossessive(subj, `${jstr(m.weapon_type)} weapons`)} gain ${kw}`;\n return `${ofOrPossessive(subj, \"weapons\")} gain ${kw}`;\n }\n case \"ability-grant\": {\n const grant = m.grant_type ?? m.ability_id;\n // Reserves-arrival grant slugs read as full clauses in GW voice — the\n // generic \"gains the X ability\" form would bury the mechanic in a name.\n switch (jstr(grant)) {\n case \"must-start-in-reserves\":\n return `${subj} must start the battle in Reserves`;\n case \"reinforcement-any-of-turns-1-to-3\":\n return `${subj} can be set up in the Reinforcements step of your first, second or third Movement phase, regardless of any mission rules`;\n case \"reserves-limit-exempt\":\n return `${subj} ${v(subj, \"is\")} not counted towards any limits on the number of units that can start the battle in Reserves`;\n case \"reserves-limit-exempt-with-cargo\":\n return `neither ${subj} nor any units embarked within it are counted towards any limits on the number of units that can start the battle in Reserves`;\n case \"may-start-in-reserves\":\n return `${subj} can start the battle in Reserves`;\n case \"battle-round-plus-one-for-arrival\":\n return `${subj} ${v(subj, \"treats\")} the current battle round number as being one higher than it actually is when arriving from Reserves`;\n case \"flavor-text\":\n return \"this ability is a descriptive note (no additional rules effect)\";\n case \"crew-tokens\": {\n const n = jstr(m.count ?? 1);\n const token = m.token_name != null ? `${jstr(m.token_name)} tokens` : \"Crew tokens\";\n return `place ${n} ${token} next to ${subj} when ${pronoun(subj)=== \"their\" ? \"they are\" : \"it is\"} first set up, removing one each time ${subj} ${v(subj, \"loses\")} a wound (the model itself represents ${pronoun(subj)} final wound)`;\n }\n }\n const cap = m.capacity != null ? ` (${jstr(m.capacity)})` : \"\";\n // A grant's `timing` modifier scopes when the granted ability applies.\n const when = m.timing != null ? `${describeTiming(jstr(m.timing))}, ` : \"\";\n return grant != null\n ? `${when}${subj} ${v(subj, \"gains\")} the ${grantLabel(jstr(grant))} ability${cap}`\n : `${when}${subj} ${v(subj, \"gains\")} an ability${cap}`;\n }\n case \"movement-modifier\":\n return movementClause(m, subj);\n case \"aura\":\n return auraClause(e, m, ctx);\n case \"damage-reduction\": {\n const r = jstr(m.reduction ?? m.amount ?? m.value);\n const how =\n r === \"half\"\n ? \"halve the Damage of that attack\"\n : r === \"to-zero\"\n ? \"reduce the Damage of that attack to 0\"\n : `reduce the Damage of that attack by ${r}`;\n return `each time an attack targets ${subj}, ${how}`;\n }\n case \"resurrection\": {\n const count = m.count != null ? diceCase(m.count) : \"1\";\n // `type: \"wounds\"` is a heal (regained wounds), not a revive.\n if (m.type === \"wounds\" || m.wounds != null) {\n const healed = m.wounds != null ? diceCase(m.wounds) : count;\n const noun = healed === \"1\" ? \"lost wound\" : \"lost wounds\";\n return `${subj} ${v(subj, \"regains\")} up to ${healed} ${noun}`;\n }\n const wounds = m.wounds_remaining ?? \"full\";\n const place = resurrectionPlacement(m.placement);\n const when = resurrectionTiming(m.timing);\n const tail = [place, when].filter((s) => s.length > 0).join(\" \");\n const tailClause = tail ? ` ${tail}` : \"\";\n // A self/bearer resurrection reads as the model returning, not \"returning a model to itself\".\n if (e.target === \"self\" || e.target === \"bearer\") {\n return `${subj} ${v(subj, \"is\")} set up again${tailClause} with ${jstr(wounds)} wounds remaining`;\n }\n const noun = count === \"1\" ? \"destroyed model\" : \"destroyed models\";\n return `return ${count} ${noun} to ${subj} with ${jstr(wounds)} wounds${tailClause}`;\n }\n case \"model-destruction\": {\n const count = m.count != null ? diceCase(m.count) : \"1\";\n const noun = count === \"1\" ? \"model\" : \"models\";\n return `destroy ${count} ${noun} in ${subj}`;\n }\n case \"rule-state\":\n return describeRuleState(m, subj);\n case \"cp-gain\":\n return `you gain ${jstr(m.amount ?? 1)}CP`;\n case \"cp-on-destroy\": {\n const kw = m.enemy_keyword != null ? `${jstr(m.enemy_keyword)} model` : \"enemy model\";\n const who = subj === \"this model\" ? \"this model's unit\" : subj;\n return `each time ${who} destroys a ${kw}, you gain ${jstr(m.amount ?? 1)}CP`;\n }\n case \"battle-shock-test\":\n return `${subj} ${v(subj, \"takes\")} Battle-shock tests on ${diceCase(m.dice)} instead of 2D6`;\n case \"flyover\": {\n const hit = poolThreshold(jstr(m.comparison ?? \"gte\"), m.threshold);\n const per = jstr(m.mortal_wounds ?? 1);\n const perNoun = per === \"1\" ? \"mortal wound\" : \"mortal wounds\";\n return `each time this model ends a Normal move, select one enemy unit it moved over and roll ${diceCase(m.dice)}: for each ${hit}, that unit suffers ${per} ${perNoun}`;\n }\n case \"cp-refund\": {\n const strat = m.stratagem != null ? `the ${titleCase(jstr(m.stratagem))} Stratagem` : \"one Stratagem\";\n return `you can use ${strat} on ${subj} for 0CP`;\n }\n case \"modifier-immunity\": {\n const scope = jstr(m.scope);\n if (scope === \"enemy-stratagems\") return `${subj} cannot be affected by enemy Stratagems`;\n if (scope === \"enemy-abilities\") return `${subj} cannot be affected by enemy abilities`;\n const exc =\n Array.isArray(m.exclude) && m.exclude.length\n ? ` (except ${(m.exclude as unknown[]).map((s) => statName(jstr(s))).join(\" and \")})`\n : \"\";\n return `${subj} ${v(subj, \"ignores\")} any modifiers to ${pronoun(subj)} characteristics${exc}`;\n }\n case \"stratagem-cost-modifier\": {\n const which = m.stratagem != null ? `the ${titleCase(jstr(m.stratagem))} Stratagem` : \"Stratagems\";\n const whose = m.applies_to === \"stratagems-used-by-bearer\" ? `used by ${subj}` : `that target ${subj}`;\n const verb = m.stratagem != null ? \"costs\" : \"cost\";\n const val = m.operation === \"set-to\" ? `${jstr(m.set_to)}CP` : `${jstr(m.amount ?? 1)} more CP`;\n return `${which} ${whose} ${verb} ${val}`;\n }\n case \"targeting-permission\": {\n const at = m.attack_type === \"ranged\" ? \"ranged attacks\" : \"attacks\";\n const r = m.range != null ? `${jstr(m.range)}\"` : \"?\";\n let gate: string;\n switch (jstr(m.gate)) {\n case \"within-range\":\n gate = `the attacking unit is within ${r}`;\n break;\n case \"closest-eligible\":\n gate = \"it is the closest eligible target\";\n break;\n case \"closest-or-within-range\":\n gate = `it is the closest eligible target or the attacking unit is within ${r}`;\n break;\n default:\n gate = dekebab(jstr(m.gate));\n }\n return `${subj} can only be selected as the target of ${at} if ${gate}`;\n }\n case \"resource-gain\":\n return `you gain ${jstr(m.amount ?? m.value)} ${poolName(m.pool_id ?? m.resource)}`;\n case \"resource-spend\": {\n const base = `spend ${jstr(m.amount ?? m.value)} ${poolName(m.pool_id ?? m.resource)}`;\n const cap = m.cap as Record<string, unknown> | undefined;\n if (cap != null && cap.count != null && cap.per != null)\n return `${base} (no more than ${jstr(cap.count)} per ${jstr(cap.per)})`;\n return base;\n }\n case \"pool-add-die\": {\n const pool = poolName(m.pool_id);\n const rolled = m.value === \"rolled\";\n if (m.count_per_pool != null) {\n // One die per point currently in the counting pool (Icon of Khorne).\n const per = poolName(m.count_per_pool);\n const perPlural = per.endsWith(\"s\") ? per : `${per}s`;\n const shown = m.value === \"highest\" ? \"the highest result\" : jstr(m.value);\n const die = rolled ? \"one rolled D6\" : `one die showing ${shown}`;\n const tail = m.consumes_pool ? `, after which all your ${perPlural} are lost` : \"\";\n return `add ${die} to your ${pool} for each ${per} you have${tail}`;\n }\n const cnt = m.count != null ? diceCase(m.count) : \"1\";\n if (rolled) {\n const dice = cnt === \"1\" ? \"a rolled D6\" : `${cnt} rolled D6`;\n return `add ${dice} to your ${pool}`;\n }\n const val = m.value === \"highest\" ? \"the highest result\" : jstr(m.value);\n const dice = cnt === \"1\" ? \"a die\" : `${cnt} dice`;\n return `add ${dice} showing ${val} to your ${pool}`;\n }\n case \"replace-roll-from-pool\": {\n const rolls = Array.isArray(m.rolls) ? (m.rolls as unknown[]).map((r) => dekebab(jstr(r))) : [];\n return `discard a die from your ${poolName(m.pool_id)} and substitute its value for a ${orList(rolls)} roll`;\n }\n case \"leadership-modifier\": {\n const test = m.test != null ? `${testName(m.test)} test` : null;\n if (test != null && m.operation == null) return `${subj} must take a ${test}`;\n if (test != null && m.operation === \"re-roll\") return `${subj} can re-roll ${testName(m.test)} tests`;\n if (test != null && m.value != null)\n return `${m.operation === \"add\" ? \"add\" : \"subtract\"} ${jstr(m.value)} ${m.operation === \"add\" ? \"to\" : \"from\"} the ${testName(m.test)} test of ${subj}`;\n if (m.operation != null && m.value != null)\n return `${m.operation === \"add\" || m.operation === \"improve\" ? \"add\" : \"subtract\"} ${jstr(m.value)} ${m.operation === \"add\" || m.operation === \"improve\" ? \"to\" : \"from\"} the Leadership characteristic of ${subj}`;\n return `modify ${ofOrPossessive(subj, \"Leadership characteristic\")}`;\n }\n case \"fight-first\":\n return `${subj} ${v(subj, \"has\")} the Fights First ability`;\n case \"fight-last\":\n return `${subj} ${v(subj, \"has\")} the Fights Last ability`;\n case \"fight-on-death\":\n return subj === \"this model\"\n ? `each time this model is destroyed, it can fight before being removed from play`\n : `each time a model in ${subj} is destroyed, it can fight before being removed from play`;\n case \"shoot-on-death\":\n return subj === \"this model\"\n ? `each time this model is destroyed, it can shoot before being removed from play`\n : `each time a model in ${subj} is destroyed, it can shoot before being removed from play`;\n case \"unit-keyword\": {\n const name = titleCase(jstr(m.keyword_id));\n const val = m.value != null ? ` ${jstr(m.value)}` : \"\";\n return `${subj} has the ${name}${val} ability`;\n }\n case \"unit-keyword-grant\":\n // Without a `to_keywords` filter the grant lands on the effect subject.\n return m.to_keywords != null\n ? `${jstr(m.to_keywords)} units gain the ${jstr(m.keyword)} keyword`\n : `${subj} ${v(subj, \"gains\")} the ${jstr(m.keyword)} keyword`;\n case \"deep-strike\":\n return m.min_distance != null\n ? `${subj} ${v(subj, \"has\")} the Deep Strike ability and can be set up more than ${jstr(m.min_distance)}\" from enemy models`\n : `${subj} has the Deep Strike ability`;\n case \"strategic-reserves-arrival\":\n return `${subj} can arrive from Strategic Reserves regardless of mission rules`;\n case \"remove-battle-shock\":\n return `${subj} ${v(subj, \"is\")} no longer Battle-shocked`;\n case \"auto-result\": {\n const r = m.result;\n if (m.test != null) {\n if (r === \"pass\") return `${subj} automatically ${v(subj, \"passes\")} ${testName(m.test)} tests`;\n if (r === \"fail\") return `${subj} automatically ${v(subj, \"fails\")} ${testName(m.test)} tests`;\n return `${subj} ${v(subj, \"treats\")} ${testName(m.test)} tests as ${jstr(r)}`;\n }\n const roll = rollName(m.roll);\n if (r === \"pass\") return `${ofOrPossessive(subj, `${roll} rolls`)} automatically succeed`;\n if (r === \"fail\") return `${ofOrPossessive(subj, `${roll} rolls`)} automatically fail`;\n return `${ofOrPossessive(subj, `${roll} rolls`)} count as ${jstr(r)}`;\n }\n case \"firing-deck\":\n return `${subj} ${v(subj, \"has\")} Firing Deck ${jstr(m.value)}`;\n case \"disembark-after-move\": {\n if (m.after == null) return `units can disembark from ${subj} after it has moved`;\n const who =\n m.requires_keyword != null\n ? `units with the ${titleCase(jstr(m.requires_keyword))} ability`\n : \"units\";\n const when =\n m.after === \"advance\"\n ? \"after it has Advanced\"\n : m.after === \"deployment\"\n ? \"after it has been set up on the battlefield\"\n : m.after === \"before-move\"\n ? \"before it moves\"\n : \"after it has made a Normal move\";\n // `mandatory`: a Reserves-transport whose cargo MUST disembark on arrival.\n const verb = m.mandatory ? \"must immediately disembark\" : \"can disembark\";\n const away =\n m.min_enemy_distance != null\n ? `, and must be set up more than ${jstr(m.min_enemy_distance)}\" away from all enemy models`\n : \"\";\n const counts = m.counts_as_normal_move ? \"; such units count as having made a Normal move\" : \"\";\n // A deployment-step disembark has no meaningful charge window; only an\n // explicit `can_charge` renders the charge tail there.\n const charge = m.can_charge\n ? \", and are still eligible to declare a charge this turn\"\n : m.after === \"deployment\" && m.can_charge == null\n ? \"\"\n : \", but cannot declare a charge this turn\";\n return `${who} ${verb} from ${subj} ${when}${away}${counts}${charge}`;\n }\n case \"disembark\": {\n const where = m.distance != null ? ` and be set up wholly within ${jstr(m.distance)}\" of the transport` : \"\";\n const eng = m.allow_engagement_range ? \", even within Engagement Range of enemy units\" : \"\";\n return `${subj} can disembark${where}${eng}`;\n }\n case \"unit-attachment\": {\n if (m.mandatory) return `${subj} must be attached to a Leader, or it counts as destroyed`;\n const led = m.led_by != null ? ` led by a ${titleCase(jstr(m.led_by))} model` : \"\";\n return `at the start of the Declare Battle Formations step, ${subj} can join one friendly unit${led}, becoming part of that Bodyguard unit`;\n }\n case \"fallback-and-act\":\n return `${subj} is eligible to shoot and declare a charge in a turn in which it Fell Back`;\n case \"fight-eligibility-extension\": {\n const r = jstr(m.range);\n return (\n `when determining which models in ${subj} are eligible to fight, ` +\n `models within ${r}\" of one or more enemy models are eligible ` +\n `and can target enemy units within ${r}\"`\n );\n }\n case \"engagement-passthrough\":\n return m.no_end_in_engagement\n ? `${subj} can move through enemy models, but cannot end that move within Engagement Range of any enemy unit`\n : `${subj} can move through enemy models`;\n case \"attack-restriction\":\n return describeAttackRestriction(m, subj);\n case \"objective-control-modifier\": {\n if (m.sticky)\n return `${subj} ${v(subj, \"retains\")} control of objective markers even after no models remain in range, until the enemy retakes them (sticky objectives)`;\n if (m.operation === \"halve\") return `halve the Objective Control characteristic of ${subj}`;\n if (m.operation != null)\n return `${subj} ${v(subj, \"gets\")} ${signed(m.operation, m.value)} to ${pronoun(subj)} Objective Control characteristic`;\n return `modify ${ofOrPossessive(subj, \"Objective Control characteristic\")}`;\n }\n case \"bs-modifier\":\n return `${subj} ${v(subj, \"gets\")} ${signed(m.operation, m.value)} to Ballistic Skill`;\n case \"charge-roll-modifier\":\n return `${subj} ${v(subj, \"gets\")} ${signed(m.operation, m.value)} to Charge rolls`;\n case \"terrain-area-tag\":\n return m.tag != null\n ? `the terrain area is marked as ${dekebab(jstr(m.tag))}`\n : \"the terrain area is marked\";\n case \"objective-tag\":\n return m.tag != null\n ? `the objective is marked as ${dekebab(jstr(m.tag))}`\n : \"the objective is marked\";\n case \"unit-tag\":\n return m.tag != null\n ? `${subj} ${v(subj, \"is\")} marked as ${dekebab(jstr(m.tag))}`\n : `${subj} ${v(subj, \"is\")} marked`;\n\n // Container types — inline forms.\n case \"conditional\":\n return `${conditionLeadIn(e.condition ?? {})}, ${describeEffectInline(e.effect ?? {}, ctx)}`;\n case \"sequence\":\n return (e.steps ?? []).map((s) => describeEffectInline(s, ctx)).join(\"; \");\n case \"choice\": {\n const label = e.choice_label ? ` (${titleCase(e.choice_label)})` : \"\";\n return `select one of the following${label}: ${(e.options ?? []).map((o) => describeEffectInline(o, ctx)).join(\" / \")}`;\n }\n case \"dice-gated\": {\n const comp = formatComparison(e.comparison ?? \"gte\", e.threshold);\n const success = e.on_success ? describeEffectInline(e.on_success, ctx) : \"nothing happens\";\n const fail = e.on_fail ? `; otherwise, ${describeEffectInline(e.on_fail, ctx)}` : \"\";\n return `roll one ${diceCase(e.dice)}: on ${comp}, ${success}${fail}`;\n }\n case \"dice-pool-allocation\": {\n const pool = e.pool ? `${jstr(e.pool.count)}${jstr(e.pool.die)}` : \"your dice pool\";\n const opts = (e.options ?? [])\n .map((o) => `${jstr(o.name)} (requires ${describeRequirement(o.requirement)}): ${describeEffectInline(o.effect ?? {}, ctx)}`)\n .join(\" / \");\n return `roll ${pool}: ${opts}`;\n }\n case \"select-units\":\n return `select ${selectUnitsSubject(e.selector)}: ${describeEffectInline(e.effect ?? {}, ctx)}`;\n case \"designate-target\": {\n const sel = (typeof e.select === \"object\" && e.select ? e.select : {}) as {\n scope?: string;\n timing?: string;\n };\n const scopeNoun = sel.scope === \"friendly-unit\" ? \"friendly\" : \"enemy\";\n const desig = e.designation ? designationLabel(e.designation) : \"\";\n const selectLead = sel.timing ? `${describeTiming(sel.timing)}, select` : \"select\";\n const { trail: durTrail } = durationClauses(e.duration);\n const when = e.applies?.to === \"target\" ? \"while it is your target\" : \"each time a friendly unit attacks it\";\n const whenClause = durTrail ? `${durTrail}, ${when}` : when;\n return `${selectLead} one ${scopeNoun} unit${desig}; ${whenClause}, ${describeEffectInline(e.applies?.effect ?? {}, ctx)}`;\n }\n case \"stance-select\":\n return `select one: ${(e.options ?? []).map((o) => `${jstr(o.name)} (${describeEffectInline(o.effect ?? {}, ctx)})`).join(\" / \")}`;\n case \"risk-reward\":\n return `take a ${testName(e.risk?.test)} test (on a failure, ${e.risk?.on_fail ? describeEffectInline(e.risk.on_fail, ctx) : \"suffer a consequence\"}), then ${describeEffectInline(e.reward ?? {}, ctx)}`;\n case \"issue-orders\":\n return `issue Orders, each one of: ${(e.options ?? []).map((o) => jstr(o.name)).join(\" / \")}`;\n\n default:\n return `[${e.type ?? \"unknown\"}]`;\n }\n}\n\n/** Per-slug GW-prose for `attack-restriction` (reads `restriction` or `restriction_type`). */\n/**\n * `rule-state`: a named rule switched on/off for the subject. The `faction-rule`\n * + `suppressed` path reproduces the legacy `forgo-faction-rule` phrasing\n * verbatim (Angron \"Reborn in Blood\"); the core-rule slugs get natural\n * action/benefit phrasing; keyword/ability kinds fall back to a regular\n * gains/loses-the-X clause. Phrasing is pinned byte-for-byte across the four\n * language ports by the conformance corpus.\n */\nfunction describeRuleState(m: Record<string, unknown>, subj: string): string {\n const dir = jstr(m.direction);\n const kind = jstr(m.rule_kind);\n const rule = jstr(m.rule);\n const granted = dir === \"granted\";\n\n // Faction-rule suppression keeps the original \"forgo activating …\" wording.\n if (kind === \"faction-rule\" && !granted) {\n const scope = m.scope != null ? ` this ${dekebab(jstr(m.scope))}` : \"\";\n let cost = \"\";\n const c = m.cost;\n if (c != null && typeof c === \"object\" && (c as Record<string, unknown>).dice != null) {\n const cc = c as Record<string, unknown>;\n const from =\n cc.from == null\n ? \"\"\n : jstr(cc.from) === rule\n ? \" from that roll\"\n : ` from the ${titleCase(jstr(cc.from))} roll`;\n cost = `, using a ${dekebab(jstr(cc.dice))}${from}`;\n }\n return `forgo activating ${titleCase(rule)}${scope}${cost}`;\n }\n if (kind === \"faction-rule\") return `${subj} ${v(subj, \"gains\")} ${titleCase(rule)}`;\n\n // Natural phrasing for the closed core-rule slug vocabulary.\n switch (rule) {\n case \"benefit-of-cover\":\n return granted ? `${subj} ${v(subj, \"has\")} the Benefit of Cover` : `${subj} cannot benefit from Cover`;\n case \"charge\":\n return granted ? `${subj} can charge` : `${subj} cannot charge`;\n case \"advance\":\n return granted ? `${subj} can Advance` : `${subj} cannot Advance`;\n case \"fall-back\":\n return granted ? `${subj} can Fall Back` : `${subj} cannot Fall Back`;\n case \"ordered-retreat\":\n // GW frames this lever by its effect on Desperate Escape tests: suppressing\n // Ordered Retreat forces the tests; granting it (e.g. while Battle-shocked)\n // exempts the unit. Mirrors the `desperate-escape` slug wording.\n return granted\n ? `${subj} ${v(subj, \"is\")} not affected by Desperate Escape tests`\n : `${subj} must take Desperate Escape tests`;\n case \"fire-overwatch\":\n return granted ? `${subj} can fire Overwatch` : `${subj} cannot fire Overwatch`;\n case \"overwatch-against-bearer\":\n return granted ? `your opponent can target ${subj} with Overwatch` : `your opponent cannot target ${subj} with Overwatch`;\n case \"desperate-escape\":\n return granted\n ? `${subj} must take Desperate Escape tests`\n : `${subj} ${v(subj, \"is\")} not affected by Desperate Escape tests`;\n }\n\n // Ability / keyword kinds (every core-rule slug is cased above): regular clause.\n const noun = kind === \"keyword\" ? \"keyword\" : \"ability\";\n return granted\n ? `${subj} ${v(subj, \"gains\")} the ${titleCase(rule)} ${noun}`\n : `${subj} ${v(subj, \"loses\")} the ${titleCase(rule)} ${noun}`;\n}\n\nfunction describeAttackRestriction(m: Record<string, unknown>, subj: string): string {\n // Some entries express the restriction as a forbidden action (`attack_type: charge`).\n if (m.restriction == null && m.restriction_type == null && m.attack_type != null)\n return `${subj} cannot ${jstr(m.attack_type)}`;\n const slug = jstr(m.restriction ?? m.restriction_type);\n const range = m.range != null ? jstr(m.range) : null;\n switch (slug) {\n case \"worsen-incoming-ap\":\n return `each time an attack targets ${subj}, worsen the Armour Penetration of that attack by ${jstr(m.value ?? 1)}`;\n case \"targeting-range-limit\":\n return `${subj} can only target enemy units within ${range ?? \"?\"}\"`;\n case \"reinforcement-denial\":\n return `enemy units cannot be set up from Reserves within ${range ?? \"?\"}\" of ${subj}`;\n case \"must-be-warlord\":\n return \"this model must be your Warlord\";\n case \"cannot-be-warlord\":\n return \"this model cannot be your Warlord\";\n case \"unique-unit-limit\":\n return \"you can include only one of this unit in your army\";\n case \"no-charge\":\n return `${subj} cannot charge`;\n default:\n return `${subj}: ${dekebab(slug)}${range != null ? ` (within ${range}\")` : \"\"}`;\n }\n}\n\n/**\n * Block translation of a *container* effect tree (multi-line, two-space\n * indentation). Leaves and conditionals are handled inline by the caller.\n */\nexport function describeEffect(e: Effect, depth: number = 0, ctx: Ctx = {}): string {\n const indent = \" \".repeat(depth);\n const arrow = depth > 0 ? \"-> \" : \"\";\n\n switch (e.type) {\n case \"conditional\": {\n const inner = e.effect ?? {};\n if (CONTAINER_TYPES.has(inner.type ?? \"\")) {\n return `${indent}${capitalize(conditionLeadIn(e.condition ?? {}))}:\\n` + describeEffect(inner, depth + 1, ctx);\n }\n return `${indent}${arrow}${capitalize(conditionLeadIn(e.condition ?? {}))}, ${describeEffectInline(inner, ctx)}.`;\n }\n case \"sequence\":\n return (e.steps ?? [])\n .map((s) => describeEffect(s, depth, ctx))\n .join(\"\\n\");\n case \"choice\": {\n const label = e.choice_label ? ` (${titleCase(e.choice_label)})` : \"\";\n return (\n `${indent}Select one of the following${label}:\\n` +\n (e.options ?? []).map((o) => `${indent} - ${capitalize(describeEffectInline(o, ctx))}.`).join(\"\\n\")\n );\n }\n case \"dice-gated\": {\n const comp = formatComparison(e.comparison ?? \"gte\", e.threshold);\n const success = e.on_success ? describeEffectInline(e.on_success, ctx) : \"nothing happens\";\n const fail = e.on_fail ? `; otherwise, ${describeEffectInline(e.on_fail, ctx)}` : \"\";\n return `${indent}${arrow}Roll one ${diceCase(e.dice)}: on ${comp}, ${success}${fail}.`;\n }\n case \"dice-pool-allocation\": {\n const pool = e.pool ? `${jstr(e.pool.count)}${jstr(e.pool.die)}` : \"your dice pool\";\n const upTo =\n e.max_activations != null\n ? ` to activate up to ${jstr(e.max_activations)} of the following`\n : \" to activate the following\";\n const lines = [`${indent}${arrow}Roll ${pool}; allocate dice${upTo}:`];\n for (const opt of e.options ?? []) {\n lines.push(\n `${indent} - ${jstr(opt.name)} (requires ${describeRequirement(opt.requirement)}): ${describeEffectInline(opt.effect ?? {}, ctx)}.`\n );\n }\n return lines.join(\"\\n\");\n }\n case \"select-units\": {\n const inner = e.effect ?? {};\n const lead = `Select ${selectUnitsSubject(e.selector)}`;\n if (CONTAINER_TYPES.has(inner.type ?? \"\")) {\n return `${indent}${arrow}${lead}:\\n` + describeEffect(inner, depth + 1, ctx);\n }\n return `${indent}${arrow}${lead}: ${describeEffectInline(inner, ctx)}.`;\n }\n case \"designate-target\": {\n const sel = (typeof e.select === \"object\" && e.select ? e.select : {}) as {\n scope?: string;\n timing?: string;\n };\n const scopeNoun = sel.scope === \"friendly-unit\" ? \"friendly\" : \"enemy\";\n const desig = e.designation ? designationLabel(e.designation) : \"\";\n const applies = e.applies ?? {};\n const inner = applies.effect ?? {};\n // The mark's timing and duration are content: \"After this unit shoots,\n // select …. Until your next Command phase, each time …\".\n const selectLead = sel.timing ? `${capitalize(describeTiming(sel.timing))}, select` : \"Select\";\n const { trail: durTrail } = durationClauses(e.duration);\n const when =\n applies.to === \"target\"\n ? \"while it is your target\"\n : \"each time a friendly unit makes an attack against it\";\n const whenClause = durTrail ? `${capitalize(durTrail)}, ${when}` : capitalize(when);\n const head = `${indent}${arrow}${selectLead} one ${scopeNoun} unit${desig}. ${whenClause}`;\n if (CONTAINER_TYPES.has(inner.type ?? \"\")) {\n return `${head}:\\n` + describeEffect(inner, depth + 1, ctx);\n }\n return `${head}, ${describeEffectInline(inner, ctx)}.`;\n }\n case \"stance-select\": {\n const when = typeof e.select === \"string\" ? capitalize(eventClause(e.select)) : \"At the start of your turn\";\n const consum = e.mode === \"consumable\" ? \" (each may be chosen once per battle)\" : \"\";\n const lines = [`${indent}${arrow}${when}, select one${consum}:`];\n for (const opt of e.options ?? []) {\n lines.push(`${indent} - ${jstr(opt.name)}: ${describeEffectInline(opt.effect ?? {}, ctx)}.`);\n }\n return lines.join(\"\\n\");\n }\n case \"risk-reward\": {\n const risk = e.risk ?? {};\n const onFail = risk.on_fail ? describeEffectInline(risk.on_fail, ctx) : \"there is a consequence\";\n const reward = describeEffectInline(e.reward ?? {}, ctx);\n return `${indent}${arrow}First take a ${testName(risk.test)} test — on a failure, ${onFail}; then ${reward}.`;\n }\n case \"issue-orders\": {\n const n = e.count != null ? jstr(e.count) : \"one or more\";\n const rng = e.range != null ? ` within ${jstr(e.range)}\"` : \"\";\n const elig = e.eligible?.keyword ? ` ${jstr(e.eligible.keyword)}` : \"\";\n const lines = [`${indent}${arrow}Issue up to ${n} Orders to eligible friendly${elig} units${rng}, each one of:`];\n for (const opt of e.options ?? []) {\n lines.push(`${indent} - ${jstr(opt.name)}: ${describeEffectInline(opt.effect ?? {}, ctx)}.`);\n }\n return lines.join(\"\\n\");\n }\n default:\n // Leaf at block position — render as a single capitalized sentence.\n return `${indent}${arrow}${capitalize(describeEffectInline(e, ctx))}.`;\n }\n}\n\n/** `Scope: aura (6\"). Duration: phase.` — retained for the legacy translate CLI footer. */\nexport function describeScope(s?: AbilityScope): string {\n if (!s || (!s.range && !s.duration)) return \"\";\n const range = dekebab(s.range ?? \"\");\n const inches = s.range_inches != null ? ` (${jstr(s.range_inches)}\")` : \"\";\n const duration = dekebab(s.duration ?? \"\");\n return `Scope: ${range}${inches}. Duration: ${duration}.`;\n}\n\n/**\n * `Applies to: units with Possessed.` — the roster-highlighting audience named\n * by a curated `applies_to` filter. Empty string when the filter is absent or\n * carries no keywords (nothing to say). `required_keywords` reads as an AND set;\n * `excluded_keywords` render as a trailing `(excluding …)`.\n */\nexport function describeAppliesTo(a?: AbilityAppliesTo | null): string {\n if (!a) return \"\";\n const required = a.required_keywords ?? [];\n const excluded = a.excluded_keywords ?? [];\n if (required.length === 0 && excluded.length === 0) return \"\";\n const base = required.length ? `units with ${required.join(\", \")}` : \"all units\";\n const exc = excluded.length ? ` (excluding ${excluded.join(\", \")})` : \"\";\n return `Applies to: ${base}${exc}.`;\n}\n\n/** Join non-empty clauses with \", \", capitalize the sentence, and end with a period. */\nfunction assembleSentence(parts: string[]): string {\n const body = parts.filter((p) => p.length > 0).join(\", \");\n if (body.length === 0) return \"\";\n const period = body.endsWith(\".\") || body.endsWith(\":\") ? \"\" : \".\";\n return capitalize(body) + period;\n}\n\n/**\n * Full generated text for an ability: a natural-English sentence (effect with\n * scope range + duration woven in, single-leaf conditionals inlined) plus a\n * trailing `Applies to:` line when the ability carries a curated `applies_to`\n * filter. This is the `ability.print()` consumers render when the dataset\n * carries no rules prose.\n */\nexport function describeAbility(a: AbilityLike): string {\n const core = a.effect ? renderTopLevel(a.effect, a.scope, a.usage, a.trigger) : \"\";\n const applies = describeAppliesTo(a.applies_to);\n return [core, applies].filter(Boolean).join(\"\\n\");\n}\n\n/** Assemble the top-level sentence/block, weaving trigger + usage + scope duration + range. */\n/**\n * Aura radius in inches: an explicit `range_inches` when present, else the\n * integer baked into a standard `aura-<n>` slug (`aura-6` -> 6), else undefined.\n * Per the scope schema, `aura-6/9/12` carry the radius in the slug and leave\n * `range_inches` null; only `aura-custom` sets `range_inches`. Non-aura ranges\n * (`unit`, `engagement-range`, ...) yield undefined, so the subject helper keeps\n * its `\" nearby\"` fallback for them.\n */\nfunction auraRadius(scope?: AbilityScope): number | undefined {\n if (scope?.range_inches != null) return scope.range_inches;\n const m = /^aura-(\\d+)$/.exec(scope?.range ?? \"\");\n return m ? Number(m[1]) : undefined;\n}\n\n/** The timing value of a bare `timing-is` condition, else undefined. */\nfunction timingOfCondition(c?: Condition): string | undefined {\n return c?.type === \"timing-is\" ? jstr((c.parameters ?? {}).timing) : undefined;\n}\n\n/** The numeric range of a top-level within-range condition, else undefined. */\nfunction conditionWithinRange(c?: Condition): number | undefined {\n if (c?.type !== \"unit-within-range-of\" && c?.type !== \"opponent-unit-within-range\") return undefined;\n const r = (c.parameters ?? {}).range;\n return typeof r === \"number\" ? r : undefined;\n}\n\nfunction renderTopLevel(\n e: Effect,\n scope?: AbilityScope,\n usage?: AbilityUsage | null,\n trigger?: AbilityTriggerSpec | null,\n): string {\n const ctx: Ctx = {\n rangeInches: auraRadius(scope),\n engagementRange: scope?.range === \"engagement-range\",\n scopeRange: scope?.range,\n };\n const { lead: durLead, trail } = durationClauses(scope?.duration);\n // An explicit usage limit supersedes the duration's coarse \"once per battle\" lead.\n const lead = usage && usage.frequency != null ? usageClause(usage) : durLead;\n\n // A reactive trigger (or several — the ability fires on any) opens the\n // sentence (\"Each time …\"). B2: when a trigger's proximity just restates a\n // within-range condition on the effect, render the range once (drop it here).\n const triggers = normalizeTriggers(trigger).filter((t) => t.event != null);\n const triggerEvents = new Set(triggers.map((t) => t.event));\n const condRange = conditionWithinRange(e.type === \"conditional\" ? e.condition : undefined);\n const trig = triggers\n .map((t) =>\n describeTrigger(condRange != null && t.proximity?.range === condRange ? { ...t, proximity: undefined } : t),\n )\n .filter((s) => s.length > 0)\n .join(\" or \");\n\n if (e.type === \"conditional\") {\n const inner = e.effect ?? {};\n // B1: drop the condition lead-in when it merely restates a trigger's timing\n // (e.g. trigger start-of-phase + condition timing-is start-of-phase).\n const condTiming = timingOfCondition(e.condition);\n const leadIn = condTiming != null && triggerEvents.has(condTiming) ? \"\" : conditionLeadIn(e.condition ?? {});\n if (CONTAINER_TYPES.has(inner.type ?? \"\")) {\n // Block: \"<trigger>[, <lead-in>][, <duration>]:\" then the indented container.\n const header = [trig, lead, leadIn, trail].filter((p) => p.length > 0).join(\", \");\n return capitalize(header) + \":\\n\" + describeEffect(inner, 1, ctx);\n }\n return assembleSentence([trig, lead, leadIn, trail, describeEffectInline(inner, ctx)]);\n }\n\n if (CONTAINER_TYPES.has(e.type ?? \"\")) {\n // Containers render block; a trigger/duration lead-in prefixes the block when\n // present. A designate-target carrying its own `duration` renders that\n // duration itself — repeating the scope duration in the head would double it.\n const ownDuration = e.type === \"designate-target\" && e.duration != null;\n const block = describeEffect(e, 0, ctx);\n const head = [trig, lead || (ownDuration ? \"\" : trail)].filter((p) => p.length > 0).join(\", \");\n return head ? capitalize(head) + \":\\n\" + block : block;\n }\n\n return assembleSentence([trig, lead, trail, describeEffectInline(e, ctx)]);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"effect.js","sourceRoot":"","sources":["../../src/translate/effect.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Humanize an Ability-DSL `effect` tree into natural English — the\n * `ability.print()` of the dataset. Output is an *approximation* generated\n * purely from the structured data (no external rules text): subject-first,\n * GW-datasheet voice, with scope range + duration woven into the sentence and\n * single-leaf conditionals inlined. ASCII-only. It is pinned byte-for-byte\n * across the TS / Rust / Python ports by the `conformance/effect-translation`\n * corpus, so any phrasing change here is a semantic corpus change (bump\n * `conformance/SPEC_VERSION`).\n *\n * Container nodes (`sequence`, `choice`, `dice-gated`, `dice-pool-allocation`,\n * and a `conditional` wrapping a container) render block-style with two-space\n * indentation; a `conditional` wrapping a single leaf inlines to one sentence.\n * Unknown leaf types degrade to a deterministic bracketed form (`[the-type]`).\n */\n\nimport { describeCondition, describeTiming, eventClause, dekebab, type Condition } from \"./condition.js\";\n\n/**\n * Minimal structural view of an effect node. Matches the ability-dsl effect\n * schema: a single effect carries `type` + `target` + `modifier`; containers\n * carry their own shape (`steps`, `options`, `condition`/`effect`, dice\n * fields).\n */\nexport interface Effect {\n type?: string;\n target?: string;\n modifier?: Record<string, unknown>;\n condition?: Condition;\n effect?: Effect;\n steps?: Effect[];\n options?: (Effect & {\n name?: string;\n // single dice-requirement or an `any_of` set; read structurally by describeRequirement.\n requirement?: unknown;\n })[];\n choice_label?: string;\n dice?: string;\n threshold?: number | string;\n comparison?: string;\n on_success?: Effect | null;\n on_fail?: Effect | null;\n pool?: { count: number; die: string };\n max_activations?: number;\n selector?: { max_count?: number; keywords?: string[]; owner?: string };\n scaling?: {\n per?: number;\n of?: string;\n within_inches?: number;\n round?: string;\n max_value?: number;\n };\n // designate-target\n designation?: string;\n select?: string | { scope?: string; count?: number; timing?: string };\n applies?: { to?: string; effect?: Effect };\n duration?: string;\n // stance-select\n mode?: string;\n scope?: string;\n // risk-reward\n reward?: Effect;\n risk?: { test?: string; on_fail?: Effect };\n // issue-orders\n count?: number;\n range?: number;\n eligible?: { keyword?: string };\n}\n\n/** Ability scope, as carried on enrichment ability entries. */\nexport interface AbilityScope {\n range?: string;\n duration?: string;\n range_inches?: number;\n}\n\n/** Curated keyword filter naming which units an ability benefits. */\nexport interface AbilityAppliesTo {\n required_keywords?: string[];\n excluded_keywords?: string[];\n}\n\n/** Usage-limit block (how often the ability may be used). */\nexport interface AbilityUsage {\n frequency?: string;\n count?: number;\n per?: string;\n}\n\n/** Reactive-trigger block: the event the ability fires on + structured guards. */\nexport interface AbilityTrigger {\n event?: string;\n subject?: string;\n proximity?: { of?: string; range?: number };\n /** Restricts a move event (e.g. enemy-unit-ended-move) to these move kinds. */\n move_types?: string[];\n condition?: Condition;\n optional?: boolean;\n cost?: { cp?: number };\n window?: string;\n}\n\n/** A trigger is one object, or an array (the ability fires on ANY listed trigger). */\nexport type AbilityTriggerSpec = AbilityTrigger | AbilityTrigger[];\n\n/** Normalize the polymorphic trigger field to a flat list (empty when absent). */\nfunction normalizeTriggers(t?: AbilityTriggerSpec | null): AbilityTrigger[] {\n if (t == null) return [];\n return Array.isArray(t) ? t : [t];\n}\n\n/** Minimal ability view for `describeAbility`. */\nexport interface AbilityLike {\n name?: string;\n effect?: Effect;\n scope?: AbilityScope;\n trigger?: AbilityTriggerSpec | null;\n usage?: AbilityUsage | null;\n applies_to?: AbilityAppliesTo | null;\n}\n\n/** Rendering context threaded down from the ability (scope info the leaf needs). */\ninterface Ctx {\n /** Aura/blast radius in inches, for `*-within-aura` targets and within-range effects. */\n rangeInches?: number;\n /** True when the ability scope is `engagement-range`, so within-aura subjects read \"within Engagement Range\". */\n engagementRange?: boolean;\n /**\n * The raw scope range slug, for the non-radius scopes (`any-visible`,\n * `any-on-battlefield`) whose within-aura subjects have a real extent the\n * generic \" nearby\" fallback would drop.\n */\n scopeRange?: string;\n}\n\nconst CONTAINER_TYPES = new Set([\n \"sequence\",\n \"choice\",\n \"dice-gated\",\n \"dice-pool-allocation\",\n \"select-units\",\n \"designate-target\",\n \"stance-select\",\n \"risk-reward\",\n \"issue-orders\",\n]);\n\n/** \"up to 3 friendly Orks Vehicle units\" — the `select-units` selector phrase. */\nfunction selectUnitsSubject(sel: Record<string, unknown> = {}): string {\n const kw = ((sel.keywords as unknown[]) ?? []).map((k) => titleCase(jstr(k))).join(\" \");\n const noun = sel.max_count === 1 ? \"unit\" : \"units\";\n return `up to ${jstr(sel.max_count)} ${jstr(sel.owner)}${kw ? ` ${kw}` : \"\"} ${noun}`;\n}\n\n/** JS-template stringification (numbers print without trailing `.0`). */\nfunction jstr(v: unknown): string {\n if (v == null) return \"?\";\n if (Array.isArray(v)) return v.map(jstr).join(\", \");\n return String(v);\n}\n\n/** Uppercase the first character (idempotent; leaves the rest untouched). */\nfunction capitalize(s: string): string {\n return s.length === 0 ? s : s[0].toUpperCase() + s.slice(1);\n}\n\n/** Small words kept lowercase mid-phrase in Title Case (`Benefit of Cover`, not `Benefit Of Cover`). */\nconst TITLE_SMALL = new Set([\"of\", \"or\", \"and\", \"the\", \"a\", \"an\", \"to\", \"in\", \"on\", \"for\", \"with\"]);\n\n/**\n * Curated display labels for granted-ability ids whose Title-Cased slug reads\n * wrong. The slug encodes the mechanic (`charge-after-advance`); the label is\n * the published name players know (`Advance & Charge`). Applied only to the\n * ability-grant describer — keyed on the resolved grant (`grant_type ??\n * ability_id`); ids absent here fall back to {@link titleCase}.\n */\nconst ABILITY_GRANT_LABELS: Record<string, string> = {\n \"charge-after-advance\": \"Advance & Charge\",\n \"charge-after-fallback\": \"Fall Back & Charge\",\n \"charge-after-disembark\": \"Charge After Disembarking\",\n \"nurgle-s-gift-aura\": \"Nurgle's Gift (Aura)\",\n};\n\n/** The display label for a granted ability id: a curated override, else Title Case. */\nfunction grantLabel(id: string): string {\n return ABILITY_GRANT_LABELS[id] ?? titleCase(id);\n}\n\n/**\n * \"(your Suppressed target)\" — a designate-target mark's parenthetical. A\n * designation slug that already ends in \"target\" keeps its own noun\n * (\"bio-stimulus-target\" → \"(your Bio Stimulus Target)\", not \"… Target target\").\n */\nfunction designationLabel(designation: unknown): string {\n const label = titleCase(jstr(designation));\n return /\\bTarget$/.test(label) ? ` (your ${label})` : ` (your ${label} target)`;\n}\n\n/** kebab/space token → Title Case (`deep-strike` → `Deep Strike`, `shoot-and-scoot` → `Shoot and Scoot`). */\nfunction titleCase(s: string): string {\n return dekebab(s)\n .split(\" \")\n .map((w, i) => {\n if (w.length === 0) return w;\n if (i > 0 && TITLE_SMALL.has(w.toLowerCase())) return w.toLowerCase();\n return w[0].toUpperCase() + w.slice(1);\n })\n .join(\" \");\n}\n\n/**\n * A GW weapon keyword token → bracketed caps (`lethal-hits` → `[LETHAL HITS]`).\n * Anti-X keywords keep their hyphen and normalize the threshold to `N+`\n * (`anti-titanic-3plus` / `anti-monster 4+` → `[ANTI-TITANIC 3+]` / `[ANTI-MONSTER 4+]`).\n */\nfunction bracketKeyword(k: unknown): string {\n const raw = jstr(k).trim();\n const anti = /^anti[\\s-]+(.*)$/i.exec(raw);\n if (anti) {\n const m = /^(.*?)[\\s-]*(\\d+)\\s*(?:\\+|plus)?$/i.exec(anti[1]);\n if (m) return `[ANTI-${dekebab(m[1]).trim().toUpperCase()} ${m[2]}+]`;\n return `[ANTI-${dekebab(anti[1]).trim().toUpperCase()}]`;\n }\n return `[${dekebab(raw).toUpperCase()}]`;\n}\n\n/** Dice tokens print with a capital `D` (`d3` → `D3`, `2d6` → `2D6`). */\nfunction diceCase(v: unknown): string {\n return jstr(v).replace(/d/gi, \"D\");\n}\n\n/** A leadership/escape test token → GW name (`battle-shock` → `Battle-shock`). */\nconst TEST_NAMES: Record<string, string> = {\n \"battle-shock\": \"Battle-shock\",\n \"desperate-escape\": \"Desperate Escape\",\n};\nfunction testName(test: unknown): string {\n const t = jstr(test);\n return TEST_NAMES[t] ?? titleCase(t);\n}\n\n/** Does a subject noun phrase take a plural verb? (`enemy units within 6\"`, `all friendly units`). */\nfunction isPlural(subj: string): boolean {\n return / units\\b/.test(subj) || /^all /.test(subj) || /^(enemy|friendly) units/.test(subj);\n}\n\n/** Subject-verb agreement: pick the plural form of a present-tense verb when the subject is plural. */\nconst PLURAL_VERBS: Record<string, string> = {\n has: \"have\",\n is: \"are\",\n gets: \"get\",\n gains: \"gain\",\n suffers: \"suffer\",\n retains: \"retain\",\n makes: \"make\",\n passes: \"pass\",\n fails: \"fail\",\n treats: \"treat\",\n};\nfunction v(subj: string, singular: string): string {\n if (!isPlural(subj)) return singular;\n return PLURAL_VERBS[singular] ?? singular.replace(/s$/, \"\");\n}\n\n/** Full characteristic name for a stat token (`Sv` → `Save`). */\nconst STAT_NAMES: Record<string, string> = {\n M: \"Move\",\n T: \"Toughness\",\n Sv: \"Save\",\n W: \"Wounds\",\n A: \"Attacks\",\n Ld: \"Leadership\",\n OC: \"Objective Control\",\n S: \"Strength\",\n WS: \"Weapon Skill\",\n BS: \"Ballistic Skill\",\n AP: \"Armour Penetration\",\n D: \"Damage\",\n Range: \"Range\",\n};\n\nfunction statName(stat: unknown): string {\n const s = jstr(stat);\n return STAT_NAMES[s] ?? titleCase(s);\n}\n\n/** Resource-pool token → display name (`cp` → `CP`, otherwise Title Case). */\nfunction poolName(pool: unknown): string {\n const p = jstr(pool);\n return p.toLowerCase() === \"cp\" ? \"CP\" : titleCase(p);\n}\n\n/** Roll noun for a roll token (`hit` → `Hit`, `attacks-characteristic` → `Attacks characteristic`). */\n// Narrowed feel-no-pain scopes -> trailing qualifier. Absent/`all` renders bare.\nconst FNP_SCOPES: Record<string, string> = {\n mortal: \" against mortal wounds\",\n psychic: \" against Psychic Attacks\",\n \"psychic-and-mortal\": \" against Psychic Attacks and mortal wounds\",\n};\n\nconst ROLL_NAMES: Record<string, string> = {\n hit: \"Hit\",\n wound: \"Wound\",\n charge: \"Charge\",\n damage: \"Damage\",\n advance: \"Advance\",\n save: \"Saving throw\",\n leadership: \"Leadership\",\n};\n\nfunction rollName(roll: unknown): string {\n const r = jstr(roll);\n return ROLL_NAMES[r] ?? titleCase(r);\n}\n\n/** `+1` / `-1` from an operation + value (a negative value flips the sign, so never `+-1`). */\nfunction signed(operation: unknown, value: unknown): string {\n const positive = operation === \"add\" || operation === \"improve\";\n let sign = positive ? 1 : -1;\n const n = Number(value);\n if (!Number.isNaN(n) && n < 0) {\n sign = -sign;\n value = Math.abs(n);\n }\n return `${sign > 0 ? \"+\" : \"-\"}${jstr(value)}`;\n}\n\n/**\n * Dice-pool success phrase → \"4+\", \"6\", \"3 or less\", etc. (for the per-die\n * threshold in a `mortal-wounds` dice pool — \"for each 4+, …\"). Unlike\n * {@link formatComparison} this carries no leading \"a\", because it follows\n * \"for each\".\n */\nfunction poolThreshold(comp: string, threshold: unknown): string {\n const th = jstr(threshold);\n switch (comp) {\n case \"lte\":\n return `${th} or less`;\n case \"gt\":\n return `more than ${th}`;\n case \"lt\":\n return `less than ${th}`;\n case \"eq\":\n return th;\n default: // gte\n return `${th}+`;\n }\n}\n\n/** Dice comparison → \"a 4+\", \"a 3 or less\", etc. (for dice-gated thresholds). */\nfunction formatComparison(comp: string, threshold: unknown): string {\n const th = jstr(threshold);\n switch (comp) {\n case \"gte\":\n return `a ${th}+`;\n case \"lte\":\n return `a ${th} or less`;\n case \"gt\":\n return `greater than ${th}`;\n case \"lt\":\n return `less than ${th}`;\n case \"eq\":\n return `exactly ${th}`;\n default:\n return `a ${th}+`;\n }\n}\n\n/**\n * Humanized subject for an effect `target`. Aura targets resolve their radius\n * from the ability scope (threaded via {@link Ctx}); everything else is a fixed\n * noun phrase in GW datasheet voice.\n */\nfunction subject(target: string | undefined, ctx: Ctx): string {\n const within =\n ctx.rangeInches != null\n ? ` within ${jstr(ctx.rangeInches)}\"`\n : ctx.engagementRange\n ? \" within Engagement Range\"\n : ctx.scopeRange === \"any-visible\"\n ? \" that are visible\"\n : ctx.scopeRange === \"any-on-battlefield\"\n ? \" anywhere on the battlefield\"\n : \" nearby\";\n switch (target) {\n case \"self\":\n case \"bearer\":\n return \"this model\";\n case \"unit\":\n return \"the unit\";\n case \"attached-unit\":\n return \"the unit this model leads\";\n case \"target\":\n return \"the target\";\n case \"attacker\":\n return \"the attacking unit\";\n case \"defender\":\n // The defending unit in an attack is the enemy from the bearer's view.\n return \"the target\";\n case \"all-friendly\":\n return \"all friendly units\";\n case \"all-enemy\":\n return \"all enemy units\";\n case \"friendly-within-aura\":\n return `friendly units${within}`;\n case \"enemy-within-aura\":\n return `enemy units${within}`;\n default:\n return \"the unit\";\n }\n}\n\n/** Possessive form of a subject noun phrase (`the unit` → `the unit's`). */\nfunction possessive(s: string): string {\n return s.endsWith(\"s\") ? `${s}'` : `${s}'s`;\n}\n\n/**\n * `<subj>'s <rest>` for a simple subject; `the <rest> of <subj>` when the subject\n * is a clause (an aura target ending in an inch mark), where a trailing possessive\n * reads as garbage (`friendly units within 6\"'s weapons`).\n */\nfunction ofOrPossessive(subj: string, rest: string): string {\n return subj.endsWith('\"') ? `the ${rest} of ${subj}` : `${possessive(subj)} ${rest}`;\n}\n\n/** Possessive pronoun agreeing with the subject (`its` / `their`). */\nfunction pronoun(subj: string): string {\n return isPlural(subj) ? \"their\" : \"its\";\n}\n\n/**\n * Duration → woven clause. `lead` sits at the very front of the sentence\n * (\"Once per battle, …\"); `trail` sits after the trigger/condition and before\n * the effect (\"…, until the end of the phase, …\"). `permanent` adds nothing.\n */\nfunction durationClauses(duration: string | undefined): { lead: string; trail: string } {\n switch (duration) {\n case \"phase\":\n return { lead: \"\", trail: \"until the end of the phase\" };\n case \"turn\":\n return { lead: \"\", trail: \"until the end of the turn\" };\n case \"battle\":\n return { lead: \"\", trail: \"for the rest of the battle\" };\n case \"battle-round\":\n return { lead: \"\", trail: \"until the end of the battle round\" };\n case \"until-next-command-phase\":\n return { lead: \"\", trail: \"until your next Command phase\" };\n case \"one-use\":\n return { lead: \"once per battle\", trail: \"\" };\n default: // permanent / absent\n return { lead: \"\", trail: \"\" };\n }\n}\n\n/** Reactive trigger → front-of-sentence lead clause (\"an enemy unit ends a move within 9\\\" of this model\"). */\nfunction describeTrigger(t: AbilityTrigger): string {\n let s = eventClause(t.event);\n // Narrow a move event to its move kinds: \"ends a move\" → \"ends a Normal,\n // Advance or Fall Back move\".\n if (t.move_types?.length) {\n const kinds = orList(t.move_types.map((mt) => (mt === \"fall-back\" ? \"Fall Back\" : capWord(mt))));\n s = s.replace(/\\bmove\\b/, `${kinds} move`);\n }\n if (t.proximity?.range != null) {\n const of =\n t.proximity.of === \"attached-unit\"\n ? \"the unit this model leads\"\n : t.proximity.of === \"self\" || t.proximity.of === \"bearer\"\n ? \"this model\"\n : \"this unit\";\n s += ` within ${jstr(t.proximity.range)}\" of ${of}`;\n }\n if (t.condition) s += `, if ${describeCondition(t.condition)}`;\n return s;\n}\n\n/** Usage limit → front-of-sentence lead clause (\"once per turn\", \"twice per battle per unit\"). */\nfunction usageClause(u: AbilityUsage): string {\n const n = Number(u.count ?? 1);\n let base: string;\n switch (u.frequency) {\n case \"once-per-turn\":\n base = \"once per turn\";\n break;\n case \"once-per-phase\":\n base = \"once per phase\";\n break;\n case \"once-per-command-phase\":\n base = \"once per Command phase\";\n break;\n case \"once-per-opponent-turn\":\n base = \"once per opponent's turn\";\n break;\n case \"first-this-battle\":\n base = \"the first time this battle\";\n break;\n case \"first-time-this-phase\":\n base = \"the first time this phase\";\n break;\n case \"n-per-battle\":\n base = n === 1 ? \"once per battle\" : n === 2 ? \"twice per battle\" : `${jstr(n)} times per battle`;\n break;\n default:\n base = dekebab(jstr(u.frequency));\n }\n return u.per != null ? `${base} per ${jstr(u.per)}` : base;\n}\n\n/** \"against a unit that is not a Monster or Vehicle\" from a run of excluded target keywords. */\nfunction negatedTargetKeywords(keywords: string[]): string {\n return `against a unit that is not a ${keywords.join(\" or \")}`;\n}\n\n/** Capitalize the first character and lowercase the rest (`MONSTER` -> `Monster`). */\nfunction capWord(s: string): string {\n return s.length === 0 ? s : s[0].toUpperCase() + s.slice(1).toLowerCase();\n}\n\n/**\n * The keyword of a `not`-wrapping-a-single-`target-has-keyword` operand, else\n * `null`. This is the aura-subject exclusion encoding (`not[target-has-keyword X]`),\n * distinct from the bare `{negated:true, type:\"target-has-keyword\"}` form.\n */\nfunction notWrappedTargetKeyword(op: Condition): string | null {\n if (op.operator !== \"not\" || !op.operands || op.operands.length !== 1) return null;\n const inner = op.operands[0];\n if (inner.type !== \"target-has-keyword\" || inner.negated) return null;\n return jstr((inner.parameters ?? {}).keyword);\n}\n\n/** \"(excluding Monster or Vehicle units)\" from a run of `not`-wrapped target-keyword exclusions. */\nfunction excludedTargetKeywords(keywords: string[]): string {\n return `(excluding ${keywords.map(capWord).join(\" or \")} units)`;\n}\n\n/**\n * Join the operands of an `and` lead-in. Two exclusion encodings collapse into a\n * single clause: a run of bare-negated `target-has-keyword` becomes \"against a\n * unit that is not a X or Y\" (attack-context voice), and a run of `not`-wrapped\n * `target-has-keyword` becomes \"(excluding X or Y units)\" (aura-subject voice,\n * matching the `applies_to` \"(excluding …)\" idiom). Either collapsed clause\n * attaches to the preceding clause with a space; all other operands join with \", \".\n */\nfunction joinAndLeadIns(operands: Condition[]): string {\n const parts: string[] = [];\n for (let i = 0; i < operands.length; ) {\n const op = operands[i];\n if (op.negated && op.type === \"target-has-keyword\") {\n const kws: string[] = [];\n while (i < operands.length && operands[i].negated && operands[i].type === \"target-has-keyword\") {\n kws.push(jstr((operands[i].parameters ?? {}).keyword));\n i++;\n }\n parts.push(negatedTargetKeywords(kws));\n continue;\n }\n if (notWrappedTargetKeyword(op) != null) {\n const kws: string[] = [];\n let kw: string | null;\n while (i < operands.length && (kw = notWrappedTargetKeyword(operands[i])) != null) {\n kws.push(kw);\n i++;\n }\n parts.push(excludedTargetKeywords(kws));\n continue;\n }\n if (!op.negated && op.type === \"unit-has-keyword\") {\n const kws: string[] = [];\n while (i < operands.length && !operands[i].negated && operands[i].type === \"unit-has-keyword\") {\n kws.push(jstr((operands[i].parameters ?? {}).keyword));\n i++;\n }\n parts.push(kws.length >= 2 ? `if the unit is a ${kws.join(\" \")} unit` : `if the unit has the ${kws[0]} keyword`);\n continue;\n }\n parts.push(conditionLeadIn(op));\n i++;\n }\n return parts.reduce(\n (acc, part) =>\n acc === \"\"\n ? part\n : part.startsWith(\"against \") || part.startsWith(\"(excluding \")\n ? `${acc} ${part}`\n : `${acc}, ${part}`,\n \"\"\n );\n}\n\n/**\n * A condition rendered as a natural lead-in clause (lowercase-initial — the\n * caller capitalizes at the sentence boundary). Falls back to `if <condition>`\n * for shapes without a dedicated framing.\n */\nfunction conditionLeadIn(c: Condition): string {\n // Compound nodes recurse so each part reads in its natural framing.\n if (c.operator === \"and\" && c.operands) return joinAndLeadIns(c.operands);\n if (c.operator === \"or\" && c.operands) return c.operands.map(conditionLeadIn).join(\" or \");\n if (c.operator === \"not\" && c.operands)\n return `unless ${c.operands.map((o) => conditionLeadIn(o).replace(/^if /, \"\")).join(\" or \")}`;\n // Negated keyword gates read as an exclusion clause, not the generic \"if not …\".\n if (c.negated && c.type === \"target-has-keyword\")\n return negatedTargetKeywords([jstr((c.parameters ?? {}).keyword)]);\n if (c.negated && c.type === \"unit-has-keyword\")\n return `unless the unit has the ${jstr((c.parameters ?? {}).keyword)} keyword`;\n if (c.negated) return `if ${describeCondition(c)}`;\n\n const p = c.parameters ?? {};\n switch (c.type) {\n case \"phase-is\":\n return `during the ${titleCase(jstr(p.phase))} phase`;\n case \"is-attached\":\n return `after being attached to a ${p.keyword ? `${jstr(p.keyword)} ` : \"\"}unit`;\n case \"timing-is\":\n return describeTiming(p.timing);\n case \"player-turn-is\": {\n const t = jstr(p.turn);\n const phrase =\n t === \"your-turn\" || t === \"your\" || t === \"own\"\n ? \"your\"\n : t === \"opponent-turn\" || t === \"opponent\"\n ? \"the opponent's\"\n : \"either player's\";\n return `in ${phrase} turn`;\n }\n case \"model-is-leader\":\n return \"while this model leads a unit\";\n case \"charged-this-turn\":\n return \"if the unit charged this turn\";\n case \"advanced-this-turn\":\n return \"if the unit Advanced this turn\";\n case \"disembarked-from-transport\":\n return \"if the unit disembarked from a Transport this turn\";\n case \"faction-rule-active\":\n return `while the ${titleCase(jstr(p.rule))} is active`;\n case \"battle-round\": {\n const bMin = p.min != null ? Number(p.min) : undefined;\n const bMax = p.max != null ? Number(p.max) : undefined;\n const bOrd = (n: number): string =>\n [\"zeroth\", \"first\", \"second\", \"third\", \"fourth\", \"fifth\"][n] ?? `${n}th`;\n if (bMin != null && bMax != null)\n return bMin === bMax ? `during the ${bOrd(bMin)} battle round` : `during battle rounds ${bMin}-${bMax}`;\n if (bMin != null) return `from the ${bOrd(bMin)} battle round onward`;\n if (bMax != null) return `during the first ${bMax} battle rounds`;\n return \"during the battle round\";\n }\n case \"token-count-at-or-above\":\n return `while the unit has ${jstr(p.threshold)}+ ${poolName(p.pool_id)}`;\n case \"remained-stationary\":\n return \"if the unit Remained Stationary\";\n case \"target-has-keyword\":\n return `against ${jstr(p.keyword)} targets`;\n case \"unit-has-keyword\":\n return `if the unit has the ${jstr(p.keyword)} keyword`;\n case \"is-battle-shocked\":\n return \"while the unit is Battle-shocked\";\n case \"unit-below-half-strength\":\n return p.subject === \"target\"\n ? \"while the target unit is below half strength\"\n : \"while the unit is below half strength\";\n case \"unit-below-starting-strength\":\n return \"while the unit is below its starting strength\";\n case \"has-lost-wounds\":\n return \"while the model has lost wounds\";\n case \"attack-is-type\":\n if (p.comparison === \"strength-greater-than-toughness\")\n return \"when this attack's Strength is greater than the target's Toughness\";\n if (p.comparison != null) return `when ${dekebab(jstr(p.comparison))}`;\n return `while making ${jstr(p.attack_type)} attacks`;\n case \"destroyed-by-attack-type\":\n return p.attack_type === \"any\"\n ? \"when destroyed by any attack\"\n : `when destroyed by a ${jstr(p.attack_type)} attack`;\n case \"opponent-unit-within-range\": {\n let where: string;\n if (p.weapon_name != null) where = `range of ${dekebab(jstr(p.weapon_name))}`;\n else if (p.range_multiplier != null) where = \"half range of its ranged weapons\";\n else {\n const range = p.range ?? p.range_inches ?? p.within_inches;\n where = range === \"engagement\" ? \"engagement range\" : `${jstr(range)}\"`;\n }\n return `while an enemy unit is within ${where}`;\n }\n case \"engagement-state\": {\n if (p.state == null) return \"while the unit is within Engagement Range\";\n const st = jstr(p.state);\n if (st === \"on-battlefield\") return \"while the unit is on the battlefield\";\n if (st === \"embarked\") return \"while the unit is embarked\";\n if (st === \"engaged\" || st === \"within-engagement-range\" || st === \"in-engagement-range\")\n return \"while the unit is within Engagement Range\";\n if (st === \"not-in-engagement-range\" || st === \"not-within-engagement-range\")\n return \"while the unit is not within Engagement Range\";\n return `while the unit is ${dekebab(st)}`;\n }\n case \"disposition-matches\": {\n const d = jstr(p.disposition);\n if (d === \"strategic-reserves\") return \"while the unit is in Strategic Reserves\";\n return `while the unit's disposition is ${dekebab(d)}`;\n }\n case \"fights-first\":\n return \"while the unit has the Fights First ability\";\n default:\n return `if ${describeCondition(c)}`;\n }\n}\n\n/** Humanized noun for a scaling `of` dimension (`enemy-models-in-range` → `enemy models`). */\nconst SCALE_OF: Record<string, string> = {\n \"enemy-models-in-range\": \"enemy models\",\n \"friendly-models-in-range\": \"friendly models\",\n \"models-in-bearer-unit\": \"models in this unit\",\n \"enemy-units-in-range\": \"enemy units\",\n \"wounds-lost\": \"wounds lost\",\n};\n\n/** A `scaling` block → trailing clause (\"for every 5 enemy models within 6\\\"\"). */\nfunction scalingClause(s: NonNullable<Effect[\"scaling\"]>): string {\n const ofText = SCALE_OF[jstr(s.of)] ?? dekebab(jstr(s.of));\n let c = `for every ${jstr(s.per)} ${ofText}`;\n if (s.within_inches != null) c += ` within ${jstr(s.within_inches)}\"`;\n if (s.round === \"up\") c += \" (rounding up)\";\n if (s.max_value != null) c += ` (to a maximum of ${jstr(s.max_value)})`;\n return c;\n}\n\n/** Movement-modifier passthrough enum → human phrase. */\nconst PASSTHROUGH_PHRASE: Record<string, string> = {\n \"non-titanic-models\": \"non-Titanic models\",\n \"friendly-vehicles\": \"friendly Vehicle models\",\n \"friendly-monsters\": \"friendly Monster models\",\n \"terrain-le-4\": 'terrain features 4\" or lower',\n \"tall-terrain\": 'terrain features over 4\"',\n \"all-terrain\": \"terrain features\",\n};\n\n/** Move-kind token → display noun (for `applies_to_moves`). */\nconst MOVE_NOUN: Record<string, string> = {\n normal: \"Normal\",\n advance: \"Advance\",\n \"fall-back\": \"Fall Back\",\n charge: \"Charge\",\n};\n\n/** Oxford-free conjunction list (\"a\", \"a and b\", \"a, b and c\"). */\nfunction andList(items: string[]): string {\n if (items.length <= 1) return items[0] ?? \"\";\n if (items.length === 2) return `${items[0]} and ${items[1]}`;\n return `${items.slice(0, -1).join(\", \")} and ${items[items.length - 1]}`;\n}\n\nfunction orList(items: string[]): string {\n if (items.length <= 1) return items[0] ?? \"\";\n if (items.length === 2) return `${items[0]} or ${items[1]}`;\n return `${items.slice(0, -1).join(\", \")} or ${items[items.length - 1]}`;\n}\n\n/** Trailing inches clause for a movement distance (int or dice string); \"\" when absent/zero. */\nfunction inchClause(dist: unknown): string {\n if (dist == null) return \"\";\n const s = diceCase(jstr(dist));\n return s === \"0\" ? \"\" : ` ${s}\"`;\n}\n\n/** Closed movement-modifier `modifier` → one lowercase-initial clause. */\nfunction movementClause(m: Record<string, unknown>, subj: string): string {\n const kind = m.move_type as string | undefined;\n const dist = m.distance;\n const inches = inchClause(dist);\n const ofUpTo = inches ? ` of up to${inches}` : \"\";\n const moveKinds = Array.isArray(m.applies_to_moves)\n ? andList((m.applies_to_moves as string[]).map((x) => MOVE_NOUN[x] ?? dekebab(x)))\n : null;\n\n // Pure traversal capability (no move kind): passthrough / vertical / ignore-vertical.\n if (kind == null) {\n const parts: string[] = [];\n if (Array.isArray(m.passthrough) && m.passthrough.length) {\n parts.push((m.passthrough as string[]).map((p) => PASSTHROUGH_PHRASE[p] ?? dekebab(p)).join(\" and \"));\n }\n let clause: string;\n if (parts.length) {\n const over = m.vertical_limit != null ? ` (up to ${jstr(m.vertical_limit)}\" high)` : \"\";\n clause = `${subj} can move over ${parts.join(\" and \")}${over} as though they were not there`;\n } else if (m.ignore_vertical) {\n clause = `${subj} ignores vertical distances when it moves`;\n } else {\n clause = `${subj} ${v(subj, \"has\")} a movement capability`;\n }\n if (m.excludes_keyword != null) clause += ` (excluding ${titleCase(jstr(m.excludes_keyword))} models)`;\n if (moveKinds) clause += `, during its ${moveKinds} moves`;\n return clause;\n }\n\n switch (kind) {\n case \"scout\":\n return `before the first battle round, ${subj} can make a Scout move${ofUpTo}`;\n case \"infiltrate\":\n return `${subj} ${v(subj, \"has\")} the Infiltrators ability`;\n case \"advance\":\n return `add ${diceCase(jstr(dist))} to ${ofOrPossessive(subj, \"Advance rolls\")}`;\n case \"pile-in\":\n return `${subj} can Pile In up to${inches || ' 3\"'}`;\n case \"consolidation\":\n return `${subj} can Consolidate up to${inches || ' 3\"'}`;\n case \"surge\":\n return `${subj} can make a Surge move${ofUpTo}`;\n case \"shoot-and-scoot\":\n return inches\n ? `${subj} can shoot and then make a Normal move${ofUpTo}`\n : `${subj} can Shoot and Scoot`;\n case \"reactive\": {\n const label = m.name != null ? ` (${jstr(m.name)})` : \"\";\n return `${subj} can make a Reactive move${ofUpTo}${label}`;\n }\n case \"redeploy\": {\n if (m.marker != null) {\n const mk = m.marker as Record<string, unknown>;\n if (mk.location != null) {\n const who = mk.unit_filter != null ? `${jstr(mk.unit_filter)} units` : \"units\";\n return `${who} can be set up on ${jstr(mk.location)}`;\n }\n const what = mk.affected != null ? jstr(mk.affected) : \"markers\";\n return `${what} can be repositioned${inches}`;\n }\n if (m.to_reserves) {\n const n = m.max_units != null ? `up to ${jstr(m.max_units)} units` : subj;\n return `${n} can be placed into Strategic Reserves`;\n }\n return `${subj} can be redeployed${inches}`;\n }\n case \"normal\":\n default: {\n const n = Number(dist);\n if (!Number.isNaN(n) && n < 0)\n return `${ofOrPossessive(subj, \"Move characteristic\")} is reduced by ${Math.abs(n)}\"`;\n if (moveKinds) return `add${inches} to ${ofOrPossessive(subj, `${moveKinds} moves`)}`;\n return `${subj} can make a Normal move${ofUpTo}`;\n }\n }\n}\n\n/** Generic aura `modifier` → one lowercase-initial clause. */\nfunction auraClause(e: Effect, m: Record<string, unknown>, ctx: Ctx): string {\n // Range-extension of a named aura (e.g. Gift of Poxes: contagion +3\").\n if (m.range_bonus != null) {\n const named = m.of != null ? `${titleCase(jstr(m.of))} ` : \"\";\n return `the range of this model's ${named}abilities is increased by ${jstr(m.range_bonus)}\"`;\n }\n const range = m.range;\n const rangeText = Array.isArray(range)\n ? `${(range as number[]).map((r) => `${r}\"`).join(\"/\")} (by battle round)`\n : range != null\n ? `${jstr(range)}\"`\n : null;\n const who = e.target === \"friendly-within-aura\" ? \"each friendly unit\" : \"each enemy unit\";\n const within = rangeText != null ? `${who} within ${rangeText}` : who;\n if (m.effect != null) {\n return `${within} ${describeEffectInline(m.effect as Effect, { ...ctx })}`;\n }\n return `${within} is affected`;\n}\n\n/**\n * Single-clause translation for leaf effects (lowercase-initial, no period),\n * with any `scaling` block woven on as a trailing \"for every …\" clause.\n */\nexport function describeEffectInline(e: Effect, ctx: Ctx = {}): string {\n const base = describeEffectInlineBase(e, ctx);\n return e.scaling ? `${base} ${scalingClause(e.scaling)}` : base;\n}\n\n/** Resurrection `placement` modifier → a \"where it is set up\" clause. */\nfunction resurrectionPlacement(placement: unknown): string {\n if (placement == null) return \"\";\n switch (jstr(placement)) {\n case \"deep-strike\":\n return \"using its Deep Strike ability\";\n case \"battlefield-edge\":\n return \"at a battlefield edge\";\n case \"closest-to-destruction\":\n return \"as close as possible to where it was destroyed\";\n case \"unengaged\":\n return \"not within Engagement Range of any enemy units\";\n default:\n return `via ${dekebab(jstr(placement))}`;\n }\n}\n\n/** Resurrection `timing` modifier → a \"when it is set up\" clause. */\nfunction resurrectionTiming(timing: unknown): string {\n if (timing == null) return \"\";\n switch (jstr(timing)) {\n case \"next-movement-phase\":\n return \"in your next Movement phase\";\n case \"end-of-phase\":\n return \"at the end of the phase\";\n default:\n return dekebab(jstr(timing));\n }\n}\n\n/** The leaf/container switch; {@link describeEffectInline} wraps it to append scaling. */\n/**\n * Render a dice-pool option requirement as a noun phrase: `pair of 4+`, or, for an\n * `any_of` set (a blessing that triggers on a double of X OR a triple of Y — World\n * Eaters Blessings of Khorne), the alternatives joined with \" or \":\n * `pair of 6+ or triple of 3+`. The single-requirement output is byte-identical to\n * the pre-`any_of` phrasing (no leading article) so existing goldens don't move.\n */\nfunction describeRequirement(req: unknown): string {\n const one = (r: { type?: unknown; min_value?: unknown } | undefined) =>\n `${jstr(r?.type)} of ${jstr(r?.min_value)}+`;\n const anyOf = (req as { any_of?: unknown } | undefined)?.any_of;\n if (Array.isArray(anyOf)) return anyOf.map(one).join(\" or \");\n return one(req as { type?: unknown; min_value?: unknown } | undefined);\n}\n\nfunction describeEffectInlineBase(e: Effect, ctx: Ctx = {}): string {\n const m = e.modifier ?? {};\n const subj = subject(e.target, ctx);\n\n switch (e.type) {\n case \"stat-modifier\": {\n const scope = m.attack_type ? ` (${jstr(m.attack_type)})` : \"\";\n if (m.stat == null) return `modify ${ofOrPossessive(subj, \"characteristics\")}${scope}`;\n if (m.operation === \"set\")\n return `modify ${ofOrPossessive(subj, `${statName(m.stat)} characteristic`)} to ${jstr(m.value)}${scope}`;\n let val = m.value;\n let verb = m.operation === \"subtract\" || m.operation === \"worsen\" ? \"subtract\" : \"add\";\n const n = Number(val); // a negative value flips the verb so we never say \"add -1\"\n if (!Number.isNaN(n) && n < 0) {\n verb = verb === \"add\" ? \"subtract\" : \"add\";\n val = Math.abs(n);\n }\n const prep = verb === \"add\" ? \"to\" : \"from\";\n return `${verb} ${jstr(val)} ${prep} ${ofOrPossessive(subj, `${statName(m.stat)} characteristic`)}${scope}`;\n }\n case \"roll-modifier\": {\n const ctxNote = m.context ? ` (${jstr(m.context)})` : \"\";\n if (m.critical_on != null) {\n const crit = m.roll === \"wound\" ? \"Critical Wounds\" : \"Critical Hits\";\n return `${subj} ${v(subj, \"scores\")} ${crit} on ${rollName(m.roll)} rolls of ${jstr(m.critical_on)}+`;\n }\n if (m.operation === \"set\")\n return `${subj} can change ${rollName(m.roll)} rolls to a ${jstr(m.value)}`;\n if (m.value == null) return `${dekebab(jstr(m.operation))} ${ofOrPossessive(subj, `${rollName(m.roll)} rolls`)}${ctxNote}`;\n return `${subj} ${v(subj, \"gets\")} ${signed(m.operation, m.value)} to ${rollName(m.roll)} rolls${ctxNote}`;\n }\n case \"re-roll\": {\n const rn = jstr(m.roll);\n const which =\n rn === \"any\"\n ? m.subset === \"ones\"\n ? \"any roll of 1\"\n : \"any roll\"\n : m.subset === \"ones\"\n ? `a ${rollName(m.roll)} roll of 1`\n : `the ${rollName(m.roll)} roll`;\n return `you can re-roll ${which}`;\n }\n case \"mortal-wounds\": {\n const range = m.range ?? m.range_inches ?? ctx.rangeInches;\n const subjMW =\n e.target === \"enemy-within-aura\" && range != null\n ? `each enemy unit within ${jstr(range)}\"`\n : subj;\n const verb = subjMW.startsWith(\"each \") ? \"suffers\" : v(subjMW, \"suffers\");\n // Dice-pool form (e.g. \"roll six D6: for each 4+, that unit suffers 1\n // mortal wound\"): N dice rolled, each success worth `mortal_per_success`\n // mortal wounds. Distinct from a flat count — the amount IS the pool.\n if (m.mortal_per_success != null) {\n const per = jstr(m.mortal_per_success);\n const perNoun = per === \"1\" ? \"mortal wound\" : \"mortal wounds\";\n const hit = poolThreshold(jstr(m.comparison ?? \"gte\"), m.threshold);\n // Per-model pool: one die per model in this/the target unit (e.g.\n // \"roll one D6 for each model in this unit: for each 4+, …\").\n if (m.per_model != null) {\n const where = m.per_model === \"target\" ? \"the target unit\" : \"this unit\";\n return `roll one ${diceCase(m.dice)} for each model in ${where}: for each ${hit}, ${subjMW} ${verb} ${per} ${perNoun}`;\n }\n return `roll ${diceCase(m.dice)}: for each ${hit}, ${subjMW} ${verb} ${per} ${perNoun}`;\n }\n // Escalating table (\"on a 2-3, 1 mortal wound; on a 4-5, D3 ...\"): the\n // roll decides the amount, so render the rows, not \"a number of\".\n const table = (m.amount_table ?? m.table) as { roll?: unknown; amount?: unknown }[] | undefined;\n if (Array.isArray(table) && table.length) {\n const rows = table\n .map((r, i) => {\n const amt = diceCase(r.amount);\n const noun = amt === \"1\" ? \"mortal wound\" : \"mortal wounds\";\n return i === 0\n ? `on a ${jstr(r.roll)}, ${subjMW} ${verb} ${amt} ${noun}`\n : `on a ${jstr(r.roll)}, ${amt} ${noun}`;\n })\n .join(\"; \");\n return `roll one ${diceCase(m.dice ?? \"D6\")}: ${rows}`;\n }\n const a =\n m.count != null\n ? jstr(m.count)\n : m.amount != null\n ? jstr(m.amount)\n : m.dice != null\n ? diceCase(m.dice)\n : null;\n // Deadly-Demise-style triggers carry no count here — the amount is the\n // model's Deadly Demise rating, so describe the trigger instead of \"?\".\n if (a == null && m.trigger != null)\n return `when this model is destroyed, ${subjMW} ${verb} mortal wounds (${titleCase(jstr(m.trigger))})`;\n const amt = a ?? \"?\";\n const noun = amt === \"1\" ? \"mortal wound\" : \"mortal wounds\";\n return `${subjMW} ${verb} ${amt} ${noun}`;\n }\n case \"feel-no-pain\": {\n const vs = FNP_SCOPES[jstr(m.scope)] ?? \"\";\n return `${subj} ${v(subj, \"has\")} the Feel No Pain ${jstr(m.threshold)}+ ability${vs}`;\n }\n case \"ward\":\n return `${subj} ${v(subj, \"has\")} the Ward ${jstr(m.threshold ?? m.value)}+ ability`;\n case \"invulnerable-save\":\n return `${subj} ${v(subj, \"has\")} a ${jstr(m.invuln_sv ?? m.value ?? m.threshold)}+ invulnerable save`;\n case \"keyword-grant\": {\n let kw: string;\n if (m.anti_keyword != null) {\n kw = `[ANTI-${dekebab(jstr(m.anti_keyword)).toUpperCase()} ${jstr(m.anti_threshold ?? \"?\")}+]`;\n } else if (Array.isArray(m.keywords)) {\n kw = m.keywords.map(bracketKeyword).join(\" and \");\n } else if (m.value != null) {\n // Rated keyword carried structurally (Sustained Hits N / Rapid Fire N / Melta N).\n kw = `[${dekebab(jstr(m.keyword ?? \"keywords\")).toUpperCase()} ${jstr(m.value)}]`;\n } else {\n kw = bracketKeyword(m.keyword ?? \"keywords\");\n }\n if (m.weapon_name != null) return `${ofOrPossessive(subj, jstr(m.weapon_name))} gains ${kw}`;\n if (m.weapon_type != null) return `${ofOrPossessive(subj, `${jstr(m.weapon_type)} weapons`)} gain ${kw}`;\n return `${ofOrPossessive(subj, \"weapons\")} gain ${kw}`;\n }\n case \"ability-grant\": {\n const grant = m.grant_type ?? m.ability_id;\n // Reserves-arrival grant slugs read as full clauses in GW voice — the\n // generic \"gains the X ability\" form would bury the mechanic in a name.\n switch (jstr(grant)) {\n case \"must-start-in-reserves\":\n return `${subj} must start the battle in Reserves`;\n case \"reinforcement-any-of-turns-1-to-3\":\n return `${subj} can be set up in the Reinforcements step of your first, second or third Movement phase, regardless of any mission rules`;\n case \"reserves-limit-exempt\":\n return `${subj} ${v(subj, \"is\")} not counted towards any limits on the number of units that can start the battle in Reserves`;\n case \"reserves-limit-exempt-with-cargo\":\n return `neither ${subj} nor any units embarked within it are counted towards any limits on the number of units that can start the battle in Reserves`;\n case \"may-start-in-reserves\":\n return `${subj} can start the battle in Reserves`;\n case \"battle-round-plus-one-for-arrival\":\n return `${subj} ${v(subj, \"treats\")} the current battle round number as being one higher than it actually is when arriving from Reserves`;\n case \"flavor-text\":\n return \"this ability is a descriptive note (no additional rules effect)\";\n case \"crew-tokens\": {\n const n = jstr(m.count ?? 1);\n const token = m.token_name != null ? `${jstr(m.token_name)} tokens` : \"Crew tokens\";\n return `place ${n} ${token} next to ${subj} when ${pronoun(subj)=== \"their\" ? \"they are\" : \"it is\"} first set up, removing one each time ${subj} ${v(subj, \"loses\")} a wound (the model itself represents ${pronoun(subj)} final wound)`;\n }\n }\n const cap = m.capacity != null ? ` (${jstr(m.capacity)})` : \"\";\n // A grant's `timing` modifier scopes when the granted ability applies.\n const when = m.timing != null ? `${describeTiming(jstr(m.timing))}, ` : \"\";\n return grant != null\n ? `${when}${subj} ${v(subj, \"gains\")} the ${grantLabel(jstr(grant))} ability${cap}`\n : `${when}${subj} ${v(subj, \"gains\")} an ability${cap}`;\n }\n case \"movement-modifier\":\n return movementClause(m, subj);\n case \"aura\":\n return auraClause(e, m, ctx);\n case \"damage-reduction\": {\n const r = jstr(m.reduction ?? m.amount ?? m.value);\n const how =\n r === \"half\"\n ? \"halve the Damage of that attack\"\n : r === \"to-zero\"\n ? \"reduce the Damage of that attack to 0\"\n : `reduce the Damage of that attack by ${r}`;\n return `each time an attack targets ${subj}, ${how}`;\n }\n case \"resurrection\": {\n const count = m.count != null ? diceCase(m.count) : \"1\";\n // `type: \"wounds\"` is a heal (regained wounds), not a revive.\n if (m.type === \"wounds\" || m.wounds != null) {\n const healed = m.wounds != null ? diceCase(m.wounds) : count;\n const noun = healed === \"1\" ? \"lost wound\" : \"lost wounds\";\n return `${subj} ${v(subj, \"regains\")} up to ${healed} ${noun}`;\n }\n const wounds = m.wounds_remaining ?? \"full\";\n const place = resurrectionPlacement(m.placement);\n const when = resurrectionTiming(m.timing);\n const tail = [place, when].filter((s) => s.length > 0).join(\" \");\n const tailClause = tail ? ` ${tail}` : \"\";\n // A self/bearer resurrection reads as the model returning, not \"returning a model to itself\".\n if (e.target === \"self\" || e.target === \"bearer\") {\n return `${subj} ${v(subj, \"is\")} set up again${tailClause} with ${jstr(wounds)} wounds remaining`;\n }\n const noun = count === \"1\" ? \"destroyed model\" : \"destroyed models\";\n return `return ${count} ${noun} to ${subj} with ${jstr(wounds)} wounds${tailClause}`;\n }\n case \"model-destruction\": {\n const count = m.count != null ? diceCase(m.count) : \"1\";\n const noun = count === \"1\" ? \"model\" : \"models\";\n return `destroy ${count} ${noun} in ${subj}`;\n }\n case \"rule-state\":\n return describeRuleState(m, subj);\n case \"cp-gain\":\n return `you gain ${jstr(m.amount ?? 1)}CP`;\n case \"cp-on-destroy\": {\n const kw = m.enemy_keyword != null ? `${jstr(m.enemy_keyword)} model` : \"enemy model\";\n const who = subj === \"this model\" ? \"this model's unit\" : subj;\n return `each time ${who} destroys a ${kw}, you gain ${jstr(m.amount ?? 1)}CP`;\n }\n case \"battle-shock-test\":\n return `${subj} ${v(subj, \"takes\")} Battle-shock tests on ${diceCase(m.dice)} instead of 2D6`;\n case \"flyover\": {\n const hit = poolThreshold(jstr(m.comparison ?? \"gte\"), m.threshold);\n const per = jstr(m.mortal_wounds ?? 1);\n const perNoun = per === \"1\" ? \"mortal wound\" : \"mortal wounds\";\n return `each time this model ends a Normal move, select one enemy unit it moved over and roll ${diceCase(m.dice)}: for each ${hit}, that unit suffers ${per} ${perNoun}`;\n }\n case \"cp-refund\": {\n const strat = m.stratagem != null ? `the ${titleCase(jstr(m.stratagem))} Stratagem` : \"one Stratagem\";\n return `you can use ${strat} on ${subj} for 0CP`;\n }\n case \"modifier-immunity\": {\n const scope = jstr(m.scope);\n if (scope === \"enemy-stratagems\") return `${subj} cannot be affected by enemy Stratagems`;\n if (scope === \"enemy-abilities\") return `${subj} cannot be affected by enemy abilities`;\n const exc =\n Array.isArray(m.exclude) && m.exclude.length\n ? ` (except ${(m.exclude as unknown[]).map((s) => statName(jstr(s))).join(\" and \")})`\n : \"\";\n return `${subj} ${v(subj, \"ignores\")} any modifiers to ${pronoun(subj)} characteristics${exc}`;\n }\n case \"stratagem-cost-modifier\": {\n const which = m.stratagem != null ? `the ${titleCase(jstr(m.stratagem))} Stratagem` : \"Stratagems\";\n const whose = m.applies_to === \"stratagems-used-by-bearer\" ? `used by ${subj}` : `that target ${subj}`;\n const verb = m.stratagem != null ? \"costs\" : \"cost\";\n const val = m.operation === \"set-to\" ? `${jstr(m.set_to)}CP` : `${jstr(m.amount ?? 1)} more CP`;\n return `${which} ${whose} ${verb} ${val}`;\n }\n case \"targeting-permission\": {\n const at = m.attack_type === \"ranged\" ? \"ranged attacks\" : \"attacks\";\n const r = m.range != null ? `${jstr(m.range)}\"` : \"?\";\n let gate: string;\n switch (jstr(m.gate)) {\n case \"within-range\":\n gate = `the attacking unit is within ${r}`;\n break;\n case \"closest-eligible\":\n gate = \"it is the closest eligible target\";\n break;\n case \"closest-or-within-range\":\n gate = `it is the closest eligible target or the attacking unit is within ${r}`;\n break;\n default:\n gate = dekebab(jstr(m.gate));\n }\n return `${subj} can only be selected as the target of ${at} if ${gate}`;\n }\n case \"resource-gain\":\n return `you gain ${jstr(m.amount ?? m.value)} ${poolName(m.pool_id ?? m.resource)}`;\n case \"resource-spend\": {\n const base = `spend ${jstr(m.amount ?? m.value)} ${poolName(m.pool_id ?? m.resource)}`;\n const cap = m.cap as Record<string, unknown> | undefined;\n if (cap != null && cap.count != null && cap.per != null)\n return `${base} (no more than ${jstr(cap.count)} per ${jstr(cap.per)})`;\n return base;\n }\n case \"pool-add-die\": {\n const pool = poolName(m.pool_id);\n const rolled = m.value === \"rolled\";\n if (m.count_per_pool != null) {\n // One die per point currently in the counting pool (Icon of Khorne).\n const per = poolName(m.count_per_pool);\n const perPlural = per.endsWith(\"s\") ? per : `${per}s`;\n const shown = m.value === \"highest\" ? \"the highest result\" : jstr(m.value);\n const die = rolled ? \"one rolled D6\" : `one die showing ${shown}`;\n const tail = m.consumes_pool ? `, after which all your ${perPlural} are lost` : \"\";\n return `add ${die} to your ${pool} for each ${per} you have${tail}`;\n }\n const cnt = m.count != null ? diceCase(m.count) : \"1\";\n if (rolled) {\n const dice = cnt === \"1\" ? \"a rolled D6\" : `${cnt} rolled D6`;\n return `add ${dice} to your ${pool}`;\n }\n const val = m.value === \"highest\" ? \"the highest result\" : jstr(m.value);\n const dice = cnt === \"1\" ? \"a die\" : `${cnt} dice`;\n return `add ${dice} showing ${val} to your ${pool}`;\n }\n case \"replace-roll-from-pool\": {\n const rolls = Array.isArray(m.rolls) ? (m.rolls as unknown[]).map((r) => dekebab(jstr(r))) : [];\n return `discard a die from your ${poolName(m.pool_id)} and substitute its value for a ${orList(rolls)} roll`;\n }\n case \"leadership-modifier\": {\n const test = m.test != null ? `${testName(m.test)} test` : null;\n if (test != null && m.operation == null) return `${subj} must take a ${test}`;\n if (test != null && m.operation === \"re-roll\") return `${subj} can re-roll ${testName(m.test)} tests`;\n if (test != null && m.value != null)\n return `${m.operation === \"add\" ? \"add\" : \"subtract\"} ${jstr(m.value)} ${m.operation === \"add\" ? \"to\" : \"from\"} the ${testName(m.test)} test of ${subj}`;\n if (m.operation != null && m.value != null)\n return `${m.operation === \"add\" || m.operation === \"improve\" ? \"add\" : \"subtract\"} ${jstr(m.value)} ${m.operation === \"add\" || m.operation === \"improve\" ? \"to\" : \"from\"} the Leadership characteristic of ${subj}`;\n return `modify ${ofOrPossessive(subj, \"Leadership characteristic\")}`;\n }\n case \"fight-first\":\n return `${subj} ${v(subj, \"has\")} the Fights First ability`;\n case \"fight-last\":\n return `${subj} ${v(subj, \"has\")} the Fights Last ability`;\n case \"fight-on-death\":\n return subj === \"this model\"\n ? `each time this model is destroyed, it can fight before being removed from play`\n : `each time a model in ${subj} is destroyed, it can fight before being removed from play`;\n case \"shoot-on-death\":\n return subj === \"this model\"\n ? `each time this model is destroyed, it can shoot before being removed from play`\n : `each time a model in ${subj} is destroyed, it can shoot before being removed from play`;\n case \"unit-keyword\": {\n const name = titleCase(jstr(m.keyword_id));\n const val = m.value != null ? ` ${jstr(m.value)}` : \"\";\n return `${subj} has the ${name}${val} ability`;\n }\n case \"unit-keyword-grant\":\n // Without a `to_keywords` filter the grant lands on the effect subject.\n return m.to_keywords != null\n ? `${jstr(m.to_keywords)} units gain the ${jstr(m.keyword)} keyword`\n : `${subj} ${v(subj, \"gains\")} the ${jstr(m.keyword)} keyword`;\n case \"deep-strike\":\n return m.min_distance != null\n ? `${subj} ${v(subj, \"has\")} the Deep Strike ability and can be set up more than ${jstr(m.min_distance)}\" from enemy models`\n : `${subj} has the Deep Strike ability`;\n case \"strategic-reserves-arrival\":\n return `${subj} can arrive from Strategic Reserves regardless of mission rules`;\n case \"remove-battle-shock\":\n return `${subj} ${v(subj, \"is\")} no longer Battle-shocked`;\n case \"auto-result\": {\n const r = m.result;\n if (m.test != null) {\n if (r === \"pass\") return `${subj} automatically ${v(subj, \"passes\")} ${testName(m.test)} tests`;\n if (r === \"fail\") return `${subj} automatically ${v(subj, \"fails\")} ${testName(m.test)} tests`;\n return `${subj} ${v(subj, \"treats\")} ${testName(m.test)} tests as ${jstr(r)}`;\n }\n const roll = rollName(m.roll);\n if (r === \"pass\") return `${ofOrPossessive(subj, `${roll} rolls`)} automatically succeed`;\n if (r === \"fail\") return `${ofOrPossessive(subj, `${roll} rolls`)} automatically fail`;\n return `${ofOrPossessive(subj, `${roll} rolls`)} count as ${jstr(r)}`;\n }\n case \"firing-deck\":\n return `${subj} ${v(subj, \"has\")} Firing Deck ${jstr(m.value)}`;\n case \"disembark-after-move\": {\n if (m.after == null) return `units can disembark from ${subj} after it has moved`;\n const who =\n m.requires_keyword != null\n ? `units with the ${titleCase(jstr(m.requires_keyword))} ability`\n : \"units\";\n const when =\n m.after === \"advance\"\n ? \"after it has Advanced\"\n : m.after === \"deployment\"\n ? \"after it has been set up on the battlefield\"\n : m.after === \"before-move\"\n ? \"before it moves\"\n : \"after it has made a Normal move\";\n // `mandatory`: a Reserves-transport whose cargo MUST disembark on arrival.\n const verb = m.mandatory ? \"must immediately disembark\" : \"can disembark\";\n const away =\n m.min_enemy_distance != null\n ? `, and must be set up more than ${jstr(m.min_enemy_distance)}\" away from all enemy models`\n : \"\";\n const counts = m.counts_as_normal_move ? \"; such units count as having made a Normal move\" : \"\";\n // A deployment-step disembark has no meaningful charge window; only an\n // explicit `can_charge` renders the charge tail there.\n const charge = m.can_charge\n ? \", and are still eligible to declare a charge this turn\"\n : m.after === \"deployment\" && m.can_charge == null\n ? \"\"\n : \", but cannot declare a charge this turn\";\n return `${who} ${verb} from ${subj} ${when}${away}${counts}${charge}`;\n }\n case \"disembark\": {\n const where = m.distance != null ? ` and be set up wholly within ${jstr(m.distance)}\" of the transport` : \"\";\n const eng = m.allow_engagement_range ? \", even within Engagement Range of enemy units\" : \"\";\n return `${subj} can disembark${where}${eng}`;\n }\n case \"unit-attachment\": {\n if (m.mandatory) return `${subj} must be attached to a Leader, or it counts as destroyed`;\n const led = m.led_by != null ? ` led by a ${titleCase(jstr(m.led_by))} model` : \"\";\n return `at the start of the Declare Battle Formations step, ${subj} can join one friendly unit${led}, becoming part of that Bodyguard unit`;\n }\n case \"fallback-and-act\": {\n const acts = m.can_charge === true ? \"shoot and declare a charge\" : \"shoot\";\n return `${subj} is eligible to ${acts} in a turn in which it Fell Back`;\n }\n case \"fight-eligibility-extension\": {\n const r = jstr(m.range);\n return (\n `when determining which models in ${subj} are eligible to fight, ` +\n `models within ${r}\" of one or more enemy models are eligible ` +\n `and can target enemy units within ${r}\"`\n );\n }\n case \"engagement-passthrough\":\n return m.no_end_in_engagement\n ? `${subj} can move through enemy models, but cannot end that move within Engagement Range of any enemy unit`\n : `${subj} can move through enemy models`;\n case \"attack-restriction\":\n return describeAttackRestriction(m, subj);\n case \"objective-control-modifier\": {\n if (m.sticky)\n return `${subj} ${v(subj, \"retains\")} control of objective markers even after no models remain in range, until the enemy retakes them (sticky objectives)`;\n if (m.operation === \"halve\") return `halve the Objective Control characteristic of ${subj}`;\n if (m.operation != null)\n return `${subj} ${v(subj, \"gets\")} ${signed(m.operation, m.value)} to ${pronoun(subj)} Objective Control characteristic`;\n return `modify ${ofOrPossessive(subj, \"Objective Control characteristic\")}`;\n }\n case \"bs-modifier\":\n return `${subj} ${v(subj, \"gets\")} ${signed(m.operation, m.value)} to Ballistic Skill`;\n case \"charge-roll-modifier\":\n return `${subj} ${v(subj, \"gets\")} ${signed(m.operation, m.value)} to Charge rolls`;\n case \"terrain-area-tag\":\n return m.tag != null\n ? `the terrain area is marked as ${dekebab(jstr(m.tag))}`\n : \"the terrain area is marked\";\n case \"objective-tag\":\n return m.tag != null\n ? `the objective is marked as ${dekebab(jstr(m.tag))}`\n : \"the objective is marked\";\n case \"unit-tag\":\n return m.tag != null\n ? `${subj} ${v(subj, \"is\")} marked as ${dekebab(jstr(m.tag))}`\n : `${subj} ${v(subj, \"is\")} marked`;\n\n // Container types — inline forms.\n case \"conditional\":\n return `${conditionLeadIn(e.condition ?? {})}, ${describeEffectInline(e.effect ?? {}, ctx)}`;\n case \"sequence\":\n return (e.steps ?? []).map((s) => describeEffectInline(s, ctx)).join(\"; \");\n case \"choice\": {\n const label = e.choice_label ? ` (${titleCase(e.choice_label)})` : \"\";\n return `select one of the following${label}: ${(e.options ?? []).map((o) => describeEffectInline(o, ctx)).join(\" / \")}`;\n }\n case \"dice-gated\": {\n const comp = formatComparison(e.comparison ?? \"gte\", e.threshold);\n const success = e.on_success ? describeEffectInline(e.on_success, ctx) : \"nothing happens\";\n const fail = e.on_fail ? `; otherwise, ${describeEffectInline(e.on_fail, ctx)}` : \"\";\n return `roll one ${diceCase(e.dice)}: on ${comp}, ${success}${fail}`;\n }\n case \"dice-pool-allocation\": {\n const pool = e.pool ? `${jstr(e.pool.count)}${jstr(e.pool.die)}` : \"your dice pool\";\n const opts = (e.options ?? [])\n .map((o) => `${jstr(o.name)} (requires ${describeRequirement(o.requirement)}): ${describeEffectInline(o.effect ?? {}, ctx)}`)\n .join(\" / \");\n return `roll ${pool}: ${opts}`;\n }\n case \"select-units\":\n return `select ${selectUnitsSubject(e.selector)}: ${describeEffectInline(e.effect ?? {}, ctx)}`;\n case \"designate-target\": {\n const sel = (typeof e.select === \"object\" && e.select ? e.select : {}) as {\n scope?: string;\n timing?: string;\n };\n const scopeNoun = sel.scope === \"friendly-unit\" ? \"friendly\" : \"enemy\";\n const desig = e.designation ? designationLabel(e.designation) : \"\";\n const selectLead = sel.timing ? `${describeTiming(sel.timing)}, select` : \"select\";\n const { trail: durTrail } = durationClauses(e.duration);\n const when = e.applies?.to === \"target\" ? \"while it is your target\" : \"each time a friendly unit attacks it\";\n const whenClause = durTrail ? `${durTrail}, ${when}` : when;\n return `${selectLead} one ${scopeNoun} unit${desig}; ${whenClause}, ${describeEffectInline(e.applies?.effect ?? {}, ctx)}`;\n }\n case \"stance-select\":\n return `select one: ${(e.options ?? []).map((o) => `${jstr(o.name)} (${describeEffectInline(o.effect ?? {}, ctx)})`).join(\" / \")}`;\n case \"risk-reward\":\n return `take a ${testName(e.risk?.test)} test (on a failure, ${e.risk?.on_fail ? describeEffectInline(e.risk.on_fail, ctx) : \"suffer a consequence\"}), then ${describeEffectInline(e.reward ?? {}, ctx)}`;\n case \"issue-orders\":\n return `issue Orders, each one of: ${(e.options ?? []).map((o) => jstr(o.name)).join(\" / \")}`;\n\n default:\n return `[${e.type ?? \"unknown\"}]`;\n }\n}\n\n/** Per-slug GW-prose for `attack-restriction` (reads `restriction` or `restriction_type`). */\n/**\n * `rule-state`: a named rule switched on/off for the subject. The `faction-rule`\n * + `suppressed` path reproduces the legacy `forgo-faction-rule` phrasing\n * verbatim (Angron \"Reborn in Blood\"); the core-rule slugs get natural\n * action/benefit phrasing; keyword/ability kinds fall back to a regular\n * gains/loses-the-X clause. Phrasing is pinned byte-for-byte across the four\n * language ports by the conformance corpus.\n */\nfunction describeRuleState(m: Record<string, unknown>, subj: string): string {\n const dir = jstr(m.direction);\n const kind = jstr(m.rule_kind);\n const rule = jstr(m.rule);\n const granted = dir === \"granted\";\n\n // Faction-rule suppression keeps the original \"forgo activating …\" wording.\n if (kind === \"faction-rule\" && !granted) {\n const scope = m.scope != null ? ` this ${dekebab(jstr(m.scope))}` : \"\";\n let cost = \"\";\n const c = m.cost;\n if (c != null && typeof c === \"object\" && (c as Record<string, unknown>).dice != null) {\n const cc = c as Record<string, unknown>;\n const from =\n cc.from == null\n ? \"\"\n : jstr(cc.from) === rule\n ? \" from that roll\"\n : ` from the ${titleCase(jstr(cc.from))} roll`;\n cost = `, using a ${dekebab(jstr(cc.dice))}${from}`;\n }\n return `forgo activating ${titleCase(rule)}${scope}${cost}`;\n }\n if (kind === \"faction-rule\") return `${subj} ${v(subj, \"gains\")} ${titleCase(rule)}`;\n\n // Natural phrasing for the closed core-rule slug vocabulary.\n switch (rule) {\n case \"benefit-of-cover\":\n return granted ? `${subj} ${v(subj, \"has\")} the Benefit of Cover` : `${subj} cannot benefit from Cover`;\n case \"charge\":\n return granted ? `${subj} can charge` : `${subj} cannot charge`;\n case \"advance\":\n return granted ? `${subj} can Advance` : `${subj} cannot Advance`;\n case \"fall-back\":\n return granted ? `${subj} can Fall Back` : `${subj} cannot Fall Back`;\n case \"ordered-retreat\":\n // GW frames this lever by its effect on Desperate Escape tests: suppressing\n // Ordered Retreat forces the tests; granting it (e.g. while Battle-shocked)\n // exempts the unit. Mirrors the `desperate-escape` slug wording.\n return granted\n ? `${subj} ${v(subj, \"is\")} not affected by Desperate Escape tests`\n : `${subj} must take Desperate Escape tests`;\n case \"fire-overwatch\":\n return granted ? `${subj} can fire Overwatch` : `${subj} cannot fire Overwatch`;\n case \"overwatch-against-bearer\":\n return granted ? `your opponent can target ${subj} with Overwatch` : `your opponent cannot target ${subj} with Overwatch`;\n case \"desperate-escape\":\n return granted\n ? `${subj} must take Desperate Escape tests`\n : `${subj} ${v(subj, \"is\")} not affected by Desperate Escape tests`;\n }\n\n // Ability / keyword kinds (every core-rule slug is cased above): regular clause.\n const noun = kind === \"keyword\" ? \"keyword\" : \"ability\";\n return granted\n ? `${subj} ${v(subj, \"gains\")} the ${titleCase(rule)} ${noun}`\n : `${subj} ${v(subj, \"loses\")} the ${titleCase(rule)} ${noun}`;\n}\n\nfunction describeAttackRestriction(m: Record<string, unknown>, subj: string): string {\n // Some entries express the restriction as a forbidden action (`attack_type: charge`).\n if (m.restriction == null && m.restriction_type == null && m.attack_type != null)\n return `${subj} cannot ${jstr(m.attack_type)}`;\n const slug = jstr(m.restriction ?? m.restriction_type);\n const range = m.range != null ? jstr(m.range) : null;\n switch (slug) {\n case \"worsen-incoming-ap\":\n return `each time an attack targets ${subj}, worsen the Armour Penetration of that attack by ${jstr(m.value ?? 1)}`;\n case \"targeting-range-limit\":\n return `${subj} can only target enemy units within ${range ?? \"?\"}\"`;\n case \"reinforcement-denial\":\n return `enemy units cannot be set up from Reserves within ${range ?? \"?\"}\" of ${subj}`;\n case \"must-be-warlord\":\n return \"this model must be your Warlord\";\n case \"cannot-be-warlord\":\n return \"this model cannot be your Warlord\";\n case \"unique-unit-limit\":\n return \"you can include only one of this unit in your army\";\n case \"no-charge\":\n return `${subj} cannot charge`;\n default:\n return `${subj}: ${dekebab(slug)}${range != null ? ` (within ${range}\")` : \"\"}`;\n }\n}\n\n/**\n * Block translation of a *container* effect tree (multi-line, two-space\n * indentation). Leaves and conditionals are handled inline by the caller.\n */\nexport function describeEffect(e: Effect, depth: number = 0, ctx: Ctx = {}): string {\n const indent = \" \".repeat(depth);\n const arrow = depth > 0 ? \"-> \" : \"\";\n\n switch (e.type) {\n case \"conditional\": {\n const inner = e.effect ?? {};\n if (CONTAINER_TYPES.has(inner.type ?? \"\")) {\n return `${indent}${capitalize(conditionLeadIn(e.condition ?? {}))}:\\n` + describeEffect(inner, depth + 1, ctx);\n }\n return `${indent}${arrow}${capitalize(conditionLeadIn(e.condition ?? {}))}, ${describeEffectInline(inner, ctx)}.`;\n }\n case \"sequence\":\n return (e.steps ?? [])\n .map((s) => describeEffect(s, depth, ctx))\n .join(\"\\n\");\n case \"choice\": {\n const label = e.choice_label ? ` (${titleCase(e.choice_label)})` : \"\";\n return (\n `${indent}Select one of the following${label}:\\n` +\n (e.options ?? []).map((o) => `${indent} - ${capitalize(describeEffectInline(o, ctx))}.`).join(\"\\n\")\n );\n }\n case \"dice-gated\": {\n const comp = formatComparison(e.comparison ?? \"gte\", e.threshold);\n const success = e.on_success ? describeEffectInline(e.on_success, ctx) : \"nothing happens\";\n const fail = e.on_fail ? `; otherwise, ${describeEffectInline(e.on_fail, ctx)}` : \"\";\n return `${indent}${arrow}Roll one ${diceCase(e.dice)}: on ${comp}, ${success}${fail}.`;\n }\n case \"dice-pool-allocation\": {\n const pool = e.pool ? `${jstr(e.pool.count)}${jstr(e.pool.die)}` : \"your dice pool\";\n const upTo =\n e.max_activations != null\n ? ` to activate up to ${jstr(e.max_activations)} of the following`\n : \" to activate the following\";\n const lines = [`${indent}${arrow}Roll ${pool}; allocate dice${upTo}:`];\n for (const opt of e.options ?? []) {\n lines.push(\n `${indent} - ${jstr(opt.name)} (requires ${describeRequirement(opt.requirement)}): ${describeEffectInline(opt.effect ?? {}, ctx)}.`\n );\n }\n return lines.join(\"\\n\");\n }\n case \"select-units\": {\n const inner = e.effect ?? {};\n const lead = `Select ${selectUnitsSubject(e.selector)}`;\n if (CONTAINER_TYPES.has(inner.type ?? \"\")) {\n return `${indent}${arrow}${lead}:\\n` + describeEffect(inner, depth + 1, ctx);\n }\n return `${indent}${arrow}${lead}: ${describeEffectInline(inner, ctx)}.`;\n }\n case \"designate-target\": {\n const sel = (typeof e.select === \"object\" && e.select ? e.select : {}) as {\n scope?: string;\n timing?: string;\n };\n const scopeNoun = sel.scope === \"friendly-unit\" ? \"friendly\" : \"enemy\";\n const desig = e.designation ? designationLabel(e.designation) : \"\";\n const applies = e.applies ?? {};\n const inner = applies.effect ?? {};\n // The mark's timing and duration are content: \"After this unit shoots,\n // select …. Until your next Command phase, each time …\".\n const selectLead = sel.timing ? `${capitalize(describeTiming(sel.timing))}, select` : \"Select\";\n const { trail: durTrail } = durationClauses(e.duration);\n const when =\n applies.to === \"target\"\n ? \"while it is your target\"\n : \"each time a friendly unit makes an attack against it\";\n const whenClause = durTrail ? `${capitalize(durTrail)}, ${when}` : capitalize(when);\n const head = `${indent}${arrow}${selectLead} one ${scopeNoun} unit${desig}. ${whenClause}`;\n if (CONTAINER_TYPES.has(inner.type ?? \"\")) {\n return `${head}:\\n` + describeEffect(inner, depth + 1, ctx);\n }\n return `${head}, ${describeEffectInline(inner, ctx)}.`;\n }\n case \"stance-select\": {\n const when = typeof e.select === \"string\" ? capitalize(eventClause(e.select)) : \"At the start of your turn\";\n const consum = e.mode === \"consumable\" ? \" (each may be chosen once per battle)\" : \"\";\n const lines = [`${indent}${arrow}${when}, select one${consum}:`];\n for (const opt of e.options ?? []) {\n lines.push(`${indent} - ${jstr(opt.name)}: ${describeEffectInline(opt.effect ?? {}, ctx)}.`);\n }\n return lines.join(\"\\n\");\n }\n case \"risk-reward\": {\n const risk = e.risk ?? {};\n const onFail = risk.on_fail ? describeEffectInline(risk.on_fail, ctx) : \"there is a consequence\";\n const reward = describeEffectInline(e.reward ?? {}, ctx);\n return `${indent}${arrow}First take a ${testName(risk.test)} test — on a failure, ${onFail}; then ${reward}.`;\n }\n case \"issue-orders\": {\n const n = e.count != null ? jstr(e.count) : \"one or more\";\n const rng = e.range != null ? ` within ${jstr(e.range)}\"` : \"\";\n const elig = e.eligible?.keyword ? ` ${jstr(e.eligible.keyword)}` : \"\";\n const lines = [`${indent}${arrow}Issue up to ${n} Orders to eligible friendly${elig} units${rng}, each one of:`];\n for (const opt of e.options ?? []) {\n lines.push(`${indent} - ${jstr(opt.name)}: ${describeEffectInline(opt.effect ?? {}, ctx)}.`);\n }\n return lines.join(\"\\n\");\n }\n default:\n // Leaf at block position — render as a single capitalized sentence.\n return `${indent}${arrow}${capitalize(describeEffectInline(e, ctx))}.`;\n }\n}\n\n/** `Scope: aura (6\"). Duration: phase.` — retained for the legacy translate CLI footer. */\nexport function describeScope(s?: AbilityScope): string {\n if (!s || (!s.range && !s.duration)) return \"\";\n const range = dekebab(s.range ?? \"\");\n const inches = s.range_inches != null ? ` (${jstr(s.range_inches)}\")` : \"\";\n const duration = dekebab(s.duration ?? \"\");\n return `Scope: ${range}${inches}. Duration: ${duration}.`;\n}\n\n/**\n * `Applies to: units with Possessed.` — the roster-highlighting audience named\n * by a curated `applies_to` filter. Empty string when the filter is absent or\n * carries no keywords (nothing to say). `required_keywords` reads as an AND set;\n * `excluded_keywords` render as a trailing `(excluding …)`.\n */\nexport function describeAppliesTo(a?: AbilityAppliesTo | null): string {\n if (!a) return \"\";\n const required = a.required_keywords ?? [];\n const excluded = a.excluded_keywords ?? [];\n if (required.length === 0 && excluded.length === 0) return \"\";\n const base = required.length ? `units with ${required.join(\", \")}` : \"all units\";\n const exc = excluded.length ? ` (excluding ${excluded.join(\", \")})` : \"\";\n return `Applies to: ${base}${exc}.`;\n}\n\n/** Join non-empty clauses with \", \", capitalize the sentence, and end with a period. */\nfunction assembleSentence(parts: string[]): string {\n const body = parts.filter((p) => p.length > 0).join(\", \");\n if (body.length === 0) return \"\";\n const period = body.endsWith(\".\") || body.endsWith(\":\") ? \"\" : \".\";\n return capitalize(body) + period;\n}\n\n/**\n * Full generated text for an ability: a natural-English sentence (effect with\n * scope range + duration woven in, single-leaf conditionals inlined) plus a\n * trailing `Applies to:` line when the ability carries a curated `applies_to`\n * filter. This is the `ability.print()` consumers render when the dataset\n * carries no rules prose.\n */\nexport function describeAbility(a: AbilityLike): string {\n const core = a.effect ? renderTopLevel(a.effect, a.scope, a.usage, a.trigger) : \"\";\n const applies = describeAppliesTo(a.applies_to);\n return [core, applies].filter(Boolean).join(\"\\n\");\n}\n\n/** Assemble the top-level sentence/block, weaving trigger + usage + scope duration + range. */\n/**\n * Aura radius in inches: an explicit `range_inches` when present, else the\n * integer baked into a standard `aura-<n>` slug (`aura-6` -> 6), else undefined.\n * Per the scope schema, `aura-6/9/12` carry the radius in the slug and leave\n * `range_inches` null; only `aura-custom` sets `range_inches`. Non-aura ranges\n * (`unit`, `engagement-range`, ...) yield undefined, so the subject helper keeps\n * its `\" nearby\"` fallback for them.\n */\nfunction auraRadius(scope?: AbilityScope): number | undefined {\n if (scope?.range_inches != null) return scope.range_inches;\n const m = /^aura-(\\d+)$/.exec(scope?.range ?? \"\");\n return m ? Number(m[1]) : undefined;\n}\n\n/** The timing value of a bare `timing-is` condition, else undefined. */\nfunction timingOfCondition(c?: Condition): string | undefined {\n return c?.type === \"timing-is\" ? jstr((c.parameters ?? {}).timing) : undefined;\n}\n\n/** The numeric range of a top-level within-range condition, else undefined. */\nfunction conditionWithinRange(c?: Condition): number | undefined {\n if (c?.type !== \"unit-within-range-of\" && c?.type !== \"opponent-unit-within-range\") return undefined;\n const params = c.parameters ?? {};\n const r = params.range ?? params.range_inches ?? params.within_inches;\n return typeof r === \"number\" ? r : undefined;\n}\n\nfunction renderTopLevel(\n e: Effect,\n scope?: AbilityScope,\n usage?: AbilityUsage | null,\n trigger?: AbilityTriggerSpec | null,\n): string {\n const ctx: Ctx = {\n rangeInches: auraRadius(scope),\n engagementRange: scope?.range === \"engagement-range\",\n scopeRange: scope?.range,\n };\n const { lead: durLead, trail } = durationClauses(scope?.duration);\n // An explicit usage limit supersedes the duration's coarse \"once per battle\" lead.\n const lead = usage && usage.frequency != null ? usageClause(usage) : durLead;\n\n // A reactive trigger (or several — the ability fires on any) opens the\n // sentence (\"Each time …\"). B2: when a trigger's proximity just restates a\n // within-range condition on the effect, render the range once (drop it here).\n const triggers = normalizeTriggers(trigger).filter((t) => t.event != null);\n const triggerEvents = new Set(triggers.map((t) => t.event));\n const condRange = conditionWithinRange(e.type === \"conditional\" ? e.condition : undefined);\n const trig = triggers\n .map((t) =>\n describeTrigger(condRange != null && t.proximity?.range === condRange ? { ...t, proximity: undefined } : t),\n )\n .filter((s) => s.length > 0)\n .join(\" or \");\n\n if (e.type === \"conditional\") {\n const inner = e.effect ?? {};\n // B1: drop the condition lead-in when it merely restates a trigger's timing\n // (e.g. trigger start-of-phase + condition timing-is start-of-phase).\n const condTiming = timingOfCondition(e.condition);\n const leadIn = condTiming != null && triggerEvents.has(condTiming) ? \"\" : conditionLeadIn(e.condition ?? {});\n if (CONTAINER_TYPES.has(inner.type ?? \"\")) {\n // Block: \"<trigger>[, <lead-in>][, <duration>]:\" then the indented container.\n const header = [trig, lead, leadIn, trail].filter((p) => p.length > 0).join(\", \");\n return capitalize(header) + \":\\n\" + describeEffect(inner, 1, ctx);\n }\n return assembleSentence([trig, lead, leadIn, trail, describeEffectInline(inner, ctx)]);\n }\n\n if (CONTAINER_TYPES.has(e.type ?? \"\")) {\n // Containers render block; a trigger/duration lead-in prefixes the block when\n // present. A designate-target carrying its own `duration` renders that\n // duration itself — repeating the scope duration in the head would double it.\n const ownDuration = e.type === \"designate-target\" && e.duration != null;\n const block = describeEffect(e, 0, ctx);\n const head = [trig, lead || (ownDuration ? \"\" : trail)].filter((p) => p.length > 0).join(\", \");\n return head ? capitalize(head) + \":\\n\" + block : block;\n }\n\n return assembleSentence([trig, lead, trail, describeEffectInline(e, ctx)]);\n}\n"]}
|