feat(editor): add --validate-wow weather schedule audit

Mirrors --validate-wol but for the .wow weather format. Walks
every entry and reports structural problems:

  • unknown weather typeId (above the Blizzard sentinel)
  • intensity bounds outside [0, 1] or min > max
  • non-positive weight (would zero a row in weighted-random
    selection and warp probabilities)
  • zero or inverted duration bounds
  • non-finite floats

Returns exit code 0 on PASS / 1 on FAIL — CI-friendly. JSON
output via --json for tooling.

All four built-in presets (--gen-weather-temperate / arctic /
desert / stormy) validate clean. The WOW format now has
parity with WOL on the inspect/validate front:

   WOL: --info-wol / --info-wol-at / --validate-wol
   WOW: --info-wow / --validate-wow

Milestone: kArgRequired now at 440 documented flags.
This commit is contained in:
Kelsi 2026-05-09 14:13:30 -07:00
parent 0a7c6c096d
commit bf8d37c145
3 changed files with 77 additions and 1 deletions

View file

@ -795,6 +795,8 @@ void printUsage(const char* argv0) {
std::printf(" Emit a single-keyframe .wol with moonlit directional + far fog (always-night zone / shadow realm)\n");
std::printf(" --info-wow <wow-base> [--json]\n");
std::printf(" Print WOW weather entries (zone + per-state type / intensity / weight / duration) and exit\n");
std::printf(" --validate-wow <wow-base> [--json]\n");
std::printf(" Walk every WOW entry; check typeId / intensity bounds [0,1] / weight > 0 / duration min ≤ max\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");