예제 #1
0
                public override void Deserialize(IUnrealStream stream)
                {
                    // Property index
                    MemberProperty = Decompiler._Container.TryGetIndexObject(stream.ReadObjectIndex()) as UField;
                    Decompiler.AlignObjectSize();

                    // TODO: Corrigate version. Definitely didn't exist in Roboblitz(369)
                    if (stream.Version > 369)
                    {
                        // Struct index
                        stream.ReadObjectIndex();
                        Decompiler.AlignObjectSize();
#if MKKE
                        if (Package.Build != UnrealPackage.GameBuild.BuildName.MKKE)
                        {
#endif
                        stream.Position++;
                        Decompiler.AlignSize(sizeof(byte));
#if MKKE
                    }
#endif

                        // TODO: Corrigate version. Definitely didn't exist in MKKE(472), first seen in SWG(486).
                        if (stream.Version > 472)
                        {
                            stream.Position++;
                            Decompiler.AlignSize(sizeof(byte));
                        }
                    }
                    // Pre-Context
                    DeserializeNext();
                }
예제 #2
0
                public override void Deserialize(IUnrealStream stream)
                {
                    if (stream.Version >= 600)
                    {
                        // Points to the object that was passed to the switch,
                        // beware that the followed token chain contains it as well!
                        stream.ReadObjectIndex();
                        Decompiler.AlignObjectSize();
                    }

                    // TODO: Corrigate version
                    if (stream.Version >= 536 && stream.Version <= 587)
                    {
                        PropertyType = stream.ReadUInt16();
                        Decompiler.AlignSize(sizeof(ushort));
                    }
                    else
                    {
                        PropertyType = stream.ReadByte();
                        Decompiler.AlignSize(sizeof(byte));
                    }

                    // Expression
                    DeserializeNext();
                }
예제 #3
0
                public override void Deserialize(IUnrealStream stream)
                {
#if TRANSFORMERS
                    if (Package.Build == UnrealPackage.GameBuild.BuildName.Transformers)
                    {
                        PropertyType = stream.ReadUInt16();
                        Decompiler.AlignSize(sizeof(ushort));
                        goto deserialize;
                    }
#endif
                    if (stream.Version >= 600)
                    {
                        // Points to the object that was passed to the switch,
                        // beware that the followed token chain contains it as well!
                        stream.ReadObjectIndex();
                        Decompiler.AlignObjectSize();
                    }

                    // TODO: Corrigate version
                    if (stream.Version >= 536 && stream.Version <= 587)
                    {
                        PropertyType = stream.ReadUInt16();
                        Decompiler.AlignSize(sizeof(ushort));
                    }
                    else
                    {
                        PropertyType = stream.ReadByte();
                        Decompiler.AlignSize(sizeof(byte));
                    }

deserialize:
                    // Expression
                    DeserializeNext();
                }
예제 #4
0
                public override void Deserialize(IUnrealStream stream)
                {
                    var propertyAdded = stream.Version >= VSizeByteMoved;

                    // A.?
                    DeserializeNext();

                    // SkipSize
                    stream.ReadUInt16();
                    Decompiler.AlignSize(sizeof(ushort));

                    // Doesn't seem to exist in APB
                    if (propertyAdded)
                    {
                        // Property
                        stream.ReadObjectIndex();
                        Decompiler.AlignObjectSize();
                    }

                    // PropertyType
                    stream.ReadByte();
                    Decompiler.AlignSize(sizeof(byte));

                    // Additional byte in APB?
                    if (stream.Version > 512 && !propertyAdded)
                    {
                        stream.ReadByte();
                        Decompiler.AlignSize(sizeof(byte));
                    }

                    // ?.B
                    DeserializeNext();
                }
예제 #5
0
                public override void Deserialize( IUnrealStream stream )
                {
                    stream.ReadObjectIndex();
                    Decompiler.AlignObjectSize();

                    DeserializeNext();
                    // ==
                    DeserializeNext();
                }
예제 #6
0
                public override void Deserialize(IUnrealStream stream)
                {
                    stream.ReadObjectIndex();
                    Decompiler.AlignObjectSize();

                    DeserializeNext();
                    // ==
                    DeserializeNext();
                }
예제 #7
0
                public override void Deserialize( IUnrealStream stream )
                {
                    // TODO: Corrigate version.
                    if( stream.Version <= 300 )
                        return;

                    _ReturnObject = Decompiler._Container.TryGetIndexObject( stream.ReadObjectIndex() );
                    Decompiler.AlignObjectSize();
                }
예제 #8
0
            public void Deserialize( IUnrealStream stream )
            {
                Class = stream.ReadObjectIndex();

                // Deep
                stream.ReadInt32();

                // ScriptTextCRC
                stream.ReadUInt32();
            }
            public void Deserialize(IUnrealStream stream)
            {
                Class = stream.ReadObjectIndex();

                // Deep
                stream.ReadInt32();

                // ScriptTextCRC
                stream.ReadUInt32();
            }
예제 #10
0
                public override void Deserialize(IUnrealStream stream)
                {
                    // TODO: Corrigate version.
                    if (stream.Version <= 300)
                    {
                        return;
                    }

                    _ReturnObject = Decompiler._Container.TryGetIndexObject(stream.ReadObjectIndex());
                    Decompiler.AlignObjectSize();
                }
예제 #11
0
                public override void Deserialize(IUnrealStream stream)
                {
                    // TODO: Corrigate Version(Lowest known version 369(Roboblitz))
                    if (stream.Version > 300)
                    {
                        stream.ReadObjectIndex();
                        Decompiler.AlignObjectSize();
                    }

                    // The Field
                    DeserializeNext();
                }
예제 #12
0
 public void Deserialize( IUnrealStream stream )
 {
     if( stream.Version <= 540 )
     {
         // e.g. Core.Object.X
         FieldName = stream.ReadText();
     }
     else
     {
         FieldIndex = stream.ReadObjectIndex();
     }
     MetaTags = new UArray<UMetaTag>();
     MetaTags.Deserialize( stream, tag => tag.Owner = Owner );
 }
예제 #13
0
 public void Deserialize(IUnrealStream stream)
 {
     if (stream.Version <= 540)
     {
         // e.g. Core.Object.X
         FieldName = stream.ReadText();
     }
     else
     {
         FieldIndex = stream.ReadObjectIndex();
     }
     MetaTags = new UArray <UMetaTag>();
     MetaTags.Deserialize(stream, tag => tag.Owner = Owner);
 }
예제 #14
0
                public override void Deserialize(IUnrealStream stream)
                {
                    // TODO: Corrigate Version
                    if (stream.Version > 180)
                    {
                        ++stream.Position;  // ReadByte()
                        Decompiler.AlignSize(sizeof(byte));
                    }

                    // Delegate object index
                    stream.ReadObjectIndex();
                    Decompiler.AlignObjectSize();

                    // Delegate name index
                    FunctionNameIndex = stream.ReadNameIndex();
                    Decompiler.AlignNameSize();

                    DeserializeCall();
                }
예제 #15
0
                public override void Deserialize( IUnrealStream stream )
                {
                    // TODO: Corrigate Version
                    if( stream.Version > 180 )
                    {
                        ++ stream.Position; // ReadByte()
                        Decompiler.AlignSize( sizeof(byte) );
                    }

                    // Delegate object index
                    stream.ReadObjectIndex();
                    Decompiler.AlignObjectSize();

                    // Delegate name index
                    FunctionNameIndex = stream.ReadNameIndex();
                    Decompiler.AlignNameSize();

                    DeserializeCall();
                }
예제 #16
0
                public override void Deserialize( IUnrealStream stream )
                {
                    var propertyAdded = stream.Version >= VSizeByteMoved
#if TERA
                        && stream.Package.Build != UnrealPackage.GameBuild.BuildName.Tera
#endif
#if TRANSFORMERS
                        && stream.Package.Build != UnrealPackage.GameBuild.BuildName.Transformers
#endif
                        ; 

                    // A.?
                    DeserializeNext();

                    // SkipSize
                    stream.ReadUInt16();
                    Decompiler.AlignSize( sizeof(ushort) );

                    // Doesn't seem to exist in APB
                    if( propertyAdded )
                    {
                        // Property
                        stream.ReadObjectIndex();
                        Decompiler.AlignObjectSize();
                    }

                    // PropertyType
                    stream.ReadByte();
                    Decompiler.AlignSize( sizeof(byte) );

                    // Additional byte in APB?
                    if( stream.Version > 512 && !propertyAdded )
                    {
                        stream.ReadByte();
                        Decompiler.AlignSize( sizeof(byte) );
                    }

                    // ?.B
                    DeserializeNext();
                }
예제 #17
0
                public override void Deserialize(IUnrealStream stream)
                {
                    var propertyAdded = stream.Version >= VSizeByteMoved
#if TERA
                                        && stream.Package.Build != UnrealPackage.GameBuild.BuildName.Tera
#endif
#if TRANSFORMERS
                                        && stream.Package.Build != UnrealPackage.GameBuild.BuildName.Transformers
#endif
                    ;

                    // A.?
                    DeserializeNext();

                    // SkipSize
                    stream.ReadUInt16();
                    Decompiler.AlignSize(sizeof(ushort));

                    // Doesn't seem to exist in APB
                    if (propertyAdded)
                    {
                        // Property
                        stream.ReadObjectIndex();
                        Decompiler.AlignObjectSize();
                    }

                    // PropertyType
                    stream.ReadByte();
                    Decompiler.AlignSize(sizeof(byte));

                    // Additional byte in APB?
                    if (stream.Version > 512 && !propertyAdded)
                    {
                        stream.ReadByte();
                        Decompiler.AlignSize(sizeof(byte));
                    }

                    // ?.B
                    DeserializeNext();
                }
예제 #18
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
            }
        }
예제 #19
0
 public override void Deserialize( IUnrealStream stream )
 {
     Object = Decompiler._Container.TryGetIndexObject( stream.ReadObjectIndex() );
     Decompiler.AlignObjectSize();
 }
예제 #20
0
                public override void Deserialize( IUnrealStream stream )
                {
                    if( stream.Version >= 600 )
                    {
                        // Points to the object that was passed to the switch,
                        // beware that the followed token chain contains it as well!
                        stream.ReadObjectIndex();
                        Decompiler.AlignObjectSize();
                    }

                    // TODO: Corrigate version
                    if( stream.Version >= 536 && stream.Version <= 587 )
                    {
                        PropertyType = stream.ReadUInt16();
                        Decompiler.AlignSize( sizeof(ushort) );
                    }
                    else
                    {
                        PropertyType = stream.ReadByte();
                        Decompiler.AlignSize( sizeof(byte) );
                    }

                    // Expression
                    DeserializeNext();
                }
예제 #21
0
 public override void Deserialize(IUnrealStream stream)
 {
     Object = Decompiler._Container.TryGetIndexObject(stream.ReadObjectIndex());
     Decompiler.AlignObjectSize();
 }
예제 #22
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
            }
        }
예제 #23
0
                public override void Deserialize( IUnrealStream stream )
                {
                    // TODO: Corrigate Version(Lowest known version 369(Roboblitz))
                    if( stream.Version > 300 )
                    {
                        stream.ReadObjectIndex();
                        Decompiler.AlignObjectSize();
                    }

                    // The Field
                    DeserializeNext();
                }
예제 #24
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
            }
        }
예제 #25
0
                public override void Deserialize( IUnrealStream stream )
                {
#if TRANSFORMERS
                    if( Package.Build == UnrealPackage.GameBuild.BuildName.Transformers )
                    {
                        PropertyType = stream.ReadUInt16();
                        Decompiler.AlignSize( sizeof(ushort) );
                        goto deserialize;
                    }
#endif
                    if( stream.Version >= 600 )
                    {
                        // Points to the object that was passed to the switch,
                        // beware that the followed token chain contains it as well!
                        stream.ReadObjectIndex();
                        Decompiler.AlignObjectSize();
                    }

                    // TODO: Corrigate version
                    if( stream.Version >= 536 && stream.Version <= 587 )
                    {
                        PropertyType = stream.ReadUInt16();
                        Decompiler.AlignSize( sizeof(ushort) );
                    }
                    else
                    {
                        PropertyType = stream.ReadByte();
                        Decompiler.AlignSize( sizeof(byte) );
                    }

                deserialize:
                    // Expression
                    DeserializeNext();
                }
예제 #26
0
                public override void Deserialize( IUnrealStream stream )
                {
                    // Property index
                    MemberProperty = Decompiler._Container.TryGetIndexObject( stream.ReadObjectIndex() ) as UField;
                    Decompiler.AlignObjectSize();

                    // TODO: Corrigate version. Definitely didn't exist in Roboblitz(369)
                    if( stream.Version > 369 )
                    {
                        // Struct index
                        stream.ReadObjectIndex();
                        Decompiler.AlignObjectSize();
#if MKKE
                        if( Package.Build != UnrealPackage.GameBuild.BuildName.MKKE )
                        {
#endif
                            stream.Position ++;
                            Decompiler.AlignSize( sizeof(byte) );
#if MKKE
                        }
#endif

                        // TODO: Corrigate version. Definitely didn't exist in MKKE(472), first seen in SWG(486).
                        if( stream.Version > 472 )
                        {
                            stream.Position ++;
                            Decompiler.AlignSize( sizeof(byte) );
                        }
                    }
                    // Pre-Context
                    DeserializeNext();
                }