diff --git a/format.txt b/format.txt index 88b9b1b..b93badc 100644 --- a/format.txt +++ b/format.txt @@ -43,12 +43,12 @@ next zar = + 0x1A + unk5 uint32_t N - FString[N] + FString[N] - entity names uint16_t count count times uint32_t unk1 uint16_t ? - uint16_t ? (0xFFFF = no ) + uint16_t name_idx diff --git a/src/fot/stream.rs b/src/fot/stream.rs index 4c75a1f..c85fcba 100644 --- a/src/fot/stream.rs +++ b/src/fot/stream.rs @@ -27,6 +27,7 @@ impl<'a> ReadStream<'a> { pub fn as_bytes(&mut self, size: usize) -> Result<&[u8]> { if self.offset() + size > self.raw.mem.len() { + dbg!(self.offset(), size, self.raw.mem.len()); Err(anyhow!("as_bytes/read_bytes size is bigger than buffer")) } else { let buf = &self.raw.mem[self.offset()..self.offset() + size]; diff --git a/src/fot/world.rs b/src/fot/world.rs index 051f15d..9b621a7 100644 --- a/src/fot/world.rs +++ b/src/fot/world.rs @@ -30,12 +30,25 @@ impl World { const WORLD_HDR_LEN: usize = 0x13; pub fn test(&self) -> Result<()> { - let mut rd = ReadStream::new(&self.data, 0x14AC); - let esh: ESH = rd.read(0)?; - for (name, value) in esh.props.iter() { - println!("{}\t{}", name, value); + let mut rd = ReadStream::new(&self.data, 0x1038); + let _: Tag = rd.read(0)?; + let n = rd.read_u32()? as usize; + for i in 0..n { + let name: FString = rd.read(0)?; + println!("{}\t{}", i, name); } - dbg!(&esh.props["Display Name"]); + + /*let esh_count = rd.read_u16()?; + dbg!(esh_count); + for _ in 0..esh_count { + let unk1 = rd.read_u32()?; + let unk2 = rd.read_u16()?; + let unk3 = rd.read_u16()?; + print!("{} {} {}", unk1, unk2, unk3); + if unk3 != 0xFFFF { + let _: ESH = rd.read(0)?; + } + }*/ Ok(()) }