feat(editor): add WBOS JSON round-trip (--export/--import-wbos-json)

Closes the editing loop on the boss-encounter catalog: dump a
.wbos to JSON, hand-edit phaseCount / enrageTimerMs / berserk
spell / recommended item level / required party size (e.g.
shorten Lich King's enrage from 15 to 12 minutes for a sweatier
server, raise Marrowgar's recommended ilvl from 232 to 245 for
a Heroic-equivalent variant, swap a 5-phase encounter to 6
phases for a custom server fight), re-import to a byte-identical
binary.

All fields are scalar uint32/uint16/uint8 so no dual encoding
needed — the JSON exporter emits each field directly. The
catalog is the highest fan-out so far among raid-content
catalogs, cross-referencing five other catalogs (WCRT for boss
creature, WMS for map, WCDF for difficulty routing, WSPL for
berserk spell, WACR back-references via achievement targetId).

Verified byte-identical round-trip on all three presets
(5man / raid / world). CLI flag count 1060 -> 1062.
This commit is contained in:
Kelsi 2026-05-09 23:47:19 -07:00
parent acaef78696
commit b16ee9886b
3 changed files with 125 additions and 0 deletions

View file

@ -2037,6 +2037,10 @@ void printUsage(const char* argv0) {
std::printf(" Print WBOS entries (id / boss creature / map / difficulty / phases / size / ilvl / soft-enrage minutes / berserk spell / name)\n");
std::printf(" --validate-wbos <wbos-base> [--json]\n");
std::printf(" Static checks: id+name+boss+map+phases+size required, no duplicate ids; warns on non-standard party size, berserkSpellId set without enrageTimerMs, enrage > 30 min\n");
std::printf(" --export-wbos-json <wbos-base> [out.json]\n");
std::printf(" Export binary .wbos to a human-editable JSON sidecar (defaults to <base>.wbos.json)\n");
std::printf(" --import-wbos-json <json-path> [out-base]\n");
std::printf(" Import a .wbos.json sidecar back into binary .wbos (all per-entry fields preserved verbatim)\n");
std::printf(" --gen-weather-temperate <wow-base> [zoneName]\n");
std::printf(" Emit .wow weather schedule: clear-dominant + occasional rain + fog (forest / grassland)\n");
std::printf(" --gen-weather-arctic <wow-base> [zoneName]\n");