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

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

Three top-level arrays mirror the binary layout:
  • classes[] — id / name / icon / powerType (dual int +
                name) / displayPower / baseHP+power scaling /
                factionAvailability bitmask
  • races[]   — id / name / icon / factionId (dual int +
                name) / male+female displayId / 5 base
                stats / starting map+zone / language+mount
                spell IDs
  • outfits[] — classId+raceId+gender (dual int + name) +
                items array (each: itemId + displaySlot)

Verified byte-identical round-trip on the starter preset
(2 classes / 2 races / 4 outfits with full WIT itemId
cross-references preserved through the JSON layer).

Adds 2 flags (594 documented total now).
This commit is contained in:
Kelsi 2026-05-09 16:55:31 -07:00
parent b632554b5b
commit 41156f4a95
3 changed files with 238 additions and 0 deletions

View file

@ -1089,6 +1089,10 @@ void printUsage(const char* argv0) {
std::printf(" Print WCHC classes (id / power / hp scaling) + races (faction / starting zone) + outfit item lists\n");
std::printf(" --validate-wchc <wchc-base> [--json]\n");
std::printf(" Static checks: class+race ids unique, baseHealth>0, faction availability set, outfit refs resolve\n");
std::printf(" --export-wchc-json <wchc-base> [out.json]\n");
std::printf(" Export binary .wchc to a human-editable JSON sidecar (defaults to <base>.wchc.json)\n");
std::printf(" --import-wchc-json <json-path> [out-base]\n");
std::printf(" Import a .wchc.json sidecar back into binary .wchc (accepts power/faction/gender int OR name forms)\n");
std::printf(" --gen-tokens <wtkn-base> [name]\n");
std::printf(" Emit .wtkn starter: 3 tokens (Honor / Marks / Stormwind Guard) covering Pvp + Reputation categories\n");
std::printf(" --gen-tokens-pvp <wtkn-base> [name]\n");