#assets #parser #index-file #game-assets #regnum #champions #mmorpg

regnumassets

一个用于解析MMORPG《Regnum》冠军游戏资产文件的crate。

1个不稳定版本

0.1.0 2024年1月20日

数据库接口 中排名 1817

MIT 许可证

34KB
741

一个用于解析MMORPG Regnum冠军 游戏资产文件的crate。

regnumassets on Crates.io Documentation License: MIT

目录

关于

本crate提供了一套工具,用于从您本地安装的Regnum冠军中的资产文件集中检索信息。

基本用法

Regnum冠军包含两种类型的资产文件:索引文件和数据库文件。这两种文件都位于游戏安装文件夹中,分别使用.idx.sdb扩展名。每个文件都包含一组资产文件,可能是声音、音乐、纹理等。对于每个索引文件都有一个对应的数据库文件。索引文件不包含资产,但提供有关从数据库文件检索特定资产的信息。

从资产文件检索数据的过程包括使用ResourceIndex解析索引文件以生成一系列书签,每个书签都指向数据库文件中的特定资产。书签可以稍后用于从数据库文件中检索资产数据。

以下示例说明了如何从相应的索引文件检索声音列表

use anyhow::Result;
use regnumassets::{AssetType, ResourceIndex};
use std::fs::File;

fn main() -> Result<()> {
    let f = File::open("data2.idx")?;
    let index = ResourceIndex::new(f).unwrap();

    let sounds = index.filter_by_type(AssetType::Sound);

    for sound in &sounds {
        println!(
            "Resource #{}: {}",
            sound.resource_id,
            sound.name.as_deref().unwrap_or("(unnamed)".into())
        );
    }

    Ok(())
}

ResourceIndex结构提供了API,用于通过资源ID或资产类型检索资产。调用这些方法将返回一个AssetBookmark实例。要从数据库文件获取数据,我们使用具有数据库文件句柄和&AssetBookmark构造函数的AssetData结构。

以下示例显示了如何通过其ID获取声音并将其内容保存到新文件中

use anyhow::Result;
use regnumassets::{AssetData, ResourceIndex};
use std::fs::File;
use std::io::Write;

fn main() -> Result<()> {
    let f = File::open("data2.idx")?;
    let index = ResourceIndex::new(f).unwrap();

    let sound = index.get_by_resource_id(50677).unwrap();

    let f = File::open("data2.sdb")?;
    let asset = AssetData::new(&f, &sound).unwrap();

    let filename = asset.filename.unwrap();
    println!("Writing file to {}", filename);

    let mut output = File::create(filename)?;
    output.write_all(asset.bytes.unwrap().as_ref())?;
    output.flush()?;

    Ok(())
}

许可证

在MIT许可证下发布。

免责声明

Regnum冠军是Nimble Giant Entertainment的注册商标。我与该公司及其员工没有任何关系。

依赖关系

~3.5MB
~120K SLoC