fix(ui): match retail item appraisal semantics

Preserve PublicWeenieDesc hook identity from CreateObject through the item model so hook appraisals suppress sentinel capacities exactly. Use appraisal-only Value and Burden presence, retain AddItemInfo paragraph and authored font-color selection, and port retail lock, page, enchantment, and spell-block formatting.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-23 18:04:19 +02:00
parent bc47bc4917
commit d3c5e06fdd
21 changed files with 982 additions and 145 deletions

View file

@ -64,6 +64,15 @@ public sealed class UiText : UiElement, IUiDatStateful
/// </summary>
public Vector4 DefaultColor { get; set; } = Vector4.One;
/// <summary>
/// Authored <c>UIElement_Text</c> font-color list from LayoutDesc property
/// <c>0x1B</c>. Retail <c>AppendTextWithFont @ 0x00469D70</c> selects an
/// entry by index for every appended fragment. Controllers that port that
/// API use this palette instead of hard-coded colors.
/// </summary>
public IReadOnlyList<Vector4> FontColorPalette { get; set; }
= Array.Empty<Vector4>();
/// <summary>Backing fill behind the text. Defaults to transparent so an unbound
/// UiText (no controller) draws nothing. Set to the retail translucent value by
/// the controller (e.g. <c>ChatWindowController</c>).</summary>