Skip to content

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.

PropertyValue
Game IDred-district
Engine version1.0.0
Typesession_based
VolatilityMedium — the player sets it by where they stop
Max Win10.50× bet (the top step; a lower operator or jurisdiction maximum win lowers a round's cap)
RTP variants92.00% / 94.00% / 96.00% / 97.00% — returned however the player plays
Minimum stake100 minor units (1.00 in 2-decimal currencies), over any lower operator setting
ThemeAdult (suggestive, non-explicit artwork and dialogue)

How a round works ​

PhaseDescriptionPlayer input
StakeThe stake is debited and the night is drawnPick a window (the first pick starts the round)
VisitThe tourist goes in and the curtain closes: a good visit climbs one step, a mishap ends the round and the stake is lostPick a window
Cash outPays stake × step for the visits that went wellPress Cash Out (after at least one good visit)
Top stepEight visits in a row went wellNone (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 well12345678
Cash out1.30×1.70×2.25×3.00×4.10×5.60×7.70×10.50×

The odds ​

VariantRTPFirst visit goes wellAll 8 go well (10.50×)Best stopping point returnsWorst stopping point returns
rtp-9292.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-9494.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-9696.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-9797.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 ​

VisitStepReached, rtp-92Reached, rtp-94Reached, rtp-96Reached, rtp-97Goes well after the one before, rtp-96SD of one round, rtp-96 (stakes)
11.30×70.77%72.31%73.85%74.62%73.85%0.571
21.70×54.12%55.29%56.47%57.06%76.47%0.843
32.25×40.89%41.78%42.67%43.11%75.56%1.113
43.00×30.67%31.33%32.00%32.33%75.00%1.399
54.10×22.44%22.93%23.41%23.66%73.17%1.736
65.60×16.43%16.79%17.14%17.32%73.21%2.111
77.70×11.95%12.21%12.47%12.60%72.73%2.544
810.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 ​

SituationSettlement
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-roundCashed out automatically at the step reached
Player starts a new round while one is openThe open round is cashed out at the step reached
Round left before its first visitPays 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, lost or top), visits, successes, multiplier, cashoutValue (minor units), nextMultiplier, nextCashoutValue, cashOutAvailable and the ladder (step 0 … 8). A visit adds result (success or mishap). 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 includes animationData.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.