From 46ab528421d5024e4daf69e990e131e27d817828 Mon Sep 17 00:00:00 2001 From: Chompster86 Date: Fri, 21 Aug 2026 15:26:56 -0400 Subject: [PATCH 1/8] UE6 / The Finals / Rogue Company fixes + UGeometryCollection preview/export + UEFormat v10 Co-authored-by: Asval --- CUE4Parse | 2 +- FModel/Creator/Bases/FN/BaseIcon.cs | 7 +++-- FModel/Creator/CreatorPackage.cs | 5 ++++ FModel/ViewModels/CUE4ParseViewModel.cs | 3 ++ FModel/ViewModels/GameFileViewModel.cs | 2 +- FModel/ViewModels/GameSelectorViewModel.cs | 4 +-- FModel/Views/Snooper/Models/StaticModel.cs | 7 +++++ FModel/Views/Snooper/Renderer.cs | 34 ++++++++++++++++++++-- 8 files changed, 55 insertions(+), 9 deletions(-) diff --git a/CUE4Parse b/CUE4Parse index c99a1d6d..83200c61 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit c99a1d6dfc269281c2a7bf4dc36f8664dd8791e6 +Subproject commit 83200c61e66048ef5e17d7ffdd5092a1f53cac03 diff --git a/FModel/Creator/Bases/FN/BaseIcon.cs b/FModel/Creator/Bases/FN/BaseIcon.cs index cd57824c..5b79b834 100644 --- a/FModel/Creator/Bases/FN/BaseIcon.cs +++ b/FModel/Creator/Bases/FN/BaseIcon.cs @@ -32,6 +32,7 @@ public class BaseIcon : UCreator // rarity if (Object.TryGetValue(out FPackageIndex series, "Series")) GetSeries(series); else if (Object.TryGetValue(out FStructFallback componentContainer, "ComponentContainer")) GetSeries(componentContainer); + else if (Object.TryGetValue(out EFortRarity hackRarity, "HackRarity")) GetRarity(hackRarity); else GetRarity(Object.GetOrDefault("Rarity", EFortRarity.Uncommon)); // default is uncommon if (Object.TryGetValue(out FInstancedStruct[] dataList, "DataList")) @@ -48,7 +49,7 @@ public class BaseIcon : UCreator Preview = preview; else if (Object.TryGetValue(out FPackageIndex itemDefinition, "HeroDefinition", "WeaponDefinition")) Preview = Utils.GetBitmap(itemDefinition); - else if (Object.TryGetValue(out FSoftObjectPath largePreview, "LargePreviewImage", "EntryListIcon", "SmallPreviewImage", "BundleImage", "ItemDisplayAsset", "LargeIcon", "ToastIcon", "SmallIcon")) + else if (Object.TryGetValue(out FSoftObjectPath largePreview, "LargePreviewImage", "EntryListIcon", "SmallPreviewImage", "BundleImage", "ItemDisplayAsset", "LargeIcon", "ToastIcon", "SmallIcon", "CartridgeIcon", "EffectIcon")) Preview = Utils.GetBitmap(largePreview); else if (Object.TryGetValue(out string s, "LargePreviewImage") && !string.IsNullOrEmpty(s)) Preview = Utils.GetBitmap(s); @@ -66,9 +67,9 @@ public class BaseIcon : UCreator } // text - if (Object.TryGetValue(out FText displayName, "DisplayName", "ItemName", "BundleName", "DefaultHeaderText", "UIDisplayName", "EntryName", "EventCalloutTitle")) + if (Object.TryGetValue(out FText displayName, "DisplayName", "ItemName", "BundleName", "DefaultHeaderText", "UIDisplayName", "EntryName", "EventCalloutTitle", "KeyName", "HackDisplayName")) DisplayName = displayName.Text; - if (Object.TryGetValue(out FText description, "Description", "ItemDescription", "SetDescription", "BundleDescription", "GeneralDescription", "DefaultBodyText", "UIDescription", "UIDisplayDescription", "EntryDescription", "EventCalloutDescription")) + if (Object.TryGetValue(out FText description, "Description", "ItemDescription", "SetDescription", "BundleDescription", "GeneralDescription", "DefaultBodyText", "UIDescription", "UIDisplayDescription", "EntryDescription", "EventCalloutDescription", "KeyDescription", "HackDescription")) Description = description.Text; else if (Object.TryGetValue(out FText[] descriptions, "Description")) Description = string.Join('\n', descriptions.Select(x => x.Text)); diff --git a/FModel/Creator/CreatorPackage.cs b/FModel/Creator/CreatorPackage.cs index 82f81427..aea95e5f 100644 --- a/FModel/Creator/CreatorPackage.cs +++ b/FModel/Creator/CreatorPackage.cs @@ -65,6 +65,7 @@ public class CreatorPackage : IDisposable case "AthenaEmojiItemDefinition": case "AthenaItemWrapDefinition": case "AthenaToyItemDefinition": + case "FortHackData": case "FortHeroType": case "FortTokenType": case "FortAbilityKit": @@ -72,7 +73,9 @@ public class CreatorPackage : IDisposable case "FortMissionInfo": case "RewardGraphToken": case "JunoKnowledgeBundle": + case "FortHackDataMinimal": case "FortBannerTokenType": + case "FortHackKeyCoreData": case "FortVariantTokenType": case "FortDecoItemDefinition": case "FortStatItemDefinition": @@ -88,6 +91,7 @@ public class CreatorPackage : IDisposable case "SparksBassItemDefinition": case "FortGadgetItemDefinition": case "AthenaCharmItemDefinition": + case "FortHackKeyItemDefinition": case "FortPlaysetItemDefinition": case "FortGiftBoxItemDefinition": case "FortOutpostItemDefinition": @@ -124,6 +128,7 @@ public class CreatorPackage : IDisposable case "JunoRecipeBundleItemDefinition": case "FortHomebaseNodeItemDefinition": case "FortNeverPersistItemDefinition": + case "FortHackCartridgeItemDefinition": case "FortPlayerAugmentItemDefinition": case "FortSmartBuildingItemDefinition": case "FortGiftBoxUnlockItemDefinition": diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index 528e01fd..6740a50d 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -69,6 +69,7 @@ using CUE4Parse.UE4.Wwise; using CUE4Parse.Utils; using CUE4Parse_Conversion.Exporters; using CUE4Parse_Conversion.Sounds; +using CUE4Parse.UE4.Assets.Exports.GeometryCollection; using EpicManifestParser; using EpicManifestParser.UE; using FModel.Creator; @@ -1561,6 +1562,7 @@ public class CUE4ParseViewModel : ViewModel // }: case UPaperSprite when isNone && UserSettings.Default.PreviewMaterials: case UStaticMesh when isNone && UserSettings.Default.PreviewStaticMeshes: + case UGeometryCollection when isNone && UserSettings.Default.PreviewStaticMeshes: case USkeletalMesh when isNone && UserSettings.Default.PreviewSkeletalMeshes: case USkeleton when isNone && UserSettings.Default.SaveSkeletonAsMesh: case UMaterialInstance when isNone && UserSettings.Default.PreviewMaterials && !ModelIsOverwritingMaterial && @@ -1587,6 +1589,7 @@ public class CUE4ParseViewModel : ViewModel return true; } case UStaticMesh when HasFlag(bulk, EBulkType.Meshes): + case UGeometryCollection when HasFlag(bulk, EBulkType.Meshes): case USkeletalMesh when HasFlag(bulk, EBulkType.Meshes): case USkeleton when UserSettings.Default.SaveSkeletonAsMesh && HasFlag(bulk, EBulkType.Meshes): // case UMaterialInterface when HasFlag(bulk, EBulkType.Materials): diff --git a/FModel/ViewModels/GameFileViewModel.cs b/FModel/ViewModels/GameFileViewModel.cs index 57a9456c..361fa995 100644 --- a/FModel/ViewModels/GameFileViewModel.cs +++ b/FModel/ViewModels/GameFileViewModel.cs @@ -219,7 +219,7 @@ public class GameFileViewModel(GameFile asset) : ViewModel USkeletalMesh => (EAssetCategory.SkeletalMesh, EBulkType.Meshes), UCustomizableObject => (EAssetCategory.CustomizableObject, EBulkType.None), UNaniteDisplacedMesh => (EAssetCategory.NaniteDisplacedMesh, EBulkType.None), - UGeometryCollection => (EAssetCategory.GeometryCollection, EBulkType.None), + UGeometryCollection => (EAssetCategory.GeometryCollection, EBulkType.Meshes), UTexture => (EAssetCategory.Texture, EBulkType.Textures), diff --git a/FModel/ViewModels/GameSelectorViewModel.cs b/FModel/ViewModels/GameSelectorViewModel.cs index 6447e2d7..d49d77f4 100644 --- a/FModel/ViewModels/GameSelectorViewModel.cs +++ b/FModel/ViewModels/GameSelectorViewModel.cs @@ -196,8 +196,8 @@ public class GameSelectorViewModel : ViewModel .OrderBy(value => ((int)value & 0xFF) == 0); private IEnumerable EnumerateDetectedGames() { - yield return GetUnrealEngineGame("Fortnite", "\\FortniteGame\\Content\\Paks", EGame.GAME_UE5_8); - yield return DirectorySettings.Default("Fortnite [LIVE]", Constants._FN_LIVE_TRIGGER, ue: EGame.GAME_UE5_8); + yield return GetUnrealEngineGame("Fortnite", "\\FortniteGame\\Content\\Paks", EGame.GAME_UE6_0); + yield return DirectorySettings.Default("Fortnite [LIVE]", Constants._FN_LIVE_TRIGGER, ue: EGame.GAME_UE6_0); yield return GetUnrealEngineGame("Pewee", "\\RogueCompany\\Content\\Paks", EGame.GAME_RogueCompany); yield return GetUnrealEngineGame("Rosemallow", "\\Indiana\\Content\\Paks", EGame.GAME_UE4_21); yield return GetUnrealEngineGame("Catnip", "\\OakGame\\Content\\Paks", EGame.GAME_Borderlands3); diff --git a/FModel/Views/Snooper/Models/StaticModel.cs b/FModel/Views/Snooper/Models/StaticModel.cs index e32e655c..d0fba195 100644 --- a/FModel/Views/Snooper/Models/StaticModel.cs +++ b/FModel/Views/Snooper/Models/StaticModel.cs @@ -1,6 +1,7 @@ using System; using System.Numerics; using CUE4Parse_Conversion.Dto; +using CUE4Parse.UE4.Assets.Exports.GeometryCollection; using CUE4Parse.UE4.Assets.Exports.Material; using CUE4Parse.UE4.Assets.Exports.StaticMesh; using CUE4Parse.UE4.Assets.Exports.Texture; @@ -143,6 +144,12 @@ public class StaticModel : UModel } } + public StaticModel(UGeometryCollection export, StaticMeshDto staticMesh, Transform transform = null) + : base(export, staticMesh.LODs[LodLevel], export.Materials, staticMesh.LODs[LodLevel].Vertices, staticMesh.LODs.Count, transform) + { + Box = staticMesh.Bounds * Constants.SCALE_DOWN_RATIO; + } + public override void RenderCollision(Shader shader) { base.RenderCollision(shader); diff --git a/FModel/Views/Snooper/Renderer.cs b/FModel/Views/Snooper/Renderer.cs index 9bd26581..f49b2edd 100644 --- a/FModel/Views/Snooper/Renderer.cs +++ b/FModel/Views/Snooper/Renderer.cs @@ -5,6 +5,7 @@ using System.Numerics; using System.Threading; using System.Windows; using CUE4Parse_Conversion.Animations; +using CUE4Parse_Conversion.Dto; using CUE4Parse_Conversion.Meshes; using CUE4Parse_Conversion.Options; using CUE4Parse.UE4.Assets.Exports; @@ -29,6 +30,7 @@ using FModel.Views.Snooper.Lights; using FModel.Views.Snooper.Models; using FModel.Views.Snooper.Shading; using OpenTK.Windowing.GraphicsLibraryFramework; +using Serilog; namespace FModel.Views.Snooper; @@ -88,6 +90,9 @@ public class Renderer : IDisposable case UStaticMesh when export.Value is UStaticMesh st: LoadStaticMesh(st, UserSettings.Default.NaniteMeshExportFormat); break; + case UGeometryCollection when export.Value is UGeometryCollection gc: + LoadStaticMesh(gc, UserSettings.Default.NaniteMeshExportFormat); + break; case USkeletalMesh when export.Value is USkeletalMesh sk: LoadSkeletalMesh(sk); break; @@ -132,7 +137,7 @@ public class Renderer : IDisposable { // do nothing, selected model has the correct skeleton for this animation } - else */if (animBase.Skeleton.TryLoad(out USkeleton skeleton)) + else */if (animBase.Skeleton?.TryLoad(out USkeleton skeleton) == true) { LoadSkeleton(skeleton); } @@ -144,7 +149,7 @@ public class Renderer : IDisposable } private void Animate(UObject anim, FGuid guid) { - if (anim is not UAnimSequenceBase animBase || !animBase.Skeleton.TryLoad(out USkeleton skeleton) || + if (anim is not UAnimSequenceBase animBase || animBase.Skeleton == null || !animBase.Skeleton.TryLoad(out USkeleton skeleton) || !Options.TryGetModel(guid, out var m) || m is not SkeletalModel model) return; @@ -361,6 +366,31 @@ public class Renderer : IDisposable Options.SelectModel(guid); } + private void LoadStaticMesh(UGeometryCollection original, ENaniteMeshFormat naniteFormat = ENaniteMeshFormat.NoNanite) + { + var guid = new FGuid((uint) original.GetFullName().GetHashCode()); + if (Options.TryGetModel(guid, out var model)) + { + model.AddInstance(Transform.Identity); + Application.Current.Dispatcher.Invoke(() => model.SetupInstances()); + return; + } + + StaticMeshDto mesh; + try + { + mesh = new StaticMeshDto(original, naniteFormat); + } + catch (Exception e) + { + Log.Error(e, "Failed to convert geometry collection"); + return; + } + + Options.Models[guid] = new StaticModel(original, mesh); + Options.SelectModel(guid); + } + private void LoadSkeletalMesh(USkeletalMesh original) { var guid = new FGuid((uint) original.GetFullName().GetHashCode()); From 49ddcf9460ea124db305d541891f465a693d971f Mon Sep 17 00:00:00 2001 From: Asval Date: Fri, 21 Aug 2026 21:29:00 +0200 Subject: [PATCH 2/8] read previous --- FModel/Extensions/VisualTreeExtensions.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/FModel/Extensions/VisualTreeExtensions.cs b/FModel/Extensions/VisualTreeExtensions.cs index c898336f..1a54a808 100644 --- a/FModel/Extensions/VisualTreeExtensions.cs +++ b/FModel/Extensions/VisualTreeExtensions.cs @@ -11,7 +11,9 @@ public static class VisualTreeExtensions { if (current is T t) return t; - current = VisualTreeHelper.GetParent(current); + current = current is FrameworkContentElement contentElement + ? contentElement.Parent + : VisualTreeHelper.GetParent(current); } return null; } From 63a7cbccd9fbaae9db45240069a49bd6a3a00b73 Mon Sep 17 00:00:00 2001 From: Masusder <59669685+Masusder@users.noreply.github.com> Date: Sun, 23 Aug 2026 16:30:12 +0200 Subject: [PATCH 3/8] Lord of Mysteries update / PUBG DT update / DragonSword fix / WuWa VT update / Stalker2 update --- CUE4Parse | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CUE4Parse b/CUE4Parse index 83200c61..cdaad6c8 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 83200c61e66048ef5e17d7ffdd5092a1f53cac03 +Subproject commit cdaad6c824977e55eb417b92c193d3cf005f3cf2 From 39a465a2ebef70f45b5357d9616571f0289576f3 Mon Sep 17 00:00:00 2001 From: Masusder <59669685+Masusder@users.noreply.github.com> Date: Wed, 26 Aug 2026 20:29:05 +0200 Subject: [PATCH 4/8] Decode Honor of Kings & FF7 normals / Fantasy Life AWB support / DBD update / Aliens Fireteam Elite 2 support / PUBG update / Animation Curves export support / Partial UE3 support Co-Authored-By: LongerWarrior <37636768+LongerWarrior@users.noreply.github.com> Co-Authored-By: Krowe Moh <27891447+Krowe-moh@users.noreply.github.com> Co-Authored-By: Moisoni Ioan <44326908+moisoni97@users.noreply.github.com> --- CUE4Parse | 2 +- FModel/Views/Snooper/Animations/Skeleton.cs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CUE4Parse b/CUE4Parse index cdaad6c8..ec6595e4 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit cdaad6c824977e55eb417b92c193d3cf005f3cf2 +Subproject commit ec6595e46448a817ac21ea9bde01caa48f80a420 diff --git a/FModel/Views/Snooper/Animations/Skeleton.cs b/FModel/Views/Snooper/Animations/Skeleton.cs index e35d0530..db883633 100644 --- a/FModel/Views/Snooper/Animations/Skeleton.cs +++ b/FModel/Views/Snooper/Animations/Skeleton.cs @@ -156,6 +156,8 @@ public class Skeleton : IDisposable for (int s = 0; s < animation.Sequences.Count; s++) { var sequence = animation.Sequences[s]; + if (sequence.Tracks is not { Count: > 0 }) + continue; foreach (var bone in BonesByLoweredName.Values.Where(bone => sequence.OriginalSequence.FindTrackForBoneIndex(bone.SkeletonIndex) >= 0)) { bone.AnimatedBySequences.Add(s); From 5c0387f8eca2be04d1947c971af30eb67e808c4b Mon Sep 17 00:00:00 2001 From: LongerWarrior Date: Sun, 30 Aug 2026 22:06:48 +0300 Subject: [PATCH 5/8] Bringer, Zeus and Gangstar Mirage City support / Reworked Wwise event resolver --- CUE4Parse | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CUE4Parse b/CUE4Parse index ec6595e4..91e1da69 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit ec6595e46448a817ac21ea9bde01caa48f80a420 +Subproject commit 91e1da69d3341f5777f2307bd712498b6bdc05dc From fafcda5305fcbff1d0b6de81441ac26a68547727 Mon Sep 17 00:00:00 2001 From: LongerWarrior Date: Mon, 7 Sep 2026 17:04:04 +0300 Subject: [PATCH 6/8] The Blood of Dawnwalker support Ganstar, Delta Force, Aion 2, Gotham Knights fixes Add UChaosClothAsset export Co-Authored-By: Masusder <59669685+Masusder@users.noreply.github.com> --- CUE4Parse | 2 +- FModel/Enums.cs | 2 + FModel/ViewModels/CUE4ParseViewModel.cs | 44 ++++++++++++++++--- FModel/ViewModels/GameFileViewModel.cs | 12 +++-- FModel/Views/Resources/Colors.xaml | 4 +- .../Converters/FileToGeometryConverter.cs | 3 +- FModel/Views/Resources/Icons.xaml | 4 +- FModel/Views/Snooper/Models/SkeletalModel.cs | 3 +- FModel/Views/Snooper/Renderer.cs | 43 ++++++++++++------ 9 files changed, 85 insertions(+), 32 deletions(-) diff --git a/CUE4Parse b/CUE4Parse index 91e1da69..89ef88f6 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 91e1da69d3341f5777f2307bd712498b6bdc05dc +Subproject commit 89ef88f6a3cf9437e599838e68b990e341a329d3 diff --git a/FModel/Enums.cs b/FModel/Enums.cs index 24de8230..c172cdd3 100644 --- a/FModel/Enums.cs +++ b/FModel/Enums.cs @@ -131,6 +131,7 @@ public enum EAssetCategory : uint CustomizableObject = Mesh + 3, NaniteDisplacedMesh = Mesh + 4, GeometryCollection = Mesh + 5, + ChaosClothAsset = Mesh + 6, Texture = AssetCategoryExtensions.CategoryBase + (3 << 16), Materials = AssetCategoryExtensions.CategoryBase + (4 << 16), Material = Materials + 1, @@ -167,6 +168,7 @@ public enum EAssetCategory : uint DeltaForce = GameSpecific + 4, LegoBatman = GameSpecific + 5, ArcSys = GameSpecific + 6, + GothamKnights = GameSpecific + 7, } public enum EUnluacMode diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index 6740a50d..08f2bb17 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -11,6 +11,8 @@ using System.Threading; using System.Threading.Tasks; using System.Windows; using AdonisUI.Controls; +using CUE4Parse_Conversion.Exporters; +using CUE4Parse_Conversion.Sounds; using CUE4Parse; using CUE4Parse.Compression; using CUE4Parse.Encryption.Aes; @@ -23,6 +25,7 @@ using CUE4Parse.GameTypes.AshEchoes.FileProvider; using CUE4Parse.GameTypes.Borderlands3.Assets.Exports; using CUE4Parse.GameTypes.Borderlands4.Assets.Exports; using CUE4Parse.GameTypes.Borderlands4.Wwise; +using CUE4Parse.GameTypes.Dawnwalker.Assets.Exports; using CUE4Parse.GameTypes.DFHO.Assets.Objects; using CUE4Parse.GameTypes.HonorOfKings.FileProvider; using CUE4Parse.GameTypes.KRD.Assets.Exports; @@ -32,6 +35,7 @@ using CUE4Parse.GameTypes.RocoKingdomWorld.Assets.Objects; using CUE4Parse.GameTypes.SMG.UE4.Assets.Exports.Wwise; using CUE4Parse.GameTypes.SquareEnix.UE4.Assets.Exports; using CUE4Parse.GameTypes.Theia.FileProvider; +using CUE4Parse.GameTypes.WarnerBros.GothamKnights.Assets.Exports.Wwise; using CUE4Parse.MappingsProvider; using CUE4Parse.MappingsProvider.Jmap; using CUE4Parse.MappingsProvider.Usmap; @@ -40,9 +44,10 @@ using CUE4Parse.UE4.Assets; using CUE4Parse.UE4.Assets.Exports; using CUE4Parse.UE4.Assets.Exports.Animation; using CUE4Parse.UE4.Assets.Exports.CriWare; +using CUE4Parse.UE4.Assets.Exports.Engine; using CUE4Parse.UE4.Assets.Exports.Fmod; +using CUE4Parse.UE4.Assets.Exports.GeometryCollection; using CUE4Parse.UE4.Assets.Exports.Material; -using CUE4Parse.UE4.Assets.Exports.SkeletalMesh; using CUE4Parse.UE4.Assets.Exports.Sound; using CUE4Parse.UE4.Assets.Exports.StaticMesh; using CUE4Parse.UE4.Assets.Exports.Texture; @@ -67,9 +72,6 @@ using CUE4Parse.UE4.Shaders; using CUE4Parse.UE4.Versions; using CUE4Parse.UE4.Wwise; using CUE4Parse.Utils; -using CUE4Parse_Conversion.Exporters; -using CUE4Parse_Conversion.Sounds; -using CUE4Parse.UE4.Assets.Exports.GeometryCollection; using EpicManifestParser; using EpicManifestParser.UE; using FModel.Creator; @@ -1346,6 +1348,11 @@ public class CUE4ParseViewModel : ViewModel TabControl.SelectedTab.AddImage(sourceFile.SubstringAfterLast('/'), false, bitmap, false, updateUi); return false; } + case UBiomesMaskTextureData when (isNone || saveTextures) && pointer.Object.Value is UBiomesMaskTextureData biomes && biomes.MaskData is { } maskData: + { + TabControl.SelectedTab.AddImage(biomes.Name, false, SKBitmap.Decode(maskData.Value), false, updateUi); + return false; + } // Supermassive Games (for example - The Dark Pictures Anthology: House of Ashes etc.) case UExternalSource when (isNone || saveAudio) && pointer.Object.Value is UExternalSource externalSource: { @@ -1552,6 +1559,31 @@ public class CUE4ParseViewModel : ViewModel } return false; } + // Gotham Knights + case UOrpheusBank when (isNone || saveAudio) && pointer.Object.Value is UOrpheusBank orpheusBank: + { + if (orpheusBank.SoundBank is null) + return false; + + var extractedSounds = WwiseProvider.ExtractBankSounds(orpheusBank.SoundBank); + foreach (var sound in extractedSounds) + { + SaveAndPlaySound(cancellationToken, sound.OutputPath, sound.Extension, sound.Data?.GetData() ?? [], saveAudio, updateUi); + } + + return false; + } + // Gotham Knights + case UOrpheusEvent when (isNone || saveAudio) && pointer.Object.Value is UOrpheusEvent orpheusEvent: + { + var extractedSounds = WwiseProvider.ExtractGothamKnightsAudioEventSounds(orpheusEvent); + foreach (var sound in extractedSounds) + { + SaveAndPlaySound(cancellationToken, sound.OutputPath, sound.Extension, sound.Data?.GetData() ?? [], saveAudio, updateUi); + } + + return false; + } case UWorld when isNone && UserSettings.Default.PreviewWorlds: // case UBlueprintGeneratedClass when isNone && UserSettings.Default.PreviewWorlds && TabControl.SelectedTab.ParentExportType switch // { @@ -1563,7 +1595,7 @@ public class CUE4ParseViewModel : ViewModel case UPaperSprite when isNone && UserSettings.Default.PreviewMaterials: case UStaticMesh when isNone && UserSettings.Default.PreviewStaticMeshes: case UGeometryCollection when isNone && UserSettings.Default.PreviewStaticMeshes: - case USkeletalMesh when isNone && UserSettings.Default.PreviewSkeletalMeshes: + case USkinnedAsset when isNone && UserSettings.Default.PreviewSkeletalMeshes: case USkeleton when isNone && UserSettings.Default.SaveSkeletonAsMesh: case UMaterialInstance when isNone && UserSettings.Default.PreviewMaterials && !ModelIsOverwritingMaterial && !(Provider.ProjectName.Equals("FortniteGame", StringComparison.OrdinalIgnoreCase) && @@ -1590,7 +1622,7 @@ public class CUE4ParseViewModel : ViewModel } case UStaticMesh when HasFlag(bulk, EBulkType.Meshes): case UGeometryCollection when HasFlag(bulk, EBulkType.Meshes): - case USkeletalMesh when HasFlag(bulk, EBulkType.Meshes): + case USkinnedAsset when HasFlag(bulk, EBulkType.Meshes): case USkeleton when UserSettings.Default.SaveSkeletonAsMesh && HasFlag(bulk, EBulkType.Meshes): // case UMaterialInterface when HasFlag(bulk, EBulkType.Materials): case UAnimationAsset when HasFlag(bulk, EBulkType.Animations): diff --git a/FModel/ViewModels/GameFileViewModel.cs b/FModel/ViewModels/GameFileViewModel.cs index 361fa995..c0fdda06 100644 --- a/FModel/ViewModels/GameFileViewModel.cs +++ b/FModel/ViewModels/GameFileViewModel.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; - +using CUE4Parse_Conversion.Textures; using CUE4Parse.FileProvider.Objects; using CUE4Parse.GameTypes.Borderlands3.Assets.Exports; using CUE4Parse.GameTypes.Borderlands4.Assets.Exports; @@ -15,10 +15,12 @@ using CUE4Parse.GameTypes.RED.Assets.Exports; using CUE4Parse.GameTypes.SMG.UE4.Assets.Exports.Wwise; using CUE4Parse.GameTypes.SMG.UE4.Assets.Objects; using CUE4Parse.GameTypes.SquareEnix.UE4.Assets.Exports; +using CUE4Parse.GameTypes.WarnerBros.GothamKnights.Assets.Exports.Wwise; using CUE4Parse.UE4.Assets; using CUE4Parse.UE4.Assets.Exports; using CUE4Parse.UE4.Assets.Exports.Animation; using CUE4Parse.UE4.Assets.Exports.BuildData; +using CUE4Parse.UE4.Assets.Exports.ChaosClothAsset; using CUE4Parse.UE4.Assets.Exports.Component; using CUE4Parse.UE4.Assets.Exports.CriWare; using CUE4Parse.UE4.Assets.Exports.CustomizableObject; @@ -51,17 +53,11 @@ using CUE4Parse.UE4.Objects.UObject; using CUE4Parse.UE4.Objects.UObject.Editor; using CUE4Parse.UE4.Versions; using CUE4Parse.Utils; - -using CUE4Parse_Conversion.Textures; - using FModel.Framework; using FModel.Services; using FModel.Settings; - using Serilog; - using SkiaSharp; - using Svg.Skia; namespace FModel.ViewModels; @@ -217,6 +213,7 @@ public class GameFileViewModel(GameFile asset) : ViewModel UStaticMesh => (EAssetCategory.StaticMesh, EBulkType.Meshes), USkeletalMesh => (EAssetCategory.SkeletalMesh, EBulkType.Meshes), + UChaosClothAsset => (EAssetCategory.ChaosClothAsset, EBulkType.Meshes), UCustomizableObject => (EAssetCategory.CustomizableObject, EBulkType.None), UNaniteDisplacedMesh => (EAssetCategory.NaniteDisplacedMesh, EBulkType.None), UGeometryCollection => (EAssetCategory.GeometryCollection, EBulkType.Meshes), @@ -269,6 +266,7 @@ public class GameFileViewModel(GameFile asset) : ViewModel UFaceFXAnimSet when GameVersion is EGame.GAME_Borderlands4 => (EAssetCategory.Borderlands, EBulkType.Audio), // Borderlands 4; UWubAudioEvent or UWubDialogueEvent when GameVersion is EGame.GAME_LEGOBatmanLegacyoftheDarkKnight => (EAssetCategory.LegoBatman, EBulkType.Audio), // Lego Batman: Legacy of the Dark Knight; UREDBinaryObject => (EAssetCategory.ArcSys, EBulkType.None), // Arc System Works games; + UOrpheusBank or UOrpheusEvent => (EAssetCategory.GothamKnights, EBulkType.Audio), // Gotham Knights; _ => (EAssetCategory.All, EBulkType.None), }; diff --git a/FModel/Views/Resources/Colors.xaml b/FModel/Views/Resources/Colors.xaml index 21a03968..61d7cbaa 100644 --- a/FModel/Views/Resources/Colors.xaml +++ b/FModel/Views/Resources/Colors.xaml @@ -11,6 +11,8 @@ + + @@ -22,7 +24,7 @@ - + diff --git a/FModel/Views/Resources/Converters/FileToGeometryConverter.cs b/FModel/Views/Resources/Converters/FileToGeometryConverter.cs index 5c06f916..04e408c8 100644 --- a/FModel/Views/Resources/Converters/FileToGeometryConverter.cs +++ b/FModel/Views/Resources/Converters/FileToGeometryConverter.cs @@ -32,6 +32,7 @@ public class FileToGeometryConverter : IMultiValueConverter EAssetCategory.StaticMesh => ("StaticMeshIconAlt", "NeutralBrush"), EAssetCategory.SkeletalMesh => ("SkeletalMeshIconAlt", "NeutralBrush"), + EAssetCategory.ChaosClothAsset => ("ChaosClothIcon", "ChaosClothBrush"), EAssetCategory.CustomizableObject => ("StaticMeshIconAlt", "CustomizableObjectBrush"), EAssetCategory.NaniteDisplacedMesh => ("StaticMeshIconAlt", "NaniteDisplacedMeshBrush"), EAssetCategory.GeometryCollection => ("GeometryCollectionIcon", "NeutralBrush"), @@ -99,7 +100,7 @@ public class FileToGeometryConverter : IMultiValueConverter EAssetCategory.Aion2 => ("AionIcon", "AionBrush"), EAssetCategory.RocoKingdomWorld => ("RocoKingdomWorldIcon", "RocoKingdomWorldBrush"), EAssetCategory.DeltaForce => ("DeltaForceIcon", "DeltaForceBrush"), - EAssetCategory.LegoBatman => ("BatmanIcon", "BatmanBrush"), + EAssetCategory.LegoBatman or EAssetCategory.GothamKnights => ("BatmanIcon", "BatmanBrush"), EAssetCategory.ArcSys => ("ArcSysIcon", "ArcSysBrush"), _ => ("AssetIcon", "NeutralBrush") diff --git a/FModel/Views/Resources/Icons.xaml b/FModel/Views/Resources/Icons.xaml index 883eee44..d5ee8748 100644 --- a/FModel/Views/Resources/Icons.xaml +++ b/FModel/Views/Resources/Icons.xaml @@ -114,7 +114,9 @@ M3 11H11V3H3M3 21H11V13H3M13 21H21V13H13M13 3V11H21V3 M9 5V9H21V5M9 19H21V15H9M9 14H21V10H9M4 9H8V5H4M4 19H8V15H4M4 14H8V10H4V14Z M748.57 80.43c28.56-1.38 65.8-2.6 92.37 9.11 12.37 5.45 24.48 13.05 30 25.99 5.31 12.45 3.33 25.88 3.03 38.97-.53 22.7-.75 45.29.04 68 .93 26.86 4.13 54.15 2.11 81-1.16 15.42-7.32 31.34-22.58 37.62-32 13.17-52.25-1.78-77.57-18.6-10.79-7.18-21.42-14.59-32.13-21.88-14.17-9.64-29.51-19.34-36.01-36.04-4.74-12.16-4.33-25.26-4.49-38.1-.23-17.66-.11-35.34-.41-53-.32-18.99-.65-38.02-1.31-57-.29-8.4-1.75-19.16 4.41-25.96 8.13-8.96 31.23-9.56 42.54-10.11Zm-249.82 7.03c39.11-1.88 78.62-.49 117.75.17 15.32.26 35.8-3.07 48.34 8.01 10.52 9.3 10.71 22.85 10.09 35.86-.88 18.67-2.02 37.33-2.88 56-.97 21.31-.53 58.34-10.25 76.8-9.73 18.49-33.19 32.82-49.7 45.29-18.07 13.64-36.27 27.26-54.99 40-8.65 5.89-16.78 12.29-26.35 16.7-18.43 8.51-39.37 11.67-59.26 14.85-12.69 2.03-29.25 5.91-41.87 3.59-19.34-3.55-23.72-22.14-29.99-37.93-6.58-16.57-20.78-48.26-20.15-65.22.53-14.27 6.67-27.25 9.34-41.11 2.53-13.14 2-26.66 2.46-39.97.56-16.66 1.16-33.34 1.54-50 .32-14.15-1.48-30.3 8.18-42 8.25-10.01 22.17-13.85 34.44-15.76 21.06-3.28 42.06-4.26 63.3-5.28Zm-177.11 15.95c4.49-.49 8.81-.65 13.28.12 3.47.6 7 1.38 10.21 2.88 17.42 8.12 16.56 27.82 16.34 44.15-.2 15.32-.49 30.62-.13 45.94.42 18.1 1.21 37.2-7.78 53.56-9.17 16.67-26.61 23.5-43.04 30.98-20.86 9.48-41.61 19.15-62.56 28.43-16.15 7.16-32.99 15.16-50.36 18.83-8.67 1.83-18.3 1.61-25.87-3.53-8.1-5.49-11.83-15.08-13.95-24.22-3.87-16.68-3.51-35.01-3.51-52.05 0-16.26.58-32.78 4.11-48.71 2.59-11.71 6.25-23.37 11.96-33.98a106 106 0 0 1 15.67-22.3c36.95-39.58 86.3-34.81 135.63-40.1Zm569.05 37.09c12.83-1.97 23.54 16.54 29.48 25.82 19.4 30.32 38.29 63.13 44.02 99.18 1.9 11.94 6.07 39.03-8.87 44.26-10.91 3.83-31.7-2.78-40.34-10.24-2.89-2.5-4.96-6-6.54-9.43-4.32-9.34-3.53-21.36-4.81-31.45-2.91-23.03-5.62-46.14-8.84-69.13-1.49-10.61-2.81-21.25-4.16-31.88-.72-5.69-2.33-11.71.06-17.13ZM332.64 305.41c11.84-.61 19.71 8.73 23.63 18.86a514 514 0 0 1 13.14 38.91c3.87 12.93 7.81 25.65 4.31 39.17-5.46 21.11-25.7 32.55-41.6 45.23-35.14 28.03-71.7 54.22-106.96 82.05-14.58 11.51-37.72 33.56-57.04 20.77-12.47-8.25-14.94-21.94-16.51-35.75-1.98-17.5-2.33-35.54-2.44-53.15-.13-20.68-.1-41.39 1.45-62.02.81-10.7 1.33-23.38 7.96-32.37 10.69-14.5 36.32-9.26 52.39-11.62 18.53-2.73 35.07-11.21 51.75-19.27 11.02-5.33 22.15-10.47 33.16-15.81 10.68-5.19 24.88-14.38 36.76-15Zm353.14.05c10.21-.77 17.67 5.18 25.37 10.91 12.22 9.1 24.37 18.3 36.53 27.48 17.58 13.27 35.19 25.27 55.01 34.94 13.07 6.38 28.46 9.11 38.06 20.95 6.41 7.9 8.39 17.99 10.5 27.68 2.24 10.33 4.83 20.59 7.05 30.93a856 856 0 0 1 7.84 40.13c2.39 14.5 4.29 28.13-9.31 37.86-9.18 6.56-21.49 6.96-32.33 7.79-18.32 1.4-36.62 2.63-55 2.98-20.35.39-40.7 1.65-61 3.12-24.71 1.79-40.91 5.62-60.96-12.25-14.48-12.92-24.16-30.22-32.61-47.41-9.66-19.67-18.47-39.79-27.1-59.93-5.64-13.15-15.96-28.34-10.87-43.13 3.34-9.67 11.23-15.93 18.85-22.17 13.07-10.68 26.91-20.5 40.56-30.43 7.93-5.77 16-11.32 23.99-17 7.89-5.61 15.38-11.69 25.42-12.45Zm233.95 28.02c11.01-.55 33.13 5.03 39.1 15.2 5.34 9.08 2.29 31.09 1.87 41.82-1.1 28.35-2.15 56.72-3.26 85.06-.51 13.12 1.84 28.57-3.31 40.98-4.65 11.2-17.83 13.14-28.63 13.4-28.81.69-28.55-26.85-32.85-48.24-4.34-21.62-7.93-43.37-11.99-65.04-2.54-13.58-6.37-28.38-3.76-42.16 3.71-19.56 22.29-40 42.83-41.02Zm-397.99 71.01c20.02-.18 27.59 20.61 34.57 35.74 5.89 12.77 11.95 25.46 17.57 38.37 5.71 13.11 11.01 26.54 17.93 39.09 6.57 11.91 13.8 23.46 21.07 34.96 4.74 7.5 10.19 15.45 13.12 23.87 4.78 13.75-3.05 26.63-15.61 32.37-10.88 4.97-24.16 5.19-35.87 6.41a8360 8360 0 0 1-59.01 6.01c-14.68 1.42-28.96 2.63-41.4-6.89-10.14-7.75-16.36-20.45-22.9-31.13q-15.39-25.13-30.69-50.32c-14.16-23.33-43.61-58.38-29.72-86.65 7.27-14.81 22.65-19.43 37.6-22.6 20.62-4.37 41.22-8.96 61.88-13.1 10.19-2.05 21.02-6.03 31.46-6.13Zm-184.95 90.87c8.21-1.58 16.57 2.24 22.09 8.28 5.88 6.42 10.49 14.45 15.22 21.74 5.23 8.06 10.76 15.94 15.95 24.03 13.73 21.44 27.2 42.77 38.41 65.67 5.3 10.84 10.91 23.11 8.5 35.42-3.4 17.36-22.16 37.02-32.68 51.26-8.33 11.27-23.27 35.37-37.78 37.18-12.96 1.62-27.5-5.95-39.25-10.64-15.33-6.13-35.61-12.95-47.78-24.27-8.25-7.66-12.4-16.86-17.11-26.86-6.93-14.68-13.09-29.66-19.49-44.57-4.96-11.56-9.33-23.37-13.94-35.07-2.9-7.38-6.11-14.38-4.43-22.54 2.59-12.56 14.25-18.44 24.05-24.97 19.61-13.09 39.43-25.89 59.19-38.76 8.94-5.81 18.35-13.83 29.05-15.9Zm565.92 62.09c4.59-.3 9.33.55 13.82 1.36 13 2.34 34.19 7.59 41.19 19.97 5.3 9.37 3.66 25.11 4 35.72.83 26.01 1.31 52.08 2.85 78.06.49 8.27.49 16.55.88 24.83.39 8.56 1.33 17.54.32 26.08-.9 7.6-4.25 15.35-12.38 17.27-19.79 4.7-44.59-10.93-52.97-28.63-6.59-13.93-6.85-31.49-8.76-46.56-3.41-27.04-6.58-54.17-10.34-81.16-2.65-18.99-4.86-45.25 21.39-46.94ZM769.8 574.47c13.57-.81 27.14-.04 40.7.42 8.99.3 17.77.14 25.34 5.75 12.21 9.04 13.09 25.06 15.27 38.86 4.19 26.62 9.19 53.2 12.13 80 1.33 12.08 5.27 25.85-.97 37.24-6.14 11.24-18.58 15-29.71 19.38-20 7.88-40.1 15.65-59.85 24.12-14.27 6.13-28.64 12.05-42.98 18.03-8.64 3.6-17.51 7.52-26.97 4.39-17.49-5.8-19.5-29.8-23.17-44.85-8.35-34.17-16.86-68.27-21.99-103.09-2.42-16.41-5.61-35.47 4.53-50.06 9.07-13.06 23.89-17.93 38.77-21.2 22.84-5.01 45.59-7.6 68.9-8.99Zm-595.23 14.8c11.22-1.38 19.16 7.81 23.83 16.85 11.39 22.09 22.01 44.66 33.07 66.92 3.59 7.23 15.38 25.81 4.46 31.38-7.4 3.78-22.05 1.46-30.34 1.13-9.55-.37-19.58.14-28.97-1.83-17.51-3.69-21.24-16.37-22.91-32.2a452 452 0 0 1-1.93-27.02c-.82-17.67-1.5-52.24 22.79-55.23Zm422.07 56.11c11.63-1.13 22.82 3.55 27.88 14.58 4.81 10.47 6.11 22.36 8.73 33.48 4.9 20.83 8.94 41.85 13.13 62.82 2.83 14.17 8.99 30.87 4.48 45.18-4.26 13.53-19.8 20.9-30.93 28.01-12.31 7.88-24.54 17.4-39.45 19.32-16.51 2.13-32.18-4.76-47.27-10.42a4593 4593 0 0 1-69.39-26.73c-17.18-6.76-47.4-14.42-58.51-29.39-8.92-12.03-2.86-20.63 4.38-31 6.71-9.62 13.63-19.09 20.33-28.71 8.62-12.39 17.1-24.88 25.75-37.24 5.42-7.73 10-16.59 17.93-22.08 12.42-8.6 29.35-8.06 43.8-9.45 26.4-2.55 52.74-5.8 79.14-8.37Zm-433.95 81.88c5.84-1.64 12.86 0 18.81.51a701 701 0 0 1 38 4.06c13.13 1.82 26.08 4.51 39.11 6.86 29.86 5.39 74 14.01 96.64 35.56 8.43 8.03 14.33 19.24 17.79 30.25 4.18 13.31.16 25.41-3.77 38.15-5.58 18.03-11.05 36.11-17.02 54.02-5.11 15.32-9.73 30.81-14.9 46.11-3.33 9.83-8 20.21-16.94 26.18-15.09 10.08-41.83 1.64-58.91-.83-14.66-2.12-29.68-4.47-43.66-9.52-32.71-11.82-61.35-38.63-69.51-73.32-5.21-22.17-3.08-46.17-3.37-68.79-.27-20.23-2.68-49.58 2.48-68.6 2.1-7.75 6.7-18.24 15.25-20.64Zm717.03 46.16c12.34-1.49 22.24 2.98 32.84 8.53 15.62 8.18 32.14 18.79 39.42 35.57 6.65 15.31 5.9 34.67 4.8 50.98-3.45 51.08-31.88 96.67-82.39 112.32-14.92 4.62-30.31 6.49-45.89 6.52-14.2.02-29.7 1.62-42.99-4.35-16.8-7.55-21.43-24.75-24.94-41.18-1.98-9.31-4.15-18.57-6.04-27.9-3.15-15.47-6.69-30.86-9.77-46.34-2.02-10.13-5.54-20.88-1.78-31.06 5.4-14.58 20.2-19.09 33.12-24.94a843 843 0 0 1 64.3-25.7c12.66-4.51 25.91-10.81 39.32-12.45Zm-458.05 58.9c7.79-1.49 14.5 1.43 21.71 3.88 12.25 4.16 24.31 8.87 36.42 13.43 17.22 6.46 34.37 13.21 51.66 19.48 13.71 4.98 28.92 9.91 36.38 23.55 6.66 12.17 5.38 28.39 5.94 41.84.59 14.03 5.4 38.32-5.77 49.01-9.85 9.43-33.8 5.87-46.51 5.44-20.36-.68-40.67-2.41-61-3.63-16.37-.98-32.81-1.61-49.03-4.09-14.33-2.18-32.4-6.5-39.45-20.76-5.3-10.71-.69-21.64 2.76-32.09a2123 2123 0 0 1 24.93-71.13c4.02-10.87 9.28-22.51 21.96-24.93Zm255.08 5.06c31.26-5.59 36.57 32.33 41.92 54.34 1.26 5.19 2.39 10.4 3.63 15.59a962 962 0 0 1 8.98 41.11c1.55 8.06 3.37 16.59.18 24.54-4.27 10.67-15.66 13.62-25.92 15.29a315 315 0 0 1-52.04 3.91c-8.88-.04-18.07.25-26.6-2.61-23.54-7.9-23.6-34.42-23.72-55.05-.1-16.68-.46-34.78 6.5-50.29 8.11-18.07 27.23-27.27 43.7-36.33 7.34-4.04 15.01-9 23.37-10.5Z - + M511.92 134.63C511.92 134.97 511.92 135.3 511.92 135.63C493.79 163.46 475.66 191.3 457.53 219.13C439.31 210.85 421.1 202.56 402.88 194.28C402.7 293.72 402.51 393.16 402.33 492.6C304.78 492.6 207.22 492.6 109.67 492.6C109.51 393.19 109.34 293.78 109.18 194.37C90.94 202.62 72.71 210.87 54.47 219.13C36.34 191.29 18.21 163.46 0.08 135.63C0.08 135.3 0.08 134.96 0.08 134.63C2.79 132.96 5.03 130.4 7.38 128.27C14.02 122.27 20.69 116.3 27.37 110.36C47.41 92.52 67.09 74.31 87.32 56.7C93.68 51.17 102.54 41.18 109.3 37.05C113.64 34.4 125.62 33.12 131.1 31.69C142.25 28.77 153.58 26.56 164.74 23.71C171.22 22.05 177.84 20 184.46 18.98C187.1 21.48 188.93 24.95 191.38 27.69C197.34 34.39 204.7 40.54 212.62 44.78C241.44 60.24 276.6 59.07 304.32 41.78C310.75 37.76 316.9 32.29 321.71 26.42C323.68 24.01 325.3 21.11 327.54 18.98C332.88 19.59 338.33 21.44 343.54 22.75C354.69 25.56 365.94 28.15 377.13 30.78C382.83 32.12 398.45 34.46 402.7 37.05C409.55 41.23 417.12 50.17 423.46 55.59C444.24 73.37 464.27 92.09 484.64 110.34C491.31 116.31 498.01 122.24 504.63 128.25C506.98 130.38 509.22 132.95 511.92 134.63Z + M 286.07 75.06 C 285.63 76.88 279.9 78.9 278.2 80.2 C 271.19 85.58 264.42 90.89 257.86 96.91 C 243.82 109.8 234.91 128.03 229.1 145.84 C 227.53 150.63 227.26 155.76 226.41 160.49 C 223.8 174.94 223.69 190.82 226.43 205.27 C 226.94 207.97 226.65 211.37 227.14 214.29 C 229.43 227.82 234.03 242.91 232.16 256.84 C 230.38 270.16 227.98 284.63 224.25 297.48 C 220.37 310.84 212.53 322.94 206.62 335.28 C 205.18 333.13 207.43 322.53 207.66 319.86 C 208.22 313.29 207.68 307.32 206.71 301.14 C 206 297 206 285.84 205.47 284.26 C 204.42 281.15 204.91 277.06 203.61 273.76 C 200.58 266.06 200.14 256.77 197.95 248.37 C 191.58 223.99 184.08 193.15 190 168 C 191 165 191.12 162.37 191.84 160.02 C 196.1 146.13 202.35 132.57 210.59 120.42 C 222.02 103.58 241.64 83.23 261.61 77.8 C 265 77 268 76 268.28 75.9 C 273.63 75.55 281.04 72.19 286.07 75.06 Z M 291.1 81.7 C 296.32 83.57 307.77 90.44 312.63 93.5 C 314.92 94.94 318.78 95.37 319.86 98.08 C 317.12 98.32 314.04 101.37 311.69 102.86 C 303.98 107.73 296.82 113.89 291.02 120.86 C 286.57 126.21 281.78 131.25 277.77 136.89 C 267.16 151.83 259.63 169 252.17 185.69 C 247.54 196.06 244.61 207.67 241.27 218.61 C 240.35 221.63 239.94 224.71 238.58 227.86 C 237.17 224.75 237.73 221.28 236.85 218.06 C 234.46 209.31 234.22 199.93 233.87 190.64 C 233.41 178.49 233.93 166.29 236.87 154.87 C 237.42 152.72 237.27 150.21 237.96 148.18 C 247.04 121.33 264.34 93.92 291.1 81.7 Z M 358.23 112.56 C 356.61 114.86 342.72 121.71 338.83 124.9 C 324.09 137.01 311.26 152.57 303.97 170.44 C 300.16 179.8 297.16 189.61 294.62 199.4 C 293.85 202.37 293.96 206.24 293.24 208.89 C 288.97 224.46 286.18 241.38 281.9 257.17 C 272.8 290.72 254.35 322.85 231.16 348.28 C 219.09 361.52 204 373.47 187.1 380.05 C 182.31 381.92 176.92 385.15 171.65 384.7 C 174.12 380.79 184.09 374.94 187.94 370.81 C 195.79 362.37 203.49 354.13 210.47 344.92 C 218.95 333.73 224 320.26 229.91 307.82 C 232.74 301.86 233.23 294.98 235.61 289.26 C 236.14 287.98 235.83 286.36 236.24 285.08 C 237.88 280.02 238.69 274.54 239.65 269.17 C 239.9 267.77 239.62 265.99 239.97 264.7 C 242.48 255.55 243.61 245.93 245.74 236.77 C 247.06 231.12 249 224 249.72 220.32 C 250 219 254 206 254.73 204.34 C 256 202 257.83 197.37 258.96 194.38 C 261.72 187.11 264.63 179.48 268.27 172.58 C 279.44 151.43 291.56 128.99 310.96 114.4 C 314.52 111.72 325.57 101.85 329.45 101.71 C 332.11 101.61 334.81 103.52 337.3 104.47 C 343.34 106.77 353.05 109.28 358.23 112.56 Z M 413.13 124.43 C 412.53 131.96 399.82 138.75 394.63 143.21 C 390.07 147.13 383.88 149.51 378.78 152.98 C 366.37 161.41 354.44 172.48 346.05 184.61 C 333.93 202.13 326.01 221.45 321.62 241.9 C 320 248 319 253 318 257 C 318 257 317 263 316.55 266.06 C 315.74 269.66 315.87 273.9 313.47 276.81 C 311.67 272.33 311.1 262.82 309.87 257.4 C 307.04 244.84 302.49 232.99 302.83 219.86 C 303.66 187.52 318.24 154.92 343.02 134.11 C 350.63 127.72 359.16 120.9 368.94 118.03 C 373.75 116.62 380.98 120.57 385.62 121.93 C 394.89 124.64 403.67 123.87 413.13 124.43 Z M 296.58 239.28 C 326.37 306.53 285.88 380.19 224 410.08 C 210.57 416.56 195.53 420.81 180.59 421.47 C 176 422 172 422 167 422 C 163 422 150.19 420.7 143.58 418.02 C 127.51 411.51 112.03 402.52 102.62 387.11 C 99.3 381.67 96.36 376.19 95.14 369.96 C 94.7 367.72 92.86 365.29 94.75 363.4 C 100.82 370.14 108.35 375.28 115.77 380.18 C 122.26 384.47 129.24 388.17 136.64 390.13 C 146.05 392.62 154.77 394.27 164.61 394.02 C 197.51 393.19 230.49 367.89 249.72 341.71 C 253.04 337.19 255.91 332.54 259.06 328.14 C 264.49 320.57 270.35 311.81 274.11 303.1 C 280.16 289.05 286.47 274.94 290.64 260.27 C 291.7 256.51 294.28 241.48 296.58 239.28 Z + M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2H6 ZM12,11A3,3 0 1,0 12,17A3,3 0 0,0 12,11 ZM12,12.5L14,16H13L12,14.5L11,16H10L12,12.5Z M609 180.1c-19.4 2.3-38.2 7.8-56.5 16.8-53.8 26.5-89.2 74.9-98.7 135.1-1.1 7-1.3 133.1-1.3 739 0 693.9.1 731 1.8 741.4 12.8 79.4 70.7 137.8 149.2 150.6 11.8 2 20.6 2 563.5 2s551.7 0 563.5-2c57.2-9.3 104-43 130.8-94.1 9.1-17.2 14.6-33.9 18.4-55.4 1.6-9.4 1.8-40.6 2-554l.3-544-268.2-268.2L1345.5 179l-364.5.1c-200.5.1-367.9.5-372 1m893 378.4L1747.5 804H1256V558.5c0-135 .1-245.5.3-245.5.1 0 110.7 110.5 245.7 245.5m-792.1 532c24.5 1.3 47 2.9 49.8 3.4 7.1 1.3 12.8 5.5 22.5 16.4 6.4 7.3 9.2 11.5 13.6 20.7 9.2 19.4 21.4 47.2 44.4 101.5 27.5 65.1 39.7 92.3 55.5 124 6.9 13.7 16.1 32.9 20.5 42.5 8.2 17.9 15.4 31.9 18.3 35.5 1.5 1.8 1.5-7.2.9-109-.6-108.7-.7-111.1-2.7-116.5-3.1-8.3-10-14.5-24.7-22-10.1-5.1-11.9-6.4-10.9-7.6 1.6-2 5.8-1.8 21.3 1.1 19.3 3.6 39.1 4.5 97.7 4.5 42.1 0 51.9.3 53.4 1.4 1.8 1.3 1.8 1.4-.1 1.9-1 .3-3.9.8-6.4 1.2s-8.5 1.7-13.5 3c-4.9 1.3-12.1 2.6-16 3-7.9.8-14.3 3.2-18 6.9l-2.5 2.5v123.7c0 121.8 0 123.8 2 125.9 1.4 1.5 2.1 4.1 2.6 9.2.8 8.1 2.2 10.1 12.6 17.2 9.3 6.5 9.3 6.5-26.7 7.3-17.6.4-45.3.7-61.5.5-29.2-.2-29.5-.2-29.8-2.3-.2-1.7.7-2.5 5.5-4.5 3.2-1.3 7.5-4.1 9.8-6.4 4.5-4.5 8.3-11 7.2-12.2-1.3-1.2-72.8-1.6-90.2-.5-13.5.9-16.2.8-17.5-.4-1.9-1.9-.9-2.7 8-6.4 9.8-4.1 11-5.2 11-11 0-3.9-3.7-13.2-22.3-56.1l-22.3-51.4-4.5-.6c-13.1-2-52.1-3.1-69.3-2-14.4.9-38.5 3.6-39.3 4.4-.1.1-5.6 13.5-12.3 29.7s-16 38.7-20.7 50c-7.4 17.9-8.5 21.1-8.1 25.1.6 5.6 3.9 10.3 10.2 14.3 4.8 3 5.8 5.1 2.9 5.8-1 .2-10.6 0-21.3-.5-21.7-.9-83.9-.2-108.4 1.3-22.1 1.4-22.5.3-1.7-5 17.9-4.6 33.3-9.6 42.4-13.7l7.7-3.6 6.9-13.1c3.8-7.2 14.2-27.5 23.1-45.2 17.9-35.6 19-38.9 15.5-47.9-1-2.7-1.4-5.6-1.1-7.1.4-1.5 8.1-10.1 17.5-19.8 9.2-9.4 17.6-18.6 18.5-20.4s6.4-15.7 12.2-30.8c5.7-15.1 17.9-46.7 27.1-70.2l16.6-42.7-9.3-18.2c-5.1-10-10.7-19.8-12.5-21.6-6-6.1-16.6-9.9-32-11.4-7.8-.8-8-.9-8.3-3.6s-.3-2.7 5.9-2.7c3.5 0 26.3 1.1 50.8 2.5m999.3 20.4c3 5.2 4.8 10.9 9.7 31 8.8 35.5 11.8 55.6 14.2 93.1 1.5 24.1.6 87-1.5 108-1.8 17.4-4.4 37.5-5.3 40.5-.3 1.3-.2 1.7.5 1 1.2-1.2 11.9-33.8 16.2-49.5 1.8-6.3 3.7-12.4 4.2-13.4 3.4-6.4 2.2 14.4-2 34.9-1.3 6.3-1.5 9.6-.9 10.7 2.1 3.3-9.4 55.8-18.3 83.3-5.5 17.2-15.6 42.7-18.1 45.9-1.1 1.5-2.6 2.3-3.4 1.9-.8-.3-5.7-6.9-10.9-14.7-17.4-26.2-33.3-45.2-60.7-72.1-16.4-16.1-29.1-27.5-45.6-41-4-3.2-7.5-6.5-7.8-7.3-1.2-3.2 5.5.3 19.9 10.4 8.1 5.8 15 10.3 15.2 10.2.4-.5-17.3-14.6-37.1-29.4-43.5-32.7-81.4-58.4-86.1-58.4-1.3 0-1.4 9.9-.8 86.7.4 61.2 1 87.5 1.8 89.3 1.4 3.1 7.5 7.2 14 9.5 6.9 2.4 7.6 3.2 4.6 5.5-2.4 1.9-5 2-74.2 2-45.3 0-71.8-.4-71.8-1 0-.9 3.2-1.9 12-3.9 9.2-2.1 22.3-6.2 26.9-8.6 7.6-3.8 8.9-8.7 10.1-38 1.3-29.8 2.5-203 1.5-217.8-.7-11.3-.9-12-3.8-15.3-1.6-1.9-4.3-4.2-6-5-5.1-2.7-24.7-6.3-42.9-7.9-9.7-.8-18.4-1.8-19.2-2.1-1.4-.5-2.2-2-1.3-2.6.3-.2 73.8-1.9 90.7-2.1 12.6-.2 13.9-.4 19.5-3 4.8-2.3 8.6-3.1 19.5-4.2 18.5-1.9 34.2-2.3 34.7-.9.3 1-2.3 4.6-10.9 14.7l-3.3 3.9-.3 20.2-.3 20.2 5.7 8c17.5 24.5 49.6 55.6 93.9 91 20 16.1 58.7 45.6 59.1 45.1.7-.7 6.5-38.1 8.5-55.7 3-25 3.3-66.8.6-84-2.5-16.2-9.6-43-11.4-43-.2 0-8.1 7.2-17.5 16.1-9.3 8.8-17.2 15.8-17.5 15.5s2.7-4.5 6.8-9.3c13-15.6 35.1-41.7 37.2-44.1 1.1-1.2 1.8-2.2 1.4-2.2-.3 0-16.9 17-36.8 37.7-37.3 38.8-41.5 43-42.6 41.9-.8-.8-4.1 3.1 54-63.3 28.4-32.6 51.7-59.6 51.7-59.9s-3.2 2.3-7 5.7c-14.3 12.9-15.9 13.8-7.5 4.4 16.1-18.1 32.8-35.6 33.9-35.2.6.2 2.8 3.2 4.8 6.6m-578.4 94.3c-.3.7-5 4.4-10.5 8.3-13.5 9.4-17.7 12.9-31.6 26.4-8.1 8-13.5 14.2-17.6 20.5-6.8 10.7-11.5 18.6-10.9 18.6.3 0 2-2.1 3.8-4.8 5.1-7.1 19.5-21.6 28.5-28.7 24.4-19.1 53.7-31.3 89-37.2 13.7-2.2 53.7-2.5 68.5-.5 45.5 6.4 82.4 22.6 109.1 48 26 24.7 40.4 54.7 45 93.7 1.7 14.2.6 42.3-2.1 54.9-8.5 39.6-25.4 68.8-53.5 92.6-15.5 13-29.1 20.9-45.7 26.5-18.4 6.1-35.4 7.7-56 5.3l-10.3-1.3 10.5-.6c11.4-.8 27.2-3.2 31.1-4.9 2.3-.9 2.2-1-.6-.5-15.1 2.4-38.9 3.2-48.9 1.5-11.5-1.9-10.1-4 6.3-9.9 6.2-2.3 15.4-6.2 20.4-8.8 56.5-29.2 84.7-97.9 69.1-168.3-11.5-51.5-43.4-85-89.3-93.6-11.4-2.1-32.9-2.2-44.2 0-40.6 7.7-70 34.9-84.5 78.1-5.8 17.5-7.7 31.8-7.1 54 .6 21.3 2.2 32.3 7.3 49.2 11.8 39 34.4 64.6 78.4 88.7 4.7 2.6 9.6 5.8 11 7.1 2.3 2.4 2.4 2.6.7 4.2-1.6 1.6-3.8 1.8-17 1.7-45.3-.2-82.1-18.2-112.6-55-4.2-5.1-9.6-12.4-12.1-16.2-2.5-3.9-4.9-7.1-5.4-7.1-.5-.1-.6 3.7-.3 8.5l.5 8.5-2.4-2.2c-3-2.8-10.5-17.2-14.3-27.7-7.2-19.5-12.1-46.9-12.1-67.8 0-30.8 5.7-56.3 18.5-81.9 16.2-32.6 43.1-58.4 79-75.7 10.3-4.9 13-5.7 12.3-3.6 M731 1231.2c-6.2 15.5-15.9 40.1-21.6 54.5-5.7 14.5-10.4 26.7-10.4 27.2 0 1.5 7.9 2 39 2.7 26.5.5 51.1-.3 52.6-1.8.6-.6-46.1-108.6-47.5-110.1-.5-.5-5.9 11.9-12.1 27.5 diff --git a/FModel/Views/Snooper/Models/SkeletalModel.cs b/FModel/Views/Snooper/Models/SkeletalModel.cs index 4f9fcd2d..44066c3c 100644 --- a/FModel/Views/Snooper/Models/SkeletalModel.cs +++ b/FModel/Views/Snooper/Models/SkeletalModel.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Numerics; using CUE4Parse_Conversion.Dto; using CUE4Parse.UE4.Assets.Exports.Animation; +using CUE4Parse.UE4.Assets.Exports.Engine; using CUE4Parse.UE4.Assets.Exports.SkeletalMesh; using CUE4Parse.UE4.Objects.Core.Math; using CUE4Parse.UE4.Objects.PhysicsEngine; @@ -24,7 +25,7 @@ public class SkeletalModel : UModel public float MorphTime; - public SkeletalModel(USkeletalMesh export, SkeletalMeshDto skeletalMesh, Transform transform = null) + public SkeletalModel(USkinnedAsset export, SkeletalMeshDto skeletalMesh, Transform transform = null) : base(export, skeletalMesh.LODs[LodLevel], export.Materials, skeletalMesh.LODs[LodLevel].Vertices, skeletalMesh.LODs.Count, transform) { Box = skeletalMesh.Bounds * Constants.SCALE_DOWN_RATIO; diff --git a/FModel/Views/Snooper/Renderer.cs b/FModel/Views/Snooper/Renderer.cs index f49b2edd..baaf5b93 100644 --- a/FModel/Views/Snooper/Renderer.cs +++ b/FModel/Views/Snooper/Renderer.cs @@ -4,17 +4,13 @@ using System.Linq; using System.Numerics; using System.Threading; using System.Windows; -using CUE4Parse_Conversion.Animations; -using CUE4Parse_Conversion.Dto; -using CUE4Parse_Conversion.Meshes; -using CUE4Parse_Conversion.Options; using CUE4Parse.UE4.Assets.Exports; using CUE4Parse.UE4.Assets.Exports.Animation; using CUE4Parse.UE4.Assets.Exports.Component.SplineMesh; using CUE4Parse.UE4.Assets.Exports.Component.StaticMesh; +using CUE4Parse.UE4.Assets.Exports.Engine; using CUE4Parse.UE4.Assets.Exports.GeometryCollection; using CUE4Parse.UE4.Assets.Exports.Material; -using CUE4Parse.UE4.Assets.Exports.SkeletalMesh; using CUE4Parse.UE4.Assets.Exports.StaticMesh; using CUE4Parse.UE4.Assets.Exports.Texture; using CUE4Parse.UE4.Objects.Core.Math; @@ -22,6 +18,10 @@ using CUE4Parse.UE4.Objects.Core.Misc; using CUE4Parse.UE4.Objects.Engine; using CUE4Parse.UE4.Objects.UObject; using CUE4Parse.Utils; +using CUE4Parse_Conversion.Animations; +using CUE4Parse_Conversion.Dto; +using CUE4Parse_Conversion.Meshes; +using CUE4Parse_Conversion.Options; using FModel.Creator; using FModel.Settings; using FModel.Views.Snooper.Animations; @@ -93,8 +93,8 @@ public class Renderer : IDisposable case UGeometryCollection when export.Value is UGeometryCollection gc: LoadStaticMesh(gc, UserSettings.Default.NaniteMeshExportFormat); break; - case USkeletalMesh when export.Value is USkeletalMesh sk: - LoadSkeletalMesh(sk); + case USkinnedAsset when export.Value is USkinnedAsset sa: + LoadSkinnedAsset(sa); break; case USkeleton when export.Value is USkeleton skel: LoadSkeleton(skel); @@ -197,12 +197,12 @@ public class Renderer : IDisposable } break; } - case USkeletalMesh sk: + case USkinnedAsset sa: { guid = Guid.NewGuid(); - if (!Options.Models.ContainsKey(guid) && sk.TryConvert(out var mesh, EMeshQuality.Highest)) + if (!Options.Models.ContainsKey(guid) && sa.TryConvert(out var mesh, EMeshQuality.Highest)) { - addedModel = new SkeletalModel(sk, mesh, t); + addedModel = new SkeletalModel(sa, mesh, t); Options.Models[guid] = addedModel; } break; @@ -391,13 +391,28 @@ public class Renderer : IDisposable Options.SelectModel(guid); } - private void LoadSkeletalMesh(USkeletalMesh original) + private void LoadSkinnedAsset(USkinnedAsset original, ENaniteMeshFormat naniteFormat = ENaniteMeshFormat.NoNanite) { var guid = new FGuid((uint) original.GetFullName().GetHashCode()); - if (Options.Models.ContainsKey(guid) || !original.TryConvert(out var mesh, EMeshQuality.Highest)) return; + if (Options.TryGetModel(guid, out var model)) + { + model.AddInstance(Transform.Identity); + Application.Current.Dispatcher.Invoke(() => model.SetupInstances()); + return; + } - var skeletalModel = new SkeletalModel(original, mesh); - Options.Models[guid] = skeletalModel; + SkeletalMeshDto mesh; + try + { + mesh = new SkeletalMeshDto(original, EMeshQuality.Highest, naniteFormat); + } + catch (Exception e) + { + Log.Error(e, "Failed to convert chaos cloth asset"); + return; + } + + Options.Models[guid] = new SkeletalModel(original, mesh); Options.SelectModel(guid); } From 98bfdc690d353df54d33782c766cad9a74c4eda3 Mon Sep 17 00:00:00 2001 From: Masusder <59669685+Masusder@users.noreply.github.com> Date: Sun, 13 Sep 2026 21:03:01 +0200 Subject: [PATCH 7/8] Arc Raiders/PUBG Mobile 4.6/Splitgate 2/InZOI updates, Delta Force VT fix, Fixed PSK exports, Added support for new Roco Kingdom: World encryption, Criware fixes, Option to clear empty game directories, APKs can now be loaded directly, Fixed laggy game version filtering, Added update notification, Audio middleware assets are now grouped Co-Authored-By: LongerWarrior <37636768+LongerWarrior@users.noreply.github.com> Co-Authored-By: Luke <17146677+lukefz@users.noreply.github.com> Co-Authored-By: Abishek <73873078+abishek82828@users.noreply.github.com> --- CUE4Parse | 2 +- FModel/Enums.cs | 8 + FModel/MainWindow.xaml | 27 +++ .../ApiEndpoints/FModelApiEndpoint.cs | 1 + FModel/ViewModels/ApplicationViewModel.cs | 9 +- FModel/ViewModels/AudioPlayerViewModel.cs | 6 +- FModel/ViewModels/CUE4ParseViewModel.cs | 8 +- FModel/ViewModels/Commands/LoadCommand.cs | 2 +- FModel/ViewModels/GameFileViewModel.cs | 58 ++++++- FModel/ViewModels/GameSelectorViewModel.cs | 35 +++- FModel/Views/DirectorySelector.xaml | 8 +- FModel/Views/DirectorySelector.xaml.cs | 38 +++++ FModel/Views/Resources/Colors.xaml | 5 + .../Explorer/ListExplorer/FileRow.xaml | 2 + .../Explorer/TiledExplorer/FileButton.xaml | 2 + .../Resources/Controls/FilterableComboBox.cs | 157 +++++++++++++----- .../Converters/FileToGeometryConverter.cs | 16 +- FModel/Views/Resources/Icons.xaml | 6 + FModel/Views/Resources/Resources.xaml | 10 ++ 19 files changed, 339 insertions(+), 61 deletions(-) diff --git a/CUE4Parse b/CUE4Parse index 89ef88f6..33529e8f 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 89ef88f6a3cf9437e599838e68b990e341a329d3 +Subproject commit 33529e8f7e9d764aa05877db1b6c3e9b0b7f7122 diff --git a/FModel/Enums.cs b/FModel/Enums.cs index c172cdd3..6d599d95 100644 --- a/FModel/Enums.cs +++ b/FModel/Enums.cs @@ -171,6 +171,14 @@ public enum EAssetCategory : uint GothamKnights = GameSpecific + 7, } +public enum EAssetFamily +{ + None, + Criware, + Wwise, + FMod, +} + public enum EUnluacMode { Decompile, diff --git a/FModel/MainWindow.xaml b/FModel/MainWindow.xaml index 6c63f0d7..53048aa6 100644 --- a/FModel/MainWindow.xaml +++ b/FModel/MainWindow.xaml @@ -807,6 +807,33 @@ HorizontalAlignment="Right" VerticalAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> + + +