public unsafe void ParseAsset(Stream reader) { byte[] buf = reader.ReadBytes(0x30, 0, 0x14); fixed(byte *srcbb = &buf[0]) { bswap *bs = (bswap *)srcbb; uint ver = bs[2]._1u(); Header.m_Version = ver; Header.m_Endianess = bs[4]; if (ver >= 0x16) { reader.Read(buf, 0x14, 0x1C); bswap8 *bs8 = (bswap8 *)srcbb; Header.v16h_0 = bs8[0]; Header.v16h_C = bs[3]; Header.m_MetadataSize = bs[5]._1u(); Header.m_FileSize = bs8[3]._1i(); Header.m_DataOffset = bs8[4]._1i(); Header.v16h_28 = bs[10]; Header.v16h_2C = bs[11]; } else { Header.m_MetadataSize = bs[0]._1u(); Header.m_FileSize = bs[1]._1u(); Header.m_DataOffset = bs[3]._1u(); if (ver < 9) { } } } long cur = reader.Length; if (Header.m_MetadataSize >= cur || Header.m_DataOffset >= cur) { return; } cur = reader.Position; buf = reader.ReadBytes(0x10); cur += buf.strlen(out VerionString); reader.Position = cur; }
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); } }