Prototype Jacurutu income, Testing Station and Shrine effects
Connect automatic unambiguous Jacurutu physical-force income, a sole-occupant Testing Station storm choice and Shrine reciprocal physical card roles to engine actions, player controls, legal AI and saved continuation. Preserve Weather Control exclusion, exact card/force custody, private hand boundaries and committed effects after restart. Shared role checks cover existing ordinary and special Karama paths; reserved cards cannot enter another pending use. Keep Orgiz, mixed-force Jacurutu allocation and contested Cistern/Testing Station benefits explicitly pending. These are bounded prototypes; complete Discovery/Advanced/expansion and publication gates remain closed. Validation: types, lint and 4,345 offline tests passed (32 added), production build passed, and 40 HTTP tests passed. Independent cross-reviews repaired reserved-card deadlock, physical-card selection, alternate-role permission, storm source/token binding and public-entitlement bot ordering. The first broad run found five failures; focused repairs preceded the stable repeated check. Browser A5EJQ2W4 used genuine Discovery setup/reveal/free entry with targeted QA positioning. A human increased storm movement from two to three sectors, moving sector 6 to 9. Refresh restored station forces and the private Snooper. This was targeted control/recovery evidence, not an unmodified full game. All 187 opening saved rooms remained unchanged; 31 QA/HTTP rooms were added (218 total). Reused the running server; no restart or save reset. Source-bound report: /home/quintine/.local/share/dune/checkpoints/20260913-discovery-location-effects/verification-final/report.json Source fingerprint: beecb85ab7ec39319115389c115434d161591e8549802c542a6343a0fc19bea6 Durations: check 140540ms; build 6741ms; integration 24956ms. Aggregate goal counter 63,116,444 to 64,295,091 at final verification: 1,178,647 tokens before final Git/push overhead for three bounded functions. Standing authorization: Push all from now on.
This commit is contained in:
1 parent
ab0ab52849
commit
f0d3d9c464
31 files changed
+2524
-138
No files matched your search
@@ -0,0 +1,53 @@
|
||||
'use client';
|
||||
|
||||
import type { Action, GameView } from '@/game/engine';
|
||||
import { discoveryStormActions } from '@/game/discovery-storm-options';
|
||||
import { Button } from './ui/button';
|
||||
|
||||
export function DiscoveryStormDecision({
|
||||
game,
|
||||
act,
|
||||
busy,
|
||||
}: {
|
||||
game: GameView;
|
||||
act: (action: Action) => void;
|
||||
busy: boolean;
|
||||
}) {
|
||||
const actions = discoveryStormActions(game),
|
||||
offer = game.ecologicalStorm;
|
||||
if (!offer || !actions.length) return null;
|
||||
const me = game.players.find((player) => player.id === game.me)!;
|
||||
return (
|
||||
<section aria-label="Ecological Testing Station" className="space-y-3">
|
||||
<p>
|
||||
Your forces occupy Ecological Testing Station. The storm will move{' '}
|
||||
{offer.base} sectors. You may decrease or increase this by one, or keep
|
||||
the ordinary movement.
|
||||
</p>
|
||||
<p className="fine">This choice cannot change Weather Control.</p>
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{offer.options.map((option) => {
|
||||
const action = actions.find(
|
||||
(candidate) => candidate.delta === option.delta,
|
||||
)!;
|
||||
return (
|
||||
<Button
|
||||
key={option.delta}
|
||||
className="game-action"
|
||||
variant={option.delta === 0 ? 'outline' : 'default'}
|
||||
disabled={busy || !!me.autopilot}
|
||||
onClick={() => act(action)}
|
||||
>
|
||||
{option.delta === -1
|
||||
? 'Decrease'
|
||||
: option.delta === 1
|
||||
? 'Increase'
|
||||
: 'Keep'}
|
||||
: {option.distance} {option.distance === 1 ? 'sector' : 'sectors'}
|
||||
</Button>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user