feat(editor): add WGEM JSON round-trip authoring workflow

Closes the WGEM open-format loop with --export-wgem-json /
--import-wgem-json, mirroring the JSON pairs added for
every other novel binary format. All 29 binary formats
added since WOL now have full JSON round-trip authoring.

Two top-level arrays mirror the binary layout:
  • gems[]         — gemId / itemIdToInsert / name / color
                      (dual int + name) / statType+Value /
                      requiredItemQuality / spellId
  • enchantments[] — enchantId / name / description / icon /
                      enchantSlot (dual int + name) /
                      statType+Value / spellId / duration /
                      chargeCount

Verified byte-identical round-trip on the enchants preset
(5 enchantments including 3 proc-based with WSPL spellId
cross-refs in the 28000-29000 placeholder range, plus
ring/cloak slot variants with chargeCount preserved).

Adds 2 flags (651 documented total now).
This commit is contained in:
Kelsi 2026-05-09 18:12:33 -07:00
parent 80ebf1dba5
commit d14f820a14
3 changed files with 179 additions and 0 deletions

View file

@ -1203,6 +1203,10 @@ void printUsage(const char* argv0) {
std::printf(" Print WGEM gems (id / color / stat / item) + enchantments (id / slot / stat / duration / charges)\n");
std::printf(" --validate-wgem <wgem-base> [--json]\n");
std::printf(" Static checks: ids>0+unique, name not empty, color/slot in range, stat-only entries need non-zero value\n");
std::printf(" --export-wgem-json <wgem-base> [out.json]\n");
std::printf(" Export binary .wgem to a human-editable JSON sidecar (defaults to <base>.wgem.json)\n");
std::printf(" --import-wgem-json <json-path> [out-base]\n");
std::printf(" Import a .wgem.json sidecar back into binary .wgem (accepts color/slot int OR name strings)\n");
std::printf(" --gen-guilds <wgld-base> [name]\n");
std::printf(" Emit .wgld starter: 1 guild (Sentinels of Dawn) with default 5-rank ladder + 3 members\n");
std::printf(" --gen-guilds-full <wgld-base> [name]\n");