mirror of
https://github.com/widberg/bff
synced 2026-08-23 14:26:03 -04:00
Byte perfect Ubisoft CPS
This commit is contained in:
parent
d155fd086c
commit
3ec55597d4
3 changed files with 10 additions and 12 deletions
|
|
@ -140,6 +140,9 @@ fn compress_and_encrypt<W: Write>(decompressed_data: &[u8], writer: &mut W) -> B
|
|||
let decompressed_size = u32::try_from(decompressed_data.len()).unwrap();
|
||||
|
||||
let mut compressed_data = Cursor::new(Vec::new());
|
||||
|
||||
// Won't match the original byte-for-byte
|
||||
// It uses a different version or config than everything else
|
||||
lzo_compress(decompressed_data, &mut compressed_data)?;
|
||||
|
||||
let mut payload_cursor = Cursor::new(compressed_data.into_inner());
|
||||
|
|
|
|||
|
|
@ -1,30 +1,25 @@
|
|||
use std::fs::File;
|
||||
use std::fs;
|
||||
use std::io::Cursor;
|
||||
|
||||
use bff::Endian;
|
||||
use bff::names::{NameContext, NameType};
|
||||
use bff::tsc::{Cps, read_default_cps_names};
|
||||
use binrw::io::BufReader;
|
||||
|
||||
use crate::path_helpers::resolve_repo_data_path;
|
||||
|
||||
#[datatest::data("tests/datasets/cps_read_write_read.yaml")]
|
||||
#[datatest::data("tests/datasets/cps_roundtrip.yaml")]
|
||||
#[test]
|
||||
fn read_write_read(cps_path_str: String) {
|
||||
fn roundtrip(cps_path_str: String) {
|
||||
let cps_path = resolve_repo_data_path(&cps_path_str);
|
||||
let f = File::open(cps_path).unwrap();
|
||||
let mut reader = BufReader::new(f);
|
||||
let data = fs::read(cps_path).unwrap();
|
||||
let mut reader = Cursor::new(&data);
|
||||
let mut name_context = NameContext::new(NameType::BlackSheep32);
|
||||
read_default_cps_names(&mut name_context).unwrap();
|
||||
let cps = Cps::read(&mut reader, Endian::Little, &name_context).unwrap();
|
||||
|
||||
let mut writer = Cursor::new(Vec::new());
|
||||
cps.write(&mut writer, Endian::Little, false, &mut name_context)
|
||||
.unwrap();
|
||||
|
||||
let mut reader = Cursor::new(writer.into_inner());
|
||||
let mut name_context = NameContext::new(NameType::BlackSheep32);
|
||||
read_default_cps_names(&mut name_context).unwrap();
|
||||
let cps2 = Cps::read(&mut reader, Endian::Little, &name_context).unwrap();
|
||||
|
||||
assert!(cps == cps2);
|
||||
assert!(data == writer.into_inner());
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue