public unsafe void Load(Stream reader, SerializedFileHeader Head, ABheader ab) { isAB = ab; Header = Head; long cur = rStart[0] = (int)reader.Position; byte[] buf = reader.ReadBytes(0x10); string VersionString; cur += buf.strlen(out VersionString) + 1; VerParse(VersionString); reader.Position = cur; MetaParse(reader, Header.m_Endianess.a != 0); foreach (var oo in Content) { oo.Load(reader); } reader.Close(); }
public static unsafe SerializedFile Create(string path, SerializedFile src) { Stream reader = File.OpenRead(path); if (reader.Length < 0x14) { reader.Close(); return(null); } byte[] buf = reader.ReadBytes(0x30, 0, 0x14); ABheader abhh = null; if (buf.ru4(0) == 0x74696e55) { abhh = new ABheader(reader); reader = abhh.reNewReader(); buf = reader.ReadBytes(0x30, 0, 0x14); } var tmpHeader = new SerializedFileHeader(); fixed(byte *srcbb = &buf[0]) { bswap *bs = (bswap *)srcbb; uint ver = bs[2]._1u(); tmpHeader.m_Version = ver; tmpHeader.m_Endianess = bs[4]; if (ver >= 0x16) { reader.Read(buf, 0x14, 0x1C); bswap8 *bs8 = (bswap8 *)srcbb; tmpHeader.v16h_0 = bs8[0]; tmpHeader.v16h_C = bs[3]; tmpHeader.m_MetadataSize = bs[5]._1u(); tmpHeader.m_FileSize = bs8[3]._1u(); tmpHeader.m_DataOffset = bs8[4]._1i(); tmpHeader.v16h_28 = bs[10]; tmpHeader.v16h_2C = bs[11]; } else { tmpHeader.m_MetadataSize = bs[0]._1u(); tmpHeader.m_FileSize = bs[1]._1u(); tmpHeader.m_DataOffset = bs[3]._1u(); if (ver < 9) { } } } long cur = reader.Length; if (tmpHeader.m_MetadataSize >= cur || tmpHeader.m_DataOffset >= cur) { return(null); } //if(abhh.resSraw<0) // abhh.resSloc(tmpHeader.m_FileSize); if (src == null) { return(new SerializedFile(reader, tmpHeader, abhh)); } else { src.Load(reader, tmpHeader, abhh); return(src); } }
public SerializedFile(Stream reader, SerializedFileHeader Head, ABheader ab) { Load(reader, Head, ab); }