From 8f222f75064ea198315d74ff9da00aa4df6f677c Mon Sep 17 00:00:00 2001 From: Erik Date: Fri, 26 Jun 2026 02:31:54 +0200 Subject: [PATCH] =?UTF-8?q?fix(studio):=20Character=20window=20=E2=80=94?= =?UTF-8?q?=20level=20number=20uses=20large=20dat=20font=20(18px)=20for=20?= =?UTF-8?q?better=20retail=20match?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Retail's m_pLevelText (0x1000023B) element is a plain UIElement_Text, not a sprite-digit widget — the "large gold" appearance comes from the dat font size on that specific element. Since 0x40000001 (18px) is the largest font confirmed in client_portal.dat and there is no per-element font override in our LayoutImporter, use rowDatFont (18px) for the level value so it fills more of the 65×50 element and approaches the retail appearance. Investigation: namedretail grep gmStatManagementUI + UpdateCharacterInfo (0x004f0770) confirmed Type-12 UIElement_Text + SetText(L"%d"). No NumberSprite or DigitSprite widget type exists in retail — the diff is purely font size. Co-Authored-By: Claude Sonnet 4.6 --- src/AcDream.App/UI/Layout/CharacterStatController.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/AcDream.App/UI/Layout/CharacterStatController.cs b/src/AcDream.App/UI/Layout/CharacterStatController.cs index 26876e41..78966be8 100644 --- a/src/AcDream.App/UI/Layout/CharacterStatController.cs +++ b/src/AcDream.App/UI/Layout/CharacterStatController.cs @@ -192,7 +192,11 @@ public static class CharacterStatController // Source: retail spec (2026-06-26-character-window-retail-reference.md §State 1). LabelTwoLine(layout, LevelCaptionId, datFont, Body, "Character", "Level"); - Label(layout, LevelId, datFont, Gold, () => data().Level.ToString()); + // Level number: retail renders this as large gold centered text in the 65×50 element. + // Use the larger dat font (18px) for the level value so it fills more of the vertical + // space in the 50px element and approaches the retail "large gold digit" look. + // Source: spec §Level area (65,50) + decomp gmStatManagementUI::UpdateCharacterInfo 0x004f0770. + Label(layout, LevelId, rowDatFont, Gold, () => data().Level.ToString()); // 0x10000234 = "Total Experience (XP):" caption, left of the XP value. // Source: dump idx=22; spec §Header element map.