PROCITY/README.md
m3ultra 0490bdd07e Lane F R15 (v3.0): docs assembly — README v3, LANE_F_NOTES §14/§15, F-progress, freezes confirmed
- README: a v3.0 'venues & gigs, THE DISTRICT' section — what shipped, the flags table, the release tour
- LANE_F_NOTES §14 (R14: F never ran, brief carried) + §15 (the R15 release-close runbook, numbers, gotcha ledger)
- F-progress: R15 release-close summary at the top
- confirmed all five freezes committed (A a3911a4/35da83c, B eee60e0/a0b5784, C 62e38c5/2446ae3, D 9a65f51/66aec0f, E 55f6698)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 11:38:37 +10:00

78 lines
4.7 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.

# PROCITY
A standalone, procedurally generated, fully walkable 90s-Australian shopping town — every
building enterable (the Vuntra City trick), every interior seeded and themed: record stores,
op shops, toy shops, book barns, video rental, pawnbrokers, milk bars, market stalls. Built on
the proven house stack (three.js r175 vendored, plain JS, no build step) and the asset DNA of
90sDJsim + thriftgod. v1 is the *system*; the GODVERSE/BaseGod real-item content plugs in later.
## Run
```
cd web && python3 -m http.server 8130
# http://localhost:8130 (game shell — Lane B)
# http://localhost:8130/map.html (2D plan debugger — Lane A)
```
## Read first
- **`docs/CITY_SPEC.md`** — the treaty: schema, units, seeds, budgets, file ownership.
- **`docs/RESEARCH.md`** — what the parent repos already solved, with exact paths to port from.
## The lanes (parallel Opus 4.8 sessions)
Each lane is a self-contained prompt. To run one, start an Opus session in this repo and say:
**"Read docs/LANES/LANE_X_….md and execute it."** AE are parallel-safe (disjoint files,
standalone test pages); F integrates after they land.
| lane | mission | owns |
|---|---|---|
| [A — CITYGEN](docs/LANES/LANE_A_CITYGEN.md) | seed → CityPlan data (streets, blocks, lots, shops) + 2D map | `js/citygen`, `js/core/registry.js`, `map.html` |
| [B — STREETSCAPE](docs/LANES/LANE_B_STREETSCAPE.md) | chunk-streamed instanced 3D town + game shell | `index.html`, `js/world` |
| [C — INTERIORS](docs/LANES/LANE_C_INTERIORS.md) | every door opens: seeded themed shop interiors | `js/interiors`, `interior_test.html` |
| [D — CITIZENS](docs/LANES/LANE_D_CITIZENS.md) | rigged-near / impostor-far NPCs + shopkeepers | `js/citizens`, `citizens_test.html`, `models/` |
| [E — ASSETS](docs/LANES/LANE_E_ASSETS.md) | audit ultra's library, normalize GLBs, skins, manifest | `pipeline/`, `assets/` |
| [F — INTEGRATION](docs/LANES/LANE_F_INTEGRATION.md) | wire AE into one seed-to-town game + QA gates | (after AE) |
## Already in the repo
- `web/vendor/` — three.js r175 + addons (vendored from 90sDJsim; no CDN at runtime).
- `web/assets/gen/` — 69 generated texture skins (25 shopfront facades, 10 skies, 10 grounds,
8 wallpapers, 16 interior surfaces) inherited from thriftgod + 90sDJsim, style-locked.
- `web/js/core/` — frozen shared modules: `prng.js` (seeded-everything law), `loaders.js`
(fail-soft promise-cached GLB/texture + 3GOD depot), `canvas.js` (text planes).
## House laws (short form — CITY_SPEC has the fine print)
Seeded everything, `Math.random` banned in gen code · the game must run with zero assets ·
instancing from day one · canvas text, no font files · characters = shared base rigs + one
clip bank, canonical sources live outside this repo · 🟢 web-ok licensing only.
## v3.0 — venues & gigs, THE DISTRICT (`?gigs=1`)
The Friday-night layer, shipped behind a flag so the default boot stays byte-identical to v2 (the
synthetic golden `0x3fa36874` never moves). Turn it on and each town seeds **24 venues** — a pub, a
band room, an RSL — with a **full seeded week of gigs** (`plan.gigs`), town-wide **posters**, and a
Friday night that reads: a **4-piece band** (front-line trio + drummer) with real instruments on the
stage, a mixed standing/dancing **crowd**, an outdoor **queue** at the door, a **cover charge** per
venue (paid & free nights), muffled **gig spill** through the wall + **walla and applause** inside,
**streetlamp pools** and lit frontages for the night walk, and **identity continuity** — the ped you
followed in off the street turns up in the crowd. Deterministic from the seed; asset-free
(`?noassets=1`) it all still happens with placeholders and zero fetches.
**Flags** (all default-off unless noted; compose freely):
| flag | what |
|---|---|
| `?seed=N` | town seed (default `20261990`) |
| `?gigs=1` | the v3.0 gig layer — venues, week schedule, band/crowd/queue, cover, posters, night pass |
| `?weather=rain` · `?tram=1` · `?winmap=1` | wet strip · tram loop · parallax interior-window shader |
| `?roster=stream` | chunk-streamed citizen density (**on by default**) · `?pop=N` tunes it |
| `?dig=1` · `?stock=real` | crate-riffle on record bins · real GODVERSE sleeves in the stock |
| `?noassets=1` | asset-free — zero network, 100% placeholders, still legible |
| `?plansrc=osm` · `?mute=1` · `?dbg=1` | OSM plan source · silence · the `window.DBG` capture/soak harness |
**Release tour:** [`docs/shots/release_v3/contact.html`](docs/shots/release_v3/) — the six money shots
(`queue_night` is the hero) with settled measurements. **QA:** `tools/qa.sh --strict` (6 gates) +
`tools/qa/week_soak.py` (the full-week soak) + the continuity/gig smokes in `tools/flags_check.py`.