4
Fork 0

Silently disable incompatible DLLs without triggering mod manager warnings; added new game counter

master
Eddoursul 2 years ago
parent 8210468f79
commit 0121c3cd13
  1. BIN
      SKSE/Plugins/fs.dll
  2. BIN
      SKSE/Plugins/fs_se.dll
  3. 4
      source/fs.dll/.gitignore
  4. 8
      source/fs.dll/common/common_vc14.vcxproj
  5. 7
      source/fs.dll/forgotten_stories_skse_plugin.sln
  6. 2
      source/fs.dll/fs/CreatePotion.h
  7. 44
      source/fs.dll/fs/PhasmalistInventoryFunctions.cpp
  8. 2
      source/fs.dll/fs/PhasmalistInventoryFunctions.h
  9. 5
      source/fs.dll/fs/exports.def
  10. 14
      source/fs.dll/fs/fs.vcxproj
  11. 129
      source/fs.dll/fs/main.cpp
  12. 2
      source/fs.dll/skse64/skse64/BSModelDB.cpp
  13. 4
      source/fs.dll/skse64/skse64/BSModelDB.h
  14. 473
      source/fs.dll/skse64/skse64/CMakeLists.txt
  15. 20
      source/fs.dll/skse64/skse64/GameAPI.cpp
  16. 6
      source/fs.dll/skse64/skse64/GameAPI.h
  17. 8
      source/fs.dll/skse64/skse64/GameBSExtraData.h
  18. 12
      source/fs.dll/skse64/skse64/GameCamera.h
  19. 84
      source/fs.dll/skse64/skse64/GameData.cpp
  20. 40
      source/fs.dll/skse64/skse64/GameData.h
  21. 2
      source/fs.dll/skse64/skse64/GameEvents.cpp
  22. 12
      source/fs.dll/skse64/skse64/GameEvents.h
  23. 28
      source/fs.dll/skse64/skse64/GameExtraData.cpp
  24. 16
      source/fs.dll/skse64/skse64/GameExtraData.h
  25. 20
      source/fs.dll/skse64/skse64/GameFormComponents.h
  26. 10
      source/fs.dll/skse64/skse64/GameForms.cpp
  27. 22
      source/fs.dll/skse64/skse64/GameForms.h
  28. 28
      source/fs.dll/skse64/skse64/GameHandlers.h
  29. 16
      source/fs.dll/skse64/skse64/GameInput.cpp
  30. 6
      source/fs.dll/skse64/skse64/GameInput.h
  31. 2
      source/fs.dll/skse64/skse64/GameMenus.cpp
  32. 60
      source/fs.dll/skse64/skse64/GameMenus.h
  33. 8
      source/fs.dll/skse64/skse64/GameObjects.cpp
  34. 46
      source/fs.dll/skse64/skse64/GameObjects.h
  35. 3
      source/fs.dll/skse64/skse64/GameRTTI.cpp
  36. 168
      source/fs.dll/skse64/skse64/GameRTTI.h
  37. 6706
      source/fs.dll/skse64/skse64/GameRTTI.inl
  38. 25
      source/fs.dll/skse64/skse64/GameReferences.cpp
  39. 39
      source/fs.dll/skse64/skse64/GameReferences.h
  40. 10
      source/fs.dll/skse64/skse64/GameResources.cpp
  41. 18
      source/fs.dll/skse64/skse64/GameSettings.cpp
  42. 2
      source/fs.dll/skse64/skse64/GameSettings.h
  43. 33
      source/fs.dll/skse64/skse64/GameStreams.h
  44. 4
      source/fs.dll/skse64/skse64/GameThreads.cpp
  45. 30
      source/fs.dll/skse64/skse64/GameTypes.h
  46. 4
      source/fs.dll/skse64/skse64/GameUtilities.cpp
  47. 2
      source/fs.dll/skse64/skse64/Hooks_Camera.cpp
  48. 2
      source/fs.dll/skse64/skse64/Hooks_Data.cpp
  49. 2
      source/fs.dll/skse64/skse64/Hooks_Event.cpp
  50. 25
      source/fs.dll/skse64/skse64/Hooks_Gameplay.cpp
  51. 28
      source/fs.dll/skse64/skse64/Hooks_Handlers.cpp
  52. 12
      source/fs.dll/skse64/skse64/Hooks_NetImmerse.cpp
  53. 18
      source/fs.dll/skse64/skse64/Hooks_Papyrus.cpp
  54. 15
      source/fs.dll/skse64/skse64/Hooks_SaveLoad.cpp
  55. 259
      source/fs.dll/skse64/skse64/Hooks_Scaleform.cpp
  56. 5
      source/fs.dll/skse64/skse64/Hooks_Threads.cpp
  57. 2
      source/fs.dll/skse64/skse64/Hooks_UI.cpp
  58. 8
      source/fs.dll/skse64/skse64/NiExtraData.cpp
  59. 8
      source/fs.dll/skse64/skse64/NiExtraData.h
  60. 20
      source/fs.dll/skse64/skse64/NiGeometry.cpp
  61. 17
      source/fs.dll/skse64/skse64/NiGeometry.h
  62. 4
      source/fs.dll/skse64/skse64/NiMaterial.cpp
  63. 22
      source/fs.dll/skse64/skse64/NiMaterial.h
  64. 18
      source/fs.dll/skse64/skse64/NiNodes.cpp
  65. 31
      source/fs.dll/skse64/skse64/NiNodes.h
  66. 14
      source/fs.dll/skse64/skse64/NiObjects.cpp
  67. 24
      source/fs.dll/skse64/skse64/NiObjects.h
  68. 13
      source/fs.dll/skse64/skse64/NiProperties.h
  69. 820
      source/fs.dll/skse64/skse64/NiRTTI.cpp
  70. 4
      source/fs.dll/skse64/skse64/NiRTTI.h
  71. 8
      source/fs.dll/skse64/skse64/NiRenderer.cpp
  72. 5
      source/fs.dll/skse64/skse64/NiRenderer.h
  73. 15
      source/fs.dll/skse64/skse64/NiSerialization.h
  74. 4
      source/fs.dll/skse64/skse64/NiTextures.cpp
  75. 8
      source/fs.dll/skse64/skse64/NiTextures.h
  76. 11
      source/fs.dll/skse64/skse64/ObScript.cpp
  77. 2
      source/fs.dll/skse64/skse64/ObScript.h
  78. 7
      source/fs.dll/skse64/skse64/PapyrusArgs.h
  79. 4
      source/fs.dll/skse64/skse64/PapyrusInterfaces.cpp
  80. 2
      source/fs.dll/skse64/skse64/PapyrusInterfaces.h
  81. 14
      source/fs.dll/skse64/skse64/PapyrusNativeFunctions.h
  82. 6
      source/fs.dll/skse64/skse64/PapyrusObjectReference.cpp
  83. 4
      source/fs.dll/skse64/skse64/PapyrusVM.cpp
  84. 29
      source/fs.dll/skse64/skse64/PapyrusVM.h
  85. 10
      source/fs.dll/skse64/skse64/PapyrusValue.h
  86. 101
      source/fs.dll/skse64/skse64/PluginAPI.h
  87. BIN
      source/fs.dll/skse64/skse64/PluginLoadErrorDialog.rc
  88. 433
      source/fs.dll/skse64/skse64/PluginManager.cpp
  89. 52
      source/fs.dll/skse64/skse64/PluginManager.h
  90. 8
      source/fs.dll/skse64/skse64/ScaleformAPI.cpp
  91. 2
      source/fs.dll/skse64/skse64/ScaleformCallbacks.cpp
  92. 1
      source/fs.dll/skse64/skse64/ScaleformCallbacks.h
  93. 4
      source/fs.dll/skse64/skse64/ScaleformLoader.cpp
  94. 9
      source/fs.dll/skse64/skse64/ScaleformLoader.h
  95. 2
      source/fs.dll/skse64/skse64/ScaleformState.cpp
  96. 2
      source/fs.dll/skse64/skse64/ScaleformTypes.h
  97. 30
      source/fs.dll/skse64/skse64/ScaleformValue.h
  98. 4
      source/fs.dll/skse64/skse64/gamethreads.h
  99. 19
      source/fs.dll/skse64/skse64/resource.h
  100. 5
      source/fs.dll/skse64/skse64/skse64.cpp
  101. Some files were not shown because too many files have changed in this diff Show More

BIN
SKSE/Plugins/fs.dll (Stored with Git LFS)

Binary file not shown.

BIN
SKSE/Plugins/fs_se.dll (Stored with Git LFS)

Binary file not shown.

@ -1,8 +1,8 @@
*.db *.db
.vs/ .vs/
x64/ x64/
x64_v142/ x64_*/
common/x64_v142/ common/x64_*/
fs/x64/ fs/x64/
skse64/.vs/ skse64/.vs/
skse64/skse64/x64/ skse64/skse64/x64/

@ -68,26 +68,26 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_VC142|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_VC142|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_VC142|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_VC142|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
</PropertyGroup> </PropertyGroup>

@ -1,7 +1,7 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15 # Visual Studio Version 17
VisualStudioVersion = 15.0.28307.1340 VisualStudioVersion = 17.2.32616.157
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fs", "fs\fs.vcxproj", "{F0CF443B-B64A-489E-A826-6924FECB0F4E}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fs", "fs\fs.vcxproj", "{F0CF443B-B64A-489E-A826-6924FECB0F4E}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
@ -42,7 +42,8 @@ Global
{F0CF443B-B64A-489E-A826-6924FECB0F4E}.Debug_VC142|x64.Build.0 = Release|Win32 {F0CF443B-B64A-489E-A826-6924FECB0F4E}.Debug_VC142|x64.Build.0 = Release|Win32
{F0CF443B-B64A-489E-A826-6924FECB0F4E}.Debug|Win32.ActiveCfg = Debug|Win32 {F0CF443B-B64A-489E-A826-6924FECB0F4E}.Debug|Win32.ActiveCfg = Debug|Win32
{F0CF443B-B64A-489E-A826-6924FECB0F4E}.Debug|Win32.Build.0 = Debug|Win32 {F0CF443B-B64A-489E-A826-6924FECB0F4E}.Debug|Win32.Build.0 = Debug|Win32
{F0CF443B-B64A-489E-A826-6924FECB0F4E}.Debug|x64.ActiveCfg = Debug|Win32 {F0CF443B-B64A-489E-A826-6924FECB0F4E}.Debug|x64.ActiveCfg = Debug|x64
{F0CF443B-B64A-489E-A826-6924FECB0F4E}.Debug|x64.Build.0 = Debug|x64
{F0CF443B-B64A-489E-A826-6924FECB0F4E}.Release_Lib_VC142|Win32.ActiveCfg = Release|Win32 {F0CF443B-B64A-489E-A826-6924FECB0F4E}.Release_Lib_VC142|Win32.ActiveCfg = Release|Win32
{F0CF443B-B64A-489E-A826-6924FECB0F4E}.Release_Lib_VC142|Win32.Build.0 = Release|Win32 {F0CF443B-B64A-489E-A826-6924FECB0F4E}.Release_Lib_VC142|Win32.Build.0 = Release|Win32
{F0CF443B-B64A-489E-A826-6924FECB0F4E}.Release_Lib_VC142|x64.ActiveCfg = Release|Win32 {F0CF443B-B64A-489E-A826-6924FECB0F4E}.Release_Lib_VC142|x64.ActiveCfg = Release|Win32

@ -5,7 +5,7 @@
namespace CreatePotion namespace CreatePotion
{ {
AlchemyItem* createPotion(AlchemyItem* toCopy, VMArray<EffectSetting*> effects, VMArray<float> magnitudes, VMArray<UInt32> areas, VMArray<UInt32> durations, UInt32 arraySize); AlchemyItem* createPotion(StaticFunctionTag* tag, VMArray<EffectSetting*> effects, VMArray<float> magnitudes, VMArray<UInt32> areas, VMArray<UInt32> durations, UInt32 arraySize);
bool RegisterFuncs(VMClassRegistry* registry); bool RegisterFuncs(VMClassRegistry* registry);
} }

@ -117,31 +117,33 @@ namespace PhasmalistScripts {
float strength = 0; float strength = 0;
float physicalStrength = 0; float physicalStrength = 0;
if (itemStack->type->IsWeapon()) { if (itemStack->type) {
TESObjectWEAP * asWeapon = static_cast<TESObjectWEAP*>(itemStack->type); if (itemStack->type->IsWeapon()) {
if (asWeapon) { TESObjectWEAP* asWeapon = static_cast<TESObjectWEAP*>(itemStack->type);
float baseDmg = papyrusWeapon::GetBaseDamage(asWeapon) * 1.5; if (asWeapon) {
float speed = papyrusWeapon::GetSpeed(asWeapon); float baseDmg = papyrusWeapon::GetBaseDamage(asWeapon) * 1.5;
physicalStrength = baseDmg * speed; float speed = papyrusWeapon::GetSpeed(asWeapon);
strength += physicalStrength; physicalStrength = baseDmg * speed;
strength += getEnchantmentStrength(papyrusWeapon::GetEnchantment(asWeapon)); strength += physicalStrength;
strength += getEnchantmentStrength(papyrusWeapon::GetEnchantment(asWeapon));
}
} }
}
if (itemStack->type->IsArmor()) { if (itemStack->type->IsArmor()) {
TESObjectARMO * asArmor = static_cast<TESObjectARMO*>(itemStack->type); TESObjectARMO* asArmor = static_cast<TESObjectARMO*>(itemStack->type);
if (asArmor) { if (asArmor) {
physicalStrength = papyrusArmor::GetArmorRating(asArmor); physicalStrength = papyrusArmor::GetArmorRating(asArmor);
strength += physicalStrength; strength += physicalStrength;
strength += getEnchantmentStrength(papyrusArmor::GetEnchantment(asArmor)); strength += getEnchantmentStrength(papyrusArmor::GetEnchantment(asArmor));
}
} }
}
if (itemStack->type->formType == kFormType_Book) { if (itemStack->type->formType == kFormType_Book) {
TESObjectBOOK * asBook = static_cast<TESObjectBOOK*>(itemStack->type); TESObjectBOOK* asBook = static_cast<TESObjectBOOK*>(itemStack->type);
if (asBook) { if (asBook) {
SpellItem * spell = papyrusBook::GetSpell(asBook); SpellItem* spell = papyrusBook::GetSpell(asBook);
return getSpellStrength(spell); return getSpellStrength(spell);
}
} }
} }

@ -4,7 +4,7 @@
namespace PhasmalistScripts namespace PhasmalistScripts
{ {
float calculateContentStrength(TESObjectREFR *base); float calculateContentStrength(StaticFunctionTag* tag, TESObjectREFR* container);
bool RegisterFuncs(VMClassRegistry* registry); bool RegisterFuncs(VMClassRegistry* registry);
} }

@ -1,4 +1,5 @@
LIBRARY "fs" LIBRARY "enderalse"
EXPORTS EXPORTS
SKSEPlugin_Query SKSEPlugin_Query
SKSEPlugin_Load SKSEPlugin_Load
SKSEPlugin_Version

@ -38,23 +38,23 @@
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet> <CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings"> <ImportGroup Label="ExtensionSettings">
@ -109,7 +109,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile> <ClCompile>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>$(SolutionDir);$(SolutionDir)common;$(SolutionDir)skse;C:\Users\Simon\Documents\Visual Studio 2015\Projects\SteamSDK\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir);$(SolutionDir)\..;%(AdditionalIncludeDirectories);$(SolutionDir)common;$(SolutionDir)skse64</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;PLUGIN_EXAMPLE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;PLUGIN_EXAMPLE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -123,7 +123,7 @@
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile> <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<AdditionalDependencies>steam_api.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>$(SolutionDir)x64_v143\Debug\common_vc14.lib;$(SolutionDir)x64\Debug\skse64_common.lib;$(SolutionDir)x64\Debug\skse64_1_5_97.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>C:\Users\Simon\Documents\Visual Studio 2015\Projects\SteamSDK\redistributable_bin;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>C:\Users\Simon\Documents\Visual Studio 2015\Projects\SteamSDK\redistributable_bin;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
@ -171,7 +171,7 @@
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences> <OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<AdditionalDependencies>$(SolutionDir)x64_v142\Release\common_vc14.lib;$(SolutionDir)x64\Release\skse64_common.lib;$(SolutionDir)x64\Release\skse64_1_5_97.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>$(SolutionDir)x64_v143\Release\common_vc14.lib;$(SolutionDir)x64\Release\skse64_common.lib;$(SolutionDir)x64\Release\skse64_1_5_97.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>

@ -5,36 +5,101 @@
#include "PhasmalistInventoryFunctions.h" #include "PhasmalistInventoryFunctions.h"
#include "CreatePotion.h" #include "CreatePotion.h"
static PluginHandle g_pluginHandle = kPluginHandle_Invalid;
static SKSEPapyrusInterface * g_papyrus = NULL; static SKSEPapyrusInterface * g_papyrus = NULL;
static SInt32 g_NewGameStarted = 0;
#define SKYRIMAE constexpr true
#ifndef SKYRIMAE
#define RUNTIME_VERSION_1_6_353 MAKE_EXE_VERSION(1, 6, 353)
struct SKSEPluginVersionData
{
enum
{
kVersion = 1,
};
enum
{
// set this if you are using a (potential at this time of writing) post-AE version of the Address Library
kVersionIndependent_AddressLibraryPostAE = 1 << 0,
// set this if you exclusively use signature matching to find your addresses and have NO HARDCODED ADDRESSES
kVersionIndependent_Signatures = 1 << 1,
};
UInt32 dataVersion; // set to kVersion
UInt32 pluginVersion; // version number of your plugin
char name[256]; // null-terminated ASCII plugin name
char author[256]; // null-terminated ASCII plugin author name (can be empty)
char supportEmail[256]; // null-terminated ASCII support email address (can be empty)
// this is not for showing to users, it's in case I need to contact you about
// a compatibility problem with your plugin
// version compatibility
UInt32 versionIndependence; // set to one of the kVersionIndependent_ enums or zero
UInt32 compatibleVersions[16]; // zero-terminated list of RUNTIME_VERSION_ defines your plugin is compatible with
UInt32 seVersionRequired; // minimum version of the script extender required, compared against PACKED_SKSE_VERSION
// you probably should just set this to 0 unless you know what you are doing
};
#endif
void SKSEMessageHandler(SKSEMessagingInterface::Message* msg)
{
if (msg->type == SKSEMessagingInterface::kMessage_PostLoadGame || msg->type == SKSEMessagingInterface::kMessage_NewGame) {
if (g_NewGameStarted < 2) {
g_NewGameStarted++;
}
}
}
extern "C" { extern "C" {
__declspec(dllexport) SKSEPluginVersionData SKSEPlugin_Version =
{
SKSEPluginVersionData::kVersion,
1,
#ifdef SKYRIMAE
"fs_skse_functions",
#else
"fs_skse_functions_disabled",
#endif
"Eddoursul",
"enderal@eddoursul.win",
0, // not version independent
{ RUNTIME_VERSION_1_6_353, 0 }, // compatible with 1.6.353
0, // works with any version of the script extender. you probably do not need to put anything here
};
bool SKSEPlugin_Query(const SKSEInterface * skse, PluginInfo * info) { // Called by SKSE to learn about this plugin and check that it's safe to load it bool SKSEPlugin_Query(const SKSEInterface * skse, PluginInfo * info) { // Called by SKSE to learn about this plugin and check that it's safe to load it
gLog.OpenRelative(CSIDL_MYDOCUMENTS, "\\My Games\\Enderal Special Edition\\SKSE\\FS.log");
#ifndef SKYRIMAE
gLog.OpenRelative(CSIDL_MYDOCUMENTS, "\\My Games\\Enderal Special Edition\\SKSE\\Enderal_SE.log");
gLog.SetPrintLevel(IDebugLog::kLevel_Error); gLog.SetPrintLevel(IDebugLog::kLevel_Error);
gLog.SetLogLevel(IDebugLog::kLevel_DebugMessage); gLog.SetLogLevel(IDebugLog::kLevel_DebugMessage);
_MESSAGE("fs_skse_functions"); _MESSAGE("EnderalSE");
#endif
// populate info structure // populate info structure
info->infoVersion = PluginInfo::kInfoVersion; info->infoVersion = PluginInfo::kInfoVersion;
info->name = "fs_skse_functions"; #ifdef SKYRIMAE
info->name = "fs_skse_functions_disabled";
#else
info->name = skse->runtimeVersion == RUNTIME_VERSION_1_5_97 ? "fs_skse_functions" : "fs_skse_functions_disabled";
#endif
info->version = 1; info->version = 1;
// store plugin handle so we can identify ourselves later if (skse->isEditor) {
g_pluginHandle = skse->GetPluginHandle();
if (skse->isEditor)
{
_MESSAGE("loaded in editor, marking as incompatible");
return false;
}
else if (skse->runtimeVersion != RUNTIME_VERSION_1_5_97)
{
_MESSAGE("unsupported runtime version %08X", skse->runtimeVersion);
return false; return false;
} }
@ -46,7 +111,26 @@ extern "C" {
} }
bool SKSEPlugin_Load(const SKSEInterface * skse) { // Called by SKSE to load this plugin bool SKSEPlugin_Load(const SKSEInterface * skse) { // Called by SKSE to load this plugin
_MESSAGE("fs_skse_functions loaded");
#ifdef SKYRIMAE
gLog.OpenRelative(CSIDL_MYDOCUMENTS, "\\My Games\\Enderal Special Edition\\SKSE\\Enderal_AE.log");
gLog.SetPrintLevel(IDebugLog::kLevel_Error);
gLog.SetLogLevel(IDebugLog::kLevel_DebugMessage);
if (skse->runtimeVersion != RUNTIME_VERSION_1_6_353) {
_MESSAGE("skipping initialization of the non-AE library");
return true;
}
#else
if (skse->runtimeVersion != RUNTIME_VERSION_1_5_97) {
_MESSAGE("skipping initialization of the non-SE library");
return true;
}
#endif
_MESSAGE("EnderalSE loaded");
auto messaging = (SKSEMessagingInterface*)skse->QueryInterface(kInterface_Messaging);
messaging->RegisterListener(skse->GetPluginHandle(), "SKSE", SKSEMessageHandler);
g_papyrus = (SKSEPapyrusInterface *)skse->QueryInterface(kInterface_Papyrus); g_papyrus = (SKSEPapyrusInterface *)skse->QueryInterface(kInterface_Papyrus);
@ -63,7 +147,14 @@ extern "C" {
_MESSAGE("Register Succeeded: CreatePotion functions"); _MESSAGE("Register Succeeded: CreatePotion functions");
} }
g_papyrus->Register([](VMClassRegistry* registry) {
registry->RegisterFunction(new NativeFunction0<StaticFunctionTag, SInt32>("NewGameCount", "EnderalLib", [](StaticFunctionTag* tag) {
return g_NewGameStarted;
}, registry));
_MESSAGE("Register Succeeded: NewGameCount");
return true;
});
return true; return true;
} }
}; };

@ -1,4 +1,4 @@
#include "skse64/BSModelDB.h" #include "skse64/BSModelDB.h"
// 206875324DD3C045FB854CB2889AFBCA94C7790B+89 // 206875324DD3C045FB854CB2889AFBCA94C7790B+89
RelocPtr <BSModelDB::BSModelProcessor*> g_TESProcessor(0x01EC3C10); RelocPtr <BSModelDB::BSModelProcessor*> g_TESProcessor(0x01F5F590);

@ -42,8 +42,8 @@ public:
MEMBER_FN_PREFIX(TESProcessor); MEMBER_FN_PREFIX(TESProcessor);
// find from ??_7BSModelProcessor@BSModelDB@@6B@ // find from ??_7BSModelProcessor@BSModelDB@@6B@
DEFINE_MEMBER_FN(dtor, void, 0x00D2ECA0); DEFINE_MEMBER_FN(dtor, void, 0x00D66540);
DEFINE_MEMBER_FN(Impl_Process, void, 0x00181800, ModelData * modelData, const char * modelName, NiAVObject ** root, UInt32 * typeOut); DEFINE_MEMBER_FN(Impl_Process, void, 0x0018B0C0, ModelData * modelData, const char * modelName, NiAVObject ** root, UInt32 * typeOut);
}; };
}; };

@ -0,0 +1,473 @@
cmake_minimum_required(VERSION 3.18)
# ---- Project ----
include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/versioning.cmake)
project(
skse64
VERSION ${SKSE_VERSION_MAJOR}.${SKSE_VERSION_MINOR}.${SKSE_VERSION_PATCH}
LANGUAGES CXX
)
# ---- Include guards ----
if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
message(
FATAL_ERROR
"In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there."
)
endif()
# ---- Build options ----
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_DEBUG OFF)
# ---- Dependencies ----
if (NOT TARGET skse64_common)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../skse64_common skse64_common) # bundled
endif()
if (NOT TARGET xbyak)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../xbyak xbyak) # bundled
endif()
find_package(common REQUIRED CONFIG)
# ---- Add source files ----
include(cmake/headerlist.cmake)
include(cmake/sourcelist.cmake)
source_group(
${PROJECT_NAME}
FILES
skse64.cpp
skse64.def
skse_version.rc
)
source_group(
${PROJECT_NAME}/api
FILES
GameAPI.cpp
GameAPI.h
GameBSExtraData.cpp
GameBSExtraData.h
GameCamera.cpp
GameCamera.h
GameData.cpp
GameData.h
GameEvents.cpp
GameEvents.h
GameExtraData.cpp
GameExtraData.h
GameFormComponents.cpp
GameFormComponents.h
GameForms.cpp
GameForms.h
GameHandlers.cpp
GameHandlers.h
GameInput.cpp
GameInput.h
GameMenus.cpp
GameMenus.h
GameObjects.cpp
GameObjects.h
GamePathing.cpp
GameReferences.cpp
GameReferences.h
GameResources.cpp
GameResources.h
GameRTTI.cpp
GameRTTI.h
GameRTTI.inl
GameSettings.cpp
GameSettings.h
GameStreams.cpp
GameStreams.h
GameThreads.cpp
GameThreads.h
GameTypes.cpp
GameTypes.h
GameUtilities.cpp
GameUtilities.h
ObScript.cpp
ObScript.h
)
source_group(
${PROJECT_NAME}/hooks
FILES
Hooks_Camera.cpp
Hooks_Camera.h
Hooks_Data.cpp
Hooks_Data.h
Hooks_Debug.cpp
Hooks_Debug.h
Hooks_Diagnostics.cpp
Hooks_Diagnostics.h
Hooks_DirectInput8Create.cpp
Hooks_DirectInput8Create.h
Hooks_Event.cpp
Hooks_Event.h
Hooks_Gameplay.cpp
Hooks_Gameplay.h
Hooks_Handlers.cpp
Hooks_Handlers.h
Hooks_Memory.cpp
Hooks_Memory.h
Hooks_NetImmerse.cpp
Hooks_NetImmerse.h
Hooks_ObScript.cpp
Hooks_ObScript.h
Hooks_Papyrus.cpp
Hooks_Papyrus.h
Hooks_SaveLoad.cpp
Hooks_SaveLoad.h
Hooks_Scaleform.cpp
Hooks_Scaleform.h
Hooks_Threads.cpp
Hooks_Threads.h
Hooks_UI.cpp
Hooks_UI.h
)
source_group(
${PROJECT_NAME}/internal
FILES
Colors.cpp
Colors.h
CustomMenu.cpp
CustomMenu.h
GlobalLocks.cpp
GlobalLocks.h
HashUtil.cpp
HashUtil.h
InputMap.cpp
InputMap.h
InternalSerialization.cpp
InternalSerialization.h
InternalTasks.cpp
InternalTasks.h
PluginAPI.h
PluginLoadErrorDialog.rc
PluginManager.cpp
PluginManager.h
Serialization.cpp
Serialization.h
Translation.cpp
Translation.h
)
source_group(
${PROJECT_NAME}/netimmerse
FILES
BSModelDB.cpp
BSModelDB.h
NiAdditionalGeometryData.cpp
NiAdditionalGeometryData.h
NiControllers.cpp
NiControllers.h
NiExtraData.cpp
NiExtraData.h
NiGeometry.cpp
NiGeometry.h
NiInterpolators.cpp
NiInterpolators.h
NiLight.cpp
NiLight.h
NiMaterial.cpp
NiMaterial.h
NiNodes.cpp
NiNodes.h
NiObjects.cpp
NiObjects.h
NiProperties.cpp
NiProperties.h
NiRenderer.cpp
NiRenderer.h
NiRTTI.cpp
NiRTTI.h
NiSerialization.cpp
NiSerialization.h
NiTextures.cpp
NiTextures.h
NiTypes.cpp
NiTypes.h
)
source_group(
${PROJECT_NAME}/papyrus/functions
FILES
PapyrusActiveMagicEffect.cpp
PapyrusActiveMagicEffect.h
PapyrusActor.cpp
PapyrusActor.h
PapyrusActorBase.cpp
PapyrusActorBase.h
PapyrusActorValueInfo.cpp
PapyrusActorValueInfo.h
PapyrusAlias.cpp
PapyrusAlias.h
PapyrusAmmo.cpp
PapyrusAmmo.h
PapyrusArmor.cpp
PapyrusArmor.h
PapyrusArmorAddon.cpp
PapyrusArmorAddon.h
PapyrusArt.cpp
PapyrusArt.h
PapyrusBook.cpp
PapyrusBook.h
PapyrusCamera.cpp
PapyrusCamera.h
PapyrusCell.cpp
PapyrusCell.h
PapyrusClass.cpp
PapyrusClass.h
PapyrusColorForm.cpp
PapyrusColorForm.h
PapyrusCombatStyle.cpp
PapyrusCombatStyle.h
PapyrusConstructibleObject.cpp
PapyrusConstructibleObject.h
PapyrusDefaultObjectManager.cpp
PapyrusDefaultObjectManager.h
PapyrusEnchantment.cpp
PapyrusEnchantment.h
PapyrusEquipSlot.cpp
PapyrusEquipSlot.h
PapyrusFaction.cpp
PapyrusFaction.h
PapyrusFlora.cpp
PapyrusFlora.h
PapyrusForm.cpp
PapyrusForm.h
PapyrusFormList.cpp
PapyrusFormList.h
PapyrusGame.cpp
PapyrusGame.h
PapyrusGameData.cpp
PapyrusGameData.h
PapyrusHeadPart.cpp
PapyrusHeadPart.h
PapyrusIngredient.cpp
PapyrusIngredient.h
PapyrusInput.cpp
PapyrusInput.h
PapyrusKeyword.cpp
PapyrusKeyword.h
PapyrusLeveledActor.cpp
PapyrusLeveledActor.h
PapyrusLeveledItem.cpp
PapyrusLeveledItem.h
PapyrusLeveledSpell.cpp
PapyrusLeveledSpell.h
PapyrusLocation.cpp
PapyrusLocation.h
PapyrusMagicEffect.cpp
PapyrusMagicEffect.h
PapyrusMath.cpp
PapyrusMath.h
PapyrusMisc.cpp
PapyrusMisc.h
PapyrusModEvent.cpp
PapyrusModEvent.h
PapyrusNetImmerse.cpp
PapyrusNetImmerse.h
PapyrusObjectReference.cpp
PapyrusObjectReference.h
PapyrusPerk.cpp
PapyrusPerk.h
PapyrusPotion.cpp
PapyrusPotion.h
PapyrusQuest.cpp
PapyrusQuest.h
PapyrusRace.cpp
PapyrusRace.h
PapyrusReferenceAlias.cpp
PapyrusReferenceAlias.h
PapyrusScroll.cpp
PapyrusScroll.h
PapyrusShout.cpp
PapyrusShout.h
PapyrusSKSE.cpp
PapyrusSKSE.h
PapyrusSound.cpp
PapyrusSound.h
PapyrusSoundDescriptor.cpp
PapyrusSoundDescriptor.h
PapyrusSpawnerTask.cpp
PapyrusSpawnerTask.h
PapyrusSpell.cpp
PapyrusSpell.h
PapyrusStringUtil.cpp
PapyrusStringUtil.h
PapyrusTextureSet.cpp
PapyrusTextureSet.h
PapyrusTree.cpp
PapyrusTree.h
PapyrusUI.cpp
PapyrusUI.h
PapyrusUICallback.cpp
PapyrusUICallback.h
PapyrusUtility.cpp
PapyrusUtility.h
PapyrusWeapon.cpp
PapyrusWeapon.h
PapyrusWeather.cpp
PapyrusWeather.h
PapyrusWornObject.cpp
PapyrusWornObject.h
)
source_group(
${PROJECT_NAME}/papyrus/vm
FILES
PapyrusArgs.cpp
PapyrusArgs.h
PapyrusDelayFunctors.cpp
PapyrusDelayFunctors.h
PapyrusEventFunctor.h
PapyrusEvents.cpp
PapyrusEvents.h
PapyrusInterfaces.cpp
PapyrusInterfaces.h
PapyrusNativeFunctionDef.inl
PapyrusNativeFunctionDef_Base.inl
PapyrusNativeFunctions.cpp
PapyrusNativeFunctions.h
PapyrusObjects.cpp
PapyrusObjects.h
PapyrusValue.cpp
PapyrusValue.h
PapyrusVM.cpp
PapyrusVM.h
)
source_group(
${PROJECT_NAME}/scaleform
FILES
ScaleformAPI.cpp
ScaleformAPI.h
ScaleformCallbacks.cpp
ScaleformCallbacks.h
ScaleformExtendedData.cpp
ScaleformExtendedData.h
ScaleformLoader.cpp
ScaleformLoader.h
ScaleformMovie.cpp
ScaleformMovie.h
ScaleformState.cpp
ScaleformState.h
ScaleformTypes.cpp
ScaleformTypes.h
ScaleformValue.cpp
ScaleformValue.h
ScaleformVM.cpp
ScaleformVM.h
)
# ---- Create library ----
add_library(
${PROJECT_NAME}
SHARED
${headers}
${sources}
skse64.def
${skse64_common_SOURCE_DIR}/skse_version.rc
PluginLoadErrorDialog.rc
)
add_library(skse64::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/configuration.cmake)
set_target_properties(
${PROJECT_NAME}
PROPERTIES
OUTPUT_NAME "${PROJECT_NAME}_${RUNTIME_VERSION_MAJOR}_${RUNTIME_VERSION_MINOR}_${RUNTIME_VERSION_PATCH}"
)
target_compile_definitions(
${PROJECT_NAME}
PRIVATE
RUNTIME
RUNTIME_VERSION=${RUNTIME_VERSION_PACKED}
)
target_compile_features(
${PROJECT_NAME}
PUBLIC
cxx_std_11
)
target_include_directories(
${PROJECT_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(
${PROJECT_NAME}
PUBLIC
skse64::skse64_common
Xbyak::xbyak
xse::common
)
# ---- Configure all targets ----
set_target_properties(
${PROJECT_NAME}
skse64_common
PROPERTIES
MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>"
)
# ---- Create an installable target ----
include(GNUInstallDirs)
install(
TARGETS
${PROJECT_NAME}
EXPORT
${PROJECT_NAME}-targets
)
install(
FILES
${headers}
DESTINATION
${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
)
configure_file(
cmake/config.cmake.in
${PROJECT_NAME}-config.cmake
@ONLY
)
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake
DESTINATION
${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
)
install(
EXPORT
${PROJECT_NAME}-targets
NAMESPACE
skse64::
DESTINATION
${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
)
include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/installation.cmake)

@ -1,19 +1,19 @@
#include "skse64/GameAPI.h" #include "skse64/GameAPI.h"
// 4371A3D33EB5D62C7C548EBD5F760AF15A9B0B96+41 // CFBAE5ABDAD102C91A5CD32DE6F45A70A6EC7561+80
RelocPtr <Heap> g_mainHeap(0x01EBD280); RelocPtr <Heap> g_mainHeap(0x01F58C00);
// 75643FD50A96D1F83B1AC4797EC84EF1C53039AC+68 // 338B95DD01390309C6CF7F96A08D629A564D0A48+5D
RelocPtr <ConsoleManager *> g_console(0x02F000F0); RelocPtr <ConsoleManager *> g_console(0x02F9B980);
// E1E59B64FDA5B8A9085AE9314353ABEEA0DB2823+C4 // 4D7631B98BE6AABD42229719E0D837E677A24FB5+CF
RelocPtr <UInt32> g_consoleHandle(0x02F4C31C); RelocPtr <UInt32> g_consoleHandle(0x02FE8234);
// 52DD97B7C619EA732D3CD95637F449FC7A23DD12+24 // 3DD6796A3BFE73B35604DD47E8677156AEBD4360+20
RelocPtr<UInt32> g_TlsIndexPtr(0x03497408); RelocPtr <UInt32> g_TlsIndexPtr(0x03532618);
// BC8BF08A45C960EB35F2BAFEC9432C80365A1473+14A // 14BE6944D5E0E54959DE86FE65045CCEBBC65E31+6
RelocPtr<PlayerCharacter*> g_thePlayer(0x02F26EF8); RelocPtr <PlayerCharacter*> g_thePlayer(0x02FC2B68);
void * Heap_Allocate(size_t size) void * Heap_Allocate(size_t size)
{ {

@ -8,8 +8,8 @@ class Heap
{ {
public: public:
MEMBER_FN_PREFIX(Heap); MEMBER_FN_PREFIX(Heap);
DEFINE_MEMBER_FN(Allocate, void *, 0x00C02260, size_t size, size_t alignment, bool aligned); DEFINE_MEMBER_FN(Allocate, void *, 0x00C27D60, size_t size, size_t alignment, bool aligned);
DEFINE_MEMBER_FN(Free, void, 0x00C02560, void * buf, bool aligned); DEFINE_MEMBER_FN(Free, void, 0x00C281B0, void * buf, bool aligned);
}; };
extern RelocPtr <Heap> g_mainHeap; extern RelocPtr <Heap> g_mainHeap;
@ -21,7 +21,7 @@ class ConsoleManager
{ {
public: public:
MEMBER_FN_PREFIX(ConsoleManager); MEMBER_FN_PREFIX(ConsoleManager);
DEFINE_MEMBER_FN(VPrint, void, 0x0085C2C0, const char * fmt, va_list args); DEFINE_MEMBER_FN(VPrint, void, 0x0088A420, const char * fmt, va_list args);
// DEFINE_MEMBER_FN(Print, void, 0x001D2050, const char * str); // DEFINE_MEMBER_FN(Print, void, 0x001D2050, const char * str);
}; };

@ -256,11 +256,11 @@ public:
private: private:
MEMBER_FN_PREFIX(BaseExtraList); MEMBER_FN_PREFIX(BaseExtraList);
// 6AE109C256B98466C001B25B75BD48FB62F884B1+5A // A7985F15034C77C00ACC57607F29F4802502A1BA+2F
DEFINE_MEMBER_FN(CheckContainerExtraData_Internal, bool, 0x0010CC40, bool isEquipped); DEFINE_MEMBER_FN(CheckContainerExtraData_Internal, bool, 0x00119580, bool isEquipped);
// This also does some internal ReferenceHandle lookup // This also does some internal ReferenceHandle lookup
// B995A21984B048C2B4F61777E615FFFB2806F9B7 //
DEFINE_MEMBER_FN(GetExtraTextDisplayData_Internal, ExtraTextDisplayData*, 0x00111420); DEFINE_MEMBER_FN(GetExtraTextDisplayData_Internal, ExtraTextDisplayData*, 0x0011D360);
}; };
typedef tList<BaseExtraList> ExtendDataList; typedef tList<BaseExtraList> ExtendDataList;

@ -260,7 +260,7 @@ public:
UInt8 pad31[7]; // 31 UInt8 pad31[7]; // 31
MEMBER_FN_PREFIX(TESCamera); MEMBER_FN_PREFIX(TESCamera);
DEFINE_MEMBER_FN(SetCameraState, UInt32, 0x004F5C80, TESCameraState * cameraState); DEFINE_MEMBER_FN(SetCameraState, UInt32, 0x0050F050, TESCameraState * cameraState);
}; };
STATIC_ASSERT(offsetof(TESCamera, cameraNode) == 0x20); STATIC_ASSERT(offsetof(TESCamera, cameraNode) == 0x20);
STATIC_ASSERT(sizeof(TESCamera) == 0x38); STATIC_ASSERT(sizeof(TESCamera) == 0x38);
@ -297,8 +297,8 @@ public:
void SetDefaultStateBounds(float x, float y, float z); void SetDefaultStateBounds(float x, float y, float z);
MEMBER_FN_PREFIX(LocalMapCamera); MEMBER_FN_PREFIX(LocalMapCamera);
DEFINE_MEMBER_FN(ctor, void, 0x001F5390); DEFINE_MEMBER_FN(ctor, void, 0x00200F40);
DEFINE_MEMBER_FN(SetNorthRotation, void, 0x001F5750, float northRotation); DEFINE_MEMBER_FN(SetNorthRotation, void, 0x00201390, float northRotation);
}; };
STATIC_ASSERT(offsetof(LocalMapCamera, northRotation) == 0x60); STATIC_ASSERT(offsetof(LocalMapCamera, northRotation) == 0x60);
@ -339,8 +339,8 @@ public:
static PlayerCamera * GetSingleton(void) static PlayerCamera * GetSingleton(void)
{ {
// 0FAF5D3C755F11266ECC496FD392A0A2EA23403B+37 // 8737E3612AB5A303F82C06809C0B0B41B2015C66+1E
static RelocPtr<PlayerCamera*> g_playerCamera(0x02EC59B8); static RelocPtr<PlayerCamera*> g_playerCamera(0x02F61288);
return *g_playerCamera; return *g_playerCamera;
} }
@ -380,7 +380,7 @@ public:
UInt8 pad166[2]; // 166 UInt8 pad166[2]; // 166
MEMBER_FN_PREFIX(PlayerCamera); MEMBER_FN_PREFIX(PlayerCamera);
DEFINE_MEMBER_FN(UpdateThirdPerson, void, 0x0084D630, bool weaponDrawn); DEFINE_MEMBER_FN(UpdateThirdPerson, void, 0x0087A350, bool weaponDrawn);
}; };
STATIC_ASSERT(offsetof(PlayerCamera, cameraStates) == 0xB8); STATIC_ASSERT(offsetof(PlayerCamera, cameraStates) == 0xB8);

@ -1,71 +1,65 @@
#include "skse64/GameData.h" #include "skse64/GameData.h"
// 9615953AF64D4A2EB76F7BDE0F38D30B311B1351+40 // 9615953AF64D4A2EB76F7BDE0F38D30B311B1351+40
RelocAddr <UInt32*> g_gameTime(0x02F6B950); RelocAddr <UInt32*> g_gameTime(0x03007710);
// AB8F3A77254A4A7EF23D7EA9C232AF6674856B23+2B7 // B8860AA646A4AA64DB8D5C6EDA306FC6B59F1B9B+5B
RelocPtr <DataHandler *> g_dataHandler(0x01EBE428); RelocPtr <DataHandler *> g_dataHandler(0x01F59DA8);
// 5F417CF4D2EB33C7D6903EA38BB5CDDEF48A6F83+4B // 5F417CF4D2EB33C7D6903EA38BB5CDDEF48A6F83+4B
RelocPtr <PersistentFormManager *> g_persistentFormManager(0x01EBEAE8); RelocPtr <PersistentFormManager *> g_persistentFormManager(0x01F5A468);
// 1AF6E849D5819F74A0FAC96D2E9D6AD46900704B+60 // EC410889481EE7B9DC4B6D7A707FA41B72CDCE48+4
RelocPtr <FaceGen *> g_faceGen(0x01EBEB40); RelocPtr <FaceGen *> g_faceGen(0x01F5A4C0);
// 6F7C1B16C6DF82EB76AEECA5A719A0A1EC196C45+28 // F22C9BC54C962ED86B36585C0EC0E729DCA18000+26
RelocPtr<MagicFavorites *> g_MagicFavorites(0x02F26730); RelocPtr<MagicFavorites *> g_MagicFavorites(0x02FC23A0);
// C744C8E2830617136B1E2036CE7FAA915F0BB6FF+1D // 6C8AEF51A6996BA6DC317E92014FCC446B5DBC17+25
RelocPtr<MenuTopicManager *> g_MenuTopicManager(0x02EFF988); RelocPtr<MenuTopicManager *> g_MenuTopicManager(0x02F9B218);
// 72603162CC51078584DECEF18ACB8B61C91A63FC+86 // 5ED03BBC1845C7394493F8FAA1DE8C7AEB3E2350+2A
RelocPtr <ActorValueList *> g_actorValueList(0x01EBE418); RelocPtr <ActorValueList *> g_actorValueList(0x01F59D98);
// aWerewolfSpell // aWerewolfSpell
RelocPtr <DefaultObjectList> g_defaultObjectList(0x01DB5E80); RelocPtr <DefaultObjectList> g_defaultObjectList(0x01E4AF20);
// 2667BD6593B94B34C30A11FA27E9E27627704C71+AB // 68BF756333EF751059E935236F381FA91F62C373+22
RelocPtr <BGSSaveLoadManager *> g_saveLoadManager(0x02F26740); RelocPtr <BGSSaveLoadManager *> g_saveLoadManager(0x02FC23B8);
// 3A2D747A1809205B8E28BD34724286AF76CF511B+2A // 3B74AA860AC42F1080FAF792E4BE1D3BF0E0EFEE+47
RelocPtr <MiscStatManager> g_MiscStatManager(0x02EC54D8); RelocPtr <MiscStatManager> g_MiscStatManager(0x02F60DA8);
// A9D0A72CC9E5F85E2169118F999943FD43AF51EA+95 // A9D0A72CC9E5F85E2169118F999943FD43AF51EA+95
RelocPtr <EquipManager *> g_equipManager(0x02EC4838); RelocPtr <EquipManager *> g_equipManager(0x02F60108);
// 60C21F969EDFE69EBC96CEEF9620AAF752E2E28B+2 // FBC6C0FB3A858D20081F5FF9CB3E780E59DCE52F+50
RelocPtr <RelationshipRanks> g_relationshipRanks(0x01DD3EF8); RelocPtr <RelationshipRanks> g_relationshipRanks(0x01E66FE8);
RelocAddr<_ChangeActorHeadPart> ChangeActorHeadPart(0x003DC3C0); RelocAddr<_ChangeActorHeadPart> ChangeActorHeadPart(0x003F4860);
// E596A4244F8A3A25FD8DB7E62A3904933060BEA8+DD //
RelocAddr<_GetEitherHandSlot> GetEitherHandSlot(0x00331650); RelocAddr<_GetEitherHandSlot> GetEitherHandSlot(0x00346E90);
// A57D77CB5250B7D84828312B34413A9123EDDD53+35 //
RelocAddr<_GetRightHandSlot> GetRightHandSlot(0x00331620); RelocAddr<_GetRightHandSlot> GetRightHandSlot(0x00346E80);
// A9D0A72CC9E5F85E2169118F999943FD43AF51EA+83 //
RelocAddr<_GetLeftHandSlot> GetLeftHandSlot(0x003315F0); RelocAddr<_GetLeftHandSlot> GetLeftHandSlot(0x00346E70);
RelocAddr<_LookupActorValueByName> LookupActorValueByName(0x003E1450); RelocAddr<_LookupActorValueByName> LookupActorValueByName(0x003FA030);
RelocAddr<_UpdatePlayerTints> UpdatePlayerTints(0x008B40C0); RelocAddr<_UpdatePlayerTints> UpdatePlayerTints(0x008E4AA0);
RelocAddr<_GetActorBaseOverlays> GetActorBaseOverlays(0x00368B30); RelocAddr<_GetActorBaseOverlays> GetActorBaseOverlays(0x0037FFB0);
RelocAddr<_GetNumActorBaseOverlays> GetNumActorBaseOverlays(0x00368BC0); RelocAddr<_GetNumActorBaseOverlays> GetNumActorBaseOverlays(0x00380040);
RelocAddr<_ApplyMasksToRenderTarget> ApplyMasksToRenderTarget(0x003DB420); RelocAddr<_ApplyMasksToRenderTarget> ApplyMasksToRenderTarget(0x003F36C0);
// 0A2FCE1738344AE17FCD2B406BDCAAD46AA64394+DC | +1A RelocAddr<_UpdateModelSkin> UpdateModelSkin(0x003F4B90); // Applies tint to ShaderType 5 nodes
RelocAddr<_UpdateModelSkin> UpdateModelSkin(0x003DC720); // Applies tint to ShaderType 5 nodes RelocAddr<_UpdateModelHair> UpdateModelHair(0x003F4CA0); // Applies tint to ShaderType 6 nodes
// BFB8C9723EF563C7B5A0E336C4A44311725F8047+F4 | +1A RelocAddr<_UpdateModelFace> UpdateModelFace(0x003F4200);
RelocAddr<_UpdateModelHair> UpdateModelHair(0x003DC7E0); // Applies tint to ShaderType 6 nodes RelocAddr<_UpdateHarvestModel> UpdateHarvestModel(0x001A8280);
RelocAddr<_UpdateModelFace> UpdateModelFace(0x003DBDA0);
RelocAddr<_UpdateHarvestModel> UpdateHarvestModel(0x0019CE40);
RelocAddr<_GetRelationshipIndex> GetRelationshipIndex(0x00345ED0); RelocAddr<_GetRelationshipIndex> GetRelationshipIndex(0x0035C1E0);
// aNosetype RelocPtr<FacePresetList> g_facePresetList(0x01E6B300); // aNosetype
RelocPtr<FacePresetList> g_facePresetList(0x01DD6210);
// C5B21010DCF340FCDDDC7866C50C3D78AEF34CB5+6B RelocAddr<_HasLOS> HasLOS(0x00949B70);
//RelocPtr <bool> g_isGameDataReady(0x058FEAB4);
RelocAddr<_HasLOS> HasLOS(0x0091C620);
class LoadedModFinder class LoadedModFinder
{ {

@ -361,7 +361,7 @@ public:
UInt32 LoadScripts_Hook(); UInt32 LoadScripts_Hook();
MEMBER_FN_PREFIX(DataHandler); MEMBER_FN_PREFIX(DataHandler);
DEFINE_MEMBER_FN(LoadScripts, UInt32, 0x001713D0); DEFINE_MEMBER_FN(LoadScripts, UInt32, 0x0017BDB0);
}; };
STATIC_ASSERT(offsetof(DataHandler, regionList) == 0xD00); STATIC_ASSERT(offsetof(DataHandler, regionList) == 0xD00);
@ -395,8 +395,6 @@ public:
}; };
MEMBER_FN_PREFIX(MiscStatManager); MEMBER_FN_PREFIX(MiscStatManager);
// SE: It looks like another inline victim. It wasn't used by anything else in SKSE.
//DEFINE_MEMBER_FN(Visit, void, 0x00000000, Visitor ** visitor);
tArray<MiscStat> m_stats; // 00 tArray<MiscStat> m_stats; // 00
@ -412,8 +410,8 @@ public:
static EquipManager * GetSingleton(void); static EquipManager * GetSingleton(void);
MEMBER_FN_PREFIX(EquipManager); MEMBER_FN_PREFIX(EquipManager);
DEFINE_MEMBER_FN(EquipItem, void, 0x00637A80, Actor * actor, TESForm * item, BaseExtraList * extraData, SInt32 count, BGSEquipSlot * equipSlot, bool withEquipSound, bool preventUnequip, bool showMsg, void * unk); DEFINE_MEMBER_FN(EquipItem, void, 0x0065E4B0, Actor * actor, TESForm * item, BaseExtraList * extraData, SInt32 count, BGSEquipSlot * equipSlot, bool withEquipSound, bool preventUnequip, bool showMsg, void * unk);
DEFINE_MEMBER_FN(UnequipItem, bool, 0x00638190, Actor * actor, TESForm * item, BaseExtraList * extraData, SInt32 count, BGSEquipSlot * equipSlot, bool unkFlag1, bool preventEquip, bool unkFlag2, bool unkFlag3, void * unk); DEFINE_MEMBER_FN(UnequipItem, bool, 0x0065ECA0, Actor * actor, TESForm * item, BaseExtraList * extraData, SInt32 count, BGSEquipSlot * equipSlot, bool unkFlag1, bool preventEquip, bool unkFlag2, bool unkFlag3, void * unk);
}; };
@ -493,8 +491,8 @@ public:
{ {
public: public:
MEMBER_FN_PREFIX(MorphDatabase); MEMBER_FN_PREFIX(MorphDatabase);
DEFINE_MEMBER_FN(GetFaceGenModelMapEntry, bool, 0x003D4F90, const char * meshPath, BSFaceGenModelMap ** entry); DEFINE_MEMBER_FN(GetFaceGenModelMapEntry, bool, 0x003ED210, const char * meshPath, BSFaceGenModelMap ** entry);
DEFINE_MEMBER_FN(SetFaceGenModelMapEntry, void, 0x003D4D80, const char * meshPath, BSFaceGenModel * model); DEFINE_MEMBER_FN(SetFaceGenModelMapEntry, void, 0x003ED0C0, const char * meshPath, BSFaceGenModel * model);
UInt64 unk00; // 00 UInt64 unk00; // 00
UInt32 unk08; // 08 UInt32 unk08; // 08
@ -529,8 +527,8 @@ public:
UInt8 pad61[7]; // 61 UInt8 pad61[7]; // 61
MEMBER_FN_PREFIX(FaceGen); MEMBER_FN_PREFIX(FaceGen);
DEFINE_MEMBER_FN(RegenerateHead, void, 0x003D2A60, BSFaceGenNiNode * headNode, BGSHeadPart * head, TESNPC * npc); DEFINE_MEMBER_FN(RegenerateHead, void, 0x003EA340, BSFaceGenNiNode * headNode, BGSHeadPart * head, TESNPC * npc);
DEFINE_MEMBER_FN(ApplyMorph, void, 0x003D2380, BSFaceGenNiNode * faceGenNode, BGSHeadPart * headPart, BSFixedString * morphName, float relative); DEFINE_MEMBER_FN(ApplyMorph, void, 0x003E9C40, BSFaceGenNiNode* faceGenNode, BGSHeadPart* headPart, BSFixedString* morphName, float relative);
}; };
STATIC_ASSERT(offsetof(FaceGen, isReset) == 0x58); STATIC_ASSERT(offsetof(FaceGen, isReset) == 0x58);
@ -676,12 +674,11 @@ public:
} }
MEMBER_FN_PREFIX(PersistentFormManager); MEMBER_FN_PREFIX(PersistentFormManager);
DEFINE_MEMBER_FN(CreateOffensiveEnchantment, EnchantmentItem *, 0x0059F0F0, tArray<MagicItem::EffectItem> * effectArray); DEFINE_MEMBER_FN(CreateOffensiveEnchantment, EnchantmentItem *, 0x005C1350, tArray<MagicItem::EffectItem> * effectArray);
DEFINE_MEMBER_FN(CreateDefensiveEnchantment, EnchantmentItem *, 0x0059F190, tArray<MagicItem::EffectItem> * effectArray); DEFINE_MEMBER_FN(CreateDefensiveEnchantment, EnchantmentItem *, 0x005C13F0, tArray<MagicItem::EffectItem> * effectArray);
DEFINE_MEMBER_FN(CreatePoison, void, 0x0059F2E0, tArray<MagicItem::EffectItem> * effectArray, AlchemyItem ** poison); DEFINE_MEMBER_FN(CreatePoison, void, 0x005C1540, tArray<MagicItem::EffectItem> * effectArray, AlchemyItem ** poison);
DEFINE_MEMBER_FN(CreatePotion, void, 0x0059F230, AlchemyItem ** potion, tArray<MagicItem::EffectItem> * effectArray); DEFINE_MEMBER_FN(CreatePotion, void, 0x005C1490, AlchemyItem ** potion, tArray<MagicItem::EffectItem> * effectArray);
//DEFINE_MEMBER_FN(AddPersistentForm, void, 0x0068A0F0, TESForm *); DEFINE_MEMBER_FN(ScheduleForDeletion, void, 0x005C1870, TESForm *);
DEFINE_MEMBER_FN(ScheduleForDeletion, void, 0x0059F6E0, TESForm *);
}; };
STATIC_ASSERT(sizeof(PersistentFormManager) == 0xD0); STATIC_ASSERT(sizeof(PersistentFormManager) == 0xD0);
@ -865,15 +862,14 @@ public:
UInt8 unk370[0x60]; // 370 - TODO: .?AV?$BSTCommonStaticMessageQueue@V?$BSTSmartPointer@VRequest@saveload@bgs@@UBSTSmartPointerIntrusiveRefCount@@@@$07@@ UInt8 unk370[0x60]; // 370 - TODO: .?AV?$BSTCommonStaticMessageQueue@V?$BSTSmartPointer@VRequest@saveload@bgs@@UBSTSmartPointerIntrusiveRefCount@@@@$07@@
private: private:
// SE: Save_Internal signature changed! Normal save: unk1=2, unk2=0 DEFINE_MEMBER_FN(Save_Internal, bool, 0x005A87C0, int unk1, UInt32 unk2, const char * name);
DEFINE_MEMBER_FN(Save_Internal, bool, 0x00586DE0, int unk1, UInt32 unk2, const char * name); DEFINE_MEMBER_FN(Load_Internal, bool, 0x005A8F00, const char * name, int unk1, UInt32 unk2, UInt32 unk3);
DEFINE_MEMBER_FN(Load_Internal, bool, 0x00587350, const char * name, int unk1, UInt32 unk2, UInt32 unk3);
DEFINE_MEMBER_FN(SaveGame_HookTarget, void, 0x0057CCC0, UInt64 *unk0); DEFINE_MEMBER_FN(SaveGame_HookTarget, void, 0x0059E730, UInt64 *unk0);
DEFINE_MEMBER_FN(LoadGame_HookTarget, bool, 0x0057D1A0, UInt64 *unk0, UInt32 unk1, UInt32 unk2, void *unk3); DEFINE_MEMBER_FN(LoadGame_HookTarget, bool, 0x0059EE40, UInt64 *unk0, UInt32 unk1, UInt32 unk2, void *unk3);
DEFINE_MEMBER_FN(ProcessEvents_Internal, void, 0x00589A60); DEFINE_MEMBER_FN(ProcessEvents_Internal, void, 0x005ABA70);
DEFINE_MEMBER_FN(DeleteSavegame, void, 0x00586D70, const char * saveName, UInt32 unk1); DEFINE_MEMBER_FN(DeleteSavegame, void, 0x005A8750, const char * saveName, UInt32 unk1);
}; };
STATIC_ASSERT(offsetof(BGSSaveLoadManager, thread) == 0x2B0); STATIC_ASSERT(offsetof(BGSSaveLoadManager, thread) == 0x2B0);
STATIC_ASSERT(offsetof(BGSSaveLoadManager::Thread, hThread) == 0x30); STATIC_ASSERT(offsetof(BGSSaveLoadManager::Thread, hThread) == 0x30);

@ -1,7 +1,7 @@
#include "GameEvents.h" #include "GameEvents.h"
// 614D2151B14D0D61E7DA7088CAB85DB111E2E0D3+1B // 614D2151B14D0D61E7DA7088CAB85DB111E2E0D3+1B
RelocAddr<_GetEventDispatcherList> GetEventDispatcherList(0x00186790); RelocAddr<_GetEventDispatcherList> GetEventDispatcherList(0x00194100);
//EventDispatcher<BGSFootstepEvent>* g_footstepEventDispatcher = (EventDispatcher<BGSFootstepEvent>*) 0x01B2E9C0; //EventDispatcher<BGSFootstepEvent>* g_footstepEventDispatcher = (EventDispatcher<BGSFootstepEvent>*) 0x01B2E9C0;

@ -39,12 +39,12 @@ class EventDispatcher
// Note: in SE there are multiple identical copies of all these functions // Note: in SE there are multiple identical copies of all these functions
MEMBER_FN_PREFIX(EventDispatcher); MEMBER_FN_PREFIX(EventDispatcher);
// 66B1C7AC473D5EA48E4FD620BBFE0A06392C5885+66 // 9FCA8C7632C2FC6D6E342E554B43402121BC4E44+66
DEFINE_MEMBER_FN(AddEventSink_Internal, void, 0x0056B600, SinkT * eventSink); DEFINE_MEMBER_FN(AddEventSink_Internal, void, 0x00587E20, SinkT * eventSink);
// ??_7BGSProcedureShoutExecState@@6B@ dtor | +43 // ??_7BGSProcedureShoutExecState@@6B@ xref +21 last call
DEFINE_MEMBER_FN(RemoveEventSink_Internal, void, 0x00423B70, SinkT * eventSink); DEFINE_MEMBER_FN(RemoveEventSink_Internal, void, 0x0043C400, SinkT * eventSink);
// D6BA7CEC95B2C2B9C593A9AEE7F0ADFFB2C10E11+456 // FB59C2DDF89F5248DF43230E39A6FECF8C997BA6+466
DEFINE_MEMBER_FN(SendEvent_Internal, void, 0x00177DC0, EventArgT * evn); DEFINE_MEMBER_FN(SendEvent_Internal, void, 0x00181CB0, EventArgT * evn);
public: public:

@ -6,33 +6,33 @@
#include "HashUtil.h" #include "HashUtil.h"
// ??_7ExtraHealth@@6B@ // ??_7ExtraHealth@@6B@
const RelocPtr<uintptr_t> s_ExtraHealthVtbl(0x0152C060); const RelocPtr<uintptr_t> s_ExtraHealthVtbl(0x01624A50);
// ??_7ExtraCharge@@6B@ // ??_7ExtraCharge@@6B@
const RelocPtr<uintptr_t> s_ExtraChargeVtbl(0x0152C0C0); const RelocPtr<uintptr_t> s_ExtraChargeVtbl(0x01624AB0);
// ??_7ExtraCount@@6B@ // ??_7ExtraCount@@6B@
const RelocPtr<uintptr_t> s_ExtraCountVtbl(0x0152BFE0); const RelocPtr<uintptr_t> s_ExtraCountVtbl(0x016249D0);
// ??_7ExtraTextDisplayData@@6B@ // ??_7ExtraTextDisplayData@@6B@
const RelocPtr<uintptr_t> s_ExtraTextDisplayVtbl(0x0152CAE0); const RelocPtr<uintptr_t> s_ExtraTextDisplayVtbl(0x016254D0);
// ??_7ExtraSoul@@6B@ // ??_7ExtraSoul@@6B@
const RelocPtr<uintptr_t> s_ExtraSoulVtbl(0x0152F2E0); const RelocPtr<uintptr_t> s_ExtraSoulVtbl(0x01628220);
// ??_7ExtraOwnership@@6B@ // ??_7ExtraOwnership@@6B@
const RelocPtr<uintptr_t> s_ExtraOwnershipVtbl(0x0152BF80); const RelocPtr<uintptr_t> s_ExtraOwnershipVtbl(0x01624970);
// ??_7ExtraAliasInstanceArray@@6B@ // ??_7ExtraAliasInstanceArray@@6B@
const RelocPtr<uintptr_t> s_ExtraAliasInstanceArrayVtbl(0x0152C9A0); const RelocPtr<uintptr_t> s_ExtraAliasInstanceArrayVtbl(0x01625390);
// ??_7ExtraCannotWear@@6B@ // ??_7ExtraCannotWear@@6B@
const RelocPtr<uintptr_t> s_ExtraCannotWearVtbl(0x0152C040); const RelocPtr<uintptr_t> s_ExtraCannotWearVtbl(0x01624A30);
// ??_7ExtraHotkey@@6B@ // ??_7ExtraHotkey@@6B@
const RelocPtr<uintptr_t> s_ExtraHotkeyVtbl(0x0152C120); const RelocPtr<uintptr_t> s_ExtraHotkeyVtbl(0x01624B10);
// ??_7ExtraForcedTarget@@6B@ // ??_7ExtraForcedTarget@@6B@
const RelocPtr<uintptr_t> s_ExtraForcedTargetVtbl(0x0152CB60); const RelocPtr<uintptr_t> s_ExtraForcedTargetVtbl(0x01625550);
// ??_7ExtraReferenceHandle@@6B@ // ??_7ExtraReferenceHandle@@6B@
const RelocPtr<uintptr_t> s_ExtraReferenceHandleVtbl(0x0152C160); const RelocPtr<uintptr_t> s_ExtraReferenceHandleVtbl(0x01624B50);
// ??_7ExtraEnchantment@@6B@ // ??_7ExtraEnchantment@@6B@
const RelocPtr<uintptr_t> s_ExtraEnchantmentVtbl(0x0152C480); const RelocPtr<uintptr_t> s_ExtraEnchantmentVtbl(0x01624E70);
// ??_7ExtraRank@@6B@ // ??_7ExtraRank@@6B@
const RelocPtr<uintptr_t> s_ExtraRankVtbl(0x0152BFC0); const RelocPtr<uintptr_t> s_ExtraRankVtbl(0x016249B0);
// ??_7ExtraUniqueID@@6B@ // ??_7ExtraUniqueID@@6B@
const RelocPtr<uintptr_t> s_ExtraUniqueIdVtbl(0x0152CBA0); const RelocPtr<uintptr_t> s_ExtraUniqueIdVtbl(0x01625590);
ExtraHealth* ExtraHealth::Create() ExtraHealth* ExtraHealth::Create()
{ {

@ -67,10 +67,10 @@ public:
void GetEquipItemData(EquipData& stateOut, SInt32 itemId, SInt32 baseCount) const; void GetEquipItemData(EquipData& stateOut, SInt32 itemId, SInt32 baseCount) const;
MEMBER_FN_PREFIX(InventoryEntryData); MEMBER_FN_PREFIX(InventoryEntryData);
DEFINE_MEMBER_FN(GenerateName, const char *, 0x001D73C0); DEFINE_MEMBER_FN(GenerateName, const char *, 0x001E2B70);
DEFINE_MEMBER_FN(GetValue, SInt32, 0x001D66E0); DEFINE_MEMBER_FN(GetValue, SInt32, 0x001E1EC0);
DEFINE_MEMBER_FN(IsOwnedBy, bool, 0x001D7510, TESForm * actor, bool unk1); DEFINE_MEMBER_FN(IsOwnedBy, bool, 0x001E2CB0, TESForm * actor, bool unk1);
DEFINE_MEMBER_FN(GetSoulLevel, UInt32, 0x001D6860); DEFINE_MEMBER_FN(GetSoulLevel, UInt32, 0x001E2040);
}; };
typedef tList<InventoryEntryData> EntryDataList; typedef tList<InventoryEntryData> EntryDataList;
@ -98,8 +98,8 @@ public:
void GetEquipItemData(InventoryEntryData::EquipData& stateOut, TESForm * item, SInt32 itemId) const; void GetEquipItemData(InventoryEntryData::EquipData& stateOut, TESForm * item, SInt32 itemId) const;
MEMBER_FN_PREFIX(Data); MEMBER_FN_PREFIX(Data);
DEFINE_MEMBER_FN(SetUniqueID, void, 0x001ECC60, BaseExtraList* itemList, TESForm * oldForm, TESForm * newForm); DEFINE_MEMBER_FN(SetUniqueID, void, 0x001F8560, BaseExtraList* itemList, TESForm * oldForm, TESForm * newForm);
DEFINE_MEMBER_FN(TransferItemUID, void, 0x001ECE20, BaseExtraList * extraList, TESForm * oldForm, TESForm * newForm, UInt32 unk1); DEFINE_MEMBER_FN(TransferItemUID, void, 0x001F8810, BaseExtraList * extraList, TESForm * oldForm, TESForm * newForm, UInt32 unk1);
}; };
Data * data; Data * data;
@ -552,8 +552,8 @@ public:
static ExtraTextDisplayData* Create(); static ExtraTextDisplayData* Create();
MEMBER_FN_PREFIX(ExtraTextDisplayData); MEMBER_FN_PREFIX(ExtraTextDisplayData);
DEFINE_MEMBER_FN(SetName_Internal, void, 0x0013C870, const char * name); DEFINE_MEMBER_FN(SetName_Internal, void, 0x00143C40, const char * name);
DEFINE_MEMBER_FN(GenerateName_Internal, const char*, 0x0013C740, TESForm * form, float extraHealthValue); DEFINE_MEMBER_FN(GenerateName_Internal, const char*, 0x00143B10, TESForm * form, float extraHealthValue);
}; };
// ExtraAlphaCutoff // ExtraAlphaCutoff

@ -474,7 +474,7 @@ public:
UInt32 unk0C; // 0C - init'd to FFFFFFFF UInt32 unk0C; // 0C - init'd to FFFFFFFF
MEMBER_FN_PREFIX(TESDescription); MEMBER_FN_PREFIX(TESDescription);
DEFINE_MEMBER_FN(Get, void, 0x00190480, BSString * out, TESForm * parent, UInt32 fieldType); DEFINE_MEMBER_FN(Get, void, 0x0019AB70, BSString * out, TESForm * parent, UInt32 fieldType);
}; };
// 18 // 18
@ -1064,8 +1064,8 @@ public:
UInt32 handle; // 2770 UInt32 handle; // 2770
UInt32 unk2774; // 2774 UInt32 unk2774; // 2774
DEFINE_MEMBER_FN_0(UpdateWeightData, void, 0x001C61A0); DEFINE_MEMBER_FN_0(UpdateWeightData, void, 0x001D1360);
DEFINE_MEMBER_FN_0(DeleteThis, void, 0x001C60A0); DEFINE_MEMBER_FN_0(DeleteThis, void, 0x001D1260);
}; };
STATIC_ASSERT(offsetof(Biped, unk10) == 0x10); STATIC_ASSERT(offsetof(Biped, unk10) == 0x10);
STATIC_ASSERT(offsetof(Biped, unk13C0) == 0x13C0); STATIC_ASSERT(offsetof(Biped, unk13C0) == 0x13C0);
@ -1296,10 +1296,10 @@ public:
UInt32 pad13C; // 13C UInt32 pad13C; // 13C
MEMBER_FN_PREFIX(ActorProcessManager); MEMBER_FN_PREFIX(ActorProcessManager);
DEFINE_MEMBER_FN(SetEquipFlag, void, 0x0067E3B0, UInt8 flags); DEFINE_MEMBER_FN(SetEquipFlag, void, 0x006A6720, UInt8 flags);
DEFINE_MEMBER_FN(UpdateEquipment, void, 0x00650DF0, Actor * actor); DEFINE_MEMBER_FN(UpdateEquipment, void, 0x006787D0, Actor * actor);
// FBB0A4AE04B0C1C63470C26B004079D7D9B20D0B+8B // CDC12817DF3AB5B832348763F433A216BB8A85CA+89
DEFINE_MEMBER_FN(SetDataFlag, void, 0x0065C880, float flag); // Sets a number on the 0x10 object. SE: The parameter flag was actually a float (xmm1) DEFINE_MEMBER_FN(SetDataFlag, void, 0x00684430, float flag); // Sets a number on the 0x10 object
void UpdateEquipment_Hooked(Actor * actor); void UpdateEquipment_Hooked(Actor * actor);
}; };
@ -1383,9 +1383,9 @@ public:
void SetSkillLegendaryLevel(BSFixedString actorValue, UInt32 level); void SetSkillLegendaryLevel(BSFixedString actorValue, UInt32 level);
MEMBER_FN_PREFIX(PlayerSkills); MEMBER_FN_PREFIX(PlayerSkills);
DEFINE_MEMBER_FN(GetSkillData, UInt32, 0x006E6130, UInt32 actorValue, float * level, float * points, float * pointsMax, UInt32 * unk6); DEFINE_MEMBER_FN(GetSkillData, UInt32, 0x0070F910, UInt32 actorValue, float * level, float * points, float * pointsMax, UInt32 * unk6);
DEFINE_MEMBER_FN(IncrementLegendary, UInt32, 0x006E6620, UInt32 actorValue); DEFINE_MEMBER_FN(IncrementLegendary, UInt32, 0x0070FF00, UInt32 actorValue);
DEFINE_MEMBER_FN(SetLevel, void, 0x006E65C0, UInt32 level); DEFINE_MEMBER_FN(SetLevel, void, 0x0070FEA0, UInt32 level);
}; };
// 10 // 10

@ -1,12 +1,12 @@
#include "GameForms.h" #include "GameForms.h"
#include "GameObjects.h" #include "GameObjects.h"
RelocAddr <_LookupFormByID> LookupFormByID(0x00194230); RelocAddr <_LookupFormByID> LookupFormByID(0x0019F050);
BGSDefaultObjectManager *BGSDefaultObjectManager::GetSingleton(void) BGSDefaultObjectManager *BGSDefaultObjectManager::GetSingleton(void)
{ {
// 81542B44FD6902A56B6B1464C37C41C529E9FD2A+31CB // 28B3F9E3FED2F18B102E5B767FD2BE747CAB4002+37
static RelocPtr<BGSDefaultObjectManager> g_BGSDefaultObjectManager(0x01EBD710); static RelocPtr<BGSDefaultObjectManager> g_BGSDefaultObjectManager(0x01F59090);
return g_BGSDefaultObjectManager; return g_BGSDefaultObjectManager;
} }
@ -65,8 +65,8 @@ void TESForm::CopyFromEx(TESForm * rhsForm)
float GetFormWeight(TESForm *form) float GetFormWeight(TESForm *form)
{ {
// 27090A4B7BDF5406F9A6871190673EC666A22195+38 // 3894EDBBE3D9FBC367A71D7ABC60B87A407F3E3D+30
static RelocAddr<uintptr_t> GetFormWeight_Address(0x001A1730); static RelocAddr<uintptr_t> GetFormWeight_Address(0x001ACF20);
return ((_GetFormWeight)(GetFormWeight_Address.GetUIntPtr())) (form); return ((_GetFormWeight)(GetFormWeight_Address.GetUIntPtr())) (form);
} }

@ -357,7 +357,7 @@ public:
enum { enum {
kFlagIsDeleted = 0x20, kFlagIsDeleted = 0x20,
kFlagPlayerKnows = 0x40, kFlagPlayerKnows = 0x40,
kFlagUnk_0x800 = 0x800 kFlagUnk_0x800 = 0x800,
}; };
virtual void Unk_04(void); // reset/init? would leak pointers if called on a live object virtual void Unk_04(void); // reset/init? would leak pointers if called on a live object
@ -366,8 +366,8 @@ public:
virtual bool Unk_07(UInt32 arg); virtual bool Unk_07(UInt32 arg);
virtual bool Unk_08(UInt32 arg); // calls LoadForm virtual bool Unk_08(UInt32 arg); // calls LoadForm
virtual TESForm * Unk_09(UInt32 arg1, void * arg2); virtual TESForm * Unk_09(UInt32 arg1, void * arg2);
virtual bool MarkChanged(UInt32 changed); // mark as changed? virtual bool MarkChanged(UInt32 changed);
virtual void Unk_0B(UInt32 arg); virtual void ClearChanged(UInt32 changed);
virtual bool Unk_0C(UInt32 arg); virtual bool Unk_0C(UInt32 arg);
virtual void Unk_0D(UInt32 arg); virtual void Unk_0D(UInt32 arg);
virtual void Unk_0E(UInt32 arg); virtual void Unk_0E(UInt32 arg);
@ -967,9 +967,9 @@ public:
UInt32 unk40; // 40 UInt32 unk40; // 40
MEMBER_FN_PREFIX(BGSListForm); MEMBER_FN_PREFIX(BGSListForm);
DEFINE_MEMBER_FN(AddFormToList, void, 0x002C53D0, TESForm * form); DEFINE_MEMBER_FN(AddFormToList, void, 0x002D81C0, TESForm * form);
DEFINE_MEMBER_FN(RemoveFormFromList, void, 0x002C5570, TESForm * form); DEFINE_MEMBER_FN(RemoveFormFromList, void, 0x002D8390, TESForm * form);
DEFINE_MEMBER_FN(RevertList, void, 0x002C5300); DEFINE_MEMBER_FN(RevertList, void, 0x002D80E0);
class Visitor class Visitor
{ {
@ -1700,8 +1700,8 @@ public:
UnkArray unk250; // 250 UnkArray unk250; // 250
MEMBER_FN_PREFIX(TESQuest); MEMBER_FN_PREFIX(TESQuest);
DEFINE_MEMBER_FN(ForceRefTo, UInt32, 0x00375050, UInt32 aliasId, TESObjectREFR * reference); DEFINE_MEMBER_FN(ForceRefTo, UInt32, 0x0038C240, UInt32 aliasId, TESObjectREFR * reference);
DEFINE_MEMBER_FN(NewGame_Internal, UInt8, 0x00370910, UInt8 * unk1, UInt8 unk2); DEFINE_MEMBER_FN(NewGame_Internal, UInt8, 0x00387F50, UInt8 * unk1, UInt8 unk2);
UInt8 NewGame_Hook(UInt8 * unk1, UInt8 unk2); UInt8 NewGame_Hook(UInt8 * unk1, UInt8 unk2);
}; };
@ -2572,7 +2572,7 @@ public:
UInt64 unk138; // 138 UInt64 unk138; // 138
MEMBER_FN_PREFIX(TESObjectCELL); MEMBER_FN_PREFIX(TESObjectCELL);
DEFINE_MEMBER_FN(GetNorthRotation, double, 0x0026D510); DEFINE_MEMBER_FN(GetNorthRotation, float, 0x00280DB0);
}; };
STATIC_ASSERT(offsetof(TESObjectCELL, refData) == 0x88); STATIC_ASSERT(offsetof(TESObjectCELL, refData) == 0x88);
STATIC_ASSERT(offsetof(TESObjectCELL, objectList) == 0xB8); STATIC_ASSERT(offsetof(TESObjectCELL, objectList) == 0xB8);
@ -3469,8 +3469,8 @@ public:
if(type > kFormType_Max) if(type > kFormType_Max)
return NULL; return NULL;
// B8146167FE300AED18E0DCE1DA9C86E4C4D08513+11 // 5386ADDB542755AB5BD598497543E780AD5BDC54+35
static RelocPtr<IFormFactory *> kFactoryList(0x01EC3CE0); static RelocPtr<IFormFactory *> kFactoryList(0x01F5F620);
return kFactoryList[type]; return kFactoryList[type];
} }

@ -32,7 +32,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(WeaponRightSwingHandler); MEMBER_FN_PREFIX(WeaponRightSwingHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x007209A0, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074C500, Actor * form, UInt32 unk04);
}; };
class WeaponLeftSwingHandler : public IHandlerFunctor<Actor, UInt32> class WeaponLeftSwingHandler : public IHandlerFunctor<Actor, UInt32>
@ -42,7 +42,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(WeaponLeftSwingHandler); MEMBER_FN_PREFIX(WeaponLeftSwingHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00720A30, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074C590, Actor * form, UInt32 unk04);
}; };
class RightHandSpellFireHandler : public IHandlerFunctor<Actor, UInt32> class RightHandSpellFireHandler : public IHandlerFunctor<Actor, UInt32>
@ -52,7 +52,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(RightHandSpellFireHandler); MEMBER_FN_PREFIX(RightHandSpellFireHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00720BF0, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074C750, Actor * form, UInt32 unk04);
}; };
class LeftHandSpellFireHandler : public IHandlerFunctor<Actor, UInt32> class LeftHandSpellFireHandler : public IHandlerFunctor<Actor, UInt32>
@ -62,7 +62,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(LeftHandSpellFireHandler); MEMBER_FN_PREFIX(LeftHandSpellFireHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00720BA0, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074C700, Actor * form, UInt32 unk04);
}; };
class RightHandSpellCastHandler : public IHandlerFunctor<Actor, UInt32> class RightHandSpellCastHandler : public IHandlerFunctor<Actor, UInt32>
@ -72,7 +72,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(RightHandSpellCastHandler); MEMBER_FN_PREFIX(RightHandSpellCastHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00720DB0, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074C910, Actor * form, UInt32 unk04);
}; };
class LeftHandSpellCastHandler : public IHandlerFunctor<Actor, UInt32> class LeftHandSpellCastHandler : public IHandlerFunctor<Actor, UInt32>
@ -82,7 +82,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(LeftHandSpellCastHandler); MEMBER_FN_PREFIX(LeftHandSpellCastHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00720D60, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074C8C0, Actor * form, UInt32 unk04);
}; };
class VoiceSpellCastHandler : public IHandlerFunctor<Actor, UInt32> class VoiceSpellCastHandler : public IHandlerFunctor<Actor, UInt32>
@ -92,7 +92,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(VoiceSpellCastHandler); MEMBER_FN_PREFIX(VoiceSpellCastHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00720E00, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074C960, Actor * form, UInt32 unk04);
}; };
class VoiceSpellFireHandler : public IHandlerFunctor<Actor, UInt32> class VoiceSpellFireHandler : public IHandlerFunctor<Actor, UInt32>
@ -102,7 +102,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(VoiceSpellFireHandler); MEMBER_FN_PREFIX(VoiceSpellFireHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00720C40, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074C7A0, Actor * form, UInt32 unk04);
}; };
class BowDrawnHandler : public IHandlerFunctor<Actor, UInt32> class BowDrawnHandler : public IHandlerFunctor<Actor, UInt32>
@ -112,7 +112,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(BowDrawnHandler); MEMBER_FN_PREFIX(BowDrawnHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00721EF0, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074DBC0, Actor * form, UInt32 unk04);
}; };
class BowReleaseHandler : public IHandlerFunctor<Actor, UInt32> class BowReleaseHandler : public IHandlerFunctor<Actor, UInt32>
@ -122,7 +122,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(BowReleaseHandler); MEMBER_FN_PREFIX(BowReleaseHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00721F10, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074DBE0, Actor * form, UInt32 unk04);
}; };
class WeaponBeginDrawRightHandler : public IHandlerFunctor<Actor, UInt32> class WeaponBeginDrawRightHandler : public IHandlerFunctor<Actor, UInt32>
@ -132,7 +132,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(WeaponBeginDrawRightHandler); MEMBER_FN_PREFIX(WeaponBeginDrawRightHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00720E90, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074C9F0, Actor * form, UInt32 unk04);
}; };
class WeaponBeginSheatheRightHandler : public IHandlerFunctor<Actor, UInt32> class WeaponBeginSheatheRightHandler : public IHandlerFunctor<Actor, UInt32>
@ -142,7 +142,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(WeaponBeginSheatheRightHandler); MEMBER_FN_PREFIX(WeaponBeginSheatheRightHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00720F40, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074CAA0, Actor * form, UInt32 unk04);
}; };
class RightHandWeaponDrawHandler : public IHandlerFunctor<Actor, UInt32> class RightHandWeaponDrawHandler : public IHandlerFunctor<Actor, UInt32>
@ -152,7 +152,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04); virtual UInt8 Process(Actor * form, UInt32 unk04);
MEMBER_FN_PREFIX(RightHandWeaponDrawHandler); MEMBER_FN_PREFIX(RightHandWeaponDrawHandler);
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00720FB0, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074CB10, Actor * form, UInt32 unk04);
}; };
class RightHandWeaponSheatheHandler : public IHandlerFunctor<Actor, UInt32> class RightHandWeaponSheatheHandler : public IHandlerFunctor<Actor, UInt32>
@ -163,5 +163,5 @@ public:
MEMBER_FN_PREFIX(RightHandWeaponSheatheHandler); MEMBER_FN_PREFIX(RightHandWeaponSheatheHandler);
// ??_7RightHandWeaponSheatheHandler@@6B@ + 8 // ??_7RightHandWeaponSheatheHandler@@6B@ + 8
DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x00721110, Actor * form, UInt32 unk04); DEFINE_MEMBER_FN(Process_Origin, UInt8, 0x0074CC70, Actor * form, UInt32 unk04);
}; };

@ -7,15 +7,15 @@ bool InputEventDispatcher::IsGamepadEnabled(void)
InputEventDispatcher* InputEventDispatcher::GetSingleton() InputEventDispatcher* InputEventDispatcher::GetSingleton()
{ {
// 5202C5E930BB4CD8F477F91C9434AB37DBDB10B3+7A // 8FAAB2F3DC59885AE2A550C95F2C82BE2497789F+37
static RelocPtr<InputEventDispatcher*> g_inputEventDispatcher(0x02F257A8); static RelocPtr<InputEventDispatcher*> g_inputEventDispatcher(0x02FC0DC0);
return *g_inputEventDispatcher; return *g_inputEventDispatcher;
} }
InputManager * InputManager::GetSingleton(void) InputManager * InputManager::GetSingleton(void)
{ {
// 61FAE6E8975F0FA7B3DD4D5A410A240E86A58F7B+E // 80AE59E4FF0DC421866FA7261C1625595B0C7572+11
static RelocPtr<InputManager*> g_inputManager(0x02EC5BD0); static RelocPtr<InputManager*> g_inputManager(0x02F614A0);
return *g_inputManager; return *g_inputManager;
} }
@ -97,14 +97,14 @@ BSFixedString InputManager::GetMappedControl(UInt32 buttonID, UInt32 deviceType,
PlayerControls * PlayerControls::GetSingleton(void) PlayerControls * PlayerControls::GetSingleton(void)
{ {
// F1E82AFF2615653A5A14A2E7C229B4B0466688EF+19 // 20AF40A6B803C21547F594CE478EAA5065E8F5A5+11B
static RelocPtr<PlayerControls*> g_playerControls(0x02EC5BD8); static RelocPtr<PlayerControls*> g_playerControls(0x02F614A8);
return *g_playerControls; return *g_playerControls;
} }
MenuControls * MenuControls::GetSingleton(void) MenuControls * MenuControls::GetSingleton(void)
{ {
// DC378767BEB0312EBDE098BC7E0CE53FCC296377+D9 // 4E9F39D1066653EF254B38406212E476F80A6C9B+F0
static RelocPtr<MenuControls*> g_menuControls(0x02F003F8); static RelocPtr<MenuControls*> g_menuControls(0x02F9BC88);
return *g_menuControls; return *g_menuControls;
} }

@ -287,7 +287,7 @@ public:
// used by Hooks_Event // used by Hooks_Event
PlayerControls * ctor_Hook(void); PlayerControls * ctor_Hook(void);
MEMBER_FN_PREFIX(PlayerControls); MEMBER_FN_PREFIX(PlayerControls);
DEFINE_MEMBER_FN(ctor, PlayerControls *, 0x00704970); DEFINE_MEMBER_FN(ctor, PlayerControls *, 0x0072F010);
}; };
STATIC_ASSERT(offsetof(PlayerControls, runMode) == 0x049); STATIC_ASSERT(offsetof(PlayerControls, runMode) == 0x049);
STATIC_ASSERT(offsetof(PlayerControls, remapMode) == 0x050); STATIC_ASSERT(offsetof(PlayerControls, remapMode) == 0x050);
@ -434,8 +434,8 @@ public:
static InputStringHolder * GetSingleton(void) static InputStringHolder * GetSingleton(void)
{ {
// 38C98DE3888C4A78379B4BC9F21B33FA74FB6E4C+32 // 8BDB97B9BE3B9EBCCFB4F3BA9237EDC8341B354C+B
static RelocPtr<InputStringHolder*> g_inputStringHolder(0x02F25250); static RelocPtr<InputStringHolder*> g_inputStringHolder(0x02FC07C0);
return *g_inputStringHolder; return *g_inputStringHolder;
} }
}; };

@ -1,6 +1,6 @@
#include "GameMenus.h" #include "GameMenus.h"
RelocAddr <_CreateUIMessageData> CreateUIMessageData(0x00325F00); RelocAddr <_CreateUIMessageData> CreateUIMessageData(0x005B0E50);
IMenu::IMenu() : IMenu::IMenu() :
view(NULL), view(NULL),

@ -98,10 +98,10 @@ public:
GRefCountBase * unk18; // 28 - holds a reference GRefCountBase * unk18; // 28 - holds a reference
MEMBER_FN_PREFIX(IMenu); MEMBER_FN_PREFIX(IMenu);
DEFINE_MEMBER_FN(InitMovie_internal, void, 0x00ECD970, GFxMovieView* view); DEFINE_MEMBER_FN(InitMovie_internal, void, 0x00F10E30, GFxMovieView* view);
DEFINE_MEMBER_FN(NextFrame_internal, void, 0x00ECD8A0, UInt32 arg0, UInt32 arg1); DEFINE_MEMBER_FN(NextFrame_internal, void, 0x00F10BC0, UInt32 arg0, UInt32 arg1);
DEFINE_MEMBER_FN(ProcessMessage_internal, UInt32, 0x00ECD850, UIMessage* message); DEFINE_MEMBER_FN(ProcessMessage_internal, UInt32, 0x00F10B70, UIMessage* message);
DEFINE_MEMBER_FN(dtor, void, 0x00ECD7F0); DEFINE_MEMBER_FN(dtor, void, 0x00F10B10);
}; };
STATIC_ASSERT(offsetof(IMenu, view) == 0x10); STATIC_ASSERT(offsetof(IMenu, view) == 0x10);
@ -252,8 +252,8 @@ public:
MEMBER_FN_PREFIX(RaceSexMenu); MEMBER_FN_PREFIX(RaceSexMenu);
// FCFD4B12540A068252C0A71C5480E518DDF6EF60+58 // B3D68A070DD2D03BA80128C5FED7004330D111AC+B1
DEFINE_MEMBER_FN(LoadSliders, void *, 0x008B5E20, UInt64 unk1, UInt8 unk2); DEFINE_MEMBER_FN(LoadSliders, void *, 0x008E6300, UInt64 unk1, UInt8 unk2);
}; };
STATIC_ASSERT(offsetof(RaceSexMenu, sliderData) == 0x140); STATIC_ASSERT(offsetof(RaceSexMenu, sliderData) == 0x140);
STATIC_ASSERT(offsetof(RaceSexMenu, raceIndex) == 0x188); STATIC_ASSERT(offsetof(RaceSexMenu, raceIndex) == 0x188);
@ -366,8 +366,8 @@ public:
GFxValue object; // 10 GFxValue object; // 10
MEMBER_FN_PREFIX(HUDObject); MEMBER_FN_PREFIX(HUDObject);
DEFINE_MEMBER_FN_0(dtor, void, 0x00885C40); DEFINE_MEMBER_FN_0(dtor, void, 0x008B6170);
DEFINE_MEMBER_FN_1(Impl_Fn03, void *, 0x00880140, void * unk1); DEFINE_MEMBER_FN_1(Impl_Fn03, void *, 0x008B0FD0, void * unk1);
DEFINE_STATIC_HEAP(Heap_Allocate, Heap_Free); DEFINE_STATIC_HEAP(Heap_Allocate, Heap_Free);
}; };
@ -410,7 +410,7 @@ public:
TESWordOfPower* word; // 50 TESWordOfPower* word; // 50
UInt32 time; // 58 - g_gameTime + iObjectivesWaitTime UInt32 time; // 58 - g_gameTime + iObjectivesWaitTime
DEFINE_MEMBER_FN_0(dtor, void, 0x00885400); DEFINE_MEMBER_FN_0(dtor, void, 0x008B61E0);
}; };
// 78 // 78
@ -564,7 +564,7 @@ public:
UInt8 pad12[6]; // 12 UInt8 pad12[6]; // 12
MEMBER_FN_PREFIX(CategoryListEntry); MEMBER_FN_PREFIX(CategoryListEntry);
DEFINE_MEMBER_FN(SetData, void, 0x0086F130, GFxValue* target); DEFINE_MEMBER_FN(SetData, void, 0x0089E570, GFxValue* target);
void SetData_Extended(EnchantConstructMenu* subMenu, GFxValue* target); void SetData_Extended(EnchantConstructMenu* subMenu, GFxValue* target);
}; };
@ -840,13 +840,14 @@ public:
// this takes ownership of the message ptr // this takes ownership of the message ptr
// DEFINE_MEMBER_FN(AddMessage, void, 0x004503E0, UIMessage * msg); // old 1.1 implementation // DEFINE_MEMBER_FN(AddMessage, void, 0x004503E0, UIMessage * msg); // old 1.1 implementation
// 1.3 uses a little non-thread-safe pool of UIMessages to wrap around the nicely thread-safe BSTMessageQueue it gets added to // 1.3 uses a little non-thread-safe pool of UIMessages to wrap around the nicely thread-safe BSTMessageQueue it gets added to
DEFINE_MEMBER_FN(AddMessage, void, 0x001652D0, StringCache::Ref * strData, UInt32 msgID, void * objData);
DEFINE_MEMBER_FN(CreateUIMessageData, IUIMessageData *, 0x00EC31D0, const BSFixedString &type); DEFINE_MEMBER_FN(AddMessage, void, 0x0016EC10, StringCache::Ref * strData, UInt32 msgID, void * objData);
DEFINE_MEMBER_FN(CreateUIMessageData, IUIMessageData *, 0x00F09F80, const BSFixedString &type);
static UIManager * GetSingleton(void) static UIManager * GetSingleton(void)
{ {
// CB598A8812CFF3959F94DC8F8371BA876F68AE34+67 // 5DCBE2588F11BA3D68C45F56DC0FC5D806409F85+C3
static RelocPtr<UIManager*> g_UIManager(0x01EC0A70); static RelocPtr<UIManager*> g_UIManager(0x01F5C3F0);
return *g_UIManager; return *g_UIManager;
} }
@ -855,7 +856,7 @@ public:
void QueueCommand(UIDelegate* cmd); void QueueCommand(UIDelegate* cmd);
void QueueCommand(UIDelegate_v1* cmd); void QueueCommand(UIDelegate_v1* cmd);
DEFINE_MEMBER_FN(ProcessEventQueue_HookTarget, void, 0x00EC30F0); DEFINE_MEMBER_FN(ProcessEventQueue_HookTarget, void, 0x00F09E00);
}; };
STATIC_ASSERT(offsetof(UIManager, pad348) == 0x348); STATIC_ASSERT(offsetof(UIManager, pad348) == 0x348);
STATIC_ASSERT(sizeof(UIManager) == 0xB80); STATIC_ASSERT(sizeof(UIManager) == 0xB80);
@ -942,8 +943,8 @@ public:
static UIStringHolder * GetSingleton(void) static UIStringHolder * GetSingleton(void)
{ {
// 81B349AB8ABC9944E48046819F0345AB0526CDB5+9 // 5DCBE2588F11BA3D68C45F56DC0FC5D806409F85+BC
static RelocPtr<UIStringHolder *> g_UIStringHolder(0x01EC0A78); static RelocPtr<UIStringHolder *> g_UIStringHolder(0x01F5C3F8);
return *g_UIStringHolder; return *g_UIStringHolder;
} }
}; };
@ -957,7 +958,7 @@ public:
static Inventory3DManager * GetSingleton(void) static Inventory3DManager * GetSingleton(void)
{ {
// 6BC34CC398831C8B8BE5BE20EC213B5BE7C47A7A+2E // 6BC34CC398831C8B8BE5BE20EC213B5BE7C47A7A+2E
static RelocPtr<Inventory3DManager*> g_inventory3DManager(0x02F27180); static RelocPtr<Inventory3DManager*> g_inventory3DManager(0x02FC2DF0);
return *g_inventory3DManager; return *g_inventory3DManager;
} }
@ -996,17 +997,10 @@ public:
UInt8 pad15B[5]; UInt8 pad15B[5];
MEMBER_FN_PREFIX(Inventory3DManager); MEMBER_FN_PREFIX(Inventory3DManager);
DEFINE_MEMBER_FN(UpdateItem3D, void, 0x00887970, InventoryEntryData * objDesc); DEFINE_MEMBER_FN(UpdateItem3D, void, 0x008B84E0, InventoryEntryData * objDesc);
DEFINE_MEMBER_FN(UpdateMagic3D, void, 0x008879A0, TESForm * form, UInt32 unk1); DEFINE_MEMBER_FN(UpdateMagic3D, void, 0x008B8510, TESForm * form, UInt32 unk1);
DEFINE_MEMBER_FN(Clear3D, void, 0x00887D10); DEFINE_MEMBER_FN(Clear3D, void, 0x008B88D0);
DEFINE_MEMBER_FN(Render, UInt32, 0x00887750); DEFINE_MEMBER_FN(Render, UInt32, 0x008B81F0);
//DEFINE_MEMBER_FN(Unk1, void, 0x008667E0, UInt32 unk1);
//DEFINE_MEMBER_FN(Unk2, void, 0x00867110);
//DEFINE_MEMBER_FN(Unk3, bool, 0x008664C0);
//DEFINE_MEMBER_FN(Unk4, double, 0x008663E0);
//DEFINE_MEMBER_FN(Unk5, bool, 0x008418D0);
//DEFINE_MEMBER_FN(Unk6, int, 0x00867730);
}; };
STATIC_ASSERT(offsetof(Inventory3DManager, unk14) == 0x14); STATIC_ASSERT(offsetof(Inventory3DManager, unk14) == 0x14);
@ -1097,15 +1091,15 @@ public:
private: private:
MEMBER_FN_PREFIX(MenuManager); MEMBER_FN_PREFIX(MenuManager);
DEFINE_MEMBER_FN(IsMenuOpen, bool, 0x00EBE150, BSFixedString * menuName); DEFINE_MEMBER_FN(IsMenuOpen, bool, 0x00F05300, BSFixedString * menuName);
DEFINE_MEMBER_FN(Register_internal, void, 0x00EBF9C0, const char * name, CreatorFunc creator); DEFINE_MEMBER_FN(Register_internal, void, 0x00F06FD0, const char * name, CreatorFunc creator);
public: public:
static MenuManager * GetSingleton(void) static MenuManager * GetSingleton(void)
{ {
// 502FDB8FEA80C3705F9E228F79D4EA7A399CC7FD+32 // 0060C371BC22FE1665DD3BA10816084EEC6FAA3F+4
static RelocPtr<MenuManager *> g_menuManager(0x01EBEB20); static RelocPtr<MenuManager *> g_menuManager(0x01F5A4A0);
return *g_menuManager; return *g_menuManager;
} }

@ -146,9 +146,11 @@ bool TESObjectARMA::isValidRace(TESRace * sourceRace) const
BSShaderTextureSet * BSShaderTextureSet::Create() BSShaderTextureSet * BSShaderTextureSet::Create()
{ {
BSShaderTextureSet * textureSet = (BSShaderTextureSet*)Heap_Allocate(sizeof(BSShaderTextureSet)); typedef BSShaderTextureSet * (* _BSShaderTextureSet_Create)(void);
CALL_MEMBER_FN(textureSet, ctor)(); // 898A3CAF8F24D9FDC30B00DA3DC5BDF182682C1C+63
return textureSet; static RelocAddr <_BSShaderTextureSet_Create> BSShaderTextureSet_Create(0x0140B7A0);
return BSShaderTextureSet_Create();
} }
void TESNPC::SetFaceTexture(BGSTextureSet * textureSet) void TESNPC::SetFaceTexture(BGSTextureSet * textureSet)

@ -334,9 +334,6 @@ public:
const char * textures[9]; const char * textures[9];
static BSShaderTextureSet * Create(); static BSShaderTextureSet * Create();
MEMBER_FN_PREFIX(BSShaderTextureSet);
DEFINE_MEMBER_FN(ctor, BSShaderTextureSet *, 0x012C9320);
}; };
STATIC_ASSERT(sizeof(BSShaderTextureSet) == 0x58); STATIC_ASSERT(sizeof(BSShaderTextureSet) == 0x58);
@ -360,6 +357,14 @@ public:
UInt32 unk08; // 08 UInt32 unk08; // 08
}; };
enum Flag
{
kFlagNone = 0,
kFlagNoSpecularMap = 1 << 0,
kFlagFacegenTextures = 1 << 1,
kFlagHasModelSpaceNormalMap = 1 << 2
};
enum enum
{ {
kTextureDiffuse = 0, kTextureDiffuse = 0,
@ -379,7 +384,7 @@ public:
TESTexture texturePaths[kNumTextures]; // 40 TESTexture texturePaths[kNumTextures]; // 40
UInt64 unkC0; // C0 UInt64 unkC0; // C0
UInt16 unkC8; // C8 UInt16 flags; // C8
UInt8 padCA[6]; // CA UInt8 padCA[6]; // CA
Data unkD0[kNumTextures]; // D0 Data unkD0[kNumTextures]; // D0
}; };
@ -457,8 +462,8 @@ public:
UInt64 unk88; // 88 UInt64 unk88; // 88
MEMBER_FN_PREFIX(MagicItem); MEMBER_FN_PREFIX(MagicItem);
DEFINE_MEMBER_FN(GetCostliestEffectItem, EffectItem *, 0x00101CC0, int arg1, bool arg2); DEFINE_MEMBER_FN(GetCostliestEffectItem, EffectItem *, 0x0010BF00, int arg1, bool arg2);
DEFINE_MEMBER_FN(GetEffectiveMagickaCost, float, 0x00101A30, Character* caster); DEFINE_MEMBER_FN(GetEffectiveMagickaCost, float, 0x0010BC80, Character* caster);
}; };
STATIC_ASSERT(sizeof(MagicItem) == 0x90); STATIC_ASSERT(sizeof(MagicItem) == 0x90);
@ -793,11 +798,10 @@ public:
UInt64 unk260; // 260 UInt64 unk260; // 260
MEMBER_FN_PREFIX(TESNPC); MEMBER_FN_PREFIX(TESNPC);
DEFINE_MEMBER_FN(GetSex, char, 0x003512A0); DEFINE_MEMBER_FN(GetSex, char, 0x00367290); // return (formType == 0x2B) ? (actorData.flags & 1) : -1;
DEFINE_MEMBER_FN(HasOverlays, bool, 0x00368A20); DEFINE_MEMBER_FN(HasOverlays, bool, 0x0037FEB0);
// Swaps a headPart of the same type as target with target DEFINE_MEMBER_FN(ChangeHeadPart, void, 0x0037CE80, BGSHeadPart * target); // Swaps a headPart of the same type as target with target
DEFINE_MEMBER_FN(ChangeHeadPart, void, 0x00365BF0, BGSHeadPart * target);
struct MorphAction { struct MorphAction {
BSFaceGenNiNode * faceNode; BSFaceGenNiNode * faceNode;
@ -806,11 +810,9 @@ public:
float value; float value;
}; };
// Updates the neck seam when weight changed DEFINE_MEMBER_FN(UpdateNeck, void, 0x00377430, BSFaceGenNiNode * faceNode); // Updates the neck seam when weight changed
DEFINE_MEMBER_FN(UpdateNeck, void, 0x003606D0, BSFaceGenNiNode * faceNode);
// Computes RGB SkinTone from RGBA TintMask DEFINE_MEMBER_FN(SetSkinFromTint, void, 0x003771F0, NiColorA * result, TintMask * tintMask, bool fromTint); // Computes RGB SkinTone from RGBA TintMask
DEFINE_MEMBER_FN(SetSkinFromTint, void, 0x00360480, NiColorA * result, TintMask * tintMask, bool fromTint);
void SetFaceTexture(BGSTextureSet * textureSet); void SetFaceTexture(BGSTextureSet * textureSet);
void SetHairColor(BGSColorForm * hairColor); void SetHairColor(BGSColorForm * hairColor);
@ -1454,15 +1456,13 @@ public:
UInt32 pad0C; // 0C UInt32 pad0C; // 0C
}; };
Data40 data; // 40 Data40 data; // 40
TESModelTextureSwap models[2][2]; // 50 TESModelTextureSwap models[2][2]; // 50
UInt64 unk130; // 130 BGSTextureSet* skinTextures[2]; // 130 - NAM0 - NAM1
UInt64 unk138; // 138 BGSListForm* skinTextureSwapLists[2]; // 140 - NAM2 - NAM3
UInt64 unk140; // 140 tArray<TESRace*> additionalRaces; // 150
UInt64 unk148; // 148 BGSFootstepSet * footstepSet; // 168
tArray<TESRace*> additionalRaces; // 150 UInt64 unk170; // 170
BGSFootstepSet * footstepSet; // 168
UInt64 unk170; // 170
bool isValidRace(TESRace * race) const; bool isValidRace(TESRace * race) const;
void GetNodeName(char * dstBuff, TESObjectREFR * refr, TESObjectARMO * armor, float weightOverride); void GetNodeName(char * dstBuff, TESObjectREFR * refr, TESObjectARMO * armor, float weightOverride);

@ -2,7 +2,8 @@
#include "skse64_common/Relocation.h" #include "skse64_common/Relocation.h"
typedef void * (* _Runtime_DynamicCast_Internal)(void * srcObj, UInt32 arg1, const void * fromType, const void * toType, UInt32 arg4); typedef void * (* _Runtime_DynamicCast_Internal)(void * srcObj, UInt32 arg1, const void * fromType, const void * toType, UInt32 arg4);
RelocAddr <_Runtime_DynamicCast_Internal> Runtime_DynamicCast_Internal(0x0134BDB0); // __RTDynamicCast // 09ECDC875A847989BA08B9E8A23656EDFE1F380C+A8
RelocAddr <_Runtime_DynamicCast_Internal> Runtime_DynamicCast_Internal(0x0147854A); // __RTDynamicCast
void * Runtime_DynamicCast(void * srcObj, const void * fromType, const void * toType) void * Runtime_DynamicCast(void * srcObj, const void * fromType, const void * toType)
{ {

@ -4,8 +4,8 @@ void * Runtime_DynamicCast(void * srcObj, const void * fromType, const void * to
#define DYNAMIC_CAST(obj, from, to) ( ## to *) Runtime_DynamicCast((void*)(obj), RTTI_ ## from, RTTI_ ## to) #define DYNAMIC_CAST(obj, from, to) ( ## to *) Runtime_DynamicCast((void*)(obj), RTTI_ ## from, RTTI_ ## to)
extern const void * RTTI_BaseFormComponent;
extern const void * RTTI_IFormFactory; extern const void * RTTI_IFormFactory;
extern const void * RTTI_BaseFormComponent;
extern const void * RTTI_AlchemyItem; extern const void * RTTI_AlchemyItem;
extern const void * RTTI_BGSDualCastData; extern const void * RTTI_BGSDualCastData;
extern const void * RTTI_Setting; extern const void * RTTI_Setting;
@ -195,8 +195,8 @@ extern const void * RTTI_ExtraCellGrassData;
extern const void * RTTI_ExtraInteraction; extern const void * RTTI_ExtraInteraction;
extern const void * RTTI_ExtraGroupConstraint; extern const void * RTTI_ExtraGroupConstraint;
extern const void * RTTI_MultiBoundMarkerData; extern const void * RTTI_MultiBoundMarkerData;
extern const void * RTTI_BSStream;
extern const void * RTTI_INISettingCollection; extern const void * RTTI_INISettingCollection;
extern const void * RTTI_BSStream;
extern const void * RTTI_InterfacedClass; extern const void * RTTI_InterfacedClass;
extern const void * RTTI_BSTask; extern const void * RTTI_BSTask;
extern const void * RTTI_IOTask; extern const void * RTTI_IOTask;
@ -680,17 +680,17 @@ extern const void * RTTI_BGSAIWorldLocationPointRadius;
extern const void * RTTI_BGSAIWorldLocationInteriorCell; extern const void * RTTI_BGSAIWorldLocationInteriorCell;
extern const void * RTTI_BGSAttackDataMap; extern const void * RTTI_BGSAttackDataMap;
extern const void * RTTI_BGSAttackData; extern const void * RTTI_BGSAttackData;
extern const void * RTTI_IPackageDataAIWorldLocationHandle;
extern const void * RTTI_IAITarget; extern const void * RTTI_IAITarget;
extern const void * RTTI_IPackageData;
extern const void * RTTI_IAIWorldLocationHandle;
extern const void * RTTI_BGSPackageDataBool; extern const void * RTTI_BGSPackageDataBool;
extern const void * RTTI_BGSPackageDataFloat; extern const void * RTTI_BGSPackageDataFloat;
extern const void * RTTI_BGSPackageDataInt; extern const void * RTTI_BGSPackageDataInt;
extern const void * RTTI_BGSPackageDataRefOLD; extern const void * RTTI_BGSPackageDataRefOLD;
extern const void * RTTI_BGSPackageDataLocation; extern const void * RTTI_BGSPackageDataLocation;
extern const void * RTTI_BGSPackageDataLocationWrapper;
extern const void * RTTI_BGSPackageDataTargetSelector; extern const void * RTTI_BGSPackageDataTargetSelector;
extern const void * RTTI_IPackageDataAIWorldLocationHandle;
extern const void * RTTI_IPackageData;
extern const void * RTTI_IAIWorldLocationHandle;
extern const void * RTTI_BGSPackageDataLocationWrapper;
extern const void * RTTI_BGSPackageDataObjectList; extern const void * RTTI_BGSPackageDataObjectList;
extern const void * RTTI_ObjectListItem; extern const void * RTTI_ObjectListItem;
extern const void * RTTI_BGSPackageDataRef; extern const void * RTTI_BGSPackageDataRef;
@ -777,8 +777,8 @@ extern const void * RTTI_BGSProcedureWander;
extern const void * RTTI_BGSProcedureWanderExecState; extern const void * RTTI_BGSProcedureWanderExecState;
extern const void * RTTI_BGSVisitProceduresInitActorLocation; extern const void * RTTI_BGSVisitProceduresInitActorLocation;
extern const void * RTTI_BGSVisitProceduresCheckGuardWarnTarget; extern const void * RTTI_BGSVisitProceduresCheckGuardWarnTarget;
extern const void * RTTI_TESPackage;
extern const void * RTTI_PackageCreator; extern const void * RTTI_PackageCreator;
extern const void * RTTI_TESPackage;
extern const void * RTTI_DialoguePackage; extern const void * RTTI_DialoguePackage;
extern const void * RTTI_TESPackageData; extern const void * RTTI_TESPackageData;
extern const void * RTTI_TESAmbushPackageData; extern const void * RTTI_TESAmbushPackageData;
@ -795,8 +795,8 @@ extern const void * RTTI_ActorPackageData;
extern const void * RTTI_TESUseWeaponPackageData; extern const void * RTTI_TESUseWeaponPackageData;
extern const void * RTTI_UseWeaponActorPackageData; extern const void * RTTI_UseWeaponActorPackageData;
extern const void * RTTI_PackageLocation; extern const void * RTTI_PackageLocation;
extern const void * RTTI_BSTempEffect;
extern const void * RTTI_ITempEffectFactory; extern const void * RTTI_ITempEffectFactory;
extern const void * RTTI_BSTempEffect;
extern const void * RTTI_BSTempEffectDebris; extern const void * RTTI_BSTempEffectDebris;
extern const void * RTTI_BSTempEffectGeometryDecal; extern const void * RTTI_BSTempEffectGeometryDecal;
extern const void * RTTI_BGSParticleObjectCloneTask; extern const void * RTTI_BGSParticleObjectCloneTask;
@ -844,8 +844,8 @@ extern const void * RTTI_BSNavmeshSearchMaxCostFilters;
extern const void * RTTI_NavMeshSearchMultipleGoals; extern const void * RTTI_NavMeshSearchMultipleGoals;
extern const void * RTTI_NavMeshSearchSLPoint; extern const void * RTTI_NavMeshSearchSLPoint;
extern const void * RTTI_PathingRequestClosePoint; extern const void * RTTI_PathingRequestClosePoint;
extern const void * RTTI_PathingRequestClosestGoal;
extern const void * RTTI_IPathBuilderFactoryBase; extern const void * RTTI_IPathBuilderFactoryBase;
extern const void * RTTI_PathingRequestClosestGoal;
extern const void * RTTI_PathingRequestCover; extern const void * RTTI_PathingRequestCover;
extern const void * RTTI_PathingRequestFlee; extern const void * RTTI_PathingRequestFlee;
extern const void * RTTI_PathingRequestFly; extern const void * RTTI_PathingRequestFly;
@ -998,8 +998,8 @@ extern const void * RTTI_PeakValueModifierEffect;
extern const void * RTTI_ReanimateEffect; extern const void * RTTI_ReanimateEffect;
extern const void * RTTI_ReferenceEffect; extern const void * RTTI_ReferenceEffect;
extern const void * RTTI_WeaponEnchantmentController; extern const void * RTTI_WeaponEnchantmentController;
extern const void * RTTI_ScriptEffect;
extern const void * RTTI_ScriptedRefEffect; extern const void * RTTI_ScriptedRefEffect;
extern const void * RTTI_ScriptEffect;
extern const void * RTTI_BSParticleShaderObjectEmitter; extern const void * RTTI_BSParticleShaderObjectEmitter;
extern const void * RTTI_BSParticleShaderRayEmitter; extern const void * RTTI_BSParticleShaderRayEmitter;
extern const void * RTTI_BSParticleShaderCollisionEmitter; extern const void * RTTI_BSParticleShaderCollisionEmitter;
@ -1027,6 +1027,8 @@ extern const void * RTTI_WerewolfFeedEffect;
extern const void * RTTI_TESAudio__ScriptedMusicState; extern const void * RTTI_TESAudio__ScriptedMusicState;
extern const void * RTTI_BGSPlayerMusicChanger; extern const void * RTTI_BGSPlayerMusicChanger;
extern const void * RTTI_MenuTopicManager; extern const void * RTTI_MenuTopicManager;
extern const void * RTTI_BNETSystem__ModsChanged_ConfirmResetCallback;
extern const void * RTTI_DownloadAll__uiCallback;
extern const void * RTTI_JobListManager__ServingThread; extern const void * RTTI_JobListManager__ServingThread;
extern const void * RTTI_BGSSaveLoadManager; extern const void * RTTI_BGSSaveLoadManager;
extern const void * RTTI_bgs__saveload__SaveOperationRequest; extern const void * RTTI_bgs__saveload__SaveOperationRequest;
@ -1046,13 +1048,7 @@ extern const void * RTTI_IExplosionFactory;
extern const void * RTTI_ChainExplosion; extern const void * RTTI_ChainExplosion;
extern const void * RTTI_EnhanceWeaponEffect; extern const void * RTTI_EnhanceWeaponEffect;
extern const void * RTTI_GarbageCollector; extern const void * RTTI_GarbageCollector;
extern const void * RTTI_Main;
extern const void * RTTI_IMovementControllerNPCFunctor; extern const void * RTTI_IMovementControllerNPCFunctor;
extern const void * RTTI_bhkTelekinesisListener;
extern const void * RTTI_MagicFavorites;
extern const void * RTTI_BSTreeManager__IQueryCullingCamera;
extern const void * RTTI_RegSettingCollection;
extern const void * RTTI_BGSImpactManager;
extern const void * RTTI_MovementAvoidBoxEventAdapter; extern const void * RTTI_MovementAvoidBoxEventAdapter;
extern const void * RTTI_PathManagerPositionPlayerAdapter; extern const void * RTTI_PathManagerPositionPlayerAdapter;
extern const void * RTTI_CharacterCollisionMessagePlayerAdapter; extern const void * RTTI_CharacterCollisionMessagePlayerAdapter;
@ -1061,22 +1057,28 @@ extern const void * RTTI_PlayerSleepWaitMovementControllerAdapter__SwitchToLoade
extern const void * RTTI_PlayerSleepWaitMovementControllerAdapter__SwitchToUnloadedSetControllerFunctor; extern const void * RTTI_PlayerSleepWaitMovementControllerAdapter__SwitchToUnloadedSetControllerFunctor;
extern const void * RTTI_DoorObstacleAdapter; extern const void * RTTI_DoorObstacleAdapter;
extern const void * RTTI_SystemEventAdapter; extern const void * RTTI_SystemEventAdapter;
extern const void * RTTI_Main;
extern const void * RTTI_bhkTelekinesisListener;
extern const void * RTTI_MagicFavorites;
extern const void * RTTI_BSTreeManager__IQueryCullingCamera;
extern const void * RTTI_RegSettingCollection;
extern const void * RTTI_BGSImpactManager;
extern const void * RTTI_InitTESThread; extern const void * RTTI_InitTESThread;
extern const void * RTTI_DetectSignOut; extern const void * RTTI_DetectSignOut;
extern const void * RTTI_IMemoryManagerFile;
extern const void * RTTI_IMemoryManagerFileFactory; extern const void * RTTI_IMemoryManagerFileFactory;
extern const void * RTTI_IMemoryManagerFile;
extern const void * RTTI_MemoryManagerFile; extern const void * RTTI_MemoryManagerFile;
extern const void * RTTI_SceneGraph; extern const void * RTTI_SceneGraph;
extern const void * RTTI_SeenData; extern const void * RTTI_SeenData;
extern const void * RTTI_IntSeenData; extern const void * RTTI_IntSeenData;
extern const void * RTTI_SpawnHazardEffect; extern const void * RTTI_SpawnHazardEffect;
extern const void * RTTI_BSUIMessageData; extern const void * RTTI_BSUIMessageData;
extern const void * RTTI_hkpWorldPostSimulationListener;
extern const void * RTTI_IMovementState; extern const void * RTTI_IMovementState;
extern const void * RTTI_IPostAnimationChannelUpdateFunctor; extern const void * RTTI_IPostAnimationChannelUpdateFunctor;
extern const void * RTTI_IAnimationSetCallbackFunctor; extern const void * RTTI_IAnimationSetCallbackFunctor;
extern const void * RTTI_Actor; extern const void * RTTI_Actor;
extern const void * RTTI_PackageList__IPackageVisitor; extern const void * RTTI_PackageList__IPackageVisitor;
extern const void * RTTI_hkpWorldPostSimulationListener;
extern const void * RTTI_ProcessCallbackAdapter; extern const void * RTTI_ProcessCallbackAdapter;
extern const void * RTTI_SaveLoadMagicCasterVisitor; extern const void * RTTI_SaveLoadMagicCasterVisitor;
extern const void * RTTI_SaveGameMagicCasterVisitor; extern const void * RTTI_SaveGameMagicCasterVisitor;
@ -1117,8 +1119,8 @@ extern const void * RTTI_IMovementFormIDManager;
extern const void * RTTI_ProcessListMovementInterface; extern const void * RTTI_ProcessListMovementInterface;
extern const void * RTTI_RefrInteraction; extern const void * RTTI_RefrInteraction;
extern const void * RTTI_SyncQueueObj; extern const void * RTTI_SyncQueueObj;
extern const void * RTTI_ActorMover;
extern const void * RTTI_MovementParametersFixed; extern const void * RTTI_MovementParametersFixed;
extern const void * RTTI_ActorMover;
extern const void * RTTI_bhkCharacterCollisionHandler; extern const void * RTTI_bhkCharacterCollisionHandler;
extern const void * RTTI_CharacterCollisionHandler; extern const void * RTTI_CharacterCollisionHandler;
extern const void * RTTI_IMovementAvoidanceManager; extern const void * RTTI_IMovementAvoidanceManager;
@ -1301,12 +1303,12 @@ extern const void * RTTI_ProjectilePickCache;
extern const void * RTTI_HealthDamageFunctor; extern const void * RTTI_HealthDamageFunctor;
extern const void * RTTI_VATS__ICommandListVisitor; extern const void * RTTI_VATS__ICommandListVisitor;
extern const void * RTTI_CombatAimController; extern const void * RTTI_CombatAimController;
extern const void * RTTI_CombatObject;
extern const void * RTTI_CombatAimControllerBase;
extern const void * RTTI_CombatTrackTargetAimController; extern const void * RTTI_CombatTrackTargetAimController;
extern const void * RTTI_CombatMeleeAimController; extern const void * RTTI_CombatMeleeAimController;
extern const void * RTTI_CombatProjectileAimController; extern const void * RTTI_CombatProjectileAimController;
extern const void * RTTI_CombatDisableAimController; extern const void * RTTI_CombatDisableAimController;
extern const void * RTTI_CombatObject;
extern const void * RTTI_CombatAimControllerBase;
extern const void * RTTI_CombatArea; extern const void * RTTI_CombatArea;
extern const void * RTTI_CombatAreaRadius; extern const void * RTTI_CombatAreaRadius;
extern const void * RTTI_CombatAreaReference; extern const void * RTTI_CombatAreaReference;
@ -1327,13 +1329,10 @@ extern const void * RTTI_CombatInventoryItemShield;
extern const void * RTTI_CombatInventoryItemOneHandedBlock; extern const void * RTTI_CombatInventoryItemOneHandedBlock;
extern const void * RTTI_CombatInventoryItemTorch; extern const void * RTTI_CombatInventoryItemTorch;
extern const void * RTTI_CombatInventoryItemMagic; extern const void * RTTI_CombatInventoryItemMagic;
extern const void * RTTI_CombatMagicCaster;
extern const void * RTTI_CombatInventoryItemShout; extern const void * RTTI_CombatInventoryItemShout;
extern const void * RTTI_CombatInventoryItemStaff; extern const void * RTTI_CombatInventoryItemStaff;
extern const void * RTTI_CombatInventoryItemPotion; extern const void * RTTI_CombatInventoryItemPotion;
extern const void * RTTI_CombatInventoryItemScroll; extern const void * RTTI_CombatInventoryItemScroll;
extern const void * RTTI_CombatMagicItemData;
extern const void * RTTI_CombatMagicItemSkillChecker;
extern const void * RTTI_CombatMagicCasterOffensive; extern const void * RTTI_CombatMagicCasterOffensive;
extern const void * RTTI_CombatMagicCasterWard; extern const void * RTTI_CombatMagicCasterWard;
extern const void * RTTI_CombatMagicCasterRestore; extern const void * RTTI_CombatMagicCasterRestore;
@ -1346,9 +1345,12 @@ extern const void * RTTI_CombatMagicCasterInvisibility;
extern const void * RTTI_CombatMagicCasterBoundItem; extern const void * RTTI_CombatMagicCasterBoundItem;
extern const void * RTTI_CombatMagicCasterArmor; extern const void * RTTI_CombatMagicCasterArmor;
extern const void * RTTI_CombatMagicCasterTargetEffect; extern const void * RTTI_CombatMagicCasterTargetEffect;
extern const void * RTTI_CombatMagicCasterReanimate;
extern const void * RTTI_CombatMagicCasterParalyze; extern const void * RTTI_CombatMagicCasterParalyze;
extern const void * RTTI_CombatMagicCasterScript; extern const void * RTTI_CombatMagicCasterScript;
extern const void * RTTI_CombatMagicCaster;
extern const void * RTTI_CombatMagicItemData;
extern const void * RTTI_CombatMagicItemSkillChecker;
extern const void * RTTI_CombatMagicCasterReanimate;
extern const void * RTTI_CombatPathingRequest; extern const void * RTTI_CombatPathingRequest;
extern const void * RTTI_CombatTargetLocationSearchResult; extern const void * RTTI_CombatTargetLocationSearchResult;
extern const void * RTTI_CombatTargetLocation; extern const void * RTTI_CombatTargetLocation;
@ -1366,14 +1368,14 @@ extern const void * RTTI_CombatBehaviorTree;
extern const void * RTTI_CombatBehaviorTreeCombat; extern const void * RTTI_CombatBehaviorTreeCombat;
extern const void * RTTI_CombatBehaviorTreeNode; extern const void * RTTI_CombatBehaviorTreeNode;
extern const void * RTTI_CombatBehaviorTreeAcquireWeapon; extern const void * RTTI_CombatBehaviorTreeAcquireWeapon;
extern const void * RTTI_CombatBehaviorTreeWrapperNode;
extern const void * RTTI_CombatBehaviorTreeAction; extern const void * RTTI_CombatBehaviorTreeAction;
extern const void * RTTI_CombatBehaviorTreeActionEquipmentSelector; extern const void * RTTI_CombatBehaviorTreeActionEquipmentSelector;
extern const void * RTTI_CombatBehaviorTreeWrapperNode;
extern const void * RTTI_CombatBehaviorTreeDodgeThreat; extern const void * RTTI_CombatBehaviorTreeDodgeThreat;
extern const void * RTTI_CombatBehaviorTreeBlock; extern const void * RTTI_CombatBehaviorTreeBlock;
extern const void * RTTI_CombatBehaviorTreeCloseMovement;
extern const void * RTTI_CombatPathSpeedController; extern const void * RTTI_CombatPathSpeedController;
extern const void * RTTI_CombatApproachTargetSpeedController; extern const void * RTTI_CombatApproachTargetSpeedController;
extern const void * RTTI_CombatBehaviorTreeCloseMovement;
extern const void * RTTI_CombatBehaviorTreeFindAttackLocation; extern const void * RTTI_CombatBehaviorTreeFindAttackLocation;
extern const void * RTTI_CombatBehaviorTreeFlankingMovement; extern const void * RTTI_CombatBehaviorTreeFlankingMovement;
extern const void * RTTI_CombatFlankingSearchData; extern const void * RTTI_CombatFlankingSearchData;
@ -1400,10 +1402,10 @@ extern const void * RTTI_CombatNavmeshSearch;
extern const void * RTTI_CombatPathBuilder; extern const void * RTTI_CombatPathBuilder;
extern const void * RTTI_CombatPathBuilderStandard; extern const void * RTTI_CombatPathBuilderStandard;
extern const void * RTTI_CombatPathBuilderOpen; extern const void * RTTI_CombatPathBuilderOpen;
extern const void * RTTI_CombatPathingDebugData;
extern const void * RTTI_CombatPathingRequestStandard; extern const void * RTTI_CombatPathingRequestStandard;
extern const void * RTTI_CombatPathingRequestAdapter; extern const void * RTTI_CombatPathingRequestAdapter;
extern const void * RTTI_CombatPathingRequestMultiGoal; extern const void * RTTI_CombatPathingRequestMultiGoal;
extern const void * RTTI_CombatPathingDebugData;
extern const void * RTTI_HorseCameraState; extern const void * RTTI_HorseCameraState;
extern const void * RTTI_FirstPersonState; extern const void * RTTI_FirstPersonState;
extern const void * RTTI_PlayerCamera; extern const void * RTTI_PlayerCamera;
@ -1471,6 +1473,9 @@ extern const void * RTTI_LockpickingMenu;
extern const void * RTTI_MagicItemData; extern const void * RTTI_MagicItemData;
extern const void * RTTI_MagicMenu; extern const void * RTTI_MagicMenu;
extern const void * RTTI_MainMenu; extern const void * RTTI_MainMenu;
extern const void * RTTI_DLCPurchased__OpenVisitCreationClubCallback;
extern const void * RTTI_DLCPurchased__PurchasedDLCDialogCallback;
extern const void * RTTI_NeedToUpdateCreationClubCallback;
extern const void * RTTI_MenuControls; extern const void * RTTI_MenuControls;
extern const void * RTTI_ClickHandler; extern const void * RTTI_ClickHandler;
extern const void * RTTI_DirectionHandler; extern const void * RTTI_DirectionHandler;
@ -1981,11 +1986,11 @@ extern const void * RTTI_BShkbHkxDB__ProjectDBData;
extern const void * RTTI_BShkbHkxDB__DBData; extern const void * RTTI_BShkbHkxDB__DBData;
extern const void * RTTI_BShkbHkxDB__QueuedHandles; extern const void * RTTI_BShkbHkxDB__QueuedHandles;
extern const void * RTTI_BShkbHkxDB__StreamAdaptor; extern const void * RTTI_BShkbHkxDB__StreamAdaptor;
extern const void * RTTI_BSAnimationGraphLoadScrapper;
extern const void * RTTI_bhkIWorldStepListener;
extern const void * RTTI_hkaSkeleton; extern const void * RTTI_hkaSkeleton;
extern const void * RTTI_BSIRagdollDriver; extern const void * RTTI_BSIRagdollDriver;
extern const void * RTTI_BSAnimationGraphLoadScrapper;
extern const void * RTTI_BShkbAnimationGraph; extern const void * RTTI_BShkbAnimationGraph;
extern const void * RTTI_bhkIWorldStepListener;
extern const void * RTTI_BSISpeedSamplerDB; extern const void * RTTI_BSISpeedSamplerDB;
extern const void * RTTI_BSSpeedSamplerDBManager; extern const void * RTTI_BSSpeedSamplerDBManager;
extern const void * RTTI_BShkVisibilityController; extern const void * RTTI_BShkVisibilityController;
@ -2165,9 +2170,9 @@ extern const void * RTTI_BSXAudio2DataSrc;
extern const void * RTTI_ScrapHeap; extern const void * RTTI_ScrapHeap;
extern const void * RTTI_BSCoreMessage; extern const void * RTTI_BSCoreMessage;
extern const void * RTTI_BSThread; extern const void * RTTI_BSThread;
extern const void * RTTI_CompactingStore__Store;
extern const void * RTTI_CompactingStore__MoveCallback; extern const void * RTTI_CompactingStore__MoveCallback;
extern const void * RTTI_CompactingStore__NoopMoveCallback; extern const void * RTTI_CompactingStore__NoopMoveCallback;
extern const void * RTTI_CompactingStore__Store;
extern const void * RTTI_MemoryHeap; extern const void * RTTI_MemoryHeap;
extern const void * RTTI_UnitTestMemoryHeap; extern const void * RTTI_UnitTestMemoryHeap;
extern const void * RTTI_IMemoryHeap; extern const void * RTTI_IMemoryHeap;
@ -2291,20 +2296,22 @@ extern const void * RTTI_NiVectorExtraData;
extern const void * RTTI_BSLODTriShape; extern const void * RTTI_BSLODTriShape;
extern const void * RTTI_NiAdditionalGeometryData; extern const void * RTTI_NiAdditionalGeometryData;
extern const void * RTTI_BSSegmentedTriShape; extern const void * RTTI_BSSegmentedTriShape;
extern const void * RTTI_NiAccumulator;
extern const void * RTTI_NiBackToFrontAccumulator; extern const void * RTTI_NiBackToFrontAccumulator;
extern const void * RTTI_NiAccumulator;
extern const void * RTTI_NiTriBasedGeomData; extern const void * RTTI_NiTriBasedGeomData;
extern const void * RTTI_NiTriBasedGeom; extern const void * RTTI_NiTriBasedGeom;
extern const void * RTTI_NiPick__Results; extern const void * RTTI_NiPick__Results;
extern const void * RTTI_NiCollisionTraversals__IFindIntersections; extern const void * RTTI_NiCollisionTraversals__IFindIntersections;
extern const void * RTTI_NiCollisionData; extern const void * RTTI_NiCollisionData;
extern const void * RTTI_NiOBBRoot;
extern const void * RTTI_NiBoundingVolume; extern const void * RTTI_NiBoundingVolume;
extern const void * RTTI_NiBoxBV; extern const void * RTTI_NiBoxBV;
extern const void * RTTI_NiCapsuleBV; extern const void * RTTI_NiCapsuleBV;
extern const void * RTTI_NiHalfSpaceBV; extern const void * RTTI_NiHalfSpaceBV;
extern const void * RTTI_NiSphereBV; extern const void * RTTI_NiSphereBV;
extern const void * RTTI_NiUnionBV; extern const void * RTTI_NiUnionBV;
extern const void * RTTI_NiOBBRoot; extern const void * RTTI_NiOBBNode;
extern const void * RTTI_NiOBBLeaf;
extern const void * RTTI_NiIntersector; extern const void * RTTI_NiIntersector;
extern const void * RTTI_NiBoxSphereIntersector; extern const void * RTTI_NiBoxSphereIntersector;
extern const void * RTTI_NiBoxCapsuleIntersector; extern const void * RTTI_NiBoxCapsuleIntersector;
@ -2312,8 +2319,6 @@ extern const void * RTTI_NiCapsuleCapsuleIntersector;
extern const void * RTTI_NiCapsuleSphereIntersector; extern const void * RTTI_NiCapsuleSphereIntersector;
extern const void * RTTI_NiCapsuleTriIntersector; extern const void * RTTI_NiCapsuleTriIntersector;
extern const void * RTTI_NiSphereTriIntersector; extern const void * RTTI_NiSphereTriIntersector;
extern const void * RTTI_NiOBBNode;
extern const void * RTTI_NiOBBLeaf;
extern const void * RTTI_NiControllerManager; extern const void * RTTI_NiControllerManager;
extern const void * RTTI_NiControllerSequence; extern const void * RTTI_NiControllerSequence;
extern const void * RTTI_NiTextKeyMatch; extern const void * RTTI_NiTextKeyMatch;
@ -2517,13 +2522,13 @@ extern const void * RTTI_BSNonUniformScaleExtraData;
extern const void * RTTI_BSNiNode; extern const void * RTTI_BSNiNode;
extern const void * RTTI_BSTableCurve; extern const void * RTTI_BSTableCurve;
extern const void * RTTI_bhkWorldObject; extern const void * RTTI_bhkWorldObject;
extern const void * RTTI_bhkTaskletManagerCallback;
extern const void * RTTI_bhkOnStartupCallback;
extern const void * RTTI_bhkOnExitCallback;
extern const void * RTTI_ahkpWorld; extern const void * RTTI_ahkpWorld;
extern const void * RTTI_bhkWorld__bhkConstraintProjector; extern const void * RTTI_bhkWorld__bhkConstraintProjector;
extern const void * RTTI_bhkWorld; extern const void * RTTI_bhkWorld;
extern const void * RTTI_bhkWorldCinfo; extern const void * RTTI_bhkWorldCinfo;
extern const void * RTTI_bhkTaskletManagerCallback;
extern const void * RTTI_bhkOnStartupCallback;
extern const void * RTTI_bhkOnExitCallback;
extern const void * RTTI_hkGenericConstraintCinfo; extern const void * RTTI_hkGenericConstraintCinfo;
extern const void * RTTI_hkStiffSpringConstraintCinfo; extern const void * RTTI_hkStiffSpringConstraintCinfo;
extern const void * RTTI_bhkStiffSpringConstraint; extern const void * RTTI_bhkStiffSpringConstraint;
@ -2730,12 +2735,6 @@ extern const void * RTTI_hkKdTreeBuildInput__Mediator;
extern const void * RTTI_hkpCollidableMediator; extern const void * RTTI_hkpCollidableMediator;
extern const void * RTTI_hkKdTreeCpuBroadphaseBundleCastCollector; extern const void * RTTI_hkKdTreeCpuBroadphaseBundleCastCollector;
extern const void * RTTI_BSUIScaleformData; extern const void * RTTI_BSUIScaleformData;
extern const void * RTTI_GFile;
extern const void * RTTI_GMemoryFile;
extern const void * RTTI_GFxState;
extern const void * RTTI_GFxFileOpenerBase;
extern const void * RTTI_BSScaleformFileOpener;
extern const void * RTTI_ScaleformFile__MemoryFile;
extern const void * RTTI_IMenu; extern const void * RTTI_IMenu;
extern const void * RTTI_GSysAllocBase; extern const void * RTTI_GSysAllocBase;
extern const void * RTTI_GSysAllocPaged; extern const void * RTTI_GSysAllocPaged;
@ -2743,10 +2742,16 @@ extern const void * RTTI_GSysMemoryMap;
extern const void * RTTI_GFxLog; extern const void * RTTI_GFxLog;
extern const void * RTTI_GFxTranslator; extern const void * RTTI_GFxTranslator;
extern const void * RTTI_GFxZlibSupportBase; extern const void * RTTI_GFxZlibSupportBase;
extern const void * RTTI_GFxState;
extern const void * RTTI_GFxZlibSupport; extern const void * RTTI_GFxZlibSupport;
extern const void * RTTI_BSScaleformTranslator; extern const void * RTTI_BSScaleformTranslator;
extern const void * RTTI_BSStreamParserData; extern const void * RTTI_BSStreamParserData;
extern const void * RTTI_BSResourceStreamParser; extern const void * RTTI_BSResourceStreamParser;
extern const void * RTTI_GFile;
extern const void * RTTI_GMemoryFile;
extern const void * RTTI_GFxFileOpenerBase;
extern const void * RTTI_BSScaleformFileOpener;
extern const void * RTTI_ScaleformFile__MemoryFile;
extern const void * RTTI_IDebugText; extern const void * RTTI_IDebugText;
extern const void * RTTI_DebugText; extern const void * RTTI_DebugText;
extern const void * RTTI_GFxExternalInterface; extern const void * RTTI_GFxExternalInterface;
@ -2899,6 +2904,7 @@ extern const void * RTTI_BSPlatform__BSAsyncRequestBase;
extern const void * RTTI_bnet__EmptyTerminationCB; extern const void * RTTI_bnet__EmptyTerminationCB;
extern const void * RTTI_bnet__ExternalAuthInfo; extern const void * RTTI_bnet__ExternalAuthInfo;
extern const void * RTTI_bnet__SteamExternalAuthInfo; extern const void * RTTI_bnet__SteamExternalAuthInfo;
extern const void * RTTI_bnet__CustomData__Value;
extern const void * RTTI_BSPlatform__BSUploadRequest; extern const void * RTTI_BSPlatform__BSUploadRequest;
extern const void * RTTI_BSPlatform__BSDownloadRequest; extern const void * RTTI_BSPlatform__BSDownloadRequest;
extern const void * RTTI_bnet___impl__RefCount; extern const void * RTTI_bnet___impl__RefCount;
@ -2913,9 +2919,6 @@ extern const void * RTTI_bnet__ConfigurationEntryLong;
extern const void * RTTI_bnet__ConfigurationEntryString; extern const void * RTTI_bnet__ConfigurationEntryString;
extern const void * RTTI_bnet__IJobCollection; extern const void * RTTI_bnet__IJobCollection;
extern const void * RTTI_bnet___detail__Composite; extern const void * RTTI_bnet___detail__Composite;
extern const void * RTTI_std__exception;
extern const void * RTTI_std__bad_weak_ptr;
extern const void * RTTI_std___Ref_count_base;
extern const void * RTTI_bnet__IHeap; extern const void * RTTI_bnet__IHeap;
extern const void * RTTI_bnet__IHttpConnectionProvider; extern const void * RTTI_bnet__IHttpConnectionProvider;
extern const void * RTTI_bnet__Network; extern const void * RTTI_bnet__Network;
@ -2926,8 +2929,17 @@ extern const void * RTTI_bnet__JobProcessorCollection;
extern const void * RTTI_bnet___impl__AsyncOperation; extern const void * RTTI_bnet___impl__AsyncOperation;
extern const void * RTTI_bnet__SuspendFlow; extern const void * RTTI_bnet__SuspendFlow;
extern const void * RTTI_bnet__ResumeFlow; extern const void * RTTI_bnet__ResumeFlow;
extern const void * RTTI_bnet__CustomData__StringValue;
extern const void * RTTI_bnet__CustomData__BinaryValue;
extern const void * RTTI_bnet__CustomData__ObjectValue;
extern const void * RTTI_bnet__BaseHttpRequest; extern const void * RTTI_bnet__BaseHttpRequest;
extern const void * RTTI_bnet__LogoutFlow; extern const void * RTTI_bnet__LogoutFlow;
extern const void * RTTI_std__exception;
extern const void * RTTI_std__bad_weak_ptr;
extern const void * RTTI_bnet__Notification__UserData__ReconnectJob;
extern const void * RTTI_bnet__Notification__UserData__OnSystemIdFetchedRegister;
extern const void * RTTI_bnet__Notification__UserWebSocket__OnSystemIdFetchedSend;
extern const void * RTTI_bnet__Notification__UserWebSocket__OnConnected;
extern const void * RTTI_bnet__IUgcUploader; extern const void * RTTI_bnet__IUgcUploader;
extern const void * RTTI_bnet__ChunkedUploadFlow; extern const void * RTTI_bnet__ChunkedUploadFlow;
extern const void * RTTI_bnet__IDownloader; extern const void * RTTI_bnet__IDownloader;
@ -2984,6 +2996,7 @@ extern const void * RTTI_bnet__UsernameValidationRequest;
extern const void * RTTI_bnet__VerifyFingerprintRequest; extern const void * RTTI_bnet__VerifyFingerprintRequest;
extern const void * RTTI_bnet__VerifyLinkRequest; extern const void * RTTI_bnet__VerifyLinkRequest;
extern const void * RTTI_bnet__TwitchAccountInfoRequest; extern const void * RTTI_bnet__TwitchAccountInfoRequest;
extern const void * RTTI_bnet__CheckDisplayNameRequest;
extern const void * RTTI_bnet__CheckEmailRequest; extern const void * RTTI_bnet__CheckEmailRequest;
extern const void * RTTI_bnet__RecoverPasswordRequest; extern const void * RTTI_bnet__RecoverPasswordRequest;
extern const void * RTTI_bnet__RecoverUsernameRequest; extern const void * RTTI_bnet__RecoverUsernameRequest;
@ -3002,19 +3015,46 @@ extern const void * RTTI_bnet__GameAccountExternalLinkFlow;
extern const void * RTTI_bnet__GameAccountGameCodeAuthenticationFlow; extern const void * RTTI_bnet__GameAccountGameCodeAuthenticationFlow;
extern const void * RTTI_bnet__SessionResumeFlow; extern const void * RTTI_bnet__SessionResumeFlow;
extern const void * RTTI_bnet__NewGameSessionFlow; extern const void * RTTI_bnet__NewGameSessionFlow;
extern const void * RTTI_bnet__Entitlements__CombinedEntitlementsListRequest;
extern const void * RTTI_bnet__Entitlements__ListRequest; extern const void * RTTI_bnet__Entitlements__ListRequest;
extern const void * RTTI_bnet__Entitlements__ConsumeRequest; extern const void * RTTI_bnet__Entitlements__ConsumeRequest;
extern const void * RTTI_bnet__Entitlements__SearchRequest; extern const void * RTTI_bnet__Entitlements__SearchRequest;
extern const void * RTTI_bnet__VCCS__MTX__Generic__GetCatalogRequest;
extern const void * RTTI_bnet__VCCS__MTX__Generic__PurchaseRequest;
extern const void * RTTI_bnet__VCCS__MTX__Generic__GetStoreURLRequest;
extern const void * RTTI_bnet__Gsp__Profile__DataAttachmentRequestBase;
extern const void * RTTI_bnet__Gsp__Profile__DataAttachmentCreateRequest;
extern const void * RTTI_bnet__Gsp__Profile__DataAttachmentDeleteRequest;
extern const void * RTTI_bnet__Gsp__Profile__DataAttachmentGetRequest;
extern const void * RTTI_bnet__Gsp__Profile__DataAttachmentListRequest;
extern const void * RTTI_bnet__Gsp__Profile__DataAttachmentUpdateRequest;
extern const void * RTTI_bnet__Gsp__Profile__ProfileGetRequest;
extern const void * RTTI_bnet__Gsp__Profile__ProfileUpdateRequest;
extern const void * RTTI_bnet__EventLog__LogEventRequest; extern const void * RTTI_bnet__EventLog__LogEventRequest;
extern const void * RTTI_bnet__VCCS__Wallet__BalanceRequest; extern const void * RTTI_bnet__VCCS__Wallet__BalanceRequest;
extern const void * RTTI_bnet__VCCS__Wallet__BalanceListRequest;
extern const void * RTTI_bnet__VCCS__Wallet__PurchaseRequest; extern const void * RTTI_bnet__VCCS__Wallet__PurchaseRequest;
extern const void * RTTI_bnet__VCCS__Wallet__PurchasePreviewRequest;
extern const void * RTTI_bnet__VCCS__Wallet__ServerlessCreditRequest;
extern const void * RTTI_bnet__VCCS__Wallet__ServerlessDebitRequest;
extern const void * RTTI_bnet__UgcMtxPurchaseFlow; extern const void * RTTI_bnet__UgcMtxPurchaseFlow;
extern const void * RTTI_bnet__VCCS__Fulfillment__UpdateFirstPartyEntitlementRequest; extern const void * RTTI_bnet__VCCS__Fulfillment__UpdateFirstPartyEntitlementRequest;
extern const void * RTTI_bnet__VCCS__Catalog__GetContentsRequest;
extern const void * RTTI_bnet__VCCS__Catalog__GetItemRequest; extern const void * RTTI_bnet__VCCS__Catalog__GetItemRequest;
extern const void * RTTI_bnet__VCCS__Catalog__ListCategoryPathRequest;
extern const void * RTTI_bnet__VCCS__Catalog__ListCategoryPathChildrenRequest;
extern const void * RTTI_bnet__VCCS__Catalog__ListItemsRequest; extern const void * RTTI_bnet__VCCS__Catalog__ListItemsRequest;
extern const void * RTTI_bnet__VCCS__Catalog__GetBundlePreviewRequest;
extern const void * RTTI_bnet__VCCS__Catalog__GetBundlePreviewListRequest;
extern const void * RTTI_bnet__CMS__ListMessagesRequest; extern const void * RTTI_bnet__CMS__ListMessagesRequest;
extern const void * RTTI_bnet__CMS__GetMultiMessageRequest;
extern const void * RTTI_bnet__Status__GetExtServerStatusRequest; extern const void * RTTI_bnet__Status__GetExtServerStatusRequest;
extern const void * RTTI_bnet__Status__GetStatusRequest;
extern const void * RTTI_bnet__SessionLogoutRequest; extern const void * RTTI_bnet__SessionLogoutRequest;
extern const void * RTTI_bnet__NotificationLogoutRequest;
extern const void * RTTI_bnet__Notification__Context__OnSystemFetched;
extern const void * RTTI_bnet__Notification__ReceiveJob;
extern const void * RTTI_bnet__Notification__FilterJob;
extern const void * RTTI_bnet__UgcCancelUploadRequest; extern const void * RTTI_bnet__UgcCancelUploadRequest;
extern const void * RTTI_bnet__UgcChunkedUploadCompletionRequest; extern const void * RTTI_bnet__UgcChunkedUploadCompletionRequest;
extern const void * RTTI_bnet__UgcChunkedUploadInitiationRequest; extern const void * RTTI_bnet__UgcChunkedUploadInitiationRequest;
@ -3047,10 +3087,37 @@ extern const void * RTTI_bnet__GameAccountAuthenticationRequest;
extern const void * RTTI_bnet__GameAccountExternalAuthRequest; extern const void * RTTI_bnet__GameAccountExternalAuthRequest;
extern const void * RTTI_bnet__GameAccountExternalLinkRequest; extern const void * RTTI_bnet__GameAccountExternalLinkRequest;
extern const void * RTTI_bnet__Session__GameAccountGameCodeAuthRequest; extern const void * RTTI_bnet__Session__GameAccountGameCodeAuthRequest;
extern const void * RTTI_bnet__SharedSRWMutex;
extern const void * RTTI_bnet__WebSocketUtils__WebSocketJob;
extern const void * RTTI_bnet__ISocket;
extern const void * RTTI_bnet__CSocket;
extern const void * RTTI_bnet__CSecureSocket;
extern const void * RTTI_bnet__WebSocketUtils__WebSocketJob__InitJob;
extern const void * RTTI_bnet__WebSocketUtils__WebSocketJob__InitJob__SocketInitJob;
extern const void * RTTI_bnet__WebSocketUtils__WebSocketJob__InitJob__SendHandshakeJob;
extern const void * RTTI_bnet__WebSocketUtils__WebSocketJob__InitJob__ReceiveHandshakeJob;
extern const void * RTTI_bnet__WebSocketUtils__WebSocketJob__IWriteJobSequence;
extern const void * RTTI_bnet__WebSocketUtils__WebSocketJob__WriteJobSequence;
extern const void * RTTI_bnet__WebSocketUtils__WebSocketJob__WriteJobSequence__WriteJob;
extern const void * RTTI_bnet__WebSocketUtils__WebSocketJob__ReadJob;
extern const void * RTTI_bnet__Notification__ListSystemRequest;
extern const void * RTTI_bnet__Notification__ChangeFilterRequest;
extern const void * RTTI_bnet__Presence__AppearDoNotDisturbRequest;
extern const void * RTTI_bnet__Presence__AppearOfflineRequest;
extern const void * RTTI_bnet__Presence__GetRequest;
extern const void * RTTI_bnet__Presence__UpdateRequest;
extern const void * RTTI_bnet__SessionTokenRequest; extern const void * RTTI_bnet__SessionTokenRequest;
extern const void * RTTI_bnet__NotificationConnectRequest;
extern const void * RTTI_bnet__SessionAccessTokenRequest;
extern const void * RTTI_bnet__CdpAuthenticationRequest; extern const void * RTTI_bnet__CdpAuthenticationRequest;
extern const void * RTTI_bnet__SessionResumeTokenRequest; extern const void * RTTI_bnet__SessionResumeTokenRequest;
extern const void * RTTI_bnet__BeamAuthenticationRequest; extern const void * RTTI_bnet__BeamAuthenticationRequest;
extern const void * RTTI_bnet__SecureSocket__pImpl__SecureSocketJob;
extern const void * RTTI_bnet__SecureSocket__pImpl__SecureSocketJob__HandshakeJob;
extern const void * RTTI_bnet__SecureSocket__pImpl__SecureSocketJob__InitializeJob;
extern const void * RTTI_bnet__SecureSocket__pImpl__SecureSocketJob__WriteJob;
extern const void * RTTI_bnet__SecureSocket__pImpl__SecureSocketJob__ReceiveJob;
extern const void * RTTI_bnet__SecureSocket__pImpl__SecureSocketJob__ReceiveJob__DecodeJob;
extern const void * RTTI_BSScript__IFindBoundObjectFunctor; extern const void * RTTI_BSScript__IFindBoundObjectFunctor;
extern const void * RTTI_BSScript__IVMObjectBindInterface; extern const void * RTTI_BSScript__IVMObjectBindInterface;
extern const void * RTTI_BSScript__IVMSaveLoadInterface; extern const void * RTTI_BSScript__IVMSaveLoadInterface;
@ -3275,8 +3342,8 @@ extern const void * RTTI_BSDiskConstructor;
extern const void * RTTI_BSMultiIndexTriShape; extern const void * RTTI_BSMultiIndexTriShape;
extern const void * RTTI_BSShaderMaterial; extern const void * RTTI_BSShaderMaterial;
extern const void * RTTI_BSLight; extern const void * RTTI_BSLight;
extern const void * RTTI_NiBoneMatrixSetterI;
extern const void * RTTI_BSShader; extern const void * RTTI_BSShader;
extern const void * RTTI_NiBoneMatrixSetterI;
extern const void * RTTI_BSReloadShaderI; extern const void * RTTI_BSReloadShaderI;
extern const void * RTTI_BSParticleShader; extern const void * RTTI_BSParticleShader;
extern const void * RTTI_BSLightingShaderPropertyFloatController; extern const void * RTTI_BSLightingShaderPropertyFloatController;
@ -3288,8 +3355,8 @@ extern const void * RTTI_BSNiAlphaPropertyTestRefController;
extern const void * RTTI_BSPSysSimpleColorModifier; extern const void * RTTI_BSPSysSimpleColorModifier;
extern const void * RTTI_BSPSysLODModifier; extern const void * RTTI_BSPSysLODModifier;
extern const void * RTTI_BSShadowDirectionalLight; extern const void * RTTI_BSShadowDirectionalLight;
extern const void * RTTI_IRendererResourceManager;
extern const void * RTTI_BSShaderResourceManager; extern const void * RTTI_BSShaderResourceManager;
extern const void * RTTI_IRendererResourceManager;
extern const void * RTTI_ImageSpaceEffectGetHit; extern const void * RTTI_ImageSpaceEffectGetHit;
extern const void * RTTI_ImageSpaceEffectBlur; extern const void * RTTI_ImageSpaceEffectBlur;
extern const void * RTTI_ImageSpaceEffectFullScreenBlur; extern const void * RTTI_ImageSpaceEffectFullScreenBlur;
@ -3316,9 +3383,10 @@ extern const void * RTTI_CCallbackBase;
extern const void * RTTI_BSWin32SystemUtility; extern const void * RTTI_BSWin32SystemUtility;
extern const void * RTTI_BSCacheDriveSystemUtility; extern const void * RTTI_BSCacheDriveSystemUtility;
extern const void * RTTI_BSSysInfoSystemUtility; extern const void * RTTI_BSSysInfoSystemUtility;
extern const void * RTTI_BSMsgDialogSystemUtility; extern const void * RTTI_BSWin32GameDataSystemUtility;
extern const void * RTTI_BSAwardsSystemUtility; extern const void * RTTI_BSAwardsSystemUtility;
extern const void * RTTI_BSWin32AwardsSystemUtility; extern const void * RTTI_BSWin32AwardsSystemUtility;
extern const void * RTTI_BSMsgDialogSystemUtility;
extern const void * RTTI_BSDiscBootSystemUtility; extern const void * RTTI_BSDiscBootSystemUtility;
extern const void * RTTI_type_info; extern const void * RTTI_type_info;
extern const void * RTTI_BSSocket; extern const void * RTTI_BSSocket;

File diff suppressed because it is too large Load Diff

@ -6,19 +6,19 @@
#include "skse64/GameData.h" #include "skse64/GameData.h"
#include "skse64/NiNodes.h" #include "skse64/NiNodes.h"
// 123ED1FD37DCAF9CBB5808F1DFB2B9B4E6D678DC+67 // 9993FF829D7004AAE73399E0559CC28B110D4A91+C2
RelocAddr<_CreateRefHandleByREFR> CreateRefHandleByREFR(0x001320F0); RelocAddr<_CreateRefHandleByREFR> CreateRefHandleByREFR(0x00138A70);
// D479D10F77326C177B3D5AE2C5738B0D39A1546A+5F // 526D2C6164B5B723ABF2D3B5BF05D3E20C270AA8+2C
RelocAddr<_LookupREFRByHandle> LookupREFRByHandle(0x001328A0); RelocAddr<_LookupREFRByHandle> LookupREFRByHandle(0x00139010);
// B995A21984B048C2B4F61777E615FFFB2806F9B7+8C // AF5D1D698E25CFB06197DD5322B6F15A13ABF0B3+4D
RelocAddr<_LookupREFRObjectByHandle> LookupREFRObjectByHandle(0x001329D0); RelocAddr<_LookupREFRObjectByHandle> LookupREFRObjectByHandle(0x00139130);
// 123ED1FD37DCAF9CBB5808F1DFB2B9B4E6D678DC+4D // AF5D1D698E25CFB06197DD5322B6F15A13ABF0B3+30
RelocPtr<UInt32> g_invalidRefHandle(0x01EBEABC); RelocPtr<UInt32> g_invalidRefHandle(0x01F5A43C);
RelocAddr<_MoveRefrToPosition> MoveRefrToPosition(0x009AE5C0); RelocAddr<_MoveRefrToPosition> MoveRefrToPosition(0x009D4240);
RelocAddr<_PlaceAtMe_Native> PlaceAtMe_Native(0x009951F0); RelocAddr<_PlaceAtMe_Native> PlaceAtMe_Native(0x009BE1B0);
RelocAddr<_AddItem_Native> AddItem_Native(0x00993100); RelocAddr<_AddItem_Native> AddItem_Native(0x009BC030);
UInt32 GetOrCreateRefrHandle(TESObjectREFR* ref) UInt32 GetOrCreateRefrHandle(TESObjectREFR* ref)
{ {
@ -166,7 +166,8 @@ bool Actor::VisitFactions(FactionVisitor & visitor)
return false; return false;
} }
RelocPtr<CrosshairRefHandleHolder*> g_crosshairRefHandleHolder(0x02F011D0); // 7C86FE404A52BB28611337DE8714FD037A8B834B+17
RelocPtr<CrosshairRefHandleHolder*> g_crosshairRefHandleHolder(0x02F9CA70);
CrosshairRefHandleHolder * CrosshairRefHandleHolder::GetSingleton(void) CrosshairRefHandleHolder * CrosshairRefHandleHolder::GetSingleton(void)
{ {

@ -124,6 +124,8 @@ public:
enum enum
{ {
kFlag_Harvested = 0x2000, kFlag_Harvested = 0x2000,
kChange_IsEmpty = 0x00200000,
}; };
// currently none of these have been analyzed // currently none of these have been analyzed
@ -259,12 +261,12 @@ public:
void DecRef(); void DecRef();
MEMBER_FN_PREFIX(TESObjectREFR); MEMBER_FN_PREFIX(TESObjectREFR);
DEFINE_MEMBER_FN(GetBaseScale, float, 0x0028CC60); DEFINE_MEMBER_FN(GetBaseScale, float, 0x0029EE80);
DEFINE_MEMBER_FN(IsOffLimits, bool, 0x0029A330); DEFINE_MEMBER_FN(IsOffLimits, bool, 0x002AC940);
// E2B825B476DC5CFBC69E194AA76CB0C049AC78E3+137 // 9C5031E1D6707680E2D9E4A717A225C1137FED59+145
DEFINE_MEMBER_FN(GetWeight, float, 0x002A6FF0); DEFINE_MEMBER_FN(GetWeight, float, 0x002B8D40);
DEFINE_MEMBER_FN(GetReferenceName, const char *, 0x002961F0); DEFINE_MEMBER_FN(GetReferenceName, const char *, 0x002A8800);
DEFINE_MEMBER_FN(GetWorldspace, TESWorldSpace*, 0x00299750); DEFINE_MEMBER_FN(GetWorldspace, TESWorldSpace*, 0x002ABD30);
}; };
STATIC_ASSERT(sizeof(TESObjectREFR) == 0x98); STATIC_ASSERT(sizeof(TESObjectREFR) == 0x98);
@ -550,14 +552,15 @@ public:
UInt64 unk2A8; // 2A8 UInt64 unk2A8; // 2A8
MEMBER_FN_PREFIX(Actor); MEMBER_FN_PREFIX(Actor);
DEFINE_MEMBER_FN(QueueNiNodeUpdate, void, 0x00693110, bool updateWeight); DEFINE_MEMBER_FN(QueueNiNodeUpdate, void, 0x006BBB70, bool updateWeight);
DEFINE_MEMBER_FN(HasPerk, bool, 0x005F9E30, BGSPerk * perk); // CC3C9D131FFDF35E82C6D7182C4F9E42A3ED1EF2+28
DEFINE_MEMBER_FN(GetLevel, UInt16, 0x005D62E0); DEFINE_MEMBER_FN(HasPerk, bool, 0x00621AA0, BGSPerk * perk);
DEFINE_MEMBER_FN(SetRace, void, 0x00607680, TESRace*, bool isPlayer); DEFINE_MEMBER_FN(GetLevel, UInt16, 0x005FB9B0);
DEFINE_MEMBER_FN(UpdateWeaponAbility, void, 0x006313D0, TESForm*, BaseExtraList * extraData, bool bLeftHand); DEFINE_MEMBER_FN(SetRace, void, 0x0062FAA0, TESRace*, bool isPlayer);
DEFINE_MEMBER_FN(UpdateArmorAbility, void, 0x00631360, TESForm*, BaseExtraList * extraData); DEFINE_MEMBER_FN(UpdateWeaponAbility, void, 0x00658070, TESForm*, BaseExtraList * extraData, bool bLeftHand);
DEFINE_MEMBER_FN(IsHostileToActor, bool, 0x005E7E40, Actor * actor); DEFINE_MEMBER_FN(UpdateArmorAbility, void, 0x00658000, TESForm*, BaseExtraList * extraData);
DEFINE_MEMBER_FN(ResetAI, void, 0x005DB310, UInt32 unk1, UInt32 unk2); DEFINE_MEMBER_FN(IsHostileToActor, bool, 0x0060EBC0, Actor * actor);
DEFINE_MEMBER_FN(ResetAI, void, 0x006019A0, UInt32 unk1, UInt32 unk2);
TESForm * GetEquippedObject(bool abLeftHand); TESForm * GetEquippedObject(bool abLeftHand);
void UpdateSkinColor(); void UpdateSkinColor();
@ -897,10 +900,10 @@ public:
} }
MEMBER_FN_PREFIX(PlayerCharacter); MEMBER_FN_PREFIX(PlayerCharacter);
DEFINE_MEMBER_FN(GetNumTints, UInt32, 0x006B5450, UInt32 tintType); DEFINE_MEMBER_FN(GetNumTints, UInt32, 0x006DEF60, UInt32 tintType);
DEFINE_MEMBER_FN(GetTintMask, TintMask *, 0x006B52A0, UInt32 tintType, UInt32 index); DEFINE_MEMBER_FN(GetTintMask, TintMask *, 0x006DEDB0, UInt32 tintType, UInt32 index);
DEFINE_MEMBER_FN(GetDamage, float, 0x00693050, InventoryEntryData * pForm); DEFINE_MEMBER_FN(GetDamage, float, 0x006BBAB0, InventoryEntryData * pForm);
DEFINE_MEMBER_FN(GetArmorValue, float, 0x00692CD0, InventoryEntryData * pForm); DEFINE_MEMBER_FN(GetArmorValue, float, 0x006BB740, InventoryEntryData * pForm);
}; };
STATIC_ASSERT(offsetof(PlayerCharacter, userEventEnabledEvent) == 0x2C0); STATIC_ASSERT(offsetof(PlayerCharacter, userEventEnabledEvent) == 0x2C0);

@ -2,14 +2,14 @@
FaceGenTriDatabase * FaceGenTriDatabase::GetSingleton(void) FaceGenTriDatabase * FaceGenTriDatabase::GetSingleton(void)
{ {
// 515F6D3421B9B5634E8CFA419159BB297C282A3B+3E // 9FA4657D28964C48501C6FF2E9E8E52D86D2BDEF+3E
static RelocPtr<FaceGenTriDatabase*> g_FaceGenTriDatabase(0x02F017E8); static RelocPtr<FaceGenTriDatabase*> g_FaceGenTriDatabase(0x02F9D080);
return *g_FaceGenTriDatabase; return *g_FaceGenTriDatabase;
} }
BSFaceGenDB::TRI::DBTraits::Data * FaceGenTriDatabase::GetInvalidEntry(void) BSFaceGenDB::TRI::DBTraits::Data * FaceGenTriDatabase::GetInvalidEntry(void)
{ {
// 836BA46E0B9EB46A38D8BAD8A4A7D14584D61BB0+8E // CD3B953DD742EFE4CEFC4ECA602FC9F442434777+A2
static RelocPtr<BSFaceGenDB::TRI::DBTraits::Data> g_FaceGenTriDatabase(0x01DEA01C); static RelocPtr<BSFaceGenDB::TRI::DBTraits::Data> g_FaceGenTriDatabase_InvalidEntry(0x01E82A40);
return g_FaceGenTriDatabase.GetPtr(); return g_FaceGenTriDatabase_InvalidEntry.GetPtr();
} }

@ -1,18 +1,18 @@
#include "GameSettings.h" #include "GameSettings.h"
#include "GameAPI.h" #include "GameAPI.h"
// 298D0E3E3DDD7D2333475E0B20F931E2ED6A0355+5A // 91546BBAE6D61CD8C6D2021DD28BEB01C32E7178+30
RelocPtr<SettingCollectionList*> g_iniSettingCollection(0x0301D758); RelocPtr<SettingCollectionList*> g_iniSettingCollection(0x030B9558);
// 5C8EA66C14C47204F60C72DE345DC6B22BB929B4+52 // see ??_7INIPrefSettingCollection@@6B@
RelocPtr<SettingCollectionList*> g_iniPrefSettingCollection(0x02F6BA48); RelocPtr<SettingCollectionList*> g_iniPrefSettingCollection(0x03007810);
// FE086A335E2EB844894F7D900623A149B381723F+6B // CC0A0629D6A4756EA7CC1819A40AE77FB941F585+14
RelocPtr<SettingCollectionMap*> g_gameSettingCollection(0x02EC58B0); RelocPtr<SettingCollectionMap*> g_gameSettingCollection(0x02F61180);
// ### we can just look these up // ### we can just look these up
// D1E741E48E0181F5A2371C8E8BD02C1F0810BADF+0 // D1E741E48E0181F5A2371C8E8BD02C1F0810BADF+0
RelocPtr<float> g_mapLocalHeight(0x01DB3ED8); // fMapLocalHeight:MapMenu RelocPtr<float> g_mapLocalHeight(0x01E48F48); // fMapLocalHeight:MapMenu
// C7928A7F7ACB94729DA4D4011E03D5ADC79160F3+186 // 2267F2663E2F5F55835C7541D7851DF11A53F787+1A2
RelocPtr<float> g_localMapMinFrustumWidth(0x01DF5430); RelocPtr<float> g_localMapMinFrustumWidth(0x01E8A880);
UInt32 Setting::GetType(void) const UInt32 Setting::GetType(void) const
{ {

@ -59,7 +59,7 @@ public:
Entry items; // 118 Entry items; // 118
MEMBER_FN_PREFIX(SettingCollectionList); MEMBER_FN_PREFIX(SettingCollectionList);
DEFINE_MEMBER_FN(Get_Internal, Setting *, 0x003104D0, const char * name); DEFINE_MEMBER_FN(Get_Internal, Setting *, 0x00325220, const char * name);
Setting * Get(const char * name); Setting * Get(const char * name);
}; };

@ -40,14 +40,14 @@ public:
virtual void FunctionSwap(bool swap); virtual void FunctionSwap(bool swap);
MEMBER_FN_PREFIX(NiMemStream); MEMBER_FN_PREFIX(NiMemStream);
DEFINE_MEMBER_FN(Construct, NiMemStream *, 0x013120B0); DEFINE_MEMBER_FN(Construct, NiMemStream *, 0x0143AA70);
DEFINE_MEMBER_FN(Destroy, void, 0x01312120); DEFINE_MEMBER_FN(Destroy, void, 0x0143AAE0);
DEFINE_MEMBER_FN(Seek, void, 0x013121B0, SInt32); DEFINE_MEMBER_FN(Seek, void, 0x0143AB70, SInt32);
// ??_7NiMemStream@@6B@ + 18 // ??_7NiMemStream@@6B@ + 18
DEFINE_MEMBER_FN(GetOffset, UInt32, 0x00C25660, void); DEFINE_MEMBER_FN(GetOffset, UInt32, 0x00C4BEF0, void);
DEFINE_MEMBER_FN(CopyFrom, UInt32, 0x01312180, void *); DEFINE_MEMBER_FN(CopyFrom, UInt32, 0x0143AB40, void *);
// ??_7NiMemStream@@6B@ + 28 // ??_7NiMemStream@@6B@ + 28
DEFINE_MEMBER_FN(FunctionSwap, UInt32, 0x013121F0, bool); DEFINE_MEMBER_FN(FunctionSwap, UInt32, 0x0143ABB0, bool);
void * data; // 20 void * data; // 20
UInt32 offset; // 28 UInt32 offset; // 28
@ -77,24 +77,21 @@ public:
UInt64 offset; // 30 UInt64 offset; // 30
MEMBER_FN_PREFIX(BSResourceNiBinaryStream); MEMBER_FN_PREFIX(BSResourceNiBinaryStream);
DEFINE_MEMBER_FN(Construct, BSResourceNiBinaryStream *, 0x00C76060, const char * filePath, UInt32 unk1, UInt32 unk2); // unk1 = 0, unk2 = 0 DEFINE_MEMBER_FN(Construct, BSResourceNiBinaryStream *, 0x00C9F5C0, const char * filePath, UInt32 unk1, UInt32 unk2); // unk1 = 0, unk2 = 0
DEFINE_MEMBER_FN(ReadLine, UInt32, 0x00C765C0, char * dst, UInt32 dstLen, UInt32 terminator); DEFINE_MEMBER_FN(ReadLine, UInt32, 0x00C9FB00, char * dst, UInt32 dstLen, UInt32 terminator);
// SE note: it looks like the Read and Write function got inlined?
// Anyway, the readFn and writeFn assigned in ctor are equivalent (in Skyrim32 one just calls the other)
// readFn(object, dst, len) -> object.Read(dst, len), in x64, the parameters match.
// E93F9EA10EEEC2FC86D868E75F28A023D7453255+51 // E93F9EA10EEEC2FC86D868E75F28A023D7453255+51
DEFINE_MEMBER_FN(Read, UInt32, 0x00C767B0, void * dst, UInt32 len); DEFINE_MEMBER_FN(Read, UInt32, 0x00C9FCF0, void * dst, UInt32 len);
// E93F9EA10EEEC2FC86D868E75F28A023D7453255+5C // E93F9EA10EEEC2FC86D868E75F28A023D7453255+5C
DEFINE_MEMBER_FN(Write, UInt32, 0x00C76820, void * src, UInt32 len); DEFINE_MEMBER_FN(Write, UInt32, 0x00C9FD60, void * src, UInt32 len);
DEFINE_MEMBER_FN(Destroy, void, 0x00C76340); DEFINE_MEMBER_FN(Destroy, void, 0x00C9F8A0);
DEFINE_MEMBER_FN(IsValid, bool, 0x00C76480, void); DEFINE_MEMBER_FN(IsValid, bool, 0x00C9F9E0, void);
DEFINE_MEMBER_FN(Seek, void, 0x00C76490, SInt32); DEFINE_MEMBER_FN(Seek, void, 0x00C9F9F0, SInt32);
// ??_7BSResourceNiBinaryStream@@6B@ + 18 // ??_7BSResourceNiBinaryStream@@6B@ + 18
DEFINE_MEMBER_FN(GetOffset, UInt32, 0x00C764E0, void); // return offset; DEFINE_MEMBER_FN(GetOffset, UInt32, 0x00C9FA30, void); // return offset;
// ??_7BSResourceNiBinaryStream@@6B@ + 28 // ??_7BSResourceNiBinaryStream@@6B@ + 28
DEFINE_MEMBER_FN(EnableEndianSwap, void, 0x00C76580, bool); DEFINE_MEMBER_FN(EnableEndianSwap, void, 0x00C9FAC0, bool);
UInt32 ReadLine(char * dst, UInt32 dstLen, UInt32 terminator); UInt32 ReadLine(char * dst, UInt32 dstLen, UInt32 terminator);
UInt32 ReadLine_w(wchar_t * dst, UInt32 dstLen, UInt32 terminator); // length in characters UInt32 ReadLine_w(wchar_t * dst, UInt32 dstLen, UInt32 terminator); // length in characters

@ -2,7 +2,7 @@
BSTaskPool * BSTaskPool::GetSingleton(void) BSTaskPool * BSTaskPool::GetSingleton(void)
{ {
// B474410E5F15240DC8FB7ABE11650955666F7775+91 // 7D1E14E40FFCA18609B3FAAD0A5750A26162D096+90
static RelocPtr<BSTaskPool*> g_taskPool(0x02F38978); static RelocPtr<BSTaskPool*> g_taskPool(0x02FD48A0);
return *g_taskPool; return *g_taskPool;
} }

@ -79,12 +79,12 @@ public:
//void LockForRead(); //void LockForRead();
//void LockForWrite(); //void LockForWrite();
MEMBER_FN_PREFIX(BSReadWriteLock); MEMBER_FN_PREFIX(BSReadWriteLock);
DEFINE_MEMBER_FN(LockForRead, void, 0x00C072D0); DEFINE_MEMBER_FN(LockForRead, void, 0x00C2CD50);
DEFINE_MEMBER_FN(LockForWrite, void, 0x00C07350); DEFINE_MEMBER_FN(LockForWrite, void, 0x00C2CDD0);
DEFINE_MEMBER_FN(UnlockRead, void, 0x00C07590); DEFINE_MEMBER_FN(UnlockRead, void, 0x00C2D010);
DEFINE_MEMBER_FN(UnlockWrite, void, 0x00C075A0); DEFINE_MEMBER_FN(UnlockWrite, void, 0x00C2D020);
DEFINE_MEMBER_FN(LockForReadAndWrite, void, 0x00C07450); DEFINE_MEMBER_FN(LockForReadAndWrite, void, 0x00C2CED0);
DEFINE_MEMBER_FN(TryLockForWrite, bool, 0x00C07540); DEFINE_MEMBER_FN(TryLockForWrite, bool, 0x00C2CFC0);
}; };
STATIC_ASSERT(sizeof(BSReadWriteLock) == 0x8); STATIC_ASSERT(sizeof(BSReadWriteLock) == 0x8);
@ -127,14 +127,14 @@ public:
const char * data; const char * data;
MEMBER_FN_PREFIX(Ref); MEMBER_FN_PREFIX(Ref);
DEFINE_MEMBER_FN(ctor, Ref *, 0x00C28BF0, const char * buf); DEFINE_MEMBER_FN(ctor, Ref *, 0x00C4F780, const char * buf);
// E728381B6B25FD30DF9845889144E86E5CC35A25+38 // 31D79EFB15D5E4B34BD32D03A46EAFF65C28ACFB+CB
DEFINE_MEMBER_FN(ctor_ref, Ref *, 0x00C28C80, const Ref & rhs); DEFINE_MEMBER_FN(ctor_ref, Ref *, 0x00C4F830, const Ref & rhs);
DEFINE_MEMBER_FN(Set, Ref *, 0x00C28D60, const char * buf); DEFINE_MEMBER_FN(Set, Ref *, 0x00C4F910, const char * buf);
// F3F05A02DE2034133B5965D694745B6369FC557D+F3 // 31D79EFB15D5E4B34BD32D03A46EAFF65C28ACFB+41
DEFINE_MEMBER_FN(Set_ref, Ref *, 0x00C28E20, const Ref & rhs); DEFINE_MEMBER_FN(Set_ref, Ref *, 0x00C4F9D0, const Ref & rhs);
// 77D2390F6DC57138CF0E5266EB5BBB0ACABDFBE3+A0 // 46F6DC561A3C9677037E58B55951C58A08E41C47+4A
DEFINE_MEMBER_FN(Release, void, 0x00C28D40); DEFINE_MEMBER_FN(Release, void, 0x00C50B50);
Ref(); Ref();
Ref(const char * buf); Ref(const char * buf);
@ -186,7 +186,7 @@ public:
const char * Get(void) const; const char * Get(void) const;
MEMBER_FN_PREFIX(BSString); MEMBER_FN_PREFIX(BSString);
DEFINE_MEMBER_FN(Set, bool, 0x000F9E90, const char * str, UInt32 len); // len default 0 DEFINE_MEMBER_FN(Set, bool, 0x00103D50, const char * str, UInt32 len); // len default 0
private: private:
char * m_data; // 00 char * m_data; // 00

@ -1,4 +1,4 @@
#include "skse64/GameUtilities.h" #include "skse64/GameUtilities.h"
RelocAddr <_CalculateCRC32_64> CalculateCRC32_64(0x00C06570); RelocAddr <_CalculateCRC32_64> CalculateCRC32_64(0x00C2C0F0);
RelocAddr <_CalculateCRC32_32> CalculateCRC32_32(0x00C064F0); RelocAddr <_CalculateCRC32_32> CalculateCRC32_32(0x00C2C070);

@ -6,7 +6,7 @@
#include "xbyak/xbyak.h" #include "xbyak/xbyak.h"
#include <queue> #include <queue>
RelocAddr <uintptr_t> kInstallCameraHook_Base(0x004F5C80); RelocAddr <uintptr_t> kInstallCameraHook_Base(0x0050F050);
void InstallCameraHook(TESCameraState * oldState, TESCameraState * newState) void InstallCameraHook(TESCameraState * oldState, TESCameraState * newState)
{ {

@ -10,7 +10,7 @@ UInt32 DataHandler::LoadScripts_Hook()
return ret; return ret;
} }
RelocAddr<uintptr_t> LoadScripts_Enter(0x005B0120 + 0x3E8); RelocAddr<uintptr_t> LoadScripts_Enter(0x005D7A20 + 0x3EB);
void Hooks_Data_Commit(void) void Hooks_Data_Commit(void)
{ {

@ -7,7 +7,7 @@
#include "skse64/PluginManager.h" #include "skse64/PluginManager.h"
#include "skse64_common/BranchTrampoline.h" #include "skse64_common/BranchTrampoline.h"
RelocAddr <uintptr_t> PlayerControls_ctor_Call(0x005ACC20 + 0xD4B); RelocAddr <uintptr_t> PlayerControls_ctor_Call(0x005D3920 + 0xD75);
PlayerControls * PlayerControls::ctor_Hook(void) PlayerControls * PlayerControls::ctor_Hook(void)
{ {

@ -10,11 +10,12 @@
static UInt32 g_forceContainerCategorization = 0; static UInt32 g_forceContainerCategorization = 0;
// 30A34F24A97F91365E1A3F66BF53263DEDF4B0AD+FA // 103A70E32BCD6C07E69BAE82CDD6BFE66E9F6797+3C
RelocPtr<UInt32 *> g_containerMode(0x02F4C328); RelocPtr<UInt32 *> g_containerMode(0x02FE8240);
RelocAddr<uintptr_t> kHook_ContainerMode_Base(0x0085F0C0); RelocAddr<uintptr_t> kHook_ContainerMode_Base(0x0088D910);
uintptr_t kHook_ContainerMode_Categories = kHook_ContainerMode_Base + 0x6E; uintptr_t kHook_ContainerMode_Start = kHook_ContainerMode_Base + 0xAE;
uintptr_t kHook_ContainerMode_NoCategories = kHook_ContainerMode_Base + 0x82; uintptr_t kHook_ContainerMode_Categories = kHook_ContainerMode_Base + 0xB7;
uintptr_t kHook_ContainerMode_NoCategories = kHook_ContainerMode_Base + 0xCB;
void Hooks_Gameplay_EnableForceContainerCategorization(bool enable) void Hooks_Gameplay_EnableForceContainerCategorization(bool enable)
{ {
@ -22,19 +23,19 @@ void Hooks_Gameplay_EnableForceContainerCategorization(bool enable)
} }
UInt32 g_invalidateKeywordCache = 0; UInt32 g_invalidateKeywordCache = 0;
RelocAddr<uintptr_t> kHook_BGSKeyword_Base(0x00333B30); RelocAddr<uintptr_t> kHook_BGSKeyword_Base(0x003491C0);
uintptr_t kHook_BGSKeyword_Create_Return = kHook_BGSKeyword_Base + 6; uintptr_t kHook_BGSKeyword_Create_Return = kHook_BGSKeyword_Base + 6;
// 4C1457C3040DCD34A7E7B2326F1EA2023930C56B+71 // 4C1457C3040DCD34A7E7B2326F1EA2023930C56B+71
RelocAddr <char *> g_gameVersion(0x01544EA0); RelocAddr <char *> g_gameVersion(0x0163D168);
RelocAddr <uintptr_t> kHook_ShowVersion_Offset(0x008EEE10 + 0x78); RelocAddr <uintptr_t> kHook_ShowVersion_Offset(0x0091F210 + 0x78);
static char kHook_ShowVersion_FormatString[] = static char kHook_ShowVersion_FormatString[] =
"%s.%d (SKSE64 " __PREPRO_TOKEN_STR__(SKSE_VERSION_INTEGER) "." "%s.%d (SKSE64 " __PREPRO_TOKEN_STR__(SKSE_VERSION_INTEGER) "."
__PREPRO_TOKEN_STR__(SKSE_VERSION_INTEGER_MINOR) "." __PREPRO_TOKEN_STR__(SKSE_VERSION_INTEGER_MINOR) "."
__PREPRO_TOKEN_STR__(SKSE_VERSION_INTEGER_BETA) " rel " __PREPRO_TOKEN_STR__(SKSE_VERSION_INTEGER_BETA) " rel "
__PREPRO_TOKEN_STR__(SKSE_VERSION_RELEASEIDX) ")"; __PREPRO_TOKEN_STR__(SKSE_VERSION_RELEASEIDX) ")";
RelocAddr<uintptr_t> kHook_Crosshair_LookupREFRByHandle_Enter(0x006B0570 + 0x90); RelocAddr<uintptr_t> kHook_Crosshair_LookupREFRByHandle_Enter(0x006D9980 + 0x88);
NiPointer<TESObjectREFR> g_curCrosshairRef; NiPointer<TESObjectREFR> g_curCrosshairRef;
@ -57,7 +58,7 @@ TESObjectREFR* Hooks_Gameplay_GetCrosshairRef()
static UInt8 s_disableMapMenuMouseWheel = 1; static UInt8 s_disableMapMenuMouseWheel = 1;
RelocAddr<uintptr_t> kHook_MapMenuMouseWheel_Enter(0x008DCEA0 + 0x18B); RelocAddr<uintptr_t> kHook_MapMenuMouseWheel_Enter(0x0090D530 + 0x187);
void Hooks_Gameplay_EnableMapMenuMouseWheel(bool enable) void Hooks_Gameplay_EnableMapMenuMouseWheel(bool enable)
{ {
@ -99,8 +100,8 @@ void Hooks_Gameplay_Commit(void)
HookContainerMode_Code code(codeBuf); HookContainerMode_Code code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr()); g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Branch(kHook_ContainerMode_Base.GetUIntPtr() + 0x65, uintptr_t(code.getCode())); g_branchTrampoline.Write5Branch(kHook_ContainerMode_Start, uintptr_t(code.getCode()));
SafeWrite16(kHook_ContainerMode_Base.GetUIntPtr() + 0x65 + 5, 0x9090); SafeWrite16(kHook_ContainerMode_Start + 5, 0x9090);
} }
// read config // read config

@ -24,33 +24,33 @@ void Hooks_Handlers_Init(void)
} }
// ??_7WeaponRightSwingHandler@@6B@ // ??_7WeaponRightSwingHandler@@6B@
RelocAddr <uintptr_t> WeaponRightSwingHandler_Vtable(0x01671ED0); RelocAddr <uintptr_t> WeaponRightSwingHandler_Vtable(0x01768AD8);
// ??_7WeaponLeftSwingHandler@@6B@ // ??_7WeaponLeftSwingHandler@@6B@
RelocAddr <uintptr_t> WeaponLeftSwingHandler_Vtable(0x01671EE8); RelocAddr <uintptr_t> WeaponLeftSwingHandler_Vtable(0x01768AF0);
// ??_7RightHandSpellFireHandler@@6B@ // ??_7RightHandSpellFireHandler@@6B@
RelocAddr <uintptr_t> RightHandSpellFireHandler_Vtable(0x01671F78); RelocAddr <uintptr_t> RightHandSpellFireHandler_Vtable(0x01768B80);
// ??_7LeftHandSpellFireHandler@@6B@ // ??_7LeftHandSpellFireHandler@@6B@
RelocAddr <uintptr_t> LeftHandSpellFireHandler_Vtable(0x01671F60); RelocAddr <uintptr_t> LeftHandSpellFireHandler_Vtable(0x01768B68);
// ??_7RightHandSpellCastHandler@@6B@ // ??_7RightHandSpellCastHandler@@6B@
RelocAddr <uintptr_t> RightHandSpellCastHandler_Vtable(0x01671FC0); RelocAddr <uintptr_t> RightHandSpellCastHandler_Vtable(0x01768BC8);
// ??_7LeftHandSpellCastHandler@@6B@ // ??_7LeftHandSpellCastHandler@@6B@
RelocAddr <uintptr_t> LeftHandSpellCastHandler_Vtable(0x01671FA8); RelocAddr <uintptr_t> LeftHandSpellCastHandler_Vtable(0x01768BB0);
// ??_7VoiceSpellFireHandler@@6B@ // ??_7VoiceSpellFireHandler@@6B@
RelocAddr <uintptr_t> VoiceSpellFireHandler_Vtable(0x01671F90); RelocAddr <uintptr_t> VoiceSpellFireHandler_Vtable(0x01768B98);
// ??_7VoiceSpellCastHandler@@6B@ // ??_7VoiceSpellCastHandler@@6B@
RelocAddr <uintptr_t> VoiceSpellCastHandler_Vtable(0x01671FD8); RelocAddr <uintptr_t> VoiceSpellCastHandler_Vtable(0x01768BE0);
// ??_7BowDrawnHandler@@6B@ // ??_7BowDrawnHandler@@6B@
RelocAddr <uintptr_t> BowDrawnHandler_Vtable(0x01672308); RelocAddr <uintptr_t> BowDrawnHandler_Vtable(0x01768F10);
// ??_7BowReleaseHandler@@6B@ // ??_7BowReleaseHandler@@6B@
RelocAddr <uintptr_t> BowReleaseHandler_Vtable(0x01672320); RelocAddr <uintptr_t> BowReleaseHandler_Vtable(0x01768F28);
// ??_7WeaponBeginDrawRightHandler@@6B@ // ??_7WeaponBeginDrawRightHandler@@6B@
RelocAddr <uintptr_t> WeaponBeginDrawRightHandler_Vtable(0x01671FF0); RelocAddr <uintptr_t> WeaponBeginDrawRightHandler_Vtable(0x01768BF8);
// ??_7WeaponBeginSheatheRightHandler@@6B@ // ??_7WeaponBeginSheatheRightHandler@@6B@
RelocAddr <uintptr_t> WeaponBeginSheatheRightHandler_Vtable(0x01672008); RelocAddr <uintptr_t> WeaponBeginSheatheRightHandler_Vtable(0x01768C10);
// ??_7RightHandWeaponDrawHandler@@6B@ // ??_7RightHandWeaponDrawHandler@@6B@
RelocAddr <uintptr_t> RightHandWeaponDrawHandler_Vtable(0x01672020); RelocAddr <uintptr_t> RightHandWeaponDrawHandler_Vtable(0x01768C28);
// ??_7RightHandWeaponSheatheHandler@@6B@ // ??_7RightHandWeaponSheatheHandler@@6B@
RelocAddr <uintptr_t> RightHandWeaponSheatheHandler_Vtable(0x01672038); RelocAddr <uintptr_t> RightHandWeaponSheatheHandler_Vtable(0x01768C40);
void Hooks_Handlers_Commit(void) void Hooks_Handlers_Commit(void)
{ {

@ -11,10 +11,10 @@
#include "xbyak/xbyak.h" #include "xbyak/xbyak.h"
// Used by UpdatePlayerTints to create a render target of a particular size // Used by UpdatePlayerTints to create a render target of a particular size
// 799F89E4A13D41B1F88644E1F6AFA5A633684C51+345 // D55B7565783E557DBA232E15687FDD05C35FE3D1+473
RelocPtr<UInt32> g_tintTextureWidth(0x0302BCC4); RelocPtr<UInt32> g_tintTextureWidth(0x030C7444);
// 799F89E4A13D41B1F88644E1F6AFA5A633684C51+33E // D55B7565783E557DBA232E15687FDD05C35FE3D1+46C
RelocPtr<UInt32> g_tintTextureHeight(0x0302BCC8); RelocPtr<UInt32> g_tintTextureHeight(0x030C7448);
UInt32 g_tintTextureResolution = 512; UInt32 g_tintTextureResolution = 512;
@ -32,7 +32,7 @@ struct RenderTargetInfo
}; };
typedef void ( * _CreateRenderTarget)(void * renderTargetManager, UInt64 type, RenderTargetInfo * info); typedef void ( * _CreateRenderTarget)(void * renderTargetManager, UInt64 type, RenderTargetInfo * info);
RelocAddr<_CreateRenderTarget> CreateRenderTarget(0x00D74B60); RelocAddr<_CreateRenderTarget> CreateRenderTarget(0x00DB18B0);
_CreateRenderTarget CreateRenderTarget_Original = nullptr; _CreateRenderTarget CreateRenderTarget_Original = nullptr;
void CreateRenderTarget_Hook(BSRenderManager ** targetManager, UInt64 type, RenderTargetInfo * info) void CreateRenderTarget_Hook(BSRenderManager ** targetManager, UInt64 type, RenderTargetInfo * info)
@ -65,7 +65,7 @@ void Hooks_NetImmerse_Init(void)
} }
} }
RelocAddr <uintptr_t> UpdateEquipment_Enter(0x00693110 + 0x189); RelocAddr <uintptr_t> UpdateEquipment_Enter(0x006BBB70 + 0x197);
void Hooks_NetImmerse_Commit(void) void Hooks_NetImmerse_Commit(void)
{ {

@ -69,16 +69,16 @@
#include "xbyak/xbyak.h" #include "xbyak/xbyak.h"
typedef void(*_RegisterPapyrusFunctions)(VMClassRegistry ** registry); typedef void(*_RegisterPapyrusFunctions)(VMClassRegistry ** registry);
RelocAddr<_RegisterPapyrusFunctions> RegisterPapyrusFunctions(0x00980190); RelocAddr<_RegisterPapyrusFunctions> RegisterPapyrusFunctions(0x009A98F0);
RelocAddr <uintptr_t> RegisterPapyrusFunctions_Start(0x009204A0 + 0xC7F); RelocAddr <uintptr_t> RegisterPapyrusFunctions_Start(0x0094D8E0 + 0xCC3);
RelocAddr<uintptr_t> UnregisterFromSleep_Enter(0x00925180 + 0x31); RelocAddr<uintptr_t> UnregisterFromSleep_Enter(0x00952AF0 + 0x14B);
RelocAddr<uintptr_t> RevertGlobalData_Enter(0x0092B8A0 + 0x22); RelocAddr<uintptr_t> RevertGlobalData_Enter(0x00959AC0 + 0x22);
RelocAddr<uintptr_t> RevertGlobalData_Enter2(0x0092BDE0 + 0x190); RelocAddr<uintptr_t> RevertGlobalData_Enter2(0x0095A000 + 0x288);
RelocAddr<uintptr_t> SaveRegsSleep_Enter(0x0092E290 + 0x110); RelocAddr<uintptr_t> SaveRegsSleep_Enter(0x0095C540 + 0x390);
RelocAddr<uintptr_t> LoadRegsSleep_Enter(0x0092F030 + 0x1E6); RelocAddr<uintptr_t> LoadRegsSleep_Enter(0x0095D620 + 0x2FB);
RelocAddr<uintptr_t> kDFQueueHook_Base(0x00931470); RelocAddr<uintptr_t> kDFQueueHook_Base(0x0095FBD0);
uintptr_t kDFQueueHook_HookAddr = kDFQueueHook_Base + 0x6E; uintptr_t kDFQueueHook_HookAddr = kDFQueueHook_Base + 0x6E;
uintptr_t kDFQueueHook_Entry_retn = kDFQueueHook_Base + 0x73; uintptr_t kDFQueueHook_Entry_retn = kDFQueueHook_Base + 0x73;
@ -354,7 +354,7 @@ void Hooks_Papyrus_Commit()
DelayFunctorQueue_Entry_Code(void * buf) : Xbyak::CodeGenerator(4096, buf) DelayFunctorQueue_Entry_Code(void * buf) : Xbyak::CodeGenerator(4096, buf)
{ {
// Need timeBudget as parameter // Need timeBudget as parameter
movss(xmm0, ptr[rsp + 0xC0]); movss(xmm0, ptr[rsp + 0xB0]);
mov(rax, (uintptr_t)DelayFunctorQueue_Hook); mov(rax, (uintptr_t)DelayFunctorQueue_Hook);
call(rax); call(rax);

@ -124,19 +124,18 @@ UInt8 TESQuest::NewGame_Hook(UInt8 * unk1, UInt8 unk2)
return ret; return ret;
} }
RelocAddr <uintptr_t> SaveGame_HookTarget_Enter(0x00586DE0 + 0x18B); RelocAddr <uintptr_t> SaveGame_HookTarget_Enter(0x005A87C0 + 0x2B3);
RelocAddr <uintptr_t> SaveGame2_HookTarget_Enter(0x005875F0 + 0x138); RelocAddr <uintptr_t> LoadGame_HookTarget_Enter(0x005AD3B0 + 0x2C5);
RelocAddr <uintptr_t> LoadGame_HookTarget_Enter(0x0058AE30 + 0x26C); // 691ACD40B8430FBDA081477DEB2A9948ACC235F1+11F
RelocAddr <uintptr_t> ProcessEvents_Enter(0x005B2FF0 + 0x7F); RelocAddr <uintptr_t> ProcessEvents_Enter(0x005DACE0 + 0x9A);
RelocAddr <uintptr_t> NewGame_Enter(0x008A20E0 + 0x59); RelocAddr <uintptr_t> NewGame_Enter(0x008D3370 + 0x59);
RelocAddr <uintptr_t> DeleteSaveGame_Enter(0x005794C0 + 0x77); RelocAddr <uintptr_t> DeleteSaveGame_Enter(0x0059AAE0 + 0x77);
RelocAddr <uintptr_t> DeleteSaveGame_Enter2(0x00579590 + 0x17); RelocAddr <uintptr_t> DeleteSaveGame_Enter2(0x0059ABB0 + 0x17);
void Hooks_SaveLoad_Commit(void) void Hooks_SaveLoad_Commit(void)
{ {
// Load & Save // Load & Save
g_branchTrampoline.Write5Call(SaveGame_HookTarget_Enter, GetFnAddr(&BGSSaveLoadManager::SaveGame_Hook)); g_branchTrampoline.Write5Call(SaveGame_HookTarget_Enter, GetFnAddr(&BGSSaveLoadManager::SaveGame_Hook));
g_branchTrampoline.Write5Call(SaveGame2_HookTarget_Enter, GetFnAddr(&BGSSaveLoadManager::SaveGame_Hook));
g_branchTrampoline.Write5Call(LoadGame_HookTarget_Enter, GetFnAddr(&BGSSaveLoadManager::LoadGame_Hook)); g_branchTrampoline.Write5Call(LoadGame_HookTarget_Enter, GetFnAddr(&BGSSaveLoadManager::LoadGame_Hook));
g_branchTrampoline.Write5Call(ProcessEvents_Enter, GetFnAddr(&BGSSaveLoadManager::ProcessEvents_Hook)); g_branchTrampoline.Write5Call(ProcessEvents_Enter, GetFnAddr(&BGSSaveLoadManager::ProcessEvents_Hook));

@ -209,7 +209,7 @@ public:
InputEventDispatcher* pInputEventDispatcher = InputEventDispatcher::GetSingleton(); InputEventDispatcher* pInputEventDispatcher = InputEventDispatcher::GetSingleton();
if (! (pInputEventDispatcher)) if (! (pInputEventDispatcher))
return; return;
pInputEventDispatcher->AddEventSink(&remapHandler); pInputEventDispatcher->AddEventSink(&remapHandler);
menuControls->remapMode = true; menuControls->remapMode = true;
playerControls->remapMode = true; playerControls->remapMode = true;
@ -460,7 +460,7 @@ public:
} }
#if _DEBUG #if _DEBUG
_MESSAGE("scaleform: send mod event (%s, %s, %d)", eventName, strArg, numArg); _MESSAGE("scaleform: send mod event (%s, %s, %f)", eventName, strArg, numArg);
#endif #endif
BSFixedString aEventName(eventName); BSFixedString aEventName(eventName);
@ -924,7 +924,7 @@ public:
}; };
typedef void * (* _UIOpenJournalMenu)(bool bUnk); typedef void * (* _UIOpenJournalMenu)(bool bUnk);
RelocAddr<_UIOpenJournalMenu> UIOpenJournalMenu(0x00000000); RelocAddr<_UIOpenJournalMenu> UIOpenJournalMenu(0x00924F90);
class SKSEScaleform_OpenJournalMenu : public GFxFunctionHandler class SKSEScaleform_OpenJournalMenu : public GFxFunctionHandler
{ {
@ -1148,13 +1148,13 @@ public:
UInt8 unk30[0x10]; // 30 UInt8 unk30[0x10]; // 30
MEMBER_FN_PREFIX(StandardItemData); MEMBER_FN_PREFIX(StandardItemData);
DEFINE_MEMBER_FN(ctor_data, StandardItemData *, 0x00854E40, GFxMovieView ** movieView, InventoryEntryData * objDesc, UInt64 unk); DEFINE_MEMBER_FN(ctor_data, StandardItemData *, 0x00882BC0, GFxMovieView ** movieView, InventoryEntryData * objDesc, UInt64 unk);
StandardItemData * ctor_Hook(GFxMovieView ** movieView, InventoryEntryData * objDesc, UInt64 unk); StandardItemData * ctor_Hook(GFxMovieView ** movieView, InventoryEntryData * objDesc, UInt64 unk);
static uintptr_t GetCtorHookAddress() static uintptr_t GetCtorHookAddress()
{ {
static RelocAddr<uintptr_t> kCtorHookAddress(0x00856050 + 0x97); static RelocAddr<uintptr_t> kCtorHookAddress(0x00883B90 + 0x97);
return kCtorHookAddress.GetUIntPtr(); return kCtorHookAddress.GetUIntPtr();
} }
}; };
@ -1203,11 +1203,11 @@ public:
MEMBER_FN_PREFIX(MagicItemData); MEMBER_FN_PREFIX(MagicItemData);
DEFINE_MEMBER_FN(ctor_data, MagicItemData *, 0x0089E730, GFxMovieView ** movieView, TESForm * pForm, int unk); // unk is ignored by ctor DEFINE_MEMBER_FN(ctor_data, MagicItemData *, 0x008CF470, GFxMovieView ** movieView, TESForm * pForm, int unk); // unk is ignored by ctor
static uintptr_t GetCtorHookAddress() static uintptr_t GetCtorHookAddress()
{ {
static RelocAddr<uintptr_t> kCtorHookAddress(0x0089FB00 + 0x97); static RelocAddr<uintptr_t> kCtorHookAddress(0x008D0A90 + 0x97);
return kCtorHookAddress.GetUIntPtr(); return kCtorHookAddress.GetUIntPtr();
} }
@ -1241,14 +1241,15 @@ namespace favMenuDataHook
struct FavData struct FavData
{ {
GFxMovieView ** movieView; // 00 GFxMovieView ** movieView; // 00
UInt32 unk04; // 04 void * unk04; // 08
GFxValue * entryList; // 08 GFxValue * entryList; // 10
}; };
// 1 - Item // 1 - Item
RelocAddr<uintptr_t> kSetItemData_Base(0x00878850); RelocAddr<uintptr_t> kSetItemData_Base(0x008A7F60);
uintptr_t kSetItemData_retn = kSetItemData_Base + 0xCA; uintptr_t kSetItemData_hook = kSetItemData_Base + 0xC2;
uintptr_t kSetItemData_retn = kSetItemData_Base + 0xC8;
void SetItemData(IMenu * menu, GFxValue * dataContainer, InventoryEntryData * objDesc) void SetItemData(IMenu * menu, GFxValue * dataContainer, InventoryEntryData * objDesc)
{ {
@ -1275,8 +1276,10 @@ namespace favMenuDataHook
}; };
// 2 - Magic // 2 - Magic
RelocAddr<uintptr_t> kSetMagicData_Base(0x00879770);
uintptr_t kSetMagicData_retn = kSetMagicData_Base + 0xA1; RelocAddr<uintptr_t> kSetMagicData_Base(0x008A8F70);
uintptr_t kSetMagicData_hook = kSetMagicData_Base + 0x6B;
uintptr_t kSetMagicData_retn = kSetMagicData_Base + 0x71;
void SetMagicData(GFxMovieView * movieView, GFxValue * dataContainer, TESForm * form) void SetMagicData(GFxMovieView * movieView, GFxValue * dataContainer, TESForm * form)
{ {
@ -1298,7 +1301,9 @@ namespace favMenuDataHook
}; };
// 3 - VampireLord // 3 - VampireLord
RelocAddr<uintptr_t> kSetVampireData_Base(0x00879B40);
RelocAddr<uintptr_t> kSetVampireData_Base(0x008A9200);
uintptr_t kSetVampireData_hook = kSetVampireData_Base + 0x92;
uintptr_t kSetVampireData_retn = kSetVampireData_Base + 0x98; uintptr_t kSetVampireData_retn = kSetVampireData_Base + 0x98;
} }
@ -1306,8 +1311,9 @@ namespace favMenuDataHook
namespace enchantMenuDataHook namespace enchantMenuDataHook
{ {
RelocAddr<uintptr_t> kSetData_Base(0x00864C50); RelocAddr<uintptr_t> kSetData_Base(0x0089C1B0);
uintptr_t kSetData_retn = kSetData_Base + 0xDF; uintptr_t kSetData_hook = kSetData_Base + 0x4A1;
uintptr_t kSetData_retn = kSetData_Base + 0x4A6;
} }
// SE: this function has been moved out of the class, so that its address can be obtained // SE: this function has been moved out of the class, so that its address can be obtained
@ -1384,24 +1390,16 @@ void EnchantConstructMenu_CategoryListEntry_SetData_Extended(EnchantConstructMen
namespace smithingMenuDataHook namespace smithingMenuDataHook
{ {
RelocAddr<uintptr_t> kSetData_Base(0x00864B00); RelocAddr<uintptr_t> kSetData_Base(0x00892AA0);
uintptr_t kSetData_hook = kSetData_Base + 0xD6;
typedef void (__cdecl * _SetData_Hooked)(GFxValue * dataContainer, InventoryEntryData ** pObjDesc, SmithingMenu * menu); uintptr_t kSetData_retn = kSetData_Base + 0xDB;
void SetData_Hooked(GFxValue * dataContainer, InventoryEntryData ** pObjDesc, SmithingMenu * menu)
{
static RelocAddr<uintptr_t> SetData_Hooked_Address(0x00870700);
((_SetData_Hooked)(SetData_Hooked_Address.GetUIntPtr())) (dataContainer, pObjDesc, menu);
}
void SetData_Hook(GFxValue * dataContainer, InventoryEntryData ** pObjDesc, SmithingMenu * menu) const char * SetData_Hook(GFxValue * dataContainer, InventoryEntryData ** pObjDesc, SmithingMenu * menu)
{ {
SetData_Hooked(dataContainer, pObjDesc, menu); InventoryEntryData * objDesc = *pObjDesc;
if (s_bExtendData && pObjDesc && menu && menu->view) if(s_bExtendData && objDesc && menu && menu->view)
{ {
InventoryEntryData * objDesc = *pObjDesc;
scaleformExtend::CommonItemData(dataContainer, objDesc->type); scaleformExtend::CommonItemData(dataContainer, objDesc->type);
scaleformExtend::ItemInfoData(dataContainer, objDesc); scaleformExtend::ItemInfoData(dataContainer, objDesc);
scaleformExtend::StandardItemData(dataContainer, objDesc->type); scaleformExtend::StandardItemData(dataContainer, objDesc->type);
@ -1414,6 +1412,9 @@ namespace smithingMenuDataHook
(*iter)(menu->view, dataContainer, objDesc); (*iter)(menu->view, dataContainer, objDesc);
} }
} }
// original code
return CALL_MEMBER_FN(objDesc, GenerateName)();
} }
} }
@ -1421,25 +1422,17 @@ namespace smithingMenuDataHook
namespace craftingMenuDataHook namespace craftingMenuDataHook
{ {
// 80050DF3D298FB230378FF3D7BC6F6D7BBAA21FB+22D //
RelocAddr<uintptr_t> kSetData_Base(0x00864EF0); RelocAddr<uintptr_t> kSetData_Base(0x00892FD0);
uintptr_t kSetData_hook = kSetData_Base + 0xC4;
typedef void (__cdecl * _SetData_Hooked)(GFxValue * dataContainer, ConstructibleObjectMenu::EntryData * entry, ConstructibleObjectMenu * menu); uintptr_t kSetData_retn = kSetData_Base + 0xC9;
void SetData_Hooked(GFxValue * dataContainer, ConstructibleObjectMenu::EntryData * entry, ConstructibleObjectMenu * menu)
{
static RelocAddr<uintptr_t> SetData_Hooked_Address(0x00870390);
((_SetData_Hooked)(SetData_Hooked_Address.GetUIntPtr())) (dataContainer, entry, menu);
}
void SetData_Hook(GFxValue * dataContainer, ConstructibleObjectMenu::EntryData * entry, ConstructibleObjectMenu * menu) const char * SetData_Hook(GFxValue * dataContainer, ConstructibleObjectMenu::EntryData * entry, ConstructibleObjectMenu * menu)
{ {
SetData_Hooked(dataContainer, entry, menu); if(s_bExtendData && entry && entry->object && menu && menu->view)
if (s_bExtendData && entry && entry->object && menu && menu->view)
{ {
BGSConstructibleObject* object = entry->object; BGSConstructibleObject * object = entry->object;
TESForm* form = object->createdObject; TESForm * form = object->createdObject;
InventoryEntryData entryData(form, 0); InventoryEntryData entryData(form, 0);
@ -1453,8 +1446,12 @@ namespace craftingMenuDataHook
{ {
if(*iter) if(*iter)
(*iter)(menu->view, dataContainer, &entryData); (*iter)(menu->view, dataContainer, &entryData);
} }
} }
// original code
TESFullName * fullName = DYNAMIC_CAST(entry->object->createdObject, TESForm, TESFullName);
return fullName ? fullName->GetName() : "";
} }
} }
@ -1462,25 +1459,16 @@ namespace craftingMenuDataHook
namespace alchemyMenuDataHook namespace alchemyMenuDataHook
{ {
// Item data //
// 33BD5B22D8D665F5A8DB6AB3EC6EB874A57E3E53+263 RelocAddr<uintptr_t> kSetData_Base(0x00892CE0);
RelocAddr<uintptr_t> kSetData_Base(0x00864DA0); uintptr_t kSetData_hook = kSetData_Base + 0xC6;
uintptr_t kSetData_retn = kSetData_Base + 0xCB;
typedef void (__cdecl * _SetData_Hooked)(GFxValue * dataContainer, AlchemyMenu::EntryData * entry, AlchemyMenu * menu); const char * SetData_Hook(GFxValue * dataContainer, AlchemyMenu::EntryData * entry, AlchemyMenu * menu)
void SetData_Hooked(GFxValue * dataContainer, AlchemyMenu::EntryData * entry, AlchemyMenu * menu)
{ {
static RelocAddr<uintptr_t> SetData_Hooked_Address(0x008704F0); if(s_bExtendData && entry && entry->data && menu && menu->view)
((_SetData_Hooked)(SetData_Hooked_Address.GetUIntPtr())) (dataContainer, entry, menu);
}
void SetData_Hook(GFxValue * dataContainer, AlchemyMenu::EntryData * entry, AlchemyMenu * menu)
{
SetData_Hooked(dataContainer, entry, menu);
if (s_bExtendData && entry && entry->data && menu && menu->view)
{ {
InventoryEntryData* entryData = entry->data; InventoryEntryData * entryData = entry->data;
scaleformExtend::CommonItemData(dataContainer, entryData->type); scaleformExtend::CommonItemData(dataContainer, entryData->type);
scaleformExtend::ItemInfoData(dataContainer, entryData); scaleformExtend::ItemInfoData(dataContainer, entryData);
@ -1490,45 +1478,40 @@ namespace alchemyMenuDataHook
{ {
if(*iter) if(*iter)
(*iter)(menu->view, dataContainer, entryData); (*iter)(menu->view, dataContainer, entryData);
} }
} }
}
// original code
TESFullName * fullName = DYNAMIC_CAST(entry->data->type, TESForm, TESFullName);
return fullName ? fullName->GetName() : "";
}
// Category arguments // Category arguments
// (note: this passes data in arguments to SetCategoriesList. makes it more difficult to extend) // (note: this passes data in arguments to SetCategoriesList. makes it more difficult to extend)
RelocAddr<uintptr_t> kExtendCategoryArgs_Base(0x00871700); RelocAddr<uintptr_t> kExtendCategoryArgs_Base(0x008A0640);
uintptr_t kExtendCategoryArgs_retn = kExtendCategoryArgs_Base + 0x59D; uintptr_t kExtendCategoryArgs_hook = kExtendCategoryArgs_Base + 0x564;
uintptr_t kExtendCategoryArgs_retn = kExtendCategoryArgs_Base + 0x569;
class GFxInvokeHook class GFxInvokeHook
{ {
public: public:
// effectArray is added parameter to signature of GFxValue Invoke // hijack unused 'result' parameter to pass effectArray
// SE: effectArray moved to the end of parameters, for x64 specific efficiency reasons bool Invoke(void * obj, AlchemyEffectCategory * effectArray, const char * name, GFxValue * args, UInt32 numArgs, bool isDisplayObj)
bool Invoke(void * obj, GFxValue * result, const char * name, GFxValue * args, UInt32 numArgs, bool isDisplayObj, AlchemyEffectCategory* effectArray)
{ {
if (s_bExtendAlchemyCategories) if (s_bExtendAlchemyCategories)
scaleformExtend::AlchemyCategoryArgs(effectArray, args, numArgs); scaleformExtend::AlchemyCategoryArgs(effectArray, args, numArgs);
// Call hooked func // Call hooked func
GFxValue::ObjectInterface* p = reinterpret_cast<GFxValue::ObjectInterface*>(this); GFxValue::ObjectInterface* p = reinterpret_cast<GFxValue::ObjectInterface*>(this);
return p->Invoke(obj, result, name, args, numArgs, isDisplayObj); return p->Invoke(obj, nullptr, name, args, numArgs, isDisplayObj);
} }
}; };
// Extra unused args explanation:
// This functions hooks Invoke, which uses rcx-r9, and 3 stack parameters (rsp+20, 28 and 30 before the call instruction)
// Our wanted extra parameter, the effectsArray, happened to be at rsp+0x48, so we can add two extra dummy parms for rsp+38 and 40, and then we can access the effectArray
bool ExtendCategoryArgs_Entry_Intermediate(GFxInvokeHook *pthis, void * obj, GFxValue * result, const char * name, GFxValue * args, UInt32 numArgs, bool isDisplayObj, void *, void *, AlchemyEffectCategory* effectArray)
{
return pthis->Invoke(obj, result, name, args, numArgs, isDisplayObj, effectArray);
}
} }
namespace GFxLoaderHook namespace GFxLoaderHook
{ {
RelocPtr<UInt64> kCtor_Base(0x005AE010 + 0xA08); RelocPtr<UInt64> kCtor_Base(0x005D4EF0 + 0xE91); // WinMain+15
GFxLoader *ctor_Hook(GFxLoader * loader) GFxLoader *ctor_Hook(GFxLoader * loader)
{ {
@ -1626,7 +1609,7 @@ void InstallHooks(GFxMovieView * view)
globals.SetMember("skse", &skse); globals.SetMember("skse", &skse);
} }
RelocAddr <uintptr_t> kInstallHooks_Enter(0x00ECE790 + 0x1D9); RelocAddr <uintptr_t> kInstallHooks_Enter(0x00F11C60 + 0x1DD);
void InstallHooks_Entry(GFxMovieView *pthis, UInt32 unk) void InstallHooks_Entry(GFxMovieView *pthis, UInt32 unk)
{ {
@ -1692,30 +1675,27 @@ void Hooks_Scaleform_Commit(void)
SetItemDataEntry_Code code(codeBuf); SetItemDataEntry_Code code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr()); g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Branch(favMenuDataHook::kSetItemData_Base.GetUIntPtr() + 0xC4, uintptr_t(code.getCode())); g_branchTrampoline.Write5Branch(favMenuDataHook::kSetItemData_hook, uintptr_t(code.getCode()));
SafeWrite8(favMenuDataHook::kSetItemData_Base.GetUIntPtr() + 0xC4 + 5, 0x90); SafeWrite8(favMenuDataHook::kSetItemData_hook + 5, 0x90);
} }
{ {
struct SetMagicData_Entry_Code : Xbyak::CodeGenerator { struct SetMagicData_Entry_Code : Xbyak::CodeGenerator {
SetMagicData_Entry_Code(void * buf) : Xbyak::CodeGenerator(4096, buf) SetMagicData_Entry_Code(void * buf) : Xbyak::CodeGenerator(4096, buf)
{ {
// r15: FavData* (not this, because this function was inlined in the above one)
// rbp-9: data container
// rsi: TESForm*
// The hooked call (overwritten code) movieView->CreateObject(containerObj,0,0,0) // The hooked call (overwritten code) movieView->CreateObject(containerObj,0,0,0)
call(ptr[rax + 0x68]); call(ptr[rax + 0x68]);
// insert call to our data extend function // insert call to our data extend function
mov(rcx, ptr[r15]); mov(rcx, ptr[rdi]);
mov(rcx, ptr[rcx]); mov(rcx, ptr[rcx]); // GFxMovieView * view
lea(rdx, ptr[rbp - 0x9]); lea(rdx, ptr[rbp - 0x30]); // GFxValue * dataContainer
mov(r8, rsi); mov(r8, rbx); // TESForm * form
mov(rax, (uintptr_t)favMenuDataHook::SetMagicData); mov(rax, (uintptr_t)favMenuDataHook::SetMagicData);
call(rax); call(rax);
// The other overwritten instruction and return to original code // The other overwritten instruction and return to original code
mov(rcx, rsi); mov(rcx, rbx);
jmp(ptr[rip]); jmp(ptr[rip]);
dq(favMenuDataHook::kSetMagicData_retn); dq(favMenuDataHook::kSetMagicData_retn);
} }
@ -1725,8 +1705,8 @@ void Hooks_Scaleform_Commit(void)
SetMagicData_Entry_Code code(codeBuf); SetMagicData_Entry_Code code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr()); g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Branch(favMenuDataHook::kSetMagicData_Base.GetUIntPtr() + 0x9B, uintptr_t(code.getCode())); g_branchTrampoline.Write5Branch(favMenuDataHook::kSetMagicData_hook, uintptr_t(code.getCode()));
SafeWrite8(favMenuDataHook::kSetMagicData_Base.GetUIntPtr() + 0x9B + 5, 0x90); SafeWrite8(favMenuDataHook::kSetMagicData_hook + 5, 0x90);
} }
{ {
@ -1758,8 +1738,8 @@ void Hooks_Scaleform_Commit(void)
SetVampireData_Entry_Code code(codeBuf); SetVampireData_Entry_Code code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr()); g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Branch(favMenuDataHook::kSetVampireData_Base.GetUIntPtr() + 0x92, uintptr_t(code.getCode())); g_branchTrampoline.Write5Branch(favMenuDataHook::kSetVampireData_hook, uintptr_t(code.getCode()));
SafeWrite8(favMenuDataHook::kSetVampireData_Base.GetUIntPtr() + 0x92 + 5, 0x90); SafeWrite8(favMenuDataHook::kSetVampireData_hook + 5, 0x90);
} }
// end of fav menu data hooks // end of fav menu data hooks
@ -1783,14 +1763,91 @@ void Hooks_Scaleform_Commit(void)
SetDataEntry_Code code(codeBuf); SetDataEntry_Code code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr()); g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Branch(enchantMenuDataHook::kSetData_Base.GetUIntPtr() + 0xDA, uintptr_t(code.getCode())); g_branchTrampoline.Write5Branch(enchantMenuDataHook::kSetData_hook, uintptr_t(code.getCode()));
} }
g_branchTrampoline.Write5Call(smithingMenuDataHook::kSetData_Base.GetUIntPtr() + 0xDD, (uintptr_t)smithingMenuDataHook::SetData_Hook); {
g_branchTrampoline.Write5Call(craftingMenuDataHook::kSetData_Base.GetUIntPtr() + 0xDD, (uintptr_t)craftingMenuDataHook::SetData_Hook); struct SmithingMenuHook : Xbyak::CodeGenerator {
g_branchTrampoline.Write5Call(alchemyMenuDataHook::kSetData_Base.GetUIntPtr() + 0xDD, (uintptr_t)alchemyMenuDataHook::SetData_Hook); SmithingMenuHook(void * buf) : Xbyak::CodeGenerator(4096, buf)
// The call here instead of branch like in SKSE32 is not an error. This patch doesn't need asm anymore (look at alchemyMenuDataHook::ExtendCategoryArgs_Entry_Intermediate for more info) {
g_branchTrampoline.Write5Call(alchemyMenuDataHook::kExtendCategoryArgs_Base.GetUIntPtr() + 0x598, (uintptr_t)alchemyMenuDataHook::ExtendCategoryArgs_Entry_Intermediate); lea(rcx, ptr[rbp - 0x48]); // GFxValue *
mov(rdx, rbx); // InventoryEntryData **
mov(r8, r14); // SmithingMenu *
mov(rax, (uintptr_t)smithingMenuDataHook::SetData_Hook);
call(rax);
jmp(ptr[rip]);
dq(smithingMenuDataHook::kSetData_retn);
}
};
void * codeBuf = g_localTrampoline.StartAlloc();
SmithingMenuHook code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Branch(smithingMenuDataHook::kSetData_hook, uintptr_t(code.getCode()));
}
{
struct CraftingMenuHook : Xbyak::CodeGenerator {
CraftingMenuHook(void * buf) : Xbyak::CodeGenerator(4096, buf)
{
lea(rcx, ptr[rbp - 0x38]); // GFxValue *
mov(rdx, rbx); // ConstructibleObjectMenu::EntryData *
mov(r8, r14); // ConstructibleObjectMenu *
mov(rax, (uintptr_t)craftingMenuDataHook::SetData_Hook);
call(rax);
jmp(ptr[rip]);
dq(craftingMenuDataHook::kSetData_retn);
}
};
void * codeBuf = g_localTrampoline.StartAlloc();
CraftingMenuHook code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Branch(craftingMenuDataHook::kSetData_hook, uintptr_t(code.getCode()));
}
{
struct AlchemyMenuHook : Xbyak::CodeGenerator {
AlchemyMenuHook(void * buf) : Xbyak::CodeGenerator(4096, buf)
{
lea(rcx, ptr[rbp - 0x38]); // GFxValue *
mov(rdx, rbx); // AlchemyMenu::EntryData *
mov(r8, r14); // AlchemyMenu *
mov(rax, (uintptr_t)alchemyMenuDataHook::SetData_Hook);
call(rax);
jmp(ptr[rip]);
dq(alchemyMenuDataHook::kSetData_retn);
}
};
void * codeBuf = g_localTrampoline.StartAlloc();
AlchemyMenuHook code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Branch(alchemyMenuDataHook::kSetData_hook, uintptr_t(code.getCode()));
}
{
struct AlchemyCategoryHook : Xbyak::CodeGenerator {
AlchemyCategoryHook(void * buf) : Xbyak::CodeGenerator(4096, buf)
{
mov(r8, ptr[rbp - 0x69]); // overwrite zero in 'result' param
mov(rax, (uintptr_t)GetFnAddr(&alchemyMenuDataHook::GFxInvokeHook::Invoke));
jmp(rax);
}
};
void * codeBuf = g_localTrampoline.StartAlloc();
AlchemyCategoryHook code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Call(alchemyMenuDataHook::kExtendCategoryArgs_hook, uintptr_t(code.getCode()));
}
// End of crafting menu data hooks // End of crafting menu data hooks
// gfxloader creation hook // gfxloader creation hook

@ -44,8 +44,9 @@ void Hooks_Threads_Init(void)
} }
RelocAddr <uintptr_t> ProcessTasks_HookTarget_Enter(0x005B2FF0 + 0x6B8); // 691ACD40B8430FBDA081477DEB2A9948ACC235F1+11F
RelocAddr <uintptr_t> ProcessTasks_HookTarget_Enter2(0x005B44C0 + 0x1C); RelocAddr <uintptr_t> ProcessTasks_HookTarget_Enter(0x005DACE0 + 0xB97);
RelocAddr <uintptr_t> ProcessTasks_HookTarget_Enter2(0x005DC810 + 0x1C);
void Hooks_Threads_Commit(void) void Hooks_Threads_Commit(void)
{ {

@ -79,7 +79,7 @@ void TaskInterface::AddUITask(UIDelegate_v1* task)
} }
} }
RelocAddr <uintptr_t> ProcessEventQueue_HookTarget_Enter(0x00EBE630 + 0xA14); RelocAddr <uintptr_t> ProcessEventQueue_HookTarget_Enter(0x00F05AF0 + 0xAB5);
void Hooks_UI_Commit(void) void Hooks_UI_Commit(void)
{ {

@ -2,13 +2,13 @@
#include "skse64/NiGeometry.h" #include "skse64/NiGeometry.h"
// ??_7BSFaceGenBaseMorphExtraData@@6B@ // ??_7BSFaceGenBaseMorphExtraData@@6B@
RelocAddr<uintptr_t> s_BSFaceGenBaseMorphExtraDataVtbl(0x01601508); RelocAddr<uintptr_t> s_BSFaceGenBaseMorphExtraDataVtbl(0x016F9F80);
// ??_7NiStringsExtraData@@6B@ // ??_7NiStringsExtraData@@6B@
RelocAddr<uintptr_t> s_NiStringsExtraDataVtbl(0x01766B50); RelocAddr<uintptr_t> s_NiStringsExtraDataVtbl(0x01857ED0);
// ??_7NiBinaryExtraData@@6B@ // ??_7NiBinaryExtraData@@6B@
RelocAddr<uintptr_t> s_NiBinaryExtraDataVtbl(0x0176B0B0); RelocAddr<uintptr_t> s_NiBinaryExtraDataVtbl(0x0185C7B8);
// ??_7NiBooleanExtraData@@6B@ // ??_7NiBooleanExtraData@@6B@
RelocAddr<uintptr_t> s_NiBooleanExtraDataVtbl(0x0176B240); RelocAddr<uintptr_t> s_NiBooleanExtraDataVtbl(0x0185C970);
NiExtraData* NiExtraData::Create(UInt32 size, uintptr_t vtbl) NiExtraData* NiExtraData::Create(UInt32 size, uintptr_t vtbl)
{ {

@ -220,12 +220,8 @@ public:
UInt64 unk220[2]; // 220 UInt64 unk220[2]; // 220
MEMBER_FN_PREFIX(BSFaceGenAnimationData); MEMBER_FN_PREFIX(BSFaceGenAnimationData);
DEFINE_MEMBER_FN(SetExpression, void, 0x003C3F00, UInt32 type, float value); DEFINE_MEMBER_FN(SetExpression, void, 0x003DB7F0, UInt32 type, float value);
// SE: commented calls have been inlined. Provided alternatives as normal methods. DEFINE_MEMBER_FN(Reset, void, 0x003DB0F0, float value, UInt8 unk1, UInt8 unk2, UInt8 unk3, UInt8 unk4);
//DEFINE_MEMBER_FN(SetPhonome, void, 0x00000000, UInt32 type, float value);
//DEFINE_MEMBER_FN(SetModifier, void, 0x00000000, UInt32 type, float value);
//DEFINE_MEMBER_FN(SetCustom, void, 0x00000000, UInt32 type, float value);
DEFINE_MEMBER_FN(Reset, void, 0x003C38E0, float value, UInt8 unk1, UInt8 unk2, UInt8 unk3, UInt8 unk4);
// Alternatives to inlined functions // Alternatives to inlined functions
void SetPhonome(UInt32 type, float value) void SetPhonome(UInt32 type, float value)

@ -1,14 +1,16 @@
#include "skse64/NiGeometry.h" #include "skse64/NiGeometry.h"
#include "skse64/GameAPI.h" #include "skse64/GameAPI.h"
RelocAddr<_CreateBSTriShape> CreateBSTriShape(0x00C67490); // 4772884F2DDD41847925EAA949727085D82940A1+401
RelocAddr<_CreateBSDynamicTriShape> CreateBSDynamicTriShape(0x00C72180); RelocAddr<_CreateBSTriShape> CreateBSTriShape(0x00C90560);
// 4772884F2DDD41847925EAA949727085D82940A1+414
RelocAddr<_CreateBSDynamicTriShape> CreateBSDynamicTriShape(0x00C9B850);
// ??_7NiTriShape@@6B@ // ??_7NiTriShape@@6B@
static const RelocPtr<uintptr_t> s_NiTriShapeVtbl(0x0176D060); static const RelocPtr<uintptr_t> s_NiTriShapeVtbl(0x0185E998);
// ??_7NiTriStrips@@6B@ // ??_7NiTriStrips@@6B@
static const RelocPtr<uintptr_t> s_NiTriStripsVtbl(0x0176D5A0); static const RelocPtr<uintptr_t> s_NiTriStripsVtbl(0x0185EF50);
void NiGeometryData::AllocateVerts(UInt32 numVerts) void NiGeometryData::AllocateVerts(UInt32 numVerts)
{ {
@ -63,11 +65,11 @@ NiSkinInstance * NiSkinInstance::Create()
BSDismemberSkinInstance * BSDismemberSkinInstance::Create() BSDismemberSkinInstance * BSDismemberSkinInstance::Create()
{ {
void* memory = Heap_Allocate(sizeof(BSDismemberSkinInstance)); typedef BSDismemberSkinInstance * (*_BSDismemberSkinInstance_Create)();
memset(memory, 0, sizeof(BSDismemberSkinInstance)); // 4772884F2DDD41847925EAA949727085D82940A1+2E4
BSDismemberSkinInstance* xData = (BSDismemberSkinInstance*)memory; static RelocAddr <_BSDismemberSkinInstance_Create> BSDismemberSkinInstance_Create(0x00C947A0);
CALL_MEMBER_FN(xData, ctor)();
return xData; return BSDismemberSkinInstance_Create();
} }
NiTriShape * NiTriShape::Create(NiTriShapeData * geometry) NiTriShape * NiTriShape::Create(NiTriShapeData * geometry)

@ -39,8 +39,8 @@ public:
class NiTriBasedGeom : public NiGeometry class NiTriBasedGeom : public NiGeometry
{ {
public: public:
// 2280019D608FD35C9B8EB465875A37FBCC37C462+E4 // 9D070CBFB7F7B861F270D5D29E210A479261131B+C2
DEFINE_MEMBER_FN_1(ctor, NiTriBasedGeom *, 0x00C91440, NiTriShapeData * geometry); DEFINE_MEMBER_FN_1(ctor, NiTriBasedGeom *, 0x00CBD670, NiTriShapeData * geometry);
}; };
class NiTriShape : public NiTriBasedGeom class NiTriShape : public NiTriBasedGeom
@ -129,8 +129,8 @@ public:
UInt32 unk178; // 178 UInt32 unk178; // 178
UInt32 unk17C; // 17C UInt32 unk17C; // 17C
// C33CC4D0EB586CB83500C260EE681221A345C5AE+FF //
DEFINE_MEMBER_FN_0(ctor, BSDynamicTriShape *, 0x00C72300); DEFINE_MEMBER_FN_0(ctor, BSDynamicTriShape *, 0x00C9B9D0);
}; };
STATIC_ASSERT(sizeof(BSDynamicTriShape) == 0x180); STATIC_ASSERT(sizeof(BSDynamicTriShape) == 0x180);
@ -397,8 +397,6 @@ public:
NiTransform m_kRootParentToSkin; // 0C NiTransform m_kRootParentToSkin; // 0C
BoneData * m_pkBoneData; // 40 BoneData * m_pkBoneData; // 40
UInt32 m_uiBones; // 44 UInt32 m_uiBones; // 44
// ctor - AD4780
}; };
STATIC_ASSERT(sizeof(NiSkinData::BoneVertData) == 0x08); STATIC_ASSERT(sizeof(NiSkinData::BoneVertData) == 0x08);
@ -427,8 +425,8 @@ public:
NiSkinInstance * Clone(); NiSkinInstance * Clone();
MEMBER_FN_PREFIX(NiSkinInstance); MEMBER_FN_PREFIX(NiSkinInstance);
DEFINE_MEMBER_FN(Copy, NiSkinInstance*, 0x00C52750); DEFINE_MEMBER_FN(Copy, NiSkinInstance*, 0x00C7ACC0);
DEFINE_MEMBER_FN(ctor, NiSkinInstance *, 0x00C7EB60); DEFINE_MEMBER_FN(ctor, NiSkinInstance *, 0x00CA8A00);
}; };
STATIC_ASSERT(offsetof(NiSkinInstance, lock) == 0x60); STATIC_ASSERT(offsetof(NiSkinInstance, lock) == 0x60);
STATIC_ASSERT(sizeof(NiSkinInstance) == 0x88); STATIC_ASSERT(sizeof(NiSkinInstance) == 0x88);
@ -445,7 +443,6 @@ public:
static BSDismemberSkinInstance * Create(); static BSDismemberSkinInstance * Create();
MEMBER_FN_PREFIX(BSDismemberSkinInstance); // standalone constructor was inlined
DEFINE_MEMBER_FN(ctor, BSDismemberSkinInstance *, 0x00C6BC70);
}; };
STATIC_ASSERT(sizeof(BSDismemberSkinInstance) == 0xA0); STATIC_ASSERT(sizeof(BSDismemberSkinInstance) == 0xA0);

@ -3,9 +3,9 @@
#include "skse64/GameObjects.h" #include "skse64/GameObjects.h"
// 96D2EFF152717F366F7EAAA62CAD7EB12855423D+47 // 96D2EFF152717F366F7EAAA62CAD7EB12855423D+47
RelocAddr<_CreateShaderMaterial> CreateShaderMaterial(0x012CFBC0); RelocAddr<_CreateShaderMaterial> CreateShaderMaterial(0x013F4670);
RelocAddr<_CreateFacegenTintMaterial> CreateFacegenTintMaterial(0x012D26F0); RelocAddr<_CreateFacegenTintMaterial> CreateFacegenTintMaterial(0x013F7170);
void BSLightingShaderMaterial::SetTextureSet(BSTextureSet * newSet) void BSLightingShaderMaterial::SetTextureSet(BSTextureSet * newSet)
{ {

@ -118,8 +118,8 @@ public:
void SetTextureSet(BSTextureSet * textureSet); void SetTextureSet(BSTextureSet * textureSet);
MEMBER_FN_PREFIX(BSLightingShaderMaterial); MEMBER_FN_PREFIX(BSLightingShaderMaterial);
DEFINE_MEMBER_FN(CopyFrom, void, 0x012CEF40, BSLightingShaderMaterial * other); DEFINE_MEMBER_FN(CopyFrom, void, 0x013F3AE0, BSLightingShaderMaterial * other);
DEFINE_MEMBER_FN(dtor_base, void, 0x012CEDE0); DEFINE_MEMBER_FN(dtor_base, void, 0x013F3980);
}; };
STATIC_ASSERT(sizeof(BSLightingShaderMaterial) == 0xA0); STATIC_ASSERT(sizeof(BSLightingShaderMaterial) == 0xA0);
@ -131,7 +131,8 @@ public:
NiTexturePtr unkA0; // A0 inited to 0 NiTexturePtr unkA0; // A0 inited to 0
NiTexturePtr unkA8; // A8 inited to 0 NiTexturePtr unkA8; // A8 inited to 0
DEFINE_MEMBER_FN(dtor, void, 0x012D0450); // uses ??_7BSLightingShaderMaterialEye@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x013F5490);
}; };
class BSLightingShaderMaterialEnvmap : public BSLightingShaderMaterial class BSLightingShaderMaterialEnvmap : public BSLightingShaderMaterial
@ -142,8 +143,8 @@ public:
NiTexturePtr unkA0; // A0 inited to 0 NiTexturePtr unkA0; // A0 inited to 0
NiTexturePtr unkA8; // A8 inited to 0 NiTexturePtr unkA8; // A8 inited to 0
// A3E31C7F999C7F658388C63EFE1489AE31F17A6B+389 // 7EF3019D0F8B78F82664DFE78C15204CD5C8C2B9+392
DEFINE_MEMBER_FN(dtor, void, 0x012D01F0); DEFINE_MEMBER_FN(dtor, void, 0x013F4DB0);
}; };
class BSLightingShaderMaterialFacegen : public BSLightingShaderMaterial class BSLightingShaderMaterialFacegen : public BSLightingShaderMaterial
@ -156,7 +157,7 @@ public:
NiTexturePtr unkB0; // B0 inited to 0 NiTexturePtr unkB0; // B0 inited to 0
// uses ??_7BSLightingShaderMaterialFacegen@@6B@ at +17 // uses ??_7BSLightingShaderMaterialFacegen@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x012D1FB0); DEFINE_MEMBER_FN(dtor, void, 0x013F6A80);
}; };
class BSLightingShaderMaterialGlowmap : public BSLightingShaderMaterial class BSLightingShaderMaterialGlowmap : public BSLightingShaderMaterial
@ -167,7 +168,7 @@ public:
NiTexturePtr glowMap; // A0 NiTexturePtr glowMap; // A0
// uses ??_7BSLightingShaderMaterialGlowmap@@6B@ at +17 // uses ??_7BSLightingShaderMaterialGlowmap@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x012D1050); DEFINE_MEMBER_FN(dtor, void, 0x013F5B90);
}; };
class BSLightingShaderMaterialParallax : public BSLightingShaderMaterial class BSLightingShaderMaterialParallax : public BSLightingShaderMaterial
@ -178,7 +179,7 @@ public:
NiTexturePtr unkA0; // A0 NiTexturePtr unkA0; // A0
// uses ??_7BSLightingShaderMaterialParallax@@6B@ at +17 // uses ??_7BSLightingShaderMaterialParallax@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x012D14F0); DEFINE_MEMBER_FN(dtor, void, 0x013F6010);
}; };
class BSLightingShaderMaterialMultiLayerParallax : public BSLightingShaderMaterial class BSLightingShaderMaterialMultiLayerParallax : public BSLightingShaderMaterial
@ -191,7 +192,7 @@ public:
NiTexturePtr unkB0; // A0 NiTexturePtr unkB0; // A0
// uses ??_7BSLightingShaderMaterialMultiLayerParallax@@6B@ at +17 // uses ??_7BSLightingShaderMaterialMultiLayerParallax@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x012D3B40); DEFINE_MEMBER_FN(dtor, void, 0x013F84F0);
}; };
class BSLightingShaderMaterialParallaxOcc : public BSLightingShaderMaterial class BSLightingShaderMaterialParallaxOcc : public BSLightingShaderMaterial
@ -202,7 +203,7 @@ public:
NiTexturePtr unkA0; // A0 NiTexturePtr unkA0; // A0
// uses ??_7BSLightingShaderMaterialParallaxOcc@@6B@ at +17 // uses ??_7BSLightingShaderMaterialParallaxOcc@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x012D1990); DEFINE_MEMBER_FN(dtor, void, 0x013F6490);
}; };
class BSLightingShaderMaterialFacegenTint : public BSLightingShaderMaterial class BSLightingShaderMaterialFacegenTint : public BSLightingShaderMaterial
@ -228,4 +229,3 @@ extern RelocAddr<_CreateShaderMaterial> CreateShaderMaterial;
// This is actually vtable+8 but it has no dependency on the 'this' ptr // This is actually vtable+8 but it has no dependency on the 'this' ptr
typedef BSLightingShaderMaterialFacegenTint * (*_CreateFacegenTintMaterial)(); typedef BSLightingShaderMaterialFacegenTint * (*_CreateFacegenTintMaterial)();
extern RelocAddr<_CreateFacegenTintMaterial> CreateFacegenTintMaterial; extern RelocAddr<_CreateFacegenTintMaterial> CreateFacegenTintMaterial;

@ -1,24 +1,14 @@
#include "skse64/NiNodes.h" #include "skse64/NiNodes.h"
#include "skse64/GameObjects.h" #include "skse64/GameObjects.h"
const _GetBoneNames GetBoneNames = (_GetBoneNames)0x00000000; // Builds the skeleton node name list if it doesn't exist
const _GetNodeByName GetNodeByName = (_GetNodeByName)0x00000000;
const _GetNodeNameByWeaponType GetNodeNameByWeaponType = (_GetNodeNameByWeaponType)0x00000000;
const _GetInternalNode GetInternalNode = (_GetInternalNode)0x00000000;
const _SwapNodeParent SwapNodeParent = (_SwapNodeParent)0x00000000;
NiBoneNames * NiBoneNames::GetSingleton(void) NiBoneNames * NiBoneNames::GetSingleton(void)
{ {
return (NiBoneNames *)0x00000000; // 33EBA690BF2A27ACE16840951CA740822F8A4756+9A
static RelocAddr <NiBoneNames *> addr(0x01F59E10);
return addr;
} }
NiWeaponNodes * NiWeaponNodes::GetSingleton(void) NiNode * NiNode::Create(UInt16 arrBufLen)
{
return (NiWeaponNodes *)0x00000000;
}
NiNode * NiNode::Create(UInt32 arrBufLen)
{ {
void* memory = Heap_Allocate(sizeof(NiNode)); void* memory = Heap_Allocate(sizeof(NiNode));
memset(memory, 0, sizeof(NiNode)); memset(memory, 0, sizeof(NiNode));

@ -23,9 +23,9 @@ public:
NiTArray <NiAVObject *> m_children; // 110 NiTArray <NiAVObject *> m_children; // 110
static NiNode * Create(UInt32 arrBufLen = 0); static NiNode * Create(UInt16 arrBufLen = 0);
DEFINE_MEMBER_FN_1(ctor, NiNode*, 0x00C57A60, UInt16 arrBufLen); DEFINE_MEMBER_FN_1(ctor, NiNode*, 0x00C7FD70, UInt16 arrBufLen);
}; };
STATIC_ASSERT(sizeof(NiNode) == 0x128); STATIC_ASSERT(sizeof(NiNode) == 0x128);
@ -37,7 +37,8 @@ public:
static BSFadeNode * Create(); static BSFadeNode * Create();
DEFINE_MEMBER_FN_0(ctor, BSFadeNode *, 0x0128F900); // 905B699D46B52EE8B3BD44B9DAFBC2F728A310B5+81
DEFINE_MEMBER_FN_0(ctor, BSFadeNode *, 0x013B6440);
}; };
STATIC_ASSERT(sizeof(BSFadeNode) == 0x158); STATIC_ASSERT(sizeof(BSFadeNode) == 0x158);
@ -67,7 +68,7 @@ public:
}; };
MEMBER_FN_PREFIX(BSFaceGenNiNode); MEMBER_FN_PREFIX(BSFaceGenNiNode);
DEFINE_MEMBER_FN(AdjustHeadMorph, void, 0x003D90E0, UInt32 unk04, UInt32 unk08, float delta); DEFINE_MEMBER_FN(AdjustHeadMorph, void, 0x003F1300, UInt32 unk04, UInt32 unk08, float delta);
}; };
//STATIC_ASSERT(sizeof(BSFaceGenNiNode) == 0xEC); //STATIC_ASSERT(sizeof(BSFaceGenNiNode) == 0xEC);
@ -153,10 +154,6 @@ public:
NiNode * niNode; // 238 NiNode * niNode; // 238
MEMBER_FN_PREFIX(LocalMapCullingProcess); MEMBER_FN_PREFIX(LocalMapCullingProcess);
DEFINE_MEMBER_FN(ctor, void, 0x00000000);
DEFINE_MEMBER_FN(CreateMapTarget, BSRenderTargetGroup **, 0x00000000, UInt32 width, UInt32 height);
DEFINE_MEMBER_FN(Init, void, 0x00000000);
DEFINE_MEMBER_FN(Process, void, 0x00000000);
}; };
//STATIC_ASSERT(offsetof(LocalMapCullingProcess, localMapCamera) == 0x170); //STATIC_ASSERT(offsetof(LocalMapCullingProcess, localMapCamera) == 0x170);
@ -256,6 +253,7 @@ public:
BSFixedString animationGraphVariables[101]; BSFixedString animationGraphVariables[101];
}; };
// this is just part of NiBoneNames starting at offset 0xB0
class NiWeaponNodes class NiWeaponNodes
{ {
public: public:
@ -275,22 +273,5 @@ public:
kNumTypes kNumTypes
}; };
static NiWeaponNodes * GetSingleton(void);
BSFixedString nodes[kNumTypes]; BSFixedString nodes[kNumTypes];
}; };
typedef NiBoneNames * (* _GetBoneNames)(void);
extern const _GetBoneNames GetBoneNames;
typedef NiAVObject * (* _GetNodeByName)(NiNode * parent, BSFixedString nodeName, UInt8 unk1);
extern const _GetNodeByName GetNodeByName;
typedef BSFixedString (* _GetNodeNameByWeaponType)(UInt32 weaponType);
extern const _GetNodeNameByWeaponType GetNodeNameByWeaponType;
typedef BSFixedString (* _GetInternalNode)(UInt32 type, UInt8 unk1);
extern const _GetInternalNode GetInternalNode;
typedef UInt8 (* _SwapNodeParent)(NiNode * skeleton, BSFixedString sourceNode, BSFixedString destNode, UInt8 unk1);
extern const _SwapNodeParent SwapNodeParent;

@ -1,15 +1,15 @@
#include "skse64/NiObjects.h" #include "skse64/NiObjects.h"
#include "skse64/NiExtraData.h" #include "skse64/NiExtraData.h"
// A941556DD95C558F6FC490138ACEA2962E9A4F8D+2E // 2789403034E226069B9EC04A8AC7BD367AF61384+BC
RelocPtr<float> g_worldToCamMatrix(0x02F4C910); RelocPtr<float> g_worldToCamMatrix(0x02FE8840);
// A941556DD95C558F6FC490138ACEA2962E9A4F8D+B0 // 2789403034E226069B9EC04A8AC7BD367AF61384+13E
RelocPtr<NiRect<float>> g_viewPort(0x02F4DED0); RelocPtr<NiRect<float>> g_viewPort(0x02FE9DE8);
RelocAddr<_WorldPtToScreenPt3_Internal> WorldPtToScreenPt3_Internal(0x00C66580); RelocAddr<_WorldPtToScreenPt3_Internal> WorldPtToScreenPt3_Internal(0x00C8F5B0);
RelocAddr<_NiAllocate> NiAllocate(0x00C24750); RelocAddr<_NiAllocate> NiAllocate(0x00C4AF80);
RelocAddr<_NiFree> NiFree(0x00C249B0); RelocAddr<_NiFree> NiFree(0x00C4B220);
void NiRefObject::IncRef(void) void NiRefObject::IncRef(void)
{ {

@ -9,8 +9,6 @@
// generally other children should go in other files // generally other children should go in other files
// especially if they can be grouped // especially if they can be grouped
// SE notice: all definitions updated except BSRenderTargetGroup
class NiCloningProcess; class NiCloningProcess;
class NiStream; class NiStream;
class NiObjectGroup; class NiObjectGroup;
@ -125,7 +123,7 @@ public:
MEMBER_FN_PREFIX(NiObject); MEMBER_FN_PREFIX(NiObject);
DEFINE_MEMBER_FN(DeepCopy, NiStream *, 0x00C529A0, NiObject ** result); DEFINE_MEMBER_FN(DeepCopy, NiStream *, 0x00C7AEB0, NiObject ** result);
}; };
STATIC_ASSERT(sizeof(NiObject) == 0x10); STATIC_ASSERT(sizeof(NiObject) == 0x10);
@ -220,8 +218,8 @@ public:
UInt8 pad10A[6]; // 10A UInt8 pad10A[6]; // 10A
MEMBER_FN_PREFIX(NiAVObject); MEMBER_FN_PREFIX(NiAVObject);
// 3239A102C6E8818F0FBFEF58A1B6EA724A237258+26 // A5B2FC7D42E72BA4F6A679BAC0BAE17C12A4AFE1+E3
DEFINE_MEMBER_FN(UpdateNode, void, 0x00C56B50, ControllerUpdateContext * ctx); DEFINE_MEMBER_FN(UpdateNode, void, 0x00C7EDA0, ControllerUpdateContext * ctx);
}; };
STATIC_ASSERT(offsetof(NiAVObject, m_localTransform) == 0x48); STATIC_ASSERT(offsetof(NiAVObject, m_localTransform) == 0x48);
STATIC_ASSERT(offsetof(NiAVObject, m_worldTransform) == 0x7C); STATIC_ASSERT(offsetof(NiAVObject, m_worldTransform) == 0x7C);
@ -243,11 +241,6 @@ public:
UInt32 unk28; // 28 UInt32 unk28; // 28
UInt32 unk2C; // 2C inited to FFFFFFFF UInt32 unk2C; // 2C inited to FFFFFFFF
NiRenderedTexture * renderedTexture[4]; // 30 NiRenderedTexture * renderedTexture[4]; // 30
static BSRenderTargetGroup * GetPlayerFaceMask(void)
{
return *((BSRenderTargetGroup **)0x00000000);
}
}; };
// 20 // 20
@ -269,10 +262,11 @@ public:
UInt32 pad1C; // 1C UInt32 pad1C; // 1C
MEMBER_FN_PREFIX(BSFaceGenModel); MEMBER_FN_PREFIX(BSFaceGenModel);
DEFINE_MEMBER_FN(ctor, void, 0x003D4070); DEFINE_MEMBER_FN(ctor, void, 0x003EC1A0);
DEFINE_MEMBER_FN(CopyFrom, void, 0x003D4150, BSFaceGenModel * other); DEFINE_MEMBER_FN(CopyFrom, void, 0x003EC240, BSFaceGenModel * other);
DEFINE_MEMBER_FN(SetModelData, bool, 0x003D47C0, const char * meshPath, void * unk1, UInt8 unk2); DEFINE_MEMBER_FN(SetModelData, bool, 0x003EC9C0, const char * meshPath, void * unk1, UInt8 unk2);
DEFINE_MEMBER_FN(ApplyMorph, UInt8, 0x003D4630, BSFixedString * morphName, TESModelTri * triModel, NiAVObject ** headNode, float relative, UInt8 unk1); DEFINE_MEMBER_FN(ApplyMorph, UInt8, 0x003EC820, BSFixedString * morphName, TESModelTri * triModel, NiAVObject ** headNode, float relative, UInt8 unk1);
DEFINE_MEMBER_FN(ApplyRaceMorph, UInt8, 0x003EC6D0, BSFixedString* morphName, TESModelTri* triModel, NiAVObject** headNode, float relative, UInt8 unk1);
}; };
// 18 // 18
@ -283,7 +277,7 @@ public:
MEMBER_FN_PREFIX(BSFaceGenMorphData); MEMBER_FN_PREFIX(BSFaceGenMorphData);
DEFINE_MEMBER_FN(ApplyMorph, UInt8, 0x003D7860, const char ** morphName, NiAVObject * faceTrishape, float relative, UInt8 unk2); DEFINE_MEMBER_FN(ApplyMorph, UInt8, 0x003EF6C0, const char ** morphName, NiAVObject * faceTrishape, float relative, UInt8 unk2);
}; };
// 20 // 20

@ -197,10 +197,11 @@ public:
// This function seems to fix weird lighting issues when creating armors internally // This function seems to fix weird lighting issues when creating armors internally
// Not particularly sure what it does but it seems to mess around with a lot material flags // Not particularly sure what it does but it seems to mess around with a lot material flags
MEMBER_FN_PREFIX(BSLightingShaderProperty); MEMBER_FN_PREFIX(BSLightingShaderProperty);
DEFINE_MEMBER_FN(InitializeShader, UInt32, 0x012C56D0, BSGeometry * geometry); DEFINE_MEMBER_FN(InitializeShader, UInt32, 0x013E9B20, BSGeometry * geometry);
DEFINE_MEMBER_FN(SetMaterial, UInt32, 0x01291D40, BSLightingShaderMaterial * material, bool unk1); // unk1 usually 1 DEFINE_MEMBER_FN(SetMaterial, UInt32, 0x013B8A20, BSLightingShaderMaterial * material, bool unk1); // unk1 usually 1
DEFINE_MEMBER_FN(SetFlags, UInt64, 0x01291C30, UInt8 unk1, UInt8 unk2); DEFINE_MEMBER_FN(SetFlags, UInt64, 0x013B8910, UInt8 unk1, UInt8 unk2);
DEFINE_MEMBER_FN(InvalidateMaterial, bool, 0x0019C3B0); // InvalidateMaterial was inlined away
DEFINE_MEMBER_FN(InvalidateTextures, void, 0x012C5AB0, UInt32 unk1); // unk1 usually 0, called after material Releases textures
DEFINE_MEMBER_FN(InvalidateTextures, void, 0x013E9ED0, UInt32 unk1); // unk1 usually 0, called after material Releases textures
}; };
STATIC_ASSERT(offsetof(BSLightingShaderProperty, emissiveColor) == 0xF0); STATIC_ASSERT(offsetof(BSLightingShaderProperty, emissiveColor) == 0xF0);

@ -21,413 +21,413 @@ bool IsType(NiRTTI * rtti, const NiRTTI * typeInfo)
return false; return false;
} }
const NiRTTI * NiRTTI_BGSDecalNode = (NiRTTI *)0x01EC4338; const NiRTTI * NiRTTI_BGSDecalNode = (NiRTTI *)0x01F5FC20;
const NiRTTI * NiRTTI_BSAnimGroupSequence = (NiRTTI *)0x01EC44B0; const NiRTTI * NiRTTI_BSAnimGroupSequence = (NiRTTI *)0x01F5FD80;
const NiRTTI * NiRTTI_BSSplatterExtraData = (NiRTTI *)0x02EC5500; const NiRTTI * NiRTTI_BSSplatterExtraData = (NiRTTI *)0x02F60DD0;
const NiRTTI * NiRTTI_BGSAddonNodeSoundHandleExtra = (NiRTTI *)0x02EC5968; const NiRTTI * NiRTTI_BGSAddonNodeSoundHandleExtra = (NiRTTI *)0x02F61238;
const NiRTTI * NiRTTI_REFRSyncController = (NiRTTI *)0x02EFF9C0; const NiRTTI * NiRTTI_REFRSyncController = (NiRTTI *)0x02F9B250;
const NiRTTI * NiRTTI_bhkCartTether = (NiRTTI *)0x02F01118; const NiRTTI * NiRTTI_bhkCartTether = (NiRTTI *)0x02F9C9B8;
const NiRTTI * NiRTTI_bhkTiltPreventAction = (NiRTTI *)0x02F01128; const NiRTTI * NiRTTI_bhkTiltPreventAction = (NiRTTI *)0x02F9C9C8;
const NiRTTI * NiRTTI_bhkWheelAction = (NiRTTI *)0x02F01138; const NiRTTI * NiRTTI_bhkWheelAction = (NiRTTI *)0x02F9C9D8;
const NiRTTI * NiRTTI_BSFaceGenAnimationData = (NiRTTI *)0x02F01780; const NiRTTI * NiRTTI_BSFaceGenAnimationData = (NiRTTI *)0x02F9D018;
const NiRTTI * NiRTTI_BSFaceGenModelExtraData = (NiRTTI *)0x02F07CA0; const NiRTTI * NiRTTI_BSFaceGenModelExtraData = (NiRTTI *)0x02FA3540;
const NiRTTI * NiRTTI_BSFaceGenBaseMorphExtraData = (NiRTTI *)0x02F07CC8; const NiRTTI * NiRTTI_BSFaceGenBaseMorphExtraData = (NiRTTI *)0x02FA3568;
const NiRTTI * NiRTTI_BSFaceGenMorphData = (NiRTTI *)0x02F07CD8; const NiRTTI * NiRTTI_BSFaceGenMorphData = (NiRTTI *)0x02FA3578;
const NiRTTI * NiRTTI_BSFaceGenMorphDataHead = (NiRTTI *)0x02F07CE8; const NiRTTI * NiRTTI_BSFaceGenMorphDataHead = (NiRTTI *)0x02FA3588;
const NiRTTI * NiRTTI_BSFaceGenMorphDataHair = (NiRTTI *)0x02F07CF8; const NiRTTI * NiRTTI_BSFaceGenMorphDataHair = (NiRTTI *)0x02FA3598;
const NiRTTI * NiRTTI_BSFaceGenNiNode = (NiRTTI *)0x02F07D38; const NiRTTI * NiRTTI_BSFaceGenNiNode = (NiRTTI *)0x02FA35D8;
const NiRTTI * NiRTTI_BSTempEffect = (NiRTTI *)0x02F0D428; const NiRTTI * NiRTTI_BSTempEffect = (NiRTTI *)0x02FA89A8;
const NiRTTI * NiRTTI_BSTempEffectDebris = (NiRTTI *)0x02F0D4A8; const NiRTTI * NiRTTI_BSTempEffectDebris = (NiRTTI *)0x02FA8A28;
const NiRTTI * NiRTTI_BSTempEffectGeometryDecal = (NiRTTI *)0x02F0D4C8; const NiRTTI * NiRTTI_BSTempEffectGeometryDecal = (NiRTTI *)0x02FA8A48;
const NiRTTI * NiRTTI_BSTempEffectParticle = (NiRTTI *)0x02F0D578; const NiRTTI * NiRTTI_BSTempEffectParticle = (NiRTTI *)0x02FA8AF8;
const NiRTTI * NiRTTI_BSTempEffectSimpleDecal = (NiRTTI *)0x02F0D5A0; const NiRTTI * NiRTTI_BSTempEffectSimpleDecal = (NiRTTI *)0x02FA8B20;
const NiRTTI * NiRTTI_BSTempEffectSPG = (NiRTTI *)0x02F0D5B8; const NiRTTI * NiRTTI_BSTempEffectSPG = (NiRTTI *)0x02FA8B38;
const NiRTTI * NiRTTI_bhkAutoWater = (NiRTTI *)0x02F249A0; const NiRTTI * NiRTTI_bhkAutoWater = (NiRTTI *)0x02FBFF10;
const NiRTTI * NiRTTI_ModelReferenceEffect = (NiRTTI *)0x02F261D8; const NiRTTI * NiRTTI_ModelReferenceEffect = (NiRTTI *)0x02FC1768;
const NiRTTI * NiRTTI_ReferenceEffect = (NiRTTI *)0x02F26210; const NiRTTI * NiRTTI_ReferenceEffect = (NiRTTI *)0x02FC17A0;
const NiRTTI * NiRTTI_ShaderReferenceEffect = (NiRTTI *)0x02F26240; const NiRTTI * NiRTTI_ShaderReferenceEffect = (NiRTTI *)0x02FC17D0;
const NiRTTI * NiRTTI_SummonPlacementEffect = (NiRTTI *)0x02F26270; const NiRTTI * NiRTTI_SummonPlacementEffect = (NiRTTI *)0x02FC1800;
const NiRTTI * NiRTTI_SceneGraph = (NiRTTI *)0x02F38950; const NiRTTI * NiRTTI_SceneGraph = (NiRTTI *)0x02FD4878;
const NiRTTI * NiRTTI_BSDoorHavokController = (NiRTTI *)0x02F3A680; const NiRTTI * NiRTTI_BSDoorHavokController = (NiRTTI *)0x02FD6598;
const NiRTTI * NiRTTI_BSPlayerDistanceCheckController = (NiRTTI *)0x02F3A690; const NiRTTI * NiRTTI_BSPlayerDistanceCheckController = (NiRTTI *)0x02FD65A8;
const NiRTTI * NiRTTI_BSSimpleScaleController = (NiRTTI *)0x02F3A6A0; const NiRTTI * NiRTTI_BSSimpleScaleController = (NiRTTI *)0x02FD65B8;
const NiRTTI * NiRTTI_NiObject = (NiRTTI *)0x03012388; const NiRTTI * NiRTTI_NiObject = (NiRTTI *)0x030AE130;
const NiRTTI * NiRTTI_NiAVObject = (NiRTTI *)0x030123C0; const NiRTTI * NiRTTI_NiAVObject = (NiRTTI *)0x030AE168;
const NiRTTI * NiRTTI_NiNode = (NiRTTI *)0x030123E0; const NiRTTI * NiRTTI_NiNode = (NiRTTI *)0x030AE188;
const NiRTTI * NiRTTI_NiObjectNET = (NiRTTI *)0x03012508; const NiRTTI * NiRTTI_NiObjectNET = (NiRTTI *)0x030AE308;
const NiRTTI * NiRTTI_NiLight = (NiRTTI *)0x03012568; const NiRTTI * NiRTTI_NiLight = (NiRTTI *)0x030AE360;
const NiRTTI * NiRTTI_NiSwitchNode = (NiRTTI *)0x03012578; const NiRTTI * NiRTTI_NiSwitchNode = (NiRTTI *)0x030AE370;
const NiRTTI * NiRTTI_NiStringsExtraData = (NiRTTI *)0x03012588; const NiRTTI * NiRTTI_NiStringsExtraData = (NiRTTI *)0x030AE380;
const NiRTTI * NiRTTI_NiCamera = (NiRTTI *)0x03012598; const NiRTTI * NiRTTI_NiCamera = (NiRTTI *)0x030AE390;
const NiRTTI * NiRTTI_BSTriShape = (NiRTTI *)0x030125B0; const NiRTTI * NiRTTI_BSTriShape = (NiRTTI *)0x030AE3A8;
const NiRTTI * NiRTTI_NiProperty = (NiRTTI *)0x030125C0; const NiRTTI * NiRTTI_NiProperty = (NiRTTI *)0x030AE3B8;
const NiRTTI * NiRTTI_NiAlphaProperty = (NiRTTI *)0x030125D8; const NiRTTI * NiRTTI_NiAlphaProperty = (NiRTTI *)0x030AE3D0;
const NiRTTI * NiRTTI_NiSourceTexture = (NiRTTI *)0x03013608; const NiRTTI * NiRTTI_NiSourceTexture = (NiRTTI *)0x030AF408;
const NiRTTI * NiRTTI_BSFlattenedBoneTree = (NiRTTI *)0x03013618; const NiRTTI * NiRTTI_BSFlattenedBoneTree = (NiRTTI *)0x030AF418;
const NiRTTI * NiRTTI_BSDismemberSkinInstance = (NiRTTI *)0x03013660; const NiRTTI * NiRTTI_BSDismemberSkinInstance = (NiRTTI *)0x030AF460;
const NiRTTI * NiRTTI_NiStringExtraData = (NiRTTI *)0x03013670; const NiRTTI * NiRTTI_NiStringExtraData = (NiRTTI *)0x030AF470;
const NiRTTI * NiRTTI_NiTimeController = (NiRTTI *)0x03013680; const NiRTTI * NiRTTI_NiTimeController = (NiRTTI *)0x030AF480;
const NiRTTI * NiRTTI_NiExtraData = (NiRTTI *)0x030136A0; const NiRTTI * NiRTTI_NiExtraData = (NiRTTI *)0x030AF4A0;
const NiRTTI * NiRTTI_NiGeometryData = (NiRTTI *)0x030136B0; const NiRTTI * NiRTTI_NiGeometryData = (NiRTTI *)0x030AF4B0;
const NiRTTI * NiRTTI_BSGeometry = (NiRTTI *)0x030136C8; const NiRTTI * NiRTTI_BSGeometry = (NiRTTI *)0x030AF4C8;
const NiRTTI * NiRTTI_BSDynamicTriShape = (NiRTTI *)0x030136E0; const NiRTTI * NiRTTI_BSDynamicTriShape = (NiRTTI *)0x030AF4E0;
const NiRTTI * NiRTTI_NiPointLight = (NiRTTI *)0x030136F0; const NiRTTI * NiRTTI_NiPointLight = (NiRTTI *)0x030AF4F0;
const NiRTTI * NiRTTI_NiDefaultAVObjectPalette = (NiRTTI *)0x03013700; const NiRTTI * NiRTTI_NiDefaultAVObjectPalette = (NiRTTI *)0x030AF500;
const NiRTTI * NiRTTI_NiBillboardNode = (NiRTTI *)0x03013728; const NiRTTI * NiRTTI_NiBillboardNode = (NiRTTI *)0x030AF528;
const NiRTTI * NiRTTI_NiDirectionalLight = (NiRTTI *)0x03013738; const NiRTTI * NiRTTI_NiDirectionalLight = (NiRTTI *)0x030AF538;
const NiRTTI * NiRTTI_NiCullingProcess = (NiRTTI *)0x03013748; const NiRTTI * NiRTTI_NiCullingProcess = (NiRTTI *)0x030AF548;
const NiRTTI * NiRTTI_NiParticles = (NiRTTI *)0x03013760; const NiRTTI * NiRTTI_NiParticles = (NiRTTI *)0x030AF560;
const NiRTTI * NiRTTI_NiTexture = (NiRTTI *)0x030137A0; const NiRTTI * NiRTTI_NiTexture = (NiRTTI *)0x030AF5A0;
const NiRTTI * NiRTTI_NiSkinPartition = (NiRTTI *)0x030138B0; const NiRTTI * NiRTTI_NiSkinPartition = (NiRTTI *)0x030AF6B0;
const NiRTTI * NiRTTI_NiVertWeightsExtraData = (NiRTTI *)0x030138C0; const NiRTTI * NiRTTI_NiVertWeightsExtraData = (NiRTTI *)0x030AF6C0;
const NiRTTI * NiRTTI_NiSkinInstance = (NiRTTI *)0x030138D0; const NiRTTI * NiRTTI_NiSkinInstance = (NiRTTI *)0x030AF6D0;
const NiRTTI * NiRTTI_NiAVObjectPalette = (NiRTTI *)0x030138E0; const NiRTTI * NiRTTI_NiAVObjectPalette = (NiRTTI *)0x030AF6E0;
const NiRTTI * NiRTTI_NiGeometry = (NiRTTI *)0x030138F0; const NiRTTI * NiRTTI_NiGeometry = (NiRTTI *)0x030AF6F0;
const NiRTTI * NiRTTI_NiSkinData = (NiRTTI *)0x03013920; const NiRTTI * NiRTTI_NiSkinData = (NiRTTI *)0x030AF720;
const NiRTTI * NiRTTI_NiShadeProperty = (NiRTTI *)0x03013930; const NiRTTI * NiRTTI_NiShadeProperty = (NiRTTI *)0x030AF730;
const NiRTTI * NiRTTI_NiAlphaAccumulator = (NiRTTI *)0x03013948; const NiRTTI * NiRTTI_NiAlphaAccumulator = (NiRTTI *)0x030AF748;
const NiRTTI * NiRTTI_NiAmbientLight = (NiRTTI *)0x03013958; const NiRTTI * NiRTTI_NiAmbientLight = (NiRTTI *)0x030AF758;
const NiRTTI * NiRTTI_NiBinaryExtraData = (NiRTTI *)0x03013968; const NiRTTI * NiRTTI_NiBinaryExtraData = (NiRTTI *)0x030AF768;
const NiRTTI * NiRTTI_NiBooleanExtraData = (NiRTTI *)0x03013978; const NiRTTI * NiRTTI_NiBooleanExtraData = (NiRTTI *)0x030AF778;
const NiRTTI * NiRTTI_NiBSPNode = (NiRTTI *)0x03013988; const NiRTTI * NiRTTI_NiBSPNode = (NiRTTI *)0x030AF788;
const NiRTTI * NiRTTI_NiColorExtraData = (NiRTTI *)0x03013998; const NiRTTI * NiRTTI_NiColorExtraData = (NiRTTI *)0x030AF798;
const NiRTTI * NiRTTI_NiFloatExtraData = (NiRTTI *)0x030139A8; const NiRTTI * NiRTTI_NiFloatExtraData = (NiRTTI *)0x030AF7A8;
const NiRTTI * NiRTTI_NiFloatsExtraData = (NiRTTI *)0x030139B8; const NiRTTI * NiRTTI_NiFloatsExtraData = (NiRTTI *)0x030AF7B8;
const NiRTTI * NiRTTI_NiFogProperty = (NiRTTI *)0x030139C8; const NiRTTI * NiRTTI_NiFogProperty = (NiRTTI *)0x030AF7C8;
const NiRTTI * NiRTTI_NiIntegerExtraData = (NiRTTI *)0x030139E0; const NiRTTI * NiRTTI_NiIntegerExtraData = (NiRTTI *)0x030AF7E0;
const NiRTTI * NiRTTI_NiIntegersExtraData = (NiRTTI *)0x030139F0; const NiRTTI * NiRTTI_NiIntegersExtraData = (NiRTTI *)0x030AF7F0;
const NiRTTI * NiRTTI_NiParticlesData = (NiRTTI *)0x03013A38; const NiRTTI * NiRTTI_NiParticlesData = (NiRTTI *)0x030AF838;
const NiRTTI * NiRTTI_NiParticleMeshesData = (NiRTTI *)0x03013A48; const NiRTTI * NiRTTI_NiParticleMeshesData = (NiRTTI *)0x030AF848;
const NiRTTI * NiRTTI_NiParticleMeshes = (NiRTTI *)0x03013A58; const NiRTTI * NiRTTI_NiParticleMeshes = (NiRTTI *)0x030AF858;
const NiRTTI * NiRTTI_NiSpotLight = (NiRTTI *)0x03013A68; const NiRTTI * NiRTTI_NiSpotLight = (NiRTTI *)0x030AF868;
const NiRTTI * NiRTTI_NiSwitchStringExtraData = (NiRTTI *)0x03013A78; const NiRTTI * NiRTTI_NiSwitchStringExtraData = (NiRTTI *)0x030AF878;
const NiRTTI * NiRTTI_NiTriShapeData = (NiRTTI *)0x03013A88; const NiRTTI * NiRTTI_NiTriShapeData = (NiRTTI *)0x030AF888;
const NiRTTI * NiRTTI_NiTriShape = (NiRTTI *)0x03013A98; const NiRTTI * NiRTTI_NiTriShape = (NiRTTI *)0x030AF898;
const NiRTTI * NiRTTI_NiTriStripsData = (NiRTTI *)0x03013AA8; const NiRTTI * NiRTTI_NiTriStripsData = (NiRTTI *)0x030AF8A8;
const NiRTTI * NiRTTI_NiTriStrips = (NiRTTI *)0x03013AB8; const NiRTTI * NiRTTI_NiTriStrips = (NiRTTI *)0x030AF8B8;
const NiRTTI * NiRTTI_NiVectorExtraData = (NiRTTI *)0x03013AC8; const NiRTTI * NiRTTI_NiVectorExtraData = (NiRTTI *)0x030AF8C8;
const NiRTTI * NiRTTI_BSLODTriShape = (NiRTTI *)0x03013AF0; const NiRTTI * NiRTTI_BSLODTriShape = (NiRTTI *)0x030AF8F0;
const NiRTTI * NiRTTI_NiAdditionalGeometryData = (NiRTTI *)0x03013B00; const NiRTTI * NiRTTI_NiAdditionalGeometryData = (NiRTTI *)0x030AF900;
const NiRTTI * NiRTTI_BSSegmentedTriShape = (NiRTTI *)0x03013B18; const NiRTTI * NiRTTI_BSSegmentedTriShape = (NiRTTI *)0x030AF918;
const NiRTTI * NiRTTI_NiAccumulator = (NiRTTI *)0x03013B50; const NiRTTI * NiRTTI_NiBackToFrontAccumulator = (NiRTTI *)0x030AF950;
const NiRTTI * NiRTTI_NiBackToFrontAccumulator = (NiRTTI *)0x03013B60; const NiRTTI * NiRTTI_NiAccumulator = (NiRTTI *)0x030AF960;
const NiRTTI * NiRTTI_NiTriBasedGeomData = (NiRTTI *)0x03013B70; const NiRTTI * NiRTTI_NiTriBasedGeomData = (NiRTTI *)0x030AF970;
const NiRTTI * NiRTTI_NiTriBasedGeom = (NiRTTI *)0x03013B80; const NiRTTI * NiRTTI_NiTriBasedGeom = (NiRTTI *)0x030AF980;
const NiRTTI * NiRTTI_NiCollisionData = (NiRTTI *)0x03013BC8; const NiRTTI * NiRTTI_NiCollisionData = (NiRTTI *)0x030AF9C0;
const NiRTTI * NiRTTI_NiControllerManager = (NiRTTI *)0x03013C58; const NiRTTI * NiRTTI_NiControllerManager = (NiRTTI *)0x030AFA58;
const NiRTTI * NiRTTI_NiControllerSequence = (NiRTTI *)0x03013C78; const NiRTTI * NiRTTI_NiControllerSequence = (NiRTTI *)0x030AFA78;
const NiRTTI * NiRTTI_NiBlendInterpolator = (NiRTTI *)0x03013CA8; const NiRTTI * NiRTTI_NiBlendInterpolator = (NiRTTI *)0x030AFAA8;
const NiRTTI * NiRTTI_NiMultiTargetTransformController = (NiRTTI *)0x03013CB8; const NiRTTI * NiRTTI_NiMultiTargetTransformController = (NiRTTI *)0x030AFAB8;
const NiRTTI * NiRTTI_BSMultiTargetTreadTransfController = (NiRTTI *)0x03013CC8; const NiRTTI * NiRTTI_BSMultiTargetTreadTransfController = (NiRTTI *)0x030AFAC8;
const NiRTTI * NiRTTI_NiInterpController = (NiRTTI *)0x03013CD8; const NiRTTI * NiRTTI_NiInterpController = (NiRTTI *)0x030AFAD8;
const NiRTTI * NiRTTI_NiFloatData = (NiRTTI *)0x03014AA8; const NiRTTI * NiRTTI_NiFloatData = (NiRTTI *)0x030B08A8;
const NiRTTI * NiRTTI_NiFloatInterpolator = (NiRTTI *)0x03014AB8; const NiRTTI * NiRTTI_NiFloatInterpolator = (NiRTTI *)0x030B08B8;
const NiRTTI * NiRTTI_NiColorData = (NiRTTI *)0x03014AC8; const NiRTTI * NiRTTI_NiColorData = (NiRTTI *)0x030B08C8;
const NiRTTI * NiRTTI_NiColorInterpolator = (NiRTTI *)0x03014AD8; const NiRTTI * NiRTTI_NiColorInterpolator = (NiRTTI *)0x030B08D8;
const NiRTTI * NiRTTI_NiSingleInterpController = (NiRTTI *)0x03014AE8; const NiRTTI * NiRTTI_NiSingleInterpController = (NiRTTI *)0x030B08E8;
const NiRTTI * NiRTTI_NiTransformInterpolator = (NiRTTI *)0x03014AF8; const NiRTTI * NiRTTI_NiTransformInterpolator = (NiRTTI *)0x030B08F8;
const NiRTTI * NiRTTI_NiPathInterpolator = (NiRTTI *)0x03014B08; const NiRTTI * NiRTTI_NiPathInterpolator = (NiRTTI *)0x030B0908;
const NiRTTI * NiRTTI_NiBlendTransformInterpolator = (NiRTTI *)0x03014B28; const NiRTTI * NiRTTI_NiBlendTransformInterpolator = (NiRTTI *)0x030B0928;
const NiRTTI * NiRTTI_NiBlendFloatInterpolator = (NiRTTI *)0x03014B38; const NiRTTI * NiRTTI_NiBlendFloatInterpolator = (NiRTTI *)0x030B0938;
const NiRTTI * NiRTTI_NiFloatExtraDataController = (NiRTTI *)0x03014B48; const NiRTTI * NiRTTI_NiFloatExtraDataController = (NiRTTI *)0x030B0948;
const NiRTTI * NiRTTI_NiTransformController = (NiRTTI *)0x03014B58; const NiRTTI * NiRTTI_NiTransformController = (NiRTTI *)0x030B0958;
const NiRTTI * NiRTTI_NiBlendAccumTransformInterpolator = (NiRTTI *)0x03014B70; const NiRTTI * NiRTTI_NiBlendAccumTransformInterpolator = (NiRTTI *)0x030B0968;
const NiRTTI * NiRTTI_NiInterpolator = (NiRTTI *)0x03014B80; const NiRTTI * NiRTTI_NiInterpolator = (NiRTTI *)0x030B0980;
const NiRTTI * NiRTTI_BSBlendTreadTransfInterpolator = (NiRTTI *)0x03014BA0; const NiRTTI * NiRTTI_BSBlendTreadTransfInterpolator = (NiRTTI *)0x030B09A0;
const NiRTTI * NiRTTI_NiKeyBasedInterpolator = (NiRTTI *)0x03014BB8; const NiRTTI * NiRTTI_NiKeyBasedInterpolator = (NiRTTI *)0x030B09B8;
const NiRTTI * NiRTTI_NiTransformData = (NiRTTI *)0x03014C38; const NiRTTI * NiRTTI_NiTransformData = (NiRTTI *)0x030B0A38;
const NiRTTI * NiRTTI_NiPosData = (NiRTTI *)0x03014C48; const NiRTTI * NiRTTI_NiPosData = (NiRTTI *)0x030B0A48;
const NiRTTI * NiRTTI_NiBlendBoolInterpolator = (NiRTTI *)0x03014C58; const NiRTTI * NiRTTI_NiBlendBoolInterpolator = (NiRTTI *)0x030B0A58;
const NiRTTI * NiRTTI_NiBlendColorInterpolator = (NiRTTI *)0x03014C68; const NiRTTI * NiRTTI_NiBlendColorInterpolator = (NiRTTI *)0x030B0A68;
const NiRTTI * NiRTTI_NiBlendPoint3Interpolator = (NiRTTI *)0x03014C78; const NiRTTI * NiRTTI_NiBlendPoint3Interpolator = (NiRTTI *)0x030B0A78;
const NiRTTI * NiRTTI_NiBlendQuaternionInterpolator = (NiRTTI *)0x03014C88; const NiRTTI * NiRTTI_NiBlendQuaternionInterpolator = (NiRTTI *)0x030B0A88;
const NiRTTI * NiRTTI_NiBoolData = (NiRTTI *)0x03014C98; const NiRTTI * NiRTTI_NiBoolData = (NiRTTI *)0x030B0A98;
const NiRTTI * NiRTTI_NiBoolInterpolator = (NiRTTI *)0x03014CA8; const NiRTTI * NiRTTI_NiBoolInterpolator = (NiRTTI *)0x030B0AA8;
const NiRTTI * NiRTTI_NiBoolTimelineInterpolator = (NiRTTI *)0x03014CB8; const NiRTTI * NiRTTI_NiBoolTimelineInterpolator = (NiRTTI *)0x030B0AB8;
const NiRTTI * NiRTTI_NiBSplineBasisData = (NiRTTI *)0x03014CC8; const NiRTTI * NiRTTI_NiBSplineBasisData = (NiRTTI *)0x030B0AC8;
const NiRTTI * NiRTTI_NiBSplineData = (NiRTTI *)0x03014CD8; const NiRTTI * NiRTTI_NiBSplineData = (NiRTTI *)0x030B0AD8;
const NiRTTI * NiRTTI_NiBSplineColorInterpolator = (NiRTTI *)0x03014CE8; const NiRTTI * NiRTTI_NiBSplineColorInterpolator = (NiRTTI *)0x030B0AE8;
const NiRTTI * NiRTTI_NiBSplineCompColorInterpolator = (NiRTTI *)0x03014CF8; const NiRTTI * NiRTTI_NiBSplineCompColorInterpolator = (NiRTTI *)0x030B0AF8;
const NiRTTI * NiRTTI_NiBSplineCompFloatInterpolator = (NiRTTI *)0x03014D08; const NiRTTI * NiRTTI_NiBSplineCompFloatInterpolator = (NiRTTI *)0x030B0B08;
const NiRTTI * NiRTTI_NiBSplineCompPoint3Interpolator = (NiRTTI *)0x03014D18; const NiRTTI * NiRTTI_NiBSplineCompPoint3Interpolator = (NiRTTI *)0x030B0B18;
const NiRTTI * NiRTTI_NiBSplineCompTransformInterpolator = (NiRTTI *)0x03014D28; const NiRTTI * NiRTTI_NiBSplineCompTransformInterpolator = (NiRTTI *)0x030B0B28;
const NiRTTI * NiRTTI_NiBSplineFloatInterpolator = (NiRTTI *)0x03014D38; const NiRTTI * NiRTTI_NiBSplineFloatInterpolator = (NiRTTI *)0x030B0B38;
const NiRTTI * NiRTTI_NiBSplinePoint3Interpolator = (NiRTTI *)0x03014D48; const NiRTTI * NiRTTI_NiBSplinePoint3Interpolator = (NiRTTI *)0x030B0B48;
const NiRTTI * NiRTTI_NiBSplineTransformInterpolator = (NiRTTI *)0x03014D58; const NiRTTI * NiRTTI_NiBSplineTransformInterpolator = (NiRTTI *)0x030B0B58;
const NiRTTI * NiRTTI_NiColorExtraDataController = (NiRTTI *)0x03014D68; const NiRTTI * NiRTTI_NiColorExtraDataController = (NiRTTI *)0x030B0B68;
const NiRTTI * NiRTTI_NiFloatsExtraDataController = (NiRTTI *)0x03014D78; const NiRTTI * NiRTTI_NiFloatsExtraDataController = (NiRTTI *)0x030B0B78;
const NiRTTI * NiRTTI_NiFloatsExtraDataPoint3Controller = (NiRTTI *)0x03014D88; const NiRTTI * NiRTTI_NiFloatsExtraDataPoint3Controller = (NiRTTI *)0x030B0B88;
const NiRTTI * NiRTTI_NiKeyframeManager = (NiRTTI *)0x03014DA0; const NiRTTI * NiRTTI_NiKeyframeManager = (NiRTTI *)0x030B0BA0;
const NiRTTI * NiRTTI_NiLightColorController = (NiRTTI *)0x03014DB0; const NiRTTI * NiRTTI_NiLightColorController = (NiRTTI *)0x030B0BB0;
const NiRTTI * NiRTTI_NiLightDimmerController = (NiRTTI *)0x03014DC0; const NiRTTI * NiRTTI_NiLightDimmerController = (NiRTTI *)0x030B0BC0;
const NiRTTI * NiRTTI_NiLookAtController = (NiRTTI *)0x03014DD0; const NiRTTI * NiRTTI_NiLookAtController = (NiRTTI *)0x030B0BD0;
const NiRTTI * NiRTTI_NiLookAtInterpolator = (NiRTTI *)0x03014DE0; const NiRTTI * NiRTTI_NiLookAtInterpolator = (NiRTTI *)0x030B0BE0;
const NiRTTI * NiRTTI_NiMorphData = (NiRTTI *)0x03014DF0; const NiRTTI * NiRTTI_NiMorphData = (NiRTTI *)0x030B0BF0;
const NiRTTI * NiRTTI_NiPathController = (NiRTTI *)0x03014E00; const NiRTTI * NiRTTI_NiPathController = (NiRTTI *)0x030B0C00;
const NiRTTI * NiRTTI_NiPoint3Interpolator = (NiRTTI *)0x03014E10; const NiRTTI * NiRTTI_NiPoint3Interpolator = (NiRTTI *)0x030B0C10;
const NiRTTI * NiRTTI_NiQuaternionInterpolator = (NiRTTI *)0x03014E20; const NiRTTI * NiRTTI_NiQuaternionInterpolator = (NiRTTI *)0x030B0C20;
const NiRTTI * NiRTTI_NiRollController = (NiRTTI *)0x03014E30; const NiRTTI * NiRTTI_NiRollController = (NiRTTI *)0x030B0C30;
const NiRTTI * NiRTTI_NiRotData = (NiRTTI *)0x03014E40; const NiRTTI * NiRTTI_NiRotData = (NiRTTI *)0x030B0C40;
const NiRTTI * NiRTTI_NiSequence = (NiRTTI *)0x03014E50; const NiRTTI * NiRTTI_NiSequence = (NiRTTI *)0x030B0C50;
const NiRTTI * NiRTTI_NiSequenceStreamHelper = (NiRTTI *)0x03014E70; const NiRTTI * NiRTTI_NiSequenceStreamHelper = (NiRTTI *)0x030B0C70;
const NiRTTI * NiRTTI_NiStringPalette = (NiRTTI *)0x03014E80; const NiRTTI * NiRTTI_NiStringPalette = (NiRTTI *)0x030B0C80;
const NiRTTI * NiRTTI_NiTextKeyExtraData = (NiRTTI *)0x03014E90; const NiRTTI * NiRTTI_NiTextKeyExtraData = (NiRTTI *)0x030B0C90;
const NiRTTI * NiRTTI_NiUVData = (NiRTTI *)0x03014EA0; const NiRTTI * NiRTTI_NiUVData = (NiRTTI *)0x030B0CA0;
const NiRTTI * NiRTTI_NiVisController = (NiRTTI *)0x03014EB0; const NiRTTI * NiRTTI_NiVisController = (NiRTTI *)0x030B0CB0;
const NiRTTI * NiRTTI_BSAnimNote = (NiRTTI *)0x03014EC0; const NiRTTI * NiRTTI_BSAnimNote = (NiRTTI *)0x030B0CC0;
const NiRTTI * NiRTTI_BSAnimNotes = (NiRTTI *)0x03014ED0; const NiRTTI * NiRTTI_BSAnimNotes = (NiRTTI *)0x030B0CD0;
const NiRTTI * NiRTTI_BSGrabIKNote = (NiRTTI *)0x03014EE0; const NiRTTI * NiRTTI_BSGrabIKNote = (NiRTTI *)0x030B0CE0;
const NiRTTI * NiRTTI_BSLookIKNote = (NiRTTI *)0x03014EF0; const NiRTTI * NiRTTI_BSLookIKNote = (NiRTTI *)0x030B0CF0;
const NiRTTI * NiRTTI_BSRotAccumTransfInterpolator = (NiRTTI *)0x03014F00; const NiRTTI * NiRTTI_BSRotAccumTransfInterpolator = (NiRTTI *)0x030B0D00;
const NiRTTI * NiRTTI_BSTreadTransfInterpolator = (NiRTTI *)0x03014F10; const NiRTTI * NiRTTI_BSTreadTransfInterpolator = (NiRTTI *)0x030B0D10;
const NiRTTI * NiRTTI_BSFrustumFOVController = (NiRTTI *)0x03014F20; const NiRTTI * NiRTTI_BSFrustumFOVController = (NiRTTI *)0x030B0D20;
const NiRTTI * NiRTTI_NiExtraDataController = (NiRTTI *)0x03014FB8; const NiRTTI * NiRTTI_NiExtraDataController = (NiRTTI *)0x030B0DB8;
const NiRTTI * NiRTTI_NiBSplineInterpolator = (NiRTTI *)0x03014FC8; const NiRTTI * NiRTTI_NiBSplineInterpolator = (NiRTTI *)0x030B0DC8;
const NiRTTI * NiRTTI_NiPoint3InterpController = (NiRTTI *)0x03014FD8; const NiRTTI * NiRTTI_NiPoint3InterpController = (NiRTTI *)0x030B0DD8;
const NiRTTI * NiRTTI_NiFloatInterpController = (NiRTTI *)0x03014FE8; const NiRTTI * NiRTTI_NiFloatInterpController = (NiRTTI *)0x030B0DE8;
const NiRTTI * NiRTTI_NiFloatController = (NiRTTI *)0x03014FF8; const NiRTTI * NiRTTI_NiFloatController = (NiRTTI *)0x030B0DF8;
const NiRTTI * NiRTTI_NiBoolInterpController = (NiRTTI *)0x03015008; const NiRTTI * NiRTTI_NiBoolInterpController = (NiRTTI *)0x030B0E08;
const NiRTTI * NiRTTI_NiParticleSystem = (NiRTTI *)0x03015020; const NiRTTI * NiRTTI_NiParticleSystem = (NiRTTI *)0x030B0E20;
const NiRTTI * NiRTTI_NiPSysEmitterCtlr = (NiRTTI *)0x03015030; const NiRTTI * NiRTTI_NiPSysEmitterCtlr = (NiRTTI *)0x030B0E30;
const NiRTTI * NiRTTI_NiPSysGravityModifier = (NiRTTI *)0x03015040; const NiRTTI * NiRTTI_NiPSysGravityModifier = (NiRTTI *)0x030B0E40;
const NiRTTI * NiRTTI_BSPSysHavokUpdateModifier = (NiRTTI *)0x03015050; const NiRTTI * NiRTTI_BSPSysHavokUpdateModifier = (NiRTTI *)0x030B0E50;
const NiRTTI * NiRTTI_NiMeshParticleSystem = (NiRTTI *)0x03015068; const NiRTTI * NiRTTI_NiMeshParticleSystem = (NiRTTI *)0x030B0E68;
const NiRTTI * NiRTTI_NiPSysCylinderEmitter = (NiRTTI *)0x03015080; const NiRTTI * NiRTTI_NiPSysCylinderEmitter = (NiRTTI *)0x030B0E80;
const NiRTTI * NiRTTI_BSStripParticleSystem = (NiRTTI *)0x03015090; const NiRTTI * NiRTTI_BSStripParticleSystem = (NiRTTI *)0x030B0E90;
const NiRTTI * NiRTTI_NiPSysEmitter = (NiRTTI *)0x030150A0; const NiRTTI * NiRTTI_NiPSysEmitter = (NiRTTI *)0x030B0EA0;
const NiRTTI * NiRTTI_NiPSysModifierCtlr = (NiRTTI *)0x030150B8; const NiRTTI * NiRTTI_NiPSysModifierCtlr = (NiRTTI *)0x030B0EB0;
const NiRTTI * NiRTTI_NiPSysModifier = (NiRTTI *)0x030150C8; const NiRTTI * NiRTTI_NiPSysModifier = (NiRTTI *)0x030B0EC8;
const NiRTTI * NiRTTI_NiPSysMeshUpdateModifier = (NiRTTI *)0x030150D8; const NiRTTI * NiRTTI_NiPSysMeshUpdateModifier = (NiRTTI *)0x030B0ED8;
const NiRTTI * NiRTTI_NiPSysUpdateCtlr = (NiRTTI *)0x030150E8; const NiRTTI * NiRTTI_NiPSysUpdateCtlr = (NiRTTI *)0x030B0EE8;
const NiRTTI * NiRTTI_NiMeshPSysData = (NiRTTI *)0x030150F8; const NiRTTI * NiRTTI_NiMeshPSysData = (NiRTTI *)0x030B0EF8;
const NiRTTI * NiRTTI_NiPSysAirFieldAirFrictionCtlr = (NiRTTI *)0x03015108; const NiRTTI * NiRTTI_NiPSysAirFieldAirFrictionCtlr = (NiRTTI *)0x030B0F08;
const NiRTTI * NiRTTI_NiPSysAirFieldInheritVelocityCtlr = (NiRTTI *)0x03015118; const NiRTTI * NiRTTI_NiPSysAirFieldInheritVelocityCtlr = (NiRTTI *)0x030B0F18;
const NiRTTI * NiRTTI_NiPSysAirFieldModifier = (NiRTTI *)0x03015128; const NiRTTI * NiRTTI_NiPSysAirFieldModifier = (NiRTTI *)0x030B0F28;
const NiRTTI * NiRTTI_NiPSysAirFieldSpreadCtlr = (NiRTTI *)0x03015138; const NiRTTI * NiRTTI_NiPSysAirFieldSpreadCtlr = (NiRTTI *)0x030B0F38;
const NiRTTI * NiRTTI_NiPSysAgeDeathModifier = (NiRTTI *)0x03015148; const NiRTTI * NiRTTI_NiPSysAgeDeathModifier = (NiRTTI *)0x030B0F48;
const NiRTTI * NiRTTI_NiPSysBombModifier = (NiRTTI *)0x03015158; const NiRTTI * NiRTTI_NiPSysBombModifier = (NiRTTI *)0x030B0F58;
const NiRTTI * NiRTTI_NiPSysBoundUpdateModifier = (NiRTTI *)0x03015168; const NiRTTI * NiRTTI_NiPSysBoundUpdateModifier = (NiRTTI *)0x030B0F68;
const NiRTTI * NiRTTI_NiPSysBoxEmitter = (NiRTTI *)0x03015178; const NiRTTI * NiRTTI_NiPSysBoxEmitter = (NiRTTI *)0x030B0F78;
const NiRTTI * NiRTTI_NiPSysColliderManager = (NiRTTI *)0x03015188; const NiRTTI * NiRTTI_NiPSysColliderManager = (NiRTTI *)0x030B0F88;
const NiRTTI * NiRTTI_NiPSysColorModifier = (NiRTTI *)0x03015198; const NiRTTI * NiRTTI_NiPSysColorModifier = (NiRTTI *)0x030B0F98;
const NiRTTI * NiRTTI_NiPSysData = (NiRTTI *)0x030151A8; const NiRTTI * NiRTTI_NiPSysData = (NiRTTI *)0x030B0FA8;
const NiRTTI * NiRTTI_NiPSysDragFieldModifier = (NiRTTI *)0x030151B8; const NiRTTI * NiRTTI_NiPSysDragFieldModifier = (NiRTTI *)0x030B0FB8;
const NiRTTI * NiRTTI_NiPSysDragModifier = (NiRTTI *)0x030151C8; const NiRTTI * NiRTTI_NiPSysDragModifier = (NiRTTI *)0x030B0FC8;
const NiRTTI * NiRTTI_NiPSysEmitterCtlrData = (NiRTTI *)0x030151D8; const NiRTTI * NiRTTI_NiPSysEmitterCtlrData = (NiRTTI *)0x030B0FD8;
const NiRTTI * NiRTTI_NiPSysEmitterDeclinationCtlr = (NiRTTI *)0x030151E8; const NiRTTI * NiRTTI_NiPSysEmitterDeclinationCtlr = (NiRTTI *)0x030B0FE8;
const NiRTTI * NiRTTI_NiPSysEmitterDeclinationVarCtlr = (NiRTTI *)0x030151F8; const NiRTTI * NiRTTI_NiPSysEmitterDeclinationVarCtlr = (NiRTTI *)0x030B0FF8;
const NiRTTI * NiRTTI_NiPSysEmitterInitialRadiusCtlr = (NiRTTI *)0x03015208; const NiRTTI * NiRTTI_NiPSysEmitterInitialRadiusCtlr = (NiRTTI *)0x030B1008;
const NiRTTI * NiRTTI_NiPSysEmitterLifeSpanCtlr = (NiRTTI *)0x03015218; const NiRTTI * NiRTTI_NiPSysEmitterLifeSpanCtlr = (NiRTTI *)0x030B1018;
const NiRTTI * NiRTTI_NiPSysEmitterPlanarAngleCtlr = (NiRTTI *)0x03015228; const NiRTTI * NiRTTI_NiPSysEmitterPlanarAngleCtlr = (NiRTTI *)0x030B1028;
const NiRTTI * NiRTTI_NiPSysEmitterPlanarAngleVarCtlr = (NiRTTI *)0x03015238; const NiRTTI * NiRTTI_NiPSysEmitterPlanarAngleVarCtlr = (NiRTTI *)0x030B1038;
const NiRTTI * NiRTTI_NiPSysEmitterSpeedCtlr = (NiRTTI *)0x03015248; const NiRTTI * NiRTTI_NiPSysEmitterSpeedCtlr = (NiRTTI *)0x030B1048;
const NiRTTI * NiRTTI_NiPSysFieldAttenuationCtlr = (NiRTTI *)0x03015258; const NiRTTI * NiRTTI_NiPSysFieldAttenuationCtlr = (NiRTTI *)0x030B1058;
const NiRTTI * NiRTTI_NiPSysFieldMagnitudeCtlr = (NiRTTI *)0x03015268; const NiRTTI * NiRTTI_NiPSysFieldMagnitudeCtlr = (NiRTTI *)0x030B1068;
const NiRTTI * NiRTTI_NiPSysFieldMaxDistanceCtlr = (NiRTTI *)0x03015278; const NiRTTI * NiRTTI_NiPSysFieldMaxDistanceCtlr = (NiRTTI *)0x030B1078;
const NiRTTI * NiRTTI_NiPSysGravityFieldModifier = (NiRTTI *)0x03015288; const NiRTTI * NiRTTI_NiPSysGravityFieldModifier = (NiRTTI *)0x030B1088;
const NiRTTI * NiRTTI_NiPSysGravityStrengthCtlr = (NiRTTI *)0x03015298; const NiRTTI * NiRTTI_NiPSysGravityStrengthCtlr = (NiRTTI *)0x030B1098;
const NiRTTI * NiRTTI_NiPSysGrowFadeModifier = (NiRTTI *)0x030152A8; const NiRTTI * NiRTTI_NiPSysGrowFadeModifier = (NiRTTI *)0x030B10A8;
const NiRTTI * NiRTTI_NiPSysInitialRotAngleCtlr = (NiRTTI *)0x030152B8; const NiRTTI * NiRTTI_NiPSysInitialRotAngleCtlr = (NiRTTI *)0x030B10B8;
const NiRTTI * NiRTTI_NiPSysInitialRotAngleVarCtlr = (NiRTTI *)0x030152C8; const NiRTTI * NiRTTI_NiPSysInitialRotAngleVarCtlr = (NiRTTI *)0x030B10C8;
const NiRTTI * NiRTTI_NiPSysInitialRotSpeedCtlr = (NiRTTI *)0x030152D8; const NiRTTI * NiRTTI_NiPSysInitialRotSpeedCtlr = (NiRTTI *)0x030B10D8;
const NiRTTI * NiRTTI_NiPSysInitialRotSpeedVarCtlr = (NiRTTI *)0x030152E8; const NiRTTI * NiRTTI_NiPSysInitialRotSpeedVarCtlr = (NiRTTI *)0x030B10E8;
const NiRTTI * NiRTTI_NiPSysMeshEmitter = (NiRTTI *)0x030152F8; const NiRTTI * NiRTTI_NiPSysMeshEmitter = (NiRTTI *)0x030B10F8;
const NiRTTI * NiRTTI_NiPSysModifierActiveCtlr = (NiRTTI *)0x03015328; const NiRTTI * NiRTTI_NiPSysModifierActiveCtlr = (NiRTTI *)0x030B1128;
const NiRTTI * NiRTTI_NiPSysPlanarCollider = (NiRTTI *)0x03015338; const NiRTTI * NiRTTI_NiPSysPlanarCollider = (NiRTTI *)0x030B1138;
const NiRTTI * NiRTTI_NiPSysPositionModifier = (NiRTTI *)0x03015350; const NiRTTI * NiRTTI_NiPSysPositionModifier = (NiRTTI *)0x030B1148;
const NiRTTI * NiRTTI_NiPSysRadialFieldModifier = (NiRTTI *)0x03015360; const NiRTTI * NiRTTI_NiPSysRadialFieldModifier = (NiRTTI *)0x030B1158;
const NiRTTI * NiRTTI_NiPSysResetOnLoopCtlr = (NiRTTI *)0x03015370; const NiRTTI * NiRTTI_NiPSysResetOnLoopCtlr = (NiRTTI *)0x030B1168;
const NiRTTI * NiRTTI_NiPSysRotationModifier = (NiRTTI *)0x03015380; const NiRTTI * NiRTTI_NiPSysRotationModifier = (NiRTTI *)0x030B1178;
const NiRTTI * NiRTTI_NiPSysSpawnModifier = (NiRTTI *)0x03015390; const NiRTTI * NiRTTI_NiPSysSpawnModifier = (NiRTTI *)0x030B1188;
const NiRTTI * NiRTTI_NiPSysSphereEmitter = (NiRTTI *)0x030153A0; const NiRTTI * NiRTTI_NiPSysSphereEmitter = (NiRTTI *)0x030B1198;
const NiRTTI * NiRTTI_NiPSysSphericalCollider = (NiRTTI *)0x030153B0; const NiRTTI * NiRTTI_NiPSysSphericalCollider = (NiRTTI *)0x030B11A8;
const NiRTTI * NiRTTI_NiPSysTurbulenceFieldModifier = (NiRTTI *)0x030153C0; const NiRTTI * NiRTTI_NiPSysTurbulenceFieldModifier = (NiRTTI *)0x030B11B8;
const NiRTTI * NiRTTI_NiPSysVortexFieldModifier = (NiRTTI *)0x030153D0; const NiRTTI * NiRTTI_NiPSysVortexFieldModifier = (NiRTTI *)0x030B11C8;
const NiRTTI * NiRTTI_BSStripPSysData = (NiRTTI *)0x030153E0; const NiRTTI * NiRTTI_BSStripPSysData = (NiRTTI *)0x030B11D8;
const NiRTTI * NiRTTI_BSPSysRecycleBoundModifier = (NiRTTI *)0x030153F8; const NiRTTI * NiRTTI_BSPSysRecycleBoundModifier = (NiRTTI *)0x030B11F0;
const NiRTTI * NiRTTI_BSPSysInheritVelocityModifier = (NiRTTI *)0x03015408; const NiRTTI * NiRTTI_BSPSysInheritVelocityModifier = (NiRTTI *)0x030B1200;
const NiRTTI * NiRTTI_NiPSysVolumeEmitter = (NiRTTI *)0x03015418; const NiRTTI * NiRTTI_NiPSysVolumeEmitter = (NiRTTI *)0x030B1210;
const NiRTTI * NiRTTI_NiPSysModifierFloatCtlr = (NiRTTI *)0x03015428; const NiRTTI * NiRTTI_NiPSysModifierFloatCtlr = (NiRTTI *)0x030B1220;
const NiRTTI * NiRTTI_NiPSysFieldModifier = (NiRTTI *)0x03015438; const NiRTTI * NiRTTI_NiPSysFieldModifier = (NiRTTI *)0x030B1230;
const NiRTTI * NiRTTI_NiPSysModifierBoolCtlr = (NiRTTI *)0x03015448; const NiRTTI * NiRTTI_NiPSysModifierBoolCtlr = (NiRTTI *)0x030B1240;
const NiRTTI * NiRTTI_NiPSysCollider = (NiRTTI *)0x03015458; const NiRTTI * NiRTTI_NiPSysCollider = (NiRTTI *)0x030B1250;
const NiRTTI * NiRTTI_BSMultiBound = (NiRTTI *)0x0301D708; const NiRTTI * NiRTTI_BSMultiBound = (NiRTTI *)0x030B9508;
const NiRTTI * NiRTTI_BSMultiBoundRoom = (NiRTTI *)0x0301D718; const NiRTTI * NiRTTI_BSMultiBoundRoom = (NiRTTI *)0x030B9518;
const NiRTTI * NiRTTI_BSMultiBoundAABB = (NiRTTI *)0x0301D730; const NiRTTI * NiRTTI_BSMultiBoundAABB = (NiRTTI *)0x030B9530;
const NiRTTI * NiRTTI_BSMultiBoundOBB = (NiRTTI *)0x0301D748; const NiRTTI * NiRTTI_BSMultiBoundOBB = (NiRTTI *)0x030B9548;
const NiRTTI * NiRTTI_BSXFlags = (NiRTTI *)0x0301D768; const NiRTTI * NiRTTI_BSXFlags = (NiRTTI *)0x030B9568;
const NiRTTI * NiRTTI_BSValueNode = (NiRTTI *)0x0301D780; const NiRTTI * NiRTTI_BSValueNode = (NiRTTI *)0x030B9580;
const NiRTTI * NiRTTI_BSWindModifier = (NiRTTI *)0x03023D00; const NiRTTI * NiRTTI_BSWindModifier = (NiRTTI *)0x030BFB00;
const NiRTTI * NiRTTI_BSTempNodeManager = (NiRTTI *)0x03023D20; const NiRTTI * NiRTTI_BSTempNodeManager = (NiRTTI *)0x030BFB20;
const NiRTTI * NiRTTI_BSTempNode = (NiRTTI *)0x03023D30; const NiRTTI * NiRTTI_BSTempNode = (NiRTTI *)0x030BFB30;
const NiRTTI * NiRTTI_BSOcclusionShape = (NiRTTI *)0x03023D50; const NiRTTI * NiRTTI_BSOcclusionShape = (NiRTTI *)0x030BFB50;
const NiRTTI * NiRTTI_BSRangeNode = (NiRTTI *)0x03023E48; const NiRTTI * NiRTTI_BSRangeNode = (NiRTTI *)0x030BFC48;
const NiRTTI * NiRTTI_BSBlastNode = (NiRTTI *)0x03024080; const NiRTTI * NiRTTI_BSBlastNode = (NiRTTI *)0x030BFE80;
const NiRTTI * NiRTTI_BSDebrisNode = (NiRTTI *)0x03024090; const NiRTTI * NiRTTI_BSDebrisNode = (NiRTTI *)0x030BFE90;
const NiRTTI * NiRTTI_BSDamageStage = (NiRTTI *)0x030240A0; const NiRTTI * NiRTTI_BSDamageStage = (NiRTTI *)0x030BFEA0;
const NiRTTI * NiRTTI_BSPSysArrayEmitter = (NiRTTI *)0x030240B0; const NiRTTI * NiRTTI_BSPSysArrayEmitter = (NiRTTI *)0x030BFEB0;
const NiRTTI * NiRTTI_PArrayPoint = (NiRTTI *)0x030240C0; const NiRTTI * NiRTTI_PArrayPoint = (NiRTTI *)0x030BFEC0;
const NiRTTI * NiRTTI_BSMultiStreamInstanceTriShape = (NiRTTI *)0x030240E8; const NiRTTI * NiRTTI_BSMultiStreamInstanceTriShape = (NiRTTI *)0x030BFEE8;
const NiRTTI * NiRTTI_BSMultiBoundShape = (NiRTTI *)0x03024118; const NiRTTI * NiRTTI_BSMultiBoundShape = (NiRTTI *)0x030BFF18;
const NiRTTI * NiRTTI_BSMultiBoundSphere = (NiRTTI *)0x03024128; const NiRTTI * NiRTTI_BSMultiBoundSphere = (NiRTTI *)0x030BFF28;
const NiRTTI * NiRTTI_BSOcclusionBox = (NiRTTI *)0x03024140; const NiRTTI * NiRTTI_BSOcclusionBox = (NiRTTI *)0x030BFF40;
const NiRTTI * NiRTTI_BSOcclusionPlane = (NiRTTI *)0x03024158; const NiRTTI * NiRTTI_BSOcclusionPlane = (NiRTTI *)0x030BFF58;
const NiRTTI * NiRTTI_BSPortal = (NiRTTI *)0x03024168; const NiRTTI * NiRTTI_BSPortal = (NiRTTI *)0x030BFF68;
const NiRTTI * NiRTTI_BSPortalSharedNode = (NiRTTI *)0x03024178; const NiRTTI * NiRTTI_BSPortalSharedNode = (NiRTTI *)0x030BFF78;
const NiRTTI * NiRTTI_BSBodyMorphOffsetsExtraData = (NiRTTI *)0x03024190; const NiRTTI * NiRTTI_BSBodyMorphOffsetsExtraData = (NiRTTI *)0x030BFF90;
const NiRTTI * NiRTTI_BSBehaviorGraphExtraData = (NiRTTI *)0x030241A0; const NiRTTI * NiRTTI_BSBehaviorGraphExtraData = (NiRTTI *)0x030BFFA0;
const NiRTTI * NiRTTI_NiBSBoneLODController = (NiRTTI *)0x030241B8; const NiRTTI * NiRTTI_NiBSBoneLODController = (NiRTTI *)0x030BFFB8;
const NiRTTI * NiRTTI_BSCullingProcess = (NiRTTI *)0x030241D8; const NiRTTI * NiRTTI_BSCullingProcess = (NiRTTI *)0x030BFFD8;
const NiRTTI * NiRTTI_BSParticleSystemManager = (NiRTTI *)0x030241F8; const NiRTTI * NiRTTI_BSParticleSystemManager = (NiRTTI *)0x030BFFF8;
const NiRTTI * NiRTTI_BSFurnitureMarkerNode = (NiRTTI *)0x03024220; const NiRTTI * NiRTTI_BSFurnitureMarkerNode = (NiRTTI *)0x030C0020;
const NiRTTI * NiRTTI_BSBound = (NiRTTI *)0x030242A0; const NiRTTI * NiRTTI_BSBound = (NiRTTI *)0x030C00A0;
const NiRTTI * NiRTTI_BSMultiBoundNode = (NiRTTI *)0x03024330; const NiRTTI * NiRTTI_BSMultiBoundNode = (NiRTTI *)0x030C00C0;
const NiRTTI * NiRTTI_BSBoneMap = (NiRTTI *)0x03024340; const NiRTTI * NiRTTI_BSBoneMap = (NiRTTI *)0x030C00D0;
const NiRTTI * NiRTTI_BSAnimInteractionMarker = (NiRTTI *)0x03024358; const NiRTTI * NiRTTI_BSAnimInteractionMarker = (NiRTTI *)0x030C00E8;
const NiRTTI * NiRTTI_BSSceneGraph = (NiRTTI *)0x03024370; const NiRTTI * NiRTTI_BSSceneGraph = (NiRTTI *)0x030C0100;
const NiRTTI * NiRTTI_BSPSysMultiTargetEmitterCtlr = (NiRTTI *)0x03024388; const NiRTTI * NiRTTI_BSPSysMultiTargetEmitterCtlr = (NiRTTI *)0x030C0118;
const NiRTTI * NiRTTI_BSGeometryListCullingProcess = (NiRTTI *)0x030243A0; const NiRTTI * NiRTTI_BSGeometryListCullingProcess = (NiRTTI *)0x030C0130;
const NiRTTI * NiRTTI_BSSubIndexTriShape = (NiRTTI *)0x030243B8; const NiRTTI * NiRTTI_BSSubIndexTriShape = (NiRTTI *)0x030C0148;
const NiRTTI * NiRTTI_BSDistantObjectLargeRefExtraData = (NiRTTI *)0x030243C8; const NiRTTI * NiRTTI_BSDistantObjectLargeRefExtraData = (NiRTTI *)0x030C0158;
const NiRTTI * NiRTTI_BSMasterParticleSystem = (NiRTTI *)0x03025D90; const NiRTTI * NiRTTI_BSMasterParticleSystem = (NiRTTI *)0x030C1B20;
const NiRTTI * NiRTTI_BSProceduralLightningController = (NiRTTI *)0x03025DB8; const NiRTTI * NiRTTI_BSProceduralLightningController = (NiRTTI *)0x030C1B48;
const NiRTTI * NiRTTI_BSInvMarker = (NiRTTI *)0x03025DC8; const NiRTTI * NiRTTI_BSInvMarker = (NiRTTI *)0x030C1B58;
const NiRTTI * NiRTTI_BSBoneLODExtraData = (NiRTTI *)0x03025DE0; const NiRTTI * NiRTTI_BSBoneLODExtraData = (NiRTTI *)0x030C1B70;
const NiRTTI * NiRTTI_BSReference = (NiRTTI *)0x03025E00; const NiRTTI * NiRTTI_BSReference = (NiRTTI *)0x030C1B90;
const NiRTTI * NiRTTI_BSNodeReferences = (NiRTTI *)0x03025E10; const NiRTTI * NiRTTI_BSNodeReferences = (NiRTTI *)0x030C1BA0;
const NiRTTI * NiRTTI_BSDecalPlacementVectorExtraData = (NiRTTI *)0x03025E20; const NiRTTI * NiRTTI_BSDecalPlacementVectorExtraData = (NiRTTI *)0x030C1BB0;
const NiRTTI * NiRTTI_BSParentVelocityModifier = (NiRTTI *)0x03025E30; const NiRTTI * NiRTTI_BSParentVelocityModifier = (NiRTTI *)0x030C1BC0;
const NiRTTI * NiRTTI_BSWArray = (NiRTTI *)0x03025E40; const NiRTTI * NiRTTI_BSWArray = (NiRTTI *)0x030C1BD0;
const NiRTTI * NiRTTI_BSMultiBoundCapsule = (NiRTTI *)0x03025E58; const NiRTTI * NiRTTI_BSMultiBoundCapsule = (NiRTTI *)0x030C1BE8;
const NiRTTI * NiRTTI_BSPSysStripUpdateModifier = (NiRTTI *)0x03025E68; const NiRTTI * NiRTTI_BSPSysStripUpdateModifier = (NiRTTI *)0x030C1BF8;
const NiRTTI * NiRTTI_BSPSysSubTexModifier = (NiRTTI *)0x03025E78; const NiRTTI * NiRTTI_BSPSysSubTexModifier = (NiRTTI *)0x030C1C08;
const NiRTTI * NiRTTI_BSPSysScaleModifier = (NiRTTI *)0x03025E88; const NiRTTI * NiRTTI_BSPSysScaleModifier = (NiRTTI *)0x030C1C18;
const NiRTTI * NiRTTI_BSLagBoneController = (NiRTTI *)0x03025E98; const NiRTTI * NiRTTI_BSLagBoneController = (NiRTTI *)0x030C1C28;
const NiRTTI * NiRTTI_BSNonUniformScaleExtraData = (NiRTTI *)0x03025EA8; const NiRTTI * NiRTTI_BSNonUniformScaleExtraData = (NiRTTI *)0x030C1C38;
const NiRTTI * NiRTTI_BSNiNode = (NiRTTI *)0x03025EC0; const NiRTTI * NiRTTI_BSNiNode = (NiRTTI *)0x030C1C50;
const NiRTTI * NiRTTI_BSInstanceTriShape = (NiRTTI *)0x03025ED0; const NiRTTI * NiRTTI_BSInstanceTriShape = (NiRTTI *)0x030C1C60;
const NiRTTI * NiRTTI_bhkWorldObject = (NiRTTI *)0x0302CC68; const NiRTTI * NiRTTI_bhkWorldObject = (NiRTTI *)0x030C8158;
const NiRTTI * NiRTTI_bhkWorld = (NiRTTI *)0x0302CCA8; const NiRTTI * NiRTTI_bhkWorld = (NiRTTI *)0x030C8198;
const NiRTTI * NiRTTI_bhkRigidBody = (NiRTTI *)0x0302DDE8; const NiRTTI * NiRTTI_bhkRigidBody = (NiRTTI *)0x030C92D8;
const NiRTTI * NiRTTI_bhkCollisionObject = (NiRTTI *)0x0302DE00; const NiRTTI * NiRTTI_bhkCollisionObject = (NiRTTI *)0x030C92F0;
const NiRTTI * NiRTTI_bhkNiCollisionObject = (NiRTTI *)0x0302DEB0; const NiRTTI * NiRTTI_bhkNiCollisionObject = (NiRTTI *)0x030C93A0;
const NiRTTI * NiRTTI_bhkAttachmentCollisionObject = (NiRTTI *)0x0302DF40; const NiRTTI * NiRTTI_bhkAttachmentCollisionObject = (NiRTTI *)0x030C9420;
const NiRTTI * NiRTTI_WeaponObject = (NiRTTI *)0x0302DF50; const NiRTTI * NiRTTI_WeaponObject = (NiRTTI *)0x030C9430;
const NiRTTI * NiRTTI_bhkRigidBodyT = (NiRTTI *)0x0302DF78; const NiRTTI * NiRTTI_bhkRigidBodyT = (NiRTTI *)0x030C9458;
const NiRTTI * NiRTTI_bhkWorldM = (NiRTTI *)0x0302DF88; const NiRTTI * NiRTTI_bhkWorldM = (NiRTTI *)0x030C9468;
const NiRTTI * NiRTTI_bhkRefObject = (NiRTTI *)0x0302DFB0; const NiRTTI * NiRTTI_bhkRefObject = (NiRTTI *)0x030C9490;
const NiRTTI * NiRTTI_bhkSerializable = (NiRTTI *)0x0302DFC0; const NiRTTI * NiRTTI_bhkSerializable = (NiRTTI *)0x030C94A0;
const NiRTTI * NiRTTI_bhkShape = (NiRTTI *)0x0302DFF0; const NiRTTI * NiRTTI_bhkShape = (NiRTTI *)0x030C94D0;
const NiRTTI * NiRTTI_bhkEntity = (NiRTTI *)0x0302E008; const NiRTTI * NiRTTI_bhkEntity = (NiRTTI *)0x030C94E8;
const NiRTTI * NiRTTI_bhkPhantom = (NiRTTI *)0x0302E020; const NiRTTI * NiRTTI_bhkPhantom = (NiRTTI *)0x030C9500;
const NiRTTI * NiRTTI_bhkAabbPhantom = (NiRTTI *)0x0302E038; const NiRTTI * NiRTTI_bhkAabbPhantom = (NiRTTI *)0x030C9518;
const NiRTTI * NiRTTI_bhkSphereRepShape = (NiRTTI *)0x0302E050; const NiRTTI * NiRTTI_bhkSphereRepShape = (NiRTTI *)0x030C9530;
const NiRTTI * NiRTTI_bhkConvexShape = (NiRTTI *)0x0302E068; const NiRTTI * NiRTTI_bhkConvexShape = (NiRTTI *)0x030C9548;
const NiRTTI * NiRTTI_bhkPCollisionObject = (NiRTTI *)0x0302E078; const NiRTTI * NiRTTI_bhkPCollisionObject = (NiRTTI *)0x030C9558;
const NiRTTI * NiRTTI_hkPackedNiTriStripsData = (NiRTTI *)0x0302E088; const NiRTTI * NiRTTI_hkPackedNiTriStripsData = (NiRTTI *)0x030C9568;
const NiRTTI * NiRTTI_bhkShapePhantom = (NiRTTI *)0x0302E0A0; const NiRTTI * NiRTTI_bhkShapePhantom = (NiRTTI *)0x030C9580;
const NiRTTI * NiRTTI_bhkSimpleShapePhantom = (NiRTTI *)0x0302E0B8; const NiRTTI * NiRTTI_bhkSimpleShapePhantom = (NiRTTI *)0x030C9598;
const NiRTTI * NiRTTI_bhkCapsuleShape = (NiRTTI *)0x0302E0D0; const NiRTTI * NiRTTI_bhkCapsuleShape = (NiRTTI *)0x030C95B0;
const NiRTTI * NiRTTI_bhkBoxShape = (NiRTTI *)0x0302E0E8; const NiRTTI * NiRTTI_bhkBoxShape = (NiRTTI *)0x030C95C8;
const NiRTTI * NiRTTI_bhkSphereShape = (NiRTTI *)0x0302E100; const NiRTTI * NiRTTI_bhkSphereShape = (NiRTTI *)0x030C95E0;
const NiRTTI * NiRTTI_bhkBvTreeShape = (NiRTTI *)0x0302E118; const NiRTTI * NiRTTI_bhkBvTreeShape = (NiRTTI *)0x030C95F8;
const NiRTTI * NiRTTI_bhkNiTriStripsShape = (NiRTTI *)0x0302E130; const NiRTTI * NiRTTI_bhkNiTriStripsShape = (NiRTTI *)0x030C9610;
const NiRTTI * NiRTTI_bhkPackedNiTriStripsShape = (NiRTTI *)0x0302E158; const NiRTTI * NiRTTI_bhkPackedNiTriStripsShape = (NiRTTI *)0x030C9638;
const NiRTTI * NiRTTI_bhkBlendCollisionObject = (NiRTTI *)0x0302E170; const NiRTTI * NiRTTI_bhkBlendCollisionObject = (NiRTTI *)0x030C9650;
const NiRTTI * NiRTTI_bhkAvoidBox = (NiRTTI *)0x0302E190; const NiRTTI * NiRTTI_bhkAvoidBox = (NiRTTI *)0x030C9670;
const NiRTTI * NiRTTI_bhkLimitedHingeConstraint = (NiRTTI *)0x0302E1A8; const NiRTTI * NiRTTI_bhkLimitedHingeConstraint = (NiRTTI *)0x030C9688;
const NiRTTI * NiRTTI_bhkMalleableConstraint = (NiRTTI *)0x0302E1C0; const NiRTTI * NiRTTI_bhkMalleableConstraint = (NiRTTI *)0x030C96A0;
const NiRTTI * NiRTTI_bhkConstraint = (NiRTTI *)0x0302E1D8; const NiRTTI * NiRTTI_bhkUnaryAction = (NiRTTI *)0x030C96B8;
const NiRTTI * NiRTTI_bhkPrismaticConstraint = (NiRTTI *)0x0302E1F0; const NiRTTI * NiRTTI_bhkConstraint = (NiRTTI *)0x030C96D0;
const NiRTTI * NiRTTI_bhkAction = (NiRTTI *)0x0302E208; const NiRTTI * NiRTTI_bhkPrismaticConstraint = (NiRTTI *)0x030C96E8;
const NiRTTI * NiRTTI_bhkUnaryAction = (NiRTTI *)0x0302E220; const NiRTTI * NiRTTI_bhkAction = (NiRTTI *)0x030C9700;
const NiRTTI * NiRTTI_bhkTriSampledHeightFieldBvTreeShape = (NiRTTI *)0x0302E238; const NiRTTI * NiRTTI_bhkTriSampledHeightFieldBvTreeShape = (NiRTTI *)0x030C9718;
const NiRTTI * NiRTTI_bhkCachingShapePhantom = (NiRTTI *)0x0302EEA8; const NiRTTI * NiRTTI_bhkCachingShapePhantom = (NiRTTI *)0x030CA388;
const NiRTTI * NiRTTI_bhkRagdollTemplateData = (NiRTTI *)0x0302EED0; const NiRTTI * NiRTTI_bhkRagdollTemplateData = (NiRTTI *)0x030CA3B0;
const NiRTTI * NiRTTI_bhkRagdollTemplate = (NiRTTI *)0x0302EEE0; const NiRTTI * NiRTTI_bhkRagdollTemplate = (NiRTTI *)0x030CA3C0;
const NiRTTI * NiRTTI_bhkSPCollisionObject = (NiRTTI *)0x0302EEF0; const NiRTTI * NiRTTI_bhkSPCollisionObject = (NiRTTI *)0x030CA3D0;
const NiRTTI * NiRTTI_bhkMouseSpringAction = (NiRTTI *)0x0302EF08; const NiRTTI * NiRTTI_bhkMouseSpringAction = (NiRTTI *)0x030CA3E8;
const NiRTTI * NiRTTI_bhkHingeConstraint = (NiRTTI *)0x0302EF20; const NiRTTI * NiRTTI_bhkHingeConstraint = (NiRTTI *)0x030CA400;
const NiRTTI * NiRTTI_bhkCompressedMeshShape = (NiRTTI *)0x0302EF98; const NiRTTI * NiRTTI_bhkCompressedMeshShape = (NiRTTI *)0x030CA478;
const NiRTTI * NiRTTI_bhkCompressedMeshShapeData = (NiRTTI *)0x0302EFA8; const NiRTTI * NiRTTI_bhkCompressedMeshShapeData = (NiRTTI *)0x030CA488;
const NiRTTI * NiRTTI_bhkConvexSweepShape = (NiRTTI *)0x0302EFC0; const NiRTTI * NiRTTI_bhkConvexSweepShape = (NiRTTI *)0x030CA4A0;
const NiRTTI * NiRTTI_bhkConvexTransformShape = (NiRTTI *)0x0302EFD8; const NiRTTI * NiRTTI_bhkConvexTransformShape = (NiRTTI *)0x030CA4B8;
const NiRTTI * NiRTTI_bhkConvexTranslateShape = (NiRTTI *)0x0302EFF0; const NiRTTI * NiRTTI_bhkConvexTranslateShape = (NiRTTI *)0x030CA4D0;
const NiRTTI * NiRTTI_bhkConvexVerticesShape = (NiRTTI *)0x0302F008; const NiRTTI * NiRTTI_bhkConvexVerticesShape = (NiRTTI *)0x030CA4E8;
const NiRTTI * NiRTTI_bhkCylinderShape = (NiRTTI *)0x0302F020; const NiRTTI * NiRTTI_bhkCylinderShape = (NiRTTI *)0x030CA500;
const NiRTTI * NiRTTI_bhkMultiSphereShape = (NiRTTI *)0x0302F038; const NiRTTI * NiRTTI_bhkMultiSphereShape = (NiRTTI *)0x030CA518;
const NiRTTI * NiRTTI_bhkPlaneShape = (NiRTTI *)0x0302F050; const NiRTTI * NiRTTI_bhkPlaneShape = (NiRTTI *)0x030CA530;
const NiRTTI * NiRTTI_bhkTriangleShape = (NiRTTI *)0x0302F068; const NiRTTI * NiRTTI_bhkTriangleShape = (NiRTTI *)0x030CA548;
const NiRTTI * NiRTTI_bhkMoppBvTreeShape = (NiRTTI *)0x0302F080; const NiRTTI * NiRTTI_bhkMoppBvTreeShape = (NiRTTI *)0x030CA560;
const NiRTTI * NiRTTI_bhkTransformShape = (NiRTTI *)0x0302F098; const NiRTTI * NiRTTI_bhkTransformShape = (NiRTTI *)0x030CA578;
const NiRTTI * NiRTTI_bhkListShape = (NiRTTI *)0x0302F0B0; const NiRTTI * NiRTTI_bhkListShape = (NiRTTI *)0x030CA590;
const NiRTTI * NiRTTI_bhkBallAndSocketConstraint = (NiRTTI *)0x0302F0C8; const NiRTTI * NiRTTI_bhkBallAndSocketConstraint = (NiRTTI *)0x030CA5A8;
const NiRTTI * NiRTTI_bhkBallSocketConstraintChain = (NiRTTI *)0x0302F0E0; const NiRTTI * NiRTTI_bhkBallSocketConstraintChain = (NiRTTI *)0x030CA5C0;
const NiRTTI * NiRTTI_bhkGroupConstraint = (NiRTTI *)0x0302F0F8; const NiRTTI * NiRTTI_bhkGroupConstraint = (NiRTTI *)0x030CA5D8;
const NiRTTI * NiRTTI_bhkHingeLimitsConstraint = (NiRTTI *)0x0302F110; const NiRTTI * NiRTTI_bhkHingeLimitsConstraint = (NiRTTI *)0x030CA5F0;
const NiRTTI * NiRTTI_bhkFixedConstraint = (NiRTTI *)0x0302F128; const NiRTTI * NiRTTI_bhkFixedConstraint = (NiRTTI *)0x030CA608;
const NiRTTI * NiRTTI_bhkRagdollConstraint = (NiRTTI *)0x0302F140; const NiRTTI * NiRTTI_bhkRagdollConstraint = (NiRTTI *)0x030CA620;
const NiRTTI * NiRTTI_bhkRagdollLimitsConstraint = (NiRTTI *)0x0302F158; const NiRTTI * NiRTTI_bhkRagdollLimitsConstraint = (NiRTTI *)0x030CA638;
const NiRTTI * NiRTTI_bhkStiffSpringConstraint = (NiRTTI *)0x0302F170; const NiRTTI * NiRTTI_bhkStiffSpringConstraint = (NiRTTI *)0x030CA650;
const NiRTTI * NiRTTI_bhkWheelConstraint = (NiRTTI *)0x0302F188; const NiRTTI * NiRTTI_bhkWheelConstraint = (NiRTTI *)0x030CA668;
const NiRTTI * NiRTTI_bhkBreakableConstraint = (NiRTTI *)0x0302F1A0; const NiRTTI * NiRTTI_bhkBreakableConstraint = (NiRTTI *)0x030CA680;
const NiRTTI * NiRTTI_bhkAngularDashpotAction = (NiRTTI *)0x0302F1B8; const NiRTTI * NiRTTI_bhkAngularDashpotAction = (NiRTTI *)0x030CA698;
const NiRTTI * NiRTTI_bhkDashpotAction = (NiRTTI *)0x0302F1D0; const NiRTTI * NiRTTI_bhkDashpotAction = (NiRTTI *)0x030CA6B0;
const NiRTTI * NiRTTI_bhkLiquidAction = (NiRTTI *)0x0302F1E8; const NiRTTI * NiRTTI_bhkLiquidAction = (NiRTTI *)0x030CA6C8;
const NiRTTI * NiRTTI_bhkMotorAction = (NiRTTI *)0x0302F208; const NiRTTI * NiRTTI_bhkMotorAction = (NiRTTI *)0x030CA6E8;
const NiRTTI * NiRTTI_bhkOrientHingedBodyAction = (NiRTTI *)0x0302F220; const NiRTTI * NiRTTI_bhkOrientHingedBodyAction = (NiRTTI *)0x030CA700;
const NiRTTI * NiRTTI_bhkSpringAction = (NiRTTI *)0x0302F238; const NiRTTI * NiRTTI_bhkSpringAction = (NiRTTI *)0x030CA718;
const NiRTTI * NiRTTI_bhkBlendController = (NiRTTI *)0x0302F248; const NiRTTI * NiRTTI_bhkBlendController = (NiRTTI *)0x030CA728;
const NiRTTI * NiRTTI_bhkExtraData = (NiRTTI *)0x0302F258; const NiRTTI * NiRTTI_bhkExtraData = (NiRTTI *)0x030CA738;
const NiRTTI * NiRTTI_bhkPoseArray = (NiRTTI *)0x0302F268; const NiRTTI * NiRTTI_bhkPoseArray = (NiRTTI *)0x030CA748;
const NiRTTI * NiRTTI_bhkGenericConstraint = (NiRTTI *)0x0302F288; const NiRTTI * NiRTTI_bhkGenericConstraint = (NiRTTI *)0x030CA768;
const NiRTTI * NiRTTI_bhkCharControllerShape = (NiRTTI *)0x0302F298; const NiRTTI * NiRTTI_bhkCharControllerShape = (NiRTTI *)0x030CA778;
const NiRTTI * NiRTTI_bhkCollisionBox = (NiRTTI *)0x0302F2B0; const NiRTTI * NiRTTI_bhkCollisionBox = (NiRTTI *)0x030CA790;
const NiRTTI * NiRTTI_bhkShapeCollection = (NiRTTI *)0x0302F2C8; const NiRTTI * NiRTTI_bhkShapeCollection = (NiRTTI *)0x030CA7A8;
const NiRTTI * NiRTTI_bhkPositionConstraintMotor = (NiRTTI *)0x0302F330; const NiRTTI * NiRTTI_bhkPositionConstraintMotor = (NiRTTI *)0x030CA810;
const NiRTTI * NiRTTI_bhkVelocityConstraintMotor = (NiRTTI *)0x0302F340; const NiRTTI * NiRTTI_bhkVelocityConstraintMotor = (NiRTTI *)0x030CA820;
const NiRTTI * NiRTTI_bhkSpringDamperConstraintMotor = (NiRTTI *)0x0302F350; const NiRTTI * NiRTTI_bhkSpringDamperConstraintMotor = (NiRTTI *)0x030CA830;
const NiRTTI * NiRTTI_bhkCharacterProxy = (NiRTTI *)0x03030108; const NiRTTI * NiRTTI_bhkCharacterProxy = (NiRTTI *)0x030CB5E8;
const NiRTTI * NiRTTI_bhkCharacterRigidBody = (NiRTTI *)0x03030120; const NiRTTI * NiRTTI_bhkCharacterRigidBody = (NiRTTI *)0x030CB600;
const NiRTTI * NiRTTI_bhkHeightFieldShape = (NiRTTI *)0x03031428; const NiRTTI * NiRTTI_bhkHeightFieldShape = (NiRTTI *)0x030CC908;
const NiRTTI * NiRTTI_bhkConstraintChain = (NiRTTI *)0x03031440; const NiRTTI * NiRTTI_bhkConstraintChain = (NiRTTI *)0x030CC920;
const NiRTTI * NiRTTI_bhkBinaryAction = (NiRTTI *)0x03031458; const NiRTTI * NiRTTI_bhkBinaryAction = (NiRTTI *)0x030CC938;
const NiRTTI * NiRTTI_bhkPointToPathConstraint = (NiRTTI *)0x03031490; const NiRTTI * NiRTTI_bhkPointToPathConstraint = (NiRTTI *)0x030CC970;
const NiRTTI * NiRTTI_DebugTextExtraData = (NiRTTI *)0x03032C80; const NiRTTI * NiRTTI_DebugTextExtraData = (NiRTTI *)0x030CE170;
const NiRTTI * NiRTTI_BSFadeNode = (NiRTTI *)0x031D0D90; const NiRTTI * NiRTTI_BSFadeNode = (NiRTTI *)0x0326C0E8;
const NiRTTI * NiRTTI_BSShaderProperty = (NiRTTI *)0x031D0DC0; const NiRTTI * NiRTTI_BSShaderProperty = (NiRTTI *)0x0326C118;
const NiRTTI * NiRTTI_BSLeafAnimNode = (NiRTTI *)0x031D0DD0; const NiRTTI * NiRTTI_BSLeafAnimNode = (NiRTTI *)0x0326C128;
const NiRTTI * NiRTTI_BSTreeNode = (NiRTTI *)0x031D0DE0; const NiRTTI * NiRTTI_BSTreeNode = (NiRTTI *)0x0326C138;
const NiRTTI * NiRTTI_ShadowSceneNode = (NiRTTI *)0x031D1200; const NiRTTI * NiRTTI_ShadowSceneNode = (NiRTTI *)0x0326C560;
const NiRTTI * NiRTTI_BSLightingShaderProperty = (NiRTTI *)0x031D1AF8; const NiRTTI * NiRTTI_BSLightingShaderProperty = (NiRTTI *)0x0326CE30;
const NiRTTI * NiRTTI_BSGrassShaderProperty = (NiRTTI *)0x031D1B30; const NiRTTI * NiRTTI_BSGrassShaderProperty = (NiRTTI *)0x0326CE68;
const NiRTTI * NiRTTI_BSShaderAccumulator = (NiRTTI *)0x031D1D40; const NiRTTI * NiRTTI_BSShaderAccumulator = (NiRTTI *)0x0326D080;
const NiRTTI * NiRTTI_BSEffectShaderProperty = (NiRTTI *)0x031D1F00; const NiRTTI * NiRTTI_BSEffectShaderProperty = (NiRTTI *)0x0326D220;
const NiRTTI * NiRTTI_BSWaterShaderProperty = (NiRTTI *)0x03232D28; const NiRTTI * NiRTTI_BSWaterShaderProperty = (NiRTTI *)0x032CE048;
const NiRTTI * NiRTTI_BSBloodSplatterShaderProperty = (NiRTTI *)0x03232D38; const NiRTTI * NiRTTI_BSBloodSplatterShaderProperty = (NiRTTI *)0x032CE058;
const NiRTTI * NiRTTI_BSParticleShaderProperty = (NiRTTI *)0x032331B8; const NiRTTI * NiRTTI_BSParticleShaderProperty = (NiRTTI *)0x032CE448;
const NiRTTI * NiRTTI_BSTextureSet = (NiRTTI *)0x03233508; const NiRTTI * NiRTTI_BSTextureSet = (NiRTTI *)0x032CE798;
const NiRTTI * NiRTTI_BSShaderTextureSet = (NiRTTI *)0x03233518; const NiRTTI * NiRTTI_BSShaderTextureSet = (NiRTTI *)0x032CE7A8;
const NiRTTI * NiRTTI_BSSkyShaderProperty = (NiRTTI *)0x03233818; const NiRTTI * NiRTTI_BSSkyShaderProperty = (NiRTTI *)0x032CEAA8;
const NiRTTI * NiRTTI_BSFadeNodeCuller = (NiRTTI *)0x032838A0; const NiRTTI * NiRTTI_BSFadeNodeCuller = (NiRTTI *)0x0331EB30;
const NiRTTI * NiRTTI_BSDistantTreeShaderProperty = (NiRTTI *)0x032838D0; const NiRTTI * NiRTTI_BSDistantTreeShaderProperty = (NiRTTI *)0x0331EB60;
const NiRTTI * NiRTTI_BSCubeMapCamera = (NiRTTI *)0x03283AB0; const NiRTTI * NiRTTI_BSCubeMapCamera = (NiRTTI *)0x0331ED40;
const NiRTTI * NiRTTI_BSFogProperty = (NiRTTI *)0x03283B68; const NiRTTI * NiRTTI_BSFogProperty = (NiRTTI *)0x0331EDF8;
const NiRTTI * NiRTTI_BSClearZNode = (NiRTTI *)0x03495C48; const NiRTTI * NiRTTI_BSClearZNode = (NiRTTI *)0x03530EB8;
const NiRTTI * NiRTTI_NiCollisionObject = (NiRTTI *)0x03495D68; const NiRTTI * NiRTTI_NiCollisionObject = (NiRTTI *)0x03530FD8;
const NiRTTI * NiRTTI_BSOrderedNode = (NiRTTI *)0x03495D78; const NiRTTI * NiRTTI_BSOrderedNode = (NiRTTI *)0x03530FE8;
const NiRTTI * NiRTTI_BSLines = (NiRTTI *)0x03495D88; const NiRTTI * NiRTTI_BSLines = (NiRTTI *)0x03530FF8;
const NiRTTI * NiRTTI_BSDynamicLines = (NiRTTI *)0x03495D98; const NiRTTI * NiRTTI_BSDynamicLines = (NiRTTI *)0x03531008;
const NiRTTI * NiRTTI_BSMultiIndexTriShape = (NiRTTI *)0x03495DB8; const NiRTTI * NiRTTI_BSMultiIndexTriShape = (NiRTTI *)0x03531028;
const NiRTTI * NiRTTI_BSLightingShaderPropertyFloatController = (NiRTTI *)0x03495E60; const NiRTTI * NiRTTI_BSLightingShaderPropertyFloatController = (NiRTTI *)0x035310D0;
const NiRTTI * NiRTTI_BSLightingShaderPropertyUShortController = (NiRTTI *)0x03495E78; const NiRTTI * NiRTTI_BSLightingShaderPropertyUShortController = (NiRTTI *)0x035310E8;
const NiRTTI * NiRTTI_BSLightingShaderPropertyColorController = (NiRTTI *)0x03495E90; const NiRTTI * NiRTTI_BSLightingShaderPropertyColorController = (NiRTTI *)0x03531100;
const NiRTTI * NiRTTI_BSEffectShaderPropertyFloatController = (NiRTTI *)0x03495EC8; const NiRTTI * NiRTTI_BSEffectShaderPropertyFloatController = (NiRTTI *)0x03531138;
const NiRTTI * NiRTTI_BSEffectShaderPropertyColorController = (NiRTTI *)0x03495EE0; const NiRTTI * NiRTTI_BSEffectShaderPropertyColorController = (NiRTTI *)0x03531150;
const NiRTTI * NiRTTI_BSNiAlphaPropertyTestRefController = (NiRTTI *)0x03495EF0; const NiRTTI * NiRTTI_BSNiAlphaPropertyTestRefController = (NiRTTI *)0x03531160;
const NiRTTI * NiRTTI_BSPSysSimpleColorModifier = (NiRTTI *)0x03495F00; const NiRTTI * NiRTTI_BSPSysSimpleColorModifier = (NiRTTI *)0x03531170;
const NiRTTI * NiRTTI_BSPSysLODModifier = (NiRTTI *)0x03495F10; const NiRTTI * NiRTTI_BSPSysLODModifier = (NiRTTI *)0x03531180;
const NiRTTI * NiRTTI_BSParabolicCullingProcess = (NiRTTI *)0x03496398; const NiRTTI * NiRTTI_BSParabolicCullingProcess = (NiRTTI *)0x03531608;
const NiRTTI * NiRTTI_BSMeshLODTriShape = (NiRTTI *)0x034963A8; const NiRTTI * NiRTTI_BSMeshLODTriShape = (NiRTTI *)0x03531618;
const NiRTTI * NiRTTI_BSLODMultiIndexTriShape = (NiRTTI *)0x034963B8; const NiRTTI * NiRTTI_BSLODMultiIndexTriShape = (NiRTTI *)0x03531628;
const NiRTTI * NiRTTI_BSSubIndexLandTriShape = (NiRTTI *)0x034963D0; const NiRTTI * NiRTTI_BSSubIndexLandTriShape = (NiRTTI *)0x03531640;

@ -525,8 +525,8 @@ extern const NiRTTI * NiRTTI_NiVectorExtraData;
extern const NiRTTI * NiRTTI_BSLODTriShape; extern const NiRTTI * NiRTTI_BSLODTriShape;
extern const NiRTTI * NiRTTI_NiAdditionalGeometryData; extern const NiRTTI * NiRTTI_NiAdditionalGeometryData;
extern const NiRTTI * NiRTTI_BSSegmentedTriShape; extern const NiRTTI * NiRTTI_BSSegmentedTriShape;
extern const NiRTTI * NiRTTI_NiAccumulator;
extern const NiRTTI * NiRTTI_NiBackToFrontAccumulator; extern const NiRTTI * NiRTTI_NiBackToFrontAccumulator;
extern const NiRTTI * NiRTTI_NiAccumulator;
extern const NiRTTI * NiRTTI_NiTriBasedGeomData; extern const NiRTTI * NiRTTI_NiTriBasedGeomData;
extern const NiRTTI * NiRTTI_NiTriBasedGeom; extern const NiRTTI * NiRTTI_NiTriBasedGeom;
extern const NiRTTI * NiRTTI_NiCollisionData; extern const NiRTTI * NiRTTI_NiCollisionData;
@ -753,10 +753,10 @@ extern const NiRTTI * NiRTTI_bhkBlendCollisionObject;
extern const NiRTTI * NiRTTI_bhkAvoidBox; extern const NiRTTI * NiRTTI_bhkAvoidBox;
extern const NiRTTI * NiRTTI_bhkLimitedHingeConstraint; extern const NiRTTI * NiRTTI_bhkLimitedHingeConstraint;
extern const NiRTTI * NiRTTI_bhkMalleableConstraint; extern const NiRTTI * NiRTTI_bhkMalleableConstraint;
extern const NiRTTI * NiRTTI_bhkUnaryAction;
extern const NiRTTI * NiRTTI_bhkConstraint; extern const NiRTTI * NiRTTI_bhkConstraint;
extern const NiRTTI * NiRTTI_bhkPrismaticConstraint; extern const NiRTTI * NiRTTI_bhkPrismaticConstraint;
extern const NiRTTI * NiRTTI_bhkAction; extern const NiRTTI * NiRTTI_bhkAction;
extern const NiRTTI * NiRTTI_bhkUnaryAction;
extern const NiRTTI * NiRTTI_bhkTriSampledHeightFieldBvTreeShape; extern const NiRTTI * NiRTTI_bhkTriSampledHeightFieldBvTreeShape;
extern const NiRTTI * NiRTTI_bhkCachingShapePhantom; extern const NiRTTI * NiRTTI_bhkCachingShapePhantom;
extern const NiRTTI * NiRTTI_bhkRagdollTemplateData; extern const NiRTTI * NiRTTI_bhkRagdollTemplateData;

@ -1,12 +1,12 @@
#include "skse64/NiRenderer.h" #include "skse64/NiRenderer.h"
// 4EE5DE7D7BF6D392967302448BCC9612EEE6E7F9+4 // 984B8D46444288152A10744FB7226DC9943D175E+57
RelocPtr <BSRenderManager> g_renderManager(0x03028490); RelocPtr <BSRenderManager> g_renderManager(0x030C3C40);
BSRenderManager * BSRenderManager::GetSingleton() BSRenderManager * BSRenderManager::GetSingleton()
{ {
return g_renderManager; return g_renderManager;
} }
// 57AB5FBCBB5E60836D42FAF78C4DFED6A7BACA41+28 // 56C98A6AC471728E145A8629B087CE2BE81252C1+CC
RelocPtr <BSShaderResourceManager> g_shaderResourceManager(0x030136C0); RelocPtr <BSShaderResourceManager> g_shaderResourceManager(0x030AF4C0);

@ -31,8 +31,9 @@ public:
UInt64 unk2788[(0x2788 - 0x90) >> 3]; UInt64 unk2788[(0x2788 - 0x90) >> 3];
CRITICAL_SECTION lock; // 2790 CRITICAL_SECTION lock; // 2790
// 1412F0390 - CreateRenderTargets // 141415050 - CreateRenderTargets
DEFINE_MEMBER_FN_2(CreateRenderTexture, NiTexture::RendererData *, 0x00D6DBC0, UInt32 width, UInt32 height);
DEFINE_MEMBER_FN_2(CreateRenderTexture, NiTexture::RendererData *, 0x00DAA470, UInt32 width, UInt32 height);
}; };
extern RelocPtr <BSRenderManager> g_renderManager; extern RelocPtr <BSRenderManager> g_renderManager;

@ -21,9 +21,9 @@ public:
virtual bool SavePath(const char * path); virtual bool SavePath(const char * path);
MEMBER_FN_PREFIX(NiStream); MEMBER_FN_PREFIX(NiStream);
DEFINE_MEMBER_FN(ctor, NiStream *, 0x00C59690); DEFINE_MEMBER_FN(ctor, NiStream *, 0x00C81DB0);
DEFINE_MEMBER_FN(dtor, void, 0x00C598F0); DEFINE_MEMBER_FN(dtor, void, 0x00C82010);
DEFINE_MEMBER_FN(AddObject, void, 0x00C59AE0, NiObject * object); DEFINE_MEMBER_FN(AddObject, void, 0x00C82210, NiObject * object);
// void ** _vtbl; // 000 // void ** _vtbl; // 000
UInt64 pad004[(0x218 - 0x008) >> 3]; // 008 UInt64 pad004[(0x218 - 0x008) >> 3]; // 008
@ -55,7 +55,7 @@ class BSStream : public NiStream
{ {
public: public:
MEMBER_FN_PREFIX(BSStream); MEMBER_FN_PREFIX(BSStream);
DEFINE_MEMBER_FN(dtor, void, 0x0014CC20); DEFINE_MEMBER_FN(dtor, void, 0x001557C0);
UInt64 unk620; UInt64 unk620;
UInt64 unk628; UInt64 unk628;
@ -68,10 +68,7 @@ public:
DeepCopyStream(); DeepCopyStream();
virtual ~DeepCopyStream(); virtual ~DeepCopyStream();
// vtbl 001117394
MEMBER_FN_PREFIX(DeepCopyStream); MEMBER_FN_PREFIX(DeepCopyStream);
DEFINE_MEMBER_FN(SaveStream, bool, 0x00C59F10, char ** buffer, UInt32 * length); DEFINE_MEMBER_FN(SaveStream, bool, 0x00C826B0, char ** buffer, UInt32 * length);
DEFINE_MEMBER_FN(LoadStream, bool, 0x00C59EC0, char * buffer, UInt32 length); DEFINE_MEMBER_FN(LoadStream, bool, 0x00C82660, char * buffer, UInt32 length);
}; };

@ -1,4 +1,4 @@
#include "skse64/NiTextures.h" #include "skse64/NiTextures.h"
RelocAddr<_CreateSourceTexture> CreateSourceTexture(0x00C68D20); RelocAddr<_CreateSourceTexture> CreateSourceTexture(0x00C91F70);
RelocAddr<_LoadTexture> LoadTexture(0x01295C30); RelocAddr<_LoadTexture> LoadTexture(0x013BCA60);

@ -170,9 +170,9 @@ public:
MEMBER_FN_PREFIX(NiRenderedTexture); MEMBER_FN_PREFIX(NiRenderedTexture);
DEFINE_MEMBER_FN(ctor, void, 0x00000000); DEFINE_MEMBER_FN(ctor, void, 0x00000000);
DEFINE_MEMBER_FN(UpdateVirtualImage, void, 0x00ECDF50, NiRenderedTexture * newTexture); DEFINE_MEMBER_FN(UpdateVirtualImage, void, 0x00F113F0, NiRenderedTexture * newTexture);
DEFINE_MEMBER_FN(AddVirtualImage, UInt8, 0x00ECE010, BSFixedString linkageName); DEFINE_MEMBER_FN(AddVirtualImage, UInt8, 0x00F114C0, BSFixedString linkageName);
DEFINE_MEMBER_FN(ReleaseVirtualImage, void, 0x00ECDEE0); DEFINE_MEMBER_FN(ReleaseVirtualImage, void, 0x00F11380);
}; };
// 58 // 58
@ -201,4 +201,4 @@ typedef NiTexture * (*_CreateSourceTexture)(const BSFixedString & name);
extern RelocAddr<_CreateSourceTexture> CreateSourceTexture; extern RelocAddr<_CreateSourceTexture> CreateSourceTexture;
typedef void (*_LoadTexture)(const char * path, UInt8 unk1, NiPointer<NiTexture> & texture, bool unk2); typedef void (*_LoadTexture)(const char * path, UInt8 unk1, NiPointer<NiTexture> & texture, bool unk2);
extern RelocAddr<_LoadTexture> LoadTexture; extern RelocAddr<_LoadTexture> LoadTexture;

@ -1,9 +1,10 @@
#include "ObScript.h" #include "ObScript.h"
#include "skse64_common\Relocation.h" #include "skse64_common\Relocation.h"
// 698845F80EE915EE803E515A37C1269ED6A2FE43+47 // B0061DDA35158B8956EF9CFBDD3D63C5B4C96A8D+33
RelocPtr <ObScriptCommand> g_firstObScriptCommand(0x01DB8910); RelocPtr <ObScriptCommand> g_firstObScriptCommand(0x01E4D9B0);
// 698845F80EE915EE803E515A37C1269ED6A2FE43+1E // B0061DDA35158B8956EF9CFBDD3D63C5B4C96A8D+F
RelocPtr <ObScriptCommand> g_firstConsoleCommand(0x01DC6F60); RelocPtr <ObScriptCommand> g_firstConsoleCommand(0x01E5C000);
RelocAddr<_ObScript_ExtractArgs> ObjScript_ExtractArgs(0x002E8400); // 42E5B9018CCF84B813403067F1D963D8C753ED8D+4C
RelocAddr <_ObScript_ExtractArgs> ObScript_ExtractArgs(0x002FC800);

@ -99,7 +99,7 @@ typedef bool (* ObScript_Parse)(UInt32 numParams, const ObScriptParam* paramInfo
typedef bool (* ObScript_Eval)(TESObjectREFR* thisObj, void* arg1, void* arg2, double& result); typedef bool (* ObScript_Eval)(TESObjectREFR* thisObj, void* arg1, void* arg2, double& result);
typedef bool(* _ObScript_ExtractArgs)(const ObScriptParam * paramInfo, ScriptData * scriptData, UInt32& opcodeOffsetPtr, TESObjectREFR * thisObj, TESObjectREFR* containingObj, Script* scriptObj, ScriptLocals* locals, void* args1, void* args2); typedef bool(* _ObScript_ExtractArgs)(const ObScriptParam * paramInfo, ScriptData * scriptData, UInt32& opcodeOffsetPtr, TESObjectREFR * thisObj, TESObjectREFR* containingObj, Script* scriptObj, ScriptLocals* locals, void* args1, void* args2);
extern RelocAddr<_ObScript_ExtractArgs> ObjScript_ExtractArgs; extern RelocAddr<_ObScript_ExtractArgs> ObScript_ExtractArgs;
// 02E8400 // 02E8400

@ -18,10 +18,9 @@ public:
~VMArgList(); ~VMArgList();
MEMBER_FN_PREFIX(VMArgList); MEMBER_FN_PREFIX(VMArgList);
// 20AE20213D7A9C7AB3491192BCCB2467282AE266+44 DEFINE_MEMBER_FN(GetOffset, UInt32, 0x0136F0E0, VMState * state);
DEFINE_MEMBER_FN(GetOffset, UInt32, 0x01244970, VMState * state); // FB33603AEC8921D8A9361F52478B667E583E54A1+20
// 20AE20213D7A9C7AB3491192BCCB2467282AE266+62 DEFINE_MEMBER_FN(Get, VMValue *, 0x0136F150, VMState * state, UInt32 idx, UInt32 offset);
DEFINE_MEMBER_FN(Get, VMValue *, 0x012449D0, VMState * state, UInt32 idx, UInt32 offset);
}; };
template <typename T> template <typename T>

@ -1,4 +1,4 @@
#include "skse64/PapyrusInterfaces.h" #include "skse64/PapyrusInterfaces.h"
// 82677E39AC1FFB7F2E1C28FBABC2FC971DB49882+F7 // B085C9577FC3BACF4719EF79E3613E2327537C10+4F
RelocPtr <IObjectHandlePolicy*> g_objectHandlePolicy(0x031D07A8); RelocPtr <IObjectHandlePolicy*> g_objectHandlePolicy(0x0326BBB0);

@ -51,5 +51,5 @@ public:
// void ** _vtbl; // 00 // void ** _vtbl; // 00
MEMBER_FN_PREFIX(ObjectBindPolicy); MEMBER_FN_PREFIX(ObjectBindPolicy);
DEFINE_MEMBER_FN(BindObject, void, 0x0122DAD0, VMIdentifier ** identifier, UInt64 handle); DEFINE_MEMBER_FN(BindObject, void, 0x0135A430, VMIdentifier ** identifier, UInt64 handle);
}; };

@ -117,14 +117,14 @@ public:
virtual bool Run(VMValue * baseValue, VMClassRegistry * registry, UInt32 arg2, VMValue * resultValue, VMState * state) = 0; virtual bool Run(VMValue * baseValue, VMClassRegistry * registry, UInt32 arg2, VMValue * resultValue, VMState * state) = 0;
MEMBER_FN_PREFIX(NativeFunctionBase); MEMBER_FN_PREFIX(NativeFunctionBase);
DEFINE_MEMBER_FN(Impl_dtor, void, 0x01250ED0); DEFINE_MEMBER_FN(Impl_dtor, void, 0x0137AD80);
// ??_7?$NativeFunction1@VActiveEffect@@XPEAVTESForm@@@BSScript@@6B@ entry 6 // ??_7?$NativeFunction1@VActiveEffect@@XPEAVTESForm@@@BSScript@@6B@ entry 6
DEFINE_MEMBER_FN(Impl_GetParam, UInt64 *, 0x01250670, UInt32 idx, BSFixedString * nameOut, UInt64 * typeOut); DEFINE_MEMBER_FN(Impl_GetParam, UInt64 *, 0x0137A450, UInt32 idx, BSFixedString * nameOut, UInt64 * typeOut);
DEFINE_MEMBER_FN(Impl_Invoke, UInt32, 0x012507F0, UInt64 unk0, UInt64 unk1, VMClassRegistry * registry, VMState * unk3); DEFINE_MEMBER_FN(Impl_Invoke, UInt32, 0x0137A650, UInt64 unk0, UInt64 unk1, VMClassRegistry * registry, VMState * unk3);
// ??_7?$NativeFunction1@VActiveEffect@@XPEAVTESForm@@@BSScript@@6B@ entry 0x10 // ??_7?$NativeFunction1@VActiveEffect@@XPEAVTESForm@@@BSScript@@6B@ entry 0x10
DEFINE_MEMBER_FN(Impl_Fn10, BSFixedString *, 0x01250750); DEFINE_MEMBER_FN(Impl_Fn10, BSFixedString *, 0x0137A530);
// ??_7?$NativeFunction1@VActiveEffect@@XPEAVTESForm@@@BSScript@@6B@ entry 0x12 // ??_7?$NativeFunction1@VActiveEffect@@XPEAVTESForm@@@BSScript@@6B@ entry 0x12
DEFINE_MEMBER_FN(Impl_Fn12, bool, 0x01250770, UInt32 idx, UInt64 out); DEFINE_MEMBER_FN(Impl_Fn12, bool, 0x0137A550, UInt32 idx, UInt64 out);
DEFINE_STATIC_HEAP(Heap_Allocate, Heap_Free); DEFINE_STATIC_HEAP(Heap_Allocate, Heap_Free);
@ -156,8 +156,8 @@ public:
virtual bool Run(VMValue * baseValue, VMClassRegistry * registry, UInt32 arg2, VMValue * resultValue, VMState * state) = 0; virtual bool Run(VMValue * baseValue, VMClassRegistry * registry, UInt32 arg2, VMValue * resultValue, VMState * state) = 0;
MEMBER_FN_PREFIX(NativeFunction); MEMBER_FN_PREFIX(NativeFunction);
DEFINE_MEMBER_FN(Impl_ctor, NativeFunction *, 0x01250C80, const char * fnName, const char * className, UInt32 unk0, UInt32 numParams); DEFINE_MEMBER_FN(Impl_ctor, NativeFunction *, 0x0137AB30, const char * fnName, const char * className, UInt32 unk0, UInt32 numParams);
DEFINE_MEMBER_FN(Impl_dtor, void, 0x01250ED0); DEFINE_MEMBER_FN(Impl_dtor, void, 0x0137AD80); // same as NativeFunctionBase dtor
void DebugRunHook(VMValue * baseValue, VMClassRegistry * registry, UInt32 arg2, VMValue * resultValue, VMState * state); void DebugRunHook(VMValue * baseValue, VMClassRegistry * registry, UInt32 arg2, VMValue * resultValue, VMState * state);

@ -378,9 +378,15 @@ namespace papyrusObjectReference
UInt8 formType = pProduceRef->baseForm->formType; UInt8 formType = pProduceRef->baseForm->formType;
if (formType == kFormType_Tree || formType == kFormType_Flora) { if (formType == kFormType_Tree || formType == kFormType_Flora) {
if(isHarvested) if(isHarvested)
{
pProduceRef->flags |= TESObjectREFR::kFlag_Harvested; pProduceRef->flags |= TESObjectREFR::kFlag_Harvested;
pProduceRef->MarkChanged(TESObjectREFR::kChange_IsEmpty);
}
else else
{
pProduceRef->flags &= ~TESObjectREFR::kFlag_Harvested; pProduceRef->flags &= ~TESObjectREFR::kFlag_Harvested;
pProduceRef->ClearChanged(TESObjectREFR::kChange_IsEmpty);
}
} }
TaskInterface::UpdateHarvestModel(pProduceRef); TaskInterface::UpdateHarvestModel(pProduceRef);

@ -1,8 +1,8 @@
#include "PapyrusVM.h" #include "PapyrusVM.h"
#include "GameAPI.h" #include "GameAPI.h"
// 34E44118D2A6FDD3472D1A6D43002360FBDE4EA4+15 // 3740B7AD44E615CF1BB4401806BB6F9DB42DA46D+12
RelocPtr <SkyrimVM*> g_skyrimVM(0x01EC3B78); RelocPtr <SkyrimVM*> g_skyrimVM(0x01F5F4F8);
void VMClassInfo::AddRef(void) void VMClassInfo::AddRef(void)
{ {

@ -78,10 +78,10 @@ public:
void Release(void); void Release(void);
MEMBER_FN_PREFIX(VMClassInfo); MEMBER_FN_PREFIX(VMClassInfo);
DEFINE_MEMBER_FN(Destroy, void, 0x01237240); DEFINE_MEMBER_FN(Destroy, void, 0x013626F0);
DEFINE_MEMBER_FN(GetVariable, SInt32, 0x012385B0, BSFixedString * name); DEFINE_MEMBER_FN(GetVariable, SInt32, 0x01363980, BSFixedString * name);
// 1673D04F90861710999A3DC0514282C538D25FCA+187 //
DEFINE_MEMBER_FN(GetFunction, IFunction*, 0x0123C760, const char * fnName); DEFINE_MEMBER_FN(GetFunction, IFunction*, 0x013670C0, const char * fnName);
}; };
// This type is not fully decoded or correctly sized, just enough to use the functor // This type is not fully decoded or correctly sized, just enough to use the functor
@ -139,7 +139,6 @@ class VMUnlinkedClassList
UInt32 unk44; // 44 UInt32 unk44; // 44
}; };
// 044 // 044
class VMStackInfo class VMStackInfo
{ {
@ -391,16 +390,16 @@ public:
MEMBER_FN_PREFIX(SkyrimVM); MEMBER_FN_PREFIX(SkyrimVM);
// Used by Hooks_Papyrus // Used by Hooks_Papyrus
// 7B34FD8669F3B7848943EE6F26F783A154F6A336+31 //
DEFINE_MEMBER_FN(UnregisterFromSleep_Internal, void, 0x009247E0, UInt64 handle); DEFINE_MEMBER_FN(UnregisterFromSleep_Internal, void, 0x009520A0, UInt64 handle); // AE: using one function earlier due to inlining
DEFINE_MEMBER_FN(RevertGlobalData_Internal, bool, 0x0092DAE0); DEFINE_MEMBER_FN(RevertGlobalData_Internal, bool, 0x0095BD90);
// E79F47684196468F785E6950402DBDAA5A668FAA+110 // 4DF4B0288419C72FBF262CE2DBBAAFE7D9713C51+390
DEFINE_MEMBER_FN(SaveRegSleepEventHandles_Internal, bool, 0x0092EB50, void * handleReaderWriter, void * saveStorageWrapper); DEFINE_MEMBER_FN(SaveRegSleepEventHandles_Internal, bool, 0x0095D150, void * handleReaderWriter, void * saveStorageWrapper);
// ECCDB3740458A9BB07FA958498C66F04CE14F94C+1E6 // 4F9ECB23ABD5935D4160213D8A06DB7A94E6B988+2FB
DEFINE_MEMBER_FN(LoadRegSleepEventHandles_Internal, bool, 0x0092FD80, void * handleReaderWriter, void * loadStorageWrapper); DEFINE_MEMBER_FN(LoadRegSleepEventHandles_Internal, bool, 0x0095E3F0, void * handleReaderWriter, void * loadStorageWrapper); // AE: using one function earlier due to inlining
// 00011FEFBFDA69F253C84165B45736A4F0AF02B8+204 // 96B4034421813AABF0DBF8B2B00A84CC25FB9CA0+112
DEFINE_MEMBER_FN(QueueDelayFunctor_Internal, bool, 0x009252C0, void** pFunctor); DEFINE_MEMBER_FN(QueueDelayFunctor_Internal, bool, 0x00952F10, void** pFunctor);
bool QueueDelayFunctor(void** pFunctor) bool QueueDelayFunctor(void** pFunctor)
{ {
@ -438,7 +437,7 @@ public:
VMValue * Get(UInt32 idx) { return (idx < m_size) ? &m_data[idx] : NULL; } VMValue * Get(UInt32 idx) { return (idx < m_size) ? &m_data[idx] : NULL; }
MEMBER_FN_PREFIX(Output); MEMBER_FN_PREFIX(Output);
DEFINE_MEMBER_FN(Resize, bool, 0x00920360, UInt32 len); DEFINE_MEMBER_FN(Resize, bool, 0x0094D7B0, UInt32 len);
}; };
virtual bool Copy(Output * dst) = 0; virtual bool Copy(Output * dst) = 0;

@ -35,7 +35,7 @@ public:
void Destroy(void); void Destroy(void);
MEMBER_FN_PREFIX(VMIdentifier); MEMBER_FN_PREFIX(VMIdentifier);
DEFINE_MEMBER_FN(Destroy_Internal, void, 0x01233670); DEFINE_MEMBER_FN(Destroy_Internal, void, 0x0135EA90);
}; };
// 10 // 10
@ -97,7 +97,7 @@ public:
VMValue * GetData(void) { return (VMValue *)(this + 1); } VMValue * GetData(void) { return (VMValue *)(this + 1); }
MEMBER_FN_PREFIX(ArrayData); MEMBER_FN_PREFIX(ArrayData);
DEFINE_MEMBER_FN(Destroy, void, 0x01241E40); DEFINE_MEMBER_FN(Destroy, void, 0x0136C5D0);
}; };
UInt64 type; // 00 UInt64 type; // 00
@ -117,9 +117,9 @@ public:
} data; // 04 } data; // 04
MEMBER_FN_PREFIX(VMValue); MEMBER_FN_PREFIX(VMValue);
DEFINE_MEMBER_FN(Set, void, 0x01236E50, const VMValue * src); DEFINE_MEMBER_FN(Set, void, 0x013623F0, const VMValue * src);
DEFINE_MEMBER_FN(Destroy, void, 0x01236D10); DEFINE_MEMBER_FN(Destroy, void, 0x013622F0);
DEFINE_MEMBER_FN(SetArray, void, 0x01235F60, ArrayData * data); DEFINE_MEMBER_FN(SetArray, void, 0x01361320, ArrayData * data);
bool IsIdentifierArray() bool IsIdentifierArray()
{ {

@ -134,10 +134,6 @@ struct SKSETaskInterface
void (* AddUITask)(UIDelegate_v1 * task); void (* AddUITask)(UIDelegate_v1 * task);
}; };
//#ifdef _PPAPI
// ### this code is unsupported and will be changed in the future
class VMClassRegistry; class VMClassRegistry;
struct SKSEPapyrusInterface struct SKSEPapyrusInterface
@ -151,9 +147,6 @@ struct SKSEPapyrusInterface
bool (* Register)(RegisterFunctions callback); bool (* Register)(RegisterFunctions callback);
}; };
//#endif
/**** Messaging API docs ******************************************************************** /**** Messaging API docs ********************************************************************
* *
* Messaging API allows inter-plugin communication at run-time. A plugin may register * Messaging API allows inter-plugin communication at run-time. A plugin may register
@ -262,39 +255,79 @@ struct SKSETrampolineInterface
void* (*AllocateFromLocalPool)(PluginHandle plugin, size_t size); void* (*AllocateFromLocalPool)(PluginHandle plugin, size_t size);
}; };
typedef bool(*_SKSEPlugin_Query)(const SKSEInterface * skse, PluginInfo * info);
typedef bool(*_SKSEPlugin_Load)(const SKSEInterface * skse); typedef bool(*_SKSEPlugin_Load)(const SKSEInterface * skse);
/**** plugin API docs ********************************************************** /**** plugin versioning ********************************************************
* *
* The base API is pretty simple. Create a project based on the * The AE version of Skyrim SE broke plugin versioning as many were written
* skse_plugin_example project included with the SKSE source code, then define * with the assumption that the Address Library would always be valid.
* and export these functions: * These always report that they are compatible, then exit on startup because
* * they cannot find their address library file.
* bool SKSEPlugin_Query(const SKSEInterface * skse, PluginInfo * info)
* *
* This primary purposes of this function are to fill out the PluginInfo * To work around this problem, version checking has been reimplemented and
* structure, and to perform basic version checks based on the info in the * no longer calls any code. Plugins declare their compatibility, and SKSE
* SKSEInterface structure. Return false if your plugin is incompatible with * determines whether to load the plugin. Setting this up is simple, just
* the version of SKSE or the runtime passed in, otherwise return true. In * add something like this to your project:
* either case, fill out the PluginInfo structure.
* *
* Do not do anything other than fill out the PluginInfo structure and return
* true/false in this callback. extern "C" {
__declspec(dllexport) SKSEPluginVersionData SKSEPlugin_Version =
{
SKSEPluginVersionData::kVersion,
1,
"my awesome plugin",
"my name",
"support@example.com",
0, // not version independent
{ RUNTIME_VERSION_1_6_318, 0 }, // compatible with 1.6.318
0, // works with any version of the script extender. you probably do not need to put anything here
};
};
* *
* If the plugin is being loaded in the context of the editor, isEditor will be ******************************************************************************/
* non-zero, editorVersion will contain the current editor version, and
* runtimeVersion will be zero. In this case you can probably just return struct SKSEPluginVersionData
* true, however if you have multiple DLLs implementing the same behavior, for {
* example one for each version of ther runtime, only one of them should return enum
* true. {
kVersion = 1,
};
enum
{
// set this if you are using a (potential at this time of writing) post-AE version of the Address Library
kVersionIndependent_AddressLibraryPostAE = 1 << 0,
// set this if you exclusively use signature matching to find your addresses and have NO HARDCODED ADDRESSES
kVersionIndependent_Signatures = 1 << 1,
};
UInt32 dataVersion; // set to kVersion
UInt32 pluginVersion; // version number of your plugin
char name[256]; // null-terminated ASCII plugin name
char author[256]; // null-terminated ASCII plugin author name (can be empty)
char supportEmail[256]; // null-terminated ASCII support email address (can be empty)
// this is not for showing to users, it's in case I need to contact you about
// a compatibility problem with your plugin
// version compatibility
UInt32 versionIndependence; // set to one of the kVersionIndependent_ enums or zero
UInt32 compatibleVersions[16]; // zero-terminated list of RUNTIME_VERSION_ defines your plugin is compatible with
UInt32 seVersionRequired; // minimum version of the script extender required, compared against PACKED_SKSE_VERSION
// you probably should just set this to 0 unless you know what you are doing
};
/**** plugin API docs **********************************************************
* *
* The PluginInfo fields should be filled out as follows: * The base API is pretty simple. Add version data as shown in the
* - infoVersion should be set to PluginInfo::kInfoVersion * SKSEPluginVersionData docs above, and export this function:
* - name should be a pointer to a null-terminated string uniquely identifying
* your plugin, it will be used in the plugin querying API
* - version is only used by the plugin query API, and will be returned to
* scripts requesting the current version of your plugin
* *
* bool SKSEPlugin_Load(const SKSEInterface * skse) * bool SKSEPlugin_Load(const SKSEInterface * skse)
* *

Binary file not shown.

@ -1,11 +1,13 @@
#include "skse64/PluginManager.h" #include "skse64/PluginManager.h"
#include "common/IDirectoryIterator.h" #include "common/IDirectoryIterator.h"
#include "common/IFileStream.h"
#include "skse64/GameAPI.h" #include "skse64/GameAPI.h"
#include "skse64_common/Utilities.h" #include "skse64_common/Utilities.h"
#include "skse64/Serialization.h" #include "skse64/Serialization.h"
#include "skse64_common/skse_version.h" #include "skse64_common/skse_version.h"
#include "skse64/PapyrusEvents.h" #include "skse64/PapyrusEvents.h"
#include "skse64_common/BranchTrampoline.h" #include "skse64_common/BranchTrampoline.h"
#include "resource.h"
PluginManager g_pluginManager; PluginManager g_pluginManager;
@ -109,6 +111,14 @@ PluginManager::~PluginManager()
DeInit(); DeInit();
} }
PluginManager::LoadedPlugin::LoadedPlugin()
:handle(0)
,load(nullptr)
{
memset(&info, 0, sizeof(info));
memset(&version, 0, sizeof(version));
}
bool PluginManager::Init(void) bool PluginManager::Init(void)
{ {
bool result = false; bool result = false;
@ -117,8 +127,12 @@ bool PluginManager::Init(void)
{ {
_MESSAGE("plugin directory = %s", m_pluginDirectory.c_str()); _MESSAGE("plugin directory = %s", m_pluginDirectory.c_str());
// avoid realloc
m_plugins.reserve(5);
__try __try
{ {
ScanPlugins();
InstallPlugins(); InstallPlugins();
result = true; result = true;
@ -130,6 +144,8 @@ bool PluginManager::Init(void)
} }
} }
ReportPluginErrors();
return result; return result;
} }
@ -244,117 +260,183 @@ bool PluginManager::FindPluginDirectory(void)
return result; return result;
} }
void PluginManager::InstallPlugins(void) void PluginManager::ScanPlugins(void)
{ {
// avoid realloc _MESSAGE("scanning plugin directory %s", m_pluginDirectory.c_str());
m_plugins.reserve(5);
UInt32 handleIdx = 1; // start at 1, 0 is reserved for internal use
for(IDirectoryIterator iter(m_pluginDirectory.c_str(), "*.dll"); !iter.Done(); iter.Next()) for(IDirectoryIterator iter(m_pluginDirectory.c_str(), "*.dll"); !iter.Done(); iter.Next())
{ {
std::string pluginPath = iter.GetFullPath(); std::string pluginPath = iter.GetFullPath();
_MESSAGE("checking plugin %s", pluginPath.c_str());
LoadedPlugin plugin; LoadedPlugin plugin;
memset(&plugin, 0, sizeof(plugin)); plugin.dllName = iter.Get()->cFileName;
_MESSAGE("checking plugin %s", plugin.dllName.c_str());
HMODULE resourceHandle = (HMODULE)LoadLibraryEx(pluginPath.c_str(), nullptr, LOAD_LIBRARY_AS_IMAGE_RESOURCE);
if(resourceHandle)
{
if(Is64BitDLL(resourceHandle))
{
auto * version = (const SKSEPluginVersionData *)GetResourceLibraryProcAddress(resourceHandle, "SKSEPlugin_Version");
if(version)
{
plugin.version = *version;
Sanitize(&plugin.version);
auto * loadStatus = CheckPluginCompatibility(plugin.version);
if(!loadStatus)
{
// compatible, add to list
plugin.internalHandle = handleIdx;
handleIdx++;
m_plugins.push_back(plugin);
}
else
{
LogPluginLoadError(plugin, loadStatus);
}
}
else
{
LogPluginLoadError(plugin, "no version data", 0, false);
}
}
else
{
LogPluginLoadError(plugin, "LE plugin cannot be used with SE");
}
FreeLibrary(resourceHandle);
}
else
{
LogPluginLoadError(plugin, "couldn't load plugin", GetLastError());
}
}
}
const char * PluginManager::CheckAddressLibrary(void)
{
static bool s_checked = false;
static const char * s_status = nullptr;
if(s_checked)
{
return s_status;
}
char fileName[256];
_snprintf_s(fileName, 256, "Data\\SKSE\\Plugins\\versionlib-%d-%d-%d-%d.bin",
GET_EXE_VERSION_MAJOR(RUNTIME_VERSION),
GET_EXE_VERSION_MINOR(RUNTIME_VERSION),
GET_EXE_VERSION_BUILD(RUNTIME_VERSION),
0);
IFileStream versionLib;
if(!versionLib.Open(fileName))
{
m_oldAddressLibrary = true;
s_status = "disabled, address library needs to be updated";
}
s_checked = true;
return s_status;
}
void PluginManager::InstallPlugins(void)
{
for(size_t i = 0; i < m_plugins.size(); i++)
{
auto & plugin = m_plugins[i];
_MESSAGE("loading plugin \"%s\"", plugin.version.name);
s_currentLoadingPlugin = &plugin; s_currentLoadingPlugin = &plugin;
s_currentPluginHandle = m_plugins.size() + 1; // +1 because 0 is reserved for internal use s_currentPluginHandle = plugin.internalHandle;
std::string pluginPath = m_pluginDirectory + plugin.dllName;
plugin.handle = (HMODULE)LoadLibrary(pluginPath.c_str()); plugin.handle = (HMODULE)LoadLibrary(pluginPath.c_str());
if(plugin.handle) if(plugin.handle)
{ {
bool success = false; bool success = false;
plugin.query = (_SKSEPlugin_Query)GetProcAddress(plugin.handle, "SKSEPlugin_Query");
plugin.load = (_SKSEPlugin_Load)GetProcAddress(plugin.handle, "SKSEPlugin_Load"); plugin.load = (_SKSEPlugin_Load)GetProcAddress(plugin.handle, "SKSEPlugin_Load");
if(plugin.load)
if(plugin.query && plugin.load)
{ {
const char * loadStatus = NULL; const char * loadStatus = NULL;
loadStatus = SafeCallQueryPlugin(&plugin, &g_SKSEInterface); loadStatus = SafeCallLoadPlugin(&plugin, &g_SKSEInterface);
if(!loadStatus) if(!loadStatus)
{ {
loadStatus = CheckPluginCompatibility(&plugin); success = true;
loadStatus = "loaded correctly";
}
if(!loadStatus) ASSERT(loadStatus);
{
loadStatus = SafeCallLoadPlugin(&plugin, &g_SKSEInterface);
if(!loadStatus) if(success)
{ {
loadStatus = "loaded correctly"; _MESSAGE("plugin %s (%08X %s %08X) %s (handle %d)",
success = true; plugin.dllName.c_str(),
} plugin.version.dataVersion,
} plugin.version.name,
plugin.version.pluginVersion,
loadStatus,
s_currentPluginHandle);
} }
else else
{ {
loadStatus = "reported as incompatible during query"; LogPluginLoadError(plugin, loadStatus);
} }
ASSERT(loadStatus);
_MESSAGE("plugin %s (%08X %s %08X) %s (handle %d)",
pluginPath.c_str(),
plugin.info.infoVersion,
plugin.info.name ? plugin.info.name : "<NULL>",
plugin.info.version,
loadStatus,
s_currentPluginHandle);
} }
else else
{ {
_MESSAGE("plugin %s does not appear to be an SKSE plugin", pluginPath.c_str()); LogPluginLoadError(plugin, "does not appear to be an SKSE plugin");
} }
if(success) if(!success)
{
// succeeded, add it to the list
m_plugins.push_back(plugin);
}
else
{ {
// failed, unload the library // failed, unload the library
FreeLibrary(plugin.handle); FreeLibrary(plugin.handle);
// and remove from plugins list
m_plugins.erase(m_plugins.begin() + i);
// fix iterator
i--;
} }
} }
else else
{ {
_ERROR("couldn't load plugin %s (Error %d)", pluginPath.c_str(), GetLastError()); LogPluginLoadError(plugin, "couldn't load plugin", GetLastError());
} }
} }
s_currentLoadingPlugin = NULL; s_currentLoadingPlugin = NULL;
s_currentPluginHandle = 0; s_currentPluginHandle = 0;
// make fake PluginInfo structs after m_plugins is locked
for(auto & plugin : m_plugins)
{
plugin.info.infoVersion = PluginInfo::kInfoVersion;
plugin.info.name = plugin.version.name;
plugin.info.version = plugin.version.pluginVersion;
}
// alert any listeners that plugin load has finished // alert any listeners that plugin load has finished
Dispatch_Message(0, SKSEMessagingInterface::kMessage_PostLoad, NULL, 0, NULL); Dispatch_Message(0, SKSEMessagingInterface::kMessage_PostLoad, NULL, 0, NULL);
// second post-load dispatch // second post-load dispatch
Dispatch_Message(0, SKSEMessagingInterface::kMessage_PostPostLoad, NULL, 0, NULL); Dispatch_Message(0, SKSEMessagingInterface::kMessage_PostPostLoad, NULL, 0, NULL);
} }
// SEH-wrapped calls to plugin API functions to avoid bugs from bringing down the core
const char * PluginManager::SafeCallQueryPlugin(LoadedPlugin * plugin, const SKSEInterface * skse)
{
__try
{
if(!plugin->query(skse, &plugin->info))
{
return "reported as incompatible during query";
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
// something very bad happened
return "disabled, fatal error occurred while querying plugin";
}
return NULL;
}
const char * PluginManager::SafeCallLoadPlugin(LoadedPlugin * plugin, const SKSEInterface * skse) const char * PluginManager::SafeCallLoadPlugin(LoadedPlugin * plugin, const SKSEInterface * skse)
{ {
__try __try
@ -373,6 +455,13 @@ const char * PluginManager::SafeCallLoadPlugin(LoadedPlugin * plugin, const SKSE
return NULL; return NULL;
} }
void PluginManager::Sanitize(SKSEPluginVersionData * version)
{
version->name[sizeof(version->name) - 1] = 0;
version->author[sizeof(version->author) - 1] = 0;
version->supportEmail[sizeof(version->supportEmail) - 1] = 0;
}
enum enum
{ {
kCompat_BlockFromRuntime = 1 << 0, kCompat_BlockFromRuntime = 1 << 0,
@ -389,19 +478,20 @@ struct MinVersionEntry
static const MinVersionEntry kMinVersionList[] = static const MinVersionEntry kMinVersionList[] =
{ {
// returns true for multiple versions of the runtime
{ "papyrusutil plugin", 2, "broken version check, will crash the game", kCompat_BlockFromRuntime },
{ NULL, 0, NULL } { NULL, 0, NULL }
}; };
// see if we have a plugin that we know causes problems const char * PluginManager::CheckPluginCompatibility(const SKSEPluginVersionData & version)
const char * PluginManager::CheckPluginCompatibility(LoadedPlugin * plugin)
{ {
__try __try
{ {
// stupid plugin check // basic validity
if(!plugin->info.name) if(version.dataVersion != SKSEPluginVersionData::kVersion)
{
return "disabled, bad version data";
}
if(!version.name[0])
{ {
return "disabled, no name specified"; return "disabled, no name specified";
} }
@ -409,9 +499,9 @@ const char * PluginManager::CheckPluginCompatibility(LoadedPlugin * plugin)
// check for 'known bad' versions of plugins // check for 'known bad' versions of plugins
for(const MinVersionEntry * iter = kMinVersionList; iter->name; ++iter) for(const MinVersionEntry * iter = kMinVersionList; iter->name; ++iter)
{ {
if(!strcmp(iter->name, plugin->info.name)) if(!strcmp(iter->name, version.name))
{ {
if(plugin->info.version < iter->minVersion) if(version.pluginVersion < iter->minVersion)
{ {
#ifdef RUNTIME #ifdef RUNTIME
if(iter->compatFlags & kCompat_BlockFromRuntime) if(iter->compatFlags & kCompat_BlockFromRuntime)
@ -431,6 +521,52 @@ const char * PluginManager::CheckPluginCompatibility(LoadedPlugin * plugin)
break; break;
} }
} }
// version compatibility
const UInt32 kIndependentMask =
SKSEPluginVersionData::kVersionIndependent_AddressLibraryPostAE |
SKSEPluginVersionData::kVersionIndependent_Signatures;
if(version.versionIndependence & ~kIndependentMask)
{
return "disabled, unsupported version independence method";
}
if(version.versionIndependence & SKSEPluginVersionData::kVersionIndependent_AddressLibraryPostAE)
{
const char * result = CheckAddressLibrary();
if(result) return result;
}
else if(!version.versionIndependence)
{
bool found = false;
for(UInt32 i = 0; i < _countof(version.compatibleVersions); i++)
{
UInt32 compatibleVersion = version.compatibleVersions[i];
if(compatibleVersion == RUNTIME_VERSION)
{
found = true;
break;
}
else if(!compatibleVersion)
{
break;
}
}
if(!found)
{
return "disabled, incompatible with current runtime version";
}
}
// SE version compatibility
if(version.seVersionRequired > PACKED_SKSE_VERSION)
{
return "disabled, requires newer script extender";
}
} }
__except(EXCEPTION_EXECUTE_HANDLER) __except(EXCEPTION_EXECUTE_HANDLER)
{ {
@ -438,12 +574,91 @@ const char * PluginManager::CheckPluginCompatibility(LoadedPlugin * plugin)
return "disabled, fatal error occurred while checking plugin compatibility"; return "disabled, fatal error occurred while checking plugin compatibility";
} }
return NULL; return nullptr;
}
void PluginManager::LogPluginLoadError(const LoadedPlugin & pluginSrc, const char * errStr, UInt32 errCode, bool isError)
{
LoadedPlugin plugin = pluginSrc;
plugin.errorState = errStr;
plugin.errorCode = errCode;
if(isError)
m_erroredPlugins.push_back(plugin);
_MESSAGE("plugin %s (%08X %s %08X) %s %d (handle %d)",
plugin.dllName.c_str(),
plugin.version.dataVersion,
plugin.version.name,
plugin.version.pluginVersion,
plugin.errorState,
plugin.errorCode,
s_currentPluginHandle);
}
void PluginManager::ReportPluginErrors()
{
#if 0
PluginErrorDialogBox dialog(*this);
dialog.Show();
return;
#endif
if(m_erroredPlugins.empty())
return;
if(m_oldAddressLibrary)
UpdateAddressLibraryPrompt();
// With this plugin DLL load error, the thread of prophecy is severed. Update your plugins to restore the weave of fate, or persist in the doomed world you have created
std::string message = "A DLL plugin has failed to load correctly. If a new version of Skyrim was just released, the plugin needs to be updated. Please check the mod's webpage for updates.\n";
for(auto & plugin : m_erroredPlugins)
{
message += "\n";
message += plugin.dllName + ": " + plugin.errorState;
if(plugin.errorCode)
{
char codeStr[128];
sprintf_s(codeStr, "%08X", plugin.errorCode);
message += " (";
message += codeStr;
message += ")";
}
}
message += "\n\nContinuing to load may result in lost save data or other undesired behavior.";
message += "\nExit game? (yes highly suggested)";
int result = MessageBox(0, message.c_str(), "SKSE Plugin Loader", MB_YESNO);
if(result == IDYES)
{
TerminateProcess(GetCurrentProcess(), 0);
}
}
void PluginManager::UpdateAddressLibraryPrompt()
{
int result = MessageBox(0,
"DLL plugins you have installed require a new version of the Address Library. Either this is a new install, or Skyrim was just updated. Visit the Address Library webpage for updates?",
"SKSE Plugin Loader", MB_YESNO);
if(result == IDYES)
{
ShellExecute(0, nullptr, "https://www.nexusmods.com/skyrimspecialedition/mods/32444", nullptr, nullptr, 0);
TerminateProcess(GetCurrentProcess(), 0);
}
} }
void * PluginManager::GetEventDispatcher(UInt32 dispatcherId) void * PluginManager::GetEventDispatcher(UInt32 dispatcherId)
{ {
void * result = NULL; void * result = nullptr;
#ifdef RUNTIME #ifdef RUNTIME
switch(dispatcherId) switch(dispatcherId)
@ -475,7 +690,6 @@ void * PluginManager::GetEventDispatcher(UInt32 dispatcherId)
return result; return result;
} }
// Plugin communication interface // Plugin communication interface
struct PluginListener { struct PluginListener {
PluginHandle listener; PluginHandle listener;
@ -619,7 +833,7 @@ bool PluginManager::Dispatch_Message(PluginHandle sender, UInt32 messageType, vo
const char * PluginManager::GetPluginNameFromHandle(PluginHandle handle) const char * PluginManager::GetPluginNameFromHandle(PluginHandle handle)
{ {
if (handle > 0 && handle <= m_plugins.size()) if (handle > 0 && handle <= m_plugins.size())
return (m_plugins[handle - 1].info.name); return (m_plugins[handle - 1].version.name);
else if (handle == 0) else if (handle == 0)
return "SKSE"; return "SKSE";
@ -635,7 +849,7 @@ PluginHandle PluginManager::LookupHandleFromName(const char* pluginName)
for(LoadedPluginList::iterator iter = m_plugins.begin(); iter != m_plugins.end(); ++iter) for(LoadedPluginList::iterator iter = m_plugins.begin(); iter != m_plugins.end(); ++iter)
{ {
LoadedPlugin * plugin = &(*iter); LoadedPlugin * plugin = &(*iter);
if(!_stricmp(plugin->info.name, pluginName)) if(!_stricmp(plugin->version.name, pluginName))
{ {
return idx; return idx;
} }
@ -644,6 +858,77 @@ PluginHandle PluginManager::LookupHandleFromName(const char* pluginName)
return kPluginHandle_Invalid; return kPluginHandle_Invalid;
} }
void PluginErrorDialogBox::Show()
{
extern HINSTANCE g_moduleHandle;
CreateDialogParam(g_moduleHandle, MAKEINTRESOURCE(IDD_PLUGINERROR), NULL, _DialogProc, (LPARAM)this);
UInt32 err = GetLastError();
}
INT_PTR PluginErrorDialogBox::_DialogProc(HWND window, UINT msg, WPARAM wParam, LPARAM lParam)
{
INT_PTR result = 0;
PluginErrorDialogBox * context = nullptr;
if(msg == WM_INITDIALOG)
{
context = (PluginErrorDialogBox *)lParam;
context->m_window = window;
SetWindowLongPtr(window, GWLP_USERDATA, lParam);
}
else
{
context = (PluginErrorDialogBox *)GetWindowLongPtr(window, GWLP_USERDATA);
}
if(context)
result = context->DialogProc(msg, wParam, lParam);
return result;
}
INT_PTR PluginErrorDialogBox::DialogProc(UINT msg, WPARAM wParam, LPARAM lParam)
{
INT_PTR result = FALSE;
switch(msg)
{
case WM_INITDIALOG:
result = TRUE;
break;
case WM_COMMAND:
{
bool done = false;
switch(LOWORD(wParam))
{
case IDCANCEL:
done = true;
m_exitGame = true;
break;
case IDOK:
done = true;
break;
}
if(done)
{
DestroyWindow(m_window);
}
}
break;
default:
result = FALSE;
break;
}
return result;
}
inline void * BranchTrampolineManager::Allocate(PluginHandle plugin, size_t size) inline void * BranchTrampolineManager::Allocate(PluginHandle plugin, size_t size)
{ {
auto mem = m_trampoline.Allocate(size); auto mem = m_trampoline.Allocate(size);

@ -21,7 +21,6 @@ public:
PluginHandle LookupHandleFromName(const char* pluginName); PluginHandle LookupHandleFromName(const char* pluginName);
UInt32 GetNumPlugins(void); UInt32 GetNumPlugins(void);
static void * QueryInterface(UInt32 id); static void * QueryInterface(UInt32 id);
@ -37,31 +36,70 @@ public:
private: private:
struct LoadedPlugin struct LoadedPlugin
{ {
// internals LoadedPlugin();
HMODULE handle;
std::string dllName;
HMODULE handle = 0;
PluginInfo info; PluginInfo info;
UInt32 internalHandle = 0;
SKSEPluginVersionData version;
_SKSEPlugin_Load load = nullptr;
_SKSEPlugin_Query query; const char * errorState = nullptr;
_SKSEPlugin_Load load; UInt32 errorCode = 0;
}; };
bool FindPluginDirectory(void); bool FindPluginDirectory(void);
void ScanPlugins(void);
void InstallPlugins(void); void InstallPlugins(void);
const char * SafeCallQueryPlugin(LoadedPlugin * plugin, const SKSEInterface * skse);
const char * SafeCallLoadPlugin(LoadedPlugin * plugin, const SKSEInterface * skse); const char * SafeCallLoadPlugin(LoadedPlugin * plugin, const SKSEInterface * skse);
const char * CheckPluginCompatibility(LoadedPlugin * plugin); void Sanitize(SKSEPluginVersionData * version);
const char * CheckPluginCompatibility(const SKSEPluginVersionData & version);
const char * CheckAddressLibrary(void);
void LogPluginLoadError(const LoadedPlugin & plugin, const char * errStr, UInt32 errCode = 0, bool isError = true);
void ReportPluginErrors();
void UpdateAddressLibraryPrompt();
typedef std::vector <LoadedPlugin> LoadedPluginList; typedef std::vector <LoadedPlugin> LoadedPluginList;
std::string m_pluginDirectory; std::string m_pluginDirectory;
LoadedPluginList m_plugins; LoadedPluginList m_plugins;
LoadedPluginList m_erroredPlugins;
bool m_oldAddressLibrary = false;
static LoadedPlugin * s_currentLoadingPlugin; static LoadedPlugin * s_currentLoadingPlugin;
static PluginHandle s_currentPluginHandle; static PluginHandle s_currentPluginHandle;
}; };
class PluginErrorDialogBox
{
public:
PluginErrorDialogBox() = delete;
PluginErrorDialogBox(const PluginManager & mgr)
:m_owner(mgr) { }
void Show();
bool ShouldExitGame() { return m_exitGame; }
private:
static INT_PTR _DialogProc(HWND window, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR DialogProc(UINT msg, WPARAM wParam, LPARAM lParam);
HWND m_window = 0;
bool m_exitGame = false;
const PluginManager & m_owner;
};
class BranchTrampolineManager class BranchTrampolineManager
{ {
public: public:

@ -18,8 +18,8 @@ public:
virtual void Free(void * ptr); virtual void Free(void * ptr);
}; };
// C70DB2D0DA8EB136C1BB8E87A7E39C173A7E4C0B+21 // ED9B05AE7833EE13354B2DFB8CD6E79144EE0D7E+3B
RelocPtr<ScaleformHeap *> g_scaleformHeap(0x03032C50); RelocPtr<ScaleformHeap *> g_scaleformHeap(0x030CD880);
void * ScaleformHeap_Allocate(UInt32 size) void * ScaleformHeap_Allocate(UInt32 size)
{ {
@ -31,5 +31,5 @@ void ScaleformHeap_Free(void * ptr)
(*(g_scaleformHeap))->Free(ptr); (*(g_scaleformHeap))->Free(ptr);
} }
RelocAddr<_InvokeFunction> InvokeFunction(0x00ED6AC0); RelocAddr<_InvokeFunction> InvokeFunction(0x00F1F300);
RelocAddr<_GFxAllocateHeap> GFxAllocateHeap(0x00F483C0); RelocAddr<_GFxAllocateHeap> GFxAllocateHeap(0x00F919E0);

@ -15,7 +15,7 @@ GFxFunctionHandler::~GFxFunctionHandler()
FunctionHandlerCache g_functionHandlerCache; FunctionHandlerCache g_functionHandlerCache;
RelocAddr<FxDelegateHandler::Callback> PlaySoundCallback(0x008DA5C0); RelocAddr<FxDelegateHandler::Callback> PlaySoundCallback(0x0090A8F0);
FxResponseArgsList::FxResponseArgsList() FxResponseArgsList::FxResponseArgsList()
{ {

@ -43,7 +43,6 @@ public:
virtual void Invoke(Args * args) = 0; virtual void Invoke(Args * args) = 0;
MEMBER_FN_PREFIX(GFxFunctionHandler); MEMBER_FN_PREFIX(GFxFunctionHandler);
//DEFINE_MEMBER_FN(Destroy, GFxFunctionHandler *, 0, UInt32 flags);
}; };
typedef std::map <const std::type_info *, GFxFunctionHandler *> FunctionHandlerCache; typedef std::map <const std::type_info *, GFxFunctionHandler *> FunctionHandlerCache;

@ -4,7 +4,7 @@
GFxLoader * GFxLoader::GetSingleton() GFxLoader * GFxLoader::GetSingleton()
{ {
// 4E9F39D1066653EF254B38406212E476F80A6C9B+AE // D73FE972523296E269125B9E6F076AD967D7970C+F9
RelocPtr<GFxLoader*> g_GFxLoader(0x02F257A0); RelocPtr<GFxLoader*> g_GFxLoader(0x02FC0DB8);
return *g_GFxLoader; return *g_GFxLoader;
} }

@ -18,8 +18,8 @@ public:
virtual ~BSScaleformImageLoader(); virtual ~BSScaleformImageLoader();
virtual GImageInfoBase* LoadImage(const char * url); virtual GImageInfoBase* LoadImage(const char * url);
DEFINE_MEMBER_FN_1(AddVirtualImage, UInt8, 0x00F45350, NiTexture ** texture); DEFINE_MEMBER_FN_1(AddVirtualImage, UInt8, 0x00F8E4C0, NiTexture ** texture);
DEFINE_MEMBER_FN_1(ReleaseVirtualImage, UInt8, 0x00F45820, NiTexture ** texture); DEFINE_MEMBER_FN_1(ReleaseVirtualImage, UInt8, 0x00F8E940, NiTexture ** texture);
}; };
class GFxLoader class GFxLoader
@ -34,8 +34,7 @@ public:
static GFxLoader * GetSingleton(); static GFxLoader * GetSingleton();
MEMBER_FN_PREFIX(GFxLoader); MEMBER_FN_PREFIX(GFxLoader);
DEFINE_MEMBER_FN(ctor, GFxLoader *, 0x00ECE0D0); DEFINE_MEMBER_FN(ctor, GFxLoader *, 0x00F11530);
// Note: Probably in subclass DEFINE_MEMBER_FN(LoadMovie, bool, 0x00F11C60, IMenu* menu, GFxMovieView** viewOut, const char* name, int scaleMode, float backGroundAlpha); // probably in subclass
DEFINE_MEMBER_FN(LoadMovie, bool, 0x00ECE790, IMenu* menu, GFxMovieView** viewOut, const char* name, int scaleMode, float backGroundAlpha);
}; };

@ -1,7 +1,7 @@
#include "ScaleformState.h" #include "ScaleformState.h"
#include "skse64/GameAPI.h" #include "skse64/GameAPI.h"
RelocAddr<BSScaleformTranslator::_GetCachedString> BSScaleformTranslator::GetCachedString(0x00C29900); RelocAddr<BSScaleformTranslator::_GetCachedString> BSScaleformTranslator::GetCachedString(0x00C50510);
void SKSEGFxLogger::LogMessageVarg(UInt32 messageType, const char* fmt, va_list args) void SKSEGFxLogger::LogMessageVarg(UInt32 messageType, const char* fmt, va_list args)
{ {

@ -113,7 +113,7 @@ public:
void Destroy(void); void Destroy(void);
MEMBER_FN_PREFIX(GString); MEMBER_FN_PREFIX(GString);
DEFINE_MEMBER_FN(ctor, GString *, 0x00ED3A50, const char * string); DEFINE_MEMBER_FN(ctor, GString *, 0x00F1BB50, const char * string);
}; };

@ -126,26 +126,26 @@ public:
public: public:
GFxMovieRoot * root; GFxMovieRoot * root;
DEFINE_MEMBER_FN_3(HasMember, bool, 0x00ECA620, void * obj, const char * name, bool isDisplayObj); DEFINE_MEMBER_FN_3(HasMember, bool, 0x00F0DBC0, void * obj, const char * name, bool isDisplayObj);
DEFINE_MEMBER_FN_4(SetMember, bool, 0x00ECCBA0, void * obj, const char * name, GFxValue * value, bool isDisplayObj); DEFINE_MEMBER_FN_4(SetMember, bool, 0x00F10020, void * obj, const char * name, GFxValue * value, bool isDisplayObj);
DEFINE_MEMBER_FN_3(DeleteMember, bool, 0x00EC9490, void * obj, const char * name, bool isDisplayObj); DEFINE_MEMBER_FN_3(DeleteMember, bool, 0x00F0CAA0, void * obj, const char * name, bool isDisplayObj);
DEFINE_MEMBER_FN_4(GetMember, bool, 0x00ECA150, void * obj, const char * name, GFxValue * value, bool isDisplayObj); DEFINE_MEMBER_FN_4(GetMember, bool, 0x00F0D710, void * obj, const char * name, GFxValue * value, bool isDisplayObj);
DEFINE_MEMBER_FN_6(Invoke, bool, 0x00ECA860, void * obj, GFxValue * result, const char * name, GFxValue * args, UInt32 numArgs, bool isDisplayObj); DEFINE_MEMBER_FN_6(Invoke, bool, 0x00F0DE30, void * obj, GFxValue * result, const char * name, GFxValue * args, UInt32 numArgs, bool isDisplayObj);
DEFINE_MEMBER_FN_6(AttachMovie, bool, 0x00EC83A0, void * obj, GFxValue * value, const char * symbolName, const char * instanceName, SInt32 depth, void * initArgs); DEFINE_MEMBER_FN_6(AttachMovie, bool, 0x00F0B870, void * obj, GFxValue * value, const char * symbolName, const char * instanceName, SInt32 depth, void * initArgs);
DEFINE_MEMBER_FN_2(PushBack, bool, 0x00ECB300, void * obj, GFxValue * value); DEFINE_MEMBER_FN_2(PushBack, bool, 0x00F0E780, void * obj, GFxValue * value);
DEFINE_MEMBER_FN_3(SetText, bool, 0x00ECCCF0, void * obj, const char * text, bool html); DEFINE_MEMBER_FN_3(SetText, bool, 0x00F10120, void * obj, const char * text, bool html);
//DEFINE_MEMBER_FN(PopBack, bool, 0x00000000, void * obj, GFxValue * value); //DEFINE_MEMBER_FN(PopBack, bool, 0x00000000, void * obj, GFxValue * value);
DEFINE_MEMBER_FN_1(GetArraySize, UInt32, 0x00EC9BD0, void * obj); DEFINE_MEMBER_FN_1(GetArraySize, UInt32, 0x00F0D170, void * obj);
//DEFINE_MEMBER_FN(SetArraySize, bool, 0x00000000, void * obj, UInt32 size); //DEFINE_MEMBER_FN(SetArraySize, bool, 0x00000000, void * obj, UInt32 size);
DEFINE_MEMBER_FN_3(GetElement, bool, 0x00EC9F30, void * obj, UInt32 index, GFxValue * value); DEFINE_MEMBER_FN_3(GetElement, bool, 0x00F0D4F0, void * obj, UInt32 index, GFxValue * value);
//DEFINE_MEMBER_FN(SetElement, bool, 0x00000000, void * obj, UInt32 index, GFxValue * value); //DEFINE_MEMBER_FN(SetElement, bool, 0x00000000, void * obj, UInt32 index, GFxValue * value);
DEFINE_MEMBER_FN_3(GotoLabeledFrame, bool, 0x00ECA570, void * obj, const char * frameLabel, bool stop); DEFINE_MEMBER_FN_3(GotoLabeledFrame, bool, 0x00F0DB20, void * obj, const char * frameLabel, bool stop);
//DEFINE_MEMBER_FN(GotoFrame, bool, 0x00000000, void * obj, UInt32 frameNumber, bool stop); //DEFINE_MEMBER_FN(GotoFrame, bool, 0x00000000, void * obj, UInt32 frameNumber, bool stop);
DEFINE_MEMBER_FN_2(GetDisplayInfo, bool, 0x00EC9C20, void * obj, DisplayInfo * displayInfo); DEFINE_MEMBER_FN_2(GetDisplayInfo, bool, 0x00F0D1D0, void * obj, DisplayInfo * displayInfo);
DEFINE_MEMBER_FN_2(SetDisplayInfo, bool, 0x00ECBDB0, void * obj, DisplayInfo * displayInfo); DEFINE_MEMBER_FN_2(SetDisplayInfo, bool, 0x00F0F000, void * obj, DisplayInfo * displayInfo);
DEFINE_MEMBER_FN_2(AddManaged_Internal, void, 0x00ECB080, GFxValue * value, void * obj); DEFINE_MEMBER_FN_2(AddManaged_Internal, void, 0x00F0E500, GFxValue * value, void * obj);
DEFINE_MEMBER_FN_2(ReleaseManaged_Internal, void, 0x00ECB0E0, GFxValue * value, void * obj); DEFINE_MEMBER_FN_2(ReleaseManaged_Internal, void, 0x00F0E560, GFxValue * value, void * obj);
}; };
ObjectInterface * objectInterface; // 00 ObjectInterface * objectInterface; // 00

@ -21,11 +21,11 @@ class BSTaskPool
{ {
public: public:
MEMBER_FN_PREFIX(BSTaskPool); MEMBER_FN_PREFIX(BSTaskPool);
DEFINE_MEMBER_FN(SetNiGeometryTexture, UInt32, 0x005C6BF0, NiAVObject * geometry, BGSTextureSet * textureSet); DEFINE_MEMBER_FN(SetNiGeometryTexture, UInt32, 0x005EB9F0, NiAVObject * geometry, BGSTextureSet * textureSet);
void ProcessTasks(void); void ProcessTasks(void);
DEFINE_MEMBER_FN(ProcessTaskQueue_HookTarget, void, 0x005C1BE0); DEFINE_MEMBER_FN(ProcessTaskQueue_HookTarget, void, 0x005E9530);
static BSTaskPool * GetSingleton(void); static BSTaskPool * GetSingleton(void);
}; };

@ -0,0 +1,19 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by PluginLoadErrorDialog.rc
//
#define VS_VERSION_INFO 1
#define IDD_PLUGINERROR 2
#define IDC_PLUGINERROR_ERRORLIST 1001
#define IDC_STATIC -1
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1002
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

@ -24,7 +24,7 @@
#include "InternalSerialization.h" #include "InternalSerialization.h"
IDebugLog gLog; IDebugLog gLog;
void * g_moduleHandle = nullptr; HINSTANCE g_moduleHandle = nullptr;
void WaitForDebugger(void) void WaitForDebugger(void)
{ {
@ -129,8 +129,7 @@ extern "C" {
switch(dwReason) switch(dwReason)
{ {
case DLL_PROCESS_ATTACH: case DLL_PROCESS_ATTACH:
g_moduleHandle = (void *)hDllHandle; g_moduleHandle = (HINSTANCE)hDllHandle;
SKSE64_Initialize();
break; break;
case DLL_PROCESS_DETACH: case DLL_PROCESS_DETACH:

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save