Silently disable incompatible DLLs without triggering mod manager warnings; added new game counter
This commit is contained in:
parent
8210468f79
commit
0121c3cd13
BIN
SKSE/Plugins/fs.dll
(Stored with Git LFS)
BIN
SKSE/Plugins/fs.dll
(Stored with Git LFS)
Binary file not shown.
BIN
SKSE/Plugins/fs_se.dll
(Stored with Git LFS)
BIN
SKSE/Plugins/fs_se.dll
(Stored with Git LFS)
Binary file not shown.
4
source/fs.dll/.gitignore
vendored
4
source/fs.dll/.gitignore
vendored
@ -1,8 +1,8 @@
|
||||
*.db
|
||||
.vs/
|
||||
x64/
|
||||
x64_v142/
|
||||
common/x64_v142/
|
||||
x64_*/
|
||||
common/x64_*/
|
||||
fs/x64/
|
||||
skse64/.vs/
|
||||
skse64/skse64/x64/
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
namespace PhasmalistScripts
|
||||
{
|
||||
float calculateContentStrength(TESObjectREFR *base);
|
||||
float calculateContentStrength(StaticFunctionTag* tag, TESObjectREFR* container);
|
||||
|
||||
bool RegisterFuncs(VMClassRegistry* registry);
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
LIBRARY "fs"
|
||||
LIBRARY "enderalse"
|
||||
EXPORTS
|
||||
SKSEPlugin_Query
|
||||
SKSEPlugin_Load
|
||||
SKSEPlugin_Version
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
};
|
@ -1,4 +1,4 @@
|
||||
#include "skse64/BSModelDB.h"
|
||||
|
||||
// 206875324DD3C045FB854CB2889AFBCA94C7790B+89
|
||||
RelocPtr <BSModelDB::BSModelProcessor*> g_TESProcessor(0x01EC3C10);
|
||||
RelocPtr <BSModelDB::BSModelProcessor*> g_TESProcessor(0x01F5F590);
|
||||
|
@ -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);
|
||||
};
|
||||
};
|
||||
|
||||
|
473
source/fs.dll/skse64/skse64/CMakeLists.txt
Normal file
473
source/fs.dll/skse64/skse64/CMakeLists.txt
Normal 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)
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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);
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include "GameEvents.h"
|
||||
|
||||
// 614D2151B14D0D61E7DA7088CAB85DB111E2E0D3+1B
|
||||
RelocAddr<_GetEventDispatcherList> GetEventDispatcherList(0x00186790);
|
||||
RelocAddr<_GetEventDispatcherList> GetEventDispatcherList(0x00194100);
|
||||
|
||||
//EventDispatcher<BGSFootstepEvent>* g_footstepEventDispatcher = (EventDispatcher<BGSFootstepEvent>*) 0x01B2E9C0;
|
||||
|
||||
|
@ -39,12 +39,12 @@ class EventDispatcher
|
||||
|
||||
// Note: in SE there are multiple identical copies of all these functions
|
||||
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:
|
||||
|
||||
|
@ -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()
|
||||
{
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "GameMenus.h"
|
||||
|
||||
RelocAddr <_CreateUIMessageData> CreateUIMessageData(0x00325F00);
|
||||
RelocAddr <_CreateUIMessageData> CreateUIMessageData(0x005B0E50);
|
||||
|
||||
IMenu::IMenu() :
|
||||
view(NULL),
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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));
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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);
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
};
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "skse64/NiTextures.h"
|
||||
|
||||
RelocAddr<_CreateSourceTexture> CreateSourceTexture(0x00C68D20);
|
||||
RelocAddr<_LoadTexture> LoadTexture(0x01295C30);
|
||||
RelocAddr<_CreateSourceTexture> CreateSourceTexture(0x00C91F70);
|
||||
RelocAddr<_LoadTexture> LoadTexture(0x013BCA60);
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
||||
|
@ -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>
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "skse64/PapyrusInterfaces.h"
|
||||
|
||||
// 82677E39AC1FFB7F2E1C28FBABC2FC971DB49882+F7
|
||||
RelocPtr <IObjectHandlePolicy*> g_objectHandlePolicy(0x031D07A8);
|
||||
// B085C9577FC3BACF4719EF79E3613E2327537C10+4F
|
||||
RelocPtr <IObjectHandlePolicy*> g_objectHandlePolicy(0x0326BBB0);
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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()
|
||||
{
|
||||
|
@ -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
BIN
source/fs.dll/skse64/skse64/PluginLoadErrorDialog.rc
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -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);
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
|
@ -15,7 +15,7 @@ GFxFunctionHandler::~GFxFunctionHandler()
|
||||
|
||||
FunctionHandlerCache g_functionHandlerCache;
|
||||
|
||||
RelocAddr<FxDelegateHandler::Callback> PlaySoundCallback(0x008DA5C0);
|
||||
RelocAddr<FxDelegateHandler::Callback> PlaySoundCallback(0x0090A8F0);
|
||||
|
||||
FxResponseArgsList::FxResponseArgsList()
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
GFxLoader * GFxLoader::GetSingleton()
|
||||
{
|
||||
// 4E9F39D1066653EF254B38406212E476F80A6C9B+AE
|
||||
RelocPtr<GFxLoader*> g_GFxLoader(0x02F257A0);
|
||||
// D73FE972523296E269125B9E6F076AD967D7970C+F9
|
||||
RelocPtr<GFxLoader*> g_GFxLoader(0x02FC0DB8);
|
||||
return *g_GFxLoader;
|
||||
}
|
||||
|
@ -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
|
||||
};
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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);
|
||||
|
||||
};
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
};
|
||||
|
19
source/fs.dll/skse64/skse64/resource.h
Normal file
19
source/fs.dll/skse64/skse64/resource.h
Normal 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
|
@ -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
Loading…
Reference in New Issue
Block a user