From 2fefbfebb60993373a012bcc6b8e39378c835925 Mon Sep 17 00:00:00 2001 From: LongerWarrior Date: Tue, 23 Jun 2026 20:41:42 +0300 Subject: [PATCH 1/4] Aion2 dat files decryption Back4Blood support --- CUE4Parse | 2 +- FModel/ViewModels/CUE4ParseViewModel.cs | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CUE4Parse b/CUE4Parse index 024b005c..e218a3bb 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 024b005c4d15e8082ecebfb202700d59bb6113c0 +Subproject commit e218a3bbd67e4dfc198350179aa25bcdaedb4077 diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index ee21c2c2..6c37e0a8 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -49,6 +49,7 @@ using CUE4Parse.UE4.BinaryConfig; using CUE4Parse.UE4.CriWare; using CUE4Parse.UE4.CriWare.Readers; using CUE4Parse.UE4.FMod; +using CUE4Parse.UE4.GameFeatures; using CUE4Parse.UE4.IO; using CUE4Parse.UE4.Localization; using CUE4Parse.UE4.Lua.unluac; @@ -851,6 +852,13 @@ public class CUE4ParseViewModel : ViewModel break; } + case "bin" when entry.Name.Contains("GameFeatureVersePaths", StringComparison.OrdinalIgnoreCase): + { + var archive = entry.CreateReader(); + var versePathLookup = new FGameFeatureVersePathLookup(archive); + TabControl.SelectedTab.SetDocumentText(JsonConvert.SerializeObject(versePathLookup, Formatting.Indented), saveProperties, updateUi); + break; + } case "bank": { var archive = entry.CreateReader(); @@ -1096,6 +1104,11 @@ public class CUE4ParseViewModel : ViewModel var l10nData = new FAion2L10NFile(entry, Provider); TabControl.SelectedTab.SetDocumentText(JsonConvert.SerializeObject(l10nData, Formatting.Indented), saveProperties, updateUi); } + else if (entry.NameWithoutExtension.Equals("key_manifest")) + { + var keymanifest = new FAion2KeyManifestFile(entry, Provider); + TabControl.SelectedTab.SetDocumentText(JsonConvert.SerializeObject(keymanifest, Formatting.Indented), saveProperties, updateUi); + } else { FAion2DataFile datfile = entry.NameWithoutExtension switch From 0af2e0b7043ef6173df234386d4c739c265a85d3 Mon Sep 17 00:00:00 2001 From: Masusder <59669685+Masusder@users.noreply.github.com> Date: Fri, 26 Jun 2026 16:46:14 +0200 Subject: [PATCH 2/4] Fortnite fixes, NFS Mobile support, Lord of the Fallen support, DBD dynamic content Co-Authored-By: LongerWarrior <37636768+LongerWarrior@users.noreply.github.com> Co-Authored-By: Garrett Koleda --- CUE4Parse | 2 +- FModel/ViewModels/AssetsFolderViewModel.cs | 9 ++++++++- FModel/ViewModels/CUE4ParseViewModel.cs | 4 ++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CUE4Parse b/CUE4Parse index e218a3bb..c43d6707 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit e218a3bbd67e4dfc198350179aa25bcdaedb4077 +Subproject commit c43d6707cbde0305e2970d7c527e2ccd26f393c7 diff --git a/FModel/ViewModels/AssetsFolderViewModel.cs b/FModel/ViewModels/AssetsFolderViewModel.cs index d5af8e98..c76b0ad3 100644 --- a/FModel/ViewModels/AssetsFolderViewModel.cs +++ b/FModel/ViewModels/AssetsFolderViewModel.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -229,11 +230,17 @@ public class AssetsFolderViewModel return null; } + var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData).Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); foreach (var entry in entries) { TreeItem lastNode = null; TreeItem parentItem = null; - var folders = entry.Path.Split('/', StringSplitOptions.RemoveEmptyEntries); + + var path = entry.Path; + if (path.StartsWith(localAppData, StringComparison.OrdinalIgnoreCase)) + path = path[localAppData.Length..].TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + + var folders = path.Split('/', StringSplitOptions.RemoveEmptyEntries); var builder = new StringBuilder(64); var parentNode = treeItems; diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index 6c37e0a8..caf7527a 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -201,6 +201,10 @@ public class CUE4ParseViewModel : ViewModel [ new(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\KONAMI\\eFootball\\ST\\Download") ], SearchOption.AllDirectories, versionContainer, pathComparer), + "DeadByDaylight" => new DefaultFileProvider(new DirectoryInfo(gameDirectory), + [ + new(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\DeadByDaylight\\Saved\\PersistentDownloadDir\\DynamicContent") + ], SearchOption.AllDirectories, versionContainer, pathComparer), _ when versionContainer.Game is EGame.GAME_AshEchoes => new AEDefaultFileProvider(gameDirectory, SearchOption.AllDirectories, versionContainer, pathComparer), _ when versionContainer.Game is EGame.GAME_BlackStigma => new DefaultFileProvider(gameDirectory, SearchOption.AllDirectories, versionContainer, StringComparer.Ordinal), _ when versionContainer.Game is EGame.GAME_HonorofKingsWorld => new HoKWDefaultFileProvider(gameDirectory, SearchOption.AllDirectories, versionContainer, pathComparer), From 61df828b92a5d0d60d886f04d88ab2b2c9d24d07 Mon Sep 17 00:00:00 2001 From: Tectors <73559984+Tectfy@users.noreply.github.com> Date: Sat, 27 Jun 2026 21:16:19 -0700 Subject: [PATCH 3/4] Add optional .o.uasset editor-only data merging --- FModel/Settings/UserSettings.cs | 7 ++++++ FModel/ViewModels/CUE4ParseViewModel.cs | 29 ++++++++++++++++++++++++- FModel/Views/SettingsView.xaml | 13 +++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/FModel/Settings/UserSettings.cs b/FModel/Settings/UserSettings.cs index 0f48e7e8..c490d15c 100644 --- a/FModel/Settings/UserSettings.cs +++ b/FModel/Settings/UserSettings.cs @@ -282,6 +282,13 @@ namespace FModel.Settings set => SetProperty(ref _convertAudioOnBulkExport, value); } + private bool _mergeEditorOnlyDataExports = true; + public bool MergeEditorOnlyDataExports + { + get => _mergeEditorOnlyDataExports; + set => SetProperty(ref _mergeEditorOnlyDataExports, value); + } + private bool _decompileLua; public bool DecompileLua { diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index caf7527a..b4ba55c3 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -676,7 +676,34 @@ public class CUE4ParseViewModel : ViewModel if (saveProperties || updateUi) { - TabControl.SelectedTab.SetDocumentText(JsonConvert.SerializeObject(result.GetDisplayData(saveProperties), Formatting.Indented), saveProperties, updateUi); + var displayData = result.GetDisplayData(saveProperties); + + if (UserSettings.Default.MergeEditorOnlyDataExports && Provider.TryLoadPackage(entry.Path.SubstringBefore('.') + ".o.uasset", out var editorAsset)) + { + var pkg = Provider.LoadPackage(entry.Path); + var exports = pkg.GetExports().ToArray(); + var finalExports = new List(exports); + var editorOnlyDataExports = new HashSet(); + + foreach (var export in exports) + { + var editorData = editorAsset.GetExportOrNull(export.Name + "EditorOnlyData"); + if (editorData == null) + continue; + + export.Properties.AddRange(editorData.Properties); + editorOnlyDataExports.Add(editorData); + } + + if (editorOnlyDataExports.Count > 0) + { + finalExports.AddRange(editorAsset.GetExports().Where(editorExport => !editorOnlyDataExports.Contains(editorExport))); + } + + displayData = finalExports; + } + + TabControl.SelectedTab.SetDocumentText(JsonConvert.SerializeObject(displayData, Formatting.Indented), saveProperties, updateUi); if (saveProperties) break; // do not search for viewable exports if we are dealing with jsons } diff --git a/FModel/Views/SettingsView.xaml b/FModel/Views/SettingsView.xaml index 1df9bdb3..6e73ec25 100644 --- a/FModel/Views/SettingsView.xaml +++ b/FModel/Views/SettingsView.xaml @@ -46,6 +46,7 @@ + @@ -276,6 +277,18 @@ TextChanged="CriwareKeyBox_TextChanged" Loaded="CriwareKeyBox_Loaded"/> + + From 4195cbbd75d317a02dbff754088fff39e5c98c9f Mon Sep 17 00:00:00 2001 From: Masusder <59669685+Masusder@users.noreply.github.com> Date: Sun, 28 Jun 2026 11:24:00 +0200 Subject: [PATCH 4/4] Keep it with rest of the bool toggles --- FModel/Views/SettingsView.xaml | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/FModel/Views/SettingsView.xaml b/FModel/Views/SettingsView.xaml index 6e73ec25..da76701a 100644 --- a/FModel/Views/SettingsView.xaml +++ b/FModel/Views/SettingsView.xaml @@ -259,13 +259,25 @@ Style="{DynamicResource {x:Static adonisUi:Styles.ToggleSwitch}}" /> + + + - - - - + Loaded="CriwareKeyBox_Loaded" />