From c10ff9dfc239d2bb6ad36e1c1af9bcdd7dde045f Mon Sep 17 00:00:00 2001 From: Masusder <59669685+Masusder@users.noreply.github.com> Date: Sun, 18 May 2025 13:34:29 +0200 Subject: [PATCH] Debug helper --- CUE4Parse | 2 +- FModel/ViewModels/CUE4ParseViewModel.cs | 39 ++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/CUE4Parse b/CUE4Parse index 330f706c..eba3ca67 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 330f706c1f04389dc4da37382365d727b5fc09a0 +Subproject commit eba3ca676b54d3cd07770b6f5e90ac25e7db7aa9 diff --git a/FModel/ViewModels/CUE4ParseViewModel.cs b/FModel/ViewModels/CUE4ParseViewModel.cs index c5520992..23652770 100644 --- a/FModel/ViewModels/CUE4ParseViewModel.cs +++ b/FModel/ViewModels/CUE4ParseViewModel.cs @@ -35,6 +35,7 @@ using CUE4Parse.UE4.Readers; using CUE4Parse.UE4.Shaders; using CUE4Parse.UE4.Versions; using CUE4Parse.UE4.Wwise; +using CUE4Parse.UE4.Wwise.Objects; using CUE4Parse.UE4.Wwise.Objects.HIRC; using CUE4Parse_Conversion; using CUE4Parse_Conversion.Sounds; @@ -61,7 +62,6 @@ using SkiaSharp; using UE4Config.Parsing; using Application = System.Windows.Application; using FGuid = CUE4Parse.UE4.Objects.Core.Misc.FGuid; -using CUE4Parse.UE4.Wwise.Objects; namespace FModel.ViewModels; @@ -869,7 +869,7 @@ public class CUE4ParseViewModel : ViewModel TryLoadAndCacheSoundBank(soundBankPath, soundBankName, out _); - var visitedDecisionNodes = new HashSet<(uint parentHierarchyId, uint audioNodeId)>(); // To prevent infinite loops + var visitedDecisionNodes = new HashSet<(uint parentHierarchyId, uint audioNodeId)>(); // To prevent infinite loops (shouldn't happen, just in case) long parsedId = long.Parse(audioEventId); uint parsedAudioEventId = (uint) parsedId; if (_wwiseHierarchyTables.TryGetValue(parsedAudioEventId, out var eventHierarchy) && @@ -879,13 +879,26 @@ public class CUE4ParseViewModel : ViewModel { if (!_wwiseHierarchyTables.TryGetValue(actionId, out var actionHierarchy) || actionHierarchy.Data is not HierarchyEventAction eventAction) - continue; + continue; + + // TODO: If EventActionPlay points to different soundbank ID than we're currently in, use `wwiseReader.IdToString` to convert to bank name, serialize it, and continue traversing from there + // This isn't needed if all soundbanks are loaded anyway + + //if (eventAction.EventActionType == EEventActionType.Play) + //{ + // var playActionData = (AkActionPlay) eventAction.ActionData; + // var bankId = playActionData.BankId; + // if (bankId != referencedSoundBankId) // I need to know what soundbank I'm currently in + // { + // var soundbankConvertedName = IdToString[referencedSoundBankId]; // I need IdToString from given soundbank + // TryLoadAndCacheSoundBank(Path.Combine(baseWwiseAudioPath, soundbankConvertedName + ".bnk"), soundbankConvertedName, out _); + // } + //} TraverseAndSave(eventAction.ReferencedId); } } - // TODO: If EventActionPlay points to different soundbank ID than we're currently in, use `wwiseReader.IdToString` to convert to bank name, serialize it, and continue traversing from there void TraverseAndSave(uint id) { if (!_wwiseHierarchyTables.TryGetValue(id, out var hierarchy)) @@ -1227,7 +1240,16 @@ public class CUE4ParseViewModel : ViewModel foreach (var soundbank in soundBankFiles) { if (totalLoadedBanks >= MAX_BANK_FILES) + { +#if DEBUG + Log.Debug("Reached maximum number of soundbank files to load. This game might require custom loading implementation (only necessary if audio event hierarchies are split across multiple soundbanks)."); + FLogger.Append(ELog.Debug, () => + { + FLogger.Text("Max soundbank files loaded. Custom loading may be required if hierarchies are split across multiple banks.", Constants.WHITE); + }); +#endif break; + } string fullPath = soundbank.Path; string relPath = fullPath[baseWwiseAudioPath.Length..].TrimStart('/', '\\'); @@ -1236,7 +1258,16 @@ public class CUE4ParseViewModel : ViewModel continue; if (totalLoadedSize + size > MAX_TOTAL_WWISE_SIZE) + { +#if DEBUG + Log.Debug("Reached maximum total size of soundbank files to load. This game might require custom loading implementation (only necessary if audio event hierarchies are split across multiple soundbanks)."); + FLogger.Append(ELog.Debug, () => + { + FLogger.Text("Reached max total soundbank size. Custom loading may be required if hierarchies are split across multiple banks.", Constants.WHITE); + }); +#endif break; + } totalLoadedSize += size; totalLoadedBanks += 1;