diff --git a/format.txt b/format.txt index b93badc..81a37dc 100644 --- a/format.txt +++ b/format.txt @@ -43,12 +43,12 @@ next zar = + 0x1A + unk5 uint32_t N - FString[N] - entity names + FString[N] - entity types uint16_t count - count times - uint32_t unk1 - uint16_t ? - uint16_t name_idx + uint32_t unk1 + count times - 1 (because entity id are indexed from 1) + uint32_t flags? + uint16_t type_idx diff --git a/src/fot/world.rs b/src/fot/world.rs index 9b621a7..6902650 100644 --- a/src/fot/world.rs +++ b/src/fot/world.rs @@ -32,23 +32,29 @@ impl World { pub fn test(&self) -> Result<()> { let mut rd = ReadStream::new(&self.data, 0x1038); let _: Tag = rd.read(0)?; + let n = rd.read_u32()? as usize; + let mut types: Vec = Vec::with_capacity(n); for i in 0..n { - let name: FString = rd.read(0)?; - println!("{}\t{}", i, name); + let ent_type: FString = rd.read(0)?; + println!("{}\t{}", i, &ent_type); + types.push(ent_type); } - /*let esh_count = rd.read_u16()?; + let esh_count = rd.read_u16()?; + let unk1 = rd.read_u32()?; 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)?; + for i in 1..esh_count { + let unk2 = rd.read_u32()?; + let type_idx = rd.read_u16()?; + if type_idx == 0xFFFF { + continue; } - }*/ + + let name = &types[type_idx as usize]; + println!("offset {:x} idx {} unk1 {} name {}", rd.offset(), i, unk2, name); + let _: ESH = rd.read(0)?; + } Ok(()) }