Compare commits

..

No commits in common. "db7790ec5b96602e2ccfad0fc377f8286b6a7731" and "385e1f98e275c1f9728997fafabdc5539d8718e8" have entirely different histories.

View file

@ -88,10 +88,11 @@ impl EntryHeader {
pub struct Bundle {
format: BundleFormat,
properties: Vec<Murmur64>,
_headers: Vec<EntryHeader>,
files: Vec<BundleFile>,
name: String,
unknown_1: u32,
unknown_header: [u8; 256],
}
impl Bundle {
@ -121,14 +122,19 @@ impl Bundle {
return Err(eyre::eyre!("Unknown bundle format: {:?}", format));
}
r.skip_u32(0x3)?;
let unknown_1 = r.read_u32()?;
if unknown_1 != 0x3 {
tracing::warn!(
"Unexpected value for unknown header. Expected {:#08X}, got {:#08X}",
0x3,
unknown_1
);
}
let num_entries = r.read_u32()? as usize;
let mut properties = Vec::with_capacity(32);
for prop in properties.iter_mut().take(32) {
*prop = Murmur64::from(r.read_u64()?);
}
let mut unknown_header = [0; 256];
r.read_exact(&mut unknown_header)?;
let mut meta = Vec::with_capacity(num_entries);
for _ in 0..num_entries {
@ -216,7 +222,8 @@ impl Bundle {
format,
_headers: meta,
files,
properties,
unknown_1,
unknown_header,
})
}
@ -224,13 +231,9 @@ impl Bundle {
pub fn to_binary(&self, ctx: &crate::Context) -> Result<Vec<u8>> {
let mut w = Cursor::new(Vec::new());
w.write_u32(self.format.into())?;
// TODO: Find out what this is.
w.write_u32(0x3)?;
w.write_u32(self.unknown_1)?;
w.write_u32(self.files.len() as u32)?;
for prop in self.properties.iter() {
w.write_u64(**prop)?;
}
w.write_all(&self.unknown_header)?;
for meta in self._headers.iter() {
meta.to_writer(&mut w)?;
@ -323,7 +326,7 @@ where
}
// Skip unknown 4 bytes
r.skip_u32(0x3)?;
r.seek(SeekFrom::Current(4))?;
let num_entries = r.read_u32()? as i64;
tracing::debug!(num_entries);