示例#1
0
 public void Deserialize(IUnrealStream stream)
 {
     UncompressedOffset = stream.ReadInt32();
     UncompressedSize   = stream.ReadInt32();
     CompressedOffset   = stream.ReadInt32();
     CompressedSize     = stream.ReadInt32();
 }
 public void Deserialize( IUnrealStream stream )
 {
     UncompressedOffset = stream.ReadInt32();
     UncompressedSize = stream.ReadInt32();
     CompressedOffset = stream.ReadInt32();
     CompressedSize = stream.ReadInt32();
 }
示例#3
0
                public void Deserialize(IUnrealStream stream)
                {
                    _CompressedSize   = stream.ReadInt32();
                    _UncompressedSize = stream.ReadInt32();

                    _CompressedData = new byte[_CompressedSize];
                    stream.Read(_CompressedData, 0, _CompressedSize);
                }
示例#4
0
 public override void Deserialize(IUnrealStream stream)
 {
     Value.Pitch = stream.ReadInt32();
     Decompiler.AlignSize(sizeof(int));
     Value.Yaw = stream.ReadInt32();
     Decompiler.AlignSize(sizeof(int));
     Value.Roll = stream.ReadInt32();
     Decompiler.AlignSize(sizeof(int));
 }
 public void Deserialize(IUnrealStream stream)
 {
     ExportsCount = stream.ReadInt32();
     NamesCount   = stream.ReadInt32();
     if (stream.Version >= VNetObjectsCount)
     {
         NetObjectsCount = stream.ReadInt32();
     }
 }
示例#6
0
            public void Deserialize(IUnrealStream stream)
            {
                _StartU = stream.ReadInt32();
                _StartV = stream.ReadInt32();

                _USize = stream.ReadInt32();
                _VSize = stream.ReadInt32();

                _TextureIndex = stream.ReadByte();
            }
示例#7
0
            public void Deserialize( IUnrealStream stream )
            {
                _StartU = stream.ReadInt32();
                _StartV = stream.ReadInt32();

                _USize = stream.ReadInt32();
                _VSize = stream.ReadInt32();

                _TextureIndex = stream.ReadByte();
            }
示例#8
0
 public override void Deserialize(IUnrealStream stream)
 {
     // Version
     stream.ReadInt32();
     // Line
     stream.ReadInt32();
     // Pos
     stream.ReadInt32();
     // Code
     stream.ReadByte();
     Decompiler.AlignSize(13);
 }
            public void Deserialize( IUnrealStream stream )
            {
                _Signature = stream.ReadUInt32();
                if( _Signature != UnrealPackage.Signature )
                {
                    throw new System.IO.FileLoadException( "Unrecognized signature!" );
                }
                _BlockSize = stream.ReadInt32();
                _CompressedSize = stream.ReadInt32();
                _UncompressedSize = stream.ReadInt32();

                int blockCount = (int)Math.Ceiling( _UncompressedSize / (float)_BlockSize );
                Blocks = new UArray<CompressedChunkBlock>( stream, blockCount );
            }
        public void Deserialize( IUnrealStream stream )
        {
#if APB
            if( stream.Package.Build == UnrealPackage.GameBuild.BuildName.APB && stream.Package.LicenseeVersion >= 32 )
            {
                stream.Skip( 16 );
            }
#endif
            ExportsCount = stream.ReadInt32();
            NamesCount = stream.ReadInt32();
            if( stream.Version >= VNetObjectsCount )
            {
                NetObjectsCount = stream.ReadInt32();
            }
        }
示例#11
0
            public void Deserialize(IUnrealStream stream)
            {
                _Signature = stream.ReadUInt32();
                if (_Signature != UnrealPackage.Signature)
                {
                    throw new System.IO.FileLoadException("Unrecognized signature!");
                }
                _BlockSize        = stream.ReadInt32();
                _CompressedSize   = stream.ReadInt32();
                _UncompressedSize = stream.ReadInt32();

                int blockCount = (int)Math.Ceiling(_UncompressedSize / (float)_BlockSize);

                Blocks = new UArray <CompressedChunkBlock>(stream, blockCount);
            }
示例#12
0
        public void Deserialize(IUnrealStream stream)
        {
#if APB
            if (stream.Package.Build == UnrealPackage.GameBuild.BuildName.APB && stream.Package.LicenseeVersion >= 32)
            {
                stream.Skip(16);
            }
#endif
            ExportsCount = stream.ReadInt32();
            NamesCount   = stream.ReadInt32();
            if (stream.Version >= VNetObjectsCount)
            {
                NetObjectsCount = stream.ReadInt32();
            }
        }
 public static void Deserialize(this List <int> indexes, IUnrealStream stream)
 {
     indexes.Capacity = stream.ReadInt32();
     for (int i = 0; i < indexes.Capacity; ++i)
     {
         indexes.Add(stream.ReadIndex());
     }
 }
示例#14
0
 public void Deserialize(IUnrealStream stream)
 {
     Log.Debug($"Reading import {Index} at {stream.Position}");
     PackageName = stream.ReadNameReference();
     _ClassName  = stream.ReadNameReference();
     ClassIndex  = (int)_ClassName;
     OuterIndex  = stream.ReadInt32();         // ObjectIndex, though always written as 32bits regardless of build.
     ObjectName  = stream.ReadNameReference();
 }
示例#15
0
 public void Deserialize( IUnrealStream stream )
 {
     Console.WriteLine( "Reading import " + Index + " at " + stream.Position );
     PackageName         = stream.ReadNameReference();
     _ClassName          = stream.ReadNameReference();
     ClassIndex         = (int)_ClassName;
     OuterIndex          = stream.ReadInt32(); // ObjectIndex, though always written as 32bits regardless of build.
     ObjectName          = stream.ReadNameReference();
 }
示例#16
0
 public void Deserialize(IUnrealStream stream)
 {
     Console.WriteLine("Reading import " + Index + " at " + stream.Position);
     PackageName = stream.ReadNameReference();
     _ClassName  = stream.ReadNameReference();
     ClassIndex  = (int)_ClassName;
     OuterIndex  = stream.ReadInt32();         // ObjectIndex, though always written as 32bits regardless of build.
     ObjectName  = stream.ReadNameReference();
 }
            public void Deserialize(IUnrealStream stream)
            {
                Class = stream.ReadObjectIndex();

                // Deep
                stream.ReadInt32();

                // ScriptTextCRC
                stream.ReadUInt32();
            }
示例#18
0
            public void Deserialize( IUnrealStream stream )
            {
                Class = stream.ReadObjectIndex();

                // Deep
                stream.ReadInt32();

                // ScriptTextCRC
                stream.ReadUInt32();
            }
示例#19
0
            public void Deserialize(IUnrealStream stream)
            {
                if (stream.Version >= 63)
                {
                    // Offset to (Width = ...)
                    WidthOffset = stream.ReadUInt32();

                    long opos = stream.Position;
                    stream.Seek(WidthOffset, System.IO.SeekOrigin.Begin);
                    Width  = stream.ReadUInt32();
                    Height = stream.ReadUInt32();
                    stream.Seek(opos, System.IO.SeekOrigin.Begin);
                }

                int mipMapSize = stream.ReadIndex();

                Pixels = new int[mipMapSize];
                switch (Owner._Format.Decompile().Substring(6))
                {
                case "TEXF_RGBA8":
                case "5":
                    for (int i = 0; i < mipMapSize; ++i)
                    {
                        Pixels[i] = stream.ReadInt32();
                    }
                    break;

                case "TEXF_DXT1":
                case "3":
                    for (int i = 0; i < mipMapSize / 2; ++i)
                    {
                        byte c = stream.ReadByte();
                        Pixels[i++] = c & 0xF0;
                        Pixels[i]   = c & 0x0F;
                    }

                    // PostProcess:
                    // 4x4 4bit per pixel, 16bit per color: 5bits red; 6bits green; 5bits blue.
                    //
                    break;
                }

                // Width, Height. See above!
                stream.Skip(8);
                BitsWidth  = stream.ReadByte();
                BitsHeight = stream.ReadByte();
            }
示例#20
0
            public void Deserialize( IUnrealStream stream )
            {
                if( stream.Version >= 63 )
                {
                    // Offset to (Width = ...)
                    WidthOffset = stream.ReadUInt32();

                    long opos = stream.Position;
                    stream.Seek( WidthOffset, System.IO.SeekOrigin.Begin );
                    Width = stream.ReadUInt32();
                    Height = stream.ReadUInt32();
                    stream.Seek( opos, System.IO.SeekOrigin.Begin );
                }

                int mipMapSize = stream.ReadIndex();
                Pixels = new int[mipMapSize];
                switch( Owner._Format.Decompile().Substring( 6 ) )
                {
                    case "TEXF_RGBA8": case "5":
                        for( int i = 0; i < mipMapSize; ++ i )
                        {
                            Pixels[i] = stream.ReadInt32();
                        }
                        break;

                    case "TEXF_DXT1": case "3":
                        for( int i = 0; i < mipMapSize / 2; ++ i )
                        {
                            byte c = stream.ReadByte();
                            Pixels[i ++] = c & 0xF0;
                            Pixels[i] = c & 0x0F;
                        }

                        // PostProcess:
                        // 4x4 4bit per pixel, 16bit per color: 5bits red; 6bits green; 5bits blue.
                        //
                        break;
                }

                // Width, Height. See above!
                stream.Skip( 8 );
                BitsWidth = stream.ReadByte();
                BitsHeight = stream.ReadByte();
            }
示例#21
0
        //public Dictionary<int, int> Components;
        //public List<int> NetObjects;
        #endregion

        // @Warning - Only supports Official builds.
        public void Serialize( IUnrealStream stream )
        {
            stream.Write( ClassTable.Object );
            stream.Write( SuperTable.Object );
            stream.Write( (int)OuterTable.Object );

            stream.Write( ObjectName );

            if( stream.Version >= VArchetype )
            {
                ArchetypeIndex = stream.ReadInt32();
            }
            stream.UW.Write( stream.Version >= VObjectFlagsToULONG ? ObjectFlags : (uint)ObjectFlags );
            stream.WriteIndex( SerialSize );    // Assumes SerialSize has been updated to @Object's buffer size.
            if( SerialSize > 0 || stream.Version >= VSerialSizeConditionless )
            {
                // SerialOffset has to be set and written after this object has been serialized.
                stream.WriteIndex( SerialOffset );  // Assumes the same as @SerialSize comment.
            }

            // TODO: Continue.
        }
示例#22
0
        //public Dictionary<int, int> Components;
        //public List<int> NetObjects;
        #endregion

        // @Warning - Only supports Official builds.
        public void Serialize(IUnrealStream stream)
        {
            stream.Write(ClassTable.Object);
            stream.Write(SuperTable.Object);
            stream.Write((int)OuterTable.Object);

            stream.Write(ObjectName);

            if (stream.Version >= VArchetype)
            {
                ArchetypeIndex = stream.ReadInt32();
            }
            stream.UW.Write(stream.Version >= VObjectFlagsToULONG ? ObjectFlags : (uint)ObjectFlags);
            stream.WriteIndex(SerialSize);      // Assumes SerialSize has been updated to @Object's buffer size.
            if (SerialSize > 0 || stream.Version >= VSerialSizeConditionless)
            {
                // SerialOffset has to be set and written after this object has been serialized.
                stream.WriteIndex(SerialOffset);    // Assumes the same as @SerialSize comment.
            }

            // TODO: Continue.
        }
示例#23
0
        public void Deserialize(IUnrealStream stream)
        {
#if DCUO
            if (stream.Package.Build == UnrealPackage.GameBuild.BuildName.DCUO)
            {
                //DCUO doesn't null terminate name table entries
                int size     = stream.ReadInt32();
                var strBytes = new byte[size];
                stream.Read(strBytes, 0, size);
                if (stream.BigEndianCode)
                {
                    Array.Reverse(strBytes);
                }
                Name = System.Text.Encoding.ASCII.GetString(strBytes);
            }
            else
            {
#endif
            Name = stream.ReadText();
#if DCUO
        }
#endif
            Flags = stream.Version >= QWORDVersion?stream.ReadUInt64() : stream.ReadUInt32();

#if DEOBFUSCATE
            // De-obfuscate names that contain unprintable characters!
            foreach (char c in Name)
            {
                if (!char.IsLetterOrDigit(c))
                {
                    Name = "N" + TableIndex + "_OBF";
                    break;
                }
            }
#endif
        }
            public void Deserialize(IUnrealStream stream)
            {
                if (stream.Version <= 540)
                {
                    // e.g. Core.Object.X
                    _FieldName = stream.ReadText();
                }
                else
                {
                    // TODO: Possibly linked to a non-ufield?
                    _Field          = (UField)stream.ReadObject();
                    _Field.MetaData = this;
                }

                int length = stream.ReadInt32();

                Tags = new Dictionary <string, string>(length);
                for (var i = 0; i < length; ++i)
                {
                    var    key   = stream.ReadNameReference();
                    string value = stream.ReadText();
                    Tags.Add(key.Name, value);
                }
            }
示例#25
0
                public override void Deserialize(IUnrealStream stream)
                {
                    var label    = String.Empty;
                    int labelPos = -1;

                    do
                    {
                        if (label != String.Empty)
                        {
                            Decompiler._Labels.Add
                            (
                                new ULabelEntry
                            {
                                Name     = label,
                                Position = labelPos
                            }
                            );
                        }
                        label = stream.ReadName();
                        Decompiler.AlignNameSize();
                        labelPos = stream.ReadInt32();
                        Decompiler.AlignSize(sizeof(int));
                    } while(String.Compare(label, "None", StringComparison.OrdinalIgnoreCase) != 0);
                }
示例#26
0
        public void Deserialize(IUnrealStream stream)
        {
            ClassIndex = stream.ReadObjectIndex();
            SuperIndex = stream.ReadObjectIndex();
            OuterIndex = stream.ReadInt32();      // ObjectIndex, though always written as 32bits regardless of build.
#if BIOSHOCK
            if (stream.Package.Build == UnrealPackage.GameBuild.BuildName.Bioshock && stream.Version >= 132)
            {
                stream.Skip(sizeof(int));
            }
#endif
            ObjectName = stream.ReadNameReference();

            if (stream.Version >= VArchetype)
            {
                ArchetypeIndex = stream.ReadInt32();
            }

            _ObjectFlagsOffset = stream.Position;
            ObjectFlags        = stream.ReadUInt32();
            if (stream.Version >= VObjectFlagsToULONG
#if BIOSHOCK
                || (stream.Package.Build == UnrealPackage.GameBuild.BuildName.Bioshock && stream.Package.LicenseeVersion >= 40)
#endif
                )
            {
                ObjectFlags = (ObjectFlags << 32) | stream.ReadUInt32();
            }

            SerialSize = stream.ReadIndex();
            if (SerialSize > 0 || stream.Version >= VSerialSizeConditionless)
            {
                SerialOffset = stream.ReadIndex();
            }
#if BIOSHOCK
            if (stream.Package.Build == UnrealPackage.GameBuild.BuildName.Bioshock && stream.Version >= 130)
            {
                stream.Skip(sizeof(int));
            }
#endif
            if (stream.Version < 220)
            {
                return;
            }

            if (stream.Version < 543
#if ALPHAPROTOCOL
                && stream.Package.Build != UnrealPackage.GameBuild.BuildName.AlphaProtcol
#endif
                )
            {
                int componentMapCount = stream.ReadInt32();
                stream.Skip(componentMapCount * 12);
                //if( componentMapCount > 0 )
                //{
                //    Components = new Dictionary<int, int>( componentMapCount );
                //    for( int i = 0; i < componentMapCount; ++ i )
                //    {
                //        Components.Add( stream.ReadNameIndex(), stream.ReadObjectIndex() );
                //    }
                //}
            }

            if (stream.Version < 247)
            {
                return;
            }

            ExportFlags = stream.ReadUInt32();
            if (stream.Version < 322)
            {
                return;
            }
#if BIOSHOCK
            if (stream.Package.Build == UnrealPackage.GameBuild.BuildName.Bioshock_Infinite)
            {
                var unk = stream.ReadUInt32();
                if (unk == 1)
                {
                    var flags = stream.ReadUInt32();
                    if ((flags & 1) != 0x0)
                    {
                        stream.ReadUInt32();
                    }
                    stream.Skip(16);     // guid
                    stream.ReadUInt32(); // 01000020
                }
                return;
            }
#endif
#if MKKE
            if (stream.Package.Build != UnrealPackage.GameBuild.BuildName.MKKE)
            {
#endif
            int netObjectCount = stream.ReadInt32();
            stream.Skip(netObjectCount * 4);
            //if( netObjectCount > 0 )
            //{
            //    NetObjects = new List<int>( netObjectCount );
            //    for( int i = 0; i < netObjectCount; ++ i )
            //    {
            //        NetObjects.Add( stream.ReadObjectIndex() );
            //    }
            //}
#if MKKE
        }
#endif
            stream.Skip(16);          // Package guid
            if (stream.Version > 486) // 475?  486(> Stargate Worlds)
            {
                stream.Skip(4);       // Package flags
            }
        }
示例#27
0
 public override void Deserialize( IUnrealStream stream )
 {
     // Version
     stream.ReadInt32();
     // Line
     stream.ReadInt32();
     // Pos
     stream.ReadInt32();
     // Code
     stream.ReadByte();
     Decompiler.AlignSize( 13 );
 }
示例#28
0
        public void Deserialize(IUnrealStream stream)
        {
            ClassIndex = stream.ReadObjectIndex();
            SuperIndex = stream.ReadObjectIndex();
            OuterIndex = stream.ReadInt32();      // ObjectIndex, though always written as 32bits regardless of build.

            ObjectName = stream.ReadNameReference();

            if (stream.Version >= VArchetype)
            {
                ArchetypeIndex = stream.ReadInt32();
            }

            _ObjectFlagsOffset = stream.Position;
            ObjectFlags        = stream.ReadUInt64();
            //if( stream.Version >= VObjectFlagsToULONG )
            //{
            //    //ObjectFlags = (ObjectFlags << 32) | stream.ReadUInt32();
            //    ObjectFlags = (ObjectFlags << 32) | stream.ReadUInt64();
            //}

            SerialSize   = stream.ReadIndex();
            SerialOffset = (int)stream.ReadInt64();


            if (stream.Version < 220)
            {
                return;
            }

            if (stream.Version < 543)
            {
                int componentMapCount = stream.ReadInt32();
                stream.Skip(componentMapCount * 12);
                //if( componentMapCount > 0 )
                //{
                //    Components = new Dictionary<int, int>( componentMapCount );
                //    for( int i = 0; i < componentMapCount; ++ i )
                //    {
                //        Components.Add( stream.ReadNameIndex(), stream.ReadObjectIndex() );
                //    }
                //}
            }

            if (stream.Version < 247)
            {
                return;
            }

            ExportFlags = stream.ReadUInt32();
            if (stream.Version < 322)
            {
                return;
            }

            int netObjectCount = stream.ReadInt32();

            stream.Skip(netObjectCount * 4);
            //if( netObjectCount > 0 )
            //{
            //    NetObjects = new List<int>( netObjectCount );
            //    for( int i = 0; i < netObjectCount; ++ i )
            //    {
            //        NetObjects.Add( stream.ReadObjectIndex() );
            //    }
            //}

            stream.Skip(16);          // Package guid
            if (stream.Version > 486) // 475?  486(> Stargate Worlds)
            {
                stream.Skip(4);       // Package flags
            }
        }
示例#29
0
        public void Deserialize( IUnrealStream stream )
        {
            ClassIndex      = stream.ReadObjectIndex();
            SuperIndex      = stream.ReadObjectIndex();
            OuterIndex      = stream.ReadInt32(); // ObjectIndex, though always written as 32bits regardless of build.
#if BIOSHOCK
            if( stream.Package.Build == UnrealPackage.GameBuild.BuildName.Bioshock && stream.Version >= 132 )
            {
                stream.Skip( sizeof(int) );
            }
#endif
            ObjectName  = stream.ReadNameReference();

            if( stream.Version >= VArchetype )
            {
                ArchetypeIndex = stream.ReadInt32();
            }

            _ObjectFlagsOffset = stream.Position;
            ObjectFlags = stream.ReadUInt32();
            if( stream.Version >= VObjectFlagsToULONG
#if BIOSHOCK
                || (stream.Package.Build == UnrealPackage.GameBuild.BuildName.Bioshock && stream.Package.LicenseeVersion >= 40)
#endif
                )
            {
                ObjectFlags = (ObjectFlags << 32) | stream.ReadUInt32();
            }

            SerialSize = stream.ReadIndex();
            if( SerialSize > 0 || stream.Version >= VSerialSizeConditionless )
            {
                SerialOffset = stream.ReadIndex();
            }
#if BIOSHOCK
            if( stream.Package.Build == UnrealPackage.GameBuild.BuildName.Bioshock && stream.Version >= 130 )
            {
                stream.Skip( sizeof(int) );
            }
#endif
            if( stream.Version < 220 )
                return;

            if( stream.Version < 543
#if ALPHAPROTOCOL
                && stream.Package.Build != UnrealPackage.GameBuild.BuildName.AlphaProtcol
#endif
#if TRANSFORMERS
                && (stream.Package.Build != UnrealPackage.GameBuild.BuildName.Transformers || stream.Package.LicenseeVersion < 37)
#endif
                )
            {
                int componentMapCount = stream.ReadInt32();
                stream.Skip( componentMapCount * 12 );
                //if( componentMapCount > 0 )
                //{
                //    Components = new Dictionary<int, int>( componentMapCount );
                //    for( int i = 0; i < componentMapCount; ++ i )
                //    {
                //        Components.Add( stream.ReadNameIndex(), stream.ReadObjectIndex() );
                //    }
                //}
            }

            if( stream.Version < 247 )
                return;

            ExportFlags = stream.ReadUInt32();
            if( stream.Version < 322 )
                return;
#if TRANSFORMERS
            if( stream.Package.Build == UnrealPackage.GameBuild.BuildName.Transformers && stream.Package.LicenseeVersion >= 116 )
            {
                var flag = stream.ReadByte();
                if( flag == 0 )
                {
                    return;
                }
            }
#endif
#if BIOSHOCK
            if( stream.Package.Build == UnrealPackage.GameBuild.BuildName.Bioshock_Infinite )
            {
                var unk = stream.ReadUInt32();
                if( unk == 1 )
                {
                    var flags = stream.ReadUInt32();
                    if( (flags & 1) != 0x0 )
                    {
                        stream.ReadUInt32();
                    }
                    stream.Skip( 16 );  // guid
                    stream.ReadUInt32();    // 01000020
                }
                return;
            }
#endif
#if MKKE
            if( stream.Package.Build != UnrealPackage.GameBuild.BuildName.MKKE )
            {            
#endif
                int netObjectCount = stream.ReadInt32();
                stream.Skip( netObjectCount * 4 );
                //if( netObjectCount > 0 )
                //{
                //    NetObjects = new List<int>( netObjectCount );
                //    for( int i = 0; i < netObjectCount; ++ i )
                //    {
                //        NetObjects.Add( stream.ReadObjectIndex() );
                //    }
                //}
#if MKKE
            }
#endif
            stream.Skip( 16 );  // Package guid
            if( stream.Version > 486 )  // 475?  486(> Stargate Worlds)
            {
                stream.Skip( 4 ); // Package flags
            }
        }
示例#30
0
 public override void Deserialize(IUnrealStream stream)
 {
     LocalIndex = stream.ReadInt32();
     Decompiler.AlignSize(sizeof(int));
 }
                public void Deserialize( IUnrealStream stream )
                {
                    _CompressedSize = stream.ReadInt32();
                    _UncompressedSize = stream.ReadInt32();

                    _CompressedData = new byte[_CompressedSize];
                    stream.Read( _CompressedData, 0, _CompressedSize );
                }
示例#32
0
 public override void Deserialize( IUnrealStream stream )
 {
     var label = String.Empty;
     int labelPos = -1;
     do
     {
         if( label != String.Empty )
         {
             Decompiler._Labels.Add
             (
                 new ULabelEntry
                 {
                     Name = label,
                     Position = labelPos
                 }
             );
         }
         label = stream.ReadName();
         Decompiler.AlignNameSize();
         labelPos = stream.ReadInt32();
         Decompiler.AlignSize( sizeof(int) );
     } while( String.Compare( label, "None", StringComparison.OrdinalIgnoreCase ) != 0 );
 }
示例#33
0
 public override void Deserialize( IUnrealStream stream )
 {
     Value = stream.ReadInt32();
     Decompiler.AlignSize( sizeof(int) );
 }