Offer Karama against mandatory advisor ground conversions

Keep completed moves while allowing native advisor-to-fighter conversion to be prevented after empty arrival or the last outsider's ground departure. Bind each queued response to its actual whole group and movement. Shared settlement honors the explicit provisional continuously-alone cancellation duration; setup remains automatic and non-ground producers remain open.

Validation: 16 related files199/199, types/lint/build, five native move/response/GameTable SSR journeys and eight legal existing-profile paths. Native34/36-action public Advanced sources earn original setup/counters/Karama. Existing standard controls render; no new component-callback, browser/deployed or full-mode certificate. No saved-room/D1/restart/deployment operation.
This commit is contained in:
Quintine committed 2026-10-24 19:44:12 +11:00
1 parent 1a505525a8
commit 3aca64412f
15 files changed
+874 -34

No files matched your search

+8
View File
@@ -2471,6 +2471,14 @@ export function GameTable({
{' '}leaves {g.paymentIncome.bank} spice in the bank. The payer’s cost stays the same.
</p>
)}
{g.response.automaticAdvisorFlip && (
<p className="notice">
The ground movement is complete. These advisors are now alone and must become fighters.
{' '}Karama prevents only this conversion; it does not undo the move.
{' '}Provisional rule: a prevented group stays advisors while continuously alone,
until another faction returns or the group leaves.
</p>
)}
{g.response.kind === 'advisor' && (
<p className="notice">
{g.players.find((player) => player.id === g.response?.owner)?.name} declared {g.response.amount ?? 1} free {(g.response.amount ?? 1) === 1 ? 'force' : 'forces'} to {territory(splitLocation(g.response.location ?? 'polar_sink:0').territory).name}.