diff --git a/README.md b/README.md index 97e55d66..5592441d 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,9 @@ uses one unused movement entitlement and retains Hajr's separate move. The single physical Hajr can be played again after legitimate [paid Box recovery](docs/RICHESE_ORNITHOPTER_ENGINE_AUDIT.md#recovered-hajr-replay--18-october-2026). Advanced still requires a fresh post-movement opportunity. +Advanced advisors may use both physical Ornithopter modes. Advisors do not grant +city access; normal-range groups use current fighter occupancy. See the +[advisor source cutover](docs/RICHESE_ORNITHOPTER_ENGINE_AUDIT.md#advanced-advisor-card-movement--18-october-2026). Before starting, open **Configure** on an AI seat to change its difficulty, faction or player circle without replacing it. Changes save immediately and diff --git a/components/ornithopter-movement.tsx b/components/ornithopter-movement.tsx index 5e654cf9..7c7ab02f 100644 --- a/components/ornithopter-movement.tsx +++ b/components/ornithopter-movement.tsx @@ -7,7 +7,6 @@ import { type OrnithopterMode, } from '@/game/ornithopter'; import { location, splitLocation, gameTerritories } from '@/game/board'; -import { isAdvisor } from '@/game/advisors'; import { botGroundMoveAllowed } from '@/game/bot-mobility'; import { Button } from './ui/button'; import { CardInspector, CardRules } from './card-inspector'; @@ -31,6 +30,7 @@ export function OrnithopterMovement({ const card = game.ornithopter; const me = game.players.find((p) => p.id === game.me); if (!card || !me) return null; + const advisorGuidance = game.advanced && me.faction === 'beneGesserit'; const active = card.active; const mode = active?.mode ?? @@ -59,18 +59,6 @@ export function OrnithopterMovement({ location(String(move.territory), Number(move.sector)), 0))) reason = 'The Fremen two-territory advantage is unavailable. Choose a reachable destination within the remaining normal range.'; } - const physicalSource = - typeof move?.from === 'string' - ? move.from - : move?.forces && typeof move.forces === 'object' - ? Object.keys(move.forces)[0] - : undefined; - if ( - !reason && - physicalSource && - isAdvisor(me, splitLocation(physicalSource).territory) - ) - reason = 'Advanced advisor use of the Ornithopter card awaits its ruling.'; if (!reason && active?.cohort && move) { const forces = (move.forces as Record | undefined) ?? @@ -194,6 +182,15 @@ export function OrnithopterMovement({

)} + {advisorGuidance && ( +

+ Advanced Bene Gesserit advisors can use both card modes. Advisors in + Arrakeen or Carthag do not grant the city’s movement range. This card’s + one-group mode independently gives range three. Two-group mode uses + your current normal range and different original forces. Normal entry + and advisor conversion still apply. +

+ )} {me.faction === 'choam' && game.choamMovementBonus > 0 && (

Provisional Kulon combination: the one-group card move stays capped @@ -209,7 +206,10 @@ export function OrnithopterMovement({