- Bump client protocol version 20 → 21 to match server (#822)
- Fix render_priority parameter name (was _render_priority, unused prefix)
- Fix debug console type inference (var sub := → var sub: String =)
- Economics panel: add population row, improve key hint text
- Stance indicator: hide on gameplay_occluded (D-170 fullscreen apps)
- Remove 5 broken clothing items from manifest and delete their GLBs
(boots_work, coveralls_basic, jacket_utility, pants_cargo, shirt_henley)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Startup crash — preload loop referenced STANCE_ICONS but the constant
was accidentally dropped when rewriting the icon cache logic.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Preload stance icons at _ready() into cache Dictionary
- Null-guard shader + theme loads with push_error() + early return
- Guard _icon_mat.set_shader_parameter inside if _icon_mat:
- Icon size 18→20px per D-086, container height 44→46px to fit
- Add _apply_stance test coverage (known + unknown stance)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace text-only stance labels with SVG icons + tint shader per D-086.
Alpha-mask shader swaps color at runtime via ShaderMaterial parameter.
Icons: walk, crouch, careful, sprint at 18px inside ImplantPanel row.
Also fix stale UILayer/HUD test path in test_ui_framework_sprint15.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- HUD: programmatically builds ImplantPanel with health/mode/time rows,
replaces raw MarginContainer/VBoxContainer/Labels
- Stance indicator: ImplantPanel with color-coded ImplantDataRow,
replaces custom _draw() with hardcoded bg/text
- Interaction prompt: applies implant theme StyleBox + colors to
existing PanelContainer layout
Minimap left as-is — its circular frame is a distinct diegetic element,
not rectangular panel chrome.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>