Skip to main content
The night is not only a till. A room has a mood, music has to fit the crowd, drunk guests start fights, and inspectors check the paperwork. Why: these systems turn running a club into a set of trade-offs (spend on a DJ, on security, on permits) instead of a pricing puzzle. All random draws come from the seeded deterministic generator described in The night loop, so the same seed replays the same fights and the same inspector.

The 0–100 stats

Reputation, hype, safety, guest satisfaction and the crowd-energy target are all bounded with clamp⁡(v)=min⁡(100,  max⁡(0,  v))\operatorname{clamp}(v) = \min\big(100,\; \max(0,\; v)\big)

Hype

Hype is a day-level stat: it fills the club tonight (it is the largest term in the head-count formula on Guests & spending) and fades by 10 every day. H←clamp⁡(H+ΔH),ΔH={hcpromo on channel cround⁡(0.3⋅fanbase)booking a DJ or a band30controversial promoH \leftarrow \operatorname{clamp}(H + \Delta H), \qquad \Delta H = \begin{cases} h_c & \text{promo on channel } c \\ \operatorname{round}(0.3 \cdot \text{fanbase}) & \text{booking a DJ or a band} \\ 30 & \text{controversial promo} \end{cases} where hch_c is 4, 6, 10, 14 or 25 for Posters, X, Instagram, TikTok and Influencer and 0.3 is the DJ hype factor. Each promo costs one CEO energy point and can run once per day. The controversial promo buys +30 hype for 3000 coin, but backfires with probability 0.25: reputation −20-20 and an inspector is guaranteed tonight. It is refused while reputation is 20 or less, so a backfire alone can never end the game.

Crowd energy

Crowd energy Et∈[0,100]E_t \in [0, 100] is the room’s mood during the night. Why: a half-empty room with nobody dancing feels dead, and the player should feel the difference between a packed floor and a quiet bar. Energy starts at 30 and moves 10% of the way toward a target each minute: Et+1=Et+0.1 (Et∗−Et)E_{t+1} = E_t + 0.1\,\big(E^\ast_t - E_t\big) Since E0=30E_0 = 30 and Et∗∈[0,100]E^\ast_t \in [0, 100], each step is a convex combination, so EtE_t stays in [0,100][0, 100] without a clamp. The target is Et∗=clamp⁡(100 (0.55 Dt+0.45 Φt)+5 (usnd+ulgt)+15 βtband+Xt)E^\ast_t = \operatorname{clamp}\Big( 100\,\big(0.55\, D_t + 0.45\, \Phi_t\big) + 5\,(u_{\text{snd}} + u_{\text{lgt}}) + 15\, \beta^{\text{band}}_t + X_t \Big) Φt=min⁡ ⁣(1,  nin+6 nhost0.95 C),Dt=min⁡ ⁣(1,  ndance/nin0.85)\Phi_t = \min\!\Big(1,\; \frac{n_{\text{in}} + 6\, n_{\text{host}}}{0.95\, C}\Big), \qquad D_t = \min\!\Big(1,\; \frac{n_{\text{dance}} / n_{\text{in}}}{0.85}\Big) where
  • Φt\Phi_t is how full the room looks: guests inside ninn_{\text{in}}, each host counting as 6 guests, against 95% of capacity CC.
  • DtD_t is the dancing share, maxing out when 85% of guests dance (Dt=0D_t = 0 in an empty room). Guests’ states are those chosen in the previous minute.
  • usnd,ulgt∈{0,1,2,3}u_{\text{snd}}, u_{\text{lgt}} \in \lbrace 0, 1, 2, 3 \rbrace are the sound and lighting upgrade tiers (+5 energy each).
  • βtband\beta^{\text{band}}_t is the band’s multiplier while a band plays, else 0.
  • XtX_t is the sum of active crowd moves (below).
Crowd moves are player actions with a duration and a cooldown. Each repeat is weaker: power =max⁡(0.2,  1−fatigue⋅uses)= \max(0.2,\; 1 - \text{fatigue} \cdot \text{uses}). The DJ anthem instead uses power 1.2 if the DJ matched the crowd, 0.7 if not.

What energy does

From Level 3 (the first venue with a dance floor), energy shapes every guest’s minute: where lerp⁡(a,b;x)=a+(b−a)clamp⁡[0,1](x)\operatorname{lerp}(a, b; x) = a + (b - a)\operatorname{clamp}_{[0,1]}(x).

Guest satisfaction per minute

Putting the pieces together, a guest inside who does not leave this minute gets satt+1=clamp⁡(satt+stroom+0.05 κt+0.15 powmc 1mc+0.01 nhost 1man⏟ambient+0.6 pnlt+at)\text{sat}_{t+1} = \operatorname{clamp}\Big( \text{sat}_t + \underbrace{s^{\text{room}}_t + 0.05\,\kappa_t + 0.15\,\text{pow}_{\text{mc}}\,\mathbb{1}_{\text{mc}} + 0.01\, n_{\text{host}}\,\mathbb{1}_{\text{man}}}_{\text{ambient}} + 0.6\,\text{pnl}_t + a_t \Big) where strooms^{\text{room}}_t is the energy drift above (0 below Level 3), κt=min⁡(1,60 nrel/nin)\kappa_t = \min(1, 60\, n_{\text{rel}} / n_{\text{in}}) the Guest Relations coverage, pnlt\text{pnl}_t the guest’s paper profit on tokens, and ata_t the action term: at={+5  (+2 per round bought)bought a token−10token out of stock−1waiting at a full bar0.15⋅max⁡(mtDJ, mtband)⋅(1+0.1 usnd)danced−0.05idlea_t = \begin{cases} +5 \;(+2 \text{ per round bought}) & \text{bought a token} \\ -10 & \text{token out of stock} \\ -1 & \text{waiting at a full bar} \\ 0.15 \cdot \max\big(m^{\text{DJ}}_t,\, m^{\text{band}}_t\big) \cdot (1 + 0.1\, u_{\text{snd}}) & \text{danced} \\ -0.05 & \text{idle} \end{cases} At the end of the night, the average of this number over every admitted guest decides reputation (see Reputation).

The DJ (rule R4)

DJ Rhea
DJ Rhea
EDM
DJ Kalu
DJ Kalu
Hip-hop
DJ Mira
DJ Mira
House
DJ Jax
DJ Jax
R&B
DJ Nova
DJ Nova
Techno
DJ Sable
DJ Sable
EDM
DJ Orion
DJ Orion
Techno
DJ Lux
DJ Lux
House
A DJ booking (one per night) brings hype now and lifts the dance floor later. It is usually made by day, but a DJ can still be booked after the doors open, as long as it is before minute 60 (23:00), when the set starts. At minute 60 (23:00) the DJ takes the decks and reads the room: mDJ={1+0.2=1.2gDJ=g^1−0.15=0.85gDJ≠g^g^=arg max⁡g#{guests inside with genre g}m^{\text{DJ}} = \begin{cases} 1 + 0.2 = 1.2 & g_{\text{DJ}} = \hat g \\ 1 - 0.15 = 0.85 & g_{\text{DJ}} \ne \hat g \end{cases} \qquad \hat g = \operatorname*{arg\,max}_{g} \#\lbrace \text{guests inside with genre } g \rbrace where g^\hat g is the dominant genre (ties go to the genre seen first; if the club is empty it falls back to all of tonight’s guests, then to the club’s own genre). Before minute 60, and on nights without a DJ, mDJ=0.5m^{\text{DJ}} = 0.5: dancing to the house playlist is half as satisfying. The DJ’s arrival also pumps the token market by 0.06 that minute. Matching the genre. The player cannot see the room before 23:00, but can forecast it. Since each guest likes the club genre with probability 0.4 and otherwise a uniform genre of their segment, the expected genre share is Pr⁡(genre=g)=0.4 1g=gclub+∑s0.6⋅ws∑jwj⋅1g∈Gs∣Gs∣\Pr(\text{genre} = g) = 0.4\,\mathbb{1}_{g = g_{\text{club}}} + \sum_{s} 0.6 \cdot \frac{w_s}{\sum_j w_j} \cdot \frac{\mathbb{1}_{g \in G_s}}{\lvert G_s \rvert} where wsw_s are tonight’s segment weights (promos included) and GsG_s the segment’s genres. Promoting to the right segment is how a player steers the room toward the DJ they booked.

Live bands

Soul Avenue
Soul Avenue
R&B
Brasshouse
Brasshouse
House
The Bassline Collective
The Bassline Collective
Hip-hop
Neon Pulse Live
Neon Pulse Live
EDM
Iron Loop
Iron Loop
Techno
A band is booked by day, one per night. Its set is fixed when the night opens, from whether a DJ is booked by then: set={[0,60)a DJ is booked: opening act, 22:00–23:00[30,180)no DJ: main act, 22:30–01:00\text{set} = \begin{cases} [0, 60) & \text{a DJ is booked: opening act, 22:00–23:00} \\ [30, 180) & \text{no DJ: main act, 22:30–01:00} \end{cases} A DJ booked later in the night doesn’t move the band: a paid act always plays its slot, and the two simply overlap. When the set starts, the band reads the room with the same R4 rule, giving mband∈{1.2,0.85}m^{\text{band}} \in \lbrace 1.2, 0.85 \rbrace. While it plays, it adds 15 mband15\, m^{\text{band}} to the energy target and dancers use max⁡(mDJ,mband)\max(m^{\text{DJ}}, m^{\text{band}}), so a band rescues the pre-DJ hour from the 0.5 playlist factor.

Tilt and fights

Tilt τ≥0\tau \ge 0 is how wound-up a guest is. It has no upper bound. Each minute: τ←max⁡(0,  τ−0.1)  +  8 max⁡(0,−pnl)  +  fomok⋅1bought k\tau \leftarrow \max(0,\; \tau - 0.1) \;+\; 8\,\max(0, -\text{pnl}) \;+\; \text{fomo}_k \cdot \mathbb{1}_{\text{bought } k} where fomok\text{fomo}_k is 0 to 22 depending on the token, added once per purchase (a round bought for someone else adds none). A guest with τ≥80\tau \ge 80 is at risk and may start a fight (rule R9). Each minute, an at-risk guest fights with probability pfight={0.003nsec⋅40<nin(understaffed)0.0002otherwisep_{\text{fight}} = \begin{cases} 0.003 & n_{\text{sec}} \cdot 40 \lt n_{\text{in}} \quad \text{(understaffed)} \\ 0.0002 & \text{otherwise} \end{cases} where nsecn_{\text{sec}} is the security staff on the books and ninn_{\text{in}} the number inside at that moment. One guard per 40 guests cuts the fight rate fifteen-fold. A fight throws the guest out and costs Safety←clamp⁡(Safety−15),R←clamp⁡(R−5)\text{Safety} \leftarrow \operatorname{clamp}(\text{Safety} - 15), \qquad R \leftarrow \operatorname{clamp}(R - 5)

Security escorts

Guards act on their own before trouble starts. Each minute, before the guests act, with ϵt\epsilon_t escorts still in progress: freet=max⁡(0,  nsec−ϵt)\text{free}_t = \max(0,\; n_{\text{sec}} - \epsilon_t) The freet\text{free}_t most tilted at-risk guests are walked out, and each escorting guard is busy for 6 minutes. At-risk guests beyond that wait, and roll for fights. The player can also send security to a specific at-risk guest from an alert.

Permits, inspections and violations

A licensed club has to keep its permits current. Why: cutting corners on paperwork should be a gamble with real odds, not a free saving. A permit jj is active on day dd if it is valid and d<expiresjd \lt \text{expires}_j. Renewing an active permit extends it from its current expiry, so renewing early loses nothing.

The inspection roll (R6)

When the club opens, an inspector is scheduled with probability pinsp={1forced (controversial-promo backfire or a scenario event)max⁡(p0,  0.2)Safety<40p0otherwisep0={0.4a required permit is missing or expired0.05all in orderp_{\text{insp}} = \begin{cases} 1 & \text{forced (controversial-promo backfire or a scenario event)} \\ \max\big(p_0,\; 0.2\big) & \text{Safety} \lt 40 \\ p_0 & \text{otherwise} \end{cases} \qquad p_0 = \begin{cases} 0.4 & \text{a required permit is missing or expired} \\ 0.05 & \text{all in order} \end{cases} at a uniform minute in {0,…,359}\lbrace 0, \dots, 359 \rbrace. Fights get reported: a club with low safety draws inspectors even with perfect paperwork.

The visit

The inspection passes if no required permit is missing and no underage guest was admitted tonight (rule R8: underage guests get in when there is no security from Level 3 on). Otherwise: coin←coin−5000,violations←violations+1\text{coin} \leftarrow \text{coin} - 5000, \qquad \text{violations} \leftarrow \text{violations} + 1 and if the on-premise licence is missing while the takeaway one is active (rule R16), the venue is sealed for 1 night: the next night has no guests.

Crowd permit (R7) and the door (R10)

The first minute more than 150 guests are inside, the engine rolls once: without an active crowd permit, the club is shut down with probability 0.5. Everyone leaves, and at the report coin←coin−round⁡(0.5 (bar+cover+table)),R←clamp⁡(R−10)\text{coin} \leftarrow \text{coin} - \operatorname{round}\big(0.5\,(\text{bar} + \text{cover} + \text{table})\big), \qquad R \leftarrow \operatorname{clamp}(R - 10) Forcing the door open past capacity (R10) is an immediate violation, once per night.

Reputation from the night

At the report, the average satisfaction Sˉ=round⁡(1∣A∣∑g∈Asatg)\bar S = \operatorname{round}\big(\frac{1}{\lvert A \rvert}\sum_{g \in A} \text{sat}_g\big) over all admitted guests AA sets the reputation change (rule R11): ΔR={round⁡ ⁣(3+5⋅Sˉ−7030)Sˉ≥70040≤Sˉ<70−5Sˉ<40R←clamp⁡(R+ΔR)\Delta R = \begin{cases} \operatorname{round}\!\Big(3 + 5 \cdot \dfrac{\bar S - 70}{30}\Big) & \bar S \ge 70 \\ 0 & 40 \le \bar S \lt 70 \\ -5 & \bar S \lt 40 \end{cases} \qquad R \leftarrow \operatorname{clamp}(R + \Delta R) A good night is worth +3 to +8; a bad one costs 5. With no admitted guests, reputation does not change.
Level 4 (capacity 190), 150 guests inside, 60 of them dancing, 2 hosts, 3 guards, sound and lighting at tier 1, no band, no crowd move, energy Et=40E_t = 40.Energy.Φ=min⁡ ⁣(1,150+120.95×190)=0.898,D=min⁡ ⁣(1,60/1500.85)=0.471\Phi = \min\!\Big(1, \tfrac{150 + 12}{0.95 \times 190}\Big) = 0.898, \quad D = \min\!\Big(1, \tfrac{60/150}{0.85}\Big) = 0.471E∗=100 (0.55×0.471+0.45×0.898)+10=76.3,Et+1=40+0.1 (76.3−40)=43.6E^\ast = 100\,(0.55 \times 0.471 + 0.45 \times 0.898) + 10 = 76.3, \qquad E_{t+1} = 40 + 0.1\,(76.3 - 40) = 43.6The room is filling up, so energy climbs about 3.6 points this minute.Fights. 3 guards cover 3×40=1203 \times 40 = 120 guests, fewer than 150, so the club is understaffed: each at-risk guest fights with probability 0.003 per minute, about 1−0.99760=16.5%1 - 0.997^{60} = 16.5\% over an hour. A fourth guard (160≥150160 \ge 150) drops that to 1−0.999860=1.2%1 - 0.9998^{60} = 1.2\%.Reputation. If the night ends with average satisfaction 82, ΔR=round⁡(3+5×12/30)=5\Delta R = \operatorname{round}(3 + 5 \times 12/30) = 5.