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

This commit is contained in:
Eddoursul 2022-07-28 16:36:17 +02:00
parent 8210468f79
commit 0121c3cd13
125 changed files with 6438 additions and 5044 deletions

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.

View File

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

View File

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

View File

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.1340
# Visual Studio Version 17
VisualStudioVersion = 17.2.32616.157
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fs", "fs\fs.vcxproj", "{F0CF443B-B64A-489E-A826-6924FECB0F4E}"
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|Win32.ActiveCfg = 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.Build.0 = Release|Win32
{F0CF443B-B64A-489E-A826-6924FECB0F4E}.Release_Lib_VC142|x64.ActiveCfg = Release|Win32

View File

@ -5,7 +5,7 @@
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);
}

View File

@ -117,8 +117,9 @@ namespace PhasmalistScripts {
float strength = 0;
float physicalStrength = 0;
if (itemStack->type) {
if (itemStack->type->IsWeapon()) {
TESObjectWEAP * asWeapon = static_cast<TESObjectWEAP*>(itemStack->type);
TESObjectWEAP* asWeapon = static_cast<TESObjectWEAP*>(itemStack->type);
if (asWeapon) {
float baseDmg = papyrusWeapon::GetBaseDamage(asWeapon) * 1.5;
float speed = papyrusWeapon::GetSpeed(asWeapon);
@ -129,7 +130,7 @@ namespace PhasmalistScripts {
}
if (itemStack->type->IsArmor()) {
TESObjectARMO * asArmor = static_cast<TESObjectARMO*>(itemStack->type);
TESObjectARMO* asArmor = static_cast<TESObjectARMO*>(itemStack->type);
if (asArmor) {
physicalStrength = papyrusArmor::GetArmorRating(asArmor);
strength += physicalStrength;
@ -138,12 +139,13 @@ namespace PhasmalistScripts {
}
if (itemStack->type->formType == kFormType_Book) {
TESObjectBOOK * asBook = static_cast<TESObjectBOOK*>(itemStack->type);
TESObjectBOOK* asBook = static_cast<TESObjectBOOK*>(itemStack->type);
if (asBook) {
SpellItem * spell = papyrusBook::GetSpell(asBook);
SpellItem* spell = papyrusBook::GetSpell(asBook);
return getSpellStrength(spell);
}
}
}
strength = strength * itemStack->countDelta;

View File

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

View File

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

View File

@ -38,23 +38,23 @@
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@ -109,7 +109,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<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>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@ -123,7 +123,7 @@
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<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>
</Link>
</ItemDefinitionGroup>
@ -171,7 +171,7 @@
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<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>
</ItemDefinitionGroup>
<ItemGroup>

View File

@ -5,36 +5,101 @@
#include "PhasmalistInventoryFunctions.h"
#include "CreatePotion.h"
static PluginHandle g_pluginHandle = kPluginHandle_Invalid;
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" {
__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
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.SetLogLevel(IDebugLog::kLevel_DebugMessage);
_MESSAGE("fs_skse_functions");
_MESSAGE("EnderalSE");
#endif
// populate info structure
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;
// store plugin handle so we can identify ourselves later
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);
if (skse->isEditor) {
return false;
}
@ -46,7 +111,26 @@ extern "C" {
}
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);
@ -63,7 +147,14 @@ extern "C" {
_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;
}
};

View File

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

View File

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

View File

@ -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)

View File

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

View File

@ -8,8 +8,8 @@ class Heap
{
public:
MEMBER_FN_PREFIX(Heap);
DEFINE_MEMBER_FN(Allocate, void *, 0x00C02260, size_t size, size_t alignment, bool aligned);
DEFINE_MEMBER_FN(Free, void, 0x00C02560, void * buf, bool aligned);
DEFINE_MEMBER_FN(Allocate, void *, 0x00C27D60, size_t size, size_t alignment, bool aligned);
DEFINE_MEMBER_FN(Free, void, 0x00C281B0, void * buf, bool aligned);
};
extern RelocPtr <Heap> g_mainHeap;
@ -21,7 +21,7 @@ class ConsoleManager
{
public:
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);
};

View File

@ -256,11 +256,11 @@ public:
private:
MEMBER_FN_PREFIX(BaseExtraList);
// 6AE109C256B98466C001B25B75BD48FB62F884B1+5A
DEFINE_MEMBER_FN(CheckContainerExtraData_Internal, bool, 0x0010CC40, bool isEquipped);
// A7985F15034C77C00ACC57607F29F4802502A1BA+2F
DEFINE_MEMBER_FN(CheckContainerExtraData_Internal, bool, 0x00119580, bool isEquipped);
// 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;

View File

@ -260,7 +260,7 @@ public:
UInt8 pad31[7]; // 31
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(sizeof(TESCamera) == 0x38);
@ -297,8 +297,8 @@ public:
void SetDefaultStateBounds(float x, float y, float z);
MEMBER_FN_PREFIX(LocalMapCamera);
DEFINE_MEMBER_FN(ctor, void, 0x001F5390);
DEFINE_MEMBER_FN(SetNorthRotation, void, 0x001F5750, float northRotation);
DEFINE_MEMBER_FN(ctor, void, 0x00200F40);
DEFINE_MEMBER_FN(SetNorthRotation, void, 0x00201390, float northRotation);
};
STATIC_ASSERT(offsetof(LocalMapCamera, northRotation) == 0x60);
@ -339,8 +339,8 @@ public:
static PlayerCamera * GetSingleton(void)
{
// 0FAF5D3C755F11266ECC496FD392A0A2EA23403B+37
static RelocPtr<PlayerCamera*> g_playerCamera(0x02EC59B8);
// 8737E3612AB5A303F82C06809C0B0B41B2015C66+1E
static RelocPtr<PlayerCamera*> g_playerCamera(0x02F61288);
return *g_playerCamera;
}
@ -380,7 +380,7 @@ public:
UInt8 pad166[2]; // 166
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);

View File

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

View File

@ -361,7 +361,7 @@ public:
UInt32 LoadScripts_Hook();
MEMBER_FN_PREFIX(DataHandler);
DEFINE_MEMBER_FN(LoadScripts, UInt32, 0x001713D0);
DEFINE_MEMBER_FN(LoadScripts, UInt32, 0x0017BDB0);
};
STATIC_ASSERT(offsetof(DataHandler, regionList) == 0xD00);
@ -395,8 +395,6 @@ public:
};
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
@ -412,8 +410,8 @@ public:
static EquipManager * GetSingleton(void);
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(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(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, 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:
MEMBER_FN_PREFIX(MorphDatabase);
DEFINE_MEMBER_FN(GetFaceGenModelMapEntry, bool, 0x003D4F90, const char * meshPath, BSFaceGenModelMap ** entry);
DEFINE_MEMBER_FN(SetFaceGenModelMapEntry, void, 0x003D4D80, const char * meshPath, BSFaceGenModel * model);
DEFINE_MEMBER_FN(GetFaceGenModelMapEntry, bool, 0x003ED210, const char * meshPath, BSFaceGenModelMap ** entry);
DEFINE_MEMBER_FN(SetFaceGenModelMapEntry, void, 0x003ED0C0, const char * meshPath, BSFaceGenModel * model);
UInt64 unk00; // 00
UInt32 unk08; // 08
@ -529,8 +527,8 @@ public:
UInt8 pad61[7]; // 61
MEMBER_FN_PREFIX(FaceGen);
DEFINE_MEMBER_FN(RegenerateHead, void, 0x003D2A60, BSFaceGenNiNode * headNode, BGSHeadPart * head, TESNPC * npc);
DEFINE_MEMBER_FN(ApplyMorph, void, 0x003D2380, BSFaceGenNiNode * faceGenNode, BGSHeadPart * headPart, BSFixedString * morphName, float relative);
DEFINE_MEMBER_FN(RegenerateHead, void, 0x003EA340, BSFaceGenNiNode * headNode, BGSHeadPart * head, TESNPC * npc);
DEFINE_MEMBER_FN(ApplyMorph, void, 0x003E9C40, BSFaceGenNiNode* faceGenNode, BGSHeadPart* headPart, BSFixedString* morphName, float relative);
};
STATIC_ASSERT(offsetof(FaceGen, isReset) == 0x58);
@ -676,12 +674,11 @@ public:
}
MEMBER_FN_PREFIX(PersistentFormManager);
DEFINE_MEMBER_FN(CreateOffensiveEnchantment, EnchantmentItem *, 0x0059F0F0, tArray<MagicItem::EffectItem> * effectArray);
DEFINE_MEMBER_FN(CreateDefensiveEnchantment, EnchantmentItem *, 0x0059F190, tArray<MagicItem::EffectItem> * effectArray);
DEFINE_MEMBER_FN(CreatePoison, void, 0x0059F2E0, tArray<MagicItem::EffectItem> * effectArray, AlchemyItem ** poison);
DEFINE_MEMBER_FN(CreatePotion, void, 0x0059F230, AlchemyItem ** potion, tArray<MagicItem::EffectItem> * effectArray);
//DEFINE_MEMBER_FN(AddPersistentForm, void, 0x0068A0F0, TESForm *);
DEFINE_MEMBER_FN(ScheduleForDeletion, void, 0x0059F6E0, TESForm *);
DEFINE_MEMBER_FN(CreateOffensiveEnchantment, EnchantmentItem *, 0x005C1350, tArray<MagicItem::EffectItem> * effectArray);
DEFINE_MEMBER_FN(CreateDefensiveEnchantment, EnchantmentItem *, 0x005C13F0, tArray<MagicItem::EffectItem> * effectArray);
DEFINE_MEMBER_FN(CreatePoison, void, 0x005C1540, tArray<MagicItem::EffectItem> * effectArray, AlchemyItem ** poison);
DEFINE_MEMBER_FN(CreatePotion, void, 0x005C1490, AlchemyItem ** potion, tArray<MagicItem::EffectItem> * effectArray);
DEFINE_MEMBER_FN(ScheduleForDeletion, void, 0x005C1870, TESForm *);
};
STATIC_ASSERT(sizeof(PersistentFormManager) == 0xD0);
@ -865,15 +862,14 @@ public:
UInt8 unk370[0x60]; // 370 - TODO: .?AV?$BSTCommonStaticMessageQueue@V?$BSTSmartPointer@VRequest@saveload@bgs@@UBSTSmartPointerIntrusiveRefCount@@@@$07@@
private:
// SE: Save_Internal signature changed! Normal save: unk1=2, unk2=0
DEFINE_MEMBER_FN(Save_Internal, bool, 0x00586DE0, int unk1, UInt32 unk2, const char * name);
DEFINE_MEMBER_FN(Load_Internal, bool, 0x00587350, const char * name, int unk1, UInt32 unk2, UInt32 unk3);
DEFINE_MEMBER_FN(Save_Internal, bool, 0x005A87C0, 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(SaveGame_HookTarget, void, 0x0057CCC0, UInt64 *unk0);
DEFINE_MEMBER_FN(LoadGame_HookTarget, bool, 0x0057D1A0, UInt64 *unk0, UInt32 unk1, UInt32 unk2, void *unk3);
DEFINE_MEMBER_FN(SaveGame_HookTarget, void, 0x0059E730, UInt64 *unk0);
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(DeleteSavegame, void, 0x00586D70, const char * saveName, UInt32 unk1);
DEFINE_MEMBER_FN(ProcessEvents_Internal, void, 0x005ABA70);
DEFINE_MEMBER_FN(DeleteSavegame, void, 0x005A8750, const char * saveName, UInt32 unk1);
};
STATIC_ASSERT(offsetof(BGSSaveLoadManager, thread) == 0x2B0);
STATIC_ASSERT(offsetof(BGSSaveLoadManager::Thread, hThread) == 0x30);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -357,7 +357,7 @@ public:
enum {
kFlagIsDeleted = 0x20,
kFlagPlayerKnows = 0x40,
kFlagUnk_0x800 = 0x800
kFlagUnk_0x800 = 0x800,
};
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_08(UInt32 arg); // calls LoadForm
virtual TESForm * Unk_09(UInt32 arg1, void * arg2);
virtual bool MarkChanged(UInt32 changed); // mark as changed?
virtual void Unk_0B(UInt32 arg);
virtual bool MarkChanged(UInt32 changed);
virtual void ClearChanged(UInt32 changed);
virtual bool Unk_0C(UInt32 arg);
virtual void Unk_0D(UInt32 arg);
virtual void Unk_0E(UInt32 arg);
@ -967,9 +967,9 @@ public:
UInt32 unk40; // 40
MEMBER_FN_PREFIX(BGSListForm);
DEFINE_MEMBER_FN(AddFormToList, void, 0x002C53D0, TESForm * form);
DEFINE_MEMBER_FN(RemoveFormFromList, void, 0x002C5570, TESForm * form);
DEFINE_MEMBER_FN(RevertList, void, 0x002C5300);
DEFINE_MEMBER_FN(AddFormToList, void, 0x002D81C0, TESForm * form);
DEFINE_MEMBER_FN(RemoveFormFromList, void, 0x002D8390, TESForm * form);
DEFINE_MEMBER_FN(RevertList, void, 0x002D80E0);
class Visitor
{
@ -1700,8 +1700,8 @@ public:
UnkArray unk250; // 250
MEMBER_FN_PREFIX(TESQuest);
DEFINE_MEMBER_FN(ForceRefTo, UInt32, 0x00375050, UInt32 aliasId, TESObjectREFR * reference);
DEFINE_MEMBER_FN(NewGame_Internal, UInt8, 0x00370910, UInt8 * unk1, UInt8 unk2);
DEFINE_MEMBER_FN(ForceRefTo, UInt32, 0x0038C240, UInt32 aliasId, TESObjectREFR * reference);
DEFINE_MEMBER_FN(NewGame_Internal, UInt8, 0x00387F50, UInt8 * unk1, UInt8 unk2);
UInt8 NewGame_Hook(UInt8 * unk1, UInt8 unk2);
};
@ -2572,7 +2572,7 @@ public:
UInt64 unk138; // 138
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, objectList) == 0xB8);
@ -3469,8 +3469,8 @@ public:
if(type > kFormType_Max)
return NULL;
// B8146167FE300AED18E0DCE1DA9C86E4C4D08513+11
static RelocPtr<IFormFactory *> kFactoryList(0x01EC3CE0);
// 5386ADDB542755AB5BD598497543E780AD5BDC54+35
static RelocPtr<IFormFactory *> kFactoryList(0x01F5F620);
return kFactoryList[type];
}

View File

@ -32,7 +32,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -42,7 +42,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -52,7 +52,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -62,7 +62,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -72,7 +72,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -82,7 +82,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -92,7 +92,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -102,7 +102,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -112,7 +112,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -122,7 +122,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -132,7 +132,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -142,7 +142,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -152,7 +152,7 @@ public:
virtual UInt8 Process(Actor * form, UInt32 unk04);
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>
@ -163,5 +163,5 @@ public:
MEMBER_FN_PREFIX(RightHandWeaponSheatheHandler);
// ??_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);
};

View File

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

View File

@ -287,7 +287,7 @@ public:
// used by Hooks_Event
PlayerControls * ctor_Hook(void);
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, remapMode) == 0x050);
@ -434,8 +434,8 @@ public:
static InputStringHolder * GetSingleton(void)
{
// 38C98DE3888C4A78379B4BC9F21B33FA74FB6E4C+32
static RelocPtr<InputStringHolder*> g_inputStringHolder(0x02F25250);
// 8BDB97B9BE3B9EBCCFB4F3BA9237EDC8341B354C+B
static RelocPtr<InputStringHolder*> g_inputStringHolder(0x02FC07C0);
return *g_inputStringHolder;
}
};

View File

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

View File

@ -98,10 +98,10 @@ public:
GRefCountBase * unk18; // 28 - holds a reference
MEMBER_FN_PREFIX(IMenu);
DEFINE_MEMBER_FN(InitMovie_internal, void, 0x00ECD970, GFxMovieView* view);
DEFINE_MEMBER_FN(NextFrame_internal, void, 0x00ECD8A0, UInt32 arg0, UInt32 arg1);
DEFINE_MEMBER_FN(ProcessMessage_internal, UInt32, 0x00ECD850, UIMessage* message);
DEFINE_MEMBER_FN(dtor, void, 0x00ECD7F0);
DEFINE_MEMBER_FN(InitMovie_internal, void, 0x00F10E30, GFxMovieView* view);
DEFINE_MEMBER_FN(NextFrame_internal, void, 0x00F10BC0, UInt32 arg0, UInt32 arg1);
DEFINE_MEMBER_FN(ProcessMessage_internal, UInt32, 0x00F10B70, UIMessage* message);
DEFINE_MEMBER_FN(dtor, void, 0x00F10B10);
};
STATIC_ASSERT(offsetof(IMenu, view) == 0x10);
@ -252,8 +252,8 @@ public:
MEMBER_FN_PREFIX(RaceSexMenu);
// FCFD4B12540A068252C0A71C5480E518DDF6EF60+58
DEFINE_MEMBER_FN(LoadSliders, void *, 0x008B5E20, UInt64 unk1, UInt8 unk2);
// B3D68A070DD2D03BA80128C5FED7004330D111AC+B1
DEFINE_MEMBER_FN(LoadSliders, void *, 0x008E6300, UInt64 unk1, UInt8 unk2);
};
STATIC_ASSERT(offsetof(RaceSexMenu, sliderData) == 0x140);
STATIC_ASSERT(offsetof(RaceSexMenu, raceIndex) == 0x188);
@ -366,8 +366,8 @@ public:
GFxValue object; // 10
MEMBER_FN_PREFIX(HUDObject);
DEFINE_MEMBER_FN_0(dtor, void, 0x00885C40);
DEFINE_MEMBER_FN_1(Impl_Fn03, void *, 0x00880140, void * unk1);
DEFINE_MEMBER_FN_0(dtor, void, 0x008B6170);
DEFINE_MEMBER_FN_1(Impl_Fn03, void *, 0x008B0FD0, void * unk1);
DEFINE_STATIC_HEAP(Heap_Allocate, Heap_Free);
};
@ -410,7 +410,7 @@ public:
TESWordOfPower* word; // 50
UInt32 time; // 58 - g_gameTime + iObjectivesWaitTime
DEFINE_MEMBER_FN_0(dtor, void, 0x00885400);
DEFINE_MEMBER_FN_0(dtor, void, 0x008B61E0);
};
// 78
@ -564,7 +564,7 @@ public:
UInt8 pad12[6]; // 12
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);
};
@ -840,13 +840,14 @@ public:
// this takes ownership of the message ptr
// 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
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)
{
// CB598A8812CFF3959F94DC8F8371BA876F68AE34+67
static RelocPtr<UIManager*> g_UIManager(0x01EC0A70);
// 5DCBE2588F11BA3D68C45F56DC0FC5D806409F85+C3
static RelocPtr<UIManager*> g_UIManager(0x01F5C3F0);
return *g_UIManager;
}
@ -855,7 +856,7 @@ public:
void QueueCommand(UIDelegate* 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(sizeof(UIManager) == 0xB80);
@ -942,8 +943,8 @@ public:
static UIStringHolder * GetSingleton(void)
{
// 81B349AB8ABC9944E48046819F0345AB0526CDB5+9
static RelocPtr<UIStringHolder *> g_UIStringHolder(0x01EC0A78);
// 5DCBE2588F11BA3D68C45F56DC0FC5D806409F85+BC
static RelocPtr<UIStringHolder *> g_UIStringHolder(0x01F5C3F8);
return *g_UIStringHolder;
}
};
@ -957,7 +958,7 @@ public:
static Inventory3DManager * GetSingleton(void)
{
// 6BC34CC398831C8B8BE5BE20EC213B5BE7C47A7A+2E
static RelocPtr<Inventory3DManager*> g_inventory3DManager(0x02F27180);
static RelocPtr<Inventory3DManager*> g_inventory3DManager(0x02FC2DF0);
return *g_inventory3DManager;
}
@ -996,17 +997,10 @@ public:
UInt8 pad15B[5];
MEMBER_FN_PREFIX(Inventory3DManager);
DEFINE_MEMBER_FN(UpdateItem3D, void, 0x00887970, InventoryEntryData * objDesc);
DEFINE_MEMBER_FN(UpdateMagic3D, void, 0x008879A0, TESForm * form, UInt32 unk1);
DEFINE_MEMBER_FN(Clear3D, void, 0x00887D10);
DEFINE_MEMBER_FN(Render, UInt32, 0x00887750);
//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);
DEFINE_MEMBER_FN(UpdateItem3D, void, 0x008B84E0, InventoryEntryData * objDesc);
DEFINE_MEMBER_FN(UpdateMagic3D, void, 0x008B8510, TESForm * form, UInt32 unk1);
DEFINE_MEMBER_FN(Clear3D, void, 0x008B88D0);
DEFINE_MEMBER_FN(Render, UInt32, 0x008B81F0);
};
STATIC_ASSERT(offsetof(Inventory3DManager, unk14) == 0x14);
@ -1097,15 +1091,15 @@ public:
private:
MEMBER_FN_PREFIX(MenuManager);
DEFINE_MEMBER_FN(IsMenuOpen, bool, 0x00EBE150, BSFixedString * menuName);
DEFINE_MEMBER_FN(Register_internal, void, 0x00EBF9C0, const char * name, CreatorFunc creator);
DEFINE_MEMBER_FN(IsMenuOpen, bool, 0x00F05300, BSFixedString * menuName);
DEFINE_MEMBER_FN(Register_internal, void, 0x00F06FD0, const char * name, CreatorFunc creator);
public:
static MenuManager * GetSingleton(void)
{
// 502FDB8FEA80C3705F9E228F79D4EA7A399CC7FD+32
static RelocPtr<MenuManager *> g_menuManager(0x01EBEB20);
// 0060C371BC22FE1665DD3BA10816084EEC6FAA3F+4
static RelocPtr<MenuManager *> g_menuManager(0x01F5A4A0);
return *g_menuManager;
}

View File

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

View File

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

View File

@ -2,7 +2,8 @@
#include "skse64_common/Relocation.h"
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)
{

View File

@ -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)
extern const void * RTTI_BaseFormComponent;
extern const void * RTTI_IFormFactory;
extern const void * RTTI_BaseFormComponent;
extern const void * RTTI_AlchemyItem;
extern const void * RTTI_BGSDualCastData;
extern const void * RTTI_Setting;
@ -195,8 +195,8 @@ extern const void * RTTI_ExtraCellGrassData;
extern const void * RTTI_ExtraInteraction;
extern const void * RTTI_ExtraGroupConstraint;
extern const void * RTTI_MultiBoundMarkerData;
extern const void * RTTI_BSStream;
extern const void * RTTI_INISettingCollection;
extern const void * RTTI_BSStream;
extern const void * RTTI_InterfacedClass;
extern const void * RTTI_BSTask;
extern const void * RTTI_IOTask;
@ -680,17 +680,17 @@ extern const void * RTTI_BGSAIWorldLocationPointRadius;
extern const void * RTTI_BGSAIWorldLocationInteriorCell;
extern const void * RTTI_BGSAttackDataMap;
extern const void * RTTI_BGSAttackData;
extern const void * RTTI_IPackageDataAIWorldLocationHandle;
extern const void * RTTI_IAITarget;
extern const void * RTTI_IPackageData;
extern const void * RTTI_IAIWorldLocationHandle;
extern const void * RTTI_BGSPackageDataBool;
extern const void * RTTI_BGSPackageDataFloat;
extern const void * RTTI_BGSPackageDataInt;
extern const void * RTTI_BGSPackageDataRefOLD;
extern const void * RTTI_BGSPackageDataLocation;
extern const void * RTTI_BGSPackageDataLocationWrapper;
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_ObjectListItem;
extern const void * RTTI_BGSPackageDataRef;
@ -777,8 +777,8 @@ extern const void * RTTI_BGSProcedureWander;
extern const void * RTTI_BGSProcedureWanderExecState;
extern const void * RTTI_BGSVisitProceduresInitActorLocation;
extern const void * RTTI_BGSVisitProceduresCheckGuardWarnTarget;
extern const void * RTTI_TESPackage;
extern const void * RTTI_PackageCreator;
extern const void * RTTI_TESPackage;
extern const void * RTTI_DialoguePackage;
extern const void * RTTI_TESPackageData;
extern const void * RTTI_TESAmbushPackageData;
@ -795,8 +795,8 @@ extern const void * RTTI_ActorPackageData;
extern const void * RTTI_TESUseWeaponPackageData;
extern const void * RTTI_UseWeaponActorPackageData;
extern const void * RTTI_PackageLocation;
extern const void * RTTI_BSTempEffect;
extern const void * RTTI_ITempEffectFactory;
extern const void * RTTI_BSTempEffect;
extern const void * RTTI_BSTempEffectDebris;
extern const void * RTTI_BSTempEffectGeometryDecal;
extern const void * RTTI_BGSParticleObjectCloneTask;
@ -844,8 +844,8 @@ extern const void * RTTI_BSNavmeshSearchMaxCostFilters;
extern const void * RTTI_NavMeshSearchMultipleGoals;
extern const void * RTTI_NavMeshSearchSLPoint;
extern const void * RTTI_PathingRequestClosePoint;
extern const void * RTTI_PathingRequestClosestGoal;
extern const void * RTTI_IPathBuilderFactoryBase;
extern const void * RTTI_PathingRequestClosestGoal;
extern const void * RTTI_PathingRequestCover;
extern const void * RTTI_PathingRequestFlee;
extern const void * RTTI_PathingRequestFly;
@ -998,8 +998,8 @@ extern const void * RTTI_PeakValueModifierEffect;
extern const void * RTTI_ReanimateEffect;
extern const void * RTTI_ReferenceEffect;
extern const void * RTTI_WeaponEnchantmentController;
extern const void * RTTI_ScriptEffect;
extern const void * RTTI_ScriptedRefEffect;
extern const void * RTTI_ScriptEffect;
extern const void * RTTI_BSParticleShaderObjectEmitter;
extern const void * RTTI_BSParticleShaderRayEmitter;
extern const void * RTTI_BSParticleShaderCollisionEmitter;
@ -1027,6 +1027,8 @@ extern const void * RTTI_WerewolfFeedEffect;
extern const void * RTTI_TESAudio__ScriptedMusicState;
extern const void * RTTI_BGSPlayerMusicChanger;
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_BGSSaveLoadManager;
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_EnhanceWeaponEffect;
extern const void * RTTI_GarbageCollector;
extern const void * RTTI_Main;
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_PathManagerPositionPlayerAdapter;
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_DoorObstacleAdapter;
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_DetectSignOut;
extern const void * RTTI_IMemoryManagerFile;
extern const void * RTTI_IMemoryManagerFileFactory;
extern const void * RTTI_IMemoryManagerFile;
extern const void * RTTI_MemoryManagerFile;
extern const void * RTTI_SceneGraph;
extern const void * RTTI_SeenData;
extern const void * RTTI_IntSeenData;
extern const void * RTTI_SpawnHazardEffect;
extern const void * RTTI_BSUIMessageData;
extern const void * RTTI_hkpWorldPostSimulationListener;
extern const void * RTTI_IMovementState;
extern const void * RTTI_IPostAnimationChannelUpdateFunctor;
extern const void * RTTI_IAnimationSetCallbackFunctor;
extern const void * RTTI_Actor;
extern const void * RTTI_PackageList__IPackageVisitor;
extern const void * RTTI_hkpWorldPostSimulationListener;
extern const void * RTTI_ProcessCallbackAdapter;
extern const void * RTTI_SaveLoadMagicCasterVisitor;
extern const void * RTTI_SaveGameMagicCasterVisitor;
@ -1117,8 +1119,8 @@ extern const void * RTTI_IMovementFormIDManager;
extern const void * RTTI_ProcessListMovementInterface;
extern const void * RTTI_RefrInteraction;
extern const void * RTTI_SyncQueueObj;
extern const void * RTTI_ActorMover;
extern const void * RTTI_MovementParametersFixed;
extern const void * RTTI_ActorMover;
extern const void * RTTI_bhkCharacterCollisionHandler;
extern const void * RTTI_CharacterCollisionHandler;
extern const void * RTTI_IMovementAvoidanceManager;
@ -1301,12 +1303,12 @@ extern const void * RTTI_ProjectilePickCache;
extern const void * RTTI_HealthDamageFunctor;
extern const void * RTTI_VATS__ICommandListVisitor;
extern const void * RTTI_CombatAimController;
extern const void * RTTI_CombatObject;
extern const void * RTTI_CombatAimControllerBase;
extern const void * RTTI_CombatTrackTargetAimController;
extern const void * RTTI_CombatMeleeAimController;
extern const void * RTTI_CombatProjectileAimController;
extern const void * RTTI_CombatDisableAimController;
extern const void * RTTI_CombatObject;
extern const void * RTTI_CombatAimControllerBase;
extern const void * RTTI_CombatArea;
extern const void * RTTI_CombatAreaRadius;
extern const void * RTTI_CombatAreaReference;
@ -1327,13 +1329,10 @@ extern const void * RTTI_CombatInventoryItemShield;
extern const void * RTTI_CombatInventoryItemOneHandedBlock;
extern const void * RTTI_CombatInventoryItemTorch;
extern const void * RTTI_CombatInventoryItemMagic;
extern const void * RTTI_CombatMagicCaster;
extern const void * RTTI_CombatInventoryItemShout;
extern const void * RTTI_CombatInventoryItemStaff;
extern const void * RTTI_CombatInventoryItemPotion;
extern const void * RTTI_CombatInventoryItemScroll;
extern const void * RTTI_CombatMagicItemData;
extern const void * RTTI_CombatMagicItemSkillChecker;
extern const void * RTTI_CombatMagicCasterOffensive;
extern const void * RTTI_CombatMagicCasterWard;
extern const void * RTTI_CombatMagicCasterRestore;
@ -1346,9 +1345,12 @@ extern const void * RTTI_CombatMagicCasterInvisibility;
extern const void * RTTI_CombatMagicCasterBoundItem;
extern const void * RTTI_CombatMagicCasterArmor;
extern const void * RTTI_CombatMagicCasterTargetEffect;
extern const void * RTTI_CombatMagicCasterReanimate;
extern const void * RTTI_CombatMagicCasterParalyze;
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_CombatTargetLocationSearchResult;
extern const void * RTTI_CombatTargetLocation;
@ -1366,14 +1368,14 @@ extern const void * RTTI_CombatBehaviorTree;
extern const void * RTTI_CombatBehaviorTreeCombat;
extern const void * RTTI_CombatBehaviorTreeNode;
extern const void * RTTI_CombatBehaviorTreeAcquireWeapon;
extern const void * RTTI_CombatBehaviorTreeWrapperNode;
extern const void * RTTI_CombatBehaviorTreeAction;
extern const void * RTTI_CombatBehaviorTreeActionEquipmentSelector;
extern const void * RTTI_CombatBehaviorTreeWrapperNode;
extern const void * RTTI_CombatBehaviorTreeDodgeThreat;
extern const void * RTTI_CombatBehaviorTreeBlock;
extern const void * RTTI_CombatBehaviorTreeCloseMovement;
extern const void * RTTI_CombatPathSpeedController;
extern const void * RTTI_CombatApproachTargetSpeedController;
extern const void * RTTI_CombatBehaviorTreeCloseMovement;
extern const void * RTTI_CombatBehaviorTreeFindAttackLocation;
extern const void * RTTI_CombatBehaviorTreeFlankingMovement;
extern const void * RTTI_CombatFlankingSearchData;
@ -1400,10 +1402,10 @@ extern const void * RTTI_CombatNavmeshSearch;
extern const void * RTTI_CombatPathBuilder;
extern const void * RTTI_CombatPathBuilderStandard;
extern const void * RTTI_CombatPathBuilderOpen;
extern const void * RTTI_CombatPathingDebugData;
extern const void * RTTI_CombatPathingRequestStandard;
extern const void * RTTI_CombatPathingRequestAdapter;
extern const void * RTTI_CombatPathingRequestMultiGoal;
extern const void * RTTI_CombatPathingDebugData;
extern const void * RTTI_HorseCameraState;
extern const void * RTTI_FirstPersonState;
extern const void * RTTI_PlayerCamera;
@ -1471,6 +1473,9 @@ extern const void * RTTI_LockpickingMenu;
extern const void * RTTI_MagicItemData;
extern const void * RTTI_MagicMenu;
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_ClickHandler;
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__QueuedHandles;
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_BSIRagdollDriver;
extern const void * RTTI_BSAnimationGraphLoadScrapper;
extern const void * RTTI_BShkbAnimationGraph;
extern const void * RTTI_bhkIWorldStepListener;
extern const void * RTTI_BSISpeedSamplerDB;
extern const void * RTTI_BSSpeedSamplerDBManager;
extern const void * RTTI_BShkVisibilityController;
@ -2165,9 +2170,9 @@ extern const void * RTTI_BSXAudio2DataSrc;
extern const void * RTTI_ScrapHeap;
extern const void * RTTI_BSCoreMessage;
extern const void * RTTI_BSThread;
extern const void * RTTI_CompactingStore__Store;
extern const void * RTTI_CompactingStore__MoveCallback;
extern const void * RTTI_CompactingStore__NoopMoveCallback;
extern const void * RTTI_CompactingStore__Store;
extern const void * RTTI_MemoryHeap;
extern const void * RTTI_UnitTestMemoryHeap;
extern const void * RTTI_IMemoryHeap;
@ -2291,20 +2296,22 @@ extern const void * RTTI_NiVectorExtraData;
extern const void * RTTI_BSLODTriShape;
extern const void * RTTI_NiAdditionalGeometryData;
extern const void * RTTI_BSSegmentedTriShape;
extern const void * RTTI_NiAccumulator;
extern const void * RTTI_NiBackToFrontAccumulator;
extern const void * RTTI_NiAccumulator;
extern const void * RTTI_NiTriBasedGeomData;
extern const void * RTTI_NiTriBasedGeom;
extern const void * RTTI_NiPick__Results;
extern const void * RTTI_NiCollisionTraversals__IFindIntersections;
extern const void * RTTI_NiCollisionData;
extern const void * RTTI_NiOBBRoot;
extern const void * RTTI_NiBoundingVolume;
extern const void * RTTI_NiBoxBV;
extern const void * RTTI_NiCapsuleBV;
extern const void * RTTI_NiHalfSpaceBV;
extern const void * RTTI_NiSphereBV;
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_NiBoxSphereIntersector;
extern const void * RTTI_NiBoxCapsuleIntersector;
@ -2312,8 +2319,6 @@ extern const void * RTTI_NiCapsuleCapsuleIntersector;
extern const void * RTTI_NiCapsuleSphereIntersector;
extern const void * RTTI_NiCapsuleTriIntersector;
extern const void * RTTI_NiSphereTriIntersector;
extern const void * RTTI_NiOBBNode;
extern const void * RTTI_NiOBBLeaf;
extern const void * RTTI_NiControllerManager;
extern const void * RTTI_NiControllerSequence;
extern const void * RTTI_NiTextKeyMatch;
@ -2517,13 +2522,13 @@ extern const void * RTTI_BSNonUniformScaleExtraData;
extern const void * RTTI_BSNiNode;
extern const void * RTTI_BSTableCurve;
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_bhkWorld__bhkConstraintProjector;
extern const void * RTTI_bhkWorld;
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_hkStiffSpringConstraintCinfo;
extern const void * RTTI_bhkStiffSpringConstraint;
@ -2730,12 +2735,6 @@ extern const void * RTTI_hkKdTreeBuildInput__Mediator;
extern const void * RTTI_hkpCollidableMediator;
extern const void * RTTI_hkKdTreeCpuBroadphaseBundleCastCollector;
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_GSysAllocBase;
extern const void * RTTI_GSysAllocPaged;
@ -2743,10 +2742,16 @@ extern const void * RTTI_GSysMemoryMap;
extern const void * RTTI_GFxLog;
extern const void * RTTI_GFxTranslator;
extern const void * RTTI_GFxZlibSupportBase;
extern const void * RTTI_GFxState;
extern const void * RTTI_GFxZlibSupport;
extern const void * RTTI_BSScaleformTranslator;
extern const void * RTTI_BSStreamParserData;
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_DebugText;
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__ExternalAuthInfo;
extern const void * RTTI_bnet__SteamExternalAuthInfo;
extern const void * RTTI_bnet__CustomData__Value;
extern const void * RTTI_BSPlatform__BSUploadRequest;
extern const void * RTTI_BSPlatform__BSDownloadRequest;
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__IJobCollection;
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__IHttpConnectionProvider;
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__SuspendFlow;
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__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__ChunkedUploadFlow;
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__VerifyLinkRequest;
extern const void * RTTI_bnet__TwitchAccountInfoRequest;
extern const void * RTTI_bnet__CheckDisplayNameRequest;
extern const void * RTTI_bnet__CheckEmailRequest;
extern const void * RTTI_bnet__RecoverPasswordRequest;
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__SessionResumeFlow;
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__ConsumeRequest;
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__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__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__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__ListCategoryPathRequest;
extern const void * RTTI_bnet__VCCS__Catalog__ListCategoryPathChildrenRequest;
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__GetMultiMessageRequest;
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__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__UgcChunkedUploadCompletionRequest;
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__GameAccountExternalLinkRequest;
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__NotificationConnectRequest;
extern const void * RTTI_bnet__SessionAccessTokenRequest;
extern const void * RTTI_bnet__CdpAuthenticationRequest;
extern const void * RTTI_bnet__SessionResumeTokenRequest;
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__IVMObjectBindInterface;
extern const void * RTTI_BSScript__IVMSaveLoadInterface;
@ -3275,8 +3342,8 @@ extern const void * RTTI_BSDiskConstructor;
extern const void * RTTI_BSMultiIndexTriShape;
extern const void * RTTI_BSShaderMaterial;
extern const void * RTTI_BSLight;
extern const void * RTTI_NiBoneMatrixSetterI;
extern const void * RTTI_BSShader;
extern const void * RTTI_NiBoneMatrixSetterI;
extern const void * RTTI_BSReloadShaderI;
extern const void * RTTI_BSParticleShader;
extern const void * RTTI_BSLightingShaderPropertyFloatController;
@ -3288,8 +3355,8 @@ extern const void * RTTI_BSNiAlphaPropertyTestRefController;
extern const void * RTTI_BSPSysSimpleColorModifier;
extern const void * RTTI_BSPSysLODModifier;
extern const void * RTTI_BSShadowDirectionalLight;
extern const void * RTTI_IRendererResourceManager;
extern const void * RTTI_BSShaderResourceManager;
extern const void * RTTI_IRendererResourceManager;
extern const void * RTTI_ImageSpaceEffectGetHit;
extern const void * RTTI_ImageSpaceEffectBlur;
extern const void * RTTI_ImageSpaceEffectFullScreenBlur;
@ -3316,9 +3383,10 @@ extern const void * RTTI_CCallbackBase;
extern const void * RTTI_BSWin32SystemUtility;
extern const void * RTTI_BSCacheDriveSystemUtility;
extern const void * RTTI_BSSysInfoSystemUtility;
extern const void * RTTI_BSMsgDialogSystemUtility;
extern const void * RTTI_BSWin32GameDataSystemUtility;
extern const void * RTTI_BSAwardsSystemUtility;
extern const void * RTTI_BSWin32AwardsSystemUtility;
extern const void * RTTI_BSMsgDialogSystemUtility;
extern const void * RTTI_BSDiscBootSystemUtility;
extern const void * RTTI_type_info;
extern const void * RTTI_BSSocket;

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

@ -59,7 +59,7 @@ public:
Entry items; // 118
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);
};

View File

@ -40,14 +40,14 @@ public:
virtual void FunctionSwap(bool swap);
MEMBER_FN_PREFIX(NiMemStream);
DEFINE_MEMBER_FN(Construct, NiMemStream *, 0x013120B0);
DEFINE_MEMBER_FN(Destroy, void, 0x01312120);
DEFINE_MEMBER_FN(Seek, void, 0x013121B0, SInt32);
DEFINE_MEMBER_FN(Construct, NiMemStream *, 0x0143AA70);
DEFINE_MEMBER_FN(Destroy, void, 0x0143AAE0);
DEFINE_MEMBER_FN(Seek, void, 0x0143AB70, SInt32);
// ??_7NiMemStream@@6B@ + 18
DEFINE_MEMBER_FN(GetOffset, UInt32, 0x00C25660, void);
DEFINE_MEMBER_FN(CopyFrom, UInt32, 0x01312180, void *);
DEFINE_MEMBER_FN(GetOffset, UInt32, 0x00C4BEF0, void);
DEFINE_MEMBER_FN(CopyFrom, UInt32, 0x0143AB40, void *);
// ??_7NiMemStream@@6B@ + 28
DEFINE_MEMBER_FN(FunctionSwap, UInt32, 0x013121F0, bool);
DEFINE_MEMBER_FN(FunctionSwap, UInt32, 0x0143ABB0, bool);
void * data; // 20
UInt32 offset; // 28
@ -77,24 +77,21 @@ public:
UInt64 offset; // 30
MEMBER_FN_PREFIX(BSResourceNiBinaryStream);
DEFINE_MEMBER_FN(Construct, BSResourceNiBinaryStream *, 0x00C76060, 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(Construct, BSResourceNiBinaryStream *, 0x00C9F5C0, const char * filePath, UInt32 unk1, UInt32 unk2); // unk1 = 0, unk2 = 0
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
DEFINE_MEMBER_FN(Read, UInt32, 0x00C767B0, void * dst, UInt32 len);
DEFINE_MEMBER_FN(Read, UInt32, 0x00C9FCF0, void * dst, UInt32 len);
// E93F9EA10EEEC2FC86D868E75F28A023D7453255+5C
DEFINE_MEMBER_FN(Write, UInt32, 0x00C76820, void * src, UInt32 len);
DEFINE_MEMBER_FN(Destroy, void, 0x00C76340);
DEFINE_MEMBER_FN(Write, UInt32, 0x00C9FD60, void * src, UInt32 len);
DEFINE_MEMBER_FN(Destroy, void, 0x00C9F8A0);
DEFINE_MEMBER_FN(IsValid, bool, 0x00C76480, void);
DEFINE_MEMBER_FN(Seek, void, 0x00C76490, SInt32);
DEFINE_MEMBER_FN(IsValid, bool, 0x00C9F9E0, void);
DEFINE_MEMBER_FN(Seek, void, 0x00C9F9F0, SInt32);
// ??_7BSResourceNiBinaryStream@@6B@ + 18
DEFINE_MEMBER_FN(GetOffset, UInt32, 0x00C764E0, void); // return offset;
DEFINE_MEMBER_FN(GetOffset, UInt32, 0x00C9FA30, void); // return offset;
// ??_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_w(wchar_t * dst, UInt32 dstLen, UInt32 terminator); // length in characters

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -7,7 +7,7 @@
#include "skse64/PluginManager.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)
{

View File

@ -10,11 +10,12 @@
static UInt32 g_forceContainerCategorization = 0;
// 30A34F24A97F91365E1A3F66BF53263DEDF4B0AD+FA
RelocPtr<UInt32 *> g_containerMode(0x02F4C328);
RelocAddr<uintptr_t> kHook_ContainerMode_Base(0x0085F0C0);
uintptr_t kHook_ContainerMode_Categories = kHook_ContainerMode_Base + 0x6E;
uintptr_t kHook_ContainerMode_NoCategories = kHook_ContainerMode_Base + 0x82;
// 103A70E32BCD6C07E69BAE82CDD6BFE66E9F6797+3C
RelocPtr<UInt32 *> g_containerMode(0x02FE8240);
RelocAddr<uintptr_t> kHook_ContainerMode_Base(0x0088D910);
uintptr_t kHook_ContainerMode_Start = kHook_ContainerMode_Base + 0xAE;
uintptr_t kHook_ContainerMode_Categories = kHook_ContainerMode_Base + 0xB7;
uintptr_t kHook_ContainerMode_NoCategories = kHook_ContainerMode_Base + 0xCB;
void Hooks_Gameplay_EnableForceContainerCategorization(bool enable)
{
@ -22,19 +23,19 @@ void Hooks_Gameplay_EnableForceContainerCategorization(bool enable)
}
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;
// 4C1457C3040DCD34A7E7B2326F1EA2023930C56B+71
RelocAddr <char *> g_gameVersion(0x01544EA0);
RelocAddr <uintptr_t> kHook_ShowVersion_Offset(0x008EEE10 + 0x78);
RelocAddr <char *> g_gameVersion(0x0163D168);
RelocAddr <uintptr_t> kHook_ShowVersion_Offset(0x0091F210 + 0x78);
static char kHook_ShowVersion_FormatString[] =
"%s.%d (SKSE64 " __PREPRO_TOKEN_STR__(SKSE_VERSION_INTEGER) "."
__PREPRO_TOKEN_STR__(SKSE_VERSION_INTEGER_MINOR) "."
__PREPRO_TOKEN_STR__(SKSE_VERSION_INTEGER_BETA) " rel "
__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;
@ -57,7 +58,7 @@ TESObjectREFR* Hooks_Gameplay_GetCrosshairRef()
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)
{
@ -99,8 +100,8 @@ void Hooks_Gameplay_Commit(void)
HookContainerMode_Code code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Branch(kHook_ContainerMode_Base.GetUIntPtr() + 0x65, uintptr_t(code.getCode()));
SafeWrite16(kHook_ContainerMode_Base.GetUIntPtr() + 0x65 + 5, 0x9090);
g_branchTrampoline.Write5Branch(kHook_ContainerMode_Start, uintptr_t(code.getCode()));
SafeWrite16(kHook_ContainerMode_Start + 5, 0x9090);
}
// read config

View File

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

View File

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

View File

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

View File

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

View File

@ -460,7 +460,7 @@ public:
}
#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
BSFixedString aEventName(eventName);
@ -924,7 +924,7 @@ public:
};
typedef void * (* _UIOpenJournalMenu)(bool bUnk);
RelocAddr<_UIOpenJournalMenu> UIOpenJournalMenu(0x00000000);
RelocAddr<_UIOpenJournalMenu> UIOpenJournalMenu(0x00924F90);
class SKSEScaleform_OpenJournalMenu : public GFxFunctionHandler
{
@ -1148,13 +1148,13 @@ public:
UInt8 unk30[0x10]; // 30
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);
static uintptr_t GetCtorHookAddress()
{
static RelocAddr<uintptr_t> kCtorHookAddress(0x00856050 + 0x97);
static RelocAddr<uintptr_t> kCtorHookAddress(0x00883B90 + 0x97);
return kCtorHookAddress.GetUIntPtr();
}
};
@ -1203,11 +1203,11 @@ public:
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 RelocAddr<uintptr_t> kCtorHookAddress(0x0089FB00 + 0x97);
static RelocAddr<uintptr_t> kCtorHookAddress(0x008D0A90 + 0x97);
return kCtorHookAddress.GetUIntPtr();
}
@ -1241,14 +1241,15 @@ namespace favMenuDataHook
struct FavData
{
GFxMovieView ** movieView; // 00
UInt32 unk04; // 04
GFxValue * entryList; // 08
void * unk04; // 08
GFxValue * entryList; // 10
};
// 1 - Item
RelocAddr<uintptr_t> kSetItemData_Base(0x00878850);
uintptr_t kSetItemData_retn = kSetItemData_Base + 0xCA;
RelocAddr<uintptr_t> kSetItemData_Base(0x008A7F60);
uintptr_t kSetItemData_hook = kSetItemData_Base + 0xC2;
uintptr_t kSetItemData_retn = kSetItemData_Base + 0xC8;
void SetItemData(IMenu * menu, GFxValue * dataContainer, InventoryEntryData * objDesc)
{
@ -1275,8 +1276,10 @@ namespace favMenuDataHook
};
// 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)
{
@ -1298,7 +1301,9 @@ namespace favMenuDataHook
};
// 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;
}
@ -1306,8 +1311,9 @@ namespace favMenuDataHook
namespace enchantMenuDataHook
{
RelocAddr<uintptr_t> kSetData_Base(0x00864C50);
uintptr_t kSetData_retn = kSetData_Base + 0xDF;
RelocAddr<uintptr_t> kSetData_Base(0x0089C1B0);
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
@ -1384,24 +1390,16 @@ void EnchantConstructMenu_CategoryListEntry_SetData_Extended(EnchantConstructMen
namespace smithingMenuDataHook
{
RelocAddr<uintptr_t> kSetData_Base(0x00864B00);
RelocAddr<uintptr_t> kSetData_Base(0x00892AA0);
uintptr_t kSetData_hook = kSetData_Base + 0xD6;
uintptr_t kSetData_retn = kSetData_Base + 0xDB;
typedef void (__cdecl * _SetData_Hooked)(GFxValue * dataContainer, InventoryEntryData ** pObjDesc, SmithingMenu * menu);
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)
{
SetData_Hooked(dataContainer, pObjDesc, menu);
if (s_bExtendData && pObjDesc && menu && menu->view)
const char * SetData_Hook(GFxValue * dataContainer, InventoryEntryData ** pObjDesc, SmithingMenu * menu)
{
InventoryEntryData * objDesc = *pObjDesc;
if(s_bExtendData && objDesc && menu && menu->view)
{
scaleformExtend::CommonItemData(dataContainer, objDesc->type);
scaleformExtend::ItemInfoData(dataContainer, objDesc);
scaleformExtend::StandardItemData(dataContainer, objDesc->type);
@ -1414,6 +1412,9 @@ namespace smithingMenuDataHook
(*iter)(menu->view, dataContainer, objDesc);
}
}
// original code
return CALL_MEMBER_FN(objDesc, GenerateName)();
}
}
@ -1421,25 +1422,17 @@ namespace smithingMenuDataHook
namespace craftingMenuDataHook
{
// 80050DF3D298FB230378FF3D7BC6F6D7BBAA21FB+22D
RelocAddr<uintptr_t> kSetData_Base(0x00864EF0);
//
RelocAddr<uintptr_t> kSetData_Base(0x00892FD0);
uintptr_t kSetData_hook = kSetData_Base + 0xC4;
uintptr_t kSetData_retn = kSetData_Base + 0xC9;
typedef void (__cdecl * _SetData_Hooked)(GFxValue * dataContainer, ConstructibleObjectMenu::EntryData * entry, ConstructibleObjectMenu * menu);
void SetData_Hooked(GFxValue * dataContainer, ConstructibleObjectMenu::EntryData * entry, ConstructibleObjectMenu * menu)
const char * SetData_Hook(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)
if(s_bExtendData && entry && entry->object && menu && menu->view)
{
SetData_Hooked(dataContainer, entry, menu);
if (s_bExtendData && entry && entry->object && menu && menu->view)
{
BGSConstructibleObject* object = entry->object;
TESForm* form = object->createdObject;
BGSConstructibleObject * object = entry->object;
TESForm * form = object->createdObject;
InventoryEntryData entryData(form, 0);
@ -1455,6 +1448,10 @@ namespace craftingMenuDataHook
(*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
{
// Item data
// 33BD5B22D8D665F5A8DB6AB3EC6EB874A57E3E53+263
RelocAddr<uintptr_t> kSetData_Base(0x00864DA0);
//
RelocAddr<uintptr_t> kSetData_Base(0x00892CE0);
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);
void SetData_Hooked(GFxValue * dataContainer, AlchemyMenu::EntryData * entry, AlchemyMenu * menu)
const char * SetData_Hook(GFxValue * dataContainer, AlchemyMenu::EntryData * entry, AlchemyMenu * menu)
{
static RelocAddr<uintptr_t> SetData_Hooked_Address(0x008704F0);
((_SetData_Hooked)(SetData_Hooked_Address.GetUIntPtr())) (dataContainer, entry, menu);
}
void SetData_Hook(GFxValue * dataContainer, AlchemyMenu::EntryData * entry, AlchemyMenu * menu)
if(s_bExtendData && entry && entry->data && menu && menu->view)
{
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::ItemInfoData(dataContainer, entryData);
@ -1492,43 +1480,38 @@ namespace alchemyMenuDataHook
(*iter)(menu->view, dataContainer, entryData);
}
}
}
// original code
TESFullName * fullName = DYNAMIC_CAST(entry->data->type, TESForm, TESFullName);
return fullName ? fullName->GetName() : "";
}
// Category arguments
// (note: this passes data in arguments to SetCategoriesList. makes it more difficult to extend)
RelocAddr<uintptr_t> kExtendCategoryArgs_Base(0x00871700);
uintptr_t kExtendCategoryArgs_retn = kExtendCategoryArgs_Base + 0x59D;
RelocAddr<uintptr_t> kExtendCategoryArgs_Base(0x008A0640);
uintptr_t kExtendCategoryArgs_hook = kExtendCategoryArgs_Base + 0x564;
uintptr_t kExtendCategoryArgs_retn = kExtendCategoryArgs_Base + 0x569;
class GFxInvokeHook
{
public:
// effectArray is added parameter to signature of GFxValue Invoke
// SE: effectArray moved to the end of parameters, for x64 specific efficiency reasons
bool Invoke(void * obj, GFxValue * result, const char * name, GFxValue * args, UInt32 numArgs, bool isDisplayObj, AlchemyEffectCategory* effectArray)
// hijack unused 'result' parameter to pass effectArray
bool Invoke(void * obj, AlchemyEffectCategory * effectArray, const char * name, GFxValue * args, UInt32 numArgs, bool isDisplayObj)
{
if (s_bExtendAlchemyCategories)
scaleformExtend::AlchemyCategoryArgs(effectArray, args, numArgs);
// Call hooked func
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
{
RelocPtr<UInt64> kCtor_Base(0x005AE010 + 0xA08);
RelocPtr<UInt64> kCtor_Base(0x005D4EF0 + 0xE91); // WinMain+15
GFxLoader *ctor_Hook(GFxLoader * loader)
{
@ -1626,7 +1609,7 @@ void InstallHooks(GFxMovieView * view)
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)
{
@ -1692,30 +1675,27 @@ void Hooks_Scaleform_Commit(void)
SetItemDataEntry_Code code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Branch(favMenuDataHook::kSetItemData_Base.GetUIntPtr() + 0xC4, uintptr_t(code.getCode()));
SafeWrite8(favMenuDataHook::kSetItemData_Base.GetUIntPtr() + 0xC4 + 5, 0x90);
g_branchTrampoline.Write5Branch(favMenuDataHook::kSetItemData_hook, uintptr_t(code.getCode()));
SafeWrite8(favMenuDataHook::kSetItemData_hook + 5, 0x90);
}
{
struct SetMagicData_Entry_Code : Xbyak::CodeGenerator {
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)
call(ptr[rax + 0x68]);
// insert call to our data extend function
mov(rcx, ptr[r15]);
mov(rcx, ptr[rcx]);
lea(rdx, ptr[rbp - 0x9]);
mov(r8, rsi);
mov(rcx, ptr[rdi]);
mov(rcx, ptr[rcx]); // GFxMovieView * view
lea(rdx, ptr[rbp - 0x30]); // GFxValue * dataContainer
mov(r8, rbx); // TESForm * form
mov(rax, (uintptr_t)favMenuDataHook::SetMagicData);
call(rax);
// The other overwritten instruction and return to original code
mov(rcx, rsi);
mov(rcx, rbx);
jmp(ptr[rip]);
dq(favMenuDataHook::kSetMagicData_retn);
}
@ -1725,8 +1705,8 @@ void Hooks_Scaleform_Commit(void)
SetMagicData_Entry_Code code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Branch(favMenuDataHook::kSetMagicData_Base.GetUIntPtr() + 0x9B, uintptr_t(code.getCode()));
SafeWrite8(favMenuDataHook::kSetMagicData_Base.GetUIntPtr() + 0x9B + 5, 0x90);
g_branchTrampoline.Write5Branch(favMenuDataHook::kSetMagicData_hook, uintptr_t(code.getCode()));
SafeWrite8(favMenuDataHook::kSetMagicData_hook + 5, 0x90);
}
{
@ -1758,8 +1738,8 @@ void Hooks_Scaleform_Commit(void)
SetVampireData_Entry_Code code(codeBuf);
g_localTrampoline.EndAlloc(code.getCurr());
g_branchTrampoline.Write5Branch(favMenuDataHook::kSetVampireData_Base.GetUIntPtr() + 0x92, uintptr_t(code.getCode()));
SafeWrite8(favMenuDataHook::kSetVampireData_Base.GetUIntPtr() + 0x92 + 5, 0x90);
g_branchTrampoline.Write5Branch(favMenuDataHook::kSetVampireData_hook, uintptr_t(code.getCode()));
SafeWrite8(favMenuDataHook::kSetVampireData_hook + 5, 0x90);
}
// end of fav menu data hooks
@ -1783,14 +1763,91 @@ void Hooks_Scaleform_Commit(void)
SetDataEntry_Code code(codeBuf);
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);
g_branchTrampoline.Write5Call(alchemyMenuDataHook::kSetData_Base.GetUIntPtr() + 0xDD, (uintptr_t)alchemyMenuDataHook::SetData_Hook);
// 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);
{
struct SmithingMenuHook : Xbyak::CodeGenerator {
SmithingMenuHook(void * buf) : Xbyak::CodeGenerator(4096, buf)
{
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
// gfxloader creation hook

View File

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

View File

@ -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)
{

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -118,8 +118,8 @@ public:
void SetTextureSet(BSTextureSet * textureSet);
MEMBER_FN_PREFIX(BSLightingShaderMaterial);
DEFINE_MEMBER_FN(CopyFrom, void, 0x012CEF40, BSLightingShaderMaterial * other);
DEFINE_MEMBER_FN(dtor_base, void, 0x012CEDE0);
DEFINE_MEMBER_FN(CopyFrom, void, 0x013F3AE0, BSLightingShaderMaterial * other);
DEFINE_MEMBER_FN(dtor_base, void, 0x013F3980);
};
STATIC_ASSERT(sizeof(BSLightingShaderMaterial) == 0xA0);
@ -131,7 +131,8 @@ public:
NiTexturePtr unkA0; // A0 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
@ -142,8 +143,8 @@ public:
NiTexturePtr unkA0; // A0 inited to 0
NiTexturePtr unkA8; // A8 inited to 0
// A3E31C7F999C7F658388C63EFE1489AE31F17A6B+389
DEFINE_MEMBER_FN(dtor, void, 0x012D01F0);
// 7EF3019D0F8B78F82664DFE78C15204CD5C8C2B9+392
DEFINE_MEMBER_FN(dtor, void, 0x013F4DB0);
};
class BSLightingShaderMaterialFacegen : public BSLightingShaderMaterial
@ -156,7 +157,7 @@ public:
NiTexturePtr unkB0; // B0 inited to 0
// uses ??_7BSLightingShaderMaterialFacegen@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x012D1FB0);
DEFINE_MEMBER_FN(dtor, void, 0x013F6A80);
};
class BSLightingShaderMaterialGlowmap : public BSLightingShaderMaterial
@ -167,7 +168,7 @@ public:
NiTexturePtr glowMap; // A0
// uses ??_7BSLightingShaderMaterialGlowmap@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x012D1050);
DEFINE_MEMBER_FN(dtor, void, 0x013F5B90);
};
class BSLightingShaderMaterialParallax : public BSLightingShaderMaterial
@ -178,7 +179,7 @@ public:
NiTexturePtr unkA0; // A0
// uses ??_7BSLightingShaderMaterialParallax@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x012D14F0);
DEFINE_MEMBER_FN(dtor, void, 0x013F6010);
};
class BSLightingShaderMaterialMultiLayerParallax : public BSLightingShaderMaterial
@ -191,7 +192,7 @@ public:
NiTexturePtr unkB0; // A0
// uses ??_7BSLightingShaderMaterialMultiLayerParallax@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x012D3B40);
DEFINE_MEMBER_FN(dtor, void, 0x013F84F0);
};
class BSLightingShaderMaterialParallaxOcc : public BSLightingShaderMaterial
@ -202,7 +203,7 @@ public:
NiTexturePtr unkA0; // A0
// uses ??_7BSLightingShaderMaterialParallaxOcc@@6B@ at +17
DEFINE_MEMBER_FN(dtor, void, 0x012D1990);
DEFINE_MEMBER_FN(dtor, void, 0x013F6490);
};
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
typedef BSLightingShaderMaterialFacegenTint * (*_CreateFacegenTintMaterial)();
extern RelocAddr<_CreateFacegenTintMaterial> CreateFacegenTintMaterial;

View File

@ -1,24 +1,14 @@
#include "skse64/NiNodes.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)
{
return (NiBoneNames *)0x00000000;
// 33EBA690BF2A27ACE16840951CA740822F8A4756+9A
static RelocAddr <NiBoneNames *> addr(0x01F59E10);
return addr;
}
NiWeaponNodes * NiWeaponNodes::GetSingleton(void)
{
return (NiWeaponNodes *)0x00000000;
}
NiNode * NiNode::Create(UInt32 arrBufLen)
NiNode * NiNode::Create(UInt16 arrBufLen)
{
void* memory = Heap_Allocate(sizeof(NiNode));
memset(memory, 0, sizeof(NiNode));

View File

@ -23,9 +23,9 @@ public:
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);
@ -37,7 +37,8 @@ public:
static BSFadeNode * Create();
DEFINE_MEMBER_FN_0(ctor, BSFadeNode *, 0x0128F900);
// 905B699D46B52EE8B3BD44B9DAFBC2F728A310B5+81
DEFINE_MEMBER_FN_0(ctor, BSFadeNode *, 0x013B6440);
};
STATIC_ASSERT(sizeof(BSFadeNode) == 0x158);
@ -67,7 +68,7 @@ public:
};
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);
@ -153,10 +154,6 @@ public:
NiNode * niNode; // 238
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);
@ -256,6 +253,7 @@ public:
BSFixedString animationGraphVariables[101];
};
// this is just part of NiBoneNames starting at offset 0xB0
class NiWeaponNodes
{
public:
@ -275,22 +273,5 @@ public:
kNumTypes
};
static NiWeaponNodes * GetSingleton(void);
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;

View File

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

View File

@ -9,8 +9,6 @@
// generally other children should go in other files
// especially if they can be grouped
// SE notice: all definitions updated except BSRenderTargetGroup
class NiCloningProcess;
class NiStream;
class NiObjectGroup;
@ -125,7 +123,7 @@ public:
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);
@ -220,8 +218,8 @@ public:
UInt8 pad10A[6]; // 10A
MEMBER_FN_PREFIX(NiAVObject);
// 3239A102C6E8818F0FBFEF58A1B6EA724A237258+26
DEFINE_MEMBER_FN(UpdateNode, void, 0x00C56B50, ControllerUpdateContext * ctx);
// A5B2FC7D42E72BA4F6A679BAC0BAE17C12A4AFE1+E3
DEFINE_MEMBER_FN(UpdateNode, void, 0x00C7EDA0, ControllerUpdateContext * ctx);
};
STATIC_ASSERT(offsetof(NiAVObject, m_localTransform) == 0x48);
STATIC_ASSERT(offsetof(NiAVObject, m_worldTransform) == 0x7C);
@ -243,11 +241,6 @@ public:
UInt32 unk28; // 28
UInt32 unk2C; // 2C inited to FFFFFFFF
NiRenderedTexture * renderedTexture[4]; // 30
static BSRenderTargetGroup * GetPlayerFaceMask(void)
{
return *((BSRenderTargetGroup **)0x00000000);
}
};
// 20
@ -269,10 +262,11 @@ public:
UInt32 pad1C; // 1C
MEMBER_FN_PREFIX(BSFaceGenModel);
DEFINE_MEMBER_FN(ctor, void, 0x003D4070);
DEFINE_MEMBER_FN(CopyFrom, void, 0x003D4150, BSFaceGenModel * other);
DEFINE_MEMBER_FN(SetModelData, bool, 0x003D47C0, 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(ctor, void, 0x003EC1A0);
DEFINE_MEMBER_FN(CopyFrom, void, 0x003EC240, BSFaceGenModel * other);
DEFINE_MEMBER_FN(SetModelData, bool, 0x003EC9C0, const char * meshPath, void * unk1, UInt8 unk2);
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
@ -283,7 +277,7 @@ public:
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

View File

@ -197,10 +197,11 @@ public:
// 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
MEMBER_FN_PREFIX(BSLightingShaderProperty);
DEFINE_MEMBER_FN(InitializeShader, UInt32, 0x012C56D0, BSGeometry * geometry);
DEFINE_MEMBER_FN(SetMaterial, UInt32, 0x01291D40, BSLightingShaderMaterial * material, bool unk1); // unk1 usually 1
DEFINE_MEMBER_FN(SetFlags, UInt64, 0x01291C30, UInt8 unk1, UInt8 unk2);
DEFINE_MEMBER_FN(InvalidateMaterial, bool, 0x0019C3B0);
DEFINE_MEMBER_FN(InvalidateTextures, void, 0x012C5AB0, UInt32 unk1); // unk1 usually 0, called after material Releases textures
DEFINE_MEMBER_FN(InitializeShader, UInt32, 0x013E9B20, BSGeometry * geometry);
DEFINE_MEMBER_FN(SetMaterial, UInt32, 0x013B8A20, BSLightingShaderMaterial * material, bool unk1); // unk1 usually 1
DEFINE_MEMBER_FN(SetFlags, UInt64, 0x013B8910, UInt8 unk1, UInt8 unk2);
// InvalidateMaterial was inlined away
DEFINE_MEMBER_FN(InvalidateTextures, void, 0x013E9ED0, UInt32 unk1); // unk1 usually 0, called after material Releases textures
};
STATIC_ASSERT(offsetof(BSLightingShaderProperty, emissiveColor) == 0xF0);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -170,9 +170,9 @@ public:
MEMBER_FN_PREFIX(NiRenderedTexture);
DEFINE_MEMBER_FN(ctor, void, 0x00000000);
DEFINE_MEMBER_FN(UpdateVirtualImage, void, 0x00ECDF50, NiRenderedTexture * newTexture);
DEFINE_MEMBER_FN(AddVirtualImage, UInt8, 0x00ECE010, BSFixedString linkageName);
DEFINE_MEMBER_FN(ReleaseVirtualImage, void, 0x00ECDEE0);
DEFINE_MEMBER_FN(UpdateVirtualImage, void, 0x00F113F0, NiRenderedTexture * newTexture);
DEFINE_MEMBER_FN(AddVirtualImage, UInt8, 0x00F114C0, BSFixedString linkageName);
DEFINE_MEMBER_FN(ReleaseVirtualImage, void, 0x00F11380);
};
// 58

View File

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

View File

@ -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_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

View File

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

View File

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

View File

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

View File

@ -117,14 +117,14 @@ public:
virtual bool Run(VMValue * baseValue, VMClassRegistry * registry, UInt32 arg2, VMValue * resultValue, VMState * state) = 0;
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
DEFINE_MEMBER_FN(Impl_GetParam, UInt64 *, 0x01250670, 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_GetParam, UInt64 *, 0x0137A450, UInt32 idx, BSFixedString * nameOut, UInt64 * typeOut);
DEFINE_MEMBER_FN(Impl_Invoke, UInt32, 0x0137A650, UInt64 unk0, UInt64 unk1, VMClassRegistry * registry, VMState * unk3);
// ??_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
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);
@ -156,8 +156,8 @@ public:
virtual bool Run(VMValue * baseValue, VMClassRegistry * registry, UInt32 arg2, VMValue * resultValue, VMState * state) = 0;
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_dtor, void, 0x01250ED0);
DEFINE_MEMBER_FN(Impl_ctor, NativeFunction *, 0x0137AB30, const char * fnName, const char * className, UInt32 unk0, UInt32 numParams);
DEFINE_MEMBER_FN(Impl_dtor, void, 0x0137AD80); // same as NativeFunctionBase dtor
void DebugRunHook(VMValue * baseValue, VMClassRegistry * registry, UInt32 arg2, VMValue * resultValue, VMState * state);

View File

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

View File

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

View File

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

View File

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

View File

@ -134,10 +134,6 @@ struct SKSETaskInterface
void (* AddUITask)(UIDelegate_v1 * task);
};
//#ifdef _PPAPI
// ### this code is unsupported and will be changed in the future
class VMClassRegistry;
struct SKSEPapyrusInterface
@ -151,9 +147,6 @@ struct SKSEPapyrusInterface
bool (* Register)(RegisterFunctions callback);
};
//#endif
/**** Messaging API docs ********************************************************************
*
* 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);
};
typedef bool(*_SKSEPlugin_Query)(const SKSEInterface * skse, PluginInfo * info);
typedef bool(*_SKSEPlugin_Load)(const SKSEInterface * skse);
/**** plugin versioning ********************************************************
*
* The AE version of Skyrim SE broke plugin versioning as many were written
* with the assumption that the Address Library would always be valid.
* These always report that they are compatible, then exit on startup because
* they cannot find their address library file.
*
* To work around this problem, version checking has been reimplemented and
* no longer calls any code. Plugins declare their compatibility, and SKSE
* determines whether to load the plugin. Setting this up is simple, just
* add something like this to your project:
*
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
};
};
*
******************************************************************************/
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
};
/**** plugin API docs **********************************************************
*
* The base API is pretty simple. Create a project based on the
* skse_plugin_example project included with the SKSE source code, then define
* and export these functions:
*
* bool SKSEPlugin_Query(const SKSEInterface * skse, PluginInfo * info)
*
* This primary purposes of this function are to fill out the PluginInfo
* structure, and to perform basic version checks based on the info in the
* SKSEInterface structure. Return false if your plugin is incompatible with
* the version of SKSE or the runtime passed in, otherwise return true. In
* 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.
*
* 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
* 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
* true.
*
* The PluginInfo fields should be filled out as follows:
* - infoVersion should be set to PluginInfo::kInfoVersion
* - 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
* The base API is pretty simple. Add version data as shown in the
* SKSEPluginVersionData docs above, and export this function:
*
* bool SKSEPlugin_Load(const SKSEInterface * skse)
*

BIN
source/fs.dll/skse64/skse64/PluginLoadErrorDialog.rc (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,11 +1,13 @@
#include "skse64/PluginManager.h"
#include "common/IDirectoryIterator.h"
#include "common/IFileStream.h"
#include "skse64/GameAPI.h"
#include "skse64_common/Utilities.h"
#include "skse64/Serialization.h"
#include "skse64_common/skse_version.h"
#include "skse64/PapyrusEvents.h"
#include "skse64_common/BranchTrampoline.h"
#include "resource.h"
PluginManager g_pluginManager;
@ -109,6 +111,14 @@ PluginManager::~PluginManager()
DeInit();
}
PluginManager::LoadedPlugin::LoadedPlugin()
:handle(0)
,load(nullptr)
{
memset(&info, 0, sizeof(info));
memset(&version, 0, sizeof(version));
}
bool PluginManager::Init(void)
{
bool result = false;
@ -117,8 +127,12 @@ bool PluginManager::Init(void)
{
_MESSAGE("plugin directory = %s", m_pluginDirectory.c_str());
// avoid realloc
m_plugins.reserve(5);
__try
{
ScanPlugins();
InstallPlugins();
result = true;
@ -130,6 +144,8 @@ bool PluginManager::Init(void)
}
}
ReportPluginErrors();
return result;
}
@ -244,117 +260,183 @@ bool PluginManager::FindPluginDirectory(void)
return result;
}
void PluginManager::InstallPlugins(void)
void PluginManager::ScanPlugins(void)
{
// avoid realloc
m_plugins.reserve(5);
_MESSAGE("scanning plugin directory %s", m_pluginDirectory.c_str());
UInt32 handleIdx = 1; // start at 1, 0 is reserved for internal use
for(IDirectoryIterator iter(m_pluginDirectory.c_str(), "*.dll"); !iter.Done(); iter.Next())
{
std::string pluginPath = iter.GetFullPath();
_MESSAGE("checking plugin %s", pluginPath.c_str());
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_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());
if(plugin.handle)
{
bool success = false;
plugin.query = (_SKSEPlugin_Query)GetProcAddress(plugin.handle, "SKSEPlugin_Query");
plugin.load = (_SKSEPlugin_Load)GetProcAddress(plugin.handle, "SKSEPlugin_Load");
if(plugin.query && plugin.load)
if(plugin.load)
{
const char * loadStatus = NULL;
loadStatus = SafeCallQueryPlugin(&plugin, &g_SKSEInterface);
if(!loadStatus)
{
loadStatus = CheckPluginCompatibility(&plugin);
if(!loadStatus)
{
loadStatus = SafeCallLoadPlugin(&plugin, &g_SKSEInterface);
if(!loadStatus)
{
loadStatus = "loaded correctly";
success = true;
}
}
}
else
{
loadStatus = "reported as incompatible during query";
loadStatus = "loaded correctly";
}
ASSERT(loadStatus);
if(success)
{
_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,
plugin.dllName.c_str(),
plugin.version.dataVersion,
plugin.version.name,
plugin.version.pluginVersion,
loadStatus,
s_currentPluginHandle);
}
else
{
_MESSAGE("plugin %s does not appear to be an SKSE plugin", pluginPath.c_str());
LogPluginLoadError(plugin, loadStatus);
}
if(success)
{
// succeeded, add it to the list
m_plugins.push_back(plugin);
}
else
{
LogPluginLoadError(plugin, "does not appear to be an SKSE plugin");
}
if(!success)
{
// failed, unload the library
FreeLibrary(plugin.handle);
// and remove from plugins list
m_plugins.erase(m_plugins.begin() + i);
// fix iterator
i--;
}
}
else
{
_ERROR("couldn't load plugin %s (Error %d)", pluginPath.c_str(), GetLastError());
LogPluginLoadError(plugin, "couldn't load plugin", GetLastError());
}
}
s_currentLoadingPlugin = NULL;
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
Dispatch_Message(0, SKSEMessagingInterface::kMessage_PostLoad, NULL, 0, NULL);
// second post-load dispatch
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)
{
__try
@ -373,6 +455,13 @@ const char * PluginManager::SafeCallLoadPlugin(LoadedPlugin * plugin, const SKSE
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
{
kCompat_BlockFromRuntime = 1 << 0,
@ -389,19 +478,20 @@ struct MinVersionEntry
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 }
};
// see if we have a plugin that we know causes problems
const char * PluginManager::CheckPluginCompatibility(LoadedPlugin * plugin)
const char * PluginManager::CheckPluginCompatibility(const SKSEPluginVersionData & version)
{
__try
{
// stupid plugin check
if(!plugin->info.name)
// basic validity
if(version.dataVersion != SKSEPluginVersionData::kVersion)
{
return "disabled, bad version data";
}
if(!version.name[0])
{
return "disabled, no name specified";
}
@ -409,9 +499,9 @@ const char * PluginManager::CheckPluginCompatibility(LoadedPlugin * plugin)
// check for 'known bad' versions of plugins
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
if(iter->compatFlags & kCompat_BlockFromRuntime)
@ -431,6 +521,52 @@ const char * PluginManager::CheckPluginCompatibility(LoadedPlugin * plugin)
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)
{
@ -438,12 +574,91 @@ const char * PluginManager::CheckPluginCompatibility(LoadedPlugin * plugin)
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 * result = NULL;
void * result = nullptr;
#ifdef RUNTIME
switch(dispatcherId)
@ -475,7 +690,6 @@ void * PluginManager::GetEventDispatcher(UInt32 dispatcherId)
return result;
}
// Plugin communication interface
struct PluginListener {
PluginHandle listener;
@ -619,7 +833,7 @@ bool PluginManager::Dispatch_Message(PluginHandle sender, UInt32 messageType, vo
const char * PluginManager::GetPluginNameFromHandle(PluginHandle handle)
{
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)
return "SKSE";
@ -635,7 +849,7 @@ PluginHandle PluginManager::LookupHandleFromName(const char* pluginName)
for(LoadedPluginList::iterator iter = m_plugins.begin(); iter != m_plugins.end(); ++iter)
{
LoadedPlugin * plugin = &(*iter);
if(!_stricmp(plugin->info.name, pluginName))
if(!_stricmp(plugin->version.name, pluginName))
{
return idx;
}
@ -644,6 +858,77 @@ PluginHandle PluginManager::LookupHandleFromName(const char* pluginName)
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)
{
auto mem = m_trampoline.Allocate(size);

View File

@ -21,7 +21,6 @@ public:
PluginHandle LookupHandleFromName(const char* pluginName);
UInt32 GetNumPlugins(void);
static void * QueryInterface(UInt32 id);
@ -37,31 +36,70 @@ public:
private:
struct LoadedPlugin
{
// internals
HMODULE handle;
PluginInfo info;
LoadedPlugin();
_SKSEPlugin_Query query;
_SKSEPlugin_Load load;
std::string dllName;
HMODULE handle = 0;
PluginInfo info;
UInt32 internalHandle = 0;
SKSEPluginVersionData version;
_SKSEPlugin_Load load = nullptr;
const char * errorState = nullptr;
UInt32 errorCode = 0;
};
bool FindPluginDirectory(void);
void ScanPlugins(void);
void InstallPlugins(void);
const char * SafeCallQueryPlugin(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;
std::string m_pluginDirectory;
LoadedPluginList m_plugins;
LoadedPluginList m_erroredPlugins;
bool m_oldAddressLibrary = false;
static LoadedPlugin * s_currentLoadingPlugin;
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
{
public:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,7 +1,7 @@
#include "ScaleformState.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)
{

View File

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

View File

@ -126,26 +126,26 @@ public:
public:
GFxMovieRoot * root;
DEFINE_MEMBER_FN_3(HasMember, bool, 0x00ECA620, 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_3(DeleteMember, bool, 0x00EC9490, 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_6(Invoke, bool, 0x00ECA860, 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_2(PushBack, bool, 0x00ECB300, void * obj, GFxValue * value);
DEFINE_MEMBER_FN_3(SetText, bool, 0x00ECCCF0, void * obj, const char * text, bool html);
DEFINE_MEMBER_FN_3(HasMember, bool, 0x00F0DBC0, void * obj, const char * name, bool isDisplayObj);
DEFINE_MEMBER_FN_4(SetMember, bool, 0x00F10020, void * obj, const char * name, GFxValue * value, bool isDisplayObj);
DEFINE_MEMBER_FN_3(DeleteMember, bool, 0x00F0CAA0, void * obj, const char * name, bool isDisplayObj);
DEFINE_MEMBER_FN_4(GetMember, bool, 0x00F0D710, void * obj, const char * name, GFxValue * value, 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, 0x00F0B870, void * obj, GFxValue * value, const char * symbolName, const char * instanceName, SInt32 depth, void * initArgs);
DEFINE_MEMBER_FN_2(PushBack, bool, 0x00F0E780, void * obj, GFxValue * value);
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_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_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_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_2(GetDisplayInfo, bool, 0x00EC9C20, void * obj, DisplayInfo * displayInfo);
DEFINE_MEMBER_FN_2(SetDisplayInfo, bool, 0x00ECBDB0, void * obj, DisplayInfo * displayInfo);
DEFINE_MEMBER_FN_2(GetDisplayInfo, bool, 0x00F0D1D0, 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(ReleaseManaged_Internal, void, 0x00ECB0E0, GFxValue * value, void * obj);
DEFINE_MEMBER_FN_2(AddManaged_Internal, void, 0x00F0E500, GFxValue * value, void * obj);
DEFINE_MEMBER_FN_2(ReleaseManaged_Internal, void, 0x00F0E560, GFxValue * value, void * obj);
};
ObjectInterface * objectInterface; // 00

View File

@ -21,11 +21,11 @@ class BSTaskPool
{
public:
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);
DEFINE_MEMBER_FN(ProcessTaskQueue_HookTarget, void, 0x005C1BE0);
DEFINE_MEMBER_FN(ProcessTaskQueue_HookTarget, void, 0x005E9530);
static BSTaskPool * GetSingleton(void);
};

View File

@ -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

View File

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

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