docs: add plugin setup guide

This commit is contained in:
2026-05-30 18:33:24 +12:00
parent f3db41c402
commit b61043a3fe
1776 changed files with 122386 additions and 2 deletions
@@ -0,0 +1,59 @@
#pragma once
#include "RE/B/BSPointerHandle.h"
#include "RE/N/NiColor.h"
#include "RE/N/NiMatrix3.h"
#include "RE/N/NiPoint3.h"
#include "RE/N/NiPointer.h"
namespace RE
{
class BGSTextureSet;
class NiAVObject;
class NiNode;
class TESObjectCELL;
class DECAL_CREATION_DATA
{
public:
// members
NiMatrix3 projection; // 00
NiPoint3A origin; // 30
NiPoint3A direction; // 40
NiPoint3A surfaceNormal; // 50
ObjectRefHandle objRef; // 60
NiPointer<NiAVObject> avObj; // 68
NiNode* clone; // 70
BGSTextureSet* texSet; // 78
BGSTextureSet* texSet2; // 80
std::int32_t index; // 88
float decalWidth; // 8C
float decalHeight; // 90
float decalDepth; // 94
TESObjectCELL* parentCell; // 98
float parallaxOcclusionScale; // A0
NiNode* skinnedDecalNode; // A8
float specular; // B0
float decalEpsilon; // B4
float placementRadius; // 0B8
NiColor vertexColor; // BC
std::uint32_t bodyParts; // C8
std::uint8_t subTex; // CC
bool permanent; // CD
bool parallaxOcclusionShadows; // CE
bool alphaTesting; // CF
bool alphaBlending; // D0
bool multiplicativeBlending; // D1
std::uint8_t parallaxOcclusionMaxPasses; // D2
bool modelSpace; // D3
bool forceFade; // D4
bool twoSided; // D5
bool preprocessed; // D6
bool manualSaveLoad; // D7
std::uint32_t sceneGraphIndex; // D8
float decalLifetime; // DC
bool dynamic; // E0
bool useGbufferNormal; // E1
};
static_assert(sizeof(DECAL_CREATION_DATA) == 0xF0);
}
@@ -0,0 +1,21 @@
#pragma once
namespace RE
{
class DECAL_DATA_DATA
{
public:
// members
float decalMinWidth; // 00
float decalMaxWidth; // 04
float decalMinHeight; // 08
float decalMaxHeight; // 0C
float depth; // 10
float shininess; // 14
float parallaxScale; // 18
std::int8_t parallaxPasses; // 1C
std::int8_t flags; // 1D
std::uint32_t color; // 20
};
static_assert(sizeof(DECAL_DATA_DATA) == 0x24);
}
@@ -0,0 +1,403 @@
#pragma once
namespace RE
{
enum class DEFAULT_OBJECT
{
kSittingAngleLimit = 0x1,
kAllowPlayerShout = 0x2,
kGold = 0x3,
kLockpick = 0x4,
kSkeletonKey = 0x5,
kPlayerFaction = 0x6,
kGuardFaction = 0x7,
kBattleMusic = 0x8,
kDeathMusic = 0x9,
kDungeonClearedMusic = 0xA,
kPlayerVoiceMale = 0xB,
kPlayerVoiceMaleChild = 0xC,
kPlayerVoiceFemale = 0xD,
kPlayerVoiceFemaleChild = 0xE,
kEatPackageDefaultFood = 0xF,
kVoiceEquip = 0x10,
kPotionEquip = 0x11,
kEveryActorAbility = 0x12,
kCommandedActorAbility = 0x13,
kDrugWearsOffImageSpace = 0x14,
kFootstepSet = 0x15,
kLandscapeMaterial = 0x16,
kDragonLandZoneMarker = 0x17,
kDragonCrashZoneMarker = 0x18,
kCombatStyle = 0x19,
kDefaultPackList = 0x1A,
kWaitForDialoguePackage = 0x1B,
kVirtualLocation = 0x1C,
kPersistAllLocation = 0x1D,
kPathingTestNPC = 0x1E,
kActionSwimStateChange = 0x1F,
kActionLook = 0x20,
kActionLeftAttack = 0x21,
kActionLeftReady = 0x22,
kActionLeftRelease = 0x23,
kActionLeftInterrupt = 0x24,
kActionRightAttack = 0x25,
kActionRightReady = 0x26,
kActionRightRelease = 0x27,
kActionRightInterrupt = 0x28,
kActionDualAttack = 0x29,
kActionDualRelease = 0x2A,
kActionActivate = 0x2B,
kActionJump = 0x2C,
kActionFall = 0x2D,
kActionLand = 0x2E,
kActionMantle = 0x2F,
kActionSneak = 0x30,
kActionVoice = 0x31,
kActionVoiceReady = 0x32,
kActionVoiceRelease = 0x33,
kActionVoiceInterrupt = 0x34,
kActionIdle = 0x35,
kActionSprintStart = 0x36,
kActionSprintStop = 0x37,
kActionDraw = 0x38,
kActionSheath = 0x39,
kActionLeftPowerAttack = 0x3A,
kActionRightPowerAttack = 0x3B,
kActionDualPowerAttack = 0x3C,
kActionLeftSyncAttack = 0x3D,
kActionRightSyncAttack = 0x3E,
kActionStaggerStart = 0x3F,
kActionBlockHit = 0x40,
kActionBlockAnticipate = 0x41,
kActionRecoil = 0x42,
kActionLargeRecoil = 0x43,
kActionBleedoutStart = 0x44,
kActionBleedoutStop = 0x45,
kActionIdleStop = 0x46,
kActionWardHit = 0x47,
kActionForceEquip = 0x48,
kActionShieldChange = 0x49,
kActionPathStart = 0x4A,
kActionPathEnd = 0x4B,
kActionLargeMovementDelta = 0x4C,
kActionFlyStart = 0x4D,
kActionFlyStop = 0x4E,
kActionHoverStart = 0x4F,
kActionHoverStop = 0x50,
kActionBumpedInto = 0x51,
kActionSummonedStart = 0x52,
kActionDialogueTalking = 0x53,
kActionDialogueListen = 0x54,
kActionDialogueListenPositive = 0x55,
kActionDialogueListenNegative = 0x56,
kActionDialogueListenQuestion = 0x57,
kActionDialogueListenNeutral = 0x58,
kActionDialogueEnter = 0x59,
kActionDialogueExit = 0x5A,
kActionDeath = 0x5B,
kActionDeathWait = 0x5C,
kActionIdleWarn = 0x5D,
kActionMoveStart = 0x5E,
kActionMoveStop = 0x5F,
kActionTurnRight = 0x60,
kActionTurnLeft = 0x61,
kActionTurnStop = 0x62,
kActionMoveForward = 0x63,
kActionMoveBackward = 0x64,
kActionMoveLeft = 0x65,
kActionMoveRight = 0x66,
kActionKnockdown = 0x67,
kActionGetUp = 0x68,
kActionIdleStopInstant = 0x69,
kActionRagdollInstant = 0x6A,
kActionWaterwalkStart = 0x6B,
kActionReload = 0x6C,
kActionBoltCharge = 0x6D,
kActionSighted = 0x6E,
kActionSightedRelease = 0x6F,
kActionMelee = 0x70,
kActionFireSingle = 0x71,
kActionFireCharge = 0x72,
kActionFireChargeHold = 0x73,
kActionFireAuto = 0x74,
kActionFireEmpty = 0x75,
kActionThrow = 0x76,
kActionEnterCover = 0x77,
kActionExitCover = 0x78,
kActionCoverSprintStart = 0x79,
kActionShuffle = 0x7A,
kActionPipboy = 0x7B,
kActionPipboyClose = 0x7C,
kActionPipboyZoom = 0x7D,
kActionPipboyStats = 0x7E,
kActionPipboyInventory = 0x7F,
kActionPipboyData = 0x80,
kActionPipboyMap = 0x81,
kActionPipboyTab = 0x82,
kActionPipboyTabPrevious = 0x83,
kActionPipboySelect = 0x84,
kActionPipboyRadioOn = 0x85,
kActionPipboyRadioOff = 0x86,
kActionPipboyLoadHolotape = 0x87,
kActionPipboyInspect = 0x88,
kActionNonSupportContact = 0x89,
kActionInteractionEnter = 0x8A,
kActionInteractionExit = 0x8B,
kActionInteractionExitAlternate = 0x8C,
kActionInteractionExitQuick = 0x8D,
kActionIntimidate = 0x8E,
kActionGunChargeStart = 0x8F,
kActionGunDown = 0x90,
kActionGunRelaxed = 0x91,
kActionGunAlert = 0x92,
kActionGunReady = 0x93,
kActionFlipThrow = 0x94,
kActionEnterCombat = 0x95,
kActionExitCombat = 0x96,
kActionLimbCritical = 0x97,
kActionEvade = 0x98,
kActionDodge = 0x99,
kActionAoEAttack = 0x9A,
kActionPanic = 0x9B,
kActionCower = 0x9C,
kActionTunnel = 0x9D,
kActionHide = 0x9E,
kPickupSoundGeneric = 0x9F,
kPutdownSoundGeneric = 0xA0,
kPickupSoundWeapon = 0xA1,
kPutdownSoundWeapon = 0xA2,
kPickupSoundArmor = 0xA3,
kPutdownSoundArmor = 0xA4,
kPickupSoundBook = 0xA5,
kPutdownSoundBook = 0xA6,
kPickupSoundIngredient = 0xA7,
kPutdownSoundIngredient = 0xA8,
kHarvestSound = 0xA9,
kHarvestFailedSound = 0xAA,
kWardBreakSound = 0xAB,
kWardAbsorbSound = 0xAC,
kWardDeflectSound = 0xAD,
kMagicFailSound = 0xAE,
kShoutFailSound = 0xAF,
kHeartbeatSoundFast = 0xB0,
kHeartbeatSoundSlow = 0xB1,
kImagespaceLowHealth = 0xB2,
kSoulCapturedSound = 0xB3,
kNoActivationSound = 0xB4,
kMapMenuLoopingSound = 0xB5,
kDialogueVoiceCategory = 0xB6,
kNonDialogueVoiceCategory = 0xB7,
kSFXToFadeInDialogueCategory = 0xB8,
kPauseDuringMenuCategoryFade = 0xB9,
kPauseDuringMenuCategoryImmediate = 0xBA,
kPauseDuringLoadingMenuCategory = 0xBB,
kMusicSoundCategory = 0xBC,
kStatsMuteCategory = 0xBD,
kStatsMusic = 0xBE,
kMasterSoundCategory = 0xBF,
kDialogueOutputModel3D = 0xC0,
kDialogueOutputModel2D = 0xC1,
kPlayersOutputModel1stPerson = 0xC2,
kPlayersOutputModel3rdPerson = 0xC3,
kInterfaceOutputModel = 0xC4,
kReverbType = 0xC5,
kUnderwaterLoopSound = 0xC6,
kUnderwaterReverbType = 0xC7,
kKeywordHorse = 0xC8,
kKeywordUndead = 0xC9,
kKeywordNPC = 0xCA,
kKeywordDummyObject = 0xCC,
kKeywordUseGeometryEmitter = 0xCD,
kKeywordMustStop = 0xCE,
kMaleFaceTextureSetHead = 0xCF,
kMaleFaceTextureSetMouth = 0xD0,
kMaleFaceTextureSetEyes = 0xD1,
kFemaleFaceTextureSetHead = 0xD2,
kFemaleFaceTextureSetMouth = 0xD3,
kFemaleFaceTextureSetEyes = 0xD4,
kImageSpaceModifierForInventoryMenu = 0xD5,
kImageSpaceModifierForPipboyMenuInPowerArmor = 0xD6,
kPackageTemplate = 0xD7,
kMainMenuCell = 0xD8,
kDefaultMovementTypeDefault = 0xD9,
kDefaultMovementTypeSwim = 0xDA,
kDefaultMovementTypeFly = 0xDB,
kDefaultMovementTypeSneak = 0xDC,
kKeywordSpecialFurniture = 0xDD,
kKeywordFurnitureForces1stPerson = 0xDE,
kKeywordFurnitureForces3rdPerson = 0xDF,
kKeywordActivatorFurnitureNoPlayer = 0xE0,
kTelekinesisGrabSound = 0xE1,
kTelekinesisThrowSound = 0xE2,
kWorldMapWeather = 0xE3,
kHelpManualPC = 0xE4,
kHelpManualXBox = 0xE5,
kKeywordTypeAmmo = 0xE6,
kKeywordTypeArmor = 0xE7,
kKeywordTypeBook = 0xE8,
kKeywordTypeIngredient = 0xE9,
kKeywordTypeKey = 0xEA,
kKeywordTypeMisc = 0xEB,
kKeywordTypeSoulGem = 0xEC,
kKeywordTypeWeapon = 0xED,
kKeywordTypePotion = 0xEE,
kBaseWeaponEnchantment = 0xEF,
kBaseArmorEnchantment = 0xF0,
kBasePotion = 0xF1,
kBasePoison = 0xF2,
kKeywordDragon = 0xF3,
kKeywordMovable = 0xF4,
kArtObjectAbsorbEffect = 0xF5,
kWeaponMaterialList = 0xF6,
kArmorMaterialList = 0xF7,
kKeywordDisallowEnchanting = 0xF8,
kFavortravelmarkerlocation = 0xF9,
kTeammateReadyWeapon = 0xFA,
kKeywordHoldLocation = 0xFB,
kKeywordCivilWarOwner = 0xFC,
kKeywordCivilWarNeutral = 0xFD,
kLocRefTypeCivilWarSoldier = 0xFE,
kKeywordClearableLocation = 0xFF,
kLocRefTypeResourceDestructible = 0x100,
kFormListHairColorList = 0x101,
kComplexSceneObject = 0x102,
kKeywordReusableSoulGem = 0x103,
kKeywordAnimal = 0x104,
kKeywordDaedra = 0x105,
kKeywordRobot = 0x106,
kKeywordNirnroot = 0x107,
kFightersGuildFaction = 0x108,
kMagesGuildFaction = 0x109,
kThievesGuildFaction = 0x10A,
kDarkBrotherhoodFaction = 0x10B,
kJarlFaction = 0x10C,
kBunnyFaction = 0x10D,
kPlayerIsVampireVariable = 0x10E,
kRoadMarker = 0x110,
kKeywordScaleActorTo10 = 0x111,
kKeywordVampire = 0x112,
kKeywordForge = 0x113,
kKeywordCookingPot = 0x114,
kKeywordSmelter = 0x115,
kKeywordTanningRack = 0x116,
kHelpBasicLockpickingPC = 0x117,
kHelpBasicLockpickingConsole = 0x118,
kHelpBasicForging = 0x119,
kHelpBasicCooking = 0x11A,
kHelpBasicSmelting = 0x11B,
kHelpBasicTanning = 0x11C,
kHelpBasicObjectCreation = 0x11D,
kHelpBasicEnchanting = 0x11E,
kHelpBasicSmithingWeapon = 0x11F,
kHelpBasicSmithingArmor = 0x120,
kHelpBasicAlchemy = 0x121,
kHelpBarter = 0x122,
kHelpLevelingup = 0x123,
kHelpSkillsMenu = 0x124,
kHelpMapMenu = 0x125,
kHelpJournal = 0x126,
kHelpLowHealth = 0x127,
kHelpLowMagicka = 0x128,
kHelpLowStamina = 0x129,
kHelpJail = 0x12A,
kHelpTeamateFavor = 0x12B,
kHelpWeaponCharge = 0x12C,
kHelpFavorites = 0x12D,
kKinectHelpFormList = 0x12E,
kImagespaceLoadscreen = 0x12F,
kKeywordWeaponMaterialDaedric = 0x130,
kKeywordWeaponMaterialDraugr = 0x131,
kKeywordWeaponMaterialDraugrHoned = 0x132,
kKeywordWeaponMaterialDwarven = 0x133,
kKeywordWeaponMaterialEbony = 0x134,
kKeywordWeaponMaterialElven = 0x135,
kKeywordWeaponMaterialFalmer = 0x136,
kKeywordWeaponMaterialFalmerHoned = 0x137,
kKeywordWeaponMaterialGlass = 0x138,
kKeywordWeaponMaterialImperial = 0x139,
kKeywordWeaponMaterialIron = 0x13A,
kKeywordWeaponMaterialOrcish = 0x13B,
kKeywordWeaponMaterialSteel = 0x13C,
kKeywordWeaponMaterialWood = 0x13D,
kKeywordWeaponTypeBoundArrow = 0x13E,
kKeywordArmorMaterialDaedric = 0x13F,
kKeywordArmorMaterialDragonplate = 0x140,
kKeywordArmorMaterialDragonscale = 0x141,
kKeywordArmorMaterialDragonbone = 0x142,
kKeywordArmorMaterialDwarven = 0x143,
kKeywordArmorMaterialEbony = 0x144,
kKeywordArmorMaterialElven = 0x145,
kKeywordArmorMaterialElvenSplinted = 0x146,
kKeywordArmorMaterialFullLeather = 0x147,
kKeywordArmorMaterialGlass = 0x148,
kKeywordArmorMaterialHide = 0x149,
kKeywordArmorMaterialImperial = 0x14A,
kKeywordArmorMaterialImperialHeavy = 0x14B,
kKeywordArmorMaterialImperialReinforced = 0x14C,
kKeywordArmorMaterialIron = 0x14D,
kKeywordArmorMaterialIronBanded = 0x14E,
kKeywordArmorMaterialOrcish = 0x14F,
kKeywordArmorMaterialScaled = 0x150,
kKeywordArmorMaterialSteel = 0x151,
kKeywordArmorMaterialSteelPlate = 0x152,
kKeywordArmorMaterialStormcloak = 0x153,
kKeywordArmorMaterialStudded = 0x154,
kKeywordGenericCraftableKeyword01 = 0x155,
kKeywordGenericCraftableKeyword02 = 0x156,
kKeywordGenericCraftableKeyword03 = 0x157,
kKeywordGenericCraftableKeyword04 = 0x158,
kKeywordGenericCraftableKeyword05 = 0x159,
kKeywordGenericCraftableKeyword06 = 0x15A,
kKeywordGenericCraftableKeyword07 = 0x15B,
kKeywordGenericCraftableKeyword08 = 0x15C,
kKeywordGenericCraftableKeyword09 = 0x15D,
kKeywordGenericCraftableKeyword10 = 0x15E,
kKeywordnullptrMOD = 0x15F,
kKeywordJewelry = 0x160,
kKeywordCuirass = 0x161,
kLocalMapHidePlane = 0x162,
kSnowLODMaterial = 0x163,
kSnowLODMaterialHD = 0x164,
kDialogueImagespace = 0x165,
kDialogueFollowerQuest = 0x166,
kPotentialFollowerFaction = 0x167,
kVampireAvailablePerks = 0x169,
kVampireRace = 0x16B,
kVampireSpells = 0x16C,
kKeywordMount = 0x16D,
kVerletCape = 0x16E,
kFurnitureTestNPC = 0x16F,
kKeywordConditionalExplosion = 0x170,
kDefaultLight1 = 0x171,
kDefaultLight2 = 0x172,
kDefaultLight3 = 0x173,
kDefaultLight4 = 0x174,
kPipboyLight = 0x175,
kActionBeginLoopingActivate = 0x176,
kActionEndLoopingActivate = 0x177,
kWorkshopPlayerOwnership = 0x178,
kQuestMarkerFollower = 0x179,
kQuestMarkerLocation = 0x17A,
kQuestMarkerEnemy = 0x17B,
kQuestMarkerEnemyAbove = 0x17C,
kQuestMarkerEnemyBelow = 0x17D,
kWorkshopMiscItemKeyword = 0x17E,
kHeavyWeaponItemKeyword = 0x17F,
kMineItemKeyword = 0x180,
kGrenadeItemKeyword = 0x181,
kChemItemKeyword = 0x182,
kAlcoholItemKeyword = 0x183,
kFoodItemKeyword = 0x184,
kRepairKitItemKeyword = 0x185,
kMedbagitemKeyword = 0x186,
kGlovesitemKeyword = 0x187,
kHelmetitemkeyword = 0x188,
kClothesitemkeyword = 0x189,
kTotal
};
}
@@ -0,0 +1,25 @@
#pragma once
#include "RE/D/DEFAULT_OBJECT_TYPE.h"
#include "RE/E/ENUM_FORM_ID.h"
namespace RE
{
class DEFAULT_OBJECT_DATA
{
public:
[[nodiscard]] static std::span<DEFAULT_OBJECT_DATA, 394> GetDefaultObjectData()
{
static REL::Relocation<DEFAULT_OBJECT_DATA(*)[394]> data{ ID::DEFAULT_OBJECT_DATA::GetDefaultObjectData };
return { *data };
}
// members
const char* name; // 00
REX::TEnumSet<ENUM_FORM_ID, std::uint8_t> type; // 08
std::uint32_t uniqueID; // 0C
REX::TEnumSet<DEFAULT_OBJECT_TYPE, std::int32_t> doType; // 10
const char* newObjectName; // 18
};
static_assert(sizeof(DEFAULT_OBJECT_DATA) == 0x20);
}
@@ -0,0 +1,15 @@
#pragma once
namespace RE
{
enum class DEFAULT_OBJECT_TYPE : std::int32_t
{
kMisc = 0x0,
kFacegen = 0x1,
kMovement = 0x2,
kActions = 0x3,
kItems = 0x4,
kSounds = 0x5,
kKeywords = 0x6
};
}
@@ -0,0 +1,12 @@
#pragma once
namespace RE
{
enum class DETECTION_FORMULA_TYPE : std::uint32_t
{
kFormula = 0x0,
kRange = 0x1,
kVisual_Range = 0x2,
kSound_Range = 0x3,
};
}
@@ -0,0 +1,14 @@
#pragma once
namespace RE
{
enum class DETECTION_PRIORITY
{
kNone = 0x0,
kVeryLow = 0x1,
kLow = 0x2,
kNormal = 0x3,
kHigh = 0x4,
kCritical = 0x5,
};
}
@@ -0,0 +1,12 @@
#pragma once
namespace RE
{
enum class DETECTION_TYPE
{
kNormal = 0,
kProjectile = 1,
kEvent = 2,
kTotal = 3
};
}
@@ -0,0 +1,14 @@
#pragma once
namespace RE
{
class DIALOGUE_DATA
{
public:
// members
std::int8_t flags; // 0
std::int8_t type; // 1
std::uint16_t subtype; // 2
};
static_assert(sizeof(DIALOGUE_DATA) == 0x4);
}
@@ -0,0 +1,136 @@
#pragma once
namespace RE
{
enum class DIALOGUE_SUBTYPE : std::int32_t
{
kPlayerDialogue_Custom = 0x0,
kPlayerDialogue_Force_Greet = 0x1,
kPlayerDialogue_Player_Rumor = 0x2,
kPlayerDialogue_End = 0x3,
kCommandDialogue_Custom = 0x3,
kCommandDialogue_Call = 0x4,
kCommandDialogue_Follow = 0x5,
kCommandDialogue_Move = 0x6,
kCommandDialogue_Attack = 0x7,
kCommandDialogue_Inspect = 0x8,
kCommandDialogue_Retrieve = 0x9,
kCommandDialogue_Stay = 0xA,
kCommandDialogue_Release = 0xB,
kCommandDialogue_ShowRelationships = 0xC,
kCommandDialogue_Reject = 0xD,
kCommandDialogue_Heal = 0xE,
kCommandDialogue_Assign = 0xF,
kCommandDialogue_Enter = 0x10,
kSceneDialogue_Custom = 0x11,
kFavor_Show = 0x12,
kFavor_Agree = 0x13,
kFavor_Refuse = 0x14,
kFavor_Exit_State = 0x15,
kFavor_Morality_Refuse = 0x16,
kFavor_Trade = 0x17,
kFavor_Pathing_Reject = 0x18,
kCombat_Attack = 0x19,
kCombat_Power_Attack = 0x1A,
kCombat_Bash = 0x1B,
kCombat_Hit = 0x1C,
kCombat_Flee = 0x1D,
kCombat_Bleed_Out = 0x1E,
kCombat_Avoid_Threat = 0x1F,
kCombat_Death = 0x20,
kCombat_Block = 0x21,
kCombat_Taunt = 0x22,
kCombat_Throw_Grenade = 0x23,
kCombat_Ally_Killed = 0x24,
kCombat_Order_Fallback = 0x25,
kCombat_Order_Advance = 0x26,
kCombat_Order_Flank = 0x27,
kCombat_Order_Take_Cover = 0x28,
kCombat_Fallback = 0x29,
kCombat_Request_Support = 0x2A,
kCombat_Provide_Support = 0x2B,
kCombat_Crippled_Limb = 0x2C,
kCombat_Paired_Attack = 0x2D,
kCombat_Steal = 0x2E,
kCombat_Yield = 0x2F,
kCombat_Accept_Yield = 0x30,
kCombat_Pickpocket = 0x31,
kCombat_Assault = 0x32,
kCombat_Murder = 0x33,
kCombat_Assault_NC = 0x34,
kCombat_Murder_NC = 0x35,
kCombat_Pickpocket_NC = 0x36,
kCombat_Steal_NC = 0x37,
kCombat_Trespass_NC = 0x38,
kCombat_Guard_Trespass = 0x39,
kCombat_Unused = 0x3A,
kCombat_Voice_Power_Start = 0x3B,
kCombat_Voice_Power_Start_Short = 0x3B,
kCombat_Voice_Power_Start_Long = 0x3C,
kCombat_Voice_Power_End_Short = 0x3D,
kCombat_Voice_Power_End_Long = 0x3E,
kCombat_Voice_Power_End = 0x3E,
kDetection_Alert_Idle = 0x3F,
kDetection_Lost_Idle = 0x40,
kDetection_Normal_To_Alert = 0x41,
kDetection_Normal_To_Combat = 0x42,
kDetection_Normal_To_Lost = 0x43,
kDetection_Alert_To_Normal = 0x44,
kDetection_Alert_To_Combat = 0x45,
kDetection_Combat_To_Normal = 0x46,
kDetection_Combat_To_Lost = 0x47,
kDetection_Lost_To_Normal = 0x48,
kDetection_Lost_To_Combat = 0x49,
kDetection_Detect_Friend_Die = 0x4A,
kService_Refusal = 0x4B,
kService_Repair = 0x4C,
kService_Travel = 0x4D,
kService_Training = 0x4E,
kService_Barter_Exit = 0x4F,
kService_Repair_Exit = 0x50,
kService_Recharge = 0x51,
kService_Recharge_Exit = 0x52,
kService_Training_Exit = 0x53,
kMisc_Observe_Combat = 0x54,
kMisc_Corpse = 0x55,
kMisc_Time_To_Go = 0x56,
kMisc_Goodbye = 0x57,
kMisc_Hello = 0x58,
kMisc_Player_Action_Swing_Melee_Weapon = 0x59,
kMisc_Player_Action_Shoot_Bow = 0x5A,
kMisc_Player_Action_Z_Key_Object = 0x5B,
kMisc_Player_Action_Jumping = 0x5C,
kMisc_Player_Action_Knocking_Over_Objects = 0x5D,
kMisc_Player_Action_Destroy_Object = 0x5E,
kMisc_Player_Action_Stand_On_Furniture = 0x5F,
kMisc_Player_Action_Locked_Object = 0x60,
kMisc_Player_Action_Pickpocket = 0x61,
kMisc_Pursue_Idle = 0x62,
kMisc_InfoData = 0x63,
kMisc_SceneChoice = 0x64,
kMisc_Player_Action_Cast_Projectile_Spell = 0x65,
kMisc_Player_Action_Cast_Self_Spell = 0x66,
kMisc_Player_Action_Shout = 0x67,
kMisc_Idle = 0x68,
kMisc_Breath_Sprint_Sound = 0x69,
kMisc_Breath_Enter_Bow_Zoom_Sound = 0x6A,
kMisc_Breath_Exit_Bow_Zoom_Sound = 0x6B,
kMisc_Actor_Collide_With_Actor = 0x6C,
kMisc_Player_Iron_Sights = 0x6D,
kMisc_Out_Off_Breath_Sound = 0x6E,
kMisc_Combat_Grunt = 0x6F,
kMisc_Breath_Leave_Water = 0x70,
kMisc_Impatient_Positive = 0x71,
kMisc_Impatient_Negative = 0x72,
kMisc_Impatient_Neutral = 0x73,
kMisc_Impatient_Question = 0x74,
kMisc_Waiting_Player_Input = 0x75,
kMisc_Greeting = 0x76,
kMisc_Player_Activate_Door = 0x77,
kMisc_Player_Activate_Terminals = 0x78,
kMisc_Player_Activate_Furniture = 0x79,
kMisc_Player_Activate_Activators = 0x7A,
kMisc_Player_Activate_Container = 0x7B,
kMisc_Player_Aquire_Featured_Item = 0x7C,
};
}
@@ -0,0 +1,16 @@
#pragma once
namespace RE
{
enum class DIALOGUE_TYPE : std::int32_t
{
kPlayerDialogue = 0x0,
kCommandDialogue = 0x1,
kSceneDialogue = 0x2,
kCombat = 0x3,
kFavors = 0x4,
kDetection = 0x5,
kService = 0x6,
kMiscellaneous = 0x7,
};
}
@@ -0,0 +1,13 @@
#pragma once
namespace RE
{
enum class DIRECTION_VAL : std::int32_t
{
kNone = 0x0,
kUp = 0x1,
kRight = 0x2,
kDown = 0x3,
kLeft = 0x4
};
}
@@ -0,0 +1,19 @@
#pragma once
#include "RE/N/NiPoint3.h"
#include "RE/N/NiPointer.h"
namespace RE
{
class bhkNPCollisionObject;
class DamageImpactData
{
// members
NiPoint3A location; // 00
NiPoint3A normal; // 10
NiPoint3A velocity; // 20
NiPointer<bhkNPCollisionObject> colObj; // 30
};
static_assert(sizeof(DamageImpactData) == 0x40);
}
@@ -0,0 +1,14 @@
#pragma once
#include "RE/D/DECAL_DATA_DATA.h"
namespace RE
{
class DecalData
{
public:
// members
DECAL_DATA_DATA data; // 00
};
static_assert(sizeof(DecalData) == 0x24);
}
@@ -0,0 +1,41 @@
#pragma once
#include "RE/B/BGSDefaultObject.h"
#include "RE/I/IFormFactory.h"
namespace RE
{
class DefaultObjectFormFactory :
public IFormFactory // 00
{
public:
static constexpr auto RTTI{ RTTI::__DefaultObjectFormFactory };
static constexpr auto VTABLE{ VTABLE::__DefaultObjectFormFactory };
virtual ~DefaultObjectFormFactory(); // 00
// override
[[nodiscard]] TESForm* DoCreate() override // 01
{
return new BGSDefaultObject("", ENUM_FORM_ID::kNONE, "");
}
[[nodiscard]] const char* GetFormName() const override { return "DefaultObject"; } // 02
[[nodiscard]] ENUM_FORM_ID GetFormID() const override { return ENUM_FORM_ID::kDFOB; } // 03
[[nodiscard]] const char* GetObjectName() const override { return "DefaultObject"; } // 04
[[nodiscard]] OBJECT_TYPE GetObjectType() const override; // 05
[[nodiscard]] OBJECT_CATEGORY_TYPE GetObjectCategory() const override; // 06
[[nodiscard]] static BGSDefaultObject* Create(const char* a_name, const char* a_description, ENUM_FORM_ID a_formType)
{
auto form = new BGSDefaultObject(a_name, a_formType, a_description);
return form;
}
[[nodiscard]] static BGSDefaultObject* Create(const char* a_name, ENUM_FORM_ID a_formType)
{
return Create(a_name, "", a_formType);
}
};
static_assert(sizeof(DefaultObjectFormFactory) == 0x08);
}
@@ -0,0 +1,22 @@
#pragma once
#include "RE/B/BGSBodyPartDefs.h"
#include "RE/N/NiPointer.h"
namespace RE
{
class NiNode;
class DeferredHideLimb
{
public:
// members
float dismemberTimer; // 00
REX::TEnumSet<BGSBodyPartDefs::LIMB_ENUM, std::uint32_t> limbIndex; // 04
NiPointer<NiNode> dismemberedLimbRoot; // 08
NiPointer<NiNode> replacementLimb; // 10
DeferredHideLimb* next; // 18
bool explosion; // 20
};
static_assert(sizeof(DeferredHideLimb) == 0x28);
}
@@ -0,0 +1,17 @@
#pragma once
#include "RE/N/NiPoint3.h"
namespace RE
{
class DesiredMovementData
{
public:
// members
NiPoint3A position; // 00
NiPoint3A orientation; // 10
NiPoint3A movementSpeed; // 20
NiPoint3A rotationSpeed; // 30
};
static_assert(sizeof(DesiredMovementData) == 0x40);
}
@@ -0,0 +1,26 @@
#pragma once
#include "RE/B/BGSTypedFormValuePair.h"
#include "RE/B/BSTArray.h"
#include "RE/B/BSTTuple.h"
#include "RE/N/NiPointer.h"
namespace RE
{
class DestructibleObjectStage;
class QueuedFile;
class DestructibleObjectData
{
public:
// members
std::uint32_t health; // 00
std::int8_t numStages; // 04
std::int8_t flags; // 05
DestructibleObjectStage** stagesArray; // 08
BSTArray<BSTTuple<TESForm*, BGSTypedFormValuePair::SharedVal>>* damageTypes; // 10
volatile std::int32_t replacementModelRefCount; // 18
NiPointer<QueuedFile> preloadedReplacementModels; // 20
};
static_assert(sizeof(DestructibleObjectData) == 0x28);
}
@@ -0,0 +1,24 @@
#pragma once
#include "RE/B/BSFixedString.h"
namespace RE
{
class BGSModelMaterialSwap;
class DestructibleObjectStage
{
public:
// members
std::int8_t modelDamageStage; // 00
std::int8_t healthPercentage; // 01
std::int8_t flags; // 02
std::uint32_t selfDamagePerSecond; // 04
BGSExplosion* explosion; // 08
BGSDebris* debris; // 10
std::uint32_t debrisCount; // 18
BGSModelMaterialSwap* replacementModel; // 20
BSFixedString sequenceName; // 28
};
static_assert(sizeof(DestructibleObjectStage) == 0x30);
}
@@ -0,0 +1,21 @@
#pragma once
#include "RE/D/DetectionFormulaData.h"
#include "RE/D/DetectionLevels.h"
#include "RE/N/NiPoint3.h"
namespace RE
{
enum class DETECTION_TYPE;
class DetectionData :
public DetectionFormulaData // 00
{
public:
// members
NiPoint3 detectedLocation; // 74
DetectionLevels detectionLevel; // 80
DETECTION_TYPE detectionType; // 84
};
static_assert(sizeof(DetectionData) == 0x88);
}
@@ -0,0 +1,19 @@
#pragma once
#include "RE/A/AITimeStamp.h"
#include "RE/B/BSPointerHandle.h"
#include "RE/N/NiPoint3.h"
namespace RE
{
class DetectionEvent
{
public:
// members
std::uint32_t actionValue; // 00
NiPoint3 location; // 04
AITimeStamp timeStamp; // 10
ObjectRefHandle ref; // 14
};
static_assert(sizeof(DetectionEvent) == 0x18);
}
@@ -0,0 +1,53 @@
#pragma once
#include "RE/A/ACTOR_LOS_LOCATION.h"
#include "RE/A/AITimeStamp.h"
namespace RE
{
class DetectionFormulaData
{
public:
// members
ACTOR_LOS_LOCATION losLocation; // 00
AITimeStamp timeStamp; // 04
std::uint32_t ambush; // 08
std::uint32_t targetRaceSize; // 0C
std::uint32_t targetActionSound; // 10
float lightLevel; // 14
float modifiedLightLevel; // 18
float visualDetectionDistance; // 1C
float soundDetectionDistance; // 20
float perception; // 24
float basePerception; // 28
float blindness; // 2C
float deafness; // 30
float targetDistance; // 34
float targetAngle; // 38
float targetVerticalAngle; // 3C
float targetAgility; // 40
float targetSneakSkill; // 44
float targetBaseStealth; // 48
float targetEquippedWeight; // 4C
float targetMovementNoiseMult; // 50
float targetStealth; // 54
float targetVisibility; // 58
float visualDetectionLevel; // 5C
float soundDetectionLevel; // 60
bool LOS; // 64
bool LOS360; // 65
bool exterior; // 66
bool alert; // 67
bool sleeping; // 68
bool nightEye; // 69
bool targetMoving; // 6A
bool targetRunning; // 6B
bool targetSneaking; // 6C
bool targetInvisible; // 6D
bool targetInCover; // 6E
bool targetObserved; // 6F
bool combatTarget; // 70
bool flying; // 71
};
static_assert(sizeof(DetectionFormulaData) == 0x74);
}
@@ -0,0 +1,13 @@
#pragma once
namespace RE
{
class DetectionLevels
{
public:
// members
std::int16_t visualLevel; // 00
std::int16_t soundLevel; // 02
};
static_assert(sizeof(DetectionLevels) == 0x04);
}
@@ -0,0 +1,25 @@
#pragma once
#include "RE/I/InputEvent.h"
namespace RE
{
class __declspec(novtable) DeviceConnectEvent :
public InputEvent // 00
{
public:
static constexpr auto RTTI{ RTTI::DeviceConnectEvent };
static constexpr auto VTABLE{ VTABLE::DeviceConnectEvent };
static constexpr auto TYPE{ INPUT_EVENT_TYPE::kDeviceConnect };
// NOLINTNEXTLINE(modernize-use-override)
virtual ~DeviceConnectEvent() = default; // 00
// members
bool connected{ true }; // 28
};
static_assert(sizeof(DeviceConnectEvent) == 0x30);
extern template DeviceConnectEvent* InputEvent::As() noexcept;
extern template const DeviceConnectEvent* InputEvent::As() const noexcept;
}
@@ -0,0 +1,35 @@
#pragma once
#include "RE/B/BSTArray.h"
namespace RE
{
class DialogueResponse;
class TESObjectREFR;
class TESQuest;
class TESTopic;
class TESTopicInfo;
class DialogueItem
{
public:
~DialogueItem();
DialogueResponse* GetCurrentResponse()
{
return currentResponse < responses.size() ? responses[currentResponse] : nullptr;
}
// members
BSTArray<DialogueResponse*> responses{}; // 00
TESTopicInfo* info{}; // 18
TESTopic* topic{}; // 20
TESQuest* quest{}; // 28
TESObjectREFR* speaker{}; // 30
std::uint32_t currentResponse{ static_cast<std::uint32_t>(-1) }; // 38
bool endResponse{ false }; // 3C
bool canSkip{ false }; // 3D
bool subtitle{ false }; // 3E
};
static_assert(sizeof(DialogueItem) == 0x40);
}
@@ -0,0 +1,32 @@
#pragma once
#include "RE/B/BSTEvent.h"
#include "RE/B/BSTSmartPointer.h"
#include "RE/G/GameMenuBase.h"
#include "RE/H/HUDPerkVaultBoySwfDisplayEvent.h"
#include "RE/S/ShowingDialogueSpeechChallengeAnim.h"
namespace RE
{
class BSInputEnableLayer;
class __declspec(novtable) DialogueMenu :
public GameMenuBase // 00
{
public:
static constexpr auto RTTI{ RTTI::DialogueMenu };
static constexpr auto VTABLE{ VTABLE::DialogueMenu };
static constexpr auto MENU_NAME{ "DialogueMenu"sv };
// Members
std::unique_ptr<BSGFxShaderFXTarget> dialogueButtonOBJs[4];
std::unique_ptr<BSGFxShaderFXTarget> speechChallengeAnimObj;
BSTValueEventSink<HUDPerkVaultBoySwfDisplayEvent> currentVBPerk;
BSTValueEventSource<ShowingDialogueSpeechChallengeAnim> showingSpeechChallenge;
BSTSmartPointer<BSInputEnableLayer> inputLayer;
UserEvents::INPUT_CONTEXT_ID currentContext;
bool isLookingAtPlayer;
bool areButtonsShown;
};
static_assert(sizeof(DialogueMenu) == 0x168);
}
@@ -0,0 +1,28 @@
#pragma once
namespace RE
{
namespace DialogueMenuUtils
{
inline void OpenMenu()
{
using func_t = decltype(&DialogueMenuUtils::OpenMenu);
static REL::Relocation<func_t> func{ ID::DialogueMenuUtils::OpenMenu };
return func();
}
inline void CloseMenu()
{
using func_t = decltype(&DialogueMenuUtils::CloseMenu);
static REL::Relocation<func_t> func{ ID::DialogueMenuUtils::CloseMenu };
return func();
}
inline void ShowSpeechChallengeAnim()
{
using func_t = decltype(&DialogueMenuUtils::ShowSpeechChallengeAnim);
static REL::Relocation<func_t> func{ ID::DialogueMenuUtils::ShowSpeechChallengeAnim };
return func();
}
}
}
@@ -0,0 +1,28 @@
#pragma once
#include "RE/B/BSPointerHandle.h"
#include "RE/T/TESPackage.h"
namespace RE
{
class __declspec(novtable) DialoguePackage :
public TESPackage // 00
{
public:
static constexpr auto RTTI{ RTTI::DialoguePackage };
static constexpr auto VTABLE{ VTABLE::DialoguePackage };
static constexpr auto FORM_ID{ ENUM_FORM_ID::kPACK };
// members
ActorHandle talkingActor; // C8
ObjectRefHandle genericSecondLoc; // CC
ActorHandle actor; // D0
ActorHandle targetActor; // D4
bool actorHeadTrack; // D8
bool createdPack; // D9
float eventWaitTimer; // DC
float listenTimer; // E0
bool sceneGenerated; // E4
};
static_assert(sizeof(DialoguePackage) == 0xE8);
}
@@ -0,0 +1,27 @@
#pragma once
#include "RE/B/BSFixedString.h"
namespace RE
{
class BGSKeyword;
class BGSSoundDescriptorForm;
class TESIdleForm;
class DialogueResponse
{
public:
// members
BSFixedStringCS text; // 00
BGSKeyword* animFaceArchType; // 08
std::uint16_t percent; // 10
BSFixedString voice; // 18
TESIdleForm* speakerIdle; // 20
TESIdleForm* listenIdle; // 28
BGSSoundDescriptorForm* voiceSound; // 30
bool useEmotion; // 38
bool soundLip; // 39
bool endOnSceneEnd; // 3A
};
static_assert(sizeof(DialogueResponse) == 0x40);
}
@@ -0,0 +1,17 @@
#pragma once
namespace RE
{
enum class DifficultyLevel : std::int32_t
{
kVeryEasy = 0x0,
kLow = 0x0,
kEasy = 0x1,
kNormal = 0x2,
kHard = 0x3,
kVeryHard = 0x4,
kSurvival = 0x5,
kTrueSurvival = 0x6,
kHigh = 0x6,
};
}
@@ -0,0 +1,15 @@
#pragma once
namespace RE
{
class DisableHeavyItemsFunc
{
public:
// members
float playerCurrEncumbrance; // 00
float playerMaxEncumbrance; // 04
float containerCurrEncumbrance; // 08
float containerMaxEncumbrance; // 0C
};
static_assert(sizeof(DisableHeavyItemsFunc) == 0x10);
}
@@ -0,0 +1,15 @@
#pragma once
#include "RE/B/BSInputEventUser.h"
namespace RE
{
class __declspec(novtable) DisconnectHandler :
public BSInputEventUser
{
public:
static constexpr auto RTTI{ RTTI::DisconnectHandler };
static constexpr auto VTABLE{ VTABLE::DisconnectHandler };
};
static_assert(sizeof(DisconnectHandler) == 0x10);
}
@@ -0,0 +1,19 @@
#pragma once
#include "RE/B/BaseLoadedInventoryModel.h"
namespace RE
{
class DisplayItemModel :
public BaseLoadedInventoryModel // 00
{
public:
// members
float itemRotation; // 40
std::uint32_t uniqueIndex; // 44
std::uint16_t column; // 48
std::uint16_t index; // 4A
std::uint16_t row; // 4C
};
static_assert(sizeof(DisplayItemModel) == 0x50);
}
@@ -0,0 +1,23 @@
#pragma once
#include "RE/B/BSTEvent.h"
namespace RE
{
class DoBeforeNewOrLoadCompletedEvent
{
private:
using EventSource_t = BSTGlobalEvent::EventSource<DoBeforeNewOrLoadCompletedEvent>;
public:
[[nodiscard]] static EventSource_t* GetEventSource()
{
static REL::Relocation<EventSource_t**> singleton{ ID::DoBeforeNewOrLoadCompletedEvent::GetEventSource };
if (!*singleton) {
*singleton = new EventSource_t(&BSTGlobalEvent::GetSingleton()->eventSourceSDMKiller);
}
return *singleton;
}
};
static_assert(sizeof(DoBeforeNewOrLoadCompletedEvent) == 0x1);
}
@@ -0,0 +1,26 @@
#pragma once
#include "RE/B/BSPointerHandle.h"
#include "RE/N/NiPoint3.h"
namespace RE
{
class DoorTeleportData
{
public:
enum class TELEPORT_DATA_FLAGS
{
kNoAlarm = 0x0,
kInstant = 0x1,
kRelative = 0x4
};
// members
TESObjectCELL* transitionCell; // 00
ObjectRefHandle linkedDoor; // 08
NiPoint3 position; // 0C
NiPoint3 rotation; // 18
std::uint8_t flags; // 24
};
static_assert(sizeof(DoorTeleportData) == 0x28);
}
@@ -0,0 +1,26 @@
#pragma once
namespace RE
{
enum class _D3DBLEND
{
kZero = 0x1,
kOne = 0x2,
kSrcColor = 0x3,
kInvSrcColor = 0x4,
kSrcAlpha = 0x5,
kInvSrcAlpha = 0x6,
kDestAlpha = 0x7,
kInvDestAlpha = 0x8,
kDestColor = 0x9,
kInvDestColor = 0xA,
kSrcAlphaSat = 0xB,
kBothSrcAlpha = 0xC,
kBothInvSrcAlpha = 0xD,
kBlendFactor = 0xE,
kInvBlendFactor = 0xF,
kSrcColor2 = 0x10,
kInvSrcColor2 = 0x11,
kForce_DWORD = 0x7FFFFFFF
};
}
@@ -0,0 +1,14 @@
#pragma once
namespace RE
{
enum class _D3DBLENDOP
{
kAdd = 0x1,
kSubtract = 0x2,
kRevSubtract = 0x3,
kMin = 0x4,
kMax = 0x5,
kForce_DWORD = 0x7FFFFFFF
};
}
@@ -0,0 +1,17 @@
#pragma once
namespace RE
{
enum class _D3DCMPFUNC
{
kNever = 0x1,
kLess = 0x2,
kEqual = 0x3,
kLessEqual = 0x4,
kGreater = 0x5,
kNotEqual = 0x6,
kGreaterEqual = 0x7,
kAlways = 0x8,
kForce_DWORD = 0x7FFFFFFF
};
}