Defer challenge redraws until resolution and limit card plays

This commit is contained in:
2026-09-04 19:28:20 -07:00
parent cf63ffed47
commit 8b67d78f25
6 changed files with 74 additions and 26 deletions
@@ -127,8 +127,8 @@
</p>
{:else}
<p class="info-text" style="margin-top: 0.5rem;">{state.obstacles.filter(o => chObstacleIds.includes(o.id)).length > 1
? 'Other Pi-Rats may assist. Assistants do not draw replacement cards.'
: 'Only the attempting Pi-Rat can play against this single Obstacle.'}</p>
? 'Other Pi-Rats may assist with one card each. Only the attempting Pi-Rat draws replacements after resolution.'
: 'Only the attempting Pi-Rat can play against this single Obstacle. Matching colors earn a replacement after resolution.'}</p>
<div class="challenge-obstacles">
{#each chObstacleIds as oid}
{@const obs = state.obstacles.find(o => o.id === oid)}
@@ -25,6 +25,7 @@
$: challenge = openChallenges.find(c => JSON.parse(c.obstacle_ids || '[]').includes(obs.id));
$: canPlay = state.player.role === 'pirat' && !state.player.is_dead && !state.player.needs_reroll
&& challenge && challenge.tax_state !== 'requested'
&& !JSON.parse(challenge.plays || '[]').some(p => p.obstacle_id === obs.id)
&& (challenge.acting_player_id === state.player.id
|| state.obstacles.filter(o => JSON.parse(challenge.obstacle_ids || '[]').includes(o.id)).length > 1);
$: cardCodeLabel = `${cardValue(obs.original_card)}${SUIT_CHAR[obs.suit] || ''}`;
+2 -1
View File
@@ -6,10 +6,11 @@
// - Add a CHANGELOG entry only when a commit changes something players can
// see. Skip refactors, tests, and tooling. Keep wording player-facing.
export const VERSION = 36;
export const VERSION = 37;
// Newest first. Each entry: { version, date: 'YYYY-MM-DD', changes: [string, ...] }.
export const CHANGELOG = [
{ version: 37, date: '2026-09-04', changes: ['Color-match replacement cards arrive after the Deep resolves a Challenge. Each applied Obstacle accepts one card per Challenge, and each assistant can contribute one card.'] },
{ version: 36, date: '2026-09-04', changes: ['Duel instructions clarify that only the defender draws a replacement for matching the Obstacles color, even when the defense fails.'] },
{ version: 35, date: '2026-09-04', changes: ['Personal objectives now require a group vote. Propose the next objective from a character sheet, then vote Yes or No at the table. A majority approves; the Captain breaks tied votes.'] },
{ version: 34, date: '2026-09-04', changes: ['Assistance is available only when a Challenge has multiple active Obstacles. Gat and Name Tax takeovers still work against a single Obstacle.'] },