interior_mode.js bridges Lane B's enterShop seam to Lane C buildInterior and Lane D keepers (spawn at counter keeperStand, greet, leak-free over 5 cycles). CitizenSim wired into the street loop (pop 140, ~96 active midday, worst ~191 draws). tools/: qa.sh gate runner (all 4 landed gates GREEN --strict), scaffold/consistency checks, shots.py + soak.py browser harnesses. docs/shots/ reference tree, LANE_F_NOTES runbook, V2_IDEAS parking lot. (F's inline seam edits to index.html/skins.js landed with the Lane B commit.) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
93 lines
5.4 KiB
Markdown
93 lines
5.4 KiB
Markdown
# PROCITY — V2 IDEAS (the parking lot)
|
||
|
||
*Written by Lane F. Everything discovered during v1 but deliberately **not** built, so v1 stays
|
||
"the system: plan → streets → doors that open → themed interiors → NPCs." Each item notes where
|
||
the seam already exists so v2 is wiring, not rework. Ordered roughly by leverage.*
|
||
|
||
---
|
||
|
||
## Content firehose (the reason the system exists)
|
||
|
||
- **dig.js wiring + BaseGod real-item stock.** v1 interiors show *visual* stock only (canvas
|
||
cardboard sleeves/spines via Lane C's `stock.js`). The seam is Lane C's `stockAdapter(shop,
|
||
slotKind) => texture/mesh` hook — leave it, then in v2 feed it from GODVERSE (recordgod/toygod/
|
||
bookgod/mediagod: 44k solid-object 3D candidates, 185k vinyl w/ images —
|
||
`~/Documents/dealgod/GODVERSE.md`). Port `90sDJsim/web/world/dig.js` (self-contained crate-riffle,
|
||
`onBuy/getCash/spawnClerk/spawnFittings` callback API, already ported across 3 games) into a shop
|
||
when you walk to a bin. Real economy = thriftgod `mint()` (`server.py:792`) — per-shop-type
|
||
profiles, gem bands, CBD-distance curation, `TABLESAMPLE` over real listings.
|
||
|
||
- **Real-OSM plan import (thriftgod `build_city()` route).** Swap the synthetic
|
||
`generatePlan(seed)` for real geography: thriftgod `server.py:433` runs an Overpass query for AU
|
||
secondhand/charity/music/book/toy shops → `city_source.json` cache → dedupe → nearest-capital →
|
||
suburb inference → parody names → seeded hours (~2,918 real shops). PROCITY's Layer-1 schema was
|
||
built to accept this — `generatePlan` becomes one of two plan *sources* behind the same CityPlan
|
||
contract, so Lanes B–F never change.
|
||
|
||
## Authoring / override layer (the thriftgod "big idea")
|
||
|
||
- **In-game layout editor + override tables.** Every interior is deterministic from `shop.seed`;
|
||
thriftgod's Postgres `layout_shop`/`layout_area`/`layout_asset` tables hold optional
|
||
hand-authored overrides (NULL = procedural). The E1–E4 in-game editor writes them
|
||
(`thriftgod/EDITOR_PLAN.md`). v2: add an override store (localStorage → later a tiny backend) and
|
||
a `?edit=1` mode. The seeded-everything law (CITY_SPEC) is exactly what makes this possible —
|
||
don't break it.
|
||
|
||
## World depth
|
||
|
||
- **Interior-mapping window shader.** v1 fakes shop windows two ways: Lane B tints glass + warm
|
||
emissive at night; Lane C puts a backdrop plane inside. v2: the real Vuntra trick — a parallax
|
||
interior-mapping shader so a passing pedestrian sees a plausible room through the glass without
|
||
building it. Stretch goal already flagged in CITY_SPEC §Layer 3.
|
||
|
||
- **Weather + seasons.** Sky dome already seed-picks from `sky-*.jpg` (summer storm, monsoon, grey
|
||
drizzle, heat haze already in `web/assets/gen/`). v2: rain particles + wet-ground roughness,
|
||
wind on awnings/trees, seasonal palette shift. Cheap, high vibe-per-byte.
|
||
|
||
- **Trams / buses on a loop.** A scripted vehicle following main-street edges from the CityPlan
|
||
graph; a bus-stop shelter prop is already on Lane E's MeshGod shortlist. Instanced, one path,
|
||
no traffic sim in v2 — just life on the street.
|
||
|
||
- **Venue district + gig system (90sDJsim crossover).** The warehouse fringe (Lane A seeds it as
|
||
future flea-market/venue territory) becomes a live-music block; port 90sDJsim `buildVenue()`
|
||
(~line 1094) + its rigged-front-row/bobbing-box crowd. Natural bridge back to the parent game.
|
||
|
||
## Simulation & NPCs
|
||
|
||
- **Deeper citizen sim.** v1 is layered LOD (rigged near / impostor mid / culled far) walking
|
||
footpath lanes with seeded identity. v2: needs/schedules (home→shop→square by time of day),
|
||
shop patronage that reads `hours`, queues at the open late-night shop, buskers in the arcade.
|
||
Vuntra's million-NPC layering at hamlet scale — the tier machinery is already there to lean on.
|
||
|
||
- **Multiplayer presence.** Other players as citizens (the fleet impostor path already renders
|
||
cheap remote avatars). Presence-only first (see who's in town / same shop), no shared economy —
|
||
that rides on the content/override backend above.
|
||
|
||
## Assets & polish
|
||
|
||
- **Corner-building second facade.** Lane E flags the `-side` variant question; v2 gives corner
|
||
lots a proper second face + wrap-around verandah instead of reusing the front skin.
|
||
|
||
- **GLB depot expansion.** v1 ships the audit-normalized shortlist + primitive fallbacks. v2: the
|
||
full `~/Documents/3D=models/` library normalized to house GLB law, MeshGod hero props batch
|
||
(listening booth, till, VHS rewinder, spinner rack, milkshake mixer, arcade cabinet, band-poster
|
||
easel, giant novelty record, bus shelter — `pipeline/MESHGOD_BATCH.md`, John's go required).
|
||
|
||
- **Audio.** Street ambience by district, muffled shop music that swells through an open door,
|
||
the milk-bar bell. No audio in v1 at all — greenfield.
|
||
|
||
## Tech / QA carryover
|
||
|
||
- **GFX tiers.** 90sDJsim's era-tiered `GFX_TIERS` (`~line 167`) — adopt only if a real device
|
||
misses budget; CITY_SPEC says don't gold-plate now.
|
||
- **Determinism across engines.** If real-OSM or an authored backend enters, extend Lane F's
|
||
determinism gate to pin plan + first-interior hashes per seed in CI.
|
||
- **Shadow/GI.** v1 = one 2048 directional map following the player (or none — measured). v2:
|
||
cascaded shadows or baked/faked GI for the arcade + interiors.
|
||
|
||
---
|
||
|
||
*Seam summary: `stockAdapter` (Lane C), plan-source behind the CityPlan contract (Lane A), the
|
||
`shop.seed` determinism law (core), and Lane B's mode state machine are the four hinges every item
|
||
above swings on. They exist in v1 specifically so none of this is a rewrite.*
|