fix(ui): match retail vitae and character info
Restore Vitae's omitted penalty paragraph, replace the invented character summary with gmCharacterInfoUI's ordered report and property meanings, preserve authored translucent body surfaces, and initialize the end-session button in its visible Normal DAT state. Release build and all 5,830 tests pass with five intentional skips. Connected visual gate pending. Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
parent
d1d603105f
commit
16c21e299c
21 changed files with 771 additions and 303 deletions
|
|
@ -23,10 +23,13 @@ Both Attributes + Skills tabs share a header strip filled by the base class
|
|||
`UpdatePKStatus` 0x004f00a0). The tab sub-layout `0x2100002C` nests `0x10000226` which
|
||||
chains again into `0x21000045` — the real header/list content is **two inheritance levels deep**.
|
||||
|
||||
The **text report** ("birth/age/deaths, innate attributes, augmentations, load") the earlier
|
||||
pilot guessed is a SEPARATE sub-panel: LayoutDesc `0x2100001A`, `gmCharacterInfoUI`
|
||||
(register 0x004b8c90), whose `m_pMainText` (`0x1000011d`) is created at RUNTIME. That window
|
||||
is handled by `CharacterController` (create-the-element path) — different layout, not 0x2100002E.
|
||||
The **text report** ("birth/playtime/deaths, resist grades, innate attributes,
|
||||
chess/fishing, earned augmentations, load") is a SEPARATE child panel:
|
||||
`gmCharacterInfoUI` (register `0x004b8c90`), root `0x10000183` under the
|
||||
production shared-panel LayoutDesc `0x2100006E`. Its authored
|
||||
`m_pMainText` (`0x1000011d`) and scrollbar are imported from that child tree;
|
||||
the controller only supplies the report. This is different from `0x2100002E`.
|
||||
See `2026-07-17-retail-vitae-character-info-pseudocode.md` for the exact report.
|
||||
|
||||
## Importer reality (dumped live, 2026-06-25)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue