Skip to content

feat(app): flare exploding crits as they land, not at chain end - #28

Merged
puradox merged 3 commits into
mainfrom
jackson
Jul 19, 2026
Merged

feat(app): flare exploding crits as they land, not at chain end#28
puradox merged 3 commits into
mainfrom
jackson

Conversation

@puradox

@puradox puradox commented Jul 19, 2026

Copy link
Copy Markdown
Owner

Exploding-dice crits used to withhold the whole ceremony — gold burst, camera flash, and ring — until every die in the chain settled, so a d6! cascade played out silent until the very end. This makes a maxed die on an exploding term celebrate the instant it comes to rest (before its sibling drops), while plain non-exploding pools keep their single batched chord at settle so a fistful of sixes stays one flare, not a bell choir. A new celebrated flag on each die stops the end-of-roll pass from re-bursting a die that already flared. The change is confined to tinhorn-core's sim timing — the RNG/seed contract is untouched, so insta and animated rolls still settle bit-identically. Two new tests pin the behavior: a crit rings while the chain is still live, and each crit is celebrated exactly once.

puradox and others added 3 commits July 19, 2026 02:58
Previously the crit ceremony (gold burst, camera flash, ring) deferred until every die settled, so an exploding cascade played out silent until the very end. Now a maxed die on an exploding term celebrates the instant it comes to rest — before its sibling drops — while plain pools keep their single batched chord at settle.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The mid-roll crit ceremony rings once per explosion wave; an insta roll fast-forwards the whole cascade into a single frame, so those per-wave rings piled up and drain_sounds played them all at once (a bell choir). insta_roll now keeps a single Crit. Also unifies the (kept · settled · max-face) crit predicate behind a new Die::is_crit() shared by crit_dice, the settle-time flare, and the end-of-roll pass, and corrects two comments (a 1 can explode via !=1/!<2; the crit ring now fires per wave, only the fumble thud is once per roll).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CI runs clippy --all-targets -D warnings, which lints test code; the manual_contains lint flagged sounds.iter().any(|s| *s == Crit). Match the existing tests' sounds.contains(&Crit).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@puradox
puradox merged commit 6c1ede5 into main Jul 19, 2026
2 checks passed
@puradox
puradox deleted the jackson branch July 19, 2026 10:37
@puradox puradox mentioned this pull request Jul 19, 2026
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