Esempio n. 1
0
        public override void Deserialize(FAssetArchive Ar, long validPos)
        {
            base.Deserialize(Ar, validPos);
            SuperStruct = new FPackageIndex(Ar);
            if (Ar.Game == EGame.GAME_SOD2)
            {
                Ar.Position += 4; //var someScriptImport = new FPackageIndex(Ar);
            }

            if (FFrameworkObjectVersion.Get(Ar) < FFrameworkObjectVersion.Type.RemoveUField_Next)
            {
                var firstChild = new FPackageIndex(Ar);
                Children = firstChild.IsNull ? Array.Empty <FPackageIndex>() : new[] { firstChild };
            }
            else
            {
                Children = Ar.ReadArray(() => new FPackageIndex(Ar));
            }

            if (FCoreObjectVersion.Get(Ar) >= FCoreObjectVersion.Type.FProperties)
            {
                DeserializeProperties(Ar);
            }

            var bytecodeBufferSize   = Ar.Read <int>();
            var serializedScriptSize = Ar.Read <int>();

            Ar.Position += serializedScriptSize; // should we read the bytecode some day?
        }
Esempio n. 2
0
        public override void Deserialize(FAssetArchive Ar, long validPos)
        {
            base.Deserialize(Ar, validPos);
            SuperStruct = new FPackageIndex(Ar);
            if (FFrameworkObjectVersion.Get(Ar) < FFrameworkObjectVersion.Type.RemoveUField_Next)
            {
                var firstChild = new FPackageIndex(Ar);
                Children = firstChild.IsNull ? Array.Empty<FPackageIndex>() : new[] { firstChild };
            }
            else
            {
                Children = Ar.ReadArray(() => new FPackageIndex(Ar));
            }

            if (FCoreObjectVersion.Get(Ar) >= FCoreObjectVersion.Type.FProperties)
            {
                DeserializeProperties(Ar);
            }

            var bytecodeBufferSize = Ar.Read<int>();
            var serializedScriptSize = Ar.Read<int>();
            if (Ar.Owner.Provider?.ReadScriptData == true)
            {
                Script = Ar.ReadBytes(serializedScriptSize);
            }
            else
            {
                Ar.Position += serializedScriptSize;
            }
        }
Esempio n. 3
0
        public FPackageIndex?Next;  // UField

        public override void Deserialize(FAssetArchive Ar, long validPos)
        {
            base.Deserialize(Ar, validPos);
            if (FFrameworkObjectVersion.Get(Ar) < FFrameworkObjectVersion.Type.RemoveUField_Next)
            {
                Next = new FPackageIndex(Ar);
            }
        }
Esempio n. 4
0
        public override void Deserialize(FAssetArchive Ar, long validPos)
        {
            base.Deserialize(Ar, validPos);

            if (FFrameworkObjectVersion.Get(Ar) >= FFrameworkObjectVersion.Type.HardSoundReferences)
            {
                SoundWave = new FPackageIndex(Ar);
            }
        }
        public FExpressionInput(FAssetArchive Ar)
        {
            /*if (FCoreObjectVersion.Get(Ar) < FCoreObjectVersion.Type.MaterialInputNativeSerialize)
             * {
             *  // TODO use property serialization instead
             * }*/

            OutputIndex = Ar.Read <int>();
            InputName   = FFrameworkObjectVersion.Get(Ar) >= FFrameworkObjectVersion.Type.PinsStoreFName ? Ar.ReadFName() : new FName(Ar.ReadFString());
            Mask        = Ar.Read <int>();
            MaskR       = Ar.Read <int>();
            MaskG       = Ar.Read <int>();
            MaskB       = Ar.Read <int>();
            MaskA       = Ar.Read <int>();
            if (Ar.Owner.HasFlags(EPackageFlags.PKG_FilterEditorOnly))
            {
                ExpressionName = Ar.ReadFName();
            }
        }
Esempio n. 6
0
        public override void Deserialize(FAssetArchive Ar, long validPos)
        {
            base.Deserialize(Ar, validPos);
            bStreaming = Ar.Game >= EGame.GAME_UE4_25;
            if (TryGetValue(out bool s, nameof(bStreaming))) // will return false if not found
            {
                bStreaming = s;
            }
            else if (TryGetValue(out FName loadingBehavior, "LoadingBehavior"))
            {
                bStreaming = !loadingBehavior.IsNone && loadingBehavior.Text != "ESoundWaveLoadingBehavior::ForceInline";
            }

            bCooked = Ar.ReadBoolean();

            if (Ar.Ver >= UE4Version.VER_UE4_SOUND_COMPRESSION_TYPE_ADDED && FFrameworkObjectVersion.Get(Ar) < FFrameworkObjectVersion.Type.RemoveSoundWaveCompressionName)
            {
                Ar.Read <FName>(); // DummyCompressionName
            }

            if (!bStreaming)
            {
                if (bCooked)
                {
                    CompressedFormatData = new FFormatContainer(Ar);
                }
                else
                {
                    RawData = new FByteBulkData(Ar);
                }

                CompressedDataGuid = Ar.Read <FGuid>();
            }
            else
            {
                CompressedDataGuid  = Ar.Read <FGuid>();
                RunningPlatformData = new FStreamedAudioPlatformData(Ar);
            }
        }
        public FSmartNameMapping(FArchive Ar)
        {
            var frwObjVer = FFrameworkObjectVersion.Get(Ar);
            var frwAniVer = FAnimPhysObjectVersion.Get(Ar);

            if (frwObjVer >= FFrameworkObjectVersion.Type.SmartNameRefactor)
            {
                if (frwAniVer < FAnimPhysObjectVersion.Type.SmartNameRefactorForDeterministicCooking)
                {
                    var mapLength = Ar.Read <int>();
                    GuidMap = new Dictionary <FName, FGuid>(mapLength);
                    for (var i = 0; i < mapLength; i++)
                    {
                        GuidMap[Ar.ReadFName()] = Ar.Read <FGuid>();
                    }
                }
            }
            else if (Ar.Ver >= UE4Version.VER_UE4_SKELETON_ADD_SMARTNAMES)
            {
                Ar.Read <ushort>();
                var mapLength = Ar.Read <int>();
                UidMap = new Dictionary <ushort, FName>(mapLength);
                for (int i = 0; i < mapLength; i++)
                {
                    UidMap[Ar.Read <ushort>()] = Ar.ReadFName();
                }
            }

            if (frwObjVer >= FFrameworkObjectVersion.Type.MoveCurveTypesToSkeleton)
            {
                var mapLength = Ar.Read <int>();
                CurveMetaDataMap = new Dictionary <FName, FCurveMetaData>(mapLength);
                for (var i = 0; i < mapLength; i++)
                {
                    CurveMetaDataMap[Ar.ReadFName()] = new FCurveMetaData(Ar, frwAniVer);
                }
            }
        }
Esempio n. 8
0
        public override void Deserialize(FAssetArchive Ar, long validPos)
        {
            base.Deserialize(Ar, validPos);

            NumFrames = GetOrDefault <int>(nameof(NumFrames));
            BoneCompressionSettings          = GetOrDefault <ResolvedObject>(nameof(BoneCompressionSettings));
            CurveCompressionSettings         = GetOrDefault <ResolvedObject>(nameof(CurveCompressionSettings));
            AdditiveAnimType                 = GetOrDefault <EAdditiveAnimationType>(nameof(AdditiveAnimType));
            RetargetSource                   = GetOrDefault <FName>(nameof(RetargetSource));
            RetargetSourceAssetReferencePose = GetOrDefault <FTransform[]>(nameof(RetargetSourceAssetReferencePose));

            if (BoneCompressionSettings == null && Ar.Game == EGame.GAME_RogueCompany)
            {
                BoneCompressionSettings = new ResolvedLoadedObject(Owner !.Provider !.LoadObject("/Game/Animation/KSAnimBoneCompressionSettings.KSAnimBoneCompressionSettings"));
            }

            var stripFlags = new FStripDataFlags(Ar);

            if (!stripFlags.IsEditorDataStripped())
            {
                RawAnimationData = Ar.ReadArray(() => new FRawAnimSequenceTrack(Ar));
                if (Ar.Ver >= EUnrealEngineObjectUE4Version.ANIMATION_ADD_TRACKCURVES)
                {
                    if (FUE5MainStreamObjectVersion.Get(Ar) < FUE5MainStreamObjectVersion.Type.RemovingSourceAnimationData)
                    {
                        var sourceRawAnimationData = Ar.ReadArray(() => new FRawAnimSequenceTrack(Ar));
                        if (sourceRawAnimationData.Length > 0)
                        {
                            // Set RawAnimationData to Source
                            RawAnimationData = sourceRawAnimationData;
                        }
                    }
                }
            }

            if (FFrameworkObjectVersion.Get(Ar) < FFrameworkObjectVersion.Type.MoveCompressedAnimDataToTheDDC)
            {
                var compressedData = new FUECompressedAnimData();
                CompressedDataStructure = compressedData;

                // Part of data were serialized as properties
                compressedData.CompressedByteStream = Ar.ReadBytes(Ar.Read <int>());
                if (Ar.Game == EGame.GAME_SeaOfThieves && compressedData.CompressedByteStream.Length == 1 && Ar.Length - Ar.Position > 0)
                {
                    // Sea of Thieves has extra int32 == 1 before the CompressedByteStream
                    Ar.Position -= 1;
                    compressedData.CompressedByteStream = Ar.ReadBytes(Ar.Read <int>());
                }

                // Fix layout of "byte swapped" data (workaround for UE4 bug)
                if (compressedData.KeyEncodingFormat == AnimationKeyFormat.AKF_PerTrackCompression && compressedData.CompressedScaleOffsets.OffsetData.Length > 0)
                {
                    compressedData.CompressedByteStream = TransferPerTrackData(compressedData.CompressedByteStream);
                }
            }
            else
            {
                // UE4.12+
                var bSerializeCompressedData = Ar.ReadBoolean();

                if (bSerializeCompressedData)
                {
                    if (Ar.Game < EGame.GAME_UE4_23)
                    {
                        SerializeCompressedData(Ar);
                    }
                    else if (Ar.Game < EGame.GAME_UE4_25)
                    {
                        SerializeCompressedData2(Ar);
                    }
                    else
                    {
                        SerializeCompressedData3(Ar);
                    }

                    bUseRawDataOnly = Ar.ReadBoolean();
                }
            }
        }
Esempio n. 9
0
        public FStructFallback CompressedCurveData;                     // FRawCurveTracks

        public override void Deserialize(FAssetArchive Ar, long validPos)
        {
            base.Deserialize(Ar, validPos);
            var stripFlags = new FStripDataFlags(Ar);

            if (!stripFlags.IsEditorDataStripped())
            {
                RawAnimationData = Ar.ReadArray(() => new FRawAnimSequenceTrack(Ar));
                if (Ar.Ver >= UE4Version.VER_UE4_ANIMATION_ADD_TRACKCURVES)
                {
                    //if (FUE5MainStreamObjectVersion.Get(Ar) < FUE5MainStreamObjectVersion.Type.RemovingSourceAnimationData)
                    //{
                    var sourceRawAnimationData = Ar.ReadArray(() => new FRawAnimSequenceTrack(Ar));
                    //}
                }
            }

            if (FFrameworkObjectVersion.Get(Ar) < FFrameworkObjectVersion.Type.MoveCompressedAnimDataToTheDDC)
            {
                /*// Part of data were serialized as properties
                 * CompressedByteStream = Ar.ReadArray<byte>();
                 * if (Ar.Game == EGame.GAME_SEAOFTHIEVES && CompressedByteStream.Num() == 1 && Ar.Length - Ar.Position > 0)
                 * {
                 *  // Sea of Thieves has extra int32 == 1 before the CompressedByteStream
                 *  Ar.Position -= 1;
                 *  CompressedByteStream = Ar.ReadArray<byte>();
                 * }
                 *
                 * // Fix layout of "byte swapped" data (workaround for UE4 bug)
                 * if (KeyEncodingFormat == AnimationKeyFormat.AKF_PerTrackCompression && CompressedScaleOffsets.OffsetData.Length > 0)
                 * {
                 *  TArray<uint8> SwappedData;
                 *  TransferPerTrackData(SwappedData, CompressedByteStream);
                 *  Exchange(SwappedData, CompressedByteStream);
                 * }*/
                throw new NotImplementedException();
            }
            else
            {
                // UE4.12+
                var bSerializeCompressedData = Ar.ReadBoolean();

                if (bSerializeCompressedData)
                {
                    if (Ar.Game < EGame.GAME_UE4_23)
                    {
                        SerializeCompressedData(Ar);
                    }
                    else if (Ar.Game < EGame.GAME_UE4_25)
                    {
                        SerializeCompressedData2(Ar);
                    }
                    else
                    {
                        SerializeCompressedData3(Ar);
                    }

                    bUseRawDataOnly = Ar.ReadBoolean();
                }
            }
        }