Audit NPC body proportions against a shared guide
Measure all eight exported characters and record the stylized proportion bands. All variants pass; no skeleton or mesh rescale was needed.
This commit is contained in:
1 parent
7c1a4bfd69
commit
ab9c67d266
10 files changed
+329
-3
No files matched your search
@@ -70,6 +70,12 @@ Session memory for durable decisions, state, and gotchas. Keep concise, remove o
|
||||
backpack straps read as rigid bars. The tourist prop now hides outside photo/film poses and the
|
||||
backpack straps were refit as flat forward bands (GLB + AO rebuilt); the face remains P1. Before/
|
||||
after sheet: `sheet_npc_baseline_compare.jpg`.
|
||||
- **NPC proportion audit (0.9.4, 2026-11-02):** `tools/npc_proportions.py` measures the exported
|
||||
GLBs (height, skin-head size, upper-chest shoulder silhouette, pants hip width, Spine-to-shoulder
|
||||
torso, Spine-to-ground leg, shoulder-to-hand arm, shoe foot length). All eight variants pass the
|
||||
stylized guide in `docs/npc-proportion-audit.md`; head ~0.190 (upper 0.22) and broad-build
|
||||
shoulders ~0.370/hip ~0.225 are near the upper bounds, not outliers. No skeleton/mesh rescale was
|
||||
needed; run the report after any body change.
|
||||
- **UI flow smoke (2026-11-02):** `smoke_ui_flows.gd` boots the real scene and
|
||||
exercises inspection allow/deny, normal vs emergency radio, Help filtering,
|
||||
wand allow/deny and review return-to-menu. Keep this smoke in the 0.9.6
|
||||
@@ -743,7 +749,7 @@ Session memory for durable decisions, state, and gotchas. Keep concise, remove o
|
||||
- Venue `door_staff_lines` are logged through `GameManager` (inspect / wand / refuse). They are not a separate dialogue UI.
|
||||
- Access loadout is implemented; do not re-fix `override_access` as if it were still unread.
|
||||
- `Save.SETTINGS_FILE` is declared and unused; settings persistence goes through `Save.load_settings()` / `save_settings()`.
|
||||
- Headless suite is **262/262**; Python tooling is **99/99**; screenshot compare is **21 good / 0 bad** and the automatic judge is **21/21 match, 0 diff**. Remaining visual follow-ups are in `TODO.md`.
|
||||
- Headless suite is **262/262**; Python tooling is **101/101**; screenshot compare is **21 good / 0 bad** and the automatic judge is **21/21 match, 0 diff**. Remaining visual follow-ups are in `TODO.md`.
|
||||
- Typed spawn signal extra args: handlers must accept the 4th `event: Dictionary` or Godot will not call them (`test_shift_coordinator_runs_a_shift` failed until `_on_spawn` took four args).
|
||||
- GDScript inference trap that broke the main scene: a `var` typed as a base class
|
||||
(`radial: CanvasLayer`) exposes script members as `Variant`, so `var x := radial.is_open` is a
|
||||
|
||||
Reference in new issue
Block a user