#reverse-engineering #halo #game-hacking #halo-infinite

infinite-rs

Halo Infinite的简单快速反序列化库

1个不稳定版本

0.1.0 2024年8月26日

#3 in #halo

Unlicense OR MIT

695KB
9K SLoC

C++ 8K SLoC // 0.2% comments Rust 1.5K SLoC // 0.0% comments Shell 16 SLoC Batch 3 SLoC

infinite-rs

Halo Infinite的简单快速反序列化库。

提供加载模块文件、读取和解压缩其中标签的工具。将内置类型转换为rust原生结构,为Halo Infinite模组项目架起桥梁。

此crate目前处于早期开发阶段。请通过Github issues告诉我您在使用此项目时遇到的问题。

Crates.io

文档

  • 此项目的文档可在docs.rs找到。

使用/示例

use infinite_rs::ModuleFile

fn load_modules() -> std::io::Result<()> {
    // Create new instance of a Module file.
    // These are the main archive files used in Halo Infinite.
    let mut module = ModuleFile::new();
    // Reads to the module file given a file path.
    module.read("path/to/.module/file");

    // The tag file is made up of a header and other structures.
    // This is an "asset" stored in the module.
    // Reads file at index 0 of the module.
    println!("{:#?}", module.files[0]);
    /*
    ModuleFileEntry {
        resource_count: 0,
        parent_index: 7,
        unknown: 788,
        block_count: 2,
        block_index: 7,
        resource_index: 0,
        tag_group: "LigS",
        ...
    */

    // Read tag at index 0 into "tag info".
    module.read_tag(0)
    println!("{:#?}", module.files[0].tag_info);
    /*
    TagFile {
        header: TagHeader {
            magic: "ucsh",
            version: 27,
            root_struct_guid: -8339828558656697538,
            checksum: 7960564650044378456,
            ...
    */

    Ok(())
}

依赖项

~0.6–8.5MB
~64K SLoC