From e6d73971e99def23848a826e5c6a9c57cb303f5c Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Sun, 22 Jan 2023 16:39:15 +0100 Subject: [PATCH] Change resolving to consider every resource category to fix music resolving. --- .../Loader/ResourceLoader.Replacement.cs | 51 ++++++++++++++----- 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/Penumbra/Interop/Loader/ResourceLoader.Replacement.cs b/Penumbra/Interop/Loader/ResourceLoader.Replacement.cs index 89237ff7..437a51b6 100644 --- a/Penumbra/Interop/Loader/ResourceLoader.Replacement.cs +++ b/Penumbra/Interop/Loader/ResourceLoader.Replacement.cs @@ -133,23 +133,46 @@ public unsafe partial class ResourceLoader } path = path.ToLower(); - if( category == ResourceCategory.Ui ) + switch( category ) { - var resolved = Penumbra.CollectionManager.Interface.ResolvePath( path ); - return ( resolved, Penumbra.CollectionManager.Interface.ToResolveData() ); - } - - if( ResolvePathCustomization != null ) - { - foreach( var resolver in ResolvePathCustomization.GetInvocationList() ) + // Only Interface collection. + case ResourceCategory.Ui: { - if( ( ( ResolvePathDelegate )resolver ).Invoke( path, category, resourceType, resourceHash, out var ret ) ) - { - return ret; - } + var resolved = Penumbra.CollectionManager.Interface.ResolvePath( path ); + return ( resolved, Penumbra.CollectionManager.Interface.ToResolveData() ); } - } + // Never allow changing scripts. + case ResourceCategory.UiScript: + case ResourceCategory.GameScript: + return ( null, ResolveData.Invalid ); + // Use actual resolving. + case ResourceCategory.Chara: + case ResourceCategory.Shader: + case ResourceCategory.Vfx: + if( ResolvePathCustomization != null ) + { + foreach( var resolver in ResolvePathCustomization.GetInvocationList() ) + { + if( ( ( ResolvePathDelegate )resolver ).Invoke( path, category, resourceType, resourceHash, out var ret ) ) + { + return ret; + } + } + } + break; + // None of these files are ever associated with specific characters, + // always use the default resolver for now. + case ResourceCategory.Common: + case ResourceCategory.BgCommon: + case ResourceCategory.Bg: + case ResourceCategory.Cut: + case ResourceCategory.Exd: + case ResourceCategory.Music: + case ResourceCategory.Sound: + default: + break; + } return DefaultResolver( path ); } @@ -182,7 +205,7 @@ public unsafe partial class ResourceLoader return ReadSqPackHook.Original( resourceManager, fileDescriptor, priority, isSync ); } - if( !fileDescriptor->ResourceHandle->GamePath(out var gamePath) || gamePath.Length == 0 ) + if( !fileDescriptor->ResourceHandle->GamePath( out var gamePath ) || gamePath.Length == 0 ) { return ReadSqPackHook.Original( resourceManager, fileDescriptor, priority, isSync ); }