Crate wow_wmo

Crate wow_wmo 

Source
Expand description

§World of Warcraft WMO (World Map Object) Parser

This library provides comprehensive support for parsing, editing, validating, and converting World of Warcraft WMO files across all game expansions from Classic to The War Within.

§Features

  • Parsing: Read WMO root and group files with full chunk support
  • Validation: Verify file integrity and format compliance
  • Conversion: Convert between different WoW expansion formats
  • Editing: Modify WMO properties, geometry, and metadata
  • Export: Export to common 3D formats (OBJ/MTL)
  • Type Safety: Strongly typed structures for all WMO components

§Quick Start

use std::fs::File;
use std::io::BufReader;
use wow_wmo::{parse_wmo, ParsedWmo};

// Parse a WMO file
let file = File::open("example.wmo")?;
let mut reader = BufReader::new(file);
let wmo = parse_wmo(&mut reader)?;

// Access WMO data based on type
match &wmo {
    ParsedWmo::Root(root) => {
        println!("Root file - Version: {}", root.version);
        println!("Groups: {}", root.n_groups);
        println!("Materials: {}", root.n_materials);
    }
    ParsedWmo::Group(group) => {
        println!("Group file - Version: {}", group.version);
        println!("Vertices: {}", group.n_vertices);
        println!("Triangles: {}", group.n_triangles);
    }
}

§Example: Validating a WMO File

use std::fs::File;
use std::io::BufReader;
use wow_wmo::{WmoParser, WmoValidator};

// Parse the WMO
let file = File::open("building.wmo")?;
let mut reader = BufReader::new(file);
let wmo = WmoParser::new().parse_root(&mut reader)?;

// Validate it
let validator = WmoValidator::new();
let report = validator.validate_root(&wmo)?;

if !report.errors.is_empty() {
    println!("Validation errors found:");
    for error in &report.errors {
        println!("  - {:?}", error);
    }
}

if !report.warnings.is_empty() {
    println!("Validation warnings:");
    for warning in &report.warnings {
        println!("  - {:?}", warning);
    }
}

§Modules

  • chunk: Low-level chunk reading/writing functionality
  • parser: WMO root file parser
  • group_parser: WMO group file parser
  • types: Common data types (Vec3, Color, BoundingBox, etc.)
  • wmo_types: WMO root file structures
  • wmo_group_types: WMO group file structures
  • validator: File validation and integrity checking
  • converter: Version conversion between expansions
  • editor: High-level editing API
  • writer: Binary serialization
  • visualizer: 3D export functionality
  • version: Version detection and feature support
  • error: Error types and handling

§Supported Formats

This library supports WMO files from all World of Warcraft expansions:

  • Classic (1.12)
  • The Burning Crusade (2.4.3)
  • Wrath of the Lich King (3.3.5)
  • Cataclysm (4.3.4)
  • Mists of Pandaria (5.4.8)
  • Warlords of Draenor (6.2.4)
  • Legion (7.3.5)
  • Battle for Azeroth (8.3.7)
  • Shadowlands (9.2.7)
  • Dragonflight (10.2.0)
  • The War Within (11.0+)

Re-exports§

pub use converter::WmoConverter;
pub use editor::WmoEditor;
pub use error::Result;
pub use error::WmoError;
pub use group_parser::WmoGroupParser;
pub use parser::WmoParser;
pub use types::BoundingBox;
pub use types::Color;
pub use types::Vec3;
pub use validator::ValidationError;
pub use validator::ValidationReport;
pub use validator::ValidationWarning;
pub use validator::WmoValidator;
pub use version::WmoFeature;
pub use version::WmoVersion;
pub use visualizer::WmoVisualizer;
pub use wmo_types::WmoConvexVolumePlane;
pub use wmo_types::WmoConvexVolumePlanes;
pub use wmo_types::WmoDoodadDef;
pub use wmo_types::WmoDoodadSet;
pub use wmo_types::WmoFlags;
pub use wmo_types::WmoGroupInfo;
pub use wmo_types::WmoHeader;
pub use wmo_types::WmoLight;
pub use wmo_types::WmoLightProperties;
pub use wmo_types::WmoLightType;
pub use wmo_types::WmoMaterial;
pub use wmo_types::WmoMaterialFlags;
pub use wmo_types::WmoPortal;
pub use wmo_types::WmoPortalReference;
pub use wmo_types::WmoRoot;
pub use wmo_group_types::TexCoord;
pub use wmo_group_types::WmoBatch;
pub use wmo_group_types::WmoBspNode;
pub use wmo_group_types::WmoGroup;
pub use wmo_group_types::WmoGroupFlags;
pub use wmo_group_types::WmoGroupHeader;
pub use wmo_group_types::WmoLiquid;
pub use wmo_group_types::WmoLiquidVertex;
pub use wmo_group_types::WmoMaterialInfo;
pub use wmo_group_types::WmoPlane;
pub use writer::WmoWriter;
pub use portal::AABB;
pub use portal::Axis;
pub use portal::ConvexHull;
pub use portal::GroupLocationData;
pub use portal::GroupPortalInfo;
pub use portal::Plane;
pub use portal::Portal;
pub use portal::PortalCuller;
pub use portal::PortalRef;
pub use portal::VisibilityResult;
pub use portal::WmoGroupLocator;
pub use bsp::BspAxisType;
pub use bsp::BspNodeExt;
pub use bsp::BspTree;
pub use bsp::point_in_group;
pub use chunk::Chunk;
pub use chunk_header::ChunkHeader;
pub use chunk_id::ChunkId;
pub use api::ParseResult;
pub use api::ParsedWmo;
pub use api::discover_wmo_chunks;
pub use api::parse_wmo;
pub use api::parse_wmo_with_metadata;

Modules§

api
bsp
BSP tree point query for WMO groups
chunk
chunk_discovery
chunk_header
chunk_id
chunks
converter
editor
High-level WMO editing API
error
file_type
group_parser
parser
portal
Portal-based visibility culling for WMO interiors
root_parser
types
validator
version
version_detection
visualizer
WMO visualization and 3D export functionality
wmo_group_types
wmo_types
writer