#zelda #nintendo #gamedev #rstb #totk

no-std restbl

Rust 库,用于操作《塞尔达传说:王国之泪》的资源大小表

1 个不稳定版本

0.1.0 2023年6月6日

解析器实现 中排名 2320

每月下载量 35

GPL-3.0-or-later

44KB
939

restbl

一个简单的库,用于处理来自《塞尔达传说:王国之泪》的 RSTB/RESTBL(资源大小表)文件。功能

  • 快速、零分配解析器
  • 可选的 alloc 功能,支持可编辑的表,可以序列化为二进制或(使用 yaml 功能)YAML。
  • no_std 支持(可选 std 功能)
  • 可选的 Serde 支持(serde 功能)
  • aarch64-nintendo-switch-freestanding 支持(没有 std 功能)

示例用法

use restbl::bin::ResTblReader;

let bytes = std::fs::read("test/ResourceSizeTable.Product.110.rsizetable").unwrap();

// Setup the quick, zero-allocation reader
let reader = ResTblReader::new(bytes.as_slice()).unwrap();
// Lookup an RSTB value
assert_eq!(
    reader.get("Bake/Scene/MainField_G_26_43.bkres"),
    Some(31880)
);

#[cfg(feature = "alloc")]
{
    use restbl::ResourceSizeTable;
    // Parse RSTB into owned table
    let mut table = ResourceSizeTable::from_parser(&reader);
    // Set the size for a resource
    table.set("TexToGo/Etc_BaseCampWallWood_A_Alb.txtg", 777);
    // Check the size
    assert_eq!(
        table.get("TexToGo/Etc_BaseCampWallWood_A_Alb.txtg"),
        Some(777)
    );
    // Dump to YAML, if `yaml` feature enabled
    #[cfg(feature = "yaml")]
    {
        let json_table = table.to_text();
        // From YAML back to RSTB
        let new_table = ResourceSizeTable::from_text(&json_table).unwrap();
    }
}

为 Switch 编译

要为 Switch 编译,您需要使用 aarch64-nintendo-switch-freestanding 目标。不支持 std 功能,因此您需要使用 --no-default-features。由于 cargo nx 似乎不支持传递功能标志,您需要自行运行完整命令,如下所示

cargo build -Z build-std=core,compiler_builtins,alloc --target aarch64-nintendo-switch-freestanding --no-default-features

许可证

本软件根据 GNU 通用公共许可证第 3 版或更高版本许可。

许可证:GPL-3.0-or-later

依赖项

~1.3–1.8MB
~40K SLoC