Compare commits
2 commits
385e1f98e2
...
db7790ec5b
Author | SHA1 | Date | |
---|---|---|---|
db7790ec5b | |||
0441a0d932 |
1 changed files with 14 additions and 17 deletions
|
@ -88,11 +88,10 @@ impl EntryHeader {
|
||||||
|
|
||||||
pub struct Bundle {
|
pub struct Bundle {
|
||||||
format: BundleFormat,
|
format: BundleFormat,
|
||||||
|
properties: Vec<Murmur64>,
|
||||||
_headers: Vec<EntryHeader>,
|
_headers: Vec<EntryHeader>,
|
||||||
files: Vec<BundleFile>,
|
files: Vec<BundleFile>,
|
||||||
name: String,
|
name: String,
|
||||||
unknown_1: u32,
|
|
||||||
unknown_header: [u8; 256],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Bundle {
|
impl Bundle {
|
||||||
|
@ -122,19 +121,14 @@ impl Bundle {
|
||||||
return Err(eyre::eyre!("Unknown bundle format: {:?}", format));
|
return Err(eyre::eyre!("Unknown bundle format: {:?}", format));
|
||||||
}
|
}
|
||||||
|
|
||||||
let unknown_1 = r.read_u32()?;
|
r.skip_u32(0x3)?;
|
||||||
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 num_entries = r.read_u32()? as usize;
|
||||||
|
|
||||||
let mut unknown_header = [0; 256];
|
let mut properties = Vec::with_capacity(32);
|
||||||
r.read_exact(&mut unknown_header)?;
|
for prop in properties.iter_mut().take(32) {
|
||||||
|
*prop = Murmur64::from(r.read_u64()?);
|
||||||
|
}
|
||||||
|
|
||||||
let mut meta = Vec::with_capacity(num_entries);
|
let mut meta = Vec::with_capacity(num_entries);
|
||||||
for _ in 0..num_entries {
|
for _ in 0..num_entries {
|
||||||
|
@ -222,8 +216,7 @@ impl Bundle {
|
||||||
format,
|
format,
|
||||||
_headers: meta,
|
_headers: meta,
|
||||||
files,
|
files,
|
||||||
unknown_1,
|
properties,
|
||||||
unknown_header,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,9 +224,13 @@ impl Bundle {
|
||||||
pub fn to_binary(&self, ctx: &crate::Context) -> Result<Vec<u8>> {
|
pub fn to_binary(&self, ctx: &crate::Context) -> Result<Vec<u8>> {
|
||||||
let mut w = Cursor::new(Vec::new());
|
let mut w = Cursor::new(Vec::new());
|
||||||
w.write_u32(self.format.into())?;
|
w.write_u32(self.format.into())?;
|
||||||
w.write_u32(self.unknown_1)?;
|
// TODO: Find out what this is.
|
||||||
|
w.write_u32(0x3)?;
|
||||||
w.write_u32(self.files.len() as u32)?;
|
w.write_u32(self.files.len() as u32)?;
|
||||||
w.write_all(&self.unknown_header)?;
|
|
||||||
|
for prop in self.properties.iter() {
|
||||||
|
w.write_u64(**prop)?;
|
||||||
|
}
|
||||||
|
|
||||||
for meta in self._headers.iter() {
|
for meta in self._headers.iter() {
|
||||||
meta.to_writer(&mut w)?;
|
meta.to_writer(&mut w)?;
|
||||||
|
@ -326,7 +323,7 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip unknown 4 bytes
|
// Skip unknown 4 bytes
|
||||||
r.seek(SeekFrom::Current(4))?;
|
r.skip_u32(0x3)?;
|
||||||
|
|
||||||
let num_entries = r.read_u32()? as i64;
|
let num_entries = r.read_u32()? as i64;
|
||||||
tracing::debug!(num_entries);
|
tracing::debug!(num_entries);
|
||||||
|
|
Loading…
Add table
Reference in a new issue