THE CREDITS SURFACE. New web/assets/credits.json (schema procity-credits/1, the data file every lane appends to — documented in LANE_B_NOTES §41 with a paste-ready row) + credits.js (the panel, DOM only) + a HUD link. F2 or the link. Zero draws, zero boot fetches (0 before open, exactly 1 after), zero fetches under ?noassets=1. Seeding it found a LIVE OBLIGATION the game has never displayed: the 23 real-town caches are OpenStreetMap data under ODbL 1.0, whose own source note says keep the credit visible. It now rides the link and is context-aware — on an OSM boot the HUD reads '(c) OpenStreetMap contributors · credits (F2)'; on the synthetic town, where no OSM data is on screen, it does not claim it. three.js r175 MIT credited too. 14 entries seeded, all read off the repo. Field law: licence 'unverified' is legal and a guess is not. Two gaps filed to E as amber rather than invented: the 19-GLB base ped roster has NO per-asset licence record anywhere in this repo (and CITY_SPEC's declared zone includes CC-BY and CGTrader RF — a credit may be owed today), and the 18 house-library fittings still carry AUDIT.md's 38-round-old blanket caveat despite shipping since R3. A's D3 CLOSED. Re-measured over the shipped corpus at the golden seed: 27 towns, 1,838 shops, 81 venue lots, 81 of 81 taking the op-shop signage fallback — exactly 3 per town, in every town. A's number reproduces to the digit. Bite drifted :344 -> :465 -> :483, hence a named resolver: signStyleFor() tries B's nine palettes, then A's registry (gilt/stencil/club, carried since R13), then op-shop as genuine last resort. Venue treatment is venue-gated by construction. Deliberately NOT done: repainting the other nine types onto A's palettes (record would go muted-teal -> hot-pink neon) — an art call for John, filed. RULING 4 RESPECTED, NOTHING SPENT: frozen town, 136 station-yaw samples per arm, 544/544 identical on BOTH counters (draws and tris), 0 console errors. Pin method reproduces R40 exactly — default 282 noon / 291 NIGHT, classic 269 byte-exact. The nine-draw night margin is intact. Classic purity: HUD DOM 2354:8 both arms, fetch surface identical, no #pc-creditlink / overlay / F2 listener / PROCITY.credits. Filed to F: three classic bookmarks are not byte-reproducible across boots even at HEAD (2/5 HEAD-vs-HEAD) — a font race in the sign atlas. A screenshot golden on those cannot be a byte-hash. selfcheck ALL GREEN 157,647/157,647, fingerprint 0x5f76e76 unmoved. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
209 lines
12 KiB
JSON
209 lines
12 KiB
JSON
{
|
||
"schema": "procity-credits/1",
|
||
"updated": "2026-08-07",
|
||
"round": 41,
|
||
"owner": "Lane B builds the surface; EVERY lane owns its own entries. Schema + how to append: docs/LANES/LANE_B_NOTES.md §41.",
|
||
"notice": "PROCITY is built from third-party libraries, open data and generated art. Everything below ships in this build. Entries marked REQUIRED carry an attribution the licence obliges us to show; the rest are recorded so the obligation can never arrive unnoticed. Where a source could not be established from this repo it says \"unverified\" — never a guess.",
|
||
"entries": [
|
||
{
|
||
"id": "openstreetmap",
|
||
"name": "OpenStreetMap",
|
||
"kind": "data",
|
||
"licence": "ODbL 1.0",
|
||
"attribution": "© OpenStreetMap contributors — data available under the Open Database License (ODbL) 1.0",
|
||
"required": true,
|
||
"source": "https://www.openstreetmap.org/copyright · fetched via the Overpass API (overpass-api.de), bounded per-town bbox",
|
||
"used_for": "Every real Australian town: 21 town caches (1,196 shops) plus their real street geometry, and the two GODVERSE towns built on the same road data. When you walk Fitzroy, those are Fitzroy's streets.",
|
||
"count": 23,
|
||
"files": ["assets/towns/*.json", "assets/towns/_raw/*.json"],
|
||
"evidence": "web/assets/towns/SOURCES.md · pipeline/build_towns.py · license/attribution fields on every cache",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "three-js",
|
||
"name": "three.js r175",
|
||
"kind": "engine",
|
||
"licence": "MIT",
|
||
"attribution": "Copyright © 2010–2025 three.js authors — MIT License",
|
||
"required": true,
|
||
"source": "https://threejs.org/ · vendored into web/vendor/ (no CDN at runtime)",
|
||
"used_for": "The renderer, the scene graph, the animation system, and the addons the shell uses: EffectComposer/RenderPass/UnrealBloomPass/OutputPass, GLTFLoader, PointerLockControls, BufferGeometryUtils, SkeletonUtils.",
|
||
"count": 1,
|
||
"files": ["vendor/three.module.js", "vendor/three.core.js", "vendor/addons/**"],
|
||
"evidence": "SPDX-License-Identifier: MIT in the vendored file headers · REVISION '175' in vendor/three.core.js",
|
||
"lane": "B"
|
||
},
|
||
{
|
||
"id": "mixamo-clips",
|
||
"name": "Adobe Mixamo — animation clips",
|
||
"kind": "motion",
|
||
"licence": "Adobe Mixamo royalty-free licence (use inside a game is permitted; redistributing the clips as clips is not)",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "Adobe Mixamo (Sitting_Idle, Looking_Around and the walk/idle family), converted mesh-free by pipeline fbx_to_clip.py",
|
||
"used_for": "Four of the eight motion clips every citizen in the town plays: idle, walk, sit (the seated drummer), look (the street glance). Motion only — the skeleton animation is retargeted onto PROCITY's own characters; no Mixamo geometry ships.",
|
||
"count": 4,
|
||
"files": ["models/peds/idle.glb", "models/peds/walk.glb", "models/peds/sit.glb", "models/peds/look.glb"],
|
||
"evidence": "docs/LANES/LANE_E_NOTES.md — provenance table, rows ⟨v3.1⟩ and ⟨v5.1⟩",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "rokoko-mocap",
|
||
"name": "Rokoko — free motion-capture library",
|
||
"kind": "motion",
|
||
"licence": "Rokoko free-pack licence — royalty-free including commercial use",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "rokoko.com free 263-asset mocap pack (Rokoko Studio Mocap / Dancing), baked mesh-free",
|
||
"used_for": "The four dance clips the pub crowd and the DJs play: dance_party, dance_medium, dance_drink, dance_sway.",
|
||
"count": 4,
|
||
"files": ["models/peds/dance_*.glb"],
|
||
"evidence": "pipeline/AUDIT.md — 'Round 36 wave 1', the measured zone correction (these are Rokoko, not Mixamo, despite the _mixamo skeleton suffix)",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "ped-bodies-base",
|
||
"name": "Citizen bodies — the base roster (17 normal + 2 comical)",
|
||
"kind": "mesh",
|
||
"licence": "unverified",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "Copied byte-identical from the house game 90sDJsim (web/world/models/peds/); the canonical originals live outside this repo.",
|
||
"used_for": "Every walking citizen you meet on the street and every shopkeeper behind a counter.",
|
||
"count": 19,
|
||
"files": ["models/peds/man_*.glb", "models/peds/woman_*.glb", "models/peds/comical_*.glb"],
|
||
"evidence": "unverified",
|
||
"flag": "NO PER-ASSET LICENCE RECORD EXISTS IN THIS REPO. docs/CITY_SPEC.md ('NPC contract') declares the roster's zone as 'web-ok only (Mixamo, CC0/CC-BY, CGTrader RF)' — and CC-BY and CGTrader RF can both carry an attribution obligation, so if any one of these 19 is CC-BY the credit is owed and unrecorded. Lane E: resolve per asset against the 90sDJsim/character_kit sources before any public release.",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "ped-bodies-dj",
|
||
"name": "Citizen bodies — the DJ five",
|
||
"kind": "mesh",
|
||
"licence": "Original work (CC0-equivalent mesh) + Adobe Mixamo auto-rig output (royalty-free)",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "John's own DJ characters: an on-device FLUX.2-klein-4B concept sheet → TRELLIS.2 mesh on this box → Mixamo auto-rig → MESHGOD fbx_to_ped.py",
|
||
"used_for": "The dance-scene bodies in the venues (not in the ?classic=1 crowd).",
|
||
"count": 5,
|
||
"files": ["models/peds/dj_*.glb", "models/peds/woman_dj_*.glb"],
|
||
"evidence": "docs/LANES/LANE_E_NOTES.md — provenance table, row 'Ped bodies ⟨v7.0⟩' · pipeline/AUDIT.md 'Round 36 wave 1'",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "gen-skins",
|
||
"name": "Texture skins — facades, skies, grounds, wallpapers, interiors, posters",
|
||
"kind": "texture",
|
||
"licence": "Original work (CC0-equivalent)",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "Generated on this machine by pipeline/gen_skins.py driving MODELBEAST flux_local (FLUX.2-klein-4B), plus ports of the house games 90sDJsim and thriftgod. Prompted with 'no text, no brands, no people'.",
|
||
"used_for": "Every shopfront in the town, every sky, every footpath and road, every interior wall and floor, and the gig posters.",
|
||
"count": 103,
|
||
"files": ["assets/gen/*.jpg"],
|
||
"evidence": "pipeline/AUDIT.md (§ skins, R38 §3, R39 §5) · docs/LANES/LANE_E_NOTES.md provenance table",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "audio-pack",
|
||
"name": "Sound and music",
|
||
"kind": "audio",
|
||
"licence": "Original work (CC0-equivalent)",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "100% procedural synthesis — pipeline/gen_audio.py, numpy oscillators and noise renders through ffmpeg. No sample library, no recording, no neural model.",
|
||
"used_for": "Street and room ambience, the shop bells and till and door and footsteps, the tram, the magpie and the mower, and every music bed including the three gig genres.",
|
||
"count": 29,
|
||
"files": ["assets/audio/*.ogg", "assets/audio/*.m4a"],
|
||
"evidence": "pipeline/AUDIT.md — 'Round 11 audio pack provenance', R12, R13, R38 §2",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "props-house-library",
|
||
"name": "Shop fittings and street furniture — the house library set",
|
||
"kind": "mesh",
|
||
"licence": "unverified",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "Generic props pre-sorted into John's house 3D library (benches, shelving, counter, crate, bin, streetlight, food cart …), normalized to the house GLB law by pipeline/normalize.py.",
|
||
"used_for": "The benches, bins, streetlights and bus stops on the footpath, and the shelving, racks, counters and crates inside the shops.",
|
||
"count": 18,
|
||
"files": ["manifest.json → fittings / furniture (served from the 3GOD depot)"],
|
||
"evidence": "pipeline/AUDIT.md — 'Normalized set' + the blanket caveat under QUARANTINE",
|
||
"flag": "No explicit per-asset licence record. All 18 source filenames were checked against known trademarks (0 hits) and branded/designer pieces were quarantined out of the manifest, but 'unclear ⇒ quarantine' is the house rule: record a one-line source per asset before any public release.",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "props-on-device",
|
||
"name": "Shop fittings, hero props and gig instruments — generated here",
|
||
"kind": "mesh",
|
||
"licence": "Original work (CC0-equivalent)",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "MODELBEAST flux_local (FLUX.2-klein-4B) concept → RMBG-2.0 cutout → TRELLIS.2 reconstruction → pipeline/normalize.py + bake_lowpoly.py / decimate_props.py. All on this box, no cloud key, $0.",
|
||
"used_for": "The listening booth, drinks fridge, arcade cabinet, milkshake mixer and novelty record; the five band instruments on every stage; the magpie, the paling fence and the water tank in the backyards.",
|
||
"count": 14,
|
||
"files": ["manifest.json → fittings / furniture (served from the 3GOD depot)"],
|
||
"evidence": "pipeline/AUDIT.md — 'Provenance — round-3 hero props', R12/R13 gig instruments, R38 §4, R39 §6",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "props-fal-hunyuan",
|
||
"name": "Three props generated through fal.ai",
|
||
"kind": "mesh",
|
||
"licence": "Original work",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "An on-device flux_local concept image reconstructed by fal-ai/hunyuan3d/v2 — the only outside spend in the project, about $0.64 in total.",
|
||
"used_for": "The glass display case, the magazine rack and the bus shelter (TRELLIS could not hold their thin or transparent geometry).",
|
||
"count": 3,
|
||
"files": ["manifest.json → fittings / furniture (served from the 3GOD depot)"],
|
||
"evidence": "pipeline/AUDIT.md — 'Round 5 — E3: fal.ai fallback props'",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "godverse-stock",
|
||
"name": "Record, book and toy cover art in the crates",
|
||
"kind": "stock",
|
||
"licence": "In-house only — cleared for this build, NOT cleared for public release",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "Product photographs from the real shop (Monster Robot Party) via the recordgod point-of-sale, and from real dealgod seller listings — the sellers' own product shots, baked into atlases by pipeline/godverse_stock.py.",
|
||
"used_for": "The sleeves you flip past in a record bin and the spines and boxes on the shelves, when the stock layer is on.",
|
||
"count": 15,
|
||
"files": ["assets/stock_godverse/*/"],
|
||
"evidence": "docs/LANES/LANE_E_NOTES.md — provenance table, rows 'Real-stock atlas' and 'Mint atlases' (both amber)",
|
||
"flag": "FLAG BEFORE ANY PUBLIC OR COMMERCIAL RELEASE. These are real photographs taken by real sellers; minting changes whose stock the game claims it is, never whose photograph it is. Clearing them is a human decision, not a gate's.",
|
||
"lane": "G"
|
||
},
|
||
{
|
||
"id": "gen-models",
|
||
"name": "The on-device generation stack",
|
||
"kind": "tool",
|
||
"licence": "FLUX.2-klein-4B — Apache-2.0 · TRELLIS.2 and RMBG-2.0 — used as reconstruction/segmentation tools, no model weights ship",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "MODELBEAST, running locally on an Apple M3 Ultra. Nothing was downloaded from an asset pool and no cloud key was used except the one noted above.",
|
||
"used_for": "Not shipped in the game — recorded because it is what produced the skins, meshes and props credited above, and a generator's licence is where an obligation would hide.",
|
||
"count": 3,
|
||
"files": [],
|
||
"evidence": "pipeline/AUDIT.md — R38 §6, R39 §5 (licence tables) · pipeline/README.md",
|
||
"lane": "E"
|
||
},
|
||
{
|
||
"id": "fonts",
|
||
"name": "Typefaces",
|
||
"kind": "font",
|
||
"licence": "n/a — no font files ship",
|
||
"attribution": null,
|
||
"required": false,
|
||
"source": "House law: canvas text only, no font files. Every sign, poster and menu is drawn with the operating system's own font stack (Arial / -apple-system / Segoe UI / Roboto), so nothing is embedded or redistributed.",
|
||
"used_for": "Every shop sign in the town, the band names on the posters, and this panel.",
|
||
"count": 0,
|
||
"files": [],
|
||
"evidence": "README.md — 'House laws' (canvas text, no font files)",
|
||
"lane": "B"
|
||
}
|
||
]
|
||
}
|