mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 18:27:24 +01:00
Add demihuman hooks for resolving.
This commit is contained in:
parent
1fb2ddaa5e
commit
1ee4cb99d0
4 changed files with 129 additions and 6 deletions
88
Penumbra/Interop/Resolver/PathResolver.Demihuman.cs
Normal file
88
Penumbra/Interop/Resolver/PathResolver.Demihuman.cs
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
using System;
|
||||
using Dalamud.Hooking;
|
||||
using Dalamud.Utility.Signatures;
|
||||
|
||||
namespace Penumbra.Interop.Resolver;
|
||||
|
||||
public unsafe partial class PathResolver
|
||||
{
|
||||
[Signature( "48 8D 05 ?? ?? ?? ?? 45 33 C0 48 89 03 BA", ScanType = ScanType.StaticAddress )]
|
||||
public IntPtr* DrawObjectDemiVTable;
|
||||
|
||||
public Hook< GeneralResolveDelegate >? ResolveDemiDecalPathHook;
|
||||
public Hook< EidResolveDelegate >? ResolveDemiEidPathHook;
|
||||
public Hook< GeneralResolveDelegate >? ResolveDemiImcPathHook;
|
||||
public Hook< MPapResolveDelegate >? ResolveDemiMPapPathHook;
|
||||
public Hook< GeneralResolveDelegate >? ResolveDemiMdlPathHook;
|
||||
public Hook< MaterialResolveDetour >? ResolveDemiMtrlPathHook;
|
||||
public Hook< MaterialResolveDetour >? ResolveDemiPapPathHook;
|
||||
public Hook< GeneralResolveDelegate >? ResolveDemiPhybPathHook;
|
||||
public Hook< GeneralResolveDelegate >? ResolveDemiSklbPathHook;
|
||||
public Hook< GeneralResolveDelegate >? ResolveDemiSkpPathHook;
|
||||
public Hook< EidResolveDelegate >? ResolveDemiTmbPathHook;
|
||||
public Hook< MaterialResolveDetour >? ResolveDemiVfxPathHook;
|
||||
|
||||
private void SetupDemiHooks()
|
||||
{
|
||||
ResolveDemiDecalPathHook = new Hook< GeneralResolveDelegate >( DrawObjectDemiVTable[ ResolveDecalIdx ], ResolveDemiDecalDetour );
|
||||
ResolveDemiEidPathHook = new Hook< EidResolveDelegate >( DrawObjectDemiVTable[ ResolveEidIdx ], ResolveDemiEidDetour );
|
||||
ResolveDemiImcPathHook = new Hook< GeneralResolveDelegate >( DrawObjectDemiVTable[ ResolveImcIdx ], ResolveDemiImcDetour );
|
||||
ResolveDemiMPapPathHook = new Hook< MPapResolveDelegate >( DrawObjectDemiVTable[ ResolveMPapIdx ], ResolveDemiMPapDetour );
|
||||
ResolveDemiMdlPathHook = new Hook< GeneralResolveDelegate >( DrawObjectDemiVTable[ ResolveMdlIdx ], ResolveDemiMdlDetour );
|
||||
ResolveDemiMtrlPathHook = new Hook< MaterialResolveDetour >( DrawObjectDemiVTable[ ResolveMtrlIdx ], ResolveDemiMtrlDetour );
|
||||
ResolveDemiPapPathHook = new Hook< MaterialResolveDetour >( DrawObjectDemiVTable[ ResolvePapIdx ], ResolveDemiPapDetour );
|
||||
ResolveDemiPhybPathHook = new Hook< GeneralResolveDelegate >( DrawObjectDemiVTable[ ResolvePhybIdx ], ResolveDemiPhybDetour );
|
||||
ResolveDemiSklbPathHook = new Hook< GeneralResolveDelegate >( DrawObjectDemiVTable[ ResolveSklbIdx ], ResolveDemiSklbDetour );
|
||||
ResolveDemiSkpPathHook = new Hook< GeneralResolveDelegate >( DrawObjectDemiVTable[ ResolveSkpIdx ], ResolveDemiSkpDetour );
|
||||
ResolveDemiTmbPathHook = new Hook< EidResolveDelegate >( DrawObjectDemiVTable[ ResolveTmbIdx ], ResolveDemiTmbDetour );
|
||||
ResolveDemiVfxPathHook = new Hook< MaterialResolveDetour >( DrawObjectDemiVTable[ ResolveVfxIdx ], ResolveDemiVfxDetour );
|
||||
}
|
||||
|
||||
private void EnableDemiHooks()
|
||||
{
|
||||
ResolveDemiDecalPathHook?.Enable();
|
||||
ResolveDemiEidPathHook?.Enable();
|
||||
ResolveDemiImcPathHook?.Enable();
|
||||
ResolveDemiMPapPathHook?.Enable();
|
||||
ResolveDemiMdlPathHook?.Enable();
|
||||
ResolveDemiMtrlPathHook?.Enable();
|
||||
ResolveDemiPapPathHook?.Enable();
|
||||
ResolveDemiPhybPathHook?.Enable();
|
||||
ResolveDemiSklbPathHook?.Enable();
|
||||
ResolveDemiSkpPathHook?.Enable();
|
||||
ResolveDemiTmbPathHook?.Enable();
|
||||
ResolveDemiVfxPathHook?.Enable();
|
||||
}
|
||||
|
||||
private void DisableDemiHooks()
|
||||
{
|
||||
ResolveDemiDecalPathHook?.Disable();
|
||||
ResolveDemiEidPathHook?.Disable();
|
||||
ResolveDemiImcPathHook?.Disable();
|
||||
ResolveDemiMPapPathHook?.Disable();
|
||||
ResolveDemiMdlPathHook?.Disable();
|
||||
ResolveDemiMtrlPathHook?.Disable();
|
||||
ResolveDemiPapPathHook?.Disable();
|
||||
ResolveDemiPhybPathHook?.Disable();
|
||||
ResolveDemiSklbPathHook?.Disable();
|
||||
ResolveDemiSkpPathHook?.Disable();
|
||||
ResolveDemiTmbPathHook?.Disable();
|
||||
ResolveDemiVfxPathHook?.Disable();
|
||||
}
|
||||
|
||||
private void DisposeDemiHooks()
|
||||
{
|
||||
ResolveDemiDecalPathHook?.Dispose();
|
||||
ResolveDemiEidPathHook?.Dispose();
|
||||
ResolveDemiImcPathHook?.Dispose();
|
||||
ResolveDemiMPapPathHook?.Dispose();
|
||||
ResolveDemiMdlPathHook?.Dispose();
|
||||
ResolveDemiMtrlPathHook?.Dispose();
|
||||
ResolveDemiPapPathHook?.Dispose();
|
||||
ResolveDemiPhybPathHook?.Dispose();
|
||||
ResolveDemiSklbPathHook?.Dispose();
|
||||
ResolveDemiSkpPathHook?.Dispose();
|
||||
ResolveDemiTmbPathHook?.Dispose();
|
||||
ResolveDemiVfxPathHook?.Dispose();
|
||||
}
|
||||
}
|
||||
|
|
@ -14,12 +14,6 @@ public unsafe partial class PathResolver
|
|||
// [Signature( "48 8D 1D ?? ?? ?? ?? 48 C7 41", ScanType = ScanType.StaticAddress )]
|
||||
// public IntPtr* DrawObjectVTable;
|
||||
//
|
||||
// [Signature( "48 8D 05 ?? ?? ?? ?? 45 33 C0 48 89 03 BA", ScanType = ScanType.StaticAddress )]
|
||||
// public IntPtr* DrawObjectDemihumanVTable;
|
||||
//
|
||||
// [Signature( "48 8D 05 ?? ?? ?? ?? 48 89 03 33 C0 48 89 83 ?? ?? ?? ?? 48 89 83 ?? ?? ?? ?? C7 83", ScanType = ScanType.StaticAddress )]
|
||||
// public IntPtr* DrawObjectMonsterVTable;
|
||||
//
|
||||
// public const int ResolveRootIdx = 71;
|
||||
|
||||
public const int ResolveSklbIdx = 72;
|
||||
|
|
|
|||
|
|
@ -136,6 +136,43 @@ public unsafe partial class PathResolver
|
|||
private IntPtr ResolveMonsterVfxDetour( IntPtr drawObject, IntPtr path, IntPtr unk3, uint unk4, ulong unk5 )
|
||||
=> ResolvePathDetour( drawObject, ResolveMonsterVfxPathHook!.Original( drawObject, path, unk3, unk4, unk5 ) );
|
||||
|
||||
// Demihumans
|
||||
private IntPtr ResolveDemiDecalDetour( IntPtr drawObject, IntPtr path, IntPtr unk3, uint unk4 )
|
||||
=> ResolvePathDetour( drawObject, ResolveDemiDecalPathHook!.Original( drawObject, path, unk3, unk4 ) );
|
||||
|
||||
private IntPtr ResolveDemiEidDetour( IntPtr drawObject, IntPtr path, IntPtr unk3 )
|
||||
=> ResolvePathDetour( drawObject, ResolveDemiEidPathHook!.Original( drawObject, path, unk3 ) );
|
||||
|
||||
private IntPtr ResolveDemiImcDetour( IntPtr drawObject, IntPtr path, IntPtr unk3, uint unk4 )
|
||||
=> ResolvePathDetour( drawObject, ResolveDemiImcPathHook!.Original( drawObject, path, unk3, unk4 ) );
|
||||
|
||||
private IntPtr ResolveDemiMPapDetour( IntPtr drawObject, IntPtr path, IntPtr unk3, uint unk4, uint unk5 )
|
||||
=> ResolvePathDetour( drawObject, ResolveDemiMPapPathHook!.Original( drawObject, path, unk3, unk4, unk5 ) );
|
||||
|
||||
private IntPtr ResolveDemiMdlDetour( IntPtr drawObject, IntPtr path, IntPtr unk3, uint modelType )
|
||||
=> ResolvePathDetour( drawObject, ResolveDemiMdlPathHook!.Original( drawObject, path, unk3, modelType ) );
|
||||
|
||||
private IntPtr ResolveDemiMtrlDetour( IntPtr drawObject, IntPtr path, IntPtr unk3, uint unk4, ulong unk5 )
|
||||
=> ResolvePathDetour( drawObject, ResolveDemiMtrlPathHook!.Original( drawObject, path, unk3, unk4, unk5 ) );
|
||||
|
||||
private IntPtr ResolveDemiPapDetour( IntPtr drawObject, IntPtr path, IntPtr unk3, uint unk4, ulong unk5 )
|
||||
=> ResolvePathDetour( drawObject, ResolveDemiPapPathHook!.Original( drawObject, path, unk3, unk4, unk5 ) );
|
||||
|
||||
private IntPtr ResolveDemiPhybDetour( IntPtr drawObject, IntPtr path, IntPtr unk3, uint unk4 )
|
||||
=> ResolvePathDetour( drawObject, ResolveDemiPhybPathHook!.Original( drawObject, path, unk3, unk4 ) );
|
||||
|
||||
private IntPtr ResolveDemiSklbDetour( IntPtr drawObject, IntPtr path, IntPtr unk3, uint unk4 )
|
||||
=> ResolvePathDetour( drawObject, ResolveDemiSklbPathHook!.Original( drawObject, path, unk3, unk4 ) );
|
||||
|
||||
private IntPtr ResolveDemiSkpDetour( IntPtr drawObject, IntPtr path, IntPtr unk3, uint unk4 )
|
||||
=> ResolvePathDetour( drawObject, ResolveDemiSkpPathHook!.Original( drawObject, path, unk3, unk4 ) );
|
||||
|
||||
private IntPtr ResolveDemiTmbDetour( IntPtr drawObject, IntPtr path, IntPtr unk3 )
|
||||
=> ResolvePathDetour( drawObject, ResolveDemiTmbPathHook!.Original( drawObject, path, unk3 ) );
|
||||
|
||||
private IntPtr ResolveDemiVfxDetour( IntPtr drawObject, IntPtr path, IntPtr unk3, uint unk4, ulong unk5 )
|
||||
=> ResolvePathDetour( drawObject, ResolveDemiVfxPathHook!.Original( drawObject, path, unk3, unk4, unk5 ) );
|
||||
|
||||
|
||||
// Implementation
|
||||
[MethodImpl( MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization )]
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ public partial class PathResolver : IDisposable
|
|||
SetupHumanHooks();
|
||||
SetupWeaponHooks();
|
||||
SetupMonsterHooks();
|
||||
SetupDemiHooks();
|
||||
SetupMetaHooks();
|
||||
}
|
||||
|
||||
|
|
@ -105,6 +106,7 @@ public partial class PathResolver : IDisposable
|
|||
EnableHumanHooks();
|
||||
EnableWeaponHooks();
|
||||
EnableMonsterHooks();
|
||||
EnableDemiHooks();
|
||||
EnableMtrlHooks();
|
||||
EnableDataHooks();
|
||||
EnableMetaHooks();
|
||||
|
|
@ -124,6 +126,7 @@ public partial class PathResolver : IDisposable
|
|||
DisableHumanHooks();
|
||||
DisableWeaponHooks();
|
||||
DisableMonsterHooks();
|
||||
DisableDemiHooks();
|
||||
DisableMtrlHooks();
|
||||
DisableDataHooks();
|
||||
DisableMetaHooks();
|
||||
|
|
@ -141,6 +144,7 @@ public partial class PathResolver : IDisposable
|
|||
DisposeHumanHooks();
|
||||
DisposeWeaponHooks();
|
||||
DisposeMonsterHooks();
|
||||
DisposeDemiHooks();
|
||||
DisposeMtrlHooks();
|
||||
DisposeDataHooks();
|
||||
DisposeMetaHooks();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue