Skip to content

feat(ui): fun-while-dying slice 2 — rotating surreal adverts + ironic weather - #16

Merged
emp3thy merged 4 commits into
mainfrom
feat/newspaper-content
Jul 26, 2026
Merged

feat(ui): fun-while-dying slice 2 — rotating surreal adverts + ironic weather#16
emp3thy merged 4 commits into
mainfrom
feat/newspaper-content

Conversation

@emp3thy

@emp3thy emp3thy commented Jul 26, 2026

Copy link
Copy Markdown
Owner

What

"Fun while dying" slice 2 — makes the RoundSummary tabloid varied and funny. The design frame (from the playability study + assessment): in a "nobody wins" game the reward is an entertaining death, and the newspaper is that surface. Content + pure selection helpers only — no engine, AI, or layout change.

Changes

  • Adverts — the single hardcoded "NUCLEAR DUCKS" block becomes a pool of 15 surreal adverts, one rotated per round. Voice locked via the visual companion: original inanity + doomsday-prepper spoof (Nuclear Ducks / Tinned Sunshine register), no borrowed quotes. Includes Powdered Optimism, both Emergency Trousers, Family-Size Warhead, Your Own Private Nuke, and Prepper's Pantry ("you've always bean prepared").
  • Classifieds — pool 4 → 16; render a rotating window of 4 that changes each round.
  • Weather — keeps the 4 damage tiers driving outlook/temp/UV (weather still reacts to the body count — that's the joke), but the flavour rows now rotate through ironic deadpan variants by round, so the same carnage reads differently round to round. deriveForecast gains a round param.
  • Corrections — 3 → 8.

All selection is a pure function of the round number — deterministic, reproducible, differs every round, rare in-game repeats. No RNG, no engine state.

Verified

  • npm run typecheck clean; npm run test:run → 57 files / 427 tests green.
  • New tests (tests/ui/newspaper.test.ts): ADVERTS == 15 + non-empty; pickAdvert rotates & wraps; CLASSIFIEDS ≥16 + pickClassifieds returns 4 distinct, rotating; CORRECTIONS ≥8; deriveForecast preserves all 4 tier→outlook/UV mappings and rotates rows by round. All assertions unconditional.
  • Spec + code review: approved, no findings.

Spec: docs/superpowers/specs/2026-07-26-fun-while-dying-slice2-newspaper-content-design.md · Plan: docs/superpowers/plans/2026-07-26-fun-while-dying-slice2-newspaper-content.md

Part of a 3-slice effort; slices 1 (characters & difficulty) and 3 (score-how-you-died) follow as their own PRs.

🤖 Generated with Claude Code

emp3thy and others added 4 commits July 26, 2026 11:48
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…pper spoof)

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

Replaces the static NUCLEAR DUCKS ad and fixed 4-item classifieds with
round-derived rotation over a locked 15-advert pool and a 16-item
classifieds pool. deriveForecast gains a reportedRound param so the same
damage tier's flavour rows read differently round to round, and
CORRECTIONS expands from 3 to 8. All selection stays a pure function of
reportedRound (no RNG).

@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

No bugs found in the changes. The new adverts/classifieds/weather rotation helpers in newspaper.ts and their wiring in RoundSummary.tsx are internally consistent: pool sizes (15 adverts, 16 classifieds, 8 corrections) match the modulo-based rotation logic, index math is verified against the accompanying tests, and no null/undefined dereferences or off-by-one errors were found.

No bugs were detected in this PR.

@emp3thy
emp3thy merged commit cac9200 into main Jul 26, 2026
1 check passed
@emp3thy
emp3thy deleted the feat/newspaper-content branch July 26, 2026 11:25
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