Re-plan the Blender tracks around the local skills and a 3D model review
This commit is contained in:
1 parent
84bc4137cb
commit
3e41cda591
5 files changed
+312
-110
No files matched your search
@@ -4,6 +4,14 @@ Session memory for durable decisions, state, and gotchas. Keep concise, remove o
|
||||
|
||||
## Decisions
|
||||
|
||||
- **3D model re-evaluation first (2026-11-03):** `TODO.md` is re-planned around a new unversioned
|
||||
`3D model re-evaluation` track, ahead of character and local-map work, because the crowd-variant
|
||||
roster would otherwise multiply whatever the existing models get wrong. It scores all 8
|
||||
characters, 18 gear, 20+6 props and the three venues in `docs/3d-model-review.md`, fixes ranked
|
||||
P0/P1 only, and must not change the `npc_base` contract, renderer or 0.10.0 candidate. The MIT
|
||||
Blender skill pack is now routed through `AGENTS.md` §Local Blender skills; skill advice loses
|
||||
to the project contract, and there is no Blender MCP here (headless flatpak scripts instead).
|
||||
MEMORY is ~960 lines with dated historical entries; trimming it is a tracked maintenance task.
|
||||
- **GLB intake inspection (`blender_assets.py inspect`, 2026-11-03):** runs inside Blender, clears
|
||||
parents and applies object transforms, then reports tris/budget, raw and seam-split verts,
|
||||
Godot-space bounds (height/feet for characters), bones, materials, UVs, skinning and
|
||||
@@ -356,11 +364,11 @@ Session memory for durable decisions, state, and gotchas. Keep concise, remove o
|
||||
**Mockup copies:** 21 design references live in `assets/images/ui/`; `docs/screens/designs/`
|
||||
remains the reference-only copy. `tools/screen_designs.py` reads/writes the runtime root.
|
||||
|
||||
## Handoff (read this first)
|
||||
## Handoff — historical snapshot (2026-11-01; superseded by Current State / Plan vs code)
|
||||
|
||||
- **Status (2026-11-01, after the venue-geometry pass):** v0.7.0 is released. Post-v0.6.0 the
|
||||
- **Status (2026-11-01, after the venue-geometry pass):** v0.7.0 was released at that point. Post-v0.6.0 the
|
||||
realism pass, the visual-alignment pass and the NPC face/hand pass all landed. Headless
|
||||
**229/229**, Python tooling **87/87**, `tools/check_screenshots.sh` **11 good / 0 bad**,
|
||||
**272/272**, Python tooling **108/108**, `tools/check_screenshots.sh` **21 good / 0 bad**,
|
||||
`screen_designs.py compare` 11 good / 0 bad, `scene_concepts.py audit` all GOOD,
|
||||
`blender_assets.py audit` exit 0, `smoke_npc_budget` OK (16 avatars, 6.94 ms of 50 ms).
|
||||
`PLAN.md` is compact; README/architecture track the current controls, asset pipeline, CI and
|
||||
@@ -914,13 +922,14 @@ Session memory for durable decisions, state, and gotchas. Keep concise, remove o
|
||||
- Shift length: `GameManager` uses the scenario's `shift_duration_s` (900s ≈ 10-15 min);
|
||||
tests and the screenshot tool override elapsed time directly.
|
||||
- Headless (dummy renderer) logs "Parameter m is null" from `mesh_get_surface_count`; it does not occur with a real GL driver and does not affect logic.
|
||||
- Steps are visual-only (no collider) so NPCs can path to the entrance; the guard spawns on the landing so it never needs to climb.
|
||||
- Steps have per-tread colliders (`_build_steps()` adds a `StaticBody3D` with one `BoxShape3D`
|
||||
per tread), so the guard and NPCs walk up the entrance; the guard spawns on the landing.
|
||||
- Persistence tests write into the real `user://shift_results.json` (harmless local pollution of the demo history).
|
||||
- macOS export required `rendering/textures/vram_compression/import_etc2_astc=true` in `project.godot` (universal build demands ETC2 ASTC enabled).
|
||||
- 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 **272/272**; 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`.
|
||||
- Headless suite is **272/272**; Python tooling is **108/108**; 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