Red District
A session-based pick-and-cash-out game. Three lit windows on a red-light street, a woman in each. The player stakes once and sends a very confident tourist on visits: every visit that goes well climbs one step up the multiplier ladder, a mishap (a burst pipe, a declined card, a call from mum …) ends the round, and cashing out pays the current step.
The outcome is decided by the RNG when the round starts: one draw fixes how many visits go well before the first visit, and never changes. Visiting only reveals it. Which window the player picks, and which woman sits in it, never enters the math.
| Property | Value |
|---|---|
| Game ID | red-district |
| Engine version | 1.0.0 |
| Type | session_based |
| Volatility | Medium — the player sets it by where they stop |
| Max Win | 10.50× bet (the top step; a lower operator or jurisdiction maximum win lowers a round's 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 |
| Theme | Adult (suggestive, non-explicit artwork and dialogue) |
How a round works
| Phase | Description | Player input |
|---|---|---|
| Stake | The stake is debited and the night is drawn | Pick a window (the first pick starts the round) |
| Visit | The tourist goes in and the curtain closes: a good visit climbs one step, a mishap ends the round and the stake is lost | Pick a window |
| Cash out | Pays stake × step for the visits that went well | Press Cash Out (after at least one good visit) |
| Top step | Eight visits in a row went well | None (paid 10.50× automatically) |
The steps are the same in every RTP variant; the variant only sets the odds of reaching them.
| Visits that went well | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| Cash out | 1.30× | 1.70× | 2.25× | 3.00× | 4.10× | 5.60× | 7.70× | 10.50× |
The odds
| Variant | RTP | First visit goes well | All 8 go well (10.50×) | Best stopping point returns | Worst stopping point returns |
|---|---|---|---|---|---|
| rtp-92 | 92.00% | 70.77% | 8.76% (1 in 11.41) | exactly 92.00% (walking away before the first visit) | 1.4 × 10⁻¹³ pt under (after 7 visits, 7.70×) |
| rtp-94 | 94.00% | 72.31% | 8.95% (1 in 11.17) | exactly 94.00% (walking away before the first visit) | 1.9 × 10⁻¹³ pt under (after 8 visits, 10.50×) |
| rtp-96 | 96.00% | 73.85% | 9.14% (1 in 10.94) | exactly 96.00% (walking away before the first visit) | 1.4 × 10⁻¹³ pt under (after 7 visits, 7.70×) |
| rtp-97 | 97.00% | 74.62% | 9.24% (1 in 10.82) | exactly 97.00% (walking away before the first visit) | 1.6 × 10⁻¹³ pt under (after 8 visits, 10.50×) |
The ladder
| Visit | Step | Reached, rtp-92 | Reached, rtp-94 | Reached, rtp-96 | Reached, rtp-97 | Goes well after the one before, rtp-96 | SD of one round, rtp-96 (stakes) |
|---|---|---|---|---|---|---|---|
| 1 | 1.30× | 70.77% | 72.31% | 73.85% | 74.62% | 73.85% | 0.571 |
| 2 | 1.70× | 54.12% | 55.29% | 56.47% | 57.06% | 76.47% | 0.843 |
| 3 | 2.25× | 40.89% | 41.78% | 42.67% | 43.11% | 75.56% | 1.113 |
| 4 | 3.00× | 30.67% | 31.33% | 32.00% | 32.33% | 75.00% | 1.399 |
| 5 | 4.10× | 22.44% | 22.93% | 23.41% | 23.66% | 73.17% | 1.736 |
| 6 | 5.60× | 16.43% | 16.79% | 17.14% | 17.32% | 73.21% | 2.111 |
| 7 | 7.70× | 11.95% | 12.21% | 12.47% | 12.60% | 72.73% | 2.544 |
| 8 | 10.50× | 8.76% | 8.95% | 9.14% | 9.24% | 73.33% | 3.026 |
"Reached" is the chance that the first k visits all go well, so that the player can cash out step k. The standard deviation is that of one round left at that step, in stakes.
RTP is the same whatever the player does
The night draw is one uniform integer n in [0, 2^52 − 1]. Visit k goes well exactly when n is below T_k = floor(rtpBasisPoints × 2^52 / (100 × step_k)), step k in hundredths of a multiplier. So the chance of reaching step k is the RTP divided by the step, up to an integer floor: leaving there pays the step that often, so every stopping point returns the variant's RTP, never more, and less only by under step / 2^52 of the stake. Before each decision the player learns nothing but "the visits so far went well" (the window chosen draws nothing), so every way of playing — any rule for when to cash out, riding to the top, walking away before the first visit — is a mix of stopping points and returns the RTP the operator selected. The full model is in the game's math model (games/red-district/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 step exactly, as does any whole-cent USDC or USDT stake; other stakes lose less than one unit per win. Below 1.00 that rounding would cost a visible share of the return (0.10 × 2.25 pays 0.22), 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 — visits made, step, cash-out button |
| Player idle for 5 minutes mid-round | Cashed out automatically at the step reached |
| Player starts a new round while one is open | The open round is cashed out at the step reached |
| Round left before its first visit | Pays step 0, the RTP itself (0.96× at rtp-96) |
The client finds an open round with GET /games/red-district/rounds/active?currency=… (the session's player; null when there is none). It returns the same view a visit response carries — never anything about the draw — and only for a round in the currency and money mode asked about.
Provably fair
For tenants with provably fair enabled, the night draw is derived from the committed server seed at sub-nonce 0 (purpose label lucky_visits). The seed is held while the round is open and revealed when it ends: with it, the number of good visits could be computed before the player leaves. The verifier reproduces the draw, turns it into the visits that go well with the paytable that priced the round, and replays the number of visits stored on the round record (visits) to the step that was paid.
Integration notes
- Bet field:
betAmount(minor units of the session currency), like Pass the Jay and Katapuuult. - Action (
POST /games/red-district/rounds/:roundId/actions):{ "type": "visit", "window": 0 | 1 | 2 }. The window is recorded with the round and never changes the outcome. A visit draws nothing. - Every response carries the round's view:
phase(active,lostortop),visits,successes,multiplier,cashoutValue(minor units),nextMultiplier,nextCashoutValue,cashOutAvailableand theladder(step 0 … 8). A visit addsresult(successormishap). A mishap or the top step settles the round in the same response. - Cash out: the standard
POST /games/red-district/rounds/:roundId/cashout; its response includesanimationData.luckyVisits(the round is over), so the client can show how far the night would have gone. - Which comic mishap plays, the women's lines and who replaces whom behind the curtain are client-side presentation: they draw nothing on the server and cannot affect the payout.