docs: add plugin setup guide
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
namespace RE
|
||||
{
|
||||
enum class LANDING_TYPE : std::uint32_t
|
||||
{
|
||||
kDefault = 0x0,
|
||||
kHasty = 0x1,
|
||||
kCrash = 0x2
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
namespace RE
|
||||
{
|
||||
class ContainerItemExtra;
|
||||
|
||||
class LEVELED_OBJECT
|
||||
{
|
||||
public:
|
||||
// members
|
||||
TESForm* form; // 00
|
||||
ContainerItemExtra* itemExtra; // 08
|
||||
std::uint16_t count; // 10
|
||||
std::uint16_t level; // 12
|
||||
std::int8_t chanceNone; // 14
|
||||
};
|
||||
static_assert(sizeof(LEVELED_OBJECT) == 0x18);
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
#pragma once
|
||||
|
||||
#include "RE/B/BSPointerHandle.h"
|
||||
#include "RE/B/BSSimpleList.h"
|
||||
#include "RE/B/BSSpinLock.h"
|
||||
#include "RE/B/BSTArray.h"
|
||||
#include "RE/B/BSTAtomicValue.h"
|
||||
#include "RE/B/BSTHashMap.h"
|
||||
#include "RE/N/NiPointer.h"
|
||||
|
||||
namespace RE
|
||||
{
|
||||
class AnimatedRefObject;
|
||||
class BSMultiBoundNode;
|
||||
class BSPortalGraph;
|
||||
class NiNode;
|
||||
class QueuedFile;
|
||||
|
||||
class LOADED_CELL_DATA
|
||||
{
|
||||
public:
|
||||
class AnimatedRefObject
|
||||
{
|
||||
public:
|
||||
// members
|
||||
ObjectRefHandle handle; // 0
|
||||
std::int32_t numSkipFrames; // 4
|
||||
};
|
||||
static_assert(sizeof(AnimatedRefObject) == 0x8);
|
||||
|
||||
// members
|
||||
BSTHashMap<ObjectRefHandle, TESForm*> emittanceSourceRefMap; // 000
|
||||
BSTHashMap<ObjectRefHandle, NiNode*> emittanceLightRefMap; // 030
|
||||
BSTHashMap<ObjectRefHandle, NiPointer<BSMultiBoundNode>> multiboundRefMap; // 060
|
||||
BSTHashMap<BSMultiBoundNode*, ObjectRefHandle> refMultiboundMap; // 090
|
||||
BSTArray<NiPointer<NiNode>> preCombined; // 0C0
|
||||
BSTArray<NiPointer<NiNode>> attachedTransitionCells; // 0D8
|
||||
BSTArray<AnimatedRefObject> animatedRefs; // 0F0
|
||||
BSTArray<ObjectRefHandle> flickeringLights; // 108
|
||||
BSTArray<ObjectRefHandle> movingRefs; // 120
|
||||
BSTArray<ObjectRefHandle> decalRefs; // 138
|
||||
BSTArray<ObjectRefHandle> skyActors; // 150
|
||||
BSTArray<ObjectRefHandle> flightAvoidAreas; // 168
|
||||
BSReadWriteLock waterLock; // 180
|
||||
void* combinedGeometry; // 188 - TODO
|
||||
NiPointer<QueuedFile> combinedGeometryTask; // 190
|
||||
BSSimpleList<ObjectRefHandle> activatingRefs; // 198
|
||||
BSSimpleList<ObjectRefHandle> waterRefs; // 1A8
|
||||
NiPointer<BSPortalGraph> portalGraph; // 1B8
|
||||
NiPointer<NiNode> cell3D; // 1C0
|
||||
NiPointer<NiNode> lightMarkerNode; // 1C8
|
||||
NiPointer<NiNode> soundMarkerNode; // 1D0
|
||||
NiPointer<NiNode> multiBoundNode; // 1D8
|
||||
NiPointer<NiNode> combinedObjects; // 1E0
|
||||
NiPointer<NiNode> combinedStaticCollision; // 1E8
|
||||
BGSEncounterZone* encounterZone; // 1F0
|
||||
std::size_t visibleDistantFadeInTime; // 1F8
|
||||
std::int32_t criticalQueuedRefCount; // 200
|
||||
std::int32_t queuedRefCount; // 204
|
||||
std::int32_t queuedDistantRefCount; // 208
|
||||
std::uint32_t refsAttachedDelay; // 20C
|
||||
BSTAtomicValue<std::uint32_t> combinedObjectsAttached; // 210
|
||||
bool decalsQueued; // 214
|
||||
bool refsFullyLoaded; // 215
|
||||
bool combinedObjectsRegistered; // 216
|
||||
bool grassIsShown; // 217
|
||||
};
|
||||
static_assert(sizeof(LOADED_CELL_DATA) == 0x218);
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
#include "RE/B/BSModelDB.h"
|
||||
#include "RE/N/NiPointer.h"
|
||||
|
||||
namespace RE
|
||||
{
|
||||
class NiAVObject;
|
||||
|
||||
class LOADED_REF_DATA
|
||||
{
|
||||
public:
|
||||
// members
|
||||
BSModelDB::HandelListHead handleList; // 00
|
||||
NiPointer<NiAVObject> data3D; // 08
|
||||
TESWaterForm* currentWaterType; // 10
|
||||
float relevantWaterHeight; // 18
|
||||
float cachedRadius; // 1C
|
||||
std::uint16_t flags; // 20
|
||||
std::int16_t underwaterCount; // 22
|
||||
};
|
||||
static_assert(sizeof(LOADED_REF_DATA) == 0x28);
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
namespace RE
|
||||
{
|
||||
enum class LOCK_LEVEL : std::int32_t
|
||||
{
|
||||
kUnlocked = static_cast<std::underlying_type_t<LOCK_LEVEL>>(-1),
|
||||
kEasy = 0x0,
|
||||
kAverage = 0x1,
|
||||
kHard = 0x2,
|
||||
kVeryHard = 0x3,
|
||||
kRequiresKey = 0x4,
|
||||
kInaccessible = 0x5,
|
||||
kTerminal = 0x6,
|
||||
kBarred = 0x7,
|
||||
kChained = 0x8,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
|
||||
#include "RE/B/BSTEvent.h"
|
||||
|
||||
namespace RE
|
||||
{
|
||||
namespace LevelIncrease
|
||||
{
|
||||
class Event
|
||||
{
|
||||
public:
|
||||
// members
|
||||
std::uint32_t newLevel; // 00
|
||||
};
|
||||
static_assert(sizeof(Event) == 0x4);
|
||||
|
||||
[[nodiscard]] static inline BSTEventSource<LevelIncrease::Event>* GetEventSource()
|
||||
{
|
||||
using func_t = decltype(&LevelIncrease::GetEventSource);
|
||||
static REL::Relocation<func_t> func{ ID::LevelIncrease::GetEventSource };
|
||||
return func();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
|
||||
#include "RE/B/BSExternalAudioIO.h"
|
||||
|
||||
namespace RE
|
||||
{
|
||||
class LipSynchAnim
|
||||
{
|
||||
public:
|
||||
// members
|
||||
std::uint32_t numFrames; // 00
|
||||
std::int32_t startingFrame; // 04
|
||||
std::uint32_t numPhonemeTargets; // 08
|
||||
float** p_phonemes; // 10
|
||||
float** modifiers; // 18
|
||||
float* phonemes; // 20
|
||||
bool hasGestures; // 28
|
||||
std::uint32_t versionNumber; // 2C
|
||||
BSExternalAudioIO::ExternalLoad voiceData; // 30;
|
||||
};
|
||||
static_assert(sizeof(LipSynchAnim) == 0x48);
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
#pragma once
|
||||
|
||||
#include "RE/B/BSModelDB.h"
|
||||
#include "RE/B/BSSoundHandle.h"
|
||||
#include "RE/G/GameMenuBase.h"
|
||||
#include "RE/I/ImageSpaceLUTData.h"
|
||||
#include "RE/N/NiMatrix3.h"
|
||||
#include "RE/N/NiPoint3.h"
|
||||
|
||||
namespace RE
|
||||
{
|
||||
class BGSModelMaterialSwap;
|
||||
class NiAVObject;
|
||||
|
||||
class __declspec(novtable) LoadingMenu :
|
||||
public GameMenuBase // 00
|
||||
{
|
||||
public:
|
||||
static constexpr auto RTTI{ RTTI::LoadingMenu };
|
||||
static constexpr auto VTABLE{ VTABLE::LoadingMenu };
|
||||
static constexpr auto MENU_NAME{ "LoadingMenu"sv };
|
||||
|
||||
virtual ~LoadingMenu(); // 00
|
||||
|
||||
// override (GameMenuBase)
|
||||
virtual void Call(const Params&) override; // 01
|
||||
virtual void MapCodeObjectFunctions() override; // 02
|
||||
virtual UI_MESSAGE_RESULTS ProcessMessage(UIMessage& a_message) override; // 03
|
||||
virtual void AdvanceMovie(float a_timeDelta, std::uint64_t a_time) override; // 04
|
||||
virtual bool OnButtonEventRelease(const BSFixedString& a_eventName) override; // 0F
|
||||
|
||||
// override (BSInputEventUser)
|
||||
virtual bool ShouldHandleEvent(const InputEvent*) override; // 01
|
||||
virtual void OnThumbstickEvent(const ThumbstickEvent*) override; // 04
|
||||
virtual void OnButtonEvent(const ButtonEvent*) override; // 08
|
||||
|
||||
static void StartTestingLoadMenu()
|
||||
{
|
||||
using func_t = decltype(&LoadingMenu::StartTestingLoadMenu);
|
||||
static REL::Relocation<func_t> func{ ID::LoadingMenu::StartTestingLoadMenu };
|
||||
return func();
|
||||
}
|
||||
|
||||
void PopulateLoadScreens()
|
||||
{
|
||||
using func_t = decltype(&LoadingMenu::PopulateLoadScreens);
|
||||
static REL::Relocation<func_t> func{ ID::LoadingMenu::PopulateLoadScreens };
|
||||
return func(this);
|
||||
}
|
||||
|
||||
// members
|
||||
BGSLocation* loadLocation; // 0E0
|
||||
TESLoadScreen* artScreen; // 0E8
|
||||
std::byte upgrader[0x10]; // 0F0 - TODO
|
||||
BSTArray<TESLoadScreen*> validScreens; // 100
|
||||
void* foregroundModel; // 118 - BDModelDB::Handle
|
||||
NiAVObject* zoomTarget; // 120
|
||||
ImageSpaceLUTData LUT; // 128
|
||||
std::uint32_t numNonDefaultScreens; // 198
|
||||
float modelAggregateRotation; // 19C
|
||||
float modelMinAggregateRotation; // 1A0
|
||||
float modelMaxAggregateRotation; // 1A4
|
||||
float frameTimeDelta; // 1A8
|
||||
float currentZoom; // 1AC
|
||||
float minZoom; // 1B0
|
||||
float maxZoom; // 1B4
|
||||
float horizontalBound; // 1B8
|
||||
float verticalBound; // 1BC
|
||||
float verticalBoundOffset; // 1BC
|
||||
alignas(0x10) NiMatrix3 initialRotation; // 1D0
|
||||
NiPoint2 calcedPanMaxima; // 200
|
||||
NiPoint2 calcedPanMinima; // 208
|
||||
std::uint64_t lastAdvanceMovieTime; // 210
|
||||
std::uint64_t lastUserInteractTime; // 218
|
||||
std::uint64_t lastPanTime; // 220
|
||||
std::uint64_t lastRotationTime; // 228
|
||||
std::uint64_t lastZoomTime; // 230
|
||||
BSSoundHandle rotationSoundLoop; // 238
|
||||
BSSoundHandle zoomSoundLoop; // 240
|
||||
const BGSModelMaterialSwap* modelMaterialSwap; // 248
|
||||
NiPoint3 modelInitialRotation; // 250
|
||||
NiPoint3 modelTranslationOffset; // 25C
|
||||
float modelScale; // 268
|
||||
std::uint32_t numFrames; // 26C
|
||||
bool loadingIntoInterior; // 270
|
||||
bool menuAdded; // 271
|
||||
bool leftButtonDown; // 272
|
||||
bool rightButtonDown; // 273
|
||||
bool allowRotation; // 274
|
||||
bool autoRotate; // 275
|
||||
bool autoRotateInvert; // 276
|
||||
bool holoMode; // 277
|
||||
bool loadScreenShown; // 278
|
||||
bool leftStickReady; // 279
|
||||
bool rightStickReady; // 27A
|
||||
bool leftStickWasPreviouslyActive; // 27B
|
||||
bool rightStickWasPreviouslyActive; // 27C
|
||||
bool modelRequested; // 27D
|
||||
bool PCKeysDebounced; // 27E
|
||||
};
|
||||
static_assert(sizeof(LoadingMenu) == 0x280);
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
|
||||
#include "RE/B/BSFixedString.h"
|
||||
|
||||
namespace RE
|
||||
{
|
||||
class BGSLocation;
|
||||
|
||||
class __declspec(novtable) LoadingMenuData :
|
||||
public IUIMessageData // 00
|
||||
{
|
||||
public:
|
||||
static constexpr auto RTTI{ RTTI::LoadingMenuData };
|
||||
static constexpr auto VTABLE{ VTABLE::LoadingMenuData };
|
||||
|
||||
// members
|
||||
BSFixedString action; // 18
|
||||
BGSLocation* location; // 20
|
||||
bool interior; // 28
|
||||
};
|
||||
static_assert(sizeof(LoadingMenuData) == 0x30);
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
namespace RE
|
||||
{
|
||||
namespace LoadingStatusChanged
|
||||
{
|
||||
class Event
|
||||
{
|
||||
public:
|
||||
bool isLoading; // 00
|
||||
};
|
||||
static_assert(sizeof(Event) == 0x1);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
namespace RE
|
||||
{
|
||||
namespace LocalMapCameraUpdate
|
||||
{
|
||||
class Event
|
||||
{
|
||||
public:
|
||||
};
|
||||
static_assert(std::is_empty_v<Event>);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
namespace RE
|
||||
{
|
||||
namespace LocationMarkerArrayUpdate
|
||||
{
|
||||
class Event
|
||||
{
|
||||
public:
|
||||
bool shouldClearMapMarkers; // 00
|
||||
};
|
||||
static_assert(sizeof(Event) == 0x1);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
#pragma once
|
||||
|
||||
#include "RE/B/BSSoundHandle.h"
|
||||
#include "RE/G/GameMenuBase.h"
|
||||
#include "RE/N/NiMatrix3.h"
|
||||
#include "RE/N/NiPoint3.h"
|
||||
#include "RE/N/NiPointer.h"
|
||||
|
||||
namespace RE
|
||||
{
|
||||
class NiControllerManager;
|
||||
class NiControllerSequence;
|
||||
class NiNode;
|
||||
|
||||
class __declspec(novtable) LockpickingMenu :
|
||||
public GameMenuBase // 00
|
||||
{
|
||||
public:
|
||||
static constexpr auto RTTI{ RTTI::LockpickingMenu };
|
||||
static constexpr auto VTABLE{ VTABLE::LockpickingMenu };
|
||||
static constexpr auto MENU_NAME{ "LockpickingMenu"sv };
|
||||
|
||||
virtual ~LockpickingMenu(); // 00
|
||||
|
||||
// override (GameMenuBase)
|
||||
virtual UI_MESSAGE_RESULTS ProcessMessage(UIMessage& a_message) override; // 03
|
||||
virtual void AdvanceMovie(float a_timeDelta, std::uint64_t a_time) override; // 04
|
||||
virtual bool OnButtonEventRelease(const BSFixedString& a_eventName) override; // 0F
|
||||
|
||||
// override (BSInputEventUser)
|
||||
virtual bool ShouldHandleEvent(const InputEvent*) override; // 01
|
||||
virtual void OnThumbstickEvent(const ThumbstickEvent*) override; // 04
|
||||
virtual void OnMouseMoveEvent(const MouseMoveEvent*) override; // 06
|
||||
virtual void OnButtonEvent(const ButtonEvent*) override; // 08
|
||||
|
||||
static void OpenLockpickingMenu(TESObjectREFR* a_lockedRef)
|
||||
{
|
||||
using func_t = decltype(&LockpickingMenu::OpenLockpickingMenu);
|
||||
static REL::Relocation<func_t> func{ ID::LockpickingMenu::OpenLockpickingMenu };
|
||||
return func(a_lockedRef);
|
||||
}
|
||||
|
||||
static void DamageLockpick()
|
||||
{
|
||||
using func_t = decltype(&LockpickingMenu::DamageLockpick);
|
||||
static REL::Relocation<func_t> func{ ID::LockpickingMenu::DamageLockpick };
|
||||
return func();
|
||||
}
|
||||
|
||||
// members
|
||||
NiMatrix3 origPickRotate; // 0E0
|
||||
NiPoint3 origPickTranslate; // 110
|
||||
NiControllerManager* lockAnimManager; // 120
|
||||
NiControllerSequence* lockIntroAnim; // 128
|
||||
NiControllerSequence* lockRotateAnim; // 130
|
||||
NiControllerManager* pickAnimManager; // 138
|
||||
NiControllerSequence* pickIntroAnim; // 140
|
||||
NiControllerSequence* pickBendAnim; // 148
|
||||
NiControllerSequence* pickBreakAnim; // 150
|
||||
NiControllerSequence* currPickAnim; // 158
|
||||
NiControllerSequence* currLockAnim; // 160
|
||||
void* lockModel; // 168
|
||||
void* pickModel; // 170
|
||||
NiPointer<NiNode> lockRoot; // 178
|
||||
float currPickAnimElapsedSecs; // 180
|
||||
float currLockAnimElapsedSecs; // 184
|
||||
float pickAngle; // 188
|
||||
float lockAngle; // 18C
|
||||
float lockDamagePickAngle; // 190
|
||||
float pickBreakSecs; // 194
|
||||
BSSoundHandle pickTensionSound; // 198
|
||||
float sweetSpotCenter; // 1A0
|
||||
float sweetSpotLength; // 1A4
|
||||
float partialPickLength; // 1A8
|
||||
std::uint32_t picksBroken; // 1AC
|
||||
bool modelsInit; // 1B0
|
||||
bool animating; // 1B1
|
||||
bool turningLock; // 1B2
|
||||
bool menuCleanedUp; // 1B3
|
||||
bool tutorialMenuOpening; // 1B4
|
||||
bool crimeDetected; // 1B5
|
||||
bool VATSWasEnabled; // 1B6
|
||||
bool VATSDepthTestMask; // 1B7
|
||||
};
|
||||
static_assert(sizeof(LockpickingMenu) == 0x1C0);
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
|
||||
#include "RE/B/BSTEvent.h"
|
||||
|
||||
namespace RE
|
||||
{
|
||||
class LocksPicked
|
||||
{
|
||||
public:
|
||||
class Event
|
||||
{
|
||||
public:
|
||||
};
|
||||
static_assert(std::is_empty_v<LocksPicked::Event>);
|
||||
|
||||
[[nodiscard]] static BSTEventSource<LocksPicked::Event>* GetEventSource()
|
||||
{
|
||||
using func_t = decltype(&LocksPicked::GetEventSource);
|
||||
static REL::Relocation<func_t> func{ ID::LocksPicked::GetEventSource };
|
||||
return func();
|
||||
}
|
||||
};
|
||||
static_assert(std::is_empty_v<LocksPicked>);
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
|
||||
#include "RE/P/PlayerInputHandler.h"
|
||||
|
||||
namespace RE
|
||||
{
|
||||
class LookHandler :
|
||||
public PlayerInputHandler
|
||||
{
|
||||
public:
|
||||
static constexpr auto RTTI{ RTTI::LookHandler };
|
||||
static constexpr auto VTABLE{ VTABLE::LookHandler };
|
||||
|
||||
explicit constexpr LookHandler(PlayerControlsData& a_data) noexcept :
|
||||
PlayerInputHandler(a_data)
|
||||
{}
|
||||
|
||||
// members
|
||||
float thumbstickMaxedSec{ 0.0f }; // 20
|
||||
};
|
||||
static_assert(sizeof(LookHandler) == 0x28);
|
||||
}
|
||||
Reference in New Issue
Block a user