#sega #modding #archive-format #pso2

ages-ice-archive

用于打包和解包SEGA的ICE存档格式,该格式用于《幻想之星Online 2》

7个版本

0.3.2 2022年5月16日
0.3.1 2021年6月18日
0.2.1 2021年6月8日
0.2.0 2021年5月12日
0.1.0 2020年6月27日

压缩类别下排名471

每月下载量40

MIT/Apache

605KB
15K SLoC

C++ 13K SLoC // 0.0% comments Rust 1K SLoC // 0.1% comments Visual Studio Project 197 SLoC Visual Studio Solution 28 SLoC

ages-ice-archive: Rust的ICE存档库

CI Crate API

用于加载和写入ICE存档的类型。

ICE是SEGA的《幻想之星Online 2》使用的资产存储格式,其名称来源于其头部中的魔法前缀。

该crate在WebAssembly上应该可以即用即装。

您也可以通过运行cargo install来安装此crate,以获取从文件系统解包和打包ICE文件的CLI实用程序。这些是此包仓库中的示例,分别命名为agesdeiceagesice

使用方法

添加到您的Cargo.toml

[dependencies]
ages-ice-archive = "0.1"

在您的代码中

use std::fs::File;
use std::error::Error;

use ages_ice_archive::{Group, IceArchive};

fn main() -> Result<(), Box<dyn Error>> {
    let file = File::open("my.ice")?;
    let mut archive = IceArchive::new(file)?;

    archive.unpack_group(Group::Group1)?;
    println!("Files in Group 1:");
    for f in archive.iter_group(Group::Group1).unwrap() {
        if let Ok(name) = f.name() {
            println!("\t{} ({} bytes)", name, f.data().len());
        } else {
            println!("\t(non-ascii file name)");
        }
    }

    archive.unpack_group(Group::Group2)?;
    println!("Files in Group 2:");
    for f in archive.iter_group(Group::Group2).unwrap() {
        if let Ok(name) = f.name() {
            println!("\t{} ({} bytes)", name, f.data().len());
        } else {
            println!("\t(non-ascii file name) ({} bytes)", f.data().len());
        }
    }

    Ok(())
}

许可证

ages-ice-archive为与Rust公共生态系统兼容而提供双重许可。

ages-ice-archive根据MIT许可证和Apache许可证(版本2.0)的条款进行分发。

有关详细信息,请参阅LICENSE-APACHELICENSE-MIT

依赖项

~3.5MB
~71K SLoC