Reorganize docs into category folders and drop the retired head-review page
Full build / Import + headless tests (push) Successful in 41s
Full build / Full desktop build + optional release (push) Skipped

Group the top-level docs into docs/project, docs/design, docs/assets and
docs/process, each with its own README index. Delete the superseded
docs/screens/head-review page and sheets. Rewrite every markdown link,
absolute docs path and tool/test reference to the new locations, fix the
pre-existing broken anchors and remove the dead Joke Shop photo-board link.
check_docs OK, Python tooling 167/167.
This commit is contained in:
zwitschi committed 2026-11-06 20:13:03 +01:00
1 parent 045ed2a58f
commit 2ba40f3578
57 files changed
+406 -414

No files matched your search

+31 -30
View File
@@ -1,42 +1,43 @@
# Gig Line Documentation
This folder holds the project documentation, visual references and generated QA evidence.
Documentation is grouped by category. Product intent, the gap analysis and the release roadmap
live in [`../PLAN.md`](../PLAN.md); the executable task list is [`../TODO.md`](../TODO.md); the
workflow rules are in [`../AGENTS.md`](../AGENTS.md).
## Current priorities
## Categories
1. [Quaternius NPC base migration](../TODO.md#quaternius-npc-base-migration-top-priority) — CC0 Quaternius mesh/animation source baked to the 24,000-budget runtime contract.
2. [3D model and local map improvements](../TODO.md#3d-model-and-local-map-re-evaluation) — asset re-evaluation and local map reconstruction.
3. [0.10.0 release candidate](../TODO.md#milestone-0100--3d-model-and-map-improvements-minor) — versioned release hardening after the unversioned development tracks.
| Folder | Contents |
| --- | --- |
| [`project/`](project/README.md) | Architecture (arc42) and the implemented-features status |
| [`design/`](design/README.md) | Gameplay, venues, UI copy, accessibility and known limitations |
| [`assets/`](assets/README.md) | Blender library, asset tooling, NPC sourcing and the 3D model review |
| [`process/`](process/README.md) | Setup/controls, release QA and the release runbook |
| [`adr/`](adr/README.md) | Architecture Decision Records |
| [`screens/`](screens/README.md) | Licensed references, concepts and screen designs |
| [`blender_previews/`](blender_previews/README.md) | Committed character/gear/prop preview sheets |
| [`screenshots/`](screenshots/README.md) | The committed in-game gallery |
## Start here
- [`../PLAN.md`](../PLAN.md) — product, design intent and development priorities
- [`../TODO.md`](../TODO.md) — priority-ordered active tasks and roadmap
- [`npc-model-sourcing.md`](npc-model-sourcing.md) — character-source evaluation, licence rules and the character-development plan
- [`makehuman-head-review.md`](makehuman-head-review.md) — retained MakeHuman fallback head, provenance and review verdict
- [`architecture.md`](architecture.md) — arc42 system architecture
- [`getting-started.md`](getting-started.md) — setup, run/test commands and controls
- [`asset-tooling.md`](asset-tooling.md) — image/model pipelines and screenshot gates
- [`../tools/README.md`](../tools/README.md) — tool inventory, categories and test runner
- [`gameplay.md`](gameplay.md) — controls, venues and escalation
- [`venues.md`](venues.md) — Hollywood, Joke Shop and TV Studio real-site mapping
- [`3d-model-review.md`](3d-model-review.md) — 3D model re-evaluation: measurements, scorecard and ranked gaps
- [`development-status.md`](development-status.md) — implemented features, current gaps and active planning
- [`accessibility.md`](accessibility.md) — accessibility statement and known gaps
- [`known-limitations.md`](known-limitations.md) — release-candidate blockers and accepted limits
- [`release-qa.md`](release-qa.md) — manual smoke checklist and balance-acceptance protocol
- [`../CREDITS.md`](../CREDITS.md) — credits and asset provenance
- [`../PRIVACY.md`](../PRIVACY.md) — privacy note
- [`ui-copy.md`](ui-copy.md) — screen, copy and button inventory
- [`RELEASING.md`](RELEASING.md) — export, CI and publishing workflow
- [`adr/README.md`](adr/README.md) — architecture decisions
- [`../PLAN.md`](../PLAN.md) — product, design pillars, gap analysis and the roadmap to 1.0.0
- [`../TODO.md`](../TODO.md) — milestone-ordered active tasks
- [`project/architecture.md`](project/architecture.md) — system architecture and ownership
- [`project/development-status.md`](project/development-status.md) — what the build supports now
- [`design/gameplay.md`](design/gameplay.md) — the playable loop and escalation model
- [`design/venues.md`](design/venues.md) — venue mapping and real-site evidence
- [`assets/npc-model-sourcing.md`](assets/npc-model-sourcing.md) — the active NPC base and licence
rules
- [`assets/3d-model-review.md`](assets/3d-model-review.md) — asset measurements and scorecard
- [`process/getting-started.md`](process/getting-started.md) — setup, run/test and controls
- [`../tools/README.md`](../tools/README.md) — tool inventory and test runner
- [`../CREDITS.md`](../CREDITS.md) — credits, AI/reference provenance and licensing
- [`../PRIVACY.md`](../PRIVACY.md) — local-only data and save files
## Visual references
## Current work
- [`screens/README.md`](screens/README.md) — concepts, designs, screenshots and realism runs
- [`blender_previews/README.md`](blender_previews/README.md) — character/gear/prop previews
- [`screenshots/README.md`](screenshots/README.md) — committed game gallery
- [`ui-copy.md`](ui-copy.md#screen-design-judge-report) — screen/button inventory and latest judge result
v0.9.9 shipped the Quaternius NPC roster. The active patch line is `0.9.10` (roster follow-ups:
outfit families, the Swat base orientation, per-slot atlases) through `0.9.12`, followed by the
`0.10.0` public-readiness minor. See [`../TODO.md`](../TODO.md) for the live checklist.
## Quick preview
+2 -2
View File
@@ -21,7 +21,7 @@ A review compared free/open-source sources against that contract. Quaternius
Ultimate Modular (CC0), Kenney Blocky Characters (CC0), Khronos CesiumMan and
RiggedFigure (CC BY 4.0) and the MakeHuman base mesh (CC0) were imported and
measured. None was a drop-in; the full results are in
[`docs/npc-model-sourcing.md`](../npc-model-sourcing.md).
[`docs/assets/npc-model-sourcing.md`](../assets/npc-model-sourcing.md).
## Decision
@@ -86,4 +86,4 @@ measured. None was a drop-in; the full results are in
- MakeHuman is now an active local development pipeline (body retarget plus project-owned
head/hands), while the procedural library remains the shipped path and CI fallback.
- Blender MCP is optional interactive tooling only; it is not a build, CI, test or runtime
dependency. Setup is in [`docs/asset-tooling.md#optional-interactive-blender-mcp`](../asset-tooling.md#optional-interactive-blender-mcp).
dependency. Setup is in [`docs/assets/asset-tooling.md#optional-interactive-blender-mcp`](../assets/asset-tooling.md#optional-interactive-blender-mcp).
+1 -1
View File
@@ -16,7 +16,7 @@ The CC0 **Quaternius Ultimate Modular Characters** pack already provides a
coherent low-poly human silhouette, 21 modular outfits and 24 animation clips.
The researched GLBs (`Casual`, `Casual_Hoodie`, `Worker`) measure 4 meshes, 62
joints and 24 clips each. The owner directed that Quaternius become the NPC
base. The full evaluation is in [`docs/npc-model-sourcing.md`](../npc-model-sourcing.md).
base. The full evaluation is in [`docs/assets/npc-model-sourcing.md`](../assets/npc-model-sourcing.md).
## Decision
@@ -10,7 +10,7 @@ ADR-0017 made Quaternius the NPC base and staged the migration: Stage 1 bakes a
proportion-warped mesh onto the existing 13-core contract; Stage 2 adopts the
62-joint rig at runtime only if the warp fails.
The Stage 1 proportion warp was executed and measured (`docs/npc-model-sourcing.md`
The Stage 1 proportion warp was executed and measured (`docs/assets/npc-model-sourcing.md`
§Rest-pose and proportion-warp measurement). The arm-down rest pose bakes cleanly, but the
warp to the contract proportions does not:
@@ -1,7 +1,7 @@
# 3D model review (2026-11-03)
Status: **baseline measured; scorecard open.** This is the working document for the unversioned
`3D model re-evaluation` track in [`TODO.md`](../TODO.md). It records what was measured, what the
`3D model re-evaluation` track in [`TODO.md`](../../TODO.md). It records what was measured, what the
Blender skill guidance says the targets are, the ranked candidate gaps, and the decisions that
still need the project owner. Nothing here re-opens the accepted 0.9.4 limits by itself.
@@ -88,7 +88,7 @@ Readings:
Recorded for the character baseline before the Quaternius migration. `npc_base.blend` is the
frozen fallback; the 12 characters are currently assembled procedurally by
`tools/blender_assets.py`. The active plan is now the CC0 Quaternius base bake
([ADR-0017](adr/0017-quaternius-npc-base.md)); this section and the MakeHuman notes below are the
([ADR-0017](../adr/0017-quaternius-npc-base.md)); this section and the MakeHuman notes below are the
pre-migration record. The MPFB/MakeHuman development files were removed from `tmp/` after the
2026-11-05 pivot.
@@ -283,7 +283,7 @@ front/three-quarter/profile and judged side by side:
The chosen s48 is the `head_proto` default; the rejected s24/s64 stay local under
`tmp/npc-parts/`. A before/after sign-off sheet (current `_face` vs s48, 1.85 m
front/three-quarter/profile) is
[`blender_previews/sheet_head_proto_before_after.jpg`](blender_previews/sheet_head_proto_before_after.jpg).
[`blender_previews/sheet_head_proto_before_after.jpg`](../blender_previews/sheet_head_proto_before_after.jpg).
## Foliage language P1 — resolved 2026-11-06
@@ -517,6 +517,6 @@ and the full carded-cluster foliage pass is the one remaining owner-gated P1. No
- Review the assembled [`makehuman-head-review.md`](makehuman-head-review.md) prototype (hair cap and full-body silhouette) before rebuilding the 12 shipped character GLBs.
Tracked in [`TODO.md`](../TODO.md) `3D model re-evaluation`: the remaining `A. Baseline…` item is
Tracked in [`TODO.md`](../../TODO.md) `3D model re-evaluation`: the remaining `A. Baseline…` item is
this owner review; `B`/`C`/`D` carry the per-family work, and `E` adds the pose/weight,
collider-coverage and scorecard-coverage gates this document found missing.
+19
View File
@@ -0,0 +1,19 @@
# Asset Documentation
Asset contracts, pipelines, sourcing and reviews. These pages own the measured evidence; the
executable gates are `tools/blender_assets.py inspect|audit|fit`, `tools/npc_proportions.py` and
the capture scripts.
- [`blender-assets.md`](blender-assets.md) — Blender library operation, the character/gear/prop
contract, attach points and rebuild discipline.
- [`asset-tooling.md`](asset-tooling.md) — image/model pipelines, the optional Blender MCP setup
and the screenshot/vision gates.
- [`npc-model-sourcing.md`](npc-model-sourcing.md) — character-source evaluation, licence rules,
the Quaternius intake and the active NPC plan.
- [`3d-model-review.md`](3d-model-review.md) — measurements, per-asset scorecard, ranked gaps and
accepted limits.
- [`makehuman-head-review.md`](makehuman-head-review.md) — the retained MakeHuman fallback head,
its provenance and the review verdict.
Up: [`../README.md`](../README.md) · Product plan: [`../../PLAN.md`](../../PLAN.md) · Tasks:
[`../../TODO.md`](../../TODO.md).
@@ -2,7 +2,7 @@
Everything the game renders is produced or gated by the scripts below. Architecture-level contracts,
data flow and failure fallbacks are summarized in
[`architecture.md`](architecture.md#content-and-asset-pipeline-architecture); this page is the
[`architecture.md`](../project/architecture.md#content-and-asset-pipeline-architecture); this page is the
operational reference. Development-only outputs (AI concept sheets, Blender sources, raw AI fabrics)
are gitignored; the audited game assets are committed.
@@ -72,7 +72,7 @@ colours onto material roles (darkest → metal, warm saturated → wood, light g
stone, green → foliage). glTF stores colours in linear space, so the tool converts
the sRGB palettes before writing them. Re-run `build` and `godot --headless
--path . --import` after changing a prop. See
[ADR-0012](adr/0012-surface-materials-and-generated-props.md).
[ADR-0012](../adr/0012-surface-materials-and-generated-props.md).
Surface materials share one definition in `src/game/materials.gd`: named
roughness/metallic profiles per surface, plus the environment tune-up (ACES
@@ -81,14 +81,14 @@ tonemapping, glow, fog, colour grading) that the phase lighting applies.
## NPC character model
NPCs are moving from the procedural capsule rig to a skinned, UV-mapped base
character authored in Blender ([ADR-0013](adr/0013-blender-authored-npc-characters.md)).
character authored in Blender ([ADR-0013](../adr/0013-blender-authored-npc-characters.md)).
The active base is the CC0 Quaternius modular character, baked to the runtime contract
([ADR-0017](adr/0017-quaternius-npc-base.md)).
([ADR-0017](../adr/0017-quaternius-npc-base.md)).
`tools/npc_pipeline.py` builds `assets/models/generated/npc_base.glb` plus the
per-slot material maps. `NpcAvatar` instantiates that skinned model, tints its
five material slots from the seed-driven outfit, and drives the bones from the
existing animation code; the procedural rig remains the offline fallback (see
[ADR-0013](adr/0013-blender-authored-npc-characters.md) and
[ADR-0013](../adr/0013-blender-authored-npc-characters.md) and
[`blender-assets.md`](blender-assets.md)).
```bash
@@ -138,7 +138,7 @@ the fallback. Kenney/Khronos/MakeHuman remain evaluated references, not active b
| Characters | Props |
| --- | --- |
| ![characters](../docs/blender_previews/sheet_npc.jpg) | ![props](../docs/blender_previews/sheet_props.jpg) |
| ![characters](../blender_previews/sheet_npc.jpg) | ![props](../blender_previews/sheet_props.jpg) |
```bash
flatpak run org.blender.Blender --background --python "$PWD/tools/blender_assets.py" -- build
@@ -246,7 +246,7 @@ gate as `--reference` on `generate`.
`tools/refcollect.py` downloads images from DuckDuckGo image search into `tmp/research/<slug>/` for
development reference only. It applies **no licence gate** (rows are marked `local_only` /
`unchecked-local`); everything it fetches must never be committed or promoted into
[`screens/refs/`](screens/refs/README.md) without the normal sidecar licence + privacy gate. This
[`screens/refs/`](../screens/refs/README.md) without the normal sidecar licence + privacy gate. This
is the owner-authorised local-only override (TODO.md §3D model re-evaluation → A).
```bash
@@ -265,7 +265,7 @@ string); the UA alone is no longer enough to look like a browser.
### Reference-board research (`refboard`)
`tools/refboard.py` searches, fetches and documents Wikimedia Commons photos of a real location for
the [`screens/refs/`](screens/refs/README.md) boards. It is stdlib-only and never commits anything
the [`screens/refs/`](../screens/refs/README.md) boards. It is stdlib-only and never commits anything
itself: downloads land in `tmp/`, and moving a file into a board folder is a deliberate manual step
that goes through the sidecar licence gate.
@@ -322,10 +322,10 @@ their SHA-256 in `CREDITS.md`.
## Local map development (planned)
The local map workstreams (H–M) in [`TODO.md`](../TODO.md#3d-model-re-evaluation) are
The local map workstreams (H–M) in [`TODO.md`](../../TODO.md#3d-model-and-local-map-re-evaluation) are
planned, not implemented; there are no map-generation commands yet. The runtime
contract, provenance rules, budget/navigation gates and fallback are in
[`architecture.md#venue-implementation-contract`](architecture.md#venue-implementation-contract).
[`architecture.md#venue-implementation-contract`](../project/architecture.md#venue-implementation-contract).
The detailed pipeline/task list lives in `TODO.md`.
## Confirmed game assets
@@ -335,9 +335,9 @@ Everything below is audited and shipped in the game; development-only outputs
| | |
| --- | --- |
| ![brick facade](../assets/textures/ai/game_ready/v2/picks/brick_facade.png) | ![sidewalk pavers](../assets/textures/ai/game_ready/v2/picks/sidewalk_pavers.png) |
| ![asphalt](../assets/textures/ai/game_ready/v2/picks/asphalt.png) | ![awning](../assets/textures/ai/game_ready/v2/picks/awning_canvas.png) |
| ![skyline day](../assets/textures/ai/game_ready/v2/picks/skyline_day.png) | ![skyline night](../assets/textures/ai/game_ready/v2/picks/skyline_night.png) |
| ![brick facade](../../assets/textures/ai/game_ready/v2/picks/brick_facade.png) | ![sidewalk pavers](../../assets/textures/ai/game_ready/v2/picks/sidewalk_pavers.png) |
| ![asphalt](../../assets/textures/ai/game_ready/v2/picks/asphalt.png) | ![awning](../../assets/textures/ai/game_ready/v2/picks/awning_canvas.png) |
| ![skyline day](../../assets/textures/ai/game_ready/v2/picks/skyline_day.png) | ![skyline night](../../assets/textures/ai/game_ready/v2/picks/skyline_night.png) |
- **Surface textures:** the v2 picks above (brick, sidewalk pavers, dry and wet asphalt, awning canvas) plus their normal maps, loaded by `src/game/materials.gd` and `WorldBuilder`; the three skyline panoramas are switched per shift phase. The first-generation tiles and `assets/textures/skyline.png` are no longer loaded.
- **UI art:** `assets/textures/ai/game_ready/icons/` (flashlight, door lock, wand, REC) and `assets/textures/ai/game_ready/cards/` (ID, wristband, ticket, credential, guest list), loaded by `src/game/ui/hud.gd`.
@@ -511,7 +511,7 @@ remain optional interactive exploration; the headless commands stay the build an
## Realism pass: scene concepts, skylines and textures
The skyline, surface tiles and phase lighting were rebuilt against AI concept frames. The
concepts live in [`docs/screens/concepts/`](../docs/screens/concepts/README.md); the validated
concepts live in [`docs/screens/concepts/`](../screens/concepts/README.md); the validated
picks the game loads are in `assets/textures/ai/game_ready/v2/picks/` (day/dusk/night
panoramas, brick, sidewalk pavers, dry and wet asphalt, awning canvas, each with a normal
map).
@@ -633,7 +633,7 @@ texture detail 1.2, backdrop 2.0 and characters 1.2; the Pillow metric gap was
particularly lit night facades and dense backdrop detail. That is expected: the
pass validated close-range surfaces and promoted the texture repairs, not a
photoreal renderer. The 0.9.5 before/after close-up sheet is
[`blender_previews/sheet_texture_refinement_0.9.5.jpg`](blender_previews/sheet_texture_refinement_0.9.5.jpg);
[`blender_previews/sheet_texture_refinement_0.9.5.jpg`](../blender_previews/sheet_texture_refinement_0.9.5.jpg);
the texture-adoption run itself was the earlier 0.8-style candidate comparison,
and its report remains local/gitignored.
@@ -1,21 +1,21 @@
# Blender asset library
Architecture context: the asset contracts and fallback path are summarized in
[`architecture.md`](architecture.md#content-and-asset-pipeline-architecture).
[`architecture.md`](../project/architecture.md#content-and-asset-pipeline-architecture).
Status: built, audited, and integrated (2026-11-01). The active character migration
replaces the procedural body with a baked CC0 Quaternius base
([ADR-0017](adr/0017-quaternius-npc-base.md)); the current library remains the shipped
([ADR-0017](../adr/0017-quaternius-npc-base.md)); the current library remains the shipped
fallback until the Quaternius 12-variant baseline passes review. `NpcAvatar` selects the
character variants and attaches the gear; `WorldBuilder` loads the prop library
with colliders and phase-driven emissives. The 0.9.4 neutral baseline and its
acceptance criteria are in [`architecture.md`](architecture.md#character-and-gear-asset-contract);
acceptance criteria are in [`architecture.md`](../project/architecture.md#character-and-gear-asset-contract);
the committed 8 × 6 contact sheet is
[`blender_previews/sheet_npc_baseline.jpg`](blender_previews/sheet_npc_baseline.jpg).
[`blender_previews/sheet_npc_baseline.jpg`](../blender_previews/sheet_npc_baseline.jpg).
Generator: [`tools/blender_assets.py`](../tools/blender_assets.py). Manifest (the
Generator: [`tools/blender_assets.py`](../../tools/blender_assets.py). Manifest (the
source of truth for integration):
[`assets/models/blender/manifest.json`](../assets/models/blender/manifest.json).
[`assets/models/blender/manifest.json`](../../assets/models/blender/manifest.json).
## Art direction
@@ -143,7 +143,7 @@ render about 2.5 min.
## Characters
All library variants share the
[character and gear asset contract](architecture.md#character-and-gear-asset-contract):
[character and gear asset contract](../project/architecture.md#character-and-gear-asset-contract):
`npc_base` mesh node, five tint slots, +Z visual front, 24,000/24,000 character budget and the
same 256² slot-map/AO rules. The shipped roster is on the 62-joint Quaternius skeleton
(ADR-0018); the procedural fallback built by `build --source procedural` keeps the 13 core bones.
@@ -201,7 +201,7 @@ the role's `TYPE_COLORS`.
## Gear attach points
Gear is authored in attach-point space; the exact contract and runtime fit offsets are in
[`architecture.md#character-and-gear-asset-contract`](architecture.md#character-and-gear-asset-contract).
[`architecture.md#character-and-gear-asset-contract`](../project/architecture.md#character-and-gear-asset-contract).
The shipped matrix is **fifteen pieces** since the hat removal (owner, 2026-11-06): `cap` and
`hood` are retired, and `firefighter_helmet` is the only head item.
@@ -278,7 +278,7 @@ carry baked AO and the shared neutral material maps described above.
`npc_base`, the bones accept `NpcAvatar`'s pose composition, and props are
grounded.
- `tools/test_model_review.py`: every `CHARACTERS`/`GEAR`/`PROPS` entry has a
scorecard row and verdict in `docs/3d-model-review.md` (coverage gate).
scorecard row and verdict in `docs/assets/3d-model-review.md` (coverage gate).
- `src/test/tests/test_world.gd`: every library prop that blocks walking has a
`StaticBody3D` + `NavigationObstacle3D`, checked against the catalogue
(collider/proxy gate).
@@ -10,8 +10,8 @@ base. The development source files were removed from `tmp/` on 2026-11-05.
## Asset
- GLB: [`assets/models/blender_src/makehuman_head.glb`](../assets/models/blender_src/makehuman_head.glb)
- Review sheet: [`blender_previews/sheet_makehuman_head.jpg`](blender_previews/sheet_makehuman_head.jpg)
- GLB: [`assets/models/blender_src/makehuman_head.glb`](../../assets/models/blender_src/makehuman_head.glb)
- Review sheet: [`blender_previews/sheet_makehuman_head.jpg`](../blender_previews/sheet_makehuman_head.jpg)
- Source workflow (development-only, files removed after the Quaternius pivot;
retained here as the historical method) — extracts the MakeHuman head, cuts it at the neck, keeps the head/eye/mouth
components, cuts an almond aperture through a skin eyelid mask, adds recessed
@@ -26,7 +26,7 @@ base. The development source files were removed from `tmp/` on 2026-11-05.
- Materials used: `skin`, `eye_white`, `iris`, `pupil`, `hair`. No textures are
baked into this prototype.
![MakeHuman head review sheet](blender_previews/sheet_makehuman_head.jpg)
![MakeHuman head review sheet](../blender_previews/sheet_makehuman_head.jpg)
## What was done
@@ -54,7 +54,7 @@ base. The development source files were removed from `tmp/` on 2026-11-05.
- Base mesh: MakeHuman / MPFB base, CC0, from the local research set
(development source files removed after the 2026-11-05 Quaternius pivot); see
[`CREDITS.md`](../CREDITS.md).
[`CREDITS.md`](../../CREDITS.md).
- The head is a **derived prototype**, not a shipped NPC. It does not enter
`assets/models/blender/npc/`, `npc_base`, the runtime `NpcAvatar` path, CI, or
a release package. It is retained as a fallback, not the active NPC base.
@@ -1,8 +1,8 @@
# NPC Model Sourcing
This page records the source evaluation and the active character plan. The
decision is [ADR-0017](adr/0017-quaternius-npc-base.md), which supersedes the
generator-first sourcing decision in [ADR-0015](adr/0015-npc-model-variety-sourcing.md).
decision is [ADR-0017](../adr/0017-quaternius-npc-base.md), which supersedes the
generator-first sourcing decision in [ADR-0015](../adr/0015-npc-model-variety-sourcing.md).
## Active direction
@@ -198,7 +198,7 @@ deltoid + hand) — both are the gate's rejection conditions.
contract proportions; the gate fails and Stage 2 (a 62-joint runtime ADR) is indicated. Do not
start the 12-variant rebuild on the warped base.
[ADR-0018](adr/0018-quaternius-stage2-runtime-rig.md) records the Stage 2 decision (accepted
[ADR-0018](../adr/0018-quaternius-stage2-runtime-rig.md) records the Stage 2 decision (accepted
2026-11-05, owner chose option 2): adopt the **Quaternius 62-joint rig at runtime**, keep the
mesh at source LOD, re-derive gear attach points from the Quaternius skeleton, and use the
Quaternius Idle/Walk clips directly (no retarget).
@@ -237,7 +237,7 @@ Two source quirks shaped the bake:
contract is applied as a rename, not a re-author.
The face/silhouette gate that chose the full swap is recorded in the follow-up decision of
[ADR-0018](adr/0018-quaternius-stage2-runtime-rig.md); its comparison sheets were retired with the
[ADR-0018](../adr/0018-quaternius-stage2-runtime-rig.md); its comparison sheets were retired with the
review pages.
## Shipped roster (0.9.9, owner chose the full swap)
@@ -354,7 +354,7 @@ not a local workaround.
## Licence and provenance
- CC0 preferred. CC-BY is allowed only with attribution in
[`CREDITS.md`](../CREDITS.md).
[`CREDITS.md`](../../CREDITS.md).
- No service asset whose terms restrict redistribution may be shipped.
- Keep the source URL, author, licence, download date and SHA-256 in this page
and in `CREDITS.md`.
@@ -369,12 +369,12 @@ The MakeHuman/MPFB body pipeline is closed for the NPC base. The accepted
MakeHuman head and the procedural `npc_base` remain tested fallbacks until the
Quaternius rollout is complete. Their research scripts and renders were removed
from `tmp/` after the pivot; the measurements and decisions remain in
[`DONE.md`](../DONE.md), [`MEMORY.md`](../MEMORY.md) and the review docs.
[`DONE.md`](../../DONE.md), [`MEMORY.md`](../../MEMORY.md) and the review docs.
## Related documents
- [ADR-0017: Quaternius NPC base](adr/0017-quaternius-npc-base.md)
- [ADR-0016: 24,000-triangle character budget](adr/0016-npc-character-budget-24k.md)
- [Blender asset contract](architecture.md#character-and-gear-asset-contract)
- [ADR-0017: Quaternius NPC base](../adr/0017-quaternius-npc-base.md)
- [ADR-0016: 24,000-triangle character budget](../adr/0016-npc-character-budget-24k.md)
- [Blender asset contract](../project/architecture.md#character-and-gear-asset-contract)
- [`3d-model-review.md`](3d-model-review.md)
- [`asset-tooling.md`](asset-tooling.md)
+3 -3
View File
@@ -9,7 +9,7 @@ capture harnesses.
| --- | --- |
| [![sheet_npc.jpg](sheet_npc.jpg)](sheet_npc.jpg) <br> `sheet_npc.jpg` | Eight skinned character variants (casual, jacket, coat, hi-vis vest, dress, hoodie, firefighter, guard) with their gear attach points. |
| [![sheet_npc_baseline.jpg](sheet_npc_baseline.jpg)](sheet_npc_baseline.jpg) <br> `sheet_npc_baseline.jpg` | Neutral studio baseline: 8 characters x front, three-quarter, profile, back, full body and crowd views. |
| [![sheet_makehuman_head.jpg](sheet_makehuman_head.jpg)](sheet_makehuman_head.jpg) <br> `sheet_makehuman_head.jpg` | MakeHuman head: front, three-quarter and profile review views. The owner accepted the basic head; the automated vision gate still rejects the eye/lid region as deferred polish. See [`../makehuman-head-review.md`](../makehuman-head-review.md). |
| [![sheet_makehuman_head.jpg](sheet_makehuman_head.jpg)](sheet_makehuman_head.jpg) <br> `sheet_makehuman_head.jpg` | MakeHuman head: front, three-quarter and profile review views. The owner accepted the basic head; the automated vision gate still rejects the eye/lid region as deferred polish. See [`../makehuman-head-review.md`](../assets/makehuman-head-review.md). |
| [![sheet_npc_baseline_compare-body.jpg](sheet_npc_baseline_compare-body.jpg)](sheet_npc_baseline_compare-body.jpg) <br> `sheet_npc_baseline_compare-body.jpg` | Neck/shoulder transition: fuller neck base and a lower shoulder root. |
| [![sheet_npc_baseline_compare-face-detail.jpg](sheet_npc_baseline_compare-face-detail.jpg)](sheet_npc_baseline_compare-face-detail.jpg) <br> `sheet_npc_baseline_compare-face-detail.jpg` | Face detail: nose ala wings, a single rounded mouth and a darker ear concha. |
| [![sheet_npc_baseline_compare-face.jpg](sheet_npc_baseline_compare-face.jpg)](sheet_npc_baseline_compare-face.jpg) <br> `sheet_npc_baseline_compare-face.jpg` | Face-depth pass: recessed sclera, upper lid and sculpted chin/cheek planes. |
@@ -27,5 +27,5 @@ capture harnesses.
| [![sheet_props.jpg](sheet_props.jpg)](sheet_props.jpg) <br> `sheet_props.jpg` | Twenty street and venue props with baked maps, ground contact and collider footprints. |
| [![sheet_texture_refinement_0.9.5.jpg](sheet_texture_refinement_0.9.5.jpg)](sheet_texture_refinement_0.9.5.jpg) <br> `sheet_texture_refinement_0.9.5.jpg` | 0.9.5 texture refinement before/after: pavers, awning stripes and NPC fabric. |
The measurements are in [`../3d-model-review.md`](../3d-model-review.md) and the asset contract in
[`../blender-assets.md`](../blender-assets.md).
The measurements are in [`../3d-model-review.md`](../assets/3d-model-review.md) and the asset contract in
[`../blender-assets.md`](../assets/blender-assets.md).
+13
View File
@@ -0,0 +1,13 @@
# Design Documentation
Gameplay, venues, presentation and player-facing constraints.
- [`gameplay.md`](gameplay.md) — the playable loop, escalation mechanics, venues and tutorial.
- [`venues.md`](venues.md) — real-site evidence, game mapping and venue simplifications.
- [`ui-copy.md`](ui-copy.md) — screen, copy and button inventory plus the screen-design judge
record.
- [`accessibility.md`](accessibility.md) — accessibility statement and known gaps.
- [`known-limitations.md`](known-limitations.md) — release blockers and accepted limitations.
Up: [`../README.md`](../README.md) · Product plan: [`../../PLAN.md`](../../PLAN.md) · Tasks:
[`../../TODO.md`](../../TODO.md).
@@ -28,5 +28,5 @@ Known gaps:
review is still a 0.10.0 release-review item.
Test evidence and the manual checklist live in
[`release-qa.md`](release-qa.md#manual-smoke-checklist); settings and save behaviour are
documented in [`getting-started.md`](getting-started.md).
[`release-qa.md`](../process/release-qa.md#manual-smoke-checklist); settings and save behaviour are
documented in [`getting-started.md`](../process/getting-started.md).
+1 -1
View File
@@ -1,6 +1,6 @@
# Gameplay
The complete design rationale also lives in [`PLAN.md`](../PLAN.md); this page keeps the playable mechanics close to the README.
The complete design rationale also lives in [`PLAN.md`](../../PLAN.md); this page keeps the playable mechanics close to the README.
## Game Overview
@@ -12,7 +12,7 @@ public release.
observation.
- **AI asset provenance:** the image-generation provider terms and commercial
redistribution rights for the committed AI-assisted textures/UI art still need
legal review. See [`../CREDITS.md`](../CREDITS.md).
legal review. See [`../CREDITS.md`](../../CREDITS.md).
- **Storefront/legal approval:** age/content rating, storefront policy, trademark
language and the mental-health-crisis/body-camera representation have not been
externally approved.
@@ -31,7 +31,7 @@ public release.
- Character faces, hands and fabric use a deliberately low-poly style; the
>26 m tier remains a two-quad impostor and there is no separate finger-curl
rig. The accepted limits are recorded in
[`npc-model-sourcing.md`](npc-model-sourcing.md).
[`npc-model-sourcing.md`](../assets/npc-model-sourcing.md).
- There is no live 3D body-camera replay; the timeline is text-based.
- There is no recorded voice/music track. Ambience and cues are procedural.
- The game is English-only and does not yet have a translator workflow or
+4 -4
View File
@@ -1,6 +1,6 @@
# UI copy and button inventory
Status: dialogue, button-state, focus, modal-close, font/layout, destructive-action and end-to-end passes complete; capture/smoke sign-off remains for 0.9.3.
Status: complete (0.9.3). Retained as the screen/button inventory, copy audit and screen-design judge record.
## Screen inventory
@@ -236,9 +236,9 @@ Command: `python3 tools/screen_designs.py judge`
Result: **21/21 match, 0 review, 0 diff**
The screenshot gallery was regenerated on the current build before judging, including the eight UI-state captures 14–21 added in `src/test/capture_ui_states.gd`.
Accepted captures are in [`docs/screens/`](screens/README.md); the committed
gallery is in [`docs/screenshots/`](screenshots/README.md).
Accepted captures are in [`docs/screens/`](../screens/README.md); the committed
gallery is in [`docs/screenshots/`](../screenshots/README.md).
The automatic model selection and retry/spend behavior is documented in
[`docs/asset-tooling.md`](asset-tooling.md). This report intentionally records
[`docs/assets/asset-tooling.md`](../assets/asset-tooling.md). This report intentionally records
the outcome rather than generated captures, which remain local/gitignored.
+5 -5
View File
@@ -11,7 +11,7 @@ The game uses two physical Hollywood blocks across three playable venue rows:
The runtime implementation contract (facade specs, map budgets, navigation,
colliders, phase behavior and fallback) lives in
[`architecture.md`](architecture.md#venue-implementation-contract). This page
[`architecture.md`](../project/architecture.md#venue-implementation-contract). This page
keeps the real-site evidence, mapping decisions and deliberate simplifications.
## Hollywood Boulevard
@@ -49,7 +49,7 @@ keeps the real-site evidence, mapping decisions and deliberate simplifications.
| TV Studio arrival | same six-column facade/eight steps plus bulb canopy, sedan, handrail and barriers |
The generated references in
[`screens/concepts/hollywood_boulevard/`](screens/concepts/hollywood_boulevard/README.md)
[`screens/concepts/hollywood_boulevard/`](../screens/concepts/hollywood_boulevard/README.md)
are art direction for lighting, material scale and composition; they are not
texture or geometry sources.
@@ -128,9 +128,9 @@ The guard starts west of the entrance at (-4.8, 0.1, 1.4), facing the approach.
- [Hollywood Masonic Temple facade — Wikimedia Commons](https://commons.wikimedia.org/wiki/File:El_Capitan_Theater_frontal_fachade-The_Masonic_Temple.jpg)
- [Hollywood Masonic Temple and El Capitan Theatre, 2013 — Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Hollywood_Masonic_Temple_2013-10-13_10-02-25.jpg)
- [Comedy Store — OpenStreetMap way 428854155](https://www.openstreetmap.org/way/428854155)
- Committed photo boards: [`screens/refs/hollywood/`](screens/refs/hollywood/README.md),
[`screens/refs/joke-shop/`](screens/refs/joke-shop/README.md); three-up boards
are in [`screens/boards/`](screens/boards/README.md).
- Committed photo board: [`screens/refs/hollywood/`](../screens/refs/hollywood/README.md);
three-up boards are in [`screens/boards/`](../screens/boards/README.md). The Joke Shop has no
committed photo board: its reference set stays local-only under `tmp/research/comedy-store/`.
- Local-only research (never committed): `tmp/research/elcapitan-2026/`,
`tmp/research/jimmy-kimmel-entrance/`, `tmp/research/comedy-store/` and
`tmp/research/comedy-store-hillside/`. These are evidence for decisions, not
+11
View File
@@ -0,0 +1,11 @@
# Process Documentation
Setup, quality assurance and releasing.
- [`getting-started.md`](getting-started.md) — setup, run/test commands, controls and save data.
- [`release-qa.md`](release-qa.md) — the manual smoke checklist and the balance-acceptance
protocol.
- [`RELEASING.md`](RELEASING.md) — export templates, release build, CI/publishing and rollback.
Up: [`../README.md`](../README.md) · Product plan: [`../../PLAN.md`](../../PLAN.md) · Tasks:
[`../../TODO.md`](../../TODO.md).
@@ -127,7 +127,7 @@ the documented right-click/`xattr` quarantine instructions. Signing and
notarization remain a public-release blocker until an Apple Developer account and
a reproducible signing/notarization job are available; they are not silently
claimed as complete. The same limitation is recorded in
[`known-limitations.md`](known-limitations.md).
[`known-limitations.md`](../design/known-limitations.md).
Always run the release build from a clean checkout or detached worktree. Godot
can pack files from ignored `tmp/` and old `build/` folders into the PCK; the
@@ -205,7 +205,7 @@ change, update `tools/build_releases.sh` first.
- [ ] All headless tests pass (exit code 0).
- [ ] Game boots cleanly in a smoke test.
- [ ] Controls documented in `docs/getting-started.md` match the build.
- [ ] Controls documented in `docs/process/getting-started.md` match the build.
- [ ] Version in `project.godot` matches the tag.
- [ ] Export templates used are the official ones for the pinned engine.
- [ ] Artifacts uploaded; README downloads page shows them.
@@ -87,7 +87,7 @@ The game writes four JSON files in Godot's `user://` directory:
Files: `settings.json`, `campaign.json`, `shift_results.json` and the versioned
`shift_state.json` checkpoint. The schema, migration/default-filling rules,
atomic-write behavior and checkpoint contents are in
[`architecture.md#persistence-and-save-contract`](architecture.md#persistence-and-save-contract).
[`architecture.md#persistence-and-save-contract`](../project/architecture.md#persistence-and-save-contract).
For a clean first launch, delete the four files (or the whole `Gig Line` user
directory). Settings' **Reset campaign** clears campaign progress separately.
@@ -60,8 +60,8 @@ owns the mechanics.
These are the acceptance targets for the 0.10.0 balance pass, not measured results.
No reaction tables, event weights or scoring rules were changed to set them. The
[roadmap](../TODO.md) tracks the sweeps and external playtests still needed.
[Gameplay](gameplay.md) owns the mechanics; this page owns their balance-test protocol.
[roadmap](../../TODO.md) tracks the sweeps and external playtests still needed.
[Gameplay](../design/gameplay.md) owns the mechanics; this page owns their balance-test protocol.
### Test matrix and evidence
+11
View File
@@ -0,0 +1,11 @@
# Project Documentation
Architecture and project status.
- [`architecture.md`](architecture.md) — the arc42-style architecture: goals, constraints,
building blocks, runtime views, decisions and risks.
- [`development-status.md`](development-status.md) — the canonical implemented-features list,
verification baseline and known gaps.
Up: [`../README.md`](../README.md) · Product plan: [`../../PLAN.md`](../../PLAN.md) · Tasks:
[`../../TODO.md`](../../TODO.md).
@@ -27,8 +27,8 @@ This document follows the structure of the arc42 architecture documentation temp
- The first implementation should be small enough for a playable vertical slice.
- The engine is Godot 4.7.2 with GDScript; a playable prototype vertical slice is implemented. CI, local development and exported builds use 4.7.2; the default renderer stays GL Compatibility for Web parity, with an optional Forward+ Desktop HQ build.
- Venue-specific policies must be configurable rather than hard-coded into individual NPCs.
- The game must preserve the de-escalation-first design described in [`PLAN.md`](../PLAN.md).
- The project uses the repository workflow described in [`AGENTS.md`](../AGENTS.md).
- The game must preserve the de-escalation-first design described in [`PLAN.md`](../../PLAN.md).
- The project uses the repository workflow described in [`AGENTS.md`](../../AGENTS.md).
- The project follows [Semantic Versioning](https://semver.org/) (`MAJOR.MINOR.PATCH`).
### Version management
@@ -37,7 +37,7 @@ This document follows the structure of the arc42 architecture documentation temp
- **MINOR** — new venues, NPC archetypes, systems, or features that are backward compatible.
- **PATCH** — bug fixes and small polish that do not change behavior.
The single source of truth for the version is `config/version` in `project.godot` (currently `0.9.8`). Each release is tagged in git as `v<version>` (e.g. `v0.6.0`). The `0.x` series is pre-stable, so MINOR bumps may introduce breaking changes while the prototype is still stabilizing. `tools/build_releases.sh` and `tools/publish_release.sh` read the version from `project.godot`, so bumping it there is the only required step before a release. The full bump checklist lives in [`RELEASING.md`](RELEASING.md).
The single source of truth for the version is `config/version` in `project.godot` (currently `0.9.9`). Each release is tagged in git as `v<version>` (e.g. `v0.6.0`). The `0.x` series is pre-stable, so MINOR bumps may introduce breaking changes while the prototype is still stabilizing. `tools/build_releases.sh` and `tools/publish_release.sh` read the version from `project.godot`, so bumping it there is the only required step before a release. The full bump checklist lives in [`RELEASING.md`](../process/RELEASING.md).
## 3. Context and Scope
@@ -82,7 +82,7 @@ The player interacts with NPCs, venue entrances, access artifacts, equipment, st
- `src/game/ui/art.gd` loads runtime UI/scene art from `assets/images/ui/` and `assets/images/scenes/`, with null fallbacks so panels keep their procedural layouts.
- `tools/model_pipeline.py` builds and audits the street-prop `.glb` models and packs their colour atlases.
- `tools/npc_pipeline.py` builds and audits the skinned NPC base model (`assets/models/generated/npc_base.glb`) and its per-slot material maps, with an optional AI fabric override (ADR-0013). The active character migration bakes the CC0 Quaternius base onto the same contract (ADR-0017); the procedural base remains the fallback.
- `tools/blender_assets.py` builds, renders and audits the Blender asset library (`assets/models/blender/{npc,npc_gear,props}/` + `manifest.json`): NPC character variants that are drop-in for `npc_base`, attach-point gear, and street/venue props. `NpcAvatar` selects variants/gear by role/seed and `WorldBuilder` loads the prop replacements and new street dressing, with procedural fallbacks (see `docs/blender-assets.md`).
- `tools/blender_assets.py` builds, renders and audits the Blender asset library (`assets/models/blender/{npc,npc_gear,props}/` + `manifest.json`): NPC character variants that are drop-in for `npc_base`, attach-point gear, and street/venue props. `NpcAvatar` selects variants/gear by role/seed and `WorldBuilder` loads the prop replacements and new street dressing, with procedural fallbacks (see `docs/assets/blender-assets.md`).
- `tools/scene_concepts.py` generates realism-pass references (`docs/screens/concepts/`), skyline backdrops and surface tiles (raw `assets/textures/ai/v2/raw/` → candidates `assets/textures/ai/game_ready/v2/`), promotes the validated ones to the tracked `v2/picks/` that `SurfaceMaterials`/`WorldBuilder` preload, audits them, and scores `src/test/capture_realism.gd` A/B captures (six stages, runtime texture swaps) against the concepts (`docs/screens/realism/<run>/`).
- `tools/asset_pipeline.py` generates and audits role-aware textures; `tools/screen_designs.py` generates screen references and judges captures; `tools/check_screenshots.sh` renders the staged gallery and runs the compare gate.
@@ -90,7 +90,7 @@ Confirmed game assets live in `assets/textures/ai/game_ready/` (audited surface,
### Asset storage conventions
The canonical rules live in [ADR-0014](adr/0014-runtime-image-root.md). In short:
The canonical rules live in [ADR-0014](../adr/0014-runtime-image-root.md). In short:
| Location | Contents | Loaded at runtime? |
| --- | --- | --- |
@@ -190,7 +190,7 @@ Venue rules:
Persistence is local-only under Godot's `user://` directory. The architecture
owns the schema; operational locations and reset/rollback steps live in
[`getting-started.md`](getting-started.md#save-data-and-migration).
[`getting-started.md`](../process/getting-started.md#save-data).
| File | Contents | Compatibility |
| --- | --- | --- |
@@ -220,8 +220,8 @@ developer tools only — runtime, tests and CI consume committed GLBs and maps.
| `tools/npc_pipeline.py` | Builds the skinned base avatar, five-slot material maps, palette and AI-fabric preparation (`prepare`/`palette`) | `npc_base.glb`, `assets/textures/npc/*_{albedo,normal,orm}.png`, `palette.json` | `audit_glb` against the 24,000-triangle / 24,000-vertex base contract (13 core bones required; extras allowed) |
| `tools/blender_assets.py` | Builds/renders the library: 12 characters, 15 gear pieces, 20 props, plus `manifest.json`; stdlib `audit`/`fit`/`sheet`/`list` | `assets/models/blender/{npc,npc_gear,props}/*.glb` | Character cap 24,000 tris / 24,000 verts, 1,500 per gear, 4,000 per prop; grounding, UV, degenerate-triangle, attach-fit and manifest coverage checks |
| `tools/bake_ao.py` | Bakes per-asset AO maps | `<asset>_ao.png` (256²) | Wired through `Materials.apply_ao()`/`SurfaceMaterials`; cloth/pants opt out (see below) |
| `tools/npc_proportions.py` | Measures exported GLB rest pose (height, head, shoulders, hips, torso, limbs, feet) against the stylized guide | report / JSON in `docs/3d-model-review.md#character-measurements` | All eight variants must stay inside the guide after a body change |
| `tools/npc_baseline.py` | Assembles neutral-baseline sheets and before/after comparisons | `docs/blender_previews/sheet_npc_baseline*.jpg` | Human review against `docs/3d-model-review.md` |
| `tools/npc_proportions.py` | Measures exported GLB rest pose (height, head, shoulders, hips, torso, limbs, feet) against the stylized guide | report / JSON in `docs/assets/3d-model-review.md#character-measurements` | All eight variants must stay inside the guide after a body change |
| `tools/npc_baseline.py` | Assembles neutral-baseline sheets and before/after comparisons | `docs/blender_previews/sheet_npc_baseline*.jpg` | Human review against `docs/assets/3d-model-review.md` |
| `src/test/capture_npc_baseline.gd` | Fixed-camera studio baseline, 8 variants × 6 views | local `tmp/` frames | Neutral silhouette/face/gear review |
| `src/test/capture_npc_review.gd` | Final-context gate: 8 variants × 2 venues × day/night × 3 distances = 96 frames, crowd hidden, review-only `character_override` for the guard | local `tmp/` frames | Pre-build acceptance gate for gear fit and venue lighting |
| `src/test/capture_realism.gd` | Venue realism stages plus a frozen portrait and surface close-ups | `docs/screens/realism/<run>/` | Optional vision judge; portrait is the only avatar-detail capture |
@@ -243,16 +243,16 @@ Runtime contracts that must survive any character change:
- Rebuild only the assets whose geometry changed (Blender GLB export is byte-nondeterministic),
then run `godot --headless --path . --import`; never commit a no-op full rebuild.
Evidence and detailed contracts live in [`blender-assets.md`](blender-assets.md),
[`3d-model-review.md`](3d-model-review.md) and
[`3d-model-review.md#character-measurements`](3d-model-review.md#character-measurements); command-level usage is in
[`asset-tooling.md`](asset-tooling.md).
Evidence and detailed contracts live in [`blender-assets.md`](../assets/blender-assets.md),
[`3d-model-review.md`](../assets/3d-model-review.md) and
[`3d-model-review.md#character-measurements`](../assets/3d-model-review.md#character-measurements); command-level usage is in
[`asset-tooling.md`](../assets/asset-tooling.md).
### Local map development tooling (planned)
The current venues are hand-authored procedural reconstructions in
`src/game/world_builder.gd`. The local map workstreams (**H–M**) in
[`TODO.md`](../TODO.md#3d-model-re-evaluation) are unversioned and planned: they will
[`TODO.md`](../../TODO.md#3d-model-and-local-map-re-evaluation) are unversioned and planned: they will
test whether licensed data and reference photography can replace or supplement the
stylized geometry without moving map data, AI composition or splat rendering into
the runtime.
@@ -353,7 +353,7 @@ Releases are produced from a tagged commit and published to the repository host'
- `tools/build_releases.sh` — exports the desktop binaries and Web zip into `build/`, named `gig-line-<platform>-<version>.<ext>`.
- `tools/publish_release.sh` — creates a release and uploads the artifacts via the Gitea API, using `GITEA_TOKEN` or the checkout extraheader fallback.
- Packaging — NSIS builds the Windows installer; `packaging/linux/build_appimage.sh` builds the AppImage.
- [`RELEASING.md`](RELEASING.md) — step-by-step guide and release checklist.
- [`RELEASING.md`](../process/RELEASING.md) — step-by-step guide and release checklist.
The release process is: bump the version, run the full test suite and `tools/check_screenshots.sh`, run `tools/build_releases.sh`, tag and push (CI publishes), then verify the README "Downloads" links and the release artifacts.
@@ -372,27 +372,27 @@ The release process is: bump the version, run the full test suite and `tools/che
- **Campaign and checkpoint state:** `Campaign` owns venue order/progression; settings, campaign, completed shift history and a versioned pause checkpoint are separate JSON documents. The checkpoint snapshots coordinator systems, scheduler RNG and NPC presentation/access state; it deliberately does not serialize the tutorial overlay or transient input state.
- **Difficulty:** easy/normal/hard only scale spawn pacing, NPC compliance tolerance and report-credibility strictness; access/escalation rules and emergency rarity are invariant.
- **Settings and accessibility:** volume/motion/caption settings persist through `settings.json`; Help is generated from the input-binding catalogue and the HUD log is the text caption surface. CI/release, local development and exported builds are unified on Godot 4.7.2.
- **Documentation ownership:** `PLAN.md` owns design intent; `docs/gameplay.md` owns playable mechanics; `docs/architecture.md` owns system boundaries, data flow, constraints and cross-cutting decisions; ADRs own decision history; `docs/development-status.md` owns the implemented/gap list; `TODO.md` owns the roadmap; `MEMORY.md` owns gotchas and open questions. Specialized docs link to these rather than becoming competing sources of truth.
- **Documentation ownership:** `PLAN.md` owns design intent; `docs/design/gameplay.md` owns playable mechanics; `docs/project/architecture.md` owns system boundaries, data flow, constraints and cross-cutting decisions; ADRs own decision history; `docs/project/development-status.md` owns the implemented/gap list; `TODO.md` owns the roadmap; `MEMORY.md` owns gotchas and open questions. Specialized docs link to these rather than becoming competing sources of truth.
## 9. Architecture Decisions
Architecture decisions are recorded as ADRs:
- [ADR-0001: Venue-driven simulation architecture](adr/0001-venue-driven-simulation-architecture.md)
- [ADR-0002: De-escalation-first escalation model](adr/0002-de-escalation-first-escalation-model.md)
- [ADR-0003: Explicit access-verification system](adr/0003-explicit-access-verification-system.md)
- [ADR-0004: Local single-player first](adr/0004-local-single-player-first.md)
- [ADR-0005: Event-based incident recording](adr/0005-event-based-incident-recording.md)
- [ADR-0006: Godot 4 with GDScript](adr/0006-godot-4-gdscript.md)
- [ADR-0007: Locomotion and input layers](adr/0007-locomotion-and-input-layers.md)
- [ADR-0008: Cone focus and focus circle](adr/0008-cone-focus-and-head-ring.md)
- [ADR-0009: Radial action menu](adr/0009-radial-action-menu.md)
- [ADR-0010: Procedural NPC presentation](adr/0010-procedural-npc-presentation.md)
- [ADR-0017: Quaternius NPC base](adr/0017-quaternius-npc-base.md)
- [ADR-0011: Aim-free selection and precision walk](adr/0011-aim-free-selection-and-precision-walk.md)
- [ADR-0012: Surface materials and generated props](adr/0012-surface-materials-and-generated-props.md)
- [ADR-0013: Blender-authored NPC characters and baked materials](adr/0013-blender-authored-npc-characters.md)
- [ADR-0014: Canonical runtime image root and image conventions](adr/0014-runtime-image-root.md)
- [ADR-0001: Venue-driven simulation architecture](../adr/0001-venue-driven-simulation-architecture.md)
- [ADR-0002: De-escalation-first escalation model](../adr/0002-de-escalation-first-escalation-model.md)
- [ADR-0003: Explicit access-verification system](../adr/0003-explicit-access-verification-system.md)
- [ADR-0004: Local single-player first](../adr/0004-local-single-player-first.md)
- [ADR-0005: Event-based incident recording](../adr/0005-event-based-incident-recording.md)
- [ADR-0006: Godot 4 with GDScript](../adr/0006-godot-4-gdscript.md)
- [ADR-0007: Locomotion and input layers](../adr/0007-locomotion-and-input-layers.md)
- [ADR-0008: Cone focus and focus circle](../adr/0008-cone-focus-and-head-ring.md)
- [ADR-0009: Radial action menu](../adr/0009-radial-action-menu.md)
- [ADR-0010: Procedural NPC presentation](../adr/0010-procedural-npc-presentation.md)
- [ADR-0017: Quaternius NPC base](../adr/0017-quaternius-npc-base.md)
- [ADR-0011: Aim-free selection and precision walk](../adr/0011-aim-free-selection-and-precision-walk.md)
- [ADR-0012: Surface materials and generated props](../adr/0012-surface-materials-and-generated-props.md)
- [ADR-0013: Blender-authored NPC characters and baked materials](../adr/0013-blender-authored-npc-characters.md)
- [ADR-0014: Canonical runtime image root and image conventions](../adr/0014-runtime-image-root.md)
## 10. Quality Requirements
@@ -435,32 +435,32 @@ architecture document.
| Document | Canonical role | Relationship to this architecture |
| --- | --- | --- |
| [`PLAN.md`](../PLAN.md) | Product/design intent, pillars, venues and success criteria | Design source; architecture realizes it |
| [`docs/gameplay.md`](gameplay.md) | Playable loop, escalation, tutorial, venue mechanics | Runtime/behavioral view |
| [`docs/venues.md`](venues.md) | Real-site evidence, mapping decisions and deliberate simplifications | Runtime venues' evidence companion to §5 |
| [`docs/architecture.md`](architecture.md) | System boundaries, data flow, constraints, deployment, cross-cutting decisions, quality risks | Single architecture source |
| [`docs/adr/`](adr/) | Immutable decision records with context and consequences | Decision history linked from §9 |
| [`docs/asset-tooling.md`](asset-tooling.md) | Build/audit/capture commands, optional Blender MCP and pipeline usage | Operational appendix to the pipeline section |
| [`docs/blender-assets.md`](blender-assets.md) | Blender library art direction, roles, layout and checks | Operational asset appendix; contract lives here in §5 |
| [`docs/3d-model-review.md`](3d-model-review.md) | Character and asset measurements, scorecard and ranked gaps | Visual-QA appendix to the character tooling section |
| [`docs/3d-model-review.md`](3d-model-review.md) | Scorecard, measurements and ranked asset gaps | Working review companion to §5 |
| [`docs/npc-model-sourcing.md`](npc-model-sourcing.md) | Character-source evaluation and licence/prototype outcome | Supports the character tooling section and ADR-0015 |
| [`docs/getting-started.md`](getting-started.md) | Setup, commands, controls | Developer onboarding |
| [`docs/RELEASING.md`](RELEASING.md) | Release checklist and CI/publishing steps | Deployment appendix to §7 |
| [`docs/release-qa.md`](release-qa.md) | Manual smoke checklist and balance protocol | QA appendix to §10 |
| [`docs/accessibility.md`](accessibility.md) | Accessibility features, statement and known gaps | Player-facing quality statement |
| [`docs/known-limitations.md`](known-limitations.md) | Release blockers and accepted limitations | Player/release-facing risk statement |
| [`docs/ui-copy.md`](ui-copy.md) | Screen/button inventory, copy audit and screen-judge report | Presentation appendix |
| [`docs/development-status.md`](development-status.md) | Implemented features and current gaps | Status companion to the roadmap |
| [`TODO.md`](../TODO.md) | Priority-ordered active tasks, unversioned development tracks and versioned roadmap | Planning source; no architecture duplication |
| [`CHANGELOG.md`](../CHANGELOG.md) | User-facing release history | Release/version companion |
| [`PLAN.md`](../../PLAN.md) | Product/design intent, pillars, venues and success criteria | Design source; architecture realizes it |
| [`docs/design/gameplay.md`](../design/gameplay.md) | Playable loop, escalation, tutorial, venue mechanics | Runtime/behavioral view |
| [`docs/design/venues.md`](../design/venues.md) | Real-site evidence, mapping decisions and deliberate simplifications | Runtime venues' evidence companion to §5 |
| [`docs/project/architecture.md`](architecture.md) | System boundaries, data flow, constraints, deployment, cross-cutting decisions, quality risks | Single architecture source |
| [`docs/adr/`](../adr) | Immutable decision records with context and consequences | Decision history linked from §9 |
| [`docs/assets/asset-tooling.md`](../assets/asset-tooling.md) | Build/audit/capture commands, optional Blender MCP and pipeline usage | Operational appendix to the pipeline section |
| [`docs/assets/blender-assets.md`](../assets/blender-assets.md) | Blender library art direction, roles, layout and checks | Operational asset appendix; contract lives here in §5 |
| [`docs/assets/3d-model-review.md`](../assets/3d-model-review.md) | Character and asset measurements, scorecard and ranked gaps | Visual-QA appendix to the character tooling section |
| [`docs/assets/3d-model-review.md`](../assets/3d-model-review.md) | Scorecard, measurements and ranked asset gaps | Working review companion to §5 |
| [`docs/assets/npc-model-sourcing.md`](../assets/npc-model-sourcing.md) | Character-source evaluation and licence/prototype outcome | Supports the character tooling section and ADR-0015 |
| [`docs/process/getting-started.md`](../process/getting-started.md) | Setup, commands, controls | Developer onboarding |
| [`docs/process/RELEASING.md`](../process/RELEASING.md) | Release checklist and CI/publishing steps | Deployment appendix to §7 |
| [`docs/process/release-qa.md`](../process/release-qa.md) | Manual smoke checklist and balance protocol | QA appendix to §10 |
| [`docs/design/accessibility.md`](../design/accessibility.md) | Accessibility features, statement and known gaps | Player-facing quality statement |
| [`docs/design/known-limitations.md`](../design/known-limitations.md) | Release blockers and accepted limitations | Player/release-facing risk statement |
| [`docs/design/ui-copy.md`](../design/ui-copy.md) | Screen/button inventory, copy audit and screen-judge report | Presentation appendix |
| [`docs/project/development-status.md`](development-status.md) | Implemented features and current gaps | Status companion to the roadmap |
| [`TODO.md`](../../TODO.md) | Priority-ordered active tasks, unversioned development tracks and versioned roadmap | Planning source; no architecture duplication |
| [`CHANGELOG.md`](../../CHANGELOG.md) | User-facing release history | Release/version companion |
Consolidation decisions:
- **Architecture owns the "how"** (components, contracts, data flow, constraints, quality gates); **PLAN/gameplay own the "what"**; **ADRs own the "why"**. Links replace duplicated prose.
- **Asset and release documents remain separate** because they are command-heavy operational procedures; their architecture-relevant contracts and failure modes are summarized in §5 and §7.
- **Completed plans are removed, not kept as competing roadmaps.** Historical graphics work is summarized by ADR-0013, the asset pipeline section and the v0.6.0 changelog; new work belongs in TODO.
- **Status and roadmap are separate from architecture.** `docs/development-status.md` records what exists; `TODO.md` records what remains, ordered as unversioned development tracks, versioned milestones and deferred work.
- **Status and roadmap are separate from architecture.** `docs/project/development-status.md` records what exists; `TODO.md` records what remains, ordered as unversioned development tracks, versioned milestones and deferred work.
- **Documentation drift is a tracked risk:** release/version, test counts, renderer status, and stale plans must be corrected in the same commit as the change that invalidates them.
## 13. Glossary
@@ -1,9 +1,9 @@
# Development Status
Baseline: **v0.9.8** (2026-11-04). This page lists what the build currently
Baseline: **v0.9.9** (2026-11-06). This page lists what the build currently
supports and what remains; it is not a release history. Completed work lives in
[`DONE.md`](../DONE.md), user-facing changes in [`CHANGELOG.md`](../CHANGELOG.md),
and the active order/gaps in [`TODO.md`](../TODO.md).
[`DONE.md`](../../DONE.md), user-facing changes in [`CHANGELOG.md`](../../CHANGELOG.md),
and the active order/gaps in [`TODO.md`](../../TODO.md).
## Implemented
@@ -16,7 +16,7 @@ and the active order/gaps in [`TODO.md`](../TODO.md).
| Access and escalation | Six escalation levels, venue access policies, artifact validity/recognition, door lock, crowd reactions, investigation/false-report handling and shift review. |
| UI/input | Keyboard/mouse and gamepad bindings, focus rings, default modal focus, single top-modal close path, shared button states, font scaling, long-string handling, searchable Help and 21 committed UI/game captures. |
| Audio/accessibility | Procedural crowd bed and radio cues, master/SFX/ambience volumes, reduced motion, captions, colour-independent escalation cue, hold-to-confirm emergency and guarded destructive actions. |
| Persistence | Separate settings, campaign, shift-history and versioned checkpoint files; default-filling migration, atomic writes and corrupt/partial-file fallback. Save locations and rollback are documented in [`getting-started.md`](getting-started.md#save-data-and-migration). |
| Persistence | Separate settings, campaign, shift-history and versioned checkpoint files; default-filling migration, atomic writes and corrupt/partial-file fallback. Save locations and rollback are documented in [`getting-started.md`](../process/getting-started.md#save-data). |
| Assets | Blender character/gear/prop library with AO and manifests; 256² NPC maps with 4× fabric weave; image/texture pipelines, reference boards and three-up boards; environment/realism capture tools. |
| Build/release | Godot 4.7.2 Compatibility/Web default plus optional Forward+ Desktop HQ. Gitea checks/build/publish, seven release assets, checksums, preflight/rollback and clean-worktree release discipline. |
@@ -41,7 +41,7 @@ and the active order/gaps in [`TODO.md`](../TODO.md).
library and the MakeHuman head remain the tested fallback.
- The roster passed its owner visual review on 2026-11-06: faces, head gear, hand-held and back
gear were all accepted after the follow-up fixes. The review page and its sheets were retired;
the measurements live in `docs/3d-model-review.md` and `docs/blender-assets.md`.
the measurements live in `docs/assets/3d-model-review.md` and `docs/assets/blender-assets.md`.
- Roster silhouette variety is narrower than the procedural library (three meshes for twelve
roles, differentiated by tint and gear) until the modular part library is added.
- Head gear is authored for the shipped Quaternius head; the procedural fallback therefore wears
@@ -51,6 +51,6 @@ and the active order/gaps in [`TODO.md`](../TODO.md).
- Live 3D replay, recorded VO/music, more venues and seasonal content are future
work.
See [`TODO.md`](../TODO.md) for the ordered task list and
[`known-limitations.md`](known-limitations.md) for the current release blockers.
See [`TODO.md`](../../TODO.md) for the ordered task list and
[`known-limitations.md`](../design/known-limitations.md) for the current release blockers.
Architecture and ownership are in [`architecture.md`](architecture.md).
+2 -2
View File
@@ -15,13 +15,13 @@ The map-optimization references for the El Capitan Entertainment Centre block
(6840 Hollywood Blvd) are in
[`hollywood_boulevard/README.md`](hollywood_boulevard/README.md). The real-site
facts and game mapping are documented in
[`../../venues.md`](../../venues.md#hollywood-boulevard).
[`../../venues.md`](../../design/venues.md#hollywood-boulevard).
## The Joke Shop — Sunset Strip
The current Joke Shop map is based on The Comedy Store at 8433 Sunset Blvd.
The real-site mapping and simplifications are in
[`../../venues.md`](../../venues.md#the-joke-shop); the frames are in
[`../../venues.md`](../../design/venues.md#the-joke-shop); the frames are in
[`joke_shop/README.md`](joke_shop/README.md).
![Joke Shop entrance in daylight](joke_shop/joke_shop_entrance_day.png)
@@ -4,7 +4,7 @@ AI-generated art-direction frames for the real El Capitan Entertainment Centre
block at 6840 Hollywood Boulevard. They are generated with
`tools/scene_concepts.py generate --group scene --only ...` and are not shipped
game textures. The geometry mapping and source links are in
[`../../../venues.md`](../../../venues.md#hollywood-boulevard).
[`../../../venues.md`](../../../design/venues.md#hollywood-boulevard).
## Entrance — day
+1 -1
View File
@@ -4,7 +4,7 @@ AI-generated art-direction frames for the fictional Joke Shop, based on the
real Comedy Store block at 8433 Sunset Boulevard. They are generated with
`tools/scene_concepts.py generate --group scene --only ...` and are not shipped
game textures. The geometry mapping and source links are in
[`../../../venues.md`](../../../venues.md#the-joke-shop).
[`../../../venues.md`](../../../design/venues.md#the-joke-shop).
## Entrance — day, photo-anchored
-68
View File
@@ -1,68 +0,0 @@
# Head rework — review page (2026-11-04)
> **Historical page / changed source (2026-11-04).** The numbers below describe the
> earlier decimated MakeHuman head (1,548-tri skin). The shared source
> `assets/models/blender_src/makehuman_head.glb` now holds the higher-resolution
> standalone prototype. The owner accepted the basic head; the automated vision gate
> still records REJECT on the eye/lid region as deferred polish. See
> [`../../makehuman-head-review.md`](../../makehuman-head-review.md). Re-run the
> library head build before relying on the comparison counts below.
This page is the review checkpoint for the NPC head rework. The goal was to replace the
sphere-and-floating-primitive face with a head that has real nose / chin / jaw landmarks at
portrait distance.
## What changed
The original procedural face is a head sphere plus separate nose, mouth, ear and eye primitives.
The new head uses the **decimated MakeHuman head** (CC0, 1,573 tris) as the base shape and keeps
the project's separate eyeballs, brow and mouth pieces on top. An AI judge was used to drive the
decision: it scored the procedural rework at ~3/5 and then picked the MakeHuman head as the
clearer silhouette.
| | Source | Tris (head) | Read |
| --- | --- | --- | --- |
| **Before** | procedural `_face` (sphere + primitives) | ~1,900 | flat face, slit eyes |
| **After** | overhauled MakeHuman head + project eyes/brows/mouth | ~1,880 | smooth nose/chin/jaw landmarks |
The head source was overhauled 2026-11-04: the blocky decimated MakeHuman head was welded
(merge-by-distance) and Laplacian-relaxed into one clean manifold shell (`makehuman_head.glb`,
1,548 tris skin), then the project eyes/brows/mouth were added.
## AI-generated target concept
The rework was guided by two generated concept frames (front + profile, `bytedance-seed/seedream-4.5`).
![concept](sheet_concept.jpg)
## 1.85 m comparison (top = current, bottom = new)
Left to right: front, three-quarter, profile.
![1.85 m comparison](sheet_compare_1.85.jpg)
## New head at 1.5 m (portrait)
![1.5 m portrait](sheet_head_1.5.jpg)
## Contract and checks
- `blender_assets.py inspect` on the assembled `npc_casual` with the new head: **14 bones,
skinned, no issues**.
- Source: `assets/models/blender_src/makehuman_head.glb` (CC0, attributed in `CREDITS.md`).
- Python 167/167, Godot 277/277, `check_docs` OK.
## Remaining polish (known, not blockers)
1. The hair cap still reads as a stepped block instead of hugging the skull.
2. The brows weld to the face but can read as a slightly separate bar.
3. The neck underside cap is plain; it is hidden by the body neck in the assembled character.
4. The head skin is 1.5k tris (smooth but low-poly); a retopology pass could add resolution if a
portrait shows faceting.
## Decision (2026-11-04, owner)
The MakeHuman-head direction is approved for the basic human head. The remaining review is the
assembled prototype's hair cap and full-body silhouette. After that, roll the head into the other
11 variants (one asset family at a time) with a before/after sheet per batch, then re-run the
24-NPC budget + AO bake.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

+2 -2
View File
@@ -76,8 +76,8 @@ committed here is the redacted copy, not the original.
## How the folder is used
- Build the venue **three-up boards** (photo | concept | current capture) for the review verdicts.
- Link the board from the venue map document (`docs/venues.md#hollywood-boulevard`,
`docs/venues.md#the-joke-shop`) and from the local-map block notes.
- Link the board from the venue map document (`docs/design/venues.md#hollywood-boulevard`,
`docs/design/venues.md#the-joke-shop`) and from the local-map block notes.
- Cite the sidecar when a texture, proportion or signage decision is derived from a photo.
- Refresh the board when a venue change makes an old reference misleading, and note the change in
the sidecar.
+2 -2
View File
@@ -34,12 +34,12 @@ attribution string for CC BY / CC BY-SA in the `Author` or a note below.
| Decision | Evidence | Where it landed |
| --- | --- | --- |
| e.g. six-column spacing kept at 2.4 m | photo 1, measured against door width | `docs/venues.md#hollywood-boulevard` |
| e.g. six-column spacing kept at 2.4 m | photo 1, measured against door width | `docs/design/venues.md#hollywood-boulevard` |
| e.g. banner red sampled to `#8a1f24` | photo 1 + photo 2 | `docs/screens/refs/hollywood/` notes, facade kit |
## Generated boards used with this set
Generated frames live in [`../../concepts/`](../../concepts/README.md); reference them here so the
Generated frames live in [`../../concepts/`](../concepts/README.md); reference them here so the
three-up sheet is reproducible.
| Board | Path | Model | Prompt / seed | Generated | Spend |
+2 -2
View File
@@ -11,7 +11,7 @@ TV Studio board.
Provenance, licences and the decisions these photos informed are in
[`SIDECAR.md`](SIDECAR.md). The rules for this folder are in
[`../README.md`](../README.md); generated art-direction frames live in
[`../README.md`](README.md); generated art-direction frames live in
[`../../concepts/hollywood_boulevard/`](../../concepts/hollywood_boulevard/README.md).
| Photo | What it is evidence for |
@@ -35,5 +35,5 @@ Provenance, licences and the decisions these photos informed are in
- The east retail neighbour beyond the temple (the modern retail block), for facade rhythm at the
right-hand edge of the venue.
Add new files with the naming convention in [`../README.md`](../README.md) and list them in the
Add new files with the naming convention in [`../README.md`](README.md) and list them in the
sidecar in the same commit.
+3 -3
View File
@@ -26,7 +26,7 @@
Licence texts: [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/),
[CC BY 3.0](https://creativecommons.org/licenses/by/3.0/) and
[CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/). The CC BY and CC BY-SA files are
also listed in [`../../../CREDITS.md`](../../../CREDITS.md) under "Development-only reference
also listed in [`../../../../CREDITS.md`](../../../../CREDITS.md) under "Development-only reference
images".
**CC BY-SA review (2026-11-03):** `hollywood-boulevard-night-context-ccbysa.jpg` is redistributed
@@ -51,10 +51,10 @@ before use.
| Decision | Evidence | Where it landed |
| --- | --- | --- |
| Six Ionic columns, ~2.4 m spacing, 8 steps | facade photo measured against the door width | `docs/venues.md#hollywood-boulevard` geometry notes |
| Six Ionic columns, ~2.4 m spacing, 8 steps | facade photo measured against the door width | `docs/design/venues.md#hollywood-boulevard` geometry notes |
| Masonic parapet motto and medallions | 1922 elevation + facade photo | `WorldBuilder` facade, `docs/screenshots/01-venue-overview.png` |
| Three vertical event banners | facade photo | facade banners and the day/night capture set |
| Red carpet + barrier staging narrows the sidewalk | premiere photo | `docs/venues.md#hollywood-boulevard` event staging notes |
| Red carpet + barrier staging narrows the sidewalk | premiere photo | `docs/design/venues.md#hollywood-boulevard` event staging notes |
| Across-street height and plaza opening | Ovation photo | opposite frontage massing |
| TV Studio arrival staging (bulb canopy, car, barriers) | premiere staging photo | `VENUE_SPECS["tv_studio"]` and the Late Night TV Studio venue docs |
| Terrazzo band width, star size/spacing | terrazzo + star close-up photos | `WalkOfFame` band geometry and the paver material |
+1 -1
View File
@@ -29,6 +29,6 @@ README, the gameplay docs and the screenshot gate; do not edit them by hand.
| 21 | [Responder arrival](21-responder-arrival.png) | A responder at the locked door |
The captures are 1280×720 PNGs. Reference designs and the judge report live in
[`../screens/`](../screens/README.md) and [`../ui-copy.md#screen-design-judge-report`](../ui-copy.md#screen-design-judge-report);
[`../screens/`](../screens/README.md) and [`../ui-copy.md#screen-design-judge-report`](../design/ui-copy.md#screen-design-judge-report);
the re-evaluation's pose and review sheets are under
[`../blender_previews/`](../blender_previews/README.md).