private static uint GetAssetsFileListLength(UnityBinaryReader reader, int version) { uint sizeFiles = reader.ReadUInt32(); uint rax; if (version <= 16) { #warning check if this is still needed if (true) { if (version < 17) { uint rdx3 = 25; if (version >= 16) { rdx3 = 23; } rax = ((rdx3 + 3) & 0xfffffffc) * ((sizeFiles) - 1) + rdx3; return(rax); } else { rax = 20 * ((sizeFiles) - 1) + 20; return(rax); } } } uint blockSize; if (version >= 17) { blockSize = 20; } else { if (version >= 16) { rax = (sizeFiles) * 23; return(rax); } if (version >= 15) { rax = (sizeFiles) * 25; return(rax); } blockSize = 24; if (version != 14) { blockSize = 20; } } return((sizeFiles) * blockSize); }
public AssetFileInfo(AssetsFile file, UnityBinaryReader reader) : this() { /* Read basic info */ if (file.Header.Version < 14) { Index = reader.ReadUInt32(); } else { Index = reader.ReadUInt64(); } //v1 /* * DataOffset = reader.ReadUInt32(); * FileSize = reader.ReadUInt32(); * FileTypeOrIndex = reader.ReadInt32(); * InheritedUnityClass = reader.ReadInt16(); * ScriptIndex = reader.ReadInt16(); */ //v2 DataOffset = reader.ReadUInt32(); FileSize = reader.ReadUInt32(); FileTypeOrIndex = reader.ReadInt32(); InheritedUnityClass = reader.ReadInt16(); ScriptIndex = reader.ReadInt16(); //v3 (first v2) Unknown = reader.ReadByte(); /* Advanced */ if (file.Header.Version < 16) { FileType = FileTypeOrIndex; } else { if (FileTypeOrIndex < file.TypeTree.Types_0D.Count) { var type = file.TypeTree.Types_0D[FileTypeOrIndex]; if (type.ScriptIndex == -1) { FileType = type.ClassID; InheritedUnityClass = type.ClassID; ScriptIndex = -1; } else { FileType = -1 - type.ScriptIndex; InheritedUnityClass = type.ClassID; ScriptIndex = type.ScriptIndex; } } else { } } AbsolutePos = file.Header.DataOffset + DataOffset; if (IsKnownUnityType(FileType) || true) { long pos = reader.Position; try { #error fix this, pls reader.Position = AbsolutePos; int length = reader.ReadInt32(); if (length > 100 && false) { if (Debugger.IsAttached) { Debugger.Break(); } } Name = reader.ReadStringFixed(length); } finally { reader.Position = pos; } } }