Beispiel #1
0
 public Field(UnityBinaryReader reader)
 {
     Version     = reader.ReadInt16();
     Depth       = reader.ReadByte();
     IsArray     = reader.ReadBool();
     _typeOffset = reader.ReadInt32();
     _nameOffset = reader.ReadInt32();
     Size        = reader.ReadInt32();
     Index       = reader.ReadInt32();
     Flags       = reader.ReadInt32();
 }
Beispiel #2
0
            private void ReadEmbedded(UnityBinaryReader reader, int version, int typeVersion)
            {
                int fieldCount        = reader.ReadInt32();
                int stringTableLength = reader.ReadInt32();

                TypeFields.Capacity = fieldCount;
                TypeFields.Clear();

                for (int i = 0; i < fieldCount; i++)
                {
                    var field = new Field(reader);
                    TypeFields.Add(field);
                }

                ReadStringTable(reader, stringTableLength);
            }
Beispiel #3
0
 void UnityElement.Read(UnityBinaryReader reader, int version)
 {
     BufferedPath = reader.ReadString();
     Guid         = new Guid128();
     Guid.Read(reader, version);
     Type      = reader.ReadInt32();
     AssetPath = reader.ReadString();
 }
Beispiel #4
0
        private void Read(UnityBinaryReader reader, int version)
        {
            _format     = version;
            HasTypeTree = true;

            if (version <= 6)
            {
                UnityVersion = $"Unsupported Format";
                TypeVersion  = 0;
                return;
            }

            UnityVersion = reader.ReadString();
            TypeVersion  = reader.ReadInt32();
            if (version >= 13)
            {
                HasTypeTree = reader.ReadBool();
            }

            var fieldCount = reader.ReadInt32();

            if (version > 13)
            {
                for (int i = 0; i < fieldCount; i++)
                {
                    Types_0D.Add(new Type_0D(reader, version, TypeVersion, HasTypeTree));
                }
            }
            else
            {
                throw new NotImplementedException();
                for (int i = 0; i < fieldCount; i++)
                {
                    //Types_07.Add(new Type_07(reader, format, Version, HasTypeTree));
                }
            }
            if (version < 14)
            {
                _unknown = reader.ReadInt32();
            }
        }
Beispiel #5
0
        protected void Read(UnityBinaryReader reader, int version)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }
            int count = reader.ReadInt32();

            Items.Capacity = count;
            Items.Clear();
            for (int i = 0; i < count; i++)
            {
                var item = new Item();
                item.Read(reader, version);
                Items.Add(item);
            }
        }
Beispiel #6
0
            public Type_0D(UnityBinaryReader reader, int version, int typeVersion, bool embedded)
            {
                if (reader == null)
                {
                    throw new ArgumentNullException(nameof(reader));
                }
                if (version < 13)
                {
                    throw new ArgumentOutOfRangeException(nameof(version), "this type does not support the given format");
                }
                ClassID = reader.ReadInt32();

                if (version < 16)
                {
                    _unknown = 0;
                }
                else
                {
                    _unknown = reader.ReadByte();
                }

                if (version < 17)
                {
                    ScriptIndex = -1;
                }
                else
                {
                    ScriptIndex = reader.ReadInt16();
                }
                if (ClassID < 0 || ClassID == 114)
                {
                    ScriptID = new Hash128();
                    ScriptID.Read(reader, version);
                }
                PropertiesHash = new Hash128();
                PropertiesHash.Read(reader, version);
                if (embedded)
                {
                    ReadEmbedded(reader, version, typeVersion);
                }
            }
Beispiel #7
0
 void UnityElement.Read(UnityBinaryReader reader, int version)
 {
     FileID = reader.ReadInt32();
     PathID = reader.ReadInt64();
 }
Beispiel #8
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;
                }
            }
        }