Shots
A session-based crash game. A regular takes a seat and starts knocking back shots; a multiplier climbs from 1.00× while they keep it together. The player cashes out whenever they like, or sets an automatic exit before the round. If the regular pukes or passes out first, the stake is lost.
The outcome is decided by the RNG when the round starts: the crash point is drawn before the first shot and never changes. The player only decides when to leave.
| Property | Value |
|---|---|
| Game ID | shots |
| Engine version | 1.0.0 |
| Type | session_based |
| Volatility | High — the player sets it by where they leave |
| Max Win | 1,000× bet (the game cap) |
| 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 crash point is drawn | Place the bet, optionally with an automatic exit (1.01×–1,000×) |
| Start | The regular sits down; the first shot lands 1 s after the bet | None |
| Climb | The multiplier climbs as e^(0.145 t) from the first shot | Cash out at any moment |
| End | A cash-out pays the multiplier reached when it arrived at the server; an automatic exit pays exactly its target; the round's cap (1,000×, or less where the operator's or the jurisdiction's maximum win requires it) pays the cap; the regular going down first pays nothing | None |
The first payable exit is 1.01×. A cash-out that arrives earlier (during the start delay or the first milliseconds of the climb) is paid as a 1.01× exit, provided the regular survives the first shot. A tie goes to the player: an automatic exit at exactly the crash point wins.
The odds
| Variant | RTP | Out on the first shot | Median crash point | Reaches the 1,000× cap | Best exit point returns | Worst exit point returns |
|---|---|---|---|---|---|---|
| rtp-92 | 92.00% | 8.91% | 1.84× | 1 in 1,087 | exactly 92.00% (20 exit points) | 2.2 × 10⁻¹¹ pt under (at 998.81×) |
| rtp-94 | 94.00% | 6.93% | 1.88× | 1 in 1,064 | exactly 94.00% (20 exit points) | 2.2 × 10⁻¹¹ pt under (at 997.31×) |
| rtp-96 | 96.00% | 4.95% | 1.92× | 1 in 1,042 | exactly 96.00% (20 exit points) | 2.2 × 10⁻¹¹ pt under (at 999.41×) |
| rtp-97 | 97.00% | 3.96% | 1.94× | 1 in 1,031 | exactly 97.00% (20 exit points) | 2.2 × 10⁻¹¹ pt under (at 997.46×) |
Exits and timings
| Exit at | Shown after the first shot | Reached, rtp-92 | Reached, rtp-94 | Reached, rtp-96 | Reached, rtp-97 | SD of one round, rtp-96 (stakes) |
|---|---|---|---|---|---|---|
| 1.01× (the first exit) | 0.069 s | 91.09% | 93.07% | 95.05% | 96.04% | 0.219 |
| 1.50× | 2.797 s | 61.33% | 62.67% | 64.00% | 64.67% | 0.720 |
| 2.00× | 4.781 s | 46.00% | 47.00% | 48.00% | 48.50% | 0.999 |
| 3.00× | 7.577 s | 30.67% | 31.33% | 32.00% | 32.33% | 1.399 |
| 5.00× | 11.100 s | 18.40% | 18.80% | 19.20% | 19.40% | 1.969 |
| 10.00× | 15.880 s | 9.20% | 9.40% | 9.60% | 9.70% | 2.946 |
| 20.00× | 20.661 s | 4.60% | 4.70% | 4.80% | 4.85% | 4.275 |
| 50.00× | 26.980 s | 1.84% | 1.88% | 1.92% | 1.94% | 6.861 |
| 100.00× | 31.760 s | 0.920% | 0.940% | 0.960% | 0.970% | 9.751 |
| 500.00× | 42.860 s | 0.184% | 0.188% | 0.192% | 0.194% | 21.888 |
| 1,000.00× (the cap: never leaving) | 47.640 s | 0.0920% | 0.0940% | 0.0960% | 0.0970% | 30.969 |
"Shown after the first shot" is when the multiplier first shows that value; the first shot lands 1 s after the bet. "Reached" is the chance the regular is still standing there.
RTP is the same whatever the player does
The crash point is set so that the chance of reaching a multiplier m is the RTP divided by m, exactly up to an integer floor: an exit at m pays m × stake that often, so every exit point returns the variant's RTP, never more, and less only by under m / 2^52 of the stake (about 2 × 10⁻¹³ at the cap). While a round runs the player learns nothing but "still standing", so every way of playing (a manual exit, an automatic exit at any target, never leaving) is a mix of exit points and returns the RTP the operator selected. The house edge is the chance of going down on the very first shot. The full model, with the exact bound, is in the game's math model (games/shots/docs/math-model.md).
Payouts are rounded down to the currency's smallest unit. A stake of whole units in a 2-decimal currency pays every exit exactly, as does any whole-cent stake in USDC or USDT. Below 1.00 the first exits would pay the stake back (0.10 × 1.05 pays 0.10), which is why the game's minimum stake is 1.00 there.
Unfinished rounds
| Situation | Settlement |
|---|---|
| Player reopens the game while the round is still running | The round is picked up where it is, on the server's clock |
| Player gone (tab closed, connection lost) | Settled as it would have ended without them: automatic exit, cap or crash |
| Player starts a new round while one is still running | The running round is cashed out at that moment |
| A cash-out arrived in time but its answer was lost | Honoured at the moment it arrived |
The client finds an open round with GET /games/shots/rounds/active?currency=… (the session's player; null when there is none). It returns the same view a start response carries, re-timed to now — never the crash point.
Provably fair
For tenants with provably fair enabled, the round's three draws (the crash point, which regular drinks and how they go down) are derived from the committed server seed at sub-nonce 0. The seed is held while the round is open and revealed when it ends: with it, the crash point could be computed. The verifier reproduces the three draws and checks the exit recorded on the round (the automatic exit set, the round's cap and the exit paid) against the crash point. When the bet named the regular already at the bar, the round records it and the verifier shows that regular, with the drawn one as not used.
Integration notes
- Bet fields:
betAmount(minor units of the session currency), like Fox'n Flock and Pass the Jay, plus an optional automatic exit asautoCashout100(an integer in hundredths:250= 2.50×) orautoCashout(a decimal with at most two places). Absent ornullmeans no automatic exit; a malformed value refuses the bet (30611) rather than starting a round without it. - Optional
patron(gym_bro,punk_woman,alien_woman,conspiracy_uncleorfake_guru): the regular already at the bar on the player's screen drinks this round instead of the drawn one. It is cosmetic (the draws and the payout are unchanged) and recorded with the round; an unknown name refuses the bet. Our client sends it for the first round after the game opens. - Actions (
POST /games/shots/rounds/:roundId/actions):{ "type": "cashout" }is priced at its arrival on the server's clock (a time sent by the client is ignored);{ "type": "await" }is held until the round ends and answered with how it ended, or after 20 s withresult: "running", and the client asks again. - A cash-out through the actions endpoint is answered the moment its exit is on record, before the payout is credited, so the player sees it at once: that answer has
settled: falseand nobalance. The heldawaitthen answers with the settled round and the balance. A crash is announced the same way (the balance does not move); an automatic exit or the cap is credited before its answer, which carries the balance. - Cash out also works through the standard
POST /games/shots/rounds/:roundId/cashout, which settles before it answers and returns the final balance. - While the round runs, responses carry
elapsedMs(server time since the first shot, negative during the start delay),growthPerSecond,startDelayMsandcapMultiplier100, so the client draws the curve on the server's clock. The final response revealscrashPoint100, theending, theexitpaid andwinAmount.