fix(D.5.1): occupancy-gated slot numbers (empty=0x1000005e bg digit) + bottom-right rect probe
FIX 1: UIElement_UIItem::SetShortcutNum (decomp 229481) has a three-way source
branch: occupied+peace -> 0x10000042 (peace digit set), occupied+war -> 0x10000043
(war digit set), empty (ItemId==0) -> 0x1000005e (background digit, stance-independent).
acdream previously only had the peace/war pair and drew them regardless of occupancy.
Changes:
- GameWindow.cs: read property 0x1000005e into toolbarEmptyDigits (no fallback;
null is safe). Logs entry count. Passes emptyDigits to Bind. Adds [D.5.1 probe]
block logging screen pos + size of 7 bottom-right element ids via ScreenPosition.
- ToolbarController.cs: adds _emptyDigits field, emptyDigits ctor+Bind param (null
default). RestampShortcutNumbers sets cell.EmptyDigits. Comments cite decomp 229481.
- UiItemSlot.cs: adds EmptyDigits property + ActiveDigitArray() internal testable seam
(occupied -> peace/war by stance; empty -> EmptyDigits). OnDraw uses it. Comment
updated with three-way source table.
- Tests: 5 new UiItemSlotTests (ActiveDigitArray occupancy), 2 new
ToolbarControllerTests (emptyDigits injection + null-safe).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>