Feeling lucky? The Jackpot dice mini-game
Land on the Jackpot square to play a quick dice bet — pick a few numbers, place your stake, and chase a payout that is fair on average.

In plain words
The Jackpot square (cell 20) used to do nothing — you landed on it and simply ended your turn. Now it opens a fast little dice game, and you decide whether to play.
Pick one, two or three numbers from 1 to 6, pay a flat stake of 1000, and roll a single die. If the die shows one of your numbers, you win — and the fewer numbers you bet on, the bigger the prize.
- Bet 1 number — a hit pays 6000.
- Bet 2 numbers — a hit pays 3000.
- Bet 3 numbers — a hit pays 2000.
- Not feeling it? Decline and end your turn for free — you are only charged when you spin.
Low on cash? The window still opens so you can see the bet, but you cannot spin until you can cover the stake. Bots always pass, so the Jackpot is your call alone.
For the technically curious
The mechanic is deliberately expected-value-neutral: for any number of picks k, the chance to hit is k/6 and the payout is 6000/k, so the long-run cash delta is exactly zero.
// reduce.ts — bank-funded, fair on the distribution
const JACKPOT_STAKE = 1000;
const JACKPOT_PAYOUT = { 1: 6000, 2: 3000, 3: 2000 };
// EV per spin, for k = 1, 2, 3:
// (k / 6) * (6000 / k) - 1000 = 0Landing on the Jackpot field now routes to a new pending_jackpot phase, with two actions: place_jackpot_bet (validate 1–3 distinct numbers, deduct the stake, roll, apply the net) and skip_jackpot (no charge). Because the stake guarantees a miss never goes negative, there is no payment or bankruptcy path.
It shipped with no database migration. The phase and pending state live in the JSON engine_state, actions are not enum-constrained, and the existing jackpot_won event is reused for every resolved bet — win or loss — distinguished by a won flag in the payload.
