fix(ui): restore modern spell formula presentation

Resolve spell-examination component cells through their DAT icon DIDs, project scarab and prismatic-taper formulas when ACE disables component enforcement, and version authored window geometry so stale examination sizes reset once without losing user layout behavior.

Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-24 07:08:47 +02:00
parent 3e31b0ac70
commit d4ce64f56b
22 changed files with 307 additions and 41 deletions

View file

@ -87,6 +87,37 @@ favorite-component events use WCIDs, resolved through DualEnumIDMap
`0x27000002`. The magic-school focus map is retail enum category `0x28`, key
`0x10000001`.
ACE integration policy (IA-21): when player BoolProperty `68`
(`SpellComponentsRequired`) is false, casting already bypasses component
preflight. In that server mode acdream also projects
`InqScarabOnlyFormula` in Spell examination, so an inactive account-randomized
legacy recipe is not exposed. With enforcement enabled, the focus/infusion
branch above remains byte-for-byte retail.
### Spell-examination formula media and extent
Retail: `SpellExamineUI::ExamineSpell` `0x004B6210`,
`gmFloatyExaminationUI::UpdateFromPlayerModule` `0x004D4250`, and LayoutDesc
`0x2100006B`.
```text
for each SCID in GetAppropriateSpellFormula(spell):
component = SpellComponentTable[SCID]
texture = GetSpellComponentIcon(component.iconDID)
cell = AddItemFromTemplateList(0x1000032E)
cell.icon = texture
cell.missingOverlay = !ComponentTracker.ComponentIsOwned(component.WCID)
initial floaty extent = LayoutDesc root extent = 310 x 400 pixels
restore user position/size from player UI state
```
The component icon lookup consumes the component's icon DID, not its WCID.
acdream's retained-layout persistence carries an authored-geometry revision:
when a shipped LayoutDesc extent correction invalidates an older saved size,
only width/height reset once; position, visibility, and later user resizing
remain persistent like retail.
## Authoritative enchantment events
Retail dispatchers: