From 8bca3d82f53defdc3882368bc8b7249594826b11 Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Sun, 25 Dec 2022 14:04:29 +0100 Subject: [PATCH] Probably fix some atex/avfx problems. --- Penumbra/Dalamud.cs | 26 +++++++++---------- .../Resolver/PathResolver.AnimationState.cs | 23 ++++++++++++++++ Penumbra/Interop/Resolver/PathResolver.cs | 1 + 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/Penumbra/Dalamud.cs b/Penumbra/Dalamud.cs index 9aa29806..ab2b924a 100644 --- a/Penumbra/Dalamud.cs +++ b/Penumbra/Dalamud.cs @@ -19,18 +19,18 @@ public class Dalamud public static void Initialize( DalamudPluginInterface pluginInterface ) => pluginInterface.Create< Dalamud >(); - // @formatter:off - [PluginService][RequiredVersion("1.0")] public static DalamudPluginInterface PluginInterface { get; private set; } = null!; - [PluginService][RequiredVersion("1.0")] public static CommandManager Commands { get; private set; } = null!; - [PluginService][RequiredVersion("1.0")] public static DataManager GameData { get; private set; } = null!; - [PluginService][RequiredVersion("1.0")] public static ClientState ClientState { get; private set; } = null!; - [PluginService][RequiredVersion("1.0")] public static ChatGui Chat { get; private set; } = null!; - [PluginService][RequiredVersion("1.0")] public static Framework Framework { get; private set; } = null!; - [PluginService][RequiredVersion("1.0")] public static Condition Conditions { get; private set; } = null!; - [PluginService][RequiredVersion("1.0")] public static TargetManager Targets { get; private set; } = null!; - [PluginService][RequiredVersion("1.0")] public static ObjectTable Objects { get; private set; } = null!; - [PluginService][RequiredVersion("1.0")] public static TitleScreenMenu TitleScreenMenu { get; private set; } = null!; - [PluginService][RequiredVersion("1.0")] public static GameGui GameGui { get; private set; } = null!; - [PluginService][RequiredVersion("1.0")] public static KeyState KeyState { get; private set; } = null!; + // @formatter:off + [PluginService][RequiredVersion("1.0")] public static DalamudPluginInterface PluginInterface { get; private set; } = null!; + [PluginService][RequiredVersion("1.0")] public static CommandManager Commands { get; private set; } = null!; + [PluginService][RequiredVersion("1.0")] public static DataManager GameData { get; private set; } = null!; + [PluginService][RequiredVersion("1.0")] public static ClientState ClientState { get; private set; } = null!; + [PluginService][RequiredVersion("1.0")] public static ChatGui Chat { get; private set; } = null!; + [PluginService][RequiredVersion("1.0")] public static Framework Framework { get; private set; } = null!; + [PluginService][RequiredVersion("1.0")] public static Condition Conditions { get; private set; } = null!; + [PluginService][RequiredVersion("1.0")] public static TargetManager Targets { get; private set; } = null!; + [PluginService][RequiredVersion("1.0")] public static ObjectTable Objects { get; private set; } = null!; + [PluginService][RequiredVersion("1.0")] public static TitleScreenMenu TitleScreenMenu { get; private set; } = null!; + [PluginService][RequiredVersion("1.0")] public static GameGui GameGui { get; private set; } = null!; + [PluginService][RequiredVersion("1.0")] public static KeyState KeyState { get; private set; } = null!; // @formatter:on } \ No newline at end of file diff --git a/Penumbra/Interop/Resolver/PathResolver.AnimationState.cs b/Penumbra/Interop/Resolver/PathResolver.AnimationState.cs index e862b82b..3153800c 100644 --- a/Penumbra/Interop/Resolver/PathResolver.AnimationState.cs +++ b/Penumbra/Interop/Resolver/PathResolver.AnimationState.cs @@ -24,6 +24,14 @@ public unsafe partial class PathResolver SignatureHelper.Initialise( this ); } + public void UpdateAvfx( ResourceType type, ResolveData data ) + { + if( type == ResourceType.Avfx ) + { + _lastAvfxData = data; + } + } + public bool HandleFiles( ResourceType type, Utf8GamePath _, out ResolveData resolveData ) { switch( type ) @@ -91,6 +99,7 @@ public unsafe partial class PathResolver _someActionLoadHook.Enable(); _someOtherAvfxHook.Enable(); _loadCharacterSoundHook.Enable(); + //_apricotResourceLoadHook.Enable(); } public void Disable() @@ -102,6 +111,7 @@ public unsafe partial class PathResolver _someActionLoadHook.Disable(); _someOtherAvfxHook.Disable(); _loadCharacterSoundHook.Disable(); + //_apricotResourceLoadHook.Disable(); } public void Dispose() @@ -113,6 +123,7 @@ public unsafe partial class PathResolver _someActionLoadHook.Dispose(); _someOtherAvfxHook.Dispose(); _loadCharacterSoundHook.Dispose(); + //_apricotResourceLoadHook.Dispose(); } // Characters load some of their voice lines or whatever with this function. @@ -250,5 +261,17 @@ public unsafe partial class PathResolver _someOtherAvfxHook.Original( unk ); _animationLoadData = last; } + + //private delegate byte ApricotResourceLoadDelegate( IntPtr handle, IntPtr unk1, byte unk2 ); + // + //[Signature( "48 89 74 24 ?? 57 48 83 EC ?? 41 0F B6 F0 48 8B F9", DetourName = nameof( ApricotResourceLoadDetour ) )] + //private readonly Hook< ApricotResourceLoadDelegate > _apricotResourceLoadHook = null!; + // + // + //private byte ApricotResourceLoadDetour( IntPtr handle, IntPtr unk1, byte unk2 ) + //{ + // Penumbra.Log.Information( $"{handle:X} {new ByteString( ( ( ResourceHandle* )handle )->FileName() )} {unk1:X} {unk2} {_lastAvfxData.ModCollection.Name}" ); + // return _apricotResourceLoadHook.Original( handle, unk1, unk2 ); + //} } } \ No newline at end of file diff --git a/Penumbra/Interop/Resolver/PathResolver.cs b/Penumbra/Interop/Resolver/PathResolver.cs index 439040c1..14f345d6 100644 --- a/Penumbra/Interop/Resolver/PathResolver.cs +++ b/Penumbra/Interop/Resolver/PathResolver.cs @@ -71,6 +71,7 @@ public partial class PathResolver : IDisposable // We also need to handle defaulted materials against a non-default collection. var path = resolved == null ? gamePath.Path.ToString() : resolved.Value.FullName; MaterialState.HandleCollection( resolveData, path, nonDefault, type, resolved, out data ); + _animations.UpdateAvfx( type, data.Item2 ); return true; }