Skip to content

feat(ui): fun-while-dying slice 3 — honest demise scorecard + comedic awards - #18

Merged
emp3thy merged 4 commits into
mainfrom
feat/demise-scorecard
Jul 26, 2026
Merged

feat(ui): fun-while-dying slice 3 — honest demise scorecard + comedic awards#18
emp3thy merged 4 commits into
mainfrom
feat/demise-scorecard

Conversation

@emp3thy

@emp3thy emp3thy commented Jul 26, 2026

Copy link
Copy Markdown
Owner

What

"Fun while dying" slice 3 (final slice) — makes the endgame honest and turns death into the reward. Fixes the playability assessment's core legibility failure (C1): a pyrrhic "winner" is just the last leader to die, yet the Winners screen crowned a corpse with "X WINS." UI + one pure derived module; no engine change.

Changes

  • Honest pyrrhic headline. LAST TO FALL: X replaces the pyrrhic X WINS (everyone's dead — nobody won). Survivor keeps X WINS (a real win); apocalypse keeps WINNER: NOBODY. Hero stamp matches.
  • src/ui/util/demise.ts (new, pure) — derives comedic superlative awards from the game log + final leaders + outcome: DEADLIEST · BIGGEST BANG · TRIGGER HAPPY · DIED FIRST · LAST ONE STANDING / LAST TO FALL (mutually exclusive; both omitted for apocalypse). Deterministic, cast-order tie-breaks, awards with no qualifier omitted. Plus humanDemiseLine — an honest one-line epitaph (survived / was the last to fall / was eliminated, with pop lost + hits).
  • Winners screen gains an Awards panel (player-1 award highlighted) and the human epitaph line, alongside the existing (already honest) Death Toll.

Sample copy: DIED FIRST — "Set the tone. The tone was 'dead.'" · LAST ONE STANDING — "Outlasted everyone. That's the whole prize." · TRIGGER HAPPY — "N launches. Subtlety: none."

Verified

  • npm run typecheck clean; npm run test:run → 448 tests green (13 new demise tests + updated Winners tests).
  • Diff touches only src/ui/** + tests/ui/** — zero engine files; checkOutcome/WinOutcome/scoreState untouched, so hard-mode lookahead is unaffected.
  • Review: approved. One Minor fixed in the branch — the awards "(you)" highlight is now player1-only (was isHuman(), which tagged every hotseat human), matching the epitaph + death-toll convention; multi-human per-player scorecards remain out of scope.
  • Reviewer independently confirmed award attribution keys off event.from (not target) and that Final-Retaliation damage still lands as ordinary log events (not lost).

Spec: docs/superpowers/specs/2026-07-26-fun-while-dying-slice3-demise-scorecard-design.md · Plan: docs/superpowers/plans/2026-07-26-fun-while-dying-slice3-demise-scorecard.md

Completes the 3-slice "fun while dying" effort (slices 1 #17, 2 #16).

🤖 Generated with Claude Code

emp3thy and others added 4 commits July 26, 2026 13:47
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…death toll

Reviewer Minor: awards highlight used isHuman() (tags all hotseat human slots)
while the rest of the screen is player1-only. Unify on player1; multi-human
per-player scorecards remain out of scope.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Claude BugBot Analysis

Reviewed the diff (docs, CSS, Winners.tsx, new demise.ts module, and tests) and verified event field names, WinOutcome variants, and CSS class references against the engine types and existing code — no genuine defects found.

No bugs were detected in this PR.

@emp3thy
emp3thy merged commit 7e1f53e into main Jul 26, 2026
1 check passed
@emp3thy
emp3thy deleted the feat/demise-scorecard branch July 26, 2026 13:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant