Adds a validator for .wom files mirroring --validate-wol /
--validate-wow. Catches malformed hand-built or import-
corrupted models before they reach the renderer (where bad
data usually crashes or renders blank with no diagnostic).
Hard errors (exit non-zero):
• version not in 1..3
• empty vertex / index list
• index count not a multiple of 3
• triangle indices referencing out-of-range vertices
• boneIndices referencing out-of-range bones
• parentBone referencing out-of-range bones
• inverted AABB (boundMin > boundMax on any axis)
• WOM3 batch.textureIndex out of range
• WOM3 batch range past end of index buffer
• animation has wrong number of bone tracks
Warnings (informational, exit zero):
• boneWeight slots not summing to 0 or 255
• triangles uncovered or double-covered by WOM3 batches
• boundRadius <= 0 (frustum-cull failure)
Adds 451st kArgRequired entry. Smoke test: 0/0/0 errors on
all generated procedural primitives. Both text and --json
output supported, mirroring the other validators.
Moves the WOM model inspection commands out of main.cpp:
--info (bare WOM summary)
--info-batches (per-batch material info)
--info-textures (texture path list)
--info-doodads (WOB doodad set / instance list)
--info-attachments ⎫ combined handler with same M2 load +
--info-particles ⎬ skin merge but different sub-array
--info-sequences ⎭ iteration
--info-bones (bone hierarchy)
--export-bones-dot (Graphviz DOT output)
main.cpp drops 20,005 → 19,446 lines (-559). Behavior verified
by running --info, --info-batches, --info-textures on a fresh
WOM. Build error during extraction (combined-or handler header
spanned 4 lines, the transform script only stripped the first;
also missing #include for WoweeBuildingLoader) caught by build
and fixed before commit.