mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-15 13:14:17 +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 )]
|
// [Signature( "48 8D 1D ?? ?? ?? ?? 48 C7 41", ScanType = ScanType.StaticAddress )]
|
||||||
// public IntPtr* DrawObjectVTable;
|
// 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 ResolveRootIdx = 71;
|
||||||
|
|
||||||
public const int ResolveSklbIdx = 72;
|
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 )
|
private IntPtr ResolveMonsterVfxDetour( IntPtr drawObject, IntPtr path, IntPtr unk3, uint unk4, ulong unk5 )
|
||||||
=> ResolvePathDetour( drawObject, ResolveMonsterVfxPathHook!.Original( drawObject, path, unk3, unk4, 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
|
// Implementation
|
||||||
[MethodImpl( MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization )]
|
[MethodImpl( MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization )]
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ public partial class PathResolver : IDisposable
|
||||||
SetupHumanHooks();
|
SetupHumanHooks();
|
||||||
SetupWeaponHooks();
|
SetupWeaponHooks();
|
||||||
SetupMonsterHooks();
|
SetupMonsterHooks();
|
||||||
|
SetupDemiHooks();
|
||||||
SetupMetaHooks();
|
SetupMetaHooks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -105,6 +106,7 @@ public partial class PathResolver : IDisposable
|
||||||
EnableHumanHooks();
|
EnableHumanHooks();
|
||||||
EnableWeaponHooks();
|
EnableWeaponHooks();
|
||||||
EnableMonsterHooks();
|
EnableMonsterHooks();
|
||||||
|
EnableDemiHooks();
|
||||||
EnableMtrlHooks();
|
EnableMtrlHooks();
|
||||||
EnableDataHooks();
|
EnableDataHooks();
|
||||||
EnableMetaHooks();
|
EnableMetaHooks();
|
||||||
|
|
@ -124,6 +126,7 @@ public partial class PathResolver : IDisposable
|
||||||
DisableHumanHooks();
|
DisableHumanHooks();
|
||||||
DisableWeaponHooks();
|
DisableWeaponHooks();
|
||||||
DisableMonsterHooks();
|
DisableMonsterHooks();
|
||||||
|
DisableDemiHooks();
|
||||||
DisableMtrlHooks();
|
DisableMtrlHooks();
|
||||||
DisableDataHooks();
|
DisableDataHooks();
|
||||||
DisableMetaHooks();
|
DisableMetaHooks();
|
||||||
|
|
@ -141,6 +144,7 @@ public partial class PathResolver : IDisposable
|
||||||
DisposeHumanHooks();
|
DisposeHumanHooks();
|
||||||
DisposeWeaponHooks();
|
DisposeWeaponHooks();
|
||||||
DisposeMonsterHooks();
|
DisposeMonsterHooks();
|
||||||
|
DisposeDemiHooks();
|
||||||
DisposeMtrlHooks();
|
DisposeMtrlHooks();
|
||||||
DisposeDataHooks();
|
DisposeDataHooks();
|
||||||
DisposeMetaHooks();
|
DisposeMetaHooks();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue