fix(spells): load complete retail DAT catalog

Replace the incomplete 3,956-row production CSV with one immutable projection of all 6,266 records in portal.dat. Preserve retail formula targeting, shared Spellbook/MagicRuntime metadata ownership, and fail startup when the required SpellTable is absent.

Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
Erik 2026-07-15 21:17:13 +02:00
parent 09612f9981
commit 0eab7497c1
19 changed files with 633 additions and 114 deletions

View file

@ -659,6 +659,10 @@ server-authoritative `CM_Magic::Event_RemoveSpell (0x01A8)` response path.
The component-book follow-up now instantiates retail's category and component
listbox templates from LayoutDesc `0x21000033`, preserving localized headings,
row/selection textures, icon/name/count columns, and desired-value editing.
The spell metadata source is now the complete installed end-of-retail
SpellTable DID `0x0E00000E` (6,266 records). The former 3,956-row CSV is kept
only as a research fixture, so every spell ACE can teach resolves through the
same DAT-backed catalog used by formulas, casting, spellbook rows, and effects.
**Phases to ship:**
- **F.4** — Spell cast state machine (buffs + recalls first, projectile