successful attempt to decode sgd. Realized, that I need to implement some stream reading

This commit is contained in:
mykola2312 2023-08-29 21:39:07 +03:00
parent 889e2060b3
commit b43efe1abd
2 changed files with 33 additions and 9 deletions

View file

@ -33,8 +33,8 @@ next zar = <zar> + 0x1A + unk5
uint8_t unk1[0x48]
uint32_t N - num strings
FString[N]
N times
uint32_t ?
N times
uint32_t M - num strings
FString[M]

View file

@ -24,15 +24,39 @@ impl World {
const WORLD_HDR_LEN: usize = 0x13;
pub fn test(&self) -> Result<()> {
let mut a = FString::decode(&self.data, 0xA2, 0)?;
dbg!(&a);
let sgd_start: usize = 0x4E;
let mut cur = sgd_start;
cur += Tag::decode(&self.data, sgd_start, 0)?.get_enc_size();
cur += 0x48;
a.encoding = FStringEncoding::ANSI;
let b = a.encode()?;
dbg!(&b);
let mut rdr = Cursor::new(&self.data.mem[..]);
rdr.set_position(cur as u64);
let N = rdr.read_u32::<LittleEndian>()?;
let c = FString::decode(&b, 0, 0)?;
dbg!(&c);
let mut names: Vec<FString> = Vec::new();
cur += 4;
for _ in 0..N {
let name = FString::decode(&self.data, cur, 0)?;
cur += name.get_enc_size();
names.push(name);
}
//dbg!(names);
let unk1 = rdr.read_u32::<LittleEndian>()?;
cur += 4;
for _ in 0..N {
rdr.set_position(cur as u64);
let M = rdr.read_u32::<LittleEndian>()?;
cur += 4;
dbg!(M, cur);
let mut strings: Vec<FString> = Vec::new();
for _ in 0..M {
let str = FString::decode(&self.data, cur, 0)?;
cur += str.get_enc_size();
strings.push(str);
}
dbg!(strings);
}
Ok(())
}