Lands Batch G's two STOPPED items, making the real palette-color swatch
wheel visually live instead of inert:
- UiButton and UiDatElement gain a per-instance Tint property threaded
into every existing DrawSprite call (defaults to Vector4.One, so every
pre-existing button/element is byte-identical unless a caller sets a
non-identity tint).
- CharacterCreationAppearancePage now sets Tint directly on each color
swatch button and the GradCircle element, replacing the Batch G
flat-fill ChargenSwatchColorTile overlay outright — an opaque
rectangle drawn on top can never reproduce retail's actual
SurfaceWindow::BlitAndColor(..., Blit_Multiply, color) multiply blend,
only a genuine per-instance sprite tint can, so the overlay approach is
deleted rather than layered under the new mechanism.
- CharacterCreationUiController and RetailUiRuntime grow pass-through
properties (AppearancePalSetSource/AppearanceClothingTableSource/
AppearancePaletteColorSource) mirroring the existing PreviewControl
seam, so LivePresentationComposition can wire a DAT-backed
ChargenAppearanceCatalog into the Appearance page (wiring itself lands
with the Group 3 commit, since it shares a file with an unrelated F16
fix).
Register: AP-216/AP-217 RETIRED (161 -> now further reduced in later
commits) — both rows' remaining gaps are closed, not merely narrowed.
CharacterCreationAppearancePageSwatchColorTests updated for the new
Tint-based assertions (two pre-existing assertions were carried over
incorrectly from the old overlay-visibility model and are corrected).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>