The die rolls in the open
Every player-facing D4 roll now lands in the chronicle as pips with its purpose: "🎲 alice rolls a 3 — aiming at the unseen — only a 1 finds them." A shared rollD4 helper threads the generic dieRolled event through blind staggers and swings, pit leaps, ooze and pit struggles, and the invisible/shrink miss rolls — the table sees the die land, exactly as it would in person. Rolls whose numbers already showed (the troll's swing, the misdirection direction, the opening roll-off) keep their lines. And the physical die's other job — "any 50-50 call" — gets its button: 🎲 beside the say-box in online games (server-rolled, published through the chat ledger so it persists, replays, and counts toward unread badges) and under the chronicle in hotseat, rolled on the device. Chronicle only; no game state touched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
d6d34887e3
commit
ef661c79ad
@@ -60,6 +60,13 @@ class LocalGame {
|
||||
private activeMs = 0;
|
||||
private lastMoveAt = 0;
|
||||
|
||||
/** The tabletop D4 for house calls: chronicle only, no game state. */
|
||||
rollTableDie(): void {
|
||||
if (!this.viewerId) return;
|
||||
const roll = 1 + (crypto.getRandomValues(new Uint32Array(1))[0]! % 4);
|
||||
this.log = [...this.log, `\u{1F3B2} ${this.viewerId} rolls the die \u2014 ${roll}`];
|
||||
}
|
||||
|
||||
/** Rebuild the whole game as replay steps (finished games only). */
|
||||
buildReplay(): void {
|
||||
if (!this.config || this.gameState?.phase !== "finished") return;
|
||||
|
||||
Reference in New Issue
Block a user