#warcraft #mpq #blizzard #archive-format #read-write #mopaq

ceres-mpq

Blizzard 的私有 MoPaQ (MPQ) 归档读取器和写入器的纯 Rust 实现

10 个版本

0.1.9 2020年3月6日
0.1.8 2020年2月20日
0.1.6 2019年12月27日
0.1.5 2019年9月13日
0.1.4 2019年8月29日

#2487解析器实现


3 个crate(2 个直接) 中使用

MIT 许可证

55KB
1K SLoC

关于

ceres-mpq 是一个纯 Rust 实现的 Blizzard 的私有 MoPaQ (MPQ) 归档读取器和写入器。

该库的预期用途是用于读取和写入 Warcraft III 地图文件,这些文件本身就是 MPQ 归档。由于 Warcraft III 只使用格式的第 1 版,因此没有努力支持其他游戏中 MPQ 文件中的新功能。

有关更多详细信息和支持/不支持的功能列表,请参阅顶级库的 文档

命令行

有一个用于读取、查看和写入 MPQ 文件的命令行实用程序,您可以在以下位置找到它: ceres-mpqtool


lib.rs:

一个用于读取和写入 Blizzard 的私有 MoPaQ 归档格式的库。

目前,ceres-mpq 只支持读取和写入第 1 版的 MoPaQ 归档,因为这是在野外仍在积极遇到且由 Warcraft III 自定义地图使用的唯一版本。

因此,没有努力支持新版本格式中的功能,尽管在需要时这可能在未来发生变化。

ceres-mpq 目前不提供编辑现有归档的支持,但将来可能会提供。

支持的功能

对于读取归档,并不支持所有 MPQ 功能。值得注意的是

  • IMA ADPCM 压缩不支持。这通常存在于 .wav 文件中。
  • Huffman 编码压缩不支持。这通常存在于 .wav 文件中。
  • PKWare DCL 压缩不支持。然而,我还没有看到任何使用它的 WC3 地图。
  • 单个单元文件不支持。
  • 校验和和文件属性不会检查或读取。

此外,对于写入归档

  • 您不能选择为 Creator 中添加的文件选择哪种压缩类型。默认使用 DEFLATE。

受保护的 MPQ

在 Warcraft III 中,遇到所谓的“受保护地图”并不罕见,这些地图使用各种混淆和破解手段,设计得如此之好,以至于它们可以通过 WC3 的内置 MPQ 实现读取,但会令其他实现失败。

ceres-mpq中不进行绕过这些“保护”的尝试。特别是,在尝试读取以某种方式破坏了MPQ存档结构的受保护MPQ时,ceres-mpq可能会失败。

如果您需要一个支持读取受保护地图的库,请参阅StormLib

示例

let buf: Vec<u8> = Vec::new();
let mut cursor = Cursor::new(buf);

// creating an archive
let mut creator = Creator::default();
creator.add_file("hello.txt", "hello world!",
    FileOptions {
        encrypt: false,
        compress: true,
        adjust_key: false
    }
);
creator.write(&mut cursor)?;

cursor.seek(SeekFrom::Start(0))?;

// reading an archive
let mut archive = Archive::open(&mut cursor)?;
let file = archive.read_file("hello.txt")?;

assert_eq!(file.as_slice(), b"hello world!");

依赖项

~4MB
~74K SLoC