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 个直接) 中使用
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