Commit graph

2 commits

Author SHA1 Message Date
Kelsi
e652f8595d feat(editor): WSPK JSON round-trip closure
Adds --export-wspk-json / --import-wspk-json. spellIds serialize
as JSON int arrays preserving spellbook display order (top-to-
bottom in tab). All 3 presets (warrior/mage/rogue) byte-identical
binary roundtrip OK including Mage Frost tab [116, 122, 10] —
Frostbolt rank 1 still first, Frost Nova second, Blizzard third
after roundtrip.

Importer also restores className via implicit lookup from
classId on the export side, so a hand-edited JSON only needs
classId int — className field is informational.

CLI flag count 1335 -> 1337.
2026-05-10 03:39:52 -07:00
Kelsi
6d9d00fbb9 feat(pipeline): WSPK spell pack catalog (126th open format)
Novel replacement for the implicit per-class spellbook layout
that vanilla WoW derived from SkillLineAbility.dbc + the hard-
coded per-spec tab order baked into the client UI. Each WSPK
entry binds one (classId, tabIndex) pair to an ordered list of
spellIds shown in that spellbook tab.

Three presets seeded with canonical vanilla low-rank spellIds:
  --gen-spk-warrior  4 tabs (General + Arms/Fury/Protection)
                     including Charge, Mortal Strike,
                     Bloodthirst, Shield Block
  --gen-spk-mage     4 tabs (General + Arcane/Fire/Frost)
                     including Frostbolt rank 1 (spellId 116)
                     — the canonical "every mage starts here"
  --gen-spk-rogue    4 tabs (General + Assassination/Combat/
                     Subtlety) with poison + lethality picks

Validator catches: packId+tabName required, classId in 1..11,
tabIndex in 0..3, no duplicate packIds, no duplicate
(classId,tabIndex) pairs (spellbook UI dispatch tie), no zero
spellIds, no duplicate spellIds within any single tab (would
render twice in spellbook). Warns on classId 6 and 10 (vanilla
PlayerClass DBC gaps) and on empty tabs (player would see a
blank spellbook tab).

Format count 125 -> 126. CLI flag count 1328 -> 1335.
2026-05-10 03:37:36 -07:00