Commit graph

2 commits

Author SHA1 Message Date
Kelsi
a4ac12dbeb feat(editor): WQGR JSON round-trip closure
Adds --export-wqgr-json / --import-wqgr-json with the established
readEnumField template factoring int+name dual encoding for both
questType ("normal"/"daily"/"repeatable"/"group"/"raid") and
factionAccess ("both"/"alliance"/"horde"/"neutral"). Variable-
length prereq + followup quest arrays serialize as JSON int
arrays.

All 3 presets (starter/branched/dailies) byte-identical binary
roundtrip OK including the branched preset's converging DAG
(Q200 -> {Q201, Q202} -> Q203 with Q203 carrying [201, 202] in
its prevQuestIds).

Live-tested DFS cycle detection: hand-mutated Northshire chain
head Q100 to depend on Q104 (the chain's last quest), creating
a 5-node loop. Validator correctly errored: "prereq cycle
detected: 100 -> 104 -> 103 -> 102 -> 101 -> 100 — quests would
be unreachable (progression deadlock)" with the full back-edge
path extracted exactly as WMOD does for addon dep cycles.

CLI flag count 1389 -> 1391.
2026-05-10 04:24:49 -07:00
Kelsi
76cda20297 feat(pipeline): WQGR quest graph catalog (132nd open format)
Novel representation of quest-chain dependencies that vanilla
WoW carried implicitly in QuestRelations.dbc (the prequest
column) + per-quest server scripts. Each WQGR entry binds one
quest to its display name, level/class/race gating,
prerequisite quest list (must be completed first), follow-up
quest hints (next-quest suggestions for the journal UI), and
quest type flags (Normal / Daily / Repeatable / Group / Raid).

Three presets:
  --gen-qgr-starter   5-quest linear chain (Northshire human-
                      starter Q100..Q104, levels 1..8) with
                      chainHeadHint=1 on Q100
  --gen-qgr-branched  4-quest converging DAG (Q200 unlocks
                      both Q201 + Q202, both required for Q203)
                      — demonstrates true DAG semantics, not
                      just linear lists
  --gen-qgr-dailies   3 standalone daily quests (Daily type,
                      no prereqs, no followups)

Validator catches: id+name required, questType 0..4,
factionAccess 0..3, maxLevel >= minLevel, no self-prereq
(catch-22), no missing prereq questId, full DFS cycle detection
on prevQuestIds (progression deadlock — quests would be
unreachable). Reuses the proven cycle-extraction pattern from
WMOD addon manifest (extracts back-edge path so the editor sees
the loop). Warns on followup hint to self/missing-id (advisory
only — followups are hints not contracts) and on
chainHeadHint=1 with non-empty prereqs (contradicts chain-head
semantics).

Format count 131 -> 132. CLI flag count 1382 -> 1389.
2026-05-10 04:22:13 -07:00