コード例 #1
0
ファイル: UStruct.cs プロジェクト: zeya-anwar/Unreal-Library
        protected override void Deserialize()
        {
            base.Deserialize();

            // --SuperField
            if (!Package.IsConsoleCooked())
            {
                ScriptText = _Buffer.ReadObject() as UTextBuffer;
                Record("ScriptText", ScriptText);
            }

            Children = _Buffer.ReadObject() as UField;
            Record("Children", Children);

            if (Package.Version < VFriendlyNameMoved)
            {
                // Moved to UFunction in UE3
                FriendlyName = _Buffer.ReadNameReference();
                Record("FriendlyName", FriendlyName);
            }

            if (Package.Version >= VStructFlags)
            {
                if (Package.Version >= VCppText && !Package.IsConsoleCooked()
#if VANGUARD
                    && Package.Build.Name != UnrealPackage.GameBuild.BuildName.Vanguard
#endif
                    )
                {
                    CppText = _Buffer.ReadObject() as UTextBuffer;
                    Record("CppText", CppText);
                }

                if (Package.Version < VStructFlagsMoved)
                {
                    StructFlags = _Buffer.ReadUInt32();
                    Record("StructFlags", (StructFlags)StructFlags);

                    // Note: Bioshock inherits from the SWAT4's UE2 build.
#if BIOSHOCK
                    if (Package.Build == UnrealPackage.GameBuild.BuildName.Bioshock)
                    {
                        // TODO: Unknown data, might be related to the above Swat4 data.
                        var unknown = _Buffer.ReadObjectIndex();
                        Record("???", TryGetIndexObject(unknown));
                    }
#endif
                    // This is high likely to be only for "Irrational Games" builds.
                    if (Package.Version >= VProcessedText
#if VANGUARD
                        && Package.Build.Name != UnrealPackage.GameBuild.BuildName.Vanguard
#endif
                        )
                    {
                        ProcessedText = _Buffer.ReadObject() as UTextBuffer;
                        Record("ProcessedText", ProcessedText);
                    }
                }
            }

            if (!Package.IsConsoleCooked())
            {
                Line = _Buffer.ReadInt32();
                Record("Line", Line);
                TextPos = _Buffer.ReadInt32();
                Record("TextPos", TextPos);
            }

#if TRANSFORMERS
            if (Package.Build == UnrealPackage.GameBuild.BuildName.Transformers)
            {
                // The line where the struct's code body ends.
                _Buffer.Skip(4);
            }
#endif

            ByteScriptSize = _Buffer.ReadInt32();
            Record("ByteScriptSize", ByteScriptSize);
            const int vDataScriptSize    = 639;
            var       hasFixedScriptSize = Package.Version >= vDataScriptSize
                #if TRANSFORMERS
                                           && Package.Build != UnrealPackage.GameBuild.BuildName.Transformers
                #endif
            ;
            if (hasFixedScriptSize)
            {
                DataScriptSize = _Buffer.ReadInt32();
                Record("DataScriptSize", DataScriptSize);
            }
            else
            {
                DataScriptSize = ByteScriptSize;
            }
            ScriptOffset = _Buffer.Position;

            // Code Statements
            if (DataScriptSize <= 0)
            {
                return;
            }

            ByteCodeManager = new UByteCodeDecompiler(this);
            if (hasFixedScriptSize)
            {
                _Buffer.Skip(DataScriptSize);
            }
            else
            {
                const int moonbaseVersion      = 587;
                const int shadowcomplexVersion = 590;
                const int mohaVersion          = 421;

                var isTrueScriptSize = Package.Version == mohaVersion ||
                                       (
                    Package.Version >= UnrealPackage.VINDEXDEPRECATED &&
                    (Package.Version <moonbaseVersion && Package.Version> shadowcomplexVersion)
                                       );
                if (isTrueScriptSize)
                {
                    _Buffer.Skip(DataScriptSize);
                }
                else
                {
                    ByteCodeManager.Deserialize();
                }
            }
        }
コード例 #2
0
ファイル: UStruct.cs プロジェクト: jjbott/Unreal-Library
        protected override void Deserialize()
        {
            base.Deserialize();

            // --SuperField
            if( !Package.IsConsoleCooked() )
            {
                ScriptText = _Buffer.ReadObject() as UTextBuffer;
                Record( "ScriptText", ScriptText );
            }

            Children = _Buffer.ReadObject() as UField;
            Record( "Children", Children );

            if( Package.Version < VFriendlyNameMoved )
            {
                // Moved to UFunction in UE3
                FriendlyName = _Buffer.ReadNameReference();
                Record( "FriendlyName", FriendlyName );
            }

            if( Package.Version >= VStructFlags )
            {
                if( Package.Version >= VCppText && !Package.IsConsoleCooked()
#if VANGUARD
                    && Package.Build.Name != UnrealPackage.GameBuild.BuildName.Vanguard
#endif
                    )
                {
                    CppText = _Buffer.ReadObject() as UTextBuffer;
                    Record( "CppText", CppText );
                }

                if( Package.Version < VStructFlagsMoved )
                {
                    StructFlags = _Buffer.ReadUInt32();
                    Record( "StructFlags", (StructFlags)StructFlags );

                    // Note: Bioshock inherits from the SWAT4's UE2 build.
#if BIOSHOCK
                    if( Package.Build == UnrealPackage.GameBuild.BuildName.Bioshock )
                    {
                        // TODO: Unknown data, might be related to the above Swat4 data.
                        var unknown = _Buffer.ReadObjectIndex();
                        Record( "???", TryGetIndexObject( unknown ) );
                    }
#endif
                    // This is high likely to be only for "Irrational Games" builds.
                    if( Package.Version >= VProcessedText
#if VANGUARD
                        && Package.Build.Name != UnrealPackage.GameBuild.BuildName.Vanguard
#endif
                        )
                    {
                        ProcessedText = _Buffer.ReadObject() as UTextBuffer;
                        Record( "ProcessedText", ProcessedText );
                    }
                }
            }

            if( !Package.IsConsoleCooked() )
            {
                Line = _Buffer.ReadInt32();
                Record( "Line", Line );
                TextPos = _Buffer.ReadInt32();
                Record( "TextPos", TextPos );
            }

#if TRANSFORMERS
            if( Package.Build == UnrealPackage.GameBuild.BuildName.Transformers )
            {
                // The line where the struct's code body ends.
                _Buffer.Skip( 4 );
            }
#endif

            ByteScriptSize = _Buffer.ReadInt32();
            Record( "ByteScriptSize", ByteScriptSize );
            const int vDataScriptSize = 639;
            var hasFixedScriptSize = Package.Version >= vDataScriptSize
                #if TRANSFORMERS
                    && Package.Build != UnrealPackage.GameBuild.BuildName.Transformers 
                #endif
            ;
            if( hasFixedScriptSize )
            {
                DataScriptSize = _Buffer.ReadInt32();
                Record( "DataScriptSize", DataScriptSize );
            }
            else
            {
                DataScriptSize = ByteScriptSize;
            }
            ScriptOffset = _Buffer.Position;

            // Code Statements
            if( DataScriptSize <= 0 )
                return;

            ByteCodeManager = new UByteCodeDecompiler( this );
            if( hasFixedScriptSize )
            {
                _Buffer.Skip( DataScriptSize );
            }
            else
            {
                const int moonbaseVersion = 587;
                const int shadowcomplexVersion = 590;
                const int mohaVersion = 421;

                var isTrueScriptSize = Package.Version == mohaVersion ||
                (
                    Package.Version >= UnrealPackage.VINDEXDEPRECATED
                    && (Package.Version < moonbaseVersion && Package.Version > shadowcomplexVersion )
                );
                if( isTrueScriptSize )
                {
                    _Buffer.Skip( DataScriptSize );
                }
                else
                {
                    ByteCodeManager.Deserialize();
                }
            }
        }
コード例 #3
0
ファイル: UStruct.cs プロジェクト: Longi94/Unreal-Library
        protected override void Deserialize()
        {
            base.Deserialize();

            // --SuperField
            if (!Package.IsConsoleCooked())
            {
                ScriptText = _Buffer.ReadObject() as UTextBuffer;
                Record("ScriptText", ScriptText);
            }

            Children = _Buffer.ReadObject() as UField;
            Record("Children", Children);

            if (Package.Version < VFriendlyNameMoved)
            {
                // Moved to UFunction in UE3
                FriendlyName = _Buffer.ReadNameReference();
                Record("FriendlyName", FriendlyName);
            }

            if (Package.Version >= VStructFlags)
            {
                if (Package.Version >= VCppText && !Package.IsConsoleCooked())
                {
                    CppText = _Buffer.ReadObject() as UTextBuffer;
                    Record("CppText", CppText);
                }

                if (Package.Version < VStructFlagsMoved)
                {
                    StructFlags = _Buffer.ReadUInt32();
                    Record("StructFlags", (StructFlags)StructFlags);


                    // This is high likely to be only for "Irrational Games" builds.
                    if (Package.Version >= VProcessedText)
                    {
                        ProcessedText = _Buffer.ReadObject() as UTextBuffer;
                        Record("ProcessedText", ProcessedText);
                    }
                }
            }

            if (!Package.IsConsoleCooked())
            {
                Line = _Buffer.ReadInt32();
                Record("Line", Line);
                TextPos = _Buffer.ReadInt32();
                Record("TextPos", TextPos);
            }

            ByteScriptSize = _Buffer.ReadInt32();
            Record("ByteScriptSize", ByteScriptSize);
            const int vDataScriptSize    = 639;
            var       hasFixedScriptSize = Package.Version >= vDataScriptSize;

            if (hasFixedScriptSize)
            {
                DataScriptSize = _Buffer.ReadInt32();
                Record("DataScriptSize", DataScriptSize);
            }
            else
            {
                DataScriptSize = ByteScriptSize;
            }
            ScriptOffset = _Buffer.Position;

            // Code Statements
            if (DataScriptSize <= 0)
            {
                return;
            }

            ByteCodeManager = new UByteCodeDecompiler(this);
            if (hasFixedScriptSize)
            {
                _Buffer.Skip(DataScriptSize);
            }
            else
            {
                const int moonbaseVersion      = 587;
                const int shadowcomplexVersion = 590;
                const int mohaVersion          = 421;

                var isTrueScriptSize = Package.Version == mohaVersion ||
                                       (
                    Package.Version >= UnrealPackage.VINDEXDEPRECATED &&
                    (Package.Version <moonbaseVersion && Package.Version> shadowcomplexVersion)
                                       );
                if (isTrueScriptSize)
                {
                    _Buffer.Skip(DataScriptSize);
                }
                else
                {
                    ByteCodeManager.Deserialize();
                }
            }
        }