docs(D.5.2): implementation plan (9 TDD tasks) + spec wiring fix

Bite-sized TDD plan for the stateful item-icon system. Corrects spec 5.8:
the live 0x02CE event binds in GameWindow (next to VitalUpdated), not
GameEventWiring (which only handles the 0xF7B0 GameEvent dispatcher).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-17 18:19:26 +02:00
parent 419c3ac40c
commit 52306d9268
2 changed files with 981 additions and 3 deletions

View file

@ -87,6 +87,9 @@ PublicUpdatePropertyInt(0x02CE) ──────────┤
The re-composition contract (`ItemPropertiesUpdated` → widget re-resolve via the
toolbar's `Populate`) already exists; D.5.2 feeds it the effect state from two sources.
The live `0x02CE` event is bound in `GameWindow`'s session-event binding (next to the
existing `VitalUpdated` subscription) — NOT `GameEventWiring`, which only handles the
`0xF7B0` GameEvent sub-opcode dispatcher.
## 5. Components
@ -166,9 +169,11 @@ Each component below states **what it does / how it's used / what it depends on.
`OnLiveEntitySpawned` pass `spawn.UiEffects`.
- **Depends on:** §5.1, §5.6.
### 5.8 `GameEventWiring` (`AcDream.Core.Net/GameEventWiring.cs`)
- **What:** subscribe to `WorldSession.ObjectIntPropertyUpdated`; route
`property == 18 (UiEffects)` to `items.UpdateIntProperty(guid, 18, value)`.
### 5.8 `GameWindow` session-event binding (`AcDream.App/Rendering/GameWindow.cs`)
- **What:** subscribe to `WorldSession.ObjectIntPropertyUpdated` (alongside the existing
`VitalUpdated` subscription, ~line 2630); route `Property == 18 (UiEffects)` to
`Items.UpdateIntProperty(guid, 18, value)`. (Top-level session events bind here, not in
`GameEventWiring` — that class only handles the `0xF7B0` GameEvent dispatcher.)
- **Depends on:** §5.3, §5.5.
## 6. Divergence-register changes