Beispiel #1
0
        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);
        }
Beispiel #2
0
        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;
                }
            }
        }