5 个版本 (3 个重大更新)
0.6.0 | 2023 年 12 月 9 日 |
---|---|
0.5.0 | 2022 年 6 月 12 日 |
0.4.0 | 2022 年 4 月 15 日 |
0.2.1 | 2021 年 1 月 25 日 |
0.2.0 | 2021 年 1 月 23 日 |
#1092 在 解析器实现
每月 76 次下载
110KB
2.5K SLoC
smash-arc
一个用于处理《超级 Smash Bros. 最终决战》的 data.arc 文件的 Rust 库。在桌面构建时,添加 --features=libzstd
。有关其他选项,请参阅 cargo.toml。
示例:cargo build --release --features=libzstd
lib.rs
:
用于处理《超级 Smash Bros. 最终决战》的 data.arc 文件的库。
use smash_arc::{ArcFile, ArcLookup, FileNode, Hash40, Region};
// Load the hashes needed to list directories (file format restriction)
Hash40::set_global_labels_file("hash_labels.txt").unwrap();
// Parse the arc from a file
let arc = ArcFile::open("data.arc").unwrap();
// loop over every file in the root
for node in arc.get_dir_listing("/").unwrap() {
match node {
FileNode::Dir(dir) => {
// print out name of directory
println!("directory: {}", dir.global_label().unwrap());
}
FileNode::File(file) => {
// extract file
let path = file.global_label().unwrap();
std::fs::write(path, arc.get_file_contents(file, Region::UsEnglish).unwrap()).unwrap();
}
}
}
Cargo 功能
-
network
(默认启用) = 能够通过网络解析文件 -
dir-listing
(默认启用) = 列出目录 -
global-hashes
(默认启用) = 启用全局表以破解哈希值 -
smash-runtime
= 在《超级 Smash Bros. 最终决战》本身的环境中启用功能(启用 Aarch64 crc32 硬件加速,启用从游戏的内存布局解析 Arc) -
search
= 启用模糊搜索ArcFile
的功能 -
ZSTD 后端
libzstd
- 推荐用于构建的平台rust-zstd
- 提高可移植性(推荐用于 Switch)nozstd
- 不提供 zstd 后端,ZSTD 解压缩时引发恐慌
依赖项
~1.7–3.5MB
~66K SLoC