- 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>
78 lines
4.7 KiB
Markdown
78 lines
4.7 KiB
Markdown
# 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."** A–E 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 A–E into one seed-to-town game + QA gates | (after A–E) |
|
||
|
||
## 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 **2–4 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`.
|