From d81ea11a3104d2032fcef0d386189a3c0d1d7a18 Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 20 Jun 2026 22:58:11 +0200 Subject: [PATCH] =?UTF-8?q?docs(issues):=20#145=20=E2=80=94=20inventory=20?= =?UTF-8?q?panels=20occluded=20by=20full-window=20backdrop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit B-Grid sub-window mount works (paperdoll base 0x100001D4 has 25+ equip-slot children, attached), but the gmInventoryUI panels render blank: the importer maps ZOrder from ReadOrder only, so the full-window backdrop (0x100001D0, ReadOrder 4) paints over the panels (ReadOrder 1-3). Retail keeps it behind via ZLevel (backdrop 100 vs panels 0), which the importer ignores (vitals were all ZLevel 0). Fix scoped in the issue. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/ISSUES.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 035041d4..d86ee6b0 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -46,6 +46,25 @@ Copy this block when adding a new issue: --- +## #145 — Inventory window panels occluded by the full-window backdrop (importer ignores ZLevel) + +**Status:** OPEN +**Severity:** MEDIUM (blocks B-Grid visual acceptance — the gmInventoryUI nested panels render blank) +**Filed:** 2026-06-20 +**Component:** ui — LayoutImporter / DatWidgetFactory z-order + +**Description:** With `ACDREAM_RETAIL_UI=1`, F12 shows the `gmInventoryUI` (`0x21000023`) frame + title + the dark full-window backdrop sprite, but the three nested panels (paperdoll / backpack / 3D-items) render **blank**. The B-Grid sub-window mount IS attaching the panels' content — confirmed: the paperdoll base element `0x100001D4` (root of `0x21000024`) has 25+ equip-slot children — but the content is **occluded**. + +**Root cause / status:** `DatWidgetFactory.Create` maps `ZOrder ← ReadOrder` only (`~:81`). In `0x21000023` the full-window backdrop element `0x100001D0` has `ReadOrder=4` (drawn AFTER the panels at `ReadOrder 1/2/3`), so it paints OVER them. Retail keeps the backdrop behind via **`ZLevel`** (backdrop `ZLevel=100` vs panels `ZLevel=0`); the importer ignores `ZLevel` because every vitals element was `ZLevel=0`, so it never mattered until now. Fix: factory `ZOrder` should honor `ZLevel` (higher `ZLevel` = further back) with `ReadOrder` as the tiebreaker — e.g. `ZOrder = ReadOrder − ZLevel·K`. `ElementInfo` has no `ZLevel` field yet (add it + read in `ElementReader.ToInfo` + carry in `Merge`). **Regression risk:** touches z-order for every window — must verify chat (`0x21000006`) + toolbar (`0x21000016`) `ZLevel`s (vitals are all 0) and visually regression-test. + +**Files:** `src/AcDream.App/UI/Layout/DatWidgetFactory.cs` (`e.ZOrder = (int)info.ReadOrder`, ~:81); `src/AcDream.App/UI/Layout/ElementReader.cs` (`ElementInfo` — add `ZLevel`; `ToInfo`; `Merge`); `src/AcDream.App/UI/Layout/LayoutImporter.cs`. + +**Research:** `docs/superpowers/specs/2026-06-20-d2b-inventory-grid-mount-design.md` (B-Grid); dat dump of `0x21000023` (panels ReadOrder 1-3 / ZLevel 0; backdrop `0x100001D0` ReadOrder 4 / ZLevel 100). + +**Acceptance:** F12 shows the nested paperdoll/backpack/3D-items panels over the backdrop (backpack burden meter + slot borders visible); vitals/chat/toolbar unchanged; full suite green. + +--- + ## #142 — Windowed-building interiors read "like outdoors" (indoor lighting regime is per-frame, not per-stage) **Status:** OPEN