Two visible wins that prove today's wire-layer work is actually doing
something:
1. Chat panel (bottom-left): live tail of the last 10 ChatLog entries.
Color-coded by kind — Tell cyan, Channel green, System yellow, Popup
red, local/ranged white. Bound to WorldSession via the existing
GameEventWiring path (H.1) so server ChannelBroadcast / Tell /
TransientString / Popup + HearSpeech all render live. Includes a
synthetic \"connecting / connected\" system message so the panel
isn't blank before anyone talks.
2. Event panel (bottom-right): last 8 combat events from CombatState
(E.4). Damage taken (red), damage dealt (yellow), evaded-incoming
(green), missed-outgoing (grey). Each entry fades out over 5s.
DebugOverlay.BindCombat wires the listeners.
3. Silk.NET.OpenAL.Soft.Native 1.23.1 added. Before this, OpenAL
managed bindings loaded but the native runtime was absent so
IsAvailable returned false and audio was silently disabled. Now
soft_oal.dll ships to runtimes/win-x64/native/ and the engine
reports \"OpenAL engine ready (16 voices, 3D positional)\" on
launch. Footsteps + other motion-hook sounds now audible.
GameWindow: after constructing DebugOverlay, assign .Chat + .Combat
and call BindCombat to hook the event stream.
Build green, 628 tests still pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>