Compare commits

..

1 Commits

Author SHA1 Message Date
type-two
6c5889c957 Door tween leak: tutorial fade spawned an 800ms tween per frame — now pure tutorialAlpha() driven from update()
The alpha>0 guard never closed (each new tween re-captured the still-
positive alpha), so DoorScene accumulated ~1 live tween per frame all
night. Fade is now tween-free elapsedMs math with tests pinning that it
reaches exactly 0 and stays there.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 19:43:08 +10:00
200 changed files with 168 additions and 10768 deletions

4
.gitignore vendored
View File

@ -1,6 +1,2 @@
node_modules
dist/
art_incoming/
public/props/manifest.lock
__pycache__/
*.pyc

View File

@ -29,31 +29,6 @@ by parallel "lanes" coordinated through files, reviewed by Fable.
branch. An unpushed session didn't happen.
- Remote is Gitea: `ssh://git@100.71.119.27:222/monster/not-tonight.git`.
## Dev notes (venue expansion landed 2026-07-28)
- **The ladder's four venues now have four different rooms** (`docs/VENUES.md`).
Layouts live in `src/scenes/floor/layouts/` (`theRoyal`, `elevate`, `room`);
**Voltage stays in `venueMap.ts`** so the others can import primitives from it
without an import cycle. A night picks its room from `NightContext.venue.id`.
- Nothing about a room may be a module singleton any more. Props, lights, posts,
probes and the tile palette all hang off `FloorLayout`. `venueMap.VENUE/PROPS/
LIGHTS` still exist and are still Voltage's — they are the reference room, not
"the venue".
- **Dev route `#floor:<venueId>`** boots the floor demo straight into one room
(`#floor:room`, `#floor:theRoyal`, `#floor:elevate`). Plain `#floor`/F = Voltage.
- `tests/floor/layoutInvariants.ts` is the executable rulebook every layout runs:
perimeter, reachability, anchors on walkable tiles, posts not sealed, probes
reachable, props on-grid. Add a room, add it to `LAYOUTS`, it gets checked.
- Asset generation is `tools/gen/``assets.py` is the manifest (one entry per
sprite), `run_batch.py` walks it, resumable, `--workers N`. **Cloudflare Workers
AI first** (10k free neurons/day, resets 00:00 UTC), falling back to MODELBEAST
`flux_local` automatically when the day's allocation is spent. Meshes use the
**512 tier + vertex baker** (`mb.FAST_MESH`): ~90s vs ~6min, and the difference
does not survive the downscale to 32px. Heartbeat: `~/.jobs/not-tonight-assets.json`.
- `props_import.py` takes its sizes FROM `tools/gen/assets.py`, so sizes cannot
drift between the farm and the game. It locks `manifest.json` — parallel imports
used to lose entries to a read-modify-write race, which shows up as a prop that
is on disk but renders as a placeholder. `tools/gen/rebuild_manifest.py` repairs.
## Dev notes (Phase 2 landed 2026-07-19)
- The game boots into the NIGHT (Thu→Fri→Sat run, saved). Controls: click the
rope/verdicts at the door; click the venue doorway to step inside; on the

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 363 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 KiB

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

After

Width:  |  Height:  |  Size: 92 KiB

View File

@ -70,7 +70,7 @@ furniture (bar, booths, stools) could come straight from its fit pipeline.
(794 MB, 26,910 files) — prior AI-gen pools; sweep for club/street/neon/night
material before generating fresh.
- m4pro SPACEY `MRP PHOTOSHOP FILES` (4.4 GB PSDs) — design-language source
(posters/flyers could become in-game wall dressing). m4pro is reachable (HANDS-OFF label retired 2026-08-06 — never true); access
(posters/flyers could become in-game wall dressing). m4pro is HANDS-OFF; access
via the SMB mount on m3ultra if needed.
### 4. Generation pipeline (MODELBEAST)

View File

@ -1,118 +0,0 @@
# NOT TONIGHT — Fleet Asset Notes
*What already exists on John's network that this game can reuse, borrow from, or
generate with. Sourced from the fleet-wide `ASSET_INVENTORY_2026-07-18.md` and
`GAME_ASSET_AUDIT_2026-07-18.md` (both on ultra `~/Documents/`). Compiled
2026-07-19.*
**Context for lanes:** v0.10.3 use PROCEDURAL placeholder art (coloured-pixel
paper-doll, synthesized audio) — nothing below is needed before the v0.4 art pass.
This doc exists so the art pass starts from the library, not from scratch. Nothing
here changes the `renderDoll` / layer contracts.
## Directly relevant (v0.4 art pass)
### 1. 90sDJsim paper-doll wardrobe — the big one
`ultra:~/Documents/90sDJsim/web/world/media/doll/` — **441 authored clothing
sprites** across tops/bottoms/shoes/hats/bags, brand-flavoured (coogi, dr_martens,
nike_air_max, moschino, quiksilver, kmart, disruptor_ii…), dynamically loaded by
`os.listdir` slot convention.
- **Reuse the taxonomy**: their slot/brand/type naming should inform
`data/outfits.ts` vocabulary (we already have shoes/legs/top/outer/hair/accessory
— cross-check their catalog for types we missed, e.g. bucket hats, bumbags).
- **Reuse the art via pixelation**: 90s wardrobe reads perfectly as 2026 Valley
fashion-in-quotes. A downscale/quantize pass (sprite → 32×48 palette-locked
pixel layer) could convert the catalog into real doll layers. Prototype on 10
sprites before committing — pixelated photo-sprites can look mushy; may need a
cleanup pass or MODELBEAST-assisted redraw per sprite.
### 2. RIGROOM — the character × animation factory (surveyed 2026-07-19)
**This supersedes the old "animation references" note. The fleet has a full
character/animation pipeline, live and organised:**
- **RIGROOM library** (`ultra:~/meshgod-backups/library`, 2.4 GB): **607
animation FBX** in themed packs + 59 character files. Web UI live at
`http://100.91.239.7:8010/rigroom` (characters × animations pairing, three.js
preview, instant Mixamo-ready FBX download). CLI:
`MESHGOD/scripts/rigroom.py classify|sort|scan`.
- Clips that read like THIS game's shot list: `Searching_Pockets` (pat-down),
`Standing_Arguing` + a full boxing/knockout pack (floor fights),
`Shaking_Head_No` (the deny), `Inspecting`/`Looking_Around` (ID check),
`Leaning_Idle02_Smoking` (smoking area), dozens of idles/sits, dance packs,
`Brutal To Happy Walking`, zombie stagger (maggot walk), 12 DJ motions.
Raw source: `m3ultra:~/Documents/Rokoko_Free_Mocap_FBX_263` (606 FBX).
- **Modular character kit** (`m3ultra:~/Documents/character_kit_modular`,
canonical `ultra:~/Documents/character_kit/modular/`): GODVERSE socket
standard — head/hands/feet/torso swap on one shared 65-bone `mixamorig:`
skeleton, 40 embedded actions, every library clip retargets for free.
- **repose** (`m3ultra:~/Documents/repose`): photo → T-pose views (SD1.5 +
ControlNet, all-local) → MeshGod multi-view → autorig. A face becomes a
rigged character without leaving the tailnet.
- **For NOT TONIGHT (v0.4 art pass), the pre-render path is now fully paved:**
modular kit character + RIGROOM clip → Blender orthographic top-down/front →
pixelate → sprite sheets behind the existing `renderDoll` poses. The outfit
variety could even come from kit part swaps. Same pipeline, one venue's
worth of NPC animation for free. Decide at v0.4; contracts don't move.
- Also present, unsurveyed depth: `MOCAPGOD` (empty queue — service scaffold),
`mixamo_upload` staging, `MOTIONLIB` (2,703 FBX, ultra) still the deep pool.
### 2b. procity (m3ultra) — the 90s-Aussie town sim
Walkable procedural shopping town (three.js, no build step), built by lanes
like ours. Pipeline: 186 GLB/FBX with fit/normalize/decimate tooling
(`procity_fit_*` props: arcade cabinet, clothes racks, shelving), 21 peds.
The **prop pipeline conventions** (batch manifests, decimation results JSON)
are the pattern to copy if NOT TONIGHT ever goes 3D-prop-assisted; the venue
furniture (bar, booths, stools) could come straight from its fit pipeline.
### 3. Venue / street reference art
- `ultra:~/Documents/90sDJsim/web/world/media/` named scene/venue art — 100 wired
widescreen club/venue images. Mood reference for our neon-dark interiors.
- `gdrive:ASSETS FROM AI` (2.47 GB, 3,239 files) + `gdrive:IMAGE-DATABASE`
(794 MB, 26,910 files) — prior AI-gen pools; sweep for club/street/neon/night
material before generating fresh.
- m4pro SPACEY `MRP PHOTOSHOP FILES` (4.4 GB PSDs) — design-language source
(posters/flyers could become in-game wall dressing). m4pro is HANDS-OFF; access
via the SMB mount on m3ultra if needed.
### 4. Generation pipeline (MODELBEAST)
m3ultra central queue :8777 (see fleet skill). For NOT TONIGHT this is an
**image generator, not a mesh generator** — we need no GLBs. Useful for: patron
face/outfit reference sheets to hand-pixel from, venue backdrop concepts, Dazza's
contact photo, joke ID photos. The thriftgod `gen_assets.py` + 640px `sips`
convention (m3ultra `~/Documents/thriftgod/`) is a proven prompt→asset-dir pattern
worth cloning for an `art_src/` pipeline here.
## Explicitly NOT for this game
- **All 3D mesh libraries** (`3D=models`, `3D-STORE`, FBX, femalemeshed,
NPCFACTORY, MODELBEAST GLB output) — no 3D in this game; only via the Option-B
prerender path above, never at runtime.
- **Audio archives** (bandcamp ~1 TB, YT-AUDIO, MONSTER MIXES). The design is
locked to a fully synthesized WebAudio techno engine (design §5 / LANE_JUICE) —
the low-pass location trick needs a synth we control, and shipping archive audio
is a licensing minefield. John's own MONSTER MIXES are legally his — park the
idea of a licensed-mix easter egg (jukebox in the kebab shop?) as a someday-note.
- **dealgod image pool** (2.4M product photos) + `recordgod_disc_images` — product
photography, wrong domain. (One cursed exception: pat-down contraband items
could be pixelated from real dealgod product shots. Someday-note.)
- **thriftgod 2D dressing** — authored 640px painterly JPGs, wrong style; its
*pipeline* is the reusable part (see §4).
## Ground rules for the eventual art pass
**Licensing: none needed.** This is a private tailnet sandbox game, never public —
John's call (2026-07-19). Anything on the fleet or gdrive is fair game, including
the audio archives and MONSTER MIXES. (If that ever changes and the game goes
public, this section is the checklist to revisit first.)
1. Everything funnels through the existing contracts (`renderDoll` poses, outfit
slots) — art swaps in behind interfaces, callers never change.
2. One palette, one pixel density (32×48 queue dolls at 640×360) decided ONCE
before any batch conversion; retrofitting mixed densities is the classic trap.
3. Log each imported batch (source → transform → dest) in this file — not for
licensing, just so we can regenerate/retrace later.
4. Check the MeshGod gallery + MODELBEAST `data/` (m3ultra) before generating
anything — the inventory's rule "catalog before regenerating" applies here too.
5. The synthesized techno engine stays the core soundtrack (the location-filter
trick needs a synth we control), but real archive audio is now allowed as
layers/easter eggs — e.g. MONSTER MIXES on a kebab-shop jukebox, real crowd
ambience beds under the synth.

View File

@ -70,22 +70,10 @@ Status: ✅ implemented · 🔜 next nibbles · 💡 backlog.*
## Systems worth a whole phase
- ✅ **Venue 4 / ROOM boss week** (2026-07-21, first cut): fourth rung on the
ladder (promotes from Elevate). No Dazza rule chronology — the board IS the
law and re-randomises every 15 in-game minutes (3 rules per window, seeded,
with a toast on the turn); every rope line renders as bracketed lip-read
guesses (`[FIST? LIST?]`) because the techno ate the dialogue. 60 licensed,
1.2 arrival scale, inspector working, crowd of heads and VIP-claimers.
- ✅ **The DJ shift** (2026-07-20, first cut): E at the booth hands you the decks
while the resident steps out. B pulls the bass (the room leans in); SPACE
drops, judged against the LIVE bar line (clean/late/clang — early and late
are the same offence); requests arrive at the booth glass with per-request
odds ("got any dnb", nan's song, the DUN DUN one) and three answers that all
cost something. A build held too long runs out of stairs. Movement locks
while you hold them; the floor and the door keep happening without you.
- ✅ **Bartender shift** (2026-07-21, first cut): E at the till hands you the
taps (movement locks; the floor keeps happening). Orders arrive as choices —
the order line degrades with the patron's stage (the spelling IS the sobriety
test) — SERVE / WATER / CUT OFF all legal, all priced. Serving messy/maggot
is the RSA breach: the vibe pays up front, and 35% of the time somebody with
a lanyard saw it (ONE deferred write-up per night, deduped by reason).
- 💡 **Venue 4 / ROOM boss week** (design §6): dress code re-randomises every
15 in-game minutes; dialogue rendered as lip-read guesses under the loudest
mix arc.
- 💡 **The DJ shift** (role ladder): the booth is built, the engine's mix is
already externally scriptable — requests at the booth, energy management.
- 💡 **Bartender shift**: the bar geometry and RSA scoring already exist;
pour-and-cut-off from the other side of the counter.

View File

@ -5,14 +5,6 @@ fleet's asset factories. Written 2026-07-20. Code contract: everything lands
behind data tables (`venueMap.PROPS` / `LIGHTS`) and a sprite drop-in convention —
generated art replaces placeholders with zero code changes.*
> **Superseded in part, 2026-07-28 — see [VENUES.md](VENUES.md).** This document
> describes ONE venue floor, which is what the game had when it was written. The
> venue ladder now has four distinct rooms, and props/lights/posts/probes hang
> off a per-venue `FloorLayout` rather than the module singletons named below.
> The pipeline sections (§4 sprite drop-in, and the settled prop pipeline at the
> foot of this file) are still exactly right and still the house rules — only
> "the venue floor" in §2 is now specifically *Voltage's* floor.
## 1. Design principles
1. **Darkness stays the mechanic.** Props read as silhouettes in ambient dark and
@ -121,42 +113,3 @@ palette/density once.
*(flux params for all [MB] jobs: `model flux2-klein-4b, steps 4`; put "no text,
no lettering" in every prompt EXCEPT the posters, where mangled text reads as
authentic gig-poster grot.)*
## Prop pipeline — settled 2026-07-22 (A/B'd, not guessed)
Two routes, both free and unlimited on MODELBEAST. Pick by object, not by habit.
**[MB] flux direct** — `flux_local``tools/props_import.py`. Fast (~9s).
Use for FLAT things: posters, decals, graffiti, signage, floor markings.
**[GLB] TRELLIS → Blender** — `flux_local` (product shot) → `trellis2_mlx`
(`asset_id` is a TOP-LEVEL job field, NOT inside `params`) →
`tools/glb_to_sprite.py <mesh.glb> <kind>` → sprite + manifest, headless, no
GUI. Use for objects with real VOLUME: tables, fridges, machines, furniture.
Why the split, from the A/B (same pool table, both routes): flux picks its own
camera every generation — the same prompt style gave a perfectly top-down
urinal and a front-on fridge in one batch, and mismatched camera angles never
read as one room. The mesh route renders every prop from one fixed ortho
camera, and TRELLIS carries detail flux flattens: worn felt, real pockets,
rails and legs, clean alpha.
**RAKE by object HEIGHT — and I had this backwards first time.**
Low and wide (pool table, booth table, crate): **60°**. Tall (arcade, fridge,
speaker, anything standing): **~76°**. The instinct to *lower* the rake for tall
objects "so you see more face" is wrong — a tall object already shows nothing
but face; it needs to be steeper to read as a floor prop at all. A speaker at
55° is a featureless black slab.
**Judge sprites at SHIP size, not render size.** A 512px render of a fridge from
above looks ambiguous; the same sprite at 32x32 under the game's own point light
reads fine, because the venue's LIGHTS do half the identifying work (the fridges
carry a cyan glow, the arcade a flickering blue). Do not re-roll a prop off the
back of the big preview.
**The old guidance, kept because it is still true for low objects:** The venue's props are
three-quarter top-down, not straight down. Re-rolled from directly overhead, a
bar fridge is a grey rectangle — physically correct and visually dead, because
the glowing bottles that say "fridge" are on its front. 60° keeps the top
surface dominant while leaving enough face to identify the object at 32px.

View File

@ -1,150 +0,0 @@
# NOT TONIGHT — the four venues
*Written 2026-07-28. The venue ladder in `src/data/venues.ts` has always been
four venues; up to now they shared ONE floor map and differed only by difficulty
knobs. This document is the design contract for giving each its own room.*
## 0. Why bother
Design §6 sells the ladder as *promotion* — survive a week, get a better door.
But a promotion you cannot see is a number, not a reward. Walking into Elevate
and finding The Royal's carpet under your feet undoes the fiction the whole run
is built on. Each venue now has its own bar layout, its own dunnies, its own
smoking area and its own DJ booth, because those four things are exactly what a
bouncer actually learns about a room.
## 1. Shared contract (all four)
- **Grid is fixed at 80×45 tiles.** Venues differ by ARRANGEMENT, not extent —
the camera, minimap and bounds maths all key off `MAP_W`/`MAP_H`, and a
per-venue grid size would be a refactor with no visible payoff. A small venue
reads small by walling its unused grid to `void`, not by shrinking the array.
- **Every layout exports a `FloorLayout`**: `{ id, map, props, lights, posts,
probes }`. Nothing else may be a module singleton — that was the old shape and
it is what made four venues impossible.
- **Every layout must satisfy the same invariants** (`tests/floor/layouts.test.ts`):
1. every `AnchorKind` has ≥1 anchor, and every anchor is walkable;
2. all walkable tiles are mutually reachable (flood fill), except sealed
cubicle interiors, which must be reachable from their `StallDef.door`;
3. every `POSTS` entry is walkable and has a walkable neighbour (a post on a
sealed tile freezes the player for the night — this has shipped twice);
4. every `PROBES` entry has a walkable tile within reach;
5. no prop hangs off the grid.
- **Materials are grain, the palette is hue.** `FloorLayout.materials` names a
generated plate per tile kind (`tex_carpet`, `tex_concrete`, …) and the baker
stamps it **tinted to the palette colour**. That is deliberate: an untinted
photo-real plate blows straight past the brightness band everything else was
tuned in, and the room stops being dark. Plates are 16×16 — the game's tile —
because at that size "carpet" is structured noise, which is also what pub
carpet looks like from head height. No plate named, or art not landed: flat
palette colour, exactly as before.
- **The baked floor is keyed per venue** (`floor:tiles:<id>`). Textures outlive a
scene, so a single global key meant the first venue you played baked the floor
for every venue after it — you would survive a week at The Royal, get promoted,
and walk into Voltage still standing on the pub's carpet. It only shows on
promotion, which is precisely when the ladder is supposed to pay off.
- **Light signatures survive** (SPACES.md §1): bar = amber, dance = pulsing
pink on the real beat, DJ = deep blue, toilets = flickering green, smoking =
cool blue, entry = venue pink. A venue may add ONE signature colour of its
own — Elevate's skyline gold, ROOM's sodium orange — and no more, or the
navigate-by-glow rule stops working.
- **Darkness stays the mechanic.** No venue may be bright enough to scan from
the doorway.
## 2. The Royal — "a dive with a dance floor"
Licensed 80 · regulars and punters · nobody checks anything.
A suburban Australian pub that had a dance floor bolted on in about 2004 and has
not redecorated since. Patterned carpet, a horseshoe public bar, and the dance
floor is plainly the least important thing in the building.
| Space | What's in it |
|---|---|
| **Public bar** (horseshoe, west) | the long counter, taps, till, keg stack, a TV showing the footy, bar fridges |
| **Pool room** (north-west) | two pool tables, cue rack, a dartboard on the wall |
| **TAB / pokies corner** (north-east) | bank of poker machines, TAB screens, stools, its own miserable light |
| **Bistro** (centre-north) | bistro tables, bain-marie counter, the meat-raffle drum |
| **Dance floor** (south-east) | small, an afterthought, one mirror ball, a jukebox on the wall |
| **DJ corner** | not a booth — a folding table with a controller, beside the dance floor |
| **Dunnies** (east) | a stainless TROUGH, two cubicles (one out of order), one basin |
| **Beer garden** (south, open sky) | picnic tables, umbrellas, patio heater, butt bin — the smoking area, and the nicest room in the pub |
Light: warm amber everywhere, green cone over each pool table, the pokies' own
sickly blue, and the beer garden cool blue. No pink except the dance corner.
## 3. Voltage — "valley institution"
Licensed 110 · the tuning baseline · the inspector drinks here.
**This is the existing map and it does not change.** It is tuned under the
darkness sheet, its reachability is asserted, and every existing floor test
targets it. It stays the default layout and the reference for the other three.
## 4. Elevate — "rooftop, small room, big opinions"
Licensed 70 · influencers and owner's mates · every second person is a VIP.
The whole venue is outdoors, which makes the rain a design element rather than a
yard-only effect. Small footprint — a third of the grid is sky. You arrive by
lift, not off the street, so the entry is a lobby.
| Space | What's in it |
|---|---|
| **Lift lobby** (west) | lift doors, a rope line, the stamp podium, one mirror |
| **Cocktail bar** (north) | short backlit bar, no taps — bottles and a champagne bucket |
| **VIP booths** (east) | banquettes behind velvet rope posts, low tables |
| **Dance floor** (centre, small) | it is a terrace with a dance floor, not a club |
| **DJ plinth** | raised, open, no booth walls — the DJ is on display |
| **Toilets** (north-east) | two unisex cubicles, marble basin, enormous mirror |
| **Terrace edge** (south + east) | glass balustrade, planters, the city skyline beyond |
| **Smoking** | the whole roof is open air; a designated corner with a standing ash urn and heat lamps |
Light: warm amber bar, cool blue-white terrace, deep blue DJ, and the venue's
own signature — **skyline gold** spilling from the city card beyond the glass.
## 5. ROOM — "no sign, no socials"
Licensed 60 · heads and chancers · the board is the law.
A concrete warehouse. No branding anywhere, because branding is how you get
found. The sound system is the most expensive thing in the building by an order
of magnitude and everything else is borrowed.
| Space | What's in it |
|---|---|
| **Main floor** | concrete pillars, no booths, the crowd is the furniture |
| **The stacks** | Funktion-One-style speaker towers + subs — huge, four corners |
| **DJ booth** | low, central, facing the floor, no barrier — CDJs not turntables |
| **Bar** (west) | a plywood plank on scaffolding, cans only, no taps, no till |
| **Toilets** (north-east) | industrial, graffiti on every surface, three cubicles of which one works, a cracked basin, no mirror |
| **Loading dock** (south, open sky) | roller door, pallets, a wheelie bin — this is the smoking area |
| **Chill-out** (north-west) | two ruined couches under a single bulb |
| **The board** | the rule board that rewrites itself (`shuffleDressCode`) — a physical prop by the entry |
Light: almost none. Sodium orange over the loading dock (ROOM's signature),
one flickering green fluoro in the dunnies, strobes on the floor, and the
stacks' own power LEDs. This is the darkest venue in the game on purpose.
## 6. Prop vocabulary added for these rooms
Route per SPACES.md §"Prop pipeline": **[F]** = flux direct (flat things —
signage, boards, screens, backdrops); **[M]** = product shot → TRELLIS.2 →
Blender ortho render (things with volume). Rake follows the house rule —
**60° low and wide, ~76° tall**.
| Venue | Kinds |
|---|---|
| The Royal | `pokie`[M76] `tabBoard`[F] `bistroTable`[M60] `picnicTable`[M60] `trough`[M70] `keg`[M76] `dartboard`[F] `jukebox`[M76] `raffleDrum`[M60] `bainMarie`[M60] `tvSport`[F] `beerUmbrella`[M80] `ashtray`[M60] |
| Elevate | `cocktailBar`[M60] `banquette`[M60] `ropePost`[M76] `planter`[M60] `balustrade`[M76] `djPlinth`[M60] `marbleSink`[M70] `ashUrn`[M76] `champBucket`[M60] `loungeChair`[M60] `liftDoor`[F] `skylineCard`[F] |
| ROOM | `stackF1`[M76] `subBass`[M60] `plywoodBar`[M60] `rollerDoor`[F] `pallet`[M60] `wheelieBin`[M76] `oldCouch`[M60] `pillar`[M76] `ruleBoard`[F] `strobe`[M76] `smokeMachine`[M60] `cableSnake`[M60] `brokenBasin`[M70] `canStack`[M60] `cdj`[M60] |
| Staff (set dressing, all venues) | `staffBartender` `staffDj` `staffGlassie` `staffSecurity` — all [M76] |
Staff figures are PROPS, not patrons. The procedural dolls stay exactly as they
are: `dollPlan` draws the specific items the dress code convicts on, so
replacing patrons with pre-rendered art would make the convictions invisible
(recorded in LANEHANDOVER, FABLE-SOLO-23). A bartender who never moves is set
dressing and carries no mechanical weight, which is why she can be a sprite.
Street plates (door scene, one per venue, [F], 640×176):
`street:royal` `street:elevate` `street:room``street:backdrop` stays Voltage's.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 596 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 990 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 878 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 575 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 781 B

After

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 981 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 524 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 746 B

After

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 832 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 523 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 796 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 853 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 425 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 668 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 589 B

View File

@ -1,134 +1,24 @@
{
"props": [
"arcade",
"ashUrn",
"ashtray",
"bainMarie",
"balustrade",
"banquette",
"barFridge",
"barShelf",
"barrier",
"beerUmbrella",
"binRound",
"bistroTable",
"boothLamp",
"boothTable",
"brokenBasin",
"buttBin",
"cableSnake",
"canStack",
"carpet",
"cctv",
"cdj",
"ceilingFan",
"champBucket",
"cloak",
"cocktailBar",
"crate",
"cubicleDoor",
"cueRack",
"dartboard",
"deck",
"discoball",
"dishwasher",
"distroBox",
"djPlinth",
"exitSign",
"fireExt",
"fireHose",
"firepit",
"flightCase",
"front_elevate",
"front_room",
"front_theRoyal",
"front_voltage",
"glassRack",
"glassStack",
"graffiti",
"handDryer",
"highTable",
"iceWell",
"jukebox",
"kebabShop",
"keg",
"liftDoor",
"loungeChair",
"marbleSink",
"mirror",
"mixer",
"monitor",
"mopBucket",
"noticeBoard",
"oldCouch",
"pallet",
"patioHeater",
"picnicTable",
"pieWarmer",
"pillar",
"plant",
"planter",
"plate_backoffice",
"plate_corkboard",
"plywoodBar",
"pokie",
"poolTable",
"poster1",
"poster2",
"poster3",
"poster4",
"poster5",
"poster6",
"poster7",
"poster8",
"poster9",
"raffleDrum",
"rollerDoor",
"ropePost",
"ruleBoard",
"sandwichBoard",
"sinkRow",
"skylineCard",
"smokeMachine",
"sorter",
"speaker",
"stackF1",
"staffBartender",
"staffChef",
"staffCleaner",
"staffDj",
"staffGlassie",
"staffSecurity",
"stampPodium",
"stanchion",
"streetBin",
"streetLamp",
"street_backdrop",
"street_elevate",
"street_room",
"street_theRoyal",
"strobe",
"subBass",
"tabBoard",
"taps",
"taxi",
"tex_brick",
"tex_carpet",
"tex_concrete",
"tex_deck",
"tex_looTile",
"tex_parquet",
"tex_paving",
"tex_plaster",
"tex_steel",
"tex_timber",
"till",
"topiary",
"trough",
"truss",
"tvSport",
"urinal",
"wetFloor",
"wheelieBin"
"till"
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1015 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 893 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 432 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 771 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 619 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 912 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 694 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 479 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 396 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 864 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 619 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 554 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 760 B

After

Width:  |  Height:  |  Size: 657 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 907 B

Some files were not shown because too many files have changed in this diff Show More