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? }
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; } }
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); } }
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(); } }
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); } } }
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(); } } }
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(); } } }