diff --git a/TODO.md b/TODO.md index 7b0b6c1..fa36e90 100644 --- a/TODO.md +++ b/TODO.md @@ -1,13 +1,39 @@ +## Features + +- [ ] Add a note taking area to store game state between sessions +- [ ] Add an online indicator that displays if a player is connected +- [ ] PvP challenges should linger in the UI after completion so that players can see the result +- [ ] Add hat/gun icons next to player names on the player list to indicate if they're the captain and/or have a gat +- [ ] Replace red/green borders of successful/failed cards with checks and crosses in the upper corner of the card. + ## Polish -- [x] The character sheet modal popup is narrower than it needs to be on wide screens. I think it could safely be like 90% as wide as the non-modal UI. -- [x] Popping out the event log should leave a close button where the "Event Log" open button is, so that you don't have to move your mouse to quickly toggle it. The existing close button can remain. -- [x] Use the same vertical UI for the player list in all phases -- [x] In the admin panel, if a pi-rat doesn't have a name yet, it should show something like 'not chosen yet' rather than the player name -- [x] In the admin panel, the "Open" and "Copy" buttons should be the same size -- [x] Store the player name in local storage and pre-populate it when joining a new game (but don't force it, let the player edit it if they'd prefer a different name) -- [x] If a player tries to rejoin a game that has ended or that they've been kicked from, they should get an error message and it should be removed from the list of re-joinable games -- [x] Games should have join codes in addition to join links. Join codes should be a sequence of 5 alphanumeric characters (upper case letters only, no ambiguous letters like 0/O/1/I). Add a panel to the home page for joining a game via code, and display the join code on the admin page +- [x] Do a pass on condensing overly verbose UI elements. For example, "Current Difficulty" could be replaced by "Difficulty" and "The Obstacle List" could be replaced by "Obstacles" +- [ ] Event log button should be the same size and position when expanded and collapsed in all screens +- [x] Align the "Current Difficulty" and "Successes" boxes +- [ ] Don't have dev mode toggling appear in the event log +- [ ] Remove display of current deck size +- [ ] Voting status in the between-scenes phase should be visual, not text-based +- [ ] Players should be able to see who they voted for +- [ ] The "ready" button between scenes is redundant. Allow players to vote, and allow them to change their vote, but once all players have voted, display the result and move on + +## Rules + +- [ ] Check against rules on correct quantity of of obstacles and obstacle refresh rules +- [ ] Check against the rules on pi-rat hand size and conditions for drawing more cards +- [ ] Assisting other pi-rats should only be available if there are multiple obstacles in the current challenge +- [ ] Checking off personal objectives (gat/name/death) should be handled by group vote rather than adjudication by the deep +- [ ] Double check if PvP obstacles should allow card re-draw + +## Unknown - need to clarify what these mean + +- [ ] Temporary names +- [ ] Consistent player list order +- [ ] Crew objectives reveal area should be connected to button + +## Fixes + +- [ ] Make sure that gat descriptions are a) required and b) displayed on the UI ## Words Words Words diff --git a/frontend/src/assets/css/scene-play.css b/frontend/src/assets/css/scene-play.css index 5c94966..91edd03 100644 --- a/frontend/src/assets/css/scene-play.css +++ b/frontend/src/assets/css/scene-play.css @@ -236,7 +236,7 @@ padding: 1.25rem; background: var(--well); display: grid; - grid-template-columns: 0.8fr 2fr 1fr 1fr; + grid-template-columns: 0.8fr 2fr 2fr; gap: 1rem; position: relative; overflow: hidden; @@ -335,11 +335,17 @@ color: var(--text-muted); } -.obstacle-value-display { +.obstacle-stats { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); align-self: start; + gap: 0.5rem; +} + +.obstacle-value-display { display: flex; flex-direction: column; - justify-content: center; + justify-content: flex-start; align-items: center; background: color-mix(in srgb, var(--accent) 5%, transparent); border: 1px dashed var(--edge-accent); @@ -348,10 +354,9 @@ } .obstacle-successes-display { - align-self: start; display: flex; flex-direction: column; - justify-content: center; + justify-content: flex-start; align-items: center; background: color-mix(in srgb, var(--success) 5%, transparent); border: 1px dashed color-mix(in srgb, var(--success) 30%, transparent); @@ -361,7 +366,7 @@ .obstacle-successes-display .val-number { color: var(--success); - font-size: 1.5rem; + font-size: 1.8rem; } .val-label { diff --git a/frontend/src/components/ScenePhase.svelte b/frontend/src/components/ScenePhase.svelte index c99f491..dd28c1e 100644 --- a/frontend/src/components/ScenePhase.svelte +++ b/frontend/src/components/ScenePhase.svelte @@ -41,7 +41,7 @@ e.currentTarget.classList.remove("dragging"); }} /> {:else} -

Your hand is empty! (You draw cards when playing cards that match the suit color of the obstacle.)

+

Empty hand. Match an obstacleโ€™s color to draw cards.

{/each} @@ -55,7 +55,7 @@
-

๐ŸŒŠ The Obstacle List

+

๐ŸŒŠ Obstacles

๐ŸŽด Deck: {state.game.deck_cards ? JSON.parse(state.game.deck_cards).length : 0} cards left
diff --git a/frontend/src/components/UpkeepPhase.svelte b/frontend/src/components/UpkeepPhase.svelte index 78f0c91..76fc8d9 100644 --- a/frontend/src/components/UpkeepPhase.svelte +++ b/frontend/src/components/UpkeepPhase.svelte @@ -170,7 +170,7 @@
-

Between Scenes (Scene #{state.game.current_scene_number} Concluded)

+

Between Scenes ยท Scene {state.game.current_scene_number}

Upkeep and tallying. Nominate a crewmate to Rank Up, redraw hand cards for resting Deep players, and ready up for the next scene.

{#if state.player.is_dead && !state.player.is_ghost && !state.player.needs_reroll} @@ -201,7 +201,7 @@
-

1. Pirate Ranking (Voting)

+

Rank Up

Every player (including the Deep) nominates one crewmate who best exemplified pirate qualities in the previous scene. Previous Deep players are ineligible to receive votes.

{#if state.game.phase === 'deep_upkeep'} @@ -239,7 +239,7 @@ {#if state.game.phase === 'deep_upkeep'}
-

2. Resting Deep Upkeep

+

Refresh Hand

{#if state.player.role === "deep"}
@@ -260,7 +260,7 @@

Waiting for the rest of the crew to finish upkeep...

{:else}

- Your Hand Size Limit: {maxHandSize} cards.
+ Hand Limit: {maxHandSize} cards.
Drag cards to the "Discard Pile" zone to discard them, or click them to move them.

@@ -307,7 +307,7 @@ {/if} {/if}
diff --git a/frontend/src/components/scene/CharacterSheet.svelte b/frontend/src/components/scene/CharacterSheet.svelte index de5d3ff..0ee3799 100644 --- a/frontend/src/components/scene/CharacterSheet.svelte +++ b/frontend/src/components/scene/CharacterSheet.svelte @@ -119,7 +119,7 @@ {/if}
-

Description:

+

Description

Look: {target.avatar_look}

Smell: {target.avatar_smell}

First Words: "{target.first_words}"

@@ -130,7 +130,7 @@ {#if target.other_like || target.other_hate}
-

What the Crew Thinks:

+

Crew Impressions

{#if target.other_like}

๐Ÿ‘ Likes: "{target.other_like}" โ€” {getPlayerName(target.other_like_from_player_id)}

{/if} @@ -143,7 +143,7 @@ {#if isSelf}
-

Assigned Secret Techniques (J/Q/K):

+

Secret Techniques

  • Jack (J): "{target.tech_jack}"
  • Queen (Q): "{target.tech_queen}"
  • diff --git a/frontend/src/components/scene/ObstacleItem.svelte b/frontend/src/components/scene/ObstacleItem.svelte index 45d881d..4665e34 100644 --- a/frontend/src/components/scene/ObstacleItem.svelte +++ b/frontend/src/components/scene/ObstacleItem.svelte @@ -86,9 +86,10 @@

    {obs.description}

+
- Current Difficulty + Difficulty {#if is_face_active} {challengedRank !== null ? `${challengedRank} (Rat's Rank)` : "Challenged Rat's Rank"} @@ -104,6 +105,8 @@ {success_count} / {state.players.length}
+
+ {#if is_completed && state.player.role === 'deep'}
diff --git a/frontend/src/lib/changelog.js b/frontend/src/lib/changelog.js index a9c66b7..2779edc 100644 --- a/frontend/src/lib/changelog.js +++ b/frontend/src/lib/changelog.js @@ -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 = 26; +export const VERSION = 27; // Newest first. Each entry: { version, date: 'YYYY-MM-DD', changes: [string, ...] }. export const CHANGELOG = [ + { version: 27, date: '2026-09-04', changes: ['Shorter labels make the table easier to scan.', 'Difficulty and Successes now line up side by side, including on small screens.'] }, { version: 25, date: '2026-07-10',