not-tonight/docs/GAME_DESIGN.md
type-two 92e370e8c3 Add role ladder (glassie/bartender/doorgirl/bouncer/DJ) to design + role-agnostic sim rule
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 15:58:03 +10:00

215 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# NOT TONIGHT — Game Design Document
*Working title: **NOT TONIGHT** (aka "Hard No: A Hospitality Power Trip")*
*Genre: bureaucracy-sim / power-trip catharsis. Papers, Please meets a Saturday night in Fortitude Valley.*
*Platform: browser (desktop-first, mouse-driven). Pixel art.*
---
## 1. Pitch
You are the Head of Security at a volatile, pretentious nightclub. Your job is not to
make money. Your job is to protect the **Vibe** — by keeping the wrong people out,
throwing the messy people onto the street, and doing it all with absolute,
unquestionable authority.
But you're squeezed from both sides: management's dress-code demands get more
psychotic by the hour, and the Liquor Licensing Inspector is circling. One minor
through the door on a fake ID and you're not power-tripping anymore — you're
unemployed.
## 2. The Three Meters (core economy)
Everything in the game moves one of three numbers:
| Meter | Range | Goes UP when | Goes DOWN when | At zero / max |
|---|---|---|---|---|
| **VIBE** | 0100 | Right people in, messy people ejected stylishly, queue hype | Wrong people in, dead floor, fights you missed | Vibe 0 = Dazza fires you (fail night) |
| **AGGRO** (queue) | 0100 | Making people wait, arbitrary denials, rain | Letting people in, smooth queue flow | Aggro 100 = queue riot / someone glasses the door (fail night) |
| **HEAT** (legal) | 03 strikes | Minor admitted, maggot-drunk served/ignored, capacity breach, incident-report lie discovered | Never decreases within a night | 3 strikes = licence pulled, run over (fail RUN, not just night) |
The design intent: **Vibe rewards cruelty, Heat punishes carelessness, Aggro punishes
slowness.** Every decision at the rope pulls at least two of them in opposite
directions. That tension is the whole game.
## 3. The Night Loop
A night = **Door phase → Floor phase (interleaved) → Last Drinks → Night Summary.**
The clock runs 9:00 PM → 3:00 AM (compressed to ~1215 real minutes). You are
physically in ONE place at a time. While you're on the Floor, the queue Aggro climbs
and the door is worked (badly) by Trainee Kayden. While you're at the Door,
infractions accumulate on the Floor. **Deciding where to be is a resource decision.**
A radio crackle ("mate you'd better get in here") tells you when the Floor needs you.
### 3.1 Phase 1 — THE DOOR (static desk scene, Papers-Please grammar)
Forward-facing tableau: the rope, the queue snaking off-screen, rain, the kebab shop
glow across the road. Patrons step up one at a time. Your desk/tools:
- **The Rope button.** Unhook to call the next patron up. You can just… not.
Making people wait builds **Hype** (a Vibe multiplier) but ticks Aggro.
You can look at your phone while they stand there. This is a feature.
- **ID tray.** Patron hands over ID. Checks: **birthday math** (are they 18 *as of
tonight's date*?), expiry, photo vs face (paper-doll hair/skin/face features must
match), obvious fakes (laminate peel, "McLovin"-tier joke names, wrong state
hologram). Admitting a minor = instant Heat strike *when the inspector audits*.
- **The Clicker.** Physical capacity counter. Click IN, click OUT. Venue has a
licensed capacity; going over is a Heat strike if inspected. (The clicker is also
just… satisfying. Make it clunky and loud.)
- **Dress-code card.** Management (Dazza) texts new rules through the night,
escalating from sane to unhinged:
- 9:30 PM — "no thongs, no singlets"
- 10:30 PM — "no visible logos"
- 11:30 PM — "no white sneakers UNLESS vintage"
- 1:00 AM — "no one who looks like they'd request a song"
Rules are live the moment the text arrives. You scan the sprite, then **DENIED**
(giant red stamp) or **wave-through**. Wrong admits drain Vibe when Dazza does a
lap and spots them.
- **Sobriety check.** Red eyes / sway in the idle animation / hiccup SFX are tells.
Trigger a test: recite the alphabet backwards, answer an unhinged riddle, walk the
line (cursor-follow minigame). You may fail them *even if they pass*. (Aggro cost.)
- **Guest list clipboard.** Misspelled names, "+1"s that arrive as +6, and the trap:
"I know the owner." Usually a lie (deny → Vibe up). Sometimes TRUE (deny →
massive Vibe hit + a furious Dazza text). Tells exist if you look hard enough.
- **UV pass-out stamp.** Anyone stepping out for a smoke gets a UV hand stamp.
Re-entry = check the stamp. This pays off in the Floor phase (see flashlight).
**Verdict verbs:** ADMIT · DENY (stamp) · SOBRIETY TEST · PAT-DOWN (send to
contraband check) · "one sec" (leave them standing there).
### 3.2 Phase 2 — THE FLOOR (top-down patrol)
Top-down 2D crawler through the dark venue — bar, dance floor, booths, toilets,
smoking area. Nearly black except neon accents; your **flashlight cone** reveals
detail. The flashlight is also the **UV lamp** (toggle): checking pass-out stamps,
spotting spiked drinks glowing wrong.
| Infraction | Detection | Mini-game | Notes |
|---|---|---|---|
| **The Cut-Off** | Sway animation at the bar, bumping into people | Aggressive dialogue tree: "Have some water, mate" → "You're done for the night." Escalating drunk states: Tipsy → Loose → Messy → **Maggot** | Leaving a Maggot on the floor when the inspector walks in = Heat strike. Escort-out animation: their avatar slouches in defeat. |
| **Toilet intruders** | Two pairs of feet under one stall door | **Rhythm game:** time your door-bangs to the muffled techno kick. On-beat bangs = shock factor multiplier, they scatter. Off-beat = they ignore you, Vibe leaks | The beat is the actual audio engine beat — see §5 |
| **Contraband** | Suspicious idle (patting pockets, glancing) | **Pat-down:** rapid drag-and-drop from pockets into the AMNESTY BIN. Chaotic item pool: baggies, flasks, a whole kebab, a live budgie, someone else's ID | Timed; miss items and they walk with them |
| **No stamp** | UV lamp on a re-entered patron shows nothing | March them back to the door | They snuck past Kayden. Kayden apologises on radio. |
| **Fight brewing** | Two patrons in escalating shove animation | Get physically between them before the swing timer ends | Missed fight = big Vibe + Aggro hit, possible Heat |
### 3.3 Last Drinks & Night Summary
3:00 AM: lights up (the floor scene literally brightens — brutal), sweep the
stragglers, then the **Night Summary**:
- Vibe graph across the night, cash (wage + Dazza's mood bonus), Heat status.
- **The Incident Report.** A form. You fill in what happened. You can lie
("the patron fell over by himself"). Lies reduce Heat *now* but the inspector
cross-references reports across nights — contradictions surface later as strikes.
This is the game's long-memory conscience mechanic.
## 4. People
### 4.1 Patrons are data, not sprites (THE core technical/design decision)
Every patron is a generated record:
- demographics: age (some 17½ — that's the ID game), archetype
- **outfit as typed layers**: shoes {type, colour, vintage?}, top {type, logo?},
accessories… — the paper-doll renderer draws the layers; the dress-code engine
evaluates the same data. *The player judges pixels; the rules judge data.* The gap
between those two is where the gameplay lives.
- intoxication (drifts up over the night, per-patron tolerance)
- hidden flags: fake ID?, contraband?, on guest list?, actually-knows-the-owner?
- **memory**: regulars persist across nights (seeded RNG). Deny the same bloke
twice and he comes back in a bad disguise (fake moustache on the same sprite —
same walk animation gives him away).
### 4.2 Archetypes (initial set)
The Fresh-18 (nervous, ID is REAL, don't be a monster) · The Almost-18 (confident,
ID is fake) · The Finance Bros (travel in packs, one is always Maggot) · The
Influencer ("I'm on the list", films you when denied — denying costs Aggro, gains
Vibe) · The Regular (knows your name, tips) · The Owner's Mate (the trap) ·
The Quiet Messy One (seems fine at the rope, Maggot by midnight — tells were there) ·
**The Inspector** (plainclothes! reads as a normal boring patron; if you're breaching
when they reveal, strikes rain down).
### 4.3 The moral undertow (why it's not just cruelty)
Papers, Please works because the stamps land on people. Scatter scripted encounters
through the generated crowd: the girl who *needs* back in to grab her mate from a bad
date (no stamp, over capacity — your call); the freshly-dumped guy who just wants one
quiet beer (he's already Loose); the regular's last night before moving away. Doing
the human thing usually costs Vibe or risks Heat. The game never tells you which
choice was right. This is the difference between satire and a bullying simulator —
**protect this in every content pass.**
### 4.4 Dazza (management, via text)
Never seen. Escalating texts: dress codes, vibe complaints ("why is the floor MID"),
2 AM philosophy, occasionally something that reveals he's terrified of the owner too.
The unreliable authority you serve.
## 5. Aesthetic
- **Visuals:** gritty high-contrast pixel art. Rain-slick street, neon signage, dark
interior with light pools. Exaggerated animations: dramatic drunk falls, the
defeated slouch of the ejected, the stamp SLAM.
- **Audio (the signature trick):** ONE looping synthesized techno track (WebAudio),
played through a **low-pass filter whose cutoff = your location**. At the door:
muffled kick through the wall. Step inside: filter opens, full track. The toilet
rhythm game syncs to this same clock — the beat is authoritative from the audio
engine, not an animation timer. UI sounds heavy and aggressive: stamp slams, door
thuds, radio static, the clicker's clunk.
- **Tone of writing:** Australian. "Mate", "youse", "carn". Affectionate, not
mocking. The kebab shop across the road is visible all night and is the true
moral centre of the game.
## 6. Roles & career mode
**Structural principle: the venue is ONE simulation; a role is a lens + verb-set
over it.** Patrons are role-agnostic data wandering the crowd sim; each role is a
scene that reads the same state with different permissions. The career ladder
doubles as the tutorial — each role teaches one system before the endgame role
demands them all. NPC staff work whichever roles you aren't (competence varies —
see Kayden).
| Role | Verbs | Teaches | Signature tension |
|---|---|---|---|
| **Glassie** (entry) | Collect glasses (hand-stack grows: taller = clears faster, wobbles more; drop = smash + mop duty), mop spills before slips, restock runs through the crowd, find lost phones | Floor navigation, drunk-tells by pure observation | ZERO authority. You see the Maggot but can only radio it in — and watch who responds |
| **Bartender** | Order queue (orders get slurred/ambiguous with patron drunkenness), pour minigame (jigger = safe, free-pour = fast/risky), tips via speed + banter picks, drink-watch (intervene on the glass-hoverer) | Intoxication rules from the server's side | RSA: you legally CANNOT serve a Maggot — the cut-off with them begging across the bar, Heat if the inspector's watching |
| **Doorgirl** | The Door phase (§3.1): IDs, dress code, guest list, rope theatre | Inspection & social judgment | The whole §3.1 tension set |
| **Bouncer** | The Floor phase (§3.2): patrol, ejections, stalls, pat-downs | Enforcement & positioning | The whole §3.2 tension set |
| **DJ** (unlock) | Ride the crowd's Energy curve with track picks (tracks = parameter sets on the synth engine — gameplay drives the actual audio), beatmatch transitions (align two beat bars, cut on the one), field booth requests | Reading the room | Request verbs: the dismissive headphone-lift, the nod-then-never-play, the hard no. Denying: +Vibe (purists), +Aggro (requester's table) |
| **Head of Security** (endgame) | §3.1 + §3.2 interleaved, PLUS radio command of NPC staff in every other role | Everything at once | You used to speak into the radio; now you're the voice on the other end |
**Roster board** frames progression: pick shifts from a weekly roster
(role × venue = level select), wages differ by role, story beats attach to roles.
Venues as difficulty tiers, nights as rounds (Thu → Fri → Sat per venue):
1. **The Royal (dive bar).** Glassie/bartender shifts. Loose rules, capacity 80.
2. **Voltage (Valley club).** Doorgirl/bouncer shifts. Full ruleset, inspector active.
3. **Elevate (rooftop).** Head of Security. Dress code hell, influencer density, VIP politics.
4. **ROOM (underground techno, boss venue).** The DJ shift + Head of Security
finale. Dress code re-randomises every 15 in-game minutes, everyone claims VIP,
the inspector is *definitely* in the building, and the techno is so loud all
dialogue is written as lip-read guesses.
Roguelite-lite structure: fail a night → retry the night; 3 Heat strikes → run over.
Seeded runs for shareability ("seed VALLEY-4207 is brutal").
*(Far-future note, not a plan: this structure is accidentally multiplayer-shaped —
one night, each player a role. Architecture shouldn't preclude it; nothing should
be built for it.)*
## 7. Scope guardrails
- v0.1 = ONE venue, Door phase only (the doorgirl shift), 3 nights, placeholder
paper-doll art. Ship it.
- v0.2 = Floor phase + door/floor interleave + audio engine.
- v0.3 = progression, regulars' memory, incident report, inspector.
- v0.4 = content pass (archetypes, scripted encounters), real pixel art, boss venue.
- v0.5+ = the role ladder (§6): glassie → bartender → DJ, roster board. Roles are
post-core-game content — but every earlier phase must keep the sim role-agnostic
(no system may assume the player is security).
- Cut before slipping: fight mini-game, budgie, venue 3. Never cut: the clicker,
the stamp feel, the low-pass filter trick.