Exemplo n.º 1
0
        public TextAsset(AssetPreloadData preloadData, bool readSwitch)
        {
            var sourceFile = preloadData.sourceFile;
            var a_Stream   = preloadData.sourceFile.a_Stream;

            a_Stream.Position     = preloadData.Offset;
            preloadData.extension = ".txt";

            if (sourceFile.platform == -2)
            {
                uint m_ObjectHideFlags    = a_Stream.ReadUInt32();
                PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
                PPtr m_PrefabInternal     = sourceFile.ReadPPtr();
            }

            m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());

            if (readSwitch)
            {
                m_Script = a_Stream.ReadBytes(a_Stream.ReadInt32());
            }
            else
            {
                if (m_Name != "")
                {
                    preloadData.Text = m_Name;
                }
                else
                {
                    preloadData.Text = preloadData.TypeString + " #" + preloadData.uniqueID;
                }
                preloadData.SubItems.AddRange(new[] { preloadData.TypeString, preloadData.Size.ToString() });
            }
        }
Exemplo n.º 2
0
        public PPtr m_Father          = new PPtr();//can be transform or type 224 (as seen in Minions)

        public Transform(AssetPreloadData preloadData)
        {
            var sourceFile = preloadData.sourceFile;
            var a_Stream   = preloadData.sourceFile.a_Stream;

            a_Stream.Position = preloadData.Offset;

            if (sourceFile.platform == -2)
            {
                uint m_ObjectHideFlags    = a_Stream.ReadUInt32();
                PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
                PPtr m_PrefabInternal     = sourceFile.ReadPPtr();
            }

            m_GameObject    = sourceFile.ReadPPtr();
            m_LocalRotation = new[] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
            m_LocalPosition = new[] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
            m_LocalScale    = new[] { a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle() };
            int m_ChildrenCount = a_Stream.ReadInt32();

            for (int j = 0; j < m_ChildrenCount; j++)
            {
                m_Children.Add(sourceFile.ReadPPtr());
            }
            m_Father = sourceFile.ReadPPtr();
        }
Exemplo n.º 3
0
        public AssetBundle(AssetPreloadData preloadData)
        {
            var sourceFile = preloadData.sourceFile;
            var a_Stream   = preloadData.sourceFile.a_Stream;

            a_Stream.Position = preloadData.Offset;

            var m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
            var size   = a_Stream.ReadInt32();

            for (int i = 0; i < size; i++)
            {
                sourceFile.ReadPPtr();
            }
            size = a_Stream.ReadInt32();
            for (int i = 0; i < size; i++)
            {
                var temp = new ContainerData();
                temp.first  = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
                temp.second = new AssetInfo();
                temp.second.preloadIndex = a_Stream.ReadInt32();
                temp.second.preloadSize  = a_Stream.ReadInt32();
                temp.second.asset        = sourceFile.ReadPPtr();
                m_Container.Add(temp);
            }
        }
Exemplo n.º 4
0
        public Shader(AssetPreloadData preloadData, bool readSwitch)
        {
            var sourceFile = preloadData.sourceFile;
            var a_Stream   = preloadData.sourceFile.a_Stream;

            a_Stream.Position     = preloadData.Offset;
            preloadData.extension = ".txt";

            if (sourceFile.platform == -2)
            {
                uint m_ObjectHideFlags    = a_Stream.ReadUInt32();
                PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
                PPtr m_PrefabInternal     = sourceFile.ReadPPtr();
            }

            m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());

            if (readSwitch)
            {
                if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 5 || sourceFile.version[0] > 5)//5.5.0 and up
                {
                    a_Stream.Position = preloadData.Offset;
                    var str     = (string)ShaderResource.ResourceManager.GetObject($"Shader{sourceFile.version[0]}{sourceFile.version[1]}");
                    var members = new JavaScriptSerializer().Deserialize <List <ClassMember> >(str);
                    m_Script = ReadSerializedShader(members, a_Stream);
                }
                else
                {
                    m_Script = a_Stream.ReadBytes(a_Stream.ReadInt32());
                    if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 3) //5.3 - 5.4
                    {
                        a_Stream.AlignStream(4);
                        a_Stream.ReadAlignedString(a_Stream.ReadInt32());//m_PathName
                        var decompressedSize  = a_Stream.ReadUInt32();
                        var m_SubProgramBlob  = a_Stream.ReadBytes(a_Stream.ReadInt32());
                        var decompressedBytes = new byte[decompressedSize];
                        using (var mstream = new MemoryStream(m_SubProgramBlob))
                        {
                            var decoder = new Lz4DecoderStream(mstream);
                            decoder.Read(decompressedBytes, 0, (int)decompressedSize);
                            decoder.Dispose();
                        }
                        m_Script = m_Script.Concat(decompressedBytes.ToArray()).ToArray();
                    }
                }
            }
            else
            {
                if (m_Name != "")
                {
                    preloadData.Text = m_Name;
                }
                else
                {
                    preloadData.Text = preloadData.TypeString + " #" + preloadData.uniqueID;
                }
                preloadData.SubItems.AddRange(new[] { preloadData.TypeString, preloadData.Size.ToString() });
            }
        }
Exemplo n.º 5
0
 public static void ExportMonoBehaviour(AssetPreloadData asset, string exportFilename)
 {
     if (!exportFilename.EndsWith(".txt"))
     {
         exportFilename += ".txt";
     }
     File.WriteAllText(exportFilename, new MonoBehaviour(asset, true).serializedText);
 }
Exemplo n.º 6
0
        public static void ExportText(AssetPreloadData asset, string exportPath)
        {
            if (!exportPath.EndsWith("\\"))
            {
                exportPath += "\\";
            }
            TextAsset TA = new TextAsset(asset, true);

            File.WriteAllBytes(exportPath + TA.m_Name + ".txt", TA.m_Script);
            TA = null;
        }
Exemplo n.º 7
0
        public static void ExportAudioClip(AssetPreloadData asset, string exportPath)
        {
            if (!exportPath.EndsWith("\\"))
            {
                exportPath += "\\";
            }
            AudioClip m_AudioClip = new AudioClip(asset, true);

            File.WriteAllBytes(exportPath + m_AudioClip.m_Name + ".mp3", m_AudioClip.m_AudioData);
            m_AudioClip = null;
        }
Exemplo n.º 8
0
        public MeshRenderer(AssetPreloadData preloadData)
        {
            var sourceFile = preloadData.sourceFile;
            var a_Stream   = preloadData.sourceFile.a_Stream;

            a_Stream.Position = preloadData.Offset;

            if (sourceFile.platform == -2)
            {
                uint m_ObjectHideFlags    = a_Stream.ReadUInt32();
                PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
                PPtr m_PrefabInternal     = sourceFile.ReadPPtr();
            }

            m_GameObject = sourceFile.ReadPPtr();

            if (sourceFile.version[0] < 5)
            {
                m_Enabled        = a_Stream.ReadBoolean();
                m_CastShadows    = a_Stream.ReadByte();
                m_ReceiveShadows = a_Stream.ReadBoolean();
                m_LightmapIndex  = a_Stream.ReadByte();
            }
            else
            {
                m_Enabled = a_Stream.ReadBoolean();
                a_Stream.AlignStream(4);
                m_CastShadows    = a_Stream.ReadByte();
                m_ReceiveShadows = a_Stream.ReadBoolean();
                a_Stream.AlignStream(4);

                m_LightmapIndex        = a_Stream.ReadUInt16();
                m_LightmapIndexDynamic = a_Stream.ReadUInt16();
            }

            if (sourceFile.version[0] >= 3)
            {
                a_Stream.Position += 16;
            }                                                            //Vector4f m_LightmapTilingOffset
            if (sourceFile.version[0] >= 5)
            {
                a_Stream.Position += 16;
            }                                                            //Vector4f m_LightmapTilingOffsetDynamic

            m_Materials = new PPtr[a_Stream.ReadInt32()];
            for (int m = 0; m < m_Materials.Length; m++)
            {
                m_Materials[m] = sourceFile.ReadPPtr();
            }
        }
Exemplo n.º 9
0
        public static void ExportTexture(AssetPreloadData asset, string exportPath)
        {
            var m_Texture2D = new Texture2D(asset, true);
            var bitmap      = m_Texture2D.ConvertToBitmap(true);

            if (bitmap != null)
            {
                if (!exportPath.EndsWith("\\"))
                {
                    exportPath += "\\";
                }
                bitmap.Save(exportPath + m_Texture2D.m_Name + ".png", ImageFormat.Png);
                bitmap.Dispose();
            }
            m_Texture2D = null;
        }
Exemplo n.º 10
0
        public RectTransform(AssetPreloadData preloadData)
        {
            m_Transform = new Transform(preloadData);

            //var sourceFile = preloadData.sourceFile;
            //var a_Stream = preloadData.sourceFile.a_Stream;

            /*
             * float[2] AnchorsMin
             * float[2] AnchorsMax
             * float[2] Pivod
             * float Width
             * float Height
             * float[2] ?
             */
        }
Exemplo n.º 11
0
        public string uniqueID = "0";//this way file and folder TreeNodes will be treated as FBX scene

        public GameObject(AssetPreloadData preloadData)
        {
            if (preloadData != null)
            {
                var sourceFile = preloadData.sourceFile;
                var a_Stream   = preloadData.sourceFile.a_Stream;
                a_Stream.Position = preloadData.Offset;

                uniqueID = preloadData.uniqueID;

                if (sourceFile.platform == -2)
                {
                    uint m_ObjectHideFlags    = a_Stream.ReadUInt32();
                    PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
                    PPtr m_PrefabInternal     = sourceFile.ReadPPtr();
                }

                int m_Component_size = a_Stream.ReadInt32();
                for (int j = 0; j < m_Component_size; j++)
                {
                    if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)//5.5.0 and up
                    {
                        m_Components.Add(sourceFile.ReadPPtr());
                    }
                    else
                    {
                        int first = a_Stream.ReadInt32();
                        m_Components.Add(sourceFile.ReadPPtr());
                    }
                }

                m_Layer = a_Stream.ReadInt32();
                int namesize = a_Stream.ReadInt32();
                m_Name = a_Stream.ReadAlignedString(namesize);
                if (m_Name == "")
                {
                    m_Name = "GameObject #" + uniqueID;
                }
                m_Tag      = a_Stream.ReadUInt16();
                m_IsActive = a_Stream.ReadBoolean();

                Text             = m_Name;
                preloadData.Text = m_Name;
                //name should be unique
                Name = uniqueID;
            }
        }
Exemplo n.º 12
0
        public MeshFilter(AssetPreloadData preloadData)
        {
            var sourceFile = preloadData.sourceFile;
            var a_Stream   = preloadData.sourceFile.a_Stream;

            a_Stream.Position = preloadData.Offset;

            if (sourceFile.platform == -2)
            {
                uint m_ObjectHideFlags    = a_Stream.ReadUInt32();
                PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
                PPtr m_PrefabInternal     = sourceFile.ReadPPtr();
            }

            m_GameObject = sourceFile.ReadPPtr();
            m_Mesh       = sourceFile.ReadPPtr();
        }
Exemplo n.º 13
0
        public MonoBehaviour(AssetPreloadData preloadData, bool readSwitch)
        {
            var sourceFile = preloadData.sourceFile;
            var a_Stream   = preloadData.sourceFile.a_Stream;

            a_Stream.Position = preloadData.Offset;

            var m_GameObject = sourceFile.ReadPPtr();
            var m_Enabled    = a_Stream.ReadByte();

            a_Stream.AlignStream(4);
            var m_Script = sourceFile.ReadPPtr();
            var m_Name   = a_Stream.ReadAlignedString(a_Stream.ReadInt32());

            if (readSwitch)
            {
                preloadData.extension = ".txt";
                if ((serializedText = preloadData.ViewStruct()) == null)
                {
                    var str = "PPtr<GameObject> m_GameObject\r\n";
                    str           += "\tint m_FileID = " + m_GameObject.m_FileID + "\r\n";
                    str           += "\tint64 m_PathID = " + m_GameObject.m_PathID + "\r\n";
                    str           += "UInt8 m_Enabled = " + m_Enabled + "\r\n";
                    str           += "PPtr<MonoScript> m_Script\r\n";
                    str           += "\tint m_FileID = " + m_Script.m_FileID + "\r\n";
                    str           += "\tint64 m_PathID = " + m_Script.m_PathID + "\r\n";
                    str           += "string m_Name = \"" + m_Name + "\"\r\n";
                    serializedText = str;
                }
            }
            else
            {
                if (m_Name != "")
                {
                    preloadData.Text = m_Name;
                }
                else
                {
                    preloadData.Text = preloadData.TypeString + " #" + preloadData.uniqueID;
                }
                preloadData.SubItems.AddRange(new[] { preloadData.TypeString, preloadData.Size.ToString() });
            }
        }
Exemplo n.º 14
0
        public BuildSettings(AssetPreloadData preloadData)
        {
            var sourceFile = preloadData.sourceFile;
            var a_Stream   = preloadData.sourceFile.a_Stream;

            a_Stream.Position = preloadData.Offset;

            int levels = a_Stream.ReadInt32();

            for (int l = 0; l < levels; l++)
            {
                string level = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
            }

            if (sourceFile.version[0] == 5)
            {
                int preloadedPlugins = a_Stream.ReadInt32();
                for (int l = 0; l < preloadedPlugins; l++)
                {
                    string preloadedPlugin = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
                }
            }

            a_Stream.Position += 4; //bool flags
            if (sourceFile.fileGen >= 8)
            {
                a_Stream.Position += 4;
            }                                                        //bool flags
            if (sourceFile.fileGen >= 9)
            {
                a_Stream.Position += 4;
            }                                                        //bool flags
            if (sourceFile.version[0] == 5 ||
                (sourceFile.version[0] == 4 && (sourceFile.version[1] >= 3 ||
                                                (sourceFile.version[1] == 2 && sourceFile.buildType[0] != "a"))))
            {
                a_Stream.Position += 4;
            }                                                               //bool flags

            m_Version = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
        }
Exemplo n.º 15
0
        public Material(AssetPreloadData preloadData)
        {
            var sourceFile = preloadData.sourceFile;
            var a_Stream   = preloadData.sourceFile.a_Stream;

            a_Stream.Position = preloadData.Offset;

            if (sourceFile.platform == -2)
            {
                uint m_ObjectHideFlags    = a_Stream.ReadUInt32();
                PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
                PPtr m_PrefabInternal     = sourceFile.ReadPPtr();
            }

            m_Name   = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
            m_Shader = sourceFile.ReadPPtr();

            if (sourceFile.version[0] == 4 && (sourceFile.version[1] >= 2 || (sourceFile.version[1] == 1 && sourceFile.buildType[0] != "a")))
            {
                m_ShaderKeywords = new string[a_Stream.ReadInt32()];
                for (int i = 0; i < m_ShaderKeywords.Length; i++)
                {
                    m_ShaderKeywords[i] = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
                }
            }
            else if (sourceFile.version[0] >= 5)//5.0 and up
            {
                m_ShaderKeywords = new string[1] {
                    a_Stream.ReadAlignedString(a_Stream.ReadInt32())
                };
                uint m_LightmapFlags = a_Stream.ReadUInt32();
                if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 6 || sourceFile.version[0] > 5)//5.6.0 and up
                {
                    var m_EnableInstancingVariants = a_Stream.ReadBoolean();
                    //var m_DoubleSidedGI = a_Stream.ReadBoolean();//2017.x
                    a_Stream.AlignStream(4);
                }
            }

            if (sourceFile.version[0] > 4 || sourceFile.version[0] == 4 && sourceFile.version[1] >= 3)
            {
                m_CustomRenderQueue = a_Stream.ReadInt32();
            }

            if (sourceFile.version[0] == 5 && sourceFile.version[1] >= 1 || sourceFile.version[0] > 5)//5.1 and up
            {
                string[][] stringTagMap = new string[a_Stream.ReadInt32()][];
                for (int i = 0; i < stringTagMap.Length; i++)
                {
                    stringTagMap[i] = new string[2] {
                        a_Stream.ReadAlignedString(a_Stream.ReadInt32()), a_Stream.ReadAlignedString(a_Stream.ReadInt32())
                    };
                }
            }
            //disabledShaderPasses
            if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 6) || sourceFile.version[0] > 5)//5.6.0 and up
            {
                var size = a_Stream.ReadInt32();
                for (int i = 0; i < size; i++)
                {
                    a_Stream.ReadAlignedString(a_Stream.ReadInt32());
                }
            }
            //m_SavedProperties
            m_TexEnvs = new TexEnv[a_Stream.ReadInt32()];
            for (int i = 0; i < m_TexEnvs.Length; i++)
            {
                TexEnv m_TexEnv = new TexEnv()
                {
                    name      = a_Stream.ReadAlignedString(a_Stream.ReadInt32()),
                    m_Texture = sourceFile.ReadPPtr(),
                    m_Scale   = new float[2] {
                        a_Stream.ReadSingle(), a_Stream.ReadSingle()
                    },
                    m_Offset = new float[2] {
                        a_Stream.ReadSingle(), a_Stream.ReadSingle()
                    }
                };
                m_TexEnvs[i] = m_TexEnv;
            }

            m_Floats = new strFloatPair[a_Stream.ReadInt32()];
            for (int i = 0; i < m_Floats.Length; i++)
            {
                strFloatPair m_Float = new strFloatPair()
                {
                    first  = a_Stream.ReadAlignedString(a_Stream.ReadInt32()),
                    second = a_Stream.ReadSingle()
                };
                m_Floats[i] = m_Float;
            }

            m_Colors = new strColorPair[a_Stream.ReadInt32()];
            for (int i = 0; i < m_Colors.Length; i++)
            {
                strColorPair m_Color = new strColorPair()
                {
                    first  = a_Stream.ReadAlignedString(a_Stream.ReadInt32()),
                    second = new float[4] {
                        a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle(), a_Stream.ReadSingle()
                    }
                };
                m_Colors[i] = m_Color;
            }
        }
Exemplo n.º 16
0
        public unityFont(AssetPreloadData preloadData, bool readSwitch)
        {
            var sourceFile = preloadData.sourceFile;
            var a_Stream   = preloadData.sourceFile.a_Stream;

            a_Stream.Position = preloadData.Offset;

            if (sourceFile.platform == -2)
            {
                uint m_ObjectHideFlags    = a_Stream.ReadUInt32();
                PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
                PPtr m_PrefabInternal     = sourceFile.ReadPPtr();
            }

            m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());

            if (readSwitch)
            {
                if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 5) || sourceFile.version[0] > 5)
                {
                    var m_LineSpacing         = a_Stream.ReadSingle();
                    var m_DefaultMaterial     = sourceFile.ReadPPtr();
                    var m_FontSize            = a_Stream.ReadSingle();
                    var m_Texture             = sourceFile.ReadPPtr();
                    int m_AsciiStartOffset    = a_Stream.ReadInt32();
                    var m_Tracking            = a_Stream.ReadSingle();
                    var m_CharacterSpacing    = a_Stream.ReadInt32();
                    var m_CharacterPadding    = a_Stream.ReadInt32();
                    var m_ConvertCase         = a_Stream.ReadInt32();
                    int m_CharacterRects_size = a_Stream.ReadInt32();
                    for (int i = 0; i < m_CharacterRects_size; i++)
                    {
                        int index = a_Stream.ReadInt32();
                        //Rectf uv
                        float uvx      = a_Stream.ReadSingle();
                        float uvy      = a_Stream.ReadSingle();
                        float uvwidth  = a_Stream.ReadSingle();
                        float uvheight = a_Stream.ReadSingle();
                        //Rectf vert
                        float vertx      = a_Stream.ReadSingle();
                        float verty      = a_Stream.ReadSingle();
                        float vertwidth  = a_Stream.ReadSingle();
                        float vertheight = a_Stream.ReadSingle();
                        float width      = a_Stream.ReadSingle();

                        if (sourceFile.version[0] >= 4)
                        {
                            bool flipped = a_Stream.ReadBoolean();
                            a_Stream.Position += 3;
                        }
                    }
                    int m_KerningValues_size = a_Stream.ReadInt32();
                    for (int i = 0; i < m_KerningValues_size; i++)
                    {
                        int   pairfirst  = a_Stream.ReadInt16();
                        int   pairsecond = a_Stream.ReadInt16();
                        float second     = a_Stream.ReadSingle();
                    }
                    var m_PixelScale    = a_Stream.ReadSingle();
                    int m_FontData_size = a_Stream.ReadInt32();
                    if (m_FontData_size > 0)
                    {
                        m_FontData = new byte[m_FontData_size];
                        a_Stream.Read(m_FontData, 0, m_FontData_size);

                        if (m_FontData[0] == 79 && m_FontData[1] == 84 && m_FontData[2] == 84 && m_FontData[3] == 79)
                        {
                            preloadData.extension = ".otf";
                        }
                        else
                        {
                            preloadData.extension = ".ttf";
                        }
                    }
                }
                else
                {
                    int m_AsciiStartOffset = a_Stream.ReadInt32();

                    if (sourceFile.version[0] <= 3)
                    {
                        int m_FontCountX = a_Stream.ReadInt32();
                        int m_FontCountY = a_Stream.ReadInt32();
                    }

                    float m_Kerning     = a_Stream.ReadSingle();
                    float m_LineSpacing = a_Stream.ReadSingle();

                    if (sourceFile.version[0] <= 3)
                    {
                        int m_PerCharacterKerning_size = a_Stream.ReadInt32();
                        for (int i = 0; i < m_PerCharacterKerning_size; i++)
                        {
                            int   first  = a_Stream.ReadInt32();
                            float second = a_Stream.ReadSingle();
                        }
                    }
                    else
                    {
                        int m_CharacterSpacing = a_Stream.ReadInt32();
                        int m_CharacterPadding = a_Stream.ReadInt32();
                    }

                    int  m_ConvertCase     = a_Stream.ReadInt32();
                    PPtr m_DefaultMaterial = sourceFile.ReadPPtr();

                    int m_CharacterRects_size = a_Stream.ReadInt32();
                    for (int i = 0; i < m_CharacterRects_size; i++)
                    {
                        int index = a_Stream.ReadInt32();
                        //Rectf uv
                        float uvx      = a_Stream.ReadSingle();
                        float uvy      = a_Stream.ReadSingle();
                        float uvwidth  = a_Stream.ReadSingle();
                        float uvheight = a_Stream.ReadSingle();
                        //Rectf vert
                        float vertx      = a_Stream.ReadSingle();
                        float verty      = a_Stream.ReadSingle();
                        float vertwidth  = a_Stream.ReadSingle();
                        float vertheight = a_Stream.ReadSingle();
                        float width      = a_Stream.ReadSingle();

                        if (sourceFile.version[0] >= 4)
                        {
                            bool flipped = a_Stream.ReadBoolean();
                            a_Stream.Position += 3;
                        }
                    }

                    PPtr m_Texture = sourceFile.ReadPPtr();

                    int m_KerningValues_size = a_Stream.ReadInt32();
                    for (int i = 0; i < m_KerningValues_size; i++)
                    {
                        int   pairfirst  = a_Stream.ReadInt16();
                        int   pairsecond = a_Stream.ReadInt16();
                        float second     = a_Stream.ReadSingle();
                    }

                    if (sourceFile.version[0] <= 3)
                    {
                        bool m_GridFont = a_Stream.ReadBoolean();
                        a_Stream.Position += 3; //4 byte alignment
                    }
                    else
                    {
                        float m_PixelScale = a_Stream.ReadSingle();
                    }

                    int m_FontData_size = a_Stream.ReadInt32();
                    if (m_FontData_size > 0)
                    {
                        m_FontData = new byte[m_FontData_size];
                        a_Stream.Read(m_FontData, 0, m_FontData_size);

                        if (m_FontData[0] == 79 && m_FontData[1] == 84 && m_FontData[2] == 84 && m_FontData[3] == 79)
                        {
                            preloadData.extension = ".otf";
                        }
                        else
                        {
                            preloadData.extension = ".ttf";
                        }
                    }

                    float m_FontSize     = a_Stream.ReadSingle();//problem here in minifootball
                    float m_Ascent       = a_Stream.ReadSingle();
                    uint  m_DefaultStyle = a_Stream.ReadUInt32();

                    int m_FontNames = a_Stream.ReadInt32();
                    for (int i = 0; i < m_FontNames; i++)
                    {
                        string m_FontName = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
                    }

                    if (sourceFile.version[0] >= 4)
                    {
                        int m_FallbackFonts = a_Stream.ReadInt32();
                        for (int i = 0; i < m_FallbackFonts; i++)
                        {
                            PPtr m_FallbackFont = sourceFile.ReadPPtr();
                        }

                        int m_FontRenderingMode = a_Stream.ReadInt32();
                    }
                }
            }
            else
            {
                if (m_Name != "")
                {
                    preloadData.Text = m_Name;
                }
                else
                {
                    preloadData.Text = preloadData.TypeString + " #" + preloadData.uniqueID;
                }
                preloadData.SubItems.AddRange(new[] { preloadData.TypeString, preloadData.Size.ToString() });
            }
        }
Exemplo n.º 17
0
        private static byte[] ReadSerializedShader(List <ClassMember> members, EndianStream a_Stream)
        {
            var offsets             = new List <uint>();
            var compressedLengths   = new List <uint>();
            var decompressedLengths = new List <uint>();

            for (int i = 0; i < members.Count; i++)
            {
                var member     = members[i];
                var level      = member.Level;
                var varTypeStr = member.Type;
                if (member.Name == "offsets")
                {
                    var offsets_size = a_Stream.ReadInt32();
                    for (int j = 0; j < offsets_size; j++)
                    {
                        offsets.Add(a_Stream.ReadUInt32());
                    }
                    var compressedLengths_size = a_Stream.ReadInt32();
                    for (int j = 0; j < compressedLengths_size; j++)
                    {
                        compressedLengths.Add(a_Stream.ReadUInt32());
                    }
                    var decompressedLengths_size = a_Stream.ReadInt32();
                    for (int j = 0; j < decompressedLengths_size; j++)
                    {
                        decompressedLengths.Add(a_Stream.ReadUInt32());
                    }
                    var compressedBlob     = a_Stream.ReadBytes(a_Stream.ReadInt32());
                    var decompressedStream = new MemoryStream();
                    for (int j = 0; j < offsets.Count; j++)
                    {
                        var compressedBytes = new byte[compressedLengths[j]];
                        Array.Copy(compressedBlob, offsets[j], compressedBytes, 0, compressedLengths[j]);
                        var decompressedBytes = new byte[decompressedLengths[j]];
                        using (var mstream = new MemoryStream(compressedBytes))
                        {
                            var decoder = new Lz4DecoderStream(mstream);
                            decoder.Read(decompressedBytes, 0, (int)decompressedLengths[j]);
                            decoder.Dispose();
                        }
                        decompressedStream.Write(decompressedBytes, 0, decompressedBytes.Length);
                    }
                    var decompressedBlob = decompressedStream.ToArray();
                    return(decompressedBlob);
                }
                var align = (member.Flag & 0x4000) != 0;
                if (varTypeStr == "SInt8")//sbyte
                {
                    a_Stream.ReadSByte();
                }
                else if (varTypeStr == "UInt8")//byte
                {
                    a_Stream.ReadByte();
                }
                else if (varTypeStr == "short" || varTypeStr == "SInt16")//Int16
                {
                    a_Stream.ReadInt16();
                }
                else if (varTypeStr == "UInt16" || varTypeStr == "unsigned short")//UInt16
                {
                    a_Stream.ReadUInt16();
                }
                else if (varTypeStr == "int" || varTypeStr == "SInt32")//Int32
                {
                    a_Stream.ReadInt32();
                }
                else if (varTypeStr == "UInt32" || varTypeStr == "unsigned int")//UInt32
                {
                    a_Stream.ReadUInt32();
                }
                else if (varTypeStr == "long long" || varTypeStr == "SInt64")//Int64
                {
                    a_Stream.ReadInt64();
                }
                else if (varTypeStr == "UInt64" || varTypeStr == "unsigned long long")//UInt64
                {
                    a_Stream.ReadUInt64();
                }
                else if (varTypeStr == "float")//float
                {
                    a_Stream.ReadSingle();
                }
                else if (varTypeStr == "double")//double
                {
                    a_Stream.ReadDouble();
                }
                else if (varTypeStr == "bool")//bool
                {
                    a_Stream.ReadBoolean();
                }
                else if (varTypeStr == "string")//string
                {
                    a_Stream.ReadAlignedString(a_Stream.ReadInt32());
                    i += 3;                     //skip
                }
                else if (varTypeStr == "Array") //Array
                {
                    if ((members[i - 1].Flag & 0x4000) != 0)
                    {
                        align = true;
                    }
                    var size  = a_Stream.ReadInt32();
                    var array = AssetPreloadData.ReadArray(members, level, i);
                    for (int j = 0; j < size; j++)
                    {
                        ReadSerializedShader(array, a_Stream);
                    }
                    i += array.Count + 1;//skip
                }
                else
                {
                    align = false;
                }
                if (align)
                {
                    a_Stream.AlignStream(4);
                }
            }
            return(null);
        }
Exemplo n.º 18
0
        public PlayerSettings(AssetPreloadData preloadData)
        {
            var sourceFile = preloadData.sourceFile;
            var a_Stream   = preloadData.sourceFile.a_Stream;

            a_Stream.Position = preloadData.Offset;


            if ((sourceFile.version[0] == 5 && sourceFile.version[1] >= 4) || sourceFile.version[0] > 5)//5.4.0 nad up
            {
                //productGUID
                a_Stream.ReadInt32();
                a_Stream.ReadInt32();
                a_Stream.ReadInt32();
                a_Stream.ReadInt32();
            }
            if (sourceFile.version[0] >= 3)
            {
                if (sourceFile.version[0] == 3 && sourceFile.version[1] < 2)
                {
                    string AndroidLicensePublicKey = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
                }
                else
                {
                    bool AndroidProfiler = a_Stream.ReadBoolean(); a_Stream.AlignStream(4);
                }

                int defaultScreenOrientation = a_Stream.ReadInt32();
                int targetDevice             = a_Stream.ReadInt32();

                if (sourceFile.version[0] < 5 || (sourceFile.version[0] == 5 && sourceFile.version[1] < 1))
                {
                    int targetGlesGraphics = a_Stream.ReadInt32();
                }

                if ((sourceFile.version[0] == 5 && sourceFile.version[1] < 1) || (sourceFile.version[0] == 4 && sourceFile.version[1] == 6 && sourceFile.version[2] >= 3))
                {
                    int targetIOSGraphics = a_Stream.ReadInt32();
                }

                if (sourceFile.version[0] == 5 && (sourceFile.version[1] > 2 || (sourceFile.version[1] == 2 && sourceFile.version[2] >= 1)))
                {
                    bool useOnDemandResources = a_Stream.ReadBoolean(); a_Stream.AlignStream(4);
                }

                if (sourceFile.version[0] < 5 || (sourceFile.version[0] == 5 && sourceFile.version[1] < 3))
                {
                    int targetResolution = a_Stream.ReadInt32();
                }

                if (sourceFile.version[0] == 3 && sourceFile.version[1] <= 1)
                {
                    bool OverrideIPodMusic = a_Stream.ReadBoolean(); a_Stream.AlignStream(4);
                }
                else if (sourceFile.version[0] == 3 && sourceFile.version[1] <= 4)
                {
                }
                else
                {
                    int accelerometerFrequency = a_Stream.ReadInt32();
                }                                                          //3.5.0 and up
            }
            //fail in Unity 5 beta
            companyName = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
            productName = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
        }
Exemplo n.º 19
0
        public static bool TryGetPD(this List <AssetsFile> assetsfileList, PPtr m_elm, out AssetPreloadData result)
        {
            result = null;

            if (m_elm != null && m_elm.m_FileID >= 0 && m_elm.m_FileID < assetsfileList.Count)
            {
                AssetsFile sourceFile = assetsfileList[m_elm.m_FileID];

                //TryGetValue should be safe because m_PathID is 0 when initialized and PathID values range from 1
                if (sourceFile.preloadTable.TryGetValue(m_elm.m_PathID, out result))
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 20
0
        public AudioClip(AssetPreloadData preloadData, bool readSwitch)
        {
            var sourceFile = preloadData.sourceFile;
            var a_Stream   = preloadData.sourceFile.a_Stream;

            a_Stream.Position = preloadData.Offset;

            if (sourceFile.platform == -2)
            {
                uint m_ObjectHideFlags    = a_Stream.ReadUInt32();
                PPtr m_PrefabParentObject = sourceFile.ReadPPtr();
                PPtr m_PrefabInternal     = sourceFile.ReadPPtr();
            }

            m_Name = a_Stream.ReadAlignedString(a_Stream.ReadInt32());

            if (sourceFile.version[0] < 5)
            {
                m_Format           = a_Stream.ReadInt32(); //channels?
                m_Type             = a_Stream.ReadInt32();
                m_3D               = a_Stream.ReadBoolean();
                m_UseHardware      = a_Stream.ReadBoolean();
                a_Stream.Position += 2;                                                                       //4 byte alignment

                if (sourceFile.version[0] >= 4 || (sourceFile.version[0] == 3 && sourceFile.version[1] >= 2)) //3.2.0 to 5
                {
                    int m_Stream = a_Stream.ReadInt32();
                    m_Size = a_Stream.ReadInt32();
                    var asize = m_Size % 4 != 0 ? m_Size + 4 - m_Size % 4 : m_Size;
                    if (m_Stream > 1 && preloadData.Size + preloadData.Offset - a_Stream.Position > asize)
                    {
                        m_Offset = a_Stream.ReadInt32();
                        m_Source = sourceFile.filePath + ".resS";
                    }
                }
                else
                {
                    m_Size = a_Stream.ReadInt32();
                }
            }
            else
            {
                m_LoadType         = a_Stream.ReadInt32();//Decompress on load, Compressed in memory, Streaming
                m_Channels         = a_Stream.ReadInt32();
                m_Frequency        = a_Stream.ReadInt32();
                m_BitsPerSample    = a_Stream.ReadInt32();
                m_Length           = a_Stream.ReadSingle();
                m_IsTrackerFormat  = a_Stream.ReadBoolean();
                a_Stream.Position += 3;
                m_SubsoundIndex    = a_Stream.ReadInt32();
                m_PreloadAudioData = a_Stream.ReadBoolean();
                m_LoadInBackground = a_Stream.ReadBoolean();
                m_Legacy3D         = a_Stream.ReadBoolean();
                a_Stream.Position += 1;
                m_3D = m_Legacy3D;

                m_Source            = a_Stream.ReadAlignedString(a_Stream.ReadInt32());
                m_Source            = Path.Combine(Path.GetDirectoryName(sourceFile.filePath), m_Source.Replace("archive:/", ""));
                m_Offset            = a_Stream.ReadInt64();
                m_Size              = a_Stream.ReadInt64();
                m_CompressionFormat = a_Stream.ReadInt32();
            }

            if (readSwitch)
            {
                if (m_Source == null)
                {
                    m_AudioData = a_Stream.ReadBytes((int)m_Size);
                }
                else if (File.Exists(m_Source) ||
                         File.Exists(m_Source = Path.Combine(Path.GetDirectoryName(sourceFile.filePath), Path.GetFileName(m_Source))))
                {
                    BinaryReader reader = new BinaryReader(File.OpenRead(m_Source));
                    reader.BaseStream.Position = m_Offset;
                    m_AudioData = reader.ReadBytes((int)m_Size);
                    reader.Close();
                }
            }
            else
            {
                preloadData.InfoText = "Compression format: ";

                switch (m_Type)
                {
                case 2:
                    preloadData.extension = ".aif";
                    preloadData.InfoText += "AIFF";
                    break;

                case 13:
                    preloadData.extension = ".mp3";
                    preloadData.InfoText += "MP3";
                    break;

                case 14:
                    preloadData.extension = ".ogg";
                    preloadData.InfoText += "Ogg Vorbis";
                    break;

                case 20:
                    preloadData.extension = ".wav";
                    preloadData.InfoText += "WAV";
                    break;

                case 22:     //xbox encoding
                    preloadData.extension = ".wav";
                    preloadData.InfoText += "Xbox360 WAV";
                    break;
                }

                switch (m_CompressionFormat)
                {
                case 0:
                    preloadData.extension = ".fsb";
                    preloadData.InfoText += "PCM";
                    break;

                case 1:
                    preloadData.extension = ".fsb";
                    preloadData.InfoText += "Vorbis";
                    break;

                case 2:
                    preloadData.extension = ".fsb";
                    preloadData.InfoText += "ADPCM";
                    break;

                case 3:
                    preloadData.extension = ".fsb";
                    preloadData.InfoText += "MP3";    //not sure
                    break;

                case 7:
                    preloadData.extension = ".m4a";
                    preloadData.InfoText += "M4a";
                    break;
                }

                if (preloadData.extension == null)
                {
                    preloadData.extension = ".AudioClip";
                    preloadData.InfoText += "Unknown";
                }
                preloadData.InfoText += "\n3D: " + m_3D;

                if (m_Name != "")
                {
                    preloadData.Text = m_Name;
                }
                else
                {
                    preloadData.Text = preloadData.TypeString + " #" + preloadData.uniqueID;
                }
                preloadData.SubItems.AddRange(new[] { preloadData.TypeString, preloadData.Size.ToString() });
            }
        }
Exemplo n.º 21
0
        public AssetsFile(string fullName, EndianStream fileStream)
        {
            a_Stream = fileStream;
            filePath = fullName;
            fileName = Path.GetFileName(fullName);
            try
            {
                int tableSize = a_Stream.ReadInt32();
                int dataEnd   = a_Stream.ReadInt32();
                fileGen = a_Stream.ReadInt32();
                uint dataOffset = a_Stream.ReadUInt32();
                sharedAssetsList[0].fileName = Path.GetFileName(fullName); //reference itself because sharedFileIDs start from 1

                switch (fileGen)
                {
                case 6:     //2.5.0 - 2.6.1
                {
                    a_Stream.Position  = (dataEnd - tableSize);
                    a_Stream.Position += 1;
                    break;
                }

                case 7:     //3.0.0 beta
                {
                    a_Stream.Position  = (dataEnd - tableSize);
                    a_Stream.Position += 1;
                    m_Version          = a_Stream.ReadStringToNull();
                    break;
                }

                case 8:     //3.0.0 - 3.4.2
                {
                    a_Stream.Position  = (dataEnd - tableSize);
                    a_Stream.Position += 1;
                    m_Version          = a_Stream.ReadStringToNull();
                    platform           = a_Stream.ReadInt32();
                    break;
                }

                case 9:                     //3.5.0 - 4.6.x
                {
                    a_Stream.Position += 4; //azero
                    m_Version          = a_Stream.ReadStringToNull();
                    platform           = a_Stream.ReadInt32();
                    break;
                }

                case 14:                    //5.0.0 beta and final
                case 15:                    //5.0.1 - 5.4
                case 16:                    //??.. no sure
                case 17:                    //5.5.0 and up
                {
                    a_Stream.Position += 4; //azero
                    m_Version          = a_Stream.ReadStringToNull();
                    platform           = a_Stream.ReadInt32();
                    baseDefinitions    = a_Stream.ReadBoolean();
                    break;
                }

                default:
                {
                    //MessageBox.Show("Unsupported Unity version!" + fileGen, "Unity Studio Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                }

                if (platform > 255 || platform < 0)
                {
                    byte[] b32 = BitConverter.GetBytes(platform);
                    Array.Reverse(b32);
                    platform = BitConverter.ToInt32(b32, 0);
                    //endianType = EndianType.LittleEndian;
                    a_Stream.endian = EndianType.LittleEndian;
                }

                switch (platform)
                {
                case -2:
                    platformStr = "Unity Package";
                    break;

                case 4:
                    platformStr = "OSX";
                    break;

                case 5:
                    platformStr = "PC";
                    break;

                case 6:
                    platformStr = "Web";
                    break;

                case 7:
                    platformStr = "Web streamed";
                    break;

                case 9:
                    platformStr = "iOS";
                    break;

                case 10:
                    platformStr = "PS3";
                    break;

                case 11:
                    platformStr = "Xbox 360";
                    break;

                case 13:
                    platformStr = "Android";
                    break;

                case 16:
                    platformStr = "Google NaCl";
                    break;

                case 19:
                    platformStr = "CollabPreview";
                    break;

                case 21:
                    platformStr = "WP8";
                    break;

                case 25:
                    platformStr = "Linux";
                    break;

                case 29:
                    platformStr = "Wii U";
                    break;

                default:
                    platformStr = "Unknown Platform";
                    break;
                }

                int baseCount = a_Stream.ReadInt32();
                for (int i = 0; i < baseCount; i++)
                {
                    if (fileGen < 14)
                    {
                        int    classID  = a_Stream.ReadInt32();
                        string baseType = a_Stream.ReadStringToNull();
                        string baseName = a_Stream.ReadStringToNull();
                        a_Stream.Position += 20;
                        int memberCount = a_Stream.ReadInt32();

                        var cb = new List <ClassMember>();
                        for (int m = 0; m < memberCount; m++)
                        {
                            readBase(cb, 1);
                        }

                        var aClass = new ClassStruct()
                        {
                            ID = classID, Text = (baseType + " " + baseName), members = cb
                        };
                        aClass.SubItems.Add(classID.ToString());
                        ClassStructures.Add(classID, aClass);
                    }
                    else
                    {
                        readBase5();
                    }
                }

                if (fileGen >= 7 && fileGen < 14)
                {
                    a_Stream.Position += 4; //azero
                }

                int assetCount = a_Stream.ReadInt32();

                #region asset preload table
                string assetIDfmt = "D" + assetCount.ToString().Length; //format for unique ID

                for (int i = 0; i < assetCount; i++)
                {
                    //each table entry is aligned individually, not the whole table
                    if (fileGen >= 14)
                    {
                        a_Stream.AlignStream(4);
                    }

                    AssetPreloadData asset = new AssetPreloadData();
                    if (fileGen < 14)
                    {
                        asset.m_PathID = a_Stream.ReadInt32();
                    }
                    else
                    {
                        asset.m_PathID = a_Stream.ReadInt64();
                    }
                    asset.Offset  = a_Stream.ReadUInt32();
                    asset.Offset += dataOffset;
                    asset.Size    = a_Stream.ReadInt32();
                    if (fileGen > 15)
                    {
                        int index = a_Stream.ReadInt32();
                        asset.Type1 = classIDs[index][0];
                        asset.Type2 = (ushort)classIDs[index][1];
                    }
                    else
                    {
                        asset.Type1        = a_Stream.ReadInt32();
                        asset.Type2        = a_Stream.ReadUInt16();
                        a_Stream.Position += 2;
                    }
                    if (fileGen == 15)
                    {
                        byte unknownByte = a_Stream.ReadByte();
                        //this is a single byte, not an int32
                        //the next entry is aligned after this
                        //but not the last!
                        if (unknownByte != 0)
                        {
                            //bool investigate = true;
                        }
                    }

                    string typeString;
                    if (ClassIDReference.Names.TryGetValue(asset.Type2, out typeString))
                    {
                        asset.TypeString = typeString;
                    }
                    else
                    {
                        asset.TypeString = "Unknown Type " + asset.Type2;
                    }

                    asset.uniqueID = i.ToString(assetIDfmt);

                    asset.sourceFile = this;

                    preloadTable.Add(asset.m_PathID, asset);

                    #region read BuildSettings to get version for unity 2.x files
                    if (asset.Type2 == 141 && fileGen == 6)
                    {
                        long nextAsset = a_Stream.Position;

                        BuildSettings BSettings = new BuildSettings(asset);
                        m_Version = BSettings.m_Version;

                        a_Stream.Position = nextAsset;
                    }
                    #endregion
                }
                #endregion

                buildType = m_Version.Split(buildTypeSplit, StringSplitOptions.RemoveEmptyEntries);
                var strver = from Match m in Regex.Matches(m_Version, @"[0-9]") select m.Value;
                version = Array.ConvertAll(strver.ToArray(), int.Parse);
                if (version[0] == 2 && version[1] == 0 && version[2] == 1 && version[3] == 7)//2017.x
                {
                    var nversion = new int[version.Length - 3];
                    nversion[0] = 2017;
                    Array.Copy(version, 4, nversion, 1, version.Length - 4);
                    version = nversion;
                }
                if (fileGen >= 14)
                {
                    //this looks like a list of assets that need to be preloaded in memory before anytihng else
                    int someCount = a_Stream.ReadInt32();
                    for (int i = 0; i < someCount; i++)
                    {
                        int num1 = a_Stream.ReadInt32();
                        a_Stream.AlignStream(4);
                        long m_PathID = a_Stream.ReadInt64();
                    }
                }

                int sharedFileCount = a_Stream.ReadInt32();
                for (int i = 0; i < sharedFileCount; i++)
                {
                    UnityShared shared = new UnityShared();
                    shared.aName       = a_Stream.ReadStringToNull();
                    a_Stream.Position += 20;
                    string sharedFileName = a_Stream.ReadStringToNull(); //relative path
                    shared.fileName = sharedFileName.Replace("/", "\\");
                    sharedAssetsList.Add(shared);
                }
                valid = true;
            }
            catch
            {
            }
        }