fix(chargen): Campaign CC gate round 1 Batch G — real color wheel (DoColorSpots/DoGradDisk color rendering)
R2-5: retail's gmCGAppearancePage::DoColorSpots/SetSelection/DoGradDisk paint the nine color swatches and the gradient disc with a real, computed representative color (PalSet-averaged for Hair/Nose+Mouth+ Skin/Headgear/Shirt/Trousers/Footwear at fixed sample indices 0xd0/0xb0/0x520; direct-Palette for Eyes at 0x103), not the static authored art acdream showed before this batch. Ports the full palette-to-RGB pipeline: a new pure Core resolver (ChargenSwatchColorResolver + IChargenPaletteColorSource) backed by a new ChargenAppearanceCatalog.TryGetColor reading real Palette dat objects, pinned against the installed EoR dat. CharacterCreationAppearancePage recomputes all nine swatches + the gradient disc's tint on every refresh (part/color/heritage change) and paints them through a new ChargenSwatchColorTile overlay child — a flat-color-fill approximation of retail's actual recolored-sprite blit, since neither UiButton (sealed) nor UiDatElement exposes a per-instance sprite tint today. Two STOPPED items remain outside this batch's file contract before the mechanism is visually live: (1) wiring PalSetSource/ClothingTableSource/ PaletteColorSource from CharacterCreationUiController.cs (mirrors the existing PreviewControl seam); (2) a small additive Tint property on UiButton/UiDatElement for a byte-true recolor instead of the flat fill. Also ports Nose/Mouth/Skin's single non-interactive representative swatch, beyond AP-216/AP-217's original six-part scope. Register AP-216/AP-217 rewritten (not retired — the two STOPPED items keep them open). Tests: 11 new Core, 6 new Content live-DAT, 8 new App-layer fixture. App suite 5321/3 -> 5329/3, Runtime 1735/0 unchanged, zero regressions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
2ad805469d
commit
834c2547a9
10 changed files with 1558 additions and 29 deletions
|
|
@ -37,7 +37,42 @@ acdream GradCircle vs retail's color wheel).
|
|||
disc) where retail shows the gradient wheel + gold swatch dots that
|
||||
CHANGE per selected part — the user's gate PROMOTES AP-216/AP-217's
|
||||
remaining halves (real palette-color swatch rendering + gradient tint)
|
||||
from partial-closed to must-port.
|
||||
from partial-closed to must-port. **CODE-COMPLETE at Batch G (2026-08-16),
|
||||
register AP-216/AP-217 rewritten (not retired — see their own rows):**
|
||||
the retail mechanism (`gmCGAppearancePage::DoColorSpots @0x0047d850` /
|
||||
`SetSelection @0x0047e260` / `DoGradDisk @0x0047da90`) is fully re-derived
|
||||
and ported — a new pure Core resolver
|
||||
(`AcDream.Core.CharGen.ChargenSwatchColorResolver`) computes each of the
|
||||
nine swatches' representative RGB (PalSet-averaged for Hair/Nose+Mouth+
|
||||
Skin/Headgear/Shirt/Trousers/Footwear at retail's own fixed sample
|
||||
indices `0xd0`/`0xb0`/`0x520`, direct-Palette for Eyes at `0x103`) backed
|
||||
by a new `ChargenAppearanceCatalog.TryGetColor` reading real Palette dat
|
||||
objects, pinned against the installed EoR dat
|
||||
(`ChargenAppearanceCatalogColorTests` — e.g. Aluvian male's shared skin
|
||||
PalSet measures a plausible flesh-tone RGB(182,148,118)).
|
||||
`CharacterCreationAppearancePage` recomputes all nine swatches + the
|
||||
gradient disc's tint on every refresh (part change / color change /
|
||||
heritage change, `CharacterCreationAppearancePageSwatchColorTests`), and
|
||||
paints them through a new `ChargenSwatchColorTile` overlay element.
|
||||
**Two STOPPED items block this from being visually live**, both outside
|
||||
Batch G's file contract: (1) the new `PalSetSource`/`ClothingTableSource`/
|
||||
`PaletteColorSource` late-bound seams (mirroring the existing
|
||||
`PreviewControl` pattern) are never assigned by the composition root
|
||||
(`CharacterCreationUiController.cs`) — until wired, the mechanism stays
|
||||
fully inert, matching PRE-Batch-G behavior exactly; (2) the rendering
|
||||
primitive is a flat-color-fill approximation of retail's actual
|
||||
recolored-sprite blit — neither `UiButton` (sealed) nor `UiDatElement`
|
||||
exposes a per-instance sprite `Tint`, though the retained-UI sprite
|
||||
pipeline's `DrawSprite` already carries the `Vector4 tint` multiply
|
||||
retail's own `Blit_Multiply` needs; adding that property is a small,
|
||||
precisely-specified addition to those two shared widget files for the
|
||||
lead to sequence. Nose/Mouth/Skin (retail's own non-interactive single
|
||||
representative swatch, `SetSelection`'s hard-coded `var_1e0 = 1`) is ALSO
|
||||
ported, beyond AP-216/AP-217's original six-part scope. Tests: 11 new
|
||||
Core (`ChargenSwatchColorResolverTests`), 6 new Content live-DAT
|
||||
(`ChargenAppearanceCatalogColorTests`), 8 new App-layer fixture
|
||||
(`CharacterCreationAppearancePageSwatchColorTests`) — App suite
|
||||
5321/3 -> 5329/3, Runtime 1735/0 unchanged, zero regressions.
|
||||
- **R2-6: Town description text misaligned** — R2-1 family.
|
||||
- **R2-7: Summary — (a) text misaligned (R2-1); (b) the summary OVERVIEW
|
||||
listbox is missing its scrollbar; (c) the how-to box's scrollbar
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue