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 functionalityparser: WMO root file parsergroup_parser: WMO group file parsertypes: Common data types (Vec3, Color, BoundingBox, etc.)wmo_types: WMO root file structureswmo_group_types: WMO group file structuresvalidator: File validation and integrity checkingconverter: Version conversion between expansionseditor: High-level editing APIwriter: Binary serializationvisualizer: 3D export functionalityversion: Version detection and feature supporterror: 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