Skip to content
This repository has been archived by the owner on Jan 3, 2023. It is now read-only.

Commit

Permalink
Xse updates (#1)
Browse files Browse the repository at this point in the history
* Updating xse sources.

* Restore PapyrusVM.h changes.

* SSE updates, compilation fixes.

* Hook address updates.

* Updating additional addresses.

* Remove debug wait loop.

* Updates to Skyrim addresses.
  • Loading branch information
joelday authored Dec 5, 2019
1 parent c0e0c95 commit b9022b3
Show file tree
Hide file tree
Showing 525 changed files with 25,627 additions and 3,778 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ namespace RE
VMTypeID GetUnmangledType() const;

IComplexType* GetComplexType() const;
ObjectTypeInfo* GetScriptClass() const;
ObjectTypeInfo* GetClass() const;
StructTypeInfo* GetStructType() const;

bool IsComplexType() const;
Expand Down
10 changes: 5 additions & 5 deletions dependencies/f4se/src/f4se/CommonLibF4/include/RE/Offset.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,24 @@ namespace RE
namespace BSFixedString
{
// 44 88 44 24 18 48 89 54 24 10 48 89 4C 24 08 53 55 56 57 41 54 41 55 41 56 41 57 48 83 EC 58
constexpr std::uintptr_t CtorU8 = 0x01B43C90; // 1_10_138
constexpr std::uintptr_t CtorU8 = 0x01B43DB0; // 1_10_138
}

namespace CRC32Calculator
{
// TODO: IndirectSig:
constexpr std::uintptr_t SizeOf32 = 0x01B10680; // 1_10_138
constexpr std::uintptr_t SizeOf32 = 0x01B107A0; // 1_10_138
// TODO: IndirectSig:
constexpr std::uintptr_t SizeOf64 = 0x01B10710; // 1_10_138
constexpr std::uintptr_t SizeOf64 = 0x01B10830; // 1_10_138
// TODO: IndirectSig:
constexpr std::uintptr_t SizeOfSize = 0x01B10620; // 1_10_138
constexpr std::uintptr_t SizeOfSize = 0x01B106B0; // 1_10_138
}

namespace BSScript
{
namespace Struct
{
constexpr std::uintptr_t Dtor = 0x0271B6C0; // 1_10_138
constexpr std::uintptr_t Dtor = 0x0271B7E0; // 1_10_138
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ namespace RE
return vm->GetStructTypeInfo(typeInfo->GetName(), structTypeInfo);
}

ObjectTypeInfo* Type::GetScriptClass() const
ObjectTypeInfo* Type::GetClass() const
{
return IsObjectOrObjectArray() ? reinterpret_cast<ObjectTypeInfo*>(GetComplexType()) : 0;
}
Expand Down
2 changes: 1 addition & 1 deletion dependencies/f4se/src/f4se/f4se/BSGeometry.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#include "f4se/BSGeometry.h"

RelocAddr <_ConvertHalfToFloat> ConvertHalfToFloat(0x006944A0);
RelocAddr <_ConvertHalfToFloat> ConvertHalfToFloat(0x006945C0);
4 changes: 2 additions & 2 deletions dependencies/f4se/src/f4se/f4se/BSGeometry.h
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ class BSGeometry : public NiAVObject

MEMBER_FN_PREFIX(BSGeometry);
// 523E6E56493B00C91D9A86659158A735D8A58371+B
DEFINE_MEMBER_FN(UpdateShaderProperty, UInt32, 0x028200B0);
DEFINE_MEMBER_FN(UpdateShaderProperty, UInt32, 0x028201D0);
};
STATIC_ASSERT(sizeof(BSGeometry) == 0x160);

Expand All @@ -187,7 +187,7 @@ class BSTriShape : public BSGeometry
float unk16C; // 16C

MEMBER_FN_PREFIX(BSTriShape);
DEFINE_MEMBER_FN(CreateDynamicTriShape, BSDynamicTriShape*, 0x01D28030, NiAVObject * unk1);
DEFINE_MEMBER_FN(CreateDynamicTriShape, BSDynamicTriShape*, 0x01D28150, NiAVObject * unk1);
};
STATIC_ASSERT(sizeof(BSTriShape) == 0x170);

Expand Down
10 changes: 5 additions & 5 deletions dependencies/f4se/src/f4se/f4se/BSGraphics.cpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
#include "f4se/BSGraphics.h"

// 2CA5233612B3158658DB6DB9C90FD0258F1836E2+124
RelocPtr <BSRenderer*> g_renderer(0x06722068);
RelocPtr <BSRenderer*> g_renderer(0x067220E8);

// 6BF9214E9DC5338FC817F85B0716990E5CA7C862+31
RelocPtr <BSRenderManager> g_renderManager(0x061E0880);
RelocPtr <BSRenderManager> g_renderManager(0x061E0900);

// FA43F2F87927D8F20B17E756782BC91BB6BD04C2+3B
RelocPtr <BSRenderTargetManager> g_renderTargetManager(0x0384FD30);

// 4A4A200E8F9173F8CE99D39E27F4BDAF680DF52B+9C
RelocPtr <BSShaderResourceManager> g_shaderResourceManager(0x05C08E88);
RelocPtr <BSShaderResourceManager> g_shaderResourceManager(0x05C08F08);

// 84E19996C30AD51CE0D4AEF3E6ED8FFFF4AE4BD7+18
RelocPtr <ID3D11Device*> g_D3D11Device(0x0609BF08);
RelocPtr <ID3D11Device*> g_D3D11Device(0x0609BF88);

// BFDAF477B684098E9F394A636CCDC1BBD06EDEBF+25
RelocPtr <ID3D11DeviceContext*> g_D3D11DeviceContext(0x061DDBE0);
RelocPtr <ID3D11DeviceContext*> g_D3D11DeviceContext(0x061DDC60);
10 changes: 5 additions & 5 deletions dependencies/f4se/src/f4se/f4se/BSGraphics.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class BSRenderManager
CRITICAL_SECTION m_textureLock; // 2590

MEMBER_FN_PREFIX(BSRenderManager);
DEFINE_MEMBER_FN(CreateBSGeometryData, BSGeometryData*, 0x01D0BC40, UInt32 * blockSize, UInt8 * vertexData, UInt64 vertexDesc, BSGeometryData::TriangleData * triData); // Creates a block with a vertex copy in the resource pool with a reference to the supplied triblock (partial deep copy)
DEFINE_MEMBER_FN(CreateBSGeometryData, BSGeometryData*, 0x01D0BD60, UInt32 * blockSize, UInt8 * vertexData, UInt64 vertexDesc, BSGeometryData::TriangleData * triData); // Creates a block with a vertex copy in the resource pool with a reference to the supplied triblock (partial deep copy)
};
STATIC_ASSERT(offsetof(BSRenderManager, m_textureLock) == 0x2590);

Expand Down Expand Up @@ -56,12 +56,12 @@ class BSRenderTargetManager

MEMBER_FN_PREFIX(BSRenderTargetManager);
// D16605905EE44603E286262CE17CFC8383EABDDC+84
DEFINE_MEMBER_FN(LockTextureType, void, 0x01D32890, UInt32 type);
DEFINE_MEMBER_FN(LockTextureType, void, 0x01D329B0, UInt32 type);
// D16605905EE44603E286262CE17CFC8383EABDDC+32F
DEFINE_MEMBER_FN(ReleaseTextureType, void, 0x01D32920, UInt32 type);
DEFINE_MEMBER_FN(GetRenderData, BSRenderData *, 0x01D327F0, UInt32 type, UInt64 unk1, UInt64 unk2, UInt32 unk3); // type, 0, 1, 0
DEFINE_MEMBER_FN(ReleaseTextureType, void, 0x01D32A40, UInt32 type);
DEFINE_MEMBER_FN(GetRenderData, BSRenderData *, 0x01D32910, UInt32 type, UInt64 unk1, UInt64 unk2, UInt32 unk3); // type, 0, 1, 0
// D16605905EE44603E286262CE17CFC8383EABDDC+1EF
DEFINE_MEMBER_FN(Unk_01, void, 0x01D32840, UInt32 type, BSRenderData *, UInt8 unk3); // type, rendererData, 1
DEFINE_MEMBER_FN(Unk_01, void, 0x01D32960, UInt32 type, BSRenderData *, UInt8 unk3); // type, rendererData, 1
};

// 1B8
Expand Down
2 changes: 1 addition & 1 deletion dependencies/f4se/src/f4se/f4se/BSModelDB.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class BSModelDB

MEMBER_FN_PREFIX(TESProcessor);
// ??_7BSModelProcessor@BSModelDB@@6B@
DEFINE_MEMBER_FN(dtor, void, 0x02C57BC0);
DEFINE_MEMBER_FN(dtor, void, 0x02C57BC8);
DEFINE_MEMBER_FN(Impl_Process, void, 0x00137E50, ModelData * modelData, const char * modelName, NiAVObject ** root, UInt32 * typeOut);
};
};
Expand Down
4 changes: 2 additions & 2 deletions dependencies/f4se/src/f4se/f4se/GameAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ void Heap_Free(void * ptr)
}

// CF40EA3DCB94FC3927A17CCA60198108D4742CA7+68
RelocPtr <ConsoleManager *> g_console(0x058E0AB0);
RelocPtr <ConsoleManager *> g_console(0x058E0AE0);

// 1C0F98B1DC3F82F9BD55E938765C22AD25B75571+15
RelocAddr <UInt32 *> g_consoleHandle(0x05ADB428);
RelocAddr <UInt32 *> g_consoleHandle(0x05ADB4A8);

void Console_Print(const char * fmt, ...)
{
Expand Down
8 changes: 4 additions & 4 deletions dependencies/f4se/src/f4se/f4se/GameAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ class Heap
{
public:
MEMBER_FN_PREFIX(Heap);
DEFINE_MEMBER_FN(Allocate, void *, 0x01B0EEB0, size_t size, size_t alignment, bool aligned);
DEFINE_MEMBER_FN(Free, void, 0x01B0F1C0, void * buf, bool aligned);
DEFINE_MEMBER_FN(Allocate, void *, 0x01B0EFD0, size_t size, size_t alignment, bool aligned);
DEFINE_MEMBER_FN(Free, void, 0x01B0F2E0, void * buf, bool aligned);
};

extern RelocPtr <Heap> g_mainHeap;
Expand All @@ -19,8 +19,8 @@ class ConsoleManager
{
public:
MEMBER_FN_PREFIX(ConsoleManager);
DEFINE_MEMBER_FN(VPrint, void, 0x01262DA0, const char * fmt, va_list args);
DEFINE_MEMBER_FN(Print, void, 0x01262E30, const char * str);
DEFINE_MEMBER_FN(VPrint, void, 0x01262EC0, const char * fmt, va_list args);
DEFINE_MEMBER_FN(Print, void, 0x01262F50, const char * str);
};

extern RelocPtr <ConsoleManager *> g_console;
Expand Down
2 changes: 1 addition & 1 deletion dependencies/f4se/src/f4se/f4se/GameCamera.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class TESCamera
UInt32 unk34; // 34

MEMBER_FN_PREFIX(TESCamera);
DEFINE_MEMBER_FN(SetCameraState, void, 0x0082E810, TESCameraState * cameraState);
DEFINE_MEMBER_FN(SetCameraState, void, 0x0082E930, TESCameraState * cameraState);
};

class PlayerCamera : public TESCamera
Expand Down
26 changes: 13 additions & 13 deletions dependencies/f4se/src/f4se/f4se/GameCustomization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,37 @@
#include "f4se/GameObjects.h"

// 6E6D6B9C5754133F46724CAD540B520D846299B9+B5
RelocPtr <CharacterCreation*> g_characterCreation(0x05A673F0); // array
RelocPtr <CharacterCreation*> g_characterCreation(0x05A67420); // array
// 6E6D6B9C5754133F46724CAD540B520D846299B9+AF
RelocPtr <UInt32> g_characterIndex(0x05A67410);
RelocPtr <UInt32> g_characterIndex(0x05A67440);

// 89B16A159EF66C1743643F2F457380448C4803F0+18
RelocPtr <BSFaceGenManager*> g_faceGenManager(0x058D0880);

// E5618E306F15B8DF84D22F68B984045D0DD91165+29
RelocPtr <TESNPC*> g_customizationDummy1(0x059DAD68); // Either Nora or Nate's dummy actors
RelocPtr <TESNPC*> g_customizationDummy1(0x059DAD98); // Either Nora or Nate's dummy actors
// E5618E306F15B8DF84D22F68B984045D0DD91165+32
RelocPtr <TESNPC*> g_customizationDummy2(0x059DAD30); // Either Nora or Nate's dummy actors
RelocPtr <TESNPC*> g_customizationDummy2(0x059DAD60); // Either Nora or Nate's dummy actors

RelocAddr<_CreateCharacterTintEntry> CreateCharacterTintEntry(0x002A5630);
RelocAddr<_CopyCharacterTints> CopyCharacterTints(0x002A4620);
RelocAddr<_ClearCharacterTints> ClearCharacterTints(0x002AA8A0);
RelocAddr<_CreateCharacterTintEntry> CreateCharacterTintEntry(0x002A5750);
RelocAddr<_CopyCharacterTints> CopyCharacterTints(0x002A4740);
RelocAddr<_ClearCharacterTints> ClearCharacterTints(0x002AA9C0);

RelocAddr <_FillTintTemplates> FillTintTemplates(0x002A47C0); // For manipulating the tint lists, their signatures aren't quite right yet
RelocAddr <_MergeTintTextures> MergeTintTextures(0x00689A90);
RelocAddr <_CreateMergeTintTextures> CreateMergeTintTextures(0x00689880);
RelocAddr <_FillTintTemplates> FillTintTemplates(0x002A48E0); // For manipulating the tint lists, their signatures aren't quite right yet
RelocAddr <_MergeTintTextures> MergeTintTextures(0x00689BB0);
RelocAddr <_CreateMergeTintTextures> CreateMergeTintTextures(0x006899A0);

// 8290027174FC425F1C5C8233B65132B99D1A37E1+F6
RelocPtr <tHashSet<CharacterCreation::MorphIntensity, TESNPC*>> g_morphIntensityMap(0x03715370 - 0x08);

// These are for creating new instances

// ??_7Mask@Template@BGSCharacterTint@@6B@
RelocAddr <uintptr_t> s_BGSCharacterTint_Template_MaskVtbl(0x02C6ACF8);
RelocAddr <uintptr_t> s_BGSCharacterTint_Template_MaskVtbl(0x02C6AD88);
// ??_7Palette@Template@BGSCharacterTint@@6B@
RelocAddr <uintptr_t> s_BGSCharacterTint_Template_PaletteVtbl(0x02C6AD28);
RelocAddr <uintptr_t> s_BGSCharacterTint_Template_PaletteVtbl(0x02C6ADB8);
// ??_7TextureSet@Template@BGSCharacterTint@@6B@
RelocAddr <uintptr_t> s_BGSCharacterTint_Template_TextureSetVtbl(0x02C6AD58);
RelocAddr <uintptr_t> s_BGSCharacterTint_Template_TextureSetVtbl(0x02C6ADE8);

bool BGSCharacterTint::Entry::IsEqual(Entry * rhs)
{
Expand Down
4 changes: 2 additions & 2 deletions dependencies/f4se/src/f4se/f4se/GameCustomization.h
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ class CharacterCreation
UInt64 unk520[(0x548-0x520)/8]; // 520

MEMBER_FN_PREFIX(CharacterCreation);
DEFINE_MEMBER_FN(LoadPreset, void, 0x00CACC20, UInt32 presetIndex); // Loads preset by index onto the actor
DEFINE_MEMBER_FN(LoadPreset, void, 0x00CACD40, UInt32 presetIndex); // Loads preset by index onto the actor
};

// ??
Expand All @@ -435,7 +435,7 @@ class BSFaceGenManager
NiAVObject * camera; // 34A8 - NiCamera (WorldRoot Camera)

MEMBER_FN_PREFIX(BSFaceGenManager);
DEFINE_MEMBER_FN(ApplyDynamicData, void, 0x00678D20, BSTriShape * trishape);
DEFINE_MEMBER_FN(ApplyDynamicData, void, 0x00678E40, BSTriShape * trishape);
};
STATIC_ASSERT(offsetof(BSFaceGenManager, unk3230) == 0x3230);
STATIC_ASSERT(offsetof(BSFaceGenManager, unk3478) == 0x3478);
Expand Down
4 changes: 2 additions & 2 deletions dependencies/f4se/src/f4se/f4se/GameData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
RelocPtr <DataHandler*> g_dataHandler(0x058CF080);

// 5ED90DCE1A1D1EDBCC888F3EA1234E23E307DD26+6
RelocPtr <bool> g_isGameDataReady(0x05A589E4);
RelocPtr <bool> g_isGameDataReady(0x05A58A14);

// 637A4CF3B8D5BEB4F483234F10F54E7595CA465F+A49
RelocPtr <DefaultObjectMap*> g_defaultObjectMap(0x058D36D0);
Expand All @@ -13,7 +13,7 @@ RelocPtr <DefaultObjectMap*> g_defaultObjectMap(0x058D36D0);
RelocPtr <BSReadWriteLock> g_defaultObjectMapLock(0x058D4138);

// C449692A90CCF8E972B00FE2979EF8ADEED6925A+3D
RelocPtr <FavoritesManager*> g_favoritesManager(0x05A5FC60);
RelocPtr <FavoritesManager*> g_favoritesManager(0x05A5FC90);

class LoadedModFinder
{
Expand Down
45 changes: 43 additions & 2 deletions dependencies/f4se/src/f4se/f4se/GameData.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,28 @@ struct ModInfo // referred to by game as TESFile
void * unk68; // 068
char name[MAX_PATH]; // 070
char directory[MAX_PATH]; // 174
UInt64 unk278[0xD8/8]; // 278
UInt64 unk278[0xB8/8]; // 278
struct Dependency
{
void * unk00; // 00
const char * name; // 08
Dependency * next; // 10
};

enum RecordFlag
{
kRecordFlags_None = 0,
kRecordFlags_ESM = 1 << 0,
kRecordFlags_Active = 1 << 3,
kRecordFlags_Localized = 1 << 7,
kRecordFlags_ESL = 1 << 9
};

UInt32 flags; // 330
UInt32 recordFlags; // 334
UInt64 unk338; // 338
UInt64 unk340; // 340
UInt64 unk348; // 348
Dependency * depends; // 350
UInt32 numRefMods; // 358
UInt32 unk35C; // 35C
Expand All @@ -57,8 +72,34 @@ struct ModInfo // referred to by game as TESFile
BSString author; // 378
BSString description; // 388
// ...

// Checks if a particular formID is part of the mod
bool IsFormInMod(UInt32 formID) const
{
if (!IsLight() && (formID >> 24) == modIndex)
return true;
if (IsLight() && (formID >> 24) == 0xFE && ((formID & 0x00FFF000) >> 12) == lightIndex)
return true;
return false;
}

// Returns either a modIndex or a modIndex|lightIndex pair
UInt32 GetPartialIndex() const
{
return !IsLight() ? modIndex : (0xFE000 | lightIndex);
}

// Converts the lower bits of a FormID to a full FormID depending on plugin type
UInt32 GetFormID(UInt32 formLower) const
{
return !IsLight() ? UInt32(modIndex) << 24 | (formLower & 0xFFFFFF) : 0xFE000000 | (UInt32(lightIndex) << 12) | (formLower & 0xFFF);
}

bool IsActive() const { return modIndex != 0xFF; }
bool IsLight() const { return (recordFlags & kRecordFlags_ESL) == kRecordFlags_ESL; }
};

STATIC_ASSERT(offsetof(ModInfo, recordFlags) == 0x334);
STATIC_ASSERT(offsetof(ModInfo, author) == 0x378);

struct ModList
Expand Down Expand Up @@ -288,7 +329,7 @@ class LocationData
TESWorldSpace * worldspace; // 28

MEMBER_FN_PREFIX(LocationData);
DEFINE_MEMBER_FN(ctor, LocationData*, 0x001F8780, Actor * refr);
DEFINE_MEMBER_FN(ctor, LocationData*, 0x001F8830, Actor * refr);
};

struct DefaultObjectEntry
Expand Down
2 changes: 1 addition & 1 deletion dependencies/f4se/src/f4se/f4se/GameEvents.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include "f4se/GameEvents.h"

// 7D79D7BCBD040E10630ADDBE12B957FD115304A2+D
RelocPtr <BSTGlobalEvent::EventSource<ApplyColorUpdateEvent>*> g_colorUpdateDispatcher(0x06577D70);
RelocPtr <BSTGlobalEvent::EventSource<ApplyColorUpdateEvent>*> g_colorUpdateDispatcher(0x06577DF0);

// 61A1F6B0E46CB298CD32C55D9A653D702CCD1B67+63
RelocPtr <BSTGlobalEvent*> g_globalEvents(0x058CEC18);
12 changes: 6 additions & 6 deletions dependencies/f4se/src/f4se/f4se/GameEvents.h
Original file line number Diff line number Diff line change
Expand Up @@ -223,19 +223,19 @@ template<> inline BSTEventDispatcher<Event> * GetEventDispatcher() \
}

// A548D71D41C7C2E9D21B25E06730FB911FC31F47+B4 (struct+A0)
DECLARE_EVENT_DISPATCHER(TESCombatEvent, 0x00441FD0)
DECLARE_EVENT_DISPATCHER(TESCombatEvent, 0x004420F0)

// A548D71D41C7C2E9D21B25E06730FB911FC31F47+118 (struct+C8)
DECLARE_EVENT_DISPATCHER(TESDeathEvent, 0x00442430)
DECLARE_EVENT_DISPATCHER(TESDeathEvent, 0x00442550)

// A548D71D41C7C2E9D21B25E06730FB911FC31F47+1A4 (struct+108)
DECLARE_EVENT_DISPATCHER(TESFurnitureEvent, 0x00442B10)
DECLARE_EVENT_DISPATCHER(TESFurnitureEvent, 0x00442C30)

// A548D71D41C7C2E9D21B25E06730FB911FC31F47+1F4 (struct+128)
DECLARE_EVENT_DISPATCHER(TESLoadGameEvent, 0x00442D90)
DECLARE_EVENT_DISPATCHER(TESLoadGameEvent, 0x00442EB0)

// A548D71D41C7C2E9D21B25E06730FB911FC31F47+238 (struct+140)
DECLARE_EVENT_DISPATCHER(TESObjectLoadedEvent, 0x004430B0)
DECLARE_EVENT_DISPATCHER(TESObjectLoadedEvent, 0x004431D0)

// 22274238010A92A75A0E77127FF6D54FDBC6F943+821 (inside call)
DECLARE_EVENT_DISPATCHER(TESInitScriptEvent, 0x00442C50)
DECLARE_EVENT_DISPATCHER(TESInitScriptEvent, 0x00442D70)
8 changes: 4 additions & 4 deletions dependencies/f4se/src/f4se/f4se/GameExtraData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
#include "f4se/GameObjects.h"

// ??_7ExtraPowerLinks@@6B@
RelocAddr <uintptr_t> s_ExtraPowerLinksVtbl(0x02C52378);
RelocAddr <uintptr_t> s_ExtraPowerLinksVtbl(0x02C52388);

// ??_7ExtraInstanceData@@6B@
RelocAddr <uintptr_t> s_ExtraInstanceDataVtbl(0x02C53C00);
RelocAddr <uintptr_t> s_ExtraInstanceDataVtbl(0x02C53C10);

// ??_7ExtraHealth@@6B@
RelocAddr <uintptr_t> s_ExtraHealthVtbl(0x02C521D8);
RelocAddr <uintptr_t> s_ExtraHealthVtbl(0x02C521E8);

// ??_7ExtraMaterialSwap@@6B@
RelocAddr <uintptr_t> s_ExtraMaterialSwapVtbl(0x02C528D8);
RelocAddr <uintptr_t> s_ExtraMaterialSwapVtbl(0x02C528E8);

bool ExtraDataList::PresenceBitfield::HasType(UInt32 type) const
{
Expand Down
Loading

0 comments on commit b9022b3

Please sign in to comment.