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
189 changed files with 162 additions and 9560 deletions

4
.gitignore vendored
View File

@ -1,6 +1,2 @@
node_modules node_modules
dist/ 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. branch. An unpushed session didn't happen.
- Remote is Gitea: `ssh://git@100.71.119.27:222/monster/not-tonight.git`. - 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) ## Dev notes (Phase 2 landed 2026-07-19)
- The game boots into the NIGHT (Thu→Fri→Sat run, saved). Controls: click the - 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 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,22 +70,10 @@ Status: ✅ implemented · 🔜 next nibbles · 💡 backlog.*
## Systems worth a whole phase ## Systems worth a whole phase
- ✅ **Venue 4 / ROOM boss week** (2026-07-21, first cut): fourth rung on the - 💡 **Venue 4 / ROOM boss week** (design §6): dress code re-randomises every
ladder (promotes from Elevate). No Dazza rule chronology — the board IS the 15 in-game minutes; dialogue rendered as lip-read guesses under the loudest
law and re-randomises every 15 in-game minutes (3 rules per window, seeded, mix arc.
with a toast on the turn); every rope line renders as bracketed lip-read - 💡 **The DJ shift** (role ladder): the booth is built, the engine's mix is
guesses (`[FIST? LIST?]`) because the techno ate the dialogue. 60 licensed, already externally scriptable — requests at the booth, energy management.
1.2 arrival scale, inspector working, crowd of heads and VIP-claimers. - 💡 **Bartender shift**: the bar geometry and RSA scoring already exist;
- ✅ **The DJ shift** (2026-07-20, first cut): E at the booth hands you the decks pour-and-cut-off from the other side of the counter.
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).

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 — behind data tables (`venueMap.PROPS` / `LIGHTS`) and a sprite drop-in convention —
generated art replaces placeholders with zero code changes.* 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. Design principles
1. **Darkness stays the mechanic.** Props read as silhouettes in ambient dark and 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, *(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 no lettering" in every prompt EXCEPT the posters, where mangled text reads as
authentic gig-poster grot.)* 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,131 +1,24 @@
{ {
"props": [ "props": [
"arcade", "arcade",
"ashUrn",
"ashtray",
"bainMarie",
"balustrade",
"banquette",
"barFridge",
"barShelf", "barShelf",
"barrier",
"beerUmbrella",
"binRound",
"bistroTable",
"boothLamp",
"boothTable", "boothTable",
"brokenBasin",
"buttBin", "buttBin",
"cableSnake",
"canStack",
"carpet",
"cctv",
"cdj",
"ceilingFan",
"champBucket",
"cloak", "cloak",
"cocktailBar",
"crate", "crate",
"cubicleDoor",
"cueRack",
"dartboard",
"deck", "deck",
"discoball", "discoball",
"dishwasher",
"distroBox",
"djPlinth",
"exitSign",
"fireExt",
"fireHose",
"firepit",
"flightCase",
"front_elevate",
"front_room",
"front_theRoyal",
"front_voltage",
"glassRack", "glassRack",
"glassStack", "glassStack",
"graffiti",
"handDryer",
"highTable",
"iceWell",
"jukebox",
"kebabShop",
"keg",
"liftDoor",
"loungeChair",
"marbleSink",
"mirror",
"mixer", "mixer",
"monitor",
"mopBucket",
"noticeBoard",
"oldCouch",
"pallet",
"patioHeater",
"picnicTable",
"pieWarmer",
"pillar",
"plant",
"planter",
"plywoodBar",
"pokie",
"poolTable",
"poster1", "poster1",
"poster2", "poster2",
"poster3", "poster3",
"poster4",
"poster5",
"poster6",
"poster7",
"poster8",
"poster9",
"raffleDrum",
"rollerDoor",
"ropePost",
"ruleBoard",
"sandwichBoard",
"sinkRow", "sinkRow",
"skylineCard",
"smokeMachine",
"speaker", "speaker",
"stackF1",
"staffBartender",
"staffChef",
"staffCleaner",
"staffDj",
"staffGlassie",
"staffSecurity",
"stampPodium", "stampPodium",
"stanchion",
"streetBin",
"streetLamp",
"street_backdrop", "street_backdrop",
"street_elevate",
"street_room",
"street_theRoyal",
"strobe",
"subBass",
"tabBoard",
"taps", "taps",
"taxi", "till"
"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"
] ]
} }

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: 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: 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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 919 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 B

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