#sega #modding #prs #game #lz77 #encoding #compressing

ages-prs

PRS的压缩和解压缩,SEGA的LZ77编码

1个不稳定版本

0.1.0 2020年2月29日

#664压缩


用于 ages-ice-archive

MIT/Apache

22KB
421

ages-prs: Rust的PRS编/解码器

Build Status Crate API

用于压缩和解压缩PRS编码缓冲区的IO类型。

PRS是SEGA出版的多个游戏使用的LZ77编码。它主要用于压缩游戏资源,例如纹理和游戏数据,偶尔也用于网络游戏中应用协议的消息压缩。

API接口故意保持最小化。底层的LZ77实现未被暴露;目前,此crate使用libflate的LZ77编码器

当针对WebAssembly时,此crate应该可以直接使用,尽管尚未进行测试。

使用方法

在您的Cargo.toml中添加

[dependencies]
ages-prs = "0.1"

在您的代码中

use std::io::{self, Cursor, Read};
use ages_prs::LegacyPrsDecoder;

// unitxt_j.prs contains localized strings used in Phantasy Star Online's UI.
// PSO uses "legacy" variant PRS.

fn decompress_unitxt() -> io::Result<Vec<u8>> {
    let mut data = Vec::with_capacity(2048);
    let file = File::open("unitxt_js.prs")?;
    let mut decoder = LegacyPrsDecoder::new(file);

    decoder.read_to_end(&mut data)?;

    Ok(data)
}

支持的游戏

"Legacy"版本

  • 幻想之星在线(所有版本)
  • 索尼克大冒险
  • 索尼克大冒险2

"Modern"版本

  • 幻想之星宇宙
  • 幻想之星在线2

这些列表并不全面。SEGA从SEGA Saturn时代起就在许多游戏中使用了PRS,并且这些年来它已经经历了各种修改。

许可证

ages-prs是双许可,以与Rust公共生态系统兼容。

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

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

依赖项