Skip to content

A collection of Rust crates handling World of Warcraft file formats for WoW 1.x to 5.x.

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

wowemulation-dev/warcraft-rs

warcraft-rs

A comprehensive Rust library and CLI toolset for parsing, manipulating, and creating World of Warcraft file formats.

Discord License License CI Status codecov Crates.io Version docs.rs Awesome WoW Rust

Part of the awesome-wow-rust community.

WoW Version Support

Supports World of Warcraft versions 1.12.1 through 5.4.8:

Version Expansion Status
1.12.1 Vanilla ✅ Full Support
2.4.3 Burning Crusade ✅ Full Support
3.3.5a Wrath of the Lich King ✅ Full Support
4.3.4 Cataclysm ✅ Full Support
5.4.8 Mists of Pandaria ✅ Full Support

Supported File Formats

  • MPQ Archives - Game data archives with StormLib compatibility and parallel processing
  • DBC - Client database files containing game data
  • BLP Textures - Compressed texture format with DXT and palette support
  • M2 Models - Character, creature, and object 3D models
  • WMO Objects - World map objects (buildings, structures)
  • ADT Terrain - Terrain chunks with heightmaps and textures
  • WDT Maps - World definitions and tile layouts
  • WDL Maps - Low-resolution terrain heightmaps

Quick Start

Command-Line Usage

# Extract files from MPQ archives (uses parallel processing by default)
warcraft-rs mpq extract patch.mpq --output ./extracted

# Extract with custom thread count
warcraft-rs mpq extract patch.mpq --output ./extracted --threads 4

# Get information about any file format
warcraft-rs mpq info archive.mpq
warcraft-rs blp info texture.blp
warcraft-rs wdt info map.wdt

# Validate archive integrity (parallel by default)
warcraft-rs mpq validate archive.mpq --check-checksums

# Convert between formats and versions
warcraft-rs blp convert texture.blp texture.png
warcraft-rs wmo convert classic.wmo modern.wmo --to cataclysm

Library Usage

use wow_mpq::Archive;
use wow_blp::parser::load_blp;

// Read files from MPQ archives
let mut archive = Archive::open("patch.mpq")?;
let file_data = archive.read_file("Interface\\Icons\\spell.blp")?;

// List files in archive (from listfile)
let files = archive.list()?;
for entry in files {
    println!("{}: {} bytes", entry.name, entry.size);
}

// Parse BLP textures
let blp_image = load_blp("texture.blp")?;
println!("Texture: {}x{}", blp_image.header.width, blp_image.header.height);

Add to your Cargo.toml:

[dependencies]
wow-mpq = "0.2.0"
wow-blp = "0.2.0"
wow-adt = "0.2.0"
# ... other formats as needed

Installation

Install from crates.io

# Install the CLI tool
cargo install warcraft-rs

# Install specific crates as dependencies
cargo add wow-mpq wow-blp wow-adt

Build from source

git clone https://github.com/wowemulation-dev/warcraft-rs
cd warcraft-rs
cargo install --path .

Documentation

Contributing

See the Contributing Guide for development setup and guidelines.

Thanks to all contributors.

License

This project is dual-licensed under either:

You may choose to use either license at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


This project represents the collective knowledge of the WoW modding community and is based on reverse engineering efforts. Blizzard Entertainment has not officially documented any formats handled by this project.

About

A collection of Rust crates handling World of Warcraft file formats for WoW 1.x to 5.x.

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Code of conduct

Security policy

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Languages