26个版本
0.3.2 | 2024年5月31日 |
---|---|
0.3.1 | 2024年5月28日 |
0.3.0 | 2023年7月9日 |
0.2.20 | 2023年5月22日 |
0.1.1 | 2022年7月27日 |
#105 in 游戏开发
209 每月下载
175KB
4.5K SLoC
什么是aoe2-probe?
这是一个用于编辑AoE2 DE的aoe2scenario文件的Rust库。
警告
- 由于zlib实现的不同,导出的文件不能与导入的文件完全相同,而文件内容是恒定的(别担心,AoE2 DE仍然理解它)。备份原始文件总是推荐的。
设计目标
- 完全访问aoe2scenario文件中每个字节的能力。
- 以可靠的正确性检查编辑每个比特。 todo!()
- 提供跨游戏版本一致的API兼容性。
入门指南
在目录 ./examples/ 下,您可以找到几个简单的示例。
导入和导出文件
use aoe2_probe::scenario::{Scenario, ExportFormat};
//Reading scenario content from the .aoe2scenario file
let scenario = Scenario::from_file("./resources/chapter_1.aoe2scenario").unwrap();
//saving content to a new .aoe2scenario file
scenario.to_file("./resources/temp.aoe2scenario", ExportFormat::AoE2Scenario);
//saving content to a new .json file
scenario.to_file("./resources/temp.json", ExportFormat::JSON);
更新属性
use aoe2_probe::scenario::Scenario;
//versio's structure definition can be found in the folder /src/prebuilt/ver1_46/versio.rs
let mut scenario = Scenario::from_file("./resources/chapter_1.aoe2scenario").unwrap();
let author = scenario.versio.get_by_path_mut("/file_header/creator_name");
//Update the creator name.
author.try_mut_str32().set_content("Arian");
自定义结构
//Define a score record
let mut root = PatchedMap::new();
root.push_back("score", Token::Int16(100));
root.push_back("name", Token::Str32(DynString::with_capacity(12, "anonymous")));
//serialize
root.to_le_vec();
//deserialize
root.from_le_vec();
序列化和反序列化到serde支持的所有格式
let scenario = Scenario::from_file("./resources/chapter_3.aoe2scenario").unwrap();
let json = serde_json::to_string( & scenario.versio).unwrap();
println!("{}", json);
使用以下命令运行示例
cargo run --example read_write
versio 的每个成员及其自身实现了 fmt::Debug 特性。如果您想了解更多,可以打印它们。
let scenario = Scenario::from_file("./resources/chapter_1.aoe2scenario").unwrap();
println!("{:?}", &scenario.versio())
更高级的示例可以在 misc-probe 中找到。详细信息可以在 文档 中找到。
支持
游戏版本 | 支持状态 |
---|---|
ver.1.46 | 支持 |
ver.1.47 | 支持 |
ver.1.48 | 支持 |
ver.1.49 | 支持 |
ver.1.51 | 实验性 |
ver.1.53 | 实验性 |
目前,仅支持1.46版及更高版本。
使用的库
- miniz_oxide:使用无安全代码的纯Rust miniz deflate/zlib 编码器/解码器的Rust替代品。
- serde:Serde是一个用于高效和泛型序列化和反序列化Rust数据结构的框架。
- serde_repr:此crate提供了一个derive宏,以将Serde的Serialize和Deserialize特性委派到底层repr的C-like枚举。
- linked-hash-map:一个HashMap包装器,它按插入顺序持有键值对。
- lazy-static:用于在Rust中声明延迟评估的静态的宏。
- log:一个轻量级的日志门面。
致谢
本库受AoE2ScenarioParser和Trigger Craft的启发。
依赖项
~1-2MB
~41K SLoC