Pass the Jay
A session-based pick-and-cash-out game. Ten party guests, one undercover cop. The player stakes once and passes the joint guest by guest: every safe pass raises the multiplier, the cop ends the round, and cashing out pays the current rung.
The outcome is decided by the RNG when the round starts: the cop's seat is drawn before the first pass and never changes. Passing only reveals it.
| Property | Value |
|---|---|
| Game ID | pass-the-jay |
| Engine version | 1.1.0 |
| Type | session_based |
| Volatility | Medium — the player sets it by where they stop |
| Max Win | 9.7× bet (rtp-97; 9.2× / 9.4× / 9.6× in the other variants) |
| RTP variants | 92.00% / 94.00% / 96.00% / 97.00% — returned however the player plays |
| Minimum stake | 100 minor units (1.00 in 2-decimal currencies), over any lower operator setting |
How a round works
| Phase | Description | Player input |
|---|---|---|
| Stake | The stake is debited and the cop's seat is drawn | Press Let's Party |
| Pass | The joint goes to one guest; safe → next rung, cop → bust | Tap a guest |
| Cash out | Pays stake × ladder[passes] | Press Cash Out (after ≥ 1 pass) |
| Clean sweep | Nine safe passes — every other guest has had a turn | None (auto-paid on the top rung) |
The ladder (rtp-96)
| Safe passes | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|
| Cash out | 1.0666× | 1.20× | 1.3714× | 1.60× | 1.92× | 2.40× | 3.20× | 4.80× | 9.60× |
| Chance to get there | 90% | 80% | 70% | 60% | 50% | 40% | 30% | 20% | 10% |
Each rung is RTP × 10 / (10 − k) rounded down to four decimals and paid exactly. The game shows multipliers to two decimals, also rounded down (1.0666× reads 1.06×), so the screen never shows more than is paid; the cash-out amount it shows is always the exact one.
RTP is the same whatever the player does
Surviving k passes has probability (10 − k)/10 whatever order guests are picked in, so leaving after k passes returns (10 − k)/10 × ladder[k]: the variant's RTP, never more and never more than 0.007 of a point less (rtp-96: 95.994–96.000%). Any strategy is a mix of stopping points, so every way of playing returns the RTP the operator selected. The full per-rung table is in the game's math model (games/pass-the-jay/docs/math-model.md).
Payouts are rounded down to the currency's smallest unit — exact for USDC/USDT at any whole-cent stake and for BTC from 10,000 sats. In a 2-decimal currency small stakes lose up to a cent per win (a 1.00 stake's first rung pays 1.06), which is why the game's minimum stake is 1.00 there.
Unfinished rounds
| Situation | Settlement |
|---|---|
| Player reopens the game within 5 minutes (tab closed, connection lost, phone locked) | The round is resumed where it was left — guests passed, rung, cash-out button |
| Player idle for 5 minutes mid-round | Cashed out automatically at the rung reached |
| Player starts a new round while one is open | The open round is cashed out at the rung reached |
| Round abandoned before the first pass | Pays the k = 0 rung (0.96× at rtp-96) |
The client finds an open round with GET /games/pass-the-jay/rounds/active?currency=… (the session's player; null when there is none). It returns the same view a pass response carries — never the cop's seat — and only for a round in the currency and money mode asked about.
Provably fair
For tenants with provably fair enabled, the cop's seat is derived from the committed server seed at sub-nonce 0. The seed is held while the round is open and revealed when it ends; the verifier reproduces the seat and replays the passes stored on the round record to the multiplier that was paid.
Integration notes
- Bet field:
betAmount(minor units of the session currency), like Fox'n Flock and Katapuuult. - Action:
{ "type": "pass", "seat": 0–9 }. - Cash out: the standard
POST /games/pass-the-jay/rounds/:roundId/cashout; its response includesanimationData.copSeatso the client can reveal the cop. - Client assets are versioned (
/games/pass-the-jay/assets/v1/) and served with a one-year immutable cache.